diff --git a/.gitignore b/.gitignore index bd29c297b..36e4b51ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,40 +1,4 @@ -autom4te.cache -c/mlr go/mlr -mlrd -mlrg -mlrp -test-argparse -test-byte-readers -test-line-readers -test-dsl-stack -test-join-bucket-keeper -test-json-parser -test-lrec -test-rval-evaluators -test-mlhmmv -test-mlrregex -test-mlrutil -test-multiple-containers -test-parse-trie -test-peek-file-reader -test-string-builder -test_rval_evaluators -test_argparse -test_byte_readers -test_line_readers -test_join_bucket_keeper -test_json_parser -test_lrec -test_mlhmmv -test_mlrregex -test_mlrutil -test_multiple_containers -test_parse_trie -test_peek_file_reader -test_string_builder -output-regtest -termcvt a.out *.dSYM catc @@ -45,74 +9,23 @@ gmon.out *.pyc .sw? .*.sw? -c/parsing/lemon -c/parsing/mlr_dsl_lexer.c -c/parsing/mlr_dsl_lexer.h -c/parsing/mlr_dsl_parse.c -c/parsing/mlr_dsl_parse.h -c/parsing/mlr_dsl_parse.out -c/reg_test/output -c/output/out tags -*.la -*.lo -*.log -*.trs *~ -.deps/ -.libs/ -config.h -config.log -config.status -libtool -stamp-h1 -ap -getl -lemon_prepared -lrim mlr-[0-9.]*.tar.* -c/jkopush -c/run_mlr -c/mlr_expect_fail -c/run_mlr_for_auxents -c/push2 push2 data/.gitignore docs/_build docs6/_build -c/mlr.static miller-*.src.rpm mlr.exe mlr.linux.x86_64 mlr.macosx -msys-2.0.dll data/big.* data/nmc?.* -/Makefile -c/Makefile -c/auxents/Makefile -c/cli/Makefile -c/containers/Makefile -c/dsl/Makefile -c/experimental/Makefile -c/input/Makefile -c/lib/Makefile -c/mapping/Makefile -c/output/Makefile -c/parsing/Makefile -c/reg_test/Makefile -c/reg_test/expected/Makefile -c/reg_test/input/Makefile -c/reg_test/input/comments/Makefile -c/reg_test/input/rfc-csv/Makefile -c/stream/Makefile -c/unit_test/Makefile -man/Makefile - experiments/dsl-parser/one/src experiments/dsl-parser/one/main experiments/dsl-parser/two/src @@ -120,4 +33,4 @@ experiments/dsl-parser/two/main experiments/cli-parser/cliparse experiments/cli-parser/cliparse.exe -docs6/site/ +docs/site/ diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index cde5b21d6..000000000 --- a/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -# not GPL, thus no COPYING file -AUTOMAKE_OPTIONS=foreign - -EXTRA_DIST= LICENSE.txt README.md - -SUBDIRS=c man diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 9af1e4e95..000000000 --- a/Makefile.in +++ /dev/null @@ -1,823 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(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) $(am__DIST_COMMON) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = 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 -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 distdir 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 -DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/autotools/ar-lib $(top_srcdir)/autotools/compile \ - $(top_srcdir)/autotools/config.guess \ - $(top_srcdir)/autotools/config.sub \ - $(top_srcdir)/autotools/install-sh \ - $(top_srcdir)/autotools/ltmain.sh \ - $(top_srcdir)/autotools/missing autotools/ar-lib \ - autotools/compile autotools/config.guess autotools/config.sub \ - autotools/install-sh autotools/ltmain.sh autotools/missing -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 -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@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ - -# not GPL, thus no COPYING file -AUTOMAKE_OPTIONS = foreign -EXTRA_DIST = LICENSE.txt README.md -SUBDIRS = c man -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign 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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(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: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -# 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 - -distdir: $(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-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 ;;\ - 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) dvi \ - && $(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 -check: check-recursive -all-am: Makefile config.h -installdirs: installdirs-recursive -installdirs-am: -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 mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am 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-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-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 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: - -.MAKE: $(am__recursive_targets) all install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-am clean clean-cscope clean-generic \ - 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 distcheck distclean distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck 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 installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean 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: diff --git a/Makefile.no-autoconfig b/Makefile.no-autoconfig deleted file mode 100644 index cf53309d7..000000000 --- a/Makefile.no-autoconfig +++ /dev/null @@ -1,33 +0,0 @@ -# ================================================================ -# NOTE: This makefile is not intended to be used in a packaging system -- -# rather, Miller uses autconfig for that. This makefile is intended for users -# who prefer (for whatever reason) to bypass autoconfig. Please also see -# http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig -# ================================================================ - -MANDIR ?= /usr/share/man -DESTDIR ?= - -all: c manpage -devall: c install docs -# TODO: the install target exists to put most-recent mlr executable in the -# path to be picked up by the mlr-execs in the docs dir. better would be to -# export PATH here with ./c at its head. -c: .always - make -C c -f Makefile.no-autoconfig top -docs: .always - cd docs && make html -install: .always - make -C c -f Makefile.no-autoconfig install - install -d -m 0755 $(DESTDIR)/$(MANDIR) - install -m 0644 docs/miller.1 $(DESTDIR)/$(MANDIR) -clean: .always - make -C c -f Makefile.no-autoconfig clean -.PHONY: manpage -# OSX: -# * brew install asciidoc -# * export XML_CATALOG_FILES=/usr/local/etc/xml/catalog -manpage: .always - make -C man manpage -.always: - @true diff --git a/README-autobuild.md b/README-autobuild.md deleted file mode 100644 index a70604819..000000000 --- a/README-autobuild.md +++ /dev/null @@ -1,38 +0,0 @@ -# Status as of May 2021 - -## Go port - -GitHub actions are fine for Linux/MacOS/Windows at https://github.com/johnkerl/miller/actions. - -## C implementation - -### Travis CI for non-Windows - -* Travis was in place for years now -* As of May 2021 `travis-ci.org` is moving to `travis-ci.com` -* I am getting 404s in the Webhook setup on the GitHub side but builds are trigger on the Travis side which is baffling -* This is chewing through credits at a furious rate regardless -* Also, almost all commits these days are on the Go code so trigger a build of the C code on each commit is not a good use of resources -* In summary: Travis CI is not currently working, and isn't worth fixing - -### GitHub actions for non-Windows - -* Incompatible with `autoconf` as described at https://www.preining.info/blog/2018/12/git-and-autotools-a-hate-relation/ -* In summary `autoconf` does not work with GitHub Actions, and this does not appear to be a forward path - -### Conclusion for non-Windows - -* For those rare commits which do involve C code -- until the Go port is complete -- I'll runs C makes manually. -* For releases, I'll run them manually -- which is the current process [as defined here](https://miller.readthedocs.io/en/latest/build.html#creating-a-new-release-for-developers). - -### Windows builds - -This used: - -* [appveyor.yml](appveyor.yml) -* https://ci.appveyor.com/project/johnkerl/miller -* https://github.com/johnkerl/miller/settings/hooks - -Unfortunately, I understand next to nothing about what I'm doing here -- whenever the AppVeyor build breaks (and the Travis build doesn't) I end up googling for various things in the https://ci.appveyor.com/project/johnkerl/miller build-log output, then iteratively updating `appveyor.yml` until I can get a build again. - -As of May 2021 I've disabled Appveyor builds. Moving forward, for the C implementation I'll build Windows executables on a personal laptop and upload `mlr.exe` when I cut a release. diff --git a/aclocal.m4 b/aclocal.m4 deleted file mode 100644 index 2253317e0..000000000 --- a/aclocal.m4 +++ /dev/null @@ -1,1235 +0,0 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- - -# Copyright (C) 1996-2017 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.69],, -[m4_warning([this file was generated for autoconf 2.69. -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'.])]) - -# Copyright (C) 2002-2017 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.15' -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.15.1], [], - [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.15.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Copyright (C) 2011-2017 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_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # 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__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2017 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-2017 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-2017 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-2017 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. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _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. FIXME. This creates each '.P' file that we will -# 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" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2017 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-2017 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-2017 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])]) - -# Copyright (C) 1998-2017 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_LEX -# ----------- -# Autoconf leaves LEX=: if lex or flex can't be found. Change that to a -# "missing" invocation, for better error output. -AC_DEFUN([AM_PROG_LEX], -[AC_PREREQ([2.50])dnl -AC_REQUIRE([AM_MISSING_HAS_RUN])dnl -AC_REQUIRE([AC_PROG_LEX])dnl -if test "$LEX" = :; then - LEX=${am_missing_run}flex -fi]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2017 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 to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2017 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 - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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-2017 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 - -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 86ae848ac..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,34 +0,0 @@ -# No longer used -- see README-autobuild.md -install: - - set PATH=C:\msys64\usr\bin;%PATH% - - bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" - - bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig" - - bash -lc "pacman-key --init" - - bash -lc "pacman-key --populate msys2" - - bash -lc "pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig" - - bash -lc "pacman --ask 20 -U msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz" - - ps: Get-Process | Where-Object {$_.path -like 'C:\msys64*'} | Stop-Process - - bash -lc "pacman --needed --ask 20 -Syu" - - bash -lc "pacman --needed --ask 20 -Sy" - - bash -lc "pacman --noconfirm -S base-devel" - - bash -lc "pacman --noconfirm -S msys2-devel" - - bash -lc "pacman --noconfirm -S mingw-w64-x86_64-toolchain" - - bash -lc "pacman --noconfirm -S mingw-w64-x86_64-pcre" - - bash -lc "pacman --noconfirm -S msys2-runtime" - - bash -lc "pacman --noconfirm -S isl" - -build_script: - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; pwd" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; ls -l" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; which gcc" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; gcc --version" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; pacman -Q" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; cat msys2-build.sh" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; bash -x msys2-build.sh || (cat config.log && exit 1)" - - bash -lc "cd $APPVEYOR_BUILD_FOLDER; cp /usr/bin/msys-2.0.dll ." - -artifacts: - - path: ./c/mlr.exe - name: Miller executable - - path: ./msys-2.0.dll - name: MSYS2 DLL diff --git a/autotools/ar-lib b/autotools/ar-lib deleted file mode 100755 index 05094d34c..000000000 --- a/autotools/ar-lib +++ /dev/null @@ -1,270 +0,0 @@ -#! /bin/sh -# Wrapper for Microsoft lib.exe - -me=ar-lib -scriptversion=2012-03-01.08; # UTC - -# Copyright (C) 2010-2017 Free Software Foundation, Inc. -# Written by Peter Rosin . -# -# This program is free software; you can 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 -# . - - -# func_error message -func_error () -{ - echo "$me: $1" 1>&2 - exit 1 -} - -file_conv= - -# func_file_conv build_file -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. -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*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv in - mingw) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_at_file at_file operation archive -# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE -# for each of them. -# When interpreting the content of the @FILE, do NOT use func_file_conv, -# since the user would need to supply preconverted file names to -# binutils ar, at least for MinGW. -func_at_file () -{ - operation=$2 - archive=$3 - at_file_contents=`cat "$1"` - eval set x "$at_file_contents" - shift - - for member - do - $AR -NOLOGO $operation:"$member" "$archive" || exit $? - done -} - -case $1 in - '') - func_error "no command. Try '$0 --help' for more information." - ;; - -h | --h*) - cat <. -# -# This program is free software; you can 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*) - 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/*) - 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 ) - 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 '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: diff --git a/autotools/config.guess b/autotools/config.guess deleted file mode 100755 index f50dcdb6d..000000000 --- a/autotools/config.guess +++ /dev/null @@ -1,1480 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-24' - -# 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; maintained since 2000 by Ben Elliston. -# -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess -# -# Please send patches to . - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Options: - -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-2018 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' | sed 's, ,,g'`" - - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl - fi - ;; -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=`(uname -p 2>/dev/null || \ - "/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 ;; - earmv*) - arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-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) and ABI. - case "$UNAME_MACHINE_ARCH" in - earm*) - os=netbsdelf - ;; - 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 - # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in - earm*) - expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` - ;; - 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/[-_].*//' | cut -d. -f1,2` - ;; - 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}${abi}" - 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 ;; - *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; - *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$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 ;; - *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; - *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; - mips:OSF1:*.*) - echo mips-dec-osf1 - 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 ;; - 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/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` - 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:4.4BSD:*) - 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) - UNAME_PROCESSOR=x86_64 ;; - i386) - UNAME_PROCESSOR=i586 ;; - esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; - i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; - *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; - *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; - *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - 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 ;; - i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-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 "[:upper:]" "[:lower:]"``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 ;; - e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-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 ;; - k1om: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; } - ;; - mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; - or32:Linux:*:* | or1k*: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 ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-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:*:*) - if objdump -f /bin/sh | grep -q elf32-x86-64; then - echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 - else - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - fi - 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.*:*) - 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 configure 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 ;; - SX-ACE:SUPER-UX:*:*) - echo sxace-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 test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - 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 - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi - fi - elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 - 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 ;; - NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-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 ;; - amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; -esac - -echo "$0: unable to guess system type" >&2 - -case "$UNAME_MACHINE:$UNAME_SYSTEM" in - mips:Linux | mips64:Linux) - # If we got here on MIPS GNU/Linux, output extra information. - cat >&2 <&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-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/autotools/config.sub b/autotools/config.sub deleted file mode 100755 index 1d8e98bce..000000000 --- a/autotools/config.sub +++ /dev/null @@ -1,1801 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-22' - -# 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"). - - -# Please send patches to . -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS - -Canonicalize a configuration name. - -Options: - -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.sub ($timestamp) - -Copyright 1992-2018 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" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo "$1" - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2*) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - x64) - basic_machine=x86_64-pc - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases that might get confused - # with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # es1800 is here to avoid being matched by es* (a different OS) - -es1800*) - os=-ose - ;; - # Now accept the basic system types. - # The portable systems comes first. - # Each alternative MUST end in a * to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ - | -midnightbsd*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -xray | -os68k* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo "$os" | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo "$os" | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo "$os" | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4*) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -pikeos*) - # Until real need of OS specific support for - # particular features comes up, bare metal - # configurations are quite functional. - case $basic_machine in - arm*) - os=-eabi - ;; - *) - os=-elf - ;; - esac - ;; - -nacl*) - ;; - -ios) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - pru-*) - os=-elf - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` - ;; -esac - -echo "$basic_machine$os" -exit - -# Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/autotools/depcomp b/autotools/depcomp deleted file mode 100755 index b39f98f9a..000000000 --- a/autotools/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2016-01-11.22; # UTC - -# Copyright (C) 1999-2017 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. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# 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: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/autotools/install-sh b/autotools/install-sh deleted file mode 100755 index 59990a104..000000000 --- a/autotools/install-sh +++ /dev/null @@ -1,508 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2014-09-12.12; # 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. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# 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_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 -is_target_a_directory=possibly - -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 - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -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 - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -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 "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - dstdir=`dirname "$dst"` - 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. - ;; - *) - # $RANDOM is not portable (e.g. dash); use it when possible to - # lower collision chance - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # As "mkdir -p" follows symlinks and we work in /tmp possibly; so - # create the $tmpdir first (and fail if unsuccessful) to make sure - # that nobody tries to guess the $tmpdir name. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 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 - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - 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` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - 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: diff --git a/autotools/ltmain.sh b/autotools/ltmain.sh deleted file mode 100644 index a736cf994..000000000 --- a/autotools/ltmain.sh +++ /dev/null @@ -1,11156 +0,0 @@ -#! /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 Debian-2.4.6-2" -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 $scriptversion Debian-2.4.6-2 - 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 - # -specs=* GCC specs files - # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer - -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=*| \ - -specs=*|-fsanitize=*) - 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%" - test "X$link_all_deplibs" != Xno && libs="$libs $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" - 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 - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - 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 - ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; - 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: diff --git a/autotools/missing b/autotools/missing deleted file mode 100755 index f62bbae30..000000000 --- a/autotools/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2013-10-28.13; # UTC - -# Copyright (C) 1996-2014 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 'autom4te' 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: diff --git a/autotools/test-driver b/autotools/test-driver deleted file mode 100755 index 8e575b017..000000000 --- a/autotools/test-driver +++ /dev/null @@ -1,148 +0,0 @@ -#! /bin/sh -# test-driver - basic testsuite driver script. - -scriptversion=2013-07-13.22; # UTC - -# Copyright (C) 2011-2014 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 - tweaked_estatus=1 -else - tweaked_estatus=$estatus -fi - -case $tweaked_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 the test outcome and exit status in the logs, so that one can -# know whether the test passed or failed simply by looking at the '.log' -# file, without the need of also peaking into the corresponding '.trs' -# file (automake bug#11814). -echo "$res $test_name (exit status: $estatus)" >>$log_file - -# 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: diff --git a/build-go-src-test-man-doc.sh b/build-go-src-test-man-doc.sh index 2b47142b6..c5b96f511 100644 --- a/build-go-src-test-man-doc.sh +++ b/build-go-src-test-man-doc.sh @@ -4,11 +4,11 @@ # go: # go build # go test -# man6: +# man: # creates manpage mlr.1 and manpage.txt using mlr from the $PATH # copies the latter to docs6/src # also copies it out-of-tree to ~/man/man1, but only if that exists -# docs6: +# docs: # turn *.md.in into *.md (live code samples), using mlr from the $PATH # turn *.md into docs6/site HTML and CSS files @@ -21,10 +21,10 @@ go fmt ./... gofmt -s -w $(find . -name \*.go | grep -v src/parsing) ./build -cd ../man6 +cd ../man make maybeinstallhome -cd ../docs6 +cd ../docs ./regen.sh echo diff --git a/c/.gitignore b/c/.gitignore deleted file mode 100644 index 7f66f443c..000000000 --- a/c/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -x -y -s -tt -tt-000-3.1.0 -tt-001-rslls -tti -gcm.txt -reg_test/runex -reg_test/runv -timings.txt -tbin-1 -tbin-2 -tbin-3 -stars.txt diff --git a/c/.vimrc b/c/.vimrc deleted file mode 100644 index 1af741789..000000000 --- a/c/.vimrc +++ /dev/null @@ -1,5 +0,0 @@ -map \r :w:!bake install -map \f :w:!bake -map \v :w:!bake mlr -set tw=120 -set ts=4 diff --git a/c/Makefile.am b/c/Makefile.am deleted file mode 100644 index b1d0d7c81..000000000 --- a/c/Makefile.am +++ /dev/null @@ -1,72 +0,0 @@ -SUBDIRS= lib cli stream input dsl mapping containers output parsing auxents experimental . unit_test reg_test - -AM_CPPFLAGS= -I${srcdir} -AM_CFLAGS= -Wall -std=gnu99 -bin_PROGRAMS= mlr -noinst_PROGRAMS= mlrg - -mlr_SOURCES= mlrmain.c - -mlr_LDFLAGS= -static - -mlr_LDADD= \ - cli/libcli.la \ - containers/libcontainers.la \ - stream/libstream.la \ - input/libinput.la \ - dsl/libdsl.la \ - mapping/libmapping.la \ - output/liboutput.la \ - lib/libmlr.la \ - parsing/libdsl.la \ - auxents/libauxents.la \ - -lm - -# Resulting link line: -# /bin/sh ../libtool --tag=CC --mode=link -# gcc -# -Wall -std=gnu99 -# -g -O2 -# <<>> <------------------------------------- -# -o mlr -# mlrmain.o -# cli/libcli.la -# containers/libcontainers.la -# stream/libstream.la -# input/libinput.la -# dsl/libdsl.la -# mapping/libmapping.la -# output/liboutput.la -# lib/libmlr.la -# parsing/libdsl.la -# auxents/libauxents.la -# <<>> <------------------------------------- - -# Other executable variants - -# Debug version: -mlrg_CFLAGS= -g ${AM_CFLAGS} -mlrg_LDFLAGS= ${mlr_LDFLAGS} -mlrg_LDADD= ${mlr_LDADD} -mlrg_SOURCES= ${mlr_SOURCES} - -# Profile version. Usage: -# * make mlrp -# * mlrp {arguments> -# * gprof mlrp gmon.out > myfile.txt -# Note: works on Linux; not on OSX. On FreeBSD it sounds like it'll need an -# extra -lc on the link line. -#mlrp_CFLAGS= -g -pg ${AM_CFLAGS} -#mlrp_LDFLAGS= ${mlr_LDFLAGS} -#mlrp_LDADD= ${mlr_LDADD} -#mlrp_SOURCES= ${mlr_SOURCES} - -# ================================================================ -# Run this after unit-test expected output has changed, and is verified to be -# OK. (Example: after adding new test cases in test/run.) -regtest-copy: - cp output/out reg_test/expected - -# ================================================================ -perfclean profclean: - @rm -vf gmon.out perf.data perf.data.old diff --git a/c/Makefile.in b/c/Makefile.in deleted file mode 100644 index 6fe97d043..000000000 --- a/c/Makefile.in +++ /dev/null @@ -1,858 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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@ -bin_PROGRAMS = mlr$(EXEEXT) -noinst_PROGRAMS = mlrg$(EXEEXT) -subdir = c -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" -PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) -am_mlr_OBJECTS = mlrmain.$(OBJEXT) -mlr_OBJECTS = $(am_mlr_OBJECTS) -mlr_DEPENDENCIES = cli/libcli.la containers/libcontainers.la \ - stream/libstream.la input/libinput.la dsl/libdsl.la \ - mapping/libmapping.la output/liboutput.la lib/libmlr.la \ - parsing/libdsl.la auxents/libauxents.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 = -mlr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(mlr_LDFLAGS) $(LDFLAGS) -o $@ -am__objects_1 = mlrg-mlrmain.$(OBJEXT) -am_mlrg_OBJECTS = $(am__objects_1) -mlrg_OBJECTS = $(am_mlrg_OBJECTS) -am__DEPENDENCIES_1 = cli/libcli.la containers/libcontainers.la \ - stream/libstream.la input/libinput.la dsl/libdsl.la \ - mapping/libmapping.la output/liboutput.la lib/libmlr.la \ - parsing/libdsl.la auxents/libauxents.la -mlrg_DEPENDENCIES = $(am__DEPENDENCIES_1) -mlrg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mlrg_CFLAGS) $(CFLAGS) \ - $(mlrg_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(mlr_SOURCES) $(mlrg_SOURCES) -DIST_SOURCES = $(mlr_SOURCES) $(mlrg_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 -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 -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)/autotools/depcomp -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@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = lib cli stream input dsl mapping containers output parsing auxents experimental . unit_test reg_test -AM_CPPFLAGS = -I${srcdir} -AM_CFLAGS = -Wall -std=gnu99 -mlr_SOURCES = mlrmain.c -mlr_LDFLAGS = -static -mlr_LDADD = \ - cli/libcli.la \ - containers/libcontainers.la \ - stream/libstream.la \ - input/libinput.la \ - dsl/libdsl.la \ - mapping/libmapping.la \ - output/liboutput.la \ - lib/libmlr.la \ - parsing/libdsl.la \ - auxents/libauxents.la \ - -lm - - -# Resulting link line: -# /bin/sh ../libtool --tag=CC --mode=link -# gcc -# -Wall -std=gnu99 -# -g -O2 -# <<>> <------------------------------------- -# -o mlr -# mlrmain.o -# cli/libcli.la -# containers/libcontainers.la -# stream/libstream.la -# input/libinput.la -# dsl/libdsl.la -# mapping/libmapping.la -# output/liboutput.la -# lib/libmlr.la -# parsing/libdsl.la -# auxents/libauxents.la -# <<>> <------------------------------------- - -# Other executable variants - -# Debug version: -mlrg_CFLAGS = -g ${AM_CFLAGS} -mlrg_LDFLAGS = ${mlr_LDFLAGS} -mlrg_LDADD = ${mlr_LDADD} -mlrg_SOURCES = ${mlr_SOURCES} -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): -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 - -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 - -mlr$(EXEEXT): $(mlr_OBJECTS) $(mlr_DEPENDENCIES) $(EXTRA_mlr_DEPENDENCIES) - @rm -f mlr$(EXEEXT) - $(AM_V_CCLD)$(mlr_LINK) $(mlr_OBJECTS) $(mlr_LDADD) $(LIBS) - -mlrg$(EXEEXT): $(mlrg_OBJECTS) $(mlrg_DEPENDENCIES) $(EXTRA_mlrg_DEPENDENCIES) - @rm -f mlrg$(EXEEXT) - $(AM_V_CCLD)$(mlrg_LINK) $(mlrg_OBJECTS) $(mlrg_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrg-mlrmain.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrmain.Po@am__quote@ - -.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 $@ $< - -mlrg-mlrmain.o: mlrmain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -MT mlrg-mlrmain.o -MD -MP -MF $(DEPDIR)/mlrg-mlrmain.Tpo -c -o mlrg-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrg-mlrmain.Tpo $(DEPDIR)/mlrg-mlrmain.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrg-mlrmain.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) $(mlrg_CFLAGS) $(CFLAGS) -c -o mlrg-mlrmain.o `test -f 'mlrmain.c' || echo '$(srcdir)/'`mlrmain.c - -mlrg-mlrmain.obj: mlrmain.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mlrg_CFLAGS) $(CFLAGS) -MT mlrg-mlrmain.obj -MD -MP -MF $(DEPDIR)/mlrg-mlrmain.Tpo -c -o mlrg-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mlrg-mlrmain.Tpo $(DEPDIR)/mlrg-mlrmain.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlrmain.c' object='mlrg-mlrmain.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) $(mlrg_CFLAGS) $(CFLAGS) -c -o mlrg-mlrmain.obj `if test -f 'mlrmain.c'; then $(CYGPATH_W) 'mlrmain.c'; else $(CYGPATH_W) '$(srcdir)/mlrmain.c'; fi` - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -# 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: $(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 $(PROGRAMS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -html-am: - -info: info-recursive - -info-am: - -install-data-am: - -install-dvi: install-dvi-recursive - -install-dvi-am: - -install-exec-am: install-binPROGRAMS - -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 -rf ./$(DEPDIR) - -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 - -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-am clean clean-binPROGRAMS clean-generic clean-libtool \ - 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-binPROGRAMS 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 installdirs-am 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-binPROGRAMS - -.PRECIOUS: Makefile - - -# Profile version. Usage: -# * make mlrp -# * mlrp {arguments> -# * gprof mlrp gmon.out > myfile.txt -# Note: works on Linux; not on OSX. On FreeBSD it sounds like it'll need an -# extra -lc on the link line. -#mlrp_CFLAGS= -g -pg ${AM_CFLAGS} -#mlrp_LDFLAGS= ${mlr_LDFLAGS} -#mlrp_LDADD= ${mlr_LDADD} -#mlrp_SOURCES= ${mlr_SOURCES} - -# ================================================================ -# Run this after unit-test expected output has changed, and is verified to be -# OK. (Example: after adding new test cases in test/run.) -regtest-copy: - cp output/out reg_test/expected - -# ================================================================ -perfclean profclean: - @rm -vf gmon.out perf.data perf.data.old - -# 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: diff --git a/c/Makefile.no-autoconfig b/c/Makefile.no-autoconfig deleted file mode 100644 index 747cd22d3..000000000 --- a/c/Makefile.no-autoconfig +++ /dev/null @@ -1,543 +0,0 @@ -# ================================================================ -# NOTE: This makefile is not intended to be used in a packaging system -- -# rather, Miller uses autconfig for that. This makefile is intended for users -# who prefer (for whatever reason) to bypass autoconfig. Please also see -# http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig -# ================================================================ - -# ================================================================ -# Travis does "export CC=gcc", "export CC=clang" so we can pick those up via -# "make -e" in ../.travis.yml. Note that "CC?=gcc", without make -e, results -# in CC being expanded to cc on my OSX laptop, which is not OK. Hence make -e. -CC=gcc -CFLAGS=-std=gnu99 -IFLAGS=-I. -I.. - -WFLAGS=-Wall -Werror -# Worth exploring ... but needs handling for unused parameters in functions which comply with interfaces. -# Best option I'm aware of is to replace "void foo(int bar) {...}" with "void foo(int) {...}" throughout. -# WFLAGS=-Wall -Wextra -Werror -# WFLAGS=-Wall -Wextra -pedantic-errors -Werror -# WFLAGS=-Wall -Wextra -pedantic-errors -Werror=unused-variable - -LFLAGS=-lm - -# You can do make -e INSTALLDIR=/path/to/somewhere/else/bin -INSTALLDIR=/usr/local/bin - -CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 -CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS) -CCASAN=clang -fsanitize=address -g $(CFLAGS) $(IFLAGS) $(WFLAGS) - -# clang ASAN. Use -O1 for debug mode to (among other things) disable inlining. -#CCOPT=clang -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) -#CCDEBUG=clang -g -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) - -# ---------------------------------------------------------------- -# Miller source except DSL -NON_DSL_SRCS = \ - *.c \ - cli/*.c \ - lib/*.c \ - containers/*.c \ - auxents/*.c \ - stream/*.c \ - input/*.c \ - dsl/*.c \ - mapping/*.c \ - output/*.c - -# DSL -DSL_OBJS = \ - ./parsing/mlr_dsl_parse.o \ - ./parsing/mlr_dsl_lexer.o \ - ./parsing/mlr_dsl_wrapper.o - -# Unit-test code -TEST_ARGPARSE_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - cli/argparse.c \ - containers/slls.c \ - containers/sllv.c \ - lib/string_array.c \ - unit_test/test_argparse.c - -TEST_BYTE_READERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/string_byte_reader.c \ - input/stdio_byte_reader.c \ - unit_test/test_byte_readers.c - -TEST_LINE_READERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/context.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/line_readers.c \ - unit_test/test_line_readers.c - -TEST_PEEK_FILE_READER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/string_byte_reader.c \ - input/peek_file_reader.c \ - unit_test/test_peek_file_reader.c - -TEST_LREC_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrdatetime.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - lib/string_array.c \ - lib/mlrval.c \ - lib/mvfuncs.c \ - containers/hss.c \ - containers/lrec.c \ - containers/header_keeper.c \ - containers/sllv.c \ - containers/slls.c \ - containers/rslls.c \ - containers/lhmsv.c \ - containers/lhmslv.c \ - containers/sllmv.c \ - containers/mlhmmv.c \ - input/line_readers.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - unit_test/test_lrec.c - -TEST_MULTIPLE_CONTAINERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrdatetime.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - containers/lrec.c \ - containers/header_keeper.c \ - containers/sllv.c \ - containers/slls.c \ - containers/rslls.c \ - lib/string_array.c \ - containers/hss.c \ - lib/mlrval.c \ - lib/mvfuncs.c \ - containers/lhmsi.c \ - containers/lhmsll.c \ - containers/lhmss.c \ - containers/lhmsv.c \ - containers/lhms2v.c \ - containers/lhmslv.c \ - containers/lhmsmv.c \ - containers/loop_stack.c \ - containers/percentile_keeper.c \ - containers/top_keeper.c \ - containers/dheap.c \ - input/line_readers.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - unit_test/test_multiple_containers.c - -TEST_MLHMMV_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrdatetime.c \ - lib/string_builder.c \ - lib/string_array.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/mlrval.c \ - lib/mvfuncs.c \ - containers/hss.c \ - containers/mlhmmv.c \ - containers/sllmv.c \ - containers/sllv.c \ - containers/slls.c \ - containers/lrec.c \ - unit_test/test_mlhmmv.c - -TEST_MLRUTIL_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/string_builder.c \ - unit_test/test_mlrutil.c - -TEST_MLRREGEX_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrregex.c \ - lib/string_builder.c \ - lib/string_array.c \ - unit_test/test_mlrregex.c - -TEST_STRING_BUILDER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - unit_test/test_string_builder.c - -TEST_PARSE_TRIE_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - containers/parse_trie.c \ - unit_test/test_parse_trie.c - -TEST_RVAL_EVALUATORS_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrdatetime.c \ - lib/mlrregex.c \ - lib/mlrmath.c \ - lib/string_builder.c \ - lib/string_array.c \ - lib/mlrval.c \ - lib/mvfuncs.c \ - containers/xvfuncs.c \ - containers/sllv.c \ - containers/slls.c \ - containers/sllmv.c \ - containers/lrec.c \ - containers/lhmsv.c \ - containers/lhmsi.c \ - containers/lhmsll.c \ - containers/mlhmmv.c \ - containers/lhmsmv.c \ - containers/lhmss.c \ - containers/hss.c \ - containers/mixutil.c \ - containers/loop_stack.c \ - containers/local_stack.c \ - containers/type_decl.c \ - dsl/mlr_dsl_ast.c \ - dsl/function_manager.c \ - dsl/keylist_evaluators.c \ - dsl/rval_expr_evaluators.c \ - dsl/rxval_expr_evaluators.c \ - dsl/rval_func_evaluators.c \ - dsl/rxval_func_evaluators.c \ - dsl/rval_list_evaluators.c \ - dsl/mlr_dsl_stack_allocate.c \ - dsl/mlr_dsl_blocked_ast.c \ - dsl/mlr_dsl_cst.c \ - dsl/mlr_dsl_cst_condish_statements.c \ - dsl/mlr_dsl_cst_for_map_statements.c \ - dsl/mlr_dsl_cst_for_srec_statements.c \ - dsl/mlr_dsl_cst_func_subr.c \ - dsl/mlr_dsl_cst_keywords.c \ - dsl/mlr_dsl_cst_loop_control_statements.c \ - dsl/mlr_dsl_cst_map_assignment_statements.c \ - dsl/mlr_dsl_cst_output_statements.c \ - dsl/mlr_dsl_cst_return_statements.c \ - dsl/mlr_dsl_cst_scalar_assignment_statements.c \ - dsl/mlr_dsl_cst_statements.c \ - dsl/mlr_dsl_cst_triple_for_statements.c \ - dsl/mlr_dsl_cst_unset_statements.c \ - output/lrec_writer_csv.c \ - output/lrec_writer_csvlite.c \ - output/lrec_writer_dkvp.c \ - output/lrec_writer_json.c \ - output/lrec_writer_markdown.c \ - output/lrec_writer_nidx.c \ - output/lrec_writer_pprint.c \ - output/lrec_writer_xtab.c \ - output/lrec_writers.c \ - output/multi_lrec_writer.c \ - output/multi_out.c \ - unit_test/test_rval_evaluators.c - -TEST_JOIN_BUCKET_KEEPER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - lib/mlrregex.c \ - lib/context.c \ - lib/string_array.c \ - containers/parse_trie.c \ - containers/lrec.c \ - containers/sllv.c \ - containers/rslls.c \ - containers/slls.c \ - containers/lhmslv.c \ - containers/lhmss.c \ - containers/hss.c \ - containers/mixutil.c \ - containers/header_keeper.c \ - containers/join_bucket_keeper.c \ - input/stdio_byte_reader.c \ - input/line_readers.c \ - input/lrec_reader_gen.c \ - input/lrec_reader_in_memory.c \ - input/lrec_readers.c \ - input/lrec_reader_stdio_csv.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/peek_file_reader.c \ - unit_test/test_join_bucket_keeper.c - -EXPERIMENTAL_READER_SRCS = \ - lib/mlrutil.c \ - lib/mlrdatetime.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_array.c \ - lib/string_builder.c \ - input/stdio_byte_reader.c \ - input/line_readers.c \ - containers/parse_trie.c \ - experimental/getlines.c - -EXPERIMENTAL_JSON_VG_MEM_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/nlnet_timegm.c \ - lib/netbsd_strptime.c \ - lib/mtrand.c \ - input/json_parser.c \ - experimental/json_vg_mem.c - -# ================================================================ -# User-make: creates the executable and runs unit & regression tests -# This is the default target for anyone pulling the repo and trying to -# build it to be able to use it. It just needs flex and the C compiler. -#top: mlr tests -# xxx temp: -top: mlr mlrg tests - -install: mlr tests - mkdir -p $(INSTALLDIR) - cp mlr $(INSTALLDIR) -installhome: mlr tests - mkdir -p $(HOME)/bin - cp mlr $(HOME)/bin - -# ================================================================ -tags: .always - ctags -R . - -mlr: .always parsing - $(CCOPT) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr -# On x86_64/Centos I had to first do -# sudo yum install glibc-devel glibc-static -mlr.static: .always parsing - $(CCOPT) -static $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr.static - -parsing: .always - make -C parsing -f Makefile.no-autoconfig mlr_dsl_parse.o - make -C parsing -f Makefile.no-autoconfig mlr_dsl_lexer.o - make -C parsing -f Makefile.no-autoconfig mlr_dsl_wrapper.o - -two: mlr mlrg - -# ---------------------------------------------------------------- -# Other executable variants - -# Debug version -mlrg: .always parsing - $(CCDEBUG) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrg - -# Debug version with local-stack verbosity -mlrt: .always parsing - $(CCDEBUG) -DLOCAL_STACK_TRACE_ENABLE -DLOCAL_STACK_BOUNDS_CHECK_ENABLE \ - $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrt - -# Profile version. Usage: -# * make mlrp -# * mlrp {arguments> -# * gprof mlrp gmon.out > myfile.txt -# Note: works on Linux; not on OSX. -mlrp: .always parsing - $(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrp - -# ASAN version -mlra: .always parsing - $(CCASAN) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlra - -# ================================================================ -tests: unit-test reg-test - -unit-test: test-mlrutil test-mlrregex test-argparse test-line-readers test-byte-readers test-peek-file-reader test-parse-trie test-lrec test-multiple-containers test-mlhmmv test-string-builder test-rval-evaluators test-join-bucket-keeper - ./test-mlrutil - ./test-mlrregex - ./test-argparse - ./test-line-readers - ./test-byte-readers - ./test-peek-file-reader - ./test-parse-trie - ./test-lrec - ./test-multiple-containers - ./test-mlhmmv - ./test-string-builder - ./test-rval-evaluators - ./test-join-bucket-keeper - @echo - @echo DONE - -reg-test: - ./reg_test/run - -# ---------------------------------------------------------------- -# Run this after unit-test expected output has changed, and is verified to be -# OK. (Example: after adding new test cases in test/run.) -regtest-copy taters: - cp output-regtest/out reg_test/expected -regtest-copy-dev: - cp output-regtest/out-dev reg_test/expected - -# ---------------------------------------------------------------- -# Unit-test executables - -test-argparse: .always - $(CCDEBUG) $(TEST_ARGPARSE_SRCS) $(LFLAGS) -o test-argparse - -test-byte-readers: .always - $(CCDEBUG) $(TEST_BYTE_READERS_SRCS) $(LFLAGS) -o test-byte-readers - -test-line-readers: .always - $(CCDEBUG) $(TEST_LINE_READERS_SRCS) $(LFLAGS) -o test-line-readers - -test-peek-file-reader: .always - $(CCDEBUG) $(TEST_PEEK_FILE_READER_SRCS) $(LFLAGS) -o test-peek-file-reader - -test-lrec: .always - $(CCDEBUG) $(TEST_LREC_SRCS) $(LFLAGS) -o test-lrec -lm - -test-multiple-containers: .always - $(CCDEBUG) $(TEST_MULTIPLE_CONTAINERS_SRCS) $(LFLAGS) -o test-multiple-containers -lm - -test-mlhmmv: .always - $(CCDEBUG) $(TEST_MLHMMV_SRCS) $(LFLAGS) -o test-mlhmmv -lm - -test-mlrutil: .always - $(CCDEBUG) $(TEST_MLRUTIL_SRCS) $(LFLAGS) -o test-mlrutil -lm - -test-mlrregex: .always - $(CCDEBUG) $(TEST_MLRREGEX_SRCS) $(LFLAGS) -o test-mlrregex - -test-string-builder: .always - $(CCDEBUG) $(TEST_STRING_BUILDER_SRCS) $(LFLAGS) -o test-string-builder - -test-parse-trie: .always - $(CCDEBUG) $(TEST_PARSE_TRIE_SRCS) $(LFLAGS) -o test-parse-trie - -test-rval-evaluators: .always - $(CCDEBUG) $(TEST_RVAL_EVALUATORS_SRCS) $(LFLAGS) -o test-rval-evaluators -lm - -test-join-bucket-keeper: .always - $(CCDEBUG) $(TEST_JOIN_BUCKET_KEEPER_SRCS) $(LFLAGS) -o test-join-bucket-keeper -lm - -# ---------------------------------------------------------------- -# Standalone mains - -getl: .always - $(CCOPT) $(EXPERIMENTAL_READER_SRCS) $(LFLAGS) -o getl - -json-vg-mem: .always - $(CCDEBUG) $(EXPERIMENTAL_JSON_VG_MEM_SRCS) $(LFLAGS) -o json-vg-mem - -# ================================================================ -# BSD can't handle rm -v, alas -clean: - @rm -f mlr mlrd mlrg mlrp tester - @make -C parsing -f Makefile.no-autoconfig clean - -perfclean profclean: - @rm -f gmon.out perf.data perf.data.old - -.always: - @true diff --git a/c/Makefile.windows b/c/Makefile.windows deleted file mode 100644 index 6cbccc621..000000000 --- a/c/Makefile.windows +++ /dev/null @@ -1,499 +0,0 @@ -# ================================================================ -# NOTE: This makefile is not intended to be used in a packaging system -- -# rather, Miller uses autconfig for that. This makefile is intended for users -# who prefer (for whatever reason) to bypass autoconfig. Please also see -# http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig -# ================================================================ - -# ================================================================ -# Travis does "export CC=gcc", "export CC=clang" so we can pick those up via -# "make -e" in ../.travis.yml. Note that "CC?=gcc", without make -e, results -# in CC being expanded to cc on my OSX laptop, which is not OK. Hence make -e. -CC=gcc -CFLAGS=-std=gnu99 -IFLAGS=-I. -I.. - -WFLAGS=-Wall -# Worth exploring ... but needs handling for unused parameters in functions which comply with interfaces. -# Best option I'm aware of is to replace "void foo(int bar) {...}" with "void foo(int) {...}" throughout. -# WFLAGS=-Wall -Wextra -Werror -# WFLAGS=-Wall -Wextra -pedantic-errors -Werror -# WFLAGS=-Wall -Wextra -pedantic-errors -Werror=unused-variable - -LFLAGS=-lm -lpcreposix - -# You can do make -e INSTALLDIR=/path/to/somewhere/else/bin -INSTALLDIR=/usr/local/bin - -CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 -CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS) - -# clang ASAN. Use -O1 for debug mode to (among other things) disable inlining. -#CCOPT=clang -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) -#CCDEBUG=clang -g -fsanitize=address -fno-omit-frame-pointer $(CFLAGS) $(IFLAGS) $(WFLAGS) - -# ---------------------------------------------------------------- -# Miller source except DSL -NON_DSL_SRCS = \ - *.c \ - cli/*.c \ - lib/*.c \ - containers/*.c \ - aux/*.c \ - stream/*.c \ - input/*.c \ - dsl/*.c \ - mapping/*.c \ - output/*.c - -# DSL -DSL_OBJS = \ - ./parsing/mlr_dsl_parse.o \ - ./parsing/mlr_dsl_lexer.o \ - ./parsing/mlr_dsl_wrapper.o - -# Unit-test code -TEST_ARGPARSE_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - cli/argparse.c \ - containers/slls.c \ - containers/sllv.c \ - lib/string_array.c \ - unit_test/test_argparse.c - -TEST_BYTE_READERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/string_byte_reader.c \ - input/stdio_byte_reader.c \ - unit_test/test_byte_readers.c - -TEST_LINE_READERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/context.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/line_readers.c \ - unit_test/test_line_readers.c - -TEST_PEEK_FILE_READER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlr_test_util.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - input/string_byte_reader.c \ - input/peek_file_reader.c \ - unit_test/test_peek_file_reader.c - -TEST_LREC_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrdatetime.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - lib/string_array.c \ - containers/mlrval.c \ - containers/mvfuncs.c \ - containers/lrec.c \ - containers/header_keeper.c \ - containers/sllv.c \ - containers/slls.c \ - containers/rslls.c \ - containers/lhmsv.c \ - containers/lhmslv.c \ - containers/sllmv.c \ - containers/mlhmmv.c \ - input/line_readers.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - unit_test/test_lrec.c - -TEST_MULTIPLE_CONTAINERS_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrdatetime.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - containers/lrec.c \ - containers/header_keeper.c \ - containers/sllv.c \ - containers/slls.c \ - containers/rslls.c \ - lib/string_array.c \ - containers/hss.c \ - containers/mlrval.c \ - containers/mvfuncs.c \ - containers/lhmsi.c \ - containers/lhmsll.c \ - containers/lhmss.c \ - containers/lhmsv.c \ - containers/lhms2v.c \ - containers/lhmslv.c \ - containers/lhmsmv.c \ - containers/loop_stack.c \ - containers/percentile_keeper.c \ - containers/top_keeper.c \ - containers/dheap.c \ - input/line_readers.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - unit_test/test_multiple_containers.c - -TEST_MLHMMV_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrdatetime.c \ - lib/string_builder.c \ - lib/string_array.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - containers/mlrval.c \ - containers/mvfuncs.c \ - containers/mlhmmv.c \ - containers/sllmv.c \ - containers/sllv.c \ - containers/slls.c \ - containers/lrec.c \ - unit_test/test_mlhmmv.c - -TEST_MLRUTIL_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/string_builder.c \ - unit_test/test_mlrutil.c - -TEST_MLRREGEX_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrregex.c \ - lib/string_builder.c \ - lib/string_array.c \ - unit_test/test_mlrregex.c - -TEST_STRING_BUILDER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - unit_test/test_string_builder.c - -TEST_PARSE_TRIE_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - containers/parse_trie.c \ - unit_test/test_parse_trie.c - -TEST_RVAL_EVALUATORS_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrdatetime.c \ - lib/mlrregex.c \ - lib/mlrmath.c \ - lib/string_builder.c \ - lib/string_array.c \ - containers/mlrval.c \ - containers/mvfuncs.c \ - containers/xvfuncs.c \ - containers/sllv.c \ - containers/slls.c \ - containers/sllmv.c \ - containers/lrec.c \ - containers/lhmsv.c \ - containers/lhmsi.c \ - containers/lhmsll.c \ - containers/mlhmmv.c \ - containers/lhmsmv.c \ - containers/hss.c \ - containers/mixutil.c \ - containers/loop_stack.c \ - containers/local_stack.c \ - containers/type_decl.c \ - dsl/mlr_dsl_ast.c \ - dsl/function_manager.c \ - dsl/keylist_evaluators.c \ - dsl/rval_expr_evaluators.c \ - dsl/rxval_expr_evaluators.c \ - dsl/rval_func_evaluators.c \ - dsl/rxval_func_evaluators.c \ - dsl/rval_list_evaluators.c \ - dsl/mlr_dsl_stack_allocate.c \ - dsl/mlr_dsl_blocked_ast.c \ - dsl/mlr_dsl_cst.c \ - dsl/mlr_dsl_cst_condish_statements.c \ - dsl/mlr_dsl_cst_for_map_statements.c \ - dsl/mlr_dsl_cst_for_srec_statements.c \ - dsl/mlr_dsl_cst_func_subr.c \ - dsl/mlr_dsl_cst_keywords.c \ - dsl/mlr_dsl_cst_loop_control_statements.c \ - dsl/mlr_dsl_cst_map_assignment_statements.c \ - dsl/mlr_dsl_cst_output_statements.c \ - dsl/mlr_dsl_cst_return_statements.c \ - dsl/mlr_dsl_cst_scalar_assignment_statements.c \ - dsl/mlr_dsl_cst_statements.c \ - dsl/mlr_dsl_cst_triple_for_statements.c \ - dsl/mlr_dsl_cst_unset_statements.c \ - output/lrec_writer_csv.c \ - output/lrec_writer_csvlite.c \ - output/lrec_writer_dkvp.c \ - output/lrec_writer_json.c \ - output/lrec_writer_markdown.c \ - output/lrec_writer_nidx.c \ - output/lrec_writer_pprint.c \ - output/lrec_writer_xtab.c \ - output/lrec_writers.c \ - output/multi_lrec_writer.c \ - output/multi_out.c \ - unit_test/test_rval_evaluators.c - -TEST_JOIN_BUCKET_KEEPER_SRCS = \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/mlrescape.c \ - lib/mlr_globals.c \ - lib/string_builder.c \ - lib/context.c \ - containers/parse_trie.c \ - containers/lrec.c \ - containers/sllv.c \ - containers/rslls.c \ - containers/slls.c \ - containers/lhmslv.c \ - containers/hss.c \ - containers/mixutil.c \ - containers/header_keeper.c \ - containers/join_bucket_keeper.c \ - input/stdio_byte_reader.c \ - input/line_readers.c \ - input/lrec_reader_in_memory.c \ - input/lrec_readers.c \ - input/lrec_reader_stdio_csv.c \ - input/lrec_reader_stdio_csvlite.c \ - input/lrec_reader_stdio_dkvp.c \ - input/lrec_reader_stdio_nidx.c \ - input/lrec_reader_stdio_xtab.c \ - input/lrec_reader_stdio_json.c \ - input/mlr_json_adapter.c \ - input/json_parser.c \ - input/file_reader_stdio.c \ - input/file_ingestor_stdio.c \ - input/peek_file_reader.c \ - unit_test/test_join_bucket_keeper.c - -EXPERIMENTAL_READER_SRCS = \ - lib/mlrutil.c \ - lib/mlrdatetime.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - lib/context.c \ - lib/mlrescape.c \ - lib/mlrregex.c \ - lib/mlr_globals.c \ - lib/string_array.c \ - lib/string_builder.c \ - input/stdio_byte_reader.c \ - input/line_readers.c \ - containers/parse_trie.c \ - experimental/getlines.c - -EXPERIMENTAL_JSON_VG_MEM_SRCS = \ - lib/mlr_globals.c \ - lib/mlrutil.c \ - lib/mlr_arch.c \ - lib/mtrand.c \ - input/json_parser.c \ - experimental/json_vg_mem.c - -# ================================================================ -# User-make: creates the executable and runs unit & regression tests -# This is the default target for anyone pulling the repo and trying to -# build it to be able to use it. It just needs flex and the C compiler. -#top: mlr tests -# xxx temp: -top: mlr mlrg tests - -install: mlr tests - cp mlr $(INSTALLDIR) -installhome: mlr tests - cp mlr $(HOME)/bin - -# ================================================================ -tags: .always - ctags -R . - -mlr: .always parsing - $(CCOPT) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr -# On x86_64/Centos I had to first do -# sudo yum install glibc-devel glibc-static -mlr.static: .always parsing - $(CCOPT) -static $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr.static - -parsing: .always - make -C parsing -f Makefile.no-autoconfig mlr_dsl_parse.o - make -C parsing -f Makefile.no-autoconfig mlr_dsl_lexer.o - make -C parsing -f Makefile.no-autoconfig mlr_dsl_wrapper.o - -two: mlr mlrg - -# ---------------------------------------------------------------- -# Other executable variants - -# Debug version -mlrg: .always parsing - $(CCDEBUG) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrg - -# Debug version with local-stack verbosity -mlrt: .always parsing - $(CCDEBUG) -DLOCAL_STACK_TRACE_ENABLE -DLOCAL_STACK_BOUNDS_CHECK_ENABLE \ - $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrt - -# Profile version. Usage: -# * make mlrp -# * mlrp {arguments> -# * gprof mlrp gmon.out > myfile.txt -# Note: works on Linux; not on OSX. -mlrp: .always parsing - $(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrp - -# ================================================================ -tests: unit-test reg-test - -unit-test: test-mlrutil test-mlrregex test-argparse test-line-readers test-byte-readers test-peek-file-reader test-parse-trie test-lrec test-multiple-containers test-mlhmmv test-string-builder test-rval-evaluators test-join-bucket-keeper - ./test-mlrutil - ./test-mlrregex - ./test-argparse - ./test-line-readers - ./test-byte-readers - ./test-peek-file-reader - ./test-parse-trie - ./test-lrec - ./test-multiple-containers - ./test-mlhmmv - ./test-string-builder - ./test-rval-evaluators - ./test-join-bucket-keeper - @echo - @echo DONE - -reg-test: - ./reg_test/run - -# ---------------------------------------------------------------- -# Run this after unit-test expected output has changed, and is verified to be -# OK. (Example: after adding new test cases in test/run.) -regtest-copy taters: - cp output-regtest/out reg_test/expected -regtest-copy-dev: - cp output-regtest/out-dev reg_test/expected - -# ---------------------------------------------------------------- -# Unit-test executables - -test-argparse: .always - $(CCDEBUG) $(TEST_ARGPARSE_SRCS) $(LFLAGS) -o test-argparse - -test-byte-readers: .always - $(CCDEBUG) $(TEST_BYTE_READERS_SRCS) $(LFLAGS) -o test-byte-readers - -test-line-readers: .always - $(CCDEBUG) $(TEST_LINE_READERS_SRCS) $(LFLAGS) -o test-line-readers - -test-peek-file-reader: .always - $(CCDEBUG) $(TEST_PEEK_FILE_READER_SRCS) $(LFLAGS) -o test-peek-file-reader - -test-lrec: .always - $(CCDEBUG) $(TEST_LREC_SRCS) $(LFLAGS) -o test-lrec -lm - -test-multiple-containers: .always - $(CCDEBUG) $(TEST_MULTIPLE_CONTAINERS_SRCS) $(LFLAGS) -o test-multiple-containers -lm - -test-mlhmmv: .always - $(CCDEBUG) $(TEST_MLHMMV_SRCS) $(LFLAGS) -o test-mlhmmv -lm - -test-mlrutil: .always - $(CCDEBUG) $(TEST_MLRUTIL_SRCS) $(LFLAGS) -o test-mlrutil -lm - -test-mlrregex: .always - $(CCDEBUG) $(TEST_MLRREGEX_SRCS) $(LFLAGS) -o test-mlrregex - -test-string-builder: .always - $(CCDEBUG) $(TEST_STRING_BUILDER_SRCS) $(LFLAGS) -o test-string-builder - -test-parse-trie: .always - $(CCDEBUG) $(TEST_PARSE_TRIE_SRCS) $(LFLAGS) -o test-parse-trie - -test-rval-evaluators: .always - $(CCDEBUG) $(TEST_RVAL_EVALUATORS_SRCS) $(LFLAGS) -o test-rval-evaluators -lm - -test-join-bucket-keeper: .always - $(CCDEBUG) $(TEST_JOIN_BUCKET_KEEPER_SRCS) $(LFLAGS) -o test-join-bucket-keeper -lm - -# ---------------------------------------------------------------- -# Standalone mains - -getl: .always - $(CCOPT) $(EXPERIMENTAL_READER_SRCS) $(LFLAGS) -o getl - -json-vg-mem: .always - $(CCDEBUG) $(EXPERIMENTAL_JSON_VG_MEM_SRCS) $(LFLAGS) -o json-vg-mem - -# ================================================================ -# BSD can't handle rm -v, alas -clean: - @rm -f mlr mlrd mlrg mlrp tester - @make -C parsing -f Makefile.no-autoconfig clean - -perfclean profclean: - @rm -f gmon.out perf.data perf.data.old - -.always: - @true diff --git a/c/README.md b/c/README.md deleted file mode 100644 index a22438f3e..000000000 --- a/c/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# Data flow - -Miller data flow is records produced by a record-reader in `input/`, followed -by one or more mappers in `mapping/`, written by a record-writer in `output/`, -controlled by logic in `stream/`. Argument parsing for initial stream setup is -in `cli/`. - -# Container names - -The user-visible concept of *stream record* (or *srec*) is implemented in the -`lrec_t` (*linked-record type*) data structure. The user-visible concept of -*out-of-stream variables* is implemented using the `mlhmmv_t` (multi-level -hashmap of mlrvals) structure. Source-code comments and names within the code -refer to `srec`/`lrec` and `oosvar`/`mlhmmv` depending on the context. - -While those two data structures contain user-visible data structures, others -are used in Miller's implementation: `slls` and `sllv` are singly-linked lists -of string and void-star respectively; `lhmss` is a linked hashmap from string -to string; `lhmsi` is a linked hashmap from string to int; and so on. - -# Memory management - -Miller is streaming and as near stateless as possible. For most Miller -functions, you can ingest a 20GB file with 4GB RAM, no problem. For example, -`mlr cat` of a DKVP file retains no data in memory from one line to another; -`mlr cat` of a CSV file retains only the field names from the header line. The -`stats1` and `stats2` commands retain only aggregation state (e.g. count and -sum over specified fields needed to compute mean of specified fields). The `mlr -tac` and `mlr sort` commands, obviously, need to consume and retain all input -records before emitting any output records. - -Miller classes are in general modular, following a constructor/destructor model -with minimal dependencies between classes. As a general rule, void-star -payloads (`sllv`, `lhmslv`) must be freed by the callee (which has access to -the data type) whereas non-void-star payloads (`slls`, `hss`) are freed by the -container class. - -One complication is for free-flags in `lrec` and `slls`: the idea is that an -entire line is mallocked and presented by the record reader; then individual -fields are split out and populated into linked list or records. To reduce the -amount of strduping there, free-flags are used to track which fields should be -freed by the destructor and which are freed elsewhere. - -The `header_keeper` object is an elaboration on this theme: suppose there is a -CSV file with header line `a,b,c` and data lines `1,2,3`, then `4,5,6`, then -`7,8,9`. Then the keys `a`, `b`, and `c` are shared between all three records; -they are retained in a single `header_keeper` object. - -A bigger complication to the otherwise modular nature of Miller is its -*baton-passing memory-management model*. Namely, one class may be responsible -for freeing memory allocated by another class. - -For example, using `mlr cat`: The record-reader produces records and returns -pointers to them. The record-mapper is just a pass-through; it returns the -record-pointers it receives. The record-writer formats the records to stdout -and does not return them, so it is responsible for freeing them. - -Similarly, `mlr cut -x` and any other mappers which modify record objects -without creating new ones. By contrast,`stats1` et al. produce their own -records; they free what they do not pass on. - -# Null-lrec conventions - -Record-readers return a null lrec-pointer to signify end of input stream. - -Each mapper takes an lrec-pointer as input and returns a linked list of -lrec-pointer. - -Null-lrec is input to mappers to signify end of stream: e.g. `sort` or `tac` -should use this as a signal to deliver the sorted/reversed list of rows. - -When a mapper has no output before end of stream (e.g. `sort` or `tac` while -accumulating inputs) it returns a null lrec-pointer which is treated as -synonymous with returning an empty list. - -At end of stream, a mapper returns a linked list of records ending in a null -lrec-pointer. - -A null lrec-pointer at end of stream is passed to lrec writers so that they may -produce final output (e.g. pretty-print which produces no output until end of -stream). - -# Performance optimizations - -The initial implementation of Miller used `lhmss` -(insertion-ordered string-to-string hash map) for record objects. -Keys and values were strduped out of file-input lines. Each of the following -produced from 5 to 30 percent performance gains: -* The `lrec` object is a hashless map suited to low access-to-creation ratio. -See detailed comments in -https://github.com/johnkerl/miller/blob/master/c/containers/lrec.h. -* Free-flags as discussed above removed additional occurrences of string copies. -* Using `mmap` to read files gets rid of double passes on record parsing -(one to find end of line, and another to separate fields) as well as most use -of `malloc`. Note however that standard input cannot be mmapped, so both -record-reader options are retained. - -# Source-code indexing - -Please see https://sourcegraph.com/github.com/johnkerl/miller diff --git a/c/asanmk b/c/asanmk deleted file mode 100755 index da845d91d..000000000 --- a/c/asanmk +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -export CC='clang -fsanitize=address' -make -ef Makefile.no-autoconfig "$@" diff --git a/c/auxents/Makefile.am b/c/auxents/Makefile.am deleted file mode 100644 index a494cc79b..000000000 --- a/c/auxents/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -noinst_LTLIBRARIES= libauxents.la -libauxents_la_SOURCES= aux_entries.c \ - aux_entries.h - -libauxents_la_LIBADD= ../lib/libmlr.la - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/auxents/Makefile.in b/c/auxents/Makefile.in deleted file mode 100644 index 06d7b5e7f..000000000 --- a/c/auxents/Makefile.in +++ /dev/null @@ -1,592 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/auxents -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libauxents_la_DEPENDENCIES = ../lib/libmlr.la -am_libauxents_la_OBJECTS = aux_entries.lo -libauxents_la_OBJECTS = $(am_libauxents_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libauxents_la_SOURCES) -DIST_SOURCES = $(libauxents_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libauxents.la -libauxents_la_SOURCES = aux_entries.c \ - aux_entries.h - -libauxents_la_LIBADD = ../lib/libmlr.la -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/auxents/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/auxents/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libauxents.la: $(libauxents_la_OBJECTS) $(libauxents_la_DEPENDENCIES) $(EXTRA_libauxents_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libauxents_la_OBJECTS) $(libauxents_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aux_entries.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/auxents/aux_entries.c b/c/auxents/aux_entries.c deleted file mode 100644 index 04df6ba90..000000000 --- a/c/auxents/aux_entries.c +++ /dev/null @@ -1,529 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/netbsd_strptime.h" -#include "input/line_readers.h" - -// ---------------------------------------------------------------- -static int aux_list_main(int argc, char** argv); -static int lecat_main(int argc, char** argv); -static int termcvt_main(int argc, char** argv); -static int hex_main(int argc, char** argv); -static int unhex_main(int argc, char** argv); -static int netbsd_strptime_main(int argc, char** argv); - -static int lecat_stream(FILE* input_stream, int do_color); -static void hex_dump_fp(FILE *in_fp, FILE *out_fp, int do_raw); -static void unhex_fp(FILE *in_fp, FILE *out_fp); - -static void aux_list_usage(char* argv0, char* argv1, FILE* o, int exit_code); -static void lecat_usage(char* argv0, char* argv1, FILE* o, int exit_code); -static void termcvt_usage(char* argv0, char* argv1, FILE* o, int exit_code); -static void hex_usage(char* argv0, char* argv1, FILE* o, int exit_code); -static void unhex_usage(char* argv0, char* argv1, FILE* o, int exit_code); -static void netbsd_strptime_usage(char* argv0, char* argv1, FILE* o, int exit_code); - -// ---------------------------------------------------------------- -typedef int aux_main_t(int argc, char**argv); -typedef void aux_usage_t( char* argv0, char* argv1, FILE* o, int exit_code); -typedef struct _aux_lookup_entry_t { - char* name; - aux_main_t* pmain; - aux_usage_t* pusage; -} aux_lookup_entry_t; - -static aux_lookup_entry_t aux_lookup_table[] = { - - { "aux-list", aux_list_main, aux_list_usage }, - { "lecat", lecat_main, lecat_usage }, - { "termcvt", termcvt_main, termcvt_usage }, - { "hex", hex_main, hex_usage }, - { "unhex", unhex_main, unhex_usage }, - { "netbsd-strptime", netbsd_strptime_main, netbsd_strptime_usage }, - -}; - -static int aux_lookup_table_size = sizeof(aux_lookup_table) / sizeof(aux_lookup_table[0]); - -// ================================================================ -void do_aux_entries(int argc, char** argv) { - if (argc < 2) { - return; - } - - for (int i = 0; i < aux_lookup_table_size; i++) { - if (streq(argv[1], aux_lookup_table[i].name)) { - exit(aux_lookup_table[i].pmain(argc, argv)); - } - } - // else return to mlrmain for the rest of Miller. -} - -void show_aux_entries(FILE* fp) { - fprintf(fp, "Available subcommands:\n"); - for (int i = 0; i < aux_lookup_table_size; i++) { - fprintf(fp, " %s\n", aux_lookup_table[i].name); - } - fprintf(fp, "For more information, please invoke %s {subcommand} --help\n", MLR_GLOBALS.bargv0); -} - -// ---------------------------------------------------------------- -static void aux_list_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s [options]\n", argv0, argv1); - fprintf(o, "Options:\n"); - fprintf(o, "-h or --help: print this message\n"); - exit(exit_code); -} - -int aux_list_main(int argc, char** argv) { - show_aux_entries(stdout); - return 0; -} - -// ---------------------------------------------------------------- -static void lecat_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s [options] {zero or more file names}\n", argv0, argv1); - fprintf(o, "Simply echoes input, but flags CR characters in red and LF characters in green.\n"); - fprintf(o, "If zero file names are supplied, standard input is read.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "--mono: don't try to colorize the output\n"); - fprintf(o, "-h or --help: print this message\n"); - exit(exit_code); -} - -static int lecat_main(int argc, char** argv) { - int ok = 1; - int do_color = TRUE; - - if (argc >= 3) { - if (streq(argv[2], "-h") || streq(argv[2], "--help")) { - lecat_usage(argv[0], argv[1], stdout, 0); - } - } - - // 'mlr' and 'lecat' are already argv[0] and argv[1]. - int argb = 2; - if (argc >= 3 && argv[argb][0] == '-') { - if (streq(argv[argb], "--mono")) { - do_color = FALSE; - argb++; - } else { - fprintf(stderr, "%s %s: unrecognized option \"%s\".\n", - argv[0], argv[1], argv[argb]); - return 1; - } - } - - if (argb == argc) { - ok = ok && lecat_stream(stdin, do_color); - } else { - for (int argi = argb; argi < argc; argi++) { - char* file_name = argv[argi]; - FILE* input_stream = fopen(file_name, "r"); - if (input_stream == NULL) { - perror(file_name); - exit(1); - } - ok = lecat_stream(input_stream, do_color); - fclose(input_stream); - } - } - return ok ? 0 : 1; -} - -static int lecat_stream(FILE* input_stream, int do_color) { - while (1) { - int c = fgetc(input_stream); - if (c == EOF) - break; - if (c == '\r') { - if (do_color) - printf("\033[31;01m"); // xterm red - printf("[CR]"); - if (do_color) - printf("\033[0m"); - } else if (c == '\n') { - if (do_color) - printf("\033[32;01m"); // xterm green - printf("[LF]\n"); - if (do_color) - printf("\033[0m"); - } else { - putchar(c); - } - } - return 1; -} - -// ================================================================ -static int termcvt_stream(FILE* input_stream, FILE* output_stream, char* inend, char* outend) { - size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - int inend_length = strlen(inend); - while (1) { - char* line = mlr_alloc_read_line_multiple_delimiter(input_stream, inend, inend_length, &line_length); - if (line == NULL) { - break; - } - fputs(line, output_stream); - fputs(outend, output_stream); - free(line); - } - return 1; -} - -// ---------------------------------------------------------------- -static void termcvt_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s [option] {zero or more file names}\n", argv0, argv1); - fprintf(o, "Option (exactly one is required):\n"); - fprintf(o, "--cr2crlf\n"); - fprintf(o, "--lf2crlf\n"); - fprintf(o, "--crlf2cr\n"); - fprintf(o, "--crlf2lf\n"); - fprintf(o, "--cr2lf\n"); - fprintf(o, "--lf2cr\n"); - fprintf(o, "-I in-place processing (default is to write to stdout)\n"); - fprintf(o, "-h or --help: print this message\n"); - fprintf(o, "Zero file names means read from standard input.\n"); - fprintf(o, "Output is always to standard output; files are not written in-place.\n"); - exit(exit_code); -} - -// ---------------------------------------------------------------- -static int termcvt_main(int argc, char** argv) { - int ok = 1; - char* inend = "\n"; - char* outend = "\n"; - int do_in_place = FALSE; - - // argv[0] is 'mlr' - // argv[1] is 'termcvt' - // argv[2] is '--some-option' - // argv[3] and above are filenames - if (argc < 2) - termcvt_usage(argv[0], argv[1], stderr, 1); - int argi; - for (argi = 2; argi < argc; argi++) { - char* opt = argv[argi]; - - if (opt[0] != '-') - break; - - if (streq(opt, "-h") || streq(opt, "--help")) { - termcvt_usage(argv[0], argv[1], stdout, 0); - } else if (streq(opt, "-I")) { - do_in_place = TRUE; - } else if (streq(opt, "--cr2crlf")) { - inend = "\r"; - outend = "\r\n"; - } else if (streq(opt, "--lf2crlf")) { - inend = "\n"; - outend = "\r\n"; - } else if (streq(opt, "--crlf2cr")) { - inend = "\r\n"; - outend = "\r"; - } else if (streq(opt, "--lf2cr")) { - inend = "\n"; - outend = "\r"; - } else if (streq(opt, "--crlf2lf")) { - inend = "\r\n"; - outend = "\n"; - } else if (streq(opt, "--cr2lf")) { - inend = "\r"; - outend = "\n"; - } else { - termcvt_usage(argv[0], argv[1], stdout, 0); - } - } - - int nfiles = argc - argi; - if (nfiles == 0) { - ok = ok && termcvt_stream(stdin, stdout, inend, outend); - - } else if (do_in_place) { - for (; argi < argc; argi++) { - char* file_name = argv[argi]; - char* temp_name = alloc_suffixed_temp_file_name(file_name); - FILE* input_stream = fopen(file_name, "r"); - FILE* output_stream = fopen(temp_name, "wb"); - - if (input_stream == NULL) { - perror("fopen"); - fprintf(stderr, "%s: Could not open \"%s\" for read.\n", - MLR_GLOBALS.bargv0, file_name); - exit(1); - } - if (output_stream == NULL) { - perror("fopen"); - fprintf(stderr, "%s: Could not open \"%s\" for write.\n", - MLR_GLOBALS.bargv0, temp_name); - exit(1); - } - - ok = termcvt_stream(input_stream, output_stream, inend, outend); - - fclose(input_stream); - fclose(output_stream); - - int rc = rename(temp_name, file_name); - if (rc != 0) { - perror("rename"); - fprintf(stderr, "%s: Could not rename \"%s\" to \"%s\".\n", - MLR_GLOBALS.bargv0, temp_name, file_name); - exit(1); - } - free(temp_name); - } - - } else { - for (; argi < argc; argi++) { - char* file_name = argv[argi]; - FILE* input_stream = fopen(file_name, "r"); - if (input_stream == NULL) { - perror(file_name); - exit(1); - } - ok = termcvt_stream(input_stream, stdout, inend, outend); - fclose(input_stream); - } - - } - return ok ? 0 : 1; -} - -// ================================================================ -// Copyright (c) 1998 John Kerl. -// ================================================================ -// This is a simple hex dump with hex offsets to the left, hex data in the -// middle, and ASCII at the right. This is a subset of the functionality of -// Unix od; I wrote it in my NT days. -// -// Example: -// -// $ d2h $(jot 0 128) | unhex | hex -// 00000000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |................| -// 00000010: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |................| -// 00000020: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&'()*+,-./| -// 00000030: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |0123456789:;<=>?| -// 00000040: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFGHIJKLMNO| -// 00000050: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVWXYZ[\]^_| -// 00000060: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefghijklmno| -// 00000070: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvwxyz{|}~.| -// ================================================================ - -#define LINE_LENGTH_MAX 8192 - -// ---------------------------------------------------------------- -static void hex_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s [options] {zero or more file names}\n", argv0, argv1); - fprintf(o, "Simple hex-dump.\n"); - fprintf(o, "If zero file names are supplied, standard input is read.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-r: print only raw hex without leading offset indicators or trailing ASCII dump.\n"); - fprintf(o, "-h or --help: print this message\n"); - exit(exit_code); -} - -//---------------------------------------------------------------------- -// 'mlr' and 'hex' are already argv[0] and argv[1]. -static int hex_main(int argc, char **argv) { - char * filename; - FILE * in_fp; - FILE * out_fp; - int do_raw = 0; - int argi = 2; - - if (argc >= 3) { - if (streq(argv[2], "-r")) { - do_raw = 1; - argi++; - } else if (streq(argv[2], "-h") || streq(argv[2], "--help")) { - hex_usage(argv[0], argv[1], stdout, 0); - } - } - - int num_file_names = argc - argi; - - if (num_file_names == 0) { -#ifdef WINDOWS - setmode(fileno(stdin), O_BINARY); -#endif //WINDOWS - hex_dump_fp(stdin, stdout, do_raw); - } else { - for ( ; argi < argc; argi++) { - if (!do_raw) { - if (num_file_names > 1) - printf("%s:\n", argv[argi]); - } - filename = argv[argi]; - in_fp = fopen(filename, "rb"); - out_fp = stdout; - if (in_fp == NULL) { - fprintf(stderr, "Couldn't open \"%s\"; skipping.\n", - filename); - } - else { - hex_dump_fp(in_fp, out_fp, do_raw); - fclose(in_fp); - if (out_fp != stdout) - fclose(out_fp); - - } - if (!do_raw) { - if (num_file_names > 1) - printf("\n"); - } - } - } - - return 0; -} - -// ---------------------------------------------------------------- -static void hex_dump_fp(FILE *in_fp, FILE *out_fp, int do_raw) { - const int bytes_per_clump = 4; - const int clumps_per_line = 4; - const int buffer_size = bytes_per_clump * clumps_per_line; - unsigned char buf[buffer_size]; - long num_bytes_read; - long num_bytes_total = 0; - int byteno; - - while ((num_bytes_read=fread(buf, sizeof(unsigned char), - buffer_size, in_fp)) > 0) - { - if (!do_raw) { - printf("%08lx: ", num_bytes_total); - } - - for (byteno = 0; byteno < num_bytes_read; byteno++) { - unsigned int temp = buf[byteno]; - printf("%02x ", temp); - if ((byteno % bytes_per_clump) == - (bytes_per_clump - 1)) - { - if ((byteno > 0) && (byteno < buffer_size-1)) - printf(" "); - } - } - for (byteno = num_bytes_read; byteno < buffer_size; byteno++) { - printf(" "); - if ((byteno % bytes_per_clump) == - (bytes_per_clump - 1)) - { - if ((byteno > 0) && (byteno < buffer_size-1)) - printf(" "); - } - } - - if (!do_raw) { - printf("|"); - for (byteno = 0; byteno < num_bytes_read; byteno++) { - unsigned char temp = buf[byteno]; - if (!isprint(temp)) - temp = '.'; - printf("%c", temp); - } - - printf("|"); - } - - printf("\n"); - num_bytes_total += num_bytes_read; - } -} - -// ---------------------------------------------------------------- -static void unhex_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s [option] {zero or more file names}\n", argv0, argv1); - fprintf(o, "Options:\n"); - fprintf(o, "-h or --help: print this message\n"); - fprintf(o, "Zero file names means read from standard input.\n"); - fprintf(o, "Output is always to standard output; files are not written in-place.\n"); - exit(exit_code); -} - -// ---------------------------------------------------------------- -int unhex_main(int argc, char ** argv) { - // 'mlr' and 'unhex' are already argv[0] and argv[1]. - if (argc >= 3) { - if (streq(argv[2], "-h") || streq(argv[2], "--help")) { - unhex_usage(argv[0], argv[1], stdout, 0); - } - } - - int exit_code = 0; - if (argc == 2) { - unhex_fp(stdin, stdout); - } else { - for (int argi = 2; argi < argc; argi++) { - char* filename = argv[argi]; - FILE* infp = fopen(filename, "rb"); - if (infp == NULL) { - fprintf(stderr, "%s %s: Couldn't open \"%s\"; skipping.\n", - argv[0], argv[1], filename); - exit_code = 1; - } else { - unhex_fp(infp, stdout); - fclose(infp); - } - } - } - - return exit_code; -} - -// ---------------------------------------------------------------- -static void unhex_fp(FILE *infp, FILE *outfp) { - unsigned char byte; - unsigned temp; - int count; - while ((count=fscanf(infp, "%x", &temp)) > 0) { - byte = temp; - fwrite (&byte, sizeof(byte), 1, outfp); - } -} - -// ================================================================ -static void netbsd_strptime_usage(char* argv0, char* argv1, FILE* o, int exit_code) { - fprintf(o, "Usage: %s %s {string value} {format}\n", argv0, argv1); - fprintf(o, "Standalone driver for replacement strptime for MSYS2.\n"); - fprintf(o, "Example string value: 2012-03-04T05:06:07Z\n"); - fprintf(o, "Example format: %%Y-%%m-%%dT%%H:%%M:%%SZ\n"); - exit(exit_code); -} - -//---------------------------------------------------------------------- -#define MYBUFLEN 256 -static int netbsd_strptime_main(int argc, char **argv) { - // 'mlr' and 'netbsd_strptime' are already argv[0] and argv[1]. - if (streq(argv[2], "-h") || streq(argv[2], "--help") || (argc != 4)) { - netbsd_strptime_usage(argv[0], argv[1], stdout, 0); - } - - struct tm tm; - char* strptime_input = argv[2]; - char* format = argv[3]; - memset(&tm, 0, sizeof(tm)); - char* strptime_output = netbsd_strptime(strptime_input, format, &tm); - if (strptime_output == NULL) { - printf("Could not strptime(\"%s\", \"%s\").\n", strptime_input, format); - } else { - printf("strptime: %s ->\n", strptime_input); - printf(" tm_sec = %d\n", tm.tm_sec); - printf(" tm_min = %d\n", tm.tm_min); - printf(" tm_hour = %d\n", tm.tm_hour); - printf(" tm_mday = %d\n", tm.tm_mday); - printf(" tm_mon = %d\n", tm.tm_mon); - printf(" tm_year = %d\n", tm.tm_year); - printf(" tm_wday = %d\n", tm.tm_wday); - printf(" tm_yday = %d\n", tm.tm_yday); - printf(" tm_isdst = %d\n", tm.tm_isdst); - printf(" remainder = \"%s\"\n", strptime_output); - } - - return 0; -} diff --git a/c/auxents/aux_entries.h b/c/auxents/aux_entries.h deleted file mode 100644 index b21f480cc..000000000 --- a/c/auxents/aux_entries.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef AUX_ENTRIES_H -#define AUX_ENTRIES_H - -// Handles 'mlr lecat' and any other one-off tool things which don't go through the record-streaming logic. -// If the argument after the basename (i.e. argv[1]) is recognized then this function doesn't return, -// invoking the code for that argument instead and exiting. -void do_aux_entries(int argc, char** argv); -void show_aux_entries(FILE* fp); - -#endif // AUX_ENTRIES_H diff --git a/c/camake b/c/camake deleted file mode 100755 index c808b0763..000000000 --- a/c/camake +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - - -export CCOPT="clang -fsanitize=address -std=gnu99 -I. -I.. -Wall -Werror -O3 -lm" -export CCDEBUG="clang -fsanitize=address -std=gnu99 -I. -I.. -Wall -Werror -g -lm" - -export DSLCC="clang" -export DSLCFLAGS="-I.. -Wall -O2 -fsanitize=address" - -make -e -f Makefile.no-autoconfig -C parsing clean -make -e -f Makefile.no-autoconfig mlr mlrg diff --git a/c/cli/Makefile.am b/c/cli/Makefile.am deleted file mode 100644 index f3ba2a651..000000000 --- a/c/cli/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -noinst_LTLIBRARIES= libcli.la -libcli_la_SOURCES= \ - argparse.c \ - argparse.h \ - comment_handling.h \ - json_array_ingest.h \ - mlrcli.c \ - mlrcli.h \ - quoting.h - -# TODO: causes circular dependency -#noinst_PROGRAMS= ap -#ap_CPPFLAGS= -D__AP_MAIN__ ${AM_CPPFLAGS} -#ap_LDADD= ../containers/libcontainers.la ../lib/libmlr.la -#ap_SOURCES= argparse.c - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/cli/Makefile.in b/c/cli/Makefile.in deleted file mode 100644 index 7184371ba..000000000 --- a/c/cli/Makefile.in +++ /dev/null @@ -1,604 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/cli -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libcli_la_LIBADD = -am_libcli_la_OBJECTS = argparse.lo mlrcli.lo -libcli_la_OBJECTS = $(am_libcli_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libcli_la_SOURCES) -DIST_SOURCES = $(libcli_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libcli.la -libcli_la_SOURCES = \ - argparse.c \ - argparse.h \ - comment_handling.h \ - json_array_ingest.h \ - mlrcli.c \ - mlrcli.h \ - quoting.h - - -# TODO: causes circular dependency -#noinst_PROGRAMS= ap -#ap_CPPFLAGS= -D__AP_MAIN__ ${AM_CPPFLAGS} -#ap_LDADD= ../containers/libcontainers.la ../lib/libmlr.la -#ap_SOURCES= argparse.c -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/cli/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/cli/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libcli.la: $(libcli_la_OBJECTS) $(libcli_la_DEPENDENCIES) $(EXTRA_libcli_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libcli_la_OBJECTS) $(libcli_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argparse.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrcli.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/cli/README.md b/c/cli/README.md deleted file mode 100644 index 63eb099a8..000000000 --- a/c/cli/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Miller command-line interface - -mlrcli.h/c bags up all command-line options - -I use argparse.h/c in place of getopt in order not to depend on GNU-isms, yet, -elsewhere in Miller I readily depend on GNU-isms such as getdelim(). diff --git a/c/cli/argparse.c b/c/cli/argparse.c deleted file mode 100644 index 9eaf72fce..000000000 --- a/c/cli/argparse.c +++ /dev/null @@ -1,213 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "cli/argparse.h" - -// ================================================================ -typedef enum _ap_flag_t { - AP_INT_VALUE_FLAG, - AP_INT_FLAG, - AP_LONG_LONG_FLAG, - AP_DOUBLE_FLAG, - AP_STRING_FLAG, - AP_STRING_BUILD_LIST_FLAG, - AP_STRING_LIST_FLAG, - AP_STRING_ARRAY_FLAG -} ap_flag_t; - -typedef struct _ap_flag_def_t { - char* flag_name; - ap_flag_t type; - int intval; - void* pval; - int count; // 1 for bool flags; 2 for the rest -} ap_flag_def_t; - -static ap_flag_def_t* ap_find(ap_state_t* pstate, char* flag_name) { - for (sllve_t* pe = pstate->pflag_defs->phead; pe != NULL; pe = pe->pnext) { - ap_flag_def_t* pdef = pe->pvvalue; - if (streq(pdef->flag_name, flag_name)) - return pdef; - } - return NULL; -} - -static ap_flag_def_t* ap_flag_def_alloc(char* flag_name, ap_flag_t ap_type, int intval, void* pval, int count) { - ap_flag_def_t* pdef = mlr_malloc_or_die(sizeof(ap_flag_def_t)); - pdef->flag_name = flag_name; - pdef->type = ap_type; - pdef->intval = intval; - pdef->pval = pval; - pdef->count = count; - return pdef; -} - -// ================================================================ -ap_state_t* ap_alloc() { - ap_state_t* pstate = mlr_malloc_or_die(sizeof(ap_state_t)); - pstate->pflag_defs = sllv_alloc(); - - return pstate; -} - -void ap_free(ap_state_t* pstate) { - if (pstate == NULL) - return; - - for (sllve_t* pe = pstate->pflag_defs->phead; pe != NULL; pe = pe->pnext) { - ap_flag_def_t* pdef = pe->pvvalue; - - // Linked-lists are pointed to by mappers and freed by their free - // methods. If any mappers miss on that contract, we can find out by - // using valgrind --leak-check=full (e.g. reg_test/run --valgrind). - // - //if (pdef->type == AP_STRING_LIST_FLAG && pdef->pval != NULL) { - // slls_t** pplist = pdef->pval; - // slls_free(*pplist); - //} - - free(pdef); - } - sllv_free(pstate->pflag_defs); - - free(pstate); -} - -// ---------------------------------------------------------------- -void ap_define_true_flag(ap_state_t* pstate, char* flag_name, int* pintval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, TRUE, pintval, 1)); -} - -void ap_define_false_flag(ap_state_t* pstate, char* flag_name, int* pintval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, FALSE, pintval, 1)); -} - -void ap_define_int_value_flag(ap_state_t* pstate, char* flag_name, int intval, int* pintval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_VALUE_FLAG, intval, pintval, 1)); -} - -void ap_define_int_flag(ap_state_t* pstate, char* flag_name, int* pintval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_INT_FLAG, 0, pintval, 2)); -} -void ap_define_long_long_flag(ap_state_t* pstate, char* flag_name, long long* pintval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_LONG_LONG_FLAG, 0, pintval, 2)); -} - -void ap_define_float_flag(ap_state_t* pstate, char* flag_name, double* pdoubleval) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_DOUBLE_FLAG, 0, pdoubleval, 2)); -} - -void ap_define_string_flag(ap_state_t* pstate, char* flag_name, char** pstring) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_FLAG, 0, pstring, 2)); -} - -void ap_define_string_build_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_BUILD_LIST_FLAG, 0, pplist, 2)); -} - -void ap_define_string_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_LIST_FLAG, 0, pplist, 2)); -} - -void ap_define_string_array_flag(ap_state_t* pstate, char* flag_name, string_array_t** pparray) { - sllv_append(pstate->pflag_defs, ap_flag_def_alloc(flag_name, AP_STRING_ARRAY_FLAG, 0, pparray, 2)); -} - -// ---------------------------------------------------------------- -int ap_parse(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv) { - return ap_parse_aux(pstate, verb, pargi, argc, argv, TRUE); -} - -int ap_parse_aux(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv, - int error_on_unrecognized) -{ - int argi = *pargi; - int ok = TRUE; - - while (argi < argc) { - if (argv[argi][0] != '-' && argv[argi][0] != '+') { - break; - } - if (streq(argv[argi], "-h") || streq(argv[argi], "--help")) { - ok = FALSE; - break; - } - - ap_flag_def_t* pdef = ap_find(pstate, argv[argi]); - if (pdef == NULL) { - if (error_on_unrecognized) - ok = FALSE; - break; - } - - if ((argc-argi) < pdef->count) { - fprintf(stderr, "%s %s: option %s requires an argument.\n", - argv[0], verb, argv[argi]); - fprintf(stderr, "\n"); - ok = FALSE; - break; - } - - if (pdef->type == AP_INT_VALUE_FLAG) { - *(int *)pdef->pval = pdef->intval; - - } else if (pdef->type == AP_INT_FLAG) { - if (sscanf(argv[argi+1], "%d", (int *)pdef->pval) != 1) { - fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as integer.\n", - argv[0], verb, argv[argi+1], argv[argi]); - fprintf(stderr, "\n"); - } - - } else if (pdef->type == AP_LONG_LONG_FLAG) { - if (sscanf(argv[argi+1], "%lld", (long long *)pdef->pval) != 1) { - fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as integer.\n", - argv[0], verb, argv[argi+1], argv[argi]); - fprintf(stderr, "\n"); - } - - } else if (pdef->type == AP_DOUBLE_FLAG) { - if (!mlr_try_float_from_string(argv[argi+1], (double *)pdef->pval)) { - fprintf(stderr, "%s %s: couldn't parse \"%s\" after \"%s\" as double.\n", - argv[0], verb, argv[argi+1], argv[argi]); - fprintf(stderr, "\n"); - } - - } else if (pdef->type == AP_STRING_FLAG) { - char** pstring = pdef->pval; - *pstring = argv[argi+1]; - pdef->pval = pstring; - - } else if (pdef->type == AP_STRING_BUILD_LIST_FLAG) { - slls_t** pplist = pdef->pval; - if (*pplist == NULL) { - *pplist = slls_alloc(); - } - slls_append_no_free(*pplist, argv[argi+1]); - pdef->pval = pplist; - - } else if (pdef->type == AP_STRING_LIST_FLAG) { - slls_t** pplist = pdef->pval; - if (*pplist != NULL) - slls_free(*pplist); - *pplist = slls_from_line(argv[argi+1], ',', FALSE); - pdef->pval = pplist; - - } else if (pdef->type == AP_STRING_ARRAY_FLAG) { - string_array_t** pparray = pdef->pval; - if (*pparray != NULL) - string_array_free(*pparray); - *pparray = string_array_from_line(argv[argi+1], ','); - pdef->pval = pparray; - - } else { - ok = FALSE; - fprintf(stderr, "argparse.c: internal coding error: flag-def type %x not recognized.\n", pdef->type); - fprintf(stderr, "\n"); - break; - } - - argi += pdef->count; - } - - *pargi = argi; - return ok; -} diff --git a/c/cli/argparse.h b/c/cli/argparse.h deleted file mode 100644 index 0ad47144f..000000000 --- a/c/cli/argparse.h +++ /dev/null @@ -1,33 +0,0 @@ -// ================================================================ -// Argument-parsing library, with non-getopt semantics. -// ================================================================ - -#ifndef ARGPARSE_H -#define ARGPARSE_H -#include "containers/slls.h" -#include "containers/sllv.h" -#include "lib/string_array.h" - -typedef struct _ap_state_t { - sllv_t* pflag_defs; -} ap_state_t; - -ap_state_t* ap_alloc(); -void ap_free(ap_state_t* pstate); - -void ap_define_true_flag(ap_state_t* pstate, char* flag_name, int* pintval); -void ap_define_false_flag(ap_state_t* pstate, char* flag_name, int* pintval); -void ap_define_int_value_flag(ap_state_t* pstate, char* flag_name, int value, int* pintval); -void ap_define_int_flag(ap_state_t* pstate, char* flag_name, int* pintval); -void ap_define_long_long_flag(ap_state_t* pstate, char* flag_name, long long* pintval); -void ap_define_float_flag(ap_state_t* pstate, char* flag_name, double* pdoubleval); -void ap_define_string_flag(ap_state_t* pstate, char* flag_name, char** pstring); -void ap_define_string_build_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist); -void ap_define_string_list_flag(ap_state_t* pstate, char* flag_name, slls_t** pplist); -void ap_define_string_array_flag(ap_state_t* pstate, char* flag_name, string_array_t** pparray); - -int ap_parse(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv); -int ap_parse_aux(ap_state_t* pstate, char* verb, int* pargi, int argc, char** argv, - int error_on_unrecognized); - -#endif // ARGPARSE_H diff --git a/c/cli/comment_handling.h b/c/cli/comment_handling.h deleted file mode 100644 index a22502092..000000000 --- a/c/cli/comment_handling.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef COMMENT_HANDLING_H -#define COMMENT_HANDLING_H - -typedef enum _comment_handling_t { - PASS_COMMENTS, - SKIP_COMMENTS, - COMMENTS_ARE_DATA, -} comment_handling_t; - -#endif // COMMENT_HANDLING_H diff --git a/c/cli/json_array_ingest.h b/c/cli/json_array_ingest.h deleted file mode 100644 index 483795b0e..000000000 --- a/c/cli/json_array_ingest.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef JSON_ARRAY_INGEST_H -#define JSON_ARRAY_INGEST_H - -typedef enum _json_array_ingest_t { - JSON_ARRAY_INGEST_UNSPECIFIED, - JSON_ARRAY_INGEST_FATAL, - JSON_ARRAY_INGEST_SKIP, - JSON_ARRAY_INGEST_AS_MAP, -} json_array_ingest_t; - -#endif // JSON_ARRAY_INGEST_H diff --git a/c/cli/mlrcli.c b/c/cli/mlrcli.c deleted file mode 100644 index c151c23f9..000000000 --- a/c/cli/mlrcli.c +++ /dev/null @@ -1,2480 +0,0 @@ -#include -#include -#include - -#include "input/line_readers.h" - -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/mtrand.h" -#include "containers/slls.h" -#include "containers/lhmss.h" -#include "containers/lhmsll.h" -#include "input/lrec_readers.h" -#include "dsl/function_manager.h" -#include "dsl/mlr_dsl_cst.h" -#include "mapping/mappers.h" -#include "output/lrec_writers.h" -#include "cli/mlrcli.h" -#include "cli/quoting.h" -#include "cli/argparse.h" -#include "auxents/aux_entries.h" - -#ifdef HAVE_CONFIG_H -#include "config.h" -#define VERSION_STRING PACKAGE_VERSION -#else -#include "mlrvers.h" -#define VERSION_STRING MLR_VERSION -#endif - -// ---------------------------------------------------------------- -#define DEFAULT_OFMT "%lf" -#define DEFAULT_OQUOTING QUOTE_MINIMAL -#define DEFAULT_JSON_FLATTEN_SEPARATOR ":" -#define DEFAULT_OOSVAR_FLATTEN_SEPARATOR ":" -#define DEFAULT_COMMENT_STRING "#" - -// ASCII 1f and 1e -#define ASV_FS "\x1f" -#define ASV_RS "\x1e" - -#define ASV_FS_FOR_HELP "0x1f" -#define ASV_RS_FOR_HELP "0x1e" - -// Unicode code points U+241F and U+241E, encoded as UTF-8. -#define USV_FS "\xe2\x90\x9f" -#define USV_RS "\xe2\x90\x9e" - -#define USV_FS_FOR_HELP "U+241F (UTF-8 0xe2909f)" -#define USV_RS_FOR_HELP "U+241E (UTF-8 0xe2909e)" - -// ---------------------------------------------------------------- -static mapper_setup_t* mapper_lookup_table[] = { - - &mapper_altkv_setup, - &mapper_bar_setup, - &mapper_bootstrap_setup, - &mapper_cat_setup, - &mapper_check_setup, - &mapper_clean_whitespace_setup, - &mapper_count_setup, - &mapper_count_distinct_setup, - &mapper_count_similar_setup, - &mapper_cut_setup, - &mapper_decimate_setup, - &mapper_fill_down_setup, - &mapper_fill_empty_setup, - &mapper_filter_setup, - &mapper_format_values_setup, - &mapper_fraction_setup, - &mapper_grep_setup, - &mapper_group_by_setup, - &mapper_group_like_setup, - &mapper_having_fields_setup, - &mapper_head_setup, - &mapper_histogram_setup, - &mapper_join_setup, - &mapper_label_setup, - &mapper_least_frequent_setup, - &mapper_merge_fields_setup, - &mapper_most_frequent_setup, - &mapper_nest_setup, - &mapper_nothing_setup, - &mapper_put_setup, - &mapper_regularize_setup, - &mapper_remove_empty_columns_setup, - &mapper_rename_setup, - &mapper_reorder_setup, - &mapper_repeat_setup, - &mapper_reshape_setup, - &mapper_sample_setup, - &mapper_sec2gmt_setup, - &mapper_sec2gmtdate_setup, - &mapper_seqgen_setup, - &mapper_shuffle_setup, - &mapper_skip_trivial_records_setup, - &mapper_sort_setup, - &mapper_sort_within_records_setup, - &mapper_stats1_setup, - &mapper_stats2_setup, - &mapper_step_setup, - &mapper_tac_setup, - &mapper_tail_setup, - &mapper_tee_setup, - &mapper_top_setup, - &mapper_uniq_setup, - &mapper_unsparsify_setup, - -}; -static int mapper_lookup_table_length = sizeof(mapper_lookup_table) / sizeof(mapper_lookup_table[0]); - -// ---------------------------------------------------------------- -static void cli_load_mlrrc(cli_opts_t* popts); -static void cli_try_load_mlrrc(cli_opts_t* popts, char* path); -static int handle_mlrrc_line_1(cli_opts_t* popts, char* line); -static int handle_mlrrc_line_2(cli_opts_t* popts, char* line); -static int handle_mlrrc_line_3(cli_opts_t* popts, char* line); -static int handle_mlrrc_line_4(cli_opts_t* popts, char** argv, int argc); - -static int cli_handle_misc_options(char** argv, int argc, int *pargi, cli_opts_t* popts); - -static lhmss_t* get_desc_to_chars_map(); -static lhmsll_t* get_default_repeat_ifses(); -static lhmsll_t* get_default_repeat_ipses(); -static lhmss_t* get_default_fses(); -static lhmss_t* get_default_pses(); -static lhmss_t* get_default_rses(); -static void free_opt_singletons(); -static char* rebackslash(char* sep); - -static void main_usage_long(FILE* o, char* argv0); -static void main_usage_short(FILE* o, char* argv0); -static void main_usage_synopsis(FILE* o, char* argv0); -static void main_usage_examples(FILE* o, char* argv0, char* leader); -static void list_all_verbs_raw(FILE* o); -static void list_all_verbs(FILE* o, char* leader); -static void main_usage_help_options(FILE* o, char* argv0); -static void main_usage_mlrrc(FILE* o, char* argv0); -static void main_usage_functions(FILE* o, char* argv0, char* leader); -static void main_usage_data_format_examples(FILE* o, char* argv0); -static void main_usage_data_format_options(FILE* o, char* argv0); -static void main_usage_comments_in_data(FILE* o, char* argv0); -static void main_usage_format_conversion_keystroke_saver_options(FILE* o, char* argv0); -static void main_usage_compressed_data_options(FILE* o, char* argv0); -static void main_usage_separator_options(FILE* o, char* argv0); -static void main_usage_csv_options(FILE* o, char* argv0); -static void main_usage_double_quoting(FILE* o, char* argv0); -static void main_usage_numerical_formatting(FILE* o, char* argv0); -static void main_usage_other_options(FILE* o, char* argv0); -static void main_usage_then_chaining(FILE* o, char* argv0); -static void main_usage_auxents(FILE* o, char* argv0); -static void main_usage_see_also(FILE* o, char* argv0); -static void print_type_arithmetic_info(FILE* o, char* argv0); -static void usage_all_verbs(char* argv0); -static void usage_unrecognized_verb(char* argv0, char* arg); - -static void check_arg_count(char** argv, int argi, int argc, int n); -static mapper_setup_t* look_up_mapper_setup(char* verb); - -static int handle_terminal_usage(char** argv, int argc, int argi); - -static char* lhmss_get_or_die(lhmss_t* pmap, char* key); -static int lhmsll_get_or_die(lhmsll_t* pmap, char* key); - -// ---------------------------------------------------------------- -cli_opts_t* parse_command_line(int argc, char** argv, sllv_t** ppmapper_list) { - cli_opts_t* popts = mlr_malloc_or_die(sizeof(cli_opts_t)); - - int argi = 1; - - // Set defaults for options - cli_opts_init(popts); - - // Try .mlrrc overrides (then command-line on top of that). - // A --norc flag (if provided) must come before all other options. - // Or, they can set the environment variable MLRRC="__none__". - if (argc >= 2 && streq(argv[1], "--norc")) { - argi++; - } else { - cli_load_mlrrc(popts); - } - - for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { - - if (argv[argi][0] != '-') { - break; // No more flag options to process - } else if (handle_terminal_usage(argv, argc, argi)) { - exit(0); - } else if (cli_handle_reader_options(argv, argc, &argi, &popts->reader_opts)) { - // handled - } else if (cli_handle_writer_options(argv, argc, &argi, &popts->writer_opts)) { - // handled - } else if (cli_handle_reader_writer_options(argv, argc, &argi, &popts->reader_opts, &popts->writer_opts)) { - // handled - } else if (cli_handle_misc_options(argv, argc, &argi, popts)) { - // handled - } else { - // unhandled - usage_unrecognized_verb(MLR_GLOBALS.bargv0, argv[argi]); - } - } - - cli_apply_defaults(popts); - - lhmss_t* default_rses = get_default_rses(); - lhmss_t* default_fses = get_default_fses(); - lhmss_t* default_pses = get_default_pses(); - lhmsll_t* default_repeat_ifses = get_default_repeat_ifses(); - lhmsll_t* default_repeat_ipses = get_default_repeat_ipses(); - - if (popts->reader_opts.irs == NULL) - popts->reader_opts.irs = lhmss_get_or_die(default_rses, popts->reader_opts.ifile_fmt); - if (popts->reader_opts.ifs == NULL) - popts->reader_opts.ifs = lhmss_get_or_die(default_fses, popts->reader_opts.ifile_fmt); - if (popts->reader_opts.ips == NULL) - popts->reader_opts.ips = lhmss_get_or_die(default_pses, popts->reader_opts.ifile_fmt); - - if (popts->reader_opts.allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) - popts->reader_opts.allow_repeat_ifs = lhmsll_get_or_die(default_repeat_ifses, popts->reader_opts.ifile_fmt); - if (popts->reader_opts.allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) - popts->reader_opts.allow_repeat_ips = lhmsll_get_or_die(default_repeat_ipses, popts->reader_opts.ifile_fmt); - - if (popts->writer_opts.ors == NULL) - popts->writer_opts.ors = lhmss_get_or_die(default_rses, popts->writer_opts.ofile_fmt); - if (popts->writer_opts.ofs == NULL) - popts->writer_opts.ofs = lhmss_get_or_die(default_fses, popts->writer_opts.ofile_fmt); - if (popts->writer_opts.ops == NULL) - popts->writer_opts.ops = lhmss_get_or_die(default_pses, popts->writer_opts.ofile_fmt); - - if (streq(popts->writer_opts.ofile_fmt, "pprint") && strlen(popts->writer_opts.ofs) != 1) { - fprintf(stderr, "%s: OFS for PPRINT format must be single-character; got \"%s\".\n", - MLR_GLOBALS.bargv0, popts->writer_opts.ofs); - return NULL; - } - - // Construct the mapper list for single use, e.g. the normal streaming case wherein the - // mappers operate on all input files. Also retain information needed to construct them - // for each input file, for in-place mode. - popts->mapper_argb = argi; - popts->original_argv = argv; - popts->non_in_place_argv = copy_argv(argv); - popts->argc = argc; - *ppmapper_list = cli_parse_mappers(popts->non_in_place_argv, &argi, argc, popts); - - for ( ; argi < argc; argi++) { - slls_append(popts->filenames, argv[argi], NO_FREE); - } - - if (popts->no_input) { - slls_free(popts->filenames); - popts->filenames = NULL; - } - - if (popts->do_in_place && (popts->filenames == NULL || popts->filenames->length == 0)) { - fprintf(stderr, "%s: -I option (in-place operation) requires input files.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - if (popts->have_rand_seed) { - mtrand_init(popts->rand_seed); - } else { - mtrand_init_default(); - } - - return popts; -} - -// ---------------------------------------------------------------- -// Returns a list of mappers, from the starting point in argv given by *pargi. Bumps *pargi to -// point to remaining post-mapper-setup args, i.e. filenames. -sllv_t* cli_parse_mappers(char** argv, int* pargi, int argc, cli_opts_t* popts) { - sllv_t* pmapper_list = sllv_alloc(); - int argi = *pargi; - - // Allow then-chains to start with an initial 'then': 'mlr verb1 then verb2 then verb3' or - // 'mlr then verb1 then verb2 then verb3'. Particuarly useful in backslashy scripting contexts. - if ((argc - argi) >= 1 && streq(argv[argi], "then")) { - argi++; - } - - if ((argc - argi) < 1) { - fprintf(stderr, "%s: no verb supplied.\n", MLR_GLOBALS.bargv0); - main_usage_short(stderr, MLR_GLOBALS.bargv0); - exit(1); - } - - // Note that the command-line parsers can operate destructively on argv, e.g. verbs - // which take comma-delimited field names splitting on commas. For this reason we - // need to duplicate argv on each in-place run within the streamer module. But before - // that ever happens, here we run through the verb-parsers once to find out where it - // is on the command line that the verbs and their arguments end and the filenames - // begin. - - while (TRUE) { - check_arg_count(argv, argi, argc, 1); - char* verb = argv[argi]; - - mapper_setup_t* pmapper_setup = look_up_mapper_setup(verb); - if (pmapper_setup == NULL) { - fprintf(stderr, "%s: verb \"%s\" not found. Please use \"%s --help\" for a list.\n", - MLR_GLOBALS.bargv0, verb, MLR_GLOBALS.bargv0); - exit(1); - } - - if ((argc - argi) >= 2) { - if (streq(argv[argi+1], "-h") || streq(argv[argi+1], "--help")) { - pmapper_setup->pusage_func(stdout, MLR_GLOBALS.bargv0, verb); - exit(0); - } - } - - // It's up to the parse func to print its usage on CLI-parse failure. - // Also note: this assumes main reader/writer opts are all parsed - // *before* mapper parse-CLI methods are invoked. - mapper_t* pmapper = pmapper_setup->pparse_func(&argi, argc, argv, - &popts->reader_opts, &popts->writer_opts); - if (pmapper == NULL) { - exit(1); - } - - if (pmapper_setup->ignores_input && pmapper_list->length == 0) { - // e.g. then-chain starts with seqgen - popts->no_input = TRUE; - } - - sllv_append(pmapper_list, pmapper); - - if (argi >= argc || !streq(argv[argi], "then")) - break; - argi++; - } - - *pargi = argi; - return pmapper_list; -} - -// ---------------------------------------------------------------- -void cli_opts_free(cli_opts_t* popts) { - if (popts == NULL) - return; - - slls_free(popts->filenames); - free_argv_copy(popts->non_in_place_argv); - free(popts); - free_opt_singletons(); -} - -// ---------------------------------------------------------------- -static lhmss_t* singleton_pdesc_to_chars_map = NULL; -static lhmss_t* get_desc_to_chars_map() { - if (singleton_pdesc_to_chars_map == NULL) { - singleton_pdesc_to_chars_map = lhmss_alloc(); - lhmss_put(singleton_pdesc_to_chars_map, "cr", "\r", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "crcr", "\r\r", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "lf", "\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "lflf", "\n\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "crlf", "\r\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "crlfcrlf", "\r\n\r\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "tab", "\t", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "space", " ", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "comma", ",", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "pipe", "|", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "slash", "/", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "colon", ":", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "semicolon", ";", NO_FREE); - lhmss_put(singleton_pdesc_to_chars_map, "equals", "=", NO_FREE); - } - return singleton_pdesc_to_chars_map; -} -// Always strdup so the caller can unconditionally free our return value -char* cli_sep_from_arg(char* arg) { - char* chars = lhmss_get(get_desc_to_chars_map(), arg); - if (chars != NULL) // E.g. crlf - return mlr_strdup_or_die(chars); - else // E.g. '\r\n' - return mlr_alloc_unbackslash(arg); -} - -// ---------------------------------------------------------------- -static lhmss_t* singleton_default_rses = NULL; -static lhmss_t* singleton_default_fses = NULL; -static lhmss_t* singleton_default_pses = NULL; -static lhmsll_t* singleton_default_repeat_ifses = NULL; -static lhmsll_t* singleton_default_repeat_ipses = NULL; - -static lhmss_t* get_default_rses() { - if (singleton_default_rses == NULL) { - singleton_default_rses = lhmss_alloc(); - - lhmss_put(singleton_default_rses, "gen", "N/A", NO_FREE); - lhmss_put(singleton_default_rses, "dkvp", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "json", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "nidx", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "csv", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "csvlite", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "markdown", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "pprint", "auto", NO_FREE); - lhmss_put(singleton_default_rses, "xtab", "(N/A)", NO_FREE); - } - return singleton_default_rses; -} - -static lhmss_t* get_default_fses() { - if (singleton_default_fses == NULL) { - singleton_default_fses = lhmss_alloc(); - lhmss_put(singleton_default_fses, "gen", "(N/A)", NO_FREE); - lhmss_put(singleton_default_fses, "dkvp", ",", NO_FREE); - lhmss_put(singleton_default_fses, "json", "(N/A)", NO_FREE); - lhmss_put(singleton_default_fses, "nidx", " ", NO_FREE); - lhmss_put(singleton_default_fses, "csv", ",", NO_FREE); - lhmss_put(singleton_default_fses, "csvlite", ",", NO_FREE); - lhmss_put(singleton_default_fses, "markdown", "(N/A)", NO_FREE); - lhmss_put(singleton_default_fses, "pprint", " ", NO_FREE); - lhmss_put(singleton_default_fses, "xtab", "auto", NO_FREE); - } - return singleton_default_fses; -} - -static lhmss_t* get_default_pses() { - if (singleton_default_pses == NULL) { - singleton_default_pses = lhmss_alloc(); - lhmss_put(singleton_default_pses, "gen", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "dkvp", "=", NO_FREE); - lhmss_put(singleton_default_pses, "json", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "nidx", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "csv", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "csvlite", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "markdown", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "pprint", "(N/A)", NO_FREE); - lhmss_put(singleton_default_pses, "xtab", " ", NO_FREE); - } - return singleton_default_pses; -} - -static lhmsll_t* get_default_repeat_ifses() { - if (singleton_default_repeat_ifses == NULL) { - singleton_default_repeat_ifses = lhmsll_alloc(); - lhmsll_put(singleton_default_repeat_ifses, "gen", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "dkvp", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "json", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "csv", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "csvlite", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "markdown", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "nidx", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "xtab", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ifses, "pprint", TRUE, NO_FREE); - } - return singleton_default_repeat_ifses; -} - -static lhmsll_t* get_default_repeat_ipses() { - if (singleton_default_repeat_ipses == NULL) { - singleton_default_repeat_ipses = lhmsll_alloc(); - lhmsll_put(singleton_default_repeat_ipses, "gen", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "dkvp", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "json", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "csv", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "csvlite", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "markdown", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "nidx", FALSE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "xtab", TRUE, NO_FREE); - lhmsll_put(singleton_default_repeat_ipses, "pprint", FALSE, NO_FREE); - } - return singleton_default_repeat_ipses; -} - -static void free_opt_singletons() { - lhmss_free(singleton_pdesc_to_chars_map); - lhmss_free(singleton_default_rses); - lhmss_free(singleton_default_fses); - lhmss_free(singleton_default_pses); - lhmsll_free(singleton_default_repeat_ifses); - lhmsll_free(singleton_default_repeat_ipses); -} - -// For displaying the default separators in on-line help -static char* rebackslash(char* sep) { - if (streq(sep, "\r")) - return "\\r"; - else if (streq(sep, "\n")) - return "\\n"; - else if (streq(sep, "\r\n")) - return "\\r\\n"; - else if (streq(sep, "\t")) - return "\\t"; - else if (streq(sep, " ")) - return "space"; - else - return sep; -} - -// ---------------------------------------------------------------- -static void main_usage_short(FILE* fp, char* argv0) { - fprintf(stderr, "Please run \"%s --help\" for detailed usage information.\n", argv0); - exit(1); -} - -// ---------------------------------------------------------------- -// The main_usage_long() function is split out into subroutines in support of the -// manpage autogenerator. - -static void main_usage_long(FILE* o, char* argv0) { - main_usage_synopsis(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Command-line-syntax examples:\n"); - main_usage_examples(o, argv0, " "); - fprintf(o, "\n"); - - fprintf(o, "Data-format examples:\n"); - main_usage_data_format_examples(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Help options:\n"); - main_usage_help_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Customization via .mlrrc:\n"); - main_usage_mlrrc(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Verbs:\n"); - list_all_verbs(o, " "); - fprintf(o, "\n"); - - fprintf(o, "Functions for the filter and put verbs:\n"); - main_usage_functions(o, argv0, " "); - fprintf(o, "\n"); - - fprintf(o, "Data-format options, for input, output, or both:\n"); - main_usage_data_format_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Comments in data:\n"); - main_usage_comments_in_data(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Format-conversion keystroke-saver options, for input, output, or both:\n"); - main_usage_format_conversion_keystroke_saver_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Compressed-data options:\n"); - main_usage_compressed_data_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Separator options, for input, output, or both:\n"); - main_usage_separator_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Relevant to CSV/CSV-lite input only:\n"); - main_usage_csv_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Double-quoting for CSV output:\n"); - main_usage_double_quoting(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Numerical formatting:\n"); - main_usage_numerical_formatting(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Other options:\n"); - main_usage_other_options(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Then-chaining:\n"); - main_usage_then_chaining(o, argv0); - fprintf(o, "\n"); - - fprintf(o, "Auxiliary commands:\n"); - main_usage_auxents(o, argv0); - fprintf(o, "\n"); - - main_usage_see_also(o, argv0); -} - -static void main_usage_synopsis(FILE* o, char* argv0) { - fprintf(o, "Usage: %s [I/O options] {verb} [verb-dependent options ...] {zero or more file names}\n", argv0); -} - -static void main_usage_examples(FILE* o, char* argv0, char* leader) { - - fprintf(o, "%s%s --csv cut -f hostname,uptime mydata.csv\n", leader, argv0); - fprintf(o, "%s%s --tsv --rs lf filter '$status != \"down\" && $upsec >= 10000' *.tsv\n", leader, argv0); - fprintf(o, "%s%s --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat\n", leader, argv0); - fprintf(o, "%sgrep -v '^#' /etc/group | %s --ifs : --nidx --opprint label group,pass,gid,member then sort -f group\n", leader, argv0); - fprintf(o, "%s%s join -j account_id -f accounts.dat then group-by account_name balances.dat\n", leader, argv0); - fprintf(o, "%s%s --json put '$attr = sub($attr, \"([0-9]+)_([0-9]+)_.*\", \"\\1:\\2\")' data/*.json\n", leader, argv0); - fprintf(o, "%s%s stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/*\n", leader, argv0); - fprintf(o, "%s%s stats2 -a linreg-pca -f u,v -g shape data/*\n", leader, argv0); - fprintf(o, "%s%s put -q '@sum[$a][$b] += $x; end {emit @sum, \"a\", \"b\"}' data/*\n", leader, argv0); - fprintf(o, "%s%s --from estimates.tbl put '\n", leader, argv0); - fprintf(o, " for (k,v in $*) {\n"); - fprintf(o, " if (is_numeric(v) && k =~ \"^[t-z].*$\") {\n"); - fprintf(o, " $sum += v; $count += 1\n"); - fprintf(o, " }\n"); - fprintf(o, " }\n"); - fprintf(o, " $mean = $sum / $count # no assignment if count unset'\n"); - fprintf(o, "%s%s --from infile.dat put -f analyze.mlr\n", leader, argv0); - fprintf(o, "%s%s --from infile.dat put 'tee > \"./taps/data-\".$a.\"-\".$b, $*'\n", leader, argv0); - fprintf(o, "%s%s --from infile.dat put 'tee | \"gzip > ./taps/data-\".$a.\"-\".$b.\".gz\", $*'\n", leader, argv0); - fprintf(o, "%s%s --from infile.dat put -q '@v=$*; dump | \"jq .[]\"'\n", leader, argv0); - fprintf(o, "%s%s --from infile.dat put '(NR %% 1000 == 0) { print > stderr, \"Checkpoint \".NR}'\n", - leader, argv0); -} - -static void list_all_verbs_raw(FILE* o) { - for (int i = 0; i < mapper_lookup_table_length; i++) { - fprintf(o, "%s\n", mapper_lookup_table[i]->verb); - } -} - -static void list_all_verbs(FILE* o, char* leader) { - char* separator = " "; - int leaderlen = strlen(leader); - int separatorlen = strlen(separator); - int linelen = leaderlen; - int j = 0; - for (int i = 0; i < mapper_lookup_table_length; i++) { - char* verb = mapper_lookup_table[i]->verb; - int verblen = strlen(verb); - linelen += separatorlen + verblen; - if (linelen >= 80) { - fprintf(o, "\n"); - linelen = leaderlen + separatorlen + verblen; - j = 0; - } - if (j == 0) - fprintf(o, "%s", leader); - fprintf(o, "%s%s", separator, verb); - j++; - } - fprintf(o, "\n"); -} - -static void main_usage_help_options(FILE* o, char* argv0) { - fprintf(o, " -h or --help Show this message.\n"); - fprintf(o, " --version Show the software version.\n"); - fprintf(o, " {verb name} --help Show verb-specific help.\n"); - fprintf(o, " --help-all-verbs Show help on all verbs.\n"); - fprintf(o, " -l or --list-all-verbs List only verb names.\n"); - fprintf(o, " -L List only verb names, one per line.\n"); - fprintf(o, " -f or --help-all-functions Show help on all built-in functions.\n"); - fprintf(o, " -F Show a bare listing of built-in functions by name.\n"); - fprintf(o, " -k or --help-all-keywords Show help on all keywords.\n"); - fprintf(o, " -K Show a bare listing of keywords by name.\n"); -} - -static void main_usage_mlrrc(FILE* o, char* argv0) { - fprintf(o, "You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc.\n"); - fprintf(o, "For example, if you usually process CSV, then you can put \"--csv\" in your .mlrrc file\n"); - fprintf(o, "and that will be the default input/output format unless otherwise specified on the command line.\n"); - fprintf(o, "\n"); - fprintf(o, "The .mlrrc file format is one \"--flag\" or \"--option value\" per line, with the leading \"--\" optional.\n"); - fprintf(o, "Hash-style comments and blank lines are ignored.\n"); - fprintf(o, "\n"); - fprintf(o, "Sample .mlrrc:\n"); - fprintf(o, "# Input and output formats are CSV by default (unless otherwise specified\n"); - fprintf(o, "# on the mlr command line):\n"); - fprintf(o, "csv\n"); - fprintf(o, "# These are no-ops for CSV, but when I do use JSON output, I want these\n"); - fprintf(o, "# pretty-printing options to be used:\n"); - fprintf(o, "jvstack\n"); - fprintf(o, "jlistwrap\n"); - fprintf(o, "\n"); - fprintf(o, "How to specify location of .mlrrc:\n"); - fprintf(o, "* If $MLRRC is set:\n"); - fprintf(o, " o If its value is \"__none__\" then no .mlrrc files are processed.\n"); - fprintf(o, " o Otherwise, its value (as a filename) is loaded and processed. If there are syntax\n"); - fprintf(o, " errors, they abort mlr with a usage message (as if you had mistyped something on the\n"); - fprintf(o, " command line). If the file can't be loaded at all, though, it is silently skipped.\n"); - fprintf(o, " o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is\n"); - fprintf(o, " set in the environment.\n"); - fprintf(o, "* Otherwise:\n"); - fprintf(o, " o If $HOME/.mlrrc exists, it's then processed as above.\n"); - fprintf(o, " o If ./.mlrrc exists, it's then also processed as above.\n"); - fprintf(o, " (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.)\n"); - fprintf(o, "\n"); - fprintf(o, "See also:\n"); - fprintf(o, "https://johnkerl.org/miller/doc/customization.html\n"); -} - -static void main_usage_functions(FILE* o, char* argv0, char* leader) { - fmgr_t* pfmgr = fmgr_alloc(); - fmgr_list_functions(pfmgr, o, leader); - fmgr_free(pfmgr, NULL); - fprintf(o, "\n"); - fprintf(o, "Please use \"%s --help-function {function name}\" for function-specific help.\n", argv0); -} - -static void main_usage_data_format_examples(FILE* o, char* argv0) { - fprintf(o, - " DKVP: delimited key-value pairs (Miller default format)\n" - " +---------------------+\n" - " | apple=1,bat=2,cog=3 | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | dish=7,egg=8,flint | Record 2: \"dish\" => \"7\", \"egg\" => \"8\", \"3\" => \"flint\"\n" - " +---------------------+\n" - "\n" - " NIDX: implicitly numerically indexed (Unix-toolkit style)\n" - " +---------------------+\n" - " | the quick brown | Record 1: \"1\" => \"the\", \"2\" => \"quick\", \"3\" => \"brown\"\n" - " | fox jumped | Record 2: \"1\" => \"fox\", \"2\" => \"jumped\"\n" - " +---------------------+\n" - "\n" - " CSV/CSV-lite: comma-separated values with separate header line\n" - " +---------------------+\n" - " | apple,bat,cog |\n" - " | 1,2,3 | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | 4,5,6 | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" - " +---------------------+\n" - "\n" - " Tabular JSON: nested objects are supported, although arrays within them are not:\n" - " +---------------------+\n" - " | { |\n" - " | \"apple\": 1, | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | \"bat\": 2, |\n" - " | \"cog\": 3 |\n" - " | } |\n" - " | { |\n" - " | \"dish\": { | Record 2: \"dish:egg\" => \"7\", \"dish:flint\" => \"8\", \"garlic\" => \"\"\n" - " | \"egg\": 7, |\n" - " | \"flint\": 8 |\n" - " | }, |\n" - " | \"garlic\": \"\" |\n" - " | } |\n" - " +---------------------+\n" - "\n" - " PPRINT: pretty-printed tabular\n" - " +---------------------+\n" - " | apple bat cog |\n" - " | 1 2 3 | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | 4 5 6 | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" - " +---------------------+\n" - "\n" - " XTAB: pretty-printed transposed tabular\n" - " +---------------------+\n" - " | apple 1 | Record 1: \"apple\" => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | bat 2 |\n" - " | cog 3 |\n" - " | |\n" - " | dish 7 | Record 2: \"dish\" => \"7\", \"egg\" => \"8\"\n" - " | egg 8 |\n" - " +---------------------+\n" - "\n" - " Markdown tabular (supported for output only):\n" - " +-----------------------+\n" - " | | apple | bat | cog | |\n" - " | | --- | --- | --- | |\n" - " | | 1 | 2 | 3 | | Record 1: \"apple => \"1\", \"bat\" => \"2\", \"cog\" => \"3\"\n" - " | | 4 | 5 | 6 | | Record 2: \"apple\" => \"4\", \"bat\" => \"5\", \"cog\" => \"6\"\n" - " +-----------------------+\n"); -} - -static void main_usage_data_format_options(FILE* o, char* argv0) { - fprintf(o, " --idkvp --odkvp --dkvp Delimited key-value pairs, e.g \"a=1,b=2\"\n"); - fprintf(o, " (this is Miller's default format).\n"); - fprintf(o, "\n"); - fprintf(o, " --inidx --onidx --nidx Implicitly-integer-indexed fields\n"); - fprintf(o, " (Unix-toolkit style).\n"); - fprintf(o, " -T Synonymous with \"--nidx --fs tab\".\n"); - fprintf(o, "\n"); - fprintf(o, " --icsv --ocsv --csv Comma-separated value (or tab-separated\n"); - fprintf(o, " with --fs tab, etc.)\n"); - fprintf(o, "\n"); - fprintf(o, " --itsv --otsv --tsv Keystroke-savers for \"--icsv --ifs tab\",\n"); - fprintf(o, " \"--ocsv --ofs tab\", \"--csv --fs tab\".\n"); - fprintf(o, " --iasv --oasv --asv Similar but using ASCII FS %s and RS %s\n", - ASV_FS_FOR_HELP, ASV_RS_FOR_HELP); - fprintf(o, " --iusv --ousv --usv Similar but using Unicode FS %s\n", - USV_FS_FOR_HELP); - fprintf(o, " and RS %s\n", - USV_RS_FOR_HELP); - fprintf(o, "\n"); - fprintf(o, " --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated\n"); - fprintf(o, " with --fs tab, etc.). The 'lite' CSV does not handle\n"); - fprintf(o, " RFC-CSV double-quoting rules; is slightly faster;\n"); - fprintf(o, " and handles heterogeneity in the input stream via\n"); - fprintf(o, " empty newline followed by new header line. See also\n"); - fprintf(o, " http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc.\n"); - fprintf(o, "\n"); - fprintf(o, " --itsvlite --otsvlite --tsvlite Keystroke-savers for \"--icsvlite --ifs tab\",\n"); - fprintf(o, " \"--ocsvlite --ofs tab\", \"--csvlite --fs tab\".\n"); - fprintf(o, " -t Synonymous with --tsvlite.\n"); - fprintf(o, " --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS %s and RS %s\n", - ASV_FS_FOR_HELP, ASV_RS_FOR_HELP); - fprintf(o, " --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS %s\n", - USV_FS_FOR_HELP); - fprintf(o, " and RS %s\n", - USV_RS_FOR_HELP); - fprintf(o, "\n"); - fprintf(o, " --ipprint --opprint --pprint Pretty-printed tabular (produces no\n"); - fprintf(o, " output until all input is in).\n"); - fprintf(o, " --right Right-justifies all fields for PPRINT output.\n"); - fprintf(o, " --barred Prints a border around PPRINT output\n"); - fprintf(o, " (only available for output).\n"); - fprintf(o, "\n"); - fprintf(o, " --omd Markdown-tabular (only available for output).\n"); - fprintf(o, "\n"); - fprintf(o, " --ixtab --oxtab --xtab Pretty-printed vertical-tabular.\n"); - fprintf(o, " --xvright Right-justifies values for XTAB format.\n"); - fprintf(o, "\n"); - fprintf(o, " --ijson --ojson --json JSON tabular: sequence or list of one-level\n"); - fprintf(o, " maps: {...}{...} or [{...},{...}].\n"); - fprintf(o, " --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input\n"); - fprintf(o, " --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed\n"); - fprintf(o, " --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or\n"); - fprintf(o, " to be treated as errors. Please use the jq tool for full\n"); - fprintf(o, " JSON (pre)processing.\n"); - fprintf(o, " --jvstack Put one key-value pair per line for JSON\n"); - fprintf(o, " output.\n"); - fprintf(o, " --jsonx --ojsonx Keystroke-savers for --json --jvstack\n"); - fprintf(o, " --jsonx --ojsonx and --ojson --jvstack, respectively.\n"); - fprintf(o, " --jlistwrap Wrap JSON output in outermost [ ].\n"); - fprintf(o, " --jknquoteint Do not quote non-string map keys in JSON output.\n"); - fprintf(o, " --jvquoteall Quote map values in JSON output, even if they're\n"); - fprintf(o, " numeric.\n"); - fprintf(o, " --jflatsep {string} Separator for flattening multi-level JSON keys,\n"); - fprintf(o, " e.g. '{\"a\":{\"b\":3}}' becomes a:b => 3 for\n"); - fprintf(o, " non-JSON formats. Defaults to %s.\n", - DEFAULT_JSON_FLATTEN_SEPARATOR); - fprintf(o, "\n"); - fprintf(o, " -p is a keystroke-saver for --nidx --fs space --repifs\n"); - fprintf(o, "\n"); - fprintf(o, " Examples: --csv for CSV-formatted input and output; --idkvp --opprint for\n"); - fprintf(o, " DKVP-formatted input and pretty-printed output.\n"); - fprintf(o, "\n"); - fprintf(o, " Please use --iformat1 --oformat2 rather than --format1 --oformat2.\n"); - fprintf(o, " The latter sets up input and output flags for format1, not all of which\n"); - fprintf(o, " are overridden in all cases by setting output format to format2.\n"); -} - -static void main_usage_comments_in_data(FILE* o, char* argv0) { - fprintf(o, " --skip-comments Ignore commented lines (prefixed by \"%s\")\n", - DEFAULT_COMMENT_STRING); - fprintf(o, " within the input.\n"); - fprintf(o, " --skip-comments-with {string} Ignore commented lines within input, with\n"); - fprintf(o, " specified prefix.\n"); - fprintf(o, " --pass-comments Immediately print commented lines (prefixed by \"%s\")\n", - DEFAULT_COMMENT_STRING); - fprintf(o, " within the input.\n"); - fprintf(o, " --pass-comments-with {string} Immediately print commented lines within input, with\n"); - fprintf(o, " specified prefix.\n"); - fprintf(o, "Notes:\n"); - fprintf(o, "* Comments are only honored at the start of a line.\n"); - fprintf(o, "* In the absence of any of the above four options, comments are data like\n"); - fprintf(o, " any other text.\n"); - fprintf(o, "* When pass-comments is used, comment lines are written to standard output\n"); - fprintf(o, " immediately upon being read; they are not part of the record stream.\n"); - fprintf(o, " Results may be counterintuitive. A suggestion is to place comments at the\n"); - fprintf(o, " start of data files.\n"); -} - -static void main_usage_format_conversion_keystroke_saver_options(FILE* o, char* argv0) { - fprintf(o, "As keystroke-savers for format-conversion you may use the following:\n"); - fprintf(o, " --c2t --c2d --c2n --c2j --c2x --c2p --c2m\n"); - fprintf(o, " --t2c --t2d --t2n --t2j --t2x --t2p --t2m\n"); - fprintf(o, " --d2c --d2t --d2n --d2j --d2x --d2p --d2m\n"); - fprintf(o, " --n2c --n2t --n2d --n2j --n2x --n2p --n2m\n"); - fprintf(o, " --j2c --j2t --j2d --j2n --j2x --j2p --j2m\n"); - fprintf(o, " --x2c --x2t --x2d --x2n --x2j --x2p --x2m\n"); - fprintf(o, " --p2c --p2t --p2d --p2n --p2j --p2x --p2m\n"); - fprintf(o, "The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB,\n"); - fprintf(o, "PPRINT, and markdown, respectively. Note that markdown format is available for\n"); - fprintf(o, "output only.\n"); -} - -static void main_usage_compressed_data_options(FILE* o, char* argv0) { - fprintf(o, " --prepipe {command} This allows Miller to handle compressed inputs. You can do\n"); - fprintf(o, " without this for single input files, e.g. \"gunzip < myfile.csv.gz | %s ...\".\n", - argv0); - fprintf(o, "\n"); - fprintf(o, " However, when multiple input files are present, between-file separations are\n"); - fprintf(o, " lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can\n"); - fprintf(o, " specify an action to be taken on each input file. This pre-pipe command must\n"); - fprintf(o, " be able to read from standard input; it will be invoked with\n"); - fprintf(o, " {command} < {filename}.\n"); - fprintf(o, " Examples:\n"); - fprintf(o, " %s --prepipe 'gunzip'\n", argv0); - fprintf(o, " %s --prepipe 'zcat -cf'\n", argv0); - fprintf(o, " %s --prepipe 'xz -cd'\n", argv0); - fprintf(o, " %s --prepipe cat\n", argv0); - fprintf(o, " %s --prepipe-gunzip\n", argv0); - fprintf(o, " %s --prepipe-zcat\n", argv0); - fprintf(o, " Note that this feature is quite general and is not limited to decompression\n"); - fprintf(o, " utilities. You can use it to apply per-file filters of your choice.\n"); - fprintf(o, " For output compression (or other) utilities, simply pipe the output:\n"); - fprintf(o, " %s ... | {your compression command}\n", argv0); - fprintf(o, "\n"); - fprintf(o, " There are shorthands --prepipe-zcat and --prepipe-gunzip which are\n"); - fprintf(o, " valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc\n"); - fprintf(o, " files since that would put execution of the prepipe command under \n"); - fprintf(o, " control of the .mlrrc file.\n"); -} - -static void main_usage_separator_options(FILE* o, char* argv0) { - fprintf(o, " --rs --irs --ors Record separators, e.g. 'lf' or '\\r\\n'\n"); - fprintf(o, " --fs --ifs --ofs --repifs Field separators, e.g. comma\n"); - fprintf(o, " --ps --ips --ops Pair separators, e.g. equals sign\n"); - fprintf(o, "\n"); - fprintf(o, " Notes about line endings:\n"); - fprintf(o, " * Default line endings (--irs and --ors) are \"auto\" which means autodetect from\n"); - fprintf(o, " the input file format, as long as the input file(s) have lines ending in either\n"); - fprintf(o, " LF (also known as linefeed, '\\n', 0x0a, Unix-style) or CRLF (also known as\n"); - fprintf(o, " carriage-return/linefeed pairs, '\\r\\n', 0x0d 0x0a, Windows style).\n"); - fprintf(o, " * If both irs and ors are auto (which is the default) then LF input will lead to LF\n"); - fprintf(o, " output and CRLF input will lead to CRLF output, regardless of the platform you're\n"); - fprintf(o, " running on.\n"); - fprintf(o, " * The line-ending autodetector triggers on the first line ending detected in the input\n"); - fprintf(o, " stream. E.g. if you specify a CRLF-terminated file on the command line followed by an\n"); - fprintf(o, " LF-terminated file then autodetected line endings will be CRLF.\n"); - fprintf(o, " * If you use --ors {something else} with (default or explicitly specified) --irs auto\n"); - fprintf(o, " then line endings are autodetected on input and set to what you specify on output.\n"); - fprintf(o, " * If you use --irs {something else} with (default or explicitly specified) --ors auto\n"); - fprintf(o, " then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows.\n"); - fprintf(o, "\n"); - fprintf(o, " Notes about all other separators:\n"); - fprintf(o, " * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats\n"); - fprintf(o, " do key-value pairs appear juxtaposed.\n"); - fprintf(o, " * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines;\n"); - fprintf(o, " XTAB records are separated by two or more consecutive IFS/OFS -- i.e.\n"); - fprintf(o, " a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs\n"); - fprintf(o, " auto for XTAB format. (XTAB's default IFS/OFS are \"auto\".)\n"); - fprintf(o, " * OFS must be single-character for PPRINT format. This is because it is used\n"); - fprintf(o, " with repetition for alignment; multi-character separators would make\n"); - fprintf(o, " alignment impossible.\n"); - fprintf(o, " * OPS may be multi-character for XTAB format, in which case alignment is\n"); - fprintf(o, " disabled.\n"); - fprintf(o, " * TSV is simply CSV using tab as field separator (\"--fs tab\").\n"); - fprintf(o, " * FS/PS are ignored for markdown format; RS is used.\n"); - fprintf(o, " * All FS and PS options are ignored for JSON format, since they are not relevant\n"); - fprintf(o, " to the JSON format.\n"); - fprintf(o, " * You can specify separators in any of the following ways, shown by example:\n"); - fprintf(o, " - Type them out, quoting as necessary for shell escapes, e.g.\n"); - fprintf(o, " \"--fs '|' --ips :\"\n"); - fprintf(o, " - C-style escape sequences, e.g. \"--rs '\\r\\n' --fs '\\t'\".\n"); - fprintf(o, " - To avoid backslashing, you can use any of the following names:\n"); - fprintf(o, " "); - lhmss_t* pmap = get_desc_to_chars_map(); - for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - fprintf(o, " %s", pe->key); - } - fprintf(o, "\n"); - fprintf(o, " * Default separators by format:\n"); - fprintf(o, " %-12s %-8s %-8s %s\n", "File format", "RS", "FS", "PS"); - lhmss_t* default_rses = get_default_rses(); - lhmss_t* default_fses = get_default_fses(); - lhmss_t* default_pses = get_default_pses(); - for (lhmsse_t* pe = default_rses->phead; pe != NULL; pe = pe->pnext) { - char* filefmt = pe->key; - char* rs = pe->value; - char* fs = lhmss_get(default_fses, filefmt); - char* ps = lhmss_get(default_pses, filefmt); - fprintf(o, " %-12s %-8s %-8s %s\n", filefmt, rebackslash(rs), rebackslash(fs), rebackslash(ps)); - } -} - -static void main_usage_csv_options(FILE* o, char* argv0) { - fprintf(o, " --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1\n"); - fprintf(o, " of input files. Tip: combine with \"label\" to recreate\n"); - fprintf(o, " missing headers.\n"); - fprintf(o, " --no-implicit-csv-header Do not use --implicit-csv-header. This is the default\n"); - fprintf(o, " anyway -- the main use is for the flags to 'mlr join' if you have\n"); - fprintf(o, " main file(s) which are headerless but you want to join in on\n"); - fprintf(o, " a file which does have a CSV header. Then you could use\n"); - fprintf(o, " 'mlr --csv --implicit-csv-header join --no-implicit-csv-header\n"); - fprintf(o, " -l your-join-in-with-header.csv ... your-headerless.csv'\n"); - fprintf(o, " --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line,\n"); - fprintf(o, " fill remaining keys with empty string. If a data line has more\n"); - fprintf(o, " fields than the header line, use integer field labels as in\n"); - fprintf(o, " the implicit-header case.\n"); - fprintf(o, " --headerless-csv-output Print only CSV data lines.\n"); - fprintf(o, " -N Keystroke-saver for --implicit-csv-header --headerless-csv-output.\n"); -} - -static void main_usage_double_quoting(FILE* o, char* argv0) { - fprintf(o, " --quote-all Wrap all fields in double quotes\n"); - fprintf(o, " --quote-none Do not wrap any fields in double quotes, even if they have\n"); - fprintf(o, " OFS or ORS in them\n"); - fprintf(o, " --quote-minimal Wrap fields in double quotes only if they have OFS or ORS\n"); - fprintf(o, " in them (default)\n"); - fprintf(o, " --quote-numeric Wrap fields in double quotes only if they have numbers\n"); - fprintf(o, " in them\n"); - fprintf(o, " --quote-original Wrap fields in double quotes if and only if they were\n"); - fprintf(o, " quoted on input. This isn't sticky for computed fields:\n"); - fprintf(o, " e.g. if fields a and b were quoted on input and you do\n"); - fprintf(o, " \"put '$c = $a . $b'\" then field c won't inherit a or b's\n"); - fprintf(o, " was-quoted-on-input flag.\n"); -} - -static void main_usage_numerical_formatting(FILE* o, char* argv0) { - fprintf(o, " --ofmt {format} E.g. %%.18lf, %%.0lf. Please use sprintf-style codes for\n"); - fprintf(o, " double-precision. Applies to verbs which compute new\n"); - fprintf(o, " values, e.g. put, stats1, stats2. See also the fmtnum\n"); - fprintf(o, " function within mlr put (mlr --help-all-functions).\n"); - fprintf(o, " Defaults to %s.\n", DEFAULT_OFMT); -} - -static void main_usage_other_options(FILE* o, char* argv0) { - fprintf(o, " --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter\n"); - fprintf(o, " urand()/urandint()/urand32().\n"); - fprintf(o, " --nr-progress-mod {m}, with m a positive integer: print filename and record\n"); - fprintf(o, " count to stderr every m input records.\n"); - fprintf(o, " --from {filename} Use this to specify an input file before the verb(s),\n"); - fprintf(o, " rather than after. May be used more than once. Example:\n"); - fprintf(o, " \"%s --from a.dat --from b.dat cat\" is the same as\n", argv0); - fprintf(o, " \"%s cat a.dat b.dat\".\n", argv0); - fprintf(o, " -n Process no input files, nor standard input either. Useful\n"); - fprintf(o, " for %s put with begin/end statements only. (Same as --from\n", argv0); - fprintf(o, " /dev/null.) Also useful in \"%s -n put -v '...'\" for\n", argv0); - fprintf(o, " analyzing abstract syntax trees (if that's your thing).\n"); - fprintf(o, " -I Process files in-place. For each file name on the command\n"); - fprintf(o, " line, output is written to a temp file in the same\n"); - fprintf(o, " directory, which is then renamed over the original. Each\n"); - fprintf(o, " file is processed in isolation: if the output format is\n"); - fprintf(o, " CSV, CSV headers will be present in each output file;\n"); - fprintf(o, " statistics are only over each file's own records; and so on.\n"); -} - -static void main_usage_then_chaining(FILE* o, char* argv0) { - fprintf(o, "Output of one verb may be chained as input to another using \"then\", e.g.\n"); - fprintf(o, " %s stats1 -a min,mean,max -f flag,u,v -g color then sort -f color\n", argv0); -} - -static void main_usage_auxents(FILE* o, char* argv0) { - fprintf(o, "Miller has a few otherwise-standalone executables packaged within it.\n"); - fprintf(o, "They do not participate in any other parts of Miller.\n"); - show_aux_entries(o); -} - -static void main_usage_see_also(FILE* o, char* argv0) { - fprintf(o, "For more information please see http://johnkerl.org/miller/doc and/or\n"); - fprintf(o, "http://github.com/johnkerl/miller."); - fprintf(o, " This is Miller version %s.\n", VERSION_STRING); -} - -static void print_type_arithmetic_info(FILE* o, char* argv0) { - for (int i = -2; i < MT_DIM; i++) { - mv_t a = (mv_t) {.type = i, .free_flags = NO_FREE, .u.intv = 0}; - if (i == -2) - printf("%-6s |", "(+)"); - else if (i == -1) - printf("%-6s +", "------"); - else - printf("%-6s |", mt_describe_type_simple(a.type)); - - for (int j = 0; j < MT_DIM; j++) { - mv_t b = (mv_t) {.type = j, .free_flags = NO_FREE, .u.intv = 0}; - if (i == -2) { - printf(" %-6s", mt_describe_type_simple(b.type)); - } else if (i == -1) { - printf(" %-6s", "------"); - } else { - mv_t c = x_xx_plus_func(&a, &b); - printf(" %-6s", mt_describe_type_simple(c.type)); - } - } - - fprintf(o, "\n"); - } -} - -// ---------------------------------------------------------------- -static void usage_all_verbs(char* argv0) { - char* separator = "================================================================"; - - for (int i = 0; i < mapper_lookup_table_length; i++) { - fprintf(stdout, "%s\n", separator); - mapper_lookup_table[i]->pusage_func(stdout, argv0, mapper_lookup_table[i]->verb); - fprintf(stdout, "\n"); - } - fprintf(stdout, "%s\n", separator); - exit(0); -} - -static void usage_unrecognized_verb(char* argv0, char* arg) { - fprintf(stderr, "%s: option \"%s\" not recognized.\n", argv0, arg); - fprintf(stderr, "Please run \"%s --help\" for usage information.\n", argv0); - exit(1); -} - -static void check_arg_count(char** argv, int argi, int argc, int n) { - if ((argc - argi) < n) { - fprintf(stderr, "%s: option \"%s\" missing argument(s).\n", MLR_GLOBALS.bargv0, argv[argi]); - main_usage_short(stderr, MLR_GLOBALS.bargv0); - exit(1); - } -} - -static mapper_setup_t* look_up_mapper_setup(char* verb) { - mapper_setup_t* pmapper_setup = NULL; - for (int i = 0; i < mapper_lookup_table_length; i++) { - if (streq(mapper_lookup_table[i]->verb, verb)) - return mapper_lookup_table[i]; - } - - return pmapper_setup; -} - -// ---------------------------------------------------------------- -void cli_opts_init(cli_opts_t* popts) { - memset(popts, 0, sizeof(*popts)); - - cli_reader_opts_init(&popts->reader_opts); - cli_writer_opts_init(&popts->writer_opts); - - popts->mapper_argb = 0; - popts->filenames = slls_alloc(); - - popts->ofmt = NULL; - popts->nr_progress_mod = 0LL; - - popts->do_in_place = FALSE; - - popts->no_input = FALSE; - popts->have_rand_seed = FALSE; - popts->rand_seed = 0; -} - -// ---------------------------------------------------------------- -// * If $MLRRC is set, use it and only it. -// * Otherwise try first $HOME/.mlrrc and then ./.mlrrc but let them -// stack: e.g. $HOME/.mlrrc is lots of settings and maybe in one -// subdir you want to override just a setting or two. -static void cli_load_mlrrc(cli_opts_t* popts) { - char* env_mlrrc = getenv("MLRRC"); - if (env_mlrrc != NULL) { - if (streq(env_mlrrc, "__none__")) { - return; - } - cli_try_load_mlrrc(popts, env_mlrrc); - return; - } - - char* env_home = getenv("HOME"); - if (env_home != NULL) { - char* path = mlr_paste_2_strings(env_home, "/.mlrrc"); - cli_try_load_mlrrc(popts, path); - free(path); - } - - cli_try_load_mlrrc(popts, "./.mlrrc"); -} - -static void cli_try_load_mlrrc(cli_opts_t* popts, char* path) { - FILE* fp = fopen(path, "r"); - if (fp == NULL) { - return; - } - - char* line = NULL; - size_t linecap = 0; - int rc; - int lineno = 0; - - while ((rc = getline(&line, &linecap, fp)) != -1) { - lineno++; - char* line_to_destroy = strdup(line); - if (!handle_mlrrc_line_1(popts, line_to_destroy)) { - fprintf(stderr, "Parse error at file \"%s\" line %d: %s\n", - path, lineno, line); - exit(1); - } - free(line_to_destroy); - } - - fclose(fp); - if (line != NULL) { - free(line); - } -} - -// Chomps trailing CR, LF, or CR/LF; comment-strips; left-right trims. -static int handle_mlrrc_line_1(cli_opts_t* popts, char* line) { - // chomp - size_t len = strlen(line); - if (len >= 2 && line[len-2] == '\r' && line[len-1] == '\n') { - line[len-2] = 0; - } else if (len >= 1 && (line[len-1] == '\r' || line[len-1] == '\n')) { - line[len-1] = 0; - } - - // comment-strip - char* pbang = strstr(line, "#"); - if (pbang != NULL) { - *pbang = 0; - } - - // Left-trim - char* start = line; - while (*start == ' ' || *start == '\t') { - start++; - } - - // Right-trim - len = strlen(start); - char* end = &start[len-1]; - while (end > start && (*end == ' ' || *end == '\t')) { - *end = 0; - end--; - } - if (end < start) { // line was whitespace-only - return TRUE; - } else { - return handle_mlrrc_line_2(popts, start); - } -} - -// Prepends initial "--" if it's not already there -static int handle_mlrrc_line_2(cli_opts_t* popts, char* line) { - size_t len = strlen(line); - - char* dashed_line = NULL; - if (len >= 2 && line[0] != '-' && line[1] != '-') { - dashed_line = mlr_paste_2_strings("--", line); - } else { - dashed_line = strdup(line); - } - - int rc = handle_mlrrc_line_3(popts, dashed_line); - - // Do not free these. The command-line parsers can retain pointers into argv strings (rather - // than copying), resulting in freed-memory reads later in the data-processing verbs. - // - // It would be possible to be diligent about making sure all current command-line-parsing - // callsites copy strings rather than pointing to them -- but it would be easy to miss some, and - // also any future codemods might make the same mistake as well. - // - // It's safer (and no big leak) to simply leave these parsed mlrrc lines unfreed. - // - // free(dashed_line); - return rc; -} - -// Splits line into argv array -static int handle_mlrrc_line_3(cli_opts_t* popts, char* line) { - char* argv[3]; - int argc = 0; - char* split = strpbrk(line, " \t"); - if (split == NULL) { - argv[0] = line; - argv[1] = NULL; - argc = 1; - } else { - *split = 0; - char* p = split + 1; - while (*p == ' ' || *p == '\t') { - p++; - } - argv[0] = line; - argv[1] = p; - argv[2] = NULL; - argc = 2; - } - return handle_mlrrc_line_4(popts, argv, argc); -} - -static int handle_mlrrc_line_4(cli_opts_t* popts, char** argv, int argc) { - int argi = 0; - if (streq(argv[0], "--prepipe")) { - // Don't allow code execution via .mlrrc - return FALSE; - } - if (cli_handle_reader_options(argv, argc, &argi, &popts->reader_opts)) { - // handled - } else if (cli_handle_writer_options(argv, argc, &argi, &popts->writer_opts)) { - // handled - } else if (cli_handle_reader_writer_options(argv, argc, &argi, &popts->reader_opts, &popts->writer_opts)) { - // handled - } else if (cli_handle_misc_options(argv, argc, &argi, popts)) { - // handled - } else { - // unhandled - return FALSE; - } - - return TRUE; -} - -// ---------------------------------------------------------------- -void cli_reader_opts_init(cli_reader_opts_t* preader_opts) { - preader_opts->ifile_fmt = NULL; - preader_opts->irs = NULL; - preader_opts->ifs = NULL; - preader_opts->ips = NULL; - preader_opts->input_json_flatten_separator = NULL; - preader_opts->json_array_ingest = JSON_ARRAY_INGEST_UNSPECIFIED; - - preader_opts->allow_repeat_ifs = NEITHER_TRUE_NOR_FALSE; - preader_opts->allow_repeat_ips = NEITHER_TRUE_NOR_FALSE; - preader_opts->use_implicit_csv_header = NEITHER_TRUE_NOR_FALSE; - preader_opts->allow_ragged_csv_input = NEITHER_TRUE_NOR_FALSE; - - preader_opts->prepipe = NULL; - preader_opts->comment_handling = COMMENTS_ARE_DATA; - preader_opts->comment_string = NULL; - - preader_opts->generator_opts.field_name = "i"; - preader_opts->generator_opts.start = 0LL; - preader_opts->generator_opts.stop = 100LL; - preader_opts->generator_opts.step = 1LL; -} - -void cli_writer_opts_init(cli_writer_opts_t* pwriter_opts) { - pwriter_opts->ofile_fmt = NULL; - pwriter_opts->ors = NULL; - pwriter_opts->ofs = NULL; - pwriter_opts->ops = NULL; - - pwriter_opts->headerless_csv_output = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->right_justify_xtab_value = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->right_align_pprint = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->pprint_barred = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->stack_json_output_vertically = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->wrap_json_output_in_outer_list = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->json_quote_int_keys = NEITHER_TRUE_NOR_FALSE; - pwriter_opts->json_quote_non_string_values = NEITHER_TRUE_NOR_FALSE; - - pwriter_opts->output_json_flatten_separator = NULL; - pwriter_opts->oosvar_flatten_separator = NULL; - - pwriter_opts->oquoting = QUOTE_UNSPECIFIED; -} - -void cli_apply_defaults(cli_opts_t* popts) { - - cli_apply_reader_defaults(&popts->reader_opts); - - cli_apply_writer_defaults(&popts->writer_opts); - - if (popts->ofmt == NULL) - popts->ofmt = DEFAULT_OFMT; -} - -void cli_apply_reader_defaults(cli_reader_opts_t* preader_opts) { - if (preader_opts->ifile_fmt == NULL) - preader_opts->ifile_fmt = "dkvp"; - - if (preader_opts->json_array_ingest == JSON_ARRAY_INGEST_UNSPECIFIED) - preader_opts->json_array_ingest = JSON_ARRAY_INGEST_AS_MAP; - - if (preader_opts->use_implicit_csv_header == NEITHER_TRUE_NOR_FALSE) - preader_opts->use_implicit_csv_header = FALSE; - - if (preader_opts->allow_ragged_csv_input == NEITHER_TRUE_NOR_FALSE) - preader_opts->allow_ragged_csv_input = FALSE; - - if (preader_opts->input_json_flatten_separator == NULL) - preader_opts->input_json_flatten_separator = DEFAULT_JSON_FLATTEN_SEPARATOR; -} - -void cli_apply_writer_defaults(cli_writer_opts_t* pwriter_opts) { - if (pwriter_opts->ofile_fmt == NULL) - pwriter_opts->ofile_fmt = "dkvp"; - - if (pwriter_opts->headerless_csv_output == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->headerless_csv_output = FALSE; - - if (pwriter_opts->right_justify_xtab_value == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->right_justify_xtab_value = FALSE; - - if (pwriter_opts->right_align_pprint == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->right_align_pprint = FALSE; - - if (pwriter_opts->pprint_barred == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->pprint_barred = FALSE; - - if (pwriter_opts->stack_json_output_vertically == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->stack_json_output_vertically = FALSE; - - if (pwriter_opts->wrap_json_output_in_outer_list == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->wrap_json_output_in_outer_list = FALSE; - - if (pwriter_opts->json_quote_int_keys == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->json_quote_int_keys = TRUE; - - if (pwriter_opts->json_quote_non_string_values == NEITHER_TRUE_NOR_FALSE) - pwriter_opts->json_quote_non_string_values = FALSE; - - if (pwriter_opts->output_json_flatten_separator == NULL) - pwriter_opts->output_json_flatten_separator = DEFAULT_JSON_FLATTEN_SEPARATOR; - - if (pwriter_opts->oosvar_flatten_separator == NULL) - pwriter_opts->oosvar_flatten_separator = DEFAULT_OOSVAR_FLATTEN_SEPARATOR; - - if (pwriter_opts->oquoting == QUOTE_UNSPECIFIED) - pwriter_opts->oquoting = DEFAULT_OQUOTING; -} - -// ---------------------------------------------------------------- -// For mapper join which has its own input-format overrides. -// -// Mainly this just takes the main-opts flag whenever the join-opts flag was not -// specified by the user. But it's a bit more complex when main and join input -// formats are different. Example: main input format is CSV, for which IPS is -// "(N/A)", and join input format is DKVP. Then we should not use "(N/A)" -// for DKVP IPS. However if main input format were DKVP with IPS set to ":", -// then we should take that. -// -// The logic is: -// -// * If the join input format was unspecified, take all unspecified values from -// main opts. -// -// * If the join input format was specified and is the same as main input -// format, take unspecified values from main opts. -// -// * If the join input format was specified and is not the same as main input -// format, take unspecified values from defaults for the join input format. - -void cli_merge_reader_opts(cli_reader_opts_t* pfunc_opts, cli_reader_opts_t* pmain_opts) { - - if (pfunc_opts->ifile_fmt == NULL) { - pfunc_opts->ifile_fmt = pmain_opts->ifile_fmt; - } - - if (streq(pfunc_opts->ifile_fmt, pmain_opts->ifile_fmt)) { - - if (pfunc_opts->irs == NULL) - pfunc_opts->irs = pmain_opts->irs; - if (pfunc_opts->ifs == NULL) - pfunc_opts->ifs = pmain_opts->ifs; - if (pfunc_opts->ips == NULL) - pfunc_opts->ips = pmain_opts->ips; - if (pfunc_opts->allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->allow_repeat_ifs = pmain_opts->allow_repeat_ifs; - if (pfunc_opts->allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->allow_repeat_ips = pmain_opts->allow_repeat_ips; - - } else { - - if (pfunc_opts->irs == NULL) - pfunc_opts->irs = lhmss_get_or_die(get_default_rses(), pfunc_opts->ifile_fmt); - if (pfunc_opts->ifs == NULL) - pfunc_opts->ifs = lhmss_get_or_die(get_default_fses(), pfunc_opts->ifile_fmt); - if (pfunc_opts->ips == NULL) - pfunc_opts->ips = lhmss_get_or_die(get_default_pses(), pfunc_opts->ifile_fmt); - if (pfunc_opts->allow_repeat_ifs == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->allow_repeat_ifs = lhmsll_get_or_die(get_default_repeat_ifses(), pfunc_opts->ifile_fmt); - if (pfunc_opts->allow_repeat_ips == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->allow_repeat_ips = lhmsll_get_or_die(get_default_repeat_ipses(), pfunc_opts->ifile_fmt); - - } - - if (pfunc_opts->json_array_ingest == JSON_ARRAY_INGEST_UNSPECIFIED) - pfunc_opts->json_array_ingest = pmain_opts->json_array_ingest; - - if (pfunc_opts->use_implicit_csv_header == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->use_implicit_csv_header = pmain_opts->use_implicit_csv_header; - - if (pfunc_opts->allow_ragged_csv_input == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->allow_ragged_csv_input = pmain_opts->allow_ragged_csv_input; - - if (pfunc_opts->input_json_flatten_separator == NULL) - pfunc_opts->input_json_flatten_separator = pmain_opts->input_json_flatten_separator; -} - -// Similar to cli_merge_reader_opts but for mapper tee & mapper put which have their -// own output-format overrides. -void cli_merge_writer_opts(cli_writer_opts_t* pfunc_opts, cli_writer_opts_t* pmain_opts) { - - if (pfunc_opts->ofile_fmt == NULL) { - pfunc_opts->ofile_fmt = pmain_opts->ofile_fmt; - } - - if (streq(pfunc_opts->ofile_fmt, pmain_opts->ofile_fmt)) { - if (pfunc_opts->ors == NULL) - pfunc_opts->ors = pmain_opts->ors; - if (pfunc_opts->ofs == NULL) - pfunc_opts->ofs = pmain_opts->ofs; - if (pfunc_opts->ops == NULL) - pfunc_opts->ops = pmain_opts->ops; - } else { - if (pfunc_opts->ors == NULL) - pfunc_opts->ors = lhmss_get_or_die(get_default_rses(), pfunc_opts->ofile_fmt); - if (pfunc_opts->ofs == NULL) - pfunc_opts->ofs = lhmss_get_or_die(get_default_fses(), pfunc_opts->ofile_fmt); - if (pfunc_opts->ops == NULL) - pfunc_opts->ops = lhmss_get_or_die(get_default_pses(), pfunc_opts->ofile_fmt); - } - - if (pfunc_opts->headerless_csv_output == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->headerless_csv_output = pmain_opts->headerless_csv_output; - - if (pfunc_opts->right_justify_xtab_value == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->right_justify_xtab_value = pmain_opts->right_justify_xtab_value; - - if (pfunc_opts->right_align_pprint == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->right_align_pprint = pmain_opts->right_align_pprint; - - if (pfunc_opts->pprint_barred == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->pprint_barred = pmain_opts->pprint_barred; - - if (pfunc_opts->stack_json_output_vertically == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->stack_json_output_vertically = pmain_opts->stack_json_output_vertically; - - if (pfunc_opts->wrap_json_output_in_outer_list == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->wrap_json_output_in_outer_list = pmain_opts->wrap_json_output_in_outer_list; - - if (pfunc_opts->json_quote_int_keys == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->json_quote_int_keys = pmain_opts->json_quote_int_keys; - - if (pfunc_opts->json_quote_non_string_values == NEITHER_TRUE_NOR_FALSE) - pfunc_opts->json_quote_non_string_values = pmain_opts->json_quote_non_string_values; - - if (pfunc_opts->output_json_flatten_separator == NULL) - pfunc_opts->output_json_flatten_separator = pmain_opts->output_json_flatten_separator; - - if (pfunc_opts->oosvar_flatten_separator == NULL) - pfunc_opts->oosvar_flatten_separator = pmain_opts->oosvar_flatten_separator; - - if (pfunc_opts->oquoting == QUOTE_UNSPECIFIED) - pfunc_opts->oquoting = pmain_opts->oquoting; -} - -// ---------------------------------------------------------------- -static int handle_terminal_usage(char** argv, int argc, int argi) { - if (streq(argv[argi], "--version")) { - printf("Miller %s\n", VERSION_STRING); - return TRUE; - } else if (streq(argv[argi], "-h")) { - main_usage_long(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--help")) { - main_usage_long(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--print-type-arithmetic-info")) { - print_type_arithmetic_info(stdout, MLR_GLOBALS.bargv0); - return TRUE; - - } else if (streq(argv[argi], "--help-all-verbs")) { - usage_all_verbs(MLR_GLOBALS.bargv0); - } else if (streq(argv[argi], "--list-all-verbs") || streq(argv[argi], "-l")) { - list_all_verbs(stdout, ""); - return TRUE; - } else if (streq(argv[argi], "--list-all-verbs-raw") || streq(argv[argi], "-L")) { - list_all_verbs_raw(stdout); - return TRUE; - - } else if (streq(argv[argi], "--list-all-functions-raw") || streq(argv[argi], "-F")) { - fmgr_t* pfmgr = fmgr_alloc(); - fmgr_list_all_functions_raw(pfmgr, stdout); - fmgr_free(pfmgr, NULL); - return TRUE; - } else if (streq(argv[argi], "--list-all-functions-as-table")) { - fmgr_t* pfmgr = fmgr_alloc(); - fmgr_list_all_functions_as_table(pfmgr, stdout); - fmgr_free(pfmgr, NULL); - return TRUE; - } else if (streq(argv[argi], "--help-all-functions") || streq(argv[argi], "-f")) { - fmgr_t* pfmgr = fmgr_alloc(); - fmgr_function_usage(pfmgr, stdout, NULL); - fmgr_free(pfmgr, NULL); - return TRUE; - } else if (streq(argv[argi], "--help-function") || streq(argv[argi], "--hf")) { - check_arg_count(argv, argi, argc, 2); - fmgr_t* pfmgr = fmgr_alloc(); - fmgr_function_usage(pfmgr, stdout, argv[argi+1]); - fmgr_free(pfmgr, NULL); - return TRUE; - - } else if (streq(argv[argi], "--list-all-keywords-raw") || streq(argv[argi], "-K")) { - mlr_dsl_list_all_keywords_raw(stdout); - return TRUE; - } else if (streq(argv[argi], "--help-all-keywords") || streq(argv[argi], "-k")) { - mlr_dsl_keyword_usage(stdout, NULL); - return TRUE; - } else if (streq(argv[argi], "--help-keyword") || streq(argv[argi], "--hk")) { - check_arg_count(argv, argi, argc, 2); - mlr_dsl_keyword_usage(stdout, argv[argi+1]); - return TRUE; - - // main-usage subsections, individually accessible for the benefit of - // the manpage-autogenerator - } else if (streq(argv[argi], "--usage-synopsis")) { - main_usage_synopsis(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-examples")) { - main_usage_examples(stdout, MLR_GLOBALS.bargv0, ""); - return TRUE; - } else if (streq(argv[argi], "--usage-list-all-verbs")) { - list_all_verbs(stdout, ""); - return TRUE; - } else if (streq(argv[argi], "--usage-help-options")) { - main_usage_help_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-mlrrc")) { - main_usage_mlrrc(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-functions")) { - main_usage_functions(stdout, MLR_GLOBALS.bargv0, ""); - return TRUE; - } else if (streq(argv[argi], "--usage-data-format-examples")) { - main_usage_data_format_examples(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-data-format-options")) { - main_usage_data_format_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-comments-in-data")) { - main_usage_comments_in_data(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-format-conversion-keystroke-saver-options")) { - main_usage_format_conversion_keystroke_saver_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-compressed-data-options")) { - main_usage_compressed_data_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-separator-options")) { - main_usage_separator_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-csv-options")) { - main_usage_csv_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-double-quoting")) { - main_usage_double_quoting(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-numerical-formatting")) { - main_usage_numerical_formatting(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-other-options")) { - main_usage_other_options(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-then-chaining")) { - main_usage_then_chaining(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-auxents")) { - main_usage_auxents(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } else if (streq(argv[argi], "--usage-see-also")) { - main_usage_see_also(stdout, MLR_GLOBALS.bargv0); - return TRUE; - } - return FALSE; -} - -// Returns TRUE if the current flag was handled. -int cli_handle_reader_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts) { - int argi = *pargi; - int oargi = argi; - - if (streq(argv[argi], "--irs")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->irs = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--ifs")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->ifs = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--repifs")) { - preader_opts->allow_repeat_ifs = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--json-fatal-arrays-on-input")) { - preader_opts->json_array_ingest = JSON_ARRAY_INGEST_FATAL; - argi += 1; - } else if (streq(argv[argi], "--json-skip-arrays-on-input")) { - preader_opts->json_array_ingest = JSON_ARRAY_INGEST_SKIP; - argi += 1; - } else if (streq(argv[argi], "--json-map-arrays-on-input")) { - preader_opts->json_array_ingest = JSON_ARRAY_INGEST_AS_MAP; - argi += 1; - - } else if (streq(argv[argi], "--implicit-csv-header")) { - preader_opts->use_implicit_csv_header = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--no-implicit-csv-header")) { - preader_opts->use_implicit_csv_header = FALSE; - argi += 1; - - } else if (streq(argv[argi], "--allow-ragged-csv-input") || streq(argv[argi], "--ragged")) { - preader_opts->allow_ragged_csv_input = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--ips")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->ips = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "-i")) { - check_arg_count(argv, argi, argc, 2); - if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { - fprintf(stderr, "%s: unrecognized input format \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - exit(1); - } - preader_opts->ifile_fmt = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--igen")) { - preader_opts->ifile_fmt = "gen"; - argi += 1; - } else if (streq(argv[argi], "--gen-start")) { - preader_opts->ifile_fmt = "gen"; - check_arg_count(argv, argi, argc, 2); - if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.start) != 1) { - fprintf(stderr, "%s: could not scan \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - } - argi += 2; - } else if (streq(argv[argi], "--gen-stop")) { - preader_opts->ifile_fmt = "gen"; - check_arg_count(argv, argi, argc, 2); - if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.stop) != 1) { - fprintf(stderr, "%s: could not scan \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - } - argi += 2; - } else if (streq(argv[argi], "--gen-step")) { - preader_opts->ifile_fmt = "gen"; - check_arg_count(argv, argi, argc, 2); - if (sscanf(argv[argi+1], "%lld", &preader_opts->generator_opts.step) != 1) { - fprintf(stderr, "%s: could not scan \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - } - argi += 2; - - } else if (streq(argv[argi], "--icsv")) { - preader_opts->ifile_fmt = "csv"; - argi += 1; - - } else if (streq(argv[argi], "--icsvlite")) { - preader_opts->ifile_fmt = "csvlite"; - argi += 1; - - } else if (streq(argv[argi], "--itsv")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--itsvlite")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--iasv")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = ASV_FS; - preader_opts->irs = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--iasvlite")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = ASV_FS; - preader_opts->irs = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--iusv")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = USV_FS; - preader_opts->irs = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--iusvlite")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = USV_FS; - preader_opts->irs = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--idkvp")) { - preader_opts->ifile_fmt = "dkvp"; - argi += 1; - - } else if (streq(argv[argi], "--ijson")) { - preader_opts->ifile_fmt = "json"; - argi += 1; - - } else if (streq(argv[argi], "--inidx")) { - preader_opts->ifile_fmt = "nidx"; - argi += 1; - - } else if (streq(argv[argi], "--ixtab")) { - preader_opts->ifile_fmt = "xtab"; - argi += 1; - - } else if (streq(argv[argi], "--ipprint")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--mmap")) { - // No-op as of 5.6.3 (mmap is being abandoned) but don't break - // the command-line user experience. - argi += 1; - - } else if (streq(argv[argi], "--no-mmap")) { - // No-op as of 5.6.3 (mmap is being abandoned) but don't break - // the command-line user experience. - argi += 1; - - } else if (streq(argv[argi], "--prepipe")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->prepipe = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--prepipe-gunzip")) { - preader_opts->prepipe = "gunzip"; - argi += 1; - - } else if (streq(argv[argi], "--prepipe-zcat")) { - preader_opts->prepipe = "zcat"; - argi += 1; - - } else if (streq(argv[argi], "--skip-comments")) { - preader_opts->comment_string = DEFAULT_COMMENT_STRING; - preader_opts->comment_handling = SKIP_COMMENTS; - argi += 1; - - } else if (streq(argv[argi], "--skip-comments-with")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->comment_string = argv[argi+1]; - preader_opts->comment_handling = SKIP_COMMENTS; - argi += 2; - - } else if (streq(argv[argi], "--pass-comments")) { - preader_opts->comment_string = DEFAULT_COMMENT_STRING; - preader_opts->comment_handling = PASS_COMMENTS; - argi += 1; - - } else if (streq(argv[argi], "--pass-comments-with")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->comment_string = argv[argi+1]; - preader_opts->comment_handling = PASS_COMMENTS; - argi += 2; - - } - *pargi = argi; - return argi != oargi; -} - -// Returns TRUE if the current flag was handled. -int cli_handle_writer_options(char** argv, int argc, int *pargi, cli_writer_opts_t* pwriter_opts) { - int argi = *pargi; - int oargi = argi; - - if (streq(argv[argi], "--ors")) { - check_arg_count(argv, argi, argc, 2); - pwriter_opts->ors = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--ofs")) { - check_arg_count(argv, argi, argc, 2); - pwriter_opts->ofs = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--headerless-csv-output")) { - pwriter_opts->headerless_csv_output = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--ops")) { - check_arg_count(argv, argi, argc, 2); - pwriter_opts->ops = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--xvright")) { - pwriter_opts->right_justify_xtab_value = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--jvstack")) { - pwriter_opts->stack_json_output_vertically = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--jlistwrap")) { - pwriter_opts->wrap_json_output_in_outer_list = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--jknquoteint")) { - pwriter_opts->json_quote_int_keys = FALSE; - argi += 1; - } else if (streq(argv[argi], "--jquoteall")) { - pwriter_opts->json_quote_non_string_values = TRUE; - argi += 1; - } else if (streq(argv[argi], "--jvquoteall")) { - pwriter_opts->json_quote_non_string_values = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--vflatsep")) { - check_arg_count(argv, argi, argc, 2); - pwriter_opts->oosvar_flatten_separator = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "-o")) { - check_arg_count(argv, argi, argc, 2); - if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { - fprintf(stderr, "%s: unrecognized output format \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - exit(1); - } - pwriter_opts->ofile_fmt = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--ocsv")) { - pwriter_opts->ofile_fmt = "csv"; - argi += 1; - - } else if (streq(argv[argi], "--ocsvlite")) { - pwriter_opts->ofile_fmt = "csvlite"; - argi += 1; - - } else if (streq(argv[argi], "--otsv")) { - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ofs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--otsvlite")) { - pwriter_opts->ofile_fmt = "csvlite"; - pwriter_opts->ofs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--oasv")) { - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ofs = ASV_FS; - pwriter_opts->ors = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--oasvlite")) { - pwriter_opts->ofile_fmt = "csvlite"; - pwriter_opts->ofs = ASV_FS; - pwriter_opts->ors = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--ousv")) { - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ofs = USV_FS; - pwriter_opts->ors = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--ousvlite")) { - pwriter_opts->ofile_fmt = "csvlite"; - pwriter_opts->ofs = USV_FS; - pwriter_opts->ors = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--omd")) { - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--odkvp")) { - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - - } else if (streq(argv[argi], "--ojson")) { - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--ojsonx")) { - pwriter_opts->ofile_fmt = "json"; - pwriter_opts->stack_json_output_vertically = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--onidx")) { - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - - } else if (streq(argv[argi], "--oxtab")) { - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - - } else if (streq(argv[argi], "--opprint")) { - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - - } else if (streq(argv[argi], "--right")) { - pwriter_opts->right_align_pprint = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--barred")) { - pwriter_opts->pprint_barred = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--quote-all")) { - pwriter_opts->oquoting = QUOTE_ALL; - argi += 1; - - } else if (streq(argv[argi], "--quote-none")) { - pwriter_opts->oquoting = QUOTE_NONE; - argi += 1; - - } else if (streq(argv[argi], "--quote-minimal")) { - pwriter_opts->oquoting = QUOTE_MINIMAL; - argi += 1; - - } else if (streq(argv[argi], "--quote-numeric")) { - pwriter_opts->oquoting = QUOTE_NUMERIC; - argi += 1; - - } else if (streq(argv[argi], "--quote-original")) { - pwriter_opts->oquoting = QUOTE_ORIGINAL; - argi += 1; - - } - *pargi = argi; - return argi != oargi; -} - -// Returns TRUE if the current flag was handled. -int cli_handle_reader_writer_options(char** argv, int argc, int *pargi, - cli_reader_opts_t* preader_opts, cli_writer_opts_t* pwriter_opts) -{ - int argi = *pargi; - int oargi = argi; - - if (streq(argv[argi], "--rs")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->irs = cli_sep_from_arg(argv[argi+1]); - pwriter_opts->ors = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--fs")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->ifs = cli_sep_from_arg(argv[argi+1]); - pwriter_opts->ofs = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "-p")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "nidx"; - preader_opts->ifs = " "; - pwriter_opts->ofs = " "; - preader_opts->allow_repeat_ifs = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--ps")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->ips = cli_sep_from_arg(argv[argi+1]); - pwriter_opts->ops = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--jflatsep")) { - check_arg_count(argv, argi, argc, 2); - preader_opts->input_json_flatten_separator = cli_sep_from_arg(argv[argi+1]); - pwriter_opts->output_json_flatten_separator = cli_sep_from_arg(argv[argi+1]); - argi += 2; - - } else if (streq(argv[argi], "--io")) { - check_arg_count(argv, argi, argc, 2); - if (!lhmss_has_key(get_default_rses(), argv[argi+1])) { - fprintf(stderr, "%s: unrecognized I/O format \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - exit(1); - } - preader_opts->ifile_fmt = argv[argi+1]; - pwriter_opts->ofile_fmt = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--csv")) { - preader_opts->ifile_fmt = "csv"; - pwriter_opts->ofile_fmt = "csv"; - argi += 1; - - } else if (streq(argv[argi], "--csvlite")) { - preader_opts->ifile_fmt = "csvlite"; - pwriter_opts->ofile_fmt = "csvlite"; - argi += 1; - - } else if (streq(argv[argi], "--tsv")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; - preader_opts->ifs = "\t"; - pwriter_opts->ofs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--tsvlite") || streq(argv[argi], "-t")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; - preader_opts->ifs = "\t"; - pwriter_opts->ofs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--asv")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; - preader_opts->ifs = ASV_FS; - pwriter_opts->ofs = ASV_FS; - preader_opts->irs = ASV_RS; - pwriter_opts->ors = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--asvlite")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; - preader_opts->ifs = ASV_FS; - pwriter_opts->ofs = ASV_FS; - preader_opts->irs = ASV_RS; - pwriter_opts->ors = ASV_RS; - argi += 1; - - } else if (streq(argv[argi], "--usv")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csv"; - preader_opts->ifs = USV_FS; - pwriter_opts->ofs = USV_FS; - preader_opts->irs = USV_RS; - pwriter_opts->ors = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--usvlite")) { - preader_opts->ifile_fmt = pwriter_opts->ofile_fmt = "csvlite"; - preader_opts->ifs = USV_FS; - pwriter_opts->ofs = USV_FS; - preader_opts->irs = USV_RS; - pwriter_opts->ors = USV_RS; - argi += 1; - - } else if (streq(argv[argi], "--dkvp")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - - } else if (streq(argv[argi], "--json")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--jsonx")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "json"; - pwriter_opts->stack_json_output_vertically = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--nidx")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - - } else if (streq(argv[argi], "-T")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "nidx"; - preader_opts->ifs = "\t"; - pwriter_opts->ofs = "\t"; - argi += 1; - - } else if (streq(argv[argi], "--xtab")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - - } else if (streq(argv[argi], "--pprint")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - - } else if (streq(argv[argi], "--c2t")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--c2d")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--c2n")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--c2j")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--c2p")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--c2x")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--c2m")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--t2c")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--t2d")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--t2n")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--t2j")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--t2p")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--t2x")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--t2m")) { - preader_opts->ifile_fmt = "csv"; - preader_opts->ifs = "\t"; - preader_opts->irs = "auto"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--d2c")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--d2t")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--d2n")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--d2j")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--d2p")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--d2x")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--d2m")) { - preader_opts->ifile_fmt = "dkvp"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--n2c")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--n2t")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--n2d")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--n2j")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--n2p")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--n2x")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--n2m")) { - preader_opts->ifile_fmt = "nidx"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--j2c")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--j2t")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--j2d")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--j2n")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--j2p")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--j2x")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--j2m")) { - preader_opts->ifile_fmt = "json"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--p2c")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--p2t")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--p2d")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--p2n")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--p2j")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--p2x")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "xtab"; - argi += 1; - } else if (streq(argv[argi], "--p2m")) { - preader_opts->ifile_fmt = "csvlite"; - preader_opts->ifs = " "; - preader_opts->allow_repeat_ifs = TRUE; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "--x2c")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - argi += 1; - } else if (streq(argv[argi], "--x2t")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "csv"; - pwriter_opts->ors = "auto"; - pwriter_opts->ofs = "\t"; - argi += 1; - } else if (streq(argv[argi], "--x2d")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "dkvp"; - argi += 1; - } else if (streq(argv[argi], "--x2n")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "nidx"; - argi += 1; - } else if (streq(argv[argi], "--x2j")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "json"; - argi += 1; - } else if (streq(argv[argi], "--x2p")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "pprint"; - argi += 1; - } else if (streq(argv[argi], "--x2m")) { - preader_opts->ifile_fmt = "xtab"; - pwriter_opts->ofile_fmt = "markdown"; - argi += 1; - - } else if (streq(argv[argi], "-N")) { - preader_opts->use_implicit_csv_header = TRUE; - pwriter_opts->headerless_csv_output = TRUE; - argi += 1; - } - *pargi = argi; - return argi != oargi; -} - -// Returns TRUE if the current flag was handled. -static int cli_handle_misc_options(char** argv, int argc, int *pargi, cli_opts_t* popts) { - int argi = *pargi; - int oargi = argi; - - if (streq(argv[argi], "-I")) { - popts->do_in_place = TRUE; - argi += 1; - - } else if (streq(argv[argi], "-n")) { - popts->no_input = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--from")) { - check_arg_count(argv, argi, argc, 2); - slls_append(popts->filenames, argv[argi+1], NO_FREE); - argi += 2; - - } else if (streq(argv[argi], "--ofmt")) { - check_arg_count(argv, argi, argc, 2); - popts->ofmt = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--nr-progress-mod")) { - check_arg_count(argv, argi, argc, 2); - if (sscanf(argv[argi+1], "%lld", &popts->nr_progress_mod) != 1) { - fprintf(stderr, - "%s: --nr-progress-mod argument must be a positive integer; got \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - main_usage_short(stderr, MLR_GLOBALS.bargv0); - exit(1); - } - if (popts->nr_progress_mod <= 0) { - fprintf(stderr, - "%s: --nr-progress-mod argument must be a positive integer; got \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - main_usage_short(stderr, MLR_GLOBALS.bargv0); - exit(1); - } - argi += 2; - - } else if (streq(argv[argi], "--seed")) { - check_arg_count(argv, argi, argc, 2); - if (sscanf(argv[argi+1], "0x%x", &popts->rand_seed) == 1) { - popts->have_rand_seed = TRUE; - } else if (sscanf(argv[argi+1], "%u", &popts->rand_seed) == 1) { - popts->have_rand_seed = TRUE; - } else { - fprintf(stderr, - "%s: --seed argument must be a decimal or hexadecimal integer; got \"%s\".\n", - MLR_GLOBALS.bargv0, argv[argi+1]); - main_usage_short(stderr, MLR_GLOBALS.bargv0); - exit(1); - } - argi += 2; - - } - *pargi = argi; - return argi != oargi; -} - -// ---------------------------------------------------------------- -static char* lhmss_get_or_die(lhmss_t* pmap, char* key) { - char* value = lhmss_get(pmap, key); - MLR_INTERNAL_CODING_ERROR_IF(value == NULL); - return value; -} - -// ---------------------------------------------------------------- -static int lhmsll_get_or_die(lhmsll_t* pmap, char* key) { - MLR_INTERNAL_CODING_ERROR_UNLESS(lhmsll_has_key(pmap, key)); - return lhmsll_get(pmap, key); -} diff --git a/c/cli/mlrcli.h b/c/cli/mlrcli.h deleted file mode 100644 index 96844657b..000000000 --- a/c/cli/mlrcli.h +++ /dev/null @@ -1,139 +0,0 @@ -// ================================================================ -// Miller command-line parsing -// ================================================================ - -#ifndef MLRCLI_H -#define MLRCLI_H - -#include "lib/context.h" -#include "containers/slls.h" -#include "containers/sllv.h" -#include "cli/quoting.h" -#include "cli/comment_handling.h" -#include "cli/json_array_ingest.h" -#include "containers/lhmsll.h" -#include "containers/lhmss.h" -#include - -// ---------------------------------------------------------------- -typedef struct _generator_opts_t { - char* field_name; - // xxx to do: convert to mv_t - long long start; - long long stop; - long long step; -} generator_opts_t; - -typedef struct _cli_reader_opts_t { - - char* ifile_fmt; - char* irs; - char* ifs; - char* ips; - char* input_json_flatten_separator; - json_array_ingest_t json_array_ingest; - - int allow_repeat_ifs; - int allow_repeat_ips; - int use_implicit_csv_header; - int allow_ragged_csv_input; - - // Command for popen on input, e.g. "zcat -cf <". Can be null in which case - // files are read directly rather than through a pipe. - char* prepipe; - - comment_handling_t comment_handling; - char* comment_string; - - // Fake internal-data-generator 'reader' - generator_opts_t generator_opts; - -} cli_reader_opts_t; - -// ---------------------------------------------------------------- -typedef struct _cli_writer_opts_t { - - char* ofile_fmt; - char* ors; - char* ofs; - char* ops; - - int headerless_csv_output; - int right_justify_xtab_value; - int right_align_pprint; - int pprint_barred; - int stack_json_output_vertically; - int wrap_json_output_in_outer_list; - int json_quote_int_keys; - int json_quote_non_string_values; - char* output_json_flatten_separator; - char* oosvar_flatten_separator; - - quoting_t oquoting; - -} cli_writer_opts_t; - -// ---------------------------------------------------------------- -typedef struct _cli_opts_t { - cli_reader_opts_t reader_opts; - cli_writer_opts_t writer_opts; - - // These are used to construct the mapper list. In particular, for in-place mode - // they're reconstructed for each file. We make copies since each pass through a - // CLI-parser operates destructively, principally by running strtok over - // comma-delimited field-name lists. - - char** original_argv; - char** non_in_place_argv; - int argc; - int mapper_argb; - - slls_t* filenames; - - char* ofmt; - long long nr_progress_mod; - - int do_in_place; - - int no_input; - int have_rand_seed; - unsigned rand_seed; - -} cli_opts_t; - -// ---------------------------------------------------------------- -cli_opts_t* parse_command_line(int argc, char** argv, sllv_t** ppmapper_list); - -// See stream.c. The idea is that the mapper-chain is constructed once for normal stream-over-all-files -// mode, but per-file for in-place mode. -sllv_t* cli_parse_mappers(char** argv, int* pargi, int argc, cli_opts_t* popts); - -int cli_handle_reader_options(char** argv, int argc, int *pargi, cli_reader_opts_t* preader_opts); -int cli_handle_writer_options(char** argv, int argc, int *pargi, cli_writer_opts_t* pwriter_opts); -int cli_handle_reader_writer_options(char** argv, int argc, int *pargi, - cli_reader_opts_t* preader_opts, cli_writer_opts_t* pwriter_opts); - -void cli_opts_init(cli_opts_t* popts); -void cli_reader_opts_init(cli_reader_opts_t* preader_opts); -void cli_writer_opts_init(cli_writer_opts_t* pwriter_opts); - -void cli_apply_defaults(cli_opts_t* popts); -void cli_apply_reader_defaults(cli_reader_opts_t* preader_opts); -void cli_apply_writer_defaults(cli_writer_opts_t* pwriter_opts); - -// For mapper join which has its separate input-format overrides: -void cli_merge_reader_opts(cli_reader_opts_t* pfunc_opts, cli_reader_opts_t* pmain_opts); - -// For mapper tee & mapper put which have their separate output-format overrides: -void cli_merge_writer_opts(cli_writer_opts_t* pfunc_opts, cli_writer_opts_t* pmain_opts); - -// Stream context is for lrec-writer drain on tee et al. when using aggregated -// output. E.g. pretty-print output has column widths which are only computable -// after all output records have been retained. The free methods are used as -// drain triggers. -void cli_opts_free(cli_opts_t* popts); - -// The caller can unconditionally free the return value -char* cli_sep_from_arg(char* arg); - -#endif // MLRCLI_H diff --git a/c/cli/quoting.h b/c/cli/quoting.h deleted file mode 100644 index 97c3c24bf..000000000 --- a/c/cli/quoting.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef QUOTING_H -#define QUOTING_H - -typedef enum _quoting_t { - QUOTE_ALL, - QUOTE_NONE, - QUOTE_MINIMAL, - QUOTE_NUMERIC, - QUOTE_ORIGINAL, - QUOTE_UNSPECIFIED, -} quoting_t; - -#endif // QUOTING_H diff --git a/c/cmake b/c/cmake deleted file mode 100755 index f753f29e1..000000000 --- a/c/cmake +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - - -export CCOPT="clang -std=gnu99 -I. -I.. -Wall -Werror -O3 -lm" -export CCDEBUG="clang -std=gnu99 -I. -I.. -Wall -Werror -g -lm" - -export DSLCC="clang" -#export DSLCFLAGS="-I.. -Wall -O2" -export DSLCFLAGS="-I.. -Wall -O2 -g" - -make -e -f Makefile.no-autoconfig -C parsing clean -make -e -f Makefile.no-autoconfig mlr mlrg diff --git a/c/containers/Makefile.am b/c/containers/Makefile.am deleted file mode 100644 index 3471fd7d5..000000000 --- a/c/containers/Makefile.am +++ /dev/null @@ -1,62 +0,0 @@ -noinst_LTLIBRARIES= libcontainers.la -libcontainers_la_SOURCES= \ - boxed_xval.h \ - dheap.c \ - dheap.h \ - dvector.c \ - dvector.h \ - header_keeper.c \ - header_keeper.h \ - hss.c \ - hss.h \ - join_bucket_keeper.c \ - join_bucket_keeper.h \ - lhms2v.c \ - lhms2v.h \ - lhmsi.c \ - lhmsi.h \ - lhmsll.c \ - lhmsll.h \ - lhmslv.c \ - lhmslv.h \ - lhmsmv.c \ - lhmsmv.h \ - lhmss.c \ - lhmss.h \ - lhmsv.c \ - lhmsv.h \ - local_stack.c \ - local_stack.h \ - loop_stack.c \ - loop_stack.h \ - lrec.c \ - lrec.h \ - mixutil.c \ - mixutil.h \ - mlhmmv.c \ - mlhmmv.h \ - parse_trie.c \ - parse_trie.h \ - percentile_keeper.c \ - percentile_keeper.h \ - rslls.c \ - rslls.h \ - sllmv.c \ - sllmv.h \ - slls.c \ - slls.h \ - sllv.c \ - sllv.h \ - top_keeper.c \ - top_keeper.h \ - type_decl.c \ - type_decl.h \ - xvfuncs.c \ - xvfuncs.h - -libcontainers_la_LIBADD= \ - ../lib/libmlr.la \ - ../mapping/libmapping.la - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/containers/Makefile.in b/c/containers/Makefile.in deleted file mode 100644 index f40fd144c..000000000 --- a/c/containers/Makefile.in +++ /dev/null @@ -1,678 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/containers -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libcontainers_la_DEPENDENCIES = ../lib/libmlr.la \ - ../mapping/libmapping.la -am_libcontainers_la_OBJECTS = dheap.lo dvector.lo header_keeper.lo \ - hss.lo join_bucket_keeper.lo lhms2v.lo lhmsi.lo lhmsll.lo \ - lhmslv.lo lhmsmv.lo lhmss.lo lhmsv.lo local_stack.lo \ - loop_stack.lo lrec.lo mixutil.lo mlhmmv.lo parse_trie.lo \ - percentile_keeper.lo rslls.lo sllmv.lo slls.lo sllv.lo \ - top_keeper.lo type_decl.lo xvfuncs.lo -libcontainers_la_OBJECTS = $(am_libcontainers_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libcontainers_la_SOURCES) -DIST_SOURCES = $(libcontainers_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libcontainers.la -libcontainers_la_SOURCES = \ - boxed_xval.h \ - dheap.c \ - dheap.h \ - dvector.c \ - dvector.h \ - header_keeper.c \ - header_keeper.h \ - hss.c \ - hss.h \ - join_bucket_keeper.c \ - join_bucket_keeper.h \ - lhms2v.c \ - lhms2v.h \ - lhmsi.c \ - lhmsi.h \ - lhmsll.c \ - lhmsll.h \ - lhmslv.c \ - lhmslv.h \ - lhmsmv.c \ - lhmsmv.h \ - lhmss.c \ - lhmss.h \ - lhmsv.c \ - lhmsv.h \ - local_stack.c \ - local_stack.h \ - loop_stack.c \ - loop_stack.h \ - lrec.c \ - lrec.h \ - mixutil.c \ - mixutil.h \ - mlhmmv.c \ - mlhmmv.h \ - parse_trie.c \ - parse_trie.h \ - percentile_keeper.c \ - percentile_keeper.h \ - rslls.c \ - rslls.h \ - sllmv.c \ - sllmv.h \ - slls.c \ - slls.h \ - sllv.c \ - sllv.h \ - top_keeper.c \ - top_keeper.h \ - type_decl.c \ - type_decl.h \ - xvfuncs.c \ - xvfuncs.h - -libcontainers_la_LIBADD = \ - ../lib/libmlr.la \ - ../mapping/libmapping.la - -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/containers/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/containers/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libcontainers.la: $(libcontainers_la_OBJECTS) $(libcontainers_la_DEPENDENCIES) $(EXTRA_libcontainers_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libcontainers_la_OBJECTS) $(libcontainers_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dheap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvector.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_keeper.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join_bucket_keeper.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhms2v.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsi.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsll.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmslv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsmv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmss.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhmsv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local_stack.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop_stack.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lrec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mixutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlhmmv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_trie.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/percentile_keeper.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rslls.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sllmv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slls.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sllv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/top_keeper.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type_decl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvfuncs.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/containers/README.md b/c/containers/README.md deleted file mode 100644 index 0c2808820..000000000 --- a/c/containers/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Miller containers - -These are generally very standard and simple programming-exercise kinds of -things. There is some duplication of simple hash-map logic by key and value -types: this is plain C with no templates or generics and I didn't want to do -preprocessor tricks to reduce line count at the expense of code clarity. diff --git a/c/containers/boxed_xval.h b/c/containers/boxed_xval.h deleted file mode 100644 index a8e1e12d0..000000000 --- a/c/containers/boxed_xval.h +++ /dev/null @@ -1,51 +0,0 @@ -// ================================================================ -// This is for map-valued contexts: LHS/RHS of assignments, -// UDF/subroutine arguments, and UDF return values. - -// The is_ephemeral flag is TRUE for map-literals, function return values, and -// data copied out of srecs. It is FALSE when the pointer is into an existing -// data structure's memory (e.g. oosvars or locals). -// ================================================================ - -#ifndef BOXED_XVAL_H -#define BOXED_XVAL_H - -#include "../lib/mlrval.h" -#include "../containers/mlhmmv.h" - -// ---------------------------------------------------------------- -typedef struct _boxed_xval_t { - mlhmmv_xvalue_t xval; - char is_ephemeral; -} boxed_xval_t; - -// ---------------------------------------------------------------- -static inline boxed_xval_t box_ephemeral_val(mv_t val) { - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(val), - .is_ephemeral = TRUE, - }; -} - -static inline boxed_xval_t box_non_ephemeral_val(mv_t val) { - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(val), - .is_ephemeral = FALSE, - }; -} - -static inline boxed_xval_t box_ephemeral_xval(mlhmmv_xvalue_t xval) { - return (boxed_xval_t) { - .xval = xval, - .is_ephemeral = TRUE, - }; -} - -static inline boxed_xval_t box_non_ephemeral_xval(mlhmmv_xvalue_t xval) { - return (boxed_xval_t) { - .xval = xval, - .is_ephemeral = FALSE, - }; -} - -#endif // BOXED_XVAL_H diff --git a/c/containers/dheap.c b/c/containers/dheap.c deleted file mode 100644 index 32436ea7f..000000000 --- a/c/containers/dheap.c +++ /dev/null @@ -1,290 +0,0 @@ -// ================================================================ -// Zero-indexed max-heap of double. -// John Kerl -// 2012-06-02 -// ================================================================ - -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/dheap.h" - -// ---------------------------------------------------------------- -// 1-up: left child 2*i -// right child 2*i+1 -// parent i/2 -// 0-up: left child 2*i+1 -// right child 2*i+2 -// parent (i-1)/2 -// Why: Example of 1-up i=10 l=20 r=21; 0-up i=9 l=19 r=20. -// Or: 0-up i |-> 1-up i+1 |-> 1-up 2*i+2 |-> 0-up 2*i+1. -// And likewise for right child & parent. - -static inline int dheap_left_child_index(int i, int n) -{ - int li = 2*i+1; - if (li >= n) - return -1; - else - return li; -} - -static inline int dheap_right_child_index(int i, int n) -{ - int ri = 2*i+2; - if (ri >= n) - return -1; - else - return ri; -} - -static inline int dheap_parent_index(int i, int n) -{ - if (i == 0) - return -1; - else - return (i-1)/2; -} - -static inline void ptr_swap(double *pa, double *pb) -{ - double temp = *pa; - *pa = *pb; - *pb = temp; -} - -// ================================================================ -dheap_t *dheap_alloc() -{ - dheap_t *pdheap = mlr_malloc_or_die(sizeof(dheap_t)); - pdheap->n = 0; - pdheap->alloc_size = DHEAP_INIT_ALLOC_SIZE; - pdheap->elements = mlr_malloc_or_die(pdheap->alloc_size*sizeof(double)); - pdheap->is_malloced = 1; - return pdheap; -} - -// ---------------------------------------------------------------- -dheap_t *dheap_from_array(double *array, int n) -{ - dheap_t *pdheap = mlr_malloc_or_die(sizeof(dheap_t)); - pdheap->n = 0; - pdheap->alloc_size = n; - pdheap->elements = array; - pdheap->is_malloced = 0; - return pdheap; -} - -// ---------------------------------------------------------------- -void dheap_free(dheap_t *pdheap) -{ - if (pdheap == NULL) - return; - if (pdheap->elements != NULL) - if (pdheap->is_malloced) - free(pdheap->elements); - pdheap->n = 0; - pdheap->alloc_size = 0; - pdheap->elements = NULL; - free(pdheap); -} - -// ================================================================ -static void dheap_print_aux(dheap_t *pdheap, int i, int depth) -{ - if (i >= pdheap->n) - return; - int w; - printf("[%04d] ", i); - for (w = 0; w < depth; w++) - printf(" "); - printf("%.8lf\n", pdheap->elements[i]); - int li = dheap_left_child_index (i, pdheap->n); - int ri = dheap_right_child_index(i, pdheap->n); - if (li != -1) - dheap_print_aux(pdheap, li, depth+1); - if (ri != -1) - dheap_print_aux(pdheap, ri, depth+1); -} - -void dheap_print(dheap_t *pdheap) -{ - printf("BEGIN DHEAP (n=%d):\n", pdheap->n); - dheap_print_aux(pdheap, 0, 0); - printf("END DHEAP\n"); -} - -// ---------------------------------------------------------------- -// 1 -// 2 3 -// 4 5 6 7 -// 8 9 10 11 12 13 14 15 - -static int dheap_check_aux(dheap_t *pdheap, int i, char *file, int line) -{ - int n = pdheap->n; - double *pe = pdheap->elements; - - if (i >= n) - return TRUE; - int li = dheap_left_child_index (i, pdheap->n); - int ri = dheap_right_child_index(i, pdheap->n); - if (li != -1) { - if (pe[i] < pe[li]) { - fprintf(stderr, "dheap check fail %s:%d pe[%d]=%lf < pe[%d]=%lf\n", - file, line, i, pe[i], li, pe[li]); - return FALSE; - } - dheap_check_aux(pdheap, li, file, line); - } - if (ri != -1) { - if (pe[i] < pe[ri]) { - fprintf(stderr, "dheap check fail %s:%d pe[%d]=%lf < pe[%d]=%lf\n", - file, line, i, pe[i], ri, pe[ri]); - return FALSE; - } - dheap_check_aux(pdheap, ri, file, line); - } - return TRUE; -} - -int dheap_check(dheap_t *pdheap, char *file, int line) -{ - return dheap_check_aux(pdheap, 1, file, line); -} - -// ---------------------------------------------------------------- -static void dheap_bubble_up(dheap_t *pdheap, int i) -{ - int pi = dheap_parent_index(i, pdheap->n); - if (pi == -1) - return; - double *pe = pdheap->elements; - if (pe[pi] < pe[i]) { - ptr_swap(&pe[pi], &pe[i]); - dheap_bubble_up(pdheap, pi); - } -} - -// ---------------------------------------------------------------- -// 1 -// 2 3 -// 4 5 6 7 -// 8 9 10 11 12 (n=13) - -void dheap_add(dheap_t *pdheap, double v) -{ - if (pdheap->n >= pdheap->alloc_size) { - if (!pdheap->is_malloced) { - fprintf(stderr, "extension of non-malloced dheap!\n"); - exit(1); - } - pdheap->alloc_size *= 2; - pdheap->elements = (double *)mlr_realloc_or_die(pdheap->elements, - pdheap->alloc_size*sizeof(double)); - } - - pdheap->elements[pdheap->n++] = v; - dheap_bubble_up(pdheap, pdheap->n-1); -} - -// ---------------------------------------------------------------- -// 1. Replace the root of the dheap with the last element on the last level. -// 2. Compare the new root with its children; if they are in the correct order, -// stop. -// 3. If not, swap the element with one of its children and return to the -// previous step. (Swap with its smaller child in a min-dheap and its larger -// child in a max-dheap.) - -static void dheap_bubble_down(dheap_t *pdheap, int i) -{ - int li = dheap_left_child_index(i, pdheap->n); - - if (li == -1) { - // We add left to right, so this means left and right are both nil. - return; - } - - int ri = dheap_right_child_index(i, pdheap->n); - double *pe = pdheap->elements; - - if (ri == -1) { - // Right is nil, left is non-nil. - if (pe[li] > pe[i]) { - ptr_swap(&pe[li], &pe[i]); - dheap_bubble_down(pdheap, li); - } - return; - } - - // Now left and right are both non-nil. - // - // P 3 - // L R 9 7 - // a b c d 1 2 4 6 - // - // Cases: - double *L = &pe[li]; - double *P = &pe[i]; - double *R = &pe[ri]; - - if (*L <= *P) { - if (*R <= *P) { - // 1. L <= R <= P: done. - // 2. R <= L <= P: done. - return; - } - else if (*P <= *R) { - // 3. L <= P <= R: swap P&R; bubble down R. - ptr_swap(R, P); - dheap_bubble_down(pdheap, ri); - } - } - - else if (*R <= *P && *P <= *L) { - // 4. R <= P <= L: swap P&L; bubble down L. - ptr_swap(L, P); - dheap_bubble_down(pdheap, li); - } - else if (*P <= *R && *R <= *L) { - // 5. P <= R <= L: swap P&L; bubble down L. - ptr_swap(L, P); - dheap_bubble_down(pdheap, li); - } - else if (P <= L && L <= R) { - // 6. P <= L <= R: swap P&R; bubble down R. - ptr_swap(R, P); - dheap_bubble_down(pdheap, ri); - } -} - -double dheap_remove(dheap_t *pdheap) -{ - if (pdheap->n <= 0) { - fprintf(stderr, "remove from empty dheap!\n"); - exit(1); - } - - double rv = pdheap->elements[0]; - - pdheap->elements[0] = pdheap->elements[pdheap->n-1]; - pdheap->n--; - dheap_bubble_down(pdheap, 0); - - return rv; -} - -void dheap_sort(double *array, int n) -{ - dheap_t *pdheap = dheap_from_array(array, n); - int i; - - for (i = 0; i < n; i++) - dheap_add(pdheap, pdheap->elements[i]); - - for (i = n-1; i >= 0; i--) - pdheap->elements[i] = dheap_remove(pdheap); - - dheap_free(pdheap); -} diff --git a/c/containers/dheap.h b/c/containers/dheap.h deleted file mode 100644 index 384418ee7..000000000 --- a/c/containers/dheap.h +++ /dev/null @@ -1,30 +0,0 @@ -// ================================================================ -// Zero-indexed max-heap of doubles. -// John Kerl -// 2012-06-02 -// ================================================================ - -#ifndef DHEAP_H -#define DHEAP_H - -#define DHEAP_INIT_ALLOC_SIZE 1024 // Power of two -typedef struct _dheap_t { - int n; - int alloc_size; - char is_malloced; - double *elements; -} dheap_t; - -dheap_t *dheap_alloc(); -dheap_t *dheap_from_array(double *array, int n); -void dheap_free(dheap_t *pheap); - -void dheap_add(dheap_t *pdheap, double v); -double dheap_remove(dheap_t *pdheap); - -// For debug -void dheap_print(dheap_t *pdheap); -// For unit test -int dheap_check(dheap_t *pdheap, char *file, int line); - -#endif // DHEAP_H diff --git a/c/containers/dvector.c b/c/containers/dvector.c deleted file mode 100644 index dc42b9c85..000000000 --- a/c/containers/dvector.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/dvector.h" - -// ---------------------------------------------------------------- -dvector_t* dvector_alloc(unsigned long long initial_capacity) { - unsigned long long capacity = initial_capacity; - dvector_t* pdvector = mlr_malloc_or_die(sizeof(dvector_t)); - pdvector->data = mlr_malloc_or_die(capacity*sizeof(double)); - pdvector->size = 0; - pdvector->capacity = capacity; - return pdvector; -} - -// ---------------------------------------------------------------- -void dvector_free(dvector_t* pdvector) { - if (pdvector == NULL) - return; - free(pdvector->data); - pdvector->data = NULL; - pdvector->size = 0; - pdvector->capacity = 0; - free(pdvector); -} - -void dvector_append(dvector_t* pdvector, double value) { - if (pdvector->size >= pdvector->capacity) { - pdvector->capacity = (unsigned long long)(pdvector->capacity * 2); - pdvector->data = (double*)mlr_realloc_or_die(pdvector->data, - pdvector->capacity*sizeof(double)); - } - pdvector->data[pdvector->size++] = value; -} diff --git a/c/containers/dvector.h b/c/containers/dvector.h deleted file mode 100644 index c449f6f34..000000000 --- a/c/containers/dvector.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef DVECTOR_H -#define DVECTOR_H - -typedef struct _dvector_t { - double* data; - unsigned long long size; - unsigned long long capacity; -} dvector_t; - -dvector_t* dvector_alloc(unsigned long long initial_capacity); -void dvector_free(dvector_t* pdvector); -void dvector_append(dvector_t* pdvector, double value); - -#endif // DVECTOR_H diff --git a/c/containers/header_keeper.c b/c/containers/header_keeper.c deleted file mode 100644 index ed2b08281..000000000 --- a/c/containers/header_keeper.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "containers/header_keeper.h" - -header_keeper_t* header_keeper_alloc(char* line, slls_t* pkeys) { - header_keeper_t* pheader_keeper = mlr_malloc_or_die(sizeof(header_keeper_t)); - pheader_keeper->line = line; - pheader_keeper->pkeys = pkeys; - - return pheader_keeper; -} - -void header_keeper_free(header_keeper_t* pheader_keeper) { - if (pheader_keeper == NULL) - return; - free(pheader_keeper->line); - slls_free(pheader_keeper->pkeys); - free(pheader_keeper); -} diff --git a/c/containers/header_keeper.h b/c/containers/header_keeper.h deleted file mode 100644 index 6fb7bc4d4..000000000 --- a/c/containers/header_keeper.h +++ /dev/null @@ -1,19 +0,0 @@ -// ================================================================ -// Retains field names from CSV header lines across record reads. -// See also c/README.md. -// ================================================================ - -#ifndef HEADER_KEEPER_H -#define HEADER_KEEPER_H - -#include "containers/slls.h" - -typedef struct _header_keeper_t { - char* line; - slls_t* pkeys; -} header_keeper_t; - -header_keeper_t* header_keeper_alloc(char* line, slls_t* pkeys); -void header_keeper_free(header_keeper_t* pheader_keeper); - -#endif // HEADER_KEEPER_H diff --git a/c/containers/hss.c b/c/containers/hss.c deleted file mode 100644 index d33f01a3c..000000000 --- a/c/containers/hss.c +++ /dev/null @@ -1,249 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-valued hash set with linear probing for -// collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/hss.h" - -// ---------------------------------------------------------------- -#define INITIAL_ARRAY_LENGTH 128 -#define LOAD_FACTOR 0.7 - -#define OCCUPIED 444 -#define DELETED 555 -#define EMPTY 666 - -// ================================================================ -static void hsse_clear(hsse_t *pentry) { - pentry->key = NULL; - pentry->state = EMPTY; - pentry->ideal_index = -1; -} - -// ---------------------------------------------------------------- -static hsse_t* hss_make_alloc_array(int length) { - hsse_t* array = (hsse_t*)mlr_malloc_or_die(sizeof(hsse_t) * length); - for (int i = 0; i < length; i++) - hsse_clear(&array[i]); - return array; -} - -static void hss_init(hss_t *pset, int length) { - pset->num_occupied = 0; - pset->num_freed = 0; - pset->array_length = length; - pset->array = hss_make_alloc_array(length); -} - -hss_t* hss_alloc() { - hss_t* pset = mlr_malloc_or_die(sizeof(hss_t)); - hss_init(pset, INITIAL_ARRAY_LENGTH); - return pset; -} - -void hss_free(hss_t* pset) { - if (pset == NULL) - return; - free(pset->array); - pset->array = NULL; - pset->num_occupied = 0; - pset->num_freed = 0; - pset->array_length = 0; - free(pset); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int hss_find_index_for_key(hss_t* pset, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pset->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - hsse_t* pe = &pset->array[index]; - if (pe->state == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pe->state == EMPTY) { - return index; - } - - // If the current entry has been freed, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pset->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pset->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); -} - -// ---------------------------------------------------------------- -static void hss_enlarge(hss_t* pset); - -void hss_add(hss_t* pset, char* key) { - if ((pset->num_occupied + pset->num_freed) >= (pset->array_length*LOAD_FACTOR)) - hss_enlarge(pset); - - int ideal_index = 0; - int index = hss_find_index_for_key(pset, key, &ideal_index); - hsse_t* pe = &pset->array[index]; - - if (pe->state == OCCUPIED) { - // Existing key found in chain. Chaining already handled by hss_find_index_for_key. - return; - } - else if (pe->state == EMPTY) { - // End of chain. - pe->key = key; - pe->state = OCCUPIED; - pe->ideal_index = ideal_index; - pset->num_occupied++; - } - else { - fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); - exit(1); - } -} - -// ---------------------------------------------------------------- -static void hss_enlarge(hss_t* pset) { - int old_array_length = pset->array_length; - hsse_t* old_array = pset->array; - - hss_init(pset, pset->array_length*2); - - for (int index = 0; index < old_array_length; index++) { - hsse_t e = old_array[index]; - if (e.state == OCCUPIED) - hss_add(pset, e.key); - } - - free(old_array); -} - -// ---------------------------------------------------------------- -int hss_has(hss_t* pset, char* key) { - int ideal_index = 0; - int index = hss_find_index_for_key(pset, key, &ideal_index); - hsse_t* pe = &pset->array[index]; - - if (pe->state == OCCUPIED) - return TRUE; - else if (pe->state == EMPTY) - return FALSE; - else { - fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); - exit(1); - } -} - -// ---------------------------------------------------------------- -void hss_remove(hss_t* pset, char* key) { - int ideal_index = 0; - int index = hss_find_index_for_key(pset, key, &ideal_index); - hsse_t* pe = &pset->array[index]; - if (pe->state == OCCUPIED) { - pe->key = NULL; - pe->state = DELETED; - pe->ideal_index = -1; - pset->num_freed++; - pset->num_occupied--; - } - else if (pe->state == EMPTY) { - } - else { - fprintf(stderr, "hss_find_index_for_key did not find end of chain.\n"); - exit(1); - } -} - -// ---------------------------------------------------------------- -void hss_clear(hss_t* pset) { - for (int i = 0; i < pset->array_length; i++) { - hsse_clear(&pset->array[i]); - } - pset->num_occupied = 0; - pset->num_freed = 0; -} - -int hss_size(hss_t* pset) { - return pset->num_occupied; -} - -// ---------------------------------------------------------------- -int hss_check_counts(hss_t* pset) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pset->array_length; index++) { - hsse_t* pe = &pset->array[index]; - if (pe->state == OCCUPIED) - nocc++; - else if (pe->state == DELETED) - ndel++; - } - if (nocc != pset->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pset->num_occupied); - return FALSE; - } - if (ndel != pset->num_freed) { - fprintf(stderr, - "freed-count mismatch: actual %d != cached %d.\n", - ndel, pset->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "freed"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void hss_print(hss_t* pset) { - for (int index = 0; index < pset->array_length; index++) { - hsse_t* pe = &pset->array[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s |\n", - get_state_name(pe->state), index, pe->ideal_index, key_string); - } -} diff --git a/c/containers/hss.h b/c/containers/hss.h deleted file mode 100644 index 8fc10b07b..000000000 --- a/c/containers/hss.h +++ /dev/null @@ -1,43 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-valued hash set with linear probing for -// collisions. -// -// Notes: -// * null key is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef HSS_H -#define HSS_H - -// ---------------------------------------------------------------- -typedef struct _hsse_t { - char* key; - int state; - int ideal_index; -} hsse_t; - -// ---------------------------------------------------------------- -typedef struct _hss_t { - int num_occupied; - int num_freed; - int array_length; - hsse_t* array; -} hss_t; - -// ---------------------------------------------------------------- -hss_t* hss_alloc(); -void hss_free(hss_t* pset); -void hss_add(hss_t* pset, char* key); -int hss_has(hss_t* pset, char* key); -void hss_remove(hss_t* pset, char* key); -void hss_clear(hss_t* pset); -int hss_size(hss_t* pset); - -// Unit-test hook -int hss_check_counts(hss_t* pset); - -#endif // HSS_H diff --git a/c/containers/join_bucket_keeper.c b/c/containers/join_bucket_keeper.c deleted file mode 100644 index 2f194212d..000000000 --- a/c/containers/join_bucket_keeper.c +++ /dev/null @@ -1,503 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/context.h" -#include "containers/mixutil.h" -#include "containers/join_bucket_keeper.h" -#include "input/lrec_readers.h" - -// ================================================================ -// JOIN_BUCKET_KEEPER -// -// This data structure supports Miller's sorted (double-streaming) join. It is -// perhaps best explained by first comparing with the unsorted (half-streaming) -// case. -// -// In both cases, we have left and right join keys. Suppose the left file has -// data with field name "L" to be joined with right-file(s) data with field -// name "R". For the unsorted case (see mapper_join.c) the entire left file is -// first loaded into buckets of record-lists, one for each distinct value of L. -// E.g. given the following: -// -// +-----+-----+ -// | L | R | -// + --- + --- + -// | a | a | -// | c | b | -// | a | f | -// | b | | -// | c | | -// | d | | -// | a | | -// +-----+-----+ -// -// the left file is bucketed as -// -// +-----+ +-----+ +-----+ +-----+ -// | L | | L | | L | | L | -// + --- + + --- + + --- + + --- + -// | a | | c | | b | | d | -// | a | | c | +-----+ +-----+ -// | a | + --- + -// + --- + -// -// Then the right file is processed one record at a time (hence -// "half-streaming"). The pairings are easy: -// * the right record with R=a is paired with the L=a bucket, -// * the right record with R=b is paired with the L=b bucket, -// * the right record with R=f is unpaired, and -// * the left records with L=c and L=d are unpaired. -// -// ---------------------------------------------------------------- -// Now for the sorted (doubly-streaming) case. Here we require that the left -// and right files be already sorted (lexically ascending) by the join fields. -// Then the example inputs look like this: -// -// +-----+-----+ -// | L | R | -// + --- + --- + -// | a | a | -// | a | b | -// | a | f | -// | b | | -// | c | | -// | c | | -// | d | | -// +-----+-----+ -// -// The right file is still read one record at a time. It's the job of this -// join_bucket_keeper class to keep track of the left-file buckets, one bucket -// at a time. This includes all records with same values for the join -// field(s), e.g. the three L=a records, as well as a "peek" record which is -// either the next record with a different join value (e.g. the L=b record), or -// an end-of-file indicator. -// -// If a right-file record has join field matching the current left-file bucket, -// then it's paired with all records in that bucket. Otherwise the -// join_bucket_keeper needs to either stay with the current bucket or advance -// to the next one, depending whether the current right-file record's -// join-field values compare lexically with the the left-file bucket's -// join-field values. -// -// Examples: -// -// +-----------+-----------+-----------+-----------+-----------+-----------+ -// | L R | L R | L R | L R | L R | L R | -// + --- --- + --- --- + --- --- + --- --- + --- --- + --- --- + -// | a | a | e | a | e e | e e | -// | b | e | e | e e | e | e e | -// | e | e | e | e | e | e | -// | e | e | f | e | f | g g | -// | e | f | g | g | g | g | -// | g | g | g | g | g | | -// | g | g | h | | | | -// +-----------+-----------+-----------+-----------+-----------+-----------+ -// -// In all these examples, the join_bucket_keeper goes through these steps: -// * bucket is empty, peek rec has L=e -// * bucket is L=e records, peek rec has L=g -// * bucket is L=g records, peek rec is null (due to EOF) -// * bucket is empty, peek rec is null (due to EOF) -// -// Example 1: -// * left-bucket is empty and left-peek has L=e -// * right record has R=a; join_bucket_keeper does not advance -// * right record has R=b; join_bucket_keeper does not advance -// * right end of file; all left records are unpaired. -// -// Example 2: -// * left-bucket is empty and left-peek has L=e -// * right record has R=a; join_bucket_keeper does not advance -// * right record has R=f; left records with L=e are unpaired. -// * etc. -// -// ================================================================ - -// ---------------------------------------------------------------- -#define LEFT_STATE_0_PREFILL 0 -#define LEFT_STATE_1_FULL 1 -#define LEFT_STATE_2_LAST_BUCKET 2 -#define LEFT_STATE_3_EOF 3 - -// ---------------------------------------------------------------- -// (0) pre-fill: Lv == null, peek == null, leof = false -// (1) midstream: Lv != null, peek != null, leof = false -// (2) last bucket: Lv != null, peek == null, leof = true -// (3) leof: Lv == null, peek == null, leof = true -// ---------------------------------------------------------------- - -// Private methods -static int join_bucket_keeper_get_state(join_bucket_keeper_t* pkeeper); -static void join_bucket_keeper_initial_fill(join_bucket_keeper_t* pkeeper, - sllv_t** pprecords_left_unpaired); -static void join_bucket_keeper_advance_to(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); -static void join_bucket_keeper_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired); -static void join_bucket_keeper_drain(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); -static char* describe_state(int state); - -// ---------------------------------------------------------------- -join_bucket_keeper_t* join_bucket_keeper_alloc( - char* prepipe, - char* left_file_name, - cli_reader_opts_t* popts, - slls_t* pleft_field_names -) { - lrec_reader_t* plrec_reader = lrec_reader_alloc(popts); - return join_bucket_keeper_alloc_from_reader(plrec_reader, prepipe, left_file_name, pleft_field_names); -} - -// ---------------------------------------------------------------- -join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader( - lrec_reader_t* plrec_reader, - char* prepipe, - char* left_file_name, - slls_t* pleft_field_names) -{ - join_bucket_keeper_t* pkeeper = mlr_malloc_or_die(sizeof(join_bucket_keeper_t)); - - void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, prepipe, left_file_name); - plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); - - context_t* pctx = mlr_malloc_or_die(sizeof(context_t)); - context_init_from_first_file_name(pctx, left_file_name); - - pkeeper->plrec_reader = plrec_reader; - pkeeper->pvhandle = pvhandle; - pkeeper->pctx = pctx; - - pkeeper->pleft_field_names = pleft_field_names; - - pkeeper->pbucket = mlr_malloc_or_die(sizeof(join_bucket_t)); - pkeeper->pbucket->precords = sllv_alloc(); - pkeeper->pbucket->pleft_field_values = NULL; - pkeeper->pbucket->was_paired = FALSE; - - pkeeper->prec_peek = NULL; - pkeeper->leof = FALSE; - pkeeper->state = LEFT_STATE_0_PREFILL; - - return pkeeper; -} - -// ---------------------------------------------------------------- -void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe) { - if (pkeeper == NULL) - return; - slls_free(pkeeper->pbucket->pleft_field_values); - sllv_free(pkeeper->pbucket->precords); - free(pkeeper->pbucket); - pkeeper->plrec_reader->pclose_func(pkeeper->plrec_reader->pvstate, pkeeper->pvhandle, prepipe); - pkeeper->plrec_reader->pfree_func(pkeeper->plrec_reader); - lrec_free(pkeeper->prec_peek); - free(pkeeper->pctx); - free(pkeeper); -} - -// ---------------------------------------------------------------- -void join_bucket_keeper_emit(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) -{ - *pprecords_paired = NULL; - *pprecords_left_unpaired = NULL; - - if (pkeeper->state == LEFT_STATE_0_PREFILL) { - join_bucket_keeper_initial_fill(pkeeper, pprecords_left_unpaired); - pkeeper->state = join_bucket_keeper_get_state(pkeeper); - } - - if (pright_field_values != NULL) { // Not right EOF - if (pkeeper->state == LEFT_STATE_1_FULL || pkeeper->state == LEFT_STATE_2_LAST_BUCKET) { - int cmp = slls_compare_lexically(pkeeper->pbucket->pleft_field_values, pright_field_values); - if (cmp < 0) { - // Advance left until match or left EOF. - join_bucket_keeper_advance_to(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); - } else if (cmp == 0) { - pkeeper->pbucket->was_paired = TRUE; - *pprecords_paired = pkeeper->pbucket->precords; - } else { - // No match and no need to advance left; return null lists. - } - } else if (pkeeper->state != LEFT_STATE_3_EOF) { - fprintf(stderr, "%s: internal coding error: failed transition from prefill state.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - - } else { // Right EOF: return the final left-unpaireds. - join_bucket_keeper_drain(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); - } - - pkeeper->state = join_bucket_keeper_get_state(pkeeper); -} - -// ---------------------------------------------------------------- -static int join_bucket_keeper_get_state(join_bucket_keeper_t* pkeeper) { - if (pkeeper->pbucket->pleft_field_values == NULL) { - if (pkeeper->leof) - return LEFT_STATE_3_EOF; - else - return LEFT_STATE_0_PREFILL; - } else { - if (pkeeper->prec_peek == NULL) - return LEFT_STATE_2_LAST_BUCKET; - else - return LEFT_STATE_1_FULL; - } -} - -static void join_bucket_keeper_initial_fill(join_bucket_keeper_t* pkeeper, - sllv_t** pprecords_left_unpaired) -{ - while (TRUE) { - // Skip over records not having the join keys. These go straight to the - // left-unpaired list. - pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, - pkeeper->pvhandle, pkeeper->pctx); - if (pkeeper->prec_peek == NULL) { - break; - } - if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { - break; - } else { - if (*pprecords_left_unpaired == NULL) - *pprecords_left_unpaired = sllv_alloc(); - sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); - } - } - - if (pkeeper->prec_peek == NULL) { - pkeeper->leof = TRUE; - return; - } - join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); -} - -// Preconditions: -// * prec_peek != NULL -// * prec_peek has the join keys -static void join_bucket_keeper_fill(join_bucket_keeper_t* pkeeper, sllv_t** pprecords_left_unpaired) { - slls_t* pleft_field_values = mlr_reference_selected_values_from_record(pkeeper->prec_peek, - pkeeper->pleft_field_names); - if (pleft_field_values == NULL) { - fprintf(stderr, "%s: internal coding error: peek record should have had join keys.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - - pkeeper->pbucket->pleft_field_values = slls_copy(pleft_field_values); - slls_free(pleft_field_values); - sllv_append(pkeeper->pbucket->precords, pkeeper->prec_peek); - pkeeper->pbucket->was_paired = FALSE; - pkeeper->prec_peek = NULL; - while (TRUE) { - // Skip over records not having the join keys. These go straight to the - // left-unpaired list. - pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, - pkeeper->pvhandle, pkeeper->pctx); - if (pkeeper->prec_peek == NULL) { - pkeeper->leof = TRUE; - break; - } - - if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { - int cmp = slls_lrec_compare_lexically( - pkeeper->pbucket->pleft_field_values, - pkeeper->prec_peek, - pkeeper->pleft_field_names); - if (cmp != 0) { - break; - } - sllv_append(pkeeper->pbucket->precords, pkeeper->prec_peek); - - } else { - if (*pprecords_left_unpaired == NULL) - *pprecords_left_unpaired = sllv_alloc(); - sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); - } - pkeeper->prec_peek = NULL; - } -} - -// Pre-conditions: -// * pkeeper->pleft_field_values < pright_field_values. -// * currently in state 1 or 2 so there is a bucket but there may or may not be a peek-record -// * current bucket was/wasn't paired on previous emits but is not paired on this emit. -// Actions: -// * if bucket was never paired, return it to the caller; else discard. -// * consume left input stream, feeding into unpaired, for as long as leftvals < rightvals && !eof. -// * if there is leftrec with vals == rightvals: parallel initial_fill. -// else, mimic initial_fill. - -static void join_bucket_keeper_advance_to(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) -{ - if (pkeeper->pbucket->was_paired) { - while (pkeeper->pbucket->precords->phead) - lrec_free(sllv_pop(pkeeper->pbucket->precords)); - sllv_free(pkeeper->pbucket->precords); - pkeeper->pbucket->precords = NULL; - } else { - if (*pprecords_left_unpaired == NULL) { - *pprecords_left_unpaired = pkeeper->pbucket->precords; - } else { - sllv_transfer(*pprecords_left_unpaired, pkeeper->pbucket->precords); - } - } - - pkeeper->pbucket->precords = sllv_alloc(); - if (pkeeper->pbucket->pleft_field_values != NULL) { - slls_free(pkeeper->pbucket->pleft_field_values); - pkeeper->pbucket->pleft_field_values = NULL; - } - pkeeper->pbucket->was_paired = FALSE; - - if (pkeeper->prec_peek == NULL) { // left EOF - return; - } - - // Need a double condition here ... the peek record is either het or hom. - // (Or, change that: -> ensure elsewhere the peek record is hom.) - // The former is destined for lunp and shouldn't be lexcmped. The latter - // should be. - - int cmp = lrec_slls_compare_lexically(pkeeper->prec_peek, pkeeper->pleft_field_names, pright_field_values); - if (cmp < 0) { - // keep seeking & filling the bucket until = or >; this may or may not end up being a match. - - if (*pprecords_left_unpaired == NULL) - *pprecords_left_unpaired = sllv_alloc(); - - while (TRUE) { - sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); - pkeeper->prec_peek = NULL; - - while (TRUE) { - // Skip over records not having the join keys. These go straight to the - // left-unpaired list. - pkeeper->prec_peek = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, - pkeeper->pvhandle, pkeeper->pctx); - if (pkeeper->prec_peek == NULL) - break; - if (record_has_all_keys(pkeeper->prec_peek, pkeeper->pleft_field_names)) { - break; - } else { - if (*pprecords_left_unpaired == NULL) - *pprecords_left_unpaired = sllv_alloc(); - sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); - } - } - - - if (pkeeper->prec_peek == NULL) { - pkeeper->leof = TRUE; - break; - } - - cmp = lrec_slls_compare_lexically(pkeeper->prec_peek, pkeeper->pleft_field_names, pright_field_values); - if (cmp >= 0) - break; - } - } - - if (cmp == 0) { - join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); - pkeeper->pbucket->was_paired = TRUE; - *pprecords_paired = pkeeper->pbucket->precords; - } else if (cmp > 0) { - join_bucket_keeper_fill(pkeeper, pprecords_left_unpaired); - } -} - -static void join_bucket_keeper_drain(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) -{ - // 1. Any records already in pkeeper->pbucket->precords (current bucket) - if (pkeeper->pbucket->was_paired) { - if (*pprecords_left_unpaired == NULL) - *pprecords_left_unpaired = sllv_alloc(); - } else { - if (*pprecords_left_unpaired == NULL) { - *pprecords_left_unpaired = pkeeper->pbucket->precords; - } else { - sllv_transfer(*pprecords_left_unpaired, pkeeper->pbucket->precords); - sllv_free(pkeeper->pbucket->precords); - } - } - // 2. Peek-record, if any - if (pkeeper->prec_peek != NULL) { - sllv_append(*pprecords_left_unpaired, pkeeper->prec_peek); - pkeeper->prec_peek = NULL; - } - // 3. Remainder of left input stream - while (TRUE) { - lrec_t* prec = pkeeper->plrec_reader->pprocess_func(pkeeper->plrec_reader->pvstate, - pkeeper->pvhandle, pkeeper->pctx); - if (prec == NULL) - break; - sllv_append(*pprecords_left_unpaired, prec); - } - - pkeeper->pbucket->precords = NULL; -} - -// ---------------------------------------------------------------- -void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper) { - printf("pbucket at %p:\n", pkeeper); - printf(" pvhandle = %p\n", pkeeper->pvhandle); - context_print(pkeeper->pctx, " "); - printf(" pleft_field_names = "); - slls_print(pkeeper->pleft_field_names); - printf("\n"); - join_bucket_print(pkeeper->pbucket, " "); - printf(" prec_peek = "); - if (pkeeper->prec_peek == NULL) { - printf("null\n"); - } else { - lrec_print(pkeeper->prec_peek); - } - printf(" leof = %d\n", pkeeper->leof); - printf(" state = %s\n", describe_state(pkeeper->state)); -} - -void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) -{ - join_bucket_keeper_print(pkeeper); - printf(" pright_field_values = "); - slls_print(pright_field_values); - printf("\n"); - printf(" precords_paired =\n"); - lrec_print_list_with_prefix(*pprecords_paired, " "); - printf("\n"); - printf(" precords_left_unpaired =\n"); - lrec_print_list_with_prefix(*pprecords_left_unpaired, " "); - printf("\n"); -} - -void join_bucket_print(join_bucket_t* pbucket, char* indent) { - printf("%spbucket at %p:\n", indent, pbucket); - printf("%s pleft_field_values = ", indent); - slls_print(pbucket->pleft_field_values); - printf("\n"); - if (pbucket->precords == NULL) { - printf("%s precords:\n", indent); - printf("%s (null)\n", indent); - } else { - printf("%s precords (length=%llu):\n", indent, pbucket->precords->length); - lrec_print_list_with_prefix(pbucket->precords, " "); - } - printf("%s was_paired = %d\n", indent, pbucket->was_paired); -} - -static char* describe_state(int state) { - switch (state) { - case LEFT_STATE_0_PREFILL: return "LEFT_STATE_0_PREFILL"; - case LEFT_STATE_1_FULL: return "LEFT_STATE_1_FULL"; - case LEFT_STATE_2_LAST_BUCKET: return "LEFT_STATE_2_LAST_BUCKET"; - case LEFT_STATE_3_EOF: return "LEFT_STATE_3_EOF"; - default: return "???"; - } -} diff --git a/c/containers/join_bucket_keeper.h b/c/containers/join_bucket_keeper.h deleted file mode 100644 index 1431b7716..000000000 --- a/c/containers/join_bucket_keeper.h +++ /dev/null @@ -1,65 +0,0 @@ -// ================================================================ -// Data structures for mlr join, sorted case. Please see descriptive -// comments at the top of join_bucket_keeper.h. -// ================================================================ - -#ifndef JOIN_BUCKET_KEEPER_H -#define JOIN_BUCKET_KEEPER_H - -#include "lib/context.h" -#include "cli/mlrcli.h" -#include "containers/lrec.h" -#include "containers/slls.h" -#include "containers/sllv.h" -#include "input/lrec_reader.h" - -// ---------------------------------------------------------------- -typedef struct _join_bucket_t { - slls_t* pleft_field_values; - sllv_t* precords; - int was_paired; -} join_bucket_t; - -typedef struct _join_bucket_keeper_t { - lrec_reader_t* plrec_reader; - void* pvhandle; - context_t* pctx; - - slls_t* pleft_field_names; - - join_bucket_t* pbucket; - lrec_t* prec_peek; - - int leof; - int state; -} join_bucket_keeper_t; - -// ---------------------------------------------------------------- -join_bucket_keeper_t* join_bucket_keeper_alloc( - char* prepipe, - char* left_file_name, - cli_reader_opts_t* popts, - slls_t* pleft_field_names); - -join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader( - lrec_reader_t* plrec_reader, - char* prepipe, - char* left_file_name, - slls_t* pleft_field_names); - -void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe); - -// *pprecords_paired should not be freed by the caller. -// *pprecords_left_unpaired should be freed by the caller. -void join_bucket_keeper_emit( - join_bucket_keeper_t* pkeeper, - slls_t* pright_field_values, - sllv_t** pprecords_paired, - sllv_t** pprecords_left_unpaired); - -void join_bucket_print(join_bucket_t* pbucket, char* indent); -void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper); -void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); - -#endif // JOIN_BUCKET_KEEPER_H diff --git a/c/containers/lhms2v.c b/c/containers/lhms2v.c deleted file mode 100644 index d854b098b..000000000 --- a/c/containers/lhms2v.c +++ /dev/null @@ -1,300 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-list-to-void-star linked hash map with -// linear probing for collisions. -// -// John Kerl 2014-12-22 -// -// Notes: -// * null key is not supported. -// * null value is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhms2v.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void* lhms2v_put_no_enlarge(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags); -static void lhms2v_enlarge(lhms2v_t* pmap); - -// ================================================================ -static void lhms2v_init(lhms2v_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhms2ve_t*)mlr_malloc_or_die(sizeof(lhms2ve_t) * length); - // Don't do lhms2ve_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhms2ve_state_t*)mlr_malloc_or_die(sizeof(lhms2ve_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhms2v_t* lhms2v_alloc() { - lhms2v_t* pmap = mlr_malloc_or_die(sizeof(lhms2v_t)); - lhms2v_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -// void-star payloads should first be freed by the caller. -void lhms2v_free(lhms2v_t* pmap) { - if (pmap == NULL) - return; - for (lhms2ve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key1); - free(pe->key2); - } - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhms2v_find_index_for_key(lhms2v_t* pmap, char* key1, char* key2, int* pideal_index) { - int hash = mlr_string_pair_hash_func(key1, key2); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - int done = 0; - - while (!done) { - lhms2ve_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey1 = pe->key1; - char* ekey2 = pe->key2; - // Existing key found in chain. - if (streq(key1, ekey1) && streq(key2, ekey2)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been deleted, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void* lhms2v_put(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhms2v_enlarge(pmap); - return lhms2v_put_no_enlarge(pmap, key1, key2, pvvalue, free_flags); -} - -static void* lhms2v_put_no_enlarge(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags) { - int ideal_index = 0; - int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); - lhms2ve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pe->pvvalue = pvvalue; - } - else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key1 = key1; - pe->key2 = key2; - pe->pvvalue = pvvalue; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - } - else { - fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } - return pvvalue; -} - -// ---------------------------------------------------------------- -void* lhms2v_get(lhms2v_t* pmap, char* key1, char* key2) { - int ideal_index = 0; - int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); - lhms2ve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe->pvvalue; - else if (pmap->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhms2v_has_key(lhms2v_t* pmap, char* key1, char* key2) { - int ideal_index = 0; - int index = lhms2v_find_index_for_key(pmap, key1, key2, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhms2v_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhms2v_size(lhms2v_t* pmap) { - return pmap->num_occupied; -} - -// ---------------------------------------------------------------- -static void lhms2v_enlarge(lhms2v_t* pmap) { - lhms2ve_t* old_entries = pmap->entries; - lhms2ve_state_t* old_states = pmap->states; - lhms2ve_t* old_head = pmap->phead; - - lhms2v_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhms2ve_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhms2v_put_no_enlarge(pmap, pe->key1, pe->key2, pe->pvvalue, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -int lhms2v_check_counts(lhms2v_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "deleted"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhms2v_print(lhms2v_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhms2ve_t* pe = &pmap->entries[index]; - - const char* key1_string = (pe == NULL) ? "none" : - pe->key1 == NULL ? "null" : - pe->key1; - const char* key2_string = (pe == NULL) ? "none" : - pe->key2 == NULL ? "null" : - pe->key2; - const char* value_string = (pe == NULL) ? "none" : - pe->pvvalue == NULL ? "null" : - pe->pvvalue; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key1: %12s | key2: %12s | pvvalue: %12s |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, - key1_string, key2_string, value_string); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhms2ve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key1_string = (pe == NULL) ? "none" : - pe->key1 == NULL ? "null" : - pe->key1; - const char* key2_string = (pe == NULL) ? "none" : - pe->key2 == NULL ? "null" : - pe->key2; - const char* value_string = (pe == NULL) ? "none" : - pe->pvvalue == NULL ? "null" : - pe->pvvalue; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key1: %12s | key2: %12s | pvvalue: %12s |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key1_string, key2_string, value_string); - } -} diff --git a/c/containers/lhms2v.h b/c/containers/lhms2v.h deleted file mode 100644 index e54de968e..000000000 --- a/c/containers/lhms2v.h +++ /dev/null @@ -1,55 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-pair-to-void-star linked hash map with -// linear probing for collisions. -// -// John Kerl 2014-12-22 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMS2V_H -#define LHMS2V_H - -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -typedef struct _lhms2ve_t { - int ideal_index; - char* key1; - char* key2; - void* pvvalue; - char free_flags; - struct _lhms2ve_t *pprev; - struct _lhms2ve_t *pnext; -} lhms2ve_t; - -typedef unsigned char lhms2ve_state_t; - -// ---------------------------------------------------------------- -typedef struct _lhms2v_t { - int num_occupied; - int num_freed; - int array_length; - lhms2ve_t* entries; - lhms2ve_state_t* states; - lhms2ve_t* phead; - lhms2ve_t* ptail; -} lhms2v_t; - -lhms2v_t* lhms2v_alloc(); -void lhms2v_free(lhms2v_t* pmap); -void* lhms2v_put(lhms2v_t* pmap, char* key1, char* key2, void* pvvalue, char free_flags); -void* lhms2v_get(lhms2v_t* pmap, char* key1, char* key2); -int lhms2v_has_key(lhms2v_t* pmap, char* key1, char* key2); -int lhms2v_size(lhms2v_t* pmap); - -// Unit-test hook -int lhms2v_check_counts(lhms2v_t* pmap); - -#endif // LHMS2V_H diff --git a/c/containers/lhmsi.c b/c/containers/lhmsi.c deleted file mode 100644 index 7939f1d9a..000000000 --- a/c/containers/lhmsi.c +++ /dev/null @@ -1,322 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-string linked hash map with linear -// probing for collisions. -// -// Keys are not strduped. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmsi.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void lhmsi_put_no_enlarge(lhmsi_t* pmap, char* key, int value, char free_flags); -static void lhmsi_enlarge(lhmsi_t* pmap); - -// ================================================================ -static void lhmsi_init(lhmsi_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmsie_t*)mlr_malloc_or_die(sizeof(lhmsie_t) * length); - // Don't do lhmsie_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmsie_state_t*)mlr_malloc_or_die(sizeof(lhmsie_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmsi_t* lhmsi_alloc() { - lhmsi_t* pmap = mlr_malloc_or_die(sizeof(lhmsi_t)); - lhmsi_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -lhmsi_t* lhmsi_copy(lhmsi_t* pmap) { - lhmsi_t* pnew = lhmsi_alloc(); - for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) - lhmsi_put(pnew, mlr_strdup_or_die(pe->key), pe->value, FREE_ENTRY_KEY); - return pnew; -} - -void lhmsi_free(lhmsi_t* pmap) { - if (pmap == NULL) - return; - for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmsi_find_index_for_key(lhmsi_t* pmap, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmsie_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been deleted, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); -} - -// ---------------------------------------------------------------- -void lhmsi_put(lhmsi_t* pmap, char* key, int value, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmsi_enlarge(pmap); - lhmsi_put_no_enlarge(pmap, key, value, free_flags); -} - -static void lhmsi_put_no_enlarge(lhmsi_t* pmap, char* key, int value, char free_flags) { - int ideal_index = 0; - int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); - lhmsie_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pe->value = value; - - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsi_get(lhmsi_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); - lhmsie_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe->value; - else if (pmap->states[index] == EMPTY) - return -999; // caller must do lhmsi_has_key to check validity - else { - fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsi_test_and_get(lhmsi_t* pmap, char* key, int* pval) { - int ideal_index = 0; - int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); - lhmsie_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - *pval = pe->value; - return TRUE; - } else if (pmap->states[index] == EMPTY) { - return FALSE; - } else { - fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -lhmsie_t* lhmsi_get_entry(lhmsi_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); - lhmsie_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe; - else if (pmap->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsi_has_key(lhmsi_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsi_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmsi_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void lhmsi_rename(lhmsi_t* pmap, char* old_key, char* new_key) { - fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); - exit(1); -} - -// ---------------------------------------------------------------- -static void lhmsi_enlarge(lhmsi_t* pmap) { - lhmsie_t* old_entries = pmap->entries; - lhmsie_state_t* old_states = pmap->states; - lhmsie_t* old_head = pmap->phead; - - lhmsi_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmsie_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmsi_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -int lhmsi_check_counts(lhmsi_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d.\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "deleted"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhmsi_print(lhmsi_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhmsie_t* pe = &pmap->entries[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %8d |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->value); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhmsie_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %8d |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, pe->value); - } -} diff --git a/c/containers/lhmsi.h b/c/containers/lhmsi.h deleted file mode 100644 index be0a16491..000000000 --- a/c/containers/lhmsi.h +++ /dev/null @@ -1,54 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-int linked hash map with linear -// probing for collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSI_H -#define LHMSI_H - -// ---------------------------------------------------------------- -typedef struct _lhmsie_t { - int ideal_index; - char* key; - int value; - char free_flags; - struct _lhmsie_t *pprev; - struct _lhmsie_t *pnext; -} lhmsie_t; - -typedef unsigned char lhmsie_state_t; - -typedef struct _lhmsi_t { - int num_occupied; - int num_freed; - int array_length; - lhmsie_t* entries; - lhmsie_state_t* states; - lhmsie_t* phead; - lhmsie_t* ptail; -} lhmsi_t; - -// ---------------------------------------------------------------- -lhmsi_t* lhmsi_alloc(); -lhmsi_t* lhmsi_copy(lhmsi_t* pmap); -void lhmsi_free(lhmsi_t* pmap); -void lhmsi_put(lhmsi_t* pmap, char* key, int value, char free_flags); -int lhmsi_get(lhmsi_t* pmap, char* key); // caller must do lhmsi_has_key to check validity -int lhmsi_test_and_get(lhmsi_t* pmap, char* key, int* pval); // *pval undefined if return is FALSE -lhmsie_t* lhmsi_get_entry(lhmsi_t* pmap, char* key); -int lhmsi_has_key(lhmsi_t* pmap, char* key); - -// Unit-test hook -int lhmsi_check_counts(lhmsi_t* pmap); - -#endif // LHMSI_H diff --git a/c/containers/lhmsll.c b/c/containers/lhmsll.c deleted file mode 100644 index c32b4d671..000000000 --- a/c/containers/lhmsll.c +++ /dev/null @@ -1,339 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-string linked hash map with linear -// probing for collisions. -// -// Keys are not strduped. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmsll.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void lhmsll_put_no_enlarge(lhmsll_t* pmap, char* key, int value, char free_flags); -static void lhmsll_enlarge(lhmsll_t* pmap); - -// ================================================================ -static void lhmsll_init(lhmsll_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmslle_t*)mlr_malloc_or_die(sizeof(lhmslle_t) * length); - // Don't do lhmslle_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmslle_state_t*)mlr_malloc_or_die(sizeof(lhmslle_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmsll_t* lhmsll_alloc() { - lhmsll_t* pmap = mlr_malloc_or_die(sizeof(lhmsll_t)); - lhmsll_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -lhmsll_t* lhmsll_copy(lhmsll_t* pmap) { - lhmsll_t* pnew = lhmsll_alloc(); - for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) - lhmsll_put(pnew, mlr_strdup_or_die(pe->key), pe->value, FREE_ENTRY_KEY); - return pnew; -} - -void lhmsll_free(lhmsll_t* pmap) { - if (pmap == NULL) - return; - for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmsll_find_index_for_key(lhmsll_t* pmap, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmslle_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been deleted, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void lhmsll_put(lhmsll_t* pmap, char* key, int value, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmsll_enlarge(pmap); - lhmsll_put_no_enlarge(pmap, key, value, free_flags); -} - -static void lhmsll_put_no_enlarge(lhmsll_t* pmap, char* key, int value, char free_flags) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - lhmslle_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pe->value = value; - - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -long long lhmsll_get(lhmsll_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - lhmslle_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe->value; - else if (pmap->states[index] == EMPTY) - return -999; // caller must do lhmsll_has_key to check validity - else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsll_test_and_get(lhmsll_t* pmap, char* key, long long* pval) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - lhmslle_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - *pval = pe->value; - return TRUE; - } else if (pmap->states[index] == EMPTY) { - return FALSE; - } else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -int lhmsll_test_and_increment(lhmsll_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - lhmslle_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - pe->value++; - return TRUE; - } else if (pmap->states[index] == EMPTY) { - return FALSE; - } else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -lhmslle_t* lhmsll_get_entry(lhmsll_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - lhmslle_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe; - else if (pmap->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsll_has_key(lhmsll_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsll_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmsll_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void lhmsll_rename(lhmsll_t* pmap, char* old_key, char* new_key) { - fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); - exit(1); -} - -// ---------------------------------------------------------------- -static void lhmsll_enlarge(lhmsll_t* pmap) { - lhmslle_t* old_entries = pmap->entries; - lhmslle_state_t* old_states = pmap->states; - lhmslle_t* old_head = pmap->phead; - - lhmsll_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmslle_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmsll_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -int lhmsll_check_counts(lhmsll_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d.\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "deleted"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhmsll_print(lhmsll_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhmslle_t* pe = &pmap->entries[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %8lld |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->value); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhmslle_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %8lld |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, pe->value); - } -} diff --git a/c/containers/lhmsll.h b/c/containers/lhmsll.h deleted file mode 100644 index 3ccfbd68b..000000000 --- a/c/containers/lhmsll.h +++ /dev/null @@ -1,57 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-int linked hash map with linear -// probing for collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSLL_H -#define LHMSLL_H - -// ---------------------------------------------------------------- -typedef struct _lhmslle_t { - int ideal_index; - char* key; - long long value; - char free_flags; - struct _lhmslle_t *pprev; - struct _lhmslle_t *pnext; -} lhmslle_t; - -typedef unsigned char lhmslle_state_t; - -typedef struct _lhmsll_t { - int num_occupied; - int num_freed; - int array_length; - lhmslle_t* entries; - lhmslle_state_t* states; - lhmslle_t* phead; - lhmslle_t* ptail; -} lhmsll_t; - -// ---------------------------------------------------------------- -lhmsll_t* lhmsll_alloc(); - -lhmsll_t* lhmsll_copy(lhmsll_t* pmap); - -void lhmsll_free(lhmsll_t* pmap); -void lhmsll_put(lhmsll_t* pmap, char* key, int value, char free_flags); -long long lhmsll_get(lhmsll_t* pmap, char* key); // caller must do lhmsll_has_key to check validity -int lhmsll_test_and_get(lhmsll_t* pmap, char* key, long long* pval); // *pval undefined if return is FALSE -int lhmsll_test_and_increment(lhmsll_t* pmap, char* key); // increments value only if mapping exists -lhmslle_t* lhmsll_get_entry(lhmsll_t* pmap, char* key); -int lhmsll_has_key(lhmsll_t* pmap, char* key); - -// Unit-test hook -int lhmsll_check_counts(lhmsll_t* pmap); - -#endif // LHMSLL_H diff --git a/c/containers/lhmslv.c b/c/containers/lhmslv.c deleted file mode 100644 index 77b6c3e83..000000000 --- a/c/containers/lhmslv.c +++ /dev/null @@ -1,288 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-list-to-void-star linked hash map with -// linear probing for collisions. -// -// John Kerl 2014-12-22 -// -// Notes: -// * null key is not supported. -// * null value is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmslv.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void* lhmslv_put_no_enlarge(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags); -static void lhmslv_enlarge(lhmslv_t* pmap); - -// ================================================================ -static void lhmslv_init(lhmslv_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmslve_t*)mlr_malloc_or_die(sizeof(lhmslve_t) * length); - // Don't do lhmslve_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmslve_state_t*)mlr_malloc_or_die(sizeof(lhmslve_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmslv_t* lhmslv_alloc() { - lhmslv_t* pmap = mlr_malloc_or_die(sizeof(lhmslv_t)); - lhmslv_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -// void-star payloads should first be freed by the caller. -void lhmslv_free(lhmslv_t* pmap) { - if (pmap == NULL) - return; - for (lhmslve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) - if (pe->free_flags & FREE_ENTRY_KEY) - slls_free(pe->key); - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmslv_find_index_for_key(lhmslv_t* pmap, slls_t* key, int* pideal_index) { - int hash = slls_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmslve_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - slls_t* ekey = pe->key; - // Existing key found in chain. - if (slls_equals(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been freed, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void* lhmslv_put(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmslv_enlarge(pmap); - return lhmslv_put_no_enlarge(pmap, key, pvvalue, free_flags); -} - -static void* lhmslv_put_no_enlarge(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags) { - int ideal_index = 0; - int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); - lhmslve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pe->pvvalue = pvvalue; - - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->free_flags = free_flags; - pe->pvvalue = pvvalue; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } - - return pvvalue; -} - -// ---------------------------------------------------------------- -void* lhmslv_get(lhmslv_t* pmap, slls_t* key) { - int ideal_index = 0; - int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); - lhmslve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe->pvvalue; - else if (pmap->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmslv_has_key(lhmslv_t* pmap, slls_t* key) { - int ideal_index = 0; - int index = lhmslv_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmslv_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmslv_size(lhmslv_t* pmap) { - return pmap->num_occupied; -} - -// ---------------------------------------------------------------- -static void lhmslv_enlarge(lhmslv_t* pmap) { - lhmslve_t* old_entries = pmap->entries; - lhmslve_state_t* old_states = pmap->states; - lhmslve_t* old_head = pmap->phead; - - lhmslv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmslve_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmslv_put_no_enlarge(pmap, pe->key, pe->pvvalue, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -int lhmslv_check_counts(lhmslv_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "freed-count mismatch: actual %d != cached %d\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "freed"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhmslv_print(lhmslv_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhmslve_t* pe = &pmap->entries[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - slls_join(pe->key, ","); - const char* value_string = (pe == NULL) ? "none" : - pe->pvvalue == NULL ? "null" : - pe->pvvalue; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | pvvalue: %12s |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, value_string); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhmslve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - slls_join(pe->key, ","); - const char* value_string = (pe == NULL) ? "none" : - pe->pvvalue == NULL ? "null" : - pe->pvvalue; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | pvvalue: %12s |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, value_string); - } -} diff --git a/c/containers/lhmslv.h b/c/containers/lhmslv.h deleted file mode 100644 index ef77ebd7e..000000000 --- a/c/containers/lhmslv.h +++ /dev/null @@ -1,54 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-list-to-void-star linked hash map with -// linear probing for collisions. -// -// John Kerl 2014-12-22 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSLV_H -#define LHMSLV_H - -#include "containers/slls.h" - -// ---------------------------------------------------------------- -typedef struct _lhmslve_t { - int ideal_index; - slls_t* key; - void* pvvalue; - char free_flags; - struct _lhmslve_t *pprev; - struct _lhmslve_t *pnext; -} lhmslve_t; - -typedef unsigned char lhmslve_state_t; - -// ---------------------------------------------------------------- -typedef struct _lhmslv_t { - int num_occupied; - int num_freed; - int array_length; - lhmslve_t* entries; - lhmslve_state_t* states; - lhmslve_t* phead; - lhmslve_t* ptail; -} lhmslv_t; - -lhmslv_t* lhmslv_alloc(); -void lhmslv_free(lhmslv_t* pmap); -void* lhmslv_put(lhmslv_t* pmap, slls_t* key, void* pvvalue, char free_flags); -void* lhmslv_get(lhmslv_t* pmap, slls_t* key); -int lhmslv_has_key(lhmslv_t* pmap, slls_t* key); -int lhmslv_size(lhmslv_t* pmap); - -// Unit-test hook -int lhmslv_check_counts(lhmslv_t* pmap); - -#endif // LHMSLV_H diff --git a/c/containers/lhmsmv.c b/c/containers/lhmsmv.c deleted file mode 100644 index 73602581f..000000000 --- a/c/containers/lhmsmv.c +++ /dev/null @@ -1,297 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-mlrval linked hash map with linear -// probing for collisions. -// -// Keys and values are not strduped. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmsmv.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 32 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void lhmsmv_put_no_enlarge(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags); -static void lhmsmv_enlarge(lhmsmv_t* pmap); - -static void lhmsmv_init(lhmsmv_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmsmve_t*)mlr_malloc_or_die(sizeof(lhmsmve_t) * length); - // Don't do a memset of all entries at init time, since this has a drastic - // effect on the time needed to construct an empty map (and Miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmsmve_state_t*)mlr_malloc_or_die(sizeof(lhmsmve_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmsmv_t* lhmsmv_alloc() { - lhmsmv_t* pmap = mlr_malloc_or_die(sizeof(lhmsmv_t)); - lhmsmv_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -// ---------------------------------------------------------------- -lhmsmv_t* lhmsmv_copy(lhmsmv_t* pold) { - lhmsmv_t* pnew = lhmsmv_alloc(); - - for (lhmsmve_t* pe = pold->phead; pe != NULL; pe = pe->pnext) { - char* nkey = mlr_strdup_or_die(pe->key); - mv_t nval = mv_copy(&pe->value); - lhmsmv_put(pnew, nkey, &nval, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - - return pnew; -} - -// ---------------------------------------------------------------- -void lhmsmv_clear(lhmsmv_t* pmap) { - if (pmap == NULL) - return; - for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - if (pe->free_flags & FREE_ENTRY_VALUE) - mv_free(&pe->value); - } - pmap->num_occupied = 0; - pmap->num_freed = 0; - memset(pmap->states, EMPTY, pmap->array_length); - pmap->phead = NULL; - pmap->ptail = NULL; -} - -// ---------------------------------------------------------------- -void lhmsmv_free(lhmsmv_t* pmap) { - if (pmap == NULL) - return; - for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - if (pe->free_flags & FREE_ENTRY_VALUE) - mv_free(&pe->value); - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmsmv_find_index_for_key(lhmsmv_t* pmap, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmsmve_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been freed, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void lhmsmv_put(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmsmv_enlarge(pmap); - lhmsmv_put_no_enlarge(pmap, key, pvalue, free_flags); -} - -static void lhmsmv_put_no_enlarge(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags) { - int ideal_index = 0; - int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); - lhmsmve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - if (pe->free_flags & FREE_ENTRY_VALUE) - mv_free(&pe->value); - pe->value = *pvalue; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - else - pe->free_flags &= ~FREE_ENTRY_VALUE; - - // The caller asked us to free the key when we were done but another copy of the - // key is already present. So free now what they passed in. - if (free_flags & FREE_ENTRY_KEY) - free(key); - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->value = *pvalue; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -mv_t* lhmsmv_get(lhmsmv_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); - lhmsmve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - return &pe->value; - } else if (pmap->states[index] == EMPTY) { - return NULL; - } else { - fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsmv_has_key(lhmsmv_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsmv_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmsmv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -static void lhmsmv_enlarge(lhmsmv_t* pmap) { - lhmsmve_t* old_entries = pmap->entries; - lhmsmve_state_t* old_states = pmap->states; - lhmsmve_t* old_head = pmap->phead; - - lhmsmv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmsmve_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmsmv_put_no_enlarge(pmap, pe->key, &pe->value, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -void lhmsmv_dump(lhmsmv_t* pmap) { - for (lhmsmve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - char* value_string = mv_alloc_format_val(&pe->value); - printf("| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %12s |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, value_string); - } -} - -// ---------------------------------------------------------------- -int lhmsmv_check_counts(lhmsmv_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d.\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} diff --git a/c/containers/lhmsmv.h b/c/containers/lhmsmv.h deleted file mode 100644 index 4b17f238e..000000000 --- a/c/containers/lhmsmv.h +++ /dev/null @@ -1,57 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-mlrval linked hash map with linear -// probing for collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSMV_H -#define LHMSMV_H - -#include "containers/sllv.h" -#include "lib/mlrval.h" - -// ---------------------------------------------------------------- -typedef struct _lhmsmve_t { - int ideal_index; - char free_flags; - char* key; - mv_t value; - struct _lhmsmve_t *pprev; - struct _lhmsmve_t *pnext; -} lhmsmve_t; - -typedef unsigned char lhmsmve_state_t; - -typedef struct _lhmsmv_t { - int num_occupied; - int num_freed; - int array_length; - lhmsmve_t* entries; - lhmsmve_state_t* states; - lhmsmve_t* phead; - lhmsmve_t* ptail; -} lhmsmv_t; - -// ---------------------------------------------------------------- -lhmsmv_t* lhmsmv_alloc(); -lhmsmv_t* lhmsmv_copy(lhmsmv_t* pmap); -void lhmsmv_clear(lhmsmv_t* pmap); -void lhmsmv_free(lhmsmv_t* pmap); - -void lhmsmv_put(lhmsmv_t* pmap, char* key, mv_t* pvalue, char free_flags); -mv_t* lhmsmv_get(lhmsmv_t* pmap, char* key); -int lhmsmv_has_key(lhmsmv_t* pmap, char* key); - -void lhmsmv_dump(lhmsmv_t* pmap); -int lhmsmv_check_counts(lhmsmv_t* pmap); - -#endif // LHMSMV_H diff --git a/c/containers/lhmss.c b/c/containers/lhmss.c deleted file mode 100644 index 222328325..000000000 --- a/c/containers/lhmss.c +++ /dev/null @@ -1,306 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-string linked hash map with linear -// probing for collisions. -// -// Keys and values are not strduped. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmss.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void lhmss_put_no_enlarge(lhmss_t* pmap, char* key, char* value, char free_flags); -static void lhmss_enlarge(lhmss_t* pmap); - -static void lhmss_init(lhmss_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmsse_t*)mlr_malloc_or_die(sizeof(lhmsse_t) * length); - // Don't do lhmsse_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmsse_state_t*)mlr_malloc_or_die(sizeof(lhmsse_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmss_t* lhmss_alloc() { - lhmss_t* pmap = mlr_malloc_or_die(sizeof(lhmss_t)); - lhmss_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -lhmss_t* lhmss_copy(lhmss_t* pmap) { - lhmss_t* pnew = lhmss_alloc(); - for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) - lhmss_put(pnew, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - return pnew; -} - -void lhmss_free(lhmss_t* pmap) { - if (pmap == NULL) - return; - for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - if (pe->free_flags & FREE_ENTRY_VALUE) - free(pe->value); - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmss_find_index_for_key(lhmss_t* pmap, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmsse_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been freed, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void lhmss_put(lhmss_t* pmap, char* key, char* value, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmss_enlarge(pmap); - lhmss_put_no_enlarge(pmap, key, value, free_flags); -} - -static void lhmss_put_no_enlarge(lhmss_t* pmap, char* key, char* value, char free_flags) { - int ideal_index = 0; - int index = lhmss_find_index_for_key(pmap, key, &ideal_index); - lhmsse_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - if (pe->free_flags & FREE_ENTRY_KEY) - free(key); - if (pe->free_flags & FREE_ENTRY_VALUE) - free(pe->value); - pe->value = value; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - else - pe->free_flags &= ~FREE_ENTRY_VALUE; - - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -char* lhmss_get(lhmss_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmss_find_index_for_key(pmap, key, &ideal_index); - lhmsse_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - return pe->value; - } else if (pmap->states[index] == EMPTY) { - return NULL; - } else { - fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmss_has_key(lhmss_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmss_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmss_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void lhmss_rename(lhmss_t* pmap, char* old_key, char* new_key) { - fprintf(stderr, "rename is not supported in the hashed-record impl.\n"); - exit(1); -} - -// ---------------------------------------------------------------- -static void lhmss_enlarge(lhmss_t* pmap) { - lhmsse_t* old_entries = pmap->entries; - lhmsse_state_t* old_states = pmap->states; - lhmsse_t* old_head = pmap->phead; - - lhmss_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmsse_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmss_put_no_enlarge(pmap, pe->key, pe->value, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "freed"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhmss_dump(lhmss_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhmsse_t* pe = &pmap->entries[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - const char* value_string = (pe == NULL) ? "none" : - pe->value == NULL ? "null" : - pe->value; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | value: %12s |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, value_string); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - const char* value_string = (pe == NULL) ? "none" : - pe->value == NULL ? "null" : - pe->value; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | value: %12s |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, value_string); - } -} - -// ---------------------------------------------------------------- -int lhmss_check_counts(lhmss_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d.\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} diff --git a/c/containers/lhmss.h b/c/containers/lhmss.h deleted file mode 100644 index 7585e4bc8..000000000 --- a/c/containers/lhmss.h +++ /dev/null @@ -1,57 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-string linked hash map with linear -// probing for collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSS_H -#define LHMSS_H - -#include "containers/sllv.h" - -// ---------------------------------------------------------------- -typedef struct _lhmsse_t { - int ideal_index; - char free_flags; - char* key; - char* value; - struct _lhmsse_t *pprev; - struct _lhmsse_t *pnext; -} lhmsse_t; - -typedef unsigned char lhmsse_state_t; - -typedef struct _lhmss_t { - int num_occupied; - int num_freed; - int array_length; - lhmsse_t* entries; - lhmsse_state_t* states; - lhmsse_t* phead; - lhmsse_t* ptail; -} lhmss_t; - -// ---------------------------------------------------------------- -lhmss_t* lhmss_alloc(); -lhmss_t* lhmss_copy(lhmss_t* pmap); -void lhmss_free(lhmss_t* pmap); -void lhmss_put(lhmss_t* pmap, char* key, char* value, char free_flags); -char* lhmss_get(lhmss_t* pmap, char* key); -int lhmss_has_key(lhmss_t* pmap, char* key); -void lhmss_rename(lhmss_t* pmap, char* old_key, char* new_key); - -void lhmss_dump(lhmss_t* pmap); - -// Unit-test hook -int lhmss_check_counts(lhmss_t* pmap); - -#endif // LHMSS_H diff --git a/c/containers/lhmsv.c b/c/containers/lhmsv.c deleted file mode 100644 index 2741f718f..000000000 --- a/c/containers/lhmsv.c +++ /dev/null @@ -1,293 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-void linked hash map with linear -// probing for collisions. -// -// Keys are not strduped; memory management of the void* values is left to the -// caller. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lhmsv.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Allow compile-time override, e.g using gcc -D. -#ifndef INITIAL_ARRAY_LENGTH -#define INITIAL_ARRAY_LENGTH 16 -#endif - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -// ---------------------------------------------------------------- -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ---------------------------------------------------------------- -static void lhmsv_put_no_enlarge(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags); -static void lhmsv_enlarge(lhmsv_t* pmap); - -static void lhmsv_init(lhmsv_t *pmap, int length) { - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = length; - - pmap->entries = (lhmsve_t*)mlr_malloc_or_die(sizeof(lhmsve_t) * length); - // Don't do lhmsve_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - pmap->states = (lhmsve_state_t*)mlr_malloc_or_die(sizeof(lhmsve_state_t) * length); - memset(pmap->states, EMPTY, length); - - pmap->phead = NULL; - pmap->ptail = NULL; -} - -lhmsv_t* lhmsv_alloc() { - lhmsv_t* pmap = mlr_malloc_or_die(sizeof(lhmsv_t)); - lhmsv_init(pmap, INITIAL_ARRAY_LENGTH); - return pmap; -} - -// ---------------------------------------------------------------- -void lhmsv_free(lhmsv_t* pmap) { - if (pmap == NULL) - return; - for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - } - free(pmap->entries); - free(pmap->states); - pmap->entries = NULL; - pmap->num_occupied = 0; - pmap->num_freed = 0; - pmap->array_length = 0; - free(pmap); -} - -void lhmsv_clear(lhmsv_t* pmap) { - if (pmap == NULL) - return; - for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - } - pmap->num_occupied = 0; - pmap->num_freed = 0; - memset(pmap->states, EMPTY, pmap->array_length); - pmap->phead = NULL; - pmap->ptail = NULL; -} - -// ---------------------------------------------------------------- -// Used by get() and remove(). -// Returns >=0 for where the key is *or* should go (end of chain). -static int lhmsv_find_index_for_key(lhmsv_t* pmap, char* key, int* pideal_index) { - int hash = mlr_string_hash_func(key); - int index = mlr_canonical_mod(hash, pmap->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - lhmsve_t* pe = &pmap->entries[index]; - if (pmap->states[index] == OCCUPIED) { - char* ekey = pe->key; - // Existing key found in chain. - if (streq(key, ekey)) - return index; - } - else if (pmap->states[index] == EMPTY) { - return index; - } - - // If the current entry has been deleted, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= pmap->array_length) { - fprintf(stderr, - "%s: internal coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= pmap->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -void lhmsv_put(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags) { - if ((pmap->num_occupied + pmap->num_freed) >= (pmap->array_length*LOAD_FACTOR)) - lhmsv_enlarge(pmap); - lhmsv_put_no_enlarge(pmap, key, pvvalue, free_flags); -} - -static void lhmsv_put_no_enlarge(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags) { - int ideal_index = 0; - int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); - lhmsve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pe->pvvalue = pvvalue; - - } else if (pmap->states[index] == EMPTY) { - // End of chain. - pe->ideal_index = ideal_index; - pe->key = key; - pe->pvvalue = pvvalue; - pe->free_flags = free_flags; - pmap->states[index] = OCCUPIED; - - if (pmap->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - pmap->phead = pe; - pmap->ptail = pe; - } else { - pe->pprev = pmap->ptail; - pe->pnext = NULL; - pmap->ptail->pnext = pe; - pmap->ptail = pe; - } - pmap->num_occupied++; - - } else { - fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void* lhmsv_get(lhmsv_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); - lhmsve_t* pe = &pmap->entries[index]; - - if (pmap->states[index] == OCCUPIED) - return pe->pvvalue; - else if (pmap->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -int lhmsv_has_key(lhmsv_t* pmap, char* key) { - int ideal_index = 0; - int index = lhmsv_find_index_for_key(pmap, key, &ideal_index); - - if (pmap->states[index] == OCCUPIED) - return TRUE; - else if (pmap->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: lhmsv_find_index_for_key did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -static void lhmsv_enlarge(lhmsv_t* pmap) { - lhmsve_t* old_entries = pmap->entries; - lhmsve_state_t* old_states = pmap->states; - lhmsve_t* old_head = pmap->phead; - - lhmsv_init(pmap, pmap->array_length*ENLARGEMENT_FACTOR); - - for (lhmsve_t* pe = old_head; pe != NULL; pe = pe->pnext) { - lhmsv_put_no_enlarge(pmap, pe->key, pe->pvvalue, pe->free_flags); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -int lhmsv_check_counts(lhmsv_t* pmap) { - int nocc = 0; - int ndel = 0; - for (int index = 0; index < pmap->array_length; index++) { - if (pmap->states[index] == OCCUPIED) - nocc++; - else if (pmap->states[index] == DELETED) - ndel++; - } - if (nocc != pmap->num_occupied) { - fprintf(stderr, - "occupancy-count mismatch: actual %d != cached %d.\n", - nocc, pmap->num_occupied); - return FALSE; - } - if (ndel != pmap->num_freed) { - fprintf(stderr, - "deleted-count mismatch: actual %d != cached %d.\n", - ndel, pmap->num_freed); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -static char* get_state_name(int state) { - switch(state) { - case OCCUPIED: return "occupied"; break; - case DELETED: return "deleted"; break; - case EMPTY: return "empty"; break; - default: return "?????"; break; - } -} - -void lhmsv_print(lhmsv_t* pmap) { - for (int index = 0; index < pmap->array_length; index++) { - lhmsve_t* pe = &pmap->entries[index]; - - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - - printf( - "| stt: %-8s | idx: %6d | nidx: %6d | key: %12s | pvvalue: %p |\n", - get_state_name(pmap->states[index]), index, pe->ideal_index, key_string, pe->pvvalue); - } - printf("+\n"); - printf("| phead: %p | ptail %p\n", pmap->phead, pmap->ptail); - printf("+\n"); - for (lhmsve_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - printf( - "| prev: %p curr: %p next: %p | nidx: %6d | key: %12s | pvvalue: %p |\n", - pe->pprev, pe, pe->pnext, - pe->ideal_index, key_string, pe->pvvalue); - } -} diff --git a/c/containers/lhmsv.h b/c/containers/lhmsv.h deleted file mode 100644 index f945cb371..000000000 --- a/c/containers/lhmsv.h +++ /dev/null @@ -1,56 +0,0 @@ -// ================================================================ -// Array-only (open addressing) string-to-void linked hash map with linear -// probing for collisions. -// -// John Kerl 2012-08-13 -// -// Notes: -// * null key is not supported. -// * null value is supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef LHMSV_H -#define LHMSV_H - -#include "containers/sllv.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -typedef struct _lhmsve_t { - int ideal_index; - char* key; - void* pvvalue; - char free_flags; - struct _lhmsve_t *pprev; - struct _lhmsve_t *pnext; -} lhmsve_t; - -typedef unsigned char lhmsve_state_t; - -typedef struct _lhmsv_t { - int num_occupied; - int num_freed; - int array_length; - lhmsve_t* entries; - lhmsve_state_t* states; - lhmsve_t* phead; - lhmsve_t* ptail; -} lhmsv_t; - -// ---------------------------------------------------------------- -lhmsv_t* lhmsv_alloc(); -void lhmsv_free(lhmsv_t* pmap); -void lhmsv_clear(lhmsv_t* pmap); - -void lhmsv_put(lhmsv_t* pmap, char* key, void* pvvalue, char free_flags); -void* lhmsv_get(lhmsv_t* pmap, char* key); -int lhmsv_has_key(lhmsv_t* pmap, char* key); - -// Unit-test hook -int lhmsv_check_counts(lhmsv_t* pmap); - -#endif // LHMSV_H diff --git a/c/containers/local_stack.c b/c/containers/local_stack.c deleted file mode 100644 index de2445135..000000000 --- a/c/containers/local_stack.c +++ /dev/null @@ -1,368 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/local_stack.h" - -// ================================================================ -static local_stack_frame_t* _local_stack_alloc(int size, int ephemeral) { - local_stack_frame_t* pframe = mlr_malloc_or_die(sizeof(local_stack_frame_t)); - - pframe->in_use = FALSE; - pframe->ephemeral = ephemeral; - pframe->size = size; - pframe->subframe_base = 0; - pframe->pvars = mlr_malloc_or_die(size * sizeof(local_stack_frame_entry_t)); - for (int i = 0; i < size; i++) { - local_stack_frame_entry_t* pentry = &pframe->pvars[i]; - pentry->xvalue = mlhmmv_xvalue_wrap_terminal(mv_absent()); - pentry->name = NULL; - // Any type can be written here, unless otherwise specified by a typed definition - pentry->type_mask = TYPE_MASK_ANY; - } - - return pframe; -} - -// ---------------------------------------------------------------- -local_stack_frame_t* local_stack_frame_alloc(int size) { - return _local_stack_alloc(size, FALSE); -} - -// ---------------------------------------------------------------- -void local_stack_frame_free(local_stack_frame_t* pframe) { - if (pframe == NULL) - return; - for (int i = 0; i < pframe->size; i++) { - mlhmmv_xvalue_free(&pframe->pvars[i].xvalue); - } - free(pframe->pvars); - free(pframe); -} - -// ---------------------------------------------------------------- -local_stack_frame_t* local_stack_frame_enter(local_stack_frame_t* pframe) { - if (!pframe->in_use) { - pframe->in_use = TRUE; - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME NON-EPH ENTER %p %d\n", pframe, pframe->size)); - return pframe; - } else { - local_stack_frame_t* prv = _local_stack_alloc(pframe->size, TRUE); - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME EPH ENTER %p/%p %d\n", pframe, prv, pframe->size)); - prv->in_use = TRUE; - return prv; - } -} - -// ---------------------------------------------------------------- -void local_stack_frame_exit (local_stack_frame_t* pframe) { - MLR_INTERNAL_CODING_ERROR_UNLESS(mlhmmv_xvalue_is_absent_and_nonterminal(&pframe->pvars[0].xvalue)); - if (!pframe->ephemeral) { - pframe->in_use = FALSE; - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME NON-EPH EXIT %p %d\n", pframe, pframe->size)); - } else { - local_stack_frame_free(pframe); - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME EPH EXIT %p %d\n", pframe, pframe->size)); - } -} - -// ================================================================ -local_stack_t* local_stack_alloc() { - local_stack_t* pstack = mlr_malloc_or_die(sizeof(local_stack_t)); - - pstack->pframes = sllv_alloc(); - - return pstack; -} - -// ---------------------------------------------------------------- -void local_stack_free(local_stack_t* pstack) { - if (pstack == NULL) - return; - for (sllve_t* pe = pstack->pframes->phead; pe != NULL; pe = pe->pnext) { - local_stack_frame_free(pe->pvvalue); - } - sllv_free(pstack->pframes); - free(pstack); -} - -// ---------------------------------------------------------------- -void local_stack_push(local_stack_t* pstack, local_stack_frame_t* pframe) { - sllv_push(pstack->pframes, pframe); -} - -local_stack_frame_t* local_stack_pop(local_stack_t* pstack) { - return sllv_pop(pstack->pframes); -} - -// ---------------------------------------------------------------- -mv_t local_stack_frame_ref_terminal_from_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); - - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - mlhmmv_xvalue_t* pbase_xval = &pentry->xvalue; - - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_read(pentry); - } - -#ifdef LOCAL_STACK_TRACE_ENABLE - if (pbase_xval == NULL) { - printf("VALUE IS NULL\n"); - } else if (pbase_xval->is_terminal) { - char* s = mv_alloc_format_val(&pbase_xval->terminal_mlrval); - printf("VALUE IS %s\n", s); - free(s); - } else if (pbase_xval->pnext_level == NULL) { - LOCAL_STACK_TRACE(printf("VALUE IS EMPTY\n")); - } else { - printf("VALUE IS:\n"); - printf("PTR IS %p\n", pbase_xval->pnext_level); - mlhmmv_level_print_stacked(pbase_xval->pnext_level, 0, TRUE, TRUE, "", stdout); - } -#endif - - // xxx this is a mess; clean it up. - int error = 0; - // Maybe null - mlhmmv_xvalue_t* pxval; - if (pmvkeys == NULL || pmvkeys->length == 0) { - pxval = pbase_xval; - } else { - if (pbase_xval->is_terminal) { - return mv_absent(); - } else { - pxval = mlhmmv_level_look_up_and_ref_xvalue(pbase_xval->pnext_level, pmvkeys, &error); - } - } - if (pxval != NULL && pxval->is_terminal) { - return pxval->terminal_mlrval; - } else { - return mv_absent(); - } -} - -// ---------------------------------------------------------------- -mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); - - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; - - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_read(pentry); - } - -#ifdef LOCAL_STACK_TRACE_ENABLE - if (pmvalue == NULL) { - printf("VALUE IS NULL\n"); - } else if (pmvalue->is_terminal) { - char* s = mv_alloc_format_val(&pmvalue->terminal_mlrval); - printf("VALUE IS %s\n", s); - free(s); - } else if (pmvalue->pnext_level == NULL) { - LOCAL_STACK_TRACE(printf("VALUE IS EMPTY\n")); - } else { - printf("VALUE IS:\n"); - printf("PTR IS %p\n", pmvalue->pnext_level); - mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout); - } -#endif - - if (pmvkeys == NULL) { // base-level access - return pmvalue; - } else { - int error = 0; - // Maybe null - return mlhmmv_level_look_up_and_ref_xvalue(pmvalue->pnext_level, pmvkeys, &error); - } -} - -// ---------------------------------------------------------------- -void local_stack_frame_define_terminal(local_stack_frame_t* pframe, char* variable_name, - int vardef_frame_relative_index, int type_mask, mv_t val) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "DEFINE", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - pentry->name = variable_name; // no strdup, for performance -- caller must ensure extent - pentry->type_mask = type_mask; - - if (!(type_mask_from_mv(&val) & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &val); - } - - mlhmmv_xvalue_free(&pentry->xvalue); - - if (mv_is_absent(&val)) { - mv_free(&val); // xxx doc ownership semantics at header file - } else { - pentry->xvalue = mlhmmv_xvalue_wrap_terminal(val); // xxx deep-copy? - } -} - -// ---------------------------------------------------------------- -void local_stack_frame_define_extended(local_stack_frame_t* pframe, char* variable_name, - int vardef_frame_relative_index, int type_mask, mlhmmv_xvalue_t xval) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - pentry->name = variable_name; // no strdup, for performance -- caller must ensure extent - pentry->type_mask = type_mask; - - if (xval.is_terminal) { - if (!(type_mask_from_mv(&xval.terminal_mlrval) & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); - } - } else { - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); - } - } - - if (!mlhmmv_xvalue_is_absent_and_nonterminal(&xval)) { - mlhmmv_xvalue_free(&pentry->xvalue); - pentry->xvalue = xval; - } -} - -// ---------------------------------------------------------------- -void local_stack_frame_assign_terminal_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys, - mv_t terminal_value) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &terminal_value); - } - - mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; - - if (pmvalue->is_terminal) { - mv_free(&pmvalue->terminal_mlrval); - *pmvalue = mlhmmv_xvalue_alloc_empty_map(); - } - mlhmmv_level_put_terminal(pmvalue->pnext_level, pmvkeys->phead, &terminal_value); - - LOCAL_STACK_TRACE(printf("VALUE IS:\n")); - LOCAL_STACK_TRACE(mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout)); -} - -// ---------------------------------------------------------------- -void local_stack_frame_assign_extended_nonindexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, mlhmmv_xvalue_t xval) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - if (xval.is_terminal) { - if (!(type_mask_from_mv(&xval.terminal_mlrval) & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); - } - } else { - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &xval.terminal_mlrval); - } - } - - mlhmmv_xvalue_free(&pentry->xvalue); - pentry->xvalue = xval; -} - -// ---------------------------------------------------------------- -void local_stack_frame_assign_extended_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys, - mlhmmv_xvalue_t new_value) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - if (!(TYPE_MASK_MAP & pentry->type_mask)) { - local_stack_frame_throw_type_xmismatch_for_write(pentry, &new_value); - } - - mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; - - if (pmvalue->is_terminal) { - mv_free(&pmvalue->terminal_mlrval); - *pmvalue = mlhmmv_xvalue_alloc_empty_map(); - } - mlhmmv_level_put_xvalue(pmvalue->pnext_level, pmvkeys->phead, &new_value); - - LOCAL_STACK_TRACE(printf("VALUE IS:\n")); - LOCAL_STACK_TRACE(mlhmmv_level_print_stacked(pmvalue->pnext_level, 0, TRUE, TRUE, "", stdout)); -} - -// ---------------------------------------------------------------- -static int local_stack_bounds_check_announce_first_call = TRUE; - -void local_stack_bounds_check(local_stack_frame_t* pframe, char* op, int set, int vardef_frame_relative_index) { - if (local_stack_bounds_check_announce_first_call) { - fprintf(stderr, "%s: local-stack bounds-checking is enabled\n", MLR_GLOBALS.bargv0); - local_stack_bounds_check_announce_first_call = FALSE; - } - if (vardef_frame_relative_index < 0) { - fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d STACK UNDERFLOW\n", - op, pframe, vardef_frame_relative_index, pframe->size); - exit(1); - } - if (set && vardef_frame_relative_index == 0) { - fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d ABSENT WRITE\n", - op, pframe, vardef_frame_relative_index, pframe->size); - exit(1); - } - if (vardef_frame_relative_index >= pframe->size) { - fprintf(stderr, "OP=%s FRAME=%p IDX=%d/%d STACK OVERFLOW\n", - op, pframe, vardef_frame_relative_index, pframe->size); - exit(1); - } -} - -// ---------------------------------------------------------------- -void local_stack_frame_throw_type_mismatch_for_write(local_stack_frame_entry_t* pentry, mv_t* pval) { - MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); - char* sval = mv_alloc_format_val_quoting_strings(pval); - fprintf(stderr, "%s: %s type assertion for variable %s unmet by value %s with type %s.\n", - MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name, - sval, mt_describe_type_simple(pval->type)); - free(sval); - exit(1); -} - -void local_stack_frame_throw_type_xmismatch_for_write(local_stack_frame_entry_t* pentry, mlhmmv_xvalue_t* pxval) { - MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); - char* sval = mv_alloc_format_val_quoting_strings(&pxval->terminal_mlrval); // xxx temp -- maybe not terminal - fprintf(stderr, "%s: %s type assertion for variable %s unmet by value %s with type %s.\n", - MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name, - sval, mlhmmv_xvalue_describe_type_simple(pxval)); - free(sval); - exit(1); -} - -// ---------------------------------------------------------------- -void local_stack_frame_throw_type_mismatch_for_read(local_stack_frame_entry_t* pentry) { - MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); - fprintf(stderr, "%s: %s type assertion for variable %s unmet on read.\n", - MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name); - exit(1); -} - -void local_stack_frame_throw_type_xmismatch_for_read(local_stack_frame_entry_t* pentry) { - MLR_INTERNAL_CODING_ERROR_IF(pentry->name == NULL); - fprintf(stderr, "%s: %s type assertion for variable %s unmet on read.\n", - MLR_GLOBALS.bargv0, type_mask_to_desc(pentry->type_mask), pentry->name); - exit(1); -} diff --git a/c/containers/local_stack.h b/c/containers/local_stack.h deleted file mode 100644 index 270a0775a..000000000 --- a/c/containers/local_stack.h +++ /dev/null @@ -1,215 +0,0 @@ -#ifndef LOCAL_STACK_H -#define LOCAL_STACK_H - -#include "lib/mlrval.h" -#include "containers/type_decl.h" -#include "containers/sllv.h" -#include "containers/mlhmmv.h" - -// ================================================================ -// Bound & scoped variables for use in for-loops, function bodies, and -// subroutine bodies. Indices of local variables, and max-depth for top-level -// statement blocks, are compted by the stack-allocator which marks up the AST -// before the CST is built from it. -// -// A convention shared between the stack-allocator and this data structure is -// that slot 0 is an absent-null which is used for reads of undefined (or -// as-yet-undefined) local variables. -// -// Values assigned to a local-stack variable are owned by this container. -// They will be freed: -// * On overwrite, e.g. on 'x = oldval' then 'x = newval' the oldval -// will be freed on the newval assignment, and -// * At stack-frame exit. -// For this reason values assigned to locals may be passed in by reference -// if they are ephemeral, i.e. if it is desired for this container to free -// them. Otherwise, values should be copied before being passed in. -// ================================================================ - -// ================================================================ -typedef struct _local_stack_frame_entry_t { - char* name; // For type-check error messages. Not strduped; the caller must ensure extent. - mlhmmv_xvalue_t xvalue; - int type_mask; -} local_stack_frame_entry_t; - -typedef struct _local_stack_frame_t { - int in_use; - int ephemeral; - int size; - int subframe_base; - local_stack_frame_entry_t* pvars; -} local_stack_frame_t; - -// ---------------------------------------------------------------- -// A stack is allocated for a top-level statement block: begin, end, or main, or -// user-defined function/subroutine. (The latter two may be called recursively -// in which case the in_use flag notes the need to allocate a new stack.) - -local_stack_frame_t* local_stack_frame_alloc(int size); -void local_stack_frame_free(local_stack_frame_t* pframe); - -// ================================================================ -//#define LOCAL_STACK_TRACE_ENABLE -//#define LOCAL_STACK_BOUNDS_CHECK_ENABLE - -void local_stack_bounds_check(local_stack_frame_t* pframe, char* op, int set, int vardef_frame_relative_index); -#ifdef LOCAL_STACK_BOUNDS_CHECK_ENABLE -#define LOCAL_STACK_BOUNDS_CHECK(pframe, op, set, vardef_frame_relative_index) \ - local_stack_bounds_check((pframe), (op), (set), (vardef_frame_relative_index)) -#else -#define LOCAL_STACK_BOUNDS_CHECK(pframe, op, set, vardef_frame_relative_index) -#endif - -#ifdef LOCAL_STACK_TRACE_ENABLE -#define LOCAL_STACK_TRACE(p) p -#else -#define LOCAL_STACK_TRACE(p) -#endif - -// These are unconditional. With the single added character 'X' they can be -// used to focus verbosity at specific callsites for dev/debug. -#define LOCAL_STACK_BOUNDS_CHECKX(pframe, op, set, vardef_frame_relative_index) \ - local_stack_bounds_check((pframe), (op), (set), (vardef_frame_relative_index)) - -#define LOCAL_STACK_TRACEX(p) p - -// ---------------------------------------------------------------- -// Sets/clears the in-use flag for top-level statement blocks, and verifies the -// contract for absent-null at slot 0. - -// For non-recursive functions/subroutines the enter method sets the in-use flag -// and returns its argument; the exit method clears that flag. For recursively -// invoked functions/subroutines the enter method returns another stack of the -// same size, and the exit method frees that. -// -// The reason we don't simply always allocate is that begin/main/end statements -// are never recursive, and most functions and subroutines are not recursive, so -// most of the time there will be a single frame for each. We allocate that once -// at startup, reuse it on every record, and free it at exit -- rather than -// allocating and freeing frames on every record. - -local_stack_frame_t* local_stack_frame_enter(local_stack_frame_t* pframe); -void local_stack_frame_exit(local_stack_frame_t* pframe); -void local_stack_frame_throw_type_mismatch_for_write(local_stack_frame_entry_t* pentry, mv_t* pval); -void local_stack_frame_throw_type_xmismatch_for_write(local_stack_frame_entry_t* pentry, mlhmmv_xvalue_t* pxval); -void local_stack_frame_throw_type_mismatch_for_read(local_stack_frame_entry_t* pentry); -void local_stack_frame_throw_type_xmismatch_for_read(local_stack_frame_entry_t* pentry); - -// ---------------------------------------------------------------- -static inline mv_t local_stack_frame_get_terminal_from_nonindexed(local_stack_frame_t* pframe, // move to reference semantics - int vardef_frame_relative_index) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - mlhmmv_xvalue_t* pvalue = &pentry->xvalue; - if (pvalue != NULL && pvalue->is_terminal) { - return pvalue->terminal_mlrval; - } else { - return mv_absent(); - } -} - -// ---------------------------------------------------------------- -static inline void local_stack_frame_assign_terminal_nonindexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, mv_t val) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p SET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "ASSIGN", TRUE, vardef_frame_relative_index); - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - - if (!(type_mask_from_mv(&val) & pentry->type_mask)) { - local_stack_frame_throw_type_mismatch_for_write(pentry, &val); - } - - mlhmmv_xvalue_free(&pentry->xvalue); - pentry->xvalue = mlhmmv_xvalue_wrap_terminal(val); // xxx deep-copy? -} - -// ---------------------------------------------------------------- -static inline mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_nonindexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index) -{ - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p GET %d\n", pframe, vardef_frame_relative_index)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "GET", FALSE, vardef_frame_relative_index); - - local_stack_frame_entry_t* pentry = &pframe->pvars[vardef_frame_relative_index]; - mlhmmv_xvalue_t* pmvalue = &pentry->xvalue; - - return pmvalue; -} - -// ---------------------------------------------------------------- -mv_t local_stack_frame_ref_terminal_from_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys); - -mlhmmv_xvalue_t* local_stack_frame_ref_extended_from_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys); - -void local_stack_frame_define_terminal(local_stack_frame_t* pframe, char* variable_name, - int vardef_frame_relative_index, int type_mask, mv_t val); - -void local_stack_frame_define_extended(local_stack_frame_t* pframe, char* variable_name, - int vardef_frame_relative_index, int type_mask, mlhmmv_xvalue_t xval); - -void local_stack_frame_assign_extended_nonindexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, mlhmmv_xvalue_t xval); - -void local_stack_frame_assign_terminal_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys, - mv_t terminal_value); - -void local_stack_frame_assign_extended_indexed(local_stack_frame_t* pframe, - int vardef_frame_relative_index, sllmv_t* pmvkeys, - mlhmmv_xvalue_t terminal_value); - -// ---------------------------------------------------------------- -// Frames are entered/exited for each curly-braced statement block, including -// the top-level block itself as well as ifs/fors/whiles. - -static inline void local_stack_subframe_enter(local_stack_frame_t* pframe, int count) { - LOCAL_STACK_TRACE(printf("LOCAL STACK SUBFRAME %p ENTER %d->%d\n", - pframe, pframe->subframe_base, pframe->subframe_base+count)); - local_stack_frame_entry_t* psubframe = &pframe->pvars[pframe->subframe_base]; - for (int i = 0; i < count; i++) { - LOCAL_STACK_TRACE(printf("LOCAL STACK FRAME %p CLEAR %d\n", pframe, pframe->subframe_base+i)); - LOCAL_STACK_BOUNDS_CHECK(pframe, "CLEAR", FALSE, pframe->subframe_base+i); - local_stack_frame_entry_t* pentry = &psubframe[i]; - - mlhmmv_xvalue_reset(&pentry->xvalue); - - pentry->type_mask = TYPE_MASK_ANY; - } - pframe->subframe_base += count; -} - -// ---------------------------------------------------------------- -static inline void local_stack_subframe_exit(local_stack_frame_t* pframe, int count) { - LOCAL_STACK_TRACE(printf("LOCAL STACK SUBFRAME %p EXIT %d->%d\n", - pframe, pframe->subframe_base, pframe->subframe_base-count)); - pframe->subframe_base -= count; - local_stack_frame_entry_t* psubframe = &pframe->pvars[pframe->subframe_base]; - for (int i = 0; i < count; i++) { - local_stack_frame_entry_t* pentry = &psubframe[i]; - mlhmmv_xvalue_free(&pentry->xvalue); - } -} - -// ================================================================ -typedef struct _local_stack_t { - sllv_t* pframes; -} local_stack_t; - -local_stack_t* local_stack_alloc(); -void local_stack_free(local_stack_t* pstack); - -void local_stack_push(local_stack_t* pstack, local_stack_frame_t* pframe); - -local_stack_frame_t* local_stack_pop(local_stack_t* pstack); - -static inline local_stack_frame_t* local_stack_get_top_frame(local_stack_t* pstack) { - return pstack->pframes->phead->pvvalue; -} - -#endif // LOCAL_STACK_H diff --git a/c/containers/loop_stack.c b/c/containers/loop_stack.c deleted file mode 100644 index 3ce017a79..000000000 --- a/c/containers/loop_stack.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "loop_stack.h" - -#define INITIAL_SIZE 32 - -// Example states: - -// num_allocated = 4 num_allocated = 4 num_allocated = 4 num_allocated = 4 -// num_used = 1 num_used = 2 num_used = 3 num_used = 4 -// num_used_minus_one = 0 num_used_minus_one = 1 num_used_minus_one = 2 num_used_minus_one = 3 -// -// +---+ +---+ +---+ +---+ -// | 2 | 0 <--- top | 2 | 0 | 2 | 0 | 2 | 0 -// +---+ +---+ +---+ +---+ -// |///| 1 | 0 | 1 <--- top | 0 | 1 | 0 | -// +---+ +---+ +---+ +---+ -// |///| 2 |///| 2 | 4 | 2 <--- top | 4 | -// +---+ +---+ +---+ +---+ -// |///| 3 |///| 3 |///| 3 | 6 | 3 <--- top -// +---+ +---+ +---+ +---+ - -// ---------------------------------------------------------------- -loop_stack_t* loop_stack_alloc() { - loop_stack_t* pstack = mlr_malloc_or_die(sizeof(loop_stack_t)); - - // Guard zone of one. As noted in the header file, set/get are intentionally not bounds-checked. - // If set is called without push, or after final pop, we can at least not corrupt other code. - pstack->num_used_minus_one = 0; - pstack->num_allocated = INITIAL_SIZE; - - pstack->pframes = mlr_malloc_or_die(pstack->num_allocated * sizeof(int)); - memset(pstack->pframes, 0, pstack->num_allocated * sizeof(int)); - - return pstack; -} - -// ---------------------------------------------------------------- -void loop_stack_free(loop_stack_t* pstack) { - if (pstack == NULL) - return; - free(pstack->pframes); - free(pstack); -} - -// ---------------------------------------------------------------- -void loop_stack_push(loop_stack_t* pstack) { - if (pstack->num_used_minus_one >= pstack->num_allocated - 1) { - pstack->num_allocated += INITIAL_SIZE; - pstack->pframes = mlr_realloc_or_die(pstack->pframes, pstack->num_allocated * sizeof(int)); - } - pstack->num_used_minus_one++; - pstack->pframes[pstack->num_used_minus_one] = 0; -} - -// ---------------------------------------------------------------- -int loop_stack_pop(loop_stack_t* pstack) { - MLR_INTERNAL_CODING_ERROR_IF(pstack->num_used_minus_one <= 0); - int rv = pstack->pframes[pstack->num_used_minus_one]; - pstack->num_used_minus_one--; - return rv; -} - -// ---------------------------------------------------------------- -// Not bounds-checked, as noted in the header file. -void loop_stack_set(loop_stack_t* pstack, int bits) { - pstack->pframes[pstack->num_used_minus_one] |= bits; -} -void loop_stack_clear(loop_stack_t* pstack, int bits) { - pstack->pframes[pstack->num_used_minus_one] &= ~bits; -} - -// ---------------------------------------------------------------- -// Not bounds-checked, as noted in the header file. -int loop_stack_get(loop_stack_t* pstack) { - return pstack->pframes[pstack->num_used_minus_one]; -} diff --git a/c/containers/loop_stack.h b/c/containers/loop_stack.h deleted file mode 100644 index cbff04ff7..000000000 --- a/c/containers/loop_stack.h +++ /dev/null @@ -1,35 +0,0 @@ -// Holds broken/continued flags for loops (for-srec, for-oosvar, while, do-while). - -#ifndef LOOP_STACK_H -#define LOOP_STACK_H - -#define LOOP_BROKEN 0x8000 -#define LOOP_CONTINUED 0x0100 - -typedef struct _loop_stack_t { - int num_used_minus_one; - int num_allocated; - int* pframes; -} loop_stack_t; - -loop_stack_t* loop_stack_alloc(); -void loop_stack_free(loop_stack_t* pstack); - -// To be used on entry to loop handler. -void loop_stack_push(loop_stack_t* pstack); - -// To be used on exit from loop handler. -int loop_stack_pop(loop_stack_t* pstack); - -// To be used by break/continue handler. -// NOTE: For efficiency the stack is **NOT** bounds-checked here. E.g. if set is done before a push, -// or after an emptying pop, behavior is unspecified. -void loop_stack_set(loop_stack_t* pstack, int bits); -void loop_stack_clear(loop_stack_t* pstack, int bits); - -// To be used by loop handler. -// NOTE: For efficiency the stack is **NOT** bounds-checked here. E.g. if set is done before a push, -// or after an emptying pop, behavior is unspecified. -int loop_stack_get(loop_stack_t* pstack); - -#endif // LOOP_STACK_H diff --git a/c/containers/lrec.c b/c/containers/lrec.c deleted file mode 100644 index 4dab2ae90..000000000 --- a/c/containers/lrec.c +++ /dev/null @@ -1,747 +0,0 @@ -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/string_builder.h" -#include "containers/hss.h" -#include "containers/slls.h" -#include "containers/lrec.h" - -#define SB_ALLOC_LENGTH 256 - -static lrece_t* lrec_find_entry(lrec_t* prec, char* key); -static void lrec_link_at_head(lrec_t* prec, lrece_t* pe); -static void lrec_link_at_tail(lrec_t* prec, lrece_t* pe); - -static void lrec_unbacked_free(lrec_t* prec); -static void lrec_free_single_line_backing(lrec_t* prec); -static void lrec_free_csv_backing(lrec_t* prec); -static void lrec_free_multiline_backing(lrec_t* prec); - -// ---------------------------------------------------------------- -lrec_t* lrec_unbacked_alloc() { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->pfree_backing_func = lrec_unbacked_free; - return prec; -} - -lrec_t* lrec_dkvp_alloc(char* line) { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->psingle_line = line; - prec->pfree_backing_func = lrec_free_single_line_backing; - return prec; -} - -lrec_t* lrec_nidx_alloc(char* line) { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->psingle_line = line; - prec->pfree_backing_func = lrec_free_single_line_backing; - return prec; -} - -lrec_t* lrec_csvlite_alloc(char* data_line) { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->psingle_line = data_line; - prec->pfree_backing_func = lrec_free_csv_backing; - return prec; -} - -lrec_t* lrec_csv_alloc(char* data_line) { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->psingle_line = data_line; - prec->pfree_backing_func = lrec_free_csv_backing; - return prec; -} - -lrec_t* lrec_xtab_alloc(slls_t* pxtab_lines) { - lrec_t* prec = mlr_malloc_or_die(sizeof(lrec_t)); - memset(prec, 0, sizeof(lrec_t)); - prec->pxtab_lines = pxtab_lines; - prec->pfree_backing_func = lrec_free_multiline_backing; - return prec; -} - -// ---------------------------------------------------------------- -static void lrec_free_contents(lrec_t* prec) { - for (lrece_t* pe = prec->phead; pe != NULL; /*pe = pe->pnext*/) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - if (pe->free_flags & FREE_ENTRY_VALUE) - free(pe->value); - lrece_t* ope = pe; - pe = pe->pnext; - free(ope); - } - prec->pfree_backing_func(prec); -} - -// ---------------------------------------------------------------- -void lrec_clear(lrec_t* prec) { - if (prec == NULL) - return; - lrec_free_contents(prec); - memset(prec, 0, sizeof(lrec_t)); - prec->pfree_backing_func = lrec_unbacked_free; -} - -// ---------------------------------------------------------------- -void lrec_free(lrec_t* prec) { - if (prec == NULL) - return; - lrec_free_contents(prec); - free(prec); -} - -// ---------------------------------------------------------------- -lrec_t* lrec_copy(lrec_t* pinrec) { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - return poutrec; -} - -// ---------------------------------------------------------------- -void lrec_put(lrec_t* prec, char* key, char* value, char free_flags) { - lrece_t* pe = lrec_find_entry(prec, key); - - if (pe != NULL) { - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - if (free_flags & FREE_ENTRY_KEY) - free(key); - pe->value = value; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - else - pe->free_flags &= ~FREE_ENTRY_VALUE; - } else { - pe = mlr_malloc_or_die(sizeof(lrece_t)); - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pe->quote_flags = 0; - - if (prec->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - prec->phead = pe; - prec->ptail = pe; - } else { - pe->pprev = prec->ptail; - pe->pnext = NULL; - prec->ptail->pnext = pe; - prec->ptail = pe; - } - prec->field_count++; - } -} - -void lrec_put_ext(lrec_t* prec, char* key, char* value, char free_flags, char quote_flags) { - lrece_t* pe = lrec_find_entry(prec, key); - - if (pe != NULL) { - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - if (free_flags & FREE_ENTRY_KEY) - free(key); - pe->value = value; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - else - pe->free_flags &= ~FREE_ENTRY_VALUE; - } else { - pe = mlr_malloc_or_die(sizeof(lrece_t)); - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pe->quote_flags = quote_flags; - - if (prec->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - prec->phead = pe; - prec->ptail = pe; - } else { - pe->pprev = prec->ptail; - pe->pnext = NULL; - prec->ptail->pnext = pe; - prec->ptail = pe; - } - prec->field_count++; - } -} - -void lrec_prepend(lrec_t* prec, char* key, char* value, char free_flags) { - lrece_t* pe = lrec_find_entry(prec, key); - - if (pe != NULL) { - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - pe->value = value; - pe->free_flags &= ~FREE_ENTRY_VALUE; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - } else { - pe = mlr_malloc_or_die(sizeof(lrece_t)); - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pe->quote_flags = 0; - - if (prec->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - prec->phead = pe; - prec->ptail = pe; - } else { - pe->pnext = prec->phead; - pe->pprev = NULL; - prec->phead->pprev = pe; - prec->phead = pe; - } - prec->field_count++; - } -} - -lrece_t* lrec_put_after(lrec_t* prec, lrece_t* pd, char* key, char* value, char free_flags) { - lrece_t* pe = lrec_find_entry(prec, key); - - if (pe != NULL) { // Overwrite - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - pe->value = value; - pe->free_flags &= ~FREE_ENTRY_VALUE; - if (free_flags & FREE_ENTRY_VALUE) - pe->free_flags |= FREE_ENTRY_VALUE; - } else { // Insert after specified entry - pe = mlr_malloc_or_die(sizeof(lrece_t)); - pe->key = key; - pe->value = value; - pe->free_flags = free_flags; - pe->quote_flags = 0; - - if (pd->pnext == NULL) { // Append at end of list - pd->pnext = pe; - pe->pprev = pd; - pe->pnext = NULL; - prec->ptail = pe; - - } else { - lrece_t* pf = pd->pnext; - pd->pnext = pe; - pf->pprev = pe; - pe->pprev = pd; - pe->pnext = pf; - } - - prec->field_count++; - } - return pe; -} - -// ---------------------------------------------------------------- -char* lrec_get(lrec_t* prec, char* key) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe != NULL) { - return pe->value; - } else { - return NULL; - } -} - -char* lrec_get_pff(lrec_t* prec, char* key, char** ppfree_flags) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe != NULL) { - *ppfree_flags = &pe->free_flags; - return pe->value; - } else { - *ppfree_flags = NULL; - return NULL; - } -} - -char* lrec_get_ext(lrec_t* prec, char* key, lrece_t** ppentry) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe != NULL) { - *ppentry = pe; - return pe->value; - } else { - *ppentry = NULL;; - return NULL; - } -} - -// ---------------------------------------------------------------- -lrece_t* lrec_get_pair_by_position(lrec_t* prec, int position) { // 1-up not 0-up - if (position <= 0 || position > prec->field_count) { - return NULL; - } - int sought_index = position - 1; - int found_index = 0; - lrece_t* pe = NULL; - for ( - found_index = 0, pe = prec->phead; - pe != NULL; - found_index++, pe = pe->pnext - ) { - if (found_index == sought_index) { - return pe; - } - } - fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); -} - -char* lrec_get_key_by_position(lrec_t* prec, int position) { // 1-up not 0-up - lrece_t* pe = lrec_get_pair_by_position(prec, position); - if (pe == NULL) { - return NULL; - } else { - return pe->key; - } -} - -char* lrec_get_value_by_position(lrec_t* prec, int position) { // 1-up not 0-up - lrece_t* pe = lrec_get_pair_by_position(prec, position); - if (pe == NULL) { - return NULL; - } else { - return pe->value; - } -} - -// ---------------------------------------------------------------- -void lrec_remove(lrec_t* prec, char* key) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe == NULL) - return; - - lrec_unlink(prec, pe); - - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key); - } - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - - free(pe); -} - -// ---------------------------------------------------------------- -void lrec_remove_by_position(lrec_t* prec, int position) { // 1-up not 0-up - lrece_t* pe = lrec_get_pair_by_position(prec, position); - if (pe == NULL) - return; - - lrec_unlink(prec, pe); - - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key); - } - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - - free(pe); -} - -// Before: -// "x" => "3" -// "y" => "4" <-- pold -// "z" => "5" <-- pnew -// -// Rename y to z -// -// After: -// "x" => "3" -// "z" => "4" -// -void lrec_rename(lrec_t* prec, char* old_key, char* new_key, int new_needs_freeing) { - - lrece_t* pold = lrec_find_entry(prec, old_key); - if (pold != NULL) { - lrece_t* pnew = lrec_find_entry(prec, new_key); - - if (pnew == NULL) { // E.g. rename "x" to "y" when "y" is not present - if (pold->free_flags & FREE_ENTRY_KEY) { - free(pold->key); - pold->key = new_key; - if (!new_needs_freeing) - pold->free_flags &= ~FREE_ENTRY_KEY; - } else { - pold->key = new_key; - if (new_needs_freeing) - pold->free_flags |= FREE_ENTRY_KEY; - } - - } else { // E.g. rename "x" to "y" when "y" is already present - if (pnew->free_flags & FREE_ENTRY_VALUE) { - free(pnew->value); - } - if (pold->free_flags & FREE_ENTRY_KEY) { - free(pold->key); - pold->free_flags &= ~FREE_ENTRY_KEY; - } - pold->key = new_key; - if (new_needs_freeing) - pold->free_flags |= FREE_ENTRY_KEY; - else - pold->free_flags &= ~FREE_ENTRY_KEY; - lrec_unlink(prec, pnew); - free(pnew); - } - } -} - -// Cases: -// 1. Rename field at position 3 from "x" to "y when "y" does not exist elsewhere in the srec -// 2. Rename field at position 3 from "x" to "y when "y" does exist elsewhere in the srec -// Note: position is 1-up not 0-up -void lrec_rename_at_position(lrec_t* prec, int position, char* new_key, int new_needs_freeing){ - lrece_t* pe = lrec_get_pair_by_position(prec, position); - if (pe == NULL) { - if (new_needs_freeing) { - free(new_key); - } - return; - } - - lrece_t* pother = lrec_find_entry(prec, new_key); - - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key); - } - pe->key = new_key; - if (new_needs_freeing) { - pe->free_flags |= FREE_ENTRY_KEY; - } else { - pe->free_flags &= ~FREE_ENTRY_KEY; - } - if (pother != NULL) { - lrec_unlink(prec, pother); - free(pother); - } -} - -// ---------------------------------------------------------------- -void lrec_move_to_head(lrec_t* prec, char* key) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe == NULL) - return; - - lrec_unlink(prec, pe); - lrec_link_at_head(prec, pe); -} - -void lrec_move_to_tail(lrec_t* prec, char* key) { - lrece_t* pe = lrec_find_entry(prec, key); - if (pe == NULL) - return; - - lrec_unlink(prec, pe); - lrec_link_at_tail(prec, pe); -} - -// ---------------------------------------------------------------- -// Simply rename the first (at most) n positions where n is the length of pnames. -// -// Possible complications: -// -// * pnames itself contains duplicates -- we require this as invariant-check from the caller since (for performance) -// we don't want to check this on every record processed. -// -// * pnames has length less than the current record and one of the new names becomes a clash with an existing name. -// Example: -// - Input record has names "a,b,c,d,e". -// - pnames is "d,x,f" -// - We then construct the invalid "d,x,f,d,e" -- we need to detect and unset the second 'd' field. - -void lrec_label(lrec_t* prec, slls_t* pnames_as_list, hss_t* pnames_as_set) { - lrece_t* pe = prec->phead; - sllse_t* pn = pnames_as_list->phead; - - // Process the labels list - for ( ; pe != NULL && pn != NULL; pe = pe->pnext, pn = pn->pnext) { - char* new_name = pn->value; - - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key); - } - pe->key = mlr_strdup_or_die(new_name);; - pe->free_flags |= FREE_ENTRY_KEY; - } - - // Process the remaining fields in the record beyond those affected by the new-labels list - for ( ; pe != NULL; ) { - char* name = pe->key; - if (hss_has(pnames_as_set, name)) { - lrece_t* pnext = pe->pnext; - if (pe->free_flags & FREE_ENTRY_KEY) { - free(pe->key); - } - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - lrec_unlink(prec, pe); - free(pe); - pe = pnext; - } else { - pe = pe->pnext; - } - } -} - -// ---------------------------------------------------------------- -void lrece_update_value(lrece_t* pe, char* new_value, int new_needs_freeing) { - if (pe == NULL) { - return; - } - if (pe->free_flags & FREE_ENTRY_VALUE) { - free(pe->value); - } - pe->value = new_value; - if (new_needs_freeing) - pe->free_flags |= FREE_ENTRY_VALUE; - else - pe->free_flags &= ~FREE_ENTRY_VALUE; -} - -// ---------------------------------------------------------------- -void lrec_unlink(lrec_t* prec, lrece_t* pe) { - if (pe == prec->phead) { - if (pe == prec->ptail) { - prec->phead = NULL; - prec->ptail = NULL; - } else { - prec->phead = pe->pnext; - pe->pnext->pprev = NULL; - } - } else { - pe->pprev->pnext = pe->pnext; - if (pe == prec->ptail) { - prec->ptail = pe->pprev; - } else { - pe->pnext->pprev = pe->pprev; - } - } - prec->field_count--; -} - -void lrec_unlink_and_free(lrec_t* prec, lrece_t* pe) { - if (pe->free_flags & FREE_ENTRY_KEY) - free(pe->key); - if (pe->free_flags & FREE_ENTRY_VALUE) - free(pe->value); - lrec_unlink(prec, pe); - free(pe); -} - -// ---------------------------------------------------------------- -static void lrec_link_at_head(lrec_t* prec, lrece_t* pe) { - - if (prec->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - prec->phead = pe; - prec->ptail = pe; - } else { - // [b,c,d] + a - pe->pprev = NULL; - pe->pnext = prec->phead; - prec->phead->pprev = pe; - prec->phead = pe; - } - prec->field_count++; -} - -static void lrec_link_at_tail(lrec_t* prec, lrece_t* pe) { - - if (prec->phead == NULL) { - pe->pprev = NULL; - pe->pnext = NULL; - prec->phead = pe; - prec->ptail = pe; - } else { - pe->pprev = prec->ptail; - pe->pnext = NULL; - prec->ptail->pnext = pe; - prec->ptail = pe; - } - prec->field_count++; -} - -// ---------------------------------------------------------------- -void lrec_dump(lrec_t* prec) { - lrec_dump_fp(prec, stdout); -} -void lrec_dump_fp(lrec_t* prec, FILE* fp) { - if (prec == NULL) { - fprintf(fp, "NULL\n"); - return; - } - fprintf(fp, "field_count = %d\n", prec->field_count); - fprintf(fp, "| phead: %16p | ptail %16p\n", prec->phead, prec->ptail); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - const char* key_string = (pe == NULL) ? "none" : - pe->key == NULL ? "null" : - pe->key; - const char* value_string = (pe == NULL) ? "none" : - pe->value == NULL ? "null" : - pe->value; - fprintf(fp, - "| prev: %16p curr: %16p next: %16p | key: %12s | value: %12s |\n", - pe->pprev, pe, pe->pnext, - key_string, value_string); - } -} - -void lrec_dump_titled(char* msg, lrec_t* prec) { - printf("%s:\n", msg); - lrec_dump(prec); - printf("\n"); -} - -void lrec_pointer_dump(lrec_t* prec) { - printf("prec %p\n", prec); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - printf(" pe %p k %p v %p\n", pe, pe->key, pe->value); - } -} - -// ---------------------------------------------------------------- -static void lrec_unbacked_free(lrec_t* prec) { -} - -static void lrec_free_single_line_backing(lrec_t* prec) { - free(prec->psingle_line); -} - -static void lrec_free_csv_backing(lrec_t* prec) { - free(prec->psingle_line); -} - -static void lrec_free_multiline_backing(lrec_t* prec) { - slls_free(prec->pxtab_lines); -} - -// ================================================================ - -// ---------------------------------------------------------------- -// Note on efficiency: -// -// I was imagining/hoping that strcmp has additional optimizations (e.g. -// hand-coded in assembly), so I don't *want* to re-implement it (i.e. I -// probably can't outperform it). -// -// But actual experiments show I get about a 1-2% performance gain doing it -// myself (on my particular system). - -static lrece_t* lrec_find_entry(lrec_t* prec, char* key) { -#if 1 - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - char* pa = pe->key; - char* pb = key; - while (*pa && *pb && (*pa == *pb)) { - pa++; - pb++; - } - if (*pa == 0 && *pb == 0) - return pe; - } - return NULL; -#else - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) - if (streq(pe->key, key)) - return pe; - return NULL; -#endif -} - -// ---------------------------------------------------------------- -lrec_t* lrec_literal_1(char* k1, char* v1) { - lrec_t* prec = lrec_unbacked_alloc(); - lrec_put(prec, k1, v1, NO_FREE); - return prec; -} - -lrec_t* lrec_literal_2(char* k1, char* v1, char* k2, char* v2) { - lrec_t* prec = lrec_unbacked_alloc(); - lrec_put(prec, k1, v1, NO_FREE); - lrec_put(prec, k2, v2, NO_FREE); - return prec; -} - -lrec_t* lrec_literal_3(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3) { - lrec_t* prec = lrec_unbacked_alloc(); - lrec_put(prec, k1, v1, NO_FREE); - lrec_put(prec, k2, v2, NO_FREE); - lrec_put(prec, k3, v3, NO_FREE); - return prec; -} - -lrec_t* lrec_literal_4(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3, char* k4, char* v4) { - lrec_t* prec = lrec_unbacked_alloc(); - lrec_put(prec, k1, v1, NO_FREE); - lrec_put(prec, k2, v2, NO_FREE); - lrec_put(prec, k3, v3, NO_FREE); - lrec_put(prec, k4, v4, NO_FREE); - return prec; -} - -void lrec_print(lrec_t* prec) { - FILE* output_stream = stdout; - char ors = '\n'; - char ofs = ','; - char ops = '='; - if (prec == NULL) { - fputs("NULL", output_stream); - fputc(ors, output_stream); - return; - } - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputc(ofs, output_stream); - fputs(pe->key, output_stream); - fputc(ops, output_stream); - fputs(pe->value, output_stream); - nf++; - } - fputc(ors, output_stream); -} - -char* lrec_sprint(lrec_t* prec, char* ors, char* ofs, char* ops) { - string_builder_t* psb = sb_alloc(SB_ALLOC_LENGTH); - if (prec == NULL) { - sb_append_string(psb, "NULL"); - } else { - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - sb_append_string(psb, ofs); - sb_append_string(psb, pe->key); - sb_append_string(psb, ops); - sb_append_string(psb, pe->value); - nf++; - } - sb_append_string(psb, ors); - } - char* rv = sb_finish(psb); - sb_free(psb); - return rv; -} diff --git a/c/containers/lrec.h b/c/containers/lrec.h deleted file mode 100644 index 634b49d3d..000000000 --- a/c/containers/lrec.h +++ /dev/null @@ -1,190 +0,0 @@ -// ================================================================ -// This is a hashless implementation of insertion-ordered key-value pairs for -// Miller's fundamental record data structure. It implements the same -// interface as the hashed version (see lhmss.h). -// -// Design: -// -// * It keeps a doubly-linked list of key-value pairs. -// * No hash functions are computed when the map is written to or read from. -// * Gets are implemented by sequential scan through the list: given a key, -// the key-value pairs are scanned through until a match is (or is not) found. -// * Performance improvement of 10-15% percent over lhmss is found (for test data). -// -// Motivation: -// -// * The use case for records in Miller is that *all* fields are read from -// strings & written to strings (split/join), while only *some* fields are -// operated on. -// -// * Meanwhile there are few repeated accesses to a given record: the -// access-to-construct ratio is quite low for Miller data records. Miller -// instantiates thousands, millions, billions of records (depending on the -// input data) but accesses each record only once per mapping operation. -// (This is in contrast to accumulator hashmaps which are repeatedly accessed -// during a stats run.) -// -// * The hashed impl computes hashsums for *all* fields whether operated on or not, -// for the benefit of the *few* fields looked up during the mapping operation. -// -// * The hashless impl only keeps string pointers. Lookups are done at runtime -// doing prefix search on the key names. Assuming field names are distinct, -// this is just a few char-ptr accesses which (in experiments) turn out to -// offer about a 10-15% performance improvement. -// -// * Added benefit: the field-rename operation (preserving field order) becomes -// trivial. -// -// Notes: -// * null key is not supported. -// * null value is supported. -// ================================================================ - -#ifndef LREC_H -#define LREC_H - -#include "lib/free_flags.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/hss.h" -#include "containers/header_keeper.h" - -#define FIELD_QUOTED_ON_INPUT 0x02 - -struct _lrec_t; // forward reference -typedef struct _lrec_t lrec_t; - -typedef void lrec_free_func_t(lrec_t* prec); - -// ---------------------------------------------------------------- -typedef struct _lrece_t { - char* key; - char* value; - // These indicate whether the key/value should be freed on lrec_free(). - // Affirmative example: key/value is strdup of something. - // Negative example: key/value are pointers into a line the memory - // management of which is separately managed. - // Another negative example: key/value is a string literal, e.g. "". - char free_flags; - char quote_flags; - - struct _lrece_t *pprev; - struct _lrece_t *pnext; -} lrece_t; - -struct _lrec_t { - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int field_count; - lrece_t* phead; - lrece_t* ptail; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // See comments above free_flags. Used to track a mallocked pointer to be - // freed at lrec_free(). - - // E.g. for NIDX, DKVP, and CSV formats (header handled separately in the - // latter case). - char* psingle_line; - - // For XTAB format. - slls_t* pxtab_lines; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Format-dependent virtual-function pointer: - lrec_free_func_t* pfree_backing_func; -}; - -// ---------------------------------------------------------------- -lrec_t* lrec_unbacked_alloc(); -lrec_t* lrec_dkvp_alloc(char* line); -lrec_t* lrec_nidx_alloc(char* line); -lrec_t* lrec_csvlite_alloc(char* data_line); -lrec_t* lrec_csv_alloc(char* data_line); -lrec_t* lrec_xtab_alloc(slls_t* pxtab_lines); - -void lrec_clear(lrec_t* prec); -void lrec_free(lrec_t* prec); -lrec_t* lrec_copy(lrec_t* pinrec); - -// The only difference between lrec_put and lrec_prepend is that the latter -// adds to the end of the record, while the former adds to the beginning. -// -// For both, the key/value respectively will be freed by lrec_free if the -// corresponding bits are set in the free_flags. -// -// * If a string literal or other non-allocated pointer (e.g. mmapped memory -// from a file reader) is passed in, the free flag should not be set. -// -// * If dynamically allocated pointers are passed in, then either: -// -// o The respective free_flag(s) should be set and the caller should be sure -// not to also free (else, there will be heap corruption due to -// double-free), or -// -// o The respective free_flag(s) should not be set and the caller should -// free the memory (else, there will be a memory leak). -void lrec_put(lrec_t* prec, char* key, char* value, char free_flags); -void lrec_put_ext(lrec_t* prec, char* key, char* value, char free_flags, char quote_flags); -// Like lrec_put: if key is present, modify value. But if not, add new field at start of record, not at end. -void lrec_prepend(lrec_t* prec, char* key, char* value, char free_flags); -// Like lrec_put: if key is present, modify value. But if not, add new field after specified entry, not at end. -// Returns a pointer to the added/modified node. -lrece_t* lrec_put_after(lrec_t* prec, lrece_t* pd, char* key, char* value, char free_flags); - -char* lrec_get(lrec_t* prec, char* key); -lrece_t* lrec_get_pair_by_position(lrec_t* prec, int position); // 1-up not 0-up -char* lrec_get_key_by_position(lrec_t* prec, int position); // 1-up not 0-up -char* lrec_get_value_by_position(lrec_t* prec, int position); // 1-up not 0-up - -// This returns a pointer to the lrec's free-flags so that the caller can do ownership-transfer -// of about-to-be-removed key-value pairs. -char* lrec_get_pff(lrec_t* prec, char* key, char** ppfree_flags); - -// This returns a pointer to the entry so the caller can update it directly without needing -// to do another field-scan on subsequent lrec_put etc. This is a performance optimization; -// it also allows mlr nest --explode to do explode-in-place rather than explode-at-end. -char* lrec_get_ext(lrec_t* prec, char* key, lrece_t** ppentry); - -void lrec_remove(lrec_t* prec, char* key); -void lrec_remove_by_position(lrec_t* prec, int position); // 1-up not 0-up -void lrec_rename(lrec_t* prec, char* old_key, char* new_key, int new_needs_freeing); -void lrec_rename_at_position(lrec_t* prec, int position, char* new_key, int new_needs_freeing); // 1-up not 0-up -void lrec_move_to_head(lrec_t* prec, char* key); -void lrec_move_to_tail(lrec_t* prec, char* key); -// Renames the first n fields where n is the length of pnames. -// The hash-set argument is for efficient dedupe. -// Assumes as a precondition that pnames_as_list has no duplicates. -// If the new labels include any field names existing later on in the record, those are unset. -// For example, input record "a=1,b=2,c=3,d=4,e=5" with labels "d,x,f" results in output record "d=1,x=2,f=3,e=5". -void lrec_label(lrec_t* prec, slls_t* pnames_as_list, hss_t* pnames_as_set); - -void lrece_update_value(lrece_t* pe, char* new_value, int new_needs_freeing); - -// For lrec-internal use: -void lrec_unlink(lrec_t* prec, lrece_t* pe); -// May be used for removing fields from a record while iterating over it: -void lrec_unlink_and_free(lrec_t* prec, lrece_t* pe); - -void lrec_print(lrec_t* prec); -void lrec_dump(lrec_t* prec); -void lrec_dump_fp(lrec_t* prec, FILE* fp); -void lrec_dump_titled(char* msg, lrec_t* prec); -void lrec_pointer_dump(lrec_t* prec); -// The caller should free the return value -char* lrec_sprint(lrec_t* prec, char* ors, char* ofs, char* ops); - -// NIDX data are keyed by one-up field index which is not explicitly contained -// in the file, e.g. line "a b c" splits to an lrec with "{"1" => "a", "2" => -// "b", "3" => "c"}. This function creates the keys, avoiding redundant memory -// allocation for most-used keys such as "1", "2", ... up to 100 or so. In case -// of large idx, free_flags & FREE_ENTRY_KEY will indicate that the key -// was dynamically allocated. -char* low_int_to_string(int idx, char* pfree_flags); - -// For unit-test. -lrec_t* lrec_literal_1(char* k1, char* v1); -lrec_t* lrec_literal_2(char* k1, char* v1, char* k2, char* v2); -lrec_t* lrec_literal_3(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3); -lrec_t* lrec_literal_4(char* k1, char* v1, char* k2, char* v2, char* k3, char* v3, char* k4, char* v4); - -#endif // LREC_H diff --git a/c/containers/mixutil.c b/c/containers/mixutil.c deleted file mode 100644 index b2ee4e2ce..000000000 --- a/c/containers/mixutil.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/mixutil.h" - -// ---------------------------------------------------------------- -// Makes a list with values pointing to the lrec's keys. slls_free() will -// respect that and not corrupt the lrec. However, the slls values will be -// invalid after the lrec is freed. - -slls_t* mlr_reference_keys_from_record(lrec_t* prec) { - slls_t* plist = slls_alloc(); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - slls_append_no_free(plist, pe->key); - } - return plist; -} - -slls_t* mlr_copy_keys_from_record(lrec_t* prec) { - slls_t* plist = slls_alloc(); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - slls_append_with_free(plist, mlr_strdup_or_die(pe->key)); - } - return plist; -} - -slls_t* mlr_reference_values_from_record(lrec_t* prec) { - slls_t* plist = slls_alloc(); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - slls_append_no_free(plist, pe->value); - } - return plist; -} - -slls_t* mlr_reference_keys_from_record_except(lrec_t* prec, lrece_t* px) { - slls_t* plist = slls_alloc(); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (pe != px) - slls_append_no_free(plist, pe->key); - } - return plist; -} - -slls_t* mlr_reference_values_from_record_except(lrec_t* prec, lrece_t* px) { - slls_t* plist = slls_alloc(); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (pe != px) - slls_append_no_free(plist, pe->value); - } - return plist; -} - -// ---------------------------------------------------------------- -// Makes a list with values pointing into the lrec's values. slls_free() will -// respect that and not corrupt the lrec. However, the slls values will be -// invalid after the lrec is freed. - -slls_t* mlr_reference_selected_values_from_record(lrec_t* prec, slls_t* pselected_field_names) { - slls_t* pvalue_list = slls_alloc(); - for (sllse_t* pe = pselected_field_names->phead; pe != NULL; pe = pe->pnext) { - char* selected_field_name = pe->value; - char* value = lrec_get(prec, selected_field_name); - if (value == NULL) { - slls_free(pvalue_list); - return NULL; - } else { - slls_append_no_free(pvalue_list, value); - } - } - return pvalue_list; -} - -// Makes an array with values pointing into the lrec's values. -// string_array_free() will respect that and not corrupt the lrec. However, -// the array's values will be invalid after the lrec is freed. - -void mlr_reference_values_from_record_into_string_array(lrec_t* prec, string_array_t* pselected_field_names, - string_array_t* pvalues) -{ - MLR_INTERNAL_CODING_ERROR_IF(pselected_field_names->length != pvalues->length); - pvalues->strings_need_freeing = FALSE; - for (int i = 0; i < pselected_field_names->length; i++) { - char* selected_field_name = pselected_field_names->strings[i]; - if (selected_field_name == NULL) { - pvalues->strings[i] = NULL; - } else { - pvalues->strings[i] = lrec_get(prec, selected_field_name); - } - - } -} - -int record_has_all_keys(lrec_t* prec, slls_t* pselected_field_names) { - for (sllse_t* pe = pselected_field_names->phead; pe != NULL; pe = pe->pnext) { - char* selected_field_name = pe->value; - char* value = lrec_get(prec, selected_field_name); - if (value == NULL) - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -lhmss_t* mlr_reference_key_value_pairs_from_regex_names(lrec_t* prec, regex_t* pregexes, int num_regexes, - int invert_matches) -{ - lhmss_t* pmap = lhmss_alloc(); - - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - int matches_any = FALSE; - for (int i = 0; i < num_regexes; i++) { - regex_t* pregex = &pregexes[i]; - if (regmatch_or_die(pregex, pe->key, 0, NULL)) { - matches_any = TRUE; - break; - } - } - if (matches_any ^ invert_matches) { - lhmss_put(pmap, pe->key, pe->value, NO_FREE); - } - } - - return pmap; -} - -// ---------------------------------------------------------------- -hss_t* hss_from_slls(slls_t* plist) { - hss_t* pset = hss_alloc(); - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) - hss_add(pset, pe->value); - return pset; -} - -// ---------------------------------------------------------------- -void lrec_print_list(sllv_t* plist) { - for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { - lrec_print(pe->pvvalue); - } -} - -void lrec_print_list_with_prefix(sllv_t* plist, char* prefix) { - if (plist == NULL) { - printf("%s NULL", prefix); - } else { - for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { - printf("%s", prefix); - lrec_print(pe->pvvalue); - } - } -} - -// ---------------------------------------------------------------- -int slls_lrec_compare_lexically( - slls_t* plist, - lrec_t* prec, - slls_t* pkeys) -{ - sllse_t* pe = plist->phead; - sllse_t* pf = pkeys->phead; - while (TRUE) { - if (pe == NULL && pf == NULL) - return 0; - if (pe == NULL) - return 1; - if (pf == NULL) - return -1; - - char* precval = lrec_get(prec, pf->value); - if (precval == NULL) { - return -1; - } else { - int rc = strcmp(pe->value, precval); - if (rc != 0) - return rc; - } - - pe = pe->pnext; - pf = pf->pnext; - } -} - -// ---------------------------------------------------------------- -int lrec_slls_compare_lexically( - lrec_t* prec, - slls_t* pkeys, - slls_t* plist) -{ - return -slls_lrec_compare_lexically(plist, prec, pkeys); -} - -// ---------------------------------------------------------------- -int lrec_keys_equal_list( - lrec_t* prec, - slls_t* plist) -{ - lrece_t* pe = prec->phead; - sllse_t* pf = plist->phead; - while (TRUE) { - if (pe == NULL && pf == NULL) - return TRUE; - if (pe == NULL || pf == NULL) - return FALSE; - if (!streq(pe->key, pf->value)) - return FALSE; - pe = pe->pnext; - pf = pf->pnext; - } -} diff --git a/c/containers/mixutil.h b/c/containers/mixutil.h deleted file mode 100644 index d08e0b5db..000000000 --- a/c/containers/mixutil.h +++ /dev/null @@ -1,62 +0,0 @@ -// ================================================================ -// Functions involving more than one container type -// ================================================================ - -#ifndef MIXUTIL_H -#define MIXUTIL_H -#include "containers/lrec.h" -#include "containers/slls.h" -#include "containers/hss.h" -#include "containers/lhmss.h" -#include "lib/string_array.h" -#include "lib/mlrregex.h" - -// Makes a list with values pointing to the lrec's keys. slls_free() will respect that and not corrupt the lrec. -// However, the slls values will be invalid after the lrec is freed. -slls_t* mlr_reference_keys_from_record(lrec_t* prec); -// Makes a list with values pointing to the lrec's values. slls_free() will respect that and not corrupt the lrec. -// However, the slls values will be invalid after the lrec is freed. -slls_t* mlr_reference_values_from_record(lrec_t* prec); - -slls_t* mlr_reference_keys_from_record_except(lrec_t* prec, lrece_t* px); -slls_t* mlr_reference_values_from_record_except(lrec_t* prec, lrece_t* px); - -// Copies data; no referencing concerns. -slls_t* mlr_copy_keys_from_record(lrec_t* prec); - -// Makes a list with values pointing into the lrec's values. slls_free() will -// respect that and not corrupt the lrec. However, the slls values will be -// invalid after the lrec is freed. -slls_t* mlr_reference_selected_values_from_record(lrec_t* prec, slls_t* pselected_field_names); -void mlr_reference_values_from_record_into_string_array(lrec_t* prec, string_array_t* pselected_field_names, - string_array_t* pvalues); -int record_has_all_keys(lrec_t* prec, slls_t* pselected_field_names); - -lhmss_t* mlr_reference_key_value_pairs_from_regex_names(lrec_t* prec, regex_t* pregexes, int num_regexes, - int invert_matches); - -// Copies data; no referencing concerns. -hss_t* hss_from_slls(slls_t* plist); - -// Prints a list of lrecs using lrec_print. -void lrec_print_list(sllv_t* plist); -void lrec_print_list_with_prefix(sllv_t* plist, char* prefix); - -// Same as -// slls_t* prec_values = mlr_reference_selected_values_from_record(prec, pkeys); -// return slls_compare_lexically(plist, prec_values); -// but without the unnecessary copy. -int slls_lrec_compare_lexically( - slls_t* plist, - lrec_t* prec, - slls_t* pkeys); -int lrec_slls_compare_lexically( - lrec_t* prec, - slls_t* pkeys, - slls_t* plist); - -int lrec_keys_equal_list( - lrec_t* prec, - slls_t* plist); - -#endif // MIXUTIL_H diff --git a/c/containers/mlhmmv.c b/c/containers/mlhmmv.c deleted file mode 100644 index ccfe677fa..000000000 --- a/c/containers/mlhmmv.c +++ /dev/null @@ -1,1594 +0,0 @@ -// ================================================================ -// Array-only (open addressing) multi-level hash map, with linear probing for collisions. -// All keys, and terminal-level values, are mlrvals. -// -// Notes: -// * null key is not supported. -// * null value is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#include -#include -#include - -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/mlhmmv.h" -#include "lib/mvfuncs.h" - -// ================================================================ -// Allow compile-time override, e.g using gcc -D. - -#ifndef LOAD_FACTOR -#define LOAD_FACTOR 0.7 -#endif - -#ifndef ENLARGEMENT_FACTOR -#define ENLARGEMENT_FACTOR 2 -#endif - -#define OCCUPIED 0xa4 -#define DELETED 0xb8 -#define EMPTY 0xce - -// ================================================================ -static int mlhmmv_hash_func(mv_t* plevel_key); -static void json_decimal_print (FILE* ostream, char* s, double parsed); -static void json_print_string_escaped(FILE* ostream, char* s); - -// ---------------------------------------------------------------- -static void mlhmmv_level_init(mlhmmv_level_t *plevel, int length); - -// ---------------------------------------------------------------- -static int mlhmmv_level_find_index_for_key(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pideal_index); - -static mlhmmv_level_entry_t* mlhmmv_level_look_up_and_ref_entry( - mlhmmv_level_t* plevel, sllmve_t* prestkeys, int* perror); - -static mlhmmv_level_entry_t* mlhmmv_level_get_next_level_entry(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pindex); -static mlhmmv_xvalue_t* mlhmmv_level_get_next_level_xvalue(mlhmmv_level_t* plevel, mv_t* plevel_key); - -static mlhmmv_level_t* mlhmmv_level_ref_or_create(mlhmmv_level_t* plevel, sllmve_t* prest_keys); -static mlhmmv_level_t* mlhmmv_level_get_or_create_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys); - -static void mlhmmv_level_enlarge(mlhmmv_level_t* plevel); -static void mlhmmv_level_move(mlhmmv_level_t* plevel, mv_t* plevel_key, mlhmmv_xvalue_t* plevel_value); - -static void mlhmmv_level_put_xvalue_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue); -static void mlhmmv_level_put_terminal_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value); - -static void mlhmmv_level_to_lrecs_across_records( - mlhmmv_level_t* plevel, - char* prefix, - sllmve_t* prestnames, - lrec_t* ptemplate, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator); - -static void mlhmmv_level_to_lrec_within_record( - mlhmmv_level_t* plevel, - char* prefix, - lrec_t* poutrec, - int do_full_prefixing, - char* flatten_separator); - -static void mlhhmv_levels_to_lrecs_lashed_across_records( - mlhmmv_level_t** plevels, - char** prefixes, - int num_levels, - sllmve_t* prestnames, - lrec_t* ptemplate, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator); - -static void mlhhmv_levels_to_lrecs_lashed_within_records( - mlhmmv_level_t** pplevels, - char** prefixes, - int num_levels, - lrec_t* poutrec, - int do_full_prefixing, - char* flatten_separator); - -static void mlhmmv_level_print_single_line(mlhmmv_level_t* plevel, int depth, - int do_final_comma, int quote_keys_always, int quote_values_always, - FILE* ostream); - -// ---------------------------------------------------------------- -static void mlhmmv_root_put_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mlhmmv_xvalue_t* pvalue); - -// ================================================================ -typedef int mlhmmv_typed_hash_func(mv_t* pa); -static int mlhmmv_string_hash_func(mv_t* pa) { - return mlr_string_hash_func(pa->u.strv); -} -static int mlhmmv_int_hash_func(mv_t* pa) { - return pa->u.intv; -} -static int mlhmmv_other_hash_func(mv_t* pa) { - fprintf(stderr, "%s: map keys must be of type %s or %s; got %s.\n", - MLR_GLOBALS.bargv0, - mt_describe_type(MT_STRING), - mt_describe_type(MT_INT), - mt_describe_type(pa->type)); - exit(1); -} -static mlhmmv_typed_hash_func* mlhmmv_hash_func_dispositions[MT_DIM] = { - /*ERROR*/ mlhmmv_other_hash_func, - /*ABSENT*/ mlhmmv_other_hash_func, - /*EMPTY*/ mlhmmv_other_hash_func, - /*STRING*/ mlhmmv_string_hash_func, - /*INT*/ mlhmmv_int_hash_func, - /*FLOAT*/ mlhmmv_other_hash_func, - /*BOOL*/ mlhmmv_other_hash_func, -}; -static int mlhmmv_hash_func(mv_t* pa) { - return mlhmmv_hash_func_dispositions[pa->type](pa); -} - -// ================================================================ -void mlhmmv_print_terminal(mv_t* pmv, int quote_keys_always, int quote_values_always, - FILE* ostream) -{ - char* level_value_string = mv_alloc_format_val(pmv); - if (quote_values_always) { - json_print_string_escaped(ostream, level_value_string); - } else if (pmv->type == MT_STRING) { - double parsed; - if (mlr_try_float_from_string(level_value_string, &parsed)) { - json_decimal_print(ostream, level_value_string, parsed); - } else if (streq(level_value_string, "true") || streq(level_value_string, "false")) { - fprintf(ostream, "%s", level_value_string); - } else { - json_print_string_escaped(ostream, level_value_string); - } - } else { - fprintf(ostream, "%s", level_value_string); - } - free(level_value_string); -} - -// 0.123 is valid JSON; .123 is not. Meanwhile Miller is a format-converter tool -// so if there is perfectly legitimate CSV/DKVP/etc. data to be JSON-formatted, -// we make it JSON-compliant. -// -// Precondition: the caller has already checked that the string represents a number. -static void json_decimal_print(FILE* ostream, char* s, double parsed) { - if (s[0] == '.') { - fprintf(ostream, "0%s", s); - } else if (s[0] == '-' && s[1] == '.') { - fprintf(ostream, "-0.%s", &s[2]); - } else { - fprintf(ostream, "%s", s); - } -} - -static void json_print_string_escaped(FILE* ostream, char* s) { - fputc('"', ostream); - for (char* p = s; *p; p++) { - char c = *p; - switch (c) { - case '"': - fputc('\\', ostream); - fputc('"', ostream); - break; - case '\\': - fputc('\\', ostream); - fputc('\\', ostream); - break; - case '\n': - fputc('\\', ostream); - fputc('n', ostream); - break; - case '\r': - fputc('\\', ostream); - fputc('r', ostream); - break; - case '\t': - fputc('\\', ostream); - fputc('t', ostream); - break; - case '\b': - fputc('\\', ostream); - fputc('b', ostream); - break; - case '\f': - fputc('\\', ostream); - fputc('f', ostream); - break; - default: - fputc(c, ostream); - break; - } - } - fputc('"', ostream); -} - -// ================================================================ -mlhmmv_xvalue_t mlhmmv_xvalue_alloc_empty_map() { - mlhmmv_xvalue_t xval = (mlhmmv_xvalue_t) { - .is_terminal = FALSE, - .terminal_mlrval= mv_absent(), - .pnext_level = mlhmmv_level_alloc() - }; - return xval; -} - -// ---------------------------------------------------------------- -void mlhmmv_xvalue_reset(mlhmmv_xvalue_t* pxvalue) { - pxvalue->is_terminal = TRUE; - pxvalue->terminal_mlrval = mv_absent(); - pxvalue->pnext_level = NULL; -} - -// ---------------------------------------------------------------- -mlhmmv_xvalue_t mlhmmv_xvalue_copy(mlhmmv_xvalue_t* pvalue) { - if (pvalue->is_terminal) { - return (mlhmmv_xvalue_t) { - .is_terminal = TRUE, - .terminal_mlrval = mv_copy(&pvalue->terminal_mlrval), - .pnext_level = NULL, - }; - - } else { - mlhmmv_level_t* psrc_level = pvalue->pnext_level; - mlhmmv_level_t* pdst_level = mlr_malloc_or_die(sizeof(mlhmmv_level_t)); - - mlhmmv_level_init(pdst_level, MLHMMV_INITIAL_ARRAY_LENGTH); - - for ( - mlhmmv_level_entry_t* psubentry = psrc_level->phead; - psubentry != NULL; - psubentry = psubentry->pnext) - { - mlhmmv_xvalue_t next_value = mlhmmv_xvalue_copy(&psubentry->level_xvalue); - mlhmmv_level_put_xvalue_singly_keyed(pdst_level, &psubentry->level_key, &next_value); - } - - return (mlhmmv_xvalue_t) { - .is_terminal = FALSE, - .terminal_mlrval = mv_absent(), - .pnext_level = pdst_level, - }; - } -} - -// ---------------------------------------------------------------- -void mlhmmv_xvalue_free(mlhmmv_xvalue_t* pxvalue) { - if (pxvalue->is_terminal) { - mv_free(&pxvalue->terminal_mlrval); - } else if (pxvalue->pnext_level != NULL) { - mlhmmv_level_free(pxvalue->pnext_level); - pxvalue->pnext_level = NULL; - } -} - -// ---------------------------------------------------------------- -char* mlhmmv_xvalue_describe_type_simple(mlhmmv_xvalue_t* pxvalue) { - if (pxvalue->is_terminal) { - return mt_describe_type_simple(pxvalue->terminal_mlrval.type); - } else { - return "map"; - } -} - -sllv_t* mlhmmv_xvalue_copy_keys_indexed(mlhmmv_xvalue_t* pmvalue, sllmv_t* pmvkeys) { // xxx code dedupe - int error; - if (pmvkeys == NULL || pmvkeys->length == 0) { - return mlhmmv_xvalue_copy_keys_nonindexed(pmvalue); - } else if (pmvalue->is_terminal) { // xxx copy this check up to oosvar case too - return sllv_alloc(); - } else { - mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry(pmvalue->pnext_level, - pmvkeys->phead, &error); - if (pfromentry != NULL) { - return mlhmmv_xvalue_copy_keys_nonindexed(&pfromentry->level_xvalue); - } else { - return sllv_alloc(); - } - } -} - -sllv_t* mlhmmv_xvalue_copy_keys_nonindexed(mlhmmv_xvalue_t* pvalue) { - sllv_t* pkeys = sllv_alloc(); - - if (!pvalue->is_terminal) { - mlhmmv_level_t* pnext_level = pvalue->pnext_level; - for (mlhmmv_level_entry_t* pe = pnext_level->phead; pe != NULL; pe = pe->pnext) { - mv_t* p = mv_alloc_copy(&pe->level_key); - sllv_append(pkeys, p); - } - } - - return pkeys; -} - -// ---------------------------------------------------------------- -void mlhmmv_xvalues_to_lrecs_lashed(mlhmmv_xvalue_t** ptop_values, int num_submaps, mv_t* pbasenames, sllmv_t* pnames, - sllv_t* poutrecs, int do_full_prefixing, char* flatten_separator) -{ - - // First is primary and rest are lashed to it (lookups with same keys as primary). - if (ptop_values[0] == NULL) { - // No such entry in the mlhmmv results in no output records - } else if (ptop_values[0]->is_terminal && mv_is_present(&ptop_values[0]->terminal_mlrval)) { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (int i = 0; i < num_submaps; i++) { - // E.g. '@v = 3' at the top level of the mlhmmv. - if (ptop_values[i]->is_terminal && mv_is_present(&ptop_values[i]->terminal_mlrval)) { - lrec_put(poutrec, - mv_alloc_format_val(&pbasenames[i]), - mv_alloc_format_val(&ptop_values[i]->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - sllv_append(poutrecs, poutrec); - } else { - // E.g. '@v = {...}' at the top level of the map, where the map is an oosvar - // submap keyed by oosvar-name 'v', or a localvar value, or a map literal. This - // needs to be flattened down to an lrec which is a list of key-value pairs. We - // recursively invoke mlhhmv_levels_to_lrecs_lashed_across_records for each of the - // name-list entries, one map level deeper each call, then from there invoke - // mlhhmv_levels_to_lrecs_lashed_within_records on any remaining map levels. - lrec_t* ptemplate = lrec_unbacked_alloc(); - - mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_submaps * sizeof(mlhmmv_level_t*)); - char** oosvar_names = mlr_malloc_or_die(num_submaps * sizeof(char*)); - for (int i = 0; i < num_submaps; i++) { - if (ptop_values[i] == NULL || ptop_values[i]->is_terminal) { - ppnext_levels[i] = NULL; - oosvar_names[i] = NULL; - } else { - ppnext_levels[i] = ptop_values[i]->pnext_level; - oosvar_names[i] = mv_alloc_format_val(&pbasenames[i]); - } - } - - mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, oosvar_names, num_submaps, - pnames->phead, ptemplate, poutrecs, do_full_prefixing, flatten_separator); - - for (int i = 0; i < num_submaps; i++) { - free(oosvar_names[i]); - } - free(oosvar_names); - free(ppnext_levels); - - lrec_free(ptemplate); - } -} - -// ================================================================ -mlhmmv_level_t* mlhmmv_level_alloc() { - mlhmmv_level_t* plevel = mlr_malloc_or_die(sizeof(mlhmmv_level_t)); - mlhmmv_level_init(plevel, MLHMMV_INITIAL_ARRAY_LENGTH); - return plevel; -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_init(mlhmmv_level_t *plevel, int length) { - plevel->num_occupied = 0; - plevel->num_freed = 0; - plevel->array_length = length; - - plevel->entries = (mlhmmv_level_entry_t*)mlr_malloc_or_die(sizeof(mlhmmv_level_entry_t) * length); - // Don't do mlhmmv_level_entry_clear() of all entries at init time, since this has a - // drastic effect on the time needed to construct an empty map (and miller - // constructs an awful lot of those). The attributes there are don't-cares - // if the corresponding entry state is EMPTY. They are set on put, and - // mutated on remove. - - plevel->states = (mlhmmv_level_entry_state_t*)mlr_malloc_or_die(sizeof(mlhmmv_level_entry_state_t) * length); - memset(plevel->states, EMPTY, length); - - plevel->phead = NULL; - plevel->ptail = NULL; -} - -// ---------------------------------------------------------------- -void mlhmmv_level_free(mlhmmv_level_t* plevel) { - for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { - mv_free(&pentry->level_key); - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - } else { - mlhmmv_level_free(pentry->level_xvalue.pnext_level); - } - } - free(plevel->entries); - free(plevel->states); - plevel->entries = NULL; - plevel->num_occupied = 0; - plevel->num_freed = 0; - plevel->array_length = 0; - free(plevel); -} - -// ---------------------------------------------------------------- -void mlhmmv_level_clear(mlhmmv_level_t* plevel) { - if (plevel->phead == NULL) - return; - - for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - } else { - mlhmmv_level_free(pentry->level_xvalue.pnext_level); - } - mv_free(&pentry->level_key); - } - plevel->num_occupied = 0; - plevel->num_freed = 0; - plevel->phead = NULL; - plevel->ptail = NULL; - - memset(plevel->states, EMPTY, plevel->array_length); -} - -// ---------------------------------------------------------------- -int mlhmmv_level_has_key(mlhmmv_level_t* plevel, mv_t* plevel_key) { - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - if (plevel->states[index] == OCCUPIED) - return TRUE; - else if (plevel->states[index] == EMPTY) - return FALSE; - else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -// Returns >=0 for where the key is *or* should go (end of chain). - -static int mlhmmv_level_find_index_for_key(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pideal_index) { - int hash = mlhmmv_hash_func(plevel_key); - int index = mlr_canonical_mod(hash, plevel->array_length); - *pideal_index = index; - int num_tries = 0; - - while (TRUE) { - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - if (plevel->states[index] == OCCUPIED) { - mv_t* ekey = &pentry->level_key; - // Existing key found in chain. - if (mv_equals_si(plevel_key, ekey)) - return index; - } else if (plevel->states[index] == EMPTY) { - return index; - } - - // If the current entry has been freed, i.e. previously occupied, - // the sought index may be further down the chain. So we must - // continue looking. - if (++num_tries >= plevel->array_length) { - fprintf(stderr, - "%s: Coding error: table full even after enlargement.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - // Linear probing. - if (++index >= plevel->array_length) - index = 0; - } - MLR_INTERNAL_CODING_ERROR(); - return -1; // not reached -} - -// ---------------------------------------------------------------- -static mlhmmv_level_entry_t* mlhmmv_level_look_up_and_ref_entry(mlhmmv_level_t* plevel, - sllmve_t* prestkeys, int* perror) -{ - if (perror) - *perror = MLHMMV_ERROR_NONE; - if (prestkeys == NULL) { - if (perror) - *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; - return NULL; - } - mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prestkeys->value, NULL); - while (prestkeys->pnext != NULL) { - if (plevel_entry == NULL) { - return NULL; - } - if (plevel_entry->level_xvalue.is_terminal) { - if (perror) - *perror = MLHMMV_ERROR_KEYLIST_TOO_DEEP; - return NULL; - } - plevel = plevel_entry->level_xvalue.pnext_level; - prestkeys = prestkeys->pnext; - plevel_entry = mlhmmv_level_get_next_level_entry(plevel_entry->level_xvalue.pnext_level, - &prestkeys->value, NULL); - } - return plevel_entry; -} - -// ---------------------------------------------------------------- -static mlhmmv_level_entry_t* mlhmmv_level_get_next_level_entry(mlhmmv_level_t* plevel, mv_t* plevel_key, int* pindex) { - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - - if (pindex != NULL) - *pindex = index; - - if (plevel->states[index] == OCCUPIED) - return pentry; - else if (plevel->states[index] == EMPTY) - return NULL; - else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -static mlhmmv_xvalue_t* mlhmmv_level_get_next_level_xvalue(mlhmmv_level_t* plevel, mv_t* plevel_key) { - if (plevel == NULL) - return NULL; - mlhmmv_level_entry_t* pentry = mlhmmv_level_get_next_level_entry(plevel, plevel_key, NULL); - if (pentry == NULL) - return NULL; - else - return &pentry->level_xvalue; -} - -// ---------------------------------------------------------------- -mv_t* mlhmmv_level_look_up_and_ref_terminal(mlhmmv_level_t* plevel, sllmv_t* pmvkeys, int* perror) { - mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_look_up_and_ref_entry(plevel, pmvkeys->phead, perror); - if (plevel_entry == NULL) { - return NULL; - } - if (!plevel_entry->level_xvalue.is_terminal) { - *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; - return NULL; - } - return &plevel_entry->level_xvalue.terminal_mlrval; -} - -// ---------------------------------------------------------------- -mlhmmv_xvalue_t* mlhmmv_level_look_up_and_ref_xvalue(mlhmmv_level_t* pstart_level, sllmv_t* pmvkeys, int* perror) { - *perror = MLHMMV_ERROR_NONE; - sllmve_t* prest_keys = pmvkeys->phead; - if (prest_keys == NULL) { - *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; - return NULL; - } - mlhmmv_level_t* plevel = pstart_level; - if (plevel == NULL) { - return NULL; - } - mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prest_keys->value, NULL); - while (prest_keys->pnext != NULL) { - if (plevel_entry == NULL) { - return NULL; - } else { - plevel = plevel_entry->level_xvalue.pnext_level; - prest_keys = prest_keys->pnext; - if (plevel == NULL) - return NULL; - plevel_entry = mlhmmv_level_get_next_level_entry(plevel, &prest_keys->value, NULL); - } - } - if (plevel_entry == NULL) { - *perror = MLHMMV_ERROR_KEYLIST_TOO_DEEP; - return NULL; - } - return &plevel_entry->level_xvalue; -} - -// ---------------------------------------------------------------- -static mlhmmv_level_t* mlhmmv_level_ref_or_create(mlhmmv_level_t* plevel, sllmve_t* prest_keys) { - if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) - mlhmmv_level_enlarge(plevel); - return mlhmmv_level_get_or_create_no_enlarge(plevel, prest_keys); -} - -// ---------------------------------------------------------------- -static mlhmmv_level_t* mlhmmv_level_get_or_create_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys) { - mv_t* plevel_key = &prest_keys->value; - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - - if (plevel->states[index] == EMPTY) { // End of chain. - - plevel->states[index] = OCCUPIED; - plevel->num_occupied++; - pentry->ideal_index = ideal_index; - pentry->level_key = mv_copy(plevel_key); - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - - if (plevel->phead == NULL) { // First entry at this level - pentry->pprev = NULL; - pentry->pnext = NULL; - plevel->phead = pentry; - plevel->ptail = pentry; - } else { // Subsequent entry at this level - pentry->pprev = plevel->ptail; - pentry->pnext = NULL; - plevel->ptail->pnext = pentry; - plevel->ptail = pentry; - } - - if (prest_keys->pnext != NULL) { - // RECURSE - return mlhmmv_level_ref_or_create(pentry->level_xvalue.pnext_level, prest_keys->pnext); - } else { - return pentry->level_xvalue.pnext_level; - } - - } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain - - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - } - if (prest_keys->pnext == NULL) { - return pentry->level_xvalue.pnext_level; - } else { // RECURSE - return mlhmmv_level_ref_or_create(pentry->level_xvalue.pnext_level, prest_keys->pnext); - } - - } else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -mlhmmv_level_t* mlhmmv_level_put_empty_map(mlhmmv_level_t* plevel, mv_t* pkey) { - int error; - mv_t absent = mv_absent(); - - sllmve_t e = { - .value = *pkey, - .free_flags = 0, - .pnext = NULL - }; - mlhmmv_level_put_terminal(plevel, &e, &absent); // xxx optimize to avoid 2nd lookup - sllmv_t s = { - .phead = &e, - .ptail = &e, - .length = 1 - }; - mlhmmv_xvalue_t* pxval = mlhmmv_level_look_up_and_ref_xvalue(plevel, &s, &error); - *pxval = mlhmmv_xvalue_alloc_empty_map(); - return pxval->pnext_level; -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_enlarge(mlhmmv_level_t* plevel) { - mlhmmv_level_entry_t* old_entries = plevel->entries; - mlhmmv_level_entry_state_t* old_states = plevel->states; - mlhmmv_level_entry_t* old_head = plevel->phead; - - mlhmmv_level_init(plevel, plevel->array_length*ENLARGEMENT_FACTOR); - - for (mlhmmv_level_entry_t* pentry = old_head; pentry != NULL; pentry = pentry->pnext) { - mlhmmv_level_move(plevel, &pentry->level_key, &pentry->level_xvalue); - } - free(old_entries); - free(old_states); -} - -// ---------------------------------------------------------------- -// This is done only on map-level enlargement. -// Example: -// * level = map["a"], rest_keys = [2, "c"] , terminal_value = 4. -// rest_keys = ["e", "f"] , terminal_value = 7. -// rest_keys = [6] , terminal_value = "g". -// -// which is to say for the purposes of this routine -// -// * level = map["a"], level_key = 2, level_xvalue = non-terminal ["c"] => terminal_value = 4. -// level_key = "e", level_xvalue = non-terminal ["f"] => terminal_value = 7. -// level_key = 6, level_xvalue = terminal_value = "g". - -static void mlhmmv_level_move(mlhmmv_level_t* plevel, mv_t* plevel_key, mlhmmv_xvalue_t* plevel_value) { - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - - if (plevel->states[index] == OCCUPIED) { - // Existing key found in chain; put value. - pentry->level_xvalue = *plevel_value; - - } else if (plevel->states[index] == EMPTY) { - // End of chain. - pentry->ideal_index = ideal_index; - pentry->level_key = *plevel_key; - // For the put API, we copy data passed in. But for internal enlarges, we just need to move pointers around. - pentry->level_xvalue = *plevel_value; - plevel->states[index] = OCCUPIED; - - if (plevel->phead == NULL) { - pentry->pprev = NULL; - pentry->pnext = NULL; - plevel->phead = pentry; - plevel->ptail = pentry; - } else { - pentry->pprev = plevel->ptail; - pentry->pnext = NULL; - plevel->ptail->pnext = pentry; - plevel->ptail = pentry; - } - plevel->num_occupied++; - } - else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void mlhmmv_level_put_xvalue(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mlhmmv_xvalue_t* pvalue) { // xxx 'copy' into name - if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) - mlhmmv_level_enlarge(plevel); - mlhmmv_level_put_xvalue_no_enlarge(plevel, prest_keys, pvalue); -} - -void mlhmmv_level_put_xvalue_singly_keyed(mlhmmv_level_t* plevel, mv_t* pkey, mlhmmv_xvalue_t* pvalue) { - sllmve_t e = { .value = *pkey, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_put_xvalue(plevel, &e, pvalue); -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_put_xvalue_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, - mlhmmv_xvalue_t* pvalue) -{ - mv_t* plevel_key = &prest_keys->value; - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - - if (plevel->states[index] == EMPTY) { // End of chain. - pentry->ideal_index = ideal_index; - pentry->level_key = mv_copy(plevel_key); // (xxx weird & needs explaining) key is copied ... - - if (prest_keys->pnext == NULL) { - pentry->level_xvalue = *pvalue; // (xxx weird & needs explaining) ... but the value is not copied - } else { - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - } - plevel->states[index] = OCCUPIED; - - if (plevel->phead == NULL) { // First entry at this level - pentry->pprev = NULL; - pentry->pnext = NULL; - plevel->phead = pentry; - plevel->ptail = pentry; - } else { // Subsequent entry at this level - pentry->pprev = plevel->ptail; - pentry->pnext = NULL; - plevel->ptail->pnext = pentry; - plevel->ptail = pentry; - } - - plevel->num_occupied++; - if (prest_keys->pnext != NULL) { - // RECURSE - mlhmmv_level_put_xvalue(pentry->level_xvalue.pnext_level, prest_keys->pnext, pvalue); - } - - } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain - if (prest_keys->pnext == NULL) { // Place the terminal at this level - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - } else { - mlhmmv_level_free(pentry->level_xvalue.pnext_level); - } - pentry->level_xvalue = *pvalue; - - } else { // The terminal will be placed at a deeper level - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - } - // RECURSE - mlhmmv_level_put_xvalue(pentry->level_xvalue.pnext_level, prest_keys->pnext, pvalue); - } - - } else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -// Example on recursive calls: -// * level = map, rest_keys = ["a", 2, "c"] , terminal value = 4. -// * level = map["a"], rest_keys = [2, "c"] , terminal value = 4. -// * level = map["a"][2], rest_keys = ["c"] , terminal value = 4. - -void mlhmmv_level_put_terminal(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value) { - if ((plevel->num_occupied + plevel->num_freed) >= (plevel->array_length * LOAD_FACTOR)) - mlhmmv_level_enlarge(plevel); - mlhmmv_level_put_terminal_no_enlarge(plevel, prest_keys, pterminal_value); -} - -void mlhmmv_level_put_terminal_singly_keyed(mlhmmv_level_t* plevel, mv_t* pkey, mv_t* pterminal_value) { - sllmve_t e = { .value = *pkey, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_put_terminal(plevel, &e, pterminal_value); -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_put_terminal_no_enlarge(mlhmmv_level_t* plevel, sllmve_t* prest_keys, mv_t* pterminal_value) { - mv_t* plevel_key = &prest_keys->value; - int ideal_index = 0; - int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index); - mlhmmv_level_entry_t* pentry = &plevel->entries[index]; - - if (plevel->states[index] == EMPTY) { // End of chain. - pentry->ideal_index = ideal_index; - pentry->level_key = mv_copy(plevel_key); // <------------------------- copy key - - if (prest_keys->pnext == NULL) { - pentry->level_xvalue.is_terminal = TRUE; - pentry->level_xvalue.terminal_mlrval = mv_copy(pterminal_value); // <--------------- copy value - } else { - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - } - plevel->states[index] = OCCUPIED; - - if (plevel->phead == NULL) { // First entry at this level - pentry->pprev = NULL; - pentry->pnext = NULL; - plevel->phead = pentry; - plevel->ptail = pentry; - } else { // Subsequent entry at this level - pentry->pprev = plevel->ptail; - pentry->pnext = NULL; - plevel->ptail->pnext = pentry; - plevel->ptail = pentry; - } - - plevel->num_occupied++; - if (prest_keys->pnext != NULL) { - // RECURSE - mlhmmv_level_put_terminal(pentry->level_xvalue.pnext_level, prest_keys->pnext, pterminal_value); - } - - } else if (plevel->states[index] == OCCUPIED) { // Existing key found in chain - if (prest_keys->pnext == NULL) { // Place the terminal at this level - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - } else { - mlhmmv_level_free(pentry->level_xvalue.pnext_level); - } - pentry->level_xvalue.is_terminal = TRUE; - pentry->level_xvalue.terminal_mlrval = mv_copy(pterminal_value); // <--------------- copy value - - } else { // The terminal will be placed at a deeper level - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - pentry->level_xvalue.is_terminal = FALSE; - pentry->level_xvalue.pnext_level = mlhmmv_level_alloc(); - } - // RECURSE - mlhmmv_level_put_terminal(pentry->level_xvalue.pnext_level, prest_keys->pnext, pterminal_value); - } - - } else { - fprintf(stderr, "%s: mlhmmv_level_find_index_for_key did not find end of chain\n", MLR_GLOBALS.bargv0); - exit(1); - } -} - -// ---------------------------------------------------------------- -void mlhmmv_level_to_lrecs(mlhmmv_level_t* plevel, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, - int do_full_prefixing, char* flatten_separator) -{ - mv_t* pfirstkey = &pkeys->phead->value; - - mlhmmv_level_entry_t* ptop_entry = mlhmmv_level_look_up_and_ref_entry(plevel, pkeys->phead, NULL); - - if (ptop_entry == NULL) { - // No such entry in the mlhmmv results in no output records - } else if (ptop_entry->level_xvalue.is_terminal) { - // E.g. '@v = 3' at the top level of the mlhmmv. - lrec_t* poutrec = lrec_unbacked_alloc(); - lrec_put(poutrec, - mv_alloc_format_val(pfirstkey), - mv_alloc_format_val(&ptop_entry->level_xvalue.terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } else { - // E.g. '@v = {...}' at the top level of the mlhmmv: the map value keyed by oosvar-name 'v' is itself a hashmap. - // This needs to be flattened down to an lrec which is a list of key-value pairs. We recursively invoke - // mlhmmv_level_to_lrecs_across_records for each of the name-list entries, one map level deeper each call, then - // from there invoke mlhmmv_level_to_lrec_within_record on any remaining map levels. - lrec_t* ptemplate = lrec_unbacked_alloc(); - char* oosvar_name = mv_alloc_format_val(pfirstkey); - mlhmmv_level_to_lrecs_across_records(ptop_entry->level_xvalue.pnext_level, oosvar_name, pnames->phead, - ptemplate, poutrecs, do_full_prefixing, flatten_separator); - free(oosvar_name); - lrec_free(ptemplate); - } -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_to_lrecs_across_records( - mlhmmv_level_t* plevel, - char* prefix, - sllmve_t* prestnames, - lrec_t* ptemplate, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator) -{ - if (prestnames != NULL) { - // If there is a namelist entry, pull it out to its own field on the output lrecs. - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; - lrec_t* pnextrec = lrec_copy(ptemplate); - lrec_put(pnextrec, - mv_alloc_format_val(&prestnames->value), - mv_alloc_format_val(&pe->level_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - if (plevel_value->is_terminal) { - lrec_put(pnextrec, - mlr_strdup_or_die(prefix), - mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - sllv_append(poutrecs, pnextrec); - } else { - mlhmmv_level_to_lrecs_across_records(pe->level_xvalue.pnext_level, - prefix, prestnames->pnext, pnextrec, poutrecs, do_full_prefixing, flatten_separator); - lrec_free(pnextrec); - } - } - - } else { - // If there are no more remaining namelist entries, flatten remaining map levels using the join separator - // (default ":") and use them to create lrec values. - lrec_t* pnextrec = lrec_copy(ptemplate); - int emit = TRUE; - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; - if (plevel_value->is_terminal) { - char* temp = mv_alloc_format_val(&pe->level_key); - char* next_prefix = do_full_prefixing - ? mlr_paste_3_strings(prefix, flatten_separator, temp) - : mlr_strdup_or_die(temp); - free(temp); - lrec_put(pnextrec, - next_prefix, - mv_alloc_format_val(&plevel_value->terminal_mlrval), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } else if (do_full_prefixing) { - char* temp = mv_alloc_format_val(&pe->level_key); - char* next_prefix = mlr_paste_3_strings(prefix, flatten_separator, temp); - free(temp); - mlhmmv_level_to_lrec_within_record(plevel_value->pnext_level, next_prefix, pnextrec, - do_full_prefixing, flatten_separator); - free(next_prefix); - } else { - mlhmmv_level_to_lrecs_across_records(pe->level_xvalue.pnext_level, - prefix, NULL, pnextrec, poutrecs, do_full_prefixing, flatten_separator); - emit = FALSE; - } - } - if (emit) - sllv_append(poutrecs, pnextrec); - else - lrec_free(pnextrec); - } -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_to_lrec_within_record( - mlhmmv_level_t* plevel, - char* prefix, - lrec_t* poutrec, - int do_full_prefixing, - char* flatten_separator) -{ - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - mlhmmv_xvalue_t* plevel_value = &pe->level_xvalue; - char* temp = mv_alloc_format_val(&pe->level_key); - char* next_prefix = do_full_prefixing - ? mlr_paste_3_strings(prefix, flatten_separator, temp) - : mlr_strdup_or_die(temp); - free(temp); - if (plevel_value->is_terminal) { - lrec_put(poutrec, - next_prefix, - mv_alloc_format_val(&plevel_value->terminal_mlrval), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } else { - mlhmmv_level_to_lrec_within_record(plevel_value->pnext_level, next_prefix, poutrec, - do_full_prefixing, flatten_separator); - free(next_prefix); - } - } -} - -// ---------------------------------------------------------------- -static void mlhhmv_levels_to_lrecs_lashed_across_records( - mlhmmv_level_t** pplevels, - char** prefixes, - int num_levels, - sllmve_t* prestnames, - lrec_t* ptemplate, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator) -{ - if (prestnames != NULL) { - // If there is a namelist entry, pull it out to its own field on the output lrecs. - // First is iterated over and the rest are lashed (lookups with same keys as primary). - if (pplevels[0] != NULL) { - for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { - mlhmmv_xvalue_t* pfirst_level_value = &pe->level_xvalue; - lrec_t* pnextrec = lrec_copy(ptemplate); - lrec_put(pnextrec, - mv_alloc_format_val(&prestnames->value), - mv_alloc_format_val(&pe->level_key), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - - if (pfirst_level_value->is_terminal) { - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value != NULL && plevel_value->is_terminal) { - lrec_put(pnextrec, - mlr_strdup_or_die(prefixes[i]), - mv_alloc_format_val(&plevel_value->terminal_mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - sllv_append(poutrecs, pnextrec); - } else { - mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value == NULL || plevel_value->is_terminal) { - ppnext_levels[i] = NULL; - } else { - ppnext_levels[i] = plevel_value->pnext_level; - } - } - - mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, prefixes, num_levels, - prestnames->pnext, pnextrec, poutrecs, do_full_prefixing, flatten_separator); - - free(ppnext_levels); - lrec_free(pnextrec); - } - } - } - - } else if (pplevels[0] != NULL) { - // If there are no more remaining namelist entries, flatten remaining map levels using the join separator - // (default ":") and use them to create lrec values. - lrec_t* pnextrec = lrec_copy(ptemplate); - int emit = TRUE; - for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { - if (pe->level_xvalue.is_terminal) { - char* temp = mv_alloc_format_val(&pe->level_key); - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value != NULL && plevel_value->is_terminal) { - char* name = do_full_prefixing - ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) - : mlr_strdup_or_die(temp); - lrec_put(pnextrec, - name, - mv_alloc_format_val(&plevel_value->terminal_mlrval), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - free(temp); - } else if (do_full_prefixing) { - char* temp = mv_alloc_format_val(&pe->level_key); - mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); - char** next_prefixes = mlr_malloc_or_die(num_levels * sizeof(char*)); - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value != NULL && !plevel_value->is_terminal) { - ppnext_levels[i] = plevel_value->pnext_level; - next_prefixes[i] = mlr_paste_3_strings(prefixes[i], flatten_separator, temp); - } else { - ppnext_levels[i] = NULL; - next_prefixes[i] = NULL; - } - } - - mlhhmv_levels_to_lrecs_lashed_within_records(ppnext_levels, next_prefixes, num_levels, - pnextrec, do_full_prefixing, flatten_separator); - - for (int i = 0; i < num_levels; i++) { - free(next_prefixes[i]); - } - free(next_prefixes); - free(ppnext_levels); - free(temp); - } else { - mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value->is_terminal) { - ppnext_levels[i] = NULL; - } else { - ppnext_levels[i] = plevel_value->pnext_level; - } - } - - mlhhmv_levels_to_lrecs_lashed_across_records(ppnext_levels, prefixes, num_levels, - NULL, pnextrec, poutrecs, do_full_prefixing, flatten_separator); - - free(ppnext_levels); - emit = FALSE; - } - } - if (emit) - sllv_append(poutrecs, pnextrec); - else - lrec_free(pnextrec); - } -} - -// ---------------------------------------------------------------- -static void mlhhmv_levels_to_lrecs_lashed_within_records( - mlhmmv_level_t** pplevels, - char** prefixes, - int num_levels, - lrec_t* poutrec, - int do_full_prefixing, - char* flatten_separator) -{ - for (mlhmmv_level_entry_t* pe = pplevels[0]->phead; pe != NULL; pe = pe->pnext) { - mlhmmv_xvalue_t* pfirst_level_value = &pe->level_xvalue; - char* temp = mv_alloc_format_val(&pe->level_key); - if (pfirst_level_value->is_terminal) { - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value != NULL && plevel_value->is_terminal) { - char* name = do_full_prefixing - ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) - : mlr_strdup_or_die(temp); - lrec_put(poutrec, - name, - mv_alloc_format_val(&plevel_value->terminal_mlrval), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - } else { - mlhmmv_level_t** ppnext_levels = mlr_malloc_or_die(num_levels * sizeof(mlhmmv_level_t*)); - char** next_prefixes = mlr_malloc_or_die(num_levels * sizeof(char*)); - for (int i = 0; i < num_levels; i++) { - mlhmmv_xvalue_t* plevel_value = mlhmmv_level_get_next_level_xvalue(pplevels[i], &pe->level_key); - if (plevel_value->is_terminal) { - ppnext_levels[i] = NULL; - next_prefixes[i] = NULL; - } else { - ppnext_levels[i] = plevel_value->pnext_level; - next_prefixes[i] = do_full_prefixing - ? mlr_paste_3_strings(prefixes[i], flatten_separator, temp) - : mlr_strdup_or_die(temp); - } - } - - mlhhmv_levels_to_lrecs_lashed_within_records(ppnext_levels, next_prefixes, num_levels, - poutrec, do_full_prefixing, flatten_separator); - - for (int i = 0; i < num_levels; i++) { - free(next_prefixes[i]); - } - free(next_prefixes); - free(ppnext_levels); - } - free(temp); - } -} - -// ---------------------------------------------------------------- -void mlhmmv_level_print_stacked(mlhmmv_level_t* plevel, int depth, - int do_final_comma, int quote_keys_always, int quote_values_always, - char* line_indent, char* line_term, FILE* ostream) -{ - if (plevel == NULL) { - return; - } - static char* leader = " "; - // Top-level opening brace goes on a line by itself; subsequents on the same line after the level key. - if (depth == 0) - fprintf(ostream, "%s{%s", line_indent, line_term); - for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { - fprintf(ostream, "%s", line_indent); - for (int i = 0; i <= depth; i++) - fprintf(ostream, "%s", leader); - char* level_key_string = mv_alloc_format_val(&pentry->level_key); - if (quote_keys_always || mv_is_string_or_empty(&pentry->level_key)) { - json_print_string_escaped(ostream, level_key_string); - } else { - fputs(level_key_string, ostream); - } - free(level_key_string); - fprintf(ostream, ": "); - - if (pentry->level_xvalue.is_terminal) { - mlhmmv_print_terminal(&pentry->level_xvalue.terminal_mlrval, quote_keys_always, - quote_values_always, ostream); - - if (pentry->pnext != NULL) - fprintf(ostream, ",%s", line_term); - else - fprintf(ostream, "%s", line_term); - } else { - fprintf(ostream, "%s{%s", line_indent, line_term); - mlhmmv_level_print_stacked(pentry->level_xvalue.pnext_level, depth + 1, - pentry->pnext != NULL, quote_keys_always, quote_values_always, - line_indent, line_term, - ostream); - } - } - for (int i = 0; i < depth; i++) - fprintf(ostream, "%s", leader); - if (do_final_comma) - fprintf(ostream, "%s},%s", line_indent, line_term); - else - fprintf(ostream, "%s}%s", line_indent, line_term); -} - -// ---------------------------------------------------------------- -static void mlhmmv_level_print_single_line(mlhmmv_level_t* plevel, int depth, - int do_final_comma, int quote_keys_always, int quote_values_always, - FILE* ostream) -{ - // Top-level opening brace goes on a line by itself; subsequents on the same line after the level key. - if (depth == 0) - fprintf(ostream, "{ "); - for (mlhmmv_level_entry_t* pentry = plevel->phead; pentry != NULL; pentry = pentry->pnext) { - char* level_key_string = mv_alloc_format_val(&pentry->level_key); - if (quote_keys_always || mv_is_string_or_empty(&pentry->level_key)) { - json_print_string_escaped(ostream, level_key_string); - } else { - fputs(level_key_string, ostream); - } - free(level_key_string); - fprintf(ostream, ": "); - - if (pentry->level_xvalue.is_terminal) { - char* level_value_string = mv_alloc_format_val(&pentry->level_xvalue.terminal_mlrval); - - if (quote_values_always) { - json_print_string_escaped(ostream,level_value_string); - } else if (pentry->level_xvalue.terminal_mlrval.type == MT_STRING) { - double parsed; - if (mlr_try_float_from_string(level_value_string, &parsed)) { - json_decimal_print(ostream, level_value_string, parsed); - } else if (streq(level_value_string, "true") || streq(level_value_string, "false")) { - fprintf(ostream, "%s", level_value_string); - } else { - json_print_string_escaped(ostream,level_value_string); - } - } else { - fprintf(ostream, "%s", level_value_string); - } - - free(level_value_string); - if (pentry->pnext != NULL) - fprintf(ostream, ", "); - } else { - fprintf(ostream, "{"); - mlhmmv_level_print_single_line(pentry->level_xvalue.pnext_level, depth + 1, - pentry->pnext != NULL, quote_keys_always, quote_values_always, ostream); - } - } - if (do_final_comma) - fprintf(ostream, " },"); - else - fprintf(ostream, " }"); -} - -// ---------------------------------------------------------------- -void mlhmmv_level_remove(mlhmmv_level_t* plevel, sllmve_t* prestkeys) { - if (plevel == NULL) // nonesuch - return; - if (prestkeys == NULL) // restkeys too short - return; - - int index = -1; - mlhmmv_level_entry_t* pentry = mlhmmv_level_get_next_level_entry(plevel, &prestkeys->value, &index); - if (pentry == NULL) - return; - - if (prestkeys->pnext != NULL) { - // Keep recursing until end of restkeys. - if (pentry->level_xvalue.is_terminal) // restkeys too long - return; - mlhmmv_level_remove(pentry->level_xvalue.pnext_level, prestkeys->pnext); - - } else { - // 1. Excise the node and its descendants from the storage tree - if (plevel->states[index] != OCCUPIED) { - fprintf(stderr, "%s: mlhmmv_root_remove: did not find end of chain.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - mv_free(&pentry->level_key); - pentry->ideal_index = -1; - plevel->states[index] = DELETED; - - if (pentry == plevel->phead) { - if (pentry == plevel->ptail) { - plevel->phead = NULL; - plevel->ptail = NULL; - } else { - plevel->phead = pentry->pnext; - pentry->pnext->pprev = NULL; - } - } else if (pentry == plevel->ptail) { - plevel->ptail = pentry->pprev; - pentry->pprev->pnext = NULL; - } else { - pentry->pprev->pnext = pentry->pnext; - pentry->pnext->pprev = pentry->pprev; - } - - plevel->num_freed++; - plevel->num_occupied--; - - // 2. Free the memory for the node and its descendants - if (pentry->level_xvalue.is_terminal) { - mv_free(&pentry->level_xvalue.terminal_mlrval); - } else { - mlhmmv_level_free(pentry->level_xvalue.pnext_level); - } - } -} - -// ================================================================ -mlhmmv_root_t* mlhmmv_root_alloc() { - mlhmmv_root_t* pmap = mlr_malloc_or_die(sizeof(mlhmmv_root_t)); - pmap->root_xvalue = mlhmmv_xvalue_alloc_empty_map(); - return pmap; -} - -// ---------------------------------------------------------------- -void mlhmmv_root_free(mlhmmv_root_t* pmap) { - if (pmap == NULL) - return; - mlhmmv_level_free(pmap->root_xvalue.pnext_level); - free(pmap); -} - -// ---------------------------------------------------------------- -void mlhmmv_root_clear(mlhmmv_root_t* pmap) { - mlhmmv_level_clear(pmap->root_xvalue.pnext_level); -} - -// ---------------------------------------------------------------- -mv_t* mlhmmv_root_look_up_and_ref_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, int* perror) { - mlhmmv_level_entry_t* plevel_entry = mlhmmv_level_look_up_and_ref_entry(pmap->root_xvalue.pnext_level, - pmvkeys->phead, perror); - if (plevel_entry == NULL) { - return NULL; - } - if (!plevel_entry->level_xvalue.is_terminal) { - *perror = MLHMMV_ERROR_KEYLIST_TOO_SHALLOW; - return NULL; - } - return &plevel_entry->level_xvalue.terminal_mlrval; -} - -// ---------------------------------------------------------------- -// Example on recursive calls: -// * level = map, rest_keys = ["a", 2, "c"] -// * level = map["a"], rest_keys = [2, "c"] -// * level = map["a"][2], rest_keys = ["c"] -mlhmmv_level_t* mlhmmv_root_look_up_or_create_then_ref_level(mlhmmv_root_t* pmap, sllmv_t* pmvkeys) { - return mlhmmv_level_ref_or_create(pmap->root_xvalue.pnext_level, pmvkeys->phead); -} - -// ---------------------------------------------------------------- -// Example: keys = ["a", 2, "c"] and value = 4. -void mlhmmv_root_put_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value) { - mlhmmv_level_put_terminal(pmap->root_xvalue.pnext_level, pmvkeys->phead, pterminal_value); -} - -// ---------------------------------------------------------------- -static void mlhmmv_root_put_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mlhmmv_xvalue_t* pvalue) { - mlhmmv_level_put_xvalue(pmap->root_xvalue.pnext_level, pmvkeys->phead, pvalue); -} - -// ---------------------------------------------------------------- -void mlhmmv_root_copy_submap(mlhmmv_root_t* pmap, sllmv_t* ptokeys, sllmv_t* pfromkeys) { - int error = 0; - mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry(pmap->root_xvalue.pnext_level, - pfromkeys->phead, &error); - if (pfromentry != NULL) { - mlhmmv_xvalue_t submap = mlhmmv_xvalue_copy(&pfromentry->level_xvalue); - mlhmmv_root_put_xvalue(pmap, ptokeys, &submap); - } -} - -// ---------------------------------------------------------------- -sllv_t* mlhmmv_root_copy_keys_from_submap(mlhmmv_root_t* pmap, sllmv_t* pmvkeys) { - int error; - if (pmvkeys->length == 0) { - mlhmmv_xvalue_t root_value = (mlhmmv_xvalue_t) { - .is_terminal = FALSE, - .terminal_mlrval = mv_absent(), - .pnext_level = pmap->root_xvalue.pnext_level, - }; - return mlhmmv_xvalue_copy_keys_nonindexed(&root_value); - } else { - mlhmmv_level_entry_t* pfromentry = mlhmmv_level_look_up_and_ref_entry( - pmap->root_xvalue.pnext_level, pmvkeys->phead, &error); - if (pfromentry != NULL) { - return mlhmmv_xvalue_copy_keys_nonindexed(&pfromentry->level_xvalue); - } else { - return sllv_alloc(); - } - } -} - -// ---------------------------------------------------------------- -// Removes entries from a specified level downward, unsetting any maps which become empty as a result. For example, if -// e.g. a=>b=>c=>4 and the c level is to be removed, then all up-nodes are emptied out & should be pruned. -// * If restkeys too long (e.g. 'unset $a["b"]["c"]' with data "a":"b":3): do nothing. -// * If restkeys just right: (e.g. 'unset $a["b"]' with data "a":"b":3) remove the terminal mlrval. -// * If restkeys is too short: (e.g. 'unset $a["b"]' with data "a":"b":"c":4): remove the level and all below. - -void mlhmmv_root_remove(mlhmmv_root_t* pmap, sllmv_t* prestkeys) { - if (prestkeys == NULL) { - return; - } else if (prestkeys->phead == NULL) { - mlhmmv_level_free(pmap->root_xvalue.pnext_level); - pmap->root_xvalue.pnext_level = mlhmmv_level_alloc(); - return; - } else { - mlhmmv_level_remove(pmap->root_xvalue.pnext_level, prestkeys->phead); - } -} - -// ---------------------------------------------------------------- -// For 'emit all' and 'emitp all'. -void mlhmmv_root_all_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pnames, sllv_t* poutrecs, int do_full_prefixing, - char* flatten_separator) -{ - for (mlhmmv_level_entry_t* pentry = pmap->root_xvalue.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { - sllmv_t* pkey = sllmv_single_no_free(&pentry->level_key); - mlhmmv_root_partial_to_lrecs(pmap, pkey, pnames, poutrecs, do_full_prefixing, flatten_separator); - sllmv_free(pkey); - } -} - -// ---------------------------------------------------------------- -// For 'emit' and 'emitp': the latter has do_full_prefixing == TRUE. These allocate lrecs, appended to the poutrecs -// list. - -// * pmap is the base-level oosvar multi-level hashmap. -// * pkeys specify the level in the mlhmmv at which to produce data. -// * pnames is used to pull subsequent-level keys out into separate fields. -// * In case pnames isn't long enough to reach a terminal mlrval level in the mlhmmv, -// do_full_prefixing specifies whether to concatenate nested mlhmmv keys into single lrec keys. -// -// Examples: - -// * pkeys reaches a terminal level: -// -// $ mlr --opprint put -q '@sum += $x; end { emit @sum }' ../data/small -// sum -// 4.536294 - -// * pkeys reaches terminal levels: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' ../data/small -// a b sum -// pan pan 0.346790 -// pan wye 0.502626 -// eks pan 0.758680 -// eks wye 0.381399 -// eks zee 0.611784 -// wye wye 0.204603 -// wye pan 0.573289 -// zee pan 0.527126 -// zee wye 0.598554 -// hat wye 0.031442 - -// * pkeys reaches non-terminal levels: non-prefixed: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' ../data/small -// a pan wye -// pan 0.346790 0.502626 -// -// a pan wye zee -// eks 0.758680 0.381399 0.611784 -// -// a wye pan -// wye 0.204603 0.573289 -// -// a pan wye -// zee 0.527126 0.598554 -// -// a wye -// hat 0.031442 - -// * pkeys reaches non-terminal levels: prefixed: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' ../data/small -// a sum:pan sum:wye -// pan 0.346790 0.502626 -// -// a sum:pan sum:wye sum:zee -// eks 0.758680 0.381399 0.611784 -// -// a sum:wye sum:pan -// wye 0.204603 0.573289 -// -// a sum:pan sum:wye -// zee 0.527126 0.598554 -// -// a sum:wye -// hat 0.031442 - -void mlhmmv_root_partial_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, - int do_full_prefixing, char* flatten_separator) -{ - // There should be at least the oosvar basename, e.g. '@a[b][c]' or '@a[b]' or '@a' but not '@'. - MLR_INTERNAL_CODING_ERROR_IF(pkeys == NULL); - MLR_INTERNAL_CODING_ERROR_IF(pkeys->phead == NULL); - - mlhmmv_level_to_lrecs(pmap->root_xvalue.pnext_level, pkeys, pnames, poutrecs, do_full_prefixing, - flatten_separator); -} - -// ---------------------------------------------------------------- -// This is simply JSON. Example output: -// { -// "0": { -// "fghij": { -// "0": 17 -// } -// }, -// "3": 4, -// "abcde": { -// "-6": 7 -// } -// } - -void mlhmmv_root_print_json_stacked(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, - char* line_indent, char* line_term, FILE* ostream) -{ - mlhmmv_level_print_stacked(pmap->root_xvalue.pnext_level, 0, FALSE, quote_keys_always, - quote_values_always, line_indent, line_term, ostream); -} - -// ---------------------------------------------------------------- -void mlhmmv_root_print_json_single_lines(mlhmmv_root_t* pmap, int quote_keys_always, int quote_values_always, - char* line_term, FILE* ostream) -{ - mlhmmv_level_print_single_line(pmap->root_xvalue.pnext_level, 0, FALSE, quote_keys_always, - quote_values_always, ostream); - fprintf(ostream, "%s", line_term); -} - -// Used for emit of localvars. Puts the xvalue in a single-key-value-pair map -// keyed by the specified name. The xvalue is referenced, not copied. -mlhmmv_root_t* mlhmmv_wrap_name_and_xvalue(mv_t* pname, mlhmmv_xvalue_t* pxval) { - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - mlhmmv_level_put_xvalue_singly_keyed(pmap->root_xvalue.pnext_level, pname, pxval); - return pmap; -} - -// Used for takedown of the temporary map returned by mlhmmv_wrap_name_and_xvalue. Since the xvalue there -// is referenced, not copied, mlhmmv_xvalue_free would prematurely free the xvalue. This method releases -// the xvalue so that the remaining, map-internal structures can be freed correctly. -void mlhmmv_unwrap_name_and_xvalue(mlhmmv_root_t* pmap) -{ - mlhmmv_level_t* plevel = pmap->root_xvalue.pnext_level; - mlhmmv_level_entry_t* pentry = plevel->phead; - mv_free(&pentry->level_key); - plevel->phead = NULL; - plevel->ptail = NULL; - plevel->num_occupied = 0; - mlhmmv_root_free(pmap); -} diff --git a/c/containers/mlhmmv.h b/c/containers/mlhmmv.h deleted file mode 100644 index 84ba851b8..000000000 --- a/c/containers/mlhmmv.h +++ /dev/null @@ -1,318 +0,0 @@ -// ================================================================ -// Array-only (open addressing) multi-level hash map, with linear probing for collisions. -// All keys, and terminal-level values, are mlrvals. All data passed into the put method -// are copied; no pointers in this data structure reference anything external. -// -// Notes: -// * null key is not supported. -// * null value is not supported. -// -// See also: -// * http://en.wikipedia.org/wiki/Hash_table -// * http://docs.oracle.com/javase/6/docs/api/java/util/Map.html -// ================================================================ - -#ifndef MLHMMV_H -#define MLHMMV_H - -#include "lib/mlrval.h" -#include "containers/sllmv.h" -#include "containers/sllv.h" -#include "containers/lrec.h" - -#define MLHMMV_ERROR_NONE 0x0000 -#define MLHMMV_ERROR_KEYLIST_TOO_DEEP 0xdeef -#define MLHMMV_ERROR_KEYLIST_TOO_SHALLOW 0x58a1 - -// This is made visible here in the API so the unit-tester can be sure to exercise the resize logic. -#define MLHMMV_INITIAL_ARRAY_LENGTH 16 - -// ---------------------------------------------------------------- -void mlhmmv_print_terminal(mv_t* pmv, int quote_keys_always, int quote_values_always, - FILE* ostream); - -// ---------------------------------------------------------------- -struct _mlhmmv_level_t; // forward reference - -// The 'x' is for extended: this can hold a scalar or a map. -typedef struct _mlhmmv_xvalue_t { - struct _mlhmmv_level_t* pnext_level; - mv_t terminal_mlrval; - char is_terminal; -} mlhmmv_xvalue_t; - -void mlhmmv_xvalue_reset(mlhmmv_xvalue_t* pxvalue); -mlhmmv_xvalue_t mlhmmv_xvalue_alloc_empty_map(); -mlhmmv_xvalue_t mlhmmv_xvalue_copy(mlhmmv_xvalue_t* pxvalue); -void mlhmmv_xvalue_free(mlhmmv_xvalue_t* pxvalue); - -char* mlhmmv_xvalue_describe_type_simple(mlhmmv_xvalue_t* pxvalue); - -static inline int mlhmmv_xvalue_is_absent_and_nonterminal(mlhmmv_xvalue_t* pxvalue) { - return (pxvalue->is_terminal && mv_is_absent(&pxvalue->terminal_mlrval)); -} - -static inline int mlhmmv_xvalue_is_present_and_nonterminal(mlhmmv_xvalue_t* pxvalue) { - return (pxvalue->is_terminal && mv_is_present(&pxvalue->terminal_mlrval)); -} - -// Used by for-loops over map-valued local variables -sllv_t* mlhmmv_xvalue_copy_keys_indexed (mlhmmv_xvalue_t* pxvalue, sllmv_t* pmvkeys); -sllv_t* mlhmmv_xvalue_copy_keys_nonindexed(mlhmmv_xvalue_t* pxvalue); - -void mlhmmv_xvalues_to_lrecs_lashed( - mlhmmv_xvalue_t** ptop_values, - int num_submaps, - mv_t* pbasenames, - sllmv_t* pnames, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator); - -// ---------------------------------------------------------------- -typedef struct _mlhmmv_level_entry_t { - int ideal_index; - mv_t level_key; - mlhmmv_xvalue_t level_xvalue; // terminal mlrval, or another hashmap - struct _mlhmmv_level_entry_t *pprev; - struct _mlhmmv_level_entry_t *pnext; -} mlhmmv_level_entry_t; - -typedef unsigned char mlhmmv_level_entry_state_t; - -// Store a mlrval into the mlhmmv_xvalue without copying, implicitly transferring -// ownership of the mlrval's free_flags. This means the mlrval will be freed -// when the mlhmmv_xvalue is freed, so the caller should make a copy first if -// necessary. -// -// This is a hot path for non-map local-variable assignments. -static inline mlhmmv_xvalue_t mlhmmv_xvalue_wrap_terminal(mv_t val) { - return (mlhmmv_xvalue_t) {.is_terminal = TRUE, .terminal_mlrval = val, .pnext_level = NULL}; -} - -// ---------------------------------------------------------------- -typedef struct _mlhmmv_level_t { - int num_occupied; - int num_freed; - int array_length; - mlhmmv_level_entry_t* entries; - mlhmmv_level_entry_state_t* states; - mlhmmv_level_entry_t* phead; - mlhmmv_level_entry_t* ptail; -} mlhmmv_level_t; - -mlhmmv_level_t* mlhmmv_level_alloc(); -void mlhmmv_level_free(mlhmmv_level_t* plevel); - -void mlhmmv_level_clear(mlhmmv_level_t* plevel); -void mlhmmv_level_remove(mlhmmv_level_t* plevel, sllmve_t* prestkeys); -int mlhmmv_level_has_key(mlhmmv_level_t* plevel, mv_t* plevel_key); - -mv_t* mlhmmv_level_look_up_and_ref_terminal( - mlhmmv_level_t* plevel, - sllmv_t* pmvkeys, - int* perror); - -mlhmmv_xvalue_t* mlhmmv_level_look_up_and_ref_xvalue( - mlhmmv_level_t* plevel, - sllmv_t* pmvkeys, - int* perror); - -mlhmmv_level_t* mlhmmv_level_put_empty_map( - mlhmmv_level_t* plevel, - mv_t* pkey); - -void mlhmmv_level_put_xvalue( - mlhmmv_level_t* plevel, - sllmve_t* prest_keys, - mlhmmv_xvalue_t* pvalue); - -void mlhmmv_level_put_xvalue_singly_keyed( - mlhmmv_level_t* plevel, - mv_t* pkey, - mlhmmv_xvalue_t* pvalue); - -void mlhmmv_level_put_terminal( - mlhmmv_level_t* plevel, - sllmve_t* prest_keys, - mv_t* pterminal_value); - -void mlhmmv_level_put_terminal_singly_keyed( - mlhmmv_level_t* plevel, - mv_t* pkey, - mv_t* pterminal_value); - -void mlhmmv_level_to_lrecs( - mlhmmv_level_t* plevel, - sllmv_t* pkeys, - sllmv_t* pnames, - sllv_t* poutrecs, - int do_full_prefixing, - char* flatten_separator); - -void mlhmmv_level_print_stacked( - mlhmmv_level_t* plevel, - int depth, - int do_final_comma, - int quote_keys_always, - int quote_values_always, - char* line_indent, - char* line_term, - FILE* ostream); - -// ---------------------------------------------------------------- -typedef struct _mlhmmv_root_t { - mlhmmv_xvalue_t root_xvalue; -} mlhmmv_root_t; - -mlhmmv_root_t* mlhmmv_root_alloc(); - -void mlhmmv_root_free(mlhmmv_root_t* pmap); - -void mlhmmv_root_clear(mlhmmv_root_t* pmap); - -// If the return value is non-null, error will be MLHMMV_ERROR_NONE. If the -// return value is null, the error will be MLHMMV_ERROR_KEYLIST_TOO_DEEP or -// MLHMMV_ERROR_KEYLIST_TOO_SHALLOW, or MLHMMV_ERROR_NONE if the keylist matches -// map depth but the entry is not found. -// -// Note: this returns a pointer to the map's data, not to a copy. -// The caller shouldn't free it, or modify it. -mv_t* mlhmmv_root_look_up_and_ref_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, int* perror); - -// These are an optimization for assignment from full srec, e.g. '@records[$key1][$key2] = $*'. -// Using mlhmmv_root_look_up_or_create_then_ref_level, the CST logic can get or create the @records[$key1][$key2] -// level of the mlhmmv, then copy values there. -mlhmmv_level_t* mlhmmv_root_look_up_or_create_then_ref_level(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); - -void mlhmmv_root_put_terminal(mlhmmv_root_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value); - -// For for-loop-over-oosvar, wherein we need to copy the submap before iterating over it -// (since the iteration may modify it). If the keys don't index a submap, then the return -// value has is_terminal = TRUE and pnext_level = NULL. -mlhmmv_xvalue_t mlhmmv_root_copy_xvalue(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); - -// Used by for-loops over oosvars. Return value is an array of ephemeral mlrvals. -sllv_t* mlhmmv_root_copy_keys_from_submap(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); - -// Unset value/submap from a specified level onward, also unsetting any maps which become empty as a result. -// Examples: -// { -// "a" : { "x" : 1, "y" : 2 }, -// "b" : { "x" : 3, "y" : 4 }, -// } -// with pmvkeys = ["a"] leaves -// { -// "b" : { "x" : 3, "y" : 4 }, -// } -// but with pmvkeys = ["a", "y"] leaves -// { -// "a" : { "x" : 1 }, -// "b" : { "x" : 3, "y" : 4 }, -// } -// and with pmvkeys = [] leaves -// { -// } -// Now if ["a","x"] is removed from -// { -// "a" : { "x" : 1 }, -// "b" : { "x" : 3, "y" : 4 }, -// } -// then -// { -// "b" : { "x" : 3, "y" : 4 }, -// } -// is left: unsetting "a":"x" leaves the map at "a" so this is unset as well. -void mlhmmv_root_remove(mlhmmv_root_t* pmap, sllmv_t* pmvkeys); - -// For 'emit' and 'emitp' in the DSL. These allocate lrecs, appended to the poutrecs list. -// * pmap is the base-level oosvar multi-level hashmap. -// * pkeys specify the level in the mlhmmv at which to produce data. -// * pnames is used to pull subsequent-level keys out into separate fields. -// * In case pnames isn't long enough to reach a terminal mlrval level in the mlhmmv, -// do_full_prefixing specifies whether to concatenate nested mlhmmv keys into single lrec keys. -// -// Examples: - -// * pkeys reaches a terminal level: -// -// $ mlr --opprint put -q '@sum += $x; end { emit @sum }' ../data/small -// sum -// 4.536294 - -// * pkeys reaches terminal levels: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' ../data/small -// a b sum -// pan pan 0.346790 -// pan wye 0.502626 -// eks pan 0.758680 -// eks wye 0.381399 -// eks zee 0.611784 -// wye wye 0.204603 -// wye pan 0.573289 -// zee pan 0.527126 -// zee wye 0.598554 -// hat wye 0.031442 - -// * pkeys reaches non-terminal levels: non-prefixed: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' ../data/small -// a pan wye -// pan 0.346790 0.502626 -// -// a pan wye zee -// eks 0.758680 0.381399 0.611784 -// -// a wye pan -// wye 0.204603 0.573289 -// -// a pan wye -// zee 0.527126 0.598554 -// -// a wye -// hat 0.031442 - -// * pkeys reaches non-terminal levels: prefixed: -// -// $ mlr --opprint put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' ../data/small -// a sum:pan sum:wye -// pan 0.346790 0.502626 -// -// a sum:pan sum:wye sum:zee -// eks 0.758680 0.381399 0.611784 -// -// a sum:wye sum:pan -// wye 0.204603 0.573289 -// -// a sum:pan sum:wye -// zee 0.527126 0.598554 -// -// a sum:wye -// hat 0.031442 - -// For 'emit all' and 'emitp all' in the DSL -void mlhmmv_root_all_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pnames, sllv_t* poutrecs, - int do_full_prefixing, char* flatten_separator); - -// For 'emit' and 'emitp' in the DSL -void mlhmmv_root_partial_to_lrecs(mlhmmv_root_t* pmap, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* poutrecs, - int do_full_prefixing, char* flatten_separator); - -// For 'dump' in the DSL; also used by the lrec-to-JSON writer. -void mlhmmv_root_print_json_stacked(mlhmmv_root_t* pmap, - int quote_keys_always, int quote_values_always, - char* line_indent, char* line_term, FILE* ostream); -void mlhmmv_root_print_json_single_lines(mlhmmv_root_t* pmap, int quote_keys_always, - int quote_values_always, char* line_term, FILE* ostream); - -// Used for emit of localvars. Puts the xvalue in a single-key-value-pair map -// keyed by the specified name. The xvalue is referenced, not copied. -mlhmmv_root_t* mlhmmv_wrap_name_and_xvalue(mv_t* pname, mlhmmv_xvalue_t* pxval); - -// Used for takedown of the temporary map returned by mlhmmv_wrap_name_and_xvalue. Since the xvalue there -// is referenced, not copied, mlhmmv_xvalue_free would prematurely free the xvalue. This method releases -// the xvalue so that the remaining, map-internal structures can be freed correctly. -void mlhmmv_unwrap_name_and_xvalue(mlhmmv_root_t* pmap); - -#endif // MLHMMV_H diff --git a/c/containers/parse_trie.c b/c/containers/parse_trie.c deleted file mode 100644 index fe80e499a..000000000 --- a/c/containers/parse_trie.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/parse_trie.h" - -static parse_trie_node_t* parse_trie_node_alloc(char c); -static void parse_trie_print_aux(parse_trie_node_t* pnode, int depth); -static void parse_trie_add_string_aux(parse_trie_node_t* pnode, char* string, int stridx, int len); - -// ---------------------------------------------------------------- -parse_trie_t* parse_trie_alloc() { - parse_trie_t* ptrie = mlr_malloc_or_die(sizeof(parse_trie_t)); - ptrie->past = parse_trie_node_alloc(0); - ptrie->maxlen = 0; - return ptrie; -} - -static parse_trie_node_t* parse_trie_node_alloc(char c) { - parse_trie_node_t* pnode = mlr_malloc_or_die(sizeof(parse_trie_node_t)); - for (int i = 0; i < 256; i++) - pnode->pnexts[i] = NULL; - pnode->c = c; - pnode->stridx = -1; - pnode->strlen = -1; - return pnode; -} - -// ---------------------------------------------------------------- -static void parse_trie_free_node_descendants(parse_trie_node_t* pnode) { - for (int i = 0; i < 256; i++) { - parse_trie_node_t* pnext = pnode->pnexts[i]; - if (pnext != NULL) { - parse_trie_free_node_descendants(pnext); - free(pnext); - } - } -} - -void parse_trie_free(parse_trie_t* ptrie) { - parse_trie_free_node_descendants(ptrie->past); - free(ptrie->past); - free(ptrie); -} - -// ---------------------------------------------------------------- -void parse_trie_print(parse_trie_t* ptrie) { - parse_trie_node_t* pnode = ptrie->past; - printf("PARSE TRIE DUMP START\n"); - if (pnode != NULL) { - parse_trie_print_aux(pnode, 0); - } - printf("PARSE TRIE DUMP END\n"); -} - -static void parse_trie_print_aux(parse_trie_node_t* pnode, int depth) { - for (int i = 0; i < depth; i++) - printf(" "); - printf("c=%c[%02x],stridx=%d,strlen=%d\n", - isprint((unsigned char)pnode->c) ? pnode->c : '?', - (unsigned)pnode->c, - pnode->stridx, - pnode->strlen); - for (int i = 0; i < 256; i++) { - parse_trie_node_t* pnext = pnode->pnexts[i]; - if (pnext != NULL) - parse_trie_print_aux(pnext, depth+1); - } -} - -// ---------------------------------------------------------------- -void parse_trie_add_string(parse_trie_t* ptrie, char* string, int stridx) { - int len = strlen(string); - parse_trie_add_string_aux(ptrie->past, string, stridx, strlen(string)); - if (len > ptrie->maxlen) - ptrie->maxlen = len; -} - -static void parse_trie_add_string_aux(parse_trie_node_t* pnode, char* string, int stridx, int len) { - char c = string[0]; - if (c == 0) { - pnode->stridx = stridx; - pnode->strlen = len; - } else { - parse_trie_node_t* pnext = pnode->pnexts[(unsigned char)c]; - if (pnext == NULL) { - pnext = parse_trie_node_alloc(c); - pnext->c = c; - pnext->stridx = -1; - pnext->strlen = -1; - pnode->pnexts[(unsigned char)c] = pnext; - } - parse_trie_add_string_aux(pnext, &string[1], stridx, len); - } -} diff --git a/c/containers/parse_trie.h b/c/containers/parse_trie.h deleted file mode 100644 index ea2409a94..000000000 --- a/c/containers/parse_trie.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef PARSE_TRIE_H -#define PARSE_TRIE_H - -// ---------------------------------------------------------------- -// This is for parsing of Miller RFC-CSV data, not for parsing of DSL -// expressions for the put and filter verbs. This is used instead of flex or -// lemon since such parsers, by design, must read to end of input to complete -// parsing. Here, by contrast, we want to split the input stream by delimiters, -// identifying one record at a time. This is so that data may be processed in a -// streaming manner rather than an ingest-all manner. - -struct _parse_trie_node_t; -typedef struct _parse_trie_node_t { - struct _parse_trie_node_t* pnexts[256]; - char c; // current character at this node - int stridx; // which string was stored ending here; -1 if not end of string. - int strlen; // length of string stored ending here; -1 if not end of string. -} parse_trie_node_t; -typedef struct _parse_trie_t { - parse_trie_node_t* past; - int maxlen; -} parse_trie_t; - -// ---------------------------------------------------------------- -parse_trie_t* parse_trie_alloc(); -void parse_trie_free(parse_trie_t* ptrie); -void parse_trie_print(parse_trie_t* ptrie); -void parse_trie_add_string(parse_trie_t* ptrie, char* string, int stridx); - -// ---------------------------------------------------------------- -// Example input: -// * string 0 is "a" -// * string 1 is "aa" -// * buf is "aaabc" -// Output: -// * return value is TRUE -// * stridx is 1 since longest match is "aa" -// * matchlen is 2 since "aa" has length 2 - -// This does a longest-prefix match: input data "\"\nabcdefg" is matched -// against "\"\n" rather than against "\"". - -// We assume that enough data has been peeked into the ring buffer for the -// parse-trie's maxlen. There is no check here. This function is called on -// every single character of RFC-CSV input data so the error-checking would be -// inefficient here, as well as misplaced. - -// The start of buffer (sob), buflen, and mask attributes are nominally -// presented from a ring_buffer object. - -static inline int parse_trie_ring_match(parse_trie_t* ptrie, char* buf, int sob, int buflen, int mask, - int* pstridx, int* pmatchlen) -{ - parse_trie_node_t* pnode = ptrie->past; - parse_trie_node_t* pnext; - parse_trie_node_t* pterm = NULL; - for (int i = 0; i < buflen; i++) { - char c = buf[(sob+i)&mask]; - pnext = pnode->pnexts[(unsigned char) c]; - if (pnext == NULL) - break; - if (pnext->strlen > 0) { - pterm = pnext; - } - pnode = pnext; - } - if (pterm == NULL) { - return FALSE; - } else { - *pstridx = pterm->stridx; - *pmatchlen = pterm->strlen; - return TRUE; - } -} - -static inline int parse_trie_match(parse_trie_t* ptrie, char* p, char* e, int* pstridx, int* pmatchlen) { - parse_trie_node_t* pnode = ptrie->past; - parse_trie_node_t* pnext; - parse_trie_node_t* pterm = NULL; - for ( ; p < e; p++) { - char c = *p; - pnext = pnode->pnexts[(unsigned char) c]; - if (pnext == NULL) - break; - if (pnext->strlen > 0) { - pterm = pnext; - } - pnode = pnext; - } - if (pterm == NULL) { - return FALSE; - } else { - *pstridx = pterm->stridx; - *pmatchlen = pterm->strlen; - return TRUE; - } -} - -#endif // PARSE_TRIE_H diff --git a/c/containers/percentile_keeper.c b/c/containers/percentile_keeper.c deleted file mode 100644 index 77f4da373..000000000 --- a/c/containers/percentile_keeper.c +++ /dev/null @@ -1,280 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/percentile_keeper.h" -#include "lib/mvfuncs.h" - -#define INITIAL_CAPACITY 10000 -#define GROWTH_FACTOR 2.0 - -// ---------------------------------------------------------------- -percentile_keeper_t* percentile_keeper_alloc() { - unsigned long long capacity = INITIAL_CAPACITY; - percentile_keeper_t* ppercentile_keeper = mlr_malloc_or_die(sizeof(percentile_keeper_t)); - ppercentile_keeper->data = mlr_malloc_or_die(capacity*sizeof(mv_t)); - ppercentile_keeper->size = 0LL; - ppercentile_keeper->capacity = capacity; - ppercentile_keeper->sorted = FALSE; - return ppercentile_keeper; -} - -// ---------------------------------------------------------------- -void percentile_keeper_free(percentile_keeper_t* ppercentile_keeper) { - if (ppercentile_keeper == NULL) - return; - for (unsigned long long i = 0; i < ppercentile_keeper->size; i++) { - mv_free(&ppercentile_keeper->data[i]); - } - free(ppercentile_keeper->data); - ppercentile_keeper->data = NULL; - ppercentile_keeper->size = 0LL; - ppercentile_keeper->capacity = 0LL; - free(ppercentile_keeper); -} - -// ---------------------------------------------------------------- -void percentile_keeper_ingest(percentile_keeper_t* ppercentile_keeper, mv_t value) { - if (ppercentile_keeper->size >= ppercentile_keeper->capacity) { - ppercentile_keeper->capacity = (unsigned long long)(ppercentile_keeper->capacity * GROWTH_FACTOR); - ppercentile_keeper->data = (mv_t*)mlr_realloc_or_die(ppercentile_keeper->data, - ppercentile_keeper->capacity*sizeof(mv_t)); - } - ppercentile_keeper->data[ppercentile_keeper->size++] = value; - ppercentile_keeper->sorted = FALSE; -} - -// ================================================================ -// Non-interpolated percentiles (see also https://en.wikipedia.org/wiki/Percentile) - -// ---------------------------------------------------------------- -// OPTION 1: int index = p*n/100.0; -// -// x -// 0 -// 20 -// 40 -// 60 -// 80 -// 100 -// -// x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 60 x_p60 60 x_p70 80 x_p80 80 x_p90 100 x_p100 100 -// x_p01 0 x_p11 0 x_p21 20 x_p31 20 x_p41 40 x_p51 60 x_p61 60 x_p71 80 x_p81 80 x_p91 100 -// x_p02 0 x_p12 0 x_p22 20 x_p32 20 x_p42 40 x_p52 60 x_p62 60 x_p72 80 x_p82 80 x_p92 100 -// x_p03 0 x_p13 0 x_p23 20 x_p33 20 x_p43 40 x_p53 60 x_p63 60 x_p73 80 x_p83 80 x_p93 100 -// x_p04 0 x_p14 0 x_p24 20 x_p34 40 x_p44 40 x_p54 60 x_p64 60 x_p74 80 x_p84 100 x_p94 100 -// x_p05 0 x_p15 0 x_p25 20 x_p35 40 x_p45 40 x_p55 60 x_p65 60 x_p75 80 x_p85 100 x_p95 100 -// x_p06 0 x_p16 0 x_p26 20 x_p36 40 x_p46 40 x_p56 60 x_p66 60 x_p76 80 x_p86 100 x_p96 100 -// x_p07 0 x_p17 20 x_p27 20 x_p37 40 x_p47 40 x_p57 60 x_p67 80 x_p77 80 x_p87 100 x_p97 100 -// x_p08 0 x_p18 20 x_p28 20 x_p38 40 x_p48 40 x_p58 60 x_p68 80 x_p78 80 x_p88 100 x_p98 100 -// x_p09 0 x_p19 20 x_p29 20 x_p39 40 x_p49 40 x_p59 60 x_p69 80 x_p79 80 x_p89 100 x_p99 100 -// -// x -// 0 -// 25 -// 50 -// 75 -// 100 -// -// x_p00 0 x_p10 0 x_p20 25 x_p30 25 x_p40 50 x_p50 50 x_p60 75 x_p70 75 x_p80 100 x_p90 100 x_p100 100 -// x_p01 0 x_p11 0 x_p21 25 x_p31 25 x_p41 50 x_p51 50 x_p61 75 x_p71 75 x_p81 100 x_p91 100 -// x_p02 0 x_p12 0 x_p22 25 x_p32 25 x_p42 50 x_p52 50 x_p62 75 x_p72 75 x_p82 100 x_p92 100 -// x_p03 0 x_p13 0 x_p23 25 x_p33 25 x_p43 50 x_p53 50 x_p63 75 x_p73 75 x_p83 100 x_p93 100 -// x_p04 0 x_p14 0 x_p24 25 x_p34 25 x_p44 50 x_p54 50 x_p64 75 x_p74 75 x_p84 100 x_p94 100 -// x_p05 0 x_p15 0 x_p25 25 x_p35 25 x_p45 50 x_p55 50 x_p65 75 x_p75 75 x_p85 100 x_p95 100 -// x_p06 0 x_p16 0 x_p26 25 x_p36 25 x_p46 50 x_p56 50 x_p66 75 x_p76 75 x_p86 100 x_p96 100 -// x_p07 0 x_p17 0 x_p27 25 x_p37 25 x_p47 50 x_p57 50 x_p67 75 x_p77 75 x_p87 100 x_p97 100 -// x_p08 0 x_p18 0 x_p28 25 x_p38 25 x_p48 50 x_p58 50 x_p68 75 x_p78 75 x_p88 100 x_p98 100 -// x_p09 0 x_p19 0 x_p29 25 x_p39 25 x_p49 50 x_p59 50 x_p69 75 x_p79 75 x_p89 100 x_p99 100 -// -// ---------------------------------------------------------------- -// OPTION 2: int index = p*(n-1)/100.0; -// -// x -// 0 -// 20 -// 40 -// 60 -// 80 -// 100 -// -// x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 40 x_p60 60 x_p70 60 x_p80 80 x_p90 80 x_p100 100 -// x_p01 0 x_p11 0 x_p21 20 x_p31 20 x_p41 40 x_p51 40 x_p61 60 x_p71 60 x_p81 80 x_p91 80 -// x_p02 0 x_p12 0 x_p22 20 x_p32 20 x_p42 40 x_p52 40 x_p62 60 x_p72 60 x_p82 80 x_p92 80 -// x_p03 0 x_p13 0 x_p23 20 x_p33 20 x_p43 40 x_p53 40 x_p63 60 x_p73 60 x_p83 80 x_p93 80 -// x_p04 0 x_p14 0 x_p24 20 x_p34 20 x_p44 40 x_p54 40 x_p64 60 x_p74 60 x_p84 80 x_p94 80 -// x_p05 0 x_p15 0 x_p25 20 x_p35 20 x_p45 40 x_p55 40 x_p65 60 x_p75 60 x_p85 80 x_p95 80 -// x_p06 0 x_p16 0 x_p26 20 x_p36 20 x_p46 40 x_p56 40 x_p66 60 x_p76 60 x_p86 80 x_p96 80 -// x_p07 0 x_p17 0 x_p27 20 x_p37 20 x_p47 40 x_p57 40 x_p67 60 x_p77 60 x_p87 80 x_p97 80 -// x_p08 0 x_p18 0 x_p28 20 x_p38 20 x_p48 40 x_p58 40 x_p68 60 x_p78 60 x_p88 80 x_p98 80 -// x_p09 0 x_p19 0 x_p29 20 x_p39 20 x_p49 40 x_p59 40 x_p69 60 x_p79 60 x_p89 80 x_p99 80 -// -// x -// 0 -// 25 -// 50 -// 75 -// 100 -// -// x_p00 0 x_p10 0 x_p20 0 x_p30 25 x_p40 25 x_p50 50 x_p60 50 x_p70 50 x_p80 75 x_p90 75 x_p100 100 -// x_p01 0 x_p11 0 x_p21 0 x_p31 25 x_p41 25 x_p51 50 x_p61 50 x_p71 50 x_p81 75 x_p91 75 -// x_p02 0 x_p12 0 x_p22 0 x_p32 25 x_p42 25 x_p52 50 x_p62 50 x_p72 50 x_p82 75 x_p92 75 -// x_p03 0 x_p13 0 x_p23 0 x_p33 25 x_p43 25 x_p53 50 x_p63 50 x_p73 50 x_p83 75 x_p93 75 -// x_p04 0 x_p14 0 x_p24 0 x_p34 25 x_p44 25 x_p54 50 x_p64 50 x_p74 50 x_p84 75 x_p94 75 -// x_p05 0 x_p15 0 x_p25 25 x_p35 25 x_p45 25 x_p55 50 x_p65 50 x_p75 75 x_p85 75 x_p95 75 -// x_p06 0 x_p16 0 x_p26 25 x_p36 25 x_p46 25 x_p56 50 x_p66 50 x_p76 75 x_p86 75 x_p96 75 -// x_p07 0 x_p17 0 x_p27 25 x_p37 25 x_p47 25 x_p57 50 x_p67 50 x_p77 75 x_p87 75 x_p97 75 -// x_p08 0 x_p18 0 x_p28 25 x_p38 25 x_p48 25 x_p58 50 x_p68 50 x_p78 75 x_p88 75 x_p98 75 -// x_p09 0 x_p19 0 x_p29 25 x_p39 25 x_p49 25 x_p59 50 x_p69 50 x_p79 75 x_p89 75 x_p99 75 -// -// ---------------------------------------------------------------- -// OPTION 3: int index = (int)ceil(p*(n-1)/100.0); -// -// x -// 0 -// 20 -// 40 -// 60 -// 80 -// 100 -// -// x_p00 0 x_p10 20 x_p20 20 x_p30 40 x_p40 40 x_p50 60 x_p60 60 x_p70 80 x_p80 80 x_p90 100 x_p100 100 -// x_p01 20 x_p11 20 x_p21 40 x_p31 40 x_p41 60 x_p51 60 x_p61 80 x_p71 80 x_p81 100 x_p91 100 -// x_p02 20 x_p12 20 x_p22 40 x_p32 40 x_p42 60 x_p52 60 x_p62 80 x_p72 80 x_p82 100 x_p92 100 -// x_p03 20 x_p13 20 x_p23 40 x_p33 40 x_p43 60 x_p53 60 x_p63 80 x_p73 80 x_p83 100 x_p93 100 -// x_p04 20 x_p14 20 x_p24 40 x_p34 40 x_p44 60 x_p54 60 x_p64 80 x_p74 80 x_p84 100 x_p94 100 -// x_p05 20 x_p15 20 x_p25 40 x_p35 40 x_p45 60 x_p55 60 x_p65 80 x_p75 80 x_p85 100 x_p95 100 -// x_p06 20 x_p16 20 x_p26 40 x_p36 40 x_p46 60 x_p56 60 x_p66 80 x_p76 80 x_p86 100 x_p96 100 -// x_p07 20 x_p17 20 x_p27 40 x_p37 40 x_p47 60 x_p57 60 x_p67 80 x_p77 80 x_p87 100 x_p97 100 -// x_p08 20 x_p18 20 x_p28 40 x_p38 40 x_p48 60 x_p58 60 x_p68 80 x_p78 80 x_p88 100 x_p98 100 -// x_p09 20 x_p19 20 x_p29 40 x_p39 40 x_p49 60 x_p59 60 x_p69 80 x_p79 80 x_p89 100 x_p99 100 -// -// x -// 0 -// 25 -// 50 -// 75 -// 100 -// -// x_p00 0 x_p10 25 x_p20 25 x_p30 50 x_p40 50 x_p50 50 x_p60 75 x_p70 75 x_p80 100 x_p90 100 x_p100 100 -// x_p01 25 x_p11 25 x_p21 25 x_p31 50 x_p41 50 x_p51 75 x_p61 75 x_p71 75 x_p81 100 x_p91 100 -// x_p02 25 x_p12 25 x_p22 25 x_p32 50 x_p42 50 x_p52 75 x_p62 75 x_p72 75 x_p82 100 x_p92 100 -// x_p03 25 x_p13 25 x_p23 25 x_p33 50 x_p43 50 x_p53 75 x_p63 75 x_p73 75 x_p83 100 x_p93 100 -// x_p04 25 x_p14 25 x_p24 25 x_p34 50 x_p44 50 x_p54 75 x_p64 75 x_p74 75 x_p84 100 x_p94 100 -// x_p05 25 x_p15 25 x_p25 25 x_p35 50 x_p45 50 x_p55 75 x_p65 75 x_p75 75 x_p85 100 x_p95 100 -// x_p06 25 x_p16 25 x_p26 50 x_p36 50 x_p46 50 x_p56 75 x_p66 75 x_p76 100 x_p86 100 x_p96 100 -// x_p07 25 x_p17 25 x_p27 50 x_p37 50 x_p47 50 x_p57 75 x_p67 75 x_p77 100 x_p87 100 x_p97 100 -// x_p08 25 x_p18 25 x_p28 50 x_p38 50 x_p48 50 x_p58 75 x_p68 75 x_p78 100 x_p88 100 x_p98 100 -// x_p09 25 x_p19 25 x_p29 50 x_p39 50 x_p49 50 x_p59 75 x_p69 75 x_p79 100 x_p89 100 x_p99 100 -// -// ---------------------------------------------------------------- -// OPTION 4: int index = (int)ceil(-0.5 + p*(n-1)/100.0); -// -// x -// 0 -// 20 -// 40 -// 60 -// 80 -// 100 -// -// x_p00 0 x_p10 0 x_p20 20 x_p30 20 x_p40 40 x_p50 40 x_p60 60 x_p70 60 x_p80 80 x_p90 80 x_p100 100 -// x_p01 0 x_p11 20 x_p21 20 x_p31 40 x_p41 40 x_p51 60 x_p61 60 x_p71 80 x_p81 80 x_p91 100 -// x_p02 0 x_p12 20 x_p22 20 x_p32 40 x_p42 40 x_p52 60 x_p62 60 x_p72 80 x_p82 80 x_p92 100 -// x_p03 0 x_p13 20 x_p23 20 x_p33 40 x_p43 40 x_p53 60 x_p63 60 x_p73 80 x_p83 80 x_p93 100 -// x_p04 0 x_p14 20 x_p24 20 x_p34 40 x_p44 40 x_p54 60 x_p64 60 x_p74 80 x_p84 80 x_p94 100 -// x_p05 0 x_p15 20 x_p25 20 x_p35 40 x_p45 40 x_p55 60 x_p65 60 x_p75 80 x_p85 80 x_p95 100 -// x_p06 0 x_p16 20 x_p26 20 x_p36 40 x_p46 40 x_p56 60 x_p66 60 x_p76 80 x_p86 80 x_p96 100 -// x_p07 0 x_p17 20 x_p27 20 x_p37 40 x_p47 40 x_p57 60 x_p67 60 x_p77 80 x_p87 80 x_p97 100 -// x_p08 0 x_p18 20 x_p28 20 x_p38 40 x_p48 40 x_p58 60 x_p68 60 x_p78 80 x_p88 80 x_p98 100 -// x_p09 0 x_p19 20 x_p29 20 x_p39 40 x_p49 40 x_p59 60 x_p69 60 x_p79 80 x_p89 80 x_p99 100 -// -// x -// 0 -// 25 -// 50 -// 75 -// 100 -// -// x_p00 0 x_p10 0 x_p20 25 x_p30 25 x_p40 50 x_p50 50 x_p60 50 x_p70 75 x_p80 75 x_p90 100 x_p100 100 -// x_p01 0 x_p11 0 x_p21 25 x_p31 25 x_p41 50 x_p51 50 x_p61 50 x_p71 75 x_p81 75 x_p91 100 -// x_p02 0 x_p12 0 x_p22 25 x_p32 25 x_p42 50 x_p52 50 x_p62 50 x_p72 75 x_p82 75 x_p92 100 -// x_p03 0 x_p13 25 x_p23 25 x_p33 25 x_p43 50 x_p53 50 x_p63 75 x_p73 75 x_p83 75 x_p93 100 -// x_p04 0 x_p14 25 x_p24 25 x_p34 25 x_p44 50 x_p54 50 x_p64 75 x_p74 75 x_p84 75 x_p94 100 -// x_p05 0 x_p15 25 x_p25 25 x_p35 25 x_p45 50 x_p55 50 x_p65 75 x_p75 75 x_p85 75 x_p95 100 -// x_p06 0 x_p16 25 x_p26 25 x_p36 25 x_p46 50 x_p56 50 x_p66 75 x_p76 75 x_p86 75 x_p96 100 -// x_p07 0 x_p17 25 x_p27 25 x_p37 25 x_p47 50 x_p57 50 x_p67 75 x_p77 75 x_p87 75 x_p97 100 -// x_p08 0 x_p18 25 x_p28 25 x_p38 50 x_p48 50 x_p58 50 x_p68 75 x_p78 75 x_p88 100 x_p98 100 -// x_p09 0 x_p19 25 x_p29 25 x_p39 50 x_p49 50 x_p59 50 x_p69 75 x_p79 75 x_p89 100 x_p99 100 -// -// ---------------------------------------------------------------- -// CONCLUSION: -// * I like option 2 for its simplicity ... -// * ... but option 1 matches R's quantile with type=1. -// * (Note that Miller's interpolated percentiles match match R's quantile with type=7) -// ---------------------------------------------------------------- - -static unsigned long long compute_index_non_interpolated(unsigned long long n, double p) { - long long index = p*n/100.0; - //unsigned long long index = p*(n-1)/100.0; - //unsigned long long index = (unsigned long long)ceil(p*(n-1)/100.0); - //unsigned long long index = (unsigned long long)ceil(-0.5 + p*(n-1)/100.0); - if (index >= n) - index = n-1; - if (index < 0) - index = 0; - return (unsigned long long)index; -} - -static mv_t get_percentile_linearly_interpolated(mv_t* array, unsigned long long n, double p) { - double findex = (p/100.0)*(n-1); - if (findex < 0) - findex = 0; - unsigned long long iindex = (unsigned long long)floor(findex); - if (iindex >= n-1) { - return array[iindex]; - } else { - // array[iindex] + frac * (array[iindex+1] - array[iindex]); - mv_t frac = mv_from_float(findex - iindex); - mv_t* pa = &array[iindex]; - mv_t* pb = &array[iindex+1]; - mv_t diff = x_xx_minus_func(pb, pa); - mv_t prod = x_xx_times_func(&frac, &diff); - mv_t rv = x_xx_plus_func(pa, &prod); - return rv; - } -} - -// ---------------------------------------------------------------- -mv_t percentile_keeper_emit_non_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile) { - if (ppercentile_keeper->size == 0) { - return mv_absent(); - } - if (!ppercentile_keeper->sorted) { - qsort(ppercentile_keeper->data, ppercentile_keeper->size, sizeof(mv_t), mv_xx_comparator); - ppercentile_keeper->sorted = TRUE; - } - return ppercentile_keeper->data[compute_index_non_interpolated(ppercentile_keeper->size, percentile)]; -} - -mv_t percentile_keeper_emit_linearly_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile) { - if (ppercentile_keeper->size == 0) { - return mv_absent(); - } - if (!ppercentile_keeper->sorted) { - qsort(ppercentile_keeper->data, ppercentile_keeper->size, sizeof(mv_t), mv_xx_comparator); - ppercentile_keeper->sorted = TRUE; - } - return get_percentile_linearly_interpolated(ppercentile_keeper->data, ppercentile_keeper->size, percentile); -} - -// ---------------------------------------------------------------- -void percentile_keeper_print(percentile_keeper_t* ppercentile_keeper) { - printf("percentile_keeper dump:\n"); - for (unsigned long long i = 0; i < ppercentile_keeper->size; i++) { - mv_t* pa = &ppercentile_keeper->data[i]; - if (pa->type == MT_FLOAT) - printf("[%02llu] %.8lf\n", i, ppercentile_keeper->data[i].u.fltv); - else - printf("[%02llu] %8lld\n", i, ppercentile_keeper->data[i].u.intv); - } -} diff --git a/c/containers/percentile_keeper.h b/c/containers/percentile_keeper.h deleted file mode 100644 index 8fb616786..000000000 --- a/c/containers/percentile_keeper.h +++ /dev/null @@ -1,27 +0,0 @@ -// ================================================================ -// For mlr stats1 percentiles -// ================================================================ - -#ifndef PERCENTILE_KEEPER_H -#define PERCENTILE_KEEPER_H -#include "lib/mlrval.h" - -typedef struct _percentile_keeper_t { - mv_t* data; - unsigned long long size; - unsigned long long capacity; - int sorted; -} percentile_keeper_t; - -percentile_keeper_t* percentile_keeper_alloc(); -void percentile_keeper_free(percentile_keeper_t* ppercentile_keeper); -void percentile_keeper_ingest(percentile_keeper_t* ppercentile_keeper, mv_t value); - -typedef mv_t percentile_keeper_emitter_t(percentile_keeper_t* ppercentile_keeper, double percentile); -mv_t percentile_keeper_emit_non_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile); -mv_t percentile_keeper_emit_linearly_interpolated(percentile_keeper_t* ppercentile_keeper, double percentile); - -// For debug/test -void percentile_keeper_print(percentile_keeper_t* ppercentile_keeper); - -#endif // PERCENTILE_KEEPER_H diff --git a/c/containers/rslls.c b/c/containers/rslls.c deleted file mode 100644 index 05921d64d..000000000 --- a/c/containers/rslls.c +++ /dev/null @@ -1,95 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/rslls.h" - -// ---------------------------------------------------------------- -rslls_t* rslls_alloc() { - rslls_t* plist = mlr_malloc_or_die(sizeof(rslls_t)); - plist->phead = NULL; - plist->ptail = NULL; - plist->length = 0; - return plist; -} - -// ---------------------------------------------------------------- -void rslls_reset(rslls_t* plist) { - if (plist == NULL) - return; - if (plist->phead == NULL) - return; - rsllse_t* pnode = plist->phead; - while (pnode != NULL) { - if (pnode->free_flag & FREE_ENTRY_VALUE) - free(pnode->value); - pnode->value = NULL; - pnode = pnode->pnext; - } - plist->ptail = plist->phead; - plist->length = 0; -} - -// ---------------------------------------------------------------- -void rslls_free(rslls_t* plist) { - if (plist == NULL) - return; - rsllse_t* pnode = plist->phead; - while (pnode != NULL) { - rsllse_t* pdel = pnode; - pnode = pnode->pnext; - if (pdel->free_flag & FREE_ENTRY_VALUE) - free(pdel->value); - free(pdel); - } - plist->phead = NULL; - plist->ptail = 0; - plist->length = 0; - free(plist); -} - -// ---------------------------------------------------------------- -void rslls_append(rslls_t* plist, char* value, char free_flag, char quote_flag) { - if (plist->ptail == NULL) { - // First add on new list - rsllse_t* pnode = mlr_malloc_or_die(sizeof(rsllse_t)); - pnode->value = value; - pnode->free_flag = free_flag; - pnode->quote_flag = quote_flag; - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else if (plist->ptail->value == NULL) { - // Subsequent add on reused list - plist->ptail->value = value; - plist->ptail->free_flag = free_flag; - plist->ptail->quote_flag = quote_flag; - if (plist->ptail->pnext != NULL) - plist->ptail = plist->ptail->pnext; - } else { - // Append at end of list - rsllse_t* pnode = mlr_malloc_or_die(sizeof(rsllse_t)); - pnode->value = value; - pnode->free_flag = free_flag; - pnode->quote_flag = quote_flag; - pnode->pnext = NULL; - plist->ptail->pnext = pnode; - plist->ptail = pnode; - } - plist->length++; -} - -void rslls_print(rslls_t* plist) { - if (plist == NULL) { - printf("NULL"); - } else { - unsigned long long i = 0; - for (rsllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { - if (i > 0) - printf(","); - if (pe->value == NULL) - printf("NULL"); - else - printf("%s", pe->value); - } - } -} diff --git a/c/containers/rslls.h b/c/containers/rslls.h deleted file mode 100644 index 3e6cb02fa..000000000 --- a/c/containers/rslls.h +++ /dev/null @@ -1,55 +0,0 @@ -// ================================================================ -// Reusable singly linked list of string, with tail for append. -// -// Unlike slls which frees all memory on the destructor, this rslls class is -// designed to be reusable: there is a reset method which doesn't free all node -// structures. The context is the CSV-reader which extends a singly linked -// list for every data line. Now, all CSV lines have nominally the same number -// of fields (say N), so using slls, the CSV reader would be allocating and -// freeing N nodes on every line. Mingled in with other mallocs and frees, this -// results in needless heap fragmentation. Here, by contrast, as a performance -// optimization, the CSV reader can keep and reuse the nodes of a list, only -// changing the value-pointers on each CSV line. -// -// This means that while an slls iteration looks like -// -// for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { -// ... -// } -// -// an rslls iteration must also check length: -// -// unsigned long long i = 0; -// for (rsllse_t* pe = plist->phead; i < plist->length && pe != NULL; pe = pe->pnext, i++) { -// ... -// } -// -// ================================================================ - -#ifndef RSLLS_H -#define RSLLS_H - -#include -#include "lib/free_flags.h" - -typedef struct _rsllse_t { - char* value; - char free_flag; - char quote_flag; - struct _rsllse_t *pnext; -} rsllse_t; - -typedef struct _rslls_t { - rsllse_t *phead; - rsllse_t *ptail; - unsigned long long length; -} rslls_t; - -rslls_t* rslls_alloc(); -void rslls_reset(rslls_t* plist); -void rslls_free(rslls_t* plist); -void rslls_append(rslls_t* plist, char* value, char free_flag, char quote_flag); - -void rslls_print(rslls_t* plist); - -#endif // RSLLS_H diff --git a/c/containers/sllmv.c b/c/containers/sllmv.c deleted file mode 100644 index 1d88df5ec..000000000 --- a/c/containers/sllmv.c +++ /dev/null @@ -1,140 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/sllmv.h" - -// ---------------------------------------------------------------- -sllmv_t* sllmv_alloc() { - sllmv_t* plist = mlr_malloc_or_die(sizeof(sllmv_t)); - plist->phead = NULL; - plist->ptail = NULL; - plist->length = 0; - return plist; -} - -// ---------------------------------------------------------------- -void sllmv_free(sllmv_t* plist) { - if (plist == NULL) - return; - sllmve_t* pnode = plist->phead; - while (pnode != NULL) { - sllmve_t* pdel = pnode; - pnode = pnode->pnext; - if (pdel->free_flags & FREE_ENTRY_VALUE) - mv_free(&pdel->value); - free(pdel); - } - plist->phead = NULL; - plist->ptail = 0; - plist->length = 0; - - free(plist); -} - -// ---------------------------------------------------------------- -// Mlrvals are small structs and we do struct assignment from argument -// to list storage. For all but string mlrvals, this is a copy. -// For string mlrvals, it is pointer assignment without string duplication. -// This is intentional (for performance); callees are advised. - -static void sllmv_append(sllmv_t* plist, mv_t* pvalue, char free_flags) { - sllmve_t* pnode = mlr_malloc_or_die(sizeof(sllmve_t)); - pnode->value = *pvalue; // struct assignment - pnode->free_flags = free_flags; - if (plist->ptail == NULL) { - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else { - pnode->pnext = NULL; - plist->ptail->pnext = pnode; - plist->ptail = pnode; - } - plist->length++; -} - -void sllmv_append_with_free(sllmv_t* plist, mv_t* pvalue) { - sllmv_append(plist, pvalue, FREE_ENTRY_VALUE); -} - -void sllmv_append_no_free(sllmv_t* plist, mv_t* pvalue) { - sllmv_append(plist, pvalue, NO_FREE); -} - -static void sllmv_prepend(sllmv_t* plist, mv_t* pvalue, char free_flags) { - sllmve_t* pnode = mlr_malloc_or_die(sizeof(sllmve_t)); - pnode->value = *pvalue; // struct assignment - pnode->free_flags = free_flags; - pnode->value = *pvalue; // struct assignment - if (plist->ptail == NULL) { - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else { - pnode->pnext = plist->phead; - plist->phead = pnode; - } - plist->length++; -} - -void sllmv_prepend_with_free(sllmv_t* plist, mv_t* pvalue) { - sllmv_prepend(plist, pvalue, FREE_ENTRY_VALUE); -} - -void sllmv_prepend_no_free(sllmv_t* plist, mv_t* pvalue) { - sllmv_prepend(plist, pvalue, NO_FREE); -} - -// ---------------------------------------------------------------- -sllmv_t* sllmv_single_no_free(mv_t* pvalue) { - sllmv_t* psllmv = sllmv_alloc(); - sllmv_append_no_free(psllmv, pvalue); - return psllmv; -} - -sllmv_t* sllmv_single_with_free(mv_t* pvalue) { - sllmv_t* psllmv = sllmv_alloc(); - sllmv_append_with_free(psllmv, pvalue); - return psllmv; -} - -sllmv_t* sllmv_double_with_free(mv_t* pvalue1, mv_t* pvalue2) { - sllmv_t* psllmv = sllmv_alloc(); - sllmv_append_with_free(psllmv, pvalue1); - sllmv_append_with_free(psllmv, pvalue2); - return psllmv; -} - -sllmv_t* sllmv_triple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3) { - sllmv_t* psllmv = sllmv_alloc(); - sllmv_append_with_free(psllmv, pvalue1); - sllmv_append_with_free(psllmv, pvalue2); - sllmv_append_with_free(psllmv, pvalue3); - return psllmv; -} - -sllmv_t* sllmv_quadruple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3, mv_t* pvalue4) { - sllmv_t* psllmv = sllmv_alloc(); - sllmv_append_with_free(psllmv, pvalue1); - sllmv_append_with_free(psllmv, pvalue2); - sllmv_append_with_free(psllmv, pvalue3); - sllmv_append_with_free(psllmv, pvalue4); - return psllmv; -} - -// ---------------------------------------------------------------- -void sllmv_print(sllmv_t* plist) { - sllmve_tail_print(plist->phead); -} - -void sllmve_tail_print(sllmve_t* pnode) { - printf("["); - int i = 0; - for (sllmve_t* pe = pnode; pe != NULL; pe = pe->pnext, i++) { - char* string = mv_alloc_format_val(&pe->value); - if (i > 0) - printf(", "); - printf(" "); - printf("%s", string); - free(string); - } - printf("]\n"); -} diff --git a/c/containers/sllmv.h b/c/containers/sllmv.h deleted file mode 100644 index 4680bca39..000000000 --- a/c/containers/sllmv.h +++ /dev/null @@ -1,43 +0,0 @@ -// ================================================================ -// Singly-linked list of mlrval, with tail for append. -// Strings inside mlrvals are referenced, not copied. -// ================================================================ - -#ifndef SLLMV_H -#define SLLMV_H - -#include "../lib/mlrval.h" -#include "../lib/free_flags.h" - -// ---------------------------------------------------------------- -typedef struct _sllmve_t { - mv_t value; - char free_flags; - struct _sllmve_t *pnext; -} sllmve_t; - -typedef struct _sllmv_t { - sllmve_t *phead; - sllmve_t *ptail; - int length; -} sllmv_t; - -// ---------------------------------------------------------------- -sllmv_t* sllmv_alloc(); -void sllmv_free(sllmv_t* plist); -void sllmv_prepend_with_free(sllmv_t* plist, mv_t* pvalue); -void sllmv_prepend_no_free(sllmv_t* plist, mv_t* pvalue); -void sllmv_append_with_free(sllmv_t* plist, mv_t* pvalue); -void sllmv_append_no_free(sllmv_t* plist, mv_t* pvalue); - -sllmv_t* sllmv_single_no_free(mv_t* pvalue); -sllmv_t* sllmv_single_with_free(mv_t* pvalue); -sllmv_t* sllmv_double_with_free(mv_t* pvalue1, mv_t* pvalue2); -sllmv_t* sllmv_triple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3); -sllmv_t* sllmv_quadruple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3, mv_t* pvalue4); - -void sllmv_print(sllmv_t* plist); -void sllmve_tail_print(sllmve_t* pnode); - -#endif // SLLMV_H - diff --git a/c/containers/slls.c b/c/containers/slls.c deleted file mode 100644 index 5443ff232..000000000 --- a/c/containers/slls.c +++ /dev/null @@ -1,249 +0,0 @@ -#include -#include -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "containers/slls.h" - -// ---------------------------------------------------------------- -slls_t* slls_alloc() { - slls_t* plist = mlr_malloc_or_die(sizeof(slls_t)); - plist->phead = NULL; - plist->ptail = NULL; - plist->length = 0; - return plist; -} - -// ---------------------------------------------------------------- -int slls_size(slls_t* plist) { - return plist->length; -} - -// ---------------------------------------------------------------- -slls_t* slls_copy(slls_t* pold) { - slls_t* pnew = slls_alloc(); - for (sllse_t* pe = pold->phead; pe != NULL; pe = pe->pnext) - slls_append_with_free(pnew, mlr_strdup_or_die(pe->value)); - return pnew; -} - -// ---------------------------------------------------------------- -void slls_free(slls_t* plist) { - if (plist == NULL) - return; - sllse_t* pnode = plist->phead; - while (pnode != NULL) { - sllse_t* pdel = pnode; - pnode = pnode->pnext; - if (pdel->free_flag & FREE_ENTRY_VALUE) - free(pdel->value); - free(pdel); - } - plist->phead = NULL; - plist->ptail = 0; - plist->length = 0; - free(plist); -} - -// ---------------------------------------------------------------- -slls_t* slls_single_with_free(char* value) { - slls_t* pslls = slls_alloc(); - slls_append_with_free(pslls, value); - return pslls; -} - -// ---------------------------------------------------------------- -slls_t* slls_single_no_free(char* value) { - slls_t* pslls = slls_alloc(); - slls_append_no_free(pslls, value); - return pslls; -} - -// ---------------------------------------------------------------- -void slls_append(slls_t* plist, char* value, char free_flag) { - sllse_t* pnode = mlr_malloc_or_die(sizeof(sllse_t)); - pnode->value = value; - pnode->free_flag = free_flag; - - if (plist->ptail == NULL) { - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else { - pnode->pnext = NULL; - plist->ptail->pnext = pnode; - plist->ptail = pnode; - } - plist->length++; -} - -void slls_append_with_free(slls_t* plist, char* value) { - slls_append(plist, value, FREE_ENTRY_VALUE); -} -void slls_append_no_free(slls_t* plist, char* value) { - slls_append(plist, value, 0); -} - -// ---------------------------------------------------------------- -int slls_equals(slls_t* pa, slls_t* pb) { - if (pa->length != pb->length) - return FALSE; - sllse_t* pea = pa->phead; - sllse_t* peb = pb->phead; - for ( ; pea != NULL && peb != NULL; pea = pea->pnext, peb = peb->pnext) { - if (!streq(pea->value, peb->value)) - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -slls_t* slls_from_line(char* line, char ifs, int allow_repeat_ifs) { - slls_t* plist = slls_alloc(); - if (*line == 0) // empty string splits to empty list - return plist; - - char seps[2] = {ifs, 0}; - char* sep = &seps[0]; - int seplen = 1; - char* walker = line; - char* piece; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - mlr_rstrip(piece); // https://github.com/johnkerl/miller/issues/313 - slls_append_no_free(plist, piece); - } - - return plist; -} - -// ---------------------------------------------------------------- -// This is inefficient and intended only for debug use. -char* slls_join(slls_t* plist, char* ofs) { - unsigned long long len = 0; - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) - len += strlen(pe->value) + 1; // include space for ofs and null-terminator - char* output = mlr_malloc_or_die(len); - *output = 0; - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { - strcat(output, pe->value); - if (pe->pnext != NULL) { - strcat(output, ofs); - } - } - - return output; -} - -void slls_print(slls_t* plist) { - if (plist == NULL) { - printf("NULL"); - } else { - unsigned long long i = 0; - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { - if (i > 0) - printf(","); - printf("%s", pe->value); - } - } -} - -void slls_print_quoted(slls_t* plist) { - if (plist == NULL) { - printf("NULL"); - } else { - unsigned long long i = 0; - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext, i++) { - if (i > 0) - printf(" "); - printf("\"%s\"", pe->value); - } - } -} - -// ---------------------------------------------------------------- -void slls_reverse(slls_t* plist) { - if (plist->phead == NULL) - return; - - sllse_t* pnewhead = NULL; - sllse_t* pnewtail = plist->phead; - sllse_t* p = plist->phead; - sllse_t* q = p->pnext; - while (1) { - p->pnext = pnewhead; - pnewhead = p; - if (q == NULL) - break; - p = q; - q = p->pnext; - } - plist->phead = pnewhead; - plist->ptail = pnewtail; -} - -// ---------------------------------------------------------------- -int slls_hash_func(slls_t *plist) { - unsigned long hash = 5381; - int c; - - for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) { - char* str = pe->value; - while ((c = *str++) != 0) - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - // So that ["ab","c"] doesn't hash to the same as ["a","bc"]: - hash = ((hash << 5) + hash) + ','; - } - - return (int)hash; -} - -// ---------------------------------------------------------------- -int slls_compare_lexically(slls_t* pa, slls_t* pb) { - sllse_t* pe = pa->phead; - sllse_t* pf = pb->phead; - while (TRUE) { - if (pe == NULL && pf == NULL) - return 0; - if (pe == NULL) - return 1; - if (pf == NULL) - return -1; - int rc = strcmp(pe->value, pf->value); - if (rc != 0) - return rc; - pe = pe->pnext; - pf = pf->pnext; - } -} - -// ---------------------------------------------------------------- -static int sllse_vcmp(const void* pva, const void* pvb) { - const sllse_t** pa = (const sllse_t**)pva; - const sllse_t** pb = (const sllse_t**)pvb; - return strcmp((*pa)->value, (*pb)->value); -} - -void slls_sort(slls_t* plist) { - if (plist->length < 2) - return; - - unsigned long long i; - sllse_t* pe; - - // Copy to array - sllse_t** node_array = mlr_malloc_or_die(sizeof(sllse_t*) * plist->length); - for (i = 0, pe = plist->phead; pe != NULL; i++, pe = pe->pnext) - node_array[i] = pe; - - // Sort the array - qsort(node_array, plist->length, sizeof(sllse_t*), sllse_vcmp); - - // Copy back - plist->phead = node_array[0]; - plist->ptail = node_array[plist->length - 1]; - for (i = 1; i < plist->length; i++) { - node_array[i-1]->pnext = node_array[i]; - } - plist->ptail->pnext = NULL; - - free(node_array); -} diff --git a/c/containers/slls.h b/c/containers/slls.h deleted file mode 100644 index eeb72d1f2..000000000 --- a/c/containers/slls.h +++ /dev/null @@ -1,46 +0,0 @@ -// ================================================================ -// Singly linked list of string, with tail for append. -// ================================================================ - -#ifndef SLLS_H -#define SLLS_H - -#include -#include "lib/free_flags.h" - -typedef struct _sllse_t { - char* value; - char free_flag; - struct _sllse_t *pnext; -} sllse_t; - -typedef struct _slls_t { - sllse_t *phead; - sllse_t *ptail; - unsigned long long length; -} slls_t; - -slls_t* slls_alloc(); -int slls_size(slls_t* plist); -slls_t* slls_copy(slls_t* pold); -void slls_free(slls_t* plist); -slls_t* slls_single_with_free(char* value); -slls_t* slls_single_no_free(char* value); -void slls_append_with_free(slls_t* plist, char* value); -void slls_append_no_free(slls_t* plist, char* value); -void slls_append(slls_t* plist, char* value, char free_flag); -int slls_equals(slls_t* pa, slls_t* pb); -slls_t* slls_from_line(char* line, char ifs, int allow_repeat_ifs); - -void slls_reverse(slls_t* plist); -int slls_hash_func(slls_t *plist); -int slls_compare_lexically(slls_t* pa, slls_t* pb); - -void slls_sort(slls_t* plist); - -// Debug routines: -char* slls_join(slls_t* plist, char* ofs); -void slls_print(slls_t* plist); -void slls_print_quoted(slls_t* plist); - -#endif // SLLS_H diff --git a/c/containers/sllv.c b/c/containers/sllv.c deleted file mode 100644 index da61c8327..000000000 --- a/c/containers/sllv.c +++ /dev/null @@ -1,129 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/sllv.h" - -// ---------------------------------------------------------------- -sllv_t* sllv_alloc() { - sllv_t* plist = mlr_malloc_or_die(sizeof(sllv_t)); - plist->phead = NULL; - plist->ptail = NULL; - plist->length = 0; - return plist; -} - -// ---------------------------------------------------------------- -void sllv_free(sllv_t* plist) { - if (plist == NULL) - return; - sllve_t* pnode = plist->phead; - while (pnode != NULL) { - sllve_t* pdel = pnode; - pnode = pnode->pnext; - free(pdel); - } - plist->phead = NULL; - plist->ptail = 0; - plist->length = 0; - - free(plist); -} - -// ---------------------------------------------------------------- -sllv_t* sllv_single(void* pvvalue) { - sllv_t* psllv = sllv_alloc(); - sllv_append(psllv, pvvalue); - return psllv; -} - -// ---------------------------------------------------------------- -void sllv_append(sllv_t* plist, void* pvvalue) { - sllve_t* pnode = mlr_malloc_or_die(sizeof(sllve_t)); - pnode->pvvalue = pvvalue; - if (plist->ptail == NULL) { - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else { - pnode->pnext = NULL; - plist->ptail->pnext = pnode; - plist->ptail = pnode; - } - plist->length++; -} - -// ---------------------------------------------------------------- -void sllv_push(sllv_t* plist, void* pvvalue) { - sllve_t* pnode = mlr_malloc_or_die(sizeof(sllve_t)); - pnode->pvvalue = pvvalue; - if (plist->ptail == NULL) { - pnode->pnext = NULL; - plist->phead = pnode; - plist->ptail = pnode; - } else { - pnode->pnext = plist->phead; - plist->phead = pnode; - } - plist->length++; -} - -// ---------------------------------------------------------------- -void* sllv_pop(sllv_t* plist) { - // Zero entries in list - if (plist->phead == NULL) - return NULL; - - void* pval = plist->phead->pvvalue; - // One entry in list - if (plist->phead->pnext == NULL) { - free(plist->phead); - plist->phead = NULL; - plist->ptail = NULL; - plist->length = 0; - } - // Two or more entries in list - else { - sllve_t* pnext = plist->phead->pnext; - free(plist->phead); - plist->phead = pnext; - plist->length--; - } - - return pval; -} - -// ---------------------------------------------------------------- -void sllv_reverse(sllv_t* plist) { - if (plist->phead == NULL) - return; - - sllve_t* pnewhead = NULL; - sllve_t* pnewtail = plist->phead; - sllve_t* p = plist->phead; - sllve_t* q = p->pnext; - while (1) { - p->pnext = pnewhead; - pnewhead = p; - if (q == NULL) - break; - p = q; - q = p->pnext; - } - plist->phead = pnewhead; - plist->ptail = pnewtail; -} - -void sllv_transfer(sllv_t* pthis, sllv_t* pthat) { - if (pthat == NULL) - return; - if (pthis->phead == NULL) { - pthis->phead = pthat->phead; - pthis->ptail = pthat->ptail; - pthis->length = pthat->length; - } else if (pthat->phead != NULL) { - pthis->ptail->pnext = pthat->phead; - pthis->ptail = pthat->ptail; - pthis->length += pthat->length; - } - pthat->phead = NULL; - pthat->ptail = NULL; - pthat->length = 0; -} diff --git a/c/containers/sllv.h b/c/containers/sllv.h deleted file mode 100644 index 9b46e8f30..000000000 --- a/c/containers/sllv.h +++ /dev/null @@ -1,31 +0,0 @@ -// ================================================================ -// Singly-linked list of void-star, with tail for append. -// ================================================================ - -#ifndef SLLV_H -#define SLLV_H - -typedef struct _sllve_t { - void* pvvalue; - struct _sllve_t *pnext; -} sllve_t; - -typedef struct _sllv_t { - sllve_t *phead; - sllve_t *ptail; - unsigned long long length; -} sllv_t; - -sllv_t* sllv_alloc(); -void sllv_free(sllv_t* plist); -sllv_t* sllv_single(void* pvvalue); -void sllv_append(sllv_t* plist, void* pvvalue); // Add at tail -void sllv_push(sllv_t* plist, void* pvvalue); // Add at head -void* sllv_pop(sllv_t* plist); -void sllv_reverse(sllv_t* plist); -// Move all records from pthat to end of pthis. Upon return, pthat is the empty -// list. -void sllv_transfer(sllv_t* pthis, sllv_t* pthat); - -#endif // SLLV_H - diff --git a/c/containers/top_keeper.c b/c/containers/top_keeper.c deleted file mode 100644 index 2ef8db3b9..000000000 --- a/c/containers/top_keeper.c +++ /dev/null @@ -1,97 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/top_keeper.h" -#include "lib/mvfuncs.h" - -// ---------------------------------------------------------------- -top_keeper_t* top_keeper_alloc(int capacity) { - top_keeper_t* ptop_keeper = mlr_malloc_or_die(sizeof(top_keeper_t)); - ptop_keeper->top_values = mlr_malloc_or_die(capacity*sizeof(mv_t)); - ptop_keeper->top_precords = mlr_malloc_or_die(capacity*sizeof(lrec_t*)); - ptop_keeper->size = 0; - ptop_keeper->capacity = capacity; - return ptop_keeper; -} - -// ---------------------------------------------------------------- -void top_keeper_free(top_keeper_t* ptop_keeper) { - if (ptop_keeper == NULL) - return; - free(ptop_keeper->top_values); - free(ptop_keeper->top_precords); - ptop_keeper->top_values = NULL; - ptop_keeper->top_precords = NULL; - ptop_keeper->size = 0; - ptop_keeper->capacity = 0; - free(ptop_keeper); -} - -// ---------------------------------------------------------------- -// Cases: -// 1. array size < capacity -// * find destidx -// * if destidx == size -// put it there -// else -// shift down & insert -// increment size -// -// 2. array size == capacity -// * find destidx -// * if destidx == size -// discard -// else -// shift down & insert - -// capacity = 10, size = 6, destidx = 3 capacity = 10, size = 10, destidx = 3 -// [0 #] [0 #] [0 #] [0 #] -// [1 #] [1 #] [1 #] [1 #] -// [2 #] [2 #] [2 #] [2 #] -// [3 #]* [3 X] [3 #]* [3 X] -// [4 #] [4 #] [4 #] [4 #] -// [5 #] [5 #] [5 #] [5 #] -// [6 ] [6 #] [6 #] [6 #] -// [7 ] [7 ] [7 #] [7 #] -// [8 ] [8 ] [8 #] [8 #] -// [9 ] [9 ] [9 #] [9 #] - -// Our caller, mapper_top, feeds us records. We keep them or free them. -void top_keeper_add(top_keeper_t* ptop_keeper, mv_t value, lrec_t* prec) { - int destidx = mlr_bsearch_mv_n_for_insert(ptop_keeper->top_values, ptop_keeper->size, &value); - if (ptop_keeper->size < ptop_keeper->capacity) { - for (int i = ptop_keeper->size-1; i >= destidx; i--) { - ptop_keeper->top_values[i+1] = ptop_keeper->top_values[i]; - ptop_keeper->top_precords[i+1] = ptop_keeper->top_precords[i]; - } - ptop_keeper->top_values[destidx] = value; - ptop_keeper->top_precords[destidx] = prec; - ptop_keeper->size++; - } else { - if (destidx >= ptop_keeper->capacity) { - lrec_free(prec); - return; - } - lrec_free(ptop_keeper->top_precords[ptop_keeper->size-1]); - for (int i = ptop_keeper->size-2; i >= destidx; i--) { - ptop_keeper->top_values[i+1] = ptop_keeper->top_values[i]; - ptop_keeper->top_precords[i+1] = ptop_keeper->top_precords[i]; - } - ptop_keeper->top_values[destidx] = value; - ptop_keeper->top_precords[destidx] = prec; - } -} - -// ---------------------------------------------------------------- -void top_keeper_print(top_keeper_t* ptop_keeper) { - printf("top_keeper dump:\n"); - for (int i = 0; i < ptop_keeper->size; i++) { - mv_t* pvalue = &ptop_keeper->top_values[i]; - if (pvalue->type == MT_FLOAT) - printf("[%02d] %.8lf\n", i, pvalue->u.fltv); - else - printf("[%02d] %lld\n", i, pvalue->u.intv); - } - for (int i = ptop_keeper->size; i < ptop_keeper->capacity; i++) - printf("[%02d] ---\n", i); -} diff --git a/c/containers/top_keeper.h b/c/containers/top_keeper.h deleted file mode 100644 index 866dd9e0d..000000000 --- a/c/containers/top_keeper.h +++ /dev/null @@ -1,24 +0,0 @@ -// ================================================================ -// Data structure for mlr top: just a decorated array. -// ================================================================ - -#ifndef TOP_KEEPER_H -#define TOP_KEEPER_H -#include "lib/mlrval.h" -#include "containers/lrec.h" - -typedef struct _top_keeper_t { - mv_t* top_values; - lrec_t** top_precords; - int size; - int capacity; -} top_keeper_t; - -top_keeper_t* top_keeper_alloc(int capacity); -void top_keeper_free(top_keeper_t* ptop_keeper); -void top_keeper_add(top_keeper_t* ptop_keeper, mv_t value, lrec_t* prec); - -// For debug/test -void top_keeper_print(top_keeper_t* ptop_keeper); - -#endif // TOP_KEEPER_H diff --git a/c/containers/type_decl.c b/c/containers/type_decl.c deleted file mode 100644 index ad65f676c..000000000 --- a/c/containers/type_decl.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "containers/type_decl.h" - -// ---------------------------------------------------------------- -char* type_mask_to_desc(int type_mask) { - switch(type_mask) { - case TYPE_MASK_ERROR: return "error"; break; - case TYPE_MASK_ANY: return "any"; break; - case TYPE_MASK_ABSENT: return "absent"; break; - case TYPE_MASK_EMPTY: return "empty"; break; - case TYPE_MASK_STRING: return "string"; break; - case TYPE_MASK_INT: return "int"; break; - case TYPE_MASK_FLOAT: return "float"; break; - case TYPE_MASK_BOOLEAN: return "boolean"; break; - case TYPE_MASK_NUMERIC: return "numeric"; break; - case TYPE_MASK_MAP: return "map"; break; - default: return "???"; break; - } -} - -// ---------------------------------------------------------------- -int type_mask_from_name(char* name) { - if (streq(name, "error")) { return TYPE_MASK_ERROR; } - else if (streq(name, "absent")) { return TYPE_MASK_ABSENT; } - else if (streq(name, "empty")) { return TYPE_MASK_EMPTY; } - else if (streq(name, "string")) { return TYPE_MASK_STRING; } - else if (streq(name, "str")) { return TYPE_MASK_STRING; } - else if (streq(name, "int")) { return TYPE_MASK_INT; } - else if (streq(name, "float")) { return TYPE_MASK_FLOAT; } - else if (streq(name, "numeric")) { return TYPE_MASK_NUMERIC; } - else if (streq(name, "num")) { return TYPE_MASK_NUMERIC; } - else if (streq(name, "boolean")) { return TYPE_MASK_BOOLEAN; } - else if (streq(name, "bool")) { return TYPE_MASK_BOOLEAN; } - else if (streq(name, "map")) { return TYPE_MASK_MAP; } - else if (streq(name, "var")) { return TYPE_MASK_ANY; } - else if (streq(name, "any")) { return TYPE_MASK_ANY; } - - else { - MLR_INTERNAL_CODING_ERROR(); - return 0; // not reached - } -} diff --git a/c/containers/type_decl.h b/c/containers/type_decl.h deleted file mode 100644 index 6e2f10594..000000000 --- a/c/containers/type_decl.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef TYPE_DECL_H -#define TYPE_DECL_H - -#include "../lib/mlrval.h" - -// ---------------------------------------------------------------- -// These use the MT defines from mlrval.h, except that map-types (mlhmmv.h) -// are outside of mlrval.h. -#define TYPE_MASK_ERROR (1 << MT_ERROR) -#define TYPE_MASK_ABSENT (1 << MT_ABSENT) -#define TYPE_MASK_EMPTY (1 << MT_EMPTY) -#define TYPE_MASK_STRING ((1 << MT_STRING) | (1 << MT_EMPTY)) -#define TYPE_MASK_INT (1 << MT_INT) -#define TYPE_MASK_FLOAT (1 << MT_FLOAT) -#define TYPE_MASK_NUMERIC (TYPE_MASK_INT | TYPE_MASK_FLOAT) -#define TYPE_MASK_BOOLEAN (1 << MT_BOOLEAN) -#define TYPE_MASK_MAP (1 << MT_DIM) -#define TYPE_MASK_ANY (~0) - -// ---------------------------------------------------------------- -char* type_mask_to_desc(int type_mask); -static inline int type_mask_from_mv(mv_t* pmv) { - return 1 << pmv->type; -} -int type_mask_from_name(char* name); - -#endif // TYPE_DECL_H diff --git a/c/containers/xvfuncs.c b/c/containers/xvfuncs.c deleted file mode 100644 index ec9707763..000000000 --- a/c/containers/xvfuncs.c +++ /dev/null @@ -1,492 +0,0 @@ -#include "../lib/mlr_arch.h" -#include "../lib/string_builder.h" -#include "../lib/free_flags.h" -#include "../containers/xvfuncs.h" - -// ---------------------------------------------------------------- -boxed_xval_t b_xx_haskey_xfunc(boxed_xval_t* pmapval, boxed_xval_t* pkeyval) { - boxed_xval_t rv; - if (pmapval->xval.is_terminal) { - rv = box_ephemeral_val(mv_from_bool(FALSE)); - } else if (!pkeyval->xval.is_terminal) { - rv = box_ephemeral_val(mv_from_bool(FALSE)); - } else { - rv = box_ephemeral_val( - mv_from_bool( - mlhmmv_level_has_key(pmapval->xval.pnext_level, &pkeyval->xval.terminal_mlrval) - ) - ); - } - if (pmapval->is_ephemeral) - mlhmmv_xvalue_free(&pmapval->xval); - if (pkeyval->is_ephemeral) - mlhmmv_xvalue_free(&pkeyval->xval); - return rv; -} - -// ---------------------------------------------------------------- -boxed_xval_t i_x_length_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv; - if (pbxval1->xval.is_terminal) { - rv = box_ephemeral_val( - mv_from_int(1) - ); - } else { - rv = box_ephemeral_val( - mv_from_int( - pbxval1->xval.pnext_level->num_occupied - ) - ); - } - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -// ---------------------------------------------------------------- -static int depth_aux(mlhmmv_xvalue_t* pxval) { - if (pxval->is_terminal) { - return 0; - } else { - int max = 0; - for (mlhmmv_level_entry_t* pe = pxval->pnext_level->phead; pe != NULL; pe = pe->pnext) { - int curr = depth_aux(&pe->level_xvalue); - max = (curr > max) ? curr : max; - } - return 1 + max; - } -} - -boxed_xval_t i_x_depth_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = box_ephemeral_val( - mv_from_int( - depth_aux(&pbxval1->xval) - ) - ); - - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - - return rv; -} - -// ---------------------------------------------------------------- -static int leafcount_aux(mlhmmv_xvalue_t* pxval) { - if (pxval->is_terminal) { - return 1; - } else { - int sum = 0; - for (mlhmmv_level_entry_t* pe = pxval->pnext_level->phead; pe != NULL; pe = pe->pnext) { - sum += leafcount_aux(&pe->level_xvalue); - } - return sum; - } -} - -boxed_xval_t i_x_leafcount_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = box_ephemeral_val( - mv_from_int( - leafcount_aux(&pbxval1->xval) - ) - ); - - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - - return rv; -} - -// ---------------------------------------------------------------- -boxed_xval_t variadic_mapsum_xfunc(boxed_xval_t* pbxvals, int nxvals) { - // xxx to-do optmization: transfer arg 1 if it's ephemeral - mlhmmv_xvalue_t sum = mlhmmv_xvalue_alloc_empty_map(); - for (int i = 0; i < nxvals; i++) { - if (pbxvals[i].xval.is_terminal) - continue; - mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - // xxx do refs/copies correctly - mlhmmv_xvalue_t xval_copy = mlhmmv_xvalue_copy(&pe->level_xvalue); - sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_put_xvalue(sum.pnext_level, &e, &xval_copy); - } - } - boxed_xval_t rv = box_ephemeral_xval(sum); - - for (int i = 0; i < nxvals; i++) { - if (pbxvals[i].is_ephemeral) - mlhmmv_xvalue_free(&pbxvals[i].xval); - } - - return rv; -} - -// ---------------------------------------------------------------- -boxed_xval_t variadic_mapdiff_xfunc(boxed_xval_t* pbxvals, int nxvals) { - mlhmmv_xvalue_t diff = mlhmmv_xvalue_alloc_empty_map(); - if (nxvals == 0) { - return box_ephemeral_xval(diff); - } - // xxx to-do optmization: transfer arg 1 if it's ephemeral - - // xxx methodize - int i = 0; - if (!pbxvals[i].xval.is_terminal) { - mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - // xxx do refs/copies correctly - mlhmmv_xvalue_t xval_copy = mlhmmv_xvalue_copy(&pe->level_xvalue); - sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_put_xvalue(diff.pnext_level, &e, &xval_copy); - } - if (pbxvals[i].is_ephemeral) - mlhmmv_xvalue_free(&pbxvals[i].xval); - } - - for (i = 1; i < nxvals; i++) { - if (!pbxvals[i].xval.is_terminal) { - mlhmmv_level_t* plevel = pbxvals[i].xval.pnext_level; - for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) { - sllmve_t e = (sllmve_t) { .value = pe->level_key, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_remove(diff.pnext_level, &e); - } - } - if (pbxvals[i].is_ephemeral) - mlhmmv_xvalue_free(&pbxvals[i].xval); - } - - return box_ephemeral_xval(diff); -} - -// ---------------------------------------------------------------- -// Precondition (validated before we're called): there is at least one argument -// which is the map to be unkeyed. -boxed_xval_t variadic_mapexcept_xfunc( - boxed_xval_t* pbxvals, - int nxvals) -{ - MLR_INTERNAL_CODING_ERROR_IF(nxvals < 1); - - boxed_xval_t* pinbxval = &pbxvals[0]; - boxed_xval_t outbxval = box_ephemeral_xval(mlhmmv_xvalue_copy(&pinbxval->xval)); - - if (pinbxval->xval.is_terminal) { // non-map - return outbxval; - } - - mlhmmv_level_t* poutlevel = outbxval.xval.pnext_level; - - for (int i = 1; i < nxvals; i++) { - if (pbxvals[i].xval.is_terminal) { - mv_t* pkey = &pbxvals[i].xval.terminal_mlrval; - sllmve_t e = (sllmve_t) { .value = *pkey, .free_flags = 0, .pnext = NULL }; - mlhmmv_level_remove(poutlevel, &e); - } - if (pbxvals[i].is_ephemeral) - mlhmmv_xvalue_free(&pbxvals[i].xval); - } - - return outbxval; -} - -// ---------------------------------------------------------------- -// Precondition (validated before we're called): there is at least one argument -// which is the map to be unkeyed. -boxed_xval_t variadic_mapselect_xfunc( - boxed_xval_t* pbxvals, - int nxvals) -{ - MLR_INTERNAL_CODING_ERROR_IF(nxvals < 1); - - boxed_xval_t* pinbxval = &pbxvals[0]; - boxed_xval_t outbxval = box_ephemeral_xval(mlhmmv_xvalue_alloc_empty_map()); - - if (pinbxval->xval.is_terminal) { // non-map - return outbxval; - } - - mlhmmv_level_t* pinlevel = pinbxval->xval.pnext_level; - mlhmmv_level_t* poutlevel = outbxval.xval.pnext_level; - - for (int i = 1; i < nxvals; i++) { - - if (pbxvals[i].xval.is_terminal) { - mv_t* pkey = &pbxvals[i].xval.terminal_mlrval; - sllmv_t* pkeylist = sllmv_single_no_free(pkey); - int unused = 0; - mlhmmv_xvalue_t* pval = mlhmmv_level_look_up_and_ref_xvalue(pinlevel, pkeylist, &unused); - if (pval != NULL) { - mlhmmv_xvalue_t copyval = mlhmmv_xvalue_copy(pval); - // mlhmmv_level_put_xvalue copies key not value - mlhmmv_level_put_xvalue(poutlevel, pkeylist->phead, ©val); - } - sllmv_free(pkeylist); - } - if (pbxvals[i].is_ephemeral) - mlhmmv_xvalue_free(&pbxvals[i].xval); - - } - - return outbxval; -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that both arguments are string-valued terminals. -boxed_xval_t m_ss_splitnv_xfunc(boxed_xval_t* pstringval, boxed_xval_t* psepval) { - mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); - char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); - char* sep = psepval->xval.terminal_mlrval.u.strv; - int seplen = strlen(sep); - - int i = 1; - char* walker = input; - char* piece; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - mv_t key = mv_from_int(i); - mv_t val = mv_ref_type_infer_string_or_float_or_int(piece); - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - i++; - } - free(input); - - if (pstringval->is_ephemeral) - mlhmmv_xvalue_free(&pstringval->xval); - if (psepval->is_ephemeral) - mlhmmv_xvalue_free(&psepval->xval); - - return box_ephemeral_xval(map); -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that both arguments are string-valued terminals. -boxed_xval_t m_ss_splitnvx_xfunc(boxed_xval_t* pstringval, boxed_xval_t* psepval) { - mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); - char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); - char* sep = psepval->xval.terminal_mlrval.u.strv; - int seplen = strlen(sep); - - int i = 1; - char* walker = input; - char* piece; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - mv_t key = mv_from_int(i); - // xxx do not ref here - mv_t val = mv_ref_type_infer_string(piece); - // xxx make clear the copy/ref semantics for mlhmmv put with scalar value. - // at the moment this does an mv_copy. - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - i++; - } - - free(input); - - if (pstringval->is_ephemeral) - mlhmmv_xvalue_free(&pstringval->xval); - if (psepval->is_ephemeral) - mlhmmv_xvalue_free(&psepval->xval); - - return box_ephemeral_xval(map); -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that all arguments are string-valued terminals. -boxed_xval_t m_sss_splitkv_xfunc(boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { - mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); - char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); - char* listsep = plistsepval->xval.terminal_mlrval.u.strv; - char* pairsep = ppairsepval->xval.terminal_mlrval.u.strv; - int listseplen = strlen(listsep); - int pairseplen = strlen(pairsep); - - int i = 1; - char* walker = input; - char* piece; - while ((piece = mlr_strmsep(&walker, listsep, listseplen)) != NULL) { - char* pair = piece; - char* left = mlr_strmsep(&pair, pairsep, pairseplen); - if (pair == NULL) { - mv_t key = mv_from_int(i); - mv_t val = mv_ref_type_infer_string_or_float_or_int(left); - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - } else { - char* right = mlr_strmsep(&pair, pairsep, pairseplen); - mv_t key = mv_from_string(left, NO_FREE); - mv_t val = mv_ref_type_infer_string_or_float_or_int(right); - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - } - i++; - } - - free(input); - - if (pstringval->is_ephemeral) - mlhmmv_xvalue_free(&pstringval->xval); - if (ppairsepval->is_ephemeral) - mlhmmv_xvalue_free(&ppairsepval->xval); - if (plistsepval->is_ephemeral) - mlhmmv_xvalue_free(&plistsepval->xval); - - return box_ephemeral_xval(map); -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that all arguments are string-valued terminals. -boxed_xval_t m_sss_splitkvx_xfunc(boxed_xval_t* pstringval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { - mlhmmv_xvalue_t map = mlhmmv_xvalue_alloc_empty_map(); - char* input = mlr_strdup_or_die(pstringval->xval.terminal_mlrval.u.strv); - char* listsep = plistsepval->xval.terminal_mlrval.u.strv; - char* pairsep = ppairsepval->xval.terminal_mlrval.u.strv; - int listseplen = strlen(listsep); - int pairseplen = strlen(pairsep); - - int i = 1; - char* walker = input; - char* piece; - while ((piece = mlr_strmsep(&walker, listsep, listseplen)) != NULL) { - char* pair = piece; - char* left = mlr_strmsep(&pair, pairsep, pairseplen); - if (pair == NULL) { - mv_t key = mv_from_int(i); - mv_t val = mv_ref_type_infer_string(left); - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - } else { - char* right = mlr_strmsep(&pair, pairsep, pairseplen); - mv_t key = mv_from_string(left, NO_FREE); - mv_t val = mv_ref_type_infer_string(right); - mlhmmv_level_put_terminal_singly_keyed(map.pnext_level, &key, &val); - } - i++; - } - - free(input); - - if (pstringval->is_ephemeral) - mlhmmv_xvalue_free(&pstringval->xval); - if (ppairsepval->is_ephemeral) - mlhmmv_xvalue_free(&ppairsepval->xval); - if (plistsepval->is_ephemeral) - mlhmmv_xvalue_free(&plistsepval->xval); - - return box_ephemeral_xval(map); -} - -// ---------------------------------------------------------------- -#define SB_JOIN_ALLOC_SIZE 128 - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that the separator is a string-valued terminal. -boxed_xval_t s_ms_joink_xfunc(boxed_xval_t* pmapval, boxed_xval_t* psepval) { - if (pmapval->xval.is_terminal) { - return box_ephemeral_val(mv_absent()); - } - - string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); - for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { - // The string_builder object will copy the string so we can point into source string space, - // without a copy here, when possible. - char free_flags = 0; - char* sval = mv_maybe_alloc_format_val(&pentry->level_key, &free_flags); - sb_append_string(psb, sval); - if (free_flags) - free(sval); - if (pentry->pnext != NULL) { - sb_append_string(psb, psepval->xval.terminal_mlrval.u.strv); - } - } - - char* sretval = sb_finish(psb); - sb_free(psb); - - if (pmapval->is_ephemeral) - mlhmmv_xvalue_free(&pmapval->xval); - if (psepval->is_ephemeral) - mlhmmv_xvalue_free(&psepval->xval); - - return box_ephemeral_val( - mv_from_string(sretval, FREE_ENTRY_VALUE) - ); -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that the separator is a string-valued terminal. -boxed_xval_t s_ms_joinv_xfunc(boxed_xval_t* pmapval, boxed_xval_t* psepval) { - if (pmapval->xval.is_terminal) { - return box_ephemeral_val(mv_absent()); - } - - string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); - for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { - if (pentry->level_xvalue.is_terminal) { - // The string_builder object will copy the string so we can point into source string space, - // without a copy here, when possible. - char free_flags = 0; - char* sval = mv_maybe_alloc_format_val(&pentry->level_xvalue.terminal_mlrval, &free_flags); - sb_append_string(psb, sval); - if (free_flags) - free(sval); - if (pentry->pnext != NULL) { - sb_append_string(psb, psepval->xval.terminal_mlrval.u.strv); - } - } - } - - char* sretval = sb_finish(psb); - sb_free(psb); - - if (pmapval->is_ephemeral) - mlhmmv_xvalue_free(&pmapval->xval); - if (psepval->is_ephemeral) - mlhmmv_xvalue_free(&psepval->xval); - - return box_ephemeral_val( - mv_from_string(sretval, FREE_ENTRY_VALUE) - ); -} - -// ---------------------------------------------------------------- -// Precondition: the caller has ensured that the separators are string-valued terminals. -boxed_xval_t s_mss_joinkv_xfunc(boxed_xval_t* pmapval, boxed_xval_t* ppairsepval, boxed_xval_t* plistsepval) { - if (pmapval->xval.is_terminal) { - return box_ephemeral_val(mv_absent()); - } - - string_builder_t* psb = sb_alloc(SB_JOIN_ALLOC_SIZE); - for (mlhmmv_level_entry_t* pentry = pmapval->xval.pnext_level->phead; pentry != NULL; pentry = pentry->pnext) { - if (pentry->level_xvalue.is_terminal) { - // The string_builder object will copy the string so we can point into source string space, - // without a copy here, when possible. - - char kfree_flags = 0; - char* skval = mv_maybe_alloc_format_val(&pentry->level_key, &kfree_flags); - sb_append_string(psb, skval); - if (kfree_flags) - free(skval); - - sb_append_string(psb, ppairsepval->xval.terminal_mlrval.u.strv); - - char vfree_flags = 0; - char* svval = mv_maybe_alloc_format_val(&pentry->level_xvalue.terminal_mlrval, &vfree_flags); - sb_append_string(psb, svval); - if (vfree_flags) - free(svval); - - if (pentry->pnext != NULL) { - sb_append_string(psb, plistsepval->xval.terminal_mlrval.u.strv); - } - } - } - - char* sretval = sb_finish(psb); - sb_free(psb); - - if (pmapval->is_ephemeral) - mlhmmv_xvalue_free(&pmapval->xval); - if (ppairsepval->is_ephemeral) - mlhmmv_xvalue_free(&ppairsepval->xval); - if (plistsepval->is_ephemeral) - mlhmmv_xvalue_free(&plistsepval->xval); - - return box_ephemeral_val( - mv_from_string(sretval, FREE_ENTRY_VALUE) - ); -} diff --git a/c/containers/xvfuncs.h b/c/containers/xvfuncs.h deleted file mode 100644 index 122469aca..000000000 --- a/c/containers/xvfuncs.h +++ /dev/null @@ -1,352 +0,0 @@ -#ifndef XVFUNCS_H -#define XVFUNCS_H - -// ================================================================ -// Functions on extended values, namely, scalars and maps. -// -// NOTE ON EPHEMERALITY OF MAPS: -// -// Most functions here free their inputs. E.g. for string concatenation, the -// output which is returned is the concatenation of the two inputs which are -// freed. This is true for functions on scalars as well as functions on maps -// (the latter in this header file). -// -// However, maps are treated differently from scalars in that some maps are -// referenced, rather than copied, within the concrete syntax tree. E.g. in -// 'mapsum({3:4},@v)', the map literal {3:4} is ephemeral to the expression and -// must be freed during evaluation, but the @v part is referenced to the @v data -// structure and is only copied on write. The boxed_xval_t's is_ephemeral flag -// tracks the difference between the two cases. -// ================================================================ - -#include "../lib/mlrutil.h" -#include "../containers/mlhmmv.h" -#include "../containers/boxed_xval.h" - -// ---------------------------------------------------------------- -typedef boxed_xval_t xv_variadic_func_t( - boxed_xval_t* pbxvals, - int nxvals); - -typedef boxed_xval_t xv_zary_func_t(); - -typedef boxed_xval_t xv_unary_func_t( - boxed_xval_t* pbxval1); - -typedef boxed_xval_t xv_binary_func_t( - boxed_xval_t* pbxval1, - boxed_xval_t* pbxval2); - -typedef boxed_xval_t xv_ternary_func_t( - boxed_xval_t* pbxval1, - boxed_xval_t* pbxval2, - boxed_xval_t* pbxval3); - -// ---------------------------------------------------------------- -// Most functions here free their inputs. E.g. for string concatenation, the -// output which is returned is the concatenation of the two inputs which are -// freed. For another example, is_string frees its input and returns the boolean -// value of the result. These functions, by contrast, only return a boolean for -// the outcome of the test but do not free the inputs. The intended usage is for -// type-assertion checks. E.g. in '$b = asserting_string($a)', if $a is a -// string it is assigned to $b, else an error is thrown. - -static inline boxed_xval_t b_x_is_present_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !pbxval1->xval.is_terminal || mv_is_present(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_absent_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_absent(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_map_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !pbxval1->xval.is_terminal - ) - ); -} - -static inline boxed_xval_t b_x_is_not_map_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal - ) - ); -} - -static inline boxed_xval_t b_x_is_numeric_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_numeric(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_int_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_int(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_float_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_float(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_boolean_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_boolean(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_string_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_string(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_null_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_null(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_not_null_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !(pbxval1->xval.is_terminal && mv_is_null(&pbxval1->xval.terminal_mlrval)) - ) - ); -} - -static inline boxed_xval_t b_x_is_empty_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - pbxval1->xval.is_terminal && mv_is_empty(&pbxval1->xval.terminal_mlrval) - ) - ); -} - -static inline boxed_xval_t b_x_is_not_empty_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !(pbxval1->xval.is_terminal && mv_is_empty(&pbxval1->xval.terminal_mlrval)) - ) - ); -} - -static inline boxed_xval_t b_x_is_empty_map_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !pbxval1->xval.is_terminal && pbxval1->xval.pnext_level->num_occupied == 0 - ) - ); -} - -static inline boxed_xval_t b_x_is_nonempty_map_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_bool( - !pbxval1->xval.is_terminal && pbxval1->xval.pnext_level->num_occupied != 0 - ) - ); -} - -static inline boxed_xval_t s_x_typeof_no_free_xfunc(boxed_xval_t* pbxval1) { - return box_ephemeral_val( - mv_from_string( - mlhmmv_xvalue_describe_type_simple(&pbxval1->xval), NO_FREE - ) - ); -} - -// ---------------------------------------------------------------- -static inline boxed_xval_t b_x_is_present_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_present_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_absent_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_absent_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_map_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_map_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_not_map_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_not_map_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_numeric_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_numeric_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_int_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_int_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_float_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_float_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_boolean_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_boolean_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_string_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_string_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_null_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_null_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_not_null_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_not_null_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_empty_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_empty_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_not_empty_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_not_empty_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_empty_map_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_empty_map_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t b_x_is_nonempty_map_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = b_x_is_nonempty_map_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -static inline boxed_xval_t s_x_typeof_xfunc(boxed_xval_t* pbxval1) { - boxed_xval_t rv = s_x_typeof_no_free_xfunc(pbxval1); - if (pbxval1->is_ephemeral) - mlhmmv_xvalue_free(&pbxval1->xval); - return rv; -} - -// ---------------------------------------------------------------- -boxed_xval_t b_xx_haskey_xfunc( - boxed_xval_t* pmapval, - boxed_xval_t* pkeyval); - -boxed_xval_t i_x_length_xfunc( - boxed_xval_t* pbxval1); - -boxed_xval_t i_x_depth_xfunc( - boxed_xval_t* pbxval1); - -boxed_xval_t i_x_leafcount_xfunc( - boxed_xval_t* pbxval1); - -boxed_xval_t variadic_mapsum_xfunc( - boxed_xval_t* pbxvals, int nxvals); - -boxed_xval_t variadic_mapdiff_xfunc( - boxed_xval_t* pbxvals, int nxvals); - -boxed_xval_t variadic_mapexcept_xfunc( - boxed_xval_t* pbxvals, int nxvals); - -boxed_xval_t variadic_mapselect_xfunc( - boxed_xval_t* pbxvals, int nxvals); - -boxed_xval_t m_ss_splitnv_xfunc( - boxed_xval_t* pstringval, - boxed_xval_t* psepval); - -boxed_xval_t m_ss_splitnvx_xfunc( - boxed_xval_t* pstringval, - boxed_xval_t* psepval); - -boxed_xval_t m_sss_splitkv_xfunc( - boxed_xval_t* pstringval, - boxed_xval_t* ppairsepval, - boxed_xval_t* plistsepval); - -boxed_xval_t m_sss_splitkvx_xfunc( - boxed_xval_t* pstringval, - boxed_xval_t* ppairsepval, - boxed_xval_t* plistsepval); - -boxed_xval_t s_ms_joink_xfunc( - boxed_xval_t* pmapval, - boxed_xval_t* psepval); - -boxed_xval_t s_ms_joinv_xfunc( - boxed_xval_t* pmapval, - boxed_xval_t* psepval); - -boxed_xval_t s_mss_joinkv_xfunc( - boxed_xval_t* pmapval, - boxed_xval_t* ppairsepval, - boxed_xval_t* plistsepval); - -#endif // XVFUNCS_H diff --git a/c/csv-rfc.txt b/c/csv-rfc.txt deleted file mode 100644 index d3335d4e5..000000000 --- a/c/csv-rfc.txt +++ /dev/null @@ -1,91 +0,0 @@ -================================================================ -Offlineable (subway-tunnelable) excerpt from https://tools.ietf.org/html/rfc4180 -================================================================ -Definition of the CSV Format - -While there are various specifications and implementations for the -CSV format (for ex. [4], [5], [6] and [7]), there is no formal -specification in existence, which allows for a wide variety of -interpretations of CSV files. This section documents the format that -seems to be followed by most implementations: - -1. Each record is located on a separate line, delimited by a line - break (CRLF). For example: - - aaa,bbb,ccc CRLF - zzz,yyy,xxx CRLF - -2. The last record in the file may or may not have an ending line - break. For example: - - aaa,bbb,ccc CRLF - zzz,yyy,xxx - -3. There maybe an optional header line appearing as the first line - of the file with the same format as normal record lines. This - header will contain names corresponding to the fields in the file - and should contain the same number of fields as the records in - the rest of the file (the presence or absence of the header line - should be indicated via the optional "header" parameter of this - MIME type). For example: - - field_name,field_name,field_name CRLF - aaa,bbb,ccc CRLF - zzz,yyy,xxx CRLF - -4. Within the header and each record, there may be one or more - fields, separated by commas. Each line should contain the same - number of fields throughout the file. Spaces are considered part - of a field and should not be ignored. The last field in the - record must not be followed by a comma. For example: - - aaa,bbb,ccc - -5. Each field may or may not be enclosed in double quotes (however - some programs, such as Microsoft Excel, do not use double quotes - at all). If fields are not enclosed with double quotes, then - double quotes may not appear inside the fields. For example: - - "aaa","bbb","ccc" CRLF - zzz,yyy,xxx - -6. Fields containing line breaks (CRLF), double quotes, and commas - should be enclosed in double-quotes. For example: - - "aaa","b CRLF - bb","ccc" CRLF - zzz,yyy,xxx - -7. If double-quotes are used to enclose fields, then a double-quote - appearing inside a field must be escaped by preceding it with - another double quote. For example: - - "aaa","b""bb","ccc" - -The ABNF grammar [2] appears as follows: - - file = [header CRLF] record *(CRLF record) [CRLF] - - header = name *(COMMA name) - - record = field *(COMMA field) - - name = field - - field = (escaped / non-escaped) - - escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE - - non-escaped = *TEXTDATA - - COMMA = %x2C - - CR = %x0D ;as per section 6.1 of RFC 2234 [2] - - DQUOTE = %x22 ;as per section 6.1 of RFC 2234 [2] - - LF = %x0A ;as per section 6.1 of RFC 2234 [2] - - CRLF = CR LF ;as per section 6.1 of RFC 2234 [2] - - TEXTDATA = %x20-21 / %x23-2B / %x2D-7E diff --git a/c/draft-release-notes.md b/c/draft-release-notes.md deleted file mode 100644 index bfa915838..000000000 --- a/c/draft-release-notes.md +++ /dev/null @@ -1,26 +0,0 @@ -# Title here - -## Features: - -* The new [**system DSL function**](http://johnkerl.org/miller/doc/reference-dsl.html#system) allows you to run -arbitrary shell commands and store them in field values. Some example usages are documented [**here**](http://johnkerl.org/miller/doc/data-sharing.html#Running_shell_commands). - -* There is now support for [**ASV and USV file formats**](http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/ASV/USV/etc.). - -* The new [**format-values**](http://johnkerl.org/miller/doc/reference-verbs.html#format-values) verb allows you to apply numerical formatting across all record values. - -## Documentation: - -* The new [**DKVP I/O in Python**](http://johnkerl.org/miller/doc/data-sharing.html#DKVP_I/O_in_Python) sample code now works for Python 2 as well as Python 3. - -* There is a new cookbook entry on [**doing multiple joins**](http://johnkerl.org/miller/doc/cookbook.html#Doing_multiple_joins). - -## Bugfixes: - -* The [**toupper**](http://johnkerl.org/miller/doc/reference-dsl.html#toupper), [**tolower**](http://johnkerl.org/miller/doc/reference-dsl.html#tolower), and [**capitalize**](http://johnkerl.org/miller/doc/reference-dsl.html#capitalize) DSL functions are now UTF-8 aware, thanks to @sheredom's marvelous https://github.com/sheredom/utf8.h. The [**internationalization page**]((http://johnkerl.org/miller/doc/internationalization.html) has also been expanded. - -* https://github.com/johnkerl/miller/issues/250 fixes a bug using [**in-place mode**](https://johnkerl.org/miller/doc/reference.html#In-place_mode) in conjunction with verbs (such as [**rename**](http://johnkerl.org/miller/doc/reference-dsl.html#rename) or [**sort**](http://johnkerl.org/miller/doc/reference-dsl.html#sort)) which take field-name lists as arguments. - -* https://github.com/johnkerl/miller/issues/253 fixes a bug in the [**label**](http://johnkerl.org/miller/doc/reference-verbs.html#label) when one or more names are common between old and new. - -* https://github.com/johnkerl/miller/issues/251 fixes a corner-case bug when (a) input is CSV; (b) the last field ends with a comma and no newline; (c) input is from standard input and/or --no-mmap is supplied. diff --git a/c/dsl/Makefile.am b/c/dsl/Makefile.am deleted file mode 100644 index f03e25bc1..000000000 --- a/c/dsl/Makefile.am +++ /dev/null @@ -1,50 +0,0 @@ -noinst_LTLIBRARIES= libdsl.la -libdsl_la_SOURCES= \ - context_flags.h \ - function_manager.c \ - function_manager.h \ - keylist_evaluators.c \ - keylist_evaluators.h \ - mlr_dsl_ast.c \ - mlr_dsl_ast.h \ - mlr_dsl_blocked_ast.c \ - mlr_dsl_blocked_ast.h \ - mlr_dsl_cst.c \ - mlr_dsl_cst.h \ - mlr_dsl_cst_condish_statements.c \ - mlr_dsl_cst_for_map_statements.c \ - mlr_dsl_cst_for_srec_statements.c \ - mlr_dsl_cst_func_subr.c \ - mlr_dsl_cst_keywords.c \ - mlr_dsl_cst_loop_control_statements.c \ - mlr_dsl_cst_map_assignment_statements.c \ - mlr_dsl_cst_output_statements.c \ - mlr_dsl_cst_return_statements.c \ - mlr_dsl_cst_scalar_assignment_statements.c \ - mlr_dsl_cst_statements.c \ - mlr_dsl_cst_triple_for_statements.c \ - mlr_dsl_cst_unset_statements.c \ - mlr_dsl_stack_allocate.c \ - return_state.h \ - rval_evaluator.h \ - rval_evaluators.h \ - rval_expr_evaluators.c \ - rval_func_evaluators.c \ - rval_list_evaluators.c \ - rxval_evaluator.h \ - rxval_evaluators.h \ - rxval_expr_evaluators.c \ - rxval_func_evaluators.c \ - type_inference.h \ - variables.h -libdsl_la_LIBADD= ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la - -# TODO: replace the interesting content with unit tests; jettison the rest -# TODO: Does not build -#noinst_PROGRAMS= evl -#evl_SOURCES= rval_evaluators.c -#evl_LDADD= libdsl.la ../containers/libcontainers.la ../lib/libmlr.la -#evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/dsl/Makefile.in b/c/dsl/Makefile.in deleted file mode 100644 index 0ea357e6b..000000000 --- a/c/dsl/Makefile.in +++ /dev/null @@ -1,673 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/dsl -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libdsl_la_DEPENDENCIES = ../lib/libmlr.la ../cli/libcli.la \ - ../input/libinput.la -am_libdsl_la_OBJECTS = function_manager.lo keylist_evaluators.lo \ - mlr_dsl_ast.lo mlr_dsl_blocked_ast.lo mlr_dsl_cst.lo \ - mlr_dsl_cst_condish_statements.lo \ - mlr_dsl_cst_for_map_statements.lo \ - mlr_dsl_cst_for_srec_statements.lo mlr_dsl_cst_func_subr.lo \ - mlr_dsl_cst_keywords.lo mlr_dsl_cst_loop_control_statements.lo \ - mlr_dsl_cst_map_assignment_statements.lo \ - mlr_dsl_cst_output_statements.lo \ - mlr_dsl_cst_return_statements.lo \ - mlr_dsl_cst_scalar_assignment_statements.lo \ - mlr_dsl_cst_statements.lo mlr_dsl_cst_triple_for_statements.lo \ - mlr_dsl_cst_unset_statements.lo mlr_dsl_stack_allocate.lo \ - rval_expr_evaluators.lo rval_func_evaluators.lo \ - rval_list_evaluators.lo rxval_expr_evaluators.lo \ - rxval_func_evaluators.lo -libdsl_la_OBJECTS = $(am_libdsl_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libdsl_la_SOURCES) -DIST_SOURCES = $(libdsl_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libdsl.la -libdsl_la_SOURCES = \ - context_flags.h \ - function_manager.c \ - function_manager.h \ - keylist_evaluators.c \ - keylist_evaluators.h \ - mlr_dsl_ast.c \ - mlr_dsl_ast.h \ - mlr_dsl_blocked_ast.c \ - mlr_dsl_blocked_ast.h \ - mlr_dsl_cst.c \ - mlr_dsl_cst.h \ - mlr_dsl_cst_condish_statements.c \ - mlr_dsl_cst_for_map_statements.c \ - mlr_dsl_cst_for_srec_statements.c \ - mlr_dsl_cst_func_subr.c \ - mlr_dsl_cst_keywords.c \ - mlr_dsl_cst_loop_control_statements.c \ - mlr_dsl_cst_map_assignment_statements.c \ - mlr_dsl_cst_output_statements.c \ - mlr_dsl_cst_return_statements.c \ - mlr_dsl_cst_scalar_assignment_statements.c \ - mlr_dsl_cst_statements.c \ - mlr_dsl_cst_triple_for_statements.c \ - mlr_dsl_cst_unset_statements.c \ - mlr_dsl_stack_allocate.c \ - return_state.h \ - rval_evaluator.h \ - rval_evaluators.h \ - rval_expr_evaluators.c \ - rval_func_evaluators.c \ - rval_list_evaluators.c \ - rxval_evaluator.h \ - rxval_evaluators.h \ - rxval_expr_evaluators.c \ - rxval_func_evaluators.c \ - type_inference.h \ - variables.h - -libdsl_la_LIBADD = ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la - -# TODO: replace the interesting content with unit tests; jettison the rest -# TODO: Does not build -#noinst_PROGRAMS= evl -#evl_SOURCES= rval_evaluators.c -#evl_LDADD= libdsl.la ../containers/libcontainers.la ../lib/libmlr.la -#evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/dsl/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/dsl/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libdsl.la: $(libdsl_la_OBJECTS) $(libdsl_la_DEPENDENCIES) $(EXTRA_libdsl_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libdsl_la_OBJECTS) $(libdsl_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/function_manager.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keylist_evaluators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_ast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_blocked_ast.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_condish_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_for_map_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_for_srec_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_func_subr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_keywords.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_loop_control_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_map_assignment_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_output_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_return_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_scalar_assignment_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_triple_for_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_cst_unset_statements.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_stack_allocate.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_expr_evaluators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_func_evaluators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rval_list_evaluators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rxval_expr_evaluators.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rxval_func_evaluators.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/dsl/context_flags.h b/c/dsl/context_flags.h deleted file mode 100644 index f0df2565f..000000000 --- a/c/dsl/context_flags.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef CONTEXT_FLAGS_H -#define CONTEXT_FLAGS_H - -// The grammar permits certain statements which are syntactically invalid, (a) because it's awkward to handle -// there, and (b) because we get far better control over error messages here (vs. 'syntax error'). -// The following flags are used as the CST is built from the AST for CST-build-time validation. - -#define IN_BREAKABLE 0x00000200 // break/continue are only OK (recursively) inside for/while/do-while -#define IN_BEGIN_OR_END 0x00000400 // $stuff is not OK (recursively) inside begin/end -#define IN_FUNC_DEF 0x00000800 // locals only valid in func/subr; no srec assignments in functions -#define IN_SUBR_DEF 0x00001000 // locals only valid in func/subr -#define IN_MLR_FILTER 0x00002000 // Anywhere within mlr filter, the 'filter' keyword is invalid -#define IN_MLR_FINAL_FILTER 0x00004000 // mlr filter's final statement must be a bare boolean -#define IN_TRIPLE_FOR_CONTINUE 0x00004000 // Final statement of triple-for continuation statements must be a bare boolean - -#endif // CONTEXT_FLAGS_H diff --git a/c/dsl/function_manager.c b/c/dsl/function_manager.c deleted file mode 100644 index 480200654..000000000 --- a/c/dsl/function_manager.c +++ /dev/null @@ -1,1604 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "dsl/function_manager.h" -#include "dsl/context_flags.h" -#include "dsl/rval_evaluators.h" -#include "dsl/rxval_evaluators.h" - -// ---------------------------------------------------------------- -typedef enum _func_class_t { - FUNC_CLASS_ARITHMETIC, - FUNC_CLASS_MATH, - FUNC_CLASS_BOOLEAN, - FUNC_CLASS_STRING, - FUNC_CLASS_CONVERSION, - FUNC_CLASS_TYPING, - FUNC_CLASS_MAPS, - FUNC_CLASS_TIME -} func_class_t; - -typedef enum _arity_check_t { - ARITY_CHECK_PASS, - ARITY_CHECK_FAIL, - ARITY_CHECK_NO_SUCH -} arity_check_t; - -typedef struct _function_lookup_t { - func_class_t function_class; - char* function_name; - int arity; // for variadic, this is minimum arity - int variadic; - char* usage_string; -} function_lookup_t; - -// This is shared between all instances -static function_lookup_t FUNCTION_LOOKUP_TABLE[]; - -// ---------------------------------------------------------------- -// See also comments in rval_evaluators.h - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -static void fmgr_check_arity_with_report(fmgr_t* pfmgr, char* function_name, - int user_provided_arity, int* pvariadic); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_variadic_func_name( - char* function_name, rval_evaluator_t** pargs, int nargs); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_zary_func_name( - char* function_name); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_unary_func_name( - char* function_name, rval_evaluator_t* parg1); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_func_name( - char* function_name, - rval_evaluator_t* parg1, rval_evaluator_t* parg2); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_regex_arg2_func_name( - char* function_name, - rval_evaluator_t* parg1, char* regex_string, int ignore_case); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_func_name( - char* function_name, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); - -static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name( - char* function_name, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// For rval functions, we pass rval_evaluator_t* (CST); for rxval functions, we pass -// mlr_dsl_ast_node_t* (AST). It's easy to construct the former from the latter, of -// course. The difference is that we look up map-enabled functions by name first, -// then non-map-enabled functions by name second. -// -// * AST nodes are passed to try to look up a map-enabled function given a function name. -// * If those exist, they construct CST structures and return. -// * But if not, we look up a non-map-enabled function for the same function name. -// * If that doesn't exist either, then it's a fatal error. So we go ahead and -// construct an rval_evaluator_t* CST structure from the AST node simply to -// save keystrokes, passing that to the function-lookup routines. -// -// It would simpler to always construct CST structures before looking up -// function names, but the only problem is that it's hard to unconstruct CST -// structures in case the name lookup fails. (The function-manager -// as-yet-unresolved-name list points into them, whenever function arguments -// themselves include function calls). Namely, the following scenario is to be -// avoided: -// -// * Construct rxval_evaluator_t* CST structure. -// * Look up map-enabled function with a given name. -// * That doesn't exist. -// * Now the rxval_evaluator_t* can't be torn down since the fmgr points into it. - -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_variadic_func_name( - char* function_name, sllv_t* parg_nodes, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); - -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_unary_func_name( - char* function_name, - mlr_dsl_ast_node_t* parg1, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); - -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_binary_func_name( - char* function_name, - mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* pargs2, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); - -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_ternary_func_name( - char* function_name, - mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* pargs2, mlr_dsl_ast_node_t* pargs3, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -static void resolve_func_callsite(fmgr_t* pfmgr, rval_evaluator_t* pev); -static void resolve_func_xcallsite(fmgr_t* pfmgr, rxval_evaluator_t* pxev); -static rxval_evaluator_t* fmgr_alloc_xeval_wrapping_eval(rval_evaluator_t* pevaluator); -static rval_evaluator_t* fmgr_alloc_eval_wrapping_xeval(rxval_evaluator_t* pxevaluator); - -// ---------------------------------------------------------------- -fmgr_t* fmgr_alloc() { - fmgr_t* pfmgr = mlr_malloc_or_die(sizeof(fmgr_t)); - - pfmgr->function_lookup_table = &FUNCTION_LOOKUP_TABLE[0]; - - pfmgr->built_in_function_names = hss_alloc(); - for (int i = 0; ; i++) { - function_lookup_t* plookup = &pfmgr->function_lookup_table[i]; - char* fname = plookup->function_name; - if (fname == NULL) - break; - hss_add(pfmgr->built_in_function_names, fname); - } - - pfmgr->pudf_names_to_defsite_states = lhmsv_alloc(); - - pfmgr->pfunc_callsite_evaluators_to_resolve = sllv_alloc(); - pfmgr->pfunc_callsite_xevaluators_to_resolve = sllv_alloc(); - - return pfmgr; -} - -// ---------------------------------------------------------------- -void fmgr_free(fmgr_t* pfmgr, context_t* pctx) { - if (pfmgr == NULL) - return; - - for (lhmsve_t* pe = pfmgr->pudf_names_to_defsite_states->phead; pe != NULL; pe = pe->pnext) { - udf_defsite_state_t * pdefsite_state = pe->pvvalue; - free(pdefsite_state->name); - pdefsite_state->pfree_func(pdefsite_state->pvstate, pctx); - free(pdefsite_state); - } - lhmsv_free(pfmgr->pudf_names_to_defsite_states); - sllv_free(pfmgr->pfunc_callsite_evaluators_to_resolve); - sllv_free(pfmgr->pfunc_callsite_xevaluators_to_resolve); - hss_free(pfmgr->built_in_function_names); - free(pfmgr); -} - -// ---------------------------------------------------------------- -void fmgr_install_udf(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state) { - if (hss_has(pfmgr->built_in_function_names, pdefsite_state->name)) { - fprintf(stderr, "%s: function named \"%s\" must not override a built-in function of the same name.\n", - MLR_GLOBALS.bargv0, pdefsite_state->name); - exit(1); - } - if (lhmsv_get(pfmgr->pudf_names_to_defsite_states, pdefsite_state->name)) { - fprintf(stderr, "%s: function named \"%s\" has already been defined.\n", - MLR_GLOBALS.bargv0, pdefsite_state->name); - exit(1); - } - lhmsv_put(pfmgr->pudf_names_to_defsite_states, mlr_strdup_or_die(pdefsite_state->name), pdefsite_state, - FREE_ENTRY_KEY); -} - -// ================================================================ -static function_lookup_t FUNCTION_LOOKUP_TABLE[] = { - - {FUNC_CLASS_ARITHMETIC, "+", 2,0, "Addition."}, - {FUNC_CLASS_ARITHMETIC, "+", 1,0, "Unary plus."}, - {FUNC_CLASS_ARITHMETIC, "-", 2,0, "Subtraction."}, - {FUNC_CLASS_ARITHMETIC, "-", 1,0, "Unary minus."}, - {FUNC_CLASS_ARITHMETIC, "*", 2,0, "Multiplication."}, - {FUNC_CLASS_ARITHMETIC, "/", 2,0, "Division."}, - {FUNC_CLASS_ARITHMETIC, "//", 2,0, "Integer division: rounds to negative (pythonic)."}, - - {FUNC_CLASS_ARITHMETIC, ".+", 2,0, "Addition, with integer-to-integer overflow"}, - {FUNC_CLASS_ARITHMETIC, ".+", 1,0, "Unary plus, with integer-to-integer overflow."}, - {FUNC_CLASS_ARITHMETIC, ".-", 2,0, "Subtraction, with integer-to-integer overflow."}, - {FUNC_CLASS_ARITHMETIC, ".-", 1,0, "Unary minus, with integer-to-integer overflow."}, - {FUNC_CLASS_ARITHMETIC, ".*", 2,0, "Multiplication, with integer-to-integer overflow."}, - {FUNC_CLASS_ARITHMETIC, "./", 2,0, "Division, with integer-to-integer overflow."}, - {FUNC_CLASS_ARITHMETIC, ".//", 2,0, "Integer division: rounds to negative (pythonic), with integer-to-integer overflow."}, - - {FUNC_CLASS_ARITHMETIC, "%", 2,0, "Remainder; never negative-valued (pythonic)."}, - {FUNC_CLASS_ARITHMETIC, "**", 2,0, "Exponentiation; same as pow, but as an infix\noperator."}, - {FUNC_CLASS_ARITHMETIC, "|", 2,0, "Bitwise OR."}, - {FUNC_CLASS_ARITHMETIC, "^", 2,0, "Bitwise XOR."}, - {FUNC_CLASS_ARITHMETIC, "&", 2,0, "Bitwise AND."}, - {FUNC_CLASS_ARITHMETIC, "~", 1,0, - "Bitwise NOT. Beware '$y=~$x' since =~ is the\nregex-match operator: try '$y = ~$x'."}, - {FUNC_CLASS_ARITHMETIC, "<<", 2,0, "Bitwise left-shift."}, - {FUNC_CLASS_ARITHMETIC, ">>", 2,0, "Bitwise right-shift."}, - {FUNC_CLASS_ARITHMETIC, "bitcount", 1,0, "Count of 1-bits"}, - - {FUNC_CLASS_BOOLEAN, "==", 2,0, "String/numeric equality. Mixing number and string\nresults in string compare."}, - {FUNC_CLASS_BOOLEAN, "!=", 2,0, "String/numeric inequality. Mixing number and string\nresults in string compare."}, - {FUNC_CLASS_BOOLEAN, "=~", 2,0, - "String (left-hand side) matches regex (right-hand\n" - "side), e.g. '$name =~ \"^a.*b$\"'."}, - {FUNC_CLASS_BOOLEAN, "!=~", 2,0, - "String (left-hand side) does not match regex\n" - "(right-hand side), e.g. '$name !=~ \"^a.*b$\"'."}, - {FUNC_CLASS_BOOLEAN, ">", 2,0, - "String/numeric greater-than. Mixing number and string\n" - "results in string compare."}, - {FUNC_CLASS_BOOLEAN, ">=", 2,0, - "String/numeric greater-than-or-equals. Mixing number\n" - "and string results in string compare."}, - {FUNC_CLASS_BOOLEAN, "<", 2,0, - "String/numeric less-than. Mixing number and string\n" - "results in string compare."}, - {FUNC_CLASS_BOOLEAN, "<=", 2,0, - "String/numeric less-than-or-equals. Mixing number\n" - "and string results in string compare."}, - {FUNC_CLASS_BOOLEAN, "&&", 2,0, "Logical AND."}, - {FUNC_CLASS_BOOLEAN, "||", 2,0, "Logical OR."}, - {FUNC_CLASS_BOOLEAN, "^^", 2,0, "Logical XOR."}, - {FUNC_CLASS_BOOLEAN, "!", 1,0, "Logical negation."}, - {FUNC_CLASS_BOOLEAN, "? :", 3,0, "Ternary operator."}, - - {FUNC_CLASS_STRING, ".", 2,0, "String concatenation."}, - {FUNC_CLASS_STRING, "gsub", 3,0, "Example: '$name=gsub($name, \"old\", \"new\")'\n(replace all)."}, - {FUNC_CLASS_STRING, "regextract", 2,0, "Example: '$name=regextract($name, \"[A-Z]{3}[0-9]{2}\")'\n."}, - {FUNC_CLASS_STRING, "regextract_or_else", 3,0, "Example: '$name=regextract_or_else($name, \"[A-Z]{3}[0-9]{2}\", \"default\")'\n."}, - {FUNC_CLASS_STRING, "strlen", 1,0, "String length."}, - {FUNC_CLASS_STRING, "sub", 3,0, "Example: '$name=sub($name, \"old\", \"new\")'\n(replace once)."}, - {FUNC_CLASS_STRING, "ssub", 3,0, "Like sub but does no regexing. No characters are special."}, - {FUNC_CLASS_STRING, "substr", 3,0, - "substr(s,m,n) gives substring of s from 0-up position m to n \n" - "inclusive. Negative indices -len .. -1 alias to 0 .. len-1."}, - {FUNC_CLASS_STRING, "tolower", 1,0, "Convert string to lowercase."}, - {FUNC_CLASS_STRING, "toupper", 1,0, "Convert string to uppercase."}, - {FUNC_CLASS_STRING, "truncate", 2,0, "Truncates string first argument to max length of int second argument."}, - {FUNC_CLASS_STRING, "capitalize", 1,0, "Convert string's first character to uppercase."}, - {FUNC_CLASS_STRING, "lstrip", 1,0, "Strip leading whitespace from string."}, - {FUNC_CLASS_STRING, "rstrip", 1,0, "Strip trailing whitespace from string."}, - {FUNC_CLASS_STRING, "strip", 1,0, "Strip leading and trailing whitespace from string."}, - {FUNC_CLASS_STRING, "collapse_whitespace", 1,0, "Strip repeated whitespace from string."}, - {FUNC_CLASS_STRING, "clean_whitespace", 1,0, "Same as collapse_whitespace and strip."}, - {FUNC_CLASS_STRING, "system", 1,0, "Run command string, yielding its stdout minus final carriage return."}, - - {FUNC_CLASS_MATH, "abs", 1,0, "Absolute value."}, - {FUNC_CLASS_MATH, "acos", 1,0, "Inverse trigonometric cosine."}, - {FUNC_CLASS_MATH, "acosh", 1,0, "Inverse hyperbolic cosine."}, - {FUNC_CLASS_MATH, "asin", 1,0, "Inverse trigonometric sine."}, - {FUNC_CLASS_MATH, "asinh", 1,0, "Inverse hyperbolic sine."}, - {FUNC_CLASS_MATH, "atan", 1,0, "One-argument arctangent."}, - {FUNC_CLASS_MATH, "atan2", 2,0, "Two-argument arctangent."}, - {FUNC_CLASS_MATH, "atanh", 1,0, "Inverse hyperbolic tangent."}, - {FUNC_CLASS_MATH, "cbrt", 1,0, "Cube root."}, - {FUNC_CLASS_MATH, "ceil", 1,0, "Ceiling: nearest integer at or above."}, - {FUNC_CLASS_MATH, "cos", 1,0, "Trigonometric cosine."}, - {FUNC_CLASS_MATH, "cosh", 1,0, "Hyperbolic cosine."}, - {FUNC_CLASS_MATH, "erf", 1,0, "Error function."}, - {FUNC_CLASS_MATH, "erfc", 1,0, "Complementary error function."}, - {FUNC_CLASS_MATH, "exp", 1,0, "Exponential function e**x."}, - {FUNC_CLASS_MATH, "expm1", 1,0, "e**x - 1."}, - {FUNC_CLASS_MATH, "floor", 1,0, "Floor: nearest integer at or below."}, - // See also http://johnkerl.org/doc/randuv.pdf for more about urand() -> other distributions - {FUNC_CLASS_MATH, "invqnorm", 1,0, - "Inverse of normal cumulative distribution\n" - "function. Note that invqorm(urand()) is normally distributed."}, - {FUNC_CLASS_MATH, "log", 1,0, "Natural (base-e) logarithm."}, - {FUNC_CLASS_MATH, "log10", 1,0, "Base-10 logarithm."}, - {FUNC_CLASS_MATH, "log1p", 1,0, "log(1-x)."}, - {FUNC_CLASS_MATH, "logifit", 3,0, "Given m and b from logistic regression, compute\nfit: $yhat=logifit($x,$m,$b)."}, - {FUNC_CLASS_MATH, "madd", 3,0, "a + b mod m (integers)"}, - {FUNC_CLASS_MATH, "max", 0,1, "max of n numbers; null loses"}, - {FUNC_CLASS_MATH, "mexp", 3,0, "a ** b mod m (integers)"}, - {FUNC_CLASS_MATH, "min", 0,1, "Min of n numbers; null loses"}, - {FUNC_CLASS_MATH, "mmul", 3,0, "a * b mod m (integers)"}, - {FUNC_CLASS_MATH, "msub", 3,0, "a - b mod m (integers)"}, - {FUNC_CLASS_MATH, "pow", 2,0, "Exponentiation; same as **."}, - {FUNC_CLASS_MATH, "qnorm", 1,0, "Normal cumulative distribution function."}, - {FUNC_CLASS_MATH, "round", 1,0, "Round to nearest integer."}, - {FUNC_CLASS_MATH, "roundm", 2,0, "Round to nearest multiple of m: roundm($x,$m) is\nthe same as round($x/$m)*$m"}, - {FUNC_CLASS_MATH, "sgn", 1,0, "+1 for positive input, 0 for zero input, -1 for\nnegative input."}, - {FUNC_CLASS_MATH, "sin", 1,0, "Trigonometric sine."}, - {FUNC_CLASS_MATH, "sinh", 1,0, "Hyperbolic sine."}, - {FUNC_CLASS_MATH, "sqrt", 1,0, "Square root."}, - {FUNC_CLASS_MATH, "tan", 1,0, "Trigonometric tangent."}, - {FUNC_CLASS_MATH, "tanh", 1,0, "Hyperbolic tangent."}, - {FUNC_CLASS_MATH, "urand", 0,0, - "Floating-point numbers uniformly distributed on the unit interval.\n" - "Int-valued example: '$n=floor(20+urand()*11)'." }, - {FUNC_CLASS_MATH, "urandrange", 2,0, - "Floating-point numbers uniformly distributed on the interval [a, b)." }, - {FUNC_CLASS_MATH, "urand32", 0,0, "Integer uniformly distributed 0 and 2**32-1\n" - "inclusive." }, - {FUNC_CLASS_MATH, "urandint", 2,0, "Integer uniformly distributed between inclusive\ninteger endpoints." }, - - {FUNC_CLASS_TIME, "dhms2fsec", 1,0, - "Recovers floating-point seconds as in\n" - "dhms2fsec(\"5d18h53m20.250000s\") = 500000.250000"}, - {FUNC_CLASS_TIME, "dhms2sec", 1,0, "Recovers integer seconds as in\ndhms2sec(\"5d18h53m20s\") = 500000"}, - {FUNC_CLASS_TIME, "fsec2dhms", 1,0, - "Formats floating-point seconds as in\nfsec2dhms(500000.25) = \"5d18h53m20.250000s\""}, - {FUNC_CLASS_TIME, "fsec2hms", 1,0, - "Formats floating-point seconds as in\nfsec2hms(5000.25) = \"01:23:20.250000\""}, - - {FUNC_CLASS_TIME, "gmt2sec", 1,0, "Parses GMT timestamp as integer seconds since\nthe epoch."}, - {FUNC_CLASS_TIME, "localtime2sec", 1,0, "Parses local timestamp as integer seconds since\n" - "the epoch. Consults $TZ environment variable."}, - - {FUNC_CLASS_TIME, "hms2fsec", 1,0, - "Recovers floating-point seconds as in\nhms2fsec(\"01:23:20.250000\") = 5000.250000"}, - {FUNC_CLASS_TIME, "hms2sec", 1,0, "Recovers integer seconds as in\nhms2sec(\"01:23:20\") = 5000"}, - {FUNC_CLASS_TIME, "sec2dhms", 1,0, "Formats integer seconds as in sec2dhms(500000)\n= \"5d18h53m20s\""}, - - {FUNC_CLASS_TIME, "sec2gmt", 1,0, - "Formats seconds since epoch (integer part)\n" - "as GMT timestamp, e.g. sec2gmt(1440768801.7) = \"2015-08-28T13:33:21Z\".\n" - "Leaves non-numbers as-is."}, - {FUNC_CLASS_TIME, "sec2gmt", 2,0, - "Formats seconds since epoch as GMT timestamp with n\n" - "decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = \"2015-08-28T13:33:21.7Z\".\n" - "Leaves non-numbers as-is."}, - {FUNC_CLASS_TIME, "sec2gmtdate", 1,0, - "Formats seconds since epoch (integer part)\n" - "as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = \"2015-08-28\".\n" - "Leaves non-numbers as-is."}, - - {FUNC_CLASS_TIME, "sec2localtime", 1,0, "Formats seconds since epoch (integer part)\n" - "as local timestamp, e.g. sec2localtime(1440768801.7) = \"2015-08-28T13:33:21Z\".\n" - "Consults $TZ environment variable. Leaves non-numbers as-is."}, - {FUNC_CLASS_TIME, "sec2localtime", 2,0, - "Formats seconds since epoch as local timestamp with n\n" - "decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = \"2015-08-28T13:33:21.7Z\".\n" - "Consults $TZ environment variable. Leaves non-numbers as-is."}, - {FUNC_CLASS_TIME, "sec2localdate", 1,0, - "Formats seconds since epoch (integer part)\n" - "as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = \"2015-08-28\".\n" - "Consults $TZ environment variable. Leaves non-numbers as-is."}, - - {FUNC_CLASS_TIME, "sec2hms", 1,0, - "Formats integer seconds as in\n" - "sec2hms(5000) = \"01:23:20\""}, - {FUNC_CLASS_TIME, "strftime", 2,0, - "Formats seconds since the epoch as timestamp, e.g.\n" - "strftime(1440768801.7,\"%Y-%m-%dT%H:%M:%SZ\") = \"2015-08-28T13:33:21Z\", and\n" - "strftime(1440768801.7,\"%Y-%m-%dT%H:%M:%3SZ\") = \"2015-08-28T13:33:21.700Z\".\n" - "Format strings are as in the C library (please see \"man strftime\" on your system),\n" - "with the Miller-specific addition of \"%1S\" through \"%9S\" which format the seconds\n" - "with 1 through 9 decimal places, respectively. (\"%S\" uses no decimal places.)\n" - "See also strftime_local."}, - {FUNC_CLASS_TIME, "strftime_local", 2,0, - "Like strftime but consults the $TZ environment variable to get local time zone."}, - {FUNC_CLASS_TIME, "strptime", 2,0, - "Parses timestamp as floating-point seconds since the epoch,\n" - "e.g. strptime(\"2015-08-28T13:33:21Z\",\"%Y-%m-%dT%H:%M:%SZ\") = 1440768801.000000,\n" - "and strptime(\"2015-08-28T13:33:21.345Z\",\"%Y-%m-%dT%H:%M:%SZ\") = 1440768801.345000.\n" - "See also strptime_local."}, - {FUNC_CLASS_TIME, "strptime_local", 2,0, - "Like strptime, but consults $TZ environment variable to find and use local timezone."}, - {FUNC_CLASS_TIME, "systime", 0,0, - "Floating-point seconds since the epoch,\n" - "e.g. 1440768801.748936." }, - - {FUNC_CLASS_TYPING, "is_absent", 1,0, "False if field is present in input, true otherwise"}, - {FUNC_CLASS_TYPING, "is_bool", 1,0, "True if field is present with boolean value. Synonymous with is_boolean."}, - {FUNC_CLASS_TYPING, "is_boolean", 1,0, "True if field is present with boolean value. Synonymous with is_bool."}, - {FUNC_CLASS_TYPING, "is_empty", 1,0, "True if field is present in input with empty string value, false otherwise."}, - {FUNC_CLASS_TYPING, "is_empty_map", 1,0, "True if argument is a map which is empty."}, - {FUNC_CLASS_TYPING, "is_float", 1,0, "True if field is present with value inferred to be float"}, - {FUNC_CLASS_TYPING, "is_int", 1,0, "True if field is present with value inferred to be int "}, - {FUNC_CLASS_TYPING, "is_map", 1,0, "True if argument is a map."}, - {FUNC_CLASS_TYPING, "is_nonempty_map", 1,0, "True if argument is a map which is non-empty."}, - {FUNC_CLASS_TYPING, "is_not_empty", 1,0, "False if field is present in input with empty value, true otherwise"}, - {FUNC_CLASS_TYPING, "is_not_map", 1,0, "True if argument is not a map."}, - {FUNC_CLASS_TYPING, "is_not_null", 1,0, "False if argument is null (empty or absent), true otherwise."}, - {FUNC_CLASS_TYPING, "is_null", 1,0, "True if argument is null (empty or absent), false otherwise."}, - {FUNC_CLASS_TYPING, "is_numeric", 1,0, "True if field is present with value inferred to be int or float"}, - {FUNC_CLASS_TYPING, "is_present", 1,0, "True if field is present in input, false otherwise."}, - {FUNC_CLASS_TYPING, "is_string", 1,0, "True if field is present with string (including empty-string) value"}, - - {FUNC_CLASS_TYPING, "asserting_absent", 1,0, "Returns argument if it is absent in the input data, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_bool", 1,0, "Returns argument if it is present with boolean value, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_boolean", 1,0, "Returns argument if it is present with boolean value, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_empty", 1,0, "Returns argument if it is present in input with empty value,\n" - "else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_empty_map", 1,0, "Returns argument if it is a map with empty value, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_float", 1,0, "Returns argument if it is present with float value, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_int", 1,0, "Returns argument if it is present with int value, else\n" - "throws an error."}, - {FUNC_CLASS_TYPING, "asserting_map", 1,0, "Returns argument if it is a map, else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_nonempty_map", 1,0, "Returns argument if it is a non-empty map, else throws\n" - "an error."}, - {FUNC_CLASS_TYPING, "asserting_not_empty", 1,0, "Returns argument if it is present in input with non-empty\n" - "value, else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_not_map", 1,0, "Returns argument if it is not a map, else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_not_null", 1,0, "Returns argument if it is non-null (non-empty and non-absent),\n" - "else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_null", 1,0, "Returns argument if it is null (empty or absent), else throws\n" - "an error."}, - {FUNC_CLASS_TYPING, "asserting_numeric", 1,0, "Returns argument if it is present with int or float value,\n" - "else throws an error."}, - {FUNC_CLASS_TYPING, "asserting_present", 1,0, "Returns argument if it is present in input, else throws\n" - "an error."}, - {FUNC_CLASS_TYPING, "asserting_string", 1,0, "Returns argument if it is present with string (including\n" - "empty-string) value, else throws an error."}, - - {FUNC_CLASS_CONVERSION, "boolean", 1,0, "Convert int/float/bool/string to boolean."}, - {FUNC_CLASS_CONVERSION, "float", 1,0, "Convert int/float/bool/string to float."}, - {FUNC_CLASS_CONVERSION, "fmtnum", 2,0, - "Convert int/float/bool to string using\n" - "printf-style format string, e.g. '$s = fmtnum($n, \"%06lld\")'. WARNING: Miller numbers\n" - "are all long long or double. If you use formats like %d or %f, behavior is undefined."}, - {FUNC_CLASS_CONVERSION, "hexfmt", 1,0, "Convert int to string, e.g. 255 to \"0xff\"."}, - {FUNC_CLASS_CONVERSION, "int", 1,0, "Convert int/float/bool/string to int."}, - {FUNC_CLASS_CONVERSION, "string", 1,0, "Convert int/float/bool/string to string."}, - {FUNC_CLASS_CONVERSION, "typeof", 1,0, - "Convert argument to type of argument (e.g.\n" - "MT_STRING). For debug."}, - - {FUNC_CLASS_MAPS, "depth", 1,0, "Prints maximum depth of hashmap: ''. Scalars have depth 0."}, - {FUNC_CLASS_MAPS, "haskey", 2,0, "True/false if map has/hasn't key, e.g. 'haskey($*, \"a\")' or\n" - "'haskey(mymap, mykey)'. Error if 1st argument is not a map."}, - {FUNC_CLASS_MAPS, "joink", 2,0, "Makes string from map keys. E.g. 'joink($*, \",\")'."}, - {FUNC_CLASS_MAPS, "joinkv", 3,0, "Makes string from map key-value pairs. E.g. 'joinkv(@v[2], \"=\", \",\")'"}, - {FUNC_CLASS_MAPS, "joinv", 2,0, "Makes string from map values. E.g. 'joinv(mymap, \",\")'."}, - {FUNC_CLASS_MAPS, "leafcount", 1,0, "Counts total number of terminal values in hashmap. For single-level maps,\n" - "same as length."}, - {FUNC_CLASS_MAPS, "length", 1,0, "Counts number of top-level entries in hashmap. Scalars have length 1."}, - {FUNC_CLASS_MAPS, "mapdiff", 0,1, "With 0 args, returns empty map. With 1 arg, returns copy of arg.\n" - "With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed."}, - {FUNC_CLASS_MAPS, "mapexcept", 1,1, "Returns a map with keys from remaining arguments, if any, unset.\n" - "E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'."}, - {FUNC_CLASS_MAPS, "mapselect", 1,1, "Returns a map with only keys from remaining arguments set.\n" - "E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'."}, - {FUNC_CLASS_MAPS, "mapsum", 0,1, "With 0 args, returns empty map. With >= 1 arg, returns a map with\n" - "key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'."}, - {FUNC_CLASS_MAPS, "splitkv", 3,0, "Splits string by separators into map with type inference.\n" - "E.g. 'splitkv(\"a=1,b=2,c=3\", \"=\", \",\")' gives '{\"a\" : 1, \"b\" : 2, \"c\" : 3}'."}, - {FUNC_CLASS_MAPS, "splitkvx", 3,0, "Splits string by separators into map without type inference (keys and\n" - "values are strings). E.g. 'splitkv(\"a=1,b=2,c=3\", \"=\", \",\")' gives\n" - "'{\"a\" : \"1\", \"b\" : \"2\", \"c\" : \"3\"}'."}, - {FUNC_CLASS_MAPS, "splitnv", 2,0, "Splits string by separator into integer-indexed map with type inference.\n" - "E.g. 'splitnv(\"a,b,c\" , \",\")' gives '{1 : \"a\", 2 : \"b\", 3 : \"c\"}'."}, - {FUNC_CLASS_MAPS, "splitnvx", 2,0, "Splits string by separator into integer-indexed map without type\n" - "inference (values are strings). E.g. 'splitnv(\"4,5,6\" , \",\")' gives '{1 : \"4\", 2 : \"5\", 3 : \"6\"}'."}, - - {0, NULL, -1 , -1, NULL}, // table terminator -}; - -// ---------------------------------------------------------------- -static arity_check_t check_arity(function_lookup_t lookup_table[], char* function_name, - int user_provided_arity, int *parity, int* pvariadic) -{ - *parity = -1; - *pvariadic = FALSE; - int found_function_name = FALSE; - for (int i = 0; ; i++) { - function_lookup_t* plookup = &lookup_table[i]; - if (plookup->function_name == NULL) - break; - if (streq(function_name, plookup->function_name)) { - found_function_name = TRUE; - *parity = plookup->arity; - if (plookup->variadic) { - *pvariadic = TRUE; - if (user_provided_arity < plookup->arity) { - return ARITY_CHECK_FAIL; - } - return ARITY_CHECK_PASS; - } - if (user_provided_arity == plookup->arity) { - return ARITY_CHECK_PASS; - } - } - } - if (found_function_name) { - return ARITY_CHECK_FAIL; - } else { - return ARITY_CHECK_NO_SUCH; - } -} - -static void fmgr_check_arity_with_report(fmgr_t* pfmgr, char* function_name, - int user_provided_arity, int* pvariadic) -{ - int arity = -1; - arity_check_t result = check_arity(pfmgr->function_lookup_table, function_name, user_provided_arity, - &arity, pvariadic); - if (result == ARITY_CHECK_NO_SUCH) { - fprintf(stderr, "%s: Function name \"%s\" not found.\n", MLR_GLOBALS.bargv0, function_name); - exit(1); - } - if (result == ARITY_CHECK_FAIL) { - // More flexibly, I'd have a list of arities supported by each - // function. But this is overkill: there are unary and binary minus and sec2gmt, - // and everything else has a single arity. - if (streq(function_name, "-") || streq(function_name, "sec2gmt") || streq(function_name, "sec2localtime")) { - fprintf(stderr, "%s: Function named \"%s\" takes one argument or two; got %d.\n", - MLR_GLOBALS.bargv0, function_name, user_provided_arity); - } else if (*pvariadic) { - fprintf(stderr, "%s: Function named \"%s\" takes at least %d argument%s; got %d.\n", - MLR_GLOBALS.bargv0, function_name, arity, (arity == 1) ? "" : "s", user_provided_arity); - } else { - fprintf(stderr, "%s: Function named \"%s\" takes %d argument%s; got %d.\n", - MLR_GLOBALS.bargv0, function_name, arity, (arity == 1) ? "" : "s", user_provided_arity); - } - exit(1); - } -} - -static char* function_class_to_desc(func_class_t function_class) { - switch(function_class) { - case FUNC_CLASS_ARITHMETIC: return "arithmetic"; break; - case FUNC_CLASS_MATH: return "math"; break; - case FUNC_CLASS_BOOLEAN: return "boolean"; break; - case FUNC_CLASS_STRING: return "string"; break; - case FUNC_CLASS_CONVERSION: return "conversion"; break; - case FUNC_CLASS_TYPING: return "typing"; break; - case FUNC_CLASS_MAPS: return "maps"; break; - case FUNC_CLASS_TIME: return "time"; break; - default: return "???"; break; - } -} - -void fmgr_list_functions(fmgr_t* pfmgr, FILE* output_stream, char* leader) { - char* separator = " "; - int leaderlen = strlen(leader); - int separatorlen = strlen(separator); - int linelen = leaderlen; - int j = 0; - - for (int i = 0; ; i++) { - function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; - char* fname = plookup->function_name; - if (fname == NULL) - break; - int fnamelen = strlen(fname); - linelen += separatorlen + fnamelen; - if (linelen >= 80) { - fprintf(output_stream, "\n"); - linelen = 0; - linelen = leaderlen + separatorlen + fnamelen; - j = 0; - } - if (j == 0) - fprintf(output_stream, "%s", leader); - fprintf(output_stream, "%s%s", separator, fname); - j++; - } - fprintf(output_stream, "\n"); -} - -// Pass function_name == NULL to get usage for all functions. -void fmgr_function_usage(fmgr_t* pfmgr, FILE* output_stream, char* function_name) { - int found = FALSE; - char* nfmt = "%s (class=%s #args=%d): %s\n"; - char* vfmt = "%s (class=%s variadic): %s\n"; - - int num_printed = 0; // > 1 matches e.g. for - and sec2gmt - for (int i = 0; ; i++) { - function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; - if (plookup->function_name == NULL) // end of table - break; - if (function_name == NULL || streq(function_name, plookup->function_name)) { - if (++num_printed > 1) - fprintf(output_stream, "\n"); - if (plookup->variadic) { - fprintf(output_stream, vfmt, plookup->function_name, - function_class_to_desc(plookup->function_class), - plookup->usage_string); - } else { - fprintf(output_stream, nfmt, plookup->function_name, - function_class_to_desc(plookup->function_class), - plookup->arity, plookup->usage_string); - } - found = TRUE; - } - if (function_name == NULL) - fprintf(output_stream, "\n"); - } - if (!found) - fprintf(output_stream, "%s: no such function.\n", function_name); - if (function_name == NULL) { - fprintf(output_stream, "To set the seed for urand, you may specify decimal or hexadecimal 32-bit\n"); - fprintf(output_stream, "numbers of the form \"%s --seed 123456789\" or \"%s --seed 0xcafefeed\".\n", - MLR_GLOBALS.bargv0, MLR_GLOBALS.bargv0); - fprintf(output_stream, "Miller's built-in variables are NF, NR, FNR, FILENUM, and FILENAME (awk-like)\n"); - fprintf(output_stream, "along with the mathematical constants M_PI and M_E.\n"); - } -} - -void fmgr_list_all_functions_raw(fmgr_t* pfmgr, FILE* output_stream) { - for (int i = 0; ; i++) { - function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; - if (plookup->function_name == NULL) // end of table - break; - printf("%s\n", plookup->function_name); - } -} - -void fmgr_list_all_functions_as_table(fmgr_t* pfmgr, FILE* output_stream) { - fprintf(output_stream, "%-30s %-10s %s\n", "Name", "Class", "#Args"); - for (int i = 0; ; i++) { - function_lookup_t* plookup = &FUNCTION_LOOKUP_TABLE[i]; - if (plookup->function_name == NULL) // end of table - break; - - fprintf(output_stream, "%-30s %-10s ", - plookup->function_name, - function_class_to_desc(plookup->function_class)); - if (plookup->variadic) { - fprintf(output_stream, "variadic"); - } else { - fprintf(output_stream, "%d", plookup->arity); - } - fprintf(output_stream, "\n"); - } -} - -// ================================================================ -typedef struct _udf_callsite_state_t { - int arity; - rxval_evaluator_t** pevals; - boxed_xval_t* args; - udf_defsite_state_t* pdefsite_state; -} udf_callsite_state_t; - -// ---------------------------------------------------------------- -static udf_callsite_state_t* udf_callsite_state_alloc( - fmgr_t* pfmgr, - udf_defsite_state_t* pdefsite_state, - mlr_dsl_ast_node_t* pnode, - int arity, - int type_inferencing, - int context_flags) -{ - udf_callsite_state_t* pstate = mlr_malloc_or_die(sizeof(udf_callsite_state_t)); - - pstate->arity = pnode->pchildren->length; - - pstate->pevals = mlr_malloc_or_die(pstate->arity * sizeof(rxval_evaluator_t*)); - int i = 0; - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* parg_node = pe->pvvalue; - pstate->pevals[i] = rxval_evaluator_alloc_from_ast(parg_node, - pfmgr, type_inferencing, context_flags); - } - - pstate->args = mlr_malloc_or_die(pstate->arity * sizeof(boxed_xval_t)); - for (i = 0; i < pstate->arity; i++) { - // Ownership will be transferred to local-stack which will be responsible for freeing. - pstate->args[i] = box_ephemeral_val(mv_absent()); - } - - pstate->pdefsite_state = pdefsite_state; - - return pstate; -} - -// ---------------------------------------------------------------- -static void udf_callsite_state_eval_args(udf_callsite_state_t* pstate, variables_t* pvars) { - for (int i = 0; i < pstate->arity; i++) { - pstate->args[i] = pstate->pevals[i]->pprocess_func(pstate->pevals[i]->pvstate, pvars); - } -} - -// ---------------------------------------------------------------- -static void udf_callsite_state_free(udf_callsite_state_t* pstate) { - for (int i = 0; i < pstate->arity; i++) { - rxval_evaluator_t* pxev = pstate->pevals[i]; - pxev->pfree_func(pxev); - } - free(pstate->pevals); - free(pstate->args); - free(pstate); -} - -// ---------------------------------------------------------------- -static mv_t rval_evaluator_udf_callsite_process(void* pvstate, variables_t* pvars) { - udf_callsite_state_t* pstate = pvstate; - - udf_callsite_state_eval_args(pstate, pvars); - - // Functions returning map values in a scalar context get their return values treated as - // absent-null. (E.g. f() returns a map and g() returns an int and the statement is '$x - // = f() + g()'.) Non-scalar-context return values are handled separately (not here). - boxed_xval_t retval = pstate->pdefsite_state->pprocess_func( - pstate->pdefsite_state->pvstate, pstate->arity, pstate->args, pvars); - - if (retval.xval.is_terminal) { - return retval.xval.terminal_mlrval; - } else { - if (retval.is_ephemeral) { - mlhmmv_xvalue_free(&retval.xval); - } - return mv_absent(); - } -} - -static boxed_xval_t rxval_evaluator_udf_xcallsite_process(void* pvstate, variables_t* pvars) { - udf_callsite_state_t* pstate = pvstate; - udf_callsite_state_eval_args(pstate, pvars); - return pstate->pdefsite_state->pprocess_func( - pstate->pdefsite_state->pvstate, pstate->arity, pstate->args, pvars); -} - -static void rval_evaluator_udf_callsite_free(rval_evaluator_t* pevaluator) { - udf_callsite_state_t* pstate = pevaluator->pvstate; - udf_callsite_state_free(pstate); - free(pevaluator); -} - -static void rxval_evaluator_udf_xcallsite_free(rxval_evaluator_t* pxevaluator) { - udf_callsite_state_t* pstate = pxevaluator->pvstate; - udf_callsite_state_free(pstate); - free(pxevaluator); -} - -static rval_evaluator_t* fmgr_alloc_from_udf_callsite(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state, - mlr_dsl_ast_node_t* pnode, char* function_name, int arity, int type_inferencing, int context_flags) -{ - rval_evaluator_t* pudf_callsite_evaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - udf_callsite_state_t* pstate = udf_callsite_state_alloc(pfmgr, pdefsite_state, pnode, - arity, type_inferencing, context_flags); - - pudf_callsite_evaluator->pvstate = pstate; - pudf_callsite_evaluator->pprocess_func = rval_evaluator_udf_callsite_process; - pudf_callsite_evaluator->pfree_func = rval_evaluator_udf_callsite_free; - - return pudf_callsite_evaluator; -} - -static rxval_evaluator_t* fmgr_alloc_from_udf_xcallsite(fmgr_t* pfmgr, udf_defsite_state_t* pdefsite_state, - mlr_dsl_ast_node_t* pnode, char* function_name, int arity, int type_inferencing, int context_flags) -{ - rxval_evaluator_t* pudf_xcallsite_evaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - udf_callsite_state_t* pstate = udf_callsite_state_alloc(pfmgr, pdefsite_state, pnode, - arity, type_inferencing, context_flags); - - pudf_xcallsite_evaluator->pvstate = pstate; - pudf_xcallsite_evaluator->pprocess_func = rxval_evaluator_udf_xcallsite_process; - pudf_xcallsite_evaluator->pfree_func = rxval_evaluator_udf_xcallsite_free; - - return pudf_xcallsite_evaluator; -} - -// ================================================================ -typedef struct _unresolved_func_callsite_state_t { - char* function_name; - int arity; - int type_inferencing; - int context_flags; - mlr_dsl_ast_node_t* pnode; -} unresolved_func_callsite_state_t; - -static unresolved_func_callsite_state_t* unresolved_callsite_alloc(char* function_name, int arity, - int type_inferencing, int context_flags, mlr_dsl_ast_node_t* pnode) -{ - unresolved_func_callsite_state_t* pstate = mlr_malloc_or_die(sizeof(unresolved_func_callsite_state_t)); - pstate->function_name = mlr_strdup_or_die(function_name); - pstate->arity = arity; - pstate->type_inferencing = type_inferencing; - pstate->context_flags = context_flags; - pstate->pnode = pnode; - return pstate; -} - -static void unresolved_callsite_free(unresolved_func_callsite_state_t* pstate) { - if (pstate == NULL) - return; - free(pstate->function_name); - free(pstate); -} - -// ---------------------------------------------------------------- -static mv_t provisional_call_func(void* pvstate, variables_t* pvars) { - unresolved_func_callsite_state_t* pstate = pvstate; - fprintf(stderr, - "%s: internal coding error: unresolved scalar-return-value callsite \"%s\".\n", - MLR_GLOBALS.bargv0, pstate->function_name); - exit(1); -} - -static void provisional_call_free(rval_evaluator_t* pevaluator) { - unresolved_func_callsite_state_t* pstate = pevaluator->pvstate; - unresolved_callsite_free(pstate); - free(pevaluator); -} - -rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - char* function_name = pnode->text; - int user_provided_arity = pnode->pchildren->length; - - unresolved_func_callsite_state_t* pstate = unresolved_callsite_alloc(function_name, user_provided_arity, - type_inferencing, context_flags, pnode); - - rval_evaluator_t* pev = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pev->pvstate = pstate; - pev->pprocess_func = provisional_call_func; - pev->pfree_func = provisional_call_free; - - // Remember this callsite to a function which may or may not have been defined yet. - // Then later we can resolve them to point to UDF bodies which have been defined. - fmgr_mark_callsite_to_resolve(pfmgr, pev); - - return pev; -} - -// ---------------------------------------------------------------- -static boxed_xval_t provisional_xcall_func(void* pvstate, variables_t* pvars) { - unresolved_func_callsite_state_t* pstate = pvstate; - fprintf(stderr, - "%s: internal coding error: unresolved map-return-value callsite \"%s\".\n", - MLR_GLOBALS.bargv0, pstate->function_name); - exit(1); -} - -static void provisional_xcall_free(rxval_evaluator_t* pxevaluator) { - unresolved_func_callsite_state_t* pstate = pxevaluator->pvstate; - unresolved_callsite_free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - char* function_name = pnode->text; - int user_provided_arity = pnode->pchildren->length; - - unresolved_func_callsite_state_t* pstate = unresolved_callsite_alloc(function_name, user_provided_arity, - type_inferencing, context_flags, pnode); - - rxval_evaluator_t* pxev = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxev->pvstate = pstate; - pxev->pprocess_func = provisional_xcall_func; - pxev->pfree_func = provisional_xcall_free; - - // Remember this callsite to a function which may or may not have been defined yet. - // Then later we can resolve them to point to UDF bodies which have been defined. - fmgr_mark_xcallsite_to_resolve(pfmgr, pxev); - - return pxev; -} - -// ---------------------------------------------------------------- -void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev) { - sllv_append(pfmgr->pfunc_callsite_evaluators_to_resolve, pev); -} - -void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev) { - sllv_append(pfmgr->pfunc_callsite_xevaluators_to_resolve, pxev); -} - -// ---------------------------------------------------------------- -// Resolving a callsite involves treewalking the AST which may find more callsites to -// resolve. E.g. in '$y = f(g($x))', f is initially unresolved (f and/or g perhaps as yet -// undefined as of when the callsite is parsed), then at resolution time for f, its -// argument 'g($x)' is encountered, initially unresolved, then resolved. -// Hence the outer loop. -void fmgr_resolve_func_callsites(fmgr_t* pfmgr) { - while (TRUE) { - int did = FALSE; - while (pfmgr->pfunc_callsite_xevaluators_to_resolve->phead != NULL) { - did = TRUE; - rxval_evaluator_t* pxev = sllv_pop(pfmgr->pfunc_callsite_xevaluators_to_resolve); - unresolved_func_callsite_state_t* ptemp_state = pxev->pvstate; - resolve_func_xcallsite(pfmgr, pxev); - unresolved_callsite_free(ptemp_state); - } - - while (pfmgr->pfunc_callsite_evaluators_to_resolve->phead != NULL) { - did = TRUE; - rval_evaluator_t* pev = sllv_pop(pfmgr->pfunc_callsite_evaluators_to_resolve); - unresolved_func_callsite_state_t* ptemp_state = pev->pvstate; - resolve_func_callsite(pfmgr, pev); - unresolved_callsite_free(ptemp_state); - } - if (!did) { - break; - } - } -} - -// ---------------------------------------------------------------- -static rval_evaluator_t* construct_udf_callsite_evaluator( - fmgr_t* pfmgr, - unresolved_func_callsite_state_t* pcallsite) -{ - char* function_name = pcallsite->function_name; - int user_provided_arity = pcallsite->arity; - int type_inferencing = pcallsite->type_inferencing; - int context_flags = pcallsite->context_flags; - mlr_dsl_ast_node_t* pnode = pcallsite->pnode; - - udf_defsite_state_t* pudf_defsite_state = lhmsv_get(pfmgr->pudf_names_to_defsite_states, - pcallsite->function_name); - - if (pudf_defsite_state != NULL) { - int udf_arity = pudf_defsite_state->arity; - if (user_provided_arity != udf_arity) { - fprintf(stderr, "Function named \"%s\" takes %d argument%s; got %d.\n", - function_name, udf_arity, (udf_arity == 1) ? "" : "s", user_provided_arity); - exit(1); - } - - return fmgr_alloc_from_udf_callsite(pfmgr, pudf_defsite_state, - pnode, function_name, user_provided_arity, type_inferencing, context_flags); - } else { - return NULL; - } -} - -static rxval_evaluator_t* construct_udf_defsite_xevaluator( - fmgr_t* pfmgr, - unresolved_func_callsite_state_t* pcallsite) -{ - char* function_name = pcallsite->function_name; - int user_provided_arity = pcallsite->arity; - int type_inferencing = pcallsite->type_inferencing; - int context_flags = pcallsite->context_flags; - mlr_dsl_ast_node_t* pnode = pcallsite->pnode; - - udf_defsite_state_t* pudf_defsite_state = lhmsv_get(pfmgr->pudf_names_to_defsite_states, - pcallsite->function_name); - - if (pudf_defsite_state != NULL) { - int udf_arity = pudf_defsite_state->arity; - if (user_provided_arity != udf_arity) { - fprintf(stderr, "Function named \"%s\" takes %d argument%s; got %d.\n", - function_name, udf_arity, (udf_arity == 1) ? "" : "s", user_provided_arity); - exit(1); - } - - return fmgr_alloc_from_udf_xcallsite(pfmgr, pudf_defsite_state, - pnode, function_name, user_provided_arity, type_inferencing, context_flags); - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -static rval_evaluator_t* construct_builtin_function_callsite_evaluator( - fmgr_t* pfmgr, - unresolved_func_callsite_state_t* pcallsite) -{ - char* function_name = pcallsite->function_name; - int user_provided_arity = pcallsite->arity; - int type_inferencing = pcallsite->type_inferencing; - int context_flags = pcallsite->context_flags; - mlr_dsl_ast_node_t* pnode = pcallsite->pnode; - - int variadic = FALSE; - fmgr_check_arity_with_report(pfmgr, function_name, user_provided_arity, &variadic); - - rval_evaluator_t* pevaluator = NULL; - if (variadic) { - int nargs = pnode->pchildren->length; - rval_evaluator_t** pargs = mlr_malloc_or_die(nargs * sizeof(rval_evaluator_t*)); - int i = 0; - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pargs[i] = rval_evaluator_alloc_from_ast(pchild, pfmgr, type_inferencing, context_flags); - } - pevaluator = fmgr_alloc_evaluator_from_variadic_func_name(function_name, pargs, nargs); - - } else if (user_provided_arity == 0) { - pevaluator = fmgr_alloc_evaluator_from_zary_func_name(function_name); - } else if (user_provided_arity == 1) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_unary_func_name(function_name, parg1); - } else if (user_provided_arity == 2) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; - int type2 = parg2_node->type; - - int is_regexy = - streq(function_name, "=~") || - streq(function_name, "!=~") || - streq(function_name, "regextract"); - - if (is_regexy && type2 == MD_AST_NODE_TYPE_STRING_LITERAL) { - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(function_name, - parg1, parg2_node->text, FALSE); - } else if (is_regexy && type2 == MD_AST_NODE_TYPE_REGEXI) { - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(function_name, parg1, parg2_node->text, - TYPE_INFER_STRING_FLOAT_INT); - } else { - // regexes can still be applied here, e.g. if the 2nd argument is a non-terminal AST: however - // the regexes will be compiled record-by-record rather than once at alloc time, which will - // be slower. - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - rval_evaluator_t* parg2 = rval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_binary_func_name(function_name, parg1, parg2); - } - - } else if (user_provided_arity == 3) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* parg3_node = pnode->pchildren->phead->pnext->pnext->pvvalue; - int type2 = parg2_node->type; - - int is_regexy = - streq(function_name, "sub") || - streq(function_name, "gsub") || - streq(function_name, "regextract_or_else"); - - if (is_regexy && type2 == MD_AST_NODE_TYPE_STRING_LITERAL) { - // sub/gsub-regex special case: - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(function_name, parg1, parg2_node->text, - FALSE, parg3); - - } else if (is_regexy && type2 == MD_AST_NODE_TYPE_REGEXI) { - // sub/gsub-regex special case: - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(function_name, parg1, parg2_node->text, - TYPE_INFER_STRING_FLOAT_INT, parg3); - - } else { - // regexes can still be applied here, e.g. if the 2nd argument is a non-terminal AST: however - // the regexes will be compiled record-by-record rather than once at alloc time, which will - // be slower. - rval_evaluator_t* parg1 = rval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - rval_evaluator_t* parg2 = rval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - rval_evaluator_t* parg3 = rval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); - pevaluator = fmgr_alloc_evaluator_from_ternary_func_name(function_name, parg1, parg2, parg3); - } - - } else { - fprintf(stderr, "Miller: internal coding error: arity for function name \"%s\" misdetected.\n", - function_name); - exit(1); - } - - return pevaluator; -} - -// ---------------------------------------------------------------- -// At callsites, arguments can be scalars or maps; return values can be scalars -// or maps. At the user level, a function take map input and produce scalar -// output or vice versa. As of this writing, though, *internally* functions -// go from scalars to scalar or maps to map. This wrapper wraps scalar input -// to functions which know about maps. - -typedef struct _xeval_wrapping_eval_state_t { - rval_evaluator_t* pevaluator; -} xeval_wrapping_eval_state_t; - -static boxed_xval_t xeval_wrapping_eval_func(void* pvstate, variables_t* pvars) { - xeval_wrapping_eval_state_t* pstate = pvstate; - rval_evaluator_t* pevaluator = pstate->pevaluator; - mv_t val = pevaluator->pprocess_func(pevaluator->pvstate, pvars); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(val), - .is_ephemeral = TRUE, // xxx verify reference semantics for RHS evaluators! - }; -} - -static void xeval_wrapping_eval_free(rxval_evaluator_t* pxevaluator) { - xeval_wrapping_eval_state_t* pstate = pxevaluator->pvstate; - pstate->pevaluator->pfree_func(pstate->pevaluator); - free(pstate); - free(pxevaluator); -} - -static rxval_evaluator_t* fmgr_alloc_xeval_wrapping_eval(rval_evaluator_t* pevaluator) { - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - - xeval_wrapping_eval_state_t* pstate = mlr_malloc_or_die(sizeof(xeval_wrapping_eval_state_t)); - pstate->pevaluator = pevaluator; - - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = xeval_wrapping_eval_func; - pxevaluator->pfree_func = xeval_wrapping_eval_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -// At callsites, arguments can be scalars or maps; return values can be scalars -// or maps. At the user level, a function take map input and produce scalar -// output or vice versa. As of this writing, though, *internally* functions go -// from scalars to scalar or maps to map. This wrapper wraps maybe-map input to -// functions which do not know about maps. - -typedef struct _eval_wrapping_xeval_state_t { - rxval_evaluator_t* pxevaluator; -} eval_wrapping_xeval_state_t; - -static mv_t eval_wrapping_xeval_func(void* pvstate, variables_t* pvars) { - eval_wrapping_xeval_state_t* pstate = pvstate; - rxval_evaluator_t* pxevaluator = pstate->pxevaluator; - boxed_xval_t bxval = pxevaluator->pprocess_func(pxevaluator->pvstate, pvars); - - if (bxval.xval.is_terminal) { - if (bxval.is_ephemeral) { - return bxval.xval.terminal_mlrval; - } else { - return mv_copy(&bxval.xval.terminal_mlrval); - } - - } else { - if (bxval.is_ephemeral) { - mlhmmv_xvalue_free(&bxval.xval); - } - return mv_error(); - } - -} - -static void eval_wrapping_xeval_free(rval_evaluator_t* pevaluator) { - eval_wrapping_xeval_state_t* pstate = pevaluator->pvstate; - pstate->pxevaluator->pfree_func(pstate->pxevaluator); - free(pstate); - free(pevaluator); -} - -static rval_evaluator_t* fmgr_alloc_eval_wrapping_xeval(rxval_evaluator_t* pxevaluator) { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - eval_wrapping_xeval_state_t* pstate = mlr_malloc_or_die(sizeof(eval_wrapping_xeval_state_t)); - pstate->pxevaluator = pxevaluator; - - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = eval_wrapping_xeval_func; - pevaluator->pfree_func = eval_wrapping_xeval_free; - - return pevaluator; -} - -// ================================================================ -static rval_evaluator_t* fmgr_alloc_evaluator_from_variadic_func_name(char* fnnm, rval_evaluator_t** pargs, int nargs) { - if (streq(fnnm, "min")) { return rval_evaluator_alloc_from_variadic_func(variadic_min_func, pargs, nargs); - } else if (streq(fnnm, "max")) { return rval_evaluator_alloc_from_variadic_func(variadic_max_func, pargs, nargs); - } else return NULL; -} - -// ================================================================ -static rval_evaluator_t* fmgr_alloc_evaluator_from_zary_func_name(char* function_name) { - if (streq(function_name, "urand")) { - return rval_evaluator_alloc_from_x_z_func(f_z_urand_func); - } else if (streq(function_name, "urand32")) { - return rval_evaluator_alloc_from_x_z_func(i_z_urand32_func); - } else if (streq(function_name, "systime")) { - return rval_evaluator_alloc_from_x_z_func(f_z_systime_func); - } else { - return NULL; - } -} - -// ================================================================ -static rval_evaluator_t* fmgr_alloc_evaluator_from_unary_func_name(char* fnnm, rval_evaluator_t* parg1) { - if (streq(fnnm, "!")) { return rval_evaluator_alloc_from_b_b_func(b_b_not_func, parg1); - } else if (streq(fnnm, "+")) { return rval_evaluator_alloc_from_x_x_func(x_x_upos_func, parg1); - } else if (streq(fnnm, "-")) { return rval_evaluator_alloc_from_x_x_func(x_x_uneg_func, parg1); - } else if (streq(fnnm, ".+")) { return rval_evaluator_alloc_from_x_x_func(x_x_upos_func, parg1); - } else if (streq(fnnm, ".-")) { return rval_evaluator_alloc_from_x_x_func(x_x_uneg_func, parg1); - } else if (streq(fnnm, "abs")) { return rval_evaluator_alloc_from_x_x_func(x_x_abs_func, parg1); - } else if (streq(fnnm, "acos")) { return rval_evaluator_alloc_from_f_f_func(f_f_acos_func, parg1); - } else if (streq(fnnm, "acosh")) { return rval_evaluator_alloc_from_f_f_func(f_f_acosh_func, parg1); - } else if (streq(fnnm, "asin")) { return rval_evaluator_alloc_from_f_f_func(f_f_asin_func, parg1); - } else if (streq(fnnm, "asinh")) { return rval_evaluator_alloc_from_f_f_func(f_f_asinh_func, parg1); - } else if (streq(fnnm, "atan")) { return rval_evaluator_alloc_from_f_f_func(f_f_atan_func, parg1); - } else if (streq(fnnm, "atanh")) { return rval_evaluator_alloc_from_f_f_func(f_f_atanh_func, parg1); - } else if (streq(fnnm, "bitcount")) { return rval_evaluator_alloc_from_i_i_func(i_i_bitcount_func, parg1); - } else if (streq(fnnm, "boolean")) { return rval_evaluator_alloc_from_x_x_func(b_x_boolean_func, parg1); - } else if (streq(fnnm, "cbrt")) { return rval_evaluator_alloc_from_f_f_func(f_f_cbrt_func, parg1); - } else if (streq(fnnm, "ceil")) { return rval_evaluator_alloc_from_x_x_func(x_x_ceil_func, parg1); - } else if (streq(fnnm, "cos")) { return rval_evaluator_alloc_from_f_f_func(f_f_cos_func, parg1); - } else if (streq(fnnm, "cosh")) { return rval_evaluator_alloc_from_f_f_func(f_f_cosh_func, parg1); - } else if (streq(fnnm, "dhms2fsec")) { return rval_evaluator_alloc_from_f_s_func(f_s_dhms2fsec_func, parg1); - } else if (streq(fnnm, "dhms2sec")) { return rval_evaluator_alloc_from_f_s_func(i_s_dhms2sec_func, parg1); - } else if (streq(fnnm, "erf")) { return rval_evaluator_alloc_from_f_f_func(f_f_erf_func, parg1); - } else if (streq(fnnm, "erfc")) { return rval_evaluator_alloc_from_f_f_func(f_f_erfc_func, parg1); - } else if (streq(fnnm, "exp")) { return rval_evaluator_alloc_from_f_f_func(f_f_exp_func, parg1); - } else if (streq(fnnm, "expm1")) { return rval_evaluator_alloc_from_f_f_func(f_f_expm1_func, parg1); - } else if (streq(fnnm, "float")) { return rval_evaluator_alloc_from_x_x_func(f_x_float_func, parg1); - } else if (streq(fnnm, "floor")) { return rval_evaluator_alloc_from_x_x_func(x_x_floor_func, parg1); - } else if (streq(fnnm, "fsec2dhms")) { return rval_evaluator_alloc_from_s_f_func(s_f_fsec2dhms_func, parg1); - } else if (streq(fnnm, "fsec2hms")) { return rval_evaluator_alloc_from_s_f_func(s_f_fsec2hms_func, parg1); - } else if (streq(fnnm, "gmt2sec")) { return rval_evaluator_alloc_from_i_s_func(i_s_gmt2sec_func, parg1); - } else if (streq(fnnm, "localtime2sec")) { return rval_evaluator_alloc_from_i_s_func(i_s_localtime2sec_func, parg1); - } else if (streq(fnnm, "hexfmt")) { return rval_evaluator_alloc_from_x_x_func(s_x_hexfmt_func, parg1); - } else if (streq(fnnm, "hms2fsec")) { return rval_evaluator_alloc_from_f_s_func(f_s_hms2fsec_func, parg1); - } else if (streq(fnnm, "hms2sec")) { return rval_evaluator_alloc_from_f_s_func(i_s_hms2sec_func, parg1); - } else if (streq(fnnm, "int")) { return rval_evaluator_alloc_from_x_x_func(i_x_int_func, parg1); - } else if (streq(fnnm, "invqnorm")) { return rval_evaluator_alloc_from_f_f_func(f_f_invqnorm_func, parg1); - } else if (streq(fnnm, "log")) { return rval_evaluator_alloc_from_f_f_func(f_f_log_func, parg1); - } else if (streq(fnnm, "log10")) { return rval_evaluator_alloc_from_f_f_func(f_f_log10_func, parg1); - } else if (streq(fnnm, "log1p")) { return rval_evaluator_alloc_from_f_f_func(f_f_log1p_func, parg1); - } else if (streq(fnnm, "qnorm")) { return rval_evaluator_alloc_from_f_f_func(f_f_qnorm_func, parg1); - } else if (streq(fnnm, "round")) { return rval_evaluator_alloc_from_x_x_func(x_x_round_func, parg1); - } else if (streq(fnnm, "sec2dhms")) { return rval_evaluator_alloc_from_s_i_func(s_i_sec2dhms_func, parg1); - } else if (streq(fnnm, "sec2gmt")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2gmt_func, parg1); - } else if (streq(fnnm, "sec2gmtdate")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2gmtdate_func, parg1); - } else if (streq(fnnm, "sec2localtime")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2localtime_func, parg1); - } else if (streq(fnnm, "sec2localdate")) { return rval_evaluator_alloc_from_x_x_func(s_x_sec2localdate_func, parg1); - } else if (streq(fnnm, "sec2hms")) { return rval_evaluator_alloc_from_s_i_func(s_i_sec2hms_func, parg1); - } else if (streq(fnnm, "sgn")) { return rval_evaluator_alloc_from_x_x_func(x_x_sgn_func, parg1); - } else if (streq(fnnm, "sin")) { return rval_evaluator_alloc_from_f_f_func(f_f_sin_func, parg1); - } else if (streq(fnnm, "sinh")) { return rval_evaluator_alloc_from_f_f_func(f_f_sinh_func, parg1); - } else if (streq(fnnm, "sqrt")) { return rval_evaluator_alloc_from_f_f_func(f_f_sqrt_func, parg1); - } else if (streq(fnnm, "string")) { return rval_evaluator_alloc_from_x_x_func(s_x_string_func, parg1); - } else if (streq(fnnm, "strlen")) { return rval_evaluator_alloc_from_i_s_func(i_s_strlen_func, parg1); - } else if (streq(fnnm, "tan")) { return rval_evaluator_alloc_from_f_f_func(f_f_tan_func, parg1); - } else if (streq(fnnm, "tanh")) { return rval_evaluator_alloc_from_f_f_func(f_f_tanh_func, parg1); - } else if (streq(fnnm, "tolower")) { return rval_evaluator_alloc_from_s_s_func(s_s_tolower_func, parg1); - } else if (streq(fnnm, "toupper")) { return rval_evaluator_alloc_from_s_s_func(s_s_toupper_func, parg1); - } else if (streq(fnnm, "capitalize")) { return rval_evaluator_alloc_from_s_s_func(s_s_capitalize_func, parg1); - } else if (streq(fnnm, "system")) { return rval_evaluator_alloc_from_s_s_func(s_s_system_func, parg1); - } else if (streq(fnnm, "lstrip")) { return rval_evaluator_alloc_from_s_s_func(s_s_lstrip_func, parg1); - } else if (streq(fnnm, "rstrip")) { return rval_evaluator_alloc_from_s_s_func(s_s_rstrip_func, parg1); - } else if (streq(fnnm, "strip")) { return rval_evaluator_alloc_from_s_s_func(s_s_strip_func, parg1); - } else if (streq(fnnm, "collapse_whitespace")) { return rval_evaluator_alloc_from_s_s_func(s_s_collapse_whitespace_func, parg1); - } else if (streq(fnnm, "clean_whitespace")) { return rval_evaluator_alloc_from_s_s_func(s_s_clean_whitespace_func, parg1); - } else if (streq(fnnm, "~")) { return rval_evaluator_alloc_from_i_i_func(i_i_bitwise_not_func, parg1); - - } else return NULL; -} - -// ================================================================ -static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_func_name(char* fnnm, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - if (streq(fnnm, "&&")) { return rval_evaluator_alloc_from_b_bb_and_func(parg1, parg2); - } else if (streq(fnnm, "||")) { return rval_evaluator_alloc_from_b_bb_or_func (parg1, parg2); - } else if (streq(fnnm, "^^")) { return rval_evaluator_alloc_from_b_bb_xor_func(parg1, parg2); - } else if (streq(fnnm, "=~")) { return rval_evaluator_alloc_from_x_ssc_func( - matches_no_precomp_func, parg1, parg2); - } else if (streq(fnnm, "regextract")) { return rval_evaluator_alloc_from_x_ss_func( - regextract_no_precomp_func, parg1, parg2); - } else if (streq(fnnm, "!=~")) { return rval_evaluator_alloc_from_x_ssc_func(does_not_match_no_precomp_func, parg1, parg2); - } else if (streq(fnnm, "==")) { return rval_evaluator_alloc_from_x_xx_func(eq_op_func, parg1, parg2); - } else if (streq(fnnm, "!=")) { return rval_evaluator_alloc_from_x_xx_func(ne_op_func, parg1, parg2); - } else if (streq(fnnm, ">")) { return rval_evaluator_alloc_from_x_xx_func(gt_op_func, parg1, parg2); - } else if (streq(fnnm, ">=")) { return rval_evaluator_alloc_from_x_xx_func(ge_op_func, parg1, parg2); - } else if (streq(fnnm, "<")) { return rval_evaluator_alloc_from_x_xx_func(lt_op_func, parg1, parg2); - } else if (streq(fnnm, "<=")) { return rval_evaluator_alloc_from_x_xx_func(le_op_func, parg1, parg2); - } else if (streq(fnnm, ".")) { return rval_evaluator_alloc_from_x_xx_func(s_xx_dot_func, parg1, parg2); - - } else if (streq(fnnm, "+")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_plus_func, parg1, parg2); - } else if (streq(fnnm, "-")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_minus_func, parg1, parg2); - } else if (streq(fnnm, "*")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, parg1, parg2); - } else if (streq(fnnm, "/")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_divide_func, parg1, parg2); - } else if (streq(fnnm, "//")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_int_divide_func, parg1, parg2); - - } else if (streq(fnnm, ".+")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_oplus_func, parg1, parg2); - } else if (streq(fnnm, ".-")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_ominus_func, parg1, parg2); - } else if (streq(fnnm, ".*")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_otimes_func, parg1, parg2); - } else if (streq(fnnm, "./")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_odivide_func, parg1, parg2); - } else if (streq(fnnm, ".//")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_int_odivide_func, parg1, parg2); - - } else if (streq(fnnm, "%")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_mod_func, parg1, parg2); - } else if (streq(fnnm, "**")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_pow_func, parg1, parg2); - } else if (streq(fnnm, "pow")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_pow_func, parg1, parg2); - } else if (streq(fnnm, "atan2")){ return rval_evaluator_alloc_from_f_ff_func(f_ff_atan2_func, parg1, parg2); - } else if (streq(fnnm, "roundm")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_roundm_func, parg1, parg2); - } else if (streq(fnnm, "fmtnum")) { return rval_evaluator_alloc_from_s_xs_func(s_xs_fmtnum_func, parg1, parg2); - } else if (streq(fnnm, "urandint")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_urandint_func, parg1, parg2); - } else if (streq(fnnm, "sec2gmt")) { return rval_evaluator_alloc_from_x_xi_func(s_xi_sec2gmt_func, parg1, parg2); - } else if (streq(fnnm, "sec2localtime")) { return rval_evaluator_alloc_from_x_xi_func(s_xi_sec2localtime_func, parg1, parg2); - } else if (streq(fnnm, "&")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_band_func, parg1, parg2); - } else if (streq(fnnm, "|")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_bor_func, parg1, parg2); - } else if (streq(fnnm, "^")) { return rval_evaluator_alloc_from_x_xx_func(x_xx_bxor_func, parg1, parg2); - } else if (streq(fnnm, "<<")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_bitwise_lsh_func, parg1, parg2); - } else if (streq(fnnm, ">>")) { return rval_evaluator_alloc_from_i_ii_func(i_ii_bitwise_rsh_func, parg1, parg2); - } else if (streq(fnnm, "strftime")) { return rval_evaluator_alloc_from_x_ns_func(s_ns_strftime_func, parg1, parg2); - } else if (streq(fnnm, "strftime_local")) { return rval_evaluator_alloc_from_x_ns_func(s_ns_strftime_local_func, parg1, parg2); - } else if (streq(fnnm, "strptime")) { return rval_evaluator_alloc_from_x_ss_func(i_ss_strptime_func, parg1, parg2); - } else if (streq(fnnm, "strptime_local")) { return rval_evaluator_alloc_from_x_ss_func(i_ss_strptime_local_func, parg1, parg2); - } else if (streq(fnnm, "urandrange")) { return rval_evaluator_alloc_from_f_ff_func(f_ff_urandrange_func, parg1, parg2); - } else if (streq(fnnm, "truncate")) { return rval_evaluator_alloc_from_s_si_func(s_si_truncate_func, parg1, parg2); - } else { return NULL; } -} - -static rval_evaluator_t* fmgr_alloc_evaluator_from_binary_regex_arg2_func_name(char* fnnm, - rval_evaluator_t* parg1, char* regex_string, int ignore_case) -{ - if (streq(fnnm, "=~")) { - return rval_evaluator_alloc_from_x_sr_func(matches_precomp_func, parg1, regex_string, ignore_case); - } else if (streq(fnnm, "!=~")) { - return rval_evaluator_alloc_from_x_sr_func(does_not_match_precomp_func, parg1, regex_string, ignore_case); - } else if (streq(fnnm, "regextract")) { - return rval_evaluator_alloc_from_x_se_func(regextract_precomp_func, parg1, regex_string, ignore_case); - } else { return NULL; } -} - -// ================================================================ -static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_func_name(char* fnnm, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - if (streq(fnnm, "sub")) { - return rval_evaluator_alloc_from_s_sss_func(sub_no_precomp_func, parg1, parg2, parg3); - } else if (streq(fnnm, "gsub")) { - return rval_evaluator_alloc_from_s_sss_func(gsub_no_precomp_func, parg1, parg2, parg3); - } else if (streq(fnnm, "ssub")) { - return rval_evaluator_alloc_from_s_sss_func(s_sss_ssub_func, parg1, parg2, parg3); - } else if (streq(fnnm, "regextract_or_else")) { - return rval_evaluator_alloc_from_s_sss_func(regextract_or_else_no_precomp_func, parg1, parg2, parg3); - } else if (streq(fnnm, "logifit")) { - return rval_evaluator_alloc_from_f_fff_func(f_fff_logifit_func, parg1, parg2, parg3); - } else if (streq(fnnm, "madd")) { - return rval_evaluator_alloc_from_i_iii_func(i_iii_modadd_func, parg1, parg2, parg3); - } else if (streq(fnnm, "msub")) { - return rval_evaluator_alloc_from_i_iii_func(i_iii_modsub_func, parg1, parg2, parg3); - } else if (streq(fnnm, "mmul")) { - return rval_evaluator_alloc_from_i_iii_func(i_iii_modmul_func, parg1, parg2, parg3); - } else if (streq(fnnm, "mexp")) { - return rval_evaluator_alloc_from_i_iii_func(i_iii_modexp_func, parg1, parg2, parg3); - } else if (streq(fnnm, "substr")) { - return rval_evaluator_alloc_from_s_sii_func(s_sii_substr_func, parg1, parg2, parg3); - } else if (streq(fnnm, "? :")) { - return rval_evaluator_alloc_from_ternop(parg1, parg2, parg3); - } else { return NULL; } -} - -static rval_evaluator_t* fmgr_alloc_evaluator_from_ternary_regex_arg2_func_name(char* fnnm, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) -{ - if (streq(fnnm, "sub")) { - return rval_evaluator_alloc_from_x_srs_func(sub_precomp_func, parg1, regex_string, ignore_case, parg3); - } else if (streq(fnnm, "gsub")) { - return rval_evaluator_alloc_from_x_srs_func(gsub_precomp_func, parg1, regex_string, ignore_case, parg3); - } else if (streq(fnnm, "regextract_or_else")) { - return rval_evaluator_alloc_from_x_ses_func(regextract_or_else_precomp_func, parg1, regex_string, ignore_case, parg3); - } else { return NULL; } -} - -// ================================================================ -static rxval_evaluator_t* construct_builtin_function_callsite_xevaluator( - fmgr_t* pfmgr, - unresolved_func_callsite_state_t* pcallsite) -{ - char* function_name = pcallsite->function_name; - int user_provided_arity = pcallsite->arity; - int type_inferencing = pcallsite->type_inferencing; - int context_flags = pcallsite->context_flags; - mlr_dsl_ast_node_t* pnode = pcallsite->pnode; - - int variadic = FALSE; - fmgr_check_arity_with_report(pfmgr, function_name, user_provided_arity, &variadic); - - rxval_evaluator_t* pxevaluator = NULL; - if (variadic) { - pxevaluator = fmgr_alloc_xevaluator_from_variadic_func_name(function_name, pnode->pchildren, - pfmgr, type_inferencing, context_flags); - - } else if (user_provided_arity == 1) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - pxevaluator = fmgr_alloc_xevaluator_from_unary_func_name(function_name, parg1_node, - pfmgr, type_inferencing, context_flags); - - } else if (user_provided_arity == 2) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; - pxevaluator = fmgr_alloc_xevaluator_from_binary_func_name(function_name, parg1_node, parg2_node, - pfmgr, type_inferencing, context_flags); - - } else if (user_provided_arity == 3) { - mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* parg3_node = pnode->pchildren->phead->pnext->pnext->pvvalue; - pxevaluator = fmgr_alloc_xevaluator_from_ternary_func_name(function_name, parg1_node, parg2_node, parg3_node, - pfmgr, type_inferencing, context_flags); - } - - return pxevaluator; -} - -// ---------------------------------------------------------------- -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_variadic_func_name( - char* function_name, - sllv_t* parg_nodes, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - if (streq(function_name, "mapsum")) { - return rxval_evaluator_alloc_from_variadic_func(variadic_mapsum_xfunc, parg_nodes, - pfmgr, type_inferencing, context_flags); - } else if (streq(function_name, "mapdiff")) { - return rxval_evaluator_alloc_from_variadic_func(variadic_mapdiff_xfunc, parg_nodes, - pfmgr, type_inferencing, context_flags); - } else if (streq(function_name, "mapexcept")) { - return rxval_evaluator_alloc_from_variadic_func(variadic_mapexcept_xfunc, parg_nodes, - pfmgr, type_inferencing, context_flags); - } else if (streq(function_name, "mapselect")) { - return rxval_evaluator_alloc_from_variadic_func(variadic_mapselect_xfunc, parg_nodes, - pfmgr, type_inferencing, context_flags); - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_unary_func_name(char* fnnm, - mlr_dsl_ast_node_t* parg1, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) -{ - - if (streq(fnnm, "asserting_absent")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_absent_no_free_xfunc, parg1, pf, ti, cf, "absent"); - } else if (streq(fnnm, "asserting_bool")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_boolean_no_free_xfunc, parg1, pf, ti, cf, "boolean"); - } else if (streq(fnnm, "asserting_boolean")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_boolean_no_free_xfunc, parg1, pf, ti, cf, "boolean"); - } else if (streq(fnnm, "asserting_empty")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_empty_no_free_xfunc, parg1, pf, ti, cf, "empty"); - } else if (streq(fnnm, "asserting_empty_map")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_empty_map_no_free_xfunc, parg1, pf, ti, cf, "empty_map"); - } else if (streq(fnnm, "asserting_float")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_float_no_free_xfunc, parg1, pf, ti, cf, "float"); - } else if (streq(fnnm, "asserting_int")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_int_no_free_xfunc, parg1, pf, ti, cf, "int"); - } else if (streq(fnnm, "asserting_map")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_map_no_free_xfunc, parg1, pf, ti, cf, "map"); - } else if (streq(fnnm, "asserting_nonempty_map")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_nonempty_map_no_free_xfunc, parg1, pf, ti, cf, - "nonempty_map"); - } else if (streq(fnnm, "asserting_not_empty")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_empty_no_free_xfunc, parg1, pf, ti, cf, "not_empty"); - } else if (streq(fnnm, "asserting_not_map")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_map_no_free_xfunc, parg1, pf, ti, cf, "not_map"); - } else if (streq(fnnm, "asserting_not_null")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_not_null_no_free_xfunc, parg1, pf, ti, cf, "not_null"); - } else if (streq(fnnm, "asserting_null")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_null_no_free_xfunc, parg1, pf, ti, cf, "null"); - } else if (streq(fnnm, "asserting_numeric")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_numeric_no_free_xfunc, parg1, pf, ti, cf, "numeric"); - } else if (streq(fnnm, "asserting_present")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_present_no_free_xfunc, parg1, pf, ti, cf, "present"); - } else if (streq(fnnm, "asserting_string")) { - return rxval_evaluator_alloc_from_A_x_func(b_x_is_string_no_free_xfunc, parg1, pf, ti, cf, "string"); - - } else if (streq(fnnm, "is_absent")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_absent_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_bool")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_boolean_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_boolean")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_boolean_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_empty")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_empty_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_empty_map")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_empty_map_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_float")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_float_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_int")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_int_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_map")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_map_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_nonempty_map")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_nonempty_map_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_not_empty")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_empty_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_not_map")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_map_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_not_null")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_not_null_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_null")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_null_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_numeric")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_numeric_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_present")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_present_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "is_string")) { - return rxval_evaluator_alloc_from_x_x_func(b_x_is_string_xfunc, parg1, pf, ti, cf); - - } else if (streq(fnnm, "typeof")) { - return rxval_evaluator_alloc_from_x_x_func(s_x_typeof_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "length")) { - return rxval_evaluator_alloc_from_x_x_func(i_x_length_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "depth")) { - return rxval_evaluator_alloc_from_x_x_func(i_x_depth_xfunc, parg1, pf, ti, cf); - } else if (streq(fnnm, "leafcount")) { - return rxval_evaluator_alloc_from_x_x_func(i_x_leafcount_xfunc, parg1, pf, ti, cf); - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_binary_func_name(char* fnnm, - mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* parg2, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) -{ - if (streq(fnnm, "haskey")) { - return rxval_evaluator_alloc_from_x_mx_func(b_xx_haskey_xfunc, parg1, parg2, pf, ti, cf); - } else if (streq(fnnm, "splitnv")) { - return rxval_evaluator_alloc_from_x_ss_func(m_ss_splitnv_xfunc, parg1, parg2, pf, ti, cf); - } else if (streq(fnnm, "splitnvx")) { - return rxval_evaluator_alloc_from_x_ss_func(m_ss_splitnvx_xfunc, parg1, parg2, pf, ti, cf); - } else if (streq(fnnm, "joink")) { - return rxval_evaluator_alloc_from_x_ms_func(s_ms_joink_xfunc, parg1, parg2, pf, ti, cf); - } else if (streq(fnnm, "joinv")) { - return rxval_evaluator_alloc_from_x_ms_func(s_ms_joinv_xfunc, parg1, parg2, pf, ti, cf); - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -static rxval_evaluator_t* fmgr_alloc_xevaluator_from_ternary_func_name(char* fnnm, - mlr_dsl_ast_node_t* parg1, mlr_dsl_ast_node_t* parg2, mlr_dsl_ast_node_t* parg3, - fmgr_t* pf, int ti /*type_inferencing*/, int cf /*context_flags*/) -{ - if (streq(fnnm, "joinkv")) { - return rxval_evaluator_alloc_from_x_mss_func(s_mss_joinkv_xfunc, parg1, parg2, parg3, pf, ti, cf); - } else if (streq(fnnm, "splitkv")) { - return rxval_evaluator_alloc_from_x_sss_func(m_sss_splitkv_xfunc, parg1, parg2, parg3, pf, ti, cf); - } else if (streq(fnnm, "splitkvx")) { - return rxval_evaluator_alloc_from_x_sss_func(m_sss_splitkvx_xfunc, parg1, parg2, parg3, pf, ti, cf); - } else { - return NULL; - } -} - -// ================================================================ -// Return value is in scalar context. -static void resolve_func_callsite(fmgr_t* pfmgr, rval_evaluator_t* pev) { - unresolved_func_callsite_state_t* pcallsite = pev->pvstate; - - rval_evaluator_t* pevaluator = construct_udf_callsite_evaluator(pfmgr, pcallsite); - if (pevaluator != NULL) { - // Struct assignment into the callsite space - *pev = *pevaluator; - free(pevaluator); - return; - } - - // Really there are map-in,map-out, map-in,scalar-out, and - // scalar-in,scalar-out: and actually even more subtle, e.g. the join - // functions take a mix of map and string arguments. What we have - // internally are builtin function evaluators (scalars only) and builtin - // function xevaluators (at least one argument, and/or retval, is a map). - rxval_evaluator_t* pxevaluator = construct_builtin_function_callsite_xevaluator(pfmgr, pcallsite); - if (pxevaluator != NULL) { - pevaluator = fmgr_alloc_eval_wrapping_xeval(pxevaluator); - *pev = *pevaluator; - free(pevaluator); - return; - } - - pevaluator = construct_builtin_function_callsite_evaluator(pfmgr, pcallsite); - if (pevaluator != NULL) { - *pev = *pevaluator; - free(pevaluator); - return; - } - - fprintf(stderr, "Miller: unrecognized function name \"%s\".\n", pcallsite->function_name); - exit(1); -} - -// ---------------------------------------------------------------- -// Return value is in map context. -static void resolve_func_xcallsite(fmgr_t* pfmgr, rxval_evaluator_t* pxev) { - unresolved_func_callsite_state_t* pcallsite = pxev->pvstate; - - rxval_evaluator_t* pxevaluator = construct_udf_defsite_xevaluator(pfmgr, pcallsite); - if (pxevaluator != NULL) { - // Struct assignment into the callsite space - *pxev = *pxevaluator; - free(pxevaluator); - return; - } - - pxevaluator = construct_builtin_function_callsite_xevaluator(pfmgr, pcallsite); - if (pxevaluator != NULL) { - *pxev = *pxevaluator; - free(pxevaluator); - return; - } - - rval_evaluator_t* pevaluator = construct_builtin_function_callsite_evaluator(pfmgr, pcallsite); - pxevaluator = fmgr_alloc_xeval_wrapping_eval(pevaluator); - if (pxevaluator != NULL) { - *pxev = *pxevaluator; - free(pxevaluator); - return; - } - - fprintf(stderr, "Miller: unrecognized function name \"%s\".\n", pcallsite->function_name); - exit(1); -} diff --git a/c/dsl/function_manager.h b/c/dsl/function_manager.h deleted file mode 100644 index 27cc4a2a7..000000000 --- a/c/dsl/function_manager.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef FUNCTION_MANAGER_H -#define FUNCTION_MANAGER_H - -#include "lib/context.h" -#include "lib/mlrval.h" -#include "containers/lhmsv.h" -#include "containers/hss.h" -#include "dsl/mlr_dsl_ast.h" -#include "dsl/rval_evaluator.h" -#include "dsl/rxval_evaluator.h" -#include "dsl/type_inference.h" - -// ---------------------------------------------------------------- -// Things a user-defined function (however it is implemented) needs in order to -// be called: pvstate is its own state (whatever that is), and it defines its -// own process and free functions implementing this interface. - -typedef boxed_xval_t udf_defsite_process_func_t(void* pvstate, int arity, boxed_xval_t* pargs, variables_t* pvars); -typedef void udf_defsite_free_func_t(void* pvstate, context_t* pctx); - -typedef struct _udf_defsite_state_t { - void* pvstate; - char* name; - int arity; - udf_defsite_process_func_t* pprocess_func; - udf_defsite_free_func_t* pfree_func; -} udf_defsite_state_t; - -// ---------------------------------------------------------------- -// Holds built-in functions as well as user-defined functions - -struct _function_lookup_t; // Private to the .c file -typedef struct _fmgr_t { - struct _function_lookup_t * function_lookup_table; // Built-ins - hss_t* built_in_function_names; // Built-ins - lhmsv_t* pudf_names_to_defsite_states; // UDF bodies - // Function callsites, used to bootstrap (e.g. function f calls function g before the latter - // has been defined). - sllv_t* pfunc_callsite_evaluators_to_resolve; // return value in scalar context - sllv_t* pfunc_callsite_xevaluators_to_resolve; // return value in map context -} fmgr_t; - -// ---------------------------------------------------------------- -fmgr_t* fmgr_alloc(); - -void fmgr_free(fmgr_t* pfmgr, context_t* pctx); - -void fmgr_install_udf(fmgr_t* pfmgr, udf_defsite_state_t* pdefsitate_state); - -// Callsites as defined by AST nodes, with scalar-context return values -rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags); -// Callsites as defined by AST nodes, with map-context return values -rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags); - -void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev); -void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev); -// Update all function callsites to point to UDF bodies, once all the latter have been defined. -void fmgr_resolve_func_callsites(fmgr_t* pfmgr); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void fmgr_list_functions(fmgr_t* pfmgr, FILE* output_stream, char* leader); - -// Pass function_name == NULL to get usage for all functions: -void fmgr_function_usage(fmgr_t* pfmgr, FILE* output_stream, char* function_name); - -void fmgr_list_all_functions_raw(fmgr_t* pfmgr, FILE* output_stream); - -void fmgr_list_all_functions_as_table(fmgr_t* pfmgr, FILE* output_stream); - -#endif // FUNCTION_MANAGER_H diff --git a/c/dsl/keylist_evaluators.c b/c/dsl/keylist_evaluators.c deleted file mode 100644 index 401d704bd..000000000 --- a/c/dsl/keylist_evaluators.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "keylist_evaluators.h" -#include "rval_evaluators.h" - -// ---------------------------------------------------------------- -// Example ASTs, with and without indexing on the left-hand-side oosvar name: - -// $ mlr -n put -v '@x[1]["2"][$3][@4]=5' -// AST ROOT: -// text="list", type=statement_list: -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="x", type=string_literal. -// text="1", type=numeric_literal. -// text="2", type=numeric_literal. -// text="3", type=field_name. -// text="oosvar_keylist", type=oosvar_keylist: -// text="4", type=string_literal. -// text="5", type=numeric_literal. -// -// $ mlr -n put -v '@x = $y' -// AST ROOT: -// text="list", type=statement_list: -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="x", type=string_literal. -// text="y", type=field_name. -// -// $ mlr -n put -q -v 'emit @v, "a", "b", "c"' -// AST ROOT: -// text="list", type=statement_list: -// text="emit", type=emit: -// text="emit", type=emit: -// text="oosvar_keylist", type=oosvar_keylist: -// text="v", type=string_literal. -// text="emit_namelist", type=emit: -// text="a", type=numeric_literal. -// text="b", type=numeric_literal. -// text="c", type=numeric_literal. -// text="stream", type=stream: -// -// $ mlr -n put -q -v 'emit @v[1][2], "a", "b","c"' -// AST ROOT: -// text="list", type=statement_list: -// text="emit", type=emit: -// text="emit", type=emit: -// text="oosvar_keylist", type=oosvar_keylist: -// text="v", type=string_literal. -// text="1", type=numeric_literal. -// text="2", type=numeric_literal. -// text="emit_namelist", type=emit: -// text="a", type=numeric_literal. -// text="b", type=numeric_literal. -// text="c", type=numeric_literal. -// text="stream", type=stream: - -// pnode is input; pkeylist_evaluators is appended to. -sllv_t* allocate_keylist_evaluators_from_ast_node( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - sllv_t* pkeylist_evaluators = sllv_alloc(); - - if (pnode->pchildren != NULL) { // Non-indexed localvars have no child nodes in the AST. - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); - } else { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, - type_inferencing, context_flags)); - } - } - } - - return pkeylist_evaluators; -} diff --git a/c/dsl/keylist_evaluators.h b/c/dsl/keylist_evaluators.h deleted file mode 100644 index 64dc6eacc..000000000 --- a/c/dsl/keylist_evaluators.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef KEYLIST_EVALUATORS_H -#define KEYLIST_EVALUATORS_H - -#include "containers/sllv.h" -#include "dsl/mlr_dsl_ast.h" -#include "dsl/function_manager.h" - -sllv_t* allocate_keylist_evaluators_from_ast_node( - mlr_dsl_ast_node_t* pnode, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -#endif // KEYLIST_EVALUATORS_H diff --git a/c/dsl/mlr_dsl_ast.c b/c/dsl/mlr_dsl_ast.c deleted file mode 100644 index 0dd1eaff3..000000000 --- a/c/dsl/mlr_dsl_ast.c +++ /dev/null @@ -1,400 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "dsl/mlr_dsl_ast.h" - -// ---------------------------------------------------------------- -mlr_dsl_ast_t* mlr_dsl_ast_alloc() { - mlr_dsl_ast_t* past = mlr_malloc_or_die(sizeof(mlr_dsl_ast_t)); - past->proot = NULL; - return past; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc(char* text, mlr_dsl_ast_node_type_t type) { - mlr_dsl_ast_node_t* pnode = (mlr_dsl_ast_node_t*)mlr_malloc_or_die( - sizeof(mlr_dsl_ast_node_t)); - - pnode->text = mlr_strdup_or_die(text); - pnode->type = type; - pnode->pchildren = NULL; - - pnode->vardef_subframe_relative_index = MD_UNUSED_INDEX; - pnode->vardef_subframe_index = MD_UNUSED_INDEX; - pnode->vardef_frame_relative_index = MD_UNUSED_INDEX; - pnode->subframe_var_count = MD_UNUSED_INDEX; - pnode->max_subframe_depth = MD_UNUSED_INDEX; - pnode->max_var_depth = MD_UNUSED_INDEX; - - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_copy(mlr_dsl_ast_node_t* pother) { - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(pother->text, pother->type); - return pnode; -} - -// ---------------------------------------------------------------- -// This is used within the Lemon parser before bind-stack allocation is done. -// It does not copy the indices at each node: text and type. -mlr_dsl_ast_node_t* mlr_dsl_ast_tree_copy(mlr_dsl_ast_node_t* pold) { - mlr_dsl_ast_node_t* pnew = mlr_dsl_ast_node_copy(pold); - if (pold->pchildren != NULL) { - pnew->pchildren = sllv_alloc(); - for (sllve_t* pe = pold->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - sllv_append(pnew->pchildren, mlr_dsl_ast_tree_copy(pchild)); - } - } - return pnew; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_zary(char* text, mlr_dsl_ast_node_type_t type) -{ - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_unary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa) -{ - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_binary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) -{ - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - sllv_append(pnode->pchildren, pb); - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_ternary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc) -{ - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - sllv_append(pnode->pchildren, pb); - sllv_append(pnode->pchildren, pc); - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_quaternary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc, mlr_dsl_ast_node_t* pd) -{ - mlr_dsl_ast_node_t* pnode = mlr_dsl_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - sllv_append(pnode->pchildren, pb); - sllv_append(pnode->pchildren, pc); - sllv_append(pnode->pchildren, pd); - return pnode; -} - -// ---------------------------------------------------------------- -mlr_dsl_ast_node_t* mlr_dsl_ast_node_prepend_arg( - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) -{ - if (pa->pchildren == NULL) - pa->pchildren = sllv_alloc(); - sllv_push(pa->pchildren, pb); - return pa; -} - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg( - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) -{ - if (pa->pchildren == NULL) - pa->pchildren = sllv_alloc(); - sllv_append(pa->pchildren, pb); - return pa; -} - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg_to_second_child( - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb) -{ - MLR_INTERNAL_CODING_ERROR_IF(pa->pchildren == NULL); - MLR_INTERNAL_CODING_ERROR_IF(pa->pchildren->phead == NULL); - MLR_INTERNAL_CODING_ERROR_IF(pa->pchildren->phead->pnext == NULL); - MLR_INTERNAL_CODING_ERROR_IF(pa->pchildren->phead->pnext->pvvalue == NULL); - - mlr_dsl_ast_node_append_arg(pa->pchildren->phead->pnext->pvvalue, pb); - - return pa; -} - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_set_function_name( - mlr_dsl_ast_node_t* pa, char* name) -{ - free(pa->text); - pa->text = mlr_strdup_or_die(name); - return pa; -} - -// ---------------------------------------------------------------- -void mlr_dsl_ast_node_replace_text(mlr_dsl_ast_node_t* pa, char* text) { - if (pa->text != NULL) { - free(pa->text); - } - pa->text = mlr_strdup_or_die(text); -} - -// ---------------------------------------------------------------- -int mlr_dsl_ast_node_type_to_type_mask(mlr_dsl_ast_node_type_t type) { - switch(type) { - - case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return TYPE_MASK_ANY; - case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: return TYPE_MASK_NUMERIC; - case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: return TYPE_MASK_INT; - case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return TYPE_MASK_FLOAT; - case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return TYPE_MASK_BOOLEAN; - case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return TYPE_MASK_STRING; - - case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return TYPE_MASK_ANY; - case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return TYPE_MASK_NUMERIC; - case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return TYPE_MASK_INT; - case MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION: return TYPE_MASK_FLOAT; - case MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION: return TYPE_MASK_BOOLEAN; - case MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION: return TYPE_MASK_STRING; - case MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION: return TYPE_MASK_MAP; - - default: MLR_INTERNAL_CODING_ERROR(); return 0; // not reached - } -} - -// ---------------------------------------------------------------- -int mlr_dsl_ast_node_cannot_be_bare_boolean(mlr_dsl_ast_node_t* pnode) { - switch (pnode->type) { - case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: - case MD_AST_NODE_TYPE_FIELD_NAME: - case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: - case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME: - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: - case MD_AST_NODE_TYPE_NON_SIGIL_NAME: - case MD_AST_NODE_TYPE_OPERATOR: - case MD_AST_NODE_TYPE_ENV: - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: - return FALSE; - break; - default: - return TRUE; - break; - } -} - -// ---------------------------------------------------------------- -void mlr_dsl_ast_print(mlr_dsl_ast_t* past) { - printf("AST ROOT:\n"); - if (past->proot == NULL) { - printf("(null)\n"); - } else { - mlr_dsl_ast_node_print(past->proot); - } -} - -// ---------------------------------------------------------------- -static void mlr_dsl_ast_node_print_aux(mlr_dsl_ast_node_t* pnode, int level, FILE* o) { - if (pnode == NULL) - return; - for (int i = 0; i < level; i++) - fprintf(o, " "); - fprintf(o, "text=\"%s\", type=%s%s", - pnode->text, - mlr_dsl_ast_node_describe_type(pnode->type), - (pnode->pchildren != NULL) ? ":" : "."); - - if (pnode->vardef_subframe_relative_index != MD_UNUSED_INDEX) - fprintf(o, " vardef_subframe_relative_index=%d", pnode->vardef_subframe_relative_index); - if (pnode->vardef_subframe_index != MD_UNUSED_INDEX) - fprintf(o, " vardef_subframe_index=%d", pnode->vardef_subframe_index); - if (pnode->vardef_frame_relative_index != MD_UNUSED_INDEX) - fprintf(o, " vardef_frame_relative_index=%d", pnode->vardef_frame_relative_index); - if (pnode->subframe_var_count != MD_UNUSED_INDEX) - fprintf(o, " subframe_var_count=%d", pnode->subframe_var_count); - if (pnode->max_subframe_depth != MD_UNUSED_INDEX) - fprintf(o, " max_subframe_depth=%d", pnode->max_subframe_depth); - if (pnode->max_var_depth != MD_UNUSED_INDEX) - fprintf(o, " max_var_depth=%d", pnode->max_var_depth); - - fprintf(o, "\n"); - - if (pnode->pchildren != NULL) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_print_aux(pe->pvvalue, level + 1, o); - } - } -} - -void mlr_dsl_ast_node_print(mlr_dsl_ast_node_t* pnode) { - mlr_dsl_ast_node_print_aux(pnode, 0, stdout); -} - -void mlr_dsl_ast_node_fprint(mlr_dsl_ast_node_t* pnode, FILE* o) { - mlr_dsl_ast_node_print_aux(pnode, 0, o); -} - -// ---------------------------------------------------------------- -static void mlr_dsl_ast_node_pretty_fprint_aux(mlr_dsl_ast_node_t* pnode, FILE* o) { - if (pnode == NULL) - return; - - if (pnode->pchildren != NULL) { - fprintf(o, "("); - } - if (pnode->type == MD_AST_NODE_TYPE_STRING_LITERAL || pnode->type == MD_AST_NODE_TYPE_REGEXI) { - fprintf(o, "\"%s\"", pnode->text); - } else { - fprintf(o, "%s", pnode->text); - } - - if (pnode->pchildren != NULL) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - fprintf(o, " "); - mlr_dsl_ast_node_pretty_fprint_aux(pe->pvvalue, o); - } - fprintf(o, ")"); - } -} - -void mlr_dsl_ast_node_pretty_fprint(mlr_dsl_ast_node_t* pnode, FILE* o) { - mlr_dsl_ast_node_pretty_fprint_aux(pnode, o); - fprintf(o, "\n"); -} - -// ---------------------------------------------------------------- -char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) { - switch(type) { - case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "STATEMENT_BLOCK"; break; - case MD_AST_NODE_TYPE_STATEMENT_LIST: return "STATEMENT_LIST"; break; - case MD_AST_NODE_TYPE_FUNC_DEF: return "FUNC_DEF"; break; - case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break; - case MD_AST_NODE_TYPE_INDEXED_FUNCTION_CALLSITE: return "INDEXED_FUNCTION_CALLSITE"; break; - case MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST: return "MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST"; break; - case MD_AST_NODE_TYPE_SUBR_DEF: return "SUBR_DEF"; break; - case MD_AST_NODE_TYPE_SUBR_CALLSITE: return "SUBR_CALLSITE"; break; - case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return "UNTYPED_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: return "NUMERIC_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: return "INT_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return "FLOAT_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return "BOOLEAN_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return "STRING_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break; - case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return "UNTYPED_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return "NUMERIC_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return "INT_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION: return "FLOAT_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION: return "BOOLEAN_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION: return "STRING_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION: return "MAP_PARAMETER_DEFINITION"; break; - case MD_AST_NODE_TYPE_RETURN_VALUE: return "RETURN_VALUE"; break; - case MD_AST_NODE_TYPE_RETURN_VOID: return "RETURN_VOID"; break; - case MD_AST_NODE_TYPE_BEGIN: return "BEGIN"; break; - case MD_AST_NODE_TYPE_END: return "END"; break; - case MD_AST_NODE_TYPE_STRING_LITERAL: return "STRING_LITERAL"; break; - case MD_AST_NODE_TYPE_NUMERIC_LITERAL: return "NUMERIC_LITERAL"; break; - case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "BOOLEAN_LITERAL"; break; - case MD_AST_NODE_TYPE_MAP_LITERAL: return "MAP_LITERAL"; break; - case MD_AST_NODE_TYPE_MAP_LITERAL_PAIR: return "MAP_LITERAL_PAIR"; break; - case MD_AST_NODE_TYPE_MAP_LITERAL_KEY: return "MAP_LITERAL_KEY"; break; - case MD_AST_NODE_TYPE_MAP_LITERAL_VALUE: return "MAP_LITERAL_VALUE"; break; - case MD_AST_NODE_TYPE_REGEXI: return "REGEXI"; break; - case MD_AST_NODE_TYPE_FIELD_NAME: return "FIELD_NAME"; break; - case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: return "INDIRECT_FIELD_NAME"; break; - case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME: return "POSITIONAL_SREC_NAME"; break; - case MD_AST_NODE_TYPE_FULL_SREC: return "FULL_SREC"; break; - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: return "OOSVAR_KEYLIST"; break; - case MD_AST_NODE_TYPE_FULL_OOSVAR: return "FULL_OOSVAR"; break; - case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "NON_SIGIL_NAME"; break; - case MD_AST_NODE_TYPE_OPERATOR: return "OPERATOR"; break; - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "SREC_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "INDIRECT_SREC_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: return "POSITIONAL_SREC_NAME_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "OOSVAR_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "OOSVAR_FROM_FULL_SREC_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: return "FULL_OOSVAR_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: return "FULL_SREC_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: return "ENV_ASSIGNMENT"; break; - case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "CONTEXT_VARIABLE"; break; - case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "STRIPPED_AWAY"; break; - case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return "CONDITIONAL_BLOCK"; break; - case MD_AST_NODE_TYPE_FILTER: return "FILTER"; break; - case MD_AST_NODE_TYPE_UNSET: return "UNSET"; break; - case MD_AST_NODE_TYPE_PIPE: return "PIPE"; break; - case MD_AST_NODE_TYPE_FILE_WRITE: return "FILE_WRITE"; break; - case MD_AST_NODE_TYPE_FILE_APPEND: return "FILE_APPEND"; break; - case MD_AST_NODE_TYPE_TEE: return "TEE"; break; - case MD_AST_NODE_TYPE_EMITF: return "EMITF"; break; - case MD_AST_NODE_TYPE_EMITP: return "EMITP"; break; - case MD_AST_NODE_TYPE_EMIT: return "EMIT"; break; - case MD_AST_NODE_TYPE_EMITP_LASHED: return "EMITP_LASHED"; break; - case MD_AST_NODE_TYPE_EMIT_LASHED: return "EMIT_LASHED"; break; - case MD_AST_NODE_TYPE_DUMP: return "DUMP"; break; - case MD_AST_NODE_TYPE_EDUMP: return "EDUMP"; break; - case MD_AST_NODE_TYPE_PRINT: return "PRINT"; break; - case MD_AST_NODE_TYPE_PRINTN: return "PRINTN"; break; - case MD_AST_NODE_TYPE_EPRINT: return "EPRINT"; break; - case MD_AST_NODE_TYPE_EPRINTN: return "EPRINTN"; break; - case MD_AST_NODE_TYPE_STDOUT: return "STDOUT"; break; - case MD_AST_NODE_TYPE_STDERR: return "STDERR"; break; - case MD_AST_NODE_TYPE_STREAM: return "STREAM"; break; - case MD_AST_NODE_TYPE_ALL: return "ALL"; break; - case MD_AST_NODE_TYPE_ENV: return "ENV"; break; - case MD_AST_NODE_TYPE_WHILE: return "WHILE"; break; - case MD_AST_NODE_TYPE_DO_WHILE: return "DO_WHILE"; break; - case MD_AST_NODE_TYPE_FOR_SREC: return "FOR_SREC"; break; - case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: return "FOR_SREC_KEY_ONLY"; break; - case MD_AST_NODE_TYPE_FOR_OOSVAR: return "FOR_OOSVAR"; break; - case MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY: return "FOR_OOSVAR_KEY_ONLY"; break; - case MD_AST_NODE_TYPE_FOR_LOCAL_MAP: return "FOR_LOCAL_MAP"; break; - case MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY: return "FOR_LOCAL_MAP_KEY_ONLY"; break; - case MD_AST_NODE_TYPE_FOR_MAP_LITERAL: return "FOR_MAP_LITERAL"; break; - case MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY: return "FOR_MAP_LITERAL_KEY_ONLY"; break; - case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL: return "FOR_FUNC_RETVAL"; break; - case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY: return "FOR_FUNC_RETVAL_KEY_ONLY"; break; - case MD_AST_NODE_TYPE_FOR_VARIABLES: return "FOR_VARIABLES"; break; - case MD_AST_NODE_TYPE_TRIPLE_FOR: return "TRIPLE_FOR"; break; - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return "NONINDEXED_LOCAL_VARIABLE"; break; - case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: return "INDEXED_LOCAL_VARIABLE"; break; - case MD_AST_NODE_TYPE_IN: return "IN"; break; - case MD_AST_NODE_TYPE_BREAK: return "BREAK"; break; - case MD_AST_NODE_TYPE_CONTINUE: return "CONTINUE"; break; - case MD_AST_NODE_TYPE_IF_HEAD: return "IF_HEAD"; break; - case MD_AST_NODE_TYPE_IF_ITEM: return "IF_ITEM"; break; - - default: return "UNRECOGNIZED_AST_NODE_TYPE"; - } -} - -// ---------------------------------------------------------------- -void mlr_dsl_ast_free(mlr_dsl_ast_t* past) { - mlr_dsl_ast_node_free(past->proot); - free(past); -} - -// ---------------------------------------------------------------- -void mlr_dsl_ast_node_free(mlr_dsl_ast_node_t* pnode) { - if (pnode->pchildren) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - mlr_dsl_ast_node_free(pchild); - } - sllv_free(pnode->pchildren); - } - free(pnode->text); - free(pnode); -} diff --git a/c/dsl/mlr_dsl_ast.h b/c/dsl/mlr_dsl_ast.h deleted file mode 100644 index 221edd71a..000000000 --- a/c/dsl/mlr_dsl_ast.h +++ /dev/null @@ -1,183 +0,0 @@ -// ================================================================ -// Miller abstract syntax tree for put and filter. -// ================================================================ - -#ifndef MLR_DSL_AST_H -#define MLR_DSL_AST_H -#include "../containers/sllv.h" -#include "../containers/type_decl.h" - -// ---------------------------------------------------------------- -typedef enum _mlr_dsl_ast_node_type_t { - MD_AST_NODE_TYPE_STATEMENT_BLOCK, - MD_AST_NODE_TYPE_STATEMENT_LIST, - MD_AST_NODE_TYPE_FUNC_DEF, - MD_AST_NODE_TYPE_SUBR_DEF, - MD_AST_NODE_TYPE_FUNCTION_CALLSITE, - MD_AST_NODE_TYPE_INDEXED_FUNCTION_CALLSITE, - MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST, - MD_AST_NODE_TYPE_SUBR_CALLSITE, - MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, - MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION, - MD_AST_NODE_TYPE_RETURN_VALUE, - MD_AST_NODE_TYPE_RETURN_VOID, - MD_AST_NODE_TYPE_BEGIN, - MD_AST_NODE_TYPE_END, - MD_AST_NODE_TYPE_STRING_LITERAL, - MD_AST_NODE_TYPE_NUMERIC_LITERAL, - MD_AST_NODE_TYPE_BOOLEAN_LITERAL, - MD_AST_NODE_TYPE_MAP_LITERAL, - MD_AST_NODE_TYPE_MAP_LITERAL_PAIR, - MD_AST_NODE_TYPE_MAP_LITERAL_KEY, - MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, - MD_AST_NODE_TYPE_REGEXI, - MD_AST_NODE_TYPE_FIELD_NAME, // E.g. value = $x - MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, // E.g. value = $[@x] - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, // E.g. key = $[[3]] - MD_AST_NODE_TYPE_FULL_SREC, - MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - MD_AST_NODE_TYPE_FULL_OOSVAR, - MD_AST_NODE_TYPE_NON_SIGIL_NAME, - MD_AST_NODE_TYPE_OPERATOR, - MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, - MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, - MD_AST_NODE_TYPE_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, // E.g. $[@y] = newvalue - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT, // E.g. $[[3]] = newkey - MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, - MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, - MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_ENV_ASSIGNMENT, - MD_AST_NODE_TYPE_CONTEXT_VARIABLE, - MD_AST_NODE_TYPE_ENV, - MD_AST_NODE_TYPE_STRIPPED_AWAY, - MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, - MD_AST_NODE_TYPE_FILTER, - MD_AST_NODE_TYPE_UNSET, - MD_AST_NODE_TYPE_PIPE, - MD_AST_NODE_TYPE_FILE_WRITE, - MD_AST_NODE_TYPE_FILE_APPEND, - MD_AST_NODE_TYPE_TEE, - MD_AST_NODE_TYPE_EMITF, - MD_AST_NODE_TYPE_EMITP, - MD_AST_NODE_TYPE_EMIT, - MD_AST_NODE_TYPE_EMITP_LASHED, - MD_AST_NODE_TYPE_EMIT_LASHED, - MD_AST_NODE_TYPE_DUMP, - MD_AST_NODE_TYPE_EDUMP, - MD_AST_NODE_TYPE_PRINT, - MD_AST_NODE_TYPE_PRINTN, - MD_AST_NODE_TYPE_EPRINT, - MD_AST_NODE_TYPE_EPRINTN, - MD_AST_NODE_TYPE_STDOUT, - MD_AST_NODE_TYPE_STDERR, - MD_AST_NODE_TYPE_STREAM, - MD_AST_NODE_TYPE_ALL, - MD_AST_NODE_TYPE_NOP, // only for parser internals; should not be in the AST returned by the parser - MD_AST_NODE_TYPE_WHILE, - MD_AST_NODE_TYPE_DO_WHILE, - MD_AST_NODE_TYPE_FOR_SREC, - MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY, - MD_AST_NODE_TYPE_FOR_OOSVAR, - MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, - MD_AST_NODE_TYPE_FOR_LOCAL_MAP, - MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY, - MD_AST_NODE_TYPE_FOR_MAP_LITERAL, - MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY, - MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, - MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY, - MD_AST_NODE_TYPE_FOR_VARIABLES, - MD_AST_NODE_TYPE_TRIPLE_FOR, - MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE, - MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE, - MD_AST_NODE_TYPE_IN, - MD_AST_NODE_TYPE_BREAK, - MD_AST_NODE_TYPE_CONTINUE, - MD_AST_NODE_TYPE_IF_HEAD, - MD_AST_NODE_TYPE_IF_ITEM, -} mlr_dsl_ast_node_type_t; - -#define MD_UNUSED_INDEX -1000000000 - -typedef struct _mlr_dsl_ast_node_t { - char* text; - mlr_dsl_ast_node_type_t type; - sllv_t* pchildren; - - // For bind-stack allocation only in local-var nodes: unused for any other node types. - int vardef_subframe_relative_index; // pass 1 output: which index in subframe - int vardef_subframe_index; // pass 1 output: which subframe the variable is defined in - int vardef_frame_relative_index; // pass 2 output: index relative to full stack frame - - // For bind-stack allocation only in statement-block nodes: unused for any other node types. - int subframe_var_count; - int max_subframe_depth; - int max_var_depth; - -} mlr_dsl_ast_node_t; - -typedef struct _mlr_dsl_ast_t { - mlr_dsl_ast_node_t* proot; -} mlr_dsl_ast_t; - -// ---------------------------------------------------------------- -mlr_dsl_ast_t* mlr_dsl_ast_alloc(); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc(char* text, mlr_dsl_ast_node_type_t type); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_zary(char* text, mlr_dsl_ast_node_type_t type); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_unary(char* text, mlr_dsl_ast_node_type_t type, mlr_dsl_ast_node_t* pa); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_binary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_ternary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_quaternary(char* text, mlr_dsl_ast_node_type_t type, - mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc, mlr_dsl_ast_node_t* pd); - -mlr_dsl_ast_node_t* mlr_dsl_ast_node_copy(mlr_dsl_ast_node_t* pother); -// These are so the parser can expand '$x += 1' to '$x = $x + 1', etc. -mlr_dsl_ast_node_t* mlr_dsl_ast_tree_copy(mlr_dsl_ast_node_t* pother); - -// See comments in mlr_dsl_parse.y for this seemingly awkward syntax wherein -// we change the function name after having set it up. This is a consequence of -// bottom-up DSL parsing. -mlr_dsl_ast_node_t* mlr_dsl_ast_node_prepend_arg(mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); -mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg(mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); -mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg_to_second_child(mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb); -mlr_dsl_ast_node_t* mlr_dsl_ast_node_set_function_name(mlr_dsl_ast_node_t* pa, char* name); - -void mlr_dsl_ast_node_replace_text(mlr_dsl_ast_node_t* pa, char* text); - -int mlr_dsl_ast_node_type_to_type_mask(mlr_dsl_ast_node_type_t type); - -int mlr_dsl_ast_node_cannot_be_bare_boolean(mlr_dsl_ast_node_t* pnode); - -void mlr_dsl_ast_print(mlr_dsl_ast_t* past); -void mlr_dsl_ast_node_print(mlr_dsl_ast_node_t* pnode); -void mlr_dsl_ast_node_fprint(mlr_dsl_ast_node_t* pnode, FILE* o); -void mlr_dsl_ast_node_pretty_fprint(mlr_dsl_ast_node_t* pnode, FILE* o); -char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type); - -void mlr_dsl_ast_node_free(mlr_dsl_ast_node_t* pnode); - -void mlr_dsl_ast_free(mlr_dsl_ast_t* past); - -#endif // MLR_DSL_AST_H diff --git a/c/dsl/mlr_dsl_blocked_ast.c b/c/dsl/mlr_dsl_blocked_ast.c deleted file mode 100644 index b9428bd6c..000000000 --- a/c/dsl/mlr_dsl_blocked_ast.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "dsl/mlr_dsl_blocked_ast.h" - -// ---------------------------------------------------------------- -blocked_ast_t* blocked_ast_alloc(mlr_dsl_ast_t* past) { - blocked_ast_t* paast = mlr_malloc_or_die(sizeof(blocked_ast_t)); - - paast->pfunc_defs = sllv_alloc(); - paast->psubr_defs = sllv_alloc(); - paast->pbegin_blocks = sllv_alloc(); - paast->pmain_block = mlr_dsl_ast_node_alloc_zary("main_block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - paast->pend_blocks = sllv_alloc(); - - if (past->proot->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK) { - fprintf(stderr, "%s: internal coding error detected in file %s at line %d:\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - fprintf(stderr, - "expected root node type %s but found %s.\n", - mlr_dsl_ast_node_describe_type(MD_AST_NODE_TYPE_STATEMENT_BLOCK), - mlr_dsl_ast_node_describe_type(past->proot->type)); - exit(1); - } - - sllv_t* pnodelist = past->proot->pchildren; - while (pnodelist->phead) { - mlr_dsl_ast_node_t* pnode = sllv_pop(pnodelist); - switch (pnode->type) { - case MD_AST_NODE_TYPE_FUNC_DEF: - sllv_append(paast->pfunc_defs, pnode); - break; - case MD_AST_NODE_TYPE_SUBR_DEF: - sllv_append(paast->psubr_defs, pnode); - break; - case MD_AST_NODE_TYPE_BEGIN: - sllv_append(paast->pbegin_blocks, pnode); - break; - case MD_AST_NODE_TYPE_END: - sllv_append(paast->pend_blocks, pnode); - break; - default: - sllv_append(paast->pmain_block->pchildren, pnode); - break; - } - } - - return paast; -} - -// ---------------------------------------------------------------- -void blocked_ast_free(blocked_ast_t* paast) { - for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) - mlr_dsl_ast_node_free(pe->pvvalue); - for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) - mlr_dsl_ast_node_free(pe->pvvalue); - for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) - mlr_dsl_ast_node_free(pe->pvvalue); - mlr_dsl_ast_node_free(paast->pmain_block); - for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) - mlr_dsl_ast_node_free(pe->pvvalue); - - sllv_free(paast->pfunc_defs); - sllv_free(paast->psubr_defs); - sllv_free(paast->pbegin_blocks); - sllv_free(paast->pend_blocks); - free(paast); - -} diff --git a/c/dsl/mlr_dsl_blocked_ast.h b/c/dsl/mlr_dsl_blocked_ast.h deleted file mode 100644 index b0a78a20b..000000000 --- a/c/dsl/mlr_dsl_blocked_ast.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef MLR_DSL_BLOCKED_AST_H -#define MLR_DSL_BLOCKED_AST_H - -#include "dsl/mlr_dsl_ast.h" -#include "containers/sllv.h" - -// ================================================================ -// The Lemon parser produces a single raw abstract syntax tree. This container -// simply has the subtrees organized by top-level statement blocks. This is just -// a minor reorganization but it makes stack allocation and CST-builds simpler. -// ================================================================ - -typedef struct _blocked_ast_t { - sllv_t* pfunc_defs; - sllv_t* psubr_defs; - sllv_t* pbegin_blocks; - mlr_dsl_ast_node_t* pmain_block; - sllv_t* pend_blocks; -} blocked_ast_t; - -// This strips nodes off the raw AST and transfers them to the block-structured AST. -blocked_ast_t* blocked_ast_alloc(mlr_dsl_ast_t* past); -void blocked_ast_free(blocked_ast_t* paast); - -#endif // MLR_DSL_BLOCKED_AST_H diff --git a/c/dsl/mlr_dsl_cst.c b/c/dsl/mlr_dsl_cst.c deleted file mode 100644 index 0ec4c96ce..000000000 --- a/c/dsl/mlr_dsl_cst.c +++ /dev/null @@ -1,270 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/hss.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -// The Lemon parser in parsing/mlr_dsl_parse.y builds up an abstract syntax tree -// specifically for the CST builder here. -// -// For clearer visuals on what the ASTs look like: -// * See parsing/mlr_dsl_parse.y -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -static mlr_dsl_ast_node_t* get_list_for_block(mlr_dsl_ast_node_t* pnode); -mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags); -static void mlr_dsl_cst_resolve_subr_callsites(mlr_dsl_cst_t* pcst); - -// ---------------------------------------------------------------- -// Main entry point for AST-to-CST for mlr put and mlr filter. -// -// Example AST (using put -v): -// -// $ mlr -n put -v '#begin{@a=1;@b=2};$m=2;$n=4;end{@y=5;@z=6}' -// AST ROOT: -// text="list", type=statement_list: -// text="begin", type=begin: -// text="list", type=statement_list: -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="a", type=string_literal. -// text="1", type=numeric_literal. -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="b", type=string_literal. -// text="2", type=numeric_literal. -// text="=", type=srec_assignment: -// text="m", type=field_name. -// text="2", type=numeric_literal. -// text="=", type=srec_assignment: -// text="n", type=field_name. -// text="4", type=numeric_literal. -// text="end", type=end: -// text="list", type=statement_list: -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="y", type=string_literal. -// text="5", type=numeric_literal. -// text="=", type=oosvar_assignment: -// text="oosvar_keylist", type=oosvar_keylist: -// text="z", type=string_literal. -// text="6", type=numeric_literal. - -mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_stack_allocation, - int type_inferencing, int flush_every_record, - int do_final_filter, int negate_final_filter) // for mlr filter -{ - int context_flags = do_final_filter ? IN_MLR_FILTER : 0; - // The root node is not populated on empty-string input to the parser. - if (past->proot == NULL) { - if (do_final_filter) { - fprintf(stderr, "%s: filter statement must not be empty.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - past->proot = mlr_dsl_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } - - mlr_dsl_cst_t* pcst = mlr_malloc_or_die(sizeof(mlr_dsl_cst_t)); - - pcst->paast = blocked_ast_alloc(past); - - // Assign local-variable names to indices within frame-stack. - blocked_ast_allocate_locals(pcst->paast, trace_stack_allocation); - - pcst->pfmgr = fmgr_alloc(); - pcst->psubr_defsites = lhmsv_alloc(); - pcst->psubr_callsite_statements_to_resolve = sllv_alloc(); - pcst->flush_every_record = flush_every_record; - - if (print_ast) { - printf("\n"); - printf("BLOCKED AST:\n"); - } - - for (sllve_t* pe = pcst->paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - if (print_ast) { - printf("\n"); - printf("FUNCTION DEFINITION:\n"); - mlr_dsl_ast_node_print(pnode); - } - udf_defsite_state_t* pudf_defsite_state = mlr_dsl_cst_alloc_udf(pcst, pnode, - type_inferencing, context_flags); - fmgr_install_udf(pcst->pfmgr, pudf_defsite_state); - } - - for (sllve_t* pe = pcst->paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - if (print_ast) { - printf("\n"); - printf("SUBROUTINE DEFINITION:\n"); - mlr_dsl_ast_node_print(pnode); - } - subr_defsite_t* psubr_defsite = mlr_dsl_cst_alloc_subroutine(pcst, pnode, type_inferencing, context_flags); - if (lhmsv_get(pcst->psubr_defsites, psubr_defsite->name)) { - fprintf(stderr, "%s: subroutine named \"%s\" has already been defined.\n", - MLR_GLOBALS.bargv0, psubr_defsite->name); - exit(1); - } - lhmsv_put(pcst->psubr_defsites, psubr_defsite->name, psubr_defsite, NO_FREE); - } - - pcst->pbegin_blocks = sllv_alloc(); - for (sllve_t* pe = pcst->paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - if (print_ast) { - printf("\n"); - printf("BEGIN-BLOCK:\n"); - mlr_dsl_ast_node_print(pnode); - } - MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, - pnode->subframe_var_count); - for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) { - mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode); - for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) { - mlr_dsl_ast_node_t* pchild = pg->pvvalue; - sllv_append(pblock->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pchild, - type_inferencing, context_flags | IN_BEGIN_OR_END)); - } - } - sllv_append(pcst->pbegin_blocks, pblock); - } - - pcst->pend_blocks = sllv_alloc(); - for (sllve_t* pe = pcst->paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - if (print_ast) { - printf("\n"); - printf("END-BLOCK:\n"); - mlr_dsl_ast_node_print(pnode); - } - MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, - pnode->subframe_var_count); - for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) { - mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode); - for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) { - mlr_dsl_ast_node_t* pchild = pg->pvvalue; - sllv_append(pblock->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pchild, - type_inferencing, context_flags | IN_BEGIN_OR_END)); - } - } - sllv_append(pcst->pend_blocks, pblock); - } - - if (print_ast) { - printf("\n"); - printf("MAIN BLOCK:\n"); - mlr_dsl_ast_node_print(pcst->paast->pmain_block); - } - MLR_INTERNAL_CODING_ERROR_IF(pcst->paast->pmain_block->max_var_depth == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pcst->paast->pmain_block->subframe_var_count == MD_UNUSED_INDEX); - pcst->pmain_block = cst_top_level_statement_block_alloc(pcst->paast->pmain_block->max_var_depth, - pcst->paast->pmain_block->subframe_var_count); - for (sllve_t* pe = pcst->paast->pmain_block->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - - // The last statement of mlr filter must be a bare boolean. - if (do_final_filter && pe->pnext == NULL) { - sllv_append(pcst->pmain_block->pblock->pstatements, mlr_dsl_cst_alloc_final_filter_statement( - pcst, pnode, negate_final_filter, type_inferencing, context_flags | IN_MLR_FINAL_FILTER)); - } else { - sllv_append(pcst->pmain_block->pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pnode, - type_inferencing, context_flags)); - } - } - - if (print_ast) { - printf("\n"); - } - - // Now that all subroutine/function definitions have been done, resolve - // their callsites whose locations we stashed during the CST build. (Without - // this delayed resolution, there could be no recursion, and subroutines - // could call one another only in the reverse order of their definition. - // E.g. if 's' is defined and then 't', then t could call s but s could not - // call t [subroutine not defined yet], and neither could call itself.) - // - // This object-binding step is not a full pass through the CST since we've - // maintained pointers into callsites which we can now directly poke. - fmgr_resolve_func_callsites(pcst->pfmgr); - mlr_dsl_cst_resolve_subr_callsites(pcst); - - return pcst; -} - -// ---------------------------------------------------------------- -void mlr_dsl_cst_free(mlr_dsl_cst_t* pcst, context_t* pctx) { - if (pcst == NULL) - return; - - if (pcst->pbegin_blocks != NULL) { - for (sllve_t* pe = pcst->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { - cst_top_level_statement_block_free(pe->pvvalue, pctx); - } - sllv_free(pcst->pbegin_blocks); - } - - cst_top_level_statement_block_free(pcst->pmain_block, pctx); - - if (pcst->pend_blocks != NULL) { - for (sllve_t* pe = pcst->pend_blocks->phead; pe != NULL; pe = pe->pnext) { - cst_top_level_statement_block_free(pe->pvvalue, pctx); - } - sllv_free(pcst->pend_blocks); - } - - fmgr_free(pcst->pfmgr, pctx); - - // Void-star payloads already popped and freed during symbol-resolution phase of CST alloc - sllv_free(pcst->psubr_callsite_statements_to_resolve); - - if (pcst->psubr_defsites != NULL) { - for (lhmsve_t* pe = pcst->psubr_defsites->phead; pe != NULL; pe = pe->pnext) { - subr_defsite_t* psubr_defsite = pe->pvvalue; - mlr_dsl_cst_free_subroutine(psubr_defsite, pctx); - } - lhmsv_free(pcst->psubr_defsites); - } - - blocked_ast_free(pcst->paast); - - free(pcst); -} - -// ---------------------------------------------------------------- -// For begin, end, cond: there must be one child node, of type list. -static mlr_dsl_ast_node_t* get_list_for_block(mlr_dsl_ast_node_t* pnode) { - MLR_INTERNAL_CODING_ERROR_IF(pnode->pchildren->phead == NULL); - MLR_INTERNAL_CODING_ERROR_IF(pnode->pchildren->phead->pnext != NULL); - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - - if (pleft->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK) { - fprintf(stderr, - "%s: internal coding error detected in file %s at line %d:\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - fprintf(stderr, - "expected node type %s but found %s.\n", - mlr_dsl_ast_node_describe_type(MD_AST_NODE_TYPE_STATEMENT_BLOCK), - mlr_dsl_ast_node_describe_type(pleft->type)); - exit(1); - } - return pleft; -} - -// ---------------------------------------------------------------- -static void mlr_dsl_cst_resolve_subr_callsites(mlr_dsl_cst_t* pcst) { - while (pcst->psubr_callsite_statements_to_resolve->phead != NULL) { - mlr_dsl_cst_statement_t* pstatement = sllv_pop(pcst->psubr_callsite_statements_to_resolve); - mlr_dsl_cst_resolve_subr_callsite(pcst, pstatement); - } -} diff --git a/c/dsl/mlr_dsl_cst.h b/c/dsl/mlr_dsl_cst.h deleted file mode 100644 index 65a334273..000000000 --- a/c/dsl/mlr_dsl_cst.h +++ /dev/null @@ -1,421 +0,0 @@ -#ifndef MLR_DSL_CST_H -#define MLR_DSL_CST_H - -#include "cli/mlrcli.h" -#include "lib/context.h" -#include "containers/lhmsmv.h" -#include "containers/local_stack.h" -#include "containers/loop_stack.h" -#include "containers/type_decl.h" -#include "dsl/mlr_dsl_ast.h" -#include "dsl/mlr_dsl_blocked_ast.h" -#include "dsl/rval_evaluators.h" -#include "dsl/rxval_evaluators.h" -#include "dsl/function_manager.h" -#include "output/multi_out.h" -#include "output/multi_lrec_writer.h" - -// ================================================================ -// Concrete syntax tree (CST) derived from an abstract syntax tree (AST). -// -// Statements are of the form: -// -// * Assignment of mlrval (i.e. result of expression evaluation, e.g. $name or f($x,$y)) to oosvar (out-of-stream -// variables, prefixed with @ sigil) -// -// * Assignment to srec (in-stream records, with field names prefixed with $ sigil) -// -// * Copying full srec ($* syntax) to/from an oosvar -// -// * Oosvar-to-oosvar assignments (recursively if RHS is non-terminal) -// -// * pattern-action statements: boolean expression with curly-braced statements which are executed only -// when the boolean evaluates to true. -// -// * bare-boolean statements: no-ops unless they have side effects: namely, the matches/does-not-match -// operators =~ and !=~ setting regex captures \1, \2, etc. -// -// * emit statements: these place oosvar key-value pairs into the output stream. These can be of the following forms: -// -// o 'emit @a; emit @b' which produce separate records such as a=3 and b=4 -// -// o 'emitf @a, @b' which produce records such as a=3,b=4 -// -// o For nested maps, 'emit @c, "x", "y"' in which case the first two map levels are pulled out and named "x" and "y" -// in separate fields. See containers/mlhmmv.h for more information. -// -// Further, these statements are organized into three groups: -// -// * begin: executed once, before the first input record is read. -// * main: executed for each input record. -// * end: executed once, after the last input record is read. -// -// The exceptions being, of course, assignment to/from srec is disallowed for begin/end statements since those occur -// before/after stream processing, respectively. -// ================================================================ - -// ---------------------------------------------------------------- -// dsl/mlr_dsl_stack_allocate.c -// Two-pass stack allocator which operates on the block-structured AST -// before the CST is build (mlr_dsl_stack_allocate.c). -void blocked_ast_allocate_locals(blocked_ast_t* paast, int trace); - -// ---------------------------------------------------------------- -// Forward references for virtual-function prototypes -struct _mlr_dsl_cst_t; -struct _mlr_dsl_cst_statement_t; -struct _subr_defsite_t; - -// Parameter bag to reduce parameter-marshaling -typedef struct _cst_outputs_t { - int* pshould_emit_rec; - sllv_t* poutrecs; - char* oosvar_flatten_separator; - cli_writer_opts_t* pwriter_opts; -} cst_outputs_t; - -// ---------------------------------------------------------------- -typedef struct _cst_statement_block_t { - int subframe_var_count; - sllv_t* pstatements; -} cst_statement_block_t; - -cst_statement_block_t* cst_statement_block_alloc(int subframe_var_count); -void cst_statement_block_free(cst_statement_block_t* pblock, context_t* pctx); - -// ---------------------------------------------------------------- -typedef struct _cst_top_level_statement_block_t { - local_stack_frame_t* pframe; - int max_var_depth; - cst_statement_block_t* pblock; -} cst_top_level_statement_block_t; - -cst_top_level_statement_block_t* cst_top_level_statement_block_alloc(int max_var_depth, int subframe_var_count); -void cst_top_level_statement_block_free(cst_top_level_statement_block_t* pblock, context_t* pctx); - -// ---------------------------------------------------------------- -// Generic handler for a statement. - -// Handler for statement lists: begin/main/end; cond/if/for/while/do-while. -typedef void mlr_dsl_cst_block_handler_t( - cst_statement_block_t* pblock, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// ---------------------------------------------------------------- -// mlr_dsl_cst_statement_t is a base class extended by all manner of subclasses. -// The following are for their method pointers. -typedef struct _mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_allocator_t( - struct _mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags); - -typedef void mlr_dsl_cst_statement_handler_t( - struct _mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -typedef void mlr_dsl_cst_statement_freer_t( - struct _mlr_dsl_cst_statement_t* pstatement, - context_t* pctx); - -// ---------------------------------------------------------------- -// MLR_DSL_CST_STATEMENT OBJECT - -typedef struct _mlr_dsl_cst_statement_t { - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Common to most or all statement types: - - // For trace-mode. - mlr_dsl_ast_node_t* past_node; - - // Function-pointer for the handler of the given statement type, e.g. srec-assignment, while-loop, etc. - mlr_dsl_cst_statement_handler_t* pstatement_handler; - - // Subclass destructor. It should free whatever's in the pvstate but it should not - // free the pstatement itself. - mlr_dsl_cst_statement_freer_t* pstatement_freer; - - // The reason for this being a function pointer is that there are two variants of - // statement-list handlers: one for inside loop bodies which has to check - // break/continue flags after each statement, and another for outside loop bodies - // which doesn't need to check those. (This is a micro-optimization.) For bodyless - // statements (e.g. assignment) this is null. - cst_statement_block_t* pblock; - mlr_dsl_cst_block_handler_t* pblock_handler; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Specific to each statement type: - - void* pvstate; - -} mlr_dsl_cst_statement_t; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// For use by the statement-subclass constructors - -mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc( - mlr_dsl_ast_node_t* past_node, - mlr_dsl_cst_statement_handler_t* pstatement_handler, - mlr_dsl_cst_statement_freer_t* pstatement_freer, - void* pvstate); - -mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc_with_block( - mlr_dsl_ast_node_t* past_node, - mlr_dsl_cst_statement_handler_t* pstatement_handler, - cst_statement_block_t* pblock, - mlr_dsl_cst_block_handler_t* pblock_handler, - mlr_dsl_cst_statement_freer_t* pstatement_freer, - void* pvstate); - -// ---------------------------------------------------------------- -// MLR_DSL_CST OBJECT - -typedef struct _mlr_dsl_cst_t { - sllv_t* pbegin_blocks; - cst_top_level_statement_block_t* pmain_block; - sllv_t* pend_blocks; - - // Function manager for built-in functions as well as user-defined functions (which are CST-specific). - fmgr_t* pfmgr; - - // Subroutine bodies - lhmsv_t* psubr_defsites; - - // Subroutine callsites, used to bootstrap (e.g. subroutine f calls subroutine g before the latter - // has been defined). - sllv_t* psubr_callsite_statements_to_resolve; - - // fflush on emit/tee/print/dump - int flush_every_record; - - // The CST object retains the AST pointer (in order to reuse its strings etc. with minimal copying) - // and will free the AST in the CST destructor. - blocked_ast_t* paast; -} mlr_dsl_cst_t; - -// ---------------------------------------------------------------- -// CONSTRUCTORS/DESTRUCTORS/METHODS - -// Notes: -// * do_final_filter is FALSE for mlr put, TRUE for mlr filter. -// * negate_final_filter is TRUE for mlr filter -x. -// * The CST object strips nodes off the raw AST, constructed by the Lemon parser, in order -// to do analysis on it. Nonetheless the caller should free what's left. -mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_stack_allocation, - int type_inferencing, int flush_every_record, int do_final_filter, int negate_final_filter); - -mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags); - -mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, int negate_final_filter, int type_inferencing, int context_flags); - -void mlr_dsl_cst_free(mlr_dsl_cst_t* pcst, context_t* pctx); -void mlr_dsl_cst_statement_free(mlr_dsl_cst_statement_t* pstatement, context_t* pctx); - -// Top-level entry point, e.g. from mapper_put. -void mlr_dsl_cst_handle_top_level_statement_blocks( - sllv_t* ptop_level_blocks, // block bodies for begins, main, ends - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -void mlr_dsl_cst_handle_top_level_statement_block( - cst_top_level_statement_block_t* ptop_level_block, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// Recursive entry point: block bodies for begin, main, end; cond, if, for, while. -void mlr_dsl_cst_handle_statement_block( - cst_statement_block_t* pblock, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -void mlr_dsl_cst_handle_statement_block_with_break_continue( - cst_statement_block_t* pblock, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// Statement lists which are not curly-braced bodies: start/continuation/update statements for triple-for. -void mlr_dsl_cst_handle_statement_list( - sllv_t* pstatements, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// ================================================================ -// dsl/mlr_dsl_cst_func_subr.c - -// ---------------------------------------------------------------- -// cst_udf_state_t is data needed to execute the body of a user-defined function which is implemented by CST statements. -// udf_defsite_state_t is data needed for any user-defined function (no matter how implemented). -typedef struct _cst_udf_state_t { - char* name; - int arity; - char** parameter_names; - int* parameter_type_masks; - cst_top_level_statement_block_t* ptop_level_block; - char* return_value_type_name; - int return_value_type_mask; -} cst_udf_state_t; - -udf_defsite_state_t* mlr_dsl_cst_alloc_udf( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags); - -void mlr_dsl_cst_free_udf(cst_udf_state_t* pstate, context_t* pctx); - -// ---------------------------------------------------------------- - -typedef struct _subr_callsite_t { - char* name; - int arity; - int type_inferencing; - int context_flags; -} subr_callsite_t; - -typedef struct _subr_defsite_t { - char* name; - int arity; - char** parameter_names; - int* parameter_type_masks; - cst_top_level_statement_block_t* ptop_level_block; -} subr_defsite_t; - -subr_defsite_t* mlr_dsl_cst_alloc_subroutine( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags); - -void mlr_dsl_cst_free_subroutine(subr_defsite_t* psubr_defsite, context_t* pctx); - -// Invoked directly from the CST statement handler for a subroutine callsite. -// (Functions, by contrast, are invoked by callback from the right-hand-site-evaluator logic -// -- hence no execute-function method here.) -void mlr_dsl_cst_execute_subroutine(subr_defsite_t* pstate, variables_t* pvars, - cst_outputs_t* pcst_outputs, int callsite_arity, boxed_xval_t* args); - -// ================================================================ -// For on-line help / manpage -// dsl/mlr_dsl_cst_keywords.c - -void mlr_dsl_list_all_keywords_raw(FILE* output_stream); - -// Pass function_name == NULL to get usage for all keywords: -void mlr_dsl_keyword_usage(FILE* output_stream, char* keyword); - -// ================================================================ -// Specific CST-statement subclasses - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_condish_statements.c -mlr_dsl_cst_statement_allocator_t alloc_conditional_block; -mlr_dsl_cst_statement_allocator_t alloc_if_head; -mlr_dsl_cst_statement_allocator_t alloc_while; -mlr_dsl_cst_statement_allocator_t alloc_do_while; -mlr_dsl_cst_statement_allocator_t alloc_bare_boolean; - -mlr_dsl_cst_statement_t* alloc_filter( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags); - -mlr_dsl_cst_statement_t* alloc_final_filter( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int negate_final_filter, - int type_inferencing, - int context_flags); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_terminal_assignment_statements.c -mlr_dsl_cst_statement_allocator_t alloc_srec_assignment; -mlr_dsl_cst_statement_allocator_t alloc_indirect_srec_assignment; -mlr_dsl_cst_statement_allocator_t alloc_positional_srec_name_assignment; -mlr_dsl_cst_statement_allocator_t alloc_env_assignment; - -// dsl/mlr_dsl_cst_map_assignment_statements.c -mlr_dsl_cst_statement_allocator_t alloc_full_srec_assignment; -mlr_dsl_cst_statement_t* alloc_local_variable_definition( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - int type_mask); -mlr_dsl_cst_statement_allocator_t alloc_nonindexed_local_variable_assignment; -mlr_dsl_cst_statement_allocator_t alloc_indexed_local_variable_assignment; -mlr_dsl_cst_statement_allocator_t alloc_oosvar_assignment; -mlr_dsl_cst_statement_allocator_t alloc_full_oosvar_assignment; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_unset_statements.c -mlr_dsl_cst_statement_allocator_t alloc_unset; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_for_srec_statements.c -mlr_dsl_cst_statement_allocator_t alloc_for_srec; -mlr_dsl_cst_statement_allocator_t alloc_for_srec_key_only; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_for_map_statements.c -mlr_dsl_cst_statement_allocator_t alloc_for_map; -mlr_dsl_cst_statement_allocator_t alloc_for_map_key_only; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_triple_for_statements.c -mlr_dsl_cst_statement_allocator_t alloc_triple_for; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_loop_control_statements.c -mlr_dsl_cst_statement_allocator_t alloc_break; -mlr_dsl_cst_statement_allocator_t alloc_continue; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_return_statements.c -mlr_dsl_cst_statement_allocator_t alloc_return_void; // For subroutines -mlr_dsl_cst_statement_allocator_t alloc_return_value; // For UDFs - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_output_statements.c - -mlr_dsl_cst_statement_t* alloc_print( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - char* print_terminator); - -mlr_dsl_cst_statement_allocator_t alloc_tee; - -mlr_dsl_cst_statement_allocator_t alloc_emitf; - -mlr_dsl_cst_statement_t* alloc_emit( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - int do_full_prefixing); - -mlr_dsl_cst_statement_t* alloc_emit_lashed( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - int do_full_prefixing); - -mlr_dsl_cst_statement_allocator_t alloc_dump; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// dsl/mlr_dsl_cst_func_subr.c - -// When we allocate a callsite we can do so before the callee has been defined. -// Hence the two-step process, with the second step being an object-binding step. -mlr_dsl_cst_statement_allocator_t alloc_subr_callsite_statement; -void mlr_dsl_cst_resolve_subr_callsite(mlr_dsl_cst_t* pcst, mlr_dsl_cst_statement_t* pstatement); - -#endif // MLR_DSL_CST_H diff --git a/c/dsl/mlr_dsl_cst_condish_statements.c b/c/dsl/mlr_dsl_cst_condish_statements.c deleted file mode 100644 index af5a5e0b7..000000000 --- a/c/dsl/mlr_dsl_cst_condish_statements.c +++ /dev/null @@ -1,621 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -typedef struct _conditional_block_state_t { - rval_evaluator_t* pexpression_evaluator; -} conditional_block_state_t; - -static mlr_dsl_cst_statement_freer_t free_conditional_block; -static mlr_dsl_cst_statement_handler_t handle_conditional_block; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_conditional_block(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - conditional_block_state_t* pstate = mlr_malloc_or_die(sizeof(conditional_block_state_t)); - - pstate->pexpression_evaluator = NULL; - - // Right node is a list of statements to be executed if the left evaluates to true. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pleft, pcst->pfmgr, type_inferencing, context_flags); - - MLR_INTERNAL_CODING_ERROR_IF(pright->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags); - sllv_append(pblock->pstatements, pchild_statement); - } - - mlr_dsl_cst_block_handler_t* pblock_handler = (context_flags & IN_BREAKABLE) - ? mlr_dsl_cst_handle_statement_block_with_break_continue - : mlr_dsl_cst_handle_statement_block; - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_conditional_block, - pblock, - pblock_handler, - free_conditional_block, - pstate); -} - -// ---------------------------------------------------------------- -static void free_conditional_block(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - conditional_block_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_conditional_block( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - conditional_block_state_t* pstate = pstatement->pvstate; - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - if (val.u.boolv) { - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - } - } - - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} - -// ================================================================ -typedef struct _if_head_state_t { - sllv_t* pif_chain_statements; -} if_head_state_t; - -typedef struct _if_item_state_t { - rval_evaluator_t* pexpression_evaluator; -} if_item_state_t; - -static mlr_dsl_cst_statement_handler_t handle_if_head; -static mlr_dsl_cst_statement_freer_t free_if_head; -static mlr_dsl_cst_statement_freer_t free_if_item; - -static mlr_dsl_cst_statement_t* alloc_if_item( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pitemnode, - mlr_dsl_ast_node_t* pexprnode, - mlr_dsl_ast_node_t* plistnode, - int type_inferencing, - int context_flags); - -// ---------------------------------------------------------------- -// Example parser-input: -// -// if (NR == 9) { -// $x = 10; -// $x = 11 -// } elif (NR == 12) { -// $x = 13; -// $x = 14 -// } else { -// $x = 15; -// $x = 16 -// }; -// -// Corresponding parser-output AST: -// if_head (if_head): -// if (if_item): -// == (operator): -// NR (context_variable). -// 9 (numeric_literal). -// list (statement_list): -// = (srec_assignment): -// x (field_name). -// 10 (numeric_literal). -// = (srec_assignment): -// x (field_name). -// 11 (numeric_literal). -// elif (if_item): -// == (operator): -// NR (context_variable). -// 12 (numeric_literal). -// list (statement_list): -// = (srec_assignment): -// x (field_name). -// 13 (numeric_literal). -// = (srec_assignment): -// x (field_name). -// 14 (numeric_literal). -// else (if_item): -// list (statement_list): -// = (srec_assignment): -// x (field_name). -// 15 (numeric_literal). -// = (srec_assignment): -// x (field_name). -// 16 (numeric_literal). - -mlr_dsl_cst_statement_t* alloc_if_head(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - if_head_state_t* pstate = mlr_malloc_or_die(sizeof(if_head_state_t)); - - pstate->pif_chain_statements = sllv_alloc(); - - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - // For if and elif: - // * Left subnode is the AST for the boolean expression. - // * Right subnode is a list of statements to be executed if the left evaluates to true. - // For else: - // * Sole subnode is a list of statements to be executed. - mlr_dsl_ast_node_t* pitemnode = pe->pvvalue; - mlr_dsl_ast_node_t* pexprnode = NULL; - mlr_dsl_ast_node_t* plistnode = NULL; - if (pitemnode->pchildren->length == 2) { - pexprnode = pitemnode->pchildren->phead->pvvalue; - plistnode = pitemnode->pchildren->phead->pnext->pvvalue; - } else { - pexprnode = NULL; - plistnode = pitemnode->pchildren->phead->pvvalue; - } - - sllv_append(pstate->pif_chain_statements, - alloc_if_item(pcst, pitemnode, pexprnode, plistnode, type_inferencing, context_flags) - ); - } - - mlr_dsl_cst_block_handler_t* pblock_handler = (context_flags & IN_BREAKABLE) - ? mlr_dsl_cst_handle_statement_block_with_break_continue - : mlr_dsl_cst_handle_statement_block; - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_if_head, - NULL, - pblock_handler, - free_if_head, - pstate); -} - -static mlr_dsl_cst_statement_t* alloc_if_item(mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pitemnode, mlr_dsl_ast_node_t* pexprnode, mlr_dsl_ast_node_t* plistnode, - int type_inferencing, int context_flags) -{ - if_item_state_t* pstate = mlr_malloc_or_die(sizeof(if_item_state_t)); - - MLR_INTERNAL_CODING_ERROR_IF(plistnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(plistnode->subframe_var_count); - - for (sllve_t* pe = plistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags); - sllv_append(pblock->pstatements, pchild_statement); - } - - pstate->pexpression_evaluator = pexprnode != NULL - ? rval_evaluator_alloc_from_ast(pexprnode, pcst->pfmgr, - type_inferencing, context_flags) // if-statement or elif-statement - : rval_evaluator_alloc_from_boolean(TRUE); // else-statement - - return mlr_dsl_cst_statement_valloc_with_block( - pitemnode, - NULL, // handled by the containing if-head evaluator - pblock, - NULL, // handled by the containing if-head evaluator - free_if_item, - pstate); -} - -// ---------------------------------------------------------------- -static void free_if_head(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - if_head_state_t* pstate = pstatement->pvstate; - - if (pstate->pif_chain_statements != NULL) { - for (sllve_t* pe = pstate->pif_chain_statements->phead; pe != NULL; pe = pe->pnext) - mlr_dsl_cst_statement_free(pe->pvvalue, pctx); - sllv_free(pstate->pif_chain_statements); - } - - free(pstate); -} - -static void free_if_item(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - if_item_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_if_head( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - if_head_state_t* pstate = pstatement->pvstate; - - for (sllve_t* pe = pstate->pif_chain_statements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pitem_statement = pe->pvvalue; - if_item_state_t* pitem_state = pitem_statement->pvstate; - rval_evaluator_t* pexpression_evaluator = pitem_state->pexpression_evaluator; - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - if (val.u.boolv) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pitem_statement->pblock->subframe_var_count); - - pstatement->pblock_handler(pitem_statement->pblock, pvars, pcst_outputs); - - local_stack_subframe_exit(pframe, pitem_statement->pblock->subframe_var_count); - break; - } - } - } -} - -// ================================================================ -typedef struct _while_state_t { - rval_evaluator_t* pexpression_evaluator; -} while_state_t; - -static mlr_dsl_cst_statement_handler_t handle_while; -static mlr_dsl_cst_statement_freer_t free_while; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_while(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - while_state_t* pstate = mlr_malloc_or_die(sizeof(while_state_t)); - - pstate->pexpression_evaluator = NULL; - - // Left child node is the AST for the boolean expression. - // Right child node is the list of statements in the body. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(pright->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags); - sllv_append(pblock->pstatements, pchild_statement); - } - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pleft, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_while, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_while, - pstate); -} - -// ---------------------------------------------------------------- -static void free_while(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - while_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_while( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - while_state_t* pstate = pstatement->pvstate; - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - while (TRUE) { - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - if (val.u.boolv) { - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - break; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - } else { - break; - } - } else { - break; - } - } - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} - - -// ================================================================ -typedef struct _do_while_state_t { - rval_evaluator_t* pexpression_evaluator; -} do_while_state_t; - -static mlr_dsl_cst_statement_handler_t handle_do_while; -static mlr_dsl_cst_statement_freer_t free_do_while; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_do_while(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - do_while_state_t* pstate = mlr_malloc_or_die(sizeof(do_while_state_t)); - - pstate->pexpression_evaluator = NULL; - - // Left child node is the list of statements in the body. - // Right child node is the AST for the boolean expression. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(pleft->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pright->subframe_var_count); - - for (sllve_t* pe = pleft->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - mlr_dsl_cst_statement_t *pchild_statement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags); - sllv_append(pblock->pstatements, pchild_statement); - } - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pright, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_do_while, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_do_while, - pstate); -} - -// ---------------------------------------------------------------- -static void free_do_while(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - do_while_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_do_while( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - do_while_state_t* pstate = pstatement->pvstate; - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - while (TRUE) { - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - break; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - // don't skip the boolean test - } - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - if (!val.u.boolv) { - break; - } - } else { - break; - } - } - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} - -// ================================================================ -typedef struct _bare_boolean_state_t { - rval_evaluator_t* pexpression_evaluator; -} bare_boolean_state_t; - -static mlr_dsl_cst_statement_handler_t handle_bare_boolean; -static mlr_dsl_cst_statement_freer_t free_bare_boolean; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_bare_boolean(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - bare_boolean_state_t* pstate = mlr_malloc_or_die(sizeof(bare_boolean_state_t)); - - pstate->pexpression_evaluator = NULL; - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pnode, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_bare_boolean, - free_bare_boolean, - pstate); -} - -// ---------------------------------------------------------------- -static void free_bare_boolean(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - bare_boolean_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_bare_boolean( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - bare_boolean_state_t* pstate = pstatement->pvstate; - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - if (mv_is_non_null(&val)) - mv_set_boolean_strict(&val); -} - -// ================================================================ -typedef struct _filter_state_t { - rval_evaluator_t* pexpression_evaluator; -} filter_state_t; - -static mlr_dsl_cst_statement_handler_t handle_filter; -static mlr_dsl_cst_statement_freer_t free_filter; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_filter( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags) -{ - filter_state_t* pstate = mlr_malloc_or_die(sizeof(filter_state_t)); - - mlr_dsl_ast_node_t* pchild = pnode->pchildren->phead->pvvalue; - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pchild, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_filter, - free_filter, - pstate); -} - -// ---------------------------------------------------------------- -static void free_filter(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - filter_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_filter( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - filter_state_t* pstate = pstatement->pvstate; - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - *pcst_outputs->pshould_emit_rec = val.u.boolv; - } else { - *pcst_outputs->pshould_emit_rec = FALSE; - } -} - -// ================================================================ -typedef struct _final_filter_state_t { - rval_evaluator_t* pexpression_evaluator; - int negate_final_filter; -} final_filter_state_t; - -static mlr_dsl_cst_statement_handler_t handle_final_filter; -static mlr_dsl_cst_statement_freer_t free_final_filter; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_final_filter( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int negate_final_filter, - int type_inferencing, - int context_flags) -{ - final_filter_state_t* pstate = mlr_malloc_or_die(sizeof(final_filter_state_t)); - - pstate->pexpression_evaluator = rval_evaluator_alloc_from_ast( - pnode, pcst->pfmgr, type_inferencing, context_flags); - - pstate->negate_final_filter = negate_final_filter; - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_final_filter, - free_final_filter, - pstate); -} - -// ---------------------------------------------------------------- -static void free_final_filter(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - final_filter_state_t* pstate = pstatement->pvstate; - - pstate->pexpression_evaluator->pfree_func(pstate->pexpression_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_final_filter( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - final_filter_state_t* pstate = pstatement->pvstate; - rval_evaluator_t* pexpression_evaluator = pstate->pexpression_evaluator; - - mv_t val = pexpression_evaluator->pprocess_func(pexpression_evaluator->pvstate, pvars); - - if (mv_is_non_null(&val)) { - mv_set_boolean_strict(&val); - *pcst_outputs->pshould_emit_rec = val.u.boolv ^ pstate->negate_final_filter; - } else { - *pcst_outputs->pshould_emit_rec = FALSE; - } -} diff --git a/c/dsl/mlr_dsl_cst_for_map_statements.c b/c/dsl/mlr_dsl_cst_for_map_statements.c deleted file mode 100644 index 83c703aeb..000000000 --- a/c/dsl/mlr_dsl_cst_for_map_statements.c +++ /dev/null @@ -1,379 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -static void handle_for_map_aux( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs, - mlhmmv_xvalue_t* psubmap, - char** prest_for_k_variable_names, - int* prest_for_k_frame_relative_indices, - int* prest_for_k_type_masks, - int prest_for_k_count); - -// ================================================================ -typedef struct _for_map_state_t { - char** k_variable_names; - int* k_frame_relative_indices; - int* k_type_masks; - int k_count; - - char* v_variable_name; - int v_frame_relative_index; - int v_type_mask; - - rxval_evaluator_t* ptarget_xevaluator; -} for_map_state_t; - -static mlr_dsl_cst_statement_handler_t handle_for_map; -static mlr_dsl_cst_statement_freer_t free_for_map; - -// ---------------------------------------------------------------- -// $ mlr -n put -v 'for((k1,k2,k3),v in @a["4"][$5]) { $6 = 7; $8 = 9}' -// AST ROOT: -// text="block", type=STATEMENT_BLOCK: -// text="for", type=FOR_OOSVAR: -// text="key_and_value_variables", type=FOR_VARIABLES: -// text="key_variables", type=FOR_VARIABLES: -// text="k1", type=UNTYPED_LOCAL_DEFINITION. -// text="k2", type=UNTYPED_LOCAL_DEFINITION. -// text="k3", type=UNTYPED_LOCAL_DEFINITION. -// text="v", type=UNTYPED_LOCAL_DEFINITION. -// text="oosvar_keylist", type=OOSVAR_KEYLIST: -// text="a", type=STRING_LITERAL. -// text="4", type=STRING_LITERAL. -// text="5", type=FIELD_NAME. -// text="for_loop_oosvar_block", type=STATEMENT_BLOCK: -// text="=", type=SREC_ASSIGNMENT: -// text="6", type=FIELD_NAME. -// text="7", type=NUMERIC_LITERAL. -// text="=", type=SREC_ASSIGNMENT: -// text="8", type=FIELD_NAME. -// text="9", type=NUMERIC_LITERAL. - -mlr_dsl_cst_statement_t* alloc_for_map(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - for_map_state_t* pstate = mlr_malloc_or_die(sizeof(for_map_state_t)); - - pstate->k_variable_names = NULL; - pstate->k_frame_relative_indices = NULL; - pstate->k_type_masks = NULL; - pstate->k_count = 0; - - pstate->v_variable_name = NULL; - pstate->v_frame_relative_index = MD_UNUSED_INDEX; - pstate->v_type_mask = 0; - - pstate->ptarget_xevaluator = NULL; - - // Left child node is list of bound variables. - // - Left subnode is namelist for key boundvars. - // - Right subnode is name for value boundvar. - // Middle child node is keylist for basepoint in the oosvar mlhmmv. - // Right child node is the list of statements in the body. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* psubleft = pleft->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* psubright = pleft->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pmiddle = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pnext->pvvalue; - - pstate->k_variable_names = mlr_malloc_or_die(sizeof(char*) * psubleft->pchildren->length); - pstate->k_frame_relative_indices = mlr_malloc_or_die(sizeof(int) * psubleft->pchildren->length); - pstate->k_type_masks = mlr_malloc_or_die(sizeof(int) * psubleft->pchildren->length); - pstate->k_count = 0; - for (sllve_t* pe = psubleft->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pnamenode = pe->pvvalue; - MLR_INTERNAL_CODING_ERROR_IF(pnamenode->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->k_variable_names[pstate->k_count] = pnamenode->text; - pstate->k_frame_relative_indices[pstate->k_count] = pnamenode->vardef_frame_relative_index; - pstate->k_type_masks[pstate->k_count] = mlr_dsl_ast_node_type_to_type_mask(pnamenode->type); - pstate->k_count++; - } - pstate->v_variable_name = psubright->text; - MLR_INTERNAL_CODING_ERROR_IF(psubright->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->v_frame_relative_index = psubright->vardef_frame_relative_index; - pstate->v_type_mask = mlr_dsl_ast_node_type_to_type_mask(psubright->type); - - pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( - pmiddle, pcst->pfmgr, type_inferencing, context_flags); - - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags)); - } - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_for_map, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_for_map, - pstate); -} - -// ---------------------------------------------------------------- -static void free_for_map(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - for_map_state_t* pstate = pstatement->pvstate; - - free(pstate->k_variable_names); - free(pstate->k_frame_relative_indices); - free(pstate->k_type_masks); - - pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_for_map( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - for_map_state_t* pstate = pstatement->pvstate; - - rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; - - // Evaluate the keylist: e.g. in 'for (k,v in @a[$3][x]) { ... }', find the values of $3 - // and x for the current record and stack frame. The keylist bindings are outside the scope - // of the for-loop, while the k is bound within the for-loop. - boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal) { // is a map - - // Copy the map for the very likely case that it is being updated inside the for-loop. - // But ephemerals (map-literals, function return values) aren't named and so can't - // be modified and so don't need to be copied. - mlhmmv_xvalue_t* pmap = &boxed_xval.xval; - mlhmmv_xvalue_t copy; - if (!boxed_xval.is_ephemeral) { - copy = mlhmmv_xvalue_copy(&boxed_xval.xval); - pmap = © - } - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - if (!pmap->is_terminal && pmap->pnext_level != NULL) { - // Recurse over the for-k-names, e.g. ["k1", "k2"], on each call descending one level - // deeper into the map. Note there must be at least one k-name so we are assuming - // the for-loop within handle_for_map_aux was gone through once & thus - // mlr_dsl_cst_handle_statement_block_with_break_continue was called through there. - - handle_for_map_aux(pstatement, pvars, pcst_outputs, pmap, - pstate->k_variable_names, pstate->k_frame_relative_indices, - pstate->k_type_masks, pstate->k_count); - - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - } - if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - } - - if (!boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(©); - } - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); - } - - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } -} - -static void handle_for_map_aux( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs, - mlhmmv_xvalue_t* psubmap, - char** prest_for_k_variable_names, - int* prest_for_k_frame_relative_indices, - int* prest_for_k_type_masks, - int prest_for_k_count) -{ - for_map_state_t* pstate = pstatement->pvstate; - - if (prest_for_k_count > 0) { // Keep recursing over remaining k-names - - if (psubmap->is_terminal) { - // The submap was too shallow for the user-specified k-names; there are no terminals here. - } else { - // Loop over keys at this submap level: - for (mlhmmv_level_entry_t* pe = psubmap->pnext_level->phead; pe != NULL; pe = pe->pnext) { - // Bind the k-name to the entry-key mlrval: - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - // xxx note copy/ref semantics - local_stack_frame_define_terminal(pframe, prest_for_k_variable_names[0], - prest_for_k_frame_relative_indices[0], prest_for_k_type_masks[0], - mv_copy(&pe->level_key)); - // Recurse into the next-level submap: - handle_for_map_aux(pstatement, pvars, pcst_outputs, &pe->level_xvalue, - &prest_for_k_variable_names[1], &prest_for_k_frame_relative_indices[1], &prest_for_k_type_masks[1], - prest_for_k_count - 1); - - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - // Bit cleared in recursive caller - return; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - - } - } - - } else { // End of recursion: k-names have all been used up - - // Bind the v-name to the terminal mlrval: - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - // xxx note copy/ref semantics - local_stack_frame_define_extended(pframe, pstate->v_variable_name, pstate->v_frame_relative_index, - pstate->v_type_mask, mlhmmv_xvalue_copy(psubmap)); - // Execute the loop-body statements: - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - - } -} - -// ================================================================ -typedef struct _for_map_key_only_state_t { - char* k_variable_name; - int k_frame_relative_index; - int k_type_mask; - - rxval_evaluator_t* ptarget_xevaluator; -} for_map_key_only_state_t; - -static mlr_dsl_cst_statement_handler_t handle_for_map_key_only; -static mlr_dsl_cst_statement_freer_t free_for_map_key_only; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_for_map_key_only(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - for_map_key_only_state_t* pstate = mlr_malloc_or_die(sizeof(for_map_key_only_state_t)); - - pstate->k_variable_name = NULL; - pstate->k_frame_relative_index = MD_UNUSED_INDEX; - pstate->k_type_mask = 0; - - pstate->ptarget_xevaluator = NULL; - - // Left child node is single bound variable - // Middle child node is keylist for basepoint in the oosvar mlhmmv. - // Right child node is the list of statements in the body. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pmiddle = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(pleft->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->k_variable_name = pleft->text; - pstate->k_frame_relative_index = pleft->vardef_frame_relative_index; - pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pleft->type); - - pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( - pmiddle, pcst->pfmgr, type_inferencing, context_flags); - - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags)); - } - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_for_map_key_only, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_for_map_key_only, - pstate); -} - -// ---------------------------------------------------------------- -static void free_for_map_key_only(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - for_map_key_only_state_t* pstate = pstatement->pvstate; - - pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_for_map_key_only( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - for_map_key_only_state_t* pstate = pstatement->pvstate; - rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; - - // Evaluate the keylist: e.g. in 'for (k in @a[$3][x]) { ... }', find the values of $3 - // and x for the current record and stack frame. The keylist bindings are outside the scope - // of the for-loop, while the k is bound within the for-loop. - boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal) { // is a map - - // Copy the map for the very likely case that it is being updated inside the for-loop. - // But ephemerals (map-literals, function return values) aren't named and so can't - // be modified and so don't need to be copied. - mlhmmv_xvalue_t* pmap = &boxed_xval.xval; - mlhmmv_xvalue_t copy; - if (!boxed_xval.is_ephemeral) { - copy = mlhmmv_xvalue_copy(&boxed_xval.xval); - pmap = © - } - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - sllv_t* pkeys = mlhmmv_xvalue_copy_keys_nonindexed(pmap); - - for (sllve_t* pe = pkeys->phead; pe != NULL; pe = pe->pnext) { - // Bind the k-name to the current key: - local_stack_frame_define_terminal(pframe, - pstate->k_variable_name, pstate->k_frame_relative_index, - pstate->k_type_mask, mv_copy(pe->pvvalue)); - - // Execute the loop-body statements: - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - } - if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - - mv_free(pe->pvvalue); - free(pe->pvvalue); - } - sllv_free(pkeys); - if (!boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(©); - } - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); - } - - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } -} diff --git a/c/dsl/mlr_dsl_cst_for_srec_statements.c b/c/dsl/mlr_dsl_cst_for_srec_statements.c deleted file mode 100644 index e97e2a4d9..000000000 --- a/c/dsl/mlr_dsl_cst_for_srec_statements.c +++ /dev/null @@ -1,278 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ---------------------------------------------------------------- -static mlr_dsl_cst_statement_freer_t free_for_srec; -static mlr_dsl_cst_statement_handler_t handle_for_srec; - -// The variable names are used only for type-decl exceptions. Otherwise the -// names are replaced with frame-relative indices by the stack allocator. -typedef struct _for_srec_state_t { - char* k_variable_name; - int k_frame_relative_index; - int k_type_mask; - - char* v_variable_name; - int v_frame_relative_index; - int v_type_mask; - - type_inferenced_srec_field_copy_getter_t* ptype_inferenced_srec_field_copy_getter; - -} for_srec_state_t; - -// ---------------------------------------------------------------- -// $ mlr -n put -v 'for (k,v in $*) { $x=1; $y=2 }' -// AST ROOT: -// text="block", type=STATEMENT_BLOCK: -// text="for", type=FOR_SREC: -// text="variables", type=FOR_VARIABLES: -// text="k", type=UNTYPED_LOCAL_DEFINITION. -// text="v", type=UNTYPED_LOCAL_DEFINITION. -// text="for_full_srec_block", type=STATEMENT_BLOCK: -// text="=", type=SREC_ASSIGNMENT: -// text="x", type=FIELD_NAME. -// text="1", type=NUMERIC_LITERAL. -// text="=", type=SREC_ASSIGNMENT: -// text="y", type=FIELD_NAME. -// text="2", type=NUMERIC_LITERAL. - -mlr_dsl_cst_statement_t* alloc_for_srec(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - for_srec_state_t* pstate = mlr_malloc_or_die(sizeof(for_srec_state_t)); - - pstate->k_variable_name = NULL; - pstate->k_frame_relative_index = 0; - pstate->k_type_mask = TYPE_MASK_ANY; - pstate->v_variable_name = NULL; - pstate->v_frame_relative_index = 0; - pstate->v_type_mask = TYPE_MASK_ANY; - pstate-> ptype_inferenced_srec_field_copy_getter = NULL; - - // Left child node is list of bound variables. - // Right child node is the list of statements in the body. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; - - mlr_dsl_ast_node_t* pknode = pleft->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pvnode = pleft->pchildren->phead->pnext->pvvalue; - - if (streq(pknode->text, pvnode->text)) { - fprintf(stderr, "%s: duplicate for-loop boundvars \"%s\" and \"%s\".\n", - MLR_GLOBALS.bargv0, pknode->text, pvnode->text); - exit(1); - } - - pstate->k_variable_name = mlr_strdup_or_die(pknode->text); - pstate->v_variable_name = mlr_strdup_or_die(pvnode->text); - MLR_INTERNAL_CODING_ERROR_IF(pknode->vardef_frame_relative_index == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pvnode->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->k_frame_relative_index = pknode->vardef_frame_relative_index; - pstate->v_frame_relative_index = pvnode->vardef_frame_relative_index; - pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pknode->type); - pstate->v_type_mask = mlr_dsl_ast_node_type_to_type_mask(pvnode->type); - - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags)); - } - - pstate->ptype_inferenced_srec_field_copy_getter = - (type_inferencing == TYPE_INFER_STRING_ONLY) ? get_copy_srec_value_string_only_aux : - (type_inferencing == TYPE_INFER_STRING_FLOAT) ? get_copy_srec_value_string_float_aux : - (type_inferencing == TYPE_INFER_STRING_FLOAT_INT) ? get_copy_srec_value_string_float_int_aux : - NULL; - MLR_INTERNAL_CODING_ERROR_IF(pstate->ptype_inferenced_srec_field_copy_getter == NULL); - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_for_srec, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_for_srec, - pstate); -} - -// ---------------------------------------------------------------- -static void free_for_srec(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - for_srec_state_t* pstate = pstatement->pvstate; - free(pstate->k_variable_name); - free(pstate->v_variable_name); - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_for_srec( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - for_srec_state_t* pstate = pstatement->pvstate; - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - // Copy the lrec for the very likely case that it is being updated inside the for-loop. - lrec_t* pcopyrec = lrec_copy(pvars->pinrec); - lhmsmv_t* pcopyoverlay = lhmsmv_copy(pvars->ptyped_overlay); - - for (lrece_t* pe = pcopyrec->phead; pe != NULL; pe = pe->pnext) { - - mv_t mvkey = mv_from_string_no_free(pe->key); - mv_t mvval = pstate->ptype_inferenced_srec_field_copy_getter(pe, pcopyoverlay); - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_frame_define_terminal(pframe, - pstate->k_variable_name, pstate->k_frame_relative_index, - pstate->k_type_mask, mvkey); - local_stack_frame_define_terminal(pframe, - pstate->v_variable_name, pstate->v_frame_relative_index, - pstate->v_type_mask, mvval); - - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - break; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - } - lhmsmv_free(pcopyoverlay); - lrec_free(pcopyrec); - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} - -// ---------------------------------------------------------------- -static mlr_dsl_cst_statement_freer_t free_for_srec_key_only; -static mlr_dsl_cst_statement_handler_t handle_for_srec_key_only; - -// The variable names are used only for type-decl exceptions. Otherwise the -// names are replaced with frame-relative indices by the stack allocator. -typedef struct _for_srec_key_only_state_t { - char* k_variable_name; - int k_frame_relative_index; - int k_type_mask; - - type_inferenced_srec_field_copy_getter_t* ptype_inferenced_srec_field_copy_getter; - -} for_srec_key_only_state_t; - -// ---------------------------------------------------------------- -// $ mlr -n put -v 'for (k in $*) { $x=1; $y=2 }' -// -// AST ROOT: -// text="block", type=STATEMENT_BLOCK: -// text="for", type=FOR_SREC_KEY_ONLY: -// text="variables", type=FOR_VARIABLES: -// text="k", type=UNTYPED_LOCAL_DEFINITION. -// text="for_full_srec_block", type=STATEMENT_BLOCK: -// text="=", type=SREC_ASSIGNMENT: -// text="x", type=FIELD_NAME. -// text="1", type=NUMERIC_LITERAL. -// text="=", type=SREC_ASSIGNMENT: -// text="y", type=FIELD_NAME. -// text="2", type=NUMERIC_LITERAL. - -mlr_dsl_cst_statement_t* alloc_for_srec_key_only(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - for_srec_key_only_state_t* pstate = mlr_malloc_or_die(sizeof(for_srec_key_only_state_t)); - - pstate->k_variable_name = NULL; - pstate->k_frame_relative_index = 0; - pstate->k_type_mask = TYPE_MASK_ANY; - pstate-> ptype_inferenced_srec_field_copy_getter = NULL; - - // Left child node is list of bound variables. - // Right child node is the list of statements in the body. - mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue; - - mlr_dsl_ast_node_t* pknode = pleft->pchildren->phead->pvvalue; - - pstate->k_variable_name = mlr_strdup_or_die(pknode->text); - MLR_INTERNAL_CODING_ERROR_IF(pknode->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->k_frame_relative_index = pknode->vardef_frame_relative_index; - pstate->k_type_mask = mlr_dsl_ast_node_type_to_type_mask(pknode->type); - - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); - - for (sllve_t* pe = pright->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags)); - } - - pstate->ptype_inferenced_srec_field_copy_getter = - (type_inferencing == TYPE_INFER_STRING_ONLY) ? get_copy_srec_value_string_only_aux : - (type_inferencing == TYPE_INFER_STRING_FLOAT) ? get_copy_srec_value_string_float_aux : - (type_inferencing == TYPE_INFER_STRING_FLOAT_INT) ? get_copy_srec_value_string_float_int_aux : - NULL; - MLR_INTERNAL_CODING_ERROR_IF(pstate->ptype_inferenced_srec_field_copy_getter == NULL); - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_for_srec_key_only, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_for_srec_key_only, - pstate); -} - -// ---------------------------------------------------------------- -static void free_for_srec_key_only(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - for_srec_key_only_state_t* pstate = pstatement->pvstate; - free(pstate->k_variable_name); - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_for_srec_key_only( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - for_srec_key_only_state_t* pstate = pstatement->pvstate; - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - // Copy the lrec for the very likely case that it is being updated inside the for-loop. - lrec_t* pcopyrec = lrec_copy(pvars->pinrec); - lhmsmv_t* pcopyoverlay = lhmsmv_copy(pvars->ptyped_overlay); - - for (lrece_t* pe = pcopyrec->phead; pe != NULL; pe = pe->pnext) { - - mv_t mvkey = mv_from_string_no_free(pe->key); - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_frame_define_terminal(pframe, - pstate->k_variable_name, pstate->k_frame_relative_index, - pstate->k_type_mask, mvkey); - - pstatement->pblock_handler(pstatement->pblock, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - break; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - } - lhmsmv_free(pcopyoverlay); - lrec_free(pcopyrec); - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} diff --git a/c/dsl/mlr_dsl_cst_func_subr.c b/c/dsl/mlr_dsl_cst_func_subr.c deleted file mode 100644 index e038ec964..000000000 --- a/c/dsl/mlr_dsl_cst_func_subr.c +++ /dev/null @@ -1,522 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/hss.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -static boxed_xval_t cst_udf_process_callback(void* pvstate, int arity, boxed_xval_t* args, variables_t* pvars); -static void cst_udf_free_callback(void* pvstate, context_t* pctx); -static void cst_udf_type_check_return_value(cst_udf_state_t* pstate, mlhmmv_xvalue_t* pretval); - -// ---------------------------------------------------------------- -// $ cat def -//mlr --from s put -v ' -// def f(x,y,z) { -// var a = 1; -// $x = 2; -// return a + y * 2; -// } -//' - -// $ def -// AST ROOT: -// text="list", type=statement_list: -// text="f", type=def: -// text="f", type=non_sigil_name: -// text="x", type=non_sigil_name. -// text="y", type=non_sigil_name. -// text="z", type=non_sigil_name. -// text="list", type=statement_list: -// text="var", type=return: -// text="a", type=non_sigil_name. -// text="1", type=numeric_literal. -// text="=", type=srec_assignment: -// text="x", type=field_name. -// text="2", type=numeric_literal. -// text="return", type=return: -// text="+", type=operator: -// text="a", type=local_variable. -// text="*", type=operator: -// text="y", type=local_variable. -// text="2", type=numeric_literal. - -udf_defsite_state_t* mlr_dsl_cst_alloc_udf(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - mlr_dsl_ast_node_t* pparameters_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pbody_node = pnode->pchildren->phead->pnext->pvvalue; - - cst_udf_state_t* pcst_udf_state = mlr_malloc_or_die(sizeof(cst_udf_state_t)); - - if (pnode->pchildren->length == 3) { - mlr_dsl_ast_node_t* pmask_node = pnode->pchildren->phead->pnext->pnext->pvvalue; - // E.g. 'func f(int x): int { return x*2 + 1 }' - pcst_udf_state->return_value_type_name = pmask_node->text; - pcst_udf_state->return_value_type_mask = type_mask_from_name(pmask_node->text); - } else { - // E.g. 'func f(int x) { return x*2 + 1 }' - pcst_udf_state->return_value_type_name = "any"; - pcst_udf_state->return_value_type_mask = TYPE_MASK_ANY; - } - - pcst_udf_state->name = mlr_strdup_or_die(pnode->text); - pcst_udf_state->arity = pparameters_node->pchildren->length; - pcst_udf_state->parameter_names = mlr_malloc_or_die(pcst_udf_state->arity * sizeof(char*)); - pcst_udf_state->parameter_type_masks = mlr_malloc_or_die(pcst_udf_state->arity * sizeof(int)); - int ok = TRUE; - hss_t* pnameset = hss_alloc(); - int i = 0; - for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; - - if (hss_has(pnameset, pparameter_node->text)) { - fprintf(stderr, "%s: duplicate parameter name \"%s\" in function \"%s\".\n", - MLR_GLOBALS.bargv0, pparameter_node->text, pnode->text); - ok = FALSE; - } - hss_add(pnameset, pparameter_node->text); - - pcst_udf_state->parameter_names[i] = mlr_strdup_or_die(pparameter_node->text); - pcst_udf_state->parameter_type_masks[i] = mlr_dsl_ast_node_type_to_type_mask(pparameter_node->type); - } - hss_free(pnameset); - - if (!ok) { - fprintf(stderr, "Parameter names: "); - for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; - fprintf(stderr, "\"%s\"", pparameter_node->text); - if (pe->pnext != NULL) - fprintf(stderr, ", "); - } - fprintf(stderr, ".\n"); - exit(1); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - pcst_udf_state->ptop_level_block = cst_top_level_statement_block_alloc(pnode->max_var_depth, - pnode->subframe_var_count); - - for (sllve_t* pe = pbody_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - if (pbody_ast_node->type == MD_AST_NODE_TYPE_RETURN_VOID) { - fprintf(stderr, - "%s: return statements within user-defined functions must return a value.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - sllv_append(pcst_udf_state->ptop_level_block->pblock->pstatements, - mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, type_inferencing, context_flags | IN_FUNC_DEF)); - } - - // Callback struct for the function manager to invoke the new function: - udf_defsite_state_t* pdefsite_state = mlr_malloc_or_die(sizeof(udf_defsite_state_t)); - pdefsite_state->pvstate = pcst_udf_state; - pdefsite_state->name = mlr_strdup_or_die(pnode->text); - pdefsite_state->arity = pcst_udf_state->arity; - pdefsite_state->pprocess_func = cst_udf_process_callback; - pdefsite_state->pfree_func = cst_udf_free_callback; - - return pdefsite_state; -} - -void mlr_dsl_cst_free_udf(cst_udf_state_t* pstate, context_t* pctx) { - if (pstate == NULL) - return; - - free(pstate->name); - for (int i = 0; i < pstate->arity; i++) - free(pstate->parameter_names[i]); - free(pstate->parameter_names); - free(pstate->parameter_type_masks); - - cst_top_level_statement_block_free(pstate->ptop_level_block, pctx); - - free(pstate); -} - -// ---------------------------------------------------------------- -// Callback function for the function manager to invoke into here - -static boxed_xval_t cst_udf_process_callback(void* pvstate, int arity, boxed_xval_t* args, variables_t* pvars) { - cst_udf_state_t* pstate = pvstate; - cst_top_level_statement_block_t* ptop_level_block = pstate->ptop_level_block; - boxed_xval_t retval = box_ephemeral_val(mv_absent()); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Push stack and bind parameters to arguments - - local_stack_frame_t* pframe = local_stack_frame_enter(ptop_level_block->pframe); - local_stack_push(pvars->plocal_stack, pframe); - local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); - - for (int i = 0; i < arity; i++) { - // Absent-null is by convention at slot 0 of the frame, and arguments are next. - // Hence starting the loop at 1. - if (args[i].is_ephemeral) { - local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, - pstate->parameter_type_masks[i], args[i].xval); - } else { - local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, - pstate->parameter_type_masks[i], mlhmmv_xvalue_copy(&args[i].xval)); - } - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Compute the function value - cst_outputs_t* pcst_outputs = NULL; // Functions only produce output via their return values - - if (pvars->trace_execution) { - fprintf(stdout, "TRACE ENTER FUNC %s\n", pstate->name); - for (sllve_t* pe = ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - fprintf(stdout, "TRACE "); - mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - if (pvars->return_state.returned) { - retval = pvars->return_state.retval; - if (pstate->return_value_type_mask != TYPE_MASK_ANY) { - cst_udf_type_check_return_value(pstate, &retval.xval); - } - pvars->return_state.retval = box_ephemeral_val(mv_absent()); - pvars->return_state.returned = FALSE; - break; - } - } - fprintf(stdout, "TRACE EXIT FUNC %s\n", pstate->name); - } else { - for (sllve_t* pe = ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - if (pvars->return_state.returned) { - retval = pvars->return_state.retval; - if (pstate->return_value_type_mask != TYPE_MASK_ANY) { - cst_udf_type_check_return_value(pstate, &retval.xval); - } - pvars->return_state.retval = box_ephemeral_val(mv_absent()); - pvars->return_state.returned = FALSE; - break; - } - } - } - - if (!pvars->return_state.returned) { - if (pstate->return_value_type_mask != TYPE_MASK_ANY) { - cst_udf_type_check_return_value(pstate, &retval.xval); - } - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Pop stack - local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); - local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); - - return retval; -} - -static void cst_udf_type_check_return_value(cst_udf_state_t* pstate, mlhmmv_xvalue_t* pretval) { - int ok = TRUE; - if (pretval->is_terminal) { - if (!(type_mask_from_mv(&pretval->terminal_mlrval) & pstate->return_value_type_mask)) { - ok = FALSE; - } - } else { - if (!(TYPE_MASK_MAP & pstate->return_value_type_mask)) { - ok = FALSE; - } - } - if (!ok) { - fprintf(stderr, "%s: function %s returned type %s, not matching typedecl %s.\n", - MLR_GLOBALS.bargv0, pstate->name, - mlhmmv_xvalue_describe_type_simple(pretval), pstate->return_value_type_name); - exit(1); - } -} - -// ---------------------------------------------------------------- -// Callback function for the function manager to invoke into here - -static void cst_udf_free_callback(void* pvstate, context_t* pctx) { - cst_udf_state_t* pstate = pvstate; - mlr_dsl_cst_free_udf(pstate, pctx); -} - -// ================================================================ -typedef struct _subr_callsite_statement_state_t { - rxval_evaluator_t** subr_callsite_argument_evaluators; - boxed_xval_t* subr_callsite_arguments; - subr_callsite_t* psubr_callsite; - subr_defsite_t* psubr_defsite; - -} subr_callsite_statement_state_t; - -static mlr_dsl_cst_statement_handler_t handle_subr_callsite_statement; -static mlr_dsl_cst_statement_freer_t free_subr_callsite_statement; - -static subr_callsite_t* subr_callsite_alloc(char* name, int arity, int type_inferencing, int context_flags); -static void subr_callsite_free(subr_callsite_t* psubr_callsite); - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_subr_callsite_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - subr_callsite_statement_state_t* pstate = mlr_malloc_or_die(sizeof(subr_callsite_statement_state_t)); - - pstate->subr_callsite_argument_evaluators = NULL; - pstate->subr_callsite_arguments = NULL; - pstate->psubr_callsite = NULL; - pstate->psubr_defsite = NULL; - - mlr_dsl_ast_node_t* pname_node = pnode->pchildren->phead->pvvalue; - int callsite_arity = pname_node->pchildren->length; - - pstate->psubr_callsite = subr_callsite_alloc(pname_node->text, callsite_arity, - type_inferencing, context_flags); - - pstate->subr_callsite_argument_evaluators = mlr_malloc_or_die(callsite_arity * sizeof(rxval_evaluator_t*)); - pstate->subr_callsite_arguments = mlr_malloc_or_die(callsite_arity * sizeof(boxed_xval_t)); - - int i = 0; - for (sllve_t* pe = pname_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pargument_node = pe->pvvalue; - pstate->subr_callsite_argument_evaluators[i] = rxval_evaluator_alloc_from_ast(pargument_node, - pcst->pfmgr, type_inferencing, context_flags); - } - - mlr_dsl_cst_statement_t* pstatement = mlr_dsl_cst_statement_valloc( - pnode, - handle_subr_callsite_statement, - free_subr_callsite_statement, - pstate); - - // Remember this callsite to be resolved later, after all subroutine definitions have been done. - sllv_append(pcst->psubr_callsite_statements_to_resolve, pstatement); - - return pstatement; -} - -// ---------------------------------------------------------------- -void mlr_dsl_cst_resolve_subr_callsite(mlr_dsl_cst_t* pcst, mlr_dsl_cst_statement_t* pstatement) { - subr_callsite_statement_state_t* pstate = pstatement->pvstate; - - subr_callsite_t* psubr_callsite = pstate->psubr_callsite; - subr_defsite_t* psubr_defsite = lhmsv_get(pcst->psubr_defsites, psubr_callsite->name); - if (psubr_defsite == NULL) { - fprintf(stderr, "%s: subroutine \"%s\" not found.\n", MLR_GLOBALS.bargv0, psubr_callsite->name); - exit(1); - } - if (psubr_defsite->arity != psubr_callsite->arity) { - fprintf(stderr, "%s: subroutine \"%s\" expects argument count %d but argument count %d was provided.\n", - MLR_GLOBALS.bargv0, psubr_callsite->name, psubr_defsite->arity, psubr_callsite->arity); - exit(1); - } - pstate->psubr_defsite = psubr_defsite; -} - -// ---------------------------------------------------------------- -static void handle_subr_callsite_statement( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - subr_callsite_statement_state_t* pstate = pstatement->pvstate; - - for (int i = 0; i < pstate->psubr_callsite->arity; i++) { - rxval_evaluator_t* pev = pstate->subr_callsite_argument_evaluators[i]; - pstate->subr_callsite_arguments[i] = pev->pprocess_func(pev->pvstate, pvars); - } - - mlr_dsl_cst_execute_subroutine(pstate->psubr_defsite, pvars, pcst_outputs, - pstate->psubr_callsite->arity, pstate->subr_callsite_arguments); -} - -// ---------------------------------------------------------------- -static void free_subr_callsite_statement(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - subr_callsite_statement_state_t* pstate = pstatement->pvstate; - - if (pstate->subr_callsite_argument_evaluators != NULL) { - for (int i = 0; i < pstate->psubr_callsite->arity; i++) { - rxval_evaluator_t* phandler = pstate->subr_callsite_argument_evaluators[i]; - phandler->pfree_func(phandler); - } - free(pstate->subr_callsite_argument_evaluators); - } - - if (pstate->subr_callsite_arguments != NULL) { - // mv_frees are done by the local-stack container which owns the mlrvals it contains - free(pstate->subr_callsite_arguments); - } - subr_callsite_free(pstate->psubr_callsite); - - free(pstate); -} - -// ---------------------------------------------------------------- -static subr_callsite_t* subr_callsite_alloc(char* name, int arity, int type_inferencing, int context_flags) { - subr_callsite_t* psubr_callsite = mlr_malloc_or_die(sizeof(subr_callsite_t)); - psubr_callsite->name = mlr_strdup_or_die(name); - psubr_callsite->arity = arity; - psubr_callsite->type_inferencing = type_inferencing; - psubr_callsite->context_flags = context_flags; - return psubr_callsite; -} - -static void subr_callsite_free(subr_callsite_t* psubr_callsite) { - if (psubr_callsite == NULL) - return; - free(psubr_callsite->name); - free(psubr_callsite); -} - -// ================================================================ -subr_defsite_t* mlr_dsl_cst_alloc_subroutine(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, // xxx rename? - int type_inferencing, int context_flags) -{ - mlr_dsl_ast_node_t* pparameters_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pbody_node = pnode->pchildren->phead->pnext->pvvalue; - - int arity = pparameters_node->pchildren->length; - subr_defsite_t* pstate = mlr_malloc_or_die(sizeof(subr_defsite_t)); - - pstate->name = mlr_strdup_or_die(pparameters_node->text); - - pstate->arity = arity; - - pstate->parameter_names = mlr_malloc_or_die(arity * sizeof(char*)); - pstate->parameter_type_masks = mlr_malloc_or_die(arity * sizeof(int)); - int ok = TRUE; - hss_t* pnameset = hss_alloc(); - int i = 0; - for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; - - if (hss_has(pnameset, pparameter_node->text)) { - fprintf(stderr, "%s: duplicate parameter name \"%s\" in subroutine \"%s\".\n", - MLR_GLOBALS.bargv0, pparameter_node->text, pnode->text); - ok = FALSE; - } - hss_add(pnameset, pparameter_node->text); - - pstate->parameter_names[i] = mlr_strdup_or_die(pparameter_node->text); - pstate->parameter_type_masks[i] = mlr_dsl_ast_node_type_to_type_mask(pparameter_node->type); - } - hss_free(pnameset); - - if (!ok) { - fprintf(stderr, "Parameter names: "); - for (sllve_t* pe = pparameters_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; - fprintf(stderr, "\"%s\"", pparameter_node->text); - if (pe->pnext != NULL) - fprintf(stderr, ", "); - } - fprintf(stderr, ".\n"); - exit(1); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX); - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - pstate->ptop_level_block = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->subframe_var_count); - - for (sllve_t* pe = pbody_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - if (pbody_ast_node->type == MD_AST_NODE_TYPE_RETURN_VALUE) { - fprintf(stderr, - "%s: return statements within user-defined subroutines must not return a value.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - mlr_dsl_cst_statement_t* pstatement = mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags | IN_SUBR_DEF); - sllv_append(pstate->ptop_level_block->pblock->pstatements, pstatement); - } - - return pstate; -} - -// ---------------------------------------------------------------- -void mlr_dsl_cst_free_subroutine(subr_defsite_t* pstate, context_t* pctx) { - if (pstate == NULL) - return; - - free(pstate->name); - - for (int i = 0; i < pstate->arity; i++) - free(pstate->parameter_names[i]); - free(pstate->parameter_names); - free(pstate->parameter_type_masks); - - cst_top_level_statement_block_free(pstate->ptop_level_block, pctx); - - free(pstate); -} - -// ---------------------------------------------------------------- -void mlr_dsl_cst_execute_subroutine(subr_defsite_t* pstate, variables_t* pvars, - cst_outputs_t* pcst_outputs, int callsite_arity, boxed_xval_t* args) -{ - cst_top_level_statement_block_t* ptop_level_block = pstate->ptop_level_block; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Push stack and bind parameters to arguments - local_stack_frame_t* pframe = local_stack_frame_enter(ptop_level_block->pframe); - local_stack_push(pvars->plocal_stack, pframe); - local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); - - for (int i = 0; i < pstate->arity; i++) { - // Absent-null is by convention at slot 0 of the frame, and arguments are next. - // Hence starting the loop at 1. - if (args[i].is_ephemeral) { - local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, - pstate->parameter_type_masks[i], args[i].xval); - } else { - local_stack_frame_define_extended(pframe, pstate->parameter_names[i], i+1, - pstate->parameter_type_masks[i], mlhmmv_xvalue_copy(&args[i].xval)); - } - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Execute the subroutine body - - if (pvars->trace_execution) { - fprintf(stdout, "TRACE ENTER SUBR %s\n", pstate->name); - for (sllve_t* pe = pstate->ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - fprintf(stdout, "TRACE "); - mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - if (pvars->return_state.returned) { - pvars->return_state.returned = FALSE; - break; - } - } - fprintf(stdout, "TRACE EXIT SUBR %s\n", pstate->name); - } else { - for (sllve_t* pe = pstate->ptop_level_block->pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - if (pvars->return_state.returned) { - pvars->return_state.returned = FALSE; - break; - } - } - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Pop stack - local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); - local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); -} diff --git a/c/dsl/mlr_dsl_cst_keywords.c b/c/dsl/mlr_dsl_cst_keywords.c deleted file mode 100644 index 7aea29ac1..000000000 --- a/c/dsl/mlr_dsl_cst_keywords.c +++ /dev/null @@ -1,656 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/hss.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ---------------------------------------------------------------- -typedef void keyword_usage_func_t(FILE* ostream); - -static keyword_usage_func_t mlr_dsl_ENV_keyword_usage; -static keyword_usage_func_t mlr_dsl_FILENAME_keyword_usage; -static keyword_usage_func_t mlr_dsl_FILENUM_keyword_usage; -static keyword_usage_func_t mlr_dsl_FNR_keyword_usage; -static keyword_usage_func_t mlr_dsl_IFS_keyword_usage; -static keyword_usage_func_t mlr_dsl_IPS_keyword_usage; -static keyword_usage_func_t mlr_dsl_IRS_keyword_usage; -static keyword_usage_func_t mlr_dsl_M_E_keyword_usage; -static keyword_usage_func_t mlr_dsl_M_PI_keyword_usage; -static keyword_usage_func_t mlr_dsl_NF_keyword_usage; -static keyword_usage_func_t mlr_dsl_NR_keyword_usage; -static keyword_usage_func_t mlr_dsl_OFS_keyword_usage; -static keyword_usage_func_t mlr_dsl_OPS_keyword_usage; -static keyword_usage_func_t mlr_dsl_ORS_keyword_usage; -static keyword_usage_func_t mlr_dsl_all_keyword_usage; -static keyword_usage_func_t mlr_dsl_begin_keyword_usage; -static keyword_usage_func_t mlr_dsl_bool_keyword_usage; -static keyword_usage_func_t mlr_dsl_break_keyword_usage; -static keyword_usage_func_t mlr_dsl_call_keyword_usage; -static keyword_usage_func_t mlr_dsl_continue_keyword_usage; -static keyword_usage_func_t mlr_dsl_do_keyword_usage; -static keyword_usage_func_t mlr_dsl_dump_keyword_usage; -static keyword_usage_func_t mlr_dsl_edump_keyword_usage; -static keyword_usage_func_t mlr_dsl_elif_keyword_usage; -static keyword_usage_func_t mlr_dsl_else_keyword_usage; -static keyword_usage_func_t mlr_dsl_emit_keyword_usage; -static keyword_usage_func_t mlr_dsl_emitf_keyword_usage; -static keyword_usage_func_t mlr_dsl_emitp_keyword_usage; -static keyword_usage_func_t mlr_dsl_end_keyword_usage; -static keyword_usage_func_t mlr_dsl_eprint_keyword_usage; -static keyword_usage_func_t mlr_dsl_eprintn_keyword_usage; -static keyword_usage_func_t mlr_dsl_false_keyword_usage; -static keyword_usage_func_t mlr_dsl_filter_keyword_usage; -static keyword_usage_func_t mlr_dsl_float_keyword_usage; -static keyword_usage_func_t mlr_dsl_for_keyword_usage; -static keyword_usage_func_t mlr_dsl_func_keyword_usage; -static keyword_usage_func_t mlr_dsl_if_keyword_usage; -static keyword_usage_func_t mlr_dsl_in_keyword_usage; -static keyword_usage_func_t mlr_dsl_int_keyword_usage; -static keyword_usage_func_t mlr_dsl_map_keyword_usage; -static keyword_usage_func_t mlr_dsl_num_keyword_usage; -static keyword_usage_func_t mlr_dsl_print_keyword_usage; -static keyword_usage_func_t mlr_dsl_printn_keyword_usage; -static keyword_usage_func_t mlr_dsl_return_keyword_usage; -static keyword_usage_func_t mlr_dsl_stderr_keyword_usage; -static keyword_usage_func_t mlr_dsl_stdout_keyword_usage; -static keyword_usage_func_t mlr_dsl_str_keyword_usage; -static keyword_usage_func_t mlr_dsl_subr_keyword_usage; -static keyword_usage_func_t mlr_dsl_tee_keyword_usage; -static keyword_usage_func_t mlr_dsl_true_keyword_usage; -static keyword_usage_func_t mlr_dsl_unset_keyword_usage; -static keyword_usage_func_t mlr_dsl_var_keyword_usage; -static keyword_usage_func_t mlr_dsl_while_keyword_usage; - -// ---------------------------------------------------------------- -typedef struct _keyword_usage_entry_t { - char* name; - keyword_usage_func_t* pusage_func; -} keyword_usage_entry_t; - -static keyword_usage_entry_t KEYWORD_USAGE_TABLE[] = { - - { "all", mlr_dsl_all_keyword_usage }, - { "begin", mlr_dsl_begin_keyword_usage }, - { "bool", mlr_dsl_bool_keyword_usage }, - { "break", mlr_dsl_break_keyword_usage }, - { "call", mlr_dsl_call_keyword_usage }, - { "continue", mlr_dsl_continue_keyword_usage }, - { "do", mlr_dsl_do_keyword_usage }, - { "dump", mlr_dsl_dump_keyword_usage }, - { "edump", mlr_dsl_edump_keyword_usage }, - { "elif", mlr_dsl_elif_keyword_usage }, - { "else", mlr_dsl_else_keyword_usage }, - { "emit", mlr_dsl_emit_keyword_usage }, - { "emitf", mlr_dsl_emitf_keyword_usage }, - { "emitp", mlr_dsl_emitp_keyword_usage }, - { "end", mlr_dsl_end_keyword_usage }, - { "eprint", mlr_dsl_eprint_keyword_usage }, - { "eprintn", mlr_dsl_eprintn_keyword_usage }, - { "false", mlr_dsl_false_keyword_usage }, - { "filter", mlr_dsl_filter_keyword_usage }, - { "float", mlr_dsl_float_keyword_usage }, - { "for", mlr_dsl_for_keyword_usage }, - { "func", mlr_dsl_func_keyword_usage }, - { "if", mlr_dsl_if_keyword_usage }, - { "in", mlr_dsl_in_keyword_usage }, - { "int", mlr_dsl_int_keyword_usage }, - { "map", mlr_dsl_map_keyword_usage }, - { "num", mlr_dsl_num_keyword_usage }, - { "print", mlr_dsl_print_keyword_usage }, - { "printn", mlr_dsl_printn_keyword_usage }, - { "return", mlr_dsl_return_keyword_usage }, - { "stderr", mlr_dsl_stderr_keyword_usage }, - { "stdout", mlr_dsl_stdout_keyword_usage }, - { "str", mlr_dsl_str_keyword_usage }, - { "subr", mlr_dsl_subr_keyword_usage }, - { "tee", mlr_dsl_tee_keyword_usage }, - { "true", mlr_dsl_true_keyword_usage }, - { "unset", mlr_dsl_unset_keyword_usage }, - { "var", mlr_dsl_var_keyword_usage }, - { "while", mlr_dsl_while_keyword_usage }, - { "ENV", mlr_dsl_ENV_keyword_usage }, - { "FILENAME", mlr_dsl_FILENAME_keyword_usage }, - { "FILENUM", mlr_dsl_FILENUM_keyword_usage }, - { "FNR", mlr_dsl_FNR_keyword_usage }, - { "IFS", mlr_dsl_IFS_keyword_usage }, - { "IPS", mlr_dsl_IPS_keyword_usage }, - { "IRS", mlr_dsl_IRS_keyword_usage }, - { "M_E", mlr_dsl_M_E_keyword_usage }, - { "M_PI", mlr_dsl_M_PI_keyword_usage }, - { "NF", mlr_dsl_NF_keyword_usage }, - { "NR", mlr_dsl_NR_keyword_usage }, - { "OFS", mlr_dsl_OFS_keyword_usage }, - { "OPS", mlr_dsl_OPS_keyword_usage }, - { "ORS", mlr_dsl_ORS_keyword_usage }, - -}; -static int KEYWORD_USAGE_TABLE_SIZE = sizeof(KEYWORD_USAGE_TABLE)/sizeof(KEYWORD_USAGE_TABLE[0]); - -// ================================================================ -// Pass function_name == NULL to get usage for all keywords. -// Note keywords are defined in parsing/mlr_dsl_lexer.l. -void mlr_dsl_keyword_usage(FILE* ostream, char* keyword) { - if (keyword == NULL) { - for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { - if (i > 0) { - fprintf(ostream, "\n"); - } - KEYWORD_USAGE_TABLE[i].pusage_func(ostream); - } - } else { - - int found = FALSE; - for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { - if (streq(keyword, KEYWORD_USAGE_TABLE[i].name)) { - KEYWORD_USAGE_TABLE[i].pusage_func(ostream); - found = TRUE; - break; - } - } - if (!found) { - fprintf(ostream, "%s: unrecognized keyword \"%s\".\n", MLR_GLOBALS.bargv0, keyword); - } - } -} - -void mlr_dsl_list_all_keywords_raw(FILE* ostream) { - for (int i = 0; i < KEYWORD_USAGE_TABLE_SIZE; i++) { - printf("%s\n", KEYWORD_USAGE_TABLE[i].name); - } -} - -// ---------------------------------------------------------------- -static void mlr_dsl_all_keyword_usage(FILE* ostream) { - fprintf(ostream, - "all: used in \"emit\", \"emitp\", and \"unset\" as a synonym for @*\n" - ); -} - -static void mlr_dsl_begin_keyword_usage(FILE* ostream) { - fprintf(ostream, - "begin: defines a block of statements to be executed before input records\n" - "are ingested. The body statements must be wrapped in curly braces.\n" - "Example: 'begin { @count = 0 }'\n" - ); -} - -static void mlr_dsl_bool_keyword_usage(FILE* ostream) { - fprintf(ostream, - "bool: declares a boolean local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment: 'bool b = 1' is an error.\n" - ); -} - -static void mlr_dsl_break_keyword_usage(FILE* ostream) { - fprintf(ostream, - "break: causes execution to continue after the body of the current\n" - "for/while/do-while loop.\n" - ); -} - -static void mlr_dsl_call_keyword_usage(FILE* ostream) { - fprintf(ostream, - "call: used for invoking a user-defined subroutine.\n" - "Example: 'subr s(k,v) { print k . \" is \" . v} call s(\"a\", $a)'\n" - ); -} - -static void mlr_dsl_continue_keyword_usage(FILE* ostream) { - fprintf(ostream, - "continue: causes execution to skip the remaining statements in the body of\n" - "the current for/while/do-while loop. For-loop increments are still applied.\n" - ); -} - -static void mlr_dsl_do_keyword_usage(FILE* ostream) { - fprintf(ostream, - "do: with \"while\", introduces a do-while loop. The body statements must be wrapped\n" - "in curly braces.\n" - ); -} - -static void mlr_dsl_dump_keyword_usage(FILE* ostream) { - fprintf(ostream, - "dump: prints all currently defined out-of-stream variables immediately\n" - " to stdout as JSON.\n" - "\n" - " With >, >>, or |, the data do not become part of the output record stream but\n" - " are instead redirected.\n" - "\n" - " The > and >> are for write and append, as in the shell, but (as with awk) the\n" - " file-overwrite for > is on first write, not per record. The | is for piping to\n" - " a process which will process the data. There will be one open file for each\n" - " distinct file name (for > and >>) or one subordinate process for each distinct\n" - " value of the piped-to command (for |). Output-formatting flags are taken from\n" - " the main command line.\n" - "\n" - " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }'\n" - " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > \"mytap.dat\"}'\n" - " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> \"mytap.dat\"}'\n" - " Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | \"jq .[]\"}'\n"); -} - -static void mlr_dsl_edump_keyword_usage(FILE* ostream) { - fprintf(ostream, - "edump: prints all currently defined out-of-stream variables immediately\n" - " to stderr as JSON.\n" - "\n" - " Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }'\n"); -} - -static void mlr_dsl_elif_keyword_usage(FILE* ostream) { - fprintf(ostream, - "elif: the way Miller spells \"else if\". The body statements must be wrapped\n" - "in curly braces.\n" - ); -} - -static void mlr_dsl_else_keyword_usage(FILE* ostream) { - fprintf(ostream, - "else: terminates an if/elif/elif chain. The body statements must be wrapped\n" - "in curly braces.\n" - ); -} - -static void mlr_dsl_emit_keyword_usage(FILE* ostream) { - fprintf(ostream, - "emit: inserts an out-of-stream variable into the output record stream. Hashmap\n" - " indices present in the data but not slotted by emit arguments are not output.\n" - "\n" - " With >, >>, or |, the data do not become part of the output record stream but\n" - " are instead redirected.\n" - "\n" - " The > and >> are for write and append, as in the shell, but (as with awk) the\n" - " file-overwrite for > is on first write, not per record. The | is for piping to\n" - " a process which will process the data. There will be one open file for each\n" - " distinct file name (for > and >>) or one subordinate process for each distinct\n" - " value of the piped-to command (for |). Output-formatting flags are taken from\n" - " the main command line.\n" - "\n" - " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" - " etc., to control the format of the output if the output is redirected. See also %s -h.\n" - "\n" - " Example: mlr --from f.dat put 'emit > \"/tmp/data-\".$a, $*'\n" - " Example: mlr --from f.dat put 'emit > \"/tmp/data-\".$a, mapexcept($*, \"a\")'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums'\n" - " Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > \"tap-\".$a.$b.\".dat\", @sums'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > \"mytap.dat\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> \"mytap.dat\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | \"gzip > mytap.dat.gz\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | \"grep somepattern\", @*, \"index1\", \"index2\"'\n" - "\n" - " Please see http://johnkerl.org/miller/doc for more information.\n", - MLR_GLOBALS.bargv0); -} - -static void mlr_dsl_emitf_keyword_usage(FILE* ostream) { - fprintf(ostream, - "emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the\n" - " output record stream.\n" - "\n" - " With >, >>, or |, the data do not become part of the output record stream but\n" - " are instead redirected.\n" - "\n" - " The > and >> are for write and append, as in the shell, but (as with awk) the\n" - " file-overwrite for > is on first write, not per record. The | is for piping to\n" - " a process which will process the data. There will be one open file for each\n" - " distinct file name (for > and >>) or one subordinate process for each distinct\n" - " value of the piped-to command (for |). Output-formatting flags are taken from\n" - " the main command line.\n" - "\n" - " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" - " etc., to control the format of the output if the output is redirected. See also %s -h.\n" - "\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a'\n" - " Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > \"tap-\".$i.\".dat\", @a'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > \"mytap.dat\", @a, @b, @c'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> \"mytap.dat\", @a, @b, @c'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | \"grep somepattern\", @a, @b, @c'\n" - " Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | \"grep somepattern > mytap.dat\", @a, @b, @c'\n" - "\n" - " Please see http://johnkerl.org/miller/doc for more information.\n", - MLR_GLOBALS.bargv0); -} - -static void mlr_dsl_emitp_keyword_usage(FILE* ostream) { - fprintf(ostream, - "emitp: inserts an out-of-stream variable into the output record stream.\n" - " Hashmap indices present in the data but not slotted by emitp arguments are\n" - " output concatenated with \":\".\n" - "\n" - " With >, >>, or |, the data do not become part of the output record stream but\n" - " are instead redirected.\n" - "\n" - " The > and >> are for write and append, as in the shell, but (as with awk) the\n" - " file-overwrite for > is on first write, not per record. The | is for piping to\n" - " a process which will process the data. There will be one open file for each\n" - " distinct file name (for > and >>) or one subordinate process for each distinct\n" - " value of the piped-to command (for |). Output-formatting flags are taken from\n" - " the main command line.\n" - "\n" - " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" - " etc., to control the format of the output if the output is redirected. See also %s -h.\n" - "\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums'\n" - " Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > \"tap-\".$a.$b.\".dat\", @sums'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > \"mytap.dat\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> \"mytap.dat\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | \"gzip > mytap.dat.gz\", @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, \"index1\", \"index2\"'\n" - " Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | \"grep somepattern\", @*, \"index1\", \"index2\"'\n" - "\n" - " Please see http://johnkerl.org/miller/doc for more information.\n", - MLR_GLOBALS.bargv0); -} - -static void mlr_dsl_end_keyword_usage(FILE* ostream) { - fprintf(ostream, - "end: defines a block of statements to be executed after input records\n" - "are ingested. The body statements must be wrapped in curly braces.\n" - "Example: 'end { emit @count }'\n" - "Example: 'end { eprint \"Final count is \" . @count }'\n" - ); -} - -static void mlr_dsl_eprint_keyword_usage(FILE* ostream) { - fprintf(ostream, - "eprint: prints expression immediately to stderr.\n" - " Example: mlr --from f.dat put -q 'eprint \"The sum of x and y is \".($x+$y)'\n" - " Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . \" => \" . v }'\n" - " Example: mlr --from f.dat put '(NR %% 1000 == 0) { eprint \"Checkpoint \".NR}'\n"); -} - -static void mlr_dsl_eprintn_keyword_usage(FILE* ostream) { - fprintf(ostream, - "eprintn: prints expression immediately to stderr, without trailing newline.\n" - " Example: mlr --from f.dat put -q 'eprintn \"The sum of x and y is \".($x+$y); eprint \"\"'\n"); -} - -static void mlr_dsl_false_keyword_usage(FILE* ostream) { - fprintf(ostream, - "false: the boolean literal value.\n" - ); -} - -static void mlr_dsl_filter_keyword_usage(FILE* ostream) { - fprintf(ostream, - "filter: includes/excludes the record in the output record stream.\n" - "\n" - " Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)'\n" - "\n" - " Instead of put with 'filter false' you can simply use put -q. The following\n" - " uses the input record to accumulate data but only prints the running sum\n" - " without printing the input record:\n" - "\n" - " Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum'\n"); -} - -static void mlr_dsl_float_keyword_usage(FILE* ostream) { - fprintf(ostream, - "float: declares a floating-point local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment: 'float x = 0' is an error.\n" - ); -} - -static void mlr_dsl_for_keyword_usage(FILE* ostream) { - fprintf(ostream, - "for: defines a for-loop using one of three styles. The body statements must\n" - "be wrapped in curly braces.\n" - "For-loop over stream record:\n" - " Example: 'for (k, v in $*) { ... }'\n" - "For-loop over out-of-stream variables:\n" - " Example: 'for (k, v in @counts) { ... }'\n" - " Example: 'for ((k1, k2), v in @counts) { ... }'\n" - " Example: 'for ((k1, k2, k3), v in @*) { ... }'\n" - "C-style for-loop:\n" - " Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }'\n" - ); -} - -static void mlr_dsl_func_keyword_usage(FILE* ostream) { - fprintf(ostream, - "func: used for defining a user-defined function.\n" - "Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)'\n" - ); -} - -static void mlr_dsl_if_keyword_usage(FILE* ostream) { - fprintf(ostream, - "if: starts an if/elif/elif chain. The body statements must be wrapped\n" - "in curly braces.\n" - ); -} - -static void mlr_dsl_in_keyword_usage(FILE* ostream) { - fprintf(ostream, "in: used in for-loops over stream records or out-of-stream variables.\n"); -} - -static void mlr_dsl_int_keyword_usage(FILE* ostream) { - fprintf(ostream, - "int: declares an integer local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment: 'int x = 0.0' is an error.\n" - ); -} - -static void mlr_dsl_map_keyword_usage(FILE* ostream) { - fprintf(ostream, - "map: declares an map-valued local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is\n" - "always OK. map b = a is OK or not depending on whether a is a map.\n" - ); -} - -static void mlr_dsl_num_keyword_usage(FILE* ostream) { - fprintf(ostream, - "num: declares an int/float local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment: 'num b = true' is an error.\n" - ); -} - -static void mlr_dsl_print_keyword_usage(FILE* ostream) { - fprintf(ostream, - "print: prints expression immediately to stdout.\n" - " Example: mlr --from f.dat put -q 'print \"The sum of x and y is \".($x+$y)'\n" - " Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . \" => \" . v }'\n" - " Example: mlr --from f.dat put '(NR %% 1000 == 0) { print > stderr, \"Checkpoint \".NR}'\n"); -} - -static void mlr_dsl_printn_keyword_usage(FILE* ostream) { - fprintf(ostream, - "printn: prints expression immediately to stdout, without trailing newline.\n" - " Example: mlr --from f.dat put -q 'printn \".\"; end { print \"\" }'\n"); -} - -static void mlr_dsl_return_keyword_usage(FILE* ostream) { - fprintf(ostream, - "return: specifies the return value from a user-defined function.\n" - "Omitted return statements (including via if-branches) result in an absent-null\n" - "return value, which in turns results in a skipped assignment to an LHS.\n" - ); -} - -static void mlr_dsl_stderr_keyword_usage(FILE* ostream) { - fprintf(ostream, - "stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename\n" - " to print to standard error.\n"); -} - -static void mlr_dsl_stdout_keyword_usage(FILE* ostream) { - fprintf(ostream, - "stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename\n" - " to print to standard output.\n"); -} - -static void mlr_dsl_str_keyword_usage(FILE* ostream) { - fprintf(ostream, - "str: declares a string local variable in the current curly-braced scope.\n" - "Type-checking happens at assignment.\n" - ); -} - -static void mlr_dsl_subr_keyword_usage(FILE* ostream) { - fprintf(ostream, - "subr: used for defining a subroutine.\n" - "Example: 'subr s(k,v) { print k . \" is \" . v} call s(\"a\", $a)'\n" - ); -} - -static void mlr_dsl_tee_keyword_usage(FILE* ostream) { - fprintf(ostream, - "tee: prints the current record to specified file.\n" - " This is an immediate print to the specified file (except for pprint format\n" - " which of course waits until the end of the input stream to format all output).\n" - "\n" - " The > and >> are for write and append, as in the shell, but (as with awk) the\n" - " file-overwrite for > is on first write, not per record. The | is for piping to\n" - " a process which will process the data. There will be one open file for each\n" - " distinct file name (for > and >>) or one subordinate process for each distinct\n" - " value of the piped-to command (for |). Output-formatting flags are taken from\n" - " the main command line.\n" - "\n" - " You can use any of the output-format command-line flags, e.g. --ocsv, --ofs,\n" - " etc., to control the format of the output. See also %s -h.\n" - "\n" - " emit with redirect and tee with redirect are identical, except tee can only\n" - " output $*.\n" - "\n" - " Example: mlr --from f.dat put 'tee > \"/tmp/data-\".$a, $*'\n" - " Example: mlr --from f.dat put 'tee >> \"/tmp/data-\".$a.$b, $*'\n" - " Example: mlr --from f.dat put 'tee > stderr, $*'\n" - " Example: mlr --from f.dat put -q 'tee | \"tr \[a-z\\] \[A-Z\\]\", $*'\n" - " Example: mlr --from f.dat put -q 'tee | \"tr \[a-z\\] \[A-Z\\] > /tmp/data-\".$a, $*'\n" - " Example: mlr --from f.dat put -q 'tee | \"gzip > /tmp/data-\".$a.\".gz\", $*'\n" - " Example: mlr --from f.dat put -q --ojson 'tee | \"gzip > /tmp/data-\".$a.\".gz\", $*'\n", - MLR_GLOBALS.bargv0); -} - -static void mlr_dsl_true_keyword_usage(FILE* ostream) { - fprintf(ostream, - "true: the boolean literal value.\n" - ); -} - -static void mlr_dsl_unset_keyword_usage(FILE* ostream) { - fprintf(ostream, - "unset: clears field(s) from the current record, or an out-of-stream or local variable.\n" - "\n" - " Example: mlr --from f.dat put 'unset $x'\n" - " Example: mlr --from f.dat put 'unset $*'\n" - " Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ \"a.*\") { unset $[k] } }'\n" - " Example: mlr --from f.dat put '...; unset @sums'\n" - " Example: mlr --from f.dat put '...; unset @sums[\"green\"]'\n" - " Example: mlr --from f.dat put '...; unset @*'\n"); -} - -static void mlr_dsl_var_keyword_usage(FILE* ostream) { - fprintf(ostream, - "var: declares an untyped local variable in the current curly-braced scope.\n" - "Examples: 'var a=1', 'var xyz=\"\"'\n" - ); -} - -static void mlr_dsl_while_keyword_usage(FILE* ostream) { - fprintf(ostream, - "while: introduces a while loop, or with \"do\", introduces a do-while loop.\n" - "The body statements must be wrapped in curly braces.\n" - ); -} - -static void mlr_dsl_ENV_keyword_usage(FILE *ostream) { - fprintf(ostream, - "ENV: access to environment variables by name, e.g. '$home = ENV[\"HOME\"]'\n" - ); -} - -static void mlr_dsl_FILENAME_keyword_usage(FILE *ostream) { - fprintf(ostream, - "FILENAME: evaluates to the name of the current file being processed.\n" - ); -} - -static void mlr_dsl_FILENUM_keyword_usage(FILE *ostream) { - fprintf(ostream, - "FILENUM: evaluates to the number of the current file being processed,\n" - "starting with 1.\n" - ); -} - -static void mlr_dsl_FNR_keyword_usage(FILE *ostream) { - fprintf(ostream, - "FNR: evaluates to the number of the current record within the current file\n" - "being processed, starting with 1. Resets at the start of each file.\n" - ); -} - -static void mlr_dsl_IFS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "IFS: evaluates to the input field separator from the command line.\n" - ); -} - -static void mlr_dsl_IPS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "IPS: evaluates to the input pair separator from the command line.\n" - ); -} - -static void mlr_dsl_IRS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "IRS: evaluates to the input record separator from the command line,\n" - "or to LF or CRLF from the input data if in autodetect mode (which is\n" - "the default).\n" - ); -} - -static void mlr_dsl_M_E_keyword_usage(FILE *ostream) { - fprintf(ostream, - "M_E: the mathematical constant e.\n" - ); -} - -static void mlr_dsl_M_PI_keyword_usage(FILE *ostream) { - fprintf(ostream, - "M_PI: the mathematical constant pi.\n" - ); -} - -static void mlr_dsl_NF_keyword_usage(FILE *ostream) { - fprintf(ostream, - "NF: evaluates to the number of fields in the current record.\n" - ); -} - -static void mlr_dsl_NR_keyword_usage(FILE *ostream) { - fprintf(ostream, - "NR: evaluates to the number of the current record over all files\n" - "being processed, starting with 1. Does not reset at the start of each file.\n" - ); -} - -static void mlr_dsl_OFS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "OFS: evaluates to the output field separator from the command line.\n" - ); -} - -static void mlr_dsl_OPS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "OPS: evaluates to the output pair separator from the command line.\n" - ); -} - -static void mlr_dsl_ORS_keyword_usage(FILE *ostream) { - fprintf(ostream, - "ORS: evaluates to the output record separator from the command line,\n" - "or to LF or CRLF from the input data if in autodetect mode (which is\n" - "the default).\n" - ); -} - diff --git a/c/dsl/mlr_dsl_cst_loop_control_statements.c b/c/dsl/mlr_dsl_cst_loop_control_statements.c deleted file mode 100644 index 7efdf036c..000000000 --- a/c/dsl/mlr_dsl_cst_loop_control_statements.c +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -static mlr_dsl_cst_statement_freer_t free_break; -static mlr_dsl_cst_statement_handler_t handle_break; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_break(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - return mlr_dsl_cst_statement_valloc( - pnode, - handle_break, - free_break, - NULL); -} - -static void free_break(mlr_dsl_cst_statement_t* pstatement, context_t* _) { -} - -// ---------------------------------------------------------------- -static void handle_break( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - loop_stack_set(pvars->ploop_stack, LOOP_BROKEN); -} - -// ================================================================ -static mlr_dsl_cst_statement_handler_t handle_continue; -static mlr_dsl_cst_statement_freer_t free_continue; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_continue(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - return mlr_dsl_cst_statement_valloc( - pnode, - handle_continue, - free_continue, - NULL); -} - -// ---------------------------------------------------------------- -static void handle_continue( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - loop_stack_set(pvars->ploop_stack, LOOP_CONTINUED); -} - -static void free_continue(mlr_dsl_cst_statement_t* pstatement, context_t* _) { -} diff --git a/c/dsl/mlr_dsl_cst_map_assignment_statements.c b/c/dsl/mlr_dsl_cst_map_assignment_statements.c deleted file mode 100644 index 7f667f983..000000000 --- a/c/dsl/mlr_dsl_cst_map_assignment_statements.c +++ /dev/null @@ -1,544 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "keylist_evaluators.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -typedef struct _full_srec_assignment_state_t { - rxval_evaluator_t* prhs_xevaluator; -} full_srec_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_full_srec_assignment_nop; -static mlr_dsl_cst_statement_handler_t handle_full_srec_assignment; -static mlr_dsl_cst_statement_freer_t free_full_srec_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_full_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - full_srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( - full_srec_assignment_state_t)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_FULL_SREC); - - mlr_dsl_cst_statement_handler_t* phandler = handle_full_srec_assignment; - if (prhs_node->type == MD_AST_NODE_TYPE_FULL_SREC) { - // '$* = $*' is a syntactically acceptable no-op - pstate->prhs_xevaluator = NULL; - phandler = handle_full_srec_assignment_nop; - } else { - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - phandler = handle_full_srec_assignment; - } - - return mlr_dsl_cst_statement_valloc( - pnode, - phandler, - free_full_srec_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_full_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - full_srec_assignment_state_t* pstate = pstatement->pvstate; - - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_full_srec_assignment_nop( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ -} - -// ---------------------------------------------------------------- -static void handle_full_srec_assignment( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - full_srec_assignment_state_t* pstate = pstatement->pvstate; - - lrec_t* poutrec = lrec_unbacked_alloc(); // pinrec might be part of the RHS. - lhmsmv_t* pout_typed_overlay = lhmsmv_alloc(); - - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal) { - for (mlhmmv_level_entry_t* pe = boxed_xval.xval.pnext_level->phead; pe != NULL; pe = pe->pnext) { - mv_t* pkey = &pe->level_key; - mlhmmv_xvalue_t* pval = &pe->level_xvalue; - - if (pval->is_terminal) { // xxx else collapse-down using json separator? - char* skey = mv_alloc_format_val(pkey); - // xxx if we're going to transfer here *and* free below, this needs a nullptr poke - // at the copy-from site - //mv_t val = boxed_xval.is_ephemeral ? pval->terminal_mlrval : mv_copy(&pval->terminal_mlrval); - mv_t val = mv_copy(&pval->terminal_mlrval); - - // Write typed mlrval output to the typed overlay rather than into the lrec - // (which holds only string values). - // - // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the - // input had "x"=>"abc","y"=>"def" but a previous statement had set "y"=>7.4 and - // "z"=>"ghi", then an expression right-hand side referring to $y would get the - // floating-point value 7.4. So we don't need to lrec_put the value here, and - // moreover should not for two reasons: (1) there is a performance hit of doing - // throwaway number-to-string formatting -- it's better to do it once at the - // end; (2) having the string values doubly owned by the typed overlay and the - // lrec would result in double frees, or awkward bookkeeping. However, the NR - // variable evaluator reads prec->field_count, so we need to put something here. - // And putting something statically allocated minimizes copying/freeing. - lhmsmv_put(pout_typed_overlay, mlr_strdup_or_die(skey), &val, - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - lrec_put(poutrec, skey, "bug", FREE_ENTRY_KEY); - } - } - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } - } else { - mlhmmv_xvalue_free(&boxed_xval.xval); - } - lrec_free(pvars->pinrec); - lhmsmv_free(pvars->ptyped_overlay); - pvars->pinrec = poutrec; - pvars->ptyped_overlay = pout_typed_overlay; -} - -// ================================================================ -typedef struct _local_variable_definition_state_t { - char* lhs_variable_name; - int lhs_frame_relative_index; - int lhs_type_mask; - rxval_evaluator_t* prhs_xevaluator; -} local_variable_definition_state_t; - -static mlr_dsl_cst_statement_handler_t handle_local_variable_definition_from_xval; -static mlr_dsl_cst_statement_freer_t free_local_variable_definition; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_local_variable_definition( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - int type_mask) -{ - local_variable_definition_state_t* pstate = mlr_malloc_or_die( - sizeof(local_variable_definition_state_t)); - - pstate->lhs_variable_name = NULL; - pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; - pstate->lhs_type_mask = 0; - pstate->prhs_xevaluator = NULL; - - mlr_dsl_ast_node_t* pname_node = pnode->pchildren->phead->pvvalue; - pstate->lhs_variable_name = pname_node->text; - MLR_INTERNAL_CODING_ERROR_IF(pname_node->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->lhs_frame_relative_index = pname_node->vardef_frame_relative_index; - pstate->lhs_type_mask = type_mask; - - mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstatement_handler = handle_local_variable_definition_from_xval; - - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_local_variable_definition, - pstate); -} - -// ---------------------------------------------------------------- -static void free_local_variable_definition(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - local_variable_definition_state_t* pstate = pstatement->pvstate; - - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_local_variable_definition_from_xval( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - local_variable_definition_state_t* pstate = pstatement->pvstate; - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - if (boxed_xval.is_ephemeral) { - local_stack_frame_define_extended(pframe, - pstate->lhs_variable_name, pstate->lhs_frame_relative_index, pstate->lhs_type_mask, - boxed_xval.xval); - } else { - local_stack_frame_define_extended(pframe, - pstate->lhs_variable_name, pstate->lhs_frame_relative_index, pstate->lhs_type_mask, - mlhmmv_xvalue_copy(&boxed_xval.xval)); - } -} - -// ================================================================ -typedef struct _nonindexed_local_variable_assignment_state_t { - char* lhs_variable_name; // For error messages only: stack-index is computed by stack-allocator: - int lhs_frame_relative_index; - rxval_evaluator_t* prhs_xevaluator; -} nonindexed_local_variable_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_nonindexed_local_variable_assignment_from_xval; -static mlr_dsl_cst_statement_freer_t free_nonindexed_local_variable_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_nonindexed_local_variable_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - nonindexed_local_variable_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( - nonindexed_local_variable_assignment_state_t)); - - pstate->lhs_variable_name = NULL; - pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; - pstate->prhs_xevaluator = NULL; - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren != NULL); - - pstate->lhs_variable_name = plhs_node->text; - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->lhs_frame_relative_index = plhs_node->vardef_frame_relative_index; - - mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; - - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstatement_handler = handle_nonindexed_local_variable_assignment_from_xval; - - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_nonindexed_local_variable_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_nonindexed_local_variable_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - nonindexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; - - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_nonindexed_local_variable_assignment_from_xval( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - nonindexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; - - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - if (boxed_xval.is_ephemeral) { - local_stack_frame_assign_extended_nonindexed(pframe, pstate->lhs_frame_relative_index, - boxed_xval.xval); - } else { - local_stack_frame_assign_extended_nonindexed(pframe, pstate->lhs_frame_relative_index, - mlhmmv_xvalue_copy(&boxed_xval.xval)); - } - } -} - -// ================================================================ -typedef struct _indexed_local_variable_assignment_state_t { - char* lhs_variable_name; // For error messages only: stack-index is computed by stack-allocator: - int lhs_frame_relative_index; - sllv_t* plhs_keylist_evaluators; - rxval_evaluator_t* prhs_xevaluator; -} indexed_local_variable_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_indexed_local_variable_assignment_from_xval; -static mlr_dsl_cst_statement_freer_t free_indexed_local_variable_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_indexed_local_variable_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - indexed_local_variable_assignment_state_t* pstate = mlr_malloc_or_die(sizeof( - indexed_local_variable_assignment_state_t)); - - pstate->lhs_variable_name = NULL; - pstate->lhs_frame_relative_index = MD_UNUSED_INDEX; - pstate->prhs_xevaluator = NULL; - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE); - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren == NULL); - - pstate->lhs_variable_name = plhs_node->text; - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->lhs_frame_relative_index = plhs_node->vardef_frame_relative_index; - - pstate->plhs_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( - plhs_node, pcst->pfmgr, type_inferencing, context_flags); - - mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; - - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstatement_handler = handle_indexed_local_variable_assignment_from_xval; - - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_indexed_local_variable_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_indexed_local_variable_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - indexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; - - for (sllve_t* pe = pstate->plhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* pev = pe->pvvalue; - pev->pfree_func(pev); - } - sllv_free(pstate->plhs_keylist_evaluators); - - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_indexed_local_variable_assignment_from_xval( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - indexed_local_variable_assignment_state_t* pstate = pstatement->pvstate; - - int lhs_keys_all_non_null_or_error; - sllmv_t* pmvkeys = evaluate_list(pstate->plhs_keylist_evaluators, pvars, &lhs_keys_all_non_null_or_error); - if (lhs_keys_all_non_null_or_error) { - - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - if (boxed_xval.is_ephemeral) { - local_stack_frame_assign_extended_indexed(pframe, pstate->lhs_frame_relative_index, - pmvkeys, boxed_xval.xval); - } else { - local_stack_frame_assign_extended_indexed(pframe, pstate->lhs_frame_relative_index, - pmvkeys, mlhmmv_xvalue_copy(&boxed_xval.xval)); - } - } - - } - sllmv_free(pmvkeys); - -} - -// ================================================================ -typedef struct _oosvar_assignment_state_t { - sllv_t* plhs_keylist_evaluators; - rxval_evaluator_t* prhs_xevaluator; -} oosvar_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_oosvar_assignment_from_xval; -static mlr_dsl_cst_statement_freer_t free_oosvar_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_oosvar_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - oosvar_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(oosvar_assignment_state_t)); - - pstate->plhs_keylist_evaluators = NULL; - pstate->prhs_xevaluator = NULL; - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_OOSVAR_KEYLIST); - - pstate->plhs_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( - plhs_node, pcst->pfmgr, type_inferencing, context_flags); - - mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; - - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstatement_handler = handle_oosvar_assignment_from_xval; - - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_oosvar_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_oosvar_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - oosvar_assignment_state_t* pstate = pstatement->pvstate; - - for (sllve_t* pe = pstate->plhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* pev = pe->pvvalue; - pev->pfree_func(pev); - } - sllv_free(pstate->plhs_keylist_evaluators); - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_oosvar_assignment_from_xval( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - oosvar_assignment_state_t* pstate = pstatement->pvstate; - - int lhs_all_non_null_or_error = TRUE; - sllmv_t* plhskeys = evaluate_list(pstate->plhs_keylist_evaluators, pvars, - &lhs_all_non_null_or_error); - - if (lhs_all_non_null_or_error) { - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - if (!boxed_xval.xval.is_terminal || mv_is_present(&boxed_xval.xval.terminal_mlrval)) { - if (boxed_xval.is_ephemeral) { - mlhmmv_level_put_xvalue(pvars->poosvars->root_xvalue.pnext_level, plhskeys->phead, &boxed_xval.xval); - } else { - mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval); - mlhmmv_level_put_xvalue(pvars->poosvars->root_xvalue.pnext_level, plhskeys->phead, ©_xval); - } - } - } - - sllmv_free(plhskeys); -} - -// ================================================================ -typedef struct _full_oosvar_assignment_state_t { - rxval_evaluator_t* prhs_xevaluator; -} full_oosvar_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_full_oosvar_assignment_from_xval; -static mlr_dsl_cst_statement_handler_t handle_full_oosvar_assignment_nop; -static mlr_dsl_cst_statement_freer_t free_full_oosvar_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_full_oosvar_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - full_oosvar_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(full_oosvar_assignment_state_t)); - - pstate->prhs_xevaluator = NULL; - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - MLR_INTERNAL_CODING_ERROR_UNLESS(plhs_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR); - - mlr_dsl_cst_statement_handler_t* pstatement_handler = NULL; - if (prhs_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { - pstatement_handler = handle_full_oosvar_assignment_nop; - } else { - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - prhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstatement_handler = handle_full_oosvar_assignment_from_xval; - } - - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_full_oosvar_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_full_oosvar_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - full_oosvar_assignment_state_t* pstate = pstatement->pvstate; - - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_full_oosvar_assignment_from_xval( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - full_oosvar_assignment_state_t* pstate = pstatement->pvstate; - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - if (boxed_xval.xval.is_terminal) { - mlhmmv_root_clear(pvars->poosvars); - mlhmmv_xvalue_free(&boxed_xval.xval); - } else { - if (boxed_xval.is_ephemeral) { - mlhmmv_level_free(pvars->poosvars->root_xvalue.pnext_level); - pvars->poosvars->root_xvalue.pnext_level = boxed_xval.xval.pnext_level; - } else { - mlhmmv_xvalue_t copy = mlhmmv_xvalue_copy(&boxed_xval.xval); - mlhmmv_root_clear(pvars->poosvars); - for (mlhmmv_level_entry_t* pe = copy.pnext_level->phead; pe != NULL; pe = pe->pnext) { - // xxx comment: value transfer not copy. - mlhmmv_level_put_xvalue_singly_keyed(pvars->poosvars->root_xvalue.pnext_level, &pe->level_key, &pe->level_xvalue); - pe->level_xvalue.terminal_mlrval = mv_absent(); - pe->level_xvalue.pnext_level = NULL; - pe->level_xvalue.is_terminal = TRUE; - } - mlhmmv_xvalue_free(©); - } - } -} - -// ---------------------------------------------------------------- -// @* = @* -static void handle_full_oosvar_assignment_nop( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ -} diff --git a/c/dsl/mlr_dsl_cst_output_statements.c b/c/dsl/mlr_dsl_cst_output_statements.c deleted file mode 100644 index 3e06f20bf..000000000 --- a/c/dsl/mlr_dsl_cst_output_statements.c +++ /dev/null @@ -1,1466 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "keylist_evaluators.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ---------------------------------------------------------------- -static file_output_mode_t file_output_mode_from_ast_node_type(mlr_dsl_ast_node_type_t mlr_dsl_ast_node_type) { - switch(mlr_dsl_ast_node_type) { - case MD_AST_NODE_TYPE_FILE_APPEND: - return MODE_APPEND; - case MD_AST_NODE_TYPE_PIPE: - return MODE_PIPE; - case MD_AST_NODE_TYPE_FILE_WRITE: - return MODE_WRITE; - default: - MLR_INTERNAL_CODING_ERROR(); - return MODE_WRITE; // not reached - } -} - -// ================================================================ -typedef struct _print_state_t { - rxval_evaluator_t* prhs_xevaluator; - FILE* stdfp; - file_output_mode_t file_output_mode; - rval_evaluator_t* poutput_filename_evaluator; - int flush_every_record; - multi_out_t* pmulti_out; - char* print_terminator; -} print_state_t; - -static mlr_dsl_cst_statement_handler_t handle_print; -static mlr_dsl_cst_statement_freer_t free_print; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_print( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - char* print_terminator) -{ - print_state_t* pstate = mlr_malloc_or_die(sizeof(print_state_t)); - - pstate->prhs_xevaluator = NULL; - pstate->stdfp = NULL; - pstate->poutput_filename_evaluator = NULL; - pstate->pmulti_out = NULL; - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - mlr_dsl_ast_node_t* pvalue_node = pnode->pchildren->phead->pvvalue; - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast(pvalue_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->print_terminator = print_terminator; - - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; - if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) { - pstate->stdfp = stdout; - } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - pstate->stdfp = stderr; - } else { - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - pstate->pmulti_out = multi_out_alloc(); - } - pstate->flush_every_record = pcst->flush_every_record; - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_print, - free_print, - pstate); -} - -// ---------------------------------------------------------------- -static void free_print(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - print_state_t* pstate = pstatement->pvstate; - - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - - if (pstate->pmulti_out != NULL) { - multi_out_close(pstate->pmulti_out); - multi_out_free(pstate->pmulti_out); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_print( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - print_state_t* pstate = pstatement->pvstate; - - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t bxval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - - char sfree_flags = NO_FREE; - char* sval = "{is-a-map}"; - - if (bxval.xval.is_terminal) { - sval = mv_alloc_format_val(&bxval.xval.terminal_mlrval); - sfree_flags = FREE_ENTRY_VALUE; - } - - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - if (poutput_filename_evaluator == NULL) { - fprintf(pstate->stdfp, "%s%s", sval, pstate->print_terminator); - if (pstate->flush_every_record) - fflush(pstate->stdfp); - } else { - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - - char fn_free_flags; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - - FILE* outfp = multi_out_get(pstate->pmulti_out, filename, pstate->file_output_mode); - fprintf(outfp, "%s%s", sval, pstate->print_terminator); - if (pstate->flush_every_record) - fflush(outfp); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); - } - - if (sfree_flags) { - free(sval); - } - if (bxval.is_ephemeral) { - mlhmmv_xvalue_free(&bxval.xval); - } -} - -// ================================================================ -typedef struct _tee_state_t { - FILE* stdfp; - file_output_mode_t file_output_mode; - rval_evaluator_t* poutput_filename_evaluator; - int flush_every_record; - lrec_writer_t* psingle_lrec_writer; - multi_lrec_writer_t* pmulti_lrec_writer; -} tee_state_t; - -static mlr_dsl_cst_statement_handler_t handle_tee_to_stdfp; -static mlr_dsl_cst_statement_handler_t handle_tee_to_file; -static mlr_dsl_cst_statement_freer_t free_tee; - -static lrec_t* handle_tee_common( - tee_state_t* pstate, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_tee(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - tee_state_t* pstate = mlr_malloc_or_die(sizeof(tee_state_t)); - - pstate->stdfp = NULL; - pstate->poutput_filename_evaluator = NULL; - pstate->psingle_lrec_writer = NULL; - pstate->pmulti_lrec_writer = NULL; - - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; - - pstate->flush_every_record = pcst->flush_every_record; - if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_tee_to_stdfp, - free_tee, - pstate); - - } else { - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_tee_to_file, - free_tee, - pstate); - } -} - -// ---------------------------------------------------------------- -static void free_tee(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - tee_state_t* pstate = pstatement->pvstate; - - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - - if (pstate->psingle_lrec_writer != NULL) { - pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); - } - - if (pstate->pmulti_lrec_writer != NULL) { - multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); - multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_tee_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - tee_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->psingle_lrec_writer == NULL) - pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); - - lrec_t* pcopy = handle_tee_common(pstate, pvars, pcst_outputs); - - // The writer frees the lrec - pstate->psingle_lrec_writer->pprocess_func(pstate->psingle_lrec_writer->pvstate, - pstate->stdfp, pcopy, pvars->pctx); - if (pstate->flush_every_record) - fflush(pstate->stdfp); -} - -// ---------------------------------------------------------------- -static void handle_tee_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - tee_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->pmulti_lrec_writer == NULL) - pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); - - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - - lrec_t* pcopy = handle_tee_common(pstate, pvars, pcst_outputs); - - char fn_free_flags = 0; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - // The writer frees the lrec - multi_lrec_writer_output_srec(pstate->pmulti_lrec_writer, pcopy, filename, - pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); -} - -// ---------------------------------------------------------------- -static lrec_t* handle_tee_common( - tee_state_t* pstate, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - lrec_t* pcopy = lrec_copy(pvars->pinrec); - - // Write the output fields from the typed overlay back to the lrec. - for (lhmsmve_t* pe = pvars->ptyped_overlay->phead; pe != NULL; pe = pe->pnext) { - char* output_field_name = pe->key; - mv_t* pval = &pe->value; - - // Ownership transfer from mv_t to lrec. - if (pval->type == MT_STRING || pval->type == MT_EMPTY) { - lrec_put(pcopy, output_field_name, mlr_strdup_or_die(pval->u.strv), FREE_ENTRY_VALUE); - } else { - char free_flags = NO_FREE; - char* string = mv_format_val(pval, &free_flags); - lrec_put(pcopy, output_field_name, string, free_flags); - } - } - return pcopy; -} - -// ================================================================ -// Most statements have one item, except emit and emitf. -struct _emitf_item_t; -typedef void emitf_item_handler_t( - struct _emitf_item_t* pemitf_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -typedef struct _emitf_item_t { - char* srec_field_name; - rval_evaluator_t* parg_evaluator; -} emitf_item_t; - -static emitf_item_t* alloc_emitf_item(char* srec_field_name, rval_evaluator_t* parg_evaluator); -static void free_emitf_item(emitf_item_t* pemitf_item); - -// ---------------------------------------------------------------- -typedef struct _emitf_state_t { - FILE* stdfp; - file_output_mode_t file_output_mode; - rval_evaluator_t* poutput_filename_evaluator; - int flush_every_record; - lrec_writer_t* psingle_lrec_writer; - multi_lrec_writer_t* pmulti_lrec_writer; - sllv_t* pemitf_items; -} emitf_state_t; - -static mlr_dsl_cst_statement_handler_t handle_emitf; -static mlr_dsl_cst_statement_freer_t free_emitf; - -static void handle_emitf( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_emitf_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_emitf_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_emitf_common( - emitf_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs); - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_emitf(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - emitf_state_t* pstate = mlr_malloc_or_die(sizeof(emitf_state_t)); - - pstate->stdfp = NULL; - pstate->poutput_filename_evaluator = NULL; - pstate->psingle_lrec_writer = NULL; - pstate->pmulti_lrec_writer = NULL; - pstate->pemitf_items = NULL; - - mlr_dsl_ast_node_t* pnamesnode = pnode->pchildren->phead->pvvalue; - - // Loop over oosvar names to emit in e.g. 'emitf @a, @b, @c'. - pstate->pemitf_items = sllv_alloc(); - for (sllve_t* pe = pnamesnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pwalker = pe->pvvalue; - - char* name = NULL; - switch(pwalker->type) { - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: - name = ((mlr_dsl_ast_node_t*)(pwalker->pchildren->phead->pvvalue))->text; - break; - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: - name = pwalker->text; - break; - case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: - name = pwalker->text; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - sllv_append(pstate->pemitf_items, - alloc_emitf_item( - name, - rval_evaluator_alloc_from_ast(pwalker, pcst->pfmgr, type_inferencing, context_flags))); - } - - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL - ? NULL - : poutput_node->pchildren->phead == NULL - ? NULL - : poutput_node->pchildren->phead->pvvalue; - mlr_dsl_cst_statement_handler_t* phandler = NULL; - if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { - phandler = handle_emitf; - } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; - phandler = handle_emitf_to_stdfp; - } else { - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - phandler = handle_emitf_to_file; - } - pstate->flush_every_record = pcst->flush_every_record; - - return mlr_dsl_cst_statement_valloc( - pnode, - phandler, - free_emitf, - pstate); -} - -static emitf_item_t* alloc_emitf_item(char* srec_field_name, rval_evaluator_t* parg_evaluator) { - emitf_item_t* pemitf_item = mlr_malloc_or_die(sizeof(emitf_item_t)); - pemitf_item->srec_field_name = srec_field_name; - pemitf_item->parg_evaluator = parg_evaluator; - return pemitf_item; -} - -static void free_emitf_item(emitf_item_t* pemitf_item) { - pemitf_item->parg_evaluator->pfree_func(pemitf_item->parg_evaluator); - free(pemitf_item); -} - -static void free_emitf(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - emitf_state_t* pstate = pstatement->pvstate; - - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - - if (pstate->psingle_lrec_writer != NULL) { - pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); - } - - if (pstate->pmulti_lrec_writer != NULL) { - multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); - multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); - } - - if (pstate->pemitf_items != NULL) { - for (sllve_t* pe = pstate->pemitf_items->phead; pe != NULL; pe = pe->pnext) - free_emitf_item(pe->pvvalue); - sllv_free(pstate->pemitf_items); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_emitf( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emitf_state_t* pstate = pstatement->pvstate; - handle_emitf_common(pstate, pvars, pcst_outputs->poutrecs); -} - -static void handle_emitf_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emitf_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->psingle_lrec_writer == NULL) - pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - - handle_emitf_common(pstate, pvars, poutrecs); - - lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); - if (pstate->flush_every_record) - fflush(pstate->stdfp); - sllv_free(poutrecs); -} - -static void handle_emitf_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emitf_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->pmulti_lrec_writer == NULL) - pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); - - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - - sllv_t* poutrecs = sllv_alloc(); - - handle_emitf_common(pstate, pvars, poutrecs); - - char fn_free_flags = 0; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, - pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); - - sllv_free(poutrecs); - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); -} - -static void handle_emitf_common( - emitf_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs) -{ - lrec_t* prec_to_emit = lrec_unbacked_alloc(); - for (sllve_t* pf = pstate->pemitf_items->phead; pf != NULL; pf = pf->pnext) { - emitf_item_t* pemitf_item = pf->pvvalue; - char* srec_field_name = pemitf_item->srec_field_name; - rval_evaluator_t* parg_evaluator = pemitf_item->parg_evaluator; - - // This is overkill ... the grammar allows only for oosvar names as args to emit. So we could bypass - // that and just hashmap-get keyed by srec_field_name here. - mv_t val = parg_evaluator->pprocess_func(parg_evaluator->pvstate, pvars); - - if (val.type == MT_STRING) { - // Ownership transfer from (newly created) mlrval to (newly created) lrec. - lrec_put(prec_to_emit, srec_field_name, val.u.strv, val.free_flags); - } else { - char free_flags = NO_FREE; - char* string = mv_format_val(&val, &free_flags); - lrec_put(prec_to_emit, srec_field_name, string, free_flags); - } - - } - sllv_append(poutrecs, prec_to_emit); -} - -// ================================================================ -struct _emit_state_t; // Forward reference -typedef void record_emitter_t( - struct _emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); - -typedef struct _emit_state_t { - rval_evaluator_t* poutput_filename_evaluator; - FILE* stdfp; - file_output_mode_t file_output_mode; - sllv_t* pemit_namelist_evaluators; - int do_full_prefixing; - - record_emitter_t* precord_emitter; - - // For map literals - rxval_evaluator_t* prhs_xevaluator; - - // For local variables - char* localvar_name; - int localvar_frame_relative_index; - - // For oosvars and localvars: indices ["a", 1, $2] in 'for (k,v in @a[1][$2]) {...}'. - sllv_t* pemit_keylist_evaluators; - - lrec_writer_t* psingle_lrec_writer; // emit/tee to stdout/stderr - multi_lrec_writer_t* pmulti_lrec_writer; // emit-to-file - - int flush_every_record; -} emit_state_t; - -static mlr_dsl_cst_statement_handler_t handle_emit; -static mlr_dsl_cst_statement_handler_t handle_emit_to_stdfp; -static mlr_dsl_cst_statement_handler_t handle_emit_to_file; - -static void record_emitter_from_oosvar( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); - -static void record_emitter_from_local_variable( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); - -static void record_emitter_from_full_srec( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); - -static void record_emitter_from_ephemeral_map( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); - -static mlr_dsl_cst_statement_handler_t handle_emit_all; -static mlr_dsl_cst_statement_handler_t handle_emit_all_to_stdfp; -static mlr_dsl_cst_statement_handler_t handle_emit_all_to_file; - -static mlr_dsl_cst_statement_freer_t free_emit; - -// ---------------------------------------------------------------- -// $ mlr -n put -v 'emit @a[2][3], "x", "y", "z"' -// AST ROOT: -// text="list", type=statement_list: -// text="emit", type=emit: -// text="emit", type=emit: -// text="oosvar_keylist", type=oosvar_keylist: -// text="a", type=string_literal. -// text="2", type=numeric_literal. -// text="3", type=numeric_literal. -// text="emit_namelist", type=emit: -// text="x", type=numeric_literal. -// text="y", type=numeric_literal. -// text="z", type=numeric_literal. -// text="stream", type=stream: -// -// $ mlr -n put -v 'emit all, "x", "y", "z"' -// AST ROOT: -// text="list", type=statement_list: -// text="emit", type=emit: -// text="emit", type=emit: -// text="all", type=all. -// text="emit_namelist", type=emit: -// text="x", type=numeric_literal. -// text="y", type=numeric_literal. -// text="z", type=numeric_literal. -// text="stream", type=stream: - -mlr_dsl_cst_statement_t* alloc_emit( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags, - int do_full_prefixing) -{ - emit_state_t* pstate = mlr_malloc_or_die(sizeof(emit_state_t)); - - pstate->poutput_filename_evaluator = NULL; - pstate->stdfp = NULL; - pstate->precord_emitter = NULL; - pstate->prhs_xevaluator = NULL; - pstate->localvar_name = NULL; - pstate->localvar_frame_relative_index = MD_UNUSED_INDEX; - pstate->pemit_namelist_evaluators = NULL; - pstate->pemit_keylist_evaluators = NULL; - pstate->psingle_lrec_writer = NULL; - pstate->pmulti_lrec_writer = NULL; - - mlr_dsl_ast_node_t* pemit_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pkeylist_node = pemit_node->pchildren->phead->pvvalue; - - // Name note: difference between keylist and namelist: in emit @a[$b]["c"], "d", @e, - // the keylist is ["a", $b, "c"] and the namelist is ["d", @e]. - - // xxx why not rxval_evaluator here?? - - int output_all = FALSE; - // The grammar allows only 'emit all', not 'emit @x, all, $y'. - // So if 'all' appears at all, it's the only name. - if (pkeylist_node->type == MD_AST_NODE_TYPE_ALL || pkeylist_node->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { - output_all = TRUE; - - pstate->precord_emitter = record_emitter_from_oosvar; - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { - - pstate->pemit_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); - - pstate->precord_emitter = record_emitter_from_oosvar; - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { - pstate->precord_emitter = record_emitter_from_local_variable; - - MLR_INTERNAL_CODING_ERROR_IF(pkeylist_node->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->localvar_name = pkeylist_node->text; - pstate->localvar_frame_relative_index = pkeylist_node->vardef_frame_relative_index; - pstate->pemit_keylist_evaluators = sllv_alloc(); - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { - pstate->precord_emitter = record_emitter_from_local_variable; - - MLR_INTERNAL_CODING_ERROR_IF(pkeylist_node->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->localvar_name = pkeylist_node->text; - pstate->localvar_frame_relative_index = pkeylist_node->vardef_frame_relative_index; - pstate->pemit_keylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_FULL_SREC) { - pstate->precord_emitter = record_emitter_from_full_srec; - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_FUNCTION_CALLSITE) { - pstate->precord_emitter = record_emitter_from_ephemeral_map; - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); - - // xxx indexed function callsite -- ? - - } else if (pkeylist_node->type == MD_AST_NODE_TYPE_MAP_LITERAL) { - pstate->precord_emitter = record_emitter_from_ephemeral_map; - pstate->prhs_xevaluator = rxval_evaluator_alloc_from_ast( - pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); - - } else { - MLR_INTERNAL_CODING_ERROR(); - } - - pstate->pemit_namelist_evaluators = sllv_alloc(); - if (pemit_node->pchildren->length == 2) { - mlr_dsl_ast_node_t* pnamelist_node = pemit_node->pchildren->phead->pnext->pvvalue; - for (sllve_t* pe = pnamelist_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - sllv_append(pstate->pemit_namelist_evaluators, - rval_evaluator_alloc_from_ast(pkeynode, pcst->pfmgr, type_inferencing, context_flags)); - } - } - - mlr_dsl_cst_statement_handler_t* phandler = NULL; - - pstate->do_full_prefixing = do_full_prefixing; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL - ? NULL - : poutput_node->pchildren->phead == NULL - ? NULL - : poutput_node->pchildren->phead->pvvalue; - if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { - phandler = output_all ? handle_emit_all : handle_emit; - } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - phandler = output_all ? handle_emit_all_to_stdfp : handle_emit_to_stdfp; - pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; - } else { - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - phandler = output_all ? handle_emit_all_to_file : handle_emit_to_file; - } - pstate->flush_every_record = pcst->flush_every_record; - - return mlr_dsl_cst_statement_valloc( - pnode, - phandler, - free_emit, - pstate); -} - -// ---------------------------------------------------------------- -static void free_emit(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - emit_state_t* pstate = pstatement->pvstate; - - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - - if (pstate->prhs_xevaluator != NULL) { - pstate->prhs_xevaluator->pfree_func(pstate->prhs_xevaluator); - } - - if (pstate->pemit_namelist_evaluators != NULL) { - for (sllve_t* pe = pstate->pemit_namelist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* phandler = pe->pvvalue; - phandler->pfree_func(phandler); - } - sllv_free(pstate->pemit_namelist_evaluators); - } - - if (pstate->pemit_keylist_evaluators != NULL) { - for (sllve_t* pe = pstate->pemit_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* phandler = pe->pvvalue; - phandler->pfree_func(phandler); - } - sllv_free(pstate->pemit_keylist_evaluators); - } - - if (pstate->psingle_lrec_writer != NULL) { - pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); - } - - if (pstate->pmulti_lrec_writer != NULL) { - multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); - multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_emit( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - pstate->precord_emitter(pstate, pvars, pcst_outputs->poutrecs, pcst_outputs->oosvar_flatten_separator); -} - -// ---------------------------------------------------------------- -static void handle_emit_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - sllv_t* poutrecs = sllv_alloc(); - - pstate->precord_emitter(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->psingle_lrec_writer == NULL) - pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); - - lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); - if (pstate->flush_every_record) - fflush(pstate->stdfp); - - sllv_free(poutrecs); -} - -// ---------------------------------------------------------------- -static void handle_emit_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->pmulti_lrec_writer == NULL) - pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - - pstate->precord_emitter(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); - - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - char fn_free_flags = 0; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - - multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, - pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); - sllv_free(poutrecs); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); -} - -// ---------------------------------------------------------------- -static void record_emitter_from_oosvar( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator) -{ - int keys_all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->pemit_keylist_evaluators, pvars, &keys_all_non_null_or_error); - if (keys_all_non_null_or_error) { - int names_all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, - &names_all_non_null_or_error); - if (names_all_non_null_or_error) { - mlhmmv_root_partial_to_lrecs(pvars->poosvars, pmvkeys, pmvnames, poutrecs, - pstate->do_full_prefixing, oosvar_flatten_separator); - } - sllmv_free(pmvnames); - } - sllmv_free(pmvkeys); -} - -static void record_emitter_from_local_variable( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator) -{ - int keys_all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->pemit_keylist_evaluators, pvars, &keys_all_non_null_or_error); - - mv_t name = mv_from_string(pstate->localvar_name, NO_FREE); - sllmv_prepend_no_free(pmvkeys, &name); - - if (keys_all_non_null_or_error) { - int names_all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, - &names_all_non_null_or_error); - if (names_all_non_null_or_error) { - - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - mlhmmv_xvalue_t* pmval = local_stack_frame_ref_extended_from_indexed(pframe, - pstate->localvar_frame_relative_index, NULL); - if (pmval != NULL) { - // Temporarily wrap the localvar in a parent map whose single key is the variable name. - mlhmmv_root_t* pmap = mlhmmv_wrap_name_and_xvalue(&name, pmval); - - mlhmmv_root_partial_to_lrecs(pmap, pmvkeys, pmvnames, poutrecs, - pstate->do_full_prefixing, oosvar_flatten_separator); - - mlhmmv_unwrap_name_and_xvalue(pmap); - } - } - sllmv_free(pmvnames); - } - sllmv_free(pmvkeys); -} - -static void record_emitter_from_full_srec( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator) -{ - sllv_append(poutrecs, lrec_copy(pvars->pinrec)); -} - -static void record_emitter_from_ephemeral_map( - emit_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator) -{ - rxval_evaluator_t* prhs_xevaluator = pstate->prhs_xevaluator; - boxed_xval_t boxed_xval = prhs_xevaluator->pprocess_func(prhs_xevaluator->pvstate, pvars); - sllmv_t* pmvkeys = sllmv_alloc(); - - if (!boxed_xval.xval.is_terminal) { - int names_all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, - &names_all_non_null_or_error); - if (names_all_non_null_or_error) { - mv_t name = mv_from_string("_", NO_FREE); - sllmv_prepend_no_free(pmvkeys, &name); - - // Temporarily wrap the localvar in a parent map whose single key is the variable name. - mlhmmv_root_t* pmap = mlhmmv_wrap_name_and_xvalue(&name, &boxed_xval.xval); - - mlhmmv_root_partial_to_lrecs(pmap, pmvkeys, pmvnames, poutrecs, - pstate->do_full_prefixing, oosvar_flatten_separator); - - mlhmmv_unwrap_name_and_xvalue(pmap); - } - sllmv_free(pmvnames); - } - - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } - - sllmv_free(pmvkeys); -} - -// ---------------------------------------------------------------- -static void handle_emit_all( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - int all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); - if (all_non_null_or_error) { - mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, pcst_outputs->poutrecs, - pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); - } - sllmv_free(pmvnames); -} - -// ---------------------------------------------------------------- -static void handle_emit_all_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->psingle_lrec_writer == NULL) - pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - int all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); - if (all_non_null_or_error) { - mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, poutrecs, - pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); - } - sllmv_free(pmvnames); - - lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); - if (pstate->flush_every_record) - fflush(pstate->stdfp); - sllv_free(poutrecs); -} - -// ---------------------------------------------------------------- -static void handle_emit_all_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->pmulti_lrec_writer == NULL) - pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - int all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, &all_non_null_or_error); - if (all_non_null_or_error) { - mlhmmv_root_all_to_lrecs(pvars->poosvars, pmvnames, poutrecs, - pstate->do_full_prefixing, pcst_outputs->oosvar_flatten_separator); - } - - char fn_free_flags = 0; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, - pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); - sllv_free(poutrecs); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); - sllmv_free(pmvnames); -} - -// ================================================================ -struct _emit_lashed_item_t; // Forward reference - -typedef struct _emit_lashed_item_t { - rval_evaluator_t* pbasename_evaluator; - rxval_evaluator_t* pitem_xevaluator; -} emit_lashed_item_t; - -static emit_lashed_item_t* emit_lashed_item_alloc( - rval_evaluator_t* pbasename_evaluator, - rxval_evaluator_t* pitem_xevaluator) -{ - emit_lashed_item_t* pitem = mlr_malloc_or_die(sizeof(emit_lashed_item_t)); - pitem->pbasename_evaluator = pbasename_evaluator; - pitem->pitem_xevaluator = pitem_xevaluator; - return pitem; -} - -static void emit_lashed_item_free(emit_lashed_item_t* pitem) { - pitem->pbasename_evaluator->pfree_func(pitem->pbasename_evaluator); - pitem->pitem_xevaluator->pfree_func(pitem->pitem_xevaluator); - free(pitem); -} - -// ---------------------------------------------------------------- -typedef struct _emit_lashed_state_t { - int num_emit_lashed_items; - emit_lashed_item_t** ppitems; - sllv_t* pemit_namelist_evaluators; - - // Used per-call but allocated once in the constructor: - mv_t* pbasenames; - boxed_xval_t* pboxed_xvals; - mlhmmv_xvalue_t** ptop_values; - - rval_evaluator_t* poutput_filename_evaluator; - FILE* stdfp; - file_output_mode_t file_output_mode; - lrec_writer_t* psingle_lrec_writer; // emit/tee to stdout/stderr - multi_lrec_writer_t* pmulti_lrec_writer; // emit-to-file - - int do_full_prefixing; - int flush_every_record; -} emit_lashed_state_t; - -static mlr_dsl_cst_statement_handler_t handle_emit_lashed; -static mlr_dsl_cst_statement_handler_t handle_emit_lashed_to_stdfp; -static mlr_dsl_cst_statement_handler_t handle_emit_lashed_to_file; -static void handle_emit_lashed_common( - emit_lashed_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator); -static void free_emit_lashed(mlr_dsl_cst_statement_t* pstatement, context_t* pctx); - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_emit_lashed(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags, int do_full_prefixing) -{ - emit_lashed_state_t* pstate = mlr_malloc_or_die(sizeof(emit_lashed_state_t)); - - pstate->num_emit_lashed_items = 0; - pstate->ppitems = NULL; - pstate->pemit_namelist_evaluators = NULL; - - pstate->poutput_filename_evaluator = NULL; - pstate->stdfp = NULL; - pstate->psingle_lrec_writer = NULL; - pstate->pmulti_lrec_writer = NULL; - - mlr_dsl_ast_node_t* pemit_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pkeylists_node = pemit_node->pchildren->phead->pvvalue; - - pstate->num_emit_lashed_items = pkeylists_node->pchildren->length; - pstate->ppitems = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(emit_lashed_item_t*)); - int i = 0; - for (sllve_t* pe = pkeylists_node->pchildren->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pkeylist_node = pe->pvvalue; - - rval_evaluator_t* pbasename_evaluator = NULL; - switch (pkeylist_node->type) { - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: - case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: - pbasename_evaluator = rval_evaluator_alloc_from_string(pkeylist_node->text); - break; - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: - pbasename_evaluator = rval_evaluator_alloc_from_string( - ((mlr_dsl_ast_node_t*)pkeylist_node->pchildren->phead->pvvalue)->text); - break; - default: - pbasename_evaluator = rval_evaluator_alloc_from_string("_"); - break; - } - - rxval_evaluator_t* pitem_xevaluator = rxval_evaluator_alloc_from_ast( - pkeylist_node, pcst->pfmgr, type_inferencing, context_flags); - - pstate->ppitems[i] = emit_lashed_item_alloc(pbasename_evaluator, pitem_xevaluator); - } - - sllv_t* pemit_namelist_evaluators = sllv_alloc(); - if (pemit_node->pchildren->length == 2) { - mlr_dsl_ast_node_t* pnamelist_node = pemit_node->pchildren->phead->pnext->pvvalue; - for (sllve_t* pe = pnamelist_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - sllv_append(pemit_namelist_evaluators, - rval_evaluator_alloc_from_ast(pkeynode, pcst->pfmgr, type_inferencing, context_flags)); - } - } - pstate->pemit_namelist_evaluators = pemit_namelist_evaluators; - - pstate->pbasenames = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(mv_t)); - pstate->pboxed_xvals = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(boxed_xval_t)); - pstate->ptop_values = mlr_malloc_or_die(pstate->num_emit_lashed_items * sizeof(mlhmmv_level_entry_t*)); - - mlr_dsl_cst_statement_handler_t* phandler = NULL; - pstate->do_full_prefixing = do_full_prefixing; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren == NULL - ? NULL - : poutput_node->pchildren->phead == NULL - ? NULL - : poutput_node->pchildren->phead->pvvalue; - if (poutput_node->type == MD_AST_NODE_TYPE_STREAM) { - phandler = handle_emit_lashed; - } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT || pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - phandler = handle_emit_lashed_to_stdfp; - pstate->stdfp = (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) ? stdout : stderr; - } else { - pstate->poutput_filename_evaluator = NULL; - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - phandler = handle_emit_lashed_to_file; - } - pstate->flush_every_record = pcst->flush_every_record; - - return mlr_dsl_cst_statement_valloc( - pnode, - phandler, - free_emit_lashed, - pstate); -} - -// ---------------------------------------------------------------- -static void free_emit_lashed(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - emit_lashed_state_t* pstate = pstatement->pvstate; - - if (pstate->ppitems != NULL) { - for (int i = 0; i < pstate->num_emit_lashed_items; i++) { - emit_lashed_item_free(pstate->ppitems[i]); - } - free(pstate->ppitems); - } - - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - - if (pstate->pemit_namelist_evaluators != NULL) { - for (sllve_t* pe = pstate->pemit_namelist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* phandler = pe->pvvalue; - phandler->pfree_func(phandler); - } - sllv_free(pstate->pemit_namelist_evaluators); - } - - free(pstate->pbasenames); - free(pstate->pboxed_xvals); - free(pstate->ptop_values); - - if (pstate->psingle_lrec_writer != NULL) { - pstate->psingle_lrec_writer->pfree_func(pstate->psingle_lrec_writer, pctx); - } - - if (pstate->pmulti_lrec_writer != NULL) { - multi_lrec_writer_drain(pstate->pmulti_lrec_writer, pctx); - multi_lrec_writer_free(pstate->pmulti_lrec_writer, pctx); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_emit_lashed( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_lashed_state_t* pstate = pstatement->pvstate; - handle_emit_lashed_common(pstate, pvars, pcst_outputs->poutrecs, pcst_outputs->oosvar_flatten_separator); -} - -static void handle_emit_lashed_to_stdfp( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_lashed_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->psingle_lrec_writer == NULL) - pstate->psingle_lrec_writer = lrec_writer_alloc_or_die(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - - handle_emit_lashed_common(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); - - lrec_writer_print_all(pstate->psingle_lrec_writer, pstate->stdfp, poutrecs, pvars->pctx); - if (pstate->flush_every_record) - fflush(pstate->stdfp); - - sllv_free(poutrecs); -} - -// ---------------------------------------------------------------- -static void handle_emit_lashed_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - emit_lashed_state_t* pstate = pstatement->pvstate; - - // The opts aren't complete at alloc time so we need to handle them on first use. - if (pstate->pmulti_lrec_writer == NULL) - pstate->pmulti_lrec_writer = multi_lrec_writer_alloc(pcst_outputs->pwriter_opts); - - sllv_t* poutrecs = sllv_alloc(); - - handle_emit_lashed_common(pstate, pvars, poutrecs, pcst_outputs->oosvar_flatten_separator); - - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - char fn_free_flags = 0; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - - multi_lrec_writer_output_list(pstate->pmulti_lrec_writer, poutrecs, filename, - pstate->file_output_mode, pstate->flush_every_record, pvars->pctx); - - sllv_free(poutrecs); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); -} - -// ---------------------------------------------------------------- -static void handle_emit_lashed_common( - emit_lashed_state_t* pstate, - variables_t* pvars, - sllv_t* poutrecs, - char* oosvar_flatten_separator) -{ - for (int i = 0; i < pstate->num_emit_lashed_items; i++) { - rval_evaluator_t* pev = pstate->ppitems[i]->pbasename_evaluator; - pstate->pbasenames[i] = pev->pprocess_func(pev->pvstate, pvars); - } - - int names_all_non_null_or_error = TRUE; - sllmv_t* pmvnames = evaluate_list(pstate->pemit_namelist_evaluators, pvars, - &names_all_non_null_or_error); - if (names_all_non_null_or_error) { - - for (int i = 0; i < pstate->num_emit_lashed_items; i++) { - emit_lashed_item_t* pitem = pstate->ppitems[i]; - pstate->pboxed_xvals[i] = pitem->pitem_xevaluator->pprocess_func( - pitem->pitem_xevaluator->pvstate, pvars); - pstate->ptop_values[i] = &pstate->pboxed_xvals[i].xval; - } - - mlhmmv_xvalues_to_lrecs_lashed(pstate->ptop_values, pstate->num_emit_lashed_items, - pstate->pbasenames, pmvnames, poutrecs, pstate->do_full_prefixing, oosvar_flatten_separator); - - for (int i = 0; i < pstate->num_emit_lashed_items; i++) { - if (pstate->pboxed_xvals[i].is_ephemeral) { - mlhmmv_xvalue_free(&pstate->pboxed_xvals[i].xval); - } - } - } - sllmv_free(pmvnames); - - for (int i = 0; i < pstate->num_emit_lashed_items; i++) { - mv_free(&pstate->pbasenames[i]); - } -} - -// ================================================================ -struct _dump_state_t; // forward reference - -typedef struct _dump_state_t { - rxval_evaluator_t* ptarget_xevaluator; - - FILE* stdfp; - file_output_mode_t file_output_mode; - rval_evaluator_t* poutput_filename_evaluator; - int flush_every_record; - multi_out_t* pmulti_out; -} dump_state_t; - -static mlr_dsl_cst_statement_handler_t handle_dump; -static mlr_dsl_cst_statement_handler_t handle_dump_to_file; -static mlr_dsl_cst_statement_freer_t free_dump; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - dump_state_t* pstate = mlr_malloc_or_die(sizeof(dump_state_t)); - - pstate->ptarget_xevaluator = NULL; - pstate->stdfp = NULL; - pstate->poutput_filename_evaluator = NULL; - pstate->pmulti_out = NULL; - pstate->flush_every_record = pcst->flush_every_record; - - mlr_dsl_ast_node_t* poutput_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pfilename_node = poutput_node->pchildren->phead->pvvalue; - mlr_dsl_cst_statement_handler_t* phandler = NULL; - - MLR_INTERNAL_CODING_ERROR_UNLESS(pnode->pchildren->length == 2); - - mlr_dsl_ast_node_t* ptarget_node = pnode->pchildren->phead->pnext->pvvalue; - - pstate->ptarget_xevaluator = rxval_evaluator_alloc_from_ast( - ptarget_node, pcst->pfmgr, type_inferencing, context_flags); - - if (pfilename_node->type == MD_AST_NODE_TYPE_STDOUT) { - phandler = handle_dump; - pstate->stdfp = stdout; - } else if (pfilename_node->type == MD_AST_NODE_TYPE_STDERR) { - phandler = handle_dump; - pstate->stdfp = stderr; - } else { - pstate->poutput_filename_evaluator = rval_evaluator_alloc_from_ast(pfilename_node, pcst->pfmgr, - type_inferencing, context_flags); - pstate->file_output_mode = file_output_mode_from_ast_node_type(poutput_node->type); - pstate->pmulti_out = multi_out_alloc(); - phandler = handle_dump_to_file; - } - - return mlr_dsl_cst_statement_valloc( - pnode, - phandler, - free_dump, - pstate); -} - -// ---------------------------------------------------------------- -static void free_dump(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - dump_state_t* pstate = pstatement->pvstate; - - if (pstate->ptarget_xevaluator != NULL) { - pstate->ptarget_xevaluator->pfree_func(pstate->ptarget_xevaluator); - } - if (pstate->poutput_filename_evaluator != NULL) { - pstate->poutput_filename_evaluator->pfree_func(pstate->poutput_filename_evaluator); - } - if (pstate->pmulti_out != NULL) { - multi_out_close(pstate->pmulti_out); - multi_out_free(pstate->pmulti_out); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_dump( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - dump_state_t* pstate = pstatement->pvstate; - - rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; - boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); - - if (boxed_xval.xval.is_terminal) { - mlhmmv_print_terminal(&boxed_xval.xval.terminal_mlrval, - pvars->json_quote_int_keys, pvars->json_quote_non_string_values, - pstate->stdfp); - fprintf(pstate->stdfp, "\n"); - } else { - mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, - pvars->json_quote_int_keys, pvars->json_quote_non_string_values, - "", pvars->pctx->auto_line_term, - pstate->stdfp); - } - - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } -} - -// ---------------------------------------------------------------- -static void handle_dump_to_file( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - dump_state_t* pstate = pstatement->pvstate; - rval_evaluator_t* poutput_filename_evaluator = pstate->poutput_filename_evaluator; - mv_t filename_mv = poutput_filename_evaluator->pprocess_func(poutput_filename_evaluator->pvstate, pvars); - char fn_free_flags; - char* filename = mv_format_val(&filename_mv, &fn_free_flags); - - FILE* outfp = multi_out_get(pstate->pmulti_out, filename, pstate->file_output_mode); - - rxval_evaluator_t* ptarget_xevaluator = pstate->ptarget_xevaluator; - boxed_xval_t boxed_xval = ptarget_xevaluator->pprocess_func(ptarget_xevaluator->pvstate, pvars); - - if (boxed_xval.xval.is_terminal) { - mlhmmv_print_terminal(&boxed_xval.xval.terminal_mlrval, - pvars->json_quote_int_keys, pvars->json_quote_non_string_values, - outfp); - fprintf(outfp, "\n"); - } else if (boxed_xval.xval.pnext_level != NULL) { - mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, - pvars->json_quote_int_keys, pvars->json_quote_non_string_values, - "", pvars->pctx->auto_line_term, - outfp); - } - - if (pstate->flush_every_record) - fflush(outfp); - - if (fn_free_flags) - free(filename); - mv_free(&filename_mv); - - if (boxed_xval.is_ephemeral) { - mlhmmv_xvalue_free(&boxed_xval.xval); - } -} diff --git a/c/dsl/mlr_dsl_cst_return_statements.c b/c/dsl/mlr_dsl_cst_return_statements.c deleted file mode 100644 index 86bad37a5..000000000 --- a/c/dsl/mlr_dsl_cst_return_statements.c +++ /dev/null @@ -1,82 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -static void handle_return_void( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - pvars->return_state.returned = TRUE; -} - -static void free_return_void(mlr_dsl_cst_statement_t* pstatement, context_t* _) { -} - -mlr_dsl_cst_statement_t* alloc_return_void(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - return mlr_dsl_cst_statement_valloc( - pnode, - handle_return_void, - free_return_void, - NULL); -} - -// ================================================================ -typedef struct _return_value_state_t { - rxval_evaluator_t* preturn_value_xevaluator; -} return_value_state_t; - -// ---------------------------------------------------------------- -static void return_value_func( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - return_value_state_t* pstate = pstatement->pvstate; - rxval_evaluator_t* pxev = pstate->preturn_value_xevaluator; - boxed_xval_t retval = pxev->pprocess_func(pxev->pvstate, pvars); - - // Copy even if referenced since we are returning: otherwise the referent can be freed - // by stack-frame exit before the caller can copy it. - if (retval.is_ephemeral) { - pvars->return_state.retval = retval; - } else { - pvars->return_state.retval = box_ephemeral_xval(mlhmmv_xvalue_copy(&retval.xval)); - } - - pvars->return_state.returned = TRUE; -} - -// ---------------------------------------------------------------- -static void return_value_free(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - return_value_state_t* pstate = pstatement->pvstate; - rxval_evaluator_t* pxev = pstate->preturn_value_xevaluator; - pxev->pfree_func(pxev); - free(pstate); -} - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_return_value( - mlr_dsl_cst_t* pcst, - mlr_dsl_ast_node_t* pnode, - int type_inferencing, - int context_flags) -{ - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pvvalue; - - return_value_state_t* pstate = mlr_malloc_or_die(sizeof(return_value_state_t)); - - pstate->preturn_value_xevaluator = rxval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, - type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - return_value_func, - return_value_free, - pstate); -} diff --git a/c/dsl/mlr_dsl_cst_scalar_assignment_statements.c b/c/dsl/mlr_dsl_cst_scalar_assignment_statements.c deleted file mode 100644 index 320a39339..000000000 --- a/c/dsl/mlr_dsl_cst_scalar_assignment_statements.c +++ /dev/null @@ -1,342 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -typedef struct _srec_assignment_state_t { - char* srec_lhs_field_name; - rval_evaluator_t* prhs_evaluator; -} srec_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_srec_assignment; -static mlr_dsl_cst_statement_freer_t free_srec_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(srec_assignment_state_t)); - - pstate->prhs_evaluator = NULL; - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_FIELD_NAME); - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren != NULL); - - pstate->srec_lhs_field_name = plhs_node->text; - - pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_srec_assignment, - free_srec_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - srec_assignment_state_t* pstate = pstatement->pvstate; - - pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_srec_assignment( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - srec_assignment_state_t* pstate = pstatement->pvstate; - - char* srec_lhs_field_name = pstate->srec_lhs_field_name; - - rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; - mv_t val = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); - - // Write typed mlrval output to the typed overlay rather than into the lrec (which holds only - // string values). - // - // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the input had - // "x"=>"abc","y"=>"def" but the previous pass through this loop set "y"=>7.4 and "z"=>"ghi" then an - // expression right-hand side referring to $y would get the floating-point value 7.4. So we don't need - // to do lrec_put here, and moreover should not for two reasons: (1) there is a performance hit of doing - // throwaway number-to-string formatting -- it's better to do it once at the end; (2) having the string - // values doubly owned by the typed overlay and the lrec would result in double frees, or awkward - // bookkeeping. However, the NR variable evaluator reads prec->field_count, so we need to put something - // here. And putting something statically allocated minimizes copying/freeing. - if (mv_is_present(&val)) { - lhmsmv_put(pvars->ptyped_overlay, srec_lhs_field_name, &val, FREE_ENTRY_VALUE); - lrec_put(pvars->pinrec, srec_lhs_field_name, "bug", NO_FREE); - } else { - mv_free(&val); - } -} - -// ================================================================ -typedef struct _indirect_srec_assignment_state_t { - rval_evaluator_t* plhs_evaluator; - rval_evaluator_t* prhs_evaluator; -} indirect_srec_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_indirect_srec_assignment; -static mlr_dsl_cst_statement_freer_t free_indirect_srec_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_indirect_srec_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - indirect_srec_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(indirect_srec_assignment_state_t)); - - pstate->prhs_evaluator = NULL; - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(plhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_indirect_srec_assignment, - free_indirect_srec_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_indirect_srec_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - indirect_srec_assignment_state_t* pstate = pstatement->pvstate; - - pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); - pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_indirect_srec_assignment( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - indirect_srec_assignment_state_t* pstate = pstatement->pvstate; - - rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; - rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; - - mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); - if (mv_is_absent(&lval)) { - return; - } - - mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); - - char free_flags; - char* srec_lhs_field_name = mv_format_val(&lval, &free_flags); - - // Write typed mlrval output to the typed overlay rather than into the lrec (which holds only - // string values). - // - // The rval_evaluator reads the overlay in preference to the lrec. E.g. if the input had - // "x"=>"abc","y"=>"def" but the previous pass through this loop set "y"=>7.4 and "z"=>"ghi" then an - // expression right-hand side referring to $y would get the floating-point value 7.4. So we don't need - // to do lrec_put here, and moreover should not for two reasons: (1) there is a performance hit of doing - // throwaway number-to-string formatting -- it's better to do it once at the end; (2) having the string - // values doubly owned by the typed overlay and the lrec would result in double frees, or awkward - // bookkeeping. However, the NR variable evaluator reads prec->field_count, so we need to put something - // here. And putting something statically allocated minimizes copying/freeing. - if (mv_is_present(&rval)) { - lhmsmv_put(pvars->ptyped_overlay, mlr_strdup_or_die(srec_lhs_field_name), &rval, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - lrec_put(pvars->pinrec, mlr_strdup_or_die(srec_lhs_field_name), "bug", FREE_ENTRY_KEY | FREE_ENTRY_KEY); - } else { - // xxx re-examine after push - mv_free(&rval); - } - - if (free_flags) { - free(srec_lhs_field_name); - } -} - -// ================================================================ -typedef struct _positional_srec_name_assignment_state_t { - rval_evaluator_t* plhs_evaluator; - rval_evaluator_t* prhs_evaluator; -} positional_srec_name_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_positional_srec_name_assignment; -static mlr_dsl_cst_statement_freer_t free_positional_srec_name_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_positional_srec_name_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - positional_srec_name_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(positional_srec_name_assignment_state_t)); - - pstate->prhs_evaluator = NULL; - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(plhs_node, pcst->pfmgr, type_inferencing, context_flags); - pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_positional_srec_name_assignment, - free_positional_srec_name_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_positional_srec_name_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - positional_srec_name_assignment_state_t* pstate = pstatement->pvstate; - - pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); - pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_positional_srec_name_assignment( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - positional_srec_name_assignment_state_t* pstate = pstatement->pvstate; - - rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; - rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; - - mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); - mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); - - if (mv_is_absent(&lval)) { - return; - } - if (!mv_is_int(&lval)) { - char free_flags = NO_FREE; - char* text = mv_maybe_alloc_format_val(&lval, &free_flags); - fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); - if (free_flags) - free(text); - exit(1); - } - - if (mv_is_absent(&rval)) { - return; - } - if (!mv_is_string(&rval)) { - char free_flags = NO_FREE; - char* text = mv_maybe_alloc_format_val(&rval, &free_flags); - fprintf(stderr, "%s: new positional names must be strings; got [%s].\n", MLR_GLOBALS.bargv0, text); - if (free_flags) - free(text); - exit(1); - } - - int srec_lhs_field_position = lval.u.intv; - // xxx elsewhere (lrec logic: prohibit empty-string name -- ? - char* new_name = rval.u.strv; - - // Before: srec is 'a=1,b=2,c=3' - // Assignment: '$[[3]] = "X"' - // After: srec is 'a=1,b=2,X=3' - if (mv_is_present(&rval)) { - // xxx fix the lhmsmv_unset of old name on the same separate commit for fixing the unset bug - char* old_name = lrec_get_key_by_position(pvars->pinrec, srec_lhs_field_position); - if (old_name != NULL) { - mv_t* poverlay = lhmsmv_get(pvars->ptyped_overlay, old_name); - if (poverlay != NULL) { - mv_t copy = mv_copy(poverlay); - lhmsmv_put(pvars->ptyped_overlay, mlr_strdup_or_die(new_name), ©, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - lrec_rename_at_position(pvars->pinrec, srec_lhs_field_position, mlr_strdup_or_die(new_name), TRUE); - mv_free(&rval); - } -} - - -// ================================================================ -typedef struct _env_assignment_state_t { - rval_evaluator_t* plhs_evaluator; - rval_evaluator_t* prhs_evaluator; -} env_assignment_state_t; - -static mlr_dsl_cst_statement_handler_t handle_env_assignment; -static mlr_dsl_cst_statement_freer_t free_env_assignment; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_env_assignment(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - env_assignment_state_t* pstate = mlr_malloc_or_die(sizeof(env_assignment_state_t)); - - MLR_INTERNAL_CODING_ERROR_IF((pnode->pchildren == NULL) || (pnode->pchildren->length != 2)); - - mlr_dsl_ast_node_t* plhs_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* prhs_node = pnode->pchildren->phead->pnext->pvvalue; - - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->type != MD_AST_NODE_TYPE_ENV); - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren == NULL); - MLR_INTERNAL_CODING_ERROR_IF(plhs_node->pchildren->length != 2); - mlr_dsl_ast_node_t* pnamenode = plhs_node->pchildren->phead->pnext->pvvalue; - - pstate->plhs_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pcst->pfmgr, type_inferencing, context_flags); - pstate->prhs_evaluator = rval_evaluator_alloc_from_ast(prhs_node, pcst->pfmgr, type_inferencing, context_flags); - - return mlr_dsl_cst_statement_valloc( - pnode, - handle_env_assignment, - free_env_assignment, - pstate); -} - -// ---------------------------------------------------------------- -static void free_env_assignment(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - env_assignment_state_t* pstate = pstatement->pvstate; - - pstate->plhs_evaluator->pfree_func(pstate->plhs_evaluator); - pstate->prhs_evaluator->pfree_func(pstate->prhs_evaluator); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_env_assignment( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - env_assignment_state_t* pstate = pstatement->pvstate; - - rval_evaluator_t* plhs_evaluator = pstate->plhs_evaluator; - rval_evaluator_t* prhs_evaluator = pstate->prhs_evaluator; - mv_t lval = plhs_evaluator->pprocess_func(plhs_evaluator->pvstate, pvars); - mv_t rval = prhs_evaluator->pprocess_func(prhs_evaluator->pvstate, pvars); - - if (mv_is_present(&lval) && mv_is_present(&rval)) { - mlr_arch_setenv( - mlr_strdup_or_die(mv_alloc_format_val(&lval)), - mlr_strdup_or_die(mv_alloc_format_val(&rval))); - } - mv_free(&lval); - mv_free(&rval); -} diff --git a/c/dsl/mlr_dsl_cst_statements.c b/c/dsl/mlr_dsl_cst_statements.c deleted file mode 100644 index 8f5e4a0db..000000000 --- a/c/dsl/mlr_dsl_cst_statements.c +++ /dev/null @@ -1,649 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -// The Lemon parser in parsing/mlr_dsl_parse.y builds up an abstract syntax tree -// specifically for the CST builder here. -// -// For clearer visuals on what the ASTs look like: -// * See parsing/mlr_dsl_parse.y -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -// ================================================================ -cst_statement_block_t* cst_statement_block_alloc(int subframe_var_count) { - cst_statement_block_t* pblock = mlr_malloc_or_die(sizeof(cst_statement_block_t)); - - pblock->subframe_var_count = subframe_var_count; - pblock->pstatements = sllv_alloc(); - - return pblock; -} - -// ---------------------------------------------------------------- -void cst_statement_block_free(cst_statement_block_t* pblock, context_t* pctx) { - if (pblock == NULL) - return; - for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_free(pe->pvvalue, pctx); - } - sllv_free(pblock->pstatements); - free(pblock); -} - -// ================================================================ -// ALLOCATORS -// ================================================================ -cst_top_level_statement_block_t* cst_top_level_statement_block_alloc(int max_var_depth, int subframe_var_count) { - cst_top_level_statement_block_t* ptop_level_block = mlr_malloc_or_die(sizeof(cst_top_level_statement_block_t)); - - ptop_level_block->max_var_depth = max_var_depth; - ptop_level_block->pframe = local_stack_frame_alloc(max_var_depth); - ptop_level_block->pblock = cst_statement_block_alloc(subframe_var_count); - - return ptop_level_block; -} - -// ---------------------------------------------------------------- -void cst_top_level_statement_block_free(cst_top_level_statement_block_t* ptop_level_block, context_t* pctx) { - if (ptop_level_block == NULL) - return; - local_stack_frame_free(ptop_level_block->pframe); - cst_statement_block_free(ptop_level_block->pblock, pctx); - free(ptop_level_block); -} - -// ================================================================ -// The parser accepts many things that are invalid, e.g. -// * begin{end{}} -- begin/end not at top level -// * begin{$x=1} -- references to stream records at begin/end -// * break/continue outside of for/while/do-while -// * $x=x -- boundvars outside of for-loop variable bindings -// -// All of the above are enforced here by the CST builder, which takes the parser's output AST as -// input. This is done (a) to keep the parser from being overly complex, and (b) so we can get much -// more informative error messages in C than in Lemon ('syntax error'). -// -// In this file we set up left-hand sides for assignments, as well as right-hand sides for emit and -// unset. Most right-hand sides are set up in rval_expr_evaluators.c so the context_flags are -// passed through to there as well. - -mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - switch(pnode->type) { - - case MD_AST_NODE_TYPE_FUNC_DEF: - fprintf(stderr, "%s: func statements are only valid at top level.\n", MLR_GLOBALS.bargv0); - exit(1); - break; - - case MD_AST_NODE_TYPE_SUBR_DEF: - fprintf(stderr, "%s: subr statements are only valid at top level.\n", MLR_GLOBALS.bargv0); - exit(1); - break; - - case MD_AST_NODE_TYPE_BEGIN: - fprintf(stderr, "%s: begin statements are only valid at top level.\n", MLR_GLOBALS.bargv0); - exit(1); - break; - - case MD_AST_NODE_TYPE_END: - fprintf(stderr, "%s: end statements are only valid at top level.\n", MLR_GLOBALS.bargv0); - exit(1); - break; - - case MD_AST_NODE_TYPE_RETURN_VALUE: - if (!(context_flags & IN_FUNC_DEF)) { - fprintf(stderr, "%s: return-value statements are only valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_return_value(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_RETURN_VOID: - if (!(context_flags & IN_SUBR_DEF)) { - fprintf(stderr, "%s: return-void statements are only valid within subr blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_return_void(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_SUBR_CALLSITE: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: subroutine calls are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_subr_callsite_statement(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: - return alloc_conditional_block(pcst, pnode, type_inferencing, context_flags); - break; - case MD_AST_NODE_TYPE_IF_HEAD: - return alloc_if_head(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_WHILE: - return alloc_while(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - case MD_AST_NODE_TYPE_DO_WHILE: - return alloc_do_while(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_SREC: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_for_srec(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_for_srec_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_OOSVAR: - return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - case MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY: - return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_LOCAL_MAP: - return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - case MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY: - return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_MAP_LITERAL: - return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - case MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY: - return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL: - return alloc_for_map(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - case MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY: - return alloc_for_map_key_only(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_TRIPLE_FOR: - return alloc_triple_for(pcst, pnode, type_inferencing, context_flags | IN_BREAKABLE); - break; - - case MD_AST_NODE_TYPE_BREAK: - if (!(context_flags & IN_BREAKABLE)) { - fprintf(stderr, "%s: break statements are only valid within for, while, or do-while.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_break(pcst, pnode, type_inferencing, context_flags); - break; - case MD_AST_NODE_TYPE_CONTINUE: - if (!(context_flags & IN_BREAKABLE)) { - fprintf(stderr, "%s: break statements are only valid within for, while, or do-while.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_continue(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_ANY); - - case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_NUMERIC); - break; - - case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_INT); - break; - - case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_FLOAT); - break; - - case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_BOOLEAN); - break; - - case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_STRING); - break; - - case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: - return alloc_local_variable_definition(pcst, pnode, type_inferencing, context_flags, TYPE_MASK_MAP); - break; - - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: - return alloc_nonindexed_local_variable_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: - return alloc_indexed_local_variable_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_srec_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_indirect_srec_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_positional_srec_name_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: - return alloc_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments from $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: - return alloc_full_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments from $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_full_oosvar_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: assignments to $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: assignments to $-variables are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_full_srec_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: - return alloc_env_assignment(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_UNSET: - return alloc_unset(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_TEE: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: tee statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_tee(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_EMITF: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: emitf statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_emitf(pcst, pnode, type_inferencing, context_flags); - break; - case MD_AST_NODE_TYPE_EMITP: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: emitp statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_emit(pcst, pnode, type_inferencing, context_flags, TRUE); - break; - case MD_AST_NODE_TYPE_EMIT: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: emit statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_emit(pcst, pnode, type_inferencing, context_flags, FALSE); - break; - - case MD_AST_NODE_TYPE_EMITP_LASHED: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: emitp statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_emit_lashed(pcst, pnode, type_inferencing, context_flags, TRUE); - break; - case MD_AST_NODE_TYPE_EMIT_LASHED: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: emit statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_emit_lashed(pcst, pnode, type_inferencing, context_flags, FALSE); - break; - - case MD_AST_NODE_TYPE_FILTER: - if (context_flags & IN_FUNC_DEF) { - fprintf(stderr, "%s: filter statements are not valid within func blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - if (context_flags & IN_MLR_FILTER) { - fprintf(stderr, "%s filter: expressions must not also contain the \"filter\" keyword.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return alloc_filter(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_DUMP: - return alloc_dump(pcst, pnode, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_PRINT: - return alloc_print(pcst, pnode, type_inferencing, context_flags, "\n"); - break; - - case MD_AST_NODE_TYPE_PRINTN: - return alloc_print(pcst, pnode, type_inferencing, context_flags, ""); - break; - - default: - return alloc_bare_boolean(pcst, pnode, type_inferencing, context_flags); - break; - } -} - -// ---------------------------------------------------------------- -// mlr put and mlr filter are almost entirely the same code. The key difference is that the final -// statement for the latter must be a bare boolean expression. - -mlr_dsl_cst_statement_t* mlr_dsl_cst_alloc_final_filter_statement(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int negate_final_filter, int type_inferencing, int context_flags) -{ - switch(pnode->type) { - - case MD_AST_NODE_TYPE_FILTER: - fprintf(stderr, "%s filter: expressions must not also contain the \"filter\" keyword.\n", - MLR_GLOBALS.bargv0); - exit(1); - break; - - case MD_AST_NODE_TYPE_FUNC_DEF: - case MD_AST_NODE_TYPE_SUBR_DEF: - case MD_AST_NODE_TYPE_BEGIN: - case MD_AST_NODE_TYPE_END: - case MD_AST_NODE_TYPE_RETURN_VALUE: - case MD_AST_NODE_TYPE_RETURN_VOID: - case MD_AST_NODE_TYPE_SUBR_CALLSITE: - case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: - case MD_AST_NODE_TYPE_IF_HEAD: - case MD_AST_NODE_TYPE_WHILE: - case MD_AST_NODE_TYPE_DO_WHILE: - case MD_AST_NODE_TYPE_FOR_SREC: - case MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY: - case MD_AST_NODE_TYPE_FOR_OOSVAR: - case MD_AST_NODE_TYPE_TRIPLE_FOR: - case MD_AST_NODE_TYPE_BREAK: - case MD_AST_NODE_TYPE_CONTINUE: - case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: - case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: - case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: - case MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT: - case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: - case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - case MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT: - case MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - case MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT: - case MD_AST_NODE_TYPE_UNSET: - case MD_AST_NODE_TYPE_TEE: - case MD_AST_NODE_TYPE_EMITF: - case MD_AST_NODE_TYPE_EMITP: - case MD_AST_NODE_TYPE_EMIT: - case MD_AST_NODE_TYPE_EMITP_LASHED: - case MD_AST_NODE_TYPE_EMIT_LASHED: - case MD_AST_NODE_TYPE_DUMP: - case MD_AST_NODE_TYPE_PRINT: - case MD_AST_NODE_TYPE_PRINTN: - fprintf(stderr, "%s: filter expressions must end in a final boolean statement.\n", MLR_GLOBALS.bargv0); - exit(1); - break; - - default: - return alloc_final_filter(pcst, pnode, negate_final_filter, type_inferencing, context_flags); - break; - } -} - -// ---------------------------------------------------------------- -// For used by constructors of subclasses of mlr_dsl_cst_statement_t. - -mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc( - mlr_dsl_ast_node_t* past_node, - mlr_dsl_cst_statement_handler_t* pstatement_handler, - mlr_dsl_cst_statement_freer_t* pstatement_freer, - void* pvstate) -{ - mlr_dsl_cst_statement_t* pstatement = mlr_malloc_or_die(sizeof(mlr_dsl_cst_statement_t)); - pstatement->past_node = past_node; - pstatement->pstatement_handler = pstatement_handler; - pstatement->pblock = NULL; - pstatement->pblock_handler = NULL; - pstatement->pstatement_freer = pstatement_freer; - pstatement->pvstate = pvstate; - return pstatement; -} - -mlr_dsl_cst_statement_t* mlr_dsl_cst_statement_valloc_with_block( - mlr_dsl_ast_node_t* past_node, - mlr_dsl_cst_statement_handler_t* pstatement_handler, - cst_statement_block_t* pblock, - mlr_dsl_cst_block_handler_t* pblock_handler, - mlr_dsl_cst_statement_freer_t* pstatement_freer, - void* pvstate) -{ - mlr_dsl_cst_statement_t* pstatement = mlr_malloc_or_die(sizeof(mlr_dsl_cst_statement_t)); - pstatement->past_node = past_node; - pstatement->pstatement_handler = pstatement_handler; - pstatement->pblock = pblock; - pstatement->pblock_handler = pblock_handler; - pstatement->pstatement_freer = pstatement_freer; - pstatement->pvstate = pvstate; - return pstatement; -} - -// ---------------------------------------------------------------- -void mlr_dsl_cst_statement_free(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - - if (pstatement->pstatement_freer != NULL) { - pstatement->pstatement_freer(pstatement, pctx); - } - - cst_statement_block_free(pstatement->pblock, pctx); - - free(pstatement); -} - -// ================================================================ -// Top-level entry point for statement-handling, e.g. from mapper_put. - -void mlr_dsl_cst_handle_top_level_statement_blocks( - sllv_t* ptop_level_blocks, // block bodies for begins, main, ends - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - for (sllve_t* pe = ptop_level_blocks->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_handle_top_level_statement_block(pe->pvvalue, pvars, pcst_outputs); - } -} - -void mlr_dsl_cst_handle_top_level_statement_block( - cst_top_level_statement_block_t* ptop_level_block, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - local_stack_push(pvars->plocal_stack, local_stack_frame_enter(ptop_level_block->pframe)); - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, ptop_level_block->pblock->subframe_var_count); - - mlr_dsl_cst_handle_statement_block(ptop_level_block->pblock, pvars, pcst_outputs); - - local_stack_subframe_exit(pframe, ptop_level_block->pblock->subframe_var_count); - local_stack_frame_exit(local_stack_pop(pvars->plocal_stack)); -} - -// ================================================================ -// HANDLERS -// ================================================================ -// This is for statement lists not recursively contained within a loop body -- including the -// main/begin/end statements. Since there is no containing loop body, there is no need to check -// for break or continue flags after each statement. -void mlr_dsl_cst_handle_statement_block( - cst_statement_block_t* pblock, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - if (pvars->trace_execution) { - for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - fprintf(stdout, "TRACE "); - mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. - if (pvars->return_state.returned) { - break; - } - } - } else { - for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. - if (pvars->return_state.returned) { - break; - } - } - } -} - -// This is for statement lists recursively contained within a loop body. -// It checks for break or continue flags after each statement. -void mlr_dsl_cst_handle_statement_block_with_break_continue( - cst_statement_block_t* pblock, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - if (pvars->trace_execution) { - for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - fprintf(stdout, "TRACE "); - mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. - if (pvars->return_state.returned) { - break; - } - } - } else { - for (sllve_t* pe = pblock->pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - if (loop_stack_get(pvars->ploop_stack) != 0) { - break; - } - // The UDF/subroutine executor will clear the flag, and consume the retval if there is one. - if (pvars->return_state.returned) { - break; - } - } - } -} - -// Triple-for start/continuation/update statement lists -void mlr_dsl_cst_handle_statement_list( - sllv_t* pstatements, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - if (pvars->trace_execution) { - for (sllve_t* pe = pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - fprintf(stdout, "TRACE "); - mlr_dsl_ast_node_pretty_fprint(pstatement->past_node, stdout); - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - } - } else { - for (sllve_t* pe = pstatements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* pstatement = pe->pvvalue; - pstatement->pstatement_handler(pstatement, pvars, pcst_outputs); - } - } -} diff --git a/c/dsl/mlr_dsl_cst_triple_for_statements.c b/c/dsl/mlr_dsl_cst_triple_for_statements.c deleted file mode 100644 index 554c5cacc..000000000 --- a/c/dsl/mlr_dsl_cst_triple_for_statements.c +++ /dev/null @@ -1,170 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -static mlr_dsl_cst_statement_handler_t handle_triple_for; -static mlr_dsl_cst_statement_freer_t free_triple_for; - -typedef struct _triple_for_state_t { - sllv_t* ptriple_for_start_statements; - sllv_t* ptriple_for_pre_continuation_statements; - rval_evaluator_t* ptriple_for_continuation_evaluator; - sllv_t* ptriple_for_update_statements; -} triple_for_state_t; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_triple_for(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - mlr_dsl_ast_node_t* pstart_statements_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pcontinuation_statements_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pupdate_statements_node = pnode->pchildren->phead->pnext->pnext->pvvalue; - mlr_dsl_ast_node_t* pbody_statements_node = pnode->pchildren->phead->pnext->pnext->pnext->pvvalue; - - triple_for_state_t* pstate = mlr_malloc_or_die(sizeof(triple_for_state_t)); - - pstate->ptriple_for_start_statements = sllv_alloc(); - for (sllve_t* pe = pstart_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pstate->ptriple_for_start_statements, - mlr_dsl_cst_alloc_statement( - pcst, pbody_ast_node, type_inferencing, context_flags & ~IN_BREAKABLE)); - } - - // Continuation statements are split into the final boolean, and the statements before (if any). - pstate->ptriple_for_pre_continuation_statements = sllv_alloc(); - // Empty continuation for triple-for is an implicit TRUE. - if (pcontinuation_statements_node->pchildren->length == 0) { - pstate->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_boolean(TRUE); - } else { - for ( - sllve_t* pe = pcontinuation_statements_node->pchildren->phead; - pe != NULL && pe->pnext != NULL; - pe = pe->pnext - ) - { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pstate->ptriple_for_pre_continuation_statements, - mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags & ~IN_BREAKABLE)); - } - mlr_dsl_ast_node_t* pfinal_continuation_statement_node = - pcontinuation_statements_node->pchildren->ptail->pvvalue; - if (mlr_dsl_ast_node_cannot_be_bare_boolean(pfinal_continuation_statement_node)) { - fprintf(stderr, - "%s: the final triple-for continutation statement must be a bare boolean.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - pstate->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_ast( - pfinal_continuation_statement_node, pcst->pfmgr, - type_inferencing, (context_flags & ~IN_BREAKABLE) | IN_TRIPLE_FOR_CONTINUE); - } - - pstate->ptriple_for_update_statements = sllv_alloc(); - for (sllve_t* pe = pupdate_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pstate->ptriple_for_update_statements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags & ~IN_BREAKABLE)); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->subframe_var_count == MD_UNUSED_INDEX); - cst_statement_block_t* pblock = cst_statement_block_alloc(pnode->subframe_var_count); - - for (sllve_t* pe = pbody_statements_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue; - sllv_append(pblock->pstatements, mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node, - type_inferencing, context_flags)); - } - - return mlr_dsl_cst_statement_valloc_with_block( - pnode, - handle_triple_for, - pblock, - mlr_dsl_cst_handle_statement_block_with_break_continue, - free_triple_for, - pstate); -} - -static void free_triple_for(mlr_dsl_cst_statement_t* pstatement, context_t* pctx) { - - triple_for_state_t* pstate = pstatement->pvstate; - - if (pstate->ptriple_for_start_statements != NULL) { - for (sllve_t* pe = pstate->ptriple_for_start_statements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* ps = pe->pvvalue; - mlr_dsl_cst_statement_free(ps, pctx); - } - sllv_free(pstate->ptriple_for_start_statements); - } - - if (pstate->ptriple_for_pre_continuation_statements != NULL) { - for (sllve_t* pe = pstate->ptriple_for_pre_continuation_statements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* ps = pe->pvvalue; - mlr_dsl_cst_statement_free(ps, pctx); - } - sllv_free(pstate->ptriple_for_pre_continuation_statements); - } - - if (pstate->ptriple_for_continuation_evaluator != NULL) { - pstate->ptriple_for_continuation_evaluator->pfree_func(pstate->ptriple_for_continuation_evaluator); - } - - if (pstate->ptriple_for_update_statements != NULL) { - for (sllve_t* pe = pstate->ptriple_for_update_statements->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_cst_statement_t* ps = pe->pvvalue; - mlr_dsl_cst_statement_free(ps, pctx); - } - sllv_free(pstate->ptriple_for_update_statements); - } - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_triple_for( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_subframe_enter(pframe, pstatement->pblock->subframe_var_count); - loop_stack_push(pvars->ploop_stack); - - triple_for_state_t* pstate = pstatement->pvstate; - - // Start statements - mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_start_statements, pvars, pcst_outputs); - - while (TRUE) { - - // Continuation statements: - // * all but the last one are simply executed ... - mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_pre_continuation_statements, pvars, pcst_outputs); - // * ... and the last one is used to determine continuation: - rval_evaluator_t* pev = pstate->ptriple_for_continuation_evaluator; - mv_t val = pev->pprocess_func(pev->pvstate, pvars); - if (mv_is_non_null(&val)) - mv_set_boolean_strict(&val); - if (!val.u.boolv) - break; - - // Body statements - mlr_dsl_cst_handle_statement_block_with_break_continue(pstatement->pblock, pvars, pcst_outputs); - - if (loop_stack_get(pvars->ploop_stack) & LOOP_BROKEN) { - loop_stack_clear(pvars->ploop_stack, LOOP_BROKEN); - break; - } else if (loop_stack_get(pvars->ploop_stack) & LOOP_CONTINUED) { - loop_stack_clear(pvars->ploop_stack, LOOP_CONTINUED); - } - - // Update statements - mlr_dsl_cst_handle_statement_list(pstate->ptriple_for_update_statements, pvars, pcst_outputs); - } - - loop_stack_pop(pvars->ploop_stack); - local_stack_subframe_exit(pframe, pstatement->pblock->subframe_var_count); -} diff --git a/c/dsl/mlr_dsl_cst_unset_statements.c b/c/dsl/mlr_dsl_cst_unset_statements.c deleted file mode 100644 index 41899aa90..000000000 --- a/c/dsl/mlr_dsl_cst_unset_statements.c +++ /dev/null @@ -1,325 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "keylist_evaluators.h" -#include "mlr_dsl_cst.h" -#include "context_flags.h" - -// ================================================================ -// Most statements have one item, except emit and unset. -struct _unset_item_t; -typedef void unset_item_handler_t( - struct _unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -typedef struct _unset_item_t { - unset_item_handler_t* punset_item_handler; - int local_variable_frame_relative_index; - char* srec_field_name; - sllv_t* pkeylist_evaluators; - rval_evaluator_t* psrec_field_name_evaluator; -} unset_item_t; - -static unset_item_t* alloc_blank_unset_item(); -static void free_unset_item(unset_item_t* punset_item); - -static void handle_unset_nonindexed_local_variable( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_indexed_local_variable( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_oosvar( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_full_srec( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_indirect_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -static void handle_unset_positional_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs); - -// ================================================================ -typedef struct _unset_state_t { - sllv_t* punset_items; -} unset_state_t; - -static mlr_dsl_cst_statement_handler_t handle_unset; -static mlr_dsl_cst_statement_freer_t free_unset; - -static mlr_dsl_cst_statement_handler_t handle_unset; -static mlr_dsl_cst_statement_handler_t handle_unset_all; - -// ---------------------------------------------------------------- -mlr_dsl_cst_statement_t* alloc_unset(mlr_dsl_cst_t* pcst, mlr_dsl_ast_node_t* pnode, - int type_inferencing, int context_flags) -{ - unset_state_t* pstate = mlr_malloc_or_die(sizeof(unset_state_t)); - - pstate->punset_items = sllv_alloc(); - - mlr_dsl_cst_statement_handler_t* pstatement_handler = handle_unset; - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - - if (pchild->type == MD_AST_NODE_TYPE_ALL || pchild->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { - // The grammar allows only 'unset all', not 'unset @x, all, $y'. - // So if 'all' appears at all, it's the only name. Likewise with '@*'. - pstatement_handler = handle_unset_all; - - } else if (pchild->type == MD_AST_NODE_TYPE_FULL_SREC) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: unset of $-variables is not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_full_srec; - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_FIELD_NAME) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: unset of $-variables is not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_srec_field_name; - punset_item->srec_field_name = pchild->text; - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: unset of $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_indirect_srec_field_name; - punset_item->psrec_field_name_evaluator = rval_evaluator_alloc_from_ast( - pchild->pchildren->phead->pvvalue, pcst->pfmgr, type_inferencing, context_flags); - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: unset of $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_positional_srec_field_name; - punset_item->psrec_field_name_evaluator = rval_evaluator_alloc_from_ast( - pchild->pchildren->phead->pvvalue, pcst->pfmgr, type_inferencing, context_flags); - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_oosvar; - punset_item->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pchild, pcst->pfmgr, type_inferencing, context_flags); - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { - MLR_INTERNAL_CODING_ERROR_IF(pchild->vardef_frame_relative_index == MD_UNUSED_INDEX); - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_nonindexed_local_variable; - punset_item->local_variable_frame_relative_index = pchild->vardef_frame_relative_index; - sllv_append(pstate->punset_items, punset_item); - - } else if (pchild->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { - MLR_INTERNAL_CODING_ERROR_IF(pchild->vardef_frame_relative_index == MD_UNUSED_INDEX); - unset_item_t* punset_item = alloc_blank_unset_item(); - punset_item->punset_item_handler = handle_unset_indexed_local_variable; - punset_item->local_variable_frame_relative_index = pchild->vardef_frame_relative_index; - punset_item->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pchild, pcst->pfmgr, type_inferencing, context_flags); - sllv_append(pstate->punset_items, punset_item); - - } else { - MLR_INTERNAL_CODING_ERROR(); - } - } - return mlr_dsl_cst_statement_valloc( - pnode, - pstatement_handler, - free_unset, - pstate); -} - -// ---------------------------------------------------------------- -static void free_unset(mlr_dsl_cst_statement_t* pstatement, context_t* _) { - unset_state_t* pstate = pstatement->pvstate; - - for (sllve_t* pe = pstate->punset_items->phead; pe != NULL; pe = pe->pnext) { - free_unset_item(pe->pvvalue); - } - sllv_free(pstate->punset_items); - - free(pstate); -} - -// ---------------------------------------------------------------- -static void handle_unset( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - unset_state_t* pstate = pstatement->pvstate; - for (sllve_t* pf = pstate->punset_items->phead; pf != NULL; pf = pf->pnext) { - unset_item_t* punset_item = pf->pvvalue; - punset_item->punset_item_handler(punset_item, pvars, pcst_outputs); - } -} - -static void handle_unset_all( - mlr_dsl_cst_statement_t* pstatement, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - sllmv_t* pempty = sllmv_alloc(); - mlhmmv_root_remove(pvars->poosvars, pempty); - sllmv_free(pempty); -} - -// ---------------------------------------------------------------- -static unset_item_t* alloc_blank_unset_item() { - unset_item_t* punset_item = mlr_malloc_or_die(sizeof(unset_item_t)); - - punset_item->punset_item_handler = NULL; - punset_item->local_variable_frame_relative_index = MD_UNUSED_INDEX; - punset_item->srec_field_name = NULL; - punset_item->pkeylist_evaluators = NULL; - punset_item->psrec_field_name_evaluator = NULL; - - return punset_item; -} - -static void free_unset_item(unset_item_t* punset_item) { - if (punset_item->pkeylist_evaluators != NULL) { - for (sllve_t* pe = punset_item->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* phandler = pe->pvvalue; - phandler->pfree_func(phandler); - } - sllv_free(punset_item->pkeylist_evaluators); - } - if (punset_item->psrec_field_name_evaluator != NULL) { - punset_item->psrec_field_name_evaluator->pfree_func(punset_item->psrec_field_name_evaluator); - } - free(punset_item); -} - -static void handle_unset_nonindexed_local_variable( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - local_stack_frame_assign_terminal_nonindexed(pframe, punset_item->local_variable_frame_relative_index, mv_absent()); -} - -// As with oosvars, unset removes the key. E.g. if 'v = { 1:2, 3:4 }' then -// 'unset v[1]' results in 'v = { 3:4 }'. -static void handle_unset_indexed_local_variable( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(punset_item->pkeylist_evaluators, pvars, &all_non_null_or_error); - if (all_non_null_or_error) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - - // 'unset nonesuch[someindex]' requires the existence check first: else we'd be poking data - // into the absent-value stack-frame-index-0 slot. - mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_indexed(pframe, - punset_item->local_variable_frame_relative_index, NULL); - if (pxval != NULL) { - mlhmmv_level_remove(pxval->pnext_level, pmvkeys->phead); - } - } - sllmv_free(pmvkeys); -} - -static void handle_unset_oosvar( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(punset_item->pkeylist_evaluators, pvars, &all_non_null_or_error); - if (all_non_null_or_error) - mlhmmv_root_remove(pvars->poosvars, pmvkeys); - sllmv_free(pmvkeys); -} - -static void handle_unset_full_srec( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - lrec_clear(pvars->pinrec); -} - -static void handle_unset_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - lrec_remove(pvars->pinrec, punset_item->srec_field_name); -} - -static void handle_unset_indirect_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - rval_evaluator_t* pevaluator = punset_item->psrec_field_name_evaluator; - mv_t nameval = pevaluator->pprocess_func(pevaluator->pvstate, pvars); - char free_flags = NO_FREE; - char* field_name = mv_maybe_alloc_format_val(&nameval, &free_flags); - lrec_remove(pvars->pinrec, field_name); - if (free_flags & FREE_ENTRY_VALUE) - free(field_name); - mv_free(&nameval); -} - -static void handle_unset_positional_srec_field_name( - unset_item_t* punset_item, - variables_t* pvars, - cst_outputs_t* pcst_outputs) -{ - rval_evaluator_t* pevaluator = punset_item->psrec_field_name_evaluator; - mv_t nameval = pevaluator->pprocess_func(pevaluator->pvstate, pvars); - if (!mv_is_int(&nameval)) { - char free_flags = NO_FREE; - char* text = mv_maybe_alloc_format_val(&nameval, &free_flags); - fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); - if (free_flags) - free(text); - exit(1); - } - // xxx typed overlay too!! - int field_position = nameval.u.intv; - lrec_remove_by_position(pvars->pinrec, field_position); - mv_free(&nameval); -} diff --git a/c/dsl/mlr_dsl_stack_allocate.c b/c/dsl/mlr_dsl_stack_allocate.c deleted file mode 100644 index a9981c570..000000000 --- a/c/dsl/mlr_dsl_stack_allocate.c +++ /dev/null @@ -1,981 +0,0 @@ -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/free_flags.h" -#include "containers/lhmsi.h" -#include "dsl/mlr_dsl_blocked_ast.h" -#include "dsl/context_flags.h" - -// ================================================================ -// This is a two-pass stack allocator for the Miller DSL. -// -// ---------------------------------------------------------------- -// CONTEXT: -// -// In the initial Miller implementation of local variables (e.g. for-loop -// indices or frame-local variables), I used a hashmap from string name to -// mlrval at each level. This was very easy to code and it worked, but it had -// the property that every local-variable read or write involved a hashmap -// lookup to locate each local variable on the stack. For compute-intensive -// work this resulted in 80% or more of the compute time being used for the -// hashmap accesses. It doesn't make sense to always be asking "where is -// variable 'a'"? at runtime (maybe ten million times doing hash-map lookups) -// since this can be figured out ahead of time. -// -// The Miller DSL allows for recursive functions and subroutines, but within -// those, stack layout is knowable at parse time. -// -// ---------------------------------------------------------------- -// TERMINOLOGY -// -// * A top-level statement block starts with 'begin', 'end', 'func', 'subr', -// or is the remaining collection of statements outside of any of those which -// is called the 'main' statement block. -// -// * A stack frame is all the locals for a top-level statement block including -// anything local to a scoped block within the top-level block. For example, -// locals may be defined within if/while/do-while blocks. Also, variables can -// be local to a triple-for, e.g. 'for (var i = 0; i < 10; i += 1) { ... }'. -// As well, locals are bound to variables in for-loops over stream records -// or out-of-stream variables: 'for (k, v in $*) { ... }' or -// 'for ((k1, k2), v in @*) { ... }'. Lastly, function arguments are local -// to the function/subroutine definition site. -// -// * A subframe is the locals defined within any of the above: locals -// defined within an if/while/for/etc. block. Or, the locals defined -// in the top-level block have their own subframe. -// -// ---------------------------------------------------------------- -// CONVENTION: Local variables are bound to indices within the stack frame, but, -// local variable may be read before they are defined. Slot 0 of each frame is -// an absent-null which is reserved for this purpose. -// -// ---------------------------------------------------------------- -// EXAMPLE: -// -// # ---- FUNC TOP-LEVEL SUBFRAME 0: defcount 7 {absent-RHS,a,b,c,i,j,y} -// # Absent-null-RHS is at slot 0 of top level. -// func f(a, b, c) { # Args define locals 1,2,3 at current level. -// var i = 24; # Explicitly define local 4 at current level. -// j = 25; # Implicitly define local 5 at current level. -// # -// # ---- IF-STATEMENT SUBFRAME 1: defcount 1 {k} -// if (a == 26) { # Read of local 1, found at top level (subframe 0). -// var k = 27; # Explicitly define local 0 at this level. -// j = 28; # LHS is local 5, found at top level. -// # -// # Note that the 'if' and the 'else' are both at subframe -// # depth 1, while each defines a different number of locals. -// # For this function the max variable depth is 9: -// # 7 at top level plus 1 = 8 if the if is taken, -// # 7 at top level plus 2 = 9 if the else is taken, -// # -// } else { # ---- ELSE-STATEMENT SUBFRAME 1: defcount 2 {n, u} -// n = b; # Implicitly define local 0 at this level. -// var u = 4; # Implicitly define local 1 at this level. -// } # -// # -// y = 7; # LHS is local 6 at current level. -// i = z; # LHS is local 4 at current level; -// # RHS is unresolved -> slot 0 at current level. -// } # -// -// Notes: -// -// * Pass 1 computes frame-relative indices and subframe-level counts, -// as in the example, for each local variable. -// -// * Pass 2 computes absolute indices for each local variable. These -// aren't computable in pass 1 due to the example 'y = 7' assignment -// above: the number of local variables in an upper level can change -// after the invocation of a child level, so the total frame size is not -// known until all AST nodes in the top-level block have been visited. -// -// * Pass 2 also computes the max depth, counting number of variables, so -// that for each top-level block we can allocate an array of mlrvals which -// will be reused on every invocation. (For recursive function calls an entire -// frame be dynamically allocated.) -// -// * Slot 0 of the top level is reserved for an absent-null for unresolved -// names on reads. -// -// * The tree-traversal order is done correctly so that if a variable is read -// before it is defined, then read again after it is defined, then the first -// read gets absent-null and the second gets the defined value. -// ================================================================ - -// ================================================================ -// Pass-1 stack-frame container: simply a hashmap from name to position on the -// frame relative to the curly-braced statement block (top-level, for-loop, -// if-statement, else-statement, etc.). - -typedef struct _stkalc_subframe_t { - int var_count; - lhmsi_t* pnames_to_indices; -} stkalc_subframe_t; - -// ---------------------------------------------------------------- -// Pass-1 stack-frame methods - -static stkalc_subframe_t* stkalc_subframe_alloc(); - -static void stkalc_subframe_free(stkalc_subframe_t* pframe); - -static int stkalc_subframe_test_and_get(stkalc_subframe_t* pframe, char* name, int* pvalue); - -static int stkalc_subframe_get(stkalc_subframe_t* pframe, char* name); - -static int stkalc_subframe_add(stkalc_subframe_t* pframe, char* name); - -// ================================================================ -// Pass-1 frame-group container: a linked list with current frame at the head -// and top-level frame at the tail. Within a given top-level block there is a -// tree of curly-braced statement blocks, e.g. a function-definition might have -// an if-statement, else-if, else-if, else, each with its own frame. But during -// pass 1 we only maintain a list from the current frame being analyzed up to -// its parents; sibling branches are not simultaneously stored in this data -// structure. - -typedef struct _stkalc_subframe_group_t { - sllv_t* plist; -} stkalc_subframe_group_t; - -// ---------------------------------------------------------------- -// Pass-1 stack-frame-group methods - -static stkalc_subframe_group_t* stkalc_subframe_group_alloc(stkalc_subframe_t* pframe, int trace); - -static void stkalc_subframe_group_free(stkalc_subframe_group_t* pframe_group); - -static void stkalc_subframe_group_push(stkalc_subframe_group_t* pframe_group, stkalc_subframe_t* pframe); - -static stkalc_subframe_t* stkalc_subframe_group_pop(stkalc_subframe_group_t* pframe_group); - -// Pass-1 stack-frame-group node-mutator methods: given an AST node containing a -// local-variable usage they assign a subframe-relative index and a subframe-depth -// counter (how many frames deep into the top-level statement block the node -// is). - -static void stkalc_subframe_group_mutate_node_for_define(stkalc_subframe_group_t* pframe_group, - mlr_dsl_ast_node_t* pnode, char* desc, int trace); - -static void stkalc_subframe_group_mutate_node_for_write(stkalc_subframe_group_t* pframe_group, - mlr_dsl_ast_node_t* pnode, char* desc, int trace); - -static void stkalc_subframe_group_mutate_node_for_read(stkalc_subframe_group_t* pframe_group, - mlr_dsl_ast_node_t* pnode, char* desc, int trace); - -// ================================================================ -// Pass-1 helper methods for the main entry point to this file. - -static void pass_1_for_func_subr_block(mlr_dsl_ast_node_t* pnode, int trace); - -static void pass_1_for_begin_end_block(mlr_dsl_ast_node_t* pnode, int trace); - -static void pass_1_for_main_block(mlr_dsl_ast_node_t* pnode, int trace); - -static void pass_1_for_statement_block(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_statement_list(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - - -static void pass_1_for_local_definition(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_local_assignment(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_local_read(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_srec_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_srec_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_map_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_map_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_triple_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -static void pass_1_for_non_terminal_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace); - -// Pass-2 helper methods for the main entry point to this file. -static void pass_2_for_top_level_block(mlr_dsl_ast_node_t* pnode, int trace); - -static void pass_2_for_node(mlr_dsl_ast_node_t* pnode, - int subframe_depth, int var_count_below_subframe, int var_count_at_subframe, int* pmax_var_depth, - int* subframe_var_count_belows, int max_subframe_depth, - int trace); - -// ================================================================ -// Utility methods -static void leader_print(int depth); - -// ================================================================ -// Main entry point for the bind-stack allocator - -void blocked_ast_allocate_locals(blocked_ast_t* paast, int trace) { - - // Pass 1 - for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { - pass_1_for_func_subr_block(pe->pvvalue, trace); - } - for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { - pass_1_for_func_subr_block(pe->pvvalue, trace); - } - for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { - pass_1_for_begin_end_block(pe->pvvalue, trace); - } - { - pass_1_for_main_block(paast->pmain_block, trace); - } - for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { - pass_1_for_begin_end_block(pe->pvvalue, trace); - } - - // Pass 2 - for (sllve_t* pe = paast->pfunc_defs->phead; pe != NULL; pe = pe->pnext) { - pass_2_for_top_level_block(pe->pvvalue, trace); - } - for (sllve_t* pe = paast->psubr_defs->phead; pe != NULL; pe = pe->pnext) { - pass_2_for_top_level_block(pe->pvvalue, trace); - } - for (sllve_t* pe = paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) { - pass_2_for_top_level_block(pe->pvvalue, trace); - } - { - pass_2_for_top_level_block(paast->pmain_block, trace); - } - for (sllve_t* pe = paast->pend_blocks->phead; pe != NULL; pe = pe->pnext) { - pass_2_for_top_level_block(pe->pvvalue, trace); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_func_subr_block(mlr_dsl_ast_node_t* pnode, int trace) { - if (trace) { - printf("\n"); - printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [%s]\n", pnode->text); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_SUBR_DEF && pnode->type != MD_AST_NODE_TYPE_FUNC_DEF); - - stkalc_subframe_t* pframe = stkalc_subframe_alloc(); - stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); - int max_subframe_depth = 1; - - mlr_dsl_ast_node_t* pdef_name_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* plist_node = pnode->pchildren->phead->pnext->pvvalue; - for (sllve_t* pe = pdef_name_node->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pparameter_node = pe->pvvalue; - stkalc_subframe_group_mutate_node_for_define(pframe_group, pparameter_node, "PARAMETER", trace); - } - pass_1_for_statement_block(plist_node, pframe_group, &max_subframe_depth, trace); - pnode->subframe_var_count = pframe->var_count; - pnode->max_subframe_depth = max_subframe_depth; - if (trace) { - printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", - pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); - } - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - stkalc_subframe_group_free(pframe_group); -} - -// ---------------------------------------------------------------- -static void pass_1_for_begin_end_block(mlr_dsl_ast_node_t* pnode, int trace) { - if (trace) { - printf("\n"); - printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR %s BLOCK\n", pnode->text); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_BEGIN && pnode->type != MD_AST_NODE_TYPE_END); - - stkalc_subframe_t* pframe = stkalc_subframe_alloc(); - stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); - int max_subframe_depth = 1; - - pass_1_for_statement_block(pnode->pchildren->phead->pvvalue, pframe_group, &max_subframe_depth, trace); - pnode->subframe_var_count = pframe->var_count; - pnode->max_subframe_depth = max_subframe_depth; - if (trace) { - printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", - pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); - } - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - stkalc_subframe_group_free(pframe_group); -} - -// ---------------------------------------------------------------- -static void pass_1_for_main_block(mlr_dsl_ast_node_t* pnode, int trace) { - if (trace) { - printf("\n"); - printf("ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK\n"); - } - - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK); - - stkalc_subframe_t* pframe = stkalc_subframe_alloc(); - stkalc_subframe_group_t* pframe_group = stkalc_subframe_group_alloc(pframe, trace); - int max_subframe_depth = 1; - - pass_1_for_statement_block(pnode, pframe_group, &max_subframe_depth, trace); - pnode->subframe_var_count = pframe->var_count; - pnode->max_subframe_depth = max_subframe_depth; - if (trace) { - printf("BLOCK %s subframe_var_count=%d max_subframe_depth=%d\n", - pnode->text, pnode->subframe_var_count, pnode->max_subframe_depth); - } - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - stkalc_subframe_group_free(pframe_group); -} - -// ---------------------------------------------------------------- -// Curly-braced bodies of if/while/for/etc. - -static void pass_1_for_statement_block(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_BLOCK); - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } -} - -// Non-curly-braced triple-for starts/continuations/updates statement lists. -static void pass_1_for_statement_list(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_STATEMENT_LIST); - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - if (pnode->type == MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION) { // LHS - pass_1_for_local_definition(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT) { // LHS - pass_1_for_local_assignment(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT) { // LHS - pass_1_for_local_assignment(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { // RHS - pass_1_for_local_read(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { // RHS - pass_1_for_local_read(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_SREC) { - pass_1_for_srec_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY) { - pass_1_for_srec_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY) { - pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_OOSVAR) { - pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY) { - pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP) { - pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY) { - pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_MAP_LITERAL) { - pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY) { - pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_FUNC_RETVAL) { - pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY) { - pass_1_for_map_key_only_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_FOR_LOCAL_MAP) { - pass_1_for_map_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->type == MD_AST_NODE_TYPE_TRIPLE_FOR) { - pass_1_for_triple_for_loop(pnode, pframe_group, pmax_subframe_depth, trace); - - } else if (pnode->pchildren != NULL) { - pass_1_for_non_terminal_node(pnode, pframe_group, pmax_subframe_depth, trace); - - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_local_definition(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pvvalue; - - // RHS must exist for non-map types ('int x = 3', not 'int x') but must not for map types - // ('map x', not 'map x = {}'). - if (pnode->pchildren->phead->pnext) { - mlr_dsl_ast_node_t* pvaluenode = pnode->pchildren->phead->pnext->pvvalue; - pass_1_for_node(pvaluenode, pframe_group, pmax_subframe_depth, trace); - } - // Do the LHS after the RHS, in case 'var nonesuch = nonesuch' - stkalc_subframe_group_mutate_node_for_define(pframe_group, pnamenode, "DEFINE", trace); -} - -// ---------------------------------------------------------------- -static void pass_1_for_local_assignment(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pvaluenode = pnode->pchildren->phead->pnext->pvvalue; - pass_1_for_node(pvaluenode, pframe_group, pmax_subframe_depth, trace); - - // Do the LHS after the RHS, in case 'var nonesuch = nonesuch' - stkalc_subframe_group_mutate_node_for_write(pframe_group, pnamenode, "WRITE", trace); - - if (pnamenode->pchildren != NULL) { - // E.g. a[i][j]: variable is being written to; i and j are being read from. - for (sllve_t* pe = pnamenode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_local_read(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - stkalc_subframe_group_mutate_node_for_read(pframe_group, pnode, "READ", trace); - - if (pnode->pchildren != NULL) { - // E.g. a[i][j]: variable is being written to; i and j are being read from. - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } - } -} - -// ---------------------------------------------------------------- -// for (k,v in $*) { ... }: the k and v are scoped to the curly-brace block. -static void pass_1_for_srec_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pnode->text); - } - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pvvalue; - - mlr_dsl_ast_node_t* pknode = pvarsnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pvnode = pvarsnode->pchildren->phead->pnext->pvvalue; - stkalc_subframe_group_mutate_node_for_define(pframe_group, pknode, "FOR-BIND", trace); - stkalc_subframe_group_mutate_node_for_define(pframe_group, pvnode, "FOR-BIND", trace); - - pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); - pnode->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); - } -} - -// ---------------------------------------------------------------- -// for (k in $*) { ... }: k is scoped to the curly-brace block. -static void pass_1_for_srec_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pnode->text); - } - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pvvalue; - - mlr_dsl_ast_node_t* pknode = pvarsnode->pchildren->phead->pvvalue; - stkalc_subframe_group_mutate_node_for_define(pframe_group, pknode, "FOR-BIND", trace); - - pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); - pnode->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_map_key_only_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - mlr_dsl_ast_node_t* pkeynode = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pkeylistnode = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pnext->pvvalue; - - // The keylistnode is outside the block binding. In particular if there - // are any localvar reads in there, they shouldn't read from forloop - // boundvars. - // - // Example: 'for(a in @b[c][d]) { var e = a}': the c and d - // should be obtained from the enclosing scope. - - if (pkeylistnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { - // For-local-map: e.g. 'for(a in b[c][d])'. - pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); - } - if (pkeylistnode->pchildren != NULL) { - for (sllve_t* pe = pkeylistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } - } - - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pnode->text); - } - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - stkalc_subframe_group_mutate_node_for_define(pframe_group, pkeynode, "FOR-BIND", trace); - pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); - pnode->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_map_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - mlr_dsl_ast_node_t* pvarsnode = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pkeylistnode = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pblocknode = pnode->pchildren->phead->pnext->pnext->pvvalue; - - mlr_dsl_ast_node_t* pkeysnode = pvarsnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pvalnode = pvarsnode->pchildren->phead->pnext->pvvalue; - - // The keylistnode is outside the block binding. In particular if there - // are any localvar reads in there, they shouldn't read from forloop - // boundvars. - // - // Example: 'for(k, v in @a[b][c]) { var d = k; var e = v }': the b and c - // should be obtained from the enclosing scope. - if (pkeylistnode->type == MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE) { - // For-local-map: e.g. 'for(a,b in c[d][e])'. - pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); - } - if (pkeylistnode->pchildren == NULL) { - pass_1_for_node(pkeylistnode, pframe_group, pmax_subframe_depth, trace); - } else { - for (sllve_t* pe = pkeylistnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } - } - - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pnode->text); - } - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - for (sllve_t* pe = pkeysnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - stkalc_subframe_group_mutate_node_for_define(pframe_group, pkeynode, "FOR-BIND", trace); - } - stkalc_subframe_group_mutate_node_for_define(pframe_group, pvalnode, "FOR-BIND", trace); - pass_1_for_statement_block(pblocknode, pframe_group, pmax_subframe_depth, trace); - pnode->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_triple_for_loop(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - mlr_dsl_ast_node_t* pstarts_node = pnode->pchildren->phead->pvvalue; - mlr_dsl_ast_node_t* pcontinuations_node = pnode->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pupdates_node = pnode->pchildren->phead->pnext->pnext->pvvalue; - mlr_dsl_ast_node_t* pblock_node = pnode->pchildren->phead->pnext->pnext->pnext->pvvalue; - - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pnode->text); - } - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - pass_1_for_statement_list(pstarts_node, pframe_group, pmax_subframe_depth, trace); - pass_1_for_statement_list(pcontinuations_node, pframe_group, pmax_subframe_depth, trace); - pass_1_for_statement_list(pupdates_node, pframe_group, pmax_subframe_depth, trace); - pass_1_for_statement_block(pblock_node, pframe_group, pmax_subframe_depth, trace); - - pnode->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pnode->subframe_var_count); - } -} - -// ---------------------------------------------------------------- -static void pass_1_for_non_terminal_node(mlr_dsl_ast_node_t* pnode, stkalc_subframe_group_t* pframe_group, - int* pmax_subframe_depth, int trace) -{ - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - - if (pchild->type == MD_AST_NODE_TYPE_STATEMENT_BLOCK) { - - if (trace) { - leader_print(pframe_group->plist->length); - printf("PUSH SUBFRAME %s\n", pchild->text); - } - - stkalc_subframe_t* pnext_subframe = stkalc_subframe_alloc(); - stkalc_subframe_group_push(pframe_group, pnext_subframe); - if (*pmax_subframe_depth < pframe_group->plist->length) - *pmax_subframe_depth = pframe_group->plist->length; - - pass_1_for_statement_block(pchild, pframe_group, pmax_subframe_depth, trace); - pchild->subframe_var_count = pnext_subframe->var_count; - - stkalc_subframe_free(stkalc_subframe_group_pop(pframe_group)); - - if (trace) { - leader_print(pframe_group->plist->length); - printf("POP SUBFRAME %s subframe_var_count=%d\n", pnode->text, pchild->subframe_var_count); - } - - } else { - pass_1_for_node(pchild, pframe_group, pmax_subframe_depth, trace); - } - } -} - -// ================================================================ -static stkalc_subframe_t* stkalc_subframe_alloc() { - stkalc_subframe_t* pframe = mlr_malloc_or_die(sizeof(stkalc_subframe_t)); - pframe->var_count = 0; - pframe->pnames_to_indices = lhmsi_alloc(); - return pframe; -} - -static void stkalc_subframe_free(stkalc_subframe_t* pframe) { - if (pframe == NULL) - return; - lhmsi_free(pframe->pnames_to_indices); - free(pframe); -} - -static int stkalc_subframe_test_and_get(stkalc_subframe_t* pframe, char* name, int* pvalue) { - return lhmsi_test_and_get(pframe->pnames_to_indices, name, pvalue); -} - -static int stkalc_subframe_get(stkalc_subframe_t* pframe, char* name) { - return lhmsi_get(pframe->pnames_to_indices, name); -} - -static int stkalc_subframe_add(stkalc_subframe_t* pframe, char* name) { - int rv = pframe->var_count; - lhmsi_put(pframe->pnames_to_indices, name, pframe->var_count, NO_FREE); - pframe->var_count++; - return rv; -} - -// ================================================================ -static stkalc_subframe_group_t* stkalc_subframe_group_alloc(stkalc_subframe_t* pframe, int trace) { - stkalc_subframe_group_t* pframe_group = mlr_malloc_or_die(sizeof(stkalc_subframe_group_t)); - pframe_group->plist = sllv_alloc(); - sllv_push(pframe_group->plist, pframe); - stkalc_subframe_add(pframe, ""); - if (trace) { - leader_print(pframe_group->plist->length); - printf("ADD FOR ABSENT s @ %du%d\n", 0, 0); - } - return pframe_group; -} - -static void stkalc_subframe_group_free(stkalc_subframe_group_t* pframe_group) { - if (pframe_group == NULL) - return; - while (pframe_group->plist->phead != NULL) { - stkalc_subframe_free(sllv_pop(pframe_group->plist)); - } - sllv_free(pframe_group->plist); - free(pframe_group); -} - -static void stkalc_subframe_group_push(stkalc_subframe_group_t* pframe_group, stkalc_subframe_t* pframe) { - sllv_push(pframe_group->plist, pframe); -} - -static stkalc_subframe_t* stkalc_subframe_group_pop(stkalc_subframe_group_t* pframe_group) { - return sllv_pop(pframe_group->plist); -} - -// 'var x = 1' always applies to the current subframe. -static void stkalc_subframe_group_mutate_node_for_define(stkalc_subframe_group_t* pframe_group, - mlr_dsl_ast_node_t* pnode, char* desc, int trace) -{ - stkalc_subframe_t* pframe = pframe_group->plist->phead->pvvalue; - pnode->vardef_subframe_index = pframe_group->plist->length - 1; - if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { - fprintf(stderr, "%s: redefinition of variable %s in the same scope.\n", - MLR_GLOBALS.bargv0, pnode->text); - exit(1); - } else { - pnode->vardef_subframe_relative_index = stkalc_subframe_add(pframe, pnode->text); - } - if (trace) { - leader_print(pframe_group->plist->length); - printf("ADD %s %s @ %ds%d\n", desc, pnode->text, - pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); - } -} - -// 'x = 1' is one of two things: (1) already defined in a higher subframe and -// referenced in the current subframe; (2) not defined in a higher subframe, in -// which case it is hereby defined in the current subframe. -static void stkalc_subframe_group_mutate_node_for_write(stkalc_subframe_group_t* pframe_group, - mlr_dsl_ast_node_t* pnode, char* desc, int trace) -{ - char* op = "REUSE"; - int found = FALSE; - - // Search for definitions in current & higher subframes. - pnode->vardef_subframe_index = pframe_group->plist->length - 1; - for (sllve_t* pe = pframe_group->plist->phead; pe != NULL; pe = pe->pnext, pnode->vardef_subframe_index--) { - stkalc_subframe_t* pframe = pe->pvvalue; - if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { - found = TRUE; - break; - } - } - - // If not found, define locally. xxx or: here is where we would disallow implicit definitions. - if (!found) { - pnode->vardef_subframe_index = pframe_group->plist->length - 1; - stkalc_subframe_t* pframe = pframe_group->plist->phead->pvvalue; - pnode->vardef_subframe_relative_index = stkalc_subframe_add(pframe, pnode->text); - op = "ADD"; - } - - if (trace) { - leader_print(pframe_group->plist->length); - printf("%s %s %s @ %ds%d\n", op, desc, pnode->text, - pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); - } -} - -// The right-hand side of '$a = b' is one of two things: (1) already defined in a higher -// subframe and referenced in the current subframe; (2) not defined in a higher subframe, -// in which case the RHS evaluates to absent-null. An absent-null is always kept at index -// 0 in the frame. This is an important assumption to be tracked across modules, including -// here as well as the CST-node handlers. It's tested in the test-dsl-stack-allocation.mlr -// regtest case. -static void stkalc_subframe_group_mutate_node_for_read(stkalc_subframe_group_t* pframe_group, mlr_dsl_ast_node_t* pnode, - char* desc, int trace) -{ - char* op = "PRESENT"; - int found = FALSE; - - // Search for definitions in current & higher subframes. - pnode->vardef_subframe_index = pframe_group->plist->length - 1; - for (sllve_t* pe = pframe_group->plist->phead; pe != NULL; pe = pe->pnext, pnode->vardef_subframe_index--) { - stkalc_subframe_t* pframe = pe->pvvalue; - if (stkalc_subframe_test_and_get(pframe, pnode->text, &pnode->vardef_subframe_relative_index)) { - found = TRUE; - break; - } - } - - // Absent-null is indexed in this stack allocator by the "" variable name. - if (!found) { - stkalc_subframe_t* plast = pframe_group->plist->ptail->pvvalue; - pnode->vardef_subframe_relative_index = stkalc_subframe_get(plast, ""); - pnode->vardef_subframe_index = 0; - op = "ABSENT"; - } - - if (trace) { - leader_print(pframe_group->plist->length); - printf("%s %s %s @ %ds%d\n", desc, pnode->text, op, - pnode->vardef_subframe_relative_index, pnode->vardef_subframe_index); - } -} - -// ================================================================ -static void pass_2_for_top_level_block(mlr_dsl_ast_node_t* pnode, int trace) { - int subframe_depth = 0; - int var_count_below_subframe = 0; - int var_count_at_subframe = 0; - int max_var_depth = 0; - - int max_subframe_depth = pnode->max_subframe_depth; - MLR_INTERNAL_CODING_ERROR_IF(max_subframe_depth == MD_UNUSED_INDEX); - int* subframe_var_count_belows = mlr_malloc_or_die(max_subframe_depth * sizeof(int)); - for (int i = 0; i < pnode->max_subframe_depth; i++) - subframe_var_count_belows[i] = MD_UNUSED_INDEX; - - - if (trace) { - printf("\n"); - printf("ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [%s]\n", pnode->text); - } - pass_2_for_node(pnode, subframe_depth, var_count_below_subframe, var_count_at_subframe, &max_var_depth, - subframe_var_count_belows, max_subframe_depth, trace); - pnode->max_var_depth = max_var_depth; - free(subframe_var_count_belows); -} - -// ---------------------------------------------------------------- -static void pass_2_for_node(mlr_dsl_ast_node_t* pnode, - int subframe_depth, int var_count_below_subframe, int var_count_at_subframe, int* pmax_var_depth, - int* subframe_var_count_belows, int max_subframe_depth, - int trace) -{ - if (pnode->subframe_var_count != MD_UNUSED_INDEX) { - var_count_below_subframe += var_count_at_subframe; - var_count_at_subframe = pnode->subframe_var_count; - int depth = var_count_below_subframe + var_count_at_subframe; - if (depth > *pmax_var_depth) { - *pmax_var_depth = depth; - } - subframe_var_count_belows[subframe_depth] = var_count_below_subframe; - if (trace) { - leader_print(subframe_depth); - printf("SUBFRAME [%s] var_count_below=%d var_count_at=%d max_var_depth_so_far=%d subframe_depth=%d\n", - pnode->text, var_count_below_subframe, var_count_at_subframe, *pmax_var_depth, subframe_depth); - } - subframe_depth++; - } - - if (pnode->vardef_subframe_relative_index != MD_UNUSED_INDEX) { - - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_subframe_index < 0); - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_subframe_index >= max_subframe_depth); - pnode->vardef_frame_relative_index = subframe_var_count_belows[pnode->vardef_subframe_index] - + pnode->vardef_subframe_relative_index; - - if (trace) { - leader_print(subframe_depth); - - printf("NODE %s %ds%d (", - pnode->text, - pnode->vardef_subframe_relative_index, - pnode->vardef_subframe_index); - - for (int i = 0; i < subframe_depth; i++) { - if (i > 0) - printf(","); - printf("%d:%d", i, subframe_var_count_belows[i]); - } - printf(") -> %d\n", - pnode->vardef_frame_relative_index); - - } - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index < 0); - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index > *pmax_var_depth); - } - - if (pnode->pchildren != NULL) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - pass_2_for_node(pchild, subframe_depth, - var_count_below_subframe, var_count_at_subframe, pmax_var_depth, - subframe_var_count_belows, max_subframe_depth, - trace); - } - } - if (pnode->subframe_var_count != MD_UNUSED_INDEX) { - subframe_depth--; - subframe_var_count_belows[subframe_depth] = MD_UNUSED_INDEX; - } -} - -// ================================================================ -const char* STKALC_TRACE_LEADER = " "; -static void leader_print(int depth) { - for (int i = 0; i < depth; i++) - printf("%s", STKALC_TRACE_LEADER); -} diff --git a/c/dsl/return_state.h b/c/dsl/return_state.h deleted file mode 100644 index fad98bfc6..000000000 --- a/c/dsl/return_state.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef RETURN_STATE_H -#define RETURN_STATE_H - -#include "containers/mlhmmv.h" - -typedef struct _return_state_t { - boxed_xval_t retval; - int returned; -} return_state_t; - -#endif // RETURN_STATE_H diff --git a/c/dsl/rval_evaluator.h b/c/dsl/rval_evaluator.h deleted file mode 100644 index f6d11d4c5..000000000 --- a/c/dsl/rval_evaluator.h +++ /dev/null @@ -1,42 +0,0 @@ -// ================================================================ -// These evaluate right-hand-side values (rvals) and return mlrvals (mv_t). -// This is for scalar-valued contexts: almost all expressions except for rxval -// contexts. -// -// Values propagating up through the concrete syntax tree are always dynamically -// allocated: e.g. in '$c = $a . $b' the $a and $b are copied out as ephemerals; -// in the concat function their concatenation is computed and the ephemeral -// input arguments are freed; then the result is stored in field $c. -// -// (This is distinct from rxvals which are copy-on-write: -// expression-intermediate values are not always ephemeral.) -// ================================================================ - -#ifndef RVAL_EVALUATOR_H -#define RVAL_EVALUATOR_H - -#include "lib/context.h" -#include "containers/lrec.h" -#include "containers/lhmsmv.h" -#include "containers/mlhmmv.h" -#include "lib/mvfuncs.h" -#include "containers/boxed_xval.h" -#include "containers/local_stack.h" -#include "containers/loop_stack.h" -#include "lib/string_array.h" -#include "dsl/variables.h" - - -struct _rval_evaluator_t; // forward reference for method declarations - -typedef mv_t rval_evaluator_process_func_t(void* pvstate, variables_t* pvars); - -typedef void rval_evaluator_free_func_t(struct _rval_evaluator_t*); - -typedef struct _rval_evaluator_t { - void* pvstate; - rval_evaluator_process_func_t* pprocess_func; - rval_evaluator_free_func_t* pfree_func; -} rval_evaluator_t; - -#endif // RVAL_EVALUATOR_H diff --git a/c/dsl/rval_evaluators.h b/c/dsl/rval_evaluators.h deleted file mode 100644 index b25c78f6d..000000000 --- a/c/dsl/rval_evaluators.h +++ /dev/null @@ -1,211 +0,0 @@ -// ================================================================ -// NOTES: -// -// * Code here evaluates right-hand-side values (rvals) and return mlrvals (mv_t). -// -// * This is used by mlr filter and mlr put. -// -// * Comparison to mlrval.c: the latter is functions from mlrval(s) to mlrval; -// in this file we have the higher-level notion of evaluating lrec objects, -// using mlrval.c to do so. -// -// * Functions prototyped here evaluate right-hand-side values (rvals) and -// return mlrvals (mv_t). This is for scalar-valued contexts: almost all -// expressions except for rxval contexts. -// -// Values propagating up through the concrete syntax tree are always -// dynamically allocated: e.g. in '$c = $a . $b' the $a and $b are copied out -// as ephemerals; in the concat function their concatenation is computed and -// the ephemeral input arguments are freed; then the result is stored in field -// $c. -// -// This is distinct from rxvals which are copy-on-write: -// expression-intermediate values are not always ephemeral. -// -// * There are two kinds of lrec-evaluators here: those with _x_ in their names -// which accept various types of mlrval, with disposition-matrices in -// mlrval.c functions, and those with _i_/_f_/_b_/_s_ (int, float, boolean, -// string) which either type-check or type-coerce their arguments, invoking -// type-specific functions in mlrval.c. Those with _n_ take int or float -// and also use disposition matrices. In all cases it's the job of -// rval_evaluators.c to invoke functions here with mlrvals of the correct -// type(s). See also comments in lib/mlrval.h. -// -// ================================================================ - -#ifndef RVAL_EVALUATORS_H -#define RVAL_EVALUATORS_H - -#include -#include "lib/mvfuncs.h" -#include "containers/xvfuncs.h" -#include "dsl/mlr_dsl_ast.h" -#include "dsl/rval_evaluator.h" -#include "dsl/function_manager.h" - -// ================================================================ -// rval_expr_evaluators.c -// ================================================================ - -// Topmost function: -rval_evaluator_t* rval_evaluator_alloc_from_ast( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -// Next level: -rval_evaluator_t* rval_evaluator_alloc_from_field_name(char* field_name, int type_inferencing); -rval_evaluator_t* rval_evaluator_alloc_from_indirect_field_name(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags); -rval_evaluator_t* rval_evaluator_alloc_from_positional_srec_field_name(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags); -rval_evaluator_t* rval_evaluator_alloc_from_oosvar_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags); -rval_evaluator_t* rval_evaluator_alloc_from_local_map_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags); - -// This is used for evaluating strings and numbers in literal expressions, e.g. '$x = "abc"' -// or '$x = "left_\1". The values are subject to replacement with regex captures. See comments -// in mapper_put for more information. -// -// Compare rval_evaluator_alloc_from_string which doesn't do regex replacement: it is intended for -// oosvar names on expression left-hand sides (outside of this file). -rval_evaluator_t* rval_evaluator_alloc_from_string_literal(char* string); -rval_evaluator_t* rval_evaluator_alloc_from_numeric_literal(char* string); -rval_evaluator_t* rval_evaluator_alloc_from_boolean_literal(char* string); - -// This is intended only for oosvar names on expression left-hand sides. -// Compare rval_evaluator_alloc_from_numeric_literal. -rval_evaluator_t* rval_evaluator_alloc_from_string(char* string); - -rval_evaluator_t* rval_evaluator_alloc_from_boolean(int boolval); -rval_evaluator_t* rval_evaluator_alloc_from_environment(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags); -rval_evaluator_t* rval_evaluator_alloc_from_NF(); -rval_evaluator_t* rval_evaluator_alloc_from_NR(); -rval_evaluator_t* rval_evaluator_alloc_from_FNR(); -rval_evaluator_t* rval_evaluator_alloc_from_FILENAME(); -rval_evaluator_t* rval_evaluator_alloc_from_FILENUM(); -rval_evaluator_t* rval_evaluator_alloc_from_PI(); -rval_evaluator_t* rval_evaluator_alloc_from_E(); -rval_evaluator_t* rval_evaluator_alloc_from_IPS(); -rval_evaluator_t* rval_evaluator_alloc_from_IFS(); -rval_evaluator_t* rval_evaluator_alloc_from_IRS(); -rval_evaluator_t* rval_evaluator_alloc_from_OPS(); -rval_evaluator_t* rval_evaluator_alloc_from_OFS(); -rval_evaluator_t* rval_evaluator_alloc_from_ORS(); -rval_evaluator_t* rval_evaluator_alloc_from_context_variable(char* variable_name); -rval_evaluator_t* rval_evaluator_alloc_from_local_variable(int vardef_frame_relative_index); - -// For unit test: -rval_evaluator_t* rval_evaluator_alloc_from_mlrval(mv_t* pval); - -// ================================================================ -// rval_func_evaluators.c -// ================================================================ - -// These have some shared code that would otherwise be duplicated per-function in lib/mvfuncs.c. -rval_evaluator_t* rval_evaluator_alloc_from_variadic_func(mv_variadic_func_t* pfunc, rval_evaluator_t** pargs, int nargs); -rval_evaluator_t* rval_evaluator_alloc_from_b_b_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_and_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_or_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_xor_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_x_z_func(mv_zary_func_t* pfunc); -rval_evaluator_t* rval_evaluator_alloc_from_f_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_x_n_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_i_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_f_ff_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_x_xx_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_x_xx_nullable_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_f_fff_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); -rval_evaluator_t* rval_evaluator_alloc_from_i_ii_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2); -rval_evaluator_t* rval_evaluator_alloc_from_i_iii_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); -rval_evaluator_t* rval_evaluator_alloc_from_s_sii_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); -rval_evaluator_t* rval_evaluator_alloc_from_ternop(rval_evaluator_t* parg1, rval_evaluator_t* parg2, - rval_evaluator_t* parg3); - -rval_evaluator_t* rval_evaluator_alloc_from_s_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_s_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_s_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_f_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_i_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); -rval_evaluator_t* rval_evaluator_alloc_from_x_x_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1); - -rval_evaluator_t* rval_evaluator_alloc_from_s_si_func( - mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_x_xi_func( - mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_x_ns_func( - mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_x_ss_func( - mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_x_ssc_func( - mv_binary_arg3_capture_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_x_sr_func( - mv_binary_arg2_regex_func_t* pfunc, - rval_evaluator_t* parg1, - char* regex_string, - int ignore_case); - -rval_evaluator_t* rval_evaluator_alloc_from_x_se_func( - mv_binary_arg2_regextract_func_t* pfunc, - rval_evaluator_t* parg1, - char* regex_string, - int ignore_case); - -rval_evaluator_t* rval_evaluator_alloc_from_s_xs_func( - mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, - rval_evaluator_t* parg2); - -rval_evaluator_t* rval_evaluator_alloc_from_s_sss_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3); - -rval_evaluator_t* rval_evaluator_alloc_from_x_srs_func(mv_ternary_arg2_regex_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); - -rval_evaluator_t* rval_evaluator_alloc_from_x_ses_func(mv_ternary_arg2_regextract_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3); - -// ================================================================ -// rval_list_evaluators.c -// ================================================================ - -// Nominally for oosvar multikeys. -sllmv_t* evaluate_list(sllv_t* pevaluators, variables_t* pvars, int* pall_non_null_or_error); - -// ---------------------------------------------------------------- -// Type-inferenced srec-field getters for the expression-evaluators, as well as for boundvars in srec for-loops. - -// For RHS evaluation: -mv_t get_srec_value_string_only(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); -mv_t get_srec_value_string_float(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); -mv_t get_srec_value_string_float_int(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay); - -// For boundvars in for-srec: -typedef mv_t type_inferenced_srec_field_copy_getter_t(lrece_t* pentry, lhmsmv_t* ptyped_overlay); -mv_t get_copy_srec_value_string_only_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); -mv_t get_copy_srec_value_string_float_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); -mv_t get_copy_srec_value_string_float_int_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay); - -#endif // RVAL_EVALUATORS_H diff --git a/c/dsl/rval_expr_evaluators.c b/c/dsl/rval_expr_evaluators.c deleted file mode 100644 index 1952e85c0..000000000 --- a/c/dsl/rval_expr_evaluators.c +++ /dev/null @@ -1,1182 +0,0 @@ -#include -#include -#include -#include // for tolower(), toupper() -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mtrand.h" -#include "mapping/mapper.h" -#include "dsl/rval_evaluators.h" -#include "dsl/rxval_evaluators.h" // For indexed-function-call feature -#include "dsl/function_manager.h" -#include "dsl/context_flags.h" - -// ================================================================ -// See comments in rval_evaluators.h -// ================================================================ - -// ================================================================ -// The grammar permits certain statements which are syntactically invalid, (a) because it's awkward to handle -// there, and (b) because we get far better control over error messages here (vs. 'syntax error'). -// The context flags are used as the CST is built from the AST, for CST-build-time validation. -// This semantic analysis isn't a separate pass through the AST or CST since it's done while the -// CST is being constructed. - -rval_evaluator_t* rval_evaluator_alloc_from_ast(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if (pnode->pchildren == NULL) { - // leaf node - switch(pnode->type) { - - case MD_AST_NODE_TYPE_FIELD_NAME: - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return rval_evaluator_alloc_from_field_name(pnode->text, type_inferencing); - break; - - case MD_AST_NODE_TYPE_STRING_LITERAL: - // In input data such as echo x=3,y=4 | mlr put '$z=$x+$y', the 3 and 4 are strings - // which need parsing as integers. But in DSL expression literals such as 'put $z = "3" + 4' - // the "3" should not. - return rval_evaluator_alloc_from_string_literal(pnode->text); - break; - - case MD_AST_NODE_TYPE_NUMERIC_LITERAL: - // In input data such as echo x=3,y=4 | mlr put '$z=$x+$y', the 3 and 4 are strings - // which need parsing as integers. But in DSL expression literals such as 'put $z = "3" + 4' - // the "3" should not. - return rval_evaluator_alloc_from_numeric_literal(pnode->text); - break; - - case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: - return rval_evaluator_alloc_from_boolean_literal(pnode->text); - break; - - case MD_AST_NODE_TYPE_REGEXI: - return rval_evaluator_alloc_from_string_literal(pnode->text); - break; - - case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: - return rval_evaluator_alloc_from_context_variable(pnode->text); - break; - - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: - return rval_evaluator_alloc_from_local_variable(pnode->vardef_frame_relative_index); - break; - - case MD_AST_NODE_TYPE_FULL_SREC: - fprintf(stderr, "%s: $* is not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - case MD_AST_NODE_TYPE_FULL_OOSVAR: - fprintf(stderr, "%s: @* is not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - case MD_AST_NODE_TYPE_MAP_LITERAL: - fprintf(stderr, "%s: map-literals are not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - default: - MLR_INTERNAL_CODING_ERROR(); - return NULL; // not reached - break; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return rval_evaluator_alloc_from_indirect_field_name(pnode->pchildren->phead->pvvalue, pfmgr, - type_inferencing, context_flags); - - } else if (pnode->type == MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME) { - if (context_flags & IN_BEGIN_OR_END) { - fprintf(stderr, "%s: statements involving $-variables are not valid within begin or end blocks.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return rval_evaluator_alloc_from_positional_srec_field_name(pnode->pchildren->phead->pvvalue, pfmgr, - type_inferencing, context_flags); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_KEYLIST) { - return rval_evaluator_alloc_from_oosvar_keylist(pnode, pfmgr, type_inferencing, context_flags); - - } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE) { - return rval_evaluator_alloc_from_local_map_keylist(pnode, pfmgr, type_inferencing, context_flags); - - } else if (pnode->type == MD_AST_NODE_TYPE_INDEXED_FUNCTION_CALLSITE) { - return rval_evaluator_alloc_from_indexed_function_call(pnode, pfmgr, type_inferencing, context_flags); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if (pnode->type == MD_AST_NODE_TYPE_ENV) { - return rval_evaluator_alloc_from_environment(pnode, pfmgr, type_inferencing, context_flags); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else if ((pnode->type == MD_AST_NODE_TYPE_FUNCTION_CALLSITE) || (pnode->type == MD_AST_NODE_TYPE_OPERATOR)) { - return fmgr_alloc_provisional_from_operator_or_function_call(pfmgr, pnode, type_inferencing, context_flags); - - } else if (pnode->type == MD_AST_NODE_TYPE_FULL_SREC) { - fprintf(stderr, "%s: $* is not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - } else if (pnode->type == MD_AST_NODE_TYPE_FULL_OOSVAR) { - fprintf(stderr, "%s: @* is not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - } else if (pnode->type == MD_AST_NODE_TYPE_MAP_LITERAL) { - fprintf(stderr, "%s: map-literals are not valid within scalar contexts.\n", - MLR_GLOBALS.bargv0); - exit(1); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // This is the fall-through which typically gets hit when you update the AST-producing grammar but - // haven't yet implemented the CST handler for it. - } else { - MLR_INTERNAL_CODING_ERROR(); - return NULL; // not reached - } -} - -// ================================================================ -typedef struct _rval_evaluator_field_name_state_t { - char* field_name; -} rval_evaluator_field_name_state_t; - -static mv_t rval_evaluator_field_name_func_string_only(void* pvstate, variables_t* pvars) { - rval_evaluator_field_name_state_t* pstate = pvstate; - return get_srec_value_string_only(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); -} - -static mv_t rval_evaluator_field_name_func_string_float(void* pvstate, variables_t* pvars) { - rval_evaluator_field_name_state_t* pstate = pvstate; - return get_srec_value_string_float(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); -} - -static mv_t rval_evaluator_field_name_func_string_float_int(void* pvstate, variables_t* pvars) { - rval_evaluator_field_name_state_t* pstate = pvstate; - return get_srec_value_string_float_int(pstate->field_name, pvars->pinrec, pvars->ptyped_overlay); -} - -static void rval_evaluator_field_name_free(rval_evaluator_t* pevaluator) { - rval_evaluator_field_name_state_t* pstate = pevaluator->pvstate; - free(pstate->field_name); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_field_name(char* field_name, int type_inferencing) { - rval_evaluator_field_name_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_field_name_state_t)); - pstate->field_name = mlr_strdup_or_die(field_name); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = NULL; - switch (type_inferencing) { - case TYPE_INFER_STRING_ONLY: - pevaluator->pprocess_func = rval_evaluator_field_name_func_string_only; - break; - case TYPE_INFER_STRING_FLOAT: - pevaluator->pprocess_func = rval_evaluator_field_name_func_string_float; - break; - case TYPE_INFER_STRING_FLOAT_INT: - pevaluator->pprocess_func = rval_evaluator_field_name_func_string_float_int; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - pevaluator->pfree_func = rval_evaluator_field_name_free; - - return pevaluator; -} - -// ================================================================ -typedef struct _rval_evaluator_indirect_field_name_state_t { - rval_evaluator_t* pname_evaluator; -} rval_evaluator_indirect_field_name_state_t; - -static mv_t rval_evaluator_indirect_field_name_func_string_only(void* pvstate, variables_t* pvars) { - rval_evaluator_indirect_field_name_state_t* pstate = pvstate; - - mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); - if (mv_is_null(&mvname)) { - mv_free(&mvname); - return mv_absent(); - } - char free_flags = NO_FREE; - char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); - - mv_t rv = get_srec_value_string_only(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); - if (free_flags & FREE_ENTRY_VALUE) - free(indirect_field_name); - mv_free(&mvname); - return rv; -} - -static mv_t rval_evaluator_indirect_field_name_func_string_float(void* pvstate, variables_t* pvars) { - rval_evaluator_indirect_field_name_state_t* pstate = pvstate; - - mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); - if (mv_is_null(&mvname)) { - mv_free(&mvname); - return mv_absent(); - } - char free_flags = NO_FREE; - char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); - - mv_t rv = get_srec_value_string_float(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); - - if (free_flags & FREE_ENTRY_VALUE) - free(indirect_field_name); - mv_free(&mvname); - return rv; -} - -static mv_t rval_evaluator_indirect_field_name_func_string_float_int(void* pvstate, variables_t* pvars) { - rval_evaluator_indirect_field_name_state_t* pstate = pvstate; - - mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); - if (mv_is_null(&mvname)) { - mv_free(&mvname); - return mv_absent(); - } - char free_flags = NO_FREE; - char* indirect_field_name = mv_maybe_alloc_format_val(&mvname, &free_flags); - - mv_t rv = get_srec_value_string_float_int(indirect_field_name, pvars->pinrec, pvars->ptyped_overlay); - - if (free_flags & FREE_ENTRY_VALUE) - free(indirect_field_name); - mv_free(&mvname); - return rv; -} - -static void rval_evaluator_indirect_field_name_free(rval_evaluator_t* pevaluator) { - rval_evaluator_indirect_field_name_state_t* pstate = pevaluator->pvstate; - pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_indirect_field_name(mlr_dsl_ast_node_t* pnamenode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rval_evaluator_indirect_field_name_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_indirect_field_name_state_t)); - - pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = NULL; - switch (type_inferencing) { - case TYPE_INFER_STRING_ONLY: - pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_only; - break; - case TYPE_INFER_STRING_FLOAT: - pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_float; - break; - case TYPE_INFER_STRING_FLOAT_INT: - pevaluator->pprocess_func = rval_evaluator_indirect_field_name_func_string_float_int; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - pevaluator->pfree_func = rval_evaluator_indirect_field_name_free; - - return pevaluator; -} - -// ================================================================ -typedef struct _rval_evaluator_positional_field_name_state_t { - rval_evaluator_t* pname_evaluator; -} rval_evaluator_positional_field_name_state_t; - -static mv_t rval_evaluator_positional_field_name_func(void* pvstate, variables_t* pvars) { - rval_evaluator_positional_field_name_state_t* pstate = pvstate; - - mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); - if (mv_is_null(&mvname)) { - mv_free(&mvname); - return mv_absent(); - } - if (!mv_is_int(&mvname)) { - char free_flags = NO_FREE; - char* text = mv_maybe_alloc_format_val(&mvname, &free_flags); - fprintf(stderr, "%s: positional names must be integers; got \"%s\".\n", MLR_GLOBALS.bargv0, text); - if (free_flags) - free(text); - exit(1); - } - int positional_field_name = mvname.u.intv; - - char* key = lrec_get_key_by_position(pvars->pinrec, positional_field_name); - mv_t rv = mv_absent(); - if (key != NULL) { - rv = mv_from_string_with_free(mlr_strdup_or_die(key)); - } - mv_free(&mvname); - - return rv; -} - -static void rval_evaluator_positional_field_name_free(rval_evaluator_t* pevaluator) { - rval_evaluator_positional_field_name_state_t* pstate = pevaluator->pvstate; - pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_positional_srec_field_name(mlr_dsl_ast_node_t* pnamenode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rval_evaluator_positional_field_name_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_positional_field_name_state_t)); - - pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_positional_field_name_func; - pevaluator->pfree_func = rval_evaluator_positional_field_name_free; - - return pevaluator; -} - -// ================================================================ -typedef struct _rval_evaluator_oosvar_keylist_state_t { - sllv_t* poosvar_rhs_keylist_evaluators; -} rval_evaluator_oosvar_keylist_state_t; - -mv_t rval_evaluator_oosvar_keylist_func(void* pvstate, variables_t* pvars) { - rval_evaluator_oosvar_keylist_state_t* pstate = pvstate; - - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->poosvar_rhs_keylist_evaluators, pvars, &all_non_null_or_error); - - mv_t rv = mv_absent(); - if (all_non_null_or_error) { - int error = 0; - mv_t* pval = mlhmmv_root_look_up_and_ref_terminal(pvars->poosvars, pmvkeys, &error); - if (pval != NULL) { - if (pval->type == MT_STRING && *pval->u.strv == 0) - rv = mv_empty(); - else - rv = mv_copy(pval); - } - } - - sllmv_free(pmvkeys); - return rv; -} - -static void rval_evaluator_oosvar_keylist_free(rval_evaluator_t* pevaluator) { - rval_evaluator_oosvar_keylist_state_t* pstate = pevaluator->pvstate; - for (sllve_t* pe = pstate->poosvar_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* pevaluator = pe->pvvalue; - pevaluator->pfree_func(pevaluator); - } - sllv_free(pstate->poosvar_rhs_keylist_evaluators); - free(pstate); - free(pevaluator); -} - -// Example AST: -// -// $ mlr -n put -v '$y = @x[1]["two"][$3+4][@5]' -// list (statement_list): -// = (srec_assignment): -// y (field_name). -// oosvar_keylist (oosvar_keylist): -// x (string_literal). -// 1 (numeric_literal). -// two (numeric_literal). -// + (operator): -// 3 (field_name). -// 4 (numeric_literal). -// oosvar_keylist (oosvar_keylist): -// 5 (string_literal). - -rval_evaluator_t* rval_evaluator_alloc_from_oosvar_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rval_evaluator_oosvar_keylist_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_oosvar_keylist_state_t)); - - sllv_t* pkeylist_evaluators = sllv_alloc(); - - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); - } else { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, - type_inferencing, context_flags)); - } - } - pstate->poosvar_rhs_keylist_evaluators = pkeylist_evaluators; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = NULL; - pevaluator->pprocess_func = rval_evaluator_oosvar_keylist_func; - pevaluator->pfree_func = rval_evaluator_oosvar_keylist_free; - - return pevaluator; -} - -// ================================================================ -typedef struct _rval_evaluator_local_map_keylist_state_t { - int vardef_frame_relative_index; - sllv_t* plocal_map_rhs_keylist_evaluators; -} rval_evaluator_local_map_keylist_state_t; - -mv_t rval_evaluator_local_map_keylist_func(void* pvstate, variables_t* pvars) { - rval_evaluator_local_map_keylist_state_t* pstate = pvstate; - - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->plocal_map_rhs_keylist_evaluators, pvars, &all_non_null_or_error); - - mv_t rv = mv_absent(); - if (all_non_null_or_error) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - mv_t val = local_stack_frame_ref_terminal_from_indexed(pframe, pstate->vardef_frame_relative_index, pmvkeys); - if (val.type == MT_STRING && *val.u.strv == 0) - rv = mv_empty(); - else - rv = mv_copy(&val); - } - - sllmv_free(pmvkeys); - return rv; -} - -static void rval_evaluator_local_map_keylist_free(rval_evaluator_t* pevaluator) { - rval_evaluator_local_map_keylist_state_t* pstate = pevaluator->pvstate; - for (sllve_t* pe = pstate->plocal_map_rhs_keylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* pevaluator = pe->pvvalue; - pevaluator->pfree_func(pevaluator); - } - sllv_free(pstate->plocal_map_rhs_keylist_evaluators); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_local_map_keylist(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rval_evaluator_local_map_keylist_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_local_map_keylist_state_t)); - - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); - - pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; - - sllv_t* pkeylist_evaluators = sllv_alloc(); - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - mlr_dsl_ast_node_t* pkeynode = pe->pvvalue; - if (pkeynode->type == MD_AST_NODE_TYPE_STRING_LITERAL) { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_string(pkeynode->text)); - } else { - sllv_append(pkeylist_evaluators, rval_evaluator_alloc_from_ast(pkeynode, pfmgr, - type_inferencing, context_flags)); - } - } - pstate->plocal_map_rhs_keylist_evaluators = pkeylist_evaluators; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = NULL; - pevaluator->pprocess_func = rval_evaluator_local_map_keylist_func; - pevaluator->pfree_func = rval_evaluator_local_map_keylist_free; - - return pevaluator; -} - -// ================================================================ -// This is used for evaluating numbers in literal expressions, e.g. '$x = 4' - -typedef struct _rval_evaluator_numeric_literal_state_t { - mv_t literal; -} rval_evaluator_numeric_literal_state_t; - -mv_t rval_evaluator_non_string_literal_func(void* pvstate, variables_t* pvars) { - rval_evaluator_numeric_literal_state_t* pstate = pvstate; - return pstate->literal; -} - -mv_t rval_evaluator_string_literal_func(void* pvstate, variables_t* pvars) { - rval_evaluator_numeric_literal_state_t* pstate = pvstate; - char* input = pstate->literal.u.strv; - - if (pvars->ppregex_captures == NULL || *pvars->ppregex_captures == NULL) { - return mv_from_string_no_free(input); - } else { - int was_allocated = FALSE; - char* output = interpolate_regex_captures(input, *pvars->ppregex_captures, &was_allocated); - if (was_allocated) - return mv_from_string_with_free(output); - else - return mv_from_string_no_free(output); - } -} -static void rval_evaluator_numeric_literal_free(rval_evaluator_t* pevaluator) { - rval_evaluator_numeric_literal_state_t* pstate = pevaluator->pvstate; - mv_free(&pstate->literal); - free(pstate); - free(pevaluator); -} - -// How to handle echo a=1,b=2.0 | mlr put {flag} '$s = $a; $t = $b; $u = 3; $v = 4.0', where {flag} is -S, -F, or -// neither: -// * (no flag) TYPE_INFER_STRING_FLOAT_INT: a and s = int 1, b and t = float 2.0, u = int 3, v = float 4.0 -// * (-F flag) TYPE_INFER_STRING_FLOAT: a and s = float 1.0, b and t = float 2.0, u = int 3, v = float 4.0 -// * (-S flag) TYPE_INFER_STRING_ONLY: a and s = string "1", b and t = string "2.0", u = int 3, v = float 4.0 -// The -S/-F flags for put/filter are for type inferencing in record data, not in literal expressions. - -rval_evaluator_t* rval_evaluator_alloc_from_numeric_literal(char* string) { - rval_evaluator_numeric_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_numeric_literal_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - if (string == NULL) { - pstate->literal = mv_absent(); - pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; - } else { - long long intv; - double fltv; - - pevaluator->pprocess_func = NULL; - - if (mlr_try_int_from_string(string, &intv)) { - pstate->literal = mv_from_int(intv); - pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; - } else if (mlr_try_float_from_string(string, &fltv)) { - pstate->literal = mv_from_float(fltv); - pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; - } else { - pstate->literal = mv_from_string_no_free(string); - pevaluator->pprocess_func = rval_evaluator_string_literal_func; - } - } - pevaluator->pfree_func = rval_evaluator_numeric_literal_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -// This is used for evaluating strings and numbers in literal expressions, e.g. '$x = "abc"' -// or '$x = "left_\1". The values are subject to replacement with regex captures. See comments -// in mapper_put for more information. -// -// Compare rval_evaluator_alloc_from_string which doesn't do regex replacement: it is intended for -// oosvar names on expression left-hand sides (outside of this file). - -typedef struct _rval_evaluator_string_literal_state_t { - mv_t literal; -} rval_evaluator_string_literal_state_t; - -static void rval_evaluator_string_literal_free(rval_evaluator_t* pevaluator) { - rval_evaluator_string_literal_state_t* pstate = pevaluator->pvstate; - mv_free(&pstate->literal); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_string_literal(char* string) { - rval_evaluator_string_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_string_literal_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - if (string == NULL) { - pstate->literal = mv_absent(); - pevaluator->pprocess_func = rval_evaluator_non_string_literal_func; - } else { - pstate->literal = mv_from_string_no_free(string); - pevaluator->pprocess_func = rval_evaluator_string_literal_func; - } - pevaluator->pfree_func = rval_evaluator_string_literal_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -// This is intended only for oosvar names on expression left-hand sides (outside of this file). -// Compare rval_evaluator_alloc_from_string_literal. - -typedef struct _rval_evaluator_string_state_t { - char* string; -} rval_evaluator_string_state_t; - -mv_t rval_evaluator_string_func(void* pvstate, variables_t* pvars) { - rval_evaluator_string_state_t* pstate = pvstate; - return mv_from_string_no_free(pstate->string); -} -static void rval_evaluator_string_free(rval_evaluator_t* pevaluator) { - rval_evaluator_string_state_t* pstate = pevaluator->pvstate; - free(pstate->string); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_string(char* string) { - rval_evaluator_string_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_string_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - pstate->string = mlr_strdup_or_die(string); - pevaluator->pprocess_func = rval_evaluator_string_func; - pevaluator->pfree_func = rval_evaluator_string_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_boolean_literal_state_t { - mv_t literal; -} rval_evaluator_boolean_literal_state_t; - -mv_t rval_evaluator_boolean_literal_func(void* pvstate, variables_t* pvars) { - rval_evaluator_boolean_literal_state_t* pstate = pvstate; - return pstate->literal; -} - -static void rval_evaluator_boolean_literal_free(rval_evaluator_t* pevaluator) { - rval_evaluator_boolean_literal_state_t* pstate = pevaluator->pvstate; - mv_free(&pstate->literal); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_boolean_literal(char* string) { - rval_evaluator_boolean_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_boolean_literal_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - if (streq(string, "true")) { - pstate->literal = mv_from_true(); - } else if (streq(string, "false")) { - pstate->literal = mv_from_false(); - } else { - MLR_INTERNAL_CODING_ERROR(); - } - pevaluator->pprocess_func = rval_evaluator_boolean_literal_func; - pevaluator->pfree_func = rval_evaluator_boolean_literal_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -rval_evaluator_t* rval_evaluator_alloc_from_boolean(int boolval) { - rval_evaluator_boolean_literal_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_boolean_literal_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - pstate->literal = mv_from_bool(boolval); - pevaluator->pprocess_func = rval_evaluator_boolean_literal_func; - pevaluator->pfree_func = rval_evaluator_boolean_literal_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -// Example: -// $ mlr put -v '$y=ENV["X"]' ... -// AST BEGIN STATEMENTS (0): -// AST MAIN STATEMENTS (1): -// = (srec_assignment): -// y (field_name). -// env (env): -// ENV (env). -// X (numeric_literal). -// AST END STATEMENTS (0): - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_environment_state_t { - rval_evaluator_t* pname_evaluator; -} rval_evaluator_environment_state_t; - -mv_t rval_evaluator_environment_func(void* pvstate, variables_t* pvars) { - rval_evaluator_environment_state_t* pstate = pvstate; - - mv_t mvname = pstate->pname_evaluator->pprocess_func(pstate->pname_evaluator->pvstate, pvars); - if (mv_is_null(&mvname)) { - return mv_absent(); - } - char free_flags; - char* strname = mv_format_val(&mvname, &free_flags); - char* strvalue = getenv(strname); - if (strvalue == NULL) { - mv_free(&mvname); - if (free_flags & FREE_ENTRY_VALUE) - free(strname); - return mv_empty(); - } - mv_t rv = mv_from_string(strvalue, NO_FREE); - mv_free(&mvname); - if (free_flags & FREE_ENTRY_VALUE) - free(strname); - return rv; -} - -static void rval_evaluator_environment_free(rval_evaluator_t* pevaluator) { - rval_evaluator_environment_state_t* pstate = pevaluator->pvstate; - pstate->pname_evaluator->pfree_func(pstate->pname_evaluator); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_environment(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rval_evaluator_environment_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_environment_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - mlr_dsl_ast_node_t* pnamenode = pnode->pchildren->phead->pnext->pvvalue; - - pstate->pname_evaluator = rval_evaluator_alloc_from_ast(pnamenode, pfmgr, type_inferencing, context_flags); - pevaluator->pprocess_func = rval_evaluator_environment_func; - pevaluator->pfree_func = rval_evaluator_environment_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -mv_t rval_evaluator_NF_func(void* pvstate, variables_t* pvars) { - if (pvars->pinrec == NULL) { - // E.g. in a 'begin {...}' or 'end {...}' block - return mv_absent(); - } else{ - return mv_from_int(pvars->pinrec->field_count); - } -} -static void rval_evaluator_NF_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_NF() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_NF_func; - pevaluator->pfree_func = rval_evaluator_NF_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_NR_func(void* pvstate, variables_t* pvars) { - return mv_from_int(pvars->pctx->nr); -} -static void rval_evaluator_NR_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_NR() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_NR_func; - pevaluator->pfree_func = rval_evaluator_NR_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_FNR_func(void* pvstate, variables_t* pvars) { - return mv_from_int(pvars->pctx->fnr); -} -static void rval_evaluator_FNR_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_FNR() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_FNR_func; - pevaluator->pfree_func = rval_evaluator_FNR_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_FILENAME_func(void* pvstate, variables_t* pvars) { - return mv_from_string_no_free(pvars->pctx->filename); -} -static void rval_evaluator_FILENAME_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_FILENAME() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_FILENAME_func; - pevaluator->pfree_func = rval_evaluator_FILENAME_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_FILENUM_func(void* pvstate, variables_t* pvars) { - return mv_from_int(pvars->pctx->filenum); -} -static void rval_evaluator_FILENUM_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_FILENUM() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_FILENUM_func; - pevaluator->pfree_func = rval_evaluator_FILENUM_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_PI_func(void* pvstate, variables_t* pvars) { - return mv_from_float(M_PI); -} -static void rval_evaluator_PI_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_M_PI() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_PI_func; - pevaluator->pfree_func = rval_evaluator_PI_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_E_func(void* pvstate, variables_t* pvars) { - return mv_from_float(M_E); -} -static void rval_evaluator_E_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_M_E() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_E_func; - pevaluator->pfree_func = rval_evaluator_E_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_IPS_func(void* pvstate, variables_t* pvars) { - return mv_from_string_no_free(pvars->pctx->ips); -} -static void rval_evaluator_IPS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_IPS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_IPS_func; - pevaluator->pfree_func = rval_evaluator_IPS_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_IFS_func(void* pvstate, variables_t* pvars) { - return mv_from_string_no_free(pvars->pctx->ifs); -} -static void rval_evaluator_IFS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_IFS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_IFS_func; - pevaluator->pfree_func = rval_evaluator_IFS_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_IRS_func(void* pvstate, variables_t* pvars) { - context_t* pctx = pvars->pctx; - return mv_from_string_no_free( - pctx->auto_line_term_detected - ? pctx->auto_line_term - : pctx->irs - ); -} -static void rval_evaluator_IRS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_IRS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_IRS_func; - pevaluator->pfree_func = rval_evaluator_IRS_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_OPS_func(void* pvstate, variables_t* pvars) { - return mv_from_string_no_free(pvars->pctx->ops); -} -static void rval_evaluator_OPS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_OPS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_OPS_func; - pevaluator->pfree_func = rval_evaluator_OPS_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_OFS_func(void* pvstate, variables_t* pvars) { - return mv_from_string_no_free(pvars->pctx->ofs); -} -static void rval_evaluator_OFS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_OFS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_OFS_func; - pevaluator->pfree_func = rval_evaluator_OFS_free; - return pevaluator; -} - -// ---------------------------------------------------------------- -mv_t rval_evaluator_ORS_func(void* pvstate, variables_t* pvars) { - context_t* pctx = pvars->pctx; - return mv_from_string_no_free( - pctx->auto_line_term_detected - ? pctx->auto_line_term - : pctx->ors - ); -} -static void rval_evaluator_ORS_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_ORS() { - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = NULL; - pevaluator->pprocess_func = rval_evaluator_ORS_func; - pevaluator->pfree_func = rval_evaluator_ORS_free; - return pevaluator; -} - -// ================================================================ -rval_evaluator_t* rval_evaluator_alloc_from_context_variable(char* variable_name) { - if (streq(variable_name, "NF")) { return rval_evaluator_alloc_from_NF(); - } else if (streq(variable_name, "NR")) { return rval_evaluator_alloc_from_NR(); - } else if (streq(variable_name, "FNR")) { return rval_evaluator_alloc_from_FNR(); - } else if (streq(variable_name, "FILENAME")) { return rval_evaluator_alloc_from_FILENAME(); - } else if (streq(variable_name, "FILENUM")) { return rval_evaluator_alloc_from_FILENUM(); - } else if (streq(variable_name, "M_PI")) { return rval_evaluator_alloc_from_M_PI(); - } else if (streq(variable_name, "M_E")) { return rval_evaluator_alloc_from_M_E(); - } else if (streq(variable_name, "IPS")) { return rval_evaluator_alloc_from_IPS(); - } else if (streq(variable_name, "IFS")) { return rval_evaluator_alloc_from_IFS(); - } else if (streq(variable_name, "IRS")) { return rval_evaluator_alloc_from_IRS(); - } else if (streq(variable_name, "OPS")) { return rval_evaluator_alloc_from_OPS(); - } else if (streq(variable_name, "OFS")) { return rval_evaluator_alloc_from_OFS(); - } else if (streq(variable_name, "ORS")) { return rval_evaluator_alloc_from_ORS(); - } else { return NULL; - } -} - -// ================================================================ -typedef struct _rval_evaluator_from_local_variable_state_t { - int vardef_frame_relative_index; -} rval_evaluator_from_local_variable_state_t; - -mv_t rval_evaluator_from_local_variable_func(void* pvstate, variables_t* pvars) { - rval_evaluator_from_local_variable_state_t* pstate = pvstate; - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - mv_t val = local_stack_frame_get_terminal_from_nonindexed(pframe, pstate->vardef_frame_relative_index); - return mv_copy(&val); -} - -static void rval_evaluator_from_local_variable_free(rval_evaluator_t* pevaluator) { - rval_evaluator_from_local_variable_state_t* pstate = pevaluator->pvstate; - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_local_variable(int vardef_frame_relative_index) { - rval_evaluator_from_local_variable_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_from_local_variable_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - MLR_INTERNAL_CODING_ERROR_IF(vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->vardef_frame_relative_index = vardef_frame_relative_index; - pevaluator->pprocess_func = rval_evaluator_from_local_variable_func; - pevaluator->pfree_func = rval_evaluator_from_local_variable_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_mv_state_t { - mv_t literal; -} rval_evaluator_mv_state_t; - -mv_t rval_evaluator_mv_process(void* pvstate, variables_t* pvars) { - rval_evaluator_mv_state_t* pstate = pvstate; - return mv_copy(&pstate->literal); - -} -static void rval_evaluator_mv_free(rval_evaluator_t* pevaluator) { - rval_evaluator_mv_state_t* pstate = pevaluator->pvstate; - mv_free(&pstate->literal); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_mlrval(mv_t* pval) { - rval_evaluator_mv_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_mv_state_t)); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - pstate->literal = mv_copy(pval); - pevaluator->pprocess_func = rval_evaluator_mv_process; - pevaluator->pfree_func = rval_evaluator_mv_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -// Type-inferenced srec-field getters - -// ---------------------------------------------------------------- -mv_t get_srec_value_string_only(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - rv = mv_ref_type_infer_string(lrec_get(pinrec, field_name)); - rv = mv_copy(&rv); - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t get_srec_value_string_float(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - rv = mv_ref_type_infer_string_or_float(lrec_get(pinrec, field_name)); - rv = mv_copy(&rv); - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t get_srec_value_string_float_int(char* field_name, lrec_t* pinrec, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, field_name); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - rv = mv_ref_type_infer_string_or_float_or_int(lrec_get(pinrec, field_name)); - rv = mv_copy(&rv); - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t get_copy_srec_value_string_only_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - if (pentry->value == NULL) { - rv = mv_absent(); - } else if (*pentry->value == 0) { - rv = mv_empty(); - } else { - rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); - } - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t get_copy_srec_value_string_float_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - if (pentry->value == NULL) { - rv = mv_absent(); - } else if (*pentry->value == 0) { - rv = mv_empty(); - } else { - double fltv; - if (mlr_try_float_from_string(pentry->value, &fltv)) { - rv = mv_from_float(fltv); - } else { - rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); - } - } - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t get_copy_srec_value_string_float_int_aux(lrece_t* pentry, lhmsmv_t* ptyped_overlay) { - // See comments in rval_evaluator.h and mapper_put.c regarding the typed-overlay map. - mv_t* poverlay = lhmsmv_get(ptyped_overlay, pentry->key); - mv_t rv; - if (poverlay != NULL) { - // The lrec-evaluator logic will free its inputs and allocate new outputs, so we must copy - // a value here to feed into that. Otherwise the typed-overlay map would have its contents - // freed out from underneath it by the evaluator functions. - rv = mv_copy(poverlay); - } else { - if (pentry->value == NULL) { - rv = mv_absent(); - } else if (*pentry->value == 0) { - rv = mv_empty(); - } else { - long long intv; - double fltv; - if (mlr_try_int_from_string(pentry->value, &intv)) { - rv = mv_from_int(intv); - } else if (mlr_try_float_from_string(pentry->value, &fltv)) { - rv = mv_from_float(fltv); - } else { - rv = mv_from_string_with_free(mlr_strdup_or_die(pentry->value)); - } - } - } - return rv; -} diff --git a/c/dsl/rval_func_evaluators.c b/c/dsl/rval_func_evaluators.c deleted file mode 100644 index 1c1b5432e..000000000 --- a/c/dsl/rval_func_evaluators.c +++ /dev/null @@ -1,1463 +0,0 @@ -#include -#include -#include -#include // for tolower(), toupper() -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mtrand.h" -#include "mapping/mapper.h" -#include "dsl/context_flags.h" -#include "dsl/rval_evaluators.h" - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_variadic_state_t { - mv_variadic_func_t* pfunc; - rval_evaluator_t** pargs; - mv_t* pmvs; - int nargs; -} rval_evaluator_variadic_state_t; - -static mv_t rval_evaluator_variadic_func(void* pvstate, variables_t* pvars) { - rval_evaluator_variadic_state_t* pstate = pvstate; - int nargs = pstate->nargs; - - for (int i = 0; i < nargs; i++) { - rval_evaluator_t* parg = pstate->pargs[i]; - mv_t* pmv = &pstate->pmvs[i]; - *pmv = parg->pprocess_func(parg->pvstate, pvars); - } - - return pstate->pfunc(pstate->pmvs, nargs); -} - -static void rval_evaluator_variadic_free(rval_evaluator_t* pevaluator) { - rval_evaluator_variadic_state_t* pstate = pevaluator->pvstate; - - for (int i = 0; i < pstate->nargs; i++) - pstate->pargs[i]->pfree_func(pstate->pargs[i]); - free(pstate->pargs); - // contents already mv_freed by evaluator chains at process time - free(pstate->pmvs); - - free(pstate); - - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_variadic_func(mv_variadic_func_t* pfunc, rval_evaluator_t** pargs, int nargs) { - rval_evaluator_variadic_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_variadic_state_t)); - pstate->pfunc = pfunc; - pstate->pargs = pargs; - pstate->nargs = nargs; - pstate->pmvs = mlr_malloc_or_die(nargs * sizeof(mv_t)); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_variadic_func; - pevaluator->pfree_func = rval_evaluator_variadic_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_b_b_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_b_b_state_t; - -static mv_t rval_evaluator_b_b_func(void* pvstate, variables_t* pvars) { - rval_evaluator_b_b_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type != MT_BOOLEAN) - return mv_error(); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_b_b_free(rval_evaluator_t* pevaluator) { - rval_evaluator_b_b_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_b_b_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_b_b_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_b_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_b_b_func; - pevaluator->pfree_func = rval_evaluator_b_b_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_b_bb_state_t { - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_b_bb_state_t; - -// This is different from most of the lrec-evaluator functions in that it does short-circuiting: since is logical AND, -// the second argument is not evaluated if the first argument is false. -static mv_t rval_evaluator_b_bb_and_func(void* pvstate, variables_t* pvars) { - rval_evaluator_b_bb_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type == MT_BOOLEAN) { - if (val1.u.boolv == FALSE) - return val1; - } else if (val1.type != MT_ABSENT) { - return mv_error(); - } - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); - if (val2.type == MT_BOOLEAN) { - return val2; - } else if (val2.type == MT_ABSENT) { - return val1; - } else { - return mv_error(); - } -} - -// This is different from most of the lrec-evaluator functions in that it does short-circuiting: since is logical OR, -// the second argument is not evaluated if the first argument is true. -static mv_t rval_evaluator_b_bb_or_func(void* pvstate, variables_t* pvars) { - rval_evaluator_b_bb_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type == MT_BOOLEAN) { - if (val1.u.boolv == TRUE) - return val1; - } else if (val1.type != MT_ABSENT) { - return mv_error(); - } - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); - if (val2.type == MT_BOOLEAN) { - return val2; - } else if (val2.type == MT_ABSENT) { - return val1; - } else { - return mv_error(); - } -} - -static mv_t rval_evaluator_b_bb_xor_func(void* pvstate, variables_t* pvars) { - rval_evaluator_b_bb_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type != MT_BOOLEAN && val1.type != MT_ABSENT) { - return mv_error(); - } - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val2); - if (val2.type == MT_BOOLEAN) { - if (val1.type == MT_BOOLEAN) - return mv_from_bool(val1.u.boolv ^ val2.u.boolv); - else - return val2; - } else if (val2.type == MT_ABSENT) { - return val1; - } else { - return mv_error(); - } -} - -static void rval_evaluator_b_bb_free(rval_evaluator_t* pevaluator) { - rval_evaluator_b_bb_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_and_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { - rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_b_bb_and_func; - pevaluator->pfree_func = rval_evaluator_b_bb_free; - - return pevaluator; -} - -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_or_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { - rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_b_bb_or_func; - pevaluator->pfree_func = rval_evaluator_b_bb_free; - - return pevaluator; -} - -rval_evaluator_t* rval_evaluator_alloc_from_b_bb_xor_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2) { - rval_evaluator_b_bb_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_b_bb_state_t)); - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_b_bb_xor_func; - pevaluator->pfree_func = rval_evaluator_b_bb_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_z_state_t { - mv_zary_func_t* pfunc; -} rval_evaluator_x_z_state_t; - -static mv_t rval_evaluator_x_z_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_z_state_t* pstate = pvstate; - return pstate->pfunc(); -} -static void rval_evaluator_x_z_free(rval_evaluator_t* pevaluator) { - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_z_func(mv_zary_func_t* pfunc) { - rval_evaluator_x_z_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_z_state_t)); - pstate->pfunc = pfunc; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_z_func; - pevaluator->pfree_func = rval_evaluator_x_z_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_f_f_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_f_f_state_t; - -static mv_t rval_evaluator_f_f_func(void* pvstate, variables_t* pvars) { - rval_evaluator_f_f_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - mv_set_float_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type != MT_FLOAT) - return mv_error(); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_f_f_free(rval_evaluator_t* pevaluator) { - rval_evaluator_f_f_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_f_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_f_f_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_f_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_f_f_func; - pevaluator->pfree_func = rval_evaluator_f_f_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_n_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_x_n_state_t; - -static mv_t rval_evaluator_x_n_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_n_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_number_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_x_n_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_n_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_n_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_x_n_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_n_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_n_func; - pevaluator->pfree_func = rval_evaluator_x_n_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_i_i_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_i_i_state_t; - -static mv_t rval_evaluator_i_i_func(void* pvstate, variables_t* pvars) { - rval_evaluator_i_i_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - mv_set_int_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_i_i_free(rval_evaluator_t* pevaluator) { - rval_evaluator_i_i_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_i_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_i_i_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_i_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_i_i_func; - pevaluator->pfree_func = rval_evaluator_i_i_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_f_ff_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_f_ff_state_t; - -static mv_t rval_evaluator_f_ff_func(void* pvstate, variables_t* pvars) { - rval_evaluator_f_ff_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_float_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_float_nullable(&val2); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_f_ff_free(rval_evaluator_t* pevaluator) { - rval_evaluator_f_ff_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_f_ff_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_f_ff_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_ff_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_f_ff_func; - pevaluator->pfree_func = rval_evaluator_f_ff_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_xx_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_xx_state_t; - -static mv_t rval_evaluator_x_xx_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_xx_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - // nullities handled by full disposition matrices - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_x_xx_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_xx_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_xx_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_xx_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xx_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_xx_func; - pevaluator->pfree_func = rval_evaluator_x_xx_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -// This is for min/max which can return non-null when one argument is null -- -// in comparison to other functions which return null if *any* argument is -// null. - -typedef struct _rval_evaluator_x_xx_nullable_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_xx_nullable_state_t; - -static mv_t rval_evaluator_x_xx_nullable_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_xx_nullable_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_number_nullable(&val1); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_number_nullable(&val2); - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_x_xx_nullable_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_xx_nullable_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_xx_nullable_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_xx_nullable_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xx_nullable_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_xx_nullable_func; - pevaluator->pfree_func = rval_evaluator_x_xx_nullable_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_f_fff_state_t { - mv_ternary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; - rval_evaluator_t* parg3; -} rval_evaluator_f_fff_state_t; - -static mv_t rval_evaluator_f_fff_func(void* pvstate, variables_t* pvars) { - rval_evaluator_f_fff_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_float_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_float_nullable(&val2); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - mv_set_float_nullable(&val3); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); - - return pstate->pfunc(&val1, &val2, &val3); -} -static void rval_evaluator_f_fff_free(rval_evaluator_t* pevaluator) { - rval_evaluator_f_fff_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_f_fff_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - rval_evaluator_f_fff_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_fff_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_f_fff_func; - pevaluator->pfree_func = rval_evaluator_f_fff_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_i_ii_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_i_ii_state_t; - -static mv_t rval_evaluator_i_ii_func(void* pvstate, variables_t* pvars) { - rval_evaluator_i_ii_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_int_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type != MT_INT) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_int_nullable(&val2); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); - if (val2.type != MT_INT) - return mv_error(); - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_i_ii_free(rval_evaluator_t* pevaluator) { - rval_evaluator_i_ii_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_i_ii_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_i_ii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_ii_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_i_ii_func; - pevaluator->pfree_func = rval_evaluator_i_ii_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_i_iii_state_t { - mv_ternary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; - rval_evaluator_t* parg3; -} rval_evaluator_i_iii_state_t; - -static mv_t rval_evaluator_i_iii_func(void* pvstate, variables_t* pvars) { - rval_evaluator_i_iii_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_int_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - if (val1.type != MT_INT) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_int_nullable(&val2); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); - if (val2.type != MT_INT) - return mv_error(); - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - mv_set_int_nullable(&val3); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); - if (val3.type != MT_INT) - return mv_error(); - - return pstate->pfunc(&val1, &val2, &val3); -} -static void rval_evaluator_i_iii_free(rval_evaluator_t* pevaluator) { - rval_evaluator_i_iii_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_i_iii_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - rval_evaluator_i_iii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_iii_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_i_iii_func; - pevaluator->pfree_func = rval_evaluator_i_iii_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_ternop_state_t { - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; - rval_evaluator_t* parg3; -} rval_evaluator_ternop_state_t; - -static mv_t rval_evaluator_ternop_func(void* pvstate, variables_t* pvars) { - rval_evaluator_ternop_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - mv_set_boolean_strict(&val1); - - return val1.u.boolv - ? pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars) - : pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); -} -static void rval_evaluator_ternop_free(rval_evaluator_t* pevaluator) { - rval_evaluator_ternop_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_ternop(rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - rval_evaluator_ternop_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_ternop_state_t)); - pstate->parg1 = parg1; - pstate->parg2 = parg2; - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_ternop_func; - pevaluator->pfree_func = rval_evaluator_ternop_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_s_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_s_s_state_t; - -static mv_t rval_evaluator_s_s_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_s_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_s_s_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_s_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_s_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_s_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_s_func; - pevaluator->pfree_func = rval_evaluator_s_s_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_sii_state_t { - mv_ternary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; - rval_evaluator_t* parg3; -} rval_evaluator_s_sii_state_t; - -static mv_t rval_evaluator_s_sii_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_sii_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - mv_set_int_nullable(&val2); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val2); - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - mv_set_int_nullable(&val3); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val3); - - return pstate->pfunc(&val1, &val2, &val3); -} -static void rval_evaluator_s_sii_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_sii_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_sii_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - rval_evaluator_s_sii_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_sii_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_sii_func; - pevaluator->pfree_func = rval_evaluator_s_sii_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_f_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_s_f_state_t; - -static mv_t rval_evaluator_s_f_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_f_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - mv_set_float_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_s_f_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_f_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_f_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_s_f_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_f_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_f_func; - pevaluator->pfree_func = rval_evaluator_s_f_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_i_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_s_i_state_t; - -static mv_t rval_evaluator_s_i_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_i_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - mv_set_int_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_s_i_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_i_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_i_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_s_i_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_i_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_i_func; - pevaluator->pfree_func = rval_evaluator_s_i_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_f_s_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_f_s_state_t; - -static mv_t rval_evaluator_f_s_func(void* pvstate, variables_t* pvars) { - rval_evaluator_f_s_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_f_s_free(rval_evaluator_t* pevaluator) { - rval_evaluator_f_s_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_f_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_f_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_f_s_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_f_s_func; - pevaluator->pfree_func = rval_evaluator_f_s_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_i_s_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_i_s_state_t; - -static mv_t rval_evaluator_i_s_func(void* pvstate, variables_t* pvars) { - rval_evaluator_i_s_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - return pstate->pfunc(&val1); -} -static void rval_evaluator_i_s_free(rval_evaluator_t* pevaluator) { - rval_evaluator_i_s_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_i_s_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_i_s_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_i_s_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_i_s_func; - pevaluator->pfree_func = rval_evaluator_i_s_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_x_state_t { - mv_unary_func_t* pfunc; - rval_evaluator_t* parg1; -} rval_evaluator_x_x_state_t; - -static mv_t rval_evaluator_x_x_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_x_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - // nullity handled by full disposition matrices - return pstate->pfunc(&val1); -} -static void rval_evaluator_x_x_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_x_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_x_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1) { - rval_evaluator_x_x_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_x_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_x_func; - pevaluator->pfree_func = rval_evaluator_x_x_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_xi_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_xi_state_t; - -static mv_t rval_evaluator_x_xi_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_xi_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - if (val2.type != MT_INT) { - return mv_error(); - } - - // nullity of 1st argument handled by full disposition matrices - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_x_xi_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_xi_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_xi_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_xi_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_xi_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_xi_func; - pevaluator->pfree_func = rval_evaluator_x_xi_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_si_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_s_si_state_t; - -static mv_t rval_evaluator_s_si_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_si_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - if (val1.type != MT_EMPTY && val1.type != MT_STRING) { - return mv_error(); - } - if (val2.type != MT_INT) { - return mv_error(); - } - - // nullity of 1st argument handled by full disposition matrices - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_s_si_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_si_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_si_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_s_si_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_si_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_si_func; - pevaluator->pfree_func = rval_evaluator_s_si_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_ns_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_ns_state_t; - -static mv_t rval_evaluator_x_ns_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_ns_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_set_number_nullable(&val1); - NULL_OR_ERROR_OUT_FOR_NUMBERS(val1); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val2); - if (!mv_is_string_or_empty(&val2)) { - mv_free(&val1); - return mv_error(); - } - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_x_ns_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_ns_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_ns_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_ns_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ns_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_ns_func; - pevaluator->pfree_func = rval_evaluator_x_ns_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_ss_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_ss_state_t; - -static mv_t rval_evaluator_x_ss_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_ss_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val2); - if (!mv_is_string_or_empty(&val2)) - return mv_error(); - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_x_ss_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_ss_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_ss_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_ss_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ss_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_ss_func; - pevaluator->pfree_func = rval_evaluator_x_ss_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_ssc_state_t { - mv_binary_arg3_capture_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_x_ssc_state_t; - -static mv_t rval_evaluator_x_ssc_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_ssc_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val2); - if (!mv_is_string_or_empty(&val2)) - return mv_error(); - return pstate->pfunc(&val1, &val2, pvars->ppregex_captures); -} -static void rval_evaluator_x_ssc_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_ssc_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_ssc_func(mv_binary_arg3_capture_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_x_ssc_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ssc_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_ssc_func; - pevaluator->pfree_func = rval_evaluator_x_ssc_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_sr_state_t { - mv_binary_arg2_regex_func_t* pfunc; - rval_evaluator_t* parg1; - regex_t regex; - string_builder_t* psb; -} rval_evaluator_x_sr_state_t; - -static mv_t rval_evaluator_x_sr_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_sr_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - return pstate->pfunc(&val1, &pstate->regex, pstate->psb, pvars->ppregex_captures); -} -static void rval_evaluator_x_sr_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_sr_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - regfree(&pstate->regex); - sb_free(pstate->psb); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_sr_func(mv_binary_arg2_regex_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case) -{ - rval_evaluator_x_sr_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_sr_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - int cflags = ignore_case ? REG_ICASE : 0; - regcomp_or_die(&pstate->regex, regex_string, cflags); - pstate->psb = sb_alloc(MV_SB_ALLOC_LENGTH); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_sr_func; - pevaluator->pfree_func = rval_evaluator_x_sr_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_se_state_t { - mv_binary_arg2_regextract_func_t* pfunc; - rval_evaluator_t* parg1; - regex_t regex; -} rval_evaluator_x_se_state_t; - -static mv_t rval_evaluator_x_se_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_se_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - return pstate->pfunc(&val1, &pstate->regex); -} - -static void rval_evaluator_x_se_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_se_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - regfree(&pstate->regex); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_se_func(mv_binary_arg2_regextract_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case) -{ - rval_evaluator_x_se_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_se_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - - int cflags = ignore_case ? REG_ICASE : 0; - regcomp_or_die(&pstate->regex, regex_string, cflags); - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_se_func; - pevaluator->pfree_func = rval_evaluator_x_se_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_xs_state_t { - mv_binary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; -} rval_evaluator_s_xs_state_t; - -static mv_t rval_evaluator_s_xs_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_xs_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val2); - if (!mv_is_string_or_empty(&val2)) - return mv_error(); - - return pstate->pfunc(&val1, &val2); -} -static void rval_evaluator_s_xs_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_xs_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_xs_func(mv_binary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2) -{ - rval_evaluator_s_xs_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_xs_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_xs_func; - pevaluator->pfree_func = rval_evaluator_s_xs_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_s_sss_state_t { - mv_ternary_func_t* pfunc; - rval_evaluator_t* parg1; - rval_evaluator_t* parg2; - rval_evaluator_t* parg3; -} rval_evaluator_s_sss_state_t; - -static mv_t rval_evaluator_s_sss_func(void* pvstate, variables_t* pvars) { - rval_evaluator_s_sss_state_t* pstate = pvstate; - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val2); - if (!mv_is_string_or_empty(&val2)) { - mv_free(&val1); - return mv_error(); - } - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val3); - if (!mv_is_string_or_empty(&val3)) { - mv_free(&val1); - mv_free(&val2); - return mv_error(); - } - - return pstate->pfunc(&val1, &val2, &val3); -} -static void rval_evaluator_s_sss_free(rval_evaluator_t* pevaluator) { - rval_evaluator_s_sss_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_s_sss_func(mv_ternary_func_t* pfunc, - rval_evaluator_t* parg1, rval_evaluator_t* parg2, rval_evaluator_t* parg3) -{ - rval_evaluator_s_sss_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_s_sss_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = parg1; - pstate->parg2 = parg2; - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_s_sss_func; - pevaluator->pfree_func = rval_evaluator_s_sss_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_srs_state_t { - mv_ternary_arg2_regex_func_t* pfunc; - rval_evaluator_t* parg1; - regex_t regex; - rval_evaluator_t* parg3; - string_builder_t* psb; -} rval_evaluator_x_srs_state_t; - -static mv_t rval_evaluator_x_srs_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_srs_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val3); - if (!mv_is_string_or_empty(&val3)) { - mv_free(&val3); - return mv_error(); - } - - return pstate->pfunc(&val1, &pstate->regex, pstate->psb, &val3); -} -static void rval_evaluator_x_srs_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_srs_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - regfree(&pstate->regex); - pstate->parg3->pfree_func(pstate->parg3); - sb_free(pstate->psb); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_srs_func(mv_ternary_arg2_regex_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) -{ - rval_evaluator_x_srs_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_srs_state_t)); - pstate->pfunc = pfunc; - - pstate->parg1 = parg1; - - int cflags = ignore_case ? REG_ICASE : 0; - regcomp_or_die(&pstate->regex, regex_string, cflags); - pstate->psb = sb_alloc(MV_SB_ALLOC_LENGTH); - - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_srs_func; - pevaluator->pfree_func = rval_evaluator_x_srs_free; - - return pevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rval_evaluator_x_ses_state_t { - mv_ternary_arg2_regextract_func_t* pfunc; - rval_evaluator_t* parg1; - regex_t regex; - rval_evaluator_t* parg3; -} rval_evaluator_x_ses_state_t; - -static mv_t rval_evaluator_x_ses_func(void* pvstate, variables_t* pvars) { - rval_evaluator_x_ses_state_t* pstate = pvstate; - - mv_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val1); - if (!mv_is_string_or_empty(&val1)) - return mv_error(); - - mv_t val3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - NULL_OR_ERROR_OUT_FOR_STRINGS(val3); - if (!mv_is_string_or_empty(&val3)) { - mv_free(&val3); - return mv_error(); - } - - return pstate->pfunc(&val1, &pstate->regex, &val3); -} - -static void rval_evaluator_x_ses_free(rval_evaluator_t* pevaluator) { - rval_evaluator_x_ses_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - regfree(&pstate->regex); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pevaluator); -} - -rval_evaluator_t* rval_evaluator_alloc_from_x_ses_func(mv_ternary_arg2_regextract_func_t* pfunc, - rval_evaluator_t* parg1, char* regex_string, int ignore_case, rval_evaluator_t* parg3) -{ - rval_evaluator_x_ses_state_t* pstate = mlr_malloc_or_die(sizeof(rval_evaluator_x_ses_state_t)); - pstate->pfunc = pfunc; - - pstate->parg1 = parg1; - - int cflags = ignore_case ? REG_ICASE : 0; - regcomp_or_die(&pstate->regex, regex_string, cflags); - - pstate->parg3 = parg3; - - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rval_evaluator_x_ses_func; - pevaluator->pfree_func = rval_evaluator_x_ses_free; - - return pevaluator; -} diff --git a/c/dsl/rval_list_evaluators.c b/c/dsl/rval_list_evaluators.c deleted file mode 100644 index 09d43d996..000000000 --- a/c/dsl/rval_list_evaluators.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include // for tolower(), toupper() -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mtrand.h" -#include "mapping/mapper.h" -#include "dsl/rval_evaluators.h" - -// ================================================================ -// See comments in rval_evaluators.h -// ================================================================ - -sllmv_t* evaluate_list(sllv_t* pevaluators, variables_t* pvars, int* pall_non_null_or_error) { - sllmv_t* pmvs = sllmv_alloc(); - int all_non_null_or_error = TRUE; - for (sllve_t* pe = pevaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* pevaluator = pe->pvvalue; - mv_t mv = pevaluator->pprocess_func(pevaluator->pvstate, pvars); - if (mv_is_null_or_error(&mv)) { - all_non_null_or_error = FALSE; - break; - } - // Don't free the mlrval since its memory will be managed by the sllmv. - sllmv_append_with_free(pmvs, &mv); - } - - *pall_non_null_or_error = all_non_null_or_error; - return pmvs; -} diff --git a/c/dsl/rxval_evaluator.h b/c/dsl/rxval_evaluator.h deleted file mode 100644 index 413a2af83..000000000 --- a/c/dsl/rxval_evaluator.h +++ /dev/null @@ -1,46 +0,0 @@ -// ================================================================ -// These evaluate right-hand-side extended values (rxvals) and return the same. -// -// For scalar (non-extended) right-hand side values, everything is ephemeral as -// it propagates up through the concrete syntax tree: e.g. in '$c = $a . $b' the -// $a and $b are copied out as ephemerals; in the concat function their -// concatenation is computed and the ephemeral input arguments are freed; then -// the result is stored in field $c. -// -// But for extended values (here) everything is copy-on-write: -// expression-intermediate values are not always ephemeral. This is due to the -// size of the data involved. We can do dump or emit of a nested hashmap stored -// in an oosvar or local without copying it; we can do mapdiff of two map-valued -// variables while not modifying or copying either argument. -// -// The boxed_xval_t decorates mlhmmv_value_t (extended value) with an -// is_ephemeral flag. The mlhmmv_value_t in turn has a map or a scalar. -// ================================================================ - -#ifndef RXVAL_EVALUATOR_H -#define RXVAL_EVALUATOR_H - -#include "lib/context.h" -#include "containers/lrec.h" -#include "containers/lhmsmv.h" -#include "containers/mlhmmv.h" -#include "lib/mvfuncs.h" -#include "containers/boxed_xval.h" -#include "containers/local_stack.h" -#include "containers/loop_stack.h" -#include "lib/string_array.h" - -// ---------------------------------------------------------------- -struct _rxval_evaluator_t; // forward reference for method declarations - -typedef boxed_xval_t rxval_evaluator_process_func_t(void* pvstate, variables_t* pvars); - -typedef void rxval_evaluator_free_func_t(struct _rxval_evaluator_t*); - -typedef struct _rxval_evaluator_t { - void* pvstate; - rxval_evaluator_process_func_t* pprocess_func; - rxval_evaluator_free_func_t* pfree_func; -} rxval_evaluator_t; - -#endif // RXVAL_EVALUATOR_H diff --git a/c/dsl/rxval_evaluators.h b/c/dsl/rxval_evaluators.h deleted file mode 100644 index 60a1980ae..000000000 --- a/c/dsl/rxval_evaluators.h +++ /dev/null @@ -1,148 +0,0 @@ -// ================================================================ -// These evaluate right-hand-side extended values (rxvals) and return the same. -// -// For scalar (non-extended) right-hand side values, everything is ephemeral as -// it propagates up through the concrete syntax tree: e.g. in '$c = $a . $b' the -// $a and $b are copied out as ephemerals; in the concat function their -// concatenation is computed and the ephemeral input arguments are freed; then -// the result is stored in field $c. -// -// But for extended values (here) everything is copy-on-write: -// expression-intermediate values are not always ephemeral. This is due to the -// size of the data involved. We can do dump or emit of a nested hashmap stored -// in an oosvar or local without copying it; we can do mapdiff of two map-valued -// variables while not modifying or copying either argument. -// -// The boxed_xval_t decorates mlhmmv_value_t (extended value) with an -// is_ephemeral flag. The mlhmmv_value_t in turn has a map or a scalar. -// ================================================================ - -#ifndef RXVAL_EVALUATORS_H -#define RXVAL_EVALUATORS_H - -#include -#include "lib/mvfuncs.h" -#include "containers/xvfuncs.h" -#include "dsl/mlr_dsl_ast.h" -#include "dsl/rval_evaluator.h" -#include "dsl/rxval_evaluator.h" -#include "dsl/function_manager.h" - -// ================================================================ -// rxval_expr_evaluators.c - -// ---------------------------------------------------------------- -// Topmost functions: - -rxval_evaluator_t* rxval_evaluator_alloc_from_ast( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -// Next level: -rxval_evaluator_t* rxval_evaluator_alloc_from_map_literal( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_function_callsite( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_nonindexed_local_variable( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_local_variable( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_function_call( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -// Srec assignments have output that is rval not rxval (scalar, not map). But for -// indexed function calls we have a function which produces rxval, indexed down by a -// keylist, to produce an rval as a final result. This needs special handling. -rval_evaluator_t* rval_evaluator_alloc_from_indexed_function_call( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_oosvar_keylist( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_full_oosvar( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_full_srec( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_wrapping_rval( - mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags); - -// ================================================================ -// rxval_func_evaluators.c - -rxval_evaluator_t* rxval_evaluator_alloc_from_variadic_func( - xv_variadic_func_t* pfunc, - sllv_t* parg_nodes, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_x_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_m_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_mx_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_ms_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_ss_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_mss_func( - xv_ternary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - mlr_dsl_ast_node_t* parg3_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_sss_func( - xv_ternary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - mlr_dsl_ast_node_t* parg3_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags); - -rxval_evaluator_t* rxval_evaluator_alloc_from_A_x_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags, - char* desc); - -#endif // RXVAL_EVALUATORS_H diff --git a/c/dsl/rxval_expr_evaluators.c b/c/dsl/rxval_expr_evaluators.c deleted file mode 100644 index e90945462..000000000 --- a/c/dsl/rxval_expr_evaluators.c +++ /dev/null @@ -1,723 +0,0 @@ -#include -#include -#include -#include // for tolower(), toupper() -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mtrand.h" -#include "dsl/context_flags.h" -#include "dsl/keylist_evaluators.h" -#include "dsl/rval_evaluators.h" -#include "dsl/rxval_evaluators.h" -#include "dsl/function_manager.h" -#include "mapping/mapper.h" - -// ================================================================ -// See comments in rval_evaluators.h -// ================================================================ - -// ---------------------------------------------------------------- -rxval_evaluator_t* rxval_evaluator_alloc_from_ast(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - switch(pnode->type) { - - case MD_AST_NODE_TYPE_MAP_LITERAL: - return rxval_evaluator_alloc_from_map_literal( - pnode, pfmgr, type_inferencing, context_flags); - return NULL; - break; - - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: - return rxval_evaluator_alloc_from_nonindexed_local_variable( - pnode, pfmgr, type_inferencing, context_flags); - return NULL; - break; - - case MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE: - return rxval_evaluator_alloc_from_indexed_local_variable( - pnode, pfmgr, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_INDEXED_FUNCTION_CALLSITE: - return rxval_evaluator_alloc_from_indexed_function_call( - pnode, pfmgr, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: - return rxval_evaluator_alloc_from_oosvar_keylist( - pnode, pfmgr, type_inferencing, context_flags); - break; - - case MD_AST_NODE_TYPE_FULL_OOSVAR: - return rxval_evaluator_alloc_from_full_oosvar( - pnode, pfmgr, type_inferencing, context_flags); - return NULL; - break; - - case MD_AST_NODE_TYPE_FULL_SREC: - return rxval_evaluator_alloc_from_full_srec( - pnode, pfmgr, type_inferencing, context_flags); - return NULL; - break; - - case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: - return fmgr_xalloc_provisional_from_operator_or_function_call(pfmgr, pnode, type_inferencing, context_flags); - break; - - default: - return rxval_evaluator_alloc_wrapping_rval(pnode, pfmgr, type_inferencing, context_flags); - break; - } -} - -// ---------------------------------------------------------------- -// Srec assignments have output that is rval not rxval (scalar, not map). But for -// indexed function calls we have a function which produces rxval, indexed down by a -// keylist, to produce an rval as a final result. This needs special handling. -// Here we invoke the rxval evaluator, then unbox it and return the resulting rval. - -typedef struct _rval_evaluator_indexed_function_call_state_t { - rxval_evaluator_t* prxval_evaluator; -} rval_evaluator_indexed_function_call_state_t; - -static mv_t rval_evaluator_indexed_function_call_func(void* pvstate, variables_t* pvars) { - rval_evaluator_indexed_function_call_state_t* pstate = pvstate; - - rxval_evaluator_t* prxval_evaluator = pstate->prxval_evaluator; - boxed_xval_t boxed_xval = prxval_evaluator->pprocess_func(prxval_evaluator->pvstate, pvars); - if (boxed_xval.xval.is_terminal) { - return boxed_xval.xval.terminal_mlrval; - } else { - return mv_absent(); - } - -} -static void rval_evaluator_indexed_function_call_free(rval_evaluator_t* pevaluator) { - rval_evaluator_indexed_function_call_state_t* pstate = pevaluator->pvstate; - pstate->prxval_evaluator->pfree_func(pstate->prxval_evaluator); - free(pstate); - free(pevaluator); -} -rval_evaluator_t* rval_evaluator_alloc_from_indexed_function_call( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rval_evaluator_indexed_function_call_state_t* pstate = mlr_malloc_or_die( - sizeof(rval_evaluator_indexed_function_call_state_t) - ); - rval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rval_evaluator_t)); - - pstate->prxval_evaluator = rxval_evaluator_alloc_from_indexed_function_call( - pnode, pfmgr, type_inferencing, context_flags); - - pevaluator->pprocess_func = rval_evaluator_indexed_function_call_func; - pevaluator->pfree_func = rval_evaluator_indexed_function_call_free; - - pevaluator->pvstate = pstate; - return pevaluator; -} - -// ================================================================ -// Map-literal input: -// -// { -// "a" : 1, -// "b" : { -// "x" : 7, -// "y" : 8, -// }, -// "c" : 3, -// } -// -// Map-literal AST: -// -// $ mlr --from s put -v -q 'm={"a":NR,"b":{"x":999},"c":3};dump m' -// text="block", type=STATEMENT_BLOCK: -// text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: -// text="m", type=NONINDEXED_LOCAL_VARIABLE. -// text="map_literal", type=MAP_LITERAL: -// text="mappair", type=MAP_LITERAL_PAIR: -// text="mapkey", type=MAP_LITERAL: -// text="a", type=STRING_LITERAL. -// text="mapval", type=MAP_LITERAL: -// text="NR", type=CONTEXT_VARIABLE. -// text="mappair", type=MAP_LITERAL_PAIR: -// text="mapkey", type=MAP_LITERAL: -// text="b", type=STRING_LITERAL. -// text="mapval", type=MAP_LITERAL: -// text="map_literal", type=MAP_LITERAL: -// text="mappair", type=MAP_LITERAL_PAIR: -// text="mapkey", type=MAP_LITERAL: -// text="x", type=STRING_LITERAL. -// text="mapval", type=MAP_LITERAL: -// text="999", type=NUMERIC_LITERAL. -// text="mappair", type=MAP_LITERAL_PAIR: -// text="mapkey", type=MAP_LITERAL: -// text="c", type=STRING_LITERAL. -// text="mapval", type=MAP_LITERAL: -// text="3", type=NUMERIC_LITERAL. -// text="dump", type=DUMP: -// text=">", type=FILE_WRITE: -// text="stdout", type=STDOUT: -// text="m", type=NONINDEXED_LOCAL_VARIABLE. - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct _map_literal_list_evaluator_t { - sllv_t* pkvpair_evaluators; -} map_literal_list_evaluator_t; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct _map_literal_kvpair_evaluator_t { - rval_evaluator_t* pkey_evaluator; - int is_terminal; - rxval_evaluator_t* pxval_evaluator; - map_literal_list_evaluator_t* plist_evaluator; -} map_literal_kvpair_evaluator_t; - -// ---------------------------------------------------------------- -static map_literal_list_evaluator_t* allocate_map_literal_evaluator_from_ast( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - map_literal_list_evaluator_t* plist_evaluator = mlr_malloc_or_die( - sizeof(map_literal_list_evaluator_t)); - plist_evaluator->pkvpair_evaluators = sllv_alloc(); - MLR_INTERNAL_CODING_ERROR_IF(pnode->type != MD_AST_NODE_TYPE_MAP_LITERAL); - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - - map_literal_kvpair_evaluator_t* pkvpair = mlr_malloc_or_die( - sizeof(map_literal_kvpair_evaluator_t)); - *pkvpair = (map_literal_kvpair_evaluator_t) { - .pkey_evaluator = NULL, - .is_terminal = TRUE, - .pxval_evaluator = NULL, - .plist_evaluator = NULL, - }; - - mlr_dsl_ast_node_t* pchild = pe->pvvalue; - MLR_INTERNAL_CODING_ERROR_IF(pchild->type != MD_AST_NODE_TYPE_MAP_LITERAL_PAIR); - - mlr_dsl_ast_node_t* pleft = pchild->pchildren->phead->pvvalue; - MLR_INTERNAL_CODING_ERROR_IF(pleft->type != MD_AST_NODE_TYPE_MAP_LITERAL_KEY); - mlr_dsl_ast_node_t* pkeynode = pleft->pchildren->phead->pvvalue; - pkvpair->pkey_evaluator = rval_evaluator_alloc_from_ast(pkeynode, pfmgr, - type_inferencing, context_flags); - - mlr_dsl_ast_node_t* pright = pchild->pchildren->phead->pnext->pvvalue; - mlr_dsl_ast_node_t* pvalnode = pright->pchildren->phead->pvvalue; - if (pright->type == MD_AST_NODE_TYPE_MAP_LITERAL_VALUE) { - pkvpair->pxval_evaluator = rxval_evaluator_alloc_from_ast(pvalnode, pfmgr, - type_inferencing, context_flags); - } else if (pright->type == MD_AST_NODE_TYPE_MAP_LITERAL) { - pkvpair->is_terminal = FALSE; - pkvpair->plist_evaluator = allocate_map_literal_evaluator_from_ast( - pvalnode, pfmgr, type_inferencing, context_flags); - } else { - MLR_INTERNAL_CODING_ERROR(); - } - - sllv_append(plist_evaluator->pkvpair_evaluators, pkvpair); - } - return plist_evaluator; -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -typedef struct _rxval_evaluator_from_map_literal_state_t { - map_literal_list_evaluator_t* proot_list_evaluator; -} rxval_evaluator_from_map_literal_state_t; - -static void rxval_evaluator_from_map_literal_aux( - rxval_evaluator_from_map_literal_state_t* pstate, - map_literal_list_evaluator_t* plist_evaluator, - mlhmmv_level_t* plevel, - variables_t* pvars) -{ - for (sllve_t* pe = plist_evaluator->pkvpair_evaluators->phead; pe != NULL; pe = pe->pnext) { - map_literal_kvpair_evaluator_t* pkvpair = pe->pvvalue; - - // mlhmmv_level_put_terminal will copy keys and values - mv_t mvkey = pkvpair->pkey_evaluator->pprocess_func(pkvpair->pkey_evaluator->pvstate, pvars); - if (pkvpair->is_terminal) { - boxed_xval_t boxed_xval = pkvpair->pxval_evaluator->pprocess_func( - pkvpair->pxval_evaluator->pvstate, pvars); - if (boxed_xval.is_ephemeral) { - mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval); - } else { - mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval); - mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, ©_xval); - } - } else { - mlhmmv_level_t* pnext_level = mlhmmv_level_put_empty_map(plevel, &mvkey); - rxval_evaluator_from_map_literal_aux(pstate, pkvpair->plist_evaluator, pnext_level, pvars); - } - mv_free(&mvkey); - } -} - -static boxed_xval_t rxval_evaluator_from_map_literal_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_map_literal_state_t* pstate = pvstate; - - mlhmmv_xvalue_t xval = mlhmmv_xvalue_alloc_empty_map(); - - rxval_evaluator_from_map_literal_aux(pstate, pstate->proot_list_evaluator, xval.pnext_level, pvars); - - return (boxed_xval_t) { - .xval = xval, - .is_ephemeral = TRUE, - }; -} - -static void rxval_evaluator_from_map_literal_free_aux(map_literal_list_evaluator_t* plist_evaluator) { - for (sllve_t* pe = plist_evaluator->pkvpair_evaluators->phead; pe != NULL; pe = pe->pnext) { - map_literal_kvpair_evaluator_t* pkvpair_evaluator = pe->pvvalue; - if (pkvpair_evaluator->pkey_evaluator != NULL) { - pkvpair_evaluator->pkey_evaluator->pfree_func(pkvpair_evaluator->pkey_evaluator); - } - if (pkvpair_evaluator->pxval_evaluator != NULL) { - pkvpair_evaluator->pxval_evaluator->pfree_func(pkvpair_evaluator->pxval_evaluator); - } - if (pkvpair_evaluator->plist_evaluator != NULL) { - rxval_evaluator_from_map_literal_free_aux(pkvpair_evaluator->plist_evaluator); - } - free(pkvpair_evaluator); - } - sllv_free(plist_evaluator->pkvpair_evaluators); - free(plist_evaluator); -} - -static void rxval_evaluator_from_map_literal_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_map_literal_state_t* pstate = prxval_evaluator->pvstate; - rxval_evaluator_from_map_literal_free_aux(pstate->proot_list_evaluator); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_map_literal(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rxval_evaluator_from_map_literal_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_map_literal_state_t)); - pstate->proot_list_evaluator = allocate_map_literal_evaluator_from_ast( - pnode, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_map_literal_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_map_literal_free; - - return prxval_evaluator; -} - -// ================================================================ -typedef struct _rxval_evaluator_from_nonindexed_local_variable_state_t { - int vardef_frame_relative_index; -} rxval_evaluator_from_nonindexed_local_variable_state_t; - -static boxed_xval_t rxval_evaluator_from_nonindexed_local_variable_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = pvstate; - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_nonindexed( - pframe, pstate->vardef_frame_relative_index); - if (pxval == NULL) { - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = FALSE, - }; - } else { - return (boxed_xval_t) { - .xval = *pxval, - .is_ephemeral = FALSE, - }; - } -} - -static void rxval_evaluator_from_nonindexed_local_variable_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = prxval_evaluator->pvstate; - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_nonindexed_local_variable( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_from_nonindexed_local_variable_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_nonindexed_local_variable_state_t)); - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_nonindexed_local_variable_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_nonindexed_local_variable_free; - - return prxval_evaluator; -} - -// ================================================================ -typedef struct _rxval_evaluator_from_indexed_local_variable_state_t { - int vardef_frame_relative_index; - sllv_t* pkeylist_evaluators; -} rxval_evaluator_from_indexed_local_variable_state_t; - -static boxed_xval_t rxval_evaluator_from_indexed_local_variable_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_indexed_local_variable_state_t* pstate = pvstate; - - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->pkeylist_evaluators, pvars, &all_non_null_or_error); - - if (all_non_null_or_error) { - local_stack_frame_t* pframe = local_stack_get_top_frame(pvars->plocal_stack); - mlhmmv_xvalue_t* pxval = local_stack_frame_ref_extended_from_indexed( - pframe, pstate->vardef_frame_relative_index, pmvkeys); - sllmv_free(pmvkeys); - if (pxval == NULL) { - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = FALSE, - }; - } else { - return (boxed_xval_t) { - .xval = *pxval, - .is_ephemeral = FALSE, - }; - } - } else { - sllmv_free(pmvkeys); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = TRUE, - }; - } -} - -static void rxval_evaluator_from_indexed_local_variable_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_indexed_local_variable_state_t* pstate = prxval_evaluator->pvstate; - for (sllve_t* pe = pstate->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* prval_evaluator = pe->pvvalue; - prval_evaluator->pfree_func(prval_evaluator); - } - sllv_free(pstate->pkeylist_evaluators); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_local_variable( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_from_indexed_local_variable_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_indexed_local_variable_state_t)); - MLR_INTERNAL_CODING_ERROR_IF(pnode->vardef_frame_relative_index == MD_UNUSED_INDEX); - pstate->vardef_frame_relative_index = pnode->vardef_frame_relative_index; - pstate->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pnode, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_indexed_local_variable_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_indexed_local_variable_free; - - return prxval_evaluator; -} - -// ================================================================ -typedef struct _rxval_evaluator_from_indexed_function_call_state_t { - rxval_evaluator_t* pfunction_call_evaluator; - sllv_t* pkeylist_evaluators; -} rxval_evaluator_from_indexed_function_call_state_t; - -static boxed_xval_t rxval_evaluator_from_indexed_function_call_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_indexed_function_call_state_t* pstate = pvstate; - - // This is for things like $b = splitnvx($a, ":")[1]. - // * First we evaluate the function call -- the splitnvx($a, ":") part. - // * Second we evaluate the index/indices -- [1] part. - // * Third we index function-call return value by the indices. - - // Evaluate the function call: - rxval_evaluator_t* pfunction_call_evaluator = pstate->pfunction_call_evaluator; - boxed_xval_t function_call_output = pfunction_call_evaluator->pprocess_func( - pfunction_call_evaluator->pvstate, pvars); - - // Non-indexable if not a map. - if (function_call_output.xval.is_terminal) { - mv_free(&function_call_output.xval.terminal_mlrval); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = TRUE, - }; - } - - // Evaluate the indices: - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->pkeylist_evaluators, pvars, &all_non_null_or_error); - - if (!all_non_null_or_error) { - mlhmmv_xvalue_free(&function_call_output.xval); - sllmv_free(pmvkeys); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = TRUE, - }; - } - - // Index the function-call return value by the indices: - int lookup_error_reason_unused = FALSE; - mlhmmv_xvalue_t* pxval = mlhmmv_level_look_up_and_ref_xvalue( - function_call_output.xval.pnext_level, pmvkeys, &lookup_error_reason_unused); - - if (pxval == NULL) { - mlhmmv_xvalue_free(&function_call_output.xval); - sllmv_free(pmvkeys); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = FALSE, - }; - } else { - // xxx copy out little bit, free full retval - // mlhmmv_xvalue_free(&function_call_output.xval); - sllmv_free(pmvkeys); - return (boxed_xval_t) { - .xval = *pxval, - .is_ephemeral = FALSE, - }; - } -} - -static void rxval_evaluator_from_indexed_function_call_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_indexed_function_call_state_t* pstate = prxval_evaluator->pvstate; - for (sllve_t* pe = pstate->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* prval_evaluator = pe->pvvalue; - prval_evaluator->pfree_func(prval_evaluator); - } - sllv_free(pstate->pkeylist_evaluators); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_indexed_function_call( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_from_indexed_function_call_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_indexed_function_call_state_t)); - - // Example: 'foo(1,2,3)[4][5]' parses to AST - // text="foo", type=INDEXED_FUNCTION_CALLSITE: - // text="foo", type=FUNCTION_CALLSITE: - // text="1", type=NUMERIC_LITERAL. - // text="2", type=NUMERIC_LITERAL. - // text="3", type=NUMERIC_LITERAL. - // text="indexing", type=MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST: - // text="4", type=NUMERIC_LITERAL. - // text="5", type=NUMERIC_LITERAL. - pstate->pfunction_call_evaluator = fmgr_xalloc_provisional_from_operator_or_function_call( - pfmgr, pnode->pchildren->phead->pvvalue, type_inferencing, context_flags); - pstate->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pnode->pchildren->phead->pnext->pvvalue, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_indexed_function_call_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_indexed_function_call_free; - - return prxval_evaluator; -} - -// ================================================================ -typedef struct _rxval_evaluator_from_oosvar_keylist_state_t { - sllv_t* pkeylist_evaluators; -} rxval_evaluator_from_oosvar_keylist_state_t; - -static boxed_xval_t rxval_evaluator_from_oosvar_keylist_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_oosvar_keylist_state_t* pstate = pvstate; - - int all_non_null_or_error = TRUE; - sllmv_t* pmvkeys = evaluate_list(pstate->pkeylist_evaluators, pvars, &all_non_null_or_error); - - if (all_non_null_or_error) { - int lookup_error = FALSE; - mlhmmv_xvalue_t* pxval = pmvkeys->phead == NULL - ? &pvars->poosvars->root_xvalue - : mlhmmv_level_look_up_and_ref_xvalue(pvars->poosvars->root_xvalue.pnext_level, pmvkeys, &lookup_error); - sllmv_free(pmvkeys); - if (pxval != NULL) { - return (boxed_xval_t) { - .xval = *pxval, - .is_ephemeral = FALSE, - }; - } else { - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = TRUE, - }; - } - } else { - sllmv_free(pmvkeys); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(mv_absent()), - .is_ephemeral = TRUE, - }; - } -} - -static void rxval_evaluator_from_oosvar_keylist_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_oosvar_keylist_state_t* pstate = prxval_evaluator->pvstate; - for (sllve_t* pe = pstate->pkeylist_evaluators->phead; pe != NULL; pe = pe->pnext) { - rval_evaluator_t* prval_evaluator = pe->pvvalue; - prval_evaluator->pfree_func(prval_evaluator); - } - sllv_free(pstate->pkeylist_evaluators); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_oosvar_keylist( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_from_oosvar_keylist_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_oosvar_keylist_state_t)); - pstate->pkeylist_evaluators = allocate_keylist_evaluators_from_ast_node( - pnode, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_oosvar_keylist_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_oosvar_keylist_free; - - return prxval_evaluator; -} - -// ================================================================ -static boxed_xval_t rxval_evaluator_from_full_oosvar_func(void* pvstate, variables_t* pvars) { - return (boxed_xval_t) { - .is_ephemeral = FALSE, - .xval = pvars->poosvars->root_xvalue, - }; -} - -static void rxval_evaluator_from_full_oosvar_free(rxval_evaluator_t* prxval_evaluator) { - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_full_oosvar( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pprocess_func = rxval_evaluator_from_full_oosvar_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_full_oosvar_free; - - return prxval_evaluator; -} - -// ================================================================ -static boxed_xval_t rxval_evaluator_from_full_srec_func(void* pvstate, variables_t* pvars) { - boxed_xval_t boxed_xval = box_ephemeral_xval(mlhmmv_xvalue_alloc_empty_map()); - - for (lrece_t* pe = pvars->pinrec->phead; pe != NULL; pe = pe->pnext) { - // mlhmmv_level_put_terminal will copy mv keys and values so we needn't (and shouldn't) - // duplicate them here. - mv_t k = mv_from_string(pe->key, NO_FREE); - mv_t* pomv = lhmsmv_get(pvars->ptyped_overlay, pe->key); - if (pomv != NULL) { - mlhmmv_level_put_terminal_singly_keyed(boxed_xval.xval.pnext_level, &k, pomv); - } else { - mv_t v = mv_from_string(pe->value, NO_FREE); // mlhmmv_level_put_terminal will copy - mlhmmv_level_put_terminal_singly_keyed(boxed_xval.xval.pnext_level, &k, &v); - } - } - - return boxed_xval; -} - -static void rxval_evaluator_from_full_srec_free(rxval_evaluator_t* prxval_evaluator) { - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_full_srec( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pprocess_func = rxval_evaluator_from_full_srec_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_full_srec_free; - - return prxval_evaluator; -} - -// ================================================================ -// xxx code dup w/ function_manager.c - -// ================================================================ -typedef struct _rxval_evaluator_from_function_callsite_state_t { - rval_evaluator_t* prval_evaluator; -} rxval_evaluator_from_function_callsite_state_t; - -static boxed_xval_t rxval_evaluator_from_function_callsite_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_from_function_callsite_state_t* pstate = pvstate; - - rval_evaluator_t* prval_evaluator = pstate->prval_evaluator; - mv_t val = prval_evaluator->pprocess_func(prval_evaluator->pvstate, pvars); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(val), - .is_ephemeral = FALSE, // verify reference semantics for RHS evaluators! - }; -} - -static void rxval_evaluator_from_function_callsite_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_from_function_callsite_state_t* pstate = prxval_evaluator->pvstate; - pstate->prval_evaluator->pfree_func(pstate->prval_evaluator); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_function_callsite( - mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, int type_inferencing, int context_flags) -{ - rxval_evaluator_from_function_callsite_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_from_function_callsite_state_t)); - - pstate->prval_evaluator = rval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_from_function_callsite_func; - prxval_evaluator->pfree_func = rxval_evaluator_from_function_callsite_free; - - return prxval_evaluator; -} - -// ================================================================ -typedef struct _rxval_evaluator_wrapping_rval_state_t { - rval_evaluator_t* prval_evaluator; -} rxval_evaluator_wrapping_rval_state_t; - -static boxed_xval_t rxval_evaluator_wrapping_rval_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_wrapping_rval_state_t* pstate = pvstate; - rval_evaluator_t* prval_evaluator = pstate->prval_evaluator; - mv_t val = prval_evaluator->pprocess_func(prval_evaluator->pvstate, pvars); - return (boxed_xval_t) { - .xval = mlhmmv_xvalue_wrap_terminal(val), - .is_ephemeral = TRUE, // verify reference semantics for RHS evaluators! - }; -} - -static void rxval_evaluator_wrapping_rval_free(rxval_evaluator_t* prxval_evaluator) { - rxval_evaluator_wrapping_rval_state_t* pstate = prxval_evaluator->pvstate; - pstate->prval_evaluator->pfree_func(pstate->prval_evaluator); - free(pstate); - free(prxval_evaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_wrapping_rval(mlr_dsl_ast_node_t* pnode, fmgr_t* pfmgr, - int type_inferencing, int context_flags) -{ - rxval_evaluator_wrapping_rval_state_t* pstate = mlr_malloc_or_die( - sizeof(rxval_evaluator_wrapping_rval_state_t)); - pstate->prval_evaluator = rval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* prxval_evaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - prxval_evaluator->pvstate = pstate; - prxval_evaluator->pprocess_func = rxval_evaluator_wrapping_rval_func; - prxval_evaluator->pfree_func = rxval_evaluator_wrapping_rval_free; - - return prxval_evaluator; -} diff --git a/c/dsl/rxval_func_evaluators.c b/c/dsl/rxval_func_evaluators.c deleted file mode 100644 index 83b37bbab..000000000 --- a/c/dsl/rxval_func_evaluators.c +++ /dev/null @@ -1,589 +0,0 @@ -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mtrand.h" -#include "mapping/mapper.h" -#include "dsl/context_flags.h" -#include "dsl/rxval_evaluators.h" - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_variadic_state_t { - xv_variadic_func_t* pfunc; - rxval_evaluator_t** pargs; - boxed_xval_t* pbxvals; - int nargs; -} rxval_evaluator_variadic_state_t; - -static boxed_xval_t rxval_evaluator_variadic_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_variadic_state_t* pstate = pvstate; - int nargs = pstate->nargs; - - for (int i = 0; i < nargs; i++) { - rxval_evaluator_t* parg = pstate->pargs[i]; - boxed_xval_t* pbxval = &pstate->pbxvals[i]; - *pbxval = parg->pprocess_func(parg->pvstate, pvars); - } - - boxed_xval_t bxrv = pstate->pfunc(pstate->pbxvals, nargs); - - for (int i = 0; i < nargs; i++) { - boxed_xval_t* pbxval = &pstate->pbxvals[i]; - if (pbxval->is_ephemeral) { - mlhmmv_xvalue_free(&pbxval->xval); - } - } - return bxrv; -} - -static void rxval_evaluator_variadic_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_variadic_state_t* pstate = pxevaluator->pvstate; - - for (int i = 0; i < pstate->nargs; i++) - pstate->pargs[i]->pfree_func(pstate->pargs[i]); - free(pstate->pargs); - - for (int i = 0; i < pstate->nargs; i++) { - if (pstate->pbxvals[i].is_ephemeral) { - mlhmmv_xvalue_free(&pstate->pbxvals[i].xval); - } - } - free(pstate->pbxvals); - - free(pstate); - - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_variadic_func( - xv_variadic_func_t* pfunc, - sllv_t* parg_nodes, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_variadic_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_variadic_state_t)); - pstate->pfunc = pfunc; - - int nargs = parg_nodes->length; - rxval_evaluator_t** pargs = mlr_malloc_or_die(nargs * sizeof(rxval_evaluator_t*)); - int i = 0; - for (sllve_t* pe = parg_nodes->phead; pe != NULL; pe = pe->pnext, i++) { - mlr_dsl_ast_node_t* pnode = pe->pvvalue; - pargs[i] = rxval_evaluator_alloc_from_ast(pnode, pfmgr, type_inferencing, context_flags); - } - - pstate->pargs = pargs; - pstate->nargs = nargs; - pstate->pbxvals = mlr_malloc_or_die(nargs * sizeof(boxed_xval_t)); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_variadic_func; - pxevaluator->pfree_func = rxval_evaluator_variadic_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_x_state_t { - xv_unary_func_t* pfunc; - rxval_evaluator_t* parg1; -} rxval_evaluator_x_x_state_t; - -static boxed_xval_t rxval_evaluator_x_x_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_x_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - boxed_xval_t bxrv = pstate->pfunc(&bxval1); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - - return bxrv; -} - -static void rxval_evaluator_x_x_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_x_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_x_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_x_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_x_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_x_func; - pxevaluator->pfree_func = rxval_evaluator_x_x_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_m_state_t { - xv_unary_func_t* pfunc; - rxval_evaluator_t* parg1; -} rxval_evaluator_x_m_state_t; - -static boxed_xval_t rxval_evaluator_x_m_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_m_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - if (bxval1.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_m_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_m_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_m_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_m_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_m_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_m_func; - pxevaluator->pfree_func = rxval_evaluator_x_m_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_mx_state_t { - xv_binary_func_t* pfunc; - rxval_evaluator_t* parg1; - rxval_evaluator_t* parg2; -} rxval_evaluator_x_mx_state_t; - -static boxed_xval_t rxval_evaluator_x_mx_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_mx_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - if (bxval1.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - - if (!bxval2.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - if (bxval2.is_ephemeral) { - mlhmmv_xvalue_free(&bxval2.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_mx_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_mx_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_mx_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_mx_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_mx_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_mx_func; - pxevaluator->pfree_func = rxval_evaluator_x_mx_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_ms_state_t { - xv_binary_func_t* pfunc; - rxval_evaluator_t* parg1; - rxval_evaluator_t* parg2; -} rxval_evaluator_x_ms_state_t; - -static boxed_xval_t rxval_evaluator_x_ms_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_ms_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - if (bxval1.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - - if (!bxval2.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { - mv_free(&bxval2.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - if (bxval2.is_ephemeral) { - mlhmmv_xvalue_free(&bxval2.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_ms_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_ms_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_ms_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_ms_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_ms_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_ms_func; - pxevaluator->pfree_func = rxval_evaluator_x_ms_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_ss_state_t { - xv_binary_func_t* pfunc; - rxval_evaluator_t* parg1; - rxval_evaluator_t* parg2; -} rxval_evaluator_x_ss_state_t; - -static boxed_xval_t rxval_evaluator_x_ss_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_ss_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - - if (!bxval1.xval.is_terminal) { - mv_free(&bxval1.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval1.xval.terminal_mlrval)) { - mv_free(&bxval1.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - if (!bxval2.xval.is_terminal) { - mv_free(&bxval2.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { - mv_free(&bxval2.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - if (bxval2.is_ephemeral) { - mlhmmv_xvalue_free(&bxval2.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_ss_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_ss_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_ss_func( - xv_binary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_ss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_ss_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_ss_func; - pxevaluator->pfree_func = rxval_evaluator_x_ss_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_mss_state_t { - xv_ternary_func_t* pfunc; - rxval_evaluator_t* parg1; - rxval_evaluator_t* parg2; - rxval_evaluator_t* parg3; -} rxval_evaluator_x_mss_state_t; - -static boxed_xval_t rxval_evaluator_x_mss_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_mss_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - boxed_xval_t bxval3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - - if (bxval1.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - - if (!bxval2.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { - mv_free(&bxval2.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - if (!bxval3.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval3.xval.terminal_mlrval)) { - mv_free(&bxval3.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2, &bxval3); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - if (bxval2.is_ephemeral) { - mlhmmv_xvalue_free(&bxval2.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_mss_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_mss_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_mss_func( - xv_ternary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - mlr_dsl_ast_node_t* parg3_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_mss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_mss_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - pstate->parg3 = rxval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_mss_func; - pxevaluator->pfree_func = rxval_evaluator_x_mss_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -typedef struct _rxval_evaluator_x_sss_state_t { - xv_ternary_func_t* pfunc; - rxval_evaluator_t* parg1; - rxval_evaluator_t* parg2; - rxval_evaluator_t* parg3; -} rxval_evaluator_x_sss_state_t; - -static boxed_xval_t rxval_evaluator_x_sss_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_x_sss_state_t* pstate = pvstate; - boxed_xval_t bxval1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - boxed_xval_t bxval2 = pstate->parg2->pprocess_func(pstate->parg2->pvstate, pvars); - boxed_xval_t bxval3 = pstate->parg3->pprocess_func(pstate->parg3->pvstate, pvars); - - if (!bxval1.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval1.xval.terminal_mlrval)) { - mv_free(&bxval1.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - if (!bxval2.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval2.xval.terminal_mlrval)) { - mv_free(&bxval2.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - if (!bxval3.xval.is_terminal) { - return box_ephemeral_val(mv_error()); - } - if (!mv_is_string_or_empty(&bxval3.xval.terminal_mlrval)) { - mv_free(&bxval3.xval.terminal_mlrval); - return box_ephemeral_val(mv_error()); - } - - boxed_xval_t bxrv = pstate->pfunc(&bxval1, &bxval2, &bxval3); - - if (bxval1.is_ephemeral) { - mlhmmv_xvalue_free(&bxval1.xval); - } - if (bxval2.is_ephemeral) { - mlhmmv_xvalue_free(&bxval2.xval); - } - if (bxval3.is_ephemeral) { - mlhmmv_xvalue_free(&bxval3.xval); - } - return bxrv; -} - -static void rxval_evaluator_x_sss_free(rxval_evaluator_t* pxevaluator) { - rxval_evaluator_x_sss_state_t* pstate = pxevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - pstate->parg2->pfree_func(pstate->parg2); - pstate->parg3->pfree_func(pstate->parg3); - free(pstate); - free(pxevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_x_sss_func( - xv_ternary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - mlr_dsl_ast_node_t* parg2_node, - mlr_dsl_ast_node_t* parg3_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags) -{ - rxval_evaluator_x_sss_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_x_sss_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); - pstate->parg3 = rxval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); - - rxval_evaluator_t* pxevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pxevaluator->pvstate = pstate; - pxevaluator->pprocess_func = rxval_evaluator_x_sss_func; - pxevaluator->pfree_func = rxval_evaluator_x_sss_free; - - return pxevaluator; -} - -// ---------------------------------------------------------------- -// Does type-check assertion on the argument and returns it unmodified if the -// test passes. Else throws an error. -typedef struct _rxval_evaluator_A_x_state_t { - xv_unary_func_t* pfunc; - rxval_evaluator_t* parg1; - char* desc; -} rxval_evaluator_A_x_state_t; - -static boxed_xval_t rxval_evaluator_A_x_func(void* pvstate, variables_t* pvars) { - rxval_evaluator_A_x_state_t* pstate = pvstate; - boxed_xval_t val1 = pstate->parg1->pprocess_func(pstate->parg1->pvstate, pvars); - - boxed_xval_t ok = pstate->pfunc(&val1); - - if (!ok.xval.terminal_mlrval.u.boolv) { - fprintf(stderr, "%s: %s type-assertion failed at NR=%lld FNR=%lld FILENAME=%s\n", - MLR_GLOBALS.bargv0, pstate->desc, pvars->pctx->nr, pvars->pctx->fnr, pvars->pctx->filename); - exit(1); - } - - return val1; -} -static void rxval_evaluator_A_x_free(rxval_evaluator_t* pevaluator) { - rxval_evaluator_A_x_state_t* pstate = pevaluator->pvstate; - pstate->parg1->pfree_func(pstate->parg1); - free(pstate->desc); - free(pstate); - free(pevaluator); -} - -rxval_evaluator_t* rxval_evaluator_alloc_from_A_x_func( - xv_unary_func_t* pfunc, - mlr_dsl_ast_node_t* parg1_node, - fmgr_t* pfmgr, - int type_inferencing, - int context_flags, - char* desc) -{ - - rxval_evaluator_A_x_state_t* pstate = mlr_malloc_or_die(sizeof(rxval_evaluator_A_x_state_t)); - pstate->pfunc = pfunc; - pstate->parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); - pstate->desc = mlr_strdup_or_die(desc); - - rxval_evaluator_t* pevaluator = mlr_malloc_or_die(sizeof(rxval_evaluator_t)); - pevaluator->pvstate = pstate; - pevaluator->pprocess_func = rxval_evaluator_A_x_func; - pevaluator->pfree_func = rxval_evaluator_A_x_free; - - return pevaluator; -} diff --git a/c/dsl/type_inference.h b/c/dsl/type_inference.h deleted file mode 100644 index deb641a98..000000000 --- a/c/dsl/type_inference.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef TYPE_INFERENCE_H -#define TYPE_INFERENCE_H - -// Intentionally not an enum -#define TYPE_INFER_STRING_FLOAT_INT 0xce08 -#define TYPE_INFER_STRING_FLOAT 0xce09 -#define TYPE_INFER_STRING_ONLY 0xce0a - -static inline char* type_inferencing_to_string(int ti) { - switch(ti) { - case TYPE_INFER_STRING_FLOAT_INT: - return "TYPE_INFER_STRING_FLOAT_INT"; - break; - case TYPE_INFER_STRING_FLOAT: - return "TYPE_INFER_STRING_FLOAT"; - break; - case TYPE_INFER_STRING_ONLY: - return "TYPE_INFER_STRING_ONLY"; - break; - default: - return "???"; - break; - } -} - -#endif // TYPE_INFERENCE_H diff --git a/c/dsl/variables.h b/c/dsl/variables.h deleted file mode 100644 index 77bf77354..000000000 --- a/c/dsl/variables.h +++ /dev/null @@ -1,52 +0,0 @@ -// ================================================================ -// Record state is in multiple parts: -// -// * The lrec is read for input fields; output fields are written to the typed-overlay map. It is up to the -// caller to format the typed-overlay field values as strings and write them into the lrec. -// -// * Typed-overlay values are read in favor to the lrec: e.g. if the lrec has "x"=>"abc" and the typed overlay -// has "x"=>3.7 then the evaluators will be presented with 3.7 for the value of the field named "x". -// -// * The =~ and !=~ operators populate the regex-captures array from \1, \2, etc. in the regex; the from-literal -// evaluator interpolates those into output. Example: -// -// o echo x=abc_def | mlr put '$name =~ "(.*)_(.*)"; $left = "\1"; $right = "\2"' -// -// o The =~ resizes the regex-captures array to length 3 (1-up length 2), then copies "abc" to index 1 -// and "def" to index 2. -// -// o The second expression writes "left"=>"abc" to the typed-overlay map; the third expression writes "right"=>"def" -// to the typed-overlay map. The \1 and \2 get "abc" and "def" interpolated from the regex-captures array. -// -// o It is up to mapper_put to write "left"=>"abc" and "right"=>"def" into the lrec. -// -// See also the comments above mapper_put.c for more information about left-hand sides (lvals). -// ================================================================ - -#ifndef VARIABLES_H -#define VARIABLES_H - -#include "containers/lrec.h" -#include "containers/lhmsmv.h" -#include "lib/string_array.h" -#include "containers/mlhmmv.h" -#include "lib/context.h" -#include "containers/local_stack.h" -#include "dsl/return_state.h" - -// Context for DSL evaluation -typedef struct _variables_t { - lrec_t* pinrec; - lhmsmv_t* ptyped_overlay; - string_array_t** ppregex_captures; - mlhmmv_root_t* poosvars; - context_t* pctx; - local_stack_t* plocal_stack; - loop_stack_t* ploop_stack; - return_state_t return_state; - int trace_execution; - int json_quote_int_keys; - int json_quote_non_string_values; -} variables_t; - -#endif // VARIABLES_H diff --git a/c/experimental/Makefile.am b/c/experimental/Makefile.am deleted file mode 100644 index c29283833..000000000 --- a/c/experimental/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -# TODO: replace the interesting content with unit tests; jettison the rest -noinst_PROGRAMS= getl -AM_CFLAGS= -std=gnu99 -AM_CPPFLAGS= -I${srcdir}/../ - -getl_SOURCES= getlines.c -getl_LDADD= ../lib/libmlr.la ../input/libinput.la ../containers/libcontainers.la diff --git a/c/experimental/Makefile.in b/c/experimental/Makefile.in deleted file mode 100644 index 9819ead68..000000000 --- a/c/experimental/Makefile.in +++ /dev/null @@ -1,590 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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@ -noinst_PROGRAMS = getl$(EXEEXT) -subdir = c/experimental -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -PROGRAMS = $(noinst_PROGRAMS) -am_getl_OBJECTS = getlines.$(OBJEXT) -getl_OBJECTS = $(am_getl_OBJECTS) -getl_DEPENDENCIES = ../lib/libmlr.la ../input/libinput.la \ - ../containers/libcontainers.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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(getl_SOURCES) -DIST_SOURCES = $(getl_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -AM_CFLAGS = -std=gnu99 -AM_CPPFLAGS = -I${srcdir}/../ -getl_SOURCES = getlines.c -getl_LDADD = ../lib/libmlr.la ../input/libinput.la ../containers/libcontainers.la -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/experimental/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/experimental/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -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 - -getl$(EXEEXT): $(getl_OBJECTS) $(getl_DEPENDENCIES) $(EXTRA_getl_DEPENDENCIES) - @rm -f getl$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(getl_OBJECTS) $(getl_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlines.Po@am__quote@ - -.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: $(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 $(PROGRAMS) -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-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 check check-am clean clean-generic \ - clean-libtool 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-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: diff --git a/c/experimental/bld b/c/experimental/bld deleted file mode 100644 index fa41086e4..000000000 --- a/c/experimental/bld +++ /dev/null @@ -1,10 +0,0 @@ - 754 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ - 755 fg - 756 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c - 757 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ - 758 fg - 759 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c - 760 a.out p 2017-04-09T00:51:09.9Z %Y-%m-%dT%H:%M:%SZ - 761 fg - 762 gcc -I.. strx.c ../lib/mlrutil.c ../lib/mlr_globals.c ../lib/string_builder.c ../lib/mtrand.c ../lib/mlr_arch.c - 763 h > bld diff --git a/c/experimental/coprog.c b/c/experimental/coprog.c deleted file mode 100644 index 1956b387d..000000000 --- a/c/experimental/coprog.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -int main(int argc, char** argv) { - char* cmd = argv[1]; - FILE* pfp = popen(cmd, "r+"); - if (pfp == NULL) { - perror("popen"); - exit(1); - } - if (setlinebuf(pfp) < 0) { - perror("setlinebuf"); - exit(1); - } - char* line1 = NULL; - size_t linecap1 = 0; - ssize_t linelen1; - - while ((linelen1 = getline(&line1, &linecap1, stdin)) > 0) { - if (linelen1 > 0 && line1[linelen1-1] == '\n') { - line1[linelen1-1] = 0; - linelen1--; - } - printf("ILINE: %s\n", line1); - int rc2 = fprintf(pfp, "%s\n", line1); - if (rc2 < 0) { - perror("fprintf"); - exit(1); - } - if (fflush(pfp) < 0) { - perror("fflush"); - exit(1); - } - char* line2 = NULL; - size_t linecap2 = 0; - ssize_t linelen2; - linelen2 = getline(&line2, &linecap2, pfp); - if (linelen2 <= 0) { - perror("pipe read"); - exit(1); - } - if (linelen2 > 0 && line2[linelen2-1] == '\n') { - line2[linelen2-1] = 0; - linelen2--; - } - printf("PLINE: %s\n", line2); - } - fclose(pfp); - - return 0; -} diff --git a/c/experimental/fltres.c b/c/experimental/fltres.c deleted file mode 100644 index 621e61082..000000000 --- a/c/experimental/fltres.c +++ /dev/null @@ -1,20 +0,0 @@ -#include - -static void show(long long i) { - double d = (double) i; - long long j = (long long) d; - printf("%016llx %lld %lf %016llx\n", i, i, d, j); -} - -int main() { - show(0x7ffffffffffff9ff); - show(0x7ffffffffffffa00); - show(0x7ffffffffffffbff); - show(0x7ffffffffffffc00); - show(0x7ffffffffffffdff); - show(0x7ffffffffffffe00); - show(0x7ffffffffffffffe); - show(0x7fffffffffffffff); - - return 0; -} diff --git a/c/experimental/getlines.c b/c/experimental/getlines.c deleted file mode 100644 index 60b56ce30..000000000 --- a/c/experimental/getlines.c +++ /dev/null @@ -1,474 +0,0 @@ -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlrdatetime.h" -#include "input/file_reader_stdio.h" -#include "input/lrec_readers.h" -#include "lib/string_builder.h" -#include "input/byte_readers.h" -#include "input/line_readers.h" -#include "input/peek_file_reader.h" -#include "containers/parse_trie.h" - -#define PEEK_BUF_LEN 32 -#define STRING_BUILDER_INIT_SIZE 1024 -#define FIXED_LINE_LEN 1024 - -// ================================================================ -static FILE* fopen_or_die(char* filename) { - FILE* fp = fopen(filename, "r"); - if (fp == NULL) { - perror("fopen"); - fprintf(stderr, "Couldn't open \"%s\" for read; exiting.\n", filename); - exit(1); - } - return fp; -} - -// ================================================================ -static int read_file_mlr_alloc_read_line_single_delimiter_no_autodetect(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - int bc = 0; - size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - while (1) { - char* line = mlr_alloc_read_line_single_delimiter( - fp, '\n', &line_length, FALSE, NULL); - if (line == NULL) - break; - bc += strlen(line); - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - free(line); - } - fclose(fp); - return bc; -} - -// ================================================================ -static int read_file_mlr_alloc_read_line_single_delimiter_with_autodetect(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - int bc = 0; - size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - context_t ctx; - context_init_from_first_file_name(&ctx, "fake-file-name"); - - while (1) { - char* line = mlr_alloc_read_line_single_delimiter( - fp, '\n', &line_length, TRUE, &ctx); - if (line == NULL) - break; - bc += strlen(line); - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - free(line); - } - fclose(fp); - return bc; -} - -// ================================================================ -static int read_file_mlr_alloc_read_line_multiple_delimiter(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - int bc = 0; - size_t line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - - while (1) { - char* line = mlr_alloc_read_line_multiple_delimiter(fp, "\n", 1, &line_length); - if (line == NULL) - break; - bc += strlen(line); - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - free(line); - } - fclose(fp); - return bc; -} - -// ================================================================ -static char* read_line_fgetc(FILE* fp, char* irs) { - char* line = mlr_malloc_or_die(FIXED_LINE_LEN); - char* p = line; - while (TRUE) { - int c = fgetc(fp); - if (c == EOF) { - if (p == line) { - return NULL; - } else { - *(p++) = 0; - return line; - } - } else if (c == irs[0]) { - *(p++) = 0; - return line; - } else { - *(p++) = c; - } - } -} - -static int read_file_fgetc_fixed_len(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - char* irs = "\n"; - - int bc = 0; - - while (TRUE) { - char* line = read_line_fgetc(fp, irs); - if (line == NULL) - break; - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - bc += strlen(line); - free(line); - } - fclose(fp); - return bc; -} - -// ================================================================ -static char* read_line_getc_unlocked(FILE* fp, char* irs) { - char* line = mlr_malloc_or_die(FIXED_LINE_LEN); - char* p = line; - while (TRUE) { - int i = mlr_arch_getc(fp); - char c = i; - if (i == EOF) { - if (p == line) { - return NULL; - } else { - *(p++) = 0; - return line; - } - } else if (c == irs[0]) { - *(p++) = 0; - return line; - } else { - *(p++) = c; - } - } -} - -static int read_file_getc_unlocked_fixed_len(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - char* irs = "\n"; - - int bc = 0; - - while (TRUE) { - char* line = read_line_getc_unlocked(fp, irs); - if (line == NULL) - break; - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - bc += strlen(line); - free(line); - } - fclose(fp); - return bc; -} - -// ================================================================ -static char* read_line_getc_unlocked_psb(FILE* fp, string_builder_t* psb, char* irs) { - while (TRUE) { - int c = mlr_arch_getc(fp); - if (c == EOF) { - if (sb_is_empty(psb)) - return NULL; - else - return sb_finish(psb); - } else if (c == irs[0]) { - return sb_finish(psb); - } else { - sb_append_char(psb, c); - } - } -} - -static int read_file_getc_unlocked_psb(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); - char* irs = "\n"; - int bc = 0; - - while (TRUE) { - char* line = read_line_getc_unlocked_psb(fp, psb, irs); - if (line == NULL) - break; - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - bc += strlen(line); - free(line); - } - sb_free(psb); - fclose(fp); - return bc; -} - -// ================================================================ -static char* read_line_fgetc_psb(FILE* fp, string_builder_t* psb, char* irs) { - while (TRUE) { - int c = fgetc(fp); - if (c == EOF) { - if (sb_is_empty(psb)) - return NULL; - else - return sb_finish(psb); - } else if (c == irs[0]) { - return sb_finish(psb); - } else { - sb_append_char(psb, c); - } - } -} - -static int read_file_fgetc_psb(char* filename, int do_write) { - FILE* fp = fopen_or_die(filename); - string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); - char* irs = "\n"; - int bc = 0; - - while (TRUE) { - char* line = read_line_fgetc_psb(fp, psb, irs); - if (line == NULL) - break; - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - bc += strlen(line); - free(line); - } - sb_free(psb); - fclose(fp); - return bc; -} - -// ================================================================ -#define IRS_TOKEN 11 -#define EOF_TOKEN 22 -#define IRSEOF_TOKEN 33 - -static char* read_line_pfr_psb(peek_file_reader_t* pfr, string_builder_t* psb, parse_trie_t* ptrie) { - int rc, stridx, matchlen; - while (TRUE) { - pfr_buffer_by(pfr, ptrie->maxlen); - rc = parse_trie_ring_match(ptrie, pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, - &stridx, &matchlen); - if (rc) { - pfr_advance_by(pfr, matchlen); - switch(stridx) { - case IRS_TOKEN: - return sb_finish(psb); - break; - case IRSEOF_TOKEN: - return sb_finish(psb); - break; - case EOF_TOKEN: - return NULL; - break; - } - } else { - sb_append_char(psb, pfr_read_char(pfr)); - } - } -} - -static int read_file_pfr_psb(char* filename, int do_write) { - byte_reader_t* pbr = stdio_byte_reader_alloc(); - string_builder_t* psb = sb_alloc(STRING_BUILDER_INIT_SIZE); - pbr->popen_func(pbr, NULL, filename); - - peek_file_reader_t* pfr = pfr_alloc(pbr, PEEK_BUF_LEN); - - parse_trie_t* ptrie = parse_trie_alloc(); - parse_trie_add_string(ptrie, "\n", IRS_TOKEN); - parse_trie_add_string(ptrie, "\xff", EOF_TOKEN); - parse_trie_add_string(ptrie, "\n\xff", IRSEOF_TOKEN); - - int bc = 0; - - while (TRUE) { - char* line = read_line_pfr_psb(pfr, psb, ptrie); - if (line == NULL) - break; - if (do_write) { - fputs(line, stdout); - fputc('\n', stdout); - } - bc += strlen(line); - free(line); - } - sb_free(psb); - pbr->pclose_func(pbr, NULL); - return bc; -} - -// ================================================================ -static void usage(char* argv0) { - fprintf(stderr, "Usage: %s {filename}\n", argv0); - exit(1); -} - -int main(int argc, char** argv) { - int nreps = 1; - int do_write = 0; - if (argc != 2 && argc != 3 && argc != 4) - usage(argv[0]); - char* filename = argv[1]; - if (argc >= 3) - (void)sscanf(argv[2], "%d", &nreps); - if (argc >= 4) - (void)sscanf(argv[3], "%d", &do_write); - - double s, e, t; - int bc; - - for (int i = 0; i < nreps; i++) { - - s = get_systime(); - bc = read_file_mlr_alloc_read_line_single_delimiter_no_autodetect(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=single_delim_no_auto,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_mlr_alloc_read_line_single_delimiter_with_autodetect(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=single_delim_with_auto,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_mlr_alloc_read_line_multiple_delimiter(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=multiple_delim,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_fgetc_fixed_len(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=fgetc_fixed_len,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_getc_unlocked_fixed_len(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=getc_unlocked_fixed_len,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_getc_unlocked_psb(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=getc_unlocked_psb,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_fgetc_psb(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=fgetc_psb,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - - s = get_systime(); - bc = read_file_pfr_psb(filename, do_write); - e = get_systime(); - t = e - s; - printf("type=pfr_psb,t=%.6lf,n=%d\n", t, bc); - fflush(stdout); - } - - return 0; -} - -// ================================================================ -// $ ./getl ../data/big.csv 5|tee x - -// $ mlr --opprint cat then sort -n t x -// type t n type t n -// getdelim 0.118618 55888899 getdelim 0.118057 55888899 -// getdelim 0.121467 55888899 getdelim 0.118727 55888899 -// getdelim 0.121943 55888899 getdelim 0.119609 55888899 -// getdelim 0.124756 55888899 getdelim 0.122506 55888899 -// getdelim 0.127039 55888899 getdelim 0.123099 55888899 -// getc_unlocked_fixed_len 0.167563 55888899 getc_unlocked_fixed_len 0.168109 55888899 -// getc_unlocked_fixed_len 0.167803 55888899 getc_unlocked_fixed_len 0.168392 55888899 -// getc_unlocked_fixed_len 0.168808 55888899 getc_unlocked_fixed_len 0.169387 55888899 -// getc_unlocked_fixed_len 0.168980 55888899 getc_unlocked_fixed_len 0.178484 55888899 -// getc_unlocked_fixed_len 0.176187 55888899 getc_unlocked_fixed_len 0.182793 55888899 -// getc_unlocked_psb 0.238986 55888899 getc_unlocked_psb 0.293240 55888899 -// getc_unlocked_psb 0.241325 55888899 getc_unlocked_psb 0.298449 55888899 -// getc_unlocked_psb 0.246466 55888899 getc_unlocked_psb 0.298508 55888899 -// getc_unlocked_psb 0.247592 55888899 getc_unlocked_psb 0.301125 55888899 -// getc_unlocked_psb 0.248112 55888899 mmap_psb 0.313239 55888899 -// mmap_psb 0.250021 55888899 mmap_psb 0.315061 55888899 -// mmap_psb 0.254118 55888899 mmap_psb 0.315517 55888899 -// mmap_psb 0.257428 55888899 mmap_psb 0.316790 55888899 -// mmap_psb 0.261807 55888899 mmap_psb 0.320654 55888899 -// mmap_psb 0.264367 55888899 getc_unlocked_psb 0.326494 55888899 -// pfr_psb 0.760035 55888900 pfr_psb 0.417141 55888899 -// pfr_psb 0.765121 55888900 pfr_psb 0.439269 55888899 -// pfr_psb 0.768731 55888900 pfr_psb 0.439342 55888899 -// pfr_psb 0.771937 55888900 pfr_psb 0.447218 55888899 -// pfr_psb 0.780460 55888900 pfr_psb 0.453839 55888899 -// fgetc_fixed_len 2.516459 55888899 fgetc_psb 2.476543 55888899 -// fgetc_fixed_len 2.522877 55888899 fgetc_psb 2.477130 55888899 -// fgetc_fixed_len 2.587373 55888899 fgetc_psb 2.484007 55888899 -// fgetc_psb 2.590090 55888899 fgetc_psb 2.484495 55888899 -// fgetc_psb 2.590536 55888899 fgetc_fixed_len 2.493730 55888899 -// fgetc_fixed_len 2.608356 55888899 fgetc_fixed_len 2.528333 55888899 -// fgetc_psb 2.623930 55888899 fgetc_fixed_len 2.533535 55888899 -// fgetc_fixed_len 2.624310 55888899 fgetc_fixed_len 2.555377 55888899 -// fgetc_psb 2.637269 55888899 fgetc_fixed_len 2.736391 55888899 -// fgetc_psb 2.743828 55888899 - -// $ mlr --opprint cat then stats1 -a min,max,stddev,mean -f t -g type then sort -n t_mean x -// type t_min t_max t_stddev t_mean -// getdelim 0.118618 0.127039 0.003232 0.122765 -// getc_unlocked_fixed_len 0.167563 0.176187 0.003585 0.169868 -// getc_unlocked_psb 0.238986 0.248112 0.004091 0.244496 -// mmap_psb 0.250021 0.264367 0.005768 0.257548 -// pfr_psb 0.760035 0.780460 0.007667 0.769257 -// fgetc_fixed_len 2.516459 2.624310 0.049478 2.571875 -// fgetc_psb 2.590090 2.680364 0.037489 2.624438 - -// type t_min t_max t_stddev t_mean -// getdelim 0.118057 0.123099 0.002271 0.120400 -// getc_unlocked_fixed_len 0.168109 0.182793 0.006768 0.173433 -// getc_unlocked_psb 0.293240 0.326494 0.013134 0.303563 -// mmap_psb 0.313239 0.320654 0.002771 0.316252 -// pfr_psb 0.417141 0.453839 0.013830 0.439362 -// fgetc_psb 2.476543 2.743828 0.117803 2.533201 -// fgetc_fixed_len 2.493730 2.736391 0.095892 2.569473 - -// ---------------------------------------------------------------- -// Analysis: -// * getdelim is good; fatal flaw is single-char line-terminator -// o maybe i could cobble up a line-stacked iterator which -// consumes usually 1, sometimes (double-quote case) multiple -// delim lines to make up the data for a given record -// * as before, maybe a 5-10% improvement mmap over stdio. -// worth doing as a second-level refinement. -// * getc_unlocked vs. fgetc, no-brainer for this single-threaded code. -// * string-builder is a little than fixed-length malloc, as expected -// -- it's adding value. -// ! peek_file_reader is where the optimization opportunities are diff --git a/c/experimental/json_vg_mem.c b/c/experimental/json_vg_mem.c deleted file mode 100644 index 2eea4aa0b..000000000 --- a/c/experimental/json_vg_mem.c +++ /dev/null @@ -1,94 +0,0 @@ -// ================================================================ -// For use with valgrind --leak-check=full -// ================================================================ - -#include -#include -#include -#include - -// ---------------------------------------------------------------- -static void parse(char* pinput) { - json_char* json_input = (json_char*)pinput; - json_value_t* parsed_top_level_json; - json_char error_buf[JSON_ERROR_MAX]; - - json_char* item_start = json_input; - size_t length = strlen(pinput); - - while (TRUE) { - parsed_top_level_json = json_parse(item_start, length, error_buf, &item_start); - - if (parsed_top_level_json == NULL) { - fprintf(stderr, "Unable to parse JSON data: %s\n", error_buf); - exit(1); - } - - printf("\n"); - printf("----------------------------------------------------------------\n"); - printf("INPUT:\n"); - printf("%s\n", pinput); - printf("\n"); - printf("OUTPUT:\n"); - json_print_recursive(parsed_top_level_json); - - json_free_value(parsed_top_level_json); - - if (item_start == NULL) - break; - if (*item_start == 0) - break; - length -= (item_start - json_input); - json_input = item_start; - } -} - -// ---------------------------------------------------------------- -int main(int argc, char** argv) { - parse("3"); - parse("[3]"); - parse("[[3]]"); - parse("{\"a\":3}"); - parse("[{\"a\":3},{\"b\":4}]"); - - parse( - "{\n" - " \"z\": {\n" - " \"pan\": {\n" - " \"1\": 0.726803,\n" - " \"0\": 0.952618\n" - " },\n" - " \"eks\": {\n" - " \"0\": 0.134189,\n" - " \"1\": 0.187885\n" - " },\n" - " \"wye\": {\n" - " \"1\": 0.863624\n" - " },\n" - " \"zee\": {\n" - " \"0\": 0.976181\n" - " },\n" - " \"hat\": {\n" - " \"1\": 0.749551\n" - " }\n" - " }\n" - "}\n" - ); - - parse( - "[\n" - "{ \"a\": \"pan\", \"b\": \"pan\", \"i\": 1, \"x\": 0.3467901443380824, \"y\": 0.7268028627434533 }\n" - ",{ \"a\": \"eks\", \"b\": \"pan\", \"i\": 2, \"x\": 0.7586799647899636, \"y\": 0.5221511083334797 }\n" - ",{ \"a\": \"wye\", \"b\": \"wye\", \"i\": 3, \"x\": 0.20460330576630303, \"y\": 0.33831852551664776 }\n" - ",{ \"a\": \"eks\", \"b\": \"wye\", \"i\": 4, \"x\": 0.38139939387114097, \"y\": 0.13418874328430463 }\n" - ",{ \"a\": \"wye\", \"b\": \"pan\", \"i\": 5, \"x\": 0.5732889198020006, \"y\": 0.8636244699032729 }\n" - ",{ \"a\": \"zee\", \"b\": \"pan\", \"i\": 6, \"x\": 0.5271261600918548, \"y\": 0.49322128674835697 }\n" - ",{ \"a\": \"eks\", \"b\": \"zee\", \"i\": 7, \"x\": 0.6117840605678454, \"y\": 0.1878849191181694 }\n" - ",{ \"a\": \"zee\", \"b\": \"wye\", \"i\": 8, \"x\": 0.5985540091064224, \"y\": 0.976181385699006 }\n" - ",{ \"a\": \"hat\", \"b\": \"wye\", \"i\": 9, \"x\": 0.03144187646093577, \"y\": 0.7495507603507059 }\n" - ",{ \"a\": \"pan\", \"b\": \"wye\", \"i\": 10, \"x\": 0.5026260055412137, \"y\": 0.9526183602969864 }\n" - "]\n" - ); - - return 0; -} diff --git a/c/experimental/regexes.c b/c/experimental/regexes.c deleted file mode 100644 index edfd75046..000000000 --- a/c/experimental/regexes.c +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include -#include -#include - -// Example: -// $ a.out 'a.*b(cd).*(f).[hz](i)' 'abcdefghij' -// rc=0 -// pmatch[0].rm_so= 0 pmatch[0].rm_eo= 9 -// pmatch[1].rm_so= 2 pmatch[1].rm_eo= 4 -// pmatch[2].rm_so= 5 pmatch[2].rm_eo= 6 -// pmatch[3].rm_so= 8 pmatch[3].rm_eo= 9 -// pmatch[4].rm_so= -1 pmatch[4].rm_eo= -1 -// pmatch[5].rm_so= -1 pmatch[5].rm_eo= -1 -// pmatch[6].rm_so= -1 pmatch[6].rm_eo= -1 -// pmatch[7].rm_so= -1 pmatch[7].rm_eo= -1 -// pmatch[8].rm_so= -1 pmatch[8].rm_eo= -1 -// pmatch[9].rm_so= -1 pmatch[9].rm_eo= -1 - -static void usage(char* argv0, FILE* o, int exit_code) { - fprintf(o, "Usage: %s {string} {regex}\n", argv0); - exit(exit_code); -} - -int main(int argc, char** argv) { - if (argc >= 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) { - usage(argv[0], stdout, 0); - } - if (argc != 3) { - usage(argv[0], stderr, 1); - } - regex_t reg; - - char* sstr = argv[1]; - char* sregex = argv[2]; - int cflags = REG_EXTENDED; - const size_t nmatchmax = 10; - regmatch_t pmatch[nmatchmax]; - int eflags = 0; - int rc; - - rc = regcomp(®, sregex, cflags); - if (rc != 0) { - size_t nbytes = regerror(rc, ®, NULL, 0); - char* errbuf = malloc(nbytes); - (void)regerror(rc, ®, errbuf, nbytes); - printf("regcomp failure: %s\n", errbuf); - exit(1); - } - - rc = regexec(®, sstr, nmatchmax, pmatch, eflags); - printf("rc=%d\n", rc); - int len = strlen(sstr); - if (rc == 0) { - for (int i = 0; i < nmatchmax; i++) { - if (pmatch[i].rm_so == -1) - break; - printf("pmatch[%i].rm_so=%4lld pmatch[%d].rm_eo=%4lld\n", - i, (long long)pmatch[i].rm_so, - i, (long long)pmatch[i].rm_eo); - - printf(" "); - for (int j = 0; j < len; j++) { - fputc(sstr[j], stdout); - } - printf("\n"); - - printf(" "); - for (int j = 0; j < len; j++) { - if (j >= pmatch[i].rm_so && j < pmatch[i].rm_eo) - fputc('^', stdout); - else - fputc('.', stdout); - } - printf("\n"); - } - } else if (rc == REG_NOMATCH) { - printf("no match\n"); - } else { - size_t nbytes = regerror(rc, ®, NULL, 0); - char* errbuf = malloc(nbytes); - (void)regerror(rc, ®, errbuf, nbytes); - printf("regexec failure: %s\n", errbuf); - exit(1); - } - - regfree(®); - - return 0; -} - diff --git a/c/experimental/strx.c b/c/experimental/strx.c deleted file mode 100644 index 9aa403a79..000000000 --- a/c/experimental/strx.c +++ /dev/null @@ -1,234 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlr_arch.h" -#include "lib/string_builder.h" - -#define MYBUFLEN 256 - -// ---------------------------------------------------------------- -static int f(char* float_string, char* format_string) { - double fseconds; - if (sscanf(float_string, "%lf", &fseconds) != 1) { - fprintf(stderr, "!dbl b04k!\n"); - return 1; - } - - time_t iseconds = (time_t) fseconds; - double fracsec = fseconds - iseconds; - - struct tm tm = *gmtime(&iseconds); - - // xxx see if %nS is a substring - // if not then do it like always (w/ malloc) - // if so: - // * copy subformats left & right of the %nS - // * strftime each - // * myself format the middle - // * sb_append - - char* middle_format = NULL; - char* right_subformat = NULL; - for (char* p = format_string; *p; p++) { - if (p[0] == '%' && p[1] >= '1' && p[1] <= '9' && p[2] == 'S') { - middle_format = p; - right_subformat = &p[3]; - break; - } - } - - if (middle_format == NULL) { - char* output_string = mlr_malloc_or_die(MYBUFLEN); - - int written_length = strftime(output_string, MYBUFLEN, format_string, &tm); - if (written_length > MYBUFLEN || written_length == 0) { - fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", - float_string, format_string); - return 1; - } else { - printf("%s %s -> %s\n", float_string, format_string, output_string); - } - - free(output_string); - - } else { - int left_subformat_length = middle_format - format_string; - char* left_subformat = mlr_malloc_or_die(left_subformat_length + 1); - memcpy(left_subformat, format_string, left_subformat_length); - left_subformat[left_subformat_length] = 0; - char left_formatted[MYBUFLEN]; - char right_formatted[MYBUFLEN]; - - if (*left_subformat == 0) { - *left_formatted = 0; - } else { - int written_length = strftime(left_formatted, MYBUFLEN, left_subformat, &tm); - printf("LEFT SUBFORMAT \"%s\"\n", left_subformat); - if (written_length > MYBUFLEN || written_length == 0) { - fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", - float_string, left_subformat); - return 1; - } - } - free(left_subformat); - - char middle_int_formatted[16]; - char* middle_int_format = "%S"; - printf("MIDDLI SUBFORMAT \"%s\"\n", middle_int_format); - int written_length = strftime(middle_int_formatted, sizeof(middle_int_formatted), middle_int_format, &tm); - if (written_length > MYBUFLEN || written_length == 0) { - fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", - float_string, middle_int_format); - return 1; - } - - char middle_sprintf_format[] = "%.xlf"; - char middle_fractional_formatted[16]; - middle_sprintf_format[2] = middle_format[1]; - printf("MIDDLE_SPRINTF_FORMAT \"%s\"\n", middle_sprintf_format); - sprintf(middle_fractional_formatted, middle_sprintf_format, fracsec); - - if (*right_subformat == 0) { - *right_formatted = 0; - } else { - printf("RIGHT SUBFORMAT \"%s\"\n", right_subformat); - int written_length = strftime(right_formatted, MYBUFLEN, right_subformat, &tm); - if (written_length > MYBUFLEN || written_length == 0) { - fprintf(stderr, "Could not strftime(\"%s\", \"%s\").\n", - float_string, right_subformat); - return 1; - } - } - - string_builder_t* psb = sb_alloc(32); - sb_append_string(psb, left_formatted); - sb_append_string(psb, middle_int_formatted); - sb_append_string(psb, &middle_fractional_formatted[1]); // xxx comment - sb_append_string(psb, right_formatted); - char* output_string = sb_finish(psb); - sb_free(psb); - - printf("LEFT OUT \"%s\"\n", left_formatted); - printf("MIDDLI OUT \"%s\"\n", middle_int_formatted); - printf("MIDDLF OUT \"%s\"\n", middle_fractional_formatted); - printf("RIGHT OUT \"%s\"\n", right_formatted); - - printf("%s %s -> %s\n", float_string, format_string, output_string); - free(output_string); - } - - return 0; -} - -// ---------------------------------------------------------------- -static int p(char* time_string, char* format_string) { - - struct tm tm; - memset(&tm, 0, sizeof(tm)); - - // xxx cmt try the non-floating-point-seconds case first and return quickly if so. - char* strptime_retval = mlr_arch_strptime(time_string, format_string, &tm); - if (strptime_retval != NULL) { - if (*strptime_retval != 0) { // xxx extraneous - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - time_t iseconds = mlr_arch_timegmlocal(&tm); - printf("%s, %s -> %u, \"%s\"\n", time_string, format_string, (unsigned)iseconds, strptime_retval); - return 0; - } - - char* pS = strstr(format_string, "%S"); - if (pS == NULL) { - // Couldn't have been because of floating-point-seconds stuff. No reason to try any harder. - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - - // xxx - // Input is "2017-04-09T00:51:09.123456 TZBLAHBLAH" - // with format "%Y-%m-%dT%H:%M:%S TZBLAHBLAH" - - // 1. Copy the format up to the %S but with nothing else after. This is temporary to help us locate - // the fractional-seconds part of the input string. - // Example temporary format: "%Y-%m-%dT%H:%M:%S" - - int truncated_format_string_length = pS - format_string + 2; - char* truncated_format_string = mlr_malloc_or_die(truncated_format_string_length + 1); - memcpy(truncated_format_string, format_string, truncated_format_string_length); - truncated_format_string[truncated_format_string_length] = 0; - printf("ORIGINAL FORMAT \"%s\"\n", format_string); - printf("TRUNCATED FORMAT \"%s\"\n", truncated_format_string); - - // 2. strptime using that truncated format and ignore the tm. Only look at the string return value. - // Example return value: ".123456 TZBLAHBLAH" - - strptime_retval = mlr_arch_strptime(time_string, truncated_format_string, &tm); - if (strptime_retval == NULL) { - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - printf("STRPTIME TEMP RETVAL \"%s\"\n", strptime_retval); - - // 3. strtod the return value to find the fractional-seconds part, and whatever's after. - // Example fractional-seconds part: ".123456" - // Example stuff after: " TZBLAHBLAH" - - char* stuff_after = NULL; - double fractional_seconds = strtod(strptime_retval, &stuff_after); - printf("FRACTIONAL SECONDS %.6lf\n", fractional_seconds); - printf("STUFF AFTER \"%s\"\n", stuff_after); - - // 4. Make a copy of the input string with the fractional seconds elided. - // Example: "2017-04-09T00:51:09 TZBLAHBLAH" - char* elided_fraction_input = mlr_malloc_or_die(strlen(time_string) + 1); - int input_length_to_fractional_seconds = strptime_retval - time_string; - memcpy(elided_fraction_input, time_string, input_length_to_fractional_seconds); - strcpy(&elided_fraction_input[input_length_to_fractional_seconds], stuff_after); - printf("ELIDE \"%s\"\n", elided_fraction_input); - - // 5. strptime the elided-fraction input string using the original format string. Get the tm. - memset(&tm, 0, sizeof(tm)); - strptime_retval = mlr_arch_strptime(elided_fraction_input, format_string, &tm); - if (strptime_retval == NULL) { - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - printf("STRPTIME ELIDE RETVAL \"%s\"\n", strptime_retval); - - // 6. Convert the tm to a time_t (seconds since the epoch) and then add the fractional seceonds. - time_t iseconds = mlr_arch_timegmlocal(&tm); - printf("ISECONDS %u\n", (unsigned)iseconds); - double fseconds = iseconds + fractional_seconds; - printf("FSECONDS %.6lf\n", fseconds); - printf("%s %s -> %.6lf\n", time_string, format_string, fseconds); - - return 0; -} - -//---------------------------------------------------------------------- -int main(int argc, char **argv) { - if (argc != 4) { - fprintf(stderr, "c!=4 b04k!\n"); - exit(1); - } - if (!strcmp(argv[1], "f")) { - return f(argv[2], argv[3]); - } else if (!strcmp(argv[1], "p")) { - return p(argv[2], argv[3]); - } else { - fprintf(stderr, "f/p b04k!\n"); - exit(1); - } - - return 0; -} diff --git a/c/experimental/ttmx.c b/c/experimental/ttmx.c deleted file mode 100644 index 5322165f1..000000000 --- a/c/experimental/ttmx.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include -char * strptimex(const char *buf, const char *fmt, struct tm *tm); -int main(void) { - struct tm tm; - char* foo = strptimex("2017-01-09T11:47:48Z", "%Y-%m-%dT%H:%M:%SZ", &tm); - printf("[%s]\n", foo); - return 0; -} diff --git a/c/input/Makefile.am b/c/input/Makefile.am deleted file mode 100644 index dc17cb846..000000000 --- a/c/input/Makefile.am +++ /dev/null @@ -1,35 +0,0 @@ -noinst_LTLIBRARIES= libinput.la -libinput_la_SOURCES= \ - byte_reader.h \ - byte_readers.h \ - file_reader_stdio.c \ - file_reader_stdio.h \ - file_ingestor_stdio.c \ - file_ingestor_stdio.h \ - json_parser.c \ - json_parser.h \ - mlr_json_adapter.c \ - mlr_json_adapter.h \ - line_readers.c \ - line_readers.h \ - lrec_reader.h \ - lrec_reader_gen.c \ - lrec_reader_in_memory.c \ - lrec_reader_stdio_csv.c \ - lrec_reader_stdio_csvlite.c \ - lrec_reader_stdio_dkvp.c \ - lrec_reader_stdio_json.c \ - lrec_reader_stdio_nidx.c \ - lrec_reader_stdio_xtab.c \ - lrec_readers.c \ - lrec_readers.h \ - peek_file_reader.c \ - peek_file_reader.h \ - stdio_byte_reader.c \ - string_byte_reader.c - -libinput_la_LIBADD= ../lib/libmlr.la -libinput_la_CPPFLAGS= -I${srcdir}/../ - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/input/Makefile.in b/c/input/Makefile.in deleted file mode 100644 index d21f3418e..000000000 --- a/c/input/Makefile.in +++ /dev/null @@ -1,767 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/input -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libinput_la_DEPENDENCIES = ../lib/libmlr.la -am_libinput_la_OBJECTS = libinput_la-file_reader_stdio.lo \ - libinput_la-file_ingestor_stdio.lo libinput_la-json_parser.lo \ - libinput_la-mlr_json_adapter.lo libinput_la-line_readers.lo \ - libinput_la-lrec_reader_gen.lo \ - libinput_la-lrec_reader_in_memory.lo \ - libinput_la-lrec_reader_stdio_csv.lo \ - libinput_la-lrec_reader_stdio_csvlite.lo \ - libinput_la-lrec_reader_stdio_dkvp.lo \ - libinput_la-lrec_reader_stdio_json.lo \ - libinput_la-lrec_reader_stdio_nidx.lo \ - libinput_la-lrec_reader_stdio_xtab.lo \ - libinput_la-lrec_readers.lo libinput_la-peek_file_reader.lo \ - libinput_la-stdio_byte_reader.lo \ - libinput_la-string_byte_reader.lo -libinput_la_OBJECTS = $(am_libinput_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libinput_la_SOURCES) -DIST_SOURCES = $(libinput_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libinput.la -libinput_la_SOURCES = \ - byte_reader.h \ - byte_readers.h \ - file_reader_stdio.c \ - file_reader_stdio.h \ - file_ingestor_stdio.c \ - file_ingestor_stdio.h \ - json_parser.c \ - json_parser.h \ - mlr_json_adapter.c \ - mlr_json_adapter.h \ - line_readers.c \ - line_readers.h \ - lrec_reader.h \ - lrec_reader_gen.c \ - lrec_reader_in_memory.c \ - lrec_reader_stdio_csv.c \ - lrec_reader_stdio_csvlite.c \ - lrec_reader_stdio_dkvp.c \ - lrec_reader_stdio_json.c \ - lrec_reader_stdio_nidx.c \ - lrec_reader_stdio_xtab.c \ - lrec_readers.c \ - lrec_readers.h \ - peek_file_reader.c \ - peek_file_reader.h \ - stdio_byte_reader.c \ - string_byte_reader.c - -libinput_la_LIBADD = ../lib/libmlr.la -libinput_la_CPPFLAGS = -I${srcdir}/../ -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/input/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/input/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libinput.la: $(libinput_la_OBJECTS) $(libinput_la_DEPENDENCIES) $(EXTRA_libinput_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libinput_la_OBJECTS) $(libinput_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-file_ingestor_stdio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-file_reader_stdio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-json_parser.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-line_readers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_gen.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_in_memory.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_json.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-lrec_readers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-mlr_json_adapter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-peek_file_reader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-stdio_byte_reader.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinput_la-string_byte_reader.Plo@am__quote@ - -.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 $@ $< - -libinput_la-file_reader_stdio.lo: file_reader_stdio.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-file_reader_stdio.lo -MD -MP -MF $(DEPDIR)/libinput_la-file_reader_stdio.Tpo -c -o libinput_la-file_reader_stdio.lo `test -f 'file_reader_stdio.c' || echo '$(srcdir)/'`file_reader_stdio.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-file_reader_stdio.Tpo $(DEPDIR)/libinput_la-file_reader_stdio.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_reader_stdio.c' object='libinput_la-file_reader_stdio.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-file_reader_stdio.lo `test -f 'file_reader_stdio.c' || echo '$(srcdir)/'`file_reader_stdio.c - -libinput_la-file_ingestor_stdio.lo: file_ingestor_stdio.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-file_ingestor_stdio.lo -MD -MP -MF $(DEPDIR)/libinput_la-file_ingestor_stdio.Tpo -c -o libinput_la-file_ingestor_stdio.lo `test -f 'file_ingestor_stdio.c' || echo '$(srcdir)/'`file_ingestor_stdio.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-file_ingestor_stdio.Tpo $(DEPDIR)/libinput_la-file_ingestor_stdio.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file_ingestor_stdio.c' object='libinput_la-file_ingestor_stdio.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-file_ingestor_stdio.lo `test -f 'file_ingestor_stdio.c' || echo '$(srcdir)/'`file_ingestor_stdio.c - -libinput_la-json_parser.lo: json_parser.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-json_parser.lo -MD -MP -MF $(DEPDIR)/libinput_la-json_parser.Tpo -c -o libinput_la-json_parser.lo `test -f 'json_parser.c' || echo '$(srcdir)/'`json_parser.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-json_parser.Tpo $(DEPDIR)/libinput_la-json_parser.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='json_parser.c' object='libinput_la-json_parser.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-json_parser.lo `test -f 'json_parser.c' || echo '$(srcdir)/'`json_parser.c - -libinput_la-mlr_json_adapter.lo: mlr_json_adapter.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-mlr_json_adapter.lo -MD -MP -MF $(DEPDIR)/libinput_la-mlr_json_adapter.Tpo -c -o libinput_la-mlr_json_adapter.lo `test -f 'mlr_json_adapter.c' || echo '$(srcdir)/'`mlr_json_adapter.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-mlr_json_adapter.Tpo $(DEPDIR)/libinput_la-mlr_json_adapter.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mlr_json_adapter.c' object='libinput_la-mlr_json_adapter.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-mlr_json_adapter.lo `test -f 'mlr_json_adapter.c' || echo '$(srcdir)/'`mlr_json_adapter.c - -libinput_la-line_readers.lo: line_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-line_readers.lo -MD -MP -MF $(DEPDIR)/libinput_la-line_readers.Tpo -c -o libinput_la-line_readers.lo `test -f 'line_readers.c' || echo '$(srcdir)/'`line_readers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-line_readers.Tpo $(DEPDIR)/libinput_la-line_readers.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='line_readers.c' object='libinput_la-line_readers.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-line_readers.lo `test -f 'line_readers.c' || echo '$(srcdir)/'`line_readers.c - -libinput_la-lrec_reader_gen.lo: lrec_reader_gen.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_gen.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_gen.Tpo -c -o libinput_la-lrec_reader_gen.lo `test -f 'lrec_reader_gen.c' || echo '$(srcdir)/'`lrec_reader_gen.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_gen.Tpo $(DEPDIR)/libinput_la-lrec_reader_gen.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_gen.c' object='libinput_la-lrec_reader_gen.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_gen.lo `test -f 'lrec_reader_gen.c' || echo '$(srcdir)/'`lrec_reader_gen.c - -libinput_la-lrec_reader_in_memory.lo: lrec_reader_in_memory.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_in_memory.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_in_memory.Tpo -c -o libinput_la-lrec_reader_in_memory.lo `test -f 'lrec_reader_in_memory.c' || echo '$(srcdir)/'`lrec_reader_in_memory.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_in_memory.Tpo $(DEPDIR)/libinput_la-lrec_reader_in_memory.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_in_memory.c' object='libinput_la-lrec_reader_in_memory.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_in_memory.lo `test -f 'lrec_reader_in_memory.c' || echo '$(srcdir)/'`lrec_reader_in_memory.c - -libinput_la-lrec_reader_stdio_csv.lo: lrec_reader_stdio_csv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_csv.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Tpo -c -o libinput_la-lrec_reader_stdio_csv.lo `test -f 'lrec_reader_stdio_csv.c' || echo '$(srcdir)/'`lrec_reader_stdio_csv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_csv.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_csv.c' object='libinput_la-lrec_reader_stdio_csv.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_csv.lo `test -f 'lrec_reader_stdio_csv.c' || echo '$(srcdir)/'`lrec_reader_stdio_csv.c - -libinput_la-lrec_reader_stdio_csvlite.lo: lrec_reader_stdio_csvlite.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_csvlite.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Tpo -c -o libinput_la-lrec_reader_stdio_csvlite.lo `test -f 'lrec_reader_stdio_csvlite.c' || echo '$(srcdir)/'`lrec_reader_stdio_csvlite.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_csvlite.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_csvlite.c' object='libinput_la-lrec_reader_stdio_csvlite.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_csvlite.lo `test -f 'lrec_reader_stdio_csvlite.c' || echo '$(srcdir)/'`lrec_reader_stdio_csvlite.c - -libinput_la-lrec_reader_stdio_dkvp.lo: lrec_reader_stdio_dkvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_dkvp.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Tpo -c -o libinput_la-lrec_reader_stdio_dkvp.lo `test -f 'lrec_reader_stdio_dkvp.c' || echo '$(srcdir)/'`lrec_reader_stdio_dkvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_dkvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_dkvp.c' object='libinput_la-lrec_reader_stdio_dkvp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_dkvp.lo `test -f 'lrec_reader_stdio_dkvp.c' || echo '$(srcdir)/'`lrec_reader_stdio_dkvp.c - -libinput_la-lrec_reader_stdio_json.lo: lrec_reader_stdio_json.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_json.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Tpo -c -o libinput_la-lrec_reader_stdio_json.lo `test -f 'lrec_reader_stdio_json.c' || echo '$(srcdir)/'`lrec_reader_stdio_json.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_json.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_json.c' object='libinput_la-lrec_reader_stdio_json.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_json.lo `test -f 'lrec_reader_stdio_json.c' || echo '$(srcdir)/'`lrec_reader_stdio_json.c - -libinput_la-lrec_reader_stdio_nidx.lo: lrec_reader_stdio_nidx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_nidx.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Tpo -c -o libinput_la-lrec_reader_stdio_nidx.lo `test -f 'lrec_reader_stdio_nidx.c' || echo '$(srcdir)/'`lrec_reader_stdio_nidx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_nidx.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_nidx.c' object='libinput_la-lrec_reader_stdio_nidx.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_nidx.lo `test -f 'lrec_reader_stdio_nidx.c' || echo '$(srcdir)/'`lrec_reader_stdio_nidx.c - -libinput_la-lrec_reader_stdio_xtab.lo: lrec_reader_stdio_xtab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_reader_stdio_xtab.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Tpo -c -o libinput_la-lrec_reader_stdio_xtab.lo `test -f 'lrec_reader_stdio_xtab.c' || echo '$(srcdir)/'`lrec_reader_stdio_xtab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Tpo $(DEPDIR)/libinput_la-lrec_reader_stdio_xtab.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_reader_stdio_xtab.c' object='libinput_la-lrec_reader_stdio_xtab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_reader_stdio_xtab.lo `test -f 'lrec_reader_stdio_xtab.c' || echo '$(srcdir)/'`lrec_reader_stdio_xtab.c - -libinput_la-lrec_readers.lo: lrec_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-lrec_readers.lo -MD -MP -MF $(DEPDIR)/libinput_la-lrec_readers.Tpo -c -o libinput_la-lrec_readers.lo `test -f 'lrec_readers.c' || echo '$(srcdir)/'`lrec_readers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-lrec_readers.Tpo $(DEPDIR)/libinput_la-lrec_readers.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_readers.c' object='libinput_la-lrec_readers.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-lrec_readers.lo `test -f 'lrec_readers.c' || echo '$(srcdir)/'`lrec_readers.c - -libinput_la-peek_file_reader.lo: peek_file_reader.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-peek_file_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-peek_file_reader.Tpo -c -o libinput_la-peek_file_reader.lo `test -f 'peek_file_reader.c' || echo '$(srcdir)/'`peek_file_reader.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-peek_file_reader.Tpo $(DEPDIR)/libinput_la-peek_file_reader.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='peek_file_reader.c' object='libinput_la-peek_file_reader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-peek_file_reader.lo `test -f 'peek_file_reader.c' || echo '$(srcdir)/'`peek_file_reader.c - -libinput_la-stdio_byte_reader.lo: stdio_byte_reader.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-stdio_byte_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-stdio_byte_reader.Tpo -c -o libinput_la-stdio_byte_reader.lo `test -f 'stdio_byte_reader.c' || echo '$(srcdir)/'`stdio_byte_reader.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-stdio_byte_reader.Tpo $(DEPDIR)/libinput_la-stdio_byte_reader.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio_byte_reader.c' object='libinput_la-stdio_byte_reader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-stdio_byte_reader.lo `test -f 'stdio_byte_reader.c' || echo '$(srcdir)/'`stdio_byte_reader.c - -libinput_la-string_byte_reader.lo: string_byte_reader.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libinput_la-string_byte_reader.lo -MD -MP -MF $(DEPDIR)/libinput_la-string_byte_reader.Tpo -c -o libinput_la-string_byte_reader.lo `test -f 'string_byte_reader.c' || echo '$(srcdir)/'`string_byte_reader.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libinput_la-string_byte_reader.Tpo $(DEPDIR)/libinput_la-string_byte_reader.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='string_byte_reader.c' object='libinput_la-string_byte_reader.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libinput_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libinput_la-string_byte_reader.lo `test -f 'string_byte_reader.c' || echo '$(srcdir)/'`string_byte_reader.c - -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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/input/README.md b/c/input/README.md deleted file mode 100644 index 7a16b47b9..000000000 --- a/c/input/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Miller file/record input - -These are readers for Miller file formats, stdio and mmap versions. The stdio -and mmap record parsers are similar but not identical, due to inversion of -processing order: getting an entire mallocked line and then splitting it by -separators in the former case, versus splitting while discovering end of line in -the latter case. The code duplication could be largely removed by having the -mmap readers find end-of-lines, then split up the lines -- however that -requires two passes through input strings and for performance I want just a -single pass. - -While there are separate record-writers for CSV and pretty-print, there is just -a common record-reader: pretty-print is CSV with field separator being a space, -and `allow_repeat_ifs` set to true. - -Idea of `header_keeper` objects for CSV: each `header_keeper` object retains -the input-line backing and the `slls_t` for a CSV header line which is used by -one or more CSV data lines. Meanwhile some mappers (e.g. `sort`, `tac`) retain -input records from the entire data stream, which may include header-schema -changes in the input stream. This means we need to keep headers intact as long -as any lrecs are pointing to them. One option is reference-counting which I -experimented with; it was messy and error-prone. The approach used here is to -keep a hash map from header-schema to `header_keeper` object. The current -`pheader_keeper` is a pointer into one of those. Then when the reader is -freed, all its header-keepers are freed. - -There is some code duplication involving single-character and multi-character -IRS, IFS, and IPS. While single-character is a special case of multi-character, -keeping separate implementations for single-character and multi-character -versions is worthwhile for performance. The difference is betweeen `*p == ifs` -and `streqn(p, ifs, ifslen)`: even with function inlining, the latter is more -expensive than the former in the single-character case. - -Example timing info for a million-line file is as follows: - -``` -TIME IN SECONDS 0.945 -- mlr --irs lf --ifs , --ips = check ../data/big.dkvp2 -TIME IN SECONDS 1.139 -- mlr --irs crlf --ifs , --ips = check ../data/big.dkvp2 -TIME IN SECONDS 1.291 -- mlr --irs lf --ifs /, --ips =: check ../data/big.dkvp2 -TIME IN SECONDS 1.443 -- mlr --irs crlf --ifs /, --ips =: check ../data/big.dkvp2 -``` - -i.e. (even when averaged over multiple runs) performance improvements of 20-30% -are obtained by special-casing single-character-separator code: this is worth -doing. diff --git a/c/input/byte_reader.h b/c/input/byte_reader.h deleted file mode 100644 index 26644e0c7..000000000 --- a/c/input/byte_reader.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef BYTE_READER_H -#define BYTE_READER_H - -struct _byte_reader_t; - -// Abstract byte source for input. Impls are stdio from file/stdin, mmapped -// file, and string-backed (for unit test). - -// pvstate will nominally hold FILE*, mmap fd and pointers, string-backing, etc. - -// The open function should return TRUE on success and FALSE on failure. -// For the string reader, the char* argument is the backing string itself. -typedef int byte_reader_open_func_t(struct _byte_reader_t* pbr, char* prepipe, char* filename); - -// The reader function should return a character, as an int. Reads past end of -// file should keep returning EOF, even if called multiple times. -typedef int byte_reader_read_func_t(struct _byte_reader_t* pbr); - -// The close function should close file pointers/descriptors, as well as any -// necessary heap-frees. -typedef void byte_reader_close_func_t(struct _byte_reader_t* pbr, char* prepipe); - -typedef struct _byte_reader_t { - void* pvstate; - byte_reader_open_func_t* popen_func; - byte_reader_read_func_t* pread_func; - byte_reader_close_func_t* pclose_func; -} byte_reader_t; - -#endif // BYTE_READER_H diff --git a/c/input/byte_readers.h b/c/input/byte_readers.h deleted file mode 100644 index 72669ff26..000000000 --- a/c/input/byte_readers.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef BYTE_READERS_H -#define BYTE_READERS_H -#include "input/byte_reader.h" - -byte_reader_t* string_byte_reader_alloc(); -byte_reader_t* stdio_byte_reader_alloc(); - -void string_byte_reader_free(byte_reader_t* pbr); -void stdio_byte_reader_free(byte_reader_t* pbr); - -#endif // BYTE_READERS_H diff --git a/c/input/file_ingestor_stdio.c b/c/input/file_ingestor_stdio.c deleted file mode 100644 index 8f792af40..000000000 --- a/c/input/file_ingestor_stdio.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlrescape.h" -#include "lib/mlr_globals.h" -#include "file_ingestor_stdio.h" - -// ---------------------------------------------------------------- -void* file_ingestor_stdio_vopen(void* pvstate, char* prepipe, char* filename) { - char* file_contents_buffer = NULL; - size_t file_size = 0; - - if (prepipe == NULL) { - if (streq(filename, "-")) { - file_contents_buffer = read_fp_into_memory(stdin, &file_size); - if (file_contents_buffer == NULL) { - fprintf(stderr, "%s: Couldn't open standard input for read.\n", MLR_GLOBALS.bargv0); - exit(1); - } - } else { - file_contents_buffer = read_file_into_memory(filename, &file_size); - if (file_contents_buffer == NULL) { - fprintf(stderr, "%s: Couldn't open \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); - exit(1); - } - } - - } else { - char* escaped_filename = alloc_file_name_escaped_for_popen(filename); - char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); - if (streq(filename, "-")) - sprintf(command, "%s", prepipe); - else - sprintf(command, "%s < %s", prepipe, escaped_filename); - FILE* input_stream = popen(command, "r"); - if (input_stream == NULL) { - fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); - perror(command); - exit(1); - } - file_contents_buffer = read_fp_into_memory(input_stream, &file_size); - if (file_contents_buffer == NULL) { - fprintf(stderr, "%s: Couldn't open popen output for read: \"%s\".\n", MLR_GLOBALS.bargv0, command); - exit(1); - } - pclose(input_stream); - free(escaped_filename); - free(command); - } - file_ingestor_stdio_state_t* pstate = mlr_malloc_or_die(sizeof(file_ingestor_stdio_state_t)); - pstate->sof = file_contents_buffer; - pstate->eof = &file_contents_buffer[file_size]; - return pstate; -} - -// ---------------------------------------------------------------- -void file_ingestor_stdio_nop_vclose(void* pvstate, void* pvhandle, char* prepipe) { -} - -// ---------------------------------------------------------------- -void file_ingestor_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe) { - char* file_contents_buffer = pvhandle; - free(file_contents_buffer); - file_ingestor_stdio_state_t* pstate = pvstate; - free(pstate); -} diff --git a/c/input/file_ingestor_stdio.h b/c/input/file_ingestor_stdio.h deleted file mode 100644 index b1caa7036..000000000 --- a/c/input/file_ingestor_stdio.h +++ /dev/null @@ -1,23 +0,0 @@ -// ================================================================ -// Abstraction layer for stdio file-read logic, when ingesting entirely into memory. -// ================================================================ - -#ifndef FILE_INGESTOR_STDIO_H -#define FILE_INGESTOR_STDIO_H - -typedef struct _file_ingestor_stdio_state_t { - char* sof; - char* eof; -} file_ingestor_stdio_state_t; - -// The vclose method frees memory. The nop flavor does not. The latter is used by the JSON-input -// lrec reader: lrecs have keys/values pointing into parsed-JSON structures which in turn have -// values pointing to the ingested-file buffer. This is done for the sake of performance, to reduce -// data-copies. But it also means we can't free ingested files after ingesting their contents into -// lrecs, since the lrecs in question might be retained after the input-file closes. Example: mlr -// sort on multiple files. -void* file_ingestor_stdio_vopen(void* pvstate, char* prepipe, char* file_name); -void file_ingestor_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe); -void file_ingestor_stdio_nop_vclose(void* pvstate, void* pvhandle, char* prepipe); - -#endif // FILE_INGESTOR_STDIO_H diff --git a/c/input/file_reader_stdio.c b/c/input/file_reader_stdio.c deleted file mode 100644 index adb4d28d7..000000000 --- a/c/input/file_reader_stdio.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlrescape.h" -#include "lib/mlr_globals.h" -#include "file_reader_stdio.h" - -// ---------------------------------------------------------------- -void* file_reader_stdio_vopen(void* pvstate, char* prepipe, char* filename) { - FILE* input_stream = stdin; - - if (prepipe == NULL) { - if (!streq(filename, "-")) { - input_stream = fopen(filename, "r"); - if (input_stream == NULL) { - fprintf(stderr, "%s: Couldn't open \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); - perror(filename); - exit(1); - } - } - } else { - char* escaped_filename = alloc_file_name_escaped_for_popen(filename); - char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); - if (streq(filename, "-")) - sprintf(command, "%s", prepipe); - else - sprintf(command, "%s < %s", prepipe, escaped_filename); - input_stream = popen(command, "r"); - if (input_stream == NULL) { - fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); - perror(command); - exit(1); - } - free(escaped_filename); - free(command); - } - return input_stream; -} - -// ---------------------------------------------------------------- -void file_reader_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe) { - FILE* input_stream = pvhandle; - if (prepipe == NULL) { - if (input_stream != stdin) - fclose(input_stream); - } else { - pclose(input_stream); - } -} diff --git a/c/input/file_reader_stdio.h b/c/input/file_reader_stdio.h deleted file mode 100644 index 64146e4ea..000000000 --- a/c/input/file_reader_stdio.h +++ /dev/null @@ -1,11 +0,0 @@ -// ================================================================ -// Abstraction layer for stdio file-read logic. -// ================================================================ - -#ifndef FILE_READER_STDIO_H -#define FILE_READER_STDIO_H - -void* file_reader_stdio_vopen(void* pvstate, char* prepipe, char* file_name); -void file_reader_stdio_vclose(void* pvstate, void* pvhandle, char* prepipe); - -#endif // FILE_READER_STDIO_H diff --git a/c/input/json_parser.c b/c/input/json_parser.c deleted file mode 100644 index 923749ba9..000000000 --- a/c/input/json_parser.c +++ /dev/null @@ -1,1030 +0,0 @@ -// ================================================================ -// Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. -// https://github.com/udp/json-parser -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -// SUCH DAMAGE. -// ================================================================ - -// Miller to-do items: -// 1. Modify the data structures so sval & length are shared between boolean, integer, & double. -// 2. Just append a byte-range (start to end pointer) rather than making repeated per-character calls -// to these functions. - -#include "lib/mlrutil.h" -#include "json_parser.h" - -const struct _json_value_t json_value_none; - -#include -#include -#include -#include - -typedef unsigned int json_uchar; - -static unsigned char hex_value(json_char c) { - if (isdigit(c)) - return c - '0'; - - switch (c) { - case 'a': case 'A': return 0x0A; - case 'b': case 'B': return 0x0B; - case 'c': case 'C': return 0x0C; - case 'd': case 'D': return 0x0D; - case 'e': case 'E': return 0x0E; - case 'f': case 'F': return 0x0F; - default: return 0xFF; - } -} - -// ---------------------------------------------------------------- -typedef struct _json_state_{ - unsigned long used_memory; - - unsigned int uint_max; - unsigned long ulong_max; - - int first_pass; - - const json_char * ptr; - unsigned int cur_line, cur_col; - -} json_parser_state_t; - -// ---------------------------------------------------------------- -static void * default_alloc(size_t size, int zero) { - void* ptr = mlr_malloc_or_die(size); - if (zero) - memset(ptr, 0, size); - return ptr; -} - -// ---------------------------------------------------------------- -static void * json_alloc(json_parser_state_t * pstate, unsigned long size, int zero) { - if ((pstate->ulong_max - pstate->used_memory) < size) - return 0; - - return default_alloc(size, zero); -} - -// ---------------------------------------------------------------- -static int new_value( - json_parser_state_t * pstate, - json_value_t ** ptop, - json_value_t ** proot, - json_value_t ** palloc, - json_type_t type) -{ - json_value_t * pvalue; - int values_size; - - if (!pstate->first_pass) { - pvalue = *ptop = *palloc; - *palloc = (*palloc)->_reserved.next_alloc; - - if (!*proot) - *proot = pvalue; - - switch (pvalue->type) { - case JSON_ARRAY: - if (pvalue->u.array.length == 0) - break; - if (! (pvalue->u.array.values = (json_value_t **) json_alloc - (pstate, pvalue->u.array.length * sizeof(json_value_t *), 0)) ) - { - return 0; - } - pvalue->u.array.length = 0; - break; - - case JSON_OBJECT: - if (pvalue->u.object.length == 0) - break; - values_size = sizeof(*pvalue->u.object.p.values) * pvalue->u.object.length; - if (! (pvalue->u.object.p.values = (json_object_entry_t *) json_alloc - (pstate, values_size + ((unsigned long) pvalue->u.object.p.values), 0)) ) - { - return 0; - } - pvalue->_reserved.p.pobject_mem = (*(char **) &pvalue->u.object.p.mem) + values_size; - pvalue->u.object.length = 0; - break; - - case JSON_STRING: - if (! (pvalue->u.string.ptr = (json_char *) json_alloc - (pstate, (pvalue->u.string.length + 1) * sizeof (json_char), 0)) ) - { - return 0; - } - pvalue->u.string.length = 0; - break; - - case JSON_BOOLEAN: - if (! (pvalue->u.boolean.sval = (json_char *) json_alloc - (pstate, (pvalue->u.boolean.length + 1) * sizeof (json_char), 1)) ) - { - return 0; - } - pvalue->u.boolean.length = 0; - break; - - case JSON_INTEGER: - if (! (pvalue->u.integer.sval = (json_char *) json_alloc - (pstate, (pvalue->u.integer.length + 5) * sizeof (json_char), 1)) ) - { - return 0; - } - pvalue->u.integer.length = 0; - break; - - case JSON_DOUBLE: - if (! (pvalue->u.dbl.sval = (json_char *) json_alloc - (pstate, (pvalue->u.dbl.length + 5) * sizeof (json_char), 1)) ) - { - return 0; - } - pvalue->u.dbl.length = 0; - break; - - default: - break; - } - - return 1; - } - - if (! (pvalue = (json_value_t *) json_alloc(pstate, sizeof (json_value_t), 1))) { - return 0; - } - - if (!*proot) - *proot = pvalue; - - pvalue->type = type; - pvalue->parent = *ptop; - - pvalue->line = pstate->cur_line; - pvalue->col = pstate->cur_col; - - if (*palloc) - (*palloc)->_reserved.next_alloc = pvalue; - - *palloc = *ptop = pvalue; - - return 1; -} - -// ---------------------------------------------------------------- -#define WHITESPACE \ - case '\n': ++state.cur_line; state.cur_col = 0; \ - case ' ': case '\t': case '\r' - -#define STRING_ADD(b) \ - do { if (!state.first_pass) string[string_length] = b; ++string_length; } while (0); - -static inline void boolean_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { - if (!pstate->first_pass) { - ptop->u.boolean.sval[ptop->u.boolean.length++] = b; - } else { - ptop->u.boolean.length++; - } -} -static inline void integer_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { - if (!pstate->first_pass) { - ptop->u.integer.sval[ptop->u.integer.length++] = b; - } else { - ptop->u.integer.length++; - } -} -static inline void dbl_sval_add(json_parser_state_t* pstate, json_value_t* ptop, char b) { - if (!pstate->first_pass) { - ptop->u.dbl.sval[ptop->u.dbl.length++] = b; - } else { - ptop->u.dbl.length++; - } -} - - -static inline void boolean_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { - if (!pstate->first_pass) { - ptop->u.boolean.sval[ptop->u.boolean.length] = 0; - } -} -static inline void integer_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { - if (!pstate->first_pass) { - ptop->u.integer.sval[ptop->u.integer.length] = 0; - } -} -static inline void dbl_sval_end(json_parser_state_t* pstate, json_value_t* ptop) { - if (!pstate->first_pass) { - ptop->u.dbl.sval[ptop->u.dbl.length] = 0; - } -} - -static const long - FLAG_NEXT = 1 << 0, - FLAG_REPROC = 1 << 1, - FLAG_NEED_COMMA = 1 << 2, - FLAG_SEEK_VALUE = 1 << 3, - FLAG_ESCAPED = 1 << 4, - FLAG_IN_STRING = 1 << 5, - FLAG_NEED_COLON = 1 << 6, - FLAG_DONE = 1 << 7, - FLAG_NUM_NEGATIVE = 1 << 8, - FLAG_NUM_ZERO = 1 << 9, - FLAG_NUM_E = 1 << 10, - FLAG_NUM_E_GOT_SIGN = 1 << 11, - FLAG_NUM_E_NEGATIVE = 1 << 12; - -// ================================================================ -json_value_t * json_parse( - const json_char * json, - size_t length, - char * error_buf, - json_char** ppend_of_item, - long long *pline_number) // should be set to 0 by the caller before 1st call -{ - json_char error[JSON_ERROR_MAX]; - const json_char * end; - json_value_t * ptop, * proot, * palloc = 0; - json_parser_state_t state = { 0 }; - long flags; - long num_digits = 0, num_e = 0; - json_int_t num_fraction = 0; - *ppend_of_item = NULL; - - // Skip UTF-8 BOM - if (length >= 3 && ((unsigned char) json[0]) == 0xEF - && ((unsigned char) json[1]) == 0xBB - && ((unsigned char) json[2]) == 0xBF) - { - json += 3; - length -= 3; - } - - error[0] = '\0'; - end = (json + length); - - memset(&state.uint_max, 0xFF, sizeof(state.uint_max)); - memset(&state.ulong_max, 0xFF, sizeof(state.ulong_max)); - - state.uint_max -= 8; /* limit of how much can be added before next check */ - state.ulong_max -= 8; - - for (state.first_pass = 1; state.first_pass >= 0; --state.first_pass) { - json_uchar uchar; - unsigned char uc_b1, uc_b2, uc_b3, uc_b4; - json_char * string = 0; - unsigned int string_length = 0; - - ptop = proot = 0; - flags = FLAG_SEEK_VALUE; - - state.cur_line = *pline_number + 1; - - for (state.ptr = json ;; ++state.ptr) { - json_char* pb = (json_char*)((state.ptr == end) ? NULL : state.ptr); - json_char b = (state.ptr == end) ? 0 : *state.ptr; - - if (flags & FLAG_IN_STRING) { - if (!b) { - sprintf(error, "Unexpected EOF in string at line %d column %d.", - state.cur_line, state.cur_col); - goto e_failed; - } - - if (string_length > state.uint_max) - goto e_overflow; - - if (flags & FLAG_ESCAPED) { - flags &= ~ FLAG_ESCAPED; - - switch (b) { - case 'b': STRING_ADD('\b'); break; - case 'f': STRING_ADD('\f'); break; - case 'n': STRING_ADD('\n'); break; - case 'r': STRING_ADD('\r'); break; - case 't': STRING_ADD('\t'); break; - case 'u': - - if (end - state.ptr < 4 || - (uc_b1 = hex_value (*++state.ptr)) == 0xFF || - (uc_b2 = hex_value (*++state.ptr)) == 0xFF || - (uc_b3 = hex_value (*++state.ptr)) == 0xFF || - (uc_b4 = hex_value (*++state.ptr)) == 0xFF) - { - sprintf(error, "Invalid character value `%c` at line %d column %d.", - b, state.cur_line, state.cur_col); - goto e_failed; - } - - uc_b1 = (uc_b1 << 4) | uc_b2; - uc_b2 = (uc_b3 << 4) | uc_b4; - uchar = (uc_b1 << 8) | uc_b2; - - if ((uchar & 0xF800) == 0xD800) { - json_uchar uchar2; - - if (end - state.ptr < 6 || (*++state.ptr) != '\\' || (*++state.ptr) != 'u' || - (uc_b1 = hex_value (*++state.ptr)) == 0xFF || - (uc_b2 = hex_value (*++state.ptr)) == 0xFF || - (uc_b3 = hex_value (*++state.ptr)) == 0xFF || - (uc_b4 = hex_value (*++state.ptr)) == 0xFF) - { - sprintf(error, "Invalid character value `%c` at line %d column %d.", - b, state.cur_line, state.cur_col); - goto e_failed; - } - - uc_b1 = (uc_b1 << 4) | uc_b2; - uc_b2 = (uc_b3 << 4) | uc_b4; - uchar2 = (uc_b1 << 8) | uc_b2; - - uchar = 0x010000 | ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF); - } - - if (sizeof(json_char) >= sizeof(json_uchar) || (uchar <= 0x7F)) { - STRING_ADD((json_char) uchar); - break; - } - - if (uchar <= 0x7FF) { - if (state.first_pass) { - string_length += 2; - } else { - string[string_length ++] = 0xC0 | (uchar >> 6); - string[string_length ++] = 0x80 | (uchar & 0x3F); - } - - break; - } - - if (uchar <= 0xFFFF) { - if (state.first_pass) { - string_length += 3; - } else { - string[string_length ++] = 0xE0 | (uchar >> 12); - string[string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); - string[string_length ++] = 0x80 | (uchar & 0x3F); - } - - break; - } - - if (state.first_pass) { - string_length += 4; - } else { string[string_length ++] = 0xF0 | (uchar >> 18); - string[string_length ++] = 0x80 | ((uchar >> 12) & 0x3F); - string[string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); - string[string_length ++] = 0x80 | (uchar & 0x3F); - } - - break; - - default: - STRING_ADD(b); - } - - continue; - } - - if (b == '\\') { - flags |= FLAG_ESCAPED; - continue; - } - - if (b == '"') { - if (!state.first_pass) - string[string_length] = 0; - - flags &= ~ FLAG_IN_STRING; - string = 0; - - switch (ptop->type) { - case JSON_STRING: - ptop->u.string.length = string_length; - flags |= FLAG_NEXT; - break; - - case JSON_OBJECT: - - if (state.first_pass) { - (*(json_char **) &ptop->u.object.p.mem) += string_length + 1; - } else { - ptop->u.object.p.values[ptop->u.object.length].name - = (json_char *) ptop->_reserved.p.pobject_mem; - - ptop->u.object.p.values[ptop->u.object.length].name_length = string_length; - - (*(json_char **) &ptop->_reserved.p.pobject_mem) += string_length + 1; - } - - flags |= FLAG_SEEK_VALUE | FLAG_NEED_COLON; - continue; - - default: - break; - } - } else { - STRING_ADD(b); - continue; - } - } - - if (flags & FLAG_DONE) { - if (!b) - break; - - *ppend_of_item = pb + 1; - break; - - state.cur_col++; - switch (b) { - WHITESPACE: - continue; - - default: - sprintf(error, "Line %d column %d: Trailing text: `%c`", - state.cur_line, state.cur_col, b); - goto e_failed; - } - } - - if (flags & FLAG_SEEK_VALUE) { - state.cur_col++; - switch (b) { - WHITESPACE: - continue; - - case ']': - if (ptop && ptop->type == JSON_ARRAY) { - flags = (flags & ~ (FLAG_NEED_COMMA | FLAG_SEEK_VALUE)) | FLAG_NEXT; - } else { - sprintf (error, "Line %d column %d: Unexpected ]", - state.cur_line, state.cur_col); - goto e_failed; - } - - break; - - default: - if (flags & FLAG_NEED_COMMA) { - if (b == ',') { - flags &= ~ FLAG_NEED_COMMA; - continue; - } else { - sprintf(error, "Line %d column %d: Expected , before %c", - state.cur_line, state.cur_col, b); - goto e_failed; - } - } - - if (flags & FLAG_NEED_COLON) { - if (b == ':') { - flags &= ~ FLAG_NEED_COLON; - continue; - } else { - sprintf(error, "Line %d column %d: Expected : before %c", - state.cur_line, state.cur_col, b); - goto e_failed; - } - } - - flags &= ~ FLAG_SEEK_VALUE; - - switch (b) { - case '{': - if (!new_value(&state, &ptop, &proot, &palloc, JSON_OBJECT)) - goto e_alloc_failure; - continue; - - case '[': - if (!new_value(&state, &ptop, &proot, &palloc, JSON_ARRAY)) - goto e_alloc_failure; - flags |= FLAG_SEEK_VALUE; - continue; - - case '"': - if (!new_value(&state, &ptop, &proot, &palloc, JSON_STRING)) - goto e_alloc_failure; - flags |= FLAG_IN_STRING; - string = ptop->u.string.ptr; - string_length = 0; - continue; - - case 't': - if ((end - state.ptr) < 3 || *(++state.ptr) != 'r' || - *(++state.ptr) != 'u' || *(++state.ptr) != 'e') - { - goto e_unknown_value; - } - - if (!new_value(&state, &ptop, &proot, &palloc, JSON_BOOLEAN)) - goto e_alloc_failure; - - boolean_sval_add(&state, ptop, 't'); - boolean_sval_add(&state, ptop, 'r'); - boolean_sval_add(&state, ptop, 'u'); - boolean_sval_add(&state, ptop, 'e'); - boolean_sval_end(&state, ptop); - - flags |= FLAG_NEXT; - break; - - case 'f': - - if ((end - state.ptr) < 4 || *(++state.ptr) != 'a' || - *(++state.ptr) != 'l' || *(++state.ptr) != 's' || - *(++state.ptr) != 'e') - { - goto e_unknown_value; - } - - if (!new_value(&state, &ptop, &proot, &palloc, JSON_BOOLEAN)) - goto e_alloc_failure; - boolean_sval_add(&state, ptop, 'f'); - boolean_sval_add(&state, ptop, 'a'); - boolean_sval_add(&state, ptop, 'l'); - boolean_sval_add(&state, ptop, 's'); - boolean_sval_add(&state, ptop, 'e'); - boolean_sval_end(&state, ptop); - - flags |= FLAG_NEXT; - break; - - case 'n': - if ((end - state.ptr) < 3 || *(++state.ptr) != 'u' || - *(++state.ptr) != 'l' || *(++state.ptr) != 'l') - { - goto e_unknown_value; - } - - if (!new_value(&state, &ptop, &proot, &palloc, JSON_NULL)) - goto e_alloc_failure; - - flags |= FLAG_NEXT; - break; - - default: - if (isdigit (b) || b == '-') { - // Start of new number - if (!new_value(&state, &ptop, &proot, &palloc, JSON_INTEGER)) - goto e_alloc_failure; - - if (!state.first_pass) { - while (isdigit(b) || b == '+' || b == '-' || b == 'e' || b == 'E' || b == '.') { - - switch (ptop->type) { - case JSON_INTEGER: - integer_sval_add(&state, ptop, b); - break; - case JSON_DOUBLE: - dbl_sval_add(&state, ptop, b); - break; - default: - break; - } - - if ((++state.ptr) == end) { - - switch (ptop->type) { - case JSON_INTEGER: - integer_sval_end(&state, ptop); - break; - case JSON_DOUBLE: - dbl_sval_end(&state, ptop); - break; - default: - break; - } - - b = 0; - break; - } - - b = *state.ptr; - } - - flags |= FLAG_NEXT | FLAG_REPROC; - break; - } - - flags &= ~ (FLAG_NUM_NEGATIVE | FLAG_NUM_E | - FLAG_NUM_E_GOT_SIGN | FLAG_NUM_E_NEGATIVE | FLAG_NUM_ZERO); - - num_digits = 0; - num_fraction = 0; - num_e = 0; - - if (b != '-') { - flags |= FLAG_REPROC; - break; - } - - flags |= FLAG_NUM_NEGATIVE; - continue; - } else { - sprintf(error, "Line %d column %d: Unexpected `0x%02x` when seeking value", - state.cur_line, state.cur_col, (unsigned)b); - goto e_failed; - } - } - } - } else { - switch (ptop->type) { - case JSON_OBJECT: - - state.cur_col++; - switch (b) { - WHITESPACE: - continue; - - case '"': - if (flags & FLAG_NEED_COMMA) { - sprintf(error, "Line %d column %d: Expected , before \"", - state.cur_line, state.cur_col); - goto e_failed; - } - - flags |= FLAG_IN_STRING; - - string = (json_char *) ptop->_reserved.p.pobject_mem; - string_length = 0; - - break; - - case '}': - flags = (flags & ~ FLAG_NEED_COMMA) | FLAG_NEXT; - break; - - case ',': - if (flags & FLAG_NEED_COMMA) { - flags &= ~ FLAG_NEED_COMMA; - break; - } - - default: - sprintf(error, "Line %d column %d: Unexpected `%c` in object", - state.cur_line, state.cur_col, b); - goto e_failed; - } - - break; - - case JSON_INTEGER: - case JSON_DOUBLE: - if (isdigit(b)) { - ++num_digits; - - if (ptop->type == JSON_INTEGER || flags & FLAG_NUM_E) { - if (! (flags & FLAG_NUM_E)) { - if (flags & FLAG_NUM_ZERO) { - sprintf(error, "Line %d column %d: Unexpected `0` before `%c`", - state.cur_line, state.cur_col, b); - goto e_failed; - } - - if (num_digits == 1 && b == '0') - flags |= FLAG_NUM_ZERO; - } else { - flags |= FLAG_NUM_E_GOT_SIGN; - num_e = (num_e * 10) + (b - '0'); - continue; - } - - integer_sval_add(&state, ptop, b); - continue; - } - - integer_sval_add(&state, ptop, b); - num_fraction = (num_fraction * 10) + (b - '0'); - continue; - } - - if (b == '+' || b == '-') { - if ( (flags & FLAG_NUM_E) && !(flags & FLAG_NUM_E_GOT_SIGN)) { - flags |= FLAG_NUM_E_GOT_SIGN; - - if (b == '-') - flags |= FLAG_NUM_E_NEGATIVE; - - continue; - } - } else if (b == '.' && ptop->type == JSON_INTEGER) { - if (!num_digits) { - sprintf (error, "Line %d column %d: Expected digit before `.`", - state.cur_line, state.cur_col); - goto e_failed; - } - - ptop->type = JSON_DOUBLE; - ptop->u.dbl.length = ptop->u.integer.length; - ptop->u.dbl.sval = ptop->u.integer.sval; - dbl_sval_add(&state, ptop, b); - - num_digits = 0; - continue; - } - - if (! (flags & FLAG_NUM_E)) { - if (ptop->type == JSON_DOUBLE) { - if (!num_digits) { - sprintf(error, "Line %d column %d: Expected digit after `.`", - state.cur_line, state.cur_col); - goto e_failed; - } - } - - if (b == 'e' || b == 'E') { - flags |= FLAG_NUM_E; - - if (ptop->type == JSON_INTEGER) { - ptop->type = JSON_DOUBLE; - ptop->u.dbl.length = ptop->u.integer.length; - ptop->u.dbl.sval = ptop->u.integer.sval; - dbl_sval_add(&state, ptop, b); - } - - num_digits = 0; - flags &= ~ FLAG_NUM_ZERO; - - continue; - } - } else { - if (!num_digits) { - sprintf(error, "Line %d column %d: Expected digit after `e`", - state.cur_line, state.cur_col); - goto e_failed; - } - } - - flags |= FLAG_NEXT | FLAG_REPROC; - break; - - default: - break; - } - } - - if (flags & FLAG_REPROC) { - flags &= ~ FLAG_REPROC; - --state.ptr; - } - - if (flags & FLAG_NEXT) { - flags = (flags & ~ FLAG_NEXT) | FLAG_NEED_COMMA; - - if (!ptop->parent) { - /* root value done */ - - flags |= FLAG_DONE; - continue; - } - - if (ptop->parent->type == JSON_ARRAY) - flags |= FLAG_SEEK_VALUE; - - if (!state.first_pass) { - json_value_t * parent = ptop->parent; - - switch (parent->type) { - case JSON_OBJECT: - parent->u.object.p.values[parent->u.object.length].pvalue = ptop; - break; - - case JSON_ARRAY: - parent->u.array.values[parent->u.array.length] = ptop; - break; - - default: - break; - } - } - - if ((++ptop->parent->u.array.length) > state.uint_max) - goto e_overflow; - - ptop = ptop->parent; - - continue; - } - } - - palloc = proot; - } - - *pline_number = state.cur_line; - return proot; - -e_unknown_value: - - sprintf(error, "Line %d column %d: Unknown value", - state.cur_line, state.cur_col); - goto e_failed; - -e_alloc_failure: - - strcpy(error, "Memory allocation failure"); - goto e_failed; - -e_overflow: - - sprintf(error, "Line %d column %d: Too long (caught overflow)", - state.cur_line, state.cur_col); - goto e_failed; - -e_failed: - - if (error_buf) { - if (*error) - strcpy(error_buf, error); - else - strcpy(error_buf, "Unknown error"); - } - - if (state.first_pass) - palloc = proot; - - while (palloc) { - ptop = palloc->_reserved.next_alloc; - free(palloc); - palloc = ptop; - } - - if (!state.first_pass) - json_free_value(proot); - - *pline_number = state.cur_line; - return 0; -} - -json_value_t * json_parse_for_unit_test( - const json_char * json, - json_char** ppend_of_item) -{ - json_char error_buf[JSON_ERROR_MAX]; - long long line_number = 0; - return json_parse(json, strlen(json), error_buf, ppend_of_item, &line_number); -} - -// ---------------------------------------------------------------- -void json_free_value(json_value_t * pvalue) { - json_value_t * cur_value; - - if (!pvalue) - return; - - pvalue->parent = 0; - - while (pvalue) { - switch (pvalue->type) { - case JSON_ARRAY: - if (!pvalue->u.array.length) { - free(pvalue->u.array.values); - break; - } - pvalue = pvalue->u.array.values[--pvalue->u.array.length]; - continue; - - case JSON_OBJECT: - if (!pvalue->u.object.length) { - free(pvalue->u.object.p.values); - break; - } - pvalue = pvalue->u.object.p.values[--pvalue->u.object.length].pvalue; - continue; - - case JSON_STRING: - free(pvalue->u.string.ptr); - break; - - case JSON_BOOLEAN: - free(pvalue->u.boolean.sval); - break; - - case JSON_INTEGER: - free(pvalue->u.integer.sval); - break; - - case JSON_DOUBLE: - free(pvalue->u.dbl.sval); - break; - - default: - break; - } - - cur_value = pvalue; - pvalue = pvalue->parent; - free(cur_value); - } -} - -// ---------------------------------------------------------------- -char* json_describe_type(json_type_t type) { - switch(type) { - case JSON_NONE: return "JSON_NONE"; break; - case JSON_OBJECT: return "JSON_OBJECT"; break; - case JSON_ARRAY: return "JSON_ARRAY"; break; - case JSON_INTEGER: return "JSON_INTEGER"; break; - case JSON_DOUBLE: return "JSON_DOUBLE"; break; - case JSON_STRING: return "JSON_STRING"; break; - case JSON_BOOLEAN: return "JSON_BOOLEAN"; break; - case JSON_NULL: return "JSON_NULL"; break; - default: return "???"; break; - } -} - -// ---------------------------------------------------------------- -const char* leader = " "; -static void leader_print(int depth) { - for (int i = 0; i < depth; i++) - printf("%s", leader); -} - -static void json_print_non_recursive_aux(json_value_t* pvalue, int depth) { - leader_print(depth); - if (pvalue == NULL) { - printf("pvalue=NULL\n"); - return; - } - printf("type=%s", json_describe_type(pvalue->type)); - switch(pvalue->type) { - case JSON_NONE: - break; - case JSON_OBJECT: - printf(",length=%d", pvalue->u.object.length); - break; - case JSON_ARRAY: - printf(",length=%d", pvalue->u.object.length); - break; - case JSON_INTEGER: - printf(",length=%d", pvalue->u.integer.length); - printf(",sval=\"%s\"", pvalue->u.integer.sval); - break; - case JSON_DOUBLE: - printf(",length=%d", pvalue->u.dbl.length); - printf(",sval=\"%s\"", pvalue->u.dbl.sval); - break; - case JSON_STRING: - printf(",length=%d", pvalue->u.string.length); - printf(",ptr=\"%s\"", pvalue->u.string.ptr); - break; - case JSON_BOOLEAN: - printf(",length=%d", pvalue->u.boolean.length); - printf(",sval=\"%s\"", pvalue->u.boolean.sval); - break; - case JSON_NULL: - break; - } - printf("\n"); -} - -static void json_print_recursive_aux(json_value_t* pvalue, int depth) { - json_print_non_recursive_aux(pvalue, depth); - if (pvalue == NULL) - return; - if (pvalue->type == JSON_OBJECT) { - for (int i = 0; i < pvalue->u.object.length; i++) { - leader_print(depth+1); - printf("key=\"%s\"\n", pvalue->u.object.p.values[i].name); - json_print_recursive_aux(pvalue->u.object.p.values[i].pvalue, depth+1); - } - } else if (pvalue->type == JSON_ARRAY) { - for (int i = 0; i < pvalue->u.array.length; i++) { - leader_print(depth+1); - printf("index=%d\n", i); - json_print_recursive_aux(pvalue->u.array.values[i], depth+1); - } - } -} - -// ---------------------------------------------------------------- -void json_print_non_recursive(json_value_t* pvalue) { - json_print_non_recursive_aux(pvalue, 0); -} - -void json_print_recursive(json_value_t* pvalue) { - json_print_recursive_aux(pvalue, 0); -} diff --git a/c/input/json_parser.h b/c/input/json_parser.h deleted file mode 100644 index 2b603c383..000000000 --- a/c/input/json_parser.h +++ /dev/null @@ -1,162 +0,0 @@ -// ================================================================ -// Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. -// https://github.com/udp/json-parser -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -// SUCH DAMAGE. -// ================================================================ - -#ifndef JSON_PARSER_H -#define JSON_PARSER_H - -#ifndef json_char - #define json_char char -#endif - -#ifndef json_int_t - #ifndef _MSC_VER - #include - #define json_int_t int64_t - #else - #define json_int_t __int64 - #endif -#endif - -#include - -// ---------------------------------------------------------------- -typedef enum { - JSON_NONE, - JSON_OBJECT, - JSON_ARRAY, - JSON_INTEGER, - JSON_DOUBLE, - JSON_STRING, - JSON_BOOLEAN, - JSON_NULL -} json_type_t; - -extern const struct _json_value_t json_value_none; - -typedef struct _json_object_entry_t { - json_char * name; - unsigned int name_length; - struct _json_value_t * pvalue; -} json_object_entry_t; - -typedef struct _json_value_t { - struct _json_value_t * parent; - - json_type_t type; - - union { - struct { - unsigned int length; - union { - json_object_entry_t * values; - char* mem; - } p; - } object; - - struct { - unsigned int length; - struct _json_value_t ** values; - } array; - - // For Miller we want floating-point numbers to be preserved as-is, with however many decimal places - // the user's input does or does not have, until/unless we do any math which modifies values. - struct { - unsigned int length; - char* sval; - } boolean; - - struct { - unsigned int length; - char* sval; - } integer; - - struct { - unsigned int length; - char* sval; - } dbl; - - struct { - unsigned int length; - json_char * ptr; /* null-terminated */ - } string; - - } u; - - union { - struct _json_value_t * next_alloc; - union { - void * pvobject_mem; - char * pobject_mem; - } p; - } _reserved; - - // Location of the value in the source JSON - unsigned int line, col; - -} json_value_t; - -#define JSON_ERROR_MAX 128 - -// The end-of-item returned pointer enables us to handle input of the form -// -// { "a" : 1 } -// { "b" : 2 } -// { "c" : 3 } -// -// in addition to -// -// [ -// { "a" : 1 } -// { "b" : 2 } -// { "c" : 3 } -// ] -// -// This is in line with what jq can handle. In this case, json_parse will return -// once for each top-level item and will give us back a pointer to the start of -// the rest of the input stream, so we can call json_parse on the rest until it is -// all exhausted. - -json_value_t * json_parse( - const json_char * json, - size_t length, - char * error_buf, - json_char** ppend_of_item, - long long *pline_number); // should be set to 0 by the caller before 1st call - -json_value_t * json_parse_for_unit_test( - const json_char * json, - json_char** ppend_of_item); - -void json_free_value(json_value_t *); - -char* json_describe_type(json_type_t type); - -void json_print_non_recursive(json_value_t* pvalue); -void json_print_recursive(json_value_t* pvalue); - -#endif // JSON_PARSER_H diff --git a/c/input/line_readers.c b/c/input/line_readers.c deleted file mode 100644 index 6b758a6dd..000000000 --- a/c/input/line_readers.c +++ /dev/null @@ -1,236 +0,0 @@ -#include -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "input/line_readers.h" - -// ---------------------------------------------------------------- -char* mlr_alloc_read_line_single_delimiter( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - context_t* pctx) -{ - size_t linecap = power_of_two_above(*pold_then_new_strlen + 1); // +1 for null-terminator - char* restrict line = mlr_malloc_or_die(linecap); - char* restrict p = line; - int reached_eof = FALSE; - int c; - int nread = 0; - - while (TRUE) { - size_t offset = p - line; - if (offset >= linecap) { - linecap = linecap << 1; - line = mlr_realloc_or_die(line, linecap); - p = line + offset; - } - c = mlr_arch_getc(fp); - if (c == EOF) { - *p = 0; - reached_eof = TRUE; - break; - } else if (c == delimiter) { - nread++; - *p = 0; - break; - } else { - nread++; - *(p++) = c; - } - } - - if (do_auto_line_term) { - char* q = p - 1; - if (q >= line && *q == '\r') { - *q = 0; - context_set_autodetected_crlf(pctx); - p = q; - } else { - context_set_autodetected_lf(pctx); - } - } - - // linelen excludes line-ending characters. - // nread includes line-ending characters. - int linelen = p - line; - if (nread == 0 && reached_eof) { - free(line); - line = NULL; - linelen = 0; - } - *pold_then_new_strlen = linelen; - - return line; -} - -// ---------------------------------------------------------------- -char* mlr_alloc_read_line_multiple_delimiter( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen) -{ - size_t linecap = power_of_two_above(*pold_then_new_strlen + 1); // +1 for null-terminator - char* line = mlr_malloc_or_die(linecap); - char* p = line; // points to null-terminator in (chomped) output string - char* q = line; // points to end of line in (non-chomped) data read from file - int reached_eof = FALSE; - int c; - int nread = 0; - int dlm1 = delimiter_length - 1; - char delimend = delimiter[dlm1]; - - while (TRUE) { - size_t offset = q - line; - if (offset >= linecap-1) { - linecap = linecap << 1; - line = mlr_realloc_or_die(line, linecap); - q = line + offset; - } - c = mlr_arch_getc(fp); - if (c == EOF) { - *q = 0; - reached_eof = TRUE; - p = q; - break; - } else if (c == delimend) { - // For efficiency, do a single-character test to see if we've seen - // the last character in the line-ending sequence. If we have, then - // strcmp back to see if we've seen the entire line-ending sequence. - // - // This function exists separately from in order to avoid the performance - // penalty of this strcmp. - nread++; - *(q++) = c; - p = q - delimiter_length; - if (q - line >= delimiter_length && memcmp(p, delimiter, delimiter_length) == 0) { - *p = 0; - break; - } - } else { - nread++; - *(q++) = c; - } - } - - // linelen excludes line-ending characters. - // nread includes line-ending characters. - int linelen = p - line; - if (nread == 0 && reached_eof) { - free(line); - line = NULL; - linelen = 0; - } - *pold_then_new_strlen = linelen; - - return line; -} - -// ---------------------------------------------------------------- -char* mlr_alloc_read_line_single_delimiter_stripping_comments( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - comment_handling_t comment_handling, - char* comment_string, - context_t* pctx) -{ - return mlr_alloc_read_line_single_delimiter_stripping_comments_aux( - fp, - delimiter, - pold_then_new_strlen, - do_auto_line_term, - comment_handling, - comment_string, - NULL, - pctx); -} - -char* mlr_alloc_read_line_single_delimiter_stripping_comments_aux( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - comment_handling_t comment_handling, - char* comment_string, - int* pnum_lines_comment_skipped, - context_t* pctx) -{ - if (pnum_lines_comment_skipped != NULL) - *pnum_lines_comment_skipped = 0; - while (TRUE) { - char* line = mlr_alloc_read_line_single_delimiter( - fp, delimiter, pold_then_new_strlen, do_auto_line_term, pctx); - if (line == NULL) { - return line; - } else if (string_starts_with(line, comment_string)) { - if (pnum_lines_comment_skipped != NULL) - (*pnum_lines_comment_skipped)++; - if (comment_handling == PASS_COMMENTS) { - fputs(line, stdout); - if (do_auto_line_term) { - fputs(pctx->auto_line_term, stdout); - } else { - fputc(delimiter, stdout); - } - fflush(stdout); - } - free(line); - } else { - return line; - } - } -} - -// ---------------------------------------------------------------- -char* mlr_alloc_read_line_multiple_delimiter_stripping_comments( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen, - comment_handling_t comment_handling, - char* comment_string) -{ - return mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( - fp, - delimiter, - delimiter_length, - pold_then_new_strlen, - comment_handling, - comment_string, - NULL); -} - -// ---------------------------------------------------------------- -char* mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen, - comment_handling_t comment_handling, - char* comment_string, - int* pnum_lines_comment_skipped) -{ - if (pnum_lines_comment_skipped != NULL) - *pnum_lines_comment_skipped = 0; - while (TRUE) { - char* line = mlr_alloc_read_line_multiple_delimiter( - fp, delimiter, delimiter_length, pold_then_new_strlen); - if (line == NULL) { - return line; - } else if (string_starts_with(line, comment_string)) { - if (pnum_lines_comment_skipped != NULL) - (*pnum_lines_comment_skipped)++; - if (comment_handling == PASS_COMMENTS) { - fputs(line, stdout); - fputs(delimiter, stdout); - fflush(stdout); - } - free(line); - } else { - return line; - } - } -} diff --git a/c/input/line_readers.h b/c/input/line_readers.h deleted file mode 100644 index 396e550b8..000000000 --- a/c/input/line_readers.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef LINE_READERS_H -#define LINE_READERS_H - -#include -#include "cli/comment_handling.h" -#include "lib/context.h" - -// Notes: -// * The caller should free the return value. -// * The line-terminator is not returned as part of the string. -// * Null is returned at EOF. -// * Simiar to getdelim but customized for Miller: in particular, support for autodetected line endings (LF/CRLF). -// Also, exists on Windows MSYS2 where there isn't a getdelim. -// * Line-length reuses previous length for initial buffer-size allocation. Pass MLR_ALLOC_READ_LINE_INITIAL_SIZE -// on first call. On subsequent calls, buffer-size allocations will adapt to the file's line-lengths. - -#define MLR_ALLOC_READ_LINE_INITIAL_SIZE 128 - -char* mlr_alloc_read_line_single_delimiter( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - context_t* pctx); - -char* mlr_alloc_read_line_multiple_delimiter( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen); - - -char* mlr_alloc_read_line_single_delimiter_stripping_comments( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - comment_handling_t comment_handling, - char* comment_string, - context_t* pctx); - -char* mlr_alloc_read_line_single_delimiter_stripping_comments_aux( - FILE* fp, - int delimiter, - size_t* pold_then_new_strlen, - int do_auto_line_term, - comment_handling_t comment_handling, - char* comment_string, - int* pnum_lines_comment_skipped, // Lets caller track line numbers - context_t* pctx); - - -char* mlr_alloc_read_line_multiple_delimiter_stripping_comments( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen, - comment_handling_t comment_handling, - char* comment_string); - -char* mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux( - FILE* fp, - char* delimiter, - int delimiter_length, - size_t* pold_then_new_strlen, - comment_handling_t comment_handling, - char* comment_string, - int* pnum_lines_comment_skipped); // Lets caller track line numbers - -#endif // LINE_READERS_H diff --git a/c/input/lrec_reader.h b/c/input/lrec_reader.h deleted file mode 100644 index b4e050cb9..000000000 --- a/c/input/lrec_reader.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef LREC_READER_H -#define LREC_READER_H - -#include -#include "lib/context.h" -#include "containers/lrec.h" - -struct _lrec_reader_t; // forward reference for method declarations - -// The void* pvhandle is either FILE* for stdio readers or file_reader_mmap_state_t* for mmap readers. -typedef void* lrec_reader_open_func_t(void* pvstate, char* prepipe, char* filename); -typedef void lrec_reader_close_func_t(void* pvstate, void* pvhandle, char* prepipe); -typedef lrec_t* lrec_reader_process_func_t(void* pvstate, void* pvhandle, context_t* pctx); -typedef void lrec_reader_sof_func_t(void* pvstate, void* pvhandle); -typedef void lrec_reader_free_func_t(struct _lrec_reader_t* preader); - -typedef struct _lrec_reader_t { - void* pvstate; - lrec_reader_open_func_t* popen_func; - lrec_reader_close_func_t* pclose_func; - lrec_reader_process_func_t* pprocess_func; - lrec_reader_sof_func_t* psof_func; - lrec_reader_free_func_t* pfree_func; // virtual destructor -} lrec_reader_t; - -#endif // LREC_READER_H diff --git a/c/input/lrec_reader_gen.c b/c/input/lrec_reader_gen.c deleted file mode 100644 index 4335c5830..000000000 --- a/c/input/lrec_reader_gen.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "input/lrec_readers.h" - -typedef struct _lrec_reader_gen_state_t { - char* field_name; - unsigned long long start; - unsigned long long stop; - unsigned long long step; - unsigned long long current_value; -} lrec_reader_gen_state_t; - -static void lrec_reader_gen_free(lrec_reader_t* preader); -static void* lrec_reader_gen_open(void* pvstate, char* prepipe, char* filename); -static void lrec_reader_gen_close(void* pvstate, void* pvhandle, char* prepipe); -static void lrec_reader_gen_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_gen_process(void* pvstate, void* pvhandle, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_gen_alloc(char* field_name, - unsigned long long start, unsigned long long stop, unsigned long long step) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_gen_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_gen_state_t)); - pstate->field_name = field_name; - pstate->start = start; - pstate->stop = stop; - pstate->step = step; - pstate->current_value = start; - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = lrec_reader_gen_open; - plrec_reader->pclose_func = lrec_reader_gen_close; - plrec_reader->pprocess_func = lrec_reader_gen_process; - plrec_reader->psof_func = lrec_reader_gen_sof; - plrec_reader->pfree_func = lrec_reader_gen_free; - - return plrec_reader; -} - -static void* lrec_reader_gen_open(void* pvstate, char* prepipe, char* filename) { - return NULL; -} - -static void lrec_reader_gen_close(void* pvstate, void* pvhandle, char* prepipe) { -} - -static void lrec_reader_gen_free(lrec_reader_t* preader) { - free(preader->pvstate); - free(preader); -} - -static void lrec_reader_gen_sof(void* pvstate, void* pvhandle) { - lrec_reader_gen_state_t* pstate = pvstate; - pstate->current_value = pstate->start; -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_gen_process(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_gen_state_t* pstate = pvstate; - if (pstate->current_value > pstate->stop) { - return NULL; - } - - lrec_t* prec = lrec_unbacked_alloc(); - char* key = pstate->field_name; - char* value = mlr_alloc_string_from_ll(pstate->current_value); - pstate->current_value += pstate->step; - - lrec_put(prec, key, value, FREE_ENTRY_VALUE); - - return prec; -} diff --git a/c/input/lrec_reader_in_memory.c b/c/input/lrec_reader_in_memory.c deleted file mode 100644 index 33257deb7..000000000 --- a/c/input/lrec_reader_in_memory.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "input/file_reader_stdio.h" -#include "input/lrec_readers.h" -#include "containers/sllv.h" - -// lrec_reader_t impl for unit-test. -typedef struct _lrec_reader_in_memory_state_t { - sllv_t* precords; -} lrec_reader_in_memory_state_t; - -static void lrec_reader_in_memory_free(lrec_reader_t* preader); -static void lrec_reader_in_memory_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_in_memory_process(void* pvstate, void* pvhandle, context_t* pctx); -static void* lrec_reader_in_memory_vopen(void* pvstate, char* prepipe, char* filename); -static void lrec_reader_in_memory_vclose(void* pvstate, void* pvhandle, char* prepipe); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_in_memory_alloc(sllv_t* precords) { - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_in_memory_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_in_memory_state_t)); - pstate->precords = precords; - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = lrec_reader_in_memory_vopen; - plrec_reader->pclose_func = lrec_reader_in_memory_vclose; - plrec_reader->pprocess_func = lrec_reader_in_memory_process; - plrec_reader->psof_func = lrec_reader_in_memory_sof; - plrec_reader->pfree_func = lrec_reader_in_memory_free; - - return plrec_reader; -} - -static void lrec_reader_in_memory_free(lrec_reader_t* preader) { - lrec_reader_in_memory_state_t* pstate = preader->pvstate; - sllv_free(pstate->precords); - free(pstate); - free(preader); -} - -// No-op for stateless readers such as this one. -static void lrec_reader_in_memory_sof(void* pvstate, void* pvhandle) { -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_in_memory_process(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_in_memory_state_t* pstate = pvstate; - - if (pstate->precords->phead == NULL) - return NULL; - else - return sllv_pop(pstate->precords); -} - -static void* lrec_reader_in_memory_vopen(void* pvstate, char* prepipe, char* filename) { - // popen is a stdio construct, not an mmap construct, and it can't be supported here. - if (prepipe != NULL) { - fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - } - - return NULL; -} - -static void lrec_reader_in_memory_vclose(void* pvstate, void* pvhandle, char* prepipe) { -} diff --git a/c/input/lrec_reader_stdio_csv.c b/c/input/lrec_reader_stdio_csv.c deleted file mode 100644 index 5f08cfe5b..000000000 --- a/c/input/lrec_reader_stdio_csv.c +++ /dev/null @@ -1,630 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -#include -#include -#include -#include "cli/comment_handling.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/string_builder.h" -#include "input/file_reader_stdio.h" -#include "input/byte_readers.h" -#include "input/lrec_readers.h" -#include "input/peek_file_reader.h" -#include "containers/rslls.h" -#include "containers/lhmslv.h" -#include "containers/parse_trie.h" - -// Idea of pheader_keepers: each header_keeper object retains the input-line backing -// and the slls_t for a CSV header line which is used by one or more CSV data -// lines. Meanwhile some mappers retain input records from the entire data -// stream, including header-schema changes in the input stream. This means we -// need to keep headers intact as long as any lrecs are pointing to them. One -// option is reference-counting which I experimented with; it was messy and -// error-prone. The approach used here is to keep a hash map from header-schema -// to header_keeper object. The current pheader_keeper is a pointer into one of -// those. Then when the reader is freed, all the header-keepers are freed. - -// ---------------------------------------------------------------- -#define STRING_BUILDER_INIT_SIZE 1024 - -#define EOF_TOKEN 0x2000 -#define IRS_TOKEN 0x2001 -#define IFS_EOF_TOKEN 0x2002 -#define IFS_TOKEN 0x2003 -#define DQUOTE_TOKEN 0x2004 -#define DQUOTE_IRS_TOKEN 0x2005 -#define DQUOTE_IRS2_TOKEN 0x2006 // alternate line-ending for autodetect LF/CRLF -#define DQUOTE_IFS_TOKEN 0x2007 -#define DQUOTE_EOF_TOKEN 0x2008 -#define DQUOTE_DQUOTE_TOKEN 0x2009 -#define UTF8_BOM_TOKEN 0x200b - -#define UTF8_BOM "\xef\xbb\xbf" -#define UTF8_BOM_LENGTH 3 - -//#define DEBUG_PARSER - -// ---------------------------------------------------------------- -typedef struct _lrec_reader_stdio_csv_state_t { - // Input line number is not the same as the record-counter in context_t, - // which counts records. - long long ilno; - - char* eof; - char* irs; - char* ifs_eof; - char* ifs; - int do_auto_line_term; - comment_handling_t comment_handling; - char* comment_string; - int comment_string_length; - - char* dquote; - char* dquote_irs; - char* dquote_irs2; - char* dquote_ifs; - char* dquote_eof; - char* dquote_dquote; - int dquotelen; - - rslls_t* pfields; - string_builder_t* psb; - byte_reader_t* pbr; - peek_file_reader_t* pfr; - - parse_trie_t* putf8_bom_parse_trie; - parse_trie_t* pno_dquote_parse_trie; - parse_trie_t* pdquote_parse_trie; - - int expect_header_line_next; - int use_implicit_csv_header; - int allow_ragged_csv_input; - header_keeper_t* pheader_keeper; - lhmslv_t* pheader_keepers; - -} lrec_reader_stdio_csv_state_t; - -static void lrec_reader_stdio_csv_free(lrec_reader_t* preader); -static void lrec_reader_stdio_csv_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_csv_process(void* pvstate, void* pvhandle, context_t* pctx); -static int lrec_reader_stdio_csv_get_fields(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pfields, - context_t* pctx, int is_header); -static lrec_t* paste_indices_and_data(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx); -static lrec_t* paste_header_and_data_ragged(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx); -static lrec_t* paste_header_and_data_rectangular(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx); -static void* lrec_reader_stdio_csv_open(void* pvstate, char* prepipe, char* filename); -static void lrec_reader_stdio_csv_close(void* pvstate, void* pvhandle, char* prepipe); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, - int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_csv_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_csv_state_t)); - pstate->ilno = 0LL; - - pstate->do_auto_line_term = FALSE; - if (streq(irs, "auto")) { - irs = "\n"; - pstate->do_auto_line_term = TRUE; - } - - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - pstate->comment_string_length = comment_string == NULL ? 0 : strlen(comment_string); - - pstate->eof = "\xff"; - pstate->irs = irs; - pstate->ifs = ifs; - pstate->ifs_eof = mlr_paste_2_strings(pstate->ifs, "\xff"); - pstate->dquote = "\""; - - pstate->dquote_ifs = mlr_paste_2_strings("\"", pstate->ifs); - pstate->dquote_eof = "\"\xff"; - pstate->dquote_dquote = "\"\""; - - pstate->dquotelen = strlen(pstate->dquote); - - - // Parse trie for UTF-8 BOM - pstate->putf8_bom_parse_trie = parse_trie_alloc(); - parse_trie_add_string(pstate->putf8_bom_parse_trie, UTF8_BOM, UTF8_BOM_TOKEN); - - // Parse trie for non-double-quoted fields - pstate->pno_dquote_parse_trie = parse_trie_alloc(); - parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->eof, EOF_TOKEN); - parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->irs, IRS_TOKEN); - parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->ifs_eof, IFS_EOF_TOKEN); - parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->ifs, IFS_TOKEN); - parse_trie_add_string(pstate->pno_dquote_parse_trie, pstate->dquote, DQUOTE_TOKEN); - - // Parse trie for double-quoted fields - pstate->pdquote_parse_trie = parse_trie_alloc(); - if (pstate->do_auto_line_term) { - pstate->dquote_irs = mlr_paste_2_strings("\"", "\n"); - pstate->dquote_irs2 = mlr_paste_2_strings("\"", "\r\n"); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs2, DQUOTE_IRS2_TOKEN); - } else { - pstate->dquote_irs = mlr_paste_2_strings("\"", pstate->irs); - pstate->dquote_irs2 = NULL; - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); - } - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->eof, EOF_TOKEN); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_irs, DQUOTE_IRS_TOKEN); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_ifs, DQUOTE_IFS_TOKEN); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_eof, DQUOTE_EOF_TOKEN); - parse_trie_add_string(pstate->pdquote_parse_trie, pstate->dquote_dquote, DQUOTE_DQUOTE_TOKEN); - - - pstate->pfields = rslls_alloc(); - pstate->psb = sb_alloc(STRING_BUILDER_INIT_SIZE); - pstate->pbr = stdio_byte_reader_alloc(); - pstate->pfr = pfr_alloc(pstate->pbr, mlr_imax3( - pstate->putf8_bom_parse_trie->maxlen, - pstate->pno_dquote_parse_trie->maxlen, - pstate->pdquote_parse_trie->maxlen)); - - pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; - pstate->use_implicit_csv_header = use_implicit_csv_header; - pstate->allow_ragged_csv_input = allow_ragged_csv_input; - pstate->pheader_keeper = NULL; - pstate->pheader_keepers = lhmslv_alloc(); - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = lrec_reader_stdio_csv_open; - plrec_reader->pclose_func = lrec_reader_stdio_csv_close; - plrec_reader->pprocess_func = lrec_reader_stdio_csv_process; - plrec_reader->psof_func = lrec_reader_stdio_csv_sof; - plrec_reader->pfree_func = lrec_reader_stdio_csv_free; - - return plrec_reader; -} - -// ---------------------------------------------------------------- -static void lrec_reader_stdio_csv_free(lrec_reader_t* preader) { - lrec_reader_stdio_csv_state_t* pstate = preader->pvstate; - for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { - header_keeper_t* pheader_keeper = pe->pvvalue; - header_keeper_free(pheader_keeper); - } - lhmslv_free(pstate->pheader_keepers); - pfr_free(pstate->pfr); - parse_trie_free(pstate->putf8_bom_parse_trie); - parse_trie_free(pstate->pno_dquote_parse_trie); - parse_trie_free(pstate->pdquote_parse_trie); - rslls_free(pstate->pfields); - stdio_byte_reader_free(pstate->pbr); - sb_free(pstate->psb); - free(pstate->ifs_eof); - free(pstate->dquote_irs); - free(pstate->dquote_irs2); - free(pstate->dquote_ifs); - free(pstate); - free(preader); -} - -// ---------------------------------------------------------------- -static void lrec_reader_stdio_csv_sof(void* pvstate, void* pvhandle) { - lrec_reader_stdio_csv_state_t* pstate = pvstate; - pstate->ilno = 0LL; - pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_csv_process(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_csv_state_t* pstate = pvstate; - - // Ingest the next header line, if expected - if (pstate->expect_header_line_next) { - while (TRUE) { - if (!lrec_reader_stdio_csv_get_fields(pstate, pstate->pfields, pctx, TRUE)) - return NULL; - pstate->ilno++; - - // We check for comments here rather than within the parser since it's important - // for users to be able to comment out lines containing double-quoted newlines. - if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { - if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { - if (pstate->comment_handling == PASS_COMMENTS) { - int i = 0; - for ( - rsllse_t* pe = pstate->pfields->phead; - i < pstate->pfields->length && pe != NULL; - pe = pe->pnext, i++) - { - if (i > 0) - fputs(pstate->ifs, stdout); - fputs(pe->value, stdout); - } - if (pstate->do_auto_line_term) { - fputs(pctx->auto_line_term, stdout); - } else { - fputs(pstate->irs, stdout); - } - } - rslls_reset(pstate->pfields); - continue; - } - } - - slls_t* pheader_fields = slls_alloc(); - int i = 0; - for (rsllse_t* pe = pstate->pfields->phead; i < pstate->pfields->length && pe != NULL; pe = pe->pnext, i++) { - if (*pe->value == 0) { - fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", - MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); - exit(1); - } - // Transfer pointer-free responsibility from the rslls to the - // header fields in the header keeper - slls_append(pheader_fields, pe->value, pe->free_flag); - pe->free_flag = 0; - } - rslls_reset(pstate->pfields); - - pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); - if (pstate->pheader_keeper == NULL) { - pstate->pheader_keeper = header_keeper_alloc(NULL, pheader_fields); - lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, - NO_FREE); // freed by header-keeper - } else { // Re-use the header-keeper in the header cache - slls_free(pheader_fields); - } - - pstate->expect_header_line_next = FALSE; - break; - } - } - - // Ingest the next data line, if expected - while (TRUE) { - int rc = lrec_reader_stdio_csv_get_fields(pstate, pstate->pfields, pctx, FALSE); - pstate->ilno++; - if (rc == FALSE) // EOF - return NULL; - - // We check for comments here rather than within the parser since it's important - // for users to be able to comment out lines containing double-quoted newlines. - if (pstate->comment_string != NULL && pstate->pfields->phead != NULL) { - if (streqn(pstate->pfields->phead->value, pstate->comment_string, pstate->comment_string_length)) { - if (pstate->comment_handling == PASS_COMMENTS) { - int i = 0; - for ( - rsllse_t* pe = pstate->pfields->phead; - i < pstate->pfields->length && pe != NULL; - pe = pe->pnext, i++) - { - if (i > 0) - fputs(pstate->ifs, stdout); - fputs(pe->value, stdout); - } - if (pstate->do_auto_line_term) { - fputs(pctx->auto_line_term, stdout); - } else { - fputs(pstate->irs, stdout); - } - } - rslls_reset(pstate->pfields); - continue; - } - } - - - lrec_t* prec = pstate->use_implicit_csv_header - ? paste_indices_and_data(pstate, pstate->pfields, pctx) - : pstate->allow_ragged_csv_input - ? paste_header_and_data_ragged(pstate, pstate->pfields, pctx) - : paste_header_and_data_rectangular(pstate, pstate->pfields, pctx); - rslls_reset(pstate->pfields); - return prec; - } -} - -static int lrec_reader_stdio_csv_get_fields(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pfields, - context_t* pctx, int is_header) -{ - int rc, token = 0, matchlen = 0, record_done = FALSE, field_done = FALSE; -#ifdef DEBUG_PARSER - char c = 0; -#endif - peek_file_reader_t* pfr = pstate->pfr; - string_builder_t* psb = pstate->psb; - char* field = NULL; - int field_length = 0; - - if (pfr_peek_char(pfr) == (char)EOF) // char defaults to unsigned on some platforms - return FALSE; - - // Strip the UTF-8 BOM, if any. This is MUCH simpler for mmap, and for stdio on files. For mmap we can test the - // first 3 bytes, then skip past them or not. For stdio on files we can fread the first 3 bytes, then rewind the fp - // if they're not the UTF-8 BOM. But for stdio on stdin, we cannot rewind: stdin is not - // rewindable. - if (is_header) { - pfr_buffer_by(pfr, UTF8_BOM_LENGTH); - int rc = parse_trie_ring_match(pstate->putf8_bom_parse_trie, - pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, - &token, &matchlen); -#ifdef DEBUG_PARSER - if (rc) { - printf("BOMRC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); - } -#endif - if (rc == TRUE && token == UTF8_BOM_TOKEN) { - pfr_advance_by(pfr, matchlen); - } - } - - // Loop over fields in record - record_done = FALSE; - while (!record_done) { - // Assumption is dquote is "\"" - if (pfr_peek_char(pfr) != pstate->dquote[0]) { // NOT DOUBLE-QUOTED - - // Loop over characters in field - field_done = FALSE; - while (!field_done) { - pfr_buffer_by(pfr, pstate->pno_dquote_parse_trie->maxlen); - - rc = parse_trie_ring_match(pstate->pno_dquote_parse_trie, - pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, - &token, &matchlen); -#ifdef DEBUG_PARSER - pfr_print(pfr); -#endif - if (rc) { -#ifdef DEBUG_PARSER - printf("DQ=0 RC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); -#endif - switch(token) { - case EOF_TOKEN: // end of record - rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); - field_done = TRUE; - record_done = TRUE; - break; - case IFS_EOF_TOKEN: // end of record, last field is empty - rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); - rslls_append(pfields, "", NO_FREE, 0); - field_done = TRUE; - record_done = TRUE; - break; - case IFS_TOKEN: // end of field - rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, 0); - field_done = TRUE; - break; - case IRS_TOKEN: // end of record - field = sb_finish_with_length(psb, &field_length); - - // The line-ending '\n' wonlt be included in the field buffer. - if (pstate->do_auto_line_term) { - if (field_length > 0 && field[field_length-1] == '\r') { - field[field_length-1] = 0; - context_set_autodetected_crlf(pctx); - } else { - context_set_autodetected_lf(pctx); - } - } - - rslls_append(pfields, field, FREE_ENTRY_VALUE, 0); - field_done = TRUE; - record_done = TRUE; - break; - case DQUOTE_TOKEN: // CSV syntax error: fields containing quotes must be fully wrapped in quotes - fprintf(stderr, "%s: syntax error: unwrapped double quote at line %lld.\n", - MLR_GLOBALS.bargv0, pstate->ilno); - exit(1); - break; - default: - fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", - MLR_GLOBALS.bargv0, token, pstate->ilno); - exit(1); - break; - } - pfr_advance_by(pfr, matchlen); - } else { -#ifdef DEBUG_PARSER - c = pfr_read_char(pfr); - printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); - sb_append_char(psb, c); -#else - sb_append_char(psb, pfr_read_char(pfr)); -#endif - } - } - - } else { // DOUBLE-QUOTED - pfr_advance_by(pfr, pstate->dquotelen); - - // loop over characters in field - field_done = FALSE; - char* field = NULL; - int field_length = 0; - while (!field_done) { - pfr_buffer_by(pfr, pstate->pdquote_parse_trie->maxlen); - - rc = parse_trie_ring_match(pstate->pdquote_parse_trie, - pfr->peekbuf, pfr->sob, pfr->npeeked, pfr->peekbuflenmask, - &token, &matchlen); -#ifdef DEBUG_PARSER - pfr_print(pfr); -#endif - if (rc) { -#ifdef DEBUG_PARSER - printf("DQ=1 RC=%d token=0x%04x matchlen=%d\n", rc, token, matchlen); -#endif - switch(token) { - case EOF_TOKEN: // end of record - fprintf(stderr, "%s: unmatched double quote at line %lld.\n", - MLR_GLOBALS.bargv0, pstate->ilno); - exit(1); - break; - case DQUOTE_EOF_TOKEN: // end of record - rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); - field_done = TRUE; - record_done = TRUE; - break; - case DQUOTE_IFS_TOKEN: // end of field - rslls_append(pfields, sb_finish(psb), FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); - field_done = TRUE; - break; - case DQUOTE_IRS_TOKEN: // end of record - case DQUOTE_IRS2_TOKEN: // end of record - - field = sb_finish_with_length(psb, &field_length); - - // The line-ending '\n' won't be included in the field buffer. - if (pstate->do_auto_line_term) { - if (field_length > 0 && field[field_length-1] == '\r') { - field[field_length-1] = 0; - context_set_autodetected_crlf(pctx); - } else { - context_set_autodetected_lf(pctx); - } - } - - rslls_append(pfields, field, FREE_ENTRY_VALUE, FIELD_QUOTED_ON_INPUT); - field_done = TRUE; - record_done = TRUE; - break; - case DQUOTE_DQUOTE_TOKEN: // RFC-4180 CSV: "" inside a dquoted field is an escape for " -#ifdef DEBUG_PARSER - c = pstate->dquote[0]; - printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); - sb_append_char(psb, c); -#else - sb_append_char(psb, pstate->dquote[0]); -#endif - break; - default: - fprintf(stderr, "%s: internal coding error: unexpected token %d at line %lld.\n", - MLR_GLOBALS.bargv0, token, pstate->ilno); - exit(1); - break; - } - pfr_advance_by(pfr, matchlen); - } else { -#ifdef DEBUG_PARSER - c = pfr_read_char(pfr); - printf("CHAR=%c [%02x]\n", isprint((unsigned char)c) ? c : ' ', (unsigned)c); - sb_append_char(psb, c); -#else - sb_append_char(psb, pfr_read_char(pfr)); -#endif - } - } - - } - } - - return TRUE; -} - -// ---------------------------------------------------------------- -static lrec_t* paste_indices_and_data(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx) -{ - lrec_t* prec = lrec_unbacked_alloc(); - int dlen = pdata_fields->length; - rsllse_t* pd = pdata_fields->phead; - for (int idx = 1; idx <= dlen; idx++, pd = pd->pnext) { - char key_free_flags = 0; - char* key = low_int_to_string(idx, &key_free_flags); - char value_free_flags = pd->free_flag; - // Transfer pointer-free responsibility from the rslls to the lrec object - lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); - pd->free_flag = 0; - } - return prec; -} - -// ---------------------------------------------------------------- -static lrec_t* paste_header_and_data_ragged(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx) -{ - lrec_t* prec = lrec_unbacked_alloc(); - sllse_t* ph = pstate->pheader_keeper->pkeys->phead; - rsllse_t* pd = pdata_fields->phead; - int idx = 0; - int hlen = pstate->pheader_keeper->pkeys->length; - int dlen = pdata_fields->length; - - // Process fields up to minimum of header length and data length - // Note that pd->pnext can be non-null due to pointer-reuse semantics of rslls, - // so use list-length attributes for end-of-list check. - for (idx = 0; idx < hlen && idx < dlen; idx++, ph = ph->pnext, pd = pd->pnext) { - // Transfer pointer-free responsibility from the rslls to the lrec object - lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); - pd->free_flag = 0; - } - - if (hlen > dlen) { - // Header is longer. Empty-fill the remaining data fields. - // E.g. if the input looks like - // a,b,c,d <-- header - // 1,2 <-- data - // then put c="", d="". - for ( ; idx < hlen; idx++, ph = ph->pnext) { - lrec_put_ext(prec, ph->value, "", NO_FREE, 0); - } - } else { - // Data is longer. Use positional indices to label the remaining data fields. - for ( ; idx < dlen; idx++, pd = pd->pnext) { - char key_free_flags = 0; - char* key = low_int_to_string(idx+1, &key_free_flags); - char value_free_flags = pd->free_flag; - // Transfer pointer-free responsibility from the rslls to the lrec object - lrec_put_ext(prec, key, pd->value, key_free_flags | value_free_flags, pd->quote_flag); - pd->free_flag = 0; - } - } - - return prec; -} - -// ---------------------------------------------------------------- -static lrec_t* paste_header_and_data_rectangular(lrec_reader_stdio_csv_state_t* pstate, rslls_t* pdata_fields, - context_t* pctx) -{ - if (pstate->pheader_keeper->pkeys->length != pdata_fields->length) { - fprintf(stderr, "%s: Header/data length mismatch (%llu != %llu) at file \"%s\" line %lld.\n", - MLR_GLOBALS.bargv0, pstate->pheader_keeper->pkeys->length, pdata_fields->length, - pctx->filename, pstate->ilno); - exit(1); - } - lrec_t* prec = lrec_unbacked_alloc(); - sllse_t* ph = pstate->pheader_keeper->pkeys->phead; - rsllse_t* pd = pdata_fields->phead; - for ( ; ph != NULL && pd != NULL; ph = ph->pnext, pd = pd->pnext) { - // Transfer pointer-free responsibility from the rslls to the lrec object - lrec_put_ext(prec, ph->value, pd->value, pd->free_flag, pd->quote_flag); - pd->free_flag = 0; - } - return prec; -} - -// ---------------------------------------------------------------- -static void* lrec_reader_stdio_csv_open(void* pvstate, char* prepipe, char* filename) { - lrec_reader_stdio_csv_state_t* pstate = pvstate; - pstate->pfr->pbr->popen_func(pstate->pfr->pbr, prepipe, filename); - pfr_reset(pstate->pfr); - // Different from the other readers, we keep the file handle within the - // byte_reader object. - return NULL; -} - -static void lrec_reader_stdio_csv_close(void* pvstate, void* pvhandle, char* prepipe) { - lrec_reader_stdio_csv_state_t* pstate = pvstate; - pstate->pfr->pbr->pclose_func(pstate->pfr->pbr, prepipe); -} diff --git a/c/input/lrec_reader_stdio_csvlite.c b/c/input/lrec_reader_stdio_csvlite.c deleted file mode 100644 index f245d66ec..000000000 --- a/c/input/lrec_reader_stdio_csvlite.c +++ /dev/null @@ -1,573 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -#include -#include -#include "cli/comment_handling.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "input/file_reader_stdio.h" -#include "input/line_readers.h" -#include "input/lrec_readers.h" - -// Idea of pheader_keepers: each header_keeper object retains the input-line backing -// and the slls_t for a CSV header line which is used by one or more CSV data -// lines. Meanwhile some mappers retain input records from the entire data -// stream, including header-schema changes in the input stream. This means we -// need to keep headers intact as long as any lrecs are pointing to them. One -// option is reference-counting which I experimented with; it was messy and -// error-prone. The approach used here is to keep a hash map from header-schema -// to header_keeper object. The current pheader_keeper is a pointer into one of -// those. Then when the reader is freed, all the header-keepers are freed. - -// Multi-file cases: -// -// a,a a,b c d -// -- FILE1: -- FILE1: -- FILE1: -- FILE1: -// a,b,c a,b,c a,b,c a,b,c -// 1,2,3 1,2,3 1,2,3 1,2,3 -// 4,5,6 4,5,6 4,5,6 4,5,6 -// -- FILE2: -- FILE2: -// a,b,c d,e,f,g a,b,c d,e,f -// 7,8,9 3,4,5,6 7,8,9 3,4,5 -// --OUTPUT: --OUTPUT: --OUTPUT: --OUTPUT: -// a,b,c a,b,c a,b,c a,b,c -// 1,2,3 1,2,3 1,2,3 1,2,3 -// 4,5,6 4,5,6 4,5,6 4,5,6 -// 7,8,9 7,8,9 -// d,e,f,g d,e,f -// 3,4,5,6 3,4,5 - -typedef struct _lrec_reader_stdio_csvlite_state_t { - long long ifnr; - long long ilno; // Line-level, not record-level as in context_t - char* irs; - char* ifs; - int irslen; - int ifslen; - int allow_repeat_ifs; - int do_auto_line_term; - int use_implicit_csv_header; - int allow_ragged_csv_input; - size_t line_length; - comment_handling_t comment_handling; - char* comment_string; - - int expect_header_line_next; - header_keeper_t* pheader_keeper; - lhmslv_t* pheader_keepers; -} lrec_reader_stdio_csvlite_state_t; - -static void lrec_reader_stdio_csvlite_free(lrec_reader_t* preader); -static void lrec_reader_stdio_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_csvlite_process(void* pvstate, void* pvhandle, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, - int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_csvlite_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_csvlite_state_t)); - pstate->ifnr = 0LL; - pstate->irs = irs; - pstate->ifs = ifs; - pstate->irslen = strlen(irs); - pstate->ifslen = strlen(ifs); - pstate->allow_repeat_ifs = allow_repeat_ifs; - pstate->do_auto_line_term = FALSE; - pstate->use_implicit_csv_header = use_implicit_csv_header; - pstate->allow_ragged_csv_input = allow_ragged_csv_input; - // This is used to track nominal line length over the file read. Bootstrap with a default length. - pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - - pstate->expect_header_line_next = use_implicit_csv_header ? FALSE : TRUE; - pstate->pheader_keeper = NULL; - pstate->pheader_keepers = lhmslv_alloc(); - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = file_reader_stdio_vopen; - plrec_reader->pclose_func = file_reader_stdio_vclose; - if (streq(irs, "auto")) { - // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In - // either case the final character is "\n". Then for autodetect we - // simply check if there's a character in the line before the '\n', and - // if that is '\r'. - pstate->irs = "\n"; - pstate->irslen = 1; - pstate->do_auto_line_term = TRUE; - } - plrec_reader->pprocess_func = lrec_reader_stdio_csvlite_process; - plrec_reader->psof_func = lrec_reader_stdio_sof; - plrec_reader->pfree_func = lrec_reader_stdio_csvlite_free; - - return plrec_reader; -} - -// ---------------------------------------------------------------- -static void lrec_reader_stdio_csvlite_free(lrec_reader_t* preader) { - lrec_reader_stdio_csvlite_state_t* pstate = preader->pvstate; - for (lhmslve_t* pe = pstate->pheader_keepers->phead; pe != NULL; pe = pe->pnext) { - header_keeper_t* pheader_keeper = pe->pvvalue; - header_keeper_free(pheader_keeper); - } - lhmslv_free(pstate->pheader_keepers); - free(pstate); - free(preader); -} - -// ---------------------------------------------------------------- -static void lrec_reader_stdio_sof(void* pvstate, void* pvhandle) { - lrec_reader_stdio_csvlite_state_t* pstate = pvstate; - pstate->ifnr = 0LL; - pstate->ilno = 0LL; - pstate->expect_header_line_next = pstate->use_implicit_csv_header ? FALSE : TRUE; -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_csvlite_process(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_csvlite_state_t* pstate = pvstate; - - while (TRUE) { - if (pstate->expect_header_line_next) { - while (TRUE) { - char* hline = NULL; - if (pstate->comment_handling == COMMENTS_ARE_DATA) { - if (pstate->irslen == 1) - hline = mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, pstate->do_auto_line_term, pctx); - else - hline = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length); - if (hline != NULL) - pstate->ilno++; - } else { - int num_lines_comment_skipped = 0; - if (pstate->irslen == 1) - hline = mlr_alloc_read_line_single_delimiter_stripping_comments_aux(input_stream, pstate->irs[0], - &pstate->line_length, pstate->do_auto_line_term, - pstate->comment_handling, pstate->comment_string, &num_lines_comment_skipped, pctx); - else - hline = mlr_alloc_read_line_multiple_delimiter_stripping_comments_aux(input_stream, - pstate->irs, pstate->irslen, &pstate->line_length, - pstate->comment_handling, pstate->comment_string, &num_lines_comment_skipped); - pstate->ilno += num_lines_comment_skipped; - if (hline != NULL) - pstate->ilno++; - } - - if (hline == NULL) // EOF - return NULL; - - slls_t* pheader_fields = (pstate->ifslen == 1) - ? split_csvlite_header_line_single_ifs(hline, pstate->ifs[0], pstate->allow_repeat_ifs) - : split_csvlite_header_line_multi_ifs(hline, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); - if (pheader_fields->length == 0) { - slls_free(pheader_fields); - free(hline); - pstate->expect_header_line_next = TRUE; - if (pstate->pheader_keeper != NULL) { - pstate->pheader_keeper = NULL; - } - } else { - for (sllse_t* pe = pheader_fields->phead; pe != NULL; pe = pe->pnext) { - if (*pe->value == 0) { - fprintf(stderr, "%s: unacceptable empty CSV key at file \"%s\" line %lld.\n", - MLR_GLOBALS.bargv0, pctx->filename, pstate->ilno); - exit(1); - } - } - - pstate->expect_header_line_next = FALSE; - - pstate->pheader_keeper = lhmslv_get(pstate->pheader_keepers, pheader_fields); - if (pstate->pheader_keeper == NULL) { - pstate->pheader_keeper = header_keeper_alloc(hline, pheader_fields); - lhmslv_put(pstate->pheader_keepers, pheader_fields, pstate->pheader_keeper, - NO_FREE); // freed by header-keeper - } else { // Re-use the header-keeper in the header cache - slls_free(pheader_fields); - free(hline); - } - break; - } - } - } - - char* line = NULL; - - if (pstate->comment_handling == COMMENTS_ARE_DATA) { - if (pstate->irslen == 1) - line = mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, pstate->do_auto_line_term, pctx); - else - line = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length); - } else { - if (pstate->irslen == 1) - line = mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, pstate->do_auto_line_term, - pstate->comment_handling, pstate->comment_string, pctx); - else - line = mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, - pstate->irs, pstate->irslen, &pstate->line_length, - pstate->comment_handling, pstate->comment_string); - } - - if (line == NULL) // EOF - return NULL; - pstate->ilno++; - - if (!*line) { - if (pstate->pheader_keeper != NULL) { - pstate->pheader_keeper = NULL; - pstate->expect_header_line_next = TRUE; - free(line); - continue; - } - } else { - pstate->ifnr++; - if (pstate->ifslen == 1) { - return pstate->use_implicit_csv_header - ? lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header( - pstate->pheader_keeper, pctx->filename, pstate->ilno, line, - pstate->ifs[0], pstate->allow_repeat_ifs) - : lrec_parse_stdio_csvlite_data_line_single_ifs(pstate->pheader_keeper, pctx->filename, - pstate->ilno, line, pstate->ifs[0], pstate->allow_repeat_ifs, pstate->allow_ragged_csv_input); - } else { - return pstate->use_implicit_csv_header - ? lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header( - pstate->pheader_keeper, pctx->filename, pstate->ilno, line, - pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs) - : lrec_parse_stdio_csvlite_data_line_multi_ifs(pstate->pheader_keeper, pctx->filename, - pstate->ilno, line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs, - pstate->allow_ragged_csv_input); - } - } - } -} - -// ---------------------------------------------------------------- -slls_t* split_csvlite_header_line_single_ifs(char* line, char ifs, int allow_repeat_ifs) { - slls_t* plist = slls_alloc(); - if (*line == 0) // empty string splits to empty list - return plist; - - char* p = line; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - char* start = p; - for ( ; *p; ) { - if (*p == ifs) { - *p = 0; - p++; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - slls_append_no_free(plist, start); - start = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *start == 0) { - ; // OK - } else { - slls_append_no_free(plist, start); - } - - return plist; -} - -slls_t* split_csvlite_header_line_multi_ifs(char* line, char* ifs, int ifslen, int allow_repeat_ifs) { - slls_t* plist = slls_alloc(); - if (*line == 0) // empty string splits to empty list - return plist; - - char* p = line; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - char* start = p; - for ( ; *p; ) { - if (streqn(p, ifs, ifslen)) { - *p = 0; - p += ifslen; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - slls_append_no_free(plist, start); - start = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *start == 0) { - ; // OK - } else { - slls_append_no_free(plist, start); - } - - return plist; -} - -// ---------------------------------------------------------------- -lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char ifs, int allow_repeat_ifs, int allow_ragged_csv_input) -{ - lrec_t* prec = lrec_csvlite_alloc(data_line); - char* p = data_line; - - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - char* key = NULL; - char* value = p; - int idx = 0; - - sllse_t* pe = pheader_keeper->pkeys->phead; - for ( ; *p; ) { - if (*p == ifs) { - *p = 0; - idx++; - if (pe == NULL) { - // Data line has more fields than the header line did - if (allow_ragged_csv_input) { - char free_flags = NO_FREE; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } else{ - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } else { - key = pe->value; - pe = pe->pnext; - lrec_put(prec, key, value, NO_FREE); - } - p++; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - value = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else if (pe == NULL) { - // Data line has more fields than the header line did - if (allow_ragged_csv_input) { - idx++; - char free_flags = NO_FREE; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } else{ - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } else { - key = pe->value; - lrec_put(prec, key, value, NO_FREE); - if (pe->pnext != NULL) { - // Header line has more fields than the data line did - if (allow_ragged_csv_input) { - for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { - key = pe->value; - lrec_put(prec, key, "", NO_FREE); - } - } else { - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } - } - - return prec; -} - -lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char* ifs, int ifslen, int allow_repeat_ifs, int allow_ragged_csv_input) -{ - lrec_t* prec = lrec_csvlite_alloc(data_line); - char* p = data_line; - - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - char* key = NULL; - char* value = p; - int idx = 0; - - sllse_t* pe = pheader_keeper->pkeys->phead; - for ( ; *p; ) { - if (streqn(p, ifs, ifslen)) { - *p = 0; - idx++; - if (pe == NULL) { - // Data line has more fields than the header line did - if (allow_ragged_csv_input) { - char free_flags = NO_FREE; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } else{ - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } - key = pe->value; - pe = pe->pnext; - lrec_put(prec, key, value, NO_FREE); - - p += ifslen; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - value = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else if (pe == NULL) { - // Data line has more fields than the header line did - if (allow_ragged_csv_input) { - char free_flags = NO_FREE; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } else{ - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } else { - key = pe->value; - lrec_put(prec, key, value, NO_FREE); - if (pe->pnext != NULL) { - // Header line has more fields than the data line did - if (allow_ragged_csv_input) { - for (pe = pe->pnext ; pe != NULL; pe = pe->pnext) { - key = pe->value; - lrec_put(prec, key, "", NO_FREE); - } - } else { - fprintf(stderr, "%s: Header-data length mismatch in file %s at line %lld.\n", - MLR_GLOBALS.bargv0, filename, ilno); - exit(1); - } - } - } - - return prec; -} - -// ---------------------------------------------------------------- -lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char ifs, int allow_repeat_ifs) -{ - lrec_t* prec = lrec_csvlite_alloc(data_line); - char* p = data_line; - - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - char* key = NULL; - char free_flags = NO_FREE; - char* value = p; - - int idx = 0; - for ( ; *p; ) { - if (*p == ifs) { - *p = 0; - - key = low_int_to_string(++idx, &free_flags); - lrec_put(prec, key, value, free_flags); - - p++; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - value = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else { - key = low_int_to_string(++idx, &free_flags); - lrec_put(prec, key, value, NO_FREE); - lrec_put(prec, key, value, free_flags); - } - - return prec; -} - -lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, - long long ilno, char* data_line, char* ifs, int ifslen, int allow_repeat_ifs) -{ - lrec_t* prec = lrec_csvlite_alloc(data_line); - char* p = data_line; - - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - char* key = NULL; - char* value = p; - char free_flags; - - int idx = 0; - for ( ; *p; ) { - if (streqn(p, ifs, ifslen)) { - *p = 0; - key = low_int_to_string(++idx, &free_flags); - lrec_put(prec, key, value, free_flags); - - p += ifslen; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - value = p; - } else { - p++; - } - } - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else { - key = low_int_to_string(++idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } - - return prec; -} diff --git a/c/input/lrec_reader_stdio_dkvp.c b/c/input/lrec_reader_stdio_dkvp.c deleted file mode 100644 index ef63e8f44..000000000 --- a/c/input/lrec_reader_stdio_dkvp.c +++ /dev/null @@ -1,345 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -#include -#include -#include "cli/comment_handling.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "input/file_reader_stdio.h" -#include "input/line_readers.h" -#include "input/lrec_readers.h" - -typedef struct _lrec_reader_stdio_dkvp_state_t { - char* irs; - char* ifs; - char* ips; - int irslen; - int ifslen; - int ipslen; - int allow_repeat_ifs; - comment_handling_t comment_handling; - char* comment_string; - size_t line_length; -} lrec_reader_stdio_dkvp_state_t; - -static void lrec_reader_stdio_dkvp_free(lrec_reader_t* preader); -static void lrec_reader_stdio_dkvp_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, - context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, - comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_dkvp_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_dkvp_state_t)); - pstate->irs = irs; - pstate->ifs = ifs; - pstate->ips = ips; - pstate->irslen = strlen(irs); - pstate->ifslen = strlen(ifs); - pstate->ipslen = strlen(ips); - pstate->allow_repeat_ifs = allow_repeat_ifs; - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - // This is used to track nominal line length over the file read. Bootstrap with a default length. - pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = file_reader_stdio_vopen; - plrec_reader->pclose_func = file_reader_stdio_vclose; - if (streq(irs, "auto")) { - // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In - // either case the final character is "\n". Then for autodetect we - // simply check if there's a character in the line before the '\n', and - // if that is '\r'. - pstate->irs = "\n"; - pstate->irslen = 1; - plrec_reader->pprocess_func = (pstate->ifslen == 1 && pstate->ipslen == 1) - ? lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term - : lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term; - } else if (pstate->irslen == 1) { - plrec_reader->pprocess_func = (pstate->ifslen == 1) - ? &lrec_reader_stdio_dkvp_process_single_irs_single_others - : &lrec_reader_stdio_dkvp_process_single_irs_multi_others; - } else { - plrec_reader->pprocess_func = (pstate->ifslen == 1) - ? &lrec_reader_stdio_dkvp_process_multi_irs_single_others - : &lrec_reader_stdio_dkvp_process_multi_irs_multi_others; - } - plrec_reader->psof_func = lrec_reader_stdio_dkvp_sof; - plrec_reader->pfree_func = lrec_reader_stdio_dkvp_free; - - return plrec_reader; -} - -static void lrec_reader_stdio_dkvp_free(lrec_reader_t* preader) { - free(preader->pvstate); - free(preader); -} - -// No-op for stateless readers such as this one. -static void lrec_reader_stdio_dkvp_sof(void* pvstate, void* pvhandle) { -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term( - void* pvstate, void* pvhandle, context_t* pctx) -{ - FILE* input_stream = pvhandle; - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); - - if (line == NULL) { - return NULL; - } else { - return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); - } -} - -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others_auto_line_term( - void* pvstate, void* pvhandle, context_t* pctx) -{ - FILE* input_stream = pvhandle; - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, TRUE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, - TRUE, pstate->comment_handling, pstate->comment_string, pctx); - if (line == NULL) { - return NULL; - } else { - return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, - pstate->allow_repeat_ifs); - } -} - -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], &pstate->line_length, FALSE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], &pstate->line_length, - FALSE, pstate->comment_handling, pstate->comment_string, pctx); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_dkvp_process_single_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, - pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_single_others(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - FILE* input_stream = pvhandle; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length) - : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length, pstate->comment_handling, pstate->comment_string); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_dkvp_single_sep(line, pstate->ifs[0], pstate->ips[0], pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_dkvp_process_multi_irs_multi_others(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_dkvp_state_t* pstate = pvstate; - FILE* input_stream = pvhandle; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length) - : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length, pstate->comment_handling, pstate->comment_string); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_dkvp_multi_sep(line, pstate->ifs, pstate->ips, pstate->ifslen, pstate->ipslen, - pstate->allow_repeat_ifs); -} - -// ---------------------------------------------------------------- -// "abc=def,ghi=jkl" -// P F P -// S S S -// "abc" "def" "ghi" "jkl" - -// I couldn't find a performance gain using stdlib index(3) ... *maybe* even a -// fraction of a percent *slower*. - -lrec_t* lrec_parse_stdio_dkvp_single_sep(char* line, char ifs, char ips, int allow_repeat_ifs) { - lrec_t* prec = lrec_dkvp_alloc(line); - - // It would be easier to split the line on field separator (e.g. ","), then - // split each key-value pair on pair separator (e.g. "="). But, that - // requires two passes through the data. Here we do it in one pass. - - int idx = 0; - char* p = line; - - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - char* key = p; - char* value = p; - - int saw_ps = FALSE; - - for ( ; *p; ) { - if (*p == ifs) { - saw_ps = FALSE; - *p = 0; - - idx++; - if (*key == 0 || value <= key) { - // E.g the pair has no equals sign: "a" rather than "a=1" or - // "a=". Here we use the positional index as the key. This way - // DKVP is a generalization of NIDX. - char free_flags = 0; - lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); - } - else { - lrec_put(prec, key, value, NO_FREE); - } - - p++; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - key = p; - value = p; - } else if (*p == ips && !saw_ps) { - *p = 0; - p++; - value = p; - saw_ps = TRUE; - } else { - p++; - } - } - idx++; - - if (allow_repeat_ifs && *key == 0 && *value == 0) { - ; // OK - } else { - if (*key == 0 || value <= key) { - char free_flags = 0; - lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); - } - else { - lrec_put(prec, key, value, NO_FREE); - } - } - - return prec; -} - -lrec_t* lrec_parse_stdio_dkvp_multi_sep(char* line, char* ifs, char* ips, int ifslen, int ipslen, - int allow_repeat_ifs) -{ - lrec_t* prec = lrec_dkvp_alloc(line); - - // It would be easier to split the line on field separator (e.g. ","), then - // split each key-value pair on pair separator (e.g. "="). But, that - // requires two passes through the data. Here we do it in one pass. - - int idx = 0; - char* p = line; - - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - char* key = p; - char* value = p; - - int saw_ps = FALSE; - - for ( ; *p; ) { - if (streqn(p, ifs, ifslen)) { - saw_ps = FALSE; - *p = 0; - - idx++; - if (*key == 0 || value <= key) { - // E.g the pair has no equals sign: "a" rather than "a=1" or - // "a=". Here we use the positional index as the key. This way - // DKVP is a generalization of NIDX. - char free_flags = 0; - lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); - } - else { - lrec_put(prec, key, value, NO_FREE); - } - - p += ifslen; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - key = p; - value = p; - } else if (streqn(p, ips, ipslen) && !saw_ps) { - *p = 0; - p += ipslen; - value = p; - saw_ps = TRUE; - } else { - p++; - } - } - idx++; - - if (allow_repeat_ifs && *key == 0 && *value == 0) { - ; // OK - } else { - if (*key == 0 || value <= key) { - char free_flags = 0; - lrec_put(prec, low_int_to_string(idx, &free_flags), value, free_flags); - } - else { - lrec_put(prec, key, value, NO_FREE); - } - } - - return prec; -} diff --git a/c/input/lrec_reader_stdio_json.c b/c/input/lrec_reader_stdio_json.c deleted file mode 100644 index 4e9a9ff22..000000000 --- a/c/input/lrec_reader_stdio_json.c +++ /dev/null @@ -1,216 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -// ================================================================ -// Note: this is a non-streaming JSON reader which reads the entire input file -// into memory and gets a pointer to it. At some future point we may implement -// a streaming JSON parser at which point this would change dramatically. -// -// See also https://github.com/johnkerl/miller/issues/99 -// ================================================================ - -#include -#include -#include "cli/comment_handling.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "input/file_ingestor_stdio.h" -#include "input/lrec_readers.h" -#include "input/json_parser.h" -#include "input/mlr_json_adapter.h" - -typedef struct _lrec_reader_stdio_json_state_t { - // The list of top-level JSON objects is backed by the file contents. The records are in turn - // backed by the top-level JSON objects. This means the latter should not be freed while - // the records are in used. (This is done to reduce data copies, for performance: we can - // manipulate pointers to strings rather than copying strings.) - // - // In particular, in the multifile-input case, we need to keep *all* parsed JSON (and - // not free one file's data when we proceed to the next) since records with pointers - // into the parsed JSON may still be in use -- e.g. mlr sort. - sllv_t* ptop_level_json_objects; - sllv_t* precords; - char* input_json_flatten_separator; - json_array_ingest_t json_array_ingest; - char* specified_line_term; - int do_auto_line_term; - char* detected_line_term; - comment_handling_t comment_handling; - char* comment_string; - long long json_line_number; // for parse-error messages since we call it repeatedly -} lrec_reader_stdio_json_state_t; - -static void lrec_reader_stdio_json_free(lrec_reader_t* preader); -static void lrec_reader_stdio_json_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, - comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_json_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_json_state_t)); - pstate->ptop_level_json_objects = sllv_alloc(); - pstate->precords = sllv_alloc(); - pstate->input_json_flatten_separator = input_json_flatten_separator; - pstate->json_array_ingest = json_array_ingest; - pstate->specified_line_term = line_term; - pstate->do_auto_line_term = FALSE; - pstate->detected_line_term = "\n"; // xxx adapt to MLR_GLOBALS/ctx-const for Windows port - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - pstate->json_line_number = 0; - - if (streq(line_term, "auto")) { - pstate->do_auto_line_term = TRUE; - } - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = file_ingestor_stdio_vopen; - plrec_reader->pclose_func = file_ingestor_stdio_nop_vclose; - plrec_reader->pprocess_func = lrec_reader_stdio_json_process; - plrec_reader->psof_func = lrec_reader_stdio_json_sof; - plrec_reader->pfree_func = lrec_reader_stdio_json_free; - - return plrec_reader; -} - -static void lrec_reader_stdio_json_free(lrec_reader_t* preader) { - lrec_reader_stdio_json_state_t* pstate = preader->pvstate; - - for (sllve_t* pe = pstate->ptop_level_json_objects->phead; pe != NULL; pe = pe->pnext) { - json_value_t* top_level_json_object = pe->pvvalue; - json_free_value(top_level_json_object); - } - sllv_free(pstate->ptop_level_json_objects); - for (sllve_t* pf = pstate->precords->phead; pf != NULL; pf = pf->pnext) { - lrec_t* prec = pf->pvvalue; - lrec_free(prec); - } - sllv_free(pstate->precords); - pstate->precords = NULL; - - free(pstate); - free(preader); -} - -// The stdio-JSON lrec-reader is non-streaming: we ingest all records here in the start-of-file hook. -// Then in the process method we pop one lrec off the list at a time, until they are all exhausted. -// This is in contrast to other Miller lrec-readers. -// -// It would be possible to extend the streaming framework to also have an end-of-file hook -// which we could use here to free parsed-JSON data. However, we simply leverage the start-of-file -// hook for the *next* file (if any) or the free method (if not): these free parsed-JSON structures -// from the previous file (if any). -static void lrec_reader_stdio_json_sof(void* pvstate, void* pvhandle) { - lrec_reader_stdio_json_state_t* pstate = pvstate; - file_ingestor_stdio_state_t* phandle = pvhandle; - json_char* json_input = (json_char*)phandle->sof; - json_value_t* parsed_top_level_json; - json_char error_buf[JSON_ERROR_MAX]; - - // This enables us to handle input of the form - // - // { "a" : 1 } - // { "b" : 2 } - // { "c" : 3 } - // - // in addition to - // - // [ - // { "a" : 1 } - // { "b" : 2 } - // { "c" : 3 } - // ] - // - // This is in line with what jq can handle. In this case, json_parse will return - // once for each top-level item and will give us back a pointer to the start of - // the rest of the input stream, so we can call json_parse on the rest until it is - // all exhausted. - - json_char* item_start = json_input; - size_t length = phandle->eof - phandle->sof; - char* detected_line_term = NULL; - - if (pstate->do_auto_line_term) { - // Find the first line-ending sequence (if any): LF or CRLF. - for (char* p = phandle->sof; p < phandle->eof; p++) { - if (p[0] == '\n') { - if (p > phandle->sof && p[-1] == '\r') { - detected_line_term = "\r\n"; - } else { - detected_line_term = "\n"; - } - break; - } - } - } - - // Skip comments. For JSON, we ingest the entire blob, this is a matter of finding and iterating over lines. - // Miller data comments must be at start of line. - if (pstate->comment_handling != COMMENTS_ARE_DATA) { - char* line_term = pstate->specified_line_term; - if (pstate->do_auto_line_term && detected_line_term != NULL) - line_term = detected_line_term; - mlr_json_strip_comments(phandle->sof, phandle->eof, - pstate->comment_handling, pstate->comment_string, line_term); - } - mlr_json_end_strip(phandle->sof, &phandle->eof); - length = phandle->eof - phandle->sof; - - if (length > 0) { - while (TRUE) { - - parsed_top_level_json = json_parse(item_start, length, error_buf, &item_start, - &pstate->json_line_number); - - if (parsed_top_level_json == NULL) { - fprintf(stderr, "%s: Unable to parse JSON data: %s\n", MLR_GLOBALS.bargv0, error_buf); - exit(1); - } - - // The lrecs have their string pointers pointing into the parsed-JSON objects (for - // efficiency) so it's important we not free the latter until our free method. - if (!reference_json_objects_as_lrecs(pstate->precords, parsed_top_level_json, - pstate->input_json_flatten_separator, pstate->json_array_ingest)) - { - fprintf(stderr, "%s: Unable to parse JSON data.\n", MLR_GLOBALS.bargv0); - exit(1); - } - - if (item_start == NULL) - break; - if (*item_start == 0) - break; - length -= (item_start - json_input); - json_input = item_start; - // json_parse goes up to the '\r' or '\n' (whichever is found first) on the first - // parse, then keeps going from there on the next. E.g. in the CRLF case it - // consumes the CR at the end of the first read and consumes the LF at the start - // of the second, and so on. After the very last parse, we need to here consume - // the final '\n' which is (by itself) a parse error. - if (length == 1 && *(char*)json_input == '\n') { - break; - } - } - } - if (detected_line_term != NULL) { - pstate->detected_line_term = detected_line_term; - } -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_json_state_t* pstate = pvstate; - if (pstate->do_auto_line_term) { - context_set_autodetected_line_term(pctx, pstate->detected_line_term); - } - return sllv_pop(pstate->precords); -} diff --git a/c/input/lrec_reader_stdio_nidx.c b/c/input/lrec_reader_stdio_nidx.c deleted file mode 100644 index c216f70d6..000000000 --- a/c/input/lrec_reader_stdio_nidx.c +++ /dev/null @@ -1,274 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -#include -#include "cli/comment_handling.h" -#include "lib/mlrutil.h" -#include "input/file_reader_stdio.h" -#include "input/line_readers.h" -#include "input/lrec_readers.h" - -typedef struct _lrec_reader_stdio_nidx_state_t { - char* irs; - char* ifs; - int irslen; - int ifslen; - int allow_repeat_ifs; - comment_handling_t comment_handling; - char* comment_string; - size_t line_length; -} lrec_reader_stdio_nidx_state_t; - -static void lrec_reader_stdio_nidx_free(lrec_reader_t* preader); -static void lrec_reader_stdio_nidx_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term(void* pvstate, void* pvhandle, - context_t* pctx); -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); -static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx); -static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, - comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_nidx_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_nidx_state_t)); - pstate->irs = irs; - pstate->ifs = ifs; - pstate->irslen = strlen(irs); - pstate->ifslen = strlen(ifs); - pstate->allow_repeat_ifs = allow_repeat_ifs; - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - // This is used to track nominal line length over the file read. Bootstrap with a default length. - pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = file_reader_stdio_vopen; - plrec_reader->pclose_func = file_reader_stdio_vclose; - if (streq(irs, "auto")) { - // Auto means either lines end in "\n" or "\r\n" (LF or CRLF). In - // either case the final character is "\n". Then for autodetect we - // simply check if there's a character in the line before the '\n', and - // if that is '\r'. - pstate->irs = "\n"; - pstate->irslen = 1; - plrec_reader->pprocess_func = (pstate->ifslen == 1) - ? lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term - : lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term; - } else if (pstate->irslen == 1) { - plrec_reader->pprocess_func = (pstate->ifslen == 1) - ? &lrec_reader_stdio_nidx_process_single_irs_single_ifs - : &lrec_reader_stdio_nidx_process_single_irs_multi_ifs; - } else { - plrec_reader->pprocess_func = (pstate->ifslen == 1) - ? &lrec_reader_stdio_nidx_process_multi_irs_single_ifs - : &lrec_reader_stdio_nidx_process_multi_irs_multi_ifs; - } - plrec_reader->psof_func = lrec_reader_stdio_nidx_sof; - plrec_reader->pfree_func = lrec_reader_stdio_nidx_free; - - return plrec_reader; -} - -static void lrec_reader_stdio_nidx_free(lrec_reader_t* preader) { - free(preader->pvstate); - free(preader); -} - -// No-op for stateless readers such as this one. -static void lrec_reader_stdio_nidx_sof(void* pvstate, void* pvhandle) { -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); - - if (line == NULL) { - return NULL; - } else { - return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); - } -} - -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs_auto_line_term(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, TRUE, pstate->comment_handling, pstate->comment_string, pctx); - - if (line == NULL) { - return NULL; - } else { - return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); - } -} - -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); - - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_nidx_process_single_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_single_delimiter(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pctx) - : mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->irs[0], - &pstate->line_length, FALSE, pstate->comment_handling, pstate->comment_string, pctx); - - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_single_ifs(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - FILE* input_stream = pvhandle; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length) - : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length, pstate->comment_handling, pstate->comment_string); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_nidx_single_sep(line, pstate->ifs[0], pstate->allow_repeat_ifs); -} - -static lrec_t* lrec_reader_stdio_nidx_process_multi_irs_multi_ifs(void* pvstate, void* pvhandle, context_t* pctx) { - lrec_reader_stdio_nidx_state_t* pstate = pvstate; - FILE* input_stream = pvhandle; - char* line = pstate->comment_handling == COMMENTS_ARE_DATA - ? mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length) - : mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, pstate->irs, pstate->irslen, - &pstate->line_length, pstate->comment_handling, pstate->comment_string); - if (line == NULL) - return NULL; - else - return lrec_parse_stdio_nidx_multi_sep(line, pstate->ifs, pstate->ifslen, pstate->allow_repeat_ifs); -} - -// ---------------------------------------------------------------- -lrec_t* lrec_parse_stdio_nidx_single_sep(char* line, char ifs, int allow_repeat_ifs) { - lrec_t* prec = lrec_nidx_alloc(line); - - int idx = 0; - char free_flags = 0; - - char* p = line; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - char* key = NULL; - char* value = p; - for ( ; *p; ) { - if (*p == ifs) { - *p = 0; - - idx++; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - - p++; - if (allow_repeat_ifs) { - while (*p == ifs) - p++; - } - value = p; - } else { - p++; - } - } - idx++; - - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else { - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } - - return prec; -} - -// ---------------------------------------------------------------- -lrec_t* lrec_parse_stdio_nidx_multi_sep(char* line, char* ifs, int ifslen, int allow_repeat_ifs) { - lrec_t* prec = lrec_nidx_alloc(line); - - int idx = 0; - char free_flags = 0; - - char* p = line; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - char* key = NULL; - char* value = p; - for ( ; *p; ) { - if (streqn(p, ifs, ifslen)) { - *p = 0; - - idx++; - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - - p += ifslen; - if (allow_repeat_ifs) { - while (streqn(p, ifs, ifslen)) - p += ifslen; - } - value = p; - } else { - p++; - } - } - idx++; - - if (allow_repeat_ifs && *value == 0) { - ; // OK - } else { - key = low_int_to_string(idx, &free_flags); - lrec_put(prec, key, value, free_flags); - } - - return prec; -} diff --git a/c/input/lrec_reader_stdio_xtab.c b/c/input/lrec_reader_stdio_xtab.c deleted file mode 100644 index e696d4051..000000000 --- a/c/input/lrec_reader_stdio_xtab.c +++ /dev/null @@ -1,186 +0,0 @@ -// ================================================================ -// Note: there are multiple process methods with a lot of code duplication. -// This is intentional. Much of Miller's measured processing time is in the -// lrec-reader process methods. This is code which needs to execute on every -// byte of input and even moving a single runtime if-statement into a -// function-pointer assignment at alloc time can have noticeable effects on -// performance (5-10% in some cases). -// ================================================================ - -#include -#include -#include "cli/comment_handling.h" -#include "lib/mlrutil.h" -#include "input/file_reader_stdio.h" -#include "input/line_readers.h" -#include "input/lrec_readers.h" - -typedef struct _lrec_reader_stdio_xtab_state_t { - char* ifs; - char* ips; - int ifslen; - int ipslen; - int allow_repeat_ips; - int do_auto_line_term; - int at_eof; - comment_handling_t comment_handling; - char* comment_string; - size_t line_length; -} lrec_reader_stdio_xtab_state_t; - -static void lrec_reader_stdio_xtab_free(lrec_reader_t* preader); -static void lrec_reader_stdio_xtab_sof(void* pvstate, void* pvhandle); -static lrec_t* lrec_reader_stdio_xtab_process(void* pvstate, void* pvhandle, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_reader_t* lrec_reader_stdio_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, - comment_handling_t comment_handling, char* comment_string) -{ - lrec_reader_t* plrec_reader = mlr_malloc_or_die(sizeof(lrec_reader_t)); - - lrec_reader_stdio_xtab_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_reader_stdio_xtab_state_t)); - pstate->ifs = ifs; - pstate->ips = ips; - pstate->ifslen = strlen(ifs); - pstate->ipslen = strlen(ips); - pstate->allow_repeat_ips = allow_repeat_ips; - pstate->do_auto_line_term = FALSE; - pstate->at_eof = FALSE; - pstate->comment_handling = comment_handling; - pstate->comment_string = comment_string; - // This is used to track nominal line length over the file read. Bootstrap with a default length. - pstate->line_length = MLR_ALLOC_READ_LINE_INITIAL_SIZE; - - if (streq(ifs, "auto")) { - pstate->do_auto_line_term = TRUE; - pstate->ifs = "\n"; - pstate->ifslen = 1; - } - - plrec_reader->pvstate = (void*)pstate; - plrec_reader->popen_func = file_reader_stdio_vopen; - plrec_reader->pclose_func = file_reader_stdio_vclose; - plrec_reader->pprocess_func = lrec_reader_stdio_xtab_process; - plrec_reader->psof_func = lrec_reader_stdio_xtab_sof; - plrec_reader->pfree_func = lrec_reader_stdio_xtab_free; - - return plrec_reader; -} - -static void lrec_reader_stdio_xtab_free(lrec_reader_t* preader) { - free(preader->pvstate); - free(preader); -} - -static void lrec_reader_stdio_xtab_sof(void* pvstate, void* pvhandle) { - lrec_reader_stdio_xtab_state_t* pstate = pvstate; - pstate->at_eof = FALSE; -} - -// ---------------------------------------------------------------- -static lrec_t* lrec_reader_stdio_xtab_process(void* pvstate, void* pvhandle, context_t* pctx) { - FILE* input_stream = pvhandle; - lrec_reader_stdio_xtab_state_t* pstate = pvstate; - - if (pstate->at_eof) - return NULL; - - slls_t* pxtab_lines = slls_alloc(); - - while (TRUE) { - char* line = NULL; - - if (pstate->comment_handling == COMMENTS_ARE_DATA) { - if (pstate->ifslen == 1) - line = mlr_alloc_read_line_single_delimiter(input_stream, pstate->ifs[0], - &pstate->line_length, pstate->do_auto_line_term, pctx); - else - line = mlr_alloc_read_line_multiple_delimiter(input_stream, pstate->ifs, pstate->ifslen, - &pstate->line_length); - } else { - if (pstate->ifslen == 1) - line = mlr_alloc_read_line_single_delimiter_stripping_comments(input_stream, pstate->ifs[0], - &pstate->line_length, pstate->do_auto_line_term, - pstate->comment_handling, pstate->comment_string, pctx); - else - line = mlr_alloc_read_line_multiple_delimiter_stripping_comments(input_stream, - pstate->ifs, pstate->ifslen, &pstate->line_length, - pstate->comment_handling, pstate->comment_string); - } - - if (line == NULL) { // EOF - // EOF or blank line terminates the stanza. - pstate->at_eof = TRUE; - if (pxtab_lines->length == 0) { - slls_free(pxtab_lines); - return NULL; - } else { - return (pstate->ipslen == 1) - ? lrec_parse_stdio_xtab_single_ips(pxtab_lines, pstate->ips[0], pstate->allow_repeat_ips) - : lrec_parse_stdio_xtab_multi_ips(pxtab_lines, pstate->ips, pstate->ipslen, - pstate->allow_repeat_ips); - } - - } else if (*line == '\0') { - free(line); - if (pxtab_lines->length > 0) { - return (pstate->ipslen == 1) - ? lrec_parse_stdio_xtab_single_ips(pxtab_lines, pstate->ips[0], pstate->allow_repeat_ips) - : lrec_parse_stdio_xtab_multi_ips(pxtab_lines, pstate->ips, pstate->ipslen, - pstate->allow_repeat_ips); - } - - } else { - slls_append_with_free(pxtab_lines, line); - } - } -} - -// ---------------------------------------------------------------- -lrec_t* lrec_parse_stdio_xtab_single_ips(slls_t* pxtab_lines, char ips, int allow_repeat_ips) { - lrec_t* prec = lrec_xtab_alloc(pxtab_lines); - - for (sllse_t* pe = pxtab_lines->phead; pe != NULL; pe = pe->pnext) { - char* line = pe->value; - char* p = line; - char* key = p; - - while (*p != 0 && *p != ips) - p++; - if (*p == 0) { - lrec_put(prec, key, "", NO_FREE); - } else { - while (*p != 0 && *p == ips) { - *p = 0; - p++; - } - lrec_put(prec, key, p, NO_FREE); - } - } - - return prec; -} - -lrec_t* lrec_parse_stdio_xtab_multi_ips(slls_t* pxtab_lines, char* ips, int ipslen, int allow_repeat_ips) { - lrec_t* prec = lrec_xtab_alloc(pxtab_lines); - - for (sllse_t* pe = pxtab_lines->phead; pe != NULL; pe = pe->pnext) { - char* line = pe->value; - char* p = line; - char* key = p; - - while (*p != 0 && !streqn(p, ips, ipslen)) - p++; // Advance by only 1 in case of subsequent match - if (*p == 0) { - lrec_put(prec, key, "", NO_FREE); - } else { - while (*p != 0 && streqn(p, ips, ipslen)) { - *p = 0; - p += ipslen; - } - lrec_put(prec, key, p, NO_FREE); - } - } - - return prec; -} diff --git a/c/input/lrec_readers.c b/c/input/lrec_readers.c deleted file mode 100644 index d58682e94..000000000 --- a/c/input/lrec_readers.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "cli/comment_handling.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "input/lrec_readers.h" -#include "input/byte_readers.h" - -lrec_reader_t* lrec_reader_alloc(cli_reader_opts_t* popts) { - if (streq(popts->ifile_fmt, "gen")) { - generator_opts_t* pgopts = &popts->generator_opts; - return lrec_reader_gen_alloc(pgopts->field_name, pgopts->start, pgopts->stop, pgopts->step); - } else if (streq(popts->ifile_fmt, "dkvp")) { - return lrec_reader_stdio_dkvp_alloc(popts->irs, popts->ifs, popts->ips, popts->allow_repeat_ifs, - popts->comment_handling, popts->comment_string); - } else if (streq(popts->ifile_fmt, "csv")) { - return lrec_reader_stdio_csv_alloc(popts->irs, popts->ifs, popts->use_implicit_csv_header, - popts->allow_ragged_csv_input, popts->comment_handling, popts->comment_string); - } else if (streq(popts->ifile_fmt, "csvlite")) { - return lrec_reader_stdio_csvlite_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, - popts->use_implicit_csv_header, popts->allow_ragged_csv_input, popts->comment_handling, - popts->comment_string); - } else if (streq(popts->ifile_fmt, "nidx")) { - return lrec_reader_stdio_nidx_alloc(popts->irs, popts->ifs, popts->allow_repeat_ifs, - popts->comment_handling, popts->comment_string); - } else if (streq(popts->ifile_fmt, "xtab")) { - return lrec_reader_stdio_xtab_alloc(popts->ifs, popts->ips, popts->allow_repeat_ips, - popts->comment_handling, popts->comment_string); - } else if (streq(popts->ifile_fmt, "json")) { - return lrec_reader_stdio_json_alloc(popts->input_json_flatten_separator, - popts->json_array_ingest, popts->irs, popts->comment_handling, popts->comment_string); - } else { - return NULL; - } -} - -lrec_reader_t* lrec_reader_alloc_or_die(cli_reader_opts_t* popts) { - lrec_reader_t* plrec_reader = lrec_reader_alloc(popts); - if (plrec_reader == NULL) { - fprintf(stderr, "%s: unrecognized input-file format \"%s\".\n", - MLR_GLOBALS.bargv0, popts->ifile_fmt); - exit(1); - } - return plrec_reader; -} diff --git a/c/input/lrec_readers.h b/c/input/lrec_readers.h deleted file mode 100644 index 935f1ff5d..000000000 --- a/c/input/lrec_readers.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef LREC_READERS_H -#define LREC_READERS_H -#include "cli/mlrcli.h" -#include "cli/comment_handling.h" -#include "input/lrec_reader.h" - -// ---------------------------------------------------------------- -// Primary entry points - -lrec_reader_t* lrec_reader_alloc(cli_reader_opts_t* popts); -lrec_reader_t* lrec_reader_alloc_or_die(cli_reader_opts_t* popts); - -lrec_reader_t* lrec_reader_gen_alloc(char* field_name, unsigned long long start, unsigned long long stop, unsigned long long step); -lrec_reader_t* lrec_reader_stdio_csvlite_alloc(char* irs, char* ifs, int allow_repeat_ifs, int use_implicit_csv_header, - int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); -lrec_reader_t* lrec_reader_stdio_csv_alloc(char* irs, char* ifs, int use_implicit_csv_header, - int allow_ragged_csv_input, comment_handling_t comment_handling, char* comment_string); -lrec_reader_t* lrec_reader_stdio_dkvp_alloc(char* irs, char* ifs, char* ips, int allow_repeat_ifs, - comment_handling_t comment_handling, char* comment_string); -lrec_reader_t* lrec_reader_stdio_nidx_alloc(char* irs, char* ifs, int allow_repeat_ifs, - comment_handling_t comment_handling, char* comment_string); -lrec_reader_t* lrec_reader_stdio_xtab_alloc(char* ifs, char* ips, int allow_repeat_ips, - comment_handling_t comment_handling, char* comment_string); -lrec_reader_t* lrec_reader_stdio_json_alloc(char* input_json_flatten_separator, json_array_ingest_t json_array_ingest, char* line_term, - comment_handling_t comment_handling, char* comment_string); - -lrec_reader_t* lrec_reader_in_memory_alloc(sllv_t* precords); - -// ---------------------------------------------------------------- -// These entry points are made public for unit test - -lrec_t* lrec_parse_stdio_nidx_single_sep(char* line, char ifs, int allow_repeat_ifs); -lrec_t* lrec_parse_stdio_nidx_multi_sep(char* line, char* ifs, int ifslen, int allow_repeat_ifs); - -lrec_t* lrec_parse_stdio_dkvp_single_sep(char* line, char ifs, char ips, int allow_repeat_ifs); -lrec_t* lrec_parse_stdio_dkvp_multi_sep(char* line, char* ifs, char* ips, int ifslen, int ipslen, int allow_repeat_ifs); - -slls_t* split_csv_header_line(char* line, char ifs, int allow_repeat_ifs); - -slls_t* split_csvlite_header_line_single_ifs(char* line, char ifs, int allow_repeat_ifs); -slls_t* split_csvlite_header_line_multi_ifs(char* line, char* ifs, int ifslen, int allow_repeat_ifs); - -lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char ifs, int allow_repeat_ifs, int allow_ragged_csv_input); -lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char* ifs, int ifslen, int allow_repeat_ifs, int allow_ragged_csv_input); -lrec_t* lrec_parse_stdio_csvlite_data_line_single_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char ifs, int allow_repeat_ifs); -lrec_t* lrec_parse_stdio_csvlite_data_line_multi_ifs_implicit_header(header_keeper_t* pheader_keeper, char* filename, long long ilno, - char* data_line, char* ifs, int ifslen, int allow_repeat_ifs); - -lrec_t* lrec_parse_stdio_xtab_single_ips(slls_t* pxtab_lines, char ips, int allow_repeat_ips); -lrec_t* lrec_parse_stdio_xtab_multi_ips(slls_t* pxtab_lines, char* ips, int ipslen, int allow_repeat_ips); - -#endif // LREC_READERS_H diff --git a/c/input/mlr_json_adapter.c b/c/input/mlr_json_adapter.c deleted file mode 100644 index 1439d7d32..000000000 --- a/c/input/mlr_json_adapter.c +++ /dev/null @@ -1,320 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "cli/json_array_ingest.h" -#include "input/mlr_json_adapter.h" - -static lrec_t* validate_millerable_object(json_value_t* pjson_object, char* flatten_sep, - json_array_ingest_t json_array_ingest); -static int populate_from_nested_object(lrec_t* prec, json_value_t* pjson_object, char* prefix, char* flatten_sep, - json_array_ingest_t json_array_ingest); -static int populate_from_nested_array(lrec_t* prec, json_value_t* pjson_array, char* prefix, char* flatten_sep, - json_array_ingest_t json_array_ingest); - -// ---------------------------------------------------------------- -int reference_json_objects_as_lrecs(sllv_t* precords, json_value_t* ptop_level_json, char* flatten_sep, - json_array_ingest_t json_array_ingest) -{ - if (ptop_level_json->type == JSON_ARRAY) { - int n = ptop_level_json->u.array.length; - for (int i = 0; i < n; i++) { - json_value_t* pnext_level_json = ptop_level_json->u.array.values[i]; - if (pnext_level_json->type != JSON_OBJECT) { - fprintf(stderr, - "%s: found non-object (type %s) within top-level array. This is valid but unmillerable JSON.\n", - MLR_GLOBALS.bargv0, json_describe_type(ptop_level_json->type)); - return FALSE; - } - lrec_t* prec = validate_millerable_object(pnext_level_json, flatten_sep, json_array_ingest); - if (prec == NULL) - return FALSE; - sllv_append(precords, prec); - } - } else if (ptop_level_json->type == JSON_OBJECT) { - lrec_t* prec = validate_millerable_object(ptop_level_json, flatten_sep, json_array_ingest); - if (prec == NULL) - return FALSE; - sllv_append(precords, prec); - } else { - fprintf(stderr, - "%s: found non-terminal (type %s) at top level. This is valid but unmillerable JSON.\n", - MLR_GLOBALS.bargv0, json_describe_type(ptop_level_json->type)); - return FALSE; - } - return TRUE; -} - -// ---------------------------------------------------------------- -// Returns NULL if the JSON object is not millerable, else returns a new lrec with string pointers -// backed by the JSON object. -// -// Precondition: the JSON value is assumed to have already been checked to be of type JSON_OBJECT. - -lrec_t* validate_millerable_object(json_value_t* pjson, char* flatten_sep, json_array_ingest_t json_array_ingest) { - lrec_t* prec = lrec_unbacked_alloc(); - int n = pjson->u.array.length; - for (int i = 0; i < n; i++) { - json_object_entry_t* pobject_entry = &pjson->u.object.p.values[i]; - char* key = (char*)pobject_entry->name; - char* prefix = NULL; - - json_value_t* pjson_value = pobject_entry->pvalue; - switch (pjson_value->type) { - - case JSON_NONE: - lrec_put(prec, key, "", NO_FREE); - break; - case JSON_NULL: - lrec_put(prec, key, "", NO_FREE); - break; - - case JSON_OBJECT: - // This could be made more efficient ... the string length is in the json_value_t. - prefix = mlr_paste_2_strings(key, flatten_sep); - if (!populate_from_nested_object(prec, pjson_value, prefix, flatten_sep, json_array_ingest)) - return NULL; - free(prefix); - break; - case JSON_ARRAY: - switch (json_array_ingest) { - case JSON_ARRAY_INGEST_FATAL: - fprintf(stderr, - "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" - "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" - "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", - MLR_GLOBALS.bargv0); - return NULL; - break; - case JSON_ARRAY_INGEST_AS_MAP: - prefix = mlr_paste_2_strings(key, flatten_sep); - if (!populate_from_nested_array(prec, pjson_value, prefix, flatten_sep, json_array_ingest)) { - free(prefix); - return NULL; - } - free(prefix); - break; - // xxx other cases! - default: - break; - } - break; - - case JSON_STRING: - lrec_put(prec, key, pjson_value->u.string.ptr, NO_FREE); - break; - - case JSON_BOOLEAN: - lrec_put(prec, key, pjson_value->u.boolean.sval, NO_FREE); - break; - case JSON_INTEGER: - lrec_put(prec, key, pjson_value->u.integer.sval, NO_FREE); - break; - case JSON_DOUBLE: - lrec_put(prec, key, pjson_value->u.dbl.sval, NO_FREE); - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - - } - return prec; -} - -// ---------------------------------------------------------------- -// Example: the JSON object has { "a": { "b" : 1, "c" : 2 } }. Then we add "a:b" => "1" and "a:c" => "2" -// to the lrec. - -static int populate_from_nested_object(lrec_t* prec, json_value_t* pjson_object, char* prefix, char* flatten_sep, - json_array_ingest_t json_array_ingest) -{ - int n = pjson_object->u.object.length; - for (int i = 0; i < n; i++) { - json_object_entry_t* pobject_entry = &pjson_object->u.object.p.values[i]; - char* json_key = (char*)pobject_entry->name; - json_value_t* pjson_value = pobject_entry->pvalue; - char* lrec_key = mlr_paste_2_strings(prefix, json_key); - char* next_prefix = NULL; - - switch (pjson_value->type) { - case JSON_NONE: - lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); - break; - case JSON_NULL: - lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); - break; - case JSON_STRING: - lrec_put(prec, lrec_key, pjson_value->u.string.ptr, FREE_ENTRY_KEY); - break; - case JSON_BOOLEAN: - lrec_put(prec, lrec_key, pjson_value->u.boolean.sval, FREE_ENTRY_KEY); - break; - case JSON_OBJECT: - next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); - if (!populate_from_nested_object(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) - return FALSE; - free(next_prefix); - free(lrec_key); - break; - case JSON_ARRAY: - switch (json_array_ingest) { - case JSON_ARRAY_INGEST_FATAL: - fprintf(stderr, - "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" - "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" - "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", - MLR_GLOBALS.bargv0); - free(lrec_key); - return FALSE; - break; - case JSON_ARRAY_INGEST_AS_MAP: - next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); - if (!populate_from_nested_array(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) { - free(next_prefix); - free(lrec_key); - return FALSE; - } - free(next_prefix); - free(lrec_key); - break; - // xxx other cases! - default: - free(lrec_key); - break; - } - break; - case JSON_INTEGER: - lrec_put(prec, lrec_key, pjson_value->u.integer.sval, FREE_ENTRY_KEY); - break; - case JSON_DOUBLE: - lrec_put(prec, lrec_key, pjson_value->u.dbl.sval, FREE_ENTRY_KEY); - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - } - return TRUE; -} - -static int populate_from_nested_array(lrec_t* prec, json_value_t* pjson_array, char* prefix, char* flatten_sep, - json_array_ingest_t json_array_ingest) -{ - int n = pjson_array->u.array.length; - for (int i = 0; i < n; i++) { - json_value_t* pjson_value = pjson_array->u.array.values[i]; - - char free_flags = NO_FREE; - char* json_key = low_int_to_string(i, &free_flags); - char* lrec_key = mlr_paste_2_strings(prefix, json_key); - if (free_flags) - free(json_key); - char* next_prefix = NULL; - - switch (pjson_value->type) { - case JSON_NONE: - lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); - break; - case JSON_NULL: - lrec_put(prec, lrec_key, "", FREE_ENTRY_KEY); - break; - case JSON_STRING: - lrec_put(prec, lrec_key, pjson_value->u.string.ptr, FREE_ENTRY_KEY); - break; - case JSON_BOOLEAN: - lrec_put(prec, lrec_key, pjson_value->u.boolean.sval, FREE_ENTRY_KEY); - break; - case JSON_OBJECT: - next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); - if (!populate_from_nested_object(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) - return FALSE; - free(next_prefix); - free(lrec_key); - break; - case JSON_ARRAY: - switch (json_array_ingest) { - case JSON_ARRAY_INGEST_FATAL: - fprintf(stderr, - "%s: found array item within JSON object. This is valid but unmillerable JSON.\n" - "Use --json-skip-arrays-on-input to exclude these from input without fataling.\n" - "Or, --json-map-arrays-on-input to convert them to integer-indexed maps.\n", - MLR_GLOBALS.bargv0); - return FALSE; - break; - case JSON_ARRAY_INGEST_AS_MAP: - next_prefix = mlr_paste_2_strings(lrec_key, flatten_sep); - if (!populate_from_nested_array(prec, pjson_value, next_prefix, flatten_sep, json_array_ingest)) { - free(lrec_key); - free(next_prefix); - return FALSE; - } - free(lrec_key); - free(next_prefix); - break; - // xxx other cases! - default: - free(lrec_key); - break; - } - break; - - case JSON_INTEGER: - lrec_put(prec, lrec_key, pjson_value->u.integer.sval, FREE_ENTRY_KEY); - break; - case JSON_DOUBLE: - lrec_put(prec, lrec_key, pjson_value->u.dbl.sval, FREE_ENTRY_KEY); - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - - } - return TRUE; -} - -// ---------------------------------------------------------------- -// * The buffer is an entire JSON blob, e.g. contents from stdio read; peof-psof is the file size so peof is one -// byte *after* the last valid file byte. -// * The buffer is not assumed to be null-terminated. -// * Any lines beginning with comment_string are modified by poking space characters up to line_term. -void mlr_json_strip_comments(char* psof, char* peof, comment_handling_t comment_handling, char* comment_string, char* line_term) { - int comment_string_len = strlen(comment_string); - int line_term_len = strlen(line_term); - int at_line_start = TRUE; - for (char* p = psof; p < peof; /* increment in loop */) { - if (streqn(p, line_term, line_term_len)) { - p += line_term_len; - at_line_start = TRUE; - } else if (at_line_start && streqn(p, comment_string, comment_string_len)) { - // Fill with spaces to end of line - while (p < peof && !streqn(p, line_term, line_term_len)) { - if (comment_handling == PASS_COMMENTS) - fputc(*p, stdout); - *p = ' '; - p++; - } - if (comment_handling == PASS_COMMENTS) - fputs(line_term, stdout); - at_line_start = TRUE; - } else { - at_line_start = FALSE; - p++; - } - } -} - -// ---------------------------------------------------------------- -// I'm using a 3rd-party JSON parser and it's easy to strip all trailing whitespace -// than tweak the parser to handle those. -// -// peof is one past the last valid byte. -// pend is the last valid byte. -void mlr_json_end_strip(char* psof, char** ppeof) { - char* pend = *ppeof - 1; - - while (pend >= psof && (*pend == ' ' || *pend == '\t' || *pend == '\r' || *pend == '\n')) { - pend--; - } - - *ppeof = pend + 1; -} diff --git a/c/input/mlr_json_adapter.h b/c/input/mlr_json_adapter.h deleted file mode 100644 index 60ebdd511..000000000 --- a/c/input/mlr_json_adapter.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef MLR_JSON_ADAPTER_H -#define MLR_JSON_ADAPTER_H - -#include "cli/comment_handling.h" -#include "input/json_parser.h" -#include "containers/lrec.h" - -// Given parsed JSON, constructs a list of lrecs with string values pointing into the parsed JSON. -// This is done for efficiency, to avoid data copying. It also means the parsed JSON should not be -// freed until the lrecs are freed. -// -// Default behavior on arrays is to fatal. There is a command-line option to skip them. Miller -// doesn't have an array object in its DSL, only maps, and converting JSON arrays to int-keyed maps -// poses problems of irreversibility. (Namely, 'mlr --json cat foo.json' when foo.json contains -// arrays would result in output differing from input.) -int reference_json_objects_as_lrecs(sllv_t* precords, json_value_t* ptop_level_json, char* flatten_sep, - json_array_ingest_t json_array_ingest); - -// * The buffer is an entire JSON blob, e.g. contents from stdio read; peof-psof is the file size so peof is one -// byte *after* the last valid file byte. -// * The buffer is not assumed to be null-terminated. -// * Any lines beginning with comment_string are modified by poking space characters up to line_term. -void mlr_json_strip_comments(char* psof, char* peof, - comment_handling_t comment_handling, char* comment_string, char* line_term); - -// I'm using a 3rd-party JSON parser and it's easy to strip all trailing whitespace -// than tweak the parser to handle those. -void mlr_json_end_strip(char* psof, char** ppeof); - -#endif // MLR_JSON_ADAPTER_H diff --git a/c/input/peek_file_reader.c b/c/input/peek_file_reader.c deleted file mode 100644 index ac02feb97..000000000 --- a/c/input/peek_file_reader.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include "input/peek_file_reader.h" - -// ---------------------------------------------------------------- -void pfr_print(peek_file_reader_t* pfr) { - printf("======================== pfr at %p\n", pfr); - printf(" peekbuflen = %d\n", pfr->peekbuflen); - printf(" npeeked = %d\n", pfr->npeeked); - int sob = pfr->sob; - int eob = (pfr->sob + pfr->npeeked) & pfr->peekbuflenmask; - for (int i = 0; i < pfr->peekbuflen; i++) { - char c = pfr->peekbuf[i]; - char* sdesc = (i == sob) ? "START" : ""; - char* edesc = (i == eob) ? "END" : ""; - char* occdesc = ""; - if (sob <= eob) { - if (sob <= i && i < eob) - occdesc = "OCC"; - } else { - if (i < eob || sob <= i) - occdesc = "OCC"; - } - printf(" %-5s %-5s %-3s i=%2d c=%c [%02x]\n", - sdesc, edesc, occdesc, i, isprint((unsigned char)c) ? c : ' ', c); - } - printf("------------------------\n"); -} diff --git a/c/input/peek_file_reader.h b/c/input/peek_file_reader.h deleted file mode 100644 index 0a0afe7c8..000000000 --- a/c/input/peek_file_reader.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef PEEK_FILE_READER_H -#define PEEK_FILE_READER_H - -#include -#include "lib/mlrutil.h" -#include "lib/mlrmath.h" -#include "lib/mlr_globals.h" -#include "input/byte_reader.h" - -// This is a ring-buffered peekahead file/string reader. - -// Note: Throughout Miller as a general rule I treat struct attributes as if -// they were private attributes. However, for performance, parse_trie_ring_match -// accesses this ring buffer directly. -typedef struct _peek_file_reader_t { - byte_reader_t* pbr; - int peekbuflen; - int peekbuflenmask; - char* peekbuf; - int sob; // start of ring-buffer - int npeeked; -} peek_file_reader_t; - -// ---------------------------------------------------------------- -static inline peek_file_reader_t* pfr_alloc(byte_reader_t* pbr, int maxnpeek) { - peek_file_reader_t* pfr = mlr_malloc_or_die(sizeof(peek_file_reader_t)); - pfr->pbr = pbr; - pfr->peekbuflen = power_of_two_above(maxnpeek); - pfr->peekbuflenmask = pfr->peekbuflen - 1; - // The peek-buffer doesn't contain null-terminated C strings, but we - // nonetheless null-terminate the buffer with an extra never-touched byte - // so that print statements in the debugger, etc. will be nice. - pfr->peekbuf = mlr_malloc_or_die(pfr->peekbuflen + 1); - memset(pfr->peekbuf, 0, pfr->peekbuflen + 1); - pfr->sob = 0; - pfr->npeeked = 0; - - return pfr; -} - -// ---------------------------------------------------------------- -static inline void pfr_free(peek_file_reader_t* pfr) { - if (pfr == NULL) - return; - free(pfr->peekbuf); - free(pfr); -} - -// ---------------------------------------------------------------- -static inline void pfr_reset(peek_file_reader_t* pfr) { - memset(pfr->peekbuf, 0, pfr->peekbuflen); - pfr->sob = 0; - pfr->npeeked = 0; -} - -// ---------------------------------------------------------------- -static inline char pfr_peek_char(peek_file_reader_t* pfr) { - if (pfr->npeeked < 1) { - pfr->peekbuf[pfr->sob] = pfr->pbr->pread_func(pfr->pbr); - pfr->npeeked++; - } - return pfr->peekbuf[pfr->sob]; -} - -// ---------------------------------------------------------------- -static inline char pfr_read_char(peek_file_reader_t* pfr) { - if (pfr->npeeked < 1) { - return pfr->pbr->pread_func(pfr->pbr); - } else { - char c = pfr->peekbuf[pfr->sob]; - pfr->sob = (pfr->sob + 1) & pfr->peekbuflenmask; - pfr->npeeked--; - return c; - } -} - -// ---------------------------------------------------------------- -static inline void pfr_buffer_by(peek_file_reader_t* pfr, int len) { - while (pfr->npeeked < len) { - pfr->peekbuf[(pfr->sob + pfr->npeeked++) & pfr->peekbuflenmask] = pfr->pbr->pread_func(pfr->pbr); - } -} - -// ---------------------------------------------------------------- -static inline void pfr_advance_by(peek_file_reader_t* pfr, int len) { - MLR_INTERNAL_CODING_ERROR_IF(len > pfr->npeeked); - pfr->sob = (pfr->sob + len) & pfr->peekbuflenmask; - pfr->npeeked -= len; -} - -// ---------------------------------------------------------------- -void pfr_print(peek_file_reader_t* pfr); - -#endif // PEEK_FILE_READER_H diff --git a/c/input/stdio_byte_reader.c b/c/input/stdio_byte_reader.c deleted file mode 100644 index 6ed3ec4b0..000000000 --- a/c/input/stdio_byte_reader.c +++ /dev/null @@ -1,98 +0,0 @@ -#include -#include -#include "input/byte_readers.h" -#include "lib/mlr_globals.h" -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlrescape.h" - -typedef struct _stdio_byte_reader_state_t { - char* filename; - FILE* fp; -} stdio_byte_reader_state_t; - -static int stdio_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename); -static int stdio_byte_reader_read_func(struct _byte_reader_t* pbr); -static void stdio_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe); - -// ---------------------------------------------------------------- -byte_reader_t* stdio_byte_reader_alloc() { - byte_reader_t* pbr = mlr_malloc_or_die(sizeof(byte_reader_t)); - - pbr->pvstate = NULL; - pbr->popen_func = stdio_byte_reader_open_func; - pbr->pread_func = stdio_byte_reader_read_func; - pbr->pclose_func = stdio_byte_reader_close_func; - - return pbr; -} - -void stdio_byte_reader_free(byte_reader_t* pbr) { - stdio_byte_reader_state_t* pstate = pbr->pvstate; - if (pstate != NULL) { - free(pstate->filename); // null-ok semantics - } - free(pbr); -} - -// ---------------------------------------------------------------- -static int stdio_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* filename) { - stdio_byte_reader_state_t* pstate = mlr_malloc_or_die(sizeof(stdio_byte_reader_state_t)); - - pstate->filename = mlr_strdup_or_die(filename); - - if (prepipe == NULL) { - if (streq(pstate->filename, "-")) { - pstate->fp = stdin; - } else { - pstate->fp = fopen(filename, "r"); - if (pstate->fp == NULL) { - perror("fopen"); - fprintf(stderr, "%s: Couldn't fopen \"%s\" for read.\n", MLR_GLOBALS.bargv0, filename); - exit(1); - } - } - } else { - char* escaped_filename = alloc_file_name_escaped_for_popen(filename); - char* command = mlr_malloc_or_die(strlen(prepipe) + 3 + strlen(escaped_filename) + 1); - if (streq(filename, "-")) - sprintf(command, "%s", prepipe); - else - sprintf(command, "%s < %s", prepipe, escaped_filename); - pstate->fp = popen(command, "r"); - if (pstate->fp == NULL) { - fprintf(stderr, "%s: Couldn't popen \"%s\" for read.\n", MLR_GLOBALS.bargv0, command); - perror(command); - exit(1); - } - free(escaped_filename); - free(command); - } - - pbr->pvstate = pstate; - return TRUE; -} - -static int stdio_byte_reader_read_func(struct _byte_reader_t* pbr) { - stdio_byte_reader_state_t* pstate = pbr->pvstate; - int c = mlr_arch_getc(pstate->fp); - if (c == EOF && ferror(pstate->fp)) { - perror("fread"); - fprintf(stderr, "%s: Read error on file \"%s\".\n", MLR_GLOBALS.bargv0, pstate->filename); - exit(1); - } - return c; -} - -static void stdio_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe) { - stdio_byte_reader_state_t* pstate = pbr->pvstate; - if (prepipe == NULL) { - if (pstate->fp != stdin) - fclose(pstate->fp); - } else { - pclose(pstate->fp); - } - free(pstate->filename); - free(pstate); - pbr->pvstate = NULL; -} diff --git a/c/input/string_byte_reader.c b/c/input/string_byte_reader.c deleted file mode 100644 index fb394b632..000000000 --- a/c/input/string_byte_reader.c +++ /dev/null @@ -1,60 +0,0 @@ -#include // For definition of EOF -#include "input/byte_readers.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" - -typedef struct _string_byte_reader_state_t { - char* backing; - char* p; - char* pend; -} string_byte_reader_state_t; - -static int string_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* backing); -static int string_byte_reader_read_func(struct _byte_reader_t* pbr); -static void string_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe); - -// ---------------------------------------------------------------- -byte_reader_t* string_byte_reader_alloc() { - byte_reader_t* pbr = mlr_malloc_or_die(sizeof(byte_reader_t)); - - pbr->pvstate = NULL; - pbr->popen_func = string_byte_reader_open_func; - pbr->pread_func = string_byte_reader_read_func; - pbr->pclose_func = string_byte_reader_close_func; - - return pbr; -} - -void string_byte_reader_free(byte_reader_t* pbr) { - free(pbr); -} - -// ---------------------------------------------------------------- -static int string_byte_reader_open_func(struct _byte_reader_t* pbr, char* prepipe, char* backing) { - // popen is a stdio construct, not an mmap construct, and it can't be supported here. - if (prepipe != NULL) { - fprintf(stderr, "%s: coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - } - - string_byte_reader_state_t* pstate = mlr_malloc_or_die(sizeof(string_byte_reader_state_t)); - pstate->backing = backing; - pstate->p = pstate->backing; - pstate->pend = pstate->backing + strlen(pstate->backing); - pbr->pvstate = pstate; - return TRUE; -} - -static int string_byte_reader_read_func(struct _byte_reader_t* pbr) { - string_byte_reader_state_t* pstate = pbr->pvstate; - if (pstate->p < pstate->pend) { - return *(pstate->p++); - } else { - return EOF; - } -} - -static void string_byte_reader_close_func(struct _byte_reader_t* pbr, char* prepipe) { - pbr->pvstate = NULL; -} diff --git a/c/lib/Makefile.am b/c/lib/Makefile.am deleted file mode 100644 index 8042c8c46..000000000 --- a/c/lib/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -noinst_LTLIBRARIES= libmlr.la -libmlr_la_SOURCES= free_flags.h \ - minunit.h \ - mlr_arch.c \ - mlr_arch.h \ - mlr_globals.c \ - mlr_globals.h \ - mlrdatetime.c \ - mlrdatetime.h \ - mlrescape.c \ - mlrescape.h \ - mlrmath.c \ - mlrmath.h \ - mlrstat.c \ - mlrstat.h \ - mlrregex.c \ - mlrregex.h \ - mlrtimezone.h \ - mlrutil.c \ - mlrutil.h \ - mlrval.c \ - mlrval.h \ - mvfuncs.c \ - mvfuncs.h \ - netbsd_strptime.c \ - netbsd_strptime.h \ - nlnet_timegm.c \ - nlnet_timegm.h \ - context.c \ - context.h \ - mtrand.c \ - mtrand.h \ - string_array.c \ - string_array.h \ - string_builder.c \ - string_builder.h \ - mlr_test_util.c \ - mlr_test_util.h \ - utf8.h - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/lib/Makefile.in b/c/lib/Makefile.in deleted file mode 100644 index dd970a714..000000000 --- a/c/lib/Makefile.in +++ /dev/null @@ -1,647 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/lib -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libmlr_la_LIBADD = -am_libmlr_la_OBJECTS = mlr_arch.lo mlr_globals.lo mlrdatetime.lo \ - mlrescape.lo mlrmath.lo mlrstat.lo mlrregex.lo mlrutil.lo \ - mlrval.lo mvfuncs.lo netbsd_strptime.lo nlnet_timegm.lo \ - context.lo mtrand.lo string_array.lo string_builder.lo \ - mlr_test_util.lo -libmlr_la_OBJECTS = $(am_libmlr_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libmlr_la_SOURCES) -DIST_SOURCES = $(libmlr_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libmlr.la -libmlr_la_SOURCES = free_flags.h \ - minunit.h \ - mlr_arch.c \ - mlr_arch.h \ - mlr_globals.c \ - mlr_globals.h \ - mlrdatetime.c \ - mlrdatetime.h \ - mlrescape.c \ - mlrescape.h \ - mlrmath.c \ - mlrmath.h \ - mlrstat.c \ - mlrstat.h \ - mlrregex.c \ - mlrregex.h \ - mlrtimezone.h \ - mlrutil.c \ - mlrutil.h \ - mlrval.c \ - mlrval.h \ - mvfuncs.c \ - mvfuncs.h \ - netbsd_strptime.c \ - netbsd_strptime.h \ - nlnet_timegm.c \ - nlnet_timegm.h \ - context.c \ - context.h \ - mtrand.c \ - mtrand.h \ - string_array.c \ - string_array.h \ - string_builder.c \ - string_builder.h \ - mlr_test_util.c \ - mlr_test_util.h \ - utf8.h - -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/lib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/lib/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libmlr.la: $(libmlr_la_OBJECTS) $(libmlr_la_DEPENDENCIES) $(EXTRA_libmlr_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libmlr_la_OBJECTS) $(libmlr_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_arch.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_globals.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_test_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrdatetime.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrescape.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrmath.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrregex.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrstat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlrval.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtrand.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mvfuncs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netbsd_strptime.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlnet_timegm.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_array.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_builder.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/lib/context.c b/c/lib/context.c deleted file mode 100644 index 3e9aef264..000000000 --- a/c/lib/context.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "lib/context.h" -#include "cli/mlrcli.h" - -// ---------------------------------------------------------------- -void context_init_from_first_file_name(context_t* pctx, char* first_file_name) { - memset(pctx, 0, sizeof(context_t)); - pctx->nr = 0; - pctx->fnr = 0; - pctx->filenum = 1; - pctx->filename = first_file_name; - // Line-termination is by default autodetected from input, and the first output - // record is produced after the first is read ... except when there *are* no inputs, - // e.g. with 'mlr seqgen' or 'mlr put' with (perhaps looped) emit statements. For - // those cases, where there is no file input from which to autodetect, we default - // the line-termination to the platform-specific default. - pctx->auto_line_term = "\n"; // xxx default to "\r\n" on Windows - pctx->auto_line_term_detected = FALSE; -} - -// ---------------------------------------------------------------- -void context_init_from_opts(context_t* pctx, void* pvopts) { - cli_opts_t* popts = pvopts; - - pctx->nr = 0; - pctx->fnr = 0; - pctx->filenum = 0; - pctx->filename = NULL; - pctx->force_eof = 0; - - pctx->ips = popts->reader_opts.ips; - pctx->ifs = popts->reader_opts.ifs; - pctx->irs = popts->reader_opts.irs; - pctx->ops = popts->writer_opts.ops; - pctx->ofs = popts->writer_opts.ofs; - pctx->ors = popts->writer_opts.ors; - pctx->auto_line_term = "\n"; // xxx Windows default "\r\n"; libify - pctx->auto_line_term_detected = FALSE; -} - -// ---------------------------------------------------------------- -void context_set_autodetected_crlf(context_t* pctx) { - if (!pctx->auto_line_term_detected) { - pctx->auto_line_term = "\r\n"; - pctx->auto_line_term_detected = TRUE; - } -} - -void context_set_autodetected_lf(context_t* pctx) { - if (!pctx->auto_line_term_detected) { - pctx->auto_line_term = "\n"; - pctx->auto_line_term_detected = TRUE; - } -} - -void context_set_autodetected_line_term(context_t* pctx, char* line_term) { - if (!pctx->auto_line_term_detected) { - pctx->auto_line_term = line_term; - pctx->auto_line_term_detected = TRUE; - } -} - -// ---------------------------------------------------------------- -void context_print(context_t* pctx, char* indent) { - printf("%spctx at %p:\n", indent, pctx); - printf("%s nr = %lld\n", indent, pctx->nr); - printf("%s fnr = %lld\n", indent, pctx->fnr); - printf("%s filenum = %d\n", indent, pctx->filenum); - if (pctx->filename == NULL) { - printf("%s filename = null\n", indent); - } else { - printf("%s filename = \"%s\"\n", indent, pctx->filename); - } -} diff --git a/c/lib/context.h b/c/lib/context.h deleted file mode 100644 index 849938136..000000000 --- a/c/lib/context.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CONTEXT_H -#define CONTEXT_H - -// File-level context for Miller's NR, FNR, FILENAME, and FILENUM variables, as -// well as for error messages -typedef struct _context_t { - long long nr; - long long fnr; - int filenum; - char* filename; - int force_eof; // e.g. mlr head - - char* ips; - char* ifs; - char* irs; - char* ops; - char* ofs; - char* ors; - - // For autodetect between LF and CRLF line endings: the lrec reader - // (when in --auto mode) can place here the line ending which was - // encountered on the first record read. - char* auto_line_term; - int auto_line_term_detected; -} context_t; - -void context_init_from_first_file_name(context_t* pctx, char* first_file_name); -void context_init_from_opts(context_t* pctx, void* pvopts); - -void context_set_autodetected_crlf(context_t* pctx); -void context_set_autodetected_lf(context_t* pctx); -void context_set_autodetected_line_term(context_t* pctx, char* line_term); - -void context_print(context_t* pctx, char* indent); - -#endif // CONTEXT_H diff --git a/c/lib/free_flags.h b/c/lib/free_flags.h deleted file mode 100644 index d9a05fa15..000000000 --- a/c/lib/free_flags.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef FREE_FLAGS_H -#define FREE_FLAGS_H - -// For use by various data structures including slls_t and lrec_t. Some -// keys/values are dynamically allocated and should be freed the container's -// destructor, and some should not. Examples of the former include strduped -// keys/values; examples of the latter include data from string literals, or -// from mmapped file-input data. - -#define NO_FREE 0x00 -#define FREE_ENTRY_KEY 0x40 -#define FREE_ENTRY_VALUE 0x04 - -#endif // FREE_FLAGS_H diff --git a/c/lib/minunit.h b/c/lib/minunit.h deleted file mode 100644 index a380403e8..000000000 --- a/c/lib/minunit.h +++ /dev/null @@ -1,33 +0,0 @@ -// ================================================================ -// http://www.jera.com/techinfo/jtns/jtn002.html -// MinUnit license: -// "You may use the code in this tech note for any purpose, with the understanding that it comes with NO WARRANTY." -// ================================================================ - -#ifndef MINUNIT_H -#define MINUNIT_H - -#define MU_STRINGIFY_2(x) #x -#define MU_STRINGIFY_1(x) MU_STRINGIFY_2(x) - -#define mu_assert_lf(test) mu_assert(__FILE__ " line " MU_STRINGIFY_1(__LINE__), test) - -#define mu_assert(message, test) do { assertions_run++; if (!(test)) {assertions_failed++; return message;} } while (0) - -#define mu_run_test(test) do { \ - char *message = test(); \ - tests_run++; \ - if (message) { \ - tests_failed++; \ - printf("Failure at %s\n", message); \ - printf("from file %s line %d\n", __FILE__, __LINE__); \ - return message; \ - } \ -} while (0) - -extern int tests_run; -extern int tests_failed; -extern int assertions_run; -extern int assertions_failed; - -#endif // MINUNIT_H diff --git a/c/lib/mlr_arch.c b/c/lib/mlr_arch.c deleted file mode 100644 index a2c2c1ede..000000000 --- a/c/lib/mlr_arch.c +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include -#include "mlr_globals.h" -#include "mlr_arch.h" -#include "mlrutil.h" -#include "netbsd_strptime.h" -#include "nlnet_timegm.h" - -// For some Linux distros, in spite of including time.h: -char *strptime(const char *s, const char *format, struct tm *ptm); - -// ---------------------------------------------------------------- -int mlr_arch_setenv(const char *name, const char *value) { -#ifdef MLR_ON_MSYS2 - fprintf(stderr, "%s: setenv is not supported on this architecture.\n", MLR_GLOBALS.bargv0); - exit(1); -#else - return setenv(name, value, 1 /*overwrite*/); -#endif -} - -// ---------------------------------------------------------------- -int mlr_arch_unsetenv(const char *name) { -#ifdef MLR_ON_MSYS2 - fprintf(stderr, "%s: unsetenv is not supported on this architecture.\n", MLR_GLOBALS.bargv0); - exit(1); -#else - return unsetenv(name); -#endif -} - -// ---------------------------------------------------------------- -char *mlr_arch_strptime(const char *s, const char *format, struct tm *ptm) { -#ifdef MLR_ON_MSYS2 - return netbsd_strptime(s, format, ptm); -#else - return strptime(s, format, ptm); -#endif -} - -// ---------------------------------------------------------------- -// See the GNU timegm manpage -- this is what it does. -time_t mlr_arch_timegmlocal(struct tm* ptm, timezone_handling_t timezone_handling) { -#ifdef MLR_ON_MSYS2 - // Crap, we're offering limited Windows support :( - if (timezone_handling != TIMEZONE_HANDLING_GMT) { - fprintf(stderr, "%s: Local timezone is not handled for output.\n", - MLR_GLOBALS.bargv0); - exit(1); - } - return nlnet_timegm(ptm); -#else - time_t ret; - - if (timezone_handling == TIMEZONE_HANDLING_GMT) { - char* tz = getenv("TZ"); - mlr_arch_setenv("TZ", "GMT0"); - tzset(); - ret = mktime(ptm); - if (tz) { - mlr_arch_setenv("TZ", tz); - } else { - mlr_arch_unsetenv("TZ"); - } - tzset(); - } else { - // Tell mktime to lookup DST status in the timezone db. - ptm->tm_isdst = -1; - - ret = mktime(ptm); - } - - return ret; -#endif -} diff --git a/c/lib/mlr_arch.h b/c/lib/mlr_arch.h deleted file mode 100644 index 18ebcd966..000000000 --- a/c/lib/mlr_arch.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef MLR_ARCH_H -#define MLR_ARCH_H - -#include -#include -#include "mlrtimezone.h" - -// ================================================================ -// Miller compiles without ifdefs on Linux, BSDs, and MacOSX -- but -// the situation is more complex for Windows (using MSYS2 in particular). -// The idea of mlr_arch is to confine all platform-specific code here. -// ================================================================ - -#undef MLR_ON_MSYS2 // sedded to #define in appveyor setup - -// ---------------------------------------------------------------- -// Miller is single-threaded and the file-locking in getc is simply an unneeded -// performance hit, so we intentionally call getc_unlocked(). But for MSYS2 -// (Windows port), there exists no such. -#ifdef MLR_ON_MSYS2 -#define mlr_arch_getc(stream) getc(stream) -#else -#define mlr_arch_getc(stream) getc_unlocked(stream) -#endif - -// ---------------------------------------------------------------- -int mlr_arch_setenv(const char *name, const char *value); -int mlr_arch_unsetenv(const char *name); - -char *mlr_arch_strptime(const char *s, const char *format, struct tm *ptm); -time_t mlr_arch_timegmlocal(struct tm* ptm, timezone_handling_t timezone_handling); - -#endif // MLR_ARCH_H diff --git a/c/lib/mlr_globals.c b/c/lib/mlr_globals.c deleted file mode 100644 index 8203cfa37..000000000 --- a/c/lib/mlr_globals.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#include "lib/mlr_globals.h" - -mlr_globals_t MLR_GLOBALS = { .bargv0 = "mlr-globals-uninit", .ofmt = NULL }; -void mlr_global_init(char* argv0, char* ofmt) { - MLR_GLOBALS.bargv0 = basename(argv0); - MLR_GLOBALS.ofmt = ofmt; -} diff --git a/c/lib/mlr_globals.h b/c/lib/mlr_globals.h deleted file mode 100644 index 9eae004b6..000000000 --- a/c/lib/mlr_globals.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef MLR_GLOBALS_H -#define MLR_GLOBALS_H - -typedef struct _mlr_globals_t { - char* bargv0; // basename of argv0 - char* ofmt; -} mlr_globals_t; -extern mlr_globals_t MLR_GLOBALS; -void mlr_global_init(char* argv0, char* ofmt); - -#endif // MLR_GLOBALS_H diff --git a/c/lib/mlr_test_util.c b/c/lib/mlr_test_util.c deleted file mode 100644 index 84bd329d7..000000000 --- a/c/lib/mlr_test_util.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" - -// ---------------------------------------------------------------- -char* write_temp_file_or_die(char* contents) { - char* tmpdir = getenv("TMPDIR"); - if (tmpdir == NULL) { - tmpdir = "/tmp"; - } - // This template will be overwritten by mkstemp - char* path = mlr_paste_2_strings(tmpdir, "/mlr.ut.XXXXXXXX"); - int fd = mkstemp(path); - FILE* fp = fdopen(fd, "w"); - int len = strlen(contents); - int rc = fwrite(contents, 1, len, fp); - if (rc != len) { - perror("fwrite"); - fprintf(stderr, "%s: fwrite (%d) to \"%s\" failed.\n", - MLR_GLOBALS.bargv0, len, path); - exit(1); - } - fclose(fp); - return path; -} - -// ---------------------------------------------------------------- -void unlink_file_or_die(char* path) { - int rc = unlink(path); - if (rc != 0) { - perror("unlink"); - fprintf(stderr, "unlink of \"%s\" failed.\n", path); - exit(1); - } -} diff --git a/c/lib/mlr_test_util.h b/c/lib/mlr_test_util.h deleted file mode 100644 index f7fd9b222..000000000 --- a/c/lib/mlr_test_util.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef MLR_TEST_UTIL_H -#define MLR_TEST_UTIL_H - -// Returns the name of the temp file -char* write_temp_file_or_die(char* contents); - -void unlink_file_or_die(char* path); - -#endif // MLR_TEST_UTIL_H diff --git a/c/lib/mlrdatetime.c b/c/lib/mlrdatetime.c deleted file mode 100644 index bccea7519..000000000 --- a/c/lib/mlrdatetime.c +++ /dev/null @@ -1,287 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlrdatetime.h" -#include "lib/string_builder.h" - -// NZ since this isn't counting the null terminator. -#define NZBUFLEN 63 - -// ---------------------------------------------------------------- -// seconds since the epoch -double get_systime() { - struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; - (void)gettimeofday(&tv, NULL); - return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6; -} - -// ---------------------------------------------------------------- -// The essential idea is that we use the library function gmtime to get a struct tm, then strftime -// to produce a formatted string. The only complication is that we support "%1S" through "%9S" for -// formatting the seconds with a desired number of decimal places. - -char* mlr_alloc_time_string_from_seconds(double seconds_since_the_epoch, char* format_string, - timezone_handling_t timezone_handling) -{ - - // 1. Split out the integer seconds since the epoch, which the stdlib can handle, and - // the fractional part, which it cannot. - time_t iseconds = (time_t) seconds_since_the_epoch; - double fracsec = seconds_since_the_epoch - iseconds; - - struct tm tm; - switch(timezone_handling) { - case TIMEZONE_HANDLING_GMT: - tm = *gmtime(&iseconds); // No gmtime_r on Windows so just use gmtime. - break; - case TIMEZONE_HANDLING_LOCAL: - tm = *localtime(&iseconds); // No gmtime_r on Windows so just use gmtime. - break; - default: - fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - break; - } - - // 2. See if "%nS" (for n in 1..9) is a substring of the format string. - char* middle_nS_format = NULL; - char* right_subformat = NULL; - int n = 0; // Save off n for round-up handling below. - for (char* p = format_string; *p; p++) { - // We can't use strstr since we're searching for a pattern, and regexes are overkill. - // Here we rely on left-to-right evaluation of the boolean expressions, with non-evaluation - // of a subexpression if a subexpression to its left is false (this keeps us from reading - // past end of input string). - if (p[0] == '%' && p[1] >= '1' && p[1] <= '9' && p[2] == 'S') { - middle_nS_format = p; - right_subformat = &p[3]; - n = p[1] - '0'; - break; - } - } - - // 3. If "%nS" (for n in 1..9) is not a substring of the format string, just use strftime. - if (middle_nS_format == NULL) { - char* output_string = mlr_malloc_or_die(NZBUFLEN+1); - int written_length = strftime(output_string, NZBUFLEN, format_string, &tm); - if (written_length > NZBUFLEN || written_length == 0) { - fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", - MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - - return output_string; - } - - // Now we know "%nS" (for n in 1..9) is a substring of the format string. Idea is to - // copy the subformats to the left and right of the %nS part and format them both using - // strftime, and format the middle part ourselves using sprintf. Then concatenate all - // those pieces. - - // 5. Find the left-of-%nS subformat, and format the input using that. - int left_subformat_length = middle_nS_format - format_string; - char* left_subformat = mlr_malloc_or_die(left_subformat_length + 1); - memcpy(left_subformat, format_string, left_subformat_length); - left_subformat[left_subformat_length] = 0; - - char left_formatted[NZBUFLEN+1]; - if (*left_subformat == 0) { - // There's nothing to the left of %nS. strftime will error on empty format string, so we can - // just map empty format to empty result ourselves. - *left_formatted = 0; - } else { - int written_length = strftime(left_formatted, NZBUFLEN, left_subformat, &tm); - if (written_length > NZBUFLEN || written_length == 0) { - fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", - MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - } - free(left_subformat); - - // 6. There are two parts in the middle: the integer part which strftime can populate - // from the struct tm, using %S format, and the fractional-seconds part which we sprintf. - // First do the int part. - char middle_int_formatted[NZBUFLEN+1]; - char* middle_int_format = "%S"; - int written_length = strftime(middle_int_formatted, NZBUFLEN, middle_int_format, &tm); - if (written_length > NZBUFLEN || written_length == 0) { - fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", - MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - - // 7. Do the fractional-seconds part. One key point is that sprintf always writes a leading zero, - // e.g. .123456 becomes "0.123456". We'll take off the leading zero later. - char middle_sprintf_format[] = "%.xlf"; - char middle_fractional_formatted[16]; - // "%6S" maps to "%.6lf" and so on. We found the middle_nS_format by searching for "%nS" for - // n in 1..9 so sprintf-format subscript 2 is the same as strftime format subscript 1. - middle_sprintf_format[2] = middle_nS_format[1]; - sprintf(middle_fractional_formatted, middle_sprintf_format, fracsec); - - // 8. Format the right-of-%nS part, also using strftime. - char right_formatted[NZBUFLEN]; - if (*right_subformat == 0) { - // There's nothing to the right of %nS. strftime will error on empty format string, so we can - // just map empty format to empty result ourselves. - *right_formatted = 0; - } else { - int written_length = strftime(right_formatted, NZBUFLEN, right_subformat, &tm); - if (written_length > NZBUFLEN || written_length == 0) { - fprintf(stderr, "%s: could not strftime(%lf, \"%s\"). See \"%s --help-function strftime\".\n", - MLR_GLOBALS.bargv0, seconds_since_the_epoch, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - } - - // 9. Concatenate the output. For string_builder, the size argument is just an initial size; - // it can realloc beyond that initial estimate if necessary. - string_builder_t* psb = sb_alloc(NZBUFLEN+1); - sb_append_string(psb, left_formatted); - sb_append_string(psb, middle_int_formatted); - // When the input has fractional seconds like 0.999999 and the format is shorter than that, - // e.g. "%3S", there can be round-up to 1.0 on the sprintf. - if (middle_fractional_formatted[0] == '1') { - sb_append_char(psb, '.'); - for (int i = 0; i < n; i++) - sb_append_char(psb, '9'); - } else if (middle_fractional_formatted[0] == '0') { - sb_append_string(psb, &middle_fractional_formatted[1]); - } else { - MLR_INTERNAL_CODING_ERROR(); - } - sb_append_string(psb, right_formatted); - char* output_string = sb_finish(psb); - sb_free(psb); - - return output_string; -} - -// ---------------------------------------------------------------- -// Miller supports fractional seconds in the input string, but strptime doesn't. So we have -// to play some tricks, inspired in part by some ideas on StackOverflow. Special shout-out -// to @tinkerware on Github for the push in the right direction! :) - -double mlr_seconds_from_time_string(char* time_string, char* format_string, - timezone_handling_t timezone_handling) -{ - struct tm tm; - - // 1. Just try strptime on the input as-is and return quickly if it's OK. - memset(&tm, 0, sizeof(tm)); - char* strptime_retval = mlr_arch_strptime(time_string, format_string, &tm); - if (strptime_retval != NULL) { - if (*strptime_retval != 0) { // Extraneous stuff in the input not matching the format - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - - // printf("TIME_STRING %s\n", time_string); - // printf("FORMAT_STRING %s\n", time_string); - // printf("tm_year =%d\n", tm.tm_year); - // printf("tm_mon =%d\n", tm.tm_mon); - // printf("tm_mday =%d\n", tm.tm_mday); - // printf("tm_wday =%d\n", tm.tm_wday); - // printf("tm_yday =%d\n", tm.tm_yday); - // printf("tm_hour =%d\n", tm.tm_hour); - // printf("tm_min =%d\n", tm.tm_min); - // printf("tm_sec =%d\n", tm.tm_sec); - // printf("tm_isdst =%d\n", tm.tm_isdst); - - return (double)mlr_arch_timegmlocal(&tm, timezone_handling); - } - - // 2. Now either there's floating-point seconds in the input, or something else is wrong. - // First look for "%S" in the format string, for two reasons: (a) if there isn't "%S" - // then something else is wrong; (b) if there is, we'll need that to split the format - // string. - char* pS = strstr(format_string, "%S"); - if (pS == NULL) { - // strptime failure couldn't have been because of floating-point-seconds stuff. No - // reason to try any harder. - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - - // There's "%S" in the format string, and the input has fractional seconds matching that - // and no other problems, or there's something else wrong. - // - // Running example as we work through the rest: - // * Input is "2017-04-09T00:51:09.123456 TZBLAHBLAH" - // * Format is "%Y-%m-%dT%H:%M:%S TZBLAHBLAH" - - // 3. Copy the format up to the %S but with nothing else after. This is temporary to help us locate - // the fractional-seconds part of the input string. - // Example temporary format: "%Y-%m-%dT%H:%M:%S" - - int truncated_format_string_length = pS - format_string + 2; // 2 for the "%S" - char* truncated_format_string = mlr_malloc_or_die(truncated_format_string_length + 1); - memcpy(truncated_format_string, format_string, truncated_format_string_length); - truncated_format_string[truncated_format_string_length] = 0; - - // 4. strptime using that truncated format and ignore the tm. Only look at the string return value. - // Example return value: ".123456 TZBLAHBLAH" - strptime_retval = mlr_arch_strptime(time_string, truncated_format_string, &tm); - if (strptime_retval == NULL) { - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - free(truncated_format_string); - - // 5. strtod the return value to find the fractional-seconds part, and whatever's after. - // Example fractional-seconds part: ".123456" - // Example stuff after: " TZBLAHBLAH" - char* stuff_after = NULL; - double fractional_seconds; - if (strptime_retval[0] == '.' && !isdigit(strptime_retval[1])) { - // If they had just a decimal point with no digits after, e.g. "10." seconds rather than "10.0", - // that's OK, but strtod won't parse that as double. - fractional_seconds = 0.0; - stuff_after = &strptime_retval[1]; - } else { - fractional_seconds = strtod(strptime_retval, &stuff_after); - if (stuff_after == strptime_retval) { - // Non-parseable - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - } - - // 6. Make a copy of the input string with the fractional seconds elided. - // Example: "2017-04-09T00:51:09 TZBLAHBLAH" - char* elided_fraction_input = mlr_malloc_or_die(strlen(time_string) + 1); - int input_length_up_to_fractional_seconds = strptime_retval - time_string; - memcpy(elided_fraction_input, time_string, input_length_up_to_fractional_seconds); - strcpy(&elided_fraction_input[input_length_up_to_fractional_seconds], stuff_after); - - // 7. strptime the elided-fraction input string using the original format string. (This is like - // the input never had fractional seconds in the first place.) Get the tm parsed from that. - memset(&tm, 0, sizeof(tm)); - strptime_retval = mlr_arch_strptime(elided_fraction_input, format_string, &tm); - if (strptime_retval == NULL) { - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - if (*strptime_retval != 0) { // Extraneous stuff in the input not matching the format - fprintf(stderr, "%s: could not strptime(\"%s\", \"%s\"). See \"%s --help-function strptime\".\n", - MLR_GLOBALS.bargv0, time_string, format_string, MLR_GLOBALS.bargv0); - exit(1); - } - free(elided_fraction_input); - - // 8. Convert the tm to a time_t (seconds since the epoch) and then add the fractional seconds. - return mlr_arch_timegmlocal(&tm, timezone_handling) + fractional_seconds; -} diff --git a/c/lib/mlrdatetime.h b/c/lib/mlrdatetime.h deleted file mode 100644 index 9ef8f0288..000000000 --- a/c/lib/mlrdatetime.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef MLRDATETIME_H -#define MLRDATETIME_H - -#include -#include -#include -#include -#include "mlrtimezone.h" - -// Seconds since the epoch. -double get_systime(); - -// These use the gmtime/timegm and strftime/strptime standard-library functions, with the addition -// of support for floating-point seconds since the epoch. -char* mlr_alloc_time_string_from_seconds(double seconds_since_the_epoch, char* format, - timezone_handling_t timezone_handling); -double mlr_seconds_from_time_string(char* string, char* format, - timezone_handling_t timezone_handling); - -#endif // MLRDATETIME_H diff --git a/c/lib/mlrescape.c b/c/lib/mlrescape.c deleted file mode 100644 index debbc057b..000000000 --- a/c/lib/mlrescape.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "lib/mlrescape.h" -#include "lib/mlrutil.h" -#include "lib/string_builder.h" - -// Avoids shell-injection cases by replacing single-quote with backslash single-quote, -// then wrapping the entire result in initial and final single-quote. -char* alloc_file_name_escaped_for_popen(char* filename) { - string_builder_t* psb = sb_alloc(strlen(filename)); - - sb_append_char(psb, '\''); - for (char* p = filename; *p; p++) { - char c = *p; - if (c == '\'') { - sb_append_char(psb, '\''); - sb_append_char(psb, '\\'); - sb_append_char(psb, '\''); - sb_append_char(psb, '\''); - } else { - sb_append_char(psb, c); - } - } - - sb_append_char(psb, '\''); - char* rv = sb_finish(psb); - sb_free(psb); - return rv; -} diff --git a/c/lib/mlrescape.h b/c/lib/mlrescape.h deleted file mode 100644 index f61fffe5a..000000000 --- a/c/lib/mlrescape.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef MLRESCAPE_H -#define MLRESCAPE_H - -// Avoids shell-injection cases by replacing single-quote with backslash single-quote, -// then wrapping the entire result in initial and final single-quote. -char* alloc_file_name_escaped_for_popen(char* filename); - -#endif // MLRESCAPE_H diff --git a/c/lib/mlrmath.c b/c/lib/mlrmath.c deleted file mode 100644 index b88e80c62..000000000 --- a/c/lib/mlrmath.c +++ /dev/null @@ -1,379 +0,0 @@ -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlrmath.h" -#include "lib/mlr_globals.h" - -#define JACOBI_TOLERANCE 1e-12 -#define JACOBI_MAXITER 20 - -static void matmul2(double C[2][2], double A[2][2], double B[2][2]); -static void matmul2t(double C[2][2], double A[2][2], double B[2][2]); - -// ---------------------------------------------------------------- -// Jacobi real-symmetric eigensolver. Loosely adapted from Numerical Recipes. -// -// Note: this is coded for n=2 (to implement PCA linear regression on 2 -// variables) but the algorithm is quite general. Changing from 2 to n is a -// matter of updating the top and bottom of the function: function signature to -// take double** matrix, double* eigenvector_1, double* eigenvector_2, and n; -// create copy-matrix and make-identity matrix functions; free temp matrices at -// the end; etc. - -void mlr_get_real_symmetric_eigensystem( - double matrix[2][2], // Input - double *peigenvalue_1, // Output: dominant eigenvalue - double *peigenvalue_2, // Output: less-dominant eigenvalue - double eigenvector_1[2], // Output: corresponding to dominant eigenvalue - double eigenvector_2[2]) // Output: corresponding to less-dominant eigenvalue -{ - double L[2][2] = { - { matrix[0][0], matrix[0][1] }, - { matrix[1][0], matrix[1][1] } - }; - double V[2][2] = { - { 1.0, 0.0 }, - { 0.0, 1.0 }, - }; - double P[2][2], PT_A[2][2]; - int n = 2; - - int found = 0; - for (int iter = 0; iter < JACOBI_MAXITER; iter++) { - double sum = 0.0; - for (int i = 1; i < n; i++) - for (int j = 0; j < i; j++) - sum += fabs(L[i][j]); - if (fabs(sum*sum) < JACOBI_TOLERANCE) { - found = 1; - break; - } - - for (int p = 0; p < n; p++) { - for (int q = p+1; q < n; q++) { - double numer = L[p][p] - L[q][q]; - double denom = L[p][q] + L[q][p]; - if (fabs(denom) < JACOBI_TOLERANCE) - continue; - double theta = numer / denom; - int sign_theta = (theta < 0) ? -1 : 1; - double t = sign_theta / (fabs(theta) + sqrt(theta*theta + 1)); - double c = 1.0 / sqrt(t*t + 1); - double s = t * c; - - for (int pi = 0; pi < n; pi++) - for (int pj = 0; pj < n; pj++) - P[pi][pj] = (pi == pj) ? 1.0 : 0.0; - P[p][p] = c; - P[p][q] = -s; - P[q][p] = s; - P[q][q] = c; - - // L = P.transpose() * L * P - // V = V * P - matmul2t(PT_A, P, L); - matmul2(L, PT_A, P); - matmul2(V, V, P); - } - } - } - - if (!found) { - fprintf(stderr, - "Jacobi eigensolver: max iterations (%d) exceeded. Non-symmetric input?\n", JACOBI_MAXITER); - exit(1); - } - - double eigenvalue_1 = L[0][0]; - double eigenvalue_2 = L[1][1]; - double abs1 = fabs(eigenvalue_1); - double abs2 = fabs(eigenvalue_2); - if (abs1 > abs2) { - *peigenvalue_1 = eigenvalue_1; - *peigenvalue_2 = eigenvalue_2; - eigenvector_1[0] = V[0][0]; // Column 0 of V - eigenvector_1[1] = V[1][0]; - eigenvector_2[0] = V[0][1]; // Column 1 of V - eigenvector_2[1] = V[1][1]; - } else { - *peigenvalue_1 = eigenvalue_2; - *peigenvalue_2 = eigenvalue_1; - eigenvector_1[0] = V[0][1]; - eigenvector_1[1] = V[1][1]; - eigenvector_2[0] = V[0][0]; - eigenvector_2[1] = V[1][0]; - } -} - -static void matmul2( - double C[2][2], // Output - double A[2][2], // Input - double B[2][2]) // Input -{ - double T[2][2]; - int n = 2; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - double sum = 0.0; - for (int k = 0; k < n; k++) - sum += A[i][k] * B[k][j]; - T[i][j] = sum; - } - } - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - C[i][j] = T[i][j]; -} - -static void matmul2t( - double C[2][2], // Output - double A[2][2], // Input - double B[2][2]) // Input -{ - double T[2][2]; - int n = 2; - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - double sum = 0.0; - for (int k = 0; k < n; k++) - sum += A[k][i] * B[k][j]; - T[i][j] = sum; - } - } - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - C[i][j] = T[i][j]; -} - -// ---------------------------------------------------------------- -// Normal cumulative distribution function, expressed in terms of erfc library -// function (which is awkward, but exists). -double qnorm(double x) { - return 0.5 * erfc(-x * M_SQRT1_2); -} - -// ---------------------------------------------------------------- -// This is a tangent-following method not unlike Newton-Raphson: -// * We can compute qnorm(y) = integral from -infinity to y of (1/sqrt(2pi)) exp(-t^2/2) dt. -// * We can compute derivative of qnorm(y) = (1/sqrt(2pi)) exp(-y^2/2). -// * We cannot explicitly compute invqnorm(y). -// * If dx/dy = (1/sqrt(2pi)) exp(-y^2/2) then dy/dx = sqrt(2pi) exp(y^2/2). -// -// This means we *can* compute the derivative of invqnorm even though we -// can't compute the function itself. So the essence of the method is to -// follow the tangent line to form successive approximations: we have known function input x -// and unknown function output y and initial guess y0. At each step we find the intersection -// of the tangent line at y_n with the vertical line at x, to find y_{n+1}. Specificall: -// -// * Even though we can't compute y = q^-1(x) we can compute x = q(y). -// * Start with initial guess for y (y0 = 0.0 or y0 = x both are OK). -// * Find x = q(y). Since q (and therefore q^-1) are 1-1, we're done if qnorm(invqnorm(x)) is small. -// * Else iterate: using point-slope form, (y_{n+1} - y_n) / (x_{n+1} - x_n) = m = sqrt(2pi) exp(y_n^2/2). -// Here x_2 = x (the input) and x_1 = q(y_1). -// * Solve for y_{n+1} and repeat. - -#define INVQNORM_TOL 1e-9 -#define INVQNORM_MAXITER 30 - -double invqnorm(double x) { - // Initial approximation is linear. Starting with y0 = 0.0 works just as well. - double y0 = x - 0.5; - if (x <= 0.0) - return 0.0; - if (x >= 1.0) - return 0.0; - - double y = y0; - int niter = 0; - while (1) { - double backx = qnorm(y); - double err = fabs(x - backx); - if (err < INVQNORM_TOL) - break; - if (niter > INVQNORM_MAXITER) { - fprintf(stderr, "%s: internal coding error: max iterations %d exceeded in invqnorm.\n", - MLR_GLOBALS.bargv0, INVQNORM_MAXITER); - exit(1); - } - double m = sqrt(2*M_PI) * exp(y*y/2.0); - double delta_y = m * (x - backx); - - y += delta_y; - niter++; - - } - return y; -} - -// ================================================================ -// Logisitic regression -// -// Real-valued x_0 .. x_{N-1} -// 0/1-valued y_0 .. y_{N-1} -// Model p(x_i == 1) as -// p(x, m, b) = 1 / (1 + exp(-m*x-b) -// which is the same as -// log(p/(1-p)) = m*x + b -// then -// p(x, m, b) = 1 / (1 + exp(-m*x-b) -// = exp(m*x+b) / (1 + exp(m*x+b) -// and -// 1-p = exp(-m*x-b) / (1 + exp(-m*x-b) -// = 1 / (1 + exp(m*x+b) -// Note for reference just below that -// dp/dm = -1 / [1 + exp(-m*x-b)]**2 * (-x) * exp(-m*x-b) -// = [x exp(-m*x-b)) ] / [1 + exp(-m*x-b)]**2 -// = x * p * (1-p) -// and -// dp/db = -1 / [1 + exp(-m*x-b)]**2 * (-1) * exp(-m*x-b) -// = [exp(-m*x-b)) ] / [1 + exp(-m*x-b)]**2 -// = p * (1-p) -// Write p_i for p(x_i, m, b) -// -// Maximum-likelihood equation: -// L(m, b) = prod_{i=0}^{N-1} [ p_i**y_i * (1-p_i)**(1-y_i) ] -// -// Log-likelihood equation: -// ell(m, b) = sum{i=0}^{N-1} [ y_i log(p_i) + (1-y_i) log(1-p_i) ] -// = sum{i=0}^{N-1} [ log(1-p_i) + y_i log(p_i/(1-p_i)) ] -// = sum{i=0}^{N-1} [ log(1-p_i) + y_i*(m*x_i+b) ] -// Differentiate with respect to parameters: -// -// d ell/dm = sum{i=0}^{N-1} [ -1/(1-p_i) dp_i/dm + x_i*y_i ] -// = sum{i=0}^{N-1} [ -1/(1-p_i) x_i*p_i*(1-p_i) + x_i*y_i ] -// = sum{i=0}^{N-1} [ x_i(y_i-p_i) ] -// -// d ell/db = sum{i=0}^{N-1} [ -1/(1-p_i) dp_i/db + y_i ] -// = sum{i=0}^{N-1} [ -1/(1-p_i) p_i*(1-p_i) + y_i ] -// = sum{i=0}^{N-1} [ y_i - p_i ] -// -// -// d2ell/dm2 = sum{i=0}^{N-1} [ -x_i dp_i/dm ] -// = sum{i=0}^{N-1} [ -x_i**2 * p_i * (1-p_i) ] -// -// d2ell/dmdb = sum{i=0}^{N-1} [ -x_i dp_i/db ] -// = sum{i=0}^{N-1} [ -x_i * p_i * (1-p_i) ] -// -// d2ell/dbdm = sum{i=0}^{N-1} [ -dp_i/dm ] -// = sum{i=0}^{N-1} [ -x_i * p_i * (1-p_i) ] -// -// d2ell/db2 = sum{i=0}^{N-1} [ -dp_i/db ] -// = sum{i=0}^{N-1} [ -p_i * (1-p_i) ] -// -// Newton-Raphson to minimize ell(m, b): -// * Pick m0, b0 -// * [m_{j+1], b_{j+1}] = H^{-1} grad ell(m_j, b_j) -// * grad ell = -// [ d ell/dm ] -// [ d ell/db ] -// * H = Hessian of ell = Jacobian of grad ell = -// [ d2ell/dm2 d2ell/dmdb ] -// [ d2ell/dmdb d2ell/db2 ] - -// p(x,m,b) for logistic regression: -static double lrp(double x, double m, double b) { - return 1.0 / (1.0 + exp(-m*x-b)); -} - -// 1 - p(x,m,b) for logistic regression: -static double lrq(double x, double m, double b) { - return 1.0 / (1.0 + exp(m*x+b)); -} - -// Supporting routine for mlr_logistic_regression(): -static void mlr_logistic_regression_aux(double* xs, double* ys, int n, double* pm, double* pb, - double m0, double b0, double tol, int maxits) -{ - int its = 0; - int done = FALSE; - double m = m0; - double b = b0; - - while (!done) { - // Compute derivatives - double dldm = 0.0; - double dldb = 0.0; - double d2ldm2 = 0.0; - double d2ldmdb = 0.0; - double d2ldb2 = 0.0; - double ell0 = 0.0; - - for (int i = 0; i < n; i++) { - double xi = xs[i]; - double yi = ys[i]; - double pi = lrp(xi, m0, b0); - double qi = lrq(xi, m0, b0); - dldm += xi*(yi - pi); - dldb += yi - pi; - double piqi = pi * qi; - double xipiqi = xi*piqi; - double xi2piqi = xi*xipiqi; - d2ldm2 -= xi2piqi; - d2ldmdb -= xipiqi; - d2ldb2 -= piqi; - ell0 += log(qi) + yi * (m0 * xi + b0); - } - - - // Form the Hessian - double ha = d2ldm2; - double hb = d2ldmdb; - double hc = d2ldmdb; - double hd = d2ldb2; - - // Invert the Hessian - double D = ha*hd - hb*hc; - double Hinva = hd/D; - double Hinvb = -hb/D; - double Hinvc = -hc/D; - double Hinvd = ha/D; - - // Compute H^-1 times grad ell - double Hinvgradm = Hinva*dldm + Hinvb*dldb; - double Hinvgradb = Hinvc*dldm + Hinvd*dldb; - - // Update [m,b] - m = m0 - Hinvgradm; - b = b0 - Hinvgradb; - - double ell = 0.0; - for (int i = 0; i < n; i++) { - double xi = xs[i]; - double yi = ys[i]; - double qi = lrq(xi, m, b); - ell += log(qi) + yi * (m0 * xi + b0); - } - - // Check for convergence - double dell = fmax(ell, ell0); - double err = (dell == 0.0) ? 0.0 : fabs(ell - ell0) / dell; - -#if 0 - printf("its=%d,m=%e,b=%e,dm=%e,db=%e,ell=%e\n", its, m0, b0, -Hinvgradm, -Hinvgradb, ell); -#endif - - if (err < tol) - done = TRUE; - if (++its > maxits) { - fprintf(stderr, - "mlr_logistic_regression: Newton-Raphson convergence failed after %d iterations. m=%e, b=%e.\n", - its, m, b); - exit(1); - } - - m0 = m; - b0 = b; - } - - *pm = m; - *pb = b; -} - -void mlr_logistic_regression(double* xs, double* ys, int n, double* pm, double* pb) { - double m0 = -0.001; - double b0 = 0.002; - double tol = 1e-9; - int maxits = 100; - mlr_logistic_regression_aux(xs, ys, n, pm, pb, m0, b0, tol, maxits); -} diff --git a/c/lib/mlrmath.h b/c/lib/mlrmath.h deleted file mode 100644 index c4e2569de..000000000 --- a/c/lib/mlrmath.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef MLRMATH_H -#define MLRMATH_H - -void mlr_get_real_symmetric_eigensystem( - double matrix[2][2], // Input - double* peigenvalue_1, // Output: dominant eigenvalue - double* peigenvalue_2, // Output: less-dominant eigenvalue - double eigenvector_1[2], // Output: corresponding to dominant eigenvalue - double eigenvector_2[2]); // Output: corresponding to less-dominant eigenvalue - -double qnorm(double x); - -double invqnorm(double x); - -void mlr_logistic_regression(double* xs, double* ys, int n, double* pm, double* pb); - -#endif // MLRMATH_H diff --git a/c/lib/mlrregex.c b/c/lib/mlrregex.c deleted file mode 100644 index 21ae2f83e..000000000 --- a/c/lib/mlrregex.c +++ /dev/null @@ -1,321 +0,0 @@ -#include -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mlr_globals.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -// Succeeds or aborts the process. cflag REG_EXTENDED is already included. -// -// Reason for the double-backslashing routine: Miller DSL literals are unbackslashed, e.g. the -// two-character sequence "\t" is converted to a tab character, and users need to type "\\t" to get -// a backslash followed by a t. Well and good, but the system regex library handles backslashes not -// quite as I want. Namely, without double-backslashing, -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' -// -// (note: not echo -e, but just plain echo) outputs -// -// a\TABb -// -// while -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\\\t","TAB")' -// -// outputs -// -// aTABb -// -// Using double-backslashing, backslashes can be escaped as the regex library requires, before I call regcomp: -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' -// -// outputs -// -// aTABb -// -// as desired. - -regex_t* regcomp_or_die(regex_t* pregex, char* regex_string, int cflags) { - cflags |= REG_EXTENDED; - char* doubly_backslashed = mlr_alloc_double_backslash(regex_string); - int rc = regcomp(pregex, doubly_backslashed, cflags); - free(doubly_backslashed); - if (rc != 0) { - size_t nbytes = regerror(rc, pregex, NULL, 0); - char* errbuf = malloc(nbytes); - (void)regerror(rc, pregex, errbuf, nbytes); - fprintf(stderr, "%s: could not compile regex \"%s\" : %s\n", - MLR_GLOBALS.bargv0, regex_string, errbuf); - exit(1); - } - return pregex; -} - -// Always uses cflags with REG_EXTENDED. -// If the regex_string is of the form a.*b, compiles it using cflags without REG_ICASE. -// If the regex_string is of the form "a.*b", compiles a.*b using cflags without REG_ICASE. -// If the regex_string is of the form "a.*b"i, compiles a.*b using cflags with REG_ICASE. -regex_t* regcomp_or_die_quoted(regex_t* pregex, char* orig_regex_string, int cflags) { - cflags |= REG_EXTENDED; - if (string_starts_with(orig_regex_string, "\"")) { - char* regex_string = mlr_strdup_or_die(orig_regex_string); - int len = 0; - if (string_ends_with(regex_string, "\"", &len)) { - regex_string[len-1] = 0; - } else if (string_ends_with(regex_string, "\"i", &len)) { - regex_string[len-2] = 0; - cflags |= REG_ICASE; - } else { - fprintf(stderr, "%s: imbalanced double-quote in regex [%s].\n", - MLR_GLOBALS.bargv0, regex_string); - exit(1); - } - regcomp_or_die(pregex, regex_string+1, cflags); - free(regex_string); - } else { - regcomp_or_die(pregex, orig_regex_string, cflags); - } - return pregex; -} - -// Returns TRUE for match, FALSE for no match, and aborts the process if -// regexec returns anything else. -int regmatch_or_die(const regex_t* pregex, const char* restrict match_string, - size_t nmatchmax, regmatch_t pmatch[restrict]) -{ - int rc = regexec(pregex, match_string, nmatchmax, pmatch, 0); - if (rc == 0) { - return TRUE; - } else if (rc == REG_NOMATCH) { - return FALSE; - } else { - size_t nbytes = regerror(rc, pregex, NULL, 0); - char* errbuf = malloc(nbytes); - (void)regerror(rc, pregex, errbuf, nbytes); - printf("regexec failure: %s\n", errbuf); - exit(1); - } -} - -// Capture-group example: -// sed: $ echo '<>'|sed 's/ab\(.\)d\(..\)g/AYEBEE\1DEE\2GEE/' gives <> -// mlr: echo 'x=<>' | mlr put '$x = sub($x, "ab(.)d(..)g", "AYEBEE\1DEE\2GEE")' x=<> - -char* regex_sub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, - int* pmatched, int *pall_captured) -{ - const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match \0 - regmatch_t matches[nmatchmax]; - if (pall_captured) - *pall_captured = TRUE; - - *pmatched = regmatch_or_die(pregex, input, nmatchmax, matches); - if (!*pmatched) { - return mlr_strdup_or_die(input); - } else { - sb_append_chars(psb, input, 0, matches[0].rm_so-1); - char* p = replacement; - while (*p) { - if (p[0] == '\\' && isdigit(p[1])) { - int idx = p[1] - '0'; - regmatch_t* pmatch = &matches[idx]; - if (pmatch->rm_so == -1) { - if (pall_captured) - *pall_captured = FALSE; - // implicitly append empty string by doing nothing at all -- - // we don't need to write: - // sb_append_string(psb, ""); - } else { - sb_append_chars(psb, input, matches[idx].rm_so, matches[idx].rm_eo-1); - } - p += 2; - } else { - sb_append_char(psb, *p); - p++; - } - } - sb_append_chars(psb, input, matches[0].rm_eo, strlen(input)); - - return sb_finish(psb); - } -} - -char* regex_gsub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, - int *pmatched, int* pall_captured, char* pfree_flags) -{ - const size_t nmatchmax = 10; - regmatch_t matches[nmatchmax]; - *pmatched = FALSE; - *pall_captured = TRUE; - *pfree_flags = NO_FREE; - - int match_start = 0; - char* current_input = input; - - while (TRUE) { - int matched = regmatch_or_die(pregex, ¤t_input[match_start], nmatchmax, matches); - if (!matched) { - if (input == current_input) { - *pfree_flags = FREE_ENTRY_VALUE; - return mlr_strdup_or_die(current_input); - } else { - return current_input; - } - } - *pmatched = TRUE; - - sb_append_chars(psb, current_input, 0, match_start + matches[0].rm_so-1); - - char* p = replacement; - int len1 = psb->used_length; - while (*p) { - if (p[0] == '\\' && isdigit(p[1])) { - int idx = p[1] - '0'; - regmatch_t* pmatch = &matches[idx]; - if (pmatch->rm_so == -1) { - *pall_captured = FALSE; - // implicitly append empty string by doing nothing at all -- - // we don't need to write: - // sb_append_string(psb, ""); - } else { - sb_append_chars(psb, ¤t_input[match_start], matches[idx].rm_so, matches[idx].rm_eo-1); - } - p += 2; - } else { - sb_append_char(psb, *p); - p++; - } - } - - int replen = psb->used_length - len1; - sb_append_chars(psb, current_input, match_start + matches[0].rm_eo, strlen(current_input)); - - char* next_input = sb_finish(psb); - if (*pfree_flags & FREE_ENTRY_VALUE) - free(current_input); - current_input = next_input; - *pfree_flags = FREE_ENTRY_VALUE; - - match_start += matches[0].rm_so + replen; - } -} - -// ---------------------------------------------------------------- -char* regextract(char* input, regex_t* pregex) { - const size_t nmatchmax = 1; - regmatch_t matches[nmatchmax]; - - int matched = regmatch_or_die(pregex, input, nmatchmax, matches); - if (!matched) { - return NULL; - } - regmatch_t* pmatch = &matches[0]; - int len = pmatch->rm_eo - pmatch->rm_so; - return mlr_alloc_string_from_char_range(&input[pmatch->rm_so], len); -} - -// ---------------------------------------------------------------- -char* regextract_or_else(char* input, regex_t* pregex, char* default_value) { - const size_t nmatchmax = 1; - regmatch_t matches[nmatchmax]; - - int matched = regmatch_or_die(pregex, input, nmatchmax, matches); - if (!matched) { - return mlr_strdup_or_die(default_value); - } - regmatch_t* pmatch = &matches[0]; - int len = pmatch->rm_eo - pmatch->rm_so; - return mlr_alloc_string_from_char_range(&input[pmatch->rm_so], len); -} - -// ---------------------------------------------------------------- -// Slot 0 is the entire matched input string. -// Slots 1 and up are substring matches for parenthesized capture expressions (if any). -// Example regex "a(.*)e" with input string "abcde": slot 1 points to "bcd" and match_count = 2. -// Slot 2 has rm_so == -1. -// (If all allocated slots have matches then there is no slot with -1's.) - -// Input "abcde" -// Regex "a(.*)e" -// matches[0].rm_so = 0, matches[0].rm_eo = 5 -// matches[1].rm_so = 1, matches[1].rm_eo = 4 -// matches[2].rm_so = -1, matches[2].rm_eo = -1 -// -// pregex_captures->length = 2 -// pregex_captures->strings[0] = "abcde" -// pregex_captures->strings[1] = "bcd" -// -// Note that even if there is no match, a non-null zero-length regex-captures array is returned (by reference). -// This is important: see the comments in mapper_put for details. - -void save_regex_captures(string_array_t** ppregex_captures, char* input, regmatch_t matches[], int nmatchmax) { - int match_count = 0; - match_count = 0; - // In fully occupied case, there will be no slots with -1's. - // Using optional regex captures, one slot may have rm_so == rm_eo == -1 (i.e. trivial) while a subsequent slot - // may be non-trivial. So we need to check all slots. - for (int i = 0; i < nmatchmax; i++) { - if (matches[i].rm_so != -1) { - match_count = i + 1; - } - } - if (*ppregex_captures != NULL) - string_array_realloc(*ppregex_captures, match_count); - else - *ppregex_captures = string_array_alloc(match_count); - string_array_t* pregex_captures = *ppregex_captures; - if (match_count >= 1) { - for (int i = 0; i < match_count; i++) { - int len = matches[i].rm_eo - matches[i].rm_so; - pregex_captures->strings[i] = mlr_alloc_string_from_char_range(&input[matches[i].rm_so], len); - } - pregex_captures->strings_need_freeing = TRUE; - } -} - -// ---------------------------------------------------------------- -// Using the above example: -// Input "abcde" -// Regex "a(.*)e" -// -// pregex_captures->length = 2 -// pregex_captures->strings[0] = "abcde" -// pregex_captures->strings[1] = "bcd" -// -// "\0" should be replaced with "abcde". -// "\1" should be replaced with "bcd". -// "\2" through "\9" should be replaced with "". - -char* interpolate_regex_captures(char* input, string_array_t* pregex_captures, int* pwas_allocated) { - *pwas_allocated = FALSE; - - string_builder_t* psb = sb_alloc(32); - - char* p = input; - while (*p) { - if (p[0] == '\\' && isdigit(p[1])) { - *pwas_allocated = TRUE; - int idx = p[1] - '0'; - if (idx < pregex_captures->length) - sb_append_string(psb, pregex_captures->strings[idx]); - p += 2; - } else { - sb_append_char(psb, *p); - p++; - } - } - - if (*pwas_allocated) { - char* output = sb_finish(psb); - sb_free(psb); - return output; - } else { - sb_free(psb); - return input; - } -} diff --git a/c/lib/mlrregex.h b/c/lib/mlrregex.h deleted file mode 100644 index 24137158c..000000000 --- a/c/lib/mlrregex.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef MLRREGEX_H -#define MLRREGEX_H - -#include -#include -#include -#include -#include -#include "mlrutil.h" -#include "string_builder.h" -#include "string_array.h" - -// Succeeds or aborts the process. cflag REG_EXTENDED is already included. -// Returns its first argument (after compilation). -regex_t* regcomp_or_die(regex_t* pregex, char* regex_string, int cflags); -// Always uses cflags with REG_EXTENDED. -// If the regex_string is of the form a.*b, compiles it using cflags without REG_ICASE. -// If the regex_string is of the form "a.*b", compiles a.*b using cflags without REG_ICASE. -// If the regex_string is of the form "a.*b"i, compiles a.*b using cflags with REG_ICASE. -regex_t* regcomp_or_die_quoted(regex_t* pregex, char* regex_string, int cflags); - -// Returns TRUE for match, FALSE for no match, and aborts the process if -// regexec returns anything else. -int regmatch_or_die(const regex_t* pregex, const char* restrict match_string, - size_t nmatchmax, regmatch_t pmatch[restrict]); - -// The return value is dynamically allocated even if there is no match, i.e. when output -// equals input. The by-reference all-captured flag is true on return if all \1, etc. -// were satisfiable by parenthesized capture groups. -char* regex_sub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, - int* pmatched, int* pall_captured); - -char* regex_gsub(char* input, regex_t* pregex, string_builder_t* psb, char* replacement, - int* pmatched, int* pall_captured, char *pfree_flags); - -// The return value is dynamically allocated if there is a match, else it returns null. -char* regextract(char* input, regex_t* pregex); -char* regextract_or_else(char* input, regex_t* pregex, char* default_value); - -// The regex library gives us an array of match pointers into the input string. This function strdups them -// out into separate storage, to implement "\0", "\1", "\2", etc. regex-captures for the =~ and !=~ operators. -// If the regex-captures array is null, it is allocated; otherwise it is resized. If the input regex does not -// match the regex, then the regex-captures array will be non-null but will have length 0. -void save_regex_captures(string_array_t** ppregex_captures, char* input, regmatch_t matches[], int nmatchmax); - -// Given an array of regex-captures and an input string, interpolates the matches. E.g. if capture 1 is "abc" -// and capture 2 is "def" and the input is "hello \1 goodbye \2", then the output is a newly allocated string -// with value "hello abc goodbye def". The was-allocated flag is an output flag: if true upon return, there was -// something modified and the returnv value should be freed; if false, nothing was modified and the input string was -// returned as the function value. -// -// To avoid performance regressions in non-match cases, this function quickly returns if the regex-captures array is -// NULL. See comments in mapper_put.c for more information. -char* interpolate_regex_captures(char* input, string_array_t* pregex_captures, int* pwas_allocated); - -#endif // MLRREGEX_H diff --git a/c/lib/mlrstat.c b/c/lib/mlrstat.c deleted file mode 100644 index 0e0006b2d..000000000 --- a/c/lib/mlrstat.c +++ /dev/null @@ -1,229 +0,0 @@ -#include -#include "lib/mlrstat.h" - -// ================================================================ -// These are intended for streaming (i.e. single-pass) applications. Otherwise -// the formulas look different (and are more intuitive). -// ================================================================ - -// ---------------------------------------------------------------- -// Univariate linear regression -// ---------------------------------------------------------------- -// There are N (xi, yi) pairs. -// -// minimize E = sum (yi - m xi - b)^2 -// -// Set the two partial derivatives to zero and solve for m and b: -// -// DE/Dm = sum 2 (yi - m xi - b) (-xi) = 0 -// DE/Db = sum 2 (yi - m xi - b) (-1) = 0 -// -// sum (yi - m xi - b) (xi) = 0 -// sum (yi - m xi - b) = 0 -// -// sum (xi yi - m xi^2 - b xi) = 0 -// sum (yi - m xi - b) = 0 -// -// m sum(xi^2) + b sum(xi) = sum(xi yi) -// m sum(xi) + b N = sum(yi) -// -// [ sum(xi^2) sum(xi) ] [ m ] = [ sum(xi yi) ] -// [ sum(xi) N ] [ b ] = [ sum(yi) ] -// -// [ m ] = [ sum(xi^2) sum(xi) ]^-1 [ sum(xi yi) ] -// [ b ] [ sum(xi) N ] [ sum(yi) ] -// -// = [ N -sum(xi) ] [ sum(xi yi) ] * 1/D -// [ -sum(xi) sum(xi^2)] [ sum(yi) ] -// -// where -// -// D = N sum(xi^2) - sum(xi)^2. -// -// So -// -// N sum(xi yi) - sum(xi) sum(yi) -// m = -------------------------------- -// D -// -// -sum(xi)sum(xi yi) + sum(xi^2) sum(yi) -// b = ---------------------------------------- -// D -// -// ---------------------------------------------------------------- - -void mlr_get_linear_regression_ols(unsigned long long n, double sumx, double sumx2, double sumxy, double sumy, - double* pm, double* pb) -{ - double D = n * sumx2 - sumx*sumx; - double m = (n * sumxy - sumx * sumy) / D; - double b = (-sumx * sumxy + sumx2 * sumy) / D; - - *pm = m; - *pb = b; -} - -// We would need a second pass through the data to compute the error-bars given -// the data and the m and the b. -// -// # Young 1962, pp. 122-124. Compute sample variance of linear -// # approximations, then variances of m and b. -// var_z = 0.0 -// for i in range(0, N): -// var_z += (m * xs[i] + b - ys[i])**2 -// var_z /= N -// -// var_m = (N * var_z) / D -// var_b = (var_z * sumx2) / D -// -// output = [m, b, math.sqrt(var_m), math.sqrt(var_b)] - -// ---------------------------------------------------------------- -double mlr_get_var(unsigned long long n, double sum, double sum2) { - double mean = sum / n; - double numerator = sum2 - mean*(2.0*sum - n*mean); - if (numerator < 0.0) // round-off error - numerator = 0.0; - double denominator = n - 1LL; - return numerator / denominator; -} - -// ---------------------------------------------------------------- -// Unbiased estimator: -// (1/n) sum{(xi-mean)**3} -// ----------------------------- -// [(1/(n-1)) sum{(xi-mean)**2}]**1.5 - -// mean = sumx / n; n mean = sumx - -// sum{(xi-mean)^3} -// = sum{xi^3 - 3 mean xi^2 + 3 mean^2 xi - mean^3} -// = sum{xi^3} - 3 mean sum{xi^2} + 3 mean^2 sum{xi} - n mean^3 -// = sumx3 - 3 mean sumx2 + 3 mean^2 sumx - n mean^3 -// = sumx3 - 3 mean sumx2 + 3n mean^3 - n mean^3 -// = sumx3 - 3 mean sumx2 + 2n mean^3 -// = sumx3 - mean*(3 sumx2 + 2n mean^2) - -// sum{(xi-mean)^2} -// = sum{xi^2 - 2 mean xi + mean^2} -// = sum{xi^2} - 2 mean sum{xi} + n mean^2 -// = sumx2 - 2 mean sumx + n mean^2 -// = sumx2 - 2 n mean^2 + n mean^2 -// = sumx2 - n mean^2 - -double mlr_get_skewness(unsigned long long n, double sumx, double sumx2, double sumx3) { - double mean = sumx / n; - double numerator = sumx3 - mean*(3*sumx2 - 2*n*mean*mean); - numerator = numerator / n; - double denominator = (sumx2 - n*mean*mean) / (n-1); - denominator = pow(denominator, 1.5); - return numerator / denominator; -} - -// Unbiased: -// (1/n) sum{(x-mean)**4} -// ----------------------- - 3 -// [(1/n) sum{(x-mean)**2}]**2 - -// sum{(xi-mean)^4} -// = sum{xi^4 - 4 mean xi^3 + 6 mean^2 xi^2 - 4 mean^3 xi + mean^4} -// = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 4 mean^3 sum{xi} + n mean^4 -// = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 4 n mean^4 + n mean^4 -// = sum{xi^4} - 4 mean sum{xi^3} + 6 mean^2 sum{xi^2} - 3 n mean^4 -// = sum{xi^4} - mean*(4 sum{xi^3} - 6 mean sum{xi^2} + 3 n mean^3) -// = sumx4 - mean*(4 sumx3 - 6 mean sumx2 + 3 n mean^3) -// = sumx4 - mean*(4 sumx3 - mean*(6 sumx2 - 3 n mean^2)) - -double mlr_get_kurtosis(unsigned long long n, double sumx, double sumx2, double sumx3, double sumx4) { - double mean = sumx / n; - double numerator = sumx4 - mean*(4*sumx3 - mean*(6*sumx2 - 3*n*mean*mean)); - numerator = numerator / n; - double denominator = (sumx2 - n*mean*mean) / n; - denominator = denominator * denominator; - return numerator / denominator - 3.0; -} - -// ---------------------------------------------------------------- -// Non-streaming implementation: -// -// def find_sample_covariance(xs, ys): -// n = len(xs) -// mean_x = find_mean(xs) -// mean_y = find_mean(ys) -// -// sum = 0.0 -// for k in range(0, n): -// sum += (xs[k] - mean_x) * (ys[k] - mean_y) -// -// return sum / (n-1.0) - -double mlr_get_cov(unsigned long long n, double sumx, double sumy, double sumxy) { - double meanx = sumx / n; - double meany = sumy / n; - double numerator = sumxy - meanx*sumy - meany*sumx + n*meanx*meany; - double denominator = n - 1; - return numerator / denominator; -} - -// ---------------------------------------------------------------- -void mlr_get_cov_matrix(unsigned long long n, - double sumx, double sumx2, double sumy, double sumy2, double sumxy, - double Q[2][2]) -{ - double denominator = n - 1; - Q[0][0] = (sumx2 - sumx*sumx/n) / denominator; - Q[0][1] = (sumxy - sumx*sumy/n) / denominator; - Q[1][0] = Q[0][1]; - Q[1][1] = (sumy2 - sumy*sumy/n) / denominator; -} - -// ---------------------------------------------------------------- -// Principal component analysis can be used for linear regression: -// -// * Compute the covariance matrix for the x's and y's. -// -// * Find its eigenvalues and eigenvectors of the cov. (This is real-symmetric -// so Jacobi iteration is simple and fine.) -// -// * The principal eigenvector points in the direction of the fit. -// -// * The covariance matrix is computed on zero-mean data so the intercept -// is zero. The fit equation is of the form (y - nu) = m*(x - mu) where mu -// and nu are x and y means, respectively. -// -// * If the fit is perfect then the 2nd eigenvalue will be zero; if the fit is -// good then the 2nd eigenvalue will be smaller; if the fit is bad then -// they'll be about the same. I use 1 - |lambda2|/|lambda1| as an indication -// of quality of the fit. -// -// Standard ("ordinary least-squares") linear regression is appropriate when -// the errors are thought to be all in the y's. PCA ("total least-squares") is -// appropriate when the x's and the y's are thought to both have errors. - -void mlr_get_linear_regression_pca( - // Inputs: - double eigenvalue_1, - double eigenvalue_2, - double eigenvector_1[2], - double eigenvector_2[2], - double x_mean, double y_mean, - // Outputs: - double* pm, double* pb, double* pquality) -{ - double abs_1 = fabs(eigenvalue_1); - double abs_2 = fabs(eigenvalue_2); - double quality = 1.0; - if (abs_1 == 0.0) - quality = 0.0; - else if (abs_2 > 0.0) - quality = 1.0 - abs_2 / abs_1; - - double a0 = eigenvector_1[0]; - double a1 = eigenvector_1[1]; - double m = a1 / a0; - double b = y_mean - m * x_mean; - - *pm = m; - *pb = b; - *pquality = quality; -} diff --git a/c/lib/mlrstat.h b/c/lib/mlrstat.h deleted file mode 100644 index 459be170e..000000000 --- a/c/lib/mlrstat.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef MLRSTAT_H -#define MLRSTAT_H - -void mlr_get_linear_regression_ols(unsigned long long n, double sumx, double sumx2, double sumxy, double sumy, - double* pm, double* pb); - -double mlr_get_var(unsigned long long n, double sum, double sum2); - -double mlr_get_cov(unsigned long long n, double sumx, double sumy, double sumxy); - -double mlr_get_skewness(unsigned long long n, double sumx, double sumx2, double sumx3); - -double mlr_get_kurtosis(unsigned long long n, double sumx, double sumx2, double sumx3, double sumx4); - -void mlr_get_cov_matrix(unsigned long long n, - double sumx, double sumx2, double sumy, double sumy2, double sumxy, double Q[2][2]); - -void mlr_get_linear_regression_pca( - // Inputs: - double eigenvalue_1, - double eigenvalue_2, - double eigenvector_1[2], - double eigenvector_2[2], - double x_mean, double y_mean, - // Outputs, with quality 1 being a tight fit and quality 0 being a loose one. - double* pm, double* pb, double* pquality); - -#endif // MLRSTAT_H diff --git a/c/lib/mlrtimezone.h b/c/lib/mlrtimezone.h deleted file mode 100644 index c5ed82569..000000000 --- a/c/lib/mlrtimezone.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef MLRTIMEZONE_H -#define MLRTIMEZONE_H - -typedef enum _timezone_handling_t { - TIMEZONE_HANDLING_GMT, - TIMEZONE_HANDLING_LOCAL -} timezone_handling_t; - -#endif // MLRTIMEZONE_H diff --git a/c/lib/mlrutil.c b/c/lib/mlrutil.c deleted file mode 100644 index 4a401cad9..000000000 --- a/c/lib/mlrutil.c +++ /dev/null @@ -1,657 +0,0 @@ -#include -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/free_flags.h" - -// ---------------------------------------------------------------- -void mlr_internal_coding_error(char* file, int line) { - fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, file, line); - exit(1); -} - -void mlr_internal_coding_error_if(int v, char* file, int line) { - if (v) { - mlr_internal_coding_error(file, line); - } -} - -void mlr_internal_coding_error_unless(int v, char* file, int line) { - if (!v) { - mlr_internal_coding_error(file, line); - } -} - -// ---------------------------------------------------------------- -char* mlr_strmsep(char **pstring, const char *sep, int seplen) { - char* string = *pstring; - if (string == NULL) { - return NULL; - } - char* pnext = strstr(string, sep); - if (pnext == NULL) { - *pstring = NULL; - return string; - } else { - *pnext = 0; - *pstring = pnext + seplen; - return string; - } -} - -// ---------------------------------------------------------------- -int mlr_bsearch_double_for_insert(double* array, int size, double value) { - int lo = 0; - int hi = size-1; - int mid = (hi+lo)/2; - int newmid; - - if (size == 0) - return 0; - if (value > array[0]) - return 0; - if (value < array[hi]) - return size; - - while (lo < hi) { - double a = array[mid]; - if (value == a) { - return mid; - } - else if (value > a) { - hi = mid; - newmid = (hi+lo)/2; - } - else { - lo = mid; - newmid = (hi+lo)/2; - } - if (mid == newmid) { - if (value >= array[lo]) - return lo; - else if (value >= array[hi]) - return hi; - else - return hi+1; - } - mid = newmid; - } - - return lo; -} - -// ---------------------------------------------------------------- -void* mlr_malloc_or_die(size_t size) { - void* p = malloc(size); - if (p == NULL) { - fprintf(stderr, "malloc(%llu) failed.\n", (unsigned long long)size); - exit(1); - } -#ifdef MLR_MALLOC_TRACE - fprintf(stderr, "MALLOC size=%llu,p=%p\n", (unsigned long long)size, p); -#endif - return p; -} - -// ---------------------------------------------------------------- -void* mlr_realloc_or_die(void *optr, size_t size) { - void* nptr = realloc(optr, size); - if (nptr == NULL) { - fprintf(stderr, "realloc(%llu) failed.\n", (unsigned long long)size); - exit(1); - } -#ifdef MLR_MALLOC_TRACE - fprintf(stderr, "REALLOC size=%llu,p=%p\n", (unsigned long long)size, nptr); -#endif - return nptr; -} - -// ---------------------------------------------------------------- -char * mlr_strdup_quoted_or_die(const char *s1) { - int len = strlen(s1); - char* s2 = mlr_malloc_or_die(len+3); - s2[0] = '"'; - strcpy(&s2[1], s1); - s2[len+1] = '"'; - s2[len+2] = 0; - return s2; -} - -// ---------------------------------------------------------------- -// The caller should free the return value from each of these. - -char* mlr_alloc_string_from_double(double value, char* fmt) { - int n = snprintf(NULL, 0, fmt, value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, value); - return string; -} - -char* mlr_alloc_string_from_ull(unsigned long long value) { - int n = snprintf(NULL, 0, "%llu", value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, "%llu", value); - return string; -} - -char* mlr_alloc_string_from_ll(long long value) { - int n = snprintf(NULL, 0, "%lld", value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, "%lld", value); - return string; -} - -char* mlr_alloc_string_from_ll_and_format(long long value, char* fmt) { - int n = snprintf(NULL, 0, fmt, value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, value); - return string; -} - -char* mlr_alloc_string_from_int(int value) { - int n = snprintf(NULL, 0, "%d", value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, "%d", value); - return string; -} - -char* mlr_alloc_string_from_char_range(char* start, int num_bytes) { - char* string = mlr_malloc_or_die(num_bytes+1); - memcpy(string, start, num_bytes); - string[num_bytes] = 0; - return string; -} - -char* mlr_alloc_hexfmt_from_ll(long long value) { - int n = snprintf(NULL, 0, "0x%llx", (unsigned long long)value); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, "0x%llx", value); - return string; -} - -char* mlr_alloc_string_from_string_and_format(char* old_value, char* fmt) { - int n = snprintf(NULL, 0, fmt, old_value); - char* new_value = mlr_malloc_or_die(n+1); - sprintf(new_value, fmt, old_value); - return new_value; -} - -double mlr_double_from_string_or_die(char* string) { - double d; - if (!mlr_try_float_from_string(string, &d)) { - fprintf(stderr, "%s: couldn't parse \"%s\" as number.\n", - MLR_GLOBALS.bargv0, string); - exit(1); - } - return d; -} - -// E.g. "300" is a number; "300ms" is not. -int mlr_try_float_from_string(char* string, double* pval) { - int num_bytes_scanned; - int rc = sscanf(string, "%lf%n", pval, &num_bytes_scanned); - if (rc != 1) - return 0; - if (string[num_bytes_scanned] != 0) // scanned to end of string? - return 0; - return 1; -} - -long long mlr_int_from_string_or_die(char* string) { - long long i; - if (!mlr_try_int_from_string(string, &i)) { - fprintf(stderr, "Couldn't parse \"%s\" as number.\n", string); - exit(1); - } - return i; -} - -// E.g. "300" is a number; "300ms" is not. -int mlr_try_int_from_string(char* string, long long* pval) { - int num_bytes_scanned, rc; - // sscanf with %li / %lli doesn't scan correctly when the high bit is set - // on hex input; it just returns max signed. So we need to special-case hex - // input. - if (string[0] == '0' && (string[1] == 'x' || string[1] == 'X')) { - rc = sscanf(string, "%llx%n", pval, &num_bytes_scanned); - } else { - rc = sscanf(string, "%lli%n", pval, &num_bytes_scanned); - } - if (rc != 1) - return 0; - if (string[num_bytes_scanned] != 0) // scanned to end of string? - return 0; - return 1; -} - -// ---------------------------------------------------------------- -static char* low_int_to_string_data[] = { - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", - "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", - "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", - "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", - "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", - "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", - "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", - "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", - "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", - "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100" -}; - -char* low_int_to_string(int idx, char* pfree_flags) { - if ((0 <= idx) && (idx <= 100)) { - *pfree_flags = 0; - return low_int_to_string_data[idx]; - } else { - char buf[32]; - sprintf(buf, "%d", idx); - *pfree_flags = FREE_ENTRY_KEY; - return mlr_strdup_or_die(buf); - } -} - -// ---------------------------------------------------------------- -char* mlr_paste_2_strings(char* s1, char* s2) { - int n1 = strlen(s1); - int n2 = strlen(s2); - char* s = mlr_malloc_or_die(n1+n2+1); - strcpy(s, s1); - strcat(s, s2); - return s; -} - -char* mlr_paste_3_strings(char* s1, char* s2, char* s3) { - int n1 = strlen(s1); - int n2 = strlen(s2); - int n3 = strlen(s3); - char* s = mlr_malloc_or_die(n1+n2+n3+1); - strcpy(s, s1); - strcat(s, s2); - strcat(s, s3); - return s; -} - -char* mlr_paste_4_strings(char* s1, char* s2, char* s3, char* s4) { - int n1 = strlen(s1); - int n2 = strlen(s2); - int n3 = strlen(s3); - int n4 = strlen(s4); - char* s = mlr_malloc_or_die(n1+n2+n3+n4+1); - strcpy(s, s1); - strcat(s, s2); - strcat(s, s3); - strcat(s, s4); - return s; -} - -char* mlr_paste_5_strings(char* s1, char* s2, char* s3, char* s4, char* s5) { - int n1 = strlen(s1); - int n2 = strlen(s2); - int n3 = strlen(s3); - int n4 = strlen(s4); - int n5 = strlen(s5); - char* s = mlr_malloc_or_die(n1+n2+n3+n4+n5+1); - strcpy(s, s1); - strcat(s, s2); - strcat(s, s3); - strcat(s, s4); - strcat(s, s5); - return s; -} - -// ---------------------------------------------------------------- -// This is djb2. -int mlr_string_hash_func(char *str) { - unsigned long hash = 5381; - int c; - - while ((c = *str++) != 0) - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - - return (int)hash; -} - -int mlr_string_pair_hash_func(char* str1, char* str2) { - unsigned long hash = 5381; - int c; - - while ((c = *str1++) != 0) - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - while ((c = *str2++) != 0) - hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - - return (int)hash; -} - -// ---------------------------------------------------------------- -// 0x00-0x7f (MSB is 0) are ASCII and printable. -// 0x80-0xbf (MSBs are 10) are continuation characters and don't add to printable length. -// 0xc0-0xfe (MSBs are 11) are leading characters and do add to printable length. -// (0xff, incidentally, is never a valid UTF-8 byte). -int strlen_for_utf8_display(char* str) { - int len = 0; - for (char* p = str; *p; p++) { - if ((*p & 0xc0) != 0x80) - len++; - } - return len; -} - -// ---------------------------------------------------------------- -// These are for low-volume, call-at-startup applications. If they get used -// record-by-record they should be replaced with pointer-walking logic which -// avoids the unnecessary expense of calling strlen. - -int string_starts_with(char* string, char* prefix) { - int prefixlen = strlen(prefix); - return !strncmp(string, prefix, prefixlen); -} - -int string_ends_with(char* string, char* suffix, int* pstringlen) { - int stringlen = strlen(string); - int suffixlen = strlen(suffix); - if (pstringlen != NULL) - *pstringlen = stringlen; - if (stringlen < suffixlen) - return FALSE; - return !strcmp(&string[stringlen-suffixlen], suffix); -} - -// ---------------------------------------------------------------- -int mlr_imax2(int a, int b) { - if (a >= b) - return a; - else - return b; -} - -// ---------------------------------------------------------------- -int mlr_imax3(int a, int b, int c) { - return mlr_imax2(a, mlr_imax2(b, c)); -} - -// ---------------------------------------------------------------- -int power_of_two_above(int n) { - n |= (n >> 1); - n |= (n >> 2); - n |= (n >> 4); - n |= (n >> 8); - n |= (n >> 16); - return(n+1); -} - -// ---------------------------------------------------------------- -static int is_backslash_octal(char* input, int* pcode) { - if (strlen(input) < 4) - return FALSE; - if (input[0] != '\\') - return FALSE; - if (input[1] < '0' || input[1] > '7') - return FALSE; - if (input[2] < '0' || input[2] > '7') - return FALSE; - if (input[3] < '0' || input[3] > '7') - return FALSE; - *pcode = (input[1] - '0') * 64 - + (input[2] - '0') * 8 - + (input[3] - '0'); - return TRUE; -} - -static int is_backslash_hex(char* input, int* pcode) { - if (strlen(input) < 4) - return FALSE; - if (input[0] != '\\') - return FALSE; - if (input[1] != 'x') - return FALSE; - if (!isxdigit(input[2])) - return FALSE; - if (!isxdigit(input[3])) - return FALSE; - - char buf[3]; - buf[0] = input[2]; - buf[1] = input[3]; - buf[2] = 0; - if (sscanf(buf, "%x", pcode) != 1) { - fprintf(stderr, "Miller: internal coding error detected in file %s at line %d.\n", - __FILE__, __LINE__); - exit(1); - } - return TRUE; -} - -char* mlr_alloc_unbackslash(char* input) { - // Do the strdup even if there's nothing to expand, so the caller can unconditionally - // free what we return. - char* output = mlr_strdup_or_die(input); - char* pi = input; - char* po = output; - int code = 0; - while (*pi) { - // https://en.wikipedia.org/wiki/Escape_sequences_in_C - if (streqn(pi, "\\a", 2)) { - pi += 2; - *(po++) = '\a'; - } else if (streqn(pi, "\\b", 2)) { - pi += 2; - *(po++) = '\b'; - } else if (streqn(pi, "\\f", 2)) { - pi += 2; - *(po++) = '\f'; - } else if (streqn(pi, "\\n", 2)) { - pi += 2; - *(po++) = '\n'; - } else if (streqn(pi, "\\r", 2)) { - pi += 2; - *(po++) = '\r'; - } else if (streqn(pi, "\\t", 2)) { - pi += 2; - *(po++) = '\t'; - } else if (streqn(pi, "\\v", 2)) { - pi += 2; - *(po++) = '\v'; - } else if (streqn(pi, "\\\\", 2)) { - pi += 2; - *(po++) = '\\'; - } else if (streqn(pi, "\\'", 2)) { - pi += 2; - *(po++) = '\''; - } else if (streqn(pi, "\\\"", 2)) { - pi += 2; - *(po++) = '"'; - } else if (streqn(pi, "\\?", 2)) { - pi += 2; - *(po++) = '?'; - } else if (is_backslash_octal(pi, &code)) { - pi += 4; - *(po++) = code; - } else if (is_backslash_hex(pi, &code)) { - pi += 4; - *(po++) = code; - } else { - *po = *pi; - pi++; - po++; - } - } - *po = 0; - - return output; -} - -// Destructively removes final LF, CR, or CR/LF in the string. -void mlr_rstrip(char* s) { - if (s == NULL) { - return; - } - int len = strlen(s); - if (len >= 2) { - if (s[len-2] == '\r' && s[len-1] == '\n') { - s[len-2] = 0; - return; - } - } - if (len >= 1) { - if (s[len-1] == '\r' || s[len-1] == '\n') { - s[len-1] = 0; - } - } -} - -// Does a strdup even if there's nothing to expand, so the caller can unconditionally -// free what we return. -char* mlr_alloc_double_backslash(char* input) { - char *p, *q; - int input_length = 0; - int num_backslashes = 0; - for (p = input; *p; p++) { - input_length++; - if (*p == '\\') { - if (p[1] != '.') { - num_backslashes++; - } - } - } - char* output = mlr_malloc_or_die(input_length + num_backslashes + 1); - for (p = input, q = output; *p; p++) { - if (*p == '\\') { - if (p[1] != '.') { - *(q++) = *p; - } - *(q++) = *p; - } else { - *(q++) = *p; - } - } - *q = 0; - - return output; -} - -// ---------------------------------------------------------------- -// Returns -1 on error -ssize_t get_file_size(char* filename) { - struct stat statbuf; - if (stat(filename, &statbuf) < 0) { - return (ssize_t)(-1); - } else { - return statbuf.st_size; - } -} - -// ---------------------------------------------------------------- -char* read_file_into_memory(char* filename, size_t* psize) { - struct stat statbuf; - if (stat(filename, &statbuf) < 0) { - perror("stat"); - fprintf(stderr, "%s: could not stat \"%s\"\n", MLR_GLOBALS.bargv0, filename); - exit(1); - } - char* buffer = mlr_malloc_or_die(statbuf.st_size + 1); - - FILE* fp = fopen(filename, "r"); - if (fp == NULL) { - perror("fopen"); - fprintf(stderr, "%s: could not fopen \"%s\"\n", MLR_GLOBALS.bargv0, filename); - free(buffer); - return NULL; - } - - size_t rc = fread(buffer, 1, statbuf.st_size, fp); - if (rc != statbuf.st_size) { - fprintf(stderr, "Unable to read content of %s\n", filename); - perror("fread"); - fprintf(stderr, "%s: could not fread \"%s\"\n", MLR_GLOBALS.bargv0, filename); - fclose(fp); - free(buffer); - return NULL; - } - fclose(fp); - buffer[statbuf.st_size] = 0; - if (psize) - *psize = statbuf.st_size; - return buffer; -} - -// ---------------------------------------------------------------- -#define INITIAL_ALLOC_SIZE 16384 -#define BLOCK_SIZE 16384 -char* read_fp_into_memory(FILE* fp, size_t* psize) { - size_t file_size = 0; - size_t alloc_size = INITIAL_ALLOC_SIZE; - char* buffer = mlr_malloc_or_die(alloc_size); - - while (TRUE) { - if (file_size + BLOCK_SIZE > alloc_size) { - alloc_size *= 2; - buffer = mlr_realloc_or_die(buffer, alloc_size); - } - size_t block_num_bytes_read = fread(&buffer[file_size], 1, BLOCK_SIZE, fp); - if (block_num_bytes_read == 0) { - if (feof(fp)) - break; - perror("fread"); - fprintf(stderr, "%s: stdio/popen fread failed\n", MLR_GLOBALS.bargv0); - free(buffer); - *psize = 0; - return NULL; - } - file_size += block_num_bytes_read; - } - - *psize = file_size; - return buffer; -} - -// ---------------------------------------------------------------- -char* alloc_suffixed_temp_file_name(char* filename) { - const int suffix_length = 6; - static char bag[] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; - const static int bag_length = sizeof(bag) - 1; - - char* output = mlr_malloc_or_die(strlen(filename) + 2 + suffix_length); - - int rand_start_index = sprintf(output, "%s.", filename); - char* rand_start_ptr = &output[rand_start_index]; - - int i = 0; - for ( ; i < suffix_length; i++) { - rand_start_ptr[i] = bag[get_mtrand_int32() % bag_length]; - } - rand_start_ptr[i] = 0; - - return output; -} - -// ---------------------------------------------------------------- -// The convention for argv-style arrays is that they're null-terminated. -// So we loop through once to find the length. -char** copy_argv(char** argv) { - int length = 0; - int argi; - for (argi = 0; argv[argi]; argi++) { - length++; - } - - char** copy = mlr_malloc_or_die((length + 1) * sizeof(char*)); - for (argi = 0; argv[argi]; argi++) { - copy[argi] = mlr_strdup_or_die(argv[argi]); - } - - copy[length] = 0; - - return copy; -} - -void free_argv_copy(char** copy) { - for (int argi = 0; copy[argi]; argi++) { - free(copy[argi]); - } - free(copy); -} diff --git a/c/lib/mlrutil.h b/c/lib/mlrutil.h deleted file mode 100644 index 41d995276..000000000 --- a/c/lib/mlrutil.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef MLRUTIL_H -#define MLRUTIL_H - -#include -#include -#include -#include -#include "mtrand.h" - -#define TRUE 1 -#define FALSE 0 -#define NEITHER_TRUE_NOR_FALSE -1 - -//#define MLR_MALLOC_TRACE - -// ---------------------------------------------------------------- -#define MLR_INTERNAL_CODING_ERROR() mlr_internal_coding_error(__FILE__, __LINE__) -#define MLR_INTERNAL_CODING_ERROR_IF(v) mlr_internal_coding_error_if(v, __FILE__, __LINE__) -#define MLR_INTERNAL_CODING_ERROR_UNLESS(v) mlr_internal_coding_error_unless(v, __FILE__, __LINE__) -void mlr_internal_coding_error(char* file, int line); -void mlr_internal_coding_error_if(int v, char* file, int line); -void mlr_internal_coding_error_unless(int v, char* file, int line); - -// ---------------------------------------------------------------- -//int mlr_canonical_mod(int a, int n); -static inline int mlr_canonical_mod(int a, int n) { - int r = a % n; - if (r >= 0) - return r; - else - return r+n; -} - -// ---------------------------------------------------------------- -// strcmp computes signs; we don't need that -- only equality or inequality. -static inline int streq(char* a, char* b) { -#if 0 // performance comparison - return !strcmp(a, b); -#else - while (*a && *b) { - if (*a != *b) - return FALSE; - a++; - b++; - } - if (*a || *b) - return FALSE; - return TRUE; -#endif -} - -// strncmp computes signs; we don't need that -- only equality or inequality. -static inline int streqn(char* a, char* b, int n) { -#if 0 // performance comparison - return !strncmp(a, b, n); -#else - while (n > 0 && *a && *b) { - if (n-- <= 0) { - return TRUE; - } - if (*a != *b) { - return FALSE; - } - a++; - b++; - } - if (n == 0) - return TRUE; - if (*a || *b) { - return FALSE; - } - return TRUE; -#endif -} - -// ---------------------------------------------------------------- -// Like strsep but the sep argument is a multi-character delimiter, -// not a set of single-character delimiters. -char* mlr_strmsep(char **pstring, const char *sep, int seplen); - -// ---------------------------------------------------------------- -int mlr_bsearch_double_for_insert(double* array, int size, double value); - -void* mlr_malloc_or_die(size_t size); -void* mlr_realloc_or_die(void *ptr, size_t size); -static inline char * mlr_strdup_or_die(const char *s1) { - char* s2 = strdup(s1); - if (s2 == NULL) { - fprintf(stderr, "malloc/strdup failed\n"); - exit(1); - } -#ifdef MLR_MALLOC_TRACE - fprintf(stderr, "STRDUP size=%d,p=%p\n", (int)strlen(s2), s2); -#endif - return s2; -} -char * mlr_strdup_quoted_or_die(const char *s1); - -// The caller should free the return values from each of these. -char* mlr_alloc_string_from_double(double value, char* fmt); -char* mlr_alloc_string_from_ull(unsigned long long value); -char* mlr_alloc_string_from_ll(long long value); -char* mlr_alloc_string_from_ll_and_format(long long value, char* fmt); -char* mlr_alloc_string_from_int(int value); -char* mlr_alloc_string_from_string_and_format(char* value, char* fmt); -// The input doesn't include the null-terminator; the output does. -char* mlr_alloc_string_from_char_range(char* start, int num_bytes); - -char* mlr_alloc_hexfmt_from_ll(long long value); - -double mlr_double_from_string_or_die(char* string); -long long mlr_int_from_string_or_die(char* string); -int mlr_try_float_from_string(char* string, double* pval); -int mlr_try_int_from_string(char* string, long long* pval); - -// For small integers (as of this writing, 0 .. 100) returns a static string representation. -// For other values, returns a dynamically allocated string representation. -char* low_int_to_string(int idx, char* pfree_flags); - -// Inefficient and intended for call-rarely use. The caller should free the return values. -char* mlr_paste_2_strings(char* s1, char* s2); -char* mlr_paste_3_strings(char* s1, char* s2, char* s3); -char* mlr_paste_4_strings(char* s1, char* s2, char* s3, char* s4); -char* mlr_paste_5_strings(char* s1, char* s2, char* s3, char* s4, char* s5); - -int mlr_string_hash_func(char *str); -int mlr_string_pair_hash_func(char* str1, char* str2); - -int strlen_for_utf8_display(char* str); -int string_starts_with(char* string, char* prefix); -// If pstrlen is non-null, after return it will contain strlen(string) for -// convenience of the caller. -int string_ends_with(char* string, char* suffix, int* pstringlen); - -int mlr_imax2(int a, int b); -int mlr_imax3(int a, int b, int c); -int power_of_two_above(int n); - -// The caller should free the return value. Maps two-character sequences such as -// "\t", "\n", "\\" to single characters such as tab, newline, backslash, etc. -char* mlr_alloc_unbackslash(char* input); - -// Destructively removes final LF, CR, or CR/LF in the string. -void mlr_rstrip(char* s); - -// Miller DSL literals are unbackslashed: e.g. the two-character sequence "\t" is converted to a tab character, and -// users need to type "\\t" to get a backslash followed by a t. Well and good, but the system regex library handles -// backslashes not quite as I want. Namely, without this function, -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' -// -// (note: not echo -e, but just plain echo) outputs -// -// a\TABb -// -// while -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\\\t","TAB")' -// -// outputs -// -// aTABb -// -// Using this function, backslashes can be escaped as the regex library requires, before I call regcomp: -// -// echo 'x=a\tb' | mlr put '$x=sub($x,"\\t","TAB")' -// -// outputs -// -// aTABb -// -// as desired. -char* mlr_alloc_double_backslash(char* input); - -// Returns -1 on error -ssize_t get_file_size(char* filename); - -// The caller should free the return value. -char* read_file_into_memory(char* filename, size_t* psize); -// The caller should free the return value. -char* read_fp_into_memory(FILE* fp, size_t* psize); - -// Returns a copy of the filename with random characters attached to the end. -char* alloc_suffixed_temp_file_name(char* filename); - -char** copy_argv(char** argv); -void free_argv_copy(char** argv); - -#endif // MLRUTIL_H diff --git a/c/lib/mlrval.c b/c/lib/mlrval.c deleted file mode 100644 index 833bed697..000000000 --- a/c/lib/mlrval.c +++ /dev/null @@ -1,417 +0,0 @@ -#include -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mlrval.h" - -// ================================================================ -// See important notes at the top of mlrval.h. -// ================================================================ - -// ---------------------------------------------------------------- -char* mt_describe_type(int type) { - switch (type) { - case MT_ERROR: return "MT_ERROR"; break; - case MT_ABSENT: return "MT_ABSENT"; break; - case MT_EMPTY: return "MT_EMPTY"; break; - case MT_STRING: return "MT_STRING"; break; - case MT_INT: return "MT_INT"; break; - case MT_FLOAT: return "MT_FLOAT"; break; - case MT_BOOLEAN: return "MT_BOOLEAN"; break; - default: return "???"; break; - } -} - -char* mt_describe_type_simple(int type) { - switch (type) { - case MT_ERROR: return "error"; break; - case MT_ABSENT: return "absent"; break; - case MT_EMPTY: return "empty"; break; - case MT_STRING: return "string"; break; - case MT_INT: return "int"; break; - case MT_FLOAT: return "float"; break; - case MT_BOOLEAN: return "bool"; break; - default: return "???"; break; - } -} - -// ---------------------------------------------------------------- -// See comments in header file -char* mv_alloc_format_val(mv_t* pval) { - switch(pval->type) { - case MT_ABSENT: - case MT_EMPTY: - return mlr_strdup_or_die(""); - break; - case MT_ERROR: - return mlr_strdup_or_die("(error)"); - break; - case MT_STRING: - return mlr_strdup_or_die(pval->u.strv); - break; - case MT_BOOLEAN: - return mlr_strdup_or_die(pval->u.boolv ? "true" : "false"); - break; - case MT_FLOAT: - return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); - break; - case MT_INT: - return mlr_alloc_string_from_ll(pval->u.intv); - break; - default: - return mlr_strdup_or_die("???"); - break; - } -} - -char* mv_alloc_format_val_quoting_strings(mv_t* pval) { - switch(pval->type) { - case MT_ABSENT: - case MT_EMPTY: - return mlr_strdup_quoted_or_die(""); - break; - case MT_ERROR: - return mlr_strdup_or_die("(error)"); - break; - case MT_STRING: - return mlr_strdup_quoted_or_die(pval->u.strv); - break; - case MT_BOOLEAN: - return mlr_strdup_or_die(pval->u.boolv ? "true" : "false"); - break; - case MT_FLOAT: - return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); - break; - case MT_INT: - return mlr_alloc_string_from_ll(pval->u.intv); - break; - default: - return mlr_strdup_or_die("???"); - break; - } -} - -// ---------------------------------------------------------------- -// See comments in header file -char* mv_maybe_alloc_format_val(mv_t* pval, char* pfree_flags) { - switch(pval->type) { - case MT_ABSENT: - case MT_EMPTY: - *pfree_flags = NO_FREE; - return ""; - break; - case MT_ERROR: - *pfree_flags = NO_FREE; - return "(error)"; - break; - case MT_STRING: - *pfree_flags = NO_FREE; - return pval->u.strv; - break; - case MT_BOOLEAN: - *pfree_flags = NO_FREE; - return pval->u.boolv ? "true" : "false"; - break; - case MT_FLOAT: - *pfree_flags = FREE_ENTRY_VALUE; - return mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); - break; - case MT_INT: - *pfree_flags = FREE_ENTRY_VALUE; - return mlr_alloc_string_from_ll(pval->u.intv); - break; - default: - *pfree_flags = NO_FREE; - return "???"; - break; - } -} - -// ---------------------------------------------------------------- -// See comments in header file -char* mv_format_val(mv_t* pval, char* pfree_flags) { - char* rv = NULL; - switch(pval->type) { - case MT_ABSENT: - case MT_EMPTY: - *pfree_flags = NO_FREE; - rv = ""; - break; - case MT_ERROR: - *pfree_flags = NO_FREE; - rv = "(error)"; - break; - case MT_STRING: - // Ownership transfer to the caller - *pfree_flags = pval->free_flags; - rv = pval->u.strv; - *pval = mv_empty(); - break; - case MT_BOOLEAN: - *pfree_flags = NO_FREE; - rv = pval->u.boolv ? "true" : "false"; - break; - case MT_FLOAT: - *pfree_flags = FREE_ENTRY_VALUE; - rv = mlr_alloc_string_from_double(pval->u.fltv, MLR_GLOBALS.ofmt); - break; - case MT_INT: - *pfree_flags = FREE_ENTRY_VALUE; - rv = mlr_alloc_string_from_ll(pval->u.intv); - break; - default: - *pfree_flags = NO_FREE; - rv = "???"; - break; - } - return rv; -} - -// ---------------------------------------------------------------- -// See comments in header file -char* mv_describe_val(mv_t val) { - char* stype = mt_describe_type(val.type); - char* strv = mv_alloc_format_val(&val); - char* desc = mlr_malloc_or_die(strlen(stype) + strlen(strv) + 4); - sprintf(desc, "[%s] %s", stype, strv); - free(strv); - return desc; -} - -// ---------------------------------------------------------------- -void mv_set_boolean_strict(mv_t* pval) { - if (pval->type != MT_BOOLEAN) { - char* desc = mt_describe_type(pval->type); - fprintf(stderr, "Expression does not evaluate to boolean: got %s.\n", desc); - exit(1); - } -} - -// ---------------------------------------------------------------- -void mv_set_float_strict(mv_t* pval) { - double fltv = 0.0; - mv_t nval = mv_error(); - switch (pval->type) { - case MT_ABSENT: - case MT_EMPTY: - break; - case MT_ERROR: - break; - case MT_FLOAT: - break; - case MT_STRING: - if (!mlr_try_float_from_string(pval->u.strv, &fltv)) { - // keep nval = mv_error() - } else { - nval = mv_from_float(fltv); - } - mv_free(pval); - *pval = nval; - break; - case MT_INT: - pval ->type = MT_FLOAT; - pval->u.fltv = (double)pval->u.intv; - break; - case MT_BOOLEAN: - pval->type = MT_ERROR; - pval->u.intv = 0LL; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } -} - -// ---------------------------------------------------------------- -void mv_set_float_nullable(mv_t* pval) { - double fltv = 0.0; - mv_t nval = mv_error(); - switch (pval->type) { - case MT_ABSENT: - case MT_EMPTY: - break; - case MT_ERROR: - break; - case MT_FLOAT: - break; - case MT_INT: - pval ->type = MT_FLOAT; - pval->u.fltv = (double)pval->u.intv; - break; - case MT_BOOLEAN: - pval->type = MT_ERROR; - pval->u.intv = 0; - break; - case MT_STRING: - if (*pval->u.strv == '\0') { - nval = mv_empty(); - } else if (!mlr_try_float_from_string(pval->u.strv, &fltv)) { - // keep nval = mv_error() - } else { - nval = mv_from_float(fltv); - } - mv_free(pval); - *pval = nval; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } -} - -// ---------------------------------------------------------------- -void mv_set_int_nullable(mv_t* pval) { - long long intv = 0LL; - mv_t nval = mv_error(); - switch (pval->type) { - case MT_ABSENT: - case MT_EMPTY: - break; - case MT_ERROR: - break; - case MT_INT: - break; - case MT_FLOAT: - pval ->type = MT_INT; - pval->u.intv = (long long)pval->u.fltv; - break; - case MT_BOOLEAN: - pval->type = MT_ERROR; - pval->u.intv = 0; - break; - case MT_STRING: - if (*pval->u.strv == '\0') { - nval = mv_empty(); - } else if (!mlr_try_int_from_string(pval->u.strv, &intv)) { - // keep nval = mv_error() - } else { - nval = mv_from_int(intv); - } - mv_free(pval); - *pval = nval; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } -} - -// ---------------------------------------------------------------- -void mv_set_number_nullable(mv_t* pval) { - mv_t nval = mv_empty(); - switch (pval->type) { - case MT_ABSENT: - case MT_EMPTY: - break; - case MT_ERROR: - break; - case MT_INT: - break; - case MT_FLOAT: - break; - case MT_BOOLEAN: - pval->type = MT_ERROR; - pval->u.intv = 0; - break; - case MT_STRING: - nval = mv_scan_number_nullable(pval->u.strv); - mv_free(pval); - *pval = nval; - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } -} - -mv_t mv_scan_number_nullable(char* string) { - double fltv = 0.0; - long long intv = 0LL; - mv_t rv = mv_empty(); - if (*string == '\0') { - // keep rv = mv_empty(); - } else if (mlr_try_int_from_string(string, &intv)) { - rv = mv_from_int(intv); - } else if (mlr_try_float_from_string(string, &fltv)) { - rv = mv_from_float(fltv); - } else { - rv = mv_error(); - } - return rv; -} - -mv_t mv_scan_number_or_die(char* string) { - mv_t rv = mv_scan_number_nullable(string); - if (!mv_is_numeric(&rv)) { - fprintf(stderr, "%s: couldn't parse \"%s\" as number.\n", - MLR_GLOBALS.bargv0, string); - exit(1); - } - return rv; -} - -// ---------------------------------------------------------------- -mv_t mv_ref_type_infer_string(char* string) { - if (string == NULL) { - return mv_absent(); - } else if (*string == 0) { - return mv_empty(); - } else { - return mv_from_string(string, NO_FREE); - } -} - -mv_t mv_ref_type_infer_string_or_float(char* string) { - if (string == NULL) { - return mv_absent(); - } else if (*string == 0) { - return mv_empty(); - } else { - double fltv; - if (mlr_try_float_from_string(string, &fltv)) { - return mv_from_float(fltv); - } else { - return mv_from_string(string, NO_FREE); - } - } -} - -mv_t mv_ref_type_infer_string_or_float_or_int(char* string) { - if (string == NULL) { - return mv_absent(); - } else if (*string == 0) { - return mv_empty(); - } else { - long long intv; - double fltv; - if (mlr_try_int_from_string(string, &intv)) { - return mv_from_int(intv); - } else if (mlr_try_float_from_string(string, &fltv)) { - return mv_from_float(fltv); - } else { - return mv_from_string(string, NO_FREE); - } - } -} - -mv_t mv_copy_type_infer_string_or_float_or_int(char* string) { - if (string == NULL) { - return mv_absent(); - } else if (*string == 0) { - return mv_empty(); - } else { - long long intv; - double fltv; - if (mlr_try_int_from_string(string, &intv)) { - return mv_from_int(intv); - } else if (mlr_try_float_from_string(string, &fltv)) { - return mv_from_float(fltv); - } else { - return mv_from_string(mlr_strdup_or_die(string), FREE_ENTRY_VALUE); - } - } -} diff --git a/c/lib/mlrval.h b/c/lib/mlrval.h deleted file mode 100644 index ccfd8edfd..000000000 --- a/c/lib/mlrval.h +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef MLRVAL_H -#define MLRVAL_H - -#include -#include -#include -#include "../lib/mlrutil.h" -#include "../lib/mlrregex.h" -#include "../lib/free_flags.h" - -// ================================================================ -// MT for Miller type -- highly abbreviated here since these are -// spelled out a lot in rval_evaluators.c. -// -// ================================================================ -// NOTE: mlrval functions invalidate their arguments. In particular, dynamically -// allocated strings input to these functions will either be freed, or will -// have their ownership transferred to the output mlrval. -// -// This is because the primary purpose of mlrvals is for evaluation of abstract -// syntax trees defined by the DSL for put and filter. Example AST: -// -// $ mlr put -v '$z = $x . $y . "sum"' /dev/null -// = (operator): -// z (field_name). -// . (operator): -// . (operator): -// x (field_name). -// y (field_name). -// sum (literal). -// -// * Given an lrec with fields named "x" and "y", there will be pointers to x -// and y's field values from the input-data stream -- either to mmapped data -// from a file, or pointers into dynamically allocated lines from stdio. -// -// * The from-field-name mlrvals for x and y values will point into lrec memory -// but will have their own free-flags unset (since freeing of lrec memory is -// the job of the lrec instance). -// -// * The dot operator will do any necessary freeing of the x and y mlrval -// strings -- none in this case since they are direct references to field -// values. The output of $x . $y, by contrast, will be dynamically -// allocated. -// -// * The "sum" literal string is a pointer ultimately into argv[]. -// The from-literal mlrval will not have its free-flag set. -// -// * The concatenation of $x . $y and "sum" will dynamically allocated. -// The $x . $y input string will be freed; the "sum" string won't be -// since it wasn't owned by the from-literal mlrval. -// -// * The result of this outer concatenation will be stored in the $z field of -// the current record, with ownership for the dynamically allocated string -// transferred to the lrec instance. -// -// There is also some use of mlrvals in mixed float/int handling inside various -// mappers (e.g. stats1). There the use is much simpler: accumulation of -// numeric quantities, ultimately formatted as a string for output. -// -// ================================================================ -// -// Many functions here use the naming convention x_yz_name or x_: -// -// * The first letter indicates return type. -// -// * The letters between the underscores indicate argument types, and their count indicates arity. -// -// * The following abbreviations apply: -// o a: MT_ABSENT -// o v: MT_EMPTY (v for void; e is for error) -// o e: MT_ERROR -// o b: MT_BOOLEAN -// o f: MT_FLOAT -// o i: MT_INT -// o s: MT_STRING -// o r: regular expression -// o n: Numeric, i.e. MT_INT or MT_FLOAT -// o x: any of the above. -// o z: used for zero-argument functions, e.g. f_z_urand takes no arguments and returns MT_FLOAT. -// -// * If a function takes arguments of type x then that indicates it has a disposition vector/matrix -// (or switch statements, or if-else statements) allowing it to handle various types. -// -// * If it takes arguments of type n then that indicates it is up to the caller to pass only numeric types. -// -// * If it takes arguments of type s then that indicates it is up to the caller to pass only strings. -// -// ================================================================ - - -// Among other things, these defines are used in mlrval.c to index disposition matrices. -// So, if the numeric values are changed, all the matrices must be as well. - -// Two kinds of null: absent (key not present in a record) and void (key present with empty value). -// Note void is an acceptable string (empty string) but not an acceptable number. -// Void-valued mlrvals have u.strv = "". -#define MT_ERROR 0 // E.g. error encountered in one eval & it propagates up the AST. -#define MT_ABSENT 1 // No such key, e.g. $z in 'x=,y=2' -#define MT_EMPTY 2 // Empty value, e.g. $x in 'x=,y=2' -#define MT_STRING 3 -#define MT_INT 4 -#define MT_FLOAT 5 -#define MT_BOOLEAN 6 -#define MT_DIM 7 - -typedef struct _mv_t { - union { - char* strv; // MT_STRING and MT_EMPTY - long long intv; // MT_INT, and == 0 for MT_ABSENT and MT_ERROR - double fltv; // MT_FLOAT - int boolv; // MT_BOOLEAN - } u; - unsigned char type; - char free_flags; -} mv_t; - -// ---------------------------------------------------------------- -#define NULL_OR_ERROR_OUT_FOR_STRINGS(val) { \ - if ((val).type < MT_EMPTY) \ - return val; \ -} - -#define NULL_OR_ERROR_OUT_FOR_NUMBERS(val) { \ - if ((val).type <= MT_EMPTY) \ - return val; \ -} - -#define EMPTY_OR_ERROR_OUT_FOR_NUMBERS(val) { \ - if ((val).type == MT_ERROR || (val).type == MT_EMPTY) \ - return val; \ -} - -// ---------------------------------------------------------------- -// CONSTRUCTORS - -static inline mv_t mv_from_float(double d) { - return (mv_t) {.type = MT_FLOAT, .free_flags = NO_FREE, .u.fltv = d}; -} - -static inline mv_t mv_from_int(long long i) { - return (mv_t) {.type = MT_INT, .free_flags = NO_FREE, .u.intv = i}; -} - -static inline mv_t mv_from_bool(int b) { - return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = b}; -} -static inline mv_t mv_from_true() { - return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = TRUE}; -} -static inline mv_t mv_from_false() { - return (mv_t) {.type = MT_BOOLEAN, .free_flags = NO_FREE, .u.boolv = FALSE}; -} - -static inline mv_t mv_from_string_with_free(char* s) { - return (mv_t) {.type = MT_STRING, .free_flags = FREE_ENTRY_VALUE, .u.strv = s}; -} -static inline mv_t mv_from_string_no_free(char* s) { - return (mv_t) {.type = MT_STRING, .free_flags = NO_FREE, .u.strv = s}; -} -static inline mv_t mv_from_string(char* s, char free_flags) { - return (mv_t) {.type = MT_STRING, .free_flags = free_flags, .u.strv = s}; -} - -static inline mv_t mv_absent() { return (mv_t) {.type = MT_ABSENT, .free_flags = NO_FREE, .u.intv = 0}; } -static inline mv_t mv_empty() { return (mv_t) {.type = MT_EMPTY, .free_flags = NO_FREE, .u.strv = ""}; } -static inline mv_t mv_error() { return (mv_t) {.type = MT_ERROR, .free_flags = NO_FREE, .u.intv = 0}; } - -static inline mv_t mv_copy(mv_t* pval) { - if (pval->type == MT_STRING) { - return mv_from_string_with_free(mlr_strdup_or_die(pval->u.strv)); - } else { - return *pval; - } -} - -static inline mv_t* mv_alloc_copy(mv_t* pold) { - mv_t* pnew = mlr_malloc_or_die(sizeof(mv_t)); - *pnew = mv_copy(pold); - return pnew; -} - -// ---------------------------------------------------------------- -// DESTRUCTOR - -static inline void mv_free(mv_t* pval) { - if ((pval->type) == MT_STRING && (pval->free_flags & FREE_ENTRY_VALUE)) { - free(pval->u.strv); - pval->u.strv = NULL; - } - pval->type = MT_ABSENT; -} - -// ---------------------------------------------------------------- -// For stack-clear: set to ABSENT, freeing previous value if necessary -static inline void mv_reset(mv_t* pval) { - if ((pval->type) == MT_STRING && (pval->free_flags & FREE_ENTRY_VALUE)) { - free(pval->u.strv); - } - *pval = mv_absent(); -} - -// ---------------------------------------------------------------- -// TYPE-TESTERS - -static inline int mv_is_string_or_empty(mv_t* pval) { - return pval->type == MT_STRING || pval->type == MT_EMPTY; -} -static inline int mv_is_numeric(mv_t* pval) { - return pval->type == MT_INT || pval->type == MT_FLOAT; -} -static inline int mv_is_int(mv_t* pval) { - return pval->type == MT_INT; -} -static inline int mv_is_float(mv_t* pval) { - return pval->type == MT_FLOAT; -} -static inline int mv_is_boolean(mv_t* pval) { - return pval->type == MT_BOOLEAN; -} -static inline int mv_is_string(mv_t* pval) { - return pval->type == MT_STRING || pval->type == MT_EMPTY; -} -static inline int mv_is_error(mv_t* pval) { - return pval->type == MT_ERROR; -} -static inline int mv_is_absent(mv_t* pval) { - return pval->type == MT_ABSENT; -} -static inline int mv_is_present(mv_t* pval) { - return pval->type != MT_ABSENT; -} -static inline int mv_is_empty(mv_t* pval) { - return pval->type == MT_EMPTY || (pval->type == MT_STRING && *pval->u.strv == 0); -} -static inline int mv_is_not_empty(mv_t* pval) { - return pval->type != MT_EMPTY; -} -static inline int mv_is_null(mv_t* pval) { - return mv_is_absent(pval) || mv_is_empty(pval); -} -static inline int mv_is_null_or_error(mv_t* pval) { - return mv_is_null(pval) || pval->type == MT_EMPTY; -} -static inline int mv_is_non_null(mv_t* pval) { - return !mv_is_null(pval); -} - -// ---------------------------------------------------------------- -// AUXILIARY METHODS - -char* mt_describe_type(int type); -char* mt_describe_type_simple(int type); - -// Allocates memory which the caller must free; does not modify the mlrval. -// Returns no reference to the mlrval's data. Suitable for getting data out of -// a mlrval which might be about to be freed. -char* mv_alloc_format_val(mv_t* pval); -char* mv_alloc_format_val_quoting_strings(mv_t* pval); - -// Returns a reference to the mlrval's data if the mlrval is MT_STRING. -// Does not modify the mlrval. Suitable only for read-only string-formatting -// of the mlrval while it still exists and hasn't been freed yet. -char* mv_maybe_alloc_format_val(mv_t* pval, char* pfree_flags); - -// If the mlrval is MT_STRING, returns that and invalidates the argument. -// This is suitable for baton-pass-out (end of evaluation chain). -char* mv_format_val(mv_t* pval, char* pfree_flags); - -// Output string includes type and value information (e.g. for debug). -// The caller must free the return value. -char* mv_describe_val(mv_t val); - -void mv_set_boolean_strict(mv_t* pval); -void mv_set_float_strict(mv_t* pval); -void mv_set_float_nullable(mv_t* pval); -void mv_set_int_nullable(mv_t* pval); - -// int or float: -void mv_set_number_nullable(mv_t* pval); -mv_t mv_scan_number_nullable(char* string); -mv_t mv_scan_number_or_die(char* string); - -// Each of the following three -// Type-inferencing for the following three functions, respectively: -// "x" => "x", "3" => "3" -// "x" => "x", "3" => 3.0 -// "x" => "x", "3" => 3 -// In common to all three: -// * Null string -> mv_absent -// * Empty string -> mv_empty -// * Non-numeric -> string-valued mlrval with storage pointing -// to the char* (no copy is done). -mv_t mv_ref_type_infer_string(char* string); -mv_t mv_ref_type_infer_string_or_float(char* string); -mv_t mv_ref_type_infer_string_or_float_or_int(char* string); -mv_t mv_copy_type_infer_string_or_float_or_int(char* string); // strdups if retval is MT_STRING - -#endif // MLRVAL_H diff --git a/c/lib/mtrand.c b/c/lib/mtrand.c deleted file mode 100644 index 0d2e9a4ab..000000000 --- a/c/lib/mtrand.c +++ /dev/null @@ -1,171 +0,0 @@ -// A C-program for MT19937, with initialization improved 2002/1/26. -// Coded by Takuji Nishimura and Makoto Matsumoto. -// -// Before using, initialize the state by using mtrand_init(seed) -// or mtrand_init_from_array(init_key, key_length). -// -// Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. The names of its contributors may not be used to endorse or promote -// products derived from this software without specific prior written -// permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Any feedback is very welcome. -// http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html -// email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) -// Real versions are due to Isaku Wada, added 2002-01-09. - -#include -#include -#include -#include "lib/mtrand.h" - -// ---------------------------------------------------------------- -// Period parameters -#define N 624 -#define M 397 -#define MATRIX_A 0x9908b0df // constant vector a -#define UPPER_MASK 0x80000000 // most significant w-r bits -#define LOWER_MASK 0x7fffffff // least significant r bits - -static unsigned mt[N]; // the array for the state vector -static int mti=N+1; // mti==N+1 means mt[N] is not initialized - -// ---------------------------------------------------------------- -void mtrand_init_default() -{ - struct timeval tv; - (void)gettimeofday(&tv, NULL); - mtrand_init((unsigned)tv.tv_sec ^ (unsigned)tv.tv_usec ^ (unsigned)getpid()); -} - -// ---------------------------------------------------------------- -// Initializes mt[N] with a seed. -void mtrand_init(unsigned s) -{ - mt[0]= s & 0xffffffff; - for (mti=1; mti> 30)) + mti); - // See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. In the previous - // versions, MSBs of the seed affect only MSBs of the array mt[]. - // 2002/01/09 modified by Makoto Matsumoto - mt[mti] &= 0xffffffff; // for >32 bit machines - } -} - -// ---------------------------------------------------------------- -// Initialize by an array with array-length: -// init_key is the array for initializing keys; -// key_length is its length. -void mtrand_init_from_array(unsigned init_key[], int key_length) -{ - int i, j, k; - mtrand_init(19650218); - i=1; j=0; - k = (N>key_length ? N : key_length); - for (; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525)) - + init_key[j] + j; // non linear - mt[i] &= 0xffffffff; // for WORDSIZE > 32 machines - i++; j++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } - if (j>=key_length) j=0; - } - for (k=N-1; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941)) - - i; // non linear - mt[i] &= 0xffffffff; // for WORDSIZE > 32 machines - i++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } - } - - mt[0] = 0x80000000; // MSB is 1, ensuring non-zero initial array -} - -// ---------------------------------------------------------------- -// Generates a uniformly distributed 32-bit integer. -unsigned get_mtrand_int32(void) -{ - unsigned y; - static unsigned mag01[2]={0x0, MATRIX_A}; - // mag01[x] = x * MATRIX_A for x=0,1 - - if (mti >= N) { // Generate N words at one time - int kk; - - if (mti == N+1) // If mtrand_init() has not been called, - mtrand_init(5489); // a default initial seed is used. - - for (kk=0;kk> 1) ^ mag01[y & 1]; - } - for (;kk> 1) ^ mag01[y & 1]; - } - y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); - mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 1]; - - mti = 0; - } - - y = mt[mti++]; - - // Tempering - y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680; - y ^= (y << 15) & 0xefc60000; - y ^= (y >> 18); - - return y; -} - -// ---------------------------------------------------------------- -// Generates a uniformly distributed 31-bit integer. -int get_mtrand_int31(void) -{ - return (int)(get_mtrand_int32()>>1); -} - -// ---------------------------------------------------------------- -// Generates a random number on [0,1)-real-interval. -double get_mtrand_float(void) -{ - return get_mtrand_int32()*(1.0/4294967296.0); - // divided by 2^32 -} - -// ---------------------------------------------------------------- -// Generates a random number on [0,1) with 53-bit resolution. -double get_mtrand_double(void) -{ - unsigned a = get_mtrand_int32() >> 5; - unsigned b = get_mtrand_int32() >> 6; - return (a*67108864.0+b) * (1.0/9007199254740992.0); -} diff --git a/c/lib/mtrand.h b/c/lib/mtrand.h deleted file mode 100644 index daf9dd01b..000000000 --- a/c/lib/mtrand.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef MTRAND_H -#define MTRAND_H - -void mtrand_init_default(); -void mtrand_init(unsigned s); -void mtrand_init_from_array(unsigned init_key[], int key_length); -unsigned get_mtrand_int32(void); -int get_mtrand_int31(void); -double get_mtrand_float(void); -double get_mtrand_double(void); - -#endif // MTRAND_H diff --git a/c/lib/mvfuncs.c b/c/lib/mvfuncs.c deleted file mode 100644 index 96faf463b..000000000 --- a/c/lib/mvfuncs.c +++ /dev/null @@ -1,2694 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrdatetime.h" -#include "lib/mlrregex.h" -#include "lib/mvfuncs.h" -#include "lib/utf8.h" -#include "lib/string_builder.h" - -// ================================================================ -// See important notes at the top of mlrval.h. -// ================================================================ - -typedef int mv_i_nn_comparator_func_t(mv_t* pa, mv_t* pb); -typedef int mv_i_xx_comparator_func_t(const mv_t* pa, const mv_t* pb); - -// ---------------------------------------------------------------- -// Keystroke-savers for disposition matrices: - -// Unary: -static mv_t _1u___(mv_t* pa) { - return *pa; -} -static mv_t _absn1(mv_t* pa) { - return mv_absent(); -} -static mv_t _emt1(mv_t* pa) { - return mv_empty(); -} -static mv_t _err1(mv_t* pa) { - return mv_error(); -} - -// Binary: -static mv_t _absn(mv_t* pa, mv_t* pb) { - return mv_absent(); -} -static mv_t _void(mv_t* pa, mv_t* pb) { - return mv_empty(); -} -static mv_t _erro(mv_t* pa, mv_t* pb) { - return mv_error(); -} - -static mv_t _1___(mv_t* pa, mv_t* pb) { - return *pa; -} -static mv_t _2___(mv_t* pa, mv_t* pb) { - return *pb; -} -static mv_t _1f__(mv_t* pa, mv_t* pb) { - mv_free(pb); - return *pa; -} -static mv_t _2f__(mv_t* pa, mv_t* pb) { - mv_free(pa); - return *pb; -} -static mv_t _s1__(mv_t* pa, mv_t* pb) { - return s_x_string_func(pa); -} -static mv_t _s2__(mv_t* pa, mv_t* pb) { - return s_x_string_func(pb); -} -static mv_t _f0__(mv_t* pa, mv_t* pb) { - return mv_from_float(0.0); -} -static mv_t _i0__(mv_t* pa, mv_t* pb) { - return mv_from_int(0LL); -} - -// ---------------------------------------------------------------- -static mv_t dot_strings(char* string1, char* string2) { - int len1 = strlen(string1); - int len2 = strlen(string2); - int len3 = len1 + len2 + 1; // for the null-terminator byte - char* string3 = mlr_malloc_or_die(len3); - strcpy(&string3[0], string1); - strcpy(&string3[len1], string2); - return mv_from_string_with_free(string3); -} - -mv_t dot_s_ss(mv_t* pval1, mv_t* pval2) { - mv_t rv = dot_strings(pval1->u.strv, pval2->u.strv); - mv_free(pval1); - mv_free(pval2); - return rv; -} - -mv_t dot_s_xs(mv_t* pval1, mv_t* pval2) { - mv_t sval1 = s_x_string_func(pval1); - mv_free(pval1); - mv_t rv = dot_strings(sval1.u.strv, pval2->u.strv); - mv_free(&sval1); - mv_free(pval2); - return rv; -} - -mv_t dot_s_sx(mv_t* pval1, mv_t* pval2) { - mv_t sval2 = s_x_string_func(pval2); - mv_free(pval2); - mv_t rv = dot_strings(pval1->u.strv, sval2.u.strv); - mv_free(pval1); - mv_free(&sval2); - return rv; -} - -mv_t dot_s_xx(mv_t* pval1, mv_t* pval2) { - mv_t sval1 = s_x_string_func(pval1); - mv_t sval2 = s_x_string_func(pval2); - mv_t rv = dot_strings(sval1.u.strv, sval2.u.strv); - mv_free(&sval1); - mv_free(&sval2); - return rv; -} - -static mv_binary_func_t* dot_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _void, _2___, _s2__, _s2__, _s2__}, - /*EMPTY*/ {_erro, _void, _void, _2___, _s2__, _s2__, _s2__}, - /*STRING*/ {_erro, _1___, _1___, dot_s_ss, dot_s_sx, dot_s_sx, dot_s_sx}, - /*INT*/ {_erro, _s1__, _s1__, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, - /*FLOAT*/ {_erro, _s1__, _s1__, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, - /*BOOL*/ {_erro, _s1__, _s1__, dot_s_xs, dot_s_xx, dot_s_xx, dot_s_xx}, - }; - -mv_t s_xx_dot_func(mv_t* pval1, mv_t* pval2) { return (dot_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -mv_t sub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - regex_t regex; - string_builder_t *psb = sb_alloc(MV_SB_ALLOC_LENGTH); - mv_t rv = sub_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), psb, pval3); - sb_free(psb); - regfree(®ex); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -// Example: -// * pval1->u.strv = "hello" -// * regex = "l+" -// * pval3->u.strv = "yyy" -// -// * len1 = 2 = length of "he" -// * olen2 = 2 = length of "ll" -// * nlen2 = 3 = length of "yyy" -// * len3 = 1 = length of "o" -// * len4 = 6 = 2+3+1 - -mv_t sub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3) { - int matched = FALSE; - int all_captured = FALSE; - char* input = pval1->u.strv; - char* output = regex_sub(input, pregex, psb, pval3->u.strv, &matched, &all_captured); - - mv_free(pval1); - mv_free(pval3); - return mv_from_string_with_free(output); -} - -// ---------------------------------------------------------------- -// Example: -// * pval1->u.strv = "hello" -// * regex = "l+" -// * pval3->u.strv = "yyy" -// -// * len1 = 2 = length of "he" -// * olen2 = 2 = length of "ll" -// * nlen2 = 3 = length of "yyy" -// * len3 = 1 = length of "o" -// * len4 = 6 = 2+3+1 - -mv_t gsub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - regex_t regex; - string_builder_t *psb = sb_alloc(MV_SB_ALLOC_LENGTH); - mv_t rv = gsub_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), psb, pval3); - sb_free(psb); - regfree(®ex); - mv_free(pval2); - return rv; -} - -mv_t gsub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3) { - int matched = FALSE; - int all_captured = FALSE; - char* input = pval1->u.strv; - char free_flags = NO_FREE; - char* output = regex_gsub(input, pregex, psb, pval3->u.strv, &matched, &all_captured, &free_flags); - - mv_free(pval1); - mv_free(pval3); - return mv_from_string(output, free_flags); -} - -// ---------------------------------------------------------------- -mv_t regextract_no_precomp_func(mv_t* pval1, mv_t* pval2) { - regex_t regex; - mv_t rv = regextract_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0)); - regfree(®ex); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -mv_t regextract_precomp_func(mv_t* pval1, regex_t* pregex) { - char* input = pval1->u.strv; - char* output = regextract(input, pregex); - - mv_free(pval1); - if (output == NULL) { - return mv_absent(); - } else { - return mv_from_string_with_free(output); - } -} - -// ---------------------------------------------------------------- -mv_t regextract_or_else_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - regex_t regex; - mv_t rv = regextract_or_else_precomp_func(pval1, regcomp_or_die(®ex, pval2->u.strv, 0), pval3); - regfree(®ex); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -mv_t regextract_or_else_precomp_func(mv_t* pval1, regex_t* pregex, mv_t* pval3) { - char* input = pval1->u.strv; - char* default_value = pval3->u.strv; - char* output = regextract_or_else(input, pregex, default_value); - - mv_free(pval1); - mv_free(pval3); - return mv_from_string_with_free(output); -} - -// ---------------------------------------------------------------- -// String-substitution with no regexes or special characters. -// It is assumed that all inputs have already been checked to be strings. -mv_t s_sss_ssub_func(mv_t* pmvinput, mv_t* pmvold, mv_t* pmvnew) { - char* pinput = pmvinput->u.strv; - char* pold = pmvold->u.strv; - char* pnew = pmvnew->u.strv; - - char* pmatch = strstr(pinput, pold); - - if (pmatch == NULL) { - mv_free(pmvold); - mv_free(pmvnew); - return *pmvinput; - } else { - // Example: - // input: aaaaOOObbbbb - // old: OOO - // new: NNNNN - // Output length: strlen(aaaa) + strlen(NNNNN) + strlen(bbbbb) - - // Compute lengths - int input_length = strlen(pinput); - int old_length = strlen(pold); - int new_length = strlen(pnew); - int output_length = input_length - old_length + new_length + 1; - int pre_length = pmatch - pinput; // the "aaaa" part - int post_length = input_length - pre_length - old_length; // the "bbbbb" part - - // Allocate output - char* poutput = mlr_malloc_or_die(output_length); - char* p = poutput; - - // Populate output - strncpy(p, pinput, pre_length); - p += pre_length; - - strcpy(p, pnew); - p += new_length; - - strcpy(p, &pinput[pre_length + old_length]); - p += post_length; - - *p = 0; - - mv_free(pmvinput); - mv_free(pmvold); - mv_free(pmvnew); - return mv_from_string(poutput, FREE_ENTRY_VALUE); - } -} - -// ---------------------------------------------------------------- -// https://en.wikipedia.org/wiki/Hamming_weight - -static const unsigned long long _m1 = 0x5555555555555555; -static const unsigned long long _m2 = 0x3333333333333333; -static const unsigned long long _m4 = 0x0f0f0f0f0f0f0f0f; -static const unsigned long long _m8 = 0x00ff00ff00ff00ff; -static const unsigned long long _m16 = 0x0000ffff0000ffff; -static const unsigned long long _m32 = 0x00000000ffffffff; - -mv_t i_i_bitcount_func(mv_t* pval1) { - unsigned long long a = pval1->u.intv; - a = (a & _m1 ) + ((a >> 1) & _m1 ); - a = (a & _m2 ) + ((a >> 2) & _m2 ); - a = (a & _m4 ) + ((a >> 4) & _m4 ); - a = (a & _m8 ) + ((a >> 8) & _m8 ); - a = (a & _m16) + ((a >> 16) & _m16); - a = (a & _m32) + ((a >> 32) & _m32); - return mv_from_int((long long)a); -} - -// ---------------------------------------------------------------- -mv_t i_iii_modadd_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - long long m = pval3->u.intv; - if (m <= 0LL) - return mv_error(); - long long a = pval1->u.intv % m; - if (a < 0LL) - a += m; // crazy C-language mod operator - long long b = pval2->u.intv % m; - if (b < 0LL) - b += m; - long long c = (a + b) % m; - return mv_from_int(c); -} - -mv_t i_iii_modsub_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - long long m = pval3->u.intv; - if (m <= 0LL) - return mv_error(); - long long a = pval1->u.intv % m; - if (a < 0LL) - a += m; // crazy C-language mod operator - long long b = pval2->u.intv % m; - if (b < 0LL) - b += m; - long long c = (a - b) % m; - if (c < 0LL) - c += m; - return mv_from_int(c); -} - -mv_t i_iii_modmul_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - long long m = pval3->u.intv; - if (m <= 0LL) - return mv_error(); - long long a = pval1->u.intv % m; - if (a < 0LL) - a += m; // crazy C-language mod operator - long long b = pval2->u.intv % m; - if (b < 0LL) - b += m; - long long c = (a * b) % m; - return mv_from_int(c); -} - -mv_t i_iii_modexp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - long long m = pval3->u.intv; - if (m <= 0LL) - return mv_error(); - long long a = pval1->u.intv % m; - if (a < 0LL) - a += m; // crazy C-language mod operator - - long long e = pval2->u.intv; - - long long c = 1LL; - if (e == 1LL) { - c = a; - } else if (e == 0LL) { - c = 1LL; - } else if (e > 0) { - long long ap = a; - c = 1LL; - unsigned long long u = (unsigned long long)e; - - // repeated-squaring algorithm - while (u != 0) { - if ((u & 1LL) == 1LL) { - c = (c * ap) % m; - } - u >>= 1; - ap = (ap * ap) % m; - } - } else { - return mv_error(); - } - - return mv_from_int(c); -} - -// ---------------------------------------------------------------- -mv_t i_s_strlen_func(mv_t* pval1) { - mv_t rv = mv_from_int(strlen_for_utf8_display(pval1->u.strv)); - mv_free(pval1); - return rv; -} - -mv_t s_x_typeof_func(mv_t* pval1) { - mv_t rv = mv_from_string(mt_describe_type(pval1->type), NO_FREE); - mv_free(pval1); - return rv; -} - -// ---------------------------------------------------------------- -mv_t s_s_tolower_func(mv_t* pval1) { - char* string = mlr_strdup_or_die(pval1->u.strv); -#if 0 - // ASCII only - for (char* c = string; *c; c++) - *c = tolower((unsigned char)*c); -#else - // UTF-8 - utf8lwr(string); -#endif - mv_free(pval1); - pval1->u.strv = NULL; - - return mv_from_string_with_free(string); -} - -mv_t s_s_toupper_func(mv_t* pval1) { - char* string = mlr_strdup_or_die(pval1->u.strv); -#if 0 - // ASCII only - for (char* c = string; *c; c++) - *c = toupper((unsigned char)*c); -#else - // UTF-8 - utf8upr(string); -#endif - mv_free(pval1); - pval1->u.strv = NULL; - - return mv_from_string_with_free(string); -} - -mv_t s_s_capitalize_func(mv_t* pval1) { - char* string = mlr_strdup_or_die(pval1->u.strv); - - if (*string) { -#if 0 - // ASCII - *string = toupper((unsigned char)*string); -#else - // UTF-8 - utf8upr1(string); -#endif - } - - mv_free(pval1); - pval1->u.strv = NULL; - - return mv_from_string_with_free(string); -} - -mv_t s_s_system_func(mv_t* pval1) { - char* cmd = pval1->u.strv; - - mv_t retval = mv_from_string_no_free("error-running-system-command"); - string_builder_t* psb = sb_alloc(100); - char buffer[128]; - FILE* pipe = popen(cmd, "r"); - if (pipe != NULL) { - while (fgets(buffer, sizeof buffer, pipe) != NULL) { - sb_append_string(psb, buffer); - } - pclose(pipe); - char* output_string = sb_finish(psb); - - // xxx make a windows-friendly lib func for chomp - int len = strlen(output_string); - if (len > 0) { - if (output_string[len-1] == '\n') { - output_string[len-1] = 0; - } - } - - retval = mv_from_string_with_free(output_string); - } - sb_free(psb); - - mv_free(pval1); - pval1->u.strv = NULL; - - return retval; -} - -mv_t s_si_truncate_func(mv_t* pval1, mv_t* pval2) { - char* string = pval1->u.strv; - int len = strlen(string); - int maxlen = pval2->u.intv; - - if (len <= maxlen) { - return *pval1; - } else { - char* buf = mlr_malloc_or_die(maxlen+1); - strncpy(buf, string, maxlen); - buf[maxlen] = 0; - mv_free(pval1); - pval1->u.strv = NULL; - return mv_from_string_with_free(buf); - } -} - -// ---------------------------------------------------------------- -mv_t s_s_lstrip_func(mv_t* pval1) { - if (!isspace(pval1->u.strv[0])) { - return *pval1; - } else { - char* p = pval1->u.strv; - while (isspace(*p)) { - p++; - } - char* retval = mlr_strdup_or_die(p); - mv_free(pval1); - return mv_from_string(retval, FREE_ENTRY_VALUE); - } -} - -mv_t s_s_rstrip_func(mv_t* pval1) { - char* start = pval1->u.strv; - int oldlen = strlen(start); - char* last_non_space = &start[oldlen-1]; - while ((start <= last_non_space) && isspace(*last_non_space)) - last_non_space--; - if (last_non_space < start) { - mv_free(pval1); - return mv_empty(); - } else { - int newlen = (last_non_space - start) + 1; - char* retval = mlr_malloc_or_die(newlen + 1); - memcpy(retval, start, newlen); - retval[newlen] = 0; - mv_free(pval1); - return mv_from_string(retval, FREE_ENTRY_VALUE); - } -} - -mv_t s_s_strip_func(mv_t* pval1) { - mv_t temp = s_s_rstrip_func(pval1); - return s_s_lstrip_func(&temp); -} - -mv_t s_s_collapse_whitespace_func(mv_t* pval1) { - int len = strlen(pval1->u.strv); - char* retval = mlr_malloc_or_die(len+1); - char* pdst = retval; - int last_was_space = FALSE; - for (char* psrc = pval1->u.strv; *psrc; psrc++) { - int current_is_space = isspace(*psrc); - if (last_was_space && current_is_space) { - } else { - *pdst = *psrc; - pdst++; - } - last_was_space = current_is_space; - } - *pdst = 0; - mv_free(pval1); - return mv_from_string(retval, FREE_ENTRY_VALUE); -} - -mv_t s_s_clean_whitespace_func(mv_t* pval1) { - mv_t temp = s_s_collapse_whitespace_func(pval1); - return s_s_strip_func(&temp); -} - -// ---------------------------------------------------------------- -// Precondition: psec is either int or float. -mv_t time_string_from_seconds(mv_t* psec, char* format, - timezone_handling_t timezone_handling) -{ - double seconds_since_the_epoch = 0.0; - if (psec->type == MT_FLOAT) { - if (isinf(psec->u.fltv) || isnan(psec->u.fltv)) { - return mv_error(); - } - seconds_since_the_epoch = psec->u.fltv; - } else { - seconds_since_the_epoch = psec->u.intv; - } - - char* string = mlr_alloc_time_string_from_seconds(seconds_since_the_epoch, format, - timezone_handling); - - return mv_from_string_with_free(string); -} - -// ---------------------------------------------------------------- -static mv_t sec2gmt_s_n(mv_t* pa) { - return time_string_from_seconds(pa, ISO8601_TIME_FORMAT, TIMEZONE_HANDLING_GMT); -} - -static mv_unary_func_t* sec2gmt_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _1u___, - /*INT*/ sec2gmt_s_n, - /*FLOAT*/ sec2gmt_s_n, - /*BOOL*/ _1u___, -}; -mv_t s_x_sec2gmt_func(mv_t* pval1) { return (sec2gmt_dispositions[pval1->type])(pval1); } - -// Precondition: val2 is already asserted int -static mv_t sec2gmt_s_ni(mv_t* pa, mv_t* pb) { - switch (pb->u.intv) { - case 1: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_1, TIMEZONE_HANDLING_GMT); break; - case 2: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_2, TIMEZONE_HANDLING_GMT); break; - case 3: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_3, TIMEZONE_HANDLING_GMT); break; - case 4: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_4, TIMEZONE_HANDLING_GMT); break; - case 5: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_5, TIMEZONE_HANDLING_GMT); break; - case 6: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_6, TIMEZONE_HANDLING_GMT); break; - case 7: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_7, TIMEZONE_HANDLING_GMT); break; - case 8: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_8, TIMEZONE_HANDLING_GMT); break; - case 9: return time_string_from_seconds(pa, ISO8601_TIME_FORMAT_9, TIMEZONE_HANDLING_GMT); break; - default: return mv_error(); - } -} - -static mv_binary_func_t* sec2gmtn_dispositions[MT_DIM] = { - /*ERROR*/ _erro, - /*ABSENT*/ _absn, - /*EMPTY*/ _void, - /*STRING*/ _1___, - /*INT*/ sec2gmt_s_ni, - /*FLOAT*/ sec2gmt_s_ni, - /*BOOL*/ _1___, -}; -mv_t s_xi_sec2gmt_func(mv_t* pval1, mv_t* pval2) { return (sec2gmtn_dispositions[pval1->type])(pval1, pval2); } - -// ---------------------------------------------------------------- -static mv_t sec2gmtdate_s_n(mv_t* pa) { - return time_string_from_seconds(pa, ISO8601_DATE_FORMAT, TIMEZONE_HANDLING_GMT); -} - -static mv_unary_func_t* sec2gmtdate_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _1u___, - /*INT*/ sec2gmtdate_s_n, - /*FLOAT*/ sec2gmtdate_s_n, - /*BOOL*/ _1u___, -}; - -mv_t s_x_sec2gmtdate_func(mv_t* pval1) { return (sec2gmtdate_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t sec2localtime_s_n(mv_t* pa) { - return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT, TIMEZONE_HANDLING_LOCAL); -} - -static mv_unary_func_t* sec2localtime_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _1u___, - /*INT*/ sec2localtime_s_n, - /*FLOAT*/ sec2localtime_s_n, - /*BOOL*/ _1u___, -}; -mv_t s_x_sec2localtime_func(mv_t* pval1) { return (sec2localtime_dispositions[pval1->type])(pval1); } - -// Precondition: val2 is already asserted int -static mv_t sec2localtime_s_ni(mv_t* pa, mv_t* pb) { - switch (pb->u.intv) { - case 1: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_1, TIMEZONE_HANDLING_LOCAL); break; - case 2: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_2, TIMEZONE_HANDLING_LOCAL); break; - case 3: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_3, TIMEZONE_HANDLING_LOCAL); break; - case 4: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_4, TIMEZONE_HANDLING_LOCAL); break; - case 5: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_5, TIMEZONE_HANDLING_LOCAL); break; - case 6: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_6, TIMEZONE_HANDLING_LOCAL); break; - case 7: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_7, TIMEZONE_HANDLING_LOCAL); break; - case 8: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_8, TIMEZONE_HANDLING_LOCAL); break; - case 9: return time_string_from_seconds(pa, ISO8601_LOCAL_TIME_FORMAT_9, TIMEZONE_HANDLING_LOCAL); break; - default: return mv_error(); - } -} - -static mv_binary_func_t* sec2localn_dispositions[MT_DIM] = { - /*ERROR*/ _erro, - /*ABSENT*/ _absn, - /*EMPTY*/ _void, - /*STRING*/ _1___, - /*INT*/ sec2localtime_s_ni, - /*FLOAT*/ sec2localtime_s_ni, - /*BOOL*/ _1___, -}; -mv_t s_xi_sec2localtime_func(mv_t* pval1, mv_t* pval2) { return (sec2localn_dispositions[pval1->type])(pval1, pval2); } - -// ---------------------------------------------------------------- -static mv_t sec2localdate_s_n(mv_t* pa) { - return time_string_from_seconds(pa, ISO8601_DATE_FORMAT, TIMEZONE_HANDLING_LOCAL); -} - -static mv_unary_func_t* sec2localdate_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _1u___, - /*INT*/ sec2localdate_s_n, - /*FLOAT*/ sec2localdate_s_n, - /*BOOL*/ _1u___, -}; - -mv_t s_x_sec2localdate_func(mv_t* pval1) { return (sec2localdate_dispositions[pval1->type])(pval1); } - - -// ---------------------------------------------------------------- -mv_t s_ns_strftime_func(mv_t* pval1, mv_t* pval2) { - mv_t rv = time_string_from_seconds(pval1, pval2->u.strv, TIMEZONE_HANDLING_GMT); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -mv_t s_ns_strftime_local_func(mv_t* pval1, mv_t* pval2) { - mv_t rv = time_string_from_seconds(pval1, pval2->u.strv, TIMEZONE_HANDLING_LOCAL); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -static mv_t seconds_from_time_string(char* string, char* format, - timezone_handling_t timezone_handling) -{ - if (*string == '\0') { - return mv_empty(); - } else { - return mv_from_float(mlr_seconds_from_time_string(string, format, timezone_handling)); - } -} - -mv_t i_s_gmt2sec_func(mv_t* pval1) { - mv_t rv = seconds_from_time_string(pval1->u.strv, ISO8601_TIME_FORMAT, TIMEZONE_HANDLING_GMT); - mv_free(pval1); - return rv; -} - -mv_t i_s_localtime2sec_func(mv_t* pval1) { - mv_t rv = seconds_from_time_string(pval1->u.strv, ISO8601_LOCAL_TIME_FORMAT, TIMEZONE_HANDLING_LOCAL); - mv_free(pval1); - return rv; -} - -mv_t i_ss_strptime_func(mv_t* pval1, mv_t* pval2) { - mv_t rv = seconds_from_time_string(pval1->u.strv, pval2->u.strv, TIMEZONE_HANDLING_GMT); - mv_free(pval1); - mv_free(pval2); - return rv; -} - -mv_t i_ss_strptime_local_func(mv_t* pval1, mv_t* pval2) { - mv_t rv = seconds_from_time_string(pval1->u.strv, pval2->u.strv, TIMEZONE_HANDLING_LOCAL); - mv_free(pval1); - mv_free(pval2); - return rv; -} - -// ---------------------------------------------------------------- -static void split_ull_to_hms(long long u, long long* ph, long long* pm, long long* ps) { - long long h = 0LL, m = 0LL, s = 0LL; - long long sign = 1LL; - if (u < 0LL) { - u = -u; - sign = -1LL; - } - s = u % 60LL; - u = u / 60LL; - if (u == 0LL) { - s = s * sign; - } else { - m = u % 60LL; - u = u / 60LL; - if (u == 0LL) { - m = m * sign; - } else { - h = u * sign; - } - } - *ph = h; - *pm = m; - *ps = s; -} - -static void split_ull_to_dhms(long long u, long long* pd, long long* ph, long long* pm, long long* ps) { - long long d = 0LL, h = 0LL, m = 0LL, s = 0LL; - long long sign = 1LL; - if (u < 0LL) { - u = -u; - sign = -1LL; - } - s = u % 60LL; - u = u / 60LL; - if (u == 0LL) { - s = s * sign; - } else { - m = u % 60LL; - u = u / 60LL; - if (u == 0LL) { - m = m * sign; - } else { - h = u % 24LL; - u = u / 24LL; - if (u == 0LL) { - h = h * sign; - } else { - d = u * sign; - } - } - } - *pd = d; - *ph = h; - *pm = m; - *ps = s; -} - -mv_t s_i_sec2hms_func(mv_t* pval1) { - long long u = pval1->u.intv; - long long h, m, s; - char* fmt = "%02lld:%02lld:%02lld"; - if (u < 0) { - u = -u; - fmt = "-%02lld:%02lld:%02lld"; - } - split_ull_to_hms(u, &h, &m, &s); - int n = snprintf(NULL, 0, fmt, h, m, s); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, h, m, s); - return mv_from_string_with_free(string); -} - -mv_t s_f_fsec2hms_func(mv_t* pval1) { - double v = fabs(pval1->u.fltv); - long long h, m, s; - char* fmt = "%lld:%02lld:%09.6lf"; - long long u = (long long)trunc(v); - double f = v - u; - if (pval1->u.fltv < 0.0) { - fmt = "-%02lld:%02lld:%09.6lf"; - } - split_ull_to_hms(u, &h, &m, &s); - int n = snprintf(NULL, 0, fmt, h, m, s+f); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, h, m, s+f); - return mv_from_string_with_free(string); -} - -mv_t s_i_sec2dhms_func(mv_t* pval1) { - long long u = pval1->u.intv; - long long d, h, m, s; - split_ull_to_dhms(u, &d, &h, &m, &s); - if (d != 0.0) { - char* fmt = "%lldd%02lldh%02lldm%02llds"; - int n = snprintf(NULL, 0, fmt, d, h, m, s); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, d, h, m, s); - return mv_from_string_with_free(string); - } else if (h != 0.0) { - char* fmt = "%lldh%02lldm%02llds"; - int n = snprintf(NULL, 0, fmt, h, m, s); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, h, m, s); - return mv_from_string_with_free(string); - } else if (m != 0.0) { - char* fmt = "%lldm%02llds"; - int n = snprintf(NULL, 0, fmt, m, s); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, m, s); - return mv_from_string_with_free(string); - } else { - char* fmt = "%llds"; - int n = snprintf(NULL, 0, fmt, s); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, s); - return mv_from_string_with_free(string); - } -} - -mv_t s_f_fsec2dhms_func(mv_t* pval1) { - double v = fabs(pval1->u.fltv); - long long sign = pval1->u.fltv < 0.0 ? -1LL : 1LL; - long long d, h, m, s; - long long u = (long long)trunc(v); - double f = v - u; - split_ull_to_dhms(u, &d, &h, &m, &s); - if (d != 0.0) { - d = sign * d; - char* fmt = "%lldd%02lldh%02lldm%09.6lfs"; - int n = snprintf(NULL, 0, fmt, d, h, m, s+f); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, d, h, m, s+f); - return mv_from_string_with_free(string); - } else if (h != 0.0) { - h = sign * h; - char* fmt = "%lldh%02lldm%09.6lfs"; - int n = snprintf(NULL, 0, fmt, h, m, s+f); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, h, m, s+f); - return mv_from_string_with_free(string); - } else if (m != 0.0) { - m = sign * m; - char* fmt = "%lldm%09.6lfs"; - int n = snprintf(NULL, 0, fmt, m, s+f); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, m, s+f); - return mv_from_string_with_free(string); - } else { - s = sign * s; - f = sign * f; - char* fmt = "%.6lfs"; - int n = snprintf(NULL, 0, fmt, s+f); - char* string = mlr_malloc_or_die(n+1); - sprintf(string, fmt, s+f); - return mv_from_string_with_free(string); - } -} - -// ---------------------------------------------------------------- -mv_t i_s_hms2sec_func(mv_t* pval1) { - long long h = 0LL, m = 0LL, s = 0LL; - long long sec = 0LL; - char* p = pval1->u.strv; - long long sign = 1LL; - if (*p == '-') { - p++; - sign = -1LL; - } - if (sscanf(p, "%lld:%lld:%lld", &h, &m, &s) == 3) { - if (h >= 0LL) - sec = 3600LL*h + 60LL*m + s; - else - sec = -(-3600LL*h + 60LL*m + s); - } else if (sscanf(p, "%lld:%lld", &m, &s) == 2) { - if (m >= 0LL) - sec = 60LL*m + s; - else - sec = -(-60LL*m + s); - } else if (sscanf(p, "%lld", &s) == 1) { - sec = s; - } else { - mv_free(pval1); - return mv_error(); - } - mv_free(pval1); - return mv_from_int(sec * sign); -} - -mv_t f_s_hms2fsec_func(mv_t* pval1) { - long long h = 0LL, m = 0LL; - double s = 0.0; - double sec = 0.0; - char* p = pval1->u.strv; - double sign = 1.0; - if (*p == '-') { - p++; - sign = -1.0; - } - if (sscanf(p, "%lld:%lld:%lf", &h, &m, &s) == 3) { - sec = 3600*h + 60*m + s; - } else if (sscanf(p, "%lld:%lf", &m, &s) == 2) { - sec = 60*m + s; - } else if (sscanf(p, "%lf", &s) == 2) { - sec = s; - } else { - mv_free(pval1); - return mv_error(); - } - mv_free(pval1); - return mv_from_float(sec * sign); -} - -mv_t i_s_dhms2sec_func(mv_t* pval1) { - long long d = 0LL, h = 0LL, m = 0LL, s = 0LL; - long long sec = 0LL; - char* p = pval1->u.strv; - long long sign = 1LL; - if (*p == '-') { - p++; - sign = -1LL; - } - if (sscanf(p, "%lldd%lldh%lldm%llds", &d, &h, &m, &s) == 4) { - sec = 86400*d + 3600*h + 60*m + s; - } else if (sscanf(p, "%lldh%lldm%llds", &h, &m, &s) == 3) { - sec = 3600*h + 60*m + s; - } else if (sscanf(p, "%lldm%llds", &m, &s) == 2) { - sec = 60*m + s; - } else if (sscanf(p, "%llds", &s) == 1) { - sec = s; - } else { - mv_free(pval1); - return mv_error(); - } - mv_free(pval1); - return mv_from_int(sec * sign); -} - -mv_t f_s_dhms2fsec_func(mv_t* pval1) { - long long d = 0LL, h = 0LL, m = 0LL; - double s = 0.0; - double sec = 0.0; - char* p = pval1->u.strv; - long long sign = 1.0; - if (*p == '-') { - p++; - sign = -1.0; - } - if (sscanf(p, "%lldd%lldh%lldm%lfs", &d, &h, &m, &s) == 4) { - sec = 86400*d + 3600*h + 60*m + s; - } else if (sscanf(p, "%lldh%lldm%lfs", &h, &m, &s) == 3) { - sec = 3600*h + 60*m + s; - } else if (sscanf(p, "%lldm%lfs", &m, &s) == 2) { - sec = 60*m + s; - } else if (sscanf(p, "%lfs", &s) == 1) { - sec = s; - } else { - mv_free(pval1); - return mv_error(); - } - mv_free(pval1); - return mv_from_float(sec * sign); -} - -// ================================================================ -static mv_t plus_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a + b); -} -static mv_t plus_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a + b); -} -static mv_t plus_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a + b); -} -// Adds & subtracts overflow by at most one bit so it suffices to check -// sign-changes. -static mv_t plus_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - long long c = a + b; - - int overflowed = FALSE; - if (a > 0LL) { - if (b > 0LL && c < 0LL) - overflowed = TRUE; - } else if (a < 0LL) { - if (b < 0LL && c > 0LL) - overflowed = TRUE; - } - - if (overflowed) { - return mv_from_float((double)a + (double)b); - } else { - return mv_from_int(c); - } -} - -static mv_binary_func_t* plus_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, plus_n_ii, plus_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, plus_f_fi, plus_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_plus_func(mv_t* pval1, mv_t* pval2) { return (plus_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t minus_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a - b); -} -static mv_t minus_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a - b); -} -static mv_t minus_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a - b); -} -// Adds & subtracts overflow by at most one bit so it suffices to check -// sign-changes. -static mv_t minus_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - long long c = a - b; - - int overflowed = FALSE; - if (a > 0LL) { - if (b < 0LL && c < 0LL) - overflowed = TRUE; - } else if (a < 0LL) { - if (b > 0LL && c > 0LL) - overflowed = TRUE; - } - - if (overflowed) { - return mv_from_float((double)a - (double)b); - } else { - return mv_from_int(c); - } -} - -static mv_binary_func_t* minus_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, minus_n_ii, minus_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, minus_f_fi, minus_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_minus_func(mv_t* pval1, mv_t* pval2) { return (minus_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t times_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a * b); -} -static mv_t times_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a * b); -} -static mv_t times_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a * b); -} -// Unlike adds & subtracts which overflow by at most one bit, multiplies can -// overflow by a word size. Thus detecting sign-changes does not suffice to -// detect overflow. Instead we test whether the floating-point product exceeds -// the representable integer range. Now 64-bit integers have 64-bit precision -// while IEEE-doubles have only 52-bit mantissas -- so, 53 bits including -// implicit leading one. -// -// The following experiment explicitly demonstrates the resolution at this range: -// -// 64-bit integer 64-bit integer Casted to double Back to 64-bit -// in hex in decimal integer -// 0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800 -// 0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800 -// 0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00 -// 0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00 -// 0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00 -// 0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000 -// 0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000 -// 0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000 -// -// That is, we cannot check an integer product to see if it is greater than -// 2**63-1 (or is less than -2**63) using integer arithmetic (it may have -// already overflowed) *or* using double-precision (granularity). Instead we -// check if the absolute value of the product exceeds the largest representable -// double less than 2**63. (An alterative would be to do all integer multiplies -// using handcrafted multi-word 128-bit arithmetic). -static mv_t times_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - - double d = (double)a * (double)b; - if (fabs(d) > 9223372036854774784.0) { - return mv_from_float(d); - } else { - return mv_from_int(a * b); - } -} - -static mv_binary_func_t* times_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, times_n_ii, times_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, times_f_fi, times_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_times_func(mv_t* pval1, mv_t* pval2) { return (times_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t divide_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a / b); -} -static mv_t divide_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a / b); -} -static mv_t divide_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a / b); -} -static mv_t divide_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero - return mv_from_float((double)a / (double)b); - } - long long r = a % b; - // Pythonic division, not C division. - if (r == 0LL) { - return mv_from_int(a / b); - } else { - return mv_from_float((double)a / (double)b); - } -} - -static mv_binary_func_t* divide_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _i0__, _f0__, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, divide_n_ii, divide_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, divide_f_fi, divide_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_divide_func(mv_t* pval1, mv_t* pval2) { return (divide_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t idiv_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(floor(a / b)); -} -static mv_t idiv_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(floor(a / b)); -} -static mv_t idiv_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(floor(a / b)); -} -static mv_t idiv_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero - return mv_from_float((double)a / (double)b); - } - // Pythonic division, not C division. - long long q = a / b; - long long r = a % b; - if (a < 0) { - if (b > 0) { - if (r != 0) - q--; - } - } else { - if (b < 0) { - if (r != 0) - q--; - } - } - return mv_from_int(q); -} - -static mv_binary_func_t* idiv_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _i0__, _f0__, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, idiv_i_ii, idiv_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, idiv_f_fi, idiv_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_int_divide_func(mv_t* pval1, mv_t* pval2) { - return (idiv_dispositions[pval1->type][pval2->type])(pval1,pval2); -} - -// ================================================================ -static mv_t oplus_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a + b); -} -static mv_t oplus_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a + b); -} -static mv_t oplus_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a + b); -} -static mv_t oplus_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - long long c = a + b; - return mv_from_int(c); -} - -static mv_binary_func_t* oplus_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, oplus_i_ii, oplus_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, oplus_f_fi, oplus_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_oplus_func(mv_t* pval1, mv_t* pval2) { return (oplus_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t ominus_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a - b); -} -static mv_t ominus_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a - b); -} -static mv_t ominus_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a - b); -} -static mv_t ominus_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - long long c = a - b; - return mv_from_int(c); -} - -static mv_binary_func_t* ominus_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, ominus_n_ii, ominus_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, ominus_f_fi, ominus_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_ominus_func(mv_t* pval1, mv_t* pval2) { return (ominus_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t otimes_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a * b); -} -static mv_t otimes_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a * b); -} -static mv_t otimes_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a * b); -} -static mv_t otimes_n_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - return mv_from_int(a * b); -} - -static mv_binary_func_t* otimes_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _2___, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, otimes_n_ii, otimes_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, otimes_f_fi, otimes_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_otimes_func(mv_t* pval1, mv_t* pval2) { return (otimes_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t odivide_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a / b); -} -static mv_t odivide_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a / b); -} -static mv_t odivide_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a / b); -} -static mv_t odivide_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - return mv_from_int(a / b); -} - -static mv_binary_func_t* odivide_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _i0__, _f0__, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, odivide_i_ii, odivide_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, odivide_f_fi, odivide_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_odivide_func(mv_t* pval1, mv_t* pval2) { return (odivide_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t oidiv_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(floor(a / b)); -} -static mv_t oidiv_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(floor(a / b)); -} -static mv_t oidiv_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(floor(a / b)); -} -static mv_t oidiv_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - - // Pythonic division, not C division. - long long q = a / b; - long long r = a % b; - if (a < 0) { - if (b > 0) { - if (r != 0) - q--; - } - } else { - if (b < 0) { - if (r != 0) - q--; - } - } - return mv_from_int(q); -} - -static mv_binary_func_t* oidiv_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _i0__, _f0__, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, oidiv_i_ii, oidiv_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, oidiv_f_fi, oidiv_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_int_odivide_func(mv_t* pval1, mv_t* pval2) { - return (oidiv_dispositions[pval1->type][pval2->type])(pval1,pval2); -} - -// ================================================================ -static mv_t mod_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(a - b * floor(a / b)); -} -static mv_t mod_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(a - b * floor(a / b)); -} -static mv_t mod_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(a - b * floor(a / b)); -} -static mv_t mod_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - if (b == 0LL) { // Compute inf/nan as with floats rather than fatal runtime FPE on integer divide by zero - return mv_from_float((double)a / (double)b); - } - long long u = a % b; - // Pythonic division, not C division. - if (a >= 0LL) { - if (b < 0LL) { - u += b; - } - } else { - if (b >= 0LL) { - u += b; - } - } - return mv_from_int(u); -} - -static mv_binary_func_t* mod_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _i0__, _f0__, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, mod_i_ii, mod_f_if, _erro}, - /*FLOAT*/ {_erro, _1___, _void, _erro, mod_f_fi, mod_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_mod_func(mv_t* pval1, mv_t* pval2) { - return (mod_dispositions[pval1->type][pval2->type])(pval1,pval2); -} - -// ---------------------------------------------------------------- -static mv_t upos_i_i(mv_t* pa) { - return *pa; -} -static mv_t upos_f_f(mv_t* pa) { - return *pa; -} - -static mv_unary_func_t* upos_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ upos_i_i, - /*FLOAT*/ upos_f_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_upos_func(mv_t* pval1) { return (upos_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t uneg_i_i(mv_t* pa) { - return mv_from_int(-pa->u.intv); -} -static mv_t uneg_f_f(mv_t* pa) { - return mv_from_float(-pa->u.fltv); -} - -static mv_unary_func_t* uneg_disnegitions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ uneg_i_i, - /*FLOAT*/ uneg_f_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_uneg_func(mv_t* pval1) { return (uneg_disnegitions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t abs_n_f(mv_t* pa) { - return mv_from_float(fabs(pa->u.fltv)); -} -static mv_t abs_n_i(mv_t* pa) { - return mv_from_int(pa->u.intv < 0LL ? -pa->u.intv : pa->u.intv); -} - -static mv_unary_func_t* abs_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ abs_n_i, - /*FLOAT*/ abs_n_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_abs_func(mv_t* pval1) { return (abs_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t sgn_n_f(mv_t* pa) { - if (pa->u.fltv > 0.0) - return mv_from_float(1.0); - if (pa->u.fltv < 0.0) - return mv_from_float(-1.0); - return mv_from_float(0.0); -} -static mv_t sgn_n_i(mv_t* pa) { - if (pa->u.intv > 0LL) - return mv_from_int(1LL); - if (pa->u.intv < 0LL) - return mv_from_int(-1LL); - return mv_from_int(0LL); -} - -static mv_unary_func_t* sgn_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ sgn_n_i, - /*FLOAT*/ sgn_n_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_sgn_func(mv_t* pval1) { return (sgn_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t ceil_n_f(mv_t* pa) { - return mv_from_float(ceil(pa->u.fltv)); -} -static mv_t ceil_n_i(mv_t* pa) { - return mv_from_int(pa->u.intv); -} - -static mv_unary_func_t* ceil_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ ceil_n_i, - /*FLOAT*/ ceil_n_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_ceil_func(mv_t* pval1) { return (ceil_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t floor_n_f(mv_t* pa) { - return mv_from_float(floor(pa->u.fltv)); -} -static mv_t floor_n_i(mv_t* pa) { - return mv_from_int(pa->u.intv); -} - -static mv_unary_func_t* floor_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ floor_n_i, - /*FLOAT*/ floor_n_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_floor_func(mv_t* pval1) { return (floor_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t round_n_f(mv_t* pa) { - return mv_from_float(round(pa->u.fltv)); -} -static mv_t round_n_i(mv_t* pa) { - return mv_from_int(pa->u.intv); -} - -static mv_unary_func_t* round_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ _err1, - /*INT*/ round_n_i, - /*FLOAT*/ round_n_f, - /*BOOL*/ _err1, -}; - -mv_t x_x_round_func(mv_t* pval1) { return (round_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t roundm_f_ff(mv_t* pa, mv_t* pb) { - double x = pa->u.fltv; - double m = pb->u.fltv; - return mv_from_float(round(x / m) * m); -} -static mv_t roundm_f_fi(mv_t* pa, mv_t* pb) { - double x = pa->u.fltv; - double m = (double)pb->u.intv; - return mv_from_float(round(x / m) * m); -} -static mv_t roundm_f_if(mv_t* pa, mv_t* pb) { - double x = (double)pa->u.intv; - double m = pb->u.fltv; - return mv_from_float(round(x / m) * m); -} -static mv_t roundm_i_ii(mv_t* pa, mv_t* pb) { - long long x = pa->u.intv; - long long m = pb->u.intv; - return mv_from_int((x / m) * m); -} - -static mv_binary_func_t* roundm_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _absn, _erro, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _erro, _erro, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _absn, _erro, _erro, roundm_i_ii, roundm_f_if, _erro}, - /*FLOAT*/ {_erro, _erro, _erro, _erro, roundm_f_fi, roundm_f_ff, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_roundm_func(mv_t* pval1, mv_t* pval2) { return (roundm_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t min_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(fmin(a, b)); -} - -static mv_t min_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(fmin(a, b)); -} - -static mv_t min_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(fmin(a, b)); -} - -static mv_t min_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - return mv_from_int(a < b ? a : b); -} - -static mv_t min_b_bb(mv_t* pa, mv_t* pb) { - int a = pa->u.boolv; - int b = pb->u.boolv; - return mv_from_bool(a < b ? a : b); -} - -static mv_t min_s_ss(mv_t* pa, mv_t* pb) { - char* a = pa->u.strv; - char* b = pb->u.strv; - int c = strcmp(a, b); - if (c <= 0) { - mv_free(pb); - return *pa; - } else { - mv_free(pa); - return *pb; - } -} - -// Sort rules (same for min, max, and comparator): -// * NUMERICS < BOOL < STRINGS < ERROR < ABSENT -// * error == error (singleton type) -// * absent == absent (singleton type) -// * string compares on strings -// * numeric compares on numbers -// * false < true -// Exceptions for min & max: -// * absent-null always loses -// * empty-null always loses against numbers -static mv_binary_func_t* min_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _2___, _2f__, _2___, _2___, _2___}, - /*EMPTY*/ {_erro, _1___, _void, _void, _2___, _2___, _2___}, - /*STRING*/ {_erro, _1f__, _void, min_s_ss, _2f__, _2f__, _2f__}, - /*INT*/ {_erro, _1___, _1___, _1f__, min_i_ii, min_f_if, _1___}, - /*FLOAT*/ {_erro, _1___, _1___, _1f__, min_f_fi, min_f_ff, _1___}, - /*BOOL*/ {_erro, _1___, _1___, _1f__, _2___, _2___, min_b_bb}, - }; - -mv_t x_xx_min_func(mv_t* pval1, mv_t* pval2) { - return (min_dispositions[pval1->type][pval2->type])(pval1,pval2); -} - -mv_t variadic_min_func(mv_t* pvals, int nvals) { - if (nvals == 0) { - return mv_empty(); - } else { - mv_t rv = pvals[0]; - for (int i = 1; i < nvals; i++) { - rv = x_xx_min_func(&rv, &pvals[i]); - // Disposition-matrix entries for min all free their non-return arguments - } - return rv; - } -} - -// ---------------------------------------------------------------- -static mv_t max_f_ff(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = pb->u.fltv; - return mv_from_float(fmax(a, b)); -} - -static mv_t max_f_fi(mv_t* pa, mv_t* pb) { - double a = pa->u.fltv; - double b = (double)pb->u.intv; - return mv_from_float(fmax(a, b)); -} - -static mv_t max_f_if(mv_t* pa, mv_t* pb) { - double a = (double)pa->u.intv; - double b = pb->u.fltv; - return mv_from_float(fmax(a, b)); -} - -static mv_t max_i_ii(mv_t* pa, mv_t* pb) { - long long a = pa->u.intv; - long long b = pb->u.intv; - return mv_from_int(a > b ? a : b); -} - -static mv_t max_b_bb(mv_t* pa, mv_t* pb) { - int a = pa->u.boolv; - int b = pb->u.boolv; - return mv_from_bool(a > b ? a : b); -} - -static mv_t max_s_ss(mv_t* pa, mv_t* pb) { - char* a = pa->u.strv; - char* b = pb->u.strv; - int c = strcmp(a, b); - if (c >= 0) { - mv_free(pb); - return *pa; - } else { - mv_free(pa); - return *pb; - } -} - -// Sort rules (same for min, max, and comparator): -// * NUMERICS < BOOL < STRINGS < ERROR < ABSENT -// * error == error (singleton type) -// * absent == absent (singleton type) -// * string compares on strings -// * numeric compares on numbers -// * false < true -// Exceptions for min & max: -// * absent-null always loses -// * empty-null always loses against numbers -static mv_binary_func_t* max_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _2___, _2f__, _2___, _2___, _2___}, - /*EMPTY*/ {_erro, _1___, _void, _2f__, _2___, _2___, _2___}, - /*STRING*/ {_erro, _1f__, _1f__, max_s_ss, _1f__, _1f__, _1f__}, - /*INT*/ {_erro, _1___, _1___, _2f__, max_i_ii, max_f_if, _2___}, - /*FLOAT*/ {_erro, _1___, _1___, _2f__, max_f_fi, max_f_ff, _2___}, - /*BOOL*/ {_erro, _1___, _1___, _2f__, _1___, _1___, max_b_bb}, - }; - -mv_t x_xx_max_func(mv_t* pval1, mv_t* pval2) { - return (max_dispositions[pval1->type][pval2->type])(pval1,pval2); -} - -mv_t variadic_max_func(mv_t* pvals, int nvals) { - if (nvals == 0) { - return mv_empty(); - } else { - mv_t rv = pvals[0]; - for (int i = 1; i < nvals; i++) { - rv = x_xx_max_func(&rv, &pvals[i]); - // Disposition-matrix entries for max all free their non-return arguments - } - return rv; - } -} - -// ---------------------------------------------------------------- -static mv_t int_i_b(mv_t* pa) { return mv_from_int(pa->u.boolv ? 1 : 0); } -static mv_t int_i_f(mv_t* pa) { return mv_from_int((long long)round(pa->u.fltv)); } -static mv_t int_i_i(mv_t* pa) { return mv_from_int(pa->u.intv); } -static mv_t int_i_s(mv_t* pa) { - if (*pa->u.strv == '\0') { - mv_free(pa); - return mv_empty(); - } - mv_t retval = mv_from_int(0LL); - if (!mlr_try_int_from_string(pa->u.strv, &retval.u.intv)) { - mv_free(pa); - return mv_error(); - } - mv_free(pa); - return retval; -} - -static mv_unary_func_t* int_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ int_i_s, - /*INT*/ int_i_i, - /*FLOAT*/ int_i_f, - /*BOOL*/ int_i_b, -}; - -mv_t i_x_int_func(mv_t* pval1) { return (int_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t float_f_b(mv_t* pa) { return mv_from_float(pa->u.boolv ? 1.0 : 0.0); } -static mv_t float_f_f(mv_t* pa) { return mv_from_float(pa->u.fltv); } -static mv_t float_f_i(mv_t* pa) { return mv_from_float((double)pa->u.intv); } -static mv_t float_f_s(mv_t* pa) { - if (*pa->u.strv == '\0') { - mv_free(pa); - return mv_empty(); - } - mv_t retval = mv_from_float(0.0); - if (!mlr_try_float_from_string(pa->u.strv, &retval.u.fltv)) { - mv_free(pa); - return mv_error(); - } - mv_free(pa); - return retval; -} - -static mv_unary_func_t* float_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ float_f_s, - /*INT*/ float_f_i, - /*FLOAT*/ float_f_f, - /*BOOL*/ float_f_b, -}; - -mv_t f_x_float_func(mv_t* pval1) { return (float_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t band_i_ii(mv_t* pa, mv_t* pb) { - return mv_from_int(pa->u.intv & pb->u.intv); -} - -static mv_binary_func_t* band_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _erro, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, band_i_ii, _erro, _erro}, - /*FLOAT*/ {_erro, _erro, _void, _erro, _erro, _erro, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_band_func(mv_t* pval1, mv_t* pval2) { return (band_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t bor_i_ii(mv_t* pa, mv_t* pb) { - return mv_from_int(pa->u.intv | pb->u.intv); -} - -static mv_binary_func_t* bor_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _erro, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, bor_i_ii, _erro, _erro}, - /*FLOAT*/ {_erro, _erro, _void, _erro, _erro, _erro, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_bor_func(mv_t* pval1, mv_t* pval2) { return (bor_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t bxor_i_ii(mv_t* pa, mv_t* pb) { - return mv_from_int(pa->u.intv ^ pb->u.intv); -} - -static mv_binary_func_t* bxor_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _erro, _2___, _erro, _erro}, - /*EMPTY*/ {_erro, _absn, _void, _erro, _void, _void, _erro}, - /*STRING*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*INT*/ {_erro, _1___, _void, _erro, bxor_i_ii, _erro, _erro}, - /*FLOAT*/ {_erro, _erro, _void, _erro, _erro, _erro, _erro}, - /*BOOL*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - }; - -mv_t x_xx_bxor_func(mv_t* pval1, mv_t* pval2) { return (bxor_dispositions[pval1->type][pval2->type])(pval1,pval2); } - -// ---------------------------------------------------------------- -static mv_t boolean_b_b(mv_t* pa) { return mv_from_bool(pa->u.boolv); } -static mv_t boolean_b_f(mv_t* pa) { return mv_from_bool((pa->u.fltv == 0.0) ? FALSE : TRUE); } -static mv_t boolean_b_i(mv_t* pa) { return mv_from_bool((pa->u.intv == 0LL) ? FALSE : TRUE); } -static mv_t boolean_b_s(mv_t* pa) { return mv_from_bool((streq(pa->u.strv, "true") || streq(pa->u.strv, "TRUE")) ? TRUE : FALSE);} - -static mv_unary_func_t* boolean_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ boolean_b_s, - /*INT*/ boolean_b_i, - /*FLOAT*/ boolean_b_f, - /*BOOL*/ boolean_b_b, -}; - -mv_t b_x_boolean_func(mv_t* pval1) { return (boolean_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t string_s_b(mv_t* pa) { return mv_from_string_no_free(pa->u.boolv?"true":"false"); } -static mv_t string_s_f(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_string_from_double(pa->u.fltv, MLR_GLOBALS.ofmt)); } -static mv_t string_s_i(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_string_from_ll(pa->u.intv)); } -static mv_t string_s_s(mv_t* pa) { - char free_flags = pa->free_flags; - pa->free_flags = NO_FREE; - return mv_from_string(pa->u.strv, free_flags); -} - -static mv_unary_func_t* string_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ string_s_s, - /*INT*/ string_s_i, - /*FLOAT*/ string_s_f, - /*BOOL*/ string_s_b, -}; - -mv_t s_x_string_func(mv_t* pval1) { return (string_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -mv_t s_sii_substr_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - int m = pval2->u.intv; // inclusive lower; -len..-1 alias to 0..len-1 - int n = pval3->u.intv; // inclusive upper; -len..-1 alias to 0..len-1 - int len = strlen(pval1->u.strv); - mv_t rv; - - if (m < 0) - m = len + m; - if (n < 0) - n = len + n; - - if (m < 0 || m >= len || n < 0 || n >= len || n < m) { - rv = mv_from_string("", 0); - } else { - int olen = n - m + 1; - char* p = mlr_malloc_or_die(olen + 1); - strncpy(p, &pval1->u.strv[m], olen); - p[olen] = 0; - rv = mv_from_string(p, FREE_ENTRY_VALUE); - } - mv_free(pval1); - mv_free(pval2); - mv_free(pval3); - return rv; -} - -// ---------------------------------------------------------------- -static mv_t hexfmt_s_b(mv_t* pa) { return mv_from_string_no_free(pa->u.boolv?"0x1":"0x0"); } -static mv_t hexfmt_s_f(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_hexfmt_from_ll((long long)pa->u.fltv)); } -static mv_t hexfmt_s_i(mv_t* pa) { return mv_from_string_with_free(mlr_alloc_hexfmt_from_ll(pa->u.intv)); } -static mv_t hexfmt_s_s(mv_t* pa) { - char free_flags = pa->free_flags; - pa->free_flags = NO_FREE; - return mv_from_string(pa->u.strv, free_flags); -} - -static mv_unary_func_t* hexfmt_dispositions[MT_DIM] = { - /*ERROR*/ _err1, - /*ABSENT*/ _absn1, - /*EMPTY*/ _emt1, - /*STRING*/ hexfmt_s_s, - /*INT*/ hexfmt_s_i, - /*FLOAT*/ hexfmt_s_f, - /*BOOL*/ hexfmt_s_b, -}; - -mv_t s_x_hexfmt_func(mv_t* pval1) { return (hexfmt_dispositions[pval1->type])(pval1); } - -// ---------------------------------------------------------------- -static mv_t fmtnum_s_bs(mv_t* pa, mv_t* pfmt) { return mv_from_string_no_free(pa->u.boolv?"0x1":"0x0"); } -static mv_t fmtnum_s_ds(mv_t* pa, mv_t* pfmt) { - mv_t rv = mv_from_string_with_free(mlr_alloc_string_from_double(pa->u.fltv, pfmt->u.strv)); - mv_free(pfmt); - return rv; -} -static mv_t fmtnum_s_is(mv_t* pa, mv_t* pfmt) { - mv_t rv = mv_from_string_with_free(mlr_alloc_string_from_ll_and_format(pa->u.intv, pfmt->u.strv)); - mv_free(pfmt); - return rv; -} -static mv_binary_func_t* fmtnum_dispositions[MT_DIM] = { - /*ERROR*/ _erro, - /*ABSENT*/ _absn, - /*EMPTY*/ _void, - /*STRING*/ _erro, - /*INT*/ fmtnum_s_is, - /*FLOAT*/ fmtnum_s_ds, - /*BOOL*/ fmtnum_s_bs, -}; - -mv_t s_xs_fmtnum_func(mv_t* pval1, mv_t* pval2) { return (fmtnum_dispositions[pval1->type])(pval1, pval2); } - -// ---------------------------------------------------------------- -static mv_t eq_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv == pb->u.intv); } -static mv_t ne_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv != pb->u.intv); } -static mv_t gt_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv > pb->u.intv); } -static mv_t ge_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv >= pb->u.intv); } -static mv_t lt_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv < pb->u.intv); } -static mv_t le_b_ii(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv <= pb->u.intv); } - -static mv_t eq_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv == pb->u.fltv); } -static mv_t ne_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv != pb->u.fltv); } -static mv_t gt_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv > pb->u.fltv); } -static mv_t ge_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv >= pb->u.fltv); } -static mv_t lt_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv < pb->u.fltv); } -static mv_t le_b_ff(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv <= pb->u.fltv); } - -static mv_t eq_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv == pb->u.intv); } -static mv_t ne_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv != pb->u.intv); } -static mv_t gt_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv > pb->u.intv); } -static mv_t ge_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv >= pb->u.intv); } -static mv_t lt_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv < pb->u.intv); } -static mv_t le_b_fi(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.fltv <= pb->u.intv); } - -static mv_t eq_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv == pb->u.fltv); } -static mv_t ne_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv != pb->u.fltv); } -static mv_t gt_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv > pb->u.fltv); } -static mv_t ge_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv >= pb->u.fltv); } -static mv_t lt_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv < pb->u.fltv); } -static mv_t le_b_if(mv_t* pa, mv_t* pb) { return mv_from_bool(pa->u.intv <= pb->u.fltv); } - -static mv_t eq_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) == 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ne_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) != 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t gt_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) > 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ge_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) >= 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t lt_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) < 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t le_b_xs(mv_t* pa, mv_t* pb) { - char free_flags; - char* sa = mv_format_val(pa, &free_flags); - mv_t rv = mv_from_bool(strcmp(sa, pb->u.strv) <= 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sa); - mv_free(pa); - mv_free(pb); - return rv; -} - -static mv_t eq_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) == 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ne_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) != 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t gt_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) > 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ge_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) >= 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t lt_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) < 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t le_b_sx(mv_t* pa, mv_t* pb) { - char free_flags; - char* sb = mv_format_val(pb, &free_flags); - mv_t rv = mv_from_bool(strcmp(pa->u.strv, sb) <= 0); - if (free_flags & FREE_ENTRY_VALUE) - free(sb); - mv_free(pa); - mv_free(pb); - return rv; -} - -static mv_t eq_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) == 0); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ne_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) != 0); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t gt_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) > 0); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t ge_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) >= 0); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t lt_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) < 0); - mv_free(pa); - mv_free(pb); - return rv; -} -static mv_t le_b_ss(mv_t*pa, mv_t*pb) { - mv_t rv = mv_from_bool(strcmp(pa->u.strv, pb->u.strv) <= 0); - mv_free(pa); - mv_free(pb); - return rv; -} - -static mv_binary_func_t* eq_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _erro}, - /*STRING*/ {_erro, _absn, eq_b_ss, eq_b_ss, eq_b_sx, eq_b_sx, _erro}, - /*INT*/ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_ii, eq_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, eq_b_xs, eq_b_xs, eq_b_fi, eq_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -static mv_binary_func_t* ne_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _erro}, - /*STRING*/ {_erro, _absn, ne_b_ss, ne_b_ss, ne_b_sx, ne_b_sx, _erro}, - /*INT*/ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_ii, ne_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, ne_b_xs, ne_b_xs, ne_b_fi, ne_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -static mv_binary_func_t* gt_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _erro}, - /*STRING*/ {_erro, _absn, gt_b_ss, gt_b_ss, gt_b_sx, gt_b_sx, _erro}, - /*INT*/ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_ii, gt_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, gt_b_xs, gt_b_xs, gt_b_fi, gt_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -static mv_binary_func_t* ge_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _erro}, - /*STRING*/ {_erro, _absn, ge_b_ss, ge_b_ss, ge_b_sx, ge_b_sx, _erro}, - /*INT*/ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_ii, ge_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, ge_b_xs, ge_b_xs, ge_b_fi, ge_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -static mv_binary_func_t* lt_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _erro}, - /*STRING*/ {_erro, _absn, lt_b_ss, lt_b_ss, lt_b_sx, lt_b_sx, _erro}, - /*INT*/ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_ii, lt_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, lt_b_xs, lt_b_xs, lt_b_fi, lt_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -static mv_binary_func_t* le_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {_erro, _erro, _erro, _erro, _erro, _erro, _erro}, - /*ABSENT*/ {_erro, _absn, _absn, _absn, _absn, _absn, _absn}, - /*EMPTY*/ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _erro}, - /*STRING*/ {_erro, _absn, le_b_ss, le_b_ss, le_b_sx, le_b_sx, _erro}, - /*INT*/ {_erro, _absn, le_b_xs, le_b_xs, le_b_ii, le_b_if, _erro}, - /*FLOAT*/ {_erro, _absn, le_b_xs, le_b_xs, le_b_fi, le_b_ff, _erro}, - /*BOOL*/ {_erro, _erro, _absn, _erro, _erro, _erro, _erro}, - }; - -mv_t eq_op_func(mv_t* pval1, mv_t* pval2) { return (eq_dispositions[pval1->type][pval2->type])(pval1, pval2); } -mv_t ne_op_func(mv_t* pval1, mv_t* pval2) { return (ne_dispositions[pval1->type][pval2->type])(pval1, pval2); } -mv_t gt_op_func(mv_t* pval1, mv_t* pval2) { return (gt_dispositions[pval1->type][pval2->type])(pval1, pval2); } -mv_t ge_op_func(mv_t* pval1, mv_t* pval2) { return (ge_dispositions[pval1->type][pval2->type])(pval1, pval2); } -mv_t lt_op_func(mv_t* pval1, mv_t* pval2) { return (lt_dispositions[pval1->type][pval2->type])(pval1, pval2); } -mv_t le_op_func(mv_t* pval1, mv_t* pval2) { return (le_dispositions[pval1->type][pval2->type])(pval1, pval2); } - -// ---------------------------------------------------------------- -int mv_equals_si(mv_t* pa, mv_t* pb) { - if (pa->type == MT_INT) { - return (pb->type == MT_INT) ? pa->u.intv == pb->u.intv : FALSE; - } else { - return (pb->type == MT_STRING) ? streq(pa->u.strv, pb->u.strv) : FALSE; - } -} - -// ---------------------------------------------------------------- -static int eq_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv == pb->u.intv; } -static int ne_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv != pb->u.intv; } -static int gt_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv > pb->u.intv; } -static int ge_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv >= pb->u.intv; } -static int lt_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv < pb->u.intv; } -static int le_i_ii(mv_t* pa, mv_t* pb) { return pa->u.intv <= pb->u.intv; } - -static int eq_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv == pb->u.fltv; } -static int ne_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv != pb->u.fltv; } -static int gt_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv > pb->u.fltv; } -static int ge_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv >= pb->u.fltv; } -static int lt_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv < pb->u.fltv; } -static int le_i_ff(mv_t* pa, mv_t* pb) { return pa->u.fltv <= pb->u.fltv; } - -static int eq_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv == pb->u.intv; } -static int ne_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv != pb->u.intv; } -static int gt_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv > pb->u.intv; } -static int ge_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv >= pb->u.intv; } -static int lt_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv < pb->u.intv; } -static int le_i_fi(mv_t* pa, mv_t* pb) { return pa->u.fltv <= pb->u.intv; } - -static int eq_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv == pb->u.fltv; } -static int ne_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv != pb->u.fltv; } -static int gt_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv > pb->u.fltv; } -static int ge_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv >= pb->u.fltv; } -static int lt_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv < pb->u.fltv; } -static int le_i_if(mv_t* pa, mv_t* pb) { return pa->u.intv <= pb->u.fltv; } - -static mv_i_nn_comparator_func_t* ieq_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, eq_i_ii, eq_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, eq_i_fi, eq_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -static mv_i_nn_comparator_func_t* ine_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, ne_i_ii, ne_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, ne_i_fi, ne_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -static mv_i_nn_comparator_func_t* igt_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, gt_i_ii, gt_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, gt_i_fi, gt_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -static mv_i_nn_comparator_func_t* ige_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, ge_i_ii, ge_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, ge_i_fi, ge_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -static mv_i_nn_comparator_func_t* ilt_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, lt_i_ii, lt_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, lt_i_fi, lt_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -static mv_i_nn_comparator_func_t* ile_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, le_i_ii, le_i_if, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, le_i_fi, le_i_ff, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -int mv_i_nn_eq(mv_t* pval1, mv_t* pval2) { return (ieq_dispositions[pval1->type][pval2->type])(pval1, pval2); } -int mv_i_nn_ne(mv_t* pval1, mv_t* pval2) { return (ine_dispositions[pval1->type][pval2->type])(pval1, pval2); } -int mv_i_nn_gt(mv_t* pval1, mv_t* pval2) { return (igt_dispositions[pval1->type][pval2->type])(pval1, pval2); } -int mv_i_nn_ge(mv_t* pval1, mv_t* pval2) { return (ige_dispositions[pval1->type][pval2->type])(pval1, pval2); } -int mv_i_nn_lt(mv_t* pval1, mv_t* pval2) { return (ilt_dispositions[pval1->type][pval2->type])(pval1, pval2); } -int mv_i_nn_le(mv_t* pval1, mv_t* pval2) { return (ile_dispositions[pval1->type][pval2->type])(pval1, pval2); } - -// ---------------------------------------------------------------- -// For unit-test keystroke-saving - -int mveq(mv_t* pval1, mv_t* pval2) { - mv_t cmp = eq_op_func(pval1, pval2); - MLR_INTERNAL_CODING_ERROR_UNLESS(cmp.type == MT_BOOLEAN); - return cmp.u.boolv; -} - -int mvne(mv_t* pval1, mv_t* pval2) { - return !mveq(pval1, pval2); -} - -int mveqcopy(mv_t* pval1, mv_t* pval2) { - mv_t c1 = mv_copy(pval1); - mv_t c2 = mv_copy(pval2); - return mveq(&c1, &c2); -} - -int mvnecopy(mv_t* pval1, mv_t* pval2) { - mv_t c1 = mv_copy(pval1); - mv_t c2 = mv_copy(pval2); - return mvne(&c1, &c2); -} - -// ---------------------------------------------------------------- -// arg2 evaluates to string via compound expression; regexes compiled on each call. -mv_t matches_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures) { - char* s1 = pval1->u.strv; - char* s2 = pval2->u.strv; - - regex_t regex; - char* sstr = s1; - char* sregex = s2; - - regcomp_or_die(®ex, sregex, REG_NOSUB); - - const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match - regmatch_t matches[nmatchmax]; - if (regmatch_or_die(®ex, sstr, nmatchmax, matches)) { - if (ppregex_captures != NULL && *ppregex_captures != NULL) - save_regex_captures(ppregex_captures, pval1->u.strv, matches, nmatchmax); - regfree(®ex); - mv_free(pval1); - mv_free(pval2); - return mv_from_true(); - } else { - regfree(®ex); - mv_free(pval1); - mv_free(pval2); - return mv_from_false(); - } -} - -mv_t does_not_match_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures) { - mv_t rv = matches_no_precomp_func(pval1, pval2, ppregex_captures); - rv.u.boolv = !rv.u.boolv; - return rv; -} - -// ---------------------------------------------------------------- -// arg2 is a string, compiled to regex only once at alloc time -mv_t matches_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures) { - const size_t nmatchmax = 10; // Capture-groups \1 through \9 supported, along with entire-string match - regmatch_t matches[nmatchmax]; - if (regmatch_or_die(pregex, pval1->u.strv, nmatchmax, matches)) { - if (ppregex_captures != NULL) - save_regex_captures(ppregex_captures, pval1->u.strv, matches, nmatchmax); - mv_free(pval1); - return mv_from_true(); - } else { - // See comments in mapper_put.c. Setting this array to length 0 (i.e. zero matches) signals to the - // lrec-evaluator's from-literal function that we *are* in a regex-match context but there are *no* matches to - // be interpolated. - if (ppregex_captures != NULL) { - if (*ppregex_captures != NULL) - string_array_realloc(*ppregex_captures, 0); - else - *ppregex_captures = string_array_alloc(0); - } - mv_free(pval1); - return mv_from_false(); - } -} - -mv_t does_not_match_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures) { - mv_t rv = matches_precomp_func(pval1, pregex, psb, ppregex_captures); - rv.u.boolv = !rv.u.boolv; - return rv; -} - -// ---------------------------------------------------------------- -static int mv_ff_cmp(const mv_t* pa, const mv_t* pb) { - double d = pa->u.fltv - pb->u.fltv; - return (d < 0) ? -1 : (d > 0) ? 1 : 0; -} -static int mv_fi_cmp(const mv_t* pa, const mv_t* pb) { - double d = pa->u.fltv - pb->u.intv; - return (d < 0) ? -1 : (d > 0) ? 1 : 0; -} -static int mv_if_cmp(const mv_t* pa, const mv_t* pb) { - double d = pa->u.intv - pb->u.fltv; - return (d < 0) ? -1 : (d > 0) ? 1 : 0; -} -static int mv_ii_cmp(const mv_t* pa, const mv_t* pb) { - long long d = pa->u.intv - pb->u.intv; - return (d < 0) ? -1 : (d > 0) ? 1 : 0; -} -// We assume mv_t's coming into percentile keeper are int or double -- in particular, non-null. -static mv_i_xx_comparator_func_t* mv_nn_comparator_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*ABSENT*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*EMPTY*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*STRING*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - /*INT*/ {NULL, NULL, NULL, NULL, mv_ii_cmp, mv_if_cmp, NULL}, - /*FLOAT*/ {NULL, NULL, NULL, NULL, mv_fi_cmp, mv_ff_cmp, NULL}, - /*BOOL*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, - }; - -int mv_nn_comparator(const void* pva, const void* pvb) { - const mv_t* pa = pva; - const mv_t* pb = pvb; - return mv_nn_comparator_dispositions[pa->type][pb->type](pa, pb); -} - -// ---------------------------------------------------------------- -// For general qsorting of mv_t's - -static int mv_cmp_eq(const mv_t* pa, const mv_t* pb) { return 0; } -static int mv_cmp_lt(const mv_t* pa, const mv_t* pb) { return -1; } -static int mv_cmp_gt(const mv_t* pa, const mv_t* pb) { return 1; } - -static int mv_bb_comparator(const mv_t* pa, const mv_t* pb) { - int d = pa->u.boolv - pb->u.boolv; - return (d < 0) ? -1 : (d > 0) ? 1 : 0; -} -static int mv_ss_cmp(const mv_t* pa, const mv_t* pb) { - return strcmp(pa->u.strv, pb->u.strv); -} - -// Sort rules (same for min, max, and comparator): -// * NUMERICS < BOOL < STRINGS < ERROR < ABSENT -// * error == error (singleton type) -// * absent == absent (singleton type) -// * string compares on strings -// * numeric compares on numbers -// * false < true -static mv_i_xx_comparator_func_t* mv_xx_comparator_dispositions[MT_DIM][MT_DIM] = { - // ERROR ABSENT EMPTY STRING INT FLOAT BOOL - /*ERROR*/ {mv_cmp_eq, mv_cmp_lt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, - /*ABSENT*/ {mv_cmp_gt, mv_cmp_eq, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, - /*EMPTY*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_eq, mv_ss_cmp, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, - /*STRING*/ {mv_cmp_lt, mv_cmp_lt, mv_ss_cmp, mv_ss_cmp, mv_cmp_gt, mv_cmp_gt, mv_cmp_gt}, - /*INT*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_ii_cmp, mv_if_cmp, mv_cmp_lt}, - /*FLOAT*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_fi_cmp, mv_ff_cmp, mv_cmp_lt}, - /*BOOL*/ {mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_lt, mv_cmp_gt, mv_cmp_gt, mv_bb_comparator}, - }; - -int mv_xx_comparator(const void* pva, const void* pvb) { - const mv_t* pa = pva; - const mv_t* pb = pvb; - return mv_xx_comparator_dispositions[pa->type][pb->type](pa, pb); -} - -// ---------------------------------------------------------------- -int mlr_bsearch_mv_n_for_insert(mv_t* array, int size, mv_t* pvalue) { - int lo = 0; - int hi = size-1; - int mid = (hi+lo)/2; - int newmid; - - if (size == 0) - return 0; - if (mv_i_nn_gt(pvalue, &array[0])) - return 0; - if (mv_i_nn_lt(pvalue, &array[hi])) - return size; - - while (lo < hi) { - mv_t* pa = &array[mid]; - if (mv_i_nn_eq(pvalue, pa)) { - return mid; - } - else if (mv_i_nn_gt(pvalue, pa)) { - hi = mid; - newmid = (hi+lo)/2; - } - else { - lo = mid; - newmid = (hi+lo)/2; - } - if (mid == newmid) { - if (mv_i_nn_ge(pvalue, &array[lo])) - return lo; - else if (mv_i_nn_ge(pvalue, &array[hi])) - return hi; - else - return hi+1; - } - mid = newmid; - } - - return lo; -} diff --git a/c/lib/mvfuncs.h b/c/lib/mvfuncs.h deleted file mode 100644 index e1ffcf112..000000000 --- a/c/lib/mvfuncs.h +++ /dev/null @@ -1,313 +0,0 @@ -#ifndef MVFUNCS_H -#define MVFUNCS_H - -// ================================================================ -// Functions involving mlrvals: primarily for the DSL but also for -// stats1/stats2, etc. -// ================================================================ - -#include "../lib/mlrmath.h" -#include "../lib/mlrutil.h" -#include "../lib/mlrdatetime.h" -#include "../lib/mtrand.h" -#include "../lib/string_builder.h" -#include "../lib/string_array.h" -#include "../lib/mlrval.h" - -#define MV_SB_ALLOC_LENGTH 32 - -#define ISO8601_TIME_FORMAT "%Y-%m-%dT%H:%M:%SZ" -#define ISO8601_TIME_FORMAT_1 "%Y-%m-%dT%H:%M:%1SZ" -#define ISO8601_TIME_FORMAT_2 "%Y-%m-%dT%H:%M:%2SZ" -#define ISO8601_TIME_FORMAT_3 "%Y-%m-%dT%H:%M:%3SZ" -#define ISO8601_TIME_FORMAT_4 "%Y-%m-%dT%H:%M:%4SZ" -#define ISO8601_TIME_FORMAT_5 "%Y-%m-%dT%H:%M:%5SZ" -#define ISO8601_TIME_FORMAT_6 "%Y-%m-%dT%H:%M:%6SZ" -#define ISO8601_TIME_FORMAT_7 "%Y-%m-%dT%H:%M:%7SZ" -#define ISO8601_TIME_FORMAT_8 "%Y-%m-%dT%H:%M:%8SZ" -#define ISO8601_TIME_FORMAT_9 "%Y-%m-%dT%H:%M:%9SZ" -#define ISO8601_DATE_FORMAT "%Y-%m-%d" - -#define ISO8601_LOCAL_TIME_FORMAT "%Y-%m-%d %H:%M:%S" -#define ISO8601_LOCAL_TIME_FORMAT_1 "%Y-%m-%d %H:%M:%1S" -#define ISO8601_LOCAL_TIME_FORMAT_2 "%Y-%m-%d %H:%M:%2S" -#define ISO8601_LOCAL_TIME_FORMAT_3 "%Y-%m-%d %H:%M:%3S" -#define ISO8601_LOCAL_TIME_FORMAT_4 "%Y-%m-%d %H:%M:%4S" -#define ISO8601_LOCAL_TIME_FORMAT_5 "%Y-%m-%d %H:%M:%5S" -#define ISO8601_LOCAL_TIME_FORMAT_6 "%Y-%m-%d %H:%M:%6S" -#define ISO8601_LOCAL_TIME_FORMAT_7 "%Y-%m-%d %H:%M:%7S" -#define ISO8601_LOCAL_TIME_FORMAT_8 "%Y-%m-%d %H:%M:%8S" -#define ISO8601_LOCAL_TIME_FORMAT_9 "%Y-%m-%d %H:%M:%9S" - -// ---------------------------------------------------------------- -typedef mv_t mv_variadic_func_t(mv_t* pvals, int nvals); -typedef mv_t mv_zary_func_t(); -typedef mv_t mv_unary_func_t(mv_t* pval1); -typedef mv_t mv_binary_func_t(mv_t* pval1, mv_t* pval2); -typedef mv_t mv_binary_arg3_capture_func_t(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); -typedef mv_t mv_binary_arg2_regex_func_t(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); -typedef mv_t mv_binary_arg2_regextract_func_t(mv_t* pval1, regex_t* pregex); -typedef mv_t mv_ternary_func_t(mv_t* pval1, mv_t* pval2, mv_t* pval3); -typedef mv_t mv_ternary_arg2_regex_func_t(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); -typedef mv_t mv_ternary_arg2_regextract_func_t(mv_t* pval1, regex_t* pregex, mv_t* pval3); - -// ---------------------------------------------------------------- -static inline mv_t b_b_not_func(mv_t* pval1) { - return mv_from_bool(!pval1->u.boolv); -} - -static inline mv_t b_bb_or_func(mv_t* pval1, mv_t* pval2) { - return mv_from_bool(pval1->u.boolv || pval2->u.boolv); -} -static inline mv_t b_bb_and_func(mv_t* pval1, mv_t* pval2) { - return mv_from_bool(pval1->u.boolv && pval2->u.boolv); -} -static inline mv_t b_bb_xor_func(mv_t* pval1, mv_t* pval2) { - return mv_from_bool(pval1->u.boolv ^ pval2->u.boolv); -} - -// ---------------------------------------------------------------- -static inline mv_t f_z_urand_func() { - return mv_from_float(get_mtrand_double()); // mtrand.h -} -static inline mv_t i_z_urand32_func() { - return mv_from_float(get_mtrand_int32()); // mtrand.h -} -static inline mv_t f_z_systime_func() { - return mv_from_float(get_systime()); // mlrutil.h -} - -// ---------------------------------------------------------------- -static inline mv_t f_f_acos_func(mv_t* pval1) {return mv_from_float( acos (pval1->u.fltv));} -static inline mv_t f_f_acosh_func(mv_t* pval1) {return mv_from_float( acosh (pval1->u.fltv));} -static inline mv_t f_f_asin_func(mv_t* pval1) {return mv_from_float( asin (pval1->u.fltv));} -static inline mv_t f_f_asinh_func(mv_t* pval1) {return mv_from_float( asinh (pval1->u.fltv));} -static inline mv_t f_f_atan_func(mv_t* pval1) {return mv_from_float( atan (pval1->u.fltv));} -static inline mv_t f_f_atanh_func(mv_t* pval1) {return mv_from_float( atanh (pval1->u.fltv));} -static inline mv_t f_f_cbrt_func(mv_t* pval1) {return mv_from_float( cbrt (pval1->u.fltv));} -static inline mv_t f_f_cos_func(mv_t* pval1) {return mv_from_float( cos (pval1->u.fltv));} -static inline mv_t f_f_cosh_func(mv_t* pval1) {return mv_from_float( cosh (pval1->u.fltv));} -static inline mv_t f_f_erf_func(mv_t* pval1) {return mv_from_float( erf (pval1->u.fltv));} -static inline mv_t f_f_erfc_func(mv_t* pval1) {return mv_from_float( erfc (pval1->u.fltv));} -static inline mv_t f_f_exp_func(mv_t* pval1) {return mv_from_float( exp (pval1->u.fltv));} -static inline mv_t f_f_expm1_func(mv_t* pval1) {return mv_from_float( expm1 (pval1->u.fltv));} -static inline mv_t f_f_invqnorm_func(mv_t* pval1) {return mv_from_float( invqnorm (pval1->u.fltv));} -static inline mv_t f_f_log10_func(mv_t* pval1) {return mv_from_float( log10 (pval1->u.fltv));} -static inline mv_t f_f_log1p_func(mv_t* pval1) {return mv_from_float( log1p (pval1->u.fltv));} -static inline mv_t f_f_log_func(mv_t* pval1) {return mv_from_float( log (pval1->u.fltv));} -static inline mv_t f_f_qnorm_func(mv_t* pval1) {return mv_from_float( qnorm (pval1->u.fltv));} -static inline mv_t f_f_sin_func(mv_t* pval1) {return mv_from_float( sin (pval1->u.fltv));} -static inline mv_t f_f_sinh_func(mv_t* pval1) {return mv_from_float( sinh (pval1->u.fltv));} -static inline mv_t f_f_sqrt_func(mv_t* pval1) {return mv_from_float( sqrt (pval1->u.fltv));} -static inline mv_t f_f_tan_func(mv_t* pval1) {return mv_from_float( tan (pval1->u.fltv));} -static inline mv_t f_f_tanh_func(mv_t* pval1) {return mv_from_float( tanh (pval1->u.fltv));} - -static inline mv_t f_ff_pow_func(mv_t* pval1, mv_t* pval2) { - return mv_from_float(pow(pval1->u.fltv, pval2->u.fltv)); -} - -// These four overflow from 64-bit ints to double. This is for general use. -mv_t x_xx_plus_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_minus_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_times_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_divide_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_int_divide_func(mv_t* pval1, mv_t* pval2); - -// These four intentionally overflow 64-bit ints. This is for use-cases where -// people want that, e.g. 64-bit integer math. -mv_t x_xx_oplus_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_ominus_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_otimes_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_odivide_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_int_odivide_func(mv_t* pval1, mv_t* pval2); - -mv_t x_xx_mod_func(mv_t* pval1, mv_t* pval2); -mv_t x_x_upos_func(mv_t* pval1); -mv_t x_x_uneg_func(mv_t* pval1); - -// Bitwise -mv_t x_xx_bxor_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_band_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_bor_func(mv_t* pval1, mv_t* pval2); - -mv_t x_x_abs_func(mv_t* pval1); -mv_t x_x_ceil_func(mv_t* pval1); -mv_t x_x_floor_func(mv_t* pval1); -mv_t x_x_round_func(mv_t* pval1); -mv_t x_x_sgn_func(mv_t* pval1); - -mv_t variadic_min_func(mv_t* pvals, int nvals); -mv_t variadic_max_func(mv_t* pvals, int nvals); - -mv_t x_xx_min_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_max_func(mv_t* pval1, mv_t* pval2); -mv_t x_xx_roundm_func(mv_t* pval1, mv_t* pval2); - -mv_t i_x_int_func(mv_t* pval1); -mv_t f_x_float_func(mv_t* pval1); -mv_t b_x_boolean_func(mv_t* pval1); -mv_t s_x_string_func(mv_t* pval1); -mv_t s_sii_substr_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t s_x_hexfmt_func(mv_t* pval1); -mv_t s_xs_fmtnum_func(mv_t* pval1, mv_t* pval2); - -// ---------------------------------------------------------------- -static inline mv_t f_ff_atan2_func(mv_t* pval1, mv_t* pval2) { - return mv_from_float(atan2(pval1->u.fltv, pval2->u.fltv)); -} - -static inline mv_t f_fff_logifit_func(mv_t* pval1, mv_t* pval2, mv_t* pval3) { - double x = pval1->u.fltv; - double m = pval2->u.fltv; - double b = pval3->u.fltv; - return mv_from_float(1.0 / (1.0 + exp(-m*x-b))); -} - -static inline mv_t i_ii_urandint_func(mv_t* pval1, mv_t* pval2) { - long long a = pval1->u.intv; - long long b = pval2->u.intv; - long long lo, hi; - if (a <= b) { - lo = a; - hi = b + 1; - } else { - lo = b; - hi = a + 1; - } - long long u = lo + (hi - lo) * get_mtrand_double(); - return mv_from_int(u); -} - -static inline mv_t f_ff_urandrange_func(mv_t* pval1, mv_t* pval2) { - double lo = pval1->u.fltv; - double hi = pval2->u.fltv; - double u = lo + (hi - lo) * get_mtrand_double(); - return mv_from_float(u); -} - -static inline mv_t i_ii_bitwise_lsh_func(mv_t* pval1, mv_t* pval2) { - return mv_from_int(pval1->u.intv << pval2->u.intv); -} -static inline mv_t i_ii_bitwise_rsh_func(mv_t* pval1, mv_t* pval2) { - return mv_from_int(pval1->u.intv >> pval2->u.intv); -} -static inline mv_t i_i_bitwise_not_func(mv_t* pval1) { - return mv_from_int(~pval1->u.intv); -} -mv_t i_i_bitcount_func(mv_t* pval1); - -mv_t i_iii_modadd_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t i_iii_modsub_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t i_iii_modmul_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t i_iii_modexp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); - -// ---------------------------------------------------------------- -mv_t i_s_strlen_func(mv_t* pval1); -mv_t s_x_typeof_func(mv_t* pval1); -mv_t s_s_tolower_func(mv_t* pval1); -mv_t s_s_toupper_func(mv_t* pval1); -mv_t s_s_capitalize_func(mv_t* pval1); -mv_t s_s_lstrip_func(mv_t* pval1); -mv_t s_s_rstrip_func(mv_t* pval1); -mv_t s_s_strip_func(mv_t* pval1); -mv_t s_s_collapse_whitespace_func(mv_t* pval1); -mv_t s_s_clean_whitespace_func(mv_t* pval1); - -mv_t s_s_system_func(mv_t* pval1); - -mv_t s_si_truncate_func(mv_t* pval1, mv_t* pval2); - -mv_t s_xx_dot_func(mv_t* pval1, mv_t* pval2); - -mv_t sub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t sub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); -mv_t gsub_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t gsub_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, mv_t* pval3); -mv_t regextract_no_precomp_func(mv_t* pval1, mv_t* pval2); -mv_t regextract_precomp_func(mv_t* pval1, regex_t* pregex); -mv_t regextract_or_else_no_precomp_func(mv_t* pval1, mv_t* pval2, mv_t* pval3); -mv_t regextract_or_else_precomp_func(mv_t* pval1, regex_t* pregex, mv_t* pval3); -// String-substitution with no regexes or special characters. -mv_t s_sss_ssub_func(mv_t* pstring, mv_t* pold, mv_t* pnew); - -// ---------------------------------------------------------------- -mv_t s_x_sec2gmt_func(mv_t* pval1); -mv_t s_xi_sec2gmt_func(mv_t* pval1, mv_t* pval2); -mv_t s_x_sec2gmtdate_func(mv_t* pval1); - -mv_t s_x_sec2localtime_func(mv_t* pval1); -mv_t s_xi_sec2localtime_func(mv_t* pval1, mv_t* pval2); -mv_t s_x_sec2localdate_func(mv_t* pval1); - -mv_t i_s_gmt2sec_func(mv_t* pval1); -mv_t i_s_localtime2sec_func(mv_t* pval1); - -mv_t s_ns_strftime_func(mv_t* pval1, mv_t* pval2); -mv_t s_ns_strftime_local_func(mv_t* pval1, mv_t* pval2); - -mv_t i_ss_strptime_func(mv_t* pval1, mv_t* pval2); -mv_t i_ss_strptime_local_func(mv_t* pval1, mv_t* pval2); - -mv_t s_i_sec2hms_func(mv_t* pval1); -mv_t s_f_fsec2hms_func(mv_t* pval1); -mv_t s_i_sec2dhms_func(mv_t* pval1); -mv_t s_f_fsec2dhms_func(mv_t* pval1); -mv_t i_s_hms2sec_func(mv_t* pval1); -mv_t f_s_hms2fsec_func(mv_t* pval1); -mv_t i_s_dhms2sec_func(mv_t* pval1); -mv_t f_s_dhms2fsec_func(mv_t* pval1); - -mv_t time_string_from_seconds(mv_t* psec, char* format, - timezone_handling_t timezone_handling); - -// ---------------------------------------------------------------- -// arg2 evaluates to string via compound expression; regexes compiled on each call -mv_t matches_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); -mv_t does_not_match_no_precomp_func(mv_t* pval1, mv_t* pval2, string_array_t** ppregex_captures); -// arg2 is a string, compiled to regex only once at alloc time -mv_t matches_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); -mv_t does_not_match_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb, string_array_t** ppregex_captures); - -// For filter/put DSL: -mv_t eq_op_func(mv_t* pval1, mv_t* pval2); -mv_t ne_op_func(mv_t* pval1, mv_t* pval2); -mv_t gt_op_func(mv_t* pval1, mv_t* pval2); -mv_t ge_op_func(mv_t* pval1, mv_t* pval2); -mv_t lt_op_func(mv_t* pval1, mv_t* pval2); -mv_t le_op_func(mv_t* pval1, mv_t* pval2); - -// Assumes inputs are MT_STRING or MT_INT. Nominally intended for mlhmmv which uses only string/int mlrvals. -int mv_equals_si(mv_t* pa, mv_t* pb); - -// For non-DSL comparison of mlrvals: -int mv_i_nn_eq(mv_t* pval1, mv_t* pval2); -int mv_i_nn_ne(mv_t* pval1, mv_t* pval2); -int mv_i_nn_gt(mv_t* pval1, mv_t* pval2); -int mv_i_nn_ge(mv_t* pval1, mv_t* pval2); -int mv_i_nn_lt(mv_t* pval1, mv_t* pval2); -int mv_i_nn_le(mv_t* pval1, mv_t* pval2); - -// For unit-test keystroke-saving: -int mveq(mv_t* pval1, mv_t* pval2); -int mvne(mv_t* pval1, mv_t* pval2); -int mveqcopy(mv_t* pval1, mv_t* pval2); -int mvnecopy(mv_t* pval1, mv_t* pval2); - -// ---------------------------------------------------------------- -// For qsort of numeric mlrvals. -int mv_nn_comparator(const void* pva, const void* pvb); - -// For qsort of arbitrary mlrvals. Sort rules: -// * Across types: -// NUMERICS < BOOL < STRINGS < ERROR < ABSENT -// * Within types: -// o numeric compares on numbers -// o false < true -// o string compares on strings -// o error == error (this is a singleton type) -// o absent == absent (this is a singleton type) -int mv_xx_comparator(const void* pva, const void* pvb); - -int mlr_bsearch_mv_n_for_insert(mv_t* array, int size, mv_t* pvalue); - -#endif // MVFUNCS_H diff --git a/c/lib/netbsd_strptime.c b/c/lib/netbsd_strptime.c deleted file mode 100644 index ab1a732f7..000000000 --- a/c/lib/netbsd_strptime.c +++ /dev/null @@ -1,379 +0,0 @@ -// $Id$ -// $NetBSD: strptime.c,v 1.18 1999/04/29 02:58:30 tv Exp $ - -// ================================================================ -// Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. -// All rights reserved. -// -// This code was contributed to The NetBSD Foundation by Klaus Klein. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. All advertising materials mentioning features or use of this software -// must display the following acknowledgement: -// This product includes software developed by the NetBSD -// Foundation, Inc. and its contributors. -// 4. Neither the name of The NetBSD Foundation nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -// ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// ================================================================ - -#include "string.h" -#include "ctype.h" -#include "time.h" - -// ---------------------------------------------------------------- -#define TM_YEAR_BASE 1900 - -// We do not implement alternate representations. However, we always -// check whether a given modifier is allowed for a certain conversion. -#define ALT_E 0x01 -#define ALT_O 0x02 -#define LEGAL_ALT(x) { if (alt_format & ~(x)) return (0); } - -// ---------------------------------------------------------------- -static int conv_num(const char **, int *, int, int); - -// ---------------------------------------------------------------- -static const char *day[7] = { - "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", - "Friday", "Saturday" -}; -static const char *abday[7] = { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" -}; -static const char *mon[12] = { - "January", "February", "March", "April", "May", "June", "July", - "August", "September", "October", "November", "December" -}; -static const char *abmon[12] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -}; -static const char *am_pm[2] = { - "AM", "PM" -}; - -// ================================================================ -char* netbsd_strptime(const char *buf, const char *fmt, struct tm *tm) { - char c; - const char *bp; - size_t len = 0; - int alt_format, i, split_year = 0; - - bp = buf; - - while ((c = *fmt) != '\0') { - // Clear `alternate' modifier prior to new conversion. - alt_format = 0; - - // Eat up white-space. - if (isspace(c)) { - while (isspace(*bp)) - bp++; - - fmt++; - continue; - } - - if ((c = *fmt++) != '%') - goto literal; - -again: switch (c = *fmt++) { - case '%': // "%%" is converted to "%". -literal: - if (c != *bp++) - return (0); - break; - - // "Alternative" modifiers. Just set the appropriate flag - // and start over again. - case 'E': // "%E?" alternative conversion modifier. - LEGAL_ALT(0); - alt_format |= ALT_E; - goto again; - - case 'O': // "%O?" alternative conversion modifier. - LEGAL_ALT(0); - alt_format |= ALT_O; - goto again; - - // "Complex" conversion rules, implemented through recursion. - case 'c': // Date and time, using the locale's format. - LEGAL_ALT(ALT_E); - if (!(bp = netbsd_strptime(bp, "%x %X", tm))) - return (0); - break; - - case 'D': // The date as "%m/%d/%y". - LEGAL_ALT(0); - if (!(bp = netbsd_strptime(bp, "%m/%d/%y", tm))) - return (0); - break; - - case 'R': // The time as "%H:%M". - LEGAL_ALT(0); - if (!(bp = netbsd_strptime(bp, "%H:%M", tm))) - return (0); - break; - - case 'r': // The time in 12-hour clock representation. - LEGAL_ALT(0); - if (!(bp = netbsd_strptime(bp, "%I:%M:%S %p", tm))) - return (0); - break; - - case 'T': // The time as "%H:%M:%S". - LEGAL_ALT(0); - if (!(bp = netbsd_strptime(bp, "%H:%M:%S", tm))) - return (0); - break; - - case 'X': // The time, using the locale's format. - LEGAL_ALT(ALT_E); - if (!(bp = netbsd_strptime(bp, "%H:%M:%S", tm))) - return (0); - break; - - case 'x': // The date, using the locale's format. - LEGAL_ALT(ALT_E); - if (!(bp = netbsd_strptime(bp, "%m/%d/%y", tm))) - return (0); - break; - - // "Elementary" conversion rules. - case 'A': // The day of week, using the locale's form. - case 'a': - LEGAL_ALT(0); - for (i = 0; i < 7; i++) { - // Full name. - len = strlen(day[i]); - if (strncasecmp(day[i], bp, len) == 0) - break; - - // Abbreviated name. - len = strlen(abday[i]); - if (strncasecmp(abday[i], bp, len) == 0) - break; - } - - // Nothing matched. - if (i == 7) - return (0); - - tm->tm_wday = i; - bp += len; - break; - - case 'B': // The month, using the locale's form. - case 'b': - case 'h': - LEGAL_ALT(0); - for (i = 0; i < 12; i++) { - // Full name. - len = strlen(mon[i]); - if (strncasecmp(mon[i], bp, len) == 0) - break; - - // Abbreviated name. - len = strlen(abmon[i]); - if (strncasecmp(abmon[i], bp, len) == 0) - break; - } - - // Nothing matched. - if (i == 12) - return (0); - - tm->tm_mon = i; - bp += len; - break; - - case 'C': // The century number. - LEGAL_ALT(ALT_E); - if (!(conv_num(&bp, &i, 0, 99))) - return (0); - - if (split_year) { - tm->tm_year = (tm->tm_year % 100) + (i * 100); - } else { - tm->tm_year = i * 100; - split_year = 1; - } - break; - - case 'd': // The day of month. - case 'e': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_mday, 1, 31))) - return (0); - break; - - case 'k': // The hour (24-hour clock representation). - LEGAL_ALT(0); - // FALLTHROUGH - case 'H': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_hour, 0, 23))) - return (0); - break; - - case 'l': // The hour (12-hour clock representation). - LEGAL_ALT(0); - // FALLTHROUGH - case 'I': - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_hour, 1, 12))) - return (0); - if (tm->tm_hour == 12) - tm->tm_hour = 0; - break; - - case 'j': // The day of year. - LEGAL_ALT(0); - if (!(conv_num(&bp, &i, 1, 366))) - return (0); - tm->tm_yday = i - 1; - break; - - case 'M': // The minute. - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_min, 0, 59))) - return (0); - break; - - case 'm': // The month. - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &i, 1, 12))) - return (0); - tm->tm_mon = i - 1; - break; - - case 'p': // The locale's equivalent of AM/PM. - LEGAL_ALT(0); - // AM? - if (strcasecmp(am_pm[0], bp) == 0) { - if (tm->tm_hour > 11) - return (0); - - bp += strlen(am_pm[0]); - break; - } - // PM? - else if (strcasecmp(am_pm[1], bp) == 0) { - if (tm->tm_hour > 11) - return (0); - - tm->tm_hour += 12; - bp += strlen(am_pm[1]); - break; - } - - // Nothing matched. - return (0); - - case 'S': // The seconds. - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_sec, 0, 61))) - return (0); - break; - - case 'U': // The week of year, beginning on sunday. - case 'W': // The week of year, beginning on monday. - LEGAL_ALT(ALT_O); - // XXX This is bogus, as we can not assume any valid - // information present in the tm structure at this - // point to calculate a real value, so just check the - // range for now. - if (!(conv_num(&bp, &i, 0, 53))) - return (0); - break; - - case 'w': // The day of week, beginning on sunday. - LEGAL_ALT(ALT_O); - if (!(conv_num(&bp, &tm->tm_wday, 0, 6))) - return (0); - break; - - case 'Y': // The year. - LEGAL_ALT(ALT_E); - if (!(conv_num(&bp, &i, 0, 9999))) - return (0); - - tm->tm_year = i - TM_YEAR_BASE; - break; - - case 'y': // The year within 100 years of the epoch. - LEGAL_ALT(ALT_E | ALT_O); - if (!(conv_num(&bp, &i, 0, 99))) - return (0); - - if (split_year) { - tm->tm_year = ((tm->tm_year / 100) * 100) + i; - break; - } - split_year = 1; - if (i <= 68) - tm->tm_year = i + 2000 - TM_YEAR_BASE; - else - tm->tm_year = i + 1900 - TM_YEAR_BASE; - break; - - // Miscellaneous conversions. - case 'n': // Any kind of white-space. - case 't': - LEGAL_ALT(0); - while (isspace(*bp)) - bp++; - break; - - default: // Unknown/unsupported conversion. - return (0); - } - - } - - // LINTED functional specification - return ((char *)bp); -} - -// ---------------------------------------------------------------- -static int conv_num(const char **buf, int *dest, int llim, int ulim) { - int result = 0; - - // The limit also determines the number of valid digits. - int rulim = ulim; - - if (**buf < '0' || **buf > '9') - return (0); - - do { - result *= 10; - result += *(*buf)++ - '0'; - rulim /= 10; - } while ((result * 10 <= ulim) && rulim && **buf >= '0' && **buf <= '9'); - - if (result < llim || result > ulim) - return (0); - - *dest = result; - return (1); -} diff --git a/c/lib/netbsd_strptime.h b/c/lib/netbsd_strptime.h deleted file mode 100644 index 2239d688f..000000000 --- a/c/lib/netbsd_strptime.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef NETBSD_STRPTIME_H -#define NETBSD_STRPTIME_H - -#include -char* netbsd_strptime(const char *buf, const char *fmt, struct tm *tm); - -#endif // NETBSD_STRPTIME_H diff --git a/c/lib/nlnet_timegm.c b/c/lib/nlnet_timegm.c deleted file mode 100644 index 413ef3ce0..000000000 --- a/c/lib/nlnet_timegm.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. - * - * This software is open source. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of the NLNET LABS nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -/* Number of days per month (except for February in leap years). */ -static const int monoff[] = { - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 -}; - -static int is_leap_year(int year) { - return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); -} - -static int leap_days(int y1, int y2) { - --y1; - --y2; - return (y2/4 - y1/4) - (y2/100 - y1/100) + (y2/400 - y1/400); -} - -/* - * Code adapted from Python 2.4.1 sources (Lib/calendar.py). - */ -time_t nlnet_timegm(const struct tm *tm) { - int year; - time_t days; - time_t hours; - time_t minutes; - time_t seconds; - - year = 1900 + tm->tm_year; - days = 365 * (year - 1970) + leap_days(1970, year); - days += monoff[tm->tm_mon]; - - if (tm->tm_mon > 1 && is_leap_year(year)) - ++days; - days += tm->tm_mday - 1; - - hours = days * 24 + tm->tm_hour; - minutes = hours * 60 + tm->tm_min; - seconds = minutes * 60 + tm->tm_sec; - - return seconds; -} diff --git a/c/lib/nlnet_timegm.h b/c/lib/nlnet_timegm.h deleted file mode 100644 index 5321ba98f..000000000 --- a/c/lib/nlnet_timegm.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. - * - * This software is open source. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * Neither the name of the NLNET LABS nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NLNET_TIMEGM_H -#define NLNET_TIMEGM_H - -#include - -time_t nlnet_timegm(const struct tm *tm); - -#endif // NLNET_TIMEGM_H diff --git a/c/lib/string_array.c b/c/lib/string_array.c deleted file mode 100644 index 70d6701b0..000000000 --- a/c/lib/string_array.c +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "string_array.h" - -string_array_t* string_array_alloc(int length) { - string_array_t* parray = mlr_malloc_or_die(sizeof(string_array_t)); - parray->length = length; - parray->strings_need_freeing = FALSE; - parray->strings = mlr_malloc_or_die(length * sizeof(char*)); - for (int i = 0; i < length; i++) - parray->strings[i] = NULL; - return parray; -} - -void string_array_free(string_array_t* parray) { - if (parray == NULL) - return; - if (parray->strings_need_freeing) { - for (int i = 0; i < parray->length; i++) - free(parray->strings[i]); - } - free(parray->strings); - free(parray); -} - -void string_array_realloc(string_array_t* parray, int new_length) { - if (parray->strings_need_freeing) - for (int i = 0; i < parray->length; i++) - free(parray->strings[i]); - if (new_length > parray->length) // else re-use - parray->strings = mlr_realloc_or_die(parray->strings, new_length * sizeof(char*)); - parray->length = new_length; - for (int i = 0; i < parray->length; i++) - parray->strings[i] = NULL; - parray->strings_need_freeing = FALSE; -} - -string_array_t* string_array_from_line(char* line, char ifs) { - if (*line == 0) // empty string splits to empty array - return string_array_alloc(0); - - int num_commas = 0; - - for (char* p = line; *p; p++) - if (*p == ifs) - num_commas++; - - string_array_t* parray = string_array_alloc(num_commas + 1); - - char* start = line; - int i = 0; - for (char* p = line; *p; p++) { - if (*p == ifs) { - *p = 0; - p++; - parray->strings[i++] = start; - start = p; - } - } - parray->strings[i++] = start; - - return parray; -} diff --git a/c/lib/string_array.h b/c/lib/string_array.h deleted file mode 100644 index f31773e97..000000000 --- a/c/lib/string_array.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef STRING_ARRAY_H -#define STRING_ARRAY_H - -// Container class for keeping an array of strings, some of which may be null. -typedef struct _string_array_t { - int length; - int strings_need_freeing; - char** strings; -} string_array_t; - -string_array_t* string_array_alloc(int length); -void string_array_free(string_array_t* parray); -void string_array_realloc(string_array_t* parray, int new_length); -string_array_t* string_array_from_line(char* line, char ifs); - -#endif // STRING_ARRAY_H diff --git a/c/lib/string_builder.c b/c/lib/string_builder.c deleted file mode 100644 index 5cfbadb38..000000000 --- a/c/lib/string_builder.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include "string_builder.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" - -// To avoid heap fragmentation, round alloc lengths up to a round number. -#define BLOCK_SIZE 32 -#define BLOCK_LENGTH_MASK (BLOCK_SIZE-1) -#define BLOCK_LENGTH_NMASK (~(BLOCK_SIZE-1)) - -// ---------------------------------------------------------------- -string_builder_t* sb_alloc(int alloc_length) { - string_builder_t* psb = mlr_malloc_or_die(sizeof(string_builder_t)); - sb_init(psb, alloc_length); - return psb; -} - -// ---------------------------------------------------------------- -void sb_free(string_builder_t* psb) { - if (psb == NULL) - return; - free(psb->buffer); - free(psb); -} - -// ---------------------------------------------------------------- -void sb_init(string_builder_t* psb, int alloc_length) { - if (alloc_length < 1) { - fprintf(stderr, "%s: string_builder alloc_length must be >= 1; got %d.\n", - MLR_GLOBALS.bargv0, alloc_length); - exit(1); - } - psb->used_length = 0; - psb->alloc_length = alloc_length; - psb->buffer = mlr_malloc_or_die(alloc_length); -} - -// ---------------------------------------------------------------- -void sb_append_string(string_builder_t* psb, char* s) { - for (char* p = s; *p; p++) - sb_append_char(psb, *p); -} - -// ---------------------------------------------------------------- -int sb_is_empty(string_builder_t* psb) { - return psb->used_length == 0; -} - -// ---------------------------------------------------------------- -// Keep and reuse the internal buffer. Allocate to the caller only -// the size needed. -char* sb_finish(string_builder_t* psb) { - sb_append_char(psb, '\0'); - int alloc_length = (psb->used_length + BLOCK_LENGTH_MASK) & BLOCK_LENGTH_NMASK; - char* rv = mlr_malloc_or_die(alloc_length); - memcpy(rv, psb->buffer, psb->used_length); - psb->used_length = 0; - return rv; -} - -char* sb_finish_with_length(string_builder_t* psb, int* pline_length) { - sb_append_char(psb, '\0'); - int alloc_length = (psb->used_length + BLOCK_LENGTH_MASK) & BLOCK_LENGTH_NMASK; - char* rv = mlr_malloc_or_die(alloc_length); - memcpy(rv, psb->buffer, psb->used_length); - // Line length doesn't include null terminator; used length does. - *pline_length = psb->used_length - 1; - psb->used_length = 0; - return rv; -} - -// ---------------------------------------------------------------- -void _sb_enlarge(string_builder_t* psb) { - int new_alloc_length = psb->alloc_length * 2; - char* new_buffer = mlr_malloc_or_die(new_alloc_length); - memcpy(new_buffer, psb->buffer, psb->used_length); - free(psb->buffer); - psb->alloc_length = new_alloc_length; - psb->buffer = new_buffer; -} diff --git a/c/lib/string_builder.h b/c/lib/string_builder.h deleted file mode 100644 index 9352b6dbd..000000000 --- a/c/lib/string_builder.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef STRING_BUILDER_H -#define STRING_BUILDER_H - -typedef struct _string_builder_t { - int used_length; - int alloc_length; - char* buffer; -} string_builder_t; - -string_builder_t* sb_alloc(int alloc_length); -void sb_free(string_builder_t* psb); -void sb_init(string_builder_t* psb, int alloc_length); -void _sb_enlarge(string_builder_t* psb); // private method - -static inline void sb_append_char(string_builder_t* psb, char c) { - if (psb->used_length >= psb->alloc_length) - _sb_enlarge(psb); - psb->buffer[psb->used_length++] = c; -} -static inline void sb_append_chars(string_builder_t* psb, char* s, int so, int eo) { - char* p = s+so; - char* e = s+eo; - while (p <= e) - sb_append_char(psb, *(p++)); -} -static inline void sb_append_char_range(string_builder_t* psb, char* b, char* e) { - char* p = b; - while (p <= e) - sb_append_char(psb, *(p++)); -} - -void sb_append_string(string_builder_t* psb, char* s); -int sb_is_empty(string_builder_t* psb); -// The caller should free() the return value: -char* sb_finish(string_builder_t* psb); -char* sb_finish_with_length(string_builder_t* psb, int* pline_length); - -#endif // STRING_BUILDER_H diff --git a/c/lib/utf8.h b/c/lib/utf8.h deleted file mode 100644 index 3a38985d4..000000000 --- a/c/lib/utf8.h +++ /dev/null @@ -1,1315 +0,0 @@ -// The latest version of this library is available on GitHub; -// https://github.com/sheredom/utf8.h - -// This is free and unencumbered software released into the public domain. -// -// Anyone is free to copy, modify, publish, use, compile, sell, or -// distribute this software, either in source code form or as a compiled -// binary, for any purpose, commercial or non-commercial, and by any -// means. -// -// In jurisdictions that recognize copyright laws, the author or authors -// of this software dedicate any and all copyright interest in the -// software to the public domain. We make this dedication for the benefit -// of the public at large and to the detriment of our heirs and -// successors. We intend this dedication to be an overt act of -// relinquishment in perpetuity of all present and future rights to this -// software under copyright law. -// -// 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 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// -// For more information, please refer to - -#ifndef SHEREDOM_UTF8_H_INCLUDED -#define SHEREDOM_UTF8_H_INCLUDED - -#if defined(_MSC_VER) -#pragma warning(push) - -// disable 'bytes padding added after construct' warning -#pragma warning(disable : 4820) -#endif - -#include -#include - -#if defined(_MSC_VER) -#pragma warning(pop) -#endif - -#if defined(_MSC_VER) -typedef __int32 utf8_int32_t; -#else -#include -typedef int32_t utf8_int32_t; -#endif - -#if defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wold-style-cast" -#pragma clang diagnostic ignored "-Wcast-qual" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(__clang__) || defined(__GNUC__) -#define utf8_nonnull __attribute__((nonnull)) -#define utf8_pure __attribute__((pure)) -#define utf8_restrict __restrict__ -#define utf8_weak __attribute__((weak)) -#elif defined(_MSC_VER) -#define utf8_nonnull -#define utf8_pure -#define utf8_restrict __restrict -#define utf8_weak __inline -#else -#error Non clang, non gcc, non MSVC compiler found! -#endif - -#ifdef __cplusplus -#define utf8_null NULL -#else -#define utf8_null 0 -#endif - -// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > -// src2 respectively, case insensitive. -utf8_nonnull utf8_pure utf8_weak int utf8casecmp(const void *src1, - const void *src2); - -// Append the utf8 string src onto the utf8 string dst. -utf8_nonnull utf8_weak void *utf8cat(void *utf8_restrict dst, - const void *utf8_restrict src); - -// Find the first match of the utf8 codepoint chr in the utf8 string src. -utf8_nonnull utf8_pure utf8_weak void *utf8chr(const void *src, - utf8_int32_t chr); - -// Return less than 0, 0, greater than 0 if src1 < src2, -// src1 == src2, src1 > src2 respectively. -utf8_nonnull utf8_pure utf8_weak int utf8cmp(const void *src1, - const void *src2); - -// Copy the utf8 string src onto the memory allocated in dst. -utf8_nonnull utf8_weak void *utf8cpy(void *utf8_restrict dst, - const void *utf8_restrict src); - -// Number of utf8 codepoints in the utf8 string src that consists entirely -// of utf8 codepoints not from the utf8 string reject. -utf8_nonnull utf8_pure utf8_weak size_t utf8cspn(const void *src, - const void *reject); - -// Duplicate the utf8 string src by getting its size, malloc'ing a new buffer -// copying over the data, and returning that. Or 0 if malloc failed. -utf8_nonnull utf8_weak void *utf8dup(const void *src); - -// Number of utf8 codepoints in the utf8 string str, -// excluding the null terminating byte. -utf8_nonnull utf8_pure utf8_weak size_t utf8len(const void *str); - -// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > -// src2 respectively, case insensitive. Checking at most n bytes of each utf8 -// string. -utf8_nonnull utf8_pure utf8_weak int utf8ncasecmp(const void *src1, - const void *src2, size_t n); - -// Append the utf8 string src onto the utf8 string dst, -// writing at most n+1 bytes. Can produce an invalid utf8 -// string if n falls partway through a utf8 codepoint. -utf8_nonnull utf8_weak void *utf8ncat(void *utf8_restrict dst, - const void *utf8_restrict src, size_t n); - -// Return less than 0, 0, greater than 0 if src1 < src2, -// src1 == src2, src1 > src2 respectively. Checking at most n -// bytes of each utf8 string. -utf8_nonnull utf8_pure utf8_weak int utf8ncmp(const void *src1, - const void *src2, size_t n); - -// Copy the utf8 string src onto the memory allocated in dst. -// Copies at most n bytes. If there is no terminating null byte in -// the first n bytes of src, the string placed into dst will not be -// null-terminated. If the size (in bytes) of src is less than n, -// extra null terminating bytes are appended to dst such that at -// total of n bytes are written. Can produce an invalid utf8 -// string if n falls partway through a utf8 codepoint. -utf8_nonnull utf8_weak void *utf8ncpy(void *utf8_restrict dst, - const void *utf8_restrict src, size_t n); - -// Similar to utf8dup, except that at most n bytes of src are copied. If src is -// longer than n, only n bytes are copied and a null byte is added. -// -// Returns a new string if successful, 0 otherwise -utf8_nonnull utf8_weak void *utf8ndup(const void *src, size_t n); - -// Locates the first occurrence in the utf8 string str of any byte in the -// utf8 string accept, or 0 if no match was found. -utf8_nonnull utf8_pure utf8_weak void *utf8pbrk(const void *str, - const void *accept); - -// Find the last match of the utf8 codepoint chr in the utf8 string src. -utf8_nonnull utf8_pure utf8_weak void *utf8rchr(const void *src, int chr); - -// Number of bytes in the utf8 string str, -// including the null terminating byte. -utf8_nonnull utf8_pure utf8_weak size_t utf8size(const void *str); - -// Number of utf8 codepoints in the utf8 string src that consists entirely -// of utf8 codepoints from the utf8 string accept. -utf8_nonnull utf8_pure utf8_weak size_t utf8spn(const void *src, - const void *accept); - -// The position of the utf8 string needle in the utf8 string haystack. -utf8_nonnull utf8_pure utf8_weak void *utf8str(const void *haystack, - const void *needle); - -// The position of the utf8 string needle in the utf8 string haystack, case -// insensitive. -utf8_nonnull utf8_pure utf8_weak void *utf8casestr(const void *haystack, - const void *needle); - -// Return 0 on success, or the position of the invalid -// utf8 codepoint on failure. -utf8_nonnull utf8_pure utf8_weak void *utf8valid(const void *str); - -// Sets out_codepoint to the next utf8 codepoint in str, and returns the address -// of the utf8 codepoint after the current one in str. -utf8_nonnull utf8_weak void * -utf8codepoint(const void *utf8_restrict str, - utf8_int32_t *utf8_restrict out_codepoint); - -// Calculates the size of the next utf8 codepoint in str. -utf8_nonnull utf8_weak size_t utf8codepointcalcsize( const void* utf8_restrict str ); - -// Returns the size of the given codepoint in bytes. -utf8_weak size_t utf8codepointsize(utf8_int32_t chr); - -// Write a codepoint to the given string, and return the address to the next -// place after the written codepoint. Pass how many bytes left in the buffer to -// n. If there is not enough space for the codepoint, this function returns -// null. -utf8_nonnull utf8_weak void *utf8catcodepoint(void *utf8_restrict str, - utf8_int32_t chr, size_t n); - -// Returns 1 if the given character is lowercase, or 0 if it is not. -utf8_weak int utf8islower(utf8_int32_t chr); - -// Returns 1 if the given character is uppercase, or 0 if it is not. -utf8_weak int utf8isupper(utf8_int32_t chr); - -// Transform the given string into all lowercase codepoints. -utf8_nonnull utf8_weak void utf8lwr(void *utf8_restrict str); - -// Transform the given string into all uppercase codepoints. -utf8_nonnull utf8_weak void utf8upr(void *utf8_restrict str); - -// Transform the first codepoint (if any) of the given string into uppercase. -utf8_nonnull utf8_weak void utf8upr1(void *utf8_restrict str); - -// Make a codepoint lower case if possible. -utf8_weak utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); - -// Make a codepoint upper case if possible. -utf8_weak utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); - -#undef utf8_weak -#undef utf8_pure -#undef utf8_nonnull - -int utf8casecmp(const void *src1, const void *src2) { - utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; - - for (;;) { - src1 = utf8codepoint(src1, &src1_cp); - src2 = utf8codepoint(src2, &src2_cp); - - // take a copy of src1 & src2 - src1_orig_cp = src1_cp; - src2_orig_cp = src2_cp; - - // lower the srcs if required - src1_cp = utf8lwrcodepoint(src1_cp); - src2_cp = utf8lwrcodepoint(src2_cp); - - // check if the lowered codepoints match - if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { - return 0; - } else if (src1_cp == src2_cp) { - continue; - } - - // if they don't match, then we return the difference between the characters - return src1_cp - src2_cp; - } -} - -void *utf8cat(void *utf8_restrict dst, const void *utf8_restrict src) { - char *d = (char *)dst; - const char *s = (const char *)src; - - // find the null terminating byte in dst - while ('\0' != *d) { - d++; - } - - // overwriting the null terminating byte in dst, append src byte-by-byte - while ('\0' != *s) { - *d++ = *s++; - } - - // write out a new null terminating byte into dst - *d = '\0'; - - return dst; -} - -void *utf8chr(const void *src, utf8_int32_t chr) { - char c[5] = {'\0', '\0', '\0', '\0', '\0'}; - - if (0 == chr) { - // being asked to return position of null terminating byte, so - // just run s to the end, and return! - const char *s = (const char *)src; - while ('\0' != *s) { - s++; - } - return (void *)s; - } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { - // 1-byte/7-bit ascii - // (0b0xxxxxxx) - c[0] = (char)chr; - } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { - // 2-byte/11-bit utf8 code point - // (0b110xxxxx 0b10xxxxxx) - c[0] = 0xc0 | (char)(chr >> 6); - c[1] = 0x80 | (char)(chr & 0x3f); - } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { - // 3-byte/16-bit utf8 code point - // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) - c[0] = 0xe0 | (char)(chr >> 12); - c[1] = 0x80 | (char)((chr >> 6) & 0x3f); - c[2] = 0x80 | (char)(chr & 0x3f); - } else { // if (0 == ((int)0xffe00000 & chr)) { - // 4-byte/21-bit utf8 code point - // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) - c[0] = 0xf0 | (char)(chr >> 18); - c[1] = 0x80 | (char)((chr >> 12) & 0x3f); - c[2] = 0x80 | (char)((chr >> 6) & 0x3f); - c[3] = 0x80 | (char)(chr & 0x3f); - } - - // we've made c into a 2 utf8 codepoint string, one for the chr we are - // seeking, another for the null terminating byte. Now use utf8str to - // search - return utf8str(src, c); -} - -int utf8cmp(const void *src1, const void *src2) { - const unsigned char *s1 = (const unsigned char *)src1; - const unsigned char *s2 = (const unsigned char *)src2; - - while (('\0' != *s1) || ('\0' != *s2)) { - if (*s1 < *s2) { - return -1; - } else if (*s1 > *s2) { - return 1; - } - - s1++; - s2++; - } - - // both utf8 strings matched - return 0; -} - -int utf8coll(const void *src1, const void *src2); - -void *utf8cpy(void *utf8_restrict dst, const void *utf8_restrict src) { - char *d = (char *)dst; - const char *s = (const char *)src; - - // overwriting anything previously in dst, write byte-by-byte - // from src - while ('\0' != *s) { - *d++ = *s++; - } - - // append null terminating byte - *d = '\0'; - - return dst; -} - -size_t utf8cspn(const void *src, const void *reject) { - const char *s = (const char *)src; - size_t chars = 0; - - while ('\0' != *s) { - const char *r = (const char *)reject; - size_t offset = 0; - - while ('\0' != *r) { - // checking that if *r is the start of a utf8 codepoint - // (it is not 0b10xxxxxx) and we have successfully matched - // a previous character (0 < offset) - we found a match - if ((0x80 != (0xc0 & *r)) && (0 < offset)) { - return chars; - } else { - if (*r == s[offset]) { - // part of a utf8 codepoint matched, so move our checking - // onwards to the next byte - offset++; - r++; - } else { - // r could be in the middle of an unmatching utf8 code point, - // so we need to march it on to the next character beginning, - - do { - r++; - } while (0x80 == (0xc0 & *r)); - - // reset offset too as we found a mismatch - offset = 0; - } - } - } - - // found a match at the end of *r, so didn't get a chance to test it - if (0 < offset) { - return chars; - } - - // the current utf8 codepoint in src did not match reject, but src - // could have been partway through a utf8 codepoint, so we need to - // march it onto the next utf8 codepoint starting byte - do { - s++; - } while ((0x80 == (0xc0 & *s))); - chars++; - } - - return chars; -} - -void *utf8dup(const void *src) { - const char *s = (const char *)src; - char *n = utf8_null; - - // figure out how many bytes (including the terminator) we need to copy first - size_t bytes = utf8size(src); - - n = (char *)malloc(bytes); - - if (utf8_null == n) { - // out of memory so we bail - return utf8_null; - } else { - bytes = 0; - - // copy src byte-by-byte into our new utf8 string - while ('\0' != s[bytes]) { - n[bytes] = s[bytes]; - bytes++; - } - - // append null terminating byte - n[bytes] = '\0'; - return n; - } -} - -void *utf8fry(const void *str); - -size_t utf8len(const void *str) { - const unsigned char *s = (const unsigned char *)str; - size_t length = 0; - - while ('\0' != *s) { - if (0xf0 == (0xf8 & *s)) { - // 4-byte utf8 code point (began with 0b11110xxx) - s += 4; - } else if (0xe0 == (0xf0 & *s)) { - // 3-byte utf8 code point (began with 0b1110xxxx) - s += 3; - } else if (0xc0 == (0xe0 & *s)) { - // 2-byte utf8 code point (began with 0b110xxxxx) - s += 2; - } else { // if (0x00 == (0x80 & *s)) { - // 1-byte ascii (began with 0b0xxxxxxx) - s += 1; - } - - // no matter the bytes we marched s forward by, it was - // only 1 utf8 codepoint - length++; - } - - return length; -} - -int utf8ncasecmp(const void *src1, const void *src2, size_t n) { - utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; - - do { - const unsigned char *const s1 = (const unsigned char *)src1; - const unsigned char *const s2 = (const unsigned char *)src2; - - // first check that we have enough bytes left in n to contain an entire - // codepoint - if (0 == n) { - return 0; - } - - if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { - const utf8_int32_t c1 = (0xe0 & *s1); - const utf8_int32_t c2 = (0xe0 & *s2); - - if (c1 < c2) { - return c1 - c2; - } else { - return 0; - } - } - - if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { - const utf8_int32_t c1 = (0xf0 & *s1); - const utf8_int32_t c2 = (0xf0 & *s2); - - if (c1 < c2) { - return c1 - c2; - } else { - return 0; - } - } - - if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { - const utf8_int32_t c1 = (0xf8 & *s1); - const utf8_int32_t c2 = (0xf8 & *s2); - - if (c1 < c2) { - return c1 - c2; - } else { - return 0; - } - } - - src1 = utf8codepoint(src1, &src1_cp); - src2 = utf8codepoint(src2, &src2_cp); - n -= utf8codepointsize(src1_cp); - - // Take a copy of src1 & src2 - src1_orig_cp = src1_cp; - src2_orig_cp = src2_cp; - - // Lower srcs if required - src1_cp = utf8lwrcodepoint(src1_cp); - src2_cp = utf8lwrcodepoint(src2_cp); - - // Check if the lowered codepoints match - if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { - return 0; - } else if (src1_cp == src2_cp) { - continue; - } - - // if they don't match, then we return the difference between the characters - if (src1_orig_cp != src2_orig_cp) { - return src1_cp - src2_cp; - } - } while (0 < n); - - // both utf8 strings matched - return 0; -} - -void *utf8ncat(void *utf8_restrict dst, const void *utf8_restrict src, - size_t n) { - char *d = (char *)dst; - const char *s = (const char *)src; - - // find the null terminating byte in dst - while ('\0' != *d) { - d++; - } - - // overwriting the null terminating byte in dst, append src byte-by-byte - // stopping if we run out of space - do { - *d++ = *s++; - } while (('\0' != *s) && (0 != --n)); - - // write out a new null terminating byte into dst - *d = '\0'; - - return dst; -} - -int utf8ncmp(const void *src1, const void *src2, size_t n) { - const unsigned char *s1 = (const unsigned char *)src1; - const unsigned char *s2 = (const unsigned char *)src2; - - while ((0 != n--) && (('\0' != *s1) || ('\0' != *s2))) { - if (*s1 < *s2) { - return -1; - } else if (*s1 > *s2) { - return 1; - } - - s1++; - s2++; - } - - // both utf8 strings matched - return 0; -} - -void *utf8ncpy(void *utf8_restrict dst, const void *utf8_restrict src, - size_t n) { - char *d = (char *)dst; - const char *s = (const char *)src; - size_t index; - - // overwriting anything previously in dst, write byte-by-byte - // from src - for (index = 0; index < n; index++) { - d[index] = s[index]; - if ('\0' == s[index]) { - break; - } - } - - // append null terminating byte - for (; index < n; index++) { - d[index] = 0; - } - - return dst; -} - -void *utf8ndup(const void *src, size_t n) { - const char *s = (const char *)src; - char *c = utf8_null; - size_t bytes = 0; - - // Find the end of the string or stop when n is reached - while ('\0' != s[bytes] && bytes < n) { - bytes++; - } - - // In case bytes is actually less than n, we need to set it - // to be used later in the copy byte by byte. - n = bytes; - - c = (char *)malloc(bytes + 1); - if (utf8_null == c) { - // out of memory so we bail - return utf8_null; - } - - bytes = 0; - - // copy src byte-by-byte into our new utf8 string - while ('\0' != s[bytes] && bytes < n) { - c[bytes] = s[bytes]; - bytes++; - } - - // append null terminating byte - c[bytes] = '\0'; - return c; -} - -void *utf8rchr(const void *src, int chr) { - const char *s = (const char *)src; - const char *match = utf8_null; - char c[5] = {'\0', '\0', '\0', '\0', '\0'}; - - if (0 == chr) { - // being asked to return position of null terminating byte, so - // just run s to the end, and return! - while ('\0' != *s) { - s++; - } - return (void *)s; - } else if (0 == ((int)0xffffff80 & chr)) { - // 1-byte/7-bit ascii - // (0b0xxxxxxx) - c[0] = (char)chr; - } else if (0 == ((int)0xfffff800 & chr)) { - // 2-byte/11-bit utf8 code point - // (0b110xxxxx 0b10xxxxxx) - c[0] = 0xc0 | (char)(chr >> 6); - c[1] = 0x80 | (char)(chr & 0x3f); - } else if (0 == ((int)0xffff0000 & chr)) { - // 3-byte/16-bit utf8 code point - // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) - c[0] = 0xe0 | (char)(chr >> 12); - c[1] = 0x80 | (char)((chr >> 6) & 0x3f); - c[2] = 0x80 | (char)(chr & 0x3f); - } else { // if (0 == ((int)0xffe00000 & chr)) { - // 4-byte/21-bit utf8 code point - // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) - c[0] = 0xf0 | (char)(chr >> 18); - c[1] = 0x80 | (char)((chr >> 12) & 0x3f); - c[2] = 0x80 | (char)((chr >> 6) & 0x3f); - c[3] = 0x80 | (char)(chr & 0x3f); - } - - // we've created a 2 utf8 codepoint string in c that is - // the utf8 character asked for by chr, and a null - // terminating byte - - while ('\0' != *s) { - size_t offset = 0; - - while (s[offset] == c[offset]) { - offset++; - } - - if ('\0' == c[offset]) { - // we found a matching utf8 code point - match = s; - s += offset; - } else { - s += offset; - - // need to march s along to next utf8 codepoint start - // (the next byte that doesn't match 0b10xxxxxx) - if ('\0' != *s) { - do { - s++; - } while (0x80 == (0xc0 & *s)); - } - } - } - - // return the last match we found (or 0 if no match was found) - return (void *)match; -} - -void *utf8pbrk(const void *str, const void *accept) { - const char *s = (const char *)str; - - while ('\0' != *s) { - const char *a = (const char *)accept; - size_t offset = 0; - - while ('\0' != *a) { - // checking that if *a is the start of a utf8 codepoint - // (it is not 0b10xxxxxx) and we have successfully matched - // a previous character (0 < offset) - we found a match - if ((0x80 != (0xc0 & *a)) && (0 < offset)) { - return (void *)s; - } else { - if (*a == s[offset]) { - // part of a utf8 codepoint matched, so move our checking - // onwards to the next byte - offset++; - a++; - } else { - // r could be in the middle of an unmatching utf8 code point, - // so we need to march it on to the next character beginning, - - do { - a++; - } while (0x80 == (0xc0 & *a)); - - // reset offset too as we found a mismatch - offset = 0; - } - } - } - - // we found a match on the last utf8 codepoint - if (0 < offset) { - return (void *)s; - } - - // the current utf8 codepoint in src did not match accept, but src - // could have been partway through a utf8 codepoint, so we need to - // march it onto the next utf8 codepoint starting byte - do { - s++; - } while ((0x80 == (0xc0 & *s))); - } - - return utf8_null; -} - -size_t utf8size(const void *str) { - const char *s = (const char *)str; - size_t size = 0; - while ('\0' != s[size]) { - size++; - } - - // we are including the null terminating byte in the size calculation - size++; - return size; -} - -size_t utf8spn(const void *src, const void *accept) { - const char *s = (const char *)src; - size_t chars = 0; - - while ('\0' != *s) { - const char *a = (const char *)accept; - size_t offset = 0; - - while ('\0' != *a) { - // checking that if *r is the start of a utf8 codepoint - // (it is not 0b10xxxxxx) and we have successfully matched - // a previous character (0 < offset) - we found a match - if ((0x80 != (0xc0 & *a)) && (0 < offset)) { - // found a match, so increment the number of utf8 codepoints - // that have matched and stop checking whether any other utf8 - // codepoints in a match - chars++; - s += offset; - offset = 0; - break; - } else { - if (*a == s[offset]) { - offset++; - a++; - } else { - // a could be in the middle of an unmatching utf8 codepoint, - // so we need to march it on to the next character beginning, - do { - a++; - } while (0x80 == (0xc0 & *a)); - - // reset offset too as we found a mismatch - offset = 0; - } - } - } - - // found a match at the end of *a, so didn't get a chance to test it - if (0 < offset) { - chars++; - s += offset; - continue; - } - - // if a got to its terminating null byte, then we didn't find a match. - // Return the current number of matched utf8 codepoints - if ('\0' == *a) { - return chars; - } - } - - return chars; -} - -void *utf8str(const void *haystack, const void *needle) { - const char *h = (const char *)haystack; - utf8_int32_t throwaway_codepoint; - - // if needle has no utf8 codepoints before the null terminating - // byte then return haystack - if ('\0' == *((const char *)needle)) { - return (void *)haystack; - } - - while ('\0' != *h) { - const char *maybeMatch = h; - const char *n = (const char *)needle; - - while (*h == *n && (*h != '\0' && *n != '\0')) { - n++; - h++; - } - - if ('\0' == *n) { - // we found the whole utf8 string for needle in haystack at - // maybeMatch, so return it - return (void *)maybeMatch; - } else { - // h could be in the middle of an unmatching utf8 codepoint, - // so we need to march it on to the next character beginning - // starting from the current character - h = (const char*)utf8codepoint(maybeMatch, &throwaway_codepoint); - } - } - - // no match - return utf8_null; -} - -void *utf8casestr(const void *haystack, const void *needle) { - const void *h = haystack; - - // if needle has no utf8 codepoints before the null terminating - // byte then return haystack - if ('\0' == *((const char *)needle)) { - return (void *)haystack; - } - - for (;;) { - const void *maybeMatch = h; - const void *n = needle; - utf8_int32_t h_cp, n_cp; - - // Get the next code point and track it - const void *nextH = h = utf8codepoint(h, &h_cp); - n = utf8codepoint(n, &n_cp); - - while ((0 != h_cp) && (0 != n_cp)) { - h_cp = utf8lwrcodepoint(h_cp); - n_cp = utf8lwrcodepoint(n_cp); - - // if we find a mismatch, bail out! - if (h_cp != n_cp) { - break; - } - - h = utf8codepoint(h, &h_cp); - n = utf8codepoint(n, &n_cp); - } - - if (0 == n_cp) { - // we found the whole utf8 string for needle in haystack at - // maybeMatch, so return it - return (void *)maybeMatch; - } - - if (0 == h_cp) { - // no match - return utf8_null; - } - - // Roll back to the next code point in the haystack to test - h = nextH; - } -} - -void *utf8valid(const void *str) { - const char *s = (const char *)str; - - while ('\0' != *s) { - if (0xf0 == (0xf8 & *s)) { - // ensure each of the 3 following bytes in this 4-byte - // utf8 codepoint began with 0b10xxxxxx - if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2])) || - (0x80 != (0xc0 & s[3]))) { - return (void *)s; - } - - // ensure that our utf8 codepoint ended after 4 bytes - if (0x80 == (0xc0 & s[4])) { - return (void *)s; - } - - // ensure that the top 5 bits of this 4-byte utf8 - // codepoint were not 0, as then we could have used - // one of the smaller encodings - if ((0 == (0x07 & s[0])) && (0 == (0x30 & s[1]))) { - return (void *)s; - } - - // 4-byte utf8 code point (began with 0b11110xxx) - s += 4; - } else if (0xe0 == (0xf0 & *s)) { - // ensure each of the 2 following bytes in this 3-byte - // utf8 codepoint began with 0b10xxxxxx - if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2]))) { - return (void *)s; - } - - // ensure that our utf8 codepoint ended after 3 bytes - if (0x80 == (0xc0 & s[3])) { - return (void *)s; - } - - // ensure that the top 5 bits of this 3-byte utf8 - // codepoint were not 0, as then we could have used - // one of the smaller encodings - if ((0 == (0x0f & s[0])) && (0 == (0x20 & s[1]))) { - return (void *)s; - } - - // 3-byte utf8 code point (began with 0b1110xxxx) - s += 3; - } else if (0xc0 == (0xe0 & *s)) { - // ensure the 1 following byte in this 2-byte - // utf8 codepoint began with 0b10xxxxxx - if (0x80 != (0xc0 & s[1])) { - return (void *)s; - } - - // ensure that our utf8 codepoint ended after 2 bytes - if (0x80 == (0xc0 & s[2])) { - return (void *)s; - } - - // ensure that the top 4 bits of this 2-byte utf8 - // codepoint were not 0, as then we could have used - // one of the smaller encodings - if (0 == (0x1e & s[0])) { - return (void *)s; - } - - // 2-byte utf8 code point (began with 0b110xxxxx) - s += 2; - } else if (0x00 == (0x80 & *s)) { - // 1-byte ascii (began with 0b0xxxxxxx) - s += 1; - } else { - // we have an invalid 0b1xxxxxxx utf8 code point entry - return (void *)s; - } - } - - return utf8_null; -} - -void *utf8codepoint(const void *utf8_restrict str, - utf8_int32_t *utf8_restrict out_codepoint) { - const char *s = (const char *)str; - - if (0xf0 == (0xf8 & s[0])) { - // 4 byte utf8 codepoint - *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | - ((0x3f & s[2]) << 6) | (0x3f & s[3]); - s += 4; - } else if (0xe0 == (0xf0 & s[0])) { - // 3 byte utf8 codepoint - *out_codepoint = - ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); - s += 3; - } else if (0xc0 == (0xe0 & s[0])) { - // 2 byte utf8 codepoint - *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); - s += 2; - } else { - // 1 byte utf8 codepoint otherwise - *out_codepoint = s[0]; - s += 1; - } - - return (void *)s; -} - -size_t utf8codepointcalcsize(const void *utf8_restrict str) { - const char *s = (const char *)str; - - if (0xf0 == (0xf8 & s[0])) { - // 4 byte utf8 codepoint - return 4; - } else if (0xe0 == (0xf0 & s[0])) { - // 3 byte utf8 codepoint - return 3; - } else if (0xc0 == (0xe0 & s[0])) { - // 2 byte utf8 codepoint - return 2; - } - - // 1 byte utf8 codepoint otherwise - return 1; -} - -size_t utf8codepointsize(utf8_int32_t chr) { - if (0 == ((utf8_int32_t)0xffffff80 & chr)) { - return 1; - } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { - return 2; - } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { - return 3; - } else { // if (0 == ((int)0xffe00000 & chr)) { - return 4; - } -} - -void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n) { - char *s = (char *)str; - - if (0 == ((utf8_int32_t)0xffffff80 & chr)) { - // 1-byte/7-bit ascii - // (0b0xxxxxxx) - if (n < 1) { - return utf8_null; - } - s[0] = (char)chr; - s += 1; - } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { - // 2-byte/11-bit utf8 code point - // (0b110xxxxx 0b10xxxxxx) - if (n < 2) { - return utf8_null; - } - s[0] = 0xc0 | (char)(chr >> 6); - s[1] = 0x80 | (char)(chr & 0x3f); - s += 2; - } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { - // 3-byte/16-bit utf8 code point - // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) - if (n < 3) { - return utf8_null; - } - s[0] = 0xe0 | (char)(chr >> 12); - s[1] = 0x80 | (char)((chr >> 6) & 0x3f); - s[2] = 0x80 | (char)(chr & 0x3f); - s += 3; - } else { // if (0 == ((int)0xffe00000 & chr)) { - // 4-byte/21-bit utf8 code point - // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) - if (n < 4) { - return utf8_null; - } - s[0] = 0xf0 | (char)(chr >> 18); - s[1] = 0x80 | (char)((chr >> 12) & 0x3f); - s[2] = 0x80 | (char)((chr >> 6) & 0x3f); - s[3] = 0x80 | (char)(chr & 0x3f); - s += 4; - } - - return s; -} - -int utf8islower(utf8_int32_t chr) { return chr != utf8uprcodepoint(chr); } - -int utf8isupper(utf8_int32_t chr) { return chr != utf8lwrcodepoint(chr); } - -void utf8lwr(void *utf8_restrict str) { - void *p, *pn; - utf8_int32_t cp; - - p = (char *)str; - pn = utf8codepoint(p, &cp); - - while (cp != 0) { - const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); - const size_t size = utf8codepointsize(lwr_cp); - - if (lwr_cp != cp) { - utf8catcodepoint(p, lwr_cp, size); - } - - p = pn; - pn = utf8codepoint(p, &cp); - } -} - -void utf8upr(void *utf8_restrict str) { - void *p, *pn; - utf8_int32_t cp; - - p = (char *)str; - pn = utf8codepoint(p, &cp); - - while (cp != 0) { - const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); - const size_t size = utf8codepointsize(lwr_cp); - - if (lwr_cp != cp) { - utf8catcodepoint(p, lwr_cp, size); - } - - p = pn; - pn = utf8codepoint(p, &cp); - } -} - -void utf8upr1(void *utf8_restrict str) { - void *p, *pn; - utf8_int32_t cp; - - p = (char *)str; - pn = utf8codepoint(p, &cp); - - if (cp != 0) { - const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); - const size_t size = utf8codepointsize(lwr_cp); - - if (lwr_cp != cp) { - utf8catcodepoint(p, lwr_cp, size); - } - - p = pn; - pn = utf8codepoint(p, &cp); - } -} - -utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) { - if (((0x0041 <= cp) && (0x005a >= cp)) || - ((0x00c0 <= cp) && (0x00d6 >= cp)) || - ((0x00d8 <= cp) && (0x00de >= cp)) || - ((0x0391 <= cp) && (0x03a1 >= cp)) || - ((0x03a3 <= cp) && (0x03ab >= cp)) || - ((0x0410 <= cp) && (0x042f >= cp))) { - cp += 32; - } else if ((0x0400 <= cp) && (0x040f >= cp)) { - cp += 80; - } else if (((0x0100 <= cp) && (0x012f >= cp)) || - ((0x0132 <= cp) && (0x0137 >= cp)) || - ((0x014a <= cp) && (0x0177 >= cp)) || - ((0x0182 <= cp) && (0x0185 >= cp)) || - ((0x01a0 <= cp) && (0x01a5 >= cp)) || - ((0x01de <= cp) && (0x01ef >= cp)) || - ((0x01f8 <= cp) && (0x021f >= cp)) || - ((0x0222 <= cp) && (0x0233 >= cp)) || - ((0x0246 <= cp) && (0x024f >= cp)) || - ((0x03d8 <= cp) && (0x03ef >= cp)) || - ((0x0460 <= cp) && (0x0481 >= cp)) || - ((0x048a <= cp) && (0x04ff >= cp))) { - cp |= 0x1; - } else if (((0x0139 <= cp) && (0x0148 >= cp)) || - ((0x0179 <= cp) && (0x017e >= cp)) || - ((0x01af <= cp) && (0x01b0 >= cp)) || - ((0x01b3 <= cp) && (0x01b6 >= cp)) || - ((0x01cd <= cp) && (0x01dc >= cp))) { - cp += 1; - cp &= ~0x1; - } else { - switch (cp) { - default: break; - case 0x0178: cp = 0x00ff; break; - case 0x0243: cp = 0x0180; break; - case 0x018e: cp = 0x01dd; break; - case 0x023d: cp = 0x019a; break; - case 0x0220: cp = 0x019e; break; - case 0x01b7: cp = 0x0292; break; - case 0x01c4: cp = 0x01c6; break; - case 0x01c7: cp = 0x01c9; break; - case 0x01ca: cp = 0x01cc; break; - case 0x01f1: cp = 0x01f3; break; - case 0x01f7: cp = 0x01bf; break; - case 0x0187: cp = 0x0188; break; - case 0x018b: cp = 0x018c; break; - case 0x0191: cp = 0x0192; break; - case 0x0198: cp = 0x0199; break; - case 0x01a7: cp = 0x01a8; break; - case 0x01ac: cp = 0x01ad; break; - case 0x01af: cp = 0x01b0; break; - case 0x01b8: cp = 0x01b9; break; - case 0x01bc: cp = 0x01bd; break; - case 0x01f4: cp = 0x01f5; break; - case 0x023b: cp = 0x023c; break; - case 0x0241: cp = 0x0242; break; - case 0x03fd: cp = 0x037b; break; - case 0x03fe: cp = 0x037c; break; - case 0x03ff: cp = 0x037d; break; - case 0x037f: cp = 0x03f3; break; - case 0x0386: cp = 0x03ac; break; - case 0x0388: cp = 0x03ad; break; - case 0x0389: cp = 0x03ae; break; - case 0x038a: cp = 0x03af; break; - case 0x038c: cp = 0x03cc; break; - case 0x038e: cp = 0x03cd; break; - case 0x038f: cp = 0x03ce; break; - case 0x0370: cp = 0x0371; break; - case 0x0372: cp = 0x0373; break; - case 0x0376: cp = 0x0377; break; - case 0x03f4: cp = 0x03d1; break; - case 0x03cf: cp = 0x03d7; break; - case 0x03f9: cp = 0x03f2; break; - case 0x03f7: cp = 0x03f8; break; - case 0x03fa: cp = 0x03fb; break; - }; - } - - return cp; -} - -utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) { - if (((0x0061 <= cp) && (0x007a >= cp)) || - ((0x00e0 <= cp) && (0x00f6 >= cp)) || - ((0x00f8 <= cp) && (0x00fe >= cp)) || - ((0x03b1 <= cp) && (0x03c1 >= cp)) || - ((0x03c3 <= cp) && (0x03cb >= cp)) || - ((0x0430 <= cp) && (0x044f >= cp))) { - cp -= 32; - } else if ((0x0450 <= cp) && (0x045f >= cp)) { - cp -= 80; - } else if (((0x0100 <= cp) && (0x012f >= cp)) || - ((0x0132 <= cp) && (0x0137 >= cp)) || - ((0x014a <= cp) && (0x0177 >= cp)) || - ((0x0182 <= cp) && (0x0185 >= cp)) || - ((0x01a0 <= cp) && (0x01a5 >= cp)) || - ((0x01de <= cp) && (0x01ef >= cp)) || - ((0x01f8 <= cp) && (0x021f >= cp)) || - ((0x0222 <= cp) && (0x0233 >= cp)) || - ((0x0246 <= cp) && (0x024f >= cp)) || - ((0x03d8 <= cp) && (0x03ef >= cp)) || - ((0x0460 <= cp) && (0x0481 >= cp)) || - ((0x048a <= cp) && (0x04ff >= cp))) { - cp &= ~0x1; - } else if (((0x0139 <= cp) && (0x0148 >= cp)) || - ((0x0179 <= cp) && (0x017e >= cp)) || - ((0x01af <= cp) && (0x01b0 >= cp)) || - ((0x01b3 <= cp) && (0x01b6 >= cp)) || - ((0x01cd <= cp) && (0x01dc >= cp))) { - cp -= 1; - cp |= 0x1; - } else { - switch (cp) { - default: break; - case 0x00ff: cp = 0x0178; break; - case 0x0180: cp = 0x0243; break; - case 0x01dd: cp = 0x018e; break; - case 0x019a: cp = 0x023d; break; - case 0x019e: cp = 0x0220; break; - case 0x0292: cp = 0x01b7; break; - case 0x01c6: cp = 0x01c4; break; - case 0x01c9: cp = 0x01c7; break; - case 0x01cc: cp = 0x01ca; break; - case 0x01f3: cp = 0x01f1; break; - case 0x01bf: cp = 0x01f7; break; - case 0x0188: cp = 0x0187; break; - case 0x018c: cp = 0x018b; break; - case 0x0192: cp = 0x0191; break; - case 0x0199: cp = 0x0198; break; - case 0x01a8: cp = 0x01a7; break; - case 0x01ad: cp = 0x01ac; break; - case 0x01b0: cp = 0x01af; break; - case 0x01b9: cp = 0x01b8; break; - case 0x01bd: cp = 0x01bc; break; - case 0x01f5: cp = 0x01f4; break; - case 0x023c: cp = 0x023b; break; - case 0x0242: cp = 0x0241; break; - case 0x037b: cp = 0x03fd; break; - case 0x037c: cp = 0x03fe; break; - case 0x037d: cp = 0x03ff; break; - case 0x03f3: cp = 0x037f; break; - case 0x03ac: cp = 0x0386; break; - case 0x03ad: cp = 0x0388; break; - case 0x03ae: cp = 0x0389; break; - case 0x03af: cp = 0x038a; break; - case 0x03cc: cp = 0x038c; break; - case 0x03cd: cp = 0x038e; break; - case 0x03ce: cp = 0x038f; break; - case 0x0371: cp = 0x0370; break; - case 0x0373: cp = 0x0372; break; - case 0x0377: cp = 0x0376; break; - case 0x03d1: cp = 0x03f4; break; - case 0x03d7: cp = 0x03cf; break; - case 0x03f2: cp = 0x03f9; break; - case 0x03f8: cp = 0x03f7; break; - case 0x03fb: cp = 0x03fa; break; - }; - } - - return cp; -} - -#undef utf8_restrict -#undef utf8_null - -#ifdef __cplusplus -} // extern "C" -#endif - -#if defined(__clang__) -#pragma clang diagnostic pop -#endif - -#endif // SHEREDOM_UTF8_H_INCLUDED diff --git a/c/mapping/Makefile.am b/c/mapping/Makefile.am deleted file mode 100644 index b3593b861..000000000 --- a/c/mapping/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -noinst_LTLIBRARIES= libmapping.la -libmapping_la_SOURCES= \ - mapper.h \ - mapper_altkv.c \ - mapper_bar.c \ - mapper_bootstrap.c \ - mapper_cat.c \ - mapper_check.c \ - mapper_clean_whitespace.c \ - mapper_count.c \ - mapper_count_similar.c \ - mapper_cut.c \ - mapper_decimate.c \ - mapper_fill_down.c \ - mapper_fill_empty.c \ - mapper_grep.c \ - mapper_group_like.c \ - mapper_having_fields.c \ - mapper_head.c \ - mapper_histogram.c \ - mapper_join.c \ - mapper_label.c \ - mapper_merge_fields.c \ - mapper_most_or_least_frequent.c \ - mapper_nest.c \ - mapper_nothing.c \ - mapper_format_values.c \ - mapper_fraction.c \ - mapper_put_or_filter.c \ - mapper_regularize.c \ - mapper_remove_empty_columns.c \ - mapper_rename.c \ - mapper_reorder.c \ - mapper_repeat.c \ - mapper_reshape.c \ - mapper_sample.c \ - mapper_sec2gmt.c \ - mapper_sec2gmtdate.c \ - mapper_seqgen.c \ - mapper_shuffle.c \ - mapper_skip_trivial_records.c \ - mapper_sort.c \ - mapper_sort_within_records.c \ - mapper_stats1.c \ - mapper_stats2.c \ - mapper_step.c \ - mapper_tac.c \ - mapper_tail.c \ - mapper_tee.c \ - mapper_top.c \ - mapper_uniq.c \ - mapper_unsparsify.c \ - mappers.c \ - mappers.h \ - stats1_accumulators.c \ - stats1_accumulators.h -libmapping_la_LIBADD= ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la - -# TODO: replace the interesting content with unit tests; jettison the rest -# TODO: Does not build -#noinst_PROGRAMS= evl -#evl_SOURCES= rval_evaluators.c -#evl_LDADD= libmapping.la ../containers/libcontainers.la ../lib/libmlr.la -#evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} - -AM_CPPFLAGS= -I${srcdir}/../ -AM_CFLAGS= -std=gnu99 diff --git a/c/mapping/Makefile.in b/c/mapping/Makefile.in deleted file mode 100644 index 044183aa5..000000000 --- a/c/mapping/Makefile.in +++ /dev/null @@ -1,719 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/mapping -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libmapping_la_DEPENDENCIES = ../lib/libmlr.la ../cli/libcli.la \ - ../input/libinput.la -am_libmapping_la_OBJECTS = mapper_altkv.lo mapper_bar.lo \ - mapper_bootstrap.lo mapper_cat.lo mapper_check.lo \ - mapper_clean_whitespace.lo mapper_count.lo \ - mapper_count_similar.lo mapper_cut.lo mapper_decimate.lo \ - mapper_fill_down.lo mapper_grep.lo mapper_group_like.lo \ - mapper_having_fields.lo mapper_head.lo mapper_histogram.lo \ - mapper_join.lo mapper_label.lo mapper_merge_fields.lo \ - mapper_most_or_least_frequent.lo mapper_nest.lo \ - mapper_nothing.lo mapper_format_values.lo mapper_fraction.lo \ - mapper_put_or_filter.lo mapper_regularize.lo \ - mapper_remove_empty_columns.lo mapper_rename.lo \ - mapper_reorder.lo mapper_repeat.lo mapper_reshape.lo \ - mapper_sample.lo mapper_sec2gmt.lo mapper_sec2gmtdate.lo \ - mapper_seqgen.lo mapper_shuffle.lo \ - mapper_skip_trivial_records.lo mapper_sort.lo \ - mapper_sort_within_records.lo mapper_stats1.lo \ - mapper_stats2.lo mapper_step.lo mapper_tac.lo mapper_tail.lo \ - mapper_tee.lo mapper_top.lo mapper_uniq.lo \ - mapper_unsparsify.lo mappers.lo stats1_accumulators.lo -libmapping_la_OBJECTS = $(am_libmapping_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libmapping_la_SOURCES) -DIST_SOURCES = $(libmapping_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libmapping.la -libmapping_la_SOURCES = \ - mapper.h \ - mapper_altkv.c \ - mapper_bar.c \ - mapper_bootstrap.c \ - mapper_cat.c \ - mapper_check.c \ - mapper_clean_whitespace.c \ - mapper_count.c \ - mapper_count_similar.c \ - mapper_cut.c \ - mapper_decimate.c \ - mapper_fill_down.c \ - mapper_grep.c \ - mapper_group_like.c \ - mapper_having_fields.c \ - mapper_head.c \ - mapper_histogram.c \ - mapper_join.c \ - mapper_label.c \ - mapper_merge_fields.c \ - mapper_most_or_least_frequent.c \ - mapper_nest.c \ - mapper_nothing.c \ - mapper_format_values.c \ - mapper_fraction.c \ - mapper_put_or_filter.c \ - mapper_regularize.c \ - mapper_remove_empty_columns.c \ - mapper_rename.c \ - mapper_reorder.c \ - mapper_repeat.c \ - mapper_reshape.c \ - mapper_sample.c \ - mapper_sec2gmt.c \ - mapper_sec2gmtdate.c \ - mapper_seqgen.c \ - mapper_shuffle.c \ - mapper_skip_trivial_records.c \ - mapper_sort.c \ - mapper_sort_within_records.c \ - mapper_stats1.c \ - mapper_stats2.c \ - mapper_step.c \ - mapper_tac.c \ - mapper_tail.c \ - mapper_tee.c \ - mapper_top.c \ - mapper_uniq.c \ - mapper_unsparsify.c \ - mappers.c \ - mappers.h \ - stats1_accumulators.c \ - stats1_accumulators.h - -libmapping_la_LIBADD = ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la - -# TODO: replace the interesting content with unit tests; jettison the rest -# TODO: Does not build -#noinst_PROGRAMS= evl -#evl_SOURCES= rval_evaluators.c -#evl_LDADD= libmapping.la ../containers/libcontainers.la ../lib/libmlr.la -#evl_CPPFLAGS= -D__LREC_EVALUATORS_MAIN__ ${AM_CPPFLAGS} -AM_CPPFLAGS = -I${srcdir}/../ -AM_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/mapping/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/mapping/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libmapping.la: $(libmapping_la_OBJECTS) $(libmapping_la_DEPENDENCIES) $(EXTRA_libmapping_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libmapping_la_OBJECTS) $(libmapping_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_altkv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_bar.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_bootstrap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_cat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_check.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_clean_whitespace.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_count.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_count_similar.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_cut.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_decimate.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_fill_down.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_format_values.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_fraction.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_grep.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_group_like.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_having_fields.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_head.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_histogram.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_join.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_label.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_merge_fields.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_most_or_least_frequent.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_nest.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_nothing.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_put_or_filter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_regularize.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_remove_empty_columns.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_rename.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_reorder.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_repeat.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_reshape.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sample.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sec2gmt.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sec2gmtdate.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_seqgen.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_shuffle.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_skip_trivial_records.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sort.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_sort_within_records.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_stats1.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_stats2.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_step.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tac.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tail.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_tee.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_top.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_uniq.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mapper_unsparsify.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mappers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stats1_accumulators.Plo@am__quote@ - -.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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/mapping/README.md b/c/mapping/README.md deleted file mode 100644 index 5dd808f68..000000000 --- a/c/mapping/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Miller data transforms - -These are straightforward implementations for most mappers other than `put` and -`filter`. See also the memory-management section of the parent directory's -README.md. diff --git a/c/mapping/mapper.h b/c/mapping/mapper.h deleted file mode 100644 index ba552509f..000000000 --- a/c/mapping/mapper.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef MAPPER_H -#define MAPPER_H - -#include -#include "lib/context.h" -#include "cli/mlrcli.h" -#include "containers/lrec.h" -#include "containers/sllv.h" - -// See ../README.md for memory-management conventions. - -// ---------------------------------------------------------------- -// Data plane: - -struct _mapper_t; // forward reference for method declarations - -// Returns linked list of records (lrec_t*). -typedef sllv_t* mapper_process_func_t(lrec_t* pinrec, context_t* pctx, void* pvstate); - -typedef void mapper_free_func_t(struct _mapper_t* pmapper, context_t* pctx); - -typedef struct _mapper_t { - void* pvstate; - mapper_process_func_t* pprocess_func; - mapper_free_func_t* pfree_func; // virtual destructor -} mapper_t; - -// ---------------------------------------------------------------- -// Control plane: - -typedef void mapper_usage_func_t(FILE* o, char* argv0, char* verb); -typedef mapper_t* mapper_parse_cli_func_t(int* pargi, int argc, char** argv, - cli_reader_opts_t* pmain_reader_opts, cli_writer_opts_t* pmain_writer_opts); - -typedef struct _mapper_setup_t { - char* verb; - mapper_usage_func_t* pusage_func; - mapper_parse_cli_func_t* pparse_func; - int ignores_input; // most don't; data-generators like seqgen do -} mapper_setup_t; - -#endif // MAPPER_H diff --git a/c/mapping/mapper_altkv.c b/c/mapping/mapper_altkv.c deleted file mode 100644 index 676082e52..000000000 --- a/c/mapping/mapper_altkv.c +++ /dev/null @@ -1,107 +0,0 @@ -#include -#include "cli/argparse.h" -#include "lib/mlrutil.h" -#include "lib/mtrand.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" - -typedef struct _mapper_altkv_state_t { - ap_state_t* pargp; -} mapper_altkv_state_t; - -static void mapper_altkv_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_altkv_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_altkv_alloc(ap_state_t* pargp); -static void mapper_altkv_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_altkv_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_altkv_setup = { - .verb = "altkv", - .pusage_func = mapper_altkv_usage, - .pparse_func = mapper_altkv_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_altkv_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [no options]\n", argv0, verb); - fprintf(o, "Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs.\n"); -} - -static mapper_t* mapper_altkv_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_altkv_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_altkv_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_altkv_alloc(pstate); - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_altkv_alloc(ap_state_t* pargp) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_altkv_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_altkv_state_t)); - pstate->pargp = pargp; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_altkv_process; - pmapper->pfree_func = mapper_altkv_free; - - return pmapper; -} - -static void mapper_altkv_free(mapper_t* pmapper, context_t* _) { - mapper_altkv_state_t* pstate = pmapper->pvstate; - // Free the container - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_altkv_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) { // End of input stream: emit null. - return sllv_single(NULL); - } - - lrec_t* poutrec = lrec_unbacked_alloc(); - int output_field_number = 1; - for (lrece_t* pe = pinrec->phead; pe != NULL; /* increment in loop */) { - - if (pe->pnext == NULL) { // Odd-numbered field count - char* key = mlr_alloc_string_from_int(output_field_number); - char* value = mlr_strdup_or_die(pe->value); - lrec_put(poutrec, key, value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } else { - char* key = mlr_strdup_or_die(pe->value); - char* value = mlr_strdup_or_die(pe->pnext->value); - lrec_put(poutrec, key, value, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - - output_field_number++; - pe = pe->pnext; - if (pe == NULL) {// Odd-numbered field count - break; - } - pe = pe->pnext; - } - - lrec_free(pinrec); - return sllv_single(poutrec); -} diff --git a/c/mapping/mapper_bar.c b/c/mapping/mapper_bar.c deleted file mode 100644 index 9f027433a..000000000 --- a/c/mapping/mapper_bar.c +++ /dev/null @@ -1,281 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/string_builder.h" -#include "containers/lrec.h" -#include "lib/string_array.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_bar_state_t { - ap_state_t* pargp; - string_array_t* pfield_names; - char fill_char; - char oob_char; - char blank_char; - double lo; - double hi; - int width; - char** bars; - sllv_t* precords; // only for auto mode -} mapper_bar_state_t; - -static void mapper_bar_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_bar_alloc(ap_state_t* pargp, string_array_t* pfield_names, - char fill_char, char oob_char, char blank_char, double lo, double hi, - int width, int do_auto); -static void mapper_bar_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_bar_process_no_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_bar_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); - -#define DEFAULT_FILL_CHAR '*' -#define DEFAULT_OOB_CHAR '#' -#define DEFAULT_BLANK_CHAR '.' -#define DEFAULT_LO 0.0 -#define DEFAULT_HI 100.0 -#define DEFAULT_WIDTH 40 - -#define SB_ALLOC_LENGTH 128 - -// ---------------------------------------------------------------- -mapper_setup_t mapper_bar_setup = { - .verb = "bar", - .pusage_func = mapper_bar_usage, - .pparse_func = mapper_bar_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_bar_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Replaces a numeric field with a number of asterisks, allowing for cheesy\n"); - fprintf(o, "bar plots. These align best with --opprint or --oxtab output format.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-f {a,b,c} Field names to convert to bars.\n"); - fprintf(o, "-c {character} Fill character: default '%c'.\n", DEFAULT_FILL_CHAR); - fprintf(o, "-x {character} Out-of-bounds character: default '%c'.\n", DEFAULT_OOB_CHAR); - fprintf(o, "-b {character} Blank character: default '%c'.\n", DEFAULT_BLANK_CHAR); - fprintf(o, "--lo {lo} Lower-limit value for min-width bar: default '%lf'.\n", DEFAULT_LO); - fprintf(o, "--hi {hi} Upper-limit value for max-width bar: default '%lf'.\n", DEFAULT_HI); - fprintf(o, "-w {n} Bar-field width: default '%d'.\n", DEFAULT_WIDTH); - fprintf(o, "--auto Automatically computes limits, ignoring --lo and --hi.\n"); - fprintf(o, " Holds all records in memory before producing any output.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - string_array_t* pfield_names = NULL; - char* fill_string = NULL; - char* oob_string = NULL; - char* blank_string = NULL; - double lo = DEFAULT_LO; - double hi = DEFAULT_HI; - int width = DEFAULT_WIDTH; - int do_auto = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_array_flag(pstate, "-f", &pfield_names); - ap_define_string_flag(pstate, "-c", &fill_string); - ap_define_string_flag(pstate, "-x", &oob_string); - ap_define_string_flag(pstate, "-b", &blank_string); - ap_define_float_flag(pstate, "--lo", &lo); - ap_define_float_flag(pstate, "--hi", &hi); - ap_define_int_flag(pstate, "-w", &width); - ap_define_true_flag(pstate, "--auto", &do_auto); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_bar_usage(stderr, argv[0], verb); - return NULL; - } - - if (pfield_names == NULL) { - mapper_bar_usage(stderr, argv[0], verb); - return NULL; - } - - char fill_char = DEFAULT_FILL_CHAR; - char oob_char = DEFAULT_OOB_CHAR; - char blank_char = DEFAULT_BLANK_CHAR; - - if (fill_string != NULL) { - if (strlen(fill_string) != 1) { - mapper_bar_usage(stderr, argv[0], verb); - return NULL; - } - fill_char = fill_string[0]; - } - - if (oob_string != NULL) { - if (strlen(oob_string) != 1) { - mapper_bar_usage(stderr, argv[0], verb); - return NULL; - } - oob_char = oob_string[0]; - } - - if (blank_string != NULL) { - if (strlen(blank_string) != 1) { - mapper_bar_usage(stderr, argv[0], verb); - return NULL; - } - blank_char = blank_string[0]; - } - - return mapper_bar_alloc(pstate, pfield_names, fill_char, oob_char, blank_char, - lo, hi, width, do_auto); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_bar_alloc(ap_state_t* pargp, string_array_t* pfield_names, - char fill_char, char oob_char, char blank_char, double lo, double hi, - int width, int do_auto) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_bar_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_bar_state_t)); - pstate->pargp = pargp; - pstate->pfield_names = pfield_names; - pstate->fill_char = fill_char; - pstate->oob_char = oob_char; - pstate->blank_char = blank_char; - pstate->lo = lo; - pstate->hi = hi; - pstate->width = width; - pstate->bars = mlr_malloc_or_die((pstate->width + 1) * sizeof(char*)); - for (int i = 0; i <= pstate->width; i++) { - pstate->bars[i] = mlr_malloc_or_die(pstate->width + 1); - char* bar = pstate->bars[i]; - memset(bar, pstate->blank_char, pstate->width); - bar[pstate->width] = 0; - if (i == 0) { - bar[0] = pstate->oob_char; - } else if (i < pstate->width) { - memset(bar, pstate->fill_char, i); - } else { - memset(bar, pstate->fill_char, pstate->width); - bar[pstate->width-1] = pstate->oob_char; - } - pstate->bars[i] = bar; - } - pstate->precords = do_auto ? sllv_alloc() : NULL; - - pmapper->pprocess_func = do_auto - ? mapper_bar_process_auto - : mapper_bar_process_no_auto; - pmapper->pvstate = (void*)pstate; - pmapper->pfree_func = mapper_bar_free; - - return pmapper; -} - -static void mapper_bar_free(mapper_t* pmapper, context_t* _) { - mapper_bar_state_t* pstate = (mapper_bar_state_t*)pmapper->pvstate; - string_array_free(pstate->pfield_names); - for (int i = 0; i <= pstate->width; i++) - free(pstate->bars[i]); - free(pstate->bars); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_bar_process_no_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of stream - return sllv_single(NULL); - - mapper_bar_state_t* pstate = (mapper_bar_state_t*)pvstate; - int n = pstate->pfield_names->length; - for (int i = 0; i < n; i++) { - char* name = pstate->pfield_names->strings[i]; - char* sval = lrec_get(pinrec, name); - if (sval == NULL) - continue; - double dval = mlr_double_from_string_or_die(sval); - int idx = (int)(pstate->width * (dval - pstate->lo) / (pstate->hi - pstate->lo)); - if (idx < 0) - idx = 0; - if (idx > pstate->width) - idx = pstate->width; - lrec_put(pinrec, name, pstate->bars[idx], NO_FREE); - } - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_bar_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_bar_state_t* pstate = (mapper_bar_state_t*)pvstate; - - if (pinrec != NULL) { // not end of stream - sllv_append(pstate->precords, pinrec); - return NULL; - } - - // end of stream - int n = pstate->pfield_names->length; - string_builder_t* psb = sb_alloc(SB_ALLOC_LENGTH); - - // Loop over field names to be barred - for (int i = 0; i < n; i++) { - char* name = pstate->pfield_names->strings[i]; - double lo = 0.0; - double hi = 0.0; - - // First pass computes lo and hi from the data - int j = 0; - for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext, j++) { - lrec_t* prec = pe->pvvalue; - char* sval = lrec_get(prec, name); - if (sval == NULL) - continue; - double dval = mlr_double_from_string_or_die(sval); - if (j == 0 || dval < lo) - lo = dval; - if (j == 0 || dval > hi) - hi = dval; - } - - // Second pass applies the bars. There is some redundant computation - // which could be hoisted out of the loop for performance ... but this - // verb computes data solely for visual inspection and I take the - // nominal use case to be tens or hundreds of records. So, optimization - // isn't worth the effort here. - char* slo = mlr_alloc_string_from_double(lo, "%g"); - char* shi = mlr_alloc_string_from_double(hi, "%g"); - - for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext) { - lrec_t* prec = pe->pvvalue; - char* sval = lrec_get(prec, name); - if (sval == NULL) - continue; - double dval = mlr_double_from_string_or_die(sval); - - int idx = (int)(pstate->width * (dval - lo) / (hi - lo)); - if (idx < 0) - idx = 0; - if (idx > pstate->width) - idx = pstate->width; - sb_append_string(psb, "["); - sb_append_string(psb, slo); - sb_append_string(psb, "]"); - sb_append_string(psb, pstate->bars[idx]); - sb_append_string(psb, "["); - sb_append_string(psb, shi); - sb_append_string(psb, "]"); - lrec_put(prec, name, sb_finish(psb), FREE_ENTRY_VALUE); - } - - free(slo); - free(shi); - - } - - sb_free(psb); - sllv_append(pstate->precords, NULL); - return pstate->precords; -} diff --git a/c/mapping/mapper_bootstrap.c b/c/mapping/mapper_bootstrap.c deleted file mode 100644 index 33ceb4711..000000000 --- a/c/mapping/mapper_bootstrap.c +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include "cli/argparse.h" -#include "lib/mlrutil.h" -#include "lib/mtrand.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" - -#define NOUT_EQUALS_NIN -1 -typedef struct _mapper_bootstrap_state_t { - ap_state_t* pargp; - int nout; - sllv_t* records; -} mapper_bootstrap_state_t; - -static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_bootstrap_alloc(int nout, ap_state_t* pargp); -static void mapper_bootstrap_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_bootstrap_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_bootstrap_setup = { - .verb = "bootstrap", - .pusage_func = mapper_bootstrap_usage, - .pparse_func = mapper_bootstrap_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Emits an n-sample, with replacement, of the input records.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-n {number} Number of samples to output. Defaults to number of input records.\n"); - fprintf(o, " Must be non-negative.\n"); - fprintf(o, "See also %s sample and %s shuffle.\n", argv0, argv0); -} - -static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int nout = NOUT_EQUALS_NIN; - if ((argc - *pargi) < 1) { - mapper_bootstrap_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "-n", &nout); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_bootstrap_usage(stderr, argv[0], verb); - return NULL; - } - - if (nout != NOUT_EQUALS_NIN && nout < 0) { - mapper_bootstrap_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_bootstrap_alloc(nout, pstate); - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_bootstrap_alloc(int nout, ap_state_t* pargp) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_bootstrap_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_bootstrap_state_t)); - pstate->nout = nout; - pstate->pargp = pargp; - pstate->records = sllv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_bootstrap_process; - pmapper->pfree_func = mapper_bootstrap_free; - - return pmapper; -} - -static void mapper_bootstrap_free(mapper_t* pmapper, context_t* _) { - mapper_bootstrap_state_t* pstate = pmapper->pvstate; - // Free the container - sllv_free(pstate->records); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_bootstrap_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_bootstrap_state_t* pstate = pvstate; - if (pinrec != NULL) { // Not end of input stream: consume an input record. - // The caller will free the outrecs - sllv_append(pstate->records, pinrec); - return NULL; - } - - // This is entirely straightforward except for memory management. The - // Miller contract to respect is that each routine frees records or passes - // them on. This means lrec-writers will free lrecs they receive, after - // writing them. This also means we must free lrecs we don't pass on. - // - // Given nin input records, we produce nout output records, but sampling with replacement. - // The memory-management criteria above mean: - // * If an input lrec is not output at all, we must free it. - // * If an input lrec is output once, we pass it on through and let the write free it. - // * If an input lrec is output more than once, it would get double-freed (which is not OK) - // so for all repetitions past the first we must make a copy. - // A used_flags[] array allows us to handle all of this. - - sllv_t* poutrecs = sllv_alloc(); - int nin = pstate->records->length; - int nout = (pstate->nout == NOUT_EQUALS_NIN) ? nin : pstate->nout; - if (nin == 0) { - sllv_append(poutrecs, NULL); - return poutrecs; - } - - // Make an array of pointers into the input list. Mark each lrec as not yet output. - lrec_t** record_array = mlr_malloc_or_die(nin * sizeof(lrec_t**)); - char* used_flags = mlr_malloc_or_die(nin * sizeof(char)); - sllve_t* pe = pstate->records->phead; - for (int i = 0; i < nin; i++, pe = pe->pnext) { - record_array[i] = pe->pvvalue; - used_flags[i] = FALSE; - } - - // Do the sample-with-replacment, reading from random indices in the input - // array and appending to the output list. - for (int i = 0; i < nout; i++) { - int index = nin * get_mtrand_double(); - if (index >= nin) - index = nin - 1; - lrec_t* prec = record_array[index]; - if (used_flags[index]) { // Copy for repeated output. - prec = lrec_copy(prec); - } else { // First output of this record; remember it. - used_flags[index] = TRUE; - } - sllv_append(poutrecs, prec); - } - - // Free non-output records - pe = pstate->records->phead; - for (int i = 0; i < nin; i++, pe = pe->pnext) - if (!used_flags[i]) - lrec_free(record_array[i]); - free(used_flags); - // Free the temp array - free(record_array); - - // Null-terminate the output list to signify end of stream. - sllv_append(poutrecs, NULL); - return poutrecs; -} diff --git a/c/mapping/mapper_cat.c b/c/mapping/mapper_cat.c deleted file mode 100644 index ee059e2b7..000000000 --- a/c/mapping/mapper_cat.c +++ /dev/null @@ -1,187 +0,0 @@ -#include "cli/argparse.h" -#include "mapping/mappers.h" -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" - -typedef struct _mapper_cat_state_t { - ap_state_t* pargp; - int verbose; - char* counter_field_name; - unsigned long long counter; - slls_t* pgroup_by_field_names; - lhmslv_t* pcounters_by_group; -} mapper_cat_state_t; - -#define DEFAULT_COUNTER_FIELD_NAME "n" - -static void mapper_cat_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_cat_alloc(ap_state_t* pargp, int do_counters, int verbose, char* counter_field_name, - slls_t* pgroup_by_field_names); -static void mapper_cat_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_cat_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_catn_process_ungrouped(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_catn_process_grouped(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_cat_setup = { - .verb = "cat", - .pusage_func = mapper_cat_usage, - .pparse_func = mapper_cat_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* default_counter_field_name = DEFAULT_COUNTER_FIELD_NAME; - char* counter_field_name = NULL; - int do_counters = FALSE; - int verbose = FALSE; - slls_t* pgroup_by_field_names = slls_alloc(); - - if ((argc - *pargi) < 1) { - mapper_cat_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - ap_define_true_flag(pstate, "-n", &do_counters); - ap_define_true_flag(pstate, "-v", &verbose); - ap_define_string_flag(pstate, "-N", &counter_field_name); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_cat_usage(stderr, argv[0], verb); - return NULL; - } - - if (counter_field_name != NULL) { - do_counters = TRUE; - } else if (do_counters) { - counter_field_name = default_counter_field_name; - } - - mapper_t* pmapper = mapper_cat_alloc(pstate, do_counters, verbose, counter_field_name, pgroup_by_field_names); - return pmapper; -} - -static void mapper_cat_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Passes input records directly to output. Most useful for format conversion.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-n Prepend field \"%s\" to each record with record-counter starting at 1\n", - DEFAULT_COUNTER_FIELD_NAME); - fprintf(o, "-g {comma-separated field name(s)} When used with -n/-N, writes record-counters\n"); - fprintf(o, " keyed by specified field name(s).\n"); - fprintf(o, "-v Write a low-level record-structure dump to stderr.\n"); - fprintf(o, "-N {name} Prepend field {name} to each record with record-counter starting at 1\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_cat_alloc(ap_state_t* pargp, int do_counters, int verbose, char* counter_field_name, - slls_t* pgroup_by_field_names) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - mapper_cat_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_cat_state_t)); - pstate->pargp = pargp; - pstate->verbose = verbose; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->counter_field_name = counter_field_name; - pstate->counter = 0LL; - pstate->pcounters_by_group = lhmslv_alloc(); - pmapper->pvstate = pstate; - - pmapper->pprocess_func = NULL; - if (do_counters) { - if (pgroup_by_field_names->length == 0) { - pmapper->pprocess_func = mapper_catn_process_ungrouped; - } else { - pmapper->pprocess_func = mapper_catn_process_grouped; - } - } else { - pmapper->pprocess_func = mapper_cat_process; - } - - pmapper->pfree_func = mapper_cat_free; - return pmapper; -} -static void mapper_cat_free(mapper_t* pmapper, context_t* _) { - mapper_cat_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pgroup_by_field_names); - for (lhmslve_t* pe = pstate->pcounters_by_group->phead; pe != NULL; pe = pe->pnext) { - free(pe->pvvalue); - } - lhmslv_free(pstate->pcounters_by_group); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_cat_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; - if (pstate->verbose) { - lrec_dump_fp(pinrec, stderr); - } - if (pinrec != NULL) - return sllv_single(pinrec); - else - return sllv_single(NULL); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_catn_process_ungrouped(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; - if (pstate->verbose) { - lrec_dump_fp(pinrec, stderr); - } - if (pinrec != NULL) { - char* counter_field_value = mlr_alloc_string_from_ull(++pstate->counter); - lrec_prepend(pinrec, pstate->counter_field_name, counter_field_value, FREE_ENTRY_VALUE); - return sllv_single(pinrec); - } else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_catn_process_grouped(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_cat_state_t* pstate = (mapper_cat_state_t*)pvstate; - if (pstate->verbose) { - lrec_dump_fp(pinrec, stderr); - } - if (pinrec != NULL) { - - unsigned long long counter = 0LL; - - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { // Treat as unkeyed - counter = ++pstate->counter; - } else { - unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounters_by_group, - pgroup_by_field_values); - if (pcount_for_group == NULL) { - pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount_for_group = 0LL; - lhmslv_put(pstate->pcounters_by_group, slls_copy(pgroup_by_field_values), - pcount_for_group, FREE_ENTRY_KEY); - } - slls_free(pgroup_by_field_values); - (*pcount_for_group)++; - counter = *pcount_for_group; - } - char* counter_field_value = mlr_alloc_string_from_ull(counter); - lrec_prepend(pinrec, pstate->counter_field_name, counter_field_value, FREE_ENTRY_VALUE); - return sllv_single(pinrec); - } else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_check.c b/c/mapping/mapper_check.c deleted file mode 100644 index edd02029c..000000000 --- a/c/mapping/mapper_check.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "mapping/mappers.h" -#include "lib/mlrutil.h" -#include "containers/sllv.h" - -static void mapper_check_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_check_alloc(); -static void mapper_check_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_check_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_check_setup = { - .verb = "check", - .pusage_func = mapper_check_usage, - .pparse_func = mapper_check_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_check_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Consumes records without printing any output.\n"); - fprintf(o, "Useful for doing a well-formatted check on input data.\n"); -} - -static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_check_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - mapper_t* pmapper = mapper_check_alloc(); - *pargi += 1; - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_check_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - pmapper->pvstate = NULL; - pmapper->pprocess_func = mapper_check_process; - pmapper->pfree_func = mapper_check_free; - return pmapper; -} -static void mapper_check_free(mapper_t* pmapper, context_t* _) { - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_check_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - lrec_free(pinrec); - return sllv_single(NULL); -} diff --git a/c/mapping/mapper_clean_whitespace.c b/c/mapping/mapper_clean_whitespace.c deleted file mode 100644 index c832afa15..000000000 --- a/c/mapping/mapper_clean_whitespace.c +++ /dev/null @@ -1,172 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mvfuncs.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define RENAME_SB_ALLOC_LENGTH 16 - -typedef struct _mapper_clean_whitespace_state_t { - ap_state_t* pargp; - int do_keys; - int do_values; -} mapper_clean_whitespace_state_t; - -static void mapper_clean_whitespace_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_clean_whitespace_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_clean_whitespace_alloc(ap_state_t* pargp, int do_keys, int do_values); -static void mapper_clean_whitespace_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_clean_whitespace_kvprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_clean_whitespace_kprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_clean_whitespace_vprocess(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_clean_whitespace_setup = { - .verb = "clean-whitespace", - .pusage_func = mapper_clean_whitespace_usage, - .pparse_func = mapper_clean_whitespace_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_clean_whitespace_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "For each record, for each field in the record, whitespace-cleans the keys and\n"); - fprintf(o, "values. Whitespace-cleaning entails stripping leading and trailing whitespace,\n"); - fprintf(o, "and replacing multiple whitespace with singles. For finer-grained control,\n"); - fprintf(o, "please see the DSL functions lstrip, rstrip, strip, collapse_whitespace,\n"); - fprintf(o, "and clean_whitespace.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-k|--keys-only Do not touch values.\n"); - fprintf(o, "-v|--values-only Do not touch keys.\n"); - fprintf(o, "It is an error to specify -k as well as -v -- to clean keys and values,\n"); - fprintf(o, "leave off -k as well as -v.\n"); -} - -static mapper_t* mapper_clean_whitespace_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int kflag = FALSE; - int vflag = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_true_flag(pstate, "-k", &kflag); - ap_define_true_flag(pstate, "--keys-only", &kflag); - ap_define_true_flag(pstate, "-v", &vflag); - ap_define_true_flag(pstate, "--values-only", &vflag); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_clean_whitespace_usage(stderr, argv[0], verb); - return NULL; - } - - int do_keys = TRUE; - int do_values = TRUE; - if (kflag && vflag) { - mapper_clean_whitespace_usage(stderr, argv[0], verb); - return NULL; - } else if (kflag) { - do_values = FALSE; - } else if (vflag) { - do_keys = FALSE; - } - - return mapper_clean_whitespace_alloc(pstate, do_keys, do_values); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_clean_whitespace_alloc(ap_state_t* pargp, int do_keys, int do_values) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_clean_whitespace_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_clean_whitespace_state_t)); - - pstate->pargp = pargp; - if (do_keys && do_values) { - pmapper->pprocess_func = mapper_clean_whitespace_kvprocess; - } else if (do_keys) { - pmapper->pprocess_func = mapper_clean_whitespace_kprocess; - } else if (do_values) { - pmapper->pprocess_func = mapper_clean_whitespace_vprocess; - } - pmapper->pfree_func = mapper_clean_whitespace_free; - - pmapper->pvstate = (void*)pstate; - return pmapper; -} - -static void mapper_clean_whitespace_free(mapper_t* pmapper, context_t* _) { - mapper_clean_whitespace_state_t* pstate = pmapper->pvstate; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_clean_whitespace_kvprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - mv_t old_key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); - mv_t old_value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); - mv_t new_key = s_s_clean_whitespace_func(&old_key); - mv_t new_value = s_s_clean_whitespace_func(&old_value); - char free_flags = 0; - if (new_key.free_flags & FREE_ENTRY_VALUE) - free_flags |= FREE_ENTRY_KEY; - if (new_value.free_flags & FREE_ENTRY_VALUE) - free_flags |= FREE_ENTRY_VALUE; - lrec_put(poutrec, new_key.u.strv, new_value.u.strv, free_flags); - } - lrec_free(pinrec); - return sllv_single(poutrec); - } - else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_clean_whitespace_kprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - mv_t old_key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); - mv_t value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); - mv_t new_key = s_s_clean_whitespace_func(&old_key); - char free_flags = FREE_ENTRY_VALUE; - if (new_key.free_flags & FREE_ENTRY_VALUE) - free_flags |= FREE_ENTRY_KEY; - lrec_put(poutrec, new_key.u.strv, value.u.strv, free_flags); - } - lrec_free(pinrec); - return sllv_single(poutrec); - } - else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_clean_whitespace_vprocess(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - mv_t key = mv_from_string_with_free(mlr_strdup_or_die(pe->key)); - mv_t old_value = mv_from_string_with_free(mlr_strdup_or_die(pe->value)); - mv_t new_value = s_s_clean_whitespace_func(&old_value); - char free_flags = FREE_ENTRY_KEY; - if (new_value.free_flags & FREE_ENTRY_VALUE) - free_flags |= FREE_ENTRY_VALUE; - lrec_put(poutrec, key.u.strv, new_value.u.strv, free_flags); - } - lrec_free(pinrec); - return sllv_single(poutrec); - } - else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_count.c b/c/mapping/mapper_count.c deleted file mode 100644 index ca40bc914..000000000 --- a/c/mapping/mapper_count.c +++ /dev/null @@ -1,249 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmsll.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/lhmsll.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_OUTPUT_FIELD_NAME "count" - -typedef struct _mapper_count_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - long long ungrouped_count; - lhmslv_t* pcounts_by_group; - int show_counts_only; - char* output_field_name; -} mapper_count_state_t; - -// ---------------------------------------------------------------- -static void mapper_count_usage( - FILE* o, - char* argv0, - char* verb); - -static mapper_t* mapper_count_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __); - -static mapper_t* mapper_count_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - int show_counts_only, - char* output_field_name); - -static void mapper_count_free( - mapper_t* pmapper, - context_t* _); - -static sllv_t* mapper_count_process_ungrouped( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_count_process_grouped( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_count_setup = { - .verb = "count", - .pusage_func = mapper_count_usage, - .pparse_func = mapper_count_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_count_usage( - FILE* o, - char* argv0, - char* verb) -{ - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Prints number of records, optionally grouped by distinct values for specified field names.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-g {a,b,c} Field names for distinct count.\n"); - fprintf(o, "-n Show only the number of distinct values. Not interesting without -g.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_count_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __) -{ - slls_t* pgroup_by_field_names = NULL; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - int show_counts_only = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_string_flag(pstate, "-o", &output_field_name); - ap_define_true_flag(pstate, "-n", &show_counts_only); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_count_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_count_alloc(pstate, pgroup_by_field_names, show_counts_only, - output_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_count_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - int show_counts_only, - char* output_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_count_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_count_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->output_field_name = output_field_name; - pstate->ungrouped_count = 0LL; - pstate->pcounts_by_group = lhmslv_alloc(); - pstate->show_counts_only = show_counts_only; - - pmapper->pvstate = pstate; - - if (pgroup_by_field_names == NULL) { - pmapper->pprocess_func = mapper_count_process_ungrouped; - } else{ - pmapper->pprocess_func = mapper_count_process_grouped; - } - - pmapper->pfree_func = mapper_count_free; - - return pmapper; -} - -// ---------------------------------------------------------------- -static void mapper_count_free( - mapper_t* pmapper, - context_t* _) -{ - mapper_count_state_t* pstate = pmapper->pvstate; - - slls_free(pstate->pgroup_by_field_names); - pstate->pgroup_by_field_names = NULL; - - // lhmslv_free will free the keys: we only need to free the void-star values. - if (pstate->pcounts_by_group != NULL) { - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount = pa->pvvalue; - free(pcount); - } - lhmslv_free(pstate->pcounts_by_group); - pstate->pcounts_by_group = NULL; - } - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_count_process_ungrouped( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_count_state_t* pstate = pvstate; - if (pinrec != NULL) { - pstate->ungrouped_count++; - lrec_free(pinrec); - return NULL; - } else { // end of record stream - lrec_t* poutrec = lrec_unbacked_alloc(); - lrec_put(poutrec, pstate->output_field_name, - mlr_alloc_string_from_ll(pstate->ungrouped_count), FREE_ENTRY_VALUE); - return sllv_single(poutrec); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_count_process_grouped( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_count_state_t* pstate = pvstate; - if (pinrec != NULL) { // not end of record stream - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - lrec_free(pinrec); - return NULL; - } - - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - slls_t* pcopy = slls_copy(pgroup_by_field_values); - lhmslv_put(pstate->pcounts_by_group, pcopy, pcount, FREE_ENTRY_KEY); - lrec_free(pinrec); - } else { - (*pcount)++; - lrec_free(pinrec); - } - - return NULL; - - } else { // end of record stream - sllv_t* poutrecs = sllv_alloc(); - - if (pstate->show_counts_only) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - unsigned long long count = (unsigned long long)lhmslv_size(pstate->pcounts_by_group); - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(count), - FREE_ENTRY_VALUE); - - sllv_append(poutrecs, poutrec); - } else { - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - slls_t* pgroup_by_field_values = pa->key; - - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - - unsigned long long* pcount = pa->pvvalue; - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(*pcount), - FREE_ENTRY_VALUE); - - sllv_append(poutrecs, poutrec); - } - } - - sllv_append(poutrecs, NULL); - return poutrecs; - - } -} diff --git a/c/mapping/mapper_count_similar.c b/c/mapping/mapper_count_similar.c deleted file mode 100644 index 871efc633..000000000 --- a/c/mapping/mapper_count_similar.c +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/lhmsll.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_OUTPUT_FIELD_NAME "count" - -typedef struct _mapper_count_similar_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - lhmslv_t* pcounts_by_group; - lhmslv_t* precord_lists_by_group; - char* output_field_name; -} mapper_count_similar_state_t; - -static void mapper_count_similar_usage( - FILE* o, - char* argv0, - char* verb); - -static mapper_t* mapper_count_similar_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __); - -static mapper_t* mapper_count_similar_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - char* output_field_name); - -static void mapper_count_similar_free( - mapper_t* pmapper, - context_t* _); - -static sllv_t* mapper_count_similar_process( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_count_similar_setup = { - .verb = "count-similar", - .pusage_func = mapper_count_similar_usage, - .pparse_func = mapper_count_similar_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_count_similar_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Ingests all records, then emits each record augmented by a count of \n"); - fprintf(o, "the number of other records having the same group-by field values.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-g {d,e,f} Group-by-field names for counts.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", - DEFAULT_OUTPUT_FIELD_NAME); -} - -static mapper_t* mapper_count_similar_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pgroup_by_field_names = NULL; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_string_flag(pstate, "-o", &output_field_name); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_count_similar_usage(stderr, argv[0], verb); - return NULL; - } - - if (pgroup_by_field_names == NULL) { - mapper_count_similar_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_count_similar_alloc(pstate, pgroup_by_field_names, - output_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_count_similar_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - char* output_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_count_similar_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_count_similar_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->pcounts_by_group = lhmslv_alloc(); - pstate->precord_lists_by_group = lhmslv_alloc(); - pstate->output_field_name = output_field_name; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_count_similar_process; - pmapper->pfree_func = mapper_count_similar_free; - - return pmapper; -} - -static void mapper_count_similar_free(mapper_t* pmapper, context_t* _) { - mapper_count_similar_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pgroup_by_field_names); - - // lhmslv_free will free the keys: we only need to free the void-star values. - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount = pa->pvvalue; - free(pcount); - } - lhmslv_free(pstate->pcounts_by_group); - - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { - sllv_t* precord_list_for_group = pa->pvvalue; - // outrecs were freed by caller of mapper_tail_process. Here, just free - // the sllv container itself. - sllv_free(precord_list_for_group); - } - lhmslv_free(pstate->precord_lists_by_group); - - pstate->pgroup_by_field_names = NULL; - pstate->pcounts_by_group = NULL; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_count_similar_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_count_similar_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - lrec_free(pinrec); - return NULL; - } - - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); - } else { - (*pcount)++; - } - - sllv_t* precord_list_for_group = lhmslv_get(pstate->precord_lists_by_group, pgroup_by_field_values); - if (precord_list_for_group == NULL) { - precord_list_for_group = sllv_alloc(); - lhmslv_put(pstate->precord_lists_by_group, slls_copy(pgroup_by_field_values), precord_list_for_group, - FREE_ENTRY_KEY); - - } - sllv_append(precord_list_for_group, pinrec); - - slls_free(pgroup_by_field_values); - return NULL; - - } else { - sllv_t* poutrecs = sllv_alloc(); - for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pa->key); - if (pcount == NULL) { - fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - } - - sllv_t* precord_list_for_group = pa->pvvalue; - while (precord_list_for_group->phead != NULL) { - lrec_t* poutrec = sllv_pop(precord_list_for_group); - - char* scount = mlr_alloc_string_from_ll(*pcount); - lrec_put(poutrec, pstate->output_field_name, scount, FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - } - sllv_append(poutrecs, NULL); - return poutrecs; - } -} diff --git a/c/mapping/mapper_cut.c b/c/mapping/mapper_cut.c deleted file mode 100644 index 686bb89ca..000000000 --- a/c/mapping/mapper_cut.c +++ /dev/null @@ -1,203 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "containers/hss.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_cut_state_t { - ap_state_t* pargp; - slls_t* pfield_name_list; - hss_t* pfield_name_set; - regex_t* regexes; - int nregex; - int do_arg_order; - int do_complement; -} mapper_cut_state_t; - -static void mapper_cut_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_cut_alloc(ap_state_t* pargp, slls_t* pfield_name_list, - int do_arg_order, int do_complement, int do_regexes); -static void mapper_cut_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_cut_process_no_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_cut_process_with_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_cut_setup = { - .verb = "cut", - .pusage_func = mapper_cut_usage, - .pparse_func = mapper_cut_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_cut_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Passes through input records with specified fields included/excluded.\n"); - fprintf(o, "-f {a,b,c} Field names to include for cut.\n"); - fprintf(o, "-o Retain fields in the order specified here in the argument list.\n"); - fprintf(o, " Default is to retain them in the order found in the input data.\n"); - fprintf(o, "-x|--complement Exclude, rather than include, field names specified by -f.\n"); - fprintf(o, "-r Treat field names as regular expressions. \"ab\", \"a.*b\" will\n"); - fprintf(o, " match any field name containing the substring \"ab\" or matching\n"); - fprintf(o, " \"a.*b\", respectively; anchors of the form \"^ab$\", \"^a.*b$\" may\n"); - fprintf(o, " be used. The -o flag is ignored when -r is present.\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " %s %s -f hostname,status\n", argv0, verb); - fprintf(o, " %s %s -x -f hostname,status\n", argv0, verb); - fprintf(o, " %s %s -r -f '^status$,sda[0-9]'\n", argv0, verb); - fprintf(o, " %s %s -r -f '^status$,\"sda[0-9]\"'\n", argv0, verb); - fprintf(o, " %s %s -r -f '^status$,\"sda[0-9]\"i' (this is case-insensitive)\n", argv0, verb); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pfield_name_list = NULL; - int do_arg_order = FALSE; - int do_complement = FALSE; - int do_regexes = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pfield_name_list); - ap_define_true_flag(pstate, "-o", &do_arg_order); - ap_define_true_flag(pstate, "-x", &do_complement); - ap_define_true_flag(pstate, "--complement", &do_complement); - ap_define_true_flag(pstate, "-r", &do_regexes); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_cut_usage(stderr, argv[0], verb); - return NULL; - } - - if (pfield_name_list == NULL) { - mapper_cut_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_cut_alloc(pstate, pfield_name_list, do_arg_order, do_complement, do_regexes); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_cut_alloc(ap_state_t* pargp, slls_t* pfield_name_list, - int do_arg_order, int do_complement, int do_regexes) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_cut_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_cut_state_t)); - pstate->pargp = pargp; - if (!do_regexes) { - pstate->pfield_name_list = pfield_name_list; - slls_reverse(pstate->pfield_name_list); - pstate->pfield_name_set = hss_from_slls(pfield_name_list); - pstate->nregex = 0; - pstate->regexes = NULL; - pmapper->pprocess_func = mapper_cut_process_no_regexes; - } else { - pstate->pfield_name_list = NULL; - pstate->pfield_name_set = NULL; - pstate->nregex = pfield_name_list->length; - pstate->regexes = mlr_malloc_or_die(pstate->nregex * sizeof(regex_t)); - int i = 0; - for (sllse_t* pe = pfield_name_list->phead; pe != NULL; pe = pe->pnext, i++) { - // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. - // Strip off the leading " and trailing " or "i. - regcomp_or_die_quoted(&pstate->regexes[i], pe->value, REG_NOSUB); - } - slls_free(pfield_name_list); - pmapper->pprocess_func = mapper_cut_process_with_regexes; - } - pstate->do_arg_order = do_arg_order; - pstate->do_complement = do_complement; - - pmapper->pvstate = (void*)pstate; - pmapper->pfree_func = mapper_cut_free; - - return pmapper; -} - -static void mapper_cut_free(mapper_t* pmapper, context_t* _) { - mapper_cut_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pfield_name_list); - hss_free(pstate->pfield_name_set); - for (int i = 0; i < pstate->nregex; i++) - regfree(&pstate->regexes[i]); - free(pstate->regexes); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_cut_process_no_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_cut_state_t* pstate = (mapper_cut_state_t*)pvstate; - if (!pstate->do_complement) { - // Loop over the record and free the fields not in the - // to-be-retained set, being careful about the fact that we're - // modifying what we're looping over. - for (lrece_t* pe = pinrec->phead; pe != NULL; /* next in loop */) { - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrece_t* pf = pe->pnext; - lrec_remove(pinrec, pe->key); - pe = pf; - } else { - pe = pe->pnext; - } - } - if (pstate->do_arg_order) { - // OK since the field-name list was reversed at construction time. - for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { - char* field_name = pe->value; - lrec_move_to_head(pinrec, field_name); - } - } - return sllv_single(pinrec); - } else { - for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { - char* field_name = pe->value; - lrec_remove(pinrec, field_name); - } - return sllv_single(pinrec); - } - } - else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_cut_process_with_regexes(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_cut_state_t* pstate = (mapper_cut_state_t*)pvstate; - // Loop over the record and free the fields to be discarded, being - // careful about the fact that we're modifying what we're looping over. - for (lrece_t* pe = pinrec->phead; pe != NULL; /* next in loop */) { - int matches_any = FALSE; - for (int i = 0; i < pstate->nregex; i++) { - if (regmatch_or_die(&pstate->regexes[i], pe->key, 0, NULL)) { - matches_any = TRUE; - break; - } - } - if (matches_any ^ pstate->do_complement) { - pe = pe->pnext; - } else { - lrece_t* pf = pe->pnext; - lrec_remove(pinrec, pe->key); - pe = pf; - } - } - return sllv_single(pinrec); - } - else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_decimate.c b/c/mapping/mapper_decimate.c deleted file mode 100644 index 3ab1ac9cd..000000000 --- a/c/mapping/mapper_decimate.c +++ /dev/null @@ -1,137 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_decimate_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - unsigned long long decimate_count; - unsigned long long remainder_for_keep; - lhmslv_t* pcounts_by_group; -} mapper_decimate_state_t; - -static void mapper_decimate_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_decimate_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long decimate_count, int keep_last); -static void mapper_decimate_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_decimate_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_decimate_setup = { - .verb = "decimate", - .pusage_func = mapper_decimate_usage, - .pparse_func = mapper_decimate_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_decimate_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "-n {count} Decimation factor; default 10\n"); - fprintf(o, "-b Decimate by printing first of every n.\n"); - fprintf(o, "-e Decimate by printing last of every n (default).\n"); - fprintf(o, "-g {a,b,c} Optional group-by-field names for decimate counts\n"); - fprintf(o, "Passes through one of every n records, optionally by category.\n"); -} - -static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int decimate_count = 10; - int keep_last = TRUE; - slls_t* pgroup_by_field_names = slls_alloc(); - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "-n", &decimate_count); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_false_flag(pstate, "-b", &keep_last); - ap_define_true_flag(pstate, "-e", &keep_last); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_decimate_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_decimate_alloc(pstate, pgroup_by_field_names, decimate_count, keep_last); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_decimate_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long decimate_count, int keep_last) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_decimate_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_decimate_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->decimate_count = decimate_count; - pstate->remainder_for_keep = keep_last ? decimate_count - 1 : 0; - pstate->pcounts_by_group = lhmslv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_decimate_process; - pmapper->pfree_func = mapper_decimate_free; - - return pmapper; -} - -static void mapper_decimate_free(mapper_t* pmapper, context_t* _) { - mapper_decimate_state_t* pstate = pmapper->pvstate; - if (pstate->pgroup_by_field_names != NULL) - slls_free(pstate->pgroup_by_field_names); - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount_for_group = pa->pvvalue; - free(pcount_for_group); - } - lhmslv_free(pstate->pcounts_by_group); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_decimate_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_decimate_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - return NULL; - } else { - unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount_for_group == NULL) { - pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount_for_group = 0LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount_for_group, - FREE_ENTRY_KEY); - } - - unsigned long long remainder = *pcount_for_group % pstate->decimate_count; - if (remainder == pstate->remainder_for_keep) { - (*pcount_for_group)++; - slls_free(pgroup_by_field_values); - return sllv_single(pinrec); - } else { - (*pcount_for_group)++; - lrec_free(pinrec); - slls_free(pgroup_by_field_values); - return NULL; - } - } - } else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_fill_down.c b/c/mapping/mapper_fill_down.c deleted file mode 100644 index 111d38dee..000000000 --- a/c/mapping/mapper_fill_down.c +++ /dev/null @@ -1,173 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmss.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_fill_down_state_t { - ap_state_t* pargp; - slls_t* pfill_down_field_names; - lhmss_t* plast_non_null_values; - int do_all; - int only_if_absent; -} mapper_fill_down_state_t; - -static void mapper_fill_down_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_fill_down_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_fill_down_alloc(ap_state_t* pargp, slls_t* pfill_down_field_names, - int do_all, int only_if_absent); -static void mapper_fill_down_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_fill_down_specified_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_fill_down_all_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_fill_down_setup = { - .verb = "fill-down", - .pusage_func = mapper_fill_down_usage, - .pparse_func = mapper_fill_down_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_fill_down_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "If a given record has a missing value for a given field, fill that from\n"); - fprintf(o, "the corresponding value from a previous record, if any.\n"); - fprintf(o, "By default, a 'missing' field either is absent, or has the empty-string value.\n"); - fprintf(o, "With -a, a field is 'missing' only if it is absent.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, " --all Operate on all fields in the input.\n"); - fprintf(o, " -a|--only-if-absent If a given record has a missing value for a given field,\n"); - fprintf(o, " fill that from the corresponding value from a previous record, if any.\n"); - fprintf(o, " By default, a 'missing' field either is absent, or has the empty-string value.\n"); - fprintf(o, " With -a, a field is 'missing' only if it is absent.\n"); - fprintf(o, " -f Field names for fill-down.\n"); - fprintf(o, " -h|--help Show this message.\n"); -} - -static mapper_t* mapper_fill_down_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pfill_down_field_names = NULL; - int do_all = FALSE; - int only_if_absent = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pfill_down_field_names); - ap_define_true_flag(pstate, "-a", &only_if_absent); - ap_define_true_flag(pstate, "--all", &do_all); - ap_define_true_flag(pstate, "--only-if-absent", &only_if_absent); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_fill_down_usage(stderr, argv[0], verb); - return NULL; - } - if (!do_all && (pfill_down_field_names == NULL)) { - mapper_fill_down_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_fill_down_alloc(pstate, pfill_down_field_names, do_all, only_if_absent); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_fill_down_alloc(ap_state_t* pargp, slls_t* pfill_down_field_names, - int do_all, int only_if_absent) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_fill_down_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_fill_down_state_t)); - - pstate->pargp = pargp; - pstate->pfill_down_field_names = pfill_down_field_names; - pstate->plast_non_null_values = lhmss_alloc(); - pstate->only_if_absent = only_if_absent; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = do_all ? mapper_fill_down_all_process : mapper_fill_down_specified_process; - pmapper->pfree_func = mapper_fill_down_free; - - return pmapper; -} - -static void mapper_fill_down_free(mapper_t* pmapper, context_t* _) { - mapper_fill_down_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pfill_down_field_names); - lhmss_free(pstate->plast_non_null_values); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_fill_down_specified_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_fill_down_state_t* pstate = pvstate; - if (pinrec == NULL) { // end of record stream - return sllv_single(NULL); - } - - for (sllse_t* pe = pstate->pfill_down_field_names->phead; pe != NULL; pe = pe->pnext) { - char* pkey = pe->value; - char* pvalue = lrec_get(pinrec, pkey); - int present = (pstate->only_if_absent) - ? (pvalue != NULL) - : (pvalue != NULL && *pvalue); - if (present) { - // Remember it for a subsequent record lacking this field - lhmss_put(pstate->plast_non_null_values, - mlr_strdup_or_die(pkey), - mlr_strdup_or_die(pvalue), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } else { - // Reuse previously seen value, if any - char* prev = lhmss_get(pstate->plast_non_null_values, pkey); - if (prev != NULL) { - lrec_put(pinrec, mlr_strdup_or_die(pkey), mlr_strdup_or_die(prev), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - } - } - - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_fill_down_all_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_fill_down_state_t* pstate = pvstate; - if (pinrec == NULL) { // end of record stream - return sllv_single(NULL); - } - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - char* pkey = pe->key; - char* pvalue = lrec_get(pinrec, pkey); - int present = (pstate->only_if_absent) - ? (pvalue != NULL) - : (pvalue != NULL && *pvalue); - if (present) { - // Remember it for a subsequent record lacking this field - lhmss_put(pstate->plast_non_null_values, - mlr_strdup_or_die(pkey), - mlr_strdup_or_die(pvalue), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } else { - // Reuse previously seen value, if any - char* prev = lhmss_get(pstate->plast_non_null_values, pkey); - if (prev != NULL) { - lrec_put(pinrec, mlr_strdup_or_die(pkey), mlr_strdup_or_die(prev), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - } - } - - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_fill_empty.c b/c/mapping/mapper_fill_empty.c deleted file mode 100644 index 70161b636..000000000 --- a/c/mapping/mapper_fill_empty.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include "cli/argparse.h" -#include "lib/mlrutil.h" -#include "containers/lhmsi.h" -#include "mapping/mappers.h" - -#define DEFAULT_FILL_STRING "N/A" - -typedef struct _mapper_fill_empty_state_t { - char* fill_string; -} mapper_fill_empty_state_t; - -static void mapper_fill_empty_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_fill_empty_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_fill_empty_alloc(); -static void mapper_fill_empty_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_fill_empty_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_fill_empty_setup = { - .verb = "fill-empty", - .pusage_func = mapper_fill_empty_usage, - .pparse_func = mapper_fill_empty_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_fill_empty_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Fills empty-string fields with specified fill-value.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-v {string} Fill-value: defaults to \"%s\"\n", DEFAULT_FILL_STRING); -} - -static mapper_t* mapper_fill_empty_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* fill_string = DEFAULT_FILL_STRING; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_flag(pstate, "-v", &fill_string); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_fill_empty_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_fill_empty_alloc(fill_string); - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_fill_empty_alloc(char* fill_string) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_fill_empty_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_fill_empty_state_t)); - pstate->fill_string = fill_string; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_fill_empty_process; - pmapper->pfree_func = mapper_fill_empty_free; - - return pmapper; -} - -static void mapper_fill_empty_free(mapper_t* pmapper, context_t* _) { - mapper_fill_empty_state_t* pstate = pmapper->pvstate; - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_fill_empty_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_fill_empty_state_t* pstate = pvstate; - - if (pinrec == NULL) { // End of input stream: emit null. - return sllv_single(NULL); - } - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (pe->value[0] == 0) { - lrece_update_value(pe, pstate->fill_string, NO_FREE); - } - } - - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_format_values.c b/c/mapping/mapper_format_values.c deleted file mode 100644 index 743db6fa9..000000000 --- a/c/mapping/mapper_format_values.c +++ /dev/null @@ -1,156 +0,0 @@ -#include "cli/argparse.h" -#include "mapping/mappers.h" -#include "lib/mlrutil.h" -#include "containers/lrec.h" - -typedef struct _mapper_format_values_state_t { - ap_state_t* pargp; - char* string_format; - char* int_format; - char* float_format; - int coerce_int_to_float; -} mapper_format_values_state_t; - -#define DEFAULT_STRING_FORMAT "%s" -#define DEFAULT_INT_FORMAT "%lld" -#define DEFAULT_FLOAT_FORMAT "%lf" - -static void mapper_format_values_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_format_values_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_format_values_alloc(ap_state_t* pargp, - char* string_format, char* int_format, char* float_format, - int coerce_int_to_float); -static void mapper_format_values_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_format_values_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_format_values_setup = { - .verb = "format-values", - .pusage_func = mapper_format_values_usage, - .pparse_func = mapper_format_values_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_format_values_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* string_format = DEFAULT_STRING_FORMAT; - char* int_format = DEFAULT_INT_FORMAT; - char* float_format = DEFAULT_FLOAT_FORMAT; - int coerce_int_to_float = FALSE; - - if ((argc - *pargi) < 1) { - mapper_format_values_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_flag(pstate, "-s", &string_format); - ap_define_string_flag(pstate, "-i", &int_format); - ap_define_string_flag(pstate, "-f", &float_format); - ap_define_true_flag(pstate, "-n", &coerce_int_to_float); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_format_values_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_format_values_alloc(pstate, string_format, int_format, float_format, - coerce_int_to_float); - return pmapper; -} - -static void mapper_format_values_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Applies format strings to all field values, depending on autodetected type.\n"); - fprintf(o, "* If a field value is detected to be integer, applies integer format.\n"); - fprintf(o, "* Else, if a field value is detected to be float, applies float format.\n"); - fprintf(o, "* Else, applies string format.\n"); - fprintf(o, "\n"); - fprintf(o, "Note: this is a low-keystroke way to apply formatting to many fields. To get\n"); - fprintf(o, "finer control, please see the fmtnum function within the mlr put DSL.\n"); - fprintf(o, "\n"); - fprintf(o, "Note: this verb lets you apply arbitrary format strings, which can produce\n"); - fprintf(o, "undefined behavior and/or program crashes. See your system's \"man printf\".\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-i {integer format} Defaults to \"%s\".\n", DEFAULT_INT_FORMAT); - fprintf(o, " Examples: \"%%06lld\", \"%%08llx\".\n"); - fprintf(o, " Note that Miller integers are long long so you must use\n"); - fprintf(o, " formats which apply to long long, e.g. with ll in them.\n"); - fprintf(o, " Undefined behavior results otherwise.\n"); - fprintf(o, "-f {float format} Defaults to \"%s\".\n", DEFAULT_FLOAT_FORMAT); - fprintf(o, " Examples: \"%%8.3lf\", \"%%.6le\".\n"); - fprintf(o, " Note that Miller floats are double-precision so you must\n"); - fprintf(o, " use formats which apply to double, e.g. with l[efg] in them.\n"); - fprintf(o, " Undefined behavior results otherwise.\n"); - fprintf(o, "-s {string format} Defaults to \"%s\".\n", DEFAULT_STRING_FORMAT); - fprintf(o, " Examples: \"_%%s\", \"%%08s\".\n"); - fprintf(o, " Note that you must use formats which apply to string, e.g.\n"); - fprintf(o, " with s in them. Undefined behavior results otherwise.\n"); - fprintf(o, "-n Coerce field values autodetected as int to float, and then\n"); - fprintf(o, " apply the float format.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_format_values_alloc(ap_state_t* pargp, - char* string_format, char* int_format, char* float_format, - int coerce_int_to_float) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - mapper_format_values_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_format_values_state_t)); - pstate->pargp = pargp; - pstate->string_format = string_format; - pstate->int_format = int_format; - pstate->float_format = float_format; - pstate->coerce_int_to_float = coerce_int_to_float; - pmapper->pvstate = pstate; - - pmapper->pprocess_func = NULL; - pmapper->pprocess_func = mapper_format_values_process; - - pmapper->pfree_func = mapper_format_values_free; - return pmapper; -} -static void mapper_format_values_free(mapper_t* pmapper, context_t* _) { - mapper_format_values_state_t* pstate = pmapper->pvstate; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_format_values_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_format_values_state_t* pstate = (mapper_format_values_state_t*)pvstate; - if (pinrec == NULL) { // end of record stream - return sllv_single(NULL); - } - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - long long int_value; - double float_value; - char* string_value = pe->value; - int is_int = mlr_try_int_from_string(string_value, &int_value); - int is_float = mlr_try_float_from_string(string_value, &float_value); - - if (is_int) { - if (pstate->coerce_int_to_float) { - lrece_update_value(pe, mlr_alloc_string_from_double((double)int_value, pstate->float_format), TRUE); - } else { - lrece_update_value(pe, mlr_alloc_string_from_ll_and_format(int_value, pstate->int_format), TRUE); - } - } else if (is_float) { - lrece_update_value(pe, mlr_alloc_string_from_double(float_value, pstate->float_format), TRUE); - } else { - lrece_update_value(pe, - mlr_alloc_string_from_string_and_format(string_value, pstate->string_format), - TRUE - ); - } - } - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_fraction.c b/c/mapping/mapper_fraction.c deleted file mode 100644 index 3bb3190fe..000000000 --- a/c/mapping/mapper_fraction.c +++ /dev/null @@ -1,257 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsmv.h" -#include "containers/mixutil.h" -#include "lib/mvfuncs.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_fraction_state_t { - ap_state_t* pargp; - slls_t* pfraction_field_names; - slls_t* pgroup_by_field_names; - sllv_t* precords; - // Two-level map: lhmslv_t -> lhmsv. Group-by field names are the first keyset; - // the fraction field names are keys into the second. - lhmslv_t* psums; - lhmslv_t* pcumus; - int do_cumu; - char* output_field_name_suffix; // "_fraction" or "_percent" - mv_t multiplier; // 1.0 for fraction or 100.0 for percent - mv_t zero; -} mapper_fraction_state_t; - -static void mapper_fraction_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_fraction_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_fraction_alloc(ap_state_t* pargp, slls_t* pfraction_field_names, slls_t* pgroup_by_field_names, - int do_percents, int do_cumu); -static void mapper_fraction_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_fraction_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_fraction_setup = { - .verb = "fraction", - .pusage_func = mapper_fraction_usage, - .pparse_func = mapper_fraction_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_fraction_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "For each record's value in specified fields, computes the ratio of that\n"); - fprintf(o, "value to the sum of values in that field over all input records.\n"); - fprintf(o, "E.g. with input records x=1 x=2 x=3 and x=4, emits output records\n"); - fprintf(o, "x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4\n"); - fprintf(o, "\n"); - fprintf(o, "Note: this is internally a two-pass algorithm: on the first pass it retains\n"); - fprintf(o, "input records and accumulates sums; on the second pass it computes quotients\n"); - fprintf(o, "and emits output records. This means it produces no output until all input is read.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-f {a,b,c} Field name(s) for fraction calculation\n"); - fprintf(o, "-g {d,e,f} Optional group-by-field name(s) for fraction counts\n"); - fprintf(o, "-p Produce percents [0..100], not fractions [0..1]. Output field names\n"); - fprintf(o, " end with \"_percent\" rather than \"_fraction\"\n"); - fprintf(o, "-c Produce cumulative distributions, i.e. running sums: each output\n"); - fprintf(o, " value folds in the sum of the previous for the specified group\n"); - fprintf(o, " E.g. with input records x=1 x=2 x=3 and x=4, emits output records\n"); - fprintf(o, " x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3\n"); - fprintf(o, " x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0\n"); -} - -static mapper_t* mapper_fraction_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pfraction_field_names = slls_alloc(); - slls_t* pgroup_by_field_names = slls_alloc(); - int do_percents = FALSE; - int do_cumu = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pfraction_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_true_flag(pstate, "-p", &do_percents); - ap_define_true_flag(pstate, "-c", &do_cumu); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_fraction_usage(stderr, argv[0], verb); - return NULL; - } - - if (pfraction_field_names->length == 0) { - mapper_fraction_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_fraction_alloc(pstate, pfraction_field_names, pgroup_by_field_names, do_percents, do_cumu); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_fraction_alloc(ap_state_t* pargp, slls_t* pfraction_field_names, slls_t* pgroup_by_field_names, - int do_percents, int do_cumu) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_fraction_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_fraction_state_t)); - - pstate->pargp = pargp; - pstate->pfraction_field_names = pfraction_field_names; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->precords = sllv_alloc(); - pstate->psums = lhmslv_alloc(); - pstate->pcumus = lhmslv_alloc(); - if (do_percents) { - pstate->multiplier = mv_from_int(100); - pstate->output_field_name_suffix = do_cumu ? "_cumulative_percent" : "_percent"; - } else { - pstate->multiplier = mv_from_int(1); - pstate->output_field_name_suffix = do_cumu ? "_cumulative_fraction" : "_fraction"; - } - pstate->do_cumu = do_cumu; - pstate->zero = mv_from_int(0); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_fraction_process; - pmapper->pfree_func = mapper_fraction_free; - - return pmapper; -} - -static void mapper_fraction_free(mapper_t* pmapper, context_t* _) { - mapper_fraction_state_t* pstate = pmapper->pvstate; - if (pstate->pfraction_field_names != NULL) - slls_free(pstate->pfraction_field_names); - if (pstate->pgroup_by_field_names != NULL) - slls_free(pstate->pgroup_by_field_names); - - // The process method will have emptied out the list. We just need to free the container. - sllv_free(pstate->precords); - - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->psums->phead; pa != NULL; pa = pa->pnext) { - lhmsmv_t* psums_for_group = pa->pvvalue; - lhmsmv_free(psums_for_group); - } - lhmslv_free(pstate->psums); - - for (lhmslve_t* pa = pstate->pcumus->phead; pa != NULL; pa = pa->pnext) { - lhmsmv_t* psums_for_group = pa->pvvalue; - lhmsmv_free(psums_for_group); - } - lhmslv_free(pstate->pcumus); - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_fraction_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_fraction_state_t* pstate = pvstate; - if (pinrec != NULL) { // Not end of stream; pass 1 - - // Append records into a single output list (so that this verb is order-preserving). - sllv_append(pstate->precords, pinrec); - - // Accumulate sums of fraction-field values grouped by group-by field names - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - - if (pgroup_by_field_values != NULL) { - lhmsmv_t* psums_for_group = lhmslv_get(pstate->psums, pgroup_by_field_values); - lhmsmv_t* pcumus_for_group = NULL; - if (psums_for_group == NULL) { - psums_for_group = lhmsmv_alloc(); - lhmslv_put(pstate->psums, slls_copy(pgroup_by_field_values), - psums_for_group, FREE_ENTRY_KEY); - pcumus_for_group = lhmsmv_alloc(); - lhmslv_put(pstate->pcumus, slls_copy(pgroup_by_field_values), - pcumus_for_group, FREE_ENTRY_KEY); - } - - for (sllse_t* pf = pstate->pfraction_field_names->phead; pf != NULL; pf = pf->pnext) { - char* fraction_field_name = pf->value; - char* lrec_string_value = lrec_get(pinrec, fraction_field_name); - if (lrec_string_value != NULL) { - mv_t lrec_num_value = mv_scan_number_or_die(lrec_string_value); - mv_t* psum = lhmsmv_get(psums_for_group, fraction_field_name); - if (psum == NULL) { // First value for group - lhmsmv_put(psums_for_group, fraction_field_name, &lrec_num_value, FREE_ENTRY_VALUE); - lhmsmv_put(pcumus_for_group, fraction_field_name, &pstate->zero, FREE_ENTRY_VALUE); - } else { - *psum = x_xx_plus_func(psum, &lrec_num_value); - } - } - } - - slls_free(pgroup_by_field_values); - } - - return NULL; - - } else { // End of stream; pass 2 - sllv_t* poutrecs = sllv_alloc(); - - // Iterate over the retained records, decorating them with fraction fields. - while (pstate->precords->phead != NULL) { - lrec_t* poutrec = sllv_pop(pstate->precords); - - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(poutrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - lhmsmv_t* psums_for_group = lhmslv_get(pstate->psums, pgroup_by_field_values); - lhmsmv_t* pcumus_for_group = lhmslv_get(pstate->pcumus, pgroup_by_field_values); - MLR_INTERNAL_CODING_ERROR_IF(psums_for_group == NULL); // should have populated on pass 1 - for (sllse_t* pf = pstate->pfraction_field_names->phead; pf != NULL; pf = pf->pnext) { - char* fraction_field_name = pf->value; - char* lrec_string_value = lrec_get(poutrec, fraction_field_name); - if (lrec_string_value != NULL) { - mv_t lrec_num_value = mv_scan_number_or_die(lrec_string_value); - - mv_t numerator; - mv_t* pcumu = NULL; - if (pstate->do_cumu) { - pcumu = lhmsmv_get(pcumus_for_group, fraction_field_name); - numerator = x_xx_plus_func(&lrec_num_value, pcumu); - } else { - numerator = lrec_num_value; - } - - mv_t* pdenominator = lhmsmv_get(psums_for_group, fraction_field_name); - - mv_t output_value = mv_i_nn_ne(&lrec_num_value, &pstate->zero) - ? x_xx_divide_func(&numerator, pdenominator) - : mv_error(); - output_value = x_xx_times_func(&output_value, &pstate->multiplier); - - - lrec_put(poutrec, - mlr_paste_2_strings(fraction_field_name, pstate->output_field_name_suffix), - mv_alloc_format_val(&output_value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - - if (pstate->do_cumu) { - *pcumu = x_xx_plus_func(pcumu, &lrec_num_value); - } - } - } - slls_free(pgroup_by_field_values); - } - - sllv_append(poutrecs, poutrec); - } - - sllv_append(poutrecs, NULL); - return poutrecs; - } -} diff --git a/c/mapping/mapper_grep.c b/c/mapping/mapper_grep.c deleted file mode 100644 index 0fd98cc41..000000000 --- a/c/mapping/mapper_grep.c +++ /dev/null @@ -1,134 +0,0 @@ -#include "cli/argparse.h" -#include "cli/mlrcli.h" -#include "mapping/mappers.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "containers/sllv.h" - -typedef struct _mapper_grep_state_t { - ap_state_t* pargp; - int exclude; - regex_t regex; - cli_writer_opts_t* pwriter_opts; -} mapper_grep_state_t; - -static void mapper_grep_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_grep_alloc(ap_state_t* pargp, char* regex_string, int exclude, int ignore_case, - cli_writer_opts_t* pwriter_opts); -static void mapper_grep_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_grep_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_grep_setup = { - .verb = "grep", - .pusage_func = mapper_grep_usage, - .pparse_func = mapper_grep_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* pwriter_opts) -{ - char* regex_string = NULL; - int exclude = FALSE; - int ignore_case = FALSE; - - if ((argc - *pargi) < 1) { - mapper_grep_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_true_flag(pstate, "-v", &exclude); - ap_define_true_flag(pstate, "-i", &ignore_case); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_grep_usage(stderr, argv[0], verb); - return NULL; - } - - if ((argc - *pargi) < 1) { - mapper_grep_usage(stderr, argv[0], verb); - return NULL; - } - - regex_string = argv[(*pargi)++]; - - mapper_t* pmapper = mapper_grep_alloc(pstate, regex_string, exclude, ignore_case, pwriter_opts); - return pmapper; -} -static void mapper_grep_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {regular expression}\n", argv0, verb); - fprintf(o, "Passes through records which match {regex}.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-i Use case-insensitive search.\n"); - fprintf(o, "-v Invert: pass through records which do not match the regex.\n"); - fprintf(o, "Note that \"%s filter\" is more powerful, but requires you to know field names.\n", argv0); - fprintf(o, "By contrast, \"%s %s\" allows you to regex-match the entire record. It does\n", argv0, verb); - fprintf(o, "this by formatting each record in memory as DKVP, using command-line-specified\n"); - fprintf(o, "ORS/OFS/OPS, and matching the resulting line against the regex specified\n"); - fprintf(o, "here. In particular, the regex is not applied to the input stream: if you\n"); - fprintf(o, "have CSV with header line \"x,y,z\" and data line \"1,2,3\" then the regex will\n"); - fprintf(o, "be matched, not against either of these lines, but against the DKVP line\n"); - fprintf(o, "\"x=1,y=2,z=3\". Furthermore, not all the options to system grep are supported,\n"); - fprintf(o, "and this command is intended to be merely a keystroke-saver. To get all the\n"); - fprintf(o, "features of system grep, you can do\n"); - fprintf(o, " \"%s --odkvp ... | grep ... | %s --idkvp ...\"\n", argv0, argv0); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_grep_alloc(ap_state_t* pargp, char* regex_string, int exclude, int ignore_case, - cli_writer_opts_t* pwriter_opts) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_grep_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_grep_state_t)); - pstate->pargp = pargp; - int cflags = REG_NOSUB; - if (ignore_case) - cflags |= REG_ICASE; - regcomp_or_die_quoted(&pstate->regex, regex_string, cflags); - pstate->exclude = exclude; - pstate->pwriter_opts = pwriter_opts; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_grep_process; - pmapper->pfree_func = mapper_grep_free; - return pmapper; -} -static void mapper_grep_free(mapper_t* pmapper, context_t* _) { - mapper_grep_state_t* pstate = pmapper->pvstate; - regfree(&pstate->regex); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_grep_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of input stream - return sllv_single(NULL); - - mapper_grep_state_t* pstate = (mapper_grep_state_t*)pvstate; - - char* line = lrec_sprint(pinrec, - pstate->pwriter_opts->ors, - pstate->pwriter_opts->ofs, - pstate->pwriter_opts->ops); - - int matches = regmatch_or_die(&pstate->regex, line, 0, NULL); - sllv_t* poutrecs = NULL; - if (matches ^ pstate->exclude) { - poutrecs = sllv_single(pinrec); - } else { - lrec_free(pinrec); - } - free(line); - return poutrecs; -} diff --git a/c/mapping/mapper_group_like.c b/c/mapping/mapper_group_like.c deleted file mode 100644 index 6cfdb2094..000000000 --- a/c/mapping/mapper_group_like.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" - -typedef struct _mapper_group_like_state_t { - // map from list of string to list of record - lhmslv_t* precords_by_key_field_names; -} mapper_group_like_state_t; - -static void mapper_group_like_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_group_like_alloc(); -static void mapper_group_like_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_group_like_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_group_like_setup = { - .verb = "group-like", - .pusage_func = mapper_group_like_usage, - .pparse_func = mapper_group_like_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_group_like_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Outputs records in batches having identical field names.\n"); -} - -static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_group_like_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - mapper_t* pmapper = mapper_group_like_alloc(); - *pargi += 1; - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_group_like_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_group_like_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_group_like_state_t)); - pstate->precords_by_key_field_names = lhmslv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_group_like_process; - pmapper->pfree_func = mapper_group_like_free; - - return pmapper; -} - -static void mapper_group_like_free(mapper_t* pmapper, context_t* _) { - mapper_group_like_state_t* pstate = pmapper->pvstate; - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->precords_by_key_field_names->phead; pa != NULL; pa = pa->pnext) { - sllv_t* plist = pa->pvvalue; - sllv_free(plist); - } - lhmslv_free(pstate->precords_by_key_field_names); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_group_like_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_group_like_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pkey_field_names = mlr_reference_keys_from_record(pinrec); - sllv_t* plist = lhmslv_get(pstate->precords_by_key_field_names, pkey_field_names); - if (plist == NULL) { - plist = sllv_alloc(); - sllv_append(plist, pinrec); - lhmslv_put(pstate->precords_by_key_field_names, slls_copy(pkey_field_names), plist, - FREE_ENTRY_KEY); - } else { - sllv_append(plist, pinrec); - } - slls_free(pkey_field_names); - return NULL; - } else { - sllv_t* poutput = sllv_alloc(); - for (lhmslve_t* pe = pstate->precords_by_key_field_names->phead; pe != NULL; pe = pe->pnext) { - sllv_t* plist = pe->pvvalue; - sllv_transfer(poutput, plist); - } - sllv_append(poutput, NULL); - return poutput; - } -} diff --git a/c/mapping/mapper_having_fields.c b/c/mapping/mapper_having_fields.c deleted file mode 100644 index b9f90dbc7..000000000 --- a/c/mapping/mapper_having_fields.c +++ /dev/null @@ -1,287 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "containers/hss.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef enum _criterion_t { - HAVING_FIELDS_UNSPECIFIED, - HAVING_FIELDS_AT_LEAST, - HAVING_FIELDS_WHICH_ARE, - HAVING_FIELDS_AT_MOST, - HAVING_ALL_FIELDS_MATCHING, - HAVING_ANY_FIELDS_MATCHING, - HAVING_NO_FIELDS_MATCHING -} criterion_t; - -typedef struct _mapper_having_fields_state_t { - slls_t* pfield_names; - hss_t* pfield_name_set; - regex_t regex; -} mapper_having_fields_state_t; - -static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); - -static mapper_t* mapper_having_fields_alloc(slls_t* pfield_names, char* regex_string, criterion_t criterion); -static void mapper_having_fields_free(mapper_t* pmapper, context_t* _); - -static sllv_t* mapper_having_fields_at_least_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_having_fields_which_are_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_having_fields_at_most_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static sllv_t* mapper_having_all_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_having_any_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_having_no_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_having_fields_setup = { - .verb = "having-fields", - .pusage_func = mapper_having_fields_usage, - .pparse_func = mapper_having_fields_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Conditionally passes through records depending on each record's field names.\n"); - fprintf(o, "Options:\n"); - fprintf(o, " --at-least {comma-separated names}\n"); - fprintf(o, " --which-are {comma-separated names}\n"); - fprintf(o, " --at-most {comma-separated names}\n"); - fprintf(o, " --all-matching {regular expression}\n"); - fprintf(o, " --any-matching {regular expression}\n"); - fprintf(o, " --none-matching {regular expression}\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " %s %s --which-are amount,status,owner\n", argv0, verb); - fprintf(o, " %s %s --any-matching 'sda[0-9]'\n", argv0, verb); - fprintf(o, " %s %s --any-matching '\"sda[0-9]\"'\n", argv0, verb); - fprintf(o, " %s %s --any-matching '\"sda[0-9]\"i' (this is case-insensitive)\n", argv0, verb); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pfield_names = NULL; - char* regex_string = NULL; - criterion_t criterion = HAVING_FIELDS_UNSPECIFIED; - - char* verb = argv[(*pargi)++]; - - int argi = *pargi; - while (argi < argc && argv[argi][0] == '-') { - - if (streq(argv[argi], "--at-least")) { - criterion = HAVING_FIELDS_AT_LEAST; - if (pfield_names != NULL) - slls_free(pfield_names); - pfield_names = slls_from_line(argv[argi+1], ',', FALSE); - regex_string = NULL; - } else if (streq(argv[argi], "--which-are")) { - criterion = HAVING_FIELDS_WHICH_ARE; - if (pfield_names != NULL) - slls_free(pfield_names); - pfield_names = slls_from_line(argv[argi+1], ',', FALSE); - regex_string = NULL; - } else if (streq(argv[argi], "--at-most")) { - criterion = HAVING_FIELDS_AT_MOST; - if (pfield_names != NULL) - slls_free(pfield_names); - pfield_names = slls_from_line(argv[argi+1], ',', FALSE); - regex_string = NULL; - - } else if (streq(argv[argi], "--all-matching")) { - criterion = HAVING_ALL_FIELDS_MATCHING; - if (pfield_names != NULL) { - slls_free(pfield_names); - pfield_names = NULL; - } - regex_string = argv[argi+1]; - } else if (streq(argv[argi], "--any-matching")) { - criterion = HAVING_ANY_FIELDS_MATCHING; - if (pfield_names != NULL) { - slls_free(pfield_names); - pfield_names = NULL; - } - regex_string = argv[argi+1]; - } else if (streq(argv[argi], "--none-matching")) { - criterion = HAVING_NO_FIELDS_MATCHING; - if (pfield_names != NULL) { - slls_free(pfield_names); - pfield_names = NULL; - } - regex_string = argv[argi+1]; - } else { - mapper_having_fields_usage(stderr, argv[0], verb); - return NULL; - } - - if (argc - argi < 2) { - mapper_having_fields_usage(stderr, argv[0], verb); - return NULL; - } - argi += 2; - } - - if (pfield_names == NULL && regex_string == NULL) { - mapper_having_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (criterion == FALSE) { - mapper_having_fields_usage(stderr, argv[0], verb); - return NULL; - } - - *pargi = argi; - return mapper_having_fields_alloc(pfield_names, regex_string, criterion); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_having_fields_alloc(slls_t* pfield_names, char* regex_string, criterion_t criterion) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_having_fields_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_having_fields_state_t)); - - pmapper->pvstate = (void*)pstate; - - if (regex_string != NULL) { - pstate->pfield_names = NULL; - pstate->pfield_name_set = hss_alloc(); - - // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. - // Strip off the leading " and trailing " or "i. - regcomp_or_die_quoted(&pstate->regex, regex_string, REG_NOSUB); - - if (criterion == HAVING_ALL_FIELDS_MATCHING) - pmapper->pprocess_func = mapper_having_all_fields_matching_process; - else if (criterion == HAVING_ANY_FIELDS_MATCHING) - pmapper->pprocess_func = mapper_having_any_fields_matching_process; - else if (criterion == HAVING_NO_FIELDS_MATCHING) - pmapper->pprocess_func = mapper_having_no_fields_matching_process; - pmapper->pfree_func = mapper_having_fields_free; - - } else { - pstate->pfield_names = pfield_names; - pstate->pfield_name_set = hss_alloc(); - regcomp_or_die(&pstate->regex, ".", 0); - for (sllse_t* pe = pfield_names->phead; pe != NULL; pe = pe->pnext) - hss_add(pstate->pfield_name_set, pe->value); - - if (criterion == HAVING_FIELDS_AT_LEAST) - pmapper->pprocess_func = mapper_having_fields_at_least_process; - else if (criterion == HAVING_FIELDS_WHICH_ARE) - pmapper->pprocess_func = mapper_having_fields_which_are_process; - else if (criterion == HAVING_FIELDS_AT_MOST) - pmapper->pprocess_func = mapper_having_fields_at_most_process; - pmapper->pfree_func = mapper_having_fields_free; - } - - return pmapper; -} - -static void mapper_having_fields_free(mapper_t* pmapper, context_t* _) { - mapper_having_fields_state_t* pstate = pmapper->pvstate; - if (pstate->pfield_names != NULL) - slls_free(pstate->pfield_names); - if (pstate->pfield_name_set != NULL) - hss_free(pstate->pfield_name_set); - regfree(&pstate->regex); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_having_fields_at_least_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - int num_found = 0; - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (hss_has(pstate->pfield_name_set, pe->key)) { - num_found++; - if (num_found == pstate->pfield_name_set->num_occupied) - return sllv_single(pinrec); - } - } - lrec_free(pinrec); - return NULL; -} - -static sllv_t* mapper_having_fields_which_are_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - if (pinrec->field_count != pstate->pfield_name_set->num_occupied) { - lrec_free(pinrec); - return NULL; - } - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_free(pinrec); - return NULL; - } - } - return sllv_single(pinrec); -} - -static sllv_t* mapper_having_fields_at_most_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_free(pinrec); - return NULL; - } - } - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_having_all_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (!regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { - lrec_free(pinrec); - return NULL; - } - } - return sllv_single(pinrec); -} - -static sllv_t* mapper_having_any_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { - return sllv_single(pinrec); - } - } - lrec_free(pinrec); - return NULL; -} - -static sllv_t* mapper_having_no_fields_matching_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) - return sllv_single(NULL); - mapper_having_fields_state_t* pstate = (mapper_having_fields_state_t*)pvstate; - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { - lrec_free(pinrec); - return NULL; - } - } - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_head.c b/c/mapping/mapper_head.c deleted file mode 100644 index f0df3f2e5..000000000 --- a/c/mapping/mapper_head.c +++ /dev/null @@ -1,154 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_head_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - unsigned long long head_count; - unsigned long long unkeyed_record_count; - lhmslv_t* pcounts_by_group; -} mapper_head_state_t; - -static void mapper_head_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_head_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long head_count); -static void mapper_head_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_head_process_unkeyed(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_head_process_keyed(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_head_setup = { - .verb = "head", - .pusage_func = mapper_head_usage, - .pparse_func = mapper_head_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_head_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "-n {count} Head count to print; default 10\n"); - fprintf(o, "-g {a,b,c} Optional group-by-field names for head counts\n"); - fprintf(o, "Passes through the first n records, optionally by category.\n"); - fprintf(o, "Without -g, ceases consuming more input (i.e. is fast) when n\n"); - fprintf(o, "records have been read.\n"); -} - -static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int head_count = 10; - slls_t* pgroup_by_field_names = slls_alloc(); - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "-n", &head_count); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_head_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_head_alloc(pstate, pgroup_by_field_names, head_count); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_head_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - unsigned long long head_count -) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_head_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_head_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->head_count = head_count; - pstate->unkeyed_record_count = 0LL; - pstate->pcounts_by_group = lhmslv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = pgroup_by_field_names->length == 0 - ? mapper_head_process_unkeyed - : mapper_head_process_keyed; - pmapper->pfree_func = mapper_head_free; - - return pmapper; -} - -static void mapper_head_free(mapper_t* pmapper, context_t* _) { - mapper_head_state_t* pstate = pmapper->pvstate; - if (pstate->pgroup_by_field_names != NULL) - slls_free(pstate->pgroup_by_field_names); - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount_for_group = pa->pvvalue; - free(pcount_for_group); - } - lhmslv_free(pstate->pcounts_by_group); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_head_process_unkeyed(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_head_state_t* pstate = pvstate; - if (pinrec != NULL) { - pstate->unkeyed_record_count++; - if (pstate->unkeyed_record_count <= pstate->head_count) { - return sllv_single(pinrec); - } else { - pctx->force_eof = TRUE; - lrec_free(pinrec); - return NULL; - } - } else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_head_process_keyed(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_head_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - lrec_free(pinrec); - return NULL; - } else { - unsigned long long* pcount_for_group = lhmslv_get(pstate->pcounts_by_group, - pgroup_by_field_values); - if (pcount_for_group == NULL) { - pcount_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount_for_group = 0LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), - pcount_for_group, FREE_ENTRY_KEY); - } - slls_free(pgroup_by_field_values); - (*pcount_for_group)++; - if (*pcount_for_group <= pstate->head_count) { - return sllv_single(pinrec); - } else { - lrec_free(pinrec); - return NULL; - } - } - } else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_histogram.c b/c/mapping/mapper_histogram.c deleted file mode 100644 index d765f8c6b..000000000 --- a/c/mapping/mapper_histogram.c +++ /dev/null @@ -1,362 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/dvector.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DVECTOR_INITIAL_SIZE 1024 - -typedef struct _mapper_histogram_state_t { - ap_state_t* pargp; - slls_t* value_field_names; - double lo; - int nbins; - double hi; - double mul; - lhmsv_t* pcounts_by_field; - lhmsv_t* pvectors_by_field; // For auto-mode - char* output_prefix; -} mapper_histogram_state_t; - -static void mapper_histogram_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_histogram_alloc(ap_state_t* pargp, slls_t* value_field_names, double lo, int nbins, double hi, - int do_auto, char* output_prefix); -static void mapper_histogram_free(mapper_t* pmapper, context_t* _); - -static void mapper_histogram_ingest(lrec_t* pinrec, mapper_histogram_state_t* pstate); -static sllv_t* mapper_histogram_emit(mapper_histogram_state_t* pstate); -static sllv_t* mapper_histogram_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static void mapper_histogram_ingest_auto(lrec_t* pinrec, mapper_histogram_state_t* pstate); -static sllv_t* mapper_histogram_emit_auto(mapper_histogram_state_t* pstate); -static sllv_t* mapper_histogram_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_histogram_setup = { - .verb = "histogram", - .pusage_func = mapper_histogram_usage, - .pparse_func = mapper_histogram_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_histogram_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "-f {a,b,c} Value-field names for histogram counts\n"); - fprintf(o, "--lo {lo} Histogram low value\n"); - fprintf(o, "--hi {hi} Histogram high value\n"); - fprintf(o, "--nbins {n} Number of histogram bins\n"); - fprintf(o, "--auto Automatically computes limits, ignoring --lo and --hi.\n"); - fprintf(o, " Holds all values in memory before producing any output.\n"); - fprintf(o, "-o {prefix} Prefix for output field name. Default: no prefix.\n"); - fprintf(o, "Just a histogram. Input values < lo or > hi are not counted.\n"); -} - -static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* value_field_names = NULL; - double lo = 0.0; - double hi = 0.0; - int nbins = 0; - int do_auto = FALSE; - char* output_prefix = NULL; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &value_field_names); - ap_define_float_flag(pstate, "--lo", &lo); - ap_define_float_flag(pstate, "--hi", &hi); - ap_define_int_flag(pstate, "--nbins", &nbins); - ap_define_true_flag(pstate, "--auto", &do_auto); - ap_define_string_flag(pstate, "-o", &output_prefix); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_histogram_usage(stderr, argv[0], verb); - return NULL; - } - - if (value_field_names == NULL) { - mapper_histogram_usage(stderr, argv[0], verb); - return NULL; - } - - if (nbins == 0) { - mapper_histogram_usage(stderr, argv[0], verb); - return NULL; - } - - if (lo == hi && !do_auto) { - mapper_histogram_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_histogram_alloc(pstate, value_field_names, lo, nbins, hi, do_auto, output_prefix); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_histogram_alloc(ap_state_t* pargp, slls_t* value_field_names, - double lo, int nbins, double hi, int do_auto, char* output_prefix) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_histogram_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_histogram_state_t)); - - pstate->pargp = pargp; - pstate->value_field_names = value_field_names; - pstate->nbins = nbins; - pstate->pcounts_by_field = lhmsv_alloc(); - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - unsigned long long* pcounts = mlr_malloc_or_die(nbins * sizeof(unsigned long long)); - for (int i = 0; i < nbins; i++) - pcounts[i] = 0LL; - lhmsv_put(pstate->pcounts_by_field, value_field_name, pcounts, NO_FREE); - } - if (do_auto) { - pstate->pvectors_by_field = lhmsv_alloc(); - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - dvector_t* pvector = dvector_alloc(DVECTOR_INITIAL_SIZE); - lhmsv_put(pstate->pvectors_by_field, value_field_name, pvector, NO_FREE); - } - } else { - pstate->pvectors_by_field = NULL; - pstate->lo = lo; - pstate->hi = hi; - pstate->mul = nbins / (hi - lo); - } - pstate->output_prefix = output_prefix; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = do_auto ? mapper_histogram_process_auto : mapper_histogram_process; - pmapper->pfree_func = mapper_histogram_free; - - return pmapper; -} - -static void mapper_histogram_free(mapper_t* pmapper, context_t* _) { - mapper_histogram_state_t* pstate = pmapper->pvstate; - slls_free(pstate->value_field_names); - if (pstate->pcounts_by_field != NULL) { - for (lhmsve_t* pe = pstate->pcounts_by_field->phead; pe != NULL; pe = pe->pnext) { - unsigned long long* pcounts = pe->pvvalue; - free(pcounts); - } - lhmsv_free(pstate->pcounts_by_field); - } - if (pstate->pvectors_by_field != NULL) { - for (lhmsve_t* pe = pstate->pvectors_by_field->phead; pe != NULL; pe = pe->pnext) { - dvector_t* pvector = pe->pvvalue; - dvector_free(pvector); - } - lhmsv_free(pstate->pvectors_by_field); - } - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_histogram_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_histogram_state_t* pstate = pvstate; - if (pinrec != NULL) { - mapper_histogram_ingest(pinrec, pstate); - lrec_free(pinrec); - return NULL; - } - else { - return mapper_histogram_emit(pstate); - } -} - -static void mapper_histogram_ingest(lrec_t* pinrec, mapper_histogram_state_t* pstate) { - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - char* strv = lrec_get(pinrec, value_field_name); - unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); - if (strv != NULL) { - double val = mlr_double_from_string_or_die(strv); - if ((val >= pstate->lo) && (val < pstate->hi)) { - int idx = (int)((val-pstate->lo) * pstate->mul); - pcounts[idx]++; - } else if (val == pstate->hi) { - int idx = pstate->nbins - 1; - pcounts[idx]++; - } - } - } -} - -static sllv_t* mapper_histogram_emit(mapper_histogram_state_t* pstate) { - sllv_t* poutrecs = sllv_alloc(); - - lhmss_t* pcount_field_names = lhmss_alloc(); - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - char* count_field_name = (pstate->output_prefix == NULL) - ? mlr_paste_3_strings(value_field_name, "_", "count") - : mlr_paste_4_strings(pstate->output_prefix, value_field_name, "_", "count"); - lhmss_put(pcount_field_names, mlr_strdup_or_die(value_field_name), count_field_name, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - - for (int i = 0; i < pstate->nbins; i++) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - char* value = mlr_alloc_string_from_double(pstate->lo + i / pstate->mul, MLR_GLOBALS.ofmt); - if (pstate->output_prefix == NULL) { - lrec_put(poutrec, "bin_lo", value, FREE_ENTRY_VALUE); - } else { - lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_lo"), value, - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - - value = mlr_alloc_string_from_double(pstate->lo + (i+1) / pstate->mul, MLR_GLOBALS.ofmt); - if (pstate->output_prefix == NULL) { - lrec_put(poutrec, "bin_hi", value, FREE_ENTRY_VALUE); - } else { - lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_hi"), value, - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); - - char* count_field_name = lhmss_get(pcount_field_names, value_field_name); - - value = mlr_alloc_string_from_ull(pcounts[i]); - lrec_put(poutrec, mlr_strdup_or_die(count_field_name), value, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - - sllv_append(poutrecs, poutrec); - } - - lhmss_free(pcount_field_names); - - sllv_append(poutrecs, NULL); - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_histogram_process_auto(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_histogram_state_t* pstate = pvstate; - if (pinrec != NULL) { - mapper_histogram_ingest_auto(pinrec, pstate); - lrec_free(pinrec); - return NULL; - } - else { - return mapper_histogram_emit_auto(pstate); - } -} - -static void mapper_histogram_ingest_auto(lrec_t* pinrec, mapper_histogram_state_t* pstate) { - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - char* strv = lrec_get(pinrec, value_field_name); - dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); - if (strv != NULL) { - dvector_append(pvector, mlr_double_from_string_or_die(strv)); - } - } -} - -static sllv_t* mapper_histogram_emit_auto(mapper_histogram_state_t* pstate) { - int have_lo_hi = FALSE; - double lo = 0.0, hi = 1.0; - int nbins = pstate->nbins; - - // Limits pass - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); - int n = pvector->size; - for (int i = 0; i < n; i++) { - double val = pvector->data[i]; - if (have_lo_hi) { - if (lo > val) - lo = val; - if (hi < val) - hi = val; - } else { - lo = val; - hi = val; - have_lo_hi = TRUE; - } - } - } - - // Binning pass - double mul = nbins / (hi - lo); - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - dvector_t* pvector = lhmsv_get(pstate->pvectors_by_field, value_field_name); - unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); - int n = pvector->size; - for (int i = 0; i < n; i++) { - double val = pvector->data[i]; - if ((val >= lo) && (val < hi)) { - int idx = (int)((val-lo) * mul); - pcounts[idx]++; - } else if (val == hi) { - int idx = nbins - 1; - pcounts[idx]++; - } - } - } - - // Emission pass - sllv_t* poutrecs = sllv_alloc(); - lhmss_t* pcount_field_names = lhmss_alloc(); - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - char* count_field_name = (pstate->output_prefix == NULL) - ? mlr_paste_3_strings(value_field_name, "_", "count") - : mlr_paste_4_strings(pstate->output_prefix, value_field_name, "_", "count"); - lhmss_put(pcount_field_names, mlr_strdup_or_die(value_field_name), count_field_name, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - - for (int i = 0; i < nbins; i++) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - char* value = mlr_alloc_string_from_double(lo + i / mul, MLR_GLOBALS.ofmt); - if (pstate->output_prefix == NULL) { - lrec_put(poutrec, "bin_lo", value, FREE_ENTRY_VALUE); - } else { - lrec_put(poutrec, mlr_paste_2_strings(pstate->output_prefix, "bin_lo"), value, - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - - value = mlr_alloc_string_from_double(lo + (i+1) / mul, MLR_GLOBALS.ofmt); - lrec_put(poutrec, "bin_hi", value, FREE_ENTRY_VALUE); - - for (sllse_t* pe = pstate->value_field_names->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->value; - unsigned long long* pcounts = lhmsv_get(pstate->pcounts_by_field, value_field_name); - char* count_field_name = lhmss_get(pcount_field_names, value_field_name); - value = mlr_alloc_string_from_ull(pcounts[i]); - lrec_put(poutrec, mlr_strdup_or_die(count_field_name), value, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - - lhmss_free(pcount_field_names); - return poutrecs; -} diff --git a/c/mapping/mapper_join.c b/c/mapping/mapper_join.c deleted file mode 100644 index 6429d225f..000000000 --- a/c/mapping/mapper_join.c +++ /dev/null @@ -1,597 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" -#include "containers/join_bucket_keeper.h" -#include "mapping/mappers.h" -#include "input/lrec_readers.h" - -// ---------------------------------------------------------------- -typedef struct _mapper_join_opts_t { - char* left_prefix; - char* right_prefix; - slls_t* poutput_join_field_names; - slls_t* pleft_join_field_names; - slls_t* pright_join_field_names; - char* output_join_field_names_cli_backing; - char* left_join_field_names_cli_backing; - char* right_join_field_names_cli_backing; - int allow_unsorted_input; - int emit_pairables; - int emit_left_unpairables; - int emit_right_unpairables; - - char* prepipe; - char* left_file_name; - - // These allow the joiner to have its own different format/delimiter for - // the left-file: - cli_reader_opts_t reader_opts; -} mapper_join_opts_t; - -typedef struct _mapper_join_state_t { - - mapper_join_opts_t* popts; - - hss_t* pleft_field_name_set; - hss_t* pright_field_name_set; - - // For sorted input - join_bucket_keeper_t* pjoin_bucket_keeper; - - // For unsorted input - lhmslv_t* pleft_buckets_by_join_field_values; - sllv_t* pleft_unpaired_records; - -} mapper_join_state_t; - -// ---------------------------------------------------------------- -static void mapper_join_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_join_alloc(mapper_join_opts_t* popts); -static void mapper_join_free(mapper_t* pmapper, context_t* _); -static void ingest_left_file(mapper_join_state_t* pstate); -static void mapper_join_form_pairs(sllv_t* pleft_records, lrec_t* pright_rec, mapper_join_state_t* pstate, - sllv_t* pout_recs); -static sllv_t* mapper_join_process_sorted(lrec_t* pright_rec, context_t* pctx, void* pvstate); -static sllv_t* mapper_join_process_unsorted(lrec_t* pright_rec, context_t* pctx, void* pvstate); - -mapper_setup_t mapper_join_setup = { - .verb = "join", - .pusage_func = mapper_join_usage, - .pparse_func = mapper_join_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_join_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Joins records from specified left file name with records from all file names\n"); - fprintf(o, "at the end of the Miller argument list.\n"); - fprintf(o, "Functionality is essentially the same as the system \"join\" command, but for\n"); - fprintf(o, "record streams.\n"); - fprintf(o, "Options:\n"); - fprintf(o, " -f {left file name}\n"); - fprintf(o, " -j {a,b,c} Comma-separated join-field names for output\n"); - fprintf(o, " -l {a,b,c} Comma-separated join-field names for left input file;\n"); - fprintf(o, " defaults to -j values if omitted.\n"); - fprintf(o, " -r {a,b,c} Comma-separated join-field names for right input file(s);\n"); - fprintf(o, " defaults to -j values if omitted.\n"); - fprintf(o, " --lp {text} Additional prefix for non-join output field names from\n"); - fprintf(o, " the left file\n"); - fprintf(o, " --rp {text} Additional prefix for non-join output field names from\n"); - fprintf(o, " the right file(s)\n"); - fprintf(o, " --np Do not emit paired records\n"); - fprintf(o, " --ul Emit unpaired records from the left file\n"); - fprintf(o, " --ur Emit unpaired records from the right file(s)\n"); - fprintf(o, " -s|--sorted-input Require sorted input: records must be sorted\n"); - fprintf(o, " lexically by their join-field names, else not all records will\n"); - fprintf(o, " be paired. The only likely use case for this is with a left\n"); - fprintf(o, " file which is too big to fit into system memory otherwise.\n"); - fprintf(o, " -u Enable unsorted input. (This is the default even without -u.)\n"); - fprintf(o, " In this case, the entire left file will be loaded into memory.\n"); - - fprintf(o, " --prepipe {command} As in main input options; see %s --help for details.\n", - MLR_GLOBALS.bargv0); - fprintf(o, " If you wish to use a prepipe command for the main input as well\n"); - fprintf(o, " as here, it must be specified there as well as here.\n"); - fprintf(o, "File-format options default to those for the right file names on the Miller\n"); - fprintf(o, "argument list, but may be overridden for the left file as follows. Please see\n"); - fprintf(o, "the main \"%s --help\" for more information on syntax for these arguments:\n", argv0); - fprintf(o, " -i {one of csv,dkvp,nidx,pprint,xtab}\n"); - fprintf(o, " --irs {record-separator character}\n"); - fprintf(o, " --ifs {field-separator character}\n"); - fprintf(o, " --ips {pair-separator character}\n"); - fprintf(o, " --repifs\n"); - fprintf(o, " --repips\n"); - fprintf(o, " --implicit-csv-header\n"); - fprintf(o, " --no-implicit-csv-header\n"); - fprintf(o, "For example, if you have 'mlr --csv ... join -l foo ... ' then the left-file format will\n"); - fprintf(o, "be specified CSV as well unless you override with 'mlr --csv ... join --ijson -l foo' etc.\n"); - fprintf(o, "Likewise, if you have 'mlr --csv --implicit-csv-header ...' then the join-in file will be\n"); - fprintf(o, "expected to be headerless as well unless you put '--no-implicit-csv-header' after 'join'.\n"); - fprintf(o, "Please use \"%s --usage-separator-options\" for information on specifying separators.\n", - argv0); - fprintf(o, "Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information\n"); - fprintf(o, "including examples.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* pmain_reader_opts, cli_writer_opts_t* __) -{ - mapper_join_opts_t* popts = mlr_malloc_or_die(sizeof(mapper_join_opts_t)); - - cli_reader_opts_init(&popts->reader_opts); - - popts->left_prefix = NULL; - popts->right_prefix = NULL; - popts->prepipe = NULL; - popts->left_file_name = NULL; - popts->poutput_join_field_names = NULL; - popts->pleft_join_field_names = NULL; - popts->pright_join_field_names = NULL; - popts->output_join_field_names_cli_backing = NULL; - popts->left_join_field_names_cli_backing = NULL; - popts->right_join_field_names_cli_backing = NULL; - popts->emit_pairables = TRUE; - popts->emit_left_unpairables = FALSE; - popts->emit_right_unpairables = FALSE; - popts->allow_unsorted_input = TRUE; - - int argi = *pargi; - char* verb = argv[argi++]; - - for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { - - if (argv[argi][0] != '-') { - break; // No more flag options to process - - } else if (cli_handle_reader_options(argv, argc, &argi, &popts->reader_opts)) { - // handled - - } else if (streq(argv[argi], "--prepipe")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->prepipe = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "-f")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->left_file_name = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "-j")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->output_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); - popts->poutput_join_field_names = slls_from_line(popts->output_join_field_names_cli_backing, ',', FALSE); - argi += 2; - - } else if (streq(argv[argi], "-l")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->left_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); - popts->pleft_join_field_names = slls_from_line(popts->left_join_field_names_cli_backing, ',', FALSE); - argi += 2; - - } else if (streq(argv[argi], "-r")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->right_join_field_names_cli_backing = mlr_strdup_or_die(argv[argi+1]); - popts->pright_join_field_names = slls_from_line(popts->right_join_field_names_cli_backing, ',', FALSE); - argi += 2; - - } else if (streq(argv[argi], "--lp")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->left_prefix = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--rp")) { - if ((argc - argi) < 2) { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - popts->right_prefix = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "--np")) { - popts->emit_pairables = FALSE; - argi += 1; - - } else if (streq(argv[argi], "--ul")) { - popts->emit_left_unpairables = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--ur")) { - popts->emit_right_unpairables = TRUE; - argi += 1; - - } else if (streq(argv[argi], "-u")) { - popts->allow_unsorted_input = TRUE; - argi += 1; - - } else if (streq(argv[argi], "--sorted-input") || streq(argv[argi], "-s")) { - popts->allow_unsorted_input = FALSE; - argi += 1; - - } else { - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - - } - - cli_merge_reader_opts(&popts->reader_opts, pmain_reader_opts); - - if (popts->left_file_name == NULL) { - fprintf(stderr, "%s %s: need left file name\n", MLR_GLOBALS.bargv0, verb); - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - - if (!popts->emit_pairables && !popts->emit_left_unpairables && !popts->emit_right_unpairables) { - fprintf(stderr, "%s %s: all emit flags are unset; no output is possible.\n", - MLR_GLOBALS.bargv0, verb); - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - - if (popts->poutput_join_field_names == NULL) { - fprintf(stderr, "%s %s: need output field names\n", MLR_GLOBALS.bargv0, verb); - mapper_join_usage(stderr, argv[0], verb); - return NULL; - } - - if (popts->pleft_join_field_names == NULL) { - popts->pleft_join_field_names = slls_copy(popts->poutput_join_field_names); - } - if (popts->pright_join_field_names == NULL) { - popts->pright_join_field_names = slls_copy(popts->poutput_join_field_names); - } - - int llen = popts->pleft_join_field_names->length; - int rlen = popts->pright_join_field_names->length; - int olen = popts->poutput_join_field_names->length; - if (llen != rlen || llen != olen) { - fprintf(stderr, - "%s %s: must have equal left,right,output field-name lists; got lengths %d,%d,%d.\n", - MLR_GLOBALS.bargv0, verb, llen, rlen, olen); - exit(1); - } - - *pargi = argi; - - return mapper_join_alloc(popts); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_join_alloc(mapper_join_opts_t* popts) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_join_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_join_state_t)); - pstate->popts = popts; - pstate->pleft_field_name_set = hss_from_slls(popts->pleft_join_field_names); - pstate->pright_field_name_set = hss_from_slls(popts->pright_join_field_names); - - pstate->pjoin_bucket_keeper = join_bucket_keeper_alloc( - popts->prepipe, - popts->left_file_name, - &popts->reader_opts, - popts->pleft_join_field_names); - - pstate->pleft_buckets_by_join_field_values = NULL; - pstate->pleft_unpaired_records = NULL; - - pmapper->pvstate = (void*)pstate; - if (popts->allow_unsorted_input) { - pmapper->pprocess_func = mapper_join_process_unsorted; - } else { - pmapper->pprocess_func = mapper_join_process_sorted; - } - pmapper->pfree_func = mapper_join_free; - - return pmapper; -} - -// ---------------------------------------------------------------- -static void mapper_join_free(mapper_t* pmapper, context_t* _) { - mapper_join_state_t* pstate = pmapper->pvstate; - - if (pstate->pleft_buckets_by_join_field_values != NULL) { - for (lhmslve_t* pe = pstate->pleft_buckets_by_join_field_values->phead; pe != NULL; pe = pe->pnext) { - join_bucket_t* pbucket = pe->pvvalue; - slls_free(pbucket->pleft_field_values); - if (pbucket->precords) - while (pbucket->precords->phead) - lrec_free(sllv_pop(pbucket->precords)); - sllv_free(pbucket->precords); - free(pbucket); - } - lhmslv_free(pstate->pleft_buckets_by_join_field_values); - } - - // The void-star payload, which is lrec_t*'s, should have been sllv_transferred out. - // Misses should be detected by valgrind --leak-check=full, e.g. reg_test/run --valgrind. - sllv_free(pstate->pleft_unpaired_records); - - join_bucket_keeper_free(pstate->pjoin_bucket_keeper, pstate->popts->prepipe); - - slls_free(pstate->popts->poutput_join_field_names); - slls_free(pstate->popts->pleft_join_field_names); - slls_free(pstate->popts->pright_join_field_names); - - free(pstate->popts->output_join_field_names_cli_backing); - free(pstate->popts->left_join_field_names_cli_backing); - free(pstate->popts->right_join_field_names_cli_backing); - - hss_free(pstate->pleft_field_name_set); - hss_free(pstate->pright_field_name_set); - - free(pstate->popts); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_join_process_sorted(lrec_t* pright_rec, context_t* pctx, void* pvstate) { - mapper_join_state_t* pstate = (mapper_join_state_t*)pvstate; - - join_bucket_keeper_t* pkeeper = pstate->pjoin_bucket_keeper; // keystroke-saver - - sllv_t* pleft_records = NULL; - sllv_t* pbucket_left_unpaired = NULL; - sllv_t* pout_recs = sllv_alloc(); - - if (pright_rec != NULL) { // Not end of input record stream - int produced_right = FALSE; - slls_t* pright_field_values = mlr_reference_selected_values_from_record(pright_rec, - pstate->popts->pright_join_field_names); - - if (pright_field_values != NULL) { - join_bucket_keeper_emit(pkeeper, pright_field_values, &pleft_records, &pbucket_left_unpaired); - slls_free(pright_field_values); - } - - if (pstate->popts->emit_left_unpairables) { - if (pbucket_left_unpaired != NULL && pbucket_left_unpaired->length > 0) { - sllv_transfer(pout_recs, pbucket_left_unpaired); - } - } - - if (pstate->popts->emit_right_unpairables) { - if (pleft_records == NULL || pleft_records->length == 0) { - sllv_append(pout_recs, pright_rec); - produced_right = TRUE; - } - } - - if (pstate->popts->emit_pairables && pleft_records != NULL) { - mapper_join_form_pairs(pleft_records, pright_rec, pstate, pout_recs); - } - - if (!produced_right) - lrec_free(pright_rec); - // pleft_records are not caller-owned; we don't free them. - if (pbucket_left_unpaired) - while (pbucket_left_unpaired->phead) - lrec_free(sllv_pop(pbucket_left_unpaired)); - sllv_free(pbucket_left_unpaired); - return pout_recs; - - } else { // end of input record stream - join_bucket_keeper_emit(pkeeper, NULL, &pleft_records, &pbucket_left_unpaired); - if (pstate->popts->emit_left_unpairables) { - sllv_transfer(pout_recs, pbucket_left_unpaired); - } else { - if (pbucket_left_unpaired) - while (pbucket_left_unpaired->phead) - lrec_free(sllv_pop(pbucket_left_unpaired)); - } - // pleft_records are not caller-owned; we don't free them. - sllv_free(pbucket_left_unpaired); - sllv_append(pout_recs, NULL); - return pout_recs; - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_join_process_unsorted(lrec_t* pright_rec, context_t* pctx, void* pvstate) { - mapper_join_state_t* pstate = (mapper_join_state_t*)pvstate; - - if (pstate->pleft_unpaired_records == NULL) // First call - pstate->pleft_unpaired_records = sllv_alloc(); - - // This can't be done in the CLI-parser since it requires information which - // isn't known until after the CLI-parser is called. - if (pstate->pleft_buckets_by_join_field_values == NULL) // First call - ingest_left_file(pstate); - - if (pright_rec == NULL) { // End of input record stream - if (pstate->popts->emit_left_unpairables) { - sllv_t* poutrecs = sllv_alloc(); - if (pstate->pleft_buckets_by_join_field_values != NULL) { // E.g. empty right input - for (lhmslve_t* pe = pstate->pleft_buckets_by_join_field_values->phead; pe != NULL; pe = pe->pnext) { - join_bucket_t* pbucket = pe->pvvalue; - if (!pbucket->was_paired) { - sllv_transfer(poutrecs, pbucket->precords); - } - } - } - sllv_transfer(poutrecs, pstate->pleft_unpaired_records); - sllv_append(poutrecs, NULL); - return poutrecs; - } else { - while (pstate->pleft_unpaired_records->phead) { - lrec_t* prec = sllv_pop(pstate->pleft_unpaired_records); - lrec_free(prec); - } - return sllv_single(NULL); - } - } - - slls_t* pright_field_values = mlr_reference_selected_values_from_record(pright_rec, - pstate->popts->pright_join_field_names); - if (pright_field_values != NULL) { - join_bucket_t* pleft_bucket = lhmslv_get(pstate->pleft_buckets_by_join_field_values, pright_field_values); - slls_free(pright_field_values); - if (pleft_bucket == NULL) { - if (pstate->popts->emit_right_unpairables) { - return sllv_single(pright_rec); - } else { - lrec_free(pright_rec); - return NULL; - } - } else if (pstate->popts->emit_pairables) { - sllv_t* pout_recs = sllv_alloc(); - pleft_bucket->was_paired = TRUE; - mapper_join_form_pairs(pleft_bucket->precords, pright_rec, pstate, pout_recs); - lrec_free(pright_rec); - return pout_recs; - } else { - pleft_bucket->was_paired = TRUE; - lrec_free(pright_rec); - return NULL; - } - } else { - if (pstate->popts->emit_right_unpairables) { - return sllv_single(pright_rec); - } else { - lrec_free(pright_rec); - return NULL; - } - } -} - -// ---------------------------------------------------------------- -// This could be optimized in several ways: -// * Store the prefix length instead of computing its strlen inside -// mlr_paste_2_strings -// * Don't do the if-statement on each call: prefix is null or non-null -// at the time the mapper is constructed. Use a function pointer. -static inline char* compose_keys(char* prefix, char* key) { - if (prefix == NULL) - return mlr_strdup_or_die(key); - else - return mlr_paste_2_strings(prefix, key); -} - -static void mapper_join_form_pairs(sllv_t* pleft_records, lrec_t* pright_rec, mapper_join_state_t* pstate, - sllv_t* pout_recs) -{ - for (sllve_t* pe = pleft_records->phead; pe != NULL; pe = pe->pnext) { - lrec_t* pleft_rec = pe->pvvalue; - lrec_t* pout_rec = lrec_unbacked_alloc(); - - // add the joined-on fields - sllse_t* pg = pstate->popts->pleft_join_field_names->phead; - sllse_t* ph = pstate->popts->pright_join_field_names->phead; - sllse_t* pi = pstate->popts->poutput_join_field_names->phead; - for ( ; pg != NULL && ph != NULL && pi != NULL; pg = pg->pnext, ph = ph->pnext, pi = pi->pnext) { - char* v = lrec_get(pleft_rec, pg->value); - if (v != NULL) { - lrec_put(pout_rec, pi->value, mlr_strdup_or_die(v), FREE_ENTRY_VALUE); - } - } - - // add the left-record fields not already added - for (lrece_t* pl = pleft_rec->phead; pl != NULL; pl = pl->pnext) { - if (!hss_has(pstate->pleft_field_name_set, pl->key)) { - lrec_put(pout_rec, compose_keys(pstate->popts->left_prefix, pl->key), - mlr_strdup_or_die(pl->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - // add the right-record fields not already added - for (lrece_t* pr = pright_rec->phead; pr != NULL; pr = pr->pnext) { - if (!hss_has(pstate->pright_field_name_set, pr->key)) { - lrec_put(pout_rec, compose_keys(pstate->popts->right_prefix, pr->key), - mlr_strdup_or_die(pr->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - sllv_append(pout_recs, pout_rec); - } -} - -// ---------------------------------------------------------------- -static void ingest_left_file(mapper_join_state_t* pstate) { - mapper_join_opts_t* popts = pstate->popts; - - lrec_reader_t* plrec_reader = lrec_reader_alloc(&popts->reader_opts); - - void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, pstate->popts->prepipe, - pstate->popts->left_file_name); - plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); - - context_t ctx = { - .nr = 0, - .fnr = 0, - .filenum = 1, - .filename = pstate->popts->left_file_name, - .force_eof = FALSE, - .ips = NULL, - .ifs = NULL, - .irs = NULL, - .ops = NULL, - .ofs = NULL, - .ors = NULL, - .auto_line_term = NULL, - }; - context_t* pctx = &ctx; - - pstate->pleft_buckets_by_join_field_values = lhmslv_alloc(); - - while (TRUE) { - lrec_t* pleft_rec = plrec_reader->pprocess_func(plrec_reader->pvstate, pvhandle, pctx); - if (pleft_rec == NULL) - break; - // Mmapped input records are backed by their storage, i.e. they contain pointers into - // mmaped file data. After the lrec reader is freed they will be invalid. So in this - // ingestor we need to copy. - lrec_t* pleft_copy = lrec_copy(pleft_rec); - - slls_t* pleft_field_values = mlr_reference_selected_values_from_record(pleft_copy, - pstate->popts->pleft_join_field_names); - if (pleft_field_values != NULL) { - join_bucket_t* pbucket = lhmslv_get(pstate->pleft_buckets_by_join_field_values, pleft_field_values); - if (pbucket == NULL) { // New key-field-value: new bucket and hash-map entry - slls_t* pkey_field_values_copy = slls_copy(pleft_field_values); - join_bucket_t* pbucket = mlr_malloc_or_die(sizeof(join_bucket_t)); - pbucket->precords = sllv_alloc(); - pbucket->was_paired = FALSE; - pbucket->pleft_field_values = slls_copy(pleft_field_values); - lhmslv_put(pstate->pleft_buckets_by_join_field_values, pkey_field_values_copy, pbucket, - FREE_ENTRY_KEY); - sllv_append(pbucket->precords, pleft_copy); - } else { // Previously seen key-field-value: append record to bucket - sllv_append(pbucket->precords, pleft_copy); - } - slls_free(pleft_field_values); - } else { - sllv_append(pstate->pleft_unpaired_records, pleft_copy); - } - lrec_free(pleft_rec); - } - - plrec_reader->pclose_func(plrec_reader->pvstate, pvhandle, pstate->popts->prepipe); - - plrec_reader->pfree_func(plrec_reader); -} diff --git a/c/mapping/mapper_label.c b/c/mapping/mapper_label.c deleted file mode 100644 index efd127759..000000000 --- a/c/mapping/mapper_label.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/hss.h" -#include "containers/slls.h" -#include "containers/sllv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" - -typedef struct _mapper_label_state_t { - slls_t* pnames_as_list; - hss_t* pnames_as_set; // needed for efficient deduplication -} mapper_label_state_t; - -static void mapper_label_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_label_alloc(slls_t* pnames_as_list, hss_t* pnames_as_set); -static void mapper_label_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_label_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_label_setup = { - .verb = "label", - .pusage_func = mapper_label_usage, - .pparse_func = mapper_label_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_label_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s {new1,new2,new3,...}\n", argv0, verb); - fprintf(o, "Given n comma-separated names, renames the first n fields of each record to\n"); - fprintf(o, "have the respective name. (Fields past the nth are left with their original\n"); - fprintf(o, "names.) Particularly useful with --inidx or --implicit-csv-header, to give\n"); - fprintf(o, "useful names to otherwise integer-indexed fields.\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " \"echo 'a b c d' | %s --inidx --odkvp cat\" gives \"1=a,2=b,3=c,4=d\"\n", argv0); - fprintf(o, " \"echo 'a b c d' | %s --inidx --odkvp %s s,t\" gives \"s=a,t=b,3=c,4=d\"\n", argv0, verb); - -} - -static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int argi = *pargi; - if ((argc - argi) < 2) { - mapper_label_usage(stderr, argv[0], argv[argi]); - return NULL; - } - - char* verb = argv[argi]; - char* names_as_string = argv[argi+1]; - - slls_t* pnames_as_list = slls_from_line(names_as_string, ',', FALSE); - hss_t* pnames_as_set = hss_from_slls(pnames_as_list); - - if (slls_size(pnames_as_list) != hss_size(pnames_as_set)) { - fprintf(stderr, "%s %s: labels must be unique; got \"%s\"\n", - MLR_GLOBALS.bargv0, verb, names_as_string); - exit(1); - } - - *pargi += 2; - return mapper_label_alloc(pnames_as_list, pnames_as_set); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_label_alloc(slls_t* pnames_as_list, hss_t* pnames_as_set) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_label_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_label_state_t)); - pstate->pnames_as_list = pnames_as_list; - pstate->pnames_as_set = pnames_as_set; - - pmapper->pvstate = (void*)pstate; - pmapper->pprocess_func = mapper_label_process; - pmapper->pfree_func = mapper_label_free; - - return pmapper; -} - -static void mapper_label_free(mapper_t* pmapper, context_t* _) { - mapper_label_state_t* pstate = pmapper->pvstate; - if (pstate->pnames_as_list != NULL) - slls_free(pstate->pnames_as_list); - if (pstate->pnames_as_set != NULL) - hss_free(pstate->pnames_as_set); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_label_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_label_state_t* pstate = (mapper_label_state_t*)pvstate; - lrec_label(pinrec, pstate->pnames_as_list, pstate->pnames_as_set); - return sllv_single(pinrec); - } - else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_merge_fields.c b/c/mapping/mapper_merge_fields.c deleted file mode 100644 index df17fdc2f..000000000 --- a/c/mapping/mapper_merge_fields.c +++ /dev/null @@ -1,555 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/mlr_globals.h" -#include "lib/mlrstat.h" -#include "cli/argparse.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "lib/mlrval.h" -#include "mapping/mappers.h" -#include "mapping/stats1_accumulators.h" - -typedef enum _merge_by_t { - MERGE_BY_NAME_LIST, - MERGE_BY_NAME_REGEX, - MERGE_BY_COLLAPSING, - MERGE_UNSPECIFIED -} merge_by_t; - -#define SB_ALLOC_LENGTH 32 - -// ================================================================ -struct _merge_fields_t; // forward reference for method definitions -typedef void merge_fields_dingest_func_t(void* pvstate, double val); -typedef void merge_fields_ningest_func_t(void* pvstate, mv_t* pval); -typedef void merge_fields_emit_func_t(void* pvstate, char* value_field_name, char* merge_fields_name, lrec_t* poutrec); -typedef void merge_fields_free_func_t(struct _merge_fields_t* pmerge_fields); - -typedef struct _merge_fields_t { - void* pvstate; - merge_fields_dingest_func_t* pdingest_func; - merge_fields_ningest_func_t* pningest_func; - merge_fields_emit_func_t* pemit_func; - merge_fields_free_func_t* pfree_func; // virtual destructor -} merge_fields_t; - -typedef merge_fields_t* merge_fields_alloc_func_t(char* value_field_name, char* merge_fields_name, int allow_int_float); - -typedef struct _mapper_merge_fields_state_t { - slls_t* paccumulator_names; - slls_t* pvalue_field_names; - sllv_t* pvalue_field_regexes; - char* output_field_basename; - int allow_int_float; - int do_interpolated_percentiles; - int keep_input_fields; - string_builder_t* psb; -} mapper_merge_fields_state_t; - -// ---------------------------------------------------------------- -static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_merge_fields_alloc(slls_t* paccumulator_names, merge_by_t do_which, - slls_t* pvalue_field_names, char* output_field_basename, int allow_int_float, int do_interpolated_percentiles, - int keep_input_fields); -static void mapper_merge_fields_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_merge_fields_process_by_name_list(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_merge_fields_process_by_name_regex(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_merge_fields_process_by_collapsing(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_merge_fields_setup = { - .verb = "merge-fields", - .pusage_func = mapper_merge_fields_usage, - .pparse_func = mapper_merge_fields_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Computes univariate statistics for each input record, accumulated across\n"); - fprintf(o, "specified fields.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-a {sum,count,...} Names of accumulators. One or more of:\n"); - for (int i = 0; i < stats1_acc_lookup_table_length; i++) { - fprintf(o, " %-9s %s\n", stats1_acc_lookup_table[i].name, stats1_acc_lookup_table[i].desc); - } - fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics. Requires -o.\n"); - fprintf(o, "-r {a,b,c} Regular expressions for value-field names on which to compute\n"); - fprintf(o, " statistics. Requires -o.\n"); - fprintf(o, "-c {a,b,c} Substrings for collapse mode. All fields which have the same names\n"); - fprintf(o, " after removing substrings will be accumulated together. Please see\n"); - fprintf(o, " examples below.\n"); - fprintf(o, "-i Use interpolated percentiles, like R's type=7; default like type=1.\n"); - fprintf(o, " Not sensical for string-valued fields.\n"); - fprintf(o, "-o {name} Output field basename for -f/-r.\n"); - fprintf(o, "-k Keep the input fields which contributed to the output statistics;\n"); - fprintf(o, " the default is to omit them.\n"); - fprintf(o, "-F Computes integerable things (e.g. count) in floating point.\n"); - fprintf(o, "\n"); - fprintf(o, "String-valued data make sense unless arithmetic on them is required,\n"); - fprintf(o, "e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,\n"); - fprintf(o, "numbers are less than strings.\n"); - fprintf(o, "\n"); - fprintf(o, "Example input data: \"a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8\".\n"); - fprintf(o, "Example: %s %s -a sum,count -f a_in_x,a_out_x -o foo\n", argv0, verb); - fprintf(o, " produces \"b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2\" since \"a_in_x,a_out_x\" are\n"); - fprintf(o, " summed over.\n"); - fprintf(o, "Example: %s %s -a sum,count -r in_,out_ -o bar\n", argv0, verb); - fprintf(o, " produces \"bar_sum=15,bar_count=4\" since all four fields are summed over.\n"); - fprintf(o, "Example: %s %s -a sum,count -c in_,out_\n", argv0, verb); - fprintf(o, " produces \"a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1\"\n"); - fprintf(o, " since \"a_in_x\" and \"a_out_x\" both collapse to \"a_x\", \"b_in_y\" collapses to\n"); - fprintf(o, " \"b_y\", and \"b_out_x\" collapses to \"b_x\".\n"); -} - -static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* paccumulator_names = NULL; - slls_t* pvalue_field_names = NULL; - char* output_field_basename = NULL; - int allow_int_float = TRUE; - int do_interpolated_percentiles = FALSE; - int keep_input_fields = FALSE; - merge_by_t do_which = MERGE_UNSPECIFIED; - - char* verb = argv[(*pargi)++]; - - int argi = *pargi; - - while (argi < argc && argv[argi][0] == '-') { - - if (streq(argv[argi], "-a")) { - if (argc - argi < 2) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (paccumulator_names != NULL) - slls_free(paccumulator_names); - paccumulator_names = slls_from_line(argv[argi+1], ',', FALSE); - argi += 2; - - } else if (streq(argv[argi], "-f")) { - if (argc - argi < 2) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (pvalue_field_names != NULL) - slls_free(pvalue_field_names); - pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); - do_which = MERGE_BY_NAME_LIST; - argi += 2; - } else if (streq(argv[argi], "-r")) { - if (argc - argi < 2) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (pvalue_field_names != NULL) - slls_free(pvalue_field_names); - pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); - do_which = MERGE_BY_NAME_REGEX; - argi += 2; - } else if (streq(argv[argi], "-c")) { - if (argc - argi < 2) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (pvalue_field_names != NULL) { - slls_free(pvalue_field_names); - pvalue_field_names = NULL; - } - pvalue_field_names = slls_from_line(argv[argi+1], ',', FALSE); - do_which = MERGE_BY_COLLAPSING; - argi += 2; - - } else if (streq(argv[argi], "-o")) { - if (argc - argi < 2) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - output_field_basename = argv[argi+1]; - argi += 2; - - } else if (streq(argv[argi], "-k")) { - keep_input_fields = TRUE; - argi += 1; - } else if (streq(argv[argi], "-F")) { - allow_int_float = FALSE; - argi += 1; - } else if (streq(argv[argi], "-i")) { - do_interpolated_percentiles = TRUE; - argi += 1; - } else { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - } - - if (paccumulator_names == NULL) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - - if (pvalue_field_names == NULL) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - if (output_field_basename == NULL) { - if (do_which == MERGE_BY_NAME_LIST || do_which == MERGE_BY_NAME_REGEX) { - mapper_merge_fields_usage(stderr, argv[0], verb); - return NULL; - } - } - - *pargi = argi; - return mapper_merge_fields_alloc(paccumulator_names, do_which, - pvalue_field_names, output_field_basename, allow_int_float, do_interpolated_percentiles, - keep_input_fields); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_merge_fields_alloc(slls_t* paccumulator_names, merge_by_t do_which, - slls_t* pvalue_field_names, char* output_field_basename, int allow_int_float, int do_interpolated_percentiles, - int keep_input_fields) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_merge_fields_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_merge_fields_state_t)); - - pstate->paccumulator_names = paccumulator_names; - pstate->pvalue_field_names = pvalue_field_names; - pstate->pvalue_field_regexes = sllv_alloc(); - for (sllse_t* pa = pvalue_field_names->phead; pa != NULL; pa = pa->pnext) { - char* value_field_name = pa->value; - regex_t* pvalue_field_regex = mlr_malloc_or_die(sizeof(regex_t)); - regcomp_or_die(pvalue_field_regex, value_field_name, 0); - sllv_append(pstate->pvalue_field_regexes, pvalue_field_regex); - } - pstate->output_field_basename = output_field_basename; - pstate->allow_int_float = allow_int_float; - pstate->do_interpolated_percentiles = do_interpolated_percentiles; - pstate->keep_input_fields = keep_input_fields; - pstate->psb = sb_alloc(SB_ALLOC_LENGTH); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = (do_which == MERGE_BY_NAME_LIST) ? mapper_merge_fields_process_by_name_list : - (do_which == MERGE_BY_NAME_REGEX) ? mapper_merge_fields_process_by_name_regex : - mapper_merge_fields_process_by_collapsing; - pmapper->pfree_func = mapper_merge_fields_free; - - return pmapper; -} - -static void mapper_merge_fields_free(mapper_t* pmapper, context_t* _) { - mapper_merge_fields_state_t* pstate = pmapper->pvstate; - slls_free(pstate->paccumulator_names); - slls_free(pstate->pvalue_field_names); - for (sllve_t* pa = pstate->pvalue_field_regexes->phead; pa != NULL; pa = pa->pnext) { - regex_t* pvalue_field_regex = pa->pvvalue; - regfree(pvalue_field_regex); - free(pvalue_field_regex); - } - sllv_free(pstate->pvalue_field_regexes); - sb_free(pstate->psb); - free(pstate); - free(pmapper); -} - -// ================================================================ -static sllv_t* mapper_merge_fields_process_by_name_list(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of input stream - return NULL; - - mapper_merge_fields_state_t* pstate = pvstate; - // For percentiles there is one unique accumulator given (for example) five distinct - // names p0,p25,p50,p75,p100. The input accumulators are unique: only one - // percentile-keeper. There are multiple output accumulators: each references the same - // underlying percentile-keeper but with distinct parameters. - lhmsv_t* pinaccs = lhmsv_alloc(); - lhmsv_t* poutaccs = lhmsv_alloc(); - - make_stats1_accs(pstate->output_field_basename, pstate->paccumulator_names, - pstate->allow_int_float, pstate->do_interpolated_percentiles, pinaccs, poutaccs); - - for (sllse_t* pb = pstate->pvalue_field_names->phead; pb != NULL; pb = pb->pnext) { - char* field_name = pb->value; - char* value_field_sval = lrec_get(pinrec, field_name); - if (value_field_sval == NULL) // Key not present - continue; - - if (*value_field_sval == 0) { // Key present with null value - if (!pstate->keep_input_fields) - lrec_remove(pinrec, field_name); - continue; - } - - int have_dval = FALSE; - int have_nval = FALSE; - double value_field_dval = -999.0; - mv_t value_field_nval = mv_absent(); - - for (lhmsve_t* pc = pinaccs->phead; pc != NULL; pc = pc->pnext) { - stats1_acc_t* pacc = pc->pvvalue; - - if (pacc->pdingest_func != NULL) { - if (!have_dval) { - value_field_dval = mlr_double_from_string_or_die(value_field_sval); - have_dval = TRUE; - } - pacc->pdingest_func(pacc->pvstate, value_field_dval); - } - if (pacc->pningest_func != NULL) { - if (!have_nval) { - value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - have_nval = TRUE; - } - pacc->pningest_func(pacc->pvstate, &value_field_nval); - } - if (pacc->psingest_func != NULL) { - pacc->psingest_func(pacc->pvstate, value_field_sval); - } - } - - if (!pstate->keep_input_fields) - lrec_remove(pinrec, field_name); - } - - for (lhmsve_t* pz = poutaccs->phead; pz != NULL; pz = pz->pnext) { - char* acc_name = pz->key; - stats1_acc_t* pacc = pz->pvvalue; - pacc->pemit_func(pacc->pvstate, pstate->output_field_basename, acc_name, TRUE, pinrec); - pacc->pfree_func(pacc); - } - lhmsv_free(pinaccs); - lhmsv_free(poutaccs); - - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_merge_fields_process_by_name_regex(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of input stream - return NULL; - - mapper_merge_fields_state_t* pstate = pvstate; - - // For percentiles there is one unique accumulator given (for example) five distinct - // names p0,p25,p50,p75,p100. The input accumulators are unique: only one - // percentile-keeper. There are multiple output accumulators: each references the same - // underlying percentile-keeper but with distinct parameters. - - lhmsv_t* pinaccs = lhmsv_alloc(); - lhmsv_t* poutaccs = lhmsv_alloc(); - - make_stats1_accs(pstate->output_field_basename, pstate->paccumulator_names, - pstate->allow_int_float, pstate->do_interpolated_percentiles, pinaccs, poutaccs); - - for (lrece_t* pb = pinrec->phead; pb != NULL; /* increment inside loop */ ) { - char* field_name = pb->key; - int matched = FALSE; - for (sllve_t* pc = pstate->pvalue_field_regexes->phead; pc != NULL && !matched; pc = pc->pnext) { - regex_t* pvalue_field_regex = pc->pvvalue; - matched = regmatch_or_die(pvalue_field_regex, field_name, 0, NULL); - if (matched) { - char* value_field_sval = lrec_get(pinrec, field_name); - if (value_field_sval != NULL) { // Key not present - int have_dval = FALSE; - int have_nval = FALSE; - double value_field_dval = -999.0; - mv_t value_field_nval = mv_absent(); - - if (*value_field_sval != 0) { // Key present with null value - for (lhmsve_t* pd = pinaccs->phead; pd != NULL; pd = pd->pnext) { - stats1_acc_t* pacc = pd->pvvalue; - - if (pacc->pdingest_func != NULL) { - if (!have_dval) { - value_field_dval = mlr_double_from_string_or_die(value_field_sval); - have_dval = TRUE; - } - pacc->pdingest_func(pacc->pvstate, value_field_dval); - } - if (pacc->pningest_func != NULL) { - if (!have_nval) { - value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - have_nval = TRUE; - } - pacc->pningest_func(pacc->pvstate, &value_field_nval); - } - if (pacc->psingest_func != NULL) { - pacc->psingest_func(pacc->pvstate, value_field_sval); - } - } - } - - if (!pstate->keep_input_fields) { - // We are modifying the lrec while iterating over it. - lrece_t* pnext = pb->pnext; - lrec_unlink_and_free(pinrec, pb); - pb = pnext; - } else { - pb = pb->pnext; - } - } else { - pb = pb->pnext; - } - } - } - if (!matched) - pb = pb->pnext; - } - - for (lhmsve_t* pz = poutaccs->phead; pz != NULL; pz = pz->pnext) { - char* acc_name = pz->key; - stats1_acc_t* pacc = pz->pvvalue; - pacc->pemit_func(pacc->pvstate, pstate->output_field_basename, acc_name, TRUE, pinrec); - pacc->pfree_func(pacc); - } - lhmsv_free(pinaccs); - lhmsv_free(poutaccs); - - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -// mlr merge -c in_,out_ -a sum -// a_in_x 1 a_sum_x 3 -// a_out_x 2 b_sum_y 4 -// b_in_y 4 b_sum_x 8 -// b_out_x 8 - -static sllv_t* mapper_merge_fields_process_by_collapsing(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of input stream - return NULL; - - mapper_merge_fields_state_t* pstate = pvstate; - - // For percentiles there is one unique accumulator given (for example) five distinct - // names p0,p25,p50,p75,p100. The input accumulators are unique: only one - // percentile-keeper. There are multiple output accumulators: each references the same - // underlying percentile-keeper but with distinct parameters. - - lhmsv_t* short_names_to_in_acc_maps = lhmsv_alloc(); - lhmsv_t* short_names_to_out_acc_maps = lhmsv_alloc(); - - for (lrece_t* pa = pinrec->phead; pa != NULL; /* increment inside loop */ ) { - char* field_name = pa->key; - int matched = FALSE; - for (sllve_t* pb = pstate->pvalue_field_regexes->phead; pb != NULL && !matched; pb = pb->pnext) { - regex_t* pvalue_field_regex = pb->pvvalue; - char* short_name = regex_sub(field_name, pvalue_field_regex, pstate->psb, "", &matched, NULL); - if (matched) { - lhmsv_t* in_acc_map_for_short_name = lhmsv_get(short_names_to_in_acc_maps, short_name); - lhmsv_t* out_acc_map_for_short_name = lhmsv_get(short_names_to_out_acc_maps, short_name); - if (out_acc_map_for_short_name == NULL) { // First such - - in_acc_map_for_short_name = lhmsv_alloc(); - out_acc_map_for_short_name = lhmsv_alloc(); - - make_stats1_accs(short_name, pstate->paccumulator_names, - pstate->allow_int_float, pstate->do_interpolated_percentiles, - in_acc_map_for_short_name, out_acc_map_for_short_name); - - lhmsv_put(short_names_to_in_acc_maps, mlr_strdup_or_die(short_name), in_acc_map_for_short_name, - FREE_ENTRY_KEY); - lhmsv_put(short_names_to_out_acc_maps, mlr_strdup_or_die(short_name), out_acc_map_for_short_name, - FREE_ENTRY_KEY); - - } - - char* value_field_sval = lrec_get(pinrec, field_name); - if (value_field_sval != NULL) { // Key present - - if (*value_field_sval != 0) { // Key present with non-null value - for (lhmsve_t* pd = in_acc_map_for_short_name->phead; pd != NULL; pd = pd->pnext) { - stats1_acc_t* pacc = pd->pvvalue; - - int have_dval = FALSE; - int have_nval = FALSE; - double value_field_dval = -999.0; - mv_t value_field_nval = mv_absent(); - - if (pacc->pdingest_func != NULL) { - if (!have_dval) { - value_field_dval = mlr_double_from_string_or_die(value_field_sval); - have_dval = TRUE; - } - pacc->pdingest_func(pacc->pvstate, value_field_dval); - } - if (pacc->pningest_func != NULL) { - if (!have_nval) { - value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - have_nval = TRUE; - } - pacc->pningest_func(pacc->pvstate, &value_field_nval); - } - if (pacc->psingest_func != NULL) { - pacc->psingest_func(pacc->pvstate, value_field_sval); - } - } - } - - if (!pstate->keep_input_fields) { - // We are modifying the lrec while iterating over it. - lrece_t* pnext = pa->pnext; - lrec_unlink_and_free(pinrec, pa); - pa = pnext; - } else { - pa = pa->pnext; - } - } else { - pa = pa->pnext; - } - free(short_name); - } else { - free(short_name); - } - } - if (!matched) - pa = pa->pnext; - } - - for (lhmsve_t* pe = short_names_to_out_acc_maps->phead; pe != NULL; pe = pe->pnext) { - char* short_name = pe->key; - lhmsv_t* out_acc_map_for_short_name = pe->pvvalue; - for (lhmsve_t* pf = out_acc_map_for_short_name->phead; pf != NULL; pf = pf->pnext) { - char* acc_name = pf->key; - stats1_acc_t* pacc = pf->pvvalue; - pacc->pemit_func(pacc->pvstate, short_name, acc_name, TRUE, pinrec); - } - } - - for (lhmsve_t* pe = short_names_to_out_acc_maps->phead; pe != NULL; pe = pe->pnext) { - lhmsv_t* out_acc_map_for_short_name = pe->pvvalue; - for (lhmsve_t* pf = out_acc_map_for_short_name->phead; pf != NULL; pf = pf->pnext) { - stats1_acc_t* pacc = pf->pvvalue; - pacc->pfree_func(pacc); - } - lhmsv_free(out_acc_map_for_short_name); - } - - for (lhmsve_t* pe = short_names_to_in_acc_maps->phead; pe != NULL; pe = pe->pnext) { - lhmsv_t* in_acc_map_for_short_name = pe->pvvalue; - lhmsv_free(in_acc_map_for_short_name); - } - - lhmsv_free(short_names_to_in_acc_maps); - lhmsv_free(short_names_to_out_acc_maps); - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_most_or_least_frequent.c b/c/mapping/mapper_most_or_least_frequent.c deleted file mode 100644 index bd1c676fe..000000000 --- a/c/mapping/mapper_most_or_least_frequent.c +++ /dev/null @@ -1,237 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_MAX_OUTPUT_LENGTH 10LL -#define DEFAULT_OUTPUT_FIELD_NAME "count" - -typedef struct _mapper_most_or_least_frequent_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - lhmslv_t* pcounts_by_group; - long long max_output_length; - int descending; - int show_counts; - char* output_field_name; -} mapper_most_or_least_frequent_state_t; - -static void mapper_most_frequent_usage(FILE* o, char* argv0, char* verb); -static void mapper_least_frequent_usage(FILE* o, char* argv0, char* verb); - -static mapper_t* mapper_most_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_least_frequent_parse_cli(int* pargi, int argc, char** argv, cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_most_or_least_frequent_parse_cli(int* pargi, int argc, char** argv, int descending); - -static mapper_t* mapper_most_or_least_frequent_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - long long max_output_length, int descending, int show_counts, char* output_field_name); -static void mapper_most_or_least_frequent_free(mapper_t* pmapper, context_t* _); - -static sllv_t* mapper_most_or_least_frequent_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// qsort callbacks -static int descending_vcmp(const void* pva, const void* pvb); -static int ascending_vcmp(const void* pva, const void* pvb); - -typedef struct _sort_pair_t { - slls_t* pgroup_by_field_values; - long long count; // signed, not unsigned, for sort-cmp callback -} sort_pair_t; - -// ---------------------------------------------------------------- -mapper_setup_t mapper_most_frequent_setup = { - .verb = "most-frequent", - .pusage_func = mapper_most_frequent_usage, - .pparse_func = mapper_most_frequent_parse_cli, - .ignores_input = FALSE, -}; - -mapper_setup_t mapper_least_frequent_setup = { - .verb = "least-frequent", - .pusage_func = mapper_least_frequent_usage, - .pparse_func = mapper_least_frequent_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_most_frequent_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Shows the most frequently occurring distinct values for specified field names.\n"); - fprintf(o, "The first entry is the statistical mode; the remaining are runners-up.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-f {one or more comma-separated field names}. Required flag.\n"); - fprintf(o, "-n {count}. Optional flag defaulting to %lld.\n", DEFAULT_MAX_OUTPUT_LENGTH); - fprintf(o, "-b Suppress counts; show only field values.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); - fprintf(o, "See also \"%s %s\".\n", argv0, "least-frequent"); -} - -static void mapper_least_frequent_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Shows the least frequently occurring distinct values for specified field names.\n"); - fprintf(o, "The first entry is the statistical anti-mode; the remaining are runners-up.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-f {one or more comma-separated field names}. Required flag.\n"); - fprintf(o, "-n {count}. Optional flag defaulting to %lld.\n", DEFAULT_MAX_OUTPUT_LENGTH); - fprintf(o, "-b Suppress counts; show only field values.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); - fprintf(o, "See also \"%s %s\".\n", argv0, "most-frequent"); -} - -static mapper_t* mapper_most_frequent_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - return mapper_most_or_least_frequent_parse_cli(pargi, argc, argv, TRUE); -} - -static mapper_t* mapper_least_frequent_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - return mapper_most_or_least_frequent_parse_cli(pargi, argc, argv, FALSE); -} - -static mapper_t* mapper_most_or_least_frequent_parse_cli(int* pargi, int argc, char** argv, int descending) { - slls_t* pgroup_by_field_names = NULL; - long long max_output_length = DEFAULT_MAX_OUTPUT_LENGTH; - int show_counts = TRUE; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pgroup_by_field_names); - ap_define_long_long_flag(pstate, "-n", &max_output_length); - ap_define_false_flag(pstate, "-b", &show_counts); - ap_define_string_flag(pstate, "-o", &output_field_name); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_most_frequent_usage(stderr, argv[0], verb); - return NULL; - } - - if (pgroup_by_field_names == NULL) { - mapper_most_frequent_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_most_or_least_frequent_alloc(pstate, pgroup_by_field_names, max_output_length, descending, - show_counts, output_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_most_or_least_frequent_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - long long max_output_length, int descending, int show_counts, char* output_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_most_or_least_frequent_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_most_or_least_frequent_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->pcounts_by_group = lhmslv_alloc(); - pstate->max_output_length = max_output_length; - pstate->descending = descending; - pstate->show_counts = show_counts; - pstate->output_field_name = output_field_name; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_most_or_least_frequent_process; - pmapper->pfree_func = mapper_most_or_least_frequent_free; - - return pmapper; -} - -static void mapper_most_or_least_frequent_free(mapper_t* pmapper, context_t* _) { - mapper_most_or_least_frequent_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pgroup_by_field_names); - // lhmslv_free will free the keys: we only need to free the void-star values. - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount = pa->pvvalue; - free(pcount); - } - lhmslv_free(pstate->pcounts_by_group); - pstate->pgroup_by_field_names = NULL; - pstate->pcounts_by_group = NULL; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_most_or_least_frequent_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_most_or_least_frequent_state_t* pstate = pvstate; - - if (pinrec != NULL) { // Not end of input record stream - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); - } else { - (*pcount)++; - } - slls_free(pgroup_by_field_values); - } - lrec_free(pinrec); - return NULL; - - } else { // End of input record stream - - // Copy keys and counters from hashmap to array for sorting - int input_length = pstate->pcounts_by_group->num_occupied; - sort_pair_t* sort_pairs = mlr_malloc_or_die(input_length * sizeof(sort_pair_t)); - int i = 0; - for (lhmslve_t* pe = pstate->pcounts_by_group->phead; pe != NULL; pe = pe->pnext) { - sort_pairs[i].pgroup_by_field_values = pe->key; - sort_pairs[i].count = *(long long *)pe->pvvalue; - i++; - } - - // Sort by count - qsort(sort_pairs, input_length, sizeof(sort_pair_t), - pstate->descending ? descending_vcmp : ascending_vcmp); - - // Emit top n - sllv_t* poutrecs = sllv_alloc(); - int output_length = (input_length < pstate->max_output_length) ? input_length : pstate->max_output_length; - for (i = 0; i < output_length; i++) { - lrec_t* poutrec = lrec_unbacked_alloc(); - slls_t* pgroup_by_field_values = sort_pairs[i].pgroup_by_field_values; - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - if (pstate->show_counts) { - lrec_put(poutrec, pstate->output_field_name, - mlr_alloc_string_from_ull(sort_pairs[i].count), FREE_ENTRY_VALUE); - } - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - - free(sort_pairs); - return poutrecs; - } -} - -static int descending_vcmp(const void* pva, const void* pvb) { - const sort_pair_t* pa = pva; - const sort_pair_t* pb = pvb; - return pb->count - pa->count; -} -static int ascending_vcmp(const void* pva, const void* pvb) { - const sort_pair_t* pa = pva; - const sort_pair_t* pb = pvb; - return pa->count - pb->count; -} diff --git a/c/mapping/mapper_nest.c b/c/mapping/mapper_nest.c deleted file mode 100644 index 0bd70c3d3..000000000 --- a/c/mapping/mapper_nest.c +++ /dev/null @@ -1,504 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/string_builder.h" -#include "containers/lhmss.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -// ================================================================ -#define SB_ALLOC_LENGTH 128 - -typedef struct _mapper_nest_state_t { - ap_state_t* pargp; - - char* field_name; - char* nested_fs; - char* nested_ps; - int nested_ps_length; - - lhmslv_t* other_keys_to_other_values_to_buckets; - string_builder_t* psb; - regex_t regex; -} mapper_nest_state_t; - -typedef struct _nest_bucket_t { - lrec_t* prepresentative; - sllv_t* pairs; -} nest_bucket_t; - -static void mapper_nest_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_nest_alloc(ap_state_t* pargp, char* argv0, - char* field_name, char* nested_fs, char* nested_ps, - int do_explode, int do_pairs, int do_across_fields); -static void mapper_nest_free(mapper_t* pmapper, context_t* _); - -static sllv_t* mapper_nest_explode_values_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_nest_explode_values_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_nest_explode_pairs_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_nest_explode_pairs_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_nest_implode_values_across_fields (lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_nest_implode_values_across_records (lrec_t* pinrec, context_t* pctx, void* pvstate); - -static nest_bucket_t* nest_bucket_alloc(lrec_t* prepresentative); -static void nest_bucket_free(nest_bucket_t* pbucket); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_nest_setup = { - .verb = "nest", - .pusage_func = mapper_nest_usage, - .pparse_func = mapper_nest_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_nest_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Explodes specified field values into separate fields/records, or reverses this.\n"); - fprintf(o, "Options:\n"); - fprintf(o, " --explode,--implode One is required.\n"); - fprintf(o, " --values,--pairs One is required.\n"); - fprintf(o, " --across-records,--across-fields One is required.\n"); - fprintf(o, " -f {field name} Required.\n"); - fprintf(o, " --nested-fs {string} Defaults to \";\". Field separator for nested values.\n"); - fprintf(o, " --nested-ps {string} Defaults to \":\". Pair separator for nested key-value pairs.\n"); - fprintf(o, " --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string}\n"); - fprintf(o, " --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string}\n"); - fprintf(o, "Please use \"%s --usage-separator-options\" for information on specifying separators.\n", - argv0); - - fprintf(o, "\n"); - fprintf(o, "Examples:\n"); - - fprintf(o, "\n"); - fprintf(o, " %s %s --explode --values --across-records -f x\n", argv0, verb); - fprintf(o, " with input record \"x=a;b;c,y=d\" produces output records\n"); - fprintf(o, " \"x=a,y=d\"\n"); - fprintf(o, " \"x=b,y=d\"\n"); - fprintf(o, " \"x=c,y=d\"\n"); - fprintf(o, " Use --implode to do the reverse.\n"); - - fprintf(o, "\n"); - fprintf(o, " %s %s --explode --values --across-fields -f x\n", argv0, verb); - fprintf(o, " with input record \"x=a;b;c,y=d\" produces output records\n"); - fprintf(o, " \"x_1=a,x_2=b,x_3=c,y=d\"\n"); - fprintf(o, " Use --implode to do the reverse.\n"); - - fprintf(o, "\n"); - fprintf(o, " %s %s --explode --pairs --across-records -f x\n", argv0, verb); - fprintf(o, " with input record \"x=a:1;b:2;c:3,y=d\" produces output records\n"); - fprintf(o, " \"a=1,y=d\"\n"); - fprintf(o, " \"b=2,y=d\"\n"); - fprintf(o, " \"c=3,y=d\"\n"); - - fprintf(o, "\n"); - fprintf(o, " %s %s --explode --pairs --across-fields -f x\n", argv0, verb); - fprintf(o, " with input record \"x=a:1;b:2;c:3,y=d\" produces output records\n"); - fprintf(o, " \"a=1,b=2,c=3,y=d\"\n"); - - fprintf(o, "\n"); - fprintf(o, "Notes:\n"); - fprintf(o, "* With --pairs, --implode doesn't make sense since the original field name has\n"); - fprintf(o, " been lost.\n"); - fprintf(o, "* The combination \"--implode --values --across-records\" is non-streaming:\n"); - fprintf(o, " no output records are produced until all input records have been read. In\n"); - fprintf(o, " particular, this means it won't work in tail -f contexts. But all other flag\n"); - fprintf(o, " combinations result in streaming (tail -f friendly) data processing.\n"); - fprintf(o, "* It's up to you to ensure that the nested-fs is distinct from your data's IFS:\n"); - fprintf(o, " e.g. by default the former is semicolon and the latter is comma.\n"); - fprintf(o, "See also %s reshape.\n", argv0); -} - -static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* field_name = NULL; - char* nested_fs = ";"; - char* nested_ps = ":"; - char* vfs = NULL; - char* ivfs = NULL; - int do_explode = NEITHER_TRUE_NOR_FALSE; - int do_pairs = NEITHER_TRUE_NOR_FALSE; - int do_across_fields = NEITHER_TRUE_NOR_FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_flag(pstate, "-f", &field_name); - ap_define_string_flag(pstate, "--nested-fs", &nested_fs); - ap_define_string_flag(pstate, "--nested-ps", &nested_ps); - ap_define_true_flag(pstate, "--explode", &do_explode); - ap_define_false_flag(pstate, "--implode", &do_explode); - ap_define_true_flag(pstate, "--pairs", &do_pairs); - ap_define_false_flag(pstate, "--values", &do_pairs); - ap_define_true_flag(pstate, "--across-fields", &do_across_fields); - ap_define_false_flag(pstate, "--across-records", &do_across_fields); - ap_define_string_flag(pstate, "--evar", &vfs); - ap_define_string_flag(pstate, "--ivar", &ivfs); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - - if (vfs != NULL) { - do_explode = TRUE; - do_pairs = FALSE; - do_across_fields = FALSE; - nested_fs = vfs; - } - - if (ivfs != NULL) { - do_explode = FALSE; - do_pairs = FALSE; - do_across_fields = FALSE; - nested_fs = ivfs; - } - - if (field_name == NULL) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - if (do_explode == NEITHER_TRUE_NOR_FALSE) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - if (do_pairs == NEITHER_TRUE_NOR_FALSE) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - if (do_across_fields == NEITHER_TRUE_NOR_FALSE) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - if (do_pairs == TRUE && do_explode == FALSE) { - mapper_nest_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_nest_alloc(pstate, argv[0], field_name, nested_fs, nested_ps, do_explode, do_pairs, do_across_fields); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_nest_alloc(ap_state_t* pargp, char* argv0, - char* field_name, char* nested_fs, char* nested_ps, - int do_explode, int do_pairs, int do_across_fields) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_nest_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_nest_state_t)); - - pstate->pargp = pargp; - pstate->field_name = field_name; - pstate->nested_fs = cli_sep_from_arg(nested_fs); - pstate->nested_ps = cli_sep_from_arg(nested_ps); - pstate->nested_ps_length = strlen(pstate->nested_ps); - - if (do_explode) { - if (do_pairs) { - pmapper->pprocess_func = do_across_fields - ? mapper_nest_explode_pairs_across_fields - : mapper_nest_explode_pairs_across_records; - } else { - pmapper->pprocess_func = do_across_fields - ? mapper_nest_explode_values_across_fields - : mapper_nest_explode_values_across_records; - } - } else { - if (do_pairs) { - // Should have been caught in CLI-parser. - MLR_INTERNAL_CODING_ERROR(); - } else { - pmapper->pprocess_func = do_across_fields - ? mapper_nest_implode_values_across_fields - : mapper_nest_implode_values_across_records; - } - } - pstate->other_keys_to_other_values_to_buckets = lhmslv_alloc(); - pstate->psb = sb_alloc(SB_ALLOC_LENGTH); - char* pattern = mlr_malloc_or_die(strlen(field_name) + 12); - sprintf(pattern, "^%s_[0-9]+$", field_name); - regcomp_or_die(&pstate->regex, pattern, REG_NOSUB); - free(pattern); - - pmapper->pfree_func = mapper_nest_free; - - pmapper->pvstate = (void*)pstate; - return pmapper; -} - -static void mapper_nest_free(mapper_t* pmapper, context_t* _) { - mapper_nest_state_t* pstate = pmapper->pvstate; - - if (pstate->other_keys_to_other_values_to_buckets != NULL) { - for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { - lhmslv_t* other_values_to_buckets = pe->pvvalue; - for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { - nest_bucket_t* pbucket = pf->pvvalue; - nest_bucket_free(pbucket); - } - lhmslv_free(other_values_to_buckets); - } - lhmslv_free(pstate->other_keys_to_other_values_to_buckets); - } - - sb_free(pstate->psb); - free(pstate->nested_fs); - free(pstate->nested_ps); - regfree(&pstate->regex); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ================================================================ -static sllv_t* mapper_nest_explode_values_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - lrece_t* pentry = NULL; - char* field_value = lrec_get_ext(pinrec, pstate->field_name, &pentry); - if (field_value == NULL) { - return sllv_single(pinrec); - } - lrece_t* porig = pentry; - - char* sep = pstate->nested_fs; - int seplen = strlen(sep); - int i = 1; - char* walker = field_value; - char* piece = NULL; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - char istring_free_flags; - char* istring = low_int_to_string(i, &istring_free_flags); - char* new_key = mlr_paste_3_strings(pstate->field_name, "_", istring); - if (istring_free_flags & FREE_ENTRY_KEY) - free(istring); - pentry = lrec_put_after(pinrec, pentry, new_key, mlr_strdup_or_die(piece), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - i++; - } - lrec_unlink_and_free(pinrec, porig); - return sllv_single(pinrec);; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nest_explode_values_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - char* field_value = lrec_get(pinrec, pstate->field_name); - if (field_value == NULL) { - return sllv_single(pinrec); - } - - sllv_t* poutrecs = sllv_alloc(); - char* sep = pstate->nested_fs; - int seplen = strlen(sep); - char* walker = field_value; - char* piece = NULL; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - lrec_t* poutrec = lrec_copy(pinrec); - lrec_put(poutrec, pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - lrec_free(pinrec); - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nest_explode_pairs_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - lrece_t* pentry = NULL; - char* field_value = lrec_get_ext(pinrec, pstate->field_name, &pentry); - if (field_value == NULL) { - return sllv_single(pinrec); - } - lrece_t* porig = pentry; - - char* sep = pstate->nested_fs; - int seplen = strlen(sep); - char* walker = field_value; - char* piece = NULL; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - char* found_sep = strstr(piece, pstate->nested_ps); - if (found_sep != NULL) { // there is a pair - *found_sep = 0; - pentry = lrec_put_after(pinrec, pentry, - mlr_strdup_or_die(piece), mlr_strdup_or_die(found_sep + pstate->nested_ps_length), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } else { // there is not a pair - pentry = lrec_put_after(pinrec, pentry, - pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); - } - } - lrec_unlink_and_free(pinrec, porig); - - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nest_explode_pairs_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - char* field_value = lrec_get(pinrec, pstate->field_name); - if (field_value == NULL) { - return sllv_single(pinrec); - } - - sllv_t* poutrecs = sllv_alloc(); - char* sep = pstate->nested_fs; - int seplen = strlen(sep); - char* walker = field_value; - char* piece = NULL; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - char* found_sep = strstr(piece, pstate->nested_ps); - lrec_t* poutrec = lrec_copy(pinrec); - lrece_t* pe = NULL; - (void)lrec_get_ext(poutrec, pstate->field_name, &pe); - // Put the new field where the old one was -- unless there's already a field with the new - // name in which case replace its value. - if (found_sep != NULL) { // there is a pair - *found_sep = 0; - lrec_put_after(poutrec, pe, mlr_strdup_or_die(piece), - mlr_strdup_or_die(found_sep + pstate->nested_ps_length), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } else { // there is not a pair - lrec_put_after(poutrec, pe, pstate->field_name, mlr_strdup_or_die(piece), FREE_ENTRY_VALUE); - } - lrec_unlink_and_free(poutrec, pe); - sllv_append(poutrecs, poutrec); - } - - lrec_free(pinrec); - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nest_implode_values_across_fields(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - if (pinrec == NULL) // end of input stream - return sllv_single(NULL); - - lrece_t* pprev = NULL; - int field_count = 0; - for (lrece_t* pe = pinrec->phead; pe != NULL; /* increment in loop */) { - if (regmatch_or_die(&pstate->regex, pe->key, 0, NULL)) { - if (field_count > 0) - sb_append_string(pstate->psb, pstate->nested_fs); - sb_append_string(pstate->psb, pe->value); - field_count++; - - // Keep the location so we can implode in-place. - if (pprev == NULL) - pprev = pe->pprev; - lrece_t* pnext = pe->pnext; - lrec_unlink_and_free(pinrec, pe); - pe = pnext; - - } else { - pe = pe->pnext; - } - } - - if (field_count > 0) { - if (pprev == NULL) // No record before the unlinked one, i.e. list-head. - lrec_prepend(pinrec, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); - else - lrec_put_after(pinrec, pprev, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); - } - - return sllv_single(pinrec); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nest_implode_values_across_records(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_nest_state_t* pstate = (mapper_nest_state_t*)pvstate; - - if (pinrec != NULL) { // Not end of input stream - lrece_t* px = NULL; - char* field_value = lrec_get_ext(pinrec, pstate->field_name, &px); - if (field_value == NULL) - return sllv_single(pinrec); - char* field_value_copy = mlr_strdup_or_die(field_value); - - // Don't lrec_remove pstate->field_name so we can implode in-place at the end. - slls_t* other_keys = mlr_reference_keys_from_record_except(pinrec, px); - lhmslv_t* other_values_to_buckets = lhmslv_get(pstate->other_keys_to_other_values_to_buckets, other_keys); - if (other_values_to_buckets == NULL) { - other_values_to_buckets = lhmslv_alloc(); - lhmslv_put(pstate->other_keys_to_other_values_to_buckets, - slls_copy(other_keys), other_values_to_buckets, FREE_ENTRY_KEY); - } - - slls_t* other_values = mlr_reference_values_from_record_except(pinrec, px); - nest_bucket_t* pbucket = lhmslv_get(other_values_to_buckets, other_values); - if (pbucket == NULL) { - pbucket = nest_bucket_alloc(pinrec); - lhmslv_put(other_values_to_buckets, slls_copy(other_values), pbucket, FREE_ENTRY_KEY); - } else { - lrec_free(pinrec); - } - lrec_t* pair = lrec_unbacked_alloc(); - lrec_put(pair, pstate->field_name, field_value_copy, FREE_ENTRY_VALUE); - sllv_append(pbucket->pairs, pair); - - slls_free(other_values); - slls_free(other_keys); - - return NULL; - - } else { // end of input stream - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { - lhmslv_t* other_values_to_buckets = pe->pvvalue; - for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { - nest_bucket_t* pbucket = pf->pvvalue; - lrec_t* poutrec = pbucket->prepresentative; - pbucket->prepresentative = NULL; // ownership transfer - for (sllve_t* pg = pbucket->pairs->phead; pg != NULL; pg = pg->pnext) { - lrec_t* pr = pg->pvvalue; - sb_append_string(pstate->psb, pr->phead->value); - if (pg->pnext != NULL) - sb_append_string(pstate->psb, pstate->nested_fs); - } - // pstate->field_name was already present so we'll overwrite it in-place here. - lrec_put(poutrec, pstate->field_name, sb_finish(pstate->psb), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - } - - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -// ---------------------------------------------------------------- -static nest_bucket_t* nest_bucket_alloc(lrec_t* prepresentative) { - nest_bucket_t* pbucket = mlr_malloc_or_die(sizeof(nest_bucket_t)); - pbucket->prepresentative = prepresentative; - pbucket->pairs = sllv_alloc(); - return pbucket; -} -static void nest_bucket_free(nest_bucket_t* pbucket) { - lrec_free(pbucket->prepresentative); - for (sllve_t* pe = pbucket->pairs->phead; pe != NULL; pe = pe->pnext) { - lrec_t* pair = pe->pvvalue; - lrec_free(pair); - } - sllv_free(pbucket->pairs); - free(pbucket); -} diff --git a/c/mapping/mapper_nothing.c b/c/mapping/mapper_nothing.c deleted file mode 100644 index cc3b0d3c8..000000000 --- a/c/mapping/mapper_nothing.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "cli/argparse.h" -#include "mapping/mappers.h" -#include "lib/mlrutil.h" -#include "containers/sllv.h" - -static void mapper_nothing_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_nothing_alloc(); -static void mapper_nothing_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_nothing_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_nothing_setup = { - .verb = "nothing", - .pusage_func = mapper_nothing_usage, - .pparse_func = mapper_nothing_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_nothing_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - *pargi += 1; - mapper_t* pmapper = mapper_nothing_alloc(); - return pmapper; -} - -static void mapper_nothing_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Drops all input records. Useful for testing, or after tee/print/etc. have\n"); - fprintf(o, "produced other output.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_nothing_alloc(ap_state_t* pargp, int do_counters, char* counter_field_name) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - pmapper->pvstate = NULL; - pmapper->pprocess_func = mapper_nothing_process; - pmapper->pfree_func = mapper_nothing_free; - return pmapper; -} -static void mapper_nothing_free(mapper_t* pmapper, context_t* _) { - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_nothing_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - lrec_free(pinrec); - return NULL; - } else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_put_or_filter.c b/c/mapping/mapper_put_or_filter.c deleted file mode 100644 index dcd3a6fdb..000000000 --- a/c/mapping/mapper_put_or_filter.c +++ /dev/null @@ -1,722 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/string_builder.h" -#include "cli/mlrcli.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "containers/lhmss.h" -#include "containers/lhmsv.h" -#include "containers/mlhmmv.h" -#include "parsing/mlr_dsl_wrapper.h" -#include "dsl/rval_evaluators.h" -#include "dsl/mlr_dsl_cst.h" -#include "mapping/mappers.h" - -#define DEFAULT_OOSVAR_FLATTEN_SEPARATOR ":" - -// ---------------------------------------------------------------- -typedef struct _mapper_put_or_filter_state_t { - char* mlr_dsl_expression; - lhmss_t* ppredefines; - - mlr_dsl_ast_t* past; - mlr_dsl_cst_t* pcst; - - int at_begin; - mlhmmv_root_t* poosvars; - - int trace_execution; - char* oosvar_flatten_separator; - int flush_every_record; - cli_writer_opts_t* pwriter_opts; - - local_stack_t* plocal_stack; - loop_stack_t* ploop_stack; - - int put_output_disabled; // mlr put -q - int do_final_filter; // mlr filter - int negate_final_filter; // mlr filter -x -} mapper_put_or_filter_state_t; - -typedef struct _expression_info_t { - char* filename; - char* expression; -} expression_info_t; - -// ---------------------------------------------------------------- -static void mapper_put_or_filter_usage(FILE* o, char* argv0, char* verb); -static void mapper_put_usage(FILE* o, char* argv0, char* verb); -static void mapper_filter_usage(FILE* o, char* argv0, char* verb); -static void shared_usage(FILE* o, char* argv0, char* verb); - -static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); - -static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); - -static mapper_t* shared_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); - -static mapper_t* mapper_put_or_filter_alloc( - char* mlr_dsl_expression, - lhmss_t* ppredefines, - int print_ast, - int trace_stack_allocation, - int trace_execution, - mlr_dsl_ast_t* past, - int put_output_disabled, // mlr put -q - int do_final_filter, // mlr filter - int negate_final_filter, // mlr filter -x - int type_inferencing, - char* oosvar_flatten_separator, - int flush_every_record, - cli_writer_opts_t* pwriter_opts, - cli_writer_opts_t* pmain_writer_opts); - -static void mapper_put_or_filter_free(mapper_t* pmapper, context_t* pctx); - -static sllv_t* mapper_put_or_filter_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_put_setup = { - .verb = "put", - .pusage_func = mapper_put_usage, - .pparse_func = mapper_put_parse_cli, - .ignores_input = FALSE, -}; - -mapper_setup_t mapper_filter_setup = { - .verb = "filter", - .pusage_func = mapper_filter_usage, - .pparse_func = mapper_filter_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_put_or_filter_usage(FILE* o, char* argv0, char* verb) { - if (streq(verb, "filter")) { - mapper_filter_usage(o, argv0, verb); - } else if (streq(verb, "put")) { - mapper_put_usage(o, argv0, verb); - } else { - fprintf(stderr, "%s: internal coding error detected at file %s line %d.\n", - MLR_GLOBALS.bargv0, __FILE__, __LINE__); - exit(1); - } -} - -// ---------------------------------------------------------------- -static void mapper_put_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {expression}\n", argv0, verb); - fprintf(o, "Adds/updates specified field(s). Expressions are semicolon-separated and must\n"); - fprintf(o, "either be assignments, or evaluate to boolean. Booleans with following\n"); - fprintf(o, "statements in curly braces control whether those statements are executed;\n"); - fprintf(o, "booleans without following curly braces do nothing except side effects (e.g.\n"); - fprintf(o, "regex-captures into \\1, \\2, etc.).\n"); - fprintf(o, "\n"); - - shared_usage(o, argv0, verb); - - fprintf(o, "\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " %s %s '$y = log10($x); $z = sqrt($y)'\n", argv0, verb); - fprintf(o, " %s %s '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0\n", argv0, verb); - fprintf(o, " %s %s '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements\n", argv0, verb); - fprintf(o, " %s %s '$a =~ \"([a-z]+)_([0-9]+); $b = \"left_\\1\"; $c = \"right_\\2\"'\n", argv0, verb); - fprintf(o, " %s %s '$a =~ \"([a-z]+)_([0-9]+) { $b = \"left_\\1\"; $c = \"right_\\2\" }'\n", argv0, verb); - fprintf(o, " %s %s '$filename = FILENAME'\n", argv0, verb); - fprintf(o, " %s %s '$colored_shape = $color . \"_\" . $shape'\n", argv0, verb); - fprintf(o, " %s %s '$y = cos($theta); $z = atan2($y, $x)'\n", argv0, verb); - fprintf(o, " %s %s '$name = sub($name, \"http.*com\"i, \"\")'\n", argv0, verb); - fprintf(o, " %s %s -q '@sum += $x; end {emit @sum}'\n", argv0, verb); - fprintf(o, " %s %s -q '@sum[$a] += $x; end {emit @sum, \"a\"}'\n", argv0, verb); - fprintf(o, " %s %s -q '@sum[$a][$b] += $x; end {emit @sum, \"a\", \"b\"}'\n", argv0, verb); - fprintf(o, " %s %s -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}'\n", argv0, verb); - fprintf(o, " %s %s -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}'\n", argv0, verb); - fprintf(o, " %s %s '\n", argv0, verb); - fprintf(o, " $x = 1;\n"); - fprintf(o, " #$y = 2;\n"); - fprintf(o, " $z = 3\n"); - fprintf(o, " '\n"); - fprintf(o, "\n"); - fprintf(o, "Please see also '%s -k' for examples using redirected output.\n", argv0); - fprintf(o, "\n"); - fprintf(o, "Please see https://miller.readthedocs.io/en/latest/reference.html for more information\n"); - fprintf(o, "including function list. Or \"%s -f\".\n", argv0); - fprintf(o, "Please see in particular:\n"); - fprintf(o, " http://www.johnkerl.org/miller/doc/reference-verbs.html#put\n"); -} - -// ---------------------------------------------------------------- -static void mapper_filter_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {expression}\n", argv0, verb); - fprintf(o, "Prints records for which {expression} evaluates to true.\n"); - fprintf(o, "If there are multiple semicolon-delimited expressions, all of them are\n"); - fprintf(o, "evaluated and the last one is used as the filter criterion.\n"); - fprintf(o, "\n"); - - shared_usage(o, argv0, verb); - - fprintf(o, "\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " %s %s 'log10($count) > 4.0'\n", argv0, verb); - fprintf(o, " %s %s 'FNR == 2' (second record in each file)\n", argv0, verb); - fprintf(o, " %s %s 'urand() < 0.001' (subsampling)\n", argv0, verb); - fprintf(o, " %s %s '$color != \"blue\" && $value > 4.2'\n", argv0, verb); - fprintf(o, " %s %s '($x<.5 && $y<.5) || ($x>.5 && $y>.5)'\n", argv0, verb); - fprintf(o, " %s %s '($name =~ \"^sys.*east$\") || ($name =~ \"^dev.[0-9]+\"i)'\n", argv0, verb); - fprintf(o, " %s %s '$ab = $a+$b; $cd = $c+$d; $ab != $cd'\n", argv0, verb); - fprintf(o, " %s %s '\n", argv0, verb); - fprintf(o, " NR == 1 ||\n"); - fprintf(o, " #NR == 2 ||\n"); - fprintf(o, " NR == 3\n"); - fprintf(o, " '\n"); - fprintf(o, "\n"); - fprintf(o, "Please see https://miller.readthedocs.io/en/latest/reference.html for more information\n"); - fprintf(o, "including function list. Or \"%s -f\". Please also see \"%s grep\" which is\n", argv0, argv0); - fprintf(o, "useful when you don't yet know which field name(s) you're looking for.\n"); - fprintf(o, "Please see in particular:\n"); - fprintf(o, " http://www.johnkerl.org/miller/doc/reference-verbs.html#filter\n"); -} - -static void shared_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Conversion options:\n"); - fprintf(o, "-S: Keeps field values as strings with no type inference to int or float.\n"); - fprintf(o, "-F: Keeps field values as strings or floats with no inference to int.\n"); - fprintf(o, "All field values are type-inferred to int/float/string unless this behavior is\n"); - fprintf(o, "suppressed with -S or -F.\n"); - fprintf(o, "\n"); - - fprintf(o, "Output/formatting options:\n"); - fprintf(o, "--oflatsep {string}: Separator to use when flattening multi-level @-variables\n"); - fprintf(o, " to output records for emit. Default \"%s\".\n", DEFAULT_OOSVAR_FLATTEN_SEPARATOR); - fprintf(o, "--jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string.\n"); - fprintf(o, "--jvquoteall: For dump output (JSON-formatted), quote map values even if non-string.\n"); - fprintf(o, "Any of the output-format command-line flags (see %s -h). Example: using\n", - MLR_GLOBALS.bargv0); - fprintf(o, " %s --icsv --opprint ... then put --ojson 'tee > \"mytap-\".$a.\".dat\", $*' then ...\n", - MLR_GLOBALS.bargv0); - fprintf(o, "the input is CSV, the output is pretty-print tabular, but the tee-file output\n"); - fprintf(o, "is written in JSON format.\n"); - fprintf(o, "--no-fflush: for emit, tee, print, and dump, don't call fflush() after every\n"); - fprintf(o, " record.\n"); - fprintf(o, "\n"); - - fprintf(o, "Expression-specification options:\n"); - fprintf(o, "-f {filename}: the DSL expression is taken from the specified file rather\n"); - fprintf(o, " than from the command line. Outer single quotes wrapping the expression\n"); - fprintf(o, " should not be placed in the file. If -f is specified more than once,\n"); - fprintf(o, " all input files specified using -f are concatenated to produce the expression.\n"); - fprintf(o, " (For example, you can define functions in one file and call them from another.)\n"); - fprintf(o, "-e {expression}: You can use this after -f to add an expression. Example use\n"); - fprintf(o, " case: define functions/subroutines in a file you specify with -f, then call\n"); - fprintf(o, " them with an expression you specify with -e.\n"); - fprintf(o, "(If you mix -e and -f then the expressions are evaluated in the order encountered.\n"); - fprintf(o, "Since the expression pieces are simply concatenated, please be sure to use intervening\n"); - fprintf(o, "semicolons to separate expressions.)\n"); - fprintf(o, "\n"); - fprintf(o, "-s name=value: Predefines out-of-stream variable @name to have value \"value\".\n"); - fprintf(o, " Thus %s %s put -s foo=97 '$column += @foo' is like\n", argv0, verb); - fprintf(o, " %s %s put 'begin {@foo = 97} $column += @foo'.\n", argv0, verb); - fprintf(o, " The value part is subject to type-inferencing as specified by -S/-F.\n"); - fprintf(o, " May be specified more than once, e.g. -s name1=value1 -s name2=value2.\n"); - fprintf(o, " Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE\n"); - fprintf(o, "\n"); - - fprintf(o, "Tracing options:\n"); - fprintf(o, "-v: Prints the expressions's AST (abstract syntax tree), which gives\n"); - fprintf(o, " full transparency on the precedence and associativity rules of\n"); - fprintf(o, " Miller's grammar, to stdout.\n"); - fprintf(o, "-a: Prints a low-level stack-allocation trace to stdout.\n"); - fprintf(o, "-t: Prints a low-level parser trace to stderr.\n"); - fprintf(o, "-T: Prints a every statement to stderr as it is executed.\n"); - fprintf(o, "\n"); - - fprintf(o, "Other options:\n"); - if (streq(verb, "put")) { - fprintf(o, "-q: Does not include the modified record in the output stream. Useful for when\n"); - fprintf(o, " all desired output is in begin and/or end blocks.\n"); - } - if (streq(verb, "filter")) { - fprintf(o, "-x: Prints records for which {expression} evaluates to false.\n"); - } - fprintf(o, "\n"); - - fprintf(o, "Please use a dollar sign for field names and double-quotes for string\n"); - fprintf(o, "literals. If field names have special characters such as \".\" then you might\n"); - fprintf(o, "use braces, e.g. '${field.name}'. Miller built-in variables are\n"); - fprintf(o, "NF NR FNR FILENUM FILENAME M_PI M_E, and ENV[\"namegoeshere\"] to access environment\n"); - fprintf(o, "variables. The environment-variable name may be an expression, e.g. a field\n"); - fprintf(o, "value.\n"); - fprintf(o, "\n"); - fprintf(o, "Use # to comment to end of line.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) -{ - return shared_parse_cli(pargi, argc, argv, _, pmain_writer_opts); -} - -static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) -{ - return shared_parse_cli(pargi, argc, argv, _, pmain_writer_opts); -} - -static mapper_t* shared_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) -{ - sllv_t* expression_infos = sllv_alloc(); - char* mlr_dsl_expression = NULL; - int put_output_disabled = FALSE; - int do_final_filter = FALSE; - int negate_final_filter = FALSE; - int type_inferencing = TYPE_INFER_STRING_FLOAT_INT; - int print_ast = FALSE; - int trace_stack_allocation = FALSE; - int trace_parse = FALSE; - int trace_execution = FALSE; - char* oosvar_flatten_separator = DEFAULT_OOSVAR_FLATTEN_SEPARATOR; - int flush_every_record = TRUE; - lhmss_t* ppredefines = lhmss_alloc(); - - cli_writer_opts_t* pwriter_opts = mlr_malloc_or_die(sizeof(cli_writer_opts_t)); - cli_writer_opts_init(pwriter_opts); - - int argi = *pargi; - if ((argc - argi) < 1) { - mapper_put_or_filter_usage(stderr, argv[0], argv[argi]); - return NULL; - } - char* verb = argv[argi++]; - - if (streq(verb, "filter")) - do_final_filter = TRUE; - - cli_writer_opts_init(pwriter_opts); - for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { - - if (argv[argi][0] != '-') { - break; // No more flag options to process - - } else if (cli_handle_writer_options(argv, argc, &argi, pwriter_opts)) { - // handled - - } else if (streq(argv[argi], "-f")) { - if ((argc - argi) < 2) { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - expression_info_t* pexpression_info = mlr_malloc_or_die(sizeof(expression_info_t)); - pexpression_info->filename = argv[argi+1]; - pexpression_info->expression = NULL; - sllv_append(expression_infos, pexpression_info); - argi += 2; - - } else if (streq(argv[argi], "-e")) { - if ((argc - argi) < 2) { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - expression_info_t* pexpression_info = mlr_malloc_or_die(sizeof(expression_info_t)); - pexpression_info->filename = NULL; - pexpression_info->expression = argv[argi+1]; - sllv_append(expression_infos, pexpression_info); - argi += 2; - - } else if (streq(argv[argi], "-v")) { - print_ast = TRUE; - argi += 1; - } else if (streq(argv[argi], "-a")) { - trace_stack_allocation = TRUE; - argi += 1; - } else if (streq(argv[argi], "-t")) { - trace_parse = TRUE; - argi += 1; - } else if (streq(argv[argi], "-T")) { - trace_execution = TRUE; - argi += 1; - } else if (streq(argv[argi], "-q") && streq(verb, "put")) { - - put_output_disabled = TRUE; - argi += 1; - } else if (streq(argv[argi], "-x") && streq(verb, "filter")) { - negate_final_filter = TRUE; - argi += 1; - - } else if (streq(argv[argi], "-S")) { - type_inferencing = TYPE_INFER_STRING_ONLY; - argi += 1; - } else if (streq(argv[argi], "-F")) { - type_inferencing = TYPE_INFER_STRING_FLOAT; - argi += 1; - - } else if (streq(argv[argi], "-s")) { - if ((argc - argi) < 2) { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - char* pair = argv[argi+1]; - char* pequal = strchr(pair, '='); - if (pequal == NULL) { - fprintf(stderr, "%s %s: -s requires '=' between name and value.\n", - MLR_GLOBALS.bargv0, verb); - fprintf(stderr, "Got \"%s\"\n", pair); - return NULL; - } - *pequal = 0; - if (*pair == 0) { - fprintf(stderr, "%s %s: -s requires non-empty name.\n", - MLR_GLOBALS.bargv0, verb); - return NULL; - } - - lhmss_put(ppredefines, - mlr_strdup_or_die(pair), - mlr_strdup_or_die(pequal+1), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - - argi += 2; - - } else if (streq(argv[argi], "--oflatsep")) { - if ((argc - argi) < 2) { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - oosvar_flatten_separator = argv[argi+1]; - argi += 2; - } else if (streq(argv[argi], "--no-fflush") || streq(argv[argi], "--no-flush")) { - flush_every_record = FALSE; - argi += 1; - - } else { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - } - - if (expression_infos->length == 0) { - if ((argc - argi) < 1) { - mapper_put_or_filter_usage(stderr, argv[0], verb); - return NULL; - } - mlr_dsl_expression = mlr_strdup_or_die(argv[argi++]); - } else { - string_builder_t *psb = sb_alloc(1024); - - for (sllve_t* pe = expression_infos->phead; pe != NULL; pe = pe->pnext) { - expression_info_t* pexpression_info = pe->pvvalue; - if (pexpression_info->filename != NULL) { - char* mlr_dsl_expression_piece = read_file_into_memory(pexpression_info->filename, NULL); - sb_append_string(psb, mlr_dsl_expression_piece); - free(mlr_dsl_expression_piece); - } else { - sb_append_string(psb, pexpression_info->expression); - } - free(pexpression_info); - } - - mlr_dsl_expression = sb_finish(psb); - sb_free(psb); - } - sllv_free(expression_infos); - - // On Linux, '$x=4' is correct; single-quotes inhibit shell-variable expansion which is desired - // since Miller variables also start with $. In either case, the shell removes the outermost - // quotes before passing the string to us. On Windows, though, double-quotes are the right - // thing and are removed for us, while single-quotes are passed through to us. - if (mlr_dsl_expression[0] == '\'') { - int len = strlen(mlr_dsl_expression); - if (len >= 2 && mlr_dsl_expression[len-1] == '\'') { - mlr_dsl_expression[0] = ' '; - mlr_dsl_expression[len-1] = 0; - } - } - - mlr_dsl_ast_t* past = mlr_dsl_parse(mlr_dsl_expression, trace_parse); - if (past == NULL) { - fprintf(stderr, "%s %s: syntax error on DSL parse of '%s'\n", - MLR_GLOBALS.bargv0, verb, mlr_dsl_expression); - return NULL; - } - - // For just dev-testing the parser, you can do - // mlr put -v 'expression goes here' /dev/null - if (print_ast) { - printf("RAW AST:\n"); - printf("\n"); - mlr_dsl_ast_print(past); - } - - *pargi = argi; - return mapper_put_or_filter_alloc(mlr_dsl_expression, ppredefines, print_ast, - trace_stack_allocation, trace_execution, - past, put_output_disabled, do_final_filter, negate_final_filter, type_inferencing, - oosvar_flatten_separator, flush_every_record, pwriter_opts, pmain_writer_opts); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_put_or_filter_alloc( - char* mlr_dsl_expression, - lhmss_t* ppredefines, - int print_ast, - int trace_stack_allocation, - int trace_execution, - mlr_dsl_ast_t* past, - int put_output_disabled, // mlr put -q - int do_final_filter, // mlr filter - int negate_final_filter, // mlr filter -x - int type_inferencing, - char* oosvar_flatten_separator, - int flush_every_record, - cli_writer_opts_t* pwriter_opts, - cli_writer_opts_t* pmain_writer_opts) -{ - mapper_put_or_filter_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_put_or_filter_state_t)); - // Retain the string contents along with any in-pointers from the AST/CST - pstate->mlr_dsl_expression = mlr_dsl_expression; - pstate->ppredefines = ppredefines; - pstate->past = past; - pstate->pcst = mlr_dsl_cst_alloc(past, print_ast, trace_stack_allocation, - type_inferencing, flush_every_record, do_final_filter, negate_final_filter); - pstate->at_begin = TRUE; - pstate->put_output_disabled = put_output_disabled; - pstate->poosvars = mlhmmv_root_alloc(); - pstate->trace_execution = trace_execution; - pstate->oosvar_flatten_separator = oosvar_flatten_separator; - pstate->flush_every_record = flush_every_record; - pstate->plocal_stack = local_stack_alloc(); - pstate->ploop_stack = loop_stack_alloc(); - pstate->pwriter_opts = pwriter_opts; - - cli_merge_writer_opts(pstate->pwriter_opts, pmain_writer_opts); - - // Set predefines, e.g '-s foo=bar' is like 'begin {@foo = "bar"}'. - for (lhmsse_t* pe = pstate->ppredefines->phead; pe != NULL; pe = pe->pnext) { - mv_t mvkey = mv_from_string_no_free(pe->key); - mv_t mvvalue; - switch (type_inferencing) { - case TYPE_INFER_STRING_ONLY: - mvvalue = mv_ref_type_infer_string(pe->value); - break; - case TYPE_INFER_STRING_FLOAT: - mvvalue = mv_ref_type_infer_string_or_float(pe->value); - break; - case TYPE_INFER_STRING_FLOAT_INT: - mvvalue = mv_ref_type_infer_string_or_float_or_int(pe->value); - break; - default: - MLR_INTERNAL_CODING_ERROR(); - break; - } - sllmv_t* pmvkeys = sllmv_single_no_free(&mvkey); - mlhmmv_root_put_terminal(pstate->poosvars, pmvkeys, &mvvalue); - sllmv_free(pmvkeys); - } - - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - pmapper->pvstate = (void*)pstate; - pmapper->pprocess_func = mapper_put_or_filter_process; - pmapper->pfree_func = mapper_put_or_filter_free; - - return pmapper; -} - -static void mapper_put_or_filter_free(mapper_t* pmapper, context_t* pctx) { - mapper_put_or_filter_state_t* pstate = pmapper->pvstate; - - free(pstate->mlr_dsl_expression); - lhmss_free(pstate->ppredefines); - mlhmmv_root_free(pstate->poosvars); - local_stack_free(pstate->plocal_stack); - loop_stack_free(pstate->ploop_stack); - mlr_dsl_cst_free(pstate->pcst, pctx); - // Free what's left of the stripped AST after the CST reorganized it. - mlr_dsl_ast_free(pstate->past); - - free(pstate->pwriter_opts); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -// The typed-overlay holds intermediate values such as in -// -// echo x=1 | mlr put '$y = string($x); $z = $y . $y' -// -// because otherwise -// * lrecs store insertion-ordered maps of string to string (since this is ultimately file I/O); -// * types are inferred at entry to put; -// * x=1 would be inferred to int; string($x) would be string; written back to the -// lrec, y would be "1" which would be re-inferred to int. -// -// So the typed overlay allows us to remember that y is string "1" not integer 1. -// -// But this raises the question: why stop here? Why not have lrecs be insertion-ordered maps from -// string to mlrval? Then we could preserve types for the duration of each lrec, not just for -// the duration of the put operation. Reasons: -// * The compare_lexically operation would suffer a performance regression; -// * Worse, all lhmslv group-by operations (used by many Miller verbs) would likewise suffer a performance regression. -// -// ---------------------------------------------------------------- -// The regex-capture string-array holds copies of regex matches, e.g. in -// -// echo name=abc_def | mlr put '$name =~ "(.*)_(.*)"; $left = "\1"; $right = "\2"' -// -// produces a record with left=abc and right=def. -// -// There is an important trick here with the length of the string-array: -// -// * It is set here to null. -// -// * It is passed by reference to the lrec-evaluator tree. In particular, the matches and does-not-match functions -// (which implement the =~ and !=~ operators) allocate it (or resize it, as necessary) and populate it. -// -// * If the matches/does-not-match functions are entered, even with no matches, the regex-captures string-array -// will be resized to have length 0. -// -// * When the lrec-evaluator's from-literal function is invoked, the interpolate_regex_captures function can quickly -// check to see if the regex-captures array is null and thereby know that a time-consuming scan for \1, \2, \3, etc. -// does not need to be done. On the other hand, if the regex-captures array is non-null and has length -// zero, then \0 .. \9 should all be replaced with the empty string. -// -// ---------------------------------------------------------------- -// The oosvars multi-level hashmap contains out-of-stream variables which can be written/read/output -// in begin{}/end{} blocks, and/or per record. -// -// ---------------------------------------------------------------- -// The context_t contains information about record-number, file-number, file-name, etc. from -// which the current stream-record was obtained. -// ---------------------------------------------------------------- - -static sllv_t* mapper_put_or_filter_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_put_or_filter_state_t* pstate = (mapper_put_or_filter_state_t*)pvstate; - - sllv_t* poutrecs = sllv_alloc(); - int should_emit_rec = TRUE; - - if (pstate->at_begin) { - string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation - - variables_t variables = (variables_t) { - .pinrec = NULL, - .ptyped_overlay = NULL, - .poosvars = pstate->poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .plocal_stack = pstate->plocal_stack, - .ploop_stack = pstate->ploop_stack, - .return_state = { - .returned = FALSE, - .retval = box_ephemeral_val(mv_absent()), - }, - .trace_execution = pstate->trace_execution, - .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, - .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, - }; - cst_outputs_t cst_outputs = (cst_outputs_t) { - .pshould_emit_rec = &should_emit_rec, - .poutrecs = poutrecs, - .oosvar_flatten_separator = pstate->oosvar_flatten_separator, - .pwriter_opts = pstate->pwriter_opts, - }; - - string_array_free(pregex_captures); - mlr_dsl_cst_handle_top_level_statement_blocks(pstate->pcst->pbegin_blocks, &variables, &cst_outputs); - pstate->at_begin = FALSE; - } - - if (pinrec == NULL) { // End of input stream - string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation - - variables_t variables = (variables_t) { - .pinrec = NULL, - .ptyped_overlay = NULL, - .poosvars = pstate->poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .plocal_stack = pstate->plocal_stack, - .ploop_stack = pstate->ploop_stack, - .return_state = { - .returned = FALSE, - .retval = box_ephemeral_val(mv_absent()), - }, - .trace_execution = pstate->trace_execution, - .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, - .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, - }; - cst_outputs_t cst_outputs = (cst_outputs_t) { - .pshould_emit_rec = &should_emit_rec, - .poutrecs = poutrecs, - .oosvar_flatten_separator = pstate->oosvar_flatten_separator, - .pwriter_opts = pstate->pwriter_opts, - }; - - mlr_dsl_cst_handle_top_level_statement_blocks(pstate->pcst->pend_blocks, &variables, &cst_outputs); - - string_array_free(pregex_captures); - sllv_append(poutrecs, NULL); - return poutrecs; - } - - lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); - string_array_t* pregex_captures = NULL; // May be set to non-null on evaluation - - should_emit_rec = TRUE; - - variables_t variables = (variables_t) { - .pinrec = pinrec, // Note variables.pinrec pointer can update on '$* = ...' - .ptyped_overlay = ptyped_overlay, - .poosvars = pstate->poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .plocal_stack = pstate->plocal_stack, - .ploop_stack = pstate->ploop_stack, - .return_state = { - .returned = FALSE, - .retval = box_ephemeral_val(mv_absent()), - }, - .trace_execution = pstate->trace_execution, - .json_quote_int_keys = pstate->pwriter_opts->json_quote_int_keys, - .json_quote_non_string_values = pstate->pwriter_opts->json_quote_non_string_values, - }; - cst_outputs_t cst_outputs = (cst_outputs_t) { - .pshould_emit_rec = &should_emit_rec, - .poutrecs = poutrecs, - .oosvar_flatten_separator = pstate->oosvar_flatten_separator, - .pwriter_opts = pstate->pwriter_opts, - }; - - mlr_dsl_cst_handle_top_level_statement_block(pstate->pcst->pmain_block, &variables, &cst_outputs); - - if (should_emit_rec && !pstate->put_output_disabled) { - // Write the output fields from the typed overlay back to the lrec. - for (lhmsmve_t* pe = variables.ptyped_overlay->phead; pe != NULL; pe = pe->pnext) { - char* output_field_name = pe->key; - mv_t* pval = &pe->value; - - // Ownership transfer from mv_t to lrec. - if (pval->type == MT_STRING) { - lrec_put(variables.pinrec, output_field_name, pval->u.strv, pval->free_flags); - } else { - char free_flags = NO_FREE; - char* string = mv_format_val(pval, &free_flags); - lrec_put(variables.pinrec, output_field_name, string, pval->free_flags | free_flags); - } - pval->free_flags = NO_FREE; - } - } - lhmsmv_free(variables.ptyped_overlay); - string_array_free(pregex_captures); - - // Note variables.pinrec pointer can update on '$* = ...' - if (should_emit_rec && !pstate->put_output_disabled) { - sllv_append(poutrecs, variables.pinrec); - } else { - lrec_free(variables.pinrec); - } - return poutrecs; -} diff --git a/c/mapping/mapper_regularize.c b/c/mapping/mapper_regularize.c deleted file mode 100644 index d8d743f11..000000000 --- a/c/mapping/mapper_regularize.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/lhmslv.h" -#include "containers/sllv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" - -typedef struct _mapper_regularize_state_t { - lhmslv_t* psorted_to_original; -} mapper_regularize_state_t; - -static void mapper_regularize_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_regularize_alloc(); -static void mapper_regularize_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_regularize_setup = { - .verb = "regularize", - .pusage_func = mapper_regularize_usage, - .pparse_func = mapper_regularize_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_regularize_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "For records seen earlier in the data stream with same field names in\n"); - fprintf(o, "a different order, outputs them with field names in the previously\n"); - fprintf(o, "encountered order.\n"); - fprintf(o, "Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8\n"); - fprintf(o, "output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8\n"); -} - -static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - *pargi += 1; - return mapper_regularize_alloc(); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_regularize_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_regularize_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_regularize_state_t)); - pstate->psorted_to_original = lhmslv_alloc(); - - pmapper->pvstate = (void*)pstate; - pmapper->pprocess_func = mapper_regularize_process; - pmapper->pfree_func = mapper_regularize_free; - - return pmapper; -} - -static void mapper_regularize_free(mapper_t* pmapper, context_t* _) { - mapper_regularize_state_t* pstate = pmapper->pvstate; - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pe = pstate->psorted_to_original->phead; pe != NULL; pe = pe->pnext) { - slls_free(pe->pvvalue); - } - lhmslv_free(pstate->psorted_to_original); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_regularize_state_t* pstate = (mapper_regularize_state_t*)pvstate; - slls_t* current_sorted_field_names = mlr_reference_keys_from_record(pinrec); - slls_sort(current_sorted_field_names); - slls_t* previous_sorted_field_names = lhmslv_get(pstate->psorted_to_original, current_sorted_field_names); - if (previous_sorted_field_names == NULL) { - previous_sorted_field_names = slls_copy(current_sorted_field_names); - lhmslv_put(pstate->psorted_to_original, previous_sorted_field_names, mlr_copy_keys_from_record(pinrec), - FREE_ENTRY_KEY); - slls_free(current_sorted_field_names); - return sllv_single(pinrec); - } else { - lrec_t* poutrec = lrec_unbacked_alloc(); - for (sllse_t* pe = previous_sorted_field_names->phead; pe != NULL; pe = pe->pnext) { - lrec_put(poutrec, pe->value, mlr_strdup_or_die(lrec_get(pinrec, pe->value)), FREE_ENTRY_VALUE); - } - lrec_free(pinrec); - slls_free(current_sorted_field_names); - return sllv_single(poutrec); - } - } - else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_remove_empty_columns.c b/c/mapping/mapper_remove_empty_columns.c deleted file mode 100644 index 735fab40d..000000000 --- a/c/mapping/mapper_remove_empty_columns.c +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmsi.h" -#include "mapping/mappers.h" - -typedef struct _mapper_remove_empty_columns_state_t { - sllv_t* precords; - lhmsi_t* pnames_with_nonempty_values; -} mapper_remove_empty_columns_state_t; - -static void mapper_remove_empty_columns_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_remove_empty_columns_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_remove_empty_columns_alloc(); -static void mapper_remove_empty_columns_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_remove_empty_columns_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_remove_empty_columns_setup = { - .verb = "remove-empty-columns", - .pusage_func = mapper_remove_empty_columns_usage, - .pparse_func = mapper_remove_empty_columns_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_remove_empty_columns_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Omits fields which are empty on every input row. Non-streaming.\n"); -} - -static mapper_t* mapper_remove_empty_columns_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_remove_empty_columns_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - mapper_t* pmapper = mapper_remove_empty_columns_alloc(); - *pargi += 1; - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_remove_empty_columns_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_remove_empty_columns_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_remove_empty_columns_state_t)); - pstate->precords = sllv_alloc(); - pstate->pnames_with_nonempty_values = lhmsi_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_remove_empty_columns_process; - pmapper->pfree_func = mapper_remove_empty_columns_free; - - return pmapper; -} - -static void mapper_remove_empty_columns_free(mapper_t* pmapper, context_t* _) { - mapper_remove_empty_columns_state_t* pstate = pmapper->pvstate; - // Free the container - sllv_free(pstate->precords); - lhmsi_free(pstate->pnames_with_nonempty_values); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_remove_empty_columns_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_remove_empty_columns_state_t* pstate = pvstate; - if (pinrec != NULL) { - // The caller will free the outrecs - sllv_append(pstate->precords, pinrec); - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (pe->value[0] != 0) { - if (!lhmsi_has_key(pstate->pnames_with_nonempty_values, pe->key)) { - lhmsi_put(pstate->pnames_with_nonempty_values, mlr_strdup_or_die(pe->key), 1, FREE_ENTRY_KEY); - } - } - } - return NULL; - } - else { - for (sllve_t* pe = pstate->precords->phead; pe != NULL; pe = pe->pnext) { - lrec_t* prec = pe->pvvalue; - lrece_t* pf = prec->phead; - while (pf != NULL) { - if (lhmsi_has_key(pstate->pnames_with_nonempty_values, pf->key)) { - pf = pf->pnext; - } else { - lrece_t* pnext = pf->pnext; - lrec_unlink_and_free(prec, pf); - pf = pnext; - } - } - } - - sllv_append(pstate->precords, NULL); - sllv_t* retval = pstate->precords; - pstate->precords = sllv_alloc(); - return retval; - } -} diff --git a/c/mapping/mapper_rename.c b/c/mapping/mapper_rename.c deleted file mode 100644 index 306413451..000000000 --- a/c/mapping/mapper_rename.c +++ /dev/null @@ -1,219 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/string_builder.h" -#include "containers/lhmss.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define RENAME_SB_ALLOC_LENGTH 16 - -typedef struct _regex_pair_t { - regex_t regex; - char* replacement; -} regex_pair_t; - -typedef struct _mapper_rename_state_t { - ap_state_t* pargp; - lhmss_t* pold_to_new; - sllv_t* pregex_pairs; - string_builder_t* psb; - int do_gsub; -} mapper_rename_state_t; - -static void mapper_rename_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_rename_alloc(ap_state_t* pargp, lhmss_t* pold_to_new, int do_regexes, int do_gsub); -static void mapper_rename_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_rename_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_rename_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_rename_setup = { - .verb = "rename", - .pusage_func = mapper_rename_usage, - .pparse_func = mapper_rename_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_rename_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {old1,new1,old2,new2,...}\n", argv0, verb); - fprintf(o, "Renames specified fields.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-r Treat old field names as regular expressions. \"ab\", \"a.*b\"\n"); - fprintf(o, " will match any field name containing the substring \"ab\" or\n"); - fprintf(o, " matching \"a.*b\", respectively; anchors of the form \"^ab$\",\n"); - fprintf(o, " \"^a.*b$\" may be used. New field names may be plain strings,\n"); - fprintf(o, " or may contain capture groups of the form \"\\1\" through\n"); - fprintf(o, " \"\\9\". Wrapping the regex in double quotes is optional, but\n"); - fprintf(o, " is required if you wish to follow it with 'i' to indicate\n"); - fprintf(o, " case-insensitivity.\n"); - fprintf(o, "-g Do global replacement within each field name rather than\n"); - fprintf(o, " first-match replacement.\n"); - fprintf(o, "Examples:\n"); - fprintf(o, "%s %s old_name,new_name'\n", argv0, verb); - fprintf(o, "%s %s old_name_1,new_name_1,old_name_2,new_name_2'\n", argv0, verb); - fprintf(o, "%s %s -r 'Date_[0-9]+,Date,' Rename all such fields to be \"Date\"\n", argv0, verb); - fprintf(o, "%s %s -r '\"Date_[0-9]+\",Date' Same\n", argv0, verb); - fprintf(o, "%s %s -r 'Date_([0-9]+).*,\\1' Rename all such fields to be of the form 20151015\n", argv0, verb); - fprintf(o, "%s %s -r '\"name\"i,Name' Rename \"name\", \"Name\", \"NAME\", etc. to \"Name\"\n", argv0, verb); -} - -static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int do_regexes = FALSE; - int do_gsub = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_true_flag(pstate, "-r", &do_regexes); - ap_define_true_flag(pstate, "-g", &do_gsub); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_rename_usage(stderr, argv[0], verb); - return NULL; - } - - if ((argc - *pargi) < 1) { - mapper_rename_usage(stderr, argv[0], verb); - return NULL; - } - - if (do_gsub) - do_regexes = TRUE; - - slls_t* pnames = slls_from_line(argv[*pargi], ',', FALSE); - if ((pnames->length % 2) != 0) { - fprintf(stderr, "%s %s: name-list must have even length; got \"%s\".\n", - MLR_GLOBALS.bargv0, verb, argv[*pargi]); - mapper_rename_usage(stderr, argv[0], verb); - return NULL; - } - lhmss_t* pold_to_new = lhmss_alloc(); - for (sllse_t* pe = pnames->phead; pe != NULL; pe = pe->pnext->pnext) { - lhmss_put(pold_to_new, mlr_strdup_or_die(pe->value), mlr_strdup_or_die(pe->pnext->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - slls_free(pnames); - - *pargi += 1; - return mapper_rename_alloc(pstate, pold_to_new, do_regexes, do_gsub); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_rename_alloc(ap_state_t* pargp, lhmss_t* pold_to_new, int do_regexes, int do_gsub) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_rename_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_rename_state_t)); - - pstate->pargp = pargp; - if (do_regexes) { - pmapper->pprocess_func = mapper_rename_regex_process; - pstate->pold_to_new = pold_to_new; - pstate->pregex_pairs = sllv_alloc(); - - for (lhmsse_t* pe = pold_to_new->phead; pe != NULL; pe = pe->pnext) { - char* regex_string = pe->key; - char* replacement = pe->value; - - regex_pair_t* ppair = mlr_malloc_or_die(sizeof(regex_pair_t)); - regcomp_or_die_quoted(&ppair->regex, regex_string, 0); - ppair->replacement = replacement; - sllv_append(pstate->pregex_pairs, ppair); - } - - pstate->psb = sb_alloc(RENAME_SB_ALLOC_LENGTH); - pstate->do_gsub = do_gsub; - } else { - pmapper->pprocess_func = mapper_rename_process; - pstate->pold_to_new = pold_to_new; - pstate->pregex_pairs = NULL; - pstate->psb = NULL; - pstate->do_gsub = FALSE; - } - pmapper->pfree_func = mapper_rename_free; - - pmapper->pvstate = (void*)pstate; - return pmapper; -} - -static void mapper_rename_free(mapper_t* pmapper, context_t* _) { - mapper_rename_state_t* pstate = pmapper->pvstate; - lhmss_free(pstate->pold_to_new); - if (pstate->pregex_pairs != NULL) { - for (sllve_t* pe = pstate->pregex_pairs->phead; pe != NULL; pe = pe->pnext) { - regex_pair_t* ppair = pe->pvvalue; - regfree(&ppair->regex); - // replacement is in pthe old_to_new list, already freed - free(ppair); - } - sllv_free(pstate->pregex_pairs); - } - sb_free(pstate->psb); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_rename_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_rename_state_t* pstate = (mapper_rename_state_t*)pvstate; - for (lhmsse_t* pe = pstate->pold_to_new->phead; pe != NULL; pe = pe->pnext) { - char* old_name = pe->key; - char* new_name = pe->value; - if (lrec_get(pinrec, old_name) != NULL) { - lrec_rename(pinrec, old_name, new_name, FALSE); - } - } - return sllv_single(pinrec); - } - else { - return sllv_single(NULL); - } -} - -static sllv_t* mapper_rename_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { - mapper_rename_state_t* pstate = (mapper_rename_state_t*)pvstate; - - for (sllve_t* pe = pstate->pregex_pairs->phead; pe != NULL; pe = pe->pnext) { - regex_pair_t* ppair = pe->pvvalue; - regex_t* pregex = &ppair->regex; - char* replacement = ppair->replacement; - for (lrece_t* pf = pinrec->phead; pf != NULL; pf = pf->pnext) { - int matched = FALSE; - int all_captured = FALSE; - char* old_name = pf->key; - if (pstate->do_gsub) { - char free_flags = NO_FREE; - char* new_name = regex_gsub(old_name, pregex, pstate->psb, replacement, &matched, - &all_captured, &free_flags); - int new_needs_freeing = FALSE; - if (free_flags & FREE_ENTRY_VALUE) - new_needs_freeing = TRUE; - if (matched) - lrec_rename(pinrec, old_name, new_name, new_needs_freeing); - } else { - char* new_name = regex_sub(old_name, pregex, pstate->psb, replacement, &matched, - &all_captured); - if (matched) { - lrec_rename(pinrec, old_name, new_name, TRUE); - } else { - free(new_name); - } - } - } - } - - return sllv_single(pinrec); - } - else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_reorder.c b/c/mapping/mapper_reorder.c deleted file mode 100644 index 92823f7cb..000000000 --- a/c/mapping/mapper_reorder.c +++ /dev/null @@ -1,245 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "containers/hss.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_reorder_state_t { - ap_state_t* pargp; - slls_t* pfield_name_list; - hss_t* pfield_name_set; - char* before_field_name; - char* after_field_name; -} mapper_reorder_state_t; - -static void mapper_reorder_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_reorder_alloc(ap_state_t* pargp, slls_t* pfield_name_list, - int put_at_end, char* before_field_name, char* after_field_name); -static void mapper_reorder_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_reorder_to_start(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_reorder_to_end(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_reorder_before(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_reorder_after(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_reorder_setup = { - .verb = "reorder", - .pusage_func = mapper_reorder_usage, - .pparse_func = mapper_reorder_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_reorder_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "-f {a,b,c} Field names to reorder.\n"); - fprintf(o, "-e Put specified field names at record end: default is to put\n"); - fprintf(o, " them at record start.\n"); - fprintf(o, "-b {x} Put field names specified with -f before field name specified by {x},\n"); - fprintf(o, " if any. If {x} isn't present in a given record, the specified fields\n"); - fprintf(o, " will not be moved.\n"); - fprintf(o, "-a {x} Put field names specified with -f after field name specified by {x},\n"); - fprintf(o, " if any. If {x} isn't present in a given record, the specified fields\n"); - fprintf(o, " will not be moved.\n"); - fprintf(o, "Examples:\n"); - fprintf(o, "%s %s -f a,b sends input record \"d=4,b=2,a=1,c=3\" to \"a=1,b=2,d=4,c=3\".\n", argv0, verb); - fprintf(o, "%s %s -e -f a,b sends input record \"d=4,b=2,a=1,c=3\" to \"d=4,c=3,a=1,b=2\".\n", argv0, verb); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pfield_name_list = NULL; - int put_at_end = FALSE; - char* before_field_name = NULL; - char* after_field_name = NULL; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pfield_name_list); - ap_define_true_flag(pstate, "-e", &put_at_end); - ap_define_string_flag(pstate, "-b", &before_field_name); - ap_define_string_flag(pstate, "-a", &after_field_name); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_reorder_usage(stderr, argv[0], verb); - return NULL; - } - - if (pfield_name_list == NULL) { - mapper_reorder_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_reorder_alloc(pstate, pfield_name_list, put_at_end, before_field_name, after_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_reorder_alloc(ap_state_t* pargp, slls_t* pfield_name_list, - int put_at_end, char* before_field_name, char* after_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_reorder_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_reorder_state_t)); - pstate->pargp = pargp; - pstate->pfield_name_list = pfield_name_list; - pstate->pfield_name_set = hss_from_slls(pfield_name_list); - pstate->before_field_name = before_field_name; - pstate->after_field_name = after_field_name; - - pmapper->pvstate = (void*)pstate; - - if (put_at_end) { - pmapper->pprocess_func = mapper_reorder_to_end; - } else if (before_field_name != NULL) { - pmapper->pprocess_func = mapper_reorder_before; - } else if (after_field_name != NULL) { - pmapper->pprocess_func = mapper_reorder_after; - } else { - pmapper->pprocess_func = mapper_reorder_to_start; - slls_reverse(pstate->pfield_name_list); - } - pmapper->pfree_func = mapper_reorder_free; - - return pmapper; -} - -static void mapper_reorder_free(mapper_t* pmapper, context_t* _) { - mapper_reorder_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pfield_name_list); - hss_free(pstate->pfield_name_set); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reorder_to_start(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_reorder_state_t* pstate = (mapper_reorder_state_t*)pvstate; - if (pinrec != NULL) { - // OK since the field-name list was reversed at construction time. - for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { - lrec_move_to_head(pinrec, pe->value); - } - return sllv_single(pinrec); - } else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reorder_to_end(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_reorder_state_t* pstate = (mapper_reorder_state_t*)pvstate; - if (pinrec != NULL) { - for (sllse_t* pe = pstate->pfield_name_list->phead; pe != NULL; pe = pe->pnext) { - lrec_move_to_tail(pinrec, pe->value); - } - return sllv_single(pinrec); - } else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reorder_before(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_reorder_state_t* pstate = (mapper_reorder_state_t*)pvstate; - if (pinrec != NULL) { - char* bvalue = lrec_get(pinrec, pstate->before_field_name); - if (bvalue == NULL) { - return sllv_single(pinrec); - } - - lrec_t* poutrec = lrec_unbacked_alloc(); - lrece_t* pe = pinrec->phead; - - for (; pe != NULL; pe = pe->pnext) { - if (streq(pe->key, pstate->before_field_name)) { - break; - } - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - for (sllse_t* pf = pstate->pfield_name_list->phead; pf != NULL; pf = pf->pnext) { - char* field_name = pf->value; - char* value = lrec_get(pinrec, field_name); - if (value != NULL) { - lrec_put(poutrec, field_name, mlr_strdup_or_die(value), FREE_ENTRY_VALUE); - } - } - - lrec_put(poutrec, pstate->before_field_name, mlr_strdup_or_die(bvalue), FREE_ENTRY_VALUE); - - for (; pe != NULL; pe = pe->pnext) { - if (streq(pe->key, pstate->before_field_name)) { - continue; - } - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - lrec_free(pinrec); - return sllv_single(poutrec); - } else { - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reorder_after(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_reorder_state_t* pstate = (mapper_reorder_state_t*)pvstate; - if (pinrec != NULL) { - char* avalue = lrec_get(pinrec, pstate->after_field_name); - if (avalue == NULL) { - return sllv_single(pinrec); - } - - lrec_t* poutrec = lrec_unbacked_alloc(); - lrece_t* pe = pinrec->phead; - - for (; pe != NULL; pe = pe->pnext) { - if (streq(pe->key, pstate->after_field_name)) { - break; - } - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - lrec_put(poutrec, pstate->after_field_name, mlr_strdup_or_die(avalue), FREE_ENTRY_VALUE); - - for (sllse_t* pf = pstate->pfield_name_list->phead; pf != NULL; pf = pf->pnext) { - char* field_name = pf->value; - char* value = lrec_get(pinrec, field_name); - if (value != NULL) { - lrec_put(poutrec, field_name, mlr_strdup_or_die(value), FREE_ENTRY_VALUE); - } - } - - for (; pe != NULL; pe = pe->pnext) { - if (streq(pe->key, pstate->after_field_name)) { - continue; - } - if (!hss_has(pstate->pfield_name_set, pe->key)) { - lrec_put(poutrec, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - - lrec_free(pinrec); - return sllv_single(poutrec); - } else { - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_repeat.c b/c/mapping/mapper_repeat.c deleted file mode 100644 index 59b066137..000000000 --- a/c/mapping/mapper_repeat.c +++ /dev/null @@ -1,182 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef enum _repeat_type_t { - BY_COUNT, - BY_FIELD_NAME, -} repeat_type_t; - -typedef struct _mapper_repeat_state_t { - ap_state_t* pargp; - char* repeat_count_field_name; - long long repeat_count; -} mapper_repeat_state_t; - -static void mapper_repeat_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_repeat_alloc(ap_state_t* pargp, long long repeat_count, char* repeat_count_field_name); -static void mapper_repeat_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_repeat_process_nop(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_repeat_process_by_positive_count(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_repeat_process_by_field_name(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_repeat_setup = { - .verb = "repeat", - .pusage_func = mapper_repeat_usage, - .pparse_func = mapper_repeat_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_repeat_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Copies input records to output records multiple times.\n"); - fprintf(o, "Options must be exactly one of the following:\n"); - fprintf(o, " -n {repeat count} Repeat each input record this many times.\n"); - fprintf(o, " -f {field name} Same, but take the repeat count from the specified\n"); - fprintf(o, " field name of each input record.\n"); - fprintf(o, "Example:\n"); - fprintf(o, " echo x=0 | %s %s -n 4 then put '$x=urand()'\n", argv0, verb); - fprintf(o, "produces:\n"); - fprintf(o, " x=0.488189\n"); - fprintf(o, " x=0.484973\n"); - fprintf(o, " x=0.704983\n"); - fprintf(o, " x=0.147311\n"); - fprintf(o, "Example:\n"); - fprintf(o, " echo a=1,b=2,c=3 | %s %s -f b\n", argv0, verb); - fprintf(o, "produces:\n"); - fprintf(o, " a=1,b=2,c=3\n"); - fprintf(o, " a=1,b=2,c=3\n"); - fprintf(o, "Example:\n"); - fprintf(o, " echo a=1,b=2,c=3 | %s %s -f c\n", argv0, verb); - fprintf(o, "produces:\n"); - fprintf(o, " a=1,b=2,c=3\n"); - fprintf(o, " a=1,b=2,c=3\n"); - fprintf(o, " a=1,b=2,c=3\n"); -} - -static const long long UNINIT_REPEAT_COUNT = -123457689LL; -static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - long long repeat_count = UNINIT_REPEAT_COUNT; - char* repeat_count_field_name = NULL; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_flag(pstate, "-f", &repeat_count_field_name); - ap_define_long_long_flag(pstate, "-n", &repeat_count); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_repeat_usage(stderr, argv[0], verb); - return NULL; - } - if (repeat_count == UNINIT_REPEAT_COUNT && repeat_count_field_name == NULL) { - mapper_repeat_usage(stderr, argv[0], verb); - return NULL; - } - if (repeat_count != UNINIT_REPEAT_COUNT && repeat_count_field_name != NULL) { - mapper_repeat_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_repeat_alloc(pstate, repeat_count, repeat_count_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_repeat_alloc(ap_state_t* pargp, long long repeat_count, char* repeat_count_field_name) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_repeat_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_repeat_state_t)); - - pstate->pargp = pargp; - pstate->repeat_count = repeat_count; - pstate->repeat_count_field_name = repeat_count_field_name; - - pmapper->pvstate = pstate; - - if (repeat_count_field_name != NULL) - pmapper->pprocess_func = mapper_repeat_process_by_field_name; - else if (repeat_count >= 1LL) - pmapper->pprocess_func = mapper_repeat_process_by_positive_count; - else - pmapper->pprocess_func = mapper_repeat_process_nop; - - pmapper->pfree_func = mapper_repeat_free; - - return pmapper; -} - -static void mapper_repeat_free(mapper_t* pmapper, context_t* _) { - mapper_repeat_state_t* pstate = pmapper->pvstate; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_repeat_process_nop(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of record stream - return sllv_single(NULL); - else - return NULL; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_repeat_process_by_positive_count(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_repeat_state_t* pstate = pvstate; - - if (pinrec == NULL) // End of record stream - return sllv_single(NULL); - - sllv_t* poutrecs = sllv_alloc(); - // The input record can be baton-passed once to the output without multiple frees. - // After that, we must copy it. - sllv_append(poutrecs, pinrec); - for (long long i = 1; i < pstate->repeat_count; i++) { - sllv_append(poutrecs, lrec_copy(pinrec)); - } - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_repeat_process_by_field_name(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_repeat_state_t* pstate = pvstate; - - if (pinrec == NULL) // End of record stream - return sllv_single(NULL); - - char* repeat_count_field_svalue = lrec_get(pinrec, pstate->repeat_count_field_name); - if (repeat_count_field_svalue == NULL) { - lrec_free(pinrec); - return NULL; - } - - long long repeat_count; - int ok = mlr_try_int_from_string(repeat_count_field_svalue, &repeat_count); - if (!ok || repeat_count <= 0) { - lrec_free(pinrec); - return NULL; - } - - sllv_t* poutrecs = sllv_alloc(); - // The input record can be baton-passed once to the output without multiple frees. - // After that, we must copy it. - sllv_append(poutrecs, pinrec); - for (long long i = 1; i < repeat_count; i++) { - sllv_append(poutrecs, lrec_copy(pinrec)); - } - return poutrecs; -} diff --git a/c/mapping/mapper_reshape.c b/c/mapping/mapper_reshape.c deleted file mode 100644 index d0e0b2a80..000000000 --- a/c/mapping/mapper_reshape.c +++ /dev/null @@ -1,447 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" -#include "lib/string_builder.h" -#include "containers/lhmss.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -// ================================================================ -// WIDE: -// time X Y Z -// 1 2009-01-01 0.65473572 2.4520609 -1.46570942 -// 2 2009-01-02 -0.89248112 0.2154713 -2.05357735 -// 3 2009-01-03 0.98012375 1.3179287 4.64248357 -// 4 2009-01-04 0.35397376 3.3765645 -0.25237774 -// 5 2009-01-05 2.19357813 1.3477511 0.09719105 - -// LONG: -// time item price -// 1 2009-01-01 X 0.65473572 -// 2 2009-01-02 X -0.89248112 -// 3 2009-01-03 X 0.98012375 -// 4 2009-01-04 X 0.35397376 -// 5 2009-01-05 X 2.19357813 -// 6 2009-01-01 Y 2.45206093 -// 7 2009-01-02 Y 0.21547134 -// 8 2009-01-03 Y 1.31792866 -// 9 2009-01-04 Y 3.37656453 -// 10 2009-01-05 Y 1.34775108 -// 11 2009-01-01 Z -1.46570942 -// 12 2009-01-02 Z -2.05357735 -// 13 2009-01-03 Z 4.64248357 -// 14 2009-01-04 Z -0.25237774 -// 15 2009-01-05 Z 0.09719105 - -// ================================================================ -typedef struct _mapper_reshape_state_t { - ap_state_t* pargp; - - // for wide-to-long: - slls_t* input_field_names; - sllv_t* input_field_regexes; - char* output_key_field_name; - char* output_value_field_name; - - // for long-to-wide: - char* split_out_key_field_name; - char* split_out_value_field_name; - lhmslv_t* other_keys_to_other_values_to_buckets; -} mapper_reshape_state_t; - -typedef struct _reshape_bucket_t { - lrec_t* prepresentative; - lhmss_t* pairs; -} reshape_bucket_t; - -static void mapper_reshape_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_reshape_alloc( - ap_state_t* pargp, - slls_t* input_field_names, - slls_t* input_field_regex_strings, - char* output_key_field_name, - char* output_value_field_name, - char* split_out_key_field_name, - char* split_out_value_field_name); -static void mapper_reshape_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_reshape_wide_to_long_no_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_reshape_wide_to_long_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_reshape_long_to_wide_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static reshape_bucket_t* reshape_bucket_alloc(lrec_t* prepresentative); -static void reshape_bucket_free(reshape_bucket_t* pbucket); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_reshape_setup = { - .verb = "reshape", - .pusage_func = mapper_reshape_usage, - .pparse_func = mapper_reshape_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_reshape_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Wide-to-long options:\n"); - fprintf(o, " -i {input field names} -o {key-field name,value-field name}\n"); - fprintf(o, " -r {input field regexes} -o {key-field name,value-field name}\n"); - fprintf(o, " These pivot/reshape the input data such that the input fields are removed\n"); - fprintf(o, " and separate records are emitted for each key/value pair.\n"); - fprintf(o, " Note: this works with tail -f and produces output records for each input\n"); - fprintf(o, " record seen.\n"); - fprintf(o, "Long-to-wide options:\n"); - fprintf(o, " -s {key-field name,value-field name}\n"); - fprintf(o, " These pivot/reshape the input data to undo the wide-to-long operation.\n"); - fprintf(o, " Note: this does not work with tail -f; it produces output records only after\n"); - fprintf(o, " all input records have been read.\n"); - fprintf(o, "\n"); - fprintf(o, "Examples:\n"); - fprintf(o, "\n"); - fprintf(o, " Input file \"wide.txt\":\n"); - fprintf(o, " time X Y\n"); - fprintf(o, " 2009-01-01 0.65473572 2.4520609\n"); - fprintf(o, " 2009-01-02 -0.89248112 0.2154713\n"); - fprintf(o, " 2009-01-03 0.98012375 1.3179287\n"); - fprintf(o, "\n"); - fprintf(o, " %s --pprint %s -i X,Y -o item,value wide.txt\n", argv0, verb); - fprintf(o, " time item value\n"); - fprintf(o, " 2009-01-01 X 0.65473572\n"); - fprintf(o, " 2009-01-01 Y 2.4520609\n"); - fprintf(o, " 2009-01-02 X -0.89248112\n"); - fprintf(o, " 2009-01-02 Y 0.2154713\n"); - fprintf(o, " 2009-01-03 X 0.98012375\n"); - fprintf(o, " 2009-01-03 Y 1.3179287\n"); - fprintf(o, "\n"); - fprintf(o, " %s --pprint %s -r '[A-Z]' -o item,value wide.txt\n", argv0, verb); - fprintf(o, " time item value\n"); - fprintf(o, " 2009-01-01 X 0.65473572\n"); - fprintf(o, " 2009-01-01 Y 2.4520609\n"); - fprintf(o, " 2009-01-02 X -0.89248112\n"); - fprintf(o, " 2009-01-02 Y 0.2154713\n"); - fprintf(o, " 2009-01-03 X 0.98012375\n"); - fprintf(o, " 2009-01-03 Y 1.3179287\n"); - fprintf(o, "\n"); - fprintf(o, " Input file \"long.txt\":\n"); - fprintf(o, " time item value\n"); - fprintf(o, " 2009-01-01 X 0.65473572\n"); - fprintf(o, " 2009-01-01 Y 2.4520609\n"); - fprintf(o, " 2009-01-02 X -0.89248112\n"); - fprintf(o, " 2009-01-02 Y 0.2154713\n"); - fprintf(o, " 2009-01-03 X 0.98012375\n"); - fprintf(o, " 2009-01-03 Y 1.3179287\n"); - fprintf(o, "\n"); - fprintf(o, " %s --pprint %s -s item,value long.txt\n", argv0, verb); - fprintf(o, " time X Y\n"); - fprintf(o, " 2009-01-01 0.65473572 2.4520609\n"); - fprintf(o, " 2009-01-02 -0.89248112 0.2154713\n"); - fprintf(o, " 2009-01-03 0.98012375 1.3179287\n"); - fprintf(o, "See also %s nest.\n", argv0); -} - -static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* input_field_names = NULL; - slls_t* input_field_regex_strings = NULL; - slls_t* output_field_names = NULL; - slls_t* split_out_field_names = NULL; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-i", &input_field_names); - ap_define_string_list_flag(pstate, "-r", &input_field_regex_strings); - ap_define_string_list_flag(pstate, "-o", &output_field_names); - ap_define_string_list_flag(pstate, "-s", &split_out_field_names); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_reshape_usage(stderr, argv[0], verb); - return NULL; - } - - char* output_key_field_name = NULL; - char* output_value_field_name = NULL; - char* split_out_key_field_name = NULL; - char* split_out_value_field_name = NULL; - - if (split_out_field_names == NULL) { - // wide to long - if (input_field_names == NULL && input_field_regex_strings == NULL) { - mapper_reshape_usage(stderr, argv[0], verb); - return NULL; - } - - if (output_field_names == NULL) { - mapper_reshape_usage(stderr, argv[0], verb); - return NULL; - } - if (output_field_names->length != 2) { - mapper_reshape_usage(stderr, argv[0], verb); - return NULL; - } - output_key_field_name = mlr_strdup_or_die(output_field_names->phead->value); - output_value_field_name = mlr_strdup_or_die(output_field_names->phead->pnext->value); - slls_free(output_field_names); - - } else { - // long to wide - if (split_out_field_names->length != 2) { - mapper_reshape_usage(stderr, argv[0], verb); - return NULL; - } - split_out_key_field_name = mlr_strdup_or_die(split_out_field_names->phead->value); - split_out_value_field_name = mlr_strdup_or_die(split_out_field_names->phead->pnext->value); - slls_free(split_out_field_names); - } - - return mapper_reshape_alloc(pstate, input_field_names, input_field_regex_strings, - output_key_field_name, output_value_field_name, - split_out_key_field_name, split_out_value_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_reshape_alloc( - ap_state_t* pargp, - slls_t* input_field_names, - slls_t* input_field_regex_strings, - char* output_key_field_name, - char* output_value_field_name, - char* split_out_key_field_name, - char* split_out_value_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_reshape_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_reshape_state_t)); - - pstate->pargp = pargp; - pstate->input_field_names = input_field_names; - pstate->output_key_field_name = output_key_field_name; - pstate->output_value_field_name = output_value_field_name; - pstate->split_out_key_field_name = split_out_key_field_name; - pstate->split_out_value_field_name = split_out_value_field_name; - - if (input_field_regex_strings == NULL) { - pstate->input_field_regexes = NULL; - } else { - pstate->input_field_regexes = sllv_alloc(); - for (sllse_t* pe = input_field_regex_strings->phead; pe != NULL; pe = pe->pnext) { - regex_t* pregex = mlr_malloc_or_die(sizeof(regex_t)); - regcomp_or_die(pregex, pe->value, 0); - sllv_append(pstate->input_field_regexes, pregex); - } - slls_free(input_field_regex_strings); - } - - if (split_out_key_field_name == NULL) { - if (pstate->input_field_regexes == NULL) - pmapper->pprocess_func = mapper_reshape_wide_to_long_no_regex_process; - else - pmapper->pprocess_func = mapper_reshape_wide_to_long_regex_process; - pstate->other_keys_to_other_values_to_buckets = NULL; - } else { - pmapper->pprocess_func = mapper_reshape_long_to_wide_process; - pstate->other_keys_to_other_values_to_buckets = lhmslv_alloc(); - } - - pmapper->pfree_func = mapper_reshape_free; - - pmapper->pvstate = (void*)pstate; - return pmapper; -} - -static void mapper_reshape_free(mapper_t* pmapper, context_t* _) { - mapper_reshape_state_t* pstate = pmapper->pvstate; - - slls_free(pstate->input_field_names); - - free(pstate->output_key_field_name); - free(pstate->output_value_field_name); - - free(pstate->split_out_key_field_name); - free(pstate->split_out_value_field_name); - - if (pstate->input_field_regexes != NULL) { - for (sllve_t* pe = pstate->input_field_regexes->phead; pe != NULL; pe = pe->pnext) { - regex_t* pregex = pe->pvvalue; - regfree(pregex); - free(pregex); - } - sllv_free(pstate->input_field_regexes); - } - - if (pstate->other_keys_to_other_values_to_buckets != NULL) { - for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { - lhmslv_t* other_values_to_buckets = pe->pvvalue; - for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { - reshape_bucket_t* pbucket = pf->pvvalue; - reshape_bucket_free(pbucket); - } - lhmslv_free(other_values_to_buckets); - } - lhmslv_free(pstate->other_keys_to_other_values_to_buckets); - } - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reshape_wide_to_long_no_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; - - sllv_t* poutrecs = sllv_alloc(); - lhmss_t* pairs = lhmss_alloc(); - char* pfree_flags = NULL; - for (sllse_t* pe = pstate->input_field_names->phead; pe != NULL; pe = pe->pnext) { - char* key = pe->value; - char* value = lrec_get_pff(pinrec, key, &pfree_flags); - if (value != NULL) { - // Ownership-transfer of the about-to-be-freed key-value pairs from lrec to lhmss - lhmss_put(pairs, key, value, *pfree_flags); - *pfree_flags = NO_FREE; - } - } - - // Unset the lrec keys after iterating over them, rather than during - for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) - lrec_remove(pinrec, pf->key); - - if (pairs->num_occupied == 0) { - sllv_append(poutrecs, pinrec); - } else { - for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) { - lrec_t* poutrec = lrec_copy(pinrec); - lrec_put(poutrec, pstate->output_key_field_name, mlr_strdup_or_die(pf->key), FREE_ENTRY_VALUE); - lrec_put(poutrec, pstate->output_value_field_name, mlr_strdup_or_die(pf->value), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - lrec_free(pinrec); - } - - lhmss_free(pairs); - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reshape_wide_to_long_regex_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // End of input stream - return sllv_single(NULL); - - mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; - - sllv_t* poutrecs = sllv_alloc(); - lhmss_t* pairs = lhmss_alloc(); - - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - for (sllve_t* pf = pstate->input_field_regexes->phead; pf != NULL; pf = pf->pnext) { - regex_t* pregex = pf->pvvalue; - if (regmatch_or_die(pregex, pe->key, 0, NULL)) { - // Ownership-transfer of the about-to-be-freed key-value pairs from lrec to lhmss - lhmss_put(pairs, pe->key, pe->value, pe->free_flags); - pe->free_flags = NO_FREE; - break; - } - } - } - - // Unset the lrec keys after iterating over them, rather than during - for (lhmsse_t* pg = pairs->phead; pg != NULL; pg = pg->pnext) - lrec_remove(pinrec, pg->key); - - if (pairs->num_occupied == 0) { - sllv_append(poutrecs, pinrec); - } else { - for (lhmsse_t* pf = pairs->phead; pf != NULL; pf = pf->pnext) { - lrec_t* poutrec = lrec_copy(pinrec); - lrec_put(poutrec, pstate->output_key_field_name, mlr_strdup_or_die(pf->key), FREE_ENTRY_VALUE); - lrec_put(poutrec, pstate->output_value_field_name, mlr_strdup_or_die(pf->value), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - lrec_free(pinrec); - } - - lhmss_free(pairs); - - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_reshape_long_to_wide_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_reshape_state_t* pstate = (mapper_reshape_state_t*)pvstate; - - if (pinrec != NULL) { // Not end of input stream - char* split_out_key_field_value = lrec_get(pinrec, pstate->split_out_key_field_name); - char* split_out_value_field_value = lrec_get(pinrec, pstate-> split_out_value_field_name); - if (split_out_key_field_value == NULL || split_out_value_field_value == NULL) - return sllv_single(pinrec); - split_out_key_field_value = mlr_strdup_or_die(split_out_key_field_value); - split_out_value_field_value = mlr_strdup_or_die(split_out_value_field_value); - lrec_remove(pinrec, pstate->split_out_key_field_name); - lrec_remove(pinrec, pstate->split_out_value_field_name); - - slls_t* other_keys = mlr_reference_keys_from_record(pinrec); - lhmslv_t* other_values_to_buckets = lhmslv_get(pstate->other_keys_to_other_values_to_buckets, other_keys); - if (other_values_to_buckets == NULL) { - other_values_to_buckets = lhmslv_alloc(); - lhmslv_put(pstate->other_keys_to_other_values_to_buckets, - slls_copy(other_keys), other_values_to_buckets, FREE_ENTRY_KEY); - } - - slls_t* other_values = mlr_reference_values_from_record(pinrec); - reshape_bucket_t* pbucket = lhmslv_get(other_values_to_buckets, other_values); - if (pbucket == NULL) { - pbucket = reshape_bucket_alloc(pinrec); - lhmslv_put(other_values_to_buckets, slls_copy(other_values), pbucket, FREE_ENTRY_KEY); - } else { - lrec_free(pinrec); - } - lhmss_put(pbucket->pairs, split_out_key_field_value, split_out_value_field_value, - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - - slls_free(other_values); - slls_free(other_keys); - - return NULL; - - } else { // end of input stream - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pe = pstate->other_keys_to_other_values_to_buckets->phead; pe != NULL; pe = pe->pnext) { - lhmslv_t* other_values_to_buckets = pe->pvvalue; - for (lhmslve_t* pf = other_values_to_buckets->phead; pf != NULL; pf = pf->pnext) { - reshape_bucket_t* pbucket = pf->pvvalue; - lrec_t* poutrec = pbucket->prepresentative; - pbucket->prepresentative = NULL; // ownership transfer - for (lhmsse_t* pg = pbucket->pairs->phead; pg != NULL; pg = pg->pnext) { - // Strings in these lrecs are backed by our multi-level hashmaps which aren't freed by our free - // method until shutdown time (in particular, after all outrecs are emitted). - lrec_put(poutrec, pg->key, pg->value, NO_FREE); - } - sllv_append(poutrecs, poutrec); - } - } - - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -// ---------------------------------------------------------------- -static reshape_bucket_t* reshape_bucket_alloc(lrec_t* prepresentative) { - reshape_bucket_t* pbucket = mlr_malloc_or_die(sizeof(reshape_bucket_t)); - pbucket->prepresentative = prepresentative; - pbucket->pairs = lhmss_alloc(); - return pbucket; -} -static void reshape_bucket_free(reshape_bucket_t* pbucket) { - lrec_free(pbucket->prepresentative); - lhmss_free(pbucket->pairs); - free(pbucket); -} diff --git a/c/mapping/mapper_sample.c b/c/mapping/mapper_sample.c deleted file mode 100644 index 5796fb370..000000000 --- a/c/mapping/mapper_sample.c +++ /dev/null @@ -1,186 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mtrand.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -// ---------------------------------------------------------------- -typedef struct _sample_bucket_t { - int nalloc; - int nused; - lrec_t** plrecs; -} sample_bucket_t; - -sample_bucket_t* sample_bucket_alloc(int nalloc); -void sample_bucket_free(sample_bucket_t* pbucket); -void sample_bucket_handle(sample_bucket_t* pbucket, lrec_t* prec, int record_number); - -// ---------------------------------------------------------------- -typedef struct _mapper_sample_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - unsigned long long sample_count; - lhmslv_t* pbuckets_by_group; -} mapper_sample_state_t; - -static void mapper_sample_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_sample_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long sample_count); -static void mapper_sample_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_sample_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_sample_setup = { - .verb = "sample", - .pusage_func = mapper_sample_usage, - .pparse_func = mapper_sample_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_sample_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Reservoir sampling (subsampling without replacement), optionally by category.\n"); - fprintf(o, "-k {count} Required: number of records to output, total, or by group if using -g.\n"); - fprintf(o, "-g {a,b,c} Optional: group-by-field names for samples.\n"); - fprintf(o, "See also %s bootstrap and %s shuffle.\n", argv0, argv0); -} - -static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int sample_count = -1; - slls_t* pgroup_by_field_names = slls_alloc(); - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "-k", &sample_count); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_sample_usage(stderr, argv[0], verb); - return NULL; - } - if (sample_count == -1) { - mapper_sample_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_sample_alloc(pstate, pgroup_by_field_names, sample_count); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sample_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long sample_count) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_sample_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sample_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->sample_count = sample_count; - pstate->pbuckets_by_group = lhmslv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_sample_process; - pmapper->pfree_func = mapper_sample_free; - - return pmapper; -} - -static void mapper_sample_free(mapper_t* pmapper, context_t* _) { - mapper_sample_state_t* pstate = pmapper->pvstate; - if (pstate->pgroup_by_field_names != NULL) - slls_free(pstate->pgroup_by_field_names); - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->pbuckets_by_group->phead; pa != NULL; pa = pa->pnext) { - sample_bucket_t* pbucket = pa->pvvalue; - sample_bucket_free(pbucket); - } - lhmslv_free(pstate->pbuckets_by_group); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_sample_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_sample_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - sample_bucket_t* pbucket = lhmslv_get(pstate->pbuckets_by_group, pgroup_by_field_values); - if (pbucket == NULL) { - pbucket = sample_bucket_alloc(pstate->sample_count); - lhmslv_put(pstate->pbuckets_by_group, slls_copy(pgroup_by_field_values), pbucket, - FREE_ENTRY_KEY); - } - sample_bucket_handle(pbucket, pinrec, pctx->nr); - slls_free(pgroup_by_field_values); - } else { - lrec_free(pinrec); - } - return NULL; - } - else { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->pbuckets_by_group->phead; pa != NULL; pa = pa->pnext) { - sample_bucket_t* pbucket = pa->pvvalue; - for (int i = 0; i < pbucket->nused; i++) { - sllv_append(poutrecs, pbucket->plrecs[i]); - pbucket->plrecs[i] = NULL; - } - pbucket->nused = 0; - } - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -// ---------------------------------------------------------------- -sample_bucket_t* sample_bucket_alloc(int nalloc) { - sample_bucket_t* pbucket = mlr_malloc_or_die(sizeof(sample_bucket_t)); - pbucket->nalloc = nalloc; - pbucket->nused = 0; - pbucket->plrecs = mlr_malloc_or_die(nalloc * sizeof(lrec_t*)); - return pbucket; -} - -void sample_bucket_free(sample_bucket_t* pbucket) { - for (int i = 0; i < pbucket->nused; i++) - lrec_free(pbucket->plrecs[i]); - free(pbucket->plrecs); - free(pbucket); -} - -// This is the reservoir-sampling algorithm. -// Here we retain a pointer to an input record (if retained in the sample) or -// free it (if not retained in the sample). -void sample_bucket_handle(sample_bucket_t* pbucket, lrec_t* prec, int record_number) { - if (pbucket->nused < pbucket->nalloc) { - // Always accept new entries until the bucket is full - pbucket->plrecs[pbucket->nused++] = prec; - } else { - int r = get_mtrand_int31() % record_number; - if (r < pbucket->nalloc) { - lrec_free(pbucket->plrecs[r]); - pbucket->plrecs[r] = prec; - } else { - lrec_free(prec); - } - } -} diff --git a/c/mapping/mapper_sec2gmt.c b/c/mapping/mapper_sec2gmt.c deleted file mode 100644 index 937b0232a..000000000 --- a/c/mapping/mapper_sec2gmt.c +++ /dev/null @@ -1,142 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "lib/mvfuncs.h" -#include "containers/slls.h" -#include "containers/mixutil.h" -#include "cli/argparse.h" -#include "mapping/mappers.h" - -typedef struct _mapper_sec2gmt_state_t { - slls_t* pfield_names; - char* format_string; -} mapper_sec2gmt_state_t; - -static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_sec2gmt_alloc(slls_t* pfield_names, int num_decimal_places); -static void mapper_sec2gmt_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_sec2gmt_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_sec2gmt_setup = { - .verb = "sec2gmt", - .pusage_func = mapper_sec2gmt_usage, - .pparse_func = mapper_sec2gmt_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {comma-separated list of field names}\n", argv0, verb); - fprintf(o, "Replaces a numeric field representing seconds since the epoch with the\n"); - fprintf(o, "corresponding GMT timestamp; leaves non-numbers as-is. This is nothing\n"); - fprintf(o, "more than a keystroke-saver for the sec2gmt function:\n"); - fprintf(o, " %s %s time1,time2\n", argv0, verb); - fprintf(o, "is the same as\n"); - fprintf(o, " %s put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)'\n", argv0); - fprintf(o, "Options:\n"); - fprintf(o, "-1 through -9: format the seconds using 1..9 decimal places, respectively.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int num_decimal_places = 0; - - char* verb = argv[*pargi]; - if ((argc - *pargi) < 1) { - mapper_sec2gmt_usage(stderr, argv[0], verb); - return NULL; - } - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_value_flag(pstate, "-1", 1, &num_decimal_places); - ap_define_int_value_flag(pstate, "-2", 2, &num_decimal_places); - ap_define_int_value_flag(pstate, "-3", 3, &num_decimal_places); - ap_define_int_value_flag(pstate, "-4", 4, &num_decimal_places); - ap_define_int_value_flag(pstate, "-5", 5, &num_decimal_places); - ap_define_int_value_flag(pstate, "-6", 6, &num_decimal_places); - ap_define_int_value_flag(pstate, "-7", 7, &num_decimal_places); - ap_define_int_value_flag(pstate, "-8", 8, &num_decimal_places); - ap_define_int_value_flag(pstate, "-9", 9, &num_decimal_places); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_sec2gmt_usage(stderr, argv[0], verb); - return NULL; - } - ap_free(pstate); - - if ((argc - *pargi) < 1) { - mapper_sec2gmt_usage(stderr, argv[0], verb); - return NULL; - } - - char* field_names_string = argv[(*pargi)++]; - slls_t* pfield_names = slls_from_line(field_names_string, ',', FALSE); - - return mapper_sec2gmt_alloc(pfield_names, num_decimal_places); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sec2gmt_alloc(slls_t* pfield_names, int num_decimal_places) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_sec2gmt_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sec2gmt_state_t)); - pstate->pfield_names = pfield_names; - - switch(num_decimal_places) { - case 0: pstate->format_string = ISO8601_TIME_FORMAT; break; - case 1: pstate->format_string = ISO8601_TIME_FORMAT_1; break; - case 2: pstate->format_string = ISO8601_TIME_FORMAT_2; break; - case 3: pstate->format_string = ISO8601_TIME_FORMAT_3; break; - case 4: pstate->format_string = ISO8601_TIME_FORMAT_4; break; - case 5: pstate->format_string = ISO8601_TIME_FORMAT_5; break; - case 6: pstate->format_string = ISO8601_TIME_FORMAT_6; break; - case 7: pstate->format_string = ISO8601_TIME_FORMAT_7; break; - case 8: pstate->format_string = ISO8601_TIME_FORMAT_8; break; - case 9: pstate->format_string = ISO8601_TIME_FORMAT_9; break; - default: MLR_INTERNAL_CODING_ERROR(); break; - } - - pmapper->pprocess_func = mapper_sec2gmt_process; - pmapper->pvstate = (void*)pstate; - pmapper->pfree_func = mapper_sec2gmt_free; - - return pmapper; -} - -static void mapper_sec2gmt_free(mapper_t* pmapper, context_t* _) { - mapper_sec2gmt_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pfield_names); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_sec2gmt_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of stream - return sllv_single(NULL); - - mapper_sec2gmt_state_t* pstate = (mapper_sec2gmt_state_t*)pvstate; - - for (sllse_t* pe = pstate->pfield_names->phead; pe != NULL; pe = pe->pnext) { - char* name = pe->value; - char* sval = lrec_get(pinrec, name); - if (sval == NULL) - continue; - - if (*sval == 0) { - lrec_put(pinrec, name, "", NO_FREE); - } else { - mv_t mval = mv_scan_number_nullable(sval); - if (!mv_is_error(&mval)) { - mv_t stamp = time_string_from_seconds(&mval, pstate->format_string, TIMEZONE_HANDLING_GMT); - lrec_put(pinrec, name, stamp.u.strv, FREE_ENTRY_VALUE); - } - } - } - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_sec2gmtdate.c b/c/mapping/mapper_sec2gmtdate.c deleted file mode 100644 index ecb224f13..000000000 --- a/c/mapping/mapper_sec2gmtdate.c +++ /dev/null @@ -1,101 +0,0 @@ -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "lib/mvfuncs.h" -#include "containers/slls.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" - -typedef struct _mapper_sec2gmtdate_state_t { - slls_t* pfield_names; -} mapper_sec2gmtdate_state_t; - -static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_sec2gmtdate_alloc(slls_t* pfield_names); -static void mapper_sec2gmtdate_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_sec2gmtdate_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_sec2gmtdate_setup = { - .verb = "sec2gmtdate", - .pusage_func = mapper_sec2gmtdate_usage, - .pparse_func = mapper_sec2gmtdate_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s {comma-separated list of field names}\n", argv0, verb); - fprintf(o, "Replaces a numeric field representing seconds since the epoch with the\n"); - fprintf(o, "corresponding GMT year-month-day timestamp; leaves non-numbers as-is.\n"); - fprintf(o, "This is nothing more than a keystroke-saver for the sec2gmtdate function:\n"); - fprintf(o, " %s %s time1,time2\n", argv0, verb); - fprintf(o, "is the same as\n"); - fprintf(o, " %s put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)'\n", argv0); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 2) { - mapper_sec2gmtdate_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - // verb: - (*pargi)++; - // field names: - char* field_names_string = argv[(*pargi)++]; - slls_t* pfield_names = slls_from_line(field_names_string, ',', FALSE); - - return mapper_sec2gmtdate_alloc(pfield_names); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sec2gmtdate_alloc(slls_t* pfield_names) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_sec2gmtdate_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sec2gmtdate_state_t)); - pstate->pfield_names = pfield_names; - pmapper->pprocess_func = mapper_sec2gmtdate_process; - pmapper->pvstate = (void*)pstate; - pmapper->pfree_func = mapper_sec2gmtdate_free; - - return pmapper; -} - -static void mapper_sec2gmtdate_free(mapper_t* pmapper, context_t* _) { - mapper_sec2gmtdate_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pfield_names); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_sec2gmtdate_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec == NULL) // end of stream - return sllv_single(NULL); - - mapper_sec2gmtdate_state_t* pstate = (mapper_sec2gmtdate_state_t*)pvstate; - - for (sllse_t* pe = pstate->pfield_names->phead; pe != NULL; pe = pe->pnext) { - char* name = pe->value; - char* sval = lrec_get(pinrec, name); - if (sval == NULL) - continue; - - if (*sval == 0) { - lrec_put(pinrec, name, "", NO_FREE); - } else { - mv_t mval = mv_scan_number_nullable(sval); - if (!mv_is_error(&mval)) { - mv_t stamp = time_string_from_seconds(&mval, ISO8601_DATE_FORMAT, - TIMEZONE_HANDLING_GMT); - lrec_put(pinrec, name, stamp.u.strv, FREE_ENTRY_VALUE); - } - } - } - return sllv_single(pinrec); -} diff --git a/c/mapping/mapper_seqgen.c b/c/mapping/mapper_seqgen.c deleted file mode 100644 index 2e07e08d7..000000000 --- a/c/mapping/mapper_seqgen.c +++ /dev/null @@ -1,149 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "cli/argparse.h" -#include "mapping/mappers.h" -#include "containers/sllv.h" -#include "lib/mvfuncs.h" - -typedef struct _mapper_seqgen_state_t { - ap_state_t* pargp; - char* field_name; - mv_t start; - mv_t stop; - mv_t step; - int continue_cmp; -} mapper_seqgen_state_t; - -#define DEFAULT_FIELD_NAME "i" -#define DEFAULT_START_STRING "1" -#define DEFAULT_STOP_STRING "100" -#define DEFAULT_STEP_STRING "1" - -static void mapper_seqgen_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_seqgen_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_seqgen_alloc(ap_state_t* pargp, char* field_name, mv_t start, mv_t stop, mv_t step); -static void mapper_seqgen_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_seqgen_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_seqgen_setup = { - .verb = "seqgen", - .pusage_func = mapper_seqgen_usage, - .pparse_func = mapper_seqgen_parse_cli, - .ignores_input = TRUE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_seqgen_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* field_name = DEFAULT_FIELD_NAME; - char* start_string = DEFAULT_START_STRING; - char* stop_string = DEFAULT_STOP_STRING; - char* step_string = DEFAULT_STEP_STRING; - - if ((argc - *pargi) < 1) { - mapper_seqgen_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_flag(pstate, "--start", &start_string); - ap_define_string_flag(pstate, "--stop", &stop_string); - ap_define_string_flag(pstate, "--step", &step_string); - ap_define_string_flag(pstate, "-f", &field_name); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_seqgen_usage(stderr, argv[0], verb); - return NULL; - } - - mv_t start = mv_scan_number_or_die(start_string); - mv_t stop = mv_scan_number_or_die(stop_string); - mv_t step = mv_scan_number_or_die(step_string); - mv_t zero = mv_from_int(0); - - if (mveq(&step, &zero)) { - if (!mveq(&start, &stop)) { - fprintf(stderr, "%s %s: step must not be zero unless start == stop.\n", MLR_GLOBALS.bargv0, verb); - fprintf(stderr, "Got start=%s, stop=%s, end=%s.\n", start_string, stop_string, step_string); - } - return NULL; - } - - mapper_t* pmapper = mapper_seqgen_alloc(pstate, field_name, start, stop, step); - return pmapper; -} - -static void mapper_seqgen_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Produces a sequence of counters. Discards the input record stream. Produces\n"); - fprintf(o, "output as specified by the following options:\n"); - fprintf(o, "-f {name} Field name for counters; default \"%s\".\n", DEFAULT_FIELD_NAME); - fprintf(o, "--start {number} Inclusive start value; default \"%s\".\n", DEFAULT_START_STRING); - fprintf(o, "--stop {number} Inclusive stop value; default \"%s\".\n", DEFAULT_STOP_STRING); - fprintf(o, "--step {number} Step value; default \"%s\".\n", DEFAULT_STEP_STRING); - fprintf(o, "Start, stop, and/or step may be floating-point. Output is integer if start,\n"); - fprintf(o, "stop, and step are all integers. Step may be negative. It may not be zero\n"); - fprintf(o, "unless start == stop.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_seqgen_alloc(ap_state_t* pargp, char* field_name, mv_t start, mv_t stop, mv_t step) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - mapper_seqgen_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_seqgen_state_t)); - - pstate->pargp = pargp; - pstate->field_name = field_name; - pstate->start = start; - pstate->stop = stop; - pstate->step = step; - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_seqgen_process; - pmapper->pfree_func = mapper_seqgen_free; - - return pmapper; -} -static void mapper_seqgen_free(mapper_t* pmapper, context_t* _) { - mapper_seqgen_state_t* pstate = pmapper->pvstate; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_seqgen_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - // Only produce data at end of input stream. Discard the input stream. - if (pinrec != NULL) { - pctx->force_eof = TRUE; - lrec_free(pinrec); - return NULL; - } - - mapper_seqgen_state_t* pstate = pvstate; - - int continue_cmp = 1; - mv_t zero = mv_from_int(0); - if (mv_i_nn_lt(&pstate->step, &zero)) { - continue_cmp = -1; - } - - sllv_t* poutrecs = sllv_alloc(); - for ( - mv_t counter = pstate->start; - mv_nn_comparator(&counter, &pstate->stop) != continue_cmp; - counter = x_xx_plus_func(&counter, &pstate->step) - ) { - lrec_t* poutrec = lrec_unbacked_alloc(); - lrec_put(poutrec, pstate->field_name, mv_alloc_format_val(&counter), FREE_ENTRY_VALUE); - pctx->nr++; - pctx->fnr++; - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - - return poutrecs; -} diff --git a/c/mapping/mapper_shuffle.c b/c/mapping/mapper_shuffle.c deleted file mode 100644 index 4db8a60cf..000000000 --- a/c/mapping/mapper_shuffle.c +++ /dev/null @@ -1,140 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mtrand.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -// ---------------------------------------------------------------- -typedef struct _mapper_shuffle_state_t { - ap_state_t* pargp; - sllv_t* precs; -} mapper_shuffle_state_t; - -static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_shuffle_alloc(ap_state_t* pargp); -static void mapper_shuffle_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_shuffle_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_shuffle_setup = { - .verb = "shuffle", - .pusage_func = mapper_shuffle_usage, - .pparse_func = mapper_shuffle_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s {no options}\n", argv0, verb); - fprintf(o, "Outputs records randomly permuted. No output records are produced until\n"); - fprintf(o, "all input records are read.\n"); - fprintf(o, "See also %s bootstrap and %s sample.\n", argv0, argv0); -} - -static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_shuffle_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_shuffle_alloc(pstate); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_shuffle_alloc(ap_state_t* pargp) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_shuffle_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_shuffle_state_t)); - - pstate->pargp = pargp; - pstate->precs = sllv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_shuffle_process; - pmapper->pfree_func = mapper_shuffle_free; - - return pmapper; -} - -static void mapper_shuffle_free(mapper_t* pmapper, context_t* _) { - mapper_shuffle_state_t* pstate = pmapper->pvstate; - // Records will have been freed by the emitter; here, free the list structure. - sllv_free(pstate->precs); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_shuffle_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_shuffle_state_t* pstate = pvstate; - - // Not end of input stream: retain the record, and emit nothing until end of stream. - if (pinrec != NULL) { - sllv_append(pstate->precs, pinrec); - return NULL; - } - - sllv_t* poutrecs = sllv_alloc(); - - // Knuth shuffle: - // * Initial permutation is identity. - // * Make a pseudorandom permutation using pseudorandom swaps in the image map. - int n = pstate->precs->length; - int* images = mlr_malloc_or_die(n * sizeof(int)); - for (int i = 0; i < n; i++) - images[i] = i; - - int unused_start = 0; - int num_unused = n; - for (int i = 0; i < n; i++) { - // Select a pseudorandom element from the pool of unused images. - int u = unused_start + num_unused * get_mtrand_double(); - int temp = images[u]; - images[u] = images[i]; - images[i] = temp; - - // Decrease the size of the pool by 1. (Yes, unused_start and k always have the same value. - // Using two variables wastes neglible memory and makes the code easier to understand.) - unused_start++; - num_unused--; - } - - // Make an array of pointers into the input list. - lrec_t** record_array = mlr_malloc_or_die(n * sizeof(lrec_t**)); - sllve_t* pe = pstate->precs->phead; - for (int i = 0; i < n; i++, pe = pe->pnext) { - record_array[i] = pe->pvvalue; - } - - // Transfer from input array to output list. Because permutations are one-to-one maps, - // all input records have ownership transferred exactly once. So, there are no - // records to copy here, or free here. - for (int i = 0; i < n; i++) { - sllv_append(poutrecs, record_array[images[i]]); - } - - free(record_array); - free(images); - - // Null-terminate the output list to signify end of stream. - sllv_append(poutrecs, NULL); - return poutrecs; -} - diff --git a/c/mapping/mapper_skip_trivial_records.c b/c/mapping/mapper_skip_trivial_records.c deleted file mode 100644 index 8447408e1..000000000 --- a/c/mapping/mapper_skip_trivial_records.c +++ /dev/null @@ -1,95 +0,0 @@ -#include "cli/argparse.h" -#include "mapping/mappers.h" -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" - -typedef struct _mapper_skip_trivial_records_state_t { - ap_state_t* pargp; -} mapper_skip_trivial_records_state_t; - -static void mapper_skip_trivial_records_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_skip_trivial_records_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_skip_trivial_records_alloc(ap_state_t* pargp); -static void mapper_skip_trivial_records_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_skip_trivial_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_skip_trivial_records_setup = { - .verb = "skip-trivial-records", - .pusage_func = mapper_skip_trivial_records_usage, - .pparse_func = mapper_skip_trivial_records_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_skip_trivial_records_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_skip_trivial_records_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pstate = ap_alloc(); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_skip_trivial_records_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_skip_trivial_records_alloc(pstate); - return pmapper; -} - -static void mapper_skip_trivial_records_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Passes through all records except:\n"); - fprintf(o, "* those with zero fields;\n"); - fprintf(o, "* those for which all fields have empty value.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_skip_trivial_records_alloc(ap_state_t* pargp) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - mapper_skip_trivial_records_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_skip_trivial_records_state_t)); - pstate->pargp = pargp; - pmapper->pvstate = pstate; - - pmapper->pprocess_func = NULL; - pmapper->pprocess_func = mapper_skip_trivial_records_process; - pmapper->pfree_func = mapper_skip_trivial_records_free; - return pmapper; -} -static void mapper_skip_trivial_records_free(mapper_t* pmapper, context_t* _) { - mapper_skip_trivial_records_state_t* pstate = pmapper->pvstate; - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_skip_trivial_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - if (pinrec != NULL) { // not end of record-stream - int has_any = FALSE; - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (*pe->value != 0) { - has_any = TRUE; - break; - } - } - if (has_any) { - return sllv_single(pinrec); - } else { - lrec_free(pinrec); - return NULL; - } - } else { // end of record-stream - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_sort.c b/c/mapping/mapper_sort.c deleted file mode 100644 index d09366be4..000000000 --- a/c/mapping/mapper_sort.c +++ /dev/null @@ -1,375 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" - -// ================================================================ -// OVERVIEW -// -// * Suppose we are sorting records lexically ascending on field "a" and then -// numerically descending on field "x". -// -// * CLI syntax is "mlr sort -f a -nr x". -// -// * We first consume all input records and for each extract the string values -// of fields a and x. For each uniq combination of a-value (e.g. "red", -// "green", "blue") and x-value (e.g. "1", "1.0", "2.4") -- e.g. -// pairs ["red","1"], and so on -- we keep a linked list of all the records -// having those sort-key values, in the order encountered. -// -// * For each of those unique sort-key-value combinations, we also parse the -// numerical fields at this point into an array of union-string-double. -// E.g. the list ["red", "1.0"] maps to the array ["red", 1.0]. -// -// * The pairing of parsed-value array the linked list of same-key-value records -// is called a *bucket*. E.g the records -// {"a":"red","b":"circle","x":"1.0","y":"3.9"} -// {"a":"red","b":"square","x":"1.0","z":"5.7", "q":"even"} -// would both land in the ["red","1.0"] bucket. -// -// * Buckets are retained in a hash map: the key is the string-list of the form -// ["red","1.0"] and the value is the pairing of parsed-value array ["red",1.0] -// and linked list of records. -// -// * Once all the input records are ingested into this hash map, we copy the -// bucket-pointers into an array and sort it: this being the pairing of -// parsed-value array and linked list of records. The comparator callback for -// the sort walks through the parsed-value arrays one slot at a time, -// looking at the first difference, e.g. if one has "a"="red" and the other -// has "a"="blue". If the first field matches then the sort moves to the -// second field, and so on. -// -// * Recall in particular that string keys ["a":"red","x":"1"] and -// ["a":"red","x":"1.0"] map to different buckets, but will sort equally. -// -// ================================================================ - -#define SORT_NUMERIC 0x80 -#define SORT_DESCENDING 0x40 - -typedef struct _mapper_sort_state_t { - // Input parameters - slls_t* pkey_field_names; // Fields to sort on - int* sort_params; // Lexical/numeric; ascending/descending - int do_sort; // If false, just do group-by - // Sort state: buckets of like records. - lhmslv_t* pbuckets_by_key_field_values; - sllv_t* precords_missing_sort_keys; -} mapper_sort_state_t; - -// Each sort key is string or number; use union to save space. -typedef struct _typed_sort_key_t { - union { - char* s; - double d; - } u; -} typed_sort_key_t; - -typedef struct _sort_bucket_t { - typed_sort_key_t* typed_sort_keys; - sllv_t* precords; -} sort_bucket_t; - -// ---------------------------------------------------------------- -static void mapper_sort_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static void mapper_group_by_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_sort_alloc(slls_t* pkey_field_names, int* sort_params, int do_sort); -static void mapper_sort_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_sort_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static typed_sort_key_t* parse_sort_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx); - -// qsort is non-reentrant but qsort_r isn't portable. But since Miller is -// single-threaded, even if we've got one sort chained to another, only one is -// active at a time. We adopt the convention that we set the sort params -// right before the sort. -static int* pcmp_sort_params = NULL; -static int cmp_params_length = 0; -static int pbucket_comparator(const void* pva, const void* pvb); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_sort_setup = { - .verb = "sort", - .pusage_func = mapper_sort_usage, - .pparse_func = mapper_sort_parse_cli, - .ignores_input = FALSE, -}; - -mapper_setup_t mapper_group_by_setup = { - .verb = "group-by", - .pusage_func = mapper_group_by_usage, - .pparse_func = mapper_group_by_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_sort_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s {flags}\n", argv0, verb); - fprintf(o, "Flags:\n"); - fprintf(o, " -f {comma-separated field names} Lexical ascending\n"); - fprintf(o, " -n {comma-separated field names} Numerical ascending; nulls sort last\n"); - fprintf(o, " -nf {comma-separated field names} Same as -n\n"); - fprintf(o, " -r {comma-separated field names} Lexical descending\n"); - fprintf(o, " -nr {comma-separated field names} Numerical descending; nulls sort first\n"); - fprintf(o, "Sorts records primarily by the first specified field, secondarily by the second\n"); - fprintf(o, "field, and so on. (Any records not having all specified sort keys will appear\n"); - fprintf(o, "at the end of the output, in the order they were encountered, regardless of the\n"); - fprintf(o, "specified sort order.) The sort is stable: records that compare equal will sort\n"); - fprintf(o, "in the order they were encountered in the input record stream.\n"); - fprintf(o, "\n"); - fprintf(o, "Example:\n"); - fprintf(o, " %s %s -f a,b -nr x,y,z\n", argv0, verb); - fprintf(o, "which is the same as:\n"); - fprintf(o, " %s %s -f a -f b -nr x -nr y -nr z\n", argv0, verb); -} - -static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 3) { - mapper_sort_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - slls_t* pnames = slls_alloc(); - slls_t* pflags = slls_alloc(); - - while ((argc - *pargi) >= 1 && argv[*pargi][0] == '-') { - if ((argc - *pargi) < 2) - mapper_sort_usage(stderr, argv[0], verb); - char* flag = argv[*pargi]; - char* value = argv[*pargi+1]; - *pargi += 2; - - if (streq(flag, "-f")) { - } else if (streq(flag, "-n")) { - } else if (streq(flag, "-nf")) { - } else if (streq(flag, "-r")) { - } else if (streq(flag, "-nr")) { - } else { - mapper_sort_usage(stderr, argv[0], verb); - } - slls_t* pnames_for_flag = slls_from_line(value, ',', FALSE); - // E.g. with "-nr a,b,c", replicate the "-nr" flag three times. - for (sllse_t* pe = pnames_for_flag->phead; pe != NULL; pe = pe->pnext) { - slls_append_no_free(pnames, pe->value); - slls_append_no_free(pflags, flag); - } - slls_free(pnames_for_flag); - } - - if (pnames->length < 1) - mapper_sort_usage(stderr, argv[0], verb); - - // Convert the list such as ["-nf","-nf","-r","-r","-r"] into an array of - // bit-flags, one per sort-key field. - int* opt_array = mlr_malloc_or_die(pnames->length * sizeof(int)); - sllse_t* pe; - int di; - for (pe = pflags->phead, di = 0; pe != NULL; pe = pe->pnext, di++) { - char* flag = pe->value; - int opt = - streq(flag, "-nf") ? SORT_NUMERIC : - streq(flag, "-n") ? SORT_NUMERIC : - streq(flag, "-r") ? SORT_DESCENDING : - streq(flag, "-nr") ? SORT_NUMERIC|SORT_DESCENDING : - 0; - opt_array[di] =opt; - } - slls_free(pflags); - - return mapper_sort_alloc(pnames, opt_array, TRUE); -} - -// ---------------------------------------------------------------- -static void mapper_group_by_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s {comma-separated field names}\n", argv0, verb); - fprintf(o, "Outputs records in batches having identical values at specified field names.\n"); -} - -static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 2) { - mapper_group_by_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - - slls_t* pnames = slls_from_line(argv[*pargi+1], ',', FALSE); - int* opt_array = mlr_malloc_or_die(pnames->length * sizeof(int)); - for (int i = 0; i < pnames->length; i++) - opt_array[i] = 0; - - *pargi += 2; - return mapper_sort_alloc(pnames, opt_array, FALSE); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sort_alloc(slls_t* pkey_field_names, int* sort_params, int do_sort) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_sort_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sort_state_t)); - - pstate->pkey_field_names = pkey_field_names; - pstate->sort_params = sort_params; - pstate->pbuckets_by_key_field_values = lhmslv_alloc(); - pstate->precords_missing_sort_keys = sllv_alloc(); - pstate->do_sort = do_sort; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_sort_process; - pmapper->pfree_func = mapper_sort_free; - - return pmapper; -} - -// ---------------------------------------------------------------- -static void mapper_sort_free(mapper_t* pmapper, context_t* _) { - mapper_sort_state_t* pstate = pmapper->pvstate; - if (pstate->pkey_field_names != NULL) - slls_free(pstate->pkey_field_names); - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->pbuckets_by_key_field_values->phead; pa != NULL; pa = pa->pnext) { - sort_bucket_t* pbucket = pa->pvvalue; - free(pbucket->typed_sort_keys); - free(pbucket); - // precords freed in emitter - } - lhmslv_free(pstate->pbuckets_by_key_field_values); - sllv_free(pstate->precords_missing_sort_keys); - free(pstate->sort_params); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_sort_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_sort_state_t* pstate = pvstate; - if (pinrec != NULL) { - // Consume another input record. - slls_t* pkey_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pkey_field_names); - if (pkey_field_values == NULL) { - sllv_append(pstate->precords_missing_sort_keys, pinrec); - } else { - sort_bucket_t* pbucket = lhmslv_get(pstate->pbuckets_by_key_field_values, pkey_field_values); - if (pbucket == NULL) { // New key-field-value: new bucket and hash-map entry - slls_t* pkey_field_values_copy = slls_copy(pkey_field_values); - sort_bucket_t* pbucket = mlr_malloc_or_die(sizeof(sort_bucket_t)); - pbucket->typed_sort_keys = parse_sort_keys(pkey_field_values_copy, pstate->sort_params, pctx); - pbucket->precords = sllv_alloc(); - sllv_append(pbucket->precords, pinrec); - lhmslv_put(pstate->pbuckets_by_key_field_values, pkey_field_values_copy, pbucket, - FREE_ENTRY_KEY); - } else { // Previously seen key-field-value: append record to bucket - sllv_append(pbucket->precords, pinrec); - } - slls_free(pkey_field_values); - } - return NULL; - } else if (!pstate->do_sort) { - // End of input stream: do output for group-by - sllv_t* poutput = sllv_alloc(); - for (lhmslve_t* pe = pstate->pbuckets_by_key_field_values->phead; pe != NULL; pe = pe->pnext) { - sort_bucket_t* pbucket = pe->pvvalue; - sllv_transfer(poutput, pbucket->precords); - sllv_free(pbucket->precords); - } - sllv_transfer(poutput, pstate->precords_missing_sort_keys); - sllv_append(poutput, NULL); - return poutput; - } else { - // End of input stream: sort bucket labels - int num_buckets = pstate->pbuckets_by_key_field_values->num_occupied; - sort_bucket_t** pbucket_array = mlr_malloc_or_die(num_buckets * sizeof(sort_bucket_t*)); - - // Copy bucket-pointers to an array for qsort - int i = 0; - for (lhmslve_t* pe = pstate->pbuckets_by_key_field_values->phead; pe != NULL; pe = pe->pnext, i++) { - pbucket_array[i] = pe->pvvalue; - } - - pcmp_sort_params = pstate->sort_params; - cmp_params_length = pstate->pkey_field_names->length; - - qsort(pbucket_array, num_buckets, sizeof(sort_bucket_t*), pbucket_comparator); - - pcmp_sort_params = NULL; - cmp_params_length = 0; - - // Emit each bucket's record - sllv_t* poutput = sllv_alloc(); - for (i = 0; i < num_buckets; i++) { - sllv_t* plist = pbucket_array[i]->precords; - sllv_transfer(poutput, plist); - sllv_free(plist); - } - sllv_transfer(poutput, pstate->precords_missing_sort_keys); - free(pbucket_array); - sllv_append(poutput, NULL); // Signal end of output-record stream. - return poutput; - } -} - -static int pbucket_comparator(const void* pva, const void* pvb) { - // We are sorting an array of sort_bucket_t*. - const sort_bucket_t** pba = (const sort_bucket_t**)pva; - const sort_bucket_t** pbb = (const sort_bucket_t**)pvb; - typed_sort_key_t* akeys = (*pba)->typed_sort_keys; - typed_sort_key_t* bkeys = (*pbb)->typed_sort_keys; - for (int i = 0; i < cmp_params_length; i++) { - int sort_param = pcmp_sort_params[i]; - if (sort_param & SORT_NUMERIC) { - double a = akeys[i].u.d; - double b = bkeys[i].u.d; - if (isnan(a)) { // null input value - if (!isnan(b)) { - return (sort_param & SORT_DESCENDING) ? -1 : 1; - } - } else if (isnan(b)) { - return (sort_param & SORT_DESCENDING) ? 1 : -1; - } else { - double d = a - b; - int s = (d < 0) ? -1 : (d > 0) ? 1 : 0; - if (s != 0) - return (sort_param & SORT_DESCENDING) ? -s : s; - } - } else { - int s = strcmp(akeys[i].u.s, bkeys[i].u.s); - if (s != 0) - return (sort_param & SORT_DESCENDING) ? -s : s; - } - } - return 0; -} - -// E.g. parse the list ["red","1.0"] into the array ["red",1.0]. -static typed_sort_key_t* parse_sort_keys(slls_t* pkey_field_values, int* sort_params, context_t* pctx) { - typed_sort_key_t* typed_sort_keys = mlr_malloc_or_die(pkey_field_values->length * sizeof(typed_sort_key_t)); - int i = 0; - for (sllse_t* pe = pkey_field_values->phead; pe != NULL; pe = pe->pnext, i++) { - if (sort_params[i] & SORT_NUMERIC) { - if (*pe->value == 0) { // null input value - typed_sort_keys[i].u.d = nan(""); - } else if (!mlr_try_float_from_string(pe->value, &typed_sort_keys[i].u.d)) { - fprintf(stderr, "%s: couldn't parse \"%s\" as number in file \"%s\" record %lld.\n", - MLR_GLOBALS.bargv0, pe->value, pctx->filename, pctx->fnr); - exit(1); - } - } else { - typed_sort_keys[i].u.s = pe->value; - } - } - return typed_sort_keys; -} diff --git a/c/mapping/mapper_sort_within_records.c b/c/mapping/mapper_sort_within_records.c deleted file mode 100644 index 964c69eeb..000000000 --- a/c/mapping/mapper_sort_within_records.c +++ /dev/null @@ -1,154 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/lhmsv.h" -#include "mapping/mappers.h" - -#define SORT_BY_KEY 0x10 -#define SORT_BY_VALUE 0x20 - -#define SORT_NUMERIC 0x40 -#define SORT_DESCENDING 0x80 - -typedef struct _mapper_sort_within_records_state_t { - // Input parameters - // TODO: - //int sort_by; - //int sort_how; - //int reverse; -} mapper_sort_within_records_state_t; - -//// Each sort key is string or number; use union to save space. -//typedef struct _typed_sort_within_records_key_t { -// union { -// char* s; -// double d; -// } u; -//} typed_sort_within_records_key_t; - -// ---------------------------------------------------------------- -static void mapper_sort_within_records_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_sort_within_records_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_sort_within_records_alloc(); -static void mapper_sort_within_records_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_sort_within_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -//// qsort is non-reentrant but qsort_r isn't portable. But since Miller is -//// single-threaded, even if we've got one sort chained to another, only one is -//// active at a time. We adopt the convention that we set the sort params -//// right before the sort. -//static int* pcmp_sort_within_records_params = NULL; -//static int cmp_params_length = 0; -//static int pbucket_comparator(const void* pva, const void* pvb); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_sort_within_records_setup = { - .verb = "sort-within-records", - .pusage_func = mapper_sort_within_records_usage, - .pparse_func = mapper_sort_within_records_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_sort_within_records_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [no options]\n", argv0, verb); - fprintf(o, "Outputs records sorted lexically ascending by keys.\n"); - // TODO - //fprintf(o, "Usage: %s %s {flags}\n", argv0, verb); - //fprintf(o, "Flags:\n"); - //fprintf(o, " -k Sort by keys\n"); - //fprintf(o, " -v Sort by values\n"); - //fprintf(o, " -n Sort numerically\n"); - //fprintf(o, " -f Sort lexically (default)\n"); - //fprintf(o, " -r Reverse sort\n"); - //fprintf(o, " -nk Shorthand for -n -k\n"); - //fprintf(o, " -nv Shorthand for -n -v\n"); - //fprintf(o, " -rk Shorthand for -r -k\n"); - //fprintf(o, " -rv Shorthand for -r -v\n"); - //fprintf(o, " -nrk Shorthand for -n -r -k\n"); - //fprintf(o, " -nrv Shorthand for -n -r -v\n"); -} - -static mapper_t* mapper_sort_within_records_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_sort_within_records_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - *pargi += 1; - - return mapper_sort_within_records_alloc(); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_sort_within_records_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_sort_within_records_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_sort_within_records_state_t)); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_sort_within_records_process; - pmapper->pfree_func = mapper_sort_within_records_free; - - return pmapper; -} - -// ---------------------------------------------------------------- -static void mapper_sort_within_records_free(mapper_t* pmapper, context_t* _) { - mapper_sort_within_records_state_t* pstate = pmapper->pvstate; - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -// For qsort -static int key_comparator(const void* pva, const void* pvb) { - const char *pa = *(const char**)pva; - const char *pb = *(const char**)pvb; - return strcmp(pa, pb); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_sort_within_records_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - - if (pinrec == NULL) { // end of record stream - return sllv_single(NULL); - } - - // Get keys as array - lhmsv_t* keys_to_entries = lhmsv_alloc(); - int n = pinrec->field_count; - char** keys_array = mlr_malloc_or_die(n * sizeof(char*)); - int i = 0; - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - keys_array[i] = pe->key; - lhmsv_put(keys_to_entries, pe->key, pe, NO_FREE); - i++; - } - - // Sort the keys - qsort(keys_array, n, sizeof(char*), key_comparator); - - // Make a new record - lrec_t* poutrec = lrec_unbacked_alloc(); - - for (i = 0; i < n; i++) { - lrece_t* pe = lhmsv_get(keys_to_entries, keys_array[i]); - lrec_put( - poutrec, - mlr_strdup_or_die(pe->key), - mlr_strdup_or_die(pe->value), - FREE_ENTRY_KEY | FREE_ENTRY_VALUE - ); - } - lrec_free(pinrec); - lhmsv_free(keys_to_entries); - free(keys_array); - - return sllv_single(poutrec); -} diff --git a/c/mapping/mapper_stats1.c b/c/mapping/mapper_stats1.c deleted file mode 100644 index 95738d060..000000000 --- a/c/mapping/mapper_stats1.c +++ /dev/null @@ -1,695 +0,0 @@ -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/string_array.h" -#include "lib/mlrregex.h" -#include "cli/argparse.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "lib/mlrval.h" -#include "mapping/mappers.h" -#include "mapping/stats1_accumulators.h" - -static char* fake_acc_name_for_setups = "__setup_done__"; - -// ---------------------------------------------------------------- -struct _mapper_stats1_state_t; // forward reference -typedef void group_by_ingestor_func_t(lrec_t* pinrec, struct _mapper_stats1_state_t* pstate); -typedef void value_ingestor_func_t(lrec_t* pinrec, struct _mapper_stats1_state_t* pstate, - lhmsv_t* pgroup_by_field_values_to_acc_fields); -typedef sllv_t* emitter_func_t(struct _mapper_stats1_state_t* pstate); - -typedef struct _mapper_stats1_state_t { - ap_state_t* pargp; - - slls_t* paccumulator_names; - string_array_t* pvalue_field_names; // parameter - string_array_t* pvalue_field_values; // scratch space used per-record - slls_t* pgroup_by_field_names; // parameter - - group_by_ingestor_func_t* pgroup_by_ingestor; - value_ingestor_func_t* pvalue_ingestor; - emitter_func_t* pemitter; - - regex_t* value_field_regexes; - int num_value_field_regexes; - int invert_regex_value_field_names; - - regex_t* group_by_field_regexes; - int num_group_by_field_regexes; - int invert_regex_group_by_field_names; - - lhmslv_t* groups_without_group_by_regex; - lhmslv_t* groups_with_group_by_regex; - int do_iterative_stats; - int allow_int_float; - int do_interpolated_percentiles; -} mapper_stats1_state_t; - - -static void mapper_stats1_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_stats1_alloc(ap_state_t* pargp, slls_t* paccumulator_names, - string_array_t* pvalue_field_names, int do_regex_value_field_names, int invert_regex_value_field_names, - slls_t* pgroup_by_field_names, int do_regex_group_by_field_names, int invert_regex_group_by_field_names, - int do_iterative_stats, int allow_int_float, int do_interpolated_percentiles); -static void mapper_stats1_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_stats1_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static void mapper_stats1_group_by_ingest_without_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate); -static void mapper_stats1_group_by_ingest_with_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate); -static void mapper_stats1_value_ingest_without_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate, - lhmsv_t* pgroup_by_field_values_to_acc_fields); -static void mapper_stats1_value_ingest_with_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate, - lhmsv_t* pgroup_by_field_values_to_acc_fields); - -static void mapper_stats1_ingest_name_value(lrec_t* pinrec, mapper_stats1_state_t* pstate, - char* value_field_name, char* value_field_sval, lhmsv_t* pgroup_to_acc_field); -static sllv_t* mapper_stats1_emit_all_without_group_by_regexes(mapper_stats1_state_t* pstate); -static sllv_t* mapper_stats1_emit_all_with_group_by_regexes(mapper_stats1_state_t* pstate); -static lrec_t* mapper_stats1_emit(mapper_stats1_state_t* pstate, lrec_t* poutrec, - char* value_field_name, lhmsv_t* acc_field_to_acc_state_out); - -typedef struct _acc_map_pair_t { - lhmsv_t* pin; - lhmsv_t* pout; -} acc_map_pair_t; - -// ---------------------------------------------------------------- -mapper_setup_t mapper_stats1_setup = { - .verb = "stats1", - .pusage_func = mapper_stats1_usage, - .pparse_func = mapper_stats1_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_stats1_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Computes univariate statistics for one or more given fields, accumulated across\n"); - fprintf(o, "the input record stream.\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or\n"); - fprintf(o, " one or more of:\n"); - for (int i = 0; i < stats1_acc_lookup_table_length; i++) { - fprintf(o, " %-9s %s\n", stats1_acc_lookup_table[i].name, stats1_acc_lookup_table[i].desc); - } - fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics\n"); - fprintf(o, "--fr {regex} Regex for value-field names on which to compute statistics\n"); - fprintf(o, " (compute statistics on values in all field names matching regex)\n"); - fprintf(o, "--fx {regex} Inverted regex for value-field names on which to compute statistics\n"); - fprintf(o, " (compute statistics on values in all field names not matching regex)\n"); - fprintf(o, "-g {d,e,f} Optional group-by-field names\n"); - fprintf(o, "--gr {regex} Regex for optional group-by-field names\n"); - fprintf(o, " (group by values in field names matching regex)\n"); - fprintf(o, "--gx {regex} Inverted regex for optional group-by-field names\n"); - fprintf(o, " (group by values in field names not matching regex)\n"); - fprintf(o, "--grfx {regex} Shorthand for --gr {regex} --fx {that same regex}\n"); - fprintf(o, "-i Use interpolated percentiles, like R's type=7; default like type=1.\n"); - fprintf(o, " Not sensical for string-valued fields.\n"); - fprintf(o, "-s Print iterative stats. Useful in tail -f contexts (in which\n"); - fprintf(o, " case please avoid pprint-format output since end of input\n"); - fprintf(o, " stream will never be seen).\n"); - fprintf(o, "-F Computes integerable things (e.g. count) in floating point.\n"); - fprintf(o, "Example: %s %s -a min,p10,p50,p90,max -f value -g size,shape\n", argv0, verb); - fprintf(o, "Example: %s %s -a count,mode -f size\n", argv0, verb); - fprintf(o, "Example: %s %s -a count,mode -f size -g shape\n", argv0, verb); - fprintf(o, "Example: %s %s -a count,mode --fr '^[a-h].*$' -gr '^k.*$'\n", argv0, verb); - fprintf(o, " This computes count and mode statistics on all field names beginning\n"); - fprintf(o, " with a through h, grouped by all field names starting with k.\n"); - fprintf(o, "Notes:\n"); - fprintf(o, "* p50 and median are synonymous.\n"); - fprintf(o, "* min and max output the same results as p0 and p100, respectively, but use\n"); - fprintf(o, " less memory.\n"); - fprintf(o, "* String-valued data make sense unless arithmetic on them is required,\n"); - fprintf(o, " e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data,\n"); - fprintf(o, " numbers are less than strings.\n"); - fprintf(o, "* count and mode allow text input; the rest require numeric input.\n"); - fprintf(o, " In particular, 1 and 1.0 are distinct text for count and mode.\n"); - fprintf(o, "* When there are mode ties, the first-encountered datum wins.\n"); -} - -static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* paccumulator_names = NULL; - string_array_t* pvalue_field_names = NULL; - slls_t* pgroup_by_field_names = slls_alloc(); - int do_iterative_stats = FALSE; - int allow_int_float = TRUE; - int do_interpolated_percentiles = FALSE; - int do_regex_value_field_names = FALSE; - int invert_regex_value_field_names = FALSE; - int do_regex_group_by_field_names = FALSE; - int invert_regex_group_by_field_names = FALSE; - - char* verb = argv[(*pargi)++]; - - int oargi = *pargi; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-a", &paccumulator_names); - ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); - ap_define_string_array_flag(pstate, "--fr", &pvalue_field_names); - ap_define_string_array_flag(pstate, "--fx", &pvalue_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_string_list_flag(pstate, "--gr", &pgroup_by_field_names); - ap_define_string_list_flag(pstate, "--gx", &pgroup_by_field_names); - ap_define_string_list_flag(pstate, "--grfx", &pgroup_by_field_names); - ap_define_true_flag(pstate, "-s", &do_iterative_stats); - ap_define_false_flag(pstate, "-F", &allow_int_float); - ap_define_true_flag(pstate, "-i", &do_interpolated_percentiles); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_stats1_usage(stderr, argv[0], verb); - return NULL; - } - - int nargi = *pargi; - for (int argi = oargi; argi < nargi; argi++) { - if (streq(argv[argi], "--fr")) { - do_regex_value_field_names = TRUE; - } else if (streq(argv[argi], "--fx")) { - do_regex_value_field_names = TRUE; - invert_regex_value_field_names = TRUE; - } else if (streq(argv[argi], "--gr")) { - do_regex_group_by_field_names = TRUE; - } else if (streq(argv[argi], "--gx")) { - do_regex_group_by_field_names = TRUE; - invert_regex_group_by_field_names = TRUE; - } else if (streq(argv[argi], "--grfx")) { - do_regex_group_by_field_names = TRUE; - do_regex_value_field_names = TRUE; - invert_regex_value_field_names = TRUE; - pvalue_field_names = string_array_alloc(pgroup_by_field_names->length); - int i = 0; - for (sllse_t* pe = pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext, i++) { - pvalue_field_names->strings[i] = pe->value; - i++; - } - } - } - - if (paccumulator_names == NULL || pvalue_field_names == NULL) { - mapper_stats1_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_stats1_alloc(pstate, paccumulator_names, - pvalue_field_names, do_regex_value_field_names, invert_regex_value_field_names, - pgroup_by_field_names, do_regex_group_by_field_names, invert_regex_group_by_field_names, - do_iterative_stats, allow_int_float, do_interpolated_percentiles); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_stats1_alloc(ap_state_t* pargp, slls_t* paccumulator_names, - string_array_t* pvalue_field_names, int do_regex_value_field_names, int invert_regex_value_field_names, - slls_t* pgroup_by_field_names, int do_regex_group_by_field_names, int invert_regex_group_by_field_names, - int do_iterative_stats, int allow_int_float, int do_interpolated_percentiles) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_stats1_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_stats1_state_t)); - - pstate->pargp = pargp; - pstate->paccumulator_names = paccumulator_names; - - if (do_regex_value_field_names) { - pstate->pvalue_field_names = NULL; - pstate->pvalue_field_values = NULL; - pstate->num_value_field_regexes = pvalue_field_names->length; - pstate->value_field_regexes = mlr_malloc_or_die(sizeof(regex_t) * pstate->num_value_field_regexes); - for (int i = 0; i < pvalue_field_names->length; i++) { - // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. - // Strip off the leading " and trailing " or "i. - regcomp_or_die_quoted(&pstate->value_field_regexes[i], pvalue_field_names->strings[i], REG_NOSUB); - } - string_array_free(pvalue_field_names); - pstate->invert_regex_value_field_names = invert_regex_value_field_names; - pstate->pvalue_ingestor = mapper_stats1_value_ingest_with_regexes; - } else { - pstate->pvalue_field_names = pvalue_field_names; - pstate->pvalue_field_values = string_array_alloc(pvalue_field_names->length); - pstate->value_field_regexes = NULL; - pstate->num_value_field_regexes = 0; - pstate->invert_regex_value_field_names = FALSE; - pstate->pvalue_ingestor = mapper_stats1_value_ingest_without_regexes; - } - - if (do_regex_group_by_field_names) { - pstate->pgroup_by_field_names = NULL; - pstate->num_group_by_field_regexes = pgroup_by_field_names->length; - pstate->group_by_field_regexes = mlr_malloc_or_die(sizeof(regex_t) * pstate->num_group_by_field_regexes); - int i = 0; - for (sllse_t* pe = pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext, i++) { - // Let them type in a.*b if they want, or "a.*b", or "a.*b"i. - // Strip off the leading " and trailing " or "i. - regcomp_or_die_quoted(&pstate->group_by_field_regexes[i], pe->value, REG_NOSUB); - } - slls_free(pgroup_by_field_names); - pstate->pgroup_by_ingestor = mapper_stats1_group_by_ingest_with_regexes; - pstate->pemitter = mapper_stats1_emit_all_with_group_by_regexes; - pstate->invert_regex_group_by_field_names = invert_regex_group_by_field_names; - pstate->groups_without_group_by_regex = NULL; - pstate->groups_with_group_by_regex = lhmslv_alloc(); - } else { - pstate->pgroup_by_ingestor = mapper_stats1_group_by_ingest_without_regexes; - pstate->pemitter = mapper_stats1_emit_all_without_group_by_regexes; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->group_by_field_regexes = NULL; - pstate->num_group_by_field_regexes = 0; - pstate->invert_regex_group_by_field_names = FALSE; - pstate->groups_without_group_by_regex = lhmslv_alloc(); - pstate->groups_with_group_by_regex = NULL; - } - - pstate->do_iterative_stats = do_iterative_stats; - pstate->allow_int_float = allow_int_float; - pstate->do_interpolated_percentiles = do_interpolated_percentiles; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_stats1_process; - pmapper->pfree_func = mapper_stats1_free; - - return pmapper; -} - -static void mapper_stats1_free(mapper_t* pmapper, context_t* _) { - mapper_stats1_state_t* pstate = pmapper->pvstate; - slls_free(pstate->paccumulator_names); - string_array_free(pstate->pvalue_field_names); - string_array_free(pstate->pvalue_field_values); - slls_free(pstate->pgroup_by_field_names); - - if (pstate->value_field_regexes != NULL) { - for (int i = 0; i < pstate->num_value_field_regexes; i++) - regfree(&pstate->value_field_regexes[i]); - free(pstate->value_field_regexes); - } - - if (pstate->group_by_field_regexes != NULL) { - for (int i = 0; i < pstate->num_group_by_field_regexes; i++) - regfree(&pstate->group_by_field_regexes[i]); - free(pstate->group_by_field_regexes); - } - - // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free - // the void-star hashmap values. - if (pstate->groups_without_group_by_regex != NULL) { - for (lhmslve_t* pa = pstate->groups_without_group_by_regex->phead; pa != NULL; pa = pa->pnext) { - lhmsv_t* pgroup_to_acc_field = pa->pvvalue; - for (lhmsve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { - acc_map_pair_t* pacc_field_to_acc_states = pb->pvvalue; - lhmsv_t* pacc_field_to_acc_state_in = pacc_field_to_acc_states->pin; - lhmsv_t* pacc_field_to_acc_state_out = pacc_field_to_acc_states->pout; - for (lhmsve_t* pc = pacc_field_to_acc_state_out->phead; pc != NULL; pc = pc->pnext) { - if (streq(pc->key, fake_acc_name_for_setups)) - continue; - stats1_acc_t* pstats1_acc = pc->pvvalue; - pstats1_acc->pfree_func(pstats1_acc); - } - lhmsv_free(pacc_field_to_acc_state_in); - lhmsv_free(pacc_field_to_acc_state_out); - free(pacc_field_to_acc_states); - } - lhmsv_free(pgroup_to_acc_field); - } - lhmslv_free(pstate->groups_without_group_by_regex); - } - - if (pstate->groups_with_group_by_regex != NULL) { - for (lhmslve_t* pa = pstate->groups_with_group_by_regex->phead; pa != NULL; pa = pa->pnext) { - lhmslv_t* pgroups_by_names = pa->pvvalue; - for (lhmslve_t* pb = pgroups_by_names->phead; pb != NULL; pb = pb->pnext) { - lhmsv_t* pgroup_to_acc_field = pb->pvvalue; - for (lhmsve_t* pc = pgroup_to_acc_field->phead; pc != NULL; pc = pc->pnext) { - acc_map_pair_t* pacc_field_to_acc_states = pc->pvvalue; - lhmsv_t* pacc_field_to_acc_state_in = pacc_field_to_acc_states->pin; - lhmsv_t* pacc_field_to_acc_state_out = pacc_field_to_acc_states->pout; - for (lhmsve_t* pd = pacc_field_to_acc_state_out->phead; pd != NULL; pd = pd->pnext) { - if (streq(pd->key, fake_acc_name_for_setups)) - continue; - stats1_acc_t* pstats1_acc = pd->pvvalue; - pstats1_acc->pfree_func(pstats1_acc); - } - lhmsv_free(pacc_field_to_acc_state_in); - lhmsv_free(pacc_field_to_acc_state_out); - free(pacc_field_to_acc_states); - } - lhmsv_free(pgroup_to_acc_field); - } - lhmslv_free(pgroups_by_names); - } - lhmslv_free(pstate->groups_with_group_by_regex); - } - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ================================================================ -// Given: accumulate count,sum on values x,y group by a,b. -// Example input: Example output: -// a b x y a b x_count x_sum y_count y_sum -// s t 1 2 s t 2 6 2 8 -// u v 3 4 u v 1 3 1 4 -// s t 5 6 u w 1 7 1 9 -// u w 7 9 -// -// Multilevel hashmap structure: -// { -// ["s","t"] : { <--- group-by field names -// ["x"] : { <--- value field names -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// ["y"] : { -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// }, -// ["u","v"] : { -// ["x"] : { -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// ["y"] : { -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// }, -// ["u","w"] : { -// ["x"] : { -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// ["y"] : { -// "count" : stats1_count_t object, -// "sum" : stats1_sum_t object -// }, -// }, -// } -// ================================================================ - -// In the iterative case, add to the current record its current group's stats fields. -// In the non-iterative case, produce output only at the end of the input stream. -static sllv_t* mapper_stats1_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_stats1_state_t* pstate = pvstate; - if (pinrec != NULL) { // Not end of record stream - pstate->pgroup_by_ingestor(pinrec, pstate); - if (pstate->do_iterative_stats) { - // The input record is modified in this case, with new fields appended - return sllv_single(pinrec); - } else { - lrec_free(pinrec); - return NULL; - } - } else { // End of record stream - if (!pstate->do_iterative_stats) { - return pstate->pemitter(pstate); - } else { - return sllv_single(NULL); // emit end-of-stream marker - } - } -} - -// ---------------------------------------------------------------- -static void mapper_stats1_group_by_ingest_without_regexes(lrec_t* pinrec, mapper_stats1_state_t* pstate) { - // E.g. ["s", "t"] - // To do: make value_field_values into a hashmap. Then accept partial - // population on that, but retain full-population requirement on group-by. - // E.g. if accumulating stats of x,y on a,b then skip record with x,y,a but - // process record with x,a,b. - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - slls_free(pgroup_by_field_values); - return; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lhmsv_t* pgroup_by_field_values_to_acc_fields = lhmslv_get(pstate->groups_without_group_by_regex, - pgroup_by_field_values); - if (pgroup_by_field_values_to_acc_fields == NULL) { - pgroup_by_field_values_to_acc_fields = lhmsv_alloc(); - lhmslv_put(pstate->groups_without_group_by_regex, slls_copy(pgroup_by_field_values), - pgroup_by_field_values_to_acc_fields, FREE_ENTRY_KEY); - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // for x=1 and y=2 - pstate->pvalue_ingestor(pinrec, pstate, pgroup_by_field_values_to_acc_fields); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - slls_free(pgroup_by_field_values); -} - -// ---------------------------------------------------------------- -static void mapper_stats1_group_by_ingest_with_regexes(lrec_t* pinrec, mapper_stats1_state_t* pstate) { - // E.g. {"a": "s", "b":"t"} - lhmss_t* group_by_pairs = mlr_reference_key_value_pairs_from_regex_names(pinrec, - pstate->group_by_field_regexes, pstate->num_group_by_field_regexes, pstate->invert_regex_group_by_field_names); - - slls_t* pgroup_by_field_names = slls_alloc(); - for (lhmsse_t* pe = group_by_pairs->phead; pe != NULL; pe = pe->pnext) { - slls_append_no_free(pgroup_by_field_names, pe->key); - } - slls_t* pgroup_by_field_values = slls_alloc(); - for (lhmsse_t* pe = group_by_pairs->phead; pe != NULL; pe = pe->pnext) { - slls_append_no_free(pgroup_by_field_values, pe->value); - } - - // Two-level map: group-by field names -> group-by field values -> acc-field map - lhmslv_t* pgroups_by_names = lhmslv_get(pstate->groups_with_group_by_regex, pgroup_by_field_names); - if (pgroups_by_names == NULL) { - pgroups_by_names = lhmslv_alloc(); - lhmslv_put(pstate->groups_with_group_by_regex, slls_copy(pgroup_by_field_names), pgroups_by_names, - FREE_ENTRY_KEY); - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lhmsv_t* pgroup_by_field_values_to_acc_fields = lhmslv_get(pgroups_by_names, pgroup_by_field_values); - if (pgroup_by_field_values_to_acc_fields == NULL) { - pgroup_by_field_values_to_acc_fields = lhmsv_alloc(); - lhmslv_put(pgroups_by_names, slls_copy(pgroup_by_field_values), pgroup_by_field_values_to_acc_fields, - FREE_ENTRY_KEY); - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // E.g. {"x": 1, "y": 2} - pstate->pvalue_ingestor(pinrec, pstate, pgroup_by_field_values_to_acc_fields); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - slls_free(pgroup_by_field_names); - slls_free(pgroup_by_field_values); - lhmss_free(group_by_pairs); -} - -// ---------------------------------------------------------------- -static void mapper_stats1_value_ingest_without_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate, - lhmsv_t* pgroup_by_field_values_to_acc_fields) -{ - mlr_reference_values_from_record_into_string_array(pinrec, pstate->pvalue_field_names, - pstate->pvalue_field_values); - int n = pstate->pvalue_field_names->length; - for (int i = 0; i < n; i++) { - char* value_field_name = pstate->pvalue_field_names->strings[i]; - char* value_field_sval = pstate->pvalue_field_values->strings[i]; - mapper_stats1_ingest_name_value(pinrec, pstate, value_field_name, value_field_sval, - pgroup_by_field_values_to_acc_fields); - } -} - -// ---------------------------------------------------------------- -static void mapper_stats1_value_ingest_with_regexes( - lrec_t* pinrec, - mapper_stats1_state_t* pstate, - lhmsv_t* pgroup_by_field_values_to_acc_fields) -{ - lhmss_t* value_pairs = mlr_reference_key_value_pairs_from_regex_names(pinrec, - pstate->value_field_regexes, pstate->num_value_field_regexes, pstate->invert_regex_value_field_names); - for (lhmsse_t* pf = value_pairs->phead; pf != NULL; pf = pf->pnext) { - char* value_field_name = pf->key; - char* value_field_sval = pf->value; - mapper_stats1_ingest_name_value(pinrec, pstate, value_field_name, value_field_sval, - pgroup_by_field_values_to_acc_fields); - } - lhmss_free(value_pairs); -} - -// ---------------------------------------------------------------- -static void mapper_stats1_ingest_name_value(lrec_t* pinrec, mapper_stats1_state_t* pstate, - char* value_field_name, char* value_field_sval, lhmsv_t* pgroup_to_acc_field) -{ - // For percentiles there is one unique accumulator given (for example) five distinct - // names p0,p25,p50,p75,p100. The input accumulators are unique: only one - // percentile-keeper. There are multiple output accumulators: each references the same - // underlying percentile-keeper but with distinct parameters. Hence the ->pin and ->pout maps. - acc_map_pair_t* pacc_field_to_acc_states = lhmsv_get(pgroup_to_acc_field, value_field_name); - if (pacc_field_to_acc_states == NULL) { - pacc_field_to_acc_states = mlr_malloc_or_die(sizeof(acc_map_pair_t)); - pacc_field_to_acc_states->pin = lhmsv_alloc(); - pacc_field_to_acc_states->pout = lhmsv_alloc(); - lhmsv_put(pgroup_to_acc_field, mlr_strdup_or_die(value_field_name), pacc_field_to_acc_states, FREE_ENTRY_KEY); - } - lhmsv_t* acc_field_to_acc_state_in = pacc_field_to_acc_states->pin; - lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; - - // Look up presence of all accumulators at this level's hashmap. - char* presence = lhmsv_get(acc_field_to_acc_state_in, fake_acc_name_for_setups); - if (presence == NULL) { - make_stats1_accs(value_field_name, pstate->paccumulator_names, pstate->allow_int_float, - pstate->do_interpolated_percentiles, acc_field_to_acc_state_in, acc_field_to_acc_state_out); - lhmsv_put(acc_field_to_acc_state_in, fake_acc_name_for_setups, fake_acc_name_for_setups, NO_FREE); - } - - if (value_field_sval == NULL) // Key not present - return; - if (*value_field_sval == 0) // Key present with null value - return; - - int have_dval = FALSE; - int have_nval = FALSE; - double value_field_dval = -999.0; - mv_t value_field_nval = mv_absent(); - - // There isn't a one-to-one mapping between user-specified stats1_names - // and internal stats1_acc_t's. Here in the ingestor we feed each datum - // into a stats1_acc_t. In the emitter, we loop over the stats1_names in - // user-specified order. Example: they ask for p10,mean,p90. Then there - // is only one percentiles accumulator to be told about each point. In - // the emitter it will be asked to produce output twice: once for the - // 10th percentile & once for the 90th. - for (lhmsve_t* pc = acc_field_to_acc_state_in->phead; pc != NULL; pc = pc->pnext) { - char* stats1_acc_name = pc->key; - if (streq(stats1_acc_name, fake_acc_name_for_setups)) - continue; - stats1_acc_t* pstats1_acc = pc->pvvalue; - - if (pstats1_acc->pdingest_func != NULL) { - if (!have_dval) { - value_field_dval = mlr_double_from_string_or_die(value_field_sval); - have_dval = TRUE; - } - pstats1_acc->pdingest_func(pstats1_acc->pvstate, value_field_dval); - } - if (pstats1_acc->pningest_func != NULL) { - if (!have_nval) { - value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - have_nval = TRUE; - } - pstats1_acc->pningest_func(pstats1_acc->pvstate, &value_field_nval); - } - if (pstats1_acc->psingest_func != NULL) { - pstats1_acc->psingest_func(pstats1_acc->pvstate, value_field_sval); - } - - } - if (pstate->do_iterative_stats) { - mapper_stats1_emit(pstate, pinrec, value_field_name, acc_field_to_acc_state_out); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_stats1_emit_all_without_group_by_regexes(mapper_stats1_state_t* pstate) { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->groups_without_group_by_regex->phead; pa != NULL; pa = pa->pnext) { - slls_t* pgroup_by_field_values = pa->key; - lrec_t* poutrec = lrec_unbacked_alloc(); - - // Add in a=s,b=t fields: - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - - // Add in fields such as x_sum=#, y_count=#, etc.: - lhmsv_t* pgroup_to_acc_field = pa->pvvalue; - // for "x", "y" - for (lhmsve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { - char* value_field_name = pd->key; - acc_map_pair_t* pacc_field_to_acc_states = pd->pvvalue; - lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; - mapper_stats1_emit(pstate, poutrec, value_field_name, acc_field_to_acc_state_out); - } - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - return poutrecs; -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_stats1_emit_all_with_group_by_regexes(mapper_stats1_state_t* pstate) { - sllv_t* poutrecs = sllv_alloc(); - - // Two-level map: group-by field names -> group-by field values -> acc-field map - for (lhmslve_t* pa = pstate->groups_with_group_by_regex->phead; pa != NULL; pa = pa->pnext) { - slls_t* pgroup_by_field_names = pa->key; - lhmslv_t* pgroups_by_names = pa->pvvalue; - - for (lhmslve_t* pb = pgroups_by_names->phead; pb != NULL; pb = pb->pnext) { - slls_t* pgroup_by_field_values = pb->key; - lhmsv_t* pgroup_by_field_values_to_acc_field = pb->pvvalue; - - lrec_t* poutrec = lrec_unbacked_alloc(); - - // Add in a=s,b=t fields: - sllse_t* pc = pgroup_by_field_names->phead; - sllse_t* pd = pgroup_by_field_values->phead; - for ( ; pc != NULL && pd != NULL; pc = pc->pnext, pd = pd->pnext) { - lrec_put(poutrec, pc->value, pd->value, NO_FREE); - } - - // Add in fields such as x_sum=#, y_count=#, etc.: - // for "x", "y" - for (lhmsve_t* pe = pgroup_by_field_values_to_acc_field->phead; pe != NULL; pe = pe->pnext) { - char* value_field_name = pe->key; - acc_map_pair_t* pacc_field_to_acc_states = pe->pvvalue; - lhmsv_t* acc_field_to_acc_state_out = pacc_field_to_acc_states->pout; - mapper_stats1_emit(pstate, poutrec, value_field_name, acc_field_to_acc_state_out); - } - - sllv_append(poutrecs, poutrec); - - } - } - - sllv_append(poutrecs, NULL); - return poutrecs; -} - -// ---------------------------------------------------------------- -static lrec_t* mapper_stats1_emit(mapper_stats1_state_t* pstate, lrec_t* poutrec, - char* value_field_name, lhmsv_t* acc_field_to_acc_state_out) -{ - // Add in fields such as x_sum=#, y_count=#, etc.: - for (sllse_t* pe = pstate->paccumulator_names->phead; pe != NULL; pe = pe->pnext) { - char* stats1_acc_name = pe->value; - if (streq(stats1_acc_name, fake_acc_name_for_setups)) - continue; - stats1_acc_t* pstats1_acc = lhmsv_get(acc_field_to_acc_state_out, stats1_acc_name); - MLR_INTERNAL_CODING_ERROR_IF(pstats1_acc == NULL); - pstats1_acc->pemit_func(pstats1_acc->pvstate, value_field_name, stats1_acc_name, FALSE, poutrec); - } - return poutrec; -} diff --git a/c/mapping/mapper_stats2.c b/c/mapping/mapper_stats2.c deleted file mode 100644 index aec925ada..000000000 --- a/c/mapping/mapper_stats2.c +++ /dev/null @@ -1,1009 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/mlrmath.h" -#include "lib/mlrstat.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "lib/string_array.h" -#include "containers/lhmslv.h" -#include "containers/lhms2v.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "containers/dvector.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef enum _bivar_measure_t { - DO_CORR, - DO_COV, - DO_COVX, - DO_LINREG_PCA -} bivar_measure_t; - -// ---------------------------------------------------------------- -struct _stats2_acc_t; // forward reference for method definitions -typedef void stats2_ingest_func_t(void* pvstate, double x, double y); -typedef void stats2_emit_func_t(void* pvstate, char* name1, char* name2, lrec_t* poutrec); -typedef void stats2_fit_func_t(void* pvstate, double x, double y, lrec_t* poutrec); -typedef void stats2_free_func_t(struct _stats2_acc_t* pstats2_acc); - -typedef struct _stats2_acc_t { - void* pvstate; - stats2_ingest_func_t* pingest_func; - stats2_emit_func_t* pemit_func; - stats2_fit_func_t* pfit_func; - stats2_free_func_t* pfree_func; // virtual destructor -} stats2_acc_t; - -typedef struct _mapper_stats2_state_t { - ap_state_t* pargp; - slls_t* paccumulator_names; - string_array_t* pvalue_field_name_pairs; - slls_t* pgroup_by_field_names; - lhmslv_t* acc_groups; - lhmslv_t* record_groups; - int do_verbose; - int do_iterative_stats; - int do_hold_and_fit; -} mapper_stats2_state_t; - -typedef stats2_acc_t* stats2_alloc_func_t(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); - -// ---------------------------------------------------------------- -static void mapper_stats2_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_stats2_alloc(ap_state_t* pargp, slls_t* paccumulator_names, - string_array_t* pvalue_field_name_pairs, slls_t* pgroup_by_field_names, - int do_verbose, int do_iterative_stats, int do_hold_and_fit); -static void mapper_stats2_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_stats2_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static void mapper_stats2_ingest(lrec_t* pinrec, context_t* pctx, mapper_stats2_state_t* pstate); -static sllv_t* mapper_stats2_emit_all(mapper_stats2_state_t* pstate); -static void mapper_stats2_emit(mapper_stats2_state_t* pstate, lrec_t* pinrec, - char* value_field_name_1, char* value_field_name_2, lhmsv_t* pacc_fields_to_acc_state); -static sllv_t* mapper_stats2_fit_all(mapper_stats2_state_t* pstate); - -static stats2_acc_t* make_stats2 (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_linreg_pca_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_linreg_ols_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_r2_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_logireg_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_corr_cov_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, bivar_measure_t do_which, int do_verbose); -static stats2_acc_t* stats2_corr_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_cov_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); -static stats2_acc_t* stats2_covx_alloc (char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose); - -// ---------------------------------------------------------------- -typedef struct _stats2_acc_lookup_t { - char* name; - stats2_alloc_func_t* palloc_func; - char* desc; -} stats2_acc_lookup_t; -static stats2_acc_lookup_t stats2_acc_lookup_table[] = { - {"linreg-pca", stats2_linreg_pca_alloc, "Linear regression using principal component analysis"}, - {"linreg-ols", stats2_linreg_ols_alloc, "Linear regression using ordinary least squares"}, - {"r2", stats2_r2_alloc, "Quality metric for linreg-ols (linreg-pca emits its own)"}, - {"logireg", stats2_logireg_alloc, "Logistic regression"}, - {"corr", stats2_corr_alloc, "Sample correlation"}, - {"cov", stats2_cov_alloc, "Sample covariance"}, - {"covx", stats2_covx_alloc, "Sample-covariance matrix"}, -}; -static int stats2_acc_lookup_table_length = sizeof(stats2_acc_lookup_table) / sizeof(stats2_acc_lookup_table[0]); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_stats2_setup = { - .verb = "stats2", - .pusage_func = mapper_stats2_usage, - .pparse_func = mapper_stats2_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_stats2_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Computes bivariate statistics for one or more given field-name pairs,\n"); - fprintf(o, "accumulated across the input record stream.\n"); - fprintf(o, "-a {linreg-ols,corr,...} Names of accumulators: one or more of:\n"); - for (int i = 0; i < stats2_acc_lookup_table_length; i++) { - fprintf(o, " %-12s %s\n", stats2_acc_lookup_table[i].name, stats2_acc_lookup_table[i].desc); - } - fprintf(o, "-f {a,b,c,d} Value-field name-pairs on which to compute statistics.\n"); - fprintf(o, " There must be an even number of names.\n"); - fprintf(o, "-g {e,f,g} Optional group-by-field names.\n"); - fprintf(o, "-v Print additional output for linreg-pca.\n"); - fprintf(o, "-s Print iterative stats. Useful in tail -f contexts (in which\n"); - fprintf(o, " case please avoid pprint-format output since end of input\n"); - fprintf(o, " stream will never be seen).\n"); - fprintf(o, "--fit Rather than printing regression parameters, applies them to\n"); - fprintf(o, " the input data to compute new fit fields. All input records are\n"); - fprintf(o, " held in memory until end of input stream. Has effect only for\n"); - fprintf(o, " linreg-ols, linreg-pca, and logireg.\n"); - fprintf(o, "Only one of -s or --fit may be used.\n"); - fprintf(o, "Example: %s %s -a linreg-pca -f x,y\n", argv0, verb); - fprintf(o, "Example: %s %s -a linreg-ols,r2 -f x,y -g size,shape\n", argv0, verb); - fprintf(o, "Example: %s %s -a corr -f x,y\n", argv0, verb); -} - -static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* paccumulator_names = NULL; - string_array_t* pvalue_field_names = NULL; - slls_t* pgroup_by_field_names = slls_alloc(); - int do_verbose = FALSE; - int do_iterative_stats = FALSE; - int do_hold_and_fit = FALSE; - int allow_int_float = TRUE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-a", &paccumulator_names); - ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_true_flag(pstate, "-v", &do_verbose); - ap_define_true_flag(pstate, "-s", &do_iterative_stats); - ap_define_true_flag(pstate, "--fit", &do_hold_and_fit); - // The -F isn't used for stats2: all arithmetic here is floating-point. Yet - // it is supported for step and stats1 for all applicable stats1/step - // accumulators, so we accept here as well for all applicable stats2 - // accumulators (i.e. none of them). - ap_define_false_flag(pstate, "-F", &allow_int_float); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_stats2_usage(stderr, argv[0], verb); - return NULL; - } - if (do_iterative_stats && do_hold_and_fit) { - mapper_stats2_usage(stderr, argv[0], verb); - return NULL; - } - if (paccumulator_names == NULL || pvalue_field_names == NULL) { - mapper_stats2_usage(stderr, argv[0], verb); - return NULL; - } - if ((pvalue_field_names->length % 2) != 0) { - mapper_stats2_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_stats2_alloc(pstate, paccumulator_names, pvalue_field_names, pgroup_by_field_names, - do_verbose, do_iterative_stats, do_hold_and_fit); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_stats2_alloc(ap_state_t* pargp, slls_t* paccumulator_names, - string_array_t* pvalue_field_name_pairs, slls_t* pgroup_by_field_names, - int do_verbose, int do_iterative_stats, int do_hold_and_fit) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_stats2_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_stats2_state_t)); - pstate->pargp = pargp; - pstate->paccumulator_names = paccumulator_names; - pstate->pvalue_field_name_pairs = pvalue_field_name_pairs; // caller validates length is even - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->acc_groups = lhmslv_alloc(); - pstate->record_groups = lhmslv_alloc(); - pstate->do_verbose = do_verbose; - pstate->do_iterative_stats = do_iterative_stats; - pstate->do_hold_and_fit = do_hold_and_fit; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_stats2_process; - pmapper->pfree_func = mapper_stats2_free; - - return pmapper; -} - -static void mapper_stats2_free(mapper_t* pmapper, context_t* _) { - mapper_stats2_state_t* pstate = pmapper->pvstate; - slls_free(pstate->paccumulator_names); - string_array_free(pstate->pvalue_field_name_pairs); - slls_free(pstate->pgroup_by_field_names); - // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free - // the void-star hashmap values. - for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { - lhms2v_t* pgroup_to_acc_field = pa->pvvalue; - for (lhms2ve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { - lhmsv_t* pacc_fields_to_acc_state = pb->pvvalue; - for (lhmsve_t* pc = pacc_fields_to_acc_state->phead; pc != NULL; pc = pc->pnext) { - stats2_acc_t* pstats2_acc = pc->pvvalue; - pstats2_acc->pfree_func(pstats2_acc); - } - lhmsv_free(pacc_fields_to_acc_state); - } - lhms2v_free(pgroup_to_acc_field); - } - lhmslv_free(pstate->acc_groups); - for (lhmslve_t* pd = pstate->record_groups->phead; pd != NULL; pd = pd->pnext) { - sllv_t* plist = pd->pvvalue; - sllv_free(plist); - } - lhmslv_free(pstate->record_groups); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ================================================================ -// Given: accumulate corr,cov on values x,y group by a,b. -// Example input: Example output: -// a b x y a b x_corr x_cov y_corr y_cov -// s t 1 2 s t 2 6 2 8 -// u v 3 4 u v 1 3 1 4 -// s t 5 6 u w 1 7 1 9 -// u w 7 9 -// -// Multilevel hashmap structure: -// { -// ["s","t"] : { <--- group-by field names -// ["x","y"] : { <--- value field names -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// ["u","v"] : { -// ["x","y"] : { -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// ["u","w"] : { -// ["x","y"] : { -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// } -// ================================================================ - -// In the iterative case, add to the current record its current group's stats fields. -// In the non-iterative case, produce output only at the end of the input stream. -static sllv_t* mapper_stats2_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_stats2_state_t* pstate = pvstate; - if (pinrec != NULL) { - mapper_stats2_ingest(pinrec, pctx, pstate); - if (pstate->do_iterative_stats) { - // The input record is modified in this case, with new fields appended - return sllv_single(pinrec); - } else if (pstate->do_hold_and_fit) { - // The input record is held by the ingestor - return NULL; - } else { - lrec_free(pinrec); - return NULL; - } - } else if (!pstate->do_iterative_stats) { - if (!pstate->do_hold_and_fit) { - return mapper_stats2_emit_all(pstate); - } else { - return mapper_stats2_fit_all(pstate); - } - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -static void mapper_stats2_ingest(lrec_t* pinrec, context_t* pctx, mapper_stats2_state_t* pstate) { - // ["s", "t"] - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - return; - } - - lhms2v_t* pgroup_to_acc_field = lhmslv_get(pstate->acc_groups, pgroup_by_field_values); - if (pgroup_to_acc_field == NULL) { - pgroup_to_acc_field = lhms2v_alloc(); - lhmslv_put(pstate->acc_groups, slls_copy(pgroup_by_field_values), pgroup_to_acc_field, FREE_ENTRY_KEY); - } - - if (pstate->do_hold_and_fit) { // Retain the input record in memory, for fitting and delivery at end of stream - sllv_t* group_to_records = lhmslv_get(pstate->record_groups, pgroup_by_field_values); - if (group_to_records == NULL) { - group_to_records = sllv_alloc(); - lhmslv_put(pstate->record_groups, slls_copy(pgroup_by_field_values), group_to_records, FREE_ENTRY_KEY); - } - sllv_append(group_to_records, pinrec); - } - - // for [["x","y"]] - int n = pstate->pvalue_field_name_pairs->length; - for (int i = 0; i < n; i += 2) { - char* value_field_name_1 = pstate->pvalue_field_name_pairs->strings[i]; - char* value_field_name_2 = pstate->pvalue_field_name_pairs->strings[i+1]; - - lhmsv_t* pacc_fields_to_acc_state = lhms2v_get(pgroup_to_acc_field, value_field_name_1, value_field_name_2); - if (pacc_fields_to_acc_state == NULL) { - pacc_fields_to_acc_state = lhmsv_alloc(); - lhms2v_put(pgroup_to_acc_field, value_field_name_1, value_field_name_2, pacc_fields_to_acc_state, NO_FREE); - } - - char* sval1 = lrec_get(pinrec, value_field_name_1); - char* sval2 = lrec_get(pinrec, value_field_name_2); - if (sval1 == NULL) // Key not present - continue; - if (*sval1 == 0) // Key present with null value - continue; - if (sval2 == NULL) // Key not present - continue; - if (*sval2 == 0) // Key present with null value - continue; - - // for ["corr", "cov"] - sllse_t* pc = pstate->paccumulator_names->phead; - for ( ; pc != NULL; pc = pc->pnext) { - char* stats2_acc_name = pc->value; - stats2_acc_t* pstats2_acc = lhmsv_get(pacc_fields_to_acc_state, stats2_acc_name); - if (pstats2_acc == NULL) { - pstats2_acc = make_stats2(value_field_name_1, value_field_name_2, stats2_acc_name, pstate->do_verbose); - if (pstats2_acc == NULL) { - fprintf(stderr, "mlr stats2: accumulator \"%s\" not found.\n", - stats2_acc_name); - exit(1); - } - lhmsv_put(pacc_fields_to_acc_state, stats2_acc_name, pstats2_acc, NO_FREE); - } - if (sval1 == NULL || sval2 == NULL) - continue; - - double dval1 = mlr_double_from_string_or_die(sval1); - double dval2 = mlr_double_from_string_or_die(sval2); - pstats2_acc->pingest_func(pstats2_acc->pvstate, dval1, dval2); - } - if (pstate->do_iterative_stats) { - mapper_stats2_emit(pstate, pinrec, value_field_name_1, value_field_name_2, - pacc_fields_to_acc_state); - } - } - - slls_free(pgroup_by_field_values); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_stats2_emit_all(mapper_stats2_state_t* pstate) { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - // Add in a=s,b=t fields: - slls_t* pgroup_by_field_values = pa->key; - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, 0); - } - - // Add in fields such as x_y_corr, etc. - lhms2v_t* pgroup_to_acc_field = pa->pvvalue; - - // For "x","y" - for (lhms2ve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { - char* value_field_name_1 = pd->key1; - char* value_field_name_2 = pd->key2; - lhmsv_t* pacc_fields_to_acc_state = pd->pvvalue; - - mapper_stats2_emit(pstate, poutrec, value_field_name_1, value_field_name_2, - pacc_fields_to_acc_state); - - // For "corr", "linreg" - for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { - stats2_acc_t* pstats2_acc = pe->pvvalue; - pstats2_acc->pemit_func(pstats2_acc->pvstate, value_field_name_1, value_field_name_2, poutrec); - } - } - - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - return poutrecs; -} - -static void mapper_stats2_emit(mapper_stats2_state_t* pstate, lrec_t* poutrec, - char* value_field_name_1, char* value_field_name_2, lhmsv_t* pacc_fields_to_acc_state) -{ - // For "corr", "linreg" - for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { - stats2_acc_t* pstats2_acc = pe->pvvalue; - pstats2_acc->pemit_func(pstats2_acc->pvstate, value_field_name_1, value_field_name_2, poutrec); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_stats2_fit_all(mapper_stats2_state_t* pstate) { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->acc_groups->phead; pa != NULL; pa = pa->pnext) { - slls_t* pgroup_by_field_values = pa->key; - sllv_t* precords = lhmslv_get(pstate->record_groups, pgroup_by_field_values); - - while (precords->phead) { - lrec_t* prec = sllv_pop(precords); - - lhms2v_t* pgroup_to_acc_field = pa->pvvalue; - - // For "x","y" - for (lhms2ve_t* pd = pgroup_to_acc_field->phead; pd != NULL; pd = pd->pnext) { - char* value_field_name_1 = pd->key1; - char* value_field_name_2 = pd->key2; - lhmsv_t* pacc_fields_to_acc_state = pd->pvvalue; - - // For "linreg-ols", "logireg" - for (lhmsve_t* pe = pacc_fields_to_acc_state->phead; pe != NULL; pe = pe->pnext) { - stats2_acc_t* pstats2_acc = pe->pvvalue; - if (pstats2_acc->pfit_func != NULL) { - char* sx = lrec_get(prec, value_field_name_1); - char* sy = lrec_get(prec, value_field_name_2); - if (sx != NULL && sy != NULL) { - double x = mlr_double_from_string_or_die(sx); - double y = mlr_double_from_string_or_die(sy); - pstats2_acc->pfit_func(pstats2_acc->pvstate, x, y, prec); - } - } - } - } - - sllv_append(poutrecs, prec); - } - } - sllv_append(poutrecs, NULL); - return poutrecs; -} - -// ================================================================ -// Given: accumulate corr,cov on values x,y group by a,b. -// Example input: Example output: -// a b x y a b x_corr x_cov y_corr y_cov -// s t 1 2 s t 2 6 2 8 -// u v 3 4 u v 1 3 1 4 -// s t 5 6 u w 1 7 1 9 -// u w 7 9 -// -// Multilevel hashmap structure: -// { -// ["s","t"] : { <--- group-by field names -// ["x","y"] : { <--- value field names -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// ["u","v"] : { -// ["x","y"] : { -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// ["u","w"] : { -// ["x","y"] : { -// "corr" : stats2_corr_t object, -// "cov" : stats2_cov_t object -// } -// }, -// } -// ================================================================ - -// ---------------------------------------------------------------- -static stats2_acc_t* make_stats2(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - for (int i = 0; i < stats2_acc_lookup_table_length; i++) - if (streq(stats2_acc_name, stats2_acc_lookup_table[i].name)) - return stats2_acc_lookup_table[i].palloc_func(value_field_name_1, value_field_name_2, stats2_acc_name, do_verbose); - return NULL; -} - -// ---------------------------------------------------------------- -typedef struct _stats2_linreg_ols_state_t { - unsigned long long count; - double sumx; - double sumy; - double sumx2; - double sumxy; - char* m_output_field_name; - char* b_output_field_name; - char* n_output_field_name; - - char* fit_output_field_name; - int fit_ready; - double m; - double b; - -} stats2_linreg_ols_state_t; -static void stats2_linreg_ols_ingest(void* pvstate, double x, double y) { - stats2_linreg_ols_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += x; - pstate->sumy += y; - pstate->sumx2 += x*x; - pstate->sumxy += x*y; -} - -static void stats2_linreg_ols_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { - stats2_linreg_ols_state_t* pstate = pvstate; - - if (pstate->count < 2) { - lrec_put(poutrec, pstate->m_output_field_name, "", NO_FREE); - lrec_put(poutrec, pstate->b_output_field_name, "", NO_FREE); - } else { - double m, b; - mlr_get_linear_regression_ols(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumxy, pstate->sumy, &m, &b); - char* mval = mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt); - char* bval = mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt); - - lrec_put(poutrec, pstate->m_output_field_name, mval, FREE_ENTRY_VALUE); - lrec_put(poutrec, pstate->b_output_field_name, bval, FREE_ENTRY_VALUE); - } - - char* nval = mlr_alloc_string_from_ll(pstate->count); - lrec_put(poutrec, pstate->n_output_field_name, nval, FREE_ENTRY_VALUE); -} - -static void stats2_linreg_ols_fit(void* pvstate, double x, double y, lrec_t* poutrec) { - stats2_linreg_ols_state_t* pstate = pvstate; - - if (!pstate->fit_ready) { - mlr_get_linear_regression_ols(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumxy, pstate->sumy, - &pstate->m, &pstate->b); - pstate->fit_ready = TRUE; - } - - if (pstate->count < 2) { - lrec_put(poutrec, pstate->fit_output_field_name, "", NO_FREE); - } else { - double yfit = pstate->m * x + pstate->b; - char* sfit = mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt); - lrec_put(poutrec, pstate->fit_output_field_name, sfit, FREE_ENTRY_VALUE); - } -} -static void stats2_linreg_ols_free(stats2_acc_t* pstats2_acc) { - stats2_linreg_ols_state_t* pstate = pstats2_acc->pvstate; - free(pstate->m_output_field_name); - free(pstate->b_output_field_name); - free(pstate->n_output_field_name); - free(pstate->fit_output_field_name); - free(pstate); - free(pstats2_acc); -} - -static stats2_acc_t* stats2_linreg_ols_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); - stats2_linreg_ols_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_linreg_ols_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumy = 0.0; - pstate->sumx2 = 0.0; - pstate->sumxy = 0.0; - pstate->m_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_m"); - pstate->b_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_b"); - pstate->n_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_n"); - pstate->fit_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_ols_fit"); - pstate->fit_ready = FALSE; - pstate->m = -999.0; - pstate->b = -999.0; - - pstats2_acc->pvstate = (void*)pstate; - pstats2_acc->pingest_func = stats2_linreg_ols_ingest; - pstats2_acc->pemit_func = stats2_linreg_ols_emit; - pstats2_acc->pfit_func = stats2_linreg_ols_fit; - pstats2_acc->pfree_func = stats2_linreg_ols_free; - return pstats2_acc; -} - -// ---------------------------------------------------------------- -#define LOGIREG_DVECTOR_INITIAL_SIZE 1024 -typedef struct _stats2_logireg_state_t { - dvector_t* pxs; - dvector_t* pys; - char* m_output_field_name; - char* b_output_field_name; - char* n_output_field_name; - char* fit_output_field_name; - int fit_ready; - double m; - double b; -} stats2_logireg_state_t; -static void stats2_logireg_ingest(void* pvstate, double x, double y) { - stats2_logireg_state_t* pstate = pvstate; - dvector_append(pstate->pxs, x); - dvector_append(pstate->pys, y); -} - -static void stats2_logireg_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { - stats2_logireg_state_t* pstate = pvstate; - - if (pstate->pxs->size < 2) { - lrec_put(poutrec, pstate->m_output_field_name, "", NO_FREE); - lrec_put(poutrec, pstate->b_output_field_name, "", NO_FREE); - } else { - double m, b; - mlr_logistic_regression(pstate->pxs->data, pstate->pys->data, pstate->pxs->size, &m, &b); - char* mval = mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt); - char* bval = mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt); - - lrec_put(poutrec, pstate->m_output_field_name, mval, FREE_ENTRY_VALUE); - lrec_put(poutrec, pstate->b_output_field_name, bval, FREE_ENTRY_VALUE); - } - - char* nval = mlr_alloc_string_from_ll(pstate->pxs->size); - lrec_put(poutrec, pstate->n_output_field_name, nval, FREE_ENTRY_VALUE); -} -static void stats2_logireg_free(stats2_acc_t* pstats2_acc) { - stats2_logireg_state_t* pstate = pstats2_acc->pvstate; - free(pstate->m_output_field_name); - free(pstate->b_output_field_name); - free(pstate->n_output_field_name); - free(pstate->fit_output_field_name); - dvector_free(pstate->pxs); - dvector_free(pstate->pys); - free(pstate); - free(pstats2_acc); -} - -static void stats2_logireg_fit(void* pvstate, double x, double y, lrec_t* poutrec) { - stats2_logireg_state_t* pstate = pvstate; - - if (!pstate->fit_ready) { - mlr_logistic_regression(pstate->pxs->data, pstate->pys->data, pstate->pxs->size, &pstate->m, &pstate->b); - pstate->fit_ready = TRUE; - } - - if (pstate->pxs->size < 2) { - lrec_put(poutrec, pstate->fit_output_field_name, "", NO_FREE); - } else { - double yfit = 1.0 / (1.0 + exp(-pstate->m*x - pstate->b)); - char* fitval = mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt); - lrec_put(poutrec, pstate->fit_output_field_name, fitval, FREE_ENTRY_VALUE); - } -} - -static stats2_acc_t* stats2_logireg_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); - stats2_logireg_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_logireg_state_t)); - pstate->pxs = dvector_alloc(LOGIREG_DVECTOR_INITIAL_SIZE); - pstate->pys = dvector_alloc(LOGIREG_DVECTOR_INITIAL_SIZE); - pstate->m_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_m"); - pstate->b_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_b"); - pstate->n_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_n"); - pstate->fit_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_logistic_fit"); - pstate->fit_ready = FALSE; - pstate->m = -999.0; - pstate->b = -999.0; - - pstats2_acc->pvstate = (void*)pstate; - pstats2_acc->pingest_func = stats2_logireg_ingest; - pstats2_acc->pemit_func = stats2_logireg_emit; - pstats2_acc->pfit_func = stats2_logireg_fit; - pstats2_acc->pfree_func = stats2_logireg_free; - return pstats2_acc; -} - -// ---------------------------------------------------------------- -// http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient -// Alternatively, just use sqrt(corr) as defined above. - -typedef struct _stats2_r2_state_t { - unsigned long long count; - double sumx; - double sumy; - double sumx2; - double sumxy; - double sumy2; - char* r2_output_field_name; -} stats2_r2_state_t; -static void stats2_r2_ingest(void* pvstate, double x, double y) { - stats2_r2_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += x; - pstate->sumy += y; - pstate->sumx2 += x*x; - pstate->sumxy += x*y; - pstate->sumy2 += y*y; -} -static void stats2_r2_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { - stats2_r2_state_t* pstate = pvstate; - if (pstate->count < 2LL) { - lrec_put(poutrec, pstate->r2_output_field_name, "", NO_FREE); - } else { - unsigned long long n = pstate->count; - double sumx = pstate->sumx; - double sumy = pstate->sumy; - double sumx2 = pstate->sumx2; - double sumy2 = pstate->sumy2; - double sumxy = pstate->sumxy; - double numerator = n*sumxy - sumx*sumy; - numerator = numerator * numerator; - double denominator = (n*sumx2 - sumx*sumx) * (n*sumy2 - sumy*sumy); - double output = numerator/denominator; - char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); - lrec_put(poutrec, pstate->r2_output_field_name, val, FREE_ENTRY_VALUE); - } -} -static void stats2_r2_free(stats2_acc_t* pstats2_acc) { - stats2_r2_state_t* pstate = pstats2_acc->pvstate; - free(pstate->r2_output_field_name); - free(pstate); - free(pstats2_acc); -} -static stats2_acc_t* stats2_r2_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); - stats2_r2_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_r2_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumy = 0.0; - pstate->sumx2 = 0.0; - pstate->sumxy = 0.0; - pstate->sumy2 = 0.0; - pstate->r2_output_field_name = mlr_paste_4_strings(value_field_name_1, "_", value_field_name_2, "_r2"); - - pstats2_acc->pvstate = (void*)pstate; - pstats2_acc->pingest_func = stats2_r2_ingest; - pstats2_acc->pemit_func = stats2_r2_emit; - pstats2_acc->pfit_func = NULL; - pstats2_acc->pfree_func = stats2_r2_free; - - return pstats2_acc; -} - -// ---------------------------------------------------------------- -// Corr(X,Y) = Cov(X,Y) / sigma_X sigma_Y. -typedef struct _stats2_corr_cov_state_t { - unsigned long long count; - double sumx; - double sumy; - double sumx2; - double sumxy; - double sumy2; - bivar_measure_t do_which; - int do_verbose; - - char* covx_00_output_field_name; - char* covx_01_output_field_name; - char* covx_10_output_field_name; - char* covx_11_output_field_name; - - char* pca_m_output_field_name; - char* pca_b_output_field_name; - char* pca_n_output_field_name; - char* pca_q_output_field_name; - char* pca_l1_output_field_name; - char* pca_l2_output_field_name; - char* pca_v11_output_field_name; - char* pca_v12_output_field_name; - char* pca_v21_output_field_name; - char* pca_v22_output_field_name; - char* pca_fit_output_field_name; - int fit_ready; - double m; - double b; - double q; - - char* corr_output_field_name; - char* cov_output_field_name; - -} stats2_corr_cov_state_t; -static void stats2_corr_cov_ingest(void* pvstate, double x, double y) { - stats2_corr_cov_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += x; - pstate->sumy += y; - pstate->sumx2 += x*x; - pstate->sumxy += x*y; - pstate->sumy2 += y*y; -} - -static void stats2_corr_cov_emit(void* pvstate, char* name1, char* name2, lrec_t* poutrec) { - stats2_corr_cov_state_t* pstate = pvstate; - if (pstate->do_which == DO_COVX) { - char* key00 = pstate->covx_00_output_field_name; - char* key01 = pstate->covx_01_output_field_name; - char* key10 = pstate->covx_10_output_field_name; - char* key11 = pstate->covx_11_output_field_name; - if (pstate->count < 2LL) { - lrec_put(poutrec, key00, "", NO_FREE); - lrec_put(poutrec, key01, "", NO_FREE); - lrec_put(poutrec, key10, "", NO_FREE); - lrec_put(poutrec, key11, "", NO_FREE); - } else { - double Q[2][2]; - mlr_get_cov_matrix(pstate->count, - pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); - char* val00 = mlr_alloc_string_from_double(Q[0][0], MLR_GLOBALS.ofmt); - char* val01 = mlr_alloc_string_from_double(Q[0][1], MLR_GLOBALS.ofmt); - char* val10 = mlr_alloc_string_from_double(Q[1][0], MLR_GLOBALS.ofmt); - char* val11 = mlr_alloc_string_from_double(Q[1][1], MLR_GLOBALS.ofmt); - lrec_put(poutrec, key00, val00, FREE_ENTRY_VALUE); - lrec_put(poutrec, key01, val01, FREE_ENTRY_VALUE); - lrec_put(poutrec, key10, val10, FREE_ENTRY_VALUE); - lrec_put(poutrec, key11, val11, FREE_ENTRY_VALUE); - } - - } else if (pstate->do_which == DO_LINREG_PCA) { - char* keym = pstate->pca_m_output_field_name; - char* keyb = pstate->pca_b_output_field_name; - char* keyn = pstate->pca_n_output_field_name; - char* keyq = pstate->pca_q_output_field_name; - char* keyl1 = pstate->pca_l1_output_field_name; - char* keyl2 = pstate->pca_l2_output_field_name; - char* keyv11 = pstate->pca_v11_output_field_name; - char* keyv12 = pstate->pca_v12_output_field_name; - char* keyv21 = pstate->pca_v21_output_field_name; - char* keyv22 = pstate->pca_v22_output_field_name; - if (pstate->count < 2LL) { - lrec_put(poutrec, keym, "", NO_FREE); - lrec_put(poutrec, keyb, "", NO_FREE); - lrec_put(poutrec, keyn, "", NO_FREE); - lrec_put(poutrec, keyq, "", NO_FREE); - if (pstate->do_verbose) { - lrec_put(poutrec, keyl1, "", NO_FREE); - lrec_put(poutrec, keyl2, "", NO_FREE); - lrec_put(poutrec, keyv11, "", NO_FREE); - lrec_put(poutrec, keyv12, "", NO_FREE); - lrec_put(poutrec, keyv21, "", NO_FREE); - lrec_put(poutrec, keyv22, "", NO_FREE); - } - } else { - double Q[2][2]; - mlr_get_cov_matrix(pstate->count, - pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); - - double l1, l2; // Eigenvalues - double v1[2], v2[2]; // Eigenvectors - mlr_get_real_symmetric_eigensystem(Q, &l1, &l2, v1, v2); - - double x_mean = pstate->sumx / pstate->count; - double y_mean = pstate->sumy / pstate->count; - double m, b, q; - mlr_get_linear_regression_pca(l1, l2, v1, v2, x_mean, y_mean, &m, &b, &q); - - lrec_put(poutrec, keym, mlr_alloc_string_from_double(m, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyb, mlr_alloc_string_from_double(b, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyn, mlr_alloc_string_from_ll(pstate->count), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyq, mlr_alloc_string_from_double(q, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - if (pstate->do_verbose) { - lrec_put(poutrec, keyl1, mlr_alloc_string_from_double(l1, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyl2, mlr_alloc_string_from_double(l2, MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyv11, mlr_alloc_string_from_double(v1[0], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyv12, mlr_alloc_string_from_double(v1[1], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyv21, mlr_alloc_string_from_double(v2[0], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - lrec_put(poutrec, keyv22, mlr_alloc_string_from_double(v2[1], MLR_GLOBALS.ofmt), FREE_ENTRY_VALUE); - } - } - } else { - char* key = (pstate->do_which == DO_CORR) ? pstate->corr_output_field_name : pstate->cov_output_field_name; - if (pstate->count < 2LL) { - lrec_put(poutrec, key, "", NO_FREE); - } else { - double output = mlr_get_cov(pstate->count, pstate->sumx, pstate->sumy, pstate->sumxy); - if (pstate->do_which == DO_CORR) { - double sigmax = sqrt(mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2)); - double sigmay = sqrt(mlr_get_var(pstate->count, pstate->sumy, pstate->sumy2)); - output = output / sigmax / sigmay; - } - char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); - lrec_put(poutrec, key, val, FREE_ENTRY_VALUE); - } - } -} - -static void linreg_pca_fit(void* pvstate, double x, double y, lrec_t* poutrec) { - stats2_corr_cov_state_t* pstate = pvstate; - - if (!pstate->fit_ready) { - double Q[2][2]; - mlr_get_cov_matrix(pstate->count, - pstate->sumx, pstate->sumx2, pstate->sumy, pstate->sumy2, pstate->sumxy, Q); - - double l1, l2; // Eigenvalues - double v1[2], v2[2]; // Eigenvectors - mlr_get_real_symmetric_eigensystem(Q, &l1, &l2, v1, v2); - - double x_mean = pstate->sumx / pstate->count; - double y_mean = pstate->sumy / pstate->count; - mlr_get_linear_regression_pca(l1, l2, v1, v2, x_mean, y_mean, &pstate->m, &pstate->b, &pstate->q); - - pstate->fit_ready = TRUE; - } - if (pstate->count < 2LL) { - lrec_put(poutrec, pstate->pca_fit_output_field_name, "", NO_FREE); - } else { - double yfit = pstate->m * x + pstate->b; - lrec_put(poutrec, pstate->pca_fit_output_field_name, mlr_alloc_string_from_double(yfit, MLR_GLOBALS.ofmt), - FREE_ENTRY_VALUE); - } -} - -static void stats2_corr_cov_free(stats2_acc_t* pstats2_acc) { - stats2_corr_cov_state_t* pstate = pstats2_acc->pvstate; - - free(pstate->covx_00_output_field_name); - free(pstate->covx_01_output_field_name); - free(pstate->covx_10_output_field_name); - free(pstate->covx_11_output_field_name); - - free(pstate->pca_m_output_field_name); - free(pstate->pca_b_output_field_name); - free(pstate->pca_n_output_field_name); - free(pstate->pca_q_output_field_name); - free(pstate->pca_l1_output_field_name); - free(pstate->pca_l2_output_field_name); - free(pstate->pca_v11_output_field_name); - free(pstate->pca_v12_output_field_name); - free(pstate->pca_v21_output_field_name); - free(pstate->pca_v22_output_field_name); - free(pstate->pca_fit_output_field_name); - - free(pstate->corr_output_field_name); - free(pstate->cov_output_field_name); - - free(pstate); - free(pstats2_acc); -} - -static stats2_acc_t* stats2_corr_cov_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, - bivar_measure_t do_which, int do_verbose) -{ - stats2_acc_t* pstats2_acc = mlr_malloc_or_die(sizeof(stats2_acc_t)); - stats2_corr_cov_state_t* pstate = mlr_malloc_or_die(sizeof(stats2_corr_cov_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumy = 0.0; - pstate->sumx2 = 0.0; - pstate->sumxy = 0.0; - pstate->sumy2 = 0.0; - pstate->do_which = do_which; - pstate->do_verbose = do_verbose; - - char* name1 = value_field_name_1; - char* name2 = value_field_name_2; - - pstate->covx_00_output_field_name = mlr_paste_4_strings(name1, "_", name1, "_covx"); - pstate->covx_01_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_covx"); - pstate->covx_10_output_field_name = mlr_paste_4_strings(name2, "_", name1, "_covx"); - pstate->covx_11_output_field_name = mlr_paste_4_strings(name2, "_", name2, "_covx"); - - pstate->pca_m_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_m"); - pstate->pca_b_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_b"); - pstate->pca_n_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_n"); - pstate->pca_q_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_quality"); - pstate->pca_l1_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eival1"); - pstate->pca_l2_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eival2"); - pstate->pca_v11_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec11"); - pstate->pca_v12_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec12"); - pstate->pca_v21_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec21"); - pstate->pca_v22_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_eivec22"); - pstate->pca_fit_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_pca_fit"); - pstate->fit_ready = FALSE; - pstate->m = -999.0; - pstate->b = -999.0; - - pstate->corr_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_corr"); - pstate->cov_output_field_name = mlr_paste_4_strings(name1, "_", name2, "_cov"); - - pstats2_acc->pvstate = (void*)pstate; - pstats2_acc->pingest_func = stats2_corr_cov_ingest; - pstats2_acc->pemit_func = stats2_corr_cov_emit; - if (do_which == DO_LINREG_PCA) - pstats2_acc->pfit_func = linreg_pca_fit; - else - pstats2_acc->pfit_func = NULL; - pstats2_acc->pfree_func = stats2_corr_cov_free; - - return pstats2_acc; -} -static stats2_acc_t* stats2_corr_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_CORR, do_verbose); -} -static stats2_acc_t* stats2_cov_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_COV, do_verbose); -} -static stats2_acc_t* stats2_covx_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_COVX, do_verbose); -} -static stats2_acc_t* stats2_linreg_pca_alloc(char* value_field_name_1, char* value_field_name_2, char* stats2_acc_name, int do_verbose) { - return stats2_corr_cov_alloc(value_field_name_1, value_field_name_2, stats2_acc_name, DO_LINREG_PCA, do_verbose); -} diff --git a/c/mapping/mapper_step.c b/c/mapping/mapper_step.c deleted file mode 100644 index 9b4026baf..000000000 --- a/c/mapping/mapper_step.c +++ /dev/null @@ -1,666 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "lib/string_array.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "lib/mvfuncs.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_STRING_ALPHA "0.5" - -// ---------------------------------------------------------------- -struct _step_t; // forward reference for method declarations - -typedef void step_dprocess_func_t(void* pvstate, double fltv, lrec_t* prec); -typedef void step_nprocess_func_t(void* pvstate, mv_t* pval, lrec_t* prec); -typedef void step_sprocess_func_t(void* pvstate, char* strv, lrec_t* prec); -typedef void step_zprocess_func_t(void* pvstate, lrec_t* prec); -typedef void step_free_func_t(struct _step_t* pstep); - -typedef struct _step_t { - void* pvstate; - step_dprocess_func_t* pdprocess_func; - step_nprocess_func_t* pnprocess_func; - step_sprocess_func_t* psprocess_func; - step_zprocess_func_t* pzprocess_func; - step_free_func_t* pfree_func; -} step_t; - -typedef step_t* step_alloc_func_t(char* input_field_name, int allow_int_float, - slls_t* pstring_alphas, slls_t* pewma_suffixes); - -typedef struct _mapper_step_state_t { - ap_state_t* pargp; - slls_t* pstepper_names; - string_array_t* pvalue_field_names; // parameter - string_array_t* pvalue_field_values; // scratch space used per-record - slls_t* pgroup_by_field_names; // parameter - lhmslv_t* groups; - int allow_int_float; - slls_t* pstring_alphas; - slls_t* pewma_suffixes; -} mapper_step_state_t; - -// Multilevel hashmap structure: -// { -// ["s","t"] : { <--- group-by field names -// ["x","y"] : { <--- value field names -// "corr" : C stats2_corr_t object, -// "cov" : C stats2_cov_t object -// } -// }, -// ["u","v"] : { -// ["x","y"] : { -// "corr" : C stats2_corr_t object, -// "cov" : C stats2_cov_t object -// } -// }, -// ["u","w"] : { -// ["x","y"] : { -// "corr" : C stats2_corr_t object, -// "cov" : C stats2_cov_t object -// } -// }, -// } - -// ---------------------------------------------------------------- -static void mapper_step_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_step_alloc(ap_state_t* pargp, slls_t* pstepper_names, string_array_t* pvalue_field_names, - slls_t* pgroup_by_field_names, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes); -static void mapper_step_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_step_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -static step_t* step_delta_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_shift_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_from_first_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_ratio_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_rsum_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_counter_alloc (char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2); -static step_t* step_ewma_alloc (char* input_field_name, int unused, - slls_t* pstring_alphas, slls_t* pewma_suffixes); - -static step_t* make_step(char* step_name, char* input_field_name, int allow_int_float, - slls_t* pstring_alphas, slls_t* pewma_suffixes); - -typedef struct _step_lookup_t { - char* name; - step_alloc_func_t* palloc_func; - char* desc; -} step_lookup_t; -static step_lookup_t step_lookup_table[] = { - {"delta", step_delta_alloc, "Compute differences in field(s) between successive records"}, - {"shift", step_shift_alloc, "Include value(s) in field(s) from previous record, if any"}, - {"from-first", step_from_first_alloc, "Compute differences in field(s) from first record"}, - {"ratio", step_ratio_alloc, "Compute ratios in field(s) between successive records"}, - {"rsum", step_rsum_alloc, "Compute running sums of field(s) between successive records"}, - {"counter", step_counter_alloc, "Count instances of field(s) between successive records"}, - {"ewma", step_ewma_alloc, "Exponentially weighted moving average over successive records"}, -}; -static int step_lookup_table_length = sizeof(step_lookup_table) / sizeof(step_lookup_table[0]); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_step_setup = { - .verb = "step", - .pusage_func = mapper_step_usage, - .pparse_func = mapper_step_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_step_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Computes values dependent on the previous record, optionally grouped\n"); - fprintf(o, "by category.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-a {delta,rsum,...} Names of steppers: comma-separated, one or more of:\n"); - for (int i = 0; i < step_lookup_table_length; i++) { - fprintf(o, " %-8s %s\n", step_lookup_table[i].name, step_lookup_table[i].desc); - } - fprintf(o, "-f {a,b,c} Value-field names on which to compute statistics\n"); - fprintf(o, "-g {d,e,f} Optional group-by-field names\n"); - fprintf(o, "-F Computes integerable things (e.g. counter) in floating point.\n"); - fprintf(o, "-d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no\n"); - fprintf(o, " smoothing), near under under 1 is light smoothing, near over 0 is\n"); - fprintf(o, " heavy smoothing. Multiple weights may be specified, e.g.\n"); - fprintf(o, " \"%s %s -a ewma -f sys_load -d 0.01,0.1,0.9\". Default if omitted\n", argv0, verb); - fprintf(o, " is \"-d %s\".\n", DEFAULT_STRING_ALPHA); - fprintf(o, "-o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to\n"); - fprintf(o, " the -d values. If supplied, the number of -o values must be the same\n"); - fprintf(o, " as the number of -d values.\n"); - fprintf(o, "\n"); - fprintf(o, "Examples:\n"); - fprintf(o, " %s %s -a rsum -f request_size\n", argv0, verb); - fprintf(o, " %s %s -a delta -f request_size -g hostname\n", argv0, verb); - fprintf(o, " %s %s -a ewma -d 0.1,0.9 -f x,y\n", argv0, verb); - fprintf(o, " %s %s -a ewma -d 0.1,0.9 -o smooth,rough -f x,y\n", argv0, verb); - fprintf(o, " %s %s -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name\n", argv0, verb); - fprintf(o, "\n"); - fprintf(o, "Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or\n"); - fprintf(o, "https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n"); - fprintf(o, "for more information on EWMA.\n"); -} - -static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - slls_t* pstepper_names = NULL; - string_array_t* pvalue_field_names = NULL; - slls_t* pgroup_by_field_names = slls_alloc(); - slls_t* pstring_alphas = slls_single_no_free(DEFAULT_STRING_ALPHA); - slls_t* pewma_suffixes = NULL; - int allow_int_float = TRUE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-a", &pstepper_names); - ap_define_string_array_flag(pstate, "-f", &pvalue_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_string_list_flag(pstate, "-d", &pstring_alphas); - ap_define_string_list_flag(pstate, "-o", &pewma_suffixes); - ap_define_false_flag(pstate, "-F", &allow_int_float); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_step_usage(stderr, argv[0], verb); - return NULL; - } - - if (pstepper_names == NULL || pvalue_field_names == NULL) { - mapper_step_usage(stderr, argv[0], verb); - return NULL; - } - if (pstring_alphas != NULL && pewma_suffixes != NULL) { - if (pewma_suffixes->length != pstring_alphas->length) { - mapper_step_usage(stderr, argv[0], verb); - return NULL; - } - } - - return mapper_step_alloc(pstate, pstepper_names, pvalue_field_names, pgroup_by_field_names, - allow_int_float, pstring_alphas, pewma_suffixes); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_step_alloc(ap_state_t* pargp, slls_t* pstepper_names, string_array_t* pvalue_field_names, - slls_t* pgroup_by_field_names, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_step_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_step_state_t)); - - pstate->pargp = pargp; - pstate->pstepper_names = pstepper_names; - pstate->pvalue_field_names = pvalue_field_names; - pstate->pvalue_field_values = string_array_alloc(pvalue_field_names->length); - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->groups = lhmslv_alloc(); - pstate->allow_int_float = allow_int_float; - pstate->pstring_alphas = pstring_alphas; - pstate->pewma_suffixes = pewma_suffixes; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_step_process; - pmapper->pfree_func = mapper_step_free; - - return pmapper; -} - -static void mapper_step_free(mapper_t* pmapper, context_t* _) { - mapper_step_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pstepper_names); - string_array_free(pstate->pvalue_field_names); - string_array_free(pstate->pvalue_field_values); - slls_free(pstate->pgroup_by_field_names); - slls_free(pstate->pstring_alphas); - slls_free(pstate->pewma_suffixes); - - // lhmslv_free and lhmsv_free will free the hashmap keys; we need to free - // the void-star hashmap values. - for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { - lhmsv_t* pgroup_to_acc_field = pa->pvvalue; - for (lhmsve_t* pb = pgroup_to_acc_field->phead; pb != NULL; pb = pb->pnext) { - lhmsv_t* pacc_field_to_acc_state = pb->pvvalue; - for (lhmsve_t* pc = pacc_field_to_acc_state->phead; pc != NULL; pc = pc->pnext) { - step_t* pstep = pc->pvvalue; - pstep->pfree_func(pstep); - } - lhmsv_free(pacc_field_to_acc_state); - } - lhmsv_free(pgroup_to_acc_field); - } - lhmslv_free(pstate->groups); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_step_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_step_state_t* pstate = pvstate; - if (pinrec == NULL) - return sllv_single(NULL); - - // ["s", "t"] - mlr_reference_values_from_record_into_string_array(pinrec, pstate->pvalue_field_names, pstate->pvalue_field_values); - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); - - if (pgroup_by_field_values == NULL) { - slls_free(pgroup_by_field_values); - return sllv_single(pinrec); - } - - lhmsv_t* pgroup_to_acc_field = lhmslv_get(pstate->groups, pgroup_by_field_values); - if (pgroup_to_acc_field == NULL) { - pgroup_to_acc_field = lhmsv_alloc(); - lhmslv_put(pstate->groups, slls_copy(pgroup_by_field_values), pgroup_to_acc_field, FREE_ENTRY_KEY); - } - slls_free(pgroup_by_field_values); - - // for x=1 and y=2 - int n = pstate->pvalue_field_names->length; - for (int i = 0; i < n; i++) { - char* value_field_name = pstate->pvalue_field_names->strings[i]; - char* value_field_sval = pstate->pvalue_field_values->strings[i]; - if (value_field_sval == NULL) // Key not present - continue; - - int have_dval = FALSE; - int have_nval = FALSE; - double value_field_dval = -999.0; - mv_t value_field_nval = mv_absent(); - - lhmsv_t* pacc_field_to_acc_state = lhmsv_get(pgroup_to_acc_field, value_field_name); - if (pacc_field_to_acc_state == NULL) { - pacc_field_to_acc_state = lhmsv_alloc(); - lhmsv_put(pgroup_to_acc_field, value_field_name, pacc_field_to_acc_state, NO_FREE); - } - - // for "delta", "rsum" - sllse_t* pc = pstate->pstepper_names->phead; - for ( ; pc != NULL; pc = pc->pnext) { - char* step_name = pc->value; - step_t* pstep = lhmsv_get(pacc_field_to_acc_state, step_name); - if (pstep == NULL) { - pstep = make_step(step_name, value_field_name, pstate->allow_int_float, - pstate->pstring_alphas, pstate->pewma_suffixes); - if (pstep == NULL) { - fprintf(stderr, "mlr step: stepper \"%s\" not found.\n", - step_name); - exit(1); - } - lhmsv_put(pacc_field_to_acc_state, step_name, pstep, NO_FREE); - } - - if (*value_field_sval == 0) { // Key present with null value - if (pstep->pzprocess_func != NULL) { - pstep->pzprocess_func(pstep->pvstate, pinrec); - } - } else { - - if (pstep->pdprocess_func != NULL) { - if (!have_dval) { - value_field_dval = mlr_double_from_string_or_die(value_field_sval); - have_dval = TRUE; - } - pstep->pdprocess_func(pstep->pvstate, value_field_dval, pinrec); - } - - if (pstep->pnprocess_func != NULL) { - if (!have_nval) { - value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - have_nval = TRUE; - } - pstep->pnprocess_func(pstep->pvstate, &value_field_nval, pinrec); - } - - if (pstep->psprocess_func != NULL) { - pstep->psprocess_func(pstep->pvstate, value_field_sval, pinrec); - } - } - } - } - return sllv_single(pinrec); -} - -static step_t* make_step(char* step_name, char* input_field_name, int allow_int_float, - slls_t* pstring_alphas, slls_t* pewma_suffixes) -{ - for (int i = 0; i < step_lookup_table_length; i++) - if (streq(step_name, step_lookup_table[i].name)) - return step_lookup_table[i].palloc_func(input_field_name, allow_int_float, - pstring_alphas, pewma_suffixes); - return NULL; -} - -// ---------------------------------------------------------------- -typedef struct _step_delta_state_t { - mv_t prev; - char* output_field_name; - int allow_int_float; -} step_delta_state_t; -static void step_delta_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { - step_delta_state_t* pstate = pvstate; - mv_t delta; - if (mv_is_null(&pstate->prev)) { - delta = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - } else { - delta = x_xx_minus_func(pnumv, &pstate->prev); - } - lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&delta), FREE_ENTRY_VALUE); - pstate->prev = *pnumv; -} -static void step_delta_zprocess(void* pvstate, lrec_t* prec) { - step_delta_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_delta_free(step_t* pstep) { - step_delta_state_t* pstate = pstep->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_delta_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_delta_state_t* pstate = mlr_malloc_or_die(sizeof(step_delta_state_t)); - pstate->prev = mv_absent(); - pstate->allow_int_float = allow_int_float; - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_delta"); - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = NULL; - pstep->pnprocess_func = step_delta_nprocess; - pstep->psprocess_func = NULL; - pstep->pzprocess_func = step_delta_zprocess; - pstep->pfree_func = step_delta_free; - return pstep; -} - -// ---------------------------------------------------------------- -typedef struct _step_shift_state_t { - char* prev; - char* output_field_name; - int allow_int_float; -} step_shift_state_t; -static void step_shift_sprocess(void* pvstate, char* strv, lrec_t* prec) { - step_shift_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, pstate->prev, FREE_ENTRY_VALUE); - pstate->prev = mlr_strdup_or_die(strv); -} -static void step_shift_zprocess(void* pvstate, lrec_t* prec) { - step_shift_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_shift_free(step_t* pstep) { - step_shift_state_t* pstate = pstep->pvstate; - free(pstate->prev); - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_shift_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_shift_state_t* pstate = mlr_malloc_or_die(sizeof(step_shift_state_t)); - pstate->prev = mlr_strdup_or_die(""); - pstate->allow_int_float = allow_int_float; - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_shift"); - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = NULL; - pstep->pnprocess_func = NULL; - pstep->psprocess_func = step_shift_sprocess; - pstep->pzprocess_func = step_shift_zprocess; - pstep->pfree_func = step_shift_free; - return pstep; -} - -// ---------------------------------------------------------------- -typedef struct _step_from_first_state_t { - mv_t first; - char* output_field_name; - int allow_int_float; -} step_from_first_state_t; -static void step_from_first_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { - step_from_first_state_t* pstate = pvstate; - mv_t from_first; - if (mv_is_null(&pstate->first)) { - from_first = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - pstate->first = *pnumv; - } else { - from_first = x_xx_minus_func(pnumv, &pstate->first); - } - lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&from_first), FREE_ENTRY_VALUE); -} -static void step_from_first_zprocess(void* pvstate, lrec_t* prec) { - step_from_first_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_from_first_free(step_t* pstep) { - step_from_first_state_t* pstate = pstep->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_from_first_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_from_first_state_t* pstate = mlr_malloc_or_die(sizeof(step_from_first_state_t)); - pstate->first = mv_absent(); - pstate->allow_int_float = allow_int_float; - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_from_first"); - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = NULL; - pstep->pnprocess_func = step_from_first_nprocess; - pstep->psprocess_func = NULL; - pstep->pzprocess_func = step_from_first_zprocess; - pstep->pfree_func = step_from_first_free; - return pstep; -} - -// ---------------------------------------------------------------- -typedef struct _step_ratio_state_t { - double prev; - int have_prev; - char* output_field_name; -} step_ratio_state_t; -static void step_ratio_dprocess(void* pvstate, double fltv, lrec_t* prec) { - step_ratio_state_t* pstate = pvstate; - double ratio = 1.0; - if (pstate->have_prev) { - ratio = fltv / pstate->prev; - } else { - pstate->have_prev = TRUE; - } - lrec_put(prec, pstate->output_field_name, mlr_alloc_string_from_double(ratio, MLR_GLOBALS.ofmt), - FREE_ENTRY_VALUE); - pstate->prev = fltv; -} -static void step_ratio_zprocess(void* pvstate, lrec_t* prec) { - step_ratio_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_ratio_free(step_t* pstep) { - step_ratio_state_t* pstate = pstep->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_ratio_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_ratio_state_t* pstate = mlr_malloc_or_die(sizeof(step_ratio_state_t)); - pstate->prev = -999.0; - pstate->have_prev = FALSE; - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_ratio"); - - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = step_ratio_dprocess; - pstep->pnprocess_func = NULL; - pstep->psprocess_func = NULL; - pstep->pzprocess_func = step_ratio_zprocess; - pstep->pfree_func = step_ratio_free; - return pstep; -} - -// ---------------------------------------------------------------- -typedef struct _step_rsum_state_t { - mv_t rsum; - char* output_field_name; - int allow_int_float; -} step_rsum_state_t; -static void step_rsum_nprocess(void* pvstate, mv_t* pnumv, lrec_t* prec) { - step_rsum_state_t* pstate = pvstate; - pstate->rsum = x_xx_plus_func(&pstate->rsum, pnumv); - lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&pstate->rsum), - FREE_ENTRY_VALUE); -} -static void step_rsum_zprocess(void* pvstate, lrec_t* prec) { - step_rsum_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_rsum_free(step_t* pstep) { - step_rsum_state_t* pstate = pstep->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_rsum_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_rsum_state_t* pstate = mlr_malloc_or_die(sizeof(step_rsum_state_t)); - pstate->allow_int_float = allow_int_float; - pstate->rsum = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_rsum"); - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = NULL; - pstep->pnprocess_func = step_rsum_nprocess; - pstep->psprocess_func = NULL; - pstep->pzprocess_func = step_rsum_zprocess; - pstep->pfree_func = step_rsum_free; - return pstep; -} - -// ---------------------------------------------------------------- -typedef struct _step_counter_state_t { - mv_t counter; - mv_t one; - char* output_field_name; -} step_counter_state_t; -static void step_counter_sprocess(void* pvstate, char* strv, lrec_t* prec) { - step_counter_state_t* pstate = pvstate; - pstate->counter = x_xx_plus_func(&pstate->counter, &pstate->one); - lrec_put(prec, pstate->output_field_name, mv_alloc_format_val(&pstate->counter), - FREE_ENTRY_VALUE); -} -static void step_counter_zprocess(void* pvstate, lrec_t* prec) { - step_counter_state_t* pstate = pvstate; - lrec_put(prec, pstate->output_field_name, "", NO_FREE); -} -static void step_counter_free(step_t* pstep) { - step_counter_state_t* pstate = pstep->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstep); -} -static step_t* step_counter_alloc(char* input_field_name, int allow_int_float, slls_t* unused1, slls_t* unused2) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - step_counter_state_t* pstate = mlr_malloc_or_die(sizeof(step_counter_state_t)); - pstate->counter = allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - pstate->one = allow_int_float ? mv_from_int(1LL) : mv_from_float(1.0); - pstate->output_field_name = mlr_paste_2_strings(input_field_name, "_counter"); - - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = NULL; - pstep->pnprocess_func = NULL; - pstep->psprocess_func = step_counter_sprocess; - pstep->pzprocess_func = step_counter_zprocess; - pstep->pfree_func = step_counter_free; - return pstep; -} - -// ---------------------------------------------------------------- -// https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average -typedef struct _step_ewma_state_t { - int num_alphas; - double* alphas; - double* alphacompls; - double* prevs; - int have_prevs; - char** output_field_names; -} step_ewma_state_t; -static void step_ewma_dprocess(void* pvstate, double fltv, lrec_t* prec) { - step_ewma_state_t* pstate = pvstate; - if (!pstate->have_prevs) { - for (int i = 0; i < pstate->num_alphas; i++) { - lrec_put(prec, pstate->output_field_names[i], mlr_alloc_string_from_double(fltv, MLR_GLOBALS.ofmt), - FREE_ENTRY_VALUE); - pstate->prevs[i] = fltv; - } - pstate->have_prevs = TRUE; - } else { - for (int i = 0; i < pstate->num_alphas; i++) { - double curr = fltv; - curr = pstate->alphas[i] * curr + pstate->alphacompls[i] * pstate->prevs[i]; - lrec_put(prec, pstate->output_field_names[i], mlr_alloc_string_from_double(curr, MLR_GLOBALS.ofmt), - FREE_ENTRY_VALUE); - pstate->prevs[i] = curr; - } - } -} -static void step_ewma_zprocess(void* pvstate, lrec_t* prec) { - step_ewma_state_t* pstate = pvstate; - for (int i = 0; i < pstate->num_alphas; i++) - lrec_put(prec, pstate->output_field_names[i], "", NO_FREE); -} -static void step_ewma_free(step_t* pstep) { - step_ewma_state_t* pstate = pstep->pvstate; - for (int i = 0; i < pstate->num_alphas; i++) { - free(pstate->output_field_names[i]); - } - free(pstate->alphas); - free(pstate->alphacompls); - free(pstate->prevs); - free(pstate->output_field_names); - free(pstate); - free(pstep); -} - -static step_t* step_ewma_alloc(char* input_field_name, int unused, slls_t* pstring_alphas, slls_t* pewma_suffixes) { - step_t* pstep = mlr_malloc_or_die(sizeof(step_t)); - - step_ewma_state_t* pstate = mlr_malloc_or_die(sizeof(step_ewma_state_t)); - int n = pstring_alphas->length; - pstate->num_alphas = n; - pstate->alphas = mlr_malloc_or_die(n * sizeof(double)); - pstate->alphacompls = mlr_malloc_or_die(n * sizeof(double)); - pstate->prevs = mlr_malloc_or_die(n * sizeof(double)); - pstate->have_prevs = FALSE; - pstate->output_field_names = mlr_malloc_or_die(n * sizeof(char*)); - slls_t* psuffixes = (pewma_suffixes == NULL) ? pstring_alphas : pewma_suffixes; - sllse_t* pe = pstring_alphas->phead; - sllse_t* pf = psuffixes->phead; - for (int i = 0; i < n; i++, pe = pe->pnext, pf = pf->pnext) { - char* string_alpha = pe->value; - char* suffix = pf->value; - pstate->alphas[i] = mlr_double_from_string_or_die(string_alpha); - pstate->alphacompls[i] = 1.0 - pstate->alphas[i]; - pstate->prevs[i] = 0.0; - pstate->output_field_names[i] = mlr_paste_3_strings(input_field_name, "_ewma_", suffix); - } - pstate->have_prevs = FALSE; - - pstep->pvstate = (void*)pstate; - pstep->pdprocess_func = step_ewma_dprocess; - pstep->pnprocess_func = NULL; - pstep->psprocess_func = NULL; - pstep->pzprocess_func = step_ewma_zprocess; - pstep->pfree_func = step_ewma_free; - return pstep; -} diff --git a/c/mapping/mapper_tac.c b/c/mapping/mapper_tac.c deleted file mode 100644 index f9a091a3f..000000000 --- a/c/mapping/mapper_tac.c +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" - -typedef struct _mapper_tac_state_t { - sllv_t* records; -} mapper_tac_state_t; - -static void mapper_tac_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_tac_alloc(); -static void mapper_tac_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_tac_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_tac_setup = { - .verb = "tac", - .pusage_func = mapper_tac_usage, - .pparse_func = mapper_tac_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_tac_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s\n", argv0, verb); - fprintf(o, "Prints records in reverse order from the order in which they were encountered.\n"); -} - -static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - if ((argc - *pargi) < 1) { - mapper_tac_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - mapper_t* pmapper = mapper_tac_alloc(); - *pargi += 1; - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_tac_alloc() { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_tac_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tac_state_t)); - pstate->records = sllv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_tac_process; - pmapper->pfree_func = mapper_tac_free; - - return pmapper; -} - -static void mapper_tac_free(mapper_t* pmapper, context_t* _) { - mapper_tac_state_t* pstate = pmapper->pvstate; - // Free the container - sllv_free(pstate->records); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_tac_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_tac_state_t* pstate = pvstate; - if (pinrec != NULL) { - // The caller will free the outrecs - sllv_append(pstate->records, pinrec); - return NULL; - } - else { - sllv_reverse(pstate->records); - sllv_append(pstate->records, NULL); - sllv_t* retval = pstate->records; - pstate->records = sllv_alloc(); - return retval; - } -} diff --git a/c/mapping/mapper_tail.c b/c/mapping/mapper_tail.c deleted file mode 100644 index f076d6723..000000000 --- a/c/mapping/mapper_tail.c +++ /dev/null @@ -1,190 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -typedef struct _mapper_tail_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - - // for tail +n 10 - unsigned long long tail_start; - lhmslv_t* precord_counts_by_group; - - // for tail -n 10 - unsigned long long tail_count; - lhmslv_t* precord_lists_by_group; - -} mapper_tail_state_t; - -static void mapper_tail_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_tail_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long tail_start, unsigned long long tail_count); -static void mapper_tail_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_tail_process_from_start(lrec_t* pinrec, context_t* pctx, void* pvstate); -static sllv_t* mapper_tail_process_from_count(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_tail_setup = { - .verb = "tail", - .pusage_func = mapper_tail_usage, - .pparse_func = mapper_tail_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_tail_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - // xxx on-line help here for +n. Also what happens with +m -n ... - fprintf(o, "-n {count} Tail count to print; default 10\n"); - fprintf(o, "-g {a,b,c} Optional group-by-field names for tail counts\n"); - fprintf(o, "Passes through the last n records, optionally by category.\n"); -} - -static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - // xxx force one or the other ... ? or nah? - int tail_start = 0; - int tail_count = 10; - slls_t* pgroup_by_field_names = slls_alloc(); - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "+n", &tail_start); - ap_define_int_flag(pstate, "-n", &tail_count); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_tail_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_tail_alloc(pstate, pgroup_by_field_names, tail_start, tail_count); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_tail_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, - unsigned long long tail_start, unsigned long long tail_count) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_tail_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tail_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->tail_start = tail_start; - pstate->tail_count = tail_count; - pstate->precord_counts_by_group = lhmslv_alloc(); - pstate->precord_lists_by_group = lhmslv_alloc(); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = tail_start > 0 - ? mapper_tail_process_from_start - : mapper_tail_process_from_count; - pmapper->pfree_func = mapper_tail_free; - - return pmapper; -} - -static void mapper_tail_free(mapper_t* pmapper, context_t* _) { - mapper_tail_state_t* pstate = pmapper->pvstate; - if (pstate->pgroup_by_field_names != NULL) - slls_free(pstate->pgroup_by_field_names); - - lhmslv_free(pstate->precord_counts_by_group); - - // lhmslv_free will free the hashmap keys; we need to free the void-star hashmap values. - for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { - sllv_t* precord_list_for_group = pa->pvvalue; - // outrecs were freed by caller of mapper_tail_process. Here, just free - // the sllv container itself. - sllv_free(precord_list_for_group); - } - - lhmslv_free(pstate->precord_lists_by_group); - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_tail_process_from_start(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_tail_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - unsigned long long* precord_count_for_group = lhmslv_get(pstate->precord_counts_by_group, - pgroup_by_field_values); - if (precord_count_for_group == NULL) { - precord_count_for_group = mlr_malloc_or_die(sizeof(unsigned long long)); - *precord_count_for_group = 0LL; - lhmslv_put(pstate->precord_counts_by_group, slls_copy(pgroup_by_field_values), - precord_count_for_group, FREE_ENTRY_KEY | FREE_ENTRY_VALUE); - } - slls_free(pgroup_by_field_values); - (*precord_count_for_group)++; - - if (*precord_count_for_group < pstate->tail_start) { - lrec_free(pinrec); - return NULL; - } else { - return sllv_single(pinrec); - } - } else { - lrec_free(pinrec); - } - return NULL; - } else { // EOS - return sllv_single(NULL); - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_tail_process_from_count(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_tail_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - sllv_t* precord_list_for_group = lhmslv_get(pstate->precord_lists_by_group, pgroup_by_field_values); - if (precord_list_for_group == NULL) { - precord_list_for_group = sllv_alloc(); - lhmslv_put(pstate->precord_lists_by_group, slls_copy(pgroup_by_field_values), - precord_list_for_group, FREE_ENTRY_KEY); - } - slls_free(pgroup_by_field_values); - if (precord_list_for_group->length >= pstate->tail_count) { - lrec_t* porec = sllv_pop(precord_list_for_group); - lrec_free(porec); - } - sllv_append(precord_list_for_group, pinrec); - } else { - lrec_free(pinrec); - } - return NULL; - } - else { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { - sllv_t* precord_list_for_group = pa->pvvalue; - sllv_transfer(poutrecs, precord_list_for_group); - } - sllv_append(poutrecs, NULL); - return poutrecs; - } -} diff --git a/c/mapping/mapper_tee.c b/c/mapping/mapper_tee.c deleted file mode 100644 index ca3ab675c..000000000 --- a/c/mapping/mapper_tee.c +++ /dev/null @@ -1,159 +0,0 @@ -#include "cli/mlrcli.h" -#include "containers/sllv.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "mapping/mappers.h" -#include "output/lrec_writers.h" - -typedef struct _mapper_tee_state_t { - char* output_file_name; - FILE* output_stream; - int flush_every_record; - lrec_writer_t* plrec_writer; - cli_writer_opts_t* pwriter_opts; -} mapper_tee_state_t; - -#define DEFAULT_COUNTER_FIELD_NAME "n" - -static void mapper_tee_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_tee_alloc(int do_append, int flush_every_record, - char* output_file_name, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts); -static void mapper_tee_free(mapper_t* pmapper, context_t* pctx); -static sllv_t* mapper_tee_process(lrec_t* pinrec, context_t* pctx, void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_tee_setup = { - .verb = "tee", - .pusage_func = mapper_tee_usage, - .pparse_func = mapper_tee_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* pmain_writer_opts) -{ - int do_append = FALSE; - int flush_every_record = TRUE; - cli_writer_opts_t* pwriter_opts = mlr_malloc_or_die(sizeof(cli_writer_opts_t)); - cli_writer_opts_init(pwriter_opts); - - int argi = *pargi; - if ((argc - argi) < 1) { - mapper_tee_usage(stderr, argv[0], argv[argi]); - return NULL; - } - char* verb = argv[argi++]; - - for (; argi < argc; /* variable increment: 1 or 2 depending on flag */) { - - if (argv[argi][0] != '-') { - break; // No more flag options to process - - } else if (cli_handle_writer_options(argv, argc, &argi, pwriter_opts)) { - // handled - - } else if (streq(argv[argi], "-a")) { - do_append = TRUE; - argi++; - - } else if (streq(argv[argi], "--no-fflush") || streq(argv[argi], "--no-flush")) { - flush_every_record = FALSE; - argi++; - - } else { - mapper_tee_usage(stderr, argv[0], verb); - return NULL; - } - - } - - if ((argc - argi) < 1) { - mapper_tee_usage(stderr, argv[0], verb); - return NULL; - } - char* output_file_name = argv[argi++]; - - *pargi = argi; - - mapper_t* pmapper = mapper_tee_alloc(do_append, flush_every_record, output_file_name, - pwriter_opts, pmain_writer_opts); - return pmapper; -} - -static void mapper_tee_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options] {filename}\n", argv0, verb); - fprintf(o, "Passes through input records (like %s cat) but also writes to specified output\n", - MLR_GLOBALS.bargv0); - fprintf(o, "file, using output-format flags from the command line (e.g. --ocsv). See also\n"); - fprintf(o, "the \"tee\" keyword within %s put, which allows data-dependent filenames.\n", - MLR_GLOBALS.bargv0); - fprintf(o, "Options:\n"); - fprintf(o, "-a: append to existing file, if any, rather than overwriting.\n"); - fprintf(o, "--no-fflush: don't call fflush() after every record.\n"); - fprintf(o, "Any of the output-format command-line flags (see %s -h). Example: using\n", - MLR_GLOBALS.bargv0); - fprintf(o, " %s --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ...\n", - MLR_GLOBALS.bargv0); - fprintf(o, "the input is CSV, the output is pretty-print tabular, but the tee-file output\n"); - fprintf(o, "is written in JSON format.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_tee_alloc(int do_append, int flush_every_record, - char* output_file_name, cli_writer_opts_t* pwriter_opts, cli_writer_opts_t* pmain_writer_opts) -{ - FILE* fp = fopen(output_file_name, do_append ? "a" : "w"); - if (fp == NULL) { - perror("fopen"); - fprintf(stderr, "%s: fopen error on \"%s\".\n", MLR_GLOBALS.bargv0, output_file_name); - exit(1); - } - - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - mapper_tee_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_tee_state_t)); - pstate->output_file_name = output_file_name; - pstate->output_stream = fp; - pstate->flush_every_record = flush_every_record; - pstate->pwriter_opts = pwriter_opts; - - cli_merge_writer_opts(pstate->pwriter_opts, pmain_writer_opts); - pstate->plrec_writer = lrec_writer_alloc_or_die(pstate->pwriter_opts); - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_tee_process; - pmapper->pfree_func = mapper_tee_free; - return pmapper; -} -static void mapper_tee_free(mapper_t* pmapper, context_t* pctx) { - mapper_tee_state_t* pstate = pmapper->pvstate; - pstate->plrec_writer->pfree_func(pstate->plrec_writer, pctx); - free(pstate->pwriter_opts); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_tee_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_tee_state_t* pstate = (mapper_tee_state_t*)pvstate; - - if (pinrec != NULL) { - // Copy the record since the lrec-writer will free it, and we need the original - // to return as stream output. - lrec_t* pcopy = lrec_copy(pinrec); - pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, pcopy, pctx); - if (pstate->flush_every_record) - fflush(pstate->output_stream); - return sllv_single(pinrec); - } else { - pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, NULL, pctx); - if (fclose(pstate->output_stream) != 0) { - perror("fclose"); - fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, pstate->output_file_name); - exit(1); - } - return sllv_single(NULL); - } -} diff --git a/c/mapping/mapper_top.c b/c/mapping/mapper_top.c deleted file mode 100644 index cbf67141f..000000000 --- a/c/mapping/mapper_top.c +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include -#include -#include - -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/top_keeper.h" -#include "containers/mixutil.h" -#include "lib/mvfuncs.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_OUTPUT_FIELD_NAME "top_idx" - -typedef mv_t maybe_sign_flipper_t(mv_t* pval1); - -typedef struct _mapper_top_state_t { - ap_state_t* pargp; - slls_t* pvalue_field_names; - slls_t* pgroup_by_field_names; - int top_count; - int show_full_records; - int allow_int_float; - maybe_sign_flipper_t* pmaybe_sign_flipper; - lhmslv_t* groups; - char* output_field_name; -} mapper_top_state_t; - -static void mapper_top_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_top_alloc(ap_state_t* pargp, slls_t* pvalue_field_names, slls_t* pgroup_by_field_names, - int top_count, int do_max, int show_full_records, int allow_int_float, char* output_field_name); -static void mapper_top_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_top_process(lrec_t* pinrec, context_t* pctx, void* pvstate); -static void mapper_top_ingest(lrec_t* pinrec, mapper_top_state_t* pstate); -static sllv_t* mapper_top_emit(mapper_top_state_t* pstate, context_t* pctx); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_top_setup = { - .verb = "top", - .pusage_func = mapper_top_usage, - .pparse_func = mapper_top_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_top_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "-f {a,b,c} Value-field names for top counts.\n"); - fprintf(o, "-g {d,e,f} Optional group-by-field names for top counts.\n"); - fprintf(o, "-n {count} How many records to print per category; default 1.\n"); - fprintf(o, "-a Print all fields for top-value records; default is\n"); - fprintf(o, " to print only value and group-by fields. Requires a single\n"); - fprintf(o, " value-field name only.\n"); - fprintf(o, "--min Print top smallest values; default is top largest values.\n"); - fprintf(o, "-F Keep top values as floats even if they look like integers.\n"); - fprintf(o, "-o {name} Field name for output indices. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); - - fprintf(o, "Prints the n records with smallest/largest values at specified fields,\n"); - fprintf(o, "optionally by category.\n"); -} - -static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - int top_count = 1; - slls_t* pvalue_field_names = NULL; - slls_t* pgroup_by_field_names = slls_alloc(); - int show_full_records = FALSE; - int do_max = TRUE; - int allow_int_float = TRUE; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_int_flag(pstate, "-n", &top_count); - ap_define_string_list_flag(pstate, "-f", &pvalue_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_true_flag(pstate, "-a", &show_full_records); - ap_define_true_flag(pstate, "--max", &do_max); - ap_define_false_flag(pstate, "--min", &do_max); - ap_define_false_flag(pstate, "-F", &allow_int_float); - ap_define_string_flag(pstate, "-o", &output_field_name); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_top_usage(stderr, argv[0], verb); - return NULL; - } - if (pvalue_field_names == NULL) { - mapper_top_usage(stderr, argv[0], verb); - return NULL; - } - if (pvalue_field_names->length > 1 && show_full_records) { - mapper_top_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_top_alloc(pstate, pvalue_field_names, pgroup_by_field_names, - top_count, do_max, show_full_records, allow_int_float, output_field_name); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_top_alloc(ap_state_t* pargp, slls_t* pvalue_field_names, slls_t* pgroup_by_field_names, - int top_count, int do_max, int show_full_records, int allow_int_float, char* output_field_name) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_top_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_top_state_t)); - - pstate->pargp = pargp; - pstate->pvalue_field_names = pvalue_field_names; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->show_full_records = show_full_records; - pstate->allow_int_float = allow_int_float; - pstate->top_count = top_count; - pstate->pmaybe_sign_flipper = do_max ? x_x_upos_func : x_x_uneg_func; - pstate->groups = lhmslv_alloc(); - pstate->output_field_name = output_field_name; - - pmapper->pvstate = pstate; - pmapper->pprocess_func = mapper_top_process; - pmapper->pfree_func = mapper_top_free; - - return pmapper; -} - -static void mapper_top_free(mapper_t* pmapper, context_t* _) { - mapper_top_state_t* pstate = pmapper->pvstate; - slls_free(pstate->pvalue_field_names); - slls_free(pstate->pgroup_by_field_names); - - // Free the hashmap pvvalues; the lhm free methods will free the hashmap keys. - for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { - lhmsv_t* pgroup = pa->pvvalue; - for (lhmsve_t* pb = pgroup->phead; pb != NULL; pb = pb->pnext) { - top_keeper_t* ptop_keeper_for_group = pb->pvvalue; - top_keeper_free(ptop_keeper_for_group); - } - lhmsv_free(pgroup); - } - - lhmslv_free(pstate->groups); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_top_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { - mapper_top_state_t* pstate = pvstate; - - if (pinrec != NULL) { - mapper_top_ingest(pinrec, pstate); - return NULL; - } else { - return mapper_top_emit(pstate, pctx); - } -} - -// ---------------------------------------------------------------- -static void mapper_top_ingest(lrec_t* pinrec, mapper_top_state_t* pstate) { - // ["s", "t"] - slls_t* pvalue_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pvalue_field_names); - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); - - // Heterogeneous-data case -- not all sought fields were present in record - if (pvalue_field_values == NULL || pgroup_by_field_values == NULL) { - slls_free(pvalue_field_values); - slls_free(pgroup_by_field_values); - lrec_free(pinrec); - return; - } - if (pgroup_by_field_values->length != pstate->pgroup_by_field_names->length) { - slls_free(pvalue_field_values); - slls_free(pgroup_by_field_values); - lrec_free(pinrec); - return; - } - - lhmsv_t* group_to_acc_field = lhmslv_get(pstate->groups, pgroup_by_field_values); - if (group_to_acc_field == NULL) { - group_to_acc_field = lhmsv_alloc(); - lhmslv_put(pstate->groups, slls_copy(pgroup_by_field_values), group_to_acc_field, FREE_ENTRY_KEY); - } - slls_free(pgroup_by_field_values); - - sllse_t* pa = pstate->pvalue_field_names->phead; - sllse_t* pb = pvalue_field_values->phead; - // for "x", "y" and "1", "2" - for ( ; pa != NULL && pb != NULL; pa = pa->pnext, pb = pb->pnext) { - char* value_field_name = pa->value; - char* value_field_sval = pb->value; - if (value_field_sval == NULL) { // Key not present - if (pstate->show_full_records) - lrec_free(pinrec); - continue; - } - - top_keeper_t* ptop_keeper_for_group = lhmsv_get(group_to_acc_field, value_field_name); - if (ptop_keeper_for_group == NULL) { - ptop_keeper_for_group = top_keeper_alloc(pstate->top_count); - lhmsv_put(group_to_acc_field, value_field_name, ptop_keeper_for_group, NO_FREE); - } - - if (*value_field_sval == 0) { // Key present with null value - if (pstate->show_full_records) - lrec_free(pinrec); - continue; - } - - mv_t value_field_nval = pstate->allow_int_float - ? mv_scan_number_or_die(value_field_sval) - : mv_from_float(mlr_double_from_string_or_die(value_field_sval)); - - // The top-keeper object will free the record if it isn't retained, or - // keep it if it is. - top_keeper_add(ptop_keeper_for_group, pstate->pmaybe_sign_flipper(&value_field_nval), - (pstate->show_full_records) ? pinrec : NULL); - } - if (!pstate->show_full_records) - lrec_free(pinrec); - slls_free(pvalue_field_values); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_top_emit(mapper_top_state_t* pstate, context_t* pctx) { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->groups->phead; pa != NULL; pa = pa->pnext) { - - // Above we required that there was only one value field in the - // show-full-records case. That's for two reasons: (1) here, we print - // each record at most once, which would need a change in the format - // presented as output; (2) there would be double-frees in our - // ingester. - if (pstate->show_full_records) { - lhmsv_t* group_to_acc_field = pa->pvvalue; - for (lhmsve_t* pd = group_to_acc_field->phead; pd != NULL; pd = pd->pnext) { - top_keeper_t* ptop_keeper_for_group = pd->pvvalue; - for (int i = 0; i < ptop_keeper_for_group->size; i++) { - sllv_append(poutrecs, ptop_keeper_for_group->top_precords[i]); - ptop_keeper_for_group->top_precords[i] = NULL; - } - } - } - - else { - slls_t* pgroup_by_field_values = pa->key; - for (int i = 0; i < pstate->top_count; i++) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - // Add in a=s,b=t fields: - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - - // Add in fields such as x_top_1=# - lhmsv_t* group_to_acc_field = pa->pvvalue; - // for "x", "y" - for (lhmsve_t* pd = group_to_acc_field->phead; pd != NULL; pd = pd->pnext) { - char* value_field_name = pd->key; - top_keeper_t* ptop_keeper_for_group = pd->pvvalue; - - char* key = mlr_paste_2_strings(value_field_name, "_top"); - if (i < ptop_keeper_for_group->size) { - mv_t numv = pstate->pmaybe_sign_flipper(&ptop_keeper_for_group->top_values[i]); - char* strv = mv_alloc_format_val(&numv); - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(i+1), FREE_ENTRY_VALUE); - lrec_put(poutrec, key, strv, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } else { - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(i+1), FREE_ENTRY_VALUE); - lrec_put(poutrec, key, "", FREE_ENTRY_KEY); - } - } - sllv_append(poutrecs, poutrec); - } - } - } - - sllv_append(poutrecs, NULL); - return poutrecs; -} diff --git a/c/mapping/mapper_uniq.c b/c/mapping/mapper_uniq.c deleted file mode 100644 index 4559d2d35..000000000 --- a/c/mapping/mapper_uniq.c +++ /dev/null @@ -1,594 +0,0 @@ -#include -#include -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/lhmsll.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/lhmsll.h" -#include "containers/mixutil.h" -#include "mapping/mappers.h" -#include "cli/argparse.h" - -#define DEFAULT_OUTPUT_FIELD_NAME "count" - -typedef struct _mapper_uniq_state_t { - ap_state_t* pargp; - slls_t* pgroup_by_field_names; - int show_counts; - int show_num_distinct_only; - lhmsll_t* puniqified_record_counts; // lrec_sprintf -> counts - lhmsv_t* puniqified_records; // lrec_sprintf -> records - lhmslv_t* pcounts_by_group; - lhmsv_t* pcounts_unlashed; // string field name -> string field value -> long long count - char* output_field_name; -} mapper_uniq_state_t; - -// ---------------------------------------------------------------- -static void mapper_uniq_usage( - FILE* o, - char* argv0, - char* verb); - -static mapper_t* mapper_uniq_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __); - -static void mapper_count_distinct_usage( - FILE* o, - char* argv0, - char* verb); - -static mapper_t* mapper_count_distinct_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __); - -static mapper_t* mapper_uniq_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - int do_lashed, - int show_counts, - int show_num_distinct_only, - char* output_field_name, - int uniqify_entire_records); - -static void mapper_uniq_free( - mapper_t* pmapper, - context_t* _); - -static sllv_t* mapper_uniq_process_uniqify_entire_records( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_uniqify_entire_records_show_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_uniqify_entire_records_show_num_distinct_only( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_unlashed( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_num_distinct_only( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_with_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -static sllv_t* mapper_uniq_process_no_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_count_distinct_setup = { - .verb = "count-distinct", - .pusage_func = mapper_count_distinct_usage, - .pparse_func = mapper_count_distinct_parse_cli, - .ignores_input = FALSE, -}; - -mapper_setup_t mapper_uniq_setup = { - .verb = "uniq", - .pusage_func = mapper_uniq_usage, - .pparse_func = mapper_uniq_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_count_distinct_usage( - FILE* o, - char* argv0, - char* verb) -{ - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Prints number of records having distinct values for specified field names.\n"); - fprintf(o, "Same as uniq -c.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-f {a,b,c} Field names for distinct count.\n"); - fprintf(o, "-n Show only the number of distinct values. Not compatible with -u.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); - fprintf(o, " Ignored with -u.\n"); - fprintf(o, "-u Do unlashed counts for multiple field names. With -f a,b and\n"); - fprintf(o, " without -u, computes counts for distinct combinations of a\n"); - fprintf(o, " and b field values. With -f a,b and with -u, computes counts\n"); - fprintf(o, " for distinct a field values and counts for distinct b field\n"); - fprintf(o, " values separately.\n"); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_count_distinct_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __) -{ - slls_t* pfield_names = NULL; - int show_num_distinct_only = FALSE; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - int do_lashed = TRUE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pfield_names); - ap_define_true_flag(pstate, "-n", &show_num_distinct_only); - ap_define_string_flag(pstate, "-o", &output_field_name); - ap_define_false_flag(pstate, "-u", &do_lashed); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_count_distinct_usage(stderr, argv[0], verb); - return NULL; - } - - if (pfield_names == NULL) { - mapper_count_distinct_usage(stderr, argv[0], verb); - return NULL; - } - if (!do_lashed && show_num_distinct_only) { - mapper_count_distinct_usage(stderr, argv[0], verb); - return NULL; - } - - return mapper_uniq_alloc(pstate, pfield_names, do_lashed, TRUE, show_num_distinct_only, - output_field_name, FALSE); -} - -// ---------------------------------------------------------------- -static void mapper_uniq_usage( - FILE* o, - char* argv0, - char* verb) -{ - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Prints distinct values for specified field names. With -c, same as\n"); - fprintf(o, "count-distinct. For uniq, -f is a synonym for -g.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "-g {d,e,f} Group-by-field names for uniq counts.\n"); - fprintf(o, "-c Show repeat counts in addition to unique values.\n"); - fprintf(o, "-n Show only the number of distinct values.\n"); - fprintf(o, "-o {name} Field name for output count. Default \"%s\".\n", DEFAULT_OUTPUT_FIELD_NAME); - fprintf(o, "-a Output each unique record only once. Incompatible with -g.\n"); - fprintf(o, " With -c, produces unique records, with repeat counts for each.\n"); - fprintf(o, " With -n, produces only one record which is the unique-record count.\n"); - fprintf(o, " With neither -c nor -n, produces unique records.\n"); -} - -static mapper_t* mapper_uniq_parse_cli( - int* pargi, - int argc, - char** argv, - cli_reader_opts_t* _, - cli_writer_opts_t* __) -{ - slls_t* pgroup_by_field_names = NULL; - int show_counts = FALSE; - int show_num_distinct_only = FALSE; - char* output_field_name = DEFAULT_OUTPUT_FIELD_NAME; - int do_lashed = TRUE; - int uniqify_entire_records = FALSE; - - char* verb = argv[(*pargi)++]; - - ap_state_t* pstate = ap_alloc(); - ap_define_string_list_flag(pstate, "-f", &pgroup_by_field_names); - ap_define_string_list_flag(pstate, "-g", &pgroup_by_field_names); - ap_define_true_flag(pstate, "-c", &show_counts); - ap_define_true_flag(pstate, "-n", &show_num_distinct_only); - ap_define_string_flag(pstate, "-o", &output_field_name); - ap_define_true_flag(pstate, "-a", &uniqify_entire_records); - - if (!ap_parse(pstate, verb, pargi, argc, argv)) { - mapper_uniq_usage(stderr, argv[0], verb); - return NULL; - } - - if (uniqify_entire_records) { - if (pgroup_by_field_names != NULL) { - mapper_uniq_usage(stderr, argv[0], verb); - return NULL; - } - if (show_counts && show_num_distinct_only) { - mapper_uniq_usage(stderr, argv[0], verb); - return NULL; - } - } else { - if (pgroup_by_field_names == NULL) { - mapper_uniq_usage(stderr, argv[0], verb); - return NULL; - } - } - - return mapper_uniq_alloc(pstate, pgroup_by_field_names, do_lashed, show_counts, show_num_distinct_only, - output_field_name, uniqify_entire_records); -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_uniq_alloc( - ap_state_t* pargp, - slls_t* pgroup_by_field_names, - int do_lashed, - int show_counts, - int show_num_distinct_only, - char* output_field_name, - int uniqify_entire_records) -{ - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_uniq_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_uniq_state_t)); - - pstate->pargp = pargp; - pstate->pgroup_by_field_names = pgroup_by_field_names; - pstate->show_counts = show_counts; - pstate->show_num_distinct_only = show_num_distinct_only; - pstate->puniqified_record_counts = lhmsll_alloc(); - pstate->puniqified_records = lhmsv_alloc(); - pstate->pcounts_by_group = lhmslv_alloc(); - pstate->pcounts_unlashed = lhmsv_alloc(); - pstate->output_field_name = output_field_name; - - pmapper->pvstate = pstate; - if (uniqify_entire_records) { - if (show_counts) - pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records_show_counts; - else if (show_num_distinct_only) - pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records_show_num_distinct_only; - else - pmapper->pprocess_func = mapper_uniq_process_uniqify_entire_records; - } else if (!do_lashed) - pmapper->pprocess_func = mapper_uniq_process_unlashed; - else if (show_num_distinct_only) - pmapper->pprocess_func = mapper_uniq_process_num_distinct_only; - else if (show_counts) - pmapper->pprocess_func = mapper_uniq_process_with_counts; - else - pmapper->pprocess_func = mapper_uniq_process_no_counts; - pmapper->pfree_func = mapper_uniq_free; - - return pmapper; -} - -static void mapper_uniq_free( - mapper_t* pmapper, - context_t* _) -{ - mapper_uniq_state_t* pstate = pmapper->pvstate; - - slls_free(pstate->pgroup_by_field_names); - - lhmsll_free(pstate->puniqified_record_counts); - pstate->puniqified_record_counts = NULL; - - // lhmslv_free will free the keys: we only need to free the void-star values. - for (lhmsve_t* pa = pstate->puniqified_records->phead; pa != NULL; pa = pa->pnext) { - lrec_t* prec = pa->pvvalue; - lrec_free(prec); - } - lhmsv_free(pstate->puniqified_records); - pstate->puniqified_records = NULL; - - // lhmslv_free will free the keys: we only need to free the void-star values. - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - unsigned long long* pcount = pa->pvvalue; - free(pcount); - } - lhmslv_free(pstate->pcounts_by_group); - pstate->pcounts_by_group = NULL; - - for (lhmsve_t* pb = pstate->pcounts_unlashed->phead; pb != NULL; pb = pb->pnext) { - lhmsll_t* pmap = pb->pvvalue; - lhmsll_free(pmap); - } - lhmsv_free(pstate->pcounts_unlashed); - pstate->pcounts_unlashed = NULL; - - pstate->pgroup_by_field_names = NULL; - pstate->pcounts_by_group = NULL; - - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -// Print each unique record only once (on first occurrence). -static sllv_t* mapper_uniq_process_uniqify_entire_records( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); - if (lhmsll_has_key(pstate->puniqified_record_counts, lrec_as_string)) { - // have seen - free(lrec_as_string); - lrec_free(pinrec); - return NULL; - } else { - lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); - return sllv_single(pinrec); - } - } else { // end of record stream - return sllv_single(NULL); - } -} - -// Print each unique record only once, with uniqueness counts. This means -// non-streaming, with output at end of stream. -static sllv_t* mapper_uniq_process_uniqify_entire_records_show_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); - if (lhmsll_test_and_increment(pstate->puniqified_record_counts, lrec_as_string)) { - // have seen; count was just incremented - free(lrec_as_string); - lrec_free(pinrec); - return NULL; - } else { - lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); - lhmsv_put(pstate->puniqified_records, mlr_strdup_or_die(lrec_as_string), pinrec, FREE_ENTRY_KEY); - return NULL; - } - } else { // end of record stream - sllv_t* poutrecs = sllv_alloc(); - - for (lhmsve_t* pe = pstate->puniqified_records->phead; pe != NULL; pe = pe->pnext) { - lrec_t* prec = pe->pvvalue; - long long count = lhmsll_get(pstate->puniqified_record_counts, pe->key); - lrec_prepend(prec, pstate->output_field_name, mlr_alloc_string_from_ll(count), FREE_ENTRY_VALUE); - sllv_append(poutrecs, prec); - pe->pvvalue = NULL; // transfer ownership to poutrecs - } - sllv_append(poutrecs, NULL); - - return poutrecs; - } -} - -// Print count of unique records. This means non-streaming, with output at end -// of stream. -static sllv_t* mapper_uniq_process_uniqify_entire_records_show_num_distinct_only( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - char* lrec_as_string = lrec_sprint(pinrec, "\xfc", "\xfd", "\xfe"); - if (lhmsll_has_key(pstate->puniqified_record_counts, lrec_as_string)) { - free(lrec_as_string); - lrec_free(pinrec); - return NULL; - } else { - lhmsll_put(pstate->puniqified_record_counts, lrec_as_string, 1LL, FREE_ENTRY_KEY); - lrec_free(pinrec); - return NULL; - } - } else { // end of record stream - sllv_t* poutrecs = sllv_alloc(); - lrec_t* poutrec = lrec_unbacked_alloc(); - long long count = pstate->puniqified_record_counts->num_occupied; - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ll(count), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_uniq_process_unlashed( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - for (sllse_t* pe = pstate->pgroup_by_field_names->phead; pe != NULL; pe = pe->pnext) { - char* field_name = pe->value; - lhmsll_t* pcounts_for_field_name = lhmsv_get(pstate->pcounts_unlashed, field_name); - if (pcounts_for_field_name == NULL) { - pcounts_for_field_name = lhmsll_alloc(); - lhmsv_put(pstate->pcounts_unlashed, field_name, pcounts_for_field_name, NO_FREE); - } - char* field_value = lrec_get(pinrec, field_name); - if (field_value != NULL) { - if (!lhmsll_test_and_increment(pcounts_for_field_name, field_value)) { - lhmsll_put(pcounts_for_field_name, mlr_strdup_or_die(field_value), 1LL, FREE_ENTRY_KEY); - } - } - } - lrec_free(pinrec); - return NULL; - } - else { - sllv_t* poutrecs = sllv_alloc(); - for (lhmsve_t* pe = pstate->pcounts_unlashed->phead; pe != NULL; pe = pe->pnext) { - char* field_name= pe->key; - lhmsll_t* pcounts_for_field_name = pe->pvvalue; - for (lhmslle_t* pf = pcounts_for_field_name->phead; pf != NULL; pf = pf->pnext) { - char* field_value = pf->key; - lrec_t* poutrec = lrec_unbacked_alloc(); - lrec_put(poutrec, "field", field_name, NO_FREE); - lrec_put(poutrec, "value", field_value, NO_FREE); - lrec_put(poutrec, "count", mlr_alloc_string_from_ll(pf->value), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - } - } - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -static sllv_t* mapper_uniq_process_num_distinct_only( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); - } else { - (*pcount)++; - } - slls_free(pgroup_by_field_values); - } - lrec_free(pinrec); - return NULL; - } - else { - sllv_t* poutrecs = sllv_alloc(); - - lrec_t* poutrec = lrec_unbacked_alloc(); - int count = pstate->pcounts_by_group->num_occupied; - lrec_put(poutrec, "count", mlr_alloc_string_from_int(count), FREE_ENTRY_VALUE); - sllv_append(poutrecs, poutrec); - - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -static sllv_t* mapper_uniq_process_with_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec != NULL) { - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values != NULL) { - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - lhmslv_put(pstate->pcounts_by_group, slls_copy(pgroup_by_field_values), pcount, FREE_ENTRY_KEY); - } else { - (*pcount)++; - } - slls_free(pgroup_by_field_values); - } - lrec_free(pinrec); - return NULL; - } else { - sllv_t* poutrecs = sllv_alloc(); - - for (lhmslve_t* pa = pstate->pcounts_by_group->phead; pa != NULL; pa = pa->pnext) { - lrec_t* poutrec = lrec_unbacked_alloc(); - - slls_t* pgroup_by_field_values = pa->key; - - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pgroup_by_field_values->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - - if (pstate->show_counts) { - unsigned long long* pcount = pa->pvvalue; - lrec_put(poutrec, pstate->output_field_name, mlr_alloc_string_from_ull(*pcount), FREE_ENTRY_VALUE); - } - - sllv_append(poutrecs, poutrec); - } - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -static sllv_t* mapper_uniq_process_no_counts( - lrec_t* pinrec, - context_t* pctx, - void* pvstate) -{ - mapper_uniq_state_t* pstate = pvstate; - if (pinrec == NULL) { // end of record stream - return sllv_single(NULL); - } - - slls_t* pgroup_by_field_values = mlr_reference_selected_values_from_record(pinrec, - pstate->pgroup_by_field_names); - if (pgroup_by_field_values == NULL) { - lrec_free(pinrec); - return NULL; - } - - unsigned long long* pcount = lhmslv_get(pstate->pcounts_by_group, pgroup_by_field_values); - if (pcount == NULL) { - pcount = mlr_malloc_or_die(sizeof(unsigned long long)); - *pcount = 1LL; - slls_t* pcopy = slls_copy(pgroup_by_field_values); - lhmslv_put(pstate->pcounts_by_group, pcopy, pcount, FREE_ENTRY_KEY); - - lrec_t* poutrec = lrec_unbacked_alloc(); - - sllse_t* pb = pstate->pgroup_by_field_names->phead; - sllse_t* pc = pcopy->phead; - for ( ; pb != NULL && pc != NULL; pb = pb->pnext, pc = pc->pnext) { - lrec_put(poutrec, pb->value, pc->value, NO_FREE); - } - - lrec_free(pinrec); - slls_free(pgroup_by_field_values); - return sllv_single(poutrec); - } else { - (*pcount)++; - lrec_free(pinrec); - slls_free(pgroup_by_field_values); - return NULL; - } -} diff --git a/c/mapping/mapper_unsparsify.c b/c/mapping/mapper_unsparsify.c deleted file mode 100644 index 4d1e9c84d..000000000 --- a/c/mapping/mapper_unsparsify.c +++ /dev/null @@ -1,178 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "cli/argparse.h" -#include "containers/lhmsi.h" -#include "containers/sllv.h" -#include "mapping/mappers.h" - -typedef struct _mapper_unsparsify_state_t { - lhmsi_t* key_names; - sllv_t* records; - char* filler; - ap_state_t* pargp; -} mapper_unsparsify_state_t; - -static void mapper_unsparsify_usage(FILE* o, char* argv0, char* verb); -static mapper_t* mapper_unsparsify_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __); -static mapper_t* mapper_unsparsify_alloc(ap_state_t* pargp, slls_t* pspecified_field_name, - char* filler); -static void mapper_unsparsify_free(mapper_t* pmapper, context_t* _); -static sllv_t* mapper_unsparsify_streaming_process(lrec_t* pinrec, context_t* pctx, - void* pvstate); -static sllv_t* mapper_unsparsify_non_streaming_process(lrec_t* pinrec, context_t* pctx, - void* pvstate); - -// ---------------------------------------------------------------- -mapper_setup_t mapper_unsparsify_setup = { - .verb = "unsparsify", - .pusage_func = mapper_unsparsify_usage, - .pparse_func = mapper_unsparsify_parse_cli, - .ignores_input = FALSE, -}; - -// ---------------------------------------------------------------- -static void mapper_unsparsify_usage(FILE* o, char* argv0, char* verb) { - fprintf(o, "Usage: %s %s [options]\n", argv0, verb); - fprintf(o, "Prints records with the union of field names over all input records.\n"); - fprintf(o, "For field names absent in a given record but present in others, fills in a\n"); - fprintf(o, "value. Without -f, this verb retains all input before producing any output.\n"); - fprintf(o, "\n"); - fprintf(o, "Options:\n"); - fprintf(o, "--fill-with {filler string} What to fill absent fields with. Defaults to\n"); - fprintf(o, " the empty string.\n"); - fprintf(o, "-f {a,b,c} Specify field names to be operated on. Any other fields won't be\n"); - fprintf(o, " modified, and operation will be streaming.\n"); - fprintf(o, "\n"); - fprintf(o, "Example: if the input is two records, one being 'a=1,b=2' and the other\n"); - fprintf(o, "being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and\n"); - fprintf(o, "'a=,b=3,c=4'.\n"); -} - -static mapper_t* mapper_unsparsify_parse_cli(int* pargi, int argc, char** argv, - cli_reader_opts_t* _, cli_writer_opts_t* __) -{ - char* filler = ""; - slls_t* pspecified_field_names = slls_alloc(); - - if ((argc - *pargi) < 1) { - mapper_unsparsify_usage(stderr, argv[0], argv[*pargi]); - return NULL; - } - char* verb = argv[*pargi]; - *pargi += 1; - - ap_state_t* pargp = ap_alloc(); - ap_define_string_flag(pargp, "--fill-with", &filler); - ap_define_string_list_flag(pargp, "-f", &pspecified_field_names); - - if (!ap_parse(pargp, verb, pargi, argc, argv)) { - mapper_unsparsify_usage(stderr, argv[0], verb); - return NULL; - } - - mapper_t* pmapper = mapper_unsparsify_alloc(pargp, pspecified_field_names, filler); - return pmapper; -} - -// ---------------------------------------------------------------- -static mapper_t* mapper_unsparsify_alloc( - ap_state_t* pargp, - slls_t* pspecified_field_names, - char* filler -) { - mapper_t* pmapper = mlr_malloc_or_die(sizeof(mapper_t)); - - mapper_unsparsify_state_t* pstate = mlr_malloc_or_die(sizeof(mapper_unsparsify_state_t)); - pstate->records = sllv_alloc(); - pstate->key_names = lhmsi_alloc(); - pstate->filler = filler; - pstate->pargp = pargp; - - pmapper->pvstate = pstate; - pmapper->pfree_func = mapper_unsparsify_free; - if (pspecified_field_names->length == 0) { - pmapper->pprocess_func = mapper_unsparsify_non_streaming_process; - } else { - for (sllse_t* pe = pspecified_field_names->phead; pe != NULL; pe = pe ->pnext) { - lhmsi_put(pstate->key_names, mlr_strdup_or_die(pe->value), 1, NO_FREE); - } - pmapper->pprocess_func = mapper_unsparsify_streaming_process; - } - - return pmapper; -} - -static void mapper_unsparsify_free(mapper_t* pmapper, context_t* _) { - mapper_unsparsify_state_t* pstate = pmapper->pvstate; - // Free the container - sllv_free(pstate->records); - lhmsi_free(pstate->key_names); - ap_free(pstate->pargp); - free(pstate); - free(pmapper); -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_unsparsify_non_streaming_process( - lrec_t* pinrec, - context_t* pctx, - void* pvstate -) { - mapper_unsparsify_state_t* pstate = pvstate; - if (pinrec != NULL) { // Not end of stream. - for (lrece_t* pe = pinrec->phead; pe != NULL; pe = pe->pnext) { - if (!lhmsi_has_key(pstate->key_names, pe->key)) { - lhmsi_put(pstate->key_names, mlr_strdup_or_die(pe->key), 1, FREE_ENTRY_KEY); - } - } - // The caller will free the outrecs - sllv_append(pstate->records, pinrec); - return NULL; - } - else { // End of stream. - sllv_t* poutrecs = sllv_alloc(); - for (sllve_t* pe = pstate->records->phead; pe != NULL; pe = pe->pnext) { - lrec_t* pinrec = pe->pvvalue; - lrec_t* poutrec = lrec_unbacked_alloc(); - for (lhmsie_t* pf = pstate->key_names->phead; pf != NULL; pf = pf->pnext) { - char* key = pf->key; - char* value = lrec_get(pinrec, key); - if (value == NULL) { - lrec_put(poutrec, mlr_strdup_or_die(key), pstate->filler, FREE_ENTRY_KEY); - } else { - lrec_put(poutrec, mlr_strdup_or_die(key), mlr_strdup_or_die(value), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - } - sllv_append(poutrecs, poutrec); - // Free the void-star payload - lrec_free(pinrec); - } - - sllv_append(poutrecs, NULL); - return poutrecs; - } -} - -// ---------------------------------------------------------------- -static sllv_t* mapper_unsparsify_streaming_process( - lrec_t* pinrec, - context_t* pctx, - void* pvstate -) { - mapper_unsparsify_state_t* pstate = pvstate; - if (pinrec != NULL) { // Not end of stream. - - for (lhmsie_t* pe = pstate->key_names->phead; pe != NULL; pe = pe->pnext) { - if (lrec_get(pinrec, pe->key) == NULL) { - lrec_put(pinrec, mlr_strdup_or_die(pe->key), pstate->filler, FREE_ENTRY_KEY); - } - } - - return sllv_single(pinrec); - } - else { // End of stream. - return sllv_single(NULL); - } -} diff --git a/c/mapping/mappers.c b/c/mapping/mappers.c deleted file mode 100644 index 5864957cd..000000000 --- a/c/mapping/mappers.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "mapping/mappers.h" - -// ---------------------------------------------------------------- -void mapper_chain_free(sllv_t* pmapper_chain, context_t* pctx) { - for (sllve_t* pe = pmapper_chain->phead; pe != NULL; pe = pe->pnext) { - mapper_t* pmapper = pe->pvvalue; - pmapper->pfree_func(pmapper, pctx); - } - sllv_free(pmapper_chain); -} diff --git a/c/mapping/mappers.h b/c/mapping/mappers.h deleted file mode 100644 index 5428f55e2..000000000 --- a/c/mapping/mappers.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef MAPPERS_H -#define MAPPERS_H -#include "containers/lhmss.h" -#include "containers/slls.h" -#include "mapping/mapper.h" - -extern mapper_setup_t mapper_altkv_setup; -extern mapper_setup_t mapper_bar_setup; -extern mapper_setup_t mapper_bootstrap_setup; -extern mapper_setup_t mapper_cat_setup; -extern mapper_setup_t mapper_check_setup; -extern mapper_setup_t mapper_clean_whitespace_setup; -extern mapper_setup_t mapper_count_setup; -extern mapper_setup_t mapper_count_distinct_setup; -extern mapper_setup_t mapper_count_similar_setup; -extern mapper_setup_t mapper_cut_setup; -extern mapper_setup_t mapper_decimate_setup; -extern mapper_setup_t mapper_fill_down_setup; -extern mapper_setup_t mapper_fill_empty_setup; -extern mapper_setup_t mapper_filter_setup; -extern mapper_setup_t mapper_format_values_setup; -extern mapper_setup_t mapper_fraction_setup; -extern mapper_setup_t mapper_grep_setup; -extern mapper_setup_t mapper_group_by_setup; -extern mapper_setup_t mapper_group_like_setup; -extern mapper_setup_t mapper_having_fields_setup; -extern mapper_setup_t mapper_head_setup; -extern mapper_setup_t mapper_histogram_setup; -extern mapper_setup_t mapper_join_setup; -extern mapper_setup_t mapper_label_setup; -extern mapper_setup_t mapper_least_frequent_setup; -extern mapper_setup_t mapper_merge_fields_setup; -extern mapper_setup_t mapper_most_frequent_setup; -extern mapper_setup_t mapper_nest_setup; -extern mapper_setup_t mapper_nothing_setup; -extern mapper_setup_t mapper_put_setup; -extern mapper_setup_t mapper_regularize_setup; -extern mapper_setup_t mapper_remove_empty_columns_setup; -extern mapper_setup_t mapper_rename_setup; -extern mapper_setup_t mapper_reorder_setup; -extern mapper_setup_t mapper_repeat_setup; -extern mapper_setup_t mapper_reshape_setup; -extern mapper_setup_t mapper_sample_setup; -extern mapper_setup_t mapper_sec2gmt_setup; -extern mapper_setup_t mapper_sec2gmtdate_setup; -extern mapper_setup_t mapper_seqgen_setup; -extern mapper_setup_t mapper_shuffle_setup; -extern mapper_setup_t mapper_skip_trivial_records_setup; -extern mapper_setup_t mapper_sort_setup; -extern mapper_setup_t mapper_sort_within_records_setup; -// xxx temp for 5.4.0 -- will continue work after -// extern mapper_setup_t mapper_sort_within_records_setup; -extern mapper_setup_t mapper_stats1_setup; -extern mapper_setup_t mapper_stats2_setup; -extern mapper_setup_t mapper_step_setup; -extern mapper_setup_t mapper_tac_setup; -extern mapper_setup_t mapper_tail_setup; -extern mapper_setup_t mapper_tee_setup; -extern mapper_setup_t mapper_top_setup; -extern mapper_setup_t mapper_uniq_setup; -extern mapper_setup_t mapper_unsparsify_setup; - -// Construction is in mlrcli.c. -void mapper_chain_free(sllv_t* pmapper_chain, context_t* pctx); - -#endif // MAPPERS_H diff --git a/c/mapping/stats1_accumulators.c b/c/mapping/stats1_accumulators.c deleted file mode 100644 index 738793e09..000000000 --- a/c/mapping/stats1_accumulators.c +++ /dev/null @@ -1,706 +0,0 @@ -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/mlrstat.h" -#include "containers/slls.h" -#include "containers/lhmslv.h" -#include "containers/lhmsv.h" -#include "containers/lhmss.h" -#include "containers/lhmsll.h" -#include "containers/percentile_keeper.h" -#include "lib/mvfuncs.h" -#include "mapping/stats1_accumulators.h" - -// ---------------------------------------------------------------- -void make_stats1_accs( - char* value_field_name, // input - slls_t* paccumulator_names, // input - int allow_int_float, // input - int do_interpolated_percentiles, // input - lhmsv_t* acc_field_to_acc_state_in, // output - lhmsv_t* acc_field_to_acc_state_out) // output -{ - stats1_acc_t* ppercentile_acc = NULL; - for (sllse_t* pc = paccumulator_names->phead; pc != NULL; pc = pc->pnext) { - // for "sum", "count" - char* stats1_acc_name = pc->value; - - // For percentiles there is one unique accumulator given (for example) five distinct - // names p0,p25,p50,p75,p100. The input accumulators are unique: only one - // percentile-keeper. There are multiple output accumulators: each references the same - // underlying percentile-keeper but with distinct parameters. Hence the "_in" and "_out" maps. - if (is_percentile_acc_name(stats1_acc_name)) { - if (ppercentile_acc == NULL) { - ppercentile_acc = stats1_percentile_alloc(value_field_name, stats1_acc_name, allow_int_float, - do_interpolated_percentiles); - if (ppercentile_acc == NULL) { - fprintf(stderr, "%s stats1: accumulator \"%s\" not found.\n", - MLR_GLOBALS.bargv0, stats1_acc_name); - exit(1); - } - lhmsv_put(acc_field_to_acc_state_in, stats1_acc_name, ppercentile_acc, NO_FREE); - } else { - stats1_percentile_reuse(ppercentile_acc); - } - lhmsv_put(acc_field_to_acc_state_out, stats1_acc_name, ppercentile_acc, NO_FREE); - } else { - stats1_acc_t* pstats1_acc = make_stats1_acc(value_field_name, stats1_acc_name, allow_int_float, - do_interpolated_percentiles); - if (pstats1_acc == NULL) { - fprintf(stderr, "%s stats1: accumulator \"%s\" not found.\n", - MLR_GLOBALS.bargv0, stats1_acc_name); - exit(1); - } - lhmsv_put(acc_field_to_acc_state_in, stats1_acc_name, pstats1_acc, NO_FREE); - lhmsv_put(acc_field_to_acc_state_out, stats1_acc_name, pstats1_acc, NO_FREE); - } - } -} - -stats1_acc_t* make_stats1_acc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - for (int i = 0; i < stats1_acc_lookup_table_length; i++) - if (streq(stats1_acc_name, stats1_acc_lookup_table[i].name)) - return stats1_acc_lookup_table[i].palloc_func(value_field_name, stats1_acc_name, allow_int_float, - do_interpolated_percentiles); - return NULL; -} - -int is_percentile_acc_name(char* stats1_acc_name) { - if (streq(stats1_acc_name, "median")) - return TRUE; - double percentile; - // sscanf(stats1_acc_name, "p%lf", &percentile) allows "p74x" et al. which isn't ok. - if (stats1_acc_name[0] != 'p') - return FALSE; - if (!mlr_try_float_from_string(&stats1_acc_name[1], &percentile)) - return FALSE; - if (percentile < 0.0 || percentile > 100.0) { - fprintf(stderr, "%s stats1: percentile \"%s\" outside range [0,100].\n", - MLR_GLOBALS.bargv0, stats1_acc_name); - exit(1); - } - return TRUE; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_count_state_t { - mv_t counter; - mv_t one; - char* output_field_name; -} stats1_count_state_t; - -static void stats1_count_singest(void* pvstate, char* val) { - stats1_count_state_t* pstate = pvstate; - pstate->counter = x_xx_plus_func(&pstate->counter, &pstate->one); - -} -static void stats1_count_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_count_state_t* pstate = pvstate; - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->counter), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->counter), - FREE_ENTRY_VALUE); -} -static void stats1_count_free(stats1_acc_t* pstats1_acc) { - stats1_count_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_count_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_count_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_count_state_t)); - pstate->counter = allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - pstate->one = allow_int_float ? mv_from_int(1LL) : mv_from_float(1.0); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_count_singest; - pstats1_acc->pemit_func = stats1_count_emit; - pstats1_acc->pfree_func = stats1_count_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_mode_state_t { - lhmsll_t* pcounts_for_value; - char* output_field_name; -} stats1_mode_state_t; -// mode on strings: "1" and "1.0" and "1.0000" are distinct text. -static void stats1_mode_singest(void* pvstate, char* val) { - stats1_mode_state_t* pstate = pvstate; - lhmslle_t* pe = lhmsll_get_entry(pstate->pcounts_for_value, val); - if (pe == NULL) { - // lhmsll does a strdup so we needn't. - lhmsll_put(pstate->pcounts_for_value, mlr_strdup_or_die(val), 1, FREE_ENTRY_KEY); - } else { - pe->value++; - } -} -static void stats1_mode_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_mode_state_t* pstate = pvstate; - int max_count = 0; - char* max_key = ""; - for (lhmslle_t* pe = pstate->pcounts_for_value->phead; pe != NULL; pe = pe->pnext) { - int count = pe->value; - if (count > max_count) { - max_key = pe->key; - max_count = count; - } - } - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mlr_strdup_or_die(max_key), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, max_key, NO_FREE); -} -static void stats1_mode_free(stats1_acc_t* pstats1_acc) { - stats1_mode_state_t* pstate = pstats1_acc->pvstate; - lhmsll_free(pstate->pcounts_for_value); - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_mode_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_mode_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_mode_state_t)); - pstate->pcounts_for_value = lhmsll_alloc(); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_mode_singest; - pstats1_acc->pemit_func = stats1_mode_emit; - pstats1_acc->pfree_func = stats1_mode_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_antimode_state_t { - lhmsll_t* pcounts_for_value; - char* output_field_name; -} stats1_antimode_state_t; -// antimode on strings: "1" and "1.0" and "1.0000" are distinct text. -static void stats1_antimode_singest(void* pvstate, char* val) { - stats1_antimode_state_t* pstate = pvstate; - lhmslle_t* pe = lhmsll_get_entry(pstate->pcounts_for_value, val); - if (pe == NULL) { - // lhmsll does a strdup so we needn't. - lhmsll_put(pstate->pcounts_for_value, mlr_strdup_or_die(val), 1, FREE_ENTRY_KEY); - } else { - pe->value++; - } -} -static void stats1_antimode_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_antimode_state_t* pstate = pvstate; - int min_count = 0; - int have_min_count = FALSE; - char* min_key = ""; - for (lhmslle_t* pe = pstate->pcounts_for_value->phead; pe != NULL; pe = pe->pnext) { - int count = pe->value; - if (!have_min_count || count < min_count) { - min_key = pe->key; - min_count = count; - have_min_count = TRUE; - } - } - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mlr_strdup_or_die(min_key), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, min_key, NO_FREE); -} -static void stats1_antimode_free(stats1_acc_t* pstats1_acc) { - stats1_antimode_state_t* pstate = pstats1_acc->pvstate; - lhmsll_free(pstate->pcounts_for_value); - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_antimode_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_antimode_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_antimode_state_t)); - pstate->pcounts_for_value = lhmsll_alloc(); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_antimode_singest; - pstats1_acc->pemit_func = stats1_antimode_emit; - pstats1_acc->pfree_func = stats1_antimode_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_sum_state_t { - mv_t sum; - char* output_field_name; - int allow_int_float; -} stats1_sum_state_t; -static void stats1_sum_ningest(void* pvstate, mv_t* pval) { - stats1_sum_state_t* pstate = pvstate; - pstate->sum = x_xx_plus_func(&pstate->sum, pval); -} -static void stats1_sum_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_sum_state_t* pstate = pvstate; - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->sum), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->sum), - FREE_ENTRY_VALUE); -} -static void stats1_sum_free(stats1_acc_t* pstats1_acc) { - stats1_sum_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_sum_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_sum_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_sum_state_t)); - pstate->allow_int_float = allow_int_float; - pstate->sum = pstate->allow_int_float ? mv_from_int(0LL) : mv_from_float(0.0); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = stats1_sum_ningest; - pstats1_acc->psingest_func = NULL; - pstats1_acc->pemit_func = stats1_sum_emit; - pstats1_acc->pfree_func = stats1_sum_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_mean_state_t { - double sum; - unsigned long long count; - char* output_field_name; -} stats1_mean_state_t; -static void stats1_mean_dingest(void* pvstate, double val) { - stats1_mean_state_t* pstate = pvstate; - pstate->sum += val; - pstate->count++; -} -static void stats1_mean_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_mean_state_t* pstate = pvstate; - if (pstate->count == 0LL) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - double quot = pstate->sum / pstate->count; - char* val = mlr_alloc_string_from_double(quot, MLR_GLOBALS.ofmt); - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); - } -} -static void stats1_mean_free(stats1_acc_t* pstats1_acc) { - stats1_mean_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_mean_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_mean_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_mean_state_t)); - pstate->sum = 0.0; - pstate->count = 0LL; - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = stats1_mean_dingest; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = NULL; - pstats1_acc->pemit_func = stats1_mean_emit; - pstats1_acc->pfree_func = stats1_mean_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_stddev_var_meaneb_state_t { - unsigned long long count; - double sumx; - double sumx2; - cumulant2o_t do_which; - char* output_field_name; -} stats1_stddev_var_meaneb_state_t; -static void stats1_stddev_var_meaneb_dingest(void* pvstate, double val) { - stats1_stddev_var_meaneb_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += val; - pstate->sumx2 += val*val; -} - -static void stats1_stddev_var_meaneb_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_stddev_var_meaneb_state_t* pstate = pvstate; - if (pstate->count < 2LL) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - double output = mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2); - if (pstate->do_which == DO_STDDEV) - output = sqrt(output); - else if (pstate->do_which == DO_MEANEB) - output = sqrt(output / pstate->count); - char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); - } -} -static void stats1_stddev_var_meaneb_free(stats1_acc_t* pstats1_acc) { - stats1_stddev_var_meaneb_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} - -stats1_acc_t* stats1_stddev_var_meaneb_alloc(char* value_field_name, char* stats1_acc_name, cumulant2o_t do_which) { - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_stddev_var_meaneb_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_stddev_var_meaneb_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumx2 = 0.0; - pstate->do_which = do_which; - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = stats1_stddev_var_meaneb_dingest; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = NULL; - pstats1_acc->pemit_func = stats1_stddev_var_meaneb_emit; - pstats1_acc->pfree_func = stats1_stddev_var_meaneb_free; - return pstats1_acc; -} -stats1_acc_t* stats1_stddev_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_STDDEV); -} -stats1_acc_t* stats1_var_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_VAR); -} -stats1_acc_t* stats1_meaneb_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - return stats1_stddev_var_meaneb_alloc(value_field_name, stats1_acc_name, DO_MEANEB); -} - -// ---------------------------------------------------------------- -typedef struct _stats1_skewness_state_t { - unsigned long long count; - double sumx; - double sumx2; - double sumx3; - char* output_field_name; -} stats1_skewness_state_t; -static void stats1_skewness_dingest(void* pvstate, double val) { - stats1_skewness_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += val; - pstate->sumx2 += val*val; - pstate->sumx3 += val*val*val; -} - -static void stats1_skewness_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_skewness_state_t* pstate = pvstate; - if (pstate->count < 2LL) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - double output = mlr_get_skewness(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumx3); - char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); - } -} -static void stats1_skewness_free(stats1_acc_t* pstats1_acc) { - stats1_skewness_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} - -stats1_acc_t* stats1_skewness_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_skewness_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_skewness_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumx2 = 0.0; - pstate->sumx3 = 0.0; - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = stats1_skewness_dingest; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = NULL; - pstats1_acc->pemit_func = stats1_skewness_emit; - pstats1_acc->pfree_func = stats1_skewness_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_kurtosis_state_t { - unsigned long long count; - double sumx; - double sumx2; - double sumx3; - double sumx4; - char* output_field_name; -} stats1_kurtosis_state_t; -static void stats1_kurtosis_dingest(void* pvstate, double val) { - stats1_kurtosis_state_t* pstate = pvstate; - pstate->count++; - pstate->sumx += val; - pstate->sumx2 += val*val; - pstate->sumx3 += val*val*val; - pstate->sumx4 += val*val*val*val; -} - -static void stats1_kurtosis_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_kurtosis_state_t* pstate = pvstate; - if (pstate->count < 2LL) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - double output = mlr_get_kurtosis(pstate->count, pstate->sumx, pstate->sumx2, pstate->sumx3, pstate->sumx4); - char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); - } -} -static void stats1_kurtosis_free(stats1_acc_t* pstats1_acc) { - stats1_kurtosis_state_t* pstate = pstats1_acc->pvstate; - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_kurtosis_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_kurtosis_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_kurtosis_state_t)); - pstate->count = 0LL; - pstate->sumx = 0.0; - pstate->sumx2 = 0.0; - pstate->sumx3 = 0.0; - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = stats1_kurtosis_dingest; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = NULL; - pstats1_acc->pemit_func = stats1_kurtosis_emit; - pstats1_acc->pfree_func = stats1_kurtosis_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_min_state_t { - mv_t min; - char* output_field_name; -} stats1_min_state_t; -static void stats1_min_singest(void* pvstate, char* sval) { - stats1_min_state_t* pstate = pvstate; - mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); - pstate->min = x_xx_min_func(&pstate->min, &val); -} -static void stats1_min_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_min_state_t* pstate = pvstate; - if (mv_is_null(&pstate->min)) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->min), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->min), - FREE_ENTRY_VALUE); - } -} -static void stats1_min_free(stats1_acc_t* pstats1_acc) { - stats1_min_state_t* pstate = pstats1_acc->pvstate; - mv_free(&pstate->min); - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_min_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_min_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_min_state_t)); - pstate->min = mv_absent(); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_min_singest; - pstats1_acc->pemit_func = stats1_min_emit; - pstats1_acc->pfree_func = stats1_min_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_max_state_t { - mv_t max; - char* output_field_name; -} stats1_max_state_t; -static void stats1_max_singest(void* pvstate, char* sval) { - stats1_max_state_t* pstate = pvstate; - mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); - pstate->max = x_xx_max_func(&pstate->max, &val); -} -static void stats1_max_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_max_state_t* pstate = pvstate; - if (mv_is_null(&pstate->max)) { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); - else - lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); - } else { - if (copy_data) - lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), mv_alloc_format_val(&pstate->max), - FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - else - lrec_put(poutrec, pstate->output_field_name, mv_alloc_format_val(&pstate->max), - FREE_ENTRY_VALUE); - } -} -static void stats1_max_free(stats1_acc_t* pstats1_acc) { - stats1_max_state_t* pstate = pstats1_acc->pvstate; - mv_free(&pstate->max); - free(pstate->output_field_name); - free(pstate); - free(pstats1_acc); -} -stats1_acc_t* stats1_max_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_max_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_max_state_t)); - pstate->max = mv_absent(); - pstate->output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_max_singest; - pstats1_acc->pemit_func = stats1_max_emit; - pstats1_acc->pfree_func = stats1_max_free; - return pstats1_acc; -} - -// ---------------------------------------------------------------- -typedef struct _stats1_percentile_state_t { - percentile_keeper_t* ppercentile_keeper; - lhmss_t* poutput_field_names; - int reference_count; - percentile_keeper_emitter_t* ppercentile_keeper_emitter; -} stats1_percentile_state_t; -static void stats1_percentile_singest(void* pvstate, char* sval) { - stats1_percentile_state_t* pstate = pvstate; - mv_t val = mv_copy_type_infer_string_or_float_or_int(sval); - percentile_keeper_ingest(pstate->ppercentile_keeper, val); -} - -static void stats1_percentile_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { - stats1_percentile_state_t* pstate = pvstate; - double p; - - if (stats1_acc_name[0] == 'm') { // Pre-validated to be either p{number} or median. - p = 50.0; - } else { - // TODO: do the sscanf once at alloc time and store the double in the state struct for a minor perf gain. - (void)sscanf(stats1_acc_name, "p%lf", &p); // Assuming this was range-checked earlier on to be in [0,100]. - } - mv_t v = pstate->ppercentile_keeper_emitter(pstate->ppercentile_keeper, p); - char* s = mv_alloc_format_val(&v); - // For this type, one accumulator tracks many stats1_names, but a single value_field_name. - char* output_field_name = lhmss_get(pstate->poutput_field_names, stats1_acc_name); - if (output_field_name == NULL) { - output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); - lhmss_put(pstate->poutput_field_names, mlr_strdup_or_die(stats1_acc_name), - output_field_name, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); - } - lrec_put(poutrec, mlr_strdup_or_die(output_field_name), s, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); -} - -static void stats1_percentile_free(stats1_acc_t* pstats1_acc) { - stats1_percentile_state_t* pstate = pstats1_acc->pvstate; - pstate->reference_count--; - if (pstate->reference_count == 0) { - percentile_keeper_free(pstate->ppercentile_keeper); - lhmss_free(pstate->poutput_field_names); - free(pstate); - free(pstats1_acc); - } -} -stats1_acc_t* stats1_percentile_alloc(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles) -{ - stats1_acc_t* pstats1_acc = mlr_malloc_or_die(sizeof(stats1_acc_t)); - stats1_percentile_state_t* pstate = mlr_malloc_or_die(sizeof(stats1_percentile_state_t)); - pstate->ppercentile_keeper = percentile_keeper_alloc(); - pstate->poutput_field_names = lhmss_alloc(); - pstate->reference_count = 1; - pstate->ppercentile_keeper_emitter = (do_interpolated_percentiles) - ? percentile_keeper_emit_linearly_interpolated - : percentile_keeper_emit_non_interpolated; - - pstats1_acc->pvstate = (void*)pstate; - pstats1_acc->pdingest_func = NULL; - pstats1_acc->pningest_func = NULL; - pstats1_acc->psingest_func = stats1_percentile_singest; - pstats1_acc->pemit_func = stats1_percentile_emit; - pstats1_acc->pfree_func = stats1_percentile_free; - return pstats1_acc; -} -void stats1_percentile_reuse(stats1_acc_t* pstats1_acc) { - stats1_percentile_state_t* pstate = pstats1_acc->pvstate; - pstate->reference_count++; -} diff --git a/c/mapping/stats1_accumulators.h b/c/mapping/stats1_accumulators.h deleted file mode 100644 index 8458560a8..000000000 --- a/c/mapping/stats1_accumulators.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef STATS1_ACCUMULATORS_H -#define STATS1_ACCUMULATORS_H - -#include "containers/lrec.h" -#include "containers/slls.h" -#include "containers/lhmsv.h" - -// ---------------------------------------------------------------- -// These are used by mlr stats1 as well as mlr merge-fields. - -// ---------------------------------------------------------------- -// Types of second-order cumulant -typedef enum _cumulant2o_t { - DO_STDDEV, - DO_VAR, - DO_MEANEB, -} cumulant2o_t; - -// ---------------------------------------------------------------- -struct _stats1_acc_t; // forward reference for method definitions -typedef void stats1_dingest_func_t(void* pvstate, double val); -typedef void stats1_ningest_func_t(void* pvstate, mv_t* pval); -typedef void stats1_singest_func_t(void* pvstate, char* val); -// For mlr stats1, there is a single alloc at start including computation of -// output field name; arbitrary number of records output with that field name; -// then free. There it makes sense to point the poutrec key at the output field -// name in the acc state rather than copying it. For mlr merge-fields, by -// contrast, the outer/inner loops are reversed: arbitrary number of records; -// for each, allocate, set output field key/value, free; then, the record is -// output. There it is necessary to copy the key since it will be referenced -// after the accumulator is freed. -typedef void stats1_emit_func_t(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec); -typedef void stats1_free_func_t(struct _stats1_acc_t* pstats1_acc); - -typedef struct _stats1_acc_t { - void* pvstate; - stats1_dingest_func_t* pdingest_func; - stats1_ningest_func_t* pningest_func; - stats1_singest_func_t* psingest_func; - stats1_emit_func_t* pemit_func; - stats1_free_func_t* pfree_func; // virtual destructor -} stats1_acc_t; - -typedef stats1_acc_t* stats1_alloc_func_t(char* value_field_name, char* stats1_acc_name, int allow_int_float, - int do_interpolated_percentiles); - -// aif = allow_int_float -// dip = do_interpolated_percentiles -stats1_acc_t* stats1_count_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_mode_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_antimode_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_sum_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_mean_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_stddev_var_meaneb_alloc (char* value_field_name, char* stats1_acc_name, cumulant2o_t do_which); -stats1_acc_t* stats1_stddev_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_var_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_meaneb_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_skewness_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_kurtosis_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_min_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_max_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -stats1_acc_t* stats1_percentile_alloc (char* value_field_name, char* stats1_acc_name, int aif, int dip); -void stats1_percentile_reuse (stats1_acc_t* pstats1_acc); - - -// For percentiles there is one unique accumulator given (for example) five distinct -// names p0,p25,p50,p75,p100. The input accumulators are unique: only one -// percentile-keeper. There are multiple output accumulators: each references the same -// underlying percentile-keeper but with distinct parameters. Hence the "_in" and "_out" maps. -void make_stats1_accs( - char* value_field_name, - slls_t* paccumulator_names, - int allow_int_float, - int do_interpolated_percentiles, - lhmsv_t* acc_field_to_acc_state_in, - lhmsv_t* acc_field_to_acc_state_out); - -stats1_acc_t* make_stats1_acc( - char* value_field_name, - char* stats1_acc_name, - int allow_int_float, - int do_interpolated_percentiles); - -int is_percentile_acc_name(char* stats1_acc_name); - -// ---------------------------------------------------------------- -// Lookups for all but percentiles, which are a special case. -typedef struct _stats1_acc_lookup_t { - char* name; - stats1_alloc_func_t* palloc_func; - char* desc; -} stats1_acc_lookup_t; -static stats1_acc_lookup_t stats1_acc_lookup_table[] = { - {"count", stats1_count_alloc, "Count instances of fields"}, - {"mode", stats1_mode_alloc, "Find most-frequently-occurring values for fields; first-found wins tie"}, - {"antimode", stats1_antimode_alloc, "Find least-frequently-occurring values for fields; first-found wins tie"}, - {"sum", stats1_sum_alloc, "Compute sums of specified fields"}, - {"mean", stats1_mean_alloc, "Compute averages (sample means) of specified fields"}, - {"stddev", stats1_stddev_alloc, "Compute sample standard deviation of specified fields"}, - {"var", stats1_var_alloc, "Compute sample variance of specified fields"}, - {"meaneb", stats1_meaneb_alloc, "Estimate error bars for averages (assuming no sample autocorrelation)"}, - {"skewness", stats1_skewness_alloc, "Compute sample skewness of specified fields"}, - {"kurtosis", stats1_kurtosis_alloc, "Compute sample kurtosis of specified fields"}, - {"min", stats1_min_alloc, "Compute minimum values of specified fields"}, - {"max", stats1_max_alloc, "Compute maximum values of specified fields"}, -}; -static int stats1_acc_lookup_table_length = sizeof(stats1_acc_lookup_table) / sizeof(stats1_acc_lookup_table[0]); - -#endif // STATS1_ACCUMULATORS_H diff --git a/c/mlrmain.c b/c/mlrmain.c deleted file mode 100644 index 33d6f53e2..000000000 --- a/c/mlrmain.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "cli/mlrcli.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "auxents/aux_entries.h" -#include "input/lrec_readers.h" -#include "mapping/mappers.h" -#include "output/lrec_writers.h" -#include "stream/stream.h" - -int main(int argc, char** argv) { - - mlr_global_init(argv[0], NULL); - - // 'mlr lecat' or any other non-miller-per-se toolery which is delivered (for convenience) - // within the mlr executable. If argv[1] is found then this function won't return, executing - // the handler instead. - do_aux_entries(argc, argv); - - sllv_t* pmapper_list = NULL; - cli_opts_t* popts = parse_command_line(argc, argv, &pmapper_list); - mlr_global_init(argv[0], popts->ofmt); - - context_t ctx; - context_init_from_opts(&ctx, popts); - - int ok = do_stream_chained(&ctx, pmapper_list, popts); - - mapper_chain_free(pmapper_list, &ctx); - cli_opts_free(popts); - - return ok ? 0 : 1; -} diff --git a/c/mlrvers.h b/c/mlrvers.h deleted file mode 100644 index b1346e6cb..000000000 --- a/c/mlrvers.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef MLRVERS_H -#define MLRVERS_H -// Manually increment on updates to https://github.com/johnkerl/miller/releases -#define MLR_VERSION "v5.10.2-dev" -#endif // MLRVERS_H diff --git a/c/msys2/setup b/c/msys2/setup deleted file mode 100755 index 2efc4035f..000000000 --- a/c/msys2/setup +++ /dev/null @@ -1,42 +0,0 @@ -if [ -z "$BEEN_HERE" ]; then - export PATH=.:./winstuff:$PATH - export BEEN_HERE=yes -fi - -export textdefault=$'\033[0m' -export black=$'\033[30;01m' -export red=$'\033[31;01m' -export green=$'\033[32;01m' -export yellow=$'\033[33;01m' -export blue=$'\033[34;01m' -export magenta=$'\033[35;01m' -export cyan=$'\033[36;01m' -export white=$'\033[37;01m' -export bold=$'\033[1;01m' -export underline=$'\033[4;01m' -export notboldorunderline=$'\033[0m' -export starttitle=$'\033]0;' -export endtitle=$'\007' - -#export PS1='\u@\h:\W% ' -#export PS1='\w% ' -export PS1="${yellow}${bold}\w% ${textdefault}" -alias lt='ls -lrt' -alias ll='ls -l' -alias v=vim -alias h=history - -alias bake='make -f Makefile.no-autoconfig' - -export mlb=/miller/miller-git/miller -export mlc=/miller/miller-git/miller/c -export mld=/miller/miller-git/miller/doc - -alias mlb='cd $mlb; ' -alias mlc='cd $mlc; ' -alias mld='cd $mld; ' - -alias gs='git status' -alias gd='git diff' -alias gam='git status | grep modified | awk "{print $NF}"' -alias gcm='git commit -m ' diff --git a/c/oo b/c/oo deleted file mode 100755 index 5082dc270..000000000 --- a/c/oo +++ /dev/null @@ -1,77 +0,0 @@ -run_mlr() { - echo - echo ................................................................ - echo mlr "$@" - ./mlr "$@" - # ./vgrun ./mlr "$@" -} - -run_mlr_for_auxents() { - echo - echo ................................................................ - echo mlr "$@" - ./mlr "$@" -} - -run_cat() { - echo cat "$@" - echo cat "$@" >> $outfile - cat "$@" >> $outfile - echo >> $outfile -} - -mlr_expect_fail() { - echo - echo ................................................................ - echo mlr "$@" - mlr "$@" - status=$? - if [ $status -ne 1 ]; then - echo "Exit status was $status; expected 1." - fi -} - -announce() { - echo - echo "================================================================" - echo "$@" - echo -} - -mention() { - echo - echo ---------------------------------------------------------------- "$@" -} - -# ================================================================ -flags="-a" - -# ================================================================ -#vee=-v -vee= - -# ---------------------------------------------------------------- - -run_mlr --opprint put '$a = $[[2]]; unset $["a"]' s -run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' s -run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' s - -run_mlr --c2p cat input.txt - -run_mlr --c2p put '$[[3]] = capitalize($[[3]])' input.txt -run_mlr --c2p put '$[[[3]]] = capitalize($[[[3]]])' input.txt - -run_mlr --c2p put '$foo = capitalize($[[3]])' input.txt -run_mlr --c2p put '$foo = capitalize($[[[3]]])' input.txt - -run_mlr --c2p put '$[[3]] = "NEW"' input.txt -run_mlr --c2p put '$[[[3]]] = "NEW"' input.txt - - -run_mlr --opprint put '$new1=$[[1]]; $[[11]]=$[[2]]' s -run_mlr --opprint put '$new1=$[[1]]; $[[2]]=$[[11]]' s - -run_mlr --opprint put 'unset $c' s -run_mlr --opprint put 'unset $c; $c="new"' s -run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' s -run_mlr --opprint put '$c=$a.$b; unset $c' s diff --git a/c/output/Makefile.am b/c/output/Makefile.am deleted file mode 100644 index d25ea29f2..000000000 --- a/c/output/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -noinst_LTLIBRARIES= liboutput.la -liboutput_la_SOURCES= \ - file_output_mode.h \ - lrec_writer.h \ - lrec_writer_csv.c \ - lrec_writer_csvlite.c \ - lrec_writer_dkvp.c \ - lrec_writer_json.c \ - lrec_writer_markdown.c \ - lrec_writer_nidx.c \ - lrec_writer_pprint.c \ - lrec_writer_xtab.c \ - lrec_writers.c \ - lrec_writers.h \ - multi_lrec_writer.c \ - multi_lrec_writer.h \ - multi_out.c \ - multi_out.h -liboutput_la_LIBADD= \ - ../lib/libmlr.la \ - ../containers/libcontainers.la -liboutput_la_CPPFLAGS= -I${srcdir}/../ -liboutput_la_CFLAGS= -std=gnu99 diff --git a/c/output/Makefile.in b/c/output/Makefile.in deleted file mode 100644 index 1dcc62c3b..000000000 --- a/c/output/Makefile.in +++ /dev/null @@ -1,709 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/output -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -liboutput_la_DEPENDENCIES = ../lib/libmlr.la \ - ../containers/libcontainers.la -am_liboutput_la_OBJECTS = liboutput_la-lrec_writer_csv.lo \ - liboutput_la-lrec_writer_csvlite.lo \ - liboutput_la-lrec_writer_dkvp.lo \ - liboutput_la-lrec_writer_json.lo \ - liboutput_la-lrec_writer_markdown.lo \ - liboutput_la-lrec_writer_nidx.lo \ - liboutput_la-lrec_writer_pprint.lo \ - liboutput_la-lrec_writer_xtab.lo liboutput_la-lrec_writers.lo \ - liboutput_la-multi_lrec_writer.lo liboutput_la-multi_out.lo -liboutput_la_OBJECTS = $(am_liboutput_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 = -liboutput_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(liboutput_la_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(liboutput_la_SOURCES) -DIST_SOURCES = $(liboutput_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = liboutput.la -liboutput_la_SOURCES = \ - file_output_mode.h \ - lrec_writer.h \ - lrec_writer_csv.c \ - lrec_writer_csvlite.c \ - lrec_writer_dkvp.c \ - lrec_writer_json.c \ - lrec_writer_markdown.c \ - lrec_writer_nidx.c \ - lrec_writer_pprint.c \ - lrec_writer_xtab.c \ - lrec_writers.c \ - lrec_writers.h \ - multi_lrec_writer.c \ - multi_lrec_writer.h \ - multi_out.c \ - multi_out.h - -liboutput_la_LIBADD = \ - ../lib/libmlr.la \ - ../containers/libcontainers.la - -liboutput_la_CPPFLAGS = -I${srcdir}/../ -liboutput_la_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/output/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/output/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -liboutput.la: $(liboutput_la_OBJECTS) $(liboutput_la_DEPENDENCIES) $(EXTRA_liboutput_la_DEPENDENCIES) - $(AM_V_CCLD)$(liboutput_la_LINK) $(liboutput_la_OBJECTS) $(liboutput_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_csv.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_csvlite.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_dkvp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_json.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_markdown.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_nidx.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_pprint.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writer_xtab.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-lrec_writers.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-multi_lrec_writer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liboutput_la-multi_out.Plo@am__quote@ - -.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 $@ $< - -liboutput_la-lrec_writer_csv.lo: lrec_writer_csv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_csv.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_csv.Tpo -c -o liboutput_la-lrec_writer_csv.lo `test -f 'lrec_writer_csv.c' || echo '$(srcdir)/'`lrec_writer_csv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_csv.Tpo $(DEPDIR)/liboutput_la-lrec_writer_csv.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_csv.c' object='liboutput_la-lrec_writer_csv.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_csv.lo `test -f 'lrec_writer_csv.c' || echo '$(srcdir)/'`lrec_writer_csv.c - -liboutput_la-lrec_writer_csvlite.lo: lrec_writer_csvlite.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_csvlite.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Tpo -c -o liboutput_la-lrec_writer_csvlite.lo `test -f 'lrec_writer_csvlite.c' || echo '$(srcdir)/'`lrec_writer_csvlite.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Tpo $(DEPDIR)/liboutput_la-lrec_writer_csvlite.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_csvlite.c' object='liboutput_la-lrec_writer_csvlite.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_csvlite.lo `test -f 'lrec_writer_csvlite.c' || echo '$(srcdir)/'`lrec_writer_csvlite.c - -liboutput_la-lrec_writer_dkvp.lo: lrec_writer_dkvp.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_dkvp.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Tpo -c -o liboutput_la-lrec_writer_dkvp.lo `test -f 'lrec_writer_dkvp.c' || echo '$(srcdir)/'`lrec_writer_dkvp.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Tpo $(DEPDIR)/liboutput_la-lrec_writer_dkvp.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_dkvp.c' object='liboutput_la-lrec_writer_dkvp.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_dkvp.lo `test -f 'lrec_writer_dkvp.c' || echo '$(srcdir)/'`lrec_writer_dkvp.c - -liboutput_la-lrec_writer_json.lo: lrec_writer_json.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_json.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_json.Tpo -c -o liboutput_la-lrec_writer_json.lo `test -f 'lrec_writer_json.c' || echo '$(srcdir)/'`lrec_writer_json.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_json.Tpo $(DEPDIR)/liboutput_la-lrec_writer_json.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_json.c' object='liboutput_la-lrec_writer_json.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_json.lo `test -f 'lrec_writer_json.c' || echo '$(srcdir)/'`lrec_writer_json.c - -liboutput_la-lrec_writer_markdown.lo: lrec_writer_markdown.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_markdown.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_markdown.Tpo -c -o liboutput_la-lrec_writer_markdown.lo `test -f 'lrec_writer_markdown.c' || echo '$(srcdir)/'`lrec_writer_markdown.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_markdown.Tpo $(DEPDIR)/liboutput_la-lrec_writer_markdown.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_markdown.c' object='liboutput_la-lrec_writer_markdown.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_markdown.lo `test -f 'lrec_writer_markdown.c' || echo '$(srcdir)/'`lrec_writer_markdown.c - -liboutput_la-lrec_writer_nidx.lo: lrec_writer_nidx.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_nidx.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_nidx.Tpo -c -o liboutput_la-lrec_writer_nidx.lo `test -f 'lrec_writer_nidx.c' || echo '$(srcdir)/'`lrec_writer_nidx.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_nidx.Tpo $(DEPDIR)/liboutput_la-lrec_writer_nidx.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_nidx.c' object='liboutput_la-lrec_writer_nidx.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_nidx.lo `test -f 'lrec_writer_nidx.c' || echo '$(srcdir)/'`lrec_writer_nidx.c - -liboutput_la-lrec_writer_pprint.lo: lrec_writer_pprint.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_pprint.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_pprint.Tpo -c -o liboutput_la-lrec_writer_pprint.lo `test -f 'lrec_writer_pprint.c' || echo '$(srcdir)/'`lrec_writer_pprint.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_pprint.Tpo $(DEPDIR)/liboutput_la-lrec_writer_pprint.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_pprint.c' object='liboutput_la-lrec_writer_pprint.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_pprint.lo `test -f 'lrec_writer_pprint.c' || echo '$(srcdir)/'`lrec_writer_pprint.c - -liboutput_la-lrec_writer_xtab.lo: lrec_writer_xtab.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writer_xtab.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writer_xtab.Tpo -c -o liboutput_la-lrec_writer_xtab.lo `test -f 'lrec_writer_xtab.c' || echo '$(srcdir)/'`lrec_writer_xtab.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writer_xtab.Tpo $(DEPDIR)/liboutput_la-lrec_writer_xtab.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writer_xtab.c' object='liboutput_la-lrec_writer_xtab.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writer_xtab.lo `test -f 'lrec_writer_xtab.c' || echo '$(srcdir)/'`lrec_writer_xtab.c - -liboutput_la-lrec_writers.lo: lrec_writers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-lrec_writers.lo -MD -MP -MF $(DEPDIR)/liboutput_la-lrec_writers.Tpo -c -o liboutput_la-lrec_writers.lo `test -f 'lrec_writers.c' || echo '$(srcdir)/'`lrec_writers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-lrec_writers.Tpo $(DEPDIR)/liboutput_la-lrec_writers.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lrec_writers.c' object='liboutput_la-lrec_writers.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-lrec_writers.lo `test -f 'lrec_writers.c' || echo '$(srcdir)/'`lrec_writers.c - -liboutput_la-multi_lrec_writer.lo: multi_lrec_writer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-multi_lrec_writer.lo -MD -MP -MF $(DEPDIR)/liboutput_la-multi_lrec_writer.Tpo -c -o liboutput_la-multi_lrec_writer.lo `test -f 'multi_lrec_writer.c' || echo '$(srcdir)/'`multi_lrec_writer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-multi_lrec_writer.Tpo $(DEPDIR)/liboutput_la-multi_lrec_writer.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multi_lrec_writer.c' object='liboutput_la-multi_lrec_writer.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-multi_lrec_writer.lo `test -f 'multi_lrec_writer.c' || echo '$(srcdir)/'`multi_lrec_writer.c - -liboutput_la-multi_out.lo: multi_out.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -MT liboutput_la-multi_out.lo -MD -MP -MF $(DEPDIR)/liboutput_la-multi_out.Tpo -c -o liboutput_la-multi_out.lo `test -f 'multi_out.c' || echo '$(srcdir)/'`multi_out.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/liboutput_la-multi_out.Tpo $(DEPDIR)/liboutput_la-multi_out.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='multi_out.c' object='liboutput_la-multi_out.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liboutput_la_CPPFLAGS) $(CPPFLAGS) $(liboutput_la_CFLAGS) $(CFLAGS) -c -o liboutput_la-multi_out.lo `test -f 'multi_out.c' || echo '$(srcdir)/'`multi_out.c - -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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/output/file_output_mode.h b/c/output/file_output_mode.h deleted file mode 100644 index 7a7ff19f1..000000000 --- a/c/output/file_output_mode.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef FILE_OUTPUT_MODE_H -#define FILE_OUTPUT_MODE_H - -typedef enum _file_output_mode_t { - MODE_WRITE, // fopen/fclose - MODE_APPEND, // fopen/fclose - MODE_PIPE, // popen/pclose -} file_output_mode_t; - -static inline char* get_mode_string(file_output_mode_t file_output_mode) { - return file_output_mode == MODE_APPEND ? "a" : "w"; -} -static inline char* get_mode_desc(file_output_mode_t file_output_mode) { - return file_output_mode == MODE_APPEND ? "append" : "write"; -} - -#endif // FILE_OUTPUT_MODE_H diff --git a/c/output/lrec_writer.h b/c/output/lrec_writer.h deleted file mode 100644 index 5df607dce..000000000 --- a/c/output/lrec_writer.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef LREC_WRITER_H -#define LREC_WRITER_H - -#include -#include "containers/lrec.h" -#include "lib/context.h" - -struct _lrec_writer_t; // forward reference for method declarations - -typedef void lrec_writer_process_func_t(void* pvstate, FILE* fp, lrec_t* prec, context_t* pctx); -typedef void lrec_writer_free_func_t(struct _lrec_writer_t* pwriter, context_t* pctx); - -typedef struct _lrec_writer_t { - void* pvstate; - lrec_writer_process_func_t* pprocess_func; - lrec_writer_free_func_t* pfree_func; // virtual destructor -} lrec_writer_t; - -#endif // LREC_WRITER_H diff --git a/c/output/lrec_writer_csv.c b/c/output/lrec_writer_csv.c deleted file mode 100644 index 82190d2ca..000000000 --- a/c/output/lrec_writer_csv.c +++ /dev/null @@ -1,224 +0,0 @@ -#include -#include "cli/quoting.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/mixutil.h" -#include "output/lrec_writers.h" - -typedef void quoted_output_func_t(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void quote_all_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void quote_none_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void quote_minimal_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void quote_minimal_auto_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char qf); -static void quote_numeric_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void quote_original_output_func(FILE* fp,char*s,char*ors,char*ofs, int orslen,int ofslen, char quote_flags); -static void csv_quote_string(FILE* fp, char* string); - -typedef struct _lrec_writer_csv_state_t { - int onr; - char *ors; - char *ofs; - int orslen; - int ofslen; - quoted_output_func_t* pquoted_output_func; - long long num_header_lines_output; - slls_t* plast_header_output; - int headerless_csv_output; -} lrec_writer_csv_state_t; - -// ---------------------------------------------------------------- -static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_csv_alloc(char* ors, char* ofs, quoting_t oquoting, int headerless_csv_output) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_csv_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_csv_state_t)); - pstate->onr = 0; - pstate->ors = ors; - pstate->ofs = ofs; - pstate->orslen = strlen(pstate->ors); - pstate->ofslen = strlen(pstate->ofs); - pstate->headerless_csv_output = headerless_csv_output; - - switch(oquoting) { - case QUOTE_ALL: pstate->pquoted_output_func = quote_all_output_func; break; - case QUOTE_NONE: pstate->pquoted_output_func = quote_none_output_func; break; - case QUOTE_MINIMAL: pstate->pquoted_output_func = quote_minimal_output_func; break; - case QUOTE_NUMERIC: pstate->pquoted_output_func = quote_numeric_output_func; break; - case QUOTE_ORIGINAL: pstate->pquoted_output_func = quote_original_output_func; break; - default: - MLR_INTERNAL_CODING_ERROR(); - } - - pstate->num_header_lines_output = 0LL; - pstate->plast_header_output = NULL; - - plrec_writer->pvstate = (void*)pstate; - if (streq(ors, "auto")) { - plrec_writer->pprocess_func = lrec_writer_csv_process_auto_ors; - if (oquoting == QUOTE_MINIMAL) { - pstate->pquoted_output_func = quote_minimal_auto_output_func; - } - } else { - plrec_writer->pprocess_func = lrec_writer_csv_process_nonauto_ors; - } - plrec_writer->pfree_func = lrec_writer_csv_free; - - return plrec_writer; -} - -static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx) { - lrec_writer_csv_state_t* pstate = pwriter->pvstate; - slls_free(pstate->plast_header_output); - free(pstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_csv_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_csv_state_t* pstate = pvstate; - lrec_writer_csv_process(pvstate, output_stream, prec, pstate->ors); -} - -static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - if (prec == NULL) - return; - lrec_writer_csv_state_t* pstate = pvstate; - char *ofs = pstate->ofs; - int orslen = strlen(ors); - - if (pstate->plast_header_output != NULL) { - if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { - slls_free(pstate->plast_header_output); - pstate->plast_header_output = NULL; - if (pstate->num_header_lines_output > 0LL) - fputs(ors, output_stream); - } - } - - if (pstate->plast_header_output == NULL) { - int nf = 0; - if (!pstate->headerless_csv_output) { - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - pstate->pquoted_output_func(output_stream, pe->key, pstate->ors, pstate->ofs, - orslen, pstate->ofslen, 0); - nf++; - } - fputs(ors, output_stream); - } - pstate->plast_header_output = mlr_copy_keys_from_record(prec); - pstate->num_header_lines_output++; - } - - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - pstate->pquoted_output_func(output_stream, pe->value, pstate->ors, pstate->ofs, - orslen, pstate->ofslen, pe->quote_flags); - nf++; - } - fputs(ors, output_stream); - pstate->onr++; - - // See ../README.md for memory-management conventions - lrec_free(prec); -} - -// ---------------------------------------------------------------- -static void quote_all_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, - char quote_flags) -{ - csv_quote_string(fp, string); -} - -static void quote_none_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, - char quote_flags) -{ - fputs(string, fp); -} - -static void quote_minimal_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, - char quote_flags) -{ - int output_quotes = FALSE; - for (char* p = string; *p; p++) { - if (streqn(p, ors, orslen) || streqn(p, ofs, ofslen)) { - output_quotes = TRUE; - break; - } - if (*p == '"') { - output_quotes = TRUE; - break; - } - } - if (output_quotes) { - csv_quote_string(fp, string); - } else { - fputs(string, fp); - } -} - -static void quote_minimal_auto_output_func(FILE* fp, char* string, char* _, char* ofs, int __, int ofslen, - char quote_flags) -{ - int output_quotes = FALSE; - for (char* p = string; *p; p++) { - if (streqn(p, "\n", 1) || streqn(p, "\r\n", 2) || streqn(p, ofs, ofslen)) { - output_quotes = TRUE; - break; - } - if (*p == '"') { - output_quotes = TRUE; - break; - } - } - if (output_quotes) { - csv_quote_string(fp, string); - } else { - fputs(string, fp); - } -} - -static void quote_numeric_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, - char quote_flags) -{ - double temp; - if (mlr_try_float_from_string(string, &temp)) { - csv_quote_string(fp, string); - } else { - fputs(string, fp); - } -} - -static void quote_original_output_func(FILE* fp, char* string, char* ors, char* ofs, int orslen, int ofslen, - char quote_flags) -{ - if (quote_flags & FIELD_QUOTED_ON_INPUT) { - csv_quote_string(fp, string); - } else { - fputs(string, fp); - } -} - -// ---------------------------------------------------------------- -static void csv_quote_string(FILE* fp, char* string) { - fputc('"', fp); - for (char* p = string; *p; p++) { - if (*p == '"') - fputs("\"\"", fp); - else - fputc(*p, fp); - } - fputc('"', fp); -} diff --git a/c/output/lrec_writer_csvlite.c b/c/output/lrec_writer_csvlite.c deleted file mode 100644 index 6e3794ee1..000000000 --- a/c/output/lrec_writer_csvlite.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include "containers/mixutil.h" -#include "lib/mlrutil.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_csvlite_state_t { - int onr; - char* ors; - char* ofs; - long long num_header_lines_output; - slls_t* plast_header_output; - int headerless_csv_output; -} lrec_writer_csvlite_state_t; - -static void lrec_writer_csvlite_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_csvlite_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_csvlite_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_csvlite_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_csvlite_alloc(char* ors, char* ofs, int headerless_csv_output) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_csvlite_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_csvlite_state_t)); - pstate->onr = 0; - pstate->ors = ors; - pstate->ofs = ofs; - pstate->num_header_lines_output = 0LL; - pstate->plast_header_output = NULL; - pstate->headerless_csv_output = headerless_csv_output; - - plrec_writer->pvstate = (void*)pstate; - plrec_writer->pprocess_func = streq(ors, "auto") - ? lrec_writer_csvlite_process_auto_ors - : lrec_writer_csvlite_process_nonauto_ors; - plrec_writer->pfree_func = lrec_writer_csvlite_free; - - return plrec_writer; -} - -static void lrec_writer_csvlite_free(lrec_writer_t* pwriter, context_t* pctx) { - lrec_writer_csvlite_state_t* pstate = pwriter->pvstate; - slls_free(pstate->plast_header_output); - free(pstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_csvlite_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_csvlite_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_csvlite_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_csvlite_state_t* pstate = pvstate; - lrec_writer_csvlite_process(pvstate, output_stream, prec, pstate->ors); -} - - -static void lrec_writer_csvlite_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - if (prec == NULL) - return; - lrec_writer_csvlite_state_t* pstate = pvstate; - char* ofs = pstate->ofs; - - if (pstate->plast_header_output != NULL) { - if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { - slls_free(pstate->plast_header_output); - pstate->plast_header_output = NULL; - if (pstate->num_header_lines_output > 0LL) - fputs(ors, output_stream); - } - } - - if (pstate->plast_header_output == NULL) { - if (!pstate->headerless_csv_output) { - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - fputs(pe->key, output_stream); - nf++; - } - fputs(ors, output_stream); - } - pstate->plast_header_output = mlr_copy_keys_from_record(prec); - pstate->num_header_lines_output++; - } - - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - fputs(pe->value, output_stream); - nf++; - } - fputs(ors, output_stream); - pstate->onr++; - - lrec_free(prec); // end of baton-pass -} diff --git a/c/output/lrec_writer_dkvp.c b/c/output/lrec_writer_dkvp.c deleted file mode 100644 index 6f90ff6e7..000000000 --- a/c/output/lrec_writer_dkvp.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_dkvp_state_t { - char* ors; - char* ofs; - char* ops; -} lrec_writer_dkvp_state_t; - -static void lrec_writer_dkvp_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_dkvp_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_dkvp_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_dkvp_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_dkvp_alloc(char* ors, char* ofs, char* ops) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_dkvp_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_dkvp_state_t)); - pstate->ors = ors; - pstate->ofs = ofs; - pstate->ops = ops; - - plrec_writer->pvstate = (void*)pstate; - plrec_writer->pprocess_func = streq(ors, "auto") - ? lrec_writer_dkvp_process_auto_ors - : lrec_writer_dkvp_process_nonauto_ors; - plrec_writer->pfree_func = lrec_writer_dkvp_free; - - return plrec_writer; -} - -static void lrec_writer_dkvp_free(lrec_writer_t* pwriter, context_t* pctx) { - free(pwriter->pvstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_dkvp_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_dkvp_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_dkvp_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_dkvp_state_t* pstate = pvstate; - lrec_writer_dkvp_process(pvstate, output_stream, prec, pstate->ors); -} - -static void lrec_writer_dkvp_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - if (prec == NULL) - return; - lrec_writer_dkvp_state_t* pstate = pvstate; - char* ofs = pstate->ofs; - char* ops = pstate->ops; - - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - fputs(pe->key, output_stream); - fputs(ops, output_stream); - fputs(pe->value, output_stream); - nf++; - } - fputs(ors, output_stream); - lrec_free(prec); // end of baton-pass -} - diff --git a/c/output/lrec_writer_json.c b/c/output/lrec_writer_json.c deleted file mode 100644 index ede717054..000000000 --- a/c/output/lrec_writer_json.c +++ /dev/null @@ -1,160 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/mlhmmv.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_json_state_t { - unsigned long long counter; - char* output_json_flatten_separator; - - int json_quote_int_keys; - int json_quote_non_string_values; - char* line_indent; - char* before_records_at_start_of_stream1; - char* between_records_after_start_of_stream; - char* after_records_at_end_of_stream1; - char* line_term; - int stack_vertically; - -} lrec_writer_json_state_t; - -static void lrec_writer_json_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_json_process(void* pvstate, FILE* output_stream, lrec_t* prec, - char* before_or_after_records, char* line_term); -static void lrec_writer_json_process_auto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx); -static void lrec_writer_json_process_auto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx); -static void lrec_writer_json_process_nonauto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx); -static void lrec_writer_json_process_nonauto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_json_alloc(int stack_vertically, int wrap_json_output_in_outer_list, - int json_quote_int_keys, int json_quote_non_string_values, - char* output_json_flatten_separator, char* line_term) -{ - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_json_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_json_state_t)); - pstate->json_quote_int_keys = json_quote_int_keys; - pstate->json_quote_non_string_values = json_quote_non_string_values; - pstate->counter = 0; - pstate->output_json_flatten_separator = output_json_flatten_separator; - - // xxx pending reworked JSON-output logic (not always ending in LF; needing fflush), - // to be implemented someday if ever. Workaround: pipe output to "jq .". - //pstate->line_indent = wrap_json_output_in_outer_list ? " " : ""; - pstate->line_indent = wrap_json_output_in_outer_list ? "" : ""; - pstate->before_records_at_start_of_stream1 = wrap_json_output_in_outer_list ? "[" : ""; - pstate->between_records_after_start_of_stream = wrap_json_output_in_outer_list ? "," : ""; - pstate->after_records_at_end_of_stream1 = wrap_json_output_in_outer_list ? "]" : ""; - pstate->line_term = line_term; - pstate->stack_vertically = stack_vertically; - - plrec_writer->pvstate = (void*)pstate; - if (streq(line_term, "auto")) { - plrec_writer->pprocess_func = wrap_json_output_in_outer_list - ? lrec_writer_json_process_auto_line_term_wrap - : lrec_writer_json_process_auto_line_term_no_wrap; - } else { - plrec_writer->pprocess_func = wrap_json_output_in_outer_list - ? lrec_writer_json_process_nonauto_line_term_wrap - : lrec_writer_json_process_nonauto_line_term_no_wrap; - } - plrec_writer->pfree_func = lrec_writer_json_free; - - return plrec_writer; -} - -static void lrec_writer_json_free(lrec_writer_t* pwriter, context_t* pctx) { - free(pwriter->pvstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_json_process_auto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx) -{ - lrec_writer_json_process(pvstate, output_stream, prec, pctx->auto_line_term, pctx->auto_line_term); -} - -static void lrec_writer_json_process_auto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx) -{ - lrec_writer_json_process(pvstate, output_stream, prec, "", pctx->auto_line_term); -} - -static void lrec_writer_json_process_nonauto_line_term_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx) -{ - lrec_writer_json_state_t* pstate = pvstate; - lrec_writer_json_process(pvstate, output_stream, prec, pstate->line_term, pstate->line_term); -} - -static void lrec_writer_json_process_nonauto_line_term_no_wrap(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx) -{ - lrec_writer_json_state_t* pstate = pvstate; - lrec_writer_json_process(pvstate, output_stream, prec, "", pstate->line_term); -} - -static void lrec_writer_json_process(void* pvstate, FILE* output_stream, lrec_t* prec, - char* before_or_after_records, char* line_term) -{ - lrec_writer_json_state_t* pstate = pvstate; - if (prec != NULL) { // not end of record stream - if (pstate->counter++ == 0) { - fputs(pstate->before_records_at_start_of_stream1, output_stream); - fputs(before_or_after_records, output_stream); - } else { - fputs(pstate->between_records_after_start_of_stream, output_stream); - } - - // Use the mlhmmv printer since it naturally handles Miller-to-JSON key deconcatenation: - // e.g. 'a:x=1,a:y=2' maps to '{"a":{"x":1,"y":2}}'. - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - - char* sep = pstate->output_json_flatten_separator; - int seplen = strlen(sep); - - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - // strdup since strmsep is destructive and CSV/PPRINT header fields - // are shared across multiple records - char* lkey = mlr_strdup_or_die(pe->key); - char* lvalue = pe->value; - - sllmv_t* pmvkeys = sllmv_alloc(); - char* walker = lkey; - char* piece = NULL; - while ((piece = mlr_strmsep(&walker, sep, seplen)) != NULL) { - mv_t mvkey = mv_from_string(piece, NO_FREE); - sllmv_append_no_free(pmvkeys, &mvkey); - } - mv_t mvval = mv_from_string(lvalue, NO_FREE); - mlhmmv_root_put_terminal(pmap, pmvkeys, &mvval); - sllmv_free(pmvkeys); - free(lkey); - } - - if (pstate->stack_vertically) - mlhmmv_root_print_json_stacked(pmap, pstate->json_quote_int_keys, pstate->json_quote_non_string_values, - pstate->line_indent, line_term, output_stream); - else - mlhmmv_root_print_json_single_lines(pmap, pstate->json_quote_int_keys, - pstate->json_quote_non_string_values, line_term, output_stream); - - mlhmmv_root_free(pmap); - - lrec_free(prec); // end of baton-pass - - } else { // end of record stream - if (pstate->counter == 0) { - fputs(pstate->before_records_at_start_of_stream1, output_stream); - } - fputs(pstate->after_records_at_end_of_stream1, output_stream); - fputs(before_or_after_records, output_stream); - } -} diff --git a/c/output/lrec_writer_markdown.c b/c/output/lrec_writer_markdown.c deleted file mode 100644 index debbdf4de..000000000 --- a/c/output/lrec_writer_markdown.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include "containers/mixutil.h" -#include "lib/mlrutil.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_markdown_state_t { - int onr; - char* ors; - long long num_header_lines_output; - slls_t* plast_header_output; -} lrec_writer_markdown_state_t; - -static void lrec_writer_markdown_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_markdown_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_markdown_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_markdown_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_markdown_alloc(char* ors) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_markdown_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_markdown_state_t)); - pstate->onr = 0; - pstate->ors = ors; - pstate->num_header_lines_output = 0LL; - pstate->plast_header_output = NULL; - - plrec_writer->pvstate = (void*)pstate; - plrec_writer->pprocess_func = streq(ors, "auto") - ? lrec_writer_markdown_process_auto_ors - : lrec_writer_markdown_process_nonauto_ors; - plrec_writer->pfree_func = lrec_writer_markdown_free; - - return plrec_writer; -} - -static void lrec_writer_markdown_free(lrec_writer_t* pwriter, context_t* pctx) { - lrec_writer_markdown_state_t* pstate = pwriter->pvstate; - slls_free(pstate->plast_header_output); - free(pstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_markdown_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_markdown_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_markdown_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, - context_t* pctx) -{ - lrec_writer_markdown_state_t* pstate = pvstate; - lrec_writer_markdown_process(pvstate, output_stream, prec, pstate->ors); -} - - -static void lrec_writer_markdown_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - if (prec == NULL) - return; - lrec_writer_markdown_state_t* pstate = pvstate; - - if (pstate->plast_header_output != NULL) { - if (!lrec_keys_equal_list(prec, pstate->plast_header_output)) { - slls_free(pstate->plast_header_output); - pstate->plast_header_output = NULL; - if (pstate->num_header_lines_output > 0LL) - fputs(ors, output_stream); - } - } - - if (pstate->plast_header_output == NULL) { - fputc('|', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - fputc(' ', output_stream); - fputs(pe->key, output_stream); - fputs(" |", output_stream); - } - fputs(ors, output_stream); - - fputc('|', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - fputs(" --- |", output_stream); - } - fputs(ors, output_stream); - - pstate->plast_header_output = mlr_copy_keys_from_record(prec); - pstate->num_header_lines_output++; - } - - fputc('|', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - fputc(' ', output_stream); - fputs(pe->value, output_stream); - fputs(" |", output_stream); - } - fputs(ors, output_stream); - pstate->onr++; - - lrec_free(prec); // end of baton-pass -} diff --git a/c/output/lrec_writer_nidx.c b/c/output/lrec_writer_nidx.c deleted file mode 100644 index 2541c3d88..000000000 --- a/c/output/lrec_writer_nidx.c +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include "lib/mlrutil.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_nidx_state_t { - char* ors; - char* ofs; -} lrec_writer_nidx_state_t; - -static void lrec_writer_nidx_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_nidx_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_nidx_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_nidx_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_nidx_alloc(char* ors, char* ofs) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_nidx_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_nidx_state_t)); - pstate->ors = ors; - pstate->ofs = ofs; - - plrec_writer->pvstate = (void*)pstate; - plrec_writer->pprocess_func = streq(ors, "auto") - ? lrec_writer_nidx_process_auto_ors - : lrec_writer_nidx_process_nonauto_ors; - plrec_writer->pfree_func = lrec_writer_nidx_free; - - return plrec_writer; -} - -static void lrec_writer_nidx_free(lrec_writer_t* pwriter, context_t* pctx) { - free(pwriter->pvstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_nidx_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_nidx_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_nidx_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_nidx_state_t* pstate = pvstate; - lrec_writer_nidx_process(pvstate, output_stream, prec, pstate->ors); -} - -static void lrec_writer_nidx_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - if (prec == NULL) - return; - lrec_writer_nidx_state_t* pstate = pvstate; - char* ofs = pstate->ofs; - - int nf = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - if (nf > 0) - fputs(ofs, output_stream); - fputs(pe->value, output_stream); - nf++; - } - fputs(ors, output_stream); - lrec_free(prec); // end of baton-pass -} diff --git a/c/output/lrec_writer_pprint.c b/c/output/lrec_writer_pprint.c deleted file mode 100644 index 363dfde50..000000000 --- a/c/output/lrec_writer_pprint.c +++ /dev/null @@ -1,348 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "containers/sllv.h" -#include "containers/slls.h" -#include "containers/mixutil.h" -#include "output/lrec_writers.h" - -typedef struct _lrec_writer_pprint_state_t { - sllv_t* precords; - slls_t* pprev_keys; - int right_align; - int barred; - int headerless_output; - long long num_blocks_written; - char* ors; - char ofs; -} lrec_writer_pprint_state_t; - -static void lrec_writer_pprint_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_pprint_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); -static void lrec_writer_pprint_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_pprint_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void print_and_free_record_list(sllv_t* precords, FILE* output_stream, char* ors, char ofs, - int right_align, int headerless_output); -static void print_and_free_record_list_barred(sllv_t* precords, FILE* output_stream, char* ors, char ofs, - int right_align, int headerless_output); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_pprint_alloc(char* ors, char ofs, int right_align, int barred, int headerless_output) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_pprint_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_pprint_state_t)); - pstate->precords = sllv_alloc(); - pstate->pprev_keys = NULL; - pstate->ors = ors; - pstate->ofs = ofs; - pstate->right_align = right_align; - pstate->barred = barred; - pstate->headerless_output = headerless_output; - pstate->num_blocks_written = 0LL; - - plrec_writer->pvstate = pstate; - plrec_writer->pprocess_func = streq(ors, "auto") - ? lrec_writer_pprint_process_auto_ors - : lrec_writer_pprint_process_nonauto_ors; - plrec_writer->pfree_func = lrec_writer_pprint_free; - - return plrec_writer; -} - -static void lrec_writer_pprint_free(lrec_writer_t* pwriter, context_t* pctx) { - lrec_writer_pprint_state_t* pstate = pwriter->pvstate; - if (pstate->precords != NULL) { - sllv_free(pstate->precords); - pstate->precords = NULL; - } - if (pstate->pprev_keys != NULL) { - slls_free(pstate->pprev_keys); - pstate->pprev_keys = NULL; - } - free(pstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_pprint_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_pprint_process(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_pprint_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_pprint_state_t* pstate = pvstate; - lrec_writer_pprint_process(pvstate, output_stream, prec, pstate->ors); -} - -static void lrec_writer_pprint_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { - lrec_writer_pprint_state_t* pstate = pvstate; - - int drain = FALSE; - - if (prec == NULL) { - drain = TRUE; - } else { - if (pstate->pprev_keys != NULL && !lrec_keys_equal_list(prec, pstate->pprev_keys)) { - drain = TRUE; - } - } - - if (drain) { - if (pstate->num_blocks_written > 0LL) // separate blocks with empty line - fputs(ors, output_stream); - if (pstate->barred) { - print_and_free_record_list_barred(pstate->precords, output_stream, ors, pstate->ofs, - pstate->right_align, pstate->headerless_output); - } else { - print_and_free_record_list(pstate->precords, output_stream, ors, pstate->ofs, - pstate->right_align, pstate->headerless_output); - } - if (pstate->pprev_keys != NULL) { - slls_free(pstate->pprev_keys); - pstate->pprev_keys = NULL; - } - pstate->precords = sllv_alloc(); - pstate->num_blocks_written++; - } - if (prec != NULL) { - sllv_append(pstate->precords, prec); - if (pstate->pprev_keys == NULL) - pstate->pprev_keys = mlr_copy_keys_from_record(prec); - } -} - -// ---------------------------------------------------------------- -static void print_and_free_record_list(sllv_t* precords, FILE* output_stream, char* ors, char ofs, - int right_align, int headerless_output) -{ - if (precords->length == 0) { - sllv_free(precords); - return; - } - lrec_t* prec1 = precords->phead->pvvalue; - - int* max_widths = mlr_malloc_or_die(sizeof(int) * prec1->field_count); - int j = 0; - for (lrece_t* pe = prec1->phead; pe != NULL; pe = pe->pnext, j++) { - if (headerless_output) { - max_widths[j] = 1; - } else { - max_widths[j] = strlen_for_utf8_display(pe->key); - } - } - for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext) { - lrec_t* prec = pnode->pvvalue; - j = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - int width = strlen_for_utf8_display(pe->value); - if (width > max_widths[j]) - max_widths[j] = width; - } - } - - int onr = 0; - for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext, onr++) { - lrec_t* prec = pnode->pvvalue; - - if (onr == 0 && !headerless_output) { - j = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc(ofs, output_stream); - } - if (!right_align) { - if (pe->pnext == NULL) { - fprintf(output_stream, "%s", pe->key); - } else { - // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 - fprintf(output_stream, "%s", pe->key); - int d = max_widths[j] - strlen_for_utf8_display(pe->key); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - } - } else { - int d = max_widths[j] - strlen_for_utf8_display(pe->key); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fprintf(output_stream, "%s", pe->key); - } - } - fputs(ors, output_stream); - } - - j = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc(ofs, output_stream); - } - char* value = pe->value; - if (*value == 0) // empty string - value = "-"; - if (!right_align) { - if (pe->pnext == NULL) { - fprintf(output_stream, "%s", value); - } else { - fprintf(output_stream, "%s", value); - int d = max_widths[j] - strlen_for_utf8_display(value); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - } - } else { - int d = max_widths[j] - strlen_for_utf8_display(value); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fprintf(output_stream, "%s", value); - } - } - fputs(ors, output_stream); - - lrec_free(prec); // end of baton-pass - } - - free(max_widths); - sllv_free(precords); -} - -// ---------------------------------------------------------------- -static void print_and_free_record_list_barred(sllv_t* precords, FILE* output_stream, char* ors, char ofs, - int right_align, int headerless_output) -{ - if (precords->length == 0) { - sllv_free(precords); - return; - } - lrec_t* prec1 = precords->phead->pvvalue; - - int* max_widths = mlr_malloc_or_die(sizeof(int) * prec1->field_count); - int j = 0; - for (lrece_t* pe = prec1->phead; pe != NULL; pe = pe->pnext, j++) { - if (headerless_output) { - max_widths[j] = 1; - } else { - max_widths[j] = strlen_for_utf8_display(pe->key); - } - } - for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext) { - lrec_t* prec = pnode->pvvalue; - j = 0; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - int width = strlen_for_utf8_display(pe->value); - if (width > max_widths[j]) - max_widths[j] = width; - } - } - - int onr = 0; - for (sllve_t* pnode = precords->phead; pnode != NULL; pnode = pnode->pnext, onr++) { - lrec_t* prec = pnode->pvvalue; - - if (onr == 0 && !headerless_output) { - - j = 0; - fputc('+', output_stream); - fputc('-', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc('-', output_stream); - } - int d = max_widths[j]; - for (int i = 0; i < d; i++) - fputc('-', output_stream); - fputc('-', output_stream); - fputc('+', output_stream); - } - fputs(ors, output_stream); - - j = 0; - fputc('|', output_stream); - fputc(ofs, output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc(ofs, output_stream); - } - if (!right_align) { - // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 - fprintf(output_stream, "%s", pe->key); - int d = max_widths[j] - strlen_for_utf8_display(pe->key); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fputc(ofs, output_stream); - fputc('|', output_stream); - } else { - int d = max_widths[j] - strlen_for_utf8_display(pe->key); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fprintf(output_stream, "%s", pe->key); - fputc(ofs, output_stream); - fputc('|', output_stream); - } - } - fputs(ors, output_stream); - - j = 0; - fputc('+', output_stream); - fputc('-', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc('-', output_stream); - } - int d = max_widths[j]; - for (int i = 0; i < d; i++) - fputc('-', output_stream); - fputc('-', output_stream); - fputc('+', output_stream); - } - fputs(ors, output_stream); - - } - - j = 0; - fputc('|', output_stream); - fputc(ofs, output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc(ofs, output_stream); - } - char* value = pe->value; - if (*value == 0) // empty string - value = "-"; - if (!right_align) { - fprintf(output_stream, "%s", value); - int d = max_widths[j] - strlen_for_utf8_display(value); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fputc(ofs, output_stream); - fputc('|', output_stream); - } else { - int d = max_widths[j] - strlen_for_utf8_display(value); - for (int i = 0; i < d; i++) - fputc(ofs, output_stream); - fprintf(output_stream, "%s", value); - fputc(ofs, output_stream); - fputc('|', output_stream); - } - } - fputs(ors, output_stream); - - if (pnode->pnext == NULL) { - j = 0; - fputc('+', output_stream); - fputc('-', output_stream); - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext, j++) { - if (j > 0) { - fputc('-', output_stream); - } - int d = max_widths[j]; - for (int i = 0; i < d; i++) - fputc('-', output_stream); - fputc('-', output_stream); - fputc('+', output_stream); - } - fputs(ors, output_stream); - } - - lrec_free(prec); // end of baton-pass - } - - free(max_widths); - sllv_free(precords); -} diff --git a/c/output/lrec_writer_xtab.c b/c/output/lrec_writer_xtab.c deleted file mode 100644 index 91547ec70..000000000 --- a/c/output/lrec_writer_xtab.c +++ /dev/null @@ -1,138 +0,0 @@ -#include -#include -#include "lib/mlrutil.h" -#include "output/lrec_writers.h" - -// ---------------------------------------------------------------- -// Note: If OPS is single-character then we can do alignment of the form -// -// ab 123 -// def 4567 -// -// On the other hand, if it's multi-character, we won't be able to align -// neatly in all cases. Yet we do allow multi-character OPS, just without -// repetition: if someone wants to use OPS ": " and format data as -// -// ab: 123 -// def: 4567 -// -// then they can do that. -// ---------------------------------------------------------------- - -typedef struct _lrec_writer_xtab_state_t { - char* ofs; - char* ops; - int opslen; - long long record_count; - int right_justify_value; -} lrec_writer_xtab_state_t; - -static void lrec_writer_xtab_free(lrec_writer_t* pwriter, context_t* pctx); -static void lrec_writer_xtab_process_aligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs); -static void lrec_writer_xtab_process_aligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_xtab_process_aligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_xtab_process_unaligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs); -static void lrec_writer_xtab_process_unaligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); -static void lrec_writer_xtab_process_unaligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_xtab_alloc(char* ofs, char* ops, int right_justify_value) { - lrec_writer_t* plrec_writer = mlr_malloc_or_die(sizeof(lrec_writer_t)); - - lrec_writer_xtab_state_t* pstate = mlr_malloc_or_die(sizeof(lrec_writer_xtab_state_t)); - pstate->ofs = ofs; - pstate->ops = ops; - pstate->opslen = strlen(ops); - pstate->record_count = 0LL; - pstate->right_justify_value = right_justify_value; - - plrec_writer->pvstate = pstate; - if (pstate->opslen == 1) { - plrec_writer->pprocess_func = streq(ofs, "auto") - ? lrec_writer_xtab_process_aligned_auto_ofs - : lrec_writer_xtab_process_aligned_nonauto_ofs; - } else { - plrec_writer->pprocess_func = streq(ofs, "auto") - ? lrec_writer_xtab_process_unaligned_auto_ofs - : lrec_writer_xtab_process_unaligned_nonauto_ofs; - } - plrec_writer->pfree_func = lrec_writer_xtab_free; - - return plrec_writer; -} - -static void lrec_writer_xtab_free(lrec_writer_t* pwriter, context_t* pctx) { - free(pwriter->pvstate); - free(pwriter); -} - -// ---------------------------------------------------------------- -static void lrec_writer_xtab_process_aligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_xtab_process_aligned(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_xtab_process_aligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_xtab_state_t* pstate = pvstate; - lrec_writer_xtab_process_aligned(pvstate, output_stream, prec, pstate->ofs); -} - -static void lrec_writer_xtab_process_aligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs) { - if (prec == NULL) - return; - lrec_writer_xtab_state_t* pstate = pvstate; - if (pstate->record_count > 0LL) - fputs(ofs, output_stream); - pstate->record_count++; - - int max_key_width = 1; - int max_value_width = 1; - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - int key_width = strlen_for_utf8_display(pe->key); - int value_width = strlen_for_utf8_display(pe->value); - if (key_width > max_key_width) - max_key_width = key_width; - if (value_width > max_value_width) - max_value_width = value_width; - } - - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 - fprintf(output_stream, "%s", pe->key); - int d = max_key_width - strlen_for_utf8_display(pe->key); - for (int i = 0; i < d; i++) - fputs(pstate->ops, output_stream); - - if (pstate->right_justify_value) { - int d = max_value_width - strlen_for_utf8_display(pe->value); - for (int i = 0; i < d; i++) - fputs(pstate->ops, output_stream); - } - fprintf(output_stream, "%s%s%s", pstate->ops, pe->value, ofs); - } - lrec_free(prec); // end of baton-pass -} - -// ---------------------------------------------------------------- -static void lrec_writer_xtab_process_unaligned_auto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_xtab_process_unaligned(pvstate, output_stream, prec, pctx->auto_line_term); -} - -static void lrec_writer_xtab_process_unaligned_nonauto_ofs(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { - lrec_writer_xtab_state_t* pstate = pvstate; - lrec_writer_xtab_process_unaligned(pvstate, output_stream, prec, pstate->ofs); -} - -static void lrec_writer_xtab_process_unaligned(void* pvstate, FILE* output_stream, lrec_t* prec, char* ofs) { - if (prec == NULL) - return; - lrec_writer_xtab_state_t* pstate = pvstate; - if (pstate->record_count > 0LL) - fputs(ofs, output_stream); - pstate->record_count++; - - for (lrece_t* pe = prec->phead; pe != NULL; pe = pe->pnext) { - // "%-*s" fprintf format isn't correct for non-ASCII UTF-8 - fprintf(output_stream, "%s%s%s%s", pe->key, pstate->ops, pe->value, ofs); - } - lrec_free(prec); // end of baton-pass -} diff --git a/c/output/lrec_writers.c b/c/output/lrec_writers.c deleted file mode 100644 index 2db61eec3..000000000 --- a/c/output/lrec_writers.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "output/lrec_writers.h" - -lrec_writer_t* lrec_writer_alloc(cli_writer_opts_t* popts) { - if (streq(popts->ofile_fmt, "dkvp")) { - return lrec_writer_dkvp_alloc(popts->ors, popts->ofs, popts->ops); - - } else if (streq(popts->ofile_fmt, "json")) { - return lrec_writer_json_alloc(popts->stack_json_output_vertically, - popts->wrap_json_output_in_outer_list, popts->json_quote_int_keys, - popts->json_quote_non_string_values, - popts->output_json_flatten_separator, popts->ors); - - } else if (streq(popts->ofile_fmt, "csv")) { - return lrec_writer_csv_alloc(popts->ors, popts->ofs, popts->oquoting, - popts->headerless_csv_output); - - } else if (streq(popts->ofile_fmt, "csvlite")) { - return lrec_writer_csvlite_alloc(popts->ors, popts->ofs, popts->headerless_csv_output); - - } else if (streq(popts->ofile_fmt, "markdown")) { - return lrec_writer_markdown_alloc(popts->ors); - - } else if (streq(popts->ofile_fmt, "nidx")) { - return lrec_writer_nidx_alloc(popts->ors, popts->ofs); - - } else if (streq(popts->ofile_fmt, "xtab")) { - return lrec_writer_xtab_alloc(popts->ofs, popts->ops, popts->right_justify_xtab_value); - - } else if (streq(popts->ofile_fmt, "pprint")) { - if (strlen(popts->ofs) != 1) { - fprintf(stderr, "%s: OFS for PPRINT format must be single-character; got \"%s\".\n", - MLR_GLOBALS.bargv0, popts->ofs); - return NULL; - } else { - return lrec_writer_pprint_alloc(popts->ors, popts->ofs[0], popts->right_align_pprint, - popts->pprint_barred, popts->headerless_csv_output); - } - - } else { - return NULL; - } -} - -// ---------------------------------------------------------------- -lrec_writer_t* lrec_writer_alloc_or_die(cli_writer_opts_t* popts) { - lrec_writer_t* plrec_writer = lrec_writer_alloc(popts); - MLR_INTERNAL_CODING_ERROR_IF(plrec_writer == NULL); - return plrec_writer; -} - -// ---------------------------------------------------------------- -void lrec_writer_print_all(lrec_writer_t* pwriter, FILE* fp, sllv_t* poutrecs, context_t* pctx) { - while (poutrecs->phead != NULL) { - lrec_t* poutrec = sllv_pop(poutrecs); - pwriter->pprocess_func(pwriter->pvstate, fp, poutrec, pctx); - } -} diff --git a/c/output/lrec_writers.h b/c/output/lrec_writers.h deleted file mode 100644 index 27e68d09a..000000000 --- a/c/output/lrec_writers.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef LREC_WRITERS_H -#define LREC_WRITERS_H -#include -#include "cli/quoting.h" -#include "cli/mlrcli.h" -#include "containers/sllv.h" -#include "output/lrec_writer.h" -#include "lib/context.h" - -lrec_writer_t* lrec_writer_alloc(cli_writer_opts_t* popts); -lrec_writer_t* lrec_writer_alloc_or_die(cli_writer_opts_t* popts); - -lrec_writer_t* lrec_writer_csv_alloc(char* ors, char* ofs, quoting_t oquoting, int headerless_csv_output); -lrec_writer_t* lrec_writer_csvlite_alloc(char* ors, char* ofs, int headerless_csv_output); -lrec_writer_t* lrec_writer_markdown_alloc(char* ors); -lrec_writer_t* lrec_writer_dkvp_alloc(char* ors, char* ofs, char* ops); -lrec_writer_t* lrec_writer_json_alloc(int stack_vertically, int wrap_json_output_in_outer_list, - int json_quote_int_keys, int json_quote_non_string_values, - char* output_json_flatten_separator, char* line_term); -lrec_writer_t* lrec_writer_nidx_alloc(char* ors, char* ofs); -lrec_writer_t* lrec_writer_pprint_alloc(char* ors, char ofs, int right_align, int barred, int headerless_output); -lrec_writer_t* lrec_writer_xtab_alloc(char* ofs, char* ops, int right_justify_value); - -// Pops and frees the lrecs in the argument list without sllv-freeing the list structure itself. -void lrec_writer_print_all(lrec_writer_t* pwriter, FILE* fp, sllv_t* poutrecs, context_t* pctx); - -#endif // LREC_WRITERS_H diff --git a/c/output/multi_lrec_writer.c b/c/output/multi_lrec_writer.c deleted file mode 100644 index 5f14a091b..000000000 --- a/c/output/multi_lrec_writer.c +++ /dev/null @@ -1,124 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "cli/mlrcli.h" -#include "output/multi_lrec_writer.h" - -// ---------------------------------------------------------------- -multi_lrec_writer_t* multi_lrec_writer_alloc(cli_writer_opts_t* pwriter_opts) { - multi_lrec_writer_t* pmlw = mlr_malloc_or_die(sizeof(multi_lrec_writer_t)); - pmlw->pnames_to_lrec_writers_and_fps = lhmsv_alloc(); - pmlw->pwriter_opts = pwriter_opts; - return pmlw; -} - -// ---------------------------------------------------------------- -void multi_lrec_writer_free(multi_lrec_writer_t* pmlw, context_t* pctx) { - if (pmlw == NULL) - return; - - for (lhmsve_t* pe = pmlw->pnames_to_lrec_writers_and_fps->phead; pe != NULL; pe = pe->pnext) { - lrec_writer_and_fp_t* pstate = pe->pvvalue; - pstate->plrec_writer->pfree_func(pstate->plrec_writer, pctx); - free(pstate->filename_or_command); - free(pstate); - } - - lhmsv_free(pmlw->pnames_to_lrec_writers_and_fps); - free(pmlw); -} - -// ---------------------------------------------------------------- -void multi_lrec_writer_output_srec(multi_lrec_writer_t* pmlw, lrec_t* poutrec, char* filename_or_command, - file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx) -{ - lrec_writer_and_fp_t* pstate = lhmsv_get(pmlw->pnames_to_lrec_writers_and_fps, filename_or_command); - if (pstate == NULL) { - pstate = mlr_malloc_or_die(sizeof(lrec_writer_and_fp_t)); - pstate->plrec_writer = lrec_writer_alloc(pmlw->pwriter_opts); - MLR_INTERNAL_CODING_ERROR_IF(pstate->plrec_writer == NULL); - pstate->filename_or_command = mlr_strdup_or_die(filename_or_command); - char* mode_string = get_mode_string(file_output_mode); - char* mode_desc = get_mode_desc(file_output_mode); - if (file_output_mode == MODE_PIPE) { - pstate->is_popen = TRUE; - pstate->output_stream = popen(filename_or_command, mode_string); - if (pstate->output_stream == NULL) { - perror("popen"); - fprintf(stderr, "%s: failed popen for %s on \"%s\".\n", - MLR_GLOBALS.bargv0, mode_desc, filename_or_command); - exit(1); - } - } else { - pstate->is_popen = FALSE; - pstate->output_stream = fopen(filename_or_command, mode_string); - if (pstate->output_stream == NULL) { - perror("fopen"); - fprintf(stderr, "%s: failed fopen for %s on \"%s\".\n", - MLR_GLOBALS.bargv0, mode_desc, filename_or_command); - exit(1); - } - } - - lhmsv_put(pmlw->pnames_to_lrec_writers_and_fps, mlr_strdup_or_die(filename_or_command), pstate, FREE_ENTRY_KEY); - } - - pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, poutrec, pctx); - - if (poutrec != NULL) { - if (flush_every_record) - fflush(pstate->output_stream); - } else { - if (pstate->is_popen) { - // Sadly, pclose returns an error even on well-formed commands. For example, if the popened - // command was "grep nonesuch" and the string "nonesuch" was not encountered, grep returns - // non-zero and popen flags it as an error. We cannot differentiate these from genuine - // failure cases so the best choice is to simply call pclose and ignore error codes. - // If a piped-to command does fail then it should have some output to stderr which the - // user can take advantage of. - (void)pclose(pstate->output_stream); - } else { - if (fclose(pstate->output_stream) != 0) { - perror("fclose"); - fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, filename_or_command); - exit(1); - } - } - pstate->output_stream = NULL; - } -} - -void multi_lrec_writer_output_list(multi_lrec_writer_t* pmlw, sllv_t* poutrecs, char* filename_or_command, - file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx) -{ - if (poutrecs == NULL) // synonym for empty record-list - return; - - while (poutrecs->phead) { - lrec_t* poutrec = sllv_pop(poutrecs); - multi_lrec_writer_output_srec(pmlw, poutrec, filename_or_command, file_output_mode, - flush_every_record, pctx); - } -} - -void multi_lrec_writer_drain(multi_lrec_writer_t* pmlw, context_t* pctx) { - for (lhmsve_t* pe = pmlw->pnames_to_lrec_writers_and_fps->phead; pe != NULL; pe = pe->pnext) { - lrec_writer_and_fp_t* pstate = pe->pvvalue; - pstate->plrec_writer->pprocess_func(pstate->plrec_writer->pvstate, pstate->output_stream, NULL, pctx); - fflush(pstate->output_stream); - if (pstate->is_popen) { - // Sadly, pclose returns an error even on well-formed commands. For example, if the popened - // command was "grep nonesuch" and the string "nonesuch" was not encountered, grep returns - // non-zero and popen flags it as an error. We cannot differentiate these from genuine - // failure cases so the best choice is to simply call pclose and ignore error codes. - // If a piped-to command does fail then it should have some output to stderr which the - // user can take advantage of. - (void)pclose(pstate->output_stream); - } else { - if (fclose(pstate->output_stream) != 0) { - perror("fclose"); - fprintf(stderr, "%s: fclose error on \"%s\".\n", MLR_GLOBALS.bargv0, pstate->filename_or_command); - exit(1); - } - } - } -} diff --git a/c/output/multi_lrec_writer.h b/c/output/multi_lrec_writer.h deleted file mode 100644 index 28db73f8c..000000000 --- a/c/output/multi_lrec_writer.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef MULTI_LREC_WRITER_H -#define MULTI_LREC_WRITER_H - -#include -#include "cli/mlrcli.h" -#include "containers/lhmsv.h" -#include "containers/sllv.h" -#include "output/lrec_writers.h" -#include "output/file_output_mode.h" -#include "lib/context.h" - -// ---------------------------------------------------------------- -// This is the value struct for the hashmap: -typedef struct _lrec_writer_and_fp_t { - lrec_writer_t* plrec_writer; - char* filename_or_command; - FILE* output_stream; - int is_popen; -} lrec_writer_and_fp_t; - -typedef struct _multi_lrec_writer_t { - lhmsv_t* pnames_to_lrec_writers_and_fps; - cli_writer_opts_t* pwriter_opts; -} multi_lrec_writer_t; - -// ---------------------------------------------------------------- -multi_lrec_writer_t* multi_lrec_writer_alloc(cli_writer_opts_t* pwriter_opts); - -void multi_lrec_writer_free(multi_lrec_writer_t* pmlw, context_t* pctx); - -void multi_lrec_writer_output_srec(multi_lrec_writer_t* pmlw, lrec_t* poutrec, char* filename_or_command, - file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx); - -void multi_lrec_writer_output_list(multi_lrec_writer_t* pmlw, sllv_t* poutrecs, char* filename_or_command, - file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx); - -void multi_lrec_writer_drain(multi_lrec_writer_t* pmlw, context_t* pctx); - -#endif // MULTI_LREC_WRITER_H diff --git a/c/output/multi_out.c b/c/output/multi_out.c deleted file mode 100644 index eb3146853..000000000 --- a/c/output/multi_out.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "multi_out.h" - -// ---------------------------------------------------------------- -multi_out_t* multi_out_alloc() { - multi_out_t* pmo = mlr_malloc_or_die(sizeof(multi_out_t)); - pmo->pnames_to_fps = lhmsv_alloc(); - return pmo; -} - -// ---------------------------------------------------------------- -void multi_out_close(multi_out_t* pmo) { - for (lhmsve_t* pe = pmo->pnames_to_fps->phead; pe != NULL; pe = pe->pnext) { - fp_and_flag_t* pstate = pe->pvvalue; - if (pstate->is_popen) { - pclose(pstate->output_stream); - } else { - fclose(pstate->output_stream); - } - } -} - -// ---------------------------------------------------------------- -void multi_out_free(multi_out_t* pmo) { - if (pmo == NULL) - return; - for (lhmsve_t* pe = pmo->pnames_to_fps->phead; pe != NULL; pe = pe->pnext) { - fp_and_flag_t* pstate = pe->pvvalue; - free(pstate); - } - lhmsv_free(pmo->pnames_to_fps); - free(pmo); -} - -// ---------------------------------------------------------------- -FILE* multi_out_get(multi_out_t* pmo, char* filename_or_command, file_output_mode_t file_output_mode) { - fp_and_flag_t* pstate = lhmsv_get(pmo->pnames_to_fps, filename_or_command); - if (pstate == NULL) { - pstate = mlr_malloc_or_die(sizeof(fp_and_flag_t)); - char* mode_string = get_mode_string(file_output_mode); - char* mode_desc = get_mode_desc(file_output_mode); - if (file_output_mode == MODE_PIPE) { - pstate->is_popen = TRUE; - pstate->output_stream = popen(filename_or_command, mode_string); - if (pstate->output_stream == NULL) { - perror("popen"); - fprintf(stderr, "%s: failed popen for %s of \"%s\".\n", - MLR_GLOBALS.bargv0, mode_desc, filename_or_command); - exit(1); - } - } else { - pstate->is_popen = FALSE; - pstate->output_stream = fopen(filename_or_command, mode_string); - if (pstate->output_stream == NULL) { - perror("fopen"); - fprintf(stderr, "%s: failed fopen for %s of \"%s\".\n", - MLR_GLOBALS.bargv0, mode_desc, filename_or_command); - exit(1); - } - } - lhmsv_put(pmo->pnames_to_fps, mlr_strdup_or_die(filename_or_command), pstate, FREE_ENTRY_KEY); - } - return pstate->output_stream; -} diff --git a/c/output/multi_out.h b/c/output/multi_out.h deleted file mode 100644 index 16d9303cf..000000000 --- a/c/output/multi_out.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef MULTI_OUT_H -#define MULTI_OUT_H - -#include -#include "containers/lhmsv.h" -#include "output/file_output_mode.h" - -// ---------------------------------------------------------------- -// This is the value struct for the hashmap: -typedef struct _fp_and_flag_t { - FILE* output_stream; - int is_popen; -} fp_and_flag_t; - -typedef struct _multi_out_t { - lhmsv_t* pnames_to_fps; -} multi_out_t; - -// ---------------------------------------------------------------- -multi_out_t* multi_out_alloc(); - -void multi_out_close(multi_out_t* pmo); - -void multi_out_free(multi_out_t* pmo); - -FILE* multi_out_get(multi_out_t* pmo, char* filename_or_command, file_output_mode_t file_output_mode); - -#endif // MULTI_OUT_H diff --git a/c/parsing/Makefile.am b/c/parsing/Makefile.am deleted file mode 100644 index 7a4e13e06..000000000 --- a/c/parsing/Makefile.am +++ /dev/null @@ -1,71 +0,0 @@ -AM_CPPFLAGS= -I${srcdir} -AM_CFLAGS= -std=gnu99 - -noinst_PROGRAMS= lemon -lemon_SOURCES= lemon_action.c \ - lemon_action.h \ - lemon_assert.c \ - lemon_assert.h \ - lemon_config_list.c \ - lemon_config_list.h \ - lemon_dims.h \ - lemon_error.c \ - lemon_error.h \ - lemon_fsm.c \ - lemon_fsm.h \ - lemon_main.c \ - lemon_memory.c \ - lemon_memory.h \ - lemon_msort.c \ - lemon_msort.h \ - lemon_option.c \ - lemon_option.h \ - lemon_parse.c \ - lemon_parse.h \ - lemon_plink.c \ - lemon_plink.h \ - lemon_report.c \ - lemon_report.h \ - lemon_set.c \ - lemon_set.h \ - lemon_state_table.c \ - lemon_state_table.h \ - lemon_string.c \ - lemon_string.h \ - lemon_structs.h \ - lemon_symbol.c \ - lemon_symbol.h - -noinst_LTLIBRARIES= libdsl.la -# if we don't want to distribute the generated sources, move them to a nodist_libfoo_la_SOURCES variable -libdsl_la_SOURCES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_wrapper.c mlr_dsl_wrapper.h -CLEANFILES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out -EXTRA_DIST= lempar.c mlr_dsl_lexer.l mlr_dsl_parse.y - -mlr_dsl_wrapper.c: mlr_dsl_lexer.h -mlr_dsl_parse.h: mlr_dsl_parse.c -mlr_dsl_parse.c: mlr_dsl_parse.y lempar.c lemon${EXEEXT} - ./lemon -s mlr_dsl_parse.y -# lemon does not re-generate the file if it exists and is the same -# this causes problems with the dependency above - touch mlr_dsl_parse.h - mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp - sed \ - -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ - -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ - mlr_dsl_parse.c.tmp > mlr_dsl_parse.c - rm -f mlr_dsl_parse.c.tmp - - -mlr_dsl_lexer.h: mlr_dsl_lexer.c -mlr_dsl_lexer.c: mlr_dsl_lexer.l mlr_dsl_parse.h - flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h ${srcdir}/mlr_dsl_lexer.l - -distclean-local: - if [ "${srcdir}" != "." ]; then \ - rm -f lempar.c mlr_dsl_parse.y; \ - fi diff --git a/c/parsing/Makefile.in b/c/parsing/Makefile.in deleted file mode 100644 index 384c25a6a..000000000 --- a/c/parsing/Makefile.in +++ /dev/null @@ -1,699 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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@ -noinst_PROGRAMS = lemon$(EXEEXT) -subdir = c/parsing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = lempar.c mlr_dsl_parse.y -LTLIBRARIES = $(noinst_LTLIBRARIES) -libdsl_la_LIBADD = -am_libdsl_la_OBJECTS = mlr_dsl_lexer.lo mlr_dsl_parse.lo \ - mlr_dsl_wrapper.lo -libdsl_la_OBJECTS = $(am_libdsl_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 = -PROGRAMS = $(noinst_PROGRAMS) -am_lemon_OBJECTS = lemon_action.$(OBJEXT) lemon_assert.$(OBJEXT) \ - lemon_config_list.$(OBJEXT) lemon_error.$(OBJEXT) \ - lemon_fsm.$(OBJEXT) lemon_main.$(OBJEXT) \ - lemon_memory.$(OBJEXT) lemon_msort.$(OBJEXT) \ - lemon_option.$(OBJEXT) lemon_parse.$(OBJEXT) \ - lemon_plink.$(OBJEXT) lemon_report.$(OBJEXT) \ - lemon_set.$(OBJEXT) lemon_state_table.$(OBJEXT) \ - lemon_string.$(OBJEXT) lemon_symbol.$(OBJEXT) -lemon_OBJECTS = $(am_lemon_OBJECTS) -lemon_LDADD = $(LDADD) -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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libdsl_la_SOURCES) $(lemon_SOURCES) -DIST_SOURCES = $(libdsl_la_SOURCES) $(lemon_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 $(srcdir)/lempar.c \ - $(srcdir)/mlr_dsl_parse.y $(top_srcdir)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -AM_CPPFLAGS = -I${srcdir} -AM_CFLAGS = -std=gnu99 -lemon_SOURCES = lemon_action.c \ - lemon_action.h \ - lemon_assert.c \ - lemon_assert.h \ - lemon_config_list.c \ - lemon_config_list.h \ - lemon_dims.h \ - lemon_error.c \ - lemon_error.h \ - lemon_fsm.c \ - lemon_fsm.h \ - lemon_main.c \ - lemon_memory.c \ - lemon_memory.h \ - lemon_msort.c \ - lemon_msort.h \ - lemon_option.c \ - lemon_option.h \ - lemon_parse.c \ - lemon_parse.h \ - lemon_plink.c \ - lemon_plink.h \ - lemon_report.c \ - lemon_report.h \ - lemon_set.c \ - lemon_set.h \ - lemon_state_table.c \ - lemon_state_table.h \ - lemon_string.c \ - lemon_string.h \ - lemon_structs.h \ - lemon_symbol.c \ - lemon_symbol.h - -noinst_LTLIBRARIES = libdsl.la -# if we don't want to distribute the generated sources, move them to a nodist_libfoo_la_SOURCES variable -libdsl_la_SOURCES = mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_wrapper.c mlr_dsl_wrapper.h -CLEANFILES = mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out -EXTRA_DIST = lempar.c mlr_dsl_lexer.l mlr_dsl_parse.y -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/parsing/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/parsing/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libdsl.la: $(libdsl_la_OBJECTS) $(libdsl_la_DEPENDENCIES) $(EXTRA_libdsl_la_DEPENDENCIES) - $(AM_V_CCLD)$(LINK) $(libdsl_la_OBJECTS) $(libdsl_la_LIBADD) $(LIBS) - -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 - -lemon$(EXEEXT): $(lemon_OBJECTS) $(lemon_DEPENDENCIES) $(EXTRA_lemon_DEPENDENCIES) - @rm -f lemon$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(lemon_OBJECTS) $(lemon_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_action.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_assert.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_config_list.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_error.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_fsm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_msort.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_option.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_parse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_plink.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_report.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_set.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_state_table.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_string.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lemon_symbol.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_lexer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_parse.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mlr_dsl_wrapper.Plo@am__quote@ - -.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: $(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) $(PROGRAMS) -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: - -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-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-local 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 -rf ./$(DEPDIR) - -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 check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ - cscopelist-am ctags ctags-am distclean distclean-compile \ - distclean-generic distclean-libtool distclean-local \ - 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 - - -mlr_dsl_wrapper.c: mlr_dsl_lexer.h -mlr_dsl_parse.h: mlr_dsl_parse.c -mlr_dsl_parse.c: mlr_dsl_parse.y lempar.c lemon${EXEEXT} - ./lemon -s mlr_dsl_parse.y -# lemon does not re-generate the file if it exists and is the same -# this causes problems with the dependency above - touch mlr_dsl_parse.h - mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp - sed \ - -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ - -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ - mlr_dsl_parse.c.tmp > mlr_dsl_parse.c - rm -f mlr_dsl_parse.c.tmp - -mlr_dsl_lexer.h: mlr_dsl_lexer.c -mlr_dsl_lexer.c: mlr_dsl_lexer.l mlr_dsl_parse.h - flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h ${srcdir}/mlr_dsl_lexer.l - -distclean-local: - if [ "${srcdir}" != "." ]; then \ - rm -f lempar.c mlr_dsl_parse.y; \ - fi - -# 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: diff --git a/c/parsing/Makefile.no-autoconfig b/c/parsing/Makefile.no-autoconfig deleted file mode 100644 index 24e208454..000000000 --- a/c/parsing/Makefile.no-autoconfig +++ /dev/null @@ -1,189 +0,0 @@ -# ================================================================ -# NOTE: This makefile is not intended to be used in a packaging system -- -# rather, Miller uses autconfig for that. This makefile is intended for users -# who prefer (for whatever reason) to bypass autoconfig. Please also see -# http://johnkerl.org/miller/doc/build.html#Without_using_autoconfig -# ================================================================ - -CC=gcc - -# We cannot use the same flags as the parent-directory makefile since -# lex emits a couple of unused static functions which don't pass gcc -Wall -Werror. -#DSLCFLAGS=-I.. -O3 -Wextra -Wpedantic -DSLCFLAGS=-I.. -O3 -g - -#CC=clang -#DSLCFLAGS=-I.. -Wall -O2 -fsanitize=address - -# ---------------------------------------------------------------- -top: mlr_dsl_lexer.o mlr_dsl_parse.o mlr_dsl_wrapper.o - -# ---------------------------------------------------------------- -mlr_dsl_wrapper.o: mlr_dsl_wrapper.c mlr_dsl_wrapper.h mlr_dsl_parse.h \ -../lib/mlrutil.h ../dsl/mlr_dsl_ast.h ../containers/sllv.h - $(CC) -Wall $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_wrapper.c - -mlr_dsl_parse.o: mlr_dsl_parse.c mlr_dsl_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_parse.c -mlr_dsl_parse.c mlr_dsl_parse.h: mlr_dsl_parse.y lemon ../dsl/mlr_dsl_ast.h ../containers/sllv.h - ./lemon -s mlr_dsl_parse.y - mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp - sed \ - -e 's/ParseTrace/mlr_dsl_ParseTrace/g' \ - -e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/mlr_dsl_yy_destructor/g' \ - mlr_dsl_parse.c.tmp > mlr_dsl_parse.c - rm -f mlr_dsl_parse.c.tmp - -# muldef: -# ParseTrace -# ParseTokenName -# lemon_parser_alloc -# lemon_parser_free -# lemon_parser_parse_token -# yy_destructor - -mlr_dsl_lexer.o: mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 mlr_dsl_lexer.c -mlr_dsl_lexer.c mlr_dsl_lexer.h: mlr_dsl_lexer.l ../dsl/mlr_dsl_ast.h - flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h mlr_dsl_lexer.l - -mlr_dsl: mlr_dsl_wrapper_main.c mlr_dsl_wrapper.c mlr_dsl_wrapper.h mlr_dsl_parse.h mlr_dsl_lexer.o mlr_dsl_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./../dsl/mlr_dsl_ast.h \ -../lib/mlrutil.c ../containers/sllv.c ./../dsl/mlr_dsl_ast.c - $(CC) -Wall $(DSLCFLAGS) -std=gnu99 mlr_dsl_wrapper_main.c mlr_dsl_wrapper.c mlr_dsl_lexer.o mlr_dsl_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./../dsl/mlr_dsl_ast.c -o mlr_dsl - -# ---------------------------------------------------------------- -ex0: ex0_wrapper.c ex0_wrapper.h ex0_parse.h ex0_lexer.o ex0_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ -../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c - $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex0_wrapper.c ex0_lexer.o ex0_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex0 - -ex0_parse.o: ex0_parse.c ex0_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex0_parse.c -ex0_parse.c ex0_parse.h: ex0_parse.y lemon ./ex_ast.h ../containers/sllv.h - ./lemon -s ex0_parse.y - mv ex0_parse.c ex0_parse.c.tmp - sed \ - -e 's/ParseTrace/ex0_ParseTrace/g' \ - -e 's/ParseTokenName/ex0_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/ex0_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/ex0_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/ex0_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/ex0_yy_destructor/g' \ - ex0_parse.c.tmp > ex0_parse.c - rm -f ex0_parse.c.tmp - -ex0_lexer.o: ex0_lexer.c ex0_lexer.h ex0_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex0_lexer.c -ex0_lexer.c ex0_lexer.h: ex0_lexer.l ./ex_ast.h - flex --prefix=ex0_lexer_ --outfile=ex0_lexer.c --header-file=ex0_lexer.h ex0_lexer.l - -# ---------------------------------------------------------------- -ex1: ex1_wrapper.c ex1_wrapper.h ex1_parse.h ex1_lexer.o ex1_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ -../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c - $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex1_wrapper.c ex1_lexer.o ex1_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex1 - -ex1_parse.o: ex1_parse.c ex1_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex1_parse.c -ex1_parse.c ex1_parse.h: ex1_parse.y lemon ./ex_ast.h ../containers/sllv.h - ./lemon -s ex1_parse.y - mv ex1_parse.c ex1_parse.c.tmp - sed \ - -e 's/ParseTrace/ex1_ParseTrace/g' \ - -e 's/ParseTokenName/ex1_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/ex1_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/ex1_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/ex1_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/ex1_yy_destructor/g' \ - ex1_parse.c.tmp > ex1_parse.c - rm -f ex1_parse.c.tmp - -ex1_lexer.o: ex1_lexer.c ex1_lexer.h ex1_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex1_lexer.c -ex1_lexer.c ex1_lexer.h: ex1_lexer.l ./ex_ast.h - flex --prefix=ex1_lexer_ --outfile=ex1_lexer.c --header-file=ex1_lexer.h ex1_lexer.l - -# ---------------------------------------------------------------- -ex2: ex2_wrapper.c ex2_wrapper.h ex2_parse.h ex2_lexer.o ex2_parse.o ../lib/mlrutil.c ../lib/mlrutil.h ../lib/mlr_globals.c ../lib/mlr_globals.h ./ex_ast.h \ -../lib/mlrutil.c ../containers/sllv.c ./ex_ast.h ./ex_ast.c - $(CC) -Wall $(DSLCFLAGS) -std=gnu99 ex2_wrapper.c ex2_lexer.o ex2_parse.o ../lib/mlrutil.c ../lib/mlr_globals.c ../containers/sllv.c ./ex_ast.c -o ex2 - -ex2_parse.o: ex2_parse.c ex2_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex2_parse.c -ex2_parse.c ex2_parse.h: ex2_parse.y lemon ./ex_ast.h ../containers/sllv.h - ./lemon -s -c ex2_parse.y - mv ex2_parse.c ex2_parse.c.tmp - sed \ - -e 's/ParseTrace/ex2_ParseTrace/g' \ - -e 's/ParseTokenName/ex2_ParseTokenName/g' \ - -e 's/lemon_parser_alloc/ex2_lemon_parser_alloc/g' \ - -e 's/lemon_parser_free/ex2_lemon_parser_free/g' \ - -e 's/lemon_parser_parse_token/ex2_lemon_parser_parse_token/g' \ - -e 's/yy_destructor/ex2_yy_destructor/g' \ - ex2_parse.c.tmp > ex2_parse.c - rm -f ex2_parse.c.tmp - -ex2_lexer.o: ex2_lexer.c ex2_lexer.h ex2_parse.h - $(CC) $(DSLCFLAGS) -c -std=gnu99 ex2_lexer.c -ex2_lexer.c ex2_lexer.h: ex2_lexer.l ./ex_ast.h - flex --prefix=ex2_lexer_ --outfile=ex2_lexer.c --header-file=ex2_lexer.h ex2_lexer.l - -# ---------------------------------------------------------------- -lemon: \ - lemon_assert.h \ - lemon_assert.c \ - lemon_error.h \ - lemon_error.c \ - lemon_string.h \ - lemon_string.c \ - lemon_msort.h \ - lemon_msort.c \ - lemon_set.h \ - lemon_set.c \ - lemon_memory.h \ - lemon_memory.c \ - lemon_option.h \ - lemon_option.c \ - lemon_structs.h \ - lemon_action.h \ - lemon_action.c \ - lemon_symbol.h \ - lemon_symbol.c \ - lemon_config_list.h \ - lemon_config_list.c \ - lemon_state_table.h \ - lemon_state_table.c \ - lemon_plink.h \ - lemon_plink.c \ - lemon_parse.h \ - lemon_parse.c \ - lemon_fsm.h \ - lemon_fsm.c \ - lemon_report.h \ - lemon_report.c \ - lemon_main.c - $(CC) -o lemon lemon_assert.c lemon_error.c lemon_string.c \ - lemon_msort.c lemon_set.c lemon_memory.c lemon_option.c lemon_action.c \ - lemon_symbol.c lemon_config_list.c lemon_state_table.c lemon_plink.c \ - lemon_parse.c lemon_fsm.c lemon_report.c lemon_main.c \ - -# ---------------------------------------------------------------- -clean: - rm -f *.o - rm -f mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out - rm -f mlr_dsl_lexer.c mlr_dsl_lexer.h - rm -f ex0_parse.c ex0_parse.h ex0_parse.out - rm -f ex0_lexer.c ex0_lexer.h - rm -f ex0 - rm -f ex1_parse.c ex1_parse.h ex1_parse.out - rm -f ex1_lexer.c ex1_lexer.h - rm -f ex1 - rm -f ex2_parse.c ex2_parse.h ex2_parse.out - rm -f ex2_lexer.c ex2_lexer.h - rm -f ex2 - rm -f lemon - -.always: - @/bin/true diff --git a/c/parsing/README.md b/c/parsing/README.md deleted file mode 100644 index 9a4518f7a..000000000 --- a/c/parsing/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Miller domain-specific languages - -These exist for Miller's `put` and `filter` functions. The grammars are not at -all profound: just parsing 101 as familiar from an introductory compilers course. -I use `lex` and `lemon` rather than `lex` and `yacc`: I find Lemon far more -transparent. - -Concrete syntax trees (CSTs) are embodied in the `lex`/`lemon` files. Abstract -syntax trees (ASTs) are in the Miller `containers` directory. diff --git a/c/parsing/ex0_lexer.l b/c/parsing/ex0_lexer.l deleted file mode 100644 index 93cdf06f6..000000000 --- a/c/parsing/ex0_lexer.l +++ /dev/null @@ -1,53 +0,0 @@ -%{ -#include "stdio.h" // for fileno() prototype -#include "string.h" // for strdup() prototype -#include "ex0_parse.h" -#include "./ex_ast.h" -// http://flex.sourceforge.net/manual/Extra-Data.html - -%} - -%option reentrant -%option noyywrap -%option extra-type="struct _ex_ast_node_t **" - -%% - -[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { - // Leading minus sign is handled via the unary-minus operator, not here. - // 123 - // 123. 123.4 - // .234 - // 1e2 - // 1e-2 - // 1.2e3 1.e3 - // 1.2e-3 1.e-3 - // .2e3 - // .2e-3 1.e-3 - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} - -"+" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_PLUS; -} -"-" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MINUS; -} -"*" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_TIMES; -} -"/" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DIVIDE; -} - -[ \t\r\n] { } - -. { - return -1; -} -%% diff --git a/c/parsing/ex0_parse.y b/c/parsing/ex0_parse.y deleted file mode 100644 index 47749fa68..000000000 --- a/c/parsing/ex0_parse.y +++ /dev/null @@ -1,75 +0,0 @@ -// vim: set filetype=none: -// (Lemon files have .y extensions like Yacc files but are not Yacc.) - -%include { -#include -#include -#include -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -#define DO_WRITE_APPEND // transitional pending lemon-memory issue - -// ================================================================ -// AST: -// * parens, commas, semis, line endings, whitespace are all stripped away -// * variable names and literal values remain as leaf nodes of the AST -// * = + - * / ** {function names} remain as non-leaf nodes of the AST -// CST: See ex0_cst.c -// -// Note: This parser accepts many things that are invalid, e.g. -// * begin{end{}} -- begin/end not at top level -// * begin{$x=1} -- references to stream records at begin/end -// * break/continue outside of for/while/do-while -// * $x=x -- boundvars outside of for-loop variable bindings -// All of the above are enforced by the CST builder, which takes this parser's output AST as input. -// This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more -// informative error messages in C than in Lemon ('syntax error'). -// -// The parser hooks all build up an abstract syntax tree specifically for the CST builder. -// For clearer visuals on what the ASTs look like: -// * See ex0_cst.c -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -} - -%token_type {ex_ast_node_t*} -%default_type {ex_ast_node_t*} -%extra_argument {ex_ast_t* past} - -//void token_destructor(ex_ast_node_t t) { -// printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); -//} -//%token_destructor {token_destructor($$);} - -%parse_accept { -} - -// The caller is expected to provide more context. -%syntax_error { - fprintf(stderr, "mlr DSL: syntax error.\n"); -} - -// ================================================================ -md_body ::= math_expr(B). { - past->proot = B; -} - -math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_PLUS(O) MD_TOKEN_NUMBER(B) . { - C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); -} - -math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_MINUS(O) MD_TOKEN_NUMBER(B) . { - C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); -} - -math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_TIMES(O) MD_TOKEN_NUMBER(B) . { - C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); -} - -math_expr(C) ::= MD_TOKEN_NUMBER(A) MD_TOKEN_DIVIDE(O) MD_TOKEN_NUMBER(B) . { - C = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, A, B); -} diff --git a/c/parsing/ex0_wrapper.c b/c/parsing/ex0_wrapper.c deleted file mode 100644 index 714f088d8..000000000 --- a/c/parsing/ex0_wrapper.c +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include -#include "ex0_wrapper.h" -#include "ex0_lexer.h" -#include "ex0_parse.h" -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -// These prototypes are copied out manually from ex0_parse.c. With some -// more work I could have Lemon autogenerate these prototypes into -// ex0_parse.h. - -void *ex0_lemon_parser_alloc(void *(*mallocProc)(size_t)); - -int ex0_lemon_parser_parse_token( - void *pvparser, /* The parser */ - int yymajor, /* The major token code number */ - ex_ast_node_t* yyminor, /* The value for the token */ - ex_ast_t* past); /* Optional %extra_argument parameter */ -void ex0_lemon_parser_free( - void *pvparser, /* The parser to be deleted */ - void (*freeProc)(void*)); /* Function used to reclaim memory */ - -void ex0_ParseTrace(FILE *TraceFILE, char *zTracePrompt); - -// ---------------------------------------------------------------- -// http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html -// http://flex.sourceforge.net/manual/Extra-Data.html - -// Returns linked list of ex_ast_node_t*. -static ex_ast_t* ex0_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, - int trace_parse) -{ - int lex_code; - int parse_code; - ex_ast_t* past = ex_ast_alloc(); - if (trace_parse) - ex0_ParseTrace(stderr, "[DSLTRACE] "); - do { - lex_code = ex0_lexer_lex(scanner); - ex_ast_node_t* plexed_node = *ppnode; - parse_code = ex0_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); - if (parse_code == 0) { - return NULL; - } - } while (lex_code > 0); - if (-1 == lex_code) { - fprintf(stderr, "The scanner encountered an error.\n"); - return NULL; - } - parse_code = ex0_lemon_parser_parse_token(pvparser, 0, NULL, past); - - if (parse_code == 0) - return NULL; - return past; -} - -// ---------------------------------------------------------------- -// Returns linked list of ex_ast_node_t*. -ex_ast_t* ex0_parse(char* string, int trace_parse) { - ex_ast_node_t* pnode = NULL; - yyscan_t scanner; - ex0_lexer_lex_init_extra(&pnode, &scanner); - void* pvparser = ex0_lemon_parser_alloc(malloc); - - YY_BUFFER_STATE buf = NULL; - if (string == NULL) { - ex0_lexer_set_in(stdin, scanner); - } else { - YY_BUFFER_STATE buf = ex0_lexer__scan_string(string, scanner); - ex0_lexer__switch_to_buffer (buf, scanner); - } - - ex_ast_t* past = ex0_parse_inner(scanner, pvparser, &pnode, trace_parse); - - if (buf != NULL) - ex0_lexer__delete_buffer(buf, scanner); - - ex0_lexer_lex_destroy(scanner); - ex0_lemon_parser_free(pvparser, free); - - return past; -} - -// ---------------------------------------------------------------- -void yytestcase(int ignored) { -} - -// ---------------------------------------------------------------- -int main(int argc, char** argv) { - int trace_parse = FALSE; - int argi = 1; - if (argc >= 2 && streq(argv[1], "-t")) { - argi++; - trace_parse = TRUE; - } - if ((argc - argi) != 1) { - fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); - exit(1); - } - - ex_ast_t* past = ex0_parse(argv[argi], trace_parse); - if (past == NULL) { - printf("syntax error\n"); - } else { - ex_ast_print(past); - } - - return 0; -} diff --git a/c/parsing/ex0_wrapper.h b/c/parsing/ex0_wrapper.h deleted file mode 100644 index ffb2d6388..000000000 --- a/c/parsing/ex0_wrapper.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef EX0_WRAPPER_H -#define EX0_WRAPPER_H -#include "ex_ast.h" - -ex_ast_t* ex0_parse(char* string, int trace_parse); - -#endif // EX0_WRAPPER_H diff --git a/c/parsing/ex1_lexer.l b/c/parsing/ex1_lexer.l deleted file mode 100644 index 039453f7c..000000000 --- a/c/parsing/ex1_lexer.l +++ /dev/null @@ -1,465 +0,0 @@ -%{ -#include "stdio.h" // for fileno() prototype -#include "string.h" // for strdup() prototype -#include "ex1_parse.h" -#include "./ex_ast.h" -// http://flex.sourceforge.net/manual/Extra-Data.html - -%} - -%option reentrant -%option noyywrap -%option extra-type="struct _ex_ast_node_t **" - -%% - -";" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_SEMICOLON; -} -"{" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LBRACE; -} -"}" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RBRACE; -} - -"=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); - return MD_TOKEN_ASSIGN; -} - -"filter" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER); - return MD_TOKEN_FILTER; -} -"unset" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_UNSET); - return MD_TOKEN_UNSET; -} -"emitf" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITF); - return MD_TOKEN_EMITF; -} -"emitp" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITP); - return MD_TOKEN_EMITP; -} -"emit" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT); - return MD_TOKEN_EMIT; -} -"dump" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP); - return MD_TOKEN_DUMP; -} -"edump" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EDUMP); - return MD_TOKEN_EDUMP; -} -"print" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT); - return MD_TOKEN_PRINT; -} -"printn" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINTN); - return MD_TOKEN_PRINTN; -} -"eprint" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINT); - return MD_TOKEN_EPRINT; -} -"eprintn" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINTN); - return MD_TOKEN_EPRINTN; -} -"begin" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_BEGIN; -} -"end" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_END; -} -"all" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ALL); - return MD_TOKEN_ALL; -} - -"do" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DO_WHILE); - return MD_TOKEN_DO; -} -"while" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_WHILE); - return MD_TOKEN_WHILE; -} -"for" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_FOR; -} -"in" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IN); - return MD_TOKEN_IN; -} -"break" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BREAK); - return MD_TOKEN_BREAK; -} -"continue" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTINUE); - return MD_TOKEN_CONTINUE; -} -"if" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_IF; -} -"elif" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_ELIF; -} -"else" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_ELSE; -} - -"?" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_QUESTION_MARK; -} - -":" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_COLON; -} - -"||" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_OR; -} -"||=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_OR_EQUALS; -} -"^^" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_XOR; -} -"^^=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_XOR_EQUALS; -} -"&&" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_AND; -} -"&&=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_AND_EQUALS; -} - -"=~" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MATCHES; -} -"!=~" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOES_NOT_MATCH; -} -"==" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_EQ; -} -"!=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_NE; -} - -">" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_GT; -} -">=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_GE; -} -"<" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LT; -} -"<=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LE; -} - -"|" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_OR; -} -"|=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_OR_EQUALS; -} - -"^" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_XOR; -} -"^=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_XOR_EQUALS; -} - -"&" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_AND; -} -"&=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_AND_EQUALS; -} - -"<<" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_LSH; -} -"<<=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_LSH_EQUALS; -} -">>" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_RSH; -} -">>=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_RSH_EQUALS; -} - -"+" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_PLUS; -} -"+=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_PLUS_EQUALS; -} -"-" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MINUS; -} -"-=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MINUS_EQUALS; -} -"\." { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOT; -} -"\.=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOT_EQUALS; -} - -"*" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_TIMES; -} -"*=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_TIMES_EQUALS; -} -"/" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DIVIDE; -} -"/=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DIVIDE_EQUALS; -} -"//" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_DIVIDE; -} -"//=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_DIVIDE_EQUALS; -} -"%" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MOD; -} -"%=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MOD_EQUALS; -} - -"!" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_NOT; -} - -"~" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_NOT; -} - -"**" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_POW; -} -"**=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_POW_EQUALS; -} - -\$\* { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC); - return MD_TOKEN_FULL_SREC; -} -\$ { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_DOLLAR_SIGN; -} - -\$[a-zA-Z_0-9]+ { - // Note: the parser depends on the dollar sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); - return MD_TOKEN_FIELD_NAME; -} -\$\{([^\}]|\\.)*\} { - // Note: the parser depends on the dollar sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); - return MD_TOKEN_BRACED_FIELD_NAME; -} - -@[a-zA-Z_0-9]+ { - // Note: the parser depends on the at-sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); - return MD_TOKEN_UNBRACED_OOSVAR_NAME; -} -@\{([^\}]|\\.)*\} { - // Note: the parser depends on the percent-sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); - return MD_TOKEN_BRACED_OOSVAR_NAME; -} -@ { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_AT_SIGN; -} -\@\* { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_OOSVAR); - return MD_TOKEN_FULL_OOSVAR; -} - -"\[" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LEFT_BRACKET; -} -"\]" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RIGHT_BRACKET; -} - -[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { - // Leading minus sign is handled via the unary-minus operator, not here. - // 123 - // 123. 123.4 - // .234 - // 1e2 - // 1e-2 - // 1.2e3 1.e3 - // 1.2e-3 1.e-3 - // .2e3 - // .2e-3 1.e-3 - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} -0x[0-9a-fA-F]+ { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} - -\"([^\\\"]|\\.)*\" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_STRING; -} - -\"([^\\\"]|\\.)*\"\i { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI); - return MD_TOKEN_REGEXI; -} - -true { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); - return MD_TOKEN_TRUE; -} -false { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); - return MD_TOKEN_FALSE; -} - -"NF" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"NR" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FNR" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FILENAME" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FILENUM" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"M_PI" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"M_E" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"ENV" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ENV); - return MD_TOKEN_ENV; -} - -[a-zA-Z_][a-zA-Z_0-9]* { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NON_SIGIL_NAME); - return MD_TOKEN_NON_SIGIL_NAME; -} - -"(" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LPAREN; -} -")" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RPAREN; -} - -"," { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_COMMA; -} - -[ \t\r\n] { } - -. { - return -1; -} -%% diff --git a/c/parsing/ex1_parse.y b/c/parsing/ex1_parse.y deleted file mode 100644 index 8b55e247f..000000000 --- a/c/parsing/ex1_parse.y +++ /dev/null @@ -1,1299 +0,0 @@ -// vim: set filetype=none: -// (Lemon files have .y extensions like Yacc files but are not Yacc.) - -%include { -#include -#include -#include -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -#define DO_WRITE_APPEND // transitional pending lemon-memory issue - -// ================================================================ -// AST: -// * parens, commas, semis, line endings, whitespace are all stripped away -// * variable names and literal values remain as leaf nodes of the AST -// * = + - * / ** {function names} remain as non-leaf nodes of the AST -// CST: See ex1_cst.c -// -// Note: This parser accepts many things that are invalid, e.g. -// * begin{end{}} -- begin/end not at top level -// * begin{$x=1} -- references to stream records at begin/end -// * break/continue outside of for/while/do-while -// * $x=x -- boundvars outside of for-loop variable bindings -// All of the above are enforced by the CST builder, which takes this parser's output AST as input. -// This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more -// informative error messages in C than in Lemon ('syntax error'). -// -// The parser hooks all build up an abstract syntax tree specifically for the CST builder. -// For clearer visuals on what the ASTs look like: -// * See ex1_cst.c -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -} - -%token_type {ex_ast_node_t*} -%default_type {ex_ast_node_t*} -%extra_argument {ex_ast_t* past} - -//void token_destructor(ex_ast_node_t t) { -// printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); -//} -//%token_destructor {token_destructor($$);} - -%parse_accept { -} - -// The caller is expected to provide more context. -%syntax_error { - fprintf(stderr, "mlr DSL: syntax error.\n"); -} - -// ================================================================ -md_body ::= md_statement_list(B). { - past->proot = B; -} - -// ---------------------------------------------------------------- -// Given "$a=1;$b=2;$c=3": since this is a bottom-up parser, we get first the "$a=1", then -// "$a=1;$b=2", then "$a=1;$b=2;$c=3", then finally realize that's the top level, or it's embedded -// within a cond-block, or for-loop body, etc. - -// * On the "$a=1" we make a sub-AST called "list" with child $a=1. -// * On the "$b=2" we append the next argument to get "list" having children $a=1 and $b=2. -// * On the "$c=3" we append the next argument to get "list" having children $a=1, $b=2, and $c=3. -// -// We handle statements of the form ' ; ; ' by parsing the empty spaces around the semicolons as NOP nodes. -// But, the NOP nodes are immediately stripped here and are not included in the AST we return. - -md_statement_list(A) ::= md_statement_not_braced_end(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } else { - A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); - } -} - -md_statement_list(A) ::= md_statement_braced_end(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } else { - A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); - } -} - -// This could also be done with the list on the left and statement on the right. However, -// curly-brace-terminated statements *end* with a semicolon; they don't start with one. So this seems -// to be the right way to differentiate. -md_statement_list(A) ::= md_statement_not_braced_end(B) MD_TOKEN_SEMICOLON md_statement_list(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - A = C; - } else { - A = ex_ast_node_prepend_arg(C, B); - } -} - -md_statement_list(A) ::= md_statement_braced_end(B) MD_SEMICOLON md_statement_list(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - A = C; - } else { - A = ex_ast_node_prepend_arg(C, B); - } -} - -// This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons: -md_statement_not_braced_end(A) ::= . { - A = ex_ast_node_alloc_zary("nop", MD_AST_NODE_TYPE_NOP); -} - -// Begin/end (non-nestable) -md_statement_braced_end(A) ::= md_begin_block(B) .{ A = B; } -md_statement_braced_end(A) ::= md_end_block(B). { A = B; } - -// Nested control structures: -md_statement_braced_end(A) ::= md_cond_block(B). -md_statement_braced_end(A) ::= md_while_block(B). -md_statement_braced_end(A) ::= md_for_loop_full_srec(B). -md_statement_braced_end(A) ::= md_for_loop_full_oosvar(B). -md_statement_braced_end(A) ::= md_for_loop_oosvar(B). -md_statement_braced_end(A) ::= md_if_chain(B). - -// Not valid in begin/end since they refer to srecs: -md_statement_not_braced_end ::= md_srec_assignment. -md_statement_not_braced_end ::= md_srec_indirect_assignment. -md_statement_not_braced_end ::= md_oosvar_from_full_srec_assignment. -md_statement_not_braced_end ::= md_full_srec_from_oosvar_assignment. - -// Valid in begin/end since they don't refer to srecs (although the RHSs might): -md_statement_not_braced_end ::= md_do_while_block. -md_statement_not_braced_end ::= md_bare_boolean. -md_statement_not_braced_end ::= md_oosvar_assignment. -md_statement_not_braced_end ::= md_filter. -md_statement_not_braced_end ::= md_unset. - -md_statement_not_braced_end ::= md_emitf. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_emitf_write. -md_statement_not_braced_end ::= md_emitf_append. -%endif -md_statement_not_braced_end ::= md_emitp. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_emitp_write. -md_statement_not_braced_end ::= md_emitp_append. -%endif -md_statement_not_braced_end ::= md_emit. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_emit_write. -md_statement_not_braced_end ::= md_emit_append. -%endif -md_statement_not_braced_end ::= md_emitp_lashed. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_emitp_lashed_write. -md_statement_not_braced_end ::= md_emitp_lashed_append. -%endif -md_statement_not_braced_end ::= md_emit_lashed. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_emit_lashed_write. -md_statement_not_braced_end ::= md_emit_lashed_append. -%endif - -md_statement_not_braced_end ::= md_dump. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_dump_write. -md_statement_not_braced_end ::= md_dump_append. -%endif -md_statement_not_braced_end ::= md_edump. -md_statement_not_braced_end ::= md_print. -md_statement_not_braced_end ::= md_eprint. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_print_write. -md_statement_not_braced_end ::= md_print_append. -%endif -md_statement_not_braced_end ::= md_printn. -md_statement_not_braced_end ::= md_eprintn. -%ifndef DO_WRITE_APPEND -md_statement_not_braced_end ::= md_printn_write. -md_statement_not_braced_end ::= md_printn_append. -%endif - -// Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST -// conversion, where we can produce much more informative error messages: -md_statement_not_braced_end(A) ::= MD_TOKEN_BREAK(O). { - A = ex_ast_node_alloc(O->text, MD_AST_NODE_TYPE_BREAK); -} -md_statement_not_braced_end(A) ::= MD_TOKEN_CONTINUE(O). { - A = ex_ast_node_alloc(O->text, MD_AST_NODE_TYPE_CONTINUE); -} - -// ================================================================ -md_begin_block(A) ::= MD_TOKEN_BEGIN(O) MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE. { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_BEGIN, B); -} -md_end_block(A) ::= MD_TOKEN_END(O) MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE. { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_END, B); -} - -// ---------------------------------------------------------------- -md_cond_block(A) ::= md_rhs(B) MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. { - //A = ex_ast_node_prepend_arg(C, B); - A = ex_ast_node_alloc_binary("cond", MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, B, C); -} - -// ---------------------------------------------------------------- -md_while_block(A) ::= - MD_TOKEN_WHILE(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_WHILE, B, C); -} - -// ---------------------------------------------------------------- -md_do_while_block(A) ::= - MD_TOKEN_DO(O) - MD_TOKEN_LBRACE md_statement_list(B) MD_TOKEN_RBRACE - MD_TOKEN_WHILE - MD_TOKEN_LPAREN md_rhs(C) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DO_WHILE, B, C); -} - -// ---------------------------------------------------------------- -// for(k, v in $*) { ... } -md_for_loop_full_srec(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_SREC - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_list(S) - MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_binary( - F->text, - MD_AST_NODE_TYPE_FOR_SREC, - ex_ast_node_alloc_binary( - "variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K, - V - ), - S - ); -} - -// for(k, v in @*) { ... } -md_for_loop_full_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_list(S) - MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - ex_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - ex_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - ex_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), - S - ); -} - -// for((k1, k2), v in @*) { ... } -// for((k1, k2, k3), v in @*) { ... } -md_for_loop_full_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_oosvar_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_list(S) - MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - ex_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - ex_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), - S - ); -} - -// for(k, v in @o[1][2]) { ... } -md_for_loop_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_oosvar_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_list(S) - MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - ex_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - ex_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - O, - S - ); -} - -// for((k1, k2), v in @o[1][2]) { ... } -// for((k1, k2, k3), v in @o[1][2]) { ... } -md_for_loop_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_oosvar_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_oosvar_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_list(S) - MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - ex_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - O, - S - ); -} - -md_for_loop_index(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { - A = ex_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NON_SIGIL_NAME); -} -md_for_oosvar_keylist(A) ::= MD_TOKEN_NON_SIGIL_NAME(K). { - A = ex_ast_node_alloc_unary("key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K); -} -md_for_oosvar_keylist(A) ::= md_for_oosvar_keylist(L) MD_TOKEN_COMMA MD_TOKEN_NON_SIGIL_NAME(K). { - A = ex_ast_node_append_arg(L, K); -} - -// ---------------------------------------------------------------- -// Cases: -// if elif* -// if elif* else - -md_if_chain(A) ::= md_if_elif_star(B) . { - A = B; -} -md_if_chain(A) ::= md_if_elif_star(B) md_else_block(C). { - A = ex_ast_node_append_arg(B, C); -} -md_if_elif_star(A) ::= md_if_block(B). { - A = ex_ast_node_alloc_unary("if_head", MD_AST_NODE_TYPE_IF_HEAD, B); -} -md_if_elif_star(A) ::= md_if_elif_star(B) md_elif_block(C). { - A = ex_ast_node_append_arg(B, C); -} - -md_if_block(A) ::= - MD_TOKEN_IF(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); -} - -md_elif_block(A) ::= - MD_TOKEN_ELIF(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); -} - -md_else_block(A) ::= - MD_TOKEN_ELSE(O) - MD_TOKEN_LBRACE md_statement_list(C) MD_TOKEN_RBRACE. -{ - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_IF_ITEM, C); -} - -// ---------------------------------------------------------------- -md_bare_boolean(A) ::= md_rhs(B). { - A = B; -} - -// ---------------------------------------------------------------- -md_filter(A) ::= MD_TOKEN_FILTER(O) md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B); -} - -// ---------------------------------------------------------------- -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); -} -md_srec_indirect_assignment(A) ::= - MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET - MD_TOKEN_ASSIGN(O) md_rhs(C). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, B, C); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); -} - -md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); -} - -md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_oosvar_keylist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C); -} - -// ---------------------------------------------------------------- -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - ex_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} - - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = ex_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - ex_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, ex_ast_tree_copy(B) , C)); -} - -// ---------------------------------------------------------------- -md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_ALL(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); -} -md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_FULL_OOSVAR(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); -} -md_unset(A) ::= MD_TOKEN_UNSET(O) md_unset_args(B). { - A = ex_ast_node_set_function_name(B, O->text); -} -// Need to invalidate "emit @a," -- use some non-empty-args expr. -md_unset_args(A) ::= . { - A = ex_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_UNSET); -} - -md_unset_args(A) ::= md_field_name(B). { - A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_indirect_field_name(B). { - A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= MD_TOKEN_FULL_SREC(B). { - A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} - -md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_field_name(C). { - A = ex_ast_node_append_arg(B, C); -} -md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = ex_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -// Given "emitf @a,@b,@c": since this is a bottom-up parser, we get first the "@a", -// then "@a,@b", then "@a,@b,@c", then finally "emit @a,@b,@c". So: -// * On the "@a" we make a sub-AST called "temp @a" (although we could call it "emit"). -// * On the "@b" we append the next argument to get "temp @a,@b". -// * On the "@c" we append the next argument to get "temp @a,@b,@c". -// * On the "emit" we change the name to get "emit @a,@b,@c". - -md_emitf(A) ::= MD_TOKEN_EMITF(O) md_emitf_args(B). { - A = ex_ast_node_set_function_name(B, O->text); -} -// Need to invalidate "emit @a," -- use some non-empty-args expr. -md_emitf_args(A) ::= . { - A = ex_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_EMITF); -} -md_emitf_args(A) ::= md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); -} -md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = ex_ast_node_append_arg(B, C); -} - -%ifndef DO_WRITE_APPEND -md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { - B = ex_ast_node_set_function_name(B, O->text); - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_WRITE, B, F); -} -md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { - B = ex_ast_node_set_function_name(B, O->text); - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_APPEND, B, F); -} -%endif - -// ---------------------------------------------------------------- -md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); -} -md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); -} -md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_FULL_OOSVAR(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); -} -md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); -} -md_emitp(A) ::= MD_TOKEN_EMITP(O) md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B); -} -md_emitp(A) ::= MD_TOKEN_EMITP(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); -} - -%ifndef DO_WRITE_APPEND -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -} -%endif - -%ifndef DO_WRITE_APPEND -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); -} -%endif - -md_emitp_namelist(A) ::= md_rhs(B). { - A = ex_ast_node_alloc_unary("emitp_namelist", MD_AST_NODE_TYPE_EMITP, B); -} -md_emitp_namelist(A) ::= md_emitp_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_ALL(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); -} -md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); -} - -md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_FULL_OOSVAR(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); -} -md_emit(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); -} - -md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B); -} -md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); -} - -%ifndef DO_WRITE_APPEND -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - // xxx - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -} -%endif - -%ifndef DO_WRITE_APPEND -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_IF md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - // xxx - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_POW md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - // xxx - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B). -{ - // xxx - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA - md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); -} -%endif - -md_emit_namelist(A) ::= md_rhs(B). { - A = ex_ast_node_alloc_unary("emit_namelist", MD_AST_NODE_TYPE_EMIT, B); -} -md_emit_namelist(A) ::= md_emit_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B); -} -md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C); -} - -%ifndef DO_WRITE_APPEND -md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, F); -} -md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, C, F); -} -%endif - -%ifndef DO_WRITE_APPEND -md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, F); -} -md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, C, F); -} -%endif - -md_emitp_lashed_keylists(A) ::= md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMITP_LASHED, B); -} -md_emitp_lashed_keylists(A) ::= md_emitp_lashed_keylists(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = ex_ast_node_append_arg(B, C); -} - -md_emitp_lashed_namelist(A) ::= md_rhs(B). { - A = ex_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMITP_LASHED, B); -} -md_emitp_lashed_namelist(A) ::= md_emitp_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B); -} -md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C); -} - -%ifndef DO_WRITE_APPEND -md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, F); -} -md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, C, F); -} -%endif - -%ifndef DO_WRITE_APPEND -md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, F); -} -md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = ex_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, C, F); -} -%endif - -md_emit_lashed_keylists(A) ::= md_oosvar_keylist(B). { - A = ex_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMIT_LASHED, B); -} -md_emit_lashed_keylists(A) ::= md_emit_lashed_keylists(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = ex_ast_node_append_arg(B, C); -} - -md_emit_lashed_namelist(A) ::= md_rhs(B). { - A = ex_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMIT_LASHED, B); -} -md_emit_lashed_namelist(A) ::= md_emit_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_dump(A) ::= MD_TOKEN_DUMP(O). { - A = ex_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_DUMP); -} -md_edump(A) ::= MD_TOKEN_EDUMP(O). { - A = ex_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_EDUMP); -} -%ifndef DO_WRITE_APPEND -md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_WRITE, B); -} -md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_APPEND, B); -} -%endif - -md_print(A) ::= MD_TOKEN_PRINT(O) md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINT, B); -} -md_eprint(A) ::= MD_TOKEN_EPRINT(O) md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINT, B); -} -%ifndef DO_WRITE_APPEND -md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_WRITE, C, F); -} -md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_APPEND, C, F); -} -%endif - -md_printn(A) ::= MD_TOKEN_PRINTN(O) md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINTN, B); -} -md_eprintn(A) ::= MD_TOKEN_EPRINTN(O) md_rhs(B). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINTN, B); -} -%ifndef DO_WRITE_APPEND -md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_WRITE, C, F); -} -md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_APPEND, C, F); -} -%endif - -// ================================================================ -// Begin RHS precedence chain - -md_rhs(A) ::= md_ternary(B). { - A = B; -} - -md_ternary(A) ::= md_logical_or_term(B) MD_TOKEN_QUESTION_MARK md_ternary(C) MD_TOKEN_COLON md_ternary(D). { - A = ex_ast_node_alloc_ternary("? :", MD_AST_NODE_TYPE_OPERATOR, B, C, D); -} - -md_ternary(A) ::= md_logical_or_term(B). { - A = B; -} - -// ================================================================ -md_logical_or_term(A) ::= md_logical_xor_term(B). { - A = B; -} -md_logical_or_term(A) ::= md_logical_or_term(B) MD_TOKEN_LOGICAL_OR(O) md_logical_xor_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_logical_xor_term(A) ::= md_logical_and_term(B). { - A = B; -} -md_logical_xor_term(A) ::= md_logical_xor_term(B) MD_TOKEN_LOGICAL_XOR(O) md_logical_and_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_logical_and_term(A) ::= md_eqne_term(B). { - A = B; -} -md_logical_and_term(A) ::= md_logical_and_term(B) MD_TOKEN_LOGICAL_AND(O) md_eqne_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_eqne_term(A) ::= md_cmp_term(B). { - A = B; -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_MATCHES(O) md_cmp_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_DOES_NOT_MATCH(O) md_cmp_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_EQ(O) md_cmp_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_NE(O) md_cmp_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_cmp_term(A) ::= md_bitwise_or_term(B). { - A = B; -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GT(O) md_bitwise_or_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GE(O) md_bitwise_or_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LT(O) md_bitwise_or_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LE(O) md_bitwise_or_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_or_term(A) ::= md_bitwise_xor_term(B). { - A = B; -} -md_bitwise_or_term(A) ::= md_bitwise_or_term(B) MD_TOKEN_BITWISE_OR(O) md_bitwise_xor_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_xor_term(A) ::= md_bitwise_and_term(B). { - A = B; -} -md_bitwise_xor_term(A) ::= md_bitwise_xor_term(B) MD_TOKEN_BITWISE_XOR(O) md_bitwise_and_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_and_term(A) ::= md_bitwise_shift_term(B). { - A = B; -} -md_bitwise_and_term(A) ::= md_bitwise_and_term(B) MD_TOKEN_BITWISE_AND(O) md_bitwise_shift_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_shift_term(A) ::= md_addsubdot_term(B). { - A = B; -} -md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_LSH(O) md_addsubdot_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_RSH(O) md_addsubdot_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_addsubdot_term(A) ::= md_muldiv_term(B). { - A = B; -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_PLUS(O) md_muldiv_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_MINUS(O) md_muldiv_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_DOT(O) md_muldiv_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_muldiv_term(A) ::= md_unary_bitwise_op_term(B). { - A = B; -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_TIMES(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_DIVIDE(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_DIVIDE(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_MOD(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_unary_bitwise_op_term(A) ::= md_pow_term(B). { - A = B; -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_PLUS(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_MINUS(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_LOGICAL_NOT(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_BITWISE_NOT(O) md_unary_bitwise_op_term(C). { - A = ex_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} - -// ---------------------------------------------------------------- -md_pow_term(A) ::= md_atom_or_fcn(B). { - A = B; -} -md_pow_term(A) ::= md_atom_or_fcn(B) MD_TOKEN_POW(O) md_pow_term(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - - -// ---------------------------------------------------------------- -// In the grammar provided to the user, field names are of the form "$x". But -// within Miller internally, field names are of the form "x". We coded the -// lexer to give us field names with leading "$" so we can confidently strip it -// off here. - -md_atom_or_fcn(A) ::= md_field_name(B). { - A = B; -} -md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { - char* dollar_name = B->text; - char* no_dollar_name = &dollar_name[1]; - A = ex_ast_node_alloc(no_dollar_name, B->type); -} -md_field_name(A) ::= MD_TOKEN_BRACED_FIELD_NAME(B). { - // Replace "${field.name}" with just "field.name" - char* dollar_name = B->text; - char* no_dollar_name = &dollar_name[2]; - int len = strlen(no_dollar_name); - if (len > 0) - no_dollar_name[len-1] = 0; - A = ex_ast_node_alloc(no_dollar_name, B->type); -} - -md_atom_or_fcn(A) ::= md_indirect_field_name(B). { - A = B; -} -md_indirect_field_name(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { - A = ex_ast_node_alloc_unary("indirect_field_name", MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, B); -} - -// ---------------------------------------------------------------- -md_atom_or_fcn(A) ::= md_oosvar_keylist(B). { - A = B; -} -md_oosvar_keylist(A) ::= md_oosvar_basename(B). { - A = B; -} -md_oosvar_keylist(A) ::= md_oosvar_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = ex_ast_node_append_arg(B, C); -} - -// E.g. @name -md_oosvar_basename(A) ::= MD_TOKEN_UNBRACED_OOSVAR_NAME(B). { - char* at_name = B->text; - char* no_at_name = &at_name[1]; - A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - ex_ast_node_alloc(no_at_name, B->type)); -} - -// E.g. @{name} -md_oosvar_basename(A) ::= MD_TOKEN_BRACED_OOSVAR_NAME(B). { - // Replace "@%{field.name}" with just "field.name" - char* at_name = B->text; - char* no_at_name = &at_name[2]; - int len = strlen(no_at_name); - if (len > 0) - no_at_name[len-1] = 0; - A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - ex_ast_node_alloc(no_at_name, B->type)); -} - -// E.g. @["name"] -md_oosvar_basename(A) ::= MD_TOKEN_AT_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { - A = ex_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, B); -} - -// ---------------------------------------------------------------- -md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { - A = B; -} -md_atom_or_fcn(A) ::= MD_TOKEN_TRUE(B). { - A = B; -} -md_atom_or_fcn(A) ::= MD_TOKEN_FALSE(B). { - A = B; -} - -md_atom_or_fcn(A) ::= md_string(B). { - A = B; -} -md_atom_or_fcn(A) ::= md_regexi(B). { - A = B; -} - -md_atom_or_fcn(A) ::= md_local_variable(B). { - A = B; -} -md_local_variable(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { - A = ex_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); -} - -md_string(A) ::= MD_TOKEN_STRING(B). { - char* input = B->text; - char* stripped = &input[1]; - int len = strlen(input); - stripped[len-2] = 0; - A = ex_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); -} -md_regexi(A) ::= MD_TOKEN_REGEXI(B). { - char* input = B->text; - char* stripped = &input[1]; - int len = strlen(input); - stripped[len-3] = 0; - A = ex_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); -} - -md_atom_or_fcn(A) ::= MD_TOKEN_CONTEXT_VARIABLE(B). { - A = B; -} -md_atom_or_fcn(A) ::= MD_TOKEN_ENV(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = ex_ast_node_alloc_binary("env", MD_AST_NODE_TYPE_ENV, B, C); -} - -md_atom_or_fcn(A) ::= MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN. { - A = B; -} - -// Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", -// then "a,b", then "a,b,c", then finally "f(a,b,c)". So: -// * On the "a" we make a function sub-AST called "anon(a)". -// * On the "b" we append the next argument to get "anon(a,b)". -// * On the "c" we append the next argument to get "anon(a,b,c)". -// * On the "f" we change the function name to get "f(a,b,c)". - -md_atom_or_fcn(A) ::= MD_TOKEN_NON_SIGIL_NAME(O) MD_TOKEN_LPAREN md_fcn_args(B) MD_TOKEN_RPAREN. { - A = ex_ast_node_set_function_name(B, O->text); -} -// Need to invalidate "f(10,)" -- use some non-empty-args expr. -md_fcn_args(A) ::= . { - A = ex_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); -} -md_fcn_args(A) ::= md_rhs(B). { - A = ex_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); -} -md_fcn_args(A) ::= md_fcn_args(B) MD_TOKEN_COMMA md_rhs(C). { - A = ex_ast_node_append_arg(B, C); -} diff --git a/c/parsing/ex1_wrapper.c b/c/parsing/ex1_wrapper.c deleted file mode 100644 index 4ec197f25..000000000 --- a/c/parsing/ex1_wrapper.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include "ex1_wrapper.h" -#include "ex1_lexer.h" -#include "ex1_parse.h" -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -// These prototypes are copied out manually from ex1_parse.c. With some -// more work I could have Lemon autogenerate these prototypes into -// ex1_parse.h. - -void *ex1_lemon_parser_alloc(void *(*mallocProc)(size_t)); - -int ex1_lemon_parser_parse_token( - void *pvparser, /* The parser */ - int yymajor, /* The major token code number */ - ex_ast_node_t* yyminor, /* The value for the token */ - ex_ast_t* past); /* Optional %extra_argument parameter */ -void ex1_lemon_parser_free( - void *pvparser, /* The parser to be deleted */ - void (*freeProc)(void*)); /* Function used to reclaim memory */ - -void ex1_ParseTrace(FILE *TraceFILE, char *zTracePrompt); - -// ---------------------------------------------------------------- -// http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html -// http://flex.sourceforge.net/manual/Extra-Data.html - -// Returns linked list of ex_ast_node_t*. -static ex_ast_t* ex1_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, - int trace_parse) -{ - int lex_code; - int parse_code; - ex_ast_t* past = ex_ast_alloc(); - if (trace_parse) - ex1_ParseTrace(stderr, "[DSLTRACE] "); - do { - lex_code = ex1_lexer_lex(scanner); - ex_ast_node_t* plexed_node = *ppnode; - parse_code = ex1_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); - if (parse_code == 0) - return NULL; - } while (lex_code > 0); - if (-1 == lex_code) { - fprintf(stderr, "The scanner encountered an error.\n"); - return NULL; - } - parse_code = ex1_lemon_parser_parse_token(pvparser, 0, NULL, past); - - if (parse_code == 0) - return NULL; - return past; -} - -// ---------------------------------------------------------------- -// Returns linked list of ex_ast_node_t*. -ex_ast_t* ex1_parse(char* string, int trace_parse) { - ex_ast_node_t* pnode = NULL; - yyscan_t scanner; - ex1_lexer_lex_init_extra(&pnode, &scanner); - void* pvparser = ex1_lemon_parser_alloc(malloc); - - YY_BUFFER_STATE buf = NULL; - if (string == NULL) { - ex1_lexer_set_in(stdin, scanner); - } else { - YY_BUFFER_STATE buf = ex1_lexer__scan_string(string, scanner); - ex1_lexer__switch_to_buffer (buf, scanner); - } - - ex_ast_t* past = ex1_parse_inner(scanner, pvparser, &pnode, trace_parse); - - if (buf != NULL) - ex1_lexer__delete_buffer(buf, scanner); - - ex1_lexer_lex_destroy(scanner); - ex1_lemon_parser_free(pvparser, free); - - return past; -} - -// ---------------------------------------------------------------- -void yytestcase(int ignored) { -} - -// ---------------------------------------------------------------- -int main(int argc, char** argv) { - int trace_parse = FALSE; - int argi = 1; - if (argc >= 2 && streq(argv[1], "-t")) { - argi++; - trace_parse = TRUE; - } - if ((argc - argi) != 1) { - fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); - exit(1); - } - - ex_ast_t* past = ex1_parse(argv[argi], trace_parse); - if (past == NULL) { - printf("syntax error\n"); - } else { - ex_ast_print(past); - } - - return 0; -} diff --git a/c/parsing/ex1_wrapper.h b/c/parsing/ex1_wrapper.h deleted file mode 100644 index 1cb1ad87d..000000000 --- a/c/parsing/ex1_wrapper.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef EX1_WRAPPER_H -#define EX1_WRAPPER_H -#include "ex_ast.h" - -ex_ast_t* ex1_parse(char* string, int trace_parse); - -#endif // EX1_WRAPPER_H diff --git a/c/parsing/ex2_lexer.l b/c/parsing/ex2_lexer.l deleted file mode 100644 index 0c9335036..000000000 --- a/c/parsing/ex2_lexer.l +++ /dev/null @@ -1,52 +0,0 @@ -%{ -#include "stdio.h" // for fileno() prototype -#include "string.h" // for strdup() prototype -#include "ex2_parse.h" -#include "./ex_ast.h" -// http://flex.sourceforge.net/manual/Extra-Data.html - -%} - -%option reentrant -%option noyywrap -%option extra-type="struct _ex_ast_node_t **" - -%% - -"=" { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); - return MD_TOKEN_ASSIGN; -} - -\$[a-zA-Z_0-9]+ { - // Note: the parser depends on the dollar sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); - return MD_TOKEN_FIELD_NAME; -} - -[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { - // Leading minus sign is handled via the unary-minus operator, not here. - // 123 - // 123. 123.4 - // .234 - // 1e2 - // 1e-2 - // 1.2e3 1.e3 - // 1.2e-3 1.e-3 - // .2e3 - // .2e-3 1.e-3 - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} -0x[0-9a-fA-F]+ { - *yyextra = ex_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} - -[ \t\r\n] { } - -. { - return -1; -} -%% diff --git a/c/parsing/ex2_parse.y b/c/parsing/ex2_parse.y deleted file mode 100644 index df32e1bbd..000000000 --- a/c/parsing/ex2_parse.y +++ /dev/null @@ -1,109 +0,0 @@ -// vim: set filetype=none: -// (Lemon files have .y extensions like Yacc files but are not Yacc.) - -%include { -#include -#include -#include -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -#define DO_WRITE_APPEND // transitional pending lemon-memory issue - -// ================================================================ -// AST: -// * parens, commas, semis, line endings, whitespace are all stripped away -// * variable names and literal values remain as leaf nodes of the AST -// * = + - * / ** {function names} remain as non-leaf nodes of the AST -// CST: See ex2_cst.c -// -// Note: This parser accepts many things that are invalid, e.g. -// * begin{end{}} -- begin/end not at top level -// * begin{$x=1} -- references to stream records at begin/end -// * break/continue outside of for/while/do-while -// * $x=x -- boundvars outside of for-loop variable bindings -// All of the above are enforced by the CST builder, which takes this parser's output AST as input. -// This is done (a) to keep this grammar from being overly complex, and (b) so we can get much more -// informative error messages in C than in Lemon ('syntax error'). -// -// The parser hooks all build up an abstract syntax tree specifically for the CST builder. -// For clearer visuals on what the ASTs look like: -// * See ex2_cst.c -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -} - -%token_type {ex_ast_node_t*} -%default_type {ex_ast_node_t*} -%extra_argument {ex_ast_t* past} - -//void token_destructor(ex_ast_node_t t) { -// printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); -//} -//%token_destructor {token_destructor($$);} - -%parse_accept { -} - -// The caller is expected to provide more context. -%syntax_error { - fprintf(stderr, "mlr DSL: syntax error.\n"); -} - -// ================================================================ -md_body ::= md_statement_list(B). { - past->proot = B; -} - -// ---------------------------------------------------------------- -md_statement_list(A) ::= md_statement(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - A = ex_ast_node_alloc_zary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } else { - A = ex_ast_node_alloc_unary("list", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); - } -} - -//md_statement_list(A) ::= md_statement(B) MD_SEMICOLON md_statement_list(C). { -// if (B->type == MD_AST_NODE_TYPE_NOP) { -// A = C; -// } else { -// A = ex_ast_node_prepend_arg(C, B); -// } -//} - -md_statement_list(A) ::= md_statement_list(B) MD_SEMICOLON md_statement(C). { - if (C->type == MD_AST_NODE_TYPE_NOP) { - A = B; - } else { - A = ex_ast_node_append_arg(B, C); - } -} - -md_statement(A) ::= md_srec_assignment(B). { - A = B; -} - -// ---------------------------------------------------------------- -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = ex_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); -} - -md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { - //char* dollar_name = B->text; - //char* no_dollar_name = &dollar_name[1]; - //A = ex_ast_node_alloc(no_dollar_name, B->type); - A = ex_ast_node_alloc(B->text, B->type); -} - -md_rhs(A) ::= md_atom_or_fcn(B). { - A = B; -} - -// ---------------------------------------------------------------- -md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { - A = B; -} diff --git a/c/parsing/ex2_wrapper.c b/c/parsing/ex2_wrapper.c deleted file mode 100644 index 1ce836a0a..000000000 --- a/c/parsing/ex2_wrapper.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include "ex2_wrapper.h" -#include "ex2_lexer.h" -#include "ex2_parse.h" -#include "../lib/mlrutil.h" -#include "./ex_ast.h" -#include "../containers/sllv.h" - -// These prototypes are copied out manually from ex2_parse.c. With some -// more work I could have Lemon autogenerate these prototypes into -// ex2_parse.h. - -void *ex2_lemon_parser_alloc(void *(*mallocProc)(size_t)); - -int ex2_lemon_parser_parse_token( - void *pvparser, /* The parser */ - int yymajor, /* The major token code number */ - ex_ast_node_t* yyminor, /* The value for the token */ - ex_ast_t* past); /* Optional %extra_argument parameter */ -void ex2_lemon_parser_free( - void *pvparser, /* The parser to be deleted */ - void (*freeProc)(void*)); /* Function used to reclaim memory */ - -void ex2_ParseTrace(FILE *TraceFILE, char *zTracePrompt); - -// ---------------------------------------------------------------- -// http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html -// http://flex.sourceforge.net/manual/Extra-Data.html - -// Returns linked list of ex_ast_node_t*. -static ex_ast_t* ex2_parse_inner(yyscan_t scanner, void* pvparser, ex_ast_node_t** ppnode, - int trace_parse) -{ - int lex_code; - int parse_code; - ex_ast_t* past = ex_ast_alloc(); - if (trace_parse) - ex2_ParseTrace(stderr, "[DSLTRACE] "); - do { - lex_code = ex2_lexer_lex(scanner); - ex_ast_node_t* plexed_node = *ppnode; - parse_code = ex2_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); - if (parse_code == 0) - return NULL; - } while (lex_code > 0); - if (-1 == lex_code) { - fprintf(stderr, "The scanner encountered an error.\n"); - return NULL; - } - parse_code = ex2_lemon_parser_parse_token(pvparser, 0, NULL, past); - - if (parse_code == 0) - return NULL; - return past; -} - -// ---------------------------------------------------------------- -// Returns linked list of ex_ast_node_t*. -ex_ast_t* ex2_parse(char* string, int trace_parse) { - ex_ast_node_t* pnode = NULL; - yyscan_t scanner; - ex2_lexer_lex_init_extra(&pnode, &scanner); - void* pvparser = ex2_lemon_parser_alloc(malloc); - - YY_BUFFER_STATE buf = NULL; - if (string == NULL) { - ex2_lexer_set_in(stdin, scanner); - } else { - YY_BUFFER_STATE buf = ex2_lexer__scan_string(string, scanner); - ex2_lexer__switch_to_buffer (buf, scanner); - } - - ex_ast_t* past = ex2_parse_inner(scanner, pvparser, &pnode, trace_parse); - - if (buf != NULL) - ex2_lexer__delete_buffer(buf, scanner); - - ex2_lexer_lex_destroy(scanner); - ex2_lemon_parser_free(pvparser, free); - - return past; -} - -// ---------------------------------------------------------------- -void yytestcase(int ignored) { -} - -// ---------------------------------------------------------------- -int main(int argc, char** argv) { - int trace_parse = FALSE; - int argi = 1; - if (argc >= 2 && streq(argv[1], "-t")) { - argi++; - trace_parse = TRUE; - } - if ((argc - argi) != 1) { - fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); - exit(1); - } - - ex_ast_t* past = ex2_parse(argv[argi], trace_parse); - if (past == NULL) { - printf("syntax error\n"); - } else { - ex_ast_print(past); - } - - return 0; -} diff --git a/c/parsing/ex2_wrapper.h b/c/parsing/ex2_wrapper.h deleted file mode 100644 index 12900f9cd..000000000 --- a/c/parsing/ex2_wrapper.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef EX2_WRAPPER_H -#define EX2_WRAPPER_H -#include "ex_ast.h" - -ex_ast_t* ex2_parse(char* string, int trace_parse); - -#endif // EX2_WRAPPER_H diff --git a/c/parsing/ex_ast.c b/c/parsing/ex_ast.c deleted file mode 100644 index 672ee944c..000000000 --- a/c/parsing/ex_ast.c +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include "../lib/mlrutil.h" -#include "ex_ast.h" - -// ---------------------------------------------------------------- -ex_ast_t* ex_ast_alloc() { - ex_ast_t* past = mlr_malloc_or_die(sizeof(ex_ast_t)); - past->proot = NULL; - return past; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_alloc(char* text, ex_ast_node_type_t type) { - ex_ast_node_t* pnode = (ex_ast_node_t*)mlr_malloc_or_die( - sizeof(ex_ast_node_t)); - pnode->text = mlr_strdup_or_die(text); - pnode->type = type; - pnode->pchildren = NULL; - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_copy(ex_ast_node_t* pother) { - ex_ast_node_t* pnode = ex_ast_node_alloc(pother->text, pother->type); - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_tree_copy(ex_ast_node_t* pold) { - ex_ast_node_t* pnew = ex_ast_node_copy(pold); - if (pold->pchildren != NULL) { - pnew->pchildren = sllv_alloc(); - for (sllve_t* pe = pold->pchildren->phead; pe != NULL; pe = pe->pnext) { - ex_ast_node_t* pchild = pe->pvvalue; - sllv_append(pnew->pchildren, ex_ast_tree_copy(pchild)); - } - } - return pnew; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_alloc_zary(char* text, ex_ast_node_type_t type) -{ - ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_alloc_unary(char* text, ex_ast_node_type_t type, - ex_ast_node_t* pa) -{ - ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_alloc_binary(char* text, ex_ast_node_type_t type, - ex_ast_node_t* pa, ex_ast_node_t* pb) -{ - ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - sllv_append(pnode->pchildren, pb); - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_alloc_ternary(char* text, ex_ast_node_type_t type, - ex_ast_node_t* pa, ex_ast_node_t* pb, ex_ast_node_t* pc) -{ - ex_ast_node_t* pnode = ex_ast_node_alloc(text, type); - pnode->pchildren = sllv_alloc(); - sllv_append(pnode->pchildren, pa); - sllv_append(pnode->pchildren, pb); - sllv_append(pnode->pchildren, pc); - return pnode; -} - -// ---------------------------------------------------------------- -ex_ast_node_t* ex_ast_node_prepend_arg( - ex_ast_node_t* pa, ex_ast_node_t* pb) -{ - if (pa->pchildren == NULL) - pa->pchildren = sllv_alloc(); - sllv_push(pa->pchildren, pb); - return pa; -} - -ex_ast_node_t* ex_ast_node_append_arg( - ex_ast_node_t* pa, ex_ast_node_t* pb) -{ - if (pa->pchildren == NULL) - pa->pchildren = sllv_alloc(); - sllv_append(pa->pchildren, pb); - return pa; -} - -ex_ast_node_t* ex_ast_node_set_function_name( - ex_ast_node_t* pa, char* name) -{ - free(pa->text); - pa->text = mlr_strdup_or_die(name); - return pa; -} - -// ---------------------------------------------------------------- -void ex_ast_print(ex_ast_t* past) { - printf("AST ROOT:\n"); - if (past->proot == NULL) { - printf("(null)\n"); - } else { - ex_ast_node_print(past->proot); - } -} - -// ---------------------------------------------------------------- -static void ex_ast_node_print_aux(ex_ast_node_t* pnode, int level, FILE* o) { - if (pnode == NULL) - return; - for (int i = 0; i < level; i++) - fprintf(o, " "); - fprintf(o, "text=\"%s\", type=%s%s\n", - pnode->text, - ex_ast_node_describe_type(pnode->type), - (pnode->pchildren != NULL) ? ":" : "."); - if (pnode->pchildren != NULL) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - ex_ast_node_print_aux(pe->pvvalue, level + 1, o); - } - } -} - -void ex_ast_node_print(ex_ast_node_t* pnode) { - ex_ast_node_print_aux(pnode, 0, stdout); -} - -void ex_ast_node_fprint(ex_ast_node_t* pnode, FILE* o) { - ex_ast_node_print_aux(pnode, 0, o); -} - -// ---------------------------------------------------------------- -char* ex_ast_node_describe_type(ex_ast_node_type_t type) { - switch(type) { - case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "statement_list"; break; - case MD_AST_NODE_TYPE_BEGIN: return "begin"; break; - case MD_AST_NODE_TYPE_END: return "end"; break; - case MD_AST_NODE_TYPE_STRING_LITERAL: return "string_literal"; break; - case MD_AST_NODE_TYPE_NUMERIC_LITERAL: return "numeric_literal"; break; - case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "boolean_literal"; break; - case MD_AST_NODE_TYPE_REGEXI: return "regexi"; break; - case MD_AST_NODE_TYPE_FIELD_NAME: return "field_name"; break; - case MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME: return "indirect_field_name"; break; - case MD_AST_NODE_TYPE_FULL_SREC: return "full_srec"; break; - case MD_AST_NODE_TYPE_OOSVAR_KEYLIST: return "oosvar_keylist"; break; - case MD_AST_NODE_TYPE_FULL_OOSVAR: return "full_oosvar"; break; - case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "non_sigil_name"; break; - case MD_AST_NODE_TYPE_OPERATOR: return "operator"; break; - case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "srec_assignment"; break; - case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "indirect_srec_assignment"; break; - case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "oosvar_assignment"; break; - case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "oosvar_from_full_srec_assignment"; break; - case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT: return "full_srec_from_oosvar_assignment"; break; - case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "context_variable"; break; - case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "stripped_away"; break; - case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return "conditional_block"; break; - case MD_AST_NODE_TYPE_FILTER: return "filter"; break; - case MD_AST_NODE_TYPE_UNSET: return "unset"; break; - case MD_AST_NODE_TYPE_EMITF: return "emitf"; break; - case MD_AST_NODE_TYPE_EMITF_WRITE: return "emitf_write"; break; - case MD_AST_NODE_TYPE_EMITF_APPEND: return "emitf_append"; break; - case MD_AST_NODE_TYPE_EMITP: return "emitp"; break; - case MD_AST_NODE_TYPE_EMITP_WRITE: return "emitp_write"; break; - case MD_AST_NODE_TYPE_EMITP_APPEND: return "emitp_append"; break; - case MD_AST_NODE_TYPE_EMIT: return "emit"; break; - case MD_AST_NODE_TYPE_EMIT_WRITE: return "emit_write"; break; - case MD_AST_NODE_TYPE_EMIT_APPEND: return "emit_append"; break; - case MD_AST_NODE_TYPE_EMITP_LASHED: return "emitp_lashed"; break; - case MD_AST_NODE_TYPE_EMITP_LASHED_WRITE: return "emitp_lashed_write"; break; - case MD_AST_NODE_TYPE_EMITP_LASHED_APPEND: return "emitp_lashed_append"; break; - case MD_AST_NODE_TYPE_EMIT_LASHED: return "emit_lashed"; break; - case MD_AST_NODE_TYPE_EMIT_LASHED_WRITE: return "emit_lashed_write"; break; - case MD_AST_NODE_TYPE_EMIT_LASHED_APPEND: return "emit_lashed_append"; break; - case MD_AST_NODE_TYPE_DUMP: return "dump"; break; - case MD_AST_NODE_TYPE_DUMP_WRITE: return "dump_write"; break; - case MD_AST_NODE_TYPE_DUMP_APPEND: return "dump_append"; break; - case MD_AST_NODE_TYPE_EDUMP: return "edump"; break; - case MD_AST_NODE_TYPE_PRINT: return "print"; break; - case MD_AST_NODE_TYPE_PRINT_WRITE: return "print_write"; break; - case MD_AST_NODE_TYPE_PRINT_APPEND: return "print_append"; break; - case MD_AST_NODE_TYPE_PRINTN: return "printn"; break; - case MD_AST_NODE_TYPE_PRINTN_WRITE: return "printn_write"; break; - case MD_AST_NODE_TYPE_PRINTN_APPEND: return "printn_append"; break; - case MD_AST_NODE_TYPE_EPRINT: return "eprint"; break; - case MD_AST_NODE_TYPE_EPRINTN: return "eprintn"; break; - case MD_AST_NODE_TYPE_ALL: return "all"; break; - case MD_AST_NODE_TYPE_ENV: return "env"; break; - case MD_AST_NODE_TYPE_WHILE: return "while"; break; - case MD_AST_NODE_TYPE_DO_WHILE: return "do_while"; break; - case MD_AST_NODE_TYPE_FOR_SREC: return "for_srec"; break; - case MD_AST_NODE_TYPE_FOR_OOSVAR: return "for_oosvar"; break; - case MD_AST_NODE_TYPE_FOR_VARIABLES: return "for_variables"; break; - case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE: return "local_variable"; break; - case MD_AST_NODE_TYPE_IN: return "in"; break; - case MD_AST_NODE_TYPE_BREAK: return "break"; break; - case MD_AST_NODE_TYPE_CONTINUE: return "continue"; break; - case MD_AST_NODE_TYPE_IF_HEAD: return "if_head"; break; - case MD_AST_NODE_TYPE_IF_ITEM: return "if_item"; break; - default: return "???"; - } -} - -// ---------------------------------------------------------------- -void ex_ast_free(ex_ast_t* past) { - ex_ast_node_free(past->proot); - free(past); -} - -// ---------------------------------------------------------------- -void ex_ast_node_free(ex_ast_node_t* pnode) { - if (pnode->pchildren) { - for (sllve_t* pe = pnode->pchildren->phead; pe != NULL; pe = pe->pnext) { - ex_ast_node_t* pchild = pe->pvvalue; - ex_ast_node_free(pchild); - } - sllv_free(pnode->pchildren); - } - free(pnode->text); - free(pnode); -} diff --git a/c/parsing/ex_ast.h b/c/parsing/ex_ast.h deleted file mode 100644 index b4d375273..000000000 --- a/c/parsing/ex_ast.h +++ /dev/null @@ -1,123 +0,0 @@ -// ================================================================ -// Miller abstract syntax tree for put and filter. -// ================================================================ - -#ifndef EX_AST_H -#define EX_AST_H -#include "../containers/sllv.h" - -// ---------------------------------------------------------------- -typedef enum _ex_ast_node_type_t { - MD_AST_NODE_TYPE_STATEMENT_BLOCK, - MD_AST_NODE_TYPE_BEGIN, - MD_AST_NODE_TYPE_END, - MD_AST_NODE_TYPE_STRING_LITERAL, - MD_AST_NODE_TYPE_NUMERIC_LITERAL, - MD_AST_NODE_TYPE_BOOLEAN_LITERAL, - MD_AST_NODE_TYPE_REGEXI, - MD_AST_NODE_TYPE_FIELD_NAME, // E.g. $x - MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, // E.g. $[@x] - MD_AST_NODE_TYPE_FULL_SREC, - MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - MD_AST_NODE_TYPE_FULL_OOSVAR, - MD_AST_NODE_TYPE_NON_SIGIL_NAME, - MD_AST_NODE_TYPE_OPERATOR, - MD_AST_NODE_TYPE_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, - MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, - MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, - MD_AST_NODE_TYPE_CONTEXT_VARIABLE, - MD_AST_NODE_TYPE_ENV, - MD_AST_NODE_TYPE_STRIPPED_AWAY, - MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, - MD_AST_NODE_TYPE_FILTER, - MD_AST_NODE_TYPE_UNSET, - MD_AST_NODE_TYPE_EMITF, - MD_AST_NODE_TYPE_EMITF_WRITE, - MD_AST_NODE_TYPE_EMITF_APPEND, - MD_AST_NODE_TYPE_EMITP, - MD_AST_NODE_TYPE_EMITP_WRITE, - MD_AST_NODE_TYPE_EMITP_APPEND, - MD_AST_NODE_TYPE_EMIT, - MD_AST_NODE_TYPE_EMIT_WRITE, - MD_AST_NODE_TYPE_EMIT_APPEND, - MD_AST_NODE_TYPE_EMITP_LASHED, - MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, - MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, - MD_AST_NODE_TYPE_EMIT_LASHED, - MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, - MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, - MD_AST_NODE_TYPE_DUMP, - MD_AST_NODE_TYPE_DUMP_WRITE, - MD_AST_NODE_TYPE_DUMP_APPEND, - MD_AST_NODE_TYPE_EDUMP, - MD_AST_NODE_TYPE_PRINT, - MD_AST_NODE_TYPE_PRINT_WRITE, - MD_AST_NODE_TYPE_PRINT_APPEND, - MD_AST_NODE_TYPE_PRINTN, - MD_AST_NODE_TYPE_PRINTN_WRITE, - MD_AST_NODE_TYPE_PRINTN_APPEND, - MD_AST_NODE_TYPE_EPRINT, - MD_AST_NODE_TYPE_EPRINTN, - MD_AST_NODE_TYPE_ALL, - MD_AST_NODE_TYPE_NOP, // only for parser internals; should not be in the AST returned by the parser - MD_AST_NODE_TYPE_WHILE, - MD_AST_NODE_TYPE_DO_WHILE, - MD_AST_NODE_TYPE_FOR_SREC, - MD_AST_NODE_TYPE_FOR_OOSVAR, - MD_AST_NODE_TYPE_FOR_VARIABLES, - MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE, - MD_AST_NODE_TYPE_IN, - MD_AST_NODE_TYPE_BREAK, - MD_AST_NODE_TYPE_CONTINUE, - MD_AST_NODE_TYPE_IF_HEAD, - MD_AST_NODE_TYPE_IF_ITEM, -} ex_ast_node_type_t; - -typedef struct _ex_ast_node_t { - char* text; - ex_ast_node_type_t type; - sllv_t* pchildren; -} ex_ast_node_t; - -typedef struct _ex_ast_t { - ex_ast_node_t* proot; -} ex_ast_t; - -// ---------------------------------------------------------------- -ex_ast_t* ex_ast_alloc(); - -ex_ast_node_t* ex_ast_node_alloc(char* text, ex_ast_node_type_t type); - -ex_ast_node_t* ex_ast_node_alloc_zary(char* text, ex_ast_node_type_t type); - -ex_ast_node_t* ex_ast_node_alloc_unary(char* text, ex_ast_node_type_t type, ex_ast_node_t* pa); - -ex_ast_node_t* ex_ast_node_alloc_binary(char* text, ex_ast_node_type_t type, - ex_ast_node_t* pa, ex_ast_node_t* pb); - -ex_ast_node_t* ex_ast_node_alloc_ternary(char* text, ex_ast_node_type_t type, - ex_ast_node_t* pa, ex_ast_node_t* pb, ex_ast_node_t* pc); - -ex_ast_node_t* ex_ast_node_copy(ex_ast_node_t* pother); -// These are so the parser can expand '$x += 1' to '$x = $x + 1', etc. -ex_ast_node_t* ex_ast_tree_copy(ex_ast_node_t* pother); - -// See comments in ex_parse.y for this seemingly awkward syntax wherein -// we change the function name after having set it up. This is a consequence of -// bottom-up DSL parsing. -ex_ast_node_t* ex_ast_node_prepend_arg(ex_ast_node_t* pa, ex_ast_node_t* pb); -ex_ast_node_t* ex_ast_node_append_arg(ex_ast_node_t* pa, ex_ast_node_t* pb); -ex_ast_node_t* ex_ast_node_set_function_name(ex_ast_node_t* pa, char* name); - -void ex_ast_print(ex_ast_t* past); -void ex_ast_node_print(ex_ast_node_t* pnode); -void ex_ast_node_fprint(ex_ast_node_t* pnode, FILE* o); -char* ex_ast_node_describe_type(ex_ast_node_type_t type); - -void ex_ast_node_free(ex_ast_node_t* pnode); - -void ex_ast_free(ex_ast_t* past); - -#endif // EX_AST_H diff --git a/c/parsing/lemon_action.c b/c/parsing/lemon_action.c deleted file mode 100644 index 607b3a3a0..000000000 --- a/c/parsing/lemon_action.c +++ /dev/null @@ -1,201 +0,0 @@ -#include -#include -#include - -#include "lemon_action.h" - -#include "lemon_assert.h" -#include "lemon_msort.h" - -/* -** Routines processing parser actions in the LEMON parser generator. -*/ - -/* Allocate a new parser action */ -struct action *Action_new() { - static struct action *freelist = 0; - struct action *new; - - if (freelist==0) { - int i; - int amt = 100; - freelist = (struct action *)malloc (sizeof(struct action)*amt) ; - if (freelist==0) { - fprintf(stderr,"Unable to allocate memory for a new parser action."); - exit(1); - } - for (i=0; inext; - return new; -} - -/* Compare two actions */ -static int actioncmp(struct action *ap1, struct action *ap2) -{ - int rc; - rc = ap1->sp->index - ap2->sp->index; - if (rc==0) rc = (int)ap1->type - (int)ap2->type; - if (rc==0) { - assert(ap1->type==REDUCE || ap1->type==RD_RESOLVED || ap1->type==CONFLICT); - assert(ap2->type==REDUCE || ap2->type==RD_RESOLVED || ap2->type==CONFLICT); - rc = ap1->x.rp->index - ap2->x.rp->index; - } - return rc; -} - -/* Sort parser actions */ -struct action *Action_sort(struct action *ap) { - ap = (struct action *)msort((char *)ap,(char **)&ap->next,actioncmp); - return ap; -} - -void Action_add( - struct action **app, - enum e_action type, - struct symbol *sp, - char *arg) -{ - struct action *new; - new = Action_new(); - new->next = *app; - *app = new; - new->type = type; - new->sp = sp; - if (type==SHIFT) { - new->x.stp = (struct state *)arg; - } else { - new->x.rp = (struct rule *)arg; - } -} - -/* Free all memory associated with the given acttab */ -void acttab_free(acttab *p) { - free (p->aAction); - free (p->aLookahead); - free (p); -} - -/* Allocate a new acttab structure */ -acttab *acttab_alloc(void) { - acttab *p = malloc (sizeof(*p)) ; - if (p==0) { - fprintf(stderr,"Unable to allocate memory for a new acttab."); - exit(1); - } - memset(p, 0, sizeof(*p)); - return p; -} - -/* Add a new action to the current transaction set -*/ -void acttab_action(acttab *p, int lookahead, int action) { - if (p->nLookahead>=p->nLookaheadAlloc) { - p->nLookaheadAlloc += 25; - p->aLookahead = realloc (p->aLookahead, sizeof(p->aLookahead[0])*p->nLookaheadAlloc) ; - if (p->aLookahead==0) { - fprintf(stderr,"malloc failed\n"); - exit(1); - } - } - if (p->nLookahead==0) { - p->mxLookahead = lookahead; - p->mnLookahead = lookahead; - p->mnAction = action; - } else { - if (p->mxLookaheadmxLookahead = lookahead; - if (p->mnLookahead>lookahead) { - p->mnLookahead = lookahead; - p->mnAction = action; - } - } - p->aLookahead[p->nLookahead].lookahead = lookahead; - p->aLookahead[p->nLookahead].action = action; - p->nLookahead++; -} - -/* -** Add the transaction set built up with prior calls to acttab_action() -** into the current action table. Then reset the transaction set back -** to an empty set in preparation for a new round of acttab_action() calls. -** -** Return the offset into the action table of the new transaction. -*/ -int acttab_insert(acttab *p) { - int i, j, k, n; - assert (p->nLookahead>0) ; - - /* Make sure we have enough space to hold the expanded action table - ** in the worst case. The worst case occurs if the transaction set - ** must be appended to the current action table - */ - n = p->mxLookahead + 1; - if (p->nAction + n >= p->nActionAlloc) { - int oldAlloc = p->nActionAlloc; - p->nActionAlloc = p->nAction + n + p->nActionAlloc + 20; - p->aAction = realloc (p->aAction, sizeof(p->aAction[0])*p->nActionAlloc); - if (p->aAction==0) { - fprintf(stderr,"malloc failed\n"); - exit(1); - } - for(i=oldAlloc; inActionAlloc; i++){ - p->aAction[i].lookahead = -1; - p->aAction[i].action = -1; - } - } - - /* Scan the existing action table looking for an offset where we can - ** insert the current transaction set. Fall out of the loop when that - ** offset is found. In the worst case, we fall out of the loop when - ** i reaches p->nAction, which means we append the new transaction set. - ** - ** i is the index in p->aAction[] where p->mnLookahead is inserted. - */ - for(i=0; inAction+p->mnLookahead; i++){ - if (p->aAction[i].lookahead<0) { - for(j=0; jnLookahead; j++){ - k = p->aLookahead[j].lookahead - p->mnLookahead + i; - if (k<0) break; - if (p->aAction[k].lookahead>=0) break; - } - if (jnLookahead) continue; - for(j=0; jnAction; j++){ - if (p->aAction[j].lookahead==j+p->mnLookahead-i) break; - } - if (j==p->nAction) { - break; /* Fits in empty slots */ - } - } else if (p->aAction[i].lookahead==p->mnLookahead) { - if (p->aAction[i].action!=p->mnAction) continue; - for(j=0; jnLookahead; j++){ - k = p->aLookahead[j].lookahead - p->mnLookahead + i; - if (k<0 || k>=p->nAction) break; - if (p->aLookahead[j].lookahead!=p->aAction[k].lookahead) break; - if (p->aLookahead[j].action!=p->aAction[k].action) break; - } - if (jnLookahead) continue; - n = 0; - for(j=0; jnAction; j++){ - if (p->aAction[j].lookahead<0) continue; - if (p->aAction[j].lookahead==j+p->mnLookahead-i) n++; - } - if (n==p->nLookahead) { - break; /* Same as a prior transaction set */ - } - } - } - /* Insert transaction set at index i. */ - for(j=0; jnLookahead; j++){ - k = p->aLookahead[j].lookahead - p->mnLookahead + i; - p->aAction[k] = p->aLookahead[j]; - if (k>=p->nAction) p->nAction = k+1; - } - p->nLookahead = 0; - - /* Return the offset that is added to the lookahead in order to get the - ** index into yy_action of the action */ - return i - p->mnLookahead; -} diff --git a/c/parsing/lemon_action.h b/c/parsing/lemon_action.h deleted file mode 100644 index c796ad94a..000000000 --- a/c/parsing/lemon_action.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef LEMON_ACTION_H -#define LEMON_ACTION_H - -#include "lemon_structs.h" - -struct action *Action_new(); -struct action *Action_sort(); -void Action_add( - struct action **app, - enum e_action type, - struct symbol *sp, - char *arg); - -/* -** This module implements routines use to construct the yy_action[] table. -*/ - -/* -** The state of the yy_action table under construction is an instance of -** the following structure -*/ -typedef struct acttab acttab; -struct acttab { - int nAction; /* Number of used slots in aAction[] */ - int nActionAlloc; /* Slots allocated for aAction[] */ - struct { - int lookahead; /* Value of the lookahead token */ - int action; /* Action to take on the given lookahead */ - } *aAction, /* The yy_action[] table under construction */ - *aLookahead; /* A single new transaction set */ - int mnLookahead; /* Minimum aLookahead[].lookahead */ - int mnAction; /* Action associated with mnLookahead */ - int mxLookahead; /* Maximum aLookahead[].lookahead */ - int nLookahead; /* Used slots in aLookahead[] */ - int nLookaheadAlloc; /* Slots allocated in aLookahead[] */ -}; - -/* Return the number of entries in the yy_action table */ -#define acttab_size(X) ((X)->nAction) - -/* The value for the N-th entry in yy_action */ -#define acttab_yyaction(X,N) ((X)->aAction[N].action) - -/* The value for the N-th entry in yy_lookahead */ -#define acttab_yylookahead(X,N) ((X)->aAction[N].lookahead) - -struct acttab *acttab_alloc(void); -void acttab_free(acttab *p); -acttab *acttab_alloc(void); -void acttab_action(acttab *p, int lookahead, int action); -int acttab_insert(acttab *p); - -#endif // LEMON_ACTION_H diff --git a/c/parsing/lemon_assert.c b/c/parsing/lemon_assert.c deleted file mode 100644 index e3e1c6f99..000000000 --- a/c/parsing/lemon_assert.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include "lemon_assert.h" - -void lemon_assert(char *file, int line) { - fprintf(stderr,"Assertion failed on line %d of file \"%s\"\n", line, file); - exit(1); -} diff --git a/c/parsing/lemon_assert.h b/c/parsing/lemon_assert.h deleted file mode 100644 index bf8116608..000000000 --- a/c/parsing/lemon_assert.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef LEMON_ASSERT_H -#define LEMON_ASSERT_H - -void lemon_assert(char *file, int line); -#ifndef NDEBUG -# define assert(X) if(!(X))lemon_assert(__FILE__,__LINE__) -#else -# define assert(X) -#endif - -#endif // LEMON_ASSERT_H diff --git a/c/parsing/lemon_config_list.c b/c/parsing/lemon_config_list.c deleted file mode 100644 index b79213f9a..000000000 --- a/c/parsing/lemon_config_list.c +++ /dev/null @@ -1,352 +0,0 @@ -#include -#include -#include - -#include "lemon_config_list.h" - -#include "lemon_assert.h" -#include "lemon_error.h" -#include "lemon_msort.h" -#include "lemon_plink.h" -#include "lemon_set.h" - -/* -** Routines to processing a configuration list and building a state -** in the LEMON parser generator. -*/ - -// ---------------------------------------------------------------- -/* Compare two configurations */ -int Configcmp(a,b) -struct config *a; -struct config *b; -{ - int x; - x = a->rp->index - b->rp->index; - if (x==0) x = a->dot - b->dot; - return x; -} - -// ---------------------------------------------------------------- -static struct config *freelist = 0; /* List of free configurations */ -static struct config *current = 0; /* Top of list of configurations */ -static struct config **currentend = 0; /* Last on list of configs */ -static struct config *basis = 0; /* Top of list of basis configs */ -static struct config **basisend = 0; /* End of list of basis configs */ - -/* Return a pointer to a new configuration */ -static struct config *newconfig() { - struct config *new; - if (freelist==0) { - int i; - int amt = 3; - freelist = (struct config *)malloc (sizeof(struct config)*amt) ; - if (freelist==0) { - fprintf(stderr,"Unable to allocate memory for a new configuration."); - exit(1); - } - for(i=0; inext; - return new; -} - -/* The configuration "old" is no longer used */ -static void deleteconfig(struct config *old) { - old->next = freelist; - freelist = old; -} - -/* Initialized the configuration list builder */ -void Configlist_init() { - current = 0; - currentend = ¤t; - basis = 0; - basisend = &basis; - Configtable_init(); - return; -} - -/* Initialized the configuration list builder */ -void Configlist_reset() { - current = 0; - currentend = ¤t; - basis = 0; - basisend = &basis; - Configtable_clear(0); - return; -} - -/* Add another configuration to the configuration list */ -struct config *Configlist_add( - struct rule *rp, /* The rule */ - int dot) /* Index into the RHS of the rule where the dot goes */ -{ - struct config *cfp, model; - - assert (currentend!=0) ; - model.rp = rp; - model.dot = dot; - cfp = Configtable_find(&model); - if (cfp==0) { - cfp = newconfig(); - cfp->rp = rp; - cfp->dot = dot; - cfp->fws = SetNew(); - cfp->stp = 0; - cfp->fplp = cfp->bplp = 0; - cfp->next = 0; - cfp->bp = 0; - *currentend = cfp; - currentend = &cfp->next; - Configtable_insert(cfp); - } - return cfp; -} - -/* Add a basis configuration to the configuration list */ -struct config *Configlist_addbasis(struct rule *rp, int dot) { - struct config *cfp, model; - - assert (basisend!=0); - assert (currentend!=0); - model.rp = rp; - model.dot = dot; - cfp = Configtable_find(&model); - if (cfp == 0) { - cfp = newconfig(); - cfp->rp = rp; - cfp->dot = dot; - cfp->fws = SetNew(); - cfp->stp = 0; - cfp->fplp = cfp->bplp = 0; - cfp->next = 0; - cfp->bp = 0; - *currentend = cfp; - currentend = &cfp->next; - *basisend = cfp; - basisend = &cfp->bp; - Configtable_insert(cfp); - } - return cfp; -} - -/* Compute the closure of the configuration list */ -void Configlist_closure(struct lemon *lemp) { - struct config *cfp, *newcfp; - struct rule *rp, *newrp; - struct symbol *sp, *xsp; - int i, dot; - - assert (currentend!=0) ; - for(cfp=current; cfp; cfp=cfp->next){ - rp = cfp->rp; - dot = cfp->dot; - if (dot>=rp->nrhs) continue; - sp = rp->rhs[dot]; - if (sp->type==NONTERMINAL) { - if (sp->rule==0 && sp!=lemp->errsym) { - ErrorMsg(lemp->filename,rp->line,"Nonterminal \"%s\" has no rules.", - sp->name); - lemp->errorcnt++; - } - for(newrp=sp->rule; newrp; newrp=newrp->nextlhs){ - newcfp = Configlist_add(newrp,0); - for (i=dot+1; inrhs; i++) { - xsp = rp->rhs[i]; - if (xsp->type==TERMINAL) { - SetAdd(newcfp->fws,xsp->index); - break; - } else { - SetUnion(newcfp->fws,xsp->firstset); - if (xsp->lambda==B_FALSE) break; - } - } - if (i==rp->nrhs) Plink_add(&cfp->fplp,newcfp); - } - } - } - return; -} - -/* Sort the configuration list */ -void Configlist_sort() { - current = (struct config *)msort((char *)current,(char **)&(current->next),Configcmp); - currentend = 0; - return; -} - -/* Sort the basis configuration list */ -void Configlist_sortbasis() { - basis = (struct config *)msort((char *)current,(char **)&(current->bp),Configcmp); - basisend = 0; - return; -} - -/* Return a pointer to the head of the configuration list and -** reset the list */ -struct config *Configlist_return() { - struct config *old; - old = current; - current = 0; - currentend = 0; - return old; -} - -/* Return a pointer to the head of the configuration list and -** reset the list */ -struct config *Configlist_basis() { - struct config *old; - old = basis; - basis = 0; - basisend = 0; - return old; -} - -/* Free all elements of the given configuration list */ -void Configlist_eat(struct config *cfp) -{ - struct config *nextcfp; - for(; cfp; cfp=nextcfp){ - nextcfp = cfp->next; - assert (cfp->fplp==0) ; - assert (cfp->bplp==0) ; - if (cfp->fws) SetFree(cfp->fws); - deleteconfig(cfp); - } - return; -} - -// ================================================================ -/* Hash a configuration */ -static int confighash(struct config *a) { - int h=0; - h = h*571 + a->rp->index*37 + a->dot; - return h; -} - -/* There is one instance of the following structure for each -** associative array of type "x4". -*/ -struct s_x4 { - int size; /* The number of available slots. Must be a power of 2, >= 1. */ - int count; /* Number of currently slots filled */ - struct s_x4node *tbl; /* The data stored here */ - struct s_x4node **ht; /* Hash table for lookups */ -}; - -/* There is one instance of this structure for every data element -** in an associative array of type "x4". -*/ -typedef struct s_x4node { - struct config *data; /* The data */ - struct s_x4node *next; /* Next entry with the same hash */ - struct s_x4node **from; /* Previous link */ -} x4node; - -/* There is only one instance of the array, which is the following */ -static struct s_x4 *x4a; - -/* Allocate a new associative array */ -void Configtable_init() { - if (x4a) return; - x4a = (struct s_x4*)malloc (sizeof(struct s_x4)) ; - if (x4a) { - x4a->size = 64; - x4a->count = 0; - x4a->tbl = (x4node*)malloc ( - (sizeof(x4node) + sizeof(x4node*))*64) ; - if (x4a->tbl==0) { - free(x4a); - x4a = 0; - } else { - int i; - x4a->ht = (x4node**)&(x4a->tbl[64]); - for(i=0; i<64; i++) x4a->ht[i] = 0; - } - } -} - -/* Insert a new record into the array. Return TRUE if successful. -** Prior data with the same key is NOT overwritten */ -int Configtable_insert(struct config *data) { - x4node *np; - int h; - int ph; - - if (x4a==0) return 0; - ph = confighash(data); - h = ph & (x4a->size-1); - np = x4a->ht[h]; - while (np) { - if (Configcmp(np->data,data)==0) { - /* An existing entry with the same key is found. */ - /* Fail because overwrite is not allows. */ - return 0; - } - np = np->next; - } - if (x4a->count>=x4a->size) { - /* Need to make the hash table bigger */ - int i,size; - struct s_x4 array; - array.size = size = x4a->size*2; - array.count = x4a->count; - array.tbl = (x4node*)malloc( - (sizeof(x4node) + sizeof(x4node*))*size) ; - if (array.tbl==0) return 0; /* Fail due to malloc failure */ - array.ht = (x4node**)&(array.tbl[size]); - for(i=0; icount; i++){ - x4node *oldnp, *newnp; - oldnp = &(x4a->tbl[i]); - h = confighash(oldnp->data) & (size-1); - newnp = &(array.tbl[i]); - if (array.ht[h]) array.ht[h]->from = &(newnp->next); - newnp->next = array.ht[h]; - newnp->data = oldnp->data; - newnp->from = &(array.ht[h]); - array.ht[h] = newnp; - } - free(x4a->tbl); - *x4a = array; - } - /* Insert the new data */ - h = ph & (x4a->size-1); - np = &(x4a->tbl[x4a->count++]); - np->data = data; - if (x4a->ht[h]) x4a->ht[h]->from = &(np->next); - np->next = x4a->ht[h]; - x4a->ht[h] = np; - np->from = &(x4a->ht[h]); - return 1; -} - -/* Return a pointer to data assigned to the given key. Return NULL -** if no such key. */ -struct config *Configtable_find(struct config *key) { - int h; - x4node *np; - - if (x4a==0) return 0; - h = confighash(key) & (x4a->size-1); - np = x4a->ht[h]; - while (np) { - if (Configcmp(np->data,key)==0) break; - np = np->next; - } - return np ? np->data : 0; -} - -/* Remove all data from the table. Pass each data to the function "f" -** as it is removed. ("f" may be null to avoid this step.) */ -void Configtable_clear(int(*f)(struct config *)) { - int i; - if (x4a==0 || x4a->count==0) return; - if (f) for(i=0; icount; i++) (*f)(x4a->tbl[i].data); - for(i=0; isize; i++) x4a->ht[i] = 0; - x4a->count = 0; - return; -} diff --git a/c/parsing/lemon_config_list.h b/c/parsing/lemon_config_list.h deleted file mode 100644 index 83e850449..000000000 --- a/c/parsing/lemon_config_list.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef LEMON_CONFIG_LIST_H -#define LEMON_CONFIG_LIST_H - -#include "lemon_structs.h" - -int Configcmp(struct config *, struct config *); - -void Configlist_init(void); -struct config *Configlist_add(struct rule *, int); -struct config *Configlist_addbasis(struct rule *, int); -void Configlist_closure(struct lemon*); -void Configlist_sort(void); -void Configlist_sortbasis(void); -struct config *Configlist_return(void); -struct config *Configlist_basis(void); -void Configlist_eat(struct config *); -void Configlist_reset(void); - -void Configtable_init(void); -int Configtable_insert(struct config *); -struct config *Configtable_find(struct config *); -void Configtable_clear(int(*)(struct config *)); - -#endif // LEMON_CONFIG_LIST_H diff --git a/c/parsing/lemon_dims.h b/c/parsing/lemon_dims.h deleted file mode 100644 index f452713ff..000000000 --- a/c/parsing/lemon_dims.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef LEMON_DIMS_H -#define LEMON_DIMS_H - -#ifdef TEST -#define MAXRHS 5 /* Set low to exercise exception code */ -#else -#define MAXRHS 2000 -#endif - -#endif // LEMON_DIMS_H diff --git a/c/parsing/lemon_error.c b/c/parsing/lemon_error.c deleted file mode 100644 index aa0c39afc..000000000 --- a/c/parsing/lemon_error.c +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include "lemon_error.h" - -/***************** From the file "error.c" *********************************/ -/* -** Code for printing error message. -*/ - -/* Find a good place to break "msg" so that its length is at least "min" -** but no more than "max". Make the point as close to max as possible. -*/ -static int findbreak(char *msg, int min, int max) { - int i,spot; - char c; - for(i=spot=min; i<=max; i++){ - c = msg[i]; - if (c=='\t') msg[i] = ' '; - if (c=='\n') { msg[i] = ' '; spot = i; break; } - if (c==0) { spot = i; break; } - if (c=='-' && i0) { - sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno); - } else { - sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename); - } - prefixsize = strlen(prefix); - availablewidth = LINEWIDTH - prefixsize; - - /* Generate the error message */ - vsprintf(errmsg,format,ap); - va_end(ap); - errmsgsize = strlen(errmsg); - /* Remove trailing '\n's from the error message. */ - while (errmsgsize>0 && errmsg[errmsgsize-1]=='\n') { - errmsg[--errmsgsize] = 0; - } - - /* Print the error message */ - base = 0; - while (errmsg[base]!=0) { - end = restart = findbreak(&errmsg[base],0,availablewidth); - restart += base; - while (errmsg[restart]==' ') restart++; - fprintf(stdout,"%s%.*s\n",prefix,end,&errmsg[base]); - base = restart; - } -} diff --git a/c/parsing/lemon_error.h b/c/parsing/lemon_error.h deleted file mode 100644 index 3b47fe045..000000000 --- a/c/parsing/lemon_error.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef LEMON_ERROR_H -#define LEMON_ERROR_H -#include "stdarg.h" - -void ErrorMsg(const char *, int,const char *, ...); - -#endif // LEMON_ERROR_H diff --git a/c/parsing/lemon_fsm.c b/c/parsing/lemon_fsm.c deleted file mode 100644 index d53d5a09e..000000000 --- a/c/parsing/lemon_fsm.c +++ /dev/null @@ -1,471 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "lemon_fsm.h" -#include "lemon_assert.h" -#include "lemon_error.h" -#include "lemon_memory.h" -////#include "lemon_msort.h" -//#include "lemon_option.h" -//#include "lemon_structs.h" -#include "lemon_action.h" -////#include "lemon_string.h" -#include "lemon_set.h" -//#include "lemon_report.h" -#include "lemon_symbol.h" -#include "lemon_plink.h" -#include "lemon_config_list.h" -#include "lemon_state_table.h" -////#include "lemon_fsm.h" -//#include "lemon_parse.h" - -/* -** Routines to construct the finite state machine for the LEMON -** parser generator. -*/ - -/* Find a precedence symbol of every rule in the grammar. -** -** Those rules which have a precedence symbol coded in the input -** grammar using the "[symbol]" construct will already have the -** rp->precsym field filled. Other rules take as their precedence -** symbol the first RHS symbol with a defined precedence. If there -** are not RHS symbols with a defined precedence, the precedence -** symbol field is left blank. -*/ -void FindRulePrecedences(struct lemon *xp) { - struct rule *rp; - for(rp=xp->rule; rp; rp=rp->next){ - if (rp->precsym==0) { - int i; - for(i=0; inrhs; i++){ - if (rp->rhs[i]->prec>=0) { - rp->precsym = rp->rhs[i]; - break; - } - } - } - } - return; -} - -/* Find all nonterminals which will generate the empty string. -** Then go back and compute the first sets of every nonterminal. -** The first set is the set of all terminal symbols which can begin -** a string generated by that nonterminal. -*/ -void FindFirstSets(struct lemon *lemp) { - int i; - struct rule *rp; - int progress; - - for (i=0; insymbol; i++) { - lemp->symbols[i]->lambda = B_FALSE; - } - for (i=lemp->nterminal; insymbol; i++) { - lemp->symbols[i]->firstset = SetNew(); - } - - /* First compute all lambdas */ - do { - progress = 0; - for (rp=lemp->rule; rp; rp=rp->next) { - if (rp->lhs->lambda) continue; - for(i=0; inrhs; i++){ - if (rp->rhs[i]->lambda==B_FALSE) break; - } - if (i==rp->nrhs) { - rp->lhs->lambda = B_TRUE; - progress = 1; - } - } - } while (progress); - - /* Now compute all first sets */ - do { - struct symbol *s1, *s2; - progress = 0; - for(rp=lemp->rule; rp; rp=rp->next){ - s1 = rp->lhs; - for(i=0; inrhs; i++){ - s2 = rp->rhs[i]; - if (s2->type==TERMINAL) { - progress += SetAdd(s1->firstset,s2->index); - break; - } else if (s1==s2) { - if (s1->lambda==B_FALSE) break; - } else { - progress += SetUnion(s1->firstset,s2->firstset); - if (s2->lambda==B_FALSE) break; - } - } - } - } while (progress); - return; -} - -/* Compute all LR(0) states for the grammar. Links -** are added to between some states so that the LR(1) follow sets -** can be computed later. -*/ -static struct state *getstate(/* struct lemon * */); /* forward reference */ - -void FindStates(struct lemon *lemp) { - struct symbol *sp; - struct rule *rp; - - Configlist_init(); - - /* Find the start symbol */ - if (lemp->start) { - sp = Symbol_find(lemp->start); - if (sp==0) { - ErrorMsg(lemp->filename,0, - "The specified start symbol \"%s\" is not \ - in a nonterminal of the grammar. \"%s\" will be used as the start \ - symbol instead.",lemp->start,lemp->rule->lhs->name); - lemp->errorcnt++; - sp = lemp->rule->lhs; - } - } else { - sp = lemp->rule->lhs; - } - - /* Make sure the start symbol doesn't occur on the right-hand side of - ** any rule. Report an error if it does. (YACC would generate a new - ** start symbol in this case.) */ - for(rp=lemp->rule; rp; rp=rp->next){ - int i; - for(i=0; inrhs; i++){ - if (rp->rhs[i]==sp) { - ErrorMsg(lemp->filename,0, - "The start symbol \"%s\" occurs on the \ - right-hand side of a rule. This will result in a parser which \ - does not work properly.",sp->name); - lemp->errorcnt++; - } - } - } - - /* The basis configuration set for the first state - ** is all rules which have the start symbol as their - ** left-hand side */ - for(rp=sp->rule; rp; rp=rp->nextlhs){ - struct config *newcfp; - newcfp = Configlist_addbasis(rp,0); - SetAdd(newcfp->fws,0); - } - - /* Compute the first state. All other states will be - ** computed automatically during the computation of the first one. - ** The returned pointer to the first state is not used. */ - (void)getstate(lemp); - return; -} - -/* Return a pointer to a state which is described by the configuration -** list which has been built from calls to Configlist_add. -*/ -static void buildshifts(struct lemon *, struct state *); /* Forward ref */ - -static struct state *getstate(struct lemon *lemp) { - struct config *cfp, *bp; - struct state *stp; - - /* Extract the sorted basis of the new state. The basis was constructed - ** by prior calls to "Configlist_addbasis()". */ - Configlist_sortbasis(); - bp = Configlist_basis(); - - /* Get a state with the same basis */ - stp = State_find(bp); - if (stp) { - /* A state with the same basis already exists! Copy all the follow-set - ** propagation links from the state under construction into the - ** preexisting state, then return a pointer to the preexisting state */ - struct config *x, *y; - for(x=bp, y=stp->bp; x && y; x=x->bp, y=y->bp){ - Plink_copy(&y->bplp,x->bplp); - Plink_delete(x->fplp); - x->fplp = x->bplp = 0; - } - cfp = Configlist_return(); - Configlist_eat(cfp); - } else { - /* This really is a new state. Construct all the details */ - Configlist_closure(lemp); /* Compute the configuration closure */ - Configlist_sort(); /* Sort the configuration closure */ - cfp = Configlist_return(); /* Get a pointer to the config list */ - stp = State_new(); /* A new state structure */ - MemoryCheck(stp); - stp->bp = bp; /* Remember the configuration basis */ - stp->cfp = cfp; /* Remember the configuration closure */ - stp->index = lemp->nstate++; /* Every state gets a sequence number */ - stp->ap = 0; /* No actions, yet. */ - State_insert(stp,stp->bp); /* Add to the state table */ - buildshifts(lemp,stp); /* Recursively compute successor states */ - } - return stp; -} - -/* Construct all successor states to the given state. A "successor" -** state is any state which can be reached by a shift action. -*/ -static void buildshifts( - struct lemon *lemp, - struct state *stp) /* The state from which successors are computed */ -{ - struct config *cfp; /* For looping thru the config closure of "stp" */ - struct config *bcfp; /* For the inner loop on config closure of "stp" */ - struct config *new; /* */ - struct symbol *sp; /* Symbol following the dot in configuration "cfp" */ - struct symbol *bsp; /* Symbol following the dot in configuration "bcfp" */ - struct state *newstp; /* A pointer to a successor state */ - - /* Each configuration becomes complete after it contibutes to a successor - ** state. Initially, all configurations are incomplete */ - for(cfp=stp->cfp; cfp; cfp=cfp->next) cfp->status = INCOMPLETE; - - /* Loop through all configurations of the state "stp" */ - for(cfp=stp->cfp; cfp; cfp=cfp->next){ - if (cfp->status==COMPLETE) continue; /* Already used by inner loop */ - if (cfp->dot>=cfp->rp->nrhs) continue; /* Can't shift this config */ - Configlist_reset(); /* Reset the new config set */ - sp = cfp->rp->rhs[cfp->dot]; /* Symbol after the dot */ - - /* For every configuration in the state "stp" which has the symbol "sp" - ** following its dot, add the same configuration to the basis set under - ** construction but with the dot shifted one symbol to the right. */ - for(bcfp=cfp; bcfp; bcfp=bcfp->next){ - if (bcfp->status==COMPLETE) continue; /* Already used */ - if (bcfp->dot>=bcfp->rp->nrhs) continue; /* Can't shift this one */ - bsp = bcfp->rp->rhs[bcfp->dot]; /* Get symbol after dot */ - if (bsp!=sp) continue; /* Must be same as for "cfp" */ - bcfp->status = COMPLETE; /* Mark this config as used */ - new = Configlist_addbasis(bcfp->rp,bcfp->dot+1); - Plink_add(&new->bplp,bcfp); - } - - /* Get a pointer to the state described by the basis configuration set - ** constructed in the preceding loop */ - newstp = getstate(lemp); - - /* The state "newstp" is reached from the state "stp" by a shift action - ** on the symbol "sp" */ - Action_add(&stp->ap,SHIFT,sp,(char *)newstp); - } -} - -/* -** Construct the propagation links -*/ -void FindLinks(struct lemon *lemp) { - int i; - struct config *cfp, *other; - struct state *stp; - struct plink *plp; - - /* Housekeeping detail: - ** Add to every propagate link a pointer back to the state to - ** which the link is attached. */ - for(i=0; instate; i++){ - stp = lemp->sorted[i]; - for(cfp=stp->cfp; cfp; cfp=cfp->next){ - cfp->stp = stp; - } - } - - /* Convert all backlinks into forward links. Only the forward - ** links are used in the follow-set computation. */ - for(i=0; instate; i++){ - stp = lemp->sorted[i]; - for(cfp=stp->cfp; cfp; cfp=cfp->next){ - for(plp=cfp->bplp; plp; plp=plp->next){ - other = plp->cfp; - Plink_add(&other->fplp,cfp); - } - } - } -} - -/* Compute all followsets. -** -** A followset is the set of all symbols which can come immediately -** after a configuration. -*/ -void FindFollowSets(struct lemon *lemp) { - int i; - struct config *cfp; - struct plink *plp; - int progress; - int change; - - for(i=0; instate; i++){ - for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ - cfp->status = INCOMPLETE; - } - } - - do { - progress = 0; - for (i=0; instate; i++){ - for (cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next) { - if (cfp->status==COMPLETE) continue; - for (plp=cfp->fplp; plp; plp=plp->next) { - change = SetUnion(plp->cfp->fws,cfp->fws); - if (change) { - plp->cfp->status = INCOMPLETE; - progress = 1; - } - } - cfp->status = COMPLETE; - } - } - } while (progress); -} - -static int resolve_conflict(); - -/* Compute the reduce actions, and resolve conflicts. -*/ -void FindActions(struct lemon *lemp) { - int i,j; - struct config *cfp; - struct state *stp; - struct symbol *sp; - struct rule *rp; - - /* Add all of the reduce actions - ** A reduce action is added for each element of the followset of - ** a configuration which has its dot at the extreme right. - */ - for(i=0; instate; i++){ /* Loop over all states */ - stp = lemp->sorted[i]; - for(cfp=stp->cfp; cfp; cfp=cfp->next){ /* Loop over all configurations */ - if (cfp->rp->nrhs==cfp->dot) { /* Is dot at extreme right? */ - for(j=0; jnterminal; j++){ - if (SetFind(cfp->fws,j)) { - /* Add a reduce action to the state "stp" which will reduce by the - ** rule "cfp->rp" if the lookahead symbol is "lemp->symbols[j]" */ - Action_add(&stp->ap,REDUCE,lemp->symbols[j],(char *)cfp->rp); - } - } - } - } - } - - /* Add the accepting token */ - if (lemp->start) { - sp = Symbol_find(lemp->start); - if (sp==0) sp = lemp->rule->lhs; - } else { - sp = lemp->rule->lhs; - } - /* Add to the first state (which is always the starting state of the - ** finite state machine) an action to ACCEPT if the lookahead is the - ** start nonterminal. */ - Action_add(&lemp->sorted[0]->ap,ACCEPT,sp,0); - - /* Resolve conflicts */ - for(i=0; instate; i++){ - struct action *ap, *nap; - struct state *stp; - stp = lemp->sorted[i]; - assert (stp->ap) ; - stp->ap = Action_sort(stp->ap); - for(ap=stp->ap; ap && ap->next; ap=ap->next){ - for(nap=ap->next; nap && nap->sp==ap->sp; nap=nap->next){ - /* The two actions "ap" and "nap" have the same lookahead. - ** Figure out which one should be used */ - lemp->nconflict += resolve_conflict(ap,nap,lemp->errsym); - } - } - } - - /* Report an error for each rule that can never be reduced. */ - for(rp=lemp->rule; rp; rp=rp->next) rp->canReduce = B_FALSE; - for(i=0; instate; i++){ - struct action *ap; - for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ - if (ap->type==REDUCE) ap->x.rp->canReduce = B_TRUE; - } - } - for(rp=lemp->rule; rp; rp=rp->next){ - if (rp->canReduce) continue; - ErrorMsg(lemp->filename,rp->ruleline,"This rule can not be reduced.\n"); - lemp->errorcnt++; - } -} - -/* Resolve a conflict between the two given actions. If the -** conflict can't be resolve, return non-zero. -** -** NO LONGER TRUE: -** To resolve a conflict, first look to see if either action -** is on an error rule. In that case, take the action which -** is not associated with the error rule. If neither or both -** actions are associated with an error rule, then try to -** use precedence to resolve the conflict. -** -** If either action is a SHIFT, then it must be apx. This -** function won't work if apx->type==REDUCE and apy->type==SHIFT. -*/ -static int resolve_conflict( - struct action *apx, - struct action *apy, - struct symbol *errsym) /* The error symbol (if defined. NULL otherwise) */ -{ - struct symbol *spx, *spy; - int errcnt = 0; - assert (apx->sp==apy->sp) ; /* Otherwise there would be no conflict */ - if (apx->type==SHIFT && apy->type==REDUCE) { - spx = apx->sp; - spy = apy->x.rp->precsym; - if (spy==0 || spx->prec<0 || spy->prec<0) { - /* Not enough precedence information. */ - apy->type = CONFLICT; - errcnt++; - } else if (spx->prec>spy->prec) { /* Lower precedence wins */ - apy->type = RD_RESOLVED; - } else if (spx->precprec) { - apx->type = SH_RESOLVED; - } else if (spx->prec==spy->prec && spx->assoc==RIGHT) { /* Use operator */ - apy->type = RD_RESOLVED; /* associativity */ - } else if (spx->prec==spy->prec && spx->assoc==LEFT) { /* to break tie */ - apx->type = SH_RESOLVED; - } else { - assert (spx->prec==spy->prec && spx->assoc==NONE) ; - apy->type = CONFLICT; - errcnt++; - } - } else if (apx->type==REDUCE && apy->type==REDUCE) { - spx = apx->x.rp->precsym; - spy = apy->x.rp->precsym; - if (spx==0 || spy==0 || spx->prec<0 || - spy->prec<0 || spx->prec==spy->prec) { - apy->type = CONFLICT; - errcnt++; - } else if (spx->prec>spy->prec) { - apy->type = RD_RESOLVED; - } else if (spx->precprec) { - apx->type = RD_RESOLVED; - } - } else { - assert ( - apx->type==SH_RESOLVED || - apx->type==RD_RESOLVED || - apx->type==CONFLICT || - apy->type==SH_RESOLVED || - apy->type==RD_RESOLVED || - apy->type==CONFLICT - ) ; - /* The REDUCE/SHIFT case cannot happen because SHIFTs come before - ** REDUCEs on the list. If we reach this point it must be because - ** the parser conflict had already been resolved. */ - } - return errcnt; -} diff --git a/c/parsing/lemon_fsm.h b/c/parsing/lemon_fsm.h deleted file mode 100644 index 625e9d92d..000000000 --- a/c/parsing/lemon_fsm.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef LEMON_FSM_H -#define LEMON_FSM_H - -#include "lemon_structs.h" - -void FindRulePrecedences(struct lemon*); -void FindFirstSets(struct lemon*); -void FindStates(struct lemon*); -void FindLinks(struct lemon*); -void FindFollowSets(struct lemon*); -void FindActions(struct lemon*); - -#endif // LEMON_FSM_H diff --git a/c/parsing/lemon_main.c b/c/parsing/lemon_main.c deleted file mode 100644 index 928c7c09c..000000000 --- a/c/parsing/lemon_main.c +++ /dev/null @@ -1,189 +0,0 @@ -/* -** The author of this program disclaims copyright. -*/ - -#include -#include -#include -#include -#include -#include - -#include "lemon_dims.h" -#include "lemon_option.h" -#include "lemon_structs.h" -#include "lemon_string.h" -#include "lemon_set.h" -#include "lemon_report.h" -#include "lemon_symbol.h" -#include "lemon_state_table.h" -#include "lemon_fsm.h" -#include "lemon_parse.h" - -// ---------------------------------------------------------------- -static int nDefine = 0; /* Number of -D options on the command line */ -static char **azDefine = 0; /* Name of the -D macros */ - -/* This routine is called with the argument to each -D command-line option. -** Add the macro defined to the azDefine array. -*/ -static void handle_D_option(char *z) { - char **paz; - nDefine++; - azDefine = realloc(azDefine, sizeof(azDefine[0])*nDefine); - if (azDefine == 0) { - fprintf(stderr,"out of memory\n"); - exit(1); - } - paz = &azDefine[nDefine-1]; - *paz = malloc (strlen(z)+1) ; - if (*paz == 0) { - fprintf(stderr, "out of memory\n"); - exit(1); - } - strcpy(*paz, z); - for(z=*paz; *z && *z!='='; z++){} - *z = 0; -} - - -/* Lemon entry point */ -int main(int argc, char **argv) { - static int version = 0; - static int rpflag = 0; - static int basisflag = 0; - static int compress = 0; - static int quiet = 0; - static int statistics = 0; - static int mhflag = 0; - static int suppress_line_directives = 0; - - static struct s_options options[] = { - {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."}, - {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."}, - {OPT_FSTR, "D", (char*)handle_D_option, "Define an %ifdef macro."}, - {OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."}, - {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file"}, - {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."}, - {OPT_FLAG, "s", (char*)&statistics, "Print parser stats to standard output."}, - {OPT_FLAG, "l", (char*)&suppress_line_directives, "Don't put #line directives in autogenned code."}, - {OPT_FLAG, "x", (char*)&version, "Print the version number."}, - {OPT_FLAG,0,0,0} - }; - int i; - struct lemon lem; - - OptInit(argv, options, stderr); - if (version) { - printf("Lemon version 1.0.1\n"); - exit(0); - } - if (OptNArgs()!=1) { - fprintf(stderr,"Exactly one filename argument is required.\n"); - exit(1); - } - lem.errorcnt = 0; - - /* Initialize the machine */ - Strsafe_init(); - Symbol_init(); - State_init(); - lem.argv0 = argv[0]; - lem.filename = OptArg(0); - lem.basisflag = basisflag; - lem.has_fallback = 0; - lem.nconflict = 0; - lem.name = lem.include = lem.arg = lem.tokentype = lem.start = 0; - lem.vartype = 0; - lem.stacksize = 0; - lem.error = lem.overflow = lem.failure = lem.accept = lem.tokendest = - lem.tokenprefix = lem.outname = lem.extracode = 0; - lem.vardest = 0; - lem.tablesize = 0; - Symbol_new("$"); - lem.errsym = Symbol_new("error"); - - /* Parse the input file */ - Parse(&lem, nDefine, azDefine); - if (lem.errorcnt) - exit(lem.errorcnt); - if (lem.rule==0) { - fprintf(stderr, "Empty grammar.\n"); - exit(1); - } - - /* Count and index the symbols of the grammar */ - lem.nsymbol = Symbol_count(); - Symbol_new("{default}"); - lem.symbols = Symbol_arrayof(); - for (i = 0; i <= lem.nsymbol; i++) - lem.symbols[i]->index = i; - qsort(lem.symbols,lem.nsymbol+1,sizeof(struct symbol*), (int(*)())Symbolcmpp); - for (i = 0; i <= lem.nsymbol; i++) - lem.symbols[i]->index = i; - for (i = 1; isupper(lem.symbols[i]->name[0]); i++) - ; - lem.nterminal = i; - - /* Generate a reprint of the grammar, if requested on the command line */ - if (rpflag) { - Reprint(&lem); - } else { - /* Initialize the size for all follow and first sets */ - SetSize(lem.nterminal); - - /* Find the precedence for every production rule (that has one) */ - FindRulePrecedences(&lem); - - /* Compute the lambda-nonterminals and the first-sets for every - ** nonterminal */ - FindFirstSets(&lem); - - /* Compute all LR(0) states. Also record follow-set propagation - ** links so that the follow-set can be computed later */ - lem.nstate = 0; - FindStates(&lem); - lem.sorted = State_arrayof(); - - /* Tie up loose ends on the propagation links */ - FindLinks(&lem); - - /* Compute the follow set of every reducible configuration */ - FindFollowSets(&lem); - - /* Compute the action tables */ - FindActions(&lem); - - /* Compress the action tables */ - if (compress==0) - CompressTables(&lem); - - /* Generate a report of the parser generated (the "y.output" file) */ - if (!quiet) - ReportOutput(&lem); - - /* Generate the source code for the parser */ - ReportTable(&lem, mhflag, suppress_line_directives); - - /* Produce a header file for use by the scanner. (This step is - ** omitted if the "-m" option is used because makeheaders will - ** generate the file for us.) */ - if (!mhflag) - ReportHeader(&lem); - } - if (statistics) { - printf("Parser statistics: %d terminals, %d nonterminals, %d rules\n", - lem.nterminal, lem.nsymbol - lem.nterminal, lem.nrule); - printf(" %d states, %d parser table entries, %d conflicts\n", - lem.nstate, lem.tablesize, lem.nconflict); - } - if (lem.nconflict) { - fprintf(stderr,"%d resolvable parsing conflicts.\n",lem.nconflict); - } - //exit(lem.errorcnt + lem.nconflict); - // JRK 2016-05-23 - // According to the manual, these conflicts are resolved by taking the first match. - // This is OK for my purposes. - //return (lem.errorcnt + lem.nconflict); - return (lem.errorcnt); -} diff --git a/c/parsing/lemon_memory.c b/c/parsing/lemon_memory.c deleted file mode 100644 index ad4210662..000000000 --- a/c/parsing/lemon_memory.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#include "lemon_memory.h" - -// Report an out-of-memory condition and abort. -void memory_error() { - fprintf(stderr, "Out of memory. Aborting.\n"); - exit(1); -} diff --git a/c/parsing/lemon_memory.h b/c/parsing/lemon_memory.h deleted file mode 100644 index 099e775d8..000000000 --- a/c/parsing/lemon_memory.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef LEMON_MEMORY_H -#define LEMON_MEMORY_H - -extern void memory_error(); -#define MemoryCheck(X) if ((X) == 0) { \ - memory_error(); \ -} - -#endif // LEMON_MEMORY_H diff --git a/c/parsing/lemon_msort.c b/c/parsing/lemon_msort.c deleted file mode 100644 index 280d7e4ed..000000000 --- a/c/parsing/lemon_msort.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "lemon_msort.h" - -/* -** A generic merge-sort program. -** -** USAGE: -** Let "ptr" be a pointer to some structure which is at the head of -** a null-terminated list. Then to sort the list call: -** -** ptr = msort(ptr,&(ptr->next),cmpfnc); -** -** In the above, "cmpfnc" is a pointer to a function which compares -** two instances of the structure and returns an integer, as in -** strcmp. The second argument is a pointer to the pointer to the -** second element of the linked list. This address is used to compute -** the offset to the "next" field within the structure. The offset to -** the "next" field must be constant for all structures in the list. -** -** The function returns a new pointer which is the head of the list -** after sorting. -** -** ALGORITHM: -** Merge-sort. -*/ - -/* -** Return a pointer to the next structure in the linked list. -*/ -#define NEXT(A) (*(char**)(((unsigned long)A)+offset)) - -/* -** Inputs: -** a: A sorted, null-terminated linked list. (May be null). -** b: A sorted, null-terminated linked list. (May be null). -** cmp: A pointer to the comparison function. -** offset: Offset in the structure to the "next" field. -** -** Return Value: -** A pointer to the head of a sorted list containing the elements -** of both a and b. -** -** Side effects: -** The "next" pointers for elements in the lists a and b are -** changed. -*/ -static char *merge( - char *a, - char *b, - int (*cmp)(), - int offset) -{ - char *ptr, *head; - - if (a==0) { - head = b; - } else if (b==0) { - head = a; - } else { - if ((*cmp)(a,b)<0) { - ptr = a; - a = NEXT(a); - } else { - ptr = b; - b = NEXT(b); - } - head = ptr; - while (a && b) { - if ((*cmp)(a,b)<0) { - NEXT(ptr) = a; - ptr = a; - a = NEXT(a); - } else { - NEXT(ptr) = b; - ptr = b; - b = NEXT(b); - } - } - if (a) NEXT(ptr) = a; - else NEXT(ptr) = b; - } - return head; -} - -/* -** Inputs: -** list: Pointer to a singly-linked list of structures. -** next: Pointer to pointer to the second element of the list. -** cmp: A comparison function. -** -** Return Value: -** A pointer to the head of a sorted list containing the elements -** orginally in list. -** -** Side effects: -** The "next" pointers for elements in list are changed. -*/ -#define LISTSIZE 30 -char *msort(char *list, char **next, int (*cmp)()) { - unsigned long offset; - char *ep; - char *set[LISTSIZE]; - int i; - offset = (unsigned long)next - (unsigned long)list; - for(i=0; i -#include -#include -#include "lemon_option.h" - -/************************ From the file "option.c" **************************/ -static char **argv; -static struct s_options *op; -static FILE *errstream; - -#define ISOPT(X) ((X)[0]=='-'||(X)[0]=='+'||strchr((X),'=')!=0) - -// ---------------------------------------------------------------- -// Print the command line with a caret pointing to the k-th character -// of the nth field. -static void errline(int n, int k, FILE *err) { - int spcnt, i; - spcnt = 0; - if (argv[0]) fprintf(err,"%s",argv[0]); - spcnt = strlen(argv[0]) + 1; - for(i=1; istate = WAITING_FOR_DECL_KEYWORD; - } else if (islower(x[0])) { - psp->lhs = Symbol_new(x); - psp->nrhs = 0; - psp->lhsalias = 0; - psp->state = WAITING_FOR_ARROW; - } else if (x[0]=='{') { - if (psp->prevrule==0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "There is not prior rule opon which to attach the code \ - fragment which begins on this line."); - psp->errorcnt++; - } else if (psp->prevrule->code!=0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Code fragment beginning on this line is not the first \ - to follow the previous rule."); - psp->errorcnt++; - } else { - psp->prevrule->line = psp->tokenlineno; - psp->prevrule->code = &x[1]; - } - } else if (x[0]=='[') { - psp->state = PRECEDENCE_MARK_1; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Token \"%s\" should be either \"%%\" or a nonterminal name.", - x); - psp->errorcnt++; - } - break; - case PRECEDENCE_MARK_1: - if (!isupper(x[0])) { - ErrorMsg(psp->filename,psp->tokenlineno, - "The precedence symbol must be a terminal."); - psp->errorcnt++; - } else if (psp->prevrule==0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "There is no prior rule to assign precedence \"[%s]\".",x); - psp->errorcnt++; - } else if (psp->prevrule->precsym!=0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Precedence mark on this line is not the first \ - to follow the previous rule."); - psp->errorcnt++; - } else { - psp->prevrule->precsym = Symbol_new(x); - } - psp->state = PRECEDENCE_MARK_2; - break; - case PRECEDENCE_MARK_2: - if (x[0]!=']') { - ErrorMsg(psp->filename,psp->tokenlineno, - "Missing \"]\" on precedence mark."); - psp->errorcnt++; - } - psp->state = WAITING_FOR_DECL_OR_RULE; - break; - case WAITING_FOR_ARROW: - if (x[0]==':' && x[1]==':' && x[2]=='=') { - psp->state = IN_RHS; - } else if (x[0]=='(') { - psp->state = LHS_ALIAS_1; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Expected to see a \":\" following the LHS symbol \"%s\".", - psp->lhs->name); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case LHS_ALIAS_1: - if (isalpha(x[0])) { - psp->lhsalias = x; - psp->state = LHS_ALIAS_2; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "\"%s\" is not a valid alias for the LHS \"%s\"\n", - x,psp->lhs->name); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case LHS_ALIAS_2: - if (x[0]==')') { - psp->state = LHS_ALIAS_3; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case LHS_ALIAS_3: - if (x[0]==':' && x[1]==':' && x[2]=='=') { - psp->state = IN_RHS; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Missing \"->\" following: \"%s(%s)\".", - psp->lhs->name,psp->lhsalias); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case IN_RHS: - if (x[0]=='.') { - struct rule *rp; - rp = (struct rule *)malloc (sizeof(struct rule) + - sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs) ; - if (rp==0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Can't allocate enough memory for this rule."); - psp->errorcnt++; - psp->prevrule = 0; - } else { - int i; - rp->ruleline = psp->tokenlineno; - rp->rhs = (struct symbol**)&rp[1]; - rp->rhsalias = (char**)&(rp->rhs[psp->nrhs]); - for(i=0; inrhs; i++) { - rp->rhs[i] = psp->rhs[i]; - rp->rhsalias[i] = psp->alias[i]; - } - rp->lhs = psp->lhs; - rp->lhsalias = psp->lhsalias; - rp->nrhs = psp->nrhs; - rp->code = 0; - rp->precsym = 0; - rp->index = psp->gp->nrule++; - rp->nextlhs = rp->lhs->rule; - rp->lhs->rule = rp; - rp->next = 0; - if (psp->firstrule==0) { - psp->firstrule = psp->lastrule = rp; - } else { - psp->lastrule->next = rp; - psp->lastrule = rp; - } - psp->prevrule = rp; - } - psp->state = WAITING_FOR_DECL_OR_RULE; - } else if (isalpha(x[0])) { - if (psp->nrhs>=MAXRHS) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Too many symbol on RHS or rule beginning at \"%s\".", - x); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } else { - psp->rhs[psp->nrhs] = Symbol_new(x); - psp->alias[psp->nrhs] = 0; - psp->nrhs++; - } - } else if (x[0]=='(' && psp->nrhs>0) { - psp->state = RHS_ALIAS_1; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Illegal character on RHS of rule: \"%s\".",x); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case RHS_ALIAS_1: - if (isalpha(x[0])) { - psp->alias[psp->nrhs-1] = x; - psp->state = RHS_ALIAS_2; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "\"%s\" is not a valid alias for the RHS symbol \"%s\"\n", - x,psp->rhs[psp->nrhs-1]->name); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case RHS_ALIAS_2: - if (x[0]==')') { - psp->state = IN_RHS; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); - psp->errorcnt++; - psp->state = RESYNC_AFTER_RULE_ERROR; - } - break; - case WAITING_FOR_DECL_KEYWORD: - if (isalpha(x[0])) { - psp->declkeyword = x; - psp->declargslot = 0; - psp->decllnslot = 0; - psp->state = WAITING_FOR_DECL_ARG; - if (strcmp(x,"name")==0) { - psp->declargslot = &(psp->gp->name); - } else if (strcmp(x,"include")==0) { - psp->declargslot = &(psp->gp->include); - psp->decllnslot = &psp->gp->includeln; - } else if (strcmp(x,"code")==0) { - psp->declargslot = &(psp->gp->extracode); - psp->decllnslot = &psp->gp->extracodeln; - } else if (strcmp(x,"token_destructor")==0) { - psp->declargslot = &psp->gp->tokendest; - psp->decllnslot = &psp->gp->tokendestln; - } else if (strcmp(x,"default_destructor")==0) { - psp->declargslot = &psp->gp->vardest; - psp->decllnslot = &psp->gp->vardestln; - } else if (strcmp(x,"token_prefix")==0) { - psp->declargslot = &psp->gp->tokenprefix; - } else if (strcmp(x,"syntax_error")==0) { - psp->declargslot = &(psp->gp->error); - psp->decllnslot = &psp->gp->errorln; - } else if (strcmp(x,"parse_accept")==0) { - psp->declargslot = &(psp->gp->accept); - psp->decllnslot = &psp->gp->acceptln; - } else if (strcmp(x,"parse_failure")==0) { - psp->declargslot = &(psp->gp->failure); - psp->decllnslot = &psp->gp->failureln; - } else if (strcmp(x,"stack_overflow")==0) { - psp->declargslot = &(psp->gp->overflow); - psp->decllnslot = &psp->gp->overflowln; - } else if (strcmp(x,"extra_argument")==0) { - psp->declargslot = &(psp->gp->arg); - } else if (strcmp(x,"token_type")==0) { - psp->declargslot = &(psp->gp->tokentype); - } else if (strcmp(x,"default_type")==0) { - psp->declargslot = &(psp->gp->vartype); - } else if (strcmp(x,"stack_size")==0) { - psp->declargslot = &(psp->gp->stacksize); - } else if (strcmp(x,"start_symbol")==0) { - psp->declargslot = &(psp->gp->start); - } else if (strcmp(x,"left")==0) { - psp->preccounter++; - psp->declassoc = LEFT; - psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; - } else if (strcmp(x,"right")==0) { - psp->preccounter++; - psp->declassoc = RIGHT; - psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; - } else if (strcmp(x,"nonassoc")==0) { - psp->preccounter++; - psp->declassoc = NONE; - psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; - } else if (strcmp(x,"destructor")==0) { - psp->state = WAITING_FOR_DESTRUCTOR_SYMBOL; - } else if (strcmp(x,"type")==0) { - psp->state = WAITING_FOR_DATATYPE_SYMBOL; - } else if (strcmp(x,"fallback")==0) { - psp->fallback = 0; - psp->state = WAITING_FOR_FALLBACK_ID; - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Unknown declaration keyword: \"%%%s\".",x); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Illegal declaration keyword: \"%s\".",x); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } - break; - case WAITING_FOR_DESTRUCTOR_SYMBOL: - if (!isalpha(x[0])) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Symbol name missing after %destructor keyword"); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } else { - struct symbol *sp = Symbol_new(x); - psp->declargslot = &sp->destructor; - psp->decllnslot = &sp->destructorln; - psp->state = WAITING_FOR_DECL_ARG; - } - break; - case WAITING_FOR_DATATYPE_SYMBOL: - if (!isalpha(x[0])) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Symbol name missing after %destructor keyword"); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } else { - struct symbol *sp = Symbol_new(x); - psp->declargslot = &sp->datatype; - psp->decllnslot = 0; - psp->state = WAITING_FOR_DECL_ARG; - } - break; - case WAITING_FOR_PRECEDENCE_SYMBOL: - if (x[0]=='.') { - psp->state = WAITING_FOR_DECL_OR_RULE; - } else if (isupper(x[0])) { - struct symbol *sp; - sp = Symbol_new(x); - if (sp->prec>=0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "Symbol \"%s\" has already be given a precedence.",x); - psp->errorcnt++; - } else { - sp->prec = psp->preccounter; - sp->assoc = psp->declassoc; - } - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Can't assign a precedence to \"%s\".",x); - psp->errorcnt++; - } - break; - case WAITING_FOR_DECL_ARG: - if ((x[0]=='{' || x[0]=='\"' || isalnum(x[0]))) { - if (*(psp->declargslot)!=0) { - ErrorMsg(psp->filename,psp->tokenlineno, - "The argument \"%s\" to declaration \"%%%s\" is not the first.", - x[0]=='\"' ? &x[1] : x,psp->declkeyword); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } else { - *(psp->declargslot) = (x[0]=='\"' || x[0]=='{') ? &x[1] : x; - if (psp->decllnslot) *psp->decllnslot = psp->tokenlineno; - psp->state = WAITING_FOR_DECL_OR_RULE; - } - } else { - ErrorMsg(psp->filename,psp->tokenlineno, - "Illegal argument to %%%s: %s",psp->declkeyword,x); - psp->errorcnt++; - psp->state = RESYNC_AFTER_DECL_ERROR; - } - break; - case WAITING_FOR_FALLBACK_ID: - if (x[0]=='.') { - psp->state = WAITING_FOR_DECL_OR_RULE; - } else if (!isupper(x[0])) { - ErrorMsg(psp->filename, psp->tokenlineno, - "%%fallback argument \"%s\" should be a token", x); - psp->errorcnt++; - } else { - struct symbol *sp = Symbol_new(x); - if (psp->fallback==0) { - psp->fallback = sp; - } else if (sp->fallback) { - ErrorMsg(psp->filename, psp->tokenlineno, - "More than one fallback assigned to token %s", x); - psp->errorcnt++; - } else { - sp->fallback = psp->fallback; - psp->gp->has_fallback = 1; - } - } - break; - case RESYNC_AFTER_RULE_ERROR: -/* if (x[0]=='.') psp->state = WAITING_FOR_DECL_OR_RULE; -** break; */ - case RESYNC_AFTER_DECL_ERROR: - if (x[0]=='.') psp->state = WAITING_FOR_DECL_OR_RULE; - if (x[0]=='%') psp->state = WAITING_FOR_DECL_KEYWORD; - break; - } -} - -/* Run the proprocessor over the input file text. The global variables -** azDefine[0] through azDefine[nDefine-1] contains the names of all defined -** macros. This routine looks for "%ifdef" and "%ifndef" and "%endif" and -** comments them out. Text in between is also commented out as appropriate. -*/ -static void preprocess_input(char *z, int nDefine, char** azDefine) { - int i, j, k, n; - int exclude = 0; - int start; - int lineno = 1; - int start_lineno; - for (i=0; z[i]; i++) { - if (z[i]=='\n') lineno++; - if (z[i]!='%' || (i>0 && z[i-1]!='\n')) continue; - if (strncmp(&z[i],"%endif",6)==0 && isspace(z[i+6])) { - if (exclude) { - exclude--; - if (exclude==0) { - for (j=start; jfilename; - ps.errorcnt = 0; - ps.state = INITIALIZE; - - /* Begin by reading the input file */ - fp = fopen(ps.filename,"rb"); - if (fp == 0) { - ErrorMsg(ps.filename,0,"Can't open this file for reading."); - gp->errorcnt++; - return 0; - } - int rc = fseek(fp, 0, 2); - if (rc < 0) { - perror("fseek"); - ErrorMsg(ps.filename,0,"fseek failure."); - gp->errorcnt++; - return 0; - } - filesize = ftell(fp); - rewind(fp); - filebuf = (char *)malloc (filesize+1) ; - if (filebuf==0) { - ErrorMsg(ps.filename,0,"Can't allocate %d of memory to hold this file.", filesize+1); - gp->errorcnt++; - return 0; - } - if (fread(filebuf,1,filesize,fp)!=filesize) { - ErrorMsg(ps.filename,0,"Can't read in all %d bytes of this file.", - filesize); - free(filebuf); - gp->errorcnt++; - return 0; - } - fclose(fp); - filebuf[filesize] = 0; - - /* Make an initial pass through the file to handle %ifdef and %ifndef */ - preprocess_input(filebuf, nDefine, azDefine); - - /* Now scan the text of the input file */ - lineno = 1; - for(cp=filebuf; (c= *cp)!=0;) { - if (c=='\n') lineno++; /* Keep track of the line number */ - if (isspace(c)) { cp++; continue; } /* Skip all white space */ - if (c=='/' && cp[1]=='/') { /* Skip C++ style comments */ - cp+=2; - while ((c= *cp)!=0 && c!='\n') - cp++; - continue; - } - if (c=='/' && cp[1]=='*') { /* Skip C style comments */ - cp+=2; - while ((c= *cp)!=0 && (c!='/' || cp[-1]!='*')) { - if (c=='\n') - lineno++; - cp++; - } - if (c) - cp++; - continue; - } - ps.tokenstart = cp; /* Mark the beginning of the token */ - ps.tokenlineno = lineno; /* Linenumber on which token begins */ - if (c=='\"') { /* String literals */ - cp++; - while ((c= *cp)!=0 && c!='\"') { - if (c=='\n') lineno++; - cp++; - } - if (c == 0) { - ErrorMsg(ps.filename,startline, - "String starting on this line is not terminated before the end of the file."); - ps.errorcnt++; - nextcp = cp; - } else { - nextcp = cp+1; - } - } else if (c=='{') { /* A block of C code */ - int level; - cp++; - for (level=1; (c= *cp)!=0 && (level>1 || c!='}'); cp++) { - if (c=='\n') lineno++; - else if (c=='{') level++; - else if (c=='}') level--; - else if (c=='/' && cp[1]=='*') { /* Skip comments */ - int prevc; - cp = &cp[2]; - prevc = 0; - while ((c= *cp)!=0 && (c!='/' || prevc!='*')) { - if (c=='\n') lineno++; - prevc = c; - cp++; - } - } else if (c=='/' && cp[1]=='/') { /* Skip C++ style comments too */ - cp = &cp[2]; - while ((c= *cp)!=0 && c!='\n') - cp++; - if (c) - lineno++; - } else if (c=='\'' || c=='\"') { /* String a character literals */ - int startchar, prevc; - startchar = c; - prevc = 0; - for (cp++; (c= *cp)!=0 && (c!=startchar || prevc=='\\'); cp++) { - if (c=='\n') lineno++; - if (prevc=='\\') prevc = 0; - else prevc = c; - } - } - } - if (c==0) { - ErrorMsg(ps.filename,ps.tokenlineno, -"C code starting on this line is not terminated before the end of the file."); - ps.errorcnt++; - nextcp = cp; - } else { - nextcp = cp+1; - } - } else if (isalnum(c)) { /* Identifiers */ - while ((c= *cp)!=0 && (isalnum(c) || c=='_')) cp++; - nextcp = cp; - } else if (c==':' && cp[1]==':' && cp[2]=='=') { /* The operator "::=" */ - cp += 3; - nextcp = cp; - } else { /* All other (one character) operators */ - cp++; - nextcp = cp; - } - c = *cp; - *cp = 0; /* Null terminate the token */ - parseonetoken(&ps); /* Parse the token */ - *cp = c; /* Restore the buffer */ - cp = nextcp; - } - free(filebuf); /* Release the buffer after parsing */ - gp->rule = ps.firstrule; - gp->errorcnt = ps.errorcnt; - - if (gp->errorcnt == 0) - return 1; - else - return 0; -} diff --git a/c/parsing/lemon_parse.h b/c/parsing/lemon_parse.h deleted file mode 100644 index 504953fc7..000000000 --- a/c/parsing/lemon_parse.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef LEMON_PARSE_H -#define LEMON_PARSE_H - -#include "lemon_structs.h" - -int Parse(struct lemon *lemp, int nDefine, char** azDefine); - -#endif // LEMON_PARSE_H diff --git a/c/parsing/lemon_plink.c b/c/parsing/lemon_plink.c deleted file mode 100644 index f61fb6bcf..000000000 --- a/c/parsing/lemon_plink.c +++ /dev/null @@ -1,67 +0,0 @@ -#include -#include -#include -#include "lemon_plink.h" - -/*************************** From the file "plink.c" *********************/ -/* -** Routines processing configuration follow-set propagation links -** in the LEMON parser generator. -*/ -static struct plink *plink_freelist = 0; - -/* Allocate a new plink */ -struct plink *Plink_new(){ - struct plink *new; - - if (plink_freelist==0) { - int i; - int amt = 100; - plink_freelist = (struct plink *)malloc (sizeof(struct plink)*amt) ; - if (plink_freelist==0) { - fprintf(stderr, - "Unable to allocate memory for a new follow-set propagation link.\n"); - exit(1); - } - for(i=0; inext; - return new; -} - -/* Add a plink to a plink list */ -void Plink_add(struct plink **plpp, struct config *cfp) -{ - struct plink *new; - new = Plink_new(); - new->next = *plpp; - *plpp = new; - new->cfp = cfp; -} - -/* Transfer every plink on the list "from" to the list "to" */ -void Plink_copy(struct plink **to, struct plink *from) -{ - struct plink *nextpl; - while (from) { - nextpl = from->next; - from->next = *to; - *to = from; - from = nextpl; - } -} - -/* Delete every plink on the list */ -void Plink_delete(struct plink *plp) -{ - struct plink *nextpl; - - while (plp) { - nextpl = plp->next; - plp->next = plink_freelist; - plink_freelist = plp; - plp = nextpl; - } -} diff --git a/c/parsing/lemon_plink.h b/c/parsing/lemon_plink.h deleted file mode 100644 index f0c6d6823..000000000 --- a/c/parsing/lemon_plink.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef LEMON_PLINK_H -#define LEMON_PLINK_H - -#include "lemon_structs.h" - -struct plink *Plink_new(void); -void Plink_add(struct plink **, struct config *); -void Plink_copy(struct plink **, struct plink *); -void Plink_delete(struct plink *); - -#endif // LEMON_PLINK_H diff --git a/c/parsing/lemon_report.c b/c/parsing/lemon_report.c deleted file mode 100644 index c35f99a00..000000000 --- a/c/parsing/lemon_report.c +++ /dev/null @@ -1,1275 +0,0 @@ -#include -#include -#include -#include -#include - -#include "lemon_report.h" - -#include "lemon_error.h" -#include "lemon_assert.h" -#include "lemon_string.h" -#include "lemon_action.h" -#include "lemon_dims.h" -#include "lemon_symbol.h" - -/* -** Procedures for generating reports and tables in the LEMON parser generator. -*/ - -/* Generate a filename with the given suffix. Space to hold the -** name comes from malloc() and must be freed by the calling -** function. -*/ -static char *file_makename(struct lemon *lemp, char *suffix) -{ - char *name; - char *cp; - - name = malloc (strlen(lemp->filename) + strlen(suffix) + 5) ; - if (name==0) { - fprintf(stderr,"Can't allocate space for a filename.\n"); - exit(1); - } - strcpy(name,lemp->filename); - cp = strrchr(name,'.'); - if (cp) *cp = 0; - strcat(name,suffix); - return name; -} -static char* capitalize(char* string) { - char* p; - for (p = string; *p; p++) { - *p = toupper(*p); - } - return string; -} - -/* Open a file with a name based on the name of the input file, -** but with a different (specified) suffix, and return a pointer -** to the stream */ -static FILE *file_open(struct lemon *lemp, char *suffix, char *mode) -{ - FILE *fp; - - free(lemp->outname); - lemp->outname = file_makename(lemp, suffix); - fp = fopen(lemp->outname,mode); - if (fp==0 && *mode=='w') { - fprintf(stderr,"Can't open file \"%s\".\n",lemp->outname); - lemp->errorcnt++; - return 0; - } - return fp; -} - -/* Duplicate the input file without comments and without actions on rules */ -void Reprint(struct lemon *lemp) -{ - struct rule *rp; - struct symbol *sp; - int i, j, maxlen, len, ncolumns, skip; - printf("// Reprint of input file \"%s\".\n// Symbols:\n",lemp->filename); - maxlen = 10; - for(i=0; insymbol; i++){ - sp = lemp->symbols[i]; - len = strlen(sp->name); - if (len>maxlen) maxlen = len; - } - ncolumns = 76/(maxlen+5); - if (ncolumns<1) ncolumns = 1; - skip = (lemp->nsymbol + ncolumns - 1)/ncolumns; - for(i=0; insymbol; j+=skip){ - sp = lemp->symbols[j]; - assert (sp->index==j) ; - printf(" %3d %-*.*s",j,maxlen,maxlen,sp->name); - } - printf("\n"); - } - for(rp=lemp->rule; rp; rp=rp->next){ - printf("%s",rp->lhs->name); -/* if (rp->lhsalias) printf("(%s)",rp->lhsalias); */ - printf(" ::="); - for(i=0; inrhs; i++){ - printf(" %s",rp->rhs[i]->name); -/* if (rp->rhsalias[i]) printf("(%s)",rp->rhsalias[i]); */ - } - printf("."); - if (rp->precsym) printf(" [%s]",rp->precsym->name); -/* if (rp->code) printf("\n %s",rp->code); */ - printf("\n"); - } -} - -void ConfigPrint(FILE *fp, struct config *cfp) -{ - struct rule *rp; - int i; - rp = cfp->rp; - fprintf(fp,"%s ::=",rp->lhs->name); - for(i=0; i<=rp->nrhs; i++){ - if (i==cfp->dot) fprintf(fp," *"); - if (i==rp->nrhs) break; - fprintf(fp," %s",rp->rhs[i]->name); - } -} - -/* #define TEST */ -#ifdef TEST -/* Print a set */ -static void SetPrint(FILE *out, char *set, struct lemon *lemp) -{ - int i; - char *spacer; - spacer = ""; - fprintf(out,"%12s[",""); - for(i=0; interminal; i++){ - if (SetFind(set,i)) { - fprintf(out,"%s%s",spacer,lemp->symbols[i]->name); - spacer = " "; - } - } - fprintf(out,"]\n"); -} - -/* Print a plink chain */ -static void PlinkPrint(FILE *out, struct plink *plp, char *tag) -{ - while (plp) { - fprintf(out,"%12s%s (state %2d) ","",tag,plp->cfp->stp->index); - ConfigPrint(out,plp->cfp); - fprintf(out,"\n"); - plp = plp->next; - } -} -#endif - -/* Print an action to the given file descriptor. Return FALSE if -** nothing was actually printed. -*/ -int PrintAction(struct action *ap, FILE *fp, int indent) { - int result = 1; - switch (ap->type) { - case SHIFT: - fprintf(fp,"%*s shift %d",indent,ap->sp->name,ap->x.stp->index); - break; - case REDUCE: - fprintf(fp,"%*s reduce %d",indent,ap->sp->name,ap->x.rp->index); - break; - case ACCEPT: - fprintf(fp,"%*s accept",indent,ap->sp->name); - break; - case ERROR: - fprintf(fp,"%*s error",indent,ap->sp->name); - break; - case CONFLICT: - fprintf(fp,"%*s reduce %-3d ** Parsing conflict **", - indent,ap->sp->name,ap->x.rp->index); - break; - case SH_RESOLVED: - case RD_RESOLVED: - case NOT_USED: - result = 0; - break; - } - return result; -} - -/* Generate the "y.output" log file */ -void ReportOutput(struct lemon *lemp) -{ - int i; - struct state *stp; - struct config *cfp; - struct action *ap; - FILE *fp; - - fp = file_open(lemp,".out","w"); - if (fp==0) return; - fprintf(fp," \b"); - for(i=0; instate; i++){ - stp = lemp->sorted[i]; - fprintf(fp,"State %d:\n",stp->index); - if (lemp->basisflag) cfp=stp->bp; - else cfp=stp->cfp; - while (cfp) { - char buf[20]; - if (cfp->dot==cfp->rp->nrhs) { - sprintf(buf,"(%d)",cfp->rp->index); - fprintf(fp," %5s ",buf); - } else { - fprintf(fp," "); - } - ConfigPrint(fp,cfp); - fprintf(fp,"\n"); -#ifdef TEST - SetPrint(fp,cfp->fws,lemp); - PlinkPrint(fp,cfp->fplp,"To "); - PlinkPrint(fp,cfp->bplp,"From"); -#endif - if (lemp->basisflag) cfp=cfp->bp; - else cfp=cfp->next; - } - fprintf(fp,"\n"); - for(ap=stp->ap; ap; ap=ap->next){ - if (PrintAction(ap,fp,30)) fprintf(fp,"\n"); - } - fprintf(fp,"\n"); - } - fclose(fp); - return; -} - -/* Search for the file "name" which is in the same directory as -** the exacutable */ -static char *pathsearch(char *argv0, char *name, int modemask) -{ - char *pathlist; - char *path,*cp; - char c; - -#ifdef __WIN32__ - cp = strrchr(argv0,'\\'); -#else - cp = strrchr(argv0,'/'); -#endif - if (cp) { - c = *cp; - *cp = 0; - path = (char *)malloc (strlen(argv0) + strlen(name) + 2) ; - if (path) sprintf(path,"%s/%s",argv0,name); - *cp = c; - } else { - extern char *getenv(); - pathlist = getenv("PATH"); - if (pathlist==0) pathlist = ".:/bin:/usr/bin"; - path = (char *)malloc (strlen(pathlist)+strlen(name)+2) ; - if (path!=0) { - while (*pathlist) { - cp = strchr(pathlist,':'); - if (cp==0) cp = &pathlist[strlen(pathlist)]; - c = *cp; - *cp = 0; - sprintf(path,"%s/%s",pathlist,name); - *cp = c; - if (c==0) pathlist = ""; - else pathlist = &cp[1]; - if (access(path,modemask)==0) break; - } - } - } - return path; -} - -/* Given an action, compute the integer value for that action -** which is to be put in the action table of the generated machine. -** Return negative if no action should be generated. -*/ -static int compute_action(struct lemon *lemp, struct action *ap) -{ - int act; - switch (ap->type) { - case SHIFT: act = ap->x.stp->index; break; - case REDUCE: act = ap->x.rp->index + lemp->nstate; break; - case ERROR: act = lemp->nstate + lemp->nrule; break; - case ACCEPT: act = lemp->nstate + lemp->nrule + 1; break; - default: act = -1; break; - } - return act; -} - -#define LINESIZE 1000 -/* The next cluster of routines are for reading the template file -** and writing the results to the generated parser */ -/* The first function transfers data from "in" to "out" until -** a line is seen which begins with "%%". The line number is -** tracked. -** -** if name!=0, then any word that begin with "Parse" is changed to -** begin with *name instead. -*/ -static void tplt_xfer( - char *name, - FILE *in, - FILE *out, - int *lineno) -{ - int i, iStart; - char line[LINESIZE]; - while (fgets(line,LINESIZE,in) && (line[0]!='%' || line[1]!='%')) { - (*lineno)++; - iStart = 0; - if (name) { - for(i=0; line[i]; i++){ - if (line[i]=='P' && strncmp(&line[i],"Parse",5)==0 - && (i==0 || !isalpha(line[i-1])) - ) { - if (i>iStart) fprintf(out,"%.*s",i-iStart,&line[iStart]); - fprintf(out,"%s",name); - i += 4; - iStart = i+1; - } - } - } - fprintf(out,"%s",&line[iStart]); - } -} - -/* The next function finds the template file and opens it, returning -** a pointer to the opened file. */ -static FILE *tplt_open(struct lemon *lemp) -{ - static char templatename[] = "lempar.c"; - char buf[1000]; - FILE *in; - char *tpltname; - char *cp; - - cp = strrchr(lemp->filename,'.'); - if (cp) { - sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); - } else { - sprintf(buf,"%s.lt",lemp->filename); - } - if (access(buf,004)==0) { - tpltname = buf; - } else if (access(templatename,004)==0) { - tpltname = templatename; - } else { - tpltname = pathsearch(lemp->argv0,templatename,0); - } - if (tpltname==0) { - fprintf(stderr,"Can't find the parser driver template file \"%s\".\n", - templatename); - lemp->errorcnt++; - return 0; - } - in = fopen(tpltname,"r"); - if (in==0) { - fprintf(stderr,"Can't open the template file \"%s\".\n",templatename); - lemp->errorcnt++; - return 0; - } - return in; -} - -/* Print a string to the file and keep the linenumber up to date */ -static void tplt_print( - FILE *out, - struct lemon *lemp, - char *str, - int strln, - int *lineno, - int suppress_line_directives) -{ - if (str == 0) - return; - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n",strln,lemp->filename); (*lineno)++; - } - while (*str) { - if (*str=='\n') (*lineno)++; - putc(*str,out); - str++; - } - if (!suppress_line_directives) { - fprintf(out,"\n#line %d \"%s\"\n",*lineno+2,lemp->outname); (*lineno)+=2; - } - return; -} - -/* -** The following routine emits code for the destructor for the -** symbol sp -*/ -void emit_destructor_code( - FILE *out, - struct symbol *sp, - struct lemon *lemp, - int *lineno, - int suppress_line_directives) -{ - char *cp = 0; - - int linecnt = 0; - if (sp->type==TERMINAL) { - cp = lemp->tokendest; - if (cp==0) return; - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n{",lemp->tokendestln,lemp->filename); - } - } else if (sp->destructor) { - cp = sp->destructor; - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n{",sp->destructorln,lemp->filename); - } - } else if (lemp->vardest) { - cp = lemp->vardest; - if (cp==0) return; - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n",lemp->vardestln,lemp->filename); - } - fprintf(out, "{"); - } else { - assert (0) ; /* Cannot happen */ - } - for(; *cp; cp++){ - if (*cp=='$' && cp[1]=='$') { - fprintf(out,"(yypminor->yy%d)",sp->dtnum); - cp++; - continue; - } - if (*cp=='\n') linecnt++; - fputc(*cp,out); - } - (*lineno) += 3 + linecnt; - fprintf(out,"}\n"); - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n",*lineno,lemp->outname); - } - return; -} - -/* -** Return TRUE (non-zero) if the given symbol has a destructor. -*/ -int has_destructor(struct symbol *sp, struct lemon *lemp) -{ - int ret; - if (sp->type==TERMINAL) { - ret = lemp->tokendest!=0; - } else { - ret = lemp->vardest!=0 || sp->destructor!=0; - } - return ret; -} - -/* -** Append text to a dynamically allocated string. If zText is 0 then -** reset the string to be empty again. Always return the complete text -** of the string (which is overwritten with each call). -** -** n bytes of zText are stored. If n==0 then all of zText up to the first -** \000 terminator is stored. zText can contain up to two instances of -** %d. The values of p1 and p2 are written into the first and second -** %d. -** -** If n==-1, then the previous character is overwritten. -*/ -static char *append_str(char *zText, int n, int p1, int p2) { - static char *z = 0; - static int alloced = 0; - static int used = 0; - int i, c; - char zInt[40]; - - if (zText==0) { - used = 0; - return z; - } - if (n<=0) { - if (n<0) { - used += n; - assert (used>=0) ; - } - n = strlen(zText); - } - if (n+sizeof(zInt)*2+used >= alloced) { - alloced = n + sizeof(zInt)*2 + used + 200; - z = realloc(z, alloced); - } - if (z==0) return ""; - while (n-- > 0) { - c = *(zText++); - if (c=='%' && zText[0]=='d') { - sprintf(zInt, "%d", p1); - p1 = p2; - strcpy(&z[used], zInt); - used += strlen(&z[used]); - zText++; - n--; - } else { - z[used++] = c; - } - } - z[used] = 0; - return z; -} - -/* -** zCode is a string that is the action associated with a rule. Expand -** the symbols in this string so that the refer to elements of the parser -** stack. Return a new string stored in space obtained from malloc. -*/ -static void translate_code(struct lemon *lemp, struct rule *rp) { - char *cp, *xp; - int i; - char lhsused = 0; /* True if the LHS element has been used */ - char used[MAXRHS]; /* True for each RHS element which is used */ - - for(i=0; inrhs; i++) used[i] = 0; - lhsused = 0; - - append_str(0,0,0,0); - for(cp=rp->code; *cp; cp++){ - if (isalpha(*cp) && (cp==rp->code || (!isalnum(cp[-1]) && cp[-1]!='_'))) { - char saved; - for(xp= &cp[1]; isalnum(*xp) || *xp=='_'; xp++); - saved = *xp; - *xp = 0; - if (rp->lhsalias && strcmp(cp,rp->lhsalias)==0) { - append_str("yygotominor.yy%d",0,rp->lhs->dtnum,0); - cp = xp; - lhsused = 1; - } else { - for(i=0; inrhs; i++){ - if (rp->rhsalias[i] && strcmp(cp,rp->rhsalias[i])==0) { - if (cp!=rp->code && cp[-1]=='@') { - /* If the argument is of the form @X then substituted - ** the token number of X, not the value of X */ - append_str("yymsp[%d].major",-1,i-rp->nrhs+1,0); - } else { - append_str("yymsp[%d].minor.yy%d",0, - i-rp->nrhs+1,rp->rhs[i]->dtnum); - } - cp = xp; - used[i] = 1; - break; - } - } - } - *xp = saved; - } - append_str(cp, 1, 0, 0); - } /* End loop */ - - /* Check to make sure the LHS has been used */ - if (rp->lhsalias && !lhsused) { - ErrorMsg(lemp->filename,rp->ruleline, - "Label \"%s\" for \"%s(%s)\" is never used.", - rp->lhsalias,rp->lhs->name,rp->lhsalias); - lemp->errorcnt++; - } - - /* Generate destructor code for RHS symbols which are not used in the - ** reduce code */ - for(i=0; inrhs; i++){ - if (rp->rhsalias[i] && !used[i]) { - ErrorMsg(lemp->filename,rp->ruleline, - "Label %s for \"%s(%s)\" is never used.", - rp->rhsalias[i],rp->rhs[i]->name,rp->rhsalias[i]); - lemp->errorcnt++; - } else if (rp->rhsalias[i]==0) { - if (has_destructor(rp->rhs[i],lemp)) { - append_str(" yy_destructor(%d,&yymsp[%d].minor);\n", 0, - rp->rhs[i]->index,i-rp->nrhs+1); - } else { - /* No destructor defined for this term */ - } - } - } - cp = append_str(0,0,0,0); - rp->code = Strsafe(cp); -} - -/* -** Generate code which executes when the rule "rp" is reduced. Write -** the code to "out". Make sure lineno stays up-to-date. -*/ -static void emit_code( - FILE *out, - struct rule *rp, - struct lemon *lemp, - int *lineno, - int suppress_line_directives) -{ - char *cp; - int linecnt = 0; - - /* Generate code to do the reduce action */ - if (rp->code) { - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n",rp->line,lemp->filename); - } - fprintf(out,"{"); - fprintf(out,"%s",rp->code); - for(cp=rp->code; *cp; cp++){ - if (*cp=='\n') linecnt++; - } /* End loop */ - (*lineno) += 3 + linecnt; - fprintf(out,"}\n"); - if (!suppress_line_directives) { - fprintf(out,"#line %d \"%s\"\n",*lineno,lemp->outname); - } - } /* End if (rp->code) */ - - return; -} - -/* -** Print the definition of the union used for the parser's data stack. -** This union contains fields for every possible data type for tokens -** and nonterminals. In the process of computing and printing this -** union, also set the ".dtnum" field of every terminal and nonterminal -** symbol. -*/ -void print_stack_union( - FILE *out, /* The output stream */ - struct lemon *lemp, /* The main info structure for this parser */ - int *plineno, /* Pointer to the line number */ - int mhflag) /* True if generating makeheaders output */ -{ - int lineno = *plineno; /* The line number of the output */ - char **types; /* A hash table of datatypes */ - int arraysize; /* Size of the "types" array */ - int maxdtlength; /* Maximum length of any ".datatype" field. */ - char *stddt; /* Standardized name for a datatype */ - int i,j; /* Loop counters */ - unsigned hash; /* For hashing the name of a type */ - char *name; /* Name of the parser */ - - /* Allocate and initialize types[] and allocate stddt[] */ - arraysize = lemp->nsymbol * 2; - types = (char**)malloc (arraysize * sizeof(char*)) ; - for(i=0; ivartype) { - maxdtlength = strlen(lemp->vartype); - } - for(i=0; insymbol; i++){ - int len; - struct symbol *sp = lemp->symbols[i]; - if (sp->datatype==0) continue; - len = strlen(sp->datatype); - if (len>maxdtlength) maxdtlength = len; - } - stddt = (char*)malloc (maxdtlength*2 + 1) ; - if (types==0 || stddt==0) { - fprintf(stderr,"Out of memory.\n"); - exit(1); - } - - /* Build a hash table of datatypes. The ".dtnum" field of each symbol - ** is filled in with the hash index plus 1. A ".dtnum" value of 0 is - ** used for terminal symbols. If there is no %default_type defined then - ** 0 is also used as the .dtnum value for nonterminals which do not specify - ** a datatype using the %type directive. - */ - for(i=0; insymbol; i++){ - struct symbol *sp = lemp->symbols[i]; - char *cp; - if (sp==lemp->errsym) { - sp->dtnum = arraysize+1; - continue; - } - if (sp->type!=NONTERMINAL || (sp->datatype==0 && lemp->vartype==0)) { - sp->dtnum = 0; - continue; - } - cp = sp->datatype; - if (cp==0) cp = lemp->vartype; - j = 0; - while (isspace(*cp)) cp++; - while (*cp) stddt[j++] = *cp++; - while (j>0 && isspace(stddt[j-1])) j--; - stddt[j] = 0; - hash = 0; - for(j=0; stddt[j]; j++){ - hash = hash*53 + (unsigned)stddt[j]; - } - hash = (hash & 0x7fffffff)%arraysize; - while (types[hash]) { - if (strcmp(types[hash],stddt)==0) { - sp->dtnum = hash + 1; - break; - } - hash++; - if (hash>=arraysize) hash = 0; - } - if (types[hash]==0) { - sp->dtnum = hash + 1; - types[hash] = (char*)malloc (strlen(stddt)+1) ; - if (types[hash]==0) { - fprintf(stderr,"Out of memory.\n"); - exit(1); - } - strcpy(types[hash],stddt); - } - } - - /* Print out the definition of YYTOKENTYPE and YYMINORTYPE */ - name = lemp->name ? lemp->name : "Parse"; - lineno = *plineno; - if (mhflag) { fprintf(out,"#if INTERFACE\n"); lineno++; } - fprintf(out,"#define %sTOKENTYPE %s\n",name, - lemp->tokentype?lemp->tokentype:"void*"); lineno++; - if (mhflag) { fprintf(out,"#endif\n"); lineno++; } - fprintf(out,"typedef union {\n"); lineno++; - fprintf(out," %sTOKENTYPE yy0;\n",name); lineno++; - for(i=0; ierrsym->dtnum); lineno++; - free(stddt); - free(types); - fprintf(out,"} YYMINORTYPE;\n"); lineno++; - *plineno = lineno; -} - -/* -** Return the name of a C datatype able to represent values between -** lwr and upr, inclusive. -*/ -static const char *minimum_size_type(int lwr, int upr){ - if (lwr>=0) { - if (upr<=255) { - return "unsigned char"; - } else if (upr<65535) { - return "unsigned short int"; - } else { - return "unsigned int"; - } - } else if (lwr>=-127 && upr<=127) { - return "signed char"; - } else if (lwr>=-32767 && upr<32767) { - return "short"; - } else { - return "int"; - } -} - -/* -** Each state contains a set of token transaction and a set of -** nonterminal transactions. Each of these sets makes an instance -** of the following structure. An array of these structures is used -** to order the creation of entries in the yy_action[] table. -*/ -struct axset { - struct state *stp; /* A pointer to a state */ - int isTkn; /* True to use tokens. False for non-terminals */ - int nAction; /* Number of actions */ -}; - -/* -** Compare to axset structures for sorting purposes -*/ -static int axset_compare(const void *a, const void *b){ - struct axset *p1 = (struct axset*)a; - struct axset *p2 = (struct axset*)b; - return p2->nAction - p1->nAction; -} - -/* Generate C source code for the parser */ -/* Output in makeheaders format if mhflag==true */ -void ReportTable(struct lemon *lemp, int mhflag, int suppress_line_directives) -{ - FILE *out, *in; - char line[LINESIZE]; - int lineno; - struct state *stp; - struct action *ap; - struct rule *rp; - struct acttab *pActtab; - int i, j, n; - char *name; - int mnTknOfst, mxTknOfst; - int mnNtOfst, mxNtOfst; - struct axset *ax; - - in = tplt_open(lemp); - if (in==0) return; - out = file_open(lemp,".c","w"); - if (out==0) { - fclose(in); - return; - } - lineno = 1; - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate the include code, if any */ - tplt_print(out,lemp,lemp->include,lemp->includeln,&lineno, suppress_line_directives); - if (mhflag) { - char *name = file_makename(lemp, ".h"); - fprintf(out,"#include \"%s\"\n", name); lineno++; - free(name); - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate #defines for all tokens */ - if (mhflag) { - char *prefix; - fprintf(out,"#if INTERFACE\n"); lineno++; - if (lemp->tokenprefix) prefix = lemp->tokenprefix; - else prefix = ""; - for(i=1; interminal; i++){ - fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); - lineno++; - } - fprintf(out,"#endif\n"); lineno++; - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate the defines */ - fprintf(out,"#define YYCODETYPE %s\n", - minimum_size_type(0, lemp->nsymbol+5)); lineno++; - fprintf(out,"#define YYNOCODE %d\n",lemp->nsymbol+1); lineno++; - fprintf(out,"#define YYACTIONTYPE %s\n", - minimum_size_type(0, lemp->nstate+lemp->nrule+5)); lineno++; - print_stack_union(out,lemp,&lineno,mhflag); - if (lemp->stacksize) { - if (atoi(lemp->stacksize)<=0) { - ErrorMsg(lemp->filename,0, -"Illegal stack size: [%s]. The stack size should be an integer constant.", - lemp->stacksize); - lemp->errorcnt++; - lemp->stacksize = "800"; - } - fprintf(out,"#define YYSTACKDEPTH %s\n",lemp->stacksize); lineno++; - } else { - fprintf(out,"#define YYSTACKDEPTH 800\n"); lineno++; - } - if (mhflag) { - fprintf(out,"#if INTERFACE\n"); lineno++; - } - name = lemp->name ? lemp->name : "Parse"; - if (lemp->arg && lemp->arg[0]) { - int i; - i = strlen(lemp->arg); - while (i>=1 && isspace(lemp->arg[i-1])) i--; - while (i>=1 && (isalnum(lemp->arg[i-1]) || lemp->arg[i-1]=='_')) i--; - fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg); lineno++; - fprintf(out,"#define %sARG_PDECL ,%s\n",name,lemp->arg); lineno++; - fprintf(out,"#define %sARG_FETCH %s = pparser->%s\n", - name,lemp->arg,&lemp->arg[i]); lineno++; - fprintf(out,"#define %sARG_STORE pparser->%s = %s\n", - name,&lemp->arg[i],&lemp->arg[i]); lineno++; - } else { - fprintf(out,"#define %sARG_SDECL\n",name); lineno++; - fprintf(out,"#define %sARG_PDECL\n",name); lineno++; - fprintf(out,"#define %sARG_FETCH\n",name); lineno++; - fprintf(out,"#define %sARG_STORE\n",name); lineno++; - } - if (mhflag) { - fprintf(out,"#endif\n"); lineno++; - } - fprintf(out,"#define YYNSTATE %d\n",lemp->nstate); lineno++; - fprintf(out,"#define YYNRULE %d\n",lemp->nrule); lineno++; - fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index); lineno++; - fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum); lineno++; - if (lemp->has_fallback) { - fprintf(out,"#define YYFALLBACK 1\n"); lineno++; - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate the action table and its associates: - ** - ** yy_action[] A single table containing all actions. - ** yy_lookahead[] A table containing the lookahead for each entry in - ** yy_action. Used to detect hash collisions. - ** yy_shift_ofst[] For each state, the offset into yy_action for - ** shifting terminals. - ** yy_reduce_ofst[] For each state, the offset into yy_action for - ** shifting non-terminals after a reduce. - ** yy_default[] Default action for each state. - */ - - /* Compute the actions on all states and count them up */ - ax = malloc (sizeof(ax[0])*lemp->nstate*2) ; - if (ax==0) { - fprintf(stderr,"malloc failed\n"); - exit(1); - } - for(i=0; instate; i++){ - stp = lemp->sorted[i]; - stp->nTknAct = stp->nNtAct = 0; - stp->iDflt = lemp->nstate + lemp->nrule; - stp->iTknOfst = NO_OFFSET; - stp->iNtOfst = NO_OFFSET; - for(ap=stp->ap; ap; ap=ap->next){ - if (compute_action(lemp,ap)>=0) { - if (ap->sp->indexnterminal) { - stp->nTknAct++; - } else if (ap->sp->indexnsymbol) { - stp->nNtAct++; - } else { - stp->iDflt = compute_action(lemp, ap); - } - } - } - ax[i*2].stp = stp; - ax[i*2].isTkn = 1; - ax[i*2].nAction = stp->nTknAct; - ax[i*2+1].stp = stp; - ax[i*2+1].isTkn = 0; - ax[i*2+1].nAction = stp->nNtAct; - } - mxTknOfst = mnTknOfst = 0; - mxNtOfst = mnNtOfst = 0; - - /* Compute the action table. In order to try to keep the size of the - ** action table to a minimum, the heuristic of placing the largest action - ** sets first is used. - */ - qsort(ax, lemp->nstate*2, sizeof(ax[0]), axset_compare); - pActtab = acttab_alloc(); - for(i=0; instate*2 && ax[i].nAction>0; i++){ - stp = ax[i].stp; - if (ax[i].isTkn) { - for(ap=stp->ap; ap; ap=ap->next){ - int action; - if (ap->sp->index>=lemp->nterminal) continue; - action = compute_action(lemp, ap); - if (action<0) continue; - acttab_action(pActtab, ap->sp->index, action); - } - stp->iTknOfst = acttab_insert(pActtab); - if (stp->iTknOfstiTknOfst; - if (stp->iTknOfst>mxTknOfst) mxTknOfst = stp->iTknOfst; - } else { - for(ap=stp->ap; ap; ap=ap->next){ - int action; - if (ap->sp->indexnterminal) continue; - if (ap->sp->index==lemp->nsymbol) continue; - action = compute_action(lemp, ap); - if (action<0) continue; - acttab_action(pActtab, ap->sp->index, action); - } - stp->iNtOfst = acttab_insert(pActtab); - if (stp->iNtOfstiNtOfst; - if (stp->iNtOfst>mxNtOfst) mxNtOfst = stp->iNtOfst; - } - } - free(ax); - - /* Output the yy_action table */ - fprintf(out,"static YYACTIONTYPE yy_action[] = {\n"); lineno++; - n = acttab_size(pActtab); - for(i=j=0; insymbol + lemp->nrule + 2; - if (j==0) fprintf(out," /* %5d */ ", i); - fprintf(out, " %4d,", action); - if (j==9 || i==n-1) { - fprintf(out, "\n"); lineno++; - j = 0; - } else { - j++; - } - } - fprintf(out, "};\n"); lineno++; - - /* Output the yy_lookahead table */ - fprintf(out,"static YYCODETYPE yy_lookahead[] = {\n"); lineno++; - for(i=j=0; insymbol; - if (j==0) fprintf(out," /* %5d */ ", i); - fprintf(out, " %4d,", la); - if (j==9 || i==n-1) { - fprintf(out, "\n"); lineno++; - j = 0; - } else { - j++; - } - } - fprintf(out, "};\n"); lineno++; - - /* Output the yy_shift_ofst[] table */ - fprintf(out, "#define YY_SHIFT_USE_DFLT (%d)\n", mnTknOfst-1); lineno++; - fprintf(out, "static %s yy_shift_ofst[] = {\n", - minimum_size_type(mnTknOfst-1, mxTknOfst)); lineno++; - n = lemp->nstate; - for(i=j=0; isorted[i]; - ofst = stp->iTknOfst; - if (ofst==NO_OFFSET) ofst = mnTknOfst - 1; - if (j==0) fprintf(out," /* %5d */ ", i); - fprintf(out, " %4d,", ofst); - if (j==9 || i==n-1) { - fprintf(out, "\n"); lineno++; - j = 0; - } else { - j++; - } - } - fprintf(out, "};\n"); lineno++; - - /* Output the yy_reduce_ofst[] table */ - fprintf(out, "#define YY_REDUCE_USE_DFLT (%d)\n", mnNtOfst-1); lineno++; - fprintf(out, "static %s yy_reduce_ofst[] = {\n", - minimum_size_type(mnNtOfst-1, mxNtOfst)); lineno++; - n = lemp->nstate; - for(i=j=0; isorted[i]; - ofst = stp->iNtOfst; - if (ofst==NO_OFFSET) ofst = mnNtOfst - 1; - if (j==0) fprintf(out," /* %5d */ ", i); - fprintf(out, " %4d,", ofst); - if (j==9 || i==n-1) { - fprintf(out, "\n"); lineno++; - j = 0; - } else { - j++; - } - } - fprintf(out, "};\n"); lineno++; - - /* Output the default action table */ - fprintf(out, "static YYACTIONTYPE yy_default[] = {\n"); lineno++; - n = lemp->nstate; - for(i=j=0; isorted[i]; - if (j==0) fprintf(out," /* %5d */ ", i); - fprintf(out, " %4d,", stp->iDflt); - if (j==9 || i==n-1) { - fprintf(out, "\n"); lineno++; - j = 0; - } else { - j++; - } - } - fprintf(out, "};\n"); lineno++; - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate the table of fallback tokens. - */ - if (lemp->has_fallback) { - for(i=0; interminal; i++){ - struct symbol *p = lemp->symbols[i]; - if (p->fallback==0) { - fprintf(out, " 0, /* %10s => nothing */\n", p->name); - } else { - fprintf(out, " %3d, /* %10s => %s */\n", p->fallback->index, - p->name, p->fallback->name); - } - lineno++; - } - } - tplt_xfer(lemp->name, in, out, &lineno); - - /* Generate a table containing the symbolic name of every symbol - */ - for(i=0; insymbol; i++){ - sprintf(line,"\"%s\",",lemp->symbols[i]->name); - fprintf(out," %-15s",line); - if ((i&3)==3) { fprintf(out,"\n"); lineno++; } - } - if ((i&3)!=0) { fprintf(out,"\n"); lineno++; } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate a table containing a text string that describes every - ** rule in the rule set of the grammer. This information is used - ** when tracing REDUCE actions. - */ - for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ - assert (rp->index==i) ; - fprintf(out," /* %3d */ \"%s ::=", i, rp->lhs->name); - for(j=0; jnrhs; j++) fprintf(out," %s",rp->rhs[j]->name); - fprintf(out,"\",\n"); lineno++; - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which executes every time a symbol is popped from - ** the stack while processing errors or while destroying the parser. - ** (In other words, generate the %destructor actions) - */ - if (lemp->tokendest) { - for(i=0; insymbol; i++){ - struct symbol *sp = lemp->symbols[i]; - if (sp==0 || sp->type!=TERMINAL) continue; - fprintf(out," case %d:\n",sp->index); lineno++; - } - for(i=0; insymbol && lemp->symbols[i]->type!=TERMINAL; i++); - if (insymbol) { - emit_destructor_code(out,lemp->symbols[i],lemp,&lineno, suppress_line_directives); - fprintf(out," break;\n"); lineno++; - } - } - for(i=0; insymbol; i++){ - struct symbol *sp = lemp->symbols[i]; - if (sp==0 || sp->type==TERMINAL || sp->destructor==0) continue; - fprintf(out," case %d:\n",sp->index); lineno++; - - /* Combine duplicate destructors into a single case */ - for(j=i+1; jnsymbol; j++){ - struct symbol *sp2 = lemp->symbols[j]; - if (sp2 && sp2->type!=TERMINAL && sp2->destructor - && sp2->dtnum==sp->dtnum - && strcmp(sp->destructor,sp2->destructor)==0) { - fprintf(out," case %d:\n",sp2->index); lineno++; - sp2->destructor = 0; - } - } - - emit_destructor_code(out,lemp->symbols[i],lemp,&lineno, suppress_line_directives); - fprintf(out," break;\n"); lineno++; - } - if (lemp->vardest) { - struct symbol *dflt_sp = 0; - for(i=0; insymbol; i++){ - struct symbol *sp = lemp->symbols[i]; - if (sp==0 || sp->type==TERMINAL || - sp->index<=0 || sp->destructor!=0) continue; - fprintf(out," case %d:\n",sp->index); lineno++; - dflt_sp = sp; - } - if (dflt_sp!=0) { - emit_destructor_code(out,dflt_sp,lemp,&lineno, suppress_line_directives); - fprintf(out," break;\n"); lineno++; - } - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which executes whenever the parser stack overflows */ - tplt_print(out,lemp,lemp->overflow,lemp->overflowln,&lineno, suppress_line_directives); - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate the table of rule information - ** - ** Note: This code depends on the fact that rules are number - ** sequentually beginning with 0. - */ - for(rp=lemp->rule; rp; rp=rp->next){ - fprintf(out," { %d, %d },\n",rp->lhs->index,rp->nrhs); lineno++; - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which execution during each REDUCE action */ - for(rp=lemp->rule; rp; rp=rp->next){ - if (rp->code) translate_code(lemp, rp); - } - for(rp=lemp->rule; rp; rp=rp->next){ - struct rule *rp2; - if (rp->code==0) continue; - fprintf(out," case %d:\n",rp->index); lineno++; - for(rp2=rp->next; rp2; rp2=rp2->next){ - if (rp2->code==rp->code) { - fprintf(out," case %d:\n",rp2->index); lineno++; - rp2->code = 0; - } - } - emit_code(out,rp,lemp,&lineno, suppress_line_directives); - fprintf(out," break;\n"); lineno++; - } - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which executes if a parse fails */ - tplt_print(out,lemp,lemp->failure,lemp->failureln,&lineno, suppress_line_directives); - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which executes when a syntax error occurs */ - tplt_print(out,lemp,lemp->error,lemp->errorln,&lineno, suppress_line_directives); - tplt_xfer(lemp->name,in,out,&lineno); - - /* Generate code which executes when the parser accepts its input */ - tplt_print(out,lemp,lemp->accept,lemp->acceptln,&lineno, suppress_line_directives); - tplt_xfer(lemp->name,in,out,&lineno); - - /* Append any addition code the user desires */ - tplt_print(out,lemp,lemp->extracode,lemp->extracodeln,&lineno, suppress_line_directives); - - fclose(in); - fclose(out); - return; -} - -/* Generate a header file for the parser */ -void ReportHeader(struct lemon *lemp) -{ - FILE *out, *in; - char *prefix; - char line[LINESIZE]; - char pattern[LINESIZE]; - int i; - - if (lemp->tokenprefix) prefix = lemp->tokenprefix; - else prefix = ""; - in = file_open(lemp,".h","r"); - if (in) { - for(i=1; interminal && fgets(line,LINESIZE,in); i++){ - sprintf(pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); - if (strcmp(line,pattern)) break; - } - fclose(in); - if (i==lemp->nterminal) { - /* No change in the file. Don't rewrite it. */ - return; - } - } - out = file_open(lemp,".h","w"); - if (out) { - char* ident = capitalize(file_makename(lemp, "_h")); - fprintf(out, "#ifndef %s\n", ident); - fprintf(out, "#define %s\n", ident); - fprintf(out, "\n"); - for(i=1; interminal; i++){ - fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); - } - fprintf(out, "\n"); - fprintf(out, "#endif // %s\n", ident); - fclose(out); - } - return; -} - -/* Reduce the size of the action tables, if possible, by making use -** of defaults. -** -** In this version, we take the most frequent REDUCE action and make -** it the default. Only default a reduce if there are more than one. -*/ - -void CompressTables(struct lemon *lemp) -{ - struct state *stp; - struct action *ap, *ap2; - struct rule *rp, *rp2, *rbest; - int nbest, n; - int i; - - for(i=0; instate; i++){ - stp = lemp->sorted[i]; - nbest = 0; - rbest = 0; - - for(ap=stp->ap; ap; ap=ap->next){ - if (ap->type!=REDUCE) continue; - rp = ap->x.rp; - if (rp==rbest) continue; - n = 1; - for(ap2=ap->next; ap2; ap2=ap2->next){ - if (ap2->type!=REDUCE) continue; - rp2 = ap2->x.rp; - if (rp2==rbest) continue; - if (rp2==rp) n++; - } - if (n>nbest) { - nbest = n; - rbest = rp; - } - } - - /* Do not make a default if the number of rules to default - ** is not at least 2 */ - if (nbest<2) continue; - - - /* Combine matching REDUCE actions into a single default */ - for(ap=stp->ap; ap; ap=ap->next){ - if (ap->type==REDUCE && ap->x.rp==rbest) break; - } - assert (ap) ; - ap->sp = Symbol_new("{default}"); - for(ap=ap->next; ap; ap=ap->next){ - if (ap->type==REDUCE && ap->x.rp==rbest) ap->type = NOT_USED; - } - stp->ap = Action_sort(stp->ap); - } -} - diff --git a/c/parsing/lemon_report.h b/c/parsing/lemon_report.h deleted file mode 100644 index 4c56105d8..000000000 --- a/c/parsing/lemon_report.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef LEMON_REPORT_H -#define LEMON_REPORT_H - -#include "lemon_structs.h" - -void Reprint(struct lemon *); -void ReportOutput(struct lemon *); -void ReportTable(struct lemon *, int mhflag, int suppress_line_directives); -void ReportHeader(struct lemon *); -void CompressTables(struct lemon *); - -#endif // LEMON_REPORT_H diff --git a/c/parsing/lemon_set.c b/c/parsing/lemon_set.c deleted file mode 100644 index 56d33e889..000000000 --- a/c/parsing/lemon_set.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include -#include - -#include "lemon_set.h" - -/* -** Set manipulation routines for the LEMON parser generator. -*/ - -static int size = 0; - -/* Set the set size */ -void SetSize(int n) { - size = n+1; -} - -/* Allocate a new set */ -char *SetNew() { - char *s; - int i; - s = (char*)malloc (size) ; - if (s==0) { - extern void memory_error(); - memory_error(); - } - for(i=0; i -#include -#include - -#include "lemon_state_table.h" - -#include "lemon_memory.h" - -/* -** Code for processing tables in the LEMON parser generator. -*/ - -/* Compare two states */ -static int statecmp(a,b) -struct config *a; -struct config *b; -{ - int rc; - for(rc=0; rc==0 && a && b; a=a->bp, b=b->bp){ - rc = a->rp->index - b->rp->index; - if (rc==0) rc = a->dot - b->dot; - } - if (rc==0) { - if (a) rc = 1; - if (b) rc = -1; - } - return rc; -} - -/* Hash a state */ -static int statehash(a) -struct config *a; -{ - unsigned h=0; - while (a) { - h = h*571 + (unsigned)a->rp->index*37 + (unsigned)a->dot; - a = a->bp; - } - return (int)h; -} - -/* Allocate a new state structure */ -struct state *State_new() -{ - struct state *new; - new = (struct state *)malloc (sizeof(struct state)) ; - MemoryCheck(new); - return new; -} - -/* There is one instance of the following structure for each -** associative array of type "x3". -*/ -struct s_x3 { - int size; /* The number of available slots. Must be a power of 2, >= 1. */ - int count; /* Number of currently slots filled */ - struct s_x3node *tbl; /* The data stored here */ - struct s_x3node **ht; /* Hash table for lookups */ -}; - -/* There is one instance of this structure for every data element -** in an associative array of type "x3". -*/ -typedef struct s_x3node { - struct state *data; /* The data */ - struct config *key; /* The key */ - struct s_x3node *next; /* Next entry with the same hash */ - struct s_x3node **from; /* Previous link */ -} x3node; - -/* There is only one instance of the array, which is the following */ -static struct s_x3 *x3a; - -/* Allocate a new associative array */ -void State_init(){ - if (x3a) return; - x3a = (struct s_x3*)malloc (sizeof(struct s_x3)) ; - if (x3a) { - x3a->size = 128; - x3a->count = 0; - x3a->tbl = (x3node*)malloc ( - (sizeof(x3node) + sizeof(x3node*))*128) ; - if (x3a->tbl==0) { - free(x3a); - x3a = 0; - } else { - int i; - x3a->ht = (x3node**)&(x3a->tbl[128]); - for(i=0; i<128; i++) x3a->ht[i] = 0; - } - } -} - -/* Insert a new record into the array. Return TRUE if successful. -** Prior data with the same key is NOT overwritten */ -int State_insert(struct state *data, struct config *key) -{ - x3node *np; - int h; - int ph; - - if (x3a==0) return 0; - ph = statehash(key); - h = ph & (x3a->size-1); - np = x3a->ht[h]; - while (np) { - if (statecmp(np->key,key)==0) { - /* An existing entry with the same key is found. */ - /* Fail because overwrite is not allows. */ - return 0; - } - np = np->next; - } - if (x3a->count>=x3a->size) { - /* Need to make the hash table bigger */ - int i,size; - struct s_x3 array; - array.size = size = x3a->size*2; - array.count = x3a->count; - array.tbl = (x3node*)malloc( - (sizeof(x3node) + sizeof(x3node*))*size) ; - if (array.tbl==0) return 0; /* Fail due to malloc failure */ - array.ht = (x3node**)&(array.tbl[size]); - for(i=0; icount; i++){ - x3node *oldnp, *newnp; - oldnp = &(x3a->tbl[i]); - h = statehash(oldnp->key) & (size-1); - newnp = &(array.tbl[i]); - if (array.ht[h]) array.ht[h]->from = &(newnp->next); - newnp->next = array.ht[h]; - newnp->key = oldnp->key; - newnp->data = oldnp->data; - newnp->from = &(array.ht[h]); - array.ht[h] = newnp; - } - free(x3a->tbl); - *x3a = array; - } - /* Insert the new data */ - h = ph & (x3a->size-1); - np = &(x3a->tbl[x3a->count++]); - np->key = key; - np->data = data; - if (x3a->ht[h]) x3a->ht[h]->from = &(np->next); - np->next = x3a->ht[h]; - x3a->ht[h] = np; - np->from = &(x3a->ht[h]); - return 1; -} - -/* Return a pointer to data assigned to the given key. Return NULL -** if no such key. */ -struct state *State_find(struct config *key) -{ - int h; - x3node *np; - - if (x3a==0) return 0; - h = statehash(key) & (x3a->size-1); - np = x3a->ht[h]; - while (np) { - if (statecmp(np->key,key)==0) break; - np = np->next; - } - return np ? np->data : 0; -} - -/* Return an array of pointers to all data in the table. -** The array is obtained from malloc. Return NULL if memory allocation -** problems, or if the array is empty. */ -struct state **State_arrayof() -{ - struct state **array; - int i,size; - if (x3a==0) return 0; - size = x3a->count; - array = (struct state **)malloc (sizeof(struct state *)*size) ; - if (array) { - for(i=0; itbl[i].data; - } - return array; -} diff --git a/c/parsing/lemon_state_table.h b/c/parsing/lemon_state_table.h deleted file mode 100644 index a91f44547..000000000 --- a/c/parsing/lemon_state_table.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef LEMON_STATE_TABLE_H -#define LEMON_STATE_TABLE_H - -/* Routines to manage the state table */ - -#include "lemon_structs.h" - -struct state *State_new(); -void State_init(void); -int State_insert(struct state *, struct config *); -struct state *State_find(struct config *); -struct state **State_arrayof(); - -#endif // LEMON_STATE_TABLE_H diff --git a/c/parsing/lemon_string.c b/c/parsing/lemon_string.c deleted file mode 100644 index 2055b3102..000000000 --- a/c/parsing/lemon_string.c +++ /dev/null @@ -1,144 +0,0 @@ -#include -#include -#include -#include "lemon_memory.h" -#include "lemon_string.h" - -int strhash(char *x) { - unsigned h = 0; - while (*x) h = h*13 + *(x++); - return (int)h; -} - -// ================================================================ -/* There is one instance of the following structure for each -** associative array of type "x1". -*/ -struct s_x1 { - int size; /* The number of available slots. Must be a power of 2, >= 1. */ - int count; /* Number of currently slots filled */ - struct s_x1node *tbl; /* The data stored here */ - struct s_x1node **ht; /* Hash table for lookups */ -}; - -/* There is one instance of this structure for every data element -** in an associative array of type "x1". -*/ -typedef struct s_x1node { - char *data; /* The data */ - struct s_x1node *next; /* Next entry with the same hash */ - struct s_x1node **from; /* Previous link */ -} x1node; - -/* There is only one instance of the array, which is the following */ -static struct s_x1 *x1a; - -// ================================================================ -/* Works like strdup, sort of. Save a string in malloced memory, but -** keep strings in a table so that the same string is not in more -** than one place. -*/ -char *Strsafe(char *y) { - char *z; - - z = Strsafe_find(y); - if (z==0 && (z=malloc (strlen(y)+1) )!=0) { - strcpy(z,y); - Strsafe_insert(z); - } - MemoryCheck(z); - return z; -} - -/* Allocate a new associative array */ -void Strsafe_init(){ - if (x1a) return; - x1a = (struct s_x1*)malloc (sizeof(struct s_x1)) ; - if (x1a) { - x1a->size = 1024; - x1a->count = 0; - x1a->tbl = (x1node*)malloc ( - (sizeof(x1node) + sizeof(x1node*))*1024) ; - if (x1a->tbl==0) { - free(x1a); - x1a = 0; - } else { - int i; - x1a->ht = (x1node**)&(x1a->tbl[1024]); - for(i=0; i<1024; i++) x1a->ht[i] = 0; - } - } -} - -/* Insert a new record into the array. Return TRUE if successful. -** Prior data with the same key is NOT overwritten */ -int Strsafe_insert(char *data) -{ - x1node *np; - int h; - int ph; - - if (x1a==0) return 0; - ph = strhash(data); - h = ph & (x1a->size-1); - np = x1a->ht[h]; - while (np) { - if (strcmp(np->data,data)==0) { - /* An existing entry with the same key is found. */ - /* Fail because overwrite is not allows. */ - return 0; - } - np = np->next; - } - if (x1a->count>=x1a->size) { - /* Need to make the hash table bigger */ - int i,size; - struct s_x1 array; - array.size = size = x1a->size*2; - array.count = x1a->count; - array.tbl = (x1node*)malloc( - (sizeof(x1node) + sizeof(x1node*))*size) ; - if (array.tbl==0) return 0; /* Fail due to malloc failure */ - array.ht = (x1node**)&(array.tbl[size]); - for(i=0; icount; i++){ - x1node *oldnp, *newnp; - oldnp = &(x1a->tbl[i]); - h = strhash(oldnp->data) & (size-1); - newnp = &(array.tbl[i]); - if (array.ht[h]) array.ht[h]->from = &(newnp->next); - newnp->next = array.ht[h]; - newnp->data = oldnp->data; - newnp->from = &(array.ht[h]); - array.ht[h] = newnp; - } - free(x1a->tbl); - *x1a = array; - } - /* Insert the new data */ - h = ph & (x1a->size-1); - np = &(x1a->tbl[x1a->count++]); - np->data = data; - if (x1a->ht[h]) x1a->ht[h]->from = &(np->next); - np->next = x1a->ht[h]; - x1a->ht[h] = np; - np->from = &(x1a->ht[h]); - return 1; -} - -/* Return a pointer to data assigned to the given key. Return NULL -** if no such key. */ -char *Strsafe_find(char *key) -{ - int h; - x1node *np; - - if (x1a==0) return 0; - h = strhash(key) & (x1a->size-1); - np = x1a->ht[h]; - while (np) { - if (strcmp(np->data,key)==0) break; - np = np->next; - } - return np ? np->data : 0; -} diff --git a/c/parsing/lemon_string.h b/c/parsing/lemon_string.h deleted file mode 100644 index e2f96090a..000000000 --- a/c/parsing/lemon_string.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef LEMON_STRING_H -#define LEMON_STRING_H - -int strhash(char *x); - -char *Strsafe(char*); -void Strsafe_init(); -int Strsafe_insert(char *); -char *Strsafe_find(char *); - -#endif // LEMON_STRING_H diff --git a/c/parsing/lemon_structs.h b/c/parsing/lemon_structs.h deleted file mode 100644 index 963421d7e..000000000 --- a/c/parsing/lemon_structs.h +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef LEMON_STRUCTS_H -#define LEMON_STRUCTS_H - -typedef enum {B_FALSE=0, B_TRUE} Boolean; - -// Symbols (terminals and nonterminals) of the grammar are stored in the following: -struct symbol { - char *name; /* Name of the symbol */ - int index; /* Index number for this symbol */ - enum { - TERMINAL, - NONTERMINAL - } type; /* Symbols are all either TERMINALS or NTs */ - struct rule *rule; /* Linked list of rules of this (if an NT) */ - struct symbol *fallback; /* fallback token in case this token doesn't parse */ - int prec; /* Precedence if defined (-1 otherwise) */ - enum e_assoc { - LEFT, - RIGHT, - NONE, - UNK - } assoc; /* Associativity if predecence is defined */ - char *firstset; /* First-set for all rules of this symbol */ - Boolean lambda; /* True if NT and can generate an empty string */ - char *destructor; /* Code which executes whenever this symbol is - ** popped from the stack during error processing */ - int destructorln; /* Line number of destructor code */ - char *datatype; /* The data type of information held by this - ** object. Only used if type==NONTERMINAL */ - int dtnum; /* The data type number. In the parser, the value - ** stack is a union. The .yy%d element of this - ** union is the correct data type for this object */ -}; - -// Each production rule in the grammar is stored in the following structure. -struct rule { - struct symbol *lhs; /* Left-hand side of the rule */ - char *lhsalias; /* Alias for the LHS (NULL if none) */ - int ruleline; /* Line number for the rule */ - int nrhs; /* Number of RHS symbols */ - struct symbol **rhs; /* The RHS symbols */ - char **rhsalias; /* An alias for each RHS symbol (NULL if none) */ - int line; /* Line number at which code begins */ - char *code; /* The code executed when this rule is reduced */ - struct symbol *precsym; /* Precedence symbol for this rule */ - int index; /* An index number for this rule */ - Boolean canReduce; /* True if this rule is ever reduced */ - struct rule *nextlhs; /* Next rule with the same LHS */ - struct rule *next; /* Next rule in the global list */ -}; - -// A configuration is a production rule of the grammar together with -// a mark (dot) showing how much of that rule has been processed so far. -// Configurations also contain a follow-set which is a list of terminal -// symbols which are allowed to immediately follow the end of the rule. -// Every configuration is recorded as an instance of the following: -struct config { - struct rule *rp; // The rule upon which the configuration is based - int dot; // The parse point - char *fws; // Follow-set for this configuration only - struct plink *fplp; // Follow-set forward propagation links - struct plink *bplp; // Follow-set backwards propagation links - struct state *stp; // Pointer to state which contains this - enum { - COMPLETE, // The status is used during followset and - INCOMPLETE // shift computations - } status; - struct config *next; // Next configuration in the state - struct config *bp; // The next basis configuration -}; - -// Every shift or reduce operation is stored as one of the following -struct action { - struct symbol *sp; // The look-ahead symbol - enum e_action { - SHIFT, - ACCEPT, - REDUCE, - ERROR, - CONFLICT, // Was a reduce, but part of a conflict - SH_RESOLVED, // Was a shift. Precedence resolved conflict - RD_RESOLVED, // Was reduce. Precedence resolved conflict - NOT_USED // Deleted by compression - } type; - union { - struct state *stp; // The new state, if a shift - struct rule *rp; // The rule, if a reduce - } x; - struct action *next; // Next action for this state - struct action *collide; // Next action with the same hash -}; - -// Each state of the generated parser's finite state machine -// is encoded as an instance of the following structure. -struct state { - struct config *bp; // The basis configurations for this state - struct config *cfp; // All configurations in this set - int index; // Sequencial number for this state - struct action *ap; // Array of actions for this state - int nTknAct, nNtAct; // Number of actions on terminals and nonterminals - int iTknOfst, iNtOfst; // yy_action[] offset for terminals and nonterms - int iDflt; // Default action -}; -#define NO_OFFSET (-2147483647) - -// A followset propagation link indicates that the contents of one -// configuration followset should be propagated to another whenever -// the first changes. -struct plink { - struct config *cfp; // The configuration to which linked - struct plink *next; // The next propagate link -}; - -// The state vector for the entire parser generator is recorded as -// follows. (LEMON uses no global variables and makes little use of -// static variables. Fields in the following structure can be thought -// of as being global variables in the program.) -struct lemon { - struct state **sorted; // Table of states sorted by state number - struct rule *rule; // List of all rules - int nstate; // Number of states - int nrule; // Number of rules - int nsymbol; // Number of terminal and nonterminal symbols - int nterminal; // Number of terminal symbols - struct symbol **symbols; // Sorted array of pointers to symbols - int errorcnt; // Number of errors - struct symbol *errsym; // The error symbol - char *name; // Name of the generated parser - char *arg; // Declaration of the 3th argument to parser - char *tokentype; // Type of terminal symbols in the parser stack - char *vartype; // The default type of non-terminal symbols - char *start; // Name of the start symbol for the grammar - char *stacksize; // Size of the parser stack - char *include; // Code to put at the start of the C file - int includeln; // Line number for start of include code - char *error; // Code to execute when an error is seen - int errorln; // Line number for start of error code - char *overflow; // Code to execute on a stack overflow - int overflowln; // Line number for start of overflow code - char *failure; // Code to execute on parser failure - int failureln; // Line number for start of failure code - char *accept; // Code to execute when the parser excepts - int acceptln; // Line number for the start of accept code - char *extracode; // Code appended to the generated file - int extracodeln; // Line number for the start of the extra code - char *tokendest; // Code to execute to destroy token data - int tokendestln; // Line number for token destroyer code - char *vardest; // Code for the default non-terminal destructor - int vardestln; // Line number for default non-term destructor code - char *filename; // Name of the input file - char *outname; // Name of the current output file - char *tokenprefix; // A prefix added to token names in the .h file - int nconflict; // Number of parsing conflicts - int tablesize; // Size of the parse tables - int basisflag; // Print only basis configurations - int has_fallback; // True if any %fallback is seen in the grammer - char *argv0; // Name of the program -}; - -#endif // LEMON_STRUCTS_H diff --git a/c/parsing/lemon_symbol.c b/c/parsing/lemon_symbol.c deleted file mode 100644 index be07576ae..000000000 --- a/c/parsing/lemon_symbol.c +++ /dev/null @@ -1,203 +0,0 @@ -#include -#include -#include -#include -#include "lemon_symbol.h" -#include "lemon_memory.h" -#include "lemon_string.h" - -// ================================================================ -/* There is one instance of the following structure for each -** associative array of type "x2". -*/ -struct s_x2 { - int size; /* The number of available slots. Must be a power of 2, >= 1. */ - int count; /* Number of currently slots filled */ - struct s_x2node *tbl; /* The data stored here */ - struct s_x2node **ht; /* Hash table for lookups */ -}; - -/* There is one instance of this structure for every data element -** in an associative array of type "x2". -*/ -typedef struct s_x2node { - struct symbol *data; /* The data */ - char *key; /* The key */ - struct s_x2node *next; /* Next entry with the same hash */ - struct s_x2node **from; /* Previous link */ -} x2node; - -/* There is only one instance of the array, which is the following */ -static struct s_x2 *x2a; - -// ================================================================ -/* Return a pointer to the (terminal or nonterminal) symbol "x". -** Create a new symbol if this is the first time "x" has been seen. -*/ -struct symbol *Symbol_new(char *x) -{ - struct symbol *sp; - - sp = Symbol_find(x); - if (sp==0) { - sp = (struct symbol *)malloc (sizeof(struct symbol)) ; - MemoryCheck(sp); - sp->name = Strsafe(x); - sp->type = isupper(*x) ? TERMINAL : NONTERMINAL; - sp->rule = 0; - sp->fallback = 0; - sp->prec = -1; - sp->assoc = UNK; - sp->firstset = 0; - sp->lambda = B_FALSE; - sp->destructor = 0; - sp->datatype = 0; - Symbol_insert(sp,sp->name); - } - return sp; -} - -/* Allocate a new associative array */ -void Symbol_init(){ - if (x2a) return; - x2a = (struct s_x2*)malloc (sizeof(struct s_x2)) ; - if (x2a) { - x2a->size = 128; - x2a->count = 0; - x2a->tbl = (x2node*)malloc ( - (sizeof(x2node) + sizeof(x2node*))*128) ; - if (x2a->tbl==0) { - free(x2a); - x2a = 0; - } else { - int i; - x2a->ht = (x2node**)&(x2a->tbl[128]); - for(i=0; i<128; i++) x2a->ht[i] = 0; - } - } -} - -/* Insert a new record into the array. Return TRUE if successful. -** Prior data with the same key is NOT overwritten */ -int Symbol_insert(struct symbol *data, char *key) -{ - x2node *np; - int h; - int ph; - - if (x2a==0) return 0; - ph = strhash(key); - h = ph & (x2a->size-1); - np = x2a->ht[h]; - while (np) { - if (strcmp(np->key,key)==0) { - /* An existing entry with the same key is found. */ - /* Fail because overwrite is not allows. */ - return 0; - } - np = np->next; - } - if (x2a->count>=x2a->size) { - /* Need to make the hash table bigger */ - int i,size; - struct s_x2 array; - array.size = size = x2a->size*2; - array.count = x2a->count; - array.tbl = (x2node*)malloc( - (sizeof(x2node) + sizeof(x2node*))*size) ; - if (array.tbl==0) return 0; /* Fail due to malloc failure */ - array.ht = (x2node**)&(array.tbl[size]); - for(i=0; icount; i++){ - x2node *oldnp, *newnp; - oldnp = &(x2a->tbl[i]); - h = strhash(oldnp->key) & (size-1); - newnp = &(array.tbl[i]); - if (array.ht[h]) array.ht[h]->from = &(newnp->next); - newnp->next = array.ht[h]; - newnp->key = oldnp->key; - newnp->data = oldnp->data; - newnp->from = &(array.ht[h]); - array.ht[h] = newnp; - } - free(x2a->tbl); - *x2a = array; - } - /* Insert the new data */ - h = ph & (x2a->size-1); - np = &(x2a->tbl[x2a->count++]); - np->key = key; - np->data = data; - if (x2a->ht[h]) x2a->ht[h]->from = &(np->next); - np->next = x2a->ht[h]; - x2a->ht[h] = np; - np->from = &(x2a->ht[h]); - return 1; -} - -/* Return a pointer to data assigned to the given key. Return NULL -** if no such key. */ -struct symbol *Symbol_find(char *key) -{ - int h; - x2node *np; - - if (x2a==0) return 0; - h = strhash(key) & (x2a->size-1); - np = x2a->ht[h]; - while (np) { - if (strcmp(np->key,key)==0) break; - np = np->next; - } - return np ? np->data : 0; -} - -/* Return the n-th data. Return NULL if n is out of range. */ -struct symbol *Symbol_Nth(int n) -{ - struct symbol *data; - if (x2a && n>0 && n<=x2a->count) { - data = x2a->tbl[n-1].data; - } else { - data = 0; - } - return data; -} - -/* Return the size of the array */ -int Symbol_count() -{ - return x2a ? x2a->count : 0; -} - -/* Return an array of pointers to all data in the table. -** The array is obtained from malloc. Return NULL if memory allocation -** problems, or if the array is empty. */ -struct symbol **Symbol_arrayof() -{ - struct symbol **array; - int i,size; - if (x2a==0) return 0; - size = x2a->count; - array = (struct symbol **)malloc (sizeof(struct symbol *)*size) ; - if (array) { - for(i=0; itbl[i].data; - } - return array; -} - -/* Compare two symbols for working purposes -** -** Symbols that begin with upper case letters (terminals or tokens) -** must sort before symbols that begin with lower case letters -** (non-terminals). Other than that, the order does not matter. -** -** We find experimentally that leaving the symbols in their original -** order (the order they appeared in the grammar file) gives the -** smallest parser tables in SQLite. -*/ -int Symbolcmpp(struct symbol **a, struct symbol **b) { - int i1 = (**a).index + 10000000*((**a).name[0]>'Z'); - int i2 = (**b).index + 10000000*((**b).name[0]>'Z'); - return i1-i2; -} diff --git a/c/parsing/lemon_symbol.h b/c/parsing/lemon_symbol.h deleted file mode 100644 index b3893a813..000000000 --- a/c/parsing/lemon_symbol.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef LEMON_SYMBOL_H -#define LEMON_SYMBOL_H - -#include "lemon_structs.h" - -struct symbol *Symbol_new(char *x); -void Symbol_init(); -int Symbol_insert(struct symbol *data, char *key); -struct symbol *Symbol_find(char *key); -struct symbol *Symbol_Nth(int n); -int Symbol_count(); -struct symbol **Symbol_arrayof(); -int Symbolcmpp(struct symbol **a, struct symbol **b); - -#endif // LEMON_SYMBOL_H diff --git a/c/parsing/lempar.c b/c/parsing/lempar.c deleted file mode 100644 index a912f311e..000000000 --- a/c/parsing/lempar.c +++ /dev/null @@ -1,692 +0,0 @@ -/* Driver template for the LEMON parser generator. -** The author disclaims copyright to this source code. -*/ -/* First off, code is include which follows the "include" declaration -** in the input file. */ -#include -%% -/* Next is all token values, in a form suitable for use by makeheaders. -** This section will be null unless lemon is run with the -m switch. -*/ -/* -** These constants (all generated automatically by the parser generator) -** specify the various kinds of tokens (terminals) that the parser -** understands. -** -** Each symbol here is a terminal symbol in the grammar. -*/ -%% -/* Make sure the INTERFACE macro is defined. -*/ -#ifndef INTERFACE -# define INTERFACE 1 -#endif -/* The next thing included is series of defines which control -** various aspects of the generated parser. -** YYCODETYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 terminals -** and nonterminals. "int" is used otherwise. -** YYNOCODE is a number of type YYCODETYPE which corresponds -** to no legal terminal or nonterminal number. This -** number is used to fill in empty slots of the hash -** table. -** YYFALLBACK If defined, this indicates that one or more tokens -** have fall-back values which should be used if the -** original value of the token will not parse. -** YYACTIONTYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 rules and -** states combined. "int" is used otherwise. -** ParseTOKENTYPE is the data type used for minor tokens given -** directly to the parser from the tokenizer. -** YYMINORTYPE is the data type used for all minor tokens. -** This is typically a union of many types, one of -** which is ParseTOKENTYPE. The entry in the union -** for base tokens is called "yy0". -** YYSTACKDEPTH is the maximum depth of the parser's stack. -** ParseARG_SDECL A static variable declaration for the %extra_argument -** ParseARG_PDECL A parameter declaration for the %extra_argument -** ParseARG_STORE Code to store %extra_argument into pparser -** ParseARG_FETCH Code to extract %extra_argument from pparser -** YYNSTATE the combined number of states. -** YYNRULE the number of rules in the grammar -** YYERRORSYMBOL is the code number of the error symbol. If not -** defined, then do no error processing. -*/ -%% -#define YY_NO_ACTION (YYNSTATE+YYNRULE+2) -#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) -#define YY_ERROR_ACTION (YYNSTATE+YYNRULE) - -/* Next are that tables used to determine what action to take based on the -** current state and lookahead token. These tables are used to implement -** functions that take a state number and lookahead value and return an -** action integer. -** -** Suppose the action integer is N. Then the action is determined as -** follows -** -** 0 <= N < YYNSTATE Shift N. That is, push the lookahead -** token onto the stack and goto state N. -** -** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. -** -** N == YYNSTATE+YYNRULE A syntax error has occurred. -** -** N == YYNSTATE+YYNRULE+1 The parser accepts its input. -** -** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused -** slots in the yy_action[] table. -** -** The action table is constructed as a single large table named yy_action[]. -** Given state S and lookahead X, the action is computed as -** -** yy_action[ yy_shift_ofst[S] + X ] -** -** If the index value yy_shift_ofst[S]+X is out of range or if the value -** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] -** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table -** and that yy_default[S] should be used instead. -** -** The formula above is for computing the action when the lookahead is -** a terminal symbol. If the lookahead is a non-terminal (as occurs after -** a reduce action) then the yy_reduce_ofst[] array is used in place of -** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of -** YY_SHIFT_USE_DFLT. -** -** The following are the tables generated in this section: -** -** yy_action[] A single table containing all actions. -** yy_lookahead[] A table containing the lookahead for each entry in -** yy_action. Used to detect hash collisions. -** yy_shift_ofst[] For each state, the offset into yy_action for -** shifting terminals. -** yy_reduce_ofst[] For each state, the offset into yy_action for -** shifting non-terminals after a reduce. -** yy_default[] Default action for each state. -*/ -%% -#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0])) - -/* The next table maps tokens into fallback tokens. If a construct -** like the following: -** -** %fallback ID X Y Z. -** -** appears in the grammar, then ID becomes a fallback token for X, Y, -** and Z. Whenever one of the tokens X, Y, or Z is input to the parser -** but it does not parse, the type of the token is changed to ID and -** the parse is retried before an error is thrown. -*/ -#ifdef YYFALLBACK -static const YYCODETYPE yyFallback[] = { -%% -}; -#endif /* YYFALLBACK */ - -/* The following structure represents a single element of the -** parser's stack. Information stored includes: -** -** + The state number for the parser at this level of the stack. -** -** + The value of the token stored at this level of the stack. -** (In other words, the "major" token.) -** -** + The semantic value stored at this level of the stack. This is -** the information used by the action routines in the grammar. -** It is sometimes called the "minor" token. -*/ -struct yyStackEntry { - int stateno; /* The state-number */ - int major; /* The major token value. This is the code - ** number for the token at this stack level */ - YYMINORTYPE minor; /* The user-supplied minor token value. This - ** is the value of the token */ -}; -typedef struct yyStackEntry yyStackEntry; - -/* The state of the parser is completely contained in an instance of -** the following structure. */ -struct _lemon_parser_t { - int yyidx; /* Index of top element in stack */ - int yyerrcnt; /* Shifts left before out of the error */ - ParseARG_SDECL /* A place to hold %extra_argument */ - yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ -}; -typedef struct _lemon_parser_t lemon_parser_t; - -#ifndef NDEBUG -#include -static FILE *yyTraceFILE = 0; -static char *yyTracePrompt = 0; -#endif /* NDEBUG */ - -#ifndef NDEBUG -/* -** Turn parser tracing on by giving a stream to which to write the trace -** and a prompt to preface each trace message. Tracing is turned off -** by making either argument NULL -** -** Inputs: -**
    -**
  • A FILE* to which trace output should be written. -** If NULL, then tracing is turned off. -**
  • A prefix string written at the beginning of every -** line of trace output. If NULL, then tracing is -** turned off. -**
-** -** Outputs: -** None. -*/ -void ParseTrace(FILE *TraceFILE, char *zTracePrompt) { - yyTraceFILE = TraceFILE; - yyTracePrompt = zTracePrompt; - if (yyTraceFILE==0) - yyTracePrompt = 0; - else if (yyTracePrompt==0) - yyTraceFILE = 0; -} -#endif /* NDEBUG */ - -#ifndef NDEBUG -/* For tracing shifts, the names of all terminals and nonterminals -** are required. The following table supplies these names */ -static const char *yyTokenName[] = { -%% -}; -#endif /* NDEBUG */ - -#ifndef NDEBUG -/* For tracing reduce actions, the names of all rules are required. -*/ -static const char *yyRuleName[] = { -%% -}; -#endif /* NDEBUG */ - -/* -** This function returns the symbolic name associated with a token -** value. -*/ -const char *ParseTokenName(int tokenType) { -#ifndef NDEBUG - if (tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0]))) { - return yyTokenName[tokenType]; - } else { - return "Unknown"; - } -#else - return ""; -#endif -} - -/* -** This function allocates a new parser. -** The only argument is a pointer to a function which works like -** malloc. -** -** Inputs: -** A pointer to the function used to allocate memory. -** -** Outputs: -** A pointer to a parser. This pointer is used in subsequent calls -** to Parse and lemon_parser_free. -*/ -void *lemon_parser_alloc(void *(*mallocProc)(size_t)){ - lemon_parser_t *pParser; - pParser = (lemon_parser_t*)(*mallocProc) ((size_t)sizeof(lemon_parser_t)) ; - if (pParser) { - pParser->yyidx = -1; - } - return pParser; -} - -/* The following function deletes the value associated with a -** symbol. The symbol can be either a terminal or nonterminal. -** "yymajor" is the symbol code, and "yypminor" is a pointer to -** the value. -*/ -void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){ - switch (yymajor) { - /* Here is inserted the actions which take place when a - ** terminal or non-terminal is destroyed. This can happen - ** when the symbol is popped from the stack during a - ** reduce or during error processing or when a parser is - ** being destroyed before it is finished parsing. - ** - ** Note: during a reduce, the only symbols destroyed are those - ** which appear on the RHS of the rule, but which are not used - ** inside the C code. - */ -%% - default: break; /* If no destructor action specified: do nothing */ - } -} - -/* -** Pop the parser's stack once. -** -** If there is a destructor routine associated with the token which -** is popped from the stack, then call it. -** -** Return the major token number for the symbol popped. -*/ -static int yy_pop_parser_stack(lemon_parser_t *pParser){ - YYCODETYPE yymajor; - yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; - - if (pParser->yyidx<0) return 0; -#ifndef NDEBUG - if (yyTraceFILE && pParser->yyidx>=0) { - fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); - } -#endif - yymajor = yytos->major; - yy_destructor (yymajor, &yytos->minor); - pParser->yyidx--; - return yymajor; -} - -/* -** Deallocate and destroy a parser. Destructors are all called for -** all stack elements before shutting the parser down. -** -** Inputs: -**
    -**
  • A pointer to the parser. This should be a pointer -** obtained from lemon_parser_alloc. -**
  • A pointer to a function used to reclaim memory obtained -** from malloc. -**
-*/ -void lemon_parser_free( - void *pvparser, /* The parser to be deleted */ - void (*freeProc)(void*)) /* Function used to reclaim memory */ -{ - lemon_parser_t *pparser = (lemon_parser_t*)pvparser; - if (pparser==0) return; - while (pparser->yyidx>=0) yy_pop_parser_stack(pparser); - (*freeProc)((void*)pparser); -} - -/* -** Find the appropriate action for a parser given the terminal -** look-ahead token iLookAhead. -** -** If the look-ahead token is YYNOCODE, then check to see if the action is -** independent of the look-ahead. If it is, return the action, otherwise -** return YY_NO_ACTION. -*/ -static int yy_find_shift_action( - lemon_parser_t *pparser, /* The parser */ - int iLookAhead) /* The look-ahead token */ -{ - int i; - int stateno = pparser->yystack[pparser->yyidx].stateno; - - /* if (pparser->yyidx<0) return YY_NO_ACTION; */ - i = yy_shift_ofst[stateno]; - if (i==YY_SHIFT_USE_DFLT) { - return yy_default[stateno]; - } - if (iLookAhead==YYNOCODE) { - return YY_NO_ACTION; - } - i += iLookAhead; - if (i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead) { -#ifdef YYFALLBACK - int iFallback; /* Fallback token */ - if (iLookAhead %s\n", - yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); - } -#endif - return yy_find_shift_action(pparser, iFallback); - } -#endif - return yy_default[stateno]; - } else { - return yy_action[i]; - } -} - -/* -** Find the appropriate action for a parser given the non-terminal -** look-ahead token iLookAhead. -** -** If the look-ahead token is YYNOCODE, then check to see if the action is -** independent of the look-ahead. If it is, return the action, otherwise -** return YY_NO_ACTION. -*/ -static int yy_find_reduce_action( - lemon_parser_t *pparser, /* The parser */ - int iLookAhead) /* The look-ahead token */ -{ - int i; - int stateno = pparser->yystack[pparser->yyidx].stateno; - - i = yy_reduce_ofst[stateno]; - if (i==YY_REDUCE_USE_DFLT) { - return yy_default[stateno]; - } - if (iLookAhead==YYNOCODE) { - return YY_NO_ACTION; - } - i += iLookAhead; - if (i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead) { - return yy_default[stateno]; - } else { - return yy_action[i]; - } -} - -/* -** Perform a shift action. -*/ -static void yy_shift( - lemon_parser_t *pparser, /* The parser to be shifted */ - int yyNewState, /* The new state to shift in */ - int yyMajor, /* The major token to shift in */ - YYMINORTYPE *yypMinor) /* Pointer ot the minor token to shift in */ -{ - yyStackEntry *yytos; - pparser->yyidx++; - if (pparser->yyidx>=YYSTACKDEPTH) { - ParseARG_FETCH; - pparser->yyidx--; -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); - } -#endif - while (pparser->yyidx>=0) yy_pop_parser_stack(pparser); - /* Here code is inserted which will execute if the parser - ** stack every overflows */ -%% - ParseARG_STORE; /* Suppress warning about unused %extra_argument var */ - return; - } - yytos = &pparser->yystack[pparser->yyidx]; - yytos->stateno = yyNewState; - yytos->major = yyMajor; - yytos->minor = *yypMinor; -#ifndef NDEBUG - if (yyTraceFILE && pparser->yyidx>0) { - int i; - fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); - fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); - for(i=1; i<=pparser->yyidx; i++) - fprintf(yyTraceFILE," %s", yyTokenName[pparser->yystack[i].major]); - fprintf(yyTraceFILE,"\n"); - } -#endif -} - -/* The following table contains information about every rule that -** is used during the reduce. -*/ -static struct { - YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ - unsigned char nrhs; /* Number of right-hand side symbols in the rule */ -} yyRuleInfo[] = { -%% -}; - -static void yy_accept(lemon_parser_t*); /* Forward Declaration */ - -/* -** Perform a reduce action and the shift that must immediately -** follow the reduce. -*/ -static void yy_reduce( - lemon_parser_t *pparser, /* The parser */ - int yyruleno) /* Number of the rule by which to reduce */ -{ - int yygoto = -999 ; /* The next state */ - int yyact = -999; /* The next action */ - YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ - yyStackEntry *yymsp; /* The top of the parser's stack */ - int yysize; /* Amount to pop the stack */ - ParseARG_FETCH; - yymsp = &pparser->yystack[pparser->yyidx]; -#ifndef NDEBUG - if (yyTraceFILE && yyruleno>=0 - && yyruleno - ** { ... } // User supplied code - ** #line - ** break; - */ -%% - }; - yygoto = yyRuleInfo[yyruleno].lhs; - yysize = yyRuleInfo[yyruleno].nrhs; - pparser->yyidx -= yysize; - yyact = yy_find_reduce_action(pparser,yygoto); - if (yyact < YYNSTATE) { - yy_shift(pparser,yyact,yygoto,&yygotominor); - } else if (yyact == YYNSTATE + YYNRULE + 1) { - yy_accept(pparser); - } -} - -/* -** The following code executes when the parse fails -*/ -static void yy_parse_failed(lemon_parser_t *pparser) { - ParseARG_FETCH; -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); - } -#endif - while (pparser->yyidx >= 0) - yy_pop_parser_stack(pparser); - /* Here code is inserted which will be executed whenever the - ** parser fails */ -%% - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} - -/* -** The following code executes when a syntax error first occurs. -*/ -static void yy_syntax_error( - lemon_parser_t *pparser, /* The parser */ - int yymajor, /* The major type of the error token */ - YYMINORTYPE yyminor /* The minor type of the error token */ -){ - ParseARG_FETCH; -#define TOKEN (yyminor.yy0) -%% - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} - -/* -** The following is executed when the parser accepts -*/ -static void yy_accept(lemon_parser_t *pparser) { - ParseARG_FETCH; -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sAccept!\n", yyTracePrompt); - } -#endif - while (pparser->yyidx>=0) - yy_pop_parser_stack(pparser); - /* Here code is inserted which will be executed whenever the - ** parser accepts */ -%% - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} - -/* The main parser program. -** The first argument is a pointer to a structure obtained from -** "lemon_parser_alloc" which describes the current state of the parser. -** The second argument is the major token number. The third is -** the minor token. The fourth optional argument is whatever the -** user wants (and specified in the grammar) and is available for -** use by the action routines. -** -** Inputs: -**
    -**
  • A pointer to the parser (an opaque structure). -**
  • The major token number. -**
  • The minor token number. -**
  • An option argument of a grammar-specified type. -**
-** -** Outputs: -** None. -*/ - -int lemon_parser_parse_token( - void *pvparser, /* The parser */ - int yymajor, /* The major token code number */ - ParseTOKENTYPE yyminor /* The value for the token */ - ParseARG_PDECL) /* Optional %extra_argument parameter */ -{ - YYMINORTYPE yyminorunion; - int yyact; /* The parser action. */ - int yyendofinput; /* True if we are at the end of input */ - int yyerrorhit = 0; /* True if yymajor has invoked an error */ - lemon_parser_t *pparser; /* The parser */ - - int parse_code = 1; - - /* (re)initialize the parser, if necessary */ - pparser = (lemon_parser_t*)pvparser; - if (pparser->yyidx<0) { - if (yymajor==0) return 1; - pparser->yyidx = 0; - pparser->yyerrcnt = -1; - pparser->yystack[0].stateno = 0; - pparser->yystack[0].major = 0; - } - yyminorunion.yy0 = yyminor; - yyendofinput = (yymajor==0); - ParseARG_STORE; - -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sInput %s\n", yyTracePrompt, yyTokenName[yymajor]); - } -#endif - - do { - yyact = yy_find_shift_action(pparser,yymajor); - if (yyactyyerrcnt--; - if (yyendofinput && pparser->yyidx>=0) { - yymajor = 0; - } else { - yymajor = YYNOCODE; - } - } else if (yyact < YYNSTATE + YYNRULE) { - yy_reduce(pparser,yyact-YYNSTATE); - } else if (yyact == YY_ERROR_ACTION) { - int yymx; -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); - } -#endif -#ifdef YYERRORSYMBOL - /* A syntax error has occurred. - ** The response to an error depends upon whether or not the - ** grammar defines an error token "ERROR". - ** - ** This is what we do if the grammar does define ERROR: - ** - ** * Call the %syntax_error function. - ** - ** * Begin popping the stack until we enter a state where - ** it is legal to shift the error symbol, then shift - ** the error symbol. - ** - ** * Set the error count to three. - ** - ** * Begin accepting and shifting new tokens. No new error - ** processing will occur until three tokens have been - ** shifted successfully. - ** - */ - if (pparser->yyerrcnt<0) { - yy_syntax_error(pparser, yymajor, yyminorunion); - return 0; - } - yymx = pparser->yystack[pparser->yyidx].major; - if (yymx==YYERRORSYMBOL || yyerrorhit) { -#ifndef NDEBUG - if (yyTraceFILE) { - fprintf(yyTraceFILE,"%sDiscard input token %s\n", - yyTracePrompt, yyTokenName[yymajor]); - } -#endif - yy_destructor(yymajor,&yyminorunion); - yymajor = YYNOCODE; - } else { - while( - pparser->yyidx >= 0 && - yymx != YYERRORSYMBOL && - (yyact = yy_find_shift_action(pparser,YYERRORSYMBOL)) >= YYNSTATE - ){ - yy_pop_parser_stack(pparser); - } - if (pparser->yyidx < 0 || yymajor==0) { - yy_destructor(yymajor,&yyminorunion); - yy_parse_failed(pparser); - parse_code = 0; - yymajor = YYNOCODE; - } else if (yymx!=YYERRORSYMBOL) { - YYMINORTYPE u2; - u2.YYERRSYMDT = 0; - yy_shift(pparser,yyact,YYERRORSYMBOL,&u2); - } - } - pparser->yyerrcnt = 3; - yyerrorhit = 1; -#else /* YYERRORSYMBOL is not defined */ - /* This is what we do if the grammar does not define ERROR: - ** - ** * Report an error message, and throw away the input token. - ** - ** * If the input token is $, then fail the parse. - ** - ** As before, subsequent error messages are suppressed until - ** three input tokens have been successfully shifted. - */ - if (pparser->yyerrcnt<=0) { - yy_syntax_error(pparser, yymajor, yyminorunion); - return 0; - } - pparser->yyerrcnt = 3; - yy_destructor(yymajor,&yyminorunion); - if (yyendofinput) { - yy_parse_failed(pparser); - parse_code = 0; - } - yymajor = YYNOCODE; -#endif - } else { - yy_accept(pparser); - yymajor = YYNOCODE; - } - } while (yymajor!=YYNOCODE && pparser->yyidx>=0) ; - return parse_code; -} diff --git a/c/parsing/mlr_dsl_lexer.l b/c/parsing/mlr_dsl_lexer.l deleted file mode 100644 index 8d1798a76..000000000 --- a/c/parsing/mlr_dsl_lexer.l +++ /dev/null @@ -1,592 +0,0 @@ -%{ -#include "stdio.h" // for fileno() prototype -#include "string.h" // for strdup() prototype -#include "mlr_dsl_parse.h" -#include "../dsl/mlr_dsl_ast.h" -// http://flex.sourceforge.net/manual/Extra-Data.html - -// NOTE: any new keywords defined here should also be documented -// in dsl/mlr_dsl_cst.c's mlr_dsl_keyword_usage() et al. -%} - -%option reentrant -%option noyywrap -%option extra-type="struct _mlr_dsl_ast_node_t **" - -%% - -";" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_SEMICOLON; -} -"{" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LBRACE; -} -"}" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RBRACE; -} - -"=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); - return MD_TOKEN_ASSIGN; -} -"filter" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER); - return MD_TOKEN_FILTER; -} -"unset" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_UNSET); - return MD_TOKEN_UNSET; -} -"tee" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_TEE); - return MD_TOKEN_TEE; -} -"emitf" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITF); - return MD_TOKEN_EMITF; -} -"emitp" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITP); - return MD_TOKEN_EMITP; -} -"emit" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT); - return MD_TOKEN_EMIT; -} -"dump" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP); - return MD_TOKEN_DUMP; -} -"edump" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EDUMP); - return MD_TOKEN_EDUMP; -} -"print" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT); - return MD_TOKEN_PRINT; -} -"printn" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINTN); - return MD_TOKEN_PRINTN; -} -"eprint" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINT); - return MD_TOKEN_EPRINT; -} -"eprintn" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINTN); - return MD_TOKEN_EPRINTN; -} -"stdout" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDOUT); - return MD_TOKEN_STDOUT; -} -"stderr" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDERR); - return MD_TOKEN_STDERR; -} - -"func" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_FUNC_DEF; -} -"subr" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_SUBR_DEF; -} -"call" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_SUBR_CALL; -} -"return" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RETURN; -} -"begin" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_BEGIN; -} -"end" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_END; -} -"all" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ALL); - return MD_TOKEN_ALL; -} - -"do" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DO_WHILE); - return MD_TOKEN_DO; -} -"while" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_WHILE); - return MD_TOKEN_WHILE; -} -"for" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_FOR; -} -"in" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IN); - return MD_TOKEN_IN; -} -"break" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BREAK); - return MD_TOKEN_BREAK; -} -"continue" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTINUE); - return MD_TOKEN_CONTINUE; -} -"if" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_IF; -} -"elif" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_ELIF; -} -"else" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); - return MD_TOKEN_ELSE; -} - -"?" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_QUESTION_MARK; -} - -":" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_COLON; -} - -"||" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_OR; -} -"||=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_OR_EQUALS; -} -"^^" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_XOR; -} -"^^=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_XOR_EQUALS; -} -"&&" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_AND; -} -"&&=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_AND_EQUALS; -} - -"=~" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MATCHES; -} -"!=~" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOES_NOT_MATCH; -} -"==" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_EQ; -} -"!=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_NE; -} - -">" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_GT; -} -">=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_GE; -} -"<" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LT; -} -"<=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LE; -} - -"|" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_OR; -} -"|=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_OR_EQUALS; -} - -"^" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_XOR; -} -"^=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_XOR_EQUALS; -} - -"&" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_AND; -} -"&=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_AND_EQUALS; -} - -"<<" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_LSH; -} -"<<=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_LSH_EQUALS; -} -">>" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_RSH; -} -">>=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_RSH_EQUALS; -} - -"+" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_PLUS; -} -"+=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_PLUS_EQUALS; -} -"-" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MINUS; -} -"-=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MINUS_EQUALS; -} -"\." { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOT; -} -"\.=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DOT_EQUALS; -} -"*" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_TIMES; -} -"*=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_TIMES_EQUALS; -} -"/" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DIVIDE; -} -"/=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_DIVIDE_EQUALS; -} -"//" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_DIVIDE; -} -"//=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_DIVIDE_EQUALS; -} - -"\.+" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OPLUS; -} -"\.+=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OPLUS_EQUALS; -} -"\.-" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OMINUS; -} -"\.-=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OMINUS_EQUALS; -} -"\.*" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OTIMES; -} -"\.*=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_OTIMES_EQUALS; -} -"\./" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_ODIVIDE; -} -"\./=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_ODIVIDE_EQUALS; -} -"\.//" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_ODIVIDE; -} -"\.//=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_INT_ODIVIDE_EQUALS; -} - -"%" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MOD; -} -"%=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_MOD_EQUALS; -} - -"!" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_LOGICAL_NOT; -} - -"~" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_BITWISE_NOT; -} - -"**" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_POW; -} -"**=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); - return MD_TOKEN_POW_EQUALS; -} - -\$\* { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC); - return MD_TOKEN_FULL_SREC; -} -\$ { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_DOLLAR_SIGN; -} - -\$[a-zA-Z_0-9]+ { - // Note: the parser depends on the dollar sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); - return MD_TOKEN_FIELD_NAME; -} -\$\{([^\}]|\\.)*\} { - // Note: the parser depends on the dollar sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); - return MD_TOKEN_BRACED_FIELD_NAME; -} - -@[a-zA-Z_0-9]+ { - // Note: the parser depends on the at-sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); - return MD_TOKEN_UNBRACED_OOSVAR_NAME; -} -@\{([^\}]|\\.)*\} { - // Note: the parser depends on the percent-sign being here. If this is changed, - // that needs to be changed as well. - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); - return MD_TOKEN_BRACED_OOSVAR_NAME; -} -@ { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_AT_SIGN; -} -\@\* { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_OOSVAR); - return MD_TOKEN_FULL_OOSVAR; -} - -"\[" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LEFT_BRACKET; -} -"\]" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RIGHT_BRACKET; -} - -[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { - // Leading minus sign is handled via the unary-minus operator, not here. - // 123 - // 123. 123.4 - // .234 - // 1e2 - // 1e-2 - // 1.2e3 1.e3 - // 1.2e-3 1.e-3 - // .2e3 - // .2e-3 1.e-3 - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} -0x[0-9a-fA-F]+ { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); - return MD_TOKEN_NUMBER; -} - -\"([^\\\"]|\\.)*\" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); - return MD_TOKEN_STRING; -} - -\"([^\\\"]|\\.)*\"\i { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI); - return MD_TOKEN_REGEXI; -} - -"map" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_MAP; -} -"var" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_VAR; -} -"num" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION); - return MD_TOKEN_NUMERIC; -} -"int" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION); - return MD_TOKEN_INT; -} -"float" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION); - return MD_TOKEN_FLOAT; -} -"bool" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION); - return MD_TOKEN_BOOLEAN; -} -"str" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION); - return MD_TOKEN_STRING; -} - -"true" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); - return MD_TOKEN_TRUE; -} -"false" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); - return MD_TOKEN_FALSE; -} - -"IPS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"IFS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"IRS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"OPS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"OFS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"ORS" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} - -"NF" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"NR" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FNR" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FILENAME" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"FILENUM" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"M_PI" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"M_E" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); - return MD_TOKEN_CONTEXT_VARIABLE; -} -"ENV" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ENV); - return MD_TOKEN_ENV; -} - -[a-zA-Z_][a-zA-Z_0-9]* { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NON_SIGIL_NAME); - return MD_TOKEN_NON_SIGIL_NAME; -} - -"(" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_LPAREN; -} -")" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_RPAREN; -} - -"," { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); - return MD_TOKEN_COMMA; -} - -#.*\n { } - -[ \t\r\n] { } - -. { - return -1; -} -%% diff --git a/c/parsing/mlr_dsl_parse.y b/c/parsing/mlr_dsl_parse.y deleted file mode 100644 index 0558be620..000000000 --- a/c/parsing/mlr_dsl_parse.y +++ /dev/null @@ -1,2693 +0,0 @@ -// vim: set filetype=none: -// (Lemon files have .y extensions like Yacc files but are not Yacc.) - -%include { -#include -#include -#include -#include "../lib/mlrutil.h" -#include "../dsl/mlr_dsl_ast.h" -#include "../containers/sllv.h" - -// ================================================================ -// AST: -// * parens, commas, semis, line endings, whitespace are all stripped away -// * variable names and literal values remain as leaf nodes of the AST -// * = + - * / ** {function names} remain as non-leaf nodes of the AST -// CST: See mlr_dsl_cst.c -// -// Note: This parser accepts many things that are invalid, e.g. -// -// * begin{end{}} -- begin/end not at top level -// * begin{$x=1} -- references to stream records at begin/end -// * break/continue outside of for/while/do-while -// * return outside of a function definition -// * $x=x -- boundvars outside of for-loop variable bindings -// -// All of the above are enforced by the CST builder's semantic-analysis logic, -// which takes this parser's output AST as input. This is done (a) to keep this -// grammar from being overly complex, and (b) so we can get much more -// informative error messages in C than in Lemon ('syntax error'). -// -// The parser hooks all build up an abstract syntax tree specifically for the CST builder. -// For clearer visuals on what the ASTs look like: -// * See mlr_dsl_cst.c -// * See reg_test/run's filter -v and put -v outputs, e.g. in reg_test/expected/out -// * Do "mlr -n put -v 'your expression goes here'" -// ================================================================ - -} - -%token_type {mlr_dsl_ast_node_t*} -%default_type {mlr_dsl_ast_node_t*} -%extra_argument {mlr_dsl_ast_t* past} - -//void token_destructor(mlr_dsl_ast_node_t t) { -// printf("In token_destructor t->text(%s)=t->type(%lf)\n", t->text, t->type); -//} -//%token_destructor {token_destructor($$);} - -%parse_accept { -} - -// The caller is expected to provide more context. -%syntax_error { - fprintf(stderr, "mlr DSL: syntax error at \"%s\"\n", TOKEN->text); - -// This is confusing and (as is) worse than nothing. -// Ideally we want to show the position within the input of the syntax error. -// -// int n = sizeof(yyTokenName) / sizeof(yyTokenName[0]); -// for (int i = 0; i < n; ++i) { -// int a = yy_find_shift_action(pparser, (YYCODETYPE)i); -// if (a < YYNSTATE + YYNRULE) { -// fprintf(stderr, "Possible token \"%s\"\n", yyTokenName[i]); -// } -// } - -} - -// ================================================================ -md_body ::= md_statement_block(B). { - past->proot = B; -} - -// ---------------------------------------------------------------- -// Given "$a=1;$b=2;$c=3": since this is a bottom-up parser, we get first the "$a=1", then -// "$a=1;$b=2", then "$a=1;$b=2;$c=3", then finally realize that's the top level, or it's embedded -// within a cond-block, or for-loop body, etc. - -// * On the "$a=1" we make a sub-AST called "list" with child $a=1. -// * On the "$b=2" we append the next argument to get "list" having children $a=1 and $b=2. -// * On the "$c=3" we append the next argument to get "list" having children $a=1, $b=2, and $c=3. -// -// We handle statements of the form ' ; ; ' by parsing the empty spaces around the semicolons as NOP nodes. -// But, the NOP nodes are immediately stripped here and are not included in the AST we return. - -md_statement_block(A) ::= md_statement_braceless(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = mlr_dsl_ast_node_alloc_zary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } else { - A = mlr_dsl_ast_node_alloc_unary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); - } -} - -md_statement_block(A) ::= md_statement_braceful(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = mlr_dsl_ast_node_alloc_zary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK); - } else { - A = mlr_dsl_ast_node_alloc_unary("block", MD_AST_NODE_TYPE_STATEMENT_BLOCK, B); - } -} - -// This could also be done with the list on the left and statement on the right. However, -// curly-brace-terminated statements *end* with a semicolon; they don't start with one. So this seems -// to be the right way to differentiate. -md_statement_block(A) ::= md_statement_braceless(B) MD_TOKEN_SEMICOLON md_statement_block(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = C; - } else { - A = mlr_dsl_ast_node_prepend_arg(C, B); - } -} - -md_statement_block(A) ::= md_statement_braceful(B) md_statement_block(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = C; - } else { - A = mlr_dsl_ast_node_prepend_arg(C, B); - } -} - -// This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons: -md_statement_braceless(A) ::= . { - A = mlr_dsl_ast_node_alloc_zary("nop", MD_AST_NODE_TYPE_NOP); -} - -// Local-variable definitions at the current scope -md_statement_braceless(A) ::= md_untyped_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_numeric_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_int_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_float_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_boolean_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_string_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_map_local_definition(B). { A = B; } -md_statement_braceless(A) ::= md_nonindexed_local_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_indexed_local_assignment(B). { A = B; } - -// For user-defined functions -md_statement_braceless(A) ::= MD_TOKEN_RETURN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); -} -md_statement_braceless(A) ::= MD_TOKEN_RETURN md_map_literal(B). { - A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); -} -md_statement_braceless(A) ::= MD_TOKEN_RETURN MD_TOKEN_FULL_SREC(B). { - A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); -} -md_statement_braceless(A) ::= MD_TOKEN_RETURN MD_TOKEN_FULL_OOSVAR(B). { - A = mlr_dsl_ast_node_alloc_unary("return_value", MD_AST_NODE_TYPE_RETURN_VALUE, B); -} -// For user-defined subroutines -md_statement_braceless(A) ::= MD_TOKEN_RETURN. { - A = mlr_dsl_ast_node_alloc_zary("return_void", MD_AST_NODE_TYPE_RETURN_VOID); -} - -// Begin/end -md_statement_braceful(A) ::= md_func_block(B). { A = B; } -md_statement_braceful(A) ::= md_subr_block(B). { A = B; } -md_statement_braceful(A) ::= md_begin_block(B). { A = B; } -md_statement_braceful(A) ::= md_end_block(B). { A = B; } - -// Nested control structures: -md_statement_braceful(A) ::= md_cond_block(B). { A = B; } -md_statement_braceful(A) ::= md_while_block(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_full_srec(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_full_srec_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_full_oosvar(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_full_oosvar_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_oosvar(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_oosvar_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_local_map(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_local_map_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_map_literal(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_map_literal_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_func_retval(B). { A = B; } -md_statement_braceful(A) ::= md_for_loop_func_retval_key_only(B). { A = B; } -md_statement_braceful(A) ::= md_triple_for(B). { A = B; } -md_statement_braceful(A) ::= md_if_chain(B). { A = B; } - -md_statement_braceless(A) ::= MD_TOKEN_SUBR_CALL md_fcn_or_subr_call(B). { - A = mlr_dsl_ast_node_alloc_unary("subr_call", MD_AST_NODE_TYPE_SUBR_CALLSITE, B); -} - -// Not valid in begin/end since they refer to srecs: -md_statement_braceless(A) ::= md_srec_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_srec_indirect_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_srec_positional_name_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_srec_positional_value_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_oosvar_from_full_srec_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_full_srec_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_env_assignment(B). { A = B; } - -// Valid in begin/end since they don't refer to srecs (although the RHSs might): -md_statement_braceless(A) ::= md_do_while_block(B). { A = B; } -md_statement_braceless(A) ::= md_bare_boolean(B). { A = B; } -md_statement_braceless(A) ::= md_oosvar_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_full_oosvar_assignment(B). { A = B; } -md_statement_braceless(A) ::= md_filter(B). { A = B; } -md_statement_braceless(A) ::= md_unset(B). { A = B; } - -md_statement_braceless(A) ::= md_tee_write(B). { A = B; } -md_statement_braceless(A) ::= md_tee_append(B). { A = B; } -md_statement_braceless(A) ::= md_tee_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_emitf(B). { A = B; } -md_statement_braceless(A) ::= md_emitf_write(B). { A = B; } -md_statement_braceless(A) ::= md_emitf_append(B). { A = B; } -md_statement_braceless(A) ::= md_emitf_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_emitp(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_write(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_append(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_emit(B). { A = B; } -md_statement_braceless(A) ::= md_emit_write(B). { A = B; } -md_statement_braceless(A) ::= md_emit_append(B). { A = B; } -md_statement_braceless(A) ::= md_emit_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_lashed(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_lashed_write(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_lashed_append(B). { A = B; } -md_statement_braceless(A) ::= md_emitp_lashed_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_emit_lashed(B). { A = B; } -md_statement_braceless(A) ::= md_emit_lashed_write(B). { A = B; } -md_statement_braceless(A) ::= md_emit_lashed_append(B). { A = B; } -md_statement_braceless(A) ::= md_emit_lashed_pipe(B). { A = B; } - -md_statement_braceless(A) ::= md_dump(B). { A = B; } -md_statement_braceless(A) ::= md_dump_write(B). { A = B; } -md_statement_braceless(A) ::= md_dump_append(B). { A = B; } -md_statement_braceless(A) ::= md_dump_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_edump(B). { A = B; } -md_statement_braceless(A) ::= md_print(B). { A = B; } -md_statement_braceless(A) ::= md_eprint(B). { A = B; } -md_statement_braceless(A) ::= md_print_write(B). { A = B; } -md_statement_braceless(A) ::= md_print_append(B). { A = B; } -md_statement_braceless(A) ::= md_print_pipe(B). { A = B; } -md_statement_braceless(A) ::= md_printn(B). { A = B; } -md_statement_braceless(A) ::= md_eprintn(B). { A = B; } -md_statement_braceless(A) ::= md_printn_write(B). { A = B; } -md_statement_braceless(A) ::= md_printn_append(B). { A = B; } -md_statement_braceless(A) ::= md_printn_pipe(B). { A = B; } - -// Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST -// conversion, where we can produce much more informative error messages: -md_statement_braceless(A) ::= MD_TOKEN_BREAK(O). { - A = mlr_dsl_ast_node_alloc(O->text, MD_AST_NODE_TYPE_BREAK); -} -md_statement_braceless(A) ::= MD_TOKEN_CONTINUE(O). { - A = mlr_dsl_ast_node_alloc(O->text, MD_AST_NODE_TYPE_CONTINUE); -} - -// ================================================================ -// Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", -// then "a,b", then "a,b,c", then finally "f(a,b,c)". So: -// * On the "a" we make a function sub-AST called "anon(a)". -// * On the "b" we append the next argument to get "anon(a,b)". -// * On the "c" we append the next argument to get "anon(a,b,c)". -// * On the "f" we change the function name to get "f(a,b,c)". - -md_func_block(C) ::= MD_TOKEN_FUNC_DEF - MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. -{ - A = mlr_dsl_ast_node_set_function_name(A, F->text); - mlr_dsl_ast_node_replace_text(B, "func_block"); - C = mlr_dsl_ast_node_alloc_binary(F->text, MD_AST_NODE_TYPE_FUNC_DEF, A, B); -} - -md_func_block(C) ::= MD_TOKEN_FUNC_DEF - MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN - MD_TOKEN_COLON md_typedecl(M) - MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. -{ - A = mlr_dsl_ast_node_set_function_name(A, F->text); - mlr_dsl_ast_node_replace_text(B, "func_block"); - C = mlr_dsl_ast_node_alloc_ternary(F->text, MD_AST_NODE_TYPE_FUNC_DEF, A, B, M); -} - -md_subr_block(C) ::= MD_TOKEN_SUBR_DEF - MD_TOKEN_NON_SIGIL_NAME(F) MD_TOKEN_LPAREN md_func_or_subr_parameter_list(A) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. -{ - A = mlr_dsl_ast_node_set_function_name(A, F->text); - mlr_dsl_ast_node_replace_text(B, "subr_block"); - C = mlr_dsl_ast_node_alloc_binary(F->text, MD_AST_NODE_TYPE_SUBR_DEF, A, B); -} - -md_func_or_subr_parameter_list(A) ::= . { - A = mlr_dsl_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); -} -md_func_or_subr_parameter_list(A) ::= md_func_or_subr_non_empty_parameter_list(B). { - A = B; -} -md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B). { - A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); -} -md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B) MD_TOKEN_COMMA. { - A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); -} -md_func_or_subr_non_empty_parameter_list(A) ::= md_func_or_subr_parameter(B) MD_TOKEN_COMMA - md_func_or_subr_non_empty_parameter_list(C). -{ - A = mlr_dsl_ast_node_prepend_arg(C, B); -} - -md_func_or_subr_parameter(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION); -} -md_func_or_subr_parameter(A) ::= md_typedecl(T) MD_TOKEN_NON_SIGIL_NAME(N). { - A = mlr_dsl_ast_node_alloc(N->text, T->type); -} - -md_typedecl(A) ::= MD_TOKEN_VAR(B). { A = B; A->type = MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_NUMERIC(B). { A = B; A->type = MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_INT(B). { A = B; A->type = MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_FLOAT(B). { A = B; A->type = MD_AST_NODE_TYPE_FLOAT_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_STRING(B). { A = B; A->type = MD_AST_NODE_TYPE_STRING_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_BOOLEAN(B). { A = B; A->type = MD_AST_NODE_TYPE_BOOLEAN_PARAMETER_DEFINITION; } -md_typedecl(A) ::= MD_TOKEN_MAP(B). { A = B; A->type = MD_AST_NODE_TYPE_MAP_PARAMETER_DEFINITION; } - -// ================================================================ -md_begin_block(A) ::= MD_TOKEN_BEGIN(O) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { - mlr_dsl_ast_node_replace_text(B, "begin_block"); - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_BEGIN, B); -} -md_end_block(A) ::= MD_TOKEN_END(O) MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE. { - mlr_dsl_ast_node_replace_text(B, "end_block"); - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_END, B); -} - -// ---------------------------------------------------------------- -md_cond_block(A) ::= md_rhs(B) MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. { - mlr_dsl_ast_node_replace_text(C, "cond_block"); - A = mlr_dsl_ast_node_alloc_binary("cond", MD_AST_NODE_TYPE_CONDITIONAL_BLOCK, B, C); -} - -// ---------------------------------------------------------------- -md_while_block(A) ::= - MD_TOKEN_WHILE(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(C, "while_block"); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_WHILE, B, C); -} - -// ---------------------------------------------------------------- -md_do_while_block(A) ::= - MD_TOKEN_DO(O) - MD_TOKEN_LBRACE md_statement_block(B) MD_TOKEN_RBRACE - MD_TOKEN_WHILE - MD_TOKEN_LPAREN md_rhs(C) MD_TOKEN_RPAREN. -{ - mlr_dsl_ast_node_replace_text(B, "do_while_block"); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DO_WHILE, B, C); -} - -// ---------------------------------------------------------------- -// for(k, v in $*) { ... } -md_for_loop_full_srec(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_SREC - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_full_srec_block"); - A = mlr_dsl_ast_node_alloc_binary( - F->text, - MD_AST_NODE_TYPE_FOR_SREC, - mlr_dsl_ast_node_alloc_binary( - "variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K, - V - ), - S - ); -} - -// for(k in $*) { ... } -md_for_loop_full_srec_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_IN MD_TOKEN_FULL_SREC - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_full_srec_block"); - A = mlr_dsl_ast_node_alloc_binary( - F->text, - MD_AST_NODE_TYPE_FOR_SREC_KEY_ONLY, - mlr_dsl_ast_node_alloc_unary( - "variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - S - ); -} - -// for(k, v in @*) { ... } -md_for_loop_full_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - mlr_dsl_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), - S - ); -} - -// for((k1, k2), v in @*) { ... } -// for((k1, k2, k3), v in @*) { ... } -md_for_loop_full_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN MD_TOKEN_FULL_OOSVAR - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), - S - ); -} - -// for(k in @*) { ... } -md_for_loop_full_oosvar_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) - MD_TOKEN_IN - MD_TOKEN_FULL_OOSVAR - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_full_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, - K, - mlr_dsl_ast_node_alloc_zary("empty_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST), - S - ); -} - -// for(k, v in @o[1][2]) { ... } -md_for_loop_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_oosvar_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - mlr_dsl_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - O, - S - ); -} - -// for((k1, k2), v in @o[1][2]) { ... } -// for((k1, k2, k3), v in @o[1][2]) { ... } -md_for_loop_oosvar(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_oosvar_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - O, - S - ); -} - -md_for_loop_index(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION); -} -md_for_loop_index(A) ::= MD_TOKEN_NUMERIC MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION); -} -md_for_loop_index(A) ::= MD_TOKEN_INT MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION); -} -md_for_loop_index(A) ::= MD_TOKEN_FLOAT MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION); -} -md_for_loop_index(A) ::= MD_TOKEN_STRING MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION); -} -md_for_loop_index(A) ::= MD_TOKEN_BOOLEAN MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION); -} - -md_for_map_keylist(A) ::= md_for_loop_index(K). { - A = mlr_dsl_ast_node_alloc_unary("key_variables", MD_AST_NODE_TYPE_FOR_VARIABLES, K); -} -md_for_map_keylist(A) ::= md_for_map_keylist(L) MD_TOKEN_COMMA md_for_loop_index(K). { - A = mlr_dsl_ast_node_append_arg(L, K); -} - -// for(k in @o[1][2]) { ... } -md_for_loop_oosvar_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) - MD_TOKEN_IN md_oosvar_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_oosvar_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_OOSVAR_KEY_ONLY, - K, - O, - S - ); -} - -// ---------------------------------------------------------------- -// for(k, v in o[1][2]) { ... } -md_for_loop_local_map(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_local_map_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_LOCAL_MAP, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - mlr_dsl_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - O, - S - ); -} - -// for((k1, k2), v in o[1][2]) { ... } -// for((k1, k2, k3), v in o[1][2]) { ... } -md_for_loop_local_map(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_local_map_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_LOCAL_MAP, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - O, - S - ); -} - -// for(k in o[1][2]) { ... } -md_for_loop_local_map_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) - MD_TOKEN_IN md_local_map_keylist(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_local_map_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_LOCAL_MAP_KEY_ONLY, - K, - O, - S - ); -} - -// ---------------------------------------------------------------- -// for(k, v in o[1][2]) { ... } -md_for_loop_map_literal(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_map_literal(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_MAP_LITERAL, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - mlr_dsl_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - O, - S - ); -} - -// for((k1, k2), v in o[1][2]) { ... } -// for((k1, k2, k3), v in o[1][2]) { ... } -md_for_loop_map_literal(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_map_literal(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_MAP_LITERAL, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - O, - S - ); -} - -// for(k in o[1][2]) { ... } -md_for_loop_map_literal_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) - MD_TOKEN_IN md_map_literal(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_map_literal_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_MAP_LITERAL_KEY_ONLY, - K, - O, - S - ); -} - -// ---------------------------------------------------------------- -// for(k, v in o[1][2]) { ... } -md_for_loop_func_retval(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_fcn_or_subr_call(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - mlr_dsl_ast_node_alloc_unary( - "key_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - K - ), - V - ), - O, - S - ); -} - -// for((k1, k2), v in o[1][2]) { ... } -// for((k1, k2, k3), v in o[1][2]) { ... } -md_for_loop_func_retval(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - MD_TOKEN_LPAREN md_for_map_keylist(L) MD_TOKEN_RPAREN MD_TOKEN_COMMA md_for_loop_index(V) - MD_TOKEN_IN md_fcn_or_subr_call(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_FUNC_RETVAL, - mlr_dsl_ast_node_alloc_binary( - "key_and_value_variables", - MD_AST_NODE_TYPE_FOR_VARIABLES, - L, - V - ), - O, - S - ); -} - -// for(k in o[1][2]) { ... } -md_for_loop_func_retval_key_only(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_for_loop_index(K) - MD_TOKEN_IN md_fcn_or_subr_call(O) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(S) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(S, "for_loop_func_retval_block"); - A = mlr_dsl_ast_node_alloc_ternary( - F->text, - MD_AST_NODE_TYPE_FOR_FUNC_RETVAL_KEY_ONLY, - K, - O, - S - ); -} - -// ---------------------------------------------------------------- -md_triple_for(A) ::= - MD_TOKEN_FOR(F) MD_TOKEN_LPAREN - md_triple_for_start(S) - MD_TOKEN_SEMICOLON - md_triple_for_continuation(C) - MD_TOKEN_SEMICOLON - md_triple_for_update(U) - MD_TOKEN_RPAREN - MD_TOKEN_LBRACE - md_statement_block(L) - MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(L, "triple_for_block"); - A = mlr_dsl_ast_node_alloc_quaternary(F->text, MD_AST_NODE_TYPE_TRIPLE_FOR, S, C, U, L); -} - -md_triple_for_start(A) ::= md_statement_braceless(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = mlr_dsl_ast_node_alloc_zary("triple_for_start_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); - } else { - A = mlr_dsl_ast_node_alloc_unary("triple_for_start_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); - } -} -md_triple_for_start(A) ::= md_triple_for_start(B) MD_TOKEN_COMMA md_statement_braceless(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = C; - } else { - A = mlr_dsl_ast_node_append_arg(B, C); - } -} - -md_triple_for_continuation(A) ::= md_statement_braceless(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = mlr_dsl_ast_node_alloc_zary("triple_for_continuation_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); - } else { - A = mlr_dsl_ast_node_alloc_unary("triple_for_continuation_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); - } -} -md_triple_for_continuation(A) ::= md_triple_for_continuation(B) MD_TOKEN_COMMA md_statement_braceless(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = C; - } else { - A = mlr_dsl_ast_node_append_arg(B, C); - } -} - -md_triple_for_update(A) ::= md_statement_braceless(B). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = mlr_dsl_ast_node_alloc_zary("triple_for_update_statements", MD_AST_NODE_TYPE_STATEMENT_LIST); - } else { - A = mlr_dsl_ast_node_alloc_unary("triple_for_update_statements", MD_AST_NODE_TYPE_STATEMENT_LIST, B); - } -} -md_triple_for_update(A) ::= md_triple_for_update(B) MD_TOKEN_COMMA md_statement_braceless(C). { - if (B->type == MD_AST_NODE_TYPE_NOP) { - mlr_dsl_ast_node_free(B); - A = C; - } else { - A = mlr_dsl_ast_node_append_arg(B, C); - } -} - -// ---------------------------------------------------------------- -// Cases: -// if elif* -// if elif* else - -md_if_chain(A) ::= md_if_elif_star(B) . { - A = B; -} -md_if_chain(A) ::= md_if_elif_star(B) md_else_block(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} -md_if_elif_star(A) ::= md_if_block(B). { - A = mlr_dsl_ast_node_alloc_unary("if_head", MD_AST_NODE_TYPE_IF_HEAD, B); -} -md_if_elif_star(A) ::= md_if_elif_star(B) md_elif_block(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -md_if_block(A) ::= - MD_TOKEN_IF(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(C, "if_block"); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); -} - -md_elif_block(A) ::= - MD_TOKEN_ELIF(O) - MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN - MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(C, "elif_block"); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_IF_ITEM, B, C); -} - -md_else_block(A) ::= - MD_TOKEN_ELSE(O) - MD_TOKEN_LBRACE md_statement_block(C) MD_TOKEN_RBRACE. -{ - mlr_dsl_ast_node_replace_text(C, "else_block"); - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_IF_ITEM, C); -} - -// ---------------------------------------------------------------- -md_bare_boolean(A) ::= md_rhs(B). { - A = B; -} - -// ---------------------------------------------------------------- -md_filter(A) ::= MD_TOKEN_FILTER(O) md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B); -} - -// ---------------------------------------------------------------- -md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); -} -md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_SREC(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); -} -md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_OOSVAR(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION, N, B); -} -md_untyped_local_definition(A) ::= MD_TOKEN_VAR(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); -} - -md_numeric_local_definition(A) ::= MD_TOKEN_NUMERIC(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION, N, B); -} -md_int_local_definition(A) ::= MD_TOKEN_INT(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION, N, B); -} -md_float_local_definition(A) ::= MD_TOKEN_FLOAT(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION, N, B); -} -md_boolean_local_definition(A) ::= MD_TOKEN_BOOLEAN(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION, N, B); -} -md_string_local_definition(A) ::= MD_TOKEN_STRING(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION, N, B); -} - -md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); -} -md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); -} -md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); -} -md_map_local_definition(A) ::= MD_TOKEN_MAP(T) md_nonindexed_local_variable(N) MD_TOKEN_ASSIGN md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(T->text, MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION, N, C); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, C); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, C); -} - -// ---------------------------------------------------------------- -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C); -} -md_srec_indirect_assignment(A) ::= - MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET - MD_TOKEN_ASSIGN(O) md_rhs(C). -{ - A = mlr_dsl_ast_node_alloc_binary( - O->text, - MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, - B, - C - ); -} -md_srec_positional_name_assignment(A) ::= - MD_TOKEN_DOLLAR_SIGN - MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET - md_rhs(B) - MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET - MD_TOKEN_ASSIGN(O) md_rhs(C). -{ - A = mlr_dsl_ast_node_alloc_binary( - O->text, - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME_ASSIGNMENT, - B, - C - ); -} -// '$[[[3]]] = "new"' is shorthand for '$[ $[[3]] ] = "new"'. -// Note that '$[[3]]' is key at srec position 3 and '$[[[3]]]' is value at srec position 3. -md_srec_positional_value_assignment(A) ::= - MD_TOKEN_DOLLAR_SIGN - MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET - md_rhs(B) - MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET - MD_TOKEN_ASSIGN(O) md_rhs(C). -{ - A = mlr_dsl_ast_node_alloc_binary( - O->text, - MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT, - mlr_dsl_ast_node_alloc_unary( - "positional_srec_field_name", - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, - B - ), - C - ); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C); -} - -md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); -} - -md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); -} - -md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_ASSIGNMENT, B, C); -} - -md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); -} - -md_full_oosvar_assignment(A) ::= MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_ASSIGN(O) md_fcn_or_subr_call(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); -} - -md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C); -} - -md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, - MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); -} -md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_map_literal(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); -} -md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); -} -md_full_srec_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_OOSVAR(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_ASSIGNMENT, B, C); -} - -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ASSIGN(O) md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, C); -} - -// ---------------------------------------------------------------- -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_oosvar_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_nonindexed_local_assignment(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OPLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OMINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_indexed_local_assignment(A) ::= md_indexed_local_variable(B) MD_TOKEN_INT_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -// ---------------------------------------------------------------- -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DOT_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_POW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OTIMES_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ODIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary("./", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OINT_DIVIDE_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OMOD_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} -md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_OPOW_EQUALS md_rhs(C). { - A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, - mlr_dsl_ast_node_alloc_binary(".**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C)); -} - -// ---------------------------------------------------------------- -md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_ALL(B). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); -} -md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_FULL_OOSVAR(B). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B); -} -md_unset(A) ::= MD_TOKEN_UNSET(O) md_unset_args(B). { - A = mlr_dsl_ast_node_set_function_name(B, O->text); -} -// Need to invalidate "emit @a," -- use some non-empty-args expr. -md_unset_args(A) ::= . { - A = mlr_dsl_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_UNSET); -} - -md_unset_args(A) ::= md_field_name(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_indirect_field_name(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_positional_srec_name(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= MD_TOKEN_FULL_SREC(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_oosvar_keylist(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_nonindexed_local_variable(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} -md_unset_args(A) ::= md_indexed_local_variable(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_UNSET, B); -} - -md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_field_name(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} -md_unset_args(A) ::= md_unset_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_tee_write(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F), - M); -} - -md_tee_append(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F), - M); -} - -md_tee_pipe(A) ::= MD_TOKEN_TEE(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA MD_TOKEN_FULL_SREC(M). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_TEE, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P), - M); -} - -// ---------------------------------------------------------------- -// Given "emitf @a,@b,@c": since this is a bottom-up parser, we get first the "@a", -// then "@a,@b", then "@a,@b,@c", then finally "emit @a,@b,@c". So: -// * On the "@a" we make a sub-AST called "temp @a" (although we could call it "emit"). -// * On the "@b" we append the next argument to get "temp @a,@b". -// * On the "@c" we append the next argument to get "temp @a,@b,@c". -// * On the "emit" we change the name to get "emit @a,@b,@c". - -md_emitf(A) ::= MD_TOKEN_EMITF(O) md_emitf_args(B). { - B = mlr_dsl_ast_node_set_function_name(B, O->text); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} -// Need to invalidate "emit @a," -- use some non-empty-args expr. -md_emitf_args(A) ::= . { - A = mlr_dsl_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_EMITF); -} -md_emitf_args(A) ::= md_oosvar_keylist(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); -} -md_emitf_args(A) ::= md_nonindexed_local_variable(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); -} -md_emitf_args(A) ::= md_indexed_local_variable(B). { - A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMITF, B); -} -md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} -md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_nonindexed_local_variable(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} -md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_indexed_local_variable(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_emitf_args(B). { - B = mlr_dsl_ast_node_set_function_name(B, O->text); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} - -md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_emitf_args(B). { - B = mlr_dsl_ast_node_set_function_name(B, O->text); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} - -md_emitf_pipe(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_emitf_args(B). { - B = mlr_dsl_ast_node_set_function_name(B, O->text); - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF, B, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} - - -// ---------------------------------------------------------------- -md_emitp(A) ::= MD_TOKEN_EMITP(O) md_emittable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - -md_emitp(A) ::= MD_TOKEN_EMITP(O) md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} -md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} - -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} -md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} - -md_emitp_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} -md_emitp_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emitp_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} - -// ---------------------------------------------------------------- -md_emitp_namelist(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("emitp_namelist", MD_AST_NODE_TYPE_EMITP, B); -} -md_emitp_namelist(A) ::= md_emitp_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ================================================================ -md_emit(A) ::= MD_TOKEN_EMIT(O) md_emittable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - -md_emit(A) ::= MD_TOKEN_EMIT(O) md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - - -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} -md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} - -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} -md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} - -md_emit_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - md_emittable(B). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} -md_emit_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - md_emittable(B) MD_TOKEN_COMMA md_emit_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} - -// ---------------------------------------------------------------- -md_emittable(A) ::= MD_TOKEN_ALL(B). { - A = B; -} -md_emittable(A) ::= MD_TOKEN_FULL_OOSVAR(B). { - A = B; -} -md_emittable(A) ::= md_oosvar_keylist(B). { - A = B; -} -md_emittable(A) ::= md_nonindexed_local_variable(B). { - A = B; -} -md_emittable(A) ::= md_indexed_local_variable(B). { - A = B; -} -md_emittable(A) ::= MD_TOKEN_FULL_SREC(B). { - A = B; -} -md_emittable(A) ::= md_map_literal(B). { - A = B; -} -md_emittable(A) ::= md_fcn_or_subr_call(B). { - A = B; -} - -// ---------------------------------------------------------------- -md_emit_namelist(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("emit_namelist", MD_AST_NODE_TYPE_EMIT, B); -} -md_emit_namelist(A) ::= md_emit_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} -md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - -md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} -md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} - -md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} -md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} - -md_emitp_lashed_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} -md_emitp_lashed_pipe(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -md_emitp_lashed_keylists(A) ::= md_emittable(B). { - A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMITP_LASHED, B); -} -md_emitp_lashed_keylists(A) ::= md_emitp_lashed_keylists(B) MD_TOKEN_COMMA md_emittable(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -md_emitp_lashed_namelist(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMITP_LASHED, B); -} -md_emitp_lashed_namelist(A) ::= md_emitp_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} -md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), - mlr_dsl_ast_node_alloc_zary("stream", MD_AST_NODE_TYPE_STREAM)); -} - -md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} -md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} - -md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} -md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} - -md_emit_lashed_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} -md_emit_lashed_pipe(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA - MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN - MD_TOKEN_COMMA md_emit_lashed_namelist(C). -{ - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, - mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -md_emit_lashed_keylists(A) ::= md_emittable(B). { - A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMIT_LASHED, B); -} -md_emit_lashed_keylists(A) ::= md_emit_lashed_keylists(B) MD_TOKEN_COMMA md_emittable(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -md_emit_lashed_namelist(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("lashed_namelist", MD_AST_NODE_TYPE_EMIT_LASHED, B); -} -md_emit_lashed_namelist(A) ::= md_emit_lashed_namelist(B) MD_TOKEN_COMMA md_rhs(C). { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_dump(A) ::= MD_TOKEN_DUMP(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT)), - mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); -} -md_edump(A) ::= MD_TOKEN_EDUMP(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR)), - mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); -} -md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F), - mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); -} -md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F), - mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); -} -md_dump_pipe(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_OR md_rhs(P). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P), - mlr_dsl_ast_node_alloc("all", MD_AST_NODE_TYPE_FULL_OOSVAR)); -} - -md_dump(A) ::= MD_TOKEN_DUMP(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT)), - B); -} -md_edump(A) ::= MD_TOKEN_EDUMP(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR)), - B); -} -md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_output_file(F) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F), - B); -} -md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_output_file(F) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F), - B); -} -md_dump_pipe(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_OR md_dumpable(P) md_rhs(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_DUMP, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P), - B); -} - -// ---------------------------------------------------------------- -md_dumpable(A) ::= MD_TOKEN_ALL(B). { - A = B; -} -md_dumpable(A) ::= MD_TOKEN_FULL_OOSVAR(B). { - A = B; -} -md_dumpable(A) ::= MD_TOKEN_FULL_SREC(B). { - A = B; -} -md_dumpable(A) ::= md_map_literal(B). { - A = B; -} -md_dumpable(A) ::= md_rhs(B). { - A = B; -} - -// ---------------------------------------------------------------- -// Print string -md_print(A) ::= MD_TOKEN_PRINT(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, B, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); -} -md_eprint(A) ::= MD_TOKEN_EPRINT(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, B, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); -} -md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} -md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} -md_print_pipe(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, C, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} - -// Print with no string (newline only) -md_print(A) ::= MD_TOKEN_PRINT(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); -} -md_eprint(A) ::= MD_TOKEN_EPRINT(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); -} -md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} -md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} -md_print_pipe(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_OR md_rhs(P). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} - -// Printn string -md_printn(A) ::= MD_TOKEN_PRINTN(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, B, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); -} -md_eprintn(A) ::= MD_TOKEN_EPRINTN(O) md_dumpable(B). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, B, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); -} -md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - F)); -} -md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_output_file(F) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, - F)); -} -md_printn_pipe(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_OR md_rhs(P) MD_TOKEN_COMMA md_dumpable(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, C, - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, - P)); -} - -// Printn with no string: produces no output but will create a zero-length -// output file, so not quite a no-op. -md_printn(A) ::= MD_TOKEN_PRINTN(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDOUT))); -} -md_eprintn(A) ::= MD_TOKEN_EPRINTN(O). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, - mlr_dsl_ast_node_alloc_zary("stdout", MD_AST_NODE_TYPE_STDERR))); -} -md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">", MD_AST_NODE_TYPE_FILE_WRITE, F)); -} -md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_output_file(F). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary(">>", MD_AST_NODE_TYPE_FILE_APPEND, F)); -} -md_printn_pipe(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_OR md_dumpable(P). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN, - mlr_dsl_ast_node_alloc("", MD_AST_NODE_TYPE_NUMERIC_LITERAL), - mlr_dsl_ast_node_alloc_unary("|", MD_AST_NODE_TYPE_PIPE, P)); -} - -// ---------------------------------------------------------------- -md_output_file(A) ::= md_rhs(F). { A = F; } -md_output_file(A) ::= MD_TOKEN_STDOUT(F). { A = F; } -md_output_file(A) ::= MD_TOKEN_STDERR(F). { A = F; } - -// ================================================================ -// Begin RHS precedence chain - -md_rhs(A) ::= md_ternary(B). { - A = B; -} - -md_ternary(A) ::= md_logical_or_term(B) MD_TOKEN_QUESTION_MARK md_ternary(C) MD_TOKEN_COLON md_ternary(D). { - A = mlr_dsl_ast_node_alloc_ternary("? :", MD_AST_NODE_TYPE_OPERATOR, B, C, D); -} - -md_ternary(A) ::= md_logical_or_term(B). { - A = B; -} - -// ================================================================ -md_logical_or_term(A) ::= md_logical_xor_term(B). { - A = B; -} -md_logical_or_term(A) ::= md_logical_or_term(B) MD_TOKEN_LOGICAL_OR(O) md_logical_xor_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_logical_xor_term(A) ::= md_logical_and_term(B). { - A = B; -} -md_logical_xor_term(A) ::= md_logical_xor_term(B) MD_TOKEN_LOGICAL_XOR(O) md_logical_and_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_logical_and_term(A) ::= md_eqne_term(B). { - A = B; -} -md_logical_and_term(A) ::= md_logical_and_term(B) MD_TOKEN_LOGICAL_AND(O) md_eqne_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_eqne_term(A) ::= md_cmp_term(B). { - A = B; -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_MATCHES(O) md_cmp_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_DOES_NOT_MATCH(O) md_cmp_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_EQ(O) md_cmp_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_NE(O) md_cmp_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_cmp_term(A) ::= md_bitwise_or_term(B). { - A = B; -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GT(O) md_bitwise_or_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GE(O) md_bitwise_or_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LT(O) md_bitwise_or_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LE(O) md_bitwise_or_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_or_term(A) ::= md_bitwise_xor_term(B). { - A = B; -} -md_bitwise_or_term(A) ::= md_bitwise_or_term(B) MD_TOKEN_BITWISE_OR(O) md_bitwise_xor_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_xor_term(A) ::= md_bitwise_and_term(B). { - A = B; -} -md_bitwise_xor_term(A) ::= md_bitwise_xor_term(B) MD_TOKEN_BITWISE_XOR(O) md_bitwise_and_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_and_term(A) ::= md_bitwise_shift_term(B). { - A = B; -} -md_bitwise_and_term(A) ::= md_bitwise_and_term(B) MD_TOKEN_BITWISE_AND(O) md_bitwise_shift_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_bitwise_shift_term(A) ::= md_addsubdot_term(B). { - A = B; -} -md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_LSH(O) md_addsubdot_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_RSH(O) md_addsubdot_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_addsubdot_term(A) ::= md_muldiv_term(B). { - A = B; -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_PLUS(O) md_muldiv_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_MINUS(O) md_muldiv_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_OPLUS(O) md_muldiv_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_OMINUS(O) md_muldiv_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_DOT(O) md_muldiv_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_muldiv_term(A) ::= md_unary_bitwise_op_term(B). { - A = B; -} - -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_TIMES(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_DIVIDE(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_DIVIDE(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_MOD(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_OTIMES(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_ODIVIDE(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} -md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_ODIVIDE(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - -// ---------------------------------------------------------------- -md_unary_bitwise_op_term(A) ::= md_pow_term(B). { - A = B; -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_PLUS(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_MINUS(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_OPLUS(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_OMINUS(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_LOGICAL_NOT(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} -md_unary_bitwise_op_term(A) ::= MD_TOKEN_BITWISE_NOT(O) md_unary_bitwise_op_term(C). { - A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C); -} - -// ---------------------------------------------------------------- -md_pow_term(A) ::= md_atom_or_fcn(B). { - A = B; -} -md_pow_term(A) ::= md_atom_or_fcn(B) MD_TOKEN_POW(O) md_pow_term(C). { - A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C); -} - - -// ---------------------------------------------------------------- -// In the grammar provided to the user, field names are of the form "$x". But -// within Miller internally, field names are of the form "x". We coded the -// lexer to give us field names with leading "$" so we can confidently strip it -// off here. - -md_atom_or_fcn(A) ::= md_field_name(B). { - A = B; -} -md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). { - char* dollar_name = B->text; - char* no_dollar_name = &dollar_name[1]; - A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type); -} -md_field_name(A) ::= MD_TOKEN_BRACED_FIELD_NAME(B). { - // Replace "${field.name}" with just "field.name" - char* dollar_name = B->text; - char* no_dollar_name = &dollar_name[2]; - int len = strlen(no_dollar_name); - if (len > 0) - no_dollar_name[len-1] = 0; - A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type); -} - -md_atom_or_fcn(A) ::= md_indirect_field_name(B). { - A = B; -} -md_indirect_field_name(A) ::= MD_TOKEN_DOLLAR_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_unary("indirect_field_name", MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, B); -} - -md_atom_or_fcn(A) ::= md_positional_srec_name(B). { - A = B; -} -md_positional_srec_name(A) ::= MD_TOKEN_DOLLAR_SIGN - MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET - md_rhs(B) - MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_unary( - "positional_srec_field_name", - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, - B - ); -} - -// '$value = $[[[3]]]' is shorthand for '$value = $[ $[[3]] ]'. -// Note that '$[[3]]' is key at srec position 3 and '$[[[3]]]' is value at srec position 3. -md_atom_or_fcn(A) ::= md_positional_srec_value(B). { - A = B; -} -md_positional_srec_value(A) ::= MD_TOKEN_DOLLAR_SIGN - MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET MD_TOKEN_LEFT_BRACKET - md_rhs(B) - MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_unary( - "indirect_field_name", - MD_AST_NODE_TYPE_INDIRECT_FIELD_NAME, - mlr_dsl_ast_node_alloc_unary( - "positional_srec_field_name", - MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME, - B - ) - ); -} - -// ---------------------------------------------------------------- -md_atom_or_fcn(A) ::= md_oosvar_keylist(B). { - A = B; -} - -md_oosvar_keylist(A) ::= md_oosvar_basename(B). { - A = B; -} -md_oosvar_keylist(A) ::= md_oosvar_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// E.g. @name -md_oosvar_basename(A) ::= MD_TOKEN_UNBRACED_OOSVAR_NAME(B). { - char* at_name = B->text; - char* no_at_name = &at_name[1]; - A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - mlr_dsl_ast_node_alloc(no_at_name, B->type)); -} - -// E.g. @{name} -md_oosvar_basename(A) ::= MD_TOKEN_BRACED_OOSVAR_NAME(B). { - // Replace "@%{field.name}" with just "field.name" - char* at_name = B->text; - char* no_at_name = &at_name[2]; - int len = strlen(no_at_name); - if (len > 0) - no_at_name[len-1] = 0; - A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, - mlr_dsl_ast_node_alloc(no_at_name, B->type)); -} - -// E.g. @["name"] -md_oosvar_basename(A) ::= MD_TOKEN_AT_SIGN MD_TOKEN_LEFT_BRACKET md_rhs(B) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_unary("oosvar_keylist", MD_AST_NODE_TYPE_OOSVAR_KEYLIST, B); -} - -md_local_map_keylist(A) ::= md_nonindexed_local_variable(B). { - A = B; -} -md_local_map_keylist(A) ::= md_local_map_keylist(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_append_arg(B, C); -} - -// ---------------------------------------------------------------- -md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). { - A = B; -} -md_atom_or_fcn(A) ::= MD_TOKEN_TRUE(B). { - A = B; -} -md_atom_or_fcn(A) ::= MD_TOKEN_FALSE(B). { - A = B; -} - -md_atom_or_fcn(A) ::= md_string(B). { - A = B; -} -md_atom_or_fcn(A) ::= md_regexi(B). { - A = B; -} - -md_atom_or_fcn(A) ::= md_nonindexed_local_variable(B). { - A = B; -} - -md_atom_or_fcn(A) ::= md_indexed_local_variable(B). { - A = B; -} - -md_nonindexed_local_variable(A) ::= MD_TOKEN_NON_SIGIL_NAME(B). { - A = mlr_dsl_ast_node_alloc(B->text, MD_AST_NODE_TYPE_NONINDEXED_LOCAL_VARIABLE); -} - -md_indexed_local_variable(A) ::= md_nonindexed_local_variable(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_unary(B->text, MD_AST_NODE_TYPE_INDEXED_LOCAL_VARIABLE, C); - mlr_dsl_ast_node_free(B); -} -md_indexed_local_variable(A) ::= md_indexed_local_variable(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_append_arg(B, C); -} - - -md_atom_or_fcn(A) ::= md_indexed_function_call(B). { - A = B; -} - -// Indexed function calls: -// * First child node is function call with argument list. -// * Second child node is list of indexing expressions. -// -// Example: 'foo(1,2,3)[4][5]' parses to AST -// -// text="foo", type=INDEXED_FUNCTION_CALLSITE: -// text="foo", type=FUNCTION_CALLSITE: -// text="1", type=NUMERIC_LITERAL. -// text="2", type=NUMERIC_LITERAL. -// text="3", type=NUMERIC_LITERAL. -// text="indexing", type=MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST: -// text="4", type=NUMERIC_LITERAL. -// text="5", type=NUMERIC_LITERAL. -md_indexed_function_call(A) ::= md_fcn_or_subr_call(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_binary( - B->text, - MD_AST_NODE_TYPE_INDEXED_FUNCTION_CALLSITE, - B, - mlr_dsl_ast_node_alloc_unary( - "indexing", - MD_AST_NODE_TYPE_INDEXED_FUNCTION_INDEX_LIST, - C - ) - ); -} -md_indexed_function_call(A) ::= md_indexed_function_call(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - // Append to second child node which is list of indexing expressions. - A = mlr_dsl_ast_node_append_arg_to_second_child(B, C); -} - -md_string(A) ::= MD_TOKEN_STRING(B). { - char* input = B->text; - char* stripped = &input[1]; - int len = strlen(input); - stripped[len-2] = 0; - A = mlr_dsl_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); -} -md_regexi(A) ::= MD_TOKEN_REGEXI(B). { - char* input = B->text; - char* stripped = &input[1]; - int len = strlen(input); - stripped[len-3] = 0; - A = mlr_dsl_ast_node_alloc(mlr_alloc_unbackslash(stripped), B->type); -} - -md_atom_or_fcn(A) ::= MD_TOKEN_CONTEXT_VARIABLE(B). { - A = B; -} -md_atom_or_fcn(A) ::= md_env_index(B). { - A = B; -} - -md_env_index(A) ::= MD_TOKEN_ENV(B) MD_TOKEN_LEFT_BRACKET md_rhs(C) MD_TOKEN_RIGHT_BRACKET. { - A = mlr_dsl_ast_node_alloc_binary("env", MD_AST_NODE_TYPE_ENV, B, C); -} - -md_atom_or_fcn(A) ::= MD_TOKEN_LPAREN md_rhs(B) MD_TOKEN_RPAREN. { - A = B; -} - -md_atom_or_fcn(A) ::= md_fcn_or_subr_call(B). { - A = B; -} - -// Given "f(a,b,c)": since this is a bottom-up parser, we get first the "a", -// then "a,b", then "a,b,c", then finally "f(a,b,c)". So: -// * On the "a" we make a function sub-AST called "anon(a)". -// * On the "b" we append the next argument to get "anon(a,b)". -// * On the "c" we append the next argument to get "anon(a,b,c)". -// * On the "f" we change the function name to get "f(a,b,c)". - -md_fcn_or_subr_call(A) ::= MD_TOKEN_NON_SIGIL_NAME(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { - A = mlr_dsl_ast_node_set_function_name(B, O->text); - A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; -} -// For most functions it suffices to use the MD_TOKEN_NON_SIGIL_NAME pattern. But -// int and float are keywords in the lexer so we need to spell those out explicitly. -// (They're type-decl keywords but they're also the names of type-conversion functions.) -md_fcn_or_subr_call(A) ::= MD_TOKEN_INT(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { - A = mlr_dsl_ast_node_set_function_name(B, O->text); - A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; -} -md_fcn_or_subr_call(A) ::= MD_TOKEN_FLOAT(O) MD_TOKEN_LPAREN md_fcn_arg_list(B) MD_TOKEN_RPAREN. { - A = mlr_dsl_ast_node_set_function_name(B, O->text); - A->type = MD_AST_NODE_TYPE_FUNCTION_CALLSITE; -} - -md_fcn_arg_list(A) ::= . { - A = mlr_dsl_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME); -} -md_fcn_arg_list(A) ::= md_fcn_non_empty_arg_list(B). { - A = B; -} - -md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B). { - A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); -} -md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B) MD_TOKEN_COMMA. { - A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_NON_SIGIL_NAME, B); -} -md_fcn_non_empty_arg_list(A) ::= md_fcn_arg(B) MD_TOKEN_COMMA md_fcn_non_empty_arg_list(C). { - A = mlr_dsl_ast_node_prepend_arg(C, B); -} - -md_fcn_arg(A) ::= md_rhs(B). { - A = B; -} -md_fcn_arg(A) ::= MD_TOKEN_FULL_SREC(B). { - A = B; -} -md_fcn_arg(A) ::= MD_TOKEN_FULL_OOSVAR(B). { - A = B; -} -md_fcn_arg(A) ::= md_map_literal(B). { - A = B; -} - -// ---------------------------------------------------------------- -// Map-literals in Miller are JSON-ish. - -md_map_literal(A) ::= MD_TOKEN_LBRACE MD_TOKEN_RBRACE. { - A = mlr_dsl_ast_node_alloc_zary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL); -} -md_map_literal(A) ::= MD_TOKEN_LBRACE md_map_literal_kv_pairs(B) MD_TOKEN_RBRACE. { - A = B; -} -md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B). { - A = mlr_dsl_ast_node_alloc_unary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL, B); -} -// Allow trailing final comma, especially for multiline map literals -md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B) MD_TOKEN_COMMA. { - A = mlr_dsl_ast_node_alloc_unary("map_literal", MD_AST_NODE_TYPE_MAP_LITERAL, B); -} -md_map_literal_kv_pairs(A) ::= md_map_literal_kv_pair(B) MD_TOKEN_COMMA md_map_literal_kv_pairs(C). { - A = mlr_dsl_ast_node_prepend_arg(C, B); -} - -md_map_literal_kv_pair(A) ::= md_map_literal_key(B) MD_TOKEN_COLON md_map_literal_value(C). { - A = mlr_dsl_ast_node_alloc_binary("mappair", MD_AST_NODE_TYPE_MAP_LITERAL_PAIR, B, C); -} -md_map_literal_key(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("mapkey", MD_AST_NODE_TYPE_MAP_LITERAL_KEY, B); -} -md_map_literal_value(A) ::= md_rhs(B). { - A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); -} -md_map_literal_value(A) ::= md_map_literal(B). { - A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); -} -md_map_literal_value(A) ::= MD_TOKEN_FULL_SREC(B). { - A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); -} -md_map_literal_value(A) ::= MD_TOKEN_FULL_OOSVAR(B). { - A = mlr_dsl_ast_node_alloc_unary("mapval", MD_AST_NODE_TYPE_MAP_LITERAL_VALUE, B); -} diff --git a/c/parsing/mlr_dsl_wrapper.c b/c/parsing/mlr_dsl_wrapper.c deleted file mode 100644 index 5230d45ea..000000000 --- a/c/parsing/mlr_dsl_wrapper.c +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include "mlr_dsl_wrapper.h" -#include "mlr_dsl_lexer.h" -#include "mlr_dsl_parse.h" -#include "../lib/mlrutil.h" -#include "../dsl/mlr_dsl_ast.h" -#include "../containers/sllv.h" - -// These prototypes are copied out manually from mlr_dsl_parse.c. With some -// more work I could have Lemon autogenerate these prototypes into -// mlr_dsl_parse.h. - -void *mlr_dsl_lemon_parser_alloc(void *(*mallocProc)(size_t)); - -int mlr_dsl_lemon_parser_parse_token( - void *pvparser, /* The parser */ - int yymajor, /* The major token code number */ - mlr_dsl_ast_node_t* yyminor, /* The value for the token */ - mlr_dsl_ast_t* past); /* Optional %extra_argument parameter */ -void mlr_dsl_lemon_parser_free( - void *pvparser, /* The parser to be deleted */ - void (*freeProc)(void*)); /* Function used to reclaim memory */ - -void mlr_dsl_ParseTrace(FILE *TraceFILE, char *zTracePrompt); - -// ---------------------------------------------------------------- -// http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html -// http://flex.sourceforge.net/manual/Extra-Data.html - -// Returns linked list of mlr_dsl_ast_node_t*. -static mlr_dsl_ast_t* mlr_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast_node_t** ppnode, - int trace_parse) -{ - int lex_code; - int parse_code; - mlr_dsl_ast_t* past = mlr_dsl_ast_alloc(); - if (trace_parse) - mlr_dsl_ParseTrace(stderr, "[DSLTRACE] "); - do { - lex_code = mlr_dsl_lexer_lex(scanner); - if (lex_code == -1) { - return NULL; - } - mlr_dsl_ast_node_t* plexed_node = *ppnode; - parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, lex_code, plexed_node, past); - if (parse_code == 0) { - //mlr_dsl_ast_node_print(plexed_node); - return NULL; - } - } while (lex_code > 0); - if (-1 == lex_code) { - fprintf(stderr, "The scanner encountered an error.\n"); - return NULL; - } - parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, 0, NULL, past); - - if (parse_code == 0) - return NULL; - return past; -} - -// ---------------------------------------------------------------- -// Returns linked list of mlr_dsl_ast_node_t*. -mlr_dsl_ast_t* mlr_dsl_parse(char* string, int trace_parse) { - mlr_dsl_ast_node_t* pnode = NULL; - yyscan_t scanner; - mlr_dsl_lexer_lex_init_extra(&pnode, &scanner); - void* pvparser = mlr_dsl_lemon_parser_alloc(malloc); - - YY_BUFFER_STATE buf = NULL; - if (string == NULL) { - mlr_dsl_lexer_set_in(stdin, scanner); - } else { - YY_BUFFER_STATE buf = mlr_dsl_lexer__scan_string(string, scanner); - mlr_dsl_lexer__switch_to_buffer (buf, scanner); - } - - mlr_dsl_ast_t* past = mlr_dsl_parse_inner(scanner, pvparser, &pnode, trace_parse); - - if (buf != NULL) - mlr_dsl_lexer__delete_buffer(buf, scanner); - - mlr_dsl_lexer_lex_destroy(scanner); - mlr_dsl_lemon_parser_free(pvparser, free); - - return past; -} - -// ---------------------------------------------------------------- -void yytestcase(int ignored) { -} diff --git a/c/parsing/mlr_dsl_wrapper.h b/c/parsing/mlr_dsl_wrapper.h deleted file mode 100644 index 88ae5ba57..000000000 --- a/c/parsing/mlr_dsl_wrapper.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MLR_DSL_WRAPPER_H -#define MLR_DSL_WRAPPER_H -#include "../dsl/mlr_dsl_ast.h" - -mlr_dsl_ast_t* mlr_dsl_parse(char* string, int trace_parse); - -#endif // MLR_DSL_WRAPPER_H diff --git a/c/parsing/mlr_dsl_wrapper_main.c b/c/parsing/mlr_dsl_wrapper_main.c deleted file mode 100644 index 148f4305f..000000000 --- a/c/parsing/mlr_dsl_wrapper_main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include -#include "mlr_dsl_wrapper.h" -#include "mlr_dsl_lexer.h" -#include "mlr_dsl_parse.h" -#include "../containers/sllv.h" -#include "../lib/mlrutil.h" -#include "../dsl/mlr_dsl_ast.h" - -// ---------------------------------------------------------------- -int main(int argc, char** argv) { - int trace_parse = FALSE; - int argi = 1; - if (argc >= 2 && streq(argv[1], "-t")) { - argi++; - trace_parse = TRUE; - } - if ((argc - argi) != 1) { - fprintf(stderr, "Usage: %s [-t] {expression}\n", argv[0]); - exit(1); - } - - mlr_dsl_ast_t* past = mlr_dsl_parse(argv[argi], trace_parse); - if (past == NULL) { - printf("syntax error\n"); - } else { - mlr_dsl_ast_print(past); - } - - return 0; -} diff --git a/c/perf-mand.txt b/c/perf-mand.txt deleted file mode 100644 index b1c11c5a3..000000000 --- a/c/perf-mand.txt +++ /dev/null @@ -1,31 +0,0 @@ -$ time ruby mand.rb > /dev/null -real 0m1.731s -user 0m1.717s -sys 0m0.012s - -$ time python mand.py > /dev/null -real 0m3.534s -user 0m3.506s -sys 0m0.023s - -$ time a.out > /dev/null -real 0m0.044s -user 0m0.039s -sys 0m0.003s - -# with old hashmap-backed bind-stack -$ time mlr -n put -q -f mand.mlr > /dev/null -real 0m7.258s -user 0m7.237s -sys 0m0.012s - -# with new index-precomputed local-stack (clearless) -$ time mlr -n put -q -f ~/mand.mlr > /dev/null -real 0m2.314s -user 0m2.303s -sys 0m0.007s - -time ruby ~/mand.rb > /dev/null -time python ~/mand.py > /dev/null -time ~/a.out > /dev/null -time mlr -n put -q -f ~/mand.mlr > /dev/null diff --git a/c/pre-travis.sh b/c/pre-travis.sh deleted file mode 100755 index 754d83df6..000000000 --- a/c/pre-travis.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -e -cd .. -make distclean -autoreconf -fiv -./configure -make check diff --git a/c/pushl b/c/pushl deleted file mode 100755 index 7eb348de9..000000000 --- a/c/pushl +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -u -e -cd $mlb -rsync -r -tlzv --delete $(pwd)/ $smith:/home/kerl/local/miller-head - diff --git a/c/reg_test/Makefile.am b/c/reg_test/Makefile.am deleted file mode 100644 index ad7dba57e..000000000 --- a/c/reg_test/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -SUBDIRS= input expected -EXTRA_DIST= run README.md - -TESTS= run - -# created by 'run' -clean-local: - rm -rf output-regtest diff --git a/c/reg_test/Makefile.in b/c/reg_test/Makefile.in deleted file mode 100644 index 4e5833348..000000000 --- a/c/reg_test/Makefile.in +++ /dev/null @@ -1,998 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/reg_test -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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 -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 \ - check recheck distdir -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__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__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` -RECHECK_LOGS = $(TEST_LOGS) -TEST_SUITE_LOG = test-suite.log -TEST_EXTENSIONS = @EXEEXT@ .test -LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/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)/autotools/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/autotools/test-driver -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@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = input expected -EXTRA_DIST = run README.md -TESTS = run -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .log .test .test$(EXEEXT) .trs -$(srcdir)/Makefile.in: $(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 c/reg_test/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/reg_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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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 - -# 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 - -# 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 for $(PACKAGE_STRING)$${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: - @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 - @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 $$? -run.log: run - @p='run'; \ - b='run'; \ - $(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: $(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 - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -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: - -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: info-recursive - -info-am: - -install-data-am: - -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-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: - -.MAKE: $(am__recursive_targets) check-am install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ - check-TESTS 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-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 installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - recheck tags tags-am uninstall uninstall-am - -.PRECIOUS: Makefile - - -# created by 'run' -clean-local: - rm -rf output-regtest - -# 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: diff --git a/c/reg_test/README.md b/c/reg_test/README.md deleted file mode 100644 index a12a168cb..000000000 --- a/c/reg_test/README.md +++ /dev/null @@ -1,5 +0,0 @@ -There are two classes of testing for Miller: - -* C source-file names starting with `test_` use MinUnit to **unit-test** various subsystems of interest. These are separate executables built and run by the build framework. - -* `test/run` runs the main `mlr` executable with canned inputs, comparing actual to canned outputs, to **regression-test** Miller's end-to-end operation. diff --git a/c/reg_test/dev b/c/reg_test/dev deleted file mode 100755 index 279b0083b..000000000 --- a/c/reg_test/dev +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -# ================================================================ -# This is similar to reg_test/run except that this one is only ever run -# manually, not automatically as part of the build. It can be used to iterate on -# as-yet-unreleased features (in particular, features whose definition isn't -# finalized) without breaking the build. -# ================================================================ -set -e - -ourdir=`dirname $0` -srcdir=$ourdir/../.. -pwd=`pwd` - -try1=$pwd/../mlr # For autoconf builds, in-tree or out-of-tree -try2=$srcdir/c/mlr # For non-autoconf builds -if [ -x "$try1" ]; then - path_to_mlr=$try1 -elif [ -x "$try2" ]; then - path_to_mlr=$try2 -else - echo "$0: Could not find path to mlr executable." 1>&2 - echo "Try 1: $try1" 1>&2 - echo "Try 2: $try2" 1>&2 - exit 1 -fi -do_diff="true" - -for arg; do - if [ "$1" = "--valgrind" ]; then - # Leak-check the test suite. Needs 'make mlrg' first. - # ../tools/clean-valg can be used to filter the output. - path_to_mlr="valgrind --leak-check=full ${path_to_mlr}g" - elif [ "$1" = "--nodiff" ]; then - do_diff="false" - fi -done -echo Using mlr executable $path_to_mlr - -indir=$ourdir/input -expdir=$ourdir/expected -outdir=$pwd/output-regtest -reloutdir=./output-regtest -outfile=$outdir/out -expfile=$expdir/out -mkdir -p $outdir - -rm -rvf $outdir -mkdir -p $outdir -touch $outfile -echo - -num_passed=0 - -announce() { - echo >> $outfile - echo "================================================================" >> $outfile - echo "$@" >> $outfile - echo >> $outfile -} - -mention() { - echo >> $outfile - echo ---------------------------------------------------------------- "$@" >> $outfile -} - -run_mlr() { - # Use just "mlr" for info messages - echo mlr "$@" - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - $path_to_mlr "$@" >> $outfile - echo >> $outfile - # since set -e - num_passed=`expr $num_passed + 1` -} - -mlr_expect_fail() { - # Use just "mlr" for info messages - echo mlr "$@" - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - set +e - $path_to_mlr "$@" >> $outfile 2>&1 - status=$? - if [ $status -ne 1 ]; then - echo "Exit status was $status; expected 1." - echo "Exit status was $status; expected 1." >> $outfile - fi - set -e - echo >> $outfile - test $status -eq 1 - # since set -e - num_passed=`expr $num_passed + 1` -} - -# ================================================================ -announce FUNC PROHIBITS - -mlr_expect_fail --from $indir/abixy put ' - func f(x,y,z) { - return $a # cannot reference srecs from functions - } -' - -mlr_expect_fail --from $indir/abixy put ' - func f(x,y,z) { - return $[x] # cannot reference srecs from functions - } -' - -run_mlr -n put '' - -# ================================================================ -cat $outfile - -if [ "$do_diff" = "true" ]; then - echo - diff -I '^mlr ' -C5 $expfile $outfile - echo diff OK # since set -e - echo ALL REGRESSION TESTS PASSED - echo Tests completed: $num_passed -fi diff --git a/c/reg_test/expected/Makefile.am b/c/reg_test/expected/Makefile.am deleted file mode 100644 index db01d3d31..000000000 --- a/c/reg_test/expected/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST= out diff --git a/c/reg_test/expected/Makefile.in b/c/reg_test/expected/Makefile.in deleted file mode 100644 index fe1bae4b0..000000000 --- a/c/reg_test/expected/Makefile.in +++ /dev/null @@ -1,439 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/reg_test/expected -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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 -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -EXTRA_DIST = out -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(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 c/reg_test/expected/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/reg_test/expected/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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: $(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 mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -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 \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool 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 - - -# 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: diff --git a/c/reg_test/expected/out b/c/reg_test/expected/out deleted file mode 100644 index fa2538f6c..000000000 --- a/c/reg_test/expected/out +++ /dev/null @@ -1,59078 +0,0 @@ - -================================================================ -STATELESS MAPPERS - -mlr cat ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat /dev/null - -mlr cat -n ./reg_test/input/abixy-het -n=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -n=2,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -n=3,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -n=4,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -n=5,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -n=6,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -n=7,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -n=8,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -n=9,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -n=10,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat -N counter ./reg_test/input/abixy-het -counter=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -counter=2,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -counter=3,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -counter=4,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -counter=5,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -counter=6,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -counter=7,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -counter=8,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -counter=9,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -counter=10,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat -g a,b -n ./reg_test/input/abixy-het -n=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -n=1,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -n=2,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -n=1,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -n=1,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -n=1,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -n=1,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -n=3,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -n=1,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat -g a,b -N counter ./reg_test/input/abixy-het -counter=1,a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -counter=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -counter=1,aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -counter=2,a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -counter=1,a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -counter=1,a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -counter=1,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -counter=1,a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -counter=3,aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -counter=1,a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cut -f a,x ./reg_test/input/abixy -a=pan,x=0.3467901443380824 -a=eks,x=0.7586799647899636 -a=wye,x=0.20460330576630303 -a=eks,x=0.38139939387114097 -a=wye,x=0.5732889198020006 -a=zee,x=0.5271261600918548 -a=eks,x=0.6117840605678454 -a=zee,x=0.5985540091064224 -a=hat,x=0.03144187646093577 -a=pan,x=0.5026260055412137 - -mlr cut --complement -f a,x ./reg_test/input/abixy -b=pan,i=1,y=0.7268028627434533 -b=pan,i=2,y=0.5221511083334797 -b=wye,i=3,y=0.33831852551664776 -b=wye,i=4,y=0.13418874328430463 -b=pan,i=5,y=0.8636244699032729 -b=pan,i=6,y=0.49322128674835697 -b=zee,i=7,y=0.1878849191181694 -b=wye,i=8,y=0.976181385699006 -b=wye,i=9,y=0.7495507603507059 -b=wye,i=10,y=0.9526183602969864 - -mlr cut -r -f c,e ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 - -abcd=3 - -abcde=5 - - -mlr cut -r -f "C","E" ./reg_test/input/having-fields-regex.dkvp - -ABC=2,DEF=12 - -ABCD=4 - -ABCDE=6 - -mlr cut -r -f "c"i,"e" ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 -ABC=2 -abcd=3 -ABCD=4 -abcde=5 -ABCDE=6 - -mlr cut -r -f "C"i,"E" ./reg_test/input/having-fields-regex.dkvp -abc=1 -ABC=2,DEF=12 -abcd=3 -ABCD=4 -abcde=5 -ABCDE=6 - -mlr cut -r -x -f c,e ./reg_test/input/having-fields-regex.dkvp - -ABC=2,DEF=12 -ghi=13 -ABCD=4,GHI=14 -ghi=15 -ABCDE=6,GHI=16 - -mlr cut -r -x -f "C","E" ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 - -abcd=3,ghi=13 -GHI=14 -abcde=5,ghi=15 -GHI=16 - -mlr cut -r -x -f "C","E"i ./reg_test/input/having-fields-regex.dkvp -abc=1 - -abcd=3,ghi=13 -GHI=14 -ghi=15 -GHI=16 - -mlr cut -r -x -f "c","e"i ./reg_test/input/having-fields-regex.dkvp - -ABC=2 -ghi=13 -ABCD=4,GHI=14 -ghi=15 -GHI=16 - -mlr --csvlite cut -r -f ^Name$,^Date_[0-9].*$ ./reg_test/input/date1.csv ./reg_test/input/date2.csv -Name,Date_201505 -Alice,2015-05-14 -Bob,2015-05-11 -Chuck,2015-05-28 -Denise,2015-05-02 - -Name,Date_201506 -Alice,2015-06-23 -Denise,2015-06-17 -Chuck,2015-06-19 -Bob,2015-06-19 - -mlr having-fields --at-least a,b ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --at-least a,c ./reg_test/input/abixy - -mlr having-fields --at-least a,b,i,x,y ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --which-are a,b,i,x ./reg_test/input/abixy - -mlr having-fields --which-are a,b,i,x,y ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --which-are a,b,i,y,x ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --which-are a,b,i,x,w ./reg_test/input/abixy - -mlr having-fields --which-are a,b,i,x,y,z ./reg_test/input/abixy - -mlr having-fields --at-most a,c ./reg_test/input/abixy - -mlr having-fields --at-most a,b,i,x,y ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --at-most a,b,i,x,y,z ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr having-fields --all-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 - -mlr having-fields --any-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 -abcd=3,ghi=13 -abcde=5,ghi=15 - -mlr having-fields --none-matching "^[a-z][a-z][a-z]$" ./reg_test/input/having-fields-regex.dkvp -ABC=2,DEF=12 -ABCD=4,GHI=14 -ABCDE=6,GHI=16 - -mlr having-fields --all-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 -ABC=2,DEF=12 - -mlr having-fields --any-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp -abc=1,def=11 -ABC=2,DEF=12 -abcd=3,ghi=13 -ABCD=4,GHI=14 -abcde=5,ghi=15 -ABCDE=6,GHI=16 - -mlr having-fields --none-matching "^[a-z][a-z][a-z]$"i ./reg_test/input/having-fields-regex.dkvp - -mlr rename b,BEE,x,EKS ./reg_test/input/abixy -a=pan,BEE=pan,i=1,EKS=0.3467901443380824,y=0.7268028627434533 -a=eks,BEE=pan,i=2,EKS=0.7586799647899636,y=0.5221511083334797 -a=wye,BEE=wye,i=3,EKS=0.20460330576630303,y=0.33831852551664776 -a=eks,BEE=wye,i=4,EKS=0.38139939387114097,y=0.13418874328430463 -a=wye,BEE=pan,i=5,EKS=0.5732889198020006,y=0.8636244699032729 -a=zee,BEE=pan,i=6,EKS=0.5271261600918548,y=0.49322128674835697 -a=eks,BEE=zee,i=7,EKS=0.6117840605678454,y=0.1878849191181694 -a=zee,BEE=wye,i=8,EKS=0.5985540091064224,y=0.976181385699006 -a=hat,BEE=wye,i=9,EKS=0.03144187646093577,y=0.7495507603507059 -a=pan,BEE=wye,i=10,EKS=0.5026260055412137,y=0.9526183602969864 - -mlr rename nonesuch,nonesuch,x,EKS ./reg_test/input/abixy -a=pan,b=pan,i=1,EKS=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,EKS=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,EKS=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,EKS=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,EKS=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,EKS=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,EKS=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,EKS=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,EKS=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,EKS=0.5026260055412137,y=0.9526183602969864 - -mlr label NEW ./reg_test/input/abixy -NEW=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -NEW=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -NEW=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -NEW=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -NEW=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -NEW=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -NEW=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -NEW=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -NEW=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -NEW=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr label a,NEW,c ./reg_test/input/abixy -a=pan,NEW=pan,c=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,NEW=pan,c=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,NEW=wye,c=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,NEW=wye,c=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,NEW=pan,c=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,NEW=pan,c=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,NEW=zee,c=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,NEW=wye,c=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,NEW=wye,c=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,NEW=wye,c=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr label 1,2,3,4,5,6,7,8 ./reg_test/input/abixy -1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 -1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797 -1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776 -1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463 -1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729 -1=zee,2=pan,3=6,4=0.5271261600918548,5=0.49322128674835697 -1=eks,2=zee,3=7,4=0.6117840605678454,5=0.1878849191181694 -1=zee,2=wye,3=8,4=0.5985540091064224,5=0.976181385699006 -1=hat,2=wye,3=9,4=0.03144187646093577,5=0.7495507603507059 -1=pan,2=wye,3=10,4=0.5026260055412137,5=0.9526183602969864 - -mlr label d,x,f ./reg_test/input/abixy -d=pan,x=pan,f=1,y=0.7268028627434533 -d=eks,x=pan,f=2,y=0.5221511083334797 -d=wye,x=wye,f=3,y=0.33831852551664776 -d=eks,x=wye,f=4,y=0.13418874328430463 -d=wye,x=pan,f=5,y=0.8636244699032729 -d=zee,x=pan,f=6,y=0.49322128674835697 -d=eks,x=zee,f=7,y=0.1878849191181694 -d=zee,x=wye,f=8,y=0.976181385699006 -d=hat,x=wye,f=9,y=0.7495507603507059 -d=pan,x=wye,f=10,y=0.9526183602969864 - -mlr label d,x,d ./reg_test/input/abixy -mlr label: labels must be unique; got "d" - -mlr --csvlite rename -r ^Date_[0-9].*$,Date ./reg_test/input/date1.csv ./reg_test/input/date2.csv -Name,Date,Extraneous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r (.*)e(.*),\1EEE\2 ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,ExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,ExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r "(.*)e(.*)"i,\1EEE\2 ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,ExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,ExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r -g "(.*)e(.*)"i,\1EEE\2 ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,ExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,ExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r ^(.a.e)(_.*)?,AA\1BB\2CC ./reg_test/input/date1.csv -AANameBBCC,AADateBB_201505CC,Extraneous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -mlr --csvlite rename -r "e",EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,ExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,ExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r -g "e",EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,ExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,ExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r "e"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,EEExtraneous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,EEExtraneous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr --csvlite rename -r -g "e"i,EEE ./reg_test/input/date1.csv ./reg_test/input/date2.csv -NamEEE,DatEEE_201505,EEExtranEEEous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep - -NamEEE,DatEEE_201506,EEExtranEEEous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d - -mlr regularize ./reg_test/input/regularize.dkvp -a=1,c=2,b=3 -e=4,d=5 -a=6,c=7,b=8 - -mlr --opprint bar -f x,y --lo 0 --hi 1 ./reg_test/input/abixy -a b i x y -pan pan 1 *************........................... *****************************........... -eks pan 2 ******************************.......... ********************.................... -wye wye 3 ********................................ *************........................... -eks wye 4 ***************......................... *****................................... -wye pan 5 **********************.................. **********************************...... -zee pan 6 *********************................... *******************..................... -eks zee 7 ************************................ *******................................. -zee wye 8 ***********************................. ***************************************. -hat wye 9 *....................................... *****************************........... -pan wye 10 ********************.................... **************************************.. - -mlr --opprint bar -f x,y -c c -x x -b b --lo 0.1 --hi 0.9 -w 20 ./reg_test/input/abixy -a b i x y -pan pan 1 ccccccbbbbbbbbbbbbbb cccccccccccccccbbbbb -eks pan 2 ccccccccccccccccbbbb ccccccccccbbbbbbbbbb -wye wye 3 ccbbbbbbbbbbbbbbbbbb cccccbbbbbbbbbbbbbbb -eks wye 4 cccccccbbbbbbbbbbbbb xbbbbbbbbbbbbbbbbbbb -wye pan 5 cccccccccccbbbbbbbbb cccccccccccccccccccb -zee pan 6 ccccccccccbbbbbbbbbb cccccccccbbbbbbbbbbb -eks zee 7 ccccccccccccbbbbbbbb ccbbbbbbbbbbbbbbbbbb -zee wye 8 ccccccccccccbbbbbbbb cccccccccccccccccccx -hat wye 9 xbbbbbbbbbbbbbbbbbbb ccccccccccccccccbbbb -pan wye 10 ccccccccccbbbbbbbbbb cccccccccccccccccccx - -mlr --opprint bar --auto -f x,y -w 10 ./reg_test/input/abixy -a b i x y -pan pan 1 [0.0314419]****......[0.75868] [0.134189]*******...[0.976181] -eks pan 2 [0.0314419]*********#[0.75868] [0.134189]****......[0.976181] -wye wye 3 [0.0314419]**........[0.75868] [0.134189]**........[0.976181] -eks wye 4 [0.0314419]****......[0.75868] [0.134189]#.........[0.976181] -wye pan 5 [0.0314419]*******...[0.75868] [0.134189]********..[0.976181] -zee pan 6 [0.0314419]******....[0.75868] [0.134189]****......[0.976181] -eks zee 7 [0.0314419]*******...[0.75868] [0.134189]#.........[0.976181] -zee wye 8 [0.0314419]*******...[0.75868] [0.134189]*********#[0.976181] -hat wye 9 [0.0314419]#.........[0.75868] [0.134189]*******...[0.976181] -pan wye 10 [0.0314419]******....[0.75868] [0.134189]*********.[0.976181] - -mlr altkv -a=b,c=d,e=f - -mlr altkv -a=b,c=d,e=f,4=g - - -================================================================ -TRIVIAL RETAINERS - -mlr group-by a ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr group-by a,b ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr group-like ./reg_test/input/het.dkvp -host=jupiter -host=saturn -host=mars -host=jupiter -host=mars -host=saturn -df/tmp=2.43MB,uptime=32345sec -df/tmp=1.34MB,uptime=234214132sec -df/tmp=4.97MB,uptime=345089805sec -df/tmp=0.04MB,uptime=890sec -df/tmp=8.55MB,uptime=787897777sec -df/tmp=9.47MB,uptime=234289080sec - -mlr tac ./reg_test/input/abixy -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - -mlr tac /dev/null - -mlr --opprint unsparsify ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint unsparsify ./reg_test/input/abixy-het -a b i x y aaa bbb xxx iii yyy -pan pan 1 0.3467901443380824 0.7268028627434533 - - - - - -eks pan 2 0.7586799647899636 0.5221511083334797 - - - - - -- wye 3 0.20460330576630303 0.33831852551664776 wye - - - - -eks - 4 0.38139939387114097 0.13418874328430463 - wye - - - -wye pan 5 - 0.8636244699032729 - - 0.5732889198020006 - - -zee pan 6 0.5271261600918548 0.49322128674835697 - - - - - -eks zee - 0.6117840605678454 0.1878849191181694 - - - 7 - -zee wye 8 0.5985540091064224 - - - - - 0.976181385699006 -- - 9 0.03144187646093577 0.7495507603507059 hat wye - - - -pan wye 10 0.5026260055412137 0.9526183602969864 - - - - - - -mlr --opprint unsparsify -f nonesuch ./reg_test/input/abixy-het -a b i x y nonesuch -pan pan 1 0.3467901443380824 0.7268028627434533 - -eks pan 2 0.7586799647899636 0.5221511083334797 - - -aaa b i x y nonesuch -wye wye 3 0.20460330576630303 0.33831852551664776 - - -a bbb i x y nonesuch -eks wye 4 0.38139939387114097 0.13418874328430463 - - -a b i xxx y nonesuch -wye pan 5 0.5732889198020006 0.8636244699032729 - - -a b i x y nonesuch -zee pan 6 0.5271261600918548 0.49322128674835697 - - -a b iii x y nonesuch -eks zee 7 0.6117840605678454 0.1878849191181694 - - -a b i x yyy nonesuch -zee wye 8 0.5985540091064224 0.976181385699006 - - -aaa bbb i x y nonesuch -hat wye 9 0.03144187646093577 0.7495507603507059 - - -a b i x y nonesuch -pan wye 10 0.5026260055412137 0.9526183602969864 - - -mlr --opprint unsparsify -f a,b,i,x,y ./reg_test/input/abixy-het -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 - -aaa b i x y a -wye wye 3 0.20460330576630303 0.33831852551664776 - - -a bbb i x y b -eks wye 4 0.38139939387114097 0.13418874328430463 - - -a b i xxx y x -wye pan 5 0.5732889198020006 0.8636244699032729 - - -a b i x y -zee pan 6 0.5271261600918548 0.49322128674835697 - -a b iii x y i -eks zee 7 0.6117840605678454 0.1878849191181694 - - -a b i x yyy y -zee wye 8 0.5985540091064224 0.976181385699006 - - -aaa bbb i x y a b -hat wye 9 0.03144187646093577 0.7495507603507059 - - - -a b i x y -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint unsparsify -f aaa,bbb,xxx,iii,yyy ./reg_test/input/abixy-het -a b i x y aaa bbb xxx iii yyy -pan pan 1 0.3467901443380824 0.7268028627434533 - - - - - -eks pan 2 0.7586799647899636 0.5221511083334797 - - - - - - -aaa b i x y bbb xxx iii yyy -wye wye 3 0.20460330576630303 0.33831852551664776 - - - - - -a bbb i x y aaa xxx iii yyy -eks wye 4 0.38139939387114097 0.13418874328430463 - - - - - -a b i xxx y aaa bbb iii yyy -wye pan 5 0.5732889198020006 0.8636244699032729 - - - - - -a b i x y aaa bbb xxx iii yyy -zee pan 6 0.5271261600918548 0.49322128674835697 - - - - - - -a b iii x y aaa bbb xxx yyy -eks zee 7 0.6117840605678454 0.1878849191181694 - - - - - -a b i x yyy aaa bbb xxx iii -zee wye 8 0.5985540091064224 0.976181385699006 - - - - - -aaa bbb i x y xxx iii yyy -hat wye 9 0.03144187646093577 0.7495507603507059 - - - - -a b i x y aaa bbb xxx iii yyy -pan wye 10 0.5026260055412137 0.9526183602969864 - - - - - - -mlr --opprint unsparsify -f a,b,i,x,y,aaa,bbb,xxx,iii,yyy ./reg_test/input/abixy-het -a b i x y aaa bbb xxx iii yyy -pan pan 1 0.3467901443380824 0.7268028627434533 - - - - - -eks pan 2 0.7586799647899636 0.5221511083334797 - - - - - - -aaa b i x y a bbb xxx iii yyy -wye wye 3 0.20460330576630303 0.33831852551664776 - - - - - - -a bbb i x y b aaa xxx iii yyy -eks wye 4 0.38139939387114097 0.13418874328430463 - - - - - - -a b i xxx y x aaa bbb iii yyy -wye pan 5 0.5732889198020006 0.8636244699032729 - - - - - - -a b i x y aaa bbb xxx iii yyy -zee pan 6 0.5271261600918548 0.49322128674835697 - - - - - - -a b iii x y i aaa bbb xxx yyy -eks zee 7 0.6117840605678454 0.1878849191181694 - - - - - - -a b i x yyy y aaa bbb xxx iii -zee wye 8 0.5985540091064224 0.976181385699006 - - - - - - -aaa bbb i x y a b xxx iii yyy -hat wye 9 0.03144187646093577 0.7495507603507059 - - - - - - -a b i x y aaa bbb xxx iii yyy -pan wye 10 0.5026260055412137 0.9526183602969864 - - - - - - -mlr --opprint unsparsify -f a,b,i,x,y,aaa,bbb,xxx,iii,yyy then regularize ./reg_test/input/abixy-het -a b i x y aaa bbb xxx iii yyy -pan pan 1 0.3467901443380824 0.7268028627434533 - - - - - -eks pan 2 0.7586799647899636 0.5221511083334797 - - - - - -- wye 3 0.20460330576630303 0.33831852551664776 wye - - - - -eks - 4 0.38139939387114097 0.13418874328430463 - wye - - - -wye pan 5 - 0.8636244699032729 - - 0.5732889198020006 - - -zee pan 6 0.5271261600918548 0.49322128674835697 - - - - - -eks zee - 0.6117840605678454 0.1878849191181694 - - - 7 - -zee wye 8 0.5985540091064224 - - - - - 0.976181385699006 -- - 9 0.03144187646093577 0.7495507603507059 hat wye - - - -pan wye 10 0.5026260055412137 0.9526183602969864 - - - - - - -mlr --csv skip-trivial-records ./reg_test/input/trivial-records.csv -a,b,c -1,2,3 -4,,6 -,8,9 - -mlr --csv remove-empty-columns ./reg_test/input/remove-empty-columns.csv -a,c,e -1,3,5 -2,4,5 -3,5,7 - -mlr format-values ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.346790,y=0.726803 -a=eks,b=pan,i=2,x=0.758680,y=0.522151 -a=wye,b=wye,i=3,x=0.204603,y=0.338319 -a=eks,b=wye,i=4,x=0.381399,y=0.134189 -a=wye,b=pan,i=5,x=0.573289,y=0.863624 -a=zee,b=pan,i=6,x=0.527126,y=0.493221 -a=eks,b=zee,i=7,x=0.611784,y=0.187885 -a=zee,b=wye,i=8,x=0.598554,y=0.976181 -a=hat,b=wye,i=9,x=0.031442,y=0.749551 -a=pan,b=wye,i=10,x=0.502626,y=0.952618 - -mlr format-values -n ./reg_test/input/abixy -a=pan,b=pan,i=1.000000,x=0.346790,y=0.726803 -a=eks,b=pan,i=2.000000,x=0.758680,y=0.522151 -a=wye,b=wye,i=3.000000,x=0.204603,y=0.338319 -a=eks,b=wye,i=4.000000,x=0.381399,y=0.134189 -a=wye,b=pan,i=5.000000,x=0.573289,y=0.863624 -a=zee,b=pan,i=6.000000,x=0.527126,y=0.493221 -a=eks,b=zee,i=7.000000,x=0.611784,y=0.187885 -a=zee,b=wye,i=8.000000,x=0.598554,y=0.976181 -a=hat,b=wye,i=9.000000,x=0.031442,y=0.749551 -a=pan,b=wye,i=10.000000,x=0.502626,y=0.952618 - -mlr format-values -i %08llx -f %.6le -s X%sX ./reg_test/input/abixy -a=XpanX,b=XpanX,i=00000001,x=3.467901e-01,y=7.268029e-01 -a=XeksX,b=XpanX,i=00000002,x=7.586800e-01,y=5.221511e-01 -a=XwyeX,b=XwyeX,i=00000003,x=2.046033e-01,y=3.383185e-01 -a=XeksX,b=XwyeX,i=00000004,x=3.813994e-01,y=1.341887e-01 -a=XwyeX,b=XpanX,i=00000005,x=5.732889e-01,y=8.636245e-01 -a=XzeeX,b=XpanX,i=00000006,x=5.271262e-01,y=4.932213e-01 -a=XeksX,b=XzeeX,i=00000007,x=6.117841e-01,y=1.878849e-01 -a=XzeeX,b=XwyeX,i=00000008,x=5.985540e-01,y=9.761814e-01 -a=XhatX,b=XwyeX,i=00000009,x=3.144188e-02,y=7.495508e-01 -a=XpanX,b=XwyeX,i=0000000a,x=5.026260e-01,y=9.526184e-01 - -mlr format-values -i %08llx -f %.6le -s X%sX -n ./reg_test/input/abixy -a=XpanX,b=XpanX,i=1.000000e+00,x=3.467901e-01,y=7.268029e-01 -a=XeksX,b=XpanX,i=2.000000e+00,x=7.586800e-01,y=5.221511e-01 -a=XwyeX,b=XwyeX,i=3.000000e+00,x=2.046033e-01,y=3.383185e-01 -a=XeksX,b=XwyeX,i=4.000000e+00,x=3.813994e-01,y=1.341887e-01 -a=XwyeX,b=XpanX,i=5.000000e+00,x=5.732889e-01,y=8.636245e-01 -a=XzeeX,b=XpanX,i=6.000000e+00,x=5.271262e-01,y=4.932213e-01 -a=XeksX,b=XzeeX,i=7.000000e+00,x=6.117841e-01,y=1.878849e-01 -a=XzeeX,b=XwyeX,i=8.000000e+00,x=5.985540e-01,y=9.761814e-01 -a=XhatX,b=XwyeX,i=9.000000e+00,x=3.144188e-02,y=7.495508e-01 -a=XpanX,b=XwyeX,i=1.000000e+01,x=5.026260e-01,y=9.526184e-01 - - -================================================================ -REPEAT - -mlr repeat -n 5 ./reg_test/input/repeat-input.dat -a=1,b=2,c=3 -a=1,b=2,c=3 -a=1,b=2,c=3 -a=1,b=2,c=3 -a=1,b=2,c=3 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 - -mlr repeat -f a ./reg_test/input/repeat-input.dat -a=1,b=2,c=3 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 - -mlr repeat -f b ./reg_test/input/repeat-input.dat -a=1,b=2,c=3 -a=1,b=2,c=3 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 - -mlr repeat -f c ./reg_test/input/repeat-input.dat -a=1,b=2,c=3 -a=1,b=2,c=3 -a=1,b=2,c=3 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=3,b=4,c=5 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=6,b=,c=7 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 -a=8,x=,c=9 - - -================================================================ -MAPPER NOTHING - -mlr cat then nothing - -mlr cat then nothing ./reg_test/input/abixy - -mlr tac then nothing ./reg_test/input/abixy - -mlr cat then nothing ./reg_test/input/abixy ./reg_test/input/abixy - -mlr cat then nothing then cat ./reg_test/input/abixy - - -================================================================ -CHAINING - -mlr cat then cat ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr cat then tac ./reg_test/input/short -c=3 -b=2 -a=1 - -mlr tac then cat ./reg_test/input/short -c=3 -b=2 -a=1 - -mlr tac then tac ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr cat then cat then cat ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr cat then cat then tac ./reg_test/input/short -c=3 -b=2 -a=1 - -mlr cat then tac then cat ./reg_test/input/short -c=3 -b=2 -a=1 - -mlr cat then tac then tac ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr tac then cat then cat ./reg_test/input/short -c=3 -b=2 -a=1 - -mlr tac then cat then tac ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr tac then tac then cat ./reg_test/input/short -a=1 -b=2 -c=3 - -mlr tac then tac then tac ./reg_test/input/short -c=3 -b=2 -a=1 - - -================================================================ -HEAD/TAIL/ETC. - -mlr head -n 2 ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr head -n 2 -g a ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr head -n 2 -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr then cat then head -n 2 -g a,b then tac ./reg_test/input/abixy-het -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - -mlr head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -Final NR is 3 - -mlr head -n 2 -g a then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 -a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 -a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 -a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 -a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 -a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 -a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 -a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 -Final NR is 2000 - -mlr cat then head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -Final NR is 3 - -mlr tac then head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide -Final NR is 2000 -a=wye,b=cat,i=2000,x=0.10887569736363611,y=0.3480524315645718,x2=0.01185391747641808,xy=0.037894451205701986,y2=0.12114049511801092 -a=hat,b=dog,i=1999,x=0.010819574860139292,y=0.8983779455002124,x2=0.00011706320015415817,xy=0.009720067434037685,y2=0.8070829329611827 - -mlr head -n 2 then put end{ print "Final NR is ".NR} ./reg_test/input/abixy-wide ./reg_test/input/abixy-wide ./reg_test/input/abixy-wide -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -Final NR is 3 - -mlr tail -n 2 ./reg_test/input/abixy-het -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr tail -n 2 -g a ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 - -mlr tail -n 2 -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr top -f x,y -n 2 ./reg_test/input/abixy-het -top_idx=1,x_top=0.758680,y_top=0.952618 -top_idx=2,x_top=0.611784,y_top=0.749551 - -mlr top -f x,y -n 2 -g a ./reg_test/input/abixy-het -a=pan,top_idx=1,x_top=0.502626,y_top=0.952618 -a=pan,top_idx=2,x_top=0.346790,y_top=0.726803 -a=eks,top_idx=1,x_top=0.758680,y_top=0.522151 -a=eks,top_idx=2,x_top=0.611784,y_top=0.187885 -a=zee,top_idx=1,x_top=0.527126,y_top=0.493221 -a=zee,top_idx=2,x_top=,y_top= - -mlr top -f x,y -n 2 -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,top_idx=1,x_top=0.346790,y_top=0.726803 -a=pan,b=pan,top_idx=2,x_top=,y_top= -a=eks,b=pan,top_idx=1,x_top=0.758680,y_top=0.522151 -a=eks,b=pan,top_idx=2,x_top=,y_top= -a=zee,b=pan,top_idx=1,x_top=0.527126,y_top=0.493221 -a=zee,b=pan,top_idx=2,x_top=,y_top= -a=eks,b=zee,top_idx=1,x_top=0.611784,y_top=0.187885 -a=eks,b=zee,top_idx=2,x_top=,y_top= -a=pan,b=wye,top_idx=1,x_top=0.502626,y_top=0.952618 -a=pan,b=wye,top_idx=2,x_top=,y_top= - -mlr top -f x,y -n 2 ./reg_test/input/ints.dkvp -top_idx=1,x_top=9,y_top=9 -top_idx=2,x_top=8,y_top=9 - -mlr top -f x,y -n 2 -F ./reg_test/input/ints.dkvp -top_idx=1,x_top=9.000000,y_top=9.000000 -top_idx=2,x_top=8.000000,y_top=9.000000 - -mlr top -n 4 -f x ./reg_test/input/abixy-wide -top_idx=1,x_top=0.999730 -top_idx=2,x_top=0.999308 -top_idx=3,x_top=0.997339 -top_idx=4,x_top=0.997245 - -mlr top -n 1 -f x,y ./reg_test/input/abixy-wide -top_idx=1,x_top=0.999730,y_top=0.999522 - -mlr top -n 4 -f x -g a ./reg_test/input/abixy-wide -a=cat,top_idx=1,x_top=0.996359 -a=cat,top_idx=2,x_top=0.990588 -a=cat,top_idx=3,x_top=0.990160 -a=cat,top_idx=4,x_top=0.986548 -a=pan,top_idx=1,x_top=0.999730 -a=pan,top_idx=2,x_top=0.999308 -a=pan,top_idx=3,x_top=0.996583 -a=pan,top_idx=4,x_top=0.990853 -a=wye,top_idx=1,x_top=0.997339 -a=wye,top_idx=2,x_top=0.996525 -a=wye,top_idx=3,x_top=0.995414 -a=wye,top_idx=4,x_top=0.994219 -a=dog,top_idx=1,x_top=0.997245 -a=dog,top_idx=2,x_top=0.988581 -a=dog,top_idx=3,x_top=0.980266 -a=dog,top_idx=4,x_top=0.977280 -a=hat,top_idx=1,x_top=0.997014 -a=hat,top_idx=2,x_top=0.995705 -a=hat,top_idx=3,x_top=0.992879 -a=hat,top_idx=4,x_top=0.989639 - -mlr top -n 1 -f x,y -g a ./reg_test/input/abixy-wide -a=cat,top_idx=1,x_top=0.996359,y_top=0.997929 -a=pan,top_idx=1,x_top=0.999730,y_top=0.999319 -a=wye,top_idx=1,x_top=0.997339,y_top=0.999450 -a=dog,top_idx=1,x_top=0.997245,y_top=0.999522 -a=hat,top_idx=1,x_top=0.997014,y_top=0.991400 - -mlr top -a -n 4 -f x ./reg_test/input/abixy-wide -a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 -a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 -a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 -a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 - -mlr top -a -n 4 -f x -g a ./reg_test/input/abixy-wide -a=cat,b=dog,i=901,x=0.9963591865818606,y=0.9423606044154952,x2=0.9927316286860669,xy=0.9389296452822133,y2=0.8880435087543374 -a=cat,b=wye,i=135,x=0.9905881531288986,y=0.7789092765450115,x2=0.9812648891193222,xy=0.7715783017076895,y2=0.6066996610878732 -a=cat,b=hat,i=975,x=0.9901595235021967,y=0.8592860989306361,x2=0.9804158819820973,xy=0.8508303142692202,y2=0.738372599815431 -a=cat,b=dog,i=748,x=0.986548192318023,y=0.22327955924073406,x2=0.973277335765959,xy=0.2202760455505111,y2=0.04985376157473647 -a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 -a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 -a=pan,b=pan,i=756,x=0.9965826588776338,y=0.8864833103309704,x2=0.9931769959756142,xy=0.883453894460285,y2=0.7858526594953555 -a=pan,b=wye,i=1876,x=0.9908531016291003,y=0.318873165751998,x2=0.9817898690080082,xy=0.3159564653116574,y2=0.10168009583670118 -a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 -a=wye,b=dog,i=1772,x=0.9965249307670624,y=0.8078766237661098,x2=0.9930619376402985,xy=0.8050691965668507,y2=0.6526646392277285 -a=wye,b=pan,i=450,x=0.9954136776717515,y=0.8564839236024028,x2=0.9908483896960015,xy=0.8525558122597992,y2=0.7335647113893665 -a=wye,b=dog,i=882,x=0.9942189496990836,y=0.3298671968153588,x2=0.988471319940749,xy=0.32796021795794694,y2=0.10881236753482267 -a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 -a=dog,b=hat,i=1680,x=0.9885812365291148,y=0.048768165346359305,x2=0.9772928612174336,xy=0.04821129320136021,y2=0.0023783339512498405 -a=dog,b=wye,i=1331,x=0.9802656048578349,y=0.9431768957041479,x2=0.9609206560672968,xy=0.9245638701553616,y2=0.889582656590113 -a=dog,b=pan,i=978,x=0.9772797759762182,y=0.5328687567382687,x2=0.9550757605321272,xy=0.5207618592099011,y2=0.2839491119077882 -a=hat,b=dog,i=1894,x=0.9970136511026203,y=0.2054109087831395,x2=0.9940362204849775,xy=0.2047974801421852,y2=0.04219364144711526 -a=hat,b=hat,i=818,x=0.9957052214494239,y=0.026702922142899044,x2=0.9914288880216462,xy=0.026588239005642018,y2=0.0007130460509697281 -a=hat,b=hat,i=1513,x=0.9928788688650781,y=0.1805357299725343,x2=0.9858084482387971,xy=0.17925011136486105,y2=0.03259314979671582 -a=hat,b=dog,i=1768,x=0.9896393441122658,y=0.5323182982465756,x2=0.9793860314149557,xy=0.5268031315356986,y2=0.2833627706481302 - -mlr top -n 3 -f x,y ./reg_test/input/near-ovf.dkvp -top_idx=1,x_top=9223372036854775807,y_top=-9223372036854775801 -top_idx=2,x_top=9223372036854775806,y_top=-9223372036854775802 -top_idx=3,x_top=9223372036854775805,y_top=-9223372036854775803 - -mlr top -n 3 -f x,y --min ./reg_test/input/near-ovf.dkvp -top_idx=1,x_top=9223372036854775801,y_top=-9223372036854775807 -top_idx=2,x_top=9223372036854775802,y_top=-9223372036854775806 -top_idx=3,x_top=9223372036854775803,y_top=-9223372036854775805 - -mlr top -F -n 3 -f x,y ./reg_test/input/near-ovf.dkvp -top_idx=1,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 -top_idx=2,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 -top_idx=3,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 - -mlr top -F -n 3 -f x,y --min ./reg_test/input/near-ovf.dkvp -top_idx=1,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 -top_idx=2,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 -top_idx=3,x_top=9223372036854775808.000000,y_top=-9223372036854775808.000000 - -mlr --seed 12345 bootstrap ./reg_test/input/abixy-het -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 - -mlr --seed 12345 bootstrap -n 2 ./reg_test/input/abixy-het -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -mlr --seed 12345 bootstrap -n 20 ./reg_test/input/abixy-het -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 - -mlr --seed 12345 sample -k 2 ./reg_test/input/abixy-het -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr --seed 12345 sample -k 2 -g a ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 - -mlr --seed 12345 sample -k 2 -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --seed 12345 shuffle ./reg_test/input/abixy-het -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - -mlr --seed 23456 shuffle ./reg_test/input/abixy-het -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr --seed 34567 shuffle ./reg_test/input/abixy-het -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr uniq -g a ./reg_test/input/abixy-het -a=pan -a=eks -a=wye -a=zee - -mlr uniq -g a,b ./reg_test/input/abixy-het -a=pan,b=pan -a=eks,b=pan -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=pan,b=wye - -mlr uniq -f a ./reg_test/input/abixy-het -a=pan -a=eks -a=wye -a=zee - -mlr uniq -f a,b ./reg_test/input/abixy-het -a=pan,b=pan -a=eks,b=pan -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=pan,b=wye - -mlr uniq -c -g a ./reg_test/input/abixy-het -a=pan,count=2 -a=eks,count=3 -a=wye,count=1 -a=zee,count=2 - -mlr uniq -c -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,count=1 -a=eks,b=pan,count=1 -a=wye,b=pan,count=1 -a=zee,b=pan,count=1 -a=eks,b=zee,count=1 -a=zee,b=wye,count=1 -a=pan,b=wye,count=1 - -mlr count-distinct -f a ./reg_test/input/small ./reg_test/input/abixy -a=pan,count=4 -a=eks,count=6 -a=wye,count=4 -a=zee,count=4 -a=hat,count=2 - -mlr count-distinct -f a,b ./reg_test/input/small ./reg_test/input/abixy -a=pan,b=pan,count=2 -a=eks,b=pan,count=2 -a=wye,b=wye,count=2 -a=eks,b=wye,count=2 -a=wye,b=pan,count=2 -a=zee,b=pan,count=2 -a=eks,b=zee,count=2 -a=zee,b=wye,count=2 -a=hat,b=wye,count=2 -a=pan,b=wye,count=2 - -mlr count-distinct -f a,b -u ./reg_test/input/small ./reg_test/input/abixy -field=a,value=pan,count=4 -field=a,value=eks,count=6 -field=a,value=wye,count=4 -field=a,value=zee,count=4 -field=a,value=hat,count=2 -field=b,value=pan,count=8 -field=b,value=wye,count=10 -field=b,value=zee,count=2 - -mlr count-distinct -f a -n ./reg_test/input/small ./reg_test/input/abixy -count=5 - -mlr count-distinct -f a,b -n ./reg_test/input/small ./reg_test/input/abixy -count=10 - -mlr uniq -g a -o foo ./reg_test/input/abixy-het -a=pan -a=eks -a=wye -a=zee - -mlr uniq -g a,b -o foo ./reg_test/input/abixy-het -a=pan,b=pan -a=eks,b=pan -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=pan,b=wye - -mlr uniq -f a -o foo ./reg_test/input/abixy-het -a=pan -a=eks -a=wye -a=zee - -mlr uniq -f a,b -o foo ./reg_test/input/abixy-het -a=pan,b=pan -a=eks,b=pan -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=pan,b=wye - -mlr uniq -c -g a -o foo ./reg_test/input/abixy-het -a=pan,foo=2 -a=eks,foo=3 -a=wye,foo=1 -a=zee,foo=2 - -mlr uniq -c -g a,b -o foo ./reg_test/input/abixy-het -a=pan,b=pan,foo=1 -a=eks,b=pan,foo=1 -a=wye,b=pan,foo=1 -a=zee,b=pan,foo=1 -a=eks,b=zee,foo=1 -a=zee,b=wye,foo=1 -a=pan,b=wye,foo=1 - -mlr uniq -a ./reg_test/input/repeats.dkvp -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=1 -color=yellow,shape=triangle,flag=1 - -mlr uniq -a -c ./reg_test/input/repeats.dkvp -count=17,color=red,shape=square,flag=0 -count=11,color=purple,shape=triangle,flag=0 -count=11,color=yellow,shape=circle,flag=1 -count=6,color=red,shape=circle,flag=1 -count=7,color=purple,shape=square,flag=0 -count=3,color=red,shape=square,flag=1 -count=2,color=yellow,shape=triangle,flag=1 - -mlr uniq -a -c -o foo ./reg_test/input/repeats.dkvp -foo=17,color=red,shape=square,flag=0 -foo=11,color=purple,shape=triangle,flag=0 -foo=11,color=yellow,shape=circle,flag=1 -foo=6,color=red,shape=circle,flag=1 -foo=7,color=purple,shape=square,flag=0 -foo=3,color=red,shape=square,flag=1 -foo=2,color=yellow,shape=triangle,flag=1 - -mlr uniq -a -n ./reg_test/input/repeats.dkvp -count=7 - -mlr uniq -a -n -o bar ./reg_test/input/repeats.dkvp -bar=7 - -mlr count-distinct -f a -o foo ./reg_test/input/small ./reg_test/input/abixy -a=pan,foo=4 -a=eks,foo=6 -a=wye,foo=4 -a=zee,foo=4 -a=hat,foo=2 - -mlr count-distinct -f a,b -o foo ./reg_test/input/small ./reg_test/input/abixy -a=pan,b=pan,foo=2 -a=eks,b=pan,foo=2 -a=wye,b=wye,foo=2 -a=eks,b=wye,foo=2 -a=wye,b=pan,foo=2 -a=zee,b=pan,foo=2 -a=eks,b=zee,foo=2 -a=zee,b=wye,foo=2 -a=hat,b=wye,foo=2 -a=pan,b=wye,foo=2 - -mlr count-distinct -f a -n -o foo ./reg_test/input/small ./reg_test/input/abixy -count=5 - -mlr count-distinct -f a,b -n -o foo ./reg_test/input/small ./reg_test/input/abixy -count=10 - -mlr grep pan ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr grep -v pan ./reg_test/input/abixy-het -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr decimate -n 4 ./reg_test/input/abixy -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr decimate -b -n 4 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr decimate -e -n 4 ./reg_test/input/abixy -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr decimate -g a -n 2 ./reg_test/input/abixy -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr decimate -g a -b -n 2 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr decimate -g a -e -n 2 ./reg_test/input/abixy -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -WHITESPACE-REDUCTION - -mlr --icsv --ojson cat ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": " xy", "b ": 2, " c": 3 } -{ "n": 7, "a": " xy", "b ": 2, " c": 3 } -{ "n": 8, "a": " xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 11, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 12, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": " ", "b ": 2, " c": 3 } -{ "n": 15, "a": " ", "b ": 2, " c": 3 } -{ "n": 16, "a": " ", "b ": 2, " c": 3 } - -mlr --icsv --ojson put $a = lstrip($a) ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": "xy", "b ": 2, " c": 3 } -{ "n": 7, "a": "xy", "b ": 2, " c": 3 } -{ "n": 8, "a": "xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 11, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 12, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": "", "b ": 2, " c": 3 } -{ "n": 15, "a": "", "b ": 2, " c": 3 } -{ "n": 16, "a": "", "b ": 2, " c": 3 } - -mlr --icsv --ojson put $a = rstrip($a) ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": " xy", "b ": 2, " c": 3 } -{ "n": 7, "a": " xy", "b ": 2, " c": 3 } -{ "n": 8, "a": " xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": " xy", "b ": 2, " c": 3 } -{ "n": 11, "a": " xy", "b ": 2, " c": 3 } -{ "n": 12, "a": " xy", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": "", "b ": 2, " c": 3 } -{ "n": 15, "a": "", "b ": 2, " c": 3 } -{ "n": 16, "a": "", "b ": 2, " c": 3 } - -mlr --icsv --ojson put $a = strip($a) ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": "xy", "b ": 2, " c": 3 } -{ "n": 7, "a": "xy", "b ": 2, " c": 3 } -{ "n": 8, "a": "xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": "xy", "b ": 2, " c": 3 } -{ "n": 11, "a": "xy", "b ": 2, " c": 3 } -{ "n": 12, "a": "xy", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": "", "b ": 2, " c": 3 } -{ "n": 15, "a": "", "b ": 2, " c": 3 } -{ "n": 16, "a": "", "b ": 2, " c": 3 } - -mlr --icsv --ojson put $a = collapse_whitespace($a) ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy ", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": " xy", "b ": 2, " c": 3 } -{ "n": 7, "a": " xy", "b ": 2, " c": 3 } -{ "n": 8, "a": " xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 11, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 12, "a": " xy ", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": " ", "b ": 2, " c": 3 } -{ "n": 15, "a": " ", "b ": 2, " c": 3 } -{ "n": 16, "a": " ", "b ": 2, " c": 3 } - -mlr --icsv --ojson put $a = clean_whitespace($a) ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": "xy", "b ": 2, " c": 3 } -{ "n": 7, "a": "xy", "b ": 2, " c": 3 } -{ "n": 8, "a": "xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": "xy", "b ": 2, " c": 3 } -{ "n": 11, "a": "xy", "b ": 2, " c": 3 } -{ "n": 12, "a": "xy", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": "", "b ": 2, " c": 3 } -{ "n": 15, "a": "", "b ": 2, " c": 3 } -{ "n": 16, "a": "", "b ": 2, " c": 3 } - -mlr --icsv --ojson clean-whitespace -k ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b": 2, "c": 3 } -{ "n": 2, "a": "xy ", "b": 2, "c": 3 } -{ "n": 3, "a": "xy ", "b": 2, "c": 3 } -{ "n": 4, "a": "xy ", "b": 2, "c": 3 } -{ "n": 5, "a": "xy", "b": 2, "c": 3 } -{ "n": 6, "a": " xy", "b": 2, "c": 3 } -{ "n": 7, "a": " xy", "b": 2, "c": 3 } -{ "n": 8, "a": " xy", "b": 2, "c": 3 } -{ "n": 9, "a": "xy", "b": 2, "c": 3 } -{ "n": 10, "a": " xy ", "b": 2, "c": 3 } -{ "n": 11, "a": " xy ", "b": 2, "c": 3 } -{ "n": 12, "a": " xy ", "b": 2, "c": 3 } -{ "n": 13, "a": "", "b": 2, "c": 3 } -{ "n": 14, "a": " ", "b": 2, "c": 3 } -{ "n": 15, "a": " ", "b": 2, "c": 3 } -{ "n": 16, "a": " ", "b": 2, "c": 3 } - -mlr --icsv --ojson clean-whitespace -v ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b ": 2, " c": 3 } -{ "n": 2, "a": "xy", "b ": 2, " c": 3 } -{ "n": 3, "a": "xy", "b ": 2, " c": 3 } -{ "n": 4, "a": "xy", "b ": 2, " c": 3 } -{ "n": 5, "a": "xy", "b ": 2, " c": 3 } -{ "n": 6, "a": "xy", "b ": 2, " c": 3 } -{ "n": 7, "a": "xy", "b ": 2, " c": 3 } -{ "n": 8, "a": "xy", "b ": 2, " c": 3 } -{ "n": 9, "a": "xy", "b ": 2, " c": 3 } -{ "n": 10, "a": "xy", "b ": 2, " c": 3 } -{ "n": 11, "a": "xy", "b ": 2, " c": 3 } -{ "n": 12, "a": "xy", "b ": 2, " c": 3 } -{ "n": 13, "a": "", "b ": 2, " c": 3 } -{ "n": 14, "a": "", "b ": 2, " c": 3 } -{ "n": 15, "a": "", "b ": 2, " c": 3 } -{ "n": 16, "a": "", "b ": 2, " c": 3 } - -mlr --icsv --ojson clean-whitespace ./reg_test/input/clean-whitespace.csv -{ "n": 1, "a": "xy", "b": 2, "c": 3 } -{ "n": 2, "a": "xy", "b": 2, "c": 3 } -{ "n": 3, "a": "xy", "b": 2, "c": 3 } -{ "n": 4, "a": "xy", "b": 2, "c": 3 } -{ "n": 5, "a": "xy", "b": 2, "c": 3 } -{ "n": 6, "a": "xy", "b": 2, "c": 3 } -{ "n": 7, "a": "xy", "b": 2, "c": 3 } -{ "n": 8, "a": "xy", "b": 2, "c": 3 } -{ "n": 9, "a": "xy", "b": 2, "c": 3 } -{ "n": 10, "a": "xy", "b": 2, "c": 3 } -{ "n": 11, "a": "xy", "b": 2, "c": 3 } -{ "n": 12, "a": "xy", "b": 2, "c": 3 } -{ "n": 13, "a": "", "b": 2, "c": 3 } -{ "n": 14, "a": "", "b": 2, "c": 3 } -{ "n": 15, "a": "", "b": 2, "c": 3 } -{ "n": 16, "a": "", "b": 2, "c": 3 } - - -================================================================ -SORT - -mlr sort -f a ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr sort -r a ./reg_test/input/abixy -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -mlr sort -f x ./reg_test/input/abixy -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr sort -r x ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr sort -nf x ./reg_test/input/abixy -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr sort -nr x ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr sort -f a,b ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr sort -r a,b ./reg_test/input/abixy -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr sort -f x,y ./reg_test/input/abixy -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr sort -r x,y ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr sort -nf x,y ./reg_test/input/abixy -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -mlr sort -nr x,y ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr sort -f a -nr x ./reg_test/input/abixy -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - -mlr sort -nr y -f a ./reg_test/input/abixy -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -mlr sort -f a -r b -nf x -nr y ./reg_test/input/abixy -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - -mlr sort -f x ./reg_test/input/sort-het.dkvp -x=1 -x=2 -x=4 -a=3 - -mlr sort -r x ./reg_test/input/sort-het.dkvp -x=4 -x=2 -x=1 -a=3 - - -================================================================ -SORT-WITHIN-RECORDS - -mlr sort-within-records ./reg_test/input/sort-within-records.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -JOIN - -mlr --opprint join -s -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -mlr --opprint join -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -mlr --opprint join -s --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -l x -4 g - -mlr --opprint join --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -l x -4 g - -mlr --opprint join -s --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -r y -5 z - -mlr --opprint join --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -r y -5 z - -mlr --opprint join -s --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -l x -4 g - -r y -5 z - -mlr --opprint join --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -o x y -1 a s -2 b t -2 c t -2 d t -2 b v -2 c v -2 d v -3 e w -3 f w -3 e x -3 f x -3 e y -3 f y - -r y -5 z - -l x -4 g - -mlr --opprint join -s --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -l x -4 g - -mlr --opprint join --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -l x -4 g - -mlr --opprint join -s --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -5 z - -mlr --opprint join --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -5 z - -mlr --opprint join -s --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -l x -4 g - -r y -5 z - -mlr --opprint join --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -5 z - -l x -4 g - -mlr join -l l -r r -j j -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp -j=1,x=a,y=s -j=2,x=b,y=t -j=2,x=c,y=t -j=2,x=d,y=t -j=2,x=b,y=v -j=2,x=c,y=v -j=2,x=d,y=v -j=3,x=e,y=w -j=3,x=f,y=w -j=3,x=e,y=x -j=3,x=f,y=x -j=3,x=e,y=y -j=3,x=f,y=y - -mlr join -l l -j r -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp -r=1,x=a,y=s -r=2,x=b,y=t -r=2,x=c,y=t -r=2,x=d,y=t -r=2,x=b,y=v -r=2,x=c,y=v -r=2,x=d,y=v -r=3,x=e,y=w -r=3,x=f,y=w -r=3,x=e,y=x -r=3,x=f,y=x -r=3,x=e,y=y -r=3,x=f,y=y - -mlr join -r r -j l -f ./reg_test/input/joina.dkvp ./reg_test/input/joinb.dkvp -l=1,x=a,y=s -l=2,x=b,y=t -l=2,x=c,y=t -l=2,x=d,y=t -l=2,x=b,y=v -l=2,x=c,y=v -l=2,x=d,y=v -l=3,x=e,y=w -l=3,x=f,y=w -l=3,x=e,y=x -l=3,x=f,y=x -l=3,x=e,y=y -l=3,x=f,y=y - -mlr --opprint join -s -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join -s --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join -s --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join -s --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join -s --np --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join --np --ul -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp - -mlr --opprint join -s --np --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join --np --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join -s --np --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join --np --ul --ur -f /dev/null -l l -r r -j o ./reg_test/input/joinb.dkvp -r y -1 s -2 t -2 v -3 w -3 x -3 y -5 z - -mlr --opprint join -s -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join -s --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join -s --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join -s --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join -s --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join --np --ul -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join -s --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join --np --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null - -mlr --opprint join -s --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --opprint join --np --ul --ur -f ./reg_test/input/joina.dkvp -l l -r r -j o /dev/null -l x -1 a -2 b -2 c -2 d -3 e -3 f -4 g - -mlr --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --odkvp join -j a -f ./reg_test/input/abixy-het ./reg_test/input/join-het.dkvp -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,n=123 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,n=123 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,n=123 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,n=234 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,n=234 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,n=345 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,n=456 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,n=456 - -mlr --odkvp join --np --ul --ur -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -aye=bee,enn=emm - -mlr --odkvp join --np --ul --ur -j a -f ./reg_test/input/abixy-het ./reg_test/input/join-het.dkvp -aye=bee,enn=emm -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr --idkvp --oxtab join --lp left_ --rp right_ -j i -f ./reg_test/input/abixy-het ./reg_test/input/abixy-het -i 1 -left_a pan -left_b pan -left_x 0.3467901443380824 -left_y 0.7268028627434533 -right_a pan -right_b pan -right_x 0.3467901443380824 -right_y 0.7268028627434533 - -i 2 -left_a eks -left_b pan -left_x 0.7586799647899636 -left_y 0.5221511083334797 -right_a eks -right_b pan -right_x 0.7586799647899636 -right_y 0.5221511083334797 - -i 3 -left_aaa wye -left_b wye -left_x 0.20460330576630303 -left_y 0.33831852551664776 -right_aaa wye -right_b wye -right_x 0.20460330576630303 -right_y 0.33831852551664776 - -i 4 -left_a eks -left_bbb wye -left_x 0.38139939387114097 -left_y 0.13418874328430463 -right_a eks -right_bbb wye -right_x 0.38139939387114097 -right_y 0.13418874328430463 - -i 5 -left_a wye -left_b pan -left_xxx 0.5732889198020006 -left_y 0.8636244699032729 -right_a wye -right_b pan -right_xxx 0.5732889198020006 -right_y 0.8636244699032729 - -i 6 -left_a zee -left_b pan -left_x 0.5271261600918548 -left_y 0.49322128674835697 -right_a zee -right_b pan -right_x 0.5271261600918548 -right_y 0.49322128674835697 - -i 8 -left_a zee -left_b wye -left_x 0.5985540091064224 -left_yyy 0.976181385699006 -right_a zee -right_b wye -right_x 0.5985540091064224 -right_yyy 0.976181385699006 - -i 9 -left_aaa hat -left_bbb wye -left_x 0.03144187646093577 -left_y 0.7495507603507059 -right_aaa hat -right_bbb wye -right_x 0.03144187646093577 -right_y 0.7495507603507059 - -i 10 -left_a pan -left_b wye -left_x 0.5026260055412137 -left_y 0.9526183602969864 -right_a pan -right_b wye -right_x 0.5026260055412137 -right_y 0.9526183602969864 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -j=1,b=11 -j=1,b=12 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -j=1,b=11 -j=1,b=12 -j=1,b=11 -j=1,b=12 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -j=1,b=11 -j=1,b=12 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -j=1,b=11 -j=1,b=12 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -j=1,b=11 -j=1,b=12 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -j=1,b=11 -j=1,b=12 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -j=1,b=11 -j=1,b=12 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -j=3,b=14 -j=3,b=15 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -j=3,b=14 -j=3,b=15 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -j=3,b=14 -j=3,b=15 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -j=5,b=17 -j=5,b=18 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -j=5,b=17 -j=5,b=18 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 - -mlr join -s -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -x=100,b=10 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -x=100,b=10 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -x=100,b=10 -x=200,b=13 -x=300,b=16 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -x=100,b=10 -x=200,b=13 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -x=100,b=10 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -x=100,b=10 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -x=100,b=10 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=3,b=14 -l=3,b=15 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=3,b=14 -l=3,b=15 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 -l=5,b=17 -l=5,b=18 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 -x=100,b=10 -x=200,b=13 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -y=111 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -y=111 -y=222 -r=2 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -y=111 -y=222 -r=4 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -y=111 -y=222 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 -y=111 -r=2 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 -y=111 -r=2 -y=222 -r=2 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -y=111 -r=2 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 -y=111 -r=2 -y=222 -r=4 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -y=111 -r=2 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 -y=111 -r=2 -y=222 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -y=111 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -y=111 -y=222 -r=4 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -y=111 -y=222 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 -y=111 -r=4 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 -y=111 -r=4 -y=222 -r=4 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -y=111 -r=4 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 -y=111 -r=4 -y=222 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -y=111 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -y=111 -y=222 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -y=111 -y=222 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 -y=111 -r=6 -y=333 - -mlr join -s --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 -y=111 -r=6 -y=222 -r=6 -y=333 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -j=1,b=11 -j=1,b=12 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -j=1,b=11 -j=1,b=12 -j=1,b=11 -j=1,b=12 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -j=1,b=11 -j=1,b=12 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -j=1,b=11 -j=1,b=12 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -j=1,b=11 -j=1,b=12 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -j=1,b=11 -j=1,b=12 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -j=1,b=11 -j=1,b=12 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -j=3,b=14 -j=3,b=15 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -j=3,b=14 -j=3,b=15 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -j=3,b=14 -j=3,b=15 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -j=5,b=17 -j=5,b=18 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -j=5,b=17 -j=5,b=18 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 - -mlr join -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -l=1,b=11 -l=1,b=12 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -l=1,b=11 -l=1,b=12 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -l=1,b=11 -l=1,b=12 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -l=1,b=11 -l=1,b=12 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -l=1,b=11 -l=1,b=12 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -l=1,b=11 -l=1,b=12 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ul -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 -l=1,b=11 -l=1,b=12 -l=3,b=14 -l=3,b=15 -l=5,b=17 -l=5,b=18 -x=100,b=10 -x=200,b=13 -x=300,b=16 -x=400,b=19 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r1 -y=111 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r11 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r12 -y=111 -y=222 -r=2 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r13 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r14 -y=111 -y=222 -r=4 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r15 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r16 -y=111 -y=222 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r2 -y=111 -r=2 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r22 -y=111 -r=2 -y=222 -r=2 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r23 -y=111 -r=2 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r24 -y=111 -r=2 -y=222 -r=4 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r25 -y=111 -r=2 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r26 -y=111 -r=2 -y=222 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r3 -y=111 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r33 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r34 -y=111 -y=222 -r=4 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r35 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r36 -y=111 -y=222 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r4 -y=111 -r=4 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r44 -y=111 -r=4 -y=222 -r=4 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r45 -y=111 -r=4 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r46 -y=111 -r=4 -y=222 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r5 -y=111 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r55 -y=111 -y=222 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r56 -y=111 -y=222 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r6 -y=111 -r=6 -y=333 - -mlr join --np --ur -l l -r r -j j -f ./reg_test/input/het-join-left ./reg_test/input/het-join-right-r66 -y=111 -r=6 -y=222 -r=6 -y=333 - - -================================================================ -JOIN PREPIPE - -mlr --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -a=pan,n=234,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,n=123,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,n=123,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,n=345,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,n=456,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,n=123,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,n=456,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -a=pan,n=234,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -JOIN MIXED-FORMAT - -mlr --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -s -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -s -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -s -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --json join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --dkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --csvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --ijson --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --idkvp --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --icsvlite --ojson join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --ijson --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --idkvp --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --icsvlite --ojson join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --ijson --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --idkvp --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --icsvlite --ojson join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv -{ "x": 1, "a": 2, "b": 20 } -{ "x": 2, "a": 3, "b": 30 } -{ "x": 3, "a": 4, "b": 40 } -{ "x": 4, "a": 5, "b": 50 } - -mlr --ijson --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --idkvp --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --icsvlite --odkvp join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --ijson --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --idkvp --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --icsvlite --odkvp join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --ijson --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --idkvp --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --icsvlite --odkvp join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv -x=1,a=2,b=20 -x=2,a=3,b=30 -x=3,a=4,b=40 -x=4,a=5,b=50 - -mlr --ijson --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.json -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --idkvp --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.dkvp -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --icsvlite --ocsvlite join -i csvlite -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --ijson --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.json -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --idkvp --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --icsvlite --ocsvlite join -i dkvp -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --ijson --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --idkvp --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.dkvp -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - -mlr --icsvlite --ocsvlite join -i json -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.csv -x,a,b -1,2,20 -2,3,30 -3,4,40 -4,5,50 - - -================================================================ -RESHAPE - -mlr --pprint reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-wide.tbl -time item price -2009-01-01 X 0.65473572 -2009-01-01 Y 2.4520609 -2009-01-01 Z -1.46570942 -2009-01-02 X -0.89248112 -2009-01-02 Y 0.2154713 -2009-01-02 Z -2.05357735 -2009-01-03 X 0.98012375 -2009-01-03 Y 1.3179287 -2009-01-03 Z 4.64248357 -2009-01-04 X 0.35397376 -2009-01-04 Y 3.3765645 -2009-01-04 Z -0.25237774 -2009-01-05 X 2.19357813 -2009-01-05 Y 1.3477511 -2009-01-05 Z 0.09719105 - -mlr --pprint reshape -i X,Z -o item,price ./reg_test/input/reshape-wide.tbl -time Y item price -2009-01-01 2.4520609 X 0.65473572 -2009-01-01 2.4520609 Z -1.46570942 -2009-01-02 0.2154713 X -0.89248112 -2009-01-02 0.2154713 Z -2.05357735 -2009-01-03 1.3179287 X 0.98012375 -2009-01-03 1.3179287 Z 4.64248357 -2009-01-04 3.3765645 X 0.35397376 -2009-01-04 3.3765645 Z -0.25237774 -2009-01-05 1.3477511 X 2.19357813 -2009-01-05 1.3477511 Z 0.09719105 - -mlr --pprint reshape -r [X-Z] -o item,price ./reg_test/input/reshape-wide.tbl -time item price -2009-01-01 X 0.65473572 -2009-01-01 Y 2.4520609 -2009-01-01 Z -1.46570942 -2009-01-02 X -0.89248112 -2009-01-02 Y 0.2154713 -2009-01-02 Z -2.05357735 -2009-01-03 X 0.98012375 -2009-01-03 Y 1.3179287 -2009-01-03 Z 4.64248357 -2009-01-04 X 0.35397376 -2009-01-04 Y 3.3765645 -2009-01-04 Z -0.25237774 -2009-01-05 X 2.19357813 -2009-01-05 Y 1.3477511 -2009-01-05 Z 0.09719105 - -mlr --pprint reshape -r [XZ] -o item,price ./reg_test/input/reshape-wide.tbl -time Y item price -2009-01-01 2.4520609 X 0.65473572 -2009-01-01 2.4520609 Z -1.46570942 -2009-01-02 0.2154713 X -0.89248112 -2009-01-02 0.2154713 Z -2.05357735 -2009-01-03 1.3179287 X 0.98012375 -2009-01-03 1.3179287 Z 4.64248357 -2009-01-04 3.3765645 X 0.35397376 -2009-01-04 3.3765645 Z -0.25237774 -2009-01-05 1.3477511 X 2.19357813 -2009-01-05 1.3477511 Z 0.09719105 - -mlr --pprint reshape -s item,price ./reg_test/input/reshape-long.tbl -time X Y Z -2009-01-01 0.65473572 2.4520609 -1.46570942 -2009-01-02 -0.89248112 0.2154713 -2.05357735 -2009-01-03 0.98012375 1.3179287 4.64248357 -2009-01-04 0.35397376 3.3765645 -0.25237774 -2009-01-05 2.19357813 1.3477511 0.09719105 - -mlr --pprint reshape -i X,Y,Z -o item,price then reshape -s item,price ./reg_test/input/reshape-wide.tbl -time X Y Z -2009-01-01 0.65473572 2.4520609 -1.46570942 -2009-01-02 -0.89248112 0.2154713 -2.05357735 -2009-01-03 0.98012375 1.3179287 4.64248357 -2009-01-04 0.35397376 3.3765645 -0.25237774 -2009-01-05 2.19357813 1.3477511 0.09719105 - -mlr --pprint reshape -s item,price then reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-long.tbl -time item price -2009-01-01 X 0.65473572 -2009-01-01 Y 2.4520609 -2009-01-01 Z -1.46570942 -2009-01-02 X -0.89248112 -2009-01-02 Y 0.2154713 -2009-01-02 Z -2.05357735 -2009-01-03 X 0.98012375 -2009-01-03 Y 1.3179287 -2009-01-03 Z 4.64248357 -2009-01-04 X 0.35397376 -2009-01-04 Y 3.3765645 -2009-01-04 Z -0.25237774 -2009-01-05 X 2.19357813 -2009-01-05 Y 1.3477511 -2009-01-05 Z 0.09719105 - -mlr reshape -i X,Y,Z -o item,price ./reg_test/input/reshape-wide-ragged.dkvp -time=2009-01-01,item=X,price=0.65473572 -time=2009-01-01,item=Y,price=2.4520609 -time=2009-01-01,item=Z,price=-1.46570942 -time=2009-01-02,item=X,price=-0.89248112 -time=2009-01-02,item=Y,price=0.2154713 -time=2009-01-03,item=X,price=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 - -mlr reshape -i X,Z -o item,price ./reg_test/input/reshape-wide-ragged.dkvp -time=2009-01-01,Y=2.4520609,item=X,price=0.65473572 -time=2009-01-01,Y=2.4520609,item=Z,price=-1.46570942 -time=2009-01-02,Y=0.2154713,item=X,price=-0.89248112 -time=2009-01-03,item=X,price=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 - -mlr reshape -r [X-Z] -o item,price ./reg_test/input/reshape-wide-ragged.dkvp -time=2009-01-01,item=X,price=0.65473572 -time=2009-01-01,item=Y,price=2.4520609 -time=2009-01-01,item=Z,price=-1.46570942 -time=2009-01-02,item=X,price=-0.89248112 -time=2009-01-02,item=Y,price=0.2154713 -time=2009-01-03,item=X,price=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 - -mlr reshape -r [XZ] -o item,price ./reg_test/input/reshape-wide-ragged.dkvp -time=2009-01-01,Y=2.4520609,item=X,price=0.65473572 -time=2009-01-01,Y=2.4520609,item=Z,price=-1.46570942 -time=2009-01-02,Y=0.2154713,item=X,price=-0.89248112 -time=2009-01-03,item=X,price=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,price=2.19357813 - -mlr reshape -s item,price ./reg_test/input/reshape-long-ragged.dkvp -time=2009-01-01,item=X,value=0.65473572 -time=2009-01-01,item=Y,value=2.4520609 -time=2009-01-01,item=Z,value=-1.46570942 -time=2009-01-02,item=X,value=-0.89248112 -time=2009-01-02,item=Y,value=0.2154713 -time=2009-01-03,item=X,value=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,value=2.19357813 - -mlr --json reshape -i x,y -o item,value ./reg_test/input/small-non-nested.json -{ "a": "pan", "b": "pan", "i": 1, "item": "x", "value": 0.3467901443380824 } -{ "a": "pan", "b": "pan", "i": 1, "item": "y", "value": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "item": "x", "value": 0.7586799647899636 } -{ "a": "eks", "b": "pan", "i": 2, "item": "y", "value": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "item": "x", "value": 0.20460330576630303 } -{ "a": "wye", "b": "wye", "i": 3, "item": "y", "value": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "item": "x", "value": 0.38139939387114097 } -{ "a": "eks", "b": "wye", "i": 4, "item": "y", "value": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "item": "x", "value": 0.5732889198020006 } -{ "a": "wye", "b": "pan", "i": 5, "item": "y", "value": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "item": "x", "value": 0.5271261600918548 } -{ "a": "zee", "b": "pan", "i": 6, "item": "y", "value": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "item": "x", "value": 0.6117840605678454 } -{ "a": "eks", "b": "zee", "i": 7, "item": "y", "value": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "item": "x", "value": 0.5985540091064224 } -{ "a": "zee", "b": "wye", "i": 8, "item": "y", "value": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "item": "x", "value": 0.03144187646093577 } -{ "a": "hat", "b": "wye", "i": 9, "item": "y", "value": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "item": "x", "value": 0.5026260055412137 } -{ "a": "pan", "b": "wye", "i": 10, "item": "y", "value": 0.9526183602969864 } - - -================================================================ -NEST - -mlr cat ./reg_test/input/nest-explode.dkvp -x=a:1;b:2;c:3,y=d:40 -x=,y=d:50 -u=100,y=d:60 -x=a:4;b:5,y=d:70 - -mlr cat ./reg_test/input/nest-explode-vary-fs-ps.dkvp -x=a=1|b=2|c=3,y=d=40 -x=,y=d=50 -u=100,y=d=60 -x=a=4|b=5,y=d=70 - -mlr nest --explode --values --across-fields -f x ./reg_test/input/nest-explode.dkvp -x_1=a:1,x_2=b:2,x_3=c:3,y=d:40 -x_1=,y=d:50 -u=100,y=d:60 -x_1=a:4,x_2=b:5,y=d:70 - -mlr nest --explode --values --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -x_1=a=1,x_2=b=2,x_3=c=3,y=d=40 -x_1=,y=d=50 -u=100,y=d=60 -x_1=a=4,x_2=b=5,y=d=70 - -mlr nest --explode --values --across-fields -f x then nest --implode --values --across-fields -f x ./reg_test/input/nest-explode.dkvp -x=a:1;b:2;c:3,y=d:40 -x=,y=d:50 -u=100,y=d:60 -x=a:4;b:5,y=d:70 - -mlr nest --explode --values --across-fields -f x --nested-fs pipe --nested-ps = then nest --implode --values --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -x=a=1|b=2|c=3,y=d=40 -x=,y=d=50 -u=100,y=d=60 -x=a=4|b=5,y=d=70 - -mlr nest --explode --values --across-records -f x ./reg_test/input/nest-explode.dkvp -x=a:1,y=d:40 -x=b:2,y=d:40 -x=c:3,y=d:40 -x=,y=d:50 -u=100,y=d:60 -x=a:4,y=d:70 -x=b:5,y=d:70 - -mlr nest --explode --values --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -x=a=1,y=d=40 -x=b=2,y=d=40 -x=c=3,y=d=40 -x=,y=d=50 -u=100,y=d=60 -x=a=4,y=d=70 -x=b=5,y=d=70 - -mlr nest --explode --values --across-records -f x then nest --implode --values --across-records -f x ./reg_test/input/nest-explode.dkvp -u=100,y=d:60 -x=a:1;b:2;c:3,y=d:40 -x=,y=d:50 -x=a:4;b:5,y=d:70 - -mlr nest --explode --values --across-records -f x --nested-fs pipe --nested-ps = then nest --implode --values --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -u=100,y=d=60 -x=a=1|b=2|c=3,y=d=40 -x=,y=d=50 -x=a=4|b=5,y=d=70 - -mlr nest --explode --pairs --across-fields -f x ./reg_test/input/nest-explode.dkvp -a=1,b=2,c=3,y=d:40 -y=d:50 -u=100,y=d:60 -a=4,b=5,y=d:70 - -mlr nest --explode --pairs --across-fields -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -a=1,b=2,c=3,y=d=40 -y=d=50 -u=100,y=d=60 -a=4,b=5,y=d=70 - -mlr nest --explode --pairs --across-records -f x ./reg_test/input/nest-explode.dkvp -a=1,y=d:40 -b=2,y=d:40 -c=3,y=d:40 -y=d:50 -u=100,y=d:60 -a=4,y=d:70 -b=5,y=d:70 - -mlr nest --explode --pairs --across-records -f x --nested-fs pipe --nested-ps = ./reg_test/input/nest-explode-vary-fs-ps.dkvp -a=1,y=d=40 -b=2,y=d=40 -c=3,y=d=40 -y=d=50 -u=100,y=d=60 -a=4,y=d=70 -b=5,y=d=70 - - -================================================================ -FILL-DOWN - -mlr --csv fill-down -f a,b,c ./reg_test/input/fill-down.csv -a,b,c -1,,3 -4,5,6 -7,5,9 - -mlr --csv fill-down -f a,b,c -a ./reg_test/input/fill-down.csv -a,b,c -1,,3 -4,5,6 -7,,9 - -mlr --csv fill-down --all ./reg_test/input/fill-down.csv -a,b,c -1,,3 -4,5,6 -7,5,9 - - -================================================================ -FILL-EMPTY - -mlr --csv fill-empty ./reg_test/input/fill-down.csv -a,b,c -1,N/A,3 -4,5,6 -7,N/A,9 - -mlr --csv fill-empty -v FOO ./reg_test/input/fill-down.csv -a,b,c -1,FOO,3 -4,5,6 -7,FOO,9 - - -================================================================ -SEQGEN - -mlr seqgen --start 1 --stop 5 --step 1 -i=1 -i=2 -i=3 -i=4 -i=5 - -mlr seqgen --start 1 --stop 5 --step 2 -i=1 -i=3 -i=5 - -mlr seqgen --start 1 --stop 1 --step 1 -f a -a=1 - -mlr seqgen --start 5 --stop 1 --step 1 -f b - -mlr seqgen --start 5 --stop 1 --step -1 -f c -c=5 -c=4 -c=3 -c=2 -c=1 - -mlr seqgen --start 5 --stop 5 --step -1 -f d -d=5 - -mlr --from ./reg_test/input/abixy cat then seqgen --start 1 --stop 5 -i=1 -i=2 -i=3 -i=4 -i=5 - -mlr --from ./reg_test/input/abixy cat then seqgen --start 1 --stop 100 then stats1 -a count,sum,min,p50,max -f i -i_count=100,i_sum=5050,i_min=1,i_p50=51,i_max=100 - - -================================================================ -FRACTION - -mlr fraction -f x,y ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=0.087507,y_fraction=0.146286 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=0.191441,y_fraction=0.105095 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_fraction=0.051628,y_fraction=0.068095 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_fraction=0.096240,y_fraction=0.027009 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=0.173825 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=0.133012,y_fraction=0.099272 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=0.154374,y_fraction=0.037816 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=0.151035 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_fraction=0.007934,y_fraction=0.150865 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=0.126830,y_fraction=0.191737 - -mlr fraction -f x,y -g a ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=0.408269,y_fraction=0.432770 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=0.433070,y_fraction=0.618498 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_fraction=0.217711,y_fraction=0.158949 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=1.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=0.468273,y_fraction=1.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=0.349219,y_fraction=0.222553 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=0.531727 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=0.591731,y_fraction=0.567230 - -mlr fraction -f x,y -g a,b ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_fraction=1.000000,y_fraction=1.000000 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_fraction=1.000000,y_fraction=1.000000 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_fraction=1.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_fraction=1.000000,y_fraction=1.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_fraction=1.000000,y_fraction=1.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_fraction=1.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_fraction=1.000000,y_fraction=1.000000 - -mlr fraction -f x,y -p ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=8.750687,y_percent=14.628624 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=19.144058,y_percent=10.509524 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_percent=5.162832,y_percent=6.809459 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_percent=9.623995,y_percent=2.700865 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=17.382482 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=13.301173,y_percent=9.927243 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=15.437378,y_percent=3.781628 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=15.103539 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_percent=0.793385,y_percent=15.086479 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=12.682952,y_percent=19.173694 - -mlr fraction -f x,y -g a -p ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=40.826884,y_percent=43.276985 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=43.307027,y_percent=61.849773 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_percent=21.771069,y_percent=15.894907 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=100.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=46.827347,y_percent=100.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=34.921904,y_percent=22.255319 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=53.172653 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=59.173116,y_percent=56.723015 - -mlr fraction -f x,y -g a,b -p ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_percent=100.000000,y_percent=100.000000 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_percent=100.000000,y_percent=100.000000 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_percent=100.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_percent=100.000000,y_percent=100.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_percent=100.000000,y_percent=100.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_percent=100.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_percent=100.000000,y_percent=100.000000 - -mlr fraction -f x,y -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=0.087507,y_cumulative_fraction=0.146286 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=0.278947,y_cumulative_fraction=0.251381 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_cumulative_fraction=0.330576,y_cumulative_fraction=0.319476 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_fraction=0.426816,y_cumulative_fraction=0.346485 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=0.520310 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=0.559827,y_cumulative_fraction=0.619582 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=0.714201,y_cumulative_fraction=0.657398 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=0.865237 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_cumulative_fraction=0.873170,y_cumulative_fraction=0.808263 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 - -mlr fraction -f x,y -g a -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=0.408269,y_cumulative_fraction=0.432770 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=0.433070,y_cumulative_fraction=0.618498 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_fraction=0.650781,y_cumulative_fraction=0.777447 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=1.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=0.468273,y_cumulative_fraction=1.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=1.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 - -mlr fraction -f x,y -g a,b -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_fraction=1.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_fraction=1.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_fraction=1.000000,y_cumulative_fraction=1.000000 - -mlr fraction -f x,y -p -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=8.750687,y_cumulative_percent=14.628624 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=27.894745,y_cumulative_percent=25.138148 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_cumulative_percent=33.057577,y_cumulative_percent=31.947608 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_percent=42.681572,y_cumulative_percent=34.648473 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=52.030955 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=55.982746,y_cumulative_percent=61.958199 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=71.420124,y_cumulative_percent=65.739826 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=86.523663 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_cumulative_percent=87.317048,y_cumulative_percent=80.826306 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 - -mlr fraction -f x,y -g a -p -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=40.826884,y_cumulative_percent=43.276985 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=43.307027,y_cumulative_percent=61.849773 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_cumulative_percent=65.078096,y_cumulative_percent=77.744681 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=100.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=46.827347,y_cumulative_percent=100.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=100.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 - -mlr fraction -f x,y -g a,b -p -c ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_cumulative_percent=100.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_cumulative_percent=100.000000 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_cumulative_percent=100.000000,y_cumulative_percent=100.000000 - - -================================================================ -STATS - -mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y ./reg_test/input/abixy -i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode -5.500000 55 10 1 10 1 1 0.453629 4.536294 10 0.031442 0.758680 0.3467901443380824 0.3467901443380824 0.594454 5.944542 10 0.134189 0.976181 0.7268028627434533 0.7268028627434533 - -mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y ./reg_test/input/abixy -i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max -1 2 6 6 1 1 10 10 0.031442 0.204603 0.527126 0.527126 0.3467901443380824 0.3467901443380824 0.758680 0.758680 0.134189 0.187885 0.726803 0.726803 0.7268028627434533 0.7268028627434533 0.976181 0.976181 - -mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y ./reg_test/input/abixy -i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev -5.500000 0.957427 3.027650 0.453629 0.068157 0.215531 0.594454 0.096968 0.306639 - -mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y ./reg_test/input/abixy -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -i_mean 1.000000 -i_sum 1 -i_count 1 -i_min 1 -i_max 1 -i_antimode 1 -i_mode 1 -x_mean 0.346790 -x_sum 0.346790 -x_count 1 -x_min 0.346790 -x_max 0.346790 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.726803 -y_sum 0.726803 -y_count 1 -y_min 0.726803 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 -i_mean 1.500000 -i_sum 3 -i_count 2 -i_min 1 -i_max 2 -i_antimode 1 -i_mode 1 -x_mean 0.552735 -x_sum 1.105470 -x_count 2 -x_min 0.346790 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.624477 -y_sum 1.248954 -y_count 2 -y_min 0.522151 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 -i_mean 2.000000 -i_sum 6 -i_count 3 -i_min 1 -i_max 3 -i_antimode 1 -i_mode 1 -x_mean 0.436691 -x_sum 1.310073 -x_count 3 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.529091 -y_sum 1.587272 -y_count 3 -y_min 0.338319 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 -i_mean 2.500000 -i_sum 10 -i_count 4 -i_min 1 -i_max 4 -i_antimode 1 -i_mode 1 -x_mean 0.422868 -x_sum 1.691473 -x_count 4 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.430365 -y_sum 1.721461 -y_count 4 -y_min 0.134189 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 -i_mean 3.000000 -i_sum 15 -i_count 5 -i_min 1 -i_max 5 -i_antimode 1 -i_mode 1 -x_mean 0.452952 -x_sum 2.264762 -x_count 5 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.517017 -y_sum 2.585086 -y_count 5 -y_min 0.134189 -y_max 0.863624 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 -i_mean 3.500000 -i_sum 21 -i_count 6 -i_min 1 -i_max 6 -i_antimode 1 -i_mode 1 -x_mean 0.465315 -x_sum 2.791888 -x_count 6 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.513051 -y_sum 3.078307 -y_count 6 -y_min 0.134189 -y_max 0.863624 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 -i_mean 4.000000 -i_sum 28 -i_count 7 -i_min 1 -i_max 7 -i_antimode 1 -i_mode 1 -x_mean 0.486239 -x_sum 3.403672 -x_count 7 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.466599 -y_sum 3.266192 -y_count 7 -y_min 0.134189 -y_max 0.863624 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 -i_mean 4.500000 -i_sum 36 -i_count 8 -i_min 1 -i_max 8 -i_antimode 1 -i_mode 1 -x_mean 0.500278 -x_sum 4.002226 -x_count 8 -x_min 0.204603 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.530297 -y_sum 4.242373 -y_count 8 -y_min 0.134189 -y_max 0.976181 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 -i_mean 5.000000 -i_sum 45 -i_count 9 -i_min 1 -i_max 9 -i_antimode 1 -i_mode 1 -x_mean 0.448185 -x_sum 4.033668 -x_count 9 -x_min 0.031442 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.554658 -y_sum 4.991924 -y_count 9 -y_min 0.134189 -y_max 0.976181 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 -i_mean 5.500000 -i_sum 55 -i_count 10 -i_min 1 -i_max 10 -i_antimode 1 -i_mode 1 -x_mean 0.453629 -x_sum 4.536294 -x_count 10 -x_min 0.031442 -x_max 0.758680 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.594454 -y_sum 5.944542 -y_count 10 -y_min 0.134189 -y_max 0.976181 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a ./reg_test/input/abixy -a i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode -pan 5.500000 11 2 1 10 1 1 0.424708 0.849416 2 0.346790 0.502626 0.3467901443380824 0.3467901443380824 0.839711 1.679421 2 0.726803 0.952618 0.7268028627434533 0.7268028627434533 -eks 4.333333 13 3 2 7 2 2 0.583954 1.751863 3 0.381399 0.758680 0.7586799647899636 0.7586799647899636 0.281408 0.844225 3 0.134189 0.522151 0.5221511083334797 0.5221511083334797 -wye 4.000000 8 2 3 5 3 3 0.388946 0.777892 2 0.204603 0.573289 0.20460330576630303 0.20460330576630303 0.600971 1.201943 2 0.338319 0.863624 0.33831852551664776 0.33831852551664776 -zee 7.000000 14 2 6 8 6 6 0.562840 1.125680 2 0.527126 0.598554 0.5271261600918548 0.5271261600918548 0.734701 1.469403 2 0.493221 0.976181 0.49322128674835697 0.49322128674835697 -hat 9.000000 9 1 9 9 9 9 0.031442 0.031442 1 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.749551 0.749551 1 0.749551 0.749551 0.7495507603507059 0.7495507603507059 - -mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y -g a ./reg_test/input/abixy -a i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max -pan 1 1 10 10 1 1 10 10 0.346790 0.346790 0.502626 0.502626 0.3467901443380824 0.3467901443380824 0.502626 0.502626 0.726803 0.726803 0.952618 0.952618 0.7268028627434533 0.7268028627434533 0.952618 0.952618 -eks 2 2 4 4 2 2 7 7 0.381399 0.381399 0.611784 0.611784 0.7586799647899636 0.7586799647899636 0.758680 0.758680 0.134189 0.134189 0.187885 0.187885 0.5221511083334797 0.5221511083334797 0.522151 0.522151 -wye 3 3 5 5 3 3 5 5 0.204603 0.204603 0.573289 0.573289 0.20460330576630303 0.20460330576630303 0.573289 0.573289 0.338319 0.338319 0.863624 0.863624 0.33831852551664776 0.33831852551664776 0.863624 0.863624 -zee 6 6 8 8 6 6 8 8 0.527126 0.527126 0.598554 0.598554 0.5271261600918548 0.5271261600918548 0.598554 0.598554 0.493221 0.493221 0.976181 0.976181 0.49322128674835697 0.49322128674835697 0.976181 0.976181 -hat 9 9 9 9 9 9 9 9 0.031442 0.031442 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.031442 0.031442 0.749551 0.749551 0.749551 0.749551 0.7495507603507059 0.7495507603507059 0.749551 0.749551 - -mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a ./reg_test/input/abixy -a i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev -pan 5.500000 4.500000 6.363961 0.424708 0.077918 0.110193 0.839711 0.112908 0.159676 -eks 4.333333 1.452966 2.516611 0.583954 0.109797 0.190174 0.281408 0.121365 0.210211 -wye 4.000000 1.000000 1.414214 0.388946 0.184343 0.260700 0.600971 0.262653 0.371447 -zee 7.000000 1.000000 1.414214 0.562840 0.035714 0.050507 0.734701 0.241480 0.341504 -hat 9.000000 - - 0.031442 - - 0.749551 - - - -mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a ./reg_test/input/abixy -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -i_mean 1.000000 -i_sum 1 -i_count 1 -i_min 1 -i_max 1 -i_antimode 1 -i_mode 1 -x_mean 0.346790 -x_sum 0.346790 -x_count 1 -x_min 0.346790 -x_max 0.346790 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.726803 -y_sum 0.726803 -y_count 1 -y_min 0.726803 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 -i_mean 2.000000 -i_sum 2 -i_count 1 -i_min 2 -i_max 2 -i_antimode 2 -i_mode 2 -x_mean 0.758680 -x_sum 0.758680 -x_count 1 -x_min 0.758680 -x_max 0.758680 -x_antimode 0.7586799647899636 -x_mode 0.7586799647899636 -y_mean 0.522151 -y_sum 0.522151 -y_count 1 -y_min 0.522151 -y_max 0.522151 -y_antimode 0.5221511083334797 -y_mode 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 -i_mean 3.000000 -i_sum 3 -i_count 1 -i_min 3 -i_max 3 -i_antimode 3 -i_mode 3 -x_mean 0.204603 -x_sum 0.204603 -x_count 1 -x_min 0.204603 -x_max 0.204603 -x_antimode 0.20460330576630303 -x_mode 0.20460330576630303 -y_mean 0.338319 -y_sum 0.338319 -y_count 1 -y_min 0.338319 -y_max 0.338319 -y_antimode 0.33831852551664776 -y_mode 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 -i_mean 3.000000 -i_sum 6 -i_count 2 -i_min 2 -i_max 4 -i_antimode 2 -i_mode 2 -x_mean 0.570040 -x_sum 1.140079 -x_count 2 -x_min 0.381399 -x_max 0.758680 -x_antimode 0.7586799647899636 -x_mode 0.7586799647899636 -y_mean 0.328170 -y_sum 0.656340 -y_count 2 -y_min 0.134189 -y_max 0.522151 -y_antimode 0.5221511083334797 -y_mode 0.5221511083334797 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 -i_mean 4.000000 -i_sum 8 -i_count 2 -i_min 3 -i_max 5 -i_antimode 3 -i_mode 3 -x_mean 0.388946 -x_sum 0.777892 -x_count 2 -x_min 0.204603 -x_max 0.573289 -x_antimode 0.20460330576630303 -x_mode 0.20460330576630303 -y_mean 0.600971 -y_sum 1.201943 -y_count 2 -y_min 0.338319 -y_max 0.863624 -y_antimode 0.33831852551664776 -y_mode 0.33831852551664776 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 -i_mean 6.000000 -i_sum 6 -i_count 1 -i_min 6 -i_max 6 -i_antimode 6 -i_mode 6 -x_mean 0.527126 -x_sum 0.527126 -x_count 1 -x_min 0.527126 -x_max 0.527126 -x_antimode 0.5271261600918548 -x_mode 0.5271261600918548 -y_mean 0.493221 -y_sum 0.493221 -y_count 1 -y_min 0.493221 -y_max 0.493221 -y_antimode 0.49322128674835697 -y_mode 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 -i_mean 4.333333 -i_sum 13 -i_count 3 -i_min 2 -i_max 7 -i_antimode 2 -i_mode 2 -x_mean 0.583954 -x_sum 1.751863 -x_count 3 -x_min 0.381399 -x_max 0.758680 -x_antimode 0.7586799647899636 -x_mode 0.7586799647899636 -y_mean 0.281408 -y_sum 0.844225 -y_count 3 -y_min 0.134189 -y_max 0.522151 -y_antimode 0.5221511083334797 -y_mode 0.5221511083334797 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 -i_mean 7.000000 -i_sum 14 -i_count 2 -i_min 6 -i_max 8 -i_antimode 6 -i_mode 6 -x_mean 0.562840 -x_sum 1.125680 -x_count 2 -x_min 0.527126 -x_max 0.598554 -x_antimode 0.5271261600918548 -x_mode 0.5271261600918548 -y_mean 0.734701 -y_sum 1.469403 -y_count 2 -y_min 0.493221 -y_max 0.976181 -y_antimode 0.49322128674835697 -y_mode 0.49322128674835697 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 -i_mean 9.000000 -i_sum 9 -i_count 1 -i_min 9 -i_max 9 -i_antimode 9 -i_mode 9 -x_mean 0.031442 -x_sum 0.031442 -x_count 1 -x_min 0.031442 -x_max 0.031442 -x_antimode 0.03144187646093577 -x_mode 0.03144187646093577 -y_mean 0.749551 -y_sum 0.749551 -y_count 1 -y_min 0.749551 -y_max 0.749551 -y_antimode 0.7495507603507059 -y_mode 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 -i_mean 5.500000 -i_sum 11 -i_count 2 -i_min 1 -i_max 10 -i_antimode 1 -i_mode 1 -x_mean 0.424708 -x_sum 0.849416 -x_count 2 -x_min 0.346790 -x_max 0.502626 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.839711 -y_sum 1.679421 -y_count 2 -y_min 0.726803 -y_max 0.952618 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -mlr --opprint stats1 -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a,b ./reg_test/input/abixy -a b i_mean i_sum i_count i_min i_max i_antimode i_mode x_mean x_sum x_count x_min x_max x_antimode x_mode y_mean y_sum y_count y_min y_max y_antimode y_mode -pan pan 1.000000 1 1 1 1 1 1 0.346790 0.346790 1 0.346790 0.346790 0.3467901443380824 0.3467901443380824 0.726803 0.726803 1 0.726803 0.726803 0.7268028627434533 0.7268028627434533 -eks pan 2.000000 2 1 2 2 2 2 0.758680 0.758680 1 0.758680 0.758680 0.7586799647899636 0.7586799647899636 0.522151 0.522151 1 0.522151 0.522151 0.5221511083334797 0.5221511083334797 -wye wye 3.000000 3 1 3 3 3 3 0.204603 0.204603 1 0.204603 0.204603 0.20460330576630303 0.20460330576630303 0.338319 0.338319 1 0.338319 0.338319 0.33831852551664776 0.33831852551664776 -eks wye 4.000000 4 1 4 4 4 4 0.381399 0.381399 1 0.381399 0.381399 0.38139939387114097 0.38139939387114097 0.134189 0.134189 1 0.134189 0.134189 0.13418874328430463 0.13418874328430463 -wye pan 5.000000 5 1 5 5 5 5 0.573289 0.573289 1 0.573289 0.573289 0.5732889198020006 0.5732889198020006 0.863624 0.863624 1 0.863624 0.863624 0.8636244699032729 0.8636244699032729 -zee pan 6.000000 6 1 6 6 6 6 0.527126 0.527126 1 0.527126 0.527126 0.5271261600918548 0.5271261600918548 0.493221 0.493221 1 0.493221 0.493221 0.49322128674835697 0.49322128674835697 -eks zee 7.000000 7 1 7 7 7 7 0.611784 0.611784 1 0.611784 0.611784 0.6117840605678454 0.6117840605678454 0.187885 0.187885 1 0.187885 0.187885 0.1878849191181694 0.1878849191181694 -zee wye 8.000000 8 1 8 8 8 8 0.598554 0.598554 1 0.598554 0.598554 0.5985540091064224 0.5985540091064224 0.976181 0.976181 1 0.976181 0.976181 0.976181385699006 0.976181385699006 -hat wye 9.000000 9 1 9 9 9 9 0.031442 0.031442 1 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.749551 0.749551 1 0.749551 0.749551 0.7495507603507059 0.7495507603507059 -pan wye 10.000000 10 1 10 10 10 10 0.502626 0.502626 1 0.502626 0.502626 0.5026260055412137 0.5026260055412137 0.952618 0.952618 1 0.952618 0.952618 0.9526183602969864 0.9526183602969864 - -mlr --opprint stats1 -a min,p10,p50,median,antimode,mode,p90,max -f i,x,y -g a,b ./reg_test/input/abixy -a b i_min i_p10 i_p50 i_median i_antimode i_mode i_p90 i_max x_min x_p10 x_p50 x_median x_antimode x_mode x_p90 x_max y_min y_p10 y_p50 y_median y_antimode y_mode y_p90 y_max -pan pan 1 1 1 1 1 1 1 1 0.346790 0.346790 0.346790 0.346790 0.3467901443380824 0.3467901443380824 0.346790 0.346790 0.726803 0.726803 0.726803 0.726803 0.7268028627434533 0.7268028627434533 0.726803 0.726803 -eks pan 2 2 2 2 2 2 2 2 0.758680 0.758680 0.758680 0.758680 0.7586799647899636 0.7586799647899636 0.758680 0.758680 0.522151 0.522151 0.522151 0.522151 0.5221511083334797 0.5221511083334797 0.522151 0.522151 -wye wye 3 3 3 3 3 3 3 3 0.204603 0.204603 0.204603 0.204603 0.20460330576630303 0.20460330576630303 0.204603 0.204603 0.338319 0.338319 0.338319 0.338319 0.33831852551664776 0.33831852551664776 0.338319 0.338319 -eks wye 4 4 4 4 4 4 4 4 0.381399 0.381399 0.381399 0.381399 0.38139939387114097 0.38139939387114097 0.381399 0.381399 0.134189 0.134189 0.134189 0.134189 0.13418874328430463 0.13418874328430463 0.134189 0.134189 -wye pan 5 5 5 5 5 5 5 5 0.573289 0.573289 0.573289 0.573289 0.5732889198020006 0.5732889198020006 0.573289 0.573289 0.863624 0.863624 0.863624 0.863624 0.8636244699032729 0.8636244699032729 0.863624 0.863624 -zee pan 6 6 6 6 6 6 6 6 0.527126 0.527126 0.527126 0.527126 0.5271261600918548 0.5271261600918548 0.527126 0.527126 0.493221 0.493221 0.493221 0.493221 0.49322128674835697 0.49322128674835697 0.493221 0.493221 -eks zee 7 7 7 7 7 7 7 7 0.611784 0.611784 0.611784 0.611784 0.6117840605678454 0.6117840605678454 0.611784 0.611784 0.187885 0.187885 0.187885 0.187885 0.1878849191181694 0.1878849191181694 0.187885 0.187885 -zee wye 8 8 8 8 8 8 8 8 0.598554 0.598554 0.598554 0.598554 0.5985540091064224 0.5985540091064224 0.598554 0.598554 0.976181 0.976181 0.976181 0.976181 0.976181385699006 0.976181385699006 0.976181 0.976181 -hat wye 9 9 9 9 9 9 9 9 0.031442 0.031442 0.031442 0.031442 0.03144187646093577 0.03144187646093577 0.031442 0.031442 0.749551 0.749551 0.749551 0.749551 0.7495507603507059 0.7495507603507059 0.749551 0.749551 -pan wye 10 10 10 10 10 10 10 10 0.502626 0.502626 0.502626 0.502626 0.5026260055412137 0.5026260055412137 0.502626 0.502626 0.952618 0.952618 0.952618 0.952618 0.9526183602969864 0.9526183602969864 0.952618 0.952618 - -mlr --opprint stats1 -a mean,meaneb,stddev -f i,x,y -g a,b ./reg_test/input/abixy -a b i_mean i_meaneb i_stddev x_mean x_meaneb x_stddev y_mean y_meaneb y_stddev -pan pan 1.000000 - - 0.346790 - - 0.726803 - - -eks pan 2.000000 - - 0.758680 - - 0.522151 - - -wye wye 3.000000 - - 0.204603 - - 0.338319 - - -eks wye 4.000000 - - 0.381399 - - 0.134189 - - -wye pan 5.000000 - - 0.573289 - - 0.863624 - - -zee pan 6.000000 - - 0.527126 - - 0.493221 - - -eks zee 7.000000 - - 0.611784 - - 0.187885 - - -zee wye 8.000000 - - 0.598554 - - 0.976181 - - -hat wye 9.000000 - - 0.031442 - - 0.749551 - - -pan wye 10.000000 - - 0.502626 - - 0.952618 - - - -mlr --oxtab stats1 -s -a mean,sum,count,min,max,antimode,mode -f i,x,y -g a,b ./reg_test/input/abixy -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -i_mean 1.000000 -i_sum 1 -i_count 1 -i_min 1 -i_max 1 -i_antimode 1 -i_mode 1 -x_mean 0.346790 -x_sum 0.346790 -x_count 1 -x_min 0.346790 -x_max 0.346790 -x_antimode 0.3467901443380824 -x_mode 0.3467901443380824 -y_mean 0.726803 -y_sum 0.726803 -y_count 1 -y_min 0.726803 -y_max 0.726803 -y_antimode 0.7268028627434533 -y_mode 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 -i_mean 2.000000 -i_sum 2 -i_count 1 -i_min 2 -i_max 2 -i_antimode 2 -i_mode 2 -x_mean 0.758680 -x_sum 0.758680 -x_count 1 -x_min 0.758680 -x_max 0.758680 -x_antimode 0.7586799647899636 -x_mode 0.7586799647899636 -y_mean 0.522151 -y_sum 0.522151 -y_count 1 -y_min 0.522151 -y_max 0.522151 -y_antimode 0.5221511083334797 -y_mode 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 -i_mean 3.000000 -i_sum 3 -i_count 1 -i_min 3 -i_max 3 -i_antimode 3 -i_mode 3 -x_mean 0.204603 -x_sum 0.204603 -x_count 1 -x_min 0.204603 -x_max 0.204603 -x_antimode 0.20460330576630303 -x_mode 0.20460330576630303 -y_mean 0.338319 -y_sum 0.338319 -y_count 1 -y_min 0.338319 -y_max 0.338319 -y_antimode 0.33831852551664776 -y_mode 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 -i_mean 4.000000 -i_sum 4 -i_count 1 -i_min 4 -i_max 4 -i_antimode 4 -i_mode 4 -x_mean 0.381399 -x_sum 0.381399 -x_count 1 -x_min 0.381399 -x_max 0.381399 -x_antimode 0.38139939387114097 -x_mode 0.38139939387114097 -y_mean 0.134189 -y_sum 0.134189 -y_count 1 -y_min 0.134189 -y_max 0.134189 -y_antimode 0.13418874328430463 -y_mode 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 -i_mean 5.000000 -i_sum 5 -i_count 1 -i_min 5 -i_max 5 -i_antimode 5 -i_mode 5 -x_mean 0.573289 -x_sum 0.573289 -x_count 1 -x_min 0.573289 -x_max 0.573289 -x_antimode 0.5732889198020006 -x_mode 0.5732889198020006 -y_mean 0.863624 -y_sum 0.863624 -y_count 1 -y_min 0.863624 -y_max 0.863624 -y_antimode 0.8636244699032729 -y_mode 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 -i_mean 6.000000 -i_sum 6 -i_count 1 -i_min 6 -i_max 6 -i_antimode 6 -i_mode 6 -x_mean 0.527126 -x_sum 0.527126 -x_count 1 -x_min 0.527126 -x_max 0.527126 -x_antimode 0.5271261600918548 -x_mode 0.5271261600918548 -y_mean 0.493221 -y_sum 0.493221 -y_count 1 -y_min 0.493221 -y_max 0.493221 -y_antimode 0.49322128674835697 -y_mode 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 -i_mean 7.000000 -i_sum 7 -i_count 1 -i_min 7 -i_max 7 -i_antimode 7 -i_mode 7 -x_mean 0.611784 -x_sum 0.611784 -x_count 1 -x_min 0.611784 -x_max 0.611784 -x_antimode 0.6117840605678454 -x_mode 0.6117840605678454 -y_mean 0.187885 -y_sum 0.187885 -y_count 1 -y_min 0.187885 -y_max 0.187885 -y_antimode 0.1878849191181694 -y_mode 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 -i_mean 8.000000 -i_sum 8 -i_count 1 -i_min 8 -i_max 8 -i_antimode 8 -i_mode 8 -x_mean 0.598554 -x_sum 0.598554 -x_count 1 -x_min 0.598554 -x_max 0.598554 -x_antimode 0.5985540091064224 -x_mode 0.5985540091064224 -y_mean 0.976181 -y_sum 0.976181 -y_count 1 -y_min 0.976181 -y_max 0.976181 -y_antimode 0.976181385699006 -y_mode 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 -i_mean 9.000000 -i_sum 9 -i_count 1 -i_min 9 -i_max 9 -i_antimode 9 -i_mode 9 -x_mean 0.031442 -x_sum 0.031442 -x_count 1 -x_min 0.031442 -x_max 0.031442 -x_antimode 0.03144187646093577 -x_mode 0.03144187646093577 -y_mean 0.749551 -y_sum 0.749551 -y_count 1 -y_min 0.749551 -y_max 0.749551 -y_antimode 0.7495507603507059 -y_mode 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 -i_mean 10.000000 -i_sum 10 -i_count 1 -i_min 10 -i_max 10 -i_antimode 10 -i_mode 10 -x_mean 0.502626 -x_sum 0.502626 -x_count 1 -x_min 0.502626 -x_max 0.502626 -x_antimode 0.5026260055412137 -x_mode 0.5026260055412137 -y_mean 0.952618 -y_sum 0.952618 -y_count 1 -y_min 0.952618 -y_max 0.952618 -y_antimode 0.9526183602969864 -y_mode 0.9526183602969864 - -mlr --oxtab stats1 -a min,p0,p50,p100,max -f x,y,z ./reg_test/input/string-numeric-ordering.dkvp -x_min 1.000000 -x_p0 1 -x_p50 2.500000 -x_p100 b -x_max b -y_min 1.000000 -y_p0 1 -y_p50 3 -y_p100 4 -y_max 4.000000 -z_min a -z_p0 a -z_p50 d -z_p100 f -z_max f - -mlr --oxtab stats1 -a mean -f x ./reg_test/input/abixy-het -x_mean 0.440334 - -mlr --oxtab stats1 -a mean -f x -g a ./reg_test/input/abixy-het -a pan -x_mean 0.424708 - -a eks -x_mean 0.583954 - -a wye -x_mean - -a zee -x_mean 0.562840 - -mlr --oxtab stats1 -a p0,p50,p100 -f x,y ./reg_test/input/near-ovf.dkvp -x_p0 9223372036854775801 -x_p50 9223372036854775804 -x_p100 9223372036854775807 -y_p0 -9223372036854775807 -y_p50 -9223372036854775804 -y_p100 -9223372036854775801 - -mlr --oxtab stats1 -a p0,p50,p100 -f x,y -F ./reg_test/input/near-ovf.dkvp -x_p0 9223372036854775801 -x_p50 9223372036854775804 -x_p100 9223372036854775807 -y_p0 -9223372036854775807 -y_p50 -9223372036854775804 -y_p100 -9223372036854775801 - -mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 ./reg_test/input/abixy-wide -x_y_ols_m x_y_ols_b x_y_ols_n x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov -0.028351 0.487644 2000 1.332924 -0.170590 2000 0.056909 0.000791 0.028120 0.002330 0.893610 0.107060 2000 1.529534 -0.055477 2000 0.824336 0.447971 0.669306 0.045036 - -mlr --opprint stats2 -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 -g a,b ./reg_test/input/abixy-wide -a b x_y_ols_m x_y_ols_b x_y_ols_n x_y_pca_m x_y_pca_b x_y_pca_n x_y_pca_quality x_y_r2 x_y_corr x_y_cov xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_pca_m xy_y2_pca_b xy_y2_pca_n xy_y2_pca_quality xy_y2_r2 xy_y2_corr xy_y2_cov -cat pan 0.054420 0.481777 89 3.636062 -1.221602 89 0.177683 0.002504 0.050036 0.003777 0.950908 0.105754 89 1.715574 -0.081719 89 0.830612 0.435336 0.659800 0.041616 -pan wye -0.145486 0.584799 78 -1.340927 1.199920 78 0.254025 0.019479 -0.139568 -0.012683 0.908151 0.126628 78 1.595150 -0.045034 78 0.824114 0.438850 0.662457 0.046203 -wye cat 0.185913 0.377639 74 1.135325 -0.145894 74 0.309499 0.033002 0.181665 0.014494 0.969266 0.040602 74 1.406365 -0.081379 74 0.868480 0.561236 0.749157 0.052090 -dog hat 0.100096 0.448757 88 0.810749 0.097346 88 0.189256 0.010462 0.102283 0.008036 0.919149 0.090504 88 1.425774 -0.038344 88 0.846209 0.507155 0.712148 0.045034 -dog pan -0.066834 0.590647 87 -0.254112 0.688837 87 0.275316 0.005924 -0.076969 -0.005709 0.726118 0.164937 87 1.566309 -0.075073 87 0.749025 0.315011 0.561259 0.034107 -pan pan 0.094932 0.461566 77 0.672369 0.189898 77 0.192719 0.009768 0.098832 0.007175 0.822261 0.123441 77 1.312543 0.003200 77 0.820351 0.465390 0.682195 0.039784 -hat hat 0.043668 0.405219 88 10.170494 -5.125282 88 0.310513 0.001324 0.036392 0.003037 1.128896 0.015188 88 1.414166 -0.052514 88 0.922308 0.708725 0.841858 0.060975 -wye hat 0.043018 0.496029 87 0.254879 0.395780 87 0.177794 0.002197 0.046876 0.004023 0.720402 0.165623 87 1.376136 0.002792 87 0.760716 0.353558 0.594608 0.038763 -pan hat 0.120797 0.448197 67 1.597359 -0.325695 67 0.225137 0.013060 0.114278 0.008987 0.962678 0.076920 67 1.285796 -0.012566 67 0.887704 0.622353 0.788893 0.054965 -cat hat 0.172391 0.464384 90 0.959329 0.086790 90 0.296109 0.030150 0.173639 0.015030 0.904257 0.133482 90 1.415658 -0.008369 90 0.841567 0.498171 0.705812 0.055626 -hat wye -0.022975 0.496361 70 -1.765884 1.344268 70 0.051493 0.000514 -0.022665 -0.002000 0.971929 0.096088 70 1.989422 -0.142072 70 0.825656 0.386354 0.621574 0.040126 -dog dog 0.078397 0.489236 87 0.354494 0.351041 87 0.242210 0.007619 0.087288 0.008214 0.776967 0.150999 87 1.354405 -0.006432 87 0.792265 0.408257 0.638950 0.049648 -wye dog 0.116403 0.425576 76 2.367821 -0.777734 76 0.254607 0.011048 0.105109 0.007867 0.925781 0.071192 76 1.453590 -0.070509 76 0.845204 0.501559 0.708208 0.046440 -wye wye -0.188354 0.613934 67 -1.433772 1.217887 67 0.316070 0.031156 -0.176512 -0.015876 0.876717 0.159179 67 2.044493 -0.118503 67 0.795455 0.325193 0.570257 0.042026 -dog wye 0.029527 0.502643 79 0.496713 0.282511 79 0.073039 0.000913 0.030211 0.002391 0.904925 0.120816 79 1.609123 -0.052245 79 0.821822 0.432413 0.657581 0.042857 -cat dog 0.057573 0.408644 78 0.728479 0.071114 78 0.116103 0.003442 0.058671 0.005320 0.884325 0.079999 78 1.418207 -0.040344 78 0.832998 0.479596 0.692528 0.044762 -hat pan -0.154393 0.564981 85 -0.845852 0.911026 85 0.276955 0.025143 -0.158566 -0.012756 0.911165 0.104362 85 1.763740 -0.092987 85 0.814584 0.397150 0.630199 0.035622 -cat wye -0.014851 0.564875 77 -0.572708 0.892322 77 0.034146 0.000224 -0.014982 -0.000966 0.878820 0.086362 77 1.447244 -0.098657 77 0.827119 0.463961 0.681147 0.041096 -hat cat -0.022859 0.498539 88 -0.156242 0.565723 88 0.149344 0.000610 -0.024689 -0.002116 0.840965 0.111121 88 1.663518 -0.088942 88 0.793883 0.373515 0.611158 0.036575 -dog cat 0.104057 0.428559 83 2.712382 -1.005787 83 0.250036 0.008705 0.093300 0.007122 1.080443 0.023866 83 1.653922 -0.133367 83 0.875586 0.547103 0.739664 0.050357 -hat dog 0.041849 0.427228 78 0.403977 0.254919 78 0.118494 0.001918 0.043789 0.003856 0.776135 0.114930 78 1.475403 -0.036508 78 0.779056 0.372058 0.609966 0.040583 -pan dog 0.119510 0.467833 73 2.492496 -0.761490 73 0.266455 0.011427 0.106896 0.009302 0.948592 0.107556 73 1.408389 -0.022846 73 0.860243 0.541263 0.735706 0.056609 -cat cat 0.016257 0.425410 79 0.432946 0.225535 79 0.044275 0.000273 0.016510 0.001350 0.930954 0.072476 79 1.624993 -0.072669 79 0.830029 0.446764 0.668404 0.036267 -pan cat -0.188523 0.616919 89 -0.898665 0.953923 89 0.324264 0.037036 -0.192447 -0.016206 0.781770 0.176617 89 2.020454 -0.113587 89 0.762332 0.278739 0.527958 0.032984 -wye pan 0.229443 0.444446 66 1.313689 -0.098124 66 0.365811 0.046722 0.216152 0.020367 0.887659 0.145052 66 1.471906 -0.030176 66 0.827911 0.462545 0.680107 0.064496 - -mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 ./reg_test/input/abixy-wide-short -a cat -b pan -i 1 -x 0.5117389009583777 -y 0.08295224980036853 -x2 0.2618767027540883 -xy 0.0424498931448654 -y2 0.006881075746942741 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a pan -b wye -i 2 -x 0.5225940442098578 -y 0.511678736087022 -x2 0.27310453504361476 -xy 0.2674002600279053 -y2 0.26181512896361225 -x_y_ols_m 39.495240 -x_y_ols_b -20.128298 -x_y_ols_n 2 -x_y_pca_m 39.495240 -x_y_pca_b -20.128298 -x_y_pca_n 2 -x_y_pca_quality 1.000000 -x_y_r2 1.000000 -x_y_corr 1.000000 -x_y_cov 0.002327 -xy_y2_ols_m 1.133290 -xy_y2_ols_b -0.041227 -xy_y2_ols_n 2 -xy_y2_pca_m 1.133290 -xy_y2_pca_b -0.041227 -xy_y2_pca_n 2 -xy_y2_pca_quality 1.000000 -xy_y2_r2 1.000000 -xy_y2_corr 1.000000 -xy_y2_cov 0.028674 - -a wye -b cat -i 3 -x 0.8150401717873625 -y 0.07989551500795256 -x2 0.6642904816271734 -xy 0.06511805427712146 -y2 0.006383293318385972 -x_y_ols_m -0.689881 -x_y_ols_b 0.650125 -x_y_ols_n 3 -x_y_pca_m -2.057762 -x_y_pca_b 1.493365 -x_y_pca_n 3 -x_y_pca_quality 0.725269 -x_y_r2 0.228338 -x_y_corr -0.477847 -x_y_cov -0.020424 -xy_y2_ols_m 1.184397 -xy_y2_ols_b -0.056344 -xy_y2_ols_n 3 -xy_y2_pca_m 1.190469 -xy_y2_pca_b -0.057103 -xy_y2_pca_n 3 -xy_y2_pca_quality 0.997884 -xy_y2_r2 0.991315 -xy_y2_corr 0.995648 -xy_y2_cov 0.018168 - -a dog -b hat -i 4 -x 0.4488733555675044 -y 0.5730530513123552 -x2 0.20148728933843124 -xy 0.25722824606077416 -y2 0.32838979961840076 -x_y_ols_m -1.054065 -x_y_ols_b 0.917520 -x_y_ols_n 4 -x_y_pca_m -2.068130 -x_y_pca_b 1.500163 -x_y_pca_n 4 -x_y_pca_quality 0.845806 -x_y_r2 0.416082 -x_y_corr -0.645044 -x_y_cov -0.028205 -xy_y2_ols_m 1.365739 -xy_y2_ols_b -0.064987 -xy_y2_ols_n 4 -xy_y2_pca_m 1.406929 -xy_y2_pca_b -0.071497 -xy_y2_pca_n 4 -xy_y2_pca_quality 0.989979 -xy_y2_r2 0.956155 -xy_y2_corr 0.977832 -xy_y2_cov 0.019937 - -a dog -b pan -i 5 -x 0.2946557960430134 -y 0.6850437256584863 -x2 0.08682203814174191 -xy 0.20185210430817294 -y2 0.46928490606405937 -x_y_ols_m -1.176419 -x_y_ols_b 0.996592 -x_y_ols_n 5 -x_y_pca_m -1.681618 -x_y_pca_b 1.258579 -x_y_pca_n 5 -x_y_pca_quality 0.899128 -x_y_r2 0.607344 -x_y_corr -0.779323 -x_y_cov -0.042043 -xy_y2_ols_m 1.565652 -xy_y2_ols_b -0.046615 -xy_y2_ols_n 5 -xy_y2_pca_m 2.169036 -xy_y2_pca_b -0.147265 -xy_y2_pca_n 5 -xy_y2_pca_quality 0.936719 -xy_y2_r2 0.667168 -xy_y2_corr 0.816804 -xy_y2_cov 0.017742 - -a wye -b cat -i 6 -x 0.048709182664292916 -y 0.5851879044762575 -x2 0.0023725844758234536 -xy 0.02850402453206882 -y2 0.34244488354531344 -x_y_ols_m -0.752322 -x_y_ols_b 0.750859 -x_y_ols_n 6 -x_y_pca_m -1.066519 -x_y_pca_b 0.889190 -x_y_pca_n 6 -x_y_pca_quality 0.836548 -x_y_r2 0.515958 -x_y_corr -0.718302 -x_y_cov -0.049192 -xy_y2_ols_m 0.917730 -xy_y2_ols_b 0.103935 -xy_y2_ols_n 6 -xy_y2_pca_m 2.512667 -xy_y2_pca_b -0.125351 -xy_y2_pca_n 6 -xy_y2_pca_quality 0.807995 -xy_y2_r2 0.286403 -xy_y2_corr 0.535166 -xy_y2_cov 0.011246 - -a dog -b hat -i 7 -x 0.8500003149528544 -y 0.2984098741712895 -x2 0.7225005354199517 -xy 0.25364848703063775 -y2 0.08904845300292483 -x_y_ols_m -0.612818 -x_y_ols_b 0.707992 -x_y_ols_n 7 -x_y_pca_m -0.842190 -x_y_pca_b 0.822403 -x_y_pca_n 7 -x_y_pca_quality 0.820362 -x_y_r2 0.476303 -x_y_corr -0.690147 -x_y_cov -0.048089 -xy_y2_ols_m 0.592008 -xy_y2_ols_b 0.120493 -xy_y2_ols_n 7 -xy_y2_pca_m 3.299160 -xy_y2_pca_b -0.311183 -xy_y2_pca_n 7 -xy_y2_pca_quality 0.722139 -xy_y2_r2 0.126356 -xy_y2_corr 0.355466 -xy_y2_cov 0.007067 - -a pan -b pan -i 8 -x 0.616507208914765 -y 0.25924335982487057 -x2 0.38008113864387366 -xy 0.15982540019531707 -y2 0.06720711961328732 -x_y_ols_m -0.627947 -x_y_ols_b 0.706893 -x_y_ols_n 8 -x_y_pca_m -0.857225 -x_y_pca_b 0.824631 -x_y_pca_n 8 -x_y_pca_quality 0.826128 -x_y_r2 0.489375 -x_y_corr -0.699554 -x_y_cov -0.043324 -xy_y2_ols_m 0.591342 -xy_y2_ols_b 0.102111 -xy_y2_ols_n 8 -xy_y2_pca_m 3.718931 -xy_y2_pca_b -0.396750 -xy_y2_pca_n 8 -xy_y2_pca_quality 0.737121 -xy_y2_r2 0.115022 -xy_y2_corr 0.339150 -xy_y2_cov 0.006050 - -a hat -b hat -i 9 -x 0.33786884067769307 -y 0.6036735617015514 -x2 0.11415535350088835 -xy 0.203962486439877 -y2 0.3644217690974368 -x_y_ols_m -0.661274 -x_y_ols_b 0.735462 -x_y_ols_n 9 -x_y_pca_m -0.890432 -x_y_pca_b 0.848665 -x_y_pca_n 9 -x_y_pca_quality 0.838021 -x_y_r2 0.516776 -x_y_corr -0.718871 -x_y_cov -0.042188 -xy_y2_ols_m 0.667659 -xy_y2_ols_b 0.105305 -xy_y2_ols_n 9 -xy_y2_pca_m 3.726998 -xy_y2_pca_b -0.397782 -xy_y2_pca_n 9 -xy_y2_pca_quality 0.764687 -xy_y2_r2 0.134705 -xy_y2_corr 0.367022 -xy_y2_cov 0.006124 - -a wye -b hat -i 10 -x 0.3834648944206174 -y 0.4999709279216641 -x2 0.14704532525301522 -xy 0.19172129908885902 -y2 0.24997092876684981 -x_y_ols_m -0.664725 -x_y_ols_b 0.738937 -x_y_ols_n 10 -x_y_pca_m -0.888643 -x_y_pca_b 0.847077 -x_y_pca_n 10 -x_y_pca_quality 0.841594 -x_y_r2 0.524349 -x_y_corr -0.724120 -x_y_cov -0.038508 -xy_y2_ols_m 0.673183 -xy_y2_ols_b 0.106048 -xy_y2_ols_n 10 -xy_y2_pca_m 3.679574 -xy_y2_pca_b -0.396534 -xy_y2_pca_n 10 -xy_y2_pca_quality 0.765015 -xy_y2_r2 0.137573 -xy_y2_corr 0.370908 -xy_y2_cov 0.005539 - -a pan -b hat -i 11 -x 0.025474999754416028 -y 0.7861954915044592 -x2 0.0006489756124874967 -xy 0.020028329952999087 -y2 0.6181033508619382 -x_y_ols_m -0.702240 -x_y_ols_b 0.761330 -x_y_ols_n 11 -x_y_pca_m -0.861995 -x_y_pca_b 0.831839 -x_y_pca_n 11 -x_y_pca_quality 0.884552 -x_y_r2 0.623708 -x_y_corr -0.789752 -x_y_cov -0.049973 -xy_y2_ols_m -0.038359 -xy_y2_ols_b 0.260804 -xy_y2_ols_n 11 -xy_y2_pca_m -82.143959 -xy_y2_pca_b 12.888187 -xy_y2_pca_n 11 -xy_y2_pca_quality 0.759203 -xy_y2_r2 0.000355 -xy_y2_corr -0.018828 -xy_y2_cov -0.000360 - -a cat -b hat -i 12 -x 0.6335445699880142 -y 0.15467178563525052 -x2 0.4013787221612979 -xy 0.0979914699195631 -y2 0.02392336127159689 -x_y_ols_m -0.740466 -x_y_ols_b 0.765334 -x_y_ols_n 12 -x_y_pca_m -0.911766 -x_y_pca_b 0.843681 -x_y_pca_n 12 -x_y_pca_quality 0.887843 -x_y_r2 0.635324 -x_y_corr -0.797072 -x_y_cov -0.050182 -xy_y2_ols_m 0.085108 -xy_y2_ols_b 0.222963 -xy_y2_ols_n 12 -xy_y2_pca_m 41.549828 -xy_y2_pca_b -5.961259 -xy_y2_pca_n 12 -xy_y2_pca_quality 0.780003 -xy_y2_r2 0.001597 -xy_y2_corr 0.039969 -xy_y2_cov 0.000747 - -a hat -b wye -i 13 -x 0.35922068401384877 -y 0.8502678133887914 -x2 0.1290394998233774 -xy 0.30543378552048117 -y2 0.7229553544849566 -x_y_ols_m -0.782612 -x_y_ols_b 0.811286 -x_y_ols_n 13 -x_y_pca_m -1.047326 -x_y_pca_b 0.930360 -x_y_pca_n 13 -x_y_pca_quality 0.861099 -x_y_r2 0.571131 -x_y_corr -0.755732 -x_y_cov -0.049199 -xy_y2_ols_m 0.659118 -xy_y2_ols_b 0.166913 -xy_y2_ols_n 13 -xy_y2_pca_m 6.994463 -xy_y2_pca_b -0.854132 -xy_y2_pca_n 13 -xy_y2_pca_quality 0.838549 -xy_y2_r2 0.078760 -xy_y2_corr 0.280642 -xy_y2_cov 0.006543 - -a dog -b dog -i 14 -x 0.5440047442770544 -y 0.933608851612059 -x2 0.2959411617959433 -xy 0.5078876445760125 -y2 0.8716254878083876 -x_y_ols_m -0.719761 -x_y_ols_b 0.821739 -x_y_ols_n 14 -x_y_pca_m -1.259269 -x_y_pca_b 1.068052 -x_y_pca_n 14 -x_y_pca_quality 0.775265 -x_y_r2 0.388115 -x_y_corr -0.622988 -x_y_cov -0.042223 -xy_y2_ols_m 1.175278 -xy_y2_ols_b 0.097368 -xy_y2_ols_n 14 -xy_y2_pca_m 3.119062 -xy_y2_pca_b -0.264044 -xy_y2_pca_n 14 -xy_y2_pca_quality 0.866432 -xy_y2_r2 0.322054 -xy_y2_corr 0.567498 -xy_y2_cov 0.020862 - -a wye -b dog -i 15 -x 0.4689175303764642 -y 0.09048353045392021 -x2 0.21988365029436224 -xy 0.04242931364019586 -y2 0.008187269283405506 -x_y_ols_m -0.725720 -x_y_ols_b 0.798215 -x_y_ols_n 15 -x_y_pca_m -1.432456 -x_y_pca_b 1.121457 -x_y_pca_n 15 -x_y_pca_quality 0.758098 -x_y_r2 0.343569 -x_y_corr -0.586148 -x_y_cov -0.039539 -xy_y2_ols_m 1.249777 -xy_y2_ols_b 0.074959 -xy_y2_ols_n 15 -xy_y2_pca_m 2.985574 -xy_y2_pca_b -0.231176 -xy_y2_pca_n 15 -xy_y2_pca_quality 0.877117 -xy_y2_r2 0.362173 -xy_y2_corr 0.601808 -xy_y2_cov 0.022316 - -a pan -b pan -i 16 -x 0.3959177828066379 -y 0.6339858483805666 -x2 0.15675089074252413 -xy 0.25100627142161924 -y2 0.4019380559468268 -x_y_ols_m -0.734975 -x_y_ols_b 0.810106 -x_y_ols_n 16 -x_y_pca_m -1.451312 -x_y_pca_b 1.134988 -x_y_pca_n 16 -x_y_pca_quality 0.761173 -x_y_r2 0.346218 -x_y_corr -0.588403 -x_y_cov -0.037547 -xy_y2_ols_m 1.253418 -xy_y2_ols_b 0.075130 -xy_y2_ols_n 16 -xy_y2_pca_m 2.945315 -xy_y2_pca_b -0.231155 -xy_y2_pca_n 16 -xy_y2_pca_quality 0.877563 -xy_y2_r2 0.368261 -xy_y2_corr 0.606845 -xy_y2_cov 0.021325 - -a dog -b hat -i 17 -x 0.34033844788864975 -y 0.8845934733681523 -x2 0.11583025911125516 -xy 0.3010611697385466 -y2 0.782505613125532 -x_y_ols_m -0.779408 -x_y_ols_b 0.849058 -x_y_ols_n 17 -x_y_pca_m -1.579107 -x_y_pca_b 1.206423 -x_y_pca_n 17 -x_y_pca_quality 0.772982 -x_y_r2 0.349689 -x_y_corr -0.591345 -x_y_cov -0.037916 -xy_y2_ols_m 1.392136 -xy_y2_ols_b 0.068451 -xy_y2_ols_n 17 -xy_y2_pca_m 3.095298 -xy_y2_pca_b -0.251899 -xy_y2_pca_n 17 -xy_y2_pca_quality 0.896358 -xy_y2_r2 0.398830 -xy_y2_corr 0.631530 -xy_y2_cov 0.023385 - -a wye -b wye -i 18 -x 0.6770613653962891 -y 0.896307226056897 -x2 0.4584120925122874 -xy 0.6068549942886431 -y2 0.8033666434818095 -x_y_ols_m -0.628521 -x_y_ols_b 0.811643 -x_y_ols_n 18 -x_y_pca_m -1.834767 -x_y_pca_b 1.366109 -x_y_pca_n 18 -x_y_pca_quality 0.694668 -x_y_r2 0.218178 -x_y_corr -0.467095 -x_y_cov -0.030628 -xy_y2_ols_m 1.292066 -xy_y2_ols_b 0.083495 -xy_y2_ols_n 18 -xy_y2_pca_m 2.354328 -xy_y2_pca_b -0.141020 -xy_y2_pca_n 18 -xy_y2_pca_quality 0.888372 -xy_y2_r2 0.477918 -xy_y2_corr 0.691316 -xy_y2_cov 0.033015 - -a dog -b wye -i 19 -x 0.4865373244199632 -y 0.44117766146315884 -x2 0.23671856805373653 -xy 0.2146493990021416 -y2 0.1946377289741016 -x_y_ols_m -0.630507 -x_y_ols_b 0.809155 -x_y_ols_n 19 -x_y_pca_m -1.839104 -x_y_pca_b 1.366411 -x_y_pca_n 19 -x_y_pca_quality 0.695696 -x_y_r2 0.218821 -x_y_corr -0.467783 -x_y_cov -0.029041 -xy_y2_ols_m 1.290872 -xy_y2_ols_b 0.075000 -xy_y2_ols_n 19 -xy_y2_pca_m 2.393419 -xy_y2_pca_b -0.158220 -xy_y2_pca_n 19 -xy_y2_pca_quality 0.887359 -xy_y2_r2 0.469361 -xy_y2_corr 0.685099 -xy_y2_cov 0.031153 - -a dog -b dog -i 20 -x 0.3223311725542929 -y 0.08115611029827985 -x2 0.10389738480022534 -xy 0.026159144192390068 -y2 0.006586314238746564 -x_y_ols_m -0.548880 -x_y_ols_b 0.745846 -x_y_ols_n 20 -x_y_pca_m -2.251324 -x_y_pca_b 1.518994 -x_y_pca_n 20 -x_y_pca_quality 0.661764 -x_y_r2 0.151247 -x_y_corr -0.388905 -x_y_cov -0.024479 -xy_y2_ols_m 1.329401 -xy_y2_ols_b 0.062098 -xy_y2_ols_n 20 -xy_y2_pca_m 2.337844 -xy_y2_pca_b -0.141870 -xy_y2_pca_n 20 -xy_y2_pca_quality 0.894994 -xy_y2_r2 0.499340 -xy_y2_corr 0.706640 -xy_y2_cov 0.032678 - -mlr --oxtab stats2 -s -a linreg-ols,linreg-pca,r2,corr,cov -f x,y,xy,y2 -g a,b ./reg_test/input/abixy-wide-short -a cat -b pan -i 1 -x 0.5117389009583777 -y 0.08295224980036853 -x2 0.2618767027540883 -xy 0.0424498931448654 -y2 0.006881075746942741 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a pan -b wye -i 2 -x 0.5225940442098578 -y 0.511678736087022 -x2 0.27310453504361476 -xy 0.2674002600279053 -y2 0.26181512896361225 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a wye -b cat -i 3 -x 0.8150401717873625 -y 0.07989551500795256 -x2 0.6642904816271734 -xy 0.06511805427712146 -y2 0.006383293318385972 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a dog -b hat -i 4 -x 0.4488733555675044 -y 0.5730530513123552 -x2 0.20148728933843124 -xy 0.25722824606077416 -y2 0.32838979961840076 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a dog -b pan -i 5 -x 0.2946557960430134 -y 0.6850437256584863 -x2 0.08682203814174191 -xy 0.20185210430817294 -y2 0.46928490606405937 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a wye -b cat -i 6 -x 0.048709182664292916 -y 0.5851879044762575 -x2 0.0023725844758234536 -xy 0.02850402453206882 -y2 0.34244488354531344 -x_y_ols_m -0.659366 -x_y_ols_b 0.617305 -x_y_ols_n 2 -x_y_pca_m -0.659366 -x_y_pca_b 0.617305 -x_y_pca_n 2 -x_y_pca_quality 1.000000 -x_y_r2 1.000000 -x_y_corr -1.000000 -x_y_cov -0.193611 -xy_y2_ols_m -9.178492 -xy_y2_ols_b 0.604069 -xy_y2_ols_n 2 -xy_y2_pca_m -9.178492 -xy_y2_pca_b 0.604069 -xy_y2_pca_n 2 -xy_y2_pca_quality 1.000000 -xy_y2_r2 1.000000 -xy_y2_corr -1.000000 -xy_y2_cov -0.006152 - -a dog -b hat -i 7 -x 0.8500003149528544 -y 0.2984098741712895 -x2 0.7225005354199517 -xy 0.25364848703063775 -y2 0.08904845300292483 -x_y_ols_m -0.684679 -x_y_ols_b 0.880387 -x_y_ols_n 2 -x_y_pca_m -0.684679 -x_y_pca_b 0.880387 -x_y_pca_n 2 -x_y_pca_quality 1.000000 -x_y_r2 1.000000 -x_y_corr -1.000000 -x_y_cov -0.055083 -xy_y2_ols_m 66.859625 -xy_y2_ols_b -16.869794 -xy_y2_ols_n 2 -xy_y2_pca_m 66.859625 -xy_y2_pca_b -16.869794 -xy_y2_pca_n 2 -xy_y2_pca_quality 1.000000 -xy_y2_r2 1.000000 -xy_y2_corr 1.000000 -xy_y2_cov 0.000428 - -a pan -b pan -i 8 -x 0.616507208914765 -y 0.25924335982487057 -x2 0.38008113864387366 -xy 0.15982540019531707 -y2 0.06720711961328732 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a hat -b hat -i 9 -x 0.33786884067769307 -y 0.6036735617015514 -x2 0.11415535350088835 -xy 0.203962486439877 -y2 0.3644217690974368 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a wye -b hat -i 10 -x 0.3834648944206174 -y 0.4999709279216641 -x2 0.14704532525301522 -xy 0.19172129908885902 -y2 0.24997092876684981 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a pan -b hat -i 11 -x 0.025474999754416028 -y 0.7861954915044592 -x2 0.0006489756124874967 -xy 0.020028329952999087 -y2 0.6181033508619382 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a cat -b hat -i 12 -x 0.6335445699880142 -y 0.15467178563525052 -x2 0.4013787221612979 -xy 0.0979914699195631 -y2 0.02392336127159689 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a hat -b wye -i 13 -x 0.35922068401384877 -y 0.8502678133887914 -x2 0.1290394998233774 -xy 0.30543378552048117 -y2 0.7229553544849566 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a dog -b dog -i 14 -x 0.5440047442770544 -y 0.933608851612059 -x2 0.2959411617959433 -xy 0.5078876445760125 -y2 0.8716254878083876 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a wye -b dog -i 15 -x 0.4689175303764642 -y 0.09048353045392021 -x2 0.21988365029436224 -xy 0.04242931364019586 -y2 0.008187269283405506 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a pan -b pan -i 16 -x 0.3959177828066379 -y 0.6339858483805666 -x2 0.15675089074252413 -xy 0.25100627142161924 -y2 0.4019380559468268 -x_y_ols_m -1.698823 -x_y_ols_b 1.306580 -x_y_ols_n 2 -x_y_pca_m -1.698823 -x_y_pca_b 1.306580 -x_y_pca_n 2 -x_y_pca_quality 1.000000 -x_y_r2 1.000000 -x_y_corr -1.000000 -x_y_cov -0.041332 -xy_y2_ols_m 3.671065 -xy_y2_ols_b -0.519522 -xy_y2_ols_n 2 -xy_y2_pca_m 3.671065 -xy_y2_pca_b -0.519522 -xy_y2_pca_n 2 -xy_y2_pca_quality 1.000000 -xy_y2_r2 1.000000 -xy_y2_corr 1.000000 -xy_y2_cov 0.015261 - -a dog -b hat -i 17 -x 0.34033844788864975 -y 0.8845934733681523 -x2 0.11583025911125516 -xy 0.3010611697385466 -y2 0.782505613125532 -x_y_ols_m -1.023812 -x_y_ols_b 1.144767 -x_y_ols_n 3 -x_y_pca_m -1.098934 -x_y_pca_b 1.185814 -x_y_pca_n 3 -x_y_pca_quality 0.967833 -x_y_r2 0.878279 -x_y_corr -0.937166 -x_y_cov -0.073789 -xy_y2_ols_m 12.826246 -xy_y2_ols_b -3.071390 -xy_y2_ols_n 3 -xy_y2_pca_m 13.871436 -xy_y2_pca_b -3.354267 -xy_y2_pca_n 3 -xy_y2_pca_quality 0.999579 -xy_y2_r2 0.924260 -xy_y2_corr 0.961385 -xy_y2_cov 0.008940 - -a wye -b wye -i 18 -x 0.6770613653962891 -y 0.896307226056897 -x2 0.4584120925122874 -xy 0.6068549942886431 -y2 0.8033666434818095 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a dog -b wye -i 19 -x 0.4865373244199632 -y 0.44117766146315884 -x2 0.23671856805373653 -xy 0.2146493990021416 -y2 0.1946377289741016 -x_y_ols_m -x_y_ols_b -x_y_ols_n 1 -x_y_pca_m -x_y_pca_b -x_y_pca_n -x_y_pca_quality -x_y_r2 -x_y_corr -x_y_cov -xy_y2_ols_m -xy_y2_ols_b -xy_y2_ols_n 1 -xy_y2_pca_m -xy_y2_pca_b -xy_y2_pca_n -xy_y2_pca_quality -xy_y2_r2 -xy_y2_corr -xy_y2_cov - -a dog -b dog -i 20 -x 0.3223311725542929 -y 0.08115611029827985 -x2 0.10389738480022534 -xy 0.026159144192390068 -y2 0.006586314238746564 -x_y_ols_m 3.845532 -x_y_ols_b -1.158379 -x_y_ols_n 2 -x_y_pca_m 3.845532 -x_y_pca_b -1.158379 -x_y_pca_n 2 -x_y_pca_quality 1.000000 -x_y_r2 1.000000 -x_y_corr 1.000000 -x_y_cov 0.094483 -xy_y2_ols_m 1.795699 -xy_y2_ols_b -0.040388 -xy_y2_ols_n 2 -xy_y2_pca_m 1.795699 -xy_y2_pca_b -0.040388 -xy_y2_pca_n 2 -xy_y2_pca_quality 1.000000 -xy_y2_r2 1.000000 -xy_y2_corr 1.000000 -xy_y2_cov 0.208357 - -mlr --opprint stats2 --fit -a linreg-ols,linreg-pca -f x,y,xy,y2 ./reg_test/input/abixy-wide-short -a b i x y x2 xy y2 x_y_ols_fit x_y_pca_fit xy_y2_ols_fit xy_y2_pca_fit -cat pan 1 0.5117389009583777 0.08295224980036853 0.2618767027540883 0.0424498931448654 0.006881075746942741 0.464963 0.366904 0.118531 -0.042629 -pan wye 2 0.5225940442098578 0.511678736087022 0.27310453504361476 0.2674002600279053 0.26181512896361225 0.459005 0.342466 0.417581 0.483270 -wye cat 3 0.8150401717873625 0.07989551500795256 0.6642904816271734 0.06511805427712146 0.006383293318385972 0.298487 -0.315925 0.148666 0.010366 -dog hat 4 0.4488733555675044 0.5730530513123552 0.20148728933843124 0.25722824606077416 0.32838979961840076 0.499469 0.508435 0.404058 0.459490 -dog pan 5 0.2946557960430134 0.6850437256584863 0.08682203814174191 0.20185210430817294 0.46928490606405937 0.584116 0.855629 0.330441 0.330029 -wye cat 6 0.048709182664292916 0.5851879044762575 0.0023725844758234536 0.02850402453206882 0.34244488354531344 0.719111 1.409334 0.099992 -0.075232 -dog hat 7 0.8500003149528544 0.2984098741712895 0.7225005354199517 0.25364848703063775 0.08904845300292483 0.279298 -0.394632 0.399299 0.451121 -pan pan 8 0.616507208914765 0.25924335982487057 0.38008113864387366 0.15982540019531707 0.06720711961328732 0.407458 0.131037 0.274570 0.231777 -hat hat 9 0.33786884067769307 0.6036735617015514 0.11415535350088835 0.203962486439877 0.3644217690974368 0.560397 0.758342 0.333246 0.334963 -wye hat 10 0.3834648944206174 0.4999709279216641 0.14704532525301522 0.19172129908885902 0.24997092876684981 0.535370 0.655691 0.316973 0.306345 -pan hat 11 0.025474999754416028 0.7861954915044592 0.0006489756124874967 0.020028329952999087 0.6181033508619382 0.731863 1.461642 0.088724 -0.095047 -cat hat 12 0.6335445699880142 0.15467178563525052 0.4013787221612979 0.0979914699195631 0.02392336127159689 0.398106 0.092680 0.192368 0.087219 -hat wye 13 0.35922068401384877 0.8502678133887914 0.1290394998233774 0.30543378552048117 0.7229553544849566 0.548677 0.710272 0.468142 0.572187 -dog dog 14 0.5440047442770544 0.933608851612059 0.2959411617959433 0.5078876445760125 0.8716254878083876 0.447253 0.294263 0.737285 1.045492 -wye dog 15 0.4689175303764642 0.09048353045392021 0.21988365029436224 0.04242931364019586 0.008187269283405506 0.488467 0.463309 0.118504 -0.042677 -pan pan 16 0.3959177828066379 0.6339858483805666 0.15675089074252413 0.25100627142161924 0.4019380559468268 0.528535 0.627655 0.395786 0.444944 -dog hat 17 0.34033844788864975 0.8845934733681523 0.11583025911125516 0.3010611697385466 0.782505613125532 0.559041 0.752782 0.462329 0.561964 -wye wye 18 0.6770613653962891 0.896307226056897 0.4584120925122874 0.6068549942886431 0.8033666434818095 0.374221 -0.005290 0.868852 1.276863 -dog wye 19 0.4865373244199632 0.44117766146315884 0.23671856805373653 0.2146493990021416 0.1946377289741016 0.478796 0.423641 0.347454 0.359947 -dog dog 20 0.3223311725542929 0.08115611029827985 0.10389738480022534 0.026159144192390068 0.006586314238746564 0.568925 0.793322 0.096874 -0.080714 - -mlr --opprint stats2 --fit -a linreg-ols,linreg-pca -f x,y,xy,y2 -g a ./reg_test/input/abixy-wide-short -a b i x y x2 xy y2 x_y_ols_fit x_y_pca_fit xy_y2_ols_fit xy_y2_pca_fit -cat pan 1 0.5117389009583777 0.08295224980036853 0.2618767027540883 0.0424498931448654 0.006881075746942741 0.082952 0.082952 0.006881 0.006881 -cat hat 12 0.6335445699880142 0.15467178563525052 0.4013787221612979 0.0979914699195631 0.02392336127159689 0.154672 0.154672 0.023923 0.023923 -pan wye 2 0.5225940442098578 0.511678736087022 0.27310453504361476 0.2674002600279053 0.26181512896361225 0.445016 0.435835 0.237402 0.033364 -pan pan 8 0.616507208914765 0.25924335982487057 0.38008113864387366 0.15982540019531707 0.06720711961328732 0.372165 0.356477 0.353122 0.385517 -pan hat 11 0.025474999754416028 0.7861954915044592 0.0006489756124874967 0.020028329952999087 0.6181033508619382 0.830642 0.855912 0.503503 0.843152 -pan pan 16 0.3959177828066379 0.6339858483805666 0.15675089074252413 0.25100627142161924 0.4019380559468268 0.543281 0.542880 0.255037 0.087031 -wye cat 3 0.8150401717873625 0.07989551500795256 0.6642904816271734 0.06511805427712146 0.006383293318385972 0.337827 -0.227660 0.137066 0.112494 -wye cat 6 0.048709182664292916 0.5851879044762575 0.0023725844758234536 0.02850402453206882 0.34244488354531344 0.548640 1.271347 0.093480 0.061521 -wye hat 10 0.3834648944206174 0.4999709279216641 0.14704532525301522 0.19172129908885902 0.24997092876684981 0.456551 0.616537 0.287780 0.288747 -wye dog 15 0.4689175303764642 0.09048353045392021 0.21988365029436224 0.04242931364019586 0.008187269283405506 0.433043 0.449384 0.110057 0.080907 -wye wye 18 0.6770613653962891 0.896307226056897 0.4584120925122874 0.6068549942886431 0.8033666434818095 0.375784 0.042238 0.781971 0.866684 -dog hat 4 0.4488733555675044 0.5730530513123552 0.20148728933843124 0.25722824606077416 0.32838979961840076 0.563043 0.668750 0.401991 0.406622 -dog pan 5 0.2946557960430134 0.6850437256584863 0.08682203814174191 0.20185210430817294 0.46928490606405937 0.610235 1.504956 0.297579 0.255112 -dog hat 7 0.8500003149528544 0.2984098741712895 0.7225005354199517 0.25364848703063775 0.08904845300292483 0.440294 -1.506261 0.395241 0.396827 -dog dog 14 0.5440047442770544 0.933608851612059 0.2959411617959433 0.5078876445760125 0.8716254878083876 0.533932 0.152924 0.874610 1.092430 -dog hat 17 0.34033844788864975 0.8845934733681523 0.11583025911125516 0.3010611697385466 0.782505613125532 0.596256 1.257254 0.484638 0.526549 -dog wye 19 0.4865373244199632 0.44117766146315884 0.23671856805373653 0.2146493990021416 0.1946377289741016 0.551517 0.464527 0.321709 0.290125 -dog dog 20 0.3223311725542929 0.08115611029827985 0.10389738480022534 0.026159144192390068 0.006586314238746564 0.601766 1.354893 -0.033690 -0.225587 -hat hat 9 0.33786884067769307 0.6036735617015514 0.11415535350088835 0.203962486439877 0.3644217690974368 0.603674 0.603674 0.364422 0.364422 -hat wye 13 0.35922068401384877 0.8502678133887914 0.1290394998233774 0.30543378552048117 0.7229553544849566 0.850268 0.850268 0.722955 0.722955 - -mlr --opprint stats2 -a logireg -f x,y ./reg_test/input/logi.dkvp -x_y_logistic_m x_y_logistic_b x_y_logistic_n -0.145457 0.145449 22 - -mlr --opprint stats2 -a logireg -f x,y -g g ./reg_test/input/logi.dkvp -g x_y_logistic_m x_y_logistic_b x_y_logistic_n -red 0.145458 -0.036371 11 -blue 0.145457 0.327269 11 - -mlr --oxtab stats2 -a cov -f x,y ./reg_test/input/abixy-het -x_y_cov -0.011481 - -mlr --oxtab stats2 -a cov -f x,y -g a ./reg_test/input/abixy-het -a pan -x_y_cov 0.017595 - -a eks -x_y_cov 0.034641 - -a wye - -a zee -x_y_cov - -mlr --opprint step -a rsum,shift,delta,counter -f x,y ./reg_test/input/abixy -a b i x y x_rsum x_shift x_delta x_counter y_rsum y_shift y_delta y_counter -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - 0 1 0.726803 - 0 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1.105470 0.3467901443380824 0.411890 2 1.248954 0.7268028627434533 -0.204652 2 -wye wye 3 0.20460330576630303 0.33831852551664776 1.310073 0.7586799647899636 -0.554077 3 1.587272 0.5221511083334797 -0.183833 3 -eks wye 4 0.38139939387114097 0.13418874328430463 1.691473 0.20460330576630303 0.176796 4 1.721461 0.33831852551664776 -0.204130 4 -wye pan 5 0.5732889198020006 0.8636244699032729 2.264762 0.38139939387114097 0.191890 5 2.585086 0.13418874328430463 0.729436 5 -zee pan 6 0.5271261600918548 0.49322128674835697 2.791888 0.5732889198020006 -0.046163 6 3.078307 0.8636244699032729 -0.370403 6 -eks zee 7 0.6117840605678454 0.1878849191181694 3.403672 0.5271261600918548 0.084658 7 3.266192 0.49322128674835697 -0.305336 7 -zee wye 8 0.5985540091064224 0.976181385699006 4.002226 0.6117840605678454 -0.013230 8 4.242373 0.1878849191181694 0.788296 8 -hat wye 9 0.03144187646093577 0.7495507603507059 4.033668 0.5985540091064224 -0.567112 9 4.991924 0.976181385699006 -0.226631 9 -pan wye 10 0.5026260055412137 0.9526183602969864 4.536294 0.03144187646093577 0.471184 10 5.944542 0.7495507603507059 0.203068 10 - -mlr --opprint step -a rsum,shift,delta,counter -f x,y -g a ./reg_test/input/abixy -a b i x y x_rsum x_shift x_delta x_counter y_rsum y_shift y_delta y_counter -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - 0 1 0.726803 - 0 1 -eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 - 0 1 0.522151 - 0 1 -wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 - 0 1 0.338319 - 0 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1.140079 0.7586799647899636 -0.377281 2 0.656340 0.5221511083334797 -0.387962 2 -wye pan 5 0.5732889198020006 0.8636244699032729 0.777892 0.20460330576630303 0.368686 2 1.201943 0.33831852551664776 0.525306 2 -zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 - 0 1 0.493221 - 0 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1.751863 0.38139939387114097 0.230385 3 0.844225 0.13418874328430463 0.053696 3 -zee wye 8 0.5985540091064224 0.976181385699006 1.125680 0.5271261600918548 0.071428 2 1.469403 0.49322128674835697 0.482960 2 -hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 - 0 1 0.749551 - 0 1 -pan wye 10 0.5026260055412137 0.9526183602969864 0.849416 0.3467901443380824 0.155836 2 1.679421 0.7268028627434533 0.225815 2 - -mlr --opprint step -a ewma -d 0.1,0.9 -f x,y -g a ./reg_test/input/abixy -a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 -eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 -wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 0.204603 0.338319 0.338319 -eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 -wye pan 5 0.5732889198020006 0.8636244699032729 0.241472 0.536420 0.390849 0.811094 -zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 -eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 -zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 0.541517 0.927885 -hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 0.031442 0.749551 0.749551 -pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 - -mlr --opprint step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g a ./reg_test/input/abixy -a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 -eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 -wye wye 3 0.20460330576630303 0.33831852551664776 0.204603 0.204603 0.338319 0.338319 -eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 -wye pan 5 0.5732889198020006 0.8636244699032729 0.241472 0.536420 0.390849 0.811094 -zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 -eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 -zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 0.541517 0.927885 -hat wye 9 0.03144187646093577 0.7495507603507059 0.031442 0.031442 0.749551 0.749551 -pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 - -mlr --odkvp step -a rsum,shift,delta,counter -f x,y ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_rsum=0.346790,x_shift=,x_delta=0,x_counter=1,y_rsum=0.726803,y_shift=,y_delta=0,y_counter=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_rsum=1.105470,x_shift=0.3467901443380824,x_delta=0.411890,x_counter=2,y_rsum=1.248954,y_shift=0.7268028627434533,y_delta=-0.204652,y_counter=2 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x_rsum=1.310073,x_shift=0.7586799647899636,x_delta=-0.554077,x_counter=3,y_rsum=1.587272,y_shift=0.5221511083334797,y_delta=-0.183833,y_counter=3 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_rsum=1.691473,x_shift=0.20460330576630303,x_delta=0.176796,x_counter=4,y_rsum=1.721461,y_shift=0.33831852551664776,y_delta=-0.204130,y_counter=4 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_rsum=2.585086,y_shift=0.13418874328430463,y_delta=0.729436,y_counter=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_rsum=2.218599,x_shift=0.38139939387114097,x_delta=0.145727,x_counter=5,y_rsum=3.078307,y_shift=0.8636244699032729,y_delta=-0.370403,y_counter=6 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_rsum=2.830383,x_shift=0.5271261600918548,x_delta=0.084658,x_counter=6,y_rsum=3.266192,y_shift=0.49322128674835697,y_delta=-0.305336,y_counter=7 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_rsum=3.428937,x_shift=0.6117840605678454,x_delta=-0.013230,x_counter=7 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x_rsum=3.460379,x_shift=0.5985540091064224,x_delta=-0.567112,x_counter=8,y_rsum=4.015743,y_shift=0.1878849191181694,y_delta=0.561666,y_counter=8 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_rsum=3.963005,x_shift=0.03144187646093577,x_delta=0.471184,x_counter=9,y_rsum=4.968361,y_shift=0.7495507603507059,y_delta=0.203068,y_counter=9 - -mlr --odkvp step -a rsum,shift,delta,counter -f x,y -g a ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x_rsum=0.346790,x_shift=,x_delta=0,x_counter=1,y_rsum=0.726803,y_shift=,y_delta=0,y_counter=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x_rsum=0.758680,x_shift=,x_delta=0,x_counter=1,y_rsum=0.522151,y_shift=,y_delta=0,y_counter=1 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x_rsum=1.140079,x_shift=0.7586799647899636,x_delta=-0.377281,x_counter=2,y_rsum=0.656340,y_shift=0.5221511083334797,y_delta=-0.387962,y_counter=2 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,y_rsum=0.863624,y_shift=,y_delta=0,y_counter=1 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x_rsum=0.527126,x_shift=,x_delta=0,x_counter=1,y_rsum=0.493221,y_shift=,y_delta=0,y_counter=1 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,x_rsum=1.751863,x_shift=0.38139939387114097,x_delta=0.230385,x_counter=3,y_rsum=0.844225,y_shift=0.13418874328430463,y_delta=0.053696,y_counter=3 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,x_rsum=1.125680,x_shift=0.5271261600918548,x_delta=0.071428,x_counter=2 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x_rsum=0.849416,x_shift=0.3467901443380824,x_delta=0.155836,x_counter=2,y_rsum=1.679421,y_shift=0.7268028627434533,y_delta=0.225815,y_counter=2 - -mlr --opprint step -a ewma -d 0.1,0.9 -f x,y -g a ./reg_test/input/abixy-het -a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 -eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 - -aaa b i x y -wye wye 3 0.20460330576630303 0.33831852551664776 - -a bbb i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 - -a b i xxx y y_ewma_0.1 y_ewma_0.9 -wye pan 5 0.5732889198020006 0.8636244699032729 0.863624 0.863624 - -a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 - -a b iii x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 - -a b i x yyy x_ewma_0.1 x_ewma_0.9 -zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 - -aaa bbb i x y -hat wye 9 0.03144187646093577 0.7495507603507059 - -a b i x y x_ewma_0.1 x_ewma_0.9 y_ewma_0.1 y_ewma_0.9 -pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 - -mlr --opprint step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g a ./reg_test/input/abixy-het -a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 0.726803 0.726803 -eks pan 2 0.7586799647899636 0.5221511083334797 0.758680 0.758680 0.522151 0.522151 - -aaa b i x y -wye wye 3 0.20460330576630303 0.33831852551664776 - -a bbb i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -eks wye 4 0.38139939387114097 0.13418874328430463 0.720952 0.419127 0.483355 0.172985 - -a b i xxx y y_ewma_smooth y_ewma_rough -wye pan 5 0.5732889198020006 0.8636244699032729 0.863624 0.863624 - -a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -zee pan 6 0.5271261600918548 0.49322128674835697 0.527126 0.527126 0.493221 0.493221 - -a b iii x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -eks zee 7 0.6117840605678454 0.1878849191181694 0.710035 0.592518 0.453808 0.186395 - -a b i x yyy x_ewma_smooth x_ewma_rough -zee wye 8 0.5985540091064224 0.976181385699006 0.534269 0.591411 - -aaa bbb i x y -hat wye 9 0.03144187646093577 0.7495507603507059 - -a b i x y x_ewma_smooth x_ewma_rough y_ewma_smooth y_ewma_rough -pan wye 10 0.5026260055412137 0.9526183602969864 0.362374 0.487042 0.749384 0.930037 - -mlr --icsvlite --opprint step -a from-first -f x ./reg_test/input/from-first.csv -x g x_from_first -100 red 0 -203 red 103 -101 green 1 -307 red 207 -209 green 109 -314 green 214 - -mlr --icsvlite --opprint step -a from-first -f x -g g ./reg_test/input/from-first.csv -x g x_from_first -100 red 0 -203 red 103 -101 green 0 -307 red 207 -209 green 108 -314 green 213 - -mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 ./reg_test/input/small -bin_lo bin_hi x_count y_count -0.000000 0.050000 1 0 -0.050000 0.100000 0 0 -0.100000 0.150000 0 1 -0.150000 0.200000 0 1 -0.200000 0.250000 1 0 -0.250000 0.300000 0 0 -0.300000 0.350000 1 1 -0.350000 0.400000 1 0 -0.400000 0.450000 0 0 -0.450000 0.500000 0 1 -0.500000 0.550000 2 1 -0.550000 0.600000 2 0 -0.600000 0.650000 1 0 -0.650000 0.700000 0 0 -0.700000 0.750000 0 2 -0.750000 0.800000 1 0 -0.800000 0.850000 0 0 -0.850000 0.900000 0 1 -0.900000 0.950000 0 0 -0.950000 1.000000 0 2 - -mlr --opprint histogram -f x,y --lo 0 --hi 1 --nbins 20 -o foo_ ./reg_test/input/small -foo_bin_lo foo_bin_hi foo_x_count foo_y_count -0.000000 0.050000 1 0 -0.050000 0.100000 0 0 -0.100000 0.150000 0 1 -0.150000 0.200000 0 1 -0.200000 0.250000 1 0 -0.250000 0.300000 0 0 -0.300000 0.350000 1 1 -0.350000 0.400000 1 0 -0.400000 0.450000 0 0 -0.450000 0.500000 0 1 -0.500000 0.550000 2 1 -0.550000 0.600000 2 0 -0.600000 0.650000 1 0 -0.650000 0.700000 0 0 -0.700000 0.750000 0 2 -0.750000 0.800000 1 0 -0.800000 0.850000 0 0 -0.850000 0.900000 0 1 -0.900000 0.950000 0 0 -0.950000 1.000000 0 2 - -mlr --opprint histogram --nbins 9 --auto -f x,y ./reg_test/input/ints.dkvp -bin_lo bin_hi x_count y_count -0.000000 1.000000 8 1 -1.000000 2.000000 2 2 -2.000000 3.000000 5 5 -3.000000 4.000000 4 1 -4.000000 5.000000 3 2 -5.000000 6.000000 1 4 -6.000000 7.000000 3 4 -7.000000 8.000000 2 4 -8.000000 9.000000 2 7 - -mlr --opprint histogram --nbins 9 --auto -f x,y -o foo_ ./reg_test/input/ints.dkvp -foo_bin_lo bin_hi foo_x_count foo_y_count -0.000000 1.000000 8 1 -1.000000 2.000000 2 2 -2.000000 3.000000 5 5 -3.000000 4.000000 4 1 -4.000000 5.000000 3 2 -5.000000 6.000000 1 4 -6.000000 7.000000 3 4 -7.000000 8.000000 2 4 -8.000000 9.000000 2 7 - -mlr --csvlite --opprint merge-fields -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv -a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum -436 436 436 490 490 926 195 195 195 446 446 641 -320 320 320 526 526 846 780 780 780 963 963 1743 -220 220 220 888 888 1108 705 705 705 831 831 1536 - -mlr --csvlite --opprint merge-fields -k -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv -a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum -436 490 446 195 436 436 436 490 490 926 195 195 195 446 446 641 -526 320 963 780 320 320 320 526 526 846 780 780 780 963 963 1743 -220 888 705 831 220 220 220 888 888 1108 705 705 705 831 831 1536 - -mlr --csvlite --opprint merge-fields -i -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv -a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum -436.000000 436 451.660000 490 490 926 195.000000 195 267.790000 446 446 641 -320.000000 320 379.740000 526 526 846 780.000000 780 833.070000 963 963 1743 -220.000000 220 413.720000 888 888 1108 705.000000 705 741.540000 831 831 1536 - -mlr --csvlite --opprint merge-fields -i -k -a p0,min,p29,max,p100,sum -c _in,_out ./reg_test/input/merge-fields-in-out.csv -a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 a_sum b_p0 b_min b_p29 b_max b_p100 b_sum -436 490 446 195 436.000000 436 451.660000 490 490 926 195.000000 195 267.790000 446 446 641 -526 320 963 780 320.000000 320 379.740000 526 526 846 780.000000 780 833.070000 963 963 1743 -220 888 705 831 220.000000 220 413.720000 888 888 1108 705.000000 705 741.540000 831 831 1536 - -mlr --csvlite --opprint merge-fields -a p0,min,p29,max,p100 -c _in,_out ./reg_test/input/merge-fields-in-out-mixed.csv -a_p0 a_min a_p29 a_max a_p100 b_p0 b_min b_p29 b_max b_p100 -436 436 436 abc abc 195 195 195 446 446 -320 320 320 526 526 780 780 780 def def -220 220 220 888 888 705 705 705 ghi ghi -jkl jkl jkl mno mno pqr pqr pqr stu stu - -mlr --csvlite --opprint merge-fields -k -a p0,min,p29,max,p100 -c _in,_out ./reg_test/input/merge-fields-in-out-mixed.csv -a_in a_out b_in b_out a_p0 a_min a_p29 a_max a_p100 b_p0 b_min b_p29 b_max b_p100 -436 abc 446 195 436 436 436 abc abc 195 195 195 446 446 -526 320 def 780 320 320 320 526 526 780 780 780 def def -220 888 705 ghi 220 220 220 888 888 705 705 705 ghi ghi -jkl mno pqr stu jkl jkl jkl mno mno pqr pqr pqr stu stu - -mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -f a_in_x,a_out_x -o foo ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 1 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 2 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 3 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -z 4 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -r in_,out_ -o bar ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 1 -bar_min 1 -bar_p29 2 -bar_max 8 -bar_p100 8 -bar_sum 15 -bar_count 4 - -z 1 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 2 -bar_min 2 -bar_p29 2 -bar_max 8 -bar_p100 8 -bar_sum 14 -bar_count 3 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 8 -bar_p100 8 -bar_sum 13 -bar_count 3 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 8 -bar_p100 8 -bar_sum 11 -bar_count 3 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 4 -bar_p100 4 -bar_sum 7 -bar_count 3 - -z 2 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 4 -bar_min 4 -bar_p29 4 -bar_max 8 -bar_p100 8 -bar_sum 12 -bar_count 2 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 2 -bar_min 2 -bar_p29 2 -bar_max 8 -bar_p100 8 -bar_sum 10 -bar_count 2 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 2 -bar_min 2 -bar_p29 2 -bar_max 4 -bar_p100 4 -bar_sum 6 -bar_count 2 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 8 -bar_p100 8 -bar_sum 9 -bar_count 2 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 4 -bar_p100 4 -bar_sum 5 -bar_count 2 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 2 -bar_p100 2 -bar_sum 3 -bar_count 2 - -z 3 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 1 -bar_p100 1 -bar_sum 1 -bar_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 2 -bar_min 2 -bar_p29 2 -bar_max 2 -bar_p100 2 -bar_sum 2 -bar_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 4 -bar_min 4 -bar_p29 4 -bar_max 4 -bar_p100 4 -bar_sum 4 -bar_count 1 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 8 -bar_min 8 -bar_p29 8 -bar_max 8 -bar_p100 8 -bar_sum 8 -bar_count 1 - -z 4 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -mlr --oxtab merge-fields -k -a p0,min,p29,max,p100,sum,count -c in_,out_ ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -z 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -z 2 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 - -z 3 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -z 4 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 - -mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -f a_in_x,a_out_x -o foo ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 1.000000 -foo_min 1 -foo_p29 1.290000 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 1 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 1.000000 -foo_min 1 -foo_p29 1.290000 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 1.000000 -foo_min 1 -foo_p29 1.290000 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 2 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 1.000000 -foo_min 1 -foo_p29 1.290000 -foo_max 2 -foo_p100 2 -foo_sum 3 -foo_count 2 - -z 3 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 1 -foo_min 1 -foo_p29 1 -foo_max 1 -foo_p100 1 -foo_sum 1 -foo_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 2 -foo_min 2 -foo_p29 2 -foo_max 2 -foo_p100 2 -foo_sum 2 -foo_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -z 4 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -foo_p0 -foo_min -foo_p29 -foo_max -foo_p100 -foo_sum 0 -foo_count 0 - -mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -r in_,out_ -o bar ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 1.870000 -bar_max 8 -bar_p100 8 -bar_sum 15 -bar_count 4 - -z 1 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 2.000000 -bar_min 2 -bar_p29 3.160000 -bar_max 8 -bar_p100 8 -bar_sum 14 -bar_count 3 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 2.740000 -bar_max 8 -bar_p100 8 -bar_sum 13 -bar_count 3 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 1.580000 -bar_max 8 -bar_p100 8 -bar_sum 11 -bar_count 3 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 1.580000 -bar_max 4 -bar_p100 4 -bar_sum 7 -bar_count 3 - -z 2 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -bar_p0 4.000000 -bar_min 4 -bar_p29 5.160000 -bar_max 8 -bar_p100 8 -bar_sum 12 -bar_count 2 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 2.000000 -bar_min 2 -bar_p29 3.740000 -bar_max 8 -bar_p100 8 -bar_sum 10 -bar_count 2 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 2.000000 -bar_min 2 -bar_p29 2.580000 -bar_max 4 -bar_p100 4 -bar_sum 6 -bar_count 2 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 3.030000 -bar_max 8 -bar_p100 8 -bar_sum 9 -bar_count 2 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 1.870000 -bar_max 4 -bar_p100 4 -bar_sum 5 -bar_count 2 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 1.000000 -bar_min 1 -bar_p29 1.290000 -bar_max 2 -bar_p100 2 -bar_sum 3 -bar_count 2 - -z 3 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 1 -bar_min 1 -bar_p29 1 -bar_max 1 -bar_p100 1 -bar_sum 1 -bar_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 2 -bar_min 2 -bar_p29 2 -bar_max 2 -bar_p100 2 -bar_sum 2 -bar_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -bar_p0 4 -bar_min 4 -bar_p29 4 -bar_max 4 -bar_p100 4 -bar_sum 4 -bar_count 1 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -bar_p0 8 -bar_min 8 -bar_p29 8 -bar_max 8 -bar_p100 8 -bar_sum 8 -bar_count 1 - -z 4 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -bar_p0 -bar_min -bar_p29 -bar_max -bar_p100 -bar_sum 0 -bar_count 0 - -mlr --oxtab merge-fields -i -k -a p0,min,p29,max,p100,sum,count -c in_,out_ ./reg_test/input/merge-fields-abxy.dkvp -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 1.000000 -a_x_min 1 -a_x_p29 1.290000 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -z 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 1.000000 -a_x_min 1 -a_x_p29 1.290000 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 1.000000 -a_x_min 1 -a_x_p29 1.290000 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -z 2 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_out_x 8 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_on_x 1 -a_out_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -a_in_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_in_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 1.000000 -a_x_min 1 -a_x_p29 1.290000 -a_x_max 2 -a_x_p100 2 -a_x_sum 3 -a_x_count 2 - -z 3 - -a_in_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 1 -a_x_min 1 -a_x_p29 1 -a_x_max 1 -a_x_p100 1 -a_x_sum 1 -a_x_count 1 - -a_on_x 1 -a_out_x 2 -b_on_y 4 -b_oot_x 8 -a_x_p0 2 -a_x_min 2 -a_x_p29 2 -a_x_max 2 -a_x_p100 2 -a_x_sum 2 -a_x_count 1 - -a_on_x 1 -a_oot_x 2 -b_in_y 4 -b_oot_x 8 -b_y_p0 4 -b_y_min 4 -b_y_p29 4 -b_y_max 4 -b_y_p100 4 -b_y_sum 4 -b_y_count 1 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_out_x 8 -b_x_p0 8 -b_x_min 8 -b_x_p29 8 -b_x_max 8 -b_x_p100 8 -b_x_sum 8 -b_x_count 1 - -z 4 - -a_on_x 1 -a_oot_x 2 -b_on_y 4 -b_oot_x 8 - - -================================================================ -STATS1 WITH REGEXED FIELD NAMES - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b -f i,x,y -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gr ^[a-h]$ --fr ^[i-z]$ -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b --fr ^[i-z]$ -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gr ^[a-h]$ -f i,x,y -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gx ^[i-z]$ --fx ^[a-h]$ -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum -g a,b --fx ^[a-h]$ -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - -mlr --from ./reg_test/input/abixy --opprint stats1 -a sum --gx ^[i-z]$ -f i,x,y -a b i_sum x_sum y_sum -pan pan 1 0.346790 0.726803 -eks pan 2 0.758680 0.522151 -wye wye 3 0.204603 0.338319 -eks wye 4 0.381399 0.134189 -wye pan 5 0.573289 0.863624 -zee pan 6 0.527126 0.493221 -eks zee 7 0.611784 0.187885 -zee wye 8 0.598554 0.976181 -hat wye 9 0.031442 0.749551 -pan wye 10 0.502626 0.952618 - - -================================================================ -MOST/LEAST FREQUENT - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a -n 3 -a count -apple 6 -bat 5 -cat 4 - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -a b count -apple apple 6 -bat cat 5 -cat bat 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -b -a b -apple apple -bat cat -cat bat - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f nonesuch -n 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a -n 3 -a count -dog 2 -cat 4 -bat 5 - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -a b count -cat cat 1 -dog dog 2 -cat bat 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -b -a b -cat cat -dog dog -cat bat - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f nonesuch -n 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a -n 3 -o foo -a foo -apple 6 -bat 5 -cat 4 - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -o foo -a b foo -apple apple 6 -bat cat 5 -cat bat 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f a,b -n 3 -b -o foo -a b -apple apple -bat cat -cat bat - -mlr --opprint --from ./reg_test/input/freq.dkvp most-frequent -f nonesuch -n 3 -o foo - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a -n 3 -o foo -a foo -dog 2 -cat 4 -bat 5 - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -o foo -a b foo -cat cat 1 -dog dog 2 -cat bat 3 - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f a,b -n 3 -b -o foo -a b -cat cat -dog dog -cat bat - -mlr --opprint --from ./reg_test/input/freq.dkvp least-frequent -f nonesuch -n 3 -o foo - - -================================================================ -COUNT-SIMILAR - -mlr --opprint --from ./reg_test/input/abixy count-similar -g a -a b i x y count -pan pan 1 0.3467901443380824 0.7268028627434533 2 -pan wye 10 0.5026260055412137 0.9526183602969864 2 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -eks wye 4 0.38139939387114097 0.13418874328430463 3 -eks zee 7 0.6117840605678454 0.1878849191181694 3 -wye wye 3 0.20460330576630303 0.33831852551664776 2 -wye pan 5 0.5732889198020006 0.8636244699032729 2 -zee pan 6 0.5271261600918548 0.49322128674835697 2 -zee wye 8 0.5985540091064224 0.976181385699006 2 -hat wye 9 0.03144187646093577 0.7495507603507059 1 - -mlr --opprint --from ./reg_test/input/abixy count-similar -g b,i -a b i x y count -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1 -wye wye 3 0.20460330576630303 0.33831852551664776 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1 -wye pan 5 0.5732889198020006 0.8636244699032729 1 -zee pan 6 0.5271261600918548 0.49322128674835697 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1 -zee wye 8 0.5985540091064224 0.976181385699006 1 -hat wye 9 0.03144187646093577 0.7495507603507059 1 -pan wye 10 0.5026260055412137 0.9526183602969864 1 - -mlr --opprint --from ./reg_test/input/abixy count-similar -g a,b,i -o other_name_for_counter -a b i x y other_name_for_counter -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1 -wye wye 3 0.20460330576630303 0.33831852551664776 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1 -wye pan 5 0.5732889198020006 0.8636244699032729 1 -zee pan 6 0.5271261600918548 0.49322128674835697 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1 -zee wye 8 0.5985540091064224 0.976181385699006 1 -hat wye 9 0.03144187646093577 0.7495507603507059 1 -pan wye 10 0.5026260055412137 0.9526183602969864 1 - - -================================================================ -NON-INTERPOLATED AND INTERPOLATED PERCENTILES - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 1 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 0 -x_p21 0 -x_p22 0 -x_p23 0 -x_p24 0 -x_p25 0 -x_p26 0 -x_p27 0 -x_p28 0 -x_p29 0 -x_p30 0 -x_p31 0 -x_p32 0 -x_p33 0 -x_p34 0 -x_p35 0 -x_p36 0 -x_p37 0 -x_p38 0 -x_p39 0 -x_p40 0 -x_p41 0 -x_p42 0 -x_p43 0 -x_p44 0 -x_p45 0 -x_p46 0 -x_p47 0 -x_p48 0 -x_p49 0 -x_p50 0 -x_p51 0 -x_p52 0 -x_p53 0 -x_p54 0 -x_p55 0 -x_p56 0 -x_p57 0 -x_p58 0 -x_p59 0 -x_p60 0 -x_p61 0 -x_p62 0 -x_p63 0 -x_p64 0 -x_p65 0 -x_p66 0 -x_p67 0 -x_p68 0 -x_p69 0 -x_p70 0 -x_p71 0 -x_p72 0 -x_p73 0 -x_p74 0 -x_p75 0 -x_p76 0 -x_p77 0 -x_p78 0 -x_p79 0 -x_p80 0 -x_p81 0 -x_p82 0 -x_p83 0 -x_p84 0 -x_p85 0 -x_p86 0 -x_p87 0 -x_p88 0 -x_p89 0 -x_p90 0 -x_p91 0 -x_p92 0 -x_p93 0 -x_p94 0 -x_p95 0 -x_p96 0 -x_p97 0 -x_p98 0 -x_p99 0 -x_p100 0 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 2 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 0 -x_p21 0 -x_p22 0 -x_p23 0 -x_p24 0 -x_p25 0 -x_p26 0 -x_p27 0 -x_p28 0 -x_p29 0 -x_p30 0 -x_p31 0 -x_p32 0 -x_p33 0 -x_p34 0 -x_p35 0 -x_p36 0 -x_p37 0 -x_p38 0 -x_p39 0 -x_p40 0 -x_p41 0 -x_p42 0 -x_p43 0 -x_p44 0 -x_p45 0 -x_p46 0 -x_p47 0 -x_p48 0 -x_p49 0 -x_p50 1 -x_p51 1 -x_p52 1 -x_p53 1 -x_p54 1 -x_p55 1 -x_p56 1 -x_p57 1 -x_p58 1 -x_p59 1 -x_p60 1 -x_p61 1 -x_p62 1 -x_p63 1 -x_p64 1 -x_p65 1 -x_p66 1 -x_p67 1 -x_p68 1 -x_p69 1 -x_p70 1 -x_p71 1 -x_p72 1 -x_p73 1 -x_p74 1 -x_p75 1 -x_p76 1 -x_p77 1 -x_p78 1 -x_p79 1 -x_p80 1 -x_p81 1 -x_p82 1 -x_p83 1 -x_p84 1 -x_p85 1 -x_p86 1 -x_p87 1 -x_p88 1 -x_p89 1 -x_p90 1 -x_p91 1 -x_p92 1 -x_p93 1 -x_p94 1 -x_p95 1 -x_p96 1 -x_p97 1 -x_p98 1 -x_p99 1 -x_p100 1 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 3 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 0 -x_p21 0 -x_p22 0 -x_p23 0 -x_p24 0 -x_p25 0 -x_p26 0 -x_p27 0 -x_p28 0 -x_p29 0 -x_p30 0 -x_p31 0 -x_p32 0 -x_p33 0 -x_p34 1 -x_p35 1 -x_p36 1 -x_p37 1 -x_p38 1 -x_p39 1 -x_p40 1 -x_p41 1 -x_p42 1 -x_p43 1 -x_p44 1 -x_p45 1 -x_p46 1 -x_p47 1 -x_p48 1 -x_p49 1 -x_p50 1 -x_p51 1 -x_p52 1 -x_p53 1 -x_p54 1 -x_p55 1 -x_p56 1 -x_p57 1 -x_p58 1 -x_p59 1 -x_p60 1 -x_p61 1 -x_p62 1 -x_p63 1 -x_p64 1 -x_p65 1 -x_p66 1 -x_p67 2 -x_p68 2 -x_p69 2 -x_p70 2 -x_p71 2 -x_p72 2 -x_p73 2 -x_p74 2 -x_p75 2 -x_p76 2 -x_p77 2 -x_p78 2 -x_p79 2 -x_p80 2 -x_p81 2 -x_p82 2 -x_p83 2 -x_p84 2 -x_p85 2 -x_p86 2 -x_p87 2 -x_p88 2 -x_p89 2 -x_p90 2 -x_p91 2 -x_p92 2 -x_p93 2 -x_p94 2 -x_p95 2 -x_p96 2 -x_p97 2 -x_p98 2 -x_p99 2 -x_p100 2 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 4 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 0 -x_p21 0 -x_p22 0 -x_p23 0 -x_p24 0 -x_p25 1 -x_p26 1 -x_p27 1 -x_p28 1 -x_p29 1 -x_p30 1 -x_p31 1 -x_p32 1 -x_p33 1 -x_p34 1 -x_p35 1 -x_p36 1 -x_p37 1 -x_p38 1 -x_p39 1 -x_p40 1 -x_p41 1 -x_p42 1 -x_p43 1 -x_p44 1 -x_p45 1 -x_p46 1 -x_p47 1 -x_p48 1 -x_p49 1 -x_p50 2 -x_p51 2 -x_p52 2 -x_p53 2 -x_p54 2 -x_p55 2 -x_p56 2 -x_p57 2 -x_p58 2 -x_p59 2 -x_p60 2 -x_p61 2 -x_p62 2 -x_p63 2 -x_p64 2 -x_p65 2 -x_p66 2 -x_p67 2 -x_p68 2 -x_p69 2 -x_p70 2 -x_p71 2 -x_p72 2 -x_p73 2 -x_p74 2 -x_p75 3 -x_p76 3 -x_p77 3 -x_p78 3 -x_p79 3 -x_p80 3 -x_p81 3 -x_p82 3 -x_p83 3 -x_p84 3 -x_p85 3 -x_p86 3 -x_p87 3 -x_p88 3 -x_p89 3 -x_p90 3 -x_p91 3 -x_p92 3 -x_p93 3 -x_p94 3 -x_p95 3 -x_p96 3 -x_p97 3 -x_p98 3 -x_p99 3 -x_p100 3 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 5 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 1 -x_p21 1 -x_p22 1 -x_p23 1 -x_p24 1 -x_p25 1 -x_p26 1 -x_p27 1 -x_p28 1 -x_p29 1 -x_p30 1 -x_p31 1 -x_p32 1 -x_p33 1 -x_p34 1 -x_p35 1 -x_p36 1 -x_p37 1 -x_p38 1 -x_p39 1 -x_p40 2 -x_p41 2 -x_p42 2 -x_p43 2 -x_p44 2 -x_p45 2 -x_p46 2 -x_p47 2 -x_p48 2 -x_p49 2 -x_p50 2 -x_p51 2 -x_p52 2 -x_p53 2 -x_p54 2 -x_p55 2 -x_p56 2 -x_p57 2 -x_p58 2 -x_p59 2 -x_p60 3 -x_p61 3 -x_p62 3 -x_p63 3 -x_p64 3 -x_p65 3 -x_p66 3 -x_p67 3 -x_p68 3 -x_p69 3 -x_p70 3 -x_p71 3 -x_p72 3 -x_p73 3 -x_p74 3 -x_p75 3 -x_p76 3 -x_p77 3 -x_p78 3 -x_p79 3 -x_p80 4 -x_p81 4 -x_p82 4 -x_p83 4 -x_p84 4 -x_p85 4 -x_p86 4 -x_p87 4 -x_p88 4 -x_p89 4 -x_p90 4 -x_p91 4 -x_p92 4 -x_p93 4 -x_p94 4 -x_p95 4 -x_p96 4 -x_p97 4 -x_p98 4 -x_p99 4 -x_p100 4 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 6 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 1 -x_p18 1 -x_p19 1 -x_p20 1 -x_p21 1 -x_p22 1 -x_p23 1 -x_p24 1 -x_p25 1 -x_p26 1 -x_p27 1 -x_p28 1 -x_p29 1 -x_p30 1 -x_p31 1 -x_p32 1 -x_p33 1 -x_p34 2 -x_p35 2 -x_p36 2 -x_p37 2 -x_p38 2 -x_p39 2 -x_p40 2 -x_p41 2 -x_p42 2 -x_p43 2 -x_p44 2 -x_p45 2 -x_p46 2 -x_p47 2 -x_p48 2 -x_p49 2 -x_p50 3 -x_p51 3 -x_p52 3 -x_p53 3 -x_p54 3 -x_p55 3 -x_p56 3 -x_p57 3 -x_p58 3 -x_p59 3 -x_p60 3 -x_p61 3 -x_p62 3 -x_p63 3 -x_p64 3 -x_p65 3 -x_p66 3 -x_p67 4 -x_p68 4 -x_p69 4 -x_p70 4 -x_p71 4 -x_p72 4 -x_p73 4 -x_p74 4 -x_p75 4 -x_p76 4 -x_p77 4 -x_p78 4 -x_p79 4 -x_p80 4 -x_p81 4 -x_p82 4 -x_p83 4 -x_p84 5 -x_p85 5 -x_p86 5 -x_p87 5 -x_p88 5 -x_p89 5 -x_p90 5 -x_p91 5 -x_p92 5 -x_p93 5 -x_p94 5 -x_p95 5 -x_p96 5 -x_p97 5 -x_p98 5 -x_p99 5 -x_p100 5 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 7 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 1 -x_p16 1 -x_p17 1 -x_p18 1 -x_p19 1 -x_p20 1 -x_p21 1 -x_p22 1 -x_p23 1 -x_p24 1 -x_p25 1 -x_p26 1 -x_p27 1 -x_p28 1 -x_p29 2 -x_p30 2 -x_p31 2 -x_p32 2 -x_p33 2 -x_p34 2 -x_p35 2 -x_p36 2 -x_p37 2 -x_p38 2 -x_p39 2 -x_p40 2 -x_p41 2 -x_p42 2 -x_p43 3 -x_p44 3 -x_p45 3 -x_p46 3 -x_p47 3 -x_p48 3 -x_p49 3 -x_p50 3 -x_p51 3 -x_p52 3 -x_p53 3 -x_p54 3 -x_p55 3 -x_p56 3 -x_p57 3 -x_p58 4 -x_p59 4 -x_p60 4 -x_p61 4 -x_p62 4 -x_p63 4 -x_p64 4 -x_p65 4 -x_p66 4 -x_p67 4 -x_p68 4 -x_p69 4 -x_p70 4 -x_p71 4 -x_p72 5 -x_p73 5 -x_p74 5 -x_p75 5 -x_p76 5 -x_p77 5 -x_p78 5 -x_p79 5 -x_p80 5 -x_p81 5 -x_p82 5 -x_p83 5 -x_p84 5 -x_p85 5 -x_p86 6 -x_p87 6 -x_p88 6 -x_p89 6 -x_p90 6 -x_p91 6 -x_p92 6 -x_p93 6 -x_p94 6 -x_p95 6 -x_p96 6 -x_p97 6 -x_p98 6 -x_p99 6 -x_p100 6 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 8 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 1 -x_p14 1 -x_p15 1 -x_p16 1 -x_p17 1 -x_p18 1 -x_p19 1 -x_p20 1 -x_p21 1 -x_p22 1 -x_p23 1 -x_p24 1 -x_p25 2 -x_p26 2 -x_p27 2 -x_p28 2 -x_p29 2 -x_p30 2 -x_p31 2 -x_p32 2 -x_p33 2 -x_p34 2 -x_p35 2 -x_p36 2 -x_p37 2 -x_p38 3 -x_p39 3 -x_p40 3 -x_p41 3 -x_p42 3 -x_p43 3 -x_p44 3 -x_p45 3 -x_p46 3 -x_p47 3 -x_p48 3 -x_p49 3 -x_p50 4 -x_p51 4 -x_p52 4 -x_p53 4 -x_p54 4 -x_p55 4 -x_p56 4 -x_p57 4 -x_p58 4 -x_p59 4 -x_p60 4 -x_p61 4 -x_p62 4 -x_p63 5 -x_p64 5 -x_p65 5 -x_p66 5 -x_p67 5 -x_p68 5 -x_p69 5 -x_p70 5 -x_p71 5 -x_p72 5 -x_p73 5 -x_p74 5 -x_p75 6 -x_p76 6 -x_p77 6 -x_p78 6 -x_p79 6 -x_p80 6 -x_p81 6 -x_p82 6 -x_p83 6 -x_p84 6 -x_p85 6 -x_p86 6 -x_p87 6 -x_p88 7 -x_p89 7 -x_p90 7 -x_p91 7 -x_p92 7 -x_p93 7 -x_p94 7 -x_p95 7 -x_p96 7 -x_p97 7 -x_p98 7 -x_p99 7 -x_p100 7 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 9 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 1 -x_p13 1 -x_p14 1 -x_p15 1 -x_p16 1 -x_p17 1 -x_p18 1 -x_p19 1 -x_p20 1 -x_p21 1 -x_p22 1 -x_p23 2 -x_p24 2 -x_p25 2 -x_p26 2 -x_p27 2 -x_p28 2 -x_p29 2 -x_p30 2 -x_p31 2 -x_p32 2 -x_p33 2 -x_p34 3 -x_p35 3 -x_p36 3 -x_p37 3 -x_p38 3 -x_p39 3 -x_p40 3 -x_p41 3 -x_p42 3 -x_p43 3 -x_p44 3 -x_p45 4 -x_p46 4 -x_p47 4 -x_p48 4 -x_p49 4 -x_p50 4 -x_p51 4 -x_p52 4 -x_p53 4 -x_p54 4 -x_p55 4 -x_p56 5 -x_p57 5 -x_p58 5 -x_p59 5 -x_p60 5 -x_p61 5 -x_p62 5 -x_p63 5 -x_p64 5 -x_p65 5 -x_p66 5 -x_p67 6 -x_p68 6 -x_p69 6 -x_p70 6 -x_p71 6 -x_p72 6 -x_p73 6 -x_p74 6 -x_p75 6 -x_p76 6 -x_p77 6 -x_p78 7 -x_p79 7 -x_p80 7 -x_p81 7 -x_p82 7 -x_p83 7 -x_p84 7 -x_p85 7 -x_p86 7 -x_p87 7 -x_p88 7 -x_p89 8 -x_p90 8 -x_p91 8 -x_p92 8 -x_p93 8 -x_p94 8 -x_p95 8 -x_p96 8 -x_p97 8 -x_p98 8 -x_p99 8 -x_p100 8 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 10 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 1 -x_p11 1 -x_p12 1 -x_p13 1 -x_p14 1 -x_p15 1 -x_p16 1 -x_p17 1 -x_p18 1 -x_p19 1 -x_p20 2 -x_p21 2 -x_p22 2 -x_p23 2 -x_p24 2 -x_p25 2 -x_p26 2 -x_p27 2 -x_p28 2 -x_p29 2 -x_p30 3 -x_p31 3 -x_p32 3 -x_p33 3 -x_p34 3 -x_p35 3 -x_p36 3 -x_p37 3 -x_p38 3 -x_p39 3 -x_p40 4 -x_p41 4 -x_p42 4 -x_p43 4 -x_p44 4 -x_p45 4 -x_p46 4 -x_p47 4 -x_p48 4 -x_p49 4 -x_p50 5 -x_p51 5 -x_p52 5 -x_p53 5 -x_p54 5 -x_p55 5 -x_p56 5 -x_p57 5 -x_p58 5 -x_p59 5 -x_p60 6 -x_p61 6 -x_p62 6 -x_p63 6 -x_p64 6 -x_p65 6 -x_p66 6 -x_p67 6 -x_p68 6 -x_p69 6 -x_p70 7 -x_p71 7 -x_p72 7 -x_p73 7 -x_p74 7 -x_p75 7 -x_p76 7 -x_p77 7 -x_p78 7 -x_p79 7 -x_p80 8 -x_p81 8 -x_p82 8 -x_p83 8 -x_p84 8 -x_p85 8 -x_p86 8 -x_p87 8 -x_p88 8 -x_p89 8 -x_p90 9 -x_p91 9 -x_p92 9 -x_p93 9 -x_p94 9 -x_p95 9 -x_p96 9 -x_p97 9 -x_p98 9 -x_p99 9 -x_p100 9 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 11 then stats1 -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 1 -x_p11 1 -x_p12 1 -x_p13 1 -x_p14 1 -x_p15 1 -x_p16 1 -x_p17 1 -x_p18 1 -x_p19 2 -x_p20 2 -x_p21 2 -x_p22 2 -x_p23 2 -x_p24 2 -x_p25 2 -x_p26 2 -x_p27 2 -x_p28 3 -x_p29 3 -x_p30 3 -x_p31 3 -x_p32 3 -x_p33 3 -x_p34 3 -x_p35 3 -x_p36 3 -x_p37 4 -x_p38 4 -x_p39 4 -x_p40 4 -x_p41 4 -x_p42 4 -x_p43 4 -x_p44 4 -x_p45 4 -x_p46 5 -x_p47 5 -x_p48 5 -x_p49 5 -x_p50 5 -x_p51 5 -x_p52 5 -x_p53 5 -x_p54 5 -x_p55 6 -x_p56 6 -x_p57 6 -x_p58 6 -x_p59 6 -x_p60 6 -x_p61 6 -x_p62 6 -x_p63 6 -x_p64 7 -x_p65 7 -x_p66 7 -x_p67 7 -x_p68 7 -x_p69 7 -x_p70 7 -x_p71 7 -x_p72 7 -x_p73 8 -x_p74 8 -x_p75 8 -x_p76 8 -x_p77 8 -x_p78 8 -x_p79 8 -x_p80 8 -x_p81 8 -x_p82 9 -x_p83 9 -x_p84 9 -x_p85 9 -x_p86 9 -x_p87 9 -x_p88 9 -x_p89 9 -x_p90 9 -x_p91 10 -x_p92 10 -x_p93 10 -x_p94 10 -x_p95 10 -x_p96 10 -x_p97 10 -x_p98 10 -x_p99 10 -x_p100 10 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 1 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0 -x_p01 0 -x_p02 0 -x_p03 0 -x_p04 0 -x_p05 0 -x_p06 0 -x_p07 0 -x_p08 0 -x_p09 0 -x_p10 0 -x_p11 0 -x_p12 0 -x_p13 0 -x_p14 0 -x_p15 0 -x_p16 0 -x_p17 0 -x_p18 0 -x_p19 0 -x_p20 0 -x_p21 0 -x_p22 0 -x_p23 0 -x_p24 0 -x_p25 0 -x_p26 0 -x_p27 0 -x_p28 0 -x_p29 0 -x_p30 0 -x_p31 0 -x_p32 0 -x_p33 0 -x_p34 0 -x_p35 0 -x_p36 0 -x_p37 0 -x_p38 0 -x_p39 0 -x_p40 0 -x_p41 0 -x_p42 0 -x_p43 0 -x_p44 0 -x_p45 0 -x_p46 0 -x_p47 0 -x_p48 0 -x_p49 0 -x_p50 0 -x_p51 0 -x_p52 0 -x_p53 0 -x_p54 0 -x_p55 0 -x_p56 0 -x_p57 0 -x_p58 0 -x_p59 0 -x_p60 0 -x_p61 0 -x_p62 0 -x_p63 0 -x_p64 0 -x_p65 0 -x_p66 0 -x_p67 0 -x_p68 0 -x_p69 0 -x_p70 0 -x_p71 0 -x_p72 0 -x_p73 0 -x_p74 0 -x_p75 0 -x_p76 0 -x_p77 0 -x_p78 0 -x_p79 0 -x_p80 0 -x_p81 0 -x_p82 0 -x_p83 0 -x_p84 0 -x_p85 0 -x_p86 0 -x_p87 0 -x_p88 0 -x_p89 0 -x_p90 0 -x_p91 0 -x_p92 0 -x_p93 0 -x_p94 0 -x_p95 0 -x_p96 0 -x_p97 0 -x_p98 0 -x_p99 0 -x_p100 0 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 2 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.010000 -x_p02 0.020000 -x_p03 0.030000 -x_p04 0.040000 -x_p05 0.050000 -x_p06 0.060000 -x_p07 0.070000 -x_p08 0.080000 -x_p09 0.090000 -x_p10 0.100000 -x_p11 0.110000 -x_p12 0.120000 -x_p13 0.130000 -x_p14 0.140000 -x_p15 0.150000 -x_p16 0.160000 -x_p17 0.170000 -x_p18 0.180000 -x_p19 0.190000 -x_p20 0.200000 -x_p21 0.210000 -x_p22 0.220000 -x_p23 0.230000 -x_p24 0.240000 -x_p25 0.250000 -x_p26 0.260000 -x_p27 0.270000 -x_p28 0.280000 -x_p29 0.290000 -x_p30 0.300000 -x_p31 0.310000 -x_p32 0.320000 -x_p33 0.330000 -x_p34 0.340000 -x_p35 0.350000 -x_p36 0.360000 -x_p37 0.370000 -x_p38 0.380000 -x_p39 0.390000 -x_p40 0.400000 -x_p41 0.410000 -x_p42 0.420000 -x_p43 0.430000 -x_p44 0.440000 -x_p45 0.450000 -x_p46 0.460000 -x_p47 0.470000 -x_p48 0.480000 -x_p49 0.490000 -x_p50 0.500000 -x_p51 0.510000 -x_p52 0.520000 -x_p53 0.530000 -x_p54 0.540000 -x_p55 0.550000 -x_p56 0.560000 -x_p57 0.570000 -x_p58 0.580000 -x_p59 0.590000 -x_p60 0.600000 -x_p61 0.610000 -x_p62 0.620000 -x_p63 0.630000 -x_p64 0.640000 -x_p65 0.650000 -x_p66 0.660000 -x_p67 0.670000 -x_p68 0.680000 -x_p69 0.690000 -x_p70 0.700000 -x_p71 0.710000 -x_p72 0.720000 -x_p73 0.730000 -x_p74 0.740000 -x_p75 0.750000 -x_p76 0.760000 -x_p77 0.770000 -x_p78 0.780000 -x_p79 0.790000 -x_p80 0.800000 -x_p81 0.810000 -x_p82 0.820000 -x_p83 0.830000 -x_p84 0.840000 -x_p85 0.850000 -x_p86 0.860000 -x_p87 0.870000 -x_p88 0.880000 -x_p89 0.890000 -x_p90 0.900000 -x_p91 0.910000 -x_p92 0.920000 -x_p93 0.930000 -x_p94 0.940000 -x_p95 0.950000 -x_p96 0.960000 -x_p97 0.970000 -x_p98 0.980000 -x_p99 0.990000 -x_p100 1 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 3 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.020000 -x_p02 0.040000 -x_p03 0.060000 -x_p04 0.080000 -x_p05 0.100000 -x_p06 0.120000 -x_p07 0.140000 -x_p08 0.160000 -x_p09 0.180000 -x_p10 0.200000 -x_p11 0.220000 -x_p12 0.240000 -x_p13 0.260000 -x_p14 0.280000 -x_p15 0.300000 -x_p16 0.320000 -x_p17 0.340000 -x_p18 0.360000 -x_p19 0.380000 -x_p20 0.400000 -x_p21 0.420000 -x_p22 0.440000 -x_p23 0.460000 -x_p24 0.480000 -x_p25 0.500000 -x_p26 0.520000 -x_p27 0.540000 -x_p28 0.560000 -x_p29 0.580000 -x_p30 0.600000 -x_p31 0.620000 -x_p32 0.640000 -x_p33 0.660000 -x_p34 0.680000 -x_p35 0.700000 -x_p36 0.720000 -x_p37 0.740000 -x_p38 0.760000 -x_p39 0.780000 -x_p40 0.800000 -x_p41 0.820000 -x_p42 0.840000 -x_p43 0.860000 -x_p44 0.880000 -x_p45 0.900000 -x_p46 0.920000 -x_p47 0.940000 -x_p48 0.960000 -x_p49 0.980000 -x_p50 1.000000 -x_p51 1.020000 -x_p52 1.040000 -x_p53 1.060000 -x_p54 1.080000 -x_p55 1.100000 -x_p56 1.120000 -x_p57 1.140000 -x_p58 1.160000 -x_p59 1.180000 -x_p60 1.200000 -x_p61 1.220000 -x_p62 1.240000 -x_p63 1.260000 -x_p64 1.280000 -x_p65 1.300000 -x_p66 1.320000 -x_p67 1.340000 -x_p68 1.360000 -x_p69 1.380000 -x_p70 1.400000 -x_p71 1.420000 -x_p72 1.440000 -x_p73 1.460000 -x_p74 1.480000 -x_p75 1.500000 -x_p76 1.520000 -x_p77 1.540000 -x_p78 1.560000 -x_p79 1.580000 -x_p80 1.600000 -x_p81 1.620000 -x_p82 1.640000 -x_p83 1.660000 -x_p84 1.680000 -x_p85 1.700000 -x_p86 1.720000 -x_p87 1.740000 -x_p88 1.760000 -x_p89 1.780000 -x_p90 1.800000 -x_p91 1.820000 -x_p92 1.840000 -x_p93 1.860000 -x_p94 1.880000 -x_p95 1.900000 -x_p96 1.920000 -x_p97 1.940000 -x_p98 1.960000 -x_p99 1.980000 -x_p100 2 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 4 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.030000 -x_p02 0.060000 -x_p03 0.090000 -x_p04 0.120000 -x_p05 0.150000 -x_p06 0.180000 -x_p07 0.210000 -x_p08 0.240000 -x_p09 0.270000 -x_p10 0.300000 -x_p11 0.330000 -x_p12 0.360000 -x_p13 0.390000 -x_p14 0.420000 -x_p15 0.450000 -x_p16 0.480000 -x_p17 0.510000 -x_p18 0.540000 -x_p19 0.570000 -x_p20 0.600000 -x_p21 0.630000 -x_p22 0.660000 -x_p23 0.690000 -x_p24 0.720000 -x_p25 0.750000 -x_p26 0.780000 -x_p27 0.810000 -x_p28 0.840000 -x_p29 0.870000 -x_p30 0.900000 -x_p31 0.930000 -x_p32 0.960000 -x_p33 0.990000 -x_p34 1.020000 -x_p35 1.050000 -x_p36 1.080000 -x_p37 1.110000 -x_p38 1.140000 -x_p39 1.170000 -x_p40 1.200000 -x_p41 1.230000 -x_p42 1.260000 -x_p43 1.290000 -x_p44 1.320000 -x_p45 1.350000 -x_p46 1.380000 -x_p47 1.410000 -x_p48 1.440000 -x_p49 1.470000 -x_p50 1.500000 -x_p51 1.530000 -x_p52 1.560000 -x_p53 1.590000 -x_p54 1.620000 -x_p55 1.650000 -x_p56 1.680000 -x_p57 1.710000 -x_p58 1.740000 -x_p59 1.770000 -x_p60 1.800000 -x_p61 1.830000 -x_p62 1.860000 -x_p63 1.890000 -x_p64 1.920000 -x_p65 1.950000 -x_p66 1.980000 -x_p67 2.010000 -x_p68 2.040000 -x_p69 2.070000 -x_p70 2.100000 -x_p71 2.130000 -x_p72 2.160000 -x_p73 2.190000 -x_p74 2.220000 -x_p75 2.250000 -x_p76 2.280000 -x_p77 2.310000 -x_p78 2.340000 -x_p79 2.370000 -x_p80 2.400000 -x_p81 2.430000 -x_p82 2.460000 -x_p83 2.490000 -x_p84 2.520000 -x_p85 2.550000 -x_p86 2.580000 -x_p87 2.610000 -x_p88 2.640000 -x_p89 2.670000 -x_p90 2.700000 -x_p91 2.730000 -x_p92 2.760000 -x_p93 2.790000 -x_p94 2.820000 -x_p95 2.850000 -x_p96 2.880000 -x_p97 2.910000 -x_p98 2.940000 -x_p99 2.970000 -x_p100 3 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 5 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.040000 -x_p02 0.080000 -x_p03 0.120000 -x_p04 0.160000 -x_p05 0.200000 -x_p06 0.240000 -x_p07 0.280000 -x_p08 0.320000 -x_p09 0.360000 -x_p10 0.400000 -x_p11 0.440000 -x_p12 0.480000 -x_p13 0.520000 -x_p14 0.560000 -x_p15 0.600000 -x_p16 0.640000 -x_p17 0.680000 -x_p18 0.720000 -x_p19 0.760000 -x_p20 0.800000 -x_p21 0.840000 -x_p22 0.880000 -x_p23 0.920000 -x_p24 0.960000 -x_p25 1.000000 -x_p26 1.040000 -x_p27 1.080000 -x_p28 1.120000 -x_p29 1.160000 -x_p30 1.200000 -x_p31 1.240000 -x_p32 1.280000 -x_p33 1.320000 -x_p34 1.360000 -x_p35 1.400000 -x_p36 1.440000 -x_p37 1.480000 -x_p38 1.520000 -x_p39 1.560000 -x_p40 1.600000 -x_p41 1.640000 -x_p42 1.680000 -x_p43 1.720000 -x_p44 1.760000 -x_p45 1.800000 -x_p46 1.840000 -x_p47 1.880000 -x_p48 1.920000 -x_p49 1.960000 -x_p50 2.000000 -x_p51 2.040000 -x_p52 2.080000 -x_p53 2.120000 -x_p54 2.160000 -x_p55 2.200000 -x_p56 2.240000 -x_p57 2.280000 -x_p58 2.320000 -x_p59 2.360000 -x_p60 2.400000 -x_p61 2.440000 -x_p62 2.480000 -x_p63 2.520000 -x_p64 2.560000 -x_p65 2.600000 -x_p66 2.640000 -x_p67 2.680000 -x_p68 2.720000 -x_p69 2.760000 -x_p70 2.800000 -x_p71 2.840000 -x_p72 2.880000 -x_p73 2.920000 -x_p74 2.960000 -x_p75 3.000000 -x_p76 3.040000 -x_p77 3.080000 -x_p78 3.120000 -x_p79 3.160000 -x_p80 3.200000 -x_p81 3.240000 -x_p82 3.280000 -x_p83 3.320000 -x_p84 3.360000 -x_p85 3.400000 -x_p86 3.440000 -x_p87 3.480000 -x_p88 3.520000 -x_p89 3.560000 -x_p90 3.600000 -x_p91 3.640000 -x_p92 3.680000 -x_p93 3.720000 -x_p94 3.760000 -x_p95 3.800000 -x_p96 3.840000 -x_p97 3.880000 -x_p98 3.920000 -x_p99 3.960000 -x_p100 4 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 6 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.050000 -x_p02 0.100000 -x_p03 0.150000 -x_p04 0.200000 -x_p05 0.250000 -x_p06 0.300000 -x_p07 0.350000 -x_p08 0.400000 -x_p09 0.450000 -x_p10 0.500000 -x_p11 0.550000 -x_p12 0.600000 -x_p13 0.650000 -x_p14 0.700000 -x_p15 0.750000 -x_p16 0.800000 -x_p17 0.850000 -x_p18 0.900000 -x_p19 0.950000 -x_p20 1.000000 -x_p21 1.050000 -x_p22 1.100000 -x_p23 1.150000 -x_p24 1.200000 -x_p25 1.250000 -x_p26 1.300000 -x_p27 1.350000 -x_p28 1.400000 -x_p29 1.450000 -x_p30 1.500000 -x_p31 1.550000 -x_p32 1.600000 -x_p33 1.650000 -x_p34 1.700000 -x_p35 1.750000 -x_p36 1.800000 -x_p37 1.850000 -x_p38 1.900000 -x_p39 1.950000 -x_p40 2.000000 -x_p41 2.050000 -x_p42 2.100000 -x_p43 2.150000 -x_p44 2.200000 -x_p45 2.250000 -x_p46 2.300000 -x_p47 2.350000 -x_p48 2.400000 -x_p49 2.450000 -x_p50 2.500000 -x_p51 2.550000 -x_p52 2.600000 -x_p53 2.650000 -x_p54 2.700000 -x_p55 2.750000 -x_p56 2.800000 -x_p57 2.850000 -x_p58 2.900000 -x_p59 2.950000 -x_p60 3.000000 -x_p61 3.050000 -x_p62 3.100000 -x_p63 3.150000 -x_p64 3.200000 -x_p65 3.250000 -x_p66 3.300000 -x_p67 3.350000 -x_p68 3.400000 -x_p69 3.450000 -x_p70 3.500000 -x_p71 3.550000 -x_p72 3.600000 -x_p73 3.650000 -x_p74 3.700000 -x_p75 3.750000 -x_p76 3.800000 -x_p77 3.850000 -x_p78 3.900000 -x_p79 3.950000 -x_p80 4.000000 -x_p81 4.050000 -x_p82 4.100000 -x_p83 4.150000 -x_p84 4.200000 -x_p85 4.250000 -x_p86 4.300000 -x_p87 4.350000 -x_p88 4.400000 -x_p89 4.450000 -x_p90 4.500000 -x_p91 4.550000 -x_p92 4.600000 -x_p93 4.650000 -x_p94 4.700000 -x_p95 4.750000 -x_p96 4.800000 -x_p97 4.850000 -x_p98 4.900000 -x_p99 4.950000 -x_p100 5 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 7 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.060000 -x_p02 0.120000 -x_p03 0.180000 -x_p04 0.240000 -x_p05 0.300000 -x_p06 0.360000 -x_p07 0.420000 -x_p08 0.480000 -x_p09 0.540000 -x_p10 0.600000 -x_p11 0.660000 -x_p12 0.720000 -x_p13 0.780000 -x_p14 0.840000 -x_p15 0.900000 -x_p16 0.960000 -x_p17 1.020000 -x_p18 1.080000 -x_p19 1.140000 -x_p20 1.200000 -x_p21 1.260000 -x_p22 1.320000 -x_p23 1.380000 -x_p24 1.440000 -x_p25 1.500000 -x_p26 1.560000 -x_p27 1.620000 -x_p28 1.680000 -x_p29 1.740000 -x_p30 1.800000 -x_p31 1.860000 -x_p32 1.920000 -x_p33 1.980000 -x_p34 2.040000 -x_p35 2.100000 -x_p36 2.160000 -x_p37 2.220000 -x_p38 2.280000 -x_p39 2.340000 -x_p40 2.400000 -x_p41 2.460000 -x_p42 2.520000 -x_p43 2.580000 -x_p44 2.640000 -x_p45 2.700000 -x_p46 2.760000 -x_p47 2.820000 -x_p48 2.880000 -x_p49 2.940000 -x_p50 3.000000 -x_p51 3.060000 -x_p52 3.120000 -x_p53 3.180000 -x_p54 3.240000 -x_p55 3.300000 -x_p56 3.360000 -x_p57 3.420000 -x_p58 3.480000 -x_p59 3.540000 -x_p60 3.600000 -x_p61 3.660000 -x_p62 3.720000 -x_p63 3.780000 -x_p64 3.840000 -x_p65 3.900000 -x_p66 3.960000 -x_p67 4.020000 -x_p68 4.080000 -x_p69 4.140000 -x_p70 4.200000 -x_p71 4.260000 -x_p72 4.320000 -x_p73 4.380000 -x_p74 4.440000 -x_p75 4.500000 -x_p76 4.560000 -x_p77 4.620000 -x_p78 4.680000 -x_p79 4.740000 -x_p80 4.800000 -x_p81 4.860000 -x_p82 4.920000 -x_p83 4.980000 -x_p84 5.040000 -x_p85 5.100000 -x_p86 5.160000 -x_p87 5.220000 -x_p88 5.280000 -x_p89 5.340000 -x_p90 5.400000 -x_p91 5.460000 -x_p92 5.520000 -x_p93 5.580000 -x_p94 5.640000 -x_p95 5.700000 -x_p96 5.760000 -x_p97 5.820000 -x_p98 5.880000 -x_p99 5.940000 -x_p100 6 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 8 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.070000 -x_p02 0.140000 -x_p03 0.210000 -x_p04 0.280000 -x_p05 0.350000 -x_p06 0.420000 -x_p07 0.490000 -x_p08 0.560000 -x_p09 0.630000 -x_p10 0.700000 -x_p11 0.770000 -x_p12 0.840000 -x_p13 0.910000 -x_p14 0.980000 -x_p15 1.050000 -x_p16 1.120000 -x_p17 1.190000 -x_p18 1.260000 -x_p19 1.330000 -x_p20 1.400000 -x_p21 1.470000 -x_p22 1.540000 -x_p23 1.610000 -x_p24 1.680000 -x_p25 1.750000 -x_p26 1.820000 -x_p27 1.890000 -x_p28 1.960000 -x_p29 2.030000 -x_p30 2.100000 -x_p31 2.170000 -x_p32 2.240000 -x_p33 2.310000 -x_p34 2.380000 -x_p35 2.450000 -x_p36 2.520000 -x_p37 2.590000 -x_p38 2.660000 -x_p39 2.730000 -x_p40 2.800000 -x_p41 2.870000 -x_p42 2.940000 -x_p43 3.010000 -x_p44 3.080000 -x_p45 3.150000 -x_p46 3.220000 -x_p47 3.290000 -x_p48 3.360000 -x_p49 3.430000 -x_p50 3.500000 -x_p51 3.570000 -x_p52 3.640000 -x_p53 3.710000 -x_p54 3.780000 -x_p55 3.850000 -x_p56 3.920000 -x_p57 3.990000 -x_p58 4.060000 -x_p59 4.130000 -x_p60 4.200000 -x_p61 4.270000 -x_p62 4.340000 -x_p63 4.410000 -x_p64 4.480000 -x_p65 4.550000 -x_p66 4.620000 -x_p67 4.690000 -x_p68 4.760000 -x_p69 4.830000 -x_p70 4.900000 -x_p71 4.970000 -x_p72 5.040000 -x_p73 5.110000 -x_p74 5.180000 -x_p75 5.250000 -x_p76 5.320000 -x_p77 5.390000 -x_p78 5.460000 -x_p79 5.530000 -x_p80 5.600000 -x_p81 5.670000 -x_p82 5.740000 -x_p83 5.810000 -x_p84 5.880000 -x_p85 5.950000 -x_p86 6.020000 -x_p87 6.090000 -x_p88 6.160000 -x_p89 6.230000 -x_p90 6.300000 -x_p91 6.370000 -x_p92 6.440000 -x_p93 6.510000 -x_p94 6.580000 -x_p95 6.650000 -x_p96 6.720000 -x_p97 6.790000 -x_p98 6.860000 -x_p99 6.930000 -x_p100 7 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 9 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.080000 -x_p02 0.160000 -x_p03 0.240000 -x_p04 0.320000 -x_p05 0.400000 -x_p06 0.480000 -x_p07 0.560000 -x_p08 0.640000 -x_p09 0.720000 -x_p10 0.800000 -x_p11 0.880000 -x_p12 0.960000 -x_p13 1.040000 -x_p14 1.120000 -x_p15 1.200000 -x_p16 1.280000 -x_p17 1.360000 -x_p18 1.440000 -x_p19 1.520000 -x_p20 1.600000 -x_p21 1.680000 -x_p22 1.760000 -x_p23 1.840000 -x_p24 1.920000 -x_p25 2.000000 -x_p26 2.080000 -x_p27 2.160000 -x_p28 2.240000 -x_p29 2.320000 -x_p30 2.400000 -x_p31 2.480000 -x_p32 2.560000 -x_p33 2.640000 -x_p34 2.720000 -x_p35 2.800000 -x_p36 2.880000 -x_p37 2.960000 -x_p38 3.040000 -x_p39 3.120000 -x_p40 3.200000 -x_p41 3.280000 -x_p42 3.360000 -x_p43 3.440000 -x_p44 3.520000 -x_p45 3.600000 -x_p46 3.680000 -x_p47 3.760000 -x_p48 3.840000 -x_p49 3.920000 -x_p50 4.000000 -x_p51 4.080000 -x_p52 4.160000 -x_p53 4.240000 -x_p54 4.320000 -x_p55 4.400000 -x_p56 4.480000 -x_p57 4.560000 -x_p58 4.640000 -x_p59 4.720000 -x_p60 4.800000 -x_p61 4.880000 -x_p62 4.960000 -x_p63 5.040000 -x_p64 5.120000 -x_p65 5.200000 -x_p66 5.280000 -x_p67 5.360000 -x_p68 5.440000 -x_p69 5.520000 -x_p70 5.600000 -x_p71 5.680000 -x_p72 5.760000 -x_p73 5.840000 -x_p74 5.920000 -x_p75 6.000000 -x_p76 6.080000 -x_p77 6.160000 -x_p78 6.240000 -x_p79 6.320000 -x_p80 6.400000 -x_p81 6.480000 -x_p82 6.560000 -x_p83 6.640000 -x_p84 6.720000 -x_p85 6.800000 -x_p86 6.880000 -x_p87 6.960000 -x_p88 7.040000 -x_p89 7.120000 -x_p90 7.200000 -x_p91 7.280000 -x_p92 7.360000 -x_p93 7.440000 -x_p94 7.520000 -x_p95 7.600000 -x_p96 7.680000 -x_p97 7.760000 -x_p98 7.840000 -x_p99 7.920000 -x_p100 8 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 10 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.090000 -x_p02 0.180000 -x_p03 0.270000 -x_p04 0.360000 -x_p05 0.450000 -x_p06 0.540000 -x_p07 0.630000 -x_p08 0.720000 -x_p09 0.810000 -x_p10 0.900000 -x_p11 0.990000 -x_p12 1.080000 -x_p13 1.170000 -x_p14 1.260000 -x_p15 1.350000 -x_p16 1.440000 -x_p17 1.530000 -x_p18 1.620000 -x_p19 1.710000 -x_p20 1.800000 -x_p21 1.890000 -x_p22 1.980000 -x_p23 2.070000 -x_p24 2.160000 -x_p25 2.250000 -x_p26 2.340000 -x_p27 2.430000 -x_p28 2.520000 -x_p29 2.610000 -x_p30 2.700000 -x_p31 2.790000 -x_p32 2.880000 -x_p33 2.970000 -x_p34 3.060000 -x_p35 3.150000 -x_p36 3.240000 -x_p37 3.330000 -x_p38 3.420000 -x_p39 3.510000 -x_p40 3.600000 -x_p41 3.690000 -x_p42 3.780000 -x_p43 3.870000 -x_p44 3.960000 -x_p45 4.050000 -x_p46 4.140000 -x_p47 4.230000 -x_p48 4.320000 -x_p49 4.410000 -x_p50 4.500000 -x_p51 4.590000 -x_p52 4.680000 -x_p53 4.770000 -x_p54 4.860000 -x_p55 4.950000 -x_p56 5.040000 -x_p57 5.130000 -x_p58 5.220000 -x_p59 5.310000 -x_p60 5.400000 -x_p61 5.490000 -x_p62 5.580000 -x_p63 5.670000 -x_p64 5.760000 -x_p65 5.850000 -x_p66 5.940000 -x_p67 6.030000 -x_p68 6.120000 -x_p69 6.210000 -x_p70 6.300000 -x_p71 6.390000 -x_p72 6.480000 -x_p73 6.570000 -x_p74 6.660000 -x_p75 6.750000 -x_p76 6.840000 -x_p77 6.930000 -x_p78 7.020000 -x_p79 7.110000 -x_p80 7.200000 -x_p81 7.290000 -x_p82 7.380000 -x_p83 7.470000 -x_p84 7.560000 -x_p85 7.650000 -x_p86 7.740000 -x_p87 7.830000 -x_p88 7.920000 -x_p89 8.010000 -x_p90 8.100000 -x_p91 8.190000 -x_p92 8.280000 -x_p93 8.370000 -x_p94 8.460000 -x_p95 8.550000 -x_p96 8.640000 -x_p97 8.730000 -x_p98 8.820000 -x_p99 8.910000 -x_p100 9 - -mlr --from ./reg_test/input/x0to10.dat --oxtab head -n 11 then stats1 -i -f x -a p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39,p40,p41,p42,p43,p44,p45,p46,p47,p48,p49,p50,p51,p52,p53,p54,p55,p56,p57,p58,p59,p60,p61,p62,p63,p64,p65,p66,p67,p68,p69,p70,p71,p72,p73,p74,p75,p76,p77,p78,p79,p80,p81,p82,p83,p84,p85,p86,p87,p88,p89,p90,p91,p92,p93,p94,p95,p96,p97,p98,p99,p100 -x_p00 0.000000 -x_p01 0.100000 -x_p02 0.200000 -x_p03 0.300000 -x_p04 0.400000 -x_p05 0.500000 -x_p06 0.600000 -x_p07 0.700000 -x_p08 0.800000 -x_p09 0.900000 -x_p10 1.000000 -x_p11 1.100000 -x_p12 1.200000 -x_p13 1.300000 -x_p14 1.400000 -x_p15 1.500000 -x_p16 1.600000 -x_p17 1.700000 -x_p18 1.800000 -x_p19 1.900000 -x_p20 2.000000 -x_p21 2.100000 -x_p22 2.200000 -x_p23 2.300000 -x_p24 2.400000 -x_p25 2.500000 -x_p26 2.600000 -x_p27 2.700000 -x_p28 2.800000 -x_p29 2.900000 -x_p30 3.000000 -x_p31 3.100000 -x_p32 3.200000 -x_p33 3.300000 -x_p34 3.400000 -x_p35 3.500000 -x_p36 3.600000 -x_p37 3.700000 -x_p38 3.800000 -x_p39 3.900000 -x_p40 4.000000 -x_p41 4.100000 -x_p42 4.200000 -x_p43 4.300000 -x_p44 4.400000 -x_p45 4.500000 -x_p46 4.600000 -x_p47 4.700000 -x_p48 4.800000 -x_p49 4.900000 -x_p50 5.000000 -x_p51 5.100000 -x_p52 5.200000 -x_p53 5.300000 -x_p54 5.400000 -x_p55 5.500000 -x_p56 5.600000 -x_p57 5.700000 -x_p58 5.800000 -x_p59 5.900000 -x_p60 6.000000 -x_p61 6.100000 -x_p62 6.200000 -x_p63 6.300000 -x_p64 6.400000 -x_p65 6.500000 -x_p66 6.600000 -x_p67 6.700000 -x_p68 6.800000 -x_p69 6.900000 -x_p70 7.000000 -x_p71 7.100000 -x_p72 7.200000 -x_p73 7.300000 -x_p74 7.400000 -x_p75 7.500000 -x_p76 7.600000 -x_p77 7.700000 -x_p78 7.800000 -x_p79 7.900000 -x_p80 8.000000 -x_p81 8.100000 -x_p82 8.200000 -x_p83 8.300000 -x_p84 8.400000 -x_p85 8.500000 -x_p86 8.600000 -x_p87 8.700000 -x_p88 8.800000 -x_p89 8.900000 -x_p90 9.000000 -x_p91 9.100000 -x_p92 9.200000 -x_p93 9.300000 -x_p94 9.400000 -x_p95 9.500000 -x_p96 9.600000 -x_p97 9.700000 -x_p98 9.800000 -x_p99 9.900000 -x_p100 10 - - -================================================================ -IN-PLACE PROCESSING - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr -I --opprint head -n 2 /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr -I --opprint head -n 2 -mlr: -I option (in-place operation) requires input files. - -mlr -I --opprint -n head -n 2 /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 -mlr: -I option (in-place operation) requires input files. - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr -I --opprint rename a,AYE,b,BEE /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp1 -AYE BEE i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/abixy.temp2 -AYE BEE i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - - -================================================================ -DSL OPERATOR ASSOCIATIVITY - -mlr put -v $x = 1 || 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 || 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^^ 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^^ 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^^", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^^", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 && 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 && 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 == 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 == 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="==", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="==", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 != 2 != 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 != 2 != 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="!=", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="!=", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 =~ 2 =~ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="=~", type=OPERATOR: - text="=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="=~", type=OPERATOR: - text="=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 =~ 2 =~ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 !=~ 2 !=~ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=~", type=OPERATOR: - text="!=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=~", type=OPERATOR: - text="!=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 !=~ 2 !=~ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="!=~", type=OPERATOR: - text="!=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="!=~", type=OPERATOR: - text="!=~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 == 2 != 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!=", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 == 2 != 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="!=", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="!=", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 != 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 != 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="==", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="==", type=OPERATOR: - text="!=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 < 2 < 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 < 2 < 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 <= 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 <= 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<=", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<=", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 > 2 > 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">", type=OPERATOR: - text=">", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">", type=OPERATOR: - text=">", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 > 2 > 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text=">", type=OPERATOR: - text=">", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text=">", type=OPERATOR: - text=">", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 >= 2 >= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">=", type=OPERATOR: - text=">=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">=", type=OPERATOR: - text=">=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 >= 2 >= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text=">=", type=OPERATOR: - text=">=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text=">=", type=OPERATOR: - text=">=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 < 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 < 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<=", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<=", type=OPERATOR: - text="<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 <= 2 < 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 <= 2 < 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^ 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^ 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^ 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^ 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^ 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^ 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 << 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<<", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<<", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 << 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<<", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<<", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 >> 2 >> 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">>", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">>", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 >> 2 >> 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text=">>", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text=">>", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 << 2 >> 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">>", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=">>", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 << 2 >> 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text=">>", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text=">>", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 >> 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<<", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<<", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 >> 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<<", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<<", type=OPERATOR: - text=">>", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 - 2 - 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 - 2 - 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + 2 - 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + 2 - 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="-", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="-", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 - 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 - 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 . 2 . 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 . 2 . 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 / 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 / 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 // 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 // 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 % 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 % 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 / 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 / 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 / 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 / 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 / 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 / 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 / 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 / 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 // 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 // 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 // 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 // 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 // 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 // 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 // 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 // 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 % 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 % 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 % 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 % 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 % 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 % 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 % 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 % 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="/", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 / 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="/", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="/", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="//", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 // 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="//", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="//", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="%", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 % 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="%", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="%", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = ++1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v ++1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = --1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v --1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="-", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = !!1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!", type=OPERATOR: - text="!", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="!", type=OPERATOR: - text="!", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v !!1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="!", type=OPERATOR: - text="!", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="!", type=OPERATOR: - text="!", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = ~~1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="~", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="~", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v ~~1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="~", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="~", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ? 2 : 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ? 2 : 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ? 2 ? 3 : 4 : 5 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ? 2 ? 3 : 4 : 5 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ? 2 : 3 ? 4 : 5 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ? 2 : 3 ? 4 : 5 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="? :", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="? :", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="5", type=NUMERIC_LITERAL. - - - -================================================================ -DSL OPERATOR PRECEDENCE - -mlr put -v $x = 1 || 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 || 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 || 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 || 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^^ 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^^ 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^^ 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^^ 2 && 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 && 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 && 2 || 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 && 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 && 2 ^^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^^", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^^", type=OPERATOR: - text="&&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 == 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<=", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<=", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 == 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<=", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<=", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 <= 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="==", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 <= 2 == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="==", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="==", type=OPERATOR: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 <= 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="|", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="|", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 <= 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="|", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<=", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="|", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="<=", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 <= 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="<=", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="<=", type=OPERATOR: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="^", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^ 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^ 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ^ 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ^ 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 ^ 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="^", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<<", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<<", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 << 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<<", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="<<", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 << 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 << 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&", type=OPERATOR: - text="<<", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + (2 * 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + (2 * 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * (2 + 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * (2 + 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 + 2) * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 + 2) * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 * 2) + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 * 2) + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + (2 ** 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + (2 ** 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** (2 + 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** (2 + 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 + 2) ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 + 2) ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="**", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="**", type=OPERATOR: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 ** 2) + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 ** 2) + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * (2 ** 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * (2 ** 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="**", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 ** (2 * 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 ** (2 * 3) /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 * 2) ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="**", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 * 2) ** 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="**", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="**", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = (1 ** 2) * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v (1 ** 2) * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="*", type=OPERATOR: - text="**", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = -1 + 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v -1 + 2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = -1 * 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v -1 * 2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + -2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + -2 * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * -2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * -2 + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 + 2 * -3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 + 2 * -3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="*", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 * 2 + -3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 * 2 + -3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="+", type=OPERATOR: - text="*", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="-", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = ~1 | 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v ~1 | 2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = ~1 & 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v ~1 & 2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | ~2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | ~2 & 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & ~2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & ~2 | 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 | 2 & ~3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 | 2 & ~3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="&", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = 1 & 2 | ~3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1 & 2 | ~3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="|", type=OPERATOR: - text="&", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="~", type=OPERATOR: - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = $a==1 && $b == 1 && $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v $a==1 && $b == 1 && $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = $a==1 || $b == 1 && $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v $a==1 || $b == 1 && $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = $a==1 || $b == 1 || $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v $a==1 || $b == 1 || $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = $a==1 && $b == 1 || $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr filter -v $a==1 && $b == 1 || $c == 1 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="&&", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $x = $a==1 ? $b == 2 : $c == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v $a==1 ? $b == 2 : $c == 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="a", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="b", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="==", type=OPERATOR: - text="c", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $x = true /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="true", type=BOOLEAN_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="true", type=BOOLEAN_LITERAL. - - -mlr filter -v true /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="true", type=BOOLEAN_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="true", type=BOOLEAN_LITERAL. - - -mlr put -v true || 1==0; $x = 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v true || 1==0 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - - -mlr put -v 1==0 || false; $x = 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v 1==0 || false /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="false", type=BOOLEAN_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="false", type=BOOLEAN_LITERAL. - - -mlr put -v true && false; $x = 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v true && false /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - - -mlr put -v true && false && true; $x = 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="true", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="true", type=BOOLEAN_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr filter -v true && false && true /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="true", type=BOOLEAN_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="&&", type=OPERATOR: - text="&&", type=OPERATOR: - text="true", type=BOOLEAN_LITERAL. - text="false", type=BOOLEAN_LITERAL. - text="true", type=BOOLEAN_LITERAL. - - -mlr put -v $y += $x + 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $y += $x * 3 /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="*", type=OPERATOR: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="*", type=OPERATOR: - text="x", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - - -mlr put -v $y ||= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="||", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="||", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y ^^= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="^^", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y &&= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="&&", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y |= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="|", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="|", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y ^= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="^", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="^", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y &= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="&", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="&", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y <<= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="<<", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="<<", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y >>= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text=">>", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text=">>", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y += $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="+", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y -= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="-", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="-", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y .= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text=".", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text=".", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y *= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="*", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="*", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y /= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="/", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="/", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y //= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="//", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="//", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y %= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="%", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="%", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - -mlr put -v $y **= $x /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="**", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="**", type=OPERATOR: - text="y", type=FIELD_NAME. - text="x", type=FIELD_NAME. - - - -================================================================ -DSL COMMENTS - -mlr --from ./reg_test/input/abixy put - $s = 1; - #$t = 2; - $u = 3; - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,s=1,u=3 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,s=1,u=3 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,s=1,u=3 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,s=1,u=3 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,s=1,u=3 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,s=1,u=3 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,s=1,u=3 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,s=1,u=3 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,s=1,u=3 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,s=1,u=3 - -mlr --from ./reg_test/input/abixy filter - NR == 1 || - #NR == 2 || - NR == 3 - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -mlr --from ./reg_test/input/abixy put - $s = "here is a pound#sign"; # but this is a comment - #$t = 2; - $u = 3; - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,s=here is a pound#sign,u=3 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,s=here is a pound#sign,u=3 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,s=here is a pound#sign,u=3 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,s=here is a pound#sign,u=3 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,s=here is a pound#sign,u=3 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,s=here is a pound#sign,u=3 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,s=here is a pound#sign,u=3 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,s=here is a pound#sign,u=3 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,s=here is a pound#sign,u=3 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,s=here is a pound#sign,u=3 - - -================================================================ -DSL EMPTY STATEMENTS - -mlr -n put -v -RAW AST: - -AST ROOT: -(null) - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n filter -v -RAW AST: - -AST ROOT: -(null) -mlr: filter statement must not be empty. - -mlr -n put -v begin {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {;;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {@x=1;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {;@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {@x=1;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v begin {@x=1;;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v true {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - - -mlr -n put -v true {;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - - -mlr -n put -v true {;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - - -mlr -n put -v true {;;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - - -mlr -n put -v true {@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr -n put -v true {@x=1;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr -n put -v true {;@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr -n put -v true {@x=1;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - - -mlr -n put -v true {@x=1;;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - - -mlr -n put -v end {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {;;;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {@x=1;} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {;@x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {@x=1;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr -n put -v end {@x=1;;@y=2} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="y", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - - -================================================================ -DSL CONTEXT-SPECIFIC VALIDATION - - ----------------------------------------------------------------- non-top-level begin/end -mlr put -v begin{begin{@x=1}} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. -mlr: begin statements are only valid at top level. - -mlr put -v true{begin{@x=1}} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. -mlr: begin statements are only valid at top level. - -mlr put -v end{end{@x=1}} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. -mlr: end statements are only valid at top level. - -mlr put -v true{end{@x=1}} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. -mlr: end statements are only valid at top level. - - ----------------------------------------------------------------- srecs in begin/end -mlr put -v begin{$x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. -mlr: assignments to $-variables are not valid within begin or end blocks. - -mlr put -v begin{@x=$y} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="y", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="y", type=FIELD_NAME. -mlr: statements involving $-variables are not valid within begin or end blocks. - -mlr put -v end{$x=1} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. -mlr: assignments to $-variables are not valid within begin or end blocks. - -mlr put -v end{@x=$y} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="y", type=FIELD_NAME. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="y", type=FIELD_NAME. -mlr: statements involving $-variables are not valid within begin or end blocks. - -mlr put -v begin{@v=$*} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. -mlr: assignments from $-variables are not valid within begin or end blocks. - -mlr put -v end{$*=@v} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. -mlr: assignments to $-variables are not valid within begin or end blocks. - -mlr put -v begin{unset $x} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="x", type=FIELD_NAME. -mlr: unset of $-variables is not valid within begin or end blocks. - -mlr put -v end{unset $x} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="x", type=FIELD_NAME. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="x", type=FIELD_NAME. -mlr: unset of $-variables is not valid within begin or end blocks. - -mlr put -v begin{unset $*} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="$*", type=FULL_SREC. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="$*", type=FULL_SREC. -mlr: unset of $-variables is not valid within begin or end blocks. - -mlr put -v end{unset $*} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="$*", type=FULL_SREC. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="$*", type=FULL_SREC. -mlr: unset of $-variables is not valid within begin or end blocks. - - ----------------------------------------------------------------- break/continue outside loop -mlr put -v break -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="break", type=BREAK. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="break", type=BREAK. -mlr: break statements are only valid within for, while, or do-while. - -mlr put -v continue -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="continue", type=CONTINUE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="continue", type=CONTINUE. -mlr: break statements are only valid within for, while, or do-while. - - ----------------------------------------------------------------- oosvars etc. in mlr filter -mlr filter -v break -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="break", type=BREAK. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="break", type=BREAK. -mlr: filter expressions must end in a final boolean statement. - -mlr filter -v continue -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="continue", type=CONTINUE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="continue", type=CONTINUE. -mlr: filter expressions must end in a final boolean statement. - - ----------------------------------------------------------------- expanded filter -mlr --from ./reg_test/input/abixy filter - begin { - @avoid = 3 - } - NR != @avoid - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy filter -x - begin { - @avoid = 3 - } - NR != @avoid - -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -mlr --from ./reg_test/input/abixy filter - func f(n) { - return n - 1 - } - f(NR) == 5 - -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - -mlr --from ./reg_test/input/abixy filter - subr s(n) { - print "NR is ".n - } - call s(NR); - false - -NR is 1 -NR is 2 -NR is 3 -NR is 4 -NR is 5 -NR is 6 -NR is 7 -NR is 8 -NR is 9 -NR is 10 - -mlr --from ./reg_test/input/abixy filter - int a = 5; - int b = 7; - a <= NR && NR <= b - -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -mlr --from ./reg_test/input/abixy filter filter false -mlr filter: expressions must not also contain the "filter" keyword. - -mlr --from ./reg_test/input/abixy filter filter false; true -mlr filter: expressions must not also contain the "filter" keyword. - - -================================================================ -DSL FUNCTIONAL TESTS - -mlr filter $x>.3 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter $x>.3; ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter $x>0.3 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter $x>0.3 && $y>0.3 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter $x>0.3 || $y>0.3 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter NR>=4 && NR <= 7 ./reg_test/input/abixy -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -mlr filter -x $x>.3 ./reg_test/input/abixy -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr filter -x $x>0.3 ./reg_test/input/abixy -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr filter -x $x>0.3 && $y>0.3 ./reg_test/input/abixy -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -mlr filter -x $x>0.3 || $y>0.3 ./reg_test/input/abixy - -mlr filter -x NR>=4 && NR <= 7 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr filter $nosuchfield>.3 ./reg_test/input/abixy - -mlr put $x2 = $x**2 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x2=0.120263 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x2=0.575595 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x2=0.041863 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x2=0.145465 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,x2=0.328660 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x2=0.277862 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,x2=0.374280 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,x2=0.358267 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x2=0.000989 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x2=0.252633 - -mlr put $x2 = $x**2; ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,x2=0.120263 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,x2=0.575595 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,x2=0.041863 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,x2=0.145465 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,x2=0.328660 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,x2=0.277862 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,x2=0.374280 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,x2=0.358267 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,x2=0.000989 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,x2=0.252633 - -mlr put $z = -0.024*$x+0.13 ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,z=0.121677 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.111792 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,z=0.125090 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,z=0.120846 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.116241 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,z=0.117349 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,z=0.115317 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,z=0.115635 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,z=0.129245 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,z=0.117937 - -mlr put $c = $a . $b ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=panpan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=ekspan -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=wyewye -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=ekswye -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=wyepan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=zeepan -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=ekszee -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=zeewye -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=hatwye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=panwye - -mlr put $ii = $i + $i ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ii=2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ii=4 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ii=6 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ii=8 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ii=10 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,ii=12 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,ii=14 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,ii=16 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,ii=18 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,ii=20 - -mlr put $emptytest = $i + $nosuch ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,emptytest=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,emptytest=2 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,emptytest=3 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,emptytest=4 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,emptytest=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,emptytest=6 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,emptytest=7 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,emptytest=8 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,emptytest=9 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,emptytest=10 - -mlr --opprint put $nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM ./reg_test/input/abixy ./reg_test/input/abixy -a b i x y nr fnr nf filenum -pan pan 1 0.3467901443380824 0.7268028627434533 1 1 7 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 2 7 1 -wye wye 3 0.20460330576630303 0.33831852551664776 3 3 7 1 -eks wye 4 0.38139939387114097 0.13418874328430463 4 4 7 1 -wye pan 5 0.5732889198020006 0.8636244699032729 5 5 7 1 -zee pan 6 0.5271261600918548 0.49322128674835697 6 6 7 1 -eks zee 7 0.6117840605678454 0.1878849191181694 7 7 7 1 -zee wye 8 0.5985540091064224 0.976181385699006 8 8 7 1 -hat wye 9 0.03144187646093577 0.7495507603507059 9 9 7 1 -pan wye 10 0.5026260055412137 0.9526183602969864 10 10 7 1 -pan pan 1 0.3467901443380824 0.7268028627434533 11 1 7 2 -eks pan 2 0.7586799647899636 0.5221511083334797 12 2 7 2 -wye wye 3 0.20460330576630303 0.33831852551664776 13 3 7 2 -eks wye 4 0.38139939387114097 0.13418874328430463 14 4 7 2 -wye pan 5 0.5732889198020006 0.8636244699032729 15 5 7 2 -zee pan 6 0.5271261600918548 0.49322128674835697 16 6 7 2 -eks zee 7 0.6117840605678454 0.1878849191181694 17 7 7 2 -zee wye 8 0.5985540091064224 0.976181385699006 18 8 7 2 -hat wye 9 0.03144187646093577 0.7495507603507059 19 9 7 2 -pan wye 10 0.5026260055412137 0.9526183602969864 20 10 7 2 - -mlr --opprint put $y=madd($x,10,37) then put $z=msub($x,10,37) ./reg_test/input/modarith.dat -x y z --37 10 27 --36 11 28 --35 12 29 --34 13 30 --33 14 31 --32 15 32 --31 16 33 --30 17 34 --29 18 35 --28 19 36 --27 20 0 --26 21 1 --25 22 2 --24 23 3 --23 24 4 --22 25 5 --21 26 6 --20 27 7 --19 28 8 --18 29 9 --17 30 10 --16 31 11 --15 32 12 --14 33 13 --13 34 14 --12 35 15 --11 36 16 --10 0 17 --9 1 18 --8 2 19 --7 3 20 --6 4 21 --5 5 22 --4 6 23 --3 7 24 --2 8 25 --1 9 26 -0 10 27 -1 11 28 -2 12 29 -3 13 30 -4 14 31 -5 15 32 -6 16 33 -7 17 34 -8 18 35 -9 19 36 -10 20 0 -11 21 1 -12 22 2 -13 23 3 -14 24 4 -15 25 5 -16 26 6 -17 27 7 -18 28 8 -19 29 9 -20 30 10 -21 31 11 -22 32 12 -23 33 13 -24 34 14 -25 35 15 -26 36 16 -27 0 17 -28 1 18 -29 2 19 -30 3 20 -31 4 21 -32 5 22 -33 6 23 -34 7 24 -35 8 25 -36 9 26 -37 10 27 -38 11 28 -39 12 29 -40 13 30 -41 14 31 -42 15 32 -43 16 33 -44 17 34 -45 18 35 -46 19 36 -47 20 0 -48 21 1 -49 22 2 -50 23 3 -51 24 4 -52 25 5 -53 26 6 -54 27 7 -55 28 8 -56 29 9 -57 30 10 -58 31 11 -59 32 12 -60 33 13 -61 34 14 -62 35 15 -63 36 16 -64 0 17 -65 1 18 -66 2 19 -67 3 20 -68 4 21 -69 5 22 -70 6 23 -71 7 24 -72 8 25 -73 9 26 - -mlr --opprint put $y=mexp($x,35,37) then put $z=mmul($x,$y,37) ./reg_test/input/modarith.dat -x y z --37 0 0 --36 1 1 --35 19 1 --34 25 1 --33 28 1 --32 15 1 --31 31 1 --30 16 1 --29 14 1 --28 33 1 --27 26 1 --26 27 1 --25 34 1 --24 20 1 --23 8 1 --22 5 1 --21 7 1 --20 24 1 --19 35 1 --18 2 1 --17 13 1 --16 30 1 --15 32 1 --14 29 1 --13 17 1 --12 3 1 --11 10 1 --10 11 1 --9 4 1 --8 23 1 --7 21 1 --6 6 1 --5 22 1 --4 9 1 --3 12 1 --2 18 1 --1 36 1 -0 0 0 -1 1 1 -2 19 1 -3 25 1 -4 28 1 -5 15 1 -6 31 1 -7 16 1 -8 14 1 -9 33 1 -10 26 1 -11 27 1 -12 34 1 -13 20 1 -14 8 1 -15 5 1 -16 7 1 -17 24 1 -18 35 1 -19 2 1 -20 13 1 -21 30 1 -22 32 1 -23 29 1 -24 17 1 -25 3 1 -26 10 1 -27 11 1 -28 4 1 -29 23 1 -30 21 1 -31 6 1 -32 22 1 -33 9 1 -34 12 1 -35 18 1 -36 36 1 -37 0 0 -38 1 1 -39 19 1 -40 25 1 -41 28 1 -42 15 1 -43 31 1 -44 16 1 -45 14 1 -46 33 1 -47 26 1 -48 27 1 -49 34 1 -50 20 1 -51 8 1 -52 5 1 -53 7 1 -54 24 1 -55 35 1 -56 2 1 -57 13 1 -58 30 1 -59 32 1 -60 29 1 -61 17 1 -62 3 1 -63 10 1 -64 11 1 -65 4 1 -66 23 1 -67 21 1 -68 6 1 -69 22 1 -70 9 1 -71 12 1 -72 18 1 -73 36 1 - -mlr put $z=min($x, $y) ./reg_test/input/minmax.dkvp -x=1,y=2,z=1 -x=1,y=,z=1 -x=,y=,z= -x=,y=2,z=2 -x=3,y=2,z=2 -x=3,y=,z=3 -x=,y=,z= -x=,y=2,z=2 - -mlr put $z=max($x, $y) ./reg_test/input/minmax.dkvp -x=1,y=2,z=2 -x=1,y=,z=1 -x=,y=,z= -x=,y=2,z=2 -x=3,y=2,z=3 -x=3,y=,z=3 -x=,y=,z= -x=,y=2,z=2 - -mlr put $o=min() -x=1,y=2,z=3,o= - -mlr put $o=max() -x=1,y=2,z=3,o= - -mlr put $o=min($x) -x=1,y=2,z=3,o=1 - -mlr put $o=max($x) -x=1,y=2,z=3,o=1 - -mlr put $o=min($x,$y) -x=1,y=2,z=3,o=1 - -mlr put $o=max($x,$y) -x=1,y=2,z=3,o=2 - -mlr put $o=min($x,$y,$z) -x=1,y=2,z=3,o=1 - -mlr put $o=max($x,$y,$z) -x=1,y=2,z=3,o=3 - -mlr put $u=min($x,$y);$v=max($x,$y) -x=1,y=b,u=1,v=b - -mlr put $u=min($x,$y);$v=max($x,$y) -x=a,y=2,u=2,v=a - -mlr put $u=min($x,$y);$v=max($x,$y) -x=a,y=b,u=a,v=b - -mlr --icsvlite --oxtab put ${x+y} = ${name.x} + ${name.y}; ${x*y} = ${name.x} * ${name.y} ./reg_test/input/braced.csv -name.x 1 -name.y 2 -z 3 -x+y 3 -x*y 2 - -name.x 4 -name.y 6 -z 5 -x+y 10 -x*y 24 - -mlr --icsvlite --oxtab filter ${name.y} < ${z} ./reg_test/input/braced.csv -name.x 1 -name.y 2 -z 3 - -mlr --opprint put $z = $x < 0.5 ? 0 : 1 ./reg_test/input/abixy -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 0 -eks pan 2 0.7586799647899636 0.5221511083334797 1 -wye wye 3 0.20460330576630303 0.33831852551664776 0 -eks wye 4 0.38139939387114097 0.13418874328430463 0 -wye pan 5 0.5732889198020006 0.8636244699032729 1 -zee pan 6 0.5271261600918548 0.49322128674835697 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1 -zee wye 8 0.5985540091064224 0.976181385699006 1 -hat wye 9 0.03144187646093577 0.7495507603507059 0 -pan wye 10 0.5026260055412137 0.9526183602969864 1 - -mlr --csvlite filter true && true ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter true && false ./reg_test/input/b.csv - -mlr --csvlite filter false && true ./reg_test/input/b.csv - -mlr --csvlite filter false && false ./reg_test/input/b.csv - -mlr --csvlite filter true || true ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter true || false ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter false || true ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter false || false ./reg_test/input/b.csv - -mlr --csvlite filter true ^^ true ./reg_test/input/b.csv - -mlr --csvlite filter true ^^ false ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter false ^^ true ./reg_test/input/b.csv -d,e,f -5,6,7 - -mlr --csvlite filter false ^^ false ./reg_test/input/b.csv - -mlr put $x==2 && $a =~ "....." { $y=4 } ./reg_test/input/short-circuit.dkvp -x=1,a="hello" -x=2,a="there",y=4 -x=3,a="world" - -mlr put $x = ENV["X"]; $y = ENV[$name] ./reg_test/input/env-var.dkvp -name=X,x=97,y=97 -name=Y,x=97,y=98 -x=97,y=6 - -mlr put $x = ENV["X"]; $y = ENV[$name] ./reg_test/input/env-var.dkvp -name=X,x=,y= -name=Y,x=,y= -x=,y=6 - -mlr -n put begin{ENV["HOME"]="foobar"} end{print ENV["HOME"]} -foobar - -mlr put $y = toupper($x) -x=hello,y=HELLO - -mlr put $y = toupper($x) -x=HELLO,y=HELLO - -mlr put $y = toupper($x) -x=,y= - -mlr put $y = toupper($z) -x=hello - -mlr put $y = tolower($x) -x=hello,y=hello - -mlr put $y = tolower($x) -x=HELLO,y=hello - -mlr put $y = tolower($x) -x=,y= - -mlr put $y = tolower($z) -x=hello - -mlr put $y = capitalize($x) -x=hello,y=Hello - -mlr put $y = capitalize($x) -x=HELLO,y=HELLO - -mlr put $y = capitalize($x) -x=,y= - -mlr put $y = capitalize($z) -x=hello - - ----------------------------------------------------------------- LHS value on first record should result in ZYX for process creation -mlr --from ./reg_test/input/abixy put -q ENV["ZYX"]="CBA".NR; print | ENV["indir"]."/env-assign.sh" , "a is " . $a -[ZYX]=[CBA1] a is pan -[ZYX]=[CBA1] a is eks -[ZYX]=[CBA1] a is wye -[ZYX]=[CBA1] a is eks -[ZYX]=[CBA1] a is wye -[ZYX]=[CBA1] a is zee -[ZYX]=[CBA1] a is eks -[ZYX]=[CBA1] a is zee -[ZYX]=[CBA1] a is hat -[ZYX]=[CBA1] a is pan - - -================================================================ -POSITIONAL INDEXING - -mlr --opprint put $NEW = $[[3]] ./reg_test/input/abixy -a b i x y NEW -pan pan 1 0.3467901443380824 0.7268028627434533 i -eks pan 2 0.7586799647899636 0.5221511083334797 i -wye wye 3 0.20460330576630303 0.33831852551664776 i -eks wye 4 0.38139939387114097 0.13418874328430463 i -wye pan 5 0.5732889198020006 0.8636244699032729 i -zee pan 6 0.5271261600918548 0.49322128674835697 i -eks zee 7 0.6117840605678454 0.1878849191181694 i -zee wye 8 0.5985540091064224 0.976181385699006 i -hat wye 9 0.03144187646093577 0.7495507603507059 i -pan wye 10 0.5026260055412137 0.9526183602969864 i - -mlr --opprint put $NEW = $[[[3]]] ./reg_test/input/abixy -a b i x y NEW -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint put $NEW = $[[11]] ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $NEW = $[[[11]]] ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[3]] = "NEW" ./reg_test/input/abixy -a b NEW x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[[3]]] = "NEW" ./reg_test/input/abixy -a b i x y -pan pan NEW 0.3467901443380824 0.7268028627434533 -eks pan NEW 0.7586799647899636 0.5221511083334797 -wye wye NEW 0.20460330576630303 0.33831852551664776 -eks wye NEW 0.38139939387114097 0.13418874328430463 -wye pan NEW 0.5732889198020006 0.8636244699032729 -zee pan NEW 0.5271261600918548 0.49322128674835697 -eks zee NEW 0.6117840605678454 0.1878849191181694 -zee wye NEW 0.5985540091064224 0.976181385699006 -hat wye NEW 0.03144187646093577 0.7495507603507059 -pan wye NEW 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[11]] = "NEW" ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[[11]]] = "NEW" ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[1]] = $[[2]] ./reg_test/input/abixy -b i x y -pan 1 0.3467901443380824 0.7268028627434533 -eks 2 0.7586799647899636 0.5221511083334797 -wye 3 0.20460330576630303 0.33831852551664776 -eks 4 0.38139939387114097 0.13418874328430463 -wye 5 0.5732889198020006 0.8636244699032729 -zee 6 0.5271261600918548 0.49322128674835697 -eks 7 0.6117840605678454 0.1878849191181694 -zee 8 0.5985540091064224 0.976181385699006 -hat 9 0.03144187646093577 0.7495507603507059 -pan 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $a = $[[2]]; unset $["a"] ./reg_test/input/abixy -b i x y a -pan 1 0.3467901443380824 0.7268028627434533 b -pan 2 0.7586799647899636 0.5221511083334797 b -wye 3 0.20460330576630303 0.33831852551664776 b -wye 4 0.38139939387114097 0.13418874328430463 b -pan 5 0.5732889198020006 0.8636244699032729 b -pan 6 0.5271261600918548 0.49322128674835697 b -zee 7 0.6117840605678454 0.1878849191181694 b -wye 8 0.5985540091064224 0.976181385699006 b -wye 9 0.03144187646093577 0.7495507603507059 b -wye 10 0.5026260055412137 0.9526183602969864 b - -mlr --opprint put $[[1]] = $b; unset $[[1]] ./reg_test/input/abixy -b i x y -pan 1 0.3467901443380824 0.7268028627434533 -pan 2 0.7586799647899636 0.5221511083334797 -wye 3 0.20460330576630303 0.33831852551664776 -wye 4 0.38139939387114097 0.13418874328430463 -pan 5 0.5732889198020006 0.8636244699032729 -pan 6 0.5271261600918548 0.49322128674835697 -zee 7 0.6117840605678454 0.1878849191181694 -wye 8 0.5985540091064224 0.976181385699006 -wye 9 0.03144187646093577 0.7495507603507059 -wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put $[[1]] = $[[2]]; unset $["a"] ./reg_test/input/abixy -b i x y -pan 1 0.3467901443380824 0.7268028627434533 -eks 2 0.7586799647899636 0.5221511083334797 -wye 3 0.20460330576630303 0.33831852551664776 -eks 4 0.38139939387114097 0.13418874328430463 -wye 5 0.5732889198020006 0.8636244699032729 -zee 6 0.5271261600918548 0.49322128674835697 -eks 7 0.6117840605678454 0.1878849191181694 -zee 8 0.5985540091064224 0.976181385699006 -hat 9 0.03144187646093577 0.7495507603507059 -pan 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put unset $c ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put unset $c; $c="new" ./reg_test/input/abixy -a b i x y c -pan pan 1 0.3467901443380824 0.7268028627434533 new -eks pan 2 0.7586799647899636 0.5221511083334797 new -wye wye 3 0.20460330576630303 0.33831852551664776 new -eks wye 4 0.38139939387114097 0.13418874328430463 new -wye pan 5 0.5732889198020006 0.8636244699032729 new -zee pan 6 0.5271261600918548 0.49322128674835697 new -eks zee 7 0.6117840605678454 0.1878849191181694 new -zee wye 8 0.5985540091064224 0.976181385699006 new -hat wye 9 0.03144187646093577 0.7495507603507059 new -pan wye 10 0.5026260055412137 0.9526183602969864 new - -mlr --opprint put $c=$a.$b; unset $c; $c="new" ./reg_test/input/abixy -a b i x y c -pan pan 1 0.3467901443380824 0.7268028627434533 new -eks pan 2 0.7586799647899636 0.5221511083334797 new -wye wye 3 0.20460330576630303 0.33831852551664776 new -eks wye 4 0.38139939387114097 0.13418874328430463 new -wye pan 5 0.5732889198020006 0.8636244699032729 new -zee pan 6 0.5271261600918548 0.49322128674835697 new -eks zee 7 0.6117840605678454 0.1878849191181694 new -zee wye 8 0.5985540091064224 0.976181385699006 new -hat wye 9 0.03144187646093577 0.7495507603507059 new -pan wye 10 0.5026260055412137 0.9526183602969864 new - -mlr --opprint put $c=$a.$b; unset $c ./reg_test/input/abixy -a b i x y c -pan pan 1 0.3467901443380824 0.7268028627434533 panpan -eks pan 2 0.7586799647899636 0.5221511083334797 ekspan -wye wye 3 0.20460330576630303 0.33831852551664776 wyewye -eks wye 4 0.38139939387114097 0.13418874328430463 ekswye -wye pan 5 0.5732889198020006 0.8636244699032729 wyepan -zee pan 6 0.5271261600918548 0.49322128674835697 zeepan -eks zee 7 0.6117840605678454 0.1878849191181694 ekszee -zee wye 8 0.5985540091064224 0.976181385699006 zeewye -hat wye 9 0.03144187646093577 0.7495507603507059 hatwye -pan wye 10 0.5026260055412137 0.9526183602969864 panwye - - -================================================================ -IS-PREDICATES - -mlr --opprint put $f=is_absent($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_absent($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_absent($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_absent($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_absent(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put @somesuch=1;$f=is_absent(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_bool($x>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_bool($y>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_bool($z>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_bool($nosuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_bool(@nosuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_bool(@somesuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_boolean($x>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_boolean($y>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_boolean($z>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_boolean($nosuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_boolean(@nosuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_boolean(@somesuch>1) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_empty($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - true -b - - - true - -mlr --opprint put $f=is_empty($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - true -b - 6 - false -b - - - true - -mlr --opprint put $f=is_empty($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_empty($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_empty(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_empty_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put @somesuch=1;$f=is_empty_map(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_float({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_float(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - false -b - 6 - true -b - - - false - -mlr --opprint put $f=is_int($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_int({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_int(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_map($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_map($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_map($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_map($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_map(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put @somesuch=1;$f=is_map(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_nonempty_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_nonempty_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_nonempty_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_nonempty_map(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_empty($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_empty($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - false -b - 6 - true -b - - - false - -mlr --opprint put $f=is_not_empty($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_empty($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_empty(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_empty($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_empty({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put @somesuch=1;$f=is_not_empty(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_not_map(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_not_null($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_null($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - false -b - 6 - true -b - - - false - -mlr --opprint put $f=is_not_null($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_null($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_not_null(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_not_null(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_null($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - true -b - - - true - -mlr --opprint put $f=is_null($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - true -b - 6 - false -b - - - true - -mlr --opprint put $f=is_null($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_null($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_null(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put @somesuch=1;$f=is_null(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_numeric($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - false -b - - - false - -mlr --opprint put $f=is_numeric($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - false -b - 6 - true -b - - - false - -mlr --opprint put $f=is_numeric($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_numeric($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_numeric(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_numeric(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_present($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_present($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_present($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_present($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_present(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_present(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_string($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - true -b - - - true - -mlr --opprint put $f=is_string($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - true -b - 6 - false -b - - - true - -mlr --opprint put $f=is_string($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=is_string($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=is_string(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put @somesuch=1;$f=is_string(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - - -================================================================ -ASSERTION PASS-THROUGHS - -mlr --opprint put $f=asserting_absent($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_absent(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_absent($x) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_absent($y) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_absent($z) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_absent(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put foo=asserting_absent($*) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put foo=asserting_absent({1:2}) ./reg_test/input/nullvals.dkvp -mlr: absent type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - - -b 3 4 - - -b 5 - - - -b - 6 - - -b - - - - - -mlr --opprint put $f=asserting_empty($x) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty($y) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty($nosuch) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty({1:2}) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_empty(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put foo=asserting_empty($*) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put foo=asserting_empty({1:2}) ./reg_test/input/nullvals.dkvp -mlr: empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_empty_map($*) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map($x) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map($y) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map($z) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map($nosuch) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_empty_map({1:2}) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_empty_map(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: empty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_map({}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_map($x) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_map($y) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_map($z) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_map($nosuch) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_map(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_map(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map($*) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_nonempty_map({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $f=asserting_nonempty_map($x) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map($y) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map($z) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map($nosuch) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_nonempty_map({}) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_nonempty_map(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: nonempty_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_not_empty($*) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_not_empty($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_not_empty(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_not_empty({1:2}) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - (error) -b 3 4 - (error) -b 5 - - (error) -b - 6 - (error) -b - - - (error) - -mlr --opprint put $nosuch=asserting_not_empty($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put @somesuch=1;$f=asserting_not_empty(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 1 -b 5 - - 1 -b - 6 - 1 -b - - - 1 - -mlr --opprint put $*=asserting_not_empty($*) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $*=asserting_not_empty({1:2}) ./reg_test/input/nullvals.dkvp -1 -2 -2 -2 -2 -2 - -mlr --opprint put $f=asserting_not_empty($x) ./reg_test/input/nullvals.dkvp -mlr: not_empty type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_empty($y) ./reg_test/input/nullvals.dkvp -mlr: not_empty type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_empty($z) ./reg_test/input/nullvals.dkvp -mlr: not_empty type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_map($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 3 -b 5 - - 5 -b - 6 - - -b - - - - - -mlr --opprint put $f=asserting_not_map($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 2 -b 3 4 - 4 -b 5 - - - -b - 6 - 6 -b - - - - - -mlr --opprint put $f=asserting_not_map($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - - -b 3 4 - - -b 5 - - - -b - 6 - - -b - - - - - -mlr --opprint put $f=asserting_not_map($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_not_map(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put @somesuch=1;$f=asserting_not_map(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 1 -b 5 - - 1 -b - 6 - 1 -b - - - 1 - -mlr --opprint put $f=asserting_not_map($*) ./reg_test/input/nullvals.dkvp -mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_map({1:2}) ./reg_test/input/nullvals.dkvp -mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_map({}) ./reg_test/input/nullvals.dkvp -mlr: not_map type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_not_null(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 1 -b 5 - - 1 -b - 6 - 1 -b - - - 1 - -mlr --opprint put $*=asserting_not_null($*) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $*=asserting_not_null({1:2}) ./reg_test/input/nullvals.dkvp -1 -2 -2 -2 -2 -2 - -mlr --opprint put $f=asserting_not_null($x) ./reg_test/input/nullvals.dkvp -mlr: not_null type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_null($y) ./reg_test/input/nullvals.dkvp -mlr: not_null type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_null($z) ./reg_test/input/nullvals.dkvp -mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_null($nosuch) ./reg_test/input/nullvals.dkvp -mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_not_null(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: not_null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_null($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - - -b 3 4 - - -b 5 - - - -b - 6 - - -b - - - - - -mlr --opprint put $f=asserting_null($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_null(@nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $f=asserting_null($x) ./reg_test/input/nullvals.dkvp -mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_null($y) ./reg_test/input/nullvals.dkvp -mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put @somesuch=1;$f=asserting_null(@somesuch) ./reg_test/input/nullvals.dkvp -mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_null($*) ./reg_test/input/nullvals.dkvp -mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_null({1:2}) ./reg_test/input/nullvals.dkvp -mlr: null type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_numeric($x) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=4 FNR=4 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_numeric($y) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=3 FNR=3 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_numeric($z) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_numeric($*) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_numeric({1:2}) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_numeric($nosuch) ./reg_test/input/nullvals.dkvp -mlr: numeric type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_present($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 3 -b 5 - - 5 -b - 6 - - -b - - - - - -mlr --opprint put $f=asserting_present($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 2 -b 3 4 - 4 -b 5 - - - -b - 6 - 6 -b - - - - - -mlr --opprint put $f=asserting_present($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - - -b 3 4 - - -b 5 - - - -b - 6 - - -b - - - - - -mlr --opprint put @somesuch=1;$f=asserting_present(@somesuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - 1 -b 3 4 - 1 -b 5 - - 1 -b - 6 - 1 -b - - - 1 - -mlr --opprint put $*=asserting_present($*) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint put $*=asserting_present({1:2}) ./reg_test/input/nullvals.dkvp -1 -2 -2 -2 -2 -2 - -mlr --opprint put $f=asserting_present($nosuch) ./reg_test/input/nullvals.dkvp -mlr: present type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_present(@nosuch) ./reg_test/input/nullvals.dkvp -mlr: present type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_string($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - - -b 3 4 - - -b 5 - - - -b - 6 - - -b - - - - - -mlr --opprint put $*=asserting_string($*) ./reg_test/input/nullvals.dkvp -mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $*=asserting_string({1:2}) ./reg_test/input/nullvals.dkvp -mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_string($x) ./reg_test/input/nullvals.dkvp -mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_string($y) ./reg_test/input/nullvals.dkvp -mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=asserting_string($nosuch) ./reg_test/input/nullvals.dkvp -mlr: string type-assertion failed at NR=1 FNR=1 FILENAME=./reg_test/input/nullvals.dkvp - - -================================================================ -DSL NULL/EMPTY HANDLING - -mlr put $z = $s . $s ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=hellohello -x=1,y=,s=,z= -x=,y=,s=hurrah,z=hurrahhurrah - -mlr put $z = $s == "" ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=false -x=1,y=,s=,z=true -x=,y=,s=hurrah,z=false - -mlr put $z = $s == $s ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=true -x=1,y=,s=,z=true -x=,y=,s=hurrah,z=true - -mlr put $z = is_empty($s) ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=false -x=1,y=,s=,z=true -x=,y=,s=hurrah,z=false - -mlr put $z = $x + $y ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=3 -x=1,y=,s=,z= -x=,y=,s=hurrah,z= - -mlr put $z = $y + $y ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=4 -x=1,y=,s=,z= -x=,y=,s=hurrah,z= - -mlr put $z = $x + $nosuch ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=1 -x=1,y=,s=,z=1 -x=,y=,s=hurrah - -mlr put $t = sub($s, "ell", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=hXo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - -mlr put $t = sub($s, "ell", "") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=ho -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - -mlr put $t = sub($nosuch, "ell", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello -x=1,y=,s= -x=,y=,s=hurrah - -mlr put $t = gsub($s, "l", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=heXXo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - -mlr put $t = gsub($s, "l", "") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=heo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - -mlr put $t = gsub($nosuch, "l", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello -x=1,y=,s= -x=,y=,s=hurrah - - ----------------------------------------------------------------- EMIT -mlr put -q @v=1; @nonesuch {emit @v} ./reg_test/input/abixy - -mlr put -q @v=1; @nonesuch==true {emit @v} ./reg_test/input/abixy - -mlr put -q @v=1; $nonesuch {emit @v} ./reg_test/input/abixy - -mlr put -q @v=1; $nonesuch==true {emit @v} ./reg_test/input/abixy - - ----------------------------------------------------------------- PLUS -mlr --ofs tab put begin{}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=5 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=5 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=5 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=5 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=5 st=4 -x=1 y= xy= xt=5 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=5 st=4 -x=1 b= xy=1 xt=5 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=5 xt=5 st=7 -x=1 y= xy= sy= xt=5 st=7 -x= y=2 xy= sy=5 xt= st=7 -x= y= xy= sy= xt= st=7 -a=1 y=2 xy=2 sy=5 xt=4 st=7 -a=1 y= sy= xt=4 st=7 -a= y=2 xy=2 sy=5 xt=4 st=7 -a= y= sy= xt=4 st=7 -x=1 b=2 xy=1 sy=3 xt=5 st=7 -x=1 b= xy=1 sy=3 xt=5 st=7 -x= b=2 sy=3 xt= st=7 -x= b= sy=3 xt= st=7 - - ----------------------------------------------------------------- MINUS -mlr --ofs tab put begin{}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=-1 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=-1 sy=1 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=1 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=1 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=-1 sy=2 xt=-3 st=4 -x=1 y= xy= xt=-3 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=-3 st=4 -x=1 b= xy=1 xt=-3 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=-1 sy=1 xt=-3 st=-1 -x=1 y= xy= sy= xt=-3 st=-1 -x= y=2 xy= sy=1 xt= st=-1 -x= y= xy= sy= xt= st=-1 -a=1 y=2 xy=2 sy=1 xt=4 st=-1 -a=1 y= sy= xt=4 st=-1 -a= y=2 xy=2 sy=1 xt=4 st=-1 -a= y= sy= xt=4 st=-1 -x=1 b=2 xy=1 sy=3 xt=-3 st=-1 -x=1 b= xy=1 sy=3 xt=-3 st=-1 -x= b=2 sy=3 xt= st=-1 -x= b= sy=3 xt= st=-1 - - ----------------------------------------------------------------- TIMES -mlr --ofs tab put begin{}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=2 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=2 sy=6 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=6 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=6 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=6 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=2 sy=2 xt=4 st=4 -x=1 y= xy= xt=4 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=4 st=4 -x=1 b= xy=1 xt=4 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=2 sy=6 xt=4 st=12 -x=1 y= xy= sy= xt=4 st=12 -x= y=2 xy= sy=6 xt= st=12 -x= y= xy= sy= xt= st=12 -a=1 y=2 xy=2 sy=6 xt=4 st=12 -a=1 y= sy= xt=4 st=12 -a= y=2 xy=2 sy=6 xt=4 st=12 -a= y= sy= xt=4 st=12 -x=1 b=2 xy=1 sy=3 xt=4 st=12 -x=1 b= xy=1 sy=3 xt=4 st=12 -x= b=2 sy=3 xt= st=12 -x= b= sy=3 xt= st=12 - - ----------------------------------------------------------------- DIVIDE -mlr --ofs tab put begin{}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0.500000 sy=0 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=0 -x= y= xy= -a=1 y=2 xy=0 sy=0 -a=1 y= -a= y=2 xy=0 sy=0 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0.500000 sy=1.500000 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1.500000 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=0 sy=1.500000 st=3 -a=1 y= sy= st=3 -a= y=2 xy=0 sy=1.500000 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0.500000 sy=0 xt=0.250000 st=0 -x=1 y= xy= xt=0.250000 st=0 -x= y=2 xy= sy=0 xt= st=0 -x= y= xy= xt= st=0 -a=1 y=2 xy=0 sy=0 xt=0 st=0 -a=1 y= xt=0 st=0 -a= y=2 xy=0 sy=0 xt=0 st=0 -a= y= xt=0 st=0 -x=1 b=2 xy=1 xt=0.250000 st=0 -x=1 b= xy=1 xt=0.250000 st=0 -x= b=2 xt= st=0 -x= b= xt= st=0 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0.500000 sy=1.500000 xt=0.250000 st=0.750000 -x=1 y= xy= sy= xt=0.250000 st=0.750000 -x= y=2 xy= sy=1.500000 xt= st=0.750000 -x= y= xy= sy= xt= st=0.750000 -a=1 y=2 xy=0 sy=1.500000 xt=0 st=0.750000 -a=1 y= sy= xt=0 st=0.750000 -a= y=2 xy=0 sy=1.500000 xt=0 st=0.750000 -a= y= sy= xt=0 st=0.750000 -x=1 b=2 xy=1 sy=3 xt=0.250000 st=0.750000 -x=1 b= xy=1 sy=3 xt=0.250000 st=0.750000 -x= b=2 sy=3 xt= st=0.750000 -x= b= sy=3 xt= st=0.750000 - - ----------------------------------------------------------------- INTEGER DIVIDE -mlr --ofs tab put begin{}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=0 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=0 -x= y= xy= -a=1 y=2 xy=0 sy=0 -a=1 y= -a= y=2 xy=0 sy=0 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=1 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=0 sy=1 st=3 -a=1 y= sy= st=3 -a= y=2 xy=0 sy=1 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=0 xt=0 st=0 -x=1 y= xy= xt=0 st=0 -x= y=2 xy= sy=0 xt= st=0 -x= y= xy= xt= st=0 -a=1 y=2 xy=0 sy=0 xt=0 st=0 -a=1 y= xt=0 st=0 -a= y=2 xy=0 sy=0 xt=0 st=0 -a= y= xt=0 st=0 -x=1 b=2 xy=1 xt=0 st=0 -x=1 b= xy=1 xt=0 st=0 -x= b=2 xt= st=0 -x= b= xt= st=0 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=1 xt=0 st=0 -x=1 y= xy= sy= xt=0 st=0 -x= y=2 xy= sy=1 xt= st=0 -x= y= xy= sy= xt= st=0 -a=1 y=2 xy=0 sy=1 xt=0 st=0 -a=1 y= sy= xt=0 st=0 -a= y=2 xy=0 sy=1 xt=0 st=0 -a= y= sy= xt=0 st=0 -x=1 b=2 xy=1 sy=3 xt=0 st=0 -x=1 b= xy=1 sy=3 xt=0 st=0 -x= b=2 sy=3 xt= st=0 -x= b= sy=3 xt= st=0 - - ----------------------------------------------------------------- REMAINDER -mlr --ofs tab put begin{}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=1 sy=0 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=0 -x= y= xy= -a=1 y=2 xy=0 sy=0 -a=1 y= -a= y=2 xy=0 sy=0 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=1 sy=1 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=0 sy=1 st=3 -a=1 y= sy= st=3 -a= y=2 xy=0 sy=1 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=1 sy=0 xt=1 st=0 -x=1 y= xy= xt=1 st=0 -x= y=2 xy= sy=0 xt= st=0 -x= y= xy= xt= st=0 -a=1 y=2 xy=0 sy=0 xt=0 st=0 -a=1 y= xt=0 st=0 -a= y=2 xy=0 sy=0 xt=0 st=0 -a= y= xt=0 st=0 -x=1 b=2 xy=1 xt=1 st=0 -x=1 b= xy=1 xt=1 st=0 -x= b=2 xt= st=0 -x= b= xt= st=0 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=1 sy=1 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1 xt= st=3 -x= y= xy= sy= xt= st=3 -a=1 y=2 xy=0 sy=1 xt=0 st=3 -a=1 y= sy= xt=0 st=3 -a= y=2 xy=0 sy=1 xt=0 st=3 -a= y= sy= xt=0 st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 xt= st=3 -x= b= sy=3 xt= st=3 - - ----------------------------------------------------------------- BITWISE AND -mlr --ofs tab put begin{}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=2 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=2 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=2 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=2 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=2 xt=0 st=4 -x=1 y= xy= xt=0 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=0 st=4 -x=1 b= xy=1 xt=0 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=0 sy=2 xt=0 st=0 -x=1 y= xy= sy= xt=0 st=0 -x= y=2 xy= sy=2 xt= st=0 -x= y= xy= sy= xt= st=0 -a=1 y=2 xy=2 sy=2 xt=4 st=0 -a=1 y= sy= xt=4 st=0 -a= y=2 xy=2 sy=2 xt=4 st=0 -a= y= sy= xt=4 st=0 -x=1 b=2 xy=1 sy=3 xt=0 st=0 -x=1 b= xy=1 sy=3 xt=0 st=0 -x= b=2 sy=3 xt= st=0 -x= b= sy=3 xt= st=0 - - ----------------------------------------------------------------- BITWISE OR -mlr --ofs tab put begin{}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=3 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=3 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=3 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=3 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=5 st=4 -x=1 y= xy= xt=5 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=5 st=4 -x=1 b= xy=1 xt=5 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=3 xt=5 st=7 -x=1 y= xy= sy= xt=5 st=7 -x= y=2 xy= sy=3 xt= st=7 -x= y= xy= sy= xt= st=7 -a=1 y=2 xy=2 sy=3 xt=4 st=7 -a=1 y= sy= xt=4 st=7 -a= y=2 xy=2 sy=3 xt=4 st=7 -a= y= sy= xt=4 st=7 -x=1 b=2 xy=1 sy=3 xt=5 st=7 -x=1 b= xy=1 sy=3 xt=5 st=7 -x= b=2 sy=3 xt= st=7 -x= b= sy=3 xt= st=7 - - ----------------------------------------------------------------- BITWISE XOR -mlr --ofs tab put begin{}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=1 -x=1 y= xy= xt=1 -x= y=2 xy= sy=2 -x= y= xy= -a=1 y=2 xy=2 sy=2 -a=1 y= -a= y=2 xy=2 sy=2 -a= y= -x=1 b=2 xy=1 xt=1 -x=1 b= xy=1 xt=1 -x= b=2 -x= b= - -mlr --ofs tab put begin{@s=3}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=1 xt=1 st=3 -x=1 y= xy= sy= xt=1 st=3 -x= y=2 xy= sy=1 st=3 -x= y= xy= sy= st=3 -a=1 y=2 xy=2 sy=1 st=3 -a=1 y= sy= st=3 -a= y=2 xy=2 sy=1 st=3 -a= y= sy= st=3 -x=1 b=2 xy=1 sy=3 xt=1 st=3 -x=1 b= xy=1 sy=3 xt=1 st=3 -x= b=2 sy=3 st=3 -x= b= sy=3 st=3 - -mlr --ofs tab put begin{@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=2 xt=5 st=4 -x=1 y= xy= xt=5 st=4 -x= y=2 xy= sy=2 xt= st=4 -x= y= xy= xt= st=4 -a=1 y=2 xy=2 sy=2 xt=4 st=4 -a=1 y= xt=4 st=4 -a= y=2 xy=2 sy=2 xt=4 st=4 -a= y= xt=4 st=4 -x=1 b=2 xy=1 xt=5 st=4 -x=1 b= xy=1 xt=5 st=4 -x= b=2 xt= st=4 -x= b= xt= st=4 - -mlr --ofs tab put begin{@s=3;@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t ./reg_test/input/typeof.dkvp -x=1 y=2 xy=3 sy=1 xt=5 st=7 -x=1 y= xy= sy= xt=5 st=7 -x= y=2 xy= sy=1 xt= st=7 -x= y= xy= sy= xt= st=7 -a=1 y=2 xy=2 sy=1 xt=4 st=7 -a=1 y= sy= xt=4 st=7 -a= y=2 xy=2 sy=1 xt=4 st=7 -a= y= sy= xt=4 st=7 -x=1 b=2 xy=1 sy=3 xt=5 st=7 -x=1 b= xy=1 sy=3 xt=5 st=7 -x= b=2 sy=3 xt= st=7 -x= b= sy=3 xt= st=7 - - -================================================================ -DSL TYPE PREDICATES - -mlr --from ./reg_test/input/abixy --opprint put for (k, v in $*) { $[k."_type"] = typeof(v) } -a b i x y a_type b_type i_type x_type y_type -pan pan 1 0.3467901443380824 0.7268028627434533 string string int float float -eks pan 2 0.7586799647899636 0.5221511083334797 string string int float float -wye wye 3 0.20460330576630303 0.33831852551664776 string string int float float -eks wye 4 0.38139939387114097 0.13418874328430463 string string int float float -wye pan 5 0.5732889198020006 0.8636244699032729 string string int float float -zee pan 6 0.5271261600918548 0.49322128674835697 string string int float float -eks zee 7 0.6117840605678454 0.1878849191181694 string string int float float -zee wye 8 0.5985540091064224 0.976181385699006 string string int float float -hat wye 9 0.03144187646093577 0.7495507603507059 string string int float float -pan wye 10 0.5026260055412137 0.9526183602969864 string string int float float - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_float(v)) {@float[NR][k] = v}} end{ emit @float, "NR", "k" } -NR=1,k=x,float=0.346790 -NR=1,k=y,float=0.726803 -NR=2,k=x,float=0.758680 -NR=2,k=y,float=0.522151 -NR=3,k=x,float=0.204603 -NR=3,k=y,float=0.338319 -NR=4,k=x,float=0.381399 -NR=4,k=y,float=0.134189 -NR=5,k=xxx,float=0.573289 -NR=5,k=y,float=0.863624 -NR=6,k=x,float=0.527126 -NR=6,k=y,float=0.493221 -NR=7,k=x,float=0.611784 -NR=7,k=y,float=0.187885 -NR=8,k=x,float=0.598554 -NR=8,k=yyy,float=0.976181 -NR=9,k=x,float=0.031442 -NR=9,k=y,float=0.749551 -NR=10,k=x,float=0.502626 -NR=10,k=y,float=0.952618 - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_int(v)) {@int[NR][k] = v}} end{ emit @int, "NR", "k" } -NR=1,k=i,int=1 -NR=2,k=i,int=2 -NR=3,k=i,int=3 -NR=4,k=i,int=4 -NR=5,k=i,int=5 -NR=6,k=i,int=6 -NR=7,k=iii,int=7 -NR=8,k=i,int=8 -NR=9,k=i,int=9 -NR=10,k=i,int=10 - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_numeric(v)) {@numeric[NR][k] = v}} end{ emit @numeric, "NR", "k" } -NR=1,k=i,numeric=1 -NR=1,k=x,numeric=0.346790 -NR=1,k=y,numeric=0.726803 -NR=2,k=i,numeric=2 -NR=2,k=x,numeric=0.758680 -NR=2,k=y,numeric=0.522151 -NR=3,k=i,numeric=3 -NR=3,k=x,numeric=0.204603 -NR=3,k=y,numeric=0.338319 -NR=4,k=i,numeric=4 -NR=4,k=x,numeric=0.381399 -NR=4,k=y,numeric=0.134189 -NR=5,k=i,numeric=5 -NR=5,k=xxx,numeric=0.573289 -NR=5,k=y,numeric=0.863624 -NR=6,k=i,numeric=6 -NR=6,k=x,numeric=0.527126 -NR=6,k=y,numeric=0.493221 -NR=7,k=iii,numeric=7 -NR=7,k=x,numeric=0.611784 -NR=7,k=y,numeric=0.187885 -NR=8,k=i,numeric=8 -NR=8,k=x,numeric=0.598554 -NR=8,k=yyy,numeric=0.976181 -NR=9,k=i,numeric=9 -NR=9,k=x,numeric=0.031442 -NR=9,k=y,numeric=0.749551 -NR=10,k=i,numeric=10 -NR=10,k=x,numeric=0.502626 -NR=10,k=y,numeric=0.952618 - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_string(v)) {@string[NR][k] = v}} end{ emit @string, "NR", "k" } -NR=1,k=a,string=pan -NR=1,k=b,string=pan -NR=2,k=a,string=eks -NR=2,k=b,string=pan -NR=3,k=aaa,string=wye -NR=3,k=b,string=wye -NR=4,k=a,string=eks -NR=4,k=bbb,string=wye -NR=5,k=a,string=wye -NR=5,k=b,string=pan -NR=6,k=a,string=zee -NR=6,k=b,string=pan -NR=7,k=a,string=eks -NR=7,k=b,string=zee -NR=8,k=a,string=zee -NR=8,k=b,string=wye -NR=9,k=aaa,string=hat -NR=9,k=bbb,string=wye -NR=10,k=a,string=pan -NR=10,k=b,string=wye - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_bool(v)) {@bool[NR][k] = v}} end{ emit @bool, "NR", "k" } - -mlr --from ./reg_test/input/abixy-het put -q for (k,v in $*) {if (is_bool(NR==2)) {@bool[NR][k] = "NR==2"}} end{ emit @bool, "NR", "k" } -NR=1,k=a,bool=NR==2 -NR=1,k=b,bool=NR==2 -NR=1,k=i,bool=NR==2 -NR=1,k=x,bool=NR==2 -NR=1,k=y,bool=NR==2 -NR=2,k=a,bool=NR==2 -NR=2,k=b,bool=NR==2 -NR=2,k=i,bool=NR==2 -NR=2,k=x,bool=NR==2 -NR=2,k=y,bool=NR==2 -NR=3,k=aaa,bool=NR==2 -NR=3,k=b,bool=NR==2 -NR=3,k=i,bool=NR==2 -NR=3,k=x,bool=NR==2 -NR=3,k=y,bool=NR==2 -NR=4,k=a,bool=NR==2 -NR=4,k=bbb,bool=NR==2 -NR=4,k=i,bool=NR==2 -NR=4,k=x,bool=NR==2 -NR=4,k=y,bool=NR==2 -NR=5,k=a,bool=NR==2 -NR=5,k=b,bool=NR==2 -NR=5,k=i,bool=NR==2 -NR=5,k=xxx,bool=NR==2 -NR=5,k=y,bool=NR==2 -NR=6,k=a,bool=NR==2 -NR=6,k=b,bool=NR==2 -NR=6,k=i,bool=NR==2 -NR=6,k=x,bool=NR==2 -NR=6,k=y,bool=NR==2 -NR=7,k=a,bool=NR==2 -NR=7,k=b,bool=NR==2 -NR=7,k=iii,bool=NR==2 -NR=7,k=x,bool=NR==2 -NR=7,k=y,bool=NR==2 -NR=8,k=a,bool=NR==2 -NR=8,k=b,bool=NR==2 -NR=8,k=i,bool=NR==2 -NR=8,k=x,bool=NR==2 -NR=8,k=yyy,bool=NR==2 -NR=9,k=aaa,bool=NR==2 -NR=9,k=bbb,bool=NR==2 -NR=9,k=i,bool=NR==2 -NR=9,k=x,bool=NR==2 -NR=9,k=y,bool=NR==2 -NR=10,k=a,bool=NR==2 -NR=10,k=b,bool=NR==2 -NR=10,k=i,bool=NR==2 -NR=10,k=x,bool=NR==2 -NR=10,k=y,bool=NR==2 - - -================================================================ -DSL TYPE-INFERENCE - -mlr --xtab put $y = $pi1 + $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 151 - -mlr --xtab put -F $y = $pi1 + $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 151.000000 - -mlr --xtab put -S $y = $pi1 . $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 7576 - -mlr --xtab filter 999 != $pi1 + $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 - -mlr --xtab filter -F 999 != $pi1 + $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 - -mlr --xtab filter -S "999" != $pi1 . $pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 - -mlr --oxtab put $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); -a 1 -b 2.0 -s 1 -t 2.000000 -u 3 -v 4.000000 -ts int -tt float -tu int -tv float - -mlr --oxtab put -F $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); -a 1 -b 2.0 -s 1.000000 -t 2.000000 -u 3 -v 4.000000 -ts float -tt float -tu int -tv float - -mlr --oxtab put -S $s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v); -a 1 -b 2.0 -s 1 -t 2.0 -u 3 -v 4.000000 -ts string -tt string -tu int -tv float - -mlr --xtab put $y=abs($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.200000 - -mlr --xtab put $y=abs($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.200000 - -mlr --xtab put $y=abs($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=abs($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75 - -mlr --xtab put $y=abs($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75 - -mlr --xtab put $y=abs($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0 - -mlr --xtab put -F $y=abs($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.200000 - -mlr --xtab put -F $y=abs($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.200000 - -mlr --xtab put -F $y=abs($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put -F $y=abs($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75.000000 - -mlr --xtab put -F $y=abs($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75.000000 - -mlr --xtab put -F $y=abs($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=ceil($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 72.000000 - -mlr --xtab put $y=ceil($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -71.000000 - -mlr --xtab put $y=ceil($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=ceil($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75 - -mlr --xtab put $y=ceil($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -75 - -mlr --xtab put $y=ceil($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0 - -mlr --xtab put -F $y=floor($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.000000 - -mlr --xtab put -F $y=floor($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -72.000000 - -mlr --xtab put -F $y=floor($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put -F $y=floor($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75.000000 - -mlr --xtab put -F $y=floor($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -75.000000 - -mlr --xtab put -F $y=floor($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=round($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.000000 - -mlr --xtab put $y=round($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -71.000000 - -mlr --xtab put $y=round($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=round($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75 - -mlr --xtab put $y=round($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -75 - -mlr --xtab put $y=round($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0 - -mlr --xtab put -F $y=round($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 71.000000 - -mlr --xtab put -F $y=round($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -71.000000 - -mlr --xtab put -F $y=round($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put -F $y=round($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 75.000000 - -mlr --xtab put -F $y=round($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -75.000000 - -mlr --xtab put -F $y=round($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=sgn($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 1.000000 - -mlr --xtab put $y=sgn($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -1.000000 - -mlr --xtab put $y=sgn($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $y=sgn($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 1 - -mlr --xtab put $y=sgn($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -1 - -mlr --xtab put $y=sgn($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0 - -mlr --xtab put -F $y=sgn($pf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 1.000000 - -mlr --xtab put -F $y=sgn($nf1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -1.000000 - -mlr --xtab put -F $y=sgn($zf) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put -F $y=sgn($pi1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 1.000000 - -mlr --xtab put -F $y=sgn($ni1) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y -1.000000 - -mlr --xtab put -F $y=sgn($zi) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -y 0.000000 - -mlr --xtab put $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 73.400000 - -mlr --xtab put $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 76.000000 - -mlr --xtab put $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 73.400000 -max 75.000000 - -mlr --xtab put $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 75 -max 76 - -mlr --xtab put -F $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 73.400000 - -mlr --xtab put -F $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 76.000000 - -mlr --xtab put -F $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 73.400000 -max 75.000000 - -mlr --xtab put -F $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 75.000000 -max 76.000000 - -mlr --xtab put $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 73.400000 - -mlr --xtab put $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 76.000000 - -mlr --xtab put $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 73.400000 -max 75.000000 - -mlr --xtab put $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 75 -max 76 - -mlr --xtab put -F $min=min($pf1,$pf2);$max=max($pf1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 73.400000 - -mlr --xtab put -F $min=min($pf1,$pi2);$max=max($pf1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 71.200000 -max 76.000000 - -mlr --xtab put -F $min=min($pi1,$pf2);$max=max($pi1,$pf2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 73.400000 -max 75.000000 - -mlr --xtab put -F $min=min($pi1,$pi2);$max=max($pi1,$pi2) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -min 75.000000 -max 76.000000 - -mlr --xtab put $sum=$pf1+$pf2;$diff=$pf1-$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 144.600000 -diff -2.200000 - -mlr --xtab put $sum=$pf1+$pi2;$diff=$pf1-$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 147.200000 -diff -4.800000 - -mlr --xtab put $sum=$pi1+$pf2;$diff=$pi1-$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 148.400000 -diff 1.600000 - -mlr --xtab put $sum=$pi1+$pi2;$diff=$pi1-$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 151 -diff -1 - -mlr --xtab put -F $sum=$pf1+$pf2;$diff=$pf1-$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 144.600000 -diff -2.200000 - -mlr --xtab put -F $sum=$pf1+$pi2;$diff=$pf1-$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 147.200000 -diff -4.800000 - -mlr --xtab put -F $sum=$pi1+$pf2;$diff=$pi1-$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 148.400000 -diff 1.600000 - -mlr --xtab put -F $sum=$pi1+$pi2;$diff=$pi1-$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -sum 151.000000 -diff -1.000000 - -mlr --xtab put $prod=$pf1*$pf2;$quot=$pf1/$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5226.080000 -quot 0.970027 - -mlr --xtab put $prod=$pf1*$pi2;$quot=$pf1/$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5411.200000 -quot 0.936842 - -mlr --xtab put $prod=$pi1*$pf2;$quot=$pi1/$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5505.000000 -quot 1.021798 - -mlr --xtab put $prod=$pi1*$pi2;$quot=$pi1/$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5700 -quot 0.986842 - -mlr --xtab put -F $prod=$pf1*$pf2;$quot=$pf1/$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5226.080000 -quot 0.970027 - -mlr --xtab put -F $prod=$pf1*$pi2;$quot=$pf1/$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5411.200000 -quot 0.936842 - -mlr --xtab put -F $prod=$pi1*$pf2;$quot=$pi1/$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5505.000000 -quot 1.021798 - -mlr --xtab put -F $prod=$pi1*$pi2;$quot=$pi1/$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -prod 5700.000000 -quot 0.986842 - -mlr --xtab put $iquot=$pf1//$pf2;$mod=$pf1%$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0.000000 -mod 71.200000 - -mlr --xtab put $iquot=$pf1//$pi2;$mod=$pf1%$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0.000000 -mod 71.200000 - -mlr --xtab put $iquot=$pi1//$pf2;$mod=$pi1%$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 1.000000 -mod 1.600000 - -mlr --xtab put $iquot=$pi1//$pi2;$mod=$pi1%$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0 -mod 75 - -mlr --xtab put -F $iquot=$pf1//$pf2;$mod=$pf1%$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0.000000 -mod 71.200000 - -mlr --xtab put -F $iquot=$pf1//$pi2;$mod=$pf1%$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0.000000 -mod 71.200000 - -mlr --xtab put -F $iquot=$pi1//$pf2;$mod=$pi1%$pf2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 1.000000 -mod 1.600000 - -mlr --xtab put -F $iquot=$pi1//$pi2;$mod=$pi1%$pi2 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -iquot 0.000000 -mod 75.000000 - -mlr --xtab put $a=roundm($pf1,10.0);$b=roundm($pf1,-10.0) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -a 70.000000 -b 70.000000 - -mlr --xtab put $a=roundm($pf1,10) ;$b=roundm($pf1,-10) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -a 70.000000 -b 70.000000 - -mlr --xtab put $a=roundm($pi1,10.0);$b=roundm($pi1,-10.0) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -a 80.000000 -b 80.000000 - -mlr --xtab put $a=roundm($pi1,10) ;$b=roundm($pi1,-10) ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -a 70 -b 70 - -mlr --oxtab put $z=$x+$y; $a=3+4; $b="3"."4"; $c="3"+4 -x 3 -y 4 -z 7 -a 7 -b 34 -c (error) - - -================================================================ -DSL SCIENTIFIC NOTATION IN FIELD VALUES - -mlr --opprint put $y=$x+1 ./reg_test/input/scinot.dkvp -x y -123 124 -123. 124.000000 -123.4 124.400000 -.234 1.234000 -1e2 101.000000 -1e-2 1.010000 -1.2e3 1201.000000 -1.e3 1001.000000 -1.2e-3 1.001200 -1.e-3 1.001000 -.2e3 201.000000 -.2e-3 1.000200 -1.e-3 1.001000 --123 -122 --123. -122.000000 --123.4 -122.400000 --.234 0.766000 --1e2 -99.000000 --1e-2 0.990000 --1.2e3 -1199.000000 --1.e3 -999.000000 --1.2e-3 0.998800 --1.e-3 0.999000 --.2e3 -199.000000 --.2e-3 0.999800 --1.e-3 0.999000 - - -================================================================ -DSL SCIENTIFIC NOTATION IN EXPRESSION LITERALS - -mlr --opprint put $y = 123 + $i ./reg_test/input/scinot1.dkvp -i y -1 124 - -mlr --opprint put $y = 123. + $i ./reg_test/input/scinot1.dkvp -i y -1 124.000000 - -mlr --opprint put $y = 123.4 + $i ./reg_test/input/scinot1.dkvp -i y -1 124.400000 - -mlr --opprint put $y = .234 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.234000 - -mlr --opprint put $y = 1e2 + $i ./reg_test/input/scinot1.dkvp -i y -1 101.000000 - -mlr --opprint put $y = 1e-2 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.010000 - -mlr --opprint put $y = 1.2e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1201.000000 - -mlr --opprint put $y = 1.e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1001.000000 - -mlr --opprint put $y = 1.2e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.001200 - -mlr --opprint put $y = 1.e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.001000 - -mlr --opprint put $y = .2e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 201.000000 - -mlr --opprint put $y = .2e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.000200 - -mlr --opprint put $y = 1.e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 1.001000 - -mlr --opprint put $y = -123 + $i ./reg_test/input/scinot1.dkvp -i y -1 -122 - -mlr --opprint put $y = -123. + $i ./reg_test/input/scinot1.dkvp -i y -1 -122.000000 - -mlr --opprint put $y = -123.4 + $i ./reg_test/input/scinot1.dkvp -i y -1 -122.400000 - -mlr --opprint put $y = -.234 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.766000 - -mlr --opprint put $y = -1e2 + $i ./reg_test/input/scinot1.dkvp -i y -1 -99.000000 - -mlr --opprint put $y = -1e-2 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.990000 - -mlr --opprint put $y = -1.2e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 -1199.000000 - -mlr --opprint put $y = -1.e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 -999.000000 - -mlr --opprint put $y = -1.2e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.998800 - -mlr --opprint put $y = -1.e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.999000 - -mlr --opprint put $y = -.2e3 + $i ./reg_test/input/scinot1.dkvp -i y -1 -199.000000 - -mlr --opprint put $y = -.2e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.999800 - -mlr --opprint put $y = -1.e-3 + $i ./reg_test/input/scinot1.dkvp -i y -1 0.999000 - - -================================================================ -DSL FROM-FILE FEATURE - -mlr put -f ./reg_test/input/put-example.dsl ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye - -mlr filter -f ./reg_test/input/filter-example.dsl ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put -f ./reg_test/input/put-example.dsl -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye - -mlr --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-example.dsl -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy --from ./reg_test/input/abixy-het put -f ./reg_test/input/put-example.dsl -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wyewye -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=ekswye -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=0.495106,ab=wyepan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,xy=0.584297,ab=zeewye -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567,ab=hatwye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.252048,ab=panpan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.396146,ab=ekspan -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.069221,ab=wye -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.051180,ab=eks -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,xy=0.863624,ab=wyepan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,xy=0.259990,ab=zeepan -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,xy=0.114945,ab=ekszee -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,xy=0.598554,ab=zeewye -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,xy=0.023567 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,xy=0.478811,ab=panwye - -mlr --from ./reg_test/input/abixy --from ./reg_test/input/abixy-het filter -f ./reg_test/input/filter-example.dsl -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -DSL MULTI-PART SCRIPTS - -mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 -f ./reg_test/input/put-script-piece-3 -a b i x y o W DID -pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES -eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES -wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES -eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES -wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES -zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES -eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES -zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES -hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES -pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES - -mlr --opprint --from ./reg_test/input/abixy put -e $xy = $x**2 + $y**2 -a b i x y xy -pan pan 1 0.3467901443380824 0.7268028627434533 0.648506 -eks pan 2 0.7586799647899636 0.5221511083334797 0.848237 -wye wye 3 0.20460330576630303 0.33831852551664776 0.156322 -eks wye 4 0.38139939387114097 0.13418874328430463 0.163472 -wye pan 5 0.5732889198020006 0.8636244699032729 1.074507 -zee pan 6 0.5271261600918548 0.49322128674835697 0.521129 -eks zee 7 0.6117840605678454 0.1878849191181694 0.409580 -zee wye 8 0.5985540091064224 0.976181385699006 1.311197 -hat wye 9 0.03144187646093577 0.7495507603507059 0.562815 -pan wye 10 0.5026260055412137 0.9526183602969864 1.160115 - -mlr --opprint --from ./reg_test/input/abixy filter -e NR == 7 -a b i x y -eks zee 7 0.6117840605678454 0.1878849191181694 - -mlr --opprint --from ./reg_test/input/abixy put -e print "PRE"; -f ./reg_test/input/put-script-piece-1 -f ./reg_test/input/put-script-piece-2 -f ./reg_test/input/put-script-piece-3 -e print "POST" -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -PRE -POST -a b i x y o W DID -pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES -eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES -wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES -eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES -wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES -zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES -eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES -zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES -hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES -pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES - -mlr --opprint --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-script-piece-1 -a b i x y -eks pan 2 0.7586799647899636 0.5221511083334797 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy filter -f ./reg_test/input/filter-script-piece-1 -f ./reg_test/input/filter-script-piece-2 -a b i x y -eks pan 2 0.7586799647899636 0.5221511083334797 - - -================================================================ -UTF-8 STRLEN - -mlr --inidx --ifs comma --oxtab put $s1=strlen($1);$s2=strlen($2);$s3=strlen($3);$s4=strlen($4) ./reg_test/input/utf8-align.dkvp -1 191º=test -2 1912=test2 -3 cois=çais -4 çois=cais -s1 9 -s2 10 -s3 9 -s4 9 - -1 191º=test -2 1912=test2 -3 ois=çais -4 çois=cais -s1 9 -s2 10 -s3 8 -s4 9 - -1 191º=test -2 1912=test2 -3 coise=çais -4 çois=cais -s1 9 -s2 10 -s3 10 -s4 9 - - -================================================================ -TRUNCATE - -mlr put $y=truncate($x, 0) -x=abcd,y= - -mlr put $y=truncate($x, 1) -x=abcd,y=a - -mlr put $y=truncate($x, 2) -x=abcd,y=ab - -mlr put $y=truncate($x, 3) -x=abcd,y=abc - -mlr put $y=truncate($x, 4) -x=abcd,y=abcd - -mlr put $y=truncate($x, 5) -x=abcd,y=abcd - -mlr put $y=truncate($x, 0) -x=abcdefgh,y= - -mlr put $y=truncate($x, 1) -x=abcdefgh,y=a - -mlr put $y=truncate($x, 2) -x=abcdefgh,y=ab - -mlr put $y=truncate($x, 3) -x=abcdefgh,y=abc - -mlr put $y=truncate($x, 4) -x=abcdefgh,y=abcd - -mlr put $y=truncate($x, 5) -x=abcdefgh,y=abcde - - -================================================================ -STATS1/STEP INT/FLOAT - -mlr --opprint step -a rsum,delta,counter -f x,y,z ./reg_test/input/int-float.dkvp -x y z x_rsum x_delta x_counter y_rsum y_delta y_counter z_rsum z_delta z_counter -1 10.1 20 1 0 1 10.100000 0 1 20 0 1 -2 10.2 30 3 1 2 20.300000 0.100000 2 50 10 2 -3 10.3 40.8 6 1 3 30.600000 0.100000 3 90.800000 10.800000 3 - -mlr --opprint step -F -a rsum,delta,counter -f x,y,z ./reg_test/input/int-float.dkvp -x y z x_rsum x_delta x_counter y_rsum y_delta y_counter z_rsum z_delta z_counter -1 10.1 20 1.000000 0.000000 1.000000 10.100000 0.000000 1.000000 20.000000 0.000000 1.000000 -2 10.2 30 3.000000 1.000000 2.000000 20.300000 0.100000 2.000000 50.000000 10.000000 2.000000 -3 10.3 40.8 6.000000 1.000000 3.000000 30.600000 0.100000 3.000000 90.800000 10.800000 3.000000 - -mlr --oxtab stats1 -a min,max,sum,count -f x,y,z ./reg_test/input/int-float.dkvp -x_min 1 -x_max 3 -x_sum 6 -x_count 3 -y_min 10.100000 -y_max 10.300000 -y_sum 30.600000 -y_count 3 -z_min 20.000000 -z_max 40.800000 -z_sum 90.800000 -z_count 3 - -mlr --oxtab stats1 -F -a min,max,sum,count -f x,y,z ./reg_test/input/int-float.dkvp -x_min 1 -x_max 3 -x_sum 6.000000 -x_count 3.000000 -y_min 10.100000 -y_max 10.300000 -y_sum 30.600000 -y_count 3.000000 -z_min 20.000000 -z_max 40.800000 -z_sum 90.800000 -z_count 3.000000 - - -================================================================ -DSL PYTHONIC DIVISION - -mlr --xtab put $quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.120000 -iquot 7.000000 -mod 1.200000 - -mlr --xtab put $quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.500000 -iquot 7 -mod 5 - -mlr --xtab put $quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.120000 -iquot -8.000000 -mod 8.800000 - -mlr --xtab put $quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.500000 -iquot -8 -mod 5 - -mlr --xtab put -F $quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.120000 -iquot 7.000000 -mod 1.200000 - -mlr --xtab put -F $quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.500000 -iquot 7.000000 -mod 5.000000 - -mlr --xtab put -F $quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.120000 -iquot -8.000000 -mod 8.800000 - -mlr --xtab put -F $quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.500000 -iquot -8.000000 -mod 5.000000 - -mlr --xtab put $quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.120000 -iquot -8.000000 -mod -8.800000 - -mlr --xtab put $quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.500000 -iquot -8 -mod -5 - -mlr --xtab put $quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.120000 -iquot 7.000000 -mod -1.200000 - -mlr --xtab put $quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.500000 -iquot 7 -mod -5 - -mlr --xtab put -F $quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.120000 -iquot -8.000000 -mod -8.800000 - -mlr --xtab put -F $quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot -7.500000 -iquot -8.000000 -mod -5.000000 - -mlr --xtab put -F $quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.120000 -iquot 7.000000 -mod -1.200000 - -mlr --xtab put -F $quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ./reg_test/input/mixed-types.xtab -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 -quot 7.500000 -iquot 7.000000 -mod -5.000000 - - -================================================================ -DSL REGEX MATCHING - -mlr filter -v $x =~ "bcd" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="bcd", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="bcd", type=STRING_LITERAL. - -x=abcd,y=ghi -x=abcde,y=ghi - -mlr filter -v $x =~ "^bcd" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^bcd", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^bcd", type=STRING_LITERAL. - - -mlr filter -v $x =~ "^abc" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc", type=STRING_LITERAL. - -x=abc,y=def -x=abcd,y=ghi -x=abcde,y=ghi - -mlr filter -v $x =~ "^abc$" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc$", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc$", type=STRING_LITERAL. - -x=abc,y=def - -mlr filter -v $x =~ "^a.*d$" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^a.*d$", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^a.*d$", type=STRING_LITERAL. - -x=abcd,y=ghi - -mlr filter -v $x =~ "^a.*"."d$" ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text="^a.*", type=STRING_LITERAL. - text="d$", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text="^a.*", type=STRING_LITERAL. - text="d$", type=STRING_LITERAL. - -x=abcd,y=ghi - -mlr filter -v $y =~ "\".." ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="y", type=FIELD_NAME. - text=""..", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="y", type=FIELD_NAME. - text=""..", type=STRING_LITERAL. - -x=ABCDE,y="GHI" - -mlr filter -v $x =~ "bcd"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="bcd", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="bcd", type=REGEXI. - -x=abcd,y=ghi -x=ABCD,y=GHI -x=abcde,y=ghi -x=ABCDE,y=GHI -x=ABCDE,y="GHI" - -mlr filter -v $x =~ "^bcd"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^bcd", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^bcd", type=REGEXI. - - -mlr filter -v $x =~ "^abc"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc", type=REGEXI. - -x=abc,y=def -x=ABC,y=DEF -x=abcd,y=ghi -x=ABCD,y=GHI -x=abcde,y=ghi -x=ABCDE,y=GHI -x=ABCDE,y="GHI" - -mlr filter -v $x =~ "^abc$"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc$", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^abc$", type=REGEXI. - -x=abc,y=def -x=ABC,y=DEF - -mlr filter -v $x =~ "^a.*d$"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^a.*d$", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text="^a.*d$", type=REGEXI. - -x=abcd,y=ghi -x=ABCD,y=GHI - -mlr filter -v $x =~ "^a.*"."d$"i ./reg_test/input/regex.dkvp -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text="^a.*", type=STRING_LITERAL. - text="d$", type=REGEXI. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=~", type=OPERATOR: - text="x", type=FIELD_NAME. - text=".", type=OPERATOR: - text="^a.*", type=STRING_LITERAL. - text="d$", type=REGEXI. - -x=abcd,y=ghi - -mlr --csv filter $text =~ "." ./reg_test/input/dot-match.csv -text -hi -a.b -bye - -mlr --csv filter $text =~ "\." ./reg_test/input/dot-match.csv -text -a.b - - -================================================================ -DSL TYPED OVERLAY - -mlr put $y = string($x); $z=$y.$y ./reg_test/input/int-float.dkvp -x=1,y=1,z=11 -x=2,y=2,z=22 -x=3,y=3,z=33 - -mlr put $z=string($x).string($x) ./reg_test/input/int-float.dkvp -x=1,y=10.1,z=11 -x=2,y=10.2,z=22 -x=3,y=10.3,z=33 - -mlr put $y = string($x) then put $z=$y.$y ./reg_test/input/int-float.dkvp -x=1,y=1,z=11 -x=2,y=2,z=22 -x=3,y=3,z=33 - -mlr put $a="hello" then put $b=$a." world";$z=$x+$y;$c=$b;$a=sub($b,"hello","farewell") ./reg_test/input/int-float.dkvp -x=1,y=10.1,z=11.100000,a=farewell world,b=hello world,c=hello world -x=2,y=10.2,z=12.200000,a=farewell world,b=hello world,c=hello world -x=3,y=10.3,z=13.300000,a=farewell world,b=hello world,c=hello world - - -================================================================ -DSL REGEX CAPTURES - -mlr --opprint put $FIELD =~ "([A-Z]+)([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3" ./reg_test/input/capture.dkvp -FIELD F1 F2 F3 -ABC123 ABC 123 - -ABC..123 - - - -..ABC..123.. - - - -none of the above - - - - -mlr --opprint put $FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3" ./reg_test/input/capture.dkvp -FIELD F1 F2 F3 -ABC123 ABC 123 - -ABC..123 ABC 123 - -..ABC..123.. ABC 123 - -none of the above - - - - -mlr --opprint put $FIELD =~ "([A-Z]+)([0-9]+)" then put $F1="\1"; $F2="\2"; $F3="\3" ./reg_test/input/capture.dkvp -FIELD F1 F2 F3 -ABC123 \1 \2 \3 -ABC..123 \1 \2 \3 -..ABC..123.. \1 \2 \3 -none of the above \1 \2 \3 - -mlr --opprint put $FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)" then put $F1="\1"; $F2="\2"; $F3="\3" ./reg_test/input/capture.dkvp -FIELD F1 F2 F3 -ABC123 \1 \2 \3 -ABC..123 \1 \2 \3 -..ABC..123.. \1 \2 \3 -none of the above \1 \2 \3 - -mlr --opprint put $FIELD =~ "....."; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde abcde - - - - - - - - - -abcdef abcde - - - - - - - - - -abcdefg abcde - - - - - - - - - -abcdefgh abcde - - - - - - - - - -abcdefghi abcde - - - - - - - - - -abcdefghij abcde - - - - - - - - - -abcdefghijk abcde - - - - - - - - - -abcdefghijkl abcde - - - - - - - - - - -mlr --opprint put $FIELD =~ "....." {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcde abcde - - - - - - - - - -abcdef abcde - - - - - - - - - -abcdefg abcde - - - - - - - - - -abcdefgh abcde - - - - - - - - - -abcdefghi abcde - - - - - - - - - -abcdefghij abcde - - - - - - - - - -abcdefghijk abcde - - - - - - - - - -abcdefghijkl abcde - - - - - - - - - - -mlr --opprint put filter $FIELD =~ "....."; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcde abcde - - - - - - - - - -abcdef abcde - - - - - - - - - -abcdefg abcde - - - - - - - - - -abcdefgh abcde - - - - - - - - - -abcdefghi abcde - - - - - - - - - -abcdefghij abcde - - - - - - - - - -abcdefghijk abcde - - - - - - - - - -abcdefghijkl abcde - - - - - - - - - - -mlr --opprint put $FIELD =~ "(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a a a - - - - - - - - -ab a a - - - - - - - - -abc a a - - - - - - - - -abcd a a - - - - - - - - -abcde a a - - - - - - - - -abcdef a a - - - - - - - - -abcdefg a a - - - - - - - - -abcdefgh a a - - - - - - - - -abcdefghi a a - - - - - - - - -abcdefghij a a - - - - - - - - -abcdefghijk a a - - - - - - - - -abcdefghijkl a a - - - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab ab a b - - - - - - - -abc ab a b - - - - - - - -abcd ab a b - - - - - - - -abcde ab a b - - - - - - - -abcdef ab a b - - - - - - - -abcdefg ab a b - - - - - - - -abcdefgh ab a b - - - - - - - -abcdefghi ab a b - - - - - - - -abcdefghij ab a b - - - - - - - -abcdefghijk ab a b - - - - - - - -abcdefghijkl ab a b - - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc abc a b c - - - - - - -abcd abc a b c - - - - - - -abcde abc a b c - - - - - - -abcdef abc a b c - - - - - - -abcdefg abc a b c - - - - - - -abcdefgh abc a b c - - - - - - -abcdefghi abc a b c - - - - - - -abcdefghij abc a b c - - - - - - -abcdefghijk abc a b c - - - - - - -abcdefghijkl abc a b c - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd abcd a b c d - - - - - -abcde abcd a b c d - - - - - -abcdef abcd a b c d - - - - - -abcdefg abcd a b c d - - - - - -abcdefgh abcd a b c d - - - - - -abcdefghi abcd a b c d - - - - - -abcdefghij abcd a b c d - - - - - -abcdefghijk abcd a b c d - - - - - -abcdefghijkl abcd a b c d - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde abcde a b c d e - - - - -abcdef abcde a b c d e - - - - -abcdefg abcde a b c d e - - - - -abcdefgh abcde a b c d e - - - - -abcdefghi abcde a b c d e - - - - -abcdefghij abcde a b c d e - - - - -abcdefghijk abcde a b c d e - - - - -abcdefghijkl abcde a b c d e - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde - - - - - - - - - - -abcdef abcdef a b c d e f - - - -abcdefg abcdef a b c d e f - - - -abcdefgh abcdef a b c d e f - - - -abcdefghi abcdef a b c d e f - - - -abcdefghij abcdef a b c d e f - - - -abcdefghijk abcdef a b c d e f - - - -abcdefghijkl abcdef a b c d e f - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde - - - - - - - - - - -abcdef - - - - - - - - - - -abcdefg abcdefg a b c d e f g - - -abcdefgh abcdefg a b c d e f g - - -abcdefghi abcdefg a b c d e f g - - -abcdefghij abcdefg a b c d e f g - - -abcdefghijk abcdefg a b c d e f g - - -abcdefghijkl abcdefg a b c d e f g - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde - - - - - - - - - - -abcdef - - - - - - - - - - -abcdefg - - - - - - - - - - -abcdefgh abcdefgh a b c d e f g h - -abcdefghi abcdefgh a b c d e f g h - -abcdefghij abcdefgh a b c d e f g h - -abcdefghijk abcdefgh a b c d e f g h - -abcdefghijkl abcdefgh a b c d e f g h - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde - - - - - - - - - - -abcdef - - - - - - - - - - -abcdefg - - - - - - - - - - -abcdefgh - - - - - - - - - - -abcdefghi abcdefghi a b c d e f g h i -abcdefghij abcdefghi a b c d e f g h i -abcdefghijk abcdefghi a b c d e f g h i -abcdefghijkl abcdefghi a b c d e f g h i - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -- - - - - - - - - - - -a - - - - - - - - - - -ab - - - - - - - - - - -abc - - - - - - - - - - -abcd - - - - - - - - - - -abcde - - - - - - - - - - -abcdef - - - - - - - - - - -abcdefg - - - - - - - - - - -abcdefgh - - - - - - - - - - -abcdefghi - - - - - - - - - - -abcdefghij abcdefghij a b c d e f g h i -abcdefghijk abcdefghij a b c d e f g h i -abcdefghijkl abcdefghij a b c d e f g h i - -mlr --opprint put $FIELD =~ "(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -a a a - - - - - - - - -ab a a - - - - - - - - -abc a a - - - - - - - - -abcd a a - - - - - - - - -abcde a a - - - - - - - - -abcdef a a - - - - - - - - -abcdefg a a - - - - - - - - -abcdefgh a a - - - - - - - - -abcdefghi a a - - - - - - - - -abcdefghij a a - - - - - - - - -abcdefghijk a a - - - - - - - - -abcdefghijkl a a - - - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -ab ab a b - - - - - - - -abc ab a b - - - - - - - -abcd ab a b - - - - - - - -abcde ab a b - - - - - - - -abcdef ab a b - - - - - - - -abcdefg ab a b - - - - - - - -abcdefgh ab a b - - - - - - - -abcdefghi ab a b - - - - - - - -abcdefghij ab a b - - - - - - - -abcdefghijk ab a b - - - - - - - -abcdefghijkl ab a b - - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abc abc a b c - - - - - - -abcd abc a b c - - - - - - -abcde abc a b c - - - - - - -abcdef abc a b c - - - - - - -abcdefg abc a b c - - - - - - -abcdefgh abc a b c - - - - - - -abcdefghi abc a b c - - - - - - -abcdefghij abc a b c - - - - - - -abcdefghijk abc a b c - - - - - - -abcdefghijkl abc a b c - - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcd abcd a b c d - - - - - -abcde abcd a b c d - - - - - -abcdef abcd a b c d - - - - - -abcdefg abcd a b c d - - - - - -abcdefgh abcd a b c d - - - - - -abcdefghi abcd a b c d - - - - - -abcdefghij abcd a b c d - - - - - -abcdefghijk abcd a b c d - - - - - -abcdefghijkl abcd a b c d - - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcde abcde a b c d e - - - - -abcdef abcde a b c d e - - - - -abcdefg abcde a b c d e - - - - -abcdefgh abcde a b c d e - - - - -abcdefghi abcde a b c d e - - - - -abcdefghij abcde a b c d e - - - - -abcdefghijk abcde a b c d e - - - - -abcdefghijkl abcde a b c d e - - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd -abcde - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdef abcdef a b c d e f - - - -abcdefg abcdef a b c d e f - - - -abcdefgh abcdef a b c d e f - - - -abcdefghi abcdef a b c d e f - - - -abcdefghij abcdef a b c d e f - - - -abcdefghijk abcdef a b c d e f - - - -abcdefghijkl abcdef a b c d e f - - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd -abcde -abcdef - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefg abcdefg a b c d e f g - - -abcdefgh abcdefg a b c d e f g - - -abcdefghi abcdefg a b c d e f g - - -abcdefghij abcdefg a b c d e f g - - -abcdefghijk abcdefg a b c d e f g - - -abcdefghijkl abcdefg a b c d e f g - - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd -abcde -abcdef -abcdefg - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefgh abcdefgh a b c d e f g h - -abcdefghi abcdefgh a b c d e f g h - -abcdefghij abcdefgh a b c d e f g h - -abcdefghijk abcdefgh a b c d e f g h - -abcdefghijkl abcdefgh a b c d e f g h - - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd -abcde -abcdef -abcdefg -abcdefgh - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefghi abcdefghi a b c d e f g h i -abcdefghij abcdefghi a b c d e f g h i -abcdefghijk abcdefghi a b c d e f g h i -abcdefghijkl abcdefghi a b c d e f g h i - -mlr --opprint put $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"} ./reg_test/input/capture-lengths.dkvp -FIELD -- -a -ab -abc -abcd -abcde -abcdef -abcdefg -abcdefgh -abcdefghi - -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefghij abcdefghij a b c d e f g h i -abcdefghijk abcdefghij a b c d e f g h i -abcdefghijkl abcdefghij a b c d e f g h i - -mlr --opprint put filter $FIELD =~ "(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -a a a - - - - - - - - -ab a a - - - - - - - - -abc a a - - - - - - - - -abcd a a - - - - - - - - -abcde a a - - - - - - - - -abcdef a a - - - - - - - - -abcdefg a a - - - - - - - - -abcdefgh a a - - - - - - - - -abcdefghi a a - - - - - - - - -abcdefghij a a - - - - - - - - -abcdefghijk a a - - - - - - - - -abcdefghijkl a a - - - - - - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -ab ab a b - - - - - - - -abc ab a b - - - - - - - -abcd ab a b - - - - - - - -abcde ab a b - - - - - - - -abcdef ab a b - - - - - - - -abcdefg ab a b - - - - - - - -abcdefgh ab a b - - - - - - - -abcdefghi ab a b - - - - - - - -abcdefghij ab a b - - - - - - - -abcdefghijk ab a b - - - - - - - -abcdefghijkl ab a b - - - - - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abc abc a b c - - - - - - -abcd abc a b c - - - - - - -abcde abc a b c - - - - - - -abcdef abc a b c - - - - - - -abcdefg abc a b c - - - - - - -abcdefgh abc a b c - - - - - - -abcdefghi abc a b c - - - - - - -abcdefghij abc a b c - - - - - - -abcdefghijk abc a b c - - - - - - -abcdefghijkl abc a b c - - - - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcd abcd a b c d - - - - - -abcde abcd a b c d - - - - - -abcdef abcd a b c d - - - - - -abcdefg abcd a b c d - - - - - -abcdefgh abcd a b c d - - - - - -abcdefghi abcd a b c d - - - - - -abcdefghij abcd a b c d - - - - - -abcdefghijk abcd a b c d - - - - - -abcdefghijkl abcd a b c d - - - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcde abcde a b c d e - - - - -abcdef abcde a b c d e - - - - -abcdefg abcde a b c d e - - - - -abcdefgh abcde a b c d e - - - - -abcdefghi abcde a b c d e - - - - -abcdefghij abcde a b c d e - - - - -abcdefghijk abcde a b c d e - - - - -abcdefghijkl abcde a b c d e - - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdef abcdef a b c d e f - - - -abcdefg abcdef a b c d e f - - - -abcdefgh abcdef a b c d e f - - - -abcdefghi abcdef a b c d e f - - - -abcdefghij abcdef a b c d e f - - - -abcdefghijk abcdef a b c d e f - - - -abcdefghijkl abcdef a b c d e f - - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefg abcdefg a b c d e f g - - -abcdefgh abcdefg a b c d e f g - - -abcdefghi abcdefg a b c d e f g - - -abcdefghij abcdefg a b c d e f g - - -abcdefghijk abcdefg a b c d e f g - - -abcdefghijkl abcdefg a b c d e f g - - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefgh abcdefgh a b c d e f g h - -abcdefghi abcdefgh a b c d e f g h - -abcdefghij abcdefgh a b c d e f g h - -abcdefghijk abcdefgh a b c d e f g h - -abcdefghijkl abcdefgh a b c d e f g h - - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefghi abcdefghi a b c d e f g h i -abcdefghij abcdefghi a b c d e f g h i -abcdefghijk abcdefghi a b c d e f g h i -abcdefghijkl abcdefghi a b c d e f g h i - -mlr --opprint put filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9" ./reg_test/input/capture-lengths.dkvp -FIELD F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 -abcdefghij abcdefghij a b c d e f g h i -abcdefghijk abcdefghij a b c d e f g h i -abcdefghijkl abcdefghij a b c d e f g h i - -mlr --inidx --odkvp put $1 =~ "ab(.)d(..)g" { $c1 = "\1"; $c2 = "\2"} -1=abcdefg,c1=c,c2=ef - -mlr --inidx --odkvp put $1 =~ "ab(.)?d(..)g" { $c1 = "\1"; $c2 = "\2"} -1=abcdefg,c1=c,c2=ef - -mlr --inidx --odkvp put $1 =~ "ab(c)?d(..)g" { $c1 = "\1"; $c2 = "\2"} -1=abXdefg - -mlr --inidx --odkvp put $1 =~ "ab(c)?d(..)g" { $c1 = "\1"; $c2 = "\2"} -1=abdefg,c1=,c2=ef - - -================================================================ -DSL FILTER/PATTERN-ACTION - -mlr --opprint put $x > 0.5; $z = "flag" ./reg_test/input/abixy -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 flag -eks pan 2 0.7586799647899636 0.5221511083334797 flag -wye wye 3 0.20460330576630303 0.33831852551664776 flag -eks wye 4 0.38139939387114097 0.13418874328430463 flag -wye pan 5 0.5732889198020006 0.8636244699032729 flag -zee pan 6 0.5271261600918548 0.49322128674835697 flag -eks zee 7 0.6117840605678454 0.1878849191181694 flag -zee wye 8 0.5985540091064224 0.976181385699006 flag -hat wye 9 0.03144187646093577 0.7495507603507059 flag -pan wye 10 0.5026260055412137 0.9526183602969864 flag - -mlr --opprint put !($x > 0.5); $z = "flag" ./reg_test/input/abixy -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 flag -eks pan 2 0.7586799647899636 0.5221511083334797 flag -wye wye 3 0.20460330576630303 0.33831852551664776 flag -eks wye 4 0.38139939387114097 0.13418874328430463 flag -wye pan 5 0.5732889198020006 0.8636244699032729 flag -zee pan 6 0.5271261600918548 0.49322128674835697 flag -eks zee 7 0.6117840605678454 0.1878849191181694 flag -zee wye 8 0.5985540091064224 0.976181385699006 flag -hat wye 9 0.03144187646093577 0.7495507603507059 flag -pan wye 10 0.5026260055412137 0.9526183602969864 flag - -mlr --opprint put filter $x > 0.5; $z = "flag" ./reg_test/input/abixy -a b i x y z -eks pan 2 0.7586799647899636 0.5221511083334797 flag -wye pan 5 0.5732889198020006 0.8636244699032729 flag -zee pan 6 0.5271261600918548 0.49322128674835697 flag -eks zee 7 0.6117840605678454 0.1878849191181694 flag -zee wye 8 0.5985540091064224 0.976181385699006 flag -pan wye 10 0.5026260055412137 0.9526183602969864 flag - -mlr --opprint put $x > 0.5 {$z = "flag"} ./reg_test/input/abixy -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 - -a b i x y z -eks pan 2 0.7586799647899636 0.5221511083334797 flag - -a b i x y -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 - -a b i x y z -wye pan 5 0.5732889198020006 0.8636244699032729 flag -zee pan 6 0.5271261600918548 0.49322128674835697 flag -eks zee 7 0.6117840605678454 0.1878849191181694 flag -zee wye 8 0.5985540091064224 0.976181385699006 flag - -a b i x y -hat wye 9 0.03144187646093577 0.7495507603507059 - -a b i x y z -pan wye 10 0.5026260055412137 0.9526183602969864 flag - -mlr --opprint put filter !($x > 0.5); $z = "flag" ./reg_test/input/abixy -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 flag -wye wye 3 0.20460330576630303 0.33831852551664776 flag -eks wye 4 0.38139939387114097 0.13418874328430463 flag -hat wye 9 0.03144187646093577 0.7495507603507059 flag - -mlr --opprint put !($x > 0.5) {$z = "flag"} ./reg_test/input/abixy -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 flag - -a b i x y -eks pan 2 0.7586799647899636 0.5221511083334797 - -a b i x y z -wye wye 3 0.20460330576630303 0.33831852551664776 flag -eks wye 4 0.38139939387114097 0.13418874328430463 flag - -a b i x y -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 - -a b i x y z -hat wye 9 0.03144187646093577 0.7495507603507059 flag - -a b i x y -pan wye 10 0.5026260055412137 0.9526183602969864 - - -================================================================ -DSL GMT DATE/TIME FUNCTIONS - -mlr --csvlite put $gmt = sec2gmt($sec) ./reg_test/input/sec2gmt -n,sec,gmt -1,0,1970-01-01T00:00:00Z -2,1,1970-01-01T00:00:01Z -3,10,1970-01-01T00:00:10Z -4,100,1970-01-01T00:01:40Z -5,1000,1970-01-01T00:16:40Z -6,10000,1970-01-01T02:46:40Z -7,100000,1970-01-02T03:46:40Z -8,1000000,1970-01-12T13:46:40Z -9,10000000,1970-04-26T17:46:40Z -10,100000000,1973-03-03T09:46:40Z -11,1000000000,2001-09-09T01:46:40Z -12,1432036180,2015-05-19T11:49:40Z -13,1500000000,2017-07-14T02:40:00Z -14,2000000000,2033-05-18T03:33:20Z -15,2000000000.,2033-05-18T03:33:20Z -16,2000000000.0,2033-05-18T03:33:20Z -17,2000000000.00,2033-05-18T03:33:20Z -18,2000000000.123400,2033-05-18T03:33:20Z -19,2000000000.123456,2033-05-18T03:33:20Z -20,2000000000.999,2033-05-18T03:33:20Z -21,2000000000.999999,2033-05-18T03:33:20Z -22,2000000000.999999999,2033-05-18T03:33:21Z -23,, -24,x,x -25,123x,123x - -mlr --csvlite put $gmt = sec2gmt($sec,1) ./reg_test/input/sec2gmt -n,sec,gmt -1,0,1970-01-01T00:00:00.0Z -2,1,1970-01-01T00:00:01.0Z -3,10,1970-01-01T00:00:10.0Z -4,100,1970-01-01T00:01:40.0Z -5,1000,1970-01-01T00:16:40.0Z -6,10000,1970-01-01T02:46:40.0Z -7,100000,1970-01-02T03:46:40.0Z -8,1000000,1970-01-12T13:46:40.0Z -9,10000000,1970-04-26T17:46:40.0Z -10,100000000,1973-03-03T09:46:40.0Z -11,1000000000,2001-09-09T01:46:40.0Z -12,1432036180,2015-05-19T11:49:40.0Z -13,1500000000,2017-07-14T02:40:00.0Z -14,2000000000,2033-05-18T03:33:20.0Z -15,2000000000.,2033-05-18T03:33:20.0Z -16,2000000000.0,2033-05-18T03:33:20.0Z -17,2000000000.00,2033-05-18T03:33:20.0Z -18,2000000000.123400,2033-05-18T03:33:20.1Z -19,2000000000.123456,2033-05-18T03:33:20.1Z -20,2000000000.999,2033-05-18T03:33:20.9Z -21,2000000000.999999,2033-05-18T03:33:20.9Z -22,2000000000.999999999,2033-05-18T03:33:21.0Z -23,, -24,x,x -25,123x,123x - -mlr --csvlite put $gmt = sec2gmt($sec,3) ./reg_test/input/sec2gmt -n,sec,gmt -1,0,1970-01-01T00:00:00.000Z -2,1,1970-01-01T00:00:01.000Z -3,10,1970-01-01T00:00:10.000Z -4,100,1970-01-01T00:01:40.000Z -5,1000,1970-01-01T00:16:40.000Z -6,10000,1970-01-01T02:46:40.000Z -7,100000,1970-01-02T03:46:40.000Z -8,1000000,1970-01-12T13:46:40.000Z -9,10000000,1970-04-26T17:46:40.000Z -10,100000000,1973-03-03T09:46:40.000Z -11,1000000000,2001-09-09T01:46:40.000Z -12,1432036180,2015-05-19T11:49:40.000Z -13,1500000000,2017-07-14T02:40:00.000Z -14,2000000000,2033-05-18T03:33:20.000Z -15,2000000000.,2033-05-18T03:33:20.000Z -16,2000000000.0,2033-05-18T03:33:20.000Z -17,2000000000.00,2033-05-18T03:33:20.000Z -18,2000000000.123400,2033-05-18T03:33:20.123Z -19,2000000000.123456,2033-05-18T03:33:20.123Z -20,2000000000.999,2033-05-18T03:33:20.999Z -21,2000000000.999999,2033-05-18T03:33:20.999Z -22,2000000000.999999999,2033-05-18T03:33:21.000Z -23,, -24,x,x -25,123x,123x - -mlr --csvlite put $gmt = sec2gmt($sec,6) ./reg_test/input/sec2gmt -n,sec,gmt -1,0,1970-01-01T00:00:00.000000Z -2,1,1970-01-01T00:00:01.000000Z -3,10,1970-01-01T00:00:10.000000Z -4,100,1970-01-01T00:01:40.000000Z -5,1000,1970-01-01T00:16:40.000000Z -6,10000,1970-01-01T02:46:40.000000Z -7,100000,1970-01-02T03:46:40.000000Z -8,1000000,1970-01-12T13:46:40.000000Z -9,10000000,1970-04-26T17:46:40.000000Z -10,100000000,1973-03-03T09:46:40.000000Z -11,1000000000,2001-09-09T01:46:40.000000Z -12,1432036180,2015-05-19T11:49:40.000000Z -13,1500000000,2017-07-14T02:40:00.000000Z -14,2000000000,2033-05-18T03:33:20.000000Z -15,2000000000.,2033-05-18T03:33:20.000000Z -16,2000000000.0,2033-05-18T03:33:20.000000Z -17,2000000000.00,2033-05-18T03:33:20.000000Z -18,2000000000.123400,2033-05-18T03:33:20.123400Z -19,2000000000.123456,2033-05-18T03:33:20.123456Z -20,2000000000.999,2033-05-18T03:33:20.999000Z -21,2000000000.999999,2033-05-18T03:33:20.999999Z -22,2000000000.999999999,2033-05-18T03:33:21.000000Z -23,, -24,x,x -25,123x,123x - -mlr --csvlite put $sec = gmt2sec($gmt) ./reg_test/input/gmt2sec -gmt,sec -1970-01-01T00:00:00Z,0.000000 -1970-01-01T00:00:00.Z,0.000000 -1970-01-01T00:00:01Z,1.000000 -1970-01-01T00:00:01.0Z,1.000000 -1970-01-01T00:00:10Z,10.000000 -1970-01-01T00:00:10.00Z,10.000000 -1970-01-01T00:01:40Z,100.000000 -1970-01-01T00:01:40.1Z,100.100000 -1970-01-01T00:16:40Z,1000.000000 -1970-01-01T00:16:40.12Z,1000.120000 -1970-01-01T02:46:40Z,10000.000000 -1970-01-01T02:46:40.123Z,10000.123000 -1970-01-02T03:46:40Z,100000.000000 -1970-01-02T03:46:40.1234Z,100000.123400 -1970-01-12T13:46:40Z,1000000.000000 -1970-01-12T13:46:40.12345Z,1000000.123450 -1970-04-26T17:46:40Z,10000000.000000 -1970-04-26T17:46:40.123456Z,10000000.123456 -1973-03-03T09:46:40Z,100000000.000000 -1973-03-03T09:46:40.1234567Z,100000000.123457 -2001-09-09T01:46:40Z,1000000000.000000 -2001-09-09T01:46:40.12345678Z,1000000000.123457 -2015-05-19T11:49:40Z,1432036180.000000 -2015-05-19T11:49:40.123456789Z,1432036180.123457 -2017-07-14T02:40:00Z,1500000000.000000 -2017-07-14T02:40:00.999Z,1500000000.999000 -2033-05-18T03:33:20Z,2000000000.000000 -2033-05-18T03:33:20.999999Z,2000000000.999999 - -mlr --csvlite put $gmtdate = sec2gmtdate($sec) ./reg_test/input/sec2gmt -n,sec,gmtdate -1,0,1970-01-01 -2,1,1970-01-01 -3,10,1970-01-01 -4,100,1970-01-01 -5,1000,1970-01-01 -6,10000,1970-01-01 -7,100000,1970-01-02 -8,1000000,1970-01-12 -9,10000000,1970-04-26 -10,100000000,1973-03-03 -11,1000000000,2001-09-09 -12,1432036180,2015-05-19 -13,1500000000,2017-07-14 -14,2000000000,2033-05-18 -15,2000000000.,2033-05-18 -16,2000000000.0,2033-05-18 -17,2000000000.00,2033-05-18 -18,2000000000.123400,2033-05-18 -19,2000000000.123456,2033-05-18 -20,2000000000.999,2033-05-18 -21,2000000000.999999,2033-05-18 -22,2000000000.999999999,2033-05-18 -23,, -24,x,x -25,123x,123x - -mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%SZ") ./reg_test/input/sec2gmt -n sec gmt -1 0 1970-01-01T00:00:00Z -2 1 1970-01-01T00:00:01Z -3 10 1970-01-01T00:00:10Z -4 100 1970-01-01T00:01:40Z -5 1000 1970-01-01T00:16:40Z -6 10000 1970-01-01T02:46:40Z -7 100000 1970-01-02T03:46:40Z -8 1000000 1970-01-12T13:46:40Z -9 10000000 1970-04-26T17:46:40Z -10 100000000 1973-03-03T09:46:40Z -11 1000000000 2001-09-09T01:46:40Z -12 1432036180 2015-05-19T11:49:40Z -13 1500000000 2017-07-14T02:40:00Z -14 2000000000 2033-05-18T03:33:20Z -15 2000000000. 2033-05-18T03:33:20Z -16 2000000000.0 2033-05-18T03:33:20Z -17 2000000000.00 2033-05-18T03:33:20Z -18 2000000000.123400 2033-05-18T03:33:20Z -19 2000000000.123456 2033-05-18T03:33:20Z -20 2000000000.999 2033-05-18T03:33:20Z -21 2000000000.999999 2033-05-18T03:33:20Z -22 2000000000.999999999 2033-05-18T03:33:21Z -23 - - -24 x (error) -25 123x (error) - -mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%1SZ") ./reg_test/input/sec2gmt -n sec gmt -1 0 1970-01-01T00:00:00.0Z -2 1 1970-01-01T00:00:01.0Z -3 10 1970-01-01T00:00:10.0Z -4 100 1970-01-01T00:01:40.0Z -5 1000 1970-01-01T00:16:40.0Z -6 10000 1970-01-01T02:46:40.0Z -7 100000 1970-01-02T03:46:40.0Z -8 1000000 1970-01-12T13:46:40.0Z -9 10000000 1970-04-26T17:46:40.0Z -10 100000000 1973-03-03T09:46:40.0Z -11 1000000000 2001-09-09T01:46:40.0Z -12 1432036180 2015-05-19T11:49:40.0Z -13 1500000000 2017-07-14T02:40:00.0Z -14 2000000000 2033-05-18T03:33:20.0Z -15 2000000000. 2033-05-18T03:33:20.0Z -16 2000000000.0 2033-05-18T03:33:20.0Z -17 2000000000.00 2033-05-18T03:33:20.0Z -18 2000000000.123400 2033-05-18T03:33:20.1Z -19 2000000000.123456 2033-05-18T03:33:20.1Z -20 2000000000.999 2033-05-18T03:33:20.9Z -21 2000000000.999999 2033-05-18T03:33:20.9Z -22 2000000000.999999999 2033-05-18T03:33:21.0Z -23 - - -24 x (error) -25 123x (error) - -mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%3SZ") ./reg_test/input/sec2gmt -n sec gmt -1 0 1970-01-01T00:00:00.000Z -2 1 1970-01-01T00:00:01.000Z -3 10 1970-01-01T00:00:10.000Z -4 100 1970-01-01T00:01:40.000Z -5 1000 1970-01-01T00:16:40.000Z -6 10000 1970-01-01T02:46:40.000Z -7 100000 1970-01-02T03:46:40.000Z -8 1000000 1970-01-12T13:46:40.000Z -9 10000000 1970-04-26T17:46:40.000Z -10 100000000 1973-03-03T09:46:40.000Z -11 1000000000 2001-09-09T01:46:40.000Z -12 1432036180 2015-05-19T11:49:40.000Z -13 1500000000 2017-07-14T02:40:00.000Z -14 2000000000 2033-05-18T03:33:20.000Z -15 2000000000. 2033-05-18T03:33:20.000Z -16 2000000000.0 2033-05-18T03:33:20.000Z -17 2000000000.00 2033-05-18T03:33:20.000Z -18 2000000000.123400 2033-05-18T03:33:20.123Z -19 2000000000.123456 2033-05-18T03:33:20.123Z -20 2000000000.999 2033-05-18T03:33:20.999Z -21 2000000000.999999 2033-05-18T03:33:20.999Z -22 2000000000.999999999 2033-05-18T03:33:21.000Z -23 - - -24 x (error) -25 123x (error) - -mlr --icsv --opprint put $gmt = strftime($sec, "%Y-%m-%dT%H:%M:%6SZ") ./reg_test/input/sec2gmt -n sec gmt -1 0 1970-01-01T00:00:00.000000Z -2 1 1970-01-01T00:00:01.000000Z -3 10 1970-01-01T00:00:10.000000Z -4 100 1970-01-01T00:01:40.000000Z -5 1000 1970-01-01T00:16:40.000000Z -6 10000 1970-01-01T02:46:40.000000Z -7 100000 1970-01-02T03:46:40.000000Z -8 1000000 1970-01-12T13:46:40.000000Z -9 10000000 1970-04-26T17:46:40.000000Z -10 100000000 1973-03-03T09:46:40.000000Z -11 1000000000 2001-09-09T01:46:40.000000Z -12 1432036180 2015-05-19T11:49:40.000000Z -13 1500000000 2017-07-14T02:40:00.000000Z -14 2000000000 2033-05-18T03:33:20.000000Z -15 2000000000. 2033-05-18T03:33:20.000000Z -16 2000000000.0 2033-05-18T03:33:20.000000Z -17 2000000000.00 2033-05-18T03:33:20.000000Z -18 2000000000.123400 2033-05-18T03:33:20.123400Z -19 2000000000.123456 2033-05-18T03:33:20.123456Z -20 2000000000.999 2033-05-18T03:33:20.999000Z -21 2000000000.999999 2033-05-18T03:33:20.999999Z -22 2000000000.999999999 2033-05-18T03:33:21.000000Z -23 - - -24 x (error) -25 123x (error) - -mlr --icsv --opprint put $sec = strptime($gmt, "%Y-%m-%dT%H:%M:%SZ") ./reg_test/input/gmt2sec -gmt sec -1970-01-01T00:00:00Z 0.000000 -1970-01-01T00:00:00.Z 0.000000 -1970-01-01T00:00:01Z 1.000000 -1970-01-01T00:00:01.0Z 1.000000 -1970-01-01T00:00:10Z 10.000000 -1970-01-01T00:00:10.00Z 10.000000 -1970-01-01T00:01:40Z 100.000000 -1970-01-01T00:01:40.1Z 100.100000 -1970-01-01T00:16:40Z 1000.000000 -1970-01-01T00:16:40.12Z 1000.120000 -1970-01-01T02:46:40Z 10000.000000 -1970-01-01T02:46:40.123Z 10000.123000 -1970-01-02T03:46:40Z 100000.000000 -1970-01-02T03:46:40.1234Z 100000.123400 -1970-01-12T13:46:40Z 1000000.000000 -1970-01-12T13:46:40.12345Z 1000000.123450 -1970-04-26T17:46:40Z 10000000.000000 -1970-04-26T17:46:40.123456Z 10000000.123456 -1973-03-03T09:46:40Z 100000000.000000 -1973-03-03T09:46:40.1234567Z 100000000.123457 -2001-09-09T01:46:40Z 1000000000.000000 -2001-09-09T01:46:40.12345678Z 1000000000.123457 -2015-05-19T11:49:40Z 1432036180.000000 -2015-05-19T11:49:40.123456789Z 1432036180.123457 -2017-07-14T02:40:00Z 1500000000.000000 -2017-07-14T02:40:00.999Z 1500000000.999000 -2033-05-18T03:33:20Z 2000000000.000000 -2033-05-18T03:33:20.999999Z 2000000000.999999 - -mlr --csvlite sec2gmt sec ./reg_test/input/sec2gmt -n,sec -1,1970-01-01T00:00:00Z -2,1970-01-01T00:00:01Z -3,1970-01-01T00:00:10Z -4,1970-01-01T00:01:40Z -5,1970-01-01T00:16:40Z -6,1970-01-01T02:46:40Z -7,1970-01-02T03:46:40Z -8,1970-01-12T13:46:40Z -9,1970-04-26T17:46:40Z -10,1973-03-03T09:46:40Z -11,2001-09-09T01:46:40Z -12,2015-05-19T11:49:40Z -13,2017-07-14T02:40:00Z -14,2033-05-18T03:33:20Z -15,2033-05-18T03:33:20Z -16,2033-05-18T03:33:20Z -17,2033-05-18T03:33:20Z -18,2033-05-18T03:33:20Z -19,2033-05-18T03:33:20Z -20,2033-05-18T03:33:20Z -21,2033-05-18T03:33:20Z -22,2033-05-18T03:33:21Z -23, -24,x -25,123x - -mlr --opprint put $hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec ./reg_test/input/sec2xhms -sec hms resec diff -0 00:00:00 0 0 -1 00:00:01 1 0 -59 00:00:59 59 0 -60 00:01:00 60 0 -61 00:01:01 61 0 -3599 00:59:59 3599 0 -3600 01:00:00 3600 0 -3601 01:00:01 3601 0 -86399 23:59:59 86399 0 -86400 24:00:00 86400 0 -86401 24:00:01 86401 0 -863999 239:59:59 863999 0 -864000 240:00:00 864000 0 -864001 240:00:01 864001 0 --1 -00:00:01 -1 0 --59 -00:00:59 -59 0 --60 -00:01:00 -60 0 --61 -00:01:01 -61 0 --3599 -00:59:59 -3599 0 --3600 -01:00:00 -3600 0 --3601 -01:00:01 -3601 0 --86399 -23:59:59 -86399 0 --86400 -24:00:00 -86400 0 --86401 -24:00:01 -86401 0 --863999 -239:59:59 -863999 0 --864000 -240:00:00 -864000 0 --864001 -240:00:01 -864001 0 - -mlr --opprint put $hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec ./reg_test/input/fsec2xhms -sec hms resec diff -0.25 0:00:00.250000 0.250000 0.000000 -1.25 0:00:01.250000 1.250000 0.000000 -59.25 0:00:59.250000 59.250000 0.000000 -60.25 0:01:00.250000 60.250000 0.000000 -61.25 0:01:01.250000 61.250000 0.000000 -3599.25 0:59:59.250000 3599.250000 0.000000 -3600.25 1:00:00.250000 3600.250000 0.000000 -3601.25 1:00:01.250000 3601.250000 0.000000 -86399.25 23:59:59.250000 86399.250000 0.000000 -86400.25 24:00:00.250000 86400.250000 0.000000 -86401.25 24:00:01.250000 86401.250000 0.000000 -863999.25 239:59:59.250000 863999.250000 0.000000 -864000.25 240:00:00.250000 864000.250000 0.000000 -864001.25 240:00:01.250000 864001.250000 0.000000 --0.25 -00:00:00.250000 -0.250000 0.000000 --1.25 -00:00:01.250000 -1.250000 0.000000 --59.25 -00:00:59.250000 -59.250000 0.000000 --60.25 -00:01:00.250000 -60.250000 0.000000 --61.25 -00:01:01.250000 -61.250000 0.000000 --3599.25 -00:59:59.250000 -3599.250000 0.000000 --3600.25 -01:00:00.250000 -3600.250000 0.000000 --3601.25 -01:00:01.250000 -3601.250000 0.000000 --86399.25 -23:59:59.250000 -86399.250000 0.000000 --86400.25 -24:00:00.250000 -86400.250000 0.000000 --86401.25 -24:00:01.250000 -86401.250000 0.000000 --863999.25 -239:59:59.250000 -863999.250000 0.000000 --864000.25 -240:00:00.250000 -864000.250000 0.000000 --864001.25 -240:00:01.250000 -864001.250000 0.000000 - -mlr --opprint put $hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec ./reg_test/input/sec2xhms -sec hms resec diff -0 0s 0 0 -1 1s 1 0 -59 59s 59 0 -60 1m00s 60 0 -61 1m01s 61 0 -3599 59m59s 3599 0 -3600 1h00m00s 3600 0 -3601 1h00m01s 3601 0 -86399 23h59m59s 86399 0 -86400 1d00h00m00s 86400 0 -86401 1d00h00m01s 86401 0 -863999 9d23h59m59s 863999 0 -864000 10d00h00m00s 864000 0 -864001 10d00h00m01s 864001 0 --1 -1s -1 0 --59 -59s -59 0 --60 -1m00s -60 0 --61 -1m01s -61 0 --3599 -59m59s -3599 0 --3600 -1h00m00s -3600 0 --3601 -1h00m01s -3601 0 --86399 -23h59m59s -86399 0 --86400 -1d00h00m00s -86400 0 --86401 -1d00h00m01s -86401 0 --863999 -9d23h59m59s -863999 0 --864000 -10d00h00m00s -864000 0 --864001 -10d00h00m01s -864001 0 - -mlr --opprint put $hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec ./reg_test/input/fsec2xhms -sec hms resec diff -0.25 0.250000s 0.250000 0.000000 -1.25 1.250000s 1.250000 0.000000 -59.25 59.250000s 59.250000 0.000000 -60.25 1m00.250000s 60.250000 0.000000 -61.25 1m01.250000s 61.250000 0.000000 -3599.25 59m59.250000s 3599.250000 0.000000 -3600.25 1h00m00.250000s 3600.250000 0.000000 -3601.25 1h00m01.250000s 3601.250000 0.000000 -86399.25 23h59m59.250000s 86399.250000 0.000000 -86400.25 1d00h00m00.250000s 86400.250000 0.000000 -86401.25 1d00h00m01.250000s 86401.250000 0.000000 -863999.25 9d23h59m59.250000s 863999.250000 0.000000 -864000.25 10d00h00m00.250000s 864000.250000 0.000000 -864001.25 10d00h00m01.250000s 864001.250000 0.000000 --0.25 -0.250000s -0.250000 0.000000 --1.25 -1.250000s -1.250000 0.000000 --59.25 -59.250000s -59.250000 0.000000 --60.25 -1m00.250000s -60.250000 0.000000 --61.25 -1m01.250000s -61.250000 0.000000 --3599.25 -59m59.250000s -3599.250000 0.000000 --3600.25 -1h00m00.250000s -3600.250000 0.000000 --3601.25 -1h00m01.250000s -3601.250000 0.000000 --86399.25 -23h59m59.250000s -86399.250000 0.000000 --86400.25 -1d00h00m00.250000s -86400.250000 0.000000 --86401.25 -1d00h00m01.250000s -86401.250000 0.000000 --863999.25 -9d23h59m59.250000s -863999.250000 0.000000 --864000.25 -10d00h00m00.250000s -864000.250000 0.000000 --864001.25 -10d00h00m01.250000s -864001.250000 0.000000 - -mlr --csvlite sec2gmt sec ./reg_test/input/sec2gmt -n,sec -1,1970-01-01T00:00:00Z -2,1970-01-01T00:00:01Z -3,1970-01-01T00:00:10Z -4,1970-01-01T00:01:40Z -5,1970-01-01T00:16:40Z -6,1970-01-01T02:46:40Z -7,1970-01-02T03:46:40Z -8,1970-01-12T13:46:40Z -9,1970-04-26T17:46:40Z -10,1973-03-03T09:46:40Z -11,2001-09-09T01:46:40Z -12,2015-05-19T11:49:40Z -13,2017-07-14T02:40:00Z -14,2033-05-18T03:33:20Z -15,2033-05-18T03:33:20Z -16,2033-05-18T03:33:20Z -17,2033-05-18T03:33:20Z -18,2033-05-18T03:33:20Z -19,2033-05-18T03:33:20Z -20,2033-05-18T03:33:20Z -21,2033-05-18T03:33:20Z -22,2033-05-18T03:33:21Z -23, -24,x -25,123x - -mlr --csvlite sec2gmtdate sec ./reg_test/input/sec2gmt -n,sec -1,1970-01-01 -2,1970-01-01 -3,1970-01-01 -4,1970-01-01 -5,1970-01-01 -6,1970-01-01 -7,1970-01-02 -8,1970-01-12 -9,1970-04-26 -10,1973-03-03 -11,2001-09-09 -12,2015-05-19 -13,2017-07-14 -14,2033-05-18 -15,2033-05-18 -16,2033-05-18 -17,2033-05-18 -18,2033-05-18 -19,2033-05-18 -20,2033-05-18 -21,2033-05-18 -22,2033-05-18 -23, -24,x -25,123x - - -================================================================ -DSL LOCAL DATE/TIME FUNCTIONS - -mlr --opprint put $b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b) -a b c d -2017-02-18 23:00:00 1487466000.000000 2017-02-18 23:00:00 2017-02-18 -2017-02-18 23:59:59 1487469599.000000 2017-02-18 23:59:59 2017-02-18 -2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 -2017-02-19 00:30:00 1487475000.000000 2017-02-19 00:30:00 2017-02-19 -2017-02-19 01:00:00 1487476800.000000 2017-02-19 01:00:00 2017-02-19 -2017-10-14 23:00:00 1508032800.000000 2017-10-14 23:00:00 2017-10-14 -2017-10-14 23:59:59 1508036399.000000 2017-10-14 23:59:59 2017-10-14 -2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 -2017-10-15 00:30:00 1508038200.000000 2017-10-15 01:30:00 2017-10-15 -2017-10-15 01:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 - -mlr --opprint put $b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b) -a b c d -2017-02-14 00:00:00 1487037600.000000 2017-02-14 00:00:00 2017-02-14 -2017-02-15 00:00:00 1487124000.000000 2017-02-15 00:00:00 2017-02-15 -2017-02-16 00:00:00 1487210400.000000 2017-02-16 00:00:00 2017-02-16 -2017-02-17 00:00:00 1487296800.000000 2017-02-17 00:00:00 2017-02-17 -2017-02-18 00:00:00 1487383200.000000 2017-02-18 00:00:00 2017-02-18 -2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 2017-02-19 -2017-02-20 00:00:00 1487559600.000000 2017-02-20 00:00:00 2017-02-20 -2017-10-12 00:00:00 1507777200.000000 2017-10-12 00:00:00 2017-10-12 -2017-10-13 00:00:00 1507863600.000000 2017-10-13 00:00:00 2017-10-13 -2017-10-14 00:00:00 1507950000.000000 2017-10-14 00:00:00 2017-10-14 -2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 2017-10-15 -2017-10-16 00:00:00 1508119200.000000 2017-10-16 00:00:00 2017-10-16 -2017-10-17 00:00:00 1508205600.000000 2017-10-17 00:00:00 2017-10-17 -2017-10-18 00:00:00 1508292000.000000 2017-10-18 00:00:00 2017-10-18 -2017-10-19 00:00:00 1508378400.000000 2017-10-19 00:00:00 2017-10-19 - -mlr --opprint put $b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S") -a b c -2017-02-18 23:00:00 1487466000.000000 2017-02-18 23:00:00 -2017-02-18 23:59:59 1487469599.000000 2017-02-18 23:59:59 -2017-02-19 00:00:00 1487473200.000000 2017-02-19 00:00:00 -2017-02-19 00:30:00 1487475000.000000 2017-02-19 00:30:00 -2017-02-19 01:00:00 1487476800.000000 2017-02-19 01:00:00 -2017-10-14 23:00:00 1508032800.000000 2017-10-14 23:00:00 -2017-10-14 23:59:59 1508036399.000000 2017-10-14 23:59:59 -2017-10-15 00:00:00 1508036400.000000 2017-10-15 01:00:00 -2017-10-15 00:30:00 1508038200.000000 2017-10-15 01:30:00 -2017-10-15 01:00:00 1508036400.000000 2017-10-15 01:00:00 - - -================================================================ -DSL SUB/GSUB/REGEX_EXTRACT - -mlr --opprint put $y = sub($x, "e.*l", "") ./reg_test/input/sub.dat -x y -hello ho -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "e.*l"i, "") ./reg_test/input/sub.dat -x y -hello ho -HELLO HO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "e.*"."l", "") ./reg_test/input/sub.dat -x y -hello ho -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "e.*l", "y123y") ./reg_test/input/sub.dat -x y -hello hy123yo -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "e.*l"i, "y123y") ./reg_test/input/sub.dat -x y -hello hy123yo -HELLO Hy123yO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "e.*"."l", "y123y") ./reg_test/input/sub.dat -x y -hello hy123yo -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "([hg])e.*l(.)", "y\1y123\2y") ./reg_test/input/sub.dat -x y -hello yhy123oy -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "([hg])e.*l.", "y\1y123\2y") ./reg_test/input/sub.dat -x y -hello yhy123y -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "([hg])e.*l(.)", "y\1y123.y") ./reg_test/input/sub.dat -x y -hello yhy123.y -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = sub($x, "a", "aa") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg aabcdefg -ababbabbba aababbabbba -LMNOP LMNOP -ABCDEFG ABCDEFG -ABABBABBBA ABABBABBBA - -mlr --opprint put $y = gsub($x, "a", "aa") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg aabcdefg -ababbabbba aabaabbaabbbaa -LMNOP LMNOP -ABCDEFG ABCDEFG -ABABBABBBA ABABBABBBA - -mlr --opprint put $y = gsub($x, "A", "Aa") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg abcdefg -ababbabbba ababbabbba -LMNOP LMNOP -ABCDEFG AaBCDEFG -ABABBABBBA AaBAaBBAaBBBAa - -mlr --opprint put $y = gsub($x, "a"i, "Aa") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg Aabcdefg -ababbabbba AabAabbAabbbAa -LMNOP LMNOP -ABCDEFG AaBCDEFG -ABABBABBBA AaBAaBBAaBBBAa - -mlr --opprint put $y = gsub($x, "A"i, "Aa") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg Aabcdefg -ababbabbba AabAabbAabbbAa -LMNOP LMNOP -ABCDEFG AaBCDEFG -ABABBABBBA AaBAaBBAaBBBAa - -mlr --opprint put $y = gsub($x, "a(.)", "aa\1\1\1") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg aabbbcdefg -ababbabbba aabbbaabbbbaabbbbba -LMNOP LMNOP -ABCDEFG ABCDEFG -ABABBABBBA ABABBABBBA - -mlr --opprint put $y = sub($x, "a", "") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg bcdefg -ababbabbba babbabbba -LMNOP LMNOP -ABCDEFG ABCDEFG -ABABBABBBA ABABBABBBA - -mlr --opprint put $y = gsub($x, "a", "") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg bcdefg -ababbabbba bbbbbb -LMNOP LMNOP -ABCDEFG ABCDEFG -ABABBABBBA ABABBABBBA - -mlr --opprint put $y = gsub($x, "A", "") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg abcdefg -ababbabbba ababbabbba -LMNOP LMNOP -ABCDEFG BCDEFG -ABABBABBBA BBBBBB - -mlr --opprint put $y = gsub($x, "a"i, "") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg bcdefg -ababbabbba bbbbbb -LMNOP LMNOP -ABCDEFG BCDEFG -ABABBABBBA BBBBBB - -mlr --opprint put $y = gsub($x, "A"i, "") ./reg_test/input/gsub.dat -x y -lmnop lmnop -abcdefg bcdefg -ababbabbba bbbbbb -LMNOP LMNOP -ABCDEFG BCDEFG -ABABBABBBA BBBBBB - -mlr --oxtab cat ./reg_test/input/subtab.dkvp -x afoob - -x a\tb - -x a\\tb - -x a b - -z - -x - -mlr --oxtab put -f ./reg_test/input/subtab1.mlr ./reg_test/input/subtab.dkvp -x afoob -y afoob - -x a\tb -y a\tb - -x a\\tb -y a\\tb - -x a b -y aTABb - -z - -x -y - -mlr --oxtab put -f ./reg_test/input/subtab2.mlr ./reg_test/input/subtab.dkvp -x afoob -y afoob - -x a\tb -y aTABb - -x a\\tb -y a\TABb - -x a b -y a b - -z - -x -y - -mlr --oxtab put -f ./reg_test/input/subtab3.mlr ./reg_test/input/subtab.dkvp -x afoob -y afoob - -x a\tb -y a\tb - -x a\\tb -y a\\tb - -x a b -y a b - -z - -x -y - -mlr --oxtab put -f ./reg_test/input/subtab4.mlr ./reg_test/input/subtab.dkvp -x afoob -y afoob - -x a\tb -y a b - -x a\\tb -y a\ b - -x a b -y a b - -z - -x -y - -mlr --opprint put $y = ssub($x, "HE", "") ./reg_test/input/sub.dat -x y -hello hello -HELLO LLO -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HE", "HE") ./reg_test/input/sub.dat -x y -hello hello -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HE", "12345") ./reg_test/input/sub.dat -x y -hello hello -HELLO 12345LLO -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LL", "1") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE1O -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LL", "12") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE12O -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LL", "12345") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE12345O -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LLO", "") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LLO", "12") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE12 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LLO", "123") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE123 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "LLO", "123456") ./reg_test/input/sub.dat -x y -hello hello -HELLO HE123456 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HELLO", "") ./reg_test/input/sub.dat -x y -hello hello -HELLO - -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HELLO", "1234") ./reg_test/input/sub.dat -x y -hello hello -HELLO 1234 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HELLO", "12345") ./reg_test/input/sub.dat -x y -hello hello -HELLO 12345 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "HELLO", "1234678") ./reg_test/input/sub.dat -x y -hello hello -HELLO 1234678 -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "nonesuch", "") ./reg_test/input/sub.dat -x y -hello hello -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "nonesuch", "1234") ./reg_test/input/sub.dat -x y -hello hello -HELLO HELLO -world world -WORLD WORLD - -mlr --opprint put $y = ssub($x, "nonesuch", "1234567890") ./reg_test/input/sub.dat -x y -hello hello -HELLO HELLO -world world -WORLD WORLD - -mlr --oxtab put $y = regextract($x, "[A-Z]+") ./reg_test/input/sub.dat -x hello - -x HELLO -y HELLO - -x world - -x WORLD -y WORLD - -mlr --oxtab put $y = regextract($x, "[A-Z]*") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y HELLO - -x world -y - -x WORLD -y WORLD - -mlr --oxtab put $y = regextract($x, "[a-z]+") ./reg_test/input/sub.dat -x hello -y hello - -x HELLO - -x world -y world - -x WORLD - -mlr --oxtab put $y = regextract($x, "[a-z]*") ./reg_test/input/sub.dat -x hello -y hello - -x HELLO -y - -x world -y world - -x WORLD -y - -mlr --oxtab put $y = regextract($x, "[0-9]+") ./reg_test/input/sub.dat -x hello - -x HELLO - -x world - -x WORLD - -mlr --oxtab put $y = regextract($x, "[0-9]*") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract($x, "[ef]+") ./reg_test/input/sub.dat -x hello -y e - -x HELLO - -x world - -x WORLD - -mlr --oxtab put $y = regextract($x, "[ef]*") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract($x, "[hi]+") ./reg_test/input/sub.dat -x hello -y h - -x HELLO - -x world - -x WORLD - -mlr --oxtab put $y = regextract($x, "[hi]*") ./reg_test/input/sub.dat -x hello -y h - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract($x, "[op]+") ./reg_test/input/sub.dat -x hello -y o - -x HELLO - -x world -y o - -x WORLD - -mlr --oxtab put $y = regextract($x, "[op]*") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract_or_else($x, "[A-Z]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y DEFAULT - -x HELLO -y HELLO - -x world -y DEFAULT - -x WORLD -y WORLD - -mlr --oxtab put $y = regextract_or_else($x, "[A-Z]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y HELLO - -x world -y - -x WORLD -y WORLD - -mlr --oxtab put $y = regextract_or_else($x, "[a-z]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y hello - -x HELLO -y DEFAULT - -x world -y world - -x WORLD -y DEFAULT - -mlr --oxtab put $y = regextract_or_else($x, "[a-z]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y hello - -x HELLO -y - -x world -y world - -x WORLD -y - -mlr --oxtab put $y = regextract_or_else($x, "[0-9]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y DEFAULT - -x HELLO -y DEFAULT - -x world -y DEFAULT - -x WORLD -y DEFAULT - -mlr --oxtab put $y = regextract_or_else($x, "[0-9]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract_or_else($x, "[ef]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y e - -x HELLO -y DEFAULT - -x world -y DEFAULT - -x WORLD -y DEFAULT - -mlr --oxtab put $y = regextract_or_else($x, "[ef]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract_or_else($x, "[hi]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y h - -x HELLO -y DEFAULT - -x world -y DEFAULT - -x WORLD -y DEFAULT - -mlr --oxtab put $y = regextract_or_else($x, "[hi]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y h - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --oxtab put $y = regextract_or_else($x, "[op]+", "DEFAULT") ./reg_test/input/sub.dat -x hello -y o - -x HELLO -y DEFAULT - -x world -y o - -x WORLD -y DEFAULT - -mlr --oxtab put $y = regextract_or_else($x, "[op]*", "DEFAULT") ./reg_test/input/sub.dat -x hello -y - -x HELLO -y - -x world -y - -x WORLD -y - -mlr --nidx put $1 = sub($1, "ab(.)d(..)g", "ab<<\1>>d<<\2>>g") -ab<>d<>g - -mlr --nidx put $1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g") -ab<>d<>g - -mlr --nidx put $1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g") -abXdefg - -mlr --nidx put $1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g") -ab<<>>d<>g - - -================================================================ -DSL SUBSTR - -mlr put -q - int n = strlen($x); - print "input= <<".$x.">>"; - for (i = -n-2; i <= n+2; i += 1) { - for (j = -n-2; j <= n+2; j += 1) { - print "i: ".fmtnum(i,"%3lld") - ." j:".fmtnum(j,"%3lld") - ." substr(".$x.",".fmtnum(i,"%3lld").",".fmtnum(j,"%3lld")."): <<" - .substr($x, i, j) .">>"; - } - print; -} - -input= <<>> -i: -2 j: -2 substr(, -2, -2): <<>> -i: -2 j: -1 substr(, -2, -1): <<>> -i: -2 j: 0 substr(, -2, 0): <<>> -i: -2 j: 1 substr(, -2, 1): <<>> -i: -2 j: 2 substr(, -2, 2): <<>> - -i: -1 j: -2 substr(, -1, -2): <<>> -i: -1 j: -1 substr(, -1, -1): <<>> -i: -1 j: 0 substr(, -1, 0): <<>> -i: -1 j: 1 substr(, -1, 1): <<>> -i: -1 j: 2 substr(, -1, 2): <<>> - -i: 0 j: -2 substr(, 0, -2): <<>> -i: 0 j: -1 substr(, 0, -1): <<>> -i: 0 j: 0 substr(, 0, 0): <<>> -i: 0 j: 1 substr(, 0, 1): <<>> -i: 0 j: 2 substr(, 0, 2): <<>> - -i: 1 j: -2 substr(, 1, -2): <<>> -i: 1 j: -1 substr(, 1, -1): <<>> -i: 1 j: 0 substr(, 1, 0): <<>> -i: 1 j: 1 substr(, 1, 1): <<>> -i: 1 j: 2 substr(, 1, 2): <<>> - -i: 2 j: -2 substr(, 2, -2): <<>> -i: 2 j: -1 substr(, 2, -1): <<>> -i: 2 j: 0 substr(, 2, 0): <<>> -i: 2 j: 1 substr(, 2, 1): <<>> -i: 2 j: 2 substr(, 2, 2): <<>> - -input= <> -i: -3 j: -3 substr(o, -3, -3): <<>> -i: -3 j: -2 substr(o, -3, -2): <<>> -i: -3 j: -1 substr(o, -3, -1): <<>> -i: -3 j: 0 substr(o, -3, 0): <<>> -i: -3 j: 1 substr(o, -3, 1): <<>> -i: -3 j: 2 substr(o, -3, 2): <<>> -i: -3 j: 3 substr(o, -3, 3): <<>> - -i: -2 j: -3 substr(o, -2, -3): <<>> -i: -2 j: -2 substr(o, -2, -2): <<>> -i: -2 j: -1 substr(o, -2, -1): <<>> -i: -2 j: 0 substr(o, -2, 0): <<>> -i: -2 j: 1 substr(o, -2, 1): <<>> -i: -2 j: 2 substr(o, -2, 2): <<>> -i: -2 j: 3 substr(o, -2, 3): <<>> - -i: -1 j: -3 substr(o, -1, -3): <<>> -i: -1 j: -2 substr(o, -1, -2): <<>> -i: -1 j: -1 substr(o, -1, -1): <> -i: -1 j: 0 substr(o, -1, 0): <> -i: -1 j: 1 substr(o, -1, 1): <<>> -i: -1 j: 2 substr(o, -1, 2): <<>> -i: -1 j: 3 substr(o, -1, 3): <<>> - -i: 0 j: -3 substr(o, 0, -3): <<>> -i: 0 j: -2 substr(o, 0, -2): <<>> -i: 0 j: -1 substr(o, 0, -1): <> -i: 0 j: 0 substr(o, 0, 0): <> -i: 0 j: 1 substr(o, 0, 1): <<>> -i: 0 j: 2 substr(o, 0, 2): <<>> -i: 0 j: 3 substr(o, 0, 3): <<>> - -i: 1 j: -3 substr(o, 1, -3): <<>> -i: 1 j: -2 substr(o, 1, -2): <<>> -i: 1 j: -1 substr(o, 1, -1): <<>> -i: 1 j: 0 substr(o, 1, 0): <<>> -i: 1 j: 1 substr(o, 1, 1): <<>> -i: 1 j: 2 substr(o, 1, 2): <<>> -i: 1 j: 3 substr(o, 1, 3): <<>> - -i: 2 j: -3 substr(o, 2, -3): <<>> -i: 2 j: -2 substr(o, 2, -2): <<>> -i: 2 j: -1 substr(o, 2, -1): <<>> -i: 2 j: 0 substr(o, 2, 0): <<>> -i: 2 j: 1 substr(o, 2, 1): <<>> -i: 2 j: 2 substr(o, 2, 2): <<>> -i: 2 j: 3 substr(o, 2, 3): <<>> - -i: 3 j: -3 substr(o, 3, -3): <<>> -i: 3 j: -2 substr(o, 3, -2): <<>> -i: 3 j: -1 substr(o, 3, -1): <<>> -i: 3 j: 0 substr(o, 3, 0): <<>> -i: 3 j: 1 substr(o, 3, 1): <<>> -i: 3 j: 2 substr(o, 3, 2): <<>> -i: 3 j: 3 substr(o, 3, 3): <<>> - -input= <> -i: -4 j: -4 substr(o1, -4, -4): <<>> -i: -4 j: -3 substr(o1, -4, -3): <<>> -i: -4 j: -2 substr(o1, -4, -2): <<>> -i: -4 j: -1 substr(o1, -4, -1): <<>> -i: -4 j: 0 substr(o1, -4, 0): <<>> -i: -4 j: 1 substr(o1, -4, 1): <<>> -i: -4 j: 2 substr(o1, -4, 2): <<>> -i: -4 j: 3 substr(o1, -4, 3): <<>> -i: -4 j: 4 substr(o1, -4, 4): <<>> - -i: -3 j: -4 substr(o1, -3, -4): <<>> -i: -3 j: -3 substr(o1, -3, -3): <<>> -i: -3 j: -2 substr(o1, -3, -2): <<>> -i: -3 j: -1 substr(o1, -3, -1): <<>> -i: -3 j: 0 substr(o1, -3, 0): <<>> -i: -3 j: 1 substr(o1, -3, 1): <<>> -i: -3 j: 2 substr(o1, -3, 2): <<>> -i: -3 j: 3 substr(o1, -3, 3): <<>> -i: -3 j: 4 substr(o1, -3, 4): <<>> - -i: -2 j: -4 substr(o1, -2, -4): <<>> -i: -2 j: -3 substr(o1, -2, -3): <<>> -i: -2 j: -2 substr(o1, -2, -2): <> -i: -2 j: -1 substr(o1, -2, -1): <> -i: -2 j: 0 substr(o1, -2, 0): <> -i: -2 j: 1 substr(o1, -2, 1): <> -i: -2 j: 2 substr(o1, -2, 2): <<>> -i: -2 j: 3 substr(o1, -2, 3): <<>> -i: -2 j: 4 substr(o1, -2, 4): <<>> - -i: -1 j: -4 substr(o1, -1, -4): <<>> -i: -1 j: -3 substr(o1, -1, -3): <<>> -i: -1 j: -2 substr(o1, -1, -2): <<>> -i: -1 j: -1 substr(o1, -1, -1): <<1>> -i: -1 j: 0 substr(o1, -1, 0): <<>> -i: -1 j: 1 substr(o1, -1, 1): <<1>> -i: -1 j: 2 substr(o1, -1, 2): <<>> -i: -1 j: 3 substr(o1, -1, 3): <<>> -i: -1 j: 4 substr(o1, -1, 4): <<>> - -i: 0 j: -4 substr(o1, 0, -4): <<>> -i: 0 j: -3 substr(o1, 0, -3): <<>> -i: 0 j: -2 substr(o1, 0, -2): <> -i: 0 j: -1 substr(o1, 0, -1): <> -i: 0 j: 0 substr(o1, 0, 0): <> -i: 0 j: 1 substr(o1, 0, 1): <> -i: 0 j: 2 substr(o1, 0, 2): <<>> -i: 0 j: 3 substr(o1, 0, 3): <<>> -i: 0 j: 4 substr(o1, 0, 4): <<>> - -i: 1 j: -4 substr(o1, 1, -4): <<>> -i: 1 j: -3 substr(o1, 1, -3): <<>> -i: 1 j: -2 substr(o1, 1, -2): <<>> -i: 1 j: -1 substr(o1, 1, -1): <<1>> -i: 1 j: 0 substr(o1, 1, 0): <<>> -i: 1 j: 1 substr(o1, 1, 1): <<1>> -i: 1 j: 2 substr(o1, 1, 2): <<>> -i: 1 j: 3 substr(o1, 1, 3): <<>> -i: 1 j: 4 substr(o1, 1, 4): <<>> - -i: 2 j: -4 substr(o1, 2, -4): <<>> -i: 2 j: -3 substr(o1, 2, -3): <<>> -i: 2 j: -2 substr(o1, 2, -2): <<>> -i: 2 j: -1 substr(o1, 2, -1): <<>> -i: 2 j: 0 substr(o1, 2, 0): <<>> -i: 2 j: 1 substr(o1, 2, 1): <<>> -i: 2 j: 2 substr(o1, 2, 2): <<>> -i: 2 j: 3 substr(o1, 2, 3): <<>> -i: 2 j: 4 substr(o1, 2, 4): <<>> - -i: 3 j: -4 substr(o1, 3, -4): <<>> -i: 3 j: -3 substr(o1, 3, -3): <<>> -i: 3 j: -2 substr(o1, 3, -2): <<>> -i: 3 j: -1 substr(o1, 3, -1): <<>> -i: 3 j: 0 substr(o1, 3, 0): <<>> -i: 3 j: 1 substr(o1, 3, 1): <<>> -i: 3 j: 2 substr(o1, 3, 2): <<>> -i: 3 j: 3 substr(o1, 3, 3): <<>> -i: 3 j: 4 substr(o1, 3, 4): <<>> - -i: 4 j: -4 substr(o1, 4, -4): <<>> -i: 4 j: -3 substr(o1, 4, -3): <<>> -i: 4 j: -2 substr(o1, 4, -2): <<>> -i: 4 j: -1 substr(o1, 4, -1): <<>> -i: 4 j: 0 substr(o1, 4, 0): <<>> -i: 4 j: 1 substr(o1, 4, 1): <<>> -i: 4 j: 2 substr(o1, 4, 2): <<>> -i: 4 j: 3 substr(o1, 4, 3): <<>> -i: 4 j: 4 substr(o1, 4, 4): <<>> - -input= <> -i: -12 j:-12 substr(o123456789,-12,-12): <<>> -i: -12 j:-11 substr(o123456789,-12,-11): <<>> -i: -12 j:-10 substr(o123456789,-12,-10): <<>> -i: -12 j: -9 substr(o123456789,-12, -9): <<>> -i: -12 j: -8 substr(o123456789,-12, -8): <<>> -i: -12 j: -7 substr(o123456789,-12, -7): <<>> -i: -12 j: -6 substr(o123456789,-12, -6): <<>> -i: -12 j: -5 substr(o123456789,-12, -5): <<>> -i: -12 j: -4 substr(o123456789,-12, -4): <<>> -i: -12 j: -3 substr(o123456789,-12, -3): <<>> -i: -12 j: -2 substr(o123456789,-12, -2): <<>> -i: -12 j: -1 substr(o123456789,-12, -1): <<>> -i: -12 j: 0 substr(o123456789,-12, 0): <<>> -i: -12 j: 1 substr(o123456789,-12, 1): <<>> -i: -12 j: 2 substr(o123456789,-12, 2): <<>> -i: -12 j: 3 substr(o123456789,-12, 3): <<>> -i: -12 j: 4 substr(o123456789,-12, 4): <<>> -i: -12 j: 5 substr(o123456789,-12, 5): <<>> -i: -12 j: 6 substr(o123456789,-12, 6): <<>> -i: -12 j: 7 substr(o123456789,-12, 7): <<>> -i: -12 j: 8 substr(o123456789,-12, 8): <<>> -i: -12 j: 9 substr(o123456789,-12, 9): <<>> -i: -12 j: 10 substr(o123456789,-12, 10): <<>> -i: -12 j: 11 substr(o123456789,-12, 11): <<>> -i: -12 j: 12 substr(o123456789,-12, 12): <<>> - -i: -11 j:-12 substr(o123456789,-11,-12): <<>> -i: -11 j:-11 substr(o123456789,-11,-11): <<>> -i: -11 j:-10 substr(o123456789,-11,-10): <<>> -i: -11 j: -9 substr(o123456789,-11, -9): <<>> -i: -11 j: -8 substr(o123456789,-11, -8): <<>> -i: -11 j: -7 substr(o123456789,-11, -7): <<>> -i: -11 j: -6 substr(o123456789,-11, -6): <<>> -i: -11 j: -5 substr(o123456789,-11, -5): <<>> -i: -11 j: -4 substr(o123456789,-11, -4): <<>> -i: -11 j: -3 substr(o123456789,-11, -3): <<>> -i: -11 j: -2 substr(o123456789,-11, -2): <<>> -i: -11 j: -1 substr(o123456789,-11, -1): <<>> -i: -11 j: 0 substr(o123456789,-11, 0): <<>> -i: -11 j: 1 substr(o123456789,-11, 1): <<>> -i: -11 j: 2 substr(o123456789,-11, 2): <<>> -i: -11 j: 3 substr(o123456789,-11, 3): <<>> -i: -11 j: 4 substr(o123456789,-11, 4): <<>> -i: -11 j: 5 substr(o123456789,-11, 5): <<>> -i: -11 j: 6 substr(o123456789,-11, 6): <<>> -i: -11 j: 7 substr(o123456789,-11, 7): <<>> -i: -11 j: 8 substr(o123456789,-11, 8): <<>> -i: -11 j: 9 substr(o123456789,-11, 9): <<>> -i: -11 j: 10 substr(o123456789,-11, 10): <<>> -i: -11 j: 11 substr(o123456789,-11, 11): <<>> -i: -11 j: 12 substr(o123456789,-11, 12): <<>> - -i: -10 j:-12 substr(o123456789,-10,-12): <<>> -i: -10 j:-11 substr(o123456789,-10,-11): <<>> -i: -10 j:-10 substr(o123456789,-10,-10): <> -i: -10 j: -9 substr(o123456789,-10, -9): <> -i: -10 j: -8 substr(o123456789,-10, -8): <> -i: -10 j: -7 substr(o123456789,-10, -7): <> -i: -10 j: -6 substr(o123456789,-10, -6): <> -i: -10 j: -5 substr(o123456789,-10, -5): <> -i: -10 j: -4 substr(o123456789,-10, -4): <> -i: -10 j: -3 substr(o123456789,-10, -3): <> -i: -10 j: -2 substr(o123456789,-10, -2): <> -i: -10 j: -1 substr(o123456789,-10, -1): <> -i: -10 j: 0 substr(o123456789,-10, 0): <> -i: -10 j: 1 substr(o123456789,-10, 1): <> -i: -10 j: 2 substr(o123456789,-10, 2): <> -i: -10 j: 3 substr(o123456789,-10, 3): <> -i: -10 j: 4 substr(o123456789,-10, 4): <> -i: -10 j: 5 substr(o123456789,-10, 5): <> -i: -10 j: 6 substr(o123456789,-10, 6): <> -i: -10 j: 7 substr(o123456789,-10, 7): <> -i: -10 j: 8 substr(o123456789,-10, 8): <> -i: -10 j: 9 substr(o123456789,-10, 9): <> -i: -10 j: 10 substr(o123456789,-10, 10): <<>> -i: -10 j: 11 substr(o123456789,-10, 11): <<>> -i: -10 j: 12 substr(o123456789,-10, 12): <<>> - -i: -9 j:-12 substr(o123456789, -9,-12): <<>> -i: -9 j:-11 substr(o123456789, -9,-11): <<>> -i: -9 j:-10 substr(o123456789, -9,-10): <<>> -i: -9 j: -9 substr(o123456789, -9, -9): <<1>> -i: -9 j: -8 substr(o123456789, -9, -8): <<12>> -i: -9 j: -7 substr(o123456789, -9, -7): <<123>> -i: -9 j: -6 substr(o123456789, -9, -6): <<1234>> -i: -9 j: -5 substr(o123456789, -9, -5): <<12345>> -i: -9 j: -4 substr(o123456789, -9, -4): <<123456>> -i: -9 j: -3 substr(o123456789, -9, -3): <<1234567>> -i: -9 j: -2 substr(o123456789, -9, -2): <<12345678>> -i: -9 j: -1 substr(o123456789, -9, -1): <<123456789>> -i: -9 j: 0 substr(o123456789, -9, 0): <<>> -i: -9 j: 1 substr(o123456789, -9, 1): <<1>> -i: -9 j: 2 substr(o123456789, -9, 2): <<12>> -i: -9 j: 3 substr(o123456789, -9, 3): <<123>> -i: -9 j: 4 substr(o123456789, -9, 4): <<1234>> -i: -9 j: 5 substr(o123456789, -9, 5): <<12345>> -i: -9 j: 6 substr(o123456789, -9, 6): <<123456>> -i: -9 j: 7 substr(o123456789, -9, 7): <<1234567>> -i: -9 j: 8 substr(o123456789, -9, 8): <<12345678>> -i: -9 j: 9 substr(o123456789, -9, 9): <<123456789>> -i: -9 j: 10 substr(o123456789, -9, 10): <<>> -i: -9 j: 11 substr(o123456789, -9, 11): <<>> -i: -9 j: 12 substr(o123456789, -9, 12): <<>> - -i: -8 j:-12 substr(o123456789, -8,-12): <<>> -i: -8 j:-11 substr(o123456789, -8,-11): <<>> -i: -8 j:-10 substr(o123456789, -8,-10): <<>> -i: -8 j: -9 substr(o123456789, -8, -9): <<>> -i: -8 j: -8 substr(o123456789, -8, -8): <<2>> -i: -8 j: -7 substr(o123456789, -8, -7): <<23>> -i: -8 j: -6 substr(o123456789, -8, -6): <<234>> -i: -8 j: -5 substr(o123456789, -8, -5): <<2345>> -i: -8 j: -4 substr(o123456789, -8, -4): <<23456>> -i: -8 j: -3 substr(o123456789, -8, -3): <<234567>> -i: -8 j: -2 substr(o123456789, -8, -2): <<2345678>> -i: -8 j: -1 substr(o123456789, -8, -1): <<23456789>> -i: -8 j: 0 substr(o123456789, -8, 0): <<>> -i: -8 j: 1 substr(o123456789, -8, 1): <<>> -i: -8 j: 2 substr(o123456789, -8, 2): <<2>> -i: -8 j: 3 substr(o123456789, -8, 3): <<23>> -i: -8 j: 4 substr(o123456789, -8, 4): <<234>> -i: -8 j: 5 substr(o123456789, -8, 5): <<2345>> -i: -8 j: 6 substr(o123456789, -8, 6): <<23456>> -i: -8 j: 7 substr(o123456789, -8, 7): <<234567>> -i: -8 j: 8 substr(o123456789, -8, 8): <<2345678>> -i: -8 j: 9 substr(o123456789, -8, 9): <<23456789>> -i: -8 j: 10 substr(o123456789, -8, 10): <<>> -i: -8 j: 11 substr(o123456789, -8, 11): <<>> -i: -8 j: 12 substr(o123456789, -8, 12): <<>> - -i: -7 j:-12 substr(o123456789, -7,-12): <<>> -i: -7 j:-11 substr(o123456789, -7,-11): <<>> -i: -7 j:-10 substr(o123456789, -7,-10): <<>> -i: -7 j: -9 substr(o123456789, -7, -9): <<>> -i: -7 j: -8 substr(o123456789, -7, -8): <<>> -i: -7 j: -7 substr(o123456789, -7, -7): <<3>> -i: -7 j: -6 substr(o123456789, -7, -6): <<34>> -i: -7 j: -5 substr(o123456789, -7, -5): <<345>> -i: -7 j: -4 substr(o123456789, -7, -4): <<3456>> -i: -7 j: -3 substr(o123456789, -7, -3): <<34567>> -i: -7 j: -2 substr(o123456789, -7, -2): <<345678>> -i: -7 j: -1 substr(o123456789, -7, -1): <<3456789>> -i: -7 j: 0 substr(o123456789, -7, 0): <<>> -i: -7 j: 1 substr(o123456789, -7, 1): <<>> -i: -7 j: 2 substr(o123456789, -7, 2): <<>> -i: -7 j: 3 substr(o123456789, -7, 3): <<3>> -i: -7 j: 4 substr(o123456789, -7, 4): <<34>> -i: -7 j: 5 substr(o123456789, -7, 5): <<345>> -i: -7 j: 6 substr(o123456789, -7, 6): <<3456>> -i: -7 j: 7 substr(o123456789, -7, 7): <<34567>> -i: -7 j: 8 substr(o123456789, -7, 8): <<345678>> -i: -7 j: 9 substr(o123456789, -7, 9): <<3456789>> -i: -7 j: 10 substr(o123456789, -7, 10): <<>> -i: -7 j: 11 substr(o123456789, -7, 11): <<>> -i: -7 j: 12 substr(o123456789, -7, 12): <<>> - -i: -6 j:-12 substr(o123456789, -6,-12): <<>> -i: -6 j:-11 substr(o123456789, -6,-11): <<>> -i: -6 j:-10 substr(o123456789, -6,-10): <<>> -i: -6 j: -9 substr(o123456789, -6, -9): <<>> -i: -6 j: -8 substr(o123456789, -6, -8): <<>> -i: -6 j: -7 substr(o123456789, -6, -7): <<>> -i: -6 j: -6 substr(o123456789, -6, -6): <<4>> -i: -6 j: -5 substr(o123456789, -6, -5): <<45>> -i: -6 j: -4 substr(o123456789, -6, -4): <<456>> -i: -6 j: -3 substr(o123456789, -6, -3): <<4567>> -i: -6 j: -2 substr(o123456789, -6, -2): <<45678>> -i: -6 j: -1 substr(o123456789, -6, -1): <<456789>> -i: -6 j: 0 substr(o123456789, -6, 0): <<>> -i: -6 j: 1 substr(o123456789, -6, 1): <<>> -i: -6 j: 2 substr(o123456789, -6, 2): <<>> -i: -6 j: 3 substr(o123456789, -6, 3): <<>> -i: -6 j: 4 substr(o123456789, -6, 4): <<4>> -i: -6 j: 5 substr(o123456789, -6, 5): <<45>> -i: -6 j: 6 substr(o123456789, -6, 6): <<456>> -i: -6 j: 7 substr(o123456789, -6, 7): <<4567>> -i: -6 j: 8 substr(o123456789, -6, 8): <<45678>> -i: -6 j: 9 substr(o123456789, -6, 9): <<456789>> -i: -6 j: 10 substr(o123456789, -6, 10): <<>> -i: -6 j: 11 substr(o123456789, -6, 11): <<>> -i: -6 j: 12 substr(o123456789, -6, 12): <<>> - -i: -5 j:-12 substr(o123456789, -5,-12): <<>> -i: -5 j:-11 substr(o123456789, -5,-11): <<>> -i: -5 j:-10 substr(o123456789, -5,-10): <<>> -i: -5 j: -9 substr(o123456789, -5, -9): <<>> -i: -5 j: -8 substr(o123456789, -5, -8): <<>> -i: -5 j: -7 substr(o123456789, -5, -7): <<>> -i: -5 j: -6 substr(o123456789, -5, -6): <<>> -i: -5 j: -5 substr(o123456789, -5, -5): <<5>> -i: -5 j: -4 substr(o123456789, -5, -4): <<56>> -i: -5 j: -3 substr(o123456789, -5, -3): <<567>> -i: -5 j: -2 substr(o123456789, -5, -2): <<5678>> -i: -5 j: -1 substr(o123456789, -5, -1): <<56789>> -i: -5 j: 0 substr(o123456789, -5, 0): <<>> -i: -5 j: 1 substr(o123456789, -5, 1): <<>> -i: -5 j: 2 substr(o123456789, -5, 2): <<>> -i: -5 j: 3 substr(o123456789, -5, 3): <<>> -i: -5 j: 4 substr(o123456789, -5, 4): <<>> -i: -5 j: 5 substr(o123456789, -5, 5): <<5>> -i: -5 j: 6 substr(o123456789, -5, 6): <<56>> -i: -5 j: 7 substr(o123456789, -5, 7): <<567>> -i: -5 j: 8 substr(o123456789, -5, 8): <<5678>> -i: -5 j: 9 substr(o123456789, -5, 9): <<56789>> -i: -5 j: 10 substr(o123456789, -5, 10): <<>> -i: -5 j: 11 substr(o123456789, -5, 11): <<>> -i: -5 j: 12 substr(o123456789, -5, 12): <<>> - -i: -4 j:-12 substr(o123456789, -4,-12): <<>> -i: -4 j:-11 substr(o123456789, -4,-11): <<>> -i: -4 j:-10 substr(o123456789, -4,-10): <<>> -i: -4 j: -9 substr(o123456789, -4, -9): <<>> -i: -4 j: -8 substr(o123456789, -4, -8): <<>> -i: -4 j: -7 substr(o123456789, -4, -7): <<>> -i: -4 j: -6 substr(o123456789, -4, -6): <<>> -i: -4 j: -5 substr(o123456789, -4, -5): <<>> -i: -4 j: -4 substr(o123456789, -4, -4): <<6>> -i: -4 j: -3 substr(o123456789, -4, -3): <<67>> -i: -4 j: -2 substr(o123456789, -4, -2): <<678>> -i: -4 j: -1 substr(o123456789, -4, -1): <<6789>> -i: -4 j: 0 substr(o123456789, -4, 0): <<>> -i: -4 j: 1 substr(o123456789, -4, 1): <<>> -i: -4 j: 2 substr(o123456789, -4, 2): <<>> -i: -4 j: 3 substr(o123456789, -4, 3): <<>> -i: -4 j: 4 substr(o123456789, -4, 4): <<>> -i: -4 j: 5 substr(o123456789, -4, 5): <<>> -i: -4 j: 6 substr(o123456789, -4, 6): <<6>> -i: -4 j: 7 substr(o123456789, -4, 7): <<67>> -i: -4 j: 8 substr(o123456789, -4, 8): <<678>> -i: -4 j: 9 substr(o123456789, -4, 9): <<6789>> -i: -4 j: 10 substr(o123456789, -4, 10): <<>> -i: -4 j: 11 substr(o123456789, -4, 11): <<>> -i: -4 j: 12 substr(o123456789, -4, 12): <<>> - -i: -3 j:-12 substr(o123456789, -3,-12): <<>> -i: -3 j:-11 substr(o123456789, -3,-11): <<>> -i: -3 j:-10 substr(o123456789, -3,-10): <<>> -i: -3 j: -9 substr(o123456789, -3, -9): <<>> -i: -3 j: -8 substr(o123456789, -3, -8): <<>> -i: -3 j: -7 substr(o123456789, -3, -7): <<>> -i: -3 j: -6 substr(o123456789, -3, -6): <<>> -i: -3 j: -5 substr(o123456789, -3, -5): <<>> -i: -3 j: -4 substr(o123456789, -3, -4): <<>> -i: -3 j: -3 substr(o123456789, -3, -3): <<7>> -i: -3 j: -2 substr(o123456789, -3, -2): <<78>> -i: -3 j: -1 substr(o123456789, -3, -1): <<789>> -i: -3 j: 0 substr(o123456789, -3, 0): <<>> -i: -3 j: 1 substr(o123456789, -3, 1): <<>> -i: -3 j: 2 substr(o123456789, -3, 2): <<>> -i: -3 j: 3 substr(o123456789, -3, 3): <<>> -i: -3 j: 4 substr(o123456789, -3, 4): <<>> -i: -3 j: 5 substr(o123456789, -3, 5): <<>> -i: -3 j: 6 substr(o123456789, -3, 6): <<>> -i: -3 j: 7 substr(o123456789, -3, 7): <<7>> -i: -3 j: 8 substr(o123456789, -3, 8): <<78>> -i: -3 j: 9 substr(o123456789, -3, 9): <<789>> -i: -3 j: 10 substr(o123456789, -3, 10): <<>> -i: -3 j: 11 substr(o123456789, -3, 11): <<>> -i: -3 j: 12 substr(o123456789, -3, 12): <<>> - -i: -2 j:-12 substr(o123456789, -2,-12): <<>> -i: -2 j:-11 substr(o123456789, -2,-11): <<>> -i: -2 j:-10 substr(o123456789, -2,-10): <<>> -i: -2 j: -9 substr(o123456789, -2, -9): <<>> -i: -2 j: -8 substr(o123456789, -2, -8): <<>> -i: -2 j: -7 substr(o123456789, -2, -7): <<>> -i: -2 j: -6 substr(o123456789, -2, -6): <<>> -i: -2 j: -5 substr(o123456789, -2, -5): <<>> -i: -2 j: -4 substr(o123456789, -2, -4): <<>> -i: -2 j: -3 substr(o123456789, -2, -3): <<>> -i: -2 j: -2 substr(o123456789, -2, -2): <<8>> -i: -2 j: -1 substr(o123456789, -2, -1): <<89>> -i: -2 j: 0 substr(o123456789, -2, 0): <<>> -i: -2 j: 1 substr(o123456789, -2, 1): <<>> -i: -2 j: 2 substr(o123456789, -2, 2): <<>> -i: -2 j: 3 substr(o123456789, -2, 3): <<>> -i: -2 j: 4 substr(o123456789, -2, 4): <<>> -i: -2 j: 5 substr(o123456789, -2, 5): <<>> -i: -2 j: 6 substr(o123456789, -2, 6): <<>> -i: -2 j: 7 substr(o123456789, -2, 7): <<>> -i: -2 j: 8 substr(o123456789, -2, 8): <<8>> -i: -2 j: 9 substr(o123456789, -2, 9): <<89>> -i: -2 j: 10 substr(o123456789, -2, 10): <<>> -i: -2 j: 11 substr(o123456789, -2, 11): <<>> -i: -2 j: 12 substr(o123456789, -2, 12): <<>> - -i: -1 j:-12 substr(o123456789, -1,-12): <<>> -i: -1 j:-11 substr(o123456789, -1,-11): <<>> -i: -1 j:-10 substr(o123456789, -1,-10): <<>> -i: -1 j: -9 substr(o123456789, -1, -9): <<>> -i: -1 j: -8 substr(o123456789, -1, -8): <<>> -i: -1 j: -7 substr(o123456789, -1, -7): <<>> -i: -1 j: -6 substr(o123456789, -1, -6): <<>> -i: -1 j: -5 substr(o123456789, -1, -5): <<>> -i: -1 j: -4 substr(o123456789, -1, -4): <<>> -i: -1 j: -3 substr(o123456789, -1, -3): <<>> -i: -1 j: -2 substr(o123456789, -1, -2): <<>> -i: -1 j: -1 substr(o123456789, -1, -1): <<9>> -i: -1 j: 0 substr(o123456789, -1, 0): <<>> -i: -1 j: 1 substr(o123456789, -1, 1): <<>> -i: -1 j: 2 substr(o123456789, -1, 2): <<>> -i: -1 j: 3 substr(o123456789, -1, 3): <<>> -i: -1 j: 4 substr(o123456789, -1, 4): <<>> -i: -1 j: 5 substr(o123456789, -1, 5): <<>> -i: -1 j: 6 substr(o123456789, -1, 6): <<>> -i: -1 j: 7 substr(o123456789, -1, 7): <<>> -i: -1 j: 8 substr(o123456789, -1, 8): <<>> -i: -1 j: 9 substr(o123456789, -1, 9): <<9>> -i: -1 j: 10 substr(o123456789, -1, 10): <<>> -i: -1 j: 11 substr(o123456789, -1, 11): <<>> -i: -1 j: 12 substr(o123456789, -1, 12): <<>> - -i: 0 j:-12 substr(o123456789, 0,-12): <<>> -i: 0 j:-11 substr(o123456789, 0,-11): <<>> -i: 0 j:-10 substr(o123456789, 0,-10): <> -i: 0 j: -9 substr(o123456789, 0, -9): <> -i: 0 j: -8 substr(o123456789, 0, -8): <> -i: 0 j: -7 substr(o123456789, 0, -7): <> -i: 0 j: -6 substr(o123456789, 0, -6): <> -i: 0 j: -5 substr(o123456789, 0, -5): <> -i: 0 j: -4 substr(o123456789, 0, -4): <> -i: 0 j: -3 substr(o123456789, 0, -3): <> -i: 0 j: -2 substr(o123456789, 0, -2): <> -i: 0 j: -1 substr(o123456789, 0, -1): <> -i: 0 j: 0 substr(o123456789, 0, 0): <> -i: 0 j: 1 substr(o123456789, 0, 1): <> -i: 0 j: 2 substr(o123456789, 0, 2): <> -i: 0 j: 3 substr(o123456789, 0, 3): <> -i: 0 j: 4 substr(o123456789, 0, 4): <> -i: 0 j: 5 substr(o123456789, 0, 5): <> -i: 0 j: 6 substr(o123456789, 0, 6): <> -i: 0 j: 7 substr(o123456789, 0, 7): <> -i: 0 j: 8 substr(o123456789, 0, 8): <> -i: 0 j: 9 substr(o123456789, 0, 9): <> -i: 0 j: 10 substr(o123456789, 0, 10): <<>> -i: 0 j: 11 substr(o123456789, 0, 11): <<>> -i: 0 j: 12 substr(o123456789, 0, 12): <<>> - -i: 1 j:-12 substr(o123456789, 1,-12): <<>> -i: 1 j:-11 substr(o123456789, 1,-11): <<>> -i: 1 j:-10 substr(o123456789, 1,-10): <<>> -i: 1 j: -9 substr(o123456789, 1, -9): <<1>> -i: 1 j: -8 substr(o123456789, 1, -8): <<12>> -i: 1 j: -7 substr(o123456789, 1, -7): <<123>> -i: 1 j: -6 substr(o123456789, 1, -6): <<1234>> -i: 1 j: -5 substr(o123456789, 1, -5): <<12345>> -i: 1 j: -4 substr(o123456789, 1, -4): <<123456>> -i: 1 j: -3 substr(o123456789, 1, -3): <<1234567>> -i: 1 j: -2 substr(o123456789, 1, -2): <<12345678>> -i: 1 j: -1 substr(o123456789, 1, -1): <<123456789>> -i: 1 j: 0 substr(o123456789, 1, 0): <<>> -i: 1 j: 1 substr(o123456789, 1, 1): <<1>> -i: 1 j: 2 substr(o123456789, 1, 2): <<12>> -i: 1 j: 3 substr(o123456789, 1, 3): <<123>> -i: 1 j: 4 substr(o123456789, 1, 4): <<1234>> -i: 1 j: 5 substr(o123456789, 1, 5): <<12345>> -i: 1 j: 6 substr(o123456789, 1, 6): <<123456>> -i: 1 j: 7 substr(o123456789, 1, 7): <<1234567>> -i: 1 j: 8 substr(o123456789, 1, 8): <<12345678>> -i: 1 j: 9 substr(o123456789, 1, 9): <<123456789>> -i: 1 j: 10 substr(o123456789, 1, 10): <<>> -i: 1 j: 11 substr(o123456789, 1, 11): <<>> -i: 1 j: 12 substr(o123456789, 1, 12): <<>> - -i: 2 j:-12 substr(o123456789, 2,-12): <<>> -i: 2 j:-11 substr(o123456789, 2,-11): <<>> -i: 2 j:-10 substr(o123456789, 2,-10): <<>> -i: 2 j: -9 substr(o123456789, 2, -9): <<>> -i: 2 j: -8 substr(o123456789, 2, -8): <<2>> -i: 2 j: -7 substr(o123456789, 2, -7): <<23>> -i: 2 j: -6 substr(o123456789, 2, -6): <<234>> -i: 2 j: -5 substr(o123456789, 2, -5): <<2345>> -i: 2 j: -4 substr(o123456789, 2, -4): <<23456>> -i: 2 j: -3 substr(o123456789, 2, -3): <<234567>> -i: 2 j: -2 substr(o123456789, 2, -2): <<2345678>> -i: 2 j: -1 substr(o123456789, 2, -1): <<23456789>> -i: 2 j: 0 substr(o123456789, 2, 0): <<>> -i: 2 j: 1 substr(o123456789, 2, 1): <<>> -i: 2 j: 2 substr(o123456789, 2, 2): <<2>> -i: 2 j: 3 substr(o123456789, 2, 3): <<23>> -i: 2 j: 4 substr(o123456789, 2, 4): <<234>> -i: 2 j: 5 substr(o123456789, 2, 5): <<2345>> -i: 2 j: 6 substr(o123456789, 2, 6): <<23456>> -i: 2 j: 7 substr(o123456789, 2, 7): <<234567>> -i: 2 j: 8 substr(o123456789, 2, 8): <<2345678>> -i: 2 j: 9 substr(o123456789, 2, 9): <<23456789>> -i: 2 j: 10 substr(o123456789, 2, 10): <<>> -i: 2 j: 11 substr(o123456789, 2, 11): <<>> -i: 2 j: 12 substr(o123456789, 2, 12): <<>> - -i: 3 j:-12 substr(o123456789, 3,-12): <<>> -i: 3 j:-11 substr(o123456789, 3,-11): <<>> -i: 3 j:-10 substr(o123456789, 3,-10): <<>> -i: 3 j: -9 substr(o123456789, 3, -9): <<>> -i: 3 j: -8 substr(o123456789, 3, -8): <<>> -i: 3 j: -7 substr(o123456789, 3, -7): <<3>> -i: 3 j: -6 substr(o123456789, 3, -6): <<34>> -i: 3 j: -5 substr(o123456789, 3, -5): <<345>> -i: 3 j: -4 substr(o123456789, 3, -4): <<3456>> -i: 3 j: -3 substr(o123456789, 3, -3): <<34567>> -i: 3 j: -2 substr(o123456789, 3, -2): <<345678>> -i: 3 j: -1 substr(o123456789, 3, -1): <<3456789>> -i: 3 j: 0 substr(o123456789, 3, 0): <<>> -i: 3 j: 1 substr(o123456789, 3, 1): <<>> -i: 3 j: 2 substr(o123456789, 3, 2): <<>> -i: 3 j: 3 substr(o123456789, 3, 3): <<3>> -i: 3 j: 4 substr(o123456789, 3, 4): <<34>> -i: 3 j: 5 substr(o123456789, 3, 5): <<345>> -i: 3 j: 6 substr(o123456789, 3, 6): <<3456>> -i: 3 j: 7 substr(o123456789, 3, 7): <<34567>> -i: 3 j: 8 substr(o123456789, 3, 8): <<345678>> -i: 3 j: 9 substr(o123456789, 3, 9): <<3456789>> -i: 3 j: 10 substr(o123456789, 3, 10): <<>> -i: 3 j: 11 substr(o123456789, 3, 11): <<>> -i: 3 j: 12 substr(o123456789, 3, 12): <<>> - -i: 4 j:-12 substr(o123456789, 4,-12): <<>> -i: 4 j:-11 substr(o123456789, 4,-11): <<>> -i: 4 j:-10 substr(o123456789, 4,-10): <<>> -i: 4 j: -9 substr(o123456789, 4, -9): <<>> -i: 4 j: -8 substr(o123456789, 4, -8): <<>> -i: 4 j: -7 substr(o123456789, 4, -7): <<>> -i: 4 j: -6 substr(o123456789, 4, -6): <<4>> -i: 4 j: -5 substr(o123456789, 4, -5): <<45>> -i: 4 j: -4 substr(o123456789, 4, -4): <<456>> -i: 4 j: -3 substr(o123456789, 4, -3): <<4567>> -i: 4 j: -2 substr(o123456789, 4, -2): <<45678>> -i: 4 j: -1 substr(o123456789, 4, -1): <<456789>> -i: 4 j: 0 substr(o123456789, 4, 0): <<>> -i: 4 j: 1 substr(o123456789, 4, 1): <<>> -i: 4 j: 2 substr(o123456789, 4, 2): <<>> -i: 4 j: 3 substr(o123456789, 4, 3): <<>> -i: 4 j: 4 substr(o123456789, 4, 4): <<4>> -i: 4 j: 5 substr(o123456789, 4, 5): <<45>> -i: 4 j: 6 substr(o123456789, 4, 6): <<456>> -i: 4 j: 7 substr(o123456789, 4, 7): <<4567>> -i: 4 j: 8 substr(o123456789, 4, 8): <<45678>> -i: 4 j: 9 substr(o123456789, 4, 9): <<456789>> -i: 4 j: 10 substr(o123456789, 4, 10): <<>> -i: 4 j: 11 substr(o123456789, 4, 11): <<>> -i: 4 j: 12 substr(o123456789, 4, 12): <<>> - -i: 5 j:-12 substr(o123456789, 5,-12): <<>> -i: 5 j:-11 substr(o123456789, 5,-11): <<>> -i: 5 j:-10 substr(o123456789, 5,-10): <<>> -i: 5 j: -9 substr(o123456789, 5, -9): <<>> -i: 5 j: -8 substr(o123456789, 5, -8): <<>> -i: 5 j: -7 substr(o123456789, 5, -7): <<>> -i: 5 j: -6 substr(o123456789, 5, -6): <<>> -i: 5 j: -5 substr(o123456789, 5, -5): <<5>> -i: 5 j: -4 substr(o123456789, 5, -4): <<56>> -i: 5 j: -3 substr(o123456789, 5, -3): <<567>> -i: 5 j: -2 substr(o123456789, 5, -2): <<5678>> -i: 5 j: -1 substr(o123456789, 5, -1): <<56789>> -i: 5 j: 0 substr(o123456789, 5, 0): <<>> -i: 5 j: 1 substr(o123456789, 5, 1): <<>> -i: 5 j: 2 substr(o123456789, 5, 2): <<>> -i: 5 j: 3 substr(o123456789, 5, 3): <<>> -i: 5 j: 4 substr(o123456789, 5, 4): <<>> -i: 5 j: 5 substr(o123456789, 5, 5): <<5>> -i: 5 j: 6 substr(o123456789, 5, 6): <<56>> -i: 5 j: 7 substr(o123456789, 5, 7): <<567>> -i: 5 j: 8 substr(o123456789, 5, 8): <<5678>> -i: 5 j: 9 substr(o123456789, 5, 9): <<56789>> -i: 5 j: 10 substr(o123456789, 5, 10): <<>> -i: 5 j: 11 substr(o123456789, 5, 11): <<>> -i: 5 j: 12 substr(o123456789, 5, 12): <<>> - -i: 6 j:-12 substr(o123456789, 6,-12): <<>> -i: 6 j:-11 substr(o123456789, 6,-11): <<>> -i: 6 j:-10 substr(o123456789, 6,-10): <<>> -i: 6 j: -9 substr(o123456789, 6, -9): <<>> -i: 6 j: -8 substr(o123456789, 6, -8): <<>> -i: 6 j: -7 substr(o123456789, 6, -7): <<>> -i: 6 j: -6 substr(o123456789, 6, -6): <<>> -i: 6 j: -5 substr(o123456789, 6, -5): <<>> -i: 6 j: -4 substr(o123456789, 6, -4): <<6>> -i: 6 j: -3 substr(o123456789, 6, -3): <<67>> -i: 6 j: -2 substr(o123456789, 6, -2): <<678>> -i: 6 j: -1 substr(o123456789, 6, -1): <<6789>> -i: 6 j: 0 substr(o123456789, 6, 0): <<>> -i: 6 j: 1 substr(o123456789, 6, 1): <<>> -i: 6 j: 2 substr(o123456789, 6, 2): <<>> -i: 6 j: 3 substr(o123456789, 6, 3): <<>> -i: 6 j: 4 substr(o123456789, 6, 4): <<>> -i: 6 j: 5 substr(o123456789, 6, 5): <<>> -i: 6 j: 6 substr(o123456789, 6, 6): <<6>> -i: 6 j: 7 substr(o123456789, 6, 7): <<67>> -i: 6 j: 8 substr(o123456789, 6, 8): <<678>> -i: 6 j: 9 substr(o123456789, 6, 9): <<6789>> -i: 6 j: 10 substr(o123456789, 6, 10): <<>> -i: 6 j: 11 substr(o123456789, 6, 11): <<>> -i: 6 j: 12 substr(o123456789, 6, 12): <<>> - -i: 7 j:-12 substr(o123456789, 7,-12): <<>> -i: 7 j:-11 substr(o123456789, 7,-11): <<>> -i: 7 j:-10 substr(o123456789, 7,-10): <<>> -i: 7 j: -9 substr(o123456789, 7, -9): <<>> -i: 7 j: -8 substr(o123456789, 7, -8): <<>> -i: 7 j: -7 substr(o123456789, 7, -7): <<>> -i: 7 j: -6 substr(o123456789, 7, -6): <<>> -i: 7 j: -5 substr(o123456789, 7, -5): <<>> -i: 7 j: -4 substr(o123456789, 7, -4): <<>> -i: 7 j: -3 substr(o123456789, 7, -3): <<7>> -i: 7 j: -2 substr(o123456789, 7, -2): <<78>> -i: 7 j: -1 substr(o123456789, 7, -1): <<789>> -i: 7 j: 0 substr(o123456789, 7, 0): <<>> -i: 7 j: 1 substr(o123456789, 7, 1): <<>> -i: 7 j: 2 substr(o123456789, 7, 2): <<>> -i: 7 j: 3 substr(o123456789, 7, 3): <<>> -i: 7 j: 4 substr(o123456789, 7, 4): <<>> -i: 7 j: 5 substr(o123456789, 7, 5): <<>> -i: 7 j: 6 substr(o123456789, 7, 6): <<>> -i: 7 j: 7 substr(o123456789, 7, 7): <<7>> -i: 7 j: 8 substr(o123456789, 7, 8): <<78>> -i: 7 j: 9 substr(o123456789, 7, 9): <<789>> -i: 7 j: 10 substr(o123456789, 7, 10): <<>> -i: 7 j: 11 substr(o123456789, 7, 11): <<>> -i: 7 j: 12 substr(o123456789, 7, 12): <<>> - -i: 8 j:-12 substr(o123456789, 8,-12): <<>> -i: 8 j:-11 substr(o123456789, 8,-11): <<>> -i: 8 j:-10 substr(o123456789, 8,-10): <<>> -i: 8 j: -9 substr(o123456789, 8, -9): <<>> -i: 8 j: -8 substr(o123456789, 8, -8): <<>> -i: 8 j: -7 substr(o123456789, 8, -7): <<>> -i: 8 j: -6 substr(o123456789, 8, -6): <<>> -i: 8 j: -5 substr(o123456789, 8, -5): <<>> -i: 8 j: -4 substr(o123456789, 8, -4): <<>> -i: 8 j: -3 substr(o123456789, 8, -3): <<>> -i: 8 j: -2 substr(o123456789, 8, -2): <<8>> -i: 8 j: -1 substr(o123456789, 8, -1): <<89>> -i: 8 j: 0 substr(o123456789, 8, 0): <<>> -i: 8 j: 1 substr(o123456789, 8, 1): <<>> -i: 8 j: 2 substr(o123456789, 8, 2): <<>> -i: 8 j: 3 substr(o123456789, 8, 3): <<>> -i: 8 j: 4 substr(o123456789, 8, 4): <<>> -i: 8 j: 5 substr(o123456789, 8, 5): <<>> -i: 8 j: 6 substr(o123456789, 8, 6): <<>> -i: 8 j: 7 substr(o123456789, 8, 7): <<>> -i: 8 j: 8 substr(o123456789, 8, 8): <<8>> -i: 8 j: 9 substr(o123456789, 8, 9): <<89>> -i: 8 j: 10 substr(o123456789, 8, 10): <<>> -i: 8 j: 11 substr(o123456789, 8, 11): <<>> -i: 8 j: 12 substr(o123456789, 8, 12): <<>> - -i: 9 j:-12 substr(o123456789, 9,-12): <<>> -i: 9 j:-11 substr(o123456789, 9,-11): <<>> -i: 9 j:-10 substr(o123456789, 9,-10): <<>> -i: 9 j: -9 substr(o123456789, 9, -9): <<>> -i: 9 j: -8 substr(o123456789, 9, -8): <<>> -i: 9 j: -7 substr(o123456789, 9, -7): <<>> -i: 9 j: -6 substr(o123456789, 9, -6): <<>> -i: 9 j: -5 substr(o123456789, 9, -5): <<>> -i: 9 j: -4 substr(o123456789, 9, -4): <<>> -i: 9 j: -3 substr(o123456789, 9, -3): <<>> -i: 9 j: -2 substr(o123456789, 9, -2): <<>> -i: 9 j: -1 substr(o123456789, 9, -1): <<9>> -i: 9 j: 0 substr(o123456789, 9, 0): <<>> -i: 9 j: 1 substr(o123456789, 9, 1): <<>> -i: 9 j: 2 substr(o123456789, 9, 2): <<>> -i: 9 j: 3 substr(o123456789, 9, 3): <<>> -i: 9 j: 4 substr(o123456789, 9, 4): <<>> -i: 9 j: 5 substr(o123456789, 9, 5): <<>> -i: 9 j: 6 substr(o123456789, 9, 6): <<>> -i: 9 j: 7 substr(o123456789, 9, 7): <<>> -i: 9 j: 8 substr(o123456789, 9, 8): <<>> -i: 9 j: 9 substr(o123456789, 9, 9): <<9>> -i: 9 j: 10 substr(o123456789, 9, 10): <<>> -i: 9 j: 11 substr(o123456789, 9, 11): <<>> -i: 9 j: 12 substr(o123456789, 9, 12): <<>> - -i: 10 j:-12 substr(o123456789, 10,-12): <<>> -i: 10 j:-11 substr(o123456789, 10,-11): <<>> -i: 10 j:-10 substr(o123456789, 10,-10): <<>> -i: 10 j: -9 substr(o123456789, 10, -9): <<>> -i: 10 j: -8 substr(o123456789, 10, -8): <<>> -i: 10 j: -7 substr(o123456789, 10, -7): <<>> -i: 10 j: -6 substr(o123456789, 10, -6): <<>> -i: 10 j: -5 substr(o123456789, 10, -5): <<>> -i: 10 j: -4 substr(o123456789, 10, -4): <<>> -i: 10 j: -3 substr(o123456789, 10, -3): <<>> -i: 10 j: -2 substr(o123456789, 10, -2): <<>> -i: 10 j: -1 substr(o123456789, 10, -1): <<>> -i: 10 j: 0 substr(o123456789, 10, 0): <<>> -i: 10 j: 1 substr(o123456789, 10, 1): <<>> -i: 10 j: 2 substr(o123456789, 10, 2): <<>> -i: 10 j: 3 substr(o123456789, 10, 3): <<>> -i: 10 j: 4 substr(o123456789, 10, 4): <<>> -i: 10 j: 5 substr(o123456789, 10, 5): <<>> -i: 10 j: 6 substr(o123456789, 10, 6): <<>> -i: 10 j: 7 substr(o123456789, 10, 7): <<>> -i: 10 j: 8 substr(o123456789, 10, 8): <<>> -i: 10 j: 9 substr(o123456789, 10, 9): <<>> -i: 10 j: 10 substr(o123456789, 10, 10): <<>> -i: 10 j: 11 substr(o123456789, 10, 11): <<>> -i: 10 j: 12 substr(o123456789, 10, 12): <<>> - -i: 11 j:-12 substr(o123456789, 11,-12): <<>> -i: 11 j:-11 substr(o123456789, 11,-11): <<>> -i: 11 j:-10 substr(o123456789, 11,-10): <<>> -i: 11 j: -9 substr(o123456789, 11, -9): <<>> -i: 11 j: -8 substr(o123456789, 11, -8): <<>> -i: 11 j: -7 substr(o123456789, 11, -7): <<>> -i: 11 j: -6 substr(o123456789, 11, -6): <<>> -i: 11 j: -5 substr(o123456789, 11, -5): <<>> -i: 11 j: -4 substr(o123456789, 11, -4): <<>> -i: 11 j: -3 substr(o123456789, 11, -3): <<>> -i: 11 j: -2 substr(o123456789, 11, -2): <<>> -i: 11 j: -1 substr(o123456789, 11, -1): <<>> -i: 11 j: 0 substr(o123456789, 11, 0): <<>> -i: 11 j: 1 substr(o123456789, 11, 1): <<>> -i: 11 j: 2 substr(o123456789, 11, 2): <<>> -i: 11 j: 3 substr(o123456789, 11, 3): <<>> -i: 11 j: 4 substr(o123456789, 11, 4): <<>> -i: 11 j: 5 substr(o123456789, 11, 5): <<>> -i: 11 j: 6 substr(o123456789, 11, 6): <<>> -i: 11 j: 7 substr(o123456789, 11, 7): <<>> -i: 11 j: 8 substr(o123456789, 11, 8): <<>> -i: 11 j: 9 substr(o123456789, 11, 9): <<>> -i: 11 j: 10 substr(o123456789, 11, 10): <<>> -i: 11 j: 11 substr(o123456789, 11, 11): <<>> -i: 11 j: 12 substr(o123456789, 11, 12): <<>> - -i: 12 j:-12 substr(o123456789, 12,-12): <<>> -i: 12 j:-11 substr(o123456789, 12,-11): <<>> -i: 12 j:-10 substr(o123456789, 12,-10): <<>> -i: 12 j: -9 substr(o123456789, 12, -9): <<>> -i: 12 j: -8 substr(o123456789, 12, -8): <<>> -i: 12 j: -7 substr(o123456789, 12, -7): <<>> -i: 12 j: -6 substr(o123456789, 12, -6): <<>> -i: 12 j: -5 substr(o123456789, 12, -5): <<>> -i: 12 j: -4 substr(o123456789, 12, -4): <<>> -i: 12 j: -3 substr(o123456789, 12, -3): <<>> -i: 12 j: -2 substr(o123456789, 12, -2): <<>> -i: 12 j: -1 substr(o123456789, 12, -1): <<>> -i: 12 j: 0 substr(o123456789, 12, 0): <<>> -i: 12 j: 1 substr(o123456789, 12, 1): <<>> -i: 12 j: 2 substr(o123456789, 12, 2): <<>> -i: 12 j: 3 substr(o123456789, 12, 3): <<>> -i: 12 j: 4 substr(o123456789, 12, 4): <<>> -i: 12 j: 5 substr(o123456789, 12, 5): <<>> -i: 12 j: 6 substr(o123456789, 12, 6): <<>> -i: 12 j: 7 substr(o123456789, 12, 7): <<>> -i: 12 j: 8 substr(o123456789, 12, 8): <<>> -i: 12 j: 9 substr(o123456789, 12, 9): <<>> -i: 12 j: 10 substr(o123456789, 12, 10): <<>> -i: 12 j: 11 substr(o123456789, 12, 11): <<>> -i: 12 j: 12 substr(o123456789, 12, 12): <<>> - - - -================================================================ -DSL SYSTEM - -mlr put $counter = system("echo X".NR."Y") ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,counter=X1Y -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,counter=X2Y -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,counter=X3Y -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,counter=X4Y -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,counter=X5Y -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,counter=X6Y -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,counter=X7Y -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,counter=X8Y -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,counter=X9Y -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,counter=X10Y - - -================================================================ -DSL OOSVARS - -mlr --opprint put -v begin{@ox=0}; $d=$x-@ox; @ox=$x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="-", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="-", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y d -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 -eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 -wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 -eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 -wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 -zee pan 6 0.5271261600918548 0.49322128674835697 -0.046163 -eks zee 7 0.6117840605678454 0.1878849191181694 0.084658 -zee wye 8 0.5985540091064224 0.976181385699006 -0.013230 -hat wye 9 0.03144187646093577 0.7495507603507059 -0.567112 -pan wye 10 0.5026260055412137 0.9526183602969864 0.471184 - -mlr --opprint put -v begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="1.0", type=NUMERIC_LITERAL. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="1.0", type=NUMERIC_LITERAL. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y d x_ratio -pan pan 1 0.3467901443380824 0.7268028627434533 1.000000 1.000000 -eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 -wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 -eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 -wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 -zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 -eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 -zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 -hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 -pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 - -mlr --opprint put -v $d=$x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y d x_ratio -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 1.000000 -eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 -wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 -eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 -wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 -zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 -eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 -zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 -hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 -pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 - -mlr --opprint put -v begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x then step -a ratio -f x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="1.0", type=NUMERIC_LITERAL. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="? :", type=OPERATOR: - text="==", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="no", type=STRING_LITERAL. - text="1.0", type=NUMERIC_LITERAL. - text="/", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y d x_ratio -pan pan 1 0.3467901443380824 0.7268028627434533 1.000000 1.000000 -eks pan 2 0.7586799647899636 0.5221511083334797 2.187721 2.187721 -wye wye 3 0.20460330576630303 0.33831852551664776 0.269683 0.269683 -eks wye 4 0.38139939387114097 0.13418874328430463 1.864092 1.864092 -wye pan 5 0.5732889198020006 0.8636244699032729 1.503120 1.503120 -zee pan 6 0.5271261600918548 0.49322128674835697 0.919477 0.919477 -eks zee 7 0.6117840605678454 0.1878849191181694 1.160603 1.160603 -zee wye 8 0.5985540091064224 0.976181385699006 0.978375 0.978375 -hat wye 9 0.03144187646093577 0.7495507603507059 0.052530 0.052530 -pan wye 10 0.5026260055412137 0.9526183602969864 15.985878 15.985878 - -mlr --opprint put -v begin{@rsum = 0}; @rsum = @rsum + $x; $rsum = @rsum ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="rsum", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="rsum", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="rsum", type=STRING_LITERAL. - -a b i x y rsum -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 -eks pan 2 0.7586799647899636 0.5221511083334797 1.105470 -wye wye 3 0.20460330576630303 0.33831852551664776 1.310073 -eks wye 4 0.38139939387114097 0.13418874328430463 1.691473 -wye pan 5 0.5732889198020006 0.8636244699032729 2.264762 -zee pan 6 0.5271261600918548 0.49322128674835697 2.791888 -eks zee 7 0.6117840605678454 0.1878849191181694 3.403672 -zee wye 8 0.5985540091064224 0.976181385699006 4.002226 -hat wye 9 0.03144187646093577 0.7495507603507059 4.033668 -pan wye 10 0.5026260055412137 0.9526183602969864 4.536294 - -mlr --opprint put -v begin{@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="za", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zb", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zc", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="za", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zb", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zc", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - -a b i x y za zb zc d -pan pan 1 0.3467901443380824 0.7268028627434533 0 0 0 0 -eks pan 2 0.7586799647899636 0.5221511083334797 0 0 1 1 -wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 -eks wye 4 0.38139939387114097 0.13418874328430463 1 2 3 6 -wye pan 5 0.5732889198020006 0.8636244699032729 2 3 4 9 -zee pan 6 0.5271261600918548 0.49322128674835697 3 4 5 12 -eks zee 7 0.6117840605678454 0.1878849191181694 4 5 6 15 -zee wye 8 0.5985540091064224 0.976181385699006 5 6 7 18 -hat wye 9 0.03144187646093577 0.7495507603507059 6 7 8 21 -pan wye 10 0.5026260055412137 0.9526183602969864 7 8 9 24 - -mlr --opprint put -v begin {@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="za", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zb", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zc", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="za", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zb", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="zc", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="+", type=OPERATOR: - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - -a b i x y za zb zc d -pan pan 1 0.3467901443380824 0.7268028627434533 0 0 0 0 -eks pan 2 0.7586799647899636 0.5221511083334797 0 0 1 1 -wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 -eks wye 4 0.38139939387114097 0.13418874328430463 1 2 3 6 -wye pan 5 0.5732889198020006 0.8636244699032729 2 3 4 9 -zee pan 6 0.5271261600918548 0.49322128674835697 3 4 5 12 -eks zee 7 0.6117840605678454 0.1878849191181694 4 5 6 15 -zee wye 8 0.5985540091064224 0.976181385699006 5 6 7 18 -hat wye 9 0.03144187646093577 0.7495507603507059 6 7 8 21 -pan wye 10 0.5026260055412137 0.9526183602969864 7 8 9 24 - -mlr --opprint put -v begin{@ox=0}; $d=$x-@ox; @ox=$x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="-", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="-", type=OPERATOR: - text="x", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="ox", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y d -pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 -eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 -wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 -eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 -wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 -zee pan 6 0.5271261600918548 0.49322128674835697 -0.046163 -eks zee 7 0.6117840605678454 0.1878849191181694 0.084658 -zee wye 8 0.5985540091064224 0.976181385699006 -0.013230 -hat wye 9 0.03144187646093577 0.7495507603507059 -0.567112 -pan wye 10 0.5026260055412137 0.9526183602969864 0.471184 - -mlr put -v @a=$a; @b=$b; @c=$x; end {emitf @a; emitf @b; emitf @c} ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan -b=wye -c=0.502626 - -mlr put -v @a=$a; @b=$b; @c=$x; end{emitf @a, @b, @c} ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=wye,c=0.502626 - -mlr --opprint put -v begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x; end{@mean=@sum/@count; emitf @mean} ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="0.0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="/", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="stream", type=STREAM: - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="0.0", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="/", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="stream", type=STREAM: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mean -0.453629 - -mlr --opprint put -v end{@mean=@sum/@count; emitf @mean}; begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="/", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="stream", type=STREAM: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="0.0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="0.0", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="/", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="mean", type=STRING_LITERAL. - text="stream", type=STREAM: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="count", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="sum", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mean -0.453629 - -mlr put -v begin{ @a = @b[1] }; $c = @d; @e[$i][2+$j][3] = $4; end{@f[@g[5][@h]] = 6} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="c", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="d", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="e", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="j", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - text="4", type=FIELD_NAME. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="f", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="g", type=STRING_LITERAL. - text="5", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="h", type=STRING_LITERAL. - text="6", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="f", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="g", type=STRING_LITERAL. - text="5", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="h", type=STRING_LITERAL. - text="6", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="c", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="d", type=STRING_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="e", type=STRING_LITERAL. - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="2", type=NUMERIC_LITERAL. - text="j", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - text="4", type=FIELD_NAME. - - -mlr put @y[$a]=$y; end{dump} ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -{ - "y": { - "pan": 0.952618, - "eks": 0.187885, - "wye": 0.863624, - "zee": 0.976181, - "hat": 0.749551 - } -} - -mlr stats1 -a sum -f y -g a ./reg_test/input/abixy -a=pan,y_sum=1.679421 -a=eks,y_sum=0.844225 -a=wye,y_sum=1.201943 -a=zee,y_sum=1.469403 -a=hat,y_sum=0.749551 - -mlr put @y_sum[$a] = $y; end{dump} ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -{ - "y_sum": { - "pan": 0.952618, - "eks": 0.187885, - "wye": 0.863624, - "zee": 0.976181, - "hat": 0.749551 - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "s": 9, - "u": { - "1": { - "2": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "s": 9, - "t": { - }, - "u": { - "1": { - "2": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9 - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump} ./reg_test/input/unset1.dkvp -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - "2": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9 - }, - "u": { - "1": { - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "s": 9, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "s": 9, - "t": { - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "4": { - "5": 9, - "6": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset all; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ -} - -mlr put -q @s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @*; dump} ./reg_test/input/unset4.dkvp -{ - "s": 9, - "t": { - "1": 9, - "4": 9 - }, - "u": { - "1": { - "2": 9, - "3": 9 - }, - "4": { - "5": 9, - "6": 9 - } - } -} -{ -} - -mlr put unset $x ./reg_test/input/unset4.dkvp -a=1,b=2 -a=1,b=3 -a=4,b=5 -a=4,b=6 - -mlr put unset $*; $aaa = 999 ./reg_test/input/unset4.dkvp -aaa=999 -aaa=999 -aaa=999 -aaa=999 - -mlr --from ./reg_test/input/abixy put x = 1; print "OX=".x; unset x; print "NX=".x -OX=1 -NX= -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -OX=1 -NX= -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -OX=1 -NX= -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -OX=1 -NX= -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -OX=1 -NX= -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -OX=1 -NX= -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -OX=1 -NX= -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -OX=1 -NX= -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -OX=1 -NX= -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -OX=1 -NX= -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr put -q @{variable.name} += $x; end{emit @{variable.name}} ./reg_test/input/abixy -variable.name=4.536294 - -mlr put -q @{variable.name}[$a] += $x; end{emit @{variable.name},"a"} ./reg_test/input/abixy -a=pan,variable.name=0.849416 -a=eks,variable.name=1.751863 -a=wye,variable.name=0.777892 -a=zee,variable.name=1.125680 -a=hat,variable.name=0.031442 - -mlr put for (k,v in $*) { if (k == "i") {unset $[k]}} ./reg_test/input/abixy -a=pan,b=pan,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,x=0.5026260055412137,y=0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -q - @output[NR] = $*; - end { - for ((nr, k), v in @output) { - if (nr == 4 || k == "i") { - unset @output[nr][k] - } - } - emitp @output, "NR", "k" - } - -NR k output -1 a pan -1 b pan -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 x 0.20460330576630303 -3 y 0.33831852551664776 -5 a wye -5 b pan -5 x 0.5732889198020006 -5 y 0.8636244699032729 -6 a zee -6 b pan -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 x 0.5026260055412137 -10 y 0.9526183602969864 - - -================================================================ -DSL PATTERN-ACTION BLOCKS - -mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {}; $x=6; end{@z=9} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - - -mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1}; $x=6; end{@z=9} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - - -mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2}; $x=6; end{@z=9} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - - -mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2;$u=3}; $x=6; end{@z=9} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - - -mlr put -v begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;@t["u".$5]=2;emitf @v,@w;dump}; $x=6; end{@z=9} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text=".", type=OPERATOR: - text="u", type=STRING_LITERAL. - text="5", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="w", type=STRING_LITERAL. - text="stream", type=STREAM: - text="dump", type=DUMP: - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="all", type=FULL_OOSVAR. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="z", type=STRING_LITERAL. - text="9", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="e", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="||", type=OPERATOR: - text="==", type=OPERATOR: - text="f", type=FIELD_NAME. - text="g", type=FIELD_NAME. - text="==", type=OPERATOR: - text="h", type=FIELD_NAME. - text="i", type=FIELD_NAME. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text=".", type=OPERATOR: - text="u", type=STRING_LITERAL. - text="5", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="emitf", type=EMITF: - text="emitf", type=EMITF: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="w", type=STRING_LITERAL. - text="stream", type=STREAM: - text="dump", type=DUMP: - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="all", type=FULL_OOSVAR. - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - - -mlr put -v begin{true{@x=1}}; true{@x=2}; end{true{@x=3}} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="x", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - - - -================================================================ -DSL STACK-ALLOCATION - -mlr --from ./reg_test/input/abixy put -v -a -f ./reg_test/input/test-dsl-stack-allocation.mlr -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="f", type=FUNC_DEF: - text="f", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. - text="b", type=UNTYPED_PARAMETER_DEFINITION. - text="c", type=UNTYPED_PARAMETER_DEFINITION. - text="func_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="b", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="c", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR_KEY_ONLY: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="f:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - text="s", type=SUBR_DEF: - text="s", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. - text="b", type=UNTYPED_PARAMETER_DEFINITION. - text="c", type=UNTYPED_PARAMETER_DEFINITION. - text="subr_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="b", type=NONINDEXED_LOCAL_VARIABLE. - text=":", type=STRING_LITERAL. - text="c", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR_KEY_ONLY: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="s:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text="BEGIN", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="456", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR_KEY_ONLY: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="b:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="b:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="b:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="print", type=PRINT: - text="MAIN", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR_KEY_ONLY: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="m:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - text="=", type=SREC_ASSIGNMENT: - text="o", type=FIELD_NAME. - text="f", type=FUNCTION_CALLSITE: - text="NR", type=CONTEXT_VARIABLE. - text="a", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="subr_call", type=SUBR_CALLSITE: - text="s", type=FUNCTION_CALLSITE: - text="b", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - text="**", type=OPERATOR: - text="i", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text="END", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="100", type=NUMERIC_LITERAL. - text="789", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR_KEY_ONLY: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="e:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="e:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. - text="j", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text="sum", type=NONINDEXED_LOCAL_VARIABLE. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="e:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [f] - ADD FOR ABSENT s @ 0u0 - ADD PARAMETER a @ 1s0 - ADD PARAMETER b @ 2s0 - ADD PARAMETER c @ 3s0 - PUSH SUBFRAME cond_block - READ nonesuch ABSENT @ 0s0 - ADD DEFINE val @ 0s1 - PUSH SUBFRAME while_block - PUSH SUBFRAME if_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ v PRESENT @ 1s4 - READ a PRESENT @ 1s0 - READ b PRESENT @ 2s0 - READ c PRESENT @ 3s0 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME if subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - READ k PRESENT @ 0s4 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ k PRESENT @ 0s4 - READ v PRESENT @ 1s4 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - ADD DEFINE sum @ 0s3 - PUSH SUBFRAME for - ADD DEFINE i @ 0s4 - READ i PRESENT @ 0s4 - READ i PRESENT @ 0s4 - REUSE WRITE i @ 0s4 - PUSH SUBFRAME for - ADD DEFINE j @ 0s5 - READ j PRESENT @ 0s5 - READ j PRESENT @ 0s5 - REUSE WRITE j @ 0s5 - READ sum PRESENT @ 0s3 - READ i PRESENT @ 0s4 - READ j PRESENT @ 0s5 - REUSE WRITE sum @ 0s3 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - READ sum PRESENT @ 0s3 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME elif subframe_var_count=1 - POP SUBFRAME while subframe_var_count=0 - POP SUBFRAME cond subframe_var_count=1 -BLOCK f subframe_var_count=4 max_subframe_depth=6 - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR DEFINITION BLOCK [s] - ADD FOR ABSENT s @ 0u0 - ADD PARAMETER a @ 1s0 - ADD PARAMETER b @ 2s0 - ADD PARAMETER c @ 3s0 - PUSH SUBFRAME cond_block - READ nonesuch ABSENT @ 0s0 - ADD DEFINE val @ 0s1 - PUSH SUBFRAME while_block - PUSH SUBFRAME if_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ v PRESENT @ 1s4 - READ a PRESENT @ 1s0 - READ b PRESENT @ 2s0 - READ c PRESENT @ 3s0 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME if subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - READ k PRESENT @ 0s4 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ k PRESENT @ 0s4 - READ v PRESENT @ 1s4 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - ADD DEFINE sum @ 0s3 - PUSH SUBFRAME for - ADD DEFINE i @ 0s4 - READ i PRESENT @ 0s4 - READ i PRESENT @ 0s4 - REUSE WRITE i @ 0s4 - PUSH SUBFRAME for - ADD DEFINE j @ 0s5 - READ j PRESENT @ 0s5 - READ j PRESENT @ 0s5 - REUSE WRITE j @ 0s5 - READ sum PRESENT @ 0s3 - READ i PRESENT @ 0s4 - READ j PRESENT @ 0s5 - REUSE WRITE sum @ 0s3 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - READ sum PRESENT @ 0s3 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME elif subframe_var_count=1 - POP SUBFRAME while subframe_var_count=0 - POP SUBFRAME cond subframe_var_count=1 -BLOCK s subframe_var_count=4 max_subframe_depth=6 - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR begin BLOCK - ADD FOR ABSENT s @ 0u0 - PUSH SUBFRAME cond_block - READ nonesuch ABSENT @ 0s0 - ADD DEFINE val @ 0s1 - PUSH SUBFRAME for - ADD DEFINE idx @ 0s2 - READ idx PRESENT @ 0s2 - READ idx PRESENT @ 0s2 - REUSE WRITE idx @ 0s2 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME if_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - READ k PRESENT @ 0s4 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME if subframe_var_count=0 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ k PRESENT @ 0s4 - READ v PRESENT @ 1s4 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME elif subframe_var_count=0 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME elif_block - ADD DEFINE sum @ 0s3 - PUSH SUBFRAME for - ADD DEFINE i @ 0s4 - READ i PRESENT @ 0s4 - READ i PRESENT @ 0s4 - REUSE WRITE i @ 0s4 - PUSH SUBFRAME for - ADD DEFINE j @ 0s5 - READ j PRESENT @ 0s5 - READ j PRESENT @ 0s5 - REUSE WRITE j @ 0s5 - READ sum PRESENT @ 0s3 - READ i PRESENT @ 0s4 - READ j PRESENT @ 0s5 - REUSE WRITE sum @ 0s3 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - READ sum PRESENT @ 0s3 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME elif subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME cond subframe_var_count=1 -BLOCK begin subframe_var_count=1 max_subframe_depth=6 - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK - ADD FOR ABSENT s @ 0u0 - PUSH SUBFRAME cond_block - READ nonesuch ABSENT @ 0s0 - ADD DEFINE val @ 0s1 - PUSH SUBFRAME while_block - PUSH SUBFRAME if_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ v PRESENT @ 1s4 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME if subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - READ k PRESENT @ 0s4 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ k PRESENT @ 0s4 - READ v PRESENT @ 1s4 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME elif subframe_var_count=0 - PUSH SUBFRAME elif_block - ADD DEFINE sum @ 0s3 - PUSH SUBFRAME for - ADD DEFINE i @ 0s4 - READ i PRESENT @ 0s4 - READ i PRESENT @ 0s4 - REUSE WRITE i @ 0s4 - PUSH SUBFRAME for - ADD DEFINE j @ 0s5 - READ j PRESENT @ 0s5 - READ j PRESENT @ 0s5 - REUSE WRITE j @ 0s5 - READ sum PRESENT @ 0s3 - READ i PRESENT @ 0s4 - READ j PRESENT @ 0s5 - REUSE WRITE sum @ 0s3 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - READ sum PRESENT @ 0s3 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME elif subframe_var_count=1 - POP SUBFRAME while subframe_var_count=0 - POP SUBFRAME cond subframe_var_count=1 -BLOCK main_block subframe_var_count=1 max_subframe_depth=6 - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR end BLOCK - ADD FOR ABSENT s @ 0u0 - PUSH SUBFRAME cond_block - READ nonesuch ABSENT @ 0s0 - ADD DEFINE val @ 0s1 - PUSH SUBFRAME for - ADD DEFINE idx @ 0s2 - READ idx PRESENT @ 0s2 - READ idx PRESENT @ 0s2 - REUSE WRITE idx @ 0s2 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME if_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - READ k PRESENT @ 0s4 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME if subframe_var_count=0 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME elif_block - PUSH SUBFRAME for - ADD FOR-BIND k @ 0s4 - ADD FOR-BIND v @ 1s4 - READ k PRESENT @ 0s4 - READ v PRESENT @ 1s4 - POP SUBFRAME for subframe_var_count=2 - POP SUBFRAME elif subframe_var_count=0 - READ idx PRESENT @ 0s2 - PUSH SUBFRAME elif_block - ADD DEFINE sum @ 0s3 - PUSH SUBFRAME for - ADD DEFINE i @ 0s4 - READ i PRESENT @ 0s4 - READ i PRESENT @ 0s4 - REUSE WRITE i @ 0s4 - PUSH SUBFRAME for - ADD DEFINE j @ 0s5 - READ j PRESENT @ 0s5 - READ j PRESENT @ 0s5 - REUSE WRITE j @ 0s5 - READ sum PRESENT @ 0s3 - READ i PRESENT @ 0s4 - READ j PRESENT @ 0s5 - REUSE WRITE sum @ 0s3 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - READ sum PRESENT @ 0s3 - REUSE WRITE val @ 0s1 - READ val PRESENT @ 0s1 - POP SUBFRAME elif subframe_var_count=1 - POP SUBFRAME for subframe_var_count=1 - POP SUBFRAME cond subframe_var_count=1 -BLOCK end subframe_var_count=1 max_subframe_depth=6 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [f] -SUBFRAME [f] var_count_below=0 var_count_at=4 max_var_depth_so_far=4 subframe_depth=0 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - SUBFRAME [cond_block] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=1 - NODE val 0s1 (0:0,1:4) -> 4 - NODE nonesuch 0s0 (0:0,1:4) -> 0 - SUBFRAME [while_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=2 - SUBFRAME [if_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE a 1s0 (0:0,1:4,2:5,3:5,4:5) -> 1 - NODE b 2s0 (0:0,1:4,2:5,3:5,4:5) -> 2 - NODE c 3s0 (0:0,1:4,2:5,3:5,4:5) -> 3 - NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 - SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - SUBFRAME [elif_block] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=3 - NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 - SUBFRAME [for] var_count_below=6 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - SUBFRAME [for] var_count_below=7 var_count_at=1 max_var_depth_so_far=8 subframe_depth=5 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 - NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6,5:7) -> 6 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 - NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 - NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [s] -SUBFRAME [s] var_count_below=0 var_count_at=4 max_var_depth_so_far=4 subframe_depth=0 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - SUBFRAME [cond_block] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=1 - NODE val 0s1 (0:0,1:4) -> 4 - NODE nonesuch 0s0 (0:0,1:4) -> 0 - SUBFRAME [while_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=2 - SUBFRAME [if_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=5 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE a 1s0 (0:0,1:4,2:5,3:5,4:5) -> 1 - NODE b 2s0 (0:0,1:4,2:5,3:5,4:5) -> 2 - NODE c 3s0 (0:0,1:4,2:5,3:5,4:5) -> 3 - NODE val 0s1 (0:0,1:4,2:5,3:5,4:5) -> 4 - SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - SUBFRAME [elif_block] var_count_below=5 var_count_at=0 max_var_depth_so_far=7 subframe_depth=3 - SUBFRAME [for] var_count_below=5 var_count_at=2 max_var_depth_so_far=7 subframe_depth=4 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - NODE k 0s4 (0:0,1:4,2:5,3:5,4:5) -> 5 - NODE v 1s4 (0:0,1:4,2:5,3:5,4:5) -> 6 - SUBFRAME [elif_block] var_count_below=5 var_count_at=1 max_var_depth_so_far=7 subframe_depth=3 - NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 - SUBFRAME [for] var_count_below=6 var_count_at=1 max_var_depth_so_far=7 subframe_depth=4 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6) -> 6 - SUBFRAME [for] var_count_below=7 var_count_at=1 max_var_depth_so_far=8 subframe_depth=5 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 - NODE sum 0s3 (0:0,1:4,2:5,3:5,4:6,5:7) -> 5 - NODE i 0s4 (0:0,1:4,2:5,3:5,4:6,5:7) -> 6 - NODE j 0s5 (0:0,1:4,2:5,3:5,4:6,5:7) -> 7 - NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 - NODE sum 0s3 (0:0,1:4,2:5,3:5) -> 5 - NODE val 0s1 (0:0,1:4,2:5,3:5) -> 4 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [begin] -SUBFRAME [begin] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 - SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 - NODE val 0s1 (0:0,1:1) -> 1 - NODE nonesuch 0s0 (0:0,1:1) -> 0 - SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=3 subframe_depth=2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [if_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=3 subframe_depth=3 - SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [elif_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 - SUBFRAME [for] var_count_below=3 var_count_at=2 max_var_depth_so_far=5 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [elif_block] var_count_below=3 var_count_at=1 max_var_depth_so_far=5 subframe_depth=3 - NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 - SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=6 subframe_depth=5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 - NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4,5:5) -> 4 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 - NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 - NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] -SUBFRAME [main_block] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 - SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 - NODE val 0s1 (0:0,1:1) -> 1 - NODE nonesuch 0s0 (0:0,1:1) -> 0 - SUBFRAME [while_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=2 subframe_depth=2 - SUBFRAME [if_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=2 subframe_depth=3 - SUBFRAME [for] var_count_below=2 var_count_at=2 max_var_depth_so_far=4 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 - NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 - NODE val 0s1 (0:0,1:1,2:2,3:2,4:2) -> 1 - NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 - NODE val 0s1 (0:0,1:1,2:2,3:2,4:2) -> 1 - SUBFRAME [elif_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 - SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 - NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 - SUBFRAME [elif_block] var_count_below=2 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 - SUBFRAME [for] var_count_below=2 var_count_at=2 max_var_depth_so_far=4 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 - NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 - NODE k 0s4 (0:0,1:1,2:2,3:2,4:2) -> 2 - NODE v 1s4 (0:0,1:1,2:2,3:2,4:2) -> 3 - SUBFRAME [elif_block] var_count_below=2 var_count_at=1 max_var_depth_so_far=4 subframe_depth=3 - NODE sum 0s3 (0:0,1:1,2:2,3:2) -> 2 - SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 - NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 - NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 - NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 - NODE i 0s4 (0:0,1:1,2:2,3:2,4:3) -> 3 - SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=5 - NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 - NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 - NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 - NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 - NODE sum 0s3 (0:0,1:1,2:2,3:2,4:3,5:4) -> 2 - NODE sum 0s3 (0:0,1:1,2:2,3:2,4:3,5:4) -> 2 - NODE i 0s4 (0:0,1:1,2:2,3:2,4:3,5:4) -> 3 - NODE j 0s5 (0:0,1:1,2:2,3:2,4:3,5:4) -> 4 - NODE val 0s1 (0:0,1:1,2:2,3:2) -> 1 - NODE sum 0s3 (0:0,1:1,2:2,3:2) -> 2 - NODE val 0s1 (0:0,1:1,2:2,3:2) -> 1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [end] -SUBFRAME [end] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 - SUBFRAME [cond_block] var_count_below=1 var_count_at=1 max_var_depth_so_far=2 subframe_depth=1 - NODE val 0s1 (0:0,1:1) -> 1 - NODE nonesuch 0s0 (0:0,1:1) -> 0 - SUBFRAME [for] var_count_below=2 var_count_at=1 max_var_depth_so_far=3 subframe_depth=2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [if_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=3 subframe_depth=3 - SUBFRAME [for] var_count_below=3 var_count_at=1 max_var_depth_so_far=4 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [elif_block] var_count_below=3 var_count_at=0 max_var_depth_so_far=4 subframe_depth=3 - SUBFRAME [for] var_count_below=3 var_count_at=2 max_var_depth_so_far=5 subframe_depth=4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 - NODE k 0s4 (0:0,1:1,2:2,3:3,4:3) -> 3 - NODE v 1s4 (0:0,1:1,2:2,3:3,4:3) -> 4 - NODE idx 0s2 (0:0,1:1,2:2) -> 2 - SUBFRAME [elif_block] var_count_below=3 var_count_at=1 max_var_depth_so_far=5 subframe_depth=3 - NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 - SUBFRAME [for] var_count_below=4 var_count_at=1 max_var_depth_so_far=5 subframe_depth=4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4) -> 4 - SUBFRAME [for] var_count_below=5 var_count_at=1 max_var_depth_so_far=6 subframe_depth=5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 - NODE sum 0s3 (0:0,1:1,2:2,3:3,4:4,5:5) -> 3 - NODE i 0s4 (0:0,1:1,2:2,3:3,4:4,5:5) -> 4 - NODE j 0s5 (0:0,1:1,2:2,3:3,4:4,5:5) -> 5 - NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 - NODE sum 0s3 (0:0,1:1,2:2,3:3) -> 3 - NODE val 0s1 (0:0,1:1,2:2,3:3) -> 1 - -BLOCKED AST: - -FUNCTION DEFINITION: -text="f", type=FUNC_DEF: subframe_var_count=4 max_subframe_depth=6 max_var_depth=8 - text="f", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="func_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text=":", type=STRING_LITERAL. - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text=":", type=STRING_LITERAL. - text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text=":", type=STRING_LITERAL. - text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR: subframe_var_count=2 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="f:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="f:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - -SUBROUTINE DEFINITION: -text="s", type=SUBR_DEF: subframe_var_count=4 max_subframe_depth=6 max_var_depth=8 - text="s", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="subr_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text=":", type=STRING_LITERAL. - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text=":", type=STRING_LITERAL. - text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text=":", type=STRING_LITERAL. - text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR: subframe_var_count=2 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="s:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=5 - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=6 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=6 - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=7 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=5 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="s:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=6 max_var_depth=6 - text="begin_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text="BEGIN", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="456", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="4", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="+", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="2", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="b:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR: subframe_var_count=2 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="b:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="b:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=6 max_var_depth=6 - text="end_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text="END", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="100", type=NUMERIC_LITERAL. - text="789", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="4", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="+", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="2", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="e:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR: subframe_var_count=2 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="e:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=4 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="idx", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=2 vardef_frame_relative_index=2 - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=4 - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=5 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=3 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="e:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=6 max_var_depth=5 - text="print", type=PRINT: - text="MAIN", type=STRING_LITERAL. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="*", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4000", type=NUMERIC_LITERAL. - text="cond", type=CONDITIONAL_BLOCK: - text="true", type=BOOLEAN_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="nonesuch", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="while", type=WHILE: - text="==", type=OPERATOR: - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:1:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR_KEY_ONLY: subframe_var_count=1 - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:2:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="for", type=FOR_OOSVAR: subframe_var_count=2 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="m:3:k:", type=STRING_LITERAL. - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=2 - text="v:", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=4 vardef_frame_relative_index=3 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=1 - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 - text="0", type=NUMERIC_LITERAL. - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="+", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="for", type=TRIPLE_FOR: subframe_var_count=1 - text="triple_for_start_statements", type=STATEMENT_LIST: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_continuation_statements", type=STATEMENT_LIST: - text="<=", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 - text="10", type=NUMERIC_LITERAL. - text="triple_for_update_statements", type=STATEMENT_LIST: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 - text="+", type=OPERATOR: - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 - text="1", type=NUMERIC_LITERAL. - text="triple_for_block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 - text="+", type=OPERATOR: - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 - text="*", type=OPERATOR: - text="i", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=4 vardef_frame_relative_index=3 - text="j", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=5 vardef_frame_relative_index=4 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="sum", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=3 vardef_frame_relative_index=2 - text="print", type=PRINT: - text=".", type=OPERATOR: - text="m:val:", type=STRING_LITERAL. - text="val", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="break", type=BREAK. - text="=", type=SREC_ASSIGNMENT: - text="o", type=FIELD_NAME. - text="f", type=FUNCTION_CALLSITE: - text="NR", type=CONTEXT_VARIABLE. - text="a", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="subr_call", type=SUBR_CALLSITE: - text="s", type=FUNCTION_CALLSITE: - text="b", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - text="**", type=OPERATOR: - text="i", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - -BEGIN -b:2:k:0 -b:3:k:0v:456 -b:val:3025 -MAIN -m:1:val:pan -m:1:val:pan -m:1:val:1 -m:1:val:0.346790 -m:1:val:0.726803 -f:1:val:pan:1:pan:0.726803 -f:1:val:pan:1:pan:0.726803 -f:1:val:1:1:pan:0.726803 -f:1:val:0.346790:1:pan:0.726803 -f:1:val:0.726803:1:pan:0.726803 -s:1:val:pan:pan:1:1.000000 -s:1:val:pan:pan:1:1.000000 -s:1:val:1:pan:1:1.000000 -s:1:val:0.346790:pan:1:1.000000 -s:1:val:0.726803:pan:1:1.000000 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -MAIN -m:2:k:0 -m:2:k:1 -m:2:k:2 -f:2:k:0 -f:2:k:1 -f:2:k:2 -s:2:k:0 -s:2:k:1 -s:2:k:2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -MAIN -m:3:k:0v:456 -m:3:k:1v:2000 -m:3:k:2v:4000 -m:3:k:3v:12000 -f:3:k:0v:456 -f:3:k:1v:2000 -f:3:k:2v:4000 -f:3:k:3v:3000 -s:3:k:0v:456 -s:3:k:1v:2000 -s:3:k:2v:4000 -s:3:k:3v:6000 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -MAIN -m:val:3025 -f:val:3025 -s:val:3025 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -MAIN -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -MAIN -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -MAIN -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -MAIN -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -MAIN -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -MAIN -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -END -e:2:k:0 -e:2:k:1 -e:2:k:2 -e:2:k:3 -e:2:k:4 -e:2:k:5 -e:2:k:6 -e:2:k:7 -e:2:k:8 -e:2:k:9 -e:2:k:10 -e:2:k:100 -e:3:k:0v:456 -e:3:k:1v:2000 -e:3:k:2v:4000 -e:3:k:3v:6000 -e:3:k:4v:8000 -e:3:k:5v:10000 -e:3:k:6v:12000 -e:3:k:7v:14000 -e:3:k:8v:16000 -e:3:k:9v:18000 -e:3:k:10v:20000 -e:3:k:100v:789 -e:val:3025 - -mlr --from ./reg_test/input/abixy put a=a; $oa = a -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a; b = 4;a = b; $oe= a -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,oe=4 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,oe=4 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,oe=4 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,oe=4 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,oe=4 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,oe=4 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,oe=4 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,oe=4 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,oe=4 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,oe=4 - - -================================================================ -DSL IF-CHAINING - - ----------------------------------------------------------------- IF/ELIF WITH ELSE -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR==1) { - $x = 2; - $y = 3 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -i=1,x=2,y=3 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=104,y=204 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=107,y=207 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=110,y=210 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=113,y=213 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=116,y=216 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=119,y=219 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=122,y=222 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=125,y=225 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=128,y=228 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 4) { - $x = 5; - $y = 6 - } else { - $x = 1007; - $y = 1008 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1007", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1008", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1007", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1008", type=NUMERIC_LITERAL. - -i=1,x=1007,y=1008 -i=2,x=1007,y=1008 -i=3,x=1007,y=1008 -i=4,x=5,y=6 -i=5,x=1007,y=1008 -i=6,x=1007,y=1008 -i=7,x=1007,y=1008 -i=8,x=1007,y=1008 -i=9,x=1007,y=1008 -i=10,x=1007,y=1008 -i=11,x=1007,y=1008 -i=12,x=1007,y=1008 -i=13,x=1007,y=1008 -i=14,x=1007,y=1008 -i=15,x=1007,y=1008 -i=16,x=1007,y=1008 -i=17,x=1007,y=1008 -i=18,x=1007,y=1008 -i=19,x=1007,y=1008 -i=20,x=1007,y=1008 -i=21,x=1007,y=1008 -i=22,x=1007,y=1008 -i=23,x=1007,y=1008 -i=24,x=1007,y=1008 -i=25,x=1007,y=1008 -i=26,x=1007,y=1008 -i=27,x=1007,y=1008 -i=28,x=1007,y=1008 -i=29,x=1007,y=1008 -i=30,x=1007,y=1008 -i=31,x=1007,y=1008 -i=32,x=1007,y=1008 -i=33,x=1007,y=1008 -i=34,x=1007,y=1008 -i=35,x=1007,y=1008 -i=36,x=1007,y=1008 -i=37,x=1007,y=1008 -i=38,x=1007,y=1008 -i=39,x=1007,y=1008 -i=40,x=1007,y=1008 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 9) { - $x = 10; - $y = 11 - } elif (NR == 12) { - $x = 13; - $y = 14 - } else { - $x = 1015; - $y = 1016 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="9", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="10", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="11", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="12", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="13", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="14", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1015", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1016", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="9", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="10", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="11", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="12", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="13", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="14", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1015", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1016", type=NUMERIC_LITERAL. - -i=1,x=1015,y=1016 -i=2,x=1015,y=1016 -i=3,x=1015,y=1016 -i=4,x=1015,y=1016 -i=5,x=1015,y=1016 -i=6,x=1015,y=1016 -i=7,x=1015,y=1016 -i=8,x=1015,y=1016 -i=9,x=10,y=11 -i=10,x=1015,y=1016 -i=11,x=1015,y=1016 -i=12,x=13,y=14 -i=13,x=1015,y=1016 -i=14,x=1015,y=1016 -i=15,x=1015,y=1016 -i=16,x=1015,y=1016 -i=17,x=1015,y=1016 -i=18,x=1015,y=1016 -i=19,x=1015,y=1016 -i=20,x=1015,y=1016 -i=21,x=1015,y=1016 -i=22,x=1015,y=1016 -i=23,x=1015,y=1016 -i=24,x=1015,y=1016 -i=25,x=1015,y=1016 -i=26,x=1015,y=1016 -i=27,x=1015,y=1016 -i=28,x=1015,y=1016 -i=29,x=1015,y=1016 -i=30,x=1015,y=1016 -i=31,x=1015,y=1016 -i=32,x=1015,y=1016 -i=33,x=1015,y=1016 -i=34,x=1015,y=1016 -i=35,x=1015,y=1016 -i=36,x=1015,y=1016 -i=37,x=1015,y=1016 -i=38,x=1015,y=1016 -i=39,x=1015,y=1016 -i=40,x=1015,y=1016 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 17) { - $x = 18; - $y = 19 - } elif (NR == 20) { - $x = 21; - $y = 22 - } elif (NR == 23) { - $x = 24; - $y = 25 - } else { - $x = 1026; - $y = 1027 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="17", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="18", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="19", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="20", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="21", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="22", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="23", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="24", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="25", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1026", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1027", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="17", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="18", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="19", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="20", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="21", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="22", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="23", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="24", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="25", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1026", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1027", type=NUMERIC_LITERAL. - -i=1,x=1026,y=1027 -i=2,x=1026,y=1027 -i=3,x=1026,y=1027 -i=4,x=1026,y=1027 -i=5,x=1026,y=1027 -i=6,x=1026,y=1027 -i=7,x=1026,y=1027 -i=8,x=1026,y=1027 -i=9,x=1026,y=1027 -i=10,x=1026,y=1027 -i=11,x=1026,y=1027 -i=12,x=1026,y=1027 -i=13,x=1026,y=1027 -i=14,x=1026,y=1027 -i=15,x=1026,y=1027 -i=16,x=1026,y=1027 -i=17,x=18,y=19 -i=18,x=1026,y=1027 -i=19,x=1026,y=1027 -i=20,x=21,y=22 -i=21,x=1026,y=1027 -i=22,x=1026,y=1027 -i=23,x=24,y=25 -i=24,x=1026,y=1027 -i=25,x=1026,y=1027 -i=26,x=1026,y=1027 -i=27,x=1026,y=1027 -i=28,x=1026,y=1027 -i=29,x=1026,y=1027 -i=30,x=1026,y=1027 -i=31,x=1026,y=1027 -i=32,x=1026,y=1027 -i=33,x=1026,y=1027 -i=34,x=1026,y=1027 -i=35,x=1026,y=1027 -i=36,x=1026,y=1027 -i=37,x=1026,y=1027 -i=38,x=1026,y=1027 -i=39,x=1026,y=1027 -i=40,x=1026,y=1027 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 28) { - $x = 29; - $y = 30 - } elif (NR == 31) { - $x = 32; - $y = 33 - } elif (NR == 34) { - $x = 35; - $y = 36 - } elif (NR == 37) { - $x = 38; - $y = 39 - } else { - $x = 1040; - $y = 1041 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="28", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="29", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="30", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="31", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="32", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="33", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="34", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="35", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="36", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="37", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="38", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="39", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1040", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1041", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="28", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="29", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="30", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="31", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="32", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="33", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="34", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="35", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="36", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="37", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="38", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="39", type=NUMERIC_LITERAL. - text="else", type=IF_ITEM: - text="else_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="1040", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="1041", type=NUMERIC_LITERAL. - -i=1,x=1040,y=1041 -i=2,x=1040,y=1041 -i=3,x=1040,y=1041 -i=4,x=1040,y=1041 -i=5,x=1040,y=1041 -i=6,x=1040,y=1041 -i=7,x=1040,y=1041 -i=8,x=1040,y=1041 -i=9,x=1040,y=1041 -i=10,x=1040,y=1041 -i=11,x=1040,y=1041 -i=12,x=1040,y=1041 -i=13,x=1040,y=1041 -i=14,x=1040,y=1041 -i=15,x=1040,y=1041 -i=16,x=1040,y=1041 -i=17,x=1040,y=1041 -i=18,x=1040,y=1041 -i=19,x=1040,y=1041 -i=20,x=1040,y=1041 -i=21,x=1040,y=1041 -i=22,x=1040,y=1041 -i=23,x=1040,y=1041 -i=24,x=1040,y=1041 -i=25,x=1040,y=1041 -i=26,x=1040,y=1041 -i=27,x=1040,y=1041 -i=28,x=29,y=30 -i=29,x=1040,y=1041 -i=30,x=1040,y=1041 -i=31,x=32,y=33 -i=32,x=1040,y=1041 -i=33,x=1040,y=1041 -i=34,x=35,y=36 -i=35,x=1040,y=1041 -i=36,x=1040,y=1041 -i=37,x=38,y=39 -i=38,x=1040,y=1041 -i=39,x=1040,y=1041 -i=40,x=1040,y=1041 - - ----------------------------------------------------------------- IF/ELIF WITHOUT ELSE -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 1) { - $x = 2; - $y = 3 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="2", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="3", type=NUMERIC_LITERAL. - -i=1,x=2,y=3 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=104,y=204 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=107,y=207 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=110,y=210 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=113,y=213 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=116,y=216 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=119,y=219 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=122,y=222 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=125,y=225 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=128,y=228 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 4) { - $x = 5; - $y = 6 - } elif (NR == 7) { - $x = 8; - $y = 9 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="7", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="4", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="6", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="7", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - -i=1,x=101,y=201 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=5,y=6 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=8,y=9 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=110,y=210 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=113,y=213 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=116,y=216 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=119,y=219 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=122,y=222 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=125,y=225 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=128,y=228 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 10) { - $x = 11; - $y = 12 - } elif (NR == 13) { - $x = 14; - $y = 15 - } elif (NR == 16) { - $x = 17; - $y = 18 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="11", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="12", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="13", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="14", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="15", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="16", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="17", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="18", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="10", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="11", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="12", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="13", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="14", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="15", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="16", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="17", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="18", type=NUMERIC_LITERAL. - -i=1,x=101,y=201 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=104,y=204 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=107,y=207 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=11,y=12 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=14,y=15 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=17,y=18 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=119,y=219 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=122,y=222 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=125,y=225 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=128,y=228 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 - -mlr --from ./reg_test/input/xy40.dkvp put -v - if (NR == 19) { - $x = 20; - $y = 21 - } elif (NR == 22) { - $x = 23; - $y = 24 - } elif (NR == 25) { - $x = 26; - $y = 37 - } elif (NR == 28) { - $x = 29; - $y = 30 - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="19", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="20", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="21", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="22", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="23", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="24", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="25", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="26", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="37", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="28", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="29", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="30", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="19", type=NUMERIC_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="20", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="21", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="22", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="23", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="24", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="25", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="26", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="37", type=NUMERIC_LITERAL. - text="elif", type=IF_ITEM: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="28", type=NUMERIC_LITERAL. - text="elif_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="x", type=FIELD_NAME. - text="29", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="y", type=FIELD_NAME. - text="30", type=NUMERIC_LITERAL. - -i=1,x=101,y=201 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=104,y=204 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=107,y=207 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=110,y=210 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=113,y=213 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=116,y=216 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=20,y=21 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=23,y=24 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=26,y=37 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=29,y=30 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 - - -================================================================ -DSL INDIRECT SREC ASSIGNMENTS - -mlr put -v $["a"] = $["b"]; $["x"] = 10 * $["y"] ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="a", type=STRING_LITERAL. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="b", type=STRING_LITERAL. - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="x", type=STRING_LITERAL. - text="*", type=OPERATOR: - text="10", type=NUMERIC_LITERAL. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="y", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="a", type=STRING_LITERAL. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="b", type=STRING_LITERAL. - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="x", type=STRING_LITERAL. - text="*", type=OPERATOR: - text="10", type=NUMERIC_LITERAL. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="y", type=STRING_LITERAL. - -a=pan,b=pan,i=1,x=7.268029,y=0.7268028627434533 -a=pan,b=pan,i=2,x=5.221511,y=0.5221511083334797 -a=wye,b=wye,i=3,x=3.383185,y=0.33831852551664776 -a=wye,b=wye,i=4,x=1.341887,y=0.13418874328430463 -a=pan,b=pan,i=5,x=8.636245,y=0.8636244699032729 -a=pan,b=pan,i=6,x=4.932213,y=0.49322128674835697 -a=zee,b=zee,i=7,x=1.878849,y=0.1878849191181694 -a=wye,b=wye,i=8,x=9.761814,y=0.976181385699006 -a=wye,b=wye,i=9,x=7.495508,y=0.7495507603507059 -a=wye,b=wye,i=10,x=9.526184,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put while (NF < 256) { $["k".string(NF+1)] = "v".string(NF) } -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,k6=v5,k7=v6,k8=v7,k9=v8,k10=v9,k11=v10,k12=v11,k13=v12,k14=v13,k15=v14,k16=v15,k17=v16,k18=v17,k19=v18,k20=v19,k21=v20,k22=v21,k23=v22,k24=v23,k25=v24,k26=v25,k27=v26,k28=v27,k29=v28,k30=v29,k31=v30,k32=v31,k33=v32,k34=v33,k35=v34,k36=v35,k37=v36,k38=v37,k39=v38,k40=v39,k41=v40,k42=v41,k43=v42,k44=v43,k45=v44,k46=v45,k47=v46,k48=v47,k49=v48,k50=v49,k51=v50,k52=v51,k53=v52,k54=v53,k55=v54,k56=v55,k57=v56,k58=v57,k59=v58,k60=v59,k61=v60,k62=v61,k63=v62,k64=v63,k65=v64,k66=v65,k67=v66,k68=v67,k69=v68,k70=v69,k71=v70,k72=v71,k73=v72,k74=v73,k75=v74,k76=v75,k77=v76,k78=v77,k79=v78,k80=v79,k81=v80,k82=v81,k83=v82,k84=v83,k85=v84,k86=v85,k87=v86,k88=v87,k89=v88,k90=v89,k91=v90,k92=v91,k93=v92,k94=v93,k95=v94,k96=v95,k97=v96,k98=v97,k99=v98,k100=v99,k101=v100,k102=v101,k103=v102,k104=v103,k105=v104,k106=v105,k107=v106,k108=v107,k109=v108,k110=v109,k111=v110,k112=v111,k113=v112,k114=v113,k115=v114,k116=v115,k117=v116,k118=v117,k119=v118,k120=v119,k121=v120,k122=v121,k123=v122,k124=v123,k125=v124,k126=v125,k127=v126,k128=v127,k129=v128,k130=v129,k131=v130,k132=v131,k133=v132,k134=v133,k135=v134,k136=v135,k137=v136,k138=v137,k139=v138,k140=v139,k141=v140,k142=v141,k143=v142,k144=v143,k145=v144,k146=v145,k147=v146,k148=v147,k149=v148,k150=v149,k151=v150,k152=v151,k153=v152,k154=v153,k155=v154,k156=v155,k157=v156,k158=v157,k159=v158,k160=v159,k161=v160,k162=v161,k163=v162,k164=v163,k165=v164,k166=v165,k167=v166,k168=v167,k169=v168,k170=v169,k171=v170,k172=v171,k173=v172,k174=v173,k175=v174,k176=v175,k177=v176,k178=v177,k179=v178,k180=v179,k181=v180,k182=v181,k183=v182,k184=v183,k185=v184,k186=v185,k187=v186,k188=v187,k189=v188,k190=v189,k191=v190,k192=v191,k193=v192,k194=v193,k195=v194,k196=v195,k197=v196,k198=v197,k199=v198,k200=v199,k201=v200,k202=v201,k203=v202,k204=v203,k205=v204,k206=v205,k207=v206,k208=v207,k209=v208,k210=v209,k211=v210,k212=v211,k213=v212,k214=v213,k215=v214,k216=v215,k217=v216,k218=v217,k219=v218,k220=v219,k221=v220,k222=v221,k223=v222,k224=v223,k225=v224,k226=v225,k227=v226,k228=v227,k229=v228,k230=v229,k231=v230,k232=v231,k233=v232,k234=v233,k235=v234,k236=v235,k237=v236,k238=v237,k239=v238,k240=v239,k241=v240,k242=v241,k243=v242,k244=v243,k245=v244,k246=v245,k247=v246,k248=v247,k249=v248,k250=v249,k251=v250,k252=v251,k253=v252,k254=v253,k255=v254,k256=v255 - - -================================================================ -DSL INDIRECT OOSVAR ASSIGNMENTS - -mlr --opprint put -v @s = NR; $t = @s; $u=@["s"]; $v = $t - $u ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="v", type=FIELD_NAME. - text="-", type=OPERATOR: - text="t", type=FIELD_NAME. - text="u", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="v", type=FIELD_NAME. - text="-", type=OPERATOR: - text="t", type=FIELD_NAME. - text="u", type=FIELD_NAME. - -a b i x y t u v -pan pan 1 0.3467901443380824 0.7268028627434533 1 1 0 -eks pan 2 0.7586799647899636 0.5221511083334797 2 2 0 -wye wye 3 0.20460330576630303 0.33831852551664776 3 3 0 -eks wye 4 0.38139939387114097 0.13418874328430463 4 4 0 -wye pan 5 0.5732889198020006 0.8636244699032729 5 5 0 -zee pan 6 0.5271261600918548 0.49322128674835697 6 6 0 -eks zee 7 0.6117840605678454 0.1878849191181694 7 7 0 -zee wye 8 0.5985540091064224 0.976181385699006 8 8 0 -hat wye 9 0.03144187646093577 0.7495507603507059 9 9 0 -pan wye 10 0.5026260055412137 0.9526183602969864 10 10 0 - -mlr put -v @t["u"] = NR; $tu = @["t"]["u"]; emitp all ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="tu", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="tu", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -t:u=1 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,tu=1 -t:u=2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,tu=2 -t:u=3 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,tu=3 -t:u=4 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,tu=4 -t:u=5 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,tu=5 -t:u=6 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,tu=6 -t:u=7 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,tu=7 -t:u=8 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,tu=8 -t:u=9 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,tu=9 -t:u=10 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,tu=10 - -mlr put -v @t["u"] = NR; $tu = @["t"]["u"]; emitp @* ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="tu", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="@*", type=FULL_OOSVAR. - text="stream", type=STREAM: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="tu", type=FIELD_NAME. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="@*", type=FULL_OOSVAR. - text="stream", type=STREAM: - -t:u=1 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,tu=1 -t:u=2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,tu=2 -t:u=3 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,tu=3 -t:u=4 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,tu=4 -t:u=5 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,tu=5 -t:u=6 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,tu=6 -t:u=7 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,tu=7 -t:u=8 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,tu=8 -t:u=9 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,tu=9 -t:u=10 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,tu=10 - -mlr put -v @["s"] = $x; emitp all ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="s", type=STRING_LITERAL. - text="x", type=FIELD_NAME. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -s=0.346790 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -s=0.758680 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -s=0.204603 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -s=0.381399 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -s=0.573289 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -s=0.527126 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -s=0.611784 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -s=0.598554 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -s=0.031442 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -s=0.502626 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr put -v @["t"]["u"] = $y; emitp all ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="y", type=FIELD_NAME. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="t", type=STRING_LITERAL. - text="u", type=STRING_LITERAL. - text="y", type=FIELD_NAME. - text="emitp", type=EMITP: - text="emitp", type=EMITP: - text="all", type=ALL. - text="stream", type=STREAM: - -t:u=0.726803 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -t:u=0.522151 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -t:u=0.338319 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -t:u=0.134189 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -t:u=0.863624 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -t:u=0.493221 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -t:u=0.187885 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -t:u=0.976181 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -t:u=0.749551 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -t:u=0.952618 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -OOSVAR-FROM-SREC ASSIGNMENT - -mlr put -v @v = $* /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. - - -mlr put -v @v[1] = $* /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="$*", type=FULL_SREC. - - -mlr put -v @v[$2] = $* /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - text="$*", type=FULL_SREC. - - -mlr put -v NR == 3 {@v = $*} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="$*", type=FULL_SREC. - - -mlr put -v NR == 3 {@v[1] = $*} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="$*", type=FULL_SREC. - - -mlr put -v NR == 3 {@v[$2] = $*} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - text="$*", type=FULL_SREC. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_FROM_FULL_SREC_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - text="$*", type=FULL_SREC. - - -mlr --oxtab put -q @v = $*; end {emitp @v } ./reg_test/input/abixy-het -v:a pan -v:b wye -v:i 10 -v:x 0.5026260055412137 -v:y 0.9526183602969864 - -mlr --oxtab put -q @v[$a] = $*; end {emitp @v } ./reg_test/input/abixy-het -v:pan:a pan -v:pan:b wye -v:pan:i 10 -v:pan:x 0.5026260055412137 -v:pan:y 0.9526183602969864 -v:eks:a eks -v:eks:b zee -v:eks:iii 7 -v:eks:x 0.6117840605678454 -v:eks:y 0.1878849191181694 -v:wye:a wye -v:wye:b pan -v:wye:i 5 -v:wye:xxx 0.5732889198020006 -v:wye:y 0.8636244699032729 -v:zee:a zee -v:zee:b wye -v:zee:i 8 -v:zee:x 0.5985540091064224 -v:zee:yyy 0.976181385699006 - -mlr --oxtab put -q @v[$a] = $*; end {emitp @v, "a" } ./reg_test/input/abixy-het -a pan -v:a pan -v:b wye -v:i 10 -v:x 0.5026260055412137 -v:y 0.9526183602969864 - -a eks -v:a eks -v:b zee -v:iii 7 -v:x 0.6117840605678454 -v:y 0.1878849191181694 - -a wye -v:a wye -v:b pan -v:i 5 -v:xxx 0.5732889198020006 -v:y 0.8636244699032729 - -a zee -v:a zee -v:b wye -v:i 8 -v:x 0.5985540091064224 -v:yyy 0.976181385699006 - -mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v } ./reg_test/input/abixy-het -v:pan:pan:a pan -v:pan:pan:b pan -v:pan:pan:i 1 -v:pan:pan:x 0.3467901443380824 -v:pan:pan:y 0.7268028627434533 -v:pan:wye:a pan -v:pan:wye:b wye -v:pan:wye:i 10 -v:pan:wye:x 0.5026260055412137 -v:pan:wye:y 0.9526183602969864 -v:eks:pan:a eks -v:eks:pan:b pan -v:eks:pan:i 2 -v:eks:pan:x 0.7586799647899636 -v:eks:pan:y 0.5221511083334797 -v:eks:zee:a eks -v:eks:zee:b zee -v:eks:zee:iii 7 -v:eks:zee:x 0.6117840605678454 -v:eks:zee:y 0.1878849191181694 -v:wye:pan:a wye -v:wye:pan:b pan -v:wye:pan:i 5 -v:wye:pan:xxx 0.5732889198020006 -v:wye:pan:y 0.8636244699032729 -v:zee:pan:a zee -v:zee:pan:b pan -v:zee:pan:i 6 -v:zee:pan:x 0.5271261600918548 -v:zee:pan:y 0.49322128674835697 -v:zee:wye:a zee -v:zee:wye:b wye -v:zee:wye:i 8 -v:zee:wye:x 0.5985540091064224 -v:zee:wye:yyy 0.976181385699006 - -mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v, "a" } ./reg_test/input/abixy-het -a pan -v:pan:a pan -v:pan:b pan -v:pan:i 1 -v:pan:x 0.3467901443380824 -v:pan:y 0.7268028627434533 -v:wye:a pan -v:wye:b wye -v:wye:i 10 -v:wye:x 0.5026260055412137 -v:wye:y 0.9526183602969864 - -a eks -v:pan:a eks -v:pan:b pan -v:pan:i 2 -v:pan:x 0.7586799647899636 -v:pan:y 0.5221511083334797 -v:zee:a eks -v:zee:b zee -v:zee:iii 7 -v:zee:x 0.6117840605678454 -v:zee:y 0.1878849191181694 - -a wye -v:pan:a wye -v:pan:b pan -v:pan:i 5 -v:pan:xxx 0.5732889198020006 -v:pan:y 0.8636244699032729 - -a zee -v:pan:a zee -v:pan:b pan -v:pan:i 6 -v:pan:x 0.5271261600918548 -v:pan:y 0.49322128674835697 -v:wye:a zee -v:wye:b wye -v:wye:i 8 -v:wye:x 0.5985540091064224 -v:wye:yyy 0.976181385699006 - -mlr --oxtab put -q @v[$a][$b] = $*; end {emitp @v, "a", "b"} ./reg_test/input/abixy-het -a pan -b pan -v:a pan -v:b pan -v:i 1 -v:x 0.3467901443380824 -v:y 0.7268028627434533 - -a pan -b wye -v:a pan -v:b wye -v:i 10 -v:x 0.5026260055412137 -v:y 0.9526183602969864 - -a eks -b pan -v:a eks -v:b pan -v:i 2 -v:x 0.7586799647899636 -v:y 0.5221511083334797 - -a eks -b zee -v:a eks -v:b zee -v:iii 7 -v:x 0.6117840605678454 -v:y 0.1878849191181694 - -a wye -b pan -v:a wye -v:b pan -v:i 5 -v:xxx 0.5732889198020006 -v:y 0.8636244699032729 - -a zee -b pan -v:a zee -v:b pan -v:i 6 -v:x 0.5271261600918548 -v:y 0.49322128674835697 - -a zee -b wye -v:a zee -v:b wye -v:i 8 -v:x 0.5985540091064224 -v:yyy 0.976181385699006 - - -================================================================ -SREC-FROM-OOSVAR ASSIGNMENT - -mlr put -v $* = @v /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v $* = @v[1] /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v $* = @v[$2] /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - - -mlr put -v NR == 3 {$* = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v NR == 3 {$* = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v NR == 3 {$* = @v[$2]} /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=FULL_SREC_ASSIGNMENT: - text="$*", type=FULL_SREC. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="2", type=FIELD_NAME. - - -mlr put @v[NR] = $a; NR == 7 { @v = $*} ; $* = @v ./reg_test/input/abixy-het -1=pan -1=pan,2=eks -1=pan,2=eks -1=pan,2=eks,4=eks -1=pan,2=eks,4=eks,5=wye -1=pan,2=eks,4=eks,5=wye,6=zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee,10=pan - - -================================================================ -OOSVAR-FROM-OOSVAR ASSIGNMENT - -mlr put -v @u = @v /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v @u = @v[1] /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v @u[2] = @v /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v @u[2] = @v[1] /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v begin { @u = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v begin { @u = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v begin { @u[2] = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v begin { @u[2] = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v NR == 3 { @u = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v NR == 3 { @u = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v NR == 3 { @u[2] = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - - -mlr put -v NR == 3 { @u[2] = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="cond", type=CONDITIONAL_BLOCK: - text="==", type=OPERATOR: - text="NR", type=CONTEXT_VARIABLE. - text="3", type=NUMERIC_LITERAL. - text="cond_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - - -mlr put -v end { @u = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v end { @u = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v end { @u[2] = @v } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -v end { @u[2] = @v[1] } /dev/null -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="u", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="v", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - - -mlr put -q @s += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": 55, - "t": 55 -} -s=55 -t=55 - -mlr put -q @s[1] += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": 55 - }, - "t": { - "1": 55 - } -} -s:1=55 -t:1=55 - -mlr put -q @s[1] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": 55 - }, - "t": 55 -} -s:1=55 -t=55 - -mlr put -q @s[1] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": 55 - }, - "t": { - "3": { - "1": 55 - } - } -} -s:1=55 -t:3:1=55 - -mlr put -q @s[1] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": 55 - }, - "t": { - "3": 55 - } -} -s:1=55 -t:3=55 - -mlr put -q @s[1][2] += $i; @t=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "1": { - "2": 55 - } - } -} -s:1:2=55 -t:1:2=55 - -mlr put -q @s[1][2] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "2": 55 - } -} -s:1:2=55 -t:2=55 - -mlr put -q @s[1][2] += $i; @t=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": 55 -} -s:1:2=55 -t=55 - -mlr put -q @s[1][2] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": { - "1": { - "2": 55 - } - } - } -} -s:1:2=55 -t:3:1:2=55 - -mlr put -q @s[1][2] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": { - "2": 55 - } - } -} -s:1:2=55 -t:3:2=55 - -mlr put -q @s[1][2] += $i; @t[3]=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": 55 - } -} -s:1:2=55 -t:3=55 - -mlr put -q @s[1][2] += $i; @t[3][4]=@s; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": { - "4": { - "1": { - "2": 55 - } - } - } - } -} -s:1:2=55 -t:3:4:1:2=55 - -mlr put -q @s[1][2] += $i; @t[3][4]=@s[1]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": { - "4": { - "2": 55 - } - } - } -} -s:1:2=55 -t:3:4:2=55 - -mlr put -q @s[1][2] += $i; @t[3][4]=@s[1][2]; end{dump; emitp@s; emitp @t} ./reg_test/input/abixy -{ - "s": { - "1": { - "2": 55 - } - }, - "t": { - "3": { - "4": 55 - } - } -} -s:1:2=55 -t:3:4=55 - -mlr --opprint put -q @s[NR][NR] = $i/100; @t[NR*10]=@s; end{emitp@s,"A","B"; emitp @t,"C","D","E"} ./reg_test/input/abixy -A B s -1 1 0.010000 -2 2 0.020000 -3 3 0.030000 -4 4 0.040000 -5 5 0.050000 -6 6 0.060000 -7 7 0.070000 -8 8 0.080000 -9 9 0.090000 -10 10 0.100000 - -C D E t -10 1 1 0.010000 -20 1 1 0.010000 -20 2 2 0.020000 -30 1 1 0.010000 -30 2 2 0.020000 -30 3 3 0.030000 -40 1 1 0.010000 -40 2 2 0.020000 -40 3 3 0.030000 -40 4 4 0.040000 -50 1 1 0.010000 -50 2 2 0.020000 -50 3 3 0.030000 -50 4 4 0.040000 -50 5 5 0.050000 -60 1 1 0.010000 -60 2 2 0.020000 -60 3 3 0.030000 -60 4 4 0.040000 -60 5 5 0.050000 -60 6 6 0.060000 -70 1 1 0.010000 -70 2 2 0.020000 -70 3 3 0.030000 -70 4 4 0.040000 -70 5 5 0.050000 -70 6 6 0.060000 -70 7 7 0.070000 -80 1 1 0.010000 -80 2 2 0.020000 -80 3 3 0.030000 -80 4 4 0.040000 -80 5 5 0.050000 -80 6 6 0.060000 -80 7 7 0.070000 -80 8 8 0.080000 -90 1 1 0.010000 -90 2 2 0.020000 -90 3 3 0.030000 -90 4 4 0.040000 -90 5 5 0.050000 -90 6 6 0.060000 -90 7 7 0.070000 -90 8 8 0.080000 -90 9 9 0.090000 -100 1 1 0.010000 -100 2 2 0.020000 -100 3 3 0.030000 -100 4 4 0.040000 -100 5 5 0.050000 -100 6 6 0.060000 -100 7 7 0.070000 -100 8 8 0.080000 -100 9 9 0.090000 -100 10 10 0.100000 - - -================================================================ -DSL WHILE/DO-WHILE LOOPS - -mlr put -v while($i < 5) { $i += 1} ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="while", type=WHILE: - text="<", type=OPERATOR: - text="i", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="i", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="while", type=WHILE: - text="<", type=OPERATOR: - text="i", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - text="while_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="i", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - -a=pan,b=pan,i=5,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=5,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=5,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=5,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr put -v do {$i += 1} while($i < 5) ./reg_test/input/abixy -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="do", type=DO_WHILE: - text="do_while_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="i", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="<", type=OPERATOR: - text="i", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=1 - text="do", type=DO_WHILE: - text="do_while_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="i", type=FIELD_NAME. - text="+", type=OPERATOR: - text="i", type=FIELD_NAME. - text="1", type=NUMERIC_LITERAL. - text="<", type=OPERATOR: - text="i", type=FIELD_NAME. - text="5", type=NUMERIC_LITERAL. - -a=pan,b=pan,i=5,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=5,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=5,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=5,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=6,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=7,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=8,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=9,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=10,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=11,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -DSL FOR-SREC LOOPS - - ----------------------------------------------------------------- empty for-srec -mlr --from ./reg_test/input/abixy put -v for(k,v in $*) { } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- for-srec without boundvars -mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {$nr= NR} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="nr", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="nr", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nr=6 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,nr=7 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,nr=8 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nr=9 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nr=10 - - ----------------------------------------------------------------- for-srec modifying the srec -mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {unset $[k]}; $j = NR -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="j", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="=", type=SREC_ASSIGNMENT: - text="j", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -j=1 -j=2 -j=3 -j=4 -j=5 -j=6 -j=7 -j=8 -j=9 -j=10 - -mlr --from ./reg_test/input/abixy put -v for(k,v in $*) {if (k != "x") {unset $[k]}}; $j = NR -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="!=", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="x", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="unset", type=UNSET: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="j", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="!=", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="x", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="unset", type=UNSET: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="=", type=SREC_ASSIGNMENT: - text="j", type=FIELD_NAME. - text="NR", type=CONTEXT_VARIABLE. - -x=0.3467901443380824,j=1 -x=0.7586799647899636,j=2 -x=0.20460330576630303,j=3 -x=0.38139939387114097,j=4 -x=0.5732889198020006,j=5 -x=0.5271261600918548,j=6 -x=0.6117840605678454,j=7 -x=0.5985540091064224,j=8 -x=0.03144187646093577,j=9 -x=0.5026260055412137,j=10 - -mlr --from ./reg_test/input/abixy --opprint put -S -v for(k,v in $*) {$[k."_orig"]=v; $[k] = "other"} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text=".", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="_orig", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="other", type=STRING_LITERAL. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text=".", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="_orig", type=STRING_LITERAL. - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="other", type=STRING_LITERAL. - -a b i x y a_orig b_orig i_orig x_orig y_orig -other other other other other pan pan 1 0.3467901443380824 0.7268028627434533 -other other other other other eks pan 2 0.7586799647899636 0.5221511083334797 -other other other other other wye wye 3 0.20460330576630303 0.33831852551664776 -other other other other other eks wye 4 0.38139939387114097 0.13418874328430463 -other other other other other wye pan 5 0.5732889198020006 0.8636244699032729 -other other other other other zee pan 6 0.5271261600918548 0.49322128674835697 -other other other other other eks zee 7 0.6117840605678454 0.1878849191181694 -other other other other other zee wye 8 0.5985540091064224 0.976181385699006 -other other other other other hat wye 9 0.03144187646093577 0.7495507603507059 -other other other other other pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --from ./reg_test/input/abixy put -S -v for(k,v in $*) {$[v]=k} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text="k", type=NONINDEXED_LOCAL_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=3 - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="=", type=INDIRECT_SREC_ASSIGNMENT: - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,pan=b,1=i,0.3467901443380824=x,0.7268028627434533=y -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,eks=a,pan=b,2=i,0.7586799647899636=x,0.5221511083334797=y -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,wye=b,3=i,0.20460330576630303=x,0.33831852551664776=y -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,eks=a,wye=b,4=i,0.38139939387114097=x,0.13418874328430463=y -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,wye=a,pan=b,5=i,0.5732889198020006=x,0.8636244699032729=y -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,zee=a,pan=b,6=i,0.5271261600918548=x,0.49322128674835697=y -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,eks=a,zee=b,7=i,0.6117840605678454=x,0.1878849191181694=y -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,zee=a,wye=b,8=i,0.5985540091064224=x,0.976181385699006=y -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,hat=a,wye=b,9=i,0.03144187646093577=x,0.7495507603507059=y -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,pan=a,wye=b,10=i,0.5026260055412137=x,0.9526183602969864=y - -mlr --from ./reg_test/input/abixy put -v - $sum = 0; - for(k,v in $*) { - if (k =~ "^[xy]$") { - $sum += $[k] - } - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="0", type=NUMERIC_LITERAL. - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="=~", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="^[xy]$", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="+", type=OPERATOR: - text="sum", type=FIELD_NAME. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="0", type=NUMERIC_LITERAL. - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="=~", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="^[xy]$", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="+", type=OPERATOR: - text="sum", type=FIELD_NAME. - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,sum=1.073593 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,sum=1.280831 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,sum=0.542922 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,sum=0.515588 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,sum=1.436913 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,sum=1.020347 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,sum=0.799669 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,sum=1.574735 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,sum=0.780993 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,sum=1.455244 - -mlr --from ./reg_test/input/abixy put -S -v - $sum = float(0); - for(k,v in $*) { - if (k =~ "^[xy]$") { - $sum += float($[k]) - } - } -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="float", type=FUNCTION_CALLSITE: - text="0", type=NUMERIC_LITERAL. - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="=~", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - text="^[xy]$", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="+", type=OPERATOR: - text="sum", type=FIELD_NAME. - text="float", type=FUNCTION_CALLSITE: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=3 max_var_depth=3 - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="float", type=FUNCTION_CALLSITE: - text="0", type=NUMERIC_LITERAL. - text="for", type=FOR_SREC: subframe_var_count=2 - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="for_full_srec_block", type=STATEMENT_BLOCK: - text="if_head", type=IF_HEAD: - text="if", type=IF_ITEM: - text="=~", type=OPERATOR: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="^[xy]$", type=STRING_LITERAL. - text="if_block", type=STATEMENT_BLOCK: subframe_var_count=0 - text="=", type=SREC_ASSIGNMENT: - text="sum", type=FIELD_NAME. - text="+", type=OPERATOR: - text="sum", type=FIELD_NAME. - text="float", type=FUNCTION_CALLSITE: - text="indirect_field_name", type=INDIRECT_FIELD_NAME: - text="k", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,sum=1.073593 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,sum=1.280831 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,sum=0.542922 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,sum=0.515588 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,sum=1.436913 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,sum=1.020347 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,sum=0.799669 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,sum=1.574735 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,sum=0.780993 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,sum=1.455244 - - -================================================================ -DSL FOR-OOSVAR LOOPS - -mlr --opprint -n put -v - @o[1][1]["text1"][NR] = $a; - @o[1][2]["text2"][NR] = $b; - @o[1][2][$a][$i*100] = $x; - for((k1,k2),v in @o[1][2]) { - @n[3][4][k2][k1] = v; - } - end { - emit @n, "a", "b", "c", "d" - } - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="text1", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="text2", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="a", type=FIELD_NAME. - text="*", type=OPERATOR: - text="i", type=FIELD_NAME. - text="100", type=NUMERIC_LITERAL. - text="x", type=FIELD_NAME. - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k1", type=UNTYPED_LOCAL_DEFINITION. - text="k2", type=UNTYPED_LOCAL_DEFINITION. - text="v", type=UNTYPED_LOCAL_DEFINITION. - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="n", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="k2", type=NONINDEXED_LOCAL_VARIABLE. - text="k1", type=NONINDEXED_LOCAL_VARIABLE. - text="v", type=NONINDEXED_LOCAL_VARIABLE. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="n", type=STRING_LITERAL. - text="emit_namelist", type=EMIT: - text="a", type=STRING_LITERAL. - text="b", type=STRING_LITERAL. - text="c", type=STRING_LITERAL. - text="d", type=STRING_LITERAL. - text="stream", type=STREAM: - -BLOCKED AST: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="n", type=STRING_LITERAL. - text="emit_namelist", type=EMIT: - text="a", type=STRING_LITERAL. - text="b", type=STRING_LITERAL. - text="c", type=STRING_LITERAL. - text="d", type=STRING_LITERAL. - text="stream", type=STREAM: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=2 max_var_depth=4 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="text1", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="a", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="text2", type=STRING_LITERAL. - text="NR", type=CONTEXT_VARIABLE. - text="b", type=FIELD_NAME. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="a", type=FIELD_NAME. - text="*", type=OPERATOR: - text="i", type=FIELD_NAME. - text="100", type=NUMERIC_LITERAL. - text="x", type=FIELD_NAME. - text="for", type=FOR_OOSVAR: subframe_var_count=3 - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k1", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="k2", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="v", type=UNTYPED_LOCAL_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=1 vardef_frame_relative_index=3 - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="o", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="for_loop_oosvar_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="n", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="4", type=NUMERIC_LITERAL. - text="k2", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=1 vardef_frame_relative_index=2 - text="k1", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=1 vardef_frame_relative_index=1 - text="v", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=1 vardef_frame_relative_index=3 - - -mlr --opprint --from ./reg_test/input/abixy put -q - @o[1][1]["text1"][NR] = $a; - @o[1][2]["text2"][NR] = $b; - @o[1][2][$a][$i*100] = $x; - for((k1,k2),v in @o[1][2]) { - @n[3][4][k2][k1] = v; - } - end { - emit @n, "a", "b", "c", "d" - } - -a b c d n -3 4 1 text2 pan -3 4 100 pan 0.346790 -3 4 2 text2 pan -3 4 200 eks 0.758680 -3 4 3 text2 wye -3 4 300 wye 0.204603 -3 4 4 text2 wye -3 4 400 eks 0.381399 -3 4 5 text2 pan -3 4 500 wye 0.573289 -3 4 6 text2 pan -3 4 600 zee 0.527126 -3 4 7 text2 zee -3 4 700 eks 0.611784 -3 4 8 text2 wye -3 4 800 zee 0.598554 -3 4 9 text2 wye -3 4 900 hat 0.031442 -3 4 10 text2 wye -3 4 1000 pan 0.502626 - -mlr --opprint --from ./reg_test/input/abixy put -q - @sum[$a][$b] += $x; - @count[$a][$b] += 1; - end { - for ((k1, k2), v in @sum) { - @mean[k1][k2] = @sum[k1][k2] / @count[k1][k2] - } - emitp @sum, "a", "b"; - emitp @count, "a", "b"; - emitp @mean, "a", "b" - } - -a b sum -pan pan 0.346790 -pan wye 0.502626 -eks pan 0.758680 -eks wye 0.381399 -eks zee 0.611784 -wye wye 0.204603 -wye pan 0.573289 -zee pan 0.527126 -zee wye 0.598554 -hat wye 0.031442 - -a b count -pan pan 1 -pan wye 1 -eks pan 1 -eks wye 1 -eks zee 1 -wye wye 1 -wye pan 1 -zee pan 1 -zee wye 1 -hat wye 1 - -a b mean -pan pan 0.346790 -pan wye 0.502626 -eks pan 0.758680 -eks wye 0.381399 -eks zee 0.611784 -wye wye 0.204603 -wye pan 0.573289 -zee pan 0.527126 -zee wye 0.598554 -hat wye 0.031442 - -mlr --opprint --from ./reg_test/input/abixy-wide put -q - @value["sum"][$a][$b] += $x; - @value["count"][$a][$b] += 1; - end { - for ((k1, k2), v in @value["sum"]) { - @value["mean"][k1][k2] = @value["sum"][k1][k2] / @value["count"][k1][k2] - } - emitp @value, "stat", "a", "b"; - } - -stat a b value -sum cat pan 42.327158 -sum cat hat 43.184410 -sum cat dog 39.241473 -sum cat wye 45.196775 -sum cat cat 37.894148 -sum pan wye 40.135300 -sum pan pan 36.226334 -sum pan hat 35.115869 -sum pan dog 37.817560 -sum pan cat 42.235677 -sum wye cat 40.805723 -sum wye hat 41.166697 -sum wye dog 40.619547 -sum wye wye 32.490973 -sum wye pan 33.027196 -sum dog hat 43.515162 -sum dog pan 45.614011 -sum dog dog 43.545956 -sum dog wye 37.223795 -sum dog cat 45.642595 -sum hat hat 48.058897 -sum hat wye 34.054270 -sum hat pan 42.538758 -sum hat cat 44.325655 -sum hat dog 37.114244 -count cat pan 89 -count cat hat 90 -count cat dog 78 -count cat wye 77 -count cat cat 79 -count pan wye 78 -count pan pan 77 -count pan hat 67 -count pan dog 73 -count pan cat 89 -count wye cat 74 -count wye hat 87 -count wye dog 76 -count wye wye 67 -count wye pan 66 -count dog hat 88 -count dog pan 87 -count dog dog 87 -count dog wye 79 -count dog cat 83 -count hat hat 88 -count hat wye 70 -count hat pan 85 -count hat cat 88 -count hat dog 78 -mean cat pan 0.475586 -mean cat hat 0.479827 -mean cat dog 0.503096 -mean cat wye 0.586971 -mean cat cat 0.479673 -mean pan wye 0.514555 -mean pan pan 0.470472 -mean pan hat 0.524117 -mean pan dog 0.518049 -mean pan cat 0.474558 -mean wye cat 0.551429 -mean wye hat 0.473180 -mean wye dog 0.534468 -mean wye wye 0.484940 -mean wye pan 0.500412 -mean dog hat 0.494490 -mean dog pan 0.524299 -mean dog dog 0.500528 -mean dog wye 0.471187 -mean dog cat 0.549911 -mean hat hat 0.546124 -mean hat wye 0.486490 -mean hat pan 0.500456 -mean hat cat 0.503701 -mean hat dog 0.475824 - -mlr -n put -v for (k, k in $*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_SREC: - text="variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="for_full_srec_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable k in the same scope. - -mlr -n put -v for (k, k in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="k", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable k in the same scope. - -mlr -n put -v for ((a,a), c in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable a in the same scope. - -mlr -n put -v for ((a,b), a in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable a in the same scope. - -mlr -n put -v for ((a,b), b in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable b in the same scope. - -mlr -n put -v for ((a,a,c), d in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="d", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable a in the same scope. - -mlr -n put -v for ((a,b,a), d in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="d", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable a in the same scope. - -mlr -n put -v for ((a,b,c), a in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable a in the same scope. - -mlr -n put -v for ((a,b,b), d in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="d", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable b in the same scope. - -mlr -n put -v for ((a,b,c), b in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable b in the same scope. - -mlr -n put -v for ((a,b,c), c in @*) {} -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="for", type=FOR_OOSVAR: - text="key_and_value_variables", type=FOR_VARIABLES: - text="key_variables", type=FOR_VARIABLES: - text="a", type=UNTYPED_LOCAL_DEFINITION. - text="b", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="c", type=UNTYPED_LOCAL_DEFINITION. - text="empty_keylist", type=OOSVAR_KEYLIST: - text="for_full_oosvar_block", type=STATEMENT_BLOCK: -mlr: redefinition of variable c in the same scope. - -mlr --from ./reg_test/input/xyz2 put -q func f() { return {"a"."b":"c"."d",3:4}}; for (k,v in f()){print "k=".k.",v=".v} -k=ab,v=cd -k=3,v=4 -k=ab,v=cd -k=3,v=4 - -mlr --from ./reg_test/input/xyz2 put -q for (k,v in {"a"."b":"c"."d",3:"c"}) {print "k=".k.",v=".v} -k=ab,v=cd -k=3,v=c -k=ab,v=cd -k=3,v=c - -mlr --from ./reg_test/input/xyz2 put -q o["a"."b"]="c"."d"; for (k,v in o) {print "k=".k.",v=".v} -k=ab,v=cd -k=ab,v=cd - -mlr --from ./reg_test/input/xyz2 put -q @o["a"."b"]="c"."d"; for (k,v in @o) {print "k=".k.",v=".v} -k=ab,v=cd -k=ab,v=cd - -mlr --from ./reg_test/input/xyz2 put for (k in $*) { print k} -x -y -z -x=3,y=4,z=5 -x -y -u -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put m=$*; for (k in m) { print k} -x -y -z -x=3,y=4,z=5 -x -y -u -x=6,y=7,u=8 - - -================================================================ -DSL FOR-BIND LOOPS FOR VALGRIND - - ----------------------------------------------------------------- key-only fors -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = xy; - for (k in o) { - print "k is " . k; - } - -k is pan_pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab] = xy; - for (k in @o) { - print "k is " . k; - } - -k is pan_pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k in {ab : xy}) { - print "k is " . k; - } - -k is pan_pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : xy}; - } - for (k in f($a, $b, $x, $y)) { - print "k is " . k; - } - -k is pan_pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- key-value fors with scalar values -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = xy; - for (k, v in o) { - print "k is " . k . " v is " . v; - } - -k is pan_pan v is 0.346790_0.726803 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is 0.758680_0.522151 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is 0.204603_0.338319 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is 0.381399_0.134189 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is _0.863624 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is 0.527126_0.493221 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is 0.611784_0.187885 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is 0.598554_ -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is 0.031442_0.749551 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is 0.502626_0.952618 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab] = xy; - for (k, v in @o) { - print "k is " . k . " v is " . v; - } - -k is pan_pan v is 0.346790_0.726803 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is 0.758680_0.522151 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is 0.204603_0.338319 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is 0.381399_0.134189 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is _0.863624 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is 0.527126_0.493221 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is 0.611784_0.187885 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is 0.598554_ -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is 0.031442_0.749551 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is 0.502626_0.952618 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k, v in {ab : xy}) { - print "k is " . k . " v is " . v; - } - -k is pan_pan v is 0.346790_0.726803 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is 0.758680_0.522151 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is 0.204603_0.338319 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is 0.381399_0.134189 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is _0.863624 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is 0.527126_0.493221 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is 0.611784_0.187885 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is 0.598554_ -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is 0.031442_0.749551 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is 0.502626_0.952618 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : xy}; - } - for (k, v in f($a, $b, $x, $y)) { - print "k is " . k . " v is " . v; - } - -k is pan_pan v is 0.346790_0.726803 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is 0.758680_0.522151 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is 0.204603_0.338319 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is 0.381399_0.134189 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is _0.863624 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is 0.527126_0.493221 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is 0.611784_0.187885 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is 0.598554_ -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is 0.031442_0.749551 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is 0.502626_0.952618 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- key-value fors with map values -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = {"foo": xy}; - for (k, v in o) { - print "k is " . k . " v is "; - dump v; - } - -k is pan_pan v is -{ - "foo": "0.346790_0.726803" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is -{ - "foo": "0.758680_0.522151" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is -{ - "foo": "0.204603_0.338319" -} -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is -{ - "foo": "0.381399_0.134189" -} -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is -{ - "foo": "_0.863624" -} -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is -{ - "foo": "0.527126_0.493221" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is -{ - "foo": "0.611784_0.187885" -} -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is -{ - "foo": "0.598554_" -} -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is -{ - "foo": "0.031442_0.749551" -} -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is -{ - "foo": "0.502626_0.952618" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab]["foo"] = xy; - for (k, v in @o) { - print "k is " . k . " v is "; - dump v; - } - -k is pan_pan v is -{ - "foo": "0.346790_0.726803" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is -{ - "foo": "0.758680_0.522151" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is -{ - "foo": "0.204603_0.338319" -} -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is -{ - "foo": "0.381399_0.134189" -} -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is -{ - "foo": "_0.863624" -} -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is -{ - "foo": "0.527126_0.493221" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is -{ - "foo": "0.611784_0.187885" -} -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is -{ - "foo": "0.598554_" -} -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is -{ - "foo": "0.031442_0.749551" -} -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is -{ - "foo": "0.502626_0.952618" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k, v in {ab : {"foo": xy}}) { - print "k is " . k . " v is "; - dump v; - } - -k is pan_pan v is -{ - "foo": "0.346790_0.726803" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is -{ - "foo": "0.758680_0.522151" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is -{ - "foo": "0.204603_0.338319" -} -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is -{ - "foo": "0.381399_0.134189" -} -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is -{ - "foo": "_0.863624" -} -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is -{ - "foo": "0.527126_0.493221" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is -{ - "foo": "0.611784_0.187885" -} -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is -{ - "foo": "0.598554_" -} -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is -{ - "foo": "0.031442_0.749551" -} -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is -{ - "foo": "0.502626_0.952618" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : {"foo" : xy}}; - } - for (k, v in f($a, $b, $x, $y)) { - print "k is " . k . " v is "; - dump v; - } - -k is pan_pan v is -{ - "foo": "0.346790_0.726803" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -k is eks_pan v is -{ - "foo": "0.758680_0.522151" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -k is _wye v is -{ - "foo": "0.204603_0.338319" -} -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -k is eks_ v is -{ - "foo": "0.381399_0.134189" -} -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -k is wye_pan v is -{ - "foo": "_0.863624" -} -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -k is zee_pan v is -{ - "foo": "0.527126_0.493221" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -k is eks_zee v is -{ - "foo": "0.611784_0.187885" -} -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -k is zee_wye v is -{ - "foo": "0.598554_" -} -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -k is _ v is -{ - "foo": "0.031442_0.749551" -} -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -k is pan_wye v is -{ - "foo": "0.502626_0.952618" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -DSL BREAK/CONTINUE IN SINGLE WHILE/DO-WHILE - -mlr --opprint --from ./reg_test/input/abixy put - while ($i < 5) { - $i += 1; - break; - $a = "ERROR"; - } - -a b i x y -pan pan 2 0.3467901443380824 0.7268028627434533 -eks pan 3 0.7586799647899636 0.5221511083334797 -wye wye 4 0.20460330576630303 0.33831852551664776 -eks wye 5 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put - while ($i < 5) { - $i += 1; - continue; - $a = "ERROR"; - } - -a b i x y -pan pan 5 0.3467901443380824 0.7268028627434533 -eks pan 5 0.7586799647899636 0.5221511083334797 -wye wye 5 0.20460330576630303 0.33831852551664776 -eks wye 5 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put - do { - $i += 1; - break; - $a = "ERROR"; - } while ($i < 5); - -a b i x y -pan pan 2 0.3467901443380824 0.7268028627434533 -eks pan 3 0.7586799647899636 0.5221511083334797 -wye wye 4 0.20460330576630303 0.33831852551664776 -eks wye 5 0.38139939387114097 0.13418874328430463 -wye pan 6 0.5732889198020006 0.8636244699032729 -zee pan 7 0.5271261600918548 0.49322128674835697 -eks zee 8 0.6117840605678454 0.1878849191181694 -zee wye 9 0.5985540091064224 0.976181385699006 -hat wye 10 0.03144187646093577 0.7495507603507059 -pan wye 11 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put - do { - $i += 1; - continue; - $a = "ERROR"; - } while ($i < 5); - -a b i x y -pan pan 5 0.3467901443380824 0.7268028627434533 -eks pan 5 0.7586799647899636 0.5221511083334797 -wye wye 5 0.20460330576630303 0.33831852551664776 -eks wye 5 0.38139939387114097 0.13418874328430463 -wye pan 6 0.5732889198020006 0.8636244699032729 -zee pan 7 0.5271261600918548 0.49322128674835697 -eks zee 8 0.6117840605678454 0.1878849191181694 -zee wye 9 0.5985540091064224 0.976181385699006 -hat wye 10 0.03144187646093577 0.7495507603507059 -pan wye 11 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put - $NR = NR; - while ($i < 5) { - $i += 1; - if (NR == 2) { - break; - } - $a = "reached"; - } - -a b i x y NR -reached pan 5 0.3467901443380824 0.7268028627434533 1 -eks pan 3 0.7586799647899636 0.5221511083334797 2 -reached wye 5 0.20460330576630303 0.33831852551664776 3 -reached wye 5 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $NR = NR; - while ($i < 5) { - $i += 1; - if (NR == 2) { - continue; - } - $a = "reached"; - } - -a b i x y NR -reached pan 5 0.3467901443380824 0.7268028627434533 1 -eks pan 5 0.7586799647899636 0.5221511083334797 2 -reached wye 5 0.20460330576630303 0.33831852551664776 3 -reached wye 5 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put -$NR = NR; - do { - $i += 1; - if (NR == 2) { - break; - } - $a = "reached"; - } while ($i < 5); - -a b i x y NR -reached pan 5 0.3467901443380824 0.7268028627434533 1 -eks pan 3 0.7586799647899636 0.5221511083334797 2 -reached wye 5 0.20460330576630303 0.33831852551664776 3 -reached wye 5 0.38139939387114097 0.13418874328430463 4 -reached pan 6 0.5732889198020006 0.8636244699032729 5 -reached pan 7 0.5271261600918548 0.49322128674835697 6 -reached zee 8 0.6117840605678454 0.1878849191181694 7 -reached wye 9 0.5985540091064224 0.976181385699006 8 -reached wye 10 0.03144187646093577 0.7495507603507059 9 -reached wye 11 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $NR = NR; - do { - $i += 1; - if (NR == 2) { - continue; - } - $a = "reached"; - } while ($i < 5); - -a b i x y NR -reached pan 5 0.3467901443380824 0.7268028627434533 1 -eks pan 5 0.7586799647899636 0.5221511083334797 2 -reached wye 5 0.20460330576630303 0.33831852551664776 3 -reached wye 5 0.38139939387114097 0.13418874328430463 4 -reached pan 6 0.5732889198020006 0.8636244699032729 5 -reached pan 7 0.5271261600918548 0.49322128674835697 6 -reached zee 8 0.6117840605678454 0.1878849191181694 7 -reached wye 9 0.5985540091064224 0.976181385699006 8 -reached wye 10 0.03144187646093577 0.7495507603507059 9 -reached wye 11 0.5026260055412137 0.9526183602969864 10 - - -================================================================ -DSL BREAK/CONTINUE IN NESTED WHILE/DO-WHILE - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - break; - while ($k < 7) { - $k += 1 - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 2 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 3 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - continue; - while ($k < 7) { - $k += 1 - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 1 -eks pan 2 0.7586799647899636 0.5221511083334797 4 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 3 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - break; - $k += 10000; - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 2 -eks pan 2 0.7586799647899636 0.5221511083334797 4 3 -wye wye 3 0.20460330576630303 0.33831852551664776 4 4 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - continue; - $k += 10000; - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 4 7 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - break; - } - while ($k < 7) { - $k += 1 - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 3 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - continue; - } - while ($k < 7) { - $k += 1 - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 4 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - if (NR == 2 || NR == 8) { - break; - } - $k += 10000; - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 -eks pan 2 0.7586799647899636 0.5221511083334797 4 3 -wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - if (NR == 2 || NR == 8) { - continue; - } - $k += 10000; - } - } - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 -eks pan 2 0.7586799647899636 0.5221511083334797 4 7 -wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 - -a b i x y j -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - break; - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 2 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 3 -eks wye 4 0.38139939387114097 0.13418874328430463 5 4 -wye pan 5 0.5732889198020006 0.8636244699032729 6 5 -zee pan 6 0.5271261600918548 0.49322128674835697 7 6 -eks zee 7 0.6117840605678454 0.1878849191181694 8 7 -zee wye 8 0.5985540091064224 0.976181385699006 9 8 -hat wye 9 0.03144187646093577 0.7495507603507059 10 9 -pan wye 10 0.5026260055412137 0.9526183602969864 11 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - continue; - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 1 -eks pan 2 0.7586799647899636 0.5221511083334797 4 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 3 -eks wye 4 0.38139939387114097 0.13418874328430463 5 4 -wye pan 5 0.5732889198020006 0.8636244699032729 6 5 -zee pan 6 0.5271261600918548 0.49322128674835697 7 6 -eks zee 7 0.6117840605678454 0.1878849191181694 8 7 -zee wye 8 0.5985540091064224 0.976181385699006 9 8 -hat wye 9 0.03144187646093577 0.7495507603507059 10 9 -pan wye 10 0.5026260055412137 0.9526183602969864 11 10 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - break; - $k += 10000; - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 2 -eks pan 2 0.7586799647899636 0.5221511083334797 4 3 -wye wye 3 0.20460330576630303 0.33831852551664776 4 4 -eks wye 4 0.38139939387114097 0.13418874328430463 5 5 -wye pan 5 0.5732889198020006 0.8636244699032729 6 6 -zee pan 6 0.5271261600918548 0.49322128674835697 7 7 -eks zee 7 0.6117840605678454 0.1878849191181694 8 8 -zee wye 8 0.5985540091064224 0.976181385699006 9 9 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10 -pan wye 10 0.5026260055412137 0.9526183602969864 11 11 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - continue; - $k += 10000; - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 4 7 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 -eks wye 4 0.38139939387114097 0.13418874328430463 5 7 -wye pan 5 0.5732889198020006 0.8636244699032729 6 7 -zee pan 6 0.5271261600918548 0.49322128674835697 7 7 -eks zee 7 0.6117840605678454 0.1878849191181694 8 8 -zee wye 8 0.5985540091064224 0.976181385699006 9 9 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10 -pan wye 10 0.5026260055412137 0.9526183602969864 11 11 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - break; - } - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 3 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 -eks wye 4 0.38139939387114097 0.13418874328430463 5 7 -wye pan 5 0.5732889198020006 0.8636244699032729 6 7 -zee pan 6 0.5271261600918548 0.49322128674835697 7 7 -eks zee 7 0.6117840605678454 0.1878849191181694 8 8 -zee wye 8 0.5985540091064224 0.976181385699006 9 8 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10 -pan wye 10 0.5026260055412137 0.9526183602969864 11 11 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - continue; - } - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 7 -eks pan 2 0.7586799647899636 0.5221511083334797 4 2 -wye wye 3 0.20460330576630303 0.33831852551664776 4 7 -eks wye 4 0.38139939387114097 0.13418874328430463 5 7 -wye pan 5 0.5732889198020006 0.8636244699032729 6 7 -zee pan 6 0.5271261600918548 0.49322128674835697 7 7 -eks zee 7 0.6117840605678454 0.1878849191181694 8 8 -zee wye 8 0.5985540091064224 0.976181385699006 9 8 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10 -pan wye 10 0.5026260055412137 0.9526183602969864 11 11 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - if (NR == 2 || NR == 8) { - break; - } - $k += 10000; - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 -eks pan 2 0.7586799647899636 0.5221511083334797 4 3 -wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 -eks wye 4 0.38139939387114097 0.13418874328430463 5 10005 -wye pan 5 0.5732889198020006 0.8636244699032729 6 10006 -zee pan 6 0.5271261600918548 0.49322128674835697 7 10007 -eks zee 7 0.6117840605678454 0.1878849191181694 8 10008 -zee wye 8 0.5985540091064224 0.976181385699006 9 9 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10010 -pan wye 10 0.5026260055412137 0.9526183602969864 11 10011 - -mlr --opprint --from ./reg_test/input/abixy put - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - if (NR == 2 || NR == 8) { - continue; - } - $k += 10000; - } while ($k < 7); - } while ($j < 4); - -a b i x y j k -pan pan 1 0.3467901443380824 0.7268028627434533 4 10002 -eks pan 2 0.7586799647899636 0.5221511083334797 4 7 -wye wye 3 0.20460330576630303 0.33831852551664776 4 10004 -eks wye 4 0.38139939387114097 0.13418874328430463 5 10005 -wye pan 5 0.5732889198020006 0.8636244699032729 6 10006 -zee pan 6 0.5271261600918548 0.49322128674835697 7 10007 -eks zee 7 0.6117840605678454 0.1878849191181694 8 10008 -zee wye 8 0.5985540091064224 0.976181385699006 9 9 -hat wye 9 0.03144187646093577 0.7495507603507059 10 10010 -pan wye 10 0.5026260055412137 0.9526183602969864 11 10011 - - -================================================================ -DSL BREAK/CONTINUE IN SINGLE FOR-SREC - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k,v in $*) { - @logging1[NR][k] = v; - if (k == "x") { - break; - } - } - end { - emitp @logging1, "NR", "k"; - } - -NR k logging1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k,v in $*) { - if (k == "x") { - break; - } - @logging2[NR][k] = v; - } - end { - emitp @logging2, "NR", "k"; - } - -NR k logging2 -1 a pan -1 b pan -1 i 1 -2 a eks -2 b pan -2 i 2 -3 a wye -3 b wye -3 i 3 -4 a eks -4 b wye -4 i 4 -5 a wye -5 b pan -5 i 5 -6 a zee -6 b pan -6 i 6 -7 a eks -7 b zee -7 i 7 -8 a zee -8 b wye -8 i 8 -9 a hat -9 b wye -9 i 9 -10 a pan -10 b wye -10 i 10 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k,v in $*) { - @logging3[NR][k] = v; - if (k == "x") { - continue; - } - } - end { - emitp @logging3, "NR", "k"; - } - -NR k logging3 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k,v in $*) { - if (k == "x") { - continue; - } - @logging4[NR][k] = v; - } - end { - emitp @logging4, "NR", "k" - } - -NR k logging4 -1 a pan -1 b pan -1 i 1 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k,v in $*) { - @logging1[NR][k] = v; - if (k == "x") { - break; - } - } - - for (k,v in $*) { - if (k == "x") { - break; - } - @logging2[NR][k] = v; - } - - for (k,v in $*) { - @logging3[NR][k] = v; - if (k == "x") { - continue; - } - } - - for (k,v in $*) { - if (k == "x") { - continue; - } - @logging4[NR][k] = v; - } - - end { - emitp @logging1, "NR", "k"; - emitp @logging2, "NR", "k"; - emitp @logging3, "NR", "k"; - emitp @logging4, "NR", "k" - } - -NR k logging1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 - -NR k logging2 -1 a pan -1 b pan -1 i 1 -2 a eks -2 b pan -2 i 2 -3 a wye -3 b wye -3 i 3 -4 a eks -4 b wye -4 i 4 -5 a wye -5 b pan -5 i 5 -6 a zee -6 b pan -6 i 6 -7 a eks -7 b zee -7 i 7 -8 a zee -8 b wye -8 i 8 -9 a hat -9 b wye -9 i 9 -10 a pan -10 b wye -10 i 10 - -NR k logging3 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR k logging4 -1 a pan -1 b pan -1 i 1 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 y 0.952618 - - -================================================================ -DSL BREAK/CONTINUE IN NESTED FOR-SREC - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -2 a before -3 a before -4 a before -5 a before -6 a before -7 a before -8 a before -9 a before -10 a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -1 b before -1 i before -1 x before -1 y before -2 a before -2 b before -2 i before -2 x before -2 y before -3 a before -3 b before -3 i before -3 x before -3 y before -4 a before -4 b before -4 i before -4 x before -4 y before -5 a before -5 b before -5 i before -5 x before -5 y before -6 a before -6 b before -6 i before -6 x before -6 y before -7 a before -7 b before -7 i before -7 x before -7 y before -8 a before -8 b before -8 i before -8 x before -8 y before -9 a before -9 b before -9 i before -9 x before -9 y before -10 a before -10 b before -10 i before -10 x before -10 y before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a before -1 b_a before -1 i_a before -1 x_a before -1 y_a before -2 a_a before -2 b_a before -2 i_a before -2 x_a before -2 y_a before -3 a_a before -3 b_a before -3 i_a before -3 x_a before -3 y_a before -4 a_a before -4 b_a before -4 i_a before -4 x_a before -4 y_a before -5 a_a before -5 b_a before -5 i_a before -5 x_a before -5 y_a before -6 a_a before -6 b_a before -6 i_a before -6 x_a before -6 y_a before -7 a_a before -7 b_a before -7 i_a before -7 x_a before -7 y_a before -8 a_a before -8 b_a before -8 i_a before -8 x_a before -8 y_a before -9 a_a before -9 b_a before -9 i_a before -9 x_a before -9 y_a before -10 a_a before -10 b_a before -10 i_a before -10 x_a before -10 y_a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a before -1 a_b before -1 a_i before -1 a_x before -1 a_y before -1 b_a before -1 b_b before -1 b_i before -1 b_x before -1 b_y before -1 i_a before -1 i_b before -1 i_i before -1 i_x before -1 i_y before -1 x_a before -1 x_b before -1 x_i before -1 x_x before -1 x_y before -1 y_a before -1 y_b before -1 y_i before -1 y_x before -1 y_y before -2 a_a before -2 a_b before -2 a_i before -2 a_x before -2 a_y before -2 b_a before -2 b_b before -2 b_i before -2 b_x before -2 b_y before -2 i_a before -2 i_b before -2 i_i before -2 i_x before -2 i_y before -2 x_a before -2 x_b before -2 x_i before -2 x_x before -2 x_y before -2 y_a before -2 y_b before -2 y_i before -2 y_x before -2 y_y before -3 a_a before -3 a_b before -3 a_i before -3 a_x before -3 a_y before -3 b_a before -3 b_b before -3 b_i before -3 b_x before -3 b_y before -3 i_a before -3 i_b before -3 i_i before -3 i_x before -3 i_y before -3 x_a before -3 x_b before -3 x_i before -3 x_x before -3 x_y before -3 y_a before -3 y_b before -3 y_i before -3 y_x before -3 y_y before -4 a_a before -4 a_b before -4 a_i before -4 a_x before -4 a_y before -4 b_a before -4 b_b before -4 b_i before -4 b_x before -4 b_y before -4 i_a before -4 i_b before -4 i_i before -4 i_x before -4 i_y before -4 x_a before -4 x_b before -4 x_i before -4 x_x before -4 x_y before -4 y_a before -4 y_b before -4 y_i before -4 y_x before -4 y_y before -5 a_a before -5 a_b before -5 a_i before -5 a_x before -5 a_y before -5 b_a before -5 b_b before -5 b_i before -5 b_x before -5 b_y before -5 i_a before -5 i_b before -5 i_i before -5 i_x before -5 i_y before -5 x_a before -5 x_b before -5 x_i before -5 x_x before -5 x_y before -5 y_a before -5 y_b before -5 y_i before -5 y_x before -5 y_y before -6 a_a before -6 a_b before -6 a_i before -6 a_x before -6 a_y before -6 b_a before -6 b_b before -6 b_i before -6 b_x before -6 b_y before -6 i_a before -6 i_b before -6 i_i before -6 i_x before -6 i_y before -6 x_a before -6 x_b before -6 x_i before -6 x_x before -6 x_y before -6 y_a before -6 y_b before -6 y_i before -6 y_x before -6 y_y before -7 a_a before -7 a_b before -7 a_i before -7 a_x before -7 a_y before -7 b_a before -7 b_b before -7 b_i before -7 b_x before -7 b_y before -7 i_a before -7 i_b before -7 i_i before -7 i_x before -7 i_y before -7 x_a before -7 x_b before -7 x_i before -7 x_x before -7 x_y before -7 y_a before -7 y_b before -7 y_i before -7 y_x before -7 y_y before -8 a_a before -8 a_b before -8 a_i before -8 a_x before -8 a_y before -8 b_a before -8 b_b before -8 b_i before -8 b_x before -8 b_y before -8 i_a before -8 i_b before -8 i_i before -8 i_x before -8 i_y before -8 x_a before -8 x_b before -8 x_i before -8 x_x before -8 x_y before -8 y_a before -8 y_b before -8 y_i before -8 y_x before -8 y_y before -9 a_a before -9 a_b before -9 a_i before -9 a_x before -9 a_y before -9 b_a before -9 b_b before -9 b_i before -9 b_x before -9 b_y before -9 i_a before -9 i_b before -9 i_i before -9 i_x before -9 i_y before -9 x_a before -9 x_b before -9 x_i before -9 x_x before -9 x_y before -9 y_a before -9 y_b before -9 y_i before -9 y_x before -9 y_y before -10 a_a before -10 a_b before -10 a_i before -10 a_x before -10 a_y before -10 b_a before -10 b_b before -10 b_i before -10 b_x before -10 b_y before -10 i_a before -10 i_b before -10 i_i before -10 i_x before -10 i_y before -10 x_a before -10 x_b before -10 x_i before -10 x_x before -10 x_y before -10 y_a before -10 y_b before -10 y_i before -10 y_x before -10 y_y before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -2 a before -3 a before -4 a before -5 a before -6 a before -7 a before -8 a before -9 a before -10 a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -1 b before -1 i before -1 x before -1 y before -2 a before -2 b before -2 i before -2 x before -2 y before -3 a before -3 b before -3 i before -3 x before -3 y before -4 a before -4 b before -4 i before -4 x before -4 y before -5 a before -5 b before -5 i before -5 x before -5 y before -6 a before -6 b before -6 i before -6 x before -6 y before -7 a before -7 b before -7 i before -7 x before -7 y before -8 a before -8 b before -8 i before -8 x before -8 y before -9 a before -9 b before -9 i before -9 x before -9 y before -10 a before -10 b before -10 i before -10 x before -10 y before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -2 a before -3 a before -4 a before -5 a before -6 a before -7 a before -8 a before -9 a before -10 a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a before -1 b before -1 i before -1 x before -1 y before -2 a before -2 b before -2 i before -2 x before -2 y before -3 a before -3 b before -3 i before -3 x before -3 y before -4 a before -4 b before -4 i before -4 x before -4 y before -5 a before -5 b before -5 i before -5 x before -5 y before -6 a before -6 b before -6 i before -6 x before -6 y before -7 a before -7 b before -7 i before -7 x before -7 y before -8 a before -8 b before -8 i before -8 x before -8 y before -9 a before -9 b before -9 i before -9 x before -9 y before -10 a before -10 b before -10 i before -10 x before -10 y before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -2 a eks -2 b before -3 a wye -3 b before -4 a eks -4 b before -5 a wye -5 b before -6 a zee -6 b before -7 a eks -7 b before -8 a zee -8 b before -9 a hat -9 b before -10 a pan -10 b before - -NR names output2 -1 a_a pan -1 a_b pan -1 a_i 1 -1 a_x 0.346790 -1 a_y 0.726803 -2 a_a eks -2 a_b pan -2 a_i 2 -2 a_x 0.758680 -2 a_y 0.522151 -3 a_a wye -3 a_b wye -3 a_i 3 -3 a_x 0.204603 -3 a_y 0.338319 -4 a_a eks -4 a_b wye -4 a_i 4 -4 a_x 0.381399 -4 a_y 0.134189 -5 a_a wye -5 a_b pan -5 a_i 5 -5 a_x 0.573289 -5 a_y 0.863624 -6 a_a zee -6 a_b pan -6 a_i 6 -6 a_x 0.527126 -6 a_y 0.493221 -7 a_a eks -7 a_b zee -7 a_i 7 -7 a_x 0.611784 -7 a_y 0.187885 -8 a_a zee -8 a_b wye -8 a_i 8 -8 a_x 0.598554 -8 a_y 0.976181 -9 a_a hat -9 a_b wye -9 a_i 9 -9 a_x 0.031442 -9 a_y 0.749551 -10 a_a pan -10 a_b wye -10 a_i 10 -10 a_x 0.502626 -10 a_y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b before -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b before -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b before -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b before -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b before -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b before -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b before -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b before -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b before -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a pan -1 a_b pan -1 a_i 1 -1 a_x 0.346790 -1 a_y 0.726803 -1 i_a pan -1 i_b pan -1 i_i 1 -1 i_x 0.346790 -1 i_y 0.726803 -1 x_a pan -1 x_b pan -1 x_i 1 -1 x_x 0.346790 -1 x_y 0.726803 -1 y_a pan -1 y_b pan -1 y_i 1 -1 y_x 0.346790 -1 y_y 0.726803 -2 a_a eks -2 a_b pan -2 a_i 2 -2 a_x 0.758680 -2 a_y 0.522151 -2 i_a eks -2 i_b pan -2 i_i 2 -2 i_x 0.758680 -2 i_y 0.522151 -2 x_a eks -2 x_b pan -2 x_i 2 -2 x_x 0.758680 -2 x_y 0.522151 -2 y_a eks -2 y_b pan -2 y_i 2 -2 y_x 0.758680 -2 y_y 0.522151 -3 a_a wye -3 a_b wye -3 a_i 3 -3 a_x 0.204603 -3 a_y 0.338319 -3 i_a wye -3 i_b wye -3 i_i 3 -3 i_x 0.204603 -3 i_y 0.338319 -3 x_a wye -3 x_b wye -3 x_i 3 -3 x_x 0.204603 -3 x_y 0.338319 -3 y_a wye -3 y_b wye -3 y_i 3 -3 y_x 0.204603 -3 y_y 0.338319 -4 a_a eks -4 a_b wye -4 a_i 4 -4 a_x 0.381399 -4 a_y 0.134189 -4 i_a eks -4 i_b wye -4 i_i 4 -4 i_x 0.381399 -4 i_y 0.134189 -4 x_a eks -4 x_b wye -4 x_i 4 -4 x_x 0.381399 -4 x_y 0.134189 -4 y_a eks -4 y_b wye -4 y_i 4 -4 y_x 0.381399 -4 y_y 0.134189 -5 a_a wye -5 a_b pan -5 a_i 5 -5 a_x 0.573289 -5 a_y 0.863624 -5 i_a wye -5 i_b pan -5 i_i 5 -5 i_x 0.573289 -5 i_y 0.863624 -5 x_a wye -5 x_b pan -5 x_i 5 -5 x_x 0.573289 -5 x_y 0.863624 -5 y_a wye -5 y_b pan -5 y_i 5 -5 y_x 0.573289 -5 y_y 0.863624 -6 a_a zee -6 a_b pan -6 a_i 6 -6 a_x 0.527126 -6 a_y 0.493221 -6 i_a zee -6 i_b pan -6 i_i 6 -6 i_x 0.527126 -6 i_y 0.493221 -6 x_a zee -6 x_b pan -6 x_i 6 -6 x_x 0.527126 -6 x_y 0.493221 -6 y_a zee -6 y_b pan -6 y_i 6 -6 y_x 0.527126 -6 y_y 0.493221 -7 a_a eks -7 a_b zee -7 a_i 7 -7 a_x 0.611784 -7 a_y 0.187885 -7 i_a eks -7 i_b zee -7 i_i 7 -7 i_x 0.611784 -7 i_y 0.187885 -7 x_a eks -7 x_b zee -7 x_i 7 -7 x_x 0.611784 -7 x_y 0.187885 -7 y_a eks -7 y_b zee -7 y_i 7 -7 y_x 0.611784 -7 y_y 0.187885 -8 a_a zee -8 a_b wye -8 a_i 8 -8 a_x 0.598554 -8 a_y 0.976181 -8 i_a zee -8 i_b wye -8 i_i 8 -8 i_x 0.598554 -8 i_y 0.976181 -8 x_a zee -8 x_b wye -8 x_i 8 -8 x_x 0.598554 -8 x_y 0.976181 -8 y_a zee -8 y_b wye -8 y_i 8 -8 y_x 0.598554 -8 y_y 0.976181 -9 a_a hat -9 a_b wye -9 a_i 9 -9 a_x 0.031442 -9 a_y 0.749551 -9 i_a hat -9 i_b wye -9 i_i 9 -9 i_x 0.031442 -9 i_y 0.749551 -9 x_a hat -9 x_b wye -9 x_i 9 -9 x_x 0.031442 -9 x_y 0.749551 -9 y_a hat -9 y_b wye -9 y_i 9 -9 y_x 0.031442 -9 y_y 0.749551 -10 a_a pan -10 a_b wye -10 a_i 10 -10 a_x 0.502626 -10 a_y 0.952618 -10 i_a pan -10 i_b wye -10 i_i 10 -10 i_x 0.502626 -10 i_y 0.952618 -10 x_a pan -10 x_b wye -10 x_i 10 -10 x_x 0.502626 -10 x_y 0.952618 -10 y_a pan -10 y_b wye -10 y_i 10 -10 y_x 0.502626 -10 y_y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a before -1 b_a before -1 i_a before -1 x_a before -1 y_a before -2 a_a before -2 b_a before -2 i_a before -2 x_a before -2 y_a before -3 a_a before -3 b_a before -3 i_a before -3 x_a before -3 y_a before -4 a_a before -4 b_a before -4 i_a before -4 x_a before -4 y_a before -5 a_a before -5 b_a before -5 i_a before -5 x_a before -5 y_a before -6 a_a before -6 b_a before -6 i_a before -6 x_a before -6 y_a before -7 a_a before -7 b_a before -7 i_a before -7 x_a before -7 y_a before -8 a_a before -8 b_a before -8 i_a before -8 x_a before -8 y_a before -9 a_a before -9 b_a before -9 i_a before -9 x_a before -9 y_a before -10 a_a before -10 b_a before -10 i_a before -10 x_a before -10 y_a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "b") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b pan -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b pan -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b wye -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b wye -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b pan -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b pan -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b zee -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b wye -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b wye -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b wye -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a pan -1 a_b before -1 a_i 1 -1 a_x 0.346790 -1 a_y 0.726803 -1 b_a pan -1 b_b before -1 b_i 1 -1 b_x 0.346790 -1 b_y 0.726803 -1 i_a pan -1 i_b before -1 i_i 1 -1 i_x 0.346790 -1 i_y 0.726803 -1 x_a pan -1 x_b before -1 x_i 1 -1 x_x 0.346790 -1 x_y 0.726803 -1 y_a pan -1 y_b before -1 y_i 1 -1 y_x 0.346790 -1 y_y 0.726803 -2 a_a eks -2 a_b before -2 a_i 2 -2 a_x 0.758680 -2 a_y 0.522151 -2 b_a eks -2 b_b before -2 b_i 2 -2 b_x 0.758680 -2 b_y 0.522151 -2 i_a eks -2 i_b before -2 i_i 2 -2 i_x 0.758680 -2 i_y 0.522151 -2 x_a eks -2 x_b before -2 x_i 2 -2 x_x 0.758680 -2 x_y 0.522151 -2 y_a eks -2 y_b before -2 y_i 2 -2 y_x 0.758680 -2 y_y 0.522151 -3 a_a wye -3 a_b before -3 a_i 3 -3 a_x 0.204603 -3 a_y 0.338319 -3 b_a wye -3 b_b before -3 b_i 3 -3 b_x 0.204603 -3 b_y 0.338319 -3 i_a wye -3 i_b before -3 i_i 3 -3 i_x 0.204603 -3 i_y 0.338319 -3 x_a wye -3 x_b before -3 x_i 3 -3 x_x 0.204603 -3 x_y 0.338319 -3 y_a wye -3 y_b before -3 y_i 3 -3 y_x 0.204603 -3 y_y 0.338319 -4 a_a eks -4 a_b before -4 a_i 4 -4 a_x 0.381399 -4 a_y 0.134189 -4 b_a eks -4 b_b before -4 b_i 4 -4 b_x 0.381399 -4 b_y 0.134189 -4 i_a eks -4 i_b before -4 i_i 4 -4 i_x 0.381399 -4 i_y 0.134189 -4 x_a eks -4 x_b before -4 x_i 4 -4 x_x 0.381399 -4 x_y 0.134189 -4 y_a eks -4 y_b before -4 y_i 4 -4 y_x 0.381399 -4 y_y 0.134189 -5 a_a wye -5 a_b before -5 a_i 5 -5 a_x 0.573289 -5 a_y 0.863624 -5 b_a wye -5 b_b before -5 b_i 5 -5 b_x 0.573289 -5 b_y 0.863624 -5 i_a wye -5 i_b before -5 i_i 5 -5 i_x 0.573289 -5 i_y 0.863624 -5 x_a wye -5 x_b before -5 x_i 5 -5 x_x 0.573289 -5 x_y 0.863624 -5 y_a wye -5 y_b before -5 y_i 5 -5 y_x 0.573289 -5 y_y 0.863624 -6 a_a zee -6 a_b before -6 a_i 6 -6 a_x 0.527126 -6 a_y 0.493221 -6 b_a zee -6 b_b before -6 b_i 6 -6 b_x 0.527126 -6 b_y 0.493221 -6 i_a zee -6 i_b before -6 i_i 6 -6 i_x 0.527126 -6 i_y 0.493221 -6 x_a zee -6 x_b before -6 x_i 6 -6 x_x 0.527126 -6 x_y 0.493221 -6 y_a zee -6 y_b before -6 y_i 6 -6 y_x 0.527126 -6 y_y 0.493221 -7 a_a eks -7 a_b before -7 a_i 7 -7 a_x 0.611784 -7 a_y 0.187885 -7 b_a eks -7 b_b before -7 b_i 7 -7 b_x 0.611784 -7 b_y 0.187885 -7 i_a eks -7 i_b before -7 i_i 7 -7 i_x 0.611784 -7 i_y 0.187885 -7 x_a eks -7 x_b before -7 x_i 7 -7 x_x 0.611784 -7 x_y 0.187885 -7 y_a eks -7 y_b before -7 y_i 7 -7 y_x 0.611784 -7 y_y 0.187885 -8 a_a zee -8 a_b before -8 a_i 8 -8 a_x 0.598554 -8 a_y 0.976181 -8 b_a zee -8 b_b before -8 b_i 8 -8 b_x 0.598554 -8 b_y 0.976181 -8 i_a zee -8 i_b before -8 i_i 8 -8 i_x 0.598554 -8 i_y 0.976181 -8 x_a zee -8 x_b before -8 x_i 8 -8 x_x 0.598554 -8 x_y 0.976181 -8 y_a zee -8 y_b before -8 y_i 8 -8 y_x 0.598554 -8 y_y 0.976181 -9 a_a hat -9 a_b before -9 a_i 9 -9 a_x 0.031442 -9 a_y 0.749551 -9 b_a hat -9 b_b before -9 b_i 9 -9 b_x 0.031442 -9 b_y 0.749551 -9 i_a hat -9 i_b before -9 i_i 9 -9 i_x 0.031442 -9 i_y 0.749551 -9 x_a hat -9 x_b before -9 x_i 9 -9 x_x 0.031442 -9 x_y 0.749551 -9 y_a hat -9 y_b before -9 y_i 9 -9 y_x 0.031442 -9 y_y 0.749551 -10 a_a pan -10 a_b before -10 a_i 10 -10 a_x 0.502626 -10 a_y 0.952618 -10 b_a pan -10 b_b before -10 b_i 10 -10 b_x 0.502626 -10 b_y 0.952618 -10 i_a pan -10 i_b before -10 i_i 10 -10 i_x 0.502626 -10 i_y 0.952618 -10 x_a pan -10 x_b before -10 x_i 10 -10 x_x 0.502626 -10 x_y 0.952618 -10 y_a pan -10 y_b before -10 y_i 10 -10 y_x 0.502626 -10 y_y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -2 a eks -2 b before -3 a wye -3 b before -4 a eks -4 b before -5 a wye -5 b before -6 a zee -6 b before -7 a eks -7 b before -8 a zee -8 b before -9 a hat -9 b before -10 a pan -10 b before - -NR names output2 -1 a_a before -2 a_a before -3 a_a before -4 a_a before -5 a_a before -6 a_a before -7 a_a before -8 a_a before -9 a_a before -10 a_a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b before -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b before -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b before -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b before -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b before -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b before -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b before -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b before -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b before -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a before -1 i_a before -1 x_a before -1 y_a before -2 a_a before -2 i_a before -2 x_a before -2 y_a before -3 a_a before -3 i_a before -3 x_a before -3 y_a before -4 a_a before -4 i_a before -4 x_a before -4 y_a before -5 a_a before -5 i_a before -5 x_a before -5 y_a before -6 a_a before -6 i_a before -6 x_a before -6 y_a before -7 a_a before -7 i_a before -7 x_a before -7 y_a before -8 a_a before -8 i_a before -8 x_a before -8 y_a before -9 a_a before -9 i_a before -9 x_a before -9 y_a before -10 a_a before -10 i_a before -10 x_a before -10 y_a before - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -2 a eks -2 b before -3 a wye -3 b before -4 a eks -4 b before -5 a wye -5 b before -6 a zee -6 b before -7 a eks -7 b before -8 a zee -8 b before -9 a hat -9 b before -10 a pan -10 b before - -NR names output2 -1 a_a before -1 a_b pan -1 a_i 1 -1 a_x 0.346790 -1 a_y 0.726803 -2 a_a before -2 a_b pan -2 a_i 2 -2 a_x 0.758680 -2 a_y 0.522151 -3 a_a before -3 a_b wye -3 a_i 3 -3 a_x 0.204603 -3 a_y 0.338319 -4 a_a before -4 a_b wye -4 a_i 4 -4 a_x 0.381399 -4 a_y 0.134189 -5 a_a before -5 a_b pan -5 a_i 5 -5 a_x 0.573289 -5 a_y 0.863624 -6 a_a before -6 a_b pan -6 a_i 6 -6 a_x 0.527126 -6 a_y 0.493221 -7 a_a before -7 a_b zee -7 a_i 7 -7 a_x 0.611784 -7 a_y 0.187885 -8 a_a before -8 a_b wye -8 a_i 8 -8 a_x 0.598554 -8 a_y 0.976181 -9 a_a before -9 a_b wye -9 a_i 9 -9 a_x 0.031442 -9 a_y 0.749551 -10 a_a before -10 a_b wye -10 a_i 10 -10 a_x 0.502626 -10 a_y 0.952618 - -mlr --opprint --from ./reg_test/input/abixy put -q - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } - -NR name output1 -1 a pan -1 b before -1 i 1 -1 x 0.346790 -1 y 0.726803 -2 a eks -2 b before -2 i 2 -2 x 0.758680 -2 y 0.522151 -3 a wye -3 b before -3 i 3 -3 x 0.204603 -3 y 0.338319 -4 a eks -4 b before -4 i 4 -4 x 0.381399 -4 y 0.134189 -5 a wye -5 b before -5 i 5 -5 x 0.573289 -5 y 0.863624 -6 a zee -6 b before -6 i 6 -6 x 0.527126 -6 y 0.493221 -7 a eks -7 b before -7 i 7 -7 x 0.611784 -7 y 0.187885 -8 a zee -8 b before -8 i 8 -8 x 0.598554 -8 y 0.976181 -9 a hat -9 b before -9 i 9 -9 x 0.031442 -9 y 0.749551 -10 a pan -10 b before -10 i 10 -10 x 0.502626 -10 y 0.952618 - -NR names output2 -1 a_a before -1 a_b pan -1 a_i 1 -1 a_x 0.346790 -1 a_y 0.726803 -1 i_a before -1 i_b pan -1 i_i 1 -1 i_x 0.346790 -1 i_y 0.726803 -1 x_a before -1 x_b pan -1 x_i 1 -1 x_x 0.346790 -1 x_y 0.726803 -1 y_a before -1 y_b pan -1 y_i 1 -1 y_x 0.346790 -1 y_y 0.726803 -2 a_a before -2 a_b pan -2 a_i 2 -2 a_x 0.758680 -2 a_y 0.522151 -2 i_a before -2 i_b pan -2 i_i 2 -2 i_x 0.758680 -2 i_y 0.522151 -2 x_a before -2 x_b pan -2 x_i 2 -2 x_x 0.758680 -2 x_y 0.522151 -2 y_a before -2 y_b pan -2 y_i 2 -2 y_x 0.758680 -2 y_y 0.522151 -3 a_a before -3 a_b wye -3 a_i 3 -3 a_x 0.204603 -3 a_y 0.338319 -3 i_a before -3 i_b wye -3 i_i 3 -3 i_x 0.204603 -3 i_y 0.338319 -3 x_a before -3 x_b wye -3 x_i 3 -3 x_x 0.204603 -3 x_y 0.338319 -3 y_a before -3 y_b wye -3 y_i 3 -3 y_x 0.204603 -3 y_y 0.338319 -4 a_a before -4 a_b wye -4 a_i 4 -4 a_x 0.381399 -4 a_y 0.134189 -4 i_a before -4 i_b wye -4 i_i 4 -4 i_x 0.381399 -4 i_y 0.134189 -4 x_a before -4 x_b wye -4 x_i 4 -4 x_x 0.381399 -4 x_y 0.134189 -4 y_a before -4 y_b wye -4 y_i 4 -4 y_x 0.381399 -4 y_y 0.134189 -5 a_a before -5 a_b pan -5 a_i 5 -5 a_x 0.573289 -5 a_y 0.863624 -5 i_a before -5 i_b pan -5 i_i 5 -5 i_x 0.573289 -5 i_y 0.863624 -5 x_a before -5 x_b pan -5 x_i 5 -5 x_x 0.573289 -5 x_y 0.863624 -5 y_a before -5 y_b pan -5 y_i 5 -5 y_x 0.573289 -5 y_y 0.863624 -6 a_a before -6 a_b pan -6 a_i 6 -6 a_x 0.527126 -6 a_y 0.493221 -6 i_a before -6 i_b pan -6 i_i 6 -6 i_x 0.527126 -6 i_y 0.493221 -6 x_a before -6 x_b pan -6 x_i 6 -6 x_x 0.527126 -6 x_y 0.493221 -6 y_a before -6 y_b pan -6 y_i 6 -6 y_x 0.527126 -6 y_y 0.493221 -7 a_a before -7 a_b zee -7 a_i 7 -7 a_x 0.611784 -7 a_y 0.187885 -7 i_a before -7 i_b zee -7 i_i 7 -7 i_x 0.611784 -7 i_y 0.187885 -7 x_a before -7 x_b zee -7 x_i 7 -7 x_x 0.611784 -7 x_y 0.187885 -7 y_a before -7 y_b zee -7 y_i 7 -7 y_x 0.611784 -7 y_y 0.187885 -8 a_a before -8 a_b wye -8 a_i 8 -8 a_x 0.598554 -8 a_y 0.976181 -8 i_a before -8 i_b wye -8 i_i 8 -8 i_x 0.598554 -8 i_y 0.976181 -8 x_a before -8 x_b wye -8 x_i 8 -8 x_x 0.598554 -8 x_y 0.976181 -8 y_a before -8 y_b wye -8 y_i 8 -8 y_x 0.598554 -8 y_y 0.976181 -9 a_a before -9 a_b wye -9 a_i 9 -9 a_x 0.031442 -9 a_y 0.749551 -9 i_a before -9 i_b wye -9 i_i 9 -9 i_x 0.031442 -9 i_y 0.749551 -9 x_a before -9 x_b wye -9 x_i 9 -9 x_x 0.031442 -9 x_y 0.749551 -9 y_a before -9 y_b wye -9 y_i 9 -9 y_x 0.031442 -9 y_y 0.749551 -10 a_a before -10 a_b wye -10 a_i 10 -10 a_x 0.502626 -10 a_y 0.952618 -10 i_a before -10 i_b wye -10 i_i 10 -10 i_x 0.502626 -10 i_y 0.952618 -10 x_a before -10 x_b wye -10 x_i 10 -10 x_x 0.502626 -10 x_y 0.952618 -10 y_a before -10 y_b wye -10 y_i 10 -10 y_x 0.502626 -10 y_y 0.952618 - - -================================================================ -FOR-MAP DEPTH TESTS - - ----------------------------------------------------------------- for full oosvar -mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for(k1,v in @*) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1),v in @*) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1,k2),v in @*) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put @o[1][2] = 7; for((k1,k2,k3),v in @*) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - - ----------------------------------------------------------------- for oosvar submap -mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for(k1,v in @o[1][2]) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1),v in @o[1][2]) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1,k2),v in @o[1][2]) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put @o[1][2][3] = 7; for((k1,k2,k3),v in @o[1][2]) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- for local -mlr --from ./reg_test/input/abixy put o[1][2] = 7; for(k1,v in o) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1),v in o) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1,k2),v in o) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put o[1][2] = 7; for((k1,k2,k3),v in o) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- for map-literal -mlr --from ./reg_test/input/abixy put for(k1,v in {1:{2:7}}) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put for((k1),v in {1:{2:7}}) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put for((k1,k2),v in {1:{2:7}}) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=10.346790,y=100.726803 -a=eks,b=pan,i=2,x=10.758680,y=100.522151 -a=wye,b=wye,i=3,x=10.204603,y=100.338319 -a=eks,b=wye,i=4,x=10.381399,y=100.134189 -a=wye,b=pan,i=5,x=10.573289,y=100.863624 -a=zee,b=pan,i=6,x=10.527126,y=100.493221 -a=eks,b=zee,i=7,x=10.611784,y=100.187885 -a=zee,b=wye,i=8,x=10.598554,y=100.976181 -a=hat,b=wye,i=9,x=10.031442,y=100.749551 -a=pan,b=wye,i=10,x=10.502626,y=100.952618 - -mlr --from ./reg_test/input/abixy put for((k1,k2,k3),v in {1:{2:7}}) {$x+=10;$y+=100} -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -DSL BREAK/CONTINUE IN SINGLE FOR-OOSVAR - - ----------------------------------------------------------------- single-key tests, direct break/continue -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - break; - @output[k1] = v; - } - emit @output, "NR", "name" - } - - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - break; - @output[k1] = "ERROR"; - } - emit @output, "NR", "name" - } - -NR output -a eks - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - continue; - @output[k1] = v - } - emit @output, "NR", "name" - } - - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - continue; - @output[k1] = "ERROR"; - } - emit @output, "NR", "name" - } - -NR output -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - - ----------------------------------------------------------------- single-key tests, indirect break/continue -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - if (k1 == "i") { - break; - } - @output[k1] = v; - } - emit @output, "NR", "name" - } - -NR output -a eks -b pan - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - if (k1 == "i") { - break; - } - } - emit @output, "NR", "name" - } - -NR output -a eks -b pan -i 2 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - if (k1 == "i") { - continue; - } - @output[k1] = v - } - emit @output, "NR", "name" - } - -NR output -a eks -b pan -x 0.7586799647899636 -y 0.5221511083334797 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - if (k1 == "i") { - continue; - } - @output[k1] = "reached"; - } - emit @output, "NR", "name" - } - -NR output -a reached -b reached -i 2 -x reached -y reached - - ----------------------------------------------------------------- multiple-key tests, direct break/continue -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - break; - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } - - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - break; - @output[k1][k2] = "ERROR" - } - emit @output, "NR", "name" - } - -NR name output -1 a pan - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - continue; - @output[k1][k2] = v - } - emit @output, "NR", "name" - } - - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - continue; - @output[k1][k2] = "ERROR"; - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i 2 -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i 3 -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i 4 -4 x 0.38139939387114097 -4 y 0.13418874328430463 -5 a wye -5 b pan -5 i 5 -5 x 0.5732889198020006 -5 y 0.8636244699032729 -6 a zee -6 b pan -6 i 6 -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 i 7 -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 i 8 -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 i 9 -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 i 10 -10 x 0.5026260055412137 -10 y 0.9526183602969864 - - ----------------------------------------------------------------- multiple-key tests, indirect break/continue -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 == 5) { - break; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i 2 -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i 3 -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i 4 -4 x 0.38139939387114097 -4 y 0.13418874328430463 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k2 == "i") { - break; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - if (k1 == 5) { - break; - } - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i 2 -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i 3 -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i 4 -4 x 0.38139939387114097 -4 y 0.13418874328430463 -5 a wye - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - if (k2 == "i") { - break; - } - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 == 5) { - continue; - } - @output[k1][k2] = v - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i 2 -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i 3 -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i 4 -4 x 0.38139939387114097 -4 y 0.13418874328430463 -6 a zee -6 b pan -6 i 6 -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 i 7 -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 i 8 -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 i 9 -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 i 10 -10 x 0.5026260055412137 -10 y 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k2 == "i") { - continue; - } - @output[k1][k2] = v - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 x 0.38139939387114097 -4 y 0.13418874328430463 -5 a wye -5 b pan -5 x 0.5732889198020006 -5 y 0.8636244699032729 -6 a zee -6 b pan -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 x 0.5026260055412137 -10 y 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = "before"; - if (k1 == 5) { - continue; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i 2 -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i 3 -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i 4 -4 x 0.38139939387114097 -4 y 0.13418874328430463 -5 a before -5 b before -5 i before -5 x before -5 y before -6 a zee -6 b pan -6 i 6 -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 i 7 -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 i 8 -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 i 9 -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 i 10 -10 x 0.5026260055412137 -10 y 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = "before"; - if (k2 == "i") { - continue; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } - -NR name output -1 a pan -1 b pan -1 i before -1 x 0.3467901443380824 -1 y 0.7268028627434533 -2 a eks -2 b pan -2 i before -2 x 0.7586799647899636 -2 y 0.5221511083334797 -3 a wye -3 b wye -3 i before -3 x 0.20460330576630303 -3 y 0.33831852551664776 -4 a eks -4 b wye -4 i before -4 x 0.38139939387114097 -4 y 0.13418874328430463 -5 a wye -5 b pan -5 i before -5 x 0.5732889198020006 -5 y 0.8636244699032729 -6 a zee -6 b pan -6 i before -6 x 0.5271261600918548 -6 y 0.49322128674835697 -7 a eks -7 b zee -7 i before -7 x 0.6117840605678454 -7 y 0.1878849191181694 -8 a zee -8 b wye -8 i before -8 x 0.5985540091064224 -8 y 0.976181385699006 -9 a hat -9 b wye -9 i before -9 x 0.03144187646093577 -9 y 0.7495507603507059 -10 a pan -10 b wye -10 i before -10 x 0.5026260055412137 -10 y 0.9526183602969864 - - -================================================================ -DSL BREAK/CONTINUE IN NESTED FOR-OOSVAR - -mlr --opprint --from ./reg_test/input/abixy put -q - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 != 2) { - continue - } - for ((k3, k4), v in @logging) { - if (k3 != 4) { - continue - } - @output[k1][k2][k3][k4] = v; - } - } - emit @output, "NR1", "name1", "NR2", "name2" - } - -NR1 name1 NR2 name2 output -2 a 4 a eks -2 a 4 b wye -2 a 4 i 4 -2 a 4 x 0.38139939387114097 -2 a 4 y 0.13418874328430463 -2 b 4 a eks -2 b 4 b wye -2 b 4 i 4 -2 b 4 x 0.38139939387114097 -2 b 4 y 0.13418874328430463 -2 i 4 a eks -2 i 4 b wye -2 i 4 i 4 -2 i 4 x 0.38139939387114097 -2 i 4 y 0.13418874328430463 -2 x 4 a eks -2 x 4 b wye -2 x 4 i 4 -2 x 4 x 0.38139939387114097 -2 x 4 y 0.13418874328430463 -2 y 4 a eks -2 y 4 b wye -2 y 4 i 4 -2 y 4 x 0.38139939387114097 -2 y 4 y 0.13418874328430463 - - -================================================================ -DSL PRINT - -mlr put -q print 1; print "two"; print $a; print; print $i < 4; print "y is ".string($y); print "" ./reg_test/input/abixy -1 -two -pan - -true -y is 0.726803 - -1 -two -eks - -true -y is 0.522151 - -1 -two -wye - -true -y is 0.338319 - -1 -two -eks - -false -y is 0.134189 - -1 -two -wye - -false -y is 0.863624 - -1 -two -zee - -false -y is 0.493221 - -1 -two -eks - -false -y is 0.187885 - -1 -two -zee - -false -y is 0.976181 - -1 -two -hat - -false -y is 0.749551 - -1 -two -pan - -false -y is 0.952618 - - -mlr put -q printn 1; printn "two"; printn $a; printn; printn $i < 4; printn "y is ".string($y); print "" ./reg_test/input/abixy -1twopantruey is 0.726803 -1twoekstruey is 0.522151 -1twowyetruey is 0.338319 -1twoeksfalsey is 0.134189 -1twowyefalsey is 0.863624 -1twozeefalsey is 0.493221 -1twoeksfalsey is 0.187885 -1twozeefalsey is 0.976181 -1twohatfalsey is 0.749551 -1twopanfalsey is 0.952618 - -mlr put -q print $*; print $*; print {}; print ./reg_test/input/abixy -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - -{is-a-map} -{is-a-map} -{is-a-map} - - -mlr put -q printn $*; printn $*; printn {}; print ./reg_test/input/abixy -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} -{is-a-map}{is-a-map}{is-a-map} - - -================================================================ -ABSENT/EMPTY - -mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy -sum=4.536294 - -mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum=0.777892 -a=zee,sum=1.125680 -a=hat,sum=0.031442 - -mlr put $nonesuch = @nonesuch ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het -sum=3.963005 - -mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=zee,sum=1.125680 - -mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy -sumtype=float,xtype=float,sum=0.346790 -sumtype=float,xtype=float,sum=1.105470 -sumtype=float,xtype=float,sum=1.310073 -sumtype=float,xtype=float,sum=1.691473 -sumtype=float,xtype=float,sum=2.264762 -sumtype=float,xtype=float,sum=2.791888 -sumtype=float,xtype=float,sum=3.403672 -sumtype=float,xtype=float,sum=4.002226 -sumtype=float,xtype=float,sum=4.033668 -sumtype=float,xtype=float,sum=4.536294 -sum=4.536294 - -mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy-het -sumtype=float,xtype=float,sum=0.346790 -sumtype=float,xtype=float,sum=1.105470 -sumtype=float,xtype=float,sum=1.310073 -sumtype=float,xtype=float,sum=1.691473 -sumtype=float,xtype=absent,sum=1.691473 -sumtype=float,xtype=float,sum=2.218599 -sumtype=float,xtype=float,sum=2.830383 -sumtype=float,xtype=float,sum=3.428937 -sumtype=float,xtype=float,sum=3.460379 -sumtype=float,xtype=float,sum=3.963005 -sum=3.963005 - -mlr put $z = $x + $y ./reg_test/input/typeof.dkvp -x=1,y=2,z=3 -x=1,y=,z= -x=,y=2,z= -x=,y=,z= -a=1,y=2,z=2 -a=1,y= -a=,y=2,z=2 -a=,y= -x=1,b=2,z=1 -x=1,b=,z=1 -x=,b=2 -x=,b= - -mlr put $z = $x + $u ./reg_test/input/typeof.dkvp -x=1,y=2,z=1 -x=1,y=,z=1 -x=,y=2 -x=,y= -a=1,y=2 -a=1,y= -a=,y=2 -a=,y= -x=1,b=2,z=1 -x=1,b=,z=1 -x=,b=2 -x=,b= - -mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp -s=2 -x=1,y=2 -s= -x=1,y= -s= -x=,y=2 -s= -x=,y= -s= -a=1,y=2 -s= -a=1,y= -s= -a=,y=2 -s= -a=,y= -s= -x=1,b=2 -s= -x=1,b= -s= -x=,b=2 -s= -x=,b= - -mlr put @s = @s + $u; emitp @s ./reg_test/input/typeof.dkvp -x=1,y=2 -x=1,y= -x=,y=2 -x=,y= -a=1,y=2 -a=1,y= -a=,y=2 -a=,y= -x=1,b=2 -x=1,b= -x=,b=2 -x=,b= - -mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp -x=int,y=int,z=int -x=int,y=empty,z=empty -x=empty,y=int,z=empty -x=empty,y=empty,z=empty -a=1,y=int,z=int,x=absent -a=1,y=empty,x=absent,z=absent -a=,y=int,z=int,x=absent -a=,y=empty,x=absent,z=absent -x=int,b=2,z=int,y=absent -x=int,b=,z=int,y=absent -x=empty,b=2,y=absent,z=absent -x=empty,b=,y=absent,z=absent - -mlr put $z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp -x=int,y=int,z=int -x=int,y=empty,z=int -x=empty,y=int,z=absent -x=empty,y=empty,z=absent -a=1,y=int,x=absent,z=absent -a=1,y=empty,x=absent,z=absent -a=,y=int,x=absent,z=absent -a=,y=empty,x=absent,z=absent -x=int,b=2,z=int,y=absent -x=int,b=,z=int,y=absent -x=empty,b=2,y=absent,z=absent -x=empty,b=,y=absent,z=absent - -mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp -x=int,y=int,z=absent,s=int -x=int,y=empty,z=absent,s=empty -x=empty,y=int,z=absent,s=empty -x=empty,y=empty,z=absent,s=empty -a=1,y=int,x=absent,z=absent,s=empty -a=1,y=empty,x=absent,z=absent,s=empty -a=,y=int,x=absent,z=absent,s=empty -a=,y=empty,x=absent,z=absent,s=empty -x=int,b=2,y=absent,z=absent,s=empty -x=int,b=,y=absent,z=absent,s=empty -x=empty,b=2,y=absent,z=absent,s=empty -x=empty,b=,y=absent,z=absent,s=empty - -mlr put @s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp -x=int,y=int,z=absent,s=absent -x=int,y=empty,z=absent,s=absent -x=empty,y=int,z=absent,s=absent -x=empty,y=empty,z=absent,s=absent -a=1,y=int,x=absent,z=absent,s=absent -a=1,y=empty,x=absent,z=absent,s=absent -a=,y=int,x=absent,z=absent,s=absent -a=,y=empty,x=absent,z=absent,s=absent -x=int,b=2,y=absent,z=absent,s=absent -x=int,b=,y=absent,z=absent,s=absent -x=empty,b=2,y=absent,z=absent,s=absent -x=empty,b=,y=absent,z=absent,s=absent - -mlr cat -x=1 -x= -x=7 - -mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1 ostype=absent xtype=int nstype=int nsum=1 -x= osum=1 ostype=int xtype=empty nstype=empty nsum= -x=7 osum= ostype=empty xtype=int nstype=empty nsum= -sum= - -mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);is_present($x){@sum+=$x}; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1 ostype=absent xtype=int nstype=int nsum=1 -x= osum=1 ostype=int xtype=empty nstype=empty nsum= -x=7 osum= ostype=empty xtype=int nstype=empty nsum= -sum= - -mlr cat -x=1 -xxx= -x=7 - -mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1 ostype=absent xtype=int nstype=int nsum=1 -xxx= osum=1 ostype=int xtype=absent nstype=int nsum=1 -x=7 osum=1 ostype=int xtype=int nstype=int nsum=8 -sum=8 - -mlr --ofs tab put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);is_present($x){@sum+=$x}; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1 ostype=absent xtype=int nstype=int nsum=1 -xxx= osum=1 ostype=int xtype=absent nstype=int nsum=1 -x=7 osum=1 ostype=int xtype=int nstype=int nsum=8 -sum=8 - -mlr cat -x=1 -x= -y= -x=7 - -mlr --ofs tab put $xtype=typeof($x);$sum = $x + 10; $stype=typeof($sum) -x=1 xtype=int sum=11 stype=int -x= xtype=empty sum= stype=empty -y= xtype=absent sum=10 stype=int -x=7 xtype=int sum=17 stype=int - -mlr --ofs tab put $xtype=typeof($x);$sum = is_present($x) ? $x + 10 : 999; $stype=typeof($sum) -x=1 xtype=int sum=11 stype=int -x= xtype=empty sum= stype=empty -y= xtype=absent sum=999 stype=int -x=7 xtype=int sum=17 stype=int - - -================================================================ -MAP-VARIANT DUMPS - -mlr --from ./reg_test/input/abixy-het put -q dump {"a"."b":$a.$b} -{ - "ab": "panpan" -} -{ - "ab": "ekspan" -} -{ - "ab": "wye" -} -{ - "ab": "eks" -} -{ - "ab": "wyepan" -} -{ - "ab": "zeepan" -} -{ - "ab": "ekszee" -} -{ - "ab": "zeewye" -} -{ - "ab": -} -{ - "ab": "panwye" -} - -mlr --from ./reg_test/input/abixy-het put -q func f(a, b) { return {"a"."b":a.b} } dump f($a, $b) -{ - "ab": "panpan" -} -{ - "ab": "ekspan" -} -{ - "ab": "wye" -} -{ - "ab": "eks" -} -{ - "ab": "wyepan" -} -{ - "ab": "zeepan" -} -{ - "ab": "ekszee" -} -{ - "ab": "zeewye" -} -{ - "ab": -} -{ - "ab": "panwye" -} - - -================================================================ -PARAMETERIZED EMIT - -mlr put -q @sum[$a] = $x; end{ emitp @sum; } ./reg_test/input/abixy -sum:pan=0.502626,sum:eks=0.611784,sum:wye=0.573289,sum:zee=0.598554,sum:hat=0.031442 - -mlr put -q @sum[$a] = $x; end{ emitp @sum,"a"; } ./reg_test/input/abixy -a=pan,sum=0.502626 -a=eks,sum=0.611784 -a=wye,sum=0.573289 -a=zee,sum=0.598554 -a=hat,sum=0.031442 - -mlr put -q @sum[$a] = $x; end{ emitp @sum,"a","b"; } ./reg_test/input/abixy -a=pan,sum=0.502626 -a=eks,sum=0.611784 -a=wye,sum=0.573289 -a=zee,sum=0.598554 -a=hat,sum=0.031442 - -mlr put -q @sum[$a][$b] = $x; end{ emitp @sum; } ./reg_test/input/abixy -sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442 - -mlr put -q @sum[$a][$b] = $x; end{ emitp @sum,"a"; } ./reg_test/input/abixy -a=pan,sum:pan=0.346790,sum:wye=0.502626 -a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784 -a=wye,sum:wye=0.204603,sum:pan=0.573289 -a=zee,sum:pan=0.527126,sum:wye=0.598554 -a=hat,sum:wye=0.031442 - -mlr put -q @sum[$a][$b] = $x; end{ emitp @sum,"a","b"; } ./reg_test/input/abixy -a=pan,b=pan,sum=0.346790 -a=pan,b=wye,sum=0.502626 -a=eks,b=pan,sum=0.758680 -a=eks,b=wye,sum=0.381399 -a=eks,b=zee,sum=0.611784 -a=wye,b=wye,sum=0.204603 -a=wye,b=pan,sum=0.573289 -a=zee,b=pan,sum=0.527126 -a=zee,b=wye,sum=0.598554 -a=hat,b=wye,sum=0.031442 - -mlr put -q @v = $a; end {emitf @v } ./reg_test/input/abixy -v=pan - -mlr put -q @v = $i; end {emitf @v } ./reg_test/input/abixy -v=10 - -mlr put -q @v = $x; end {emitf @v } ./reg_test/input/abixy -v=0.502626 - -mlr put -q @v = $nonesuch; end {emitf @v } ./reg_test/input/abixy -v= - -mlr put -q @v = $a; end {emitp @v } ./reg_test/input/abixy -v=pan - -mlr put -q @v = $i; end {emitp @v } ./reg_test/input/abixy -v=10 - -mlr put -q @v = $x; end {emitp @v } ./reg_test/input/abixy -v=0.502626 - -mlr put -q @v = $nonesuch; end {emitp @v } ./reg_test/input/abixy - -mlr put -q @sum += $i; end {emitf @sum } ./reg_test/input/abixy -sum=55 - -mlr put -q @sum += $x; end {emitf @sum } ./reg_test/input/abixy -sum=4.536294 - -mlr put -q @sum += $nonesuch; end {emitf @sum } ./reg_test/input/abixy -sum= - -mlr put -q @sum += $i; end {emitp @sum } ./reg_test/input/abixy -sum=55 - -mlr put -q @sum += $x; end {emitp @sum } ./reg_test/input/abixy -sum=4.536294 - -mlr put -q @sum += $nonesuch; end {emitp @sum } ./reg_test/input/abixy - -mlr put -q @sum += $i; end {emitp @sum, "extra" } ./reg_test/input/abixy -sum=55 - -mlr put -q @sum += $x; end {emitp @sum, "extra" } ./reg_test/input/abixy -sum=4.536294 - -mlr put -q @sum += $nonesuch; end {emitp @sum, "extra" } ./reg_test/input/abixy - -mlr put -q @sum[$a] += $i; end {emitp @sum } ./reg_test/input/abixy -sum:pan=11,sum:eks=13,sum:wye=8,sum:zee=14,sum:hat=9 - -mlr put -q @sum[$a] += $x; end {emitp @sum } ./reg_test/input/abixy -sum:pan=0.849416,sum:eks=1.751863,sum:wye=0.777892,sum:zee=1.125680,sum:hat=0.031442 - -mlr put -q @sum[$a] += $nonesuch; end {emitp @sum } ./reg_test/input/abixy - -mlr put -q @sum[$a] += $i; end {emitp @sum, "a" } ./reg_test/input/abixy -a=pan,sum=11 -a=eks,sum=13 -a=wye,sum=8 -a=zee,sum=14 -a=hat,sum=9 - -mlr put -q @sum[$a] += $x; end {emitp @sum, "a" } ./reg_test/input/abixy -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum=0.777892 -a=zee,sum=1.125680 -a=hat,sum=0.031442 - -mlr put -q @sum[$a] += $nonesuch; end {emitp @sum, "a" } ./reg_test/input/abixy - -mlr put -q @sum[$a] += $i; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy -a=pan,sum=11 -a=eks,sum=13 -a=wye,sum=8 -a=zee,sum=14 -a=hat,sum=9 - -mlr put -q @sum[$a] += $x; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum=0.777892 -a=zee,sum=1.125680 -a=hat,sum=0.031442 - -mlr put -q @sum[$a] += $nonesuch; end {emitp @sum, "a", "extra" } ./reg_test/input/abixy - -mlr put -q @sum[$a][$b] += $i; end {emitp @sum } ./reg_test/input/abixy -sum:pan:pan=1,sum:pan:wye=10,sum:eks:pan=2,sum:eks:wye=4,sum:eks:zee=7,sum:wye:wye=3,sum:wye:pan=5,sum:zee:pan=6,sum:zee:wye=8,sum:hat:wye=9 - -mlr put -q @sum[$a][$b] += $x; end {emitp @sum } ./reg_test/input/abixy -sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442 - -mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum } ./reg_test/input/abixy - -mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a" } ./reg_test/input/abixy -a=pan,sum:pan=1,sum:wye=10 -a=eks,sum:pan=2,sum:wye=4,sum:zee=7 -a=wye,sum:wye=3,sum:pan=5 -a=zee,sum:pan=6,sum:wye=8 -a=hat,sum:wye=9 - -mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a" } ./reg_test/input/abixy -a=pan,sum:pan=0.346790,sum:wye=0.502626 -a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784 -a=wye,sum:wye=0.204603,sum:pan=0.573289 -a=zee,sum:pan=0.527126,sum:wye=0.598554 -a=hat,sum:wye=0.031442 - -mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a" } ./reg_test/input/abixy - -mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a", "b" } ./reg_test/input/abixy -a=pan,b=pan,sum=1 -a=pan,b=wye,sum=10 -a=eks,b=pan,sum=2 -a=eks,b=wye,sum=4 -a=eks,b=zee,sum=7 -a=wye,b=wye,sum=3 -a=wye,b=pan,sum=5 -a=zee,b=pan,sum=6 -a=zee,b=wye,sum=8 -a=hat,b=wye,sum=9 - -mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a", "b" } ./reg_test/input/abixy -a=pan,b=pan,sum=0.346790 -a=pan,b=wye,sum=0.502626 -a=eks,b=pan,sum=0.758680 -a=eks,b=wye,sum=0.381399 -a=eks,b=zee,sum=0.611784 -a=wye,b=wye,sum=0.204603 -a=wye,b=pan,sum=0.573289 -a=zee,b=pan,sum=0.527126 -a=zee,b=wye,sum=0.598554 -a=hat,b=wye,sum=0.031442 - -mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a", "b" } ./reg_test/input/abixy - -mlr put -q @sum[$a][$b] += $i; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy -a=pan,b=pan,sum=1 -a=pan,b=wye,sum=10 -a=eks,b=pan,sum=2 -a=eks,b=wye,sum=4 -a=eks,b=zee,sum=7 -a=wye,b=wye,sum=3 -a=wye,b=pan,sum=5 -a=zee,b=pan,sum=6 -a=zee,b=wye,sum=8 -a=hat,b=wye,sum=9 - -mlr put -q @sum[$a][$b] += $x; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy -a=pan,b=pan,sum=0.346790 -a=pan,b=wye,sum=0.502626 -a=eks,b=pan,sum=0.758680 -a=eks,b=wye,sum=0.381399 -a=eks,b=zee,sum=0.611784 -a=wye,b=wye,sum=0.204603 -a=wye,b=pan,sum=0.573289 -a=zee,b=pan,sum=0.527126 -a=zee,b=wye,sum=0.598554 -a=hat,b=wye,sum=0.031442 - -mlr put -q @sum[$a][$b] += $nonesuch; end {emitp @sum, "a", "b", "extra" } ./reg_test/input/abixy - -mlr --oxtab put -q @sum[$a][$b] += $i; NR == 3 { @x = $x }; NR == 7 { @v = $* }; end {emitp all} ./reg_test/input/abixy-het -sum:pan:pan 1 -sum:pan:wye 10 -sum:eks:pan 2 -sum:wye:pan 5 -sum:zee:pan 6 -sum:zee:wye 8 - -x 0.204603 - -v:a eks -v:b zee -v:iii 7 -v:x 0.6117840605678454 -v:y 0.1878849191181694 - -mlr --opprint put -q @v[NR]=$*; end{emitp @v} ./reg_test/input/abixy -v:1:a v:1:b v:1:i v:1:x v:1:y v:2:a v:2:b v:2:i v:2:x v:2:y v:3:a v:3:b v:3:i v:3:x v:3:y v:4:a v:4:b v:4:i v:4:x v:4:y v:5:a v:5:b v:5:i v:5:x v:5:y v:6:a v:6:b v:6:i v:6:x v:6:y v:7:a v:7:b v:7:i v:7:x v:7:y v:8:a v:8:b v:8:i v:8:x v:8:y v:9:a v:9:b v:9:i v:9:x v:9:y v:10:a v:10:b v:10:i v:10:x v:10:y -pan pan 1 0.3467901443380824 0.7268028627434533 eks pan 2 0.7586799647899636 0.5221511083334797 wye wye 3 0.20460330576630303 0.33831852551664776 eks wye 4 0.38139939387114097 0.13418874328430463 wye pan 5 0.5732889198020006 0.8636244699032729 zee pan 6 0.5271261600918548 0.49322128674835697 eks zee 7 0.6117840605678454 0.1878849191181694 zee wye 8 0.5985540091064224 0.976181385699006 hat wye 9 0.03144187646093577 0.7495507603507059 pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put -q @v[NR]=$*; end{emitp @v,"X"} ./reg_test/input/abixy -X v:a v:b v:i v:x v:y -1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 eks pan 2 0.7586799647899636 0.5221511083334797 -3 wye wye 3 0.20460330576630303 0.33831852551664776 -4 eks wye 4 0.38139939387114097 0.13418874328430463 -5 wye pan 5 0.5732889198020006 0.8636244699032729 -6 zee pan 6 0.5271261600918548 0.49322128674835697 -7 eks zee 7 0.6117840605678454 0.1878849191181694 -8 zee wye 8 0.5985540091064224 0.976181385699006 -9 hat wye 9 0.03144187646093577 0.7495507603507059 -10 pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint put -q @v[NR]=$*; end{emitp @v[1]} ./reg_test/input/abixy -v:a v:b v:i v:x v:y -pan pan 1 0.3467901443380824 0.7268028627434533 - -mlr --opprint put -q @v[NR]=$*; end{emitp @v[1],"X"} ./reg_test/input/abixy -X v -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -mlr --opprint put -q @v[NR]=$*; end{emitp @v[1],"X","Y"} ./reg_test/input/abixy -X v -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1]} ./reg_test/input/abixy -v:1:a v:1:b v:1:i v:1:x v:1:y -pan pan 1 0.3467901443380824 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1],"X"} ./reg_test/input/abixy -X v:a v:b v:i v:x v:y -1 pan pan 1 0.3467901443380824 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1],"X","Y"} ./reg_test/input/abixy -X Y v -1 a pan -1 b pan -1 i 1 -1 x 0.3467901443380824 -1 y 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1]} ./reg_test/input/abixy -v:a v:b v:i v:x v:y -pan pan 1 0.3467901443380824 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1],"X"} ./reg_test/input/abixy -X v -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -mlr --opprint put -q @v[NR][NR]=$*; end{emitp @v[1][1],"X","Y"} ./reg_test/input/abixy -X v -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all} ./reg_test/input/abixy-het -a=pan -b:1=wye -c:1:2=0.502626 - -mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one"} ./reg_test/input/abixy-het -a=pan -one=1,b=wye -one=1,c:2=0.502626 - -mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one","two"} ./reg_test/input/abixy-het -a=pan -one=1,b=wye -one=1,two=2,c=0.502626 - -mlr put -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all,"one","two","three"} ./reg_test/input/abixy-het -a=pan -one=1,b=wye -one=1,two=2,c=0.502626 - -mlr --oxtab put --oflatsep @ -q @a=$a; @b[1]=$b; @c[1][2]=$x; end{emitp all} ./reg_test/input/abixy-het -a pan - -b@1 wye - -c@1@2 0.502626 - - -================================================================ -PREFIXED/UNPREFIXED EMIT - -mlr --oxtab put -q @sum += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide -{ - "sum": 1009.118181 -} -sum 1009.118181 - -mlr --oxtab put -q @sum += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide -{ - "sum": 1009.118181 -} -sum 1009.118181 - -mlr --oxtab put -q @sum[$a] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": 207.843964, - "pan": 191.530740, - "wye": 188.110135, - "dog": 215.541519, - "hat": 206.091824 - } -} -sum:cat 207.843964 -sum:pan 191.530740 -sum:wye 188.110135 -sum:dog 215.541519 -sum:hat 206.091824 - -mlr --oxtab put -q @sum[$a] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": 207.843964, - "pan": 191.530740, - "wye": 188.110135, - "dog": 215.541519, - "hat": 206.091824 - } -} -cat 207.843964 -pan 191.530740 -wye 188.110135 -dog 215.541519 -hat 206.091824 - -mlr --oxtab put -q @sum[$a] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": 207.843964, - "pan": 191.530740, - "wye": 188.110135, - "dog": 215.541519, - "hat": 206.091824 - } -} -a cat -sum 207.843964 - -a pan -sum 191.530740 - -a wye -sum 188.110135 - -a dog -sum 215.541519 - -a hat -sum 206.091824 - -mlr --oxtab put -q @sum[$a] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": 207.843964, - "pan": 191.530740, - "wye": 188.110135, - "dog": 215.541519, - "hat": 206.091824 - } -} -a cat -sum 207.843964 - -a pan -sum 191.530740 - -a wye -sum 188.110135 - -a dog -sum 215.541519 - -a hat -sum 206.091824 - -mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -sum:cat:pan 42.327158 -sum:cat:hat 43.184410 -sum:cat:dog 39.241473 -sum:cat:wye 45.196775 -sum:cat:cat 37.894148 -sum:pan:wye 40.135300 -sum:pan:pan 36.226334 -sum:pan:hat 35.115869 -sum:pan:dog 37.817560 -sum:pan:cat 42.235677 -sum:wye:cat 40.805723 -sum:wye:hat 41.166697 -sum:wye:dog 40.619547 -sum:wye:wye 32.490973 -sum:wye:pan 33.027196 -sum:dog:hat 43.515162 -sum:dog:pan 45.614011 -sum:dog:dog 43.545956 -sum:dog:wye 37.223795 -sum:dog:cat 45.642595 -sum:hat:hat 48.058897 -sum:hat:wye 34.054270 -sum:hat:pan 42.538758 -sum:hat:cat 44.325655 -sum:hat:dog 37.114244 - -mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -pan 42.327158 -hat 43.184410 -dog 39.241473 -wye 45.196775 -cat 37.894148 - -wye 40.135300 -pan 36.226334 -hat 35.115869 -dog 37.817560 -cat 42.235677 - -cat 40.805723 -hat 41.166697 -dog 40.619547 -wye 32.490973 -pan 33.027196 - -hat 43.515162 -pan 45.614011 -dog 43.545956 -wye 37.223795 -cat 45.642595 - -hat 48.058897 -wye 34.054270 -pan 42.538758 -cat 44.325655 -dog 37.114244 - -mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -a cat -sum:pan 42.327158 -sum:hat 43.184410 -sum:dog 39.241473 -sum:wye 45.196775 -sum:cat 37.894148 - -a pan -sum:wye 40.135300 -sum:pan 36.226334 -sum:hat 35.115869 -sum:dog 37.817560 -sum:cat 42.235677 - -a wye -sum:cat 40.805723 -sum:hat 41.166697 -sum:dog 40.619547 -sum:wye 32.490973 -sum:pan 33.027196 - -a dog -sum:hat 43.515162 -sum:pan 45.614011 -sum:dog 43.545956 -sum:wye 37.223795 -sum:cat 45.642595 - -a hat -sum:hat 48.058897 -sum:wye 34.054270 -sum:pan 42.538758 -sum:cat 44.325655 -sum:dog 37.114244 - -mlr --oxtab put -q @sum[$a][$b] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -a cat -pan 42.327158 -hat 43.184410 -dog 39.241473 -wye 45.196775 -cat 37.894148 - -a pan -wye 40.135300 -pan 36.226334 -hat 35.115869 -dog 37.817560 -cat 42.235677 - -a wye -cat 40.805723 -hat 41.166697 -dog 40.619547 -wye 32.490973 -pan 33.027196 - -a dog -hat 43.515162 -pan 45.614011 -dog 43.545956 -wye 37.223795 -cat 45.642595 - -a hat -hat 48.058897 -wye 34.054270 -pan 42.538758 -cat 44.325655 -dog 37.114244 - -mlr --opprint put -q @sum[$a][$b] += $x; end{dump;emitp @sum, "a", "b"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -a b sum -cat pan 42.327158 -cat hat 43.184410 -cat dog 39.241473 -cat wye 45.196775 -cat cat 37.894148 -pan wye 40.135300 -pan pan 36.226334 -pan hat 35.115869 -pan dog 37.817560 -pan cat 42.235677 -wye cat 40.805723 -wye hat 41.166697 -wye dog 40.619547 -wye wye 32.490973 -wye pan 33.027196 -dog hat 43.515162 -dog pan 45.614011 -dog dog 43.545956 -dog wye 37.223795 -dog cat 45.642595 -hat hat 48.058897 -hat wye 34.054270 -hat pan 42.538758 -hat cat 44.325655 -hat dog 37.114244 - -mlr --opprint put -q @sum[$a][$b] += $x; end{dump;emit @sum, "a", "b"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": 42.327158, - "hat": 43.184410, - "dog": 39.241473, - "wye": 45.196775, - "cat": 37.894148 - }, - "pan": { - "wye": 40.135300, - "pan": 36.226334, - "hat": 35.115869, - "dog": 37.817560, - "cat": 42.235677 - }, - "wye": { - "cat": 40.805723, - "hat": 41.166697, - "dog": 40.619547, - "wye": 32.490973, - "pan": 33.027196 - }, - "dog": { - "hat": 43.515162, - "pan": 45.614011, - "dog": 43.545956, - "wye": 37.223795, - "cat": 45.642595 - }, - "hat": { - "hat": 48.058897, - "wye": 34.054270, - "pan": 42.538758, - "cat": 44.325655, - "dog": 37.114244 - } - } -} -a b sum -cat pan 42.327158 -cat hat 43.184410 -cat dog 39.241473 -cat wye 45.196775 -cat cat 37.894148 -pan wye 40.135300 -pan pan 36.226334 -pan hat 35.115869 -pan dog 37.817560 -pan cat 42.235677 -wye cat 40.805723 -wye hat 41.166697 -wye dog 40.619547 -wye wye 32.490973 -wye pan 33.027196 -dog hat 43.515162 -dog pan 45.614011 -dog dog 43.545956 -dog wye 37.223795 -dog cat 45.642595 -hat hat 48.058897 -hat wye 34.054270 -hat pan 42.538758 -hat cat 44.325655 -hat dog 37.114244 - -mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -sum:cat:pan:catpan 42.327158 -sum:cat:hat:cathat 43.184410 -sum:cat:dog:catdog 39.241473 -sum:cat:wye:catwye 45.196775 -sum:cat:cat:catcat 37.894148 -sum:pan:wye:panwye 40.135300 -sum:pan:pan:panpan 36.226334 -sum:pan:hat:panhat 35.115869 -sum:pan:dog:pandog 37.817560 -sum:pan:cat:pancat 42.235677 -sum:wye:cat:wyecat 40.805723 -sum:wye:hat:wyehat 41.166697 -sum:wye:dog:wyedog 40.619547 -sum:wye:wye:wyewye 32.490973 -sum:wye:pan:wyepan 33.027196 -sum:dog:hat:doghat 43.515162 -sum:dog:pan:dogpan 45.614011 -sum:dog:dog:dogdog 43.545956 -sum:dog:wye:dogwye 37.223795 -sum:dog:cat:dogcat 45.642595 -sum:hat:hat:hathat 48.058897 -sum:hat:wye:hatwye 34.054270 -sum:hat:pan:hatpan 42.538758 -sum:hat:cat:hatcat 44.325655 -sum:hat:dog:hatdog 37.114244 - -mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum } ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -catpan 42.327158 - -cathat 43.184410 - -catdog 39.241473 - -catwye 45.196775 - -catcat 37.894148 - -panwye 40.135300 - -panpan 36.226334 - -panhat 35.115869 - -pandog 37.817560 - -pancat 42.235677 - -wyecat 40.805723 - -wyehat 41.166697 - -wyedog 40.619547 - -wyewye 32.490973 - -wyepan 33.027196 - -doghat 43.515162 - -dogpan 45.614011 - -dogdog 43.545956 - -dogwye 37.223795 - -dogcat 45.642595 - -hathat 48.058897 - -hatwye 34.054270 - -hatpan 42.538758 - -hatcat 44.325655 - -hatdog 37.114244 - -mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a cat -sum:pan:catpan 42.327158 -sum:hat:cathat 43.184410 -sum:dog:catdog 39.241473 -sum:wye:catwye 45.196775 -sum:cat:catcat 37.894148 - -a pan -sum:wye:panwye 40.135300 -sum:pan:panpan 36.226334 -sum:hat:panhat 35.115869 -sum:dog:pandog 37.817560 -sum:cat:pancat 42.235677 - -a wye -sum:cat:wyecat 40.805723 -sum:hat:wyehat 41.166697 -sum:dog:wyedog 40.619547 -sum:wye:wyewye 32.490973 -sum:pan:wyepan 33.027196 - -a dog -sum:hat:doghat 43.515162 -sum:pan:dogpan 45.614011 -sum:dog:dogdog 43.545956 -sum:wye:dogwye 37.223795 -sum:cat:dogcat 45.642595 - -a hat -sum:hat:hathat 48.058897 -sum:wye:hatwye 34.054270 -sum:pan:hatpan 42.538758 -sum:cat:hatcat 44.325655 -sum:dog:hatdog 37.114244 - -mlr --oxtab put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a cat -catpan 42.327158 - -a cat -cathat 43.184410 - -a cat -catdog 39.241473 - -a cat -catwye 45.196775 - -a cat -catcat 37.894148 - -a pan -panwye 40.135300 - -a pan -panpan 36.226334 - -a pan -panhat 35.115869 - -a pan -pandog 37.817560 - -a pan -pancat 42.235677 - -a wye -wyecat 40.805723 - -a wye -wyehat 41.166697 - -a wye -wyedog 40.619547 - -a wye -wyewye 32.490973 - -a wye -wyepan 33.027196 - -a dog -doghat 43.515162 - -a dog -dogpan 45.614011 - -a dog -dogdog 43.545956 - -a dog -dogwye 37.223795 - -a dog -dogcat 45.642595 - -a hat -hathat 48.058897 - -a hat -hatwye 34.054270 - -a hat -hatpan 42.538758 - -a hat -hatcat 44.325655 - -a hat -hatdog 37.114244 - -mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a", "b"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a b sum:catpan -cat pan 42.327158 - -a b sum:cathat -cat hat 43.184410 - -a b sum:catdog -cat dog 39.241473 - -a b sum:catwye -cat wye 45.196775 - -a b sum:catcat -cat cat 37.894148 - -a b sum:panwye -pan wye 40.135300 - -a b sum:panpan -pan pan 36.226334 - -a b sum:panhat -pan hat 35.115869 - -a b sum:pandog -pan dog 37.817560 - -a b sum:pancat -pan cat 42.235677 - -a b sum:wyecat -wye cat 40.805723 - -a b sum:wyehat -wye hat 41.166697 - -a b sum:wyedog -wye dog 40.619547 - -a b sum:wyewye -wye wye 32.490973 - -a b sum:wyepan -wye pan 33.027196 - -a b sum:doghat -dog hat 43.515162 - -a b sum:dogpan -dog pan 45.614011 - -a b sum:dogdog -dog dog 43.545956 - -a b sum:dogwye -dog wye 37.223795 - -a b sum:dogcat -dog cat 45.642595 - -a b sum:hathat -hat hat 48.058897 - -a b sum:hatwye -hat wye 34.054270 - -a b sum:hatpan -hat pan 42.538758 - -a b sum:hatcat -hat cat 44.325655 - -a b sum:hatdog -hat dog 37.114244 - -mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a", "b"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a b catpan -cat pan 42.327158 - -a b cathat -cat hat 43.184410 - -a b catdog -cat dog 39.241473 - -a b catwye -cat wye 45.196775 - -a b catcat -cat cat 37.894148 - -a b panwye -pan wye 40.135300 - -a b panpan -pan pan 36.226334 - -a b panhat -pan hat 35.115869 - -a b pandog -pan dog 37.817560 - -a b pancat -pan cat 42.235677 - -a b wyecat -wye cat 40.805723 - -a b wyehat -wye hat 41.166697 - -a b wyedog -wye dog 40.619547 - -a b wyewye -wye wye 32.490973 - -a b wyepan -wye pan 33.027196 - -a b doghat -dog hat 43.515162 - -a b dogpan -dog pan 45.614011 - -a b dogdog -dog dog 43.545956 - -a b dogwye -dog wye 37.223795 - -a b dogcat -dog cat 45.642595 - -a b hathat -hat hat 48.058897 - -a b hatwye -hat wye 34.054270 - -a b hatpan -hat pan 42.538758 - -a b hatcat -hat cat 44.325655 - -a b hatdog -hat dog 37.114244 - -mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emitp @sum, "a", "b", "ab"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a b ab sum -cat pan catpan 42.327158 -cat hat cathat 43.184410 -cat dog catdog 39.241473 -cat wye catwye 45.196775 -cat cat catcat 37.894148 -pan wye panwye 40.135300 -pan pan panpan 36.226334 -pan hat panhat 35.115869 -pan dog pandog 37.817560 -pan cat pancat 42.235677 -wye cat wyecat 40.805723 -wye hat wyehat 41.166697 -wye dog wyedog 40.619547 -wye wye wyewye 32.490973 -wye pan wyepan 33.027196 -dog hat doghat 43.515162 -dog pan dogpan 45.614011 -dog dog dogdog 43.545956 -dog wye dogwye 37.223795 -dog cat dogcat 45.642595 -hat hat hathat 48.058897 -hat wye hatwye 34.054270 -hat pan hatpan 42.538758 -hat cat hatcat 44.325655 -hat dog hatdog 37.114244 - -mlr --opprint put -q @sum[$a][$b][$a.$b] += $x; end{dump;emit @sum, "a", "b", "ab"} ./reg_test/input/abixy-wide -{ - "sum": { - "cat": { - "pan": { - "catpan": 42.327158 - }, - "hat": { - "cathat": 43.184410 - }, - "dog": { - "catdog": 39.241473 - }, - "wye": { - "catwye": 45.196775 - }, - "cat": { - "catcat": 37.894148 - } - }, - "pan": { - "wye": { - "panwye": 40.135300 - }, - "pan": { - "panpan": 36.226334 - }, - "hat": { - "panhat": 35.115869 - }, - "dog": { - "pandog": 37.817560 - }, - "cat": { - "pancat": 42.235677 - } - }, - "wye": { - "cat": { - "wyecat": 40.805723 - }, - "hat": { - "wyehat": 41.166697 - }, - "dog": { - "wyedog": 40.619547 - }, - "wye": { - "wyewye": 32.490973 - }, - "pan": { - "wyepan": 33.027196 - } - }, - "dog": { - "hat": { - "doghat": 43.515162 - }, - "pan": { - "dogpan": 45.614011 - }, - "dog": { - "dogdog": 43.545956 - }, - "wye": { - "dogwye": 37.223795 - }, - "cat": { - "dogcat": 45.642595 - } - }, - "hat": { - "hat": { - "hathat": 48.058897 - }, - "wye": { - "hatwye": 34.054270 - }, - "pan": { - "hatpan": 42.538758 - }, - "cat": { - "hatcat": 44.325655 - }, - "dog": { - "hatdog": 37.114244 - } - } - } -} -a b ab sum -cat pan catpan 42.327158 -cat hat cathat 43.184410 -cat dog catdog 39.241473 -cat wye catwye 45.196775 -cat cat catcat 37.894148 -pan wye panwye 40.135300 -pan pan panpan 36.226334 -pan hat panhat 35.115869 -pan dog pandog 37.817560 -pan cat pancat 42.235677 -wye cat wyecat 40.805723 -wye hat wyehat 41.166697 -wye dog wyedog 40.619547 -wye wye wyewye 32.490973 -wye pan wyepan 33.027196 -dog hat doghat 43.515162 -dog pan dogpan 45.614011 -dog dog dogdog 43.545956 -dog wye dogwye 37.223795 -dog cat dogcat 45.642595 -hat hat hathat 48.058897 -hat wye hatwye 34.054270 -hat pan hatpan 42.538758 -hat cat hatcat 44.325655 -hat dog hatdog 37.114244 - -mlr --oxtab head -n 2 then put -q @v = $*; end{dump;emitp @v} ./reg_test/input/abixy -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -v:a eks -v:b pan -v:i 2 -v:x 0.7586799647899636 -v:y 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v = $*; end{dump;emit @v} ./reg_test/input/abixy -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} -v:1:a pan -v:1:b pan -v:1:i 1 -v:1:x 0.3467901443380824 -v:1:y 0.7268028627434533 -v:2:a eks -v:2:b pan -v:2:i 2 -v:2:x 0.7586799647899636 -v:2:y 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR] = $*; end{dump;emit @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} -I v:a v:b v:i v:x v:y -1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} -I a b i x y -1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -v:1:1:a pan -v:1:1:b pan -v:1:1:i 1 -v:1:1:x 0.3467901443380824 -v:1:1:y 0.7268028627434533 -v:2:2:a eks -v:2:2:b pan -v:2:2:i 2 -v:2:2:x 0.7586799647899636 -v:2:2:y 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -I v:1:a v:1:b v:1:i v:1:x v:1:y -1 pan pan 1 0.3467901443380824 0.7268028627434533 - -I v:2:a v:2:b v:2:i v:2:x v:2:y -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -I a b i x y -1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emitp @v, "I", "J"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -I J v:a v:b v:i v:x v:y -1 1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR] = $*; end{dump;emit @v, "I", "J"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - }, - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } -} -I J a b i x y -1 1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -v:1:1:1:a pan -v:1:1:1:b pan -v:1:1:1:i 1 -v:1:1:1:x 0.3467901443380824 -v:1:1:1:y 0.7268028627434533 -v:2:2:2:a eks -v:2:2:2:b pan -v:2:2:2:i 2 -v:2:2:2:x 0.7586799647899636 -v:2:2:2:y 0.5221511083334797 - -mlr --oxtab head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v } ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I v:1:1:a v:1:1:b v:1:1:i v:1:1:x v:1:1:y -1 pan pan 1 0.3467901443380824 0.7268028627434533 - -I v:2:2:a v:2:2:b v:2:2:i v:2:2:x v:2:2:y -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I a b i x y -1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I", "J"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I J v:1:a v:1:b v:1:i v:1:x v:1:y -1 1 pan pan 1 0.3467901443380824 0.7268028627434533 - -I J v:2:a v:2:b v:2:i v:2:x v:2:y -2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I", "J"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I J a b i x y -1 1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emitp @v, "I", "J", "K"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I J K v:a v:b v:i v:x v:y -1 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - -mlr --opprint head -n 2 then put -q @v[NR][NR][NR] = $*; end{dump;emit @v, "I", "J", "K"} ./reg_test/input/abixy -{ - "v": { - "1": { - "1": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } - } - }, - "2": { - "2": { - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } - } - } -} -I J K a b i x y -1 1 1 pan pan 1 0.3467901443380824 0.7268028627434533 -2 2 2 eks pan 2 0.7586799647899636 0.5221511083334797 - - -================================================================ -LASHED EMITP SINGLES - -mlr -n put end { - @a = 111; - emitp @a -} -a=111 - -mlr -n put end { - @a = 111; - emitp (@a) -} -a=111 - -mlr -n put end { - @a[111] = 222; - emitp @a, "s" -} -s=111,a=222 - -mlr -n put end { - @a[111] = 222; - emitp (@a), "s" -} -s=111,a=222 - -mlr -n put end { - @a[111] = 222; - @a[333] = 444; - emitp @a, "s" -} -s=111,a=222 -s=333,a=444 - -mlr -n put end { - @a[111] = 222; - @a[333] = 444; - emitp (@a), "s" -} -s=111,a=222 -s=333,a=444 - -mlr -n put end { - @a[111][222] = 333; - emitp @a, "s" -} -s=111,a:222=333 - -mlr -n put end { - @a[111][222] = 333; - emitp (@a), "s" -} -s=111,a:222=333 - -mlr -n put end { - @a[111][222] = 333; - @a[444][555] = 666; - emitp @a, "s" -} -s=111,a:222=333 -s=444,a:555=666 - -mlr -n put end { - @a[111][222] = 333; - @a[444][555] = 666; - emitp (@a), "s" -} -s=111,a:222=333 -s=444,a:555=666 - -mlr -n put end { - @a[111][222] = 333; - emitp @a, "s", "t" -} -s=111,t=222,a=333 - -mlr -n put end { - @a[111][222] = 333; - emitp (@a), "s", "t" -} -s=111,t=222,a=333 - -mlr -n put end { - @a[111][222] = 333; - emitp @a[111], "t" -} -t=222,a=333 - -mlr -n put end { - @a[111][222] = 333; - emitp (@a[111]), "t" -} -t=222,a=333 - - -================================================================ -LASHED EMIT SINGLES - -mlr -n put end { - @a = 111; - emit @a -} -a=111 - -mlr -n put end { - @a = 111; - emit (@a) -} -a=111 - -mlr -n put end { - @a[111] = 222; - emit @a, "s" -} -s=111,a=222 - -mlr -n put end { - @a[111] = 222; - emit (@a), "s" -} -s=111,a=222 - -mlr -n put end { - @a[111] = 222; - @a[333] = 444; - emit @a, "s" -} -s=111,a=222 -s=333,a=444 - -mlr -n put end { - @a[111] = 222; - @a[333] = 444; - emit (@a), "s" -} -s=111,a=222 -s=333,a=444 - -mlr -n put end { - @a[111][222] = 333; - emit @a, "s" -} -s=111,222=333 - -mlr -n put end { - @a[111][222] = 333; - emit (@a), "s" -} -s=111,222=333 - - -================================================================ -LASHED EMITP PAIRS - -mlr -n put end { - @a = 111; - @b = 222; - emitp (@a, @b) -} -a=111,b=222 - -mlr -n put end { - @a[1] = 111; - @b[1] = 222; - emitp (@a[1], @b[1]) -} -a=111,b=222 - -mlr -n put end { - @a[1][2][3] = 4; - @b[1][2][3] = 8; - emitp (@a, @b), "s", "t", "u" -} -s=1,t=2,u=3,a=4,b=8 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emitp (@a[1], @b[5]), "t", "u" -} -t=2,u=3,a=4,b=8 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][6][3] = 8; - emitp (@a[1][2], @b[5][6]), "u" -} -u=3,a=4,b=8 - - -================================================================ -LASHED EMIT PAIRS - -mlr -n put end { - @a = 111; - @b = 222; - emit (@a, @b) -} -a=111,b=222 - -mlr -n put end { - @a[1] = 111; - @b[1] = 222; - emit (@a[1], @b[1]) -} -a=111,b=222 - -mlr -n put end { - @a[1][2][3] = 4; - @b[1][2][3] = 8; - emit (@a, @b), "s", "t", "u" -} -s=1,t=2,u=3,a=4,b=8 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emit (@a[1], @b[5]), "t", "u" -} -t=2,u=3,a=4,b=8 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][6][3] = 8; - emit (@a[1][2], @b[5][6]), "u" -} -u=3,a=4,b=8 - - -================================================================ -LASHED EMIT WITH VARYING DEPTH - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emit (@a[1], @b[2]), "t" -} -t=1,a=1,b=7 -t=2,a=2,b=8 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emit (@a, @b), "s", "t" -} -s=1,t=1,a=1,b=5 -s=1,t=2,a=2,b=6 -s=2,t=1,a=3,b=7 -s=2,t=2,a=4,b=8 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @a[3] = 10; - @a[4] = 11; - @a[5][6][7] = 12; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emit (@a, @b), "s", "t" -} -s=1,t=1,a=1,b=5 -s=1,t=2,a=2,b=6 -s=2,t=1,a=3,b=7 -s=2,t=2,a=4,b=8 -s=3,a=10 -s=4,a=11 -s=5,t=6,7=12 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @a[3] = 10; - @a[4] = 11; - @a[5][6][7] = 12; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emit (@b, @a), "s", "t" -} -s=1,t=1,b=5,a=1 -s=1,t=2,b=6,a=2 -s=2,t=1,b=7,a=3 -s=2,t=2,b=8,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emit (@a[1], @b[3]), "t", "u" -} -t=2,u=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emit (@a[1][2], @b[5][9]), "t", "u" -} -t=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emit (@a[1][2], @b[9][2]), "t", "u" -} -t=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emit (@a[9], @b[5]), "t", "u" -} - - -================================================================ -LASHED EMITP WITH VARYING DEPTH - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emitp (@a[1], @b[2]), "t" -} -t=1,a=1,b=7 -t=2,a=2,b=8 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emitp (@a, @b), "s", "t" -} -s=1,t=1,a=1,b=5 -s=1,t=2,a=2,b=6 -s=2,t=1,a=3,b=7 -s=2,t=2,a=4,b=8 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @a[3] = 10; - @a[4] = 11; - @a[5][6][7] = 12; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emitp (@a, @b), "s", "t" -} -s=1,t=1,a=1,b=5 -s=1,t=2,a=2,b=6 -s=2,t=1,a=3,b=7 -s=2,t=2,a=4,b=8 -s=3,a=10 -s=4,a=11 -s=5,t=6,a:7=12 - -mlr -n put end { - @a[1][1] = 1; - @a[1][2] = 2; - @a[2][1] = 3; - @a[2][2] = 4; - @a[3] = 10; - @a[4] = 11; - @a[5][6][7] = 12; - @b[1][1] = 5; - @b[1][2] = 6; - @b[2][1] = 7; - @b[2][2] = 8; - emitp (@b, @a), "s", "t" -} -s=1,t=1,b=5,a=1 -s=1,t=2,b=6,a=2 -s=2,t=1,b=7,a=3 -s=2,t=2,b=8,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emitp (@a[1], @b[3]), "t", "u" -} -t=2,u=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emitp (@a[1][2], @b[5][9]), "t", "u" -} -t=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emitp (@a[1][2], @b[9][2]), "t", "u" -} -t=3,a=4 - -mlr -n put end { - @a[1][2][3] = 4; - @b[5][2][3] = 8; - emitp (@a[9], @b[5]), "t", "u" -} - - -================================================================ -CANONICAL LASHED EMIT - -mlr --from ./reg_test/input/abixy-wide --opprint put -q - @count[$a] += 1; - @sum[$a] += $x; - end { - for (a, c in @count) { - @mean[a] = @sum[a] / @count[a] - } - emit (@sum, @count, @mean), "a" - } - -a sum count mean -cat 207.843964 413 0.503254 -pan 191.530740 384 0.498778 -wye 188.110135 370 0.508406 -dog 215.541519 424 0.508353 -hat 206.091824 409 0.503892 - -mlr --from ./reg_test/input/abixy-wide --opprint put -q - @count[$a][$b] += 1; - @sum[$a][$b] += $x; - end { - for ((a, b), c in @count) { - @mean[a][b] = @sum[a][b] / @count[a][b] - } - emit (@sum, @count, @mean), "a", "b" - } - -a b sum count mean -cat pan 42.327158 89 0.475586 -cat hat 43.184410 90 0.479827 -cat dog 39.241473 78 0.503096 -cat wye 45.196775 77 0.586971 -cat cat 37.894148 79 0.479673 -pan wye 40.135300 78 0.514555 -pan pan 36.226334 77 0.470472 -pan hat 35.115869 67 0.524117 -pan dog 37.817560 73 0.518049 -pan cat 42.235677 89 0.474558 -wye cat 40.805723 74 0.551429 -wye hat 41.166697 87 0.473180 -wye dog 40.619547 76 0.534468 -wye wye 32.490973 67 0.484940 -wye pan 33.027196 66 0.500412 -dog hat 43.515162 88 0.494490 -dog pan 45.614011 87 0.524299 -dog dog 43.545956 87 0.500528 -dog wye 37.223795 79 0.471187 -dog cat 45.642595 83 0.549911 -hat hat 48.058897 88 0.546124 -hat wye 34.054270 70 0.486490 -hat pan 42.538758 85 0.500456 -hat cat 44.325655 88 0.503701 -hat dog 37.114244 78 0.475824 - - -================================================================ -MAP-VARIANT EMITS - -mlr --from ./reg_test/input/abixy-het --opprint put -q o=$a.$b; emit o -o -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q o={"ab":$a.$b}; emit o -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o=$a.$b; emit @o -o -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -zeewye -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o={"ab":$a.$b}; emit @o -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o=$a.$b; emit @* -o -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -zeewye -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o={"ab":$a.$b}; emit @* -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q emit $a.$b -mlr DSL: syntax error at "$a" -mlr put: syntax error on DSL parse of 'emit $a.$b' - -mlr --from ./reg_test/input/abixy-het --opprint put -q emit {"ab":$a.$b} -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return a.b } o = f($a, $b); emit o -o -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return a.b } emit f($a, $b) - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return {"ab": a.b} } o = f($a, $b); emit o -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a,b) { return {"ab": a.b} } emit f($a, $b) -ab -panpan -ekspan -wye -eks -wyepan -zeepan -ekszee -zeewye -- -panwye - - -================================================================ -MAP-VARIANT LASHED EMITS - - ----------------------------------------------------------------- scalar lashed emits -mlr --from ./reg_test/input/abixy-het --opprint put -q emit ($a . "_" . $b, $x . "_" . $y) -mlr DSL: syntax error at "$a" -mlr put: syntax error on DSL parse of 'emit ($a . "_" . $b, $x . "_" . $y)' - -mlr --from ./reg_test/input/abixy-het --opprint put -q o = $a . "_" . $b; p = $x . "_" . $y; emit (o, p) -o p -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o = $a . "_" . $b; @p = $x . "_" . $y; emit (@o, @p) -o p -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } o = f($a, $b); p = f($x, $y); emit (o, p) -o p -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } @o = f($a, $b); @p = f($x, $y); emit (@o, @p) -o p -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return a . "_" . b } emit (f($a, $b), f($x, $y)) -_ -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - - ----------------------------------------------------------------- non-scalar non-keyed lashed emits -mlr --from ./reg_test/input/abixy-het --opprint put -q emit ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emit (o, p) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emit (@o, @p) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emit (o, p) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emit (@o, @p) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - - ----------------------------------------------------------------- non-scalar non-keyed lashed emits -mlr --from ./reg_test/input/abixy-het --opprint put -q emitp ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}) -_:ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emitp (o, p) -o:ab p:ab -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emitp (@o, @p) -o:ab p:ab -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emitp (o, p) -o:ab p:ab -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emitp (@o, @p) -o:ab p:ab -pan_pan 0.346790_0.726803 -eks_pan 0.758680_0.522151 -_wye 0.204603_0.338319 -eks_ 0.381399_0.134189 -wye_pan _0.863624 -zee_pan 0.527126_0.493221 -eks_zee 0.611784_0.187885 -zee_wye 0.598554_ -_ 0.031442_0.749551 -pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)) -ab -0.346790_0.726803 -0.758680_0.522151 -0.204603_0.338319 -0.381399_0.134189 -_0.863624 -0.527126_0.493221 -0.611784_0.187885 -0.598554_ -0.031442_0.749551 -0.502626_0.952618 - - ----------------------------------------------------------------- non-scalar keyed lashed emits -mlr --from ./reg_test/input/abixy-het --opprint put -q emit ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}), "ab" -ab _ -ab 0.346790_0.726803 -ab 0.758680_0.522151 -ab 0.204603_0.338319 -ab 0.381399_0.134189 -ab _0.863624 -ab 0.527126_0.493221 -ab 0.611784_0.187885 -ab 0.598554_ -ab 0.031442_0.749551 -ab 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emit (o, p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emit (@o, @p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emit (o, p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emit (@o, @p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emit (f($a, $b), f($x, $y)), "ab" -ab _ -ab 0.346790_0.726803 -ab 0.758680_0.522151 -ab 0.204603_0.338319 -ab 0.381399_0.134189 -ab _0.863624 -ab 0.527126_0.493221 -ab 0.611784_0.187885 -ab 0.598554_ -ab 0.031442_0.749551 -ab 0.502626_0.952618 - - ----------------------------------------------------------------- non-scalar keyed lashed emits -mlr --from ./reg_test/input/abixy-het --opprint put -q emitp ({"ab": $a . "_" . $b}, {"ab": $x . "_" . $y}), "ab" -ab _ -ab 0.346790_0.726803 -ab 0.758680_0.522151 -ab 0.204603_0.338319 -ab 0.381399_0.134189 -ab _0.863624 -ab 0.527126_0.493221 -ab 0.611784_0.187885 -ab 0.598554_ -ab 0.031442_0.749551 -ab 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q o = {"ab": $a . "_" . $b}; p = {"ab": $x . "_" . $y}; emitp (o, p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q @o = {"ab": $a . "_" . $b}; @p = {"ab": $x . "_" . $y}; emitp (@o, @p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } o = f($a, $b); p = f($x, $y); emitp (o, p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } @o = f($a, $b); @p = f($x, $y); emitp (@o, @p), "ab" -ab o p -ab pan_pan 0.346790_0.726803 -ab eks_pan 0.758680_0.522151 -ab _wye 0.204603_0.338319 -ab eks_ 0.381399_0.134189 -ab wye_pan _0.863624 -ab zee_pan 0.527126_0.493221 -ab eks_zee 0.611784_0.187885 -ab zee_wye 0.598554_ -ab _ 0.031442_0.749551 -ab pan_wye 0.502626_0.952618 - -mlr --from ./reg_test/input/abixy-het --opprint put -q func f(a, b) { return {"ab": a . "_" . b} } emitp (f($a, $b), f($x, $y)), "ab" -ab _ -ab 0.346790_0.726803 -ab 0.758680_0.522151 -ab 0.204603_0.338319 -ab 0.381399_0.134189 -ab _0.863624 -ab 0.527126_0.493221 -ab 0.611784_0.187885 -ab 0.598554_ -ab 0.031442_0.749551 -ab 0.502626_0.952618 - - -================================================================ -MAPPER TEE REDIRECTS - -mlr --from ./reg_test/input/abixy tee ./output-regtest/tee1/out then nothing - -cat ./output-regtest/tee1/out -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy tee --no-fflush ./output-regtest/tee1/out then nothing - -cat ./output-regtest/tee1/out -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy tee -a ./output-regtest/tee1/out then nothing - -cat ./output-regtest/tee1/out -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy tee -o json ./output-regtest/tee1/out then nothing - -cat ./output-regtest/tee1/out -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - - -================================================================ -DSL TEE REDIRECTS - -mlr put -q tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy - -cat ./output-regtest/tee2/out.eks -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -cat ./output-regtest/tee2/out.hat -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -cat ./output-regtest/tee2/out.pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat ./output-regtest/tee2/out.wye -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -cat ./output-regtest/tee2/out.zee -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr put -q --no-fflush tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy - -cat ./output-regtest/tee2/out.eks -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -cat ./output-regtest/tee2/out.hat -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -cat ./output-regtest/tee2/out.pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat ./output-regtest/tee2/out.wye -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -cat ./output-regtest/tee2/out.zee -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr put -q tee >> "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy - -cat ./output-regtest/tee2/out.eks -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - -cat ./output-regtest/tee2/out.hat -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - -cat ./output-regtest/tee2/out.pan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat ./output-regtest/tee2/out.wye -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -cat ./output-regtest/tee2/out.zee -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - -mlr put -q -o json tee > "./output-regtest/tee2/out.".$a, $* ./reg_test/input/abixy - -cat ./output-regtest/tee2/out.eks -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } - -cat ./output-regtest/tee2/out.hat -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } - -cat ./output-regtest/tee2/out.pan -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -cat ./output-regtest/tee2/out.wye -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } - -cat ./output-regtest/tee2/out.zee -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } - -mlr put -q tee | "tr \[a-z\] \[A-Z\]", $* ./reg_test/input/abixy -A=PAN,B=PAN,I=1,X=0.3467901443380824,Y=0.7268028627434533 -A=EKS,B=PAN,I=2,X=0.7586799647899636,Y=0.5221511083334797 -A=WYE,B=WYE,I=3,X=0.20460330576630303,Y=0.33831852551664776 -A=EKS,B=WYE,I=4,X=0.38139939387114097,Y=0.13418874328430463 -A=WYE,B=PAN,I=5,X=0.5732889198020006,Y=0.8636244699032729 -A=ZEE,B=PAN,I=6,X=0.5271261600918548,Y=0.49322128674835697 -A=EKS,B=ZEE,I=7,X=0.6117840605678454,Y=0.1878849191181694 -A=ZEE,B=WYE,I=8,X=0.5985540091064224,Y=0.976181385699006 -A=HAT,B=WYE,I=9,X=0.03144187646093577,Y=0.7495507603507059 -A=PAN,B=WYE,I=10,X=0.5026260055412137,Y=0.9526183602969864 - -mlr put -q -o json tee | "tr \[a-z\] \[A-Z\]", $* ./reg_test/input/abixy -{ "A": "PAN", "B": "PAN", "I": 1, "X": 0.3467901443380824, "Y": 0.7268028627434533 } -{ "A": "EKS", "B": "PAN", "I": 2, "X": 0.7586799647899636, "Y": 0.5221511083334797 } -{ "A": "WYE", "B": "WYE", "I": 3, "X": 0.20460330576630303, "Y": 0.33831852551664776 } -{ "A": "EKS", "B": "WYE", "I": 4, "X": 0.38139939387114097, "Y": 0.13418874328430463 } -{ "A": "WYE", "B": "PAN", "I": 5, "X": 0.5732889198020006, "Y": 0.8636244699032729 } -{ "A": "ZEE", "B": "PAN", "I": 6, "X": 0.5271261600918548, "Y": 0.49322128674835697 } -{ "A": "EKS", "B": "ZEE", "I": 7, "X": 0.6117840605678454, "Y": 0.1878849191181694 } -{ "A": "ZEE", "B": "WYE", "I": 8, "X": 0.5985540091064224, "Y": 0.976181385699006 } -{ "A": "HAT", "B": "WYE", "I": 9, "X": 0.03144187646093577, "Y": 0.7495507603507059 } -{ "A": "PAN", "B": "WYE", "I": 10, "X": 0.5026260055412137, "Y": 0.9526183602969864 } - -mlr put -q tee > stdout, $* ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -cat ./output-regtest/tee2/err1 - -mlr put -q tee > stderr, $* ./reg_test/input/abixy - -cat ./output-regtest/tee2/err2 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -DSL PRINT REDIRECTS - -mlr put -q print > "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/print1/out.eks -abi:ekspan2 -abi:ekswye4 -abi:ekszee7 - -cat ./output-regtest/print1/out.hat -abi:hatwye9 - -cat ./output-regtest/print1/out.pan -abi:panpan1 -abi:panwye10 - -cat ./output-regtest/print1/out.wye -abi:wyewye3 -abi:wyepan5 - -cat ./output-regtest/print1/out.zee -abi:zeepan6 -abi:zeewye8 - -mlr put -q print > "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/print1/out.eks -abi:ekspan2 -abi:ekswye4 -abi:ekszee7 - -cat ./output-regtest/print1/out.hat -abi:hatwye9 - -cat ./output-regtest/print1/out.pan -abi:panpan1 -abi:panwye10 - -cat ./output-regtest/print1/out.wye -abi:wyewye3 -abi:wyepan5 - -cat ./output-regtest/print1/out.zee -abi:zeepan6 -abi:zeewye8 - -mlr put -q print >> "./output-regtest/print1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/print1/out.eks -abi:ekspan2 -abi:ekswye4 -abi:ekszee7 -abi:ekspan2 -abi:ekswye4 -abi:ekszee7 - -cat ./output-regtest/print1/out.hat -abi:hatwye9 -abi:hatwye9 - -cat ./output-regtest/print1/out.pan -abi:panpan1 -abi:panwye10 -abi:panpan1 -abi:panwye10 - -cat ./output-regtest/print1/out.wye -abi:wyewye3 -abi:wyepan5 -abi:wyewye3 -abi:wyepan5 - -cat ./output-regtest/print1/out.zee -abi:zeepan6 -abi:zeewye8 -abi:zeepan6 -abi:zeewye8 - -mlr put -q print | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i ./reg_test/input/abixy -ABI:PANPAN1 -ABI:EKSPAN2 -ABI:WYEWYE3 -ABI:EKSWYE4 -ABI:WYEPAN5 -ABI:ZEEPAN6 -ABI:EKSZEE7 -ABI:ZEEWYE8 -ABI:HATWYE9 -ABI:PANWYE10 - -mlr put -q print > stdout, "abi:".$a.$b.$i ./reg_test/input/abixy -abi:panpan1 -abi:ekspan2 -abi:wyewye3 -abi:ekswye4 -abi:wyepan5 -abi:zeepan6 -abi:ekszee7 -abi:zeewye8 -abi:hatwye9 -abi:panwye10 - -cat ./output-regtest/print1/err1 - -mlr put -q print > stderr, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/print1/err2 -abi:panpan1 -abi:ekspan2 -abi:wyewye3 -abi:ekswye4 -abi:wyepan5 -abi:zeepan6 -abi:ekszee7 -abi:zeewye8 -abi:hatwye9 -abi:panwye10 - - -================================================================ -DSL PRINTN REDIRECTS - -mlr put -q printn > "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/printn1/out.eks -abi:ekspan2abi:ekswye4abi:ekszee7 -cat ./output-regtest/printn1/out.hat -abi:hatwye9 -cat ./output-regtest/printn1/out.pan -abi:panpan1abi:panwye10 -cat ./output-regtest/printn1/out.wye -abi:wyewye3abi:wyepan5 -cat ./output-regtest/printn1/out.zee -abi:zeepan6abi:zeewye8 -mlr put -q printn > "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/printn1/out.eks -abi:ekspan2abi:ekswye4abi:ekszee7 -cat ./output-regtest/printn1/out.hat -abi:hatwye9 -cat ./output-regtest/printn1/out.pan -abi:panpan1abi:panwye10 -cat ./output-regtest/printn1/out.wye -abi:wyewye3abi:wyepan5 -cat ./output-regtest/printn1/out.zee -abi:zeepan6abi:zeewye8 -mlr put -q printn >> "./output-regtest/printn1/out.".$a, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/printn1/out.eks -abi:ekspan2abi:ekswye4abi:ekszee7abi:ekspan2abi:ekswye4abi:ekszee7 -cat ./output-regtest/printn1/out.hat -abi:hatwye9abi:hatwye9 -cat ./output-regtest/printn1/out.pan -abi:panpan1abi:panwye10abi:panpan1abi:panwye10 -cat ./output-regtest/printn1/out.wye -abi:wyewye3abi:wyepan5abi:wyewye3abi:wyepan5 -cat ./output-regtest/printn1/out.zee -abi:zeepan6abi:zeewye8abi:zeepan6abi:zeewye8 -mlr put -q printn | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i ./reg_test/input/abixy -ABI:PANPAN1ABI:EKSPAN2ABI:WYEWYE3ABI:EKSWYE4ABI:WYEPAN5ABI:ZEEPAN6ABI:EKSZEE7ABI:ZEEWYE8ABI:HATWYE9ABI:PANWYE10 -mlr put -q printn > stdout, "abi:".$a.$b.$i ./reg_test/input/abixy -abi:panpan1abi:ekspan2abi:wyewye3abi:ekswye4abi:wyepan5abi:zeepan6abi:ekszee7abi:zeewye8abi:hatwye9abi:panwye10 -cat ./output-regtest/printn1/err1 - -mlr put -q printn > stderr, "abi:".$a.$b.$i ./reg_test/input/abixy - -cat ./output-regtest/printn1/err2 -abi:panpan1abi:ekspan2abi:wyewye3abi:ekswye4abi:wyepan5abi:zeepan6abi:ekszee7abi:zeewye8abi:hatwye9abi:panwye10 - -================================================================ -DSL DUMP REDIRECTS - -mlr put -q @v=$*; dump > "./output-regtest/dump1/out.".$a ./reg_test/input/abixy - -cat ./output-regtest/dump1/out.eks -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -{ - "v": { - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 - } -} -{ - "v": { - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 - } -} - -cat ./output-regtest/dump1/out.hat -{ - "v": { - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 - } -} - -cat ./output-regtest/dump1/out.pan -{ - "v": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } -} -{ - "v": { - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 - } -} - -cat ./output-regtest/dump1/out.wye -{ - "v": { - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 - } -} -{ - "v": { - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 - } -} - -cat ./output-regtest/dump1/out.zee -{ - "v": { - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 - } -} -{ - "v": { - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 - } -} - -mlr put -q @v=$*; dump > "./output-regtest/dump1/out.".$a ./reg_test/input/abixy - -cat ./output-regtest/dump1/out.eks -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -{ - "v": { - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 - } -} -{ - "v": { - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 - } -} - -cat ./output-regtest/dump1/out.hat -{ - "v": { - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 - } -} - -cat ./output-regtest/dump1/out.pan -{ - "v": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } -} -{ - "v": { - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 - } -} - -cat ./output-regtest/dump1/out.wye -{ - "v": { - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 - } -} -{ - "v": { - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 - } -} - -cat ./output-regtest/dump1/out.zee -{ - "v": { - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 - } -} -{ - "v": { - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 - } -} - -mlr put -q @v=$*; dump >> "./output-regtest/dump1/out.".$a ./reg_test/input/abixy - -cat ./output-regtest/dump1/out.eks -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -{ - "v": { - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 - } -} -{ - "v": { - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 - } -} -{ - "v": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } -} -{ - "v": { - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 - } -} -{ - "v": { - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 - } -} - -cat ./output-regtest/dump1/out.hat -{ - "v": { - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 - } -} -{ - "v": { - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 - } -} - -cat ./output-regtest/dump1/out.pan -{ - "v": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } -} -{ - "v": { - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 - } -} -{ - "v": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - } -} -{ - "v": { - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 - } -} - -cat ./output-regtest/dump1/out.wye -{ - "v": { - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 - } -} -{ - "v": { - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 - } -} -{ - "v": { - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 - } -} -{ - "v": { - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 - } -} - -cat ./output-regtest/dump1/out.zee -{ - "v": { - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 - } -} -{ - "v": { - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 - } -} -{ - "v": { - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 - } -} -{ - "v": { - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 - } -} - -mlr put -q @v=$*; dump | "tr \[a-z\] \[A-Z\]" ./reg_test/input/abixy -{ - "V": { - "A": "PAN", - "B": "PAN", - "I": 1, - "X": 0.3467901443380824, - "Y": 0.7268028627434533 - } -} -{ - "V": { - "A": "EKS", - "B": "PAN", - "I": 2, - "X": 0.7586799647899636, - "Y": 0.5221511083334797 - } -} -{ - "V": { - "A": "WYE", - "B": "WYE", - "I": 3, - "X": 0.20460330576630303, - "Y": 0.33831852551664776 - } -} -{ - "V": { - "A": "EKS", - "B": "WYE", - "I": 4, - "X": 0.38139939387114097, - "Y": 0.13418874328430463 - } -} -{ - "V": { - "A": "WYE", - "B": "PAN", - "I": 5, - "X": 0.5732889198020006, - "Y": 0.8636244699032729 - } -} -{ - "V": { - "A": "ZEE", - "B": "PAN", - "I": 6, - "X": 0.5271261600918548, - "Y": 0.49322128674835697 - } -} -{ - "V": { - "A": "EKS", - "B": "ZEE", - "I": 7, - "X": 0.6117840605678454, - "Y": 0.1878849191181694 - } -} -{ - "V": { - "A": "ZEE", - "B": "WYE", - "I": 8, - "X": 0.5985540091064224, - "Y": 0.976181385699006 - } -} -{ - "V": { - "A": "HAT", - "B": "WYE", - "I": 9, - "X": 0.03144187646093577, - "Y": 0.7495507603507059 - } -} -{ - "V": { - "A": "PAN", - "B": "WYE", - "I": 10, - "X": 0.5026260055412137, - "Y": 0.9526183602969864 - } -} - -mlr put -q @v[NR] = $*; NR == 2 { dump > stdout } ./reg_test/input/abixy -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} - -cat ./output-regtest/dump1/err1 - -mlr put -q @v[NR] = $*; NR == 2 { dump > stderr } ./reg_test/input/abixy - -cat ./output-regtest/dump1/err2 -{ - "v": { - "1": { - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 - }, - "2": { - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 - } - } -} - - -================================================================ -DSL EMITF REDIRECTS - -mlr put -q @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy - -cat ./output-regtest/emitf1/out.ekspan -a=eks,b=pan - -cat ./output-regtest/emitf1/out.ekswye -a=eks,b=wye - -cat ./output-regtest/emitf1/out.ekszee -a=eks,b=zee - -cat ./output-regtest/emitf1/out.hatwye -a=hat,b=wye - -cat ./output-regtest/emitf1/out.panpan -a=pan,b=pan - -cat ./output-regtest/emitf1/out.panwye -a=pan,b=wye - -cat ./output-regtest/emitf1/out.wyepan -a=wye,b=pan - -cat ./output-regtest/emitf1/out.wyewye -a=wye,b=wye - -cat ./output-regtest/emitf1/out.zeepan -a=zee,b=pan - -cat ./output-regtest/emitf1/out.zeewye -a=zee,b=wye - -mlr put -q @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy - -cat ./output-regtest/emitf1/out.ekspan -a=eks,b=pan - -cat ./output-regtest/emitf1/out.ekswye -a=eks,b=wye - -cat ./output-regtest/emitf1/out.ekszee -a=eks,b=zee - -cat ./output-regtest/emitf1/out.hatwye -a=hat,b=wye - -cat ./output-regtest/emitf1/out.panpan -a=pan,b=pan - -cat ./output-regtest/emitf1/out.panwye -a=pan,b=wye - -cat ./output-regtest/emitf1/out.wyepan -a=wye,b=pan - -cat ./output-regtest/emitf1/out.wyewye -a=wye,b=wye - -cat ./output-regtest/emitf1/out.zeepan -a=zee,b=pan - -cat ./output-regtest/emitf1/out.zeewye -a=zee,b=wye - -mlr put -q @a=$a; @b=$b; emitf >> "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy - -cat ./output-regtest/emitf1/out.ekspan -a=eks,b=pan -a=eks,b=pan - -cat ./output-regtest/emitf1/out.ekswye -a=eks,b=wye -a=eks,b=wye - -cat ./output-regtest/emitf1/out.ekszee -a=eks,b=zee -a=eks,b=zee - -cat ./output-regtest/emitf1/out.hatwye -a=hat,b=wye -a=hat,b=wye - -cat ./output-regtest/emitf1/out.panpan -a=pan,b=pan -a=pan,b=pan - -cat ./output-regtest/emitf1/out.panwye -a=pan,b=wye -a=pan,b=wye - -cat ./output-regtest/emitf1/out.wyepan -a=wye,b=pan -a=wye,b=pan - -cat ./output-regtest/emitf1/out.wyewye -a=wye,b=wye -a=wye,b=wye - -cat ./output-regtest/emitf1/out.zeepan -a=zee,b=pan -a=zee,b=pan - -cat ./output-regtest/emitf1/out.zeewye -a=zee,b=wye -a=zee,b=wye - -mlr put -q -o json @a=$a; @b=$b; emitf > "./output-regtest/emitf1/out.".$a.$b, @a, @b ./reg_test/input/abixy - -cat ./output-regtest/emitf1/out.ekspan -{ "a": "eks", "b": "pan" } - -cat ./output-regtest/emitf1/out.ekswye -{ "a": "eks", "b": "wye" } - -cat ./output-regtest/emitf1/out.ekszee -{ "a": "eks", "b": "zee" } - -cat ./output-regtest/emitf1/out.hatwye -{ "a": "hat", "b": "wye" } - -cat ./output-regtest/emitf1/out.panpan -{ "a": "pan", "b": "pan" } - -cat ./output-regtest/emitf1/out.panwye -{ "a": "pan", "b": "wye" } - -cat ./output-regtest/emitf1/out.wyepan -{ "a": "wye", "b": "pan" } - -cat ./output-regtest/emitf1/out.wyewye -{ "a": "wye", "b": "wye" } - -cat ./output-regtest/emitf1/out.zeepan -{ "a": "zee", "b": "pan" } - -cat ./output-regtest/emitf1/out.zeewye -{ "a": "zee", "b": "wye" } - -mlr put -q @a=$a; @b=$b; emitf | "tr \[a-z\] \[A-Z\]", @a, @b ./reg_test/input/abixy -A=PAN,B=PAN -A=EKS,B=PAN -A=WYE,B=WYE -A=EKS,B=WYE -A=WYE,B=PAN -A=ZEE,B=PAN -A=EKS,B=ZEE -A=ZEE,B=WYE -A=HAT,B=WYE -A=PAN,B=WYE - -mlr put -q @a=$a; @b=$b; emitf > stdout, @a, @b ./reg_test/input/abixy -a=pan,b=pan -a=eks,b=pan -a=wye,b=wye -a=eks,b=wye -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=hat,b=wye -a=pan,b=wye - -cat ./output-regtest/emitf1/err1 - -mlr put -q @a=$a; @b=$b; emitf > stderr, @a, @b ./reg_test/input/abixy - -cat ./output-regtest/emitf1/err2 -a=pan,b=pan -a=eks,b=pan -a=wye,b=wye -a=eks,b=wye -a=wye,b=pan -a=zee,b=pan -a=eks,b=zee -a=zee,b=wye -a=hat,b=wye -a=pan,b=wye - - -================================================================ -DSL EMITP REDIRECTS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emitp1/out.ekspan -a:1=pan,a:2=eks - -cat ./output-regtest/emitp1/out.ekswye -a:1=pan,a:2=eks,a:3=wye,a:4=eks - -cat ./output-regtest/emitp1/out.panpan -a:1=pan - -cat ./output-regtest/emitp1/out.wyewye -a:1=pan,a:2=eks,a:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emitp1/out.ekspan -a:1=pan,a:2=eks - -cat ./output-regtest/emitp1/out.ekswye -a:1=pan,a:2=eks,a:3=wye,a:4=eks - -cat ./output-regtest/emitp1/out.panpan -a:1=pan - -cat ./output-regtest/emitp1/out.wyewye -a:1=pan,a:2=eks,a:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emitp1/out.ekspan -a:1=pan,a:2=eks -a:1=pan,a:2=eks - -cat ./output-regtest/emitp1/out.ekswye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -a:1=pan,a:2=eks,a:3=wye,a:4=eks - -cat ./output-regtest/emitp1/out.panpan -a:1=pan -a:1=pan - -cat ./output-regtest/emitp1/out.wyewye -a:1=pan,a:2=eks,a:3=wye -a:1=pan,a:2=eks,a:3=wye - -mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emitp1/out.ekspan -{ "a": {"1": "pan", "2": "eks" } } - -cat ./output-regtest/emitp1/out.ekswye -{ "a": {"1": "pan", "2": "eks", "3": "wye", "4": "eks" } } - -cat ./output-regtest/emitp1/out.panpan -{ "a": {"1": "pan" } } - -cat ./output-regtest/emitp1/out.wyewye -{ "a": {"1": "pan", "2": "eks", "3": "wye" } } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a ./reg_test/input/abixy -A:1=PAN -A:1=PAN,A:2=EKS -A:1=PAN,A:2=EKS,A:3=WYE -A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @a ./reg_test/input/abixy -a:1=pan -a:1=pan,a:2=eks -a:1=pan,a:2=eks,a:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks - -cat ./output-regtest/emitp1/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @a ./reg_test/input/abixy - -cat ./output-regtest/emitp1/err2 -a:1=pan -a:1=pan,a:2=eks -a:1=pan,a:2=eks,a:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp2/out.ekspan -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emitp2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emitp2/out.panpan -NR=1,a=pan - -cat ./output-regtest/emitp2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp2/out.ekspan -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emitp2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emitp2/out.panpan -NR=1,a=pan - -cat ./output-regtest/emitp2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp2/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emitp2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emitp2/out.panpan -NR=1,a=pan -NR=1,a=pan - -cat ./output-regtest/emitp2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp2/out.ekspan -{ "NR": 1, "a": "pan" } -{ "NR": 2, "a": "eks" } - -cat ./output-regtest/emitp2/out.ekswye -{ "NR": 1, "a": "pan" } -{ "NR": 2, "a": "eks" } -{ "NR": 3, "a": "wye" } -{ "NR": 4, "a": "eks" } - -cat ./output-regtest/emitp2/out.panpan -{ "NR": 1, "a": "pan" } - -cat ./output-regtest/emitp2/out.wyewye -{ "NR": 1, "a": "pan" } -{ "NR": 2, "a": "eks" } -{ "NR": 3, "a": "wye" } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @a, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emitp2/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp2/err2 -NR=1,a=pan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emitp3/out.ekspan -a:1=pan,b:1=pan,a:2=eks,b:2=pan - -cat ./output-regtest/emitp3/out.ekswye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye - -cat ./output-regtest/emitp3/out.panpan -a:1=pan,b:1=pan - -cat ./output-regtest/emitp3/out.wyewye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emitp3/out.ekspan -a:1=pan,b:1=pan,a:2=eks,b:2=pan - -cat ./output-regtest/emitp3/out.ekswye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye - -cat ./output-regtest/emitp3/out.panpan -a:1=pan,b:1=pan - -cat ./output-regtest/emitp3/out.wyewye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emitp3/out.ekspan -a:1=pan,b:1=pan,a:2=eks,b:2=pan -a:1=pan,b:1=pan,a:2=eks,b:2=pan - -cat ./output-regtest/emitp3/out.ekswye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye - -cat ./output-regtest/emitp3/out.panpan -a:1=pan,b:1=pan -a:1=pan,b:1=pan - -cat ./output-regtest/emitp3/out.wyewye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye - -mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emitp3/out.ekspan -{ "a": {"1": "pan", "2": "eks" },"b": {"1": "pan", "2": "pan" } } - -cat ./output-regtest/emitp3/out.ekswye -{ "a": {"1": "pan", "2": "eks", "3": "wye", "4": "eks" },"b": {"1": "pan", "2": "pan", "3": "wye", "4": "wye" } } - -cat ./output-regtest/emitp3/out.panpan -{ "a": {"1": "pan" },"b": {"1": "pan" } } - -cat ./output-regtest/emitp3/out.wyewye -{ "a": {"1": "pan", "2": "eks", "3": "wye" },"b": {"1": "pan", "2": "pan", "3": "wye" } } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b) ./reg_test/input/abixy -A:1=PAN,B:1=PAN -A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN -A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN,A:3=WYE,B:3=WYE -A:1=PAN,B:1=PAN,A:2=EKS,B:2=PAN,A:3=WYE,B:3=WYE,A:4=EKS,B:4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b) ./reg_test/input/abixy -a:1=pan,b:1=pan -a:1=pan,b:1=pan,a:2=eks,b:2=pan -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye - -cat ./output-regtest/emitp3/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emitp3/err2 -a:1=pan,b:1=pan -a:1=pan,b:1=pan,a:2=eks,b:2=pan -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye -a:1=pan,b:1=pan,a:2=eks,b:2=pan,a:3=wye,b:3=wye,a:4=eks,b:4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emitp4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emitp4/out.panpan -NR=1,a=pan,b=pan - -cat ./output-regtest/emitp4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emitp4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emitp4/out.panpan -NR=1,a=pan,b=pan - -cat ./output-regtest/emitp4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp >> "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emitp4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emitp4/out.panpan -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan - -cat ./output-regtest/emitp4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp4/out.ekspan -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } - -cat ./output-regtest/emitp4/out.ekswye -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } -{ "NR": 3, "a": "wye", "b": "wye" } -{ "NR": 4, "a": "eks", "b": "wye" } - -cat ./output-regtest/emitp4/out.panpan -{ "NR": 1, "a": "pan", "b": "pan" } - -cat ./output-regtest/emitp4/out.wyewye -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } -{ "NR": 3, "a": "wye", "b": "wye" } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR" ./reg_test/input/abixy -NR=1,A=PAN,B=PAN -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=3,A=WYE,B=WYE -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=3,A=WYE,B=WYE -NR=4,A=EKS,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b), "NR" ./reg_test/input/abixy -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emitp4/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp4/err2 -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp5/out.".$a.$b, @* ./reg_test/input/abixy - -cat ./output-regtest/emitp5/out.ekspan -a:1=pan,a:2=eks -b:1=pan,b:2=pan - -cat ./output-regtest/emitp5/out.ekswye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -cat ./output-regtest/emitp5/out.panpan -a:1=pan -b:1=pan - -cat ./output-regtest/emitp5/out.wyewye -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @* ./reg_test/input/abixy -A:1=PAN -B:1=PAN -A:1=PAN,A:2=EKS -B:1=PAN,B:2=PAN -A:1=PAN,A:2=EKS,A:3=WYE -B:1=PAN,B:2=PAN,B:3=WYE -A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS -B:1=PAN,B:2=PAN,B:3=WYE,B:4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @* ./reg_test/input/abixy -a:1=pan -b:1=pan -a:1=pan,a:2=eks -b:1=pan,b:2=pan -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -cat ./output-regtest/emitp5/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @* ./reg_test/input/abixy - -cat ./output-regtest/emitp5/err2 -a:1=pan -b:1=pan -a:1=pan,a:2=eks -b:1=pan,b:2=pan -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp6/out.".$a.$b, all ./reg_test/input/abixy - -cat ./output-regtest/emitp6/out.ekspan -a:1=pan,a:2=eks -b:1=pan,b:2=pan - -cat ./output-regtest/emitp6/out.ekswye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -cat ./output-regtest/emitp6/out.panpan -a:1=pan -b:1=pan - -cat ./output-regtest/emitp6/out.wyewye -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all ./reg_test/input/abixy -A:1=PAN -B:1=PAN -A:1=PAN,A:2=EKS -B:1=PAN,B:2=PAN -A:1=PAN,A:2=EKS,A:3=WYE -B:1=PAN,B:2=PAN,B:3=WYE -A:1=PAN,A:2=EKS,A:3=WYE,A:4=EKS -B:1=PAN,B:2=PAN,B:3=WYE,B:4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, all ./reg_test/input/abixy -a:1=pan -b:1=pan -a:1=pan,a:2=eks -b:1=pan,b:2=pan -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -cat ./output-regtest/emitp6/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, all ./reg_test/input/abixy - -cat ./output-regtest/emitp6/err2 -a:1=pan -b:1=pan -a:1=pan,a:2=eks -b:1=pan,b:2=pan -a:1=pan,a:2=eks,a:3=wye -b:1=pan,b:2=pan,b:3=wye -a:1=pan,a:2=eks,a:3=wye,a:4=eks -b:1=pan,b:2=pan,b:3=wye,b:4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp7/out.".$a.$b, @*, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp7/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan - -cat ./output-regtest/emitp7/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emitp7/out.panpan -NR=1,a=pan -NR=1,b=pan - -cat ./output-regtest/emitp7/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=4,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, @*, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emitp7/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, @*, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp7/err2 -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > "./output-regtest/emitp8/out.".$a.$b, all, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp8/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan - -cat ./output-regtest/emitp8/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emitp8/out.panpan -NR=1,a=pan -NR=1,b=pan - -cat ./output-regtest/emitp8/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=4,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stdout, all, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emitp8/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emitp > stderr, all, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emitp8/err2 -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - - -================================================================ -DSL EMIT REDIRECTS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emit1/out.ekspan -1=pan,2=eks - -cat ./output-regtest/emit1/out.ekswye -1=pan,2=eks,3=wye,4=eks - -cat ./output-regtest/emit1/out.panpan -1=pan - -cat ./output-regtest/emit1/out.wyewye -1=pan,2=eks,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emit1/out.ekspan -1=pan,2=eks - -cat ./output-regtest/emit1/out.ekswye -1=pan,2=eks,3=wye,4=eks - -cat ./output-regtest/emit1/out.panpan -1=pan - -cat ./output-regtest/emit1/out.wyewye -1=pan,2=eks,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emit1/out.ekspan -1=pan,2=eks -1=pan,2=eks - -cat ./output-regtest/emit1/out.ekswye -1=pan,2=eks,3=wye,4=eks -1=pan,2=eks,3=wye,4=eks - -cat ./output-regtest/emit1/out.panpan -1=pan -1=pan - -cat ./output-regtest/emit1/out.wyewye -1=pan,2=eks,3=wye -1=pan,2=eks,3=wye - -mlr head -n 4 then put -q -o json @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit1/out.".$a.$b, @a ./reg_test/input/abixy - -cat ./output-regtest/emit1/out.ekspan -{ "1": "pan", "2": "eks" } - -cat ./output-regtest/emit1/out.ekswye -{ "1": "pan", "2": "eks", "3": "wye", "4": "eks" } - -cat ./output-regtest/emit1/out.panpan -{ "1": "pan" } - -cat ./output-regtest/emit1/out.wyewye -{ "1": "pan", "2": "eks", "3": "wye" } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a ./reg_test/input/abixy -1=PAN -1=PAN,2=EKS -1=PAN,2=EKS,3=WYE -1=PAN,2=EKS,3=WYE,4=EKS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @a ./reg_test/input/abixy -1=pan -1=pan,2=eks -1=pan,2=eks,3=wye -1=pan,2=eks,3=wye,4=eks - -cat ./output-regtest/emit1/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @a ./reg_test/input/abixy - -cat ./output-regtest/emit1/err2 -1=pan -1=pan,2=eks -1=pan,2=eks,3=wye -1=pan,2=eks,3=wye,4=eks - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit2/out.ekspan -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emit2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emit2/out.panpan -NR=1,a=pan - -cat ./output-regtest/emit2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit2/out.ekspan -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emit2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emit2/out.panpan -NR=1,a=pan - -cat ./output-regtest/emit2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit2/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks - -cat ./output-regtest/emit2/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emit2/out.panpan -NR=1,a=pan -NR=1,a=pan - -cat ./output-regtest/emit2/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye - -mlr head -n 4 then put -q -o pprint @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit2/out.".$a.$b, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit2/out.ekspan -NR a -1 pan -2 eks - -cat ./output-regtest/emit2/out.ekswye -NR a -1 pan -2 eks -3 wye -4 eks - -cat ./output-regtest/emit2/out.panpan -NR a -1 pan - -cat ./output-regtest/emit2/out.wyewye -NR a -1 pan -2 eks -3 wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @a, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -cat ./output-regtest/emit2/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @a, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit2/err2 -NR=1,a=pan -NR=1,a=pan -NR=2,a=eks -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emit3/out.ekspan -1=pan,2=pan - -cat ./output-regtest/emit3/out.ekswye -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit3/out.panpan -1=pan - -cat ./output-regtest/emit3/out.wyewye -1=pan,2=pan,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emit3/out.ekspan -1=pan,2=pan - -cat ./output-regtest/emit3/out.ekswye -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit3/out.panpan -1=pan - -cat ./output-regtest/emit3/out.wyewye -1=pan,2=pan,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emit3/out.ekspan -1=pan,2=pan -1=pan,2=pan - -cat ./output-regtest/emit3/out.ekswye -1=pan,2=pan,3=wye,4=wye -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit3/out.panpan -1=pan -1=pan - -cat ./output-regtest/emit3/out.wyewye -1=pan,2=pan,3=wye -1=pan,2=pan,3=wye - -mlr head -n 4 then put -q --oxtab @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit3/out.".$a.$b, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emit3/out.ekspan -1 pan -2 pan - -cat ./output-regtest/emit3/out.ekswye -1 pan -2 pan -3 wye -4 wye - -cat ./output-regtest/emit3/out.panpan -1 pan - -cat ./output-regtest/emit3/out.wyewye -1 pan -2 pan -3 wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b) ./reg_test/input/abixy -1=PAN -1=PAN,2=PAN -1=PAN,2=PAN,3=WYE -1=PAN,2=PAN,3=WYE,4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b) ./reg_test/input/abixy -1=pan -1=pan,2=pan -1=pan,2=pan,3=wye -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit3/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b) ./reg_test/input/abixy - -cat ./output-regtest/emit3/err2 -1=pan -1=pan,2=pan -1=pan,2=pan,3=wye -1=pan,2=pan,3=wye,4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emit4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emit4/out.panpan -NR=1,a=pan,b=pan - -cat ./output-regtest/emit4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emit4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emit4/out.panpan -NR=1,a=pan,b=pan - -cat ./output-regtest/emit4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit >> "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit4/out.ekspan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan - -cat ./output-regtest/emit4/out.ekswye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emit4/out.panpan -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan - -cat ./output-regtest/emit4/out.wyewye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye - -mlr head -n 4 then put -q --ojson @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit4/out.".$a.$b, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit4/out.ekspan -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } - -cat ./output-regtest/emit4/out.ekswye -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } -{ "NR": 3, "a": "wye", "b": "wye" } -{ "NR": 4, "a": "eks", "b": "wye" } - -cat ./output-regtest/emit4/out.panpan -{ "NR": 1, "a": "pan", "b": "pan" } - -cat ./output-regtest/emit4/out.wyewye -{ "NR": 1, "a": "pan", "b": "pan" } -{ "NR": 2, "a": "eks", "b": "pan" } -{ "NR": 3, "a": "wye", "b": "wye" } - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR" ./reg_test/input/abixy -NR=1,A=PAN,B=PAN -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=3,A=WYE,B=WYE -NR=1,A=PAN,B=PAN -NR=2,A=EKS,B=PAN -NR=3,A=WYE,B=WYE -NR=4,A=EKS,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b), "NR" ./reg_test/input/abixy -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -cat ./output-regtest/emit4/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit4/err2 -NR=1,a=pan,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=1,a=pan,b=pan -NR=2,a=eks,b=pan -NR=3,a=wye,b=wye -NR=4,a=eks,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit5/out.".$a.$b, @* ./reg_test/input/abixy - -cat ./output-regtest/emit5/out.ekspan -1=pan,2=eks -1=pan,2=pan - -cat ./output-regtest/emit5/out.ekswye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit5/out.panpan -1=pan -1=pan - -cat ./output-regtest/emit5/out.wyewye -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @* ./reg_test/input/abixy -1=PAN -1=PAN -1=PAN,2=EKS -1=PAN,2=PAN -1=PAN,2=EKS,3=WYE -1=PAN,2=PAN,3=WYE -1=PAN,2=EKS,3=WYE,4=EKS -1=PAN,2=PAN,3=WYE,4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @* ./reg_test/input/abixy -1=pan -1=pan -1=pan,2=eks -1=pan,2=pan -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit5/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @* ./reg_test/input/abixy - -cat ./output-regtest/emit5/err2 -1=pan -1=pan -1=pan,2=eks -1=pan,2=pan -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit6/out.".$a.$b, all ./reg_test/input/abixy - -cat ./output-regtest/emit6/out.ekspan -1=pan,2=eks -1=pan,2=pan - -cat ./output-regtest/emit6/out.ekswye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit6/out.panpan -1=pan -1=pan - -cat ./output-regtest/emit6/out.wyewye -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all ./reg_test/input/abixy -1=PAN -1=PAN -1=PAN,2=EKS -1=PAN,2=PAN -1=PAN,2=EKS,3=WYE -1=PAN,2=PAN,3=WYE -1=PAN,2=EKS,3=WYE,4=EKS -1=PAN,2=PAN,3=WYE,4=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, all ./reg_test/input/abixy -1=pan -1=pan -1=pan,2=eks -1=pan,2=pan -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -cat ./output-regtest/emit6/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, all ./reg_test/input/abixy - -cat ./output-regtest/emit6/err2 -1=pan -1=pan -1=pan,2=eks -1=pan,2=pan -1=pan,2=eks,3=wye -1=pan,2=pan,3=wye -1=pan,2=eks,3=wye,4=eks -1=pan,2=pan,3=wye,4=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit7/out.".$a.$b, @*, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit7/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan - -cat ./output-regtest/emit7/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emit7/out.panpan -NR=1,a=pan -NR=1,b=pan - -cat ./output-regtest/emit7/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=4,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, @*, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emit7/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, @*, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit7/err2 -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > "./output-regtest/emit8/out.".$a.$b, all, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit8/out.ekspan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan - -cat ./output-regtest/emit8/out.ekswye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emit8/out.panpan -NR=1,a=pan -NR=1,b=pan - -cat ./output-regtest/emit8/out.wyewye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all, "NR" ./reg_test/input/abixy -NR=1,A=PAN -NR=1,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=1,A=PAN -NR=2,A=EKS -NR=3,A=WYE -NR=4,A=EKS -NR=1,B=PAN -NR=2,B=PAN -NR=3,B=WYE -NR=4,B=WYE - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, all, "NR" ./reg_test/input/abixy -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -cat ./output-regtest/emit8/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, all, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit8/err2 -NR=1,a=pan -NR=1,b=pan -NR=1,a=pan -NR=2,a=eks -NR=1,b=pan -NR=2,b=pan -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=1,a=pan -NR=2,a=eks -NR=3,a=wye -NR=4,a=eks -NR=1,b=pan -NR=2,b=pan -NR=3,b=wye -NR=4,b=wye - -mlr head -n 4 then put -q emit > "./output-regtest/emit9/out.".$a.$b, $* ./reg_test/input/abixy - -cat ./output-regtest/emit9/out.ekspan -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - -cat ./output-regtest/emit9/out.ekswye -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -cat ./output-regtest/emit9/out.panpan -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - -cat ./output-regtest/emit9/out.wyewye -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", $*, "NR" ./reg_test/input/abixy -A=PAN,B=PAN,I=1,X=0.3467901443380824,Y=0.7268028627434533 -A=EKS,B=PAN,I=2,X=0.7586799647899636,Y=0.5221511083334797 -A=WYE,B=WYE,I=3,X=0.20460330576630303,Y=0.33831852551664776 -A=EKS,B=WYE,I=4,X=0.38139939387114097,Y=0.13418874328430463 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, $*, "NR" ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -cat ./output-regtest/emit9/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, $*, "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit9/err2 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -mlr head -n 4 then put -q emit > "./output-regtest/emit10/out.".$a.$b, mapexcept($*, "a", "b") ./reg_test/input/abixy - -cat ./output-regtest/emit10/out.ekspan -i=2,x=0.7586799647899636,y=0.5221511083334797 - -cat ./output-regtest/emit10/out.ekswye -i=4,x=0.38139939387114097,y=0.13418874328430463 - -cat ./output-regtest/emit10/out.panpan -i=1,x=0.3467901443380824,y=0.7268028627434533 - -cat ./output-regtest/emit10/out.wyewye -i=3,x=0.20460330576630303,y=0.33831852551664776 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy -NR=I,_=1 -NR=X,_=0.3467901443380824 -NR=Y,_=0.7268028627434533 -NR=I,_=2 -NR=X,_=0.7586799647899636 -NR=Y,_=0.5221511083334797 -NR=I,_=3 -NR=X,_=0.20460330576630303 -NR=Y,_=0.33831852551664776 -NR=I,_=4 -NR=X,_=0.38139939387114097 -NR=Y,_=0.13418874328430463 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stdout, mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy -NR=i,_=1 -NR=x,_=0.3467901443380824 -NR=y,_=0.7268028627434533 -NR=i,_=2 -NR=x,_=0.7586799647899636 -NR=y,_=0.5221511083334797 -NR=i,_=3 -NR=x,_=0.20460330576630303 -NR=y,_=0.33831852551664776 -NR=i,_=4 -NR=x,_=0.38139939387114097 -NR=y,_=0.13418874328430463 - -cat ./output-regtest/emit10/err1 - -mlr head -n 4 then put -q @a[NR]=$a; @b[NR]=$b; emit > stderr, mapexcept($*, "a", "b"), "NR" ./reg_test/input/abixy - -cat ./output-regtest/emit10/err2 -NR=i,_=1 -NR=x,_=0.3467901443380824 -NR=y,_=0.7268028627434533 -NR=i,_=2 -NR=x,_=0.7586799647899636 -NR=y,_=0.5221511083334797 -NR=i,_=3 -NR=x,_=0.20460330576630303 -NR=y,_=0.33831852551664776 -NR=i,_=4 -NR=x,_=0.38139939387114097 -NR=y,_=0.13418874328430463 - - -================================================================ -USER-DEFINED FUNCTIONS AND SUBROUTINES - -mlr --opprint --from ./reg_test/input/abixy put func f(u,v){return u+v} $o=f(NR*1000,$x) -a b i x y o -pan pan 1 0.3467901443380824 0.7268028627434533 1000.346790 -eks pan 2 0.7586799647899636 0.5221511083334797 2000.758680 -wye wye 3 0.20460330576630303 0.33831852551664776 3000.204603 -eks wye 4 0.38139939387114097 0.13418874328430463 4000.381399 -wye pan 5 0.5732889198020006 0.8636244699032729 5000.573289 -zee pan 6 0.5271261600918548 0.49322128674835697 6000.527126 -eks zee 7 0.6117840605678454 0.1878849191181694 7000.611784 -zee wye 8 0.5985540091064224 0.976181385699006 8000.598554 -hat wye 9 0.03144187646093577 0.7495507603507059 9000.031442 -pan wye 10 0.5026260055412137 0.9526183602969864 10000.502626 - -mlr --opprint --from ./reg_test/input/abixy put func f(x,y,z){$nnn=999; int n=10; return $y} $o=f($i,$x,$y) -mlr: assignments to $-variables are not valid within func blocks. - -mlr --opprint --from ./reg_test/input/abixy put subr s(a,b) { $[a] = b } call s("W", 999) -a b i x y W -pan pan 1 0.3467901443380824 0.7268028627434533 999 -eks pan 2 0.7586799647899636 0.5221511083334797 999 -wye wye 3 0.20460330576630303 0.33831852551664776 999 -eks wye 4 0.38139939387114097 0.13418874328430463 999 -wye pan 5 0.5732889198020006 0.8636244699032729 999 -zee pan 6 0.5271261600918548 0.49322128674835697 999 -eks zee 7 0.6117840605678454 0.1878849191181694 999 -zee wye 8 0.5985540091064224 0.976181385699006 999 -hat wye 9 0.03144187646093577 0.7495507603507059 999 -pan wye 10 0.5026260055412137 0.9526183602969864 999 - -mlr --opprint --from ./reg_test/input/abixy put - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - $DID = "YES"; - } - $o = f($x, $y, $i); - call s("W", NR); - -a b i x y o W DID -pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 YES -eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 YES -wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 YES -eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 YES -wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 YES -zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 YES -eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 YES -zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 YES -hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 YES -pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 YES - -mlr --opprint --from ./reg_test/input/abixy put - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - return; - $DID = "YES"; - } - $o = f($x, $y, $i); - call s("W", NR); - -a b i x y o W -pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 2 -wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 3 -eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 4 -wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 5 -zee pan 6 0.5271261600918548 0.49322128674835697 7.020347 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7.799669 7 -zee wye 8 0.5985540091064224 0.976181385699006 9.574735 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9.780993 9 -pan wye 10 0.5026260055412137 0.9526183602969864 11.455244 10 - -mlr --from ./reg_test/input/abixy put - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - return 1 # subr must not return value - } - $o = f($x, $y, $i); - call s("W", NR); - -mlr: return statements within user-defined subroutines must not return a value. - -mlr --from ./reg_test/input/abixy put - func f(x,y,z) { - return # func must return value - } - subr s(a,b) { - $[a] = b; - } - $o = f($x, $y, $i); - call s("W", NR); - -mlr: return statements within user-defined functions must return a value. - -mlr --from ./reg_test/input/abixy --opprint put func f(x) {return k} for (k,v in $*) {$o=f($x)} -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --from ./reg_test/input/abixy --opprint put subr foo() {print "k is [".k."]"} for (k,v in $*) {call foo()} -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -k is [] -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put func log(x) { return 0 } $o = log($x) -mlr: function named "log" must not override a built-in function of the same name. - -mlr --from ./reg_test/input/abixy put subr log() { print "hello record ". NR } call log() -hello record 1 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -hello record 2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -hello record 3 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -hello record 4 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -hello record 5 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -hello record 6 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -hello record 7 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -hello record 8 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -hello record 9 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -hello record 10 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put $o1 = a; int a=1000+NR; $o2 = a; a=2000+NR; $o3 = a -a b i x y o2 o3 -pan pan 1 0.3467901443380824 0.7268028627434533 1001 2001 -eks pan 2 0.7586799647899636 0.5221511083334797 1002 2002 -wye wye 3 0.20460330576630303 0.33831852551664776 1003 2003 -eks wye 4 0.38139939387114097 0.13418874328430463 1004 2004 -wye pan 5 0.5732889198020006 0.8636244699032729 1005 2005 -zee pan 6 0.5271261600918548 0.49322128674835697 1006 2006 -eks zee 7 0.6117840605678454 0.1878849191181694 1007 2007 -zee wye 8 0.5985540091064224 0.976181385699006 1008 2008 -hat wye 9 0.03144187646093577 0.7495507603507059 1009 2009 -pan wye 10 0.5026260055412137 0.9526183602969864 1010 2010 - -mlr --opprint --from ./reg_test/input/abixy put - func f(n) { - if (is_numeric(n)) { - if (n > 0) { - return n * f(n-1) - } else { - return 1 - } - } - # implicitly return absent - } - $o = f(NR) - -a b i x y o -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 24 -wye pan 5 0.5732889198020006 0.8636244699032729 120 -zee pan 6 0.5271261600918548 0.49322128674835697 720 -eks zee 7 0.6117840605678454 0.1878849191181694 5040 -zee wye 8 0.5985540091064224 0.976181385699006 40320 -hat wye 9 0.03144187646093577 0.7495507603507059 362880 -pan wye 10 0.5026260055412137 0.9526183602969864 3628800 - -mlr --opprint --from ./reg_test/input/abixy head -n 5 then put - subr s(n) { - print "n = " . n; - if (is_numeric(n)) { - if (n > 0) { - call s(n-1) - } - } - } - print ""; - call s(NR) - - -n = 1 -n = 0 - -n = 2 -n = 1 -n = 0 - -n = 3 -n = 2 -n = 1 -n = 0 - -n = 4 -n = 3 -n = 2 -n = 1 -n = 0 - -n = 5 -n = 4 -n = 3 -n = 2 -n = 1 -n = 0 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 - -mlr --from ./reg_test/input/abixy --opprint put - func f(n) { - return n+1; - } - $o1 = f(NR); - $o2 = f(f(NR)); - $o3 = f(f(f(NR))); - $o4 = f(f(f(f(NR)))); - $o5 = f(f(f(f(f(NR))))); - $o6 = f(f(f(f(f(f(NR)))))); - -a b i x y o1 o2 o3 o4 o5 o6 -pan pan 1 0.3467901443380824 0.7268028627434533 2 3 4 5 6 7 -eks pan 2 0.7586799647899636 0.5221511083334797 3 4 5 6 7 8 -wye wye 3 0.20460330576630303 0.33831852551664776 4 5 6 7 8 9 -eks wye 4 0.38139939387114097 0.13418874328430463 5 6 7 8 9 10 -wye pan 5 0.5732889198020006 0.8636244699032729 6 7 8 9 10 11 -zee pan 6 0.5271261600918548 0.49322128674835697 7 8 9 10 11 12 -eks zee 7 0.6117840605678454 0.1878849191181694 8 9 10 11 12 13 -zee wye 8 0.5985540091064224 0.976181385699006 9 10 11 12 13 14 -hat wye 9 0.03144187646093577 0.7495507603507059 10 11 12 13 14 15 -pan wye 10 0.5026260055412137 0.9526183602969864 11 12 13 14 15 16 - -mlr --from ./reg_test/input/abixy --opprint put - func f(n) { - if (n < 2) { - return 1 - } else { - return f(n-1) + f(n-2) - } - } - $o = f(NR) - -a b i x y o -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 5 -wye pan 5 0.5732889198020006 0.8636244699032729 8 -zee pan 6 0.5271261600918548 0.49322128674835697 13 -eks zee 7 0.6117840605678454 0.1878849191181694 21 -zee wye 8 0.5985540091064224 0.976181385699006 34 -hat wye 9 0.03144187646093577 0.7495507603507059 55 -pan wye 10 0.5026260055412137 0.9526183602969864 89 - -mlr --from ./reg_test/input/abixy --opprint put - func f(n) { - if (is_present(@fcache[n])) { - return @fcache[n] - } else { - num rv = 1; - if (n >= 2) { - rv = f(n-1) + f(n-2) - } - @fcache[n] = rv; - return rv - } - } - $o = f(NR) - -a b i x y o -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 5 -wye pan 5 0.5732889198020006 0.8636244699032729 8 -zee pan 6 0.5271261600918548 0.49322128674835697 13 -eks zee 7 0.6117840605678454 0.1878849191181694 21 -zee wye 8 0.5985540091064224 0.976181385699006 34 -hat wye 9 0.03144187646093577 0.7495507603507059 55 -pan wye 10 0.5026260055412137 0.9526183602969864 89 - -mlr --from ./reg_test/input/abixy --opprint put func f(x) { begin {} } -mlr: begin statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put func f(x) { end {} } -mlr: end statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put subr s(x) { begin {} } -mlr: begin statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put subr s(x) { end {} } -mlr: end statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put func f(x) { func g(y) {} } -mlr: func statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put func f(x) { subr t(y) {} } -mlr: subr statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put subr s(x) { func g(y) {} } -mlr: func statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put subr s(x) { subr t(y) {} } -mlr: subr statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter func f(x) { begin {} }; true -mlr: begin statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter func f(x) { end {} }; true -mlr: end statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { begin {} }; true -mlr: begin statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { end {} }; true -mlr: end statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter func f(x) { func g(y) {} }; true -mlr: func statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter func f(x) { subr t(y) {} }; true -mlr: subr statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { func g(y) {} }; true -mlr: func statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint filter subr s(x) { subr t(y) {} }; true -mlr: subr statements are only valid at top level. - -mlr --from ./reg_test/input/abixy --opprint put func log(x) { return $x + 1 } -mlr: function named "log" must not override a built-in function of the same name. - -mlr --from ./reg_test/input/abixy --opprint put func f(x) { return $x + 1 } func f(x) { return $x + 1} -mlr: function named "f" has already been defined. - -mlr --from ./reg_test/input/abixy --opprint put subr s() { } subr s() { } -mlr: subroutine named "s" has already been defined. - -mlr --from ./reg_test/input/abixy --opprint put subr s() { } subr s(x) { } -mlr: subroutine named "s" has already been defined. - -mlr --from ./reg_test/input/abixy --opprint put subr log(text) { print "TEXT IS ".text } call log("NR is ".NR) -TEXT IS NR is 1 -TEXT IS NR is 2 -TEXT IS NR is 3 -TEXT IS NR is 4 -TEXT IS NR is 5 -TEXT IS NR is 6 -TEXT IS NR is 7 -TEXT IS NR is 8 -TEXT IS NR is 9 -TEXT IS NR is 10 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --from ./reg_test/input/abixy --opprint put subr log(text) { print "TEXT IS ".text } call log("NR is ".NR) -TEXT IS NR is 1 -TEXT IS NR is 2 -TEXT IS NR is 3 -TEXT IS NR is 4 -TEXT IS NR is 5 -TEXT IS NR is 6 -TEXT IS NR is 7 -TEXT IS NR is 8 -TEXT IS NR is 9 -TEXT IS NR is 10 -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --from ./reg_test/input/abixy --opprint put func f(text) { print "TEXT IS ".text; return text.text } $o = f($a) -TEXT IS pan -TEXT IS eks -TEXT IS wye -TEXT IS eks -TEXT IS wye -TEXT IS zee -TEXT IS eks -TEXT IS zee -TEXT IS hat -TEXT IS pan -a b i x y o -pan pan 1 0.3467901443380824 0.7268028627434533 panpan -eks pan 2 0.7586799647899636 0.5221511083334797 ekseks -wye wye 3 0.20460330576630303 0.33831852551664776 wyewye -eks wye 4 0.38139939387114097 0.13418874328430463 ekseks -wye pan 5 0.5732889198020006 0.8636244699032729 wyewye -zee pan 6 0.5271261600918548 0.49322128674835697 zeezee -eks zee 7 0.6117840605678454 0.1878849191181694 ekseks -zee wye 8 0.5985540091064224 0.976181385699006 zeezee -hat wye 9 0.03144187646093577 0.7495507603507059 hathat -pan wye 10 0.5026260055412137 0.9526183602969864 panpan - -mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello" } $o=f($i) -{ - "x": 1 -} -hello -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -{ - "x": 1 -} -hello -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -{ - "x": 1 -} -hello -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -{ - "x": 1 -} -hello -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -{ - "x": 1 -} -hello -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -{ - "x": 1 -} -hello -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -{ - "x": 1 -} -hello -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -{ - "x": 1 -} -hello -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -{ - "x": 1 -} -hello -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -{ - "x": 1 -} -hello -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello"; tee > "x", $* } $o=f($i) -mlr: tee statements are not valid within func blocks. - -mlr --from ./reg_test/input/abixy put begin{@x=1} func f(x) { dump; print "hello"; emit > "x", @* } $o=f($i) -mlr: emit statements are not valid within func blocks. - -mlr --from ./reg_test/input/abixy put func f(x,y) { return 2*y } $o = f($x,$y) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,o=1.453606 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,o=1.044302 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,o=0.676637 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,o=0.268377 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,o=1.727249 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,o=0.986443 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,o=0.375770 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,o=1.952363 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,o=1.499102 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,o=1.905237 - -mlr -n put -q -f ./reg_test/input/sieve.mlr -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 - -mlr -n put -q -f ./reg_test/input/mand.mlr -e begin {@verbose = true} -RCORN = -2.000000 -ICORN = -2.000000 -SIDE = 4.000000 -IHEIGHT = 50 -IWIDTH = 100 -MAXITS = 100 -LEVELSTEP = 5 -CHARS = @X*o-. -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -.........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -mlr --from ./reg_test/input/abixy put -v - func f(x) { - return x**2 - } - func g(y) { - return y+1 - } - subr s(a,b,c) { - print a.b.c - } - begin { - @a = 0; - var ell = 1; - print "local1 = ".ell; - } - end { - emit @a; - var emm = 2; - print "local2 = ".emm; - } - @a += 1; - begin { - @b = 0; - @c = 0; - print "local3 = ".ell; - } - @b += 2; - @c += 3; - end { - emit @b; - emit @c; - print "local4 = ".emm; - } - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="f", type=FUNC_DEF: - text="f", type=NON_SIGIL_NAME: - text="x", type=UNTYPED_PARAMETER_DEFINITION. - text="func_block", type=STATEMENT_BLOCK: - text="return_value", type=RETURN_VALUE: - text="**", type=OPERATOR: - text="x", type=NONINDEXED_LOCAL_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="g", type=FUNC_DEF: - text="g", type=NON_SIGIL_NAME: - text="y", type=UNTYPED_PARAMETER_DEFINITION. - text="func_block", type=STATEMENT_BLOCK: - text="return_value", type=RETURN_VALUE: - text="+", type=OPERATOR: - text="y", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="s", type=SUBR_DEF: - text="s", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. - text="b", type=UNTYPED_PARAMETER_DEFINITION. - text="c", type=UNTYPED_PARAMETER_DEFINITION. - text="subr_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="b", type=NONINDEXED_LOCAL_VARIABLE. - text="c", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="ell", type=NONINDEXED_LOCAL_VARIABLE. - text="1", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local1 = ", type=STRING_LITERAL. - text="ell", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="stream", type=STREAM: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="emm", type=NONINDEXED_LOCAL_VARIABLE. - text="2", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local2 = ", type=STRING_LITERAL. - text="emm", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="begin", type=BEGIN: - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local3 = ", type=STRING_LITERAL. - text="ell", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - text="end", type=END: - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local4 = ", type=STRING_LITERAL. - text="emm", type=NONINDEXED_LOCAL_VARIABLE. - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -BLOCKED AST: - -FUNCTION DEFINITION: -text="f", type=FUNC_DEF: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 - text="f", type=NON_SIGIL_NAME: - text="x", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="func_block", type=STATEMENT_BLOCK: - text="return_value", type=RETURN_VALUE: - text="**", type=OPERATOR: - text="x", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="2", type=NUMERIC_LITERAL. - -FUNCTION DEFINITION: -text="g", type=FUNC_DEF: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 - text="g", type=NON_SIGIL_NAME: - text="y", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="func_block", type=STATEMENT_BLOCK: - text="return_value", type=RETURN_VALUE: - text="+", type=OPERATOR: - text="y", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="1", type=NUMERIC_LITERAL. - -SUBROUTINE DEFINITION: -text="s", type=SUBR_DEF: subframe_var_count=4 max_subframe_depth=1 max_var_depth=4 - text="s", type=NON_SIGIL_NAME: - text="a", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="b", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="c", type=UNTYPED_PARAMETER_DEFINITION. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="subr_block", type=STATEMENT_BLOCK: - text="print", type=PRINT: - text=".", type=OPERATOR: - text=".", type=OPERATOR: - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="1", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local1 = ", type=STRING_LITERAL. - text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -BEGIN-BLOCK: -text="begin", type=BEGIN: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="begin_block", type=STATEMENT_BLOCK: - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="0", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local3 = ", type=STRING_LITERAL. - text="ell", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -END-BLOCK: -text="end", type=END: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="stream", type=STREAM: - text="var", type=UNTYPED_LOCAL_DEFINITION: - text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="2", type=NUMERIC_LITERAL. - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local2 = ", type=STRING_LITERAL. - text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -END-BLOCK: -text="end", type=END: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="end_block", type=STATEMENT_BLOCK: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="stream", type=STREAM: - text="emit", type=EMIT: - text="emit", type=EMIT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="stream", type=STREAM: - text="print", type=PRINT: - text=".", type=OPERATOR: - text="local4 = ", type=STRING_LITERAL. - text="emm", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text=">", type=FILE_WRITE: - text="stdout", type=STDOUT: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="a", type=STRING_LITERAL. - text="1", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="b", type=STRING_LITERAL. - text="2", type=NUMERIC_LITERAL. - text="=", type=OOSVAR_ASSIGNMENT: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="+", type=OPERATOR: - text="oosvar_keylist", type=OOSVAR_KEYLIST: - text="c", type=STRING_LITERAL. - text="3", type=NUMERIC_LITERAL. - -local1 = 1 -local3 = -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -local2 = 2 -local4 = -a=10 -b=20 -c=30 - - -================================================================ -LOCALVAR SCOPE AND EXTENT - -mlr --opprint --from ./reg_test/input/abixy put - func f() { - var a = 1; - if (NR > 5) { - a = 2; - } - return a; - } - func g() { - var b = 1; - if (NR > 5) { - var b = 2; - } - return b; - } - func h() { - var a = 1; - if (NR > 5) { - a = 2; - return a; - } - return a; - } - func i() { - var b = 1; - if (NR > 5) { - var b = 2; - return b; - } - return b; - } - $of = f(); - $og = g(); - $oh = h(); - $oi = i(); - -a b i x y of og oh oi -pan pan 1 0.3467901443380824 0.7268028627434533 1 1 1 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1 1 1 1 -wye wye 3 0.20460330576630303 0.33831852551664776 1 1 1 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1 1 1 1 -wye pan 5 0.5732889198020006 0.8636244699032729 1 1 1 1 -zee pan 6 0.5271261600918548 0.49322128674835697 2 1 2 2 -eks zee 7 0.6117840605678454 0.1878849191181694 2 1 2 2 -zee wye 8 0.5985540091064224 0.976181385699006 2 1 2 2 -hat wye 9 0.03144187646093577 0.7495507603507059 2 1 2 2 -pan wye 10 0.5026260055412137 0.9526183602969864 2 1 2 2 - -mlr --opprint --from ./reg_test/input/abixy put - func f() { - var a = 2; - var b = 2; - if (NR > 5) { - var a = 3; - b = 3; - } - return 1000 * a + b; - } - a = 1; - b = 1; - $ab = f(); - $oa = a; - $ob = b; - -a b i x y ab oa ob -pan pan 1 0.3467901443380824 0.7268028627434533 2002 1 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2002 1 1 -wye wye 3 0.20460330576630303 0.33831852551664776 2002 1 1 -eks wye 4 0.38139939387114097 0.13418874328430463 2002 1 1 -wye pan 5 0.5732889198020006 0.8636244699032729 2002 1 1 -zee pan 6 0.5271261600918548 0.49322128674835697 2003 1 1 -eks zee 7 0.6117840605678454 0.1878849191181694 2003 1 1 -zee wye 8 0.5985540091064224 0.976181385699006 2003 1 1 -hat wye 9 0.03144187646093577 0.7495507603507059 2003 1 1 -pan wye 10 0.5026260055412137 0.9526183602969864 2003 1 1 - - -================================================================ -LOCALVAR UNSETS - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} - -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 - -{ - "1": { - "2": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ -} -{ - "1": { - "2": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} - - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u ./reg_test/input/unset1.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} - -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} - -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} - -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} - -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 - -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 - -{ - "1": { - "3": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 - -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} -9 - -{ - "4": { - "6": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ -} -{ - "1": { - "3": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} - -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ - "1": 9 -} - -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} - -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} -9 -{ - "4": 9 -} - - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ - "1": 9 -} -{ -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} - -mlr put -q s=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u ./reg_test/input/unset4.dkvp -9 -{ - "1": 9 -} -{ - "1": { - "2": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - } -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ - "1": 9 -} -{ - "1": { - "3": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "5": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} -9 -{ - "4": 9 -} -{ - "4": { - "6": 9 - } -} - - -================================================================ -LOCALVAR TYPEDECLs - -mlr --from ./reg_test/input/abixy put - str a = $a; - a = "a:".NR; - $c = a; - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=a:1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=a:2 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=a:3 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=a:4 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=a:5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=a:6 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=a:7 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=a:8 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=a:9 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=a:10 - -mlr --from ./reg_test/input/abixy put - str a = $a; - a = NR; - $c = a; - -mlr: string type assertion for variable a unmet by value 1 with type int. - -mlr --from ./reg_test/input/abixy put - int a = $a; - a = NR; - $c = a; - -mlr: int type assertion for variable a unmet by value "pan" with type string. - -mlr --from ./reg_test/input/abixy put - int i = $i; - i = NR; - $c = a; - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -FORBIND TYPEDECLs - -mlr --from ./reg_test/input/abixy put - for (int i = 0; i < $i; i += 1) { - $c = i * 10; - } - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=0 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=10 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=20 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=30 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=40 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=50 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=60 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=70 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=80 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=90 - -mlr --from ./reg_test/input/abixy put - for (float i = 0; i < $i; i += 1) { - $c = i * 10; - } - -mlr: float type assertion for variable i unmet by value 0 with type int. - -mlr --from ./reg_test/input/abixy put - for (int i = 0; i < $i; i += 1) { - i += 2; - $c = i; - } - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=2 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=2 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=2 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=5 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=5 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=8 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=8 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=8 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=11 - -mlr --from ./reg_test/input/abixy put - for (int i = 0; i < $i; i += 1) { - i += 1.5; - $c = i; - } - -mlr: int type assertion for variable i unmet by value 1.500000 with type float. - -mlr --from ./reg_test/input/abixy put - for (int i = 0; i < $i; i += 1) { - i += 1.0; - $c = i; - } - -mlr: int type assertion for variable i unmet by value 1.000000 with type float. - -mlr --from ./reg_test/input/abixy put - for (num i = 0; i < $i; i += 1) { - i += 1.0; - $c = i; - } - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=1.000000 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=1.000000 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=3.000000 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=3.000000 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=5.000000 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=5.000000 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=7.000000 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=7.000000 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=9.000000 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=9.000000 - - -================================================================ -ARGPASS TYPEDECLs - -mlr --from ./reg_test/input/abixy put - func f(int i) { - return i+3; - } - $c = f($i); - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,c=4 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,c=5 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,c=6 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,c=7 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,c=8 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,c=9 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,c=10 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,c=11 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,c=12 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,c=13 - -mlr --from ./reg_test/input/abixy put - func f(int i) { - return i+3; - } - $c = f($x); - -mlr: int type assertion for variable i unmet by value 0.346790 with type float. - -mlr --from ./reg_test/input/abixy put - func f(num i): int { - return i+3.45; - } - $c = f($x); - -mlr: function f returned type float, not matching typedecl int. - -mlr --from ./reg_test/input/abixy put - func f(num i): int { - return i+3.45; - } - $c = f($i); - -mlr: function f returned type float, not matching typedecl int. - -mlr --from ./reg_test/input/abixy put - func f(num i): int { - i = "a"; - return 2; - } - $c = f($x); - -mlr: numeric type assertion for variable i unmet by value "a" with type string. - -mlr --from ./reg_test/input/abixy put - subr s(int i) { - print i+3; - } - call s($i); - -4 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -5 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -6 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -7 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -8 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -9 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -10 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -11 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -12 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -13 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put - subr s(int i) { - print i+3; - } - call s($x); - -mlr: int type assertion for variable i unmet by value 0.346790 with type float. - -mlr --from ./reg_test/input/abixy put - subr s(num i) { - i = "a"; - print 2; - } - call s($x); - -mlr: numeric type assertion for variable i unmet by value "a" with type string. - - -================================================================ -LOCAL MAP-VARIABLE WRITE/READ - -mlr --from ./reg_test/input/xyz345 put -v -a - $s = a; - $t = b[$x]; - $u = c[$x][$y]; - $v = d[$x][$y][$z]; - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="v", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK - ADD FOR ABSENT s @ 0u0 - READ a ABSENT @ 0s0 - READ b ABSENT @ 0s0 - READ c ABSENT @ 0s0 - READ d ABSENT @ 0s0 -BLOCK main_block subframe_var_count=1 max_subframe_depth=1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] -SUBFRAME [main_block] var_count_below=0 var_count_at=1 max_var_depth_so_far=1 subframe_depth=0 - NODE a 0s0 (0:0) -> 0 - NODE b 0s0 (0:0) -> 0 - NODE c 0s0 (0:0) -> 0 - NODE d 0s0 (0:0) -> 0 - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=1 max_subframe_depth=1 max_var_depth=1 - text="=", type=SREC_ASSIGNMENT: - text="s", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="=", type=SREC_ASSIGNMENT: - text="t", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="u", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="v", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=0 vardef_subframe_index=0 vardef_frame_relative_index=0 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put -v -a - d[$x][$y][$z] = 9; - $d = d[$x][$y][$z]; - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK - ADD FOR ABSENT s @ 0u0 - ADD WRITE d @ 1s0 - READ d PRESENT @ 1s0 -BLOCK main_block subframe_var_count=2 max_subframe_depth=1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] -SUBFRAME [main_block] var_count_below=0 var_count_at=2 max_var_depth_so_far=2 subframe_depth=0 - NODE d 1s0 (0:0) -> 1 - NODE d 1s0 (0:0) -> 1 - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=2 max_subframe_depth=1 max_var_depth=2 - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -x=3,y=4,z=5,d=9 - -mlr --from ./reg_test/input/xyz345 put -v -a - a = 6; - b[$x] = 7; - c[$x][$y] = 8; - d[$x][$y][$z] = 9; - - $a = a; - $b = b[$x]; - $c = c[$x][$y]; - $d = d[$x][$y][$z]; - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="6", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="7", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="a", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="b", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK - ADD FOR ABSENT s @ 0u0 - ADD WRITE a @ 1s0 - ADD WRITE b @ 2s0 - ADD WRITE c @ 3s0 - ADD WRITE d @ 4s0 - READ a PRESENT @ 1s0 - READ b PRESENT @ 2s0 - READ c PRESENT @ 3s0 - READ d PRESENT @ 4s0 -BLOCK main_block subframe_var_count=5 max_subframe_depth=1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] -SUBFRAME [main_block] var_count_below=0 var_count_at=5 max_var_depth_so_far=5 subframe_depth=0 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - NODE d 4s0 (0:0) -> 4 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - NODE d 4s0 (0:0) -> 4 - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=5 max_subframe_depth=1 max_var_depth=5 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="6", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="7", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="a", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="=", type=SREC_ASSIGNMENT: - text="b", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -x=3,y=4,z=5,a=6,b=7,c=8,d=9 - -mlr --from ./reg_test/input/xyz345 put -v -a - a = 6; - b[$x] = 7; - c[$x][$y] = 8; - d[$x][$y][$z] = 9; - - $a0 = a; - $a1 = a[$x]; - $a2 = a[$x][$y]; - $a3 = a[$x][$y][$z]; - - $b0 = b; - $b1 = b[$x]; - $b2 = b[$x][$y]; - $b3 = b[$x][$y][$z]; - - $c0 = c; - $c1 = c[$x]; - $c2 = c[$x][$y]; - $c3 = c[$x][$y][$z]; - - $d0 = d; - $d1 = d[$x]; - $d2 = d[$x][$y]; - $d3 = d[$x][$y][$z]; - -RAW AST: - -AST ROOT: -text="block", type=STATEMENT_BLOCK: - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="6", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="7", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="a0", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="a1", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="a2", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="a3", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b0", type=FIELD_NAME. - text="b", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="b1", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b2", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b3", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c0", type=FIELD_NAME. - text="c", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="c1", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c2", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c3", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d0", type=FIELD_NAME. - text="d", type=NONINDEXED_LOCAL_VARIABLE. - text="=", type=SREC_ASSIGNMENT: - text="d1", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d2", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d3", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -ALLOCATING RELATIVE (PASS-1) LOCALS FOR MAIN BLOCK - ADD FOR ABSENT s @ 0u0 - ADD WRITE a @ 1s0 - ADD WRITE b @ 2s0 - ADD WRITE c @ 3s0 - ADD WRITE d @ 4s0 - READ a PRESENT @ 1s0 - READ a PRESENT @ 1s0 - READ a PRESENT @ 1s0 - READ a PRESENT @ 1s0 - READ b PRESENT @ 2s0 - READ b PRESENT @ 2s0 - READ b PRESENT @ 2s0 - READ b PRESENT @ 2s0 - READ c PRESENT @ 3s0 - READ c PRESENT @ 3s0 - READ c PRESENT @ 3s0 - READ c PRESENT @ 3s0 - READ d PRESENT @ 4s0 - READ d PRESENT @ 4s0 - READ d PRESENT @ 4s0 - READ d PRESENT @ 4s0 -BLOCK main_block subframe_var_count=5 max_subframe_depth=1 - -ALLOCATING ABSOLUTE (PASS-2) LOCALS FOR DEFINITION BLOCK [main_block] -SUBFRAME [main_block] var_count_below=0 var_count_at=5 max_var_depth_so_far=5 subframe_depth=0 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - NODE d 4s0 (0:0) -> 4 - NODE a 1s0 (0:0) -> 1 - NODE a 1s0 (0:0) -> 1 - NODE a 1s0 (0:0) -> 1 - NODE a 1s0 (0:0) -> 1 - NODE b 2s0 (0:0) -> 2 - NODE b 2s0 (0:0) -> 2 - NODE b 2s0 (0:0) -> 2 - NODE b 2s0 (0:0) -> 2 - NODE c 3s0 (0:0) -> 3 - NODE c 3s0 (0:0) -> 3 - NODE c 3s0 (0:0) -> 3 - NODE c 3s0 (0:0) -> 3 - NODE d 4s0 (0:0) -> 4 - NODE d 4s0 (0:0) -> 4 - NODE d 4s0 (0:0) -> 4 - NODE d 4s0 (0:0) -> 4 - -BLOCKED AST: - -MAIN BLOCK: -text="main_block", type=STATEMENT_BLOCK: subframe_var_count=5 max_subframe_depth=1 max_var_depth=5 - text="=", type=NONINDEXED_LOCAL_ASSIGNMENT: - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="6", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="7", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="8", type=NUMERIC_LITERAL. - text="=", type=INDEXED_LOCAL_ASSIGNMENT: - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="9", type=NUMERIC_LITERAL. - text="=", type=SREC_ASSIGNMENT: - text="a0", type=FIELD_NAME. - text="a", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="=", type=SREC_ASSIGNMENT: - text="a1", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="a2", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="a3", type=FIELD_NAME. - text="a", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=1 vardef_subframe_index=0 vardef_frame_relative_index=1 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b0", type=FIELD_NAME. - text="b", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="=", type=SREC_ASSIGNMENT: - text="b1", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b2", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="b3", type=FIELD_NAME. - text="b", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=2 vardef_subframe_index=0 vardef_frame_relative_index=2 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c0", type=FIELD_NAME. - text="c", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="=", type=SREC_ASSIGNMENT: - text="c1", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c2", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="c3", type=FIELD_NAME. - text="c", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=3 vardef_subframe_index=0 vardef_frame_relative_index=3 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d0", type=FIELD_NAME. - text="d", type=NONINDEXED_LOCAL_VARIABLE. vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="=", type=SREC_ASSIGNMENT: - text="d1", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d2", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="=", type=SREC_ASSIGNMENT: - text="d3", type=FIELD_NAME. - text="d", type=INDEXED_LOCAL_VARIABLE: vardef_subframe_relative_index=4 vardef_subframe_index=0 vardef_frame_relative_index=4 - text="x", type=FIELD_NAME. - text="y", type=FIELD_NAME. - text="z", type=FIELD_NAME. - -x=3,y=4,z=5,a0=6,b1=7,c2=8,d3=9 - - -================================================================ -LOCAL MAP-VARIABLE TYPE-DECL - -mlr --from ./reg_test/input/xyz345 put - map a = {}; - -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put - map a = {}; - a[1]=2; - a[3][4]=5; - -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put - map a = {}; - a=2; - a[3][4]=5; - -mlr: map type assertion for variable a unmet by value 2 with type int. - -mlr --from ./reg_test/input/xyz345 put - map a = {}; - a[3][4]=5; - a=2; - -mlr: map type assertion for variable a unmet by value 2 with type int. - - -================================================================ -TRIPLE-FORs - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - num a = 1; - for (;;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - num a = 1; - for (;;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a = 1; ;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - num a = 1; - for (; ; a += 1) { - if (a > NR) { - break; - } - sum += a; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a=1; ; a += 1) { - if (a > NR) { - break; - } - sum += a; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a=1; a <= NR; a += 1) { - sum += a; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 10 -wye pan 5 0.5732889198020006 0.8636244699032729 15 -zee pan 6 0.5271261600918548 0.49322128674835697 21 -eks zee 7 0.6117840605678454 0.1878849191181694 28 -zee wye 8 0.5985540091064224 0.976181385699006 36 -hat wye 9 0.03144187646093577 0.7495507603507059 45 -pan wye 10 0.5026260055412137 0.9526183602969864 55 - -mlr put - num a = 100; - num b = 100; - for (num a = 200, b = 300; a <= 210; a += 1, b += 1) { - print "a:".a.",b:".b - } - $oa = a; - $ob = b; - -a:200,b:300 -a:201,b:301 -a:202,b:302 -a:203,b:303 -a:204,b:304 -a:205,b:305 -a:206,b:306 -a:207,b:307 -a:208,b:308 -a:209,b:309 -a:210,b:310 -x=1,oa=100,ob=311 - -mlr --from ./reg_test/input/abixy put - for ( ; $x <= 10; $x += 1) { - } - -a=pan,b=pan,i=1,x=10.346790,y=0.7268028627434533 -a=eks,b=pan,i=2,x=10.758680,y=0.5221511083334797 -a=wye,b=wye,i=3,x=10.204603,y=0.33831852551664776 -a=eks,b=wye,i=4,x=10.381399,y=0.13418874328430463 -a=wye,b=pan,i=5,x=10.573289,y=0.8636244699032729 -a=zee,b=pan,i=6,x=10.527126,y=0.49322128674835697 -a=eks,b=zee,i=7,x=10.611784,y=0.1878849191181694 -a=zee,b=wye,i=8,x=10.598554,y=0.976181385699006 -a=hat,b=wye,i=9,x=10.031442,y=0.7495507603507059 -a=pan,b=wye,i=10,x=10.502626,y=0.9526183602969864 - -mlr --opprint --from ./reg_test/input/abixy put - num a = 100; - b = 200; - @c = 300; - $d = 400; - for (num i = 1; i < 1024; i *= 2) { - a += 1; - b += 1; - @c += 1; - $d += 1; - $oa = a; - $ob = b; - $oc = @c; - $od = $d; - } - -a b i x y d oa ob oc od -pan pan 1 0.3467901443380824 0.7268028627434533 410 110 210 310 410 -eks pan 2 0.7586799647899636 0.5221511083334797 410 110 210 310 410 -wye wye 3 0.20460330576630303 0.33831852551664776 410 110 210 310 410 -eks wye 4 0.38139939387114097 0.13418874328430463 410 110 210 310 410 -wye pan 5 0.5732889198020006 0.8636244699032729 410 110 210 310 410 -zee pan 6 0.5271261600918548 0.49322128674835697 410 110 210 310 410 -eks zee 7 0.6117840605678454 0.1878849191181694 410 110 210 310 410 -zee wye 8 0.5985540091064224 0.976181385699006 410 110 210 310 410 -hat wye 9 0.03144187646093577 0.7495507603507059 410 110 210 310 410 -pan wye 10 0.5026260055412137 0.9526183602969864 410 110 210 310 410 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a = 1; a <= 10; a += 1) { - continue; - sum += a; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 0 -eks pan 2 0.7586799647899636 0.5221511083334797 0 -wye wye 3 0.20460330576630303 0.33831852551664776 0 -eks wye 4 0.38139939387114097 0.13418874328430463 0 -wye pan 5 0.5732889198020006 0.8636244699032729 0 -zee pan 6 0.5271261600918548 0.49322128674835697 0 -eks zee 7 0.6117840605678454 0.1878849191181694 0 -zee wye 8 0.5985540091064224 0.976181385699006 0 -hat wye 9 0.03144187646093577 0.7495507603507059 0 -pan wye 10 0.5026260055412137 0.9526183602969864 0 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a = 1; a <= 10; a += 1) { - sum += a; - break; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1 -wye wye 3 0.20460330576630303 0.33831852551664776 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1 -wye pan 5 0.5732889198020006 0.8636244699032729 1 -zee pan 6 0.5271261600918548 0.49322128674835697 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1 -zee wye 8 0.5985540091064224 0.976181385699006 1 -hat wye 9 0.03144187646093577 0.7495507603507059 1 -pan wye 10 0.5026260055412137 0.9526183602969864 1 - -mlr --opprint --from ./reg_test/input/abixy put - num sum = 0; - for (num a = 1; a <= NR; a += 1) { - if (a == 4 || a == 5) { - continue; - } - if (a == 8) { - break; - } - sum += a; - } - $z = sum - -a b i x y z -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 3 -wye wye 3 0.20460330576630303 0.33831852551664776 6 -eks wye 4 0.38139939387114097 0.13418874328430463 6 -wye pan 5 0.5732889198020006 0.8636244699032729 6 -zee pan 6 0.5271261600918548 0.49322128674835697 12 -eks zee 7 0.6117840605678454 0.1878849191181694 19 -zee wye 8 0.5985540091064224 0.976181385699006 19 -hat wye 9 0.03144187646093577 0.7495507603507059 19 -pan wye 10 0.5026260055412137 0.9526183602969864 19 - -mlr --opprint --from ./reg_test/input/abixy put - for ($o1 = 1; ; $o3 = 3) { - break; - } - -a b i x y o1 -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 1 -wye wye 3 0.20460330576630303 0.33831852551664776 1 -eks wye 4 0.38139939387114097 0.13418874328430463 1 -wye pan 5 0.5732889198020006 0.8636244699032729 1 -zee pan 6 0.5271261600918548 0.49322128674835697 1 -eks zee 7 0.6117840605678454 0.1878849191181694 1 -zee wye 8 0.5985540091064224 0.976181385699006 1 -hat wye 9 0.03144187646093577 0.7495507603507059 1 -pan wye 10 0.5026260055412137 0.9526183602969864 1 - -mlr --opprint --from ./reg_test/input/abixy put - for ($o1 = 1; $o1 < NR; $o1 += 1) { - } - -a b i x y o1 -pan pan 1 0.3467901443380824 0.7268028627434533 1 -eks pan 2 0.7586799647899636 0.5221511083334797 2 -wye wye 3 0.20460330576630303 0.33831852551664776 3 -eks wye 4 0.38139939387114097 0.13418874328430463 4 -wye pan 5 0.5732889198020006 0.8636244699032729 5 -zee pan 6 0.5271261600918548 0.49322128674835697 6 -eks zee 7 0.6117840605678454 0.1878849191181694 7 -zee wye 8 0.5985540091064224 0.976181385699006 8 -hat wye 9 0.03144187646093577 0.7495507603507059 9 -pan wye 10 0.5026260055412137 0.9526183602969864 10 - -mlr --opprint --from ./reg_test/input/abixy put - for ($o1 = 1, $o2 = 2; $o3 = 3; $o4 = 4) { - } - -mlr: the final triple-for continutation statement must be a bare boolean. - -mlr --opprint --from ./reg_test/input/abixy put - for ($o1 = 1, $o2 = 2; $o3 < 3, $o4 = 4; $o5 = 5) { - break; - } - -mlr: the final triple-for continutation statement must be a bare boolean. - -mlr --opprint --from ./reg_test/input/abixy put - $o4 = 0; - for ($o1 = 1, $o2 = 2; $o3 = 3, $o4 < 4; $o5 = 5) { - break; - } - -a b i x y o4 o1 o2 o3 -pan pan 1 0.3467901443380824 0.7268028627434533 0 1 2 3 -eks pan 2 0.7586799647899636 0.5221511083334797 0 1 2 3 -wye wye 3 0.20460330576630303 0.33831852551664776 0 1 2 3 -eks wye 4 0.38139939387114097 0.13418874328430463 0 1 2 3 -wye pan 5 0.5732889198020006 0.8636244699032729 0 1 2 3 -zee pan 6 0.5271261600918548 0.49322128674835697 0 1 2 3 -eks zee 7 0.6117840605678454 0.1878849191181694 0 1 2 3 -zee wye 8 0.5985540091064224 0.976181385699006 0 1 2 3 -hat wye 9 0.03144187646093577 0.7495507603507059 0 1 2 3 -pan wye 10 0.5026260055412137 0.9526183602969864 0 1 2 3 - - -================================================================ -MAPVARS IN SCALAR FUNCTION-CALL CONTEXTS - -mlr --from ./reg_test/input/abixy put $z=strlen($*) -mlr: $* is not valid within scalar contexts. - -mlr --from ./reg_test/input/abixy put $z=strlen({}) -mlr: map-literals are not valid within scalar contexts. - -mlr --from ./reg_test/input/abixy put a={}; $z=strlen(a) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -MAPVAR ASSIGNMENTS TO FULL SREC - -mlr --from ./reg_test/input/xyz2 put $* = {"a":1, "b": {"x":8,"y":9}, "c":3} -a=1,c=3 -a=1,c=3 - -mlr --from ./reg_test/input/xyz2 put $* = $* -x=3,y=4,z=5 -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @a = 1; $* = @a - - - -mlr --from ./reg_test/input/xyz2 put @b[1] = 2; $* = @b -1=2 -1=2 - -mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; $* = @c - - - -mlr --from ./reg_test/input/xyz2 put @a = 1; $* = @* -a=1 -a=1 - -mlr --from ./reg_test/input/xyz2 put @b[1] = 2; $* = @* - - - -mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; $* = @* - - - -mlr --from ./reg_test/input/xyz2 put a = 1; $* = a - - - -mlr --from ./reg_test/input/xyz2 put b[1] = 2; $* = b -1=2 -1=2 - -mlr --from ./reg_test/input/xyz2 put c[1][2] = 3; $* = c - - - -mlr --from ./reg_test/input/xyz2 put $* = 3 - - - -mlr --from ./reg_test/input/xyz2 put - func map_valued_func() { - return {"a":1,"b":2} - } - map m = map_valued_func(); - $* = m; - -a=1,b=2 -a=1,b=2 - -mlr --from ./reg_test/input/xyz2 put - func map_valued_func() { - return {"a":1,"b":2} - } - $* = map_valued_func(); - -a=1,b=2 -a=1,b=2 - - -================================================================ -MAPVAR ASSIGNMENTS TO FULL OOSVAR - -mlr --from ./reg_test/input/xyz2 put @* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -x=3,y=4,z=5 -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @* = $*; dump -{ - "x": 3, - "y": 4, - "z": 5 -} -x=3,y=4,z=5 -{ - "x": 6, - "y": 7, - "u": 8 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @* = @*; dump -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -x=3,y=4,z=5 -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @a = 1; @* = @a; dump -{ -} -x=3,y=4,z=5 -{ -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @b[1] = 2; @* = @b; dump -{ - "1": 2 -} -x=3,y=4,z=5 -{ - "1": 2 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; @* = @c; dump -{ - "1": { - "2": 3 - } -} -x=3,y=4,z=5 -{ - "1": { - "2": 3 - } -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @a = 1; @* = @*; dump -{ - "a": 1 -} -x=3,y=4,z=5 -{ - "a": 1 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @b[1] = 2; @* = @*; dump -{ - "b": { - "1": 2 - } -} -x=3,y=4,z=5 -{ - "b": { - "1": 2 - } -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @c[1][2] = 3; @* = @*; dump -{ - "c": { - "1": { - "2": 3 - } - } -} -x=3,y=4,z=5 -{ - "c": { - "1": { - "2": 3 - } - } -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put a = 1; @* = a; dump -{ -} -x=3,y=4,z=5 -{ -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put b[1] = 2; @* = b; dump -{ - "1": 2 -} -x=3,y=4,z=5 -{ - "1": 2 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put c[1][2] = 3; @* = c; dump -{ - "1": { - "2": 3 - } -} -x=3,y=4,z=5 -{ - "1": { - "2": 3 - } -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put @* = 3 -x=3,y=4,z=5 -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put - func map_valued_func() { - return {"a":1,"b":2} - } - map m = map_valued_func(); - @* = m; - dump - -{ - "a": 1, - "b": 2 -} -x=3,y=4,z=5 -{ - "a": 1, - "b": 2 -} -x=6,y=7,u=8 - -mlr --from ./reg_test/input/xyz2 put - func map_valued_func() { - return {"a":1,"b":2} - } - @* = map_valued_func(); - dump - -{ - "a": 1, - "b": 2 -} -x=3,y=4,z=5 -{ - "a": 1, - "b": 2 -} -x=6,y=7,u=8 - - -================================================================ -MAPVAR ASSIGNMENTS TO OOSVAR - -mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @o = @o; dump @o - - - -mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @o = @*; dump -{ - "o": { - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 - } -} -{ - "o": { - "o": { - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 - } - } -} -{ - "o": { - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 - } -} -{ - "o": { - "o": { - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q @o = $*; dump @o -{ - "x": 3, - "y": 4, - "z": 5 -} -{ - "x": 6, - "y": 7, - "u": 8 -} - -mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o; @o = @o; dump @o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @o = {"a":1, "b": {"x":8,"y":9}, "c":3}; @o = @o; dump @o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; @o = @a; dump @o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; @o = @b; dump @o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; @o = @c; dump @o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; @o = @*; dump @o -{ - "a": 1 -} -{ - "a": 1, - "o": { - "a": 1 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; @o = @*; dump @o -{ - "b": { - "1": 2 - } -} -{ - "b": { - "1": 2 - }, - "o": { - "b": { - "1": 2 - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; @o = @*; dump @o -{ - "c": { - "1": { - "2": 3 - } - } -} -{ - "c": { - "1": { - "2": 3 - } - }, - "o": { - "c": { - "1": { - "2": 3 - } - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q a = 1; @o = a; dump @o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; @o = b; dump @o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; @o = c; dump @o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} @o = map_valued_func(); dump @o -{ - "a": 1, - "b": 2 -} -{ - "a": 1, - "b": 2 -} - - -================================================================ -MAPVAR ASSIGNMENTS TO MAP-TYPED LOCAL - -mlr --from ./reg_test/input/xyz2 put -q map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q map o = @o; dump o -mlr: map type assertion for variable o unmet by value "" with type absent. - -mlr --from ./reg_test/input/xyz2 put -q map o = $*; dump o -{ - "x": 3, - "y": 4, - "z": 5 -} -{ - "x": 6, - "y": 7, - "u": 8 -} - -mlr --from ./reg_test/input/xyz2 put -q map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; map o = @a; dump o -mlr: map type assertion for variable o unmet by value 1 with type int. - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; map o = @b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; map o = @c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; map o = @*; dump o -{ - "a": 1 -} -{ - "a": 1 -} - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; map o = @*; dump o -{ - "b": { - "1": 2 - } -} -{ - "b": { - "1": 2 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; map o = @*; dump o -{ - "c": { - "1": { - "2": 3 - } - } -} -{ - "c": { - "1": { - "2": 3 - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q a = 1; map o = a; dump o -mlr: map type assertion for variable o unmet by value 1 with type int. - -mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; map o = b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; map o = c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} map o = map_valued_func(); dump o -{ - "a": 1, - "b": 2 -} -{ - "a": 1, - "b": 2 -} - - -================================================================ -MAPVAR ASSIGNMENTS TO VAR-TYPED LOCAL - -mlr --from ./reg_test/input/xyz2 put -q var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q var o = @o; dump o - - - -mlr --from ./reg_test/input/xyz2 put -q var o = $*; dump o -{ - "x": 3, - "y": 4, - "z": 5 -} -{ - "x": 6, - "y": 7, - "u": 8 -} - -mlr --from ./reg_test/input/xyz2 put -q var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; var o = @a; dump o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; var o = @b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; var o = @c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; var o = @*; dump o -{ - "a": 1 -} -{ - "a": 1 -} - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; var o = @*; dump o -{ - "b": { - "1": 2 - } -} -{ - "b": { - "1": 2 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; var o = @*; dump o -{ - "c": { - "1": { - "2": 3 - } - } -} -{ - "c": { - "1": { - "2": 3 - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q a = 1; var o = a; dump o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; var o = b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; var o = c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} var o = map_valued_func(); dump o -{ - "a": 1, - "b": 2 -} -{ - "a": 1, - "b": 2 -} - - -================================================================ -MAPVAR ASSIGNMENTS TO UNTYPED LOCAL - -mlr --from ./reg_test/input/xyz2 put -q o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q o = @o; dump o - - - -mlr --from ./reg_test/input/xyz2 put -q o = $*; dump o -{ - "x": 3, - "y": 4, - "z": 5 -} -{ - "x": 6, - "y": 7, - "u": 8 -} - -mlr --from ./reg_test/input/xyz2 put -q o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} -{ - "a": 1, - "b": { - "x": 8, - "y": 9 - }, - "c": 3 -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; o = @a; dump o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; o = @b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; o = @c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @a = 1; o = @*; dump o -{ - "a": 1 -} -{ - "a": 1 -} - -mlr --from ./reg_test/input/xyz2 put -q @b[1] = 2; o = @*; dump o -{ - "b": { - "1": 2 - } -} -{ - "b": { - "1": 2 - } -} - -mlr --from ./reg_test/input/xyz2 put -q @c[1][2] = 3; o = @*; dump o -{ - "c": { - "1": { - "2": 3 - } - } -} -{ - "c": { - "1": { - "2": 3 - } - } -} - -mlr --from ./reg_test/input/xyz2 put -q a = 1; o = a; dump o -1 -1 - -mlr --from ./reg_test/input/xyz2 put -q b[1] = 2; o = b; dump o -{ - "1": 2 -} -{ - "1": 2 -} - -mlr --from ./reg_test/input/xyz2 put -q c[1][2] = 3; o = c; dump o -{ - "1": { - "2": 3 - } -} -{ - "1": { - "2": 3 - } -} - -mlr --from ./reg_test/input/xyz2 put -q func map_valued_func() { return {"a":1,"b":2}} o = map_valued_func(); dump o -{ - "a": 1, - "b": 2 -} -{ - "a": 1, - "b": 2 -} - - -================================================================ -SPLIT/JOIN - -mlr --from ./reg_test/input/abixy-het put -q o = joink($*, ":"); print o -a:b:i:x:y -a:b:i:x:y -aaa:b:i:x:y -a:bbb:i:x:y -a:b:i:xxx:y -a:b:i:x:y -a:b:iii:x:y -a:b:i:x:yyy -aaa:bbb:i:x:y -a:b:i:x:y - -mlr --from ./reg_test/input/abixy-het put -q o = joinv($*, ":"); print o -pan:pan:1:0.3467901443380824:0.7268028627434533 -eks:pan:2:0.7586799647899636:0.5221511083334797 -wye:wye:3:0.20460330576630303:0.33831852551664776 -eks:wye:4:0.38139939387114097:0.13418874328430463 -wye:pan:5:0.5732889198020006:0.8636244699032729 -zee:pan:6:0.5271261600918548:0.49322128674835697 -eks:zee:7:0.6117840605678454:0.1878849191181694 -zee:wye:8:0.5985540091064224:0.976181385699006 -hat:wye:9:0.03144187646093577:0.7495507603507059 -pan:wye:10:0.5026260055412137:0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put -q o = joinkv($*, ":", ";"); print o -a:pan;b:pan;i:1;x:0.3467901443380824;y:0.7268028627434533 -a:eks;b:pan;i:2;x:0.7586799647899636;y:0.5221511083334797 -aaa:wye;b:wye;i:3;x:0.20460330576630303;y:0.33831852551664776 -a:eks;bbb:wye;i:4;x:0.38139939387114097;y:0.13418874328430463 -a:wye;b:pan;i:5;xxx:0.5732889198020006;y:0.8636244699032729 -a:zee;b:pan;i:6;x:0.5271261600918548;y:0.49322128674835697 -a:eks;b:zee;iii:7;x:0.6117840605678454;y:0.1878849191181694 -a:zee;b:wye;i:8;x:0.5985540091064224;yyy:0.976181385699006 -aaa:hat;bbb:wye;i:9;x:0.03144187646093577;y:0.7495507603507059 -a:pan;b:wye;i:10;x:0.5026260055412137;y:0.9526183602969864 - -mlr --from ./reg_test/input/abixy-het put -q o = joink({1:2, "abc":4, 5:"xyz"}, ":"); print o -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 -1:abc:5 - -mlr --from ./reg_test/input/abixy-het put -q o = joinv({1:2, "abc":4, 5:"xyz"}, ":"); print o -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz -2:4:xyz - -mlr --from ./reg_test/input/abixy-het put -q o = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); print o -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz -1:2;abc:4;5:xyz - -mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c" , ","); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitnv("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkv("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:int -b:string 2:int -3:string c:string -a=1,b=2,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c" , ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitnvx("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c ->> -<< -1:string a:string -2:string b:string -3:string c:string -1=a,2=b,3=c - -mlr --from ./reg_test/input/abixy-het put $* = splitkvx("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)} ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c ->> -<< -a:string 1:string -b:string 2:string -3:string c:string -a=1,b=2,3=c - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joink($*, ":"); $* = splitnv(s, ":") -1 a -2 b -3 i -4 x -5 y - -1 a -2 b -3 i -4 x -5 y - -1 aaa -2 b -3 i -4 x -5 y - -1 a -2 bbb -3 i -4 x -5 y - -1 a -2 b -3 i -4 xxx -5 y - -1 a -2 b -3 i -4 x -5 y - -1 a -2 b -3 iii -4 x -5 y - -1 a -2 b -3 i -4 x -5 yyy - -1 aaa -2 bbb -3 i -4 x -5 y - -1 a -2 b -3 i -4 x -5 y - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinv($*, ":"); $* = splitnv(s, ":") -1 pan -2 pan -3 1 -4 0.346790 -5 0.726803 - -1 eks -2 pan -3 2 -4 0.758680 -5 0.522151 - -1 wye -2 wye -3 3 -4 0.204603 -5 0.338319 - -1 eks -2 wye -3 4 -4 0.381399 -5 0.134189 - -1 wye -2 pan -3 5 -4 0.573289 -5 0.863624 - -1 zee -2 pan -3 6 -4 0.527126 -5 0.493221 - -1 eks -2 zee -3 7 -4 0.611784 -5 0.187885 - -1 zee -2 wye -3 8 -4 0.598554 -5 0.976181 - -1 hat -2 wye -3 9 -4 0.031442 -5 0.749551 - -1 pan -2 wye -3 10 -4 0.502626 -5 0.952618 - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv($*, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} -a:string pan:string -b:string pan:string -i:string 1:int -x:string 0.346790:float -y:string 0.726803:float -a pan -b pan -i 1 -x 0.346790 -y 0.726803 -a:string eks:string -b:string pan:string -i:string 2:int -x:string 0.758680:float -y:string 0.522151:float - -a eks -b pan -i 2 -x 0.758680 -y 0.522151 -aaa:string wye:string -b:string wye:string -i:string 3:int -x:string 0.204603:float -y:string 0.338319:float - -aaa wye -b wye -i 3 -x 0.204603 -y 0.338319 -a:string eks:string -bbb:string wye:string -i:string 4:int -x:string 0.381399:float -y:string 0.134189:float - -a eks -bbb wye -i 4 -x 0.381399 -y 0.134189 -a:string wye:string -b:string pan:string -i:string 5:int -xxx:string 0.573289:float -y:string 0.863624:float - -a wye -b pan -i 5 -xxx 0.573289 -y 0.863624 -a:string zee:string -b:string pan:string -i:string 6:int -x:string 0.527126:float -y:string 0.493221:float - -a zee -b pan -i 6 -x 0.527126 -y 0.493221 -a:string eks:string -b:string zee:string -iii:string 7:int -x:string 0.611784:float -y:string 0.187885:float - -a eks -b zee -iii 7 -x 0.611784 -y 0.187885 -a:string zee:string -b:string wye:string -i:string 8:int -x:string 0.598554:float -yyy:string 0.976181:float - -a zee -b wye -i 8 -x 0.598554 -yyy 0.976181 -aaa:string hat:string -bbb:string wye:string -i:string 9:int -x:string 0.031442:float -y:string 0.749551:float - -aaa hat -bbb wye -i 9 -x 0.031442 -y 0.749551 -a:string pan:string -b:string wye:string -i:string 10:int -x:string 0.502626:float -y:string 0.952618:float - -a pan -b wye -i 10 -x 0.502626 -y 0.952618 - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv($*, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} -a:string pan:string -b:string pan:string -i:string 1:string -x:string 0.3467901443380824:string -y:string 0.7268028627434533:string -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 -a:string eks:string -b:string pan:string -i:string 2:string -x:string 0.7586799647899636:string -y:string 0.5221511083334797:string - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 -aaa:string wye:string -b:string wye:string -i:string 3:string -x:string 0.20460330576630303:string -y:string 0.33831852551664776:string - -aaa wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 -a:string eks:string -bbb:string wye:string -i:string 4:string -x:string 0.38139939387114097:string -y:string 0.13418874328430463:string - -a eks -bbb wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 -a:string wye:string -b:string pan:string -i:string 5:string -xxx:string 0.5732889198020006:string -y:string 0.8636244699032729:string - -a wye -b pan -i 5 -xxx 0.5732889198020006 -y 0.8636244699032729 -a:string zee:string -b:string pan:string -i:string 6:string -x:string 0.5271261600918548:string -y:string 0.49322128674835697:string - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 -a:string eks:string -b:string zee:string -iii:string 7:string -x:string 0.6117840605678454:string -y:string 0.1878849191181694:string - -a eks -b zee -iii 7 -x 0.6117840605678454 -y 0.1878849191181694 -a:string zee:string -b:string wye:string -i:string 8:string -x:string 0.5985540091064224:string -yyy:string 0.976181385699006:string - -a zee -b wye -i 8 -x 0.5985540091064224 -yyy 0.976181385699006 -aaa:string hat:string -bbb:string wye:string -i:string 9:string -x:string 0.03144187646093577:string -y:string 0.7495507603507059:string - -aaa hat -bbb wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 -a:string pan:string -b:string wye:string -i:string 10:string -x:string 0.5026260055412137:string -y:string 0.9526183602969864:string - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joink({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":") -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -1 1 -2 abc -3 5 - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinv({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":") -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -1 2 -2 4 -3 xyz - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} -1:string 2:int -abc:string 4:int -5:string xyz:string -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:int -abc:string 4:int -5:string xyz:string - -1 2 -abc 4 -5 xyz - -mlr --oxtab --from ./reg_test/input/abixy-het put s = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)} -1:string 2:string -abc:string 4:string -5:string xyz:string -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz -1:string 2:string -abc:string 4:string -5:string xyz:string - -1 2 -abc 4 -5 xyz - - -================================================================ -MAPSUM/MAPDIFF/MAPEXCEPT - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum(); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff(); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept(); dump o -mlr: Function named "mapexcept" takes at least 1 argument; got 0. - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect(); dump o -mlr: Function named "mapselect" takes at least 1 argument; got 0. - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*); dump o -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}); dump o -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*); dump o -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}); dump o -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*); dump o -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}); dump o -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*, {"a":999}); dump o -{ - "a": 999, - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": 999, - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776, - "a": 999 -} -{ - "a": 999, - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": 999, - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": 999, - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": 999, - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": 999, - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059, - "a": 999 -} -{ - "a": 999, - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}, $*); dump o -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": 999, - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "a": 999, - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*, {"a":999}); dump o -{ - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}, $*); dump o -{ -} -{ -} -{ - "a": 999 -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ - "a": 999 -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*, "a"); dump o -{ - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "b": "pan", - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "b": "zee", - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}, "a"); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept({"a":999}, "nonesuch"); dump o -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*, "a"); dump o -{ - "a": "pan" -} -{ - "a": "eks" -} -{ -} -{ - "a": "eks" -} -{ - "a": "wye" -} -{ - "a": "zee" -} -{ - "a": "eks" -} -{ - "a": "zee" -} -{ -} -{ - "a": "pan" -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "a"); dump o -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} -{ - "a": 999 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "nonesuch"); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum($*, {"a":999}, {"b": 444}); dump o -{ - "a": 999, - "b": 444, - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": 999, - "b": 444, - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "b": 444, - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776, - "a": 999 -} -{ - "a": 999, - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463, - "b": 444 -} -{ - "a": 999, - "b": 444, - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": 999, - "b": 444, - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": 999, - "b": 444, - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": 999, - "b": 444, - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059, - "a": 999, - "b": 444 -} -{ - "a": 999, - "b": 444, - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapsum({"a":999}, $*, {"b": 444}); dump o -{ - "a": "pan", - "b": 444, - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": 444, - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": 999, - "aaa": "wye", - "b": 444, - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463, - "b": 444 -} -{ - "a": "wye", - "b": 444, - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": 444, - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": 444, - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": 444, - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "a": 999, - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059, - "b": 444 -} -{ - "a": "pan", - "b": 444, - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff($*, {"a":999}, {"b": 444}); dump o -{ - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapdiff({"a":999}, $*, {"b": 444}); dump o -{ -} -{ -} -{ - "a": 999 -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ - "a": 999 -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapexcept($*, "a", "b"); dump o -{ - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "aaa": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "bbb": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "i": 5, - "xxx": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "iii": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "i": 8, - "x": 0.5985540091064224, - "yyy": 0.976181385699006 -} -{ - "aaa": "hat", - "bbb": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "b", "nonesuch"); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect($*, "a", "b"); dump o -{ - "a": "pan", - "b": "pan" -} -{ - "a": "eks", - "b": "pan" -} -{ - "b": "wye" -} -{ - "a": "eks" -} -{ - "a": "wye", - "b": "pan" -} -{ - "a": "zee", - "b": "pan" -} -{ - "a": "eks", - "b": "zee" -} -{ - "a": "zee", - "b": "wye" -} -{ -} -{ - "a": "pan", - "b": "wye" -} - -mlr --from ./reg_test/input/abixy-het put -q o = mapselect({"a":999}, "b", "nonesuch"); dump o -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} -{ -} - - -================================================================ -EXTENDED TYPEOF - -mlr --from ./reg_test/input/xyz2 --oxtab put - a = {1:2, 3:4}; - b = {1: {2:3, 4:5}}; - @c = {1:2, 3:4}; - @d = {1: {2:3, 4:5}}; - - $ta = typeof(a); - $ta1 = typeof(a[1]); - $ta7 = typeof(a[7]); - - $tb = typeof(b); - $tb1 = typeof(b[1]); - $tb7 = typeof(b[7]); - - $tc = typeof(@c); - $tc1 = typeof(@c[1]); - $tc7 = typeof(@c[7]); - - $td = typeof(@d); - $td1 = typeof(@d[1]); - $td7 = typeof(@d[7]); - - $te1 = typeof(6); - $te2 = typeof({6:4}); - - $tsa = typeof($a); - $tsx = typeof($x); - $ts = typeof($*); - -x 3 -y 4 -z 5 -ta map -ta1 int -ta7 absent -tb map -tb1 map -tb7 absent -tc map -tc1 int -tc7 absent -td map -td1 map -td7 absent -te1 int -te2 map -tsa absent -tsx int -ts map - -x 6 -y 7 -u 8 -ta map -ta1 int -ta7 absent -tb map -tb1 map -tb7 absent -tc map -tc1 int -tc7 absent -td map -td1 map -td7 absent -te1 int -te2 map -tsa absent -tsx int -ts map - - -================================================================ -HASKEY - -mlr --from ./reg_test/input/abixy-het put $haskeya = haskey($*, "a") -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,haskeya=true -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,haskeya=true -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,haskeya=false -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,haskeya=true -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,haskeya=true -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,haskeya=true -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,haskeya=true -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,haskeya=true -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,haskeya=false -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,haskeya=true - -mlr --from ./reg_test/input/abixy-het put $haskey3 = haskey($*, 3) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,haskey3=false -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,haskey3=false -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,haskey3=false -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,haskey3=false -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,haskey3=false -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,haskey3=false -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,haskey3=false -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,haskey3=false -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,haskey3=false -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,haskey3=false - -mlr --from ./reg_test/input/xyz2 put $haskeya = haskey({3:4}, "a") -x=3,y=4,z=5,haskeya=false -x=6,y=7,u=8,haskeya=false - -mlr --from ./reg_test/input/xyz2 put $haskey3 = haskey({3:4}, 3) -x=3,y=4,z=5,haskey3=true -x=6,y=7,u=8,haskey3=true - -mlr --from ./reg_test/input/xyz2 put $haskey3 = haskey({3:4}, 4) -x=3,y=4,z=5,haskey3=false -x=6,y=7,u=8,haskey3=false - -mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskeya = haskey(o, "a") -x=3,y=4,z=5,haskeya=false -x=6,y=7,u=8,haskeya=false - -mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskey3 = haskey(o, 3) -x=3,y=4,z=5,haskey3=true -x=6,y=7,u=8,haskey3=true - -mlr --from ./reg_test/input/xyz2 put o = {3:4}; $haskey3 = haskey(o, 4) -x=3,y=4,z=5,haskey3=false -x=6,y=7,u=8,haskey3=false - -mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskeya = haskey(@o, "a") -x=3,y=4,z=5,haskeya=false -x=6,y=7,u=8,haskeya=false - -mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskey3 = haskey(@o, 3) -x=3,y=4,z=5,haskey3=true -x=6,y=7,u=8,haskey3=true - -mlr --from ./reg_test/input/xyz2 put @o = {3:4}; $haskey3 = haskey(@o, 4) -x=3,y=4,z=5,haskey3=false -x=6,y=7,u=8,haskey3=false - -mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskeya = haskey(@o, "a") -x=3,y=4,z=5,haskeya=(error) -x=6,y=7,u=8,haskeya=(error) - -mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskey3 = haskey(@o, 3) -x=3,y=4,z=5,haskey3=(error) -x=6,y=7,u=8,haskey3=(error) - -mlr --from ./reg_test/input/xyz2 put o = "3:4"; $haskey3 = haskey(@o, 4) -x=3,y=4,z=5,haskey3=(error) -x=6,y=7,u=8,haskey3=(error) - - -================================================================ -LENGTH/DEPTH/LEAFCOUNT - -mlr --from ./reg_test/input/abixy-het put $length = length($a) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,length=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,length=1 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,length=1 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,length=1 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,length=1 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,length=1 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,length=1 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,length=1 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,length=1 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,length=1 - -mlr --from ./reg_test/input/abixy-het put $length = length($*) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,length=5 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,length=5 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,length=5 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,length=5 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,length=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,length=5 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,length=5 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,length=5 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,length=5 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,length=5 - -mlr --from ./reg_test/input/xyz2 put $length= length({3:4, 5:{6:7}, 8:{9:{10:11}}}) -x=3,y=4,z=5,length=3 -x=6,y=7,u=8,length=3 - -mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(o) -x=3,y=4,z=5,length=3 -x=6,y=7,u=8,length=3 - -mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(@o) -x=3,y=4,z=5,length=3 -x=6,y=7,u=8,length=3 - -mlr --from ./reg_test/input/abixy-het put $depth = depth($a) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,depth=0 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,depth=0 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,depth=0 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,depth=0 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,depth=0 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,depth=0 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,depth=0 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,depth=0 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,depth=0 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,depth=0 - -mlr --from ./reg_test/input/abixy-het put $depth = depth($*) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,depth=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,depth=1 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,depth=1 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,depth=1 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,depth=1 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,depth=1 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,depth=1 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,depth=1 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,depth=1 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,depth=1 - -mlr --from ./reg_test/input/xyz2 put $depth= depth({3:4, 5:{6:7}, 8:{9:{10:11}}}) -x=3,y=4,z=5,depth=3 -x=6,y=7,u=8,depth=3 - -mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(o) -x=3,y=4,z=5,depth=3 -x=6,y=7,u=8,depth=3 - -mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(@o) -x=3,y=4,z=5,depth=3 -x=6,y=7,u=8,depth=3 - -mlr --from ./reg_test/input/abixy-het put $leafcount = leafcount($a) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,leafcount=1 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,leafcount=1 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,leafcount=1 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,leafcount=1 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,leafcount=1 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,leafcount=1 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,leafcount=1 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,leafcount=1 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,leafcount=1 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,leafcount=1 - -mlr --from ./reg_test/input/abixy-het put $leafcount = leafcount($*) -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,leafcount=5 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,leafcount=5 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,leafcount=5 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,leafcount=5 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,leafcount=5 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,leafcount=5 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,leafcount=5 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,leafcount=5 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,leafcount=5 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,leafcount=5 - -mlr --from ./reg_test/input/xyz2 put $leafcount= leafcount({3:4, 5:{6:7}, 8:{9:{10:11}}}) -x=3,y=4,z=5,leafcount=3 -x=6,y=7,u=8,leafcount=3 - -mlr --from ./reg_test/input/xyz2 put o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(o) -x=3,y=4,z=5,leafcount=3 -x=6,y=7,u=8,leafcount=3 - -mlr --from ./reg_test/input/xyz2 put @o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(@o) -x=3,y=4,z=5,leafcount=3 -x=6,y=7,u=8,leafcount=3 - - -================================================================ -MAPVAR EMIT - -mlr -n put end { - @a[2][3] = 4; - b[2][3] = 8; - emit (@a, b, {2:{3:12}}); - emitp (@a, b, {2:{3:12}}); - emit {}; - emit (@a, b, {2:{3:12}}), "t"; - emitp (@a, b, {2:{3:12}}), "t"; - emit {}; - emit (@a, b, {2:{3:12}}), "t", "u"; - emitp (@a, b, {2:{3:12}}), "t", "u"; -} -3=12 -a:2:3=4,b:2:3=8,_:2:3=12 - -t=2,3=12 -t=2,a:3=4,b:3=8,_:3=12 - -t=2,u=3,a=4,b=8,_=12 -t=2,u=3,a=4,b=8,_=12 - -mlr -n put end { - @a[2][3] = 4; - b[2][3] = 8; - emitp (@a, b, {2:{3:12}}); - emit (@a, b, {2:{3:12}}); - emit {}; - emitp (@a, b, {2:{3:12}}), "t"; - emit (@a, b, {2:{3:12}}), "t"; - emit {}; - emitp (@a, b, {2:{3:12}}), "t", "u"; - emit (@a, b, {2:{3:12}}), "t", "u"; -} -a:2:3=4,b:2:3=8,_:2:3=12 -3=12 - -t=2,a:3=4,b:3=8,_:3=12 -t=2,3=12 - -t=2,u=3,a=4,b=8,_=12 -t=2,u=3,a=4,b=8,_=12 - - -================================================================ -MAPVAR FOR-LOOPS - -mlr --from ./reg_test/input/abixy put -q - func f() { - return { - "a:".$a: $i, - "b:".$b: $y, - NR: NF, - } - } - for (k,v in f()) { - print "k=".k; - print "v=".v; - } - print - -k=a:pan -v=1 -k=b:pan -v=0.726803 -k=1 -v=5 - -k=a:eks -v=2 -k=b:pan -v=0.522151 -k=2 -v=5 - -k=a:wye -v=3 -k=b:wye -v=0.338319 -k=3 -v=5 - -k=a:eks -v=4 -k=b:wye -v=0.134189 -k=4 -v=5 - -k=a:wye -v=5 -k=b:pan -v=0.863624 -k=5 -v=5 - -k=a:zee -v=6 -k=b:pan -v=0.493221 -k=6 -v=5 - -k=a:eks -v=7 -k=b:zee -v=0.187885 -k=7 -v=5 - -k=a:zee -v=8 -k=b:wye -v=0.976181 -k=8 -v=5 - -k=a:hat -v=9 -k=b:wye -v=0.749551 -k=9 -v=5 - -k=a:pan -v=10 -k=b:wye -v=0.952618 -k=10 -v=5 - - - -================================================================ -TRAILING COMMAS - -mlr --from ./reg_test/input/abixy put - $* = { - "a": $a, - "x": $x, - } - -a=pan,x=0.346790 -a=eks,x=0.758680 -a=wye,x=0.204603 -a=eks,x=0.381399 -a=wye,x=0.573289 -a=zee,x=0.527126 -a=eks,x=0.611784 -a=zee,x=0.598554 -a=hat,x=0.031442 -a=pan,x=0.502626 - -mlr --from ./reg_test/input/xyz345 put func f(): int { return 999 } $y=f() -x=3,y=999,z=5 - -mlr --from ./reg_test/input/xyz345 put func f(): int { return 999 } $y=f(,) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'func f(): int { return 999 } $y=f(,)' - -mlr --from ./reg_test/input/xyz345 put func f(a,): int { return a*2 } $y=f(NR) -x=3,y=2,z=5 - -mlr --from ./reg_test/input/xyz345 put func f(a,,): int { return a*2 } $y=f(NR) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'func f(a,,): int { return a*2 } $y=f(NR)' - -mlr --from ./reg_test/input/xyz345 put func f(int a,): int { return a*2 } $y=f(NR) -x=3,y=2,z=5 - -mlr --from ./reg_test/input/xyz345 put func f(int a,,): int { return a*2 } $y=f(NR) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'func f(int a,,): int { return a*2 } $y=f(NR)' - -mlr --from ./reg_test/input/xyz345 put subr s() { print 999 } call s() -999 -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put subr s() { print 999 } call s(,) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'subr s() { print 999 } call s(,)' - -mlr --from ./reg_test/input/xyz345 put subr s(a,) { print a*2 } call s(NR) -2 -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put subr s(a,,) { print a*2 } call s(NR) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'subr s(a,,) { print a*2 } call s(NR)' - -mlr --from ./reg_test/input/xyz345 put subr s(int a,) { print a*2 } call s(NR) -2 -x=3,y=4,z=5 - -mlr --from ./reg_test/input/xyz345 put subr s(int a,,) { print a*2 } call s(NR) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of 'subr s(int a,,) { print a*2 } call s(NR)' - -mlr --from ./reg_test/input/xyz345 put $y=log10($x) -x=3,y=0.477121,z=5 - -mlr --from ./reg_test/input/xyz345 put $y=log10($x,) -x=3,y=0.477121,z=5 - -mlr --from ./reg_test/input/xyz345 put $y=log10($x,,) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of '$y=log10($x,,)' - -mlr --from ./reg_test/input/xyz345 put $y=log10(,$x) -mlr DSL: syntax error at "," -mlr put: syntax error on DSL parse of '$y=log10(,$x)' - -mlr --from ./reg_test/input/xyz345 put $y=pow($x,2) -x=3,y=9.000000,z=5 - -mlr --from ./reg_test/input/xyz345 put $y=pow($x,2,) -x=3,y=9.000000,z=5 - - -================================================================ -MAPVARS/UDFs/SUBROUTINES - -mlr --from ./reg_test/input/abixy put - func f(m) { - dump m; - sum = 0; - for (k, v in m) { - sum += k - } - return sum - } - @v[$i] = $a; - $y = f(@v) - -{ - "1": "pan" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=1 -{ - "1": "pan", - "2": "eks" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=3 -{ - "1": "pan", - "2": "eks", - "3": "wye" -} -a=wye,b=wye,i=3,x=0.20460330576630303,y=6 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks" -} -a=eks,b=wye,i=4,x=0.38139939387114097,y=10 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye" -} -a=wye,b=pan,i=5,x=0.5732889198020006,y=15 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=21 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks" -} -a=eks,b=zee,i=7,x=0.6117840605678454,y=28 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee" -} -a=zee,b=wye,i=8,x=0.5985540091064224,y=36 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee", - "9": "hat" -} -a=hat,b=wye,i=9,x=0.03144187646093577,y=45 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee", - "9": "hat", - "10": "pan" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=55 - -mlr --from ./reg_test/input/abixy put - subr s(m) { - dump m; - sum = 0; - for (k, v in m) { - sum += k - } - @sum = sum; - } - @v[$i] = $a; - call s(@v); - $y = @sum; - -{ - "1": "pan" -} -a=pan,b=pan,i=1,x=0.3467901443380824,y=1 -{ - "1": "pan", - "2": "eks" -} -a=eks,b=pan,i=2,x=0.7586799647899636,y=3 -{ - "1": "pan", - "2": "eks", - "3": "wye" -} -a=wye,b=wye,i=3,x=0.20460330576630303,y=6 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks" -} -a=eks,b=wye,i=4,x=0.38139939387114097,y=10 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye" -} -a=wye,b=pan,i=5,x=0.5732889198020006,y=15 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee" -} -a=zee,b=pan,i=6,x=0.5271261600918548,y=21 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks" -} -a=eks,b=zee,i=7,x=0.6117840605678454,y=28 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee" -} -a=zee,b=wye,i=8,x=0.5985540091064224,y=36 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee", - "9": "hat" -} -a=hat,b=wye,i=9,x=0.03144187646093577,y=45 -{ - "1": "pan", - "2": "eks", - "3": "wye", - "4": "eks", - "5": "wye", - "6": "zee", - "7": "eks", - "8": "zee", - "9": "hat", - "10": "pan" -} -a=pan,b=wye,i=10,x=0.5026260055412137,y=55 - -mlr --from ./reg_test/input/abixy-het put func f(x) {return {"a":x,"b":x**2}}; map o = f($x); $* = o -a=0.346790,b=0.120263 -a=0.758680,b=0.575595 -a=0.204603,b=0.041863 -a=0.381399,b=0.145465 -a=,b= -a=0.527126,b=0.277862 -a=0.611784,b=0.374280 -a=0.598554,b=0.358267 -a=0.031442,b=0.000989 -a=0.502626,b=0.252633 - -mlr --from ./reg_test/input/abixy-het put -q func f(x) {return x**2}; var z = f($x); dump z -0.120263 -0.575595 -0.041863 -0.145465 - -0.277862 -0.374280 -0.358267 -0.000989 -0.252633 - -mlr --from ./reg_test/input/abixy-het put -q func f(x) {map m = {NR:x};return m}; z = f($y); dump z -{ - "1": 0.726803 -} -{ - "2": 0.522151 -} -{ - "3": 0.338319 -} -{ - "4": 0.134189 -} -{ - "5": 0.863624 -} -{ - "6": 0.493221 -} -{ - "7": 0.187885 -} -{ - "8": -} -{ - "9": 0.749551 -} -{ - "10": 0.952618 -} - -mlr --from ./reg_test/input/abixy put - func f(int x): map { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($x) - -mlr: int type assertion for variable x unmet by value 0.346790 with type float. - -mlr --from ./reg_test/input/abixy put - func f(int x): map { - if (NR==200) { - return 2 - } else { - return {} - } - } - $y=f($i) - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put - func f(int x): map { - if (NR==200) { - return 2 - } else { - return {} - } - } - $y=f($x) - -mlr: int type assertion for variable x unmet by value 0.346790 with type float. - -mlr --from ./reg_test/input/abixy put - func f(int x): var { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($i) - -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=2 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --from ./reg_test/input/abixy put - func f(int x): var { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($x) - -mlr: int type assertion for variable x unmet by value 0.346790 with type float. - -mlr --from ./reg_test/input/abixy put - func f(x): int { - # fall-through return value is absent-null - } - $y=f($x) - -mlr: function f returned type absent, not matching typedecl int. - -mlr --from ./reg_test/input/abixy put - int a = 1; - var b = a[2]; # cannot index localvar declared non-map - -mlr: int type assertion for variable a unmet on read. - -mlr --oxtab --from ./reg_test/input/abixy-het put - $* = mapdiff( - mapsum($*, {"a": "newval"}), - {"b": "nonesuch"}, - ) - -a newval -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a newval -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -aaa wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 -a newval - -a newval -bbb wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a newval -i 5 -xxx 0.5732889198020006 -y 0.8636244699032729 - -a newval -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a newval -iii 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a newval -i 8 -x 0.5985540091064224 -yyy 0.976181385699006 - -aaa hat -bbb wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 -a newval - -a newval -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - - -================================================================ -NUMBER FORMATTING - -mlr --opprint stats1 -a sum -f x ./reg_test/input/ofmt.dat -x_sum -6 - -mlr --ofmt %.3lf --opprint stats1 -a sum -f x ./reg_test/input/ofmt.dat -x_sum -6 - -mlr --opprint --ofmt %.3lf stats1 -a sum -f x ./reg_test/input/ofmt.dat -x_sum -6 - - -================================================================ -IMPLICIT-HEADER-CSV INPUT - -mlr --irs crlf --icsvlite --ifs , --opprint cut -x -f b/ ./reg_test/input/multi-sep.csv-crlf -a/ i/ x/ y/ -wye/ 0/ 0.641593543645736508/ 0.262688053894177098 -eks/ 1/ 0.827614412562742041/ 0.715431942006308552 -zee/ 2/ 0.923068348748175560/ 0.009737410587136359 -zee/ 3/ 0.000047786161325772/ 0.803142013402256216 -zee/ 4/ 0.676537984365847889/ 0.573903236805416328 - -mlr --irs crlf --implicit-csv-header --icsvlite --ifs , --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf -1 3 4 5 -a/ i/ x/ y/ -wye/ 0/ 0.641593543645736508/ 0.262688053894177098 -eks/ 1/ 0.827614412562742041/ 0.715431942006308552 -zee/ 2/ 0.923068348748175560/ 0.009737410587136359 -zee/ 3/ 0.000047786161325772/ 0.803142013402256216 -zee/ 4/ 0.676537984365847889/ 0.573903236805416328 - -mlr --irs crlf --icsvlite --ifs /, --opprint cut -x -f b ./reg_test/input/multi-sep.csv-crlf -a i x y/ -wye 0 0.641593543645736508 0.262688053894177098 -eks 1 0.827614412562742041 0.715431942006308552 -zee 2 0.923068348748175560 0.009737410587136359 -zee 3 0.000047786161325772 0.803142013402256216 -zee 4 0.676537984365847889 0.573903236805416328 - -mlr --irs crlf --implicit-csv-header --icsvlite --ifs /, --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf -1 3 4 5 -a i x y/ -wye 0 0.641593543645736508 0.262688053894177098 -eks 1 0.827614412562742041 0.715431942006308552 -zee 2 0.923068348748175560 0.009737410587136359 -zee 3 0.000047786161325772 0.803142013402256216 -zee 4 0.676537984365847889 0.573903236805416328 - -mlr --icsv --ifs , --opprint cut -x -f b/ ./reg_test/input/multi-sep.csv-crlf -a/ i/ x/ y/ -wye/ 0/ 0.641593543645736508/ 0.262688053894177098 -eks/ 1/ 0.827614412562742041/ 0.715431942006308552 -zee/ 2/ 0.923068348748175560/ 0.009737410587136359 -zee/ 3/ 0.000047786161325772/ 0.803142013402256216 -zee/ 4/ 0.676537984365847889/ 0.573903236805416328 - -mlr --implicit-csv-header --icsv --ifs , --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf -1 3 4 5 -a/ i/ x/ y/ -wye/ 0/ 0.641593543645736508/ 0.262688053894177098 -eks/ 1/ 0.827614412562742041/ 0.715431942006308552 -zee/ 2/ 0.923068348748175560/ 0.009737410587136359 -zee/ 3/ 0.000047786161325772/ 0.803142013402256216 -zee/ 4/ 0.676537984365847889/ 0.573903236805416328 - -mlr --icsv --ifs /, --opprint cut -x -f b ./reg_test/input/multi-sep.csv-crlf -a i x y/ -wye 0 0.641593543645736508 0.262688053894177098 -eks 1 0.827614412562742041 0.715431942006308552 -zee 2 0.923068348748175560 0.009737410587136359 -zee 3 0.000047786161325772 0.803142013402256216 -zee 4 0.676537984365847889 0.573903236805416328 - -mlr --implicit-csv-header --icsv --ifs /, --opprint cut -x -f 2 ./reg_test/input/multi-sep.csv-crlf -1 3 4 5 -a i x y/ -wye 0 0.641593543645736508 0.262688053894177098 -eks 1 0.827614412562742041 0.715431942006308552 -zee 2 0.923068348748175560 0.009737410587136359 -zee 3 0.000047786161325772 0.803142013402256216 -zee 4 0.676537984365847889 0.573903236805416328 - -mlr --csv -N reorder -f 1,3,2,5,4 ./reg_test/input/multi-sep.csv-crlf -a/,i/,b/,y/,x/ -wye/,0/,eks/,0.262688053894177098,0.641593543645736508/ -eks/,1/,zee/,0.715431942006308552,0.827614412562742041/ -zee/,2/,zee/,0.009737410587136359,0.923068348748175560/ -zee/,3/,pan/,0.803142013402256216,0.000047786161325772/ -zee/,4/,hat/,0.573903236805416328,0.676537984365847889/ - -mlr --csv -N reorder -f 5,4,3,2,1 ./reg_test/input/multi-sep.csv-crlf -y/,x/,i/,b/,a/ -0.262688053894177098,0.641593543645736508/,0/,eks/,wye/ -0.715431942006308552,0.827614412562742041/,1/,zee/,eks/ -0.009737410587136359,0.923068348748175560/,2/,zee/,zee/ -0.803142013402256216,0.000047786161325772/,3/,pan/,zee/ -0.573903236805416328,0.676537984365847889/,4/,hat/,zee/ - -mlr --from ./reg_test/input/reorder.dkvp reorder -f x,y -b u -s=1,t=2,x=6,y=7,u=3,v=4,w=5,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,v -b x -s=1,t=2,w=5,u=3,v=4,x=6,y=7,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f z,w,s -b v -t=2,u=3,z=8,w=5,s=1,v=4,x=6,y=7 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,v -b nonesuch -s=1,t=2,u=3,v=4,w=5,x=6,y=7,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,nonesuch -b x -s=1,t=2,v=4,w=5,u=3,x=6,y=7,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f x,y -a u -s=1,t=2,u=3,x=6,y=7,v=4,w=5,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,v -a x -s=1,t=2,w=5,x=6,u=3,v=4,y=7,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f z,w,s -a v -t=2,u=3,v=4,z=8,w=5,s=1,x=6,y=7 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,v -a nonesuch -s=1,t=2,u=3,v=4,w=5,x=6,y=7,z=8 - -mlr --from ./reg_test/input/reorder.dkvp reorder -f u,nonesuch -a x -s=1,t=2,v=4,w=5,x=6,u=3,y=7,z=8 - -mlr --icsv --otsv -N cat -a b c -1 2 3 -4 5 6 - -mlr --ixtab --opprint -N cat -1 2 3 -4 5 6 - -mlr --icsv --pprint -N cat -1,2,3 -4,5,6 - - -================================================================ -HET-CSV INPUT - -mlr --icsvlite --odkvp cat ./reg_test/input/a.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/b.csv -d=5,e=6,f=7 - -mlr --icsvlite --odkvp cat ./reg_test/input/c.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --icsvlite --odkvp cat ./reg_test/input/d.csv -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --icsvlite --odkvp cat ./reg_test/input/e.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/f.csv - -mlr --icsvlite --odkvp cat ./reg_test/input/g.csv - -mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/a.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/b.csv ./reg_test/input/b.csv -d=5,e=6,f=7 -d=5,e=6,f=7 - -mlr --icsvlite --odkvp cat ./reg_test/input/c.csv ./reg_test/input/c.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --icsvlite --odkvp cat ./reg_test/input/d.csv ./reg_test/input/d.csv -h=3,i=4,j=5 -m=8,n=9,o=10 -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --icsvlite --odkvp cat ./reg_test/input/e.csv ./reg_test/input/e.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/f.csv ./reg_test/input/f.csv - -mlr --icsvlite --odkvp cat ./reg_test/input/g.csv ./reg_test/input/g.csv - -mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/b.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -d=5,e=6,f=7 - -mlr --icsvlite --odkvp cat ./reg_test/input/b.csv ./reg_test/input/c.csv -d=5,e=6,f=7 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --icsvlite --odkvp cat ./reg_test/input/c.csv ./reg_test/input/d.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --icsvlite --odkvp cat ./reg_test/input/d.csv ./reg_test/input/e.csv -h=3,i=4,j=5 -m=8,n=9,o=10 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/e.csv ./reg_test/input/f.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp cat ./reg_test/input/f.csv ./reg_test/input/g.csv - -mlr --icsvlite --odkvp cat ./reg_test/input/a.csv ./reg_test/input/b.csv ./reg_test/input/c.csv ./reg_test/input/d.csv ./reg_test/input/e.csv ./reg_test/input/f.csv ./reg_test/input/g.csv -a=1,b=2,c=3 -a=4,b=5,c=6 -d=5,e=6,f=7 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -h=3,i=4,j=5 -m=8,n=9,o=10 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --icsvlite --odkvp tac ./reg_test/input/het.csv -resource=/some/other/path,loadsec=0.97,ok=false -record_count=150,resource=/path/to/second/file -resource=/path/to/second/file,loadsec=0.32,ok=true -record_count=100,resource=/path/to/file -resource=/path/to/file,loadsec=0.45,ok=true - -mlr --headerless-csv-output --csvlite tac ./reg_test/input/a.csv -4,5,6 -1,2,3 - -mlr --headerless-csv-output --csvlite tac ./reg_test/input/c.csv -7,8,9 -4,5,6 -1,2,3 - -mlr --headerless-csv-output --csvlite tac ./reg_test/input/a.csv ./reg_test/input/c.csv -7,8,9 -4,5,6 -1,2,3 -4,5,6 -1,2,3 - -mlr --headerless-csv-output --csvlite tac ./reg_test/input/het.csv -/some/other/path,0.97,false - -150,/path/to/second/file - -/path/to/second/file,0.32,true - -100,/path/to/file - -/path/to/file,0.45,true - -mlr --headerless-csv-output --csvlite group-like ./reg_test/input/het.csv -/path/to/file,0.45,true -/path/to/second/file,0.32,true -/some/other/path,0.97,false - -100,/path/to/file -150,/path/to/second/file - - -================================================================ -HET-PPRINT INPUT - -mlr --ipprint --odkvp cat ./reg_test/input/a.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/b.pprint -d=5,e=6,f=7 - -mlr --ipprint --odkvp cat ./reg_test/input/c.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --ipprint --odkvp cat ./reg_test/input/d.pprint -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --ipprint --odkvp cat ./reg_test/input/e.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/f.pprint - -mlr --ipprint --odkvp cat ./reg_test/input/g.pprint - -mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/a.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/b.pprint ./reg_test/input/b.pprint -d=5,e=6,f=7 -d=5,e=6,f=7 - -mlr --ipprint --odkvp cat ./reg_test/input/c.pprint ./reg_test/input/c.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --ipprint --odkvp cat ./reg_test/input/d.pprint ./reg_test/input/d.pprint -h=3,i=4,j=5 -m=8,n=9,o=10 -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --ipprint --odkvp cat ./reg_test/input/e.pprint ./reg_test/input/e.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/f.pprint ./reg_test/input/f.pprint - -mlr --ipprint --odkvp cat ./reg_test/input/g.pprint ./reg_test/input/g.pprint - -mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/b.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -d=5,e=6,f=7 - -mlr --ipprint --odkvp cat ./reg_test/input/b.pprint ./reg_test/input/c.pprint -d=5,e=6,f=7 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 - -mlr --ipprint --odkvp cat ./reg_test/input/c.pprint ./reg_test/input/d.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -h=3,i=4,j=5 -m=8,n=9,o=10 - -mlr --ipprint --odkvp cat ./reg_test/input/d.pprint ./reg_test/input/e.pprint -h=3,i=4,j=5 -m=8,n=9,o=10 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/e.pprint ./reg_test/input/f.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --ipprint --odkvp cat ./reg_test/input/f.pprint ./reg_test/input/g.pprint - -mlr --ipprint --odkvp cat ./reg_test/input/a.pprint ./reg_test/input/b.pprint ./reg_test/input/c.pprint ./reg_test/input/d.pprint ./reg_test/input/e.pprint ./reg_test/input/f.pprint ./reg_test/input/g.pprint -a=1,b=2,c=3 -a=4,b=5,c=6 -d=5,e=6,f=7 -a=1,b=2,c=3 -a=4,b=5,c=6 -a=7,b=8,c=9 -h=3,i=4,j=5 -m=8,n=9,o=10 -a=1,b=2,c=3 -a=4,b=5,c=6 - - -================================================================ -NULL-FIELD INPUT - -mlr --icsvlite --odkvp cat ./reg_test/input/null-fields.csv -a=1,b=2,c=3,d=4,e=5 -a=6,b=,c=,d=,e=10 -a=,b=,c=,d=11,e=12 -a=13,b=14,c=,d=,e= -a=,b=,c=,d=,e= - -mlr --inidx --ifs comma --odkvp cat ./reg_test/input/null-fields.nidx -1=a,2=b,3=c,4=d,5=e -1=f,2=,3=,4=,5=g -1=,2=,3=,4=h,5=i -1=j,2=k,3=,4=,5= -1=,2=,3=,4=,5= - -mlr --idkvp --oxtab cat ./reg_test/input/missings.dkvp -a 1 -b 2 -c 3 -d 4 -e 5 -f 6 - -1 a -b -x 4 -c 3 -5 d -6 e -7 f - -1 a -b -x 4 -c 3 -5 d -6 e -f 6 - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x ./reg_test/input/nullvals.dkvp -x_sum 9 -x_min 1 -x_max 5 -x_antimode 1 -x_mode 1 - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y ./reg_test/input/nullvals.dkvp -y_sum 12 -y_min 2 -y_max 6 -y_antimode 2 -y_mode 2 - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z ./reg_test/input/nullvals.dkvp -z_sum 0 -z_min -z_max -z_antimode -z_mode - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z ./reg_test/input/nullvals.dkvp -x_sum 9 -x_min 1 -x_max 5 -x_antimode 1 -x_mode 1 -y_sum 12 -y_min 2 -y_max 6 -y_antimode 2 -y_mode 2 -z_sum 0 -z_min -z_max -z_antimode -z_mode - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x -g a ./reg_test/input/nullvals.dkvp -a b -x_sum 9 -x_min 1 -x_max 5 -x_antimode 1 -x_mode 1 - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f y -g a ./reg_test/input/nullvals.dkvp -a b -y_sum 12 -y_min 2 -y_max 6 -y_antimode 2 -y_mode 2 - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f z -g a ./reg_test/input/nullvals.dkvp -a b -z_sum 0 -z_min -z_max -z_antimode -z_mode - -mlr --oxtab stats1 -a sum,min,max,antimode,mode -f x,y,z -g a ./reg_test/input/nullvals.dkvp -a b -x_sum 9 -x_min 1 -x_max 5 -x_antimode 1 -x_mode 1 -y_sum 12 -y_min 2 -y_max 6 -y_antimode 2 -y_mode 2 -z_sum 0 -z_min -z_max -z_antimode -z_mode - -mlr --opprint merge-fields -a sum,min,max,antimode,mode -f x,y,z -o xyz ./reg_test/input/nullvals.dkvp -a xyz_sum xyz_min xyz_max xyz_antimode xyz_mode -b 3 1 2 1 1 -b 7 3 4 3 3 -b 5 5 5 5 5 -b 6 6 6 6 6 -b 0 - - - - - -mlr --opprint merge-fields -a sum,min,max,antimode,mode -r x,y,z -o xyz ./reg_test/input/nullvals.dkvp -a xyz_sum xyz_min xyz_max xyz_antimode xyz_mode -b 3 1 2 1 1 -b 7 3 4 3 3 -b 5 5 5 5 5 -b 6 6 6 6 6 -b 0 - - - - - -mlr --opprint merge-fields -a sum,min,max,antimode,mode -c x,y,z ./reg_test/input/nullvals.dkvp -a _sum _min _max _antimode _mode -b 3 1 2 1 1 -b 7 3 4 3 3 -b 5 5 5 5 5 -b 6 6 6 6 6 -b 0 - - - - - -mlr --oxtab stats2 -a cov -f x,y ./reg_test/input/nullvals.dkvp -x_y_cov 2.000000 - -mlr --oxtab stats2 -a cov -f x,z ./reg_test/input/nullvals.dkvp - -mlr --oxtab stats2 -a cov -f y,z ./reg_test/input/nullvals.dkvp - -mlr --oxtab stats2 -a cov -f x,y -g a ./reg_test/input/nullvals.dkvp -a b -x_y_cov 2.000000 - -mlr --oxtab stats2 -a cov -f x,z -g a ./reg_test/input/nullvals.dkvp -a b - -mlr --oxtab stats2 -a cov -f y,z -g a ./reg_test/input/nullvals.dkvp -a b - -mlr --opprint top -n 5 -f x ./reg_test/input/nullvals.dkvp -top_idx x_top -1 5 -2 3 -3 1 -4 - -5 - - -mlr --opprint top -n 5 -f y ./reg_test/input/nullvals.dkvp -top_idx y_top -1 6 -2 4 -3 2 -4 - -5 - - -mlr --opprint top -n 5 -f z ./reg_test/input/nullvals.dkvp -top_idx z_top -1 - -2 - -3 - -4 - -5 - - -mlr --opprint top -n 5 -f x,y,z ./reg_test/input/nullvals.dkvp -top_idx x_top y_top z_top -1 5 6 - -2 3 4 - -3 1 2 - -4 - - - -5 - - - - -mlr --opprint top -n 5 -f x -g a ./reg_test/input/nullvals.dkvp -a top_idx x_top -b 1 5 -b 2 3 -b 3 1 -b 4 - -b 5 - - -mlr --opprint top -n 5 -f y -g a ./reg_test/input/nullvals.dkvp -a top_idx y_top -b 1 6 -b 2 4 -b 3 2 -b 4 - -b 5 - - -mlr --opprint top -n 5 -f z -g a ./reg_test/input/nullvals.dkvp -a top_idx z_top -b 1 - -b 2 - -b 3 - -b 4 - -b 5 - - -mlr --opprint top -n 5 -f x,y,z -g a ./reg_test/input/nullvals.dkvp -a top_idx x_top y_top z_top -b 1 5 6 - -b 2 3 4 - -b 3 1 2 - -b 4 - - - -b 5 - - - - -mlr --opprint top -a -n 5 -f x ./reg_test/input/nullvals.dkvp -a x y z -b 5 - - -b 3 4 - -b 1 2 - - -mlr --opprint top -a -n 5 -f y ./reg_test/input/nullvals.dkvp -a x y z -b - 6 - -b 3 4 - -b 1 2 - - -mlr --opprint top -a -n 5 -f z ./reg_test/input/nullvals.dkvp - -mlr --opprint top -a -n 5 -f x -g a ./reg_test/input/nullvals.dkvp -a x y z -b 5 - - -b 3 4 - -b 1 2 - - -mlr --opprint top -a -n 5 -f y -g a ./reg_test/input/nullvals.dkvp -a x y z -b - 6 - -b 3 4 - -b 1 2 - - -mlr --opprint top -a -n 5 -f z -g a ./reg_test/input/nullvals.dkvp - -mlr --opprint top -n 5 -f x -o foo ./reg_test/input/nullvals.dkvp -foo x_top -1 5 -2 3 -3 1 -4 - -5 - - -mlr --opprint top -n 5 -f x -g a -o foo ./reg_test/input/nullvals.dkvp -a foo x_top -b 1 5 -b 2 3 -b 3 1 -b 4 - -b 5 - - -mlr --opprint top -a -n 5 -f x -o foo ./reg_test/input/nullvals.dkvp -a x y z -b 5 - - -b 3 4 - -b 1 2 - - -mlr --opprint top -a -n 5 -f z -o foo -g a ./reg_test/input/nullvals.dkvp - -mlr --opprint step -a counter,rsum -f x ./reg_test/input/nullvals.dkvp -a x y z x_counter x_rsum -b 1 2 - 1 1 -b 3 4 - 2 4 -b 5 - - 3 9 -b - 6 - - - -b - - - - - - -mlr --opprint step -a counter,rsum -f y ./reg_test/input/nullvals.dkvp -a x y z y_counter y_rsum -b 1 2 - 1 2 -b 3 4 - 2 6 -b 5 - - - - -b - 6 - 3 12 -b - - - - - - -mlr --opprint step -a counter,rsum -f z ./reg_test/input/nullvals.dkvp -a x y z z_counter z_rsum -b 1 2 - - - -b 3 4 - - - -b 5 - - - - -b - 6 - - - -b - - - - - - -mlr --opprint step -a counter,rsum -f x,y,z ./reg_test/input/nullvals.dkvp -a x y z x_counter x_rsum y_counter y_rsum z_counter z_rsum -b 1 2 - 1 1 1 2 - - -b 3 4 - 2 4 2 6 - - -b 5 - - 3 9 - - - - -b - 6 - - - 3 12 - - -b - - - - - - - - - - -mlr --opprint step -a counter,rsum -f x -g a ./reg_test/input/nullvals.dkvp -a x y z x_counter x_rsum -b 1 2 - 1 1 -b 3 4 - 2 4 -b 5 - - 3 9 -b - 6 - - - -b - - - - - - -mlr --opprint step -a counter,rsum -f y -g a ./reg_test/input/nullvals.dkvp -a x y z y_counter y_rsum -b 1 2 - 1 2 -b 3 4 - 2 6 -b 5 - - - - -b - 6 - 3 12 -b - - - - - - -mlr --opprint step -a counter,rsum -f z -g a ./reg_test/input/nullvals.dkvp -a x y z z_counter z_rsum -b 1 2 - - - -b 3 4 - - - -b 5 - - - - -b - 6 - - - -b - - - - - - -mlr --opprint step -a counter,rsum -f x,y,z -g a ./reg_test/input/nullvals.dkvp -a x y z x_counter x_rsum y_counter y_rsum z_counter z_rsum -b 1 2 - 1 1 1 2 - - -b 3 4 - 2 4 2 6 - - -b 5 - - 3 9 - - - - -b - 6 - - - 3 12 - - -b - - - - - - - - - - - -================================================================ -SPACE-PADDING - -mlr --idkvp --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.dkvp -a=1,b=2 -c=3 - -mlr --inidx --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.nidx -1=a,2=b,3=c -1=d,2=e,3=f - -mlr --icsvlite --odkvp --ifs space --repifs cat ./reg_test/input/space-pad.pprint -a=1,b=2,c=3 - - -================================================================ -DOUBLE PS - -mlr --opprint cat ./reg_test/input/double-ps.dkvp -a b c -pan wy.e 3 -pan wy=e 3 - - -================================================================ -MISSING FINAL LF - -mlr --csvlite cat ./reg_test/input/truncated.csv -a,b,c -1,2,3 -4,5,6 -7,8,9 - -mlr --dkvp cat ./reg_test/input/truncated.dkvp -a=1,b=2 -c=3 - -mlr --nidx cat ./reg_test/input/truncated.nidx -1 2 3 -4 5 - -mlr --pprint cat ./reg_test/input/truncated.pprint -a b c -1 2 3 -4 5 6 -7 8 9 - -mlr --xtab cat ./reg_test/input/truncated.xtab-crlf -a 1 -b 2 -c 3 - -d 4 -e 5 - - -================================================================ -UTF-8 alignment - -mlr --icsvlite --opprint cat ./reg_test/input/utf8-1.csv -langue nom jour -français françois vendredi -žusz éloignée - - -mlr --icsvlite --opprint cat ./reg_test/input/utf8-2.csv -français françois vendredi -langue nom jour - -mlr --icsvlite --oxtab cat ./reg_test/input/utf8-1.csv -langue français -nom françois -jour vendredi - -langue žusz -nom éloignée -jour - -mlr --icsvlite --oxtab cat ./reg_test/input/utf8-2.csv -français langue -françois nom -vendredi jour - -mlr --inidx --ifs space --opprint cat ./reg_test/input/utf8-align.nidx -1 2 -191º test -191 test2 -francois français -françois francais - -mlr --inidx --ifs space --opprint --right cat ./reg_test/input/utf8-align.nidx - 1 2 - 191º test - 191 test2 -francois français -françois francais - -mlr --oxtab cat ./reg_test/input/utf8-align.dkvp -191º test -1912 test2 -cois çais -çois cais - -191º test -1912 test2 -ois çais -çois cais - -191º test -1912 test2 -coise çais -çois cais - -mlr --inidx --ifs space --oxtab --xvright cat ./reg_test/input/utf8-align.nidx -1 191º -2 test - -1 191 -2 test2 - -1 francois -2 français - -1 françois -2 francais - - -================================================================ -UTF-8 BOM - -mlr --icsv --opprint cat ./reg_test/input/bom.csv -a b c -1 2 3 -4 5 6 - -mlr --icsv --opprint cat -a b c -1 2 3 -4 5 6 - -mlr --icsv --opprint cat ./reg_test/input/bom-dquote-header.csv -a b c -1 2 3 -4 5 6 - -mlr --icsv --opprint cat -a b c -1 2 3 -4 5 6 - - -================================================================ -UTF-8 UPPERCASE/LOWERCASE - -mlr --icsvlite --opprint put $langue = toupper($langue) ./reg_test/input/utf8-1.csv -langue nom jour -FRANÇAIS françois vendredi -ŽUSZ éloignée - - -mlr --icsvlite --opprint put $nom = toupper($nom) ./reg_test/input/utf8-1.csv -langue nom jour -français FRANÇOIS vendredi -žusz ÉLOIGNÉE - - -mlr --icsvlite --opprint put $jour = toupper($jour) ./reg_test/input/utf8-1.csv -langue nom jour -français françois VENDREDI -žusz éloignée - - -mlr --icsvlite --opprint put $langue = capitalize($langue) ./reg_test/input/utf8-1.csv -langue nom jour -Français françois vendredi -Žusz éloignée - - -mlr --icsvlite --opprint put $nom = capitalize($nom) ./reg_test/input/utf8-1.csv -langue nom jour -français François vendredi -žusz Éloignée - - -mlr --icsvlite --opprint put $jour = capitalize($jour) ./reg_test/input/utf8-1.csv -langue nom jour -français françois Vendredi -žusz éloignée - - - -================================================================ -SKIP/PASS COMMENTS DKVP - - ----------------------------------------------------------------- input comments1.dkvp -cat ./reg_test/input/comments/comments1.dkvp -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- skip comments1.dkvp -mlr --skip-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments1.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments1.dkvp -mlr --pass-comments --idkvp --oxtab cat -# hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments1.dkvp -# hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- input comments2.dkvp -cat ./reg_test/input/comments/comments2.dkvp -a=1,b=2,c=3 -# hello world 2 -a=4,b=5,c=6 - - ----------------------------------------------------------------- skip comments2.dkvp -mlr --skip-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments2.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments2.dkvp -mlr --pass-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 -# hello world 2 - -a 4 -b 5 -c 6 - -mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments2.dkvp -a 1 -b 2 -c 3 -# hello world 2 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- input comments3.dkvp -cat ./reg_test/input/comments/comments3.dkvp -a=1,b=2,c=3 -a=4,b=5,c=6 -# hello world 3 - - ----------------------------------------------------------------- skip comments3.dkvp -mlr --skip-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments --idkvp --oxtab cat ./reg_test/input/comments/comments3.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments3.dkvp -mlr --pass-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 -# hello world 3 - -mlr --pass-comments --idkvp --oxtab cat ./reg_test/input/comments/comments3.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 -# hello world 3 - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.dkvp -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- skip comments1-crlf.dkvp -mlr --skip-comments --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments --idkvp --oxtab cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments1-crlf.dkvp -mlr --pass-comments --idkvp --oxtab cat -# hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --pass-comments --idkvp --oxtab cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.dkvp -# hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - -================================================================ -SKIP/PASS COMMENTS DKVP WITH ALTERNATE PREFIX - - ----------------------------------------------------------------- input comments1-atat.dkvp -cat ./reg_test/input/comments/comments1-atat.dkvp -@@ hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- skip comments1-atat.dkvp -mlr --skip-comments-with @@ --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments1-atat.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments1-atat.dkvp -mlr --pass-comments-with @@ --idkvp --oxtab cat -@@ hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments1-atat.dkvp -@@ hello world 1 -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- input comments2-atat.dkvp -cat ./reg_test/input/comments/comments2-atat.dkvp -a=1,b=2,c=3 -@@ hello world 2 -a=4,b=5,c=6 - - ----------------------------------------------------------------- skip comments2-atat.dkvp -mlr --skip-comments-with @@ --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments2-atat.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments2-atat.dkvp -mlr --pass-comments-with @@ --idkvp --oxtab cat -a 1 -b 2 -c 3 -@@ hello world 2 - -a 4 -b 5 -c 6 - -mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments2-atat.dkvp -a 1 -b 2 -c 3 -@@ hello world 2 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- input comments3-atat.dkvp -cat ./reg_test/input/comments/comments3-atat.dkvp -a=1,b=2,c=3 -a=4,b=5,c=6 -@@ hello world 3 - - ----------------------------------------------------------------- skip comments3-atat.dkvp -mlr --skip-comments-with @@ --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - -mlr --skip-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments3-atat.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 - - ----------------------------------------------------------------- pass comments3-atat.dkvp -mlr --pass-comments-with @@ --idkvp --oxtab cat -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 -@@ hello world 3 - -mlr --pass-comments-with @@ --idkvp --oxtab cat ./reg_test/input/comments/comments3-atat.dkvp -a 1 -b 2 -c 3 - -a 4 -b 5 -c 6 -@@ hello world 3 - - -================================================================ -SKIP/PASS COMMENTS NIDX - - ----------------------------------------------------------------- input comments1.nidx -cat ./reg_test/input/comments/comments1.nidx -# hello world 1 -aX1 bX2 cX3 -aX4 bX5 cX6 - - ----------------------------------------------------------------- skip comments1.nidx -mlr --skip-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments1.nidx -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- pass comments1.nidx -mlr --pass-comments --inidx --oxtab cat -# hello world 1 -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments1.nidx -# hello world 1 -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- input comments2.nidx -cat ./reg_test/input/comments/comments2.nidx -aX1 bX2 cX3 -# hello world 2 -aX4 bX5 cX6 - - ----------------------------------------------------------------- skip comments2.nidx -mlr --skip-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments2.nidx -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- pass comments2.nidx -mlr --pass-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 -# hello world 2 - -1 aX4 -2 bX5 -3 cX6 - -mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments2.nidx -1 aX1 -2 bX2 -3 cX3 -# hello world 2 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- input comments3.nidx -cat ./reg_test/input/comments/comments3.nidx -aX1 bX2 cX3 -aX4 bX5 cX6 -# hello world 3 - - ----------------------------------------------------------------- skip comments3.nidx -mlr --skip-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --skip-comments --inidx --oxtab cat ./reg_test/input/comments/comments3.nidx -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- pass comments3.nidx -mlr --pass-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 -# hello world 3 - -mlr --pass-comments --inidx --oxtab cat ./reg_test/input/comments/comments3.nidx -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 -# hello world 3 - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.nidx -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx -# hello world 1 -aX1 bX2 cX3 -aX4 bX5 cX6 - - ----------------------------------------------------------------- skip comments1-crlf.nidx -mlr --skip-comments --inidx --oxtab cat -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --skip-comments --inidx --oxtab cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - ----------------------------------------------------------------- pass comments1-crlf.nidx -mlr --pass-comments --inidx --oxtab cat -# hello world 1 -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - -mlr --pass-comments --inidx --oxtab cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.nidx -# hello world 1 -1 aX1 -2 bX2 -3 cX3 - -1 aX4 -2 bX5 -3 cX6 - - -================================================================ -SKIP/PASS COMMENTS JSON - - ----------------------------------------------------------------- input comments1.json -cat ./reg_test/input/comments/comments1.json -# hello world 1 -{ "a":1, "b":2, "c":3 } -{ "a":4, "b":5, "c":6 } - - ----------------------------------------------------------------- skip comments1.json -mlr --skip-comments --ijson --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments1.json -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1.json -mlr --pass-comments --ijson --odkvp cat -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments1.json -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- input comments2.json -cat ./reg_test/input/comments/comments2.json -{ "a":1, "b":2, "c":3 } -# hello world 2 -{ "a":4, "b":5, "c":6 } - - ----------------------------------------------------------------- skip comments2.json -mlr --skip-comments --ijson --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments2.json -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments2.json -mlr --pass-comments --ijson --odkvp cat -# hello world 2 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments2.json -# hello world 2 -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- input comments3.json -cat ./reg_test/input/comments/comments3.json -{ "a":1, "b":2, "c":3 } -{ "a":4, "b":5, "c":6 } -# hello world 3 - - ----------------------------------------------------------------- skip comments3.json -mlr --skip-comments --ijson --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --ijson --odkvp cat ./reg_test/input/comments/comments3.json -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments3.json -mlr --pass-comments --ijson --odkvp cat -# hello world 3 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --ijson --odkvp cat ./reg_test/input/comments/comments3.json -# hello world 3 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.json -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json -# hello world 1 -{ "a":1, "b":2, "c":3 } -{ "a":4, "b":5, "c":6 } - - ----------------------------------------------------------------- skip comments1-crlf.json -mlr --skip-comments --ijson --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --ijson --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1-crlf.json -mlr --pass-comments --ijson --odkvp cat -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --ijson --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.json -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 - - -================================================================ -SKIP/PASS COMMENTS XTAB - - ----------------------------------------------------------------- input comments1.xtab -cat ./reg_test/input/comments/comments1.xtab -x 1 -#hello world3 -z 3 - -x 2 -#hello world4 -z 5 - - - ----------------------------------------------------------------- skip comments1.xtab -mlr --skip-comments --ixtab --odkvp cat -x=1,z=3 -x=2,z=5 - -mlr --skip-comments --ixtab --odkvp cat ./reg_test/input/comments/comments1.xtab -x=1,z=3 -x=2,z=5 - - ----------------------------------------------------------------- pass comments1.xtab -mlr --pass-comments --ixtab --odkvp cat -#hello world3 -x=1,z=3 -#hello world4 -x=2,z=5 - -mlr --pass-comments --ixtab --odkvp cat ./reg_test/input/comments/comments1.xtab -#hello world3 -x=1,z=3 -#hello world4 -x=2,z=5 - - ----------------------------------------------------------------- input comments2.xtab -cat ./reg_test/input/comments/comments2.xtab -#hello world1 - -#hello world2 -x 1 -#hello world3 -z 3 - -x 2 -#hello world4 -z 5 -#hello world5 - -#hello world6 - - ----------------------------------------------------------------- skip comments2.xtab -mlr --skip-comments --ixtab --odkvp cat -x=1,z=3 -x=2,z=5 - -mlr --skip-comments --ixtab --odkvp cat ./reg_test/input/comments/comments2.xtab -x=1,z=3 -x=2,z=5 - - ----------------------------------------------------------------- pass comments2.xtab -mlr --pass-comments --ixtab --odkvp cat -#hello world1 -#hello world2 -#hello world3 -x=1,z=3 -#hello world4 -#hello world5 -x=2,z=5 -#hello world6 - -mlr --pass-comments --ixtab --odkvp cat ./reg_test/input/comments/comments2.xtab -#hello world1 -#hello world2 -#hello world3 -x=1,z=3 -#hello world4 -#hello world5 -x=2,z=5 -#hello world6 - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.xtab -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab -x 1 -#hello world3 -z 3 - -x 2 -#hello world4 -z 5 - - - ----------------------------------------------------------------- skip comments1-crlf.xtab -mlr --skip-comments --ixtab --odkvp cat -x=1,z=3 -x=2,z=5 - -mlr --skip-comments --ixtab --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab -x=1,z=3 -x=2,z=5 - - ----------------------------------------------------------------- pass comments1-crlf.xtab -mlr --pass-comments --ixtab --odkvp cat -#hello world3 -x=1,z=3 -#hello world4 -x=2,z=5 - -mlr --pass-comments --ixtab --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.xtab -#hello world3 -x=1,z=3 -#hello world4 -x=2,z=5 - - -================================================================ -SKIP/PASS COMMENTS CSVLITE - - ----------------------------------------------------------------- input comments1.csv -cat ./reg_test/input/comments/comments1.csv -# hello -a,b,c -1,2,3 -4,5,6 - - ----------------------------------------------------------------- skip comments1.csv -mlr --skip-comments --icsvlite --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments1.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1.csv -mlr --pass-comments --icsvlite --odkvp cat -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments1.csv -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- input comments2.csv -cat ./reg_test/input/comments/comments2.csv -# hello -a,b,c -# hi -1,2,3 -# there -4,5,6 -# haha - - ----------------------------------------------------------------- skip comments2.csv -mlr --skip-comments --icsvlite --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments2.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments2.csv -mlr --pass-comments --icsvlite --odkvp cat -# hello -# hi -a=1,b=2,c=3 -# there -a=4,b=5,c=6 -# haha - -mlr --pass-comments --icsvlite --odkvp cat ./reg_test/input/comments/comments2.csv -# hello -# hi -a=1,b=2,c=3 -# there -a=4,b=5,c=6 -# haha - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.csv -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -# hello -a,b,c -1,2,3 -4,5,6 - - ----------------------------------------------------------------- skip comments1-crlf.csv -mlr --skip-comments --icsvlite --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsvlite --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1-crlf.csv -mlr --pass-comments --icsvlite --odkvp cat -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --icsvlite --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - - -================================================================ -SKIP/PASS COMMENTS CSV - - ----------------------------------------------------------------- input comments1.csv -cat ./reg_test/input/comments/comments1.csv -# hello -a,b,c -1,2,3 -4,5,6 - - ----------------------------------------------------------------- skip comments1.csv -mlr --skip-comments --icsv --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsv --odkvp cat ./reg_test/input/comments/comments1.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1.csv -mlr --pass-comments --icsv --odkvp cat -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --icsv --odkvp cat ./reg_test/input/comments/comments1.csv -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- input comments2.csv -cat ./reg_test/input/comments/comments2.csv -# hello -a,b,c -# hi -1,2,3 -# there -4,5,6 -# haha - - ----------------------------------------------------------------- skip comments2.csv -mlr --skip-comments --icsv --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsv --odkvp cat ./reg_test/input/comments/comments2.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments2.csv -mlr --pass-comments --icsv --odkvp cat -# hello -# hi -a=1,b=2,c=3 -# there -a=4,b=5,c=6 -# haha - -mlr --pass-comments --icsv --odkvp cat ./reg_test/input/comments/comments2.csv -# hello -# hi -a=1,b=2,c=3 -# there -a=4,b=5,c=6 -# haha - -mlr termcvt --lf2crlf - ----------------------------------------------------------------- input comments1-crlf.csv -cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -# hello -a,b,c -1,2,3 -4,5,6 - - ----------------------------------------------------------------- skip comments1-crlf.csv -mlr --skip-comments --icsv --odkvp cat -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --skip-comments --icsv --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -a=1,b=2,c=3 -a=4,b=5,c=6 - - ----------------------------------------------------------------- pass comments1-crlf.csv -mlr --pass-comments --icsv --odkvp cat -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - -mlr --pass-comments --icsv --odkvp cat /Users/kerl/pub_http_internet/miller-releases/miller-head/c/output-regtest/comments1-crlf.csv -# hello -a=1,b=2,c=3 -a=4,b=5,c=6 - - -================================================================ -INT64 I/O - -mlr --oxtab put $c=$a;$d=$b;$e=hexfmt($a);$f=hexfmt($b) ./reg_test/input/int64io.dkvp -a 0x1 -b 1 -c 1 -d 1 -e 0x1 -f 0x1 - -a 0x7ffffffffffffffe -b 9223372036854775806 -c 9223372036854775806 -d 9223372036854775806 -e 0x7ffffffffffffffe -f 0x7ffffffffffffffe - -a 0x7fffffffffffffff -b 9223372036854775807 -c 9223372036854775807 -d 9223372036854775807 -e 0x7fffffffffffffff -f 0x7fffffffffffffff - -a 0x8000000000000000 -b -9223372036854775808 -c -9223372036854775808 -d -9223372036854775808 -e 0x8000000000000000 -f 0x8000000000000000 - -a 0xffffffffffffffff -b -1 -c -1 -d -1 -e 0xffffffffffffffff -f 0xffffffffffffffff - -mlr --oxtab --ofmt %.8g put $p0=$p+0;$p1=$p+1;$p2=$p+2;$p3=$p+3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -p0 9223372036854774271 -p1 9223372036854774272 -p2 9223372036854774273 -p3 9223372036854774274 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -p0 9223372036854774272 -p1 9223372036854774273 -p2 9223372036854774274 -p3 9223372036854774275 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -p0 9223372036854774783 -p1 9223372036854774784 -p2 9223372036854774785 -p3 9223372036854774786 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -p0 9223372036854774784 -p1 9223372036854774785 -p2 9223372036854774786 -p3 9223372036854774787 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -p0 9223372036854775296 -p1 9223372036854775297 -p2 9223372036854775298 -p3 9223372036854775299 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -p0 9223372036854775806 -p1 9223372036854775807 -p2 9.223372e+18 -p3 9.223372e+18 - -p 0x7fffffffffffffff -n 0x8000000000000601 -p0 9223372036854775807 -p1 9.223372e+18 -p2 9.223372e+18 -p3 9.223372e+18 - -mlr --oxtab --ofmt %.8g put $p0=$p-0;$p1=$p-1;$p2=$p-2;$p3=$p-3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -p0 9223372036854774271 -p1 9223372036854774270 -p2 9223372036854774269 -p3 9223372036854774268 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -p0 9223372036854774272 -p1 9223372036854774271 -p2 9223372036854774270 -p3 9223372036854774269 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -p0 9223372036854774783 -p1 9223372036854774782 -p2 9223372036854774781 -p3 9223372036854774780 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -p0 9223372036854774784 -p1 9223372036854774783 -p2 9223372036854774782 -p3 9223372036854774781 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -p0 9223372036854775296 -p1 9223372036854775295 -p2 9223372036854775294 -p3 9223372036854775293 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -p0 9223372036854775806 -p1 9223372036854775805 -p2 9223372036854775804 -p3 9223372036854775803 - -p 0x7fffffffffffffff -n 0x8000000000000601 -p0 9223372036854775807 -p1 9223372036854775806 -p2 9223372036854775805 -p3 9223372036854775804 - -mlr --oxtab --ofmt %.8g put $p0=$p*0;$p1=$p*1;$p2=$p*2;$p3=$p*3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -p0 0 -p1 9223372036854774271 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -p0 0 -p1 9223372036854774272 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -p0 0 -p1 9223372036854774783 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -p0 0 -p1 9223372036854774784 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -p0 0 -p1 9.223372e+18 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -p0 0 -p1 9.223372e+18 -p2 1.8446744e+19 -p3 2.7670116e+19 - -p 0x7fffffffffffffff -n 0x8000000000000601 -p0 0 -p1 9.223372e+18 -p2 1.8446744e+19 -p3 2.7670116e+19 - -mlr --oxtab --ofmt %.8g put $n0=$n+0;$n1=$n+1;$n2=$n+2;$n3=$n+3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -n0 -9223372036854775808 -n1 -9223372036854775807 -n2 -9223372036854775806 -n3 -9223372036854775805 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -n0 -9223372036854775807 -n1 -9223372036854775806 -n2 -9223372036854775805 -n3 -9223372036854775804 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -n0 -9223372036854775296 -n1 -9223372036854775295 -n2 -9223372036854775294 -n3 -9223372036854775293 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -n0 -9223372036854774784 -n1 -9223372036854774783 -n2 -9223372036854774782 -n3 -9223372036854774781 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -n0 -9223372036854774783 -n1 -9223372036854774782 -n2 -9223372036854774781 -n3 -9223372036854774780 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -n0 -9223372036854774272 -n1 -9223372036854774271 -n2 -9223372036854774270 -n3 -9223372036854774269 - -p 0x7fffffffffffffff -n 0x8000000000000601 -n0 -9223372036854774271 -n1 -9223372036854774270 -n2 -9223372036854774269 -n3 -9223372036854774268 - -mlr --oxtab --ofmt %.8g put $n0=$n-0;$n1=$n-1;$n2=$n-2;$n3=$n-3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -n0 -9223372036854775808 -n1 -9.223372e+18 -n2 -9.223372e+18 -n3 -9.223372e+18 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -n0 -9223372036854775807 -n1 -9223372036854775808 -n2 -9.223372e+18 -n3 -9.223372e+18 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -n0 -9223372036854775296 -n1 -9223372036854775297 -n2 -9223372036854775298 -n3 -9223372036854775299 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -n0 -9223372036854774784 -n1 -9223372036854774785 -n2 -9223372036854774786 -n3 -9223372036854774787 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -n0 -9223372036854774783 -n1 -9223372036854774784 -n2 -9223372036854774785 -n3 -9223372036854774786 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -n0 -9223372036854774272 -n1 -9223372036854774273 -n2 -9223372036854774274 -n3 -9223372036854774275 - -p 0x7fffffffffffffff -n 0x8000000000000601 -n0 -9223372036854774271 -n1 -9223372036854774272 -n2 -9223372036854774273 -n3 -9223372036854774274 - -mlr --oxtab --ofmt %.8g put $n0=$n*0;$n1=$n*1;$n2=$n*2;$n3=$n*3 ./reg_test/input/int64arith.dkvp -p 0x7ffffffffffff9ff -n 0x8000000000000000 -n0 0 -n1 -9.223372e+18 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7ffffffffffffa00 -n 0x8000000000000001 -n0 0 -n1 -9.223372e+18 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7ffffffffffffbff -n 0x8000000000000200 -n0 0 -n1 -9.223372e+18 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7ffffffffffffc00 -n 0x8000000000000400 -n0 0 -n1 -9223372036854774784 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7ffffffffffffe00 -n 0x8000000000000401 -n0 0 -n1 -9223372036854774783 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7ffffffffffffffe -n 0x8000000000000600 -n0 0 -n1 -9223372036854774272 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - -p 0x7fffffffffffffff -n 0x8000000000000601 -n0 0 -n1 -9223372036854774271 -n2 -1.8446744e+19 -n3 -2.7670116e+19 - - -================================================================ -COMPRESSED INPUT - -mlr --csv --prepipe cat cat ./reg_test/input/rfc-csv/simple.csv-crlf -a,b,c -1,x,3 -4,5,6 -x,"y""yy",z - -mlr --dkvp --prepipe cat cat ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --csv --prepipe cat cat -a,b,c -1,x,3 -4,5,6 -x,"y""yy",z - -mlr --dkvp --prepipe cat cat -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - -================================================================ -STDIN - -mlr --csv cat -a,b,c -1,x,3 -4,5,6 -x,"y""yy",z - - -================================================================ -RFC-CSV - -mlr --csv cat ./reg_test/input/rfc-csv/simple.csv-crlf -a,b,c -1,x,3 -4,5,6 -x,"y""yy",z - -mlr --csv cat ./reg_test/input/rfc-csv/simple-truncated.csv -a,b,c -1,x,3 -4,5,6 - -mlr --csv cat ./reg_test/input/rfc-csv/narrow.csv -a -1 -2 -3 -4 - -mlr --csv cat ./reg_test/input/rfc-csv/narrow-truncated.csv -a -1 -2 -3 -4 - -mlr --csv cat ./reg_test/input/rfc-csv/quoted-comma.csv -a,b,c -1,"x,3",y -4,5,6 - -mlr --csv cat ./reg_test/input/rfc-csv/quoted-comma-truncated.csv -a,b,c -1,"x,3",y -4,5,6 - -mlr --csv cat ./reg_test/input/rfc-csv/quoted-crlf.csv -a,b,c -1,"x -3",y -4,5,6 - -mlr --csv cat ./reg_test/input/rfc-csv/quoted-crlf-truncated.csv -a,b,c -1,"x -3",y -4,5,6 - -mlr --csv cat ./reg_test/input/rfc-csv/simple-truncated.csv ./reg_test/input/rfc-csv/simple.csv-crlf -a,b,c -1,x,3 -4,5,6 -1,x,3 -4,5,6 -x,"y""yy",z - -mlr --csv --ifs semicolon --ofs pipe --irs lf --ors lflf cut -x -f b ./reg_test/input/rfc-csv/modify-defaults.csv -a|c - -1|3 - -4|6 - - -mlr --csv --rs lf --quote-original cut -o -f c,b,a ./reg_test/input/quote-original.csv -c,b,a -3,2,1 -6,"5",4 -"9",8,"7" - -mlr --icsv --oxtab cat ./reg_test/input/comma-at-eof.csv -a 1 -b 2 -c 3 - -a 4 -b 5 -c - -mlr --csv --quote-all cat ./reg_test/input/rfc-csv/simple.csv-crlf -"a","b","c" -"1","x","3" -"4","5","6" -"x","y""yy","z" - -mlr --csv --quote-original cat ./reg_test/input/rfc-csv/simple.csv-crlf -a,b,c -1,x,3 -4,5,6 -"x","y""yy","z" - -mlr --itsv --rs lf --oxtab cat ./reg_test/input/simple.tsv -a pan -b pan -i 1 -x 2 -y 0.989945 - -a eks -b pan -i 2 -x 1 -y 0.775159 - -a wye -b wye -i 3 -x 1 -y 0.761642 - -a eks -b wye -i 4 -x 5 -y 0.322934 - -a wye -b pan -i 5 -x 5 -y 0.448283 - -mlr --iusv --oxtab cat ./reg_test/input/example.usv -a d -b e -c f - -a g -b h -c i - - -================================================================ -RAGGED NON-RFC CSV - -mlr --icsv --oxtab --ragged cat ./reg_test/input/ragged.csv -a 1 -b 2 -c 3 - -a 4 -b 5 -c - -a 6 -b 7 -c 8 -4 9 - -mlr --icsvlite --oxtab --ragged cat ./reg_test/input/ragged.csv -a 1 -b 2 -c 3 - -a 4 -b 5 -c - -a 6 -b 7 -c 8 -4 9 - - -================================================================ -MARKDOWN OUTPUT - -mlr --itsv --rs lf --omd cat ./reg_test/input/simple.tsv -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 2 | 0.989945 | -| eks | pan | 2 | 1 | 0.775159 | -| wye | wye | 3 | 1 | 0.761642 | -| eks | wye | 4 | 5 | 0.322934 | -| wye | pan | 5 | 5 | 0.448283 | - - -================================================================ -CSV/RS ENVIRONMENT DEFAULTS - -mlr --csv cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf -a -1 -4 -x - -mlr --csv --rs crlf cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf -a -1 -4 -x - -mlr --csv --rs lf cut -f a ./reg_test/input/rfc-csv/simple.csv-crlf -a -1 -4 -mlr: unmatched double quote at line 3. - - -================================================================ -MULTI-CHARACTER IRS/IFS/IPS FOR DKVP - -mlr --oxtab --idkvp --irs lf --ifs , --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x :0.641593543645736508/ -a :wye/ -i :0/ - -x :0.827614412562742041/ -a :eks/ -i :1/ - -x :0.923068348748175560/ -a :zee/ -i :2/ - -x :0.000047786161325772/ -a :zee/ -i :3/ - -x :0.676537984365847889/ -a :zee/ -i :4/ - -mlr --oxtab --idkvp --irs lf --ifs /, --ips =: cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x 0.641593543645736508 -a wye -i 0 - -x 0.827614412562742041 -a eks -i 1 - -x 0.923068348748175560 -a zee -i 2 - -x 0.000047786161325772 -a zee -i 3 - -x 0.676537984365847889 -a zee -i 4 - -mlr --oxtab --idkvp --irs crlf --ifs , --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x :0.641593543645736508/ -a :wye/ -i :0/ - -x :0.827614412562742041/ -a :eks/ -i :1/ - -x :0.923068348748175560/ -a :zee/ -i :2/ - -x :0.000047786161325772/ -a :zee/ -i :3/ - -x :0.676537984365847889/ -a :zee/ -i :4/ - -mlr --oxtab --idkvp --irs crlf --ifs /, --ips =: cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x 0.641593543645736508 -a wye -i 0 - -x 0.827614412562742041 -a eks -i 1 - -x 0.923068348748175560 -a zee -i 2 - -x 0.000047786161325772 -a zee -i 3 - -x 0.676537984365847889 -a zee -i 4 - - -================================================================ -MULTI-CHARACTER IRS/IFS FOR NIDX - -mlr --oxtab --inidx --irs lf --ifs , cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf -4 x=:0.641593543645736508/ -1 a=:wye/ -3 i=:0/ - -4 x=:0.827614412562742041/ -1 a=:eks/ -3 i=:1/ - -4 x=:0.923068348748175560/ -1 a=:zee/ -3 i=:2/ - -4 x=:0.000047786161325772/ -1 a=:zee/ -3 i=:3/ - -4 x=:0.676537984365847889/ -1 a=:zee/ -3 i=:4/ - -mlr --oxtab --inidx --irs lf --ifs /, cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf -4 x=:0.641593543645736508 -1 a=:wye -3 i=:0 - -4 x=:0.827614412562742041 -1 a=:eks -3 i=:1 - -4 x=:0.923068348748175560 -1 a=:zee -3 i=:2 - -4 x=:0.000047786161325772 -1 a=:zee -3 i=:3 - -4 x=:0.676537984365847889 -1 a=:zee -3 i=:4 - -mlr --oxtab --inidx --irs crlf --ifs , cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf -4 x=:0.641593543645736508/ -1 a=:wye/ -3 i=:0/ - -4 x=:0.827614412562742041/ -1 a=:eks/ -3 i=:1/ - -4 x=:0.923068348748175560/ -1 a=:zee/ -3 i=:2/ - -4 x=:0.000047786161325772/ -1 a=:zee/ -3 i=:3/ - -4 x=:0.676537984365847889/ -1 a=:zee/ -3 i=:4/ - -mlr --oxtab --inidx --irs crlf --ifs /, cut -o -f 4,1,3 ./reg_test/input/multi-sep.dkvp-crlf -4 x=:0.641593543645736508 -1 a=:wye -3 i=:0 - -4 x=:0.827614412562742041 -1 a=:eks -3 i=:1 - -4 x=:0.923068348748175560 -1 a=:zee -3 i=:2 - -4 x=:0.000047786161325772 -1 a=:zee -3 i=:3 - -4 x=:0.676537984365847889 -1 a=:zee -3 i=:4 - - -================================================================ -MULTI-CHARACTER IRS/IFS FOR CSVLITE - -mlr --oxtab --icsvlite --irs lf --ifs , cut -o -f x/,a/,i/ ./reg_test/input/multi-sep.csv-crlf -x/ 0.641593543645736508/ -a/ wye/ -i/ 0/ - -x/ 0.827614412562742041/ -a/ eks/ -i/ 1/ - -x/ 0.923068348748175560/ -a/ zee/ -i/ 2/ - -x/ 0.000047786161325772/ -a/ zee/ -i/ 3/ - -x/ 0.676537984365847889/ -a/ zee/ -i/ 4/ - -mlr --oxtab --icsvlite --irs lf --ifs /, cut -o -f x,a,i ./reg_test/input/multi-sep.csv-crlf -x 0.641593543645736508 -a wye -i 0 - -x 0.827614412562742041 -a eks -i 1 - -x 0.923068348748175560 -a zee -i 2 - -x 0.000047786161325772 -a zee -i 3 - -x 0.676537984365847889 -a zee -i 4 - -mlr --oxtab --icsvlite --irs crlf --ifs , cut -o -f x/,a/,i/ ./reg_test/input/multi-sep.csv-crlf -x/ 0.641593543645736508/ -a/ wye/ -i/ 0/ - -x/ 0.827614412562742041/ -a/ eks/ -i/ 1/ - -x/ 0.923068348748175560/ -a/ zee/ -i/ 2/ - -x/ 0.000047786161325772/ -a/ zee/ -i/ 3/ - -x/ 0.676537984365847889/ -a/ zee/ -i/ 4/ - -mlr --oxtab --icsvlite --irs crlf --ifs /, cut -o -f x,a,i ./reg_test/input/multi-sep.csv-crlf -x 0.641593543645736508 -a wye -i 0 - -x 0.827614412562742041 -a eks -i 1 - -x 0.923068348748175560 -a zee -i 2 - -x 0.000047786161325772 -a zee -i 3 - -x 0.676537984365847889 -a zee -i 4 - - -================================================================ -MULTI-CHARACTER SEPARATORS FOR XTAB - -mlr --xtab --ifs crlf --ofs Z cut -x -f b ./reg_test/input/truncated.xtab-crlf -a 1Zc 3ZZd 4Ze 5Z -mlr --xtab --ips . --ops @ cut -x -f b ./reg_test/input/dots.xtab -a@1 -c@345 - -defg@6 -hi@@@78 - -mlr --xtab --ips : --ops @@@@ put $sum=int($a+$b) ./reg_test/input/multi-ips.dkvp -a@@@@1 -b@@@@2 -sum@@@@3 - - -================================================================ -EMBEDDED IPS FOR XTAB - -mlr --xtab cat ./reg_test/input/embedded-ips.xtab -a 1 -b 2 -c 3 4 5 - - -================================================================ -MULTI-CHARACTER IRS FOR PPRINT - -mlr --pprint --irs crlf --ifs / --ofs @ cut -x -f b ./reg_test/input/dots.pprint-crlf -a@@@i@@x@@@@@@@@@@@@@@@@@@@y -pan@1@@0.3467901443380824@@0.7268028627434533 -eks@2@@0.7586799647899636@@0.5221511083334797 -wye@3@@0.20460330576630303@0.33831852551664776 -eks@4@@0.38139939387114097@0.13418874328430463 -wye@5@@0.5732889198020006@@0.8636244699032729 -zee@6@@0.5271261600918548@@0.49322128674835697 -eks@7@@0.6117840605678454@@0.1878849191181694 -zee@8@@0.5985540091064224@@0.976181385699006 -hat@9@@0.03144187646093577@0.7495507603507059 -pan@10@0.5026260055412137@@0.9526183602969864 - - -================================================================ -BARRED PPRINT - -mlr --opprint --barred cat ./reg_test/input/abixy -+-----+-----+----+---------------------+---------------------+ -| a | b | i | x | y | -+-----+-----+----+---------------------+---------------------+ -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | -+-----+-----+----+---------------------+---------------------+ - -mlr --opprint --barred --right cat ./reg_test/input/abixy -+-----+-----+----+---------------------+---------------------+ -| a | b | i | x | y | -+-----+-----+----+---------------------+---------------------+ -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | -+-----+-----+----+---------------------+---------------------+ - -mlr --opprint --barred cat ./reg_test/input/abixy-het -+-----+-----+---+--------------------+--------------------+ -| a | b | i | x | y | -+-----+-----+---+--------------------+--------------------+ -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -+-----+-----+---+--------------------+--------------------+ - -+-----+-----+---+---------------------+---------------------+ -| aaa | b | i | x | y | -+-----+-----+---+---------------------+---------------------+ -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -+-----+-----+---+---------------------+---------------------+ - -+-----+-----+---+---------------------+---------------------+ -| a | bbb | i | x | y | -+-----+-----+---+---------------------+---------------------+ -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -+-----+-----+---+---------------------+---------------------+ - -+-----+-----+---+--------------------+--------------------+ -| a | b | i | xxx | y | -+-----+-----+---+--------------------+--------------------+ -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -+-----+-----+---+--------------------+--------------------+ - -+-----+-----+---+--------------------+---------------------+ -| a | b | i | x | y | -+-----+-----+---+--------------------+---------------------+ -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -+-----+-----+---+--------------------+---------------------+ - -+-----+-----+-----+--------------------+--------------------+ -| a | b | iii | x | y | -+-----+-----+-----+--------------------+--------------------+ -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -+-----+-----+-----+--------------------+--------------------+ - -+-----+-----+---+--------------------+-------------------+ -| a | b | i | x | yyy | -+-----+-----+---+--------------------+-------------------+ -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -+-----+-----+---+--------------------+-------------------+ - -+-----+-----+---+---------------------+--------------------+ -| aaa | bbb | i | x | y | -+-----+-----+---+---------------------+--------------------+ -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -+-----+-----+---+---------------------+--------------------+ - -+-----+-----+----+--------------------+--------------------+ -| a | b | i | x | y | -+-----+-----+----+--------------------+--------------------+ -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | -+-----+-----+----+--------------------+--------------------+ - -mlr --opprint --barred --right cat ./reg_test/input/abixy-het -+-----+-----+---+--------------------+--------------------+ -| a | b | i | x | y | -+-----+-----+---+--------------------+--------------------+ -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -+-----+-----+---+--------------------+--------------------+ - -+-----+-----+---+---------------------+---------------------+ -| aaa | b | i | x | y | -+-----+-----+---+---------------------+---------------------+ -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -+-----+-----+---+---------------------+---------------------+ - -+-----+-----+---+---------------------+---------------------+ -| a | bbb | i | x | y | -+-----+-----+---+---------------------+---------------------+ -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -+-----+-----+---+---------------------+---------------------+ - -+-----+-----+---+--------------------+--------------------+ -| a | b | i | xxx | y | -+-----+-----+---+--------------------+--------------------+ -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -+-----+-----+---+--------------------+--------------------+ - -+-----+-----+---+--------------------+---------------------+ -| a | b | i | x | y | -+-----+-----+---+--------------------+---------------------+ -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -+-----+-----+---+--------------------+---------------------+ - -+-----+-----+-----+--------------------+--------------------+ -| a | b | iii | x | y | -+-----+-----+-----+--------------------+--------------------+ -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -+-----+-----+-----+--------------------+--------------------+ - -+-----+-----+---+--------------------+-------------------+ -| a | b | i | x | yyy | -+-----+-----+---+--------------------+-------------------+ -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -+-----+-----+---+--------------------+-------------------+ - -+-----+-----+---+---------------------+--------------------+ -| aaa | bbb | i | x | y | -+-----+-----+---+---------------------+--------------------+ -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -+-----+-----+---+---------------------+--------------------+ - -+-----+-----+----+--------------------+--------------------+ -| a | b | i | x | y | -+-----+-----+----+--------------------+--------------------+ -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | -+-----+-----+----+--------------------+--------------------+ - - -================================================================ -MULTI-CHARACTER IXS SPECIFIERS - -mlr --oxtab --idkvp --irs lf --ifs , --ips = cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x :0.641593543645736508/ -a :wye/ -i :0/ - -x :0.827614412562742041/ -a :eks/ -i :1/ - -x :0.923068348748175560/ -a :zee/ -i :2/ - -x :0.000047786161325772/ -a :zee/ -i :3/ - -x :0.676537984365847889/ -a :zee/ -i :4/ - -mlr --oxtab --idkvp --irs lf --ifs /, --ips =: cut -o -f x,a,i ./reg_test/input/multi-sep.dkvp-crlf -x 0.641593543645736508 -a wye -i 0 - -x 0.827614412562742041 -a eks -i 1 - -x 0.923068348748175560 -a zee -i 2 - -x 0.000047786161325772 -a zee -i 3 - -x 0.676537984365847889 -a zee -i 4 - - -================================================================ -JSON I/O - -mlr --ijson --opprint cat ./reg_test/input/small-non-nested.json -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --ijson --opprint cat ./reg_test/input/small-non-nested-wrapped.json -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --ijson --oxtab cat ./reg_test/input/small-nested.json -z:pan:1 0.726803 -z:pan:0 0.952618 -z:eks:0 0.134189 -z:eks:1 0.187885 -z:wye:1 0.863624 -z:zee:0 0.976181 -z:hat:1 0.749551 - -mlr --ojson cat ./reg_test/input/json-output-options.dkvp -{ "a": 1, "b": "x", "c": 3 } -{ "d": 4 } -{ "1": 5, "f": 6 } - -mlr --ojson --jvstack cat ./reg_test/input/json-output-options.dkvp -{ - "a": 1, - "b": "x", - "c": 3 -} -{ - "d": 4 -} -{ - "1": 5, - "f": 6 -} - -mlr --ojson --jlistwrap cat ./reg_test/input/json-output-options.dkvp -[ -{ "a": 1, "b": "x", "c": 3 } -,{ "d": 4 } -,{ "1": 5, "f": 6 } -] - -mlr --ojson --jvstack --jlistwrap cat ./reg_test/input/json-output-options.dkvp -[ -{ - "a": 1, - "b": "x", - "c": 3 -} -,{ - "d": 4 -} -,{ - "1": 5, - "f": 6 -} -] - -mlr --ojson --jquoteall cat ./reg_test/input/json-output-options.dkvp -{ "a": "1", "b": "x", "c": "3" } -{ "d": "4" } -{ "1": "5", "f": "6" } - -mlr --ojson --jvstack --jquoteall cat ./reg_test/input/json-output-options.dkvp -{ - "a": "1", - "b": "x", - "c": "3" -} -{ - "d": "4" -} -{ - "1": "5", - "f": "6" -} - -mlr --ojson --jlistwrap --jquoteall cat ./reg_test/input/json-output-options.dkvp -[ -{ "a": "1", "b": "x", "c": "3" } -,{ "d": "4" } -,{ "1": "5", "f": "6" } -] - -mlr --ojson --jvstack --jlistwrap --jquoteall cat ./reg_test/input/json-output-options.dkvp -[ -{ - "a": "1", - "b": "x", - "c": "3" -} -,{ - "d": "4" -} -,{ - "1": "5", - "f": "6" -} -] - -mlr --ojson --jvquoteall cat ./reg_test/input/json-output-options.dkvp -{ "a": "1", "b": "x", "c": "3" } -{ "d": "4" } -{ "1": "5", "f": "6" } - -mlr --ojson --jvstack --jvquoteall cat ./reg_test/input/json-output-options.dkvp -{ - "a": "1", - "b": "x", - "c": "3" -} -{ - "d": "4" -} -{ - "1": "5", - "f": "6" -} - -mlr --ojson --jlistwrap --jvquoteall cat ./reg_test/input/json-output-options.dkvp -[ -{ "a": "1", "b": "x", "c": "3" } -,{ "d": "4" } -,{ "1": "5", "f": "6" } -] - -mlr --ojson --jvstack --jlistwrap --jvquoteall cat ./reg_test/input/json-output-options.dkvp -[ -{ - "a": "1", - "b": "x", - "c": "3" -} -,{ - "d": "4" -} -,{ - "1": "5", - "f": "6" -} -] - -mlr --ojson --jknquoteint cat ./reg_test/input/json-output-options.dkvp -{ "a": 1, "b": "x", "c": 3 } -{ "d": 4 } -{ "1": 5, "f": 6 } - -mlr --ojson --jvstack --jknquoteint cat ./reg_test/input/json-output-options.dkvp -{ - "a": 1, - "b": "x", - "c": 3 -} -{ - "d": 4 -} -{ - "1": 5, - "f": 6 -} - -mlr --ojson --jlistwrap --jknquoteint cat ./reg_test/input/json-output-options.dkvp -[ -{ "a": 1, "b": "x", "c": 3 } -,{ "d": 4 } -,{ "1": 5, "f": 6 } -] - -mlr --ojson --jvstack --jlistwrap --jknquoteint cat ./reg_test/input/json-output-options.dkvp -[ -{ - "a": 1, - "b": "x", - "c": 3 -} -,{ - "d": 4 -} -,{ - "1": 5, - "f": 6 -} -] - -mlr put -q --jvquoteall dump $* ./reg_test/input/json-output-options.dkvp -{ - "a": "1", - "b": "x", - "c": "3" -} -{ - "d": "4" -} -{ - "1": "5", - "f": "6" -} - -mlr put -q --jvquoteall o = $*; o[7] = 8; dump o ./reg_test/input/json-output-options.dkvp -{ - "a": "1", - "b": "x", - "c": "3", - "7": "8" -} -{ - "d": "4", - "7": "8" -} -{ - "1": "5", - "f": "6", - "7": "8" -} - -mlr put -q --jknquoteint dump $* ./reg_test/input/json-output-options.dkvp -{ - "a": 1, - "b": "x", - "c": 3 -} -{ - "d": 4 -} -{ - "1": 5, - "f": 6 -} - -mlr put -q --jknquoteint o = $*; o[7] = 8; dump o ./reg_test/input/json-output-options.dkvp -{ - "a": 1, - "b": "x", - "c": 3, - 7: 8 -} -{ - "d": 4, - 7: 8 -} -{ - "1": 5, - "f": 6, - 7: 8 -} - -mlr --ijson --opprint cat ./reg_test/input/small-non-nested-wrapped.json ./reg_test/input/small-non-nested-wrapped.json -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --icsv --ojson --rs lf cat -{ "col": "abc \"def\" \\ghi" } - -mlr --icsv --ojson --jvquoteall --rs lf cat -{ "col": "abc \"def\" \\ghi" } - -mlr --ijson --oxtab cat ./reg_test/input/arrays.json -a 1 -b 1 - -a 2 -b:0 2 -b:1 3 - -a 3 -b:c:0 4 -b:c:1 5 - -a 4 -b:c:d:0 4 -b:c:d:1 5 - -a 5 -b:0 6 -b:1 7 -b:2:0 8 -b:2:1 9 - -a 6 -b:0:0:0 11 - -mlr --ijson --oxtab --json-map-arrays-on-input cat ./reg_test/input/arrays.json -a 1 -b 1 - -a 2 -b:0 2 -b:1 3 - -a 3 -b:c:0 4 -b:c:1 5 - -a 4 -b:c:d:0 4 -b:c:d:1 5 - -a 5 -b:0 6 -b:1 7 -b:2:0 8 -b:2:1 9 - -a 6 -b:0:0:0 11 - -mlr --ijson --oxtab --json-skip-arrays-on-input cat ./reg_test/input/arrays.json -a 1 -b 1 - -a 2 - -a 3 - -a 4 - -a 5 - -a 6 - -mlr --ijson --oxtab --json-fatal-arrays-on-input cat ./reg_test/input/arrays.json -mlr: found array item within JSON object. This is valid but unmillerable JSON. -Use --json-skip-arrays-on-input to exclude these from input without fataling. -Or, --json-map-arrays-on-input to convert them to integer-indexed maps. -mlr: Unable to parse JSON data. - -mlr --json cat ./reg_test/input/escapes.json -{ "abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\xyz" } -{ "abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\\\xyz" } - - -================================================================ -FORMAT-CONVERSION KEYSTROKE-SAVERS - -mlr --d2t cat ./reg_test/input/abixy.dkvp -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --d2n cat ./reg_test/input/abixy.dkvp -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --d2j cat ./reg_test/input/abixy.dkvp -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --d2p cat ./reg_test/input/abixy.dkvp -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --d2x cat ./reg_test/input/abixy.dkvp -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --d2m cat ./reg_test/input/abixy.dkvp -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --c2t cat ./reg_test/input/abixy.csv -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --c2d cat ./reg_test/input/abixy.csv -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --c2n cat ./reg_test/input/abixy.csv -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --c2j cat ./reg_test/input/abixy.csv -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --c2p cat ./reg_test/input/abixy.csv -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --c2x cat ./reg_test/input/abixy.csv -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --c2m cat ./reg_test/input/abixy.csv -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --t2c cat ./reg_test/input/abixy.tsv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --t2d cat ./reg_test/input/abixy.tsv -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --t2n cat ./reg_test/input/abixy.tsv -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --t2j cat ./reg_test/input/abixy.tsv -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --t2p cat ./reg_test/input/abixy.tsv -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --t2x cat ./reg_test/input/abixy.tsv -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --t2m cat ./reg_test/input/abixy.tsv -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --n2c cat ./reg_test/input/abixy.nidx -1,2,3,4,5 -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --n2t cat ./reg_test/input/abixy.nidx -1 2 3 4 5 -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --n2d cat ./reg_test/input/abixy.nidx -1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 -1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797 -1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776 -1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463 -1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729 -1=zee,2=pan,3=6,4=0.5271261600918548,5=0.49322128674835697 -1=eks,2=zee,3=7,4=0.6117840605678454,5=0.1878849191181694 -1=zee,2=wye,3=8,4=0.5985540091064224,5=0.976181385699006 -1=hat,2=wye,3=9,4=0.03144187646093577,5=0.7495507603507059 -1=pan,2=wye,3=10,4=0.5026260055412137,5=0.9526183602969864 - -mlr --n2j cat ./reg_test/input/abixy.nidx -{ "1": "pan", "2": "pan", "3": 1, "4": 0.3467901443380824, "5": 0.7268028627434533 } -{ "1": "eks", "2": "pan", "3": 2, "4": 0.7586799647899636, "5": 0.5221511083334797 } -{ "1": "wye", "2": "wye", "3": 3, "4": 0.20460330576630303, "5": 0.33831852551664776 } -{ "1": "eks", "2": "wye", "3": 4, "4": 0.38139939387114097, "5": 0.13418874328430463 } -{ "1": "wye", "2": "pan", "3": 5, "4": 0.5732889198020006, "5": 0.8636244699032729 } -{ "1": "zee", "2": "pan", "3": 6, "4": 0.5271261600918548, "5": 0.49322128674835697 } -{ "1": "eks", "2": "zee", "3": 7, "4": 0.6117840605678454, "5": 0.1878849191181694 } -{ "1": "zee", "2": "wye", "3": 8, "4": 0.5985540091064224, "5": 0.976181385699006 } -{ "1": "hat", "2": "wye", "3": 9, "4": 0.03144187646093577, "5": 0.7495507603507059 } -{ "1": "pan", "2": "wye", "3": 10, "4": 0.5026260055412137, "5": 0.9526183602969864 } - -mlr --n2p cat ./reg_test/input/abixy.nidx -1 2 3 4 5 -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --n2x cat ./reg_test/input/abixy.nidx -1 pan -2 pan -3 1 -4 0.3467901443380824 -5 0.7268028627434533 - -1 eks -2 pan -3 2 -4 0.7586799647899636 -5 0.5221511083334797 - -1 wye -2 wye -3 3 -4 0.20460330576630303 -5 0.33831852551664776 - -1 eks -2 wye -3 4 -4 0.38139939387114097 -5 0.13418874328430463 - -1 wye -2 pan -3 5 -4 0.5732889198020006 -5 0.8636244699032729 - -1 zee -2 pan -3 6 -4 0.5271261600918548 -5 0.49322128674835697 - -1 eks -2 zee -3 7 -4 0.6117840605678454 -5 0.1878849191181694 - -1 zee -2 wye -3 8 -4 0.5985540091064224 -5 0.976181385699006 - -1 hat -2 wye -3 9 -4 0.03144187646093577 -5 0.7495507603507059 - -1 pan -2 wye -3 10 -4 0.5026260055412137 -5 0.9526183602969864 - -mlr --n2m cat ./reg_test/input/abixy.nidx -| 1 | 2 | 3 | 4 | 5 | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --j2c cat ./reg_test/input/abixy.json -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --j2t cat ./reg_test/input/abixy.json -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --j2d cat ./reg_test/input/abixy.json -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --j2n cat ./reg_test/input/abixy.json -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --j2p cat ./reg_test/input/abixy.json -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --j2x cat ./reg_test/input/abixy.json -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --j2m cat ./reg_test/input/abixy.json -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --p2c cat ./reg_test/input/abixy.pprint -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --p2t cat ./reg_test/input/abixy.pprint -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --p2d cat ./reg_test/input/abixy.pprint -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --p2n cat ./reg_test/input/abixy.pprint -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --p2j cat ./reg_test/input/abixy.pprint -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --p2x cat ./reg_test/input/abixy.pprint -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --p2m cat ./reg_test/input/abixy.pprint -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - -mlr --x2c cat ./reg_test/input/abixy.xtab -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --x2t cat ./reg_test/input/abixy.xtab -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --x2d cat ./reg_test/input/abixy.xtab -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --x2n cat ./reg_test/input/abixy.xtab -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --x2j cat ./reg_test/input/abixy.xtab -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --x2p cat ./reg_test/input/abixy.xtab -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 - -mlr --x2m cat ./reg_test/input/abixy.xtab -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - - -================================================================ -LF/CRLF AND AUTODETECT - -mlr --irs auto --ors lf cat ./reg_test/input/line-term-lf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --irs auto --ors lf cat ./reg_test/input/line-term-crlf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat ./reg_test/input/line-term-lf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr cat ./reg_test/input/line-term-crlf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- nidx -mlr --irs auto --ors lf --nidx --fs comma cat ./reg_test/input/line-term-lf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --irs auto --ors lf --nidx --fs comma cat ./reg_test/input/line-term-crlf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --nidx --fs comma cat ./reg_test/input/line-term-lf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - -mlr --nidx --fs comma cat ./reg_test/input/line-term-crlf.dkvp -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- csvlite -mlr --irs auto --ors lf --csvlite cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --irs auto --ors lf --csvlite cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --csvlite cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --csvlite cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - - ----------------------------------------------------------------- pprint -mlr --irs auto --ors lf --pprint cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --irs auto --ors lf --pprint cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --pprint cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --pprint cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - - ----------------------------------------------------------------- xtab -mlr --ifs auto --xtab cat ./reg_test/input/line-term-lf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --ifs auto --xtab cat ./reg_test/input/line-term-crlf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --fs auto --xtab cat ./reg_test/input/line-term-lf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --fs auto --xtab cat ./reg_test/input/line-term-crlf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - - ----------------------------------------------------------------- xtab -mlr --ifs auto --xtab cat ./reg_test/input/line-term-lf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --ifs auto --xtab cat ./reg_test/input/line-term-crlf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --fs auto --xtab cat ./reg_test/input/line-term-lf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - -mlr --fs auto --xtab cat ./reg_test/input/line-term-crlf.xtab -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 - - ----------------------------------------------------------------- csv -mlr --irs auto --ors lf --csv cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --irs auto --ors lf --csv cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --csv cat ./reg_test/input/line-term-lf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - -mlr --csv cat ./reg_test/input/line-term-crlf.csv -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 - - ----------------------------------------------------------------- json nowrap nostack -mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-lf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-crlf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --json cat ./reg_test/input/line-term-lf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --json cat ./reg_test/input/line-term-crlf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - - ----------------------------------------------------------------- json yeswrap nostack -mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - - ----------------------------------------------------------------- json nowrap yesstack -mlr --irs auto --json --jvstack cat ./reg_test/input/line-term-lf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-crlf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --json --jvstack cat ./reg_test/input/line-term-lf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --json --jvstack cat ./reg_test/input/line-term-crlf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - - ----------------------------------------------------------------- json yeswrap yesstack -mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - - ----------------------------------------------------------------- json nowrap nostack -mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-lf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --irs auto --ors lf --json cat ./reg_test/input/line-term-crlf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --json cat ./reg_test/input/line-term-lf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - -mlr --json cat ./reg_test/input/line-term-crlf.json -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } - - ----------------------------------------------------------------- json yeswrap nostack -mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --irs auto --ors lf --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --jlistwrap --json cat ./reg_test/input/line-term-lf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - -mlr --jlistwrap --json cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] - - ----------------------------------------------------------------- json nowrap yesstack -mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-lf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --irs auto --ors lf --json --jvstack cat ./reg_test/input/line-term-crlf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --json --jvstack cat ./reg_test/input/line-term-lf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - -mlr --json --jvstack cat ./reg_test/input/line-term-crlf.json -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} - - ----------------------------------------------------------------- json yeswrap yesstack -mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --irs auto --ors lf --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-lf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr --jlistwrap --json --jvstack cat ./reg_test/input/line-term-crlf-wrap.json -[ -{ - "a": "pan", - "b": "pan", - "i": 1, - "x": 0.3467901443380824, - "y": 0.7268028627434533 -} -,{ - "a": "eks", - "b": "pan", - "i": 2, - "x": 0.7586799647899636, - "y": 0.5221511083334797 -} -,{ - "a": "wye", - "b": "wye", - "i": 3, - "x": 0.20460330576630303, - "y": 0.33831852551664776 -} -,{ - "a": "eks", - "b": "wye", - "i": 4, - "x": 0.38139939387114097, - "y": 0.13418874328430463 -} -,{ - "a": "wye", - "b": "pan", - "i": 5, - "x": 0.5732889198020006, - "y": 0.8636244699032729 -} -,{ - "a": "zee", - "b": "pan", - "i": 6, - "x": 0.5271261600918548, - "y": 0.49322128674835697 -} -,{ - "a": "eks", - "b": "zee", - "i": 7, - "x": 0.6117840605678454, - "y": 0.1878849191181694 -} -,{ - "a": "zee", - "b": "wye", - "i": 8, - "x": 0.5985540091064224, - "y": 0.976181385699006 -} -,{ - "a": "hat", - "b": "wye", - "i": 9, - "x": 0.03144187646093577, - "y": 0.7495507603507059 -} -,{ - "a": "pan", - "b": "wye", - "i": 10, - "x": 0.5026260055412137, - "y": 0.9526183602969864 -} -] - -mlr lecat --mono -hello[CR]there[CR]how[CR]are[CR]you[CR]mlr lecat --mono -hello[LF] -there[LF] -how[LF] -are[LF] -you[LF] -mlr lecat --mono -hello[CR][LF] -there[CR][LF] -how[CR][LF] -are[CR][LF] -you[CR][LF] -mlr termcvt --cr2lf -mlr termcvt --cr2crlf -mlr termcvt --lf2cr -mlr termcvt --lf2crlf -mlr termcvt --crlf2cr -mlr termcvt --crlf2lf -mlr hex -00000000: 68 65 6c 6c 6f 0a 74 68 65 72 65 0a 68 6f 77 0a |hello.there.how.| -00000010: 61 72 65 0a 79 6f 75 0a |are.you.| -mlr hex -00000000: 68 65 6c 6c 6f 0d 0a 74 68 65 72 65 0d 0a 68 6f |hello..there..ho| -00000010: 77 0d 0a 61 72 65 0d 0a 79 6f 75 0d 0a |w..are..you..| -mlr hex -00000000: 68 65 6c 6c 6f 0d 74 68 65 72 65 0d 68 6f 77 0d |hello.there.how.| -00000010: 61 72 65 0d 79 6f 75 0d |are.you.| -mlr hex -00000000: 68 65 6c 6c 6f 0d 0a 74 68 65 72 65 0d 0a 68 6f |hello..there..ho| -00000010: 77 0d 0a 61 72 65 0d 0a 79 6f 75 0d 0a |w..are..you..| -mlr hex -00000000: 68 65 6c 6c 6f 0d 74 68 65 72 65 0d 68 6f 77 0d |hello.there.how.| -00000010: 61 72 65 0d 79 6f 75 0d |are.you.| -mlr hex -00000000: 68 65 6c 6c 6f 0a 74 68 65 72 65 0a 68 6f 77 0a |hello.there.how.| -00000010: 61 72 65 0a 79 6f 75 0a |are.you.| diff --git a/c/reg_test/expected/out-dev b/c/reg_test/expected/out-dev deleted file mode 100644 index e1b462325..000000000 --- a/c/reg_test/expected/out-dev +++ /dev/null @@ -1,695 +0,0 @@ - -================================================================ -OLD NULL-HANDLING - - ----------------------------------------------------------------- ok -mlr put $z = $x + $y ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=3 -x=1,y=,s=,z= -x=,y=,s=hurrah,z= - - ----------------------------------------------------------------- ok -mlr put $z = $y + $y ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=4 -x=1,y=,s=,z= -x=,y=,s=hurrah,z= - - ----------------------------------------------------------------- FIXME FOR SRECS -mlr put $z = $x + $nosuch ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,z=1 -x=1,y=,s=,z=1 -x=,y=,s=hurrah,z= - - ----------------------------------------------------------------- ok -mlr put $t = sub($s, "ell", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=hXo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - - ----------------------------------------------------------------- ok -mlr put $t = sub($s, "ell", "") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=ho -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - - ----------------------------------------------------------------- ok -mlr put $t = sub($nosuch, "ell", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t= -x=1,y=,s=,t= -x=,y=,s=hurrah,t= - - ----------------------------------------------------------------- ok -mlr put $t = gsub($s, "l", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=heXXo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - - ----------------------------------------------------------------- ok -mlr put $t = gsub($s, "l", "") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t=heo -x=1,y=,s=,t= -x=,y=,s=hurrah,t=hurrah - - ----------------------------------------------------------------- ok -mlr put $t = gsub($nosuch, "l", "X") ./reg_test/input/null-vs-empty.dkvp -x=1,y=2,s=hello,t= -x=1,y=,s=,t= -x=,y=,s=hurrah,t= - - -================================================================ -NULLITY PREDICATES - -mlr --opprint filter isnull($x) ./reg_test/input/nullvals.dkvp -a x y z -b - 6 - -b - - - - -mlr --opprint filter isnull($y) ./reg_test/input/nullvals.dkvp -a x y z -b 5 - - -b - - - - -mlr --opprint filter isnull($z) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint filter isnull($nosuch) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - -b - 6 - -b - - - - -mlr --opprint filter isnotnull($x) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b 5 - - - -mlr --opprint filter isnotnull($y) ./reg_test/input/nullvals.dkvp -a x y z -b 1 2 - -b 3 4 - -b - 6 - - -mlr --opprint filter isnotnull($z) ./reg_test/input/nullvals.dkvp - -mlr --opprint filter isnotnull($nosuch) ./reg_test/input/nullvals.dkvp - -mlr --opprint put $f=isnull($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - true -b - - - true - -mlr --opprint put $f=isnull($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - true -b - 6 - false -b - - - true - -mlr --opprint put $f=isnull($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=isnull($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - true -b - - - true - -mlr --opprint put $f=isnotnull($x) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - true -b - 6 - false -b - - - false - -mlr --opprint put $f=isnotnull($y) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - true -b 3 4 - true -b 5 - - false -b - 6 - true -b - - - false - -mlr --opprint put $f=isnotnull($z) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - -mlr --opprint put $f=isnotnull($nosuch) ./reg_test/input/nullvals.dkvp -a x y z f -b 1 2 - false -b 3 4 - false -b 5 - - false -b - 6 - false -b - - - false - - -================================================================ -TRI-SPLIT-NULL HANDLING - - ----------------------------------------------------------------- ok -mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy -sum=4.536294 - - ----------------------------------------------------------------- ok -mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum=0.777892 -a=zee,sum=1.125680 -a=hat,sum=0.031442 - - ----------------------------------------------------------------- ok -mlr put $nonesuch = @nonesuch ./reg_test/input/abixy -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nonesuch= -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006,nonesuch= -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= - - ----------------------------------------------------------------- ok -mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het -sum=3.963005 - - ----------------------------------------------------------------- ok -mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum= -a=zee,sum=1.125680 - - ----------------------------------------------------------------- ok -mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,nonesuch= -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,nonesuch= -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= - -mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=0.346790 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.105470 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.310073 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.691473 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.264762 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.791888 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.403672 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.002226 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.033668 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=4.536294 -sum=4.536294 - -mlr put -q @sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum} ./reg_test/input/abixy-het -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=0.346790 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.105470 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.310073 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=1.691473 -sumtype=MT_FLOAT,xtype=MT_ABSENT,sum=1.691473 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.218599 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=2.830383 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.428937 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.460379 -sumtype=MT_FLOAT,xtype=MT_FLOAT,sum=3.963005 -sum=3.963005 - -mlr put $z = $x + $y ./reg_test/input/typeof.dkvp -x=1,y=2,z=3 -x=1,y=,z= -x=,y=2,z= -x=,y=,z= - -mlr put $z = $x + $y ./reg_test/input/typeof.dkvp -x=1,y=2,z=3 -x=1,y=,z= -x=,y=2,z= -x=,y=,z= - -mlr put $z = $x + $u ./reg_test/input/typeof.dkvp -x=1,y=2,z=1 -x=1,y=,z=1 -x=,y=2,z= -x=,y=,z= - -mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp -s=2 -x=1,y=2 -s= -x=1,y= -s= -x=,y=2 -s= -x=,y= - -mlr put @s = @s + $y; emitp @s ./reg_test/input/typeof.dkvp -s=2 -x=1,y=2 -s= -x=1,y= -s= -x=,y=2 -s= -x=,y= - -mlr put @s = @s + $u; emitp @s ./reg_test/input/typeof.dkvp -s= -x=1,y=2 -s= -x=1,y= -s= -x=,y=2 -s= -x=,y= - -mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_INT -x=MT_INT,y=MT_VOID,z=MT_VOID -x=MT_VOID,y=MT_INT,z=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_VOID - -mlr put $z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_INT -x=MT_INT,y=MT_VOID,z=MT_VOID -x=MT_VOID,y=MT_INT,z=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_VOID - -mlr put $z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_INT -x=MT_INT,y=MT_VOID,z=MT_INT -x=MT_VOID,y=MT_INT,z=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_VOID - -mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_INT -x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID - -mlr put @s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_INT -x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID - -mlr put @s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s) ./reg_test/input/typeof.dkvp -x=MT_INT,y=MT_INT,z=MT_ABSENT,s=MT_VOID -x=MT_INT,y=MT_VOID,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_INT,z=MT_ABSENT,s=MT_VOID -x=MT_VOID,y=MT_VOID,z=MT_ABSENT,s=MT_VOID - - -================================================================ -ABSENT-HANDLING - - ----------------------------------------------------------------- FIXME FOR SRECS -mlr put $a = $a * 2 ./reg_test/input/absent.dkvp -a=2,b=2 -a=,b=4 -x=,b=6,a=2 -a=14,b=8 - - ----------------------------------------------------------------- FIXME FOR SRECS -mlr put $new = $a * 2 ./reg_test/input/absent.dkvp -a=1,b=2,new=2 -a=,b=4,new= -x=,b=6,new=2 -a=7,b=8,new=14 - - ----------------------------------------------------------------- ok for oosvars -mlr put $new = @nonesuch * 2 ./reg_test/input/absent.dkvp -a=1,b=2,new=2 -a=,b=4,new=2 -x=,b=6,new=2 -a=7,b=8,new=2 - - ----------------------------------------------------------------- ok -mlr put begin {@somesuch = 10 }; $new = @somesuch * 2 ./reg_test/input/absent.dkvp -a=1,b=2,new=20 -a=,b=4,new=20 -x=,b=6,new=20 -a=7,b=8,new=20 - - ----------------------------------------------------------------- FIXME FOR SRECS -mlr put $new = @nonesuch * $a ./reg_test/input/absent.dkvp -a=1,b=2,new=1 -a=,b=4,new= -x=,b=6,new= -a=7,b=8,new=7 - - ----------------------------------------------------------------- ok -mlr put begin {@somesuch = 10 }; $new = @somesuch * $a ./reg_test/input/absent.dkvp -a=1,b=2,new=10 -a=,b=4,new= -x=,b=6,new=10 -a=7,b=8,new=70 - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=1 -a=1,b=2 -sum= -a=,b=4 -sum= -x=,b=6 -sum= -a=7,b=8 -sum= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp -product=1 -a=1,b=2 -product= -a=,b=4 -product= -x=,b=6 -product= -a=7,b=8 -product= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put begin { @sum = 10 }; @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=11 -a=1,b=2 -sum= -a=,b=4 -sum= -x=,b=6 -sum= -a=7,b=8 -sum= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put begin { @product = 10 }; @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp -product=10 -a=1,b=2 -product= -a=,b=4 -product= -x=,b=6 -product= -a=7,b=8 -product= - - -================================================================ -COMPARE OLD TESTS TO NEW - - ----------------------------------------------------------------- raw input -mlr cat ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - - ----------------------------------------------------------------- ok -mlr put -q @sum += $x; end{emitp @sum} ./reg_test/input/abixy-het -sum=3.963005 - - ----------------------------------------------------------------- ok -mlr put -q @sum[$a] += $x; end{emitp @sum, "a"} ./reg_test/input/abixy-het -a=pan,sum=0.849416 -a=eks,sum=1.751863 -a=wye,sum= -a=zee,sum=1.125680 - - ----------------------------------------------------------------- ok -mlr put $nonesuch = @nonesuch ./reg_test/input/abixy-het -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nonesuch= -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nonesuch= -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nonesuch= -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nonesuch= -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,nonesuch= -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,nonesuch= -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,nonesuch= -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,nonesuch= -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,nonesuch= -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,nonesuch= - - ----------------------------------------------------------------- raw input -mlr cat ./reg_test/input/absent.dkvp -a=1,b=2 -a=,b=4 -x=,b=6 -a=7,b=8 - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=1 -a=1,b=2 -sum= -a=,b=4 -sum= -x=,b=6 -sum= -a=7,b=8 -sum= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp -product=1 -a=1,b=2 -product= -a=,b=4 -product= -x=,b=6 -product= -a=7,b=8 -product= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put begin { @sum = 10 }; @sum = @sum + $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=11 -a=1,b=2 -sum= -a=,b=4 -sum= -x=,b=6 -sum= -a=7,b=8 -sum= - - ----------------------------------------------------------------- FIXME AND COMPARE TO ABOVE -mlr put begin { @product = 10 }; @product = @product * $a; emit @product; end { emit @product } ./reg_test/input/absent.dkvp -product=10 -a=1,b=2 -product= -a=,b=4 -product= -x=,b=6 -product= -a=7,b=8 -product= - - ----------------------------------------------------------------- COMPARE -mlr put emit @sum; @sum += $x; emit @sum; end { emit @sum } ./reg_test/input/abixy-het -sum=0.346790 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -sum=0.346790 -sum=1.105470 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -sum=1.105470 -sum=1.310073 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -sum=1.310073 -sum=1.691473 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -sum=1.691473 -sum=1.691473 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -sum=1.691473 -sum=2.218599 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -sum=2.218599 -sum=2.830383 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -sum=2.830383 -sum=3.428937 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -sum=3.428937 -sum=3.460379 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -sum=3.460379 -sum=3.963005 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -sum=3.963005 - - ----------------------------------------------------------------- COMPARE -mlr put emit @sum; @sum += $a; emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=1 -a=1,b=2 -sum=1 -sum= -a=,b=4 -sum= -sum= -x=,b=6 -sum= -sum= -a=7,b=8 -sum= - -mlr put emit @sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);emit @sum; end { emit @sum } ./reg_test/input/abixy-het -sum=0.346790 -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ostype=MT_UNINIT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=0.346790 -sum=1.105470 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=1.105470 -sum=1.310073 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=1.310073 -sum=1.691473 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=1.691473 -sum=1.691473 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729,ostype=MT_FLOAT,xtype=MT_ABSENT,nstype=MT_FLOAT -sum=1.691473 -sum=2.218599 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=2.218599 -sum=2.830383 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=2.830383 -sum=3.428937 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=3.428937 -sum=3.460379 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=3.460379 -sum=3.963005 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864,ostype=MT_FLOAT,xtype=MT_FLOAT,nstype=MT_FLOAT -sum=3.963005 - -mlr put emit @sum; $ostype=typeof(@sum);$atype=typeof($a);@sum += $a; $nstype=typeof(@sum);emit @sum; end { emit @sum } ./reg_test/input/absent.dkvp -sum=1 -a=1,b=2,ostype=MT_UNINIT,atype=MT_INT,nstype=MT_INT -sum=1 -sum= -a=,b=4,ostype=MT_INT,atype=MT_VOID,nstype=MT_VOID -sum= -sum= -x=,b=6,ostype=MT_VOID,atype=MT_ABSENT,nstype=MT_VOID -sum= -sum= -a=7,b=8,ostype=MT_VOID,atype=MT_INT,nstype=MT_VOID -sum= - - -================================================================ -NARROW IN - - ----------------------------------------------------------------- -mlr cat -x=1 -x= -x=7 - -mlr put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1,osum=,ostype=MT_UNINIT,xtype=MT_INT,nstype=MT_INT,nsum=1 -x=,osum=1,ostype=MT_INT,xtype=MT_VOID,nstype=MT_VOID,nsum= -x=7,osum=,ostype=MT_VOID,xtype=MT_INT,nstype=MT_VOID,nsum= -sum= - - ----------------------------------------------------------------- -mlr cat -x=1 -xxx= -x=7 - -mlr put $osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum += $x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum } -x=1,osum=,ostype=MT_UNINIT,xtype=MT_INT,nstype=MT_INT,nsum=1 -xxx=,osum=1,ostype=MT_INT,xtype=MT_ABSENT,nstype=MT_INT,nsum=1 -x=7,osum=1,ostype=MT_INT,xtype=MT_INT,nstype=MT_INT,nsum=8 -sum=8 - - ----------------------------------------------------------------- -mlr cat -x=1 -x= -y= -x=7 - -mlr --ofs tab put $xtype=typeof($x);$sum = $x + 10; $stype=typeof($sum) -x=1 xtype=MT_INT sum=11 stype=MT_INT -x= xtype=MT_VOID sum= stype=MT_VOID -y= xtype=MT_ABSENT sum=10 stype=MT_INT -x=7 xtype=MT_INT sum=17 stype=MT_INT - diff --git a/c/reg_test/input/Makefile.am b/c/reg_test/input/Makefile.am deleted file mode 100644 index d9a422883..000000000 --- a/c/reg_test/input/Makefile.am +++ /dev/null @@ -1,208 +0,0 @@ -SUBDIRS= rfc-csv \ - comments - -EXTRA_DIST= \ - a.csv \ - a.pprint \ - abixy \ - abixy-het \ - abixy-wide \ - abixy-wide-short \ - abixy.csv \ - abixy.dkvp \ - abixy.json \ - abixy.md \ - abixy.nidx \ - abixy.pprint \ - abixy.tsv \ - abixy.xtab \ - absent.dkvp \ - arrays.json \ - b.csv \ - b.pprint \ - bom.csv \ - bom-dquote-header.csv \ - braced.csv \ - c.csv \ - c.pprint \ - capture-lengths.dkvp \ - capture.dkvp \ - clean-whitespace.csv \ - comma-at-eof.csv \ - comments \ - d.csv \ - d.pprint \ - date1.csv \ - date2.csv \ - dot-match.csv \ - dots.pprint-crlf \ - dots.xtab \ - double-ps.dkvp \ - e.csv \ - e.pprint \ - embedded-ips.xtab \ - env-assign.sh \ - env-var.dkvp \ - escapes.json \ - example.usv \ - f.csv \ - f.pprint \ - fill-down.csv \ - filter-example.dsl \ - filter-script-piece-1 \ - filter-script-piece-2 \ - freq.dkvp \ - from-first.csv \ - fsec2xhms \ - g.csv \ - g.pprint \ - gmt2sec \ - gsub.dat \ - having-fields-regex.dkvp \ - het-join-left \ - het-join-right-r0 \ - het-join-right-r1 \ - het-join-right-r11 \ - het-join-right-r12 \ - het-join-right-r13 \ - het-join-right-r14 \ - het-join-right-r15 \ - het-join-right-r16 \ - het-join-right-r2 \ - het-join-right-r22 \ - het-join-right-r23 \ - het-join-right-r24 \ - het-join-right-r25 \ - het-join-right-r26 \ - het-join-right-r3 \ - het-join-right-r33 \ - het-join-right-r34 \ - het-join-right-r35 \ - het-join-right-r36 \ - het-join-right-r4 \ - het-join-right-r44 \ - het-join-right-r45 \ - het-join-right-r46 \ - het-join-right-r5 \ - het-join-right-r55 \ - het-join-right-r56 \ - het-join-right-r6 \ - het-join-right-r66 \ - het.csv \ - het.dkvp \ - int-float.dkvp \ - int64arith.dkvp \ - int64io.dkvp \ - ints.dkvp \ - join-het.dkvp \ - joina.dkvp \ - joinb.dkvp \ - json-output-options.dkvp \ - line-ending-cr.bin \ - line-ending-crlf.bin \ - line-ending-lf.bin \ - line-term-lf.dkvp \ - line-term-crlf.dkvp \ - line-term-lf.csv \ - line-term-crlf.csv \ - line-term-lf.json \ - line-term-crlf.json \ - line-term-lf-wrap.json \ - line-term-crlf-wrap.json \ - line-term-lf.pprint \ - line-term-crlf.pprint \ - line-term-lf.xtab \ - line-term-crlf.xtab \ - logi.dkvp \ - mand.mlr \ - merge-fields-abxy.dkvp \ - merge-fields-in-out.csv \ - merge-fields-in-out-mixed.csv \ - minmax.dkvp \ - missings.dkvp \ - mixed-types.xtab \ - modarith.dat \ - multi-format-join-a.csv \ - multi-format-join-a.dkvp \ - multi-format-join-a.json \ - multi-format-join-b.csv \ - multi-format-join-b.dkvp \ - multi-format-join-b.json \ - multi-ips.dkvp \ - multi-sep.csv-crlf \ - multi-sep.dkvp-crlf \ - near-ovf.dkvp \ - nest-explode-vary-fs-ps.dkvp \ - nest-explode.dkvp \ - null-fields.csv \ - null-fields.nidx \ - null-vs-empty.dkvp \ - nullvals.dkvp \ - ofmt.dat \ - page-aligned-final-ifs.dkvp \ - page-aligned-final-irs.dkvp \ - page-aligned-final-no-ifs.dkvp \ - page-aligned-no-final-eol.xtab \ - page-aligned-no-final-irs.csvl \ - page-aligned-no-final-irs.dkvp \ - page-aligned-no-final-irs.nidx \ - put-example.dsl \ - put-script-piece-1 \ - put-script-piece-2 \ - put-script-piece-3 \ - quote-original.csv \ - ragged.csv \ - regex.dkvp \ - regularize.dkvp \ - remove-empty-columns.csv \ - reorder.dkvp \ - repeat-input.dat \ - repeats.dkvp \ - reshape-long-ragged.dkvp \ - reshape-long.tbl \ - reshape-wide-ragged.dkvp \ - reshape-wide.tbl \ - rfc-csv \ - scinot.dkvp \ - scinot1.dkvp \ - sec2gmt \ - sec2xhms \ - short \ - short-circuit.dkvp \ - sieve.mlr \ - simple.tsv \ - small \ - small-nested.json \ - small-non-nested-wrapped.json \ - small-non-nested.json \ - sort-het.dkvp \ - sort-within-records.dkvp \ - space-pad.dkvp \ - space-pad.nidx \ - space-pad.pprint \ - string-numeric-ordering.dkvp \ - sub.dat \ - subtab.dkvp \ - subtab1.mlr \ - subtab2.mlr \ - subtab3.mlr \ - subtab4.mlr \ - test-dsl-stack-allocation.mlr \ - trivial-records.csv \ - truncated.csv \ - truncated.dkvp \ - truncated.nidx \ - truncated.pprint \ - truncated.xtab-crlf \ - typeof.dkvp \ - unset1.dkvp \ - unset4.dkvp \ - utf8-1.csv \ - utf8-2.csv \ - utf8-align.dkvp \ - utf8-align.nidx \ - valgrind.txt \ - x0to10.dat \ - xy40.dkvp \ - xyz345 \ - xyz2 diff --git a/c/reg_test/input/Makefile.in b/c/reg_test/input/Makefile.in deleted file mode 100644 index 1b778b37e..000000000 --- a/c/reg_test/input/Makefile.in +++ /dev/null @@ -1,826 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/reg_test/input -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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 -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 -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 -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@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = rfc-csv \ - comments - -EXTRA_DIST = \ - a.csv \ - a.pprint \ - abixy \ - abixy-het \ - abixy-wide \ - abixy-wide-short \ - abixy.csv \ - abixy.dkvp \ - abixy.json \ - abixy.md \ - abixy.nidx \ - abixy.pprint \ - abixy.tsv \ - abixy.xtab \ - absent.dkvp \ - arrays.json \ - b.csv \ - b.pprint \ - bom.csv \ - bom-dquote-header.csv \ - braced.csv \ - c.csv \ - c.pprint \ - capture-lengths.dkvp \ - capture.dkvp \ - clean-whitespace.csv \ - comma-at-eof.csv \ - comments \ - d.csv \ - d.pprint \ - date1.csv \ - date2.csv \ - dot-match.csv \ - dots.pprint-crlf \ - dots.xtab \ - double-ps.dkvp \ - e.csv \ - e.pprint \ - embedded-ips.xtab \ - env-assign.sh \ - env-var.dkvp \ - escapes.json \ - example.usv \ - f.csv \ - f.pprint \ - fill-down.csv \ - filter-example.dsl \ - filter-script-piece-1 \ - filter-script-piece-2 \ - freq.dkvp \ - from-first.csv \ - fsec2xhms \ - g.csv \ - g.pprint \ - gmt2sec \ - gsub.dat \ - having-fields-regex.dkvp \ - het-join-left \ - het-join-right-r0 \ - het-join-right-r1 \ - het-join-right-r11 \ - het-join-right-r12 \ - het-join-right-r13 \ - het-join-right-r14 \ - het-join-right-r15 \ - het-join-right-r16 \ - het-join-right-r2 \ - het-join-right-r22 \ - het-join-right-r23 \ - het-join-right-r24 \ - het-join-right-r25 \ - het-join-right-r26 \ - het-join-right-r3 \ - het-join-right-r33 \ - het-join-right-r34 \ - het-join-right-r35 \ - het-join-right-r36 \ - het-join-right-r4 \ - het-join-right-r44 \ - het-join-right-r45 \ - het-join-right-r46 \ - het-join-right-r5 \ - het-join-right-r55 \ - het-join-right-r56 \ - het-join-right-r6 \ - het-join-right-r66 \ - het.csv \ - het.dkvp \ - int-float.dkvp \ - int64arith.dkvp \ - int64io.dkvp \ - ints.dkvp \ - join-het.dkvp \ - joina.dkvp \ - joinb.dkvp \ - json-output-options.dkvp \ - line-ending-cr.bin \ - line-ending-crlf.bin \ - line-ending-lf.bin \ - line-term-lf.dkvp \ - line-term-crlf.dkvp \ - line-term-lf.csv \ - line-term-crlf.csv \ - line-term-lf.json \ - line-term-crlf.json \ - line-term-lf-wrap.json \ - line-term-crlf-wrap.json \ - line-term-lf.pprint \ - line-term-crlf.pprint \ - line-term-lf.xtab \ - line-term-crlf.xtab \ - logi.dkvp \ - mand.mlr \ - merge-fields-abxy.dkvp \ - merge-fields-in-out.csv \ - merge-fields-in-out-mixed.csv \ - minmax.dkvp \ - missings.dkvp \ - mixed-types.xtab \ - modarith.dat \ - multi-format-join-a.csv \ - multi-format-join-a.dkvp \ - multi-format-join-a.json \ - multi-format-join-b.csv \ - multi-format-join-b.dkvp \ - multi-format-join-b.json \ - multi-ips.dkvp \ - multi-sep.csv-crlf \ - multi-sep.dkvp-crlf \ - near-ovf.dkvp \ - nest-explode-vary-fs-ps.dkvp \ - nest-explode.dkvp \ - null-fields.csv \ - null-fields.nidx \ - null-vs-empty.dkvp \ - nullvals.dkvp \ - ofmt.dat \ - page-aligned-final-ifs.dkvp \ - page-aligned-final-irs.dkvp \ - page-aligned-final-no-ifs.dkvp \ - page-aligned-no-final-eol.xtab \ - page-aligned-no-final-irs.csvl \ - page-aligned-no-final-irs.dkvp \ - page-aligned-no-final-irs.nidx \ - put-example.dsl \ - put-script-piece-1 \ - put-script-piece-2 \ - put-script-piece-3 \ - quote-original.csv \ - ragged.csv \ - regex.dkvp \ - regularize.dkvp \ - remove-empty-columns.csv \ - repeat-input.dat \ - repeats.dkvp \ - reshape-long-ragged.dkvp \ - reshape-long.tbl \ - reshape-wide-ragged.dkvp \ - reshape-wide.tbl \ - rfc-csv \ - scinot.dkvp \ - scinot1.dkvp \ - sec2gmt \ - sec2xhms \ - short \ - short-circuit.dkvp \ - sieve.mlr \ - simple.tsv \ - small \ - small-nested.json \ - small-non-nested-wrapped.json \ - small-non-nested.json \ - sort-het.dkvp \ - sort-within-records.dkvp \ - space-pad.dkvp \ - space-pad.nidx \ - space-pad.pprint \ - string-numeric-ordering.dkvp \ - sub.dat \ - subtab.dkvp \ - subtab1.mlr \ - subtab2.mlr \ - subtab3.mlr \ - subtab4.mlr \ - test-dsl-stack-allocation.mlr \ - trivial-records.csv \ - truncated.csv \ - truncated.dkvp \ - truncated.nidx \ - truncated.pprint \ - truncated.xtab-crlf \ - typeof.dkvp \ - unset1.dkvp \ - unset4.dkvp \ - utf8-1.csv \ - utf8-2.csv \ - utf8-align.dkvp \ - utf8-align.nidx \ - valgrind.txt \ - x0to10.dat \ - xy40.dkvp \ - xyz345 \ - xyz2 - -all: all-recursive - -.SUFFIXES: -$(srcdir)/Makefile.in: $(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 c/reg_test/input/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/reg_test/input/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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 - -# 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: $(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 -installdirs: installdirs-recursive -installdirs-am: -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 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: info-recursive - -info-am: - -install-data-am: - -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-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: - -.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 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-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 \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean 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: diff --git a/c/reg_test/input/a.pprint b/c/reg_test/input/a.pprint deleted file mode 100644 index d0c04ad13..000000000 --- a/c/reg_test/input/a.pprint +++ /dev/null @@ -1,3 +0,0 @@ -a b c -1 2 3 -4 5 6 diff --git a/c/reg_test/input/abixy b/c/reg_test/input/abixy deleted file mode 100644 index 547de9e99..000000000 --- a/c/reg_test/input/abixy +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/abixy-het b/c/reg_test/input/abixy-het deleted file mode 100644 index 3923455f1..000000000 --- a/c/reg_test/input/abixy-het +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -aaa=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,bbb=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,xxx=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,yyy=0.976181385699006 -aaa=hat,bbb=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/abixy-wide b/c/reg_test/input/abixy-wide deleted file mode 100644 index 4cc0ef6bd..000000000 --- a/c/reg_test/input/abixy-wide +++ /dev/null @@ -1,2000 +0,0 @@ -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 -a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 -a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 -a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 -a=dog,b=hat,i=7,x=0.8500003149528544,y=0.2984098741712895,x2=0.7225005354199517,xy=0.25364848703063775,y2=0.08904845300292483 -a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 -a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 -a=wye,b=hat,i=10,x=0.3834648944206174,y=0.4999709279216641,x2=0.14704532525301522,xy=0.19172129908885902,y2=0.24997092876684981 -a=pan,b=hat,i=11,x=0.025474999754416028,y=0.7861954915044592,x2=0.0006489756124874967,xy=0.020028329952999087,y2=0.6181033508619382 -a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 -a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 -a=dog,b=dog,i=14,x=0.5440047442770544,y=0.933608851612059,x2=0.2959411617959433,xy=0.5078876445760125,y2=0.8716254878083876 -a=wye,b=dog,i=15,x=0.4689175303764642,y=0.09048353045392021,x2=0.21988365029436224,xy=0.04242931364019586,y2=0.008187269283405506 -a=pan,b=pan,i=16,x=0.3959177828066379,y=0.6339858483805666,x2=0.15675089074252413,xy=0.25100627142161924,y2=0.4019380559468268 -a=dog,b=hat,i=17,x=0.34033844788864975,y=0.8845934733681523,x2=0.11583025911125516,xy=0.3010611697385466,y2=0.782505613125532 -a=wye,b=wye,i=18,x=0.6770613653962891,y=0.896307226056897,x2=0.4584120925122874,xy=0.6068549942886431,y2=0.8033666434818095 -a=dog,b=wye,i=19,x=0.4865373244199632,y=0.44117766146315884,x2=0.23671856805373653,xy=0.2146493990021416,y2=0.1946377289741016 -a=dog,b=dog,i=20,x=0.3223311725542929,y=0.08115611029827985,x2=0.10389738480022534,xy=0.026159144192390068,y2=0.006586314238746564 -a=dog,b=dog,i=21,x=0.9699029150382065,y=0.9391556988975561,x2=0.9407116645996103,xy=0.9108898500354838,y2=0.8820134267717571 -a=pan,b=hat,i=22,x=0.26484467292256164,y=0.45079159705782246,x2=0.07014270077545866,xy=0.1193897530790182,y2=0.20321306397794217 -a=wye,b=hat,i=23,x=0.298540818680359,y=0.0037836288354773373,x2=0.08912662041833898,xy=0.0011295676501260176,y2=1.4315847164655591e-05 -a=cat,b=dog,i=24,x=0.03302652200852407,y=0.42137227890920304,x2=0.001090751155979525,xy=0.013916460843176739,y2=0.1775545974331352 -a=hat,b=hat,i=25,x=0.16707716998324063,y=0.4457018161567563,x2=0.027914780729608683,xy=0.07446659809986143,y2=0.198650108925431 -a=hat,b=pan,i=26,x=0.06110349364580614,y=0.25884152875789423,x2=0.0037336369357230713,xy=0.01581612170772874,y2=0.06699893700972379 -a=wye,b=hat,i=27,x=0.20149350928735854,y=0.679023911581996,x2=0.04059963428493484,xy=0.13681891083468545,y2=0.4610734725001144 -a=dog,b=hat,i=28,x=0.017464614203827944,y=0.4877770939619681,x2=0.00030501274928854875,xy=0.008518838763510107,y2=0.23792649339398267 -a=cat,b=pan,i=29,x=0.6919668720154277,y=0.26988079254367914,x2=0.4788181519668153,xy=0.18674856783349422,y2=0.07283564218400437 -a=cat,b=wye,i=30,x=0.7578438094718101,y=0.2777757581815844,x2=0.5743272395547452,xy=0.21051063875925224,y2=0.07715937183335406 -a=cat,b=wye,i=31,x=0.8651145139700118,y=0.7249926402997512,x2=0.7484231222815698,xy=0.6272016556447548,y2=0.5256143284888044 -a=pan,b=hat,i=32,x=0.447405904410204,y=0.21332839270281612,x2=0.2001720433011126,xy=0.09544438247357862,y2=0.04550900313316693 -a=pan,b=wye,i=33,x=0.5062113125043399,y=0.6524477940033689,x2=0.2562498929073665,xy=0.3302764541430066,y2=0.42568812389986255 -a=wye,b=dog,i=34,x=0.4894262274410983,y=0.3656319118417568,x2=0.23953803210722568,xy=0.17894984724478727,y2=0.13368669495705823 -a=hat,b=pan,i=35,x=0.9421777782395372,y=0.6146368699441981,x2=0.8876989658083905,xy=0.579097200548128,y2=0.37777848189480107 -a=wye,b=cat,i=36,x=0.6903385961939384,y=0.12453739987209256,x2=0.4765673773950176,xy=0.08597297380134354,y2=0.01550956396690148 -a=hat,b=cat,i=37,x=0.7984210083195517,y=0.6470047092959555,x2=0.6374761065260096,xy=0.5165821523835752,y2=0.4186150938511439 -a=dog,b=cat,i=38,x=0.7956841726564652,y=0.2999281899559054,x2=0.6331133026160035,xy=0.23864811368141572,y2=0.08995691913022569 -a=hat,b=dog,i=39,x=0.5434267154348226,y=0.3612723556363975,x2=0.2953125950482796,xy=0.1963250496008886,y2=0.13051771494707165 -a=pan,b=dog,i=40,x=0.2404413468975618,y=0.0765949802658491,x2=0.057812041297913654,xy=0.018416600220712925,y2=0.005866791001925813 -a=cat,b=dog,i=41,x=0.8872583855262857,y=0.7666563573215487,x2=0.787227442686711,xy=0.6802222818505804,y2=0.5877619702215462 -a=hat,b=dog,i=42,x=0.20947794695668354,y=0.799420366596795,x2=0.04388101026118712,xy=0.16746093715005594,y2=0.6390729225297542 -a=cat,b=cat,i=43,x=0.5807454568810496,y=0.0360767170935169,x2=0.33726528568797903,xy=0.020951389551242844,y2=0.0013015295162456544 -a=pan,b=wye,i=44,x=0.6714396627452867,y=0.8691227831036271,x2=0.4508312207075043,xy=0.5835635083713443,y2=0.7553744121097945 -a=dog,b=dog,i=45,x=0.6489232347198245,y=0.2874511000815766,x2=0.4211013645592404,xy=0.1865336976887087,y2=0.08262813493810857 -a=pan,b=pan,i=46,x=0.07003615899489535,y=0.645706837635313,x2=0.00490506356675826,xy=0.04522282674471786,y2=0.4169373201689965 -a=pan,b=hat,i=47,x=0.3233978593086597,y=0.644896974713749,x2=0.10458617540542367,xy=0.20855830109705728,y2=0.41589210799494575 -a=cat,b=cat,i=48,x=0.4850891731208423,y=0.6464096154902582,x2=0.23531150587906252,xy=0.31356630587553097,y2=0.41784539099826346 -a=wye,b=cat,i=49,x=0.19369511371092585,y=0.07897643847420421,x2=0.037517797075488496,xy=0.015297350230744924,y2=0.006237277834069763 -a=hat,b=hat,i=50,x=0.5979364499843741,y=0.01637946256325762,x2=0.35752799821991593,xy=0.009793877697726217,y2=0.0002682867938611578 -a=wye,b=dog,i=51,x=0.4964418953954285,y=0.4045337696709349,x2=0.24645455550380557,xy=0.20082751136689664,y2=0.16364757080417702 -a=dog,b=hat,i=52,x=0.4240421413278761,y=0.685508287221285,x2=0.17981173762193045,xy=0.2906844020113184,y2=0.46992161184905973 -a=pan,b=hat,i=53,x=0.8506849616367519,y=0.29553024216317647,x2=0.723664903954922,xy=0.25140313271708176,y2=0.08733812403302572 -a=cat,b=hat,i=54,x=0.5285609997486995,y=0.8641537366322317,x2=0.2793767304553447,xy=0.45675796297090676,y2=0.7467616805354484 -a=wye,b=hat,i=55,x=0.06564514633598773,y=0.5764673221543989,x2=0.004309285237473243,xy=0.037842281720740494,y2=0.3323145735118635 -a=hat,b=hat,i=56,x=0.6457343407175848,y=0.2098352953222723,x2=0.41697283878197394,xy=0.13549785608420722,y2=0.04403085116298523 -a=wye,b=wye,i=57,x=0.9589282669375345,y=0.1806724444876513,x2=0.9195434211318234,xy=0.17325191407591137,y2=0.03264253219714344 -a=hat,b=hat,i=58,x=0.2095505109133845,y=0.17354923704865088,x2=0.04391141662406048,xy=0.03636733129217287,y2=0.030119337680168817 -a=cat,b=pan,i=59,x=0.10509164053821951,y=0.49751015159809986,x2=0.011044252911014343,xy=0.05228415801586261,y2=0.2475163509431643 -a=hat,b=pan,i=60,x=0.9078087025266115,y=0.22758683685265058,x2=0.8241166403830498,xy=0.20660531107534033,y2=0.05179576830859499 -a=hat,b=hat,i=61,x=0.14600101883109162,y=0.016141081372988975,x2=0.02131629749971677,xy=0.0023566143254919454,y2=0.0002605345078894516 -a=cat,b=pan,i=62,x=0.5638136789154102,y=0.33173672628650086,x2=0.3178858645321293,xy=0.18703770407894652,y2=0.11004925556728479 -a=pan,b=cat,i=63,x=0.4703043612464288,y=0.7943843739826639,x2=0.22118619220741143,xy=0.373602435590061,y2=0.6310465336278289 -a=pan,b=cat,i=64,x=0.5660165862339231,y=0.5283906051426638,x2=0.32037477589190416,xy=0.2990778465209274,y2=0.27919663160303043 -a=hat,b=pan,i=65,x=0.9349300070803035,y=0.6887739895721908,x2=0.8740941181391764,xy=0.6439554709474572,y2=0.4744096087111924 -a=dog,b=pan,i=66,x=0.8907404476648366,y=0.5089531839168581,x2=0.7934185451061535,xy=0.4533451868825461,y2=0.25903334341910716 -a=wye,b=wye,i=67,x=0.990492139162684,y=0.9945620485002424,x2=0.9810746777430697,xy=0.9851058909490261,y2=0.9891536683169986 -a=cat,b=dog,i=68,x=0.1656761916562901,y=0.3999596321678488,x2=0.027448600481731773,xy=0.06626378867381981,y2=0.15996770736384092 -a=cat,b=wye,i=69,x=0.6008546501272044,y=0.879880439279109,x2=0.3610263105794852,xy=0.5286802534968199,y2=0.7741895874259977 -a=hat,b=cat,i=70,x=0.7958883526623057,y=0.45932818752107474,x2=0.6334382699035187,xy=0.36557395449751084,y2=0.2109823838513956 -a=wye,b=hat,i=71,x=0.017814788759946132,y=0.5195828497321303,x2=0.00031736669856150305,xy=0.009256258711268735,y2=0.2699663377357615 -a=wye,b=pan,i=72,x=0.5937409556269868,y=0.7099917576944956,x2=0.3525283223888475,xy=0.4215511847008139,y2=0.5040882959941194 -a=dog,b=wye,i=73,x=0.08067388329639391,y=0.3846702905768087,x2=0.006508275446120184,xy=0.0310328461295834,y2=0.14797123245244642 -a=pan,b=dog,i=74,x=0.2323374771961123,y=0.025425666031404726,x2=0.05398070330985401,xy=0.005907335101767463,y2=0.0006464644931405281 -a=dog,b=cat,i=75,x=0.11546004262581322,y=0.21181188154916497,x2=0.013331021443154605,xy=0.024455808872320288,y2=0.04486427316539749 -a=cat,b=cat,i=76,x=0.8050585149476237,y=0.5162954081076918,x2=0.6481192124896733,xy=0.4156480145254557,y2=0.26656094843308803 -a=dog,b=cat,i=77,x=0.8529816281035857,y=0.486089158207742,x2=0.7275776578822437,xy=0.41462512157154124,y2=0.23628266972711123 -a=dog,b=hat,i=78,x=0.6287883161763603,y=0.5001069007838987,x2=0.39537474655990246,xy=0.3144613760520858,y2=0.25010691221167636 -a=dog,b=hat,i=79,x=0.45765651274678665,y=0.37805167557845964,x2=0.20944948365954968,xy=0.17301781148331738,y2=0.1429230694076809 -a=wye,b=pan,i=80,x=0.9768690333313619,y=0.08934000010682541,x2=0.9542731082817494,xy=0.0872734795421783,y2=0.007981635619087565 -a=wye,b=pan,i=81,x=0.4249966140862822,y=0.9387797028554198,x2=0.1806221219848043,xy=0.3989781950864795,y2=0.8813073304933102 -a=hat,b=dog,i=82,x=0.6581016472840274,y=0.12685953318239107,x2=0.4330977781579504,xy=0.0834864677610143,y2=0.01609334115925418 -a=cat,b=pan,i=83,x=0.563231401107445,y=0.9376434508380005,x2=0.31722961119345555,xy=0.5281102345547067,y2=0.8791752408993938 -a=dog,b=pan,i=84,x=0.5288078629216791,y=0.9774983060162068,x2=0.2796377558877934,xy=0.5169087902139918,y2=0.9555029382645539 -a=hat,b=wye,i=85,x=0.4301872159773744,y=0.9715341379047415,x2=0.18506104079036417,xy=0.4179415660122193,y2=0.9438785811143093 -a=dog,b=cat,i=86,x=0.15046114299129065,y=0.47217970263414166,x2=0.02263855555024561,xy=0.0710446977556207,y2=0.22295367157966645 -a=pan,b=dog,i=87,x=0.690315349060835,y=0.9329493827118672,x2=0.4765352811489825,xy=0.6440292787828332,y2=0.8703945507024541 -a=hat,b=wye,i=88,x=0.844518095822385,y=0.5458380509826849,x2=0.713210814171467,xy=0.46097011144329897,y2=0.2979391779005761 -a=hat,b=pan,i=89,x=0.07332776066392399,y=0.7010649246914367,x2=0.005376960483985719,xy=0.05140752100764556,y2=0.49149202863260977 -a=hat,b=cat,i=90,x=0.6722332393534578,y=0.870469095664934,x2=0.4518975280916433,xy=0.5851582599359135,y2=0.7577164465077281 -a=dog,b=cat,i=91,x=0.7897989951157833,y=0.8936987604639762,x2=0.6237824526859012,xy=0.7058423829506696,y2=0.7986974744548475 -a=dog,b=wye,i=92,x=0.9603096176050011,y=0.9462873537666934,x2=0.9221945616646634,xy=0.9087288468401418,y2=0.8954597558987711 -a=cat,b=cat,i=93,x=0.051983319126123306,y=0.7379236193825374,x2=0.002702265467368377,xy=0.03835971899706639,y2=0.5445312680426239 -a=cat,b=cat,i=94,x=0.46303093657328553,y=0.050030061480300425,x2=0.21439764822393398,xy=0.02316546622404256,y2=0.0025030070517226403 -a=pan,b=hat,i=95,x=0.7547208898758858,y=0.07612227053712461,x2=0.569603621615049,xy=0.05745106775915161,y2=0.00579460007172719 -a=dog,b=wye,i=96,x=0.01733736709766953,y=0.7408141524929686,x2=0.00030058429787935406,xy=0.012843766912919533,y2=0.5488056085338753 -a=wye,b=dog,i=97,x=0.05692328077076536,y=0.7682235553036355,x2=0.0032402598937073855,xy=0.04372980513326444,y2=0.5901674309233579 -a=dog,b=cat,i=98,x=0.1138603279074798,y=0.08999053060825568,x2=0.012964174271198822,xy=0.010246351323624088,y2=0.008098295599155403 -a=cat,b=hat,i=99,x=0.30356000952142026,y=0.8246328358017656,x2=0.09214867938064476,xy=0.2503255514876598,y2=0.6800193138824617 -a=dog,b=hat,i=100,x=0.6096169376426714,y=0.9104030491019464,x2=0.37163281066082876,xy=0.5549971188140792,y2=0.8288337118141209 -a=cat,b=cat,i=101,x=0.8601431032845563,y=0.11237298572604193,x2=0.7398461581279869,xy=0.09665684866774886,y2=0.012627687920985222 -a=wye,b=cat,i=102,x=0.4819560971418857,y=0.32001749297885806,x2=0.23228167957223878,xy=0.15423438193322125,y2=0.10241119581247347 -a=hat,b=pan,i=103,x=0.6938564126848401,y=0.02765597421813426,x2=0.48143672142387517,xy=0.019189275060299063,y2=0.000764852909954107 -a=cat,b=pan,i=104,x=0.315975934495323,y=0.778992200602797,x2=0.09984079118019266,xy=0.2461427885500369,y2=0.6068288485999882 -a=wye,b=hat,i=105,x=0.5198900877033598,y=0.009164564556345067,x2=0.2702857032922071,xy=0.00476456627096134,y2=8.398924350741626e-05 -a=wye,b=dog,i=106,x=0.7179488758856343,y=0.06444079818478121,x2=0.5154505883854459,xy=0.046265198617936695,y2=0.004152616470691701 -a=pan,b=hat,i=107,x=0.6781474171226103,y=0.8224379844724085,x2=0.45988391935006756,xy=0.5577341949134893,y2=0.6764042383030375 -a=hat,b=hat,i=108,x=0.7310592435672268,y=0.7865030408830793,x2=0.5344476176050859,xy=0.5749803181313077,y2=0.6185870333183308 -a=hat,b=pan,i=109,x=0.7084818505505407,y=0.4807798730113917,x2=0.5019465325595187,xy=0.34062381413856474,y2=0.23114928629284992 -a=hat,b=cat,i=110,x=0.8826404450115393,y=0.4693490677671145,x2=0.7790541551701681,xy=0.41426647003971706,y2=0.22028854741385942 -a=wye,b=dog,i=111,x=0.16532203956598923,y=0.8201244515579681,x2=0.02733137676625851,xy=0.13558464702950163,y2=0.672604116043258 -a=hat,b=dog,i=112,x=0.21932074656397027,y=0.7287694430170744,x2=0.04810158987337728,xy=0.15983425831551354,y2=0.5311049010754167 -a=dog,b=wye,i=113,x=0.2115544521551379,y=0.7617111396233063,x2=0.044755286226660536,xy=0.16114338284347432,y2=0.5802038602262359 -a=wye,b=dog,i=114,x=0.09981034795046184,y=0.8513191274753099,x2=0.009962105557992262,xy=0.08497045833019426,y2=0.724744256805323 -a=dog,b=dog,i=115,x=0.8486258183007894,y=0.27714545391484613,x2=0.7201657794866845,xy=0.23519278761683002,y2=0.07680960262566609 -a=dog,b=hat,i=116,x=0.9581187355019588,y=0.929883007686579,x2=0.9179915113198724,xy=0.8909383314894234,y2=0.8646824079842385 -a=cat,b=hat,i=117,x=0.13641737796121878,y=0.742727066387978,x2=0.018609701009814017,xy=0.10132087893747603,y2=0.5516434951452919 -a=dog,b=pan,i=118,x=0.9081608785949646,y=0.353699840894134,x2=0.8247561814103781,xy=0.3212163582653159,y2=0.1251035774485357 -a=cat,b=hat,i=119,x=0.44250837621436523,y=0.7613578627611387,x2=0.19581366301987418,xy=0.336907231568471,y2=0.5796657951882089 -a=pan,b=pan,i=120,x=0.27250908954834085,y=0.7458231673885796,x2=0.07426120388646565,xy=0.20324359230912165,y2=0.5562521970135331 -a=dog,b=pan,i=121,x=0.737965443497151,y=0.21636403152403683,x2=0.5445929957959468,xy=0.15966917848046738,y2=0.0468133941373344 -a=pan,b=dog,i=122,x=0.7390528984439438,y=0.3684696519589872,x2=0.5461991866983944,xy=0.2723185642689207,y2=0.13576988441477714 -a=cat,b=dog,i=123,x=0.15678654142006032,y=0.03288680496526697,x2=0.02458201957046429,xy=0.005156208408860275,y2=0.0010815419408235082 -a=wye,b=dog,i=124,x=0.25449765035082783,y=0.41497175568786404,x2=0.06476905403409222,xy=0.10560933678451917,y2=0.17220155801866832 -a=hat,b=pan,i=125,x=0.8828478876916597,y=0.22292432647794536,x2=0.7794203928016253,xy=0.19680827074613996,y2=0.04969525533564557 -a=dog,b=pan,i=126,x=0.6262694822433262,y=0.4445756661164717,x2=0.3922134643893239,xy=0.2784241722367446,y2=0.19764752290290452 -a=hat,b=dog,i=127,x=0.14352357272424598,y=0.5813144374046438,x2=0.020599015927531925,xy=0.08343232493249954,y2=0.33792647513507756 -a=wye,b=pan,i=128,x=0.04883068934042978,y=0.1489684167994927,x2=0.0023844362214615624,xy=0.0072742304822716874,y2=0.022191589203747374 -a=dog,b=hat,i=129,x=0.06061789696216857,y=0.7233489718249176,x2=0.0036745294321160857,xy=0.043847893441773436,y2=0.5232337350401655 -a=hat,b=pan,i=130,x=0.19499005566725736,y=0.49210369398737897,x2=0.03802112180912012,xy=0.095955326684662,y2=0.24216604563602392 -a=wye,b=hat,i=131,x=0.17100268381292483,y=0.6889838638269865,x2=0.02924191787122314,xy=0.11781808981821343,y2=0.4746987646139635 -a=wye,b=hat,i=132,x=0.4530191728273819,y=0.40357018860333094,x2=0.20522637094920532,xy=0.18282503301887149,y2=0.16286889712932812 -a=cat,b=cat,i=133,x=0.1415361047978303,y=0.24880740801699253,x2=0.0200324689613424,xy=0.035215231375569575,y2=0.0619051262841342 -a=wye,b=pan,i=134,x=0.7011988379965257,y=0.9651856584321452,x2=0.49167981040767794,xy=0.6767870621435318,y2=0.9315833552430937 -a=cat,b=wye,i=135,x=0.9905881531288986,y=0.7789092765450115,x2=0.9812648891193222,xy=0.7715783017076895,y2=0.6066996610878732 -a=dog,b=pan,i=136,x=0.17871521618418273,y=0.48324493385810807,x2=0.03193912849575917,xy=0.08636322282436287,y2=0.23352566609952724 -a=cat,b=dog,i=137,x=0.11381591729240514,y=0.6098950123980131,x2=0.012954063029111609,xy=0.06941576028814267,y2=0.3719719261479726 -a=pan,b=hat,i=138,x=0.3707431233181129,y=0.4434239077163661,x2=0.13745046348766946,xy=0.1643963645006882,y2=0.19662476193445236 -a=hat,b=hat,i=139,x=0.8124229919653702,y=0.6498112783277437,x2=0.6600311178739638,xy=0.5279216229518674,y2=0.42225469744193633 -a=dog,b=wye,i=140,x=0.7589142664965747,y=0.1238824448462621,x2=0.575950863892034,xy=0.09401615476230336,y2=0.01534686014108717 -a=pan,b=dog,i=141,x=0.3925050233933668,y=0.2525418847325982,x2=0.1540601933890274,xy=0.09912395837477339,y2=0.06377740354429291 -a=wye,b=cat,i=142,x=0.24697144094906698,y=0.2893682360276446,x2=0.060994892644458475,xy=0.07146569021663711,y2=0.08373397602175064 -a=cat,b=hat,i=143,x=0.49400128820886957,y=0.5368768322085028,x2=0.2440372727520226,xy=0.2652178467204975,y2=0.28823673296223684 -a=hat,b=dog,i=144,x=0.5837149712277536,y=0.03669862718107353,x2=0.3407231676354172,xy=0.02142153810909839,y2=0.0013467892369754288 -a=hat,b=pan,i=145,x=0.17945263084751795,y=0.3085459122455083,x2=0.03220324671809555,xy=0.05536937568970387,y2=0.09520057996341291 -a=hat,b=pan,i=146,x=0.8842766950456613,y=0.07694621084098674,x2=0.7819452734008775,xy=0.06804174101875439,y2=0.005920719362785585 -a=pan,b=cat,i=147,x=0.3709303665708895,y=0.7846804091324313,x2=0.13758933684441446,xy=0.2910617918004883,y2=0.6157233444762398 -a=cat,b=hat,i=148,x=0.1464772298983058,y=0.06380198058698772,x2=0.02145557887868113,xy=0.009345537378407444,y2=0.004070692726822357 -a=hat,b=cat,i=149,x=0.04743299762903541,y=0.7805486995199068,x2=0.002249889264076079,xy=0.03702376461367441,y2=0.6092562723222178 -a=pan,b=wye,i=150,x=0.8517240305872459,y=0.08519694501745723,x2=0.7254338242797838,xy=0.07256428540398864,y2=0.0072585194403076295 -a=cat,b=pan,i=151,x=0.45041917119444896,y=0.3138635785836258,x2=0.20287742977949433,xy=0.14137017293376053,y2=0.09851034596131984 -a=hat,b=pan,i=152,x=0.6789876338039754,y=0.4049875753568014,x2=0.4610242068587214,xy=0.27498155551152376,y2=0.1640149361933809 -a=hat,b=dog,i=153,x=0.2976251388840214,y=0.007776000657727544,x2=0.08858072329573304,xy=0.002314333275718402,y2=6.04661862289792e-05 -a=dog,b=cat,i=154,x=0.6190546351013247,y=0.2963477425478711,x2=0.3832286412404343,xy=0.1834554436260737,y2=0.08782198451321929 -a=wye,b=dog,i=155,x=0.2489637938016529,y=0.10921759500477168,x2=0.06198297062411194,xy=0.027191226802280415,y2=0.011928483058626328 -a=hat,b=wye,i=156,x=0.5528475169700776,y=0.9833085796986953,x2=0.30564037701998026,xy=0.5436197067017974,y2=0.9668957629090655 -a=pan,b=dog,i=157,x=0.9427806478704022,y=0.9595549728824017,x2=0.8888353499989352,xy=0.9046498590013368,y2=0.9207457459833466 -a=hat,b=cat,i=158,x=0.5703122642035605,y=0.45464569171363867,x2=0.3252560787009918,xy=0.2592900138515992,y2=0.20670270499377297 -a=dog,b=dog,i=159,x=0.6180020247265648,y=0.9508349928541551,x2=0.38192650256613364,xy=0.5876179507647367,y2=0.9040871836359611 -a=wye,b=pan,i=160,x=0.14997774547353349,y=0.24991446798202221,x2=0.022493324137323994,xy=0.03748160846916126,y2=0.06245724130673721 -a=wye,b=dog,i=161,x=0.45699387909445444,y=0.45016785054053354,x2=0.20884340552979683,xy=0.20572395226213103,y2=0.20265109366028414 -a=wye,b=pan,i=162,x=0.8574555865158207,y=0.9533185047446349,x2=0.73523008284719,xy=0.817428277622196,y2=0.9088161714885464 -a=cat,b=dog,i=163,x=0.35085399550424223,y=0.1222329668937654,x2=0.12309852616129083,xy=0.04288592481701535,y2=0.014940898195652346 -a=hat,b=wye,i=164,x=0.9179146876349837,y=0.7115420763707129,x2=0.8425673737760297,xy=0.6531349227709706,y2=0.5062921264459453 -a=wye,b=dog,i=165,x=0.5353869664505179,y=0.5135025869076683,x2=0.28663920384508795,xy=0.2749225922689899,y2=0.26368490676086737 -a=dog,b=dog,i=166,x=0.058915443887073926,y=0.32188624236086805,x2=0.0034710295284109565,xy=0.0189640708498328,y2=0.10361075302119949 -a=dog,b=hat,i=167,x=0.9602603205217703,y=0.7091271395742602,x2=0.9220998831685732,xy=0.6809466543382653,y2=0.5028613000807723 -a=wye,b=pan,i=168,x=0.8631399650055263,y=0.06510849316319112,x2=0.7450105991897411,xy=0.056197742510439325,y2=0.004239115881981305 -a=cat,b=cat,i=169,x=0.38828432861132955,y=0.13394452837883797,x2=0.15076471984515097,xy=0.05200856127273828,y2=0.01794113668262933 -a=cat,b=pan,i=170,x=0.3479446854386803,y=0.41483989686840483,x2=0.12106550412502218,xy=0.1443413374232917,y2=0.17209214003378875 -a=hat,b=wye,i=171,x=0.5752905429710464,y=0.7789264481743366,x2=0.3309592088319214,xy=0.4481090193047228,y2=0.6067264116654876 -a=hat,b=cat,i=172,x=0.9643802230164986,y=0.4654908242727618,x2=0.9300292145453516,xy=0.44891014492429976,y2=0.2166817074821352 -a=dog,b=hat,i=173,x=0.5465586715669809,y=0.09025119265821935,x2=0.2987263814650629,xy=0.04932757196661203,y2=0.008145277776231027 -a=cat,b=cat,i=174,x=0.6751932842416101,y=0.6923429494765411,x2=0.45588597108497164,xy=0.46746530987858886,y2=0.4793387596898763 -a=cat,b=wye,i=175,x=0.6231661625380126,y=0.4202688106916195,x2=0.3883360661323527,xy=0.261897301993111,y2=0.17662587324014828 -a=dog,b=cat,i=176,x=0.588006969888869,y=0.933885675424745,x2=0.3457521966378893,xy=0.5491312862291241,y2=0.8721424547635321 -a=wye,b=dog,i=177,x=0.7515102778196476,y=0.30641964804276345,x2=0.5647676976685639,xy=0.2302775148300158,y2=0.09389300070665102 -a=cat,b=cat,i=178,x=0.7762409980355185,y=0.20325576000840828,x2=0.6025500870311779,xy=0.15777545400539467,y2=0.041312903976595663 -a=hat,b=dog,i=179,x=0.884577849985587,y=0.3025087879262265,x2=0.7824779726851236,xy=0.2675925732255273,y2=0.09151156677259467 -a=pan,b=wye,i=180,x=0.14529735183640635,y=0.6252090570486897,x2=0.021111320450672457,xy=0.09084122033331131,y2=0.3908863650157117 -a=hat,b=pan,i=181,x=0.28399983215192304,y=0.8429872541566109,x2=0.08065590466232046,xy=0.23940823868668798,y2=0.7106275106705026 -a=wye,b=wye,i=182,x=0.8353984331738984,y=0.7464675457858652,x2=0.6978905421494044,xy=0.623597818164677,y2=0.5572137969115727 -a=cat,b=hat,i=183,x=0.34914519697283475,y=0.9084716400172681,x2=0.12190236856919957,xy=0.3171885096980633,y2=0.8253207207156648 -a=hat,b=hat,i=184,x=0.3669411646566748,y=0.939863478805397,x2=0.13464581831959693,xy=0.34487459953112637,y2=0.883343358792183 -a=pan,b=pan,i=185,x=0.48276574111045845,y=0.23155090227726105,x2=0.23306276078993018,xy=0.11178484294267726,y2=0.0536158203454137 -a=wye,b=dog,i=186,x=0.2913083475738195,y=0.07374105365755401,x2=0.08486055336618924,xy=0.02148138448933442,y2=0.00543774299452626 -a=hat,b=dog,i=187,x=0.009029315708523944,y=0.30598072357423967,x2=8.152854216419725e-05,xy=0.0027627965538744048,y2=0.09362420319901527 -a=pan,b=wye,i=188,x=0.04421095887479698,y=0.36367411116842285,x2=0.00195460888462899,xy=0.01607838117269549,y2=0.13225885913414237 -a=cat,b=pan,i=189,x=0.8091137129636748,y=0.8876893624644986,x2=0.654665000505864,xy=0.7182416360220079,y2=0.787992404232628 -a=cat,b=hat,i=190,x=0.6926570752215496,y=0.7838783903250481,x2=0.4797738238544714,xy=0.5429589131719241,y2=0.6144653308185886 -a=dog,b=wye,i=191,x=0.3228779770933895,y=0.43740509607640576,x2=0.10425018809191935,xy=0.14122847259148957,y2=0.19132321807360975 -a=dog,b=cat,i=192,x=0.9293928938191809,y=0.057193449174089306,x2=0.8637711510815912,xy=0.053155185235407104,y2=0.003271090628429137 -a=hat,b=cat,i=193,x=0.06425009999547093,y=0.142317240191156,x2=0.004128075349428014,xy=0.009143896913361227,y2=0.020254196855627186 -a=dog,b=hat,i=194,x=0.4531287054737033,y=0.27676361789433723,x2=0.20532562372427418,xy=0.1254095398986797,y2=0.0765981001899627 -a=hat,b=cat,i=195,x=0.15002219488262636,y=0.9201689558482206,x2=0.022506658957400724,xy=0.13804576641920455,y2=0.8467109073068044 -a=wye,b=hat,i=196,x=0.6626130110009391,y=0.7700958506232554,x2=0.43905600234773057,xy=0.5102755303408046,y2=0.5930476191471552 -a=dog,b=wye,i=197,x=0.17818642335763146,y=0.42923785497720846,x2=0.03175040146898507,xy=0.07648435814809049,y2=0.18424513614543503 -a=dog,b=dog,i=198,x=0.5064089553205039,y=0.4484062855584241,x2=0.2564500300288041,xy=0.2270769586287891,y2=0.20106819692830297 -a=dog,b=wye,i=199,x=0.4712455283340482,y=0.4010465455813673,x2=0.22207234797483622,xy=0.18899139125903638,y2=0.16083833172274772 -a=wye,b=dog,i=200,x=0.9226606422613064,y=0.2627524940019982,x2=0.8513026607780464,xy=0.2424313848716437,y2=0.0690388731042701 -a=dog,b=pan,i=201,x=0.8586732093831214,y=0.8290490023386249,x2=0.7373196805123099,xy=0.7118821675739819,y2=0.6873222482786693 -a=pan,b=dog,i=202,x=0.5354169735755743,y=0.6047143965939313,x2=0.2866713355928272,xy=0.32377435210190225,y2=0.36567950144796246 -a=dog,b=dog,i=203,x=0.04315872660095632,y=0.4977426641942203,x2=0.0018626756818160947,xy=0.021481939561589964,y2=0.24774775975916036 -a=pan,b=cat,i=204,x=0.6736808738647746,y=0.4116172737283622,x2=0.45384591981120637,xy=0.27729868466315916,y2=0.16942878003156947 -a=dog,b=cat,i=205,x=0.7084602563402208,y=0.7764646118117859,x2=0.5019159348136514,xy=0.5500943179232879,y2=0.6028972933960275 -a=pan,b=hat,i=206,x=0.846022268235842,y=0.7161501328213358,x2=0.7157536783509191,xy=0.605878959766906,y2=0.5128710127400169 -a=hat,b=wye,i=207,x=0.5802854404844445,y=0.3698796019086972,x2=0.3367311924382258,xy=0.21463574771979932,y2=0.1368109199081363 -a=wye,b=dog,i=208,x=0.7785473703666729,y=0.748001128982437,x2=0.6061360079048613,xy=0.5823543120005789,y2=0.5595056889590003 -a=wye,b=wye,i=209,x=0.7896380913474478,y=0.974775073742359,x2=0.6235283153068403,xy=0.7697195287229841,y2=0.9501864443894216 -a=pan,b=wye,i=210,x=0.5724957252200905,y=0.05440965268402409,x2=0.3277513553952774,xy=0.031149293572313615,y2=0.0029604103051961298 -a=wye,b=cat,i=211,x=0.6929472847216296,y=0.39994383006146406,x2=0.4801759394030792,xy=0.2771399910822604,y2=0.15995506720423325 -a=wye,b=wye,i=212,x=0.07058342953121044,y=0.865284985377559,x2=0.00498202052438735,xy=0.06107478178981139,y2=0.7487181059198426 -a=hat,b=pan,i=213,x=0.036673575990873175,y=0.7235022443197023,x2=0.0013449511759583493,xy=0.026533414536625895,y2=0.5234554975356462 -a=wye,b=hat,i=214,x=0.6548697103289118,y=0.23477827212480973,x2=0.4288543375062729,xy=0.1537491790578966,y2=0.05512083706191121 -a=dog,b=hat,i=215,x=0.35159363478296046,y=0.2102813772850397,x2=0.12361808401989378,xy=0.07393359376681417,y2=0.044218257632893214 -a=dog,b=pan,i=216,x=0.8135484638165029,y=0.5726493378206012,x2=0.6618611029781918,xy=0.46587798908948774,y2=0.3279272641063731 -a=cat,b=cat,i=217,x=0.8709609999341167,y=0.28896413402352317,x2=0.7585730634062364,xy=0.25167649111422385,y2=0.08350027075196466 -a=wye,b=wye,i=218,x=0.08719663778611642,y=0.2616108398138992,x2=0.007603253641203185,xy=0.02281158564017429,y2=0.06844023150813364 -a=pan,b=wye,i=219,x=0.38026953308772515,y=0.7053556432055249,x2=0.14460491779475648,xy=0.268225261102557,y2=0.4975265834018798 -a=wye,b=cat,i=220,x=0.05345420342600993,y=0.0780787369858923,x2=0.0028573518639092516,xy=0.004173636690089812,y2=0.006096289169312145 -a=cat,b=cat,i=221,x=0.11539660728851342,y=0.3377214375036798,x2=0.013316376973699388,xy=0.038971908096524364,y2=0.11405576934955189 -a=dog,b=pan,i=222,x=0.8183003829840468,y=0.5178153474775814,x2=0.6696155167918377,xy=0.42372849715592215,y2=0.2681327340833284 -a=pan,b=wye,i=223,x=0.2221032096613662,y=0.6333589821084413,x2=0.049329835741880795,xy=0.14067106279414063,y2=0.4011436002174409 -a=pan,b=pan,i=224,x=0.039710319262320604,y=0.6520052001892092,x2=0.0015769094559154307,xy=0.025891334660206752,y2=0.4251107810737707 -a=hat,b=dog,i=225,x=0.36964408169776986,y=0.271263408040449,x2=0.13663674713418755,xy=0.10027091336331921,y2=0.07358383654171914 -a=cat,b=wye,i=226,x=0.6066386461288729,y=0.8204059790745054,x2=0.3680104469770718,xy=0.49768997242179036,y2=0.6730659705011978 -a=cat,b=pan,i=227,x=0.12321098964692656,y=0.06855927715701327,x2=0.015180947969775043,xy=0.00844725638799353,y2=0.004700374484292161 -a=hat,b=pan,i=228,x=0.24516345981870424,y=0.26898582371311797,x2=0.06010512203027741,xy=0.06594549518369205,y2=0.07235337335862457 -a=pan,b=wye,i=229,x=0.9358289979073265,y=0.07408812183525015,x2=0.875775913324231,xy=0.06933381281391807,y2=0.005489049797074871 -a=pan,b=pan,i=230,x=0.7428830695288504,y=0.639523773239204,x2=0.5518752549926068,xy=0.4750913837006123,y2=0.40899065653810873 -a=dog,b=cat,i=231,x=0.2654604721892435,y=0.24247109406817857,x2=0.07046926229493612,xy=0.06436649112358117,y2=0.058792231458619504 -a=dog,b=pan,i=232,x=0.9226596784808877,y=0.8783208744732139,x2=0.8513008822944551,xy=0.8103912556445076,y2=0.7714475585353913 -a=wye,b=hat,i=233,x=0.7132524612279595,y=0.6133723334562391,x2=0.5087290734477419,xy=0.4374893264867992,y2=0.37622561944955174 -a=hat,b=cat,i=234,x=0.18129409233828286,y=0.14075273424219947,x2=0.03286754791676183,xy=0.0255176391985711,y2=0.01981133219665523 -a=cat,b=dog,i=235,x=0.10082533483175837,y=0.3924249112255551,x2=0.010165748143936188,xy=0.03956637307063965,y2=0.15399731095038482 -a=dog,b=wye,i=236,x=0.7726971141507323,y=0.6197385098311806,x2=0.5970608302168698,xy=0.47887015807462846,y2=0.38407582056777234 -a=hat,b=cat,i=237,x=0.6231126061219576,y=0.6468592277326921,x2=0.3882693199080979,xy=0.40306613918655465,y2=0.4184268605029348 -a=wye,b=hat,i=238,x=0.5981684929378425,y=0.864184577482475,x2=0.3578055459435297,xy=0.5169279863328182,y2=0.7468149839585638 -a=dog,b=dog,i=239,x=0.26356489832647445,y=0.5281983158813417,x2=0.06946645562984481,xy=0.13921453542148085,y2=0.27899346089988564 -a=dog,b=wye,i=240,x=0.11159855008602237,y=0.2494380614284566,x2=0.012454236381302445,xy=0.02783692599168394,y2=0.062219346489186485 -a=cat,b=cat,i=241,x=0.0845788651633742,y=0.7782649774619638,x2=0.007153584432324235,xy=0.0658247685901319,y2=0.605696375143871 -a=dog,b=hat,i=242,x=0.5429333798951006,y=0.48584690422492494,x2=0.2947766550043176,xy=0.2637825018224097,y2=0.23604721434494338 -a=hat,b=pan,i=243,x=0.08100577123880537,y=0.36005778435663893,x2=0.006561934973993667,xy=0.029166758512345008,y2=0.1296416080758119 -a=hat,b=wye,i=244,x=0.15058148801382099,y=0.5426167622977167,x2=0.022674784532456513,xy=0.08170803948803199,y2=0.2944329507264568 -a=dog,b=hat,i=245,x=0.03800440296280816,y=0.7060923351074192,x2=0.0014443346445595015,xy=0.026834617632372534,y2=0.498566385697448 -a=cat,b=dog,i=246,x=0.23397318719440163,y=0.05562375729079583,x2=0.05474345232590651,xy=0.013014467777055335,y2=0.003094002375145362 -a=dog,b=pan,i=247,x=0.7180442962589734,y=0.9789266392331171,x2=0.5155876113900443,xy=0.7029126897573055,y2=0.9582973650002453 -a=pan,b=cat,i=248,x=0.11146867790316062,y=0.7782788544169932,x2=0.012425266153478567,xy=0.08675371494184865,y2=0.6057179752326273 -a=pan,b=dog,i=249,x=0.9216417789370487,y=0.2960193921262023,x2=0.8494235686822477,xy=0.2728238391590569,y2=0.08762748051476633 -a=wye,b=dog,i=250,x=0.8936319731370298,y=0.4528717725074187,x2=0.7985781034127811,xy=0.4047006956438687,y2=0.2050928423340112 -a=cat,b=hat,i=251,x=0.01325361629448818,y=0.5200326784504148,x2=0.0001756583448815226,xy=0.006892313580776749,y2=0.2704339866563125 -a=pan,b=hat,i=252,x=0.07433877240630482,y=0.09753668852818931,x2=0.005526253082876387,xy=0.007250757689761707,y2=0.009513405609045017 -a=hat,b=pan,i=253,x=0.7146115566167207,y=0.7956331890808649,x2=0.5106696768501726,xy=0.5685686717450026,y2=0.6330321715669873 -a=hat,b=pan,i=254,x=0.49433932221345944,y=0.386116830538318,x2=0.2443713654864625,xy=0.1908727323035213,y2=0.14908620682495619 -a=dog,b=hat,i=255,x=0.907140804810107,y=0.7893834040317629,x2=0.8229044397515286,xy=0.7160818964371152,y2=0.6231261585607734 -a=pan,b=hat,i=256,x=0.7964354159520071,y=0.8663361959149535,x2=0.6343093717826465,xy=0.6899808285478054,y2=0.7505384043523926 -a=hat,b=dog,i=257,x=0.9349608449277914,y=0.42804573048051864,x2=0.8741517815480896,xy=0.40020599783779937,y2=0.18322314738260082 -a=dog,b=pan,i=258,x=0.46500532906688263,y=0.48642051379866635,x2=0.2162299560605998,xy=0.22618813108383098,y2=0.23660491624415855 -a=wye,b=pan,i=259,x=0.6416052149195055,y=0.20912858896404318,x2=0.4116572518119049,xy=0.13417799326808785,y2=0.04373476672209172 -a=dog,b=dog,i=260,x=0.02000070676075616,y=0.47209439803866526,x2=0.00040002827092975717,xy=0.009442221618567042,y2=0.22287312065948972 -a=hat,b=cat,i=261,x=0.4182390609397455,y=0.45190412161985016,x2=0.17492391209576014,xy=0.18900395546108667,y2=0.20421733513700832 -a=cat,b=dog,i=262,x=0.2513467234237762,y=0.03548677236411568,x2=0.06317517537586824,xy=0.008919483958605888,y2=0.0012593110128225646 -a=cat,b=hat,i=263,x=0.12495706870437084,y=0.09634906121116771,x2=0.015614269019188855,xy=0.012039496261365515,y2=0.009283141596273341 -a=pan,b=pan,i=264,x=0.8338593496048697,y=0.6001359925660235,x2=0.6953214149234563,xy=0.5004290084355772,y2=0.3601632095732062 -a=dog,b=hat,i=265,x=0.9001805241346884,y=0.3414510446791148,x2=0.8103249760314023,xy=0.3073675803655825,y2=0.11658881591245886 -a=hat,b=pan,i=266,x=0.8335743054196116,y=0.8169125697585177,x2=0.6948461226557879,xy=0.6809573279250064,y2=0.667346146629465 -a=dog,b=pan,i=267,x=0.8458637889181786,y=0.3430998568910747,x2=0.715485549403017,xy=0.2902157449271693,y2=0.11771751179867594 -a=dog,b=dog,i=268,x=0.7414869829804196,y=0.012891560807983926,x2=0.549802945929405,xy=0.009558924529420622,y2=0.00016619234006594717 -a=wye,b=cat,i=269,x=0.3079352177094503,y=0.4609585778769133,x2=0.09482409830576656,xy=0.1419453800335659,y2=0.21248281051830634 -a=dog,b=pan,i=270,x=0.05212953023805167,y=0.5387824620231573,x2=0.002717487922839943,xy=0.0280864766457681,y2=0.2902865413837349 -a=wye,b=hat,i=271,x=0.7790221947957395,y=0.7025339627538687,x2=0.6068755799843711,xy=0.5472895495830671,y2=0.4935539688226542 -a=dog,b=cat,i=272,x=0.0008954359621561325,y=0.054271178088963645,x2=8.018055623224788e-07,xy=4.859636456943798e-05,y2=0.002945360771164008 -a=cat,b=cat,i=273,x=0.10380296471678485,y=0.6937832475316934,x2=0.010775055483994081,xy=0.07201675796462878,y2=0.48133519455562296 -a=hat,b=dog,i=274,x=0.29979216886710724,y=0.8838417337375815,x2=0.08987534451404415,xy=0.2649688302924539,y2=0.7811762102962538 -a=hat,b=pan,i=275,x=0.38696122136190136,y=0.586256931066018,x2=0.14973898683789444,xy=0.2268586980771863,y2=0.34369718922294573 -a=cat,b=hat,i=276,x=0.05756896680109025,y=0.9110663752285088,x2=0.003314185938545031,xy=0.052449149909119655,y2=0.8300419400720139 -a=pan,b=dog,i=277,x=0.7092891435128651,y=0.4397689333439547,x2=0.5030910891052137,xy=0.3119233300750999,y2=0.1933967147344797 -a=cat,b=pan,i=278,x=0.29118271542024754,y=0.3841899576024924,x2=0.08478737375950886,xy=0.11186947509188351,y2=0.14760192352260493 -a=dog,b=dog,i=279,x=0.7294751397040691,y=0.20665147583356047,x2=0.532133979446271,xy=0.15074711420373857,y2=0.04270483246418863 -a=wye,b=dog,i=280,x=0.9751199139198755,y=0.3299994281281837,x2=0.9508588465231055,xy=0.3217890139499627,y2=0.1088996225649283 -a=cat,b=pan,i=281,x=0.7630555075664498,y=0.3673871684719181,x2=0.5822537076274923,xy=0.2803368023117403,y2=0.13497333155781355 -a=cat,b=hat,i=282,x=0.6862576061985859,y=0.9279592416281224,x2=0.4709495020654134,xy=0.6368190878095704,y2=0.86110835412304 -a=pan,b=cat,i=283,x=0.30466183485464227,y=0.6314883078693645,x2=0.09281883361699732,xy=0.1923903865647338,y2=0.3987774829757133 -a=dog,b=dog,i=284,x=0.1266975390198115,y=0.2837976906149976,x2=0.01605226639367666,xy=0.03595646898042605,y2=0.08054112919840589 -a=dog,b=dog,i=285,x=0.7354466023082858,y=0.5108089498320502,x2=0.540881704846802,xy=0.37567270658264496,y2=0.26092578322852195 -a=wye,b=hat,i=286,x=0.08791157895576474,y=0.6465223747243519,x2=0.007728445714495657,xy=0.05683680279224838,y2=0.41799118101921534 -a=dog,b=hat,i=287,x=0.11970840137472971,y=0.1482816627005039,x2=0.014330101359693391,xy=0.01775056079506421,y2=0.021987451493226014 -a=cat,b=wye,i=288,x=0.35399343255194404,y=0.316440140894129,x2=0.12531135028990775,xy=0.11201773167233352,y2=0.1001343627690962 -a=wye,b=pan,i=289,x=0.8443166377691436,y=0.9126747095020535,x2=0.7128705848137912,xy=0.7705864421037036,y2=0.8329751253646578 -a=hat,b=hat,i=290,x=0.8878219877890456,y=0.07743429366510513,x2=0.7882278820016924,xy=0.06874786852479434,y2=0.00599606983541374 -a=cat,b=cat,i=291,x=0.0271768798964106,y=0.7062174315398737,x2=0.0007385828009039266,xy=0.019192786317710722,y2=0.4987430606107762 -a=cat,b=hat,i=292,x=0.9443573120228451,y=0.592886870065721,x2=0.8918107327710133,xy=0.5598970509489022,y2=0.3515148406963272 -a=cat,b=wye,i=293,x=0.9220457035038476,y=0.7750015695972157,x2=0.8501682793499052,xy=0.7145868674558509,y2=0.6006274328781479 -a=cat,b=dog,i=294,x=0.6020924895573685,y=0.82611891030865,x2=0.3625153659813899,xy=0.4973999913781555,y2=0.6824724539695514 -a=pan,b=cat,i=295,x=0.3403817179931268,y=0.9507443645375449,x2=0.11585971394395249,xy=0.3236160001735731,y2=0.9039148466999 -a=pan,b=cat,i=296,x=0.9097127625952343,y=0.8605433360178909,x2=0.827577310428653,xy=0.7828472555417545,y2=0.7405348331648007 -a=wye,b=cat,i=297,x=0.6160372456767832,y=0.9020031887873672,x2=0.37950188806103735,xy=0.5556675600122452,y2=0.8136097525825787 -a=pan,b=wye,i=298,x=0.50577150863781,y=0.8259093126367452,x2=0.25580481894976626,xy=0.41772139905030325,y2=0.6821261927001009 -a=cat,b=cat,i=299,x=0.2981525480578324,y=0.6662890636412198,x2=0.08889494191337807,xy=0.19865578206769693,y2=0.4439411163278934 -a=cat,b=dog,i=300,x=0.0818678111539376,y=0.8004492798748463,x2=0.00670233850313679,xy=0.06553103048309926,y2=0.64071904965216 -a=cat,b=cat,i=301,x=0.12451202794377325,y=0.18564081545729194,x2=0.015503245102670971,xy=0.02311451440172319,y2=0.03446251236364832 -a=hat,b=cat,i=302,x=0.6734590557879861,y=0.673610869564445,x2=0.45354709982284586,xy=0.45364934018539543,y2=0.4537516035953678 -a=cat,b=pan,i=303,x=0.3585747227398197,y=0.8584656686844071,x2=0.12857583178793858,xy=0.30782408913016523,y2=0.7369633043097662 -a=cat,b=cat,i=304,x=0.20349559283978325,y=0.05618018115685175,x2=0.041410456305214845,xy=0.011432419270359966,y2=0.0031562127548166803 -a=hat,b=pan,i=305,x=0.5025551615837717,y=0.3304723949698324,x2=0.25256169043449084,xy=0.16608060785304013,y2=0.1092120038370969 -a=pan,b=pan,i=306,x=0.6152907560829367,y=0.22422100197362638,x2=0.3785827145211119,xy=0.1379611098340262,y2=0.05027505772605696 -a=dog,b=pan,i=307,x=0.43445251775626836,y=0.5191797007874173,x2=0.18874899018476068,xy=0.2255589281750395,y2=0.2695475617097121 -a=dog,b=cat,i=308,x=0.3070261088744515,y=0.05842083731286474,x2=0.09426503153058653,xy=0.017936722357356227,y2=0.003412994232336209 -a=dog,b=dog,i=309,x=0.8794547781341963,y=0.7332302883378141,x2=0.7734407067830683,xy=0.644842880551405,y2=0.537626655735954 -a=wye,b=cat,i=310,x=0.9888690403216374,y=0.5281326729751255,x2=0.9778619789066361,xy=0.5222540494874135,y2=0.2789241202638508 -a=pan,b=cat,i=311,x=0.3819560927822282,y=0.06438228257288925,x2=0.1458904568134661,xy=0.02459120509594212,y2=0.004145078309295358 -a=hat,b=pan,i=312,x=0.38739993766324976,y=0.8334486763106171,x2=0.1500787117014898,xy=0.32287796524825113,y2=0.6946366960439199 -a=hat,b=hat,i=313,x=0.2889248371208133,y=0.3113593460747701,x2=0.0834775615052885,xy=0.0899594483506959,y2=0.09694464238810846 -a=pan,b=pan,i=314,x=0.7705573615128862,y=0.9786808359787603,x2=0.5937586473817008,xy=0.7541297227350193,y2=0.9578161787120851 -a=hat,b=pan,i=315,x=0.22161939991648127,y=0.6799850454378898,x2=0.04911515841934126,xy=0.1506978777221264,y2=0.46237966201916914 -a=wye,b=pan,i=316,x=0.47223177684534823,y=0.2308631128058921,x2=0.22300285106251477,xy=0.1090208979683745,y2=0.05329777685442607 -a=dog,b=hat,i=317,x=0.4588358326624131,y=0.6629410208229793,x2=0.21053032133500998,xy=0.3041810952953819,y2=0.4394907970898139 -a=hat,b=cat,i=318,x=0.45926143061048397,y=0.7089887074654951,x2=0.21092106164638838,xy=0.3256111680772812,y2=0.5026649873135934 -a=cat,b=dog,i=319,x=0.9572556652231445,y=0.41269372516458,x2=0.9163384086018049,xy=0.39505340641583764,y2=0.1703161107902179 -a=pan,b=dog,i=320,x=0.7575141377032723,y=0.863562750562446,x2=0.5738276688203321,xy=0.6541609923449773,y2=0.7457406241589773 -a=wye,b=wye,i=321,x=0.7490553802399513,y=0.12306864410919094,x2=0.561083962666418,xy=0.09218523000882527,y2=0.015145891162874698 -a=hat,b=pan,i=322,x=0.2586385043179358,y=0.9230414729790952,x2=0.06689387591581888,xy=0.2387340659947375,y2=0.8520055608394178 -a=pan,b=cat,i=323,x=0.07085767112499741,y=0.9208584577909767,x2=0.005020809557258292,xy=0.06524988575482533,y2=0.8479802992851762 -a=dog,b=wye,i=324,x=0.371993577798137,y=0.7171686471344474,x2=0.13837922192305863,xy=0.2667821309321927,y2=0.5143308684326535 -a=pan,b=wye,i=325,x=0.7493887659784733,y=0.24257918878264784,x2=0.561583522574739,xy=0.18178611893388757,y2=0.0588446628304475 -a=cat,b=dog,i=326,x=0.7673708339325579,y=0.48141094171150267,x2=0.5888579967703493,xy=0.3694207158054138,y2=0.23175649479955582 -a=wye,b=hat,i=327,x=0.39089795934844385,y=0.18978525585445072,x2=0.15280121462277765,xy=0.07418666922792709,y2=0.036018443339739324 -a=wye,b=hat,i=328,x=0.30799655248421554,y=0.13719489618597558,x2=0.09486187634216213,xy=0.04225555504371033,y2=0.018822439539480616 -a=pan,b=hat,i=329,x=0.5989139125471804,y=0.3688054470820389,x2=0.35869787464257163,xy=0.220882713280616,y2=0.13601745779738258 -a=dog,b=dog,i=330,x=0.8251164627142066,y=0.6107692981277933,x2=0.6808171770420046,xy=0.5039558028056436,y2=0.3730391355355173 -a=dog,b=wye,i=331,x=0.405811566767869,y=0.9995223047806924,x2=0.1646830277225926,xy=0.40561771252248424,y2=0.9990448377541072 -a=dog,b=cat,i=332,x=0.5785425869013293,y=0.9296892821389334,x2=0.33471152485848216,xy=0.5378648423030984,y2=0.8643221613240054 -a=hat,b=hat,i=333,x=0.18855941279376276,y=0.24326199631666412,x2=0.03555465215312862,xy=0.045869339180508666,y2=0.05917639885196871 -a=cat,b=cat,i=334,x=0.9241901076212868,y=0.5723216714316407,x2=0.8541273550250458,xy=0.5289340271144027,y2=0.3275520955903069 -a=hat,b=dog,i=335,x=0.3875326629689546,y=0.29951305698338815,x2=0.15018156486780937,xy=0.11607109256674465,y2=0.08970807130353432 -a=cat,b=hat,i=336,x=0.36353909967371323,y=0.3037407740127752,x2=0.132160676991574,xy=0.1104216475188011,y2=0.09225845779787978 -a=wye,b=wye,i=337,x=0.15322408671389842,y=0.5364783269608415,x2=0.023477620749308262,xy=0.08220140169037513,y2=0.2878089952987036 -a=pan,b=wye,i=338,x=0.8342151312807021,y=0.0878748423317367,x2=0.6959148852576791,xy=0.07330652313204074,y2=0.007721987914827585 -a=pan,b=cat,i=339,x=0.36288996792695283,y=0.07297789973834401,x2=0.13168912882202485,xy=0.026482947695424038,y2=0.005325773850219791 -a=wye,b=wye,i=340,x=0.5495314800674435,y=0.4909485366614089,x2=0.301984847585115,xy=0.2697916759884896,y2=0.24103046564997876 -a=cat,b=pan,i=341,x=0.79498448769681,y=0.6638388502217857,x2=0.6320003356785594,xy=0.5277415882568056,y2=0.4406820190637824 -a=cat,b=hat,i=342,x=0.3295734049370175,y=0.7755432624102072,x2=0.1086186292417793,xy=0.25559843366849483,y2=0.6014673518698676 -a=pan,b=cat,i=343,x=0.6408042653352577,y=0.31349610449795595,x2=0.4106301064718593,xy=0.20088964092827785,y2=0.09827980753539332 -a=hat,b=hat,i=344,x=0.7362290618135519,y=0.6713538150535315,x2=0.5420332314588627,xy=0.49427018940181033,y2=0.4507159449869314 -a=pan,b=dog,i=345,x=0.7471489053370911,y=0.5757507025427996,x2=0.5582314867464135,xy=0.4301715071519139,y2=0.3314888714785273 -a=hat,b=hat,i=346,x=0.4039115623544295,y=0.9777356701558304,x2=0.16314455020359617,xy=0.3949187421022966,y2=0.9559670406950708 -a=dog,b=wye,i=347,x=0.753780066913511,y=0.6228105759522281,x2=0.568184389276137,xy=0.4694621976157128,y2=0.3878930135179461 -a=hat,b=wye,i=348,x=0.6271735401916162,y=0.17271963779635158,x2=0.3933466495164848,xy=0.1083251866973515,y2=0.029832073280502882 -a=dog,b=pan,i=349,x=0.008499846398031474,y=0.7784194540391546,x2=7.224738879012863e-05,xy=0.0066164457925723345,y2=0.6059368464266155 -a=dog,b=pan,i=350,x=0.4146878755302308,y=0.5980930475191678,x2=0.1719660341117762,xy=0.24802193524512506,y2=0.35771529349076553 -a=dog,b=cat,i=351,x=0.19333948681663715,y=0.8310163194530423,x2=0.03738015716252061,xy=0.16066826873930182,y2=0.6905881231972809 -a=wye,b=wye,i=352,x=0.6301771590119656,y=0.16193987131098408,x2=0.39712325174039215,xy=0.10205080803351926,y2=0.026224521920218086 -a=hat,b=dog,i=353,x=0.971822816670598,y=0.6107563563649813,x2=0.9444395870015747,xy=0.5935469625420876,y2=0.373023326840228 -a=dog,b=cat,i=354,x=0.6059945338166207,y=0.5908847323988631,x2=0.36722937501562347,xy=0.3580729179494077,y2=0.349144766982076 -a=cat,b=dog,i=355,x=0.9195111520172229,y=0.029690019889583197,x2=0.8455007586840404,xy=0.027300304392084907,y2=0.0008814972810438458 -a=cat,b=cat,i=356,x=0.18749508840350748,y=0.8115036777374969,x2=0.035154408175439085,xy=0.15215295379716343,y2=0.6585382189814832 -a=hat,b=wye,i=357,x=0.45853408021748976,y=0.9829665524302919,x2=0.21025350272089932,xy=0.4507236640031808,y2=0.9662232431966937 -a=cat,b=pan,i=358,x=0.41012256850789486,y=0.4498989364506413,x2=0.1682005211995129,xy=0.18451370738610717,y2=0.20240905301941817 -a=hat,b=cat,i=359,x=0.7473329464063138,y=0.8632953504427492,x2=0.5585065327843423,xy=0.6451690578652509,y2=0.7452788620960691 -a=cat,b=wye,i=360,x=0.7951325722573537,y=0.8459362528452746,x2=0.6322358074645957,xy=0.6726314686906103,y2=0.7156081438779044 -a=cat,b=wye,i=361,x=0.44763526932508135,y=0.31613950159283066,x2=0.2003773343437381,xy=0.14151519093980375,y2=0.09994418446736338 -a=pan,b=hat,i=362,x=0.906722306509765,y=0.6953547596343465,x2=0.8221453411223884,xy=0.6304936714981979,y2=0.4835182417461397 -a=pan,b=hat,i=363,x=0.06080903598353993,y=0.5645160214383047,x2=0.003697738857247454,xy=0.03432767506092667,y2=0.3186783384605325 -a=wye,b=pan,i=364,x=0.30514786611348743,y=0.13300047635483836,x2=0.09311522019361484,xy=0.040584811551756264,y2=0.017689126710613918 -a=wye,b=pan,i=365,x=0.37125897309400546,y=0.06739019658056855,x2=0.13783322510281548,xy=0.025019215179105037,y2=0.004541438595167673 -a=cat,b=wye,i=366,x=0.7791499362465059,y=0.27692636995359365,x2=0.6070746231529341,xy=0.2157671634943188,y2=0.07668821437567462 -a=cat,b=hat,i=367,x=0.9527733550611998,y=0.818523110036349,x2=0.907777066114575,xy=0.7798670097444599,y2=0.6699800816635771 -a=dog,b=hat,i=368,x=0.35020686980579574,y=0.23868938503279757,x2=0.12264485165917356,xy=0.0835906623882064,y2=0.05697262252733509 -a=pan,b=dog,i=369,x=0.8447943084740233,y=0.9949640479404968,x2=0.7136774236301031,xy=0.8405399648364069,y2=0.9899534566941391 -a=hat,b=wye,i=370,x=0.69940906738559,y=0.16693271246129116,x2=0.48917304354118085,xy=0.11675425273869851,y2=0.02786653048968411 -a=hat,b=pan,i=371,x=0.14714810220633867,y=0.3418482846423728,x2=0.02165256398292709,xy=0.05030232632761743,y2=0.11686024971293275 -a=cat,b=pan,i=372,x=0.42287448553330953,y=0.7687144669280749,x2=0.1788228305150612,xy=0.32506973472422196,y2=0.5909219316645143 -a=hat,b=pan,i=373,x=0.614903553546492,y=0.24894173738731518,x2=0.3781063801641035,xy=0.1530751589454977,y2=0.061971988613415 -a=wye,b=hat,i=374,x=0.14942412760967416,y=0.14152237684943625,x2=0.022327569911912187,xy=0.021146857697974558,y2=0.02002858314911385 -a=pan,b=hat,i=375,x=0.6737371074317526,y=0.3039803689768553,x2=0.45392168993050497,xy=0.20480285451050337,y2=0.0924040647233051 -a=hat,b=pan,i=376,x=0.8919202420346224,y=0.027633376425687306,x2=0.7955217181510994,xy=0.024646767789832852,y2=0.0007636034926837309 -a=pan,b=wye,i=377,x=0.7792580509827138,y=0.3805839747344706,x2=0.6072431100213779,xy=0.29657312638683797,y2=0.14484416182468815 -a=dog,b=wye,i=378,x=0.5473115371142823,y=0.13039780370314658,x2=0.29954991865839836,xy=0.0713682223810956,y2=0.017003587210604347 -a=hat,b=wye,i=379,x=0.6443554743420592,y=0.9254896320591379,x2=0.41519397731458013,xy=0.5963443108641237,y2=0.8565310590489585 -a=hat,b=cat,i=380,x=0.8305972957484694,y=0.3049792454885969,x2=0.6898918677046704,xy=0.2533149365622372,y2=0.09301234017879385 -a=cat,b=pan,i=381,x=0.49398849327681127,y=0.9686677193449981,x2=0.2440246314898942,xy=0.4785107071651207,y2=0.9383171505010399 -a=cat,b=wye,i=382,x=0.6658169957258326,y=0.6336496624002959,x2=0.4433122717973734,xy=0.4218947145620531,y2=0.4015118946600089 -a=hat,b=pan,i=383,x=0.5270422144850718,y=0.5949792755559095,x2=0.2777734958493285,xy=0.3135791949617103,y2=0.35400033834103484 -a=wye,b=dog,i=384,x=0.18443535729748028,y=0.13212443323489675,x2=0.03401640102144921,xy=0.024368417051405262,y2=0.01745686585764269 -a=hat,b=cat,i=385,x=0.17314133568517354,y=0.7379797046975181,x2=0.029977922122845946,xy=0.12777479177987822,y2=0.5446140445454359 -a=cat,b=dog,i=386,x=0.03478093143569683,y=0.15264820757159847,x2=0.0012097131915346437,xy=0.005309246841329784,y2=0.023301475274821813 -a=pan,b=pan,i=387,x=0.15246713204674733,y=0.10164387298451916,x2=0.02324622635456029,xy=0.015497349804073496,y2=0.010331476915293063 -a=pan,b=hat,i=388,x=0.17718620062853796,y=0.3500245786758208,x2=0.03139494969317651,xy=0.06201952522217346,y2=0.12251720567718588 -a=pan,b=pan,i=389,x=0.7605186211036413,y=0.28891913356723176,x2=0.5783885730453839,xy=0.21972838107100987,y2=0.08347426574123991 -a=hat,b=dog,i=390,x=0.6840388221413488,y=0.3649565855293123,x2=0.4679091101965238,xy=0.24964447289819922,y2=0.13319330932121426 -a=dog,b=cat,i=391,x=0.05921371062232661,y=0.389622580190799,x2=0.003506263525664635,xy=0.023070998715342215,y2=0.15180575499453558 -a=wye,b=dog,i=392,x=0.862948560484572,y=0.8359180773168853,x2=0.744680218042395,xy=0.7213543015036373,y2=0.6987590319851582 -a=cat,b=pan,i=393,x=0.6921946903714182,y=0.45062372911318316,x2=0.47913348937838357,xy=0.31191935264751364,y2=0.20306174523987147 -a=wye,b=hat,i=394,x=0.49393307945457976,y=0.007566390255741684,x2=0.2439698869794842,xy=0.003737290439373615,y2=5.72502615021827e-05 -a=cat,b=pan,i=395,x=0.48487561271603474,y=0.6592712972060344,x2=0.23510435980675012,xy=0.31966457417887095,y2=0.43463864331972735 -a=wye,b=hat,i=396,x=0.10898530427790898,y=0.8271502664191211,x2=0.011877796548548406,xy=0.0901472234692414,y2=0.6841775632372231 -a=hat,b=pan,i=397,x=0.20482548839258963,y=0.9341499290560121,x2=0.04195348069526287,xy=0.19133771545080064,y2=0.8726360899553525 -a=wye,b=wye,i=398,x=0.2414582722670322,y=0.7573182779141447,x2=0.058302097246180254,xy=0.18286076294139353,y2=0.5735309740628458 -a=pan,b=cat,i=399,x=0.25476845018641514,y=0.8106336969146216,x2=0.0649069632103879,xy=0.20652389063182233,y2=0.6571269905734666 -a=pan,b=pan,i=400,x=0.447675163315121,y=0.3962846957190259,x2=0.2004130518492203,xy=0.17740681587529797,y2=0.15704156006112097 -a=cat,b=dog,i=401,x=0.7196040784960461,y=0.6029774996918733,x2=0.5178300297881437,xy=0.4339050680196204,y2=0.36358186513466306 -a=pan,b=dog,i=402,x=0.3293635895274962,y=0.21292877581824698,x2=0.10848037410643702,xy=0.07013098591719337,y2=0.04533866357145728 -a=pan,b=pan,i=403,x=0.4794159710575423,y=0.7444257071982773,x2=0.22983967330504623,xy=0.35688957329665977,y2=0.5541696335376552 -a=pan,b=hat,i=404,x=0.35229848819990284,y=0.7048649430677805,x2=0.12411422478793707,xy=0.24832285382788966,y2=0.49683458796594543 -a=cat,b=cat,i=405,x=0.5539894972585298,y=0.4939436326491574,x2=0.30690436307275853,xy=0.2736395847253586,y2=0.24398031223464578 -a=wye,b=cat,i=406,x=0.9201662520135037,y=0.9061685082859349,x2=0.8467059313445787,xy=0.8338256799621362,y2=0.8211413654091564 -a=dog,b=wye,i=407,x=0.599977042706569,y=0.30667551037779883,x2=0.35997245177492015,xy=0.18399826578699946,y2=0.0940498686654834 -a=wye,b=wye,i=408,x=0.5163229735300138,y=0.8274828000305222,x2=0.2665894129948753,xy=0.427248379856701,y2=0.6847277843463532 -a=hat,b=cat,i=409,x=0.8637691382173114,y=0.27659796335817277,x2=0.7460971241366767,xy=0.23891678444255238,y2=0.07650643333388908 -a=cat,b=cat,i=410,x=0.5141323390854813,y=0.26336512902289655,x2=0.2643320620935083,xy=0.13540452981809137,y2=0.06936119118524695 -a=dog,b=pan,i=411,x=0.41224226185516033,y=0.36847099985667353,x2=0.16994368245945857,xy=0.15189931840894755,y2=0.13577087773537672 -a=cat,b=hat,i=412,x=0.7113346946765016,y=0.2675665550758648,x2=0.5059970478505117,xy=0.19032937376053363,y2=0.0715918613951658 -a=pan,b=cat,i=413,x=0.09725330111603114,y=0.6596012359249898,x2=0.009458204577965425,xy=0.06414839761391933,y2=0.435073790433774 -a=cat,b=pan,i=414,x=0.2032789261029312,y=0.7930423978993805,x2=0.04132232179756096,xy=0.16120880699907952,y2=0.6289162448659993 -a=wye,b=hat,i=415,x=0.7208194991426115,y=0.5076782641736721,x2=0.5195807503442053,xy=0.3659443921072567,y2=0.2577372199143928 -a=wye,b=cat,i=416,x=0.05094177917901299,y=0.823254645192439,x2=0.0025950648659233216,xy=0.04193805634348991,y2=0.6777482108309285 -a=dog,b=hat,i=417,x=0.3502332835712425,y=0.9015133693043408,x2=0.12266335292109437,xy=0.31573998751483345,y2=0.8127263550344648 -a=dog,b=hat,i=418,x=0.6897208043031566,y=0.17572608145503243,x2=0.4757147878885933,xy=0.121201934238207,y2=0.030879655703540693 -a=pan,b=wye,i=419,x=0.6948323736722205,y=0.8023485943181106,x2=0.4827920275029723,xy=0.5574977783026223,y2=0.643763266804248 -a=dog,b=pan,i=420,x=0.8611324428810029,y=0.8948892565088714,x2=0.7415490841822037,xy=0.7706181715654489,y2=0.8008267814150006 -a=dog,b=dog,i=421,x=0.6682769610946666,y=0.22827141775037252,x2=0.44659409672992256,xy=0.15254852935899008,y2=0.05210784016176508 -a=wye,b=hat,i=422,x=0.0541450623921913,y=0.03492968354866677,x2=0.002931687781454289,xy=0.0018912698950820602,y2=0.0012200827928100018 -a=hat,b=cat,i=423,x=0.2878891280366729,y=0.6923190205915444,x2=0.08288015004171582,xy=0.1993111191613031,y2=0.47930562627283524 -a=pan,b=pan,i=424,x=0.24969668722058536,y=0.5603015174164245,x2=0.062348435608934834,xy=0.1399054327435483,y2=0.3139377904191479 -a=cat,b=hat,i=425,x=0.6432373390180074,y=0.4601326221257571,x2=0.413754274306967,xy=0.2959744834515503,y2=0.2117220299443248 -a=pan,b=pan,i=426,x=0.08857290171262766,y=0.4948683043964537,x2=0.0078451589177948,xy=0.0438319216860018,y2=0.24489463869622113 -a=hat,b=hat,i=427,x=0.9817619908536765,y=0.9720329944246192,x2=0.9638566066849745,xy=0.9543050477817748,y2=0.9448481422500918 -a=hat,b=hat,i=428,x=0.9148525407955268,y=0.9648238200013665,x2=0.8369551714000311,xy=0.8826715231482961,y2=0.9308850036420292 -a=wye,b=dog,i=429,x=0.35950848468859187,y=0.9331667854080467,x2=0.1292463505630875,xy=0.33548137698377123,y2=0.8708002493887874 -a=cat,b=cat,i=430,x=0.37025745666447096,y=0.7068430140496296,x2=0.1370905842156426,xy=0.26171389664306477,y2=0.49962704651076484 -a=hat,b=wye,i=431,x=0.7473977295217059,y=0.31222462031682663,x2=0.558603366094201,xy=0.23335597232557292,y2=0.09748421353198655 -a=pan,b=wye,i=432,x=0.020626452567093057,y=0.9036046339384172,x2=0.00042545054550253975,xy=0.018638158121336245,y2=0.8165013344749809 -a=dog,b=cat,i=433,x=0.39895262550969957,y=0.3255908291058476,x2=0.1591631974010826,xy=0.1298953161136578,y2=0.10600938799783324 -a=cat,b=pan,i=434,x=0.03308271819637287,y=0.4561703448158573,x2=0.0010944662432606207,xy=0.01509135496708525,y2=0.20809138348941814 -a=wye,b=hat,i=435,x=0.5265827060213647,y=0.8324508984088317,x2=0.277289346280783,xy=0.4383542467140387,y2=0.692974498261671 -a=dog,b=dog,i=436,x=0.13573248026899842,y=0.6296955997868453,x2=0.018423306199974045,xy=0.08547014557354311,y2=0.3965165483909149 -a=hat,b=cat,i=437,x=0.8654646438877281,y=0.16019212127781757,x2=0.7490290498197121,xy=0.13864061719532614,y2=0.02566151571948701 -a=cat,b=dog,i=438,x=0.7966508697236587,y=0.8179096733918833,x2=0.6346526082314619,xy=0.6515884526630374,y2=0.6689762338280172 -a=pan,b=wye,i=439,x=0.03263795204183584,y=0.3028707310744211,x2=0.001065235913485176,xy=0.009885080395682715,y2=0.0917306797415543 -a=dog,b=hat,i=440,x=0.966023792673685,y=0.6707282859911573,x2=0.9332019680116507,xy=0.6479394826866979,y2=0.4498764336286357 -a=wye,b=wye,i=441,x=0.5051303446747406,y=0.8181837283036516,x2=0.25515666511122226,xy=0.41328942868528784,y2=0.6694246132608636 -a=wye,b=wye,i=442,x=0.00189056621370709,y=0.34828222446247414,x2=3.5742406084107622e-06,xy=0.0006584506064035026,y2=0.12130050787652923 -a=pan,b=cat,i=443,x=0.6793754442809697,y=0.1298115452400409,x2=0.461550994291965,xy=0.088190776220252,y2=0.016851037277607187 -a=hat,b=dog,i=444,x=0.6790194116161151,y=0.5696648954621644,x2=0.4610673613514952,xy=0.3868135221350746,y2=0.32451809312191865 -a=cat,b=wye,i=445,x=0.6656154116151947,y=0.8994567166267486,x2=0.443043876179665,xy=0.5986922526675648,y2=0.8090223850849713 -a=pan,b=dog,i=446,x=0.25382576885203534,y=0.7091042660509055,x2=0.06442752093332688,xy=0.1799889355266293,y2=0.5028288601315933 -a=dog,b=cat,i=447,x=0.5286351304176596,y=0.819162354301337,x2=0.279455101111696,xy=0.4330379979993244,y2=0.6710269627045091 -a=wye,b=wye,i=448,x=0.08576681150946075,y=0.49558546913709267,x2=0.007355945956499369,xy=0.042504785518308705,y2=0.24560495721983222 -a=dog,b=wye,i=449,x=0.9279016015331357,y=0.24265136631045403,x2=0.8610013821277582,xy=0.22515659141367386,y2=0.05887968557233014 -a=wye,b=pan,i=450,x=0.9954136776717515,y=0.8564839236024028,x2=0.9908483896960015,xy=0.8525558122597992,y2=0.7335647113893665 -a=wye,b=dog,i=451,x=0.75599828738501,y=0.5714548197102787,x2=0.5715334105290681,xy=0.4320188650188803,y2=0.3265606109701071 -a=hat,b=wye,i=452,x=0.8111424402968179,y=0.31828231231277015,x2=0.6579520584506768,xy=0.25817229151269433,y2=0.10130363033116375 -a=pan,b=cat,i=453,x=0.8230952277223608,y=0.23017811163282564,x2=0.677485753899325,xy=0.1894585052111236,y2=0.05298196307485355 -a=cat,b=pan,i=454,x=0.1681250040487443,y=0.4832147037274883,x2=0.02826601698639029,xy=0.08124047402059675,y2=0.2334964498984443 -a=wye,b=cat,i=455,x=0.583591811976771,y=0.6182535096548227,x2=0.3405794030063308,xy=0.3608076859604561,y2=0.382237402200506 -a=pan,b=pan,i=456,x=0.5341162080768863,y=0.18521008011230855,x2=0.2852801237304317,xy=0.09892370568720257,y2=0.034302773775207754 -a=pan,b=pan,i=457,x=0.43606616667930154,y=0.6504089455435781,x2=0.19015370172238039,xy=0.28362133565711467,y2=0.4230317964431091 -a=pan,b=hat,i=458,x=0.41053891653745356,y=0.39042433627756823,x2=0.16854220199174627,xy=0.16028438400524728,y2=0.15243116235777968 -a=hat,b=cat,i=459,x=0.8279009780108291,y=0.49850047419497034,x2=0.6854200293912873,xy=0.41270903012487803,y2=0.2485027227726103 -a=hat,b=hat,i=460,x=0.6721806454947676,y=0.10396222643019659,x2=0.4518268201777625,xy=0.06988139646892273,y2=0.010808144524323467 -a=pan,b=wye,i=461,x=0.02023810899472822,y=0.5501255555291902,x2=0.0004095810556824993,xy=0.011133500953585163,y2=0.3026381268463001 -a=wye,b=cat,i=462,x=0.727795641281456,y=0.40124503379262455,x2=0.5296864954682858,xy=0.29202438668010267,y2=0.16099757714324442 -a=pan,b=hat,i=463,x=0.21408874740949402,y=0.4526591991311629,x2=0.04583399176736613,xy=0.0969092409453754,y2=0.20490035055806582 -a=pan,b=hat,i=464,x=0.808013299733613,y=0.8508128545640562,x2=0.6528854925464016,xy=0.6874681020720776,y2=0.7238825134914378 -a=cat,b=cat,i=465,x=0.18443046027469845,y=0.3198595241708798,x2=0.03401459467713712,xy=0.0589918392660814,y2=0.10231011520282166 -a=dog,b=wye,i=466,x=0.6690693684021588,y=0.35529864134741296,x2=0.4476538197340637,xy=0.23771943756045874,y2=0.1262371245433176 -a=hat,b=dog,i=467,x=0.5541917854317743,y=0.37428947552399106,x2=0.3071285350400577,xy=0.20742815270896298,y2=0.1400926114880243 -a=cat,b=cat,i=468,x=0.1736348246454934,y=0.01764568600585459,x2=0.030149052329671244,xy=0.0030639055953759985,y2=0.0003113702346172125 -a=hat,b=hat,i=469,x=0.5033692302886069,y=0.10883292644571674,x2=0.25338058200134456,xy=0.05478314641503701,y2=0.01184460587873879 -a=dog,b=hat,i=470,x=0.7182088654841831,y=0.0053812060288691566,x2=0.5158239744600773,xy=0.003864829876930763,y2=2.895737832513776e-05 -a=pan,b=cat,i=471,x=0.9153812295229025,y=0.684467443316095,x2=0.8379227953628606,xy=0.6265486498310846,y2=0.4684956809596717 -a=wye,b=pan,i=472,x=0.5426093114832728,y=0.8937944086246787,x2=0.2944248649083514,xy=0.484981168671436,y2=0.7988684448887392 -a=dog,b=wye,i=473,x=0.254035842066346,y=0.014533606202589922,x2=0.06453420905435749,xy=0.0036920568899356,y2=0.00021122570925196025 -a=cat,b=dog,i=474,x=0.7208349357817031,y=0.7969304385460733,x2=0.519603004643412,xy=0.5744553014918432,y2=0.6350981238812367 -a=wye,b=wye,i=475,x=0.44310978998369854,y=0.5903375948709183,x2=0.19634628597939743,xy=0.2615843676827343,y2=0.34849847591798044 -a=wye,b=wye,i=476,x=0.211134619552652,y=0.37682855600072707,x2=0.0445778275736431,xy=0.07956155380778873,y2=0.1419997606175931 -a=cat,b=wye,i=477,x=0.656123622461519,y=0.23518195578595602,x2=0.4304982079520259,xy=0.15430843676786626,y2=0.055310552327307375 -a=pan,b=hat,i=478,x=0.261137365170943,y=0.848909404771103,x2=0.06819272348842242,xy=0.22168196523075936,y2=0.7206471775088283 -a=hat,b=wye,i=479,x=0.5726860692616852,y=0.20658315802101979,x2=0.3279693339263997,xy=0.11830729674272339,y2=0.04267660117793763 -a=dog,b=cat,i=480,x=0.5889373970697118,y=0.6324315776400301,x2=0.3468472576672474,xy=0.3724626071600107,y2=0.39996970039625745 -a=pan,b=wye,i=481,x=0.7326724570245813,y=0.7607701934340202,x2=0.536808929282437,xy=0.5573953668543695,y2=0.5787712872176365 -a=cat,b=hat,i=482,x=0.7156786664141497,y=0.6727068718078026,x2=0.5121959535603358,xy=0.48144195690304253,y2=0.45253453537743943 -a=pan,b=wye,i=483,x=0.906076222484393,y=0.8837149104449258,x2=0.8209741209515873,xy=0.800713067809072,y2=0.7809520429426832 -a=wye,b=wye,i=484,x=0.17485771656037297,y=0.3286561057182015,x2=0.030575221040707732,xy=0.057468056179509244,y2=0.10801483582585363 -a=pan,b=hat,i=485,x=0.9746813020717191,y=0.9603727749897781,x2=0.9500036406082217,xy=0.936057386801267,y2=0.922315866941567 -a=hat,b=hat,i=486,x=0.389737022988879,y=0.5054926492080817,x2=0.151894947088234,xy=0.19700920024511948,y2=0.25552281840340474 -a=cat,b=cat,i=487,x=0.7717280840966645,y=0.5792209586499713,x2=0.5955642357835085,xy=0.44700108068757566,y2=0.3354969189393917 -a=cat,b=hat,i=488,x=0.5352653098753735,y=0.6995994641416728,x2=0.2865089519559796,xy=0.37447132396243776,y2=0.4894394102273158 -a=wye,b=pan,i=489,x=0.3817318590918931,y=0.10110815614280855,x2=0.14571921224575293,xy=0.03859620441374772,y2=0.010222859238598553 -a=cat,b=wye,i=490,x=0.4338593996143578,y=0.16064648936002768,x2=0.18823397863373104,xy=0.06969798942389593,y2=0.025807294543701485 -a=cat,b=dog,i=491,x=0.5523473079666366,y=0.1011038140762488,x2=0.3050875486179904,xy=0.05584441953017536,y2=0.010221981220764684 -a=dog,b=pan,i=492,x=0.8548158489133266,y=0.4035450933075072,x2=0.7307101355534112,xy=0.3449567415104644,y2=0.16284864233256469 -a=cat,b=dog,i=493,x=0.6761850511558616,y=0.6358566191991404,x2=0.45722622340665514,xy=0.42995674058096395,y2=0.4043136401793606 -a=hat,b=cat,i=494,x=0.7255484564419751,y=0.3663459020675335,x2=0.5264205626453327,xy=0.26580170376894185,y2=0.13420931996167484 -a=cat,b=pan,i=495,x=0.017780663500744698,y=0.18199852103097924,x2=0.0003161519945267147,xy=0.003236054460085049,y2=0.03312346165746379 -a=dog,b=pan,i=496,x=0.3354816673166041,y=0.2950171337294082,x2=0.11254794910552864,xy=0.09897283991050743,y2=0.08703510919391551 -a=hat,b=cat,i=497,x=0.845745458886744,y=0.30462935389212265,x2=0.7152853812275493,xy=0.2576388926978656,y2=0.0927990432527321 -a=cat,b=wye,i=498,x=0.4270245034620467,y=0.8684115407395496,x2=0.18234992655700752,xy=0.3708330069850171,y2=0.7541386040896385 -a=cat,b=wye,i=499,x=0.2841158830878526,y=0.3616334878960804,x2=0.08072183502279034,xy=0.10274581776773514,y2=0.13077877956788453 -a=hat,b=cat,i=500,x=0.1078620490437403,y=0.891240434209545,x2=0.011634221623914238,xy=0.09613101942447434,y2=0.7943095115700184 -a=cat,b=hat,i=501,x=0.02602252145560835,y=0.4249719491548738,x2=0.0006771716229075969,xy=0.011058841664914405,y2=0.18060115756849263 -a=cat,b=dog,i=502,x=0.9600130477076377,y=0.10206080237229287,x2=0.9216250517689071,xy=0.09797970193691179,y2=0.010416407380876222 -a=dog,b=wye,i=503,x=0.7224035498570839,y=0.30405882634135073,x2=0.5218668888461163,xy=0.21965317551437039,y2=0.09245176987607968 -a=cat,b=dog,i=504,x=0.29699950881556403,y=0.8492341300547505,x2=0.08820870823668629,xy=0.2522221194956737,y2=0.7211986076498488 -a=dog,b=wye,i=505,x=0.719987868759384,y=0.3042780893445137,x2=0.51838253116068,xy=0.21907653305733388,y2=0.09258515565514788 -a=wye,b=dog,i=506,x=0.571928391586696,y=0.8759035093371151,x2=0.32710208510294503,xy=0.5009540852803188,y2=0.7672069576690738 -a=pan,b=dog,i=507,x=0.9451105204196616,y=0.08262536392557762,x2=0.8932338958079236,xy=0.0780901006995666,y2=0.0068269507638341435 -a=hat,b=cat,i=508,x=0.06494158136397976,y=0.7691311772880609,x2=0.004217408990054404,xy=0.04994859492942615,y2=0.5915627678765186 -a=hat,b=wye,i=509,x=0.8526682827229164,y=0.9502200981859352,x2=0.7270432003616473,xy=0.8102225393290023,y2=0.9029182349964884 -a=dog,b=hat,i=510,x=0.7961747152551889,y=0.4290742277373424,x2=0.6338941772116812,xy=0.3416180510921186,y2=0.18410469290839676 -a=dog,b=dog,i=511,x=0.9644468520430375,y=0.6982963594821596,x2=0.9301577304157246,xy=0.6734697256956821,y2=0.4876178056660375 -a=wye,b=cat,i=512,x=0.7782849197477183,y=0.7390864748178285,x2=0.6057274163067123,xy=0.5752198577402177,y2=0.5462488172586447 -a=hat,b=wye,i=513,x=0.058468587059375854,y=0.08061130780101255,x2=0.0034185756727198135,xy=0.0047132292681336466,y2=0.006498182945389588 -a=pan,b=dog,i=514,x=0.357548753499498,y=0.6568238423174304,x2=0.12784111112904478,xy=0.23484654608934807,y2=0.43141755983663266 -a=dog,b=dog,i=515,x=0.1192143216962187,y=0.15885584816018783,x2=0.014212054497489522,xy=0.018937892185894305,y2=0.02523518049469265 -a=dog,b=hat,i=516,x=0.7844258125322406,y=0.6795173335538125,x2=0.615323855366866,xy=0.533030936502691,y2=0.4617438066000833 -a=hat,b=cat,i=517,x=0.803492095202423,y=0.9777180162849328,x2=0.6455995470527797,xy=0.7855886974219375,y2=0.9559325193681442 -a=pan,b=cat,i=518,x=0.8929678579851031,y=0.8731506959135767,x2=0.7973915953945033,xy=0.7796955066281488,y2=0.7623921377743633 -a=cat,b=hat,i=519,x=0.8430997768388969,y=0.3592743119385645,x2=0.7108172337057977,xy=0.302904092219352,y2=0.12907803121892897 -a=pan,b=cat,i=520,x=0.6070056034765043,y=0.5878574244689501,x2=0.3684558026518752,xy=0.3568327506979186,y2=0.3455763515032673 -a=wye,b=dog,i=521,x=0.6022397584211494,y=0.6804292951308468,x2=0.3626927266231644,xy=0.4097815743222742,y2=0.46298402567226105 -a=hat,b=cat,i=522,x=0.8778649552084499,y=0.9121524444235004,x2=0.7706468795831337,xy=0.8007466647671142,y2=0.832022081867767 -a=wye,b=cat,i=523,x=0.5651100240663355,y=0.4298499196494372,x2=0.3193493393002543,xy=0.24291249843800583,y2=0.18477095342262762 -a=hat,b=hat,i=524,x=0.176299648277084,y=0.9020467171674311,x2=0.031081565982623526,xy=0.15903051896611636,y2=0.8136882799525395 -a=wye,b=wye,i=525,x=0.17893912687254476,y=0.9775420788552232,x2=0.03201921112590867,xy=0.17492052607152594,y2=0.9555885159325913 -a=pan,b=cat,i=526,x=0.8375161177973927,y=0.7512783056396939,x2=0.7014332475704161,xy=0.6292076899247594,y2=0.5644190925248493 -a=hat,b=hat,i=527,x=0.8452592696154724,y=0.10934788095339154,x2=0.7144632328708819,xy=0.09242730998866336,y2=0.011956959068997089 -a=pan,b=dog,i=528,x=0.626938320263565,y=0.2998594026650514,x2=0.3930516574149004,xy=0.1879933502220633,y2=0.08991566136664143 -a=hat,b=dog,i=529,x=0.34324615615265386,y=0.34947501965777994,x2=0.11781792371357204,xy=0.11995595716890611,y2=0.12213278936480568 -a=cat,b=wye,i=530,x=0.09585122473142738,y=0.3977348374237427,x2=0.009187457282514595,xy=0.03812337128542089,y2=0.15819300090049104 -a=cat,b=pan,i=531,x=0.3136925767907739,y=0.7272959366988331,x2=0.09840303273363557,xy=0.22814733647251653,y2=0.528959379538633 -a=wye,b=dog,i=532,x=0.6336194018015315,y=0.6185562907483662,x2=0.4014735463393307,xy=0.391929266924554,y2=0.3826118848243773 -a=wye,b=cat,i=533,x=0.6206814745682353,y=0.8577418603739316,x2=0.38524549287219895,xy=0.5323844826957933,y2=0.7357210990377332 -a=wye,b=hat,i=534,x=0.886934308928995,y=0.9507140909937993,x2=0.7866524683553541,xy=0.8432209452846431,y2=0.9038572828141661 -a=pan,b=wye,i=535,x=0.1368489021210476,y=0.7785386772895759,x2=0.01872762201173607,xy=0.10654216324585104,y2=0.6061224720358025 -a=hat,b=hat,i=536,x=0.779299644491487,y=0.0905711082010715,x2=0.6073079359045581,xy=0.07058203242229504,y2=0.008203125640770201 -a=pan,b=hat,i=537,x=0.5468876904615854,y=0.0403492727581517,x2=0.2990861459784068,xy=0.022066520590510147,y2=0.0016280638121117228 -a=cat,b=wye,i=538,x=0.5348837444710285,y=0.6184260119257476,x2=0.2861006200993485,xy=0.33078602093712883,y2=0.382450732226385 -a=cat,b=wye,i=539,x=0.2514015500496377,y=0.5686176926055978,x2=0.0632027393673605,xy=0.14295136930669572,y2=0.3233260803441141 -a=hat,b=cat,i=540,x=0.03587712705596502,y=0.0639971587990984,x2=0.0012871682457898572,xy=0.002296034197456023,y2=0.0040956363343570175 -a=dog,b=cat,i=541,x=0.5140554945247015,y=0.3951198550793644,x2=0.26425305145103534,xy=0.20311353249935105,y2=0.15611969987793795 -a=pan,b=pan,i=542,x=0.505988282501811,y=0.61886003251058,x2=0.25602414202913254,xy=0.3131359249590433,y2=0.3829877398389961 -a=dog,b=pan,i=543,x=0.06724122779098063,y=0.6844038973931703,x2=0.004521382714838546,xy=0.0460201583656491,y2=0.4684086947669612 -a=cat,b=hat,i=544,x=0.2251062355675667,y=0.46180421651863035,x2=0.050672817291400836,xy=0.10395500874973838,y2=0.21326313439438602 -a=dog,b=wye,i=545,x=0.05601503064905111,y=0.250556229890031,x2=0.0031376836586141355,xy=0.014034914896600784,y2=0.06277842433670607 -a=hat,b=pan,i=546,x=0.09484781714308776,y=0.5304294933057503,x2=0.008996108416808613,xy=0.0503100795883645,y2=0.28135544736859497 -a=pan,b=cat,i=547,x=0.06526726447590292,y=0.8939940568623452,x2=0.004259815812167459,xy=0.05834854654912008,y2=0.7992253737051942 -a=wye,b=hat,i=548,x=0.8498290633914884,y=0.09181738815270246,x2=0.7222094369848545,xy=0.07802908497686388,y2=0.008430432767184026 -a=cat,b=wye,i=549,x=0.32107592669097085,y=0.3153327302443085,x2=0.10308975070046568,xy=0.1012457485791853,y2=0.09943473076332984 -a=hat,b=cat,i=550,x=0.3962909153545656,y=0.6623064945082948,x2=0.15704648959255949,xy=0.26246604695396575,y2=0.43864989266786597 -a=wye,b=wye,i=551,x=0.43650140196394005,y=0.8569782859131105,x2=0.19053347391648517,xy=0.374072223253727,y2=0.734411782526573 -a=pan,b=dog,i=552,x=0.9993077485337599,y=0.10019859749555626,x2=0.9986159762796124,xy=0.10012923486952477,y2=0.010039758940076493 -a=pan,b=cat,i=553,x=0.44797263597990333,y=0.8662958294512269,x2=0.20067948258678298,xy=0.3880768262576629,y2=0.7504684641245891 -a=dog,b=dog,i=554,x=0.40480362277090387,y=0.6539051006815002,x2=0.16386597300844824,xy=0.2647031537042439,y2=0.42759188069728293 -a=hat,b=wye,i=555,x=0.6128372799136335,y=0.46626943145563005,x2=0.3755695316519411,xy=0.28574729008014466,y2=0.2174071827099565 -a=cat,b=dog,i=556,x=0.9831029154847094,y=0.30946523504038015,x2=0.9664913424345357,xy=0.30423617480935855,y2=0.09576873169859773 -a=dog,b=pan,i=557,x=0.9187169194231349,y=0.8714507884381463,x2=0.844040778034335,xy=0.8006165837827558,y2=0.7594264766694667 -a=cat,b=cat,i=558,x=0.6297377530200902,y=0.9564703645603738,x2=0.3965696375787921,xy=0.6023254982085563,y2=0.9148355582822544 -a=dog,b=wye,i=559,x=0.5554989886174412,y=0.7532866340748579,x2=0.30857912635500007,xy=0.41844996336762,y2=0.5674407530758288 -a=pan,b=pan,i=560,x=0.5310698092443845,y=0.8265306359880259,x2=0.28203514229086696,xy=0.43894546718880073,y2=0.6831528922267706 -a=wye,b=pan,i=561,x=0.022976813994650347,y=0.9342710142178746,x2=0.0005279339813447601,xy=0.021466571314277434,y2=0.872862328007696 -a=hat,b=hat,i=562,x=0.28441187328233775,y=0.6675462356653574,x2=0.08089011366396855,xy=0.18985807538815722,y2=0.4456179767509889 -a=dog,b=pan,i=563,x=0.6224741669574889,y=0.11916397259976652,x2=0.3874740885294198,xy=0.0741764945753847,y2=0.014200052365757906 -a=pan,b=dog,i=564,x=0.9837709447757146,y=0.8330969991954611,x2=0.967805271784902,xy=0.8195766219883315,y2=0.6940506100684821 -a=pan,b=wye,i=565,x=0.3688855052429517,y=0.9040587054107869,x2=0.13607651597834775,xy=0.333494152314747,y2=0.817322142829028 -a=wye,b=wye,i=566,x=0.5138537141869847,y=0.5560587607325808,x2=0.2640456395837593,xy=0.28573285950864846,y2=0.3092013453874535 -a=hat,b=cat,i=567,x=0.804358708281772,y=0.4023986125270216,x2=0.6469929315887208,xy=0.32367282818661236,y2=0.16192464336367204 -a=wye,b=pan,i=568,x=0.9973387930844961,y=0.5711453274816489,x2=0.9946846681912394,xy=0.569625391586397,y2=0.32620698510412 -a=dog,b=cat,i=569,x=0.5807005891800942,y=0.46037286387360454,x2=0.33721317427410846,xy=0.26733879329392946,y2=0.2119431737911844 -a=cat,b=hat,i=570,x=0.4673986559801019,y=0.9704729359036818,x2=0.21846150361200564,xy=0.4535977459064444,y2=0.9418177193215116 -a=pan,b=cat,i=571,x=0.19902565265833183,y=0.8897887225086547,x2=0.039611210416074946,xy=0.17709078122530833,y2=0.7917239707035837 -a=wye,b=pan,i=572,x=0.9765395095911745,y=0.4954531021095988,x2=0.9536294137925716,xy=0.4838295293595337,y2=0.24547377639002455 -a=dog,b=wye,i=573,x=0.740323306950601,y=0.0789459840490837,x2=0.5480785988142738,xy=0.05844555198168705,y2=0.0062324683974781785 -a=wye,b=dog,i=574,x=0.9646512592477066,y=0.6589096310365389,x2=0.930552051968186,xy=0.6356180053098389,y2=0.4341619018727078 -a=hat,b=pan,i=575,x=0.9349096289723295,y=0.009990558226173452,x2=0.8740560143451789,xy=0.009340269084458277,y2=9.981125367056202e-05 -a=cat,b=hat,i=576,x=0.0535540240207355,y=0.8438819580641209,x2=0.002868033488813515,xy=0.04519327465283124,y2=0.7121367591461347 -a=dog,b=dog,i=577,x=0.3534573064310561,y=0.8830990802028328,x2=0.12493206746949749,xy=0.31213782220023645,y2=0.7798639854550893 -a=pan,b=cat,i=578,x=0.2896905064885902,y=0.4717415849739569,x2=0.08392058954961591,xy=0.13665905868283587,y2=0.222540122993741 -a=pan,b=hat,i=579,x=0.8469622711045872,y=0.05034158398652022,x2=0.7173450886746403,xy=0.042637422304225486,y2=0.0025342750782718694 -a=dog,b=wye,i=580,x=0.92247105168372,y=0.4607201119337304,x2=0.8509528411944685,xy=0.4250009661873495,y2=0.21226302154022908 -a=wye,b=wye,i=581,x=0.5394694831520579,y=0.42191550462126415,x2=0.2910273232523485,xy=0.22761053921187308,y2=0.17801269303981596 -a=cat,b=hat,i=582,x=0.1980857029178107,y=0.3696136938289396,x2=0.03923794570044316,xy=0.07321518835015398,y2=0.1366142826658731 -a=pan,b=cat,i=583,x=0.7419057634234156,y=0.5185280910497336,x2=0.5504241618008812,xy=0.384698979246739,y2=0.26887138120768084 -a=dog,b=cat,i=584,x=0.709429914643071,y=0.678472673421283,x2=0.5032908037904751,xy=0.48132881079291706,y2=0.46032516857942296 -a=wye,b=dog,i=585,x=0.3969321618524141,y=0.06893081064610551,x2=0.15755514111283106,xy=0.02736085568799806,y2=0.0047514566563292525 -a=wye,b=hat,i=586,x=0.5796873362193875,y=0.47960567601099047,x2=0.33603740777312924,xy=0.2780213367625097,y2=0.23002160446195916 -a=dog,b=cat,i=587,x=0.3823538804427917,y=0.6227305847052022,x2=0.14619448988966066,xy=0.23810345553244264,y2=0.38779338112728295 -a=pan,b=cat,i=588,x=0.6729056596127668,y=0.855307402214849,x2=0.4528020267388928,xy=0.575541191659065,y2=0.7315507522835135 -a=wye,b=cat,i=589,x=0.7756644096506681,y=0.9934419395516876,x2=0.6016552763987194,xy=0.7705775555645744,y2=0.9869268872602189 -a=cat,b=cat,i=590,x=0.5043359295981563,y=0.20976859569338902,x2=0.2543547298836365,xy=0.10579383970952516,y2=0.0440028637391765 -a=dog,b=hat,i=591,x=0.8669601128845403,y=0.6373110010483346,x2=0.7516198373327749,xy=0.5525232174114235,y2=0.40616531205723033 -a=pan,b=cat,i=592,x=0.7044083196853276,y=0.4226239612654834,x2=0.49619108084190666,xy=0.2976998344137761,y2=0.17861101263572882 -a=wye,b=pan,i=593,x=0.5515403005725981,y=0.480013394589378,x2=0.3041967031557118,xy=0.26474673193069864,y2=0.23041285898521788 -a=cat,b=cat,i=594,x=0.2615824864121392,y=0.24054710356722298,x2=0.068425397197557,xy=0.06292290945035255,y2=0.057862909034580294 -a=pan,b=wye,i=595,x=0.37831785348075364,y=0.0988205317466111,x2=0.14312439826228499,xy=0.03738557145020458,y2=0.009765497494682971 -a=wye,b=dog,i=596,x=0.10997957058997387,y=0.8607615584803269,x2=0.012095505947155047,xy=0.09466618658202304,y2=0.7409104605574812 -a=pan,b=pan,i=597,x=0.3578314631700755,y=0.4610253660653395,x2=0.12804335603443712,xy=0.16496938129768013,y2=0.2125443881556803 -a=pan,b=hat,i=598,x=0.04277171024958748,y=0.2316071342295577,x2=0.0018294191976746667,xy=0.009906233237003957,y2=0.05364186462602836 -a=dog,b=pan,i=599,x=0.933656964091152,y=0.3604541366591547,x2=0.8717153265959066,xy=0.3365405149272836,y2=0.12992718463469657 -a=pan,b=dog,i=600,x=0.8279059521913905,y=0.9102424712543687,x2=0.685428265673933,xy=0.7535951598888926,y2=0.8285413564752603 -a=cat,b=cat,i=601,x=0.28088999427212924,y=0.9912215980573098,x2=0.0788991888821968,xy=0.27842422900072855,y2=0.9825202564552871 -a=hat,b=cat,i=602,x=0.37386268101282927,y=0.5135855689760194,x2=0.13977330425410053,xy=0.19201047774687396,y2=0.26377013666042154 -a=hat,b=dog,i=603,x=0.3803020210377117,y=0.28893565862763304,x2=0.14462962720536812,xy=0.10988281492595119,y2=0.0834838148265841 -a=cat,b=pan,i=604,x=0.7066746969537755,y=0.965389301398448,x2=0.4993891273147104,xy=0.6822161920081653,y2=0.9319765032545835 -a=pan,b=cat,i=605,x=0.3058965912441608,y=0.29637041075010173,x2=0.09357272453479719,xy=0.09065869839408791,y2=0.08783542036818402 -a=pan,b=hat,i=606,x=0.2679309094874891,y=0.6237381631675911,x2=0.07178697225879307,xy=0.16711873333954858,y2=0.38904929619168055 -a=dog,b=cat,i=607,x=0.7791895125595627,y=0.034844749031911704,x2=0.6071362964828089,xy=0.027150663013435574,y2=0.0012141565350969115 -a=hat,b=cat,i=608,x=0.6913845849105351,y=0.0784559825533423,x2=0.4780126442519129,xy=0.054243256931390746,y2=0.006155341198410351 -a=dog,b=wye,i=609,x=0.633866333722232,y=0.722140445897368,x2=0.401786529026464,xy=0.45774051687350253,y2=0.5214868236008495 -a=wye,b=wye,i=610,x=0.31989367240781375,y=0.90234836985202,x2=0.10233196164655765,xy=0.28865553382316683,y2=0.814232580574598 -a=cat,b=wye,i=611,x=0.8139721003412402,y=0.6942407060285465,x2=0.6625505801339301,xy=0.5650925656284415,y2=0.4819701579070147 -a=pan,b=dog,i=612,x=0.8183348011907539,y=0.8847778416101758,x2=0.6696718468399107,xy=0.7240444991120475,y2=0.7828318290043613 -a=cat,b=wye,i=613,x=0.7326510422319794,y=0.6062625695353675,x2=0.5367775496836057,xy=0.4441789034363249,y2=0.3675543032196263 -a=dog,b=dog,i=614,x=0.07038667736657966,y=0.2982907049163095,x2=0.004954284350706978,xy=0.020995691608393895,y2=0.08897734463946882 -a=dog,b=cat,i=615,x=0.7622669597997499,y=0.31569377144533395,x2=0.5810509180023535,xy=0.2406429313873518,y2=0.09966255732937875 -a=pan,b=cat,i=616,x=0.428192969224764,y=0.5399779987847076,x2=0.1833492188935197,xy=0.23121478261567,y2=0.29157623917153774 -a=pan,b=cat,i=617,x=0.9010965128514362,y=0.5931563226749272,x2=0.8119749254730185,xy=0.5344910939381582,y2=0.3518344231292424 -a=wye,b=hat,i=618,x=0.7266325029014346,y=0.6586352626392248,x2=0.5279947942728033,xy=0.47858578939068364,y2=0.4338004091918406 -a=pan,b=dog,i=619,x=0.37449343923943623,y=0.8136812967444776,x2=0.14024533603338132,xy=0.3047183072626437,y2=0.6620772526717746 -a=hat,b=dog,i=620,x=0.8635032118133309,y=0.10847192527528038,x2=0.7456377968119382,xy=0.09366585586678024,y2=0.011766158572926011 -a=dog,b=cat,i=621,x=0.29950978683846696,y=0.04614568762234006,x2=0.08970611241202392,xy=0.013821085063281554,y2=0.0021294244861385886 -a=pan,b=hat,i=622,x=0.7689737553993135,y=0.8899859079896967,x2=0.5913206364929231,xy=0.6843758059193049,y2=0.7920749164202449 -a=hat,b=hat,i=623,x=0.16401907387212689,y=0.47557547547898305,x2=0.026902256593870216,xy=0.07800344904435919,y2=0.2261720328770608 -a=dog,b=pan,i=624,x=0.4364532344594886,y=0.9894813135306753,x2=0.1904914258701493,xy=0.4318623197276865,y2=0.9790732698263904 -a=dog,b=dog,i=625,x=0.05594189959864382,y=0.15862700962402898,x2=0.0031294961307047455,xy=0.008873896246020536,y2=0.025162528182261782 -a=dog,b=hat,i=626,x=0.25591635834238546,y=0.7020347860903682,x2=0.06549318246722824,xy=0.1796621858859226,y2=0.492852840880949 -a=wye,b=wye,i=627,x=0.1099722490913756,y=0.07528683687238935,x2=0.012093895570215561,xy=0.008279462777832163,y2=0.005668107806249764 -a=dog,b=cat,i=628,x=0.8543574585850832,y=0.19910931595552905,x2=0.7299266670399621,xy=0.17011052916038016,y2=0.0396445197002787 -a=pan,b=wye,i=629,x=0.24343751390915702,y=0.5782313367627924,x2=0.05926182317827102,xy=0.14076319908590273,y2=0.3343514788144858 -a=hat,b=pan,i=630,x=0.2886803795666991,y=0.6275237652895367,x2=0.08333636154677347,xy=0.18115379875090765,y2=0.3937860760031575 -a=hat,b=wye,i=631,x=0.18174335965195643,y=0.30171923538713774,x2=0.033030648777580385,xy=0.054835467510877874,y2=0.09103449700259904 -a=dog,b=dog,i=632,x=0.8032872688215081,y=0.9598123853927985,x2=0.6452704362507179,xy=0.7710050696432379,y2=0.9212398151534139 -a=wye,b=hat,i=633,x=0.8167281874382986,y=0.6275501410033091,x2=0.6670449321562485,xy=0.5125378891882814,y2=0.3938191794732731 -a=hat,b=pan,i=634,x=0.5014128775886096,y=0.17897332371251284,x2=0.25141487381169003,xy=0.08973952925428881,y2=0.03203145060070391 -a=cat,b=wye,i=635,x=0.642248921041283,y=0.8563744957128003,x2=0.4124836765786921,xy=0.5500055958788188,y2=0.7333772769073531 -a=dog,b=dog,i=636,x=0.6813161263570021,y=0.2562808134680652,x2=0.4641916640341105,xy=0.1746082510916836,y2=0.06567985535185322 -a=dog,b=dog,i=637,x=0.7298771870554595,y=0.33815675098998677,x2=0.5327207081839902,xy=0.246812898196385,y2=0.11434998824010391 -a=cat,b=dog,i=638,x=0.25489438523989205,y=0.00429655201835788,x2=0.0649711476268225,xy=0.0010951669853705491,y2=1.846035924645517e-05 -a=hat,b=dog,i=639,x=0.8948762266962884,y=0.018630792419090936,x2=0.8008034611061869,xy=0.01667225322035791,y2=0.0003471064261632563 -a=cat,b=hat,i=640,x=0.5939327381286611,y=0.7638047567608417,x2=0.3527560974210087,xy=0.45364865057866266,y2=0.5833977064504885 -a=wye,b=dog,i=641,x=0.7876157448124265,y=0.033865934334884495,x2=0.6203385614764333,xy=0.026673343094938778,y2=0.0011469015083747085 -a=cat,b=cat,i=642,x=0.9630354820480607,y=0.39868798939322136,x2=0.9274373396835406,xy=0.38395068005207306,y2=0.1589521128864094 -a=cat,b=dog,i=643,x=0.4804040254282608,y=0.4342650603699365,x2=0.23078802764767703,xy=0.20862268310456417,y2=0.1885861426581046 -a=dog,b=dog,i=644,x=0.7056252629336117,y=0.9248527997726413,x2=0.4979070116901287,xy=0.652599500014457,y2=0.8553527012472935 -a=pan,b=wye,i=645,x=0.06666631805239998,y=0.34446560525480874,x2=0.004444397962663751,xy=0.02296425359802954,y2=0.11865655320356172 -a=dog,b=hat,i=646,x=0.30689417080562087,y=0.14426701009501386,x2=0.0941840320744696,xy=0.04427470443771541,y2=0.02081297020175483 -a=wye,b=wye,i=647,x=0.7262466157792433,y=0.43930333429170987,x2=0.5274341469308039,xy=0.3190425598298919,y2=0.1929874195198138 -a=pan,b=dog,i=648,x=0.9211909548648852,y=0.2920994341508264,x2=0.848592775324879,xy=0.26907935666089244,y2=0.08532207943123296 -a=cat,b=hat,i=649,x=0.6502493058776962,y=0.8191483030801362,x2=0.4228241597944258,xy=0.5326506154887514,y2=0.6710039424390667 -a=pan,b=dog,i=650,x=0.9336485825609395,y=0.412457787338537,x2=0.8716996757180515,xy=0.3850906285148465,y2=0.1701214263362018 -a=dog,b=wye,i=651,x=0.21435132141768964,y=0.0361802627461133,x2=0.04594648899350969,xy=0.007755287128868595,y2=0.001309011412377794 -a=pan,b=pan,i=652,x=0.17653494010523307,y=0.632055185075695,x2=0.03116458507795823,xy=0.11157982424053983,y2=0.3994937569810711 -a=dog,b=wye,i=653,x=0.7934904799393186,y=0.7063162386528442,x2=0.6296271417543302,xy=0.5604552111975797,y2=0.4988826289847016 -a=dog,b=hat,i=654,x=0.7166810357882388,y=0.244962427366476,x2=0.5136317070585029,xy=0.17555992617420724,y2=0.06000659082127603 -a=pan,b=wye,i=655,x=0.37149843757026557,y=0.7652342292255708,x2=0.13801108911714852,xy=0.28428332053258604,y2=0.5855834255784534 -a=pan,b=wye,i=656,x=0.9878298247617573,y=0.5834552678172099,x2=0.9758077626888442,xy=0.5763545149641986,y2=0.3404200495436521 -a=hat,b=pan,i=657,x=0.8018928767440677,y=0.27012322572904324,x2=0.6430321857728766,xy=0.21660989055524965,y2=0.07296655707826365 -a=cat,b=wye,i=658,x=0.9756650391067915,y=0.538576785847527,x2=0.951922268535257,xy=0.5254705408259375,y2=0.290064954253853 -a=pan,b=wye,i=659,x=0.6546101034582225,y=0.9183027095534713,x2=0.4285143875495847,xy=0.6011302317067638,y2=0.843279866373247 -a=hat,b=hat,i=660,x=0.6056079386753953,y=0.7621213262550391,x2=0.36676097538666136,xy=0.4615467254138727,y2=0.5808289159327398 -a=cat,b=hat,i=661,x=0.6155376028946405,y=0.9607198669196126,x2=0.3788865405772802,xy=0.5913592039369564,y2=0.9229826626940382 -a=hat,b=cat,i=662,x=0.273576290769719,y=0.8358467433466826,x2=0.07484398687131784,xy=0.22866785169673476,y2=0.6986397783632552 -a=cat,b=cat,i=663,x=0.9116283500250337,y=0.30755866947242627,x2=0.8310662485693654,xy=0.28037920238704267,y2=0.09459233516764916 -a=dog,b=cat,i=664,x=0.681440375153455,y=0.40326893190957636,x2=0.4643609848892815,xy=0.2748037322481948,y2=0.16262583144349052 -a=dog,b=wye,i=665,x=0.556701883952789,y=0.2077252598258471,x2=0.30991698759658454,xy=0.11564104348963167,y2=0.04314978356971569 -a=dog,b=pan,i=666,x=0.18039318656861325,y=0.3971176762613682,x2=0.03254170176037851,xy=0.07163732306351114,y2=0.15770244879922882 -a=pan,b=dog,i=667,x=0.45876812529320365,y=0.5114974665166978,x2=0.21046819278504061,xy=0.23465873380608865,y2=0.2616296582530004 -a=cat,b=wye,i=668,x=0.5999638685903643,y=0.34651837096344573,x2=0.35995664361391594,xy=0.20789850238085988,y2=0.1200749814151602 -a=cat,b=pan,i=669,x=0.3953298944912743,y=0.44132156645350873,x2=0.15628572547848207,xy=0.1744676083027895,y2=0.19476472501697872 -a=pan,b=dog,i=670,x=0.5742369662562881,y=0.45470709356379424,x2=0.3297480934152253,xy=0.26110962194328735,y2=0.20675854093723314 -a=wye,b=wye,i=671,x=0.204845400414845,y=0.9834017236215821,x2=0.04196163807111818,xy=0.20144531984391173,y2=0.9670789500218985 -a=cat,b=pan,i=672,x=0.010200084965239498,y=0.5193786713232798,x2=0.00010404173329810484,xy=0.005297706576630652,y2=0.2697542042255355 -a=pan,b=dog,i=673,x=0.37805567579664534,y=0.796925254923346,x2=0.14292609400205822,xy=0.3012821158094594,y2=0.63508986193464 -a=dog,b=dog,i=674,x=0.010584874037750769,y=0.918376672813548,x2=0.00011203955839505027,xy=0.009720901400940056,y2=0.8434157131680825 -a=hat,b=dog,i=675,x=0.7808052633453111,y=0.32819076493831556,x2=0.6096568592677406,xy=0.25625307664516056,y2=0.1077091781907967 -a=cat,b=wye,i=676,x=0.18383855808326421,y=0.6419376756640074,x2=0.03379661543813371,xy=0.11801289667339325,y2=0.41208397943690833 -a=cat,b=dog,i=677,x=0.09370495191840922,y=0.6379280422695233,x2=0.008780618014031384,xy=0.0597770165282706,y2=0.40695218711382664 -a=dog,b=wye,i=678,x=0.07129586318391401,y=0.7205145584323225,x2=0.005083100107139385,xy=0.05136970738000908,y2=0.5191412289129247 -a=dog,b=wye,i=679,x=0.2806511819369465,y=0.8024798522027793,x2=0.07876508592260505,xy=0.22521691900129615,y2=0.6439739131913945 -a=dog,b=dog,i=680,x=0.307464788040163,y=0.892726683412014,x2=0.09453459588458235,xy=0.2744820204930726,y2=0.7969609312758142 -a=wye,b=wye,i=681,x=0.4638094536373415,y=0.6763233986299853,x2=0.21511920928336922,xy=0.31368518600072337,y2=0.45741333953441393 -a=wye,b=cat,i=682,x=0.6549236504388642,y=0.6724922085564017,x2=0.42892498790416766,xy=0.4404310521194526,y2=0.45224577056906684 -a=dog,b=wye,i=683,x=0.29501824964374734,y=0.4562380927618723,x2=0.08703576762286043,xy=0.1345985635474092,y2=0.20815319728699083 -a=hat,b=dog,i=684,x=0.059282719226964375,y=0.2642650422733903,x2=0.0035144407989430916,xy=0.01566635030259527,y2=0.06983601256775678 -a=cat,b=cat,i=685,x=0.41255038540002265,y=0.7545729508782292,x2=0.1701978204937072,xy=0.3112993616972458,y2=0.5693803381970785 -a=hat,b=cat,i=686,x=0.5632576154489349,y=0.09067560686771681,x2=0.31725914136122024,xy=0.05107372610369524,y2=0.00822206568082873 -a=dog,b=dog,i=687,x=0.9445088668225828,y=0.12938833313358844,x2=0.8920969995064795,xy=0.12220842790806846,y2=0.01674134075108846 -a=cat,b=wye,i=688,x=0.44107001651763333,y=0.9027399918597477,x2=0.19454275947086533,xy=0.3981715431207071,y2=0.8149394929029374 -a=dog,b=pan,i=689,x=0.49128825186385117,y=0.809215546212808,x2=0.24136414641943885,xy=0.3975580910799419,y2=0.6548298002324932 -a=wye,b=dog,i=690,x=0.34429686601523735,y=0.2844786708909688,x2=0.1185403319479143,xy=0.09794511483594068,y2=0.08092811419189214 -a=pan,b=cat,i=691,x=0.7667096709438219,y=0.20657770046533896,x2=0.5878437195187837,xy=0.15838512074811145,y2=0.04267434632954731 -a=hat,b=wye,i=692,x=0.39986680014905984,y=0.9398657414231609,x2=0.15989345786144815,xy=0.37582110659260304,y2=0.883347611900908 -a=dog,b=dog,i=693,x=0.6622827912308988,y=0.9108718138179128,x2=0.43861849556059035,xy=0.603254727308879,y2=0.8296874612079345 -a=hat,b=dog,i=694,x=0.20043426609309134,y=0.469483028263054,x2=0.040173895024276145,xy=0.09410048621306728,y2=0.22041431382704754 -a=cat,b=cat,i=695,x=0.014453292624752367,y=0.331690589927086,x2=0.00020889766769672117,xy=0.004794021157092914,y2=0.11001864744617833 -a=cat,b=pan,i=696,x=0.17586054638409654,y=0.40705795940745815,x2=0.03092693177451297,xy=0.07158543515139099,y2=0.16569618231696384 -a=wye,b=dog,i=697,x=0.2462627216963228,y=0.5149541111764933,x2=0.060645328097280536,xy=0.12681400096703402,y2=0.26517773661757216 -a=pan,b=cat,i=698,x=0.8881694396830215,y=0.21621369618476227,x2=0.7888449535868525,xy=0.19203439739221537,y2=0.046748362417876686 -a=wye,b=wye,i=699,x=0.34064759605569916,y=0.5117005632025989,x2=0.11604078469852679,xy=0.17430956675531267,y2=0.26183746638185695 -a=wye,b=cat,i=700,x=0.6171058843980554,y=0.19037770326108672,x2=0.3808196725587061,xy=0.11748320094060347,y2=0.03624366989896639 -a=cat,b=dog,i=701,x=0.16966649099972952,y=0.7746664751435653,x2=0.0287867181681613,xy=0.13143494253273794,y2=0.6001081477113561 -a=pan,b=cat,i=702,x=0.9666068626696498,y=0.7506852103873074,x2=0.9343288269600633,xy=0.7256174760649812,y2=0.563528285094236 -a=dog,b=wye,i=703,x=0.05236716064893443,y=0.612791909364745,x2=0.0027423195144313066,xy=0.03209017236207087,y2=0.37551392418288987 -a=pan,b=pan,i=704,x=0.11218932047414909,y=0.026881826389739016,x2=0.012586443628451328,xy=0.003015853835768869,y2=0.000722632590048069 -a=hat,b=hat,i=705,x=0.9071556729941082,y=0.9106992104876415,x2=0.8229314150453932,xy=0.8261459551851194,y2=0.8293730519828135 -a=cat,b=hat,i=706,x=0.9743694755987752,y=0.4678325205552769,x2=0.9493958749786321,xy=0.4558417277214984,y2=0.21886726728910358 -a=dog,b=wye,i=707,x=0.7500470499024816,y=0.23854032279188464,x2=0.5625705770674158,xy=0.17891646539283876,y2=0.056901485597656516 -a=cat,b=pan,i=708,x=0.7641611039700442,y=0.19825719293654487,x2=0.5839421928207167,xy=0.15150043542439218,y2=0.039305914551078375 -a=hat,b=pan,i=709,x=0.3300583003504418,y=0.8415214690644649,x2=0.10893848163022246,xy=0.27775114578782417,y2=0.7081583828964152 -a=dog,b=hat,i=710,x=0.7754192632904059,y=0.6571707682086041,x2=0.6012750338818358,xy=0.5095828729403059,y2=0.43187341858788686 -a=wye,b=hat,i=711,x=0.37832133923590616,y=0.7488676293849656,x2=0.1431270357212496,xy=0.2833126044593384,y2=0.5608027263406583 -a=hat,b=cat,i=712,x=0.9631299491774535,y=0.8172661823041355,x2=0.9276192990025642,xy=0.7871335366270336,y2=0.6679240127379764 -a=hat,b=wye,i=713,x=0.2704894268616752,y=0.15580537884000922,x2=0.07316453004395754,xy=0.04214370762440027,y2=0.024275316075478795 -a=dog,b=wye,i=714,x=0.951884509254984,y=0.18535688215871748,x2=0.9060841189596017,xy=0.17643834481068468,y2=0.03435717376360068 -a=wye,b=cat,i=715,x=0.9648431191772672,y=0.20702769835854917,x2=0.9309222446237182,xy=0.19974925024035298,y2=0.04286046788763842 -a=pan,b=pan,i=716,x=0.54062796998219,y=0.26214674180539355,x2=0.29227860192706373,xy=0.1417238608596952,y2=0.06872091423918367 -a=hat,b=dog,i=717,x=0.9563794498766638,y=0.7787136742425006,x2=0.9146616521463901,xy=0.7447457553834783,y2=0.6063949864522553 -a=cat,b=pan,i=718,x=0.6876102509763913,y=0.09858588204177132,x2=0.4728078572478158,xy=0.06778866309347129,y2=0.009719176137954049 -a=wye,b=hat,i=719,x=0.38908047655525646,y=0.9452665319783746,x2=0.15138361723646548,xy=0.36778475273388056,y2=0.8935288164784235 -a=pan,b=cat,i=720,x=0.2592860483524986,y=0.9088051651455961,x2=0.06722925487025423,xy=0.23564049999294148,y2=0.8259268281953142 -a=pan,b=hat,i=721,x=0.6758674765249959,y=0.17012810645455811,x2=0.4567968458242659,xy=0.11498405399541806,y2=0.02894357260581346 -a=hat,b=pan,i=722,x=0.7621741457805322,y=0.6022016456156329,x2=0.580909428496284,xy=0.45898252483472585,y2=0.36264682198217635 -a=wye,b=hat,i=723,x=0.03908932355981043,y=0.6767758558560469,x2=0.0015279752163635508,xy=0.026454710407024642,y2=0.45802555906968484 -a=pan,b=wye,i=724,x=0.6866208924567617,y=0.025161390654418136,x2=0.47144824995811996,xy=0.017276336506589805,y2=0.0006330955796642403 -a=cat,b=pan,i=725,x=0.4409277411269419,y=0.9047781220249766,x2=0.19441727289530747,xy=0.39894177356554955,y2=0.8186234500950436 -a=hat,b=wye,i=726,x=0.5379539711810011,y=0.9219555713213392,x2=0.28939447510940935,xy=0.49596966084476307,y2=0.850002075490457 -a=wye,b=hat,i=727,x=0.8812388237141883,y=0.6434778499253834,x2=0.7765818644211662,xy=0.5670576635543798,y2=0.4140637433445942 -a=cat,b=hat,i=728,x=0.5073505851490089,y=0.47505404750912783,x2=0.2574046162510417,xy=0.24101894898116108,y2=0.2256763480548047 -a=pan,b=hat,i=729,x=0.7505898109290352,y=0.019209876435152262,x2=0.5633850642704848,xy=0.014418737521431066,y2=0.0003690193526538182 -a=dog,b=cat,i=730,x=0.5676893229947293,y=0.7702760275269791,x2=0.32227116744221407,xy=0.43727747658586025,y2=0.5933251585827435 -a=cat,b=hat,i=731,x=0.25757631638687406,y=0.49888611501918945,x2=0.06634555876343105,xy=0.12850124780320119,y2=0.24888735575893992 -a=hat,b=hat,i=732,x=0.9356142965615097,y=0.2712958876781135,x2=0.8753741119302887,xy=0.25382831110998855,y2=0.0736014586710556 -a=pan,b=hat,i=733,x=0.037564291393333726,y=0.28968131412477416,x2=0.0014110759878832864,xy=0.010881673294986858,y2=0.08391526375305608 -a=dog,b=dog,i=734,x=0.7289015723659092,y=0.6922902279093466,x2=0.5312975021974948,xy=0.5046114356566764,y2=0.47926575965877505 -a=wye,b=pan,i=735,x=0.2605606600733885,y=0.09176219878728087,x2=0.06789185757787992,xy=0.023909619085799395,y2=0.008420301126276451 -a=pan,b=dog,i=736,x=0.1202212587887802,y=0.7482722739652927,x2=0.014453151064758862,xy=0.0899582346928505,y2=0.5599113959851901 -a=pan,b=hat,i=737,x=0.5511991289770363,y=0.9437419681770345,x2=0.30382047978504345,xy=0.5201897508382552,y2=0.8906489024986628 -a=wye,b=dog,i=738,x=0.8484721809277587,y=0.12265385134433548,x2=0.7199050418083073,xy=0.10406838074931743,y2=0.015043967249598347 -a=cat,b=wye,i=739,x=0.1736721121765168,y=0.6541724760808302,x2=0.03016200254785263,xy=0.11361151564869969,y2=0.42794162846172434 -a=pan,b=cat,i=740,x=0.9191072314756276,y=0.09237768563237059,x2=0.8447581029507928,xy=0.08490499889169399,y2=0.008533636802793088 -a=pan,b=cat,i=741,x=0.16333728979866036,y=0.6322918687716038,x2=0.026679070238771557,xy=0.10327684020688398,y2=0.3997930073146871 -a=pan,b=hat,i=742,x=0.6592900853719631,y=0.56407525201075,x2=0.4346634166697704,xy=0.371889221054379,y2=0.31818088993099114 -a=hat,b=hat,i=743,x=0.8830864459548787,y=0.08686698218682332,x2=0.779841671029219,xy=0.07671105457018756,y2=0.007545872594245879 -a=hat,b=dog,i=744,x=0.8975631160557165,y=0.791571765557401,x2=0.8056195473036476,xy=0.710485620475426,y2=0.6265858600276611 -a=hat,b=pan,i=745,x=0.35169238363466515,y=0.32903226829772925,x2=0.12368753270663249,xy=0.11571814273034907,y2=0.10826223358114888 -a=dog,b=wye,i=746,x=0.3289380868423477,y=0.8875023240465095,x2=0.10820026497550389,xy=0.29193331653999616,y2=0.7876603751879556 -a=cat,b=wye,i=747,x=0.8902092321224123,y=0.4250494265494692,x2=0.792472476955975,xy=0.37838292362267467,y2=0.1806670150100326 -a=cat,b=dog,i=748,x=0.986548192318023,y=0.22327955924073406,x2=0.973277335765959,xy=0.2202760455505111,y2=0.04985376157473647 -a=pan,b=pan,i=749,x=0.4244814446882297,y=0.7353411946490032,x2=0.18018449688460658,xy=0.31213869264337757,y2=0.5407266725478231 -a=dog,b=wye,i=750,x=0.5129794588106171,y=0.6033400789231494,x2=0.26314792516163366,xy=0.30950106716475223,y2=0.3640192508349922 -a=wye,b=hat,i=751,x=0.697578206130514,y=0.3781819268120694,x2=0.4866153536682659,xy=0.2638114700965447,y2=0.1430215697672894 -a=dog,b=pan,i=752,x=0.686527845255024,y=0.3414791871406174,x2=0.47132048231050616,xy=0.23443497054708518,y2=0.11660803525021682 -a=dog,b=hat,i=753,x=0.057067042691808956,y=0.34766396030144486,x2=0.003256647361588746,xy=0.019840154064925928,y2=0.12087022929248463 -a=hat,b=wye,i=754,x=0.6758002251578562,y=0.5221923775790305,x2=0.45670594432340916,xy=0.35289772634362504,y2=0.27268487920164075 -a=wye,b=cat,i=755,x=0.5831437743121346,y=0.5906129897660252,x2=0.34005666151900177,xy=0.34441228800993406,y2=0.348823703680363 -a=pan,b=pan,i=756,x=0.9965826588776338,y=0.8864833103309704,x2=0.9931769959756142,xy=0.883453894460285,y2=0.7858526594953555 -a=wye,b=cat,i=757,x=0.8211650666566518,y=0.42668670197381964,x2=0.6743120666972233,xy=0.35038021406783854,y2=0.18206154164129518 -a=hat,b=pan,i=758,x=0.3400297232695506,y=0.3517706078504709,x2=0.11562021270676717,xy=0.11961246244175722,y2=0.12374256054748976 -a=pan,b=dog,i=759,x=0.4690931525792873,y=0.8364915573615876,x2=0.22004838579677452,xy=0.3923924617487049,y2=0.6997181255372142 -a=hat,b=wye,i=760,x=0.42710815754180076,y=0.7028076921804566,x2=0.1824213782387517,xy=0.30017489851339985,y2=0.4939386521880194 -a=dog,b=wye,i=761,x=0.04685691053834329,y=0.49240339911968856,x2=0.0021955700651983064,xy=0.02307250202132739,y2=0.2424611074646233 -a=wye,b=hat,i=762,x=0.5214034880091322,y=0.9057172555953829,x2=0.27186159730808923,xy=0.4722441362174913,y2=0.8203237470832321 -a=cat,b=wye,i=763,x=0.3293907183268989,y=0.3943264033522689,x2=0.10849824531991047,xy=0.12988745725546633,y2=0.15549331238073624 -a=cat,b=wye,i=764,x=0.7863068915914236,y=0.9484380633526672,x2=0.6182785277641668,xy=0.7457633854618255,y2=0.8995347600161581 -a=dog,b=cat,i=765,x=0.9394516863208765,y=0.37368521011114253,x2=0.8825694709311386,xy=0.3510592007920839,y2=0.13964063625580875 -a=cat,b=wye,i=766,x=0.3868441976616561,y=0.24369088426850782,x2=0.14964843326449048,xy=0.09427040460231041,y2=0.05938524707556728 -a=pan,b=cat,i=767,x=0.2275114758829052,y=0.6533572385893692,x2=0.05176147165841776,xy=0.14864626963024682,y2=0.42687568121712594 -a=hat,b=wye,i=768,x=0.08806251129519171,y=0.052816238168512664,x2=0.007755005895615768,xy=0.004651130570284183,y2=0.002789555014273054 -a=hat,b=pan,i=769,x=0.8552650886303925,y=0.7058684713842834,x2=0.7314783718299531,xy=0.6037046607398788,y2=0.498250298894385 -a=hat,b=pan,i=770,x=0.9043801066452809,y=0.47986698695818764,x2=0.8179033772957297,xy=0.43398215684079533,y2=0.23027232517232943 -a=pan,b=hat,i=771,x=0.5753128246648473,y=0.30621839997259126,x2=0.3309848462238454,xy=0.17617137265258148,y2=0.09376970848177388 -a=cat,b=pan,i=772,x=0.7454609561562912,y=0.10764510772148561,x2=0.5557120371534519,xy=0.08024522492760562,y2=0.01158746921637024 -a=pan,b=wye,i=773,x=0.889983027502424,y=0.0930802888208736,x2=0.7920697892423804,xy=0.08283987724560112,y2=0.008663940166977246 -a=wye,b=hat,i=774,x=0.3241419410731854,y=0.8004381936154861,x2=0.1050679979626924,xy=0.25945558978763783,y2=0.6407013017984223 -a=hat,b=dog,i=775,x=0.08644741476164519,y=0.16743346394966108,x2=0.007473155518971911,xy=0.01447419010303532,y2=0.028033964850182454 -a=dog,b=hat,i=776,x=0.8465506444792363,y=0.08317373752662649,x2=0.7166479936682104,xy=0.0704107811069125,y2=0.0069178706141481555 -a=wye,b=cat,i=777,x=0.196023624794873,y=0.21174928859580733,x2=0.03842526147772115,xy=0.041507863098285816,y2=0.0448377612208305 -a=cat,b=cat,i=778,x=0.5764737723226592,y=0.6395255247768671,x2=0.33232201017591706,xy=0.3686696917647488,y2=0.4089928968411272 -a=dog,b=pan,i=779,x=0.3758546172772318,y=0.14144998658957741,x2=0.14126669332861438,xy=0.053164630573495186,y2=0.02000809870619163 -a=hat,b=dog,i=780,x=0.23173454859220277,y=0.3505016268111515,x2=0.05370090101123199,xy=0.0812233362699149,y2=0.12285139039726371 -a=pan,b=dog,i=781,x=0.0626485574741863,y=0.8347422505981941,x2=0.003924841753596423,xy=0.05229539786273258,y2=0.6967946249337382 -a=wye,b=dog,i=782,x=0.3168395421741931,y=0.6695453552576639,x2=0.10038729548515228,xy=0.21213844382469568,y2=0.4482909827471114 -a=cat,b=dog,i=783,x=0.640218961180953,y=0.3278005809165341,x2=0.4098803182556186,xy=0.2098641473888964,y2=0.10745322084921721 -a=dog,b=pan,i=784,x=0.3713482863553802,y=0.09822192559310827,x2=0.13789954977907745,xy=0.036474543751526416,y2=0.009647546667218098 -a=wye,b=dog,i=785,x=0.6125629193634933,y=0.095998056773002,x2=0.3752333301791256,xy=0.05880484991009247,y2=0.009215626904192514 -a=pan,b=pan,i=786,x=0.11507645846382175,y=0.8192902299547586,x2=0.013242591292575693,xy=0.09428101811720375,y2=0.6712364808993213 -a=pan,b=cat,i=787,x=0.37810148287672585,y=0.08810292713511803,x2=0.142960731353579,xy=0.03331184739556825,y2=0.007762125769775916 -a=pan,b=dog,i=788,x=0.6966646475521092,y=0.32832780568398645,x2=0.48534163114890455,xy=0.22873437502839183,y2=0.10779914798526156 -a=pan,b=dog,i=789,x=0.8625991513242034,y=0.209258758236743,x2=0.744077295865236,xy=0.18050642726217117,y2=0.04378922789878366 -a=dog,b=dog,i=790,x=0.954622083079162,y=0.9954847001142825,x2=0.9113033215023985,xy=0.9503116780965312,y2=0.9909897881616229 -a=hat,b=wye,i=791,x=0.8437545927205472,y=0.1455640910039323,x2=0.7119218127370165,xy=0.12282037031975958,y2=0.021188904589801084 -a=hat,b=dog,i=792,x=0.6291498056715833,y=0.10598781312134209,x2=0.395829477976591,xy=0.06668221202884846,y2=0.011233416530244534 -a=pan,b=wye,i=793,x=0.7262149840747153,y=0.9926177938593836,x2=0.527388203094639,xy=0.7208539153598713,y2=0.9852900846862699 -a=hat,b=pan,i=794,x=0.6392479219184836,y=0.6825404700858696,x2=0.4086379056770997,xy=0.43631257712765703,y2=0.46586149330503984 -a=dog,b=wye,i=795,x=0.598504884658865,y=0.3787646874120393,x2=0.35820809696052125,xy=0.22669251555239361,y2=0.14346268843033982 -a=wye,b=hat,i=796,x=0.48049061733461884,y=0.34369988394774387,x2=0.23087123334660312,xy=0.16514456941588831,y2=0.1181296102256926 -a=hat,b=dog,i=797,x=0.05004104718155633,y=0.7894829047147601,x2=0.002504106403026747,xy=0.039506551283863454,y2=0.623283256836855 -a=cat,b=cat,i=798,x=0.6549250573390932,y=0.19493923807461988,x2=0.42892683073061455,xy=0.12767059167365957,y2=0.038001306541113326 -a=wye,b=pan,i=799,x=0.42197995250076836,y=0.8251800230215005,x2=0.17806708031255072,xy=0.3482094269191957,y2=0.6809220703937641 -a=dog,b=hat,i=800,x=0.7480461467642859,y=0.1888136856077568,x2=0.5595730376888957,xy=0.1412413499752458,y2=0.035650607872784824 -a=cat,b=dog,i=801,x=0.3491691308786241,y=0.1322545421642024,x2=0.12191908195853374,xy=0.0461792035422249,y2=0.017491263923062793 -a=wye,b=wye,i=802,x=0.41295400205621124,y=0.8799107119795011,x2=0.17053100781424133,xy=0.3633626499640652,y2=0.7742428610562725 -a=cat,b=cat,i=803,x=0.5378634245510693,y=0.15722757458263636,x2=0.2892970634698038,xy=0.08456696169887545,y2=0.024720510209138482 -a=wye,b=hat,i=804,x=0.7516383220207629,y=0.3708676090408751,x2=0.564960167130188,xy=0.27875830735133567,y2=0.1375427834356954 -a=hat,b=wye,i=805,x=0.6661935417293913,y=0.6643471366205853,x2=0.4438138350419502,xy=0.4425837718830475,y2=0.44135711793597066 -a=hat,b=dog,i=806,x=0.17312553589325408,y=0.026879444221558524,x2=0.029972451178326406,xy=0.004653518185370151,y2=0.0007225045216598759 -a=hat,b=cat,i=807,x=0.6774379517015529,y=0.04542050650851759,x2=0.45892217840559546,xy=0.030769574894377205,y2=0.0020630224114902888 -a=wye,b=wye,i=808,x=0.8524737347853896,y=0.926916442954667,x2=0.7267114684989507,xy=0.7901719219595535,y2=0.8591740922197325 -a=hat,b=wye,i=809,x=0.7848280312957139,y=0.31572042431105607,x2=0.615955038707506,xy=0.24778623905189356,y2=0.09967938632715329 -a=pan,b=hat,i=810,x=0.5101794254127774,y=0.9065235870380484,x2=0.2602830461145117,xy=0.4624896827582014,y2=0.8217850138563301 -a=dog,b=hat,i=811,x=0.6080377557256639,y=0.06528218831026511,x2=0.3697099123879021,xy=0.03969403526903377,y2=0.004261764110576914 -a=dog,b=dog,i=812,x=0.17203162334805688,y=0.7869545622144918,x2=0.02959487943176771,xy=0.13538107083891845,y2=0.6192974829902024 -a=dog,b=cat,i=813,x=0.5274589853025814,y=0.3982850231684436,x2=0.2782129811764288,xy=0.21007901418164238,y2=0.15863095968028768 -a=cat,b=hat,i=814,x=0.45066542079445837,y=0.19549042604288147,x2=0.20309932149984622,xy=0.08810077511390312,y2=0.03821650667442731 -a=pan,b=cat,i=815,x=0.915169604952166,y=0.3208394583949399,x2=0.8375354058283037,xy=0.29362252039236403,y2=0.10293795806315836 -a=cat,b=hat,i=816,x=0.6289371252503521,y=0.09961353155285746,x2=0.39556190751817705,xy=0.0626506481708894,y2=0.009922855668432129 -a=cat,b=wye,i=817,x=0.5918008776228343,y=0.7901726001168455,x2=0.3502282787551569,xy=0.4676248382226661,y2=0.6243727379754163 -a=hat,b=hat,i=818,x=0.9957052214494239,y=0.026702922142899044,x2=0.9914288880216462,xy=0.026588239005642018,y2=0.0007130460509697281 -a=wye,b=pan,i=819,x=0.7698305878822377,y=0.8257549912538609,x2=0.5926391340391117,xy=0.6356914503636517,y2=0.6818713055806639 -a=cat,b=hat,i=820,x=0.11840704068628438,y=0.2731009565650273,x2=0.014020227284083404,xy=0.032337076075458375,y2=0.07458413247673293 -a=pan,b=cat,i=821,x=0.16575861713034812,y=0.8385594122473529,x2=0.027475919152965336,xy=0.1389984485557587,y2=0.7031818878686259 -a=hat,b=cat,i=822,x=0.6827428856236868,y=0.4526975089901234,x2=0.46613784786975865,xy=0.30907600360257176,y2=0.20493503464586285 -a=dog,b=wye,i=823,x=0.5603831774536844,y=0.7242975425940232,x2=0.3140293055730875,xy=0.40588415834073405,y2=0.5246069302077409 -a=wye,b=pan,i=824,x=0.1165595975998206,y=0.026098503614706003,x2=0.013586139792632103,xy=0.003042031079287595,y2=0.0006811318909268223 -a=dog,b=dog,i=825,x=0.36065738947447856,y=0.7861605167349159,x2=0.13007375258254572,xy=0.2835345996735219,y2=0.61804835807291 -a=wye,b=cat,i=826,x=0.03064375957521026,y=0.3106058617927957,x2=0.0009390400009032905,xy=0.009518131351429418,y2=0.0964760013800453 -a=hat,b=wye,i=827,x=0.8347298580535868,y=0.5084680264203864,x2=0.6967739359261611,xy=0.4244334435186765,y2=0.2585397338918427 -a=hat,b=hat,i=828,x=0.6392287649180021,y=0.13880595512059102,x2=0.40861341389859435,xy=0.08872875925499903,y2=0.019267093176939528 -a=cat,b=pan,i=829,x=0.5964934366651018,y=0.6420547661716093,x2=0.3558044199845438,xy=0.38298145400091155,y2=0.4122343227636799 -a=wye,b=wye,i=830,x=0.3817201787405874,y=0.10809811919145063,x2=0.14571029485774598,xy=0.04126323337928185,y2=0.011685203372729066 -a=pan,b=dog,i=831,x=0.9237617174839042,y=0.5487821002755663,x2=0.8533357106888125,xy=0.5069438954749813,y2=0.3011617935828617 -a=pan,b=pan,i=832,x=0.9755863704587128,y=0.4750574892881576,x2=0.9517687662248048,xy=0.4634596117338625,y2=0.22567961812876797 -a=cat,b=pan,i=833,x=0.30354198827116374,y=0.06172562221652489,x2=0.09213773864361131,xy=0.018736318094878683,y2=0.003810052438017151 -a=wye,b=dog,i=834,x=0.6698221461058869,y=0.8210265206550994,x2=0.44866170741389605,xy=0.549941746075048,y2=0.6740845476190184 -a=cat,b=cat,i=835,x=0.4686179347944489,y=0.029262329868421366,x2=0.21960276881101437,xy=0.013712852590213539,y2=0.0008562839493283052 -a=dog,b=cat,i=836,x=0.721094408698922,y=0.7293852684468619,x2=0.519977146256848,xy=0.5259556388643944,y2=0.5320028698273008 -a=hat,b=dog,i=837,x=0.26605798248684176,y=0.8721352584850544,x2=0.0707868500449686,xy=0.2320385473281738,y2=0.7606199090927925 -a=wye,b=pan,i=838,x=0.6672927305389438,y=0.6418074827778028,x2=0.4452795882301194,xy=0.42827346766312613,y2=0.4119168449495796 -a=cat,b=pan,i=839,x=0.17159163631914598,y=0.3164629353479077,x2=0.029443689654682057,xy=0.054302392910707584,y2=0.10014878944901401 -a=hat,b=pan,i=840,x=0.4788658406877069,y=0.9775625657328338,x2=0.22931249337754425,xy=0.4681213198644852,y2=0.955628569922161 -a=hat,b=cat,i=841,x=0.6679675997666049,y=0.29400987483784913,x2=0.4461807143379593,xy=0.196389070403118,y2=0.0864418065021677 -a=cat,b=wye,i=842,x=0.9129798969881031,y=0.6883855286504225,x2=0.8335322923044074,xy=0.6284821490353636,y2=0.4738746360553216 -a=dog,b=wye,i=843,x=0.2070630859227116,y=0.5799237603766771,x2=0.04287512155183625,xy=0.12008080342349792,y2=0.3363115678494257 -a=hat,b=hat,i=844,x=0.2186310315035832,y=0.10114133789610291,x2=0.04779952793632079,xy=0.02211263503187743,y2=0.010229570231413663 -a=pan,b=pan,i=845,x=0.8424144754998923,y=0.10454231850187046,x2=0.7096621485317587,xy=0.0880679624082959,y2=0.010929096357746526 -a=wye,b=pan,i=846,x=0.34342486536164973,y=0.6926478262192819,x2=0.11794063814866725,xy=0.23787248646239625,y2=0.47976101116629655 -a=dog,b=pan,i=847,x=0.3808673589411615,y=0.38470555294986253,x2=0.14505994510681558,xy=0.1465217879220133,y2=0.14799836247045947 -a=hat,b=wye,i=848,x=0.3596530917994194,y=0.8221046883234665,x2=0.1293503464408816,xy=0.29567249293833275,y2=0.675856118563424 -a=hat,b=cat,i=849,x=0.9802025016845907,y=0.3712601501962042,x2=0.96079694430873,xy=0.36391012799811623,y2=0.1378340991237081 -a=dog,b=cat,i=850,x=0.41192992606906487,y=0.3481696400454314,x2=0.16968626399126524,xy=0.14342149408340749,y2=0.12122209824936525 -a=cat,b=hat,i=851,x=0.26284256802170036,y=0.17651695062162687,x2=0.06908621556424219,xy=0.046396168600748085,y2=0.031158233856757856 -a=wye,b=hat,i=852,x=0.8950852588075826,y=0.7265214600566965,x2=0.8011776205346371,xy=0.650298649104111,y2=0.527833431922914 -a=dog,b=dog,i=853,x=0.08147261896577951,y=0.9636631059390952,x2=0.006637787641143095,xy=0.07851215704155552,y2=0.9286465817481838 -a=hat,b=hat,i=854,x=0.3065298229214011,y=0.38396348344713616,x2=0.0939605323402255,xy=0.11769625858933495,y2=0.1474279566208592 -a=pan,b=pan,i=855,x=0.6652309340751762,y=0.8209155852306491,x2=0.4425321956505314,xy=0.5460984415598547,y2=0.6739023980745791 -a=wye,b=pan,i=856,x=0.06993033483673339,y=0.9791078310667237,x2=0.004890251730377647,xy=0.06846933846776378,y2=0.958652144856184 -a=hat,b=wye,i=857,x=0.7946870008153237,y=0.8322385855071592,x2=0.6315274292648544,xy=0.6613691854794718,y2=0.6926210632069572 -a=pan,b=hat,i=858,x=0.48190390864045884,y=0.008804124502015287,x2=0.2322313771629517,xy=0.0042427420096784,y2=7.751260824698593e-05 -a=cat,b=cat,i=859,x=0.1978808319576767,y=0.49301100953578814,x2=0.03915682365626228,xy=0.09755742873123584,y2=0.243059855523497 -a=dog,b=dog,i=860,x=0.23181433510474192,y=0.707863271825844,x2=0.053737885960053584,xy=0.1640928537033752,y2=0.5010704115999887 -a=hat,b=pan,i=861,x=0.20656469678426048,y=0.17021804670475116,x2=0.04266897395757347,xy=0.035161039204776014,y2=0.028974183423980848 -a=pan,b=wye,i=862,x=0.7447132643699934,y=0.41838270080015394,x2=0.5545978461286117,xy=0.3115751468688169,y2=0.17504408432883115 -a=wye,b=hat,i=863,x=0.8931259653993054,y=0.5240494288838036,x2=0.7976739900704414,xy=0.46804215208880173,y2=0.2746278039134407 -a=dog,b=pan,i=864,x=0.19890854257784296,y=0.5819912477557206,x2=0.03956460831044157,xy=0.11576303088415071,y2=0.33871381246426063 -a=dog,b=pan,i=865,x=0.08348734276314873,y=0.46365140261253324,x2=0.006970136401651483,xy=0.038709023572527236,y2=0.21497262314456939 -a=wye,b=cat,i=866,x=0.992459292444092,y=0.7757136682861361,x2=0.9849754471586278,xy=0.7698642383664698,y2=0.6017316951659336 -a=dog,b=pan,i=867,x=0.20005683106815952,y=0.8281767420620922,x2=0.04002273565703412,xy=0.1656824145812947,y2=0.6858767160925813 -a=hat,b=hat,i=868,x=0.6641874034693073,y=0.7927732001674593,x2=0.44114490692730035,xy=0.5265499733592782,y2=0.6284893469037546 -a=cat,b=hat,i=869,x=0.849533915413141,y=0.2670454068905317,x2=0.7217078734371819,xy=0.2268641301088088,y2=0.07131324934132963 -a=dog,b=dog,i=870,x=0.818681824385546,y=0.15991198795909045,x2=0.670239929579246,xy=0.13091703804346763,y2=0.02557184389302829 -a=hat,b=dog,i=871,x=0.9657740236138191,y=0.9119721289248706,x2=0.9327194646872257,xy=0.8807589923754329,y2=0.8316931639357608 -a=wye,b=cat,i=872,x=0.7382755379424762,y=0.7473853438162121,x2=0.5450507699242527,xy=0.5517763167562366,y2=0.5585848521512776 -a=pan,b=wye,i=873,x=0.06836429475504757,y=0.2723717731023233,x2=0.004673676797355025,xy=0.018620504179322168,y2=0.07418638278290349 -a=hat,b=dog,i=874,x=0.5656097272439253,y=0.37894346154820757,x2=0.3199143635529476,xy=0.2143341079271506,y2=0.14359814705013788 -a=dog,b=hat,i=875,x=0.33534591909904754,y=0.579691758263101,x2=0.11245688545638494,xy=0.1943972654688825,y2=0.3360425345981656 -a=wye,b=cat,i=876,x=0.4354192326304044,y=0.17028091885454333,x2=0.1895899081444502,xy=0.07414358701924541,y2=0.02899559132594757 -a=dog,b=wye,i=877,x=0.15821476076382146,y=0.7823531529766005,x2=0.025031910523553257,xy=0.12377981693101425,y2=0.612076455972428 -a=hat,b=hat,i=878,x=0.7134099995531998,y=0.8070281607631373,x2=0.5089538274624966,xy=0.5757419598094495,y2=0.6512944522647323 -a=hat,b=dog,i=879,x=0.4841546493561141,y=0.7473067049010725,x2=0.23440572449314176,xy=0.3618120156728518,y2=0.5584673111900987 -a=dog,b=pan,i=880,x=0.1767701917760346,y=0.9667338935872557,x2=0.031247700700536046,xy=0.17088973576581182,y2=0.9345744210103755 -a=cat,b=wye,i=881,x=0.6961602259704199,y=0.8624291510214103,x2=0.48463906022318615,xy=0.6003888726585423,y2=0.7437840405315105 -a=wye,b=dog,i=882,x=0.9942189496990836,y=0.3298671968153588,x2=0.988471319940749,xy=0.32796021795794694,y2=0.10881236753482267 -a=pan,b=pan,i=883,x=0.3654591179142088,y=0.6790141016683621,x2=0.13356036686663159,xy=0.2481518946470285,y2=0.46106015026449276 -a=wye,b=wye,i=884,x=0.1431668343921907,y=0.7907269003628851,x2=0.020496742469880955,xy=0.11320586719370343,y2=0.625249030957496 -a=cat,b=dog,i=885,x=0.06557022118007017,y=0.10846466015020673,x2=0.004299453905603322,xy=0.007112051756270198,y2=0.011764582501499843 -a=hat,b=hat,i=886,x=0.17483412751180394,y=0.6237369473898733,x2=0.03056697214281372,xy=0.10905050499378445,y2=0.3890477795392376 -a=cat,b=pan,i=887,x=0.526277813412793,y=0.9120729790279264,x2=0.27696833689055056,xy=0.4800037730757093,y2=0.8318771190728762 -a=hat,b=pan,i=888,x=0.604852227423324,y=0.30299438896585484,x2=0.3658462170189565,xy=0.18326683106276634,y2=0.09180559974479174 -a=hat,b=pan,i=889,x=0.7560340628074265,y=0.1962826972512871,x2=0.5715875041251036,xy=0.14839640506169066,y2=0.03852689724024043 -a=pan,b=cat,i=890,x=0.22948163869543092,y=0.7460938106876837,x2=0.0526618224983403,xy=0.17121483029712825,y2=0.5566559743464692 -a=pan,b=pan,i=891,x=0.5174048680480675,y=0.5350818027132432,x2=0.26770779747983814,xy=0.2768539295277677,y2=0.28631253559485415 -a=pan,b=dog,i=892,x=0.3230292484624844,y=0.5125573163255617,x2=0.10434789536223746,xy=0.16557100468659405,y2=0.2627150025188619 -a=pan,b=hat,i=893,x=0.019755674152504676,y=0.713367718453797,x2=0.00039028666121994137,xy=0.014093060196688911,y2=0.5088935017319758 -a=pan,b=hat,i=894,x=0.585363891076839,y=0.5562416426860548,x2=0.3426508849766174,xy=0.32560377234168175,y2=0.3094047650580807 -a=hat,b=dog,i=895,x=0.7688318917927516,y=0.5818949738955219,x2=0.5911024778376213,xy=0.4473794136047879,y2=0.33860176064487013 -a=cat,b=hat,i=896,x=0.7953295771429987,y=0.9979287928502694,x2=0.6325491362784611,xy=0.7936822848364279,y2=0.9958618755995958 -a=cat,b=hat,i=897,x=0.2708161837458276,y=0.06760409558629299,x2=0.07334140537865386,xy=0.018308283172268014,y2=0.004570313740040639 -a=pan,b=pan,i=898,x=0.9450997160514841,y=0.613932095581323,x2=0.893213473280596,xy=0.580227049208801,y2=0.37691261798487474 -a=wye,b=cat,i=899,x=0.8795019445540828,y=0.47408779441071724,x2=0.773523670474413,xy=0.41696113707358207,y2=0.2247592368092185 -a=hat,b=wye,i=900,x=0.15229282083921347,y=0.8833697361238129,x2=0.023193103279164774,xy=0.13453086895828711,y2=0.7803420906994548 -a=cat,b=dog,i=901,x=0.9963591865818606,y=0.9423606044154952,x2=0.9927316286860669,xy=0.9389296452822133,y2=0.8880435087543374 -a=hat,b=pan,i=902,x=0.42866863763118523,y=0.6650814671398664,x2=0.1837568008885764,xy=0.28509956643259643,y2=0.44233335793291717 -a=hat,b=hat,i=903,x=0.8045428658324745,y=0.7226649410127849,x2=0.647289222961931,xy=0.5814149226790821,y2=0.5222446169690118 -a=hat,b=pan,i=904,x=0.7719231923698515,y=0.0550611942242798,x2=0.5958654149184628,xy=0.04250301282130249,y2=0.003031735109403863 -a=cat,b=wye,i=905,x=0.10385573852005647,y=0.7024043876290446,x2=0.010786014423546342,xy=0.07294872641694244,y2=0.49337192376053307 -a=dog,b=dog,i=906,x=0.8453563942836098,y=0.7146221102011221,x2=0.7146274333561858,xy=0.604110370354965,y2=0.5106847603883047 -a=dog,b=pan,i=907,x=0.3762010306955349,y=0.5720049995578428,x2=0.14152721549638278,xy=0.21518887039665943,y2=0.3271897195191677 -a=pan,b=pan,i=908,x=0.1558176335309317,y=0.5109657742766185,x2=0.02427913491917973,xy=0.07961747776308291,y2=0.2610860224821042 -a=hat,b=cat,i=909,x=0.19530910772058396,y=0.4313061117939153,x2=0.03814564755861067,xy=0.08423801184890403,y2=0.18602496207078537 -a=hat,b=wye,i=910,x=0.7853057534899444,y=0.23673344723772105,x2=0.6167051264644092,xy=0.18590813815929053,y2=0.056042725041054856 -a=dog,b=dog,i=911,x=0.6820089482250695,y=0.827544207784697,x2=0.46513620545906553,xy=0.5643925547609896,y2=0.6848294158380017 -a=wye,b=cat,i=912,x=0.5992184385943385,y=0.21072064560691928,x2=0.35906273715143705,xy=0.12626769624016912,y2=0.04440319048499687 -a=hat,b=pan,i=913,x=0.04143325240249729,y=0.7341534877432273,x2=0.0017167144046490474,xy=0.030418366759838836,y2=0.5389813435655451 -a=cat,b=hat,i=914,x=0.13661397645943585,y=0.44052415487054775,x2=0.018663378564059294,xy=0.06018175652329788,y2=0.19406153102441034 -a=pan,b=hat,i=915,x=0.6423493830531135,y=0.3296660920252046,x2=0.41261272990871556,xy=0.2117608108259211,y2=0.10867973223117065 -a=wye,b=cat,i=916,x=0.37164909661033596,y=0.40189957349793326,x2=0.13812305101127884,xy=0.14936561341858623,y2=0.16152326717782065 -a=cat,b=wye,i=917,x=0.22198485653121702,y=0.690292696414577,x2=0.049277276529185,xy=0.15323452517813682,y2=0.4765040067233074 -a=dog,b=pan,i=918,x=0.7073942058565554,y=0.46092951368502777,x2=0.5004065624794267,xy=0.3260588672890685,y2=0.2124560165859162 -a=cat,b=hat,i=919,x=0.14151997916254433,y=0.5385081787030932,x2=0.02002790450216698,xy=0.07620966622892145,y2=0.2899910585301226 -a=dog,b=wye,i=920,x=0.2666453213739709,y=0.3072922207317045,x2=0.07109972741062823,xy=0.08193803295272654,y2=0.09442850892222258 -a=hat,b=pan,i=921,x=0.4547526452692495,y=0.15519111136730102,x2=0.2067999683793799,xy=0.07057356841655484,y2=0.024084281047418027 -a=wye,b=cat,i=922,x=0.21525470102264654,y=0.16556905159493673,x2=0.04633458631234895,xy=0.03563951669967125,y2=0.027413110846046824 -a=hat,b=dog,i=923,x=0.41687782182269617,y=0.07019410239848023,x2=0.1737871183276356,xy=0.029262364512677733,y2=0.004927212011528328 -a=pan,b=hat,i=924,x=0.8780534717357373,y=0.7873355062590681,x2=0.7709778992271813,xy=0.6913226746915891,y2=0.6198971994162231 -a=hat,b=hat,i=925,x=0.46266864135659247,y=0.7145088994960574,x2=0.2140622716947552,xy=0.330580861767035,y2=0.5105229674590671 -a=wye,b=hat,i=926,x=0.22868151273613524,y=0.5201340517551178,x2=0.05229523426728718,xy=0.11894504178093561,y2=0.27053943179519563 -a=pan,b=hat,i=927,x=0.3746304958274238,y=0.17093794150208985,x2=0.1403480084039014,xy=0.06403856578064708,y2=0.029219779844971892 -a=pan,b=cat,i=928,x=0.33561226968517766,y=0.6701536560644064,x2=0.11263559556323642,xy=0.22491178954959534,y2=0.44910592273649064 -a=dog,b=wye,i=929,x=0.6064855333541553,y=0.4141672252184334,x2=0.3678247021678743,xy=0.25118643048441214,y2=0.17153449044513655 -a=dog,b=hat,i=930,x=0.6324355476753056,y=0.762109091304607,x2=0.39997472196336376,xy=0.48198488054755867,y2=0.5808102670491339 -a=pan,b=hat,i=931,x=0.8830906732363291,y=0.38008337812375315,x2=0.7798491371569929,xy=0.3356480862732434,y2=0.1444633743259639 -a=dog,b=wye,i=932,x=0.9112312614588713,y=0.8762271242954337,x2=0.830342411859926,xy=0.7984455477962074,y2=0.7677739733510455 -a=wye,b=pan,i=933,x=0.29688501773453857,y=0.24743131347282576,x2=0.08814071375523728,xy=0.07345864988846004,y2=0.06122225488688777 -a=cat,b=dog,i=934,x=0.06045711073020743,y=0.6548623532225628,x2=0.0036550622378445623,xy=0.03959108580182069,y2=0.4288447016681926 -a=dog,b=hat,i=935,x=0.019832522192974822,y=0.15602458248960316,x2=0.00039332893653483886,xy=0.0030943609948746852,y2=0.02434367034105498 -a=wye,b=cat,i=936,x=0.5309363025365442,y=0.06530016180674902,x2=0.2818933573511768,xy=0.03467022646471339,y2=0.004264111131987604 -a=pan,b=wye,i=937,x=0.6180817541716009,y=0.9876308686371087,x2=0.38202505483984334,xy=0.6104366197612461,y2=0.9754147326848899 -a=pan,b=pan,i=938,x=0.9818389635120035,y=0.8793670901119667,x2=0.9640077502703254,xy=0.8633968723020999,y2=0.7732864791719877 -a=pan,b=pan,i=939,x=0.7123702155128228,y=0.19613168702534123,x2=0.5074713239497856,xy=0.13971837215513583,y2=0.0384676386554064 -a=pan,b=wye,i=940,x=0.2763911140028529,y=0.9039093669743488,x2=0.07639204789973801,xy=0.2498325168956538,y2=0.817052143703968 -a=cat,b=dog,i=941,x=0.07182291530717488,y=0.8822713977303266,x2=0.005158531163221616,xy=0.06336730387712805,y2=0.7784028192530241 -a=dog,b=wye,i=942,x=0.2680043914557573,y=0.9004523844910486,x2=0.07182635383957078,xy=0.24132519334040906,y2=0.8108144967356152 -a=dog,b=cat,i=943,x=0.7865047304222321,y=0.35215724454095876,x2=0.618589690976548,xy=0.2769733386839228,y2=0.12401472488268063 -a=hat,b=dog,i=944,x=0.5675204239943485,y=0.3295982424813395,x2=0.32207943165072517,xy=0.1870537343208019,y2=0.10863500144678788 -a=hat,b=cat,i=945,x=0.17923128277767597,y=0.20921118142295692,x2=0.03212385272613125,xy=0.03749718841786966,y2=0.04376931843238939 -a=wye,b=hat,i=946,x=0.16763083018519132,y=0.10228733253499145,x2=0.028100095228576448,xy=0.017146510470269345,y2=0.01046269839712392 -a=cat,b=cat,i=947,x=0.7914191333138371,y=0.748388853094136,x2=0.626344244575225,xy=0.5922892574974977,y2=0.5600858754355563 -a=hat,b=wye,i=948,x=0.6834678751932841,y=0.11533712351371006,x2=0.4671283364212226,xy=0.07882921873882079,y2=0.01330265206041681 -a=pan,b=dog,i=949,x=0.26979861814609696,y=0.9149668439234241,x2=0.07279129435354344,xy=0.2468567901400354,y2=0.8371643254791915 -a=wye,b=dog,i=950,x=0.5623890188980715,y=0.5493012859573337,x2=0.3162814085771354,xy=0.3089210112889939,y2=0.30173190275438055 -a=dog,b=dog,i=951,x=0.1281055710583192,y=0.8637404563175912,x2=0.01641103733617807,xy=0.11064996440273825,y2=0.7460475758797207 -a=hat,b=pan,i=952,x=0.7495158494009292,y=0.05659940815409714,x2=0.5617740085031964,xy=0.042422153478208,y2=0.003203493003394078 -a=dog,b=hat,i=953,x=0.02008382113876772,y=0.023054974160895414,x2=0.00040335987153401314,xy=0.00046303197740633494,y2=0.0005315318335595552 -a=hat,b=dog,i=954,x=0.8048331895510095,y=0.45833484414841963,x2=0.6477564630028512,xy=0.3688830944983374,y2=0.2100708293605561 -a=wye,b=dog,i=955,x=0.5085330470357038,y=0.6955385567911895,x2=0.2586058599274173,xy=0.35370434161583947,y2=0.4837738839831707 -a=wye,b=wye,i=956,x=0.3032441644265019,y=0.7682973644818734,x2=0.09195702325872734,xy=0.23298169232338928,y2=0.5902808402697926 -a=pan,b=wye,i=957,x=0.23273075450777592,y=0.6115766438206743,x2=0.05416360409375866,xy=0.14233269375571886,y2=0.37402599126695996 -a=pan,b=dog,i=958,x=0.3479868982175456,y=0.06981440575125086,x2=0.12109488133106842,xy=0.024294498508278962,y2=0.00487405125040029 -a=cat,b=cat,i=959,x=0.2506771355614953,y=0.5281728384744155,x2=0.06283902629331628,xy=0.13240085423015083,y2=0.27896654730212106 -a=hat,b=cat,i=960,x=0.8793447124216682,y=0.25901777778092283,x2=0.7732471232639464,xy=0.22776591331486515,y2=0.06709020920656752 -a=wye,b=pan,i=961,x=0.8977214919326137,y=0.38469643551126753,x2=0.8059038770777179,xy=0.34535025802833363,y2=0.1479913474950748 -a=wye,b=hat,i=962,x=0.9562617903669814,y=0.47382566138151094,x2=0.9144366117158648,xy=0.4531013752745027,y2=0.22451075738362627 -a=cat,b=pan,i=963,x=0.05062588275210245,y=0.0001071165779457095,x2=0.002562980004429624,xy=5.422871315885932e-06,y2=1.1473961270799259e-08 -a=cat,b=dog,i=964,x=0.4685988126190114,y=0.019310315636905995,x2=0.21958484718794732,xy=0.009048790978752478,y2=0.00037288828999693617 -a=cat,b=hat,i=965,x=0.9652309625577333,y=0.25063333378563546,x2=0.9316708110801284,xy=0.24191905401896258,y2=0.06281706800450176 -a=wye,b=pan,i=966,x=0.23292707596683615,y=0.48395502336718577,x2=0.05425502271846026,xy=0.11272622849238044,y2=0.23421246464233333 -a=dog,b=cat,i=967,x=0.4816380078329947,y=0.14585492856879678,x2=0.23197517058933587,xy=0.07024927722849902,y2=0.021273660187808813 -a=dog,b=hat,i=968,x=0.5370776632361478,y=0.6372146048574174,x2=0.288452416347201,xy=0.342233730956767,y2=0.4060424526435946 -a=cat,b=pan,i=969,x=0.07512255270840607,y=0.719699576859241,x2=0.0056433979254272475,xy=0.054065669396825874,y2=0.5179674809313706 -a=hat,b=hat,i=970,x=0.14960927782686417,y=0.6213694158181706,x2=0.022382936011875833,xy=0.09296262956425698,y2=0.3860999509142146 -a=wye,b=dog,i=971,x=0.7785604592951778,y=0.9994502931828215,x2=0.6061563887779182,xy=0.7781324793031177,y2=0.9989008885432279 -a=wye,b=pan,i=972,x=0.8434626638118352,y=0.8602450015939322,x2=0.711429265244557,xy=0.7255845405752345,y2=0.7400214627673445 -a=pan,b=dog,i=973,x=0.05726926291551737,y=0.5994218334683502,x2=0.003279768474886653,xy=0.03432844657820042,y2=0.3593065344385586 -a=hat,b=dog,i=974,x=0.9226697875828058,y=0.030904389281711464,x2=0.8513195369181,xy=0.028514546293933057,y2=0.0009550812768755624 -a=cat,b=hat,i=975,x=0.9901595235021967,y=0.8592860989306361,x2=0.9804158819820973,xy=0.8508303142692202,y2=0.738372599815431 -a=cat,b=wye,i=976,x=0.7969021093554425,y=0.463755536956553,x2=0.6350529718951536,xy=0.36956776562594296,y2=0.21506919805786082 -a=hat,b=wye,i=977,x=0.7417136990825777,y=0.4328986289834107,x2=0.5501392114067606,xy=0.3210868434310619,y2=0.18740122297571665 -a=dog,b=pan,i=978,x=0.9772797759762182,y=0.5328687567382687,x2=0.9550757605321272,xy=0.5207618592099011,y2=0.2839491119077882 -a=hat,b=wye,i=979,x=0.2038116276017774,y=0.23985168428289871,x2=0.04153917954568559,xy=0.048884562156725236,y2=0.057528830453343324 -a=dog,b=hat,i=980,x=0.17296447071262933,y=0.8591423895174625,x2=0.02991670812890001,xy=0.14860110866967152,y2=0.7381256454657752 -a=dog,b=pan,i=981,x=0.8881154785907516,y=0.5109155266572019,x2=0.7887491033124797,xy=0.4537519874766067,y2=0.26103467537940594 -a=hat,b=pan,i=982,x=0.8650008763499077,y=0.9826562694504397,x2=0.7482265160861084,xy=0.8499985342253614,y2=0.9656133438902552 -a=dog,b=dog,i=983,x=0.9590123093113615,y=0.8242062568096603,x2=0.9197046094107105,xy=0.7904239456919054,y2=0.6793159537641917 -a=cat,b=dog,i=984,x=0.17694035611155956,y=0.7200229552285787,x2=0.031307889620885515,xy=0.12740111810664223,y2=0.5184330560560959 -a=cat,b=pan,i=985,x=0.19790162171076175,y=0.20309187904653137,x2=0.03916505187574945,xy=0.04019221221959443,y2=0.041246311334650926 -a=pan,b=dog,i=986,x=0.5954211603726871,y=0.469050219456017,x2=0.3545263582195572,xy=0.27928242594156516,y2=0.2200081083717377 -a=cat,b=hat,i=987,x=0.5459319667494228,y=0.5212717765654789,x2=0.29804171231889287,xy=0.28457892619135755,y2=0.2717242650437305 -a=cat,b=dog,i=988,x=0.12277185901082299,y=0.3386165276216283,x2=0.0150729293649734,xy=0.041572580587897,y2=0.11466115277852897 -a=hat,b=hat,i=989,x=0.4452840739358812,y=0.5945350917465275,x2=0.19827790650093532,xy=0.26473700775073666,y2=0.3534719753180519 -a=dog,b=cat,i=990,x=0.5749714825497623,y=0.5821722092343784,x2=0.3305922057454716,xy=0.33473241824276095,y2=0.33892448120483687 -a=cat,b=hat,i=991,x=0.08517713483975298,y=0.6140564687795391,x2=0.0072551442995094605,xy=0.05230357064045737,y2=0.3770653468499971 -a=wye,b=pan,i=992,x=0.22526402517427413,y=0.9588061574025097,x2=0.05074388103771601,xy=0.215984534378368,y2=0.9193092474729663 -a=wye,b=dog,i=993,x=0.5733255046749886,y=0.7898205441934877,x2=0.32870213431083034,xy=0.45282426210240545,y2=0.623816492030097 -a=hat,b=hat,i=994,x=0.6514029667906138,y=0.20813520752042713,x2=0.42432582514361356,xy=0.13557989167238632,y2=0.043320264609571266 -a=wye,b=dog,i=995,x=0.91510627197243,y=0.3616586038082443,x2=0.837419489003279,xy=0.33095605665771655,y2=0.13079694570852865 -a=hat,b=cat,i=996,x=0.44761087175904435,y=0.7566230280704532,x2=0.20035549251689164,xy=0.3386726931875835,y2=0.5724784066065018 -a=wye,b=cat,i=997,x=0.8588159982893151,y=0.2518130191815001,x2=0.7375649189176728,xy=0.21626104945060648,y2=0.06340979662930255 -a=cat,b=hat,i=998,x=0.49632650430902825,y=0.1658604134256596,x2=0.24633999887961983,xy=0.08232091919880785,y2=0.027509676741730726 -a=wye,b=hat,i=999,x=0.29120233477659807,y=0.1032096823717803,x2=0.0847987997793419,xy=0.03005490047821352,y2=0.010652238535283777 -a=dog,b=cat,i=1000,x=0.6342074605740181,y=0.020204769958250823,x2=0.4022191030477447,xy=0.012814015846704465,y2=0.00040823272906583496 -a=pan,b=dog,i=1001,x=0.5440962271899282,y=0.8507513390682108,x2=0.296040704442314,xy=0.4628905938637929,y2=0.7237778409263537 -a=pan,b=wye,i=1002,x=0.9767984205420347,y=0.24085139484174467,x2=0.9541351543734137,xy=0.23526326206676215,y2=0.05800939439721399 -a=dog,b=dog,i=1003,x=0.9374506282275957,y=0.42631604802092005,x2=0.878813680364314,xy=0.3996502470407174,y2=0.18174537280017541 -a=wye,b=dog,i=1004,x=0.5775274892249994,y=0.7211591715565521,x2=0.3335380008105318,xy=0.4164892456806361,y2=0.5200705507201325 -a=cat,b=dog,i=1005,x=0.7090989774440678,y=0.9873769606793289,x2=0.5028213598122225,xy=0.7001479931695437,y2=0.974913262480349 -a=cat,b=pan,i=1006,x=0.6043080143248889,y=0.09927933178093473,x2=0.3651881761772901,xy=0.059995295852038506,y2=0.009856385718868916 -a=dog,b=dog,i=1007,x=0.3578885561246494,y=0.13589282310616246,x2=0.12808421860498634,xy=0.04863448624916688,y2=0.01846685937176276 -a=pan,b=wye,i=1008,x=0.6798888637740312,y=0.7598653357623847,x2=0.4622488670839432,xy=0.5166239797527604,y2=0.5773953284932816 -a=dog,b=cat,i=1009,x=0.960568894623436,y=0.9105491402373301,x2=0.9226926013180896,xy=0.8746451811380922,y2=0.8290997367869412 -a=pan,b=pan,i=1010,x=0.1248653013221197,y=0.20360304318502975,x2=0.015591343474263749,xy=0.02542295533739929,y2=0.041454199194205094 -a=pan,b=hat,i=1011,x=0.6087246228004949,y=0.004919964524642939,x2=0.37054566640360476,xy=0.002994903549455089,y2=2.4206050923745023e-05 -a=wye,b=cat,i=1012,x=0.6079618404129372,y=0.9895746699262148,x2=0.36961759939828576,xy=0.6016236375543664,y2=0.9792580273595769 -a=wye,b=wye,i=1013,x=0.20922215896167096,y=0.9771015198150322,x2=0.04377391180058271,xy=0.20443128950043096,y2=0.9547273800248458 -a=dog,b=dog,i=1014,x=0.8843402003807457,y=0.3926907979717157,x2=0.7820575900094574,xy=0.34727225896598196,y2=0.15420606281166283 -a=hat,b=cat,i=1015,x=0.372415813118841,y=0.17229317366874286,x2=0.1386935378609675,xy=0.06416470236667056,y2=0.02968493769284759 -a=hat,b=pan,i=1016,x=0.8679193129184527,y=0.2352481151221144,x2=0.753283933736839,xy=0.20417638244214661,y2=0.055341675668507596 -a=wye,b=pan,i=1017,x=0.6987004127420731,y=0.19215217266808393,x2=0.48818226676594323,xy=0.13425680235247633,y2=0.03692245746106514 -a=pan,b=pan,i=1018,x=0.1513426365535807,y=0.9583801421415503,x2=0.022904593638989224,xy=0.14504377753229766,y2=0.9184924968512582 -a=wye,b=dog,i=1019,x=0.4317948780039407,y=0.28056558302014645,x2=0.186446816670438,xy=0.12114678169228862,y2=0.07871704637543468 -a=wye,b=cat,i=1020,x=0.5320130701140631,y=0.49284211602664263,x2=0.283037906772191,xy=0.26219844722884544,y2=0.24289335132961867 -a=hat,b=cat,i=1021,x=0.01903200162010199,y=0.6048001051810862,x2=0.0003622170856675648,xy=0.011510556581644286,y2=0.3657831672270529 -a=pan,b=wye,i=1022,x=0.6047652537288687,y=0.47797327818113344,x2=0.3657410121177429,xy=0.28906163085483233,y2=0.22845845465521916 -a=dog,b=pan,i=1023,x=0.49591860886900707,y=0.4506369587192145,x2=0.24593526662257123,xy=0.223479253672993,y2=0.20307366856370304 -a=cat,b=pan,i=1024,x=0.6289256242714548,y=0.38219168166454864,x2=0.3955474408652392,xy=0.2403701419822334,y2=0.14607048153357569 -a=cat,b=cat,i=1025,x=0.3866427067941546,y=0.7213028755311852,x2=0.14949258271711058,xy=0.27888649621378464,y2=0.5202778382495564 -a=pan,b=cat,i=1026,x=0.8032224836204428,y=0.31948296783638674,x2=0.6451663581933925,xy=0.2566159028999726,y2=0.10206936673754573 -a=dog,b=cat,i=1027,x=0.8048421863331399,y=0.35338983647132594,x2=0.6477709449015087,xy=0.2844230486134927,y2=0.12488437652123048 -a=hat,b=cat,i=1028,x=0.6226709866380417,y=0.012662422631392056,x2=0.38771915760079223,xy=0.00788452319311676,y2=0.00016033694689598972 -a=cat,b=dog,i=1029,x=0.5711949137244665,y=0.7434225895518772,x2=0.3262636294647007,xy=0.424639201899904,y2=0.552677146656019 -a=cat,b=wye,i=1030,x=0.26312318744491703,y=0.16142518462583078,x2=0.06923381177117294,xy=0.04247470911263281,y2=0.026058090231483554 -a=cat,b=hat,i=1031,x=0.5024658818641952,y=0.7911608972408211,x2=0.2524719624375633,xy=0.397531357928577,y2=0.6259355653229011 -a=wye,b=cat,i=1032,x=0.794893250619878,y=0.43663416290551493,x2=0.6318552798810362,xy=0.3470775490836541,y2=0.19064939221619975 -a=pan,b=dog,i=1033,x=0.2180491028489473,y=0.7391689879036737,x2=0.04754541125323079,xy=0.16117513466616043,y2=0.5463707926785413 -a=dog,b=pan,i=1034,x=0.6729162913090135,y=0.6902170709873656,x2=0.45281633510907715,xy=0.4644583116069882,y2=0.4763996050823781 -a=wye,b=wye,i=1035,x=0.5875359040331551,y=0.076240435233347,x2=0.3451984385280569,xy=0.044793993038705744,y2=0.005812603964570179 -a=pan,b=hat,i=1036,x=0.4983986870789734,y=0.9035481210268024,x2=0.24840125128204443,xy=0.45032719723243164,y2=0.8163992070110652 -a=hat,b=wye,i=1037,x=0.1118064145025699,y=0.09592641102267185,x2=0.012500674323920472,xy=0.01072518807254474,y2=0.00920187633169058 -a=wye,b=hat,i=1038,x=0.5914575924270633,y=0.368485574031287,x2=0.34982208363961814,xy=0.21794359046064943,y2=0.1357816182691671 -a=pan,b=dog,i=1039,x=0.2516733591409376,y=0.5475705161469302,x2=0.06333947970128335,xy=0.13780891116523492,y2=0.29983347015341555 -a=pan,b=pan,i=1040,x=0.2558903138640043,y=0.828534112110143,x2=0.06547985272941863,xy=0.21201385399489864,y2=0.6864687749301431 -a=pan,b=hat,i=1041,x=0.5743764131391449,y=0.8714137337081335,x2=0.32990826397058964,xy=0.5005194947274677,y2=0.7593618952951497 -a=dog,b=cat,i=1042,x=0.9370932104263013,y=0.7358732147282736,x2=0.8781436850270723,xy=0.689581793256441,y2=0.5415093881545239 -a=pan,b=wye,i=1043,x=0.6406051557435536,y=0.9330221542165993,x2=0.41037496556522257,xy=0.5976988024141104,y2=0.8705303402589836 -a=wye,b=cat,i=1044,x=0.8198293508753841,y=0.6392148624011491,x2=0.6721201645567537,xy=0.524047105712232,y2=0.40859564031452 -a=cat,b=cat,i=1045,x=0.31711061445473976,y=0.5524017355391501,x2=0.1005591417998626,xy=0.17517245378268453,y2=0.3051476774266651 -a=dog,b=pan,i=1046,x=0.9493190533618198,y=0.38632970108414066,x2=0.9012066650757816,xy=0.36675014611875123,y2=0.14925063793976148 -a=dog,b=hat,i=1047,x=0.5506255092279859,y=0.7695630775773794,x2=0.30318845141257883,xy=0.42374106147410057,y2=0.5922273303703677 -a=pan,b=wye,i=1048,x=0.4870673877222067,y=0.20530958927031162,x2=0.23723464018253443,xy=0.09999960532020988,y2=0.042152027446344054 -a=pan,b=dog,i=1049,x=0.44377477511029007,y=0.7069920540171963,x2=0.1969360510241885,xy=0.31374523977624336,y2=0.49983776444345424 -a=cat,b=wye,i=1050,x=0.5760196111912421,y=0.5313191474605581,x2=0.33179859247690974,xy=0.3060502487386929,y2=0.2823000364582143 -a=wye,b=pan,i=1051,x=0.4399385440979908,y=0.8880298159008242,x2=0.1935459225830598,xy=0.3906785443230154,y2=0.7885969539288518 -a=wye,b=hat,i=1052,x=0.8296158619638061,y=0.9271603190971333,x2=0.688262478421949,xy=0.7691869073064057,y2=0.859626257308298 -a=hat,b=hat,i=1053,x=0.8213818417466454,y=0.8219814213452944,x2=0.6746681299511113,xy=0.6751606137461232,y2=0.6756534570368304 -a=wye,b=dog,i=1054,x=0.7935581938812478,y=0.6677182570731883,x2=0.6297346070760681,xy=0.5298732941045341,y2=0.4458476708288564 -a=cat,b=pan,i=1055,x=0.8393392041707429,y=0.508518054485822,x2=0.704490299657976,xy=0.4268191391585843,y2=0.25859061173804543 -a=hat,b=cat,i=1056,x=0.10146195097856081,y=0.5013880055029021,x2=0.010294527496375877,xy=0.05087180523557383,y2=0.2513899320621782 -a=hat,b=pan,i=1057,x=0.8045389366320291,y=0.7335248930675334,x2=0.6472829005569962,xy=0.5901493374616762,y2=0.5380587687497363 -a=pan,b=hat,i=1058,x=0.41111803793121704,y=0.6333739720771131,x2=0.16901804111241361,xy=0.26039146467704416,y2=0.4011625885047396 -a=pan,b=wye,i=1059,x=0.5440039718966404,y=0.44600871429630595,x2=0.2959403214393207,xy=0.24263051207770434,y2=0.19892377322824387 -a=cat,b=hat,i=1060,x=0.42848512529884564,y=0.760379589589332,x2=0.18359950260236746,xy=0.32581134371986975,y2=0.578177120264041 -a=hat,b=wye,i=1061,x=0.6086991223249973,y=0.26727047467444054,x2=0.3705146215192221,xy=0.1626873033577174,y2=0.07143350663270076 -a=hat,b=pan,i=1062,x=0.8313074120181857,y=0.5272138667448927,x2=0.6910720132763736,xy=0.43827679514379736,y2=0.2779544612881015 -a=wye,b=hat,i=1063,x=0.5868897183341317,y=0.5897451195913053,x2=0.34443954148631645,xy=0.34611534712587,y2=0.34779930608176296 -a=cat,b=dog,i=1064,x=0.7397842027559516,y=0.19330378276021587,x2=0.5472806666472588,xy=0.14300308481897595,y2=0.03736635242940873 -a=dog,b=hat,i=1065,x=0.6788622204499666,y=0.3082398647535174,x2=0.46085391435425904,xy=0.2092523990177702,y2=0.0950118142232667 -a=cat,b=hat,i=1066,x=0.5293401279343086,y=0.9445953393456461,x2=0.2802009710415102,xy=0.500012217775376,y2=0.8922603551135163 -a=cat,b=dog,i=1067,x=0.2403917325329138,y=0.6076355121295253,x2=0.05778818507017596,xy=0.14607055350934092,y2=0.36922091560091047 -a=pan,b=cat,i=1068,x=0.20921260941283415,y=0.2949165036698348,x2=0.0437699159373271,xy=0.06170025129167581,y2=0.08697574413683969 -a=hat,b=pan,i=1069,x=0.3754581763056679,y=0.9711108861348786,x2=0.140968842154778,xy=0.36461152229878263,y2=0.9430563531696692 -a=hat,b=dog,i=1070,x=0.24735210740949987,y=0.5050668925990092,x2=0.061183065039920756,xy=0.12492936026713244,y2=0.25509256599961905 -a=wye,b=hat,i=1071,x=0.660602779925325,y=0.42368464415736373,x2=0.4363960328450674,xy=0.2798872537420266,y2=0.17950867769475193 -a=hat,b=pan,i=1072,x=0.23186122160766431,y=0.4336855941433039,x2=0.05375962608539842,xy=0.10055487165171215,y2=0.1880831945674305 -a=hat,b=cat,i=1073,x=0.5122072492645222,y=0.9694750073357224,x2=0.2623562661991284,xy=0.4965721267381329,y2=0.939881789848599 -a=wye,b=pan,i=1074,x=0.43595890232167034,y=0.36905250816503343,x2=0.1900601645135157,xy=0.16089172635868726,y2=0.13619975378290206 -a=hat,b=pan,i=1075,x=0.33427939730036704,y=0.7933254358401198,x2=0.11174271545949664,xy=0.26519234855568624,y2=0.6293652471509161 -a=hat,b=wye,i=1076,x=0.6931979555950077,y=0.44330243921126156,x2=0.4805234056410983,xy=0.3072963445715267,y2=0.19651705261065425 -a=hat,b=cat,i=1077,x=0.42785997597505154,y=0.518438949372806,x2=0.1830641590413717,xy=0.22181927642317972,y2=0.2687789442267789 -a=dog,b=wye,i=1078,x=0.4422743191976337,y=0.48177417934319466,x2=0.1956065734217304,xy=0.2130763471760101,y2=0.2321063598818087 -a=wye,b=hat,i=1079,x=0.5418642209237631,y=0.9476398847621776,x2=0.2936168339173167,xy=0.513492147872942,y2=0.8980213511920733 -a=pan,b=wye,i=1080,x=0.8650411565479376,y=0.7610469041859692,x2=0.7482962025217934,xy=0.6583368941842582,y2=0.5791923903710477 -a=wye,b=cat,i=1081,x=0.863642873883729,y=0.9411919456681188,x2=0.7458790136101465,xy=0.8128537168330326,y2=0.8858422785905391 -a=cat,b=wye,i=1082,x=0.9444653638696833,y=0.35050033430161065,x2=0.8920148235494932,xy=0.33103542577261635,y2=0.12285048434554083 -a=wye,b=hat,i=1083,x=0.8966975312509847,y=0.10092356690059079,x2=0.8040664625516107,xy=0.09049791328480336,y2=0.010185566355938024 -a=cat,b=pan,i=1084,x=0.5413307127431968,y=0.44326266490365374,x2=0.29303894055905744,xy=0.23995169432474367,y2=0.1964817900974888 -a=cat,b=pan,i=1085,x=0.2839939997658667,y=0.7028464774792382,x2=0.08065259190301509,xy=0.199604182360679,y2=0.49399317090497336 -a=wye,b=hat,i=1086,x=0.08155852459426205,y=0.7660135045083457,x2=0.006651792933992848,xy=0.06247493124698078,y2=0.5867766890891574 -a=dog,b=cat,i=1087,x=0.05100926358628344,y=0.2925931226507835,x2=0.0026019449716149414,xy=0.014924959716827576,y2=0.08561073542253644 -a=dog,b=dog,i=1088,x=0.7086028076135323,y=0.8413205380520563,x2=0.5021179389577807,xy=0.5961620953666148,y2=0.7078202477482015 -a=wye,b=dog,i=1089,x=0.18671024727982866,y=0.40739135131533766,x2=0.03486071643929477,xy=0.07606413994375025,y2=0.16596771312653688 -a=dog,b=pan,i=1090,x=0.2664113723843127,y=0.6937231025818595,x2=0.07097501933569292,xy=0.18481572381353653,y2=0.4812517430558012 -a=pan,b=cat,i=1091,x=0.793159753586116,y=0.4409433651088378,x2=0.6291023947087883,xy=0.3497385308151586,y2=0.19443105123350585 -a=hat,b=hat,i=1092,x=0.6512931235244617,y=0.20800570847161715,x2=0.4241827327502497,xy=0.1354726875813981,y2=0.04326637475677938 -a=cat,b=wye,i=1093,x=0.7478916367217758,y=0.712517745948077,x2=0.5593419002783767,xy=0.5328860632104178,y2=0.5076815382909284 -a=wye,b=wye,i=1094,x=0.23641082721661355,y=0.6370262281634499,x2=0.05589007922524351,xy=0.1505998975588004,y2=0.4058024153681517 -a=cat,b=dog,i=1095,x=0.7747991261476976,y=0.3322107519852314,x2=0.6003136858792358,xy=0.2573966003350268,y2=0.11036398373459294 -a=wye,b=wye,i=1096,x=0.6048532839105468,y=0.24251161200680948,x2=0.3658474950573726,xy=0.1466839449087591,y2=0.058811881958141306 -a=hat,b=cat,i=1097,x=0.4787260513072743,y=0.12498415897510329,x2=0.22917863220025503,xy=0.05983317290211183,y2=0.015621039994713891 -a=pan,b=wye,i=1098,x=0.594658212310013,y=0.7237896024672402,x2=0.35361838946774055,xy=0.43040743109174406,y2=0.5238713886396856 -a=wye,b=wye,i=1099,x=0.6066364587995798,y=0.20828802132322632,x2=0.36800779314489435,xy=0.1263551076658934,y2=0.04338389982674479 -a=wye,b=pan,i=1100,x=0.35532388403878157,y=0.35804659022907115,x2=0.1262550625684055,xy=0.12722250510703562,y2=0.1281973607746644 -a=pan,b=hat,i=1101,x=0.4487538878427101,y=0.46697683514906696,x2=0.2013800518539476,xy=0.2095576703056281,y2=0.21806736456583886 -a=hat,b=dog,i=1102,x=0.03136871604264768,y=0.3607990819866618,x2=0.000983996346164262,xy=0.011317803951287553,y2=0.1301759775624179 -a=dog,b=pan,i=1103,x=0.6441341502724975,y=0.4022253408667993,x2=0.41490880354727244,xy=0.2590870781573014,y2=0.16178522483541288 -a=cat,b=dog,i=1104,x=0.6395109732585249,y=0.750769211304267,x2=0.40897428491806576,xy=0.48012514901372694,y2=0.5636544086424311 -a=cat,b=pan,i=1105,x=0.8410479118904012,y=0.357626507656608,x2=0.707361590095204,xy=0.3007810275012467,y2=0.1278967189786619 -a=hat,b=cat,i=1106,x=0.863784532630219,y=0.6129075968250145,x2=0.746123718811206,xy=0.5294201020690059,y2=0.3756557222458145 -a=hat,b=dog,i=1107,x=0.4882958743237995,y=0.2884372096275648,x2=0.2384328608816438,xy=0.1408426994626088,y2=0.08319602389773577 -a=pan,b=cat,i=1108,x=0.3138710259922588,y=0.8680486410464611,x2=0.0985150209574332,xy=0.2724553175764387,y2=0.7535084432226078 -a=hat,b=cat,i=1109,x=0.02914443603611583,y=0.35747191368541953,x2=0.0008493981518632469,xy=0.010418317323112629,y2=0.12778616907391602 -a=dog,b=hat,i=1110,x=0.7845918032912979,y=0.4529218136895614,x2=0.6155842977918906,xy=0.3553587425526582,y2=0.20513816931584178 -a=dog,b=pan,i=1111,x=0.26539773926787824,y=0.6397637893288771,x2=0.07043596000850068,xy=0.16979186335333513,y2=0.40929770613644384 -a=hat,b=cat,i=1112,x=0.198395774137602,y=0.1249190785483415,x2=0.03936088319565839,xy=0.024783417293154125,y2=0.015604776185366714 -a=dog,b=cat,i=1113,x=0.3293818212784465,y=0.4286677322263892,x2=0.10849238418870648,xy=0.1411953583640295,y2=0.18375602465211532 -a=dog,b=hat,i=1114,x=0.3829667540927333,y=0.4040167806903713,x2=0.14666353474032404,xy=0.15472499509998716,y2=0.16322955907941156 -a=dog,b=hat,i=1115,x=0.06672734211151576,y=0.2988485473539988,x2=0.004452538185267265,xy=0.019941369258819796,y2=0.08931045425559526 -a=cat,b=dog,i=1116,x=0.8527725668016823,y=0.7202701834573114,x2=0.7272210506895298,xy=0.61422665313761,y2=0.5187891371776291 -a=hat,b=hat,i=1117,x=0.6448913304258395,y=0.41314314973722477,x2=0.41588482805840926,xy=0.26643243549036066,y2=0.17068726217479493 -a=cat,b=hat,i=1118,x=0.7454553807439559,y=0.9827694251192239,x2=0.5557037246801163,xy=0.7326107559857697,y2=0.96583574294917 -a=dog,b=pan,i=1119,x=0.3070936366066537,y=0.8872748423008111,x2=0.09430650164429946,xy=0.27247645799175124,y2=0.7872566457799293 -a=wye,b=cat,i=1120,x=0.39571565867227043,y=0.05767287981921754,x2=0.15659088251842884,xy=0.02282206162518836,y2=0.0033261610666419097 -a=pan,b=hat,i=1121,x=0.7003417500246725,y=0.5343941112860977,x2=0.4904785668276208,xy=0.37425850710098524,y2=0.2855770661772582 -a=dog,b=hat,i=1122,x=0.12745836334243676,y=0.10123723506133542,x2=0.016245634385932628,xy=0.012903532290231369,y2=0.010248977762864082 -a=pan,b=pan,i=1123,x=0.39070449028862997,y=0.3182926635583354,x2=0.15264999873169816,xy=0.12435837287816982,y2=0.1013102196750597 -a=pan,b=hat,i=1124,x=0.6410442083520145,y=0.9480479009695016,x2=0.41093767706166096,xy=0.6077406161567832,y2=0.898794822532678 -a=dog,b=wye,i=1125,x=0.7956693842355999,y=0.464939080509021,x2=0.6330897690098586,xy=0.3699377918956787,y2=0.2161683485845739 -a=wye,b=wye,i=1126,x=0.8319060225228574,y=0.11303810682768145,x2=0.6920676303098009,xy=0.09403708184453033,y2=0.012777613595186324 -a=hat,b=hat,i=1127,x=0.25840497150139485,y=0.14546553147858832,x2=0.06677312929663669,xy=0.03758901651615987,y2=0.02116022084834817 -a=hat,b=cat,i=1128,x=0.009624542183057194,y=0.8018834107157139,x2=9.263181223344734e-05,xy=0.007717760712327166,y2=0.6430170043810663 -a=cat,b=hat,i=1129,x=0.671027006220547,y=0.6492461398441377,x2=0.45027724307731004,xy=0.43566169351985834,y2=0.4215205501025136 -a=dog,b=dog,i=1130,x=0.8863744599302459,y=0.23451249862419843,x2=0.785659683216635,xy=0.20786588931491642,y2=0.05499611201096467 -a=dog,b=hat,i=1131,x=0.24561475914554787,y=0.7983105466556188,x2=0.06032660991012549,xy=0.19607685264017047,y2=0.637299728901593 -a=hat,b=hat,i=1132,x=0.12215761324247987,y=0.059194869138346595,x2=0.014922482473099293,xy=0.007231103930141351,y2=0.003504032532305978 -a=cat,b=cat,i=1133,x=0.45995479897134484,y=0.9699398990182666,x2=0.21155841709677023,xy=0.44612851126723335,y2=0.9407834077075652 -a=cat,b=cat,i=1134,x=0.745352225088946,y=0.90324302826816,x2=0.5555499394450429,xy=0.6732342009157509,y2=0.8158479681150361 -a=dog,b=pan,i=1135,x=0.5052151771411246,y=0.12974884928428687,x2=0.25524237521373794,xy=0.06555108787501808,y2=0.01683476389059659 -a=wye,b=hat,i=1136,x=0.01044276900378649,y=0.32603690418363707,x2=0.00010905142446644387,xy=0.0034047280770993908,y2=0.10630006288965013 -a=dog,b=dog,i=1137,x=0.8977009326635101,y=0.6319499049985434,x2=0.805866964504936,xy=0.5673020191138091,y2=0.39936068242766803 -a=cat,b=pan,i=1138,x=0.3659452160992942,y=0.12630848786008497,x2=0.13391590118595914,xy=0.046221986885133876,y2=0.015953834105501233 -a=cat,b=hat,i=1139,x=0.2222862108606949,y=0.6721019549883772,x2=0.04941115953880531,xy=0.14939899688643168,y2=0.45172103789919865 -a=wye,b=pan,i=1140,x=0.2914972055161553,y=0.6357557059324661,x2=0.0849706208237277,xy=0.1853210116702645,y2=0.4041853176256883 -a=dog,b=hat,i=1141,x=0.4266529907443396,y=0.5134085687711274,x2=0.18203277451108954,xy=0.21904730133997247,y2=0.26358835848761747 -a=cat,b=dog,i=1142,x=0.5322703793573935,y=0.8891588365204124,x2=0.28331175674126363,xy=0.4732729112236985,y2=0.7906034365623335 -a=pan,b=cat,i=1143,x=0.27994448082331946,y=0.5318630356389697,x2=0.07836891234343787,xy=0.14889212138106606,y2=0.28287828867910003 -a=wye,b=hat,i=1144,x=0.03716552624373293,y=0.4411681159221027,x2=0.001381276340973601,xy=0.01639624519020112,y2=0.19462930650625784 -a=wye,b=hat,i=1145,x=0.09153841600334467,y=0.753384940980195,x2=0.008379281604401387,xy=0.06896366413810036,y2=0.5675888692957319 -a=dog,b=cat,i=1146,x=0.9091950492491973,y=0.3486779040776171,x2=0.8266356375792502,xy=0.31701622416995595,y2=0.12157628079195996 -a=dog,b=cat,i=1147,x=0.6397060288677293,y=0.4269278965397596,x2=0.40922380336972014,xy=0.2731083493083024,y2=0.18226742884386368 -a=hat,b=hat,i=1148,x=0.8194745411913835,y=0.8989205706193172,x2=0.6715385236608286,xy=0.7366425221757616,y2=0.8080581922825588 -a=dog,b=cat,i=1149,x=0.5287998003069021,y=0.425955845236605,x2=0.27962922880461955,xy=0.22524536590067443,y2=0.1814383820912306 -a=pan,b=hat,i=1150,x=0.5835456838747279,y=0.8740662106771149,x2=0.34052556516882393,xy=0.510057564661369,y2=0.7639917406474506 -a=pan,b=cat,i=1151,x=0.6522024486696242,y=0.5657660217947503,x2=0.42536803405065376,xy=0.3689939847886081,y2=0.3200911914174579 -a=pan,b=cat,i=1152,x=0.3539601131941189,y=0.25640961808475804,x2=0.12528776173239348,xy=0.09075877744134175,y2=0.06574589224637148 -a=hat,b=hat,i=1153,x=0.6973917722108447,y=0.8220444136221455,x2=0.4863552839473827,xy=0.5732870104519727,y2=0.6757570179673771 -a=pan,b=pan,i=1154,x=0.8797639810640132,y=0.6162946277787805,x2=0.7739846623776014,xy=0.5421938152430241,y2=0.37981906822898565 -a=hat,b=pan,i=1155,x=0.4377588064658874,y=0.3857917372842491,x2=0.19163277263843825,xy=0.16888373045795407,y2=0.14883526455679907 -a=cat,b=cat,i=1156,x=0.9212930829184702,y=0.6241199936250447,x2=0.8487809446334192,xy=0.5749974330378734,y2=0.3895257664425258 -a=wye,b=dog,i=1157,x=0.8209510629039569,y=0.3747469584931943,x2=0.6739606476831367,xy=0.30764891389501287,y2=0.14043528289989987 -a=pan,b=dog,i=1158,x=0.5974294364800277,y=0.6981999319048695,x2=0.3569219315728434,xy=0.41712519186831987,y2=0.48748314491196443 -a=cat,b=hat,i=1159,x=0.13184638853569974,y=0.5286862217502872,x2=0.017383470169906698,xy=0.06970536900635949,y2=0.2795091210685939 -a=pan,b=dog,i=1160,x=0.6723291822932118,y=0.08940961362984456,x2=0.4520265293630588,xy=0.0601126924209054,y2=0.007994079009438087 -a=cat,b=cat,i=1161,x=0.33049385434668643,y=0.9022959566664027,x2=0.10922618776092878,xy=0.2982032684801102,y2=0.8141379934165389 -a=dog,b=hat,i=1162,x=0.676281316646256,y=0.11195521829057764,x2=0.4573564192447936,xy=0.07571322243097085,y2=0.01253397090249089 -a=pan,b=cat,i=1163,x=0.5327388900339096,y=0.7039706938316723,x2=0.28381072495456205,xy=0.37503256604828633,y2=0.49557473777384614 -a=hat,b=cat,i=1164,x=0.1933278467331423,y=0.008914393054231695,x2=0.03737565632247336,xy=0.0017234004141074935,y2=7.94664035253343e-05 -a=hat,b=wye,i=1165,x=0.021340741844274036,y=0.7602588744617488,x2=0.0004554272624639488,xy=0.016224488374706525,y2=0.5779935561978451 -a=cat,b=pan,i=1166,x=0.665014628709845,y=0.46332035098488633,x2=0.44224445639809296,xy=0.30811481118392925,y2=0.21466574763675825 -a=hat,b=dog,i=1167,x=0.6077597776150052,y=0.17579066134697052,x2=0.3693719472866406,xy=0.1068384932470295,y2=0.030902356616805276 -a=cat,b=hat,i=1168,x=0.8418250117669293,y=0.8860151608635193,x2=0.7086693504363906,xy=0.7458697232196099,y2=0.785022865280008 -a=hat,b=cat,i=1169,x=0.9340118413002695,y=0.2457129242900873,x2=0.8723781196891198,xy=0.22949878084745814,y2=0.060374841163186165 -a=hat,b=wye,i=1170,x=0.6461099251188956,y=0.19438865009440986,x2=0.41745803533714493,xy=0.12559643615646238,y2=0.03778694728552691 -a=pan,b=cat,i=1171,x=0.9447375439682993,y=0.20802590998182424,x2=0.8925290269832543,xy=0.19652988727799917,y2=0.04327477922376604 -a=wye,b=pan,i=1172,x=0.6078790246684067,y=0.8357743273327147,x2=0.3695169086318134,xy=0.5080496829419043,y2=0.6985187262284518 -a=wye,b=pan,i=1173,x=0.6213831858768594,y=0.2755732381662571,x2=0.38611706369047555,xy=0.17123657667415138,y2=0.07594060959343667 -a=hat,b=pan,i=1174,x=0.5618126256983736,y=0.889248530414444,x2=0.3156334263941009,xy=0.49959105177055885,y2=0.7907629488442482 -a=cat,b=wye,i=1175,x=0.7437196121160394,y=0.08538081278312915,x2=0.5531188614460322,xy=0.06349938496522099,y2=0.007289883191507749 -a=hat,b=pan,i=1176,x=0.7290249006448934,y=0.04361641718557552,x2=0.5314773057602967,xy=0.031797454205200415,y2=0.0019023918481061673 -a=hat,b=dog,i=1177,x=0.31363080644456,y=0.7180272834208573,x2=0.09836428275106505,xy=0.2251954759484801,y2=0.5155631797367362 -a=wye,b=hat,i=1178,x=0.6834067249536789,y=0.9878807105188865,x2=0.4670447517119134,xy=0.6751243210206256,y2=0.9759082982153 -a=hat,b=dog,i=1179,x=0.49045154753612985,y=0.6734478449684046,x2=0.24054272048058464,xy=0.33029353774962567,y2=0.4535319998925883 -a=cat,b=hat,i=1180,x=0.12978130038938562,y=0.42171750159109544,x2=0.016843185930759945,xy=0.054731045753455165,y2=0.17784565114823558 -a=cat,b=hat,i=1181,x=0.3264872217972796,y=0.4666906345216678,x2=0.10659390599690606,xy=0.15236852870378892,y2=0.21780014835023692 -a=pan,b=cat,i=1182,x=0.12993325182555615,y=0.8008745906124531,x2=0.01688264992996339,xy=0.10406023986273706,y2=0.6414001098886645 -a=dog,b=hat,i=1183,x=0.9241833806481935,y=0.9921515876591461,x2=0.8541149210663237,xy=0.9169300083983022,y2=0.9843647728945644 -a=pan,b=cat,i=1184,x=0.76370596148368,y=0.18860964378787792,x2=0.5832467956057121,xy=0.1440423093541157,y2=0.0355735977297902 -a=pan,b=cat,i=1185,x=0.21456293879544752,y=0.287520239815655,x2=0.04603725470453896,xy=0.06169118761801878,y2=0.08266788830365177 -a=cat,b=dog,i=1186,x=0.6305366088057442,y=0.5208735730780759,x2=0.3975764150442482,xy=0.328429856385181,y2=0.2713092791311217 -a=pan,b=dog,i=1187,x=0.7135047495843945,y=0.602312134937668,x2=0.5090890276794895,xy=0.4297525690103428,y2=0.3627799078931716 -a=pan,b=wye,i=1188,x=0.12846391575991634,y=0.20534006815546713,x2=0.01650297765237088,xy=0.026378789217659408,y2=0.042164543590091884 -a=pan,b=pan,i=1189,x=0.9284204826309687,y=0.17346669545432036,x2=0.8619645925687208,xy=0.16105003311409938,y2=0.030090694431841928 -a=pan,b=pan,i=1190,x=0.5779102962941246,y=0.703500872993506,x2=0.3339803105627629,xy=0.4065603979548524,y2=0.4949134783026251 -a=pan,b=dog,i=1191,x=0.0762925743827011,y=0.656412741684207,x2=0.0058205569059399795,xy=0.050079417920695125,y2=0.4308776874453775 -a=wye,b=pan,i=1192,x=0.3315607730558524,y=0.9006904051746625,x2=0.10993254622939447,xy=0.2986336070237,y2=0.8112432059736977 -a=dog,b=dog,i=1193,x=0.8219100974851303,y=0.5890668500456228,x2=0.6755362083480164,xy=0.48415999214625643,y2=0.34699975382267223 -a=hat,b=wye,i=1194,x=0.7327635556383868,y=0.5133261943553027,x2=0.5369424284718112,xy=0.3761467273781132,y2=0.26350378181129797 -a=dog,b=wye,i=1195,x=0.31733254497756136,y=0.8422498053947577,x2=0.100699944101936,xy=0.26727327425277425,y2=0.7093847346875072 -a=cat,b=wye,i=1196,x=0.8663304768297544,y=0.1806750045641552,x2=0.7505284950840696,xy=0.15652426285528262,y2=0.0326434572742575 -a=pan,b=dog,i=1197,x=0.10442035300131425,y=0.15297020960344554,x2=0.010903610120919078,xy=0.015973203285476814,y2=0.02339988502612206 -a=wye,b=hat,i=1198,x=0.7098332919268155,y=0.13845498744722728,x2=0.5038633023276597,xy=0.09827995952335127,y2=0.019169783549011866 -a=wye,b=hat,i=1199,x=0.35664993432047165,y=0.3645218251998338,x2=0.12719917565079675,xy=0.13000668501589915,y2=0.1328761610470182 -a=pan,b=wye,i=1200,x=0.1647150484954425,y=0.6379619820498607,x2=0.027131047200855973,xy=0.10508193881159142,y2=0.4069954905409867 -a=wye,b=pan,i=1201,x=0.83270638124717,y=0.9548807656837569,x2=0.6933999173697573,xy=0.7951353069150481,y2=0.9117972766727979 -a=cat,b=wye,i=1202,x=0.43001142909773493,y=0.7425920749313834,x2=0.18490982915467633,xy=0.3193230793778964,y2=0.5514429897508972 -a=cat,b=hat,i=1203,x=0.7329732645390651,y=0.9431809128231767,x2=0.5372498065290543,xy=0.6913263927229392,y2=0.8895902343139609 -a=cat,b=wye,i=1204,x=0.7290731704570307,y=0.8949646591052313,x2=0.5315476878802665,xy=0.6524947214608466,y2=0.8009617410473429 -a=pan,b=cat,i=1205,x=0.25322925493758774,y=0.9298982697468532,x2=0.06412505555624581,xy=0.23547744601574763,y2=0.8647107920781913 -a=dog,b=wye,i=1206,x=0.9749604614519463,y=0.32417744747181354,x2=0.950547901394592,xy=0.3160601937794334,y2=0.10509101744934042 -a=cat,b=pan,i=1207,x=0.8314777995642517,y=0.5227494108250007,x2=0.6913553311682099,xy=0.4346545298362806,y2=0.27326694651788536 -a=pan,b=dog,i=1208,x=0.33661841906630885,y=0.06655108628263828,x2=0.11331196005470112,xy=0.022402321451607213,y2=0.004429047085399165 -a=hat,b=hat,i=1209,x=0.30986404247398636,y=0.23825793505507742,x2=0.09601572481832042,xy=0.0738275669076708,y2=0.056766843616709486 -a=hat,b=pan,i=1210,x=0.17730722761279805,y=0.3560127455749533,x2=0.03143785296373657,xy=0.06312363291271542,y2=0.12674507501181645 -a=hat,b=wye,i=1211,x=0.9119554450290102,y=0.0611598553934497,x2=0.83166273371806,xy=0.055775063143243334,y2=0.0037405279117476787 -a=wye,b=pan,i=1212,x=0.8399964869697952,y=0.8504059004347759,x2=0.7055940981215973,xy=0.7143379688635972,y2=0.723190195494282 -a=hat,b=dog,i=1213,x=0.44573913124024467,y=0.24348351632610143,x2=0.19868337311880807,xy=0.10853013103851639,y2=0.05928422272252291 -a=cat,b=wye,i=1214,x=0.4603130670649951,y=0.27368801255740494,x2=0.21188811971078267,xy=0.12598216847922195,y2=0.07490512821762224 -a=dog,b=dog,i=1215,x=0.7037609424578929,y=0.8879790244833483,x2=0.49527946412922164,xy=0.6249249551532415,y2=0.7885067479223989 -a=cat,b=dog,i=1216,x=0.3953143785677151,y=0.4073871432884367,x2=0.1562734579023788,xy=0.1610459953855451,y2=0.16596428451671327 -a=dog,b=cat,i=1217,x=0.526181430061743,y=0.30586743969181684,x2=0.27686689734182096,xy=0.16094176682636413,y2=0.09355489066362721 -a=cat,b=pan,i=1218,x=0.8867757270271591,y=0.5989445701896535,x2=0.7863711900445466,xy=0.5311295066788994,y2=0.3587345981596688 -a=hat,b=dog,i=1219,x=0.13841948204772603,y=0.05135249214326498,x2=0.019159953010360747,xy=0.007108185364330659,y2=0.002637078449324092 -a=dog,b=pan,i=1220,x=0.2459954771391254,y=0.1560564999412034,x2=0.06051377477290597,xy=0.038389193163698224,y2=0.02435363117389882 -a=cat,b=dog,i=1221,x=0.9143791641556079,y=0.4389641087121654,x2=0.8360892558419082,xy=0.4013796348185412,y2=0.19268948873746577 -a=dog,b=dog,i=1222,x=0.15008767036442006,y=0.8251052209242011,x2=0.022526308795418816,xy=0.12383812041403348,y2=0.6807986255963747 -a=dog,b=dog,i=1223,x=0.7101870770582471,y=0.9376914005043703,x2=0.5043656844205366,xy=0.6659363149068529,y2=0.8792651625798473 -a=dog,b=wye,i=1224,x=0.44520684092545226,y=0.8405880196130835,x2=0.19820913120682096,xy=0.374235536731723,y2=0.7065882187170457 -a=hat,b=pan,i=1225,x=0.12587096755685157,y=0.3752704943016385,x2=0.01584350047369798,xy=0.04723566021328519,y2=0.1408279438933961 -a=wye,b=hat,i=1226,x=0.08938872028449751,y=0.970617897717945,x2=0.007990343314100137,xy=0.0867622917622364,y2=0.9420991033704033 -a=wye,b=pan,i=1227,x=0.1443195297875961,y=0.23929652165666815,x2=0.02082812667811284,xy=0.03453516148529765,y2=0.05726282527698025 -a=cat,b=pan,i=1228,x=0.7899541509746342,y=0.5014230517864684,x2=0.6240275606420551,xy=0.39610122115308966,y2=0.25142507686285537 -a=dog,b=dog,i=1229,x=0.9706713416187546,y=0.46104593094313173,x2=0.9422028534399529,xy=0.4475240723364374,y2=0.212563350439219 -a=dog,b=wye,i=1230,x=0.1794553359563008,y=0.053879218624868774,x2=0.03220421760318879,xy=0.009668913279388805,y2=0.002902970199626406 -a=dog,b=dog,i=1231,x=0.3996700063691223,y=0.5511739394072727,x2=0.15973611399109428,xy=0.2202876918733989,y2=0.30379271148173187 -a=wye,b=pan,i=1232,x=0.355156802874253,y=0.5598896285486372,x2=0.126136354627861,xy=0.1988486104377871,y2=0.31347639615633094 -a=cat,b=wye,i=1233,x=0.8202540256885691,y=0.8562502234302561,x2=0.6728166666583038,xy=0.7023426927654044,y2=0.7331644451243635 -a=cat,b=dog,i=1234,x=0.7236085818346178,y=0.021930314770576276,x2=0.5236093797047069,xy=0.01586896397032347,y2=0.000480938705936556 -a=cat,b=pan,i=1235,x=0.6376328703932327,y=0.153824857319812,x2=0.40657567740591305,xy=0.09808378531066118,y2=0.02366208672946052 -a=dog,b=cat,i=1236,x=0.008821831450497752,y=0.6605829141961933,x2=7.782471014099128e-05,xy=0.005827551128117436,y2=0.4363697865279353 -a=pan,b=wye,i=1237,x=0.019736067843255545,y=0.7588608156781,x2=0.0003895123739135856,xy=0.014976928541811223,y2=0.5758697375716313 -a=wye,b=pan,i=1238,x=0.9258166586020053,y=0.9802983599274745,x2=0.8571364853449821,xy=0.9075765520210805,y2=0.9609848744764963 -a=dog,b=cat,i=1239,x=0.19657918430573829,y=0.22985177051739536,x2=0.03864337570230942,xy=0.04518407355953932,y2=0.052831836409981375 -a=wye,b=pan,i=1240,x=0.30072400764264606,y=0.7382587100138145,x2=0.09043492877265424,xy=0.22201211795244438,y2=0.5450259229112614 -a=hat,b=cat,i=1241,x=0.5085858946674511,y=0.9209223771852333,x2=0.25865961225469164,xy=0.46836813112002773,y2=0.8480980248005011 -a=dog,b=hat,i=1242,x=0.7549874884903122,y=0.9946065400158237,x2=0.5700061077769092,xy=0.7509154936825859,y2=0.9892421694422483 -a=cat,b=cat,i=1243,x=0.15289987122066706,y=0.023701936373413668,x2=0.02337837061929657,xy=0.0036240230191753944,y2=0.0005617817878493499 -a=hat,b=cat,i=1244,x=0.0003019398209038737,y=0.0919727340470814,x2=9.116765544746334e-08,xy=2.7770230846215367e-05,y2=0.008458983808095165 -a=pan,b=cat,i=1245,x=0.8402829269564804,y=0.07732864161559194,x2=0.7060753973345498,xy=0.0649779373143183,y2=0.005979718814112658 -a=cat,b=pan,i=1246,x=0.0718872375637084,y=0.79217024461803,x2=0.005167774924541049,xy=0.05694693056575732,y2=0.6275336964581895 -a=dog,b=hat,i=1247,x=0.17248274263681374,y=0.11008471505388406,x2=0.029750296507517322,xy=0.01898771357488606,y2=0.012118644488494848 -a=cat,b=hat,i=1248,x=0.5470209562460591,y=0.378410015008109,x2=0.29923192657235287,xy=0.20699820826282134,y2=0.1431941394584373 -a=dog,b=cat,i=1249,x=0.8379376645858482,y=0.4001626583818123,x2=0.7021395297315854,xy=0.33531136341892037,y2=0.160130153163199 -a=pan,b=pan,i=1250,x=0.6375751472274978,y=0.8655124118639334,x2=0.40650206836216546,xy=0.551829203421374,y2=0.749111735090523 -a=dog,b=hat,i=1251,x=0.7346778726638965,y=0.45564654943834115,x2=0.5397515765819485,xy=0.3347534376280054,y2=0.20761377801506667 -a=wye,b=wye,i=1252,x=0.8350957680694377,y=0.5595201147363097,x2=0.6973849418474841,xy=0.4672528799660185,y2=0.31306275879453316 -a=pan,b=cat,i=1253,x=0.29211930299900446,y=0.7244139650792422,x2=0.08533368718462418,xy=0.21161530256169336,y2=0.5247755928018295 -a=hat,b=wye,i=1254,x=0.8887338453591545,y=0.20959696782842074,x2=0.7898478478868695,xy=0.18627591919377134,y2=0.04393088892286804 -a=pan,b=pan,i=1255,x=0.443909909162025,y=0.10329754285240145,x2=0.19705600745223728,xy=0.04585480286426991,y2=0.010670382359343714 -a=dog,b=wye,i=1256,x=0.05264152379661258,y=0.8889782833216691,x2=0.002771130027629328,xy=0.046797171456149436,y2=0.7902823882175417 -a=wye,b=hat,i=1257,x=0.3698931119871959,y=0.09097174030912514,x2=0.13682091429557222,xy=0.03364982012583333,y2=0.008275857534870904 -a=cat,b=dog,i=1258,x=0.46812609791627513,y=0.3955421850389915,x2=0.21914204355031802,xy=0.18516361964358036,y2=0.1564536201454198 -a=cat,b=hat,i=1259,x=0.2780875029277935,y=0.5077895538992379,x2=0.07733265928461555,xy=0.14120992905665725,y2=0.257850231049187 -a=wye,b=hat,i=1260,x=0.19557419507347884,y=0.43905957261630313,x2=0.03824926577863916,xy=0.08586872250373911,y2=0.19277330830601075 -a=pan,b=hat,i=1261,x=0.5980791709422237,y=0.8821131444143128,x2=0.3576986947149377,xy=0.5275734980885503,y2=0.7781235995485062 -a=pan,b=cat,i=1262,x=0.08817645032241295,y=0.500279859952405,x2=0.007775086391460958,xy=0.04411290221839694,y2=0.2502799382739979 -a=hat,b=dog,i=1263,x=0.24299696523672476,y=0.030242580788100826,x2=0.05904752511425802,xy=0.007348855352434977,y2=0.0009146136927248051 -a=hat,b=cat,i=1264,x=0.5295954768581507,y=0.3309314760872929,x2=0.280471369108612,xy=0.17525981288582157,y2=0.10951564186531451 -a=cat,b=dog,i=1265,x=0.905752507806013,y=0.7191510596061227,x2=0.8203876053968817,xy=0.6513728757295971,y2=0.517178246532609 -a=hat,b=hat,i=1266,x=0.9334075361797493,y=0.14210105344366453,x2=0.8712496285971499,xy=0.13263819418339778,y2=0.020192709389799203 -a=cat,b=hat,i=1267,x=0.6914483245290053,y=0.4504589772986569,x2=0.4781007854939686,xy=0.31146910512220555,y2=0.2029132902289519 -a=pan,b=pan,i=1268,x=0.18194896813725736,y=0.630957364942069,x2=0.0331054270062127,xy=0.11480204148981238,y2=0.39810719637463926 -a=wye,b=dog,i=1269,x=0.5003101503907067,y=0.5897199432774787,x2=0.25031024658397155,xy=0.2950428735095544,y2=0.34776961149919267 -a=wye,b=hat,i=1270,x=0.6034315448665395,y=0.13402176597457927,x2=0.36412962934001847,xy=0.08087296128778218,y2=0.01796183375494489 -a=dog,b=hat,i=1271,x=0.5935499818449671,y=0.0008044408327545494,x2=0.3523015809481608,xy=0.000477475841676813,y2=6.471250534028328e-07 -a=wye,b=cat,i=1272,x=0.4644744356299617,y=0.7622091936894339,x2=0.21573650135377145,xy=0.354026685070868,y2=0.5809628549446969 -a=hat,b=hat,i=1273,x=0.71111248882706,y=0.046093470613435605,x2=0.5056809717658156,xy=0.03277764260659714,y2=0.0021246080331916517 -a=pan,b=dog,i=1274,x=0.08437746758614917,y=0.9602158367689005,x2=0.007119557036251654,xy=0.081020580642675,y2=0.9220144531817999 -a=wye,b=pan,i=1275,x=0.09442311424637628,y=0.35535974402164017,x2=0.008915724503984227,xy=0.03355417370831836,y2=0.12628054767112562 -a=pan,b=wye,i=1276,x=0.6348957100323941,y=0.20224852524666714,x2=0.40309256261753784,xy=0.12840672103948733,y2=0.040904465964451756 -a=wye,b=wye,i=1277,x=0.9452313996763632,y=0.35383848056213607,x2=0.8934623989341366,xy=0.3344592422411055,y2=0.12520167032652116 -a=cat,b=pan,i=1278,x=0.7577531781653619,y=0.9304075630050439,x2=0.5741898790197068,xy=0.7050192878561612,y2=0.8656582332969848 -a=hat,b=cat,i=1279,x=0.6692001711965577,y=0.5576306640146016,x2=0.44782886912950215,xy=0.37316653582302156,y2=0.3109519574493655 -a=pan,b=pan,i=1280,x=0.4594940683388816,y=0.5000196255843276,x2=0.21113479883861683,xy=0.22975605200902702,y2=0.2500196259694911 -a=pan,b=wye,i=1281,x=0.27552198385915716,y=0.9583152358503305,x2=0.07591236358968566,xy=0.26403691494393916,y2=0.9183680912628746 -a=cat,b=dog,i=1282,x=0.18698696789643865,y=0.33464578850893034,x2=0.03496412616310378,xy=0.06257440131259775,y2=0.11198780376676373 -a=dog,b=cat,i=1283,x=0.45712467259773504,y=0.09031131053359154,x2=0.20896296629758646,xy=0.04128352825954041,y2=0.008156132810294802 -a=dog,b=pan,i=1284,x=0.7917634082084332,y=0.7884060770985923,x2=0.6268892945778339,xy=0.6242310826558222,y2=0.6215841424059916 -a=pan,b=pan,i=1285,x=0.3632495793130629,y=0.39832910764967155,x2=0.13195025687111717,xy=0.14469288078189094,y2=0.15866607800098362 -a=wye,b=pan,i=1286,x=0.05045398808922252,y=0.9004970918613318,x2=0.002545604914107408,xy=0.045433669547151154,y2=0.8108950124507157 -a=dog,b=dog,i=1287,x=0.46537064998839495,y=0.5020931377860767,x2=0.2165698418706212,xy=0.23365940988621925,y2=0.25209751901186817 -a=cat,b=hat,i=1288,x=0.19401567281316467,y=0.2958610817180076,x2=0.03764208129714497,xy=0.057401686828749944,y2=0.08753377967534959 -a=hat,b=wye,i=1289,x=0.8065531976690105,y=0.661007460051391,x2=0.6505280606701058,xy=0.5331376805875201,y2=0.43693086224359123 -a=wye,b=cat,i=1290,x=0.4167345553632029,y=0.9638585599173016,x2=0.17366768963376644,xy=0.40167316840015377,y2=0.9290233235258545 -a=wye,b=wye,i=1291,x=0.5890993308702704,y=0.9531628070355647,x2=0.34703802163180036,xy=0.5615075718350798,y2=0.9085193367159171 -a=wye,b=wye,i=1292,x=0.9697370827388256,y=0.7184432159679051,x2=0.9403900096388079,xy=0.6967010283662163,y2=0.5161606545703059 -a=pan,b=pan,i=1293,x=0.41000146000264226,y=0.5100693031049607,x2=0.16810119720429825,xy=0.20912915897556414,y2=0.26017069396998027 -a=pan,b=hat,i=1294,x=0.3062135719920578,y=0.5674927907821685,x2=0.09376675167213516,xy=0.17377399454514936,y2=0.3220480675897341 -a=dog,b=dog,i=1295,x=0.06474535374956214,y=0.5041596111532878,x2=0.00419196083215594,xy=0.03264199237036131,y2=0.25417691351823435 -a=pan,b=dog,i=1296,x=0.9174495038575284,y=0.6776095740778809,x2=0.8417135921284251,xy=0.6216725675468631,y2=0.4591547348820072 -a=wye,b=cat,i=1297,x=0.05331799688336658,y=0.5229200185876776,x2=0.0028428087916546885,xy=0.027881047921307786,y2=0.27344534583973706 -a=cat,b=pan,i=1298,x=0.3160068626914928,y=0.5890542594098647,x2=0.09986033726811999,xy=0.1861451884711721,y2=0.3469849205289041 -a=hat,b=hat,i=1299,x=0.2072848391062655,y=0.12814541657277967,x2=0.04296700452331037,xy=0.026562602056494,y2=0.016421247788611235 -a=cat,b=pan,i=1300,x=0.609674840109402,y=0.5909992841362198,x2=0.37170341066242485,xy=0.3603173940605209,y2=0.3492801538495243 -a=dog,b=dog,i=1301,x=0.5796288173573501,y=0.4257016817868029,x2=0.3359695659110803,xy=0.24674896236111954,y2=0.18122192187611239 -a=dog,b=dog,i=1302,x=0.9118817054703917,y=0.846988303319469,x2=0.8315282447715903,xy=0.7723531385444308,y2=0.7173891859599927 -a=pan,b=wye,i=1303,x=0.4169703117166762,y=0.7994962779047577,x2=0.17386424085310212,xy=0.3333662122142692,y2=0.6391942983835617 -a=cat,b=hat,i=1304,x=0.13852682880846345,y=0.7530205145981622,x2=0.01918968229972934,xy=0.10431354391500067,y2=0.567039895405681 -a=cat,b=dog,i=1305,x=0.3885342626087418,y=0.20925757370208675,x2=0.15095887322091875,xy=0.08130373709363471,y2=0.043788732151684266 -a=pan,b=cat,i=1306,x=0.8557416705878303,y=0.8734297213645742,x2=0.7322938067804508,xy=0.7474302089015838,y2=0.7628794781629977 -a=pan,b=wye,i=1307,x=0.10716129465626512,y=0.5272411144445465,x2=0.011483543072406874,xy=0.05649984041988964,y2=0.27798319276072736 -a=pan,b=cat,i=1308,x=0.08556539709217525,y=0.2440579939012173,x2=0.007321437179541633,xy=0.020882919161677345,y2=0.05956430438708662 -a=wye,b=hat,i=1309,x=0.4349772526179212,y=0.7471972254649456,x2=0.18920521029503484,xy=0.3250137962964755,y2=0.5583036937425128 -a=pan,b=hat,i=1310,x=0.9759801648745264,y=0.14253420620232893,x2=0.9525372822285078,xy=0.13911055806960873,y2=0.02031599993772802 -a=dog,b=dog,i=1311,x=0.360620454838383,y=0.454502894802174,x2=0.13004711244784223,xy=0.16390304064892172,y2=0.20657288138355603 -a=cat,b=cat,i=1312,x=0.6370834204192627,y=0.7331696157351928,x2=0.405875284573107,xy=0.4670902065400531,y2=0.5375376854372903 -a=wye,b=hat,i=1313,x=0.10499935974120844,y=0.5651319889883529,x2=0.011024865546063705,xy=0.059338497013052716,y2=0.31937416497793186 -a=wye,b=hat,i=1314,x=0.9298742811904012,y=0.5845001596194702,x2=0.8646661788193652,xy=0.5435116657818296,y2=0.34164043659518617 -a=wye,b=dog,i=1315,x=0.12051945367449224,y=0.9530771885366903,x2=0.01452493871399808,xy=0.11486434207206296,y2=0.908356127309002 -a=wye,b=pan,i=1316,x=0.2727618459553073,y=0.8629441664612792,x2=0.07439902460894678,xy=0.2353782438003425,y2=0.744672634429552 -a=pan,b=dog,i=1317,x=0.36438644148867383,y=0.7704211206115722,x2=0.13277747874077872,xy=0.28073101058736716,y2=0.5935487030843907 -a=hat,b=hat,i=1318,x=0.8568068178360483,y=0.7767586117883688,x2=0.7341179230903352,xy=0.6655320743931387,y2=0.6033539409873938 -a=dog,b=pan,i=1319,x=0.8922495916804474,y=0.012941737130864772,x2=0.796109333853925,xy=0.011547259670649778,y2=0.00016748855996440395 -a=pan,b=pan,i=1320,x=0.8626651570404971,y=0.406411849427885,x2=0.7441911731717055,xy=0.3505973419098253,y2=0.16517059135539386 -a=cat,b=wye,i=1321,x=0.34747795978064333,y=0.5149968839028906,x2=0.12074093253331838,xy=0.17895006651196524,y2=0.26522179042968735 -a=dog,b=wye,i=1322,x=0.23830442449475375,y=0.7271069301204073,x2=0.05678899873377579,xy=0.17327279852849078,y2=0.5286844878291228 -a=cat,b=pan,i=1323,x=0.09287445972986075,y=0.8917392928686774,x2=0.008625665270113526,xy=0.08281980504506647,y2=0.7951989664459288 -a=hat,b=cat,i=1324,x=0.35081527077194585,y=0.7536940586117985,x2=0.12307135420679369,xy=0.2644073852511049,y2=0.5680547339867251 -a=wye,b=hat,i=1325,x=0.10192472917376827,y=0.9404881667594776,x2=0.010388650417146008,xy=0.09585900168809355,y2=0.8845179918146029 -a=wye,b=wye,i=1326,x=0.6110597678648207,y=0.35617421567299123,x2=0.3733940399030086,xy=0.2176437335485726,y2=0.12686007191027046 -a=pan,b=wye,i=1327,x=0.31914560213095555,y=0.8636634576979166,x2=0.10185391535953019,xy=0.2756343942455047,y2=0.7459145681627211 -a=pan,b=cat,i=1328,x=0.24438961193058029,y=0.7973815656193725,x2=0.059726282419579634,xy=0.19487177138231698,y2=0.6358173611896016 -a=pan,b=hat,i=1329,x=0.1036012027987635,y=0.5550550565830947,x2=0.010733209221350523,xy=0.05750437148154435,y2=0.3080861158384625 -a=dog,b=cat,i=1330,x=0.32926870072325665,y=0.8466435075064959,x2=0.10841787727598155,xy=0.2787732076924447,y2=0.7168052288029019 -a=dog,b=wye,i=1331,x=0.9802656048578349,y=0.9431768957041479,x2=0.9609206560672968,xy=0.9245638701553616,y2=0.889582656590113 -a=dog,b=hat,i=1332,x=0.8962952905759901,y=0.31641509451119587,x2=0.8033452479086985,xy=0.2836013590775417,y2=0.10011851203452901 -a=hat,b=wye,i=1333,x=0.032026645297779543,y=0.09784931062734303,x2=0.0010257060090297844,xy=0.003133785164094166,y2=0.009574487590246266 -a=cat,b=wye,i=1334,x=0.8754005993404697,y=0.41678957651506,x2=0.7663262093256534,xy=0.36485784508014407,y2=0.17371355109160305 -a=cat,b=dog,i=1335,x=0.7036518195894103,y=0.2769453583768763,x2=0.495125883211488,xy=0.1948731053487303,y2=0.07669873152649644 -a=wye,b=dog,i=1336,x=0.5165243951313276,y=0.42434006291526427,x2=0.2667974507657839,xy=0.2191819943272964,y2=0.18006448899493044 -a=cat,b=hat,i=1337,x=0.13033411237488224,y=0.28111539223703563,x2=0.01698698084854843,xy=0.0366389251221309,y2=0.07902586375258239 -a=pan,b=pan,i=1338,x=0.28490550758539046,y=0.7306416069236189,x2=0.08117114825248899,xy=0.208163817883579,y2=0.5338371577679281 -a=cat,b=hat,i=1339,x=0.5694077497715048,y=0.9962316825250905,x2=0.3242251854998486,xy=0.5672620405976919,y2=0.9924775652667728 -a=dog,b=hat,i=1340,x=0.15590394809440555,y=0.5898433860158557,x2=0.0243060410314231,xy=0.09195891263724439,y2=0.3479152200266498 -a=dog,b=pan,i=1341,x=0.6003950461936786,y=0.8198112574477217,x2=0.3604742114939094,xy=0.4922106177854225,y2=0.6720904978380146 -a=pan,b=wye,i=1342,x=0.36315346596462383,y=0.7493664806721014,x2=0.1318804398421192,xy=0.2721350347337859,y2=0.561550122354891 -a=cat,b=wye,i=1343,x=0.6421101334356485,y=0.8328811865952982,x2=0.41230542346074633,xy=0.5348014498607482,y2=0.693691070984392 -a=hat,b=pan,i=1344,x=0.7661127041531015,y=0.6894482017443371,x2=0.5869286754647777,xy=0.5281950262118471,y2=0.4753388228885001 -a=pan,b=pan,i=1345,x=0.4759604984469762,y=0.8616528616190144,x2=0.22653839608189402,xy=0.4101127255044495,y2=0.7424456539362364 -a=dog,b=cat,i=1346,x=0.22188183101325643,y=0.915064692367077,x2=0.04923154693379528,xy=0.20303622943798924,y2=0.8373433912168533 -a=dog,b=dog,i=1347,x=0.9208912790263596,y=0.49420571014645875,x2=0.8480407477868045,xy=0.45510972851890275,y2=0.2442392839413656 -a=dog,b=wye,i=1348,x=0.8467666552722811,y=0.942258648149609,x2=0.7170137684810062,xy=0.7978732038950256,y2=0.8878513600127287 -a=hat,b=hat,i=1349,x=0.09019580643306802,y=0.5668952833739302,x2=0.008135283498111474,xy=0.051131577247014254,y2=0.3213702623116087 -a=dog,b=hat,i=1350,x=0.6550191801524471,y=0.32506206782235547,x2=0.42905012636758394,xy=0.21292188916365842,y2=0.10566534793694562 -a=wye,b=cat,i=1351,x=0.8690839589227304,y=0.1824626004555484,x2=0.7553069276568061,xy=0.1585753191592444,y2=0.03329260056500109 -a=pan,b=cat,i=1352,x=0.9314074859896871,y=0.13373488380373733,x2=0.8675199049576292,xy=0.1245616719127619,y2=0.017885019145999125 -a=pan,b=wye,i=1353,x=0.5885458895544678,y=0.6924498690301565,x2=0.34638626411145984,xy=0.40753852414022823,y2=0.4794868211198809 -a=hat,b=dog,i=1354,x=0.7069862790399287,y=0.4646549024385439,x2=0.49982959875072397,xy=0.32850464051268724,y2=0.21590417836017275 -a=pan,b=hat,i=1355,x=0.7862895251624157,y=0.2614772772981365,x2=0.6182512173801371,xy=0.20559684420751306,y2=0.06837036654324659 -a=hat,b=hat,i=1356,x=0.8738403717900255,y=0.22150598992111536,x2=0.76359699537013,xy=0.1935608765863851,y2=0.04906490357093326 -a=dog,b=wye,i=1357,x=0.43466568972781705,y=0.4222392477016015,x2=0.18893426182655892,xy=0.1835329138323712,y2=0.17828598229961437 -a=hat,b=dog,i=1358,x=0.711748884597892,y=0.25645940614412344,x2=0.5065864747263433,xy=0.18253469626771762,y2=0.06577142699979646 -a=cat,b=cat,i=1359,x=0.6180047192178522,y=0.06044898556350575,x2=0.3819298329755363,xy=0.03735775835017837,y2=0.003654079855656927 -a=hat,b=hat,i=1360,x=0.2708340339490777,y=0.23161818324706895,x2=0.07335107394513016,xy=0.06273008690476037,y2=0.053646982810672816 -a=cat,b=wye,i=1361,x=0.4659498048108057,y=0.11016246737554947,x2=0.21710922060322796,xy=0.05133018017111403,y2=0.012135769218269001 -a=wye,b=dog,i=1362,x=0.7531416742891262,y=0.34873353501849025,x2=0.5672223815510282,xy=0.26264575844459137,y2=0.12161507844649257 -a=cat,b=cat,i=1363,x=0.864278486066686,y=0.3291451686100988,x2=0.7469773014777228,xy=0.28447308802250026,y2=0.10833654201937036 -a=dog,b=pan,i=1364,x=0.28375807360599525,y=0.415196967779604,x2=0.08051864433658543,xy=0.11781549174419091,y2=0.17238852205337754 -a=cat,b=pan,i=1365,x=0.9519640755452027,y=0.5724428475007298,x2=0.9062356011286323,xy=0.5449450261234957,y2=0.32769081365474384 -a=wye,b=cat,i=1366,x=0.8729459872971888,y=0.30097510878623235,x2=0.7620346967382636,xy=0.26273501349127637,y2=0.09058601610888439 -a=dog,b=cat,i=1367,x=0.5288238699834243,y=0.906229923389107,x2=0.2796546854642457,xy=0.47923601518140974,y2=0.8212526740458268 -a=cat,b=hat,i=1368,x=0.8677752360596517,y=0.5057105656441789,x2=0.7530338603183842,xy=0.43884310547973737,y2=0.25574317620415543 -a=pan,b=pan,i=1369,x=0.13928618456519037,y=0.4981223118846513,x2=0.01940064121072828,xy=0.06938155626920486,y2=0.2481258375973098 -a=hat,b=pan,i=1370,x=0.14926005556219812,y=0.6825801026593413,x2=0.022278564186430472,xy=0.10188194404858418,y2=0.46591559654643694 -a=cat,b=pan,i=1371,x=0.8874762541378755,y=0.430727170868458,x2=0.7876141016585949,xy=0.38226013615774374,y2=0.18552589572434583 -a=pan,b=cat,i=1372,x=0.055481587623166795,y=0.020130916319327286,x2=0.003078206565187135,xy=0.0011168951977053952,y2=0.0004052537918557576 -a=hat,b=wye,i=1373,x=0.01773252916422907,y=0.7038538617279082,x2=0.00031444259056023457,xy=0.012481109130445388,y2=0.49541025866928934 -a=cat,b=pan,i=1374,x=0.5772467643960123,y=0.08979702996792505,x2=0.3332138270056653,xy=0.05183504500135649,y2=0.00806350659106043 -a=wye,b=dog,i=1375,x=0.7186819696362957,y=0.9750853169337808,x2=0.5165037734803055,xy=0.7007762361374013,y2=0.9507913752998517 -a=pan,b=pan,i=1376,x=0.012127435402209952,y=0.737649467492079,x2=0.00014707468943477524,xy=0.008945796266484759,y2=0.5441267368913478 -a=pan,b=hat,i=1377,x=0.1176493243314749,y=0.03953239943871212,x2=0.013841363515652573,xy=0.004650960083166458,y2=0.001562810605381886 -a=dog,b=wye,i=1378,x=0.8404549058183635,y=0.5233749071680257,x2=0.7063644487141542,xy=0.43987300831159776,y2=0.27392129345313954 -a=wye,b=hat,i=1379,x=0.6830083895212168,y=0.1943755073990716,x2=0.4665004601563662,xy=0.13276010227100926,y2=0.037781837876646546 -a=dog,b=wye,i=1380,x=0.036699727556552375,y=0.22841271630687543,x2=0.0013468700027251697,xy=0.008382684458914417,y2=0.052172368970685154 -a=cat,b=wye,i=1381,x=0.24980580942734343,y=0.3359096035218332,x2=0.06240294242365022,xy=0.08391217040218955,y2=0.11283526173819516 -a=cat,b=pan,i=1382,x=0.12838778331057865,y=0.6008614102707441,x2=0.0164834229034041,xy=0.07714326454152899,y2=0.3610344343525475 -a=hat,b=hat,i=1383,x=0.2916895193626061,y=0.03032448567581081,x2=0.08508277570598817,xy=0.008845334651695489,y2=0.0009195744315024549 -a=cat,b=hat,i=1384,x=0.9402388854624985,y=0.4879444803737807,x2=0.8840491617357613,xy=0.4587843743942215,y2=0.23808981592723885 -a=dog,b=cat,i=1385,x=0.94601401053633,y=0.16234319195761016,x2=0.8949425081310316,xy=0.15357893410708806,y2=0.02635531197498546 -a=pan,b=pan,i=1386,x=0.5043323260351605,y=0.5370015925014423,x2=0.2543510950840355,xy=0.2708272622308378,y2=0.28837071034908507 -a=pan,b=cat,i=1387,x=0.6028547009079508,y=0.8671091734910473,x2=0.3634337904068148,xy=0.5227408414394857,y2=0.7518783187523272 -a=hat,b=hat,i=1388,x=0.5090633985401595,y=0.11630855862341449,x2=0.2591455437332572,xy=0.059208430132142754,y2=0.013527680809056246 -a=wye,b=hat,i=1389,x=0.871750098695372,y=0.07013210455112173,x2=0.7599482345753908,xy=0.06113766906415452,y2=0.00491851208876947 -a=wye,b=wye,i=1390,x=0.1869280613978892,y=0.12584623841447395,x2=0.03494210013797303,xy=0.02352419338103419,y2=0.01583727572307262 -a=wye,b=pan,i=1391,x=0.21402115392833831,y=0.9800494903428287,x2=0.045805054328817485,xy=0.20975132283005207,y2=0.9604970035212383 -a=wye,b=dog,i=1392,x=0.551059079038248,y=0.10685292449326611,x2=0.3036661085904821,xy=0.05888227416380268,y2=0.011417547472763629 -a=cat,b=wye,i=1393,x=0.4678244968269991,y=0.7249906295286983,x2=0.2188597598314349,xy=0.33916837646355263,y2=0.5256114129044183 -a=cat,b=cat,i=1394,x=0.7167722114927373,y=0.28712631644066244,x2=0.5137624031681893,xy=0.20580416481293712,y2=0.08244152159278342 -a=pan,b=wye,i=1395,x=0.2762204757261446,y=0.011486475128392848,x2=0.07629775121037764,xy=0.0031727996243812004,y2=0.0001319391108751875 -a=hat,b=cat,i=1396,x=0.5819182194871779,y=0.5886751143305508,x2=0.3386288141711274,xy=0.342560774387645,y2=0.346538390232087 -a=hat,b=pan,i=1397,x=0.19288150561327133,y=0.11249178081954025,x2=0.03720327520764242,xy=0.02169758405359104,y2=0.012654400751951485 -a=cat,b=cat,i=1398,x=0.24399120748834546,y=0.41029668051499657,x2=0.059531709331620844,xy=0.10010878250731392,y2=0.16834336604162517 -a=cat,b=cat,i=1399,x=0.17220187835057998,y=0.6494609231347691,x2=0.029653486907467948,xy=0.11183839087910889,y2=0.42179949067906647 -a=pan,b=cat,i=1400,x=0.17220507948844355,y=0.9939455961997427,x2=0.029654589401621162,xy=0.1711624804007651,y2=0.9879278482048619 -a=dog,b=wye,i=1401,x=0.9721778010832514,y=0.13451363018016638,x2=0.9451296769190658,xy=0.13077116520427984,y2=0.018093916704246565 -a=wye,b=hat,i=1402,x=0.5658764529186242,y=0.09047444065190158,x2=0.3202161599677639,xy=0.05119735555589464,y2=0.008185624411274461 -a=pan,b=dog,i=1403,x=0.3906650291185706,y=0.8340390004173398,x2=0.1526191649762136,xy=0.3258298703840636,y2=0.6956210542171554 -a=dog,b=dog,i=1404,x=0.4934751758900321,y=0.29889026279686437,x2=0.2435177492196981,xy=0.14749492500550057,y2=0.08933538919477864 -a=cat,b=pan,i=1405,x=0.9045117334972449,y=0.9676855030380848,x2=0.818141476034191,xy=0.8752828918331315,y2=0.9364152327900711 -a=hat,b=pan,i=1406,x=0.1439073258172452,y=0.6346571251787796,x2=0.020709318423870766,xy=0.0913318096953388,y2=0.4027896665401931 -a=dog,b=pan,i=1407,x=0.8469730435544695,y=0.41014970787877403,x2=0.7173633365079212,xy=0.3473857463950618,y2=0.16822278287304368 -a=dog,b=pan,i=1408,x=0.8688722371484102,y=0.11846976397020581,x2=0.7549389644872833,xy=0.10293508885523685,y2=0.014035084975156275 -a=dog,b=cat,i=1409,x=0.9202028068692502,y=0.6295966148394991,x2=0.8467732057700466,xy=0.5793565721706853,y2=0.39639189741735664 -a=cat,b=dog,i=1410,x=0.6843494473937148,y=0.01567965052287723,x2=0.4683341661480829,xy=0.010730360170657606,y2=0.00024585144051956424 -a=wye,b=dog,i=1411,x=0.6734529541868731,y=0.1841112509992,x2=0.4535388815030266,xy=0.12399026588445214,y2=0.03389695274449042 -a=cat,b=wye,i=1412,x=0.9396933186751201,y=0.086711644119988,x2=0.8830235331626608,xy=0.08148235263088748,y2=0.0075189092259914485 -a=dog,b=hat,i=1413,x=0.2844730851848265,y=0.5095482304423925,x2=0.08092493619457355,xy=0.14495275716441633,y2=0.25963939914697354 -a=wye,b=hat,i=1414,x=0.4743476649105962,y=0.5142851449565702,x2=0.22500570720613527,xy=0.24394995760835655,y2=0.2644892103230004 -a=wye,b=hat,i=1415,x=0.16895553027547872,y=0.46153937019693836,x2=0.028545971210668205,xy=0.07797962903463419,y2=0.21301859024178652 -a=pan,b=dog,i=1416,x=0.32582961061066795,y=0.03585131824293797,x2=0.1061649351506995,xy=0.011681421062975615,y2=0.0012853170197564168 -a=hat,b=hat,i=1417,x=0.3026418357254389,y=0.004614752454422111,x2=0.09159208073126354,xy=0.0013966171542247824,y2=2.1295940215594896e-05 -a=pan,b=pan,i=1418,x=0.42304084167773315,y=0.12392812416721377,x2=0.17896355372740488,xy=0.052426657955240735,y2=0.015358179959604354 -a=hat,b=hat,i=1419,x=0.8459599975145355,y=0.10566339134758163,x2=0.715648317394793,xy=0.08938700228177755,y2=0.011164752271072187 -a=wye,b=wye,i=1420,x=0.9310295079548001,y=0.17466407501923698,x2=0.8668159446825572,xy=0.1626174078225405,y2=0.03050753910232564 -a=dog,b=cat,i=1421,x=0.502209665448799,y=0.9885386088080114,x2=0.2522145480701946,xy=0.49645364401269254,y2=0.9772085811040785 -a=dog,b=cat,i=1422,x=0.7729461330006621,y=0.39309585669646974,x2=0.5974457245206771,xy=0.3038419223321187,y2=0.15452435255193148 -a=pan,b=hat,i=1423,x=0.6199712813809483,y=0.26981177277874735,x2=0.38436438973713494,xy=0.16727555050130524,y2=0.07279839273001039 -a=cat,b=hat,i=1424,x=0.20555135841236738,y=0.869583767645243,x2=0.042251360945169514,xy=0.17874412469282414,y2=0.7561759289520961 -a=hat,b=cat,i=1425,x=0.9130691761644157,y=0.14367810795564318,x2=0.8336953204615649,xy=0.1311880516639211,y2=0.020643398705713453 -a=dog,b=pan,i=1426,x=0.23123876984973346,y=0.7920929241051321,x2=0.053471368681618,xy=0.18316259337674903,y2=0.6274112004174186 -a=hat,b=cat,i=1427,x=0.5608888924642393,y=0.305055776481581,x2=0.314596349689761,xy=0.17110239661057253,y2=0.09305902676478031 -a=cat,b=wye,i=1428,x=0.9095930130183074,y=0.4767794622095476,x2=0.8273594493317228,xy=0.43367526757643066,y2=0.22731865558482542 -a=wye,b=wye,i=1429,x=0.10863587137597741,y=0.9286459149556059,x2=0.011801752549617909,xy=0.10088425817094406,y2=0.8623832353637344 -a=hat,b=wye,i=1430,x=0.8622224940251898,y=0.5334741714008802,x2=0.7434276292030184,xy=0.4599734305632885,y2=0.2845946915518557 -a=hat,b=wye,i=1431,x=0.09742334198191993,y=0.9810984813848357,x2=0.009491307562926123,xy=0.09558189286989716,y2=0.9625542301756308 -a=cat,b=hat,i=1432,x=0.2601610612236708,y=0.36480352975322794,x2=0.06768377777702657,xy=0.09490767343874074,y2=0.13308161532041426 -a=dog,b=cat,i=1433,x=0.8265198575453196,y=0.9324939966679968,x2=0.6831350749167355,xy=0.7707248052878986,y2=0.8695450538218541 -a=wye,b=wye,i=1434,x=0.6946765335260483,y=0.20200928081444647,x2=0.4825754862317669,xy=0.14033110693626974,y2=0.04080774953516989 -a=cat,b=cat,i=1435,x=0.8255836799033486,y=0.24916816524689422,x2=0.6815884125227547,xy=0.2057091707792966,y2=0.06208477457250359 -a=wye,b=hat,i=1436,x=0.2174053265016268,y=0.4824524435442561,x2=0.04726507599127895,xy=0.10488773101024666,y2=0.23276036028182362 -a=pan,b=dog,i=1437,x=0.771373898754349,y=0.04186581312981008,x2=0.5950176916794847,xy=0.032294195498462616,y2=0.0017527463090201783 -a=hat,b=pan,i=1438,x=0.19182670076601294,y=0.45537709476990573,x2=0.036797483126773466,xy=0.08735348569412302,y2=0.2073682984410797 -a=hat,b=wye,i=1439,x=0.714222708220045,y=0.7453977101018939,x2=0.5101140769371755,xy=0.5323799712099947,y2=0.5556177462251471 -a=cat,b=cat,i=1440,x=0.8322586744033202,y=0.10313297668924326,x2=0.6926545011195718,xy=0.08583331446665812,y2=0.010636410880783993 -a=cat,b=dog,i=1441,x=0.9472799723818048,y=0.426334179527565,x2=0.8973393460756729,xy=0.4038578298082912,y2=0.18176083263344206 -a=hat,b=wye,i=1442,x=0.11366628807823498,y=0.8539618874961815,x2=0.012920025045484304,xy=0.09706667791197425,y2=0.729250905296041 -a=cat,b=pan,i=1443,x=0.4448661611242415,y=0.7520612280086222,x2=0.1979059013134196,xy=0.3345665914345786,y2=0.5655960906738368 -a=pan,b=wye,i=1444,x=0.9435596776538897,y=0.02257313941287642,x2=0.8903048652943123,xy=0.021299104148049988,y2=0.0005095466229531548 -a=cat,b=hat,i=1445,x=0.859783392830569,y=0.8780331181941216,x2=0.7392274825872446,xy=0.7549182933785459,y2=0.7709421566456922 -a=cat,b=hat,i=1446,x=0.6519916814535887,y=0.7185339592232461,x2=0.42509315268467784,xy=0.46847816425546857,y2=0.5162910505570335 -a=cat,b=dog,i=1447,x=0.10377307114420198,y=0.21704859436178736,x2=0.010768850294699605,xy=0.022523799224454796,y2=0.04711009231442771 -a=wye,b=pan,i=1448,x=0.9273173576733522,y=0.9318729218015536,x2=0.8599174818422879,xy=0.8641419355323631,y2=0.8683871423869644 -a=hat,b=pan,i=1449,x=0.6375012429444301,y=0.5310388147952827,x2=0.4064078347556933,xy=0.3385379044837297,y2=0.2820022228191786 -a=hat,b=cat,i=1450,x=0.6153045495441312,y=0.3948073863559951,x2=0.37859968868970617,xy=0.24292678101847132,y2=0.155872872321252 -a=cat,b=pan,i=1451,x=0.104775482636281,y=0.047012890653388206,x2=0.010977901761665621,xy=0.004925798308335454,y2=0.002210211887587436 -a=cat,b=pan,i=1452,x=0.704306898081268,y=0.3590456724638449,x2=0.49604820668485766,xy=0.25287834384251356,y2=0.1289137949150146 -a=pan,b=pan,i=1453,x=0.4850397789341774,y=0.27946084955758654,x2=0.23526358714851567,xy=0.13554962869016918,y2=0.07809836643544801 -a=hat,b=cat,i=1454,x=0.7139052975695583,y=0.9627736757283823,x2=0.5096607738978797,xy=0.6873292274630083,y2=0.9269331506755403 -a=wye,b=wye,i=1455,x=0.007982364048064072,y=0.9976141705705273,x2=6.371813579582584e-05,xy=0.007963319489001437,y2=0.9952340333231211 -a=wye,b=cat,i=1456,x=0.7449673176112723,y=0.37483093904443254,x2=0.5549763043089343,xy=0.2792367992176452,y2=0.1404982328649311 -a=hat,b=dog,i=1457,x=0.9599744936672627,y=0.9843133756536661,x2=0.9215510284917174,xy=0.9449157344030422,y2=0.9688728214907151 -a=pan,b=dog,i=1458,x=0.8233716461878181,y=0.891969123189684,x2=0.6779408677460376,xy=0.7344220853093949,y2=0.7956089167237738 -a=cat,b=dog,i=1459,x=0.7308968293550443,y=0.037240833426733455,x2=0.5342101751612568,xy=0.027219207074138833,y2=0.001386879674317708 -a=pan,b=pan,i=1460,x=0.07085408330425413,y=0.1755347772797169,x2=0.005020301120886184,xy=0.012437355732170757,y2=0.030812458034639813 -a=wye,b=hat,i=1461,x=0.0006779422696939763,y=0.3334548999208484,x2=4.596057210378201e-07,xy=0.0002260631716929177,y2=0.11119217028122304 -a=cat,b=wye,i=1462,x=0.9686895422147692,y=0.7895826259809053,x2=0.9383594291962591,xy=0.7648604325021785,y2=0.6234407232509023 -a=dog,b=hat,i=1463,x=0.6659257291779056,y=0.9214760431929409,x2=0.4434570767811253,xy=0.6136346059832304,y2=0.8491180981785186 -a=wye,b=cat,i=1464,x=0.2281620156044537,y=0.3336094097972423,x2=0.05205790536468698,xy=0.07611699536395099,y2=0.11129523830526435 -a=wye,b=cat,i=1465,x=0.3611555760881471,y=0.8092916112370757,x2=0.1304333501395614,xy=0.29228017807963086,y2=0.6549529120187021 -a=wye,b=dog,i=1466,x=0.3489899877303331,y=0.2809129395093045,x2=0.12179401153601803,xy=0.09803580331264398,y2=0.07891207958375818 -a=pan,b=pan,i=1467,x=0.11346480630238476,y=0.5360131594723014,x2=0.012874262269237692,xy=0.060818629315053954,y2=0.28731010712747884 -a=pan,b=cat,i=1468,x=0.5775881715751248,y=0.2280737250945013,x2=0.3336080959434958,xy=0.13173268586166065,y2=0.05201762407848215 -a=hat,b=pan,i=1469,x=0.3062476674620713,y=0.28706130041795064,x2=0.09378763382595942,xy=0.08791185367162631,y2=0.0824041901976449 -a=dog,b=dog,i=1470,x=0.030478198313291682,y=0.5848530546223129,x2=0.000928920572424336,xy=0.017825267382913262,y2=0.34205309550105006 -a=cat,b=pan,i=1471,x=0.44505369311904597,y=0.9523208692427725,x2=0.19807278975890194,xy=0.42383391989083596,y2=0.9069150379953098 -a=cat,b=pan,i=1472,x=0.20291236499826126,y=0.04960947407654792,x2=0.0411734278691876,xy=0.010066375711192272,y2=0.00246109991815168 -a=dog,b=pan,i=1473,x=0.09949313982898744,y=0.7183672544226375,x2=0.009898884873030447,xy=0.07147261369283726,y2=0.5160515122267184 -a=cat,b=hat,i=1474,x=0.352809068548661,y=0.024962652522327655,x2=0.12447423885017378,xy=0.008807050184906304,y2=0.0006231340209504713 -a=wye,b=cat,i=1475,x=0.6608084684008684,y=0.8598299398147315,x2=0.43666783191030145,xy=0.5681829056141836,y2=0.7393075254018049 -a=pan,b=hat,i=1476,x=0.5669052214370769,y=0.17926469808528966,x2=0.32138153009262116,xy=0.10162609336389188,y2=0.032135831979610056 -a=pan,b=hat,i=1477,x=0.8099020676087838,y=0.8915148799264969,x2=0.655941359116983,xy=0.7220397445564665,y2=0.7947987811303562 -a=dog,b=pan,i=1478,x=0.6296682139425525,y=0.6104249412189928,x2=0.39648205964960404,xy=0.3843651824833508,y2=0.3726186088622108 -a=hat,b=dog,i=1479,x=0.04076624893321379,y=0.5327214484144159,x2=0.0016618870520847544,xy=0.02171705517812429,y2=0.2837921416007532 -a=hat,b=cat,i=1480,x=0.509190032309779,y=0.14952434255595937,x2=0.25927448900363376,xy=0.07613630481716742,y2=0.02235752901679188 -a=pan,b=cat,i=1481,x=0.31131749285840704,y=0.3884471378381704,x2=0.09691858135964432,xy=0.12093038905980327,y2=0.15089117889466658 -a=wye,b=cat,i=1482,x=0.21416750317699285,y=0.1925486742632878,x2=0.04586771941706724,xy=0.04123766880700845,y2=0.03707499196054971 -a=pan,b=hat,i=1483,x=0.41127580324322,y=0.6916409695224564,x2=0.1691477863333558,xy=0.28445519529626767,y2=0.4783672307219634 -a=hat,b=wye,i=1484,x=0.5036290543263833,y=0.5124414036336514,x2=0.2536422243616871,xy=0.2580803795097003,y2=0.2625961921580269 -a=dog,b=wye,i=1485,x=0.48067604837123523,y=0.25561201998460414,x2=0.23104946347778607,xy=0.12286657568238873,y2=0.06533750476060966 -a=pan,b=pan,i=1486,x=0.5308171816038317,y=0.44140631297419275,x2=0.2817668802858353,xy=0.23430605499509985,y2=0.194839533133471 -a=wye,b=wye,i=1487,x=0.4217420866304358,y=0.484250357788911,x2=0.177866387635394,xy=0.20422875634543042,y2=0.23449840901868832 -a=pan,b=wye,i=1488,x=0.4464763932559691,y=0.06247195527210159,x2=0.19934116973485877,xy=0.027892253269536142,y2=0.0039027451955194613 -a=hat,b=wye,i=1489,x=0.42274885425062425,y=0.07596963234716747,x2=0.17871659377021554,xy=0.03211607503260621,y2=0.005771385038963794 -a=dog,b=cat,i=1490,x=0.692927713608303,y=0.24544000498853658,x2=0.48014881628643036,xy=0.17007218148471712,y2=0.06024079604877286 -a=hat,b=hat,i=1491,x=0.6087531065526952,y=0.26160208208492797,x2=0.3705803447375571,xy=0.15925108014985306,y2=0.06843564935116939 -a=cat,b=dog,i=1492,x=0.7254141100100487,y=0.8302926192061462,x2=0.5262256310016711,xy=0.6023059814093388,y2=0.6893858335082025 -a=cat,b=hat,i=1493,x=0.5475753320134177,y=0.5217686968248798,x2=0.2998387442296046,xy=0.28570766739809184,y2=0.27224257298633336 -a=dog,b=hat,i=1494,x=0.5260468562076355,y=0.2818852314330206,x2=0.2767252949259367,xy=0.14828483980670223,y2=0.07945928370004757 -a=cat,b=pan,i=1495,x=0.5403536562906746,y=0.1281330591107771,x2=0.29198207386670044,xy=0.06923716698221753,y2=0.0164180808370859 -a=hat,b=cat,i=1496,x=0.8633531871432814,y=0.446911367789502,x2=0.7453787257504618,xy=0.3858423537516298,y2=0.19972977065948355 -a=cat,b=dog,i=1497,x=0.38131923662715583,y=0.8674734444664344,x2=0.14540436022191686,xy=0.3307843116382702,y2=0.75251017685446 -a=hat,b=dog,i=1498,x=0.3261180226468561,y=0.7253611203309942,x2=0.10635296469509534,xy=0.23655333426725206,y2=0.5261487548878351 -a=wye,b=dog,i=1499,x=0.6732522088500549,y=0.6621067180227186,x2=0.45326853672147793,xy=0.4457648104032557,y2=0.43838530605081577 -a=wye,b=pan,i=1500,x=0.9808737380624147,y=0.5425302090855434,x2=0.9621132900205346,xy=0.5321536341975204,y2=0.29433902777040344 -a=pan,b=pan,i=1501,x=0.5780096357980177,y=0.8550994240994678,x2=0.33409513907535704,xy=0.49425570669482805,y2=0.7311950250952415 -a=hat,b=pan,i=1502,x=0.2774932582132752,y=0.9027623326364321,x2=0.07700250835381942,xy=0.25051046107550007,y2=0.8149798292271722 -a=hat,b=cat,i=1503,x=0.5632544178950221,y=0.7213298388492506,x2=0.31725553927826017,xy=0.4062922184913447,y2=0.5203167364142859 -a=hat,b=wye,i=1504,x=0.24924662977999656,y=0.5133814433421646,x2=0.06212388245668667,xy=0.1279585945446248,y2=0.2635605063680842 -a=dog,b=cat,i=1505,x=0.9052135431451185,y=0.9064647142531286,x2=0.8194115586933393,xy=0.8205441357251019,y2=0.821678278186006 -a=pan,b=hat,i=1506,x=0.39901457386442973,y=0.6385244972604642,x2=0.15921263015621245,xy=0.2547805801763834,y2=0.4077135336017286 -a=pan,b=hat,i=1507,x=0.42560907422849514,y=0.7385824097799405,x2=0.1811430840656367,xy=0.3143473756678915,y2=0.5455039760363439 -a=wye,b=dog,i=1508,x=0.24836853850846896,y=0.10510099225675706,x2=0.06168693092083283,xy=0.026103779842600663,y2=0.011046218573354909 -a=cat,b=pan,i=1509,x=0.19405289787876656,y=0.757765187724275,x2=0.037656527175147,xy=0.14704653058954312,y2=0.5742080797268058 -a=cat,b=pan,i=1510,x=0.42619538892527276,y=0.8177257976529756,x2=0.1816425095411645,xy=0.34851096436493884,y2=0.6686754801471951 -a=cat,b=cat,i=1511,x=0.3119961308047905,y=0.2692771758370184,x2=0.09734158563715994,xy=0.08401343697519095,y2=0.07251019742676051 -a=dog,b=pan,i=1512,x=0.4956268080174796,y=0.34898138069783036,x2=0.24564593282559558,xy=0.17296452777279853,y2=0.121788004073764 -a=hat,b=hat,i=1513,x=0.9928788688650781,y=0.1805357299725343,x2=0.9858084482387971,xy=0.17925011136486105,y2=0.03259314979671582 -a=pan,b=dog,i=1514,x=0.6448737665685752,y=0.10975042360679177,x2=0.4158621748083412,xy=0.07077516905380848,y2=0.012045155481870237 -a=pan,b=cat,i=1515,x=0.1094473216590276,y=0.34122267308228693,x2=0.011978716218334651,xy=0.03734590765819028,y2=0.11643291262542126 -a=cat,b=cat,i=1516,x=0.08811008185638147,y=0.20179679125663352,x2=0.007763386524738244,xy=0.017780331795977104,y2=0.04072194496147332 -a=hat,b=hat,i=1517,x=0.499677763055302,y=0.45791040648205683,x2=0.2496778668919505,xy=0.22880764759069822,y2=0.2096819403645625 -a=hat,b=hat,i=1518,x=0.3841861055633752,y=0.29467543539117547,x2=0.14759896370795286,xy=0.11321020792812768,y2=0.08683361222297882 -a=wye,b=dog,i=1519,x=0.43779523845120794,y=0.2644626628409492,x2=0.19166467081055003,xy=0.11578049453989477,y2=0.06994050003692558 -a=pan,b=dog,i=1520,x=0.8621151418028805,y=0.8087471833817196,x2=0.7432425177258007,xy=0.6972331926838113,y2=0.6540720066278648 -a=dog,b=dog,i=1521,x=0.915428541505597,y=0.6918518428007708,x2=0.8380094146030647,xy=0.6333409233930692,y2=0.47865897238682253 -a=pan,b=hat,i=1522,x=0.34246330299611916,y=0.4015667600891675,x2=0.11728111389901172,xy=0.13752187903358645,y2=0.16125586280851098 -a=wye,b=hat,i=1523,x=0.6086233191892091,y=0.7779595323252304,x2=0.3704223446608899,xy=0.47348431275866654,y2=0.6052210339356913 -a=hat,b=cat,i=1524,x=0.10442936908164735,y=0.4581450509779861,x2=0.010905493126790924,xy=0.047843798621510246,y2=0.20989688773562146 -a=pan,b=pan,i=1525,x=0.2583246878545772,y=0.02240067573993554,x2=0.06673164435516474,xy=0.005786647568250447,y2=0.0005017902736057366 -a=pan,b=hat,i=1526,x=0.23796014595848403,y=0.3072450414987614,x2=0.05662503106458302,xy=0.07311207492006574,y2=0.09439951552557563 -a=hat,b=pan,i=1527,x=0.12119541398603217,y=0.17048024763361747,x2=0.014688328371245724,xy=0.020661424188397552,y2=0.029063514833219534 -a=dog,b=cat,i=1528,x=0.5175855045219828,y=0.7817853634426445,x2=0.2678947544912755,xy=0.40464077176536284,y2=0.6111883544931477 -a=wye,b=dog,i=1529,x=0.3149584970318017,y=0.09231541484342054,x2=0.09919885485253142,xy=0.02907552431195101,y2=0.00852213581771283 -a=hat,b=pan,i=1530,x=0.6893929855985418,y=0.42906722591329993,x2=0.4752626885924712,xy=0.29579593589485387,y2=0.18409868435293475 -a=dog,b=wye,i=1531,x=0.45335175048306375,y=0.07118777173148638,x2=0.2055278096660581,xy=0.032273100927458116,y2=0.005067698844094212 -a=cat,b=cat,i=1532,x=0.18419733883722667,y=0.24948680832820092,x2=0.03392865963471609,xy=0.045954806169047846,y2=0.06224366752979246 -a=dog,b=cat,i=1533,x=0.9464506050337935,y=0.9008282308337938,x2=0.8957687477688339,xy=0.8525894241041659,y2=0.8114915014671429 -a=dog,b=dog,i=1534,x=0.04092212076171453,y=0.4810326111514236,x2=0.0016746199676363474,xy=0.019684874603861424,y2=0.2313923729911567 -a=hat,b=hat,i=1535,x=0.04217832231710106,y=0.1739421021255957,x2=0.0017790108734852652,xy=0.007336586047967484,y2=0.03025585489187116 -a=pan,b=pan,i=1536,x=0.4357609226668223,y=0.7464995143390647,x2=0.1898875817234403,xy=0.32529531713872556,y2=0.5572615249084595 -a=wye,b=wye,i=1537,x=0.6744759735073189,y=0.48261666323539476,x2=0.45491783883864556,xy=0.3255133437665468,y2=0.23291884363246643 -a=wye,b=dog,i=1538,x=0.5090904718939057,y=0.02011153089090212,x2=0.25917310857315956,xy=0.01023858875175822,y2=0.00040447367477571016 -a=wye,b=wye,i=1539,x=0.34746876165555896,y=0.5458488723201921,x2=0.12073454032644763,xy=0.18966543171618044,y2=0.29795099141322534 -a=hat,b=dog,i=1540,x=0.10238215788898886,y=0.9830316802525342,x2=0.010482106254005844,xy=0.10064490469749296,y2=0.9663512843801206 -a=cat,b=pan,i=1541,x=0.35385559107620834,y=0.3216267622332234,x2=0.12521377933589278,xy=0.11380942805596439,y2=0.10344377418462641 -a=hat,b=hat,i=1542,x=0.8253265157708232,y=0.2075510242659313,x2=0.6811638576344068,xy=0.17129736370206666,y2=0.0430774276738372 -a=hat,b=hat,i=1543,x=0.7991369037258617,y=0.2859450664777635,x2=0.6386197908965571,xy=0.2285092550607256,y2=0.0817645810429726 -a=cat,b=cat,i=1544,x=0.6392952718588218,y=0.7439525954966602,x2=0.40869844462104493,xy=0.4756053767881135,y2=0.5534654643462172 -a=hat,b=hat,i=1545,x=0.5084509220184711,y=0.6728224711625662,x2=0.2585223401014334,xy=0.342097205817353,y2=0.45269007770130226 -a=dog,b=dog,i=1546,x=0.14100930019189006,y=0.7938180994167824,x2=0.019883622740606566,xy=0.11193573467841669,y2=0.6301471749616726 -a=wye,b=hat,i=1547,x=0.9928968716790996,y=0.8508215547880971,x2=0.9858441977901423,xy=0.8447780601062492,y2=0.7238973180920348 -a=cat,b=dog,i=1548,x=0.6350205719045344,y=0.26567328158599435,x2=0.40325112674196195,xy=0.16870799921249255,y2=0.07058229254867104 -a=wye,b=pan,i=1549,x=0.021473868740017554,y=0.34749808992043807,x2=0.0004611270386635031,xy=0.007462128370358304,y2=0.12075492249835286 -a=hat,b=cat,i=1550,x=0.7408751855532695,y=0.3423014162600545,x2=0.5488960405685914,xy=0.2536026252868148,y2=0.11717025957363911 -a=wye,b=dog,i=1551,x=0.04383676821479654,y=0.266850697482773,x2=0.0019216622475177962,xy=0.011697872173509111,y2=0.07120929474704243 -a=dog,b=pan,i=1552,x=0.3801549297268849,y=0.04997949600296803,x2=0.14451777059565282,xy=0.018999951790793435,y2=0.002497950020710697 -a=wye,b=pan,i=1553,x=0.5345857907474418,y=0.135104902701352,x2=0.28578196766906766,xy=0.07222516124445845,y2=0.018253334733941792 -a=dog,b=hat,i=1554,x=0.7592553908177758,y=0.4867024463422348,x2=0.5764687484858535,xy=0.3695314561095411,y2=0.23687927127551595 -a=pan,b=wye,i=1555,x=0.9156527188879559,y=0.6114596061890427,x2=0.8384199016069059,xy=0.5598846508971557,y2=0.3738828500008592 -a=dog,b=wye,i=1556,x=0.2052844395044381,y=0.6894819818589596,x2=0.0421417011026513,xy=0.14153992219432568,y2=0.4753854033081587 -a=cat,b=cat,i=1557,x=0.2982791981713536,y=0.18014522680887524,x2=0.08897048006174564,xy=0.05373357380694794,y2=0.0324523027420211 -a=cat,b=dog,i=1558,x=0.06790524135741416,y=0.8195635939312853,x2=0.00461112180380867,xy=0.0556526636536537,y2=0.6716844844975647 -a=cat,b=pan,i=1559,x=0.10877195122466432,y=0.8210416061457385,x2=0.011831337373220754,xy=0.08930629753710433,y2=0.674109319022374 -a=pan,b=pan,i=1560,x=0.8756525639753959,y=0.661646767692369,x2=0.7667674127966848,xy=0.579372688575856,y2=0.43777644519775966 -a=hat,b=wye,i=1561,x=0.02446088669345725,y=0.10532388717105712,x2=0.000598334977830154,xy=0.002576315670205704,y2=0.01109312120882157 -a=hat,b=dog,i=1562,x=0.19889556497967098,y=0.8936796259204715,x2=0.03955944576858252,xy=0.17774891410827318,y2=0.7986632737853538 -a=hat,b=cat,i=1563,x=0.03660256512961213,y=0.5634520296563341,x2=0.0013397477740674979,xy=0.020623789612908117,y2=0.3174781897238424 -a=cat,b=pan,i=1564,x=0.9659545905762601,y=0.571818493225905,x2=0.9330682710553503,xy=0.5523506985079629,y2=0.3269763891951443 -a=cat,b=hat,i=1565,x=0.7583921834169207,y=0.2601502538203321,x2=0.5751587038678844,xy=0.19729591901126778,y2=0.0676781545627832 -a=hat,b=dog,i=1566,x=0.026263975866313904,y=0.02216648927463971,x2=0.0006897964283063192,xy=0.0005821801393500434,y2=0.0004913532467627174 -a=dog,b=hat,i=1567,x=0.6844253879734883,y=0.2949316889002147,x2=0.46843811170266,xy=0.2018587356012056,y2=0.08698470111753304 -a=pan,b=wye,i=1568,x=0.12484859125467229,y=0.8991956339382959,x2=0.015587170738276234,xy=0.11226330815954824,y2=0.8085527880936939 -a=pan,b=hat,i=1569,x=0.18131094277686866,y=0.596307418549097,x2=0.03287365797063694,xy=0.10811706024197759,y2=0.35558253741668794 -a=dog,b=pan,i=1570,x=0.8579920772160065,y=0.7280991456877075,x2=0.7361504045654376,xy=0.6247032984277958,y2=0.5301283659511695 -a=cat,b=hat,i=1571,x=0.8553472608035858,y=0.11757479526347292,x2=0.7316189365641974,xy=0.10056727906815398,y2=0.013823832481247574 -a=pan,b=wye,i=1572,x=0.6479567905186169,y=0.2807792182278904,x2=0.41984800237918674,xy=0.1819328010872702,y2=0.07883696938866532 -a=pan,b=dog,i=1573,x=0.7819251395306596,y=0.9370590895583982,x2=0.6114069238300415,xy=0.7327100593514233,y2=0.8780797373240142 -a=cat,b=cat,i=1574,x=0.1514963814079887,y=0.3289798760930779,x2=0.02295115357971479,xy=0.0498392607841498,y2=0.10822775887421687 -a=pan,b=cat,i=1575,x=0.14828774243885756,y=0.4937495068399602,x2=0.02198925455761296,xy=0.07321699969959695,y2=0.24378857550470392 -a=wye,b=cat,i=1576,x=0.44849029095061377,y=0.3474789085726283,x2=0.2011435410769662,xy=0.15584091680493978,y2=0.12074159190282498 -a=pan,b=cat,i=1577,x=0.11742715840772,y=0.8533514684924811,x2=0.013789137531711767,xy=0.10020663806812706,y2=0.728208728778274 -a=hat,b=pan,i=1578,x=0.9561812114331917,y=0.6311123886196823,x2=0.914282509097846,xy=0.6034578083008632,y2=0.39830284706924096 -a=hat,b=wye,i=1579,x=0.3893408935248426,y=0.07585593238137323,x2=0.1515863313707228,xy=0.02953381649252389,y2=0.005754122477447467 -a=cat,b=hat,i=1580,x=0.017691921667216448,y=0.5885134221742414,x2=0.0003130040922789228,xy=0.010411933365212163,y2=0.3463480480792369 -a=hat,b=hat,i=1581,x=0.44867319136622774,y=0.781216580590725,x2=0.20130763265075563,xy=0.35051093636185243,y2=0.6102993457898647 -a=cat,b=pan,i=1582,x=0.44447231875949966,y=0.34367821135820475,x2=0.1975556421434463,xy=0.15275545150949868,y2=0.11811471296237486 -a=pan,b=pan,i=1583,x=0.8509473547023161,y=0.04830044716645099,x2=0.7241114004748693,xy=0.04110113774723045,y2=0.0023329331964791235 -a=dog,b=cat,i=1584,x=0.10225562909113295,y=0.9981951134648713,x2=0.010456213680823355,xy=0.10207106928304525,y2=0.9963934845451473 -a=cat,b=wye,i=1585,x=0.28818623525822074,y=0.9549435530526844,x2=0.08305130619230655,xy=0.2752015874383621,y2=0.911917189516885 -a=dog,b=pan,i=1586,x=0.7717108759456307,y=0.8580611734234349,x2=0.5955376760527726,xy=0.6621751397575347,y2=0.7362689773368021 -a=pan,b=dog,i=1587,x=0.4765709177992249,y=0.8517795433900952,x2=0.22711983969199556,xy=0.4059333587560224,y2=0.7255283905378391 -a=cat,b=pan,i=1588,x=0.4469143340193531,y=0.6454699064416178,x2=0.19973242195196192,xy=0.2884697533668898,y2=0.41663140012175087 -a=hat,b=wye,i=1589,x=0.7995256860918732,y=0.21409278194551606,x2=0.6392413227206807,xy=0.17117267837230654,y2=0.04583571928117029 -a=dog,b=hat,i=1590,x=0.09949712510568698,y=0.26672131711357683,x2=0.009899677904296727,xy=0.026538004257203162,y2=0.07114026100280121 -a=cat,b=wye,i=1591,x=0.7720877441185823,y=0.9494920350525312,x2=0.5961194846181214,xy=0.7330911634022707,y2=0.9015351246281972 -a=wye,b=cat,i=1592,x=0.8294711791618263,y=0.25070500876954116,x2=0.6880224370601106,xy=0.2079525792458473,y2=0.06285300142213571 -a=hat,b=cat,i=1593,x=0.1413366958783815,y=0.6479105320354736,x2=0.0199760616018181,xy=0.09157353382269807,y2=0.4197880575224904 -a=cat,b=pan,i=1594,x=0.6930683954666307,y=0.026735216731828326,x2=0.48034380079468997,xy=0.018529333762780875,y2=0.0007147718136978333 -a=wye,b=hat,i=1595,x=0.1949077017171642,y=0.27715582259784965,x2=0.03798901218866706,xy=0.05401980440007696,y2=0.0768153499998907 -a=hat,b=dog,i=1596,x=0.9050627783665586,y=0.8831462196869232,x2=0.8191386327845943,xy=0.7993027712937698,y2=0.7799472453473032 -a=dog,b=pan,i=1597,x=0.9512476936366657,y=0.5147958917805698,x2=0.9048721746490759,xy=0.4896984047498976,y2=0.2650148101941522 -a=dog,b=pan,i=1598,x=0.6201253205268328,y=0.7374258584444923,x2=0.3845554131585071,xy=0.45729644683266557,y2=0.5437968967025963 -a=dog,b=dog,i=1599,x=0.20861740577667076,y=0.3744857984645993,x2=0.0435212219929881,xy=0.07812425577588986,y2=0.14023961325166848 -a=cat,b=cat,i=1600,x=0.9180509487209038,y=0.6961609399227705,x2=0.8428175444473515,xy=0.6391112113585355,y2=0.4846400542741553 -a=hat,b=pan,i=1601,x=0.5668724662094057,y=0.6892431702222551,x2=0.32134439294633377,xy=0.39071297572187896,y2=0.47505614769802457 -a=dog,b=dog,i=1602,x=0.6291540296653728,y=0.2036098512447937,x2=0.3958347930441768,xy=0.1281019583902291,y2=0.041456971523927015 -a=cat,b=hat,i=1603,x=0.9531511923578132,y=0.8297657896193978,x2=0.908497195493121,xy=0.7908922517534515,y2=0.6885112656227028 -a=dog,b=pan,i=1604,x=0.0432946719776931,y=0.3070866737944582,x2=0.0018744286216560442,xy=0.01329521681065191,y2=0.09430222522214397 -a=pan,b=pan,i=1605,x=0.3736137583809874,y=0.1089267696226176,x2=0.13958724045156684,xy=0.04069653978700613,y2=0.011865041140418808 -a=cat,b=wye,i=1606,x=0.6487271855151501,y=0.6932495108666088,x2=0.4208469612264079,xy=0.44972980404424956,y2=0.48059488431679237 -a=hat,b=wye,i=1607,x=0.002825140366817802,y=0.7102085021236773,x2=7.981418092223425e-06,xy=0.002006438708206807,y2=0.5043961164887573 -a=dog,b=hat,i=1608,x=0.43735145990915725,y=0.5122308961341998,x2=0.19127629948467118,xy=0.2240249302348682,y2=0.2623804909544454 -a=cat,b=cat,i=1609,x=0.8704637894619757,y=0.4114224078394778,x2=0.7577072087645027,xy=0.3581283081975223,y2=0.16926839767243362 -a=hat,b=hat,i=1610,x=0.863903018597316,y=0.8955887400885664,x2=0.7463284255415545,xy=0.7737018159842796,y2=0.8020791913734256 -a=dog,b=hat,i=1611,x=0.813479285014705,y=0.556016363747658,x2=0.6617485471480357,xy=0.45230779403792093,y2=0.30915419675516786 -a=pan,b=pan,i=1612,x=0.9828256133628142,y=0.9462282732785905,x2=0.9659461862819918,xy=0.9299773830662672,y2=0.895347945151783 -a=dog,b=pan,i=1613,x=0.997245171384539,y=0.8188847898688517,x2=0.9944979318497786,xy=0.8166289026169553,y2=0.6705722990785534 -a=cat,b=hat,i=1614,x=0.8702296622957021,y=0.9633415388928867,x2=0.7572996651392917,xy=0.8383283820661787,y2=0.928026920556515 -a=dog,b=hat,i=1615,x=0.32938974607166416,y=0.6648535062276374,x2=0.1084976048171554,xy=0.21899592759117706,y2=0.44203018474318306 -a=cat,b=hat,i=1616,x=0.21973398978224268,y=0.9170301108422763,x2=0.04828302626562273,xy=0.2015026850058256,y2=0.8409442241913975 -a=wye,b=cat,i=1617,x=0.3188600305313566,y=0.12797936125166676,x2=0.10167171907045766,xy=0.04080750303608997,y2=0.01637871690638462 -a=dog,b=hat,i=1618,x=0.08169283210276668,y=0.3290482944796531,x2=0.0066737188169708256,xy=0.02688088707462803,y2=0.10827278009996852 -a=cat,b=pan,i=1619,x=0.5474618104169076,y=0.7275509604239726,x2=0.29971443386495805,xy=0.3983063659642679,y2=0.5293304000138449 -a=dog,b=pan,i=1620,x=0.8496579259046118,y=0.5331672214883044,x2=0.7219185910525268,xy=0.4530097555700775,y2=0.28426728606955864 -a=hat,b=cat,i=1621,x=0.5789362482550833,y=0.5721615488209199,x2=0.3351671795436714,xy=0.331245060470201,y2=0.32736883794915383 -a=dog,b=dog,i=1622,x=0.07340446939675682,y=0.053524173914530015,x2=0.005388216127419409,xy=0.003928913586095808,y2=0.0028648371932328554 -a=cat,b=cat,i=1623,x=0.4016965060303803,y=0.07864444010507288,x2=0.16136008295701537,xy=0.03159119680892329,y2=0.006184947959440395 -a=pan,b=dog,i=1624,x=0.10848281944185878,y=0.3423443652351136,x2=0.011768522114054934,xy=0.03713848196073858,y2=0.11719966440823285 -a=wye,b=dog,i=1625,x=0.48963027550697813,y=0.7440099158860606,x2=0.23973780669303932,xy=0.36428978009521545,y2=0.553550754936783 -a=hat,b=pan,i=1626,x=0.09566940342098973,y=0.007673090508222624,x2=0.009152634750928082,xy=0.0007340799913169173,y2=5.8876317947376127e-05 -a=pan,b=cat,i=1627,x=0.23451298640557194,y=0.2681503215077292,x2=0.05499634079285997,xy=0.06288473270239185,y2=0.07190459492469854 -a=cat,b=cat,i=1628,x=0.22742389846337696,y=0.5907743445113182,x2=0.051721629592280396,xy=0.1343562045409101,y2=0.34901432613277766 -a=pan,b=dog,i=1629,x=0.2041361746188951,y=0.08002125587765907,x2=0.041671577788036034,xy=0.0163352330630651,y2=0.006403401392237786 -a=cat,b=wye,i=1630,x=0.6221885986617947,y=0.872101148421837,x2=0.3871186523047278,xy=0.5426113914279245,y2=0.7605604130786868 -a=hat,b=dog,i=1631,x=0.9724844283703676,y=0.888091684129161,x2=0.9457259634228407,xy=0.8636553337808242,y2=0.7887068394193694 -a=hat,b=dog,i=1632,x=0.04113654741104045,y=0.4298748752486753,x2=0.0016922155329007786,xy=0.01768356818648223,y2=0.18479240837006414 -a=wye,b=dog,i=1633,x=0.22240261580881637,y=0.36232016649260135,x2=0.04946292351860398,xy=0.0805809527882404,y2=0.13127590304722636 -a=dog,b=pan,i=1634,x=0.027438300456492648,y=0.8218611481795173,x2=0.0007528603319407646,xy=0.02255047311726762,y2=0.6754557468869544 -a=hat,b=dog,i=1635,x=0.43912761905308106,y=0.8039990824810354,x2=0.19283306581522788,xy=0.3530582028107588,y2=0.6464145246303467 -a=hat,b=pan,i=1636,x=0.8574393079576283,y=0.3981090276084197,x2=0.7352021668308566,xy=0.34135432912424774,y2=0.1584907978633215 -a=dog,b=wye,i=1637,x=0.3936158292210302,y=0.4002525764948093,x2=0.15493342101335922,xy=0.1575457497948582,y2=0.16020212499073316 -a=cat,b=dog,i=1638,x=0.9126998946130102,y=0.06115876060098202,x2=0.8330210976265998,xy=0.05581959435517861,y2=0.003740393998248231 -a=cat,b=dog,i=1639,x=0.2842306037315152,y=0.20461476009403634,x2=0.08078703609758163,xy=0.058157776793907094,y2=0.04186720004834005 -a=dog,b=pan,i=1640,x=0.9071641742095542,y=0.2158698815251211,x2=0.8229468389693024,xy=0.1958294228104508,y2=0.04659980574966982 -a=dog,b=dog,i=1641,x=0.9205768203019893,y=0.7162208455434735,x2=0.8474616820773211,xy=0.6593363086244131,y2=0.5129722995910082 -a=hat,b=wye,i=1642,x=0.07708601630855028,y=0.3677116704903335,x2=0.005942253910322079,xy=0.02834542782826211,y2=0.1352118726147916 -a=hat,b=cat,i=1643,x=0.891086171382202,y=0.45465600270588036,x2=0.7940345648285911,xy=0.40513767674711904,y2=0.20671208079648948 -a=wye,b=hat,i=1644,x=0.9535785952720344,y=0.6545866530193877,x2=0.9093121373609864,xy=0.6241998210700502,y2=0.4284836863111242 -a=hat,b=cat,i=1645,x=0.2146953126698945,y=0.11304072018003597,x2=0.04609407728242376,xy=0.024269312763482875,y2=0.012778204418821191 -a=dog,b=cat,i=1646,x=0.703602800768384,y=0.1788354701674164,x2=0.4950569012491143,xy=0.12582913768652496,y2=0.031982125390000886 -a=cat,b=dog,i=1647,x=0.23644793052741475,y=0.37664599907875307,x2=0.055907623850697155,xy=0.08905716702360172,y2=0.14186220862203205 -a=wye,b=cat,i=1648,x=0.7738923843915508,y=0.9220658594972316,x2=0.5989094226192399,xy=0.7135797465723573,y2=0.8502054492503686 -a=pan,b=wye,i=1649,x=0.3881512739565207,y=0.3166268964167729,x2=0.15066141147407,xy=0.12289913321306972,y2=0.10025259153451782 -a=dog,b=pan,i=1650,x=0.08069176552256929,y=0.20005901085517142,x2=0.0065111610231493025,xy=0.016143114794602637,y2=0.04002360782434959 -a=dog,b=pan,i=1651,x=0.2275129965873679,y=0.5632678749374941,x2=0.051762163616163676,xy=0.12815076210842807,y2=0.3172706989366005 -a=wye,b=dog,i=1652,x=0.5519239750397438,y=0.8099186708035292,x2=0.3046200742236717,xy=0.4470135322487895,y2=0.6559682533161555 -a=dog,b=wye,i=1653,x=0.639889328423366,y=0.2540187912756243,x2=0.4094583526301063,xy=0.16254391375627442,y2=0.0645255463211292 -a=wye,b=dog,i=1654,x=0.8737413102903783,y=0.9886812038724857,x2=0.763423877307947,xy=0.8638516105310142,y2=0.9774905228907477 -a=wye,b=pan,i=1655,x=0.47282261946513027,y=0.3211346348224169,x2=0.22356122947786738,xy=0.1518397192377132,y2=0.10312745368252704 -a=wye,b=dog,i=1656,x=0.14294522345450367,y=0.22926887621937164,x2=0.020433336908457986,xy=0.03277289074234102,y2=0.05256421760289356 -a=wye,b=dog,i=1657,x=0.43048291429852836,y=0.3870314399018282,x2=0.18531553950295412,xy=0.16661042217409475,y2=0.14979333547248244 -a=dog,b=dog,i=1658,x=0.567295665732677,y=0.886177490533436,x2=0.3218243723590812,xy=0.5027246494494786,y2=0.785310544728138 -a=hat,b=hat,i=1659,x=0.17874497185555105,y=0.050992313608872575,x2=0.031949764963641734,xy=0.009114619660867362,y2=0.002600216047185611 -a=wye,b=dog,i=1660,x=0.37405584427544813,y=0.7809699765352812,x2=0.1399177746366183,xy=0.29212638392668155,y2=0.6099141042495178 -a=pan,b=pan,i=1661,x=0.13582576025733262,y=0.7573342859324125,x2=0.018448637149482396,xy=0.10286550515571405,y2=0.5735552206487571 -a=wye,b=wye,i=1662,x=0.747943111650199,y=0.07115853449918319,x2=0.559418898264982,xy=0.05322253571378711,y2=0.005063537032071444 -a=hat,b=pan,i=1663,x=0.3204641843851568,y=0.721857856580675,x2=0.10269729347364376,xy=0.2313295892511435,y2=0.5210787651072464 -a=hat,b=cat,i=1664,x=0.8761516655928389,y=0.9096956097881236,x2=0.7676417411211057,xy=0.7970313236983577,y2=0.827546102467786 -a=wye,b=pan,i=1665,x=0.4048769803504033,y=0.12258576541477295,x2=0.16392536921766088,xy=0.049632154535076176,y2=0.015027269882325745 -a=dog,b=cat,i=1666,x=0.2179285734605032,y=0.31374185530645116,x2=0.047492863130529944,xy=0.0683733149617865,y2=0.09843395177113413 -a=pan,b=hat,i=1667,x=0.8707522639142692,y=0.7726065553597292,x2=0.758209505111825,xy=0.6727489071944893,y2=0.5969208893848263 -a=hat,b=dog,i=1668,x=0.28780883579957106,y=0.3178867299709123,x2=0.08283392596430446,xy=0.09149060966906088,y2=0.10105197309159969 -a=pan,b=wye,i=1669,x=0.5792574059470896,y=0.11568552140933597,x2=0.3355391423445514,xy=0.06701169503720845,y2=0.01338313986374993 -a=hat,b=hat,i=1670,x=0.3227620938680381,y=0.9047964130984939,x2=0.10417536923808024,xy=0.29203398481596027,y2=0.8186565491559005 -a=dog,b=cat,i=1671,x=0.4170283119952225,y=0.9782353863453211,x2=0.17391261300558464,xy=0.4079518519015836,y2=0.9569444710981797 -a=pan,b=cat,i=1672,x=0.6599992419763393,y=0.9741564387006593,x2=0.4355989994093425,xy=0.6429425111088054,y2=0.9489807670619513 -a=wye,b=cat,i=1673,x=0.29187601892586845,y=0.5388057612947819,x2=0.08519161042401392,xy=0.1572644805810427,y2=0.29031164840444945 -a=hat,b=cat,i=1674,x=0.5390394718631818,y=0.8048259724603639,x2=0.29056355222653796,xy=0.43383296713680625,y2=0.6477448459467705 -a=hat,b=wye,i=1675,x=0.048579087927689724,y=0.24652911047462378,x2=0.0023599277838862094,xy=0.011976159334481882,y2=0.06077660231140926 -a=dog,b=dog,i=1676,x=0.048972441564576696,y=0.9218204959234996,x2=0.002398300032795879,xy=0.045143800369642696,y2=0.8497530267046467 -a=pan,b=wye,i=1677,x=0.8723437200679534,y=0.3157472779224004,x2=0.7609835659419958,xy=0.27544015502415675,y2=0.09969634351540557 -a=dog,b=pan,i=1678,x=0.8167222472906894,y=0.986551120263316,x2=0.667035229219554,xy=0.8057382480086027,y2=0.9732831128928039 -a=hat,b=hat,i=1679,x=0.39775090311253436,y=0.9492050319119413,x2=0.1582057809268367,xy=0.37754715868193667,y2=0.9009901926069495 -a=dog,b=hat,i=1680,x=0.9885812365291148,y=0.048768165346359305,x2=0.9772928612174336,xy=0.04821129320136021,y2=0.0023783339512498405 -a=wye,b=wye,i=1681,x=0.062568716830534,y=0.6943753352072064,x2=0.003914844325819548,xy=0.043446173722686825,y2=0.4821571061441203 -a=pan,b=cat,i=1682,x=0.8888030579112071,y=0.04402650833464217,x2=0.7899708757523125,xy=0.0391308952369832,y2=0.0019383334361403161 -a=pan,b=hat,i=1683,x=0.9724493454696065,y=0.6589972933012489,x2=0.9456577295042661,xy=0.6408414865370418,y2=0.43427743257837226 -a=hat,b=hat,i=1684,x=0.4069692594975953,y=0.3986453675645386,x2=0.1656239781760211,xy=0.16223641003988698,y2=0.1589181290806661 -a=dog,b=dog,i=1685,x=0.28322884520031133,y=0.16586598055549973,x2=0.08021857875350191,xy=0.04697803013075148,y2=0.027511523505637413 -a=cat,b=pan,i=1686,x=0.12937859467738544,y=0.9861644534388775,x2=0.01673882076069519,xy=0.12758857110671387,y2=0.9725203292264 -a=hat,b=pan,i=1687,x=0.23287889562740582,y=0.8389347784619275,x2=0.054232580028640176,xy=0.19537020471163605,y2=0.7038115625129634 -a=dog,b=cat,i=1688,x=0.5682955920434908,y=0.5945491777156097,x2=0.3229598799360617,xy=0.337879676948863,y2=0.3534887247223076 -a=pan,b=dog,i=1689,x=0.16105478267120443,y=0.08426726713328936,x2=0.02593864302126889,xy=0.013571646394448246,y2=0.007100972310113149 -a=dog,b=cat,i=1690,x=0.5070153147880428,y=0.5380671284015519,x2=0.25706452942961816,xy=0.2728082744836111,y2=0.28951623466629217 -a=wye,b=dog,i=1691,x=0.30350321074609365,y=0.5933552503916028,x2=0.09211419893318774,xy=0.18008522360690377,y2=0.3520704531672816 -a=dog,b=dog,i=1692,x=0.487796053925177,y=0.031684652993436924,x2=0.23794499022497417,xy=0.015455648700187079,y2=0.0010039172353145114 -a=cat,b=pan,i=1693,x=0.37634611053732825,y=0.4375476097662617,x2=0.1416363949165749,xy=0.1646693411104373,y2=0.19144791081216886 -a=hat,b=cat,i=1694,x=0.9481870673353364,y=0.03227311659127241,x2=0.8990587146619858,xy=0.030600951774449978,y2=0.0010415540545138625 -a=cat,b=dog,i=1695,x=0.1461079052481754,y=0.009273641061726678,x2=0.021347519976009803,xy=0.0013549522695523503,y2=8.600041854174311e-05 -a=cat,b=cat,i=1696,x=0.664622851996795,y=0.6220953625183441,x2=0.44172353539635373,xy=0.41345879405092195,y2=0.38700264006682994 -a=dog,b=wye,i=1697,x=0.7392009908426814,y=0.5100797348391554,x2=0.546418104862802,xy=0.37705144540187585,y2=0.26018133589358305 -a=wye,b=wye,i=1698,x=0.7054910080579193,y=0.1031198321244089,x2=0.4977175624505792,xy=0.07275011431621264,y2=0.010633699777366272 -a=cat,b=wye,i=1699,x=0.6126583948316581,y=0.1966643871428705,x2=0.3753503087577038,xy=0.1204880877475028,y2=0.03867688117028084 -a=cat,b=hat,i=1700,x=0.054997512547894534,y=0.15759987654208285,x2=0.0030247263864558167,xy=0.008667601187669832,y2=0.024837721086079758 -a=cat,b=pan,i=1701,x=0.22975216825718248,y=0.809183481892754,x2=0.052786058818876685,xy=0.18591165948275679,y2=0.654777907368081 -a=dog,b=hat,i=1702,x=0.18418666280139295,y=0.8171870602406262,x2=0.03392472675391403,xy=0.1505149575102018,y2=0.6677946914247167 -a=dog,b=cat,i=1703,x=0.010686095765771508,y=0.05199916348790379,x2=0.00011419264271523976,xy=0.0005556680407717491,y2=0.0027039130034417465 -a=hat,b=wye,i=1704,x=0.01877485223131614,y=0.6375043667215262,x2=0.0003524950763077567,xy=0.01196905028201543,y2=0.4064118175890142 -a=hat,b=dog,i=1705,x=0.12425555965226853,y=0.12056177606993312,x2=0.015439444104498464,xy=0.014980470958241017,y2=0.0145351418491367 -a=dog,b=dog,i=1706,x=0.2106835201181333,y=0.7148544928686459,x2=0.04438754564936788,xy=0.15060806092982934,y2=0.5110169459744889 -a=hat,b=pan,i=1707,x=0.17785992112431714,y=0.5889112469352836,x2=0.03163415154234832,xy=0.1047437079291328,y2=0.3468164567668706 -a=cat,b=dog,i=1708,x=0.8918669744557775,y=0.5287616486231685,x2=0.7954267001249024,xy=0.47158505176579424,y2=0.27958888105469115 -a=cat,b=dog,i=1709,x=0.33807974986782396,y=0.17333156717370213,x2=0.11429791727069041,xy=0.05859989287428314,y2=0.030043832178891613 -a=wye,b=hat,i=1710,x=0.896316605122267,y=0.6483005933840498,x2=0.8033834566179059,xy=0.5810825869607427,y2=0.42029365938211105 -a=cat,b=wye,i=1711,x=0.07951586685765877,y=0.8532530554817359,x2=0.006322773082124916,xy=0.06784715635557624,y2=0.7280407766889183 -a=wye,b=hat,i=1712,x=0.9193212686772694,y=0.09656171635091815,x2=0.8451515950423841,xy=0.0887712395813807,y2=0.009324165064635173 -a=wye,b=cat,i=1713,x=0.5309901853379356,y=0.49148282419851896,x2=0.28195057692521525,xy=0.26097255591158364,y2=0.2415553664821523 -a=dog,b=wye,i=1714,x=0.3713852638032674,y=0.7143118003856945,x2=0.13792701417022254,xy=0.26528487642402804,y2=0.5102413481702524 -a=dog,b=cat,i=1715,x=0.5498980759698163,y=0.5515600622820238,x2=0.3023878939553059,xy=0.30330181703067693,y2=0.30421850230455 -a=pan,b=pan,i=1716,x=0.6417672435229054,y=0.511317231123837,x2=0.41186519485898815,xy=0.3281466499841092,y2=0.26144531084414735 -a=wye,b=pan,i=1717,x=0.356435387400564,y=0.293561640269951,x2=0.12704618539139015,xy=0.104635756975565,y2=0.08617843663798412 -a=hat,b=wye,i=1718,x=0.2471457357935608,y=0.6963887482349558,x2=0.06108101472094056,xy=0.17210950958088492,y2=0.4849572886682486 -a=wye,b=pan,i=1719,x=0.2676134553202123,y=0.41541078011182897,x2=0.07161696146842327,xy=0.11116951424299149,y2=0.17256611623311832 -a=wye,b=cat,i=1720,x=0.4589470991791813,y=0.183923236852081,x2=0.21063243984498528,xy=0.08441103602490807,y2=0.03382775705414669 -a=pan,b=wye,i=1721,x=0.039615501671190545,y=0.14665293148181202,x2=0.001569387972660101,xy=0.005809729452202717,y2=0.02150708231220905 -a=cat,b=dog,i=1722,x=0.8662864366230233,y=0.34394731887733476,x2=0.7504521902770154,xy=0.29795689725628904,y2=0.118299758162907 -a=cat,b=dog,i=1723,x=0.07903078625494464,y=0.24001021107925202,x2=0.0062458651760747465,xy=0.01896819569080851,y2=0.05760490142230711 -a=cat,b=pan,i=1724,x=0.7830526631959221,y=0.7935710543782611,x2=0.6131714733382263,xy=0.6214079275660933,y2=0.6297550183470251 -a=hat,b=hat,i=1725,x=0.9512582065298667,y=0.07219992983142942,x2=0.9048921754904186,xy=0.06868077576302778,y2=0.005212829867663332 -a=cat,b=cat,i=1726,x=0.8058645335096987,y=0.14090201105649103,x2=0.6494176463688043,xy=0.11354793341061754,y2=0.01985337671976352 -a=cat,b=cat,i=1727,x=0.03389485595072095,y=0.21485029038316628,x2=0.0011488612599201233,xy=0.007282319643507987,y2=0.04616064727773087 -a=dog,b=pan,i=1728,x=0.3055709310603073,y=0.7866221380232453,x2=0.09337359390906308,xy=0.24036885910841263,y2=0.6187743880282616 -a=dog,b=hat,i=1729,x=0.265121445235708,y=0.9417304705530022,x2=0.07028938072387053,xy=0.24967294337551532,y2=0.8868562791679789 -a=wye,b=wye,i=1730,x=0.7292610640760363,y=0.9200769530022502,x2=0.5318216995773127,xy=0.6709762977782583,y2=0.846541599445905 -a=pan,b=cat,i=1731,x=0.8513480198069239,y=0.6986139757894256,x2=0.7247934508291705,xy=0.5947636248977698,y2=0.48806148716830816 -a=pan,b=pan,i=1732,x=0.22934256104451933,y=0.27815947814507547,x2=0.052598010306459074,xy=0.06379380709659861,y2=0.07737269528194071 -a=cat,b=dog,i=1733,x=0.4845474085415866,y=0.7667845346413503,x2=0.23478619112436724,xy=0.37154345917023274,y2=0.5879585225651521 -a=wye,b=cat,i=1734,x=0.22892107237211945,y=0.01409474046015502,x2=0.05240485737600115,xy=0.0032265831009453873,y2=0.00019866170863913092 -a=dog,b=hat,i=1735,x=0.33509194011827514,y=0.4721650657233548,x2=0.1122866083322297,xy=0.15821870792931186,y2=0.22293984928953997 -a=hat,b=dog,i=1736,x=0.9876191923044322,y=0.6650527172550228,x2=0.975391669008059,xy=0.6568188274552735,y2=0.4422951167282893 -a=pan,b=cat,i=1737,x=0.21297769770583086,y=0.42402822689699815,x2=0.045359499720076274,xy=0.09030855552680833,y2=0.17979993720541215 -a=wye,b=wye,i=1738,x=0.2212273093526289,y=0.17299483060817533,x2=0.04894152240340377,xy=0.03827118090736044,y2=0.029927211417151278 -a=wye,b=dog,i=1739,x=0.9098658106605109,y=0.4384104189889705,x2=0.8278557934089086,xy=0.39889465127541385,y2=0.19220369547808466 -a=wye,b=cat,i=1740,x=0.9671747170035226,y=0.6012023947001768,x2=0.9354269332108441,xy=0.5814677559559835,y2=0.36144431939322713 -a=pan,b=wye,i=1741,x=0.9550513985898104,y=0.9556429110874218,x2=0.9121231739483529,xy=0.91268809878648,y2=0.913253373511642 -a=cat,b=hat,i=1742,x=0.13073846840344072,y=0.9445862471961136,x2=0.017092547120477468,xy=0.12349375923337375,y2=0.8922431783920375 -a=dog,b=pan,i=1743,x=0.43414820746345273,y=0.7919077935124472,x2=0.18848466604372918,xy=0.343805349029767,y2=0.6271179534257527 -a=pan,b=wye,i=1744,x=0.574874116705401,y=0.690880644329792,x2=0.330480250057815,xy=0.3971694001579475,y2=0.47731606470954857 -a=wye,b=dog,i=1745,x=0.4278747685381553,y=0.13777943630640976,x2=0.18307681755157998,xy=0.05895234441892259,y2=0.018983173068912024 -a=cat,b=wye,i=1746,x=0.6330381557702408,y=0.49246585024445066,x2=0.40073730666098767,xy=0.31174967361857064,y2=0.2425226136569897 -a=dog,b=dog,i=1747,x=0.6022946305721123,y=0.3656813004827404,x2=0.36275882201599724,xy=0.22024788378138171,y2=0.13372281352274826 -a=pan,b=cat,i=1748,x=0.8375798793797348,y=0.10960658652398791,x2=0.701540054341771,xy=0.09180427151998626,y2=0.01201360380944045 -a=dog,b=pan,i=1749,x=0.3303535052740735,y=0.7742389849511115,x2=0.10913343844686729,xy=0.25577256259844033,y2=0.5994460058181276 -a=dog,b=pan,i=1750,x=0.16063950494340218,y=0.8438432319496711,x2=0.02580505054846133,xy=0.13555455903023567,y2=0.7120714001072665 -a=pan,b=dog,i=1751,x=0.33999616836593083,y=0.8343053621609845,x2=0.11559739450351439,xy=0.283660626381885,y2=0.6960654373305715 -a=pan,b=pan,i=1752,x=0.7144541724297309,y=0.6139779382258238,x2=0.5104447645022516,xy=0.43865909974524336,y2=0.3769689086280335 -a=cat,b=pan,i=1753,x=0.6544323239936926,y=0.3643199188569274,x2=0.4282816666877854,xy=0.23842273117473248,y2=0.13272900327591816 -a=pan,b=cat,i=1754,x=0.23201094407326062,y=0.7181868648263479,x2=0.05382907816976566,xy=0.16662721252937618,y2=0.5157923728090988 -a=cat,b=pan,i=1755,x=0.5986068909712109,y=0.9405308418235501,x2=0.3583302099182192,xy=0.5630082430865311,y2=0.8845982644213157 -a=wye,b=hat,i=1756,x=0.9226172663827227,y=0.7237210152066758,x2=0.8512226202275278,xy=0.667717504673712,y2=0.5237721078517814 -a=hat,b=wye,i=1757,x=0.7571687617686531,y=0.9668382924336988,x2=0.5733045337982754,xy=0.7320597527125426,y2=0.9347762837161104 -a=cat,b=hat,i=1758,x=0.03268932597099139,y=0.11108559019828956,x2=0.0010685920324377321,xy=0.0036313130686718535,y2=0.012340008349702326 -a=dog,b=pan,i=1759,x=0.47169323862792967,y=0.64448614816657,x2=0.222494511367305,xy=0.30399975847952915,y2=0.41536239517858203 -a=wye,b=hat,i=1760,x=0.008043623002711664,y=0.1748775174539996,x2=6.469987100975221e-05,xy=0.0014066488220501017,y2=0.030582146110873933 -a=wye,b=cat,i=1761,x=0.6779502269399476,y=0.06420237948280028,x2=0.4596165102079264,xy=0.04352601774044908,y2=0.004121945531253494 -a=dog,b=wye,i=1762,x=0.22556796503914278,y=0.3846235121679249,x2=0.05088090685189994,xy=0.0867587429459268,y2=0.14793524611238987 -a=wye,b=wye,i=1763,x=0.8244848473299208,y=0.1042535818976208,x2=0.6797752634766427,xy=0.08595549855445728,y2=0.010868809338483927 -a=hat,b=wye,i=1764,x=0.2858369419763843,y=0.7808258749653562,x2=0.08170275739841089,xy=0.22318888031613202,y2=0.609689047015414 -a=dog,b=hat,i=1765,x=0.7251456550779655,y=0.7159940591578817,x2=0.5258362210784516,xy=0.5191999810599737,y2=0.5126474927493803 -a=wye,b=wye,i=1766,x=0.8849163471216128,y=0.41271092798688314,x2=0.7830769414030587,xy=0.36521464681132365,y2=0.17033031007979424 -a=wye,b=wye,i=1767,x=0.47496268763755545,y=0.7981581076516883,x2=0.22558955464789007,xy=0.37909531996995116,y2=0.637056364810124 -a=hat,b=dog,i=1768,x=0.9896393441122658,y=0.5323182982465756,x2=0.9793860314149557,xy=0.5268031315356986,y2=0.2833627706481302 -a=cat,b=dog,i=1769,x=0.5164658322137244,y=0.5132175158316351,x2=0.266736955844215,xy=0.2650593114206457,y2=0.2633922185563946 -a=cat,b=cat,i=1770,x=0.9668996720367993,y=0.07518686681810283,x2=0.93489497578487,xy=0.07269815686789813,y2=0.005653064941923132 -a=wye,b=hat,i=1771,x=0.7743375502627112,y=0.7289800273885898,x2=0.5995986417468568,xy=0.5644766085985248,y2=0.5314118803314691 -a=wye,b=dog,i=1772,x=0.9965249307670624,y=0.8078766237661098,x2=0.9930619376402985,xy=0.8050691965668507,y2=0.6526646392277285 -a=dog,b=hat,i=1773,x=0.7116265206221457,y=0.7151885144596509,x2=0.5064123048527812,xy=0.5089471141338425,y2=0.5114946112150023 -a=hat,b=hat,i=1774,x=0.4376901701869539,y=0.3605708398169458,x2=0.19157268507828465,xy=0.15781831224393192,y2=0.1300113305262976 -a=hat,b=cat,i=1775,x=0.3195386981996169,y=0.289186013348143,x2=0.10210497964710584,xy=0.09240612224280265,y2=0.08362855031619233 -a=wye,b=pan,i=1776,x=0.9853873547798295,y=0.5288800665158183,x2=0.9709882389599896,xy=0.5211517297398025,y2=0.2797141247577764 -a=hat,b=dog,i=1777,x=0.27750099924010097,y=0.3780642470021439,x2=0.07700680457925452,xy=0.10491320632005129,y2=0.1429325748612981 -a=wye,b=cat,i=1778,x=0.6611510227584849,y=0.4812147687163354,x2=0.43712067489459067,xy=0.3181556365032929,y2=0.23156765363071616 -a=dog,b=wye,i=1779,x=0.48252312835071653,y=0.49616279916570294,x2=0.23282856939336205,xy=0.23941002602468328,y2=0.24617752327594566 -a=wye,b=hat,i=1780,x=0.29436374758258366,y=0.6450398419304549,x2=0.08665001589086302,xy=0.1898763452107261,y2=0.4160763976776663 -a=wye,b=dog,i=1781,x=0.8174855364721907,y=0.618298166324581,x2=0.6682826023412254,xy=0.5054498081976219,y2=0.38229262248033924 -a=hat,b=dog,i=1782,x=0.5037632655338878,y=0.6824878230175867,x2=0.2537774277013664,xy=0.3438122944104536,y2=0.46578962856728473 -a=dog,b=pan,i=1783,x=0.33081855088472034,y=0.9462338647932917,x2=0.1094409136094663,xy=0.3130317159489652,y2=0.8953585268816495 -a=cat,b=hat,i=1784,x=0.7472029238789469,y=0.02836925274663693,x2=0.5583122094532473,xy=0.021197588600547962,y2=0.000804814501402567 -a=wye,b=cat,i=1785,x=0.49573494524974115,y=0.5302430759087261,x2=0.24575313594176387,xy=0.2628600222046667,y2=0.2811577195491471 -a=hat,b=hat,i=1786,x=0.6603210033010132,y=0.24360853029689966,x2=0.43602382740045664,xy=0.16085982913833405,y2=0.05934511603341548 -a=hat,b=hat,i=1787,x=0.7526385589532756,y=0.044057683484496346,x2=0.5664648004232633,xy=0.03315951140859086,y2=0.0019410794740200622 -a=cat,b=cat,i=1788,x=0.351674868639994,y=0.304405219667928,x2=0.12367521323295702,xy=0.10705166564004709,y2=0.0926625377610795 -a=wye,b=cat,i=1789,x=0.6889201579026637,y=0.09338440873281562,x2=0.4746109839646311,xy=0.06433440160985822,y2=0.008720647794377569 -a=pan,b=pan,i=1790,x=0.016229991240866548,y=0.2376523664051715,x2=0.00026341261567860486,xy=0.003857095825127141,y2=0.056478647257977896 -a=hat,b=hat,i=1791,x=0.39265740728471266,y=0.23109005596489685,x2=0.15417983949555272,xy=0.09073922222445555,y2=0.05340261396585916 -a=pan,b=wye,i=1792,x=0.7579241748695155,y=0.004836136766521948,x2=0.5744490548516359,xy=0.003665424968322274,y2=2.338821882450536e-05 -a=pan,b=cat,i=1793,x=0.42631097946423413,y=0.2953869846632946,x2=0.18174105121175466,xy=0.12592671475279582,y2=0.08725347070847345 -a=dog,b=dog,i=1794,x=0.23033848526517242,y=0.5171140657697146,x2=0.05305581779425405,xy=0.11911127061871082,y2=0.26740695701688477 -a=dog,b=pan,i=1795,x=0.2146743945945675,y=0.7592223385380801,x2=0.04608509569454407,xy=0.1629855958883341,y2=0.5764185593352311 -a=pan,b=dog,i=1796,x=0.5358576113037925,y=0.5220496229435341,x2=0.28714337959220637,xy=0.27974426393256774,y2=0.2725358088154861 -a=dog,b=hat,i=1797,x=0.2972846079571114,y=0.3209019558758809,x2=0.08837813812821343,xy=0.09539921214523152,y2=0.10297806528496581 -a=pan,b=wye,i=1798,x=0.949098867301435,y=0.3285880721086816,x2=0.9007886599128669,xy=0.3118625670471119,y2=0.10797012113210012 -a=cat,b=pan,i=1799,x=0.4169070877203852,y=0.11276362422911823,x2=0.17381151979149295,xy=0.047011954178157546,y2=0.01271563494928578 -a=hat,b=dog,i=1800,x=0.43455436546868176,y=0.2225852015143457,x2=0.18883749654788864,xy=0.09672537100678515,y2=0.04954417193318188 -a=wye,b=hat,i=1801,x=0.02277217074068183,y=0.45059087400220166,x2=0.0005185717602427657,xy=0.01026093231697119,y2=0.20303213573406798 -a=cat,b=wye,i=1802,x=0.7912072275392371,y=0.5518211868607243,x2=0.6260088769103261,xy=0.436604911353485,y2=0.30450662226837844 -a=pan,b=wye,i=1803,x=0.14189506146024844,y=0.8267106493322868,x2=0.020134208466807683,xy=0.11730615839684673,y2=0.6834504977194112 -a=wye,b=dog,i=1804,x=0.46150772541024665,y=0.7699528297226281,x2=0.21298938061333964,xy=0.35533917911847307,y2=0.5928273599978824 -a=hat,b=hat,i=1805,x=0.6543836401812494,y=0.17693895697078177,x2=0.4282179485368629,xy=0.11578595875241363,y2=0.03130739449390816 -a=pan,b=wye,i=1806,x=0.7075778031502546,y=0.27140640944755257,x2=0.5006663475109405,xy=0.19204115095779775,y2=0.07366143908921255 -a=wye,b=dog,i=1807,x=0.7455539798869707,y=0.7941736168162291,x2=0.5558507369253015,xy=0.5920993007385696,y2=0.6307117336469708 -a=cat,b=dog,i=1808,x=0.7700874896297054,y=0.9801151721491236,x2=0.5930347416841817,xy=0.7547744324683051,y2=0.9606257506769061 -a=cat,b=wye,i=1809,x=0.6544385781489724,y=0.5312971566122922,x2=0.4282898525696487,xy=0.3477013557479404,y2=0.2822766686243065 -a=pan,b=dog,i=1810,x=0.5849172939305057,y=0.028816292677288025,x2=0.3421282407389856,xy=0.01685514793390876,y2=0.0008303787236631235 -a=cat,b=pan,i=1811,x=0.08577479332166249,y=0.3954629030828457,x2=0.0073573151693739165,xy=0.03392074877831573,y2=0.15639090771471223 -a=pan,b=pan,i=1812,x=0.5024959150799869,y=0.4791330917679748,x2=0.25250214467207344,xy=0.24076242139305185,y2=0.22956851962713856 -a=pan,b=dog,i=1813,x=0.4274637251967476,y=0.8988706929897433,x2=0.18272523635908053,xy=0.3842346148955777,y2=0.8079685227158614 -a=wye,b=cat,i=1814,x=0.23106677027476674,y=0.9175553062756457,x2=0.053391852325211826,xy=0.21201654116958787,y2=0.841907740074594 -a=dog,b=wye,i=1815,x=0.2091223069008652,y=0.9549106528911347,x2=0.04373213924353965,xy=0.19969311861680544,y2=0.9118543550049732 -a=cat,b=hat,i=1816,x=0.636789060549747,y=0.01752449017649793,x2=0.4055003076358294,xy=0.011159403636105389,y2=0.0003071077559461725 -a=pan,b=pan,i=1817,x=0.38457200000249525,y=0.274983657709687,x2=0.1478956231859192,xy=0.10575101521341591,y2=0.07561601200739831 -a=pan,b=cat,i=1818,x=0.47722507056186736,y=0.3293445715952592,x2=0.2277437679727793,xy=0.15717148641871556,y2=0.10846784683926482 -a=cat,b=dog,i=1819,x=0.5193588839557899,y=0.09317774875313545,x2=0.26973365034380364,xy=0.04839269160194142,y2=0.008682092862702434 -a=dog,b=wye,i=1820,x=0.1673646057996403,y=0.462003081217774,x2=0.028010911274468992,xy=0.07732296356623194,y2=0.2134468470547171 -a=cat,b=dog,i=1821,x=0.2936142514969645,y=0.9052678886360254,x2=0.08620932868212274,xy=0.265799553526104,y2=0.8195099501955272 -a=dog,b=hat,i=1822,x=0.5638370233255022,y=0.9899497757638864,x2=0.31791218887256295,xy=0.5581703348084581,y2=0.980000558534969 -a=pan,b=cat,i=1823,x=0.040153720931592085,y=0.36075389102759503,x2=0.0016123213046521764,xy=0.014485611065308032,y2=0.1301433698915499 -a=wye,b=pan,i=1824,x=0.12093653700249474,y=0.30926776170280323,x2=0.014625645982155778,xy=0.037401772106849786,y2=0.09564654842866188 -a=pan,b=wye,i=1825,x=0.2099831282159229,y=0.35389600563007906,x2=0.04409291413534472,xy=0.07431219032532387,y2=0.12524238280092495 -a=hat,b=wye,i=1826,x=0.9724611126180899,y=0.1454173477404106,x2=0.9456806155544133,xy=0.14141271577761136,y2=0.0211462050238555 -a=hat,b=cat,i=1827,x=0.13365853083503354,y=0.7169278037197248,x2=0.017864602864979613,xy=0.0958235169599657,y2=0.5139854757463882 -a=pan,b=cat,i=1828,x=0.11022518131579606,y=0.7706028655923053,x2=0.012149590596100117,xy=0.08493984058238387,y2=0.5938287764590725 -a=hat,b=dog,i=1829,x=0.48946172894630635,y=0.0784572450203207,x2=0.23957278410310748,xy=0.03840181879601015,y2=0.006155539296178637 -a=cat,b=cat,i=1830,x=0.9280851829589482,y=0.5177457332043888,x2=0.8613421068279442,xy=0.4805121435272099,y2=0.2680606442513501 -a=cat,b=wye,i=1831,x=0.04642027830087225,y=0.6494131546788959,x2=0.0021548422375304312,xy=0.030145939372441748,y2=0.4217374454699956 -a=hat,b=wye,i=1832,x=0.6857514350854769,y=0.36289271210344964,x2=0.470255030721791,xy=0.2488541981070014,y2=0.1316911204977972 -a=dog,b=wye,i=1833,x=0.09500906973160539,y=0.2740836896748564,x2=0.009026723331265056,xy=0.026040436384614125,y2=0.07512186894578299 -a=pan,b=cat,i=1834,x=0.3891034194374777,y=0.41285451787678373,x2=0.15140147101793772,xy=0.16064310463606782,y2=0.17044885293127154 -a=cat,b=hat,i=1835,x=0.8648307282983019,y=0.877800241267602,x2=0.7479321886089713,xy=0.7591486219558854,y2=0.7705332635694604 -a=wye,b=hat,i=1836,x=0.1083201113100416,y=0.8830714691889023,x2=0.011733246514219801,xy=0.09565439983726387,y2=0.7798152196954465 -a=cat,b=pan,i=1837,x=0.5910333246072961,y=0.4700355030879563,x2=0.3493203907963534,xy=0.2778066460735378,y2=0.22093337416314815 -a=wye,b=wye,i=1838,x=0.976156478807367,y=0.4963443661617175,x2=0.9528814711175976,xy=0.4845097687482966,y2=0.2463577298204771 -a=cat,b=cat,i=1839,x=0.5857391367230061,y=0.21042599768926196,x2=0.3430903362890125,xy=0.12325474223058558,y2=0.044279100503521275 -a=cat,b=wye,i=1840,x=0.4625995520167725,y=0.4914487558439634,x2=0.2139983455261186,xy=0.22734397429261768,y2=0.24152187962057955 -a=cat,b=dog,i=1841,x=0.5083785764238301,y=0.17967790520934135,x2=0.2584487769667201,xy=0.09134439766514084,y2=0.032284149620417056 -a=dog,b=hat,i=1842,x=0.08973952346955483,y=0.4080088536410058,x2=0.008053182072542782,xy=0.0366145200971032,y2=0.1664712246494477 -a=dog,b=wye,i=1843,x=0.7413358080887688,y=0.8059568250500672,x2=0.5495787803546278,xy=0.59748465418315,y2=0.6495664038447846 -a=dog,b=dog,i=1844,x=0.135674020550268,y=0.5106329505716233,x2=0.018407439852274544,xy=0.0692796254294984,y2=0.26074601020948185 -a=cat,b=cat,i=1845,x=0.014689676776337035,y=0.316038734586748,x2=0.00021578660379325564,xy=0.004642506859881897,y2=0.09988048175919297 -a=wye,b=cat,i=1846,x=0.8211819138194043,y=0.8866389100790875,x2=0.6743397355840995,xy=0.7280918370454957,y2=0.7861285568662322 -a=wye,b=cat,i=1847,x=0.9385592125942065,y=0.4793262044790002,x2=0.8808933955454569,xy=0.44987602505158003,y2=0.22975361030024433 -a=wye,b=pan,i=1848,x=0.7893143757600549,y=0.6919112149444487,x2=0.6230171837814852,xy=0.5461354687052588,y2=0.47874112936590313 -a=wye,b=cat,i=1849,x=0.12371548179815062,y=0.8684796337803941,x2=0.015305520436548536,xy=0.10744437632502285,y2=0.7542568742913274 -a=dog,b=hat,i=1850,x=0.1473330723141124,y=0.7129239980300203,x2=0.021707034197515476,xy=0.10503728295622311,y2=0.5082606269671084 -a=hat,b=hat,i=1851,x=0.504310464747479,y=0.9695595351812518,x2=0.25432904485381824,xy=0.4889590197876068,y2=0.9400456922608851 -a=wye,b=wye,i=1852,x=0.7141968633631569,y=0.07349430152204495,x2=0.5100771596377718,xy=0.05248939962211059,y2=0.005401412356213258 -a=hat,b=pan,i=1853,x=0.6941633575842103,y=0.15744572867390538,x2=0.48186276701258424,xy=0.10929305565357074,y2=0.02478915747765703 -a=dog,b=cat,i=1854,x=0.5301548545100264,y=0.38765241432256414,x2=0.28106416976054727,xy=0.20551580931563948,y2=0.15027439433011294 -a=hat,b=hat,i=1855,x=0.6719990370772357,y=0.4520550328185472,x2=0.4515827058327321,xy=0.3037805467599819,y2=0.2043537526965778 -a=dog,b=wye,i=1856,x=0.4772555680520256,y=0.6322990566715125,x2=0.22777287723666167,xy=0.30176824547052267,y2=0.3998020970676846 -a=dog,b=wye,i=1857,x=0.7986025159140517,y=0.9080985637180121,x2=0.6377659784242533,xy=0.7252097976831413,y2=0.8246430014267165 -a=dog,b=wye,i=1858,x=0.23880474055835288,y=0.4703603772135009,x2=0.05702770411314223,xy=0.11232428784939907,y2=0.22123888445242684 -a=cat,b=wye,i=1859,x=0.9548889864289271,y=0.42094008659908877,x2=0.9118129764032636,xy=0.40195105263990866,y2=0.17719055650604834 -a=pan,b=dog,i=1860,x=0.5708603602987686,y=0.7716128562092849,x2=0.3258815509604399,xy=0.44048319310679435,y2=0.5953863998674506 -a=dog,b=hat,i=1861,x=0.6081637768881512,y=0.6598151702145101,x2=0.3698631795188609,xy=0.4012756859657548,y2=0.4353560588452029 -a=dog,b=hat,i=1862,x=0.18227050655777366,y=0.21199911021304896,x2=0.03322253756082741,xy=0.03864118520832972,y2=0.044943622731124476 -a=cat,b=cat,i=1863,x=0.5097463310635671,y=0.057005544836321254,x2=0.25984132203276783,xy=0.029058367330594435,y2=0.003249632142085833 -a=wye,b=cat,i=1864,x=0.960170183444857,y=0.6035854062372394,x2=0.9219267811765305,xy=0.5795447102314487,y2=0.36431534262257337 -a=hat,b=pan,i=1865,x=0.9678322067419,y=0.14285458653365724,x2=0.9366991804068958,xy=0.13825926972807118,y2=0.020407432893702164 -a=dog,b=hat,i=1866,x=0.4458172422957142,y=0.721500218126486,x2=0.19875301352815553,xy=0.32165723756090625,y2=0.5205625647565669 -a=wye,b=pan,i=1867,x=0.3324294042337804,y=0.4711395763539047,x2=0.11050930879922619,xy=0.15662064867828424,y2=0.22197250040693678 -a=dog,b=cat,i=1868,x=0.5202033203165165,y=0.9685070508492729,x2=0.2706114944683283,xy=0.5038205836017491,y2=0.9380059075447561 -a=dog,b=dog,i=1869,x=0.04263265911354075,y=0.027874483930962368,x2=0.001817543623091369,xy=0.001188363371394588,y2=0.0007769868544174793 -a=cat,b=dog,i=1870,x=0.6075625460293752,y=0.2590439713720014,x2=0.3691322473376967,xy=0.15738541478033377,y2=0.0671037791041783 -a=pan,b=cat,i=1871,x=0.12168877974431747,y=0.16099253350193754,x2=0.014808159115661008,xy=0.019590984949796927,y2=0.025918595843372482 -a=pan,b=wye,i=1872,x=0.5238972446998524,y=0.005571739317915103,x2=0.27446832300409707,xy=0.002919018876841558,y2=3.104427902680106e-05 -a=hat,b=hat,i=1873,x=0.8435735251414606,y=0.008669283793229066,x2=0.7116162923195903,xy=0.007313178289905976,y2=7.515648148754414e-05 -a=hat,b=wye,i=1874,x=0.3722275553134189,y=0.27490108794464796,x2=0.13855335293460433,xy=0.10232575991863548,y2=0.07557060815315107 -a=dog,b=cat,i=1875,x=0.5274569201354636,y=0.30887322350847013,x2=0.2782108025987889,xy=0.16291731918409033,y2=0.09540266820051334 -a=pan,b=wye,i=1876,x=0.9908531016291003,y=0.318873165751998,x2=0.9817898690080082,xy=0.3159564653116574,y2=0.10168009583670118 -a=wye,b=cat,i=1877,x=0.4985270079406078,y=0.859770421815565,x2=0.24852917764621482,xy=0.42861877590354786,y2=0.7392051782289145 -a=wye,b=cat,i=1878,x=0.76078545836753,y=0.5617936421705944,x2=0.5787945136634927,xy=0.42740443356671975,y2=0.3156120963833018 -a=wye,b=hat,i=1879,x=0.12661485498555325,y=0.7714852316975519,x2=0.016031321503012678,xy=0.09768149073488148,y2=0.5951894627274253 -a=pan,b=cat,i=1880,x=0.6473054872084413,y=0.2763324345662559,x2=0.4190043937701575,xy=0.178871501188405,y2=0.0763596143933141 -a=hat,b=hat,i=1881,x=0.7028567609419808,y=0.8559547631237583,x2=0.49400762640185275,xy=0.6016135923220252,y2=0.7326585565142492 -a=wye,b=pan,i=1882,x=0.7039035324291367,y=0.5825785397127933,x2=0.4954801829662167,xy=0.4100790920212433,y2=0.3393977549338906 -a=hat,b=wye,i=1883,x=0.4354395504414025,y=0.4313558991052089,x2=0.1896076020886107,xy=0.18782941878661913,y2=0.18606791169286316 -a=wye,b=hat,i=1884,x=0.4680423469534515,y=0.4600259999648787,x2=0.21906363854169505,xy=0.2153116486831702,y2=0.21162392064368657 -a=cat,b=cat,i=1885,x=0.5621276986405592,y=0.07370622847695374,x2=0.3159875495789314,xy=0.04143231258922526,y2=0.005432608116296906 -a=wye,b=cat,i=1886,x=0.05295361060059567,y=0.2703073644974977,x2=0.002804084875639518,xy=0.014313750922073772,y2=0.07306607130158309 -a=cat,b=wye,i=1887,x=0.4956315475738545,y=0.6284563971450301,x2=0.24565063095045403,xy=0.3114828166996802,y2=0.3949574431125118 -a=hat,b=pan,i=1888,x=0.7225838421443049,y=0.2568173469958308,x2=0.5221274089280258,xy=0.1855720653215546,y2=0.06595514971797697 -a=cat,b=cat,i=1889,x=0.5249774787875754,y=0.7999289864413597,x2=0.2756013532341592,xy=0.41994470251108557,y2=0.639886383349101 -a=wye,b=hat,i=1890,x=0.5932896697959987,y=0.5666936479678745,x2=0.35199263228664524,xy=0.3362134872783502,y2=0.3211416906471372 -a=pan,b=dog,i=1891,x=0.6936886019849191,y=0.9085575716131387,x2=0.48120387652379154,xy=0.6302560316751312,y2=0.8254768609355636 -a=hat,b=pan,i=1892,x=0.6278789321927271,y=0.9614314343646176,x2=0.39423195349147916,xy=0.6036625423853781,y2=0.9243504029844061 -a=pan,b=wye,i=1893,x=0.5068215741396227,y=0.09461873694597445,x2=0.25686810801336507,xy=0.04795481720206164,y2=0.00895270538125151 -a=hat,b=dog,i=1894,x=0.9970136511026203,y=0.2054109087831395,x2=0.9940362204849775,xy=0.2047974801421852,y2=0.04219364144711526 -a=dog,b=hat,i=1895,x=0.45154718754362844,y=0.19803710821245812,x2=0.20389486257856076,xy=0.08942309924260866,y2=0.03921869622915285 -a=dog,b=pan,i=1896,x=0.45178612360197967,y=0.21143170418181334,x2=0.20411070147930324,xy=0.09552191003886193,y2=0.044703365533225826 -a=dog,b=cat,i=1897,x=0.8284592168198257,y=0.37414538945545384,x2=0.686344673933719,xy=0.309964196325014,y2=0.13998477245077323 -a=pan,b=cat,i=1898,x=0.6578753840992824,y=0.5606141231298089,x2=0.4328000210037783,xy=0.36881423158550536,y2=0.31428819505260447 -a=dog,b=cat,i=1899,x=0.5578615396986291,y=0.24893276783730456,x2=0.3112094974749251,xy=0.1388700171471601,y2=0.06196752290314137 -a=pan,b=pan,i=1900,x=0.1999163967434261,y=0.23106421121292509,x2=0.03996656568687495,xy=0.04619352452204994,y2=0.05339066970345126 -a=wye,b=pan,i=1901,x=0.7221043028648414,y=0.9545189972805478,x2=0.5214346242159186,xy=0.6892622751025174,y2=0.9111065161694624 -a=cat,b=wye,i=1902,x=0.7857344089281942,y=0.39748580921982657,x2=0.6173785613737388,xy=0.3123182773646854,y2=0.15799496853114037 -a=dog,b=cat,i=1903,x=0.4377556052325614,y=0.9205889212151315,x2=0.19162996991252615,xy=0.4029929603769207,y2=0.8474839618640395 -a=dog,b=wye,i=1904,x=0.6364594734271972,y=0.9988277206721594,x2=0.4050806613152252,xy=0.6357133651434902,y2=0.9976568155831413 -a=cat,b=wye,i=1905,x=0.7494980960150721,y=0.3233057611615623,x2=0.5617473959302183,xy=0.2423170524212946,y2=0.10452661520025716 -a=pan,b=dog,i=1906,x=0.3596467807923023,y=0.03607296469435961,x2=0.12934580693426634,xy=0.01297352562596081,y2=0.0013012587818405149 -a=pan,b=dog,i=1907,x=0.4534172862657031,y=0.45625122636763116,x2=0.20558723548455454,xy=0.20687219291501033,y2=0.20816518156196742 -a=dog,b=dog,i=1908,x=0.3941709634584213,y=0.6681118838539379,x2=0.1553707484337401,xy=0.26335030495672757,y2=0.44637348934685783 -a=pan,b=cat,i=1909,x=0.18925668401877693,y=0.31859001901289064,x2=0.03581809244578318,xy=0.06029529055985878,y2=0.10149960021463401 -a=wye,b=dog,i=1910,x=0.8598761609531259,y=0.8564524122457609,x2=0.7393870121754861,xy=0.7364430122809288,y2=0.7335107344415827 -a=hat,b=dog,i=1911,x=0.2951437397116916,y=0.30801314344950215,x2=0.08710982709100276,xy=0.09090815103803979,y2=0.09487209653764359 -a=dog,b=cat,i=1912,x=0.46852111498594173,y=0.42442338462650697,x2=0.21951203518767004,xy=0.19885131739131826,y2=0.18013520941781988 -a=dog,b=pan,i=1913,x=0.857345461986018,y=0.32535406406240897,x2=0.7350412411880187,xy=0.2789408303626145,y2=0.10585526700192611 -a=hat,b=hat,i=1914,x=0.35674542509750684,y=0.5640334157488235,x2=0.12726729832800088,xy=0.20121634067051283,y2=0.31813369408128517 -a=wye,b=hat,i=1915,x=0.3201029255847997,y=0.7641268225779082,x2=0.10246588296794781,xy=0.2445992314250056,y2=0.58388980098301 -a=hat,b=hat,i=1916,x=0.26849889363278556,y=0.5960659506515633,x2=0.0720916558820299,xy=0.1600430482821193,y2=0.35529461752615193 -a=hat,b=cat,i=1917,x=0.15341962994596148,y=0.6464271573257129,x2=0.02353758285275576,xy=0.09917461526393069,y2=0.41786806972820195 -a=cat,b=hat,i=1918,x=0.2059147752091829,y=0.15303076691478756,x2=0.042400894649448316,xy=0.03151129596934734,y2=0.02341841562252804 -a=dog,b=cat,i=1919,x=0.6520094436702853,y=0.9006621596644201,x2=0.425116314635235,xy=0.5872402336576763,y2=0.8111923258513773 -a=cat,b=cat,i=1920,x=0.4943396218474403,y=0.9469147048476291,x2=0.24437166172827027,xy=0.46809745711615747,y2=0.8966474582566725 -a=dog,b=pan,i=1921,x=0.430692526311669,y=0.6280723581906466,x2=0.18549605222072768,xy=0.270506070655657,y2=0.3944748871231598 -a=cat,b=pan,i=1922,x=0.830265632162649,y=0.20797913700668036,x2=0.6893410199504433,xy=0.17267792966349366,y2=0.04325532143004352 -a=dog,b=cat,i=1923,x=0.9476536672136628,y=0.20591241384973957,x2=0.8980474729835036,xy=0.19513365410952313,y2=0.04239992217742642 -a=pan,b=cat,i=1924,x=0.5457406649999199,y=0.999319317626043,x2=0.29783287343455483,xy=0.5453691889485028,y2=0.9986390985805802 -a=cat,b=dog,i=1925,x=0.8347298456786796,y=0.5148043426639031,x2=0.6967739152667523,xy=0.4297225495065539,y2=0.26502351122561335 -a=wye,b=wye,i=1926,x=0.1790291945225012,y=0.7077818317950146,x2=0.03205145249137558,xy=0.12671361124392191,y2=0.5009551214191064 -a=wye,b=wye,i=1927,x=0.36165393273394675,y=0.18598534813927592,x2=0.13079356706193007,xy=0.06726233258546137,y2=0.034590549722487665 -a=cat,b=hat,i=1928,x=0.44912201651560346,y=0.5921420879161559,x2=0.201710585719042,xy=0.26594404858866366,y2=0.35063225228170447 -a=dog,b=dog,i=1929,x=0.2542943701307576,y=0.5561419469051366,x2=0.06466562668019875,xy=0.14142376609153495,y2=0.3092938651074358 -a=hat,b=hat,i=1930,x=0.4145256779871679,y=0.43548570839091383,x2=0.1718315377107212,xy=0.18052000852446565,y2=0.18964780221273603 -a=hat,b=cat,i=1931,x=0.1771081870965595,y=0.03921409808618914,x2=0.03136730993662993,xy=0.006945137820671623,y2=0.0015377454887132629 -a=hat,b=hat,i=1932,x=0.5637566075428295,y=0.8513241017800217,x2=0.3178215125481999,xy=0.47993958753895155,y2=0.7247527262715607 -a=hat,b=hat,i=1933,x=0.5978661283989376,y=0.6146801264132213,x2=0.35744390748673494,xy=0.3674964273824422,y2=0.37783165780737377 -a=wye,b=wye,i=1934,x=0.0594028946154872,y=0.2812140461609792,x2=0.0035287038886986782,xy=0.016704928348495404,y2=0.07908133975822935 -a=pan,b=wye,i=1935,x=0.8031983433337532,y=0.6001926367446158,x2=0.6451275787340857,xy=0.4820737315143925,y2=0.3602312012024543 -a=cat,b=cat,i=1936,x=0.9452450634561056,y=0.8383363244626086,x2=0.893488229988137,xy=0.7924332722142168,y2=0.7028077929134763 -a=dog,b=dog,i=1937,x=0.5719613387155258,y=0.44354432565419655,x2=0.3271397729852564,xy=0.2536902062808494,y2=0.19673156882003595 -a=pan,b=pan,i=1938,x=0.6891389849896078,y=0.835439567532576,x2=0.4749125406325069,xy=0.5757339755895563,y2=0.6979592709990176 -a=pan,b=dog,i=1939,x=0.09114806381008289,y=0.2555433546853909,x2=0.008307969536326943,xy=0.023292281999106657,y2=0.0653024061238635 -a=hat,b=dog,i=1940,x=0.5236878163188348,y=0.1477355232703238,x2=0.2742489289607896,xy=0.07736729357415627,y2=0.021825784835956385 -a=dog,b=dog,i=1941,x=0.05667870325475044,y=0.09362041882224037,x2=0.0032124754026400582,xy=0.0053062839370112145,y2=0.008764782820451698 -a=wye,b=dog,i=1942,x=0.1950731031569587,y=0.4354796173007899,x2=0.03805351557528545,xy=0.08495036030846988,y2=0.18964249708444242 -a=pan,b=cat,i=1943,x=0.9997301774748071,y=0.8408385083267972,x2=0.9994604277538093,xy=0.8406116311572011,y2=0.7070093970852334 -a=cat,b=pan,i=1944,x=0.5200891211928741,y=0.5027071845601069,x2=0.2704926939831761,xy=0.26145253783520994,y2=0.2527145134083494 -a=cat,b=wye,i=1945,x=0.28650709092005766,y=0.29700166356358126,x2=0.0820863131474742,xy=0.08509308262601935,y2=0.08820998815953471 -a=dog,b=pan,i=1946,x=0.1928207092593428,y=0.2931434667127827,x2=0.03717982591927601,xy=0.056524131166301304,y2=0.08593309207638833 -a=pan,b=dog,i=1947,x=0.6191864723715613,y=0.6597169323541499,x2=0.3833918875679383,xy=0.408487800108154,y2=0.4352264308347699 -a=hat,b=cat,i=1948,x=0.06105819430380832,y=0.2216297398784508,x2=0.003728103091641611,xy=0.013532311721000945,y2=0.04911974159858977 -a=wye,b=cat,i=1949,x=0.39006512687798656,y=0.7411698261501961,x2=0.15215080320633975,xy=0.28910450227541146,y2=0.549332711195512 -a=dog,b=hat,i=1950,x=0.5647214293253914,y=0.775378992255826,x2=0.318910292739313,xy=0.4378731327755916,y2=0.6012125816316602 -a=dog,b=hat,i=1951,x=0.5079065817824603,y=0.973907719639408,x2=0.25796909581794303,xy=0.4946541408536024,y2=0.9484962463732318 -a=wye,b=pan,i=1952,x=0.637860906606702,y=0.9633937557590291,x2=0.40686653617712387,xy=0.61451121446769,y2=0.9281275286354878 -a=dog,b=wye,i=1953,x=0.08307786246752591,y=0.02792209445052518,x2=0.0069019312321731505,xy=0.0023197079225659996,y2=0.0007796433585040491 -a=dog,b=cat,i=1954,x=0.41753539608338086,y=0.2160002459363365,x2=0.17433580698250573,xy=0.09018774824113593,y2=0.04665610624455785 -a=wye,b=wye,i=1955,x=0.5512559258404929,y=0.205687403628523,x2=0.303883095774259,xy=0.11338640012096861,y2=0.04230730801144294 -a=hat,b=pan,i=1956,x=0.5587500096459429,y=0.4137374102923569,x2=0.3122015732793413,xy=0.23117578199174185,y2=0.17117864467542607 -a=pan,b=cat,i=1957,x=0.754814481507741,y=0.13735538214099252,x2=0.5697449014937999,xy=0.1036778315530509,y2=0.01886650100309809 -a=hat,b=dog,i=1958,x=0.346044502438559,y=0.7524672264370861,x2=0.11974679766794986,xy=0.26038714697374393,y2=0.566206926861921 -a=hat,b=pan,i=1959,x=0.6704008281574495,y=0.9030997339750632,x2=0.4494372703941941,xy=0.6054388095656547,y2=0.8155891295058298 -a=pan,b=wye,i=1960,x=0.424121628516242,y=0.4700100410762793,x2=0.1798791557752692,xy=0.1993414240402574,y2=0.22090943871252575 -a=dog,b=cat,i=1961,x=0.26082501706717964,y=0.5271575259299263,x2=0.06802968952809456,xy=0.1374958706977652,y2=0.27789505714456086 -a=cat,b=wye,i=1962,x=0.4004204247150758,y=0.45948897969094016,x2=0.16033651652900166,xy=0.1839887723997431,y2=0.21113012245742122 -a=dog,b=pan,i=1963,x=0.566258344848614,y=0.7590416956530732,x2=0.32064851311069187,xy=0.42981369425159466,y2=0.5761442957398927 -a=hat,b=wye,i=1964,x=0.543750094243006,y=0.4080083600528972,x2=0.29566416498927794,xy=0.22185458423069718,y2=0.1664708218730546 -a=hat,b=dog,i=1965,x=0.13957352000394396,y=0.7345129593607466,x2=0.019480767486291347,xy=0.10251855922649324,y2=0.5395092874688817 -a=dog,b=cat,i=1966,x=0.7217547939582643,y=0.1467544702092567,x2=0.5209299826017365,xy=0.1059207424083363,y2=0.02153687452639961 -a=cat,b=wye,i=1967,x=0.9123342559478345,y=0.09180218863804412,x2=0.8323537945758888,xy=0.08375428146547273,y2=0.008427641838735038 -a=pan,b=wye,i=1968,x=0.9571434219694788,y=0.7679577339312599,x2=0.9161235302194437,xy=0.7350456933828926,y2=0.5897590811048358 -a=cat,b=pan,i=1969,x=0.545058440887102,y=0.2632010695311473,x2=0.29708870398227843,xy=0.14345996459846486,y2=0.06927480300233983 -a=pan,b=pan,i=1970,x=0.7397159384861364,y=0.1167771663731686,x2=0.5471796696504255,xy=0.0863819312174801,y2=0.013636906586146698 -a=cat,b=hat,i=1971,x=0.9726274282842899,y=0.621723092207134,x2=0.9460041142509116,xy=0.6047049322783812,y2=0.3865396033836004 -a=pan,b=hat,i=1972,x=0.9551191389894814,y=0.554583451306824,x2=0.9122525696640084,xy=0.5296932685099887,y2=0.3075628044633884 -a=dog,b=dog,i=1973,x=0.20712014040863647,y=0.1490765678592062,x2=0.042898752562893286,xy=0.03087675966663641,y2=0.02222382308468051 -a=hat,b=cat,i=1974,x=0.3485984155594296,y=0.8706537631090331,x2=0.12152085533054477,xy=0.3035085223206639,y2=0.7580379752159203 -a=dog,b=dog,i=1975,x=0.8553530567509867,y=0.044355818311703654,x2=0.7316288516932568,xy=0.03793988477760711,y2=0.0019674386181008654 -a=dog,b=hat,i=1976,x=0.02157953697752668,y=0.4995753400915781,x2=0.0004656764161644414,xy=0.010780604524566677,y2=0.24957552042761594 -a=pan,b=dog,i=1977,x=0.002345497877634606,y=0.33024301683227086,x2=5.50136029398844e-06,xy=0.0007745842950837407,y2=0.10906045016647954 -a=hat,b=dog,i=1978,x=0.4143609240891579,y=0.9913997989414325,x2=0.1716949754120209,xy=0.4107973368311773,y2=0.9828735613411128 -a=dog,b=pan,i=1979,x=0.25986284555401273,y=0.5432073452922572,x2=0.06752869849942868,xy=0.1411594064734871,y2=0.2950742199794616 -a=hat,b=wye,i=1980,x=0.03283655272761554,y=0.1853095711969286,x2=0.0010782391950334756,xy=0.006084927505539772,y2=0.03433963717718955 -a=dog,b=pan,i=1981,x=0.9300610248275437,y=0.43854544233750237,x2=0.8650135099032609,xy=0.4078740235338659,y2=0.1923221049949956 -a=hat,b=dog,i=1982,x=0.45684863357423755,y=0.4017729244389676,x2=0.20871067399864796,xy=0.18354941153706775,y2=0.1614214828122404 -a=hat,b=dog,i=1983,x=0.6601665924719262,y=0.25346104542215886,x2=0.4358199298159943,xy=0.16732651468071874,y2=0.06424250154649368 -a=wye,b=dog,i=1984,x=0.39291855423695565,y=0.06200108158497475,x2=0.15438499026365946,xy=0.024361375337495814,y2=0.003844134117706695 -a=pan,b=wye,i=1985,x=0.4085531920151485,y=0.7697975606046983,x2=0.1669157107057668,xy=0.3145032505905242,y2=0.5925882843129441 -a=cat,b=hat,i=1986,x=0.19941490783677196,y=0.2304215691718211,x2=0.03976630546754825,xy=0.04594949598000308,y2=0.05309409953960434 -a=dog,b=dog,i=1987,x=0.9512236571317361,y=0.08232357605490426,x2=0.9048264458870746,xy=0.07830813308310865,y2=0.0067771711744676055 -a=hat,b=cat,i=1988,x=0.3795926086837851,y=0.5503100589330622,x2=0.1440905485673612,xy=0.20889363085532858,y2=0.30284116096291036 -a=hat,b=cat,i=1989,x=0.43724725835821965,y=0.9686657648338483,x2=0.19118516494177967,xy=0.4235464499390681,y2=0.9383133639611442 -a=dog,b=hat,i=1990,x=0.9644509448856519,y=0.6570664073250574,x2=0.9301656250908267,xy=0.6337083173972722,y2=0.43173626363505824 -a=cat,b=pan,i=1991,x=0.9518161607677816,y=0.9663159136351449,x2=0.9059540038987195,xy=0.9197551030050148,y2=0.9337664449445249 -a=dog,b=hat,i=1992,x=0.32417090539430016,y=0.6595975315610155,x2=0.10508677590416031,xy=0.21382232900197987,y2=0.4350689036413849 -a=hat,b=cat,i=1993,x=0.9679659795942246,y=0.3623190225967923,x2=0.9369581376518068,xy=0.350712487633526,y2=0.13127507413549486 -a=wye,b=hat,i=1994,x=0.9584661091937297,y=0.7356419740173126,x2=0.9186572824729665,xy=0.7050879005959684,y2=0.5411691139360884 -a=wye,b=pan,i=1995,x=0.0918788372083641,y=0.3995465991850543,x2=0.008441720726761071,xy=0.0367098769436791,y2=0.15963748492034244 -a=cat,b=wye,i=1996,x=0.19549812467393535,y=0.9499072727966543,x2=0.03821951675102557,xy=0.18570509044587824,y2=0.9023238269119774 -a=cat,b=hat,i=1997,x=0.7643927480995454,y=0.17816043420320515,x2=0.584296273347175,xy=0.13618454390319623,y2=0.03174114031547459 -a=dog,b=wye,i=1998,x=0.544898947312341,y=0.9687310115367199,x2=0.2969148627820974,xy=0.527860508415178,y2=0.9384397727129565 -a=hat,b=dog,i=1999,x=0.010819574860139292,y=0.8983779455002124,x2=0.00011706320015415817,xy=0.009720067434037685,y2=0.8070829329611827 -a=wye,b=cat,i=2000,x=0.10887569736363611,y=0.3480524315645718,x2=0.01185391747641808,xy=0.037894451205701986,y2=0.12114049511801092 diff --git a/c/reg_test/input/abixy-wide-short b/c/reg_test/input/abixy-wide-short deleted file mode 100644 index a8d41ca4f..000000000 --- a/c/reg_test/input/abixy-wide-short +++ /dev/null @@ -1,20 +0,0 @@ -a=cat,b=pan,i=1,x=0.5117389009583777,y=0.08295224980036853,x2=0.2618767027540883,xy=0.0424498931448654,y2=0.006881075746942741 -a=pan,b=wye,i=2,x=0.5225940442098578,y=0.511678736087022,x2=0.27310453504361476,xy=0.2674002600279053,y2=0.26181512896361225 -a=wye,b=cat,i=3,x=0.8150401717873625,y=0.07989551500795256,x2=0.6642904816271734,xy=0.06511805427712146,y2=0.006383293318385972 -a=dog,b=hat,i=4,x=0.4488733555675044,y=0.5730530513123552,x2=0.20148728933843124,xy=0.25722824606077416,y2=0.32838979961840076 -a=dog,b=pan,i=5,x=0.2946557960430134,y=0.6850437256584863,x2=0.08682203814174191,xy=0.20185210430817294,y2=0.46928490606405937 -a=wye,b=cat,i=6,x=0.048709182664292916,y=0.5851879044762575,x2=0.0023725844758234536,xy=0.02850402453206882,y2=0.34244488354531344 -a=dog,b=hat,i=7,x=0.8500003149528544,y=0.2984098741712895,x2=0.7225005354199517,xy=0.25364848703063775,y2=0.08904845300292483 -a=pan,b=pan,i=8,x=0.616507208914765,y=0.25924335982487057,x2=0.38008113864387366,xy=0.15982540019531707,y2=0.06720711961328732 -a=hat,b=hat,i=9,x=0.33786884067769307,y=0.6036735617015514,x2=0.11415535350088835,xy=0.203962486439877,y2=0.3644217690974368 -a=wye,b=hat,i=10,x=0.3834648944206174,y=0.4999709279216641,x2=0.14704532525301522,xy=0.19172129908885902,y2=0.24997092876684981 -a=pan,b=hat,i=11,x=0.025474999754416028,y=0.7861954915044592,x2=0.0006489756124874967,xy=0.020028329952999087,y2=0.6181033508619382 -a=cat,b=hat,i=12,x=0.6335445699880142,y=0.15467178563525052,x2=0.4013787221612979,xy=0.0979914699195631,y2=0.02392336127159689 -a=hat,b=wye,i=13,x=0.35922068401384877,y=0.8502678133887914,x2=0.1290394998233774,xy=0.30543378552048117,y2=0.7229553544849566 -a=dog,b=dog,i=14,x=0.5440047442770544,y=0.933608851612059,x2=0.2959411617959433,xy=0.5078876445760125,y2=0.8716254878083876 -a=wye,b=dog,i=15,x=0.4689175303764642,y=0.09048353045392021,x2=0.21988365029436224,xy=0.04242931364019586,y2=0.008187269283405506 -a=pan,b=pan,i=16,x=0.3959177828066379,y=0.6339858483805666,x2=0.15675089074252413,xy=0.25100627142161924,y2=0.4019380559468268 -a=dog,b=hat,i=17,x=0.34033844788864975,y=0.8845934733681523,x2=0.11583025911125516,xy=0.3010611697385466,y2=0.782505613125532 -a=wye,b=wye,i=18,x=0.6770613653962891,y=0.896307226056897,x2=0.4584120925122874,xy=0.6068549942886431,y2=0.8033666434818095 -a=dog,b=wye,i=19,x=0.4865373244199632,y=0.44117766146315884,x2=0.23671856805373653,xy=0.2146493990021416,y2=0.1946377289741016 -a=dog,b=dog,i=20,x=0.3223311725542929,y=0.08115611029827985,x2=0.10389738480022534,xy=0.026159144192390068,y2=0.006586314238746564 diff --git a/c/reg_test/input/abixy.csv b/c/reg_test/input/abixy.csv deleted file mode 100644 index 9e6d97092..000000000 --- a/c/reg_test/input/abixy.csv +++ /dev/null @@ -1,11 +0,0 @@ -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 diff --git a/c/reg_test/input/abixy.dkvp b/c/reg_test/input/abixy.dkvp deleted file mode 100644 index 547de9e99..000000000 --- a/c/reg_test/input/abixy.dkvp +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/abixy.json b/c/reg_test/input/abixy.json deleted file mode 100644 index 3bba0e8d7..000000000 --- a/c/reg_test/input/abixy.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } diff --git a/c/reg_test/input/abixy.md b/c/reg_test/input/abixy.md deleted file mode 100644 index 37253beb2..000000000 --- a/c/reg_test/input/abixy.md +++ /dev/null @@ -1,12 +0,0 @@ -| a | b | i | x | y | -| --- | --- | --- | --- | --- | -| pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -| eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -| wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -| eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -| wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | -| zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | -| eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | -| zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | -| hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | -| pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | diff --git a/c/reg_test/input/abixy.nidx b/c/reg_test/input/abixy.nidx deleted file mode 100644 index 61eea58e5..000000000 --- a/c/reg_test/input/abixy.nidx +++ /dev/null @@ -1,10 +0,0 @@ -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 diff --git a/c/reg_test/input/abixy.pprint b/c/reg_test/input/abixy.pprint deleted file mode 100644 index c894dcf82..000000000 --- a/c/reg_test/input/abixy.pprint +++ /dev/null @@ -1,11 +0,0 @@ -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 diff --git a/c/reg_test/input/abixy.tsv b/c/reg_test/input/abixy.tsv deleted file mode 100644 index c57882025..000000000 --- a/c/reg_test/input/abixy.tsv +++ /dev/null @@ -1,11 +0,0 @@ -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 diff --git a/c/reg_test/input/abixy.xtab b/c/reg_test/input/abixy.xtab deleted file mode 100644 index 0bb84975a..000000000 --- a/c/reg_test/input/abixy.xtab +++ /dev/null @@ -1,59 +0,0 @@ -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 diff --git a/c/reg_test/input/absent.dkvp b/c/reg_test/input/absent.dkvp deleted file mode 100644 index 867885108..000000000 --- a/c/reg_test/input/absent.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -a=1,b=2 -a=,b=4 -x=,b=6 -a=7,b=8 diff --git a/c/reg_test/input/arrays.json b/c/reg_test/input/arrays.json deleted file mode 100644 index 22713b007..000000000 --- a/c/reg_test/input/arrays.json +++ /dev/null @@ -1,6 +0,0 @@ -{"a":1,"b":1} -{"a":2,"b":[2,3]} -{"a":3,"b":{"c":[4,5]}} -{"a":4,"b":{"c":{"d":[4,5]}}} -{"a":5,"b":[6,7,[8,9]]} -{"a":6,"b":[[[11]]]} diff --git a/c/reg_test/input/b.csv b/c/reg_test/input/b.csv deleted file mode 100644 index a04a43394..000000000 --- a/c/reg_test/input/b.csv +++ /dev/null @@ -1,2 +0,0 @@ -d,e,f -5,6,7 diff --git a/c/reg_test/input/b.pprint b/c/reg_test/input/b.pprint deleted file mode 100644 index 550924d01..000000000 --- a/c/reg_test/input/b.pprint +++ /dev/null @@ -1,2 +0,0 @@ -d e f -5 6 7 diff --git a/c/reg_test/input/bom-dquote-header.csv b/c/reg_test/input/bom-dquote-header.csv deleted file mode 100644 index 3906fe84f..000000000 --- a/c/reg_test/input/bom-dquote-header.csv +++ /dev/null @@ -1,3 +0,0 @@ -"a","b","c" -1,2,3 -4,5,6 diff --git a/c/reg_test/input/bom.csv b/c/reg_test/input/bom.csv deleted file mode 100644 index cd08dcc9b..000000000 --- a/c/reg_test/input/bom.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -1,2,3 -4,5,6 diff --git a/c/reg_test/input/braced.csv b/c/reg_test/input/braced.csv deleted file mode 100644 index 4ec74aff0..000000000 --- a/c/reg_test/input/braced.csv +++ /dev/null @@ -1,3 +0,0 @@ -name.x,name.y,z -1,2,3 -4,6,5 diff --git a/c/reg_test/input/c.csv b/c/reg_test/input/c.csv deleted file mode 100644 index 0748974a9..000000000 --- a/c/reg_test/input/c.csv +++ /dev/null @@ -1,6 +0,0 @@ -a,b,c -1,2,3 -4,5,6 - -a,b,c -7,8,9 diff --git a/c/reg_test/input/c.pprint b/c/reg_test/input/c.pprint deleted file mode 100644 index b1a788a6f..000000000 --- a/c/reg_test/input/c.pprint +++ /dev/null @@ -1,6 +0,0 @@ -a b c -1 2 3 -4 5 6 - -a b c -7 8 9 diff --git a/c/reg_test/input/capture-lengths.dkvp b/c/reg_test/input/capture-lengths.dkvp deleted file mode 100644 index a44db65f6..000000000 --- a/c/reg_test/input/capture-lengths.dkvp +++ /dev/null @@ -1,13 +0,0 @@ -FIELD= -FIELD=a -FIELD=ab -FIELD=abc -FIELD=abcd -FIELD=abcde -FIELD=abcdef -FIELD=abcdefg -FIELD=abcdefgh -FIELD=abcdefghi -FIELD=abcdefghij -FIELD=abcdefghijk -FIELD=abcdefghijkl diff --git a/c/reg_test/input/capture.dkvp b/c/reg_test/input/capture.dkvp deleted file mode 100644 index 86b5125c1..000000000 --- a/c/reg_test/input/capture.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -FIELD=ABC123 -FIELD=ABC..123 -FIELD=..ABC..123.. -FIELD=none of the above diff --git a/c/reg_test/input/clean-whitespace.csv b/c/reg_test/input/clean-whitespace.csv deleted file mode 100644 index 420c41b11..000000000 --- a/c/reg_test/input/clean-whitespace.csv +++ /dev/null @@ -1,17 +0,0 @@ -n,a,b , c -1,xy,2,3 -2,xy ,2,3 -3,xy ,2,3 -4,xy ,2,3 -5,xy,2,3 -6, xy,2,3 -7, xy,2,3 -8, xy,2,3 -9,xy,2,3 -10, xy ,2,3 -11, xy ,2,3 -12, xy ,2,3 -13,,2,3 -14, ,2,3 -15, ,2,3 -16, ,2,3 diff --git a/c/reg_test/input/comma-at-eof.csv b/c/reg_test/input/comma-at-eof.csv deleted file mode 100644 index 12e1120e8..000000000 --- a/c/reg_test/input/comma-at-eof.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -1,2,3 -4,5, \ No newline at end of file diff --git a/c/reg_test/input/comments/Makefile.am b/c/reg_test/input/comments/Makefile.am deleted file mode 100644 index a8d05fee0..000000000 --- a/c/reg_test/input/comments/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ -EXTRA_DIST= \ - comments1.dkvp \ - comments2.dkvp \ - comments3.dkvp \ - comments1.nidx \ - comments2.nidx \ - comments3.nidx \ - comments1.json \ - comments2.json \ - comments3.json \ - comments1.xtab \ - comments2.xtab \ - comments1.csv \ - comments2.csv \ - \ - comments1-atat.dkvp \ - comments2-atat.dkvp \ - comments3-atat.dkvp diff --git a/c/reg_test/input/comments/Makefile.in b/c/reg_test/input/comments/Makefile.in deleted file mode 100644 index 8160c49a4..000000000 --- a/c/reg_test/input/comments/Makefile.in +++ /dev/null @@ -1,457 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/reg_test/input/comments -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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 -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -EXTRA_DIST = \ - comments1.dkvp \ - comments2.dkvp \ - comments3.dkvp \ - comments1.nidx \ - comments2.nidx \ - comments3.nidx \ - comments1.json \ - comments2.json \ - comments3.json \ - comments1.xtab \ - comments2.xtab \ - comments1.csv \ - comments2.csv \ - \ - comments1-atat.dkvp \ - comments2-atat.dkvp \ - comments3-atat.dkvp - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(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 c/reg_test/input/comments/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/reg_test/input/comments/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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: $(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 mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -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 \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool 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 - - -# 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: diff --git a/c/reg_test/input/comments/comments1-atat.dkvp b/c/reg_test/input/comments/comments1-atat.dkvp deleted file mode 100644 index 2692f9394..000000000 --- a/c/reg_test/input/comments/comments1-atat.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -@@ hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 diff --git a/c/reg_test/input/comments/comments1.csv b/c/reg_test/input/comments/comments1.csv deleted file mode 100644 index ef1911b7e..000000000 --- a/c/reg_test/input/comments/comments1.csv +++ /dev/null @@ -1,4 +0,0 @@ -# hello -a,b,c -1,2,3 -4,5,6 diff --git a/c/reg_test/input/comments/comments1.dkvp b/c/reg_test/input/comments/comments1.dkvp deleted file mode 100644 index 9c3dad9cf..000000000 --- a/c/reg_test/input/comments/comments1.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -# hello world 1 -a=1,b=2,c=3 -a=4,b=5,c=6 diff --git a/c/reg_test/input/comments/comments1.json b/c/reg_test/input/comments/comments1.json deleted file mode 100644 index a5d842336..000000000 --- a/c/reg_test/input/comments/comments1.json +++ /dev/null @@ -1,3 +0,0 @@ -# hello world 1 -{ "a":1, "b":2, "c":3 } -{ "a":4, "b":5, "c":6 } diff --git a/c/reg_test/input/comments/comments1.nidx b/c/reg_test/input/comments/comments1.nidx deleted file mode 100644 index eb2f2f10d..000000000 --- a/c/reg_test/input/comments/comments1.nidx +++ /dev/null @@ -1,3 +0,0 @@ -# hello world 1 -aX1 bX2 cX3 -aX4 bX5 cX6 diff --git a/c/reg_test/input/comments/comments1.xtab b/c/reg_test/input/comments/comments1.xtab deleted file mode 100644 index 4d9f43db8..000000000 --- a/c/reg_test/input/comments/comments1.xtab +++ /dev/null @@ -1,8 +0,0 @@ -x 1 -#hello world3 -z 3 - -x 2 -#hello world4 -z 5 - diff --git a/c/reg_test/input/comments/comments2-atat.dkvp b/c/reg_test/input/comments/comments2-atat.dkvp deleted file mode 100644 index 6ccd3aaab..000000000 --- a/c/reg_test/input/comments/comments2-atat.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=2,c=3 -@@ hello world 2 -a=4,b=5,c=6 diff --git a/c/reg_test/input/comments/comments2.csv b/c/reg_test/input/comments/comments2.csv deleted file mode 100644 index d8e996a14..000000000 --- a/c/reg_test/input/comments/comments2.csv +++ /dev/null @@ -1,7 +0,0 @@ -# hello -a,b,c -# hi -1,2,3 -# there -4,5,6 -# haha diff --git a/c/reg_test/input/comments/comments2.dkvp b/c/reg_test/input/comments/comments2.dkvp deleted file mode 100644 index b13f182fb..000000000 --- a/c/reg_test/input/comments/comments2.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=2,c=3 -# hello world 2 -a=4,b=5,c=6 diff --git a/c/reg_test/input/comments/comments2.json b/c/reg_test/input/comments/comments2.json deleted file mode 100644 index d020ac685..000000000 --- a/c/reg_test/input/comments/comments2.json +++ /dev/null @@ -1,3 +0,0 @@ -{ "a":1, "b":2, "c":3 } -# hello world 2 -{ "a":4, "b":5, "c":6 } diff --git a/c/reg_test/input/comments/comments2.nidx b/c/reg_test/input/comments/comments2.nidx deleted file mode 100644 index 8ee3ae723..000000000 --- a/c/reg_test/input/comments/comments2.nidx +++ /dev/null @@ -1,3 +0,0 @@ -aX1 bX2 cX3 -# hello world 2 -aX4 bX5 cX6 diff --git a/c/reg_test/input/comments/comments2.xtab b/c/reg_test/input/comments/comments2.xtab deleted file mode 100644 index 043e7736b..000000000 --- a/c/reg_test/input/comments/comments2.xtab +++ /dev/null @@ -1,13 +0,0 @@ -#hello world1 - -#hello world2 -x 1 -#hello world3 -z 3 - -x 2 -#hello world4 -z 5 -#hello world5 - -#hello world6 diff --git a/c/reg_test/input/comments/comments3-atat.dkvp b/c/reg_test/input/comments/comments3-atat.dkvp deleted file mode 100644 index 83d9930ac..000000000 --- a/c/reg_test/input/comments/comments3-atat.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=2,c=3 -a=4,b=5,c=6 -@@ hello world 3 diff --git a/c/reg_test/input/comments/comments3.dkvp b/c/reg_test/input/comments/comments3.dkvp deleted file mode 100644 index 23c5e97c8..000000000 --- a/c/reg_test/input/comments/comments3.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=2,c=3 -a=4,b=5,c=6 -# hello world 3 diff --git a/c/reg_test/input/comments/comments3.json b/c/reg_test/input/comments/comments3.json deleted file mode 100644 index 104fae21c..000000000 --- a/c/reg_test/input/comments/comments3.json +++ /dev/null @@ -1,3 +0,0 @@ -{ "a":1, "b":2, "c":3 } -{ "a":4, "b":5, "c":6 } -# hello world 3 diff --git a/c/reg_test/input/comments/comments3.nidx b/c/reg_test/input/comments/comments3.nidx deleted file mode 100644 index 2d23d575d..000000000 --- a/c/reg_test/input/comments/comments3.nidx +++ /dev/null @@ -1,3 +0,0 @@ -aX1 bX2 cX3 -aX4 bX5 cX6 -# hello world 3 diff --git a/c/reg_test/input/d.csv b/c/reg_test/input/d.csv deleted file mode 100644 index a65ee2c39..000000000 --- a/c/reg_test/input/d.csv +++ /dev/null @@ -1,5 +0,0 @@ -h,i,j -3,4,5 - -m,n,o -8,9,10 diff --git a/c/reg_test/input/d.pprint b/c/reg_test/input/d.pprint deleted file mode 100644 index 4418cb5c6..000000000 --- a/c/reg_test/input/d.pprint +++ /dev/null @@ -1,5 +0,0 @@ -h i j -3 4 5 - -m n o -8 9 10 diff --git a/c/reg_test/input/date1.csv b/c/reg_test/input/date1.csv deleted file mode 100644 index 5911442dd..000000000 --- a/c/reg_test/input/date1.csv +++ /dev/null @@ -1,5 +0,0 @@ -Name,Date_201505,Extraneous -Alice,2015-05-14,foo -Bob,2015-05-11,bar -Chuck,2015-05-28,quux -Denise,2015-05-02,meep diff --git a/c/reg_test/input/date2.csv b/c/reg_test/input/date2.csv deleted file mode 100644 index 0d9ec9f5f..000000000 --- a/c/reg_test/input/date2.csv +++ /dev/null @@ -1,5 +0,0 @@ -Name,Date_201506,Extraneous -Alice,2015-06-23,cafe -Denise,2015-06-17,feed -Chuck,2015-06-19,beef -Bob,2015-06-19,d00d diff --git a/c/reg_test/input/dot-match.csv b/c/reg_test/input/dot-match.csv deleted file mode 100644 index 2ba4816b8..000000000 --- a/c/reg_test/input/dot-match.csv +++ /dev/null @@ -1,4 +0,0 @@ -text -hi -a.b -bye diff --git a/c/reg_test/input/dots.pprint-crlf b/c/reg_test/input/dots.pprint-crlf deleted file mode 100644 index ff3ef7432..000000000 --- a/c/reg_test/input/dots.pprint-crlf +++ /dev/null @@ -1,11 +0,0 @@ -a///b///i//x///////////////////y -pan/pan/1//0.3467901443380824//0.7268028627434533 -eks/pan/2//0.7586799647899636//0.5221511083334797 -wye/wye/3//0.20460330576630303/0.33831852551664776 -eks/wye/4//0.38139939387114097/0.13418874328430463 -wye/pan/5//0.5732889198020006//0.8636244699032729 -zee/pan/6//0.5271261600918548//0.49322128674835697 -eks/zee/7//0.6117840605678454//0.1878849191181694 -zee/wye/8//0.5985540091064224//0.976181385699006 -hat/wye/9//0.03144187646093577/0.7495507603507059 -pan/wye/10/0.5026260055412137//0.9526183602969864 diff --git a/c/reg_test/input/dots.xtab b/c/reg_test/input/dots.xtab deleted file mode 100644 index 51947376e..000000000 --- a/c/reg_test/input/dots.xtab +++ /dev/null @@ -1,6 +0,0 @@ -a.....1 -b.....2 -c.....345 - -defg..6 -hi....78 diff --git a/c/reg_test/input/double-ps.dkvp b/c/reg_test/input/double-ps.dkvp deleted file mode 100644 index 59aff8f0f..000000000 --- a/c/reg_test/input/double-ps.dkvp +++ /dev/null @@ -1,2 +0,0 @@ -a=pan,b=wy.e,c=3 -a=pan,b=wy=e,c=3 diff --git a/c/reg_test/input/e.csv b/c/reg_test/input/e.csv deleted file mode 100644 index b20400fda..000000000 --- a/c/reg_test/input/e.csv +++ /dev/null @@ -1,4 +0,0 @@ - -a,b,c -1,2,3 -4,5,6 diff --git a/c/reg_test/input/e.pprint b/c/reg_test/input/e.pprint deleted file mode 100644 index 9ad19ff0e..000000000 --- a/c/reg_test/input/e.pprint +++ /dev/null @@ -1,4 +0,0 @@ - -a b c -1 2 3 -4 5 6 diff --git a/c/reg_test/input/embedded-ips.xtab b/c/reg_test/input/embedded-ips.xtab deleted file mode 100644 index 5147c0b09..000000000 --- a/c/reg_test/input/embedded-ips.xtab +++ /dev/null @@ -1,3 +0,0 @@ -a 1 -b 2 -c 3 4 5 diff --git a/c/reg_test/input/env-assign.sh b/c/reg_test/input/env-assign.sh deleted file mode 100755 index 3e897e980..000000000 --- a/c/reg_test/input/env-assign.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -while read line; do - echo "[ZYX]=[$ZYX] $line" -done diff --git a/c/reg_test/input/env-var.dkvp b/c/reg_test/input/env-var.dkvp deleted file mode 100644 index 873ce5fcd..000000000 --- a/c/reg_test/input/env-var.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -name=X,x=1,y=2 -name=Y,x=3,y=4 -x=5,y=6 diff --git a/c/reg_test/input/escapes.json b/c/reg_test/input/escapes.json deleted file mode 100644 index 0abc41834..000000000 --- a/c/reg_test/input/escapes.json +++ /dev/null @@ -1,2 +0,0 @@ -{"abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\xyz"} -{"abc\bdef\fghi": "jkl\nmno\rpqr\tstu\"vw\\\\xyz"} diff --git a/c/reg_test/input/example.usv b/c/reg_test/input/example.usv deleted file mode 100644 index e6a617da4..000000000 --- a/c/reg_test/input/example.usv +++ /dev/null @@ -1 +0,0 @@ -a␟b␟c␞d␟e␟f␞g␟h␟i \ No newline at end of file diff --git a/c/reg_test/input/f.csv b/c/reg_test/input/f.csv deleted file mode 100644 index e69de29bb..000000000 diff --git a/c/reg_test/input/f.pprint b/c/reg_test/input/f.pprint deleted file mode 100644 index e69de29bb..000000000 diff --git a/c/reg_test/input/fill-down.csv b/c/reg_test/input/fill-down.csv deleted file mode 100644 index 88477a59d..000000000 --- a/c/reg_test/input/fill-down.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,,3 -4,5,6 -7,,9 diff --git a/c/reg_test/input/filter-example.dsl b/c/reg_test/input/filter-example.dsl deleted file mode 100644 index a7f80f659..000000000 --- a/c/reg_test/input/filter-example.dsl +++ /dev/null @@ -1 +0,0 @@ -$x < $y diff --git a/c/reg_test/input/filter-script-piece-1 b/c/reg_test/input/filter-script-piece-1 deleted file mode 100644 index 55a59de8e..000000000 --- a/c/reg_test/input/filter-script-piece-1 +++ /dev/null @@ -1 +0,0 @@ -$x > 0.5 diff --git a/c/reg_test/input/filter-script-piece-2 b/c/reg_test/input/filter-script-piece-2 deleted file mode 100644 index edb1568dc..000000000 --- a/c/reg_test/input/filter-script-piece-2 +++ /dev/null @@ -1 +0,0 @@ -&& $i < 5 diff --git a/c/reg_test/input/freq.dkvp b/c/reg_test/input/freq.dkvp deleted file mode 100644 index 698cbc80f..000000000 --- a/c/reg_test/input/freq.dkvp +++ /dev/null @@ -1,17 +0,0 @@ -a=apple,b=apple -a=apple,b=apple -a=apple,b=apple -a=apple,b=apple -a=apple,b=apple -a=apple,b=apple -a=bat,b=cat -a=bat,b=cat -a=bat,b=cat -a=bat,b=cat -a=bat,b=cat -a=cat,b=bat -a=cat,b=bat -a=cat,b=bat -a=cat,b=cat -a=dog,b=dog -a=dog,b=dog diff --git a/c/reg_test/input/from-first.csv b/c/reg_test/input/from-first.csv deleted file mode 100644 index 5e8474bbe..000000000 --- a/c/reg_test/input/from-first.csv +++ /dev/null @@ -1,7 +0,0 @@ -x,g -100,red -203,red -101,green -307,red -209,green -314,green diff --git a/c/reg_test/input/fsec2xhms b/c/reg_test/input/fsec2xhms deleted file mode 100644 index 0db13e465..000000000 --- a/c/reg_test/input/fsec2xhms +++ /dev/null @@ -1,28 +0,0 @@ -sec=0.25 -sec=1.25 -sec=59.25 -sec=60.25 -sec=61.25 -sec=3599.25 -sec=3600.25 -sec=3601.25 -sec=86399.25 -sec=86400.25 -sec=86401.25 -sec=863999.25 -sec=864000.25 -sec=864001.25 -sec=-0.25 -sec=-1.25 -sec=-59.25 -sec=-60.25 -sec=-61.25 -sec=-3599.25 -sec=-3600.25 -sec=-3601.25 -sec=-86399.25 -sec=-86400.25 -sec=-86401.25 -sec=-863999.25 -sec=-864000.25 -sec=-864001.25 diff --git a/c/reg_test/input/g.csv b/c/reg_test/input/g.csv deleted file mode 100644 index 3f2ff2d6c..000000000 --- a/c/reg_test/input/g.csv +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/c/reg_test/input/g.pprint b/c/reg_test/input/g.pprint deleted file mode 100644 index 3f2ff2d6c..000000000 --- a/c/reg_test/input/g.pprint +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/c/reg_test/input/gmt2sec b/c/reg_test/input/gmt2sec deleted file mode 100644 index f63c71714..000000000 --- a/c/reg_test/input/gmt2sec +++ /dev/null @@ -1,29 +0,0 @@ -gmt -1970-01-01T00:00:00Z -1970-01-01T00:00:00.Z -1970-01-01T00:00:01Z -1970-01-01T00:00:01.0Z -1970-01-01T00:00:10Z -1970-01-01T00:00:10.00Z -1970-01-01T00:01:40Z -1970-01-01T00:01:40.1Z -1970-01-01T00:16:40Z -1970-01-01T00:16:40.12Z -1970-01-01T02:46:40Z -1970-01-01T02:46:40.123Z -1970-01-02T03:46:40Z -1970-01-02T03:46:40.1234Z -1970-01-12T13:46:40Z -1970-01-12T13:46:40.12345Z -1970-04-26T17:46:40Z -1970-04-26T17:46:40.123456Z -1973-03-03T09:46:40Z -1973-03-03T09:46:40.1234567Z -2001-09-09T01:46:40Z -2001-09-09T01:46:40.12345678Z -2015-05-19T11:49:40Z -2015-05-19T11:49:40.123456789Z -2017-07-14T02:40:00Z -2017-07-14T02:40:00.999Z -2033-05-18T03:33:20Z -2033-05-18T03:33:20.999999Z diff --git a/c/reg_test/input/gsub.dat b/c/reg_test/input/gsub.dat deleted file mode 100644 index 7897c36c7..000000000 --- a/c/reg_test/input/gsub.dat +++ /dev/null @@ -1,6 +0,0 @@ -x=lmnop -x=abcdefg -x=ababbabbba -x=LMNOP -x=ABCDEFG -x=ABABBABBBA diff --git a/c/reg_test/input/having-fields-regex.dkvp b/c/reg_test/input/having-fields-regex.dkvp deleted file mode 100644 index 417f01af8..000000000 --- a/c/reg_test/input/having-fields-regex.dkvp +++ /dev/null @@ -1,6 +0,0 @@ -abc=1,def=11 -ABC=2,DEF=12 -abcd=3,ghi=13 -ABCD=4,GHI=14 -abcde=5,ghi=15 -ABCDE=6,GHI=16 diff --git a/c/reg_test/input/het-join-left b/c/reg_test/input/het-join-left deleted file mode 100644 index 2d709f9e2..000000000 --- a/c/reg_test/input/het-join-left +++ /dev/null @@ -1,10 +0,0 @@ -x=100,b=10 -l=1,b=11 -l=1,b=12 -x=200,b=13 -l=3,b=14 -l=3,b=15 -x=300,b=16 -l=5,b=17 -l=5,b=18 -x=400,b=19 diff --git a/c/reg_test/input/het-join-right-r0 b/c/reg_test/input/het-join-right-r0 deleted file mode 100644 index b030aeda0..000000000 --- a/c/reg_test/input/het-join-right-r0 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=0 -y=333 diff --git a/c/reg_test/input/het-join-right-r1 b/c/reg_test/input/het-join-right-r1 deleted file mode 100644 index a7e76fb86..000000000 --- a/c/reg_test/input/het-join-right-r1 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=1 -y=333 diff --git a/c/reg_test/input/het-join-right-r11 b/c/reg_test/input/het-join-right-r11 deleted file mode 100644 index c476442ec..000000000 --- a/c/reg_test/input/het-join-right-r11 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=1 -y=333 diff --git a/c/reg_test/input/het-join-right-r12 b/c/reg_test/input/het-join-right-r12 deleted file mode 100644 index 9a372ed47..000000000 --- a/c/reg_test/input/het-join-right-r12 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=2 -y=333 diff --git a/c/reg_test/input/het-join-right-r13 b/c/reg_test/input/het-join-right-r13 deleted file mode 100644 index 7e85bc75f..000000000 --- a/c/reg_test/input/het-join-right-r13 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=3 -y=333 diff --git a/c/reg_test/input/het-join-right-r14 b/c/reg_test/input/het-join-right-r14 deleted file mode 100644 index dabd3b84c..000000000 --- a/c/reg_test/input/het-join-right-r14 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=4 -y=333 diff --git a/c/reg_test/input/het-join-right-r15 b/c/reg_test/input/het-join-right-r15 deleted file mode 100644 index 8fc2de945..000000000 --- a/c/reg_test/input/het-join-right-r15 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r16 b/c/reg_test/input/het-join-right-r16 deleted file mode 100644 index 5c73f9c2f..000000000 --- a/c/reg_test/input/het-join-right-r16 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=1 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r2 b/c/reg_test/input/het-join-right-r2 deleted file mode 100644 index 16be27340..000000000 --- a/c/reg_test/input/het-join-right-r2 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=2 -y=333 diff --git a/c/reg_test/input/het-join-right-r22 b/c/reg_test/input/het-join-right-r22 deleted file mode 100644 index b04597d28..000000000 --- a/c/reg_test/input/het-join-right-r22 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=2 -y=222 -r=2 -y=333 diff --git a/c/reg_test/input/het-join-right-r23 b/c/reg_test/input/het-join-right-r23 deleted file mode 100644 index ca1f22f8e..000000000 --- a/c/reg_test/input/het-join-right-r23 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=2 -y=222 -r=3 -y=333 diff --git a/c/reg_test/input/het-join-right-r24 b/c/reg_test/input/het-join-right-r24 deleted file mode 100644 index 6653b9feb..000000000 --- a/c/reg_test/input/het-join-right-r24 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=2 -y=222 -r=4 -y=333 diff --git a/c/reg_test/input/het-join-right-r25 b/c/reg_test/input/het-join-right-r25 deleted file mode 100644 index e7db35ee3..000000000 --- a/c/reg_test/input/het-join-right-r25 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=2 -y=222 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r26 b/c/reg_test/input/het-join-right-r26 deleted file mode 100644 index 2e5f1ef7f..000000000 --- a/c/reg_test/input/het-join-right-r26 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=2 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r3 b/c/reg_test/input/het-join-right-r3 deleted file mode 100644 index 1af5b2bbb..000000000 --- a/c/reg_test/input/het-join-right-r3 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=3 -y=333 diff --git a/c/reg_test/input/het-join-right-r33 b/c/reg_test/input/het-join-right-r33 deleted file mode 100644 index fb3cea30a..000000000 --- a/c/reg_test/input/het-join-right-r33 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=3 -y=222 -r=3 -y=333 diff --git a/c/reg_test/input/het-join-right-r34 b/c/reg_test/input/het-join-right-r34 deleted file mode 100644 index c524ba83f..000000000 --- a/c/reg_test/input/het-join-right-r34 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=3 -y=222 -r=4 -y=333 diff --git a/c/reg_test/input/het-join-right-r35 b/c/reg_test/input/het-join-right-r35 deleted file mode 100644 index ec02cfad6..000000000 --- a/c/reg_test/input/het-join-right-r35 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=3 -y=222 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r36 b/c/reg_test/input/het-join-right-r36 deleted file mode 100644 index a1f3e266b..000000000 --- a/c/reg_test/input/het-join-right-r36 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=3 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r4 b/c/reg_test/input/het-join-right-r4 deleted file mode 100644 index 7ef5063bd..000000000 --- a/c/reg_test/input/het-join-right-r4 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=4 -y=333 diff --git a/c/reg_test/input/het-join-right-r44 b/c/reg_test/input/het-join-right-r44 deleted file mode 100644 index b59ba8547..000000000 --- a/c/reg_test/input/het-join-right-r44 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=4 -y=222 -r=4 -y=333 diff --git a/c/reg_test/input/het-join-right-r45 b/c/reg_test/input/het-join-right-r45 deleted file mode 100644 index 440f4c63e..000000000 --- a/c/reg_test/input/het-join-right-r45 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=4 -y=222 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r46 b/c/reg_test/input/het-join-right-r46 deleted file mode 100644 index 29f11afe8..000000000 --- a/c/reg_test/input/het-join-right-r46 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=4 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r5 b/c/reg_test/input/het-join-right-r5 deleted file mode 100644 index 5b38eae5c..000000000 --- a/c/reg_test/input/het-join-right-r5 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r55 b/c/reg_test/input/het-join-right-r55 deleted file mode 100644 index 23fd56630..000000000 --- a/c/reg_test/input/het-join-right-r55 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=5 -y=222 -r=5 -y=333 diff --git a/c/reg_test/input/het-join-right-r56 b/c/reg_test/input/het-join-right-r56 deleted file mode 100644 index 370e45064..000000000 --- a/c/reg_test/input/het-join-right-r56 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=5 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r6 b/c/reg_test/input/het-join-right-r6 deleted file mode 100644 index 4753050c8..000000000 --- a/c/reg_test/input/het-join-right-r6 +++ /dev/null @@ -1,3 +0,0 @@ -y=111 -r=6 -y=333 diff --git a/c/reg_test/input/het-join-right-r66 b/c/reg_test/input/het-join-right-r66 deleted file mode 100644 index e1c5537fa..000000000 --- a/c/reg_test/input/het-join-right-r66 +++ /dev/null @@ -1,5 +0,0 @@ -y=111 -r=6 -y=222 -r=6 -y=333 diff --git a/c/reg_test/input/het.dkvp b/c/reg_test/input/het.dkvp deleted file mode 100644 index a2e4d0ced..000000000 --- a/c/reg_test/input/het.dkvp +++ /dev/null @@ -1,12 +0,0 @@ -host=jupiter -df/tmp=2.43MB,uptime=32345sec -host=saturn -df/tmp=1.34MB,uptime=234214132sec -host=mars -df/tmp=4.97MB,uptime=345089805sec -host=jupiter -df/tmp=0.04MB,uptime=890sec -host=mars -df/tmp=8.55MB,uptime=787897777sec -host=saturn -df/tmp=9.47MB,uptime=234289080sec diff --git a/c/reg_test/input/int-float.dkvp b/c/reg_test/input/int-float.dkvp deleted file mode 100644 index 36284ee85..000000000 --- a/c/reg_test/input/int-float.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -x=1,y=10.1,z=20 -x=2,y=10.2,z=30 -x=3,y=10.3,z=40.8 diff --git a/c/reg_test/input/int64arith.dkvp b/c/reg_test/input/int64arith.dkvp deleted file mode 100644 index 187aa39f3..000000000 --- a/c/reg_test/input/int64arith.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -p=0x7ffffffffffff9ff,n=0x8000000000000000 -p=0x7ffffffffffffa00,n=0x8000000000000001 -p=0x7ffffffffffffbff,n=0x8000000000000200 -p=0x7ffffffffffffc00,n=0x8000000000000400 -p=0x7ffffffffffffe00,n=0x8000000000000401 -p=0x7ffffffffffffffe,n=0x8000000000000600 -p=0x7fffffffffffffff,n=0x8000000000000601 diff --git a/c/reg_test/input/int64io.dkvp b/c/reg_test/input/int64io.dkvp deleted file mode 100644 index 33a8726ab..000000000 --- a/c/reg_test/input/int64io.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -a=0x1,b=1 -a=0x7ffffffffffffffe,b=9223372036854775806 -a=0x7fffffffffffffff,b=9223372036854775807 -a=0x8000000000000000,b=-9223372036854775808 -a=0xffffffffffffffff,b=-1 diff --git a/c/reg_test/input/ints.dkvp b/c/reg_test/input/ints.dkvp deleted file mode 100644 index 5f788198b..000000000 --- a/c/reg_test/input/ints.dkvp +++ /dev/null @@ -1,30 +0,0 @@ -x=0,y=1 -x=1,y=7 -x=6,y=0 -x=6,y=9 -x=0,y=5 -x=0,y=7 -x=4,y=9 -x=7,y=1 -x=3,y=3 -x=7,y=9 -x=8,y=5 -x=0,y=6 -x=5,y=9 -x=0,y=9 -x=3,y=7 -x=0,y=6 -x=2,y=2 -x=3,y=6 -x=2,y=7 -x=4,y=8 -x=6,y=2 -x=2,y=2 -x=1,y=6 -x=0,y=8 -x=0,y=4 -x=2,y=2 -x=3,y=5 -x=4,y=4 -x=9,y=5 -x=2,y=2 diff --git a/c/reg_test/input/join-het.dkvp b/c/reg_test/input/join-het.dkvp deleted file mode 100644 index 49d27fc36..000000000 --- a/c/reg_test/input/join-het.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -a=eks,n=123 -a=pan,n=234 -a=wye,n=345 -a=zee,n=456 -aye=bee,enn=emm diff --git a/c/reg_test/input/joina.dkvp b/c/reg_test/input/joina.dkvp deleted file mode 100644 index d0e6c9c9e..000000000 --- a/c/reg_test/input/joina.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -l=1,x=a -l=2,x=b -l=2,x=c -l=2,x=d -l=3,x=e -l=3,x=f -l=4,x=g diff --git a/c/reg_test/input/joinb.dkvp b/c/reg_test/input/joinb.dkvp deleted file mode 100644 index 54fac4532..000000000 --- a/c/reg_test/input/joinb.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -r=1,y=s -r=2,y=t -r=2,y=v -r=3,y=w -r=3,y=x -r=3,y=y -r=5,y=z diff --git a/c/reg_test/input/json-output-options.dkvp b/c/reg_test/input/json-output-options.dkvp deleted file mode 100644 index c5859e5e6..000000000 --- a/c/reg_test/input/json-output-options.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=x,c=3 -d=4 -1=5,f=6 diff --git a/c/reg_test/input/line-ending-cr.bin b/c/reg_test/input/line-ending-cr.bin deleted file mode 100644 index fe21da055..000000000 --- a/c/reg_test/input/line-ending-cr.bin +++ /dev/null @@ -1 +0,0 @@ -hello there how are you \ No newline at end of file diff --git a/c/reg_test/input/line-ending-crlf.bin b/c/reg_test/input/line-ending-crlf.bin deleted file mode 100644 index 4d2c1c6f4..000000000 --- a/c/reg_test/input/line-ending-crlf.bin +++ /dev/null @@ -1,5 +0,0 @@ -hello -there -how -are -you diff --git a/c/reg_test/input/line-ending-lf.bin b/c/reg_test/input/line-ending-lf.bin deleted file mode 100644 index 6f086d80a..000000000 --- a/c/reg_test/input/line-ending-lf.bin +++ /dev/null @@ -1,5 +0,0 @@ -hello -there -how -are -you diff --git a/c/reg_test/input/line-term-crlf-wrap.json b/c/reg_test/input/line-term-crlf-wrap.json deleted file mode 100644 index 883f39a64..000000000 --- a/c/reg_test/input/line-term-crlf-wrap.json +++ /dev/null @@ -1,12 +0,0 @@ -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 }, -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 }, -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 }, -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 }, -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 }, -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 }, -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 }, -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 }, -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] diff --git a/c/reg_test/input/line-term-crlf.csv b/c/reg_test/input/line-term-crlf.csv deleted file mode 100644 index 9e6d97092..000000000 --- a/c/reg_test/input/line-term-crlf.csv +++ /dev/null @@ -1,11 +0,0 @@ -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 diff --git a/c/reg_test/input/line-term-crlf.dkvp b/c/reg_test/input/line-term-crlf.dkvp deleted file mode 100644 index 547de9e99..000000000 --- a/c/reg_test/input/line-term-crlf.dkvp +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/line-term-crlf.json b/c/reg_test/input/line-term-crlf.json deleted file mode 100644 index 3bba0e8d7..000000000 --- a/c/reg_test/input/line-term-crlf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } diff --git a/c/reg_test/input/line-term-crlf.pprint b/c/reg_test/input/line-term-crlf.pprint deleted file mode 100644 index c894dcf82..000000000 --- a/c/reg_test/input/line-term-crlf.pprint +++ /dev/null @@ -1,11 +0,0 @@ -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 diff --git a/c/reg_test/input/line-term-crlf.xtab b/c/reg_test/input/line-term-crlf.xtab deleted file mode 100644 index 0bb84975a..000000000 --- a/c/reg_test/input/line-term-crlf.xtab +++ /dev/null @@ -1,59 +0,0 @@ -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 diff --git a/c/reg_test/input/line-term-lf-wrap.json b/c/reg_test/input/line-term-lf-wrap.json deleted file mode 100644 index 883f39a64..000000000 --- a/c/reg_test/input/line-term-lf-wrap.json +++ /dev/null @@ -1,12 +0,0 @@ -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 }, -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 }, -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 }, -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 }, -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 }, -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 }, -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 }, -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 }, -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 }, -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] diff --git a/c/reg_test/input/line-term-lf.csv b/c/reg_test/input/line-term-lf.csv deleted file mode 100644 index 9e6d97092..000000000 --- a/c/reg_test/input/line-term-lf.csv +++ /dev/null @@ -1,11 +0,0 @@ -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 -zee,pan,6,0.5271261600918548,0.49322128674835697 -eks,zee,7,0.6117840605678454,0.1878849191181694 -zee,wye,8,0.5985540091064224,0.976181385699006 -hat,wye,9,0.03144187646093577,0.7495507603507059 -pan,wye,10,0.5026260055412137,0.9526183602969864 diff --git a/c/reg_test/input/line-term-lf.dkvp b/c/reg_test/input/line-term-lf.dkvp deleted file mode 100644 index 547de9e99..000000000 --- a/c/reg_test/input/line-term-lf.dkvp +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/line-term-lf.json b/c/reg_test/input/line-term-lf.json deleted file mode 100644 index 3bba0e8d7..000000000 --- a/c/reg_test/input/line-term-lf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } diff --git a/c/reg_test/input/line-term-lf.pprint b/c/reg_test/input/line-term-lf.pprint deleted file mode 100644 index c894dcf82..000000000 --- a/c/reg_test/input/line-term-lf.pprint +++ /dev/null @@ -1,11 +0,0 @@ -a b i x y -pan pan 1 0.3467901443380824 0.7268028627434533 -eks pan 2 0.7586799647899636 0.5221511083334797 -wye wye 3 0.20460330576630303 0.33831852551664776 -eks wye 4 0.38139939387114097 0.13418874328430463 -wye pan 5 0.5732889198020006 0.8636244699032729 -zee pan 6 0.5271261600918548 0.49322128674835697 -eks zee 7 0.6117840605678454 0.1878849191181694 -zee wye 8 0.5985540091064224 0.976181385699006 -hat wye 9 0.03144187646093577 0.7495507603507059 -pan wye 10 0.5026260055412137 0.9526183602969864 diff --git a/c/reg_test/input/line-term-lf.xtab b/c/reg_test/input/line-term-lf.xtab deleted file mode 100644 index 0bb84975a..000000000 --- a/c/reg_test/input/line-term-lf.xtab +++ /dev/null @@ -1,59 +0,0 @@ -a pan -b pan -i 1 -x 0.3467901443380824 -y 0.7268028627434533 - -a eks -b pan -i 2 -x 0.7586799647899636 -y 0.5221511083334797 - -a wye -b wye -i 3 -x 0.20460330576630303 -y 0.33831852551664776 - -a eks -b wye -i 4 -x 0.38139939387114097 -y 0.13418874328430463 - -a wye -b pan -i 5 -x 0.5732889198020006 -y 0.8636244699032729 - -a zee -b pan -i 6 -x 0.5271261600918548 -y 0.49322128674835697 - -a eks -b zee -i 7 -x 0.6117840605678454 -y 0.1878849191181694 - -a zee -b wye -i 8 -x 0.5985540091064224 -y 0.976181385699006 - -a hat -b wye -i 9 -x 0.03144187646093577 -y 0.7495507603507059 - -a pan -b wye -i 10 -x 0.5026260055412137 -y 0.9526183602969864 diff --git a/c/reg_test/input/logi.dkvp b/c/reg_test/input/logi.dkvp deleted file mode 100644 index 340f0cc08..000000000 --- a/c/reg_test/input/logi.dkvp +++ /dev/null @@ -1,22 +0,0 @@ -x=-11,y=0,g=red -x=-9,y=0,g=red -x=-7,y=0,g=red -x=-5,y=1,g=red -x=-3,y=0,g=red -x=-1,y=1,g=red -x=1,y=0,g=red -x=3,y=1,g=red -x=5,y=1,g=red -x=7,y=0,g=red -x=9,y=1,g=red -x=-11,y=0,g=blue -x=-9,y=0,g=blue -x=-7,y=0,g=blue -x=-5,y=1,g=blue -x=-3,y=1,g=blue -x=-1,y=0,g=blue -x=1,y=1,g=blue -x=3,y=1,g=blue -x=5,y=1,g=blue -x=7,y=0,g=blue -x=9,y=1,g=blue diff --git a/c/reg_test/input/mand.mlr b/c/reg_test/input/mand.mlr deleted file mode 100644 index 9c367b93b..000000000 --- a/c/reg_test/input/mand.mlr +++ /dev/null @@ -1,73 +0,0 @@ -# Mandelbrot set generator: simple example of Miller DSL as programming language. -begin { - # Set defaults - @rcorn = -2.0; - @icorn = -2.0; - @side = 4.0; - @iheight = 50; - @iwidth = 100; - @maxits = 100; - @levelstep = 5; - @chars = "@X*o-."; - @verbose = false; - -} - -# Override defaults -@rcorn = $rcorn; -@icorn = $icorn; -@side = $side; -@iheight = $iheight; -@iwidth = $iwidth; -@maxits = $maxits; -@levelstep = $levelstep; -@chars = $chars; -@verbose = $verbose; - -end { - if (@verbose) { - print "RCORN = ".@rcorn; - print "ICORN = ".@icorn; - print "SIDE = ".@side; - print "IHEIGHT = ".@iheight; - print "IWIDTH = ".@iwidth; - print "MAXITS = ".@maxits; - print "LEVELSTEP = ".@levelstep; - print "CHARS = ".@chars; - } - - for (int ii = @iheight-1; ii >= 0; ii -= 1) { - num ci = @icorn + (ii/@iheight) * @side; - for (int ir = 0; ir < @iwidth; ir += 1) { - num cr = @rcorn + (ir/@iwidth) * @side; - printn get_point_plot(cr, ci, @maxits); - } - print; - } -} - -func get_point_plot(cr, ci, maxits) { - num zr = 0.0; - num zi = 0.0; - - int iti = 0; - bool escaped = false; - num zt = 0; - for (iti = 0; iti < maxits; iti += 1) { - num mag = zr*zr + zi+zi; - if (mag > 4.0) { - escaped = true; - break; - } - # z := z^2 + c - zt = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = zt; - } - if (!escaped) { - return "."; - } else { - int level = (iti // @levelstep) % strlen(@chars); - return substr(@chars, level, level); - } -} diff --git a/c/reg_test/input/merge-fields-abxy.dkvp b/c/reg_test/input/merge-fields-abxy.dkvp deleted file mode 100644 index cd63a2ef8..000000000 --- a/c/reg_test/input/merge-fields-abxy.dkvp +++ /dev/null @@ -1,20 +0,0 @@ -a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8 -z=1 -a_on_x=1,a_out_x=2,b_in_y=4,b_out_x=8 -a_in_x=1,a_oot_x=2,b_in_y=4,b_out_x=8 -a_in_x=1,a_out_x=2,b_on_y=4,b_out_x=8 -a_in_x=1,a_out_x=2,b_in_y=4,b_oot_x=8 -z=2 -a_on_x=1,a_oot_x=2,b_in_y=4,b_out_x=8 -a_on_x=1,a_out_x=2,b_on_y=4,b_out_x=8 -a_on_x=1,a_out_x=2,b_in_y=4,b_oot_x=8 -a_in_x=1,a_oot_x=2,b_on_y=4,b_out_x=8 -a_in_x=1,a_oot_x=2,b_in_y=4,b_oot_x=8 -a_in_x=1,a_out_x=2,b_on_y=4,b_oot_x=8 -z=3 -a_in_x=1,a_oot_x=2,b_on_y=4,b_oot_x=8 -a_on_x=1,a_out_x=2,b_on_y=4,b_oot_x=8 -a_on_x=1,a_oot_x=2,b_in_y=4,b_oot_x=8 -a_on_x=1,a_oot_x=2,b_on_y=4,b_out_x=8 -z=4 -a_on_x=1,a_oot_x=2,b_on_y=4,b_oot_x=8 diff --git a/c/reg_test/input/merge-fields-in-out-mixed.csv b/c/reg_test/input/merge-fields-in-out-mixed.csv deleted file mode 100644 index 09db9f124..000000000 --- a/c/reg_test/input/merge-fields-in-out-mixed.csv +++ /dev/null @@ -1,5 +0,0 @@ -a_in,a_out,b_in,b_out -436,abc,446,195 -526,320,def,780 -220,888,705,ghi -jkl,mno,pqr,stu diff --git a/c/reg_test/input/merge-fields-in-out.csv b/c/reg_test/input/merge-fields-in-out.csv deleted file mode 100644 index 6e4f71c4f..000000000 --- a/c/reg_test/input/merge-fields-in-out.csv +++ /dev/null @@ -1,4 +0,0 @@ -a_in,a_out,b_in,b_out -436,490,446,195 -526,320,963,780 -220,888,705,831 diff --git a/c/reg_test/input/minmax.dkvp b/c/reg_test/input/minmax.dkvp deleted file mode 100644 index 725ef2e5f..000000000 --- a/c/reg_test/input/minmax.dkvp +++ /dev/null @@ -1,8 +0,0 @@ -x=1,y=2 -x=1,y= -x=,y= -x=,y=2 -x=3,y=2 -x=3,y= -x=,y= -x=,y=2 diff --git a/c/reg_test/input/missings.dkvp b/c/reg_test/input/missings.dkvp deleted file mode 100644 index 881e4f3fa..000000000 --- a/c/reg_test/input/missings.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,b=2,c=3,d=4,e=5,f=6 -a,b=,x=4,c=3,d,e,f -a,b=,x=4,c=3,d,e,f=6 diff --git a/c/reg_test/input/mixed-types.xtab b/c/reg_test/input/mixed-types.xtab deleted file mode 100644 index 2a47e04a3..000000000 --- a/c/reg_test/input/mixed-types.xtab +++ /dev/null @@ -1,10 +0,0 @@ -pf1 71.2 -nf1 -71.2 -zf 0.0 -pf2 73.4 -nf2 -73.4 -pi1 75 -ni1 -75 -zi 0 -pi2 76 -ni2 -76 diff --git a/c/reg_test/input/modarith.dat b/c/reg_test/input/modarith.dat deleted file mode 100644 index 9e4a5141e..000000000 --- a/c/reg_test/input/modarith.dat +++ /dev/null @@ -1,111 +0,0 @@ -x=-37 -x=-36 -x=-35 -x=-34 -x=-33 -x=-32 -x=-31 -x=-30 -x=-29 -x=-28 -x=-27 -x=-26 -x=-25 -x=-24 -x=-23 -x=-22 -x=-21 -x=-20 -x=-19 -x=-18 -x=-17 -x=-16 -x=-15 -x=-14 -x=-13 -x=-12 -x=-11 -x=-10 -x=-9 -x=-8 -x=-7 -x=-6 -x=-5 -x=-4 -x=-3 -x=-2 -x=-1 -x=0 -x=1 -x=2 -x=3 -x=4 -x=5 -x=6 -x=7 -x=8 -x=9 -x=10 -x=11 -x=12 -x=13 -x=14 -x=15 -x=16 -x=17 -x=18 -x=19 -x=20 -x=21 -x=22 -x=23 -x=24 -x=25 -x=26 -x=27 -x=28 -x=29 -x=30 -x=31 -x=32 -x=33 -x=34 -x=35 -x=36 -x=37 -x=38 -x=39 -x=40 -x=41 -x=42 -x=43 -x=44 -x=45 -x=46 -x=47 -x=48 -x=49 -x=50 -x=51 -x=52 -x=53 -x=54 -x=55 -x=56 -x=57 -x=58 -x=59 -x=60 -x=61 -x=62 -x=63 -x=64 -x=65 -x=66 -x=67 -x=68 -x=69 -x=70 -x=71 -x=72 -x=73 diff --git a/c/reg_test/input/multi-format-join-a.csv b/c/reg_test/input/multi-format-join-a.csv deleted file mode 100644 index 7d79690b4..000000000 --- a/c/reg_test/input/multi-format-join-a.csv +++ /dev/null @@ -1,5 +0,0 @@ -x,a -1,2 -2,3 -3,4 -4,5 diff --git a/c/reg_test/input/multi-format-join-a.dkvp b/c/reg_test/input/multi-format-join-a.dkvp deleted file mode 100644 index f0e325c99..000000000 --- a/c/reg_test/input/multi-format-join-a.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=1,a=2 -x=2,a=3 -x=3,a=4 -x=4,a=5 diff --git a/c/reg_test/input/multi-format-join-a.json b/c/reg_test/input/multi-format-join-a.json deleted file mode 100644 index 1870d491a..000000000 --- a/c/reg_test/input/multi-format-join-a.json +++ /dev/null @@ -1,4 +0,0 @@ -{"x":1,"a":2} -{"x":2,"a":3} -{"x":3,"a":4} -{"x":4,"a":5} diff --git a/c/reg_test/input/multi-format-join-b.csv b/c/reg_test/input/multi-format-join-b.csv deleted file mode 100644 index 02686bbaa..000000000 --- a/c/reg_test/input/multi-format-join-b.csv +++ /dev/null @@ -1,5 +0,0 @@ -x,b -1,20 -2,30 -3,40 -4,50 diff --git a/c/reg_test/input/multi-format-join-b.dkvp b/c/reg_test/input/multi-format-join-b.dkvp deleted file mode 100644 index b366c94a3..000000000 --- a/c/reg_test/input/multi-format-join-b.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=1,b=20 -x=2,b=30 -x=3,b=40 -x=4,b=50 diff --git a/c/reg_test/input/multi-format-join-b.json b/c/reg_test/input/multi-format-join-b.json deleted file mode 100644 index de1314630..000000000 --- a/c/reg_test/input/multi-format-join-b.json +++ /dev/null @@ -1,4 +0,0 @@ -{"x":1,"b":20} -{"x":2,"b":30} -{"x":3,"b":40} -{"x":4,"b":50} diff --git a/c/reg_test/input/multi-ips.dkvp b/c/reg_test/input/multi-ips.dkvp deleted file mode 100644 index 083c5aec5..000000000 --- a/c/reg_test/input/multi-ips.dkvp +++ /dev/null @@ -1,2 +0,0 @@ -a: 1 -b: 2 diff --git a/c/reg_test/input/multi-sep.csv-crlf b/c/reg_test/input/multi-sep.csv-crlf deleted file mode 100644 index 3e872842e..000000000 --- a/c/reg_test/input/multi-sep.csv-crlf +++ /dev/null @@ -1,6 +0,0 @@ -a/,b/,i/,x/,y/ -wye/,eks/,0/,0.641593543645736508/,0.262688053894177098 -eks/,zee/,1/,0.827614412562742041/,0.715431942006308552 -zee/,zee/,2/,0.923068348748175560/,0.009737410587136359 -zee/,pan/,3/,0.000047786161325772/,0.803142013402256216 -zee/,hat/,4/,0.676537984365847889/,0.573903236805416328 diff --git a/c/reg_test/input/multi-sep.dkvp-crlf b/c/reg_test/input/multi-sep.dkvp-crlf deleted file mode 100644 index 3106a2eaa..000000000 --- a/c/reg_test/input/multi-sep.dkvp-crlf +++ /dev/null @@ -1,5 +0,0 @@ -a=:wye/,b=:eks/,i=:0/,x=:0.641593543645736508/,y=:0.262688053894177098 -a=:eks/,b=:zee/,i=:1/,x=:0.827614412562742041/,y=:0.715431942006308552 -a=:zee/,b=:zee/,i=:2/,x=:0.923068348748175560/,y=:0.009737410587136359 -a=:zee/,b=:pan/,i=:3/,x=:0.000047786161325772/,y=:0.803142013402256216 -a=:zee/,b=:hat/,i=:4/,x=:0.676537984365847889/,y=:0.573903236805416328 diff --git a/c/reg_test/input/near-ovf.dkvp b/c/reg_test/input/near-ovf.dkvp deleted file mode 100644 index 2a4a1a154..000000000 --- a/c/reg_test/input/near-ovf.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -x=9223372036854775806,y=-9223372036854775805 -x=9223372036854775804,y=-9223372036854775804 -x=9223372036854775801,y=-9223372036854775801 -x=9223372036854775807,y=-9223372036854775803 -x=9223372036854775803,y=-9223372036854775807 -x=9223372036854775802,y=-9223372036854775806 -x=9223372036854775805,y=-9223372036854775802 diff --git a/c/reg_test/input/nest-explode-vary-fs-ps.dkvp b/c/reg_test/input/nest-explode-vary-fs-ps.dkvp deleted file mode 100644 index 29dfd2935..000000000 --- a/c/reg_test/input/nest-explode-vary-fs-ps.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=a=1|b=2|c=3,y=d=40 -x=,y=d=50 -u=100,y=d=60 -x=a=4|b=5,y=d=70 diff --git a/c/reg_test/input/nest-explode.dkvp b/c/reg_test/input/nest-explode.dkvp deleted file mode 100644 index 947de22fb..000000000 --- a/c/reg_test/input/nest-explode.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=a:1;b:2;c:3,y=d:40 -x=,y=d:50 -u=100,y=d:60 -x=a:4;b:5,y=d:70 diff --git a/c/reg_test/input/null-fields.csv b/c/reg_test/input/null-fields.csv deleted file mode 100644 index 8ddbe5849..000000000 --- a/c/reg_test/input/null-fields.csv +++ /dev/null @@ -1,6 +0,0 @@ -a,b,c,d,e -1,2,3,4,5 -6,,,,10 -,,,11,12 -13,14,,, -,,,, diff --git a/c/reg_test/input/null-fields.nidx b/c/reg_test/input/null-fields.nidx deleted file mode 100644 index c807ef426..000000000 --- a/c/reg_test/input/null-fields.nidx +++ /dev/null @@ -1,5 +0,0 @@ -a,b,c,d,e -f,,,,g -,,,h,i -j,k,,, -,,,, diff --git a/c/reg_test/input/null-vs-empty.dkvp b/c/reg_test/input/null-vs-empty.dkvp deleted file mode 100644 index 5514f32f1..000000000 --- a/c/reg_test/input/null-vs-empty.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -x=1,y=2,s=hello -x=1,y=,s= -x=,y=,s=hurrah diff --git a/c/reg_test/input/nullvals.dkvp b/c/reg_test/input/nullvals.dkvp deleted file mode 100644 index 2f78356da..000000000 --- a/c/reg_test/input/nullvals.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -a=b,x=1,y=2,z= -a=b,x=3,y=4,z= -a=b,x=5,y=,z= -a=b,x=,y=6,z= -a=b,x=,y=,z= diff --git a/c/reg_test/input/ofmt.dat b/c/reg_test/input/ofmt.dat deleted file mode 100644 index 8dcb51414..000000000 --- a/c/reg_test/input/ofmt.dat +++ /dev/null @@ -1,3 +0,0 @@ -x=1 -x=2 -x=3 diff --git a/c/reg_test/input/page-aligned-final-ifs.dkvp b/c/reg_test/input/page-aligned-final-ifs.dkvp deleted file mode 100644 index 40c7406eb..000000000 --- a/c/reg_test/input/page-aligned-final-ifs.dkvp +++ /dev/null @@ -1,64 +0,0 @@ -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z= \ No newline at end of file diff --git a/c/reg_test/input/page-aligned-final-irs.dkvp b/c/reg_test/input/page-aligned-final-irs.dkvp deleted file mode 100644 index 7b4e5a15d..000000000 --- a/c/reg_test/input/page-aligned-final-irs.dkvp +++ /dev/null @@ -1,64 +0,0 @@ -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc diff --git a/c/reg_test/input/page-aligned-final-no-ifs.dkvp b/c/reg_test/input/page-aligned-final-no-ifs.dkvp deleted file mode 100644 index e682c78ee..000000000 --- a/c/reg_test/input/page-aligned-final-no-ifs.dkvp +++ /dev/null @@ -1,64 +0,0 @@ -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z \ No newline at end of file diff --git a/c/reg_test/input/page-aligned-no-final-eol.xtab b/c/reg_test/input/page-aligned-no-final-eol.xtab deleted file mode 100644 index 6606a6e4a..000000000 --- a/c/reg_test/input/page-aligned-no-final-eol.xtab +++ /dev/null @@ -1,255 +0,0 @@ -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 33333333333333333333 - -aaaaaaaaaaaaaaaaaaaa 111111111111111111111 -bbbbbbbbbbbbbbbbbbbb 22222222222222222222 -cccccccccccccccccccc 3333333333333333333333 \ No newline at end of file diff --git a/c/reg_test/input/page-aligned-no-final-irs.csvl b/c/reg_test/input/page-aligned-no-final-irs.csvl deleted file mode 100644 index 284a9a07a..000000000 --- a/c/reg_test/input/page-aligned-no-final-irs.csvl +++ /dev/null @@ -1,64 +0,0 @@ -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,ccccccccccccccccccccccccccccccccccccccccccc -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333 \ No newline at end of file diff --git a/c/reg_test/input/page-aligned-no-final-irs.dkvp b/c/reg_test/input/page-aligned-no-final-irs.dkvp deleted file mode 100644 index 976c76d3f..000000000 --- a/c/reg_test/input/page-aligned-no-final-irs.dkvp +++ /dev/null @@ -1,64 +0,0 @@ -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=cccccccccccccccccccccccccccccccccccccccccccccccc -x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,y=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,z=ccccccccccccccccccccccccccccccccccccccccccccccccc \ No newline at end of file diff --git a/c/reg_test/input/page-aligned-no-final-irs.nidx b/c/reg_test/input/page-aligned-no-final-irs.nidx deleted file mode 100644 index d9cbe5b19..000000000 --- a/c/reg_test/input/page-aligned-no-final-irs.nidx +++ /dev/null @@ -1,64 +0,0 @@ -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,3333333333333333333333333333333333333333333 -11111111111111111111111111111111111111,22222222222222222222222222222222222222222222,33333333333333333333333333333333333333333333 \ No newline at end of file diff --git a/c/reg_test/input/put-example.dsl b/c/reg_test/input/put-example.dsl deleted file mode 100644 index 90442b2e1..000000000 --- a/c/reg_test/input/put-example.dsl +++ /dev/null @@ -1,2 +0,0 @@ -$xy = $x * $y; -$ab = $a . $b diff --git a/c/reg_test/input/put-script-piece-1 b/c/reg_test/input/put-script-piece-1 deleted file mode 100644 index ba74f6285..000000000 --- a/c/reg_test/input/put-script-piece-1 +++ /dev/null @@ -1,4 +0,0 @@ -subr s(a,b) { - $[a] = b; - $DID = "YES"; -} diff --git a/c/reg_test/input/put-script-piece-2 b/c/reg_test/input/put-script-piece-2 deleted file mode 100644 index a24ef660f..000000000 --- a/c/reg_test/input/put-script-piece-2 +++ /dev/null @@ -1,3 +0,0 @@ -func f(x,y,z) { - return x + y + z -} diff --git a/c/reg_test/input/put-script-piece-3 b/c/reg_test/input/put-script-piece-3 deleted file mode 100644 index 16eb874ab..000000000 --- a/c/reg_test/input/put-script-piece-3 +++ /dev/null @@ -1,2 +0,0 @@ -$o = f($x, $y, $i); -call s("W", NR); diff --git a/c/reg_test/input/quote-original.csv b/c/reg_test/input/quote-original.csv deleted file mode 100644 index bf529106b..000000000 --- a/c/reg_test/input/quote-original.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,2,3 -4,"5",6 -"7",8,"9" diff --git a/c/reg_test/input/regex.dkvp b/c/reg_test/input/regex.dkvp deleted file mode 100644 index 78962a9f9..000000000 --- a/c/reg_test/input/regex.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -x=abc,y=def -x=ABC,y=DEF -x=abcd,y=ghi -x=ABCD,y=GHI -x=abcde,y=ghi -x=ABCDE,y=GHI -x=ABCDE,y="GHI" diff --git a/c/reg_test/input/regularize.dkvp b/c/reg_test/input/regularize.dkvp deleted file mode 100644 index 196c52b5c..000000000 --- a/c/reg_test/input/regularize.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=1,c=2,b=3 -e=4,d=5 -c=7,a=6,b=8 diff --git a/c/reg_test/input/reorder.dkvp b/c/reg_test/input/reorder.dkvp deleted file mode 100644 index 68c21d7c0..000000000 --- a/c/reg_test/input/reorder.dkvp +++ /dev/null @@ -1 +0,0 @@ -s=1,t=2,u=3,v=4,w=5,x=6,y=7,z=8 diff --git a/c/reg_test/input/repeat-input.dat b/c/reg_test/input/repeat-input.dat deleted file mode 100644 index a644162e1..000000000 --- a/c/reg_test/input/repeat-input.dat +++ /dev/null @@ -1,4 +0,0 @@ -a=1,b=2,c=3 -a=3,b=4,c=5 -a=6,b=,c=7 -a=8,x=,c=9 diff --git a/c/reg_test/input/reshape-long-ragged.dkvp b/c/reg_test/input/reshape-long-ragged.dkvp deleted file mode 100644 index f08ce45dc..000000000 --- a/c/reg_test/input/reshape-long-ragged.dkvp +++ /dev/null @@ -1,8 +0,0 @@ -time=2009-01-01,item=X,value=0.65473572 -time=2009-01-01,item=Y,value=2.4520609 -time=2009-01-01,item=Z,value=-1.46570942 -time=2009-01-02,item=X,value=-0.89248112 -time=2009-01-02,item=Y,value=0.2154713 -time=2009-01-03,item=X,value=0.98012375 -time=2009-01-04 -time=2009-01-05,U=1.3477511,V=0.09719105,item=X,value=2.19357813 diff --git a/c/reg_test/input/reshape-long.tbl b/c/reg_test/input/reshape-long.tbl deleted file mode 100644 index e5acd8134..000000000 --- a/c/reg_test/input/reshape-long.tbl +++ /dev/null @@ -1,16 +0,0 @@ -time item price -2009-01-01 X 0.65473572 -2009-01-01 Y 2.4520609 -2009-01-01 Z -1.46570942 -2009-01-02 X -0.89248112 -2009-01-02 Y 0.2154713 -2009-01-02 Z -2.05357735 -2009-01-03 X 0.98012375 -2009-01-03 Y 1.3179287 -2009-01-03 Z 4.64248357 -2009-01-04 X 0.35397376 -2009-01-04 Y 3.3765645 -2009-01-04 Z -0.25237774 -2009-01-05 X 2.19357813 -2009-01-05 Y 1.3477511 -2009-01-05 Z 0.09719105 diff --git a/c/reg_test/input/reshape-wide-ragged.dkvp b/c/reg_test/input/reshape-wide-ragged.dkvp deleted file mode 100644 index 7d2a6c5cb..000000000 --- a/c/reg_test/input/reshape-wide-ragged.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -time=2009-01-01,X=0.65473572,Y=2.4520609,Z=-1.46570942 -time=2009-01-02,X=-0.89248112,Y=0.2154713 -time=2009-01-03,X=0.98012375 -time=2009-01-04 -time=2009-01-05,X=2.19357813,U=1.3477511,V=0.09719105 diff --git a/c/reg_test/input/reshape-wide.tbl b/c/reg_test/input/reshape-wide.tbl deleted file mode 100644 index e8e19e283..000000000 --- a/c/reg_test/input/reshape-wide.tbl +++ /dev/null @@ -1,6 +0,0 @@ -time X Y Z -2009-01-01 0.65473572 2.4520609 -1.46570942 -2009-01-02 -0.89248112 0.2154713 -2.05357735 -2009-01-03 0.98012375 1.3179287 4.64248357 -2009-01-04 0.35397376 3.3765645 -0.25237774 -2009-01-05 2.19357813 1.3477511 0.09719105 diff --git a/c/reg_test/input/rfc-csv/Makefile.am b/c/reg_test/input/rfc-csv/Makefile.am deleted file mode 100644 index 7b4d83579..000000000 --- a/c/reg_test/input/rfc-csv/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -EXTRA_DIST= \ - modify-defaults.csv \ - narrow-truncated.csv \ - narrow.csv \ - quoted-comma-truncated.csv \ - quoted-comma.csv \ - quoted-crlf-truncated.csv \ - quoted-crlf.csv \ - simple-truncated.csv \ - simple.csv-crlf diff --git a/c/reg_test/input/rfc-csv/Makefile.in b/c/reg_test/input/rfc-csv/Makefile.in deleted file mode 100644 index 9bb72064a..000000000 --- a/c/reg_test/input/rfc-csv/Makefile.in +++ /dev/null @@ -1,449 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/reg_test/input/rfc-csv -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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 -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -EXTRA_DIST = \ - modify-defaults.csv \ - narrow-truncated.csv \ - narrow.csv \ - quoted-comma-truncated.csv \ - quoted-comma.csv \ - quoted-crlf-truncated.csv \ - quoted-crlf.csv \ - simple-truncated.csv \ - simple.csv-crlf - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(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 c/reg_test/input/rfc-csv/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/reg_test/input/rfc-csv/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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: $(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 mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -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 \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool 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 - - -# 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: diff --git a/c/reg_test/input/rfc-csv/modify-defaults.csv b/c/reg_test/input/rfc-csv/modify-defaults.csv deleted file mode 100644 index 8278f303a..000000000 --- a/c/reg_test/input/rfc-csv/modify-defaults.csv +++ /dev/null @@ -1,3 +0,0 @@ -a;b;c -1;2;3 -4;;6 diff --git a/c/reg_test/input/rfc-csv/narrow-truncated.csv b/c/reg_test/input/rfc-csv/narrow-truncated.csv deleted file mode 100644 index 263255620..000000000 --- a/c/reg_test/input/rfc-csv/narrow-truncated.csv +++ /dev/null @@ -1,5 +0,0 @@ -a -1 -2 -3 -4 \ No newline at end of file diff --git a/c/reg_test/input/rfc-csv/narrow.csv b/c/reg_test/input/rfc-csv/narrow.csv deleted file mode 100644 index 5d936c78d..000000000 --- a/c/reg_test/input/rfc-csv/narrow.csv +++ /dev/null @@ -1,5 +0,0 @@ -a -1 -2 -3 -4 diff --git a/c/reg_test/input/rfc-csv/quoted-comma-truncated.csv b/c/reg_test/input/rfc-csv/quoted-comma-truncated.csv deleted file mode 100644 index 14a38de9e..000000000 --- a/c/reg_test/input/rfc-csv/quoted-comma-truncated.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,"b",c -1,"x,3",y -4,5,6 \ No newline at end of file diff --git a/c/reg_test/input/rfc-csv/quoted-comma.csv b/c/reg_test/input/rfc-csv/quoted-comma.csv deleted file mode 100644 index a981534a8..000000000 --- a/c/reg_test/input/rfc-csv/quoted-comma.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,"b",c -1,"x,3",y -4,5,6 diff --git a/c/reg_test/input/rfc-csv/quoted-crlf-truncated.csv b/c/reg_test/input/rfc-csv/quoted-crlf-truncated.csv deleted file mode 100644 index bb0ca0ee2..000000000 --- a/c/reg_test/input/rfc-csv/quoted-crlf-truncated.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,"b",c -1,"x -3",y -4,5,6 \ No newline at end of file diff --git a/c/reg_test/input/rfc-csv/quoted-crlf.csv b/c/reg_test/input/rfc-csv/quoted-crlf.csv deleted file mode 100644 index 672da35c7..000000000 --- a/c/reg_test/input/rfc-csv/quoted-crlf.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,"b",c -1,"x -3",y -4,5,6 diff --git a/c/reg_test/input/rfc-csv/simple-truncated.csv b/c/reg_test/input/rfc-csv/simple-truncated.csv deleted file mode 100644 index da5a963fa..000000000 --- a/c/reg_test/input/rfc-csv/simple-truncated.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,"b",c -1,x,3 -4,5,6 \ No newline at end of file diff --git a/c/reg_test/input/rfc-csv/simple.csv-crlf b/c/reg_test/input/rfc-csv/simple.csv-crlf deleted file mode 100644 index 6d960dd46..000000000 --- a/c/reg_test/input/rfc-csv/simple.csv-crlf +++ /dev/null @@ -1,4 +0,0 @@ -a,"b",c -1,x,3 -4,5,6 -"x","y""yy","z" diff --git a/c/reg_test/input/scinot.dkvp b/c/reg_test/input/scinot.dkvp deleted file mode 100644 index fede625cb..000000000 --- a/c/reg_test/input/scinot.dkvp +++ /dev/null @@ -1,26 +0,0 @@ -x=123 -x=123. -x=123.4 -x=.234 -x=1e2 -x=1e-2 -x=1.2e3 -x=1.e3 -x=1.2e-3 -x=1.e-3 -x=.2e3 -x=.2e-3 -x=1.e-3 -x=-123 -x=-123. -x=-123.4 -x=-.234 -x=-1e2 -x=-1e-2 -x=-1.2e3 -x=-1.e3 -x=-1.2e-3 -x=-1.e-3 -x=-.2e3 -x=-.2e-3 -x=-1.e-3 diff --git a/c/reg_test/input/scinot1.dkvp b/c/reg_test/input/scinot1.dkvp deleted file mode 100644 index dbb572dbd..000000000 --- a/c/reg_test/input/scinot1.dkvp +++ /dev/null @@ -1 +0,0 @@ -i=1 diff --git a/c/reg_test/input/sec2gmt b/c/reg_test/input/sec2gmt deleted file mode 100644 index 740950b9b..000000000 --- a/c/reg_test/input/sec2gmt +++ /dev/null @@ -1,26 +0,0 @@ -n,sec -1,0 -2,1 -3,10 -4,100 -5,1000 -6,10000 -7,100000 -8,1000000 -9,10000000 -10,100000000 -11,1000000000 -12,1432036180 -13,1500000000 -14,2000000000 -15,2000000000. -16,2000000000.0 -17,2000000000.00 -18,2000000000.123400 -19,2000000000.123456 -20,2000000000.999 -21,2000000000.999999 -22,2000000000.999999999 -23, -24,x -25,123x diff --git a/c/reg_test/input/sec2xhms b/c/reg_test/input/sec2xhms deleted file mode 100644 index 1679c2060..000000000 --- a/c/reg_test/input/sec2xhms +++ /dev/null @@ -1,27 +0,0 @@ -sec=0 -sec=1 -sec=59 -sec=60 -sec=61 -sec=3599 -sec=3600 -sec=3601 -sec=86399 -sec=86400 -sec=86401 -sec=863999 -sec=864000 -sec=864001 -sec=-1 -sec=-59 -sec=-60 -sec=-61 -sec=-3599 -sec=-3600 -sec=-3601 -sec=-86399 -sec=-86400 -sec=-86401 -sec=-863999 -sec=-864000 -sec=-864001 diff --git a/c/reg_test/input/short b/c/reg_test/input/short deleted file mode 100644 index 32e581cae..000000000 --- a/c/reg_test/input/short +++ /dev/null @@ -1,3 +0,0 @@ -a=1 -b=2 -c=3 diff --git a/c/reg_test/input/short-circuit.dkvp b/c/reg_test/input/short-circuit.dkvp deleted file mode 100644 index 9c67de9d5..000000000 --- a/c/reg_test/input/short-circuit.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -x=1,a="hello" -x=2,a="there" -x=3,a="world" diff --git a/c/reg_test/input/sieve.mlr b/c/reg_test/input/sieve.mlr deleted file mode 100644 index 341e5c977..000000000 --- a/c/reg_test/input/sieve.mlr +++ /dev/null @@ -1,21 +0,0 @@ -# Sieve of Eratosthenes: simple example of Miller DSL as programming language. -begin { - @n = 100; -} -end { - for (int i = 0; i <= @n; i += 1) { - @s[i] = true; - } - @s[0] = false; - @s[1] = false; - for (int i = 2; i <= @n; i += 1) { - for (int j = i+i; j <= @n; j += i) { - @s[j] = false; - } - } - for (int i = 0; i <= @n; i += 1) { - if (@s[i]) { - print i; - } - } -} diff --git a/c/reg_test/input/simple.tsv b/c/reg_test/input/simple.tsv deleted file mode 100644 index 3db900504..000000000 --- a/c/reg_test/input/simple.tsv +++ /dev/null @@ -1,6 +0,0 @@ -a b i x y -pan pan 1 2 0.989945 -eks pan 2 1 0.775159 -wye wye 3 1 0.761642 -eks wye 4 5 0.322934 -wye pan 5 5 0.448283 diff --git a/c/reg_test/input/small b/c/reg_test/input/small deleted file mode 100644 index 547de9e99..000000000 --- a/c/reg_test/input/small +++ /dev/null @@ -1,10 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 diff --git a/c/reg_test/input/small-nested.json b/c/reg_test/input/small-nested.json deleted file mode 100644 index 5a02dea93..000000000 --- a/c/reg_test/input/small-nested.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "z": { - "pan": { - "1": 0.726803, - "0": 0.952618 - }, - "eks": { - "0": 0.134189, - "1": 0.187885 - }, - "wye": { - "1": 0.863624 - }, - "zee": { - "0": 0.976181 - }, - "hat": { - "1": 0.749551 - } - } -} diff --git a/c/reg_test/input/small-non-nested-wrapped.json b/c/reg_test/input/small-non-nested-wrapped.json deleted file mode 100644 index e9551ad2b..000000000 --- a/c/reg_test/input/small-non-nested-wrapped.json +++ /dev/null @@ -1,12 +0,0 @@ -[ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -,{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -,{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -,{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -,{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -,{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -,{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -,{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -,{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -,{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } -] diff --git a/c/reg_test/input/small-non-nested.json b/c/reg_test/input/small-non-nested.json deleted file mode 100644 index 3bba0e8d7..000000000 --- a/c/reg_test/input/small-non-nested.json +++ /dev/null @@ -1,10 +0,0 @@ -{ "a": "pan", "b": "pan", "i": 1, "x": 0.3467901443380824, "y": 0.7268028627434533 } -{ "a": "eks", "b": "pan", "i": 2, "x": 0.7586799647899636, "y": 0.5221511083334797 } -{ "a": "wye", "b": "wye", "i": 3, "x": 0.20460330576630303, "y": 0.33831852551664776 } -{ "a": "eks", "b": "wye", "i": 4, "x": 0.38139939387114097, "y": 0.13418874328430463 } -{ "a": "wye", "b": "pan", "i": 5, "x": 0.5732889198020006, "y": 0.8636244699032729 } -{ "a": "zee", "b": "pan", "i": 6, "x": 0.5271261600918548, "y": 0.49322128674835697 } -{ "a": "eks", "b": "zee", "i": 7, "x": 0.6117840605678454, "y": 0.1878849191181694 } -{ "a": "zee", "b": "wye", "i": 8, "x": 0.5985540091064224, "y": 0.976181385699006 } -{ "a": "hat", "b": "wye", "i": 9, "x": 0.03144187646093577, "y": 0.7495507603507059 } -{ "a": "pan", "b": "wye", "i": 10, "x": 0.5026260055412137, "y": 0.9526183602969864 } diff --git a/c/reg_test/input/sort-het.dkvp b/c/reg_test/input/sort-het.dkvp deleted file mode 100644 index 0896145f4..000000000 --- a/c/reg_test/input/sort-het.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=2 -a=3 -x=4 -x=1 diff --git a/c/reg_test/input/sort-within-records.dkvp b/c/reg_test/input/sort-within-records.dkvp deleted file mode 100644 index 6808bd9be..000000000 --- a/c/reg_test/input/sort-within-records.dkvp +++ /dev/null @@ -1,10 +0,0 @@ -b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,a=pan -i=2,x=0.7586799647899636,y=0.5221511083334797,b=pan,a=eks -y=0.33831852551664776,b=wye,i=3,a=wye,x=0.20460330576630303 -x=0.38139939387114097,b=wye,i=4,a=eks,y=0.13418874328430463 -y=0.8636244699032729,a=wye,x=0.5732889198020006,i=5,b=pan -y=0.49322128674835697,i=6,a=zee,b=pan,x=0.5271261600918548 -a=eks,i=7,b=zee,x=0.6117840605678454,y=0.1878849191181694 -x=0.5985540091064224,b=wye,i=8,a=zee,y=0.976181385699006 -i=9,a=hat,b=wye,x=0.03144187646093577,y=0.7495507603507059 -y=0.9526183602969864,x=0.5026260055412137,a=pan,i=10,b=wye diff --git a/c/reg_test/input/space-pad.dkvp b/c/reg_test/input/space-pad.dkvp deleted file mode 100644 index 0e2548268..000000000 --- a/c/reg_test/input/space-pad.dkvp +++ /dev/null @@ -1,2 +0,0 @@ - a=1 b=2 - c=3 diff --git a/c/reg_test/input/space-pad.nidx b/c/reg_test/input/space-pad.nidx deleted file mode 100644 index 8a79d5a2b..000000000 --- a/c/reg_test/input/space-pad.nidx +++ /dev/null @@ -1,2 +0,0 @@ - a b c - d e f diff --git a/c/reg_test/input/space-pad.pprint b/c/reg_test/input/space-pad.pprint deleted file mode 100644 index 57a791b6f..000000000 --- a/c/reg_test/input/space-pad.pprint +++ /dev/null @@ -1,2 +0,0 @@ - a b c - 1 2 3 diff --git a/c/reg_test/input/string-numeric-ordering.dkvp b/c/reg_test/input/string-numeric-ordering.dkvp deleted file mode 100644 index 9a2a83b54..000000000 --- a/c/reg_test/input/string-numeric-ordering.dkvp +++ /dev/null @@ -1,6 +0,0 @@ -x=1,y=1,z=a -x=1.5,y=1.5,z=b -x=a,y=2,z=c -x=2,y=3,z=d -x=2.5,y=3.5,z=e -x=b,y=4,z=f diff --git a/c/reg_test/input/sub.dat b/c/reg_test/input/sub.dat deleted file mode 100644 index 0de6d76c2..000000000 --- a/c/reg_test/input/sub.dat +++ /dev/null @@ -1,4 +0,0 @@ -x=hello -x=HELLO -x=world -x=WORLD diff --git a/c/reg_test/input/subtab.dkvp b/c/reg_test/input/subtab.dkvp deleted file mode 100644 index 3ccf184ed..000000000 --- a/c/reg_test/input/subtab.dkvp +++ /dev/null @@ -1,6 +0,0 @@ -x=afoob -x=a\tb -x=a\\tb -x=a b -z= -x= diff --git a/c/reg_test/input/subtab1.mlr b/c/reg_test/input/subtab1.mlr deleted file mode 100644 index 2bcf47a8b..000000000 --- a/c/reg_test/input/subtab1.mlr +++ /dev/null @@ -1 +0,0 @@ -$y=sub($x, "\t", "TAB") diff --git a/c/reg_test/input/subtab2.mlr b/c/reg_test/input/subtab2.mlr deleted file mode 100644 index 01ca19654..000000000 --- a/c/reg_test/input/subtab2.mlr +++ /dev/null @@ -1 +0,0 @@ -$y=sub($x, "\\t", "TAB") diff --git a/c/reg_test/input/subtab3.mlr b/c/reg_test/input/subtab3.mlr deleted file mode 100644 index de941812e..000000000 --- a/c/reg_test/input/subtab3.mlr +++ /dev/null @@ -1 +0,0 @@ -$y=sub($x, "\t", "\t") diff --git a/c/reg_test/input/subtab4.mlr b/c/reg_test/input/subtab4.mlr deleted file mode 100644 index 5e04f1d08..000000000 --- a/c/reg_test/input/subtab4.mlr +++ /dev/null @@ -1 +0,0 @@ -$y=sub($x, "\\t", "\t") diff --git a/c/reg_test/input/test-dsl-stack-allocation.mlr b/c/reg_test/input/test-dsl-stack-allocation.mlr deleted file mode 100644 index 745d02679..000000000 --- a/c/reg_test/input/test-dsl-stack-allocation.mlr +++ /dev/null @@ -1,164 +0,0 @@ -# ================================================================ -# See comments in test_dsl_stack.c for details what is being tested here. -# ================================================================ - -# ---------------------------------------------------------------- -func f(a,b,c) { - @v[NR] = NR*1000; - true { - var val = nonesuch; - while (1 == 1) { - if (NR == 1) { - for (k, v in $*) { - val = v.":".a.":".b.":".c; - print "f:1:val:".val; - } - } elif (NR == 2) { - for (k in @v) { - print "f:2:k:".k; - } - } elif (NR == 3) { - for (k, v in @v) { - print "f:3:k:".k."v:".v; - } - } elif (NR == 4) { - var sum = 0; - for (var i = 1; i <= 10; i += 1) { - for (var j = 1; j <= 10; j += 1) { - sum += i*j; - } - } - val = sum; - print "f:val:".val; - } - break; - } - } -} - -# ---------------------------------------------------------------- -subr s(a,b,c) { - @v[NR] = NR*2000; - true { - var val = nonesuch; - while (1 == 1) { - if (NR == 1) { - for (k, v in $*) { - val = v.":".a.":".b.":".c; - print "s:1:val:".val; - } - } elif (NR == 2) { - for (k in @v) { - print "s:2:k:".k; - } - } elif (NR == 3) { - for (k, v in @v) { - print "s:3:k:".k."v:".v; - } - } elif (NR == 4) { - var sum = 0; - for (var i = 1; i <= 10; i += 1) { - for (var j = 1; j <= 10; j += 1) { - sum += i*j; - } - } - val = sum; - print "s:val:".val; - } - break; - } - } -} - -# ---------------------------------------------------------------- -begin { - print "BEGIN"; - @v[0] = 456; - true { - var val = nonesuch; - for (var idx = 1; idx <= 4; idx += 1) { - if (idx == 2) { - for (k in @v) { - print "b:2:k:".k; - } - } elif (idx == 3) { - for (k, v in @v) { - print "b:3:k:".k."v:".v; - } - } elif (idx == 4) { - var sum = 0; - for (var i = 1; i <= 10; i += 1) { - for (var j = 1; j <= 10; j += 1) { - sum += i*j; - } - } - val = sum; - print "b:val:".val; - } - } - } -} - -# ---------------------------------------------------------------- -print "MAIN"; -@v[NR] = NR*4000; -true { - var val = nonesuch; - while (1 == 1) { - if (NR == 1) { - for (k, v in $*) { - val = v; - print "m:1:val:".val; - } - } elif (NR == 2) { - for (k in @v) { - print "m:2:k:".k; - } - } elif (NR == 3) { - for (k, v in @v) { - print "m:3:k:".k."v:".v; - } - } elif (NR == 4) { - var sum = 0; - for (var i = 1; i <= 10; i += 1) { - for (var j = 1; j <= 10; j += 1) { - sum += i*j; - } - } - val = sum; - print "m:val:".val; - } - break; - } -} -$o = f(NR, $a, $y); -call s($b, NR, $i**2); - -# ---------------------------------------------------------------- -end { - print "END"; - @v[100] = 789; - true { - var val = nonesuch; - for (var idx = 1; idx <= 4; idx += 1) { - if (idx == 2) { - for (k in @v) { - print "e:2:k:".k; - } - } elif (idx == 3) { - for (k, v in @v) { - print "e:3:k:".k."v:".v; - } - } elif (idx == 4) { - var sum = 0; - for (var i = 1; i <= 10; i += 1) { - for (var j = 1; j <= 10; j += 1) { - sum += i*j; - } - } - val = sum; - print "e:val:".val; - } - } - } -} diff --git a/c/reg_test/input/truncated.csv b/c/reg_test/input/truncated.csv deleted file mode 100644 index 83d4cdde1..000000000 --- a/c/reg_test/input/truncated.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,2,3 -4,5,6 -7,8,9 \ No newline at end of file diff --git a/c/reg_test/input/truncated.dkvp b/c/reg_test/input/truncated.dkvp deleted file mode 100644 index be211cc0e..000000000 --- a/c/reg_test/input/truncated.dkvp +++ /dev/null @@ -1,2 +0,0 @@ -a=1,b=2 -c=3 \ No newline at end of file diff --git a/c/reg_test/input/truncated.nidx b/c/reg_test/input/truncated.nidx deleted file mode 100644 index f84ebb389..000000000 --- a/c/reg_test/input/truncated.nidx +++ /dev/null @@ -1,2 +0,0 @@ -1 2 3 -4 5 \ No newline at end of file diff --git a/c/reg_test/input/truncated.pprint b/c/reg_test/input/truncated.pprint deleted file mode 100644 index 738b2acfb..000000000 --- a/c/reg_test/input/truncated.pprint +++ /dev/null @@ -1,4 +0,0 @@ -a b c -1 2 3 -4 5 6 -7 8 9 \ No newline at end of file diff --git a/c/reg_test/input/truncated.xtab-crlf b/c/reg_test/input/truncated.xtab-crlf deleted file mode 100644 index 215b66017..000000000 --- a/c/reg_test/input/truncated.xtab-crlf +++ /dev/null @@ -1,6 +0,0 @@ -a 1 -b 2 -c 3 - -d 4 -e 5 \ No newline at end of file diff --git a/c/reg_test/input/typeof.dkvp b/c/reg_test/input/typeof.dkvp deleted file mode 100644 index b77a1635f..000000000 --- a/c/reg_test/input/typeof.dkvp +++ /dev/null @@ -1,12 +0,0 @@ -x=1,y=2 -x=1,y= -x=,y=2 -x=,y= -a=1,y=2 -a=1,y= -a=,y=2 -a=,y= -x=1,b=2 -x=1,b= -x=,b=2 -x=,b= diff --git a/c/reg_test/input/unset1.dkvp b/c/reg_test/input/unset1.dkvp deleted file mode 100644 index f8ad178b3..000000000 --- a/c/reg_test/input/unset1.dkvp +++ /dev/null @@ -1 +0,0 @@ -a=1,b=2,x=9 diff --git a/c/reg_test/input/unset4.dkvp b/c/reg_test/input/unset4.dkvp deleted file mode 100644 index 80250e5ea..000000000 --- a/c/reg_test/input/unset4.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -a=1,b=2,x=9 -a=1,b=3,x=9 -a=4,b=5,x=9 -a=4,b=6,x=9 diff --git a/c/reg_test/input/utf8-1.csv b/c/reg_test/input/utf8-1.csv deleted file mode 100644 index 557ea9326..000000000 --- a/c/reg_test/input/utf8-1.csv +++ /dev/null @@ -1,3 +0,0 @@ -langue,nom,jour -français,françois,vendredi -žusz,éloignée, diff --git a/c/reg_test/input/utf8-2.csv b/c/reg_test/input/utf8-2.csv deleted file mode 100644 index e04a85b8e..000000000 --- a/c/reg_test/input/utf8-2.csv +++ /dev/null @@ -1,2 +0,0 @@ -français,françois,vendredi -langue,nom,jour diff --git a/c/reg_test/input/utf8-align.dkvp b/c/reg_test/input/utf8-align.dkvp deleted file mode 100644 index 925b12366..000000000 --- a/c/reg_test/input/utf8-align.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -191º=test,1912=test2,cois=çais,çois=cais -191º=test,1912=test2,ois=çais,çois=cais -191º=test,1912=test2,coise=çais,çois=cais diff --git a/c/reg_test/input/utf8-align.nidx b/c/reg_test/input/utf8-align.nidx deleted file mode 100644 index 5a3bbe6e6..000000000 --- a/c/reg_test/input/utf8-align.nidx +++ /dev/null @@ -1,4 +0,0 @@ -191º test -191 test2 -francois français -françois francais diff --git a/c/reg_test/input/valgrind.txt b/c/reg_test/input/valgrind.txt deleted file mode 100644 index 649e8f359..000000000 --- a/c/reg_test/input/valgrind.txt +++ /dev/null @@ -1,219 +0,0 @@ -Using mlr executable valgrind --leak-check=full ./reg_test/../../c/mlrg - -mlr cat ./reg_test/input/abixy -Command: ./reg_test/../../c/mlrg cat ./reg_test/input/abixy - ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1366737-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1366737-- Last block truncated in .debug_info; ignoring ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1366737-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1366737-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1366737-- Last block truncated in .debug_info; ignoring ---1366737-- WARNING: Serious error when reading debug info ---1366737-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1366737-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -All heap blocks were freed -- no leaks are possible - -mlr --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -Command: ./reg_test/../../c/mlrg --prepipe cat --odkvp join -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het - ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369394-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369394-- Last block truncated in .debug_info; ignoring ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369394-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369394-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369394-- Last block truncated in .debug_info; ignoring ---1369394-- WARNING: Serious error when reading debug info ---1369394-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369394-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -32 bytes in 1 blocks are definitely lost in loss record 1 of 2 - at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) - by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) - by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) - by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) - by 0x45BEAE: ingest_left_file (mapper_join.c:559) - by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) - by 0x428C4A: chain_map (stream.c:219) - by 0x428BA7: drive_lrec (stream.c:200) - by 0x428B48: do_file_chained (stream.c:189) - by 0x428970: do_stream_chained_to_stdout (stream.c:143) - by 0x4284F3: do_stream_chained (stream.c:34) - by 0x4024B3: main (mlrmain.c:32) - -64 bytes in 1 blocks are definitely lost in loss record 2 of 2 - at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) - by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) - by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) - by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) - by 0x428ABB: do_file_chained (stream.c:177) - by 0x428970: do_stream_chained_to_stdout (stream.c:143) - by 0x4284F3: do_stream_chained (stream.c:34) - by 0x4024B3: main (mlrmain.c:32) - -mlr --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -Command: ./reg_test/../../c/mlrg --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het - ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369398-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369398-- Last block truncated in .debug_info; ignoring ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369398-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369398-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369398-- Last block truncated in .debug_info; ignoring ---1369398-- WARNING: Serious error when reading debug info ---1369398-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369398-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -32 bytes in 1 blocks are definitely lost in loss record 1 of 1 - at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) - by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) - by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) - by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) - by 0x45BEAE: ingest_left_file (mapper_join.c:559) - by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) - by 0x428C4A: chain_map (stream.c:219) - by 0x428BA7: drive_lrec (stream.c:200) - by 0x428B48: do_file_chained (stream.c:189) - by 0x428970: do_stream_chained_to_stdout (stream.c:143) - by 0x4284F3: do_stream_chained (stream.c:34) - by 0x4024B3: main (mlrmain.c:32) - -mlr --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het -Command: ./reg_test/../../c/mlrg --prepipe cat --odkvp join --prepipe cat -j a -f ./reg_test/input/join-het.dkvp ./reg_test/input/abixy-het - ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369400-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369400-- Last block truncated in .debug_info; ignoring ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369400-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369400-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369400-- Last block truncated in .debug_info; ignoring ---1369400-- WARNING: Serious error when reading debug info ---1369400-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369400-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -32 bytes in 1 blocks are definitely lost in loss record 1 of 2 - at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) - by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) - by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) - by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) - by 0x45BEAE: ingest_left_file (mapper_join.c:559) - by 0x45B916: mapper_join_process_unsorted (mapper_join.c:421) - by 0x428C4A: chain_map (stream.c:219) - by 0x428BA7: drive_lrec (stream.c:200) - by 0x428B48: do_file_chained (stream.c:189) - by 0x428970: do_stream_chained_to_stdout (stream.c:143) - by 0x4284F3: do_stream_chained (stream.c:34) - by 0x4024B3: main (mlrmain.c:32) - -64 bytes in 1 blocks are definitely lost in loss record 2 of 2 - at 0x4C26B0F: malloc (in /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so) - by 0x40CE15: mlr_malloc_or_die (mlrutil.c:89) - by 0x42BA54: mlr_alloc_read_line_single_delimiter (line_readers.c:15) - by 0x434B6F: lrec_reader_stdio_dkvp_process_single_irs_single_others_auto_line_term (lrec_reader_stdio_dkvp.c:103) - by 0x428ABB: do_file_chained (stream.c:177) - by 0x428970: do_stream_chained_to_stdout (stream.c:143) - by 0x4284F3: do_stream_chained (stream.c:34) - by 0x4024B3: main (mlrmain.c:32) - -mlr --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json -Command: ./reg_test/../../c/mlrg --json join -s -j x -f ./reg_test/input/multi-format-join-a.json ./reg_test/input/multi-format-join-b.json - ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369430-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369430-- Last block truncated in .debug_info; ignoring ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369430-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369430-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369430-- Last block truncated in .debug_info; ignoring ---1369430-- WARNING: Serious error when reading debug info ---1369430-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369430-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -mlr --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp -Command: ./reg_test/../../c/mlrg --dkvp join -s -j x -f ./reg_test/input/multi-format-join-a.dkvp ./reg_test/input/multi-format-join-b.dkvp - ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369432-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369432-- Last block truncated in .debug_info; ignoring ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369432-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369432-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369432-- Last block truncated in .debug_info; ignoring ---1369432-- WARNING: Serious error when reading debug info ---1369432-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369432-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 - -mlr --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv -Command: ./reg_test/../../c/mlrg --csvlite join -s -j x -f ./reg_test/input/multi-format-join-a.csv ./reg_test/input/multi-format-join-b.csv - ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369435-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369435-- Last block truncated in .debug_info; ignoring ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_core-amd64-linux.so: ---1369435-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369435-- Ignoring non-Dwarf2/3/4 block in .debug_info ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369435-- Last block truncated in .debug_info; ignoring ---1369435-- WARNING: Serious error when reading debug info ---1369435-- When reading debug info from /usr/local/fbcode/gcc-5-glibc-2.23/lib/valgrind/vgpreload_memcheck-amd64-linux.so: ---1369435-- parse_CU_Header: is neither DWARF2 nor DWARF3 nor DWARF4 diff --git a/c/reg_test/input/x0to10.dat b/c/reg_test/input/x0to10.dat deleted file mode 100644 index 9ca10c89d..000000000 --- a/c/reg_test/input/x0to10.dat +++ /dev/null @@ -1,11 +0,0 @@ -x=0 -x=1 -x=2 -x=3 -x=4 -x=5 -x=6 -x=7 -x=8 -x=9 -x=10 diff --git a/c/reg_test/input/xy40.dkvp b/c/reg_test/input/xy40.dkvp deleted file mode 100644 index 83ed5ba19..000000000 --- a/c/reg_test/input/xy40.dkvp +++ /dev/null @@ -1,40 +0,0 @@ -i=1,x=101,y=201 -i=2,x=102,y=202 -i=3,x=103,y=203 -i=4,x=104,y=204 -i=5,x=105,y=205 -i=6,x=106,y=206 -i=7,x=107,y=207 -i=8,x=108,y=208 -i=9,x=109,y=209 -i=10,x=110,y=210 -i=11,x=111,y=211 -i=12,x=112,y=212 -i=13,x=113,y=213 -i=14,x=114,y=214 -i=15,x=115,y=215 -i=16,x=116,y=216 -i=17,x=117,y=217 -i=18,x=118,y=218 -i=19,x=119,y=219 -i=20,x=120,y=220 -i=21,x=121,y=221 -i=22,x=122,y=222 -i=23,x=123,y=223 -i=24,x=124,y=224 -i=25,x=125,y=225 -i=26,x=126,y=226 -i=27,x=127,y=227 -i=28,x=128,y=228 -i=29,x=129,y=229 -i=30,x=130,y=230 -i=31,x=131,y=231 -i=32,x=132,y=232 -i=33,x=133,y=233 -i=34,x=134,y=234 -i=35,x=135,y=235 -i=36,x=136,y=236 -i=37,x=137,y=237 -i=38,x=138,y=238 -i=39,x=139,y=239 -i=40,x=140,y=240 diff --git a/c/reg_test/input/xyz2 b/c/reg_test/input/xyz2 deleted file mode 100644 index 213777c91..000000000 --- a/c/reg_test/input/xyz2 +++ /dev/null @@ -1,2 +0,0 @@ -x=3,y=4,z=5 -x=6,y=7,u=8 diff --git a/c/reg_test/input/xyz345 b/c/reg_test/input/xyz345 deleted file mode 100644 index a3caa8f9a..000000000 --- a/c/reg_test/input/xyz345 +++ /dev/null @@ -1 +0,0 @@ -x=3,y=4,z=5 diff --git a/c/reg_test/run b/c/reg_test/run deleted file mode 100755 index 954b2026a..000000000 --- a/c/reg_test/run +++ /dev/null @@ -1,7387 +0,0 @@ -#!/bin/sh - -# ================================================================ -# MILLER REGRESSION SCRIPT -# -# Miller has some source-code-level unit-test routines -- but the -# vast majority of tests (thousands) are invoked here at the -# command-line level. -# -# Output from various mlr command-line invocations, with prepared -# inputs, is generated and then compared against stored expected -# output. -# ================================================================ - -# ---------------------------------------------------------------- -# Path to mlr executable, which for interactive development is -# simply "./mlr". -# -# For building with autoconf: -# * in-directory build: -# pwd is /path/to/the/tree/c/reg_test -# path to mlr is /path/to/the/tree/c/mlr -# path to reg_test/run is /path/to/the/tree/c/reg_test/run -# -# * out-of-directory ("VPATH") build: -# pwd is /path/to/build/tree/c/reg_test -# path to mlr is /path/to/build/tree/c/mlr -# path to reg_test/run is /path/to/source/tree/c/reg_test/run - -# For building without autoconf: -# pwd is /does/not/matter -# path to mlr is /path/to/the/tree/c/mlr -# path to reg_test/run is /path/to/the/tree/c/reg_test/run - -ourdir=`dirname $0` -srcdir=$ourdir/../.. -pwd=`pwd` - -try1=$pwd/../mlr # For autoconf builds, in-tree or out-of-tree -try2=$srcdir/c/mlr # For non-autoconf builds -if [ -x "$try1" ]; then - path_to_mlr=$try1 -elif [ -x "$try2" ]; then - path_to_mlr=$try2 -else - echo "$0: Could not find path to mlr executable." 1>&2 - echo "Try 1: $try1" 1>&2 - echo "Try 2: $try2" 1>&2 - exit 1 -fi - -# mlr lecat, mlr termcvt, etc. do not accept initial '--no-mmap'. -path_to_mlr_for_auxents="$path_to_mlr" - -if [ "$1" = "--valgrind" ]; then - # Leak-check the test suite. Needs 'make mlrg' first. - # ../tools/clean-valg can be used to filter the output. - path_to_mlr="valgrind --leak-check=full ${path_to_mlr}g" - path_to_mlr_for_auxents="$path_to_mlr" -fi -echo Using mlr executable $path_to_mlr - -# ---------------------------------------------------------------- -# Input/output locations -indir=$ourdir/input -expdir=$ourdir/expected -outdir=$pwd/output-regtest -reloutdir=./output-regtest -outfile=$outdir/out -expfile=$expdir/out - -# ================================================================ -# Functions - -num_completed=0 -num_passed=0 -num_failed=0 - -announce() { - echo >> $outfile - echo "================================================================" >> $outfile - echo "$@" >> $outfile - echo >> $outfile -} - -mention() { - echo >> $outfile - echo ---------------------------------------------------------------- "$@" >> $outfile -} - -# A key feature of this regression script is that it can be invoked from any -# directory. Depending on the directory it's invoked from, the path to the mlr -# executable may vary. Nonetheless for debugging it's crucial that we echo out -# each command being executed. See also diff -I below. -run_mlr() { - # Use just "mlr" for info messages - echo mlr "$@" - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - $path_to_mlr "$@" >> $outfile - status=$? - num_completed=`expr $num_completed + 1` - if [ $status -eq 0 ]; then - num_passed=`expr $num_passed + 1` - else - num_failed=`expr $num_failed + 1` - fi - echo >> $outfile -} - -run_cat() { - echo cat "$@" - echo cat "$@" >> $outfile - cat "$@" >> $outfile - echo >> $outfile -} - -run_mlr_for_auxents() { - # Use just "mlr" for info messages - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - $path_to_mlr_for_auxents "$@" >> $outfile - status=$? - num_completed=`expr $num_completed + 1` - if [ $status -eq 0 ]; then - num_passed=`expr $num_passed + 1` - else - num_failed=`expr $num_failed + 1` - fi -} - -run_mlr_for_auxents_no_output() { - # Use just "mlr" for info messages - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - $path_to_mlr_for_auxents "$@" - status=$? - num_completed=`expr $num_completed + 1` - if [ $status -eq 0 ]; then - num_passed=`expr $num_passed + 1` - else - num_failed=`expr $num_failed + 1` - fi -} - -# Just cats a file while also announcing that fact. -run_cat() { - echo cat "$@" - echo cat "$@" >> $outfile # for diff at end - cat "$@" >> $outfile # for diff at end - echo >> $outfile -} - -mlr_expect_fail() { - # Use just "mlr" for info messages - echo mlr "$@" - echo mlr "$@" >> $outfile - # Use path to mlr for invoking the command - stderr_capture=$( $path_to_mlr "$@" 3>&1 1>&2 2>&3 >>$outfile ) - status=$? - num_completed=`expr $num_completed + 1` - if [ $status -eq 1 ]; then - num_passed=`expr $num_passed + 1` - else - num_failed=`expr $num_failed + 1` - fi - echo "${stderr_capture}" >> $outfile - if [ $status -ne 1 ]; then - echo "Exit status was $status; expected 1." - echo "Exit status was $status; expected 1." >> $outfile - fi - echo >> $outfile -} - -# ================================================================ -# Start of script - -mkdir -p $outdir - -# Don't let the running user's .mlrrc affect the regression test -export MLRRC="__none__" - -rm -rf $outdir -mkdir -p $outdir -touch $outfile -echo - -# ================================================================ -announce STATELESS MAPPERS - -run_mlr cat $indir/abixy -run_mlr cat /dev/null - -run_mlr cat -n $indir/abixy-het -run_mlr cat -N counter $indir/abixy-het - -run_mlr cat -g a,b $indir/abixy-het -run_mlr cat -g a,b $indir/abixy-het - -run_mlr cat -g a,b -n $indir/abixy-het -run_mlr cat -g a,b -N counter $indir/abixy-het - -run_mlr cut -f a,x $indir/abixy -run_mlr cut --complement -f a,x $indir/abixy - -run_mlr cut -r -f c,e $indir/having-fields-regex.dkvp -run_mlr cut -r -f '"C","E"' $indir/having-fields-regex.dkvp -run_mlr cut -r -f '"c"i,"e"' $indir/having-fields-regex.dkvp -run_mlr cut -r -f '"C"i,"E"' $indir/having-fields-regex.dkvp -run_mlr cut -r -x -f c,e $indir/having-fields-regex.dkvp -run_mlr cut -r -x -f '"C","E"' $indir/having-fields-regex.dkvp -run_mlr cut -r -x -f '"C","E"i' $indir/having-fields-regex.dkvp -run_mlr cut -r -x -f '"c","e"i' $indir/having-fields-regex.dkvp - -run_mlr --csvlite cut -r -f '^Name$,^Date_[0-9].*$' $indir/date1.csv $indir/date2.csv - -run_mlr having-fields --at-least a,b $indir/abixy -run_mlr having-fields --at-least a,c $indir/abixy -run_mlr having-fields --at-least a,b,i,x,y $indir/abixy -run_mlr having-fields --which-are a,b,i,x $indir/abixy -run_mlr having-fields --which-are a,b,i,x,y $indir/abixy -run_mlr having-fields --which-are a,b,i,y,x $indir/abixy -run_mlr having-fields --which-are a,b,i,x,w $indir/abixy -run_mlr having-fields --which-are a,b,i,x,y,z $indir/abixy -run_mlr having-fields --at-most a,c $indir/abixy -run_mlr having-fields --at-most a,b,i,x,y $indir/abixy -run_mlr having-fields --at-most a,b,i,x,y,z $indir/abixy - -run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp -run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp -run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"' $indir/having-fields-regex.dkvp -run_mlr having-fields --all-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp -run_mlr having-fields --any-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp -run_mlr having-fields --none-matching '"^[a-z][a-z][a-z]$"i' $indir/having-fields-regex.dkvp - -run_mlr rename b,BEE,x,EKS $indir/abixy -run_mlr rename nonesuch,nonesuch,x,EKS $indir/abixy - -run_mlr label NEW $indir/abixy -run_mlr label a,NEW,c $indir/abixy -run_mlr label 1,2,3,4,5,6,7,8 $indir/abixy -run_mlr label d,x,f $indir/abixy -mlr_expect_fail label d,x,d $indir/abixy - -run_mlr --csvlite rename -r '^Date_[0-9].*$,Date' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r '(.*)e(.*),\1EEE\2' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r '"(.*)e(.*)"i,\1EEE\2' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r -g '"(.*)e(.*)"i,\1EEE\2' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r '^(.a.e)(_.*)?,AA\1BB\2CC' $indir/date1.csv -run_mlr --csvlite rename -r '"e",EEE' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r -g '"e",EEE' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r '"e"i,EEE' $indir/date1.csv $indir/date2.csv -run_mlr --csvlite rename -r -g '"e"i,EEE' $indir/date1.csv $indir/date2.csv - -run_mlr regularize $indir/regularize.dkvp - -run_mlr --opprint bar -f x,y --lo 0 --hi 1 $indir/abixy -run_mlr --opprint bar -f x,y -c c -x x -b b --lo 0.1 --hi 0.9 -w 20 $indir/abixy -run_mlr --opprint bar --auto -f x,y -w 10 $indir/abixy - -run_mlr altkv < 2 > 3' /dev/null -run_mlr filter -v ' 1 > 2 > 3' /dev/null -run_mlr put -v '$x = 1 >= 2 >= 3' /dev/null -run_mlr filter -v ' 1 >= 2 >= 3' /dev/null -run_mlr put -v '$x = 1 < 2 <= 3' /dev/null -run_mlr filter -v ' 1 < 2 <= 3' /dev/null -run_mlr put -v '$x = 1 <= 2 < 3' /dev/null -run_mlr filter -v ' 1 <= 2 < 3' /dev/null - -run_mlr put -v '$x = 1 | 2 | 3' /dev/null -run_mlr filter -v ' 1 | 2 | 3' /dev/null -run_mlr put -v '$x = 1 ^ 2 ^ 3' /dev/null -run_mlr filter -v ' 1 ^ 2 ^ 3' /dev/null -run_mlr put -v '$x = 1 & 2 & 3' /dev/null -run_mlr filter -v ' 1 & 2 & 3' /dev/null -run_mlr put -v '$x = 1 | 2 & 3' /dev/null -run_mlr filter -v ' 1 | 2 & 3' /dev/null -run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null -run_mlr filter -v ' 1 | 2 ^ 3' /dev/null -run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null -run_mlr filter -v ' 1 ^ 2 | 3' /dev/null -run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null -run_mlr filter -v ' 1 ^ 2 & 3' /dev/null -run_mlr put -v '$x = 1 & 2 | 3' /dev/null -run_mlr filter -v ' 1 & 2 | 3' /dev/null -run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null -run_mlr filter -v ' 1 & 2 ^ 3' /dev/null - -run_mlr put -v '$x = 1 << 2 << 3' /dev/null -run_mlr filter -v ' 1 << 2 << 3' /dev/null -run_mlr put -v '$x = 1 >> 2 >> 3' /dev/null -run_mlr filter -v ' 1 >> 2 >> 3' /dev/null -run_mlr put -v '$x = 1 << 2 >> 3' /dev/null -run_mlr filter -v ' 1 << 2 >> 3' /dev/null -run_mlr put -v '$x = 1 >> 2 << 3' /dev/null -run_mlr filter -v ' 1 >> 2 << 3' /dev/null - -run_mlr put -v '$x = 1 + 2 + 3' /dev/null -run_mlr filter -v ' 1 + 2 + 3' /dev/null -run_mlr put -v '$x = 1 - 2 - 3' /dev/null -run_mlr filter -v ' 1 - 2 - 3' /dev/null -run_mlr put -v '$x = 1 + 2 - 3' /dev/null -run_mlr filter -v ' 1 + 2 - 3' /dev/null -run_mlr put -v '$x = 1 - 2 + 3' /dev/null -run_mlr filter -v ' 1 - 2 + 3' /dev/null -run_mlr put -v '$x = 1 . 2 . 3' /dev/null -run_mlr filter -v ' 1 . 2 . 3' /dev/null - -run_mlr put -v '$x = 1 * 2 * 3' /dev/null -run_mlr filter -v ' 1 * 2 * 3' /dev/null -run_mlr put -v '$x = 1 / 2 / 3' /dev/null -run_mlr filter -v ' 1 / 2 / 3' /dev/null -run_mlr put -v '$x = 1 // 2 // 3' /dev/null -run_mlr filter -v ' 1 // 2 // 3' /dev/null -run_mlr put -v '$x = 1 % 2 % 3' /dev/null -run_mlr filter -v ' 1 % 2 % 3' /dev/null -run_mlr put -v '$x = 1 ** 2 ** 3' /dev/null -run_mlr filter -v ' 1 ** 2 ** 3' /dev/null - - -run_mlr put -v '$x = 1 * 2 / 3' /dev/null -run_mlr filter -v ' 1 * 2 / 3' /dev/null -run_mlr put -v '$x = 1 * 2 // 3' /dev/null -run_mlr filter -v ' 1 * 2 // 3' /dev/null -run_mlr put -v '$x = 1 * 2 % 3' /dev/null -run_mlr filter -v ' 1 * 2 % 3' /dev/null -run_mlr put -v '$x = 1 * 2 ** 3' /dev/null -run_mlr filter -v ' 1 * 2 ** 3' /dev/null - -run_mlr put -v '$x = 1 / 2 * 3' /dev/null -run_mlr filter -v ' 1 / 2 * 3' /dev/null -run_mlr put -v '$x = 1 / 2 // 3' /dev/null -run_mlr filter -v ' 1 / 2 // 3' /dev/null -run_mlr put -v '$x = 1 / 2 % 3' /dev/null -run_mlr filter -v ' 1 / 2 % 3' /dev/null -run_mlr put -v '$x = 1 / 2 ** 3' /dev/null -run_mlr filter -v ' 1 / 2 ** 3' /dev/null - -run_mlr put -v '$x = 1 // 2 * 3' /dev/null -run_mlr filter -v ' 1 // 2 * 3' /dev/null -run_mlr put -v '$x = 1 // 2 / 3' /dev/null -run_mlr filter -v ' 1 // 2 / 3' /dev/null -run_mlr put -v '$x = 1 // 2 % 3' /dev/null -run_mlr filter -v ' 1 // 2 % 3' /dev/null -run_mlr put -v '$x = 1 // 2 ** 3' /dev/null -run_mlr filter -v ' 1 // 2 ** 3' /dev/null - -run_mlr put -v '$x = 1 % 2 * 3' /dev/null -run_mlr filter -v ' 1 % 2 * 3' /dev/null -run_mlr put -v '$x = 1 % 2 / 3' /dev/null -run_mlr filter -v ' 1 % 2 / 3' /dev/null -run_mlr put -v '$x = 1 % 2 // 3' /dev/null -run_mlr filter -v ' 1 % 2 // 3' /dev/null -run_mlr put -v '$x = 1 % 2 ** 3' /dev/null -run_mlr filter -v ' 1 % 2 ** 3' /dev/null - -run_mlr put -v '$x = 1 ** 2 * 3' /dev/null -run_mlr filter -v ' 1 ** 2 * 3' /dev/null -run_mlr put -v '$x = 1 ** 2 / 3' /dev/null -run_mlr filter -v ' 1 ** 2 / 3' /dev/null -run_mlr put -v '$x = 1 ** 2 // 3' /dev/null -run_mlr filter -v ' 1 ** 2 // 3' /dev/null -run_mlr put -v '$x = 1 ** 2 % 3' /dev/null -run_mlr filter -v ' 1 ** 2 % 3' /dev/null - -run_mlr put -v '$x = ++1' /dev/null -run_mlr filter -v ' ++1' /dev/null -run_mlr put -v '$x = --1' /dev/null -run_mlr filter -v ' --1' /dev/null -run_mlr put -v '$x = !!1' /dev/null -run_mlr filter -v ' !!1' /dev/null -run_mlr put -v '$x = ~~1' /dev/null -run_mlr filter -v ' ~~1' /dev/null - -run_mlr put -v '$x = 1 ? 2 : 3' /dev/null -run_mlr filter -v ' 1 ? 2 : 3' /dev/null -run_mlr put -v '$x = 1 ? 2 ? 3 : 4 : 5' /dev/null -run_mlr filter -v ' 1 ? 2 ? 3 : 4 : 5' /dev/null -run_mlr put -v '$x = 1 ? 2 : 3 ? 4 : 5' /dev/null -run_mlr filter -v ' 1 ? 2 : 3 ? 4 : 5' /dev/null - -# ---------------------------------------------------------------- -announce DSL OPERATOR PRECEDENCE -# Note: filter -v and put -v print the AST. - -run_mlr put -v '$x = 1 || 2 ^^ 3' /dev/null -run_mlr filter -v ' 1 || 2 ^^ 3' /dev/null -run_mlr put -v '$x = 1 || 2 && 3' /dev/null -run_mlr filter -v ' 1 || 2 && 3' /dev/null - -run_mlr put -v '$x = 1 ^^ 2 || 3' /dev/null -run_mlr filter -v ' 1 ^^ 2 || 3' /dev/null -run_mlr put -v '$x = 1 ^^ 2 && 3' /dev/null -run_mlr filter -v ' 1 ^^ 2 && 3' /dev/null - -run_mlr put -v '$x = 1 && 2 || 3' /dev/null -run_mlr filter -v ' 1 && 2 || 3' /dev/null -run_mlr put -v '$x = 1 && 2 ^^ 3' /dev/null -run_mlr filter -v ' 1 && 2 ^^ 3' /dev/null - -run_mlr put -v '$x = 1 == 2 <= 3' /dev/null -run_mlr filter -v ' 1 == 2 <= 3' /dev/null -run_mlr put -v '$x = 1 <= 2 == 3' /dev/null -run_mlr filter -v ' 1 <= 2 == 3' /dev/null - -run_mlr put -v '$x = 1 <= 2 | 3' /dev/null -run_mlr filter -v ' 1 <= 2 | 3' /dev/null -run_mlr put -v '$x = 1 | 2 <= 3' /dev/null -run_mlr filter -v ' 1 | 2 <= 3' /dev/null - -run_mlr put -v '$x = 1 | 2 ^ 3' /dev/null -run_mlr filter -v ' 1 | 2 ^ 3' /dev/null -run_mlr put -v '$x = 1 ^ 2 | 3' /dev/null -run_mlr filter -v ' 1 ^ 2 | 3' /dev/null - -run_mlr put -v '$x = 1 ^ 2 & 3' /dev/null -run_mlr filter -v ' 1 ^ 2 & 3' /dev/null -run_mlr put -v '$x = 1 & 2 ^ 3' /dev/null -run_mlr filter -v ' 1 & 2 ^ 3' /dev/null - -run_mlr put -v '$x = 1 & 2 << 3' /dev/null -run_mlr filter -v ' 1 & 2 << 3' /dev/null -run_mlr put -v '$x = 1 << 2 & 3' /dev/null -run_mlr filter -v ' 1 << 2 & 3' /dev/null - -run_mlr put -v '$x = 1 + 2 * 3' /dev/null -run_mlr filter -v ' 1 + 2 * 3' /dev/null -run_mlr put -v '$x = 1 * 2 + 3' /dev/null -run_mlr filter -v ' 1 * 2 + 3' /dev/null -run_mlr put -v '$x = 1 + (2 * 3)' /dev/null -run_mlr filter -v ' 1 + (2 * 3)' /dev/null -run_mlr put -v '$x = 1 * (2 + 3)' /dev/null -run_mlr filter -v ' 1 * (2 + 3)' /dev/null -run_mlr put -v '$x = (1 + 2) * 3' /dev/null -run_mlr filter -v ' (1 + 2) * 3' /dev/null -run_mlr put -v '$x = (1 * 2) + 3' /dev/null -run_mlr filter -v ' (1 * 2) + 3' /dev/null - -run_mlr put -v '$x = 1 + 2 ** 3' /dev/null -run_mlr filter -v ' 1 + 2 ** 3' /dev/null -run_mlr put -v '$x = 1 ** 2 + 3' /dev/null -run_mlr filter -v ' 1 ** 2 + 3' /dev/null -run_mlr put -v '$x = 1 + (2 ** 3)' /dev/null -run_mlr filter -v ' 1 + (2 ** 3)' /dev/null -run_mlr put -v '$x = 1 ** (2 + 3)' /dev/null -run_mlr filter -v ' 1 ** (2 + 3)' /dev/null -run_mlr put -v '$x = (1 + 2) ** 3' /dev/null -run_mlr filter -v ' (1 + 2) ** 3' /dev/null -run_mlr put -v '$x = (1 ** 2) + 3' /dev/null -run_mlr filter -v ' (1 ** 2) + 3' /dev/null - -run_mlr put -v '$x = 1 * 2 ** 3' /dev/null -run_mlr filter -v ' 1 * 2 ** 3' /dev/null -run_mlr put -v '$x = 1 ** 2 * 3' /dev/null -run_mlr filter -v ' 1 ** 2 * 3' /dev/null -run_mlr put -v '$x = 1 * (2 ** 3)' /dev/null -run_mlr filter -v ' 1 * (2 ** 3)' /dev/null -run_mlr put -v '$x = 1 ** (2 * 3)' /dev/null -run_mlr filter -v ' 1 ** (2 * 3)' /dev/null -run_mlr put -v '$x = (1 * 2) ** 3' /dev/null -run_mlr filter -v ' (1 * 2) ** 3' /dev/null -run_mlr put -v '$x = (1 ** 2) * 3' /dev/null -run_mlr filter -v ' (1 ** 2) * 3' /dev/null - -run_mlr put -v '$x = -1 + 2 * 3' /dev/null -run_mlr filter -v ' -1 + 2 * 3' /dev/null -run_mlr put -v '$x = -1 * 2 + 3' /dev/null -run_mlr filter -v ' -1 * 2 + 3' /dev/null -run_mlr put -v '$x = 1 + -2 * 3' /dev/null -run_mlr filter -v ' 1 + -2 * 3' /dev/null -run_mlr put -v '$x = 1 * -2 + 3' /dev/null -run_mlr filter -v ' 1 * -2 + 3' /dev/null -run_mlr put -v '$x = 1 + 2 * -3' /dev/null -run_mlr filter -v ' 1 + 2 * -3' /dev/null -run_mlr put -v '$x = 1 * 2 + -3' /dev/null -run_mlr filter -v ' 1 * 2 + -3' /dev/null - -run_mlr put -v '$x = ~1 | 2 & 3' /dev/null -run_mlr filter -v ' ~1 | 2 & 3' /dev/null -run_mlr put -v '$x = ~1 & 2 | 3' /dev/null -run_mlr filter -v ' ~1 & 2 | 3' /dev/null -run_mlr put -v '$x = 1 | ~2 & 3' /dev/null -run_mlr filter -v ' 1 | ~2 & 3' /dev/null -run_mlr put -v '$x = 1 & ~2 | 3' /dev/null -run_mlr filter -v ' 1 & ~2 | 3' /dev/null -run_mlr put -v '$x = 1 | 2 & ~3' /dev/null -run_mlr filter -v ' 1 | 2 & ~3' /dev/null -run_mlr put -v '$x = 1 & 2 | ~3' /dev/null -run_mlr filter -v ' 1 & 2 | ~3' /dev/null - -run_mlr put -v '$x = $a==1 && $b == 1 && $c == 1' /dev/null -run_mlr filter -v ' $a==1 && $b == 1 && $c == 1' /dev/null -run_mlr put -v '$x = $a==1 || $b == 1 && $c == 1' /dev/null -run_mlr filter -v ' $a==1 || $b == 1 && $c == 1' /dev/null -run_mlr put -v '$x = $a==1 || $b == 1 || $c == 1' /dev/null -run_mlr filter -v ' $a==1 || $b == 1 || $c == 1' /dev/null -run_mlr put -v '$x = $a==1 && $b == 1 || $c == 1' /dev/null -run_mlr filter -v ' $a==1 && $b == 1 || $c == 1' /dev/null - -run_mlr put -v '$x = $a==1 ? $b == 2 : $c == 3' /dev/null -run_mlr filter -v ' $a==1 ? $b == 2 : $c == 3' /dev/null - -run_mlr put -v '$x = true' /dev/null -run_mlr filter -v ' true' /dev/null - -run_mlr put -v 'true || 1==0; $x = 3' /dev/null -run_mlr filter -v ' true || 1==0' /dev/null - -run_mlr put -v '1==0 || false; $x = 3' /dev/null -run_mlr filter -v ' 1==0 || false' /dev/null - -run_mlr put -v 'true && false; $x = 3' /dev/null -run_mlr filter -v ' true && false' /dev/null - -run_mlr put -v 'true && false && true; $x = 3' /dev/null -run_mlr filter -v ' true && false && true' /dev/null - -run_mlr put -v '$y += $x + 3' /dev/null -run_mlr put -v '$y += $x * 3' /dev/null - -run_mlr put -v '$y ||= $x' /dev/null -run_mlr put -v '$y ^^= $x' /dev/null -run_mlr put -v '$y &&= $x' /dev/null -run_mlr put -v '$y |= $x' /dev/null -run_mlr put -v '$y ^= $x' /dev/null -run_mlr put -v '$y &= $x' /dev/null -run_mlr put -v '$y <<= $x' /dev/null -run_mlr put -v '$y >>= $x' /dev/null -run_mlr put -v '$y += $x' /dev/null -run_mlr put -v '$y -= $x' /dev/null -run_mlr put -v '$y .= $x' /dev/null -run_mlr put -v '$y *= $x' /dev/null -run_mlr put -v '$y /= $x' /dev/null -run_mlr put -v '$y //= $x' /dev/null -run_mlr put -v '$y %= $x' /dev/null -run_mlr put -v '$y **= $x' /dev/null - -# ---------------------------------------------------------------- -announce DSL COMMENTS - -run_mlr --from $indir/abixy put ' - $s = 1; - #$t = 2; - $u = 3; -' - -run_mlr --from $indir/abixy filter ' - NR == 1 || - #NR == 2 || - NR == 3 -' - -run_mlr --from $indir/abixy put ' - $s = "here is a pound#sign"; # but this is a comment - #$t = 2; - $u = 3; -' - -# ---------------------------------------------------------------- -announce DSL EMPTY STATEMENTS - -run_mlr -n put -v '' -mlr_expect_fail -n filter -v '' - -run_mlr -n put -v 'begin {}' -run_mlr -n put -v 'begin {;}' -run_mlr -n put -v 'begin {;;}' -run_mlr -n put -v 'begin {;;;}' -run_mlr -n put -v 'begin {@x=1}' -run_mlr -n put -v 'begin {@x=1;}' -run_mlr -n put -v 'begin {;@x=1}' -run_mlr -n put -v 'begin {@x=1;@y=2}' -run_mlr -n put -v 'begin {@x=1;;@y=2}' - -run_mlr -n put -v 'true {}' -run_mlr -n put -v 'true {;}' -run_mlr -n put -v 'true {;;}' -run_mlr -n put -v 'true {;;;}' -run_mlr -n put -v 'true {@x=1}' -run_mlr -n put -v 'true {@x=1;}' -run_mlr -n put -v 'true {;@x=1}' -run_mlr -n put -v 'true {@x=1;@y=2}' -run_mlr -n put -v 'true {@x=1;;@y=2}' - -run_mlr -n put -v 'end {}' -run_mlr -n put -v 'end {;}' -run_mlr -n put -v 'end {;;}' -run_mlr -n put -v 'end {;;;}' -run_mlr -n put -v 'end {@x=1}' -run_mlr -n put -v 'end {@x=1;}' -run_mlr -n put -v 'end {;@x=1}' -run_mlr -n put -v 'end {@x=1;@y=2}' -run_mlr -n put -v 'end {@x=1;;@y=2}' - -# ---------------------------------------------------------------- -announce DSL CONTEXT-SPECIFIC VALIDATION - -mention non-top-level begin/end -mlr_expect_fail put -v 'begin{begin{@x=1}}' -mlr_expect_fail put -v 'true{begin{@x=1}}' -mlr_expect_fail put -v 'end{end{@x=1}}' -mlr_expect_fail put -v 'true{end{@x=1}}' - -mention srecs in begin/end -mlr_expect_fail put -v 'begin{$x=1}' -mlr_expect_fail put -v 'begin{@x=$y}' -mlr_expect_fail put -v 'end{$x=1}' -mlr_expect_fail put -v 'end{@x=$y}' -mlr_expect_fail put -v 'begin{@v=$*}' -mlr_expect_fail put -v 'end{$*=@v}' - -mlr_expect_fail put -v 'begin{unset $x}' -mlr_expect_fail put -v 'end{unset $x}' -mlr_expect_fail put -v 'begin{unset $*}' -mlr_expect_fail put -v 'end{unset $*}' - -mention break/continue outside loop -mlr_expect_fail put -v 'break' -mlr_expect_fail put -v 'continue' - -mention oosvars etc. in mlr filter -mlr_expect_fail filter -v 'break' -mlr_expect_fail filter -v 'continue' - -mention expanded filter - -run_mlr --from $indir/abixy filter ' - begin { - @avoid = 3 - } - NR != @avoid -' - -run_mlr --from $indir/abixy filter -x ' - begin { - @avoid = 3 - } - NR != @avoid -' - -run_mlr --from $indir/abixy filter ' - func f(n) { - return n - 1 - } - f(NR) == 5 -' - -run_mlr --from $indir/abixy filter ' - subr s(n) { - print "NR is ".n - } - call s(NR); - false -' - -run_mlr --from $indir/abixy filter ' - int a = 5; - int b = 7; - a <= NR && NR <= b -' - -mlr_expect_fail --from $indir/abixy filter 'filter false' -mlr_expect_fail --from $indir/abixy filter 'filter false; true' - -# ---------------------------------------------------------------- -announce DSL FUNCTIONAL TESTS - -run_mlr filter '$x>.3' $indir/abixy -run_mlr filter '$x>.3;' $indir/abixy -run_mlr filter '$x>0.3' $indir/abixy -run_mlr filter '$x>0.3 && $y>0.3' $indir/abixy -run_mlr filter '$x>0.3 || $y>0.3' $indir/abixy -run_mlr filter 'NR>=4 && NR <= 7' $indir/abixy - -run_mlr filter -x '$x>.3' $indir/abixy -run_mlr filter -x '$x>0.3' $indir/abixy -run_mlr filter -x '$x>0.3 && $y>0.3' $indir/abixy -run_mlr filter -x '$x>0.3 || $y>0.3' $indir/abixy -run_mlr filter -x 'NR>=4 && NR <= 7' $indir/abixy - -run_mlr filter '$nosuchfield>.3' $indir/abixy - -run_mlr put '$x2 = $x**2' $indir/abixy -run_mlr put '$x2 = $x**2;' $indir/abixy -run_mlr put '$z = -0.024*$x+0.13' $indir/abixy -run_mlr put '$c = $a . $b' $indir/abixy -run_mlr put '$ii = $i + $i' $indir/abixy -run_mlr put '$emptytest = $i + $nosuch' $indir/abixy - -run_mlr --opprint put '$nr=NR;$fnr=FNR;$nf=NF;$filenum=FILENUM' $indir/abixy $indir/abixy - -run_mlr --opprint put '$y=madd($x,10,37)' then put '$z=msub($x,10,37)' $indir/modarith.dat -run_mlr --opprint put '$y=mexp($x,35,37)' then put '$z=mmul($x,$y,37)' $indir/modarith.dat - -run_mlr put '$z=min($x, $y)' $indir/minmax.dkvp -run_mlr put '$z=max($x, $y)' $indir/minmax.dkvp - -echo 'x=1,y=2,z=3' | run_mlr put '$o=min()' -echo 'x=1,y=2,z=3' | run_mlr put '$o=max()' -echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x)' -echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x)' -echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x,$y)' -echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x,$y)' -echo 'x=1,y=2,z=3' | run_mlr put '$o=min($x,$y,$z)' -echo 'x=1,y=2,z=3' | run_mlr put '$o=max($x,$y,$z)' - -echo 'x=1,y=b' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' -echo 'x=a,y=2' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' -echo 'x=a,y=b' | run_mlr put '$u=min($x,$y);$v=max($x,$y)' - -run_mlr --icsvlite --oxtab put '${x+y} = ${name.x} + ${name.y}; ${x*y} = ${name.x} * ${name.y}' $indir/braced.csv -run_mlr --icsvlite --oxtab filter '${name.y} < ${z}' $indir/braced.csv - -run_mlr --opprint put '$z = $x < 0.5 ? 0 : 1' $indir/abixy - -run_mlr --csvlite filter 'true && true' $indir/b.csv -run_mlr --csvlite filter 'true && false' $indir/b.csv -run_mlr --csvlite filter 'false && true' $indir/b.csv -run_mlr --csvlite filter 'false && false' $indir/b.csv - -run_mlr --csvlite filter 'true || true' $indir/b.csv -run_mlr --csvlite filter 'true || false' $indir/b.csv -run_mlr --csvlite filter 'false || true' $indir/b.csv -run_mlr --csvlite filter 'false || false' $indir/b.csv - -run_mlr --csvlite filter 'true ^^ true' $indir/b.csv -run_mlr --csvlite filter 'true ^^ false' $indir/b.csv -run_mlr --csvlite filter 'false ^^ true' $indir/b.csv -run_mlr --csvlite filter 'false ^^ false' $indir/b.csv - -# This tests boolean short-circuiting -run_mlr put '$x==2 && $a =~ "....." { $y=4 }' $indir/short-circuit.dkvp - -export X=97 -export Y=98 -run_mlr put '$x = ENV["X"]; $y = ENV[$name]' $indir/env-var.dkvp -export X= -export Y= -run_mlr put '$x = ENV["X"]; $y = ENV[$name]' $indir/env-var.dkvp - -run_mlr -n put 'begin{ENV["HOME"]="foobar"} end{print ENV["HOME"]}' - -echo 'x=hello' | run_mlr put '$y = toupper($x)' -echo 'x=HELLO' | run_mlr put '$y = toupper($x)' -echo 'x=' | run_mlr put '$y = toupper($x)' -echo 'x=hello' | run_mlr put '$y = toupper($z)' - -echo 'x=hello' | run_mlr put '$y = tolower($x)' -echo 'x=HELLO' | run_mlr put '$y = tolower($x)' -echo 'x=' | run_mlr put '$y = tolower($x)' -echo 'x=hello' | run_mlr put '$y = tolower($z)' - -echo 'x=hello' | run_mlr put '$y = capitalize($x)' -echo 'x=HELLO' | run_mlr put '$y = capitalize($x)' -echo 'x=' | run_mlr put '$y = capitalize($x)' -echo 'x=hello' | run_mlr put '$y = capitalize($z)' - -mention LHS value on first record should result in ZYX for process creation -export indir; run_mlr --from $indir/abixy put -q 'ENV["ZYX"]="CBA".NR; print | ENV["indir"]."/env-assign.sh" , "a is " . $a' - -# ---------------------------------------------------------------- -announce POSITIONAL INDEXING - -run_mlr --opprint put '$NEW = $[[3]]' $indir/abixy -run_mlr --opprint put '$NEW = $[[[3]]]' $indir/abixy - -run_mlr --opprint put '$NEW = $[[11]]' $indir/abixy -run_mlr --opprint put '$NEW = $[[[11]]]' $indir/abixy - -run_mlr --opprint put '$[[3]] = "NEW"' $indir/abixy -run_mlr --opprint put '$[[[3]]] = "NEW"' $indir/abixy - -run_mlr --opprint put '$[[11]] = "NEW"' $indir/abixy -run_mlr --opprint put '$[[[11]]] = "NEW"' $indir/abixy - -run_mlr --opprint put '$[[1]] = $[[2]]' $indir/abixy - -run_mlr --opprint put '$a = $[[2]]; unset $["a"]' $indir/abixy -run_mlr --opprint put '$[[1]] = $b; unset $[[1]]' $indir/abixy -run_mlr --opprint put '$[[1]] = $[[2]]; unset $["a"]' $indir/abixy - -# xxx to do -- there is an old bug here with lack of lhmsmv_unset on the typed overlay at unset -run_mlr --opprint put 'unset $c' $indir/abixy -run_mlr --opprint put 'unset $c; $c="new"' $indir/abixy -run_mlr --opprint put '$c=$a.$b; unset $c; $c="new"' $indir/abixy -run_mlr --opprint put '$c=$a.$b; unset $c' $indir/abixy - -# ---------------------------------------------------------------- -announce IS-PREDICATES - -run_mlr --opprint put '$f=is_absent($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_absent($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_absent($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_absent($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_absent(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_absent(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_bool($x>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_bool($y>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_bool($z>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_bool($nosuch>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_bool(@nosuch>1)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_bool(@somesuch>1)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_boolean($x>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_boolean($y>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_boolean($z>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_boolean($nosuch>1)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_boolean(@nosuch>1)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_boolean(@somesuch>1)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_empty($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_empty(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_empty_map($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_empty_map({})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_empty_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_float($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_float({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_float(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_int($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_int({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_int(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_map($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_map({})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_nonempty_map($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_nonempty_map({})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_nonempty_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_not_empty($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_empty({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_not_empty(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_not_map($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_map({})' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_not_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_not_null($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_null($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_null($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_null($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_not_null(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_not_null(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_null($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_null($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_null($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_null($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_null(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_null(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_numeric($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_numeric($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_numeric($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_numeric($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_numeric(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_numeric(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_present($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_present($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_present($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_present($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_present(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_present(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=is_string($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_string($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_string($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_string($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=is_string(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=is_string(@somesuch)' $indir/nullvals.dkvp - -# ---------------------------------------------------------------- -announce ASSERTION PASS-THROUGHS - -run_mlr --opprint put '$f=asserting_absent($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_absent(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_absent($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_absent($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_absent($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_absent(@somesuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put 'foo=asserting_absent($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put 'foo=asserting_absent({1:2})' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_empty($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_empty(@somesuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put 'foo=asserting_empty($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put 'foo=asserting_empty({1:2})' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_empty_map({})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_empty_map({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_empty_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_map({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_map({})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_map($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_map($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_map($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_map($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_map(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_nonempty_map($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_nonempty_map({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_nonempty_map({})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_nonempty_map(@somesuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$*=asserting_not_empty($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_empty($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_empty(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_empty({1:2})' $indir/nullvals.dkvp -run_mlr --opprint put '$nosuch=asserting_not_empty($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=asserting_not_empty(@somesuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_not_empty($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_not_empty({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_empty($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_empty($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_empty($z)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_not_map($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_map($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_map($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_map($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_not_map(@nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=asserting_not_map(@somesuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_map($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_map({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_map({})' $indir/nullvals.dkvp - -run_mlr --opprint put '@somesuch=1;$f=asserting_not_null(@somesuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_not_null($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_not_null({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_null($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_null($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_null($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_null($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_not_null(@nosuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_null($z)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_null($nosuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_null(@nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_null($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_null($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '@somesuch=1;$f=asserting_null(@somesuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_null($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_null({1:2})' $indir/nullvals.dkvp - -mlr_expect_fail --opprint put '$f=asserting_numeric($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_numeric($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_numeric($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_numeric($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_numeric({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_numeric($nosuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_present($x)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_present($y)' $indir/nullvals.dkvp -run_mlr --opprint put '$f=asserting_present($z)' $indir/nullvals.dkvp -run_mlr --opprint put '@somesuch=1;$f=asserting_present(@somesuch)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_present($*)' $indir/nullvals.dkvp -run_mlr --opprint put '$*=asserting_present({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_present($nosuch)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_present(@nosuch)' $indir/nullvals.dkvp - -run_mlr --opprint put '$f=asserting_string($z)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_string($*)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$*=asserting_string({1:2})' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_string($x)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_string($y)' $indir/nullvals.dkvp -mlr_expect_fail --opprint put '$f=asserting_string($nosuch)' $indir/nullvals.dkvp - -# ---------------------------------------------------------------- -announce DSL NULL/EMPTY HANDLING - -run_mlr put '$z = $s . $s' $indir/null-vs-empty.dkvp -run_mlr put '$z = $s == ""' $indir/null-vs-empty.dkvp -run_mlr put '$z = $s == $s' $indir/null-vs-empty.dkvp -run_mlr put '$z = is_empty($s)' $indir/null-vs-empty.dkvp - -run_mlr put '$z = $x + $y' $indir/null-vs-empty.dkvp -run_mlr put '$z = $y + $y' $indir/null-vs-empty.dkvp -run_mlr put '$z = $x + $nosuch' $indir/null-vs-empty.dkvp -run_mlr put '$t = sub($s, "ell", "X")' $indir/null-vs-empty.dkvp -run_mlr put '$t = sub($s, "ell", "")' $indir/null-vs-empty.dkvp -run_mlr put '$t = sub($nosuch, "ell", "X")' $indir/null-vs-empty.dkvp -run_mlr put '$t = gsub($s, "l", "X")' $indir/null-vs-empty.dkvp -run_mlr put '$t = gsub($s, "l", "")' $indir/null-vs-empty.dkvp -run_mlr put '$t = gsub($nosuch, "l", "X")' $indir/null-vs-empty.dkvp - -mention EMIT -run_mlr put -q '@v=1; @nonesuch {emit @v}' $indir/abixy -run_mlr put -q '@v=1; @nonesuch==true {emit @v}' $indir/abixy -run_mlr put -q '@v=1; $nonesuch {emit @v}' $indir/abixy -run_mlr put -q '@v=1; $nonesuch==true {emit @v}' $indir/abixy - -mention PLUS -run_mlr --ofs tab put 'begin{}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x + $y; $sy = @s + $y; $xt = $x + @t; $st = @s + @t' $indir/typeof.dkvp - -mention MINUS -run_mlr --ofs tab put 'begin{}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x - $y; $sy = @s - $y; $xt = $x - @t; $st = @s - @t' $indir/typeof.dkvp - -mention TIMES -run_mlr --ofs tab put 'begin{}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x * $y; $sy = @s * $y; $xt = $x * @t; $st = @s * @t' $indir/typeof.dkvp - -mention DIVIDE -run_mlr --ofs tab put 'begin{}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x / $y; $sy = @s / $y; $xt = $x / @t; $st = @s / @t' $indir/typeof.dkvp - -mention INTEGER DIVIDE -run_mlr --ofs tab put 'begin{}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x // $y; $sy = @s // $y; $xt = $x // @t; $st = @s // @t' $indir/typeof.dkvp - -mention REMAINDER -run_mlr --ofs tab put 'begin{}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x % $y; $sy = @s % $y; $xt = $x % @t; $st = @s % @t' $indir/typeof.dkvp - -mention BITWISE AND -run_mlr --ofs tab put 'begin{}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x & $y; $sy = @s & $y; $xt = $x & @t; $st = @s & @t' $indir/typeof.dkvp - -mention BITWISE OR -run_mlr --ofs tab put 'begin{}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x | $y; $sy = @s | $y; $xt = $x | @t; $st = @s | @t' $indir/typeof.dkvp - -mention BITWISE XOR -run_mlr --ofs tab put 'begin{}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp -run_mlr --ofs tab put 'begin{@s=3;@t=4}; $xy = $x ^ $y; $sy = @s ^ $y; $xt = $x ^ @t; $st = @s ^ @t' $indir/typeof.dkvp - -# ---------------------------------------------------------------- -announce DSL TYPE PREDICATES - -run_mlr --from $indir/abixy --opprint put ' for (k, v in $*) { $[k."_type"] = typeof(v) } ' - -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_float(v)) {@float[NR][k] = v}} end{ emit @float, "NR", "k" }' -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_int(v)) {@int[NR][k] = v}} end{ emit @int, "NR", "k" }' -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_numeric(v)) {@numeric[NR][k] = v}} end{ emit @numeric, "NR", "k" }' -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_string(v)) {@string[NR][k] = v}} end{ emit @string, "NR", "k" }' -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_bool(v)) {@bool[NR][k] = v}} end{ emit @bool, "NR", "k" }' -run_mlr --from $indir/abixy-het put -q 'for (k,v in $*) {if (is_bool(NR==2)) {@bool[NR][k] = "NR==2"}} end{ emit @bool, "NR", "k" }' - -# ---------------------------------------------------------------- -announce DSL TYPE-INFERENCE - -run_mlr --xtab put '$y = $pi1 + $pi2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y = $pi1 + $pi2' $indir/mixed-types.xtab -run_mlr --xtab put -S '$y = $pi1 . $pi2' $indir/mixed-types.xtab -run_mlr --xtab filter '999 != $pi1 + $pi2' $indir/mixed-types.xtab -run_mlr --xtab filter -F '999 != $pi1 + $pi2' $indir/mixed-types.xtab -run_mlr --xtab filter -S '"999" != $pi1 . $pi2' $indir/mixed-types.xtab - -echo a=1,b=2.0 | run_mlr --oxtab put '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' -echo a=1,b=2.0 | run_mlr --oxtab put -F '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' -echo a=1,b=2.0 | run_mlr --oxtab put -S '$s = $a; $t = $b; $u = 3; $v = 4.0; $ts=typeof($s); $tt=typeof($t); $tu=typeof($u); $tv=typeof($v);' - -run_mlr --xtab put '$y=abs($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=abs($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=abs($zf)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=abs($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=abs($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=abs($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$y=abs($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=abs($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=abs($zf)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=abs($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=abs($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=abs($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put '$y=ceil($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=ceil($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=ceil($zf)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=ceil($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=ceil($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=ceil($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$y=floor($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=floor($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=floor($zf)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=floor($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=floor($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=floor($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put '$y=round($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=round($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=round($zf)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=round($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=round($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=round($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$y=round($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=round($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=round($zf)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=round($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=round($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=round($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put '$y=sgn($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=sgn($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=sgn($zf)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=sgn($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=sgn($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put '$y=sgn($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$y=sgn($pf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=sgn($nf1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=sgn($zf)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=sgn($pi1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=sgn($ni1)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$y=sgn($zi)' $indir/mixed-types.xtab - -run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab - -run_mlr --xtab put '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$min=min($pf1,$pf2);$max=max($pf1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pf1,$pi2);$max=max($pf1,$pi2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pi1,$pf2);$max=max($pi1,$pf2)' $indir/mixed-types.xtab -run_mlr --xtab put -F '$min=min($pi1,$pi2);$max=max($pi1,$pi2)' $indir/mixed-types.xtab - -run_mlr --xtab put '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab -run_mlr --xtab put '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$sum=$pf1+$pf2;$diff=$pf1-$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$sum=$pf1+$pi2;$diff=$pf1-$pi2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$sum=$pi1+$pf2;$diff=$pi1-$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$sum=$pi1+$pi2;$diff=$pi1-$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab -run_mlr --xtab put '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$prod=$pf1*$pf2;$quot=$pf1/$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$prod=$pf1*$pi2;$quot=$pf1/$pi2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$prod=$pi1*$pf2;$quot=$pi1/$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$prod=$pi1*$pi2;$quot=$pi1/$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab -run_mlr --xtab put '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab -run_mlr --xtab put '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put -F '$iquot=$pf1//$pf2;$mod=$pf1%$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$iquot=$pf1//$pi2;$mod=$pf1%$pi2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$iquot=$pi1//$pf2;$mod=$pi1%$pf2' $indir/mixed-types.xtab -run_mlr --xtab put -F '$iquot=$pi1//$pi2;$mod=$pi1%$pi2' $indir/mixed-types.xtab - -run_mlr --xtab put '$a=roundm($pf1,10.0);$b=roundm($pf1,-10.0)' $indir/mixed-types.xtab -run_mlr --xtab put '$a=roundm($pf1,10) ;$b=roundm($pf1,-10) ' $indir/mixed-types.xtab -run_mlr --xtab put '$a=roundm($pi1,10.0);$b=roundm($pi1,-10.0)' $indir/mixed-types.xtab -run_mlr --xtab put '$a=roundm($pi1,10) ;$b=roundm($pi1,-10) ' $indir/mixed-types.xtab - -echo 'x=3,y=4' | run_mlr --oxtab put '$z=$x+$y; $a=3+4; $b="3"."4"; $c="3"+4' - -# ---------------------------------------------------------------- -announce DSL SCIENTIFIC NOTATION IN FIELD VALUES - -run_mlr --opprint put '$y=$x+1' $indir/scinot.dkvp - -# ---------------------------------------------------------------- -announce DSL SCIENTIFIC NOTATION IN EXPRESSION LITERALS - -run_mlr --opprint put '$y = 123 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 123. + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 123.4 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = .234 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1e2 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1e-2 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1.2e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1.e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1.2e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1.e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = .2e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = .2e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = 1.e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -123 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -123. + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -123.4 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -.234 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1e2 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1e-2 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1.2e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1.e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1.2e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1.e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -.2e3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -.2e-3 + $i' $indir/scinot1.dkvp -run_mlr --opprint put '$y = -1.e-3 + $i' $indir/scinot1.dkvp - -# ---------------------------------------------------------------- -announce DSL FROM-FILE FEATURE - -run_mlr put -f $indir/put-example.dsl $indir/abixy -run_mlr filter -f $indir/filter-example.dsl $indir/abixy - -run_mlr --from $indir/abixy put -f $indir/put-example.dsl -run_mlr --from $indir/abixy filter -f $indir/filter-example.dsl - -run_mlr --from $indir/abixy --from $indir/abixy-het put -f $indir/put-example.dsl -run_mlr --from $indir/abixy --from $indir/abixy-het filter -f $indir/filter-example.dsl - -# ---------------------------------------------------------------- -announce DSL MULTI-PART SCRIPTS - -run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 -run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 -run_mlr --opprint --from $indir/abixy put -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 -f $indir/put-script-piece-3 - -run_mlr --opprint --from $indir/abixy put -e '$xy = $x**2 + $y**2' -run_mlr --opprint --from $indir/abixy filter -e 'NR == 7' - -run_mlr --opprint --from $indir/abixy put -e 'print "PRE";' -f $indir/put-script-piece-1 -f $indir/put-script-piece-2 -f $indir/put-script-piece-3 -e 'print "POST"' - -run_mlr --opprint --from $indir/abixy filter -f $indir/filter-script-piece-1 -run_mlr --opprint --from $indir/abixy filter -f $indir/filter-script-piece-1 -f $indir/filter-script-piece-2 - -# ---------------------------------------------------------------- -announce UTF-8 STRLEN - -run_mlr --inidx --ifs comma --oxtab put '$s1=strlen($1);$s2=strlen($2);$s3=strlen($3);$s4=strlen($4)' $indir/utf8-align.dkvp - -# ---------------------------------------------------------------- -announce TRUNCATE - -for n in 0 1 2 3 4 5; do - echo "x=abcd" | run_mlr put '$y=truncate($x, '$n')' -done -for n in 0 1 2 3 4 5; do - echo "x=abcdefgh" | run_mlr put '$y=truncate($x, '$n')' -done - -# ---------------------------------------------------------------- -announce STATS1/STEP INT/FLOAT - -run_mlr --opprint step -a rsum,delta,counter -f x,y,z $indir/int-float.dkvp -run_mlr --opprint step -F -a rsum,delta,counter -f x,y,z $indir/int-float.dkvp -run_mlr --oxtab stats1 -a min,max,sum,count -f x,y,z $indir/int-float.dkvp -run_mlr --oxtab stats1 -F -a min,max,sum,count -f x,y,z $indir/int-float.dkvp - -# ---------------------------------------------------------------- -announce DSL PYTHONIC DIVISION - -run_mlr --xtab put '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$pf1/10.0;$iquot=$pf1//10.0;$mod=$pf1%10.0' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$pi1/10 ;$iquot=$pi1//10 ;$mod=$pi1%10 ' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$nf1/10.0;$iquot=$nf1//10.0;$mod=$nf1%10.0' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$ni1/10 ;$iquot=$ni1//10 ;$mod=$ni1%10 ' $indir/mixed-types.xtab - -run_mlr --xtab put '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab -run_mlr --xtab put '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$pf1/-10.0;$iquot=$pf1//-10.0;$mod=$pf1%-10.0' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$pi1/-10 ;$iquot=$pi1//-10 ;$mod=$pi1%-10 ' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$nf1/-10.0;$iquot=$nf1//-10.0;$mod=$nf1%-10.0' $indir/mixed-types.xtab -run_mlr --xtab put -F '$quot=$ni1/-10 ;$iquot=$ni1//-10 ;$mod=$ni1%-10 ' $indir/mixed-types.xtab - -# ---------------------------------------------------------------- -announce DSL REGEX MATCHING - -run_mlr filter -v '$x =~ "bcd"' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^bcd"' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^abc"' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^abc$"' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^a.*d$"' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^a.*"."d$"' $indir/regex.dkvp -run_mlr filter -v '$y =~ "\".."' $indir/regex.dkvp - -run_mlr filter -v '$x =~ "bcd"i' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^bcd"i' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^abc"i' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^abc$"i' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^a.*d$"i' $indir/regex.dkvp -run_mlr filter -v '$x =~ "^a.*"."d$"i' $indir/regex.dkvp - -run_mlr --csv filter '$text =~ "."' $indir/dot-match.csv -run_mlr --csv filter '$text =~ "\."' $indir/dot-match.csv - -# ---------------------------------------------------------------- -announce DSL TYPED OVERLAY - -run_mlr put '$y = string($x); $z=$y.$y' $indir/int-float.dkvp -run_mlr put '$z=string($x).string($x)' $indir/int-float.dkvp -run_mlr put '$y = string($x)' then put '$z=$y.$y' $indir/int-float.dkvp -run_mlr put '$a="hello"' then put '$b=$a." world";$z=$x+$y;$c=$b;$a=sub($b,"hello","farewell")' $indir/int-float.dkvp - -# ---------------------------------------------------------------- -announce DSL REGEX CAPTURES - -# cat reg_test/input/capture.dkvp -# FIELD=ABC123 -# FIELD=ABC..123 -# FIELD=..ABC..123.. -# FIELD=none of the above - -run_mlr --opprint put '$FIELD =~ "([A-Z]+)([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp -run_mlr --opprint put '$FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"; $F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp - -run_mlr --opprint put '$FIELD =~ "([A-Z]+)([0-9]+)"' then put '$F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp -run_mlr --opprint put '$FIELD =~ "([A-Z]+)[^0-9]*([0-9]+)"' then put '$F1="\1"; $F2="\2"; $F3="\3"' $indir/capture.dkvp - -# cat reg_test/input/capture-lengths.dkvp -# FIELD= -# FIELD=a -# FIELD=ab -# FIELD=abc -# FIELD=abcd -# FIELD=abcde -# FIELD=abcdef -# FIELD=abcdefg -# FIELD=abcdefgh -# FIELD=abcdefghi -# FIELD=abcdefghij -# FIELD=abcdefghijk -# FIELD=abcdefghijkl - -run_mlr --opprint put ' $FIELD =~ "....."; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put ' $FIELD =~ "....." {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "....."; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp - -run_mlr --opprint put '$FIELD =~ "(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp - -run_mlr --opprint put '$FIELD =~ "(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp -run_mlr --opprint put '$FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)" {$F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"}' $indir/capture-lengths.dkvp - -run_mlr --opprint put 'filter $FIELD =~ "(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp -run_mlr --opprint put 'filter $FIELD =~ "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"; $F0="\0";$F1="\1";$F2="\2";$F3="\3";$F4="\4";$F5="\5";$F6="\6";$F7="\7";$F8="\8";$F9="\9"' $indir/capture-lengths.dkvp - -echo 'abcdefg' | run_mlr --inidx --odkvp put '$1 =~ "ab(.)d(..)g" { $c1 = "\1"; $c2 = "\2"}' -echo 'abcdefg' | run_mlr --inidx --odkvp put '$1 =~ "ab(.)?d(..)g" { $c1 = "\1"; $c2 = "\2"}' -echo 'abXdefg' | run_mlr --inidx --odkvp put '$1 =~ "ab(c)?d(..)g" { $c1 = "\1"; $c2 = "\2"}' -echo 'abdefg' | run_mlr --inidx --odkvp put '$1 =~ "ab(c)?d(..)g" { $c1 = "\1"; $c2 = "\2"}' - -# ---------------------------------------------------------------- -announce DSL FILTER/PATTERN-ACTION - -run_mlr --opprint put ' $x > 0.5; $z = "flag"' $indir/abixy -run_mlr --opprint put ' !($x > 0.5); $z = "flag"' $indir/abixy -run_mlr --opprint put 'filter $x > 0.5; $z = "flag"' $indir/abixy -run_mlr --opprint put ' $x > 0.5 {$z = "flag"}' $indir/abixy -run_mlr --opprint put 'filter !($x > 0.5); $z = "flag"' $indir/abixy -run_mlr --opprint put ' !($x > 0.5) {$z = "flag"}' $indir/abixy - -# ---------------------------------------------------------------- -announce DSL GMT DATE/TIME FUNCTIONS - -run_mlr --csvlite put '$gmt = sec2gmt($sec)' $indir/sec2gmt -run_mlr --csvlite put '$gmt = sec2gmt($sec,1)' $indir/sec2gmt -run_mlr --csvlite put '$gmt = sec2gmt($sec,3)' $indir/sec2gmt -run_mlr --csvlite put '$gmt = sec2gmt($sec,6)' $indir/sec2gmt -run_mlr --csvlite put '$sec = gmt2sec($gmt)' $indir/gmt2sec -run_mlr --csvlite put '$gmtdate = sec2gmtdate($sec)' $indir/sec2gmt - -run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%SZ")' $indir/sec2gmt -run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%1SZ")' $indir/sec2gmt -run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%3SZ")' $indir/sec2gmt -run_mlr --icsv --opprint put '$gmt = strftime($sec, "%Y-%m-%dT%H:%M:%6SZ")' $indir/sec2gmt -run_mlr --icsv --opprint put '$sec = strptime($gmt, "%Y-%m-%dT%H:%M:%SZ")' $indir/gmt2sec - -run_mlr --csvlite sec2gmt sec $indir/sec2gmt - -run_mlr --opprint put '$hms=sec2hms($sec); $resec=hms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms -run_mlr --opprint put '$hms=fsec2hms($sec); $resec=hms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms -run_mlr --opprint put '$hms=sec2dhms($sec); $resec=dhms2sec($hms); $diff=$resec-$sec' $indir/sec2xhms -run_mlr --opprint put '$hms=fsec2dhms($sec); $resec=dhms2fsec($hms); $diff=$resec-$sec' $indir/fsec2xhms - -run_mlr --csvlite sec2gmt sec $indir/sec2gmt -run_mlr --csvlite sec2gmtdate sec $indir/sec2gmt - -# ---------------------------------------------------------------- -announce DSL LOCAL DATE/TIME FUNCTIONS - -# See also the system date command: -# export TZ=America/Sao_Paulo; date -j -f "%Y-%m-%d %H:%M:%S %Z" "2017-02-19 00:30:00" +%s -# export TZ=America/Sao_Paulo; date -r 86400 +"%Y-%m-%d %H:%M:%S %Z" - -export TZ=America/Sao_Paulo -echo TZ=$TZ -run_mlr --opprint put '$b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b)' <<_EOF -a=2017-02-18 23:00:00 -a=2017-02-18 23:59:59 -a=2017-02-19 00:00:00 -a=2017-02-19 00:30:00 -a=2017-02-19 01:00:00 -a=2017-10-14 23:00:00 -a=2017-10-14 23:59:59 -a=2017-10-15 00:00:00 -a=2017-10-15 00:30:00 -a=2017-10-15 01:00:00 -_EOF -export TZ= - -export TZ=America/Sao_Paulo -echo TZ=$TZ -run_mlr --opprint put '$b=localtime2sec($a); $c=sec2localtime($b); $d=sec2localdate($b)' <<_EOF -a=2017-02-14 00:00:00 -a=2017-02-15 00:00:00 -a=2017-02-16 00:00:00 -a=2017-02-17 00:00:00 -a=2017-02-18 00:00:00 -a=2017-02-19 00:00:00 -a=2017-02-20 00:00:00 -a=2017-10-12 00:00:00 -a=2017-10-13 00:00:00 -a=2017-10-14 00:00:00 -a=2017-10-15 00:00:00 -a=2017-10-16 00:00:00 -a=2017-10-17 00:00:00 -a=2017-10-18 00:00:00 -a=2017-10-19 00:00:00 -_EOF -export TZ= - -export TZ=America/Sao_Paulo -echo TZ=$TZ -run_mlr --opprint put '$b=strptime_local($a, "%Y-%m-%d %H:%M:%S"); $c=strftime_local($b, "%Y-%m-%d %H:%M:%S")' <<_EOF -a=2017-02-18 23:00:00 -a=2017-02-18 23:59:59 -a=2017-02-19 00:00:00 -a=2017-02-19 00:30:00 -a=2017-02-19 01:00:00 -a=2017-10-14 23:00:00 -a=2017-10-14 23:59:59 -a=2017-10-15 00:00:00 -a=2017-10-15 00:30:00 -a=2017-10-15 01:00:00 -_EOF -export TZ= - -# ---------------------------------------------------------------- -announce DSL SUB/GSUB/REGEX_EXTRACT - -run_mlr --opprint put '$y = sub($x, "e.*l", "")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "e.*l"i, "")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "e.*"."l", "")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "e.*l", "y123y")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "e.*l"i, "y123y")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "e.*"."l", "y123y")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "([hg])e.*l(.)", "y\1y123\2y")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "([hg])e.*l.", "y\1y123\2y")' $indir/sub.dat -run_mlr --opprint put '$y = sub($x, "([hg])e.*l(.)", "y\1y123.y")' $indir/sub.dat - -run_mlr --opprint put '$y = sub($x, "a", "aa")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "a", "aa")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "A", "Aa")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "a"i, "Aa")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "A"i, "Aa")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "a(.)", "aa\1\1\1")' $indir/gsub.dat - -run_mlr --opprint put '$y = sub($x, "a", "")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "a", "")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "A", "")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "a"i, "")' $indir/gsub.dat -run_mlr --opprint put '$y = gsub($x, "A"i, "")' $indir/gsub.dat - -run_mlr --oxtab cat $indir/subtab.dkvp -run_mlr --oxtab put -f $indir/subtab1.mlr $indir/subtab.dkvp -run_mlr --oxtab put -f $indir/subtab2.mlr $indir/subtab.dkvp -run_mlr --oxtab put -f $indir/subtab3.mlr $indir/subtab.dkvp -run_mlr --oxtab put -f $indir/subtab4.mlr $indir/subtab.dkvp - -run_mlr --opprint put '$y = ssub($x, "HE", "")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HE", "HE")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HE", "12345")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LL", "1")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LL", "12")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LL", "12345")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LLO", "")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LLO", "12")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LLO", "123")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "LLO", "123456")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HELLO", "")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HELLO", "1234")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HELLO", "12345")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "HELLO", "1234678")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "nonesuch", "")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "nonesuch", "1234")' $indir/sub.dat -run_mlr --opprint put '$y = ssub($x, "nonesuch", "1234567890")' $indir/sub.dat - -run_mlr --oxtab put '$y = regextract($x, "[A-Z]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[A-Z]*")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[a-z]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[a-z]*")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[0-9]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[0-9]*")' $indir/sub.dat - -run_mlr --oxtab put '$y = regextract($x, "[ef]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[ef]*")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[hi]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[hi]*")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[op]+")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract($x, "[op]*")' $indir/sub.dat - -run_mlr --oxtab put '$y = regextract_or_else($x, "[A-Z]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[A-Z]*", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[a-z]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[a-z]*", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[0-9]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[0-9]*", "DEFAULT")' $indir/sub.dat - -run_mlr --oxtab put '$y = regextract_or_else($x, "[ef]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[ef]*", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[hi]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[hi]*", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[op]+", "DEFAULT")' $indir/sub.dat -run_mlr --oxtab put '$y = regextract_or_else($x, "[op]*", "DEFAULT")' $indir/sub.dat - -echo 'abcdefg' | run_mlr --nidx put '$1 = sub($1, "ab(.)d(..)g", "ab<<\1>>d<<\2>>g")' -echo 'abcdefg' | run_mlr --nidx put '$1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g")' -echo 'abXdefg' | run_mlr --nidx put '$1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g")' -echo 'abdefg' | run_mlr --nidx put '$1 = sub($1, "ab(c)?d(..)g", "ab<<\1>>d<<\2>>g")' - -# ---------------------------------------------------------------- -announce DSL SUBSTR - -run_mlr put -q ' - int n = strlen($x); - print "input= <<".$x.">>"; - for (i = -n-2; i <= n+2; i += 1) { - for (j = -n-2; j <= n+2; j += 1) { - print "i: ".fmtnum(i,"%3lld") - ." j:".fmtnum(j,"%3lld") - ." substr(".$x.",".fmtnum(i,"%3lld").",".fmtnum(j,"%3lld")."): <<" - .substr($x, i, j) .">>"; - } - print; -} -' << EOF -x= -x=o -x=o1 -x=o123456789 -EOF - -# ---------------------------------------------------------------- -announce DSL SYSTEM - -run_mlr put '$counter = system("echo X".NR."Y")' $indir/abixy - -# ---------------------------------------------------------------- -announce DSL OOSVARS - -run_mlr --opprint put -v 'begin{@ox=0}; $d=$x-@ox; @ox=$x' $indir/abixy -run_mlr --opprint put -v 'begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy -run_mlr --opprint put -v '$d=$x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy -run_mlr --opprint put -v 'begin{@ox="no"}; $d=@ox == "no" ? 1.0 : $x/@ox; @ox=$x' then step -a ratio -f x $indir/abixy -run_mlr --opprint put -v 'begin{@rsum = 0}; @rsum = @rsum + $x; $rsum = @rsum' $indir/abixy -run_mlr --opprint put -v 'begin{@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i' $indir/abixy -run_mlr --opprint put -v 'begin {@a=0; @b=0; @c=0}; $za=@a; $zb=@b; $zc=@c; $d=@a+@b+@c; @a=@b; @b=@c; @c=$i' $indir/abixy -run_mlr --opprint put -v 'begin{@ox=0}; $d=$x-@ox; @ox=$x' $indir/abixy - -run_mlr put -v '@a=$a; @b=$b; @c=$x; end {emitf @a; emitf @b; emitf @c}' $indir/abixy -run_mlr put -v '@a=$a; @b=$b; @c=$x; end{emitf @a, @b, @c}' $indir/abixy - -run_mlr --opprint put -v 'begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x; end{@mean=@sum/@count; emitf @mean}' $indir/abixy -run_mlr --opprint put -v 'end{@mean=@sum/@count; emitf @mean}; begin {@count=0; @sum=0.0}; @count=@count+1; @sum=@sum+$x' $indir/abixy - -run_mlr put -v 'begin{ @a = @b[1] }; $c = @d; @e[$i][2+$j][3] = $4; end{@f[@g[5][@h]] = 6}' /dev/null - -run_mlr put '@y[$a]=$y; end{dump}' $indir/abixy - -run_mlr stats1 -a sum -f y -g a $indir/abixy -run_mlr put '@y_sum[$a] = $y; end{dump}' $indir/abixy - - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump}' $indir/unset1.dkvp - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump}' $indir/unset1.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump}' $indir/unset1.dkvp - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump}' $indir/unset1.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump}' $indir/unset1.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump}' $indir/unset1.dkvp - - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @s ; dump}' $indir/unset4.dkvp - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t ; dump}' $indir/unset4.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @t[1] ; dump}' $indir/unset4.dkvp - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u ; dump}' $indir/unset4.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1] ; dump}' $indir/unset4.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @u[1][2]; dump}' $indir/unset4.dkvp - -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset all; dump}' $indir/unset4.dkvp -run_mlr put -q '@s=$x; @t[$a]=$x; @u[$a][$b]=$x; end{dump; unset @*; dump}' $indir/unset4.dkvp - -run_mlr put 'unset $x' $indir/unset4.dkvp -run_mlr put 'unset $*; $aaa = 999' $indir/unset4.dkvp -run_mlr --from $indir/abixy put 'x = 1; print "OX=".x; unset x; print "NX=".x' - -run_mlr put -q '@{variable.name} += $x; end{emit @{variable.name}}' $indir/abixy -run_mlr put -q '@{variable.name}[$a] += $x; end{emit @{variable.name},"a"}' $indir/abixy - -run_mlr put 'for (k,v in $*) { if (k == "i") {unset $[k]}}' $indir/abixy - -run_mlr --opprint --from $indir/abixy put -q ' - @output[NR] = $*; - end { - for ((nr, k), v in @output) { - if (nr == 4 || k == "i") { - unset @output[nr][k] - } - } - emitp @output, "NR", "k" - } -' - -# ---------------------------------------------------------------- -announce DSL PATTERN-ACTION BLOCKS - -run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {}; $x=6; end{@z=9}' /dev/null -run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1}; $x=6; end{@z=9}' /dev/null -run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2}; $x=6; end{@z=9}' /dev/null -run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;$t=2;$u=3}; $x=6; end{@z=9}' /dev/null -run_mlr put -v 'begin{@a=1}; $e=2; $f==$g||$h==$i {$s=1;@t["u".$5]=2;emitf @v,@w;dump}; $x=6; end{@z=9}' /dev/null -run_mlr put -v 'begin{true{@x=1}}; true{@x=2}; end{true{@x=3}}' /dev/null - -# ---------------------------------------------------------------- -announce DSL STACK-ALLOCATION - -# This important test validates the local-stack allocator: which variables are -# assigned which offsets in the stack, and how the local-extent contract is -# satisfied by the clear-at-enter-subframe logic. The -v flag gives context on -# the AST; the -a flag provides the essential output on variable placement; the -# Miller script per se validates semantics. - -run_mlr --from $indir/abixy put -v -a -f $indir/test-dsl-stack-allocation.mlr - -# These test absent-null handing for as-yet-undefined localvars in expression RHSs. -run_mlr --from $indir/abixy put 'a=a; $oa = a' -run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a' -run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a' -run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a' -run_mlr --from $indir/abixy put 'a=a; $oa = a; a = a; $ob = a; a = b; $oc = a; b = 3; b = a; $od = a; b = 4;a = b; $oe= a' - -# ---------------------------------------------------------------- -announce DSL IF-CHAINING - -mention IF/ELIF WITH ELSE -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR==1) { - $x = 2; - $y = 3 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 4) { - $x = 5; - $y = 6 - } else { - $x = 1007; - $y = 1008 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 9) { - $x = 10; - $y = 11 - } elif (NR == 12) { - $x = 13; - $y = 14 - } else { - $x = 1015; - $y = 1016 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 17) { - $x = 18; - $y = 19 - } elif (NR == 20) { - $x = 21; - $y = 22 - } elif (NR == 23) { - $x = 24; - $y = 25 - } else { - $x = 1026; - $y = 1027 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 28) { - $x = 29; - $y = 30 - } elif (NR == 31) { - $x = 32; - $y = 33 - } elif (NR == 34) { - $x = 35; - $y = 36 - } elif (NR == 37) { - $x = 38; - $y = 39 - } else { - $x = 1040; - $y = 1041 - }' - -mention IF/ELIF WITHOUT ELSE -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 1) { - $x = 2; - $y = 3 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 4) { - $x = 5; - $y = 6 - } elif (NR == 7) { - $x = 8; - $y = 9 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 10) { - $x = 11; - $y = 12 - } elif (NR == 13) { - $x = 14; - $y = 15 - } elif (NR == 16) { - $x = 17; - $y = 18 - }' - -run_mlr --from $indir/xy40.dkvp put -v ' - if (NR == 19) { - $x = 20; - $y = 21 - } elif (NR == 22) { - $x = 23; - $y = 24 - } elif (NR == 25) { - $x = 26; - $y = 37 - } elif (NR == 28) { - $x = 29; - $y = 30 - }' - -# ---------------------------------------------------------------- -announce DSL INDIRECT SREC ASSIGNMENTS - -run_mlr put -v '$["a"] = $["b"]; $["x"] = 10 * $["y"]' $indir/abixy -run_mlr --from $indir/abixy put 'while (NF < 256) { $["k".string(NF+1)] = "v".string(NF) }' - -# ---------------------------------------------------------------- -announce DSL INDIRECT OOSVAR ASSIGNMENTS - -run_mlr --opprint put -v '@s = NR; $t = @s; $u=@["s"]; $v = $t - $u' $indir/abixy - -run_mlr put -v '@t["u"] = NR; $tu = @["t"]["u"]; emitp all' $indir/abixy -run_mlr put -v '@t["u"] = NR; $tu = @["t"]["u"]; emitp @*' $indir/abixy - -run_mlr put -v '@["s"] = $x; emitp all' $indir/abixy - -run_mlr put -v '@["t"]["u"] = $y; emitp all' $indir/abixy - -# xxx @* on the right -# xxx @* on the left - -# ---------------------------------------------------------------- -announce OOSVAR-FROM-SREC ASSIGNMENT - -run_mlr put -v '@v = $*' /dev/null -run_mlr put -v '@v[1] = $*' /dev/null -run_mlr put -v '@v[$2] = $*' /dev/null -run_mlr put -v 'NR == 3 {@v = $*}' /dev/null -run_mlr put -v 'NR == 3 {@v[1] = $*}' /dev/null -run_mlr put -v 'NR == 3 {@v[$2] = $*}' /dev/null - -run_mlr --oxtab put -q '@v = $*; end {emitp @v }' $indir/abixy-het - -run_mlr --oxtab put -q '@v[$a] = $*; end {emitp @v }' $indir/abixy-het -run_mlr --oxtab put -q '@v[$a] = $*; end {emitp @v, "a" }' $indir/abixy-het - -run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v }' $indir/abixy-het -run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v, "a" }' $indir/abixy-het -run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emitp @v, "a", "b"}' $indir/abixy-het - -# ---------------------------------------------------------------- -announce SREC-FROM-OOSVAR ASSIGNMENT - -run_mlr put -v '$* = @v ' /dev/null -run_mlr put -v '$* = @v[1] ' /dev/null -run_mlr put -v '$* = @v[$2]' /dev/null -run_mlr put -v 'NR == 3 {$* = @v }' /dev/null -run_mlr put -v 'NR == 3 {$* = @v[1] }' /dev/null -run_mlr put -v 'NR == 3 {$* = @v[$2]}' /dev/null - -run_mlr put '@v[NR] = $a; NR == 7 { @v = $*} ; $* = @v' $indir/abixy-het - -# ---------------------------------------------------------------- -announce OOSVAR-FROM-OOSVAR ASSIGNMENT - -run_mlr put -v '@u = @v' /dev/null -run_mlr put -v '@u = @v[1]' /dev/null -run_mlr put -v '@u[2] = @v' /dev/null -run_mlr put -v '@u[2] = @v[1]' /dev/null - -run_mlr put -v 'begin { @u = @v }' /dev/null -run_mlr put -v 'begin { @u = @v[1] }' /dev/null -run_mlr put -v 'begin { @u[2] = @v }' /dev/null -run_mlr put -v 'begin { @u[2] = @v[1] }' /dev/null - -run_mlr put -v 'NR == 3 { @u = @v }' /dev/null -run_mlr put -v 'NR == 3 { @u = @v[1] }' /dev/null -run_mlr put -v 'NR == 3 { @u[2] = @v }' /dev/null -run_mlr put -v 'NR == 3 { @u[2] = @v[1] }' /dev/null - -run_mlr put -v 'end { @u = @v }' /dev/null -run_mlr put -v 'end { @u = @v[1] }' /dev/null -run_mlr put -v 'end { @u[2] = @v }' /dev/null -run_mlr put -v 'end { @u[2] = @v[1] }' /dev/null - - -run_mlr put -q '@s += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr put -q '@s[1] += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr put -q '@s[1] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr put -q '@s[1][2] += $i; @t=@s; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr put -q '@s[1][2] += $i; @t[3]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t[3]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t[3]=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s[1]; end{dump; emitp@s; emitp @t}' $indir/abixy -run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s[1][2]; end{dump; emitp@s; emitp @t}' $indir/abixy - -run_mlr --opprint put -q '@s[NR][NR] = $i/100; @t[NR*10]=@s; end{emitp@s,"A","B"; emitp @t,"C","D","E"}' $indir/abixy - -# ---------------------------------------------------------------- -announce DSL WHILE/DO-WHILE LOOPS - -run_mlr put -v 'while($i < 5) { $i += 1}' $indir/abixy -run_mlr put -v 'do {$i += 1} while($i < 5)' $indir/abixy - -# ---------------------------------------------------------------- -announce DSL FOR-SREC LOOPS - -mention empty for-srec -run_mlr --from $indir/abixy put -v 'for(k,v in $*) { }' - -mention for-srec without boundvars -run_mlr --from $indir/abixy put -v 'for(k,v in $*) {$nr= NR}' - -mention for-srec modifying the srec -run_mlr --from $indir/abixy put -v 'for(k,v in $*) {unset $[k]}; $j = NR' -run_mlr --from $indir/abixy put -v 'for(k,v in $*) {if (k != "x") {unset $[k]}}; $j = NR' -run_mlr --from $indir/abixy --opprint put -S -v 'for(k,v in $*) {$[k."_orig"]=v; $[k] = "other"}' -run_mlr --from $indir/abixy put -S -v 'for(k,v in $*) {$[v]=k}' - -run_mlr --from $indir/abixy put -v ' - $sum = 0; - for(k,v in $*) { - if (k =~ "^[xy]$") { - $sum += $[k] - } - }' - -run_mlr --from $indir/abixy put -S -v ' - $sum = float(0); - for(k,v in $*) { - if (k =~ "^[xy]$") { - $sum += float($[k]) - } - }' - -# ---------------------------------------------------------------- -announce DSL FOR-OOSVAR LOOPS - -run_mlr --opprint -n put -v ' - @o[1][1]["text1"][NR] = $a; - @o[1][2]["text2"][NR] = $b; - @o[1][2][$a][$i*100] = $x; - for((k1,k2),v in @o[1][2]) { - @n[3][4][k2][k1] = v; - } - end { - emit @n, "a", "b", "c", "d" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @o[1][1]["text1"][NR] = $a; - @o[1][2]["text2"][NR] = $b; - @o[1][2][$a][$i*100] = $x; - for((k1,k2),v in @o[1][2]) { - @n[3][4][k2][k1] = v; - } - end { - emit @n, "a", "b", "c", "d" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @sum[$a][$b] += $x; - @count[$a][$b] += 1; - end { - for ((k1, k2), v in @sum) { - @mean[k1][k2] = @sum[k1][k2] / @count[k1][k2] - } - emitp @sum, "a", "b"; - emitp @count, "a", "b"; - emitp @mean, "a", "b" - } -' - -run_mlr --opprint --from $indir/abixy-wide put -q ' - @value["sum"][$a][$b] += $x; - @value["count"][$a][$b] += 1; - end { - for ((k1, k2), v in @value["sum"]) { - @value["mean"][k1][k2] = @value["sum"][k1][k2] / @value["count"][k1][k2] - } - emitp @value, "stat", "a", "b"; - } -' - -mlr_expect_fail -n put -v 'for (k, k in $*) {}' - -mlr_expect_fail -n put -v 'for (k, k in @*) {}' - -mlr_expect_fail -n put -v 'for ((a,a), c in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b), a in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b), b in @*) {}' - -mlr_expect_fail -n put -v 'for ((a,a,c), d in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b,a), d in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b,c), a in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b,b), d in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b,c), b in @*) {}' -mlr_expect_fail -n put -v 'for ((a,b,c), c in @*) {}' - -run_mlr --from $indir/xyz2 put -q 'func f() { return {"a"."b":"c"."d",3:4}}; for (k,v in f()){print "k=".k.",v=".v}' -run_mlr --from $indir/xyz2 put -q 'for (k,v in {"a"."b":"c"."d",3:"c"}) {print "k=".k.",v=".v}' -run_mlr --from $indir/xyz2 put -q 'o["a"."b"]="c"."d"; for (k,v in o) {print "k=".k.",v=".v}' -run_mlr --from $indir/xyz2 put -q '@o["a"."b"]="c"."d"; for (k,v in @o) {print "k=".k.",v=".v}' -run_mlr --from $indir/xyz2 put 'for (k in $*) { print k}' -run_mlr --from $indir/xyz2 put 'm=$*; for (k in m) { print k}' - -# ---------------------------------------------------------------- -announce DSL FOR-BIND LOOPS FOR VALGRIND - -mention key-only fors - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = xy; - for (k in o) { - print "k is " . k; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab] = xy; - for (k in @o) { - print "k is " . k; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k in {ab : xy}) { - print "k is " . k; - } -' - -run_mlr --from $indir/abixy-het put ' - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : xy}; - } - for (k in f($a, $b, $x, $y)) { - print "k is " . k; - } -' - -mention key-value fors with scalar values - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = xy; - for (k, v in o) { - print "k is " . k . " v is " . v; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab] = xy; - for (k, v in @o) { - print "k is " . k . " v is " . v; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k, v in {ab : xy}) { - print "k is " . k . " v is " . v; - } -' - -run_mlr --from $indir/abixy-het put ' - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : xy}; - } - for (k, v in f($a, $b, $x, $y)) { - print "k is " . k . " v is " . v; - } -' - - -mention key-value fors with map values - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - map o = {}; - o[ab] = {"foo": xy}; - for (k, v in o) { - print "k is " . k . " v is "; - dump v; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - unset @o; - @o[ab]["foo"] = xy; - for (k, v in @o) { - print "k is " . k . " v is "; - dump v; - } -' - -run_mlr --from $indir/abixy-het put ' - ab = $a . "_" . $b; - xy = $x . "_" . $y; - for (k, v in {ab : {"foo": xy}}) { - print "k is " . k . " v is "; - dump v; - } -' - -run_mlr --from $indir/abixy-het put ' - func f(a, b, x, y): map { - ab = $a . "_" . $b; - xy = $x . "_" . $y; - return {ab : {"foo" : xy}}; - } - for (k, v in f($a, $b, $x, $y)) { - print "k is " . k . " v is "; - dump v; - } -' - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN SINGLE WHILE/DO-WHILE - -run_mlr --opprint --from $indir/abixy put ' - while ($i < 5) { - $i += 1; - break; - $a = "ERROR"; - } -' - -run_mlr --opprint --from $indir/abixy put ' - while ($i < 5) { - $i += 1; - continue; - $a = "ERROR"; - } -' - -run_mlr --opprint --from $indir/abixy put ' - do { - $i += 1; - break; - $a = "ERROR"; - } while ($i < 5); -' - -run_mlr --opprint --from $indir/abixy put ' - do { - $i += 1; - continue; - $a = "ERROR"; - } while ($i < 5); -' - -run_mlr --opprint --from $indir/abixy put ' - $NR = NR; - while ($i < 5) { - $i += 1; - if (NR == 2) { - break; - } - $a = "reached"; - } -' - -run_mlr --opprint --from $indir/abixy put ' - $NR = NR; - while ($i < 5) { - $i += 1; - if (NR == 2) { - continue; - } - $a = "reached"; - } -' - -run_mlr --opprint --from $indir/abixy put ' -$NR = NR; - do { - $i += 1; - if (NR == 2) { - break; - } - $a = "reached"; - } while ($i < 5); -' - -run_mlr --opprint --from $indir/abixy put ' - $NR = NR; - do { - $i += 1; - if (NR == 2) { - continue; - } - $a = "reached"; - } while ($i < 5); -' - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN NESTED WHILE/DO-WHILE - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - break; - while ($k < 7) { - $k += 1 - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - continue; - while ($k < 7) { - $k += 1 - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - break; - $k += 10000; - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - continue; - $k += 10000; - } - } -' - - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - break; - } - while ($k < 7) { - $k += 1 - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - continue; - } - while ($k < 7) { - $k += 1 - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - if (NR == 2 || NR == 8) { - break; - } - $k += 10000; - } - } -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - while ($j < 4) { - $k = NR; - $j += 1; - while ($k < 7) { - $k += 1; - if (NR == 2 || NR == 8) { - continue; - } - $k += 10000; - } - } -' - - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - break; - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - continue; - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - break; - $k += 10000; - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - continue; - $k += 10000; - } while ($k < 7); - } while ($j < 4); -' - - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - break; - } - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - if (NR == 2 || NR == 8) { - continue; - } - do { - $k += 1 - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - if (NR == 2 || NR == 8) { - break; - } - $k += 10000; - } while ($k < 7); - } while ($j < 4); -' - -run_mlr --opprint --from $indir/abixy put ' - $j = NR; - do { - $k = NR; - $j += 1; - do { - $k += 1; - if (NR == 2 || NR == 8) { - continue; - } - $k += 10000; - } while ($k < 7); - } while ($j < 4); -' - - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN SINGLE FOR-SREC - -run_mlr --opprint --from $indir/abixy put -q ' - for (k,v in $*) { - @logging1[NR][k] = v; - if (k == "x") { - break; - } - } - end { - emitp @logging1, "NR", "k"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k,v in $*) { - if (k == "x") { - break; - } - @logging2[NR][k] = v; - } - end { - emitp @logging2, "NR", "k"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k,v in $*) { - @logging3[NR][k] = v; - if (k == "x") { - continue; - } - } - end { - emitp @logging3, "NR", "k"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k,v in $*) { - if (k == "x") { - continue; - } - @logging4[NR][k] = v; - } - end { - emitp @logging4, "NR", "k" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k,v in $*) { - @logging1[NR][k] = v; - if (k == "x") { - break; - } - } - - for (k,v in $*) { - if (k == "x") { - break; - } - @logging2[NR][k] = v; - } - - for (k,v in $*) { - @logging3[NR][k] = v; - if (k == "x") { - continue; - } - } - - for (k,v in $*) { - if (k == "x") { - continue; - } - @logging4[NR][k] = v; - } - - end { - emitp @logging1, "NR", "k"; - emitp @logging2, "NR", "k"; - emitp @logging3, "NR", "k"; - emitp @logging4, "NR", "k" - } -' - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN NESTED FOR-SREC - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - break; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - break; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - continue; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - continue; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "b") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - break - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - break - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - for (k1, v1 in $*) { - @output1[NR][k1] = "before"; - if (k1 == "b") { - continue - } - @output1[NR][k1] = v1; - for (k2, v2 in $*) { - @output2[NR][k1."_".k2] = "before"; - if (k2 == "a") { - continue - } - @output2[NR][k1."_".k2] = v2; - } - } - end { - emit @output1, "NR", "name"; - emit @output2, "NR", "names"; - } -' - - -# ---------------------------------------------------------------- -announce FOR-MAP DEPTH TESTS - -mention 'for full oosvar' -run_mlr --from $indir/abixy put '@o[1][2] = 7; for(k1,v in @*) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1),v in @*) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1,k2),v in @*) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2] = 7; for((k1,k2,k3),v in @*) {$x+=10;$y+=100}' - -mention 'for oosvar submap' -run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for(k1,v in @o[1][2]) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1),v in @o[1][2]) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1,k2),v in @o[1][2]) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put '@o[1][2][3] = 7; for((k1,k2,k3),v in @o[1][2]) {$x+=10;$y+=100}' - -mention 'for local' -run_mlr --from $indir/abixy put 'o[1][2] = 7; for(k1,v in o) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1),v in o) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1,k2),v in o) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'o[1][2] = 7; for((k1,k2,k3),v in o) {$x+=10;$y+=100}' - -mention 'for map-literal' -run_mlr --from $indir/abixy put 'for(k1,v in {1:{2:7}}) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'for((k1),v in {1:{2:7}}) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'for((k1,k2),v in {1:{2:7}}) {$x+=10;$y+=100}' -run_mlr --from $indir/abixy put 'for((k1,k2,k3),v in {1:{2:7}}) {$x+=10;$y+=100}' - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN SINGLE FOR-OOSVAR - -mention single-key tests, direct break/continue - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - break; - @output[k1] = v; - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - break; - @output[k1] = "ERROR"; - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - continue; - @output[k1] = v - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - continue; - @output[k1] = "ERROR"; - } - emit @output, "NR", "name" - } -' - -mention single-key tests, indirect break/continue - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - if (k1 == "i") { - break; - } - @output[k1] = v; - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - if (k1 == "i") { - break; - } - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - if (k1 == "i") { - continue; - } - @output[k1] = v - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for (k1, v in @logging[2]) { - @output[k1] = v; - if (k1 == "i") { - continue; - } - @output[k1] = "reached"; - } - emit @output, "NR", "name" - } -' - -mention multiple-key tests, direct break/continue - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - break; - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - break; - @output[k1][k2] = "ERROR" - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - continue; - @output[k1][k2] = v - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - continue; - @output[k1][k2] = "ERROR"; - } - emit @output, "NR", "name" - } -' - -mention multiple-key tests, indirect break/continue - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 == 5) { - break; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } -' -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k2 == "i") { - break; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - if (k1 == 5) { - break; - } - } - emit @output, "NR", "name" - } -' -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = v; - if (k2 == "i") { - break; - } - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 == 5) { - continue; - } - @output[k1][k2] = v - } - emit @output, "NR", "name" - } -' -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k2 == "i") { - continue; - } - @output[k1][k2] = v - } - emit @output, "NR", "name" - } -' - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = "before"; - if (k1 == 5) { - continue; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } -' -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - @output[k1][k2] = "before"; - if (k2 == "i") { - continue; - } - @output[k1][k2] = v; - } - emit @output, "NR", "name" - } -' - - -# ---------------------------------------------------------------- -announce DSL BREAK/CONTINUE IN NESTED FOR-OOSVAR - -run_mlr --opprint --from $indir/abixy put -q ' - @logging[NR] = $*; - end { - for ((k1, k2), v in @logging) { - if (k1 != 2) { - continue - } - for ((k3, k4), v in @logging) { - if (k3 != 4) { - continue - } - @output[k1][k2][k3][k4] = v; - } - } - emit @output, "NR1", "name1", "NR2", "name2" - } -' - -# ---------------------------------------------------------------- -announce DSL PRINT - -run_mlr put -q 'print 1; print "two"; print $a; print; print $i < 4; print "y is ".string($y); print ""' $indir/abixy -run_mlr put -q 'printn 1; printn "two"; printn $a; printn; printn $i < 4; printn "y is ".string($y); print ""' $indir/abixy - -run_mlr put -q 'print $*; print $*; print {}; print' $indir/abixy -run_mlr put -q 'printn $*; printn $*; printn {}; print' $indir/abixy - -# ---------------------------------------------------------------- -announce ABSENT/EMPTY - -run_mlr put -q '@sum += $x; end{emitp @sum}' $indir/abixy -run_mlr put -q '@sum[$a] += $x; end{emitp @sum, "a"}' $indir/abixy -run_mlr put '$nonesuch = @nonesuch' $indir/abixy - -run_mlr put -q '@sum += $x; end{emitp @sum}' $indir/abixy-het -run_mlr put -q '@sum[$a] += $x; end{emitp @sum, "a"}' $indir/abixy-het -run_mlr put '$nonesuch = @nonesuch' $indir/abixy-het - -run_mlr put -q '@sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum}' $indir/abixy -run_mlr put -q '@sum += $x; @sumtype = typeof(@sum); @xtype = typeof($x); emitf @sumtype, @xtype, @sum; end{emitp @sum}' $indir/abixy-het - -run_mlr put '$z = $x + $y' $indir/typeof.dkvp -run_mlr put '$z = $x + $u' $indir/typeof.dkvp - -run_mlr put '@s = @s + $y; emitp @s' $indir/typeof.dkvp -run_mlr put '@s = @s + $u; emitp @s' $indir/typeof.dkvp - -run_mlr put '$z = $x + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z)' $indir/typeof.dkvp -run_mlr put '$z = $x + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z)' $indir/typeof.dkvp - -run_mlr put '@s = @s + $y; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s)' $indir/typeof.dkvp -run_mlr put '@s = @s + $u; $x=typeof($x);$y=typeof($y);$z=typeof($z);$s=typeof(@s)' $indir/typeof.dkvp - -run_mlr cat << EOF -x=1 -x= -x=7 -EOF - -run_mlr --ofs tab put '$osum=@sum; $ostype=typeof(@sum);$xtype=typeof($x);@sum+=$x; $nstype=typeof(@sum);$nsum=@sum; end { emit @sum }' < "'$tee2'/out.".$a, $*' $indir/abixy -run_cat $tee2/out.eks -run_cat $tee2/out.hat -run_cat $tee2/out.pan -run_cat $tee2/out.wye -run_cat $tee2/out.zee - -run_mlr put -q --no-fflush 'tee > "'$tee2'/out.".$a, $*' $indir/abixy -run_cat $tee2/out.eks -run_cat $tee2/out.hat -run_cat $tee2/out.pan -run_cat $tee2/out.wye -run_cat $tee2/out.zee - -run_mlr put -q 'tee >> "'$tee2'/out.".$a, $*' $indir/abixy -run_cat $tee2/out.eks -run_cat $tee2/out.hat -run_cat $tee2/out.pan -run_cat $tee2/out.wye -run_cat $tee2/out.zee - -run_mlr put -q -o json 'tee > "'$tee2'/out.".$a, $*' $indir/abixy -run_cat $tee2/out.eks -run_cat $tee2/out.hat -run_cat $tee2/out.pan -run_cat $tee2/out.wye -run_cat $tee2/out.zee - -run_mlr put -q 'tee | "tr \[a-z\] \[A-Z\]", $*' $indir/abixy - -run_mlr put -q -o json 'tee | "tr \[a-z\] \[A-Z\]", $*' $indir/abixy - -touch $tee2/err1 -run_mlr put -q 'tee > stdout, $*' $indir/abixy 2> $tee2/err1 -run_cat $tee2/err1 - -touch $tee2/err2 -run_mlr put -q 'tee > stderr, $*' $indir/abixy 2> $tee2/err2 -run_cat $tee2/err2 - -# ---------------------------------------------------------------- -announce DSL PRINT REDIRECTS - -print1=$reloutdir/print1 -mkdir -p $print1 - -run_mlr put -q 'print > "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $print1/out.eks -run_cat $print1/out.hat -run_cat $print1/out.pan -run_cat $print1/out.wye -run_cat $print1/out.zee - -run_mlr put -q 'print > "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $print1/out.eks -run_cat $print1/out.hat -run_cat $print1/out.pan -run_cat $print1/out.wye -run_cat $print1/out.zee - -run_mlr put -q 'print >> "'$print1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $print1/out.eks -run_cat $print1/out.hat -run_cat $print1/out.pan -run_cat $print1/out.wye -run_cat $print1/out.zee - -run_mlr put -q 'print | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i' $indir/abixy - -touch $print1/err1 -run_mlr put -q 'print > stdout, "abi:".$a.$b.$i' $indir/abixy 2> $print1/err1 -run_cat $print1/err1 - -touch $print1/err2 -run_mlr put -q 'print > stderr, "abi:".$a.$b.$i' $indir/abixy 2> $print1/err2 -run_cat $print1/err2 - -# ---------------------------------------------------------------- -announce DSL PRINTN REDIRECTS - -printn1=$reloutdir/printn1 -mkdir -p $printn1 - -run_mlr put -q 'printn > "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $printn1/out.eks -run_cat $printn1/out.hat -run_cat $printn1/out.pan -run_cat $printn1/out.wye -run_cat $printn1/out.zee - -run_mlr put -q 'printn > "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $printn1/out.eks -run_cat $printn1/out.hat -run_cat $printn1/out.pan -run_cat $printn1/out.wye -run_cat $printn1/out.zee - -run_mlr put -q 'printn >> "'$printn1'/out.".$a, "abi:".$a.$b.$i' $indir/abixy -run_cat $printn1/out.eks -run_cat $printn1/out.hat -run_cat $printn1/out.pan -run_cat $printn1/out.wye -run_cat $printn1/out.zee - -run_mlr put -q 'printn | "tr \[a-z\] \[A-Z\]", "abi:".$a.$b.$i' $indir/abixy - -touch $printn1/err1 -run_mlr put -q 'printn > stdout, "abi:".$a.$b.$i' $indir/abixy 2> $printn1/err1 -run_cat $printn1/err1 - -touch $printn1/err2 -run_mlr put -q 'printn > stderr, "abi:".$a.$b.$i' $indir/abixy 2> $printn1/err2 -run_cat $printn1/err2 - -# ---------------------------------------------------------------- -announce DSL DUMP REDIRECTS - -dump1=$reloutdir/dump1 -mkdir -p $dump1 - -run_mlr put -q '@v=$*; dump > "'$dump1'/out.".$a' $indir/abixy -run_cat $dump1/out.eks -run_cat $dump1/out.hat -run_cat $dump1/out.pan -run_cat $dump1/out.wye -run_cat $dump1/out.zee - -run_mlr put -q '@v=$*; dump > "'$dump1'/out.".$a' $indir/abixy -run_cat $dump1/out.eks -run_cat $dump1/out.hat -run_cat $dump1/out.pan -run_cat $dump1/out.wye -run_cat $dump1/out.zee - -run_mlr put -q '@v=$*; dump >> "'$dump1'/out.".$a' $indir/abixy -run_cat $dump1/out.eks -run_cat $dump1/out.hat -run_cat $dump1/out.pan -run_cat $dump1/out.wye -run_cat $dump1/out.zee - -run_mlr put -q '@v=$*; dump | "tr \[a-z\] \[A-Z\]"' $indir/abixy - -touch $dump1/err1 -run_mlr put -q '@v[NR] = $*; NR == 2 { dump > stdout }' $indir/abixy 2> $dump1/err1 -run_cat $dump1/err1 - -touch $dump1/err2 -run_mlr put -q '@v[NR] = $*; NR == 2 { dump > stderr }' $indir/abixy 2> $dump1/err2 -run_cat $dump1/err2 - -# ---------------------------------------------------------------- -announce DSL EMITF REDIRECTS - -emitf1=$reloutdir/emitf1 -mkdir -p $emitf1 - -run_mlr put -q '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy -run_cat $emitf1/out.ekspan -run_cat $emitf1/out.ekswye -run_cat $emitf1/out.ekszee -run_cat $emitf1/out.hatwye -run_cat $emitf1/out.panpan -run_cat $emitf1/out.panwye -run_cat $emitf1/out.wyepan -run_cat $emitf1/out.wyewye -run_cat $emitf1/out.zeepan -run_cat $emitf1/out.zeewye - -run_mlr put -q '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy -run_cat $emitf1/out.ekspan -run_cat $emitf1/out.ekswye -run_cat $emitf1/out.ekszee -run_cat $emitf1/out.hatwye -run_cat $emitf1/out.panpan -run_cat $emitf1/out.panwye -run_cat $emitf1/out.wyepan -run_cat $emitf1/out.wyewye -run_cat $emitf1/out.zeepan -run_cat $emitf1/out.zeewye - -run_mlr put -q '@a=$a; @b=$b; emitf >> "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy -run_cat $emitf1/out.ekspan -run_cat $emitf1/out.ekswye -run_cat $emitf1/out.ekszee -run_cat $emitf1/out.hatwye -run_cat $emitf1/out.panpan -run_cat $emitf1/out.panwye -run_cat $emitf1/out.wyepan -run_cat $emitf1/out.wyewye -run_cat $emitf1/out.zeepan -run_cat $emitf1/out.zeewye - -run_mlr put -q -o json '@a=$a; @b=$b; emitf > "'$emitf1'/out.".$a.$b, @a, @b' $indir/abixy -run_cat $emitf1/out.ekspan -run_cat $emitf1/out.ekswye -run_cat $emitf1/out.ekszee -run_cat $emitf1/out.hatwye -run_cat $emitf1/out.panpan -run_cat $emitf1/out.panwye -run_cat $emitf1/out.wyepan -run_cat $emitf1/out.wyewye -run_cat $emitf1/out.zeepan -run_cat $emitf1/out.zeewye - -run_mlr put -q '@a=$a; @b=$b; emitf | "tr \[a-z\] \[A-Z\]", @a, @b' $indir/abixy - -touch $emitf1/err1 -run_mlr put -q '@a=$a; @b=$b; emitf > stdout, @a, @b' $indir/abixy 2> $emitf1/err1 -run_cat $emitf1/err1 - -touch $emitf1/err2 -run_mlr put -q '@a=$a; @b=$b; emitf > stderr, @a, @b' $indir/abixy 2> $emitf1/err2 -run_cat $emitf1/err2 - -# ---------------------------------------------------------------- -announce DSL EMITP REDIRECTS - -emitp1=$reloutdir/emitp1 -mkdir -p $emitp1 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy -run_cat $emitp1/out.ekspan -run_cat $emitp1/out.ekswye -run_cat $emitp1/out.panpan -run_cat $emitp1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy -run_cat $emitp1/out.ekspan -run_cat $emitp1/out.ekswye -run_cat $emitp1/out.panpan -run_cat $emitp1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp1'/out.".$a.$b, @a' $indir/abixy -run_cat $emitp1/out.ekspan -run_cat $emitp1/out.ekswye -run_cat $emitp1/out.panpan -run_cat $emitp1/out.wyewye - -run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp1'/out.".$a.$b, @a' $indir/abixy -run_cat $emitp1/out.ekspan -run_cat $emitp1/out.ekswye -run_cat $emitp1/out.panpan -run_cat $emitp1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a' $indir/abixy - -touch $emitp1/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @a' $indir/abixy 2> $emitp1/err1 -run_cat $emitp1/err1 - -touch $emitp1/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @a' $indir/abixy 2> $emitp1/err2 -run_cat $emitp1/err2 - - -emitp2=$reloutdir/emitp2 -mkdir -p $emitp2 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emitp2/out.ekspan -run_cat $emitp2/out.ekswye -run_cat $emitp2/out.panpan -run_cat $emitp2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emitp2/out.ekspan -run_cat $emitp2/out.ekswye -run_cat $emitp2/out.panpan -run_cat $emitp2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emitp2/out.ekspan -run_cat $emitp2/out.ekswye -run_cat $emitp2/out.panpan -run_cat $emitp2/out.wyewye - -run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emitp2/out.ekspan -run_cat $emitp2/out.ekswye -run_cat $emitp2/out.panpan -run_cat $emitp2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @a, "NR"' $indir/abixy - -touch $emitp2/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @a, "NR"' $indir/abixy 2> $emitp2/err1 -run_cat $emitp2/err1 - -touch $emitp2/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @a, "NR"' $indir/abixy 2> $emitp2/err2 -run_cat $emitp2/err2 - - -emitp3=$reloutdir/emitp3 -mkdir -p $emitp3 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emitp3/out.ekspan -run_cat $emitp3/out.ekswye -run_cat $emitp3/out.panpan -run_cat $emitp3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emitp3/out.ekspan -run_cat $emitp3/out.ekswye -run_cat $emitp3/out.panpan -run_cat $emitp3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emitp3/out.ekspan -run_cat $emitp3/out.ekswye -run_cat $emitp3/out.panpan -run_cat $emitp3/out.wyewye - -run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emitp3/out.ekspan -run_cat $emitp3/out.ekswye -run_cat $emitp3/out.panpan -run_cat $emitp3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b)' $indir/abixy - -touch $emitp3/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b)' $indir/abixy 2> $emitp3/err1 -run_cat $emitp3/err1 - -touch $emitp3/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b)' $indir/abixy 2> $emitp3/err2 -run_cat $emitp3/err2 - - -emitp4=$reloutdir/emitp4 -mkdir -p $emitp4 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emitp4/out.ekspan -run_cat $emitp4/out.ekswye -run_cat $emitp4/out.panpan -run_cat $emitp4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emitp4/out.ekspan -run_cat $emitp4/out.ekswye -run_cat $emitp4/out.panpan -run_cat $emitp4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp >> "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emitp4/out.ekspan -run_cat $emitp4/out.ekswye -run_cat $emitp4/out.panpan -run_cat $emitp4/out.wyewye - -run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emitp4/out.ekspan -run_cat $emitp4/out.ekswye -run_cat $emitp4/out.panpan -run_cat $emitp4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR"' $indir/abixy - -touch $emitp4/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, (@a, @b), "NR"' $indir/abixy 2> $emitp4/err1 -run_cat $emitp4/err1 - -touch $emitp4/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, (@a, @b), "NR"' $indir/abixy 2> $emitp4/err2 -run_cat $emitp4/err2 - - -emitp5=$reloutdir/emitp5 -mkdir -p $emitp5 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp5'/out.".$a.$b, @*' $indir/abixy -run_cat $emitp5/out.ekspan -run_cat $emitp5/out.ekswye -run_cat $emitp5/out.panpan -run_cat $emitp5/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*' $indir/abixy - -touch $emitp5/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @*' $indir/abixy 2> $emitp5/err1 -run_cat $emitp5/err1 - -touch $emitp5/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @*' $indir/abixy 2> $emitp5/err2 -run_cat $emitp5/err2 - - -emitp6=$reloutdir/emitp6 -mkdir -p $emitp6 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp6'/out.".$a.$b, all' $indir/abixy -run_cat $emitp6/out.ekspan -run_cat $emitp6/out.ekswye -run_cat $emitp6/out.panpan -run_cat $emitp6/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all' $indir/abixy - -touch $emitp6/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, all' $indir/abixy 2> $emitp6/err1 -run_cat $emitp6/err1 - -touch $emitp6/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, all' $indir/abixy 2> $emitp6/err2 -run_cat $emitp6/err2 - - -emitp7=$reloutdir/emitp7 -mkdir -p $emitp7 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp7'/out.".$a.$b, @*, "NR"' $indir/abixy -run_cat $emitp7/out.ekspan -run_cat $emitp7/out.ekswye -run_cat $emitp7/out.panpan -run_cat $emitp7/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", @*, "NR"' $indir/abixy - -touch $emitp7/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, @*, "NR"' $indir/abixy 2> $emitp7/err1 -run_cat $emitp7/err1 - -touch $emitp7/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, @*, "NR"' $indir/abixy 2> $emitp7/err2 -run_cat $emitp7/err2 - - -emitp8=$reloutdir/emitp8 -mkdir -p $emitp8 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > "'$emitp8'/out.".$a.$b, all, "NR"' $indir/abixy -run_cat $emitp8/out.ekspan -run_cat $emitp8/out.ekswye -run_cat $emitp8/out.panpan -run_cat $emitp8/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp | "tr \[a-z\] \[A-Z\]", all, "NR"' $indir/abixy - -touch $emitp8/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stdout, all, "NR"' $indir/abixy 2> $emitp8/err1 -run_cat $emitp8/err1 - -touch $emitp8/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emitp > stderr, all, "NR"' $indir/abixy 2> $emitp8/err2 -run_cat $emitp8/err2 - - -# ---------------------------------------------------------------- -announce DSL EMIT REDIRECTS - -emit1=$reloutdir/emit1 -mkdir -p $emit1 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy -run_cat $emit1/out.ekspan -run_cat $emit1/out.ekswye -run_cat $emit1/out.panpan -run_cat $emit1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy -run_cat $emit1/out.ekspan -run_cat $emit1/out.ekswye -run_cat $emit1/out.panpan -run_cat $emit1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit1'/out.".$a.$b, @a' $indir/abixy -run_cat $emit1/out.ekspan -run_cat $emit1/out.ekswye -run_cat $emit1/out.panpan -run_cat $emit1/out.wyewye - -run_mlr head -n 4 then put -q -o json '@a[NR]=$a; @b[NR]=$b; emit > "'$emit1'/out.".$a.$b, @a' $indir/abixy -run_cat $emit1/out.ekspan -run_cat $emit1/out.ekswye -run_cat $emit1/out.panpan -run_cat $emit1/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a' $indir/abixy - -touch $emit1/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @a' $indir/abixy 2> $emit1/err1 -run_cat $emit1/err1 - -touch $emit1/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @a' $indir/abixy 2> $emit1/err2 -run_cat $emit1/err2 - - -emit2=$reloutdir/emit2 -mkdir -p $emit2 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emit2/out.ekspan -run_cat $emit2/out.ekswye -run_cat $emit2/out.panpan -run_cat $emit2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emit2/out.ekspan -run_cat $emit2/out.ekswye -run_cat $emit2/out.panpan -run_cat $emit2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emit2/out.ekspan -run_cat $emit2/out.ekswye -run_cat $emit2/out.panpan -run_cat $emit2/out.wyewye - -run_mlr head -n 4 then put -q -o pprint '@a[NR]=$a; @b[NR]=$b; emit > "'$emit2'/out.".$a.$b, @a, "NR"' $indir/abixy -run_cat $emit2/out.ekspan -run_cat $emit2/out.ekswye -run_cat $emit2/out.panpan -run_cat $emit2/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @a, "NR"' $indir/abixy - -touch $emit2/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @a, "NR"' $indir/abixy 2> $emit2/err1 -run_cat $emit2/err1 - -touch $emit2/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @a, "NR"' $indir/abixy 2> $emit2/err2 -run_cat $emit2/err2 - - -emit3=$reloutdir/emit3 -mkdir -p $emit3 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emit3/out.ekspan -run_cat $emit3/out.ekswye -run_cat $emit3/out.panpan -run_cat $emit3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emit3/out.ekspan -run_cat $emit3/out.ekswye -run_cat $emit3/out.panpan -run_cat $emit3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emit3/out.ekspan -run_cat $emit3/out.ekswye -run_cat $emit3/out.panpan -run_cat $emit3/out.wyewye - -run_mlr head -n 4 then put -q --oxtab '@a[NR]=$a; @b[NR]=$b; emit > "'$emit3'/out.".$a.$b, (@a, @b)' $indir/abixy -run_cat $emit3/out.ekspan -run_cat $emit3/out.ekswye -run_cat $emit3/out.panpan -run_cat $emit3/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b)' $indir/abixy - -touch $emit3/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b)' $indir/abixy 2> $emit3/err1 -run_cat $emit3/err1 - -touch $emit3/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b)' $indir/abixy 2> $emit3/err2 -run_cat $emit3/err2 - - -emit4=$reloutdir/emit4 -mkdir -p $emit4 - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emit4/out.ekspan -run_cat $emit4/out.ekswye -run_cat $emit4/out.panpan -run_cat $emit4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emit4/out.ekspan -run_cat $emit4/out.ekswye -run_cat $emit4/out.panpan -run_cat $emit4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit >> "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emit4/out.ekspan -run_cat $emit4/out.ekswye -run_cat $emit4/out.panpan -run_cat $emit4/out.wyewye - -run_mlr head -n 4 then put -q --ojson '@a[NR]=$a; @b[NR]=$b; emit > "'$emit4'/out.".$a.$b, (@a, @b), "NR"' $indir/abixy -run_cat $emit4/out.ekspan -run_cat $emit4/out.ekswye -run_cat $emit4/out.panpan -run_cat $emit4/out.wyewye - -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", (@a, @b), "NR"' $indir/abixy - -touch $emit4/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, (@a, @b), "NR"' $indir/abixy 2> $emit4/err1 -run_cat $emit4/err1 - -touch $emit4/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, (@a, @b), "NR"' $indir/abixy 2> $emit4/err2 -run_cat $emit4/err2 - - -emit5=$reloutdir/emit5 -mkdir -p $emit5 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit5'/out.".$a.$b, @*' $indir/abixy -run_cat $emit5/out.ekspan -run_cat $emit5/out.ekswye -run_cat $emit5/out.panpan -run_cat $emit5/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*' $indir/abixy - -touch $emit5/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @*' $indir/abixy 2> $emit5/err1 -run_cat $emit5/err1 - -touch $emit5/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @*' $indir/abixy 2> $emit5/err2 -run_cat $emit5/err2 - - -emit6=$reloutdir/emit6 -mkdir -p $emit6 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit6'/out.".$a.$b, all' $indir/abixy -run_cat $emit6/out.ekspan -run_cat $emit6/out.ekswye -run_cat $emit6/out.panpan -run_cat $emit6/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all' $indir/abixy - -touch $emit6/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, all' $indir/abixy 2> $emit6/err1 -run_cat $emit6/err1 - -touch $emit6/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, all' $indir/abixy 2> $emit6/err2 -run_cat $emit6/err2 - - -emit7=$reloutdir/emit7 -mkdir -p $emit7 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit7'/out.".$a.$b, @*, "NR"' $indir/abixy -run_cat $emit7/out.ekspan -run_cat $emit7/out.ekswye -run_cat $emit7/out.panpan -run_cat $emit7/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", @*, "NR"' $indir/abixy - -touch $emit7/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, @*, "NR"' $indir/abixy 2> $emit7/err1 -run_cat $emit7/err1 - -touch $emit7/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, @*, "NR"' $indir/abixy 2> $emit7/err2 -run_cat $emit7/err2 - - -emit8=$reloutdir/emit8 -mkdir -p $emit8 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > "'$emit8'/out.".$a.$b, all, "NR"' $indir/abixy -run_cat $emit8/out.ekspan -run_cat $emit8/out.ekswye -run_cat $emit8/out.panpan -run_cat $emit8/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", all, "NR"' $indir/abixy - -touch $emit8/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, all, "NR"' $indir/abixy 2> $emit8/err1 -run_cat $emit8/err1 - -touch $emit8/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, all, "NR"' $indir/abixy 2> $emit8/err2 -run_cat $emit8/err2 - - -emit9=$reloutdir/emit9 -mkdir -p $emit9 -run_mlr head -n 4 then put -q 'emit > "'$emit9'/out.".$a.$b, $*' $indir/abixy -run_cat $emit9/out.ekspan -run_cat $emit9/out.ekswye -run_cat $emit9/out.panpan -run_cat $emit9/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", $*, "NR"' $indir/abixy - -touch $emit9/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, $*, "NR"' $indir/abixy 2> $emit9/err1 -run_cat $emit9/err1 - -touch $emit9/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, $*, "NR"' $indir/abixy 2> $emit9/err2 -run_cat $emit9/err2 - - -emit10=$reloutdir/emit10 -mkdir -p $emit10 -run_mlr head -n 4 then put -q 'emit > "'$emit10'/out.".$a.$b, mapexcept($*, "a", "b")' $indir/abixy -run_cat $emit10/out.ekspan -run_cat $emit10/out.ekswye -run_cat $emit10/out.panpan -run_cat $emit10/out.wyewye -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit | "tr \[a-z\] \[A-Z\]", mapexcept($*, "a", "b"), "NR"' $indir/abixy - -touch $emit10/err1 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stdout, mapexcept($*, "a", "b"), "NR"' $indir/abixy 2> $emit10/err1 -run_cat $emit10/err1 - -touch $emit10/err2 -run_mlr head -n 4 then put -q '@a[NR]=$a; @b[NR]=$b; emit > stderr, mapexcept($*, "a", "b"), "NR"' $indir/abixy 2> $emit10/err2 -run_cat $emit10/err2 - -# ---------------------------------------------------------------- -announce USER-DEFINED FUNCTIONS AND SUBROUTINES - -run_mlr --opprint --from $indir/abixy put 'func f(u,v){return u+v} $o=f(NR*1000,$x)' - -mlr_expect_fail --opprint --from $indir/abixy put 'func f(x,y,z){$nnn=999; int n=10; return $y} $o=f($i,$x,$y)' - -run_mlr --opprint --from $indir/abixy put 'subr s(a,b) { $[a] = b } call s("W", 999)' - -run_mlr --opprint --from $indir/abixy put ' - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - $DID = "YES"; - } - $o = f($x, $y, $i); - call s("W", NR); -' - -run_mlr --opprint --from $indir/abixy put ' - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - return; - $DID = "YES"; - } - $o = f($x, $y, $i); - call s("W", NR); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(x,y,z) { - return x + y + z - } - subr s(a,b) { - $[a] = b; - return 1 # subr must not return value - } - $o = f($x, $y, $i); - call s("W", NR); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(x,y,z) { - return # func must return value - } - subr s(a,b) { - $[a] = b; - } - $o = f($x, $y, $i); - call s("W", NR); -' - -# Test fencing: function f should not have access to boundvar k from the callsite. -run_mlr --from $indir/abixy --opprint put 'func f(x) {return k} for (k,v in $*) {$o=f($x)}' -run_mlr --from $indir/abixy --opprint put 'subr foo() {print "k is [".k."]"} for (k,v in $*) {call foo()}' - -# Test overriding built-ins -mlr_expect_fail --opprint --from $indir/abixy put 'func log(x) { return 0 } $o = log($x)' - -run_mlr --from $indir/abixy put 'subr log() { print "hello record ". NR } call log()' - -# Test variable-clear at scope exit; test read of unset locals. -run_mlr --opprint --from $indir/abixy put '$o1 = a; int a=1000+NR; $o2 = a; a=2000+NR; $o3 = a' - -# Test recursion -run_mlr --opprint --from $indir/abixy put ' - func f(n) { - if (is_numeric(n)) { - if (n > 0) { - return n * f(n-1) - } else { - return 1 - } - } - # implicitly return absent - } - $o = f(NR) -' - -run_mlr --opprint --from $indir/abixy head -n 5 then put ' - subr s(n) { - print "n = " . n; - if (is_numeric(n)) { - if (n > 0) { - call s(n-1) - } - } - } - print ""; - call s(NR) -' - -run_mlr --from $indir/abixy --opprint put ' - func f(n) { - return n+1; - } - $o1 = f(NR); - $o2 = f(f(NR)); - $o3 = f(f(f(NR))); - $o4 = f(f(f(f(NR)))); - $o5 = f(f(f(f(f(NR))))); - $o6 = f(f(f(f(f(f(NR)))))); -' - -run_mlr --from $indir/abixy --opprint put ' - func f(n) { - if (n < 2) { - return 1 - } else { - return f(n-1) + f(n-2) - } - } - $o = f(NR) -' - -run_mlr --from $indir/abixy --opprint put ' - func f(n) { - if (is_present(@fcache[n])) { - return @fcache[n] - } else { - num rv = 1; - if (n >= 2) { - rv = f(n-1) + f(n-2) - } - @fcache[n] = rv; - return rv - } - } - $o = f(NR) -' - -# No nesting of top-levels -mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { begin {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { end {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { begin {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { end {} }' - -mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { func g(y) {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { subr t(y) {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { func g(y) {} }' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s(x) { subr t(y) {} }' - -mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { begin {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { end {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { begin {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { end {} }; true' - -mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { func g(y) {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'func f(x) { subr t(y) {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { func g(y) {} }; true' -mlr_expect_fail --from $indir/abixy --opprint filter 'subr s(x) { subr t(y) {} }; true' - -# Disallow redefines -mlr_expect_fail --from $indir/abixy --opprint put 'func log(x) { return $x + 1 }' -mlr_expect_fail --from $indir/abixy --opprint put 'func f(x) { return $x + 1 } func f(x) { return $x + 1}' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s() { } subr s() { }' -mlr_expect_fail --from $indir/abixy --opprint put 'subr s() { } subr s(x) { }' -run_mlr --from $indir/abixy --opprint put 'subr log(text) { print "TEXT IS ".text } call log("NR is ".NR)' - -# print/dump from subr/func; no tee/emit from func -run_mlr --from $indir/abixy --opprint put 'subr log(text) { print "TEXT IS ".text } call log("NR is ".NR)' -run_mlr --from $indir/abixy --opprint put 'func f(text) { print "TEXT IS ".text; return text.text } $o = f($a)' -run_mlr --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello" } $o=f($i)' -mlr_expect_fail --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello"; tee > "x", $* } $o=f($i)' -mlr_expect_fail --from $indir/abixy put 'begin{@x=1} func f(x) { dump; print "hello"; emit > "x", @* } $o=f($i)' - -# not use all args (for valgrind) -run_mlr --from $indir/abixy put 'func f(x,y) { return 2*y } $o = f($x,$y) ' - -# general programming-language stuff -run_mlr -n put -q -f $indir/sieve.mlr -run_mlr -n put -q -f $indir/mand.mlr -e 'begin {@verbose = true}' - -# scoping within distinct begin/end blocks -run_mlr --from $indir/abixy put -v ' - func f(x) { - return x**2 - } - func g(y) { - return y+1 - } - subr s(a,b,c) { - print a.b.c - } - begin { - @a = 0; - var ell = 1; - print "local1 = ".ell; - } - end { - emit @a; - var emm = 2; - print "local2 = ".emm; - } - @a += 1; - begin { - @b = 0; - @c = 0; - print "local3 = ".ell; - } - @b += 2; - @c += 3; - end { - emit @b; - emit @c; - print "local4 = ".emm; - } -' - -# ---------------------------------------------------------------- -announce LOCALVAR SCOPE AND EXTENT - -run_mlr --opprint --from $indir/abixy put ' - func f() { - var a = 1; - if (NR > 5) { - a = 2; - } - return a; - } - func g() { - var b = 1; - if (NR > 5) { - var b = 2; - } - return b; - } - func h() { - var a = 1; - if (NR > 5) { - a = 2; - return a; - } - return a; - } - func i() { - var b = 1; - if (NR > 5) { - var b = 2; - return b; - } - return b; - } - $of = f(); - $og = g(); - $oh = h(); - $oi = i(); - ' - -# test fencing at function entry -run_mlr --opprint --from $indir/abixy put ' - func f() { - var a = 2; - var b = 2; - if (NR > 5) { - var a = 3; - b = 3; - } - return 1000 * a + b; - } - a = 1; - b = 1; - $ab = f(); - $oa = a; - $ob = b; - ' - -# ---------------------------------------------------------------- -announce LOCALVAR UNSETS - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u' $indir/unset1.dkvp - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u' $indir/unset1.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u' $indir/unset1.dkvp - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u' $indir/unset1.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u' $indir/unset1.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u' $indir/unset1.dkvp - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset s ; dump s; dump t; dump u' $indir/unset4.dkvp - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t ; dump s; dump t; dump u' $indir/unset4.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset t[1] ; dump s; dump t; dump u' $indir/unset4.dkvp - -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u ; dump s; dump t; dump u' $indir/unset4.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1] ; dump s; dump t; dump u' $indir/unset4.dkvp -run_mlr put -q 's=$x; t[$a]=$x; u[$a][$b]=$x; dump s; dump t; dump u; unset u[1][2]; dump s; dump t; dump u' $indir/unset4.dkvp - -# ---------------------------------------------------------------- -announce LOCALVAR TYPEDECLs - -run_mlr --from $indir/abixy put ' - str a = $a; - a = "a:".NR; - $c = a; -' - -mlr_expect_fail --from $indir/abixy put ' - str a = $a; - a = NR; - $c = a; -' - -mlr_expect_fail --from $indir/abixy put ' - int a = $a; - a = NR; - $c = a; -' - -run_mlr --from $indir/abixy put ' - int i = $i; - i = NR; - $c = a; -' - -# ---------------------------------------------------------------- -announce FORBIND TYPEDECLs - -run_mlr --from $indir/abixy put ' - for (int i = 0; i < $i; i += 1) { - $c = i * 10; - } -' - -mlr_expect_fail --from $indir/abixy put ' - for (float i = 0; i < $i; i += 1) { - $c = i * 10; - } -' - -run_mlr --from $indir/abixy put ' - for (int i = 0; i < $i; i += 1) { - i += 2; - $c = i; - } -' - -mlr_expect_fail --from $indir/abixy put ' - for (int i = 0; i < $i; i += 1) { - i += 1.5; - $c = i; - } -' - -mlr_expect_fail --from $indir/abixy put ' - for (int i = 0; i < $i; i += 1) { - i += 1.0; - $c = i; - } -' - -run_mlr --from $indir/abixy put ' - for (num i = 0; i < $i; i += 1) { - i += 1.0; - $c = i; - } -' - -# ---------------------------------------------------------------- -announce ARGPASS TYPEDECLs - -run_mlr --from $indir/abixy put ' - func f(int i) { - return i+3; - } - $c = f($i); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(int i) { - return i+3; - } - $c = f($x); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(num i): int { - return i+3.45; - } - $c = f($x); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(num i): int { - return i+3.45; - } - $c = f($i); -' - -mlr_expect_fail --from $indir/abixy put ' - func f(num i): int { - i = "a"; - return 2; - } - $c = f($x); -' - - -run_mlr --from $indir/abixy put ' - subr s(int i) { - print i+3; - } - call s($i); -' - -mlr_expect_fail --from $indir/abixy put ' - subr s(int i) { - print i+3; - } - call s($x); -' - -mlr_expect_fail --from $indir/abixy put ' - subr s(num i) { - i = "a"; - print 2; - } - call s($x); -' - -# ---------------------------------------------------------------- -announce LOCAL MAP-VARIABLE WRITE/READ - -run_mlr --from $indir/xyz345 put -v -a ' - $s = a; - $t = b[$x]; - $u = c[$x][$y]; - $v = d[$x][$y][$z]; -' - -run_mlr --from $indir/xyz345 put -v -a ' - d[$x][$y][$z] = 9; - $d = d[$x][$y][$z]; -' - -run_mlr --from $indir/xyz345 put -v -a ' - a = 6; - b[$x] = 7; - c[$x][$y] = 8; - d[$x][$y][$z] = 9; - - $a = a; - $b = b[$x]; - $c = c[$x][$y]; - $d = d[$x][$y][$z]; -' - -run_mlr --from $indir/xyz345 put -v -a ' - a = 6; - b[$x] = 7; - c[$x][$y] = 8; - d[$x][$y][$z] = 9; - - $a0 = a; - $a1 = a[$x]; - $a2 = a[$x][$y]; - $a3 = a[$x][$y][$z]; - - $b0 = b; - $b1 = b[$x]; - $b2 = b[$x][$y]; - $b3 = b[$x][$y][$z]; - - $c0 = c; - $c1 = c[$x]; - $c2 = c[$x][$y]; - $c3 = c[$x][$y][$z]; - - $d0 = d; - $d1 = d[$x]; - $d2 = d[$x][$y]; - $d3 = d[$x][$y][$z]; -' - -# ---------------------------------------------------------------- -announce LOCAL MAP-VARIABLE TYPE-DECL - -run_mlr --from $indir/xyz345 put ' - map a = {}; -' - -run_mlr --from $indir/xyz345 put ' - map a = {}; - a[1]=2; - a[3][4]=5; -' - -mlr_expect_fail --from $indir/xyz345 put ' - map a = {}; - a=2; - a[3][4]=5; -' - -mlr_expect_fail --from $indir/xyz345 put ' - map a = {}; - a[3][4]=5; - a=2; -' - -# ---------------------------------------------------------------- -announce TRIPLE-FORs - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - num a = 1; - for (;;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - num a = 1; - for (;;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a = 1; ;) { - if (a > NR) { - break; - } - sum += a; - a += 1 - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - num a = 1; - for (; ; a += 1) { - if (a > NR) { - break; - } - sum += a; - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a=1; ; a += 1) { - if (a > NR) { - break; - } - sum += a; - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a=1; a <= NR; a += 1) { - sum += a; - } - $z = sum -' - -echo x=1 | run_mlr put ' - num a = 100; - num b = 100; - for (num a = 200, b = 300; a <= 210; a += 1, b += 1) { - print "a:".a.",b:".b - } - $oa = a; - $ob = b; -' - -run_mlr --from $indir/abixy put ' - for ( ; $x <= 10; $x += 1) { - } -' - -run_mlr --opprint --from $indir/abixy put ' - num a = 100; - b = 200; - @c = 300; - $d = 400; - for (num i = 1; i < 1024; i *= 2) { - a += 1; - b += 1; - @c += 1; - $d += 1; - $oa = a; - $ob = b; - $oc = @c; - $od = $d; - } -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a = 1; a <= 10; a += 1) { - continue; - sum += a; - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a = 1; a <= 10; a += 1) { - sum += a; - break; - } - $z = sum -' - -run_mlr --opprint --from $indir/abixy put ' - num sum = 0; - for (num a = 1; a <= NR; a += 1) { - if (a == 4 || a == 5) { - continue; - } - if (a == 8) { - break; - } - sum += a; - } - $z = sum -' - -# Multi-continutation cases - -run_mlr --opprint --from $indir/abixy put ' - for ($o1 = 1; ; $o3 = 3) { - break; - } -' - -run_mlr --opprint --from $indir/abixy put ' - for ($o1 = 1; $o1 < NR; $o1 += 1) { - } -' - -mlr_expect_fail --opprint --from $indir/abixy put ' - for ($o1 = 1, $o2 = 2; $o3 = 3; $o4 = 4) { - } -' - -mlr_expect_fail --opprint --from $indir/abixy put ' - for ($o1 = 1, $o2 = 2; $o3 < 3, $o4 = 4; $o5 = 5) { - break; - } -' - -run_mlr --opprint --from $indir/abixy put ' - $o4 = 0; - for ($o1 = 1, $o2 = 2; $o3 = 3, $o4 < 4; $o5 = 5) { - break; - } -' - -# ---------------------------------------------------------------- -announce MAPVARS IN SCALAR FUNCTION-CALL CONTEXTS - -mlr_expect_fail --from $indir/abixy put '$z=strlen($*)' -mlr_expect_fail --from $indir/abixy put '$z=strlen({})' -run_mlr --from $indir/abixy put 'a={}; $z=strlen(a)' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO FULL SREC - -run_mlr --from $indir/xyz2 put '$* = {"a":1, "b": {"x":8,"y":9}, "c":3}' -run_mlr --from $indir/xyz2 put '$* = $*' -run_mlr --from $indir/xyz2 put '@a = 1; $* = @a' -run_mlr --from $indir/xyz2 put '@b[1] = 2; $* = @b' -run_mlr --from $indir/xyz2 put '@c[1][2] = 3; $* = @c' -run_mlr --from $indir/xyz2 put '@a = 1; $* = @*' -run_mlr --from $indir/xyz2 put '@b[1] = 2; $* = @*' -run_mlr --from $indir/xyz2 put '@c[1][2] = 3; $* = @*' -run_mlr --from $indir/xyz2 put 'a = 1; $* = a' -run_mlr --from $indir/xyz2 put 'b[1] = 2; $* = b' -run_mlr --from $indir/xyz2 put 'c[1][2] = 3; $* = c' -run_mlr --from $indir/xyz2 put '$* = 3' - -run_mlr --from $indir/xyz2 put ' - func map_valued_func() { - return {"a":1,"b":2} - } - map m = map_valued_func(); - $* = m; -' - -run_mlr --from $indir/xyz2 put ' - func map_valued_func() { - return {"a":1,"b":2} - } - $* = map_valued_func(); -' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO FULL OOSVAR - -run_mlr --from $indir/xyz2 put '@* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump' -run_mlr --from $indir/xyz2 put '@* = $*; dump' -run_mlr --from $indir/xyz2 put '@* = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @* = @*; dump' -run_mlr --from $indir/xyz2 put '@a = 1; @* = @a; dump' -run_mlr --from $indir/xyz2 put '@b[1] = 2; @* = @b; dump' -run_mlr --from $indir/xyz2 put '@c[1][2] = 3; @* = @c; dump' -run_mlr --from $indir/xyz2 put '@a = 1; @* = @*; dump' -run_mlr --from $indir/xyz2 put '@b[1] = 2; @* = @*; dump' -run_mlr --from $indir/xyz2 put '@c[1][2] = 3; @* = @*; dump' -run_mlr --from $indir/xyz2 put 'a = 1; @* = a; dump' -run_mlr --from $indir/xyz2 put 'b[1] = 2; @* = b; dump' -run_mlr --from $indir/xyz2 put 'c[1][2] = 3; @* = c; dump' -run_mlr --from $indir/xyz2 put '@* = 3' - -run_mlr --from $indir/xyz2 put ' - func map_valued_func() { - return {"a":1,"b":2} - } - map m = map_valued_func(); - @* = m; - dump -' - -run_mlr --from $indir/xyz2 put ' - func map_valued_func() { - return {"a":1,"b":2} - } - @* = map_valued_func(); - dump -' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO OOSVAR - -run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o' -run_mlr --from $indir/xyz2 put -q '@o = @o; dump @o' -run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump; @o = @*; dump' -run_mlr --from $indir/xyz2 put -q '@o = $*; dump @o' -run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump @o; @o = @o; dump @o' -run_mlr --from $indir/xyz2 put -q '@o = {"a":1, "b": {"x":8,"y":9}, "c":3}; @o = @o; dump @o' -run_mlr --from $indir/xyz2 put -q '@a = 1; @o = @a; dump @o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; @o = @b; dump @o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; @o = @c; dump @o' -run_mlr --from $indir/xyz2 put -q '@a = 1; @o = @*; dump @o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; @o = @*; dump @o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; @o = @*; dump @o' -run_mlr --from $indir/xyz2 put -q 'a = 1; @o = a; dump @o' -run_mlr --from $indir/xyz2 put -q 'b[1] = 2; @o = b; dump @o' -run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; @o = c; dump @o' -run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} @o = map_valued_func(); dump @o' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO MAP-TYPED LOCAL - -run_mlr --from $indir/xyz2 put -q 'map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' -mlr_expect_fail --from $indir/xyz2 put -q 'map o = @o; dump o' -run_mlr --from $indir/xyz2 put -q 'map o = $*; dump o' -run_mlr --from $indir/xyz2 put -q 'map o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' -mlr_expect_fail --from $indir/xyz2 put -q '@a = 1; map o = @a; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; map o = @b; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; map o = @c; dump o' -run_mlr --from $indir/xyz2 put -q '@a = 1; map o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; map o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; map o = @*; dump o' -mlr_expect_fail --from $indir/xyz2 put -q 'a = 1; map o = a; dump o' -run_mlr --from $indir/xyz2 put -q 'b[1] = 2; map o = b; dump o' -run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; map o = c; dump o' -run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} map o = map_valued_func(); dump o' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO VAR-TYPED LOCAL - -run_mlr --from $indir/xyz2 put -q 'var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' -run_mlr --from $indir/xyz2 put -q 'var o = @o; dump o' -run_mlr --from $indir/xyz2 put -q 'var o = $*; dump o' -run_mlr --from $indir/xyz2 put -q 'var o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' -run_mlr --from $indir/xyz2 put -q '@a = 1; var o = @a; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; var o = @b; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; var o = @c; dump o' -run_mlr --from $indir/xyz2 put -q '@a = 1; var o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; var o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; var o = @*; dump o' -run_mlr --from $indir/xyz2 put -q 'a = 1; var o = a; dump o' -run_mlr --from $indir/xyz2 put -q 'b[1] = 2; var o = b; dump o' -run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; var o = c; dump o' -run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} var o = map_valued_func(); dump o' - -# ---------------------------------------------------------------- -announce MAPVAR ASSIGNMENTS TO UNTYPED LOCAL - -run_mlr --from $indir/xyz2 put -q 'o = {"a":1, "b": {"x":8,"y":9}, "c":3}; dump o' -run_mlr --from $indir/xyz2 put -q 'o = @o; dump o' -run_mlr --from $indir/xyz2 put -q 'o = $*; dump o' -run_mlr --from $indir/xyz2 put -q 'o = {"a":1, "b": {"x":8,"y":9}, "c":3}; o = o; dump o' -run_mlr --from $indir/xyz2 put -q '@a = 1; o = @a; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; o = @b; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; o = @c; dump o' -run_mlr --from $indir/xyz2 put -q '@a = 1; o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@b[1] = 2; o = @*; dump o' -run_mlr --from $indir/xyz2 put -q '@c[1][2] = 3; o = @*; dump o' -run_mlr --from $indir/xyz2 put -q 'a = 1; o = a; dump o' -run_mlr --from $indir/xyz2 put -q 'b[1] = 2; o = b; dump o' -run_mlr --from $indir/xyz2 put -q 'c[1][2] = 3; o = c; dump o' -run_mlr --from $indir/xyz2 put -q 'func map_valued_func() { return {"a":1,"b":2}} o = map_valued_func(); dump o' - -# ---------------------------------------------------------------- -announce SPLIT/JOIN - -run_mlr --from $indir/abixy-het put -q 'o = joink($*, ":"); print o' -run_mlr --from $indir/abixy-het put -q 'o = joinv($*, ":"); print o' -run_mlr --from $indir/abixy-het put -q 'o = joinkv($*, ":", ";"); print o' - -run_mlr --from $indir/abixy-het put -q 'o = joink({1:2, "abc":4, 5:"xyz"}, ":"); print o' -run_mlr --from $indir/abixy-het put -q 'o = joinv({1:2, "abc":4, 5:"xyz"}, ":"); print o' -run_mlr --from $indir/abixy-het put -q 'o = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); print o' - -run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c" , ","); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitnv("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkv("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' - -run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c" , ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", "=", ","); for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c", IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", IPS, IFS); print ">>".IRS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitnvx("a,b,c", OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --from $indir/abixy-het put '$* = splitkvx("a=1,b=2,c", OPS, OFS); print ">>".ORS."<<"; for (k, v in $*) {print k.":".typeof(k)." ".v.":".typeof(v)}' - -run_mlr --oxtab --from $indir/abixy-het put 's = joink($*, ":"); $* = splitnv(s, ":")' -run_mlr --oxtab --from $indir/abixy-het put 's = joinv($*, ":"); $* = splitnv(s, ":")' -run_mlr --oxtab --from $indir/abixy-het put 's = joinkv($*, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --oxtab --from $indir/abixy-het put 's = joinkv($*, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' - -run_mlr --oxtab --from $indir/abixy-het put 's = joink({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":")' -run_mlr --oxtab --from $indir/abixy-het put 's = joinv({1:2, "abc":4, 5:"xyz"}, ":"); $* = splitnv(s, ":")' -run_mlr --oxtab --from $indir/abixy-het put 's = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkv(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' -run_mlr --oxtab --from $indir/abixy-het put 's = joinkv({1:2, "abc":4, 5:"xyz"}, ":", ";"); $* = splitkvx(s, ":", ";"); for (k,v in $*) { print k.":".typeof(k)." ".v.":".typeof(v)}' - -# ---------------------------------------------------------------- -announce MAPSUM/MAPDIFF/MAPEXCEPT - -run_mlr --from $indir/abixy-het put -q 'o = mapsum(); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff(); dump o' -mlr_expect_fail --from $indir/abixy-het put -q 'o = mapexcept(); dump o' -mlr_expect_fail --from $indir/abixy-het put -q 'o = mapselect(); dump o' - -run_mlr --from $indir/abixy-het put -q 'o = mapsum($*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect($*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}); dump o' - -run_mlr --from $indir/abixy-het put -q 'o = mapsum($*, {"a":999}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}, $*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*, {"a":999}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}, $*); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*, "a"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}, "a"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept({"a":999}, "nonesuch"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect($*, "a"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "a"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "nonesuch"); dump o' - -run_mlr --from $indir/abixy-het put -q 'o = mapsum($*, {"a":999}, {"b": 444}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapsum({"a":999}, $*, {"b": 444}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff($*, {"a":999}, {"b": 444}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapdiff({"a":999}, $*, {"b": 444}); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapexcept($*, "a", "b"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "b", "nonesuch"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect($*, "a", "b"); dump o' -run_mlr --from $indir/abixy-het put -q 'o = mapselect({"a":999}, "b", "nonesuch"); dump o' - -# ---------------------------------------------------------------- -announce EXTENDED TYPEOF - -run_mlr --from $indir/xyz2 --oxtab put ' - a = {1:2, 3:4}; - b = {1: {2:3, 4:5}}; - @c = {1:2, 3:4}; - @d = {1: {2:3, 4:5}}; - - $ta = typeof(a); - $ta1 = typeof(a[1]); - $ta7 = typeof(a[7]); - - $tb = typeof(b); - $tb1 = typeof(b[1]); - $tb7 = typeof(b[7]); - - $tc = typeof(@c); - $tc1 = typeof(@c[1]); - $tc7 = typeof(@c[7]); - - $td = typeof(@d); - $td1 = typeof(@d[1]); - $td7 = typeof(@d[7]); - - $te1 = typeof(6); - $te2 = typeof({6:4}); - - $tsa = typeof($a); - $tsx = typeof($x); - $ts = typeof($*); -' - -# ---------------------------------------------------------------- -announce HASKEY - -run_mlr --from $indir/abixy-het put '$haskeya = haskey($*, "a")' -run_mlr --from $indir/abixy-het put '$haskey3 = haskey($*, 3)' - -run_mlr --from $indir/xyz2 put '$haskeya = haskey({3:4}, "a")' -run_mlr --from $indir/xyz2 put '$haskey3 = haskey({3:4}, 3)' -run_mlr --from $indir/xyz2 put '$haskey3 = haskey({3:4}, 4)' - -run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskeya = haskey(o, "a")' -run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskey3 = haskey(o, 3)' -run_mlr --from $indir/xyz2 put 'o = {3:4}; $haskey3 = haskey(o, 4)' - -run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskeya = haskey(@o, "a")' -run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskey3 = haskey(@o, 3)' -run_mlr --from $indir/xyz2 put '@o = {3:4}; $haskey3 = haskey(@o, 4)' - -run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskeya = haskey(@o, "a")' -run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskey3 = haskey(@o, 3)' -run_mlr --from $indir/xyz2 put 'o = "3:4"; $haskey3 = haskey(@o, 4)' - -# ---------------------------------------------------------------- -announce LENGTH/DEPTH/LEAFCOUNT - -run_mlr --from $indir/abixy-het put '$length = length($a)' -run_mlr --from $indir/abixy-het put '$length = length($*)' -run_mlr --from $indir/xyz2 put '$length= length({3:4, 5:{6:7}, 8:{9:{10:11}}})' -run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(o)' -run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $length = length(@o)' - -run_mlr --from $indir/abixy-het put '$depth = depth($a)' -run_mlr --from $indir/abixy-het put '$depth = depth($*)' -run_mlr --from $indir/xyz2 put '$depth= depth({3:4, 5:{6:7}, 8:{9:{10:11}}})' -run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(o)' -run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $depth = depth(@o)' - -run_mlr --from $indir/abixy-het put '$leafcount = leafcount($a)' -run_mlr --from $indir/abixy-het put '$leafcount = leafcount($*)' -run_mlr --from $indir/xyz2 put '$leafcount= leafcount({3:4, 5:{6:7}, 8:{9:{10:11}}})' -run_mlr --from $indir/xyz2 put 'o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(o)' -run_mlr --from $indir/xyz2 put '@o = {3:4, 5:{6:7}, 8:{9:{10:11}}}; $leafcount = leafcount(@o)' - -# xxx ternary operator (and most RHS expressions in the grammar) doesn't handle maps. -# run_mlr --from $indir/abixy-het put -q 'o = haskey(NR==4 ? {"a": NF} : {"b": NF}, "a"); print "NR=".NR.",haskeya=".o' - -# ---------------------------------------------------------------- -announce MAPVAR EMIT - -run_mlr -n put 'end { - @a[2][3] = 4; - b[2][3] = 8; - emit (@a, b, {2:{3:12}}); - emitp (@a, b, {2:{3:12}}); - emit {}; - emit (@a, b, {2:{3:12}}), "t"; - emitp (@a, b, {2:{3:12}}), "t"; - emit {}; - emit (@a, b, {2:{3:12}}), "t", "u"; - emitp (@a, b, {2:{3:12}}), "t", "u"; -}' - -run_mlr -n put 'end { - @a[2][3] = 4; - b[2][3] = 8; - emitp (@a, b, {2:{3:12}}); - emit (@a, b, {2:{3:12}}); - emit {}; - emitp (@a, b, {2:{3:12}}), "t"; - emit (@a, b, {2:{3:12}}), "t"; - emit {}; - emitp (@a, b, {2:{3:12}}), "t", "u"; - emit (@a, b, {2:{3:12}}), "t", "u"; -}' - -# ---------------------------------------------------------------- -announce MAPVAR FOR-LOOPS - -run_mlr --from $indir/abixy put -q ' - func f() { - return { - "a:".$a: $i, - "b:".$b: $y, - NR: NF, - } - } - for (k,v in f()) { - print "k=".k; - print "v=".v; - } - print -' - -# ---------------------------------------------------------------- -announce TRAILING COMMAS - -run_mlr --from $indir/abixy put ' - $* = { - "a": $a, - "x": $x, - } -' - -run_mlr --from $indir/xyz345 put 'func f(): int { return 999 } $y=f()' -mlr_expect_fail --from $indir/xyz345 put 'func f(): int { return 999 } $y=f(,)' - -run_mlr --from $indir/xyz345 put 'func f(a,): int { return a*2 } $y=f(NR)' -mlr_expect_fail --from $indir/xyz345 put 'func f(a,,): int { return a*2 } $y=f(NR)' - -run_mlr --from $indir/xyz345 put 'func f(int a,): int { return a*2 } $y=f(NR)' -mlr_expect_fail --from $indir/xyz345 put 'func f(int a,,): int { return a*2 } $y=f(NR)' - -run_mlr --from $indir/xyz345 put 'subr s() { print 999 } call s()' -mlr_expect_fail --from $indir/xyz345 put 'subr s() { print 999 } call s(,)' - -run_mlr --from $indir/xyz345 put 'subr s(a,) { print a*2 } call s(NR)' -mlr_expect_fail --from $indir/xyz345 put 'subr s(a,,) { print a*2 } call s(NR)' - -run_mlr --from $indir/xyz345 put 'subr s(int a,) { print a*2 } call s(NR)' -mlr_expect_fail --from $indir/xyz345 put 'subr s(int a,,) { print a*2 } call s(NR)' - -run_mlr --from $indir/xyz345 put '$y=log10($x)' -run_mlr --from $indir/xyz345 put '$y=log10($x,)' -mlr_expect_fail --from $indir/xyz345 put '$y=log10($x,,)' -mlr_expect_fail --from $indir/xyz345 put '$y=log10(,$x)' -run_mlr --from $indir/xyz345 put '$y=pow($x,2)' -run_mlr --from $indir/xyz345 put '$y=pow($x,2,)' - -# ---------------------------------------------------------------- -announce MAPVARS/UDFs/SUBROUTINES - -run_mlr --from $indir/abixy put ' - func f(m) { - dump m; - sum = 0; - for (k, v in m) { - sum += k - } - return sum - } - @v[$i] = $a; - $y = f(@v) -' - -run_mlr --from $indir/abixy put ' - subr s(m) { - dump m; - sum = 0; - for (k, v in m) { - sum += k - } - @sum = sum; - } - @v[$i] = $a; - call s(@v); - $y = @sum; -' - -run_mlr --from $indir/abixy-het put 'func f(x) {return {"a":x,"b":x**2}}; map o = f($x); $* = o' -run_mlr --from $indir/abixy-het put -q 'func f(x) {return x**2}; var z = f($x); dump z' -run_mlr --from $indir/abixy-het put -q 'func f(x) {map m = {NR:x};return m}; z = f($y); dump z' - -mlr_expect_fail --from $indir/abixy put ' - func f(int x): map { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($x) -' - -run_mlr --from $indir/abixy put ' - func f(int x): map { - if (NR==200) { - return 2 - } else { - return {} - } - } - $y=f($i) -' - -mlr_expect_fail --from $indir/abixy put ' - func f(int x): map { - if (NR==200) { - return 2 - } else { - return {} - } - } - $y=f($x) -' - -run_mlr --from $indir/abixy put ' - func f(int x): var { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($i) -' - -mlr_expect_fail --from $indir/abixy put ' - func f(int x): var { - if (NR==2) { - return 2 - } else { - return {} - } - } - $y=f($x) -' - -mlr_expect_fail --from $indir/abixy put ' - func f(x): int { - # fall-through return value is absent-null - } - $y=f($x) -' - -mlr_expect_fail --from $indir/abixy put ' - int a = 1; - var b = a[2]; # cannot index localvar declared non-map -' - -# This one is intended to particularly look at freeing, e.g. with './reg_test/run --valgrind'. -run_mlr --oxtab --from $indir/abixy-het put ' - $* = mapdiff( - mapsum($*, {"a": "newval"}), - {"b": "nonesuch"}, - ) -' - -# ---------------------------------------------------------------- -announce NUMBER FORMATTING - -run_mlr --opprint stats1 -a sum -f x $indir/ofmt.dat -run_mlr --ofmt '%.3lf' --opprint stats1 -a sum -f x $indir/ofmt.dat -run_mlr --opprint --ofmt '%.3lf' stats1 -a sum -f x $indir/ofmt.dat - -# ---------------------------------------------------------------- -announce IMPLICIT-HEADER-CSV INPUT - -run_mlr --irs crlf --icsvlite --ifs , --opprint cut -x -f b/ $indir/multi-sep.csv-crlf -run_mlr --irs crlf --implicit-csv-header --icsvlite --ifs , --opprint cut -x -f 2 $indir/multi-sep.csv-crlf - -run_mlr --irs crlf --icsvlite --ifs /, --opprint cut -x -f b $indir/multi-sep.csv-crlf -run_mlr --irs crlf --implicit-csv-header --icsvlite --ifs /, --opprint cut -x -f 2 $indir/multi-sep.csv-crlf - -run_mlr --icsv --ifs , --opprint cut -x -f b/ $indir/multi-sep.csv-crlf -run_mlr --implicit-csv-header --icsv --ifs , --opprint cut -x -f 2 $indir/multi-sep.csv-crlf - -run_mlr --icsv --ifs /, --opprint cut -x -f b $indir/multi-sep.csv-crlf -run_mlr --implicit-csv-header --icsv --ifs /, --opprint cut -x -f 2 $indir/multi-sep.csv-crlf - -run_mlr --csv -N reorder -f 1,3,2,5,4 $indir/multi-sep.csv-crlf -run_mlr --csv -N reorder -f 5,4,3,2,1 $indir/multi-sep.csv-crlf - -run_mlr --from $indir/reorder.dkvp reorder -f x,y -b u -run_mlr --from $indir/reorder.dkvp reorder -f u,v -b x -run_mlr --from $indir/reorder.dkvp reorder -f z,w,s -b v -run_mlr --from $indir/reorder.dkvp reorder -f u,v -b nonesuch -run_mlr --from $indir/reorder.dkvp reorder -f u,nonesuch -b x - -run_mlr --from $indir/reorder.dkvp reorder -f x,y -a u -run_mlr --from $indir/reorder.dkvp reorder -f u,v -a x -run_mlr --from $indir/reorder.dkvp reorder -f z,w,s -a v -run_mlr --from $indir/reorder.dkvp reorder -f u,v -a nonesuch -run_mlr --from $indir/reorder.dkvp reorder -f u,nonesuch -a x - -run_mlr --icsv --otsv -N cat < $outdir/comments1-crlf.dkvp - -mention input comments1-crlf.dkvp -run_cat $outdir/comments1-crlf.dkvp - -mention skip comments1-crlf.dkvp -run_mlr --skip-comments --idkvp --oxtab cat < $outdir/comments1-crlf.dkvp -run_mlr --skip-comments --idkvp --oxtab cat $outdir/comments1-crlf.dkvp - -mention pass comments1-crlf.dkvp -run_mlr --pass-comments --idkvp --oxtab cat < $outdir/comments1-crlf.dkvp -run_mlr --pass-comments --idkvp --oxtab cat $outdir/comments1-crlf.dkvp - - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -announce SKIP/PASS COMMENTS DKVP WITH ALTERNATE PREFIX - -mention input comments1-atat.dkvp -run_cat $indir/comments/comments1-atat.dkvp - -mention skip comments1-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments1-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments1-atat.dkvp - -mention pass comments1-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments1-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments1-atat.dkvp - - -mention input comments2-atat.dkvp -run_cat $indir/comments/comments2-atat.dkvp - -mention skip comments2-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments2-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments2-atat.dkvp - -mention pass comments2-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments2-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments2-atat.dkvp - - -mention input comments3-atat.dkvp -run_cat $indir/comments/comments3-atat.dkvp - -mention skip comments3-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments3-atat.dkvp -run_mlr --skip-comments-with @@ --idkvp --oxtab cat $indir/comments/comments3-atat.dkvp - -mention pass comments3-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat < $indir/comments/comments3-atat.dkvp -run_mlr --pass-comments-with @@ --idkvp --oxtab cat $indir/comments/comments3-atat.dkvp - -# ---------------------------------------------------------------- -announce SKIP/PASS COMMENTS NIDX - -mention input comments1.nidx -run_cat $indir/comments/comments1.nidx - -mention skip comments1.nidx -run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments1.nidx -run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments1.nidx - -mention pass comments1.nidx -run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments1.nidx -run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments1.nidx - - -mention input comments2.nidx -run_cat $indir/comments/comments2.nidx - -mention skip comments2.nidx -run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments2.nidx -run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments2.nidx - -mention pass comments2.nidx -run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments2.nidx -run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments2.nidx - - -mention input comments3.nidx -run_cat $indir/comments/comments3.nidx - -mention skip comments3.nidx -run_mlr --skip-comments --inidx --oxtab cat < $indir/comments/comments3.nidx -run_mlr --skip-comments --inidx --oxtab cat $indir/comments/comments3.nidx - -mention pass comments3.nidx -run_mlr --pass-comments --inidx --oxtab cat < $indir/comments/comments3.nidx -run_mlr --pass-comments --inidx --oxtab cat $indir/comments/comments3.nidx - - -# It's annoying trying to check in text files (especially CSV) with CRLF -# to Git, given that it likes to 'fix' line endings for multi-platform use. -# It's easy to simply create CRLF on the fly. -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.nidx > $outdir/comments1-crlf.nidx - -mention input comments1-crlf.nidx -run_cat $outdir/comments1-crlf.nidx - -mention skip comments1-crlf.nidx -run_mlr --skip-comments --inidx --oxtab cat < $outdir/comments1-crlf.nidx -run_mlr --skip-comments --inidx --oxtab cat $outdir/comments1-crlf.nidx - -mention pass comments1-crlf.nidx -run_mlr --pass-comments --inidx --oxtab cat < $outdir/comments1-crlf.nidx -run_mlr --pass-comments --inidx --oxtab cat $outdir/comments1-crlf.nidx - -# ---------------------------------------------------------------- -announce SKIP/PASS COMMENTS JSON - -mention input comments1.json -run_cat $indir/comments/comments1.json - -mention skip comments1.json -run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments1.json -run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments1.json - -mention pass comments1.json -run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments1.json -run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments1.json - - -mention input comments2.json -run_cat $indir/comments/comments2.json - -mention skip comments2.json -run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments2.json -run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments2.json - -mention pass comments2.json -run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments2.json -run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments2.json - - -mention input comments3.json -run_cat $indir/comments/comments3.json - -mention skip comments3.json -run_mlr --skip-comments --ijson --odkvp cat < $indir/comments/comments3.json -run_mlr --skip-comments --ijson --odkvp cat $indir/comments/comments3.json - -mention pass comments3.json -run_mlr --pass-comments --ijson --odkvp cat < $indir/comments/comments3.json -run_mlr --pass-comments --ijson --odkvp cat $indir/comments/comments3.json - - -# It's annoying trying to check in text files (especially CSV) with CRLF -# to Git, given that it likes to 'fix' line endings for multi-platform use. -# It's easy to simply create CRLF on the fly. -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.json > $outdir/comments1-crlf.json - -mention input comments1-crlf.json -run_cat $outdir/comments1-crlf.json - -mention skip comments1-crlf.json -run_mlr --skip-comments --ijson --odkvp cat < $outdir/comments1-crlf.json -run_mlr --skip-comments --ijson --odkvp cat $outdir/comments1-crlf.json - -mention pass comments1-crlf.json -run_mlr --pass-comments --ijson --odkvp cat < $outdir/comments1-crlf.json -run_mlr --pass-comments --ijson --odkvp cat $outdir/comments1-crlf.json - -# ---------------------------------------------------------------- -announce SKIP/PASS COMMENTS XTAB - -mention input comments1.xtab -run_cat $indir/comments/comments1.xtab - -mention skip comments1.xtab -run_mlr --skip-comments --ixtab --odkvp cat < $indir/comments/comments1.xtab -run_mlr --skip-comments --ixtab --odkvp cat $indir/comments/comments1.xtab - -mention pass comments1.xtab -run_mlr --pass-comments --ixtab --odkvp cat < $indir/comments/comments1.xtab -run_mlr --pass-comments --ixtab --odkvp cat $indir/comments/comments1.xtab - - -mention input comments2.xtab -run_cat $indir/comments/comments2.xtab - -mention skip comments2.xtab -run_mlr --skip-comments --ixtab --odkvp cat < $indir/comments/comments2.xtab -run_mlr --skip-comments --ixtab --odkvp cat $indir/comments/comments2.xtab - -mention pass comments2.xtab -run_mlr --pass-comments --ixtab --odkvp cat < $indir/comments/comments2.xtab -run_mlr --pass-comments --ixtab --odkvp cat $indir/comments/comments2.xtab - - -# It's annoying trying to check in text files (especially CSV) with CRLF -# to Git, given that it likes to 'fix' line endings for multi-platform use. -# It's easy to simply create CRLF on the fly. -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.xtab > $outdir/comments1-crlf.xtab - -mention input comments1-crlf.xtab -run_cat $outdir/comments1-crlf.xtab - -mention skip comments1-crlf.xtab -run_mlr --skip-comments --ixtab --odkvp cat < $outdir/comments1-crlf.xtab -run_mlr --skip-comments --ixtab --odkvp cat $outdir/comments1-crlf.xtab - -mention pass comments1-crlf.xtab -run_mlr --pass-comments --ixtab --odkvp cat < $outdir/comments1-crlf.xtab -run_mlr --pass-comments --ixtab --odkvp cat $outdir/comments1-crlf.xtab - -# ---------------------------------------------------------------- -announce SKIP/PASS COMMENTS CSVLITE - -mention input comments1.csv -run_cat $indir/comments/comments1.csv - -mention skip comments1.csv -run_mlr --skip-comments --icsvlite --odkvp cat < $indir/comments/comments1.csv -run_mlr --skip-comments --icsvlite --odkvp cat $indir/comments/comments1.csv - -mention pass comments1.csv -run_mlr --pass-comments --icsvlite --odkvp cat < $indir/comments/comments1.csv -run_mlr --pass-comments --icsvlite --odkvp cat $indir/comments/comments1.csv - - -mention input comments2.csv -run_cat $indir/comments/comments2.csv - -mention skip comments2.csv -run_mlr --skip-comments --icsvlite --odkvp cat < $indir/comments/comments2.csv -run_mlr --skip-comments --icsvlite --odkvp cat $indir/comments/comments2.csv - -mention pass comments2.csv -run_mlr --pass-comments --icsvlite --odkvp cat < $indir/comments/comments2.csv -run_mlr --pass-comments --icsvlite --odkvp cat $indir/comments/comments2.csv - - -# It's annoying trying to check in text files (especially CSV) with CRLF -# to Git, given that it likes to 'fix' line endings for multi-platform use. -# It's easy to simply create CRLF on the fly. -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.csv > $outdir/comments1-crlf.csv - -mention input comments1-crlf.csv -run_cat $outdir/comments1-crlf.csv - -mention skip comments1-crlf.csv -run_mlr --skip-comments --icsvlite --odkvp cat < $outdir/comments1-crlf.csv -run_mlr --skip-comments --icsvlite --odkvp cat $outdir/comments1-crlf.csv - -mention pass comments1-crlf.csv -run_mlr --pass-comments --icsvlite --odkvp cat < $outdir/comments1-crlf.csv -run_mlr --pass-comments --icsvlite --odkvp cat $outdir/comments1-crlf.csv - -# ---------------------------------------------------------------- -announce SKIP/PASS COMMENTS CSV - -mention input comments1.csv -run_cat $indir/comments/comments1.csv - -mention skip comments1.csv -run_mlr --skip-comments --icsv --odkvp cat < $indir/comments/comments1.csv -run_mlr --skip-comments --icsv --odkvp cat $indir/comments/comments1.csv - -mention pass comments1.csv -run_mlr --pass-comments --icsv --odkvp cat < $indir/comments/comments1.csv -run_mlr --pass-comments --icsv --odkvp cat $indir/comments/comments1.csv - - -mention input comments2.csv -run_cat $indir/comments/comments2.csv - -mention skip comments2.csv -run_mlr --skip-comments --icsv --odkvp cat < $indir/comments/comments2.csv -run_mlr --skip-comments --icsv --odkvp cat $indir/comments/comments2.csv - -mention pass comments2.csv -run_mlr --pass-comments --icsv --odkvp cat < $indir/comments/comments2.csv -run_mlr --pass-comments --icsv --odkvp cat $indir/comments/comments2.csv - - -# It's annoying trying to check in text files (especially CSV) with CRLF -# to Git, given that it likes to 'fix' line endings for multi-platform use. -# It's easy to simply create CRLF on the fly. -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/comments/comments1.csv > $outdir/comments1-crlf.csv - -mention input comments1-crlf.csv -run_cat $outdir/comments1-crlf.csv - -mention skip comments1-crlf.csv -run_mlr --skip-comments --icsv --odkvp cat < $outdir/comments1-crlf.csv -run_mlr --skip-comments --icsv --odkvp cat $outdir/comments1-crlf.csv - -mention pass comments1-crlf.csv -run_mlr --pass-comments --icsv --odkvp cat < $outdir/comments1-crlf.csv -run_mlr --pass-comments --icsv --odkvp cat $outdir/comments1-crlf.csv - -# ---------------------------------------------------------------- -announce INT64 I/O - -run_mlr --oxtab put '$c=$a;$d=$b;$e=hexfmt($a);$f=hexfmt($b)' $indir/int64io.dkvp - -# There is different rounding on i386 vs. x86_64 but the essential check is -# that overflow has been avoided. Hence the %g output format here. -run_mlr --oxtab --ofmt '%.8g' put '$p0=$p+0;$p1=$p+1;$p2=$p+2;$p3=$p+3' $indir/int64arith.dkvp -run_mlr --oxtab --ofmt '%.8g' put '$p0=$p-0;$p1=$p-1;$p2=$p-2;$p3=$p-3' $indir/int64arith.dkvp -run_mlr --oxtab --ofmt '%.8g' put '$p0=$p*0;$p1=$p*1;$p2=$p*2;$p3=$p*3' $indir/int64arith.dkvp -run_mlr --oxtab --ofmt '%.8g' put '$n0=$n+0;$n1=$n+1;$n2=$n+2;$n3=$n+3' $indir/int64arith.dkvp -run_mlr --oxtab --ofmt '%.8g' put '$n0=$n-0;$n1=$n-1;$n2=$n-2;$n3=$n-3' $indir/int64arith.dkvp -run_mlr --oxtab --ofmt '%.8g' put '$n0=$n*0;$n1=$n*1;$n2=$n*2;$n3=$n*3' $indir/int64arith.dkvp - -# ---------------------------------------------------------------- -announce COMPRESSED INPUT - -run_mlr --csv --prepipe 'cat' cat $indir/rfc-csv/simple.csv-crlf -run_mlr --dkvp --prepipe 'cat' cat $indir/abixy -run_mlr --csv --prepipe 'cat' cat < $indir/rfc-csv/simple.csv-crlf -run_mlr --dkvp --prepipe 'cat' cat < $indir/abixy - -# ---------------------------------------------------------------- -announce STDIN - -run_mlr --csv cat < $indir/rfc-csv/simple.csv-crlf - -# ---------------------------------------------------------------- -announce RFC-CSV - -run_mlr --csv cat $indir/rfc-csv/simple.csv-crlf -run_mlr --csv cat $indir/rfc-csv/simple-truncated.csv -run_mlr --csv cat $indir/rfc-csv/narrow.csv -run_mlr --csv cat $indir/rfc-csv/narrow-truncated.csv -run_mlr --csv cat $indir/rfc-csv/quoted-comma.csv -run_mlr --csv cat $indir/rfc-csv/quoted-comma-truncated.csv -run_mlr --csv cat $indir/rfc-csv/quoted-crlf.csv -run_mlr --csv cat $indir/rfc-csv/quoted-crlf-truncated.csv -run_mlr --csv cat $indir/rfc-csv/simple-truncated.csv $indir/rfc-csv/simple.csv-crlf -run_mlr --csv --ifs semicolon --ofs pipe --irs lf --ors lflf cut -x -f b $indir/rfc-csv/modify-defaults.csv -run_mlr --csv --rs lf --quote-original cut -o -f c,b,a $indir/quote-original.csv - -run_mlr --icsv --oxtab cat $indir/comma-at-eof.csv - -run_mlr --csv --quote-all cat $indir/rfc-csv/simple.csv-crlf -run_mlr --csv --quote-original cat $indir/rfc-csv/simple.csv-crlf - -run_mlr --itsv --rs lf --oxtab cat $indir/simple.tsv - -run_mlr --iusv --oxtab cat $indir/example.usv - -# ---------------------------------------------------------------- -announce RAGGED NON-RFC CSV - -run_mlr --icsv --oxtab --ragged cat $indir/ragged.csv -run_mlr --icsvlite --oxtab --ragged cat $indir/ragged.csv - -# ---------------------------------------------------------------- -announce MARKDOWN OUTPUT - -run_mlr --itsv --rs lf --omd cat $indir/simple.tsv - -# ---------------------------------------------------------------- -announce CSV/RS ENVIRONMENT DEFAULTS - -run_mlr --csv cut -f a $indir/rfc-csv/simple.csv-crlf -run_mlr --csv --rs crlf cut -f a $indir/rfc-csv/simple.csv-crlf -mlr_expect_fail --csv --rs lf cut -f a $indir/rfc-csv/simple.csv-crlf - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER IRS/IFS/IPS FOR DKVP - -run_mlr --oxtab --idkvp --irs lf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --idkvp --irs lf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --idkvp --irs crlf --ifs , --ips = cut -o -f x,a,i $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --idkvp --irs crlf --ifs /, --ips =: cut -o -f x,a,i $indir/multi-sep.dkvp-crlf - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER IRS/IFS FOR NIDX - -run_mlr --oxtab --inidx --irs lf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --inidx --irs lf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --inidx --irs crlf --ifs , cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --inidx --irs crlf --ifs /, cut -o -f 4,1,3 $indir/multi-sep.dkvp-crlf - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER IRS/IFS FOR CSVLITE - -run_mlr --oxtab --icsvlite --irs lf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csv-crlf -run_mlr --oxtab --icsvlite --irs lf --ifs /, cut -o -f x,a,i $indir/multi-sep.csv-crlf -run_mlr --oxtab --icsvlite --irs crlf --ifs , cut -o -f x/,a/,i/ $indir/multi-sep.csv-crlf -run_mlr --oxtab --icsvlite --irs crlf --ifs /, cut -o -f x,a,i $indir/multi-sep.csv-crlf - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER SEPARATORS FOR XTAB - -run_mlr --xtab --ifs crlf --ofs Z cut -x -f b $indir/truncated.xtab-crlf -run_mlr --xtab --ips . --ops @ cut -x -f b $indir/dots.xtab -run_mlr --xtab --ips ": " --ops '@@@@' put '$sum=int($a+$b)' $indir/multi-ips.dkvp - -# ---------------------------------------------------------------- -announce EMBEDDED IPS FOR XTAB - -run_mlr --xtab cat $indir/embedded-ips.xtab - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER IRS FOR PPRINT - -run_mlr --pprint --irs crlf --ifs / --ofs @ cut -x -f b $indir/dots.pprint-crlf - -# ---------------------------------------------------------------- -announce BARRED PPRINT - -run_mlr --opprint --barred cat $indir/abixy -run_mlr --opprint --barred --right cat $indir/abixy - -run_mlr --opprint --barred cat $indir/abixy-het -run_mlr --opprint --barred --right cat $indir/abixy-het - -# ---------------------------------------------------------------- -announce MULTI-CHARACTER IXS SPECIFIERS - -run_mlr --oxtab --idkvp --irs lf --ifs '\x2c' --ips '\075' cut -o -f x,a,i $indir/multi-sep.dkvp-crlf -run_mlr --oxtab --idkvp --irs lf --ifs /, --ips '\x3d\x3a' cut -o -f x,a,i $indir/multi-sep.dkvp-crlf - -# ---------------------------------------------------------------- -announce JSON I/O - -run_mlr --ijson --opprint cat $indir/small-non-nested.json -run_mlr --ijson --opprint cat $indir/small-non-nested-wrapped.json -run_mlr --ijson --oxtab cat $indir/small-nested.json - -run_mlr --ojson cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack cat $indir/json-output-options.dkvp -run_mlr --ojson --jlistwrap cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jlistwrap cat $indir/json-output-options.dkvp -run_mlr --ojson --jquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jlistwrap --jquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jlistwrap --jquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jvquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jvquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jlistwrap --jvquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jlistwrap --jvquoteall cat $indir/json-output-options.dkvp -run_mlr --ojson --jknquoteint cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jknquoteint cat $indir/json-output-options.dkvp -run_mlr --ojson --jlistwrap --jknquoteint cat $indir/json-output-options.dkvp -run_mlr --ojson --jvstack --jlistwrap --jknquoteint cat $indir/json-output-options.dkvp - -run_mlr put -q --jvquoteall 'dump $*' $indir/json-output-options.dkvp -run_mlr put -q --jvquoteall 'o = $*; o[7] = 8; dump o' $indir/json-output-options.dkvp -run_mlr put -q --jknquoteint 'dump $*' $indir/json-output-options.dkvp -run_mlr put -q --jknquoteint 'o = $*; o[7] = 8; dump o' $indir/json-output-options.dkvp - -run_mlr --ijson --opprint cat $indir/small-non-nested-wrapped.json $indir/small-non-nested-wrapped.json - -run_mlr --icsv --ojson --rs lf cat < $outdir/line-ending-temp-1.bin -run_mlr_for_auxents_no_output termcvt --cr2crlf < $indir/line-ending-cr.bin > $outdir/line-ending-temp-2.bin -run_mlr_for_auxents_no_output termcvt --lf2cr < $indir/line-ending-lf.bin > $outdir/line-ending-temp-3.bin -run_mlr_for_auxents_no_output termcvt --lf2crlf < $indir/line-ending-lf.bin > $outdir/line-ending-temp-4.bin -run_mlr_for_auxents_no_output termcvt --crlf2cr < $indir/line-ending-crlf.bin > $outdir/line-ending-temp-5.bin -run_mlr_for_auxents_no_output termcvt --crlf2lf < $indir/line-ending-crlf.bin > $outdir/line-ending-temp-6.bin - -run_mlr_for_auxents hex < $outdir/line-ending-temp-1.bin -run_mlr_for_auxents hex < $outdir/line-ending-temp-2.bin -run_mlr_for_auxents hex < $outdir/line-ending-temp-3.bin -run_mlr_for_auxents hex < $outdir/line-ending-temp-4.bin -run_mlr_for_auxents hex < $outdir/line-ending-temp-5.bin -run_mlr_for_auxents hex < $outdir/line-ending-temp-6.bin - -# ================================================================ -# A key feature of this regression script is that it can be invoked from any -# directory. Depending on the directory it's invoked from, the path to $outdir -# may vary. Nonetheless for debugging it's crucial that we echo out each -# command being executed -- here we use diff -I to skip the info lines and -# focus the test on program output per se. - -echo -echo ================================================================ -echo "Differences between $expfile and $outfile:" - -# We run with 'set -e' all the way through this script, to die on error -- but -# for the diff command we want to trap the error and die with a message, especially -# when the diff is long. - -set +e -diff -a -I '^mlr' -I '^cat' -C5 $expfile $outfile -status=$? - -if [ $status -eq 0 ]; then - echo "No differences were found between $expfile and $outfile" - echo ================================================================ - echo - echo ALL REGRESSION TESTS PASSED - echo Tests completed: $num_completed - exit 0 -else - echo - echo "Differences were found between $expfile and $outfile !" - echo - echo Tests completed: $num_completed - exit 1 -fi diff --git a/c/regdiff b/c/regdiff deleted file mode 100755 index 62d2b1389..000000000 --- a/c/regdiff +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -diff -a -I '^mlr ' -I '^cat ' "$@" reg_test/expected/out output-regtest/out diff --git a/c/stdlib.mlr b/c/stdlib.mlr deleted file mode 100644 index 5846d03c5..000000000 --- a/c/stdlib.mlr +++ /dev/null @@ -1,37 +0,0 @@ - -func mymapsum(map a, map b): map { - for (k in b) { - if (!haskey(a, k)) { - a[k] = b[k]; - } - } - return a; -} - -func mymapdiff(map a, map b): map { - for (k in b) { - if (haskey(a, k)) { - unset a[k] - } - } - return a; -} - -func myleafcount(map m) : int { - int sum = 0; - for (k in m) { - sum += 1; - if (ismap(m[k])) { - sum += leafcount(m[k]) - } - } - return sum; -} - -func mylength(map m) : int { - int sum = 0; - for (k in m) { - sum += 1; - } - return sum; -} diff --git a/c/stream/Makefile.am b/c/stream/Makefile.am deleted file mode 100644 index 3afa2a494..000000000 --- a/c/stream/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -noinst_LTLIBRARIES= libstream.la -libstream_la_SOURCES= stream.c stream.h -libstream_la_CPPFLAGS= -I${srcdir}/../ -libstream_la_CFLAGS= -std=gnu99 diff --git a/c/stream/Makefile.in b/c/stream/Makefile.in deleted file mode 100644 index 3ba3b85f7..000000000 --- a/c/stream/Makefile.in +++ /dev/null @@ -1,599 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = c/stream -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libstream_la_LIBADD = -am_libstream_la_OBJECTS = libstream_la-stream.lo -libstream_la_OBJECTS = $(am_libstream_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 = -libstream_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libstream_la_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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 = $(libstream_la_SOURCES) -DIST_SOURCES = $(libstream_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)/autotools/depcomp -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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 = libstream.la -libstream_la_SOURCES = stream.c stream.h -libstream_la_CPPFLAGS = -I${srcdir}/../ -libstream_la_CFLAGS = -std=gnu99 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(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 c/stream/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/stream/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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}; \ - } - -libstream.la: $(libstream_la_OBJECTS) $(libstream_la_DEPENDENCIES) $(EXTRA_libstream_la_DEPENDENCIES) - $(AM_V_CCLD)$(libstream_la_LINK) $(libstream_la_OBJECTS) $(libstream_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstream_la-stream.Plo@am__quote@ - -.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 $@ $< - -libstream_la-stream.lo: stream.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstream_la_CPPFLAGS) $(CPPFLAGS) $(libstream_la_CFLAGS) $(CFLAGS) -MT libstream_la-stream.lo -MD -MP -MF $(DEPDIR)/libstream_la-stream.Tpo -c -o libstream_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstream_la-stream.Tpo $(DEPDIR)/libstream_la-stream.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stream.c' object='libstream_la-stream.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstream_la_CPPFLAGS) $(CPPFLAGS) $(libstream_la_CFLAGS) $(CFLAGS) -c -o libstream_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c - -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: $(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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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: diff --git a/c/stream/stream.c b/c/stream/stream.c deleted file mode 100644 index cd859acc7..000000000 --- a/c/stream/stream.c +++ /dev/null @@ -1,256 +0,0 @@ -#include -#include -#include - -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "input/lrec_readers.h" -#include "mapping/mappers.h" -#include "output/lrec_writers.h" - -static int do_stream_chained_in_place(context_t* pctx, cli_opts_t* popts); -static int do_stream_chained_to_stdout(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts); - -static int do_file_chained(char* filename, context_t* pctx, - lrec_reader_t* plrec_reader, sllv_t* pmapper_list, lrec_writer_t* plrec_writer, FILE* output_stream, - cli_opts_t* popts); - -static sllv_t* chain_map(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head); - -static void drive_lrec(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head, lrec_writer_t* plrec_writer, - FILE* output_stream); - -typedef void progress_indicator_t(context_t* pctx, long long nr_progress_mod); -static void null_progress_indicator(context_t* pctx, long long nr_progress_mod); -static void stderr_progress_indicator(context_t* pctx, long long nr_progress_mod); - -// ---------------------------------------------------------------- -int do_stream_chained(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts) { - if (popts->do_in_place) { - return do_stream_chained_in_place(pctx, popts); - } else { - return do_stream_chained_to_stdout(pctx, pmapper_list, popts); - } -} - -// ---------------------------------------------------------------- -// For in-place mode, reconstruct the mappers on each input file. E.g. 'mlr -I head -n 2 -// foo bar' should do head -n 2 on foo as well as on bar. -// -// I could have implemented this with a single construction of the mappers and having each -// mapper implement a virtual reset() method. However, having effectively two initalizers -// per mapper -- constructor and reset method -- I'd surely miss some logic somewhere. -// With in-place mode being a less frequently used code path, this would likely lead to -// latent bugs. So while it seems inelegant to re-parse part of the command line over and -// over again to reconstruct mappers for each file, this approach leads to greater code -// stability. - -static int do_stream_chained_in_place(context_t* pctx, cli_opts_t* popts) { - MLR_INTERNAL_CODING_ERROR_IF(popts->filenames == NULL); - MLR_INTERNAL_CODING_ERROR_IF(popts->filenames->length == 0); - - int ok = 1; - - // Read from each file name in turn - for (sllse_t* pe = popts->filenames->phead; pe != NULL; pe = pe->pnext) { - - // Allocate reader, mappers, and writer individually for each file name. - // This way CSV headers appear in each file, head -n 10 puts 10 rows for - // each output file, and so on. - lrec_reader_t* plrec_reader = lrec_reader_alloc_or_die(&popts->reader_opts); - lrec_writer_t* plrec_writer = lrec_writer_alloc_or_die(&popts->writer_opts); - - // Note that the command-line parsers can operate destructively on argv, - // e.g. verbs which take comma-delimited field names splitting on commas. - // For this reason we need to duplicate argv on each run. We need to free - // after processing in case mappers have retained pointers into argv. - - int argi = popts->mapper_argb; - char** argv_copy = copy_argv(popts->original_argv); - sllv_t* pmapper_list = cli_parse_mappers(argv_copy, &argi, popts->argc, popts); - // Should not have been allowed by the CLI parser: - MLR_INTERNAL_CODING_ERROR_IF(pmapper_list->length < 1); - - char* filename = pe->value; - char* tempname = alloc_suffixed_temp_file_name(filename); - FILE* output_stream = fopen(tempname, "wb"); - if (output_stream == NULL) { - perror("fopen"); - fprintf(stderr, "%s: Could not open \"%s\" for write.\n", - MLR_GLOBALS.bargv0, tempname); - exit(1); - } - - pctx->filenum++; - pctx->filename = filename; - pctx->fnr = 0; - - ok = do_file_chained(filename, pctx, plrec_reader, pmapper_list, plrec_writer, - output_stream, popts) && ok; - - // For in-place mode, there's no breaking from the loop over input files. Just an early - // return from the mapper chain, which has already just happened. - if (pctx->force_eof == TRUE) // e.g. mlr head - pctx->force_eof = FALSE; - - // Mappers and writers receive end-of-stream notifications via null input record. - // Do that, now that data from the input file have been exhausted. - drive_lrec(NULL, pctx, pmapper_list->phead, plrec_writer, output_stream); - // Drain the pretty-printer. - plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, NULL, pctx); - - fclose(output_stream); - int rc = rename(tempname, filename); - if (rc != 0) { - perror("rename"); - fprintf(stderr, "%s: Could not rename \"%s\" to \"%s\".\n", - MLR_GLOBALS.bargv0, tempname, filename); - exit(1); - } - free(tempname); - - plrec_reader->pfree_func(plrec_reader); - plrec_writer->pfree_func(plrec_writer, pctx); - - mapper_chain_free(pmapper_list, pctx); - - free_argv_copy(argv_copy); - } - - return ok; -} - -// ---------------------------------------------------------------- -static int do_stream_chained_to_stdout(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts) { - FILE* output_stream = stdout; - - lrec_reader_t* plrec_reader = lrec_reader_alloc_or_die(&popts->reader_opts); - lrec_writer_t* plrec_writer = lrec_writer_alloc_or_die(&popts->writer_opts); - - MLR_INTERNAL_CODING_ERROR_IF(pmapper_list->length < 1); // Should not have been allowed by the CLI parser. - - int ok = 1; - if (popts->filenames == NULL) { - // No input at all - } else if (popts->filenames->length == 0) { - // Zero file names means read from standard input - pctx->filenum++; - pctx->filename = "(stdin)"; - pctx->fnr = 0; - ok = do_file_chained("-", pctx, plrec_reader, pmapper_list, plrec_writer, - output_stream, popts) && ok; - } else { - // Read from each file name in turn - for (sllse_t* pe = popts->filenames->phead; pe != NULL; pe = pe->pnext) { - char* filename = pe->value; - pctx->filenum++; - pctx->filename = filename; - pctx->fnr = 0; - ok = do_file_chained(filename, pctx, plrec_reader, pmapper_list, plrec_writer, - output_stream, popts) && ok; - if (pctx->force_eof == TRUE) // e.g. mlr head - break; - } - } - - // Mappers and writers receive end-of-stream notifications via null input record. - // Do that, now that data from all input file(s) have been exhausted. - drive_lrec(NULL, pctx, pmapper_list->phead, plrec_writer, output_stream); - - // Drain the pretty-printer. - plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, NULL, pctx); - - plrec_reader->pfree_func(plrec_reader); - plrec_writer->pfree_func(plrec_writer, pctx); - - return ok; -} - -// ---------------------------------------------------------------- -static int do_file_chained(char* filename, context_t* pctx, - lrec_reader_t* plrec_reader, sllv_t* pmapper_list, lrec_writer_t* plrec_writer, FILE* output_stream, - cli_opts_t* popts) -{ - void* pvhandle = plrec_reader->popen_func(plrec_reader->pvstate, popts->reader_opts.prepipe, filename); - progress_indicator_t* pindicator = popts->nr_progress_mod == 0LL - ? null_progress_indicator - : stderr_progress_indicator; - - // Start-of-file hook, e.g. expecting CSV headers on input. - plrec_reader->psof_func(plrec_reader->pvstate, pvhandle); - - while (1) { - lrec_t* pinrec = plrec_reader->pprocess_func(plrec_reader->pvstate, pvhandle, pctx); - if (pinrec == NULL) - break; - if (pctx->force_eof == TRUE) { // e.g. mlr head - lrec_free(pinrec); - break; - } - pctx->nr++; - pctx->fnr++; - - pindicator(pctx, popts->nr_progress_mod); - - drive_lrec(pinrec, pctx, pmapper_list->phead, plrec_writer, output_stream); - } - - plrec_reader->pclose_func(plrec_reader->pvstate, pvhandle, popts->reader_opts.prepipe); - return 1; -} - -// ---------------------------------------------------------------- -static void drive_lrec(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head, lrec_writer_t* plrec_writer, - FILE* output_stream) -{ - sllv_t* outrecs = chain_map(pinrec, pctx, pmapper_list_head); - if (outrecs != NULL) { - for (sllve_t* pe = outrecs->phead; pe != NULL; pe = pe->pnext) { - lrec_t* poutrec = pe->pvvalue; - if (poutrec != NULL) // writer frees records (sllv void-star payload) - plrec_writer->pprocess_func(plrec_writer->pvstate, output_stream, poutrec, pctx); - } - sllv_free(outrecs); // we free the list - } -} - -// ---------------------------------------------------------------- -// Map a single input record (maybe null at end of input stream) to zero or -// more output records. -// -// Return: list of lrec_t*. Input: lrec_t* and list of mapper_t*. - -static sllv_t* chain_map(lrec_t* pinrec, context_t* pctx, sllve_t* pmapper_list_head) { - mapper_t* pmapper = pmapper_list_head->pvvalue; - sllv_t* outrecs = pmapper->pprocess_func(pinrec, pctx, pmapper->pvstate); - if (pmapper_list_head->pnext == NULL) { - return outrecs; - } else if (outrecs == NULL) { // end of input stream - return NULL; - } else { - sllv_t* nextrecs = sllv_alloc(); - - for (sllve_t* pe = outrecs->phead; pe != NULL; pe = pe->pnext) { - lrec_t* poutrec = pe->pvvalue; - sllv_t* nextrecsi = chain_map(poutrec, pctx, pmapper_list_head->pnext); - sllv_transfer(nextrecs, nextrecsi); - sllv_free(nextrecsi); - } - sllv_free(outrecs); - - return nextrecs; - } -} - -// ---------------------------------------------------------------- -static void stderr_progress_indicator(context_t* pctx, long long nr_progress_mod) { - long long remainder = pctx->nr % nr_progress_mod; - if (remainder == 0) { - fprintf(stderr, "NR=%lld FNR=%lld FILENAME=%s\n", pctx->nr, pctx->fnr, pctx->filename); - } -} - -static void null_progress_indicator(context_t* pctx, long long nr_progress_mod) { -} diff --git a/c/stream/stream.h b/c/stream/stream.h deleted file mode 100644 index 6733d0fee..000000000 --- a/c/stream/stream.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef STREAM_H -#define STREAM_H - -#include "cli/mlrcli.h" -#include "lib/context.h" -#include "containers/slls.h" -#include "containers/sllv.h" -#include "input/lrec_readers.h" -#include "mapping/mappers.h" -#include "output/lrec_writers.h" - -int do_stream_chained(context_t* pctx, sllv_t* pmapper_list, cli_opts_t* popts); - -#endif // STREAM_H diff --git a/c/todo.txt b/c/todo.txt deleted file mode 100644 index 316f69cc3..000000000 --- a/c/todo.txt +++ /dev/null @@ -1,513 +0,0 @@ -================================================================ -BUGFIXES - -! fix ifc not at top level ! -* segv on over-indexed local var stored from function retval ... - -* follow-on for pre-existing unset/typed-overlay issue - -================================================================ -TOP OF LIST - -test commit -poki updates: -* all expand-all/collapse-all, h1's, etc. could be autogenned -- ? -? fold back to gh/jk/poki - -quick doc: -* multi-join @ FAQ -* doc/bld note for vgrun oo - - git log; find last release - - git diff -r xxxxx reg_test/run - - export indir=./reg_test/input - - vgrun mlr ... - -* sort-within-records -* LUA-style -* inf/nan in strings ... - -* linear rename: - - new UTs - -================================================================ -* uniq: - o UT cases x all - o faqent w/ ref to head -n 1 -g - - xxx - - xxx - -! dirname/basename functions ! - -* MILLER_{MAJOR/MINOR/MICRO} builtins ? - -airable: - -!! --gen: -* olh/mld -* mlrval.?/mvfuncs.? -> lib; then support mv_t @ gen-reader -* w/ multiple file names it gens twice. abend unless #infile==0. - -> also '$z=FILENAME' says '(stdin)' :( - -! stdout fflushes .. - -! mld/mlh stats1 regex cookbook/10min examples - -! termcvt -I -! aux-list -> main help; dox too - -* UT unhex - -! faqent/cookbook/more: - mlr termcvt --cr2lf foo.csv.cr > foo.csv - -* reg_test/run --mlrexec flag - -* across-all/regex x stats1 / many verbs - k stats1 functionality - k UT - k stats1 --help - - merge-fields -x - - how many others for incremental release? stats2? - -* more json handling: topmost/second-topmost array, put nidx-style as with dkvp. - -?? JIT conversion (#150)? makes a mess of the disposition matrices; bleah. but the outcome would be nice. - ----------------------------------------------------------------- -non-airable: - -? bash completion script ? - -! fix autoreconf timestamp wtf - -! ASAN build @ travis ! - -> doesn't look quite right at travis - -> to release notes if successful - -* --barred & autodetect notes @ the long issue - -! rm temp-junk files ! - -! pokipush - -! write-temp-file abend on negfd etc - -* rh/fedora/centos - -* travis clang build w/ asan ? - ----------------------------------------------------------------- -other: - -? coroutines (r/w pipes)? - o maybe not now: need notion of # lines in/out which, simplest case, are 1-1, - but in the more general case might not be. - o coexec as well as shellout; stderr caveats x both - -================================================================ -MAPVAR CHECKLIST: - -* MT_ERROR vs. fatal vs. skip assign. iron it out. - -* more generally, audit error-handling for consistency: - - absent/skip - - '(error)' - - abend - - coerce - -> doc smoothouts for 5.0.0 incompat notes - - e.g. non-string =~ regex: coerce LHS to string? - -* feels weird: '$*=3' is a syntax error but 'o=3;$*=o' is not. also '@*=3' is not a syntax error. - -* death knell for mv-only evaluators: this is a syntax error: - mlr put -q 'o = haskey(NR==4 ? {"a": NF} : {"b": NF}, "a"); print "NR=".NR.",haskeya=".o' - -* gross: $*=splitkv(...) results in string keys always. strengthen the typed overlay for filter/put? - lhmsmv -> mlhmmv?? need to be careful with int-key gets ... char* field_name in many places ... - -* debt-reduction - ! naming conventions to clarify transfer/copy semantics - - copy/ref of keys vs. values in mlhmmv, local_stack, and callees -- ?!? - -* clarify ownership semantics in localstack & mlhmmv via function names, & top-of-file comments - -================================================================ -5.4.0 ideas: - ----------------------------------------------------------------- -! multi-field x many verbs: -f/-r field-name-spec opportunities throughout - -which verbs: - k stats1 (done in 5.2.0) - * stats2 - * merge-fields -x - - count-distinct - - - sec2gmt/seg2gmtdate - - step - - top - - ? uniq -g - ? sample -g - ? head -g - ? tail -g - - ? reorder - ? bar - ? histogram - ? label - ? nest - ? sort - - ? decimate -g - ? join - ----------------------------------------------------------------- - -? weighted stats? - -* xxxes - -* mt_error/fatal/skip-assign audit - -! more than 'syntax error' from lemon-parse failures ... lemon API research - -? some sort of debug/single-step/trace ... include the AST in the CST & reverse-generate ? - -* seqgen as input lrec "reader"? the seqgen verb doesn't (and shouldn't) step NR. - -? free vs. free_contents names ? - -* emph override wording: from rel notes. - "Likewise --ofs, --ors, --ops, --jvstack, and all other output-formatting - options from the main help at mlr -h and/or man mlr default to the main - command-line options, and may be overridden with flags supplied to mlr put and - mlr tee." - -? some help for keyword clashes? e.g. 'func E(x) { ... }' ? - -* bargv0 throughout, replacing "mlr" and argv[0] both. (former against name-changes; latter against /usr/bin/mlr.) - -* prune unused functions - -? mlr step -a shift --by {n} - -? --imd ? - -* bool_t:uchar typedef & perf check? - -COOK: -* use: https://github.com/petewarden/dstkdata - mlr --from ../data/big.dkvp put -q ' - #weight = $y; - #weight = $y * $y; - weight = $i; - - @sumwx[$a] += weight * $i; - @sumw[$a] += weight; - - @sumx[$a] += $i; - @sumn[$a] += 1; - - end { - map wmean = {}; - map mean = {}; - for (a in @sumwx) { - wmean[a] = @sumwx[a] / @sumw[a] - } - for (a in @sumx) { - mean[a] = @sumx[a] / @sumn[a] - } - emit wmean, "a"; - emit mean, "a"; - }' - -COMPARES: -* https://github.com/shenwei356/csvtk -* http://csvkit.readthedocs.io/en/540/ -* https://github.com/BurntSushi/xsv -* https://github.com/eBay/tsv-utils-dlang -* https://www.gnu.org/software/datamash/manual/datamash.html - -================================================================ -5.4.0 IDEAS: - -!! coroutines: line-oriented; operate on field(s); r/w popen - -* json_encode / json_decode functions? (map->string and string->map) - - array handling ... - -* option to inhibit dquot of int map keys on dump - ! fix for srec keys ! - -* expose strcmp & strcasecmp for lhm sorting -* expose movefirst/movelast funcs -* mlr sort --fold! -* mlr paste (sjackman) -* dump @records after @records[NR]=$*: json "1" rather than 1 indices are b04k3d. make a cliopt. - -* regexes for IPS/IFS/IRS; also in mlr nest etc. - -!!?? disallow implicit assignment? force w/ var at least?? - - w/ implicit: for (...) {sum += x} FUBAR - - w/o implicit: sad panda cannot type 'x=1' - -> at least make an mld:ref note about it. - -* perf profile - -! sortk sortv sortf - -> how to compare map-valued keys on sortv? recurse? - -> string keys before/after int? - -> keys: int before string before map - -> values? - o definitely intermix int & float - o definitely intermix empty & string - o definitely num before string. - o definitely maps after that. - o what about boolean? - o what about error/absent? - -> how to incorporate numeric & lexical flags -- defer all complexity to sortf? - -? compile-time checks between locals, fcnargs, fcnretvals -- if unsatisfiable by typing (irrespective - of later stream data) then throw at compile time. - -* poki-run no '$ ' for comment lines - -? maybe some sort of collections-API logic to complement for-loops? important, or just fun to code up? - -? map-literal grammar as separate parser? - - replace existing json parser? - - use this for streaming parser? - - implement byte-getter with fgetc to keep reading until closing bracket? - -? 'null' JSON syntax -- what syntactic meaning for miller? mv_absent or mv_empty, neither would render back as 'null' - on output. yet i also don't want another null-type. - -? support JSON arrays: - - allow them in map-literal input - - allow them in JSON record input - - add mlhmmv array type, complementing map type - - negative-index read semantics (backwards index) - - out-of-bounds read semantics (mv_absent) - - -out-of-bounds write semantics (array extend) - - for srec-to-mlhmmv: loop over level & if all integer keys & all in sequence, treat as array - -? array/list types? [a,b,c] -? set types? {a,b,c} (vs. map {a:1,b:2,c:3}) -? maybe overkill (map covers array & set) but with those there would be solid collections coverage. - ----------------------------------------------------------------- -EXECUTION TRACE: - -! missing operators - $ mlr --from ../c/s put -T 'int a=1;var b=a[2]' - TRACE (int a 1) - TRACE (var b (a 2)) - -! trace *assignments* (mutations of pvars state) - -* work through the grammar & neaten up pnode->text instances, now that these names are user-visible. -* mld. note it's an AST dump, not source-level. -* maybe go through and replace (...)-style with AST-to-source formatting ... -* UT -! this is all very cute tracing at source-level but would be significantly more useful with values shown. - ----------------------------------------------------------------- -SYNTAX ERROR IMPROVEMENT: - -* try to get some source-level info in there. - http://archive.oreilly.com/pub/a/linux/excerpts/9780596155971/error-reporting-recovery.html - ----------------------------------------------------------------- -? double-quote-aware (non-lite) nidx & dkvp options? -? comma-number -- using locale? - -* MLRPATH - ----------------------------------------------------------------- -? narrative/slides doc ... -? stdin-then-tail-f - -? CONVFMT? IGNORECASE? MLRPATH? - -* lrec get followed by put/remove: getext variant returning node for unlink, valpoke, or null == append to avoid - double-searching. -* 64-bit lengths for containers. test with 5-billion-integer-seq data. - ----------------------------------------------------------------- -MORE - -* look into 'perf' -* linreg in terms of stats only ... check py book -* cat/cut langcomps (w/ gh links) -> perf page - -* pipe-viewer-like feature to stderr? - -* stats1/stats2 sliding-window feature? and/or with ewma-coefficients (much easier) - - mean/stddev/var; skew/kurt? - - linregs; corr/cov? - ? also, option of weighted stats w/ explicit weights field? - ? maybe just EWMA with well-known sumw followed by then-chaining. write up the weights if so? - -* tbin/ok -> cookbook -* debian screenshot -* ruby @ optextdep @ mld; poki+mkman -* stdin filename keyword for read-from-file-then-tail-f mode (e.g. mlr etc) - - needs refactor for lrec_reader_alloc callsite -* perf page: (1) redo; (2) note GNU/etc; (3) compare to mawk (http://invisible-island.net/mawk/) -* EOS comments thruout -* valgrind note @ new dev page/section -* join: final sllv_free in destructor (lo-pri) -* anim ref https://github.com/edi9999/path-extractor - -* benchmark lua per se -* benchmark lua-jit - -* bug or feature? - near-overflow case: - $ mlr sort -n x reg_test/input/near-ovf.dkvp - x=9223372036854775807,y=-9223372036854775803 - x=9223372036854775804,y=-9223372036854775804 - x=9223372036854775801,y=-9223372036854775801 - x=9223372036854775806,y=-9223372036854775805 - x=9223372036854775803,y=-9223372036854775807 - x=9223372036854775802,y=-9223372036854775806 - x=9223372036854775805,y=-9223372036854775802 - ----------------------------------------------------------------- -COOKBOOK/FAQ/ETC.: - -* cookbook: - - eval stuff from https://github.com/johnkerl/miller/issues/88 - - $ mlr --csvlite stats2 -a linreg-pca -f x,y x - x_y_pca_m,x_y_pca_b,x_y_pca_n,x_y_pca_quality - 1.030300,0.949250,4,0.999859 - - $ mlr --csvlite --odkvp --ofs semicolon stats2 -a linreg-pca -f x,y x - x_y_pca_m=1.030300;x_y_pca_b=0.949250;x_y_pca_n=4;x_y_pca_quality=0.999859 - - $ eval $(mlr --csvlite --odkvp --ofs semicolon stats2 -a linreg-pca -f x,y x) - - $ echo $x_y_pca_m - 1.030300 - - - hold-and-fit regressor doc: 'then put' for residuals; note avoids two-pass & - the saving of fit parameters - - - histo w/ min/max is effectively 2-pass (unless you have prior knowledge about the data). - note count-distinct w/ int() func. - - - two-pass lin/logi reg vs. hold-and-fit. - - - very specific R/mysql/etc inouts - - - polyglottal dkvp/etc production. - - - very specific examples of sed/grep/etc preprocessing to structurize semi-structured data (e.g. logs) - - - checku.dash -> cookbook - -* faqents: - - rsum as proxy for per-record/agg-only mixed output - -* other doc besides cookbook & faq: - - R doc: - ! xref @ covers x 2 - ! be very clear streaming vs. dataframe -- each has things the other can't do - ! emph mlr has light stats but for heavyweight analysis use R et al. - -* --mmap @ mlr -h - -================================================================ -* ect feature? - -> maybe better in cookbook ... - - in1 optional: t (epoch seconds); default systime() - - in2: nleft - - in3 optional: target #/field name - - in optional: -s flag or not - - out1: etchours - - out2: etcstamp - - o expose mapper_stats2_alloc - o expose mapper_cut_alloc - o encapsulate the following: - mlr put '$t=systime()' \ - then filter 'NR>4' \ - then put '$nleft=$target-$n' \ - then stats2 -s -a linreg-pca -f t,nleft \ - then put '$etc= -$t_n_pca_b/$t_n_pca_m; $etcstamp=sec2gmt($etc); $etchours=($etc-systime())/3600.0' - -* mlr step -a from-first -f t \ - then cut -o -f t_from_first,ntodo \ - then step -a ewma -d 0.005,0.01,0.1 -o a,b,c -f ntodo \ - then stats2 -s -a linreg-pca -f \ - t_from_first,ntodo,t_from_first,ntodo_ewma_a,t_from_first,ntodo_ewma_b,t_from_first,ntodo_ewma_c \ - then put ' - $ect0 = -$t_from_first_ntodo_pca_b/$t_from_first_ntodo_pca_m; - $ecta = -$t_from_first_ntodo_ewma_a_pca_b/$t_from_first_ntodo_ewma_a_pca_m; - $ectb = -$t_from_first_ntodo_ewma_b_pca_b/$t_from_first_ntodo_ewma_b_pca_m; - $ectc = -$t_from_first_ntodo_ewma_c_pca_b/$t_from_first_ntodo_ewma_c_pca_m - ' \ - then cut -o -f t_from_first,ect0,ecta,ectb,ectc - ----------------------------------------------------------------- -* introduce a fourth, padding separator for all formats? (for leading/trailing strip/skip.) - o allows 'x = 10' in DKVP - o allows right-justified keys in XTAB - -? wiki quickselect ? - -* hash-collision ifdef instrumentation -> maybe find a better hash function out there -* lemon in-dir -- cf wiz note -* gprof link with -lc on FreeBSD -- ? - -================================================================ -DOC - -* Note that PCA is better than OLS for roundoff error (sum of squares ...): - grep red data/multicountdown.txt | head -n 13 | mlr --opprint stats2 -a linreg-ols -f t,count - grep red data/multicountdown.txt | head -n 14 | mlr --opprint stats2 -a linreg-ols -f t,count - -================================================================ -IMPROVEMENTS - -* run go/d/etc on sprax & include #'s in perf pg, and/or rm xref in the latter & just post xlang perf #'s there -* link to gh/jk/m xlang impls ... and/or cardify their sources :) ... or maybe just link to gh/jk/m xlang dir -* ack c impl has been repeatedly optimized but even the original version (also cutc.c ...) outperforms - -* update t1.rb including numeric sort; fix appropriateness of -t= - -* more use of restrict pointers ... ? - -================================================================ -PYTHON -* pgr + stats_m same I/O modules?? - -================================================================ -FYI - -shell: mlr put '$z=$x+$y' -lldb: run put "\$z=\$x+\$y" - -http://include-what-you-use.org/ - ----------------------------------------------------------------- -https://fedoraproject.org/wiki/How_to_create_an_RPM_package -https://wiki.centos.org/HowTos/Packages/ContributeYourRPMs -https://lists.centos.org/pipermail/centos/2012-September/129227.html -https://fedoraproject.org/wiki/Join_the_package_collection_maintainers -https://fedoraproject.org/wiki/How_to_get_sponsored_into_the_packager_group -https://fedoraproject.org/wiki/Package_Review_Process -https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch11s03.html -http://wiki.networksecuritytoolkit.org/nstwiki/index.php/HowTo_Create_A_Patch_File_For_A_RPM - ----------------------------------------------------------------- -Squash commits by: - brew update - git checkout $YOUR_BRANCH - git rebase --interactive origin/master - mark each commit other than the first as "squash" or "fixup" - git push -f - -http://codeinthehole.com/writing/pull-requests-and-other-good-practices-for-teams-using-github/ diff --git a/c/tools/clean-valgrind-output b/c/tools/clean-valgrind-output deleted file mode 100755 index 0e35d4cc7..000000000 --- a/c/tools/clean-valgrind-output +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# E.g. for filtering the output of reg_test/run --valgrind. -# This just strips out some false positives, e.g. system-level stuff not -# relevant to Miller itself. mgrepv is at -# https://github.com/johnkerl/scripts/blob/master/fundam/mgrepv - -sed 's/^==.*== //' "$@" | swipe \ - | sed 's/--[0-9]*-- UNKNOWN.*//' \ - | mgrepv dyld \ - | mgrepv copySwiftV1MangledName \ - | mgrepv 'LEAK SUMMARY' \ - | mgrepv 'HEAP SUMMARY' \ - | grep -v 'ERROR SUMMARY' \ - | grep -v 'Memcheck,' \ - | grep -v 'Copyright' \ - | grep -v 'Using Valgrind' \ - | grep -v 'For counts of' \ - | mgrepv 'mlr_try_float_from_string' \ - | mgrepv '__snprintf_chk' \ - | mgrepv 'vsscanf_l' \ - | mgrepv 'handle_ld_preload' \ - | mgrepv 'NXMapRemove' \ - | mgrepv '_platform_memchr' \ - | mgrepv 'xpc_pipe_routine' \ - | grep -v 'MACH_SEND_TRAILER' \ - | mgrepv 'mlr_dsl_lexer_lex' \ - | mgrepv 'yyreduce' \ - | mgrepv 'unbackslash' \ - | mgrepv 'cli_sep_from_arg' \ - | mgrepv 'join_bucket_keeper_alloc' \ - | mgrepv 'join_bucket_keeper_emit' \ - | mgrepv 'handle_env_assignment' \ - | mgrepv 'file_ingestor_stdio_vopen' \ - | mgrepv 'lrec_reader_stdio_json_sof' \ - | cat - - #| mgrepv 'shared_parse_cli' \ - #| mgrepv 'parse_command_line' diff --git a/c/tools/mcountlines b/c/tools/mcountlines deleted file mode 100755 index 841b10155..000000000 --- a/c/tools/mcountlines +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -wc -l \ - cli/*.[ch] \ - containers/*.[ch] \ - dsl/*.[ch] \ - input/*.[ch] \ - lib/*.[ch] \ - mapping/*.[ch] \ - output/*.[ch] \ - parsing/mlr*.[ly] \ - parsing/mlr*wrapper*.[ch] \ - stream/*.[ch] \ - unit_test/*.[ch] \ - | sort -n - -echo -wc -c \ - cli/*.[ch] \ - containers/*.[ch] \ - dsl/*.[ch] \ - input/*.[ch] \ - lib/*.[ch] \ - mapping/*.[ch] \ - output/*.[ch] \ - parsing/mlr*.[ly] \ - parsing/mlr*wrapper*.[ch] \ - stream/*.[ch] \ - unit_test/*.[ch] \ - | sort -n | tail -n 5 - diff --git a/c/tools/mxm b/c/tools/mxm deleted file mode 100755 index ce1a4aa45..000000000 --- a/c/tools/mxm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# For realigning disposition matrices, e.g. in vim using !} -liit "$@" | sed 's/^ }/}/' diff --git a/c/tools/neaten-valgrind-output b/c/tools/neaten-valgrind-output deleted file mode 100755 index 300ae0e0f..000000000 --- a/c/tools/neaten-valgrind-output +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -mlr --nidx --rs '\n\n' --fs '\001' put -q ' - $1 =~ "^mlr " - || $1 =~ "Command.*termcvt" - || $1 =~ "Command.*lecat" - || $1 =~ "Command.*hex" - { - @cmd = $1 - } - $1 =~ "by 0x" { - @stack_trace = $1; - @combined = @cmd."\n".@stack_trace; - emit @combined - } -' "$@" diff --git a/c/tools/truncate b/c/tools/truncate deleted file mode 100755 index 594b5c335..000000000 --- a/c/tools/truncate +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby - -ARGV.each do |arg| - File.write(arg, File.open(arg).read.strip) -end diff --git a/c/u/mand.mlr b/c/u/mand.mlr deleted file mode 100644 index b662dde7d..000000000 --- a/c/u/mand.mlr +++ /dev/null @@ -1,68 +0,0 @@ -# Mandelbrot set generator: simple example of Miller DSL as programming language. -begin { - # Set defaults - if (is_absent(@rcorn)) { - @rcorn = -2.0; - } - if (is_absent(@icorn)) { - @icorn = -2.0; - } - if (is_absent(@side)) { - @side = 4.0; - } - if (is_absent(@iheight)) { - @iheight = 500; - } - if (is_absent(@iwidth)) { - @iwidth = 1000; - } - if (is_absent(@maxits)) { - @maxits = 100; - } - if (is_absent(@levelstep)) { - @levelstep = 5; - } - if (is_absent(@chars)) { - @chars = "@X*o-."; - } - if (is_absent(@silent)) { - @silent = false - } -} - -end { - for (int ii = @iheight-1; ii >= 0; ii -= 1) { - num ci = @icorn + (ii/@iheight) * @side; - for (int ir = 0; ir < @iwidth; ir += 1) { - num cr = @rcorn + (ir/@iwidth) * @side; - printn get_point_plot(cr, ci, @maxits); - } - print; - } -} - -func get_point_plot(cr, ci, maxits) { - num zr = 0.0; - num zi = 0.0; - - int iti = 0; - bool escaped = false; - num zt = 0; - for (iti = 0; iti < maxits; iti += 1) { - num mag = zr*zr + zi+zi; - if (mag > 4.0) { - escaped = true; - break; - } - # z := z^2 + c - zt = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = zt; - } - if (!escaped) { - return "."; - } else { - int level = (iti // @levelstep) % strlen(@chars); - return substr(@chars, level, level); - } -} diff --git a/c/unit_test/Makefile.am b/c/unit_test/Makefile.am deleted file mode 100644 index d529b321e..000000000 --- a/c/unit_test/Makefile.am +++ /dev/null @@ -1,70 +0,0 @@ - -TESTS= $(check_PROGRAMS) -check_PROGRAMS = test_mlrutil \ - test_mlrregex \ - test_argparse \ - test_byte_readers \ - test_line_readers \ - test_peek_file_reader \ - test_parse_trie \ - test_lrec \ - test_mlhmmv \ - test_multiple_containers \ - test_string_builder \ - test_rval_evaluators \ - test_join_bucket_keeper - -AM_CPPFLAGS= -I${srcdir}/.. -AM_CFLAGS= -Wall -std=gnu99 - -all_ldadd= \ - ../lib/libmlr.la \ - ../containers/libcontainers.la \ - ../parsing/libdsl.la \ - ../cli/libcli.la \ - ../input/libinput.la \ - ../dsl/libdsl.la \ - ../mapping/libmapping.la \ - ../output/liboutput.la \ - ../stream/libstream.la \ - -lm - -# Unit-test mains -test_mlrutil_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_mlrutil_LDADD= ${all_ldadd} - -test_mlrregex_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_mlrregex_LDADD= ${all_ldadd} - -test_argparse_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_argparse_LDADD= ${all_ldadd} - -test_byte_readers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_byte_readers_LDADD= ${all_ldadd} - -test_line_readers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_line_readers_LDADD= ${all_ldadd} - -test_peek_file_reader_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_peek_file_reader_LDADD= ${all_ldadd} - -test_parse_trie_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_parse_trie_LDADD= ${all_ldadd} - -test_lrec_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_lrec_LDADD= ${all_ldadd} - -test_mlhmmv_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_mlhmmv_LDADD= ${all_ldadd} - -test_multiple_containers_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_multiple_containers_LDADD= ${all_ldadd} - -test_string_builder_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_string_builder_LDADD= ${all_ldadd} - -test_rval_evaluators_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_rval_evaluators_LDADD= ${all_ldadd} - -test_join_bucket_keeper_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -test_join_bucket_keeper_LDADD= ${all_ldadd} diff --git a/c/unit_test/Makefile.in b/c/unit_test/Makefile.in deleted file mode 100644 index 241d430df..000000000 --- a/c/unit_test/Makefile.in +++ /dev/null @@ -1,1435 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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_mlrutil$(EXEEXT) test_mlrregex$(EXEEXT) \ - test_argparse$(EXEEXT) test_byte_readers$(EXEEXT) \ - test_line_readers$(EXEEXT) test_peek_file_reader$(EXEEXT) \ - test_parse_trie$(EXEEXT) test_lrec$(EXEEXT) \ - test_mlhmmv$(EXEEXT) test_multiple_containers$(EXEEXT) \ - test_string_builder$(EXEEXT) test_rval_evaluators$(EXEEXT) \ - test_join_bucket_keeper$(EXEEXT) -subdir = c/unit_test -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -test_argparse_SOURCES = test_argparse.c -test_argparse_OBJECTS = test_argparse-test_argparse.$(OBJEXT) -am__DEPENDENCIES_1 = ../lib/libmlr.la ../containers/libcontainers.la \ - ../parsing/libdsl.la ../cli/libcli.la ../input/libinput.la \ - ../dsl/libdsl.la ../mapping/libmapping.la \ - ../output/liboutput.la ../stream/libstream.la -test_argparse_DEPENDENCIES = $(am__DEPENDENCIES_1) -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 = -test_argparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_argparse_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -test_byte_readers_SOURCES = test_byte_readers.c -test_byte_readers_OBJECTS = \ - test_byte_readers-test_byte_readers.$(OBJEXT) -test_byte_readers_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_byte_readers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_byte_readers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -test_join_bucket_keeper_SOURCES = test_join_bucket_keeper.c -test_join_bucket_keeper_OBJECTS = \ - test_join_bucket_keeper-test_join_bucket_keeper.$(OBJEXT) -test_join_bucket_keeper_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_join_bucket_keeper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -test_line_readers_SOURCES = test_line_readers.c -test_line_readers_OBJECTS = \ - test_line_readers-test_line_readers.$(OBJEXT) -test_line_readers_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_line_readers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_line_readers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -test_lrec_SOURCES = test_lrec.c -test_lrec_OBJECTS = test_lrec-test_lrec.$(OBJEXT) -test_lrec_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_lrec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_lrec_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -test_mlhmmv_SOURCES = test_mlhmmv.c -test_mlhmmv_OBJECTS = test_mlhmmv-test_mlhmmv.$(OBJEXT) -test_mlhmmv_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_mlhmmv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlhmmv_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -test_mlrregex_SOURCES = test_mlrregex.c -test_mlrregex_OBJECTS = test_mlrregex-test_mlrregex.$(OBJEXT) -test_mlrregex_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_mlrregex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlrregex_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -test_mlrutil_SOURCES = test_mlrutil.c -test_mlrutil_OBJECTS = test_mlrutil-test_mlrutil.$(OBJEXT) -test_mlrutil_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_mlrutil_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_mlrutil_CFLAGS) \ - $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -test_multiple_containers_SOURCES = test_multiple_containers.c -test_multiple_containers_OBJECTS = \ - test_multiple_containers-test_multiple_containers.$(OBJEXT) -test_multiple_containers_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_multiple_containers_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_multiple_containers_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -test_parse_trie_SOURCES = test_parse_trie.c -test_parse_trie_OBJECTS = test_parse_trie-test_parse_trie.$(OBJEXT) -test_parse_trie_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_parse_trie_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_parse_trie_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -test_peek_file_reader_SOURCES = test_peek_file_reader.c -test_peek_file_reader_OBJECTS = \ - test_peek_file_reader-test_peek_file_reader.$(OBJEXT) -test_peek_file_reader_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_peek_file_reader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_peek_file_reader_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -test_rval_evaluators_SOURCES = test_rval_evaluators.c -test_rval_evaluators_OBJECTS = \ - test_rval_evaluators-test_rval_evaluators.$(OBJEXT) -test_rval_evaluators_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_rval_evaluators_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_rval_evaluators_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -test_string_builder_SOURCES = test_string_builder.c -test_string_builder_OBJECTS = \ - test_string_builder-test_string_builder.$(OBJEXT) -test_string_builder_DEPENDENCIES = $(am__DEPENDENCIES_1) -test_string_builder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ - $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ - $(test_string_builder_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)/autotools/depcomp -am__depfiles_maybe = depfiles -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_argparse.c test_byte_readers.c \ - test_join_bucket_keeper.c test_line_readers.c test_lrec.c \ - test_mlhmmv.c test_mlrregex.c test_mlrutil.c \ - test_multiple_containers.c test_parse_trie.c \ - test_peek_file_reader.c test_rval_evaluators.c \ - test_string_builder.c -DIST_SOURCES = test_argparse.c test_byte_readers.c \ - test_join_bucket_keeper.c test_line_readers.c test_lrec.c \ - test_mlhmmv.c test_mlrregex.c test_mlrutil.c \ - test_multiple_containers.c test_parse_trie.c \ - test_peek_file_reader.c test_rval_evaluators.c \ - test_string_builder.c -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__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__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__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` -RECHECK_LOGS = $(TEST_LOGS) -AM_RECURSIVE_TARGETS = check recheck -TEST_SUITE_LOG = test-suite.log -TEST_EXTENSIONS = @EXEEXT@ .test -LOG_DRIVER = $(SHELL) $(top_srcdir)/autotools/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)/autotools/test-driver -TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ - $(TEST_LOG_FLAGS) -am__DIST_COMMON = $(srcdir)/Makefile.in \ - $(top_srcdir)/autotools/depcomp \ - $(top_srcdir)/autotools/test-driver -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -TESTS = $(check_PROGRAMS) -AM_CPPFLAGS = -I${srcdir}/.. -AM_CFLAGS = -Wall -std=gnu99 -all_ldadd = \ - ../lib/libmlr.la \ - ../containers/libcontainers.la \ - ../parsing/libdsl.la \ - ../cli/libcli.la \ - ../input/libinput.la \ - ../dsl/libdsl.la \ - ../mapping/libmapping.la \ - ../output/liboutput.la \ - ../stream/libstream.la \ - -lm - - -# Unit-test mains -test_mlrutil_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_mlrutil_LDADD = ${all_ldadd} -test_mlrregex_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_mlrregex_LDADD = ${all_ldadd} -test_argparse_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_argparse_LDADD = ${all_ldadd} -test_byte_readers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_byte_readers_LDADD = ${all_ldadd} -test_line_readers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_line_readers_LDADD = ${all_ldadd} -test_peek_file_reader_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_peek_file_reader_LDADD = ${all_ldadd} -test_parse_trie_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_parse_trie_LDADD = ${all_ldadd} -test_lrec_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_lrec_LDADD = ${all_ldadd} -test_mlhmmv_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_mlhmmv_LDADD = ${all_ldadd} -test_multiple_containers_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_multiple_containers_LDADD = ${all_ldadd} -test_string_builder_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_string_builder_LDADD = ${all_ldadd} -test_rval_evaluators_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_rval_evaluators_LDADD = ${all_ldadd} -test_join_bucket_keeper_CFLAGS = -std=gnu99 -g ${AM_CFLAGS} -test_join_bucket_keeper_LDADD = ${all_ldadd} -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs -$(srcdir)/Makefile.in: $(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 c/unit_test/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu c/unit_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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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_argparse$(EXEEXT): $(test_argparse_OBJECTS) $(test_argparse_DEPENDENCIES) $(EXTRA_test_argparse_DEPENDENCIES) - @rm -f test_argparse$(EXEEXT) - $(AM_V_CCLD)$(test_argparse_LINK) $(test_argparse_OBJECTS) $(test_argparse_LDADD) $(LIBS) - -test_byte_readers$(EXEEXT): $(test_byte_readers_OBJECTS) $(test_byte_readers_DEPENDENCIES) $(EXTRA_test_byte_readers_DEPENDENCIES) - @rm -f test_byte_readers$(EXEEXT) - $(AM_V_CCLD)$(test_byte_readers_LINK) $(test_byte_readers_OBJECTS) $(test_byte_readers_LDADD) $(LIBS) - -test_join_bucket_keeper$(EXEEXT): $(test_join_bucket_keeper_OBJECTS) $(test_join_bucket_keeper_DEPENDENCIES) $(EXTRA_test_join_bucket_keeper_DEPENDENCIES) - @rm -f test_join_bucket_keeper$(EXEEXT) - $(AM_V_CCLD)$(test_join_bucket_keeper_LINK) $(test_join_bucket_keeper_OBJECTS) $(test_join_bucket_keeper_LDADD) $(LIBS) - -test_line_readers$(EXEEXT): $(test_line_readers_OBJECTS) $(test_line_readers_DEPENDENCIES) $(EXTRA_test_line_readers_DEPENDENCIES) - @rm -f test_line_readers$(EXEEXT) - $(AM_V_CCLD)$(test_line_readers_LINK) $(test_line_readers_OBJECTS) $(test_line_readers_LDADD) $(LIBS) - -test_lrec$(EXEEXT): $(test_lrec_OBJECTS) $(test_lrec_DEPENDENCIES) $(EXTRA_test_lrec_DEPENDENCIES) - @rm -f test_lrec$(EXEEXT) - $(AM_V_CCLD)$(test_lrec_LINK) $(test_lrec_OBJECTS) $(test_lrec_LDADD) $(LIBS) - -test_mlhmmv$(EXEEXT): $(test_mlhmmv_OBJECTS) $(test_mlhmmv_DEPENDENCIES) $(EXTRA_test_mlhmmv_DEPENDENCIES) - @rm -f test_mlhmmv$(EXEEXT) - $(AM_V_CCLD)$(test_mlhmmv_LINK) $(test_mlhmmv_OBJECTS) $(test_mlhmmv_LDADD) $(LIBS) - -test_mlrregex$(EXEEXT): $(test_mlrregex_OBJECTS) $(test_mlrregex_DEPENDENCIES) $(EXTRA_test_mlrregex_DEPENDENCIES) - @rm -f test_mlrregex$(EXEEXT) - $(AM_V_CCLD)$(test_mlrregex_LINK) $(test_mlrregex_OBJECTS) $(test_mlrregex_LDADD) $(LIBS) - -test_mlrutil$(EXEEXT): $(test_mlrutil_OBJECTS) $(test_mlrutil_DEPENDENCIES) $(EXTRA_test_mlrutil_DEPENDENCIES) - @rm -f test_mlrutil$(EXEEXT) - $(AM_V_CCLD)$(test_mlrutil_LINK) $(test_mlrutil_OBJECTS) $(test_mlrutil_LDADD) $(LIBS) - -test_multiple_containers$(EXEEXT): $(test_multiple_containers_OBJECTS) $(test_multiple_containers_DEPENDENCIES) $(EXTRA_test_multiple_containers_DEPENDENCIES) - @rm -f test_multiple_containers$(EXEEXT) - $(AM_V_CCLD)$(test_multiple_containers_LINK) $(test_multiple_containers_OBJECTS) $(test_multiple_containers_LDADD) $(LIBS) - -test_parse_trie$(EXEEXT): $(test_parse_trie_OBJECTS) $(test_parse_trie_DEPENDENCIES) $(EXTRA_test_parse_trie_DEPENDENCIES) - @rm -f test_parse_trie$(EXEEXT) - $(AM_V_CCLD)$(test_parse_trie_LINK) $(test_parse_trie_OBJECTS) $(test_parse_trie_LDADD) $(LIBS) - -test_peek_file_reader$(EXEEXT): $(test_peek_file_reader_OBJECTS) $(test_peek_file_reader_DEPENDENCIES) $(EXTRA_test_peek_file_reader_DEPENDENCIES) - @rm -f test_peek_file_reader$(EXEEXT) - $(AM_V_CCLD)$(test_peek_file_reader_LINK) $(test_peek_file_reader_OBJECTS) $(test_peek_file_reader_LDADD) $(LIBS) - -test_rval_evaluators$(EXEEXT): $(test_rval_evaluators_OBJECTS) $(test_rval_evaluators_DEPENDENCIES) $(EXTRA_test_rval_evaluators_DEPENDENCIES) - @rm -f test_rval_evaluators$(EXEEXT) - $(AM_V_CCLD)$(test_rval_evaluators_LINK) $(test_rval_evaluators_OBJECTS) $(test_rval_evaluators_LDADD) $(LIBS) - -test_string_builder$(EXEEXT): $(test_string_builder_OBJECTS) $(test_string_builder_DEPENDENCIES) $(EXTRA_test_string_builder_DEPENDENCIES) - @rm -f test_string_builder$(EXEEXT) - $(AM_V_CCLD)$(test_string_builder_LINK) $(test_string_builder_OBJECTS) $(test_string_builder_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_argparse-test_argparse.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_byte_readers-test_byte_readers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_line_readers-test_line_readers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lrec-test_lrec.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlhmmv-test_mlhmmv.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlrregex-test_mlrregex.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mlrutil-test_mlrutil.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_multiple_containers-test_multiple_containers.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_parse_trie-test_parse_trie.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_string_builder-test_string_builder.Po@am__quote@ - -.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_argparse-test_argparse.o: test_argparse.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -MT test_argparse-test_argparse.o -MD -MP -MF $(DEPDIR)/test_argparse-test_argparse.Tpo -c -o test_argparse-test_argparse.o `test -f 'test_argparse.c' || echo '$(srcdir)/'`test_argparse.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_argparse-test_argparse.Tpo $(DEPDIR)/test_argparse-test_argparse.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_argparse.c' object='test_argparse-test_argparse.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_argparse_CFLAGS) $(CFLAGS) -c -o test_argparse-test_argparse.o `test -f 'test_argparse.c' || echo '$(srcdir)/'`test_argparse.c - -test_argparse-test_argparse.obj: test_argparse.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_argparse_CFLAGS) $(CFLAGS) -MT test_argparse-test_argparse.obj -MD -MP -MF $(DEPDIR)/test_argparse-test_argparse.Tpo -c -o test_argparse-test_argparse.obj `if test -f 'test_argparse.c'; then $(CYGPATH_W) 'test_argparse.c'; else $(CYGPATH_W) '$(srcdir)/test_argparse.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_argparse-test_argparse.Tpo $(DEPDIR)/test_argparse-test_argparse.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_argparse.c' object='test_argparse-test_argparse.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_argparse_CFLAGS) $(CFLAGS) -c -o test_argparse-test_argparse.obj `if test -f 'test_argparse.c'; then $(CYGPATH_W) 'test_argparse.c'; else $(CYGPATH_W) '$(srcdir)/test_argparse.c'; fi` - -test_byte_readers-test_byte_readers.o: test_byte_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -MT test_byte_readers-test_byte_readers.o -MD -MP -MF $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo -c -o test_byte_readers-test_byte_readers.o `test -f 'test_byte_readers.c' || echo '$(srcdir)/'`test_byte_readers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo $(DEPDIR)/test_byte_readers-test_byte_readers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_byte_readers.c' object='test_byte_readers-test_byte_readers.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_byte_readers_CFLAGS) $(CFLAGS) -c -o test_byte_readers-test_byte_readers.o `test -f 'test_byte_readers.c' || echo '$(srcdir)/'`test_byte_readers.c - -test_byte_readers-test_byte_readers.obj: test_byte_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_byte_readers_CFLAGS) $(CFLAGS) -MT test_byte_readers-test_byte_readers.obj -MD -MP -MF $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo -c -o test_byte_readers-test_byte_readers.obj `if test -f 'test_byte_readers.c'; then $(CYGPATH_W) 'test_byte_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_byte_readers.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_byte_readers-test_byte_readers.Tpo $(DEPDIR)/test_byte_readers-test_byte_readers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_byte_readers.c' object='test_byte_readers-test_byte_readers.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_byte_readers_CFLAGS) $(CFLAGS) -c -o test_byte_readers-test_byte_readers.obj `if test -f 'test_byte_readers.c'; then $(CYGPATH_W) 'test_byte_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_byte_readers.c'; fi` - -test_join_bucket_keeper-test_join_bucket_keeper.o: test_join_bucket_keeper.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -MT test_join_bucket_keeper-test_join_bucket_keeper.o -MD -MP -MF $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo -c -o test_join_bucket_keeper-test_join_bucket_keeper.o `test -f 'test_join_bucket_keeper.c' || echo '$(srcdir)/'`test_join_bucket_keeper.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_join_bucket_keeper.c' object='test_join_bucket_keeper-test_join_bucket_keeper.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_join_bucket_keeper_CFLAGS) $(CFLAGS) -c -o test_join_bucket_keeper-test_join_bucket_keeper.o `test -f 'test_join_bucket_keeper.c' || echo '$(srcdir)/'`test_join_bucket_keeper.c - -test_join_bucket_keeper-test_join_bucket_keeper.obj: test_join_bucket_keeper.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_join_bucket_keeper_CFLAGS) $(CFLAGS) -MT test_join_bucket_keeper-test_join_bucket_keeper.obj -MD -MP -MF $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo -c -o test_join_bucket_keeper-test_join_bucket_keeper.obj `if test -f 'test_join_bucket_keeper.c'; then $(CYGPATH_W) 'test_join_bucket_keeper.c'; else $(CYGPATH_W) '$(srcdir)/test_join_bucket_keeper.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Tpo $(DEPDIR)/test_join_bucket_keeper-test_join_bucket_keeper.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_join_bucket_keeper.c' object='test_join_bucket_keeper-test_join_bucket_keeper.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_join_bucket_keeper_CFLAGS) $(CFLAGS) -c -o test_join_bucket_keeper-test_join_bucket_keeper.obj `if test -f 'test_join_bucket_keeper.c'; then $(CYGPATH_W) 'test_join_bucket_keeper.c'; else $(CYGPATH_W) '$(srcdir)/test_join_bucket_keeper.c'; fi` - -test_line_readers-test_line_readers.o: test_line_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -MT test_line_readers-test_line_readers.o -MD -MP -MF $(DEPDIR)/test_line_readers-test_line_readers.Tpo -c -o test_line_readers-test_line_readers.o `test -f 'test_line_readers.c' || echo '$(srcdir)/'`test_line_readers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_line_readers-test_line_readers.Tpo $(DEPDIR)/test_line_readers-test_line_readers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_line_readers.c' object='test_line_readers-test_line_readers.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_line_readers_CFLAGS) $(CFLAGS) -c -o test_line_readers-test_line_readers.o `test -f 'test_line_readers.c' || echo '$(srcdir)/'`test_line_readers.c - -test_line_readers-test_line_readers.obj: test_line_readers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_line_readers_CFLAGS) $(CFLAGS) -MT test_line_readers-test_line_readers.obj -MD -MP -MF $(DEPDIR)/test_line_readers-test_line_readers.Tpo -c -o test_line_readers-test_line_readers.obj `if test -f 'test_line_readers.c'; then $(CYGPATH_W) 'test_line_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_line_readers.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_line_readers-test_line_readers.Tpo $(DEPDIR)/test_line_readers-test_line_readers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_line_readers.c' object='test_line_readers-test_line_readers.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_line_readers_CFLAGS) $(CFLAGS) -c -o test_line_readers-test_line_readers.obj `if test -f 'test_line_readers.c'; then $(CYGPATH_W) 'test_line_readers.c'; else $(CYGPATH_W) '$(srcdir)/test_line_readers.c'; fi` - -test_lrec-test_lrec.o: test_lrec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -MT test_lrec-test_lrec.o -MD -MP -MF $(DEPDIR)/test_lrec-test_lrec.Tpo -c -o test_lrec-test_lrec.o `test -f 'test_lrec.c' || echo '$(srcdir)/'`test_lrec.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lrec-test_lrec.Tpo $(DEPDIR)/test_lrec-test_lrec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_lrec.c' object='test_lrec-test_lrec.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_lrec_CFLAGS) $(CFLAGS) -c -o test_lrec-test_lrec.o `test -f 'test_lrec.c' || echo '$(srcdir)/'`test_lrec.c - -test_lrec-test_lrec.obj: test_lrec.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lrec_CFLAGS) $(CFLAGS) -MT test_lrec-test_lrec.obj -MD -MP -MF $(DEPDIR)/test_lrec-test_lrec.Tpo -c -o test_lrec-test_lrec.obj `if test -f 'test_lrec.c'; then $(CYGPATH_W) 'test_lrec.c'; else $(CYGPATH_W) '$(srcdir)/test_lrec.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lrec-test_lrec.Tpo $(DEPDIR)/test_lrec-test_lrec.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_lrec.c' object='test_lrec-test_lrec.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_lrec_CFLAGS) $(CFLAGS) -c -o test_lrec-test_lrec.obj `if test -f 'test_lrec.c'; then $(CYGPATH_W) 'test_lrec.c'; else $(CYGPATH_W) '$(srcdir)/test_lrec.c'; fi` - -test_mlhmmv-test_mlhmmv.o: test_mlhmmv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -MT test_mlhmmv-test_mlhmmv.o -MD -MP -MF $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo -c -o test_mlhmmv-test_mlhmmv.o `test -f 'test_mlhmmv.c' || echo '$(srcdir)/'`test_mlhmmv.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo $(DEPDIR)/test_mlhmmv-test_mlhmmv.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlhmmv.c' object='test_mlhmmv-test_mlhmmv.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_mlhmmv_CFLAGS) $(CFLAGS) -c -o test_mlhmmv-test_mlhmmv.o `test -f 'test_mlhmmv.c' || echo '$(srcdir)/'`test_mlhmmv.c - -test_mlhmmv-test_mlhmmv.obj: test_mlhmmv.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlhmmv_CFLAGS) $(CFLAGS) -MT test_mlhmmv-test_mlhmmv.obj -MD -MP -MF $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo -c -o test_mlhmmv-test_mlhmmv.obj `if test -f 'test_mlhmmv.c'; then $(CYGPATH_W) 'test_mlhmmv.c'; else $(CYGPATH_W) '$(srcdir)/test_mlhmmv.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlhmmv-test_mlhmmv.Tpo $(DEPDIR)/test_mlhmmv-test_mlhmmv.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlhmmv.c' object='test_mlhmmv-test_mlhmmv.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_mlhmmv_CFLAGS) $(CFLAGS) -c -o test_mlhmmv-test_mlhmmv.obj `if test -f 'test_mlhmmv.c'; then $(CYGPATH_W) 'test_mlhmmv.c'; else $(CYGPATH_W) '$(srcdir)/test_mlhmmv.c'; fi` - -test_mlrregex-test_mlrregex.o: test_mlrregex.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -MT test_mlrregex-test_mlrregex.o -MD -MP -MF $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo -c -o test_mlrregex-test_mlrregex.o `test -f 'test_mlrregex.c' || echo '$(srcdir)/'`test_mlrregex.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo $(DEPDIR)/test_mlrregex-test_mlrregex.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrregex.c' object='test_mlrregex-test_mlrregex.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_mlrregex_CFLAGS) $(CFLAGS) -c -o test_mlrregex-test_mlrregex.o `test -f 'test_mlrregex.c' || echo '$(srcdir)/'`test_mlrregex.c - -test_mlrregex-test_mlrregex.obj: test_mlrregex.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrregex_CFLAGS) $(CFLAGS) -MT test_mlrregex-test_mlrregex.obj -MD -MP -MF $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo -c -o test_mlrregex-test_mlrregex.obj `if test -f 'test_mlrregex.c'; then $(CYGPATH_W) 'test_mlrregex.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrregex.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrregex-test_mlrregex.Tpo $(DEPDIR)/test_mlrregex-test_mlrregex.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrregex.c' object='test_mlrregex-test_mlrregex.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_mlrregex_CFLAGS) $(CFLAGS) -c -o test_mlrregex-test_mlrregex.obj `if test -f 'test_mlrregex.c'; then $(CYGPATH_W) 'test_mlrregex.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrregex.c'; fi` - -test_mlrutil-test_mlrutil.o: test_mlrutil.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -MT test_mlrutil-test_mlrutil.o -MD -MP -MF $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo -c -o test_mlrutil-test_mlrutil.o `test -f 'test_mlrutil.c' || echo '$(srcdir)/'`test_mlrutil.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo $(DEPDIR)/test_mlrutil-test_mlrutil.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrutil.c' object='test_mlrutil-test_mlrutil.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_mlrutil_CFLAGS) $(CFLAGS) -c -o test_mlrutil-test_mlrutil.o `test -f 'test_mlrutil.c' || echo '$(srcdir)/'`test_mlrutil.c - -test_mlrutil-test_mlrutil.obj: test_mlrutil.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_mlrutil_CFLAGS) $(CFLAGS) -MT test_mlrutil-test_mlrutil.obj -MD -MP -MF $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo -c -o test_mlrutil-test_mlrutil.obj `if test -f 'test_mlrutil.c'; then $(CYGPATH_W) 'test_mlrutil.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrutil.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_mlrutil-test_mlrutil.Tpo $(DEPDIR)/test_mlrutil-test_mlrutil.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_mlrutil.c' object='test_mlrutil-test_mlrutil.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_mlrutil_CFLAGS) $(CFLAGS) -c -o test_mlrutil-test_mlrutil.obj `if test -f 'test_mlrutil.c'; then $(CYGPATH_W) 'test_mlrutil.c'; else $(CYGPATH_W) '$(srcdir)/test_mlrutil.c'; fi` - -test_multiple_containers-test_multiple_containers.o: test_multiple_containers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -MT test_multiple_containers-test_multiple_containers.o -MD -MP -MF $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo -c -o test_multiple_containers-test_multiple_containers.o `test -f 'test_multiple_containers.c' || echo '$(srcdir)/'`test_multiple_containers.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo $(DEPDIR)/test_multiple_containers-test_multiple_containers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_multiple_containers.c' object='test_multiple_containers-test_multiple_containers.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_multiple_containers_CFLAGS) $(CFLAGS) -c -o test_multiple_containers-test_multiple_containers.o `test -f 'test_multiple_containers.c' || echo '$(srcdir)/'`test_multiple_containers.c - -test_multiple_containers-test_multiple_containers.obj: test_multiple_containers.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_multiple_containers_CFLAGS) $(CFLAGS) -MT test_multiple_containers-test_multiple_containers.obj -MD -MP -MF $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo -c -o test_multiple_containers-test_multiple_containers.obj `if test -f 'test_multiple_containers.c'; then $(CYGPATH_W) 'test_multiple_containers.c'; else $(CYGPATH_W) '$(srcdir)/test_multiple_containers.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_multiple_containers-test_multiple_containers.Tpo $(DEPDIR)/test_multiple_containers-test_multiple_containers.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_multiple_containers.c' object='test_multiple_containers-test_multiple_containers.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_multiple_containers_CFLAGS) $(CFLAGS) -c -o test_multiple_containers-test_multiple_containers.obj `if test -f 'test_multiple_containers.c'; then $(CYGPATH_W) 'test_multiple_containers.c'; else $(CYGPATH_W) '$(srcdir)/test_multiple_containers.c'; fi` - -test_parse_trie-test_parse_trie.o: test_parse_trie.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -MT test_parse_trie-test_parse_trie.o -MD -MP -MF $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo -c -o test_parse_trie-test_parse_trie.o `test -f 'test_parse_trie.c' || echo '$(srcdir)/'`test_parse_trie.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo $(DEPDIR)/test_parse_trie-test_parse_trie.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_parse_trie.c' object='test_parse_trie-test_parse_trie.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_parse_trie_CFLAGS) $(CFLAGS) -c -o test_parse_trie-test_parse_trie.o `test -f 'test_parse_trie.c' || echo '$(srcdir)/'`test_parse_trie.c - -test_parse_trie-test_parse_trie.obj: test_parse_trie.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_parse_trie_CFLAGS) $(CFLAGS) -MT test_parse_trie-test_parse_trie.obj -MD -MP -MF $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo -c -o test_parse_trie-test_parse_trie.obj `if test -f 'test_parse_trie.c'; then $(CYGPATH_W) 'test_parse_trie.c'; else $(CYGPATH_W) '$(srcdir)/test_parse_trie.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_parse_trie-test_parse_trie.Tpo $(DEPDIR)/test_parse_trie-test_parse_trie.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_parse_trie.c' object='test_parse_trie-test_parse_trie.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_parse_trie_CFLAGS) $(CFLAGS) -c -o test_parse_trie-test_parse_trie.obj `if test -f 'test_parse_trie.c'; then $(CYGPATH_W) 'test_parse_trie.c'; else $(CYGPATH_W) '$(srcdir)/test_parse_trie.c'; fi` - -test_peek_file_reader-test_peek_file_reader.o: test_peek_file_reader.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -MT test_peek_file_reader-test_peek_file_reader.o -MD -MP -MF $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo -c -o test_peek_file_reader-test_peek_file_reader.o `test -f 'test_peek_file_reader.c' || echo '$(srcdir)/'`test_peek_file_reader.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_peek_file_reader.c' object='test_peek_file_reader-test_peek_file_reader.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_peek_file_reader_CFLAGS) $(CFLAGS) -c -o test_peek_file_reader-test_peek_file_reader.o `test -f 'test_peek_file_reader.c' || echo '$(srcdir)/'`test_peek_file_reader.c - -test_peek_file_reader-test_peek_file_reader.obj: test_peek_file_reader.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_peek_file_reader_CFLAGS) $(CFLAGS) -MT test_peek_file_reader-test_peek_file_reader.obj -MD -MP -MF $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo -c -o test_peek_file_reader-test_peek_file_reader.obj `if test -f 'test_peek_file_reader.c'; then $(CYGPATH_W) 'test_peek_file_reader.c'; else $(CYGPATH_W) '$(srcdir)/test_peek_file_reader.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Tpo $(DEPDIR)/test_peek_file_reader-test_peek_file_reader.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_peek_file_reader.c' object='test_peek_file_reader-test_peek_file_reader.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_peek_file_reader_CFLAGS) $(CFLAGS) -c -o test_peek_file_reader-test_peek_file_reader.obj `if test -f 'test_peek_file_reader.c'; then $(CYGPATH_W) 'test_peek_file_reader.c'; else $(CYGPATH_W) '$(srcdir)/test_peek_file_reader.c'; fi` - -test_rval_evaluators-test_rval_evaluators.o: test_rval_evaluators.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -MT test_rval_evaluators-test_rval_evaluators.o -MD -MP -MF $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo -c -o test_rval_evaluators-test_rval_evaluators.o `test -f 'test_rval_evaluators.c' || echo '$(srcdir)/'`test_rval_evaluators.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_rval_evaluators.c' object='test_rval_evaluators-test_rval_evaluators.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_rval_evaluators_CFLAGS) $(CFLAGS) -c -o test_rval_evaluators-test_rval_evaluators.o `test -f 'test_rval_evaluators.c' || echo '$(srcdir)/'`test_rval_evaluators.c - -test_rval_evaluators-test_rval_evaluators.obj: test_rval_evaluators.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rval_evaluators_CFLAGS) $(CFLAGS) -MT test_rval_evaluators-test_rval_evaluators.obj -MD -MP -MF $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo -c -o test_rval_evaluators-test_rval_evaluators.obj `if test -f 'test_rval_evaluators.c'; then $(CYGPATH_W) 'test_rval_evaluators.c'; else $(CYGPATH_W) '$(srcdir)/test_rval_evaluators.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Tpo $(DEPDIR)/test_rval_evaluators-test_rval_evaluators.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_rval_evaluators.c' object='test_rval_evaluators-test_rval_evaluators.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_rval_evaluators_CFLAGS) $(CFLAGS) -c -o test_rval_evaluators-test_rval_evaluators.obj `if test -f 'test_rval_evaluators.c'; then $(CYGPATH_W) 'test_rval_evaluators.c'; else $(CYGPATH_W) '$(srcdir)/test_rval_evaluators.c'; fi` - -test_string_builder-test_string_builder.o: test_string_builder.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -MT test_string_builder-test_string_builder.o -MD -MP -MF $(DEPDIR)/test_string_builder-test_string_builder.Tpo -c -o test_string_builder-test_string_builder.o `test -f 'test_string_builder.c' || echo '$(srcdir)/'`test_string_builder.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_string_builder-test_string_builder.Tpo $(DEPDIR)/test_string_builder-test_string_builder.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_string_builder.c' object='test_string_builder-test_string_builder.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_string_builder_CFLAGS) $(CFLAGS) -c -o test_string_builder-test_string_builder.o `test -f 'test_string_builder.c' || echo '$(srcdir)/'`test_string_builder.c - -test_string_builder-test_string_builder.obj: test_string_builder.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_string_builder_CFLAGS) $(CFLAGS) -MT test_string_builder-test_string_builder.obj -MD -MP -MF $(DEPDIR)/test_string_builder-test_string_builder.Tpo -c -o test_string_builder-test_string_builder.obj `if test -f 'test_string_builder.c'; then $(CYGPATH_W) 'test_string_builder.c'; else $(CYGPATH_W) '$(srcdir)/test_string_builder.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_string_builder-test_string_builder.Tpo $(DEPDIR)/test_string_builder-test_string_builder.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_string_builder.c' object='test_string_builder-test_string_builder.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_string_builder_CFLAGS) $(CFLAGS) -c -o test_string_builder-test_string_builder.obj `if test -f 'test_string_builder.c'; then $(CYGPATH_W) 'test_string_builder.c'; else $(CYGPATH_W) '$(srcdir)/test_string_builder.c'; fi` - -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 - -# 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 for $(PACKAGE_STRING)$${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: - @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_mlrutil.log: test_mlrutil$(EXEEXT) - @p='test_mlrutil$(EXEEXT)'; \ - b='test_mlrutil'; \ - $(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_mlrregex.log: test_mlrregex$(EXEEXT) - @p='test_mlrregex$(EXEEXT)'; \ - b='test_mlrregex'; \ - $(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_argparse.log: test_argparse$(EXEEXT) - @p='test_argparse$(EXEEXT)'; \ - b='test_argparse'; \ - $(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_byte_readers.log: test_byte_readers$(EXEEXT) - @p='test_byte_readers$(EXEEXT)'; \ - b='test_byte_readers'; \ - $(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_line_readers.log: test_line_readers$(EXEEXT) - @p='test_line_readers$(EXEEXT)'; \ - b='test_line_readers'; \ - $(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_peek_file_reader.log: test_peek_file_reader$(EXEEXT) - @p='test_peek_file_reader$(EXEEXT)'; \ - b='test_peek_file_reader'; \ - $(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_parse_trie.log: test_parse_trie$(EXEEXT) - @p='test_parse_trie$(EXEEXT)'; \ - b='test_parse_trie'; \ - $(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_lrec.log: test_lrec$(EXEEXT) - @p='test_lrec$(EXEEXT)'; \ - b='test_lrec'; \ - $(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_mlhmmv.log: test_mlhmmv$(EXEEXT) - @p='test_mlhmmv$(EXEEXT)'; \ - b='test_mlhmmv'; \ - $(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_multiple_containers.log: test_multiple_containers$(EXEEXT) - @p='test_multiple_containers$(EXEEXT)'; \ - b='test_multiple_containers'; \ - $(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_string_builder.log: test_string_builder$(EXEEXT) - @p='test_string_builder$(EXEEXT)'; \ - b='test_string_builder'; \ - $(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_rval_evaluators.log: test_rval_evaluators$(EXEEXT) - @p='test_rval_evaluators$(EXEEXT)'; \ - b='test_rval_evaluators'; \ - $(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_join_bucket_keeper.log: test_join_bucket_keeper$(EXEEXT) - @p='test_join_bucket_keeper$(EXEEXT)'; \ - b='test_join_bucket_keeper'; \ - $(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: $(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 -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: - -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 -rf ./$(DEPDIR) - -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 -rf ./$(DEPDIR) - -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 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-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 - -.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: diff --git a/c/unit_test/test_argparse.c b/c/unit_test/test_argparse.c deleted file mode 100644 index c7752c64e..000000000 --- a/c/unit_test/test_argparse.c +++ /dev/null @@ -1,149 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "cli/argparse.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -// Assumes null-termination of input array -static int compute_argc(char** argv) { - int argc = 0; - while (*argv) { - argv++; - argc++; - } - return argc; -} - -static char * test1() { - int bflag1 = -4; - int bflag2 = -5; - int intv1 = -6; - int intv2 = -7; - int intv3 = -8; - double fltv = -9.5; - char* string = NULL; - slls_t* plist = NULL; - string_array_t* parray = NULL; - ap_state_t* pstate = ap_alloc(); - - ap_define_true_flag(pstate, "-t", &bflag1); - ap_define_false_flag(pstate, "-f", &bflag2); - ap_define_int_value_flag(pstate, "-100", 100, &intv1); - ap_define_int_value_flag(pstate, "-200", 200, &intv2); - ap_define_int_flag(pstate, "-i", &intv3); - ap_define_float_flag(pstate, "-d", &fltv); - ap_define_string_flag(pstate, "-s", &string); - ap_define_string_list_flag(pstate, "-S", &plist); - ap_define_string_array_flag(pstate, "-A", &parray); - - char* argv[] = { "test-verb", NULL }; - int argc = compute_argc(argv); - char* verb = argv[0]; - int argi = 1; - mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); - mu_assert_lf(bflag1 == -4); - mu_assert_lf(bflag2 == -5); - mu_assert_lf(intv1 == -6); - mu_assert_lf(intv2 == -7); - mu_assert_lf(intv3 == -8); - mu_assert_lf(fltv == -9.5); - mu_assert_lf(string == NULL); - mu_assert_lf(plist == NULL); - mu_assert_lf(parray == NULL); - mu_assert_lf(argi == 1); - - ap_free(pstate); - return 0; -} - -static char * test2() { - int bflag1 = -4; - int bflag2 = -5; - int intv1 = -6; - int intv2 = -7; - int intv3 = -8; - double fltv = -9.5; - char* string = NULL; - slls_t* plist = NULL; - string_array_t* parray = NULL; - ap_state_t* pstate = ap_alloc(); - - ap_define_true_flag(pstate, "-t", &bflag1); - ap_define_false_flag(pstate, "-f", &bflag2); - ap_define_int_value_flag(pstate, "-100", 100, &intv1); - ap_define_int_value_flag(pstate, "-200", 200, &intv2); - ap_define_int_flag(pstate, "-i", &intv3); - ap_define_float_flag(pstate, "-d", &fltv); - ap_define_string_flag(pstate, "-s", &string); - ap_define_string_list_flag(pstate, "-S", &plist); - ap_define_string_array_flag(pstate, "-A", &parray); - - char* argv[] = { - "test-verb", - "-t", - "-f", - "-100", - "-200", - "-i", "555", - "-d", "4.25", - "-s", "hello", - "-S", mlr_strdup_or_die("a,b,c,d,e"), - "-A", mlr_strdup_or_die("x,y,z"), - "do", "re", "mi", - NULL - }; - int argc = compute_argc(argv); - char* verb = argv[0]; - int argi = 1; - mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); - mu_assert_lf(bflag1 == TRUE); - mu_assert_lf(bflag2 == FALSE); - mu_assert_lf(intv1 == 100); - mu_assert_lf(intv2 == 200); - mu_assert_lf(intv3 == 555); - mu_assert_lf(fltv == 4.25); - mu_assert_lf(string != NULL); - mu_assert_lf(streq(string, "hello")); - mu_assert_lf(plist != NULL); - mu_assert_lf(slls_equals(plist, slls_from_line(mlr_strdup_or_die("a,b,c,d,e"), ',', FALSE))); - mu_assert_lf(parray != NULL); - mu_assert_lf(parray->length == 3); - mu_assert_lf(streq(parray->strings[0], "x")); - mu_assert_lf(streq(parray->strings[1], "y")); - mu_assert_lf(streq(parray->strings[2], "z")); - mu_assert_lf(argi == 15); - - ap_free(pstate); - return 0; -} - -// ================================================================ -static char * all_tests() { - mu_run_test(test1); - mu_run_test(test2); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_ARGPARSE ENTER\n"); - char *result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_ARGPARSE: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_byte_readers.c b/c/unit_test/test_byte_readers.c deleted file mode 100644 index 079ee72d3..000000000 --- a/c/unit_test/test_byte_readers.c +++ /dev/null @@ -1,143 +0,0 @@ -#include -#include -#include -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/minunit.h" -#include "lib/mlr_test_util.h" -#include "input/byte_readers.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char* test_string_byte_reader() { - byte_reader_t* pbr = string_byte_reader_alloc(); - - int ok = pbr->popen_func(pbr, NULL, ""); - mu_assert_lf(ok == TRUE); - // char defaults to unsigned on some platforms -- but, byte_reader_t API is - // in terms of ints. - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - pbr->pclose_func(pbr, NULL); - - ok = pbr->popen_func(pbr, NULL, "a"); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == 'a'); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - pbr->pclose_func(pbr, NULL); - - ok = pbr->popen_func(pbr, NULL, "abc"); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == 'a'); - mu_assert_lf(pbr->pread_func(pbr) == 'b'); - mu_assert_lf(pbr->pread_func(pbr) == 'c'); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - pbr->pclose_func(pbr, NULL); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_stdio_byte_reader_1() { - byte_reader_t* pbr = stdio_byte_reader_alloc(); - - char* contents = ""; - char* path = write_temp_file_or_die(contents); - int ok = pbr->popen_func(pbr, NULL, path); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - unlink_file_or_die(path); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_stdio_byte_reader_2() { - byte_reader_t* pbr = stdio_byte_reader_alloc(); - - char* contents = "abcdefg"; - char* path = write_temp_file_or_die(contents); - int ok = pbr->popen_func(pbr, NULL, path); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == 'a'); - mu_assert_lf(pbr->pread_func(pbr) == 'b'); - mu_assert_lf(pbr->pread_func(pbr) == 'c'); - mu_assert_lf(pbr->pread_func(pbr) == 'd'); - mu_assert_lf(pbr->pread_func(pbr) == 'e'); - mu_assert_lf(pbr->pread_func(pbr) == 'f'); - mu_assert_lf(pbr->pread_func(pbr) == 'g'); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - unlink_file_or_die(path); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_stdio_byte_reader_reuse() { - byte_reader_t* pbr = stdio_byte_reader_alloc(); - - char* contents = "abc"; - char* path = write_temp_file_or_die(contents); - int ok = pbr->popen_func(pbr, NULL, path); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == 'a'); - mu_assert_lf(pbr->pread_func(pbr) == 'b'); - mu_assert_lf(pbr->pread_func(pbr) == 'c'); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - unlink_file_or_die(path); - - contents = "defg"; - path = write_temp_file_or_die(contents); - ok = pbr->popen_func(pbr, NULL, path); - mu_assert_lf(ok == TRUE); - mu_assert_lf(pbr->pread_func(pbr) == 'd'); - mu_assert_lf(pbr->pread_func(pbr) == 'e'); - mu_assert_lf(pbr->pread_func(pbr) == 'f'); - mu_assert_lf(pbr->pread_func(pbr) == 'g'); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - mu_assert_lf(pbr->pread_func(pbr) == EOF); - unlink_file_or_die(path); - - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_string_byte_reader); - mu_run_test(test_stdio_byte_reader_1); - mu_run_test(test_stdio_byte_reader_2); - mu_run_test(test_stdio_byte_reader_reuse); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_BYTE_READERS ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_BYTE_READERS: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_join_bucket_keeper.c b/c/unit_test/test_join_bucket_keeper.c deleted file mode 100644 index bbd435c8a..000000000 --- a/c/unit_test/test_join_bucket_keeper.c +++ /dev/null @@ -1,575 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "input/lrec_readers.h" -#include "containers/join_bucket_keeper.h" -#include "containers/mixutil.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -static int tjbk_verbose = FALSE; - -// ---------------------------------------------------------------- -static sllv_t* make_records_empty() { - sllv_t* precords = sllv_alloc(); - return precords; -} - -// ---------------------------------------------------------------- -static sllv_t* make_records_113335() { - sllv_t* precords = sllv_alloc(); - sllv_append(precords, lrec_literal_2("l","1", "b","10")); - sllv_append(precords, lrec_literal_2("l","1", "b","11")); - sllv_append(precords, lrec_literal_2("l","3", "b","12")); - sllv_append(precords, lrec_literal_2("l","3", "b","13")); - sllv_append(precords, lrec_literal_2("l","3", "b","14")); - sllv_append(precords, lrec_literal_2("l","5", "b","15")); - return precords; -} - -// ---------------------------------------------------------------- -static sllv_t* make_records_het() { - sllv_t* precords = sllv_alloc(); - sllv_append(precords, lrec_literal_2("x","100", "b","10")); - sllv_append(precords, lrec_literal_2("l","1", "b","11")); - sllv_append(precords, lrec_literal_2("l","1", "b","12")); - sllv_append(precords, lrec_literal_2("x","200", "b","13")); - sllv_append(precords, lrec_literal_2("l","3", "b","14")); - sllv_append(precords, lrec_literal_2("l","3", "b","15")); - sllv_append(precords, lrec_literal_2("x","300", "b","16")); - sllv_append(precords, lrec_literal_2("l","5", "b","17")); - sllv_append(precords, lrec_literal_2("l","5", "b","18")); - - return precords; -} - -// ---------------------------------------------------------------- -static void set_up( - sllv_t* precords, - slls_t** ppleft_field_names, - lrec_reader_t** ppreader) -{ - slls_t* pleft_field_names = slls_alloc(); - slls_append_no_free(pleft_field_names, "l"); - - lrec_reader_t* preader = lrec_reader_in_memory_alloc(precords); - printf("left records:\n"); - lrec_print_list_with_prefix(precords, " "); - printf("\n"); - - *ppleft_field_names = pleft_field_names; - *ppreader = preader; -} - -static void emit(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, - sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired) -{ - if (tjbk_verbose) { - printf("BEFORE EMIT\n"); - join_bucket_keeper_print(pkeeper); - printf("\n"); - } - - join_bucket_keeper_emit(pkeeper, pright_field_values, pprecords_paired, pprecords_left_unpaired); - - if (tjbk_verbose) { - printf("AFTER EMIT\n"); - join_bucket_keeper_print(pkeeper); - printf("\n"); - } -} - -static int list_is_null(sllv_t* plist, char* desc, char* rval) { - if (plist == NULL) { - printf("%-8s is null with rval=\"%s\"; ok\n", desc, rval); - return TRUE; - } else { - printf("%-8s should be null with rval=\"%s\" and is not (length=%llu):\n", - desc, rval, plist->length); - lrec_print_list_with_prefix(plist, " "); - return FALSE; - } -} - -static int list_has_length(sllv_t* plist, unsigned long long length, char* desc, char* rval) { - if (plist == NULL) { - printf("%-8s is null with rval=\"%s\" and should not be\n", desc, rval); - return FALSE; - } - - if (plist->length == length) { - printf("%-8s length=%llu with rval=\"%s\"; ok:\n", desc, length, rval); - lrec_print_list_with_prefix(plist, " "); - return TRUE; - } else { - printf("%-8s length=%llu with rval=\"%s\" but should be %llu:\n", desc, plist->length, rval, length); - lrec_print_list_with_prefix(plist, " "); - return FALSE; - } -} - -// ---------------------------------------------------------------- -static char* test_left_empty_right_empty() { - printf("----------------------------------------------------------------\n"); - printf("test_left_empty_right_empty enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_empty(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); - printf("\n"); - - printf("test_left_empty_right_empty exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_left_empty() { - printf("----------------------------------------------------------------\n"); - printf("test_left_empty enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_empty(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); - printf("\n"); - - printf("test_left_empty exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_right_empty() { - printf("----------------------------------------------------------------\n"); - printf("test_right_empty enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", "(eof)")); - printf("\n"); - - printf("test_right_empty exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_unpaired_before_left_start() { - printf("----------------------------------------------------------------\n"); - printf("test_unpaired_before_left_start enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", "(eof)")); - printf("\n"); - - printf("test_unpaired_before_left_start exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_unpaired_after_left_end() { - printf("----------------------------------------------------------------\n"); - printf("test_unpaired_after_left_end enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("6"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 6, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); - printf("\n"); - - printf("test_unpaired_after_left_end exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_middle_pairings() { - printf("----------------------------------------------------------------\n"); - printf("test_middle_pairings enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("1"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("1"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 4, "unpaired", "(eof)")); - printf("\n"); - - printf("test_middle_pairings exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_middle() { - printf("----------------------------------------------------------------\n"); - printf("test_middle enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("2"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("2"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("3"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 1, "unpaired", "(eof)")); - printf("\n"); - - printf("test_middle exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_walk_through_all() { - printf("----------------------------------------------------------------\n"); - printf("test_walk_through_all enter\n"); - - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_113335(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("1"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("1"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("2"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("2"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("3"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("3"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 3, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("4"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("4"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("5"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 1, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("5"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 1, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("6"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - pright_field_values = slls_single_no_free("6"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_is_null(precords_left_unpaired, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - printf("test_walk_through_all exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_het_unpaired_before_left_start() { - printf("----------------------------------------------------------------\n"); - printf("test_het_unpaired_before_left_start enter\n"); - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_het(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("0"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 7, "unpaired", "(eof)")); - printf("\n"); - printf("test_het_unpaired_before_left_start exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_het_unpaired_after_left_end() { - printf("----------------------------------------------------------------\n"); - printf("test_het_unpaired_after_left_end enter\n"); - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_het(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("6"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 9, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 0, "unpaired", "(eof)")); - printf("\n"); - printf("test_het_unpaired_after_left_end exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_het_initial_pairing() { - printf("----------------------------------------------------------------\n"); - printf("test_het_initial_pairing enter\n"); - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_het(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("1"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 5, "unpaired", "(eof)")); - - printf("\n"); - printf("test_het_initial_pairing exit\n"); - printf("\n"); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_het_middle_pairing() { - printf("----------------------------------------------------------------\n"); - printf("test_het_middle_pairing enter\n"); - slls_t* pleft_field_names; - lrec_reader_t* preader; - set_up(make_records_het(), &pleft_field_names, &preader); - join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, NULL, NULL, pleft_field_names); - sllv_t* precords_paired; - sllv_t* precords_left_unpaired; - - slls_t* pright_field_values = slls_single_no_free("3"); - emit(pkeeper, pright_field_values, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_has_length(precords_paired, 2, "paired", pright_field_values->phead->value)); - mu_assert_lf(list_has_length(precords_left_unpaired, 5, "unpaired", pright_field_values->phead->value)); - printf("\n"); - - emit(pkeeper, NULL, &precords_paired, &precords_left_unpaired); - mu_assert_lf(list_is_null(precords_paired, "paired", "(eof)")); - mu_assert_lf(list_has_length(precords_left_unpaired, 2, "unpaired", "(eof)")); - printf("\n"); - printf("test_het_middle_pairing exit\n"); - printf("\n"); - return 0; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_left_empty_right_empty); - mu_run_test(test_left_empty); - mu_run_test(test_right_empty); - mu_run_test(test_unpaired_before_left_start); - mu_run_test(test_unpaired_after_left_end); - mu_run_test(test_middle_pairings); - mu_run_test(test_middle); - mu_run_test(test_walk_through_all); - mu_run_test(test_het_unpaired_before_left_start); - mu_run_test(test_het_unpaired_after_left_end); - mu_run_test(test_het_initial_pairing); - mu_run_test(test_het_middle_pairing); - printf("----------------------------------------------------------------\n"); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_JOIN_BUCKET_KEEPER ENTER\n"); - for (int argi = 1; argi < argc; argi++) { - if (streq(argv[argi], "-v")) - tjbk_verbose = TRUE; - } - - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_JOIN_BUCKET_KEEPER: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_line_readers.c b/c/unit_test/test_line_readers.c deleted file mode 100644 index 19cd4641f..000000000 --- a/c/unit_test/test_line_readers.c +++ /dev/null @@ -1,845 +0,0 @@ -#include -#include -#include -#include "lib/mlr_arch.h" -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/minunit.h" -#include "lib/mlr_test_util.h" -#include "input/line_readers.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static FILE* fopen_or_die(char* filename) { - FILE* fp = fopen(filename, "r"); - if (fp == NULL) { - perror("fopen"); - fprintf(stderr, "Couldn't open \"%s\" for read; exiting.\n", filename); - exit(1); - } - return fp; -} - -static void my_print_string(char* string) { - printf("\n"); - printf("Input data: ["); - for (char* p = string; *p; p++) { - if (*p == '\r') - printf("\\r"); - else if (*p == '\n') - printf("\\n"); - else - printf("%c", *p); - } - printf("]\n"); -} - -// ---------------------------------------------------------------- -static char* test_mlr_alloc_read_line_single_delimiter() { - char delimiter = '\n'; - char* path = NULL; - FILE* fp = NULL; - char* contents = NULL; - char* line = NULL; - size_t linelen = 0; - int do_auto_line_term = FALSE; - context_t* pctx = NULL; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - // Read past EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_mlr_alloc_read_line_single_delimiter_with_autodetect() { - char delimiter = '\n'; - char* path = NULL; - FILE* fp = NULL; - char* contents = NULL; - char* line = NULL; - size_t linelen = 0; - int do_auto_line_term = TRUE; - context_t ctx; - context_t* pctx = &ctx; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read past EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\r\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abc\n\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\nabc\r\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\nabc\n"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "\r\nabc"; - path = write_temp_file_or_die(contents); - context_init_from_first_file_name(pctx, "fake-file-name"); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read line 2 - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - mu_assert_lf(pctx->auto_line_term_detected == TRUE); - mu_assert_lf(streq(pctx->auto_line_term, "\r\n")); - - // Read to EOF - line = mlr_alloc_read_line_single_delimiter(fp, delimiter, &linelen, do_auto_line_term, pctx); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_mlr_alloc_read_line_multiple_delimiter() { - char* delimiter = "xy\n"; - int delimiter_length = strlen(delimiter); - char* path = NULL; - FILE* fp = NULL; - char* contents = NULL; - char* line = NULL; - size_t linelen = 0; - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = ""; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - // Read past EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "axy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "a")); - mu_assert_lf(linelen == strlen("a")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\nxy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read line 2 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabcxy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 2 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabc"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 2 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "xy\nabcxy\n"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 2 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - contents = "abcxy\nxy\ndef"; - path = write_temp_file_or_die(contents); - fp = fopen_or_die(path); - linelen = 4; - my_print_string(contents); - - // Read line 1 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "abc")); - mu_assert_lf(linelen == strlen("abc")); - - // Read line 2 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "")); - mu_assert_lf(linelen == strlen("")); - - // Read line 3 - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line != NULL); - mu_assert_lf(streq(line, "def")); - mu_assert_lf(linelen == strlen("def")); - - // Read to EOF - line = mlr_alloc_read_line_multiple_delimiter(fp, delimiter, delimiter_length, &linelen); - printf("linelen=%d line=\"%s\"\n", (int)linelen, line); - mu_assert_lf(line == NULL); - - fclose(fp); - unlink_file_or_die(path); - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - printf("----------------------------------------------------------------\n"); - printf("test_mlr_alloc_read_line_single_delimiter\n"); - mu_run_test(test_mlr_alloc_read_line_single_delimiter); - - printf("\n"); - printf("----------------------------------------------------------------\n"); - printf("test_mlr_alloc_read_line_single_delimiter_with_autodetect\n"); - mu_run_test(test_mlr_alloc_read_line_single_delimiter_with_autodetect); - - printf("\n"); - printf("----------------------------------------------------------------\n"); - printf("test_mlr_alloc_read_line_multiple_delimiter\n"); - mu_run_test(test_mlr_alloc_read_line_multiple_delimiter); - - printf("\n"); - printf("----------------------------------------------------------------\n"); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_LINE_READERS ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_LINE_READERS: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_lrec.c b/c/unit_test/test_lrec.c deleted file mode 100644 index 19d8e6193..000000000 --- a/c/unit_test/test_lrec.c +++ /dev/null @@ -1,431 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/lrec.h" -#include "containers/sllv.h" -#include "input/lrec_readers.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char* test_lrec_unbacked_api() { - lrec_t* prec = lrec_unbacked_alloc(); - mu_assert_lf(prec->field_count == 0); - - lrec_put(prec, "x", "3", NO_FREE); - mu_assert_lf(prec->field_count == 1); - mu_assert_lf(streq(lrec_get(prec, "x"), "3")); - - lrec_put(prec, "y", "4", NO_FREE); - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "x"), "3")); - mu_assert_lf(streq(lrec_get(prec, "y"), "4")); - - lrec_put(prec, "x", "5", NO_FREE); - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "x"), "5")); - mu_assert_lf(streq(lrec_get(prec, "y"), "4")); - - lrec_remove(prec, "x"); - mu_assert_lf(prec->field_count == 1); - mu_assert_lf(lrec_get(prec, "x") == NULL); - - // Non-replacing-rename case - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "y", "z", FALSE); - //lrec_dump_titled("After rename", prec); - mu_assert_lf(prec->field_count == 1); - mu_assert_lf(lrec_get(prec, "x") == NULL); - mu_assert_lf(lrec_get(prec, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec, "z"), "4")); - - lrec_free(prec); - - // Replacing-rename case - prec = lrec_unbacked_alloc(); - - lrec_put(prec, "x", "3", NO_FREE); - lrec_put(prec, "y", "4", NO_FREE); - lrec_put(prec, "z", "5", NO_FREE); - mu_assert_lf(prec->field_count == 3); - - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "y", "z", FALSE); - //lrec_dump_titled("After rename", prec); - - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "x"), "3")); - mu_assert_lf(lrec_get(prec, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec, "z"), "4")); - - lrec_free(prec); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_dkvp_api() { - char* line = mlr_strdup_or_die("w=2,x=3,y=4,z=5"); - - lrec_t* prec = lrec_parse_stdio_dkvp_single_sep(line, ',', '=', FALSE); - mu_assert_lf(prec->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec, "w"), "2")); - mu_assert_lf(streq(lrec_get(prec, "x"), "3")); - mu_assert_lf(streq(lrec_get(prec, "y"), "4")); - mu_assert_lf(streq(lrec_get(prec, "z"), "5")); - - lrec_remove(prec, "w"); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "w") == NULL); - - // Non-replacing-rename case - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "x", "u", FALSE); - //lrec_dump_titled("After rename", prec); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "x") == NULL); - mu_assert_lf(streq(lrec_get(prec, "u"), "3")); - - // Replacing-rename case - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "y", "z", FALSE); - //lrec_dump_titled("After rename", prec); - - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "u"), "3")); - mu_assert_lf(lrec_get(prec, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec, "z"), "4")); - - lrec_free(prec); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_nidx_api() { - char* line = mlr_strdup_or_die("a,b,c,d"); - lrec_t* prec = lrec_parse_stdio_nidx_single_sep(line, ',', FALSE); - mu_assert_lf(prec->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec, "1"), "a")); - mu_assert_lf(streq(lrec_get(prec, "2"), "b")); - mu_assert_lf(streq(lrec_get(prec, "3"), "c")); - mu_assert_lf(streq(lrec_get(prec, "4"), "d")); - - lrec_remove(prec, "1"); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "1") == NULL); - - // Non-replacing-rename case - lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "2", "u", FALSE); - lrec_dump_titled("After rename", prec); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "2") == NULL); - mu_assert_lf(streq(lrec_get(prec, "u"), "b")); - - // Replacing-rename case - lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "3", "4", FALSE); - lrec_dump_titled("After rename", prec); - - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "u"), "b")); - mu_assert_lf(lrec_get(prec, "3") == NULL); - mu_assert_lf(streq(lrec_get(prec, "4"), "c")); - - lrec_free(prec); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_csv_api() { - char* hdr_line = mlr_strdup_or_die("w,x,y,z"); - slls_t* hdr_fields = split_csvlite_header_line_single_ifs(hdr_line, ',', FALSE); - header_keeper_t* pheader_keeper = header_keeper_alloc(hdr_line, hdr_fields); - - char* data_line_1 = mlr_strdup_or_die("2,3,4,5"); - lrec_t* prec_1 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, - data_line_1, ',', FALSE, FALSE); - - char* data_line_2 = mlr_strdup_or_die("6,7,8,9"); - lrec_t* prec_2 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, - data_line_2, ',', FALSE, FALSE); - - mu_assert_lf(prec_1->field_count == 4); - mu_assert_lf(prec_2->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec_1, "w"), "2")); - mu_assert_lf(streq(lrec_get(prec_1, "x"), "3")); - mu_assert_lf(streq(lrec_get(prec_1, "y"), "4")); - mu_assert_lf(streq(lrec_get(prec_1, "z"), "5")); - - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); - mu_assert_lf(streq(lrec_get(prec_2, "y"), "8")); - mu_assert_lf(streq(lrec_get(prec_2, "z"), "9")); - - lrec_remove(prec_1, "w"); - mu_assert_lf(prec_1->field_count == 3); - mu_assert_lf(prec_2->field_count == 4); - mu_assert_lf(lrec_get(prec_1, "w") == NULL); - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - - // Non-replacing-rename case - //lrec_dump_titled("Before rename", prec_1); - lrec_rename(prec_1, "x", "u", FALSE); - //lrec_dump_titled("After rename", prec_1); - mu_assert_lf(prec_1->field_count == 3); - mu_assert_lf(lrec_get(prec_1, "x") == NULL); - mu_assert_lf(streq(lrec_get(prec_1, "u"), "3")); - - // Replacing-rename case - //lrec_dump_titled("Before rename", prec_2); - lrec_rename(prec_2, "y", "z", FALSE); - //lrec_dump_titled("After rename", prec_2); - - mu_assert_lf(prec_2->field_count == 3); - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); - mu_assert_lf(lrec_get(prec_2, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec_2, "z"), "8")); - - lrec_free(prec_1); - lrec_free(prec_2); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_csv_api_disjoint_allocs() { - char* hdr_line = mlr_strdup_or_die("w,x,y,z"); - slls_t* hdr_fields = split_csvlite_header_line_single_ifs(hdr_line, ',', FALSE); - header_keeper_t* pheader_keeper = header_keeper_alloc(hdr_line, hdr_fields); - - - char* data_line_1 = mlr_strdup_or_die("2,3,4,5"); - lrec_t* prec_1 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, - data_line_1, ',', FALSE, FALSE); - - mu_assert_lf(prec_1->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec_1, "w"), "2")); - mu_assert_lf(streq(lrec_get(prec_1, "x"), "3")); - mu_assert_lf(streq(lrec_get(prec_1, "y"), "4")); - mu_assert_lf(streq(lrec_get(prec_1, "z"), "5")); - - lrec_remove(prec_1, "w"); - mu_assert_lf(prec_1->field_count == 3); - mu_assert_lf(lrec_get(prec_1, "w") == NULL); - - lrec_rename(prec_1, "x", "u", FALSE); - mu_assert_lf(prec_1->field_count == 3); - mu_assert_lf(lrec_get(prec_1, "x") == NULL); - mu_assert_lf(streq(lrec_get(prec_1, "u"), "3")); - - lrec_free(prec_1); - - - char* data_line_2 = mlr_strdup_or_die("6,7,8,9"); - lrec_t* prec_2 = lrec_parse_stdio_csvlite_data_line_single_ifs(pheader_keeper, "test-file", 999, - data_line_2, ',', FALSE, FALSE); - - mu_assert_lf(prec_2->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); - mu_assert_lf(streq(lrec_get(prec_2, "y"), "8")); - mu_assert_lf(streq(lrec_get(prec_2, "z"), "9")); - - mu_assert_lf(prec_2->field_count == 4); - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - - lrec_rename(prec_2, "y", "z", FALSE); - - mu_assert_lf(prec_2->field_count == 3); - mu_assert_lf(streq(lrec_get(prec_2, "w"), "6")); - mu_assert_lf(streq(lrec_get(prec_2, "x"), "7")); - mu_assert_lf(lrec_get(prec_2, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec_2, "z"), "8")); - - lrec_free(prec_2); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_xtab_api() { - char* line_1 = mlr_strdup_or_die("w 2"); - char* line_2 = mlr_strdup_or_die("x 3"); - char* line_3 = mlr_strdup_or_die("y 4"); - char* line_4 = mlr_strdup_or_die("z 5"); - slls_t* pxtab_lines = slls_alloc(); - slls_append_with_free(pxtab_lines, line_1); - slls_append_with_free(pxtab_lines, line_2); - slls_append_with_free(pxtab_lines, line_3); - slls_append_with_free(pxtab_lines, line_4); - - lrec_t* prec = lrec_parse_stdio_xtab_single_ips(pxtab_lines, ' ', TRUE); - mu_assert_lf(prec->field_count == 4); - - mu_assert_lf(streq(lrec_get(prec, "w"), "2")); - mu_assert_lf(streq(lrec_get(prec, "x"), "3")); - mu_assert_lf(streq(lrec_get(prec, "y"), "4")); - mu_assert_lf(streq(lrec_get(prec, "z"), "5")); - - lrec_remove(prec, "w"); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "w") == NULL); - - // Non-replacing-rename case - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "x", "u", FALSE); - //lrec_dump_titled("After rename", prec); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(lrec_get(prec, "x") == NULL); - mu_assert_lf(streq(lrec_get(prec, "u"), "3")); - - // Replacing-rename case - //lrec_dump_titled("Before rename", prec); - lrec_rename(prec, "y", "z", FALSE); - //lrec_dump_titled("After rename", prec); - - mu_assert_lf(prec->field_count == 2); - mu_assert_lf(streq(lrec_get(prec, "u"), "3")); - mu_assert_lf(lrec_get(prec, "y") == NULL); - mu_assert_lf(streq(lrec_get(prec, "z"), "4")); - - lrec_free(prec); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lrec_put_after() { - printf("TEST_LREC_PUT_AFTER ENTER\n"); - - lrec_t* prec = lrec_literal_1("a", "1"); - lrece_t* pe = NULL; - - printf("BEFORE: "); lrec_print(prec); - mu_assert_lf(prec->field_count == 1); - char* value = lrec_get_ext(prec, "nosuch", &pe); - mu_assert_lf(value == NULL); - mu_assert_lf(pe == NULL); - - value = lrec_get_ext(prec, "a", &pe); - mu_assert_lf(value != NULL); - mu_assert_lf(pe != NULL); - mu_assert_lf(streq(value, "1")); - lrec_put_after(prec, pe, "a", "2", NO_FREE); - printf("AFTER : "); lrec_print(prec); - mu_assert_lf(prec->field_count == 1); - value = lrec_get_ext(prec, "a", &pe); - mu_assert_lf(value != NULL); - mu_assert_lf(pe != NULL); - mu_assert_lf(streq(value, "2")); - lrec_free(prec); - - prec = lrec_literal_1("a", "1"); - printf("BEFORE: "); lrec_print(prec); - value = lrec_get_ext(prec, "a", &pe); - mu_assert_lf(pe != NULL); - mu_assert_lf(streq(value, "1")); - - lrec_put_after(prec, pe, "b", "3", NO_FREE); - printf("AFTER : "); lrec_print(prec); - mu_assert_lf(prec->field_count == 2); - value = lrec_get(prec, "a"); - mu_assert_lf(value != NULL); - mu_assert_lf(streq(value, "1")); - value = lrec_get(prec, "b"); - mu_assert_lf(value != NULL); - mu_assert_lf(streq(value, "3")); - mu_assert_lf(streq(prec->phead->key, "a")); - mu_assert_lf(streq(prec->phead->pnext->key, "b")); - mu_assert_lf(streq(prec->phead->value, "1")); - mu_assert_lf(streq(prec->phead->pnext->value, "3")); - mu_assert_lf(prec->phead->pnext->pnext == NULL); - lrec_free(prec); - - - prec = lrec_literal_2("a", "1", "b", "2"); - printf("BEFORE: "); lrec_print(prec); - mu_assert_lf(prec->field_count == 2); - value = lrec_get_ext(prec, "a", &pe); - mu_assert_lf(value != NULL); - mu_assert_lf(pe != NULL); - mu_assert_lf(streq(value, "1")); - - lrec_put_after(prec, pe, "z", "9", NO_FREE); - printf("AFTER : "); lrec_print(prec); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(streq(prec->phead->key, "a")); - mu_assert_lf(streq(prec->phead->pnext->key, "z")); - mu_assert_lf(streq(prec->phead->pnext->pnext->key, "b")); - mu_assert_lf(streq(prec->phead->value, "1")); - mu_assert_lf(streq(prec->phead->pnext->value, "9")); - mu_assert_lf(streq(prec->phead->pnext->pnext->value, "2")); - mu_assert_lf(prec->phead->pnext->pnext->pnext == NULL); - lrec_free(prec); - - - prec = lrec_literal_2("a", "1", "b", "2"); - printf("BEFORE: "); lrec_print(prec); - mu_assert_lf(prec->field_count == 2); - value = lrec_get_ext(prec, "b", &pe); - mu_assert_lf(value != NULL); - mu_assert_lf(pe != NULL); - mu_assert_lf(streq(value, "2")); - - lrec_put_after(prec, pe, "z", "9", NO_FREE); - printf("AFTER : "); lrec_print(prec); - mu_assert_lf(prec->field_count == 3); - mu_assert_lf(streq(prec->phead->key, "a")); - mu_assert_lf(streq(prec->phead->pnext->key, "b")); - mu_assert_lf(streq(prec->phead->pnext->pnext->key, "z")); - mu_assert_lf(streq(prec->phead->value, "1")); - mu_assert_lf(streq(prec->phead->pnext->value, "2")); - mu_assert_lf(streq(prec->phead->pnext->pnext->value, "9")); - mu_assert_lf(prec->phead->pnext->pnext->pnext == NULL); - lrec_free(prec); - - printf("TEST_LREC_PUT_AFTER EXIT\n"); - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_lrec_unbacked_api); - mu_run_test(test_lrec_dkvp_api); - mu_run_test(test_lrec_nidx_api); - mu_run_test(test_lrec_csv_api); - mu_run_test(test_lrec_csv_api_disjoint_allocs); - mu_run_test(test_lrec_xtab_api); - mu_run_test(test_lrec_put_after); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_LREC ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_LREC: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_mlhmmv.c b/c/unit_test/test_mlhmmv.c deleted file mode 100644 index e6a7286f9..000000000 --- a/c/unit_test/test_mlhmmv.c +++ /dev/null @@ -1,352 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/mlhmmv.h" -#include "lib/mvfuncs.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -static mv_t* smv(char* strv) { - mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); - *pmv = mv_from_string(strv, NO_FREE); - return pmv; -} -static mv_t* imv(long long intv) { - mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); - *pmv = mv_from_int(intv); - return pmv; -} - -// ---------------------------------------------------------------- -static char* test_no_overlap() { - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - int error = 0; - - printf("================================================================\n"); - printf("empty map:\n"); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - - sllmv_t* pmvkeys1 = sllmv_single_with_free(imv(3)); - mv_t value1 = mv_from_int(4LL); - printf("\n"); - printf("keys1: "); - sllmv_print(pmvkeys1); - printf("value1: %s\n", mv_alloc_format_val(&value1)); - mlhmmv_root_put_terminal(pmap, pmvkeys1, &value1); - printf("map:\n"); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys1, &error), &value1)); - - sllmv_t* pmvkeys2 = sllmv_double_with_free(smv("abcde"), imv(-6)); - mv_t value2 = mv_from_int(7); - printf("\n"); - printf("keys2: "); - sllmv_print(pmvkeys2); - printf("value2: %s\n", mv_alloc_format_val(&value2)); - mlhmmv_root_put_terminal(pmap, pmvkeys2, &value2); - printf("map:\n"); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys2, &error), &value2)); - - sllmv_t* pmvkeys3 = sllmv_triple_with_free(imv(0), smv("fghij"), imv(0)); - mv_t value3 = mv_from_int(0LL); - printf("\n"); - printf("keys3: "); - sllmv_print(pmvkeys3); - printf("value3: %s\n", mv_alloc_format_val(&value3)); - mlhmmv_root_put_terminal(pmap, pmvkeys3, &value3); - printf("map:\n"); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys3, &error), &value3)); - - sllmv_free(pmvkeys1); - mlhmmv_root_free(pmap); - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_overlap() { - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - int error = 0; - - printf("================================================================\n"); - sllmv_t* pmvkeys = sllmv_single_with_free(imv(3)); - mv_t* ptermval = imv(4); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - ptermval = imv(5); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_double_with_free(imv(3), smv("x")); - ptermval = imv(6); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - ptermval = imv(7); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_triple_with_free(imv(3), imv(9), smv("y")); - ptermval = smv("z"); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_triple_with_free(imv(3), imv(9), smv("z")); - ptermval = smv("y"); - mlhmmv_root_put_terminal(pmap, pmvkeys, ptermval); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - mlhmmv_root_free(pmap); - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_resize() { - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - int error; - - printf("================================================================\n"); - for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) - mlhmmv_root_put_terminal(pmap, sllmv_single_with_free(imv(i)), imv(-i)); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - printf("\n"); - - for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) - mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("a"), imv(i)), imv(-i)); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - printf("\n"); - - for (int i = 0; i < 2*MLHMMV_INITIAL_ARRAY_LENGTH; i++) - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(imv(i*100), imv(i % 4), smv("b")), smv("term")); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - - sllmv_t* pmvkeys = sllmv_single_with_free(imv(2)); - mv_t* ptermval = imv(-2); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_double_with_free(smv("a"), imv(9)); - ptermval = imv(-9); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_double_with_free(smv("a"), imv(31)); - ptermval = imv(-31); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_triple_with_free(imv(0), imv(0), smv("b")); - ptermval = smv("term"); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_triple_with_free(imv(100), imv(1), smv("b")); - ptermval = smv("term"); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - pmvkeys = sllmv_triple_with_free(imv(1700), imv(1), smv("b")); - ptermval = smv("term"); - mu_assert_lf(mv_equals_si(mlhmmv_root_look_up_and_ref_terminal(pmap, pmvkeys, &error), ptermval)); - - mlhmmv_root_free(pmap); - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_depth_errors() { - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - int error; - - printf("================================================================\n"); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(3)), imv(4)); - - mu_assert_lf(NULL != mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(3)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_NONE); - - mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(0), imv(2), imv(3)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_NONE); - - mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(0), imv(3)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_NONE); - - mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_triple_with_free(imv(1), imv(2), imv(0)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_NONE); - - mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_quadruple_with_free(imv(1), imv(2), imv(3), imv(4)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_KEYLIST_TOO_DEEP); - - mu_assert_lf(NULL == mlhmmv_root_look_up_and_ref_terminal(pmap, sllmv_double_with_free(imv(1), imv(2)), &error)); - mu_assert_lf(error == MLHMMV_ERROR_KEYLIST_TOO_SHALLOW); - - mlhmmv_root_free(pmap); - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_mlhmmv_to_lrecs() { - printf("================================================================\n"); - mlhmmv_root_t* pmap = mlhmmv_root_alloc(); - - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("x")), imv(1)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("y")), imv(2)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("x")), imv(3)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("y")), imv(4)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("x")), imv(5)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("s"), smv("y")), imv(6)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("x")), imv(7)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("t"), smv("y")), imv(8)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("u"), smv("x")), imv(9)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("triple"), smv("u"), smv("y")), imv(10)); - mlhmmv_root_put_terminal(pmap, sllmv_triple_with_free(smv("not"), smv("u"), smv("y")), imv(11)); - mlhmmv_root_put_terminal(pmap, sllmv_single_with_free(smv("single")), imv(99)); - mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("i")), imv(111)); - mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("j")), imv(112)); - mlhmmv_root_put_terminal(pmap, sllmv_double_with_free(smv("double"), smv("k")), imv(113)); - - printf("full map:\n"); - mlhmmv_root_print_json_stacked(pmap, TRUE, FALSE, "", "\n", stdout); - printf("\n"); - - sllv_t* poutrecs = NULL; - - printf("----------------------------------------------------------------\n"); - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("single")), - sllmv_alloc(), poutrecs, TRUE, ":"); - printf("single-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("single")), - sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); - printf("single-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - printf("----------------------------------------------------------------\n"); - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), - sllmv_alloc(), poutrecs, TRUE, ":"); - printf("double-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), - sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); - printf("double-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("double")), - sllmv_double_with_free(smv("first"), smv("second")), poutrecs, TRUE, ":"); - printf("double-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - printf("----------------------------------------------------------------\n"); - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), - sllmv_alloc(), poutrecs, TRUE, ":"); - printf("triple-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), - sllmv_single_with_free(smv("first")), poutrecs, TRUE, ":"); - printf("triple-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), - sllmv_double_with_free(smv("first"), smv("second")), poutrecs, TRUE, ":"); - printf("triple-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - poutrecs = sllv_alloc(); - mlhmmv_root_partial_to_lrecs(pmap, sllmv_single_with_free(smv("triple")), - sllmv_triple_with_free(smv("first"), smv("second"), smv("third")), poutrecs, TRUE, ":"); - printf("triple-level outrecs (%lld):\n", poutrecs->length); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_print(pe->pvvalue); - for (sllve_t* pe = poutrecs->phead; pe != NULL; pe = pe->pnext) - lrec_free(pe->pvvalue); - printf("\n"); - sllv_free(poutrecs); - - mlhmmv_root_free(pmap); - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_no_overlap); - mu_run_test(test_overlap); - mu_run_test(test_resize); - mu_run_test(test_depth_errors); - mu_run_test(test_mlhmmv_to_lrecs); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_MLHMMV ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_MLHMMV: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_mlrregex.c b/c/unit_test/test_mlrregex.c deleted file mode 100644 index bec0f363d..000000000 --- a/c/unit_test/test_mlrregex.c +++ /dev/null @@ -1,272 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/mlrregex.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char * test_save_regex_captures() { - - // Capture-groups \1 through \9 supported, along with entire-string match in \0 - const size_t nmatchmax = 10; - regmatch_t matches[nmatchmax]; - string_array_t* pregex_captures = NULL; - regex_t regex; - - char* input = "abcde"; - char* sregex = "abcde"; - regcomp_or_die(®ex, sregex, 0); - regmatch_or_die(®ex, input, nmatchmax, matches); - save_regex_captures(&pregex_captures, input, matches, nmatchmax); - mu_assert_lf(pregex_captures != NULL); - mu_assert_lf(pregex_captures->length == 1); - mu_assert_lf(pregex_captures->strings[0] != NULL); - mu_assert_lf(streq(pregex_captures->strings[0], "abcde")); - regfree(®ex); - - input = "abcde"; - sregex = "a(.*)e"; - regcomp_or_die(®ex, sregex, 0); - regmatch_or_die(®ex, input, nmatchmax, matches); - save_regex_captures(&pregex_captures, input, matches, nmatchmax); - mu_assert_lf(pregex_captures->length == 2); - mu_assert_lf(pregex_captures->strings[0] != NULL); - mu_assert_lf(streq(pregex_captures->strings[1], "bcd")); - regfree(®ex); - - input = "abcde"; - sregex = "a(b)(.)(d)e"; - regcomp_or_die(®ex, sregex, 0); - regmatch_or_die(®ex, input, nmatchmax, matches); - save_regex_captures(&pregex_captures, input, matches, nmatchmax); - mu_assert_lf(pregex_captures->length == 4); - mu_assert_lf(pregex_captures->strings[0] != NULL); - mu_assert_lf(streq(pregex_captures->strings[1], "b")); - mu_assert_lf(streq(pregex_captures->strings[2], "c")); - mu_assert_lf(streq(pregex_captures->strings[3], "d")); - regfree(®ex); - - input = "abcdefghij"; - sregex = "(a)(b)(c)(d)(e)(f)(g)(h)(i)"; - regcomp_or_die(®ex, sregex, 0); - regmatch_or_die(®ex, input, nmatchmax, matches); - save_regex_captures(&pregex_captures, input, matches, nmatchmax); - mu_assert_lf(pregex_captures->length == 10); - mu_assert_lf(pregex_captures->strings[0] != NULL); - mu_assert_lf(streq(pregex_captures->strings[1], "a")); - mu_assert_lf(streq(pregex_captures->strings[2], "b")); - mu_assert_lf(streq(pregex_captures->strings[3], "c")); - mu_assert_lf(streq(pregex_captures->strings[4], "d")); - mu_assert_lf(streq(pregex_captures->strings[5], "e")); - mu_assert_lf(streq(pregex_captures->strings[6], "f")); - mu_assert_lf(streq(pregex_captures->strings[7], "g")); - mu_assert_lf(streq(pregex_captures->strings[8], "h")); - mu_assert_lf(streq(pregex_captures->strings[9], "i")); - regfree(®ex); - - string_array_free(pregex_captures); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_interpolate_regex_captures() { - int was_allocated = FALSE; - - char* output = interpolate_regex_captures("hello", NULL, &was_allocated); - mu_assert_lf(streq(output, "hello")); - mu_assert_lf(was_allocated == FALSE); - - string_array_t* psa = string_array_alloc(0); - output = interpolate_regex_captures("hello", psa, &was_allocated); - mu_assert_lf(streq(output, "hello")); - mu_assert_lf(was_allocated == FALSE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("hello", psa, &was_allocated); - mu_assert_lf(streq(output, "hello")); - mu_assert_lf(was_allocated == FALSE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("h\\3ello", psa, &was_allocated); - printf("output=[%s]\n", output); - mu_assert_lf(streq(output, "hcello")); - mu_assert_lf(was_allocated == TRUE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("h\\1ello", psa, &was_allocated); - printf("output=[%s]\n", output); - mu_assert_lf(streq(output, "haello")); - mu_assert_lf(was_allocated == TRUE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("h\\4ello", psa, &was_allocated); - printf("output=[%s]\n", output); - mu_assert_lf(streq(output, "hello")); - mu_assert_lf(was_allocated == TRUE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("h\\0ello", psa, &was_allocated); - printf("output=[%s]\n", output); - mu_assert_lf(streq(output, "hXello")); - mu_assert_lf(was_allocated == TRUE); - string_array_free(psa); - - psa = string_array_from_line(mlr_strdup_or_die("X,a,b,c"), ','); - output = interpolate_regex_captures("h\\3e\\1l\\2l\\4o", psa, &was_allocated); - printf("output=[%s]\n", output); - mu_assert_lf(streq(output, "hcealblo")); - mu_assert_lf(was_allocated == TRUE); - string_array_free(psa); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_regextract() { - char* input = NULL; - char* sregex = NULL; - char* output = NULL; - regex_t regex; - int cflags = 0; - - input = "abcdef"; - sregex = ".+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract(input, ®ex); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, input)); - printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); - free(output); - - input = "abcdef"; - sregex = "[a-z]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract(input, ®ex); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, input)); - printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); - free(output); - - input = "abcdef"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract(input, ®ex); - mu_assert_lf(output == NULL); - printf("regextract input=\"%s\" regex=\"%s\" output=NULL\n", input, sregex); - free(output); - - input = "abc345"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract(input, ®ex); - printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, "345")); - free(output); - - input = "789xyz"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract(input, ®ex); - printf("regextract input=\"%s\" regex=\"%s\" output=\"%s\"\n", input, sregex, output); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, "789")); - free(output); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_regextract_or_else() { - char* input = NULL; - char* sregex = NULL; - char* default_value = "DEFAULT"; - char* output = NULL; - regex_t regex; - int cflags = 0; - - input = "abcdef"; - sregex = ".+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract_or_else(input, ®ex, default_value); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, input)); - printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); - free(output); - - input = "abcdef"; - sregex = "[a-z]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract_or_else(input, ®ex, default_value); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, input)); - printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); - free(output); - - input = "abcdef"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract_or_else(input, ®ex, default_value); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, default_value)); - printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=NULL\n", input, sregex, default_value); - free(output); - - input = "abc345"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract_or_else(input, ®ex, default_value); - printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, "345")); - free(output); - - input = "789xyz"; - sregex = "[0-9]+"; - regcomp_or_die(®ex, sregex, cflags); - output = regextract_or_else(input, ®ex, default_value); - printf("regextract_or_else input=\"%s\" regex=\"%s\" default=\"%s\" output=\"%s\"\n", input, sregex, default_value, output); - mu_assert_lf(output != NULL); - mu_assert_lf(streq(output, "789")); - free(output); - - return 0; -} - -// ================================================================ -static char * all_tests() { - mu_run_test(test_save_regex_captures); - mu_run_test(test_interpolate_regex_captures); - mu_run_test(test_regextract); - mu_run_test(test_regextract_or_else); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_MLRREGEX ENTER\n"); - char *result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_MLRREGEX: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_mlrutil.c b/c/unit_test/test_mlrutil.c deleted file mode 100644 index 815a8d175..000000000 --- a/c/unit_test/test_mlrutil.c +++ /dev/null @@ -1,246 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char * test_canonical_mod() { - mu_assert("error: canonical_mod -7", mlr_canonical_mod(-7, 5) == 3); - mu_assert("error: canonical_mod -6", mlr_canonical_mod(-6, 5) == 4); - mu_assert("error: canonical_mod -5", mlr_canonical_mod(-5, 5) == 0); - mu_assert("error: canonical_mod -4", mlr_canonical_mod(-4, 5) == 1); - mu_assert("error: canonical_mod -3", mlr_canonical_mod(-3, 5) == 2); - mu_assert("error: canonical_mod -2", mlr_canonical_mod(-2, 5) == 3); - mu_assert("error: canonical_mod -1", mlr_canonical_mod(-1, 5) == 4); - mu_assert("error: canonical_mod 0", mlr_canonical_mod(0, 5) == 0); - mu_assert("error: canonical_mod 1", mlr_canonical_mod(1, 5) == 1); - mu_assert("error: canonical_mod 2", mlr_canonical_mod(2, 5) == 2); - mu_assert("error: canonical_mod 3", mlr_canonical_mod(3, 5) == 3); - mu_assert("error: canonical_mod 4", mlr_canonical_mod(4, 5) == 4); - mu_assert("error: canonical_mod 5", mlr_canonical_mod(5, 5) == 0); - mu_assert("error: canonical_mod 6", mlr_canonical_mod(6, 5) == 1); - mu_assert("error: canonical_mod 7", mlr_canonical_mod(7, 5) == 2); - return 0; -} - -// ---------------------------------------------------------------- -static char * test_power_of_two_above() { - mu_assert("error: power_of_two_above 0", power_of_two_above(0) == 1); - mu_assert("error: power_of_two_above 1", power_of_two_above(1) == 2); - mu_assert("error: power_of_two_above 2", power_of_two_above(2) == 4); - mu_assert("error: power_of_two_above 3", power_of_two_above(3) == 4); - mu_assert("error: power_of_two_above 4", power_of_two_above(4) == 8); - mu_assert("error: power_of_two_above 5", power_of_two_above(5) == 8); - mu_assert("error: power_of_two_above 6", power_of_two_above(6) == 8); - mu_assert("error: power_of_two_above 7", power_of_two_above(7) == 8); - mu_assert("error: power_of_two_above 8", power_of_two_above(8) == 16); - mu_assert("error: power_of_two_above 9", power_of_two_above(9) == 16); - mu_assert("error: power_of_two_above 1023", power_of_two_above(1023) == 1024); - mu_assert("error: power_of_two_above 1024", power_of_two_above(1024) == 2048); - mu_assert("error: power_of_two_above 1025", power_of_two_above(1025) == 2048); - return 0; -} - -// ---------------------------------------------------------------- -static char * test_streq() { - char* x; - char* y; - - x = ""; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = ""; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = ""; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - x = ""; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "a"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "ab"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - x = "1"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "1"; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "1"; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - x = "12"; y = ""; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "12"; y = "1"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "12"; y = "12"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - x = ""; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "a"; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "ab"; y = "a"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - x = ""; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "a"; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - x = "ab"; y = "ab"; mu_assert_lf(streq(x, y) == !strcmp(x, y)); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_streqn() { - char* x; - char* y; - - x = ""; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = ""; y = "1"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = ""; y = "12"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = ""; y = "123"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - - x = ""; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "a"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "ab"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "abc"; y = ""; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - - x = "a"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "a"; y = "aa"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "a"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "a"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - - x = "ab"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "ab"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "ab"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - - x = "abc"; y = "a"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "abc"; y = "ab"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "abc"; y = "abc"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - x = "abc"; y = "abd"; mu_assert_lf(streqn(x, y, 2) == !strncmp(x, y, 2)); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_strdup_quoted() { - - mu_assert_lf(streq(mlr_strdup_quoted_or_die(""), "\"\"")); - mu_assert_lf(streq(mlr_strdup_quoted_or_die("x"), "\"x\"")); - mu_assert_lf(streq(mlr_strdup_quoted_or_die("xy"), "\"xy\"")); - mu_assert_lf(streq(mlr_strdup_quoted_or_die("xyz"), "\"xyz\"")); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_starts_or_ends_with() { - - mu_assert_lf(string_starts_with("abcde", "")); - mu_assert_lf(string_starts_with("abcde", "a")); - mu_assert_lf(string_starts_with("abcde", "abcd")); - mu_assert_lf(string_starts_with("abcde", "abcde")); - mu_assert_lf(!string_starts_with("abcde", "abcdef")); - - mu_assert_lf(string_ends_with("abcde", "", NULL)); - mu_assert_lf(string_ends_with("abcde", "e", NULL)); - mu_assert_lf(string_ends_with("abcde", "de", NULL)); - mu_assert_lf(string_ends_with("abcde", "abcde", NULL)); - mu_assert_lf(!string_ends_with("abcde", "0abcde", NULL)); - int len = -1; - mu_assert_lf(!string_ends_with("abcde", "0abcde", &len)); - mu_assert_lf(len == 5); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_scanners() { - mu_assert("error: mlr_alloc_string_from_double", streq(mlr_alloc_string_from_double(4.25, "%.4f"), "4.2500")); - mu_assert("error: mlr_alloc_string_from_ull", streq(mlr_alloc_string_from_ull(12345LL), "12345")); - mu_assert("error: mlr_alloc_string_from_int", streq(mlr_alloc_string_from_int(12345), "12345")); - return 0; -} - -// ---------------------------------------------------------------- -static char * test_paste() { - mu_assert("error: paste 2", streq(mlr_paste_2_strings("ab", "cd"), "abcd")); - mu_assert("error: paste 3", streq(mlr_paste_3_strings("ab", "cd", "ef"), "abcdef")); - mu_assert("error: paste 4", streq(mlr_paste_4_strings("ab", "cd", "ef", "gh"), "abcdefgh")); - mu_assert("error: paste 5", streq(mlr_paste_5_strings("ab", "cd", "ef", "gh", "ij"), "abcdefghij")); - return 0; -} - -// ---------------------------------------------------------------- -static char * test_unbackslash() { - mu_assert_lf(streq(mlr_alloc_unbackslash(""), "")); - mu_assert_lf(streq(mlr_alloc_unbackslash("hello"), "hello")); - mu_assert_lf(streq(mlr_alloc_unbackslash("\\r\\n"), "\r\n")); - mu_assert_lf(streq(mlr_alloc_unbackslash("\\t\\\\"), "\t\\")); - mu_assert_lf(streq(mlr_alloc_unbackslash("[\\132]"), "[Z]")); - mu_assert_lf(streq(mlr_alloc_unbackslash("[\\x59]"), "[Y]")); - return 0; -} - -// ---------------------------------------------------------------- -static char * test_rstrip() { - - char* a = NULL; - mlr_rstrip(a); - mu_assert_lf(a == NULL); - - a = mlr_strdup_or_die(""); - mlr_rstrip(a); - mu_assert_lf(streq(a, "")); - - a = mlr_strdup_or_die("foo"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "foo")); - - a = mlr_strdup_or_die("\r"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "")); - - a = mlr_strdup_or_die("\n"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "")); - - a = mlr_strdup_or_die("\r\n"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "")); - - a = mlr_strdup_or_die("x\r"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "x")); - - a = mlr_strdup_or_die("x\n"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "x")); - - a = mlr_strdup_or_die("x\r\n"); - mlr_rstrip(a); - mu_assert_lf(streq(a, "x")); - - return 0; -} - -// ================================================================ -static char * all_tests() { - mu_run_test(test_canonical_mod); - mu_run_test(test_power_of_two_above); - mu_run_test(test_streq); - mu_run_test(test_streqn); -mu_run_test(test_strdup_quoted); - mu_run_test(test_starts_or_ends_with); - mu_run_test(test_scanners); - mu_run_test(test_paste); - mu_run_test(test_unbackslash); - mu_run_test(test_rstrip); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_MLRUTIL ENTER\n"); - char *result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_MLRUTIL: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_multiple_containers.c b/c/unit_test/test_multiple_containers.c deleted file mode 100644 index 162ef097d..000000000 --- a/c/unit_test/test_multiple_containers.c +++ /dev/null @@ -1,900 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/slls.h" -#include "containers/rslls.h" -#include "containers/sllv.h" -#include "lib/string_array.h" -#include "containers/hss.h" -#include "containers/lhmsi.h" -#include "containers/lhmsll.h" -#include "containers/lhmss.h" -#include "containers/lhmsv.h" -#include "containers/lhms2v.h" -#include "containers/lhmslv.h" -#include "containers/lhmsmv.h" -#include "containers/percentile_keeper.h" -#include "containers/top_keeper.h" -#include "containers/dheap.h" -#include "lib/mvfuncs.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -static mv_t* smv(char* strv) { - mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); - *pmv = mv_from_string(strv, NO_FREE); - return pmv; -} -static mv_t* imv(long long intv) { - mv_t* pmv = mlr_malloc_or_die(sizeof(mv_t)); - *pmv = mv_from_int(intv); - return pmv; -} - -// ---------------------------------------------------------------- -static char* test_slls() { - slls_t* plist = slls_from_line(mlr_strdup_or_die(""), ',', FALSE); - mu_assert_lf(plist->length == 0); - - plist = slls_from_line(mlr_strdup_or_die("a"), ',', FALSE); - - mu_assert_lf(plist->length == 1); - plist = slls_from_line(mlr_strdup_or_die("c,d,a,e,b"), ',', FALSE); - mu_assert_lf(plist->length == 5); - sllse_t* pe = plist->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - slls_sort(plist); - - mu_assert_lf(plist->length == 5); - pe = plist->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - - plist = slls_from_line(mlr_strdup_or_die(","), ',', FALSE); - slls_print_quoted(plist);printf("\n"); - mu_assert_lf(plist->length == 2); - pe = plist->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; - - plist = slls_from_line(mlr_strdup_or_die("a,b,c,"), ',', FALSE); - slls_print_quoted(plist);printf("\n"); - mu_assert_lf(plist->length == 4); - pe = plist->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; - - plist = slls_from_line(mlr_strdup_or_die("a,,c,d"), ',', FALSE); - slls_print_quoted(plist);printf("\n"); - mu_assert_lf(plist->length == 4); - pe = plist->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_rslls() { - - rslls_t* pa = rslls_alloc(); - rslls_append(pa, "a", NO_FREE, 0); - rslls_append(pa, "b", NO_FREE, 0); - rslls_append(pa, "c", NO_FREE, 0); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 3); - rsllse_t* pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_reset(pa); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 0); - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_append(pa, "d", NO_FREE, 0); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 1); - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_append(pa, "e", NO_FREE, 0); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 2); - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(pe->value == NULL); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_append(pa, "f", NO_FREE, 0); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 3); - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "f")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_append(pa, "g", NO_FREE, 0); - - rslls_print(pa); printf("\n"); - mu_assert_lf(pa->length == 4); - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "f")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "g")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - rslls_free(pa); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_sllv() { - - sllv_t* pa = sllv_alloc(); - sllv_append(pa, "a"); - sllv_append(pa, "b"); - sllv_append(pa, "c"); - mu_assert_lf(pa->length == 3); - - sllve_t* pe = pa->phead; - - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - sllv_t* pb = sllv_alloc(); - sllv_append(pb, "d"); - sllv_append(pb, "e"); - mu_assert_lf(pb->length == 2); - - pe = pb->phead; - - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "e")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - sllv_transfer(pa, pb); - - mu_assert_lf(pa->length == 5); - mu_assert_lf(pb->length == 0); - mu_assert_lf(pb->phead == NULL); - mu_assert_lf(pb->ptail == NULL); - - pe = pa->phead; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "d")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "e")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - sllv_free(pb); - - pa = sllv_alloc(); - sllv_push(pa, "a"); - sllv_push(pa, "b"); - sllv_push(pa, "c"); - mu_assert_lf(pa->length == 3); - - pe = pa->phead; - - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "c")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "b")); pe = pe->pnext; - mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->pvvalue, "a")); pe = pe->pnext; - mu_assert_lf(pe == NULL); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_string_array() { - string_array_t* parray = string_array_from_line(mlr_strdup_or_die(""), ','); - mu_assert_lf(parray->length == 0); - string_array_free(parray); - - parray = string_array_from_line(mlr_strdup_or_die("a"), ','); - mu_assert_lf(parray->length == 1); - mu_assert_lf(streq(parray->strings[0], "a")); - string_array_free(parray); - - parray = string_array_from_line(mlr_strdup_or_die("c,d,a,e,b"), ','); - mu_assert_lf(parray->length == 5); - mu_assert_lf(streq(parray->strings[0], "c")); - mu_assert_lf(streq(parray->strings[1], "d")); - mu_assert_lf(streq(parray->strings[2], "a")); - mu_assert_lf(streq(parray->strings[3], "e")); - mu_assert_lf(streq(parray->strings[4], "b")); - string_array_free(parray); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_hss() { - - hss_t *pset = hss_alloc(); - mu_assert_lf(pset->num_occupied == 0); - - hss_add(pset, "x"); - mu_assert_lf(pset->num_occupied == 1); - mu_assert_lf(!hss_has(pset, "w")); - mu_assert_lf( hss_has(pset, "x")); - mu_assert_lf(!hss_has(pset, "y")); - mu_assert_lf(!hss_has(pset, "z")); - mu_assert_lf(hss_check_counts(pset)); - - hss_add(pset, "y"); - mu_assert_lf(pset->num_occupied == 2); - mu_assert_lf(!hss_has(pset, "w")); - mu_assert_lf( hss_has(pset, "x")); - mu_assert_lf( hss_has(pset, "y")); - mu_assert_lf(!hss_has(pset, "z")); - mu_assert_lf(hss_check_counts(pset)); - - hss_add(pset, "x"); - mu_assert_lf(pset->num_occupied == 2); - mu_assert_lf(!hss_has(pset, "w")); - mu_assert_lf( hss_has(pset, "x")); - mu_assert_lf( hss_has(pset, "y")); - mu_assert_lf(!hss_has(pset, "z")); - mu_assert_lf(hss_check_counts(pset)); - - hss_add(pset, "z"); - mu_assert_lf(pset->num_occupied == 3); - mu_assert_lf(!hss_has(pset, "w")); - mu_assert_lf( hss_has(pset, "x")); - mu_assert_lf( hss_has(pset, "y")); - mu_assert_lf(hss_has(pset, "z")); - mu_assert_lf(hss_check_counts(pset)); - - hss_free(pset); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmsi() { - - lhmsi_t *pmap = lhmsi_alloc(); - int val = -123; - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf(!lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf(!lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsi_check_counts(pmap)); - - lhmsi_put(pmap, "x", 3, NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 3); - mu_assert_lf(!lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == -999); - mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); - mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); - mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsi_check_counts(pmap)); - - lhmsi_put(pmap, "y", 5, NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 3); - mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); - mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); - mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); - mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsi_check_counts(pmap)); - - lhmsi_put(pmap, "x", 4, NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 4); - mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); - mu_assert_lf(!lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == -999); - mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); - mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsi_check_counts(pmap)); - - lhmsi_put(pmap, "z", 7, NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmsi_has_key(pmap, "w")); mu_assert_lf(lhmsi_get(pmap, "w") == -999); - mu_assert_lf( lhmsi_has_key(pmap, "x")); mu_assert_lf(lhmsi_get(pmap, "x") == 4); - mu_assert_lf( lhmsi_has_key(pmap, "y")); mu_assert_lf(lhmsi_get(pmap, "y") == 5); - mu_assert_lf(lhmsi_has_key(pmap, "z")); mu_assert_lf(lhmsi_get(pmap, "z") == 7); - mu_assert_lf(lhmsi_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsi_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); - mu_assert_lf(lhmsi_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsi_test_and_get(pmap, "z", &val) == TRUE); mu_assert_lf(val == 7); - mu_assert_lf(lhmsi_check_counts(pmap)); - - lhmsi_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmsll() { - - lhmsll_t *pmap = lhmsll_alloc(); - long long val = -123; - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf(!lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf(!lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsll_check_counts(pmap)); - - lhmsll_put(pmap, "x", 3, NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 3); - mu_assert_lf(!lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == -999); - mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); - mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); - mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsll_check_counts(pmap)); - - lhmsll_put(pmap, "y", 5, NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 3); - mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); - mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); - mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 3); - mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsll_check_counts(pmap)); - - lhmsll_put(pmap, "x", 4, NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 4); - mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); - mu_assert_lf(!lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == -999); - mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); - mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == FALSE); - mu_assert_lf(lhmsll_check_counts(pmap)); - - lhmsll_put(pmap, "z", 7, NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmsll_has_key(pmap, "w")); mu_assert_lf(lhmsll_get(pmap, "w") == -999); - mu_assert_lf( lhmsll_has_key(pmap, "x")); mu_assert_lf(lhmsll_get(pmap, "x") == 4); - mu_assert_lf( lhmsll_has_key(pmap, "y")); mu_assert_lf(lhmsll_get(pmap, "y") == 5); - mu_assert_lf(lhmsll_has_key(pmap, "z")); mu_assert_lf(lhmsll_get(pmap, "z") == 7); - mu_assert_lf(lhmsll_test_and_get(pmap, "w", &val) == FALSE); - mu_assert_lf(lhmsll_test_and_get(pmap, "x", &val) == TRUE); mu_assert_lf(val == 4); - mu_assert_lf(lhmsll_test_and_get(pmap, "y", &val) == TRUE); mu_assert_lf(val == 5); - mu_assert_lf(lhmsll_test_and_get(pmap, "z", &val) == TRUE); mu_assert_lf(val == 7); - mu_assert_lf(lhmsll_check_counts(pmap)); - - lhmsll_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmss() { - - lhmss_t *pmap = lhmss_alloc(); - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); - mu_assert_lf(!lhmss_has_key(pmap, "x")); mu_assert_lf(lhmss_get(pmap, "x") == NULL); - mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); - mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); - mu_assert_lf(lhmss_check_counts(pmap)); - - lhmss_put(pmap, "x", "3", NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); - mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); - mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); - mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); - mu_assert_lf(lhmss_check_counts(pmap)); - - lhmss_put(pmap, "y", "5", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); - mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); - mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); - mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); - mu_assert_lf(lhmss_check_counts(pmap)); - - lhmss_put(pmap, "x", "4", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); - mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); - mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); - mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); - mu_assert_lf(lhmss_check_counts(pmap)); - - lhmss_put(pmap, "z", "7", NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); - mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); - mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); - mu_assert_lf( lhmss_has_key(pmap, "z")); mu_assert_lf(streq(lhmss_get(pmap, "z"), "7")); - mu_assert_lf(lhmss_check_counts(pmap)); - - lhmss_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmsv() { - - lhmsv_t *pmap = lhmsv_alloc(); - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); - mu_assert_lf(!lhmsv_has_key(pmap, "x")); mu_assert_lf(lhmsv_get(pmap, "x") == NULL); - mu_assert_lf(!lhmsv_has_key(pmap, "y")); mu_assert_lf(lhmsv_get(pmap, "y") == NULL); - mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsv_check_counts(pmap)); - - lhmsv_put(pmap, "x", "3", NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "3")); - mu_assert_lf(!lhmsv_has_key(pmap, "y")); mu_assert_lf(lhmsv_get(pmap, "y") == NULL); - mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsv_check_counts(pmap)); - - lhmsv_put(pmap, "y", "5", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "3")); - mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); - mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsv_check_counts(pmap)); - - lhmsv_put(pmap, "x", "4", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "4")); - mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); - mu_assert_lf(!lhmsv_has_key(pmap, "z")); mu_assert_lf(lhmsv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsv_check_counts(pmap)); - - lhmsv_put(pmap, "z", "7", NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmsv_has_key(pmap, "w")); mu_assert_lf(lhmsv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsv_has_key(pmap, "x")); mu_assert_lf(streq(lhmsv_get(pmap, "x"), "4")); - mu_assert_lf( lhmsv_has_key(pmap, "y")); mu_assert_lf(streq(lhmsv_get(pmap, "y"), "5")); - mu_assert_lf( lhmsv_has_key(pmap, "z")); mu_assert_lf(streq(lhmsv_get(pmap, "z"), "7")); - mu_assert_lf(lhmsv_check_counts(pmap)); - - lhmsv_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhms2v() { - - lhms2v_t *pmap = lhms2v_alloc(); - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(lhms2v_get(pmap, "a", "x") == NULL); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(lhms2v_get(pmap, "a", "y") == NULL); - mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); - mu_assert_lf(lhms2v_check_counts(pmap)); - - lhms2v_put(pmap, "a", "x", "3", NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); - mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "3")); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(lhms2v_get(pmap, "a", "y") == NULL); - mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); - mu_assert_lf(lhms2v_check_counts(pmap)); - - lhms2v_put(pmap, "a", "y", "5", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); - mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "3")); - mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); - mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); - mu_assert_lf(lhms2v_check_counts(pmap)); - - lhms2v_put(pmap, "a", "x", "4", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); - mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "4")); - mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); - mu_assert_lf(!lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(lhms2v_get(pmap, "b", "z") == NULL); - mu_assert_lf(lhms2v_check_counts(pmap)); - - lhms2v_put(pmap, "b", "z", "7", NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhms2v_has_key(pmap, "a", "w")); mu_assert_lf(lhms2v_get(pmap, "a", "w") == NULL); - mu_assert_lf( lhms2v_has_key(pmap, "a", "x")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "x"), "4")); - mu_assert_lf( lhms2v_has_key(pmap, "a", "y")); mu_assert_lf(streq(lhms2v_get(pmap, "a", "y"), "5")); - mu_assert_lf( lhms2v_has_key(pmap, "b", "z")); mu_assert_lf(streq(lhms2v_get(pmap, "b", "z"), "7")); - mu_assert_lf(lhms2v_check_counts(pmap)); - - lhms2v_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmslv() { - - slls_t* aw = slls_alloc(); slls_append_no_free(aw, "a"); slls_append_no_free(aw, "w"); - slls_t* ax = slls_alloc(); slls_append_no_free(ax, "a"); slls_append_no_free(ax, "x"); - slls_t* ay = slls_alloc(); slls_append_no_free(ay, "a"); slls_append_no_free(ay, "y"); - slls_t* bz = slls_alloc(); slls_append_no_free(bz, "b"); slls_append_no_free(bz, "z"); - - lhmslv_t *pmap = lhmslv_alloc(); - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); - mu_assert_lf(!lhmslv_has_key(pmap, ax)); mu_assert_lf(lhmslv_get(pmap, ax) == NULL); - mu_assert_lf(!lhmslv_has_key(pmap, ay)); mu_assert_lf(lhmslv_get(pmap, ay) == NULL); - mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); - mu_assert_lf(lhmslv_check_counts(pmap)); - - lhmslv_put(pmap, ax, "3", NO_FREE); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); - mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "3")); - mu_assert_lf(!lhmslv_has_key(pmap, ay)); mu_assert_lf(lhmslv_get(pmap, ay) == NULL); - mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); - mu_assert_lf(lhmslv_check_counts(pmap)); - - lhmslv_put(pmap, ay, "5", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); - mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "3")); - mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); - mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); - mu_assert_lf(lhmslv_check_counts(pmap)); - - lhmslv_put(pmap, ax, "4", NO_FREE); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); - mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "4")); - mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); - mu_assert_lf(!lhmslv_has_key(pmap, bz)); mu_assert_lf(lhmslv_get(pmap, bz) == NULL); - mu_assert_lf(lhmslv_check_counts(pmap)); - - lhmslv_put(pmap, bz, "7", NO_FREE); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmslv_has_key(pmap, aw)); mu_assert_lf(lhmslv_get(pmap, aw) == NULL); - mu_assert_lf( lhmslv_has_key(pmap, ax)); mu_assert_lf(streq(lhmslv_get(pmap, ax), "4")); - mu_assert_lf( lhmslv_has_key(pmap, ay)); mu_assert_lf(streq(lhmslv_get(pmap, ay), "5")); - mu_assert_lf( lhmslv_has_key(pmap, bz)); mu_assert_lf(streq(lhmslv_get(pmap, bz), "7")); - mu_assert_lf(lhmslv_check_counts(pmap)); - - lhmslv_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_lhmsmv() { - printf("\n"); - - lhmsmv_t *pmap = lhmsmv_alloc(); - mu_assert_lf(pmap->num_occupied == 0); - mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); - mu_assert_lf(!lhmsmv_has_key(pmap, "x")); mu_assert_lf(lhmsmv_get(pmap, "x") == NULL); - mu_assert_lf(!lhmsmv_has_key(pmap, "y")); mu_assert_lf(lhmsmv_get(pmap, "y") == NULL); - mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsmv_check_counts(pmap)); - - lhmsmv_put(pmap, "x", imv(3), NO_FREE); - lhmsmv_dump(pmap); - printf("\n"); - mu_assert_lf(pmap->num_occupied == 1); - mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), imv(3))); - mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("3"))); - mu_assert_lf(!lhmsmv_has_key(pmap, "y")); mu_assert_lf(lhmsmv_get(pmap, "y") == NULL); - mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsmv_check_counts(pmap)); - - lhmsmv_put(pmap, "y", smv("5"), NO_FREE); - lhmsmv_dump(pmap); - printf("\n"); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("3"))); - mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); - mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), imv(5))); - mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsmv_check_counts(pmap)); - - lhmsmv_put(pmap, "x", smv("f"), NO_FREE); - lhmsmv_dump(pmap); - printf("\n"); - mu_assert_lf(pmap->num_occupied == 2); - mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("f"))); - mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); - mu_assert_lf(!lhmsmv_has_key(pmap, "z")); mu_assert_lf(lhmsmv_get(pmap, "z") == NULL); - mu_assert_lf(lhmsmv_check_counts(pmap)); - - lhmsmv_put(pmap, "z", imv(7), NO_FREE); - lhmsmv_dump(pmap); - printf("\n"); - mu_assert_lf(pmap->num_occupied == 3); - mu_assert_lf(!lhmsmv_has_key(pmap, "w")); mu_assert_lf(lhmsmv_get(pmap, "w") == NULL); - mu_assert_lf( lhmsmv_has_key(pmap, "x")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "x"), smv("f"))); - mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), smv("5"))); - mu_assert_lf( lhmsmv_has_key(pmap, "y")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "y"), imv(5))); - mu_assert_lf( lhmsmv_has_key(pmap, "z")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "z"), smv("7"))); - mu_assert_lf( lhmsmv_has_key(pmap, "z")); mu_assert_lf(mveqcopy(lhmsmv_get(pmap, "z"), imv(7))); - mu_assert_lf(lhmsmv_check_counts(pmap)); - - lhmsmv_free(pmap); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_percentile_keeper() { - - percentile_keeper_t* ppercentile_keeper = percentile_keeper_alloc(); - percentile_keeper_ingest(ppercentile_keeper, mv_from_float(1.0)); - percentile_keeper_ingest(ppercentile_keeper, mv_from_int(2)); - percentile_keeper_ingest(ppercentile_keeper, mv_from_int(3)); - percentile_keeper_ingest(ppercentile_keeper, mv_from_float(4.0)); - percentile_keeper_ingest(ppercentile_keeper, mv_from_float(5.0)); - percentile_keeper_print(ppercentile_keeper); - - double p; - mv_t q; - p = 0.0; - q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); - printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); - mu_assert_lf(q.type == MT_FLOAT); - mu_assert_lf(q.u.fltv == 1.0); - - p = 10.0; - q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); - printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); - mu_assert_lf(q.type == MT_FLOAT); - mu_assert_lf(q.u.fltv == 1.0); - - p = 50.0; - q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); - printf("%4.2lf -> %lld\n", p, q.u.intv); - mu_assert_lf(q.type == MT_INT); - mu_assert_lf(q.u.intv == 3LL); - - p = 90.0; - q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); - printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); - mu_assert_lf(q.type == MT_FLOAT); - mu_assert_lf(q.u.fltv == 5.0); - - p = 100.0; - q = percentile_keeper_emit_non_interpolated(ppercentile_keeper, p); - printf("%4.2lf -> %7.4lf\n", p, q.u.fltv); - mu_assert_lf(q.type == MT_FLOAT); - mu_assert_lf(q.u.fltv == 5.0); - - percentile_keeper_free(ppercentile_keeper); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_top_keeper() { - int capacity = 3; - - top_keeper_t* ptop_keeper = top_keeper_alloc(capacity); - mu_assert_lf(ptop_keeper->size == 0); - - top_keeper_add(ptop_keeper, mv_from_float(5.0), NULL); - top_keeper_print(ptop_keeper); - mu_assert_lf(ptop_keeper->size == 1); - mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 5.0); - - top_keeper_add(ptop_keeper, mv_from_float(6.0), NULL); - top_keeper_print(ptop_keeper); - mu_assert_lf(ptop_keeper->size == 2); - mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); - mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); - - top_keeper_add(ptop_keeper, mv_from_int(4), NULL); - top_keeper_print(ptop_keeper); - mu_assert_lf(ptop_keeper->size == 3); - mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); - mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); - mu_assert_lf(ptop_keeper->top_values[2].type == MT_INT); - mu_assert_lf(ptop_keeper->top_values[2].u.intv == 4.0); - - top_keeper_add(ptop_keeper, mv_from_int(2), NULL); - top_keeper_print(ptop_keeper); - mu_assert_lf(ptop_keeper->size == 3); - mu_assert_lf(ptop_keeper->top_values[0].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[0].u.fltv == 6.0); - mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 5.0); - mu_assert_lf(ptop_keeper->top_values[2].type == MT_INT); - mu_assert_lf(ptop_keeper->top_values[2].u.intv == 4.0); - - top_keeper_add(ptop_keeper, mv_from_int(7), NULL); - top_keeper_print(ptop_keeper); - mu_assert_lf(ptop_keeper->size == 3); - mu_assert_lf(ptop_keeper->top_values[0].type == MT_INT); - mu_assert_lf(ptop_keeper->top_values[0].u.intv == 7); - mu_assert_lf(ptop_keeper->top_values[1].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[1].u.fltv == 6.0); - mu_assert_lf(ptop_keeper->top_values[2].type == MT_FLOAT); - mu_assert_lf(ptop_keeper->top_values[2].u.fltv == 5.0); - - top_keeper_free(ptop_keeper); - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_dheap() { - - dheap_t *pdheap = dheap_alloc(); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 0); - - dheap_add(pdheap, 4.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 1); - - dheap_add(pdheap, 3.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 2); - - dheap_add(pdheap, 2.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 3); - - dheap_add(pdheap, 6.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 4); - - dheap_add(pdheap, 5.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 5); - - dheap_add(pdheap, 8.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 6); - - dheap_add(pdheap, 7.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 7); - - dheap_print(pdheap); - - mu_assert_lf(dheap_remove(pdheap) == 8.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 6); - - mu_assert_lf(dheap_remove(pdheap) == 7.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 5); - - mu_assert_lf(dheap_remove(pdheap) == 6.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 4); - - mu_assert_lf(dheap_remove(pdheap) == 5.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 3); - - mu_assert_lf(dheap_remove(pdheap) == 4.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 2); - - mu_assert_lf(dheap_remove(pdheap) == 3.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 1); - - mu_assert_lf(dheap_remove(pdheap) == 2.25); - mu_assert_lf(dheap_check(pdheap, __FILE__, __LINE__)); - mu_assert_lf(pdheap->n == 0); - - dheap_free(pdheap); - - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_slls); - mu_run_test(test_rslls); - mu_run_test(test_sllv); - mu_run_test(test_string_array); - mu_run_test(test_hss); - mu_run_test(test_lhmsi); - mu_run_test(test_lhmsll); - mu_run_test(test_lhmss); - mu_run_test(test_lhmsv); - mu_run_test(test_lhms2v); - mu_run_test(test_lhmslv); - mu_run_test(test_lhmsmv); - mu_run_test(test_percentile_keeper); - mu_run_test(test_top_keeper); - mu_run_test(test_dheap); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - - printf("TEST_MULTIPLE_CONTAINERS ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_MULTIPLE_CONTAINERS: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_parse_trie.c b/c/unit_test/test_parse_trie.c deleted file mode 100644 index 51ec3f874..000000000 --- a/c/unit_test/test_parse_trie.c +++ /dev/null @@ -1,286 +0,0 @@ -#include -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "containers/parse_trie.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -static char* sep = "================================================================"; - - -static void print_with_unprintables(char* s) { - for (char* p = s; *p; p++) { - char c = *p; - printf("%c[%02x]", isprint((unsigned char)c) ? c : '?', ((unsigned)c) & 0xff); - } -} - -// ---------------------------------------------------------------- -static void test_case( - char* test_name, - char** strings, - int num_strings, - char* buf, - int* prc, - int* pstridx, - int* pmatchlen) -{ - int stridx, matchlen, rc; - - parse_trie_t* ptrie = parse_trie_alloc(); - printf("%s %s\n", sep, test_name); - parse_trie_print(ptrie); - for (stridx = 0; stridx < num_strings; stridx++) { - printf("Adding string[%d] = [", stridx); - print_with_unprintables(strings[stridx]); - printf("]\n"); - parse_trie_add_string(ptrie, strings[stridx], stridx); - parse_trie_print(ptrie); - } - - stridx = -2; - matchlen = -2; - rc = parse_trie_ring_match(ptrie, buf, 0, strlen(buf), 0xff, &stridx, &matchlen); - - parse_trie_free(ptrie); - - printf("buf = %s\n", buf); - printf("rc = %d\n", rc); - printf("stridx = %d (%s)\n", stridx, strings[stridx]); - printf("matchlen = %d\n", matchlen); - - *prc = rc; - *pstridx = stridx; - *pmatchlen = matchlen; -} - -// ---------------------------------------------------------------- -static char* test_simplest() { - char* strings[] = { "a" }; - char* buf = "a"; - int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 1; - - int num_strings = sizeof(strings) / sizeof(strings[0]); - int stridx, matchlen, rc; - test_case("simplest", strings, num_strings, buf, &rc, &stridx, &matchlen); - mu_assert_lf(rc == expect_rc); - mu_assert_lf(stridx == expect_stridx); - mu_assert_lf(matchlen == expect_matchlen); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_disjoint() { - char* strings[] = { "abc" , "fg" }; - char* buf = "abcde"; - int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 3; - - int num_strings = sizeof(strings) / sizeof(strings[0]); - int stridx, matchlen, rc; - test_case("disjoint", strings, num_strings, buf, &rc, &stridx, &matchlen); - mu_assert_lf(rc == expect_rc); - mu_assert_lf(stridx == expect_stridx); - mu_assert_lf(matchlen == expect_matchlen); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_short_long() { - char* strings[] = { "a" , "aa" }; - char* buf = "aaabc"; - int expect_rc = TRUE, expect_stridx = 1, expect_matchlen = 2; - - int num_strings = sizeof(strings) / sizeof(strings[0]); - int stridx, matchlen, rc; - test_case("short_long", strings, num_strings, buf, &rc, &stridx, &matchlen); - mu_assert_lf(rc == expect_rc); - mu_assert_lf(stridx == expect_stridx); - mu_assert_lf(matchlen == expect_matchlen); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_long_short() { - char* strings[] = { "aa" , "a" }; - char* buf = "aaabc"; - int expect_rc = TRUE, expect_stridx = 0, expect_matchlen = 2; - - int num_strings = sizeof(strings) / sizeof(strings[0]); - int stridx, matchlen, rc; - test_case("long_short", strings, num_strings, buf, &rc, &stridx, &matchlen); - mu_assert_lf(rc == expect_rc); - mu_assert_lf(stridx == expect_stridx); - mu_assert_lf(matchlen == expect_matchlen); - return 0; -} - -// ---------------------------------------------------------------- -static char* test_dkvp() { - char* test_name = "dkvp"; - char* strings[] = { "=" , ",", "\r\n", "\xff" }; - const int PS_TOKEN = 0; - const int FS_TOKEN = 1; - const int RS_TOKEN = 2; - const int EOF_TOKEN = 3; - int num_strings = sizeof(strings) / sizeof(strings[0]); - char* buf = - "abc=123,def=456\r\n" - "ghi=789\xff"; - char* p = buf; - - printf("%s %s\n", sep, test_name); - int stridx, matchlen, rc; - - parse_trie_t* ptrie = parse_trie_alloc(); - parse_trie_print(ptrie); - for (stridx = 0; stridx < num_strings; stridx++) { - printf("Adding string[%d] = [", stridx); - print_with_unprintables(strings[stridx]); - printf("]\n"); - parse_trie_add_string(ptrie, strings[stridx], stridx); - } - parse_trie_print(ptrie); - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == PS_TOKEN); - mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); - p += matchlen; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == FS_TOKEN); - mu_assert_lf(matchlen == strlen(strings[FS_TOKEN])); - p += matchlen; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == PS_TOKEN); - mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); - p += matchlen; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == RS_TOKEN); - mu_assert_lf(matchlen == strlen(strings[RS_TOKEN])); - p += matchlen; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == PS_TOKEN); - mu_assert_lf(matchlen == strlen(strings[PS_TOKEN])); - p += matchlen; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); mu_assert_lf(rc == FALSE); p++; - - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - mu_assert_lf(rc == TRUE); - mu_assert_lf(stridx == EOF_TOKEN); - mu_assert_lf(matchlen == strlen(strings[EOF_TOKEN])); - p += matchlen; - - return 0; -} - -// ---------------------------------------------------------------- -static char* show_it() { - char* test_name = "show_it"; - char* strings[] = { "=" , ",", "\r\n", "\xff" }; - const int EOF_TOKEN = 3; - int num_strings = sizeof(strings) / sizeof(strings[0]); - char* buf = - "abc=123,def=456\r\n" - "ghi=789\xff"; - char* p = buf; - - printf("%s %s\n", sep, test_name); - int stridx, matchlen, rc; - - parse_trie_t* ptrie = parse_trie_alloc(); - parse_trie_print(ptrie); - for (stridx = 0; stridx < num_strings; stridx++) { - printf("Adding string[%d] = [", stridx); - print_with_unprintables(strings[stridx]); - printf("]\n"); - parse_trie_add_string(ptrie, strings[stridx], stridx); - } - parse_trie_print(ptrie); - - while (TRUE) { - rc = parse_trie_ring_match(ptrie, p, 0, strlen(p), 0xff, &stridx, &matchlen); - if (rc) { - printf("match token %d (", stridx); - print_with_unprintables(strings[stridx]); - printf(")\n"); - - p += matchlen; - if (stridx == EOF_TOKEN) { - break; - } - } else { - char c = *p; - printf("c %c[%02x]\n", isprint((unsigned char)c) ? c : '?', ((unsigned)c)&0xff); - p++; - } - } - - mu_assert_lf(*p == 0); - - return 0; -} - -// ================================================================ -static char* all_tests() { - mu_run_test(test_simplest); - mu_run_test(test_disjoint); - mu_run_test(test_short_long); - mu_run_test(test_long_short); - mu_run_test(test_dkvp); - mu_run_test(show_it); - return 0; -} - -int main(int argc, char** argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_PARSE_TRIE ENTER\n"); - char* result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_PARSE_TRIE: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_peek_file_reader.c b/c/unit_test/test_peek_file_reader.c deleted file mode 100644 index f0aa6953f..000000000 --- a/c/unit_test/test_peek_file_reader.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include -#include "lib/mlrutil.h" -#include "lib/mlr_globals.h" -#include "lib/minunit.h" -#include "lib/mlr_test_util.h" -#include "input/byte_readers.h" -#include "input/peek_file_reader.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char* test_empty() { - byte_reader_t* pbr = string_byte_reader_alloc(); - int ok = pbr->popen_func(pbr, NULL, ""); - mu_assert_lf(ok == TRUE); - - peek_file_reader_t* pfr = pfr_alloc(pbr, 7); - - mu_assert_lf(pfr_peek_char(pfr) == (char)EOF); // char defaults to unsigned on some platforms - mu_assert_lf(pfr_read_char(pfr) == (char)EOF); - - pbr->pclose_func(pbr, NULL); - pfr_free(pfr); - - return NULL; -} - -// ---------------------------------------------------------------- -static char* test_non_empty() { - byte_reader_t* pbr = string_byte_reader_alloc(); - int ok = pbr->popen_func(pbr, - - NULL, - - "ab,cde\n" - "123,4567\n" - ); - mu_assert_lf(ok == TRUE); - - peek_file_reader_t* pfr = pfr_alloc(pbr, 7); - - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == 'a'); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == 'a'); - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == 'b'); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == 'b'); - - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == ','); - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == ','); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == ','); - pfr_print(pfr); pfr_buffer_by(pfr, 5); - pfr_print(pfr); pfr_advance_by(pfr, 5); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '2'); - - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == '3'); - pfr_print(pfr); mu_assert_lf(pfr_peek_char(pfr) == '3'); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '3'); - pfr_print(pfr); pfr_buffer_by(pfr, 5); - pfr_print(pfr); pfr_advance_by(pfr, 5); - pfr_print(pfr); mu_assert_lf(pfr_read_char(pfr) == '\n'); - - pbr->pclose_func(pbr, NULL); - pfr_free(pfr); - - return NULL; -} - -// ================================================================ -static char * run_all_tests() { - mu_run_test(test_empty); - mu_run_test(test_non_empty); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_PEEK_FILE_READER ENTER\n"); - char *result = run_all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_PEEK_FILE_READER: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_rval_evaluators.c b/c/unit_test/test_rval_evaluators.c deleted file mode 100644 index e4a11d34b..000000000 --- a/c/unit_test/test_rval_evaluators.c +++ /dev/null @@ -1,464 +0,0 @@ -#include "lib/mlr_globals.h" -#include "lib/minunit.h" -#include "dsl/rval_evaluators.h" -#include "dsl/function_manager.h" - -// ---------------------------------------------------------------- -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char * test_caps() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test_caps ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - rval_evaluator_t* pnr = rval_evaluator_alloc_from_NR(); - rval_evaluator_t* pfnr = rval_evaluator_alloc_from_FNR(); - rval_evaluator_t* pfilename = rval_evaluator_alloc_from_FILENAME(); - rval_evaluator_t* pfilenum = rval_evaluator_alloc_from_FILENUM(); - - lrec_t* prec = lrec_unbacked_alloc(); - lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); - mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t val = pnr->pprocess_func(pnr->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_INT); - mu_assert_lf(val.u.intv == 888); - - val = pfnr->pprocess_func(pfnr->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_INT); - mu_assert_lf(val.u.intv == 999); - - val = pfilename->pprocess_func(pfilename->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "filename-goes-here")); - - val = pfilenum->pprocess_func(pfilenum->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_INT); - mu_assert_lf(val.u.intv == 123); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_strings() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test_strings ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - rval_evaluator_t* ps = rval_evaluator_alloc_from_field_name("s", TYPE_INFER_STRING_FLOAT_INT); - rval_evaluator_t* pdef = rval_evaluator_alloc_from_string_literal("def"); - rval_evaluator_t* pdot = rval_evaluator_alloc_from_x_ss_func(s_xx_dot_func, ps, pdef); - rval_evaluator_t* ptolower = rval_evaluator_alloc_from_s_s_func(s_s_tolower_func, pdot); - rval_evaluator_t* ptoupper = rval_evaluator_alloc_from_s_s_func(s_s_toupper_func, pdot); - - lrec_t* prec = lrec_unbacked_alloc(); - lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); - mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - lrec_put(prec, "s", "abc", NO_FREE); - printf("lrec s = %s\n", lrec_get(prec, "s")); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t val = ps->pprocess_func(ps->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "abc")); - - val = pdef->pprocess_func(pdef->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "def")); - - val = pdot->pprocess_func(pdot->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "abcdef")); - - val = ptolower->pprocess_func(ptolower->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "abcdef")); - - val = ptoupper->pprocess_func(ptoupper->pvstate, &variables); - printf("[%s] %s\n", mt_describe_type(val.type), mv_alloc_format_val(&val)); - mu_assert_lf(val.type == MT_STRING); - mu_assert_lf(val.u.strv != NULL); - mu_assert_lf(streq(val.u.strv, "ABCDEF")); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_numbers() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test_numbers ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - rval_evaluator_t* p2 = rval_evaluator_alloc_from_numeric_literal("2.0"); - rval_evaluator_t* px = rval_evaluator_alloc_from_field_name("x", TYPE_INFER_STRING_FLOAT_INT); - rval_evaluator_t* plogx = rval_evaluator_alloc_from_f_f_func(f_f_log10_func, px); - rval_evaluator_t* p2logx = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, p2, plogx); - rval_evaluator_t* px2 = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, px, px); - rval_evaluator_t* p4 = rval_evaluator_alloc_from_x_xx_func(x_xx_times_func, p2, p2); - - mlr_dsl_ast_node_t* pxnode = mlr_dsl_ast_node_alloc("x", MD_AST_NODE_TYPE_FIELD_NAME); - mlr_dsl_ast_node_t* plognode = mlr_dsl_ast_node_alloc_zary("log", MD_AST_NODE_TYPE_FUNCTION_CALLSITE); - mlr_dsl_ast_node_t* plogxnode = mlr_dsl_ast_node_append_arg(plognode, pxnode); - mlr_dsl_ast_node_t* p2node = mlr_dsl_ast_node_alloc("2", MD_AST_NODE_TYPE_NUMERIC_LITERAL); - mlr_dsl_ast_node_t* p2logxnode = mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, - p2node, plogxnode); - - fmgr_t* pfmgr = fmgr_alloc(); - rval_evaluator_t* pastr = rval_evaluator_alloc_from_ast(p2logxnode, pfmgr, TYPE_INFER_STRING_FLOAT_INT, 0); - fmgr_resolve_func_callsites(pfmgr); - fmgr_free(pfmgr, &ctx); - - lrec_t* prec = lrec_unbacked_alloc(); - lhmsmv_t* ptyped_overlay = lhmsmv_alloc(); - mlhmmv_root_t* poosvars = mlhmmv_root_alloc(); - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - lrec_put(prec, "x", "4.5", NO_FREE); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t valp2 = p2->pprocess_func(p2->pvstate, &variables); - mv_t valp4 = p4->pprocess_func(p4->pvstate, &variables); - mv_t valpx = px->pprocess_func(px->pvstate, &variables); - mv_t valpx2 = px2->pprocess_func(px2->pvstate, &variables); - mv_t valplogx = plogx->pprocess_func(plogx->pvstate, &variables); - mv_t valp2logx = p2logx->pprocess_func(p2logx->pvstate, &variables); - - printf("lrec x = %s\n", lrec_get(prec, "x")); - printf("newval 2 = %s\n", mv_describe_val(valp2)); - printf("newval 4 = %s\n", mv_describe_val(valp4)); - printf("newval x = %s\n", mv_describe_val(valpx)); - printf("newval x^2 = %s\n", mv_describe_val(valpx2)); - printf("newval log(x) = %s\n", mv_describe_val(valplogx)); - printf("newval 2*log(x) = %s\n", mv_describe_val(valp2logx)); - - mu_assert_lf(valp2.type == MT_FLOAT); - mu_assert_lf(valp4.type == MT_FLOAT); - mu_assert_lf(valpx.type == MT_FLOAT); - mu_assert_lf(valpx2.type == MT_FLOAT); - mu_assert_lf(valplogx.type == MT_FLOAT); - mu_assert_lf(valp2logx.type == MT_FLOAT); - - mu_assert_lf(valp2.u.fltv == 2.0); - mu_assert_lf(valp4.u.fltv == 4.0); - mu_assert_lf(valpx.u.fltv == 4.5); - mu_assert_lf(valpx2.u.fltv == 20.25); - mu_assert_lf(fabs(valplogx.u.fltv - 0.653213) < 1e-5); - mu_assert_lf(fabs(valp2logx.u.fltv - 1.306425) < 1e-5); - - mlr_dsl_ast_node_print(p2logxnode); - printf("newval AST = %s\n", - mv_describe_val(pastr->pprocess_func(pastr->pvstate, &variables))); - printf("\n"); - - lrec_rename(prec, "x", "y", FALSE); - - valp2 = p2->pprocess_func(p2->pvstate, &variables); - valp4 = p4->pprocess_func(p4->pvstate, &variables); - valpx = px->pprocess_func(px->pvstate, &variables); - valpx2 = px2->pprocess_func(px2->pvstate, &variables); - valplogx = plogx->pprocess_func(plogx->pvstate, &variables); - valp2logx = p2logx->pprocess_func(p2logx->pvstate, &variables); - - printf("lrec x = %s\n", lrec_get(prec, "x")); - printf("newval 2 = %s\n", mv_describe_val(valp2)); - printf("newval 4 = %s\n", mv_describe_val(valp4)); - printf("newval x = %s\n", mv_describe_val(valpx)); - printf("newval x^2 = %s\n", mv_describe_val(valpx2)); - printf("newval log(x) = %s\n", mv_describe_val(valplogx)); - printf("newval 2*log(x) = %s\n", mv_describe_val(valp2logx)); - - mu_assert_lf(valp2.type == MT_FLOAT); - mu_assert_lf(valp4.type == MT_FLOAT); - mu_assert_lf(valpx.type == MT_ABSENT); - mu_assert_lf(valpx2.type == MT_ABSENT); - mu_assert_lf(valplogx.type == MT_ABSENT); - mu_assert_lf(valp2logx.type == MT_FLOAT); - - mu_assert_lf(valp2.u.fltv == 2.0); - mu_assert_lf(valp4.u.fltv == 4.0); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_logical_and() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - lrec_t* prec = NULL; - lhmsmv_t* ptyped_overlay = NULL; - mlhmmv_root_t* poosvars = NULL; - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t t = mv_from_bool(TRUE); - mv_t f = mv_from_bool(FALSE); - mv_t a = mv_absent(); - - rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); - rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); - rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); - - rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_and_func(pt, pt); - rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_and_func(pt, pf); - rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_and_func(pt, pa); - rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_and_func(pf, pt); - rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_and_func(pf, pf); - rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_and_func(pf, pa); - rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_and_func(pa, pt); - rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_and_func(pa, pf); - rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_and_func(pa, pa); - - mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); - mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); - mv_t oft = pft->pprocess_func(pft->pvstate, &variables); - mv_t off = pff->pprocess_func(pff->pvstate, &variables); - mv_t oat = pat->pprocess_func(pat->pvstate, &variables); - mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); - mv_t ota = pta->pprocess_func(pta->pvstate, &variables); - mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); - mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); - - mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == TRUE); - mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == FALSE); - mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == FALSE); - mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); - mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); - mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); - mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); - mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); - mu_assert_lf(oaa.type == MT_ABSENT); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_logical_or() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - lrec_t* prec = NULL; - lhmsmv_t* ptyped_overlay = NULL; - mlhmmv_root_t* poosvars = NULL; - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t t = mv_from_bool(TRUE); - mv_t f = mv_from_bool(FALSE); - mv_t a = mv_absent(); - - rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); - rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); - rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); - - rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_or_func(pt, pt); - rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_or_func(pt, pf); - rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_or_func(pt, pa); - rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_or_func(pf, pt); - rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_or_func(pf, pf); - rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_or_func(pf, pa); - rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_or_func(pa, pt); - rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_or_func(pa, pf); - rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_or_func(pa, pa); - - mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); - mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); - mv_t ota = pta->pprocess_func(pta->pvstate, &variables); - mv_t oft = pft->pprocess_func(pft->pvstate, &variables); - mv_t off = pff->pprocess_func(pff->pvstate, &variables); - mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); - mv_t oat = pat->pprocess_func(pat->pvstate, &variables); - mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); - mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); - - mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == TRUE); - mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == TRUE); - mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); - mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == TRUE); - mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); - mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); - mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); - mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); - mu_assert_lf(oaa.type == MT_ABSENT); - - return 0; -} - -// ---------------------------------------------------------------- -static char * test_logical_xor() { - printf("\n"); - printf("-- TEST_RVAL_EVALUATORS test4 ENTER\n"); - context_t ctx = {.nr = 888, .fnr = 999, .filenum = 123, .filename = "filename-goes-here", .force_eof = FALSE, - .ips = "=", .ifs = ",", .irs = "\n", .ops = "=", .ofs = ",", .ors = "\n", .auto_line_term = "\n" - }; - context_t* pctx = &ctx; - - lrec_t* prec = NULL; - lhmsmv_t* ptyped_overlay = NULL; - mlhmmv_root_t* poosvars = NULL; - string_array_t* pregex_captures = NULL; - loop_stack_t* ploop_stack = loop_stack_alloc(); - - variables_t variables = (variables_t) { - .pinrec = prec, - .ptyped_overlay = ptyped_overlay, - .poosvars = poosvars, - .ppregex_captures = &pregex_captures, - .pctx = pctx, - .ploop_stack = ploop_stack, - }; - - mv_t t = mv_from_bool(TRUE); - mv_t f = mv_from_bool(FALSE); - mv_t a = mv_absent(); - - rval_evaluator_t* pt = rval_evaluator_alloc_from_mlrval(&t); - rval_evaluator_t* pf = rval_evaluator_alloc_from_mlrval(&f); - rval_evaluator_t* pa = rval_evaluator_alloc_from_mlrval(&a); - - rval_evaluator_t* ptt = rval_evaluator_alloc_from_b_bb_xor_func(pt, pt); - rval_evaluator_t* ptf = rval_evaluator_alloc_from_b_bb_xor_func(pt, pf); - rval_evaluator_t* pft = rval_evaluator_alloc_from_b_bb_xor_func(pf, pt); - rval_evaluator_t* pff = rval_evaluator_alloc_from_b_bb_xor_func(pf, pf); - rval_evaluator_t* pat = rval_evaluator_alloc_from_b_bb_xor_func(pa, pt); - rval_evaluator_t* paf = rval_evaluator_alloc_from_b_bb_xor_func(pa, pf); - rval_evaluator_t* pta = rval_evaluator_alloc_from_b_bb_xor_func(pt, pa); - rval_evaluator_t* pfa = rval_evaluator_alloc_from_b_bb_xor_func(pf, pa); - rval_evaluator_t* paa = rval_evaluator_alloc_from_b_bb_xor_func(pa, pa); - - mv_t ott = ptt->pprocess_func(ptt->pvstate, &variables); - mv_t otf = ptf->pprocess_func(ptf->pvstate, &variables); - mv_t oft = pft->pprocess_func(pft->pvstate, &variables); - mv_t off = pff->pprocess_func(pff->pvstate, &variables); - mv_t oat = pat->pprocess_func(pat->pvstate, &variables); - mv_t oaf = paf->pprocess_func(paf->pvstate, &variables); - mv_t ota = pta->pprocess_func(pta->pvstate, &variables); - mv_t ofa = pfa->pprocess_func(pfa->pvstate, &variables); - mv_t oaa = paa->pprocess_func(paa->pvstate, &variables); - - mu_assert_lf(ott.type == MT_BOOLEAN); mu_assert_lf(ott.u.boolv == FALSE); - mu_assert_lf(otf.type == MT_BOOLEAN); mu_assert_lf(otf.u.boolv == TRUE); - mu_assert_lf(oft.type == MT_BOOLEAN); mu_assert_lf(oft.u.boolv == TRUE); - mu_assert_lf(off.type == MT_BOOLEAN); mu_assert_lf(off.u.boolv == FALSE); - mu_assert_lf(oat.type == MT_BOOLEAN); mu_assert_lf(oat.u.boolv == TRUE); - mu_assert_lf(oaf.type == MT_BOOLEAN); mu_assert_lf(oaf.u.boolv == FALSE); - mu_assert_lf(ota.type == MT_BOOLEAN); mu_assert_lf(ota.u.boolv == TRUE); - mu_assert_lf(ofa.type == MT_BOOLEAN); mu_assert_lf(ofa.u.boolv == FALSE); - mu_assert_lf(oaa.type == MT_ABSENT); - - return 0; -} - -// ================================================================ -static char * all_tests() { - mu_run_test(test_caps); - mu_run_test(test_strings); - mu_run_test(test_numbers); - mu_run_test(test_logical_and); - mu_run_test(test_logical_or); - mu_run_test(test_logical_xor); - // There is more operator testing in reg_test/run - return 0; -} - -// ---------------------------------------------------------------- -int main(int argc, char **argv) { - mlr_global_init(argv[0], "%lf"); - - printf("TEST_RVAL_EVALUATORS ENTER\n"); - char *result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_RVAL_EVALUATORS: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/unit_test/test_string_builder.c b/c/unit_test/test_string_builder.c deleted file mode 100644 index f44077dcb..000000000 --- a/c/unit_test/test_string_builder.c +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include -#include "lib/minunit.h" -#include "lib/mlr_globals.h" -#include "lib/mlrutil.h" -#include "lib/string_builder.h" - -int tests_run = 0; -int tests_failed = 0; -int assertions_run = 0; -int assertions_failed = 0; - -// ---------------------------------------------------------------- -static char * test_simple() { - string_builder_t* psb = sb_alloc(1); - - sb_init(psb, 1); - mu_assert("error: case 0", streq("", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_char(psb, 'a'); - mu_assert("error: case 1", streq("a", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_char(psb, 'a'); - sb_append_char(psb, 'b'); - mu_assert("error: case 2", streq("ab", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_char(psb, 'a'); - sb_append_char(psb, 'b'); - sb_append_char(psb, 'b'); - sb_append_char(psb, 'c'); - sb_append_char(psb, 'c'); - sb_append_char(psb, 'e'); - mu_assert("error: case 3", streq("abbcce", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_string(psb, ""); - mu_assert("error: case 4", streq("", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_string(psb, "hello"); - mu_assert("error: case 5", streq("hello", sb_finish(psb))); - - sb_init(psb, 1); - sb_append_string(psb, "hello"); - sb_append_char(psb, ','); - sb_append_char(psb, ' '); - sb_append_string(psb, "world"); - sb_append_char(psb, '!'); - mu_assert("error: case 6", streq("hello, world!", sb_finish(psb))); - - sb_init(psb, 2); - sb_append_string(psb, "hello"); - sb_append_char(psb, ','); - sb_append_char(psb, ' '); - sb_append_string(psb, "world"); - sb_append_char(psb, '!'); - mu_assert("error: case 7", streq("hello, world!", sb_finish(psb))); - - sb_init(psb, 32768); - sb_append_string(psb, "hello"); - sb_append_char(psb, ','); - sb_append_char(psb, ' '); - sb_append_string(psb, "world"); - sb_append_char(psb, '!'); - mu_assert("error: case 8", streq("hello, world!", sb_finish(psb))); - - return 0; -} - -// ================================================================ -static char * all_tests() { - mu_run_test(test_simple); - return 0; -} - -int main(int argc, char **argv) { - mlr_global_init(argv[0], NULL); - printf("TEST_STRING_BUILDER ENTER\n"); - char *result = all_tests(); - printf("\n"); - if (result != 0) { - printf("Not all unit tests passed\n"); - } - else { - printf("TEST_STRING_BUILDER: ALL UNIT TESTS PASSED\n"); - } - printf("Tests passed: %d of %d\n", tests_run - tests_failed, tests_run); - printf("Assertions passed: %d of %d\n", assertions_run - assertions_failed, assertions_run); - - return result != 0; -} diff --git a/c/vgrun b/c/vgrun deleted file mode 100755 index 9ad7822ed..000000000 --- a/c/vgrun +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby - -cmd = "valgrind --leak-check=full " -#cmd = "valgrind --leak-check=full --track-origins=yes mlrg" -ARGV.each do |arg| - cmd += " '#{arg}'" -end -cmd += " 2>&1 1> /dev/null | tools/clean-valgrind-output" -puts cmd -system(cmd) diff --git a/c/winpatch.diff b/c/winpatch.diff deleted file mode 100644 index d26174075..000000000 --- a/c/winpatch.diff +++ /dev/null @@ -1,83 +0,0 @@ -diff --git a/c/Makefile.am b/c/Makefile.am -index 29a1e875..f6ecc180 100644 ---- a/c/Makefile.am -+++ b/c/Makefile.am -@@ -19,7 +19,7 @@ mlr_LDADD= \ - lib/libmlr.la \ - parsing/libdsl.la \ - aux/libaux.la \ -- -lm -+ -lm -lpcreposix - - # Other executable variants - -diff --git a/c/aux/Makefile.am b/c/aux/Makefile.am -index 76edb9ae..ff463e47 100644 ---- a/c/aux/Makefile.am -+++ b/c/aux/Makefile.am -@@ -2,7 +2,7 @@ noinst_LTLIBRARIES= libaux.la - libaux_la_SOURCES= aux_entries.c \ - aux_entries.h - --libaux_la_LIBADD= ../lib/libmlr.la \ -+libaux_la_LIBADD= ../lib/libmlr.la - - AM_CPPFLAGS= -I${srcdir}/../ - AM_CFLAGS= -std=gnu99 -diff --git a/c/lib/mlr_arch.h b/c/lib/mlr_arch.h -index 34ef1647..fea3dfef 100644 ---- a/c/lib/mlr_arch.h -+++ b/c/lib/mlr_arch.h -@@ -4,6 +4,8 @@ - #include - #include - -+#define MLR_ON_MSYS2 -+ - // ---------------------------------------------------------------- - // Miller is single-threaded and the file-locking in getc is simply an unneeded - // performance hit, so we intentionally call getc_unlocked(). But for MSYS2 -diff --git a/c/unit_test/Makefile.am b/c/unit_test/Makefile.am -index d529b321..02f4f539 100644 ---- a/c/unit_test/Makefile.am -+++ b/c/unit_test/Makefile.am -@@ -27,7 +27,7 @@ all_ldadd= \ - ../mapping/libmapping.la \ - ../output/liboutput.la \ - ../stream/libstream.la \ -- -lm -+ -lm -lpcreposix - - # Unit-test mains - test_mlrutil_CFLAGS= -std=gnu99 -g ${AM_CFLAGS} -diff --git a/c/winpatch.diff b/c/winpatch.diff -index 332d779c..e69de29b 100644 ---- a/c/winpatch.diff -+++ b/c/winpatch.diff -@@ -1,26 +0,0 @@ --diff --git a/c/Makefile.am b/c/Makefile.am --index 29a1e875..f6ecc180 100644 ----- a/c/Makefile.am --+++ b/c/Makefile.am --@@ -19,7 +19,7 @@ mlr_LDADD= \ -- lib/libmlr.la \ -- parsing/libdsl.la \ -- aux/libaux.la \ --- -lm --+ -lm -lpcreposix -- -- # Other executable variants -- --diff --git a/c/lib/mlr_arch.h b/c/lib/mlr_arch.h --index 97eaf5c8..30fe1d0c 100644 ----- a/c/lib/mlr_arch.h --+++ b/c/lib/mlr_arch.h --@@ -4,6 +4,8 @@ -- #include -- #include -- --+#define MLR_ON_MSYS2 --+ -- // ---------------------------------------------------------------- -- // Miller is single-threaded and the file-locking in getc is simply an unneeded -- // performance hit, so we intentionally call getc_unlocked(). But for MSYS2 diff --git a/c/winrun.bat b/c/winrun.bat deleted file mode 100644 index d82404cd3..000000000 --- a/c/winrun.bat +++ /dev/null @@ -1 +0,0 @@ -set PATH=%PATH%;\msys64\mingw64\bin diff --git a/c/winstall.txt b/c/winstall.txt deleted file mode 100644 index bd06af3bf..000000000 --- a/c/winstall.txt +++ /dev/null @@ -1,3 +0,0 @@ -copy \msys64\miller\miller-git\miller\c\mlr.exe . -copy \msys64\mingw64\bin\libpcreposix-0.dll . -copy \msys64\mingw64\bin\libpcre-1.dll . diff --git a/config.h.in b/config.h.in deleted file mode 100644 index fa7441831..000000000 --- a/config.h.in +++ /dev/null @@ -1,65 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ -#undef YYTEXT_POINTER diff --git a/configure b/configure deleted file mode 100755 index c8ddd91eb..000000000 --- a/configure +++ /dev/null @@ -1,14551 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mlr 5.10.2. -# -# -# Copyright (C) 1992-1996, 1998-2012 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 -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 - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_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="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 -" - 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 - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || 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 -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 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - 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 - test -z "$as_dir" && as_dir=. - 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_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - 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'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$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_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=`$as_echo "$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 || -$as_echo 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_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_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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 || -$as_echo 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" || - { $as_echo "$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 -} - -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 - -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='mlr' -PACKAGE_TARNAME='mlr' -PACKAGE_VERSION='5.10.2' -PACKAGE_STRING='mlr 5.10.2' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -ac_unique_file="c/mlrmain.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -CPP -LT_SYS_LIBRARY_PATH -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -RANLIB -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -LIBTOOL -LEXLIB -LEX_OUTPUT_ROOT -LEX -ac_ct_AR -AR -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -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 -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' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_silent_rules -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 -LT_SYS_LIBRARY_PATH -CPP' - - -# 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 - - # Accept the important Cygnus configure options, so we can diagnose typos. - - 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=`$as_echo "$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=`$as_echo "$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=`$as_echo "$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=`$as_echo "$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. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$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" ;; - *) $as_echo "$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 || -$as_echo 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 mlr 5.10.2 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/mlr] - --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 mlr 5.10.2:";; - 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-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 - LT_SYS_LIBRARY_PATH - User-defined run-time library search path. - CPP C preprocessor - -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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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 guested configure. - 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 - $as_echo "$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 -mlr configure 5.10.2 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 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 - 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\"" -$as_echo "$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 - $as_echo "$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_echo "$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_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$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\"" -$as_echo "$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 - $as_echo "$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_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_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\"" -$as_echo "$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 - $as_echo "$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_echo "$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_run LINENO -# ---------------------- -# Try to link 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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$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_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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#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 () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func -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 mlr $as_me 5.10.2, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_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 - test -z "$as_dir" && as_dir=. - $as_echo "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=`$as_echo "$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=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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 - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$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 - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -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,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$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=`$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`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 - - - -ac_config_headers="$ac_config_headers config.h" - -ac_aux_dir= -for ac_dir in autotools "$srcdir"/autotools; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$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. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -am__api_version='1.15' - -# 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -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+set}" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$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' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "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=`$as_echo "$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 - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --is-lightweight"; then - am_missing_run="$MISSING " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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 (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - '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+set}" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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+set}" = set; 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} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$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='mlr' - VERSION='5.10.2' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# 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 - - -# 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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$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 -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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. -$as_echo "$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; 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\"" -$as_echo "$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 - $as_echo "$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 () -{ - - ; - 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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$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+set}" = set && 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 - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$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 () -{ -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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$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 - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$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_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*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 don't provoke an error unfortunately, instead are silently treated - as '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's necessary to write '\x00'==0 to get something - that's 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 **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_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 - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$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" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; 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= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$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 - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # 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__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac - -for ac_prog in flex lex -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LEX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LEX"; then - ac_cv_prog_LEX="$LEX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - 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_LEX="$ac_prog" - $as_echo "$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 -LEX=$ac_cv_prog_LEX -if test -n "$LEX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 -$as_echo "$LEX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$LEX" && break -done -test -n "$LEX" || LEX=":" - -if test "x$LEX" != "x:"; then - cat >conftest.l <<_ACEOF -%% -a { ECHO; } -b { REJECT; } -c { yymore (); } -d { yyless (1); } -e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ - yyless ((input () != 0)); } -f { unput (yytext[0]); } -. { BEGIN INITIAL; } -%% -#ifdef YYTEXT_POINTER -extern char *yytext; -#endif -int -main (void) -{ - return ! yylex () + ! yywrap (); -} -_ACEOF -{ { ac_try="$LEX conftest.l" -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\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$LEX conftest.l") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 -$as_echo_n "checking lex output file root... " >&6; } -if ${ac_cv_prog_lex_root+:} false; then : - $as_echo_n "(cached) " >&6 -else - -if test -f lex.yy.c; then - ac_cv_prog_lex_root=lex.yy -elif test -f lexyy.c; then - ac_cv_prog_lex_root=lexyy -else - as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 -$as_echo "$ac_cv_prog_lex_root" >&6; } -LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root - -if test -z "${LEXLIB+set}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 -$as_echo_n "checking lex library... " >&6; } -if ${ac_cv_lib_lex+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_save_LIBS=$LIBS - ac_cv_lib_lex='none needed' - for ac_lib in '' -lfl -ll; do - LIBS="$ac_lib $ac_save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -`cat $LEX_OUTPUT_ROOT.c` -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_lex=$ac_lib -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - test "$ac_cv_lib_lex" != 'none needed' && break - done - LIBS=$ac_save_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 -$as_echo "$ac_cv_lib_lex" >&6; } - test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 -$as_echo_n "checking whether yytext is a pointer... " >&6; } -if ${ac_cv_prog_lex_yytext_pointer+:} false; then : - $as_echo_n "(cached) " >&6 -else - # POSIX says lex can declare yytext either as a pointer or an array; the -# default is implementation-dependent. Figure out which it is, since -# not all implementations provide the %pointer and %array declarations. -ac_cv_prog_lex_yytext_pointer=no -ac_save_LIBS=$LIBS -LIBS="$LEXLIB $ac_save_LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #define YYTEXT_POINTER 1 -`cat $LEX_OUTPUT_ROOT.c` -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_prog_lex_yytext_pointer=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_save_LIBS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 -$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } -if test $ac_cv_prog_lex_yytext_pointer = yes; then - -$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h - -fi -rm -f conftest.l $LEX_OUTPUT_ROOT.c - -fi -if test "$LEX" = :; then - LEX=${am_missing_run}flex -fi - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "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*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$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+set}" = set; then : - withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test yes = "$GCC"; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "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 - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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* | netbsdelf*-gnu) - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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=$? - $as_echo "$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=$? - $as_echo "$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.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# 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=$? - $as_echo "$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=$? - $as_echo "$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=$? - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - 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|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$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+set}" = set; 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=$? - $as_echo "$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=$? - $as_echo "$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=$? - $as_echo "$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=$? - $as_echo "$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" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$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=$? - $as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - test -z "$as_dir" && as_dir=. - 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" - $as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$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_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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "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 ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-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. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # 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. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # 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 - # 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$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. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # 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. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # 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 - # 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_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=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 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - 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 : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - - -# Set options - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; 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 - enable_shared=yes -fi - - - - - - - - - - # Check whether --enable-static was given. -if test "${enable_static+set}" = set; 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 - enable_static=yes -fi - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; 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 - pic_mode=default -fi - - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; 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 - enable_fast_install=yes -fi - - - - - - - - - shared_archive_member_spec= -case $host,$enable_shared in -power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } - -# Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; 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 - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_with_aix_soname=aix -fi - - with_aix_soname=$lt_cv_with_aix_soname -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "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* - - -## 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... -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 - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$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\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test yes = "$lt_cv_prog_compiler_static_works"; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$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 - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "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 - ;; - linux* | k*bsd*-gnu | gnu*) - link_all_deplibs=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* | netbsdelf*-gnu) - 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 ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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$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 ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - 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$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) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$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. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$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 - link_all_deplibs=no - 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* | netbsdelf*-gnu) - 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 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$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. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $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=$? - $as_echo "$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=$? - $as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "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 ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 () -{ - - ; - 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$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' - ;; - -netbsdelf*-gnu) - version_type=linux - 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='NetBSD ld.elf_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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$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 - - 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_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$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 - 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_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$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_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$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" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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=$? - $as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$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\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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=$? - $as_echo "$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 -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$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= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "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" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "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" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$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: - - - -# TODO: better source handling for lemon sources? -# perhaps lemon can be improved to survive being called from the build dir -ac_config_links="$ac_config_links c/parsing/lempar.c:c/parsing/lempar.c" - -ac_config_links="$ac_config_links c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y" - - -ac_config_files="$ac_config_files Makefile c/cli/Makefile c/containers/Makefile c/parsing/Makefile c/dsl/Makefile c/experimental/Makefile c/input/Makefile c/lib/Makefile c/mapping/Makefile c/output/Makefile c/stream/Makefile c/auxents/Makefile c/unit_test/Makefile c/reg_test/Makefile c/reg_test/expected/Makefile c/reg_test/input/Makefile c/reg_test/input/rfc-csv/Makefile c/reg_test/input/comments/Makefile c/Makefile man/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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$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+set}" = set || &/ - 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$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 - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$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=`$as_echo "$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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "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 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -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" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$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 -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 - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -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 - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# 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 - test -z "$as_dir" && as_dir=. - 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 - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# 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 - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$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_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_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 || -$as_echo 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 - -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 - -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=`$as_echo "$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 || -$as_echo 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 mlr $as_me 5.10.2, which was -generated by GNU Autoconf 2.69. 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_links="$ac_config_links" -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 links: -$config_links - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -mlr config.status 5.10.2 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 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 ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$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=`$as_echo "$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 ) - $as_echo "$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 - \$as_echo "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 - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - - -# 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"`' -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"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $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"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $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 SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -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" ;; - "c/parsing/lempar.c") CONFIG_LINKS="$CONFIG_LINKS c/parsing/lempar.c:c/parsing/lempar.c" ;; - "c/parsing/mlr_dsl_parse.y") CONFIG_LINKS="$CONFIG_LINKS c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "c/cli/Makefile") CONFIG_FILES="$CONFIG_FILES c/cli/Makefile" ;; - "c/containers/Makefile") CONFIG_FILES="$CONFIG_FILES c/containers/Makefile" ;; - "c/parsing/Makefile") CONFIG_FILES="$CONFIG_FILES c/parsing/Makefile" ;; - "c/dsl/Makefile") CONFIG_FILES="$CONFIG_FILES c/dsl/Makefile" ;; - "c/experimental/Makefile") CONFIG_FILES="$CONFIG_FILES c/experimental/Makefile" ;; - "c/input/Makefile") CONFIG_FILES="$CONFIG_FILES c/input/Makefile" ;; - "c/lib/Makefile") CONFIG_FILES="$CONFIG_FILES c/lib/Makefile" ;; - "c/mapping/Makefile") CONFIG_FILES="$CONFIG_FILES c/mapping/Makefile" ;; - "c/output/Makefile") CONFIG_FILES="$CONFIG_FILES c/output/Makefile" ;; - "c/stream/Makefile") CONFIG_FILES="$CONFIG_FILES c/stream/Makefile" ;; - "c/auxents/Makefile") CONFIG_FILES="$CONFIG_FILES c/auxents/Makefile" ;; - "c/unit_test/Makefile") CONFIG_FILES="$CONFIG_FILES c/unit_test/Makefile" ;; - "c/reg_test/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/Makefile" ;; - "c/reg_test/expected/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/expected/Makefile" ;; - "c/reg_test/input/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/Makefile" ;; - "c/reg_test/input/rfc-csv/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/rfc-csv/Makefile" ;; - "c/reg_test/input/comments/Makefile") CONFIG_FILES="$CONFIG_FILES c/reg_test/input/comments/Makefile" ;; - "c/Makefile") CONFIG_FILES="$CONFIG_FILES c/Makefile" ;; - "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/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+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links - test "${CONFIG_COMMANDS+set}" = set || 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 :L $CONFIG_LINKS :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=`$as_echo "$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 '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$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 || -$as_echo 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$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@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$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"; } && - { $as_echo "$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 -$as_echo "$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 - { - $as_echo "/* $configure_input */" \ - && 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$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 - $as_echo "/* $configure_input */" \ - && 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 || -$as_echo 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 - ;; - :L) - # - # CONFIG_LINK - # - - if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then - : - else - # Prefer the file from the source tree if names are identical. - if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then - ac_source=$srcdir/$ac_source - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 -$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - - if test ! -r "$ac_source"; then - as_fn_error $? "$ac_source: file not found" "$LINENO" 5 - fi - rm -f "$ac_file" - - # Try a relative symlink, then a hard link, then a copy. - case $ac_source in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$ac_source" "$ac_file" 2>/dev/null || - cp -p "$ac_source" "$ac_file" || - as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 - fi - ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$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. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "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 -# 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 - -# 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 - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# 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 - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# 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 - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 14d96d169..000000000 --- a/configure.ac +++ /dev/null @@ -1,42 +0,0 @@ -AC_PREREQ([2.60]) -# Manually increment on updates to https://github.com/johnkerl/miller/releases -AC_INIT([mlr],[5.10.2-dev]) -AC_CONFIG_SRCDIR([c/mlrmain.c]) -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_AUX_DIR([autotools]) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE - -AC_CANONICAL_HOST -AC_PROG_CC -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) -AM_PROG_LEX -AC_EXEEXT -LT_INIT - -# TODO: better source handling for lemon sources? -# perhaps lemon can be improved to survive being called from the build dir -AC_CONFIG_LINKS([c/parsing/lempar.c:c/parsing/lempar.c]) -AC_CONFIG_LINKS([c/parsing/mlr_dsl_parse.y:c/parsing/mlr_dsl_parse.y]) - -AC_CONFIG_FILES([Makefile - c/cli/Makefile - c/containers/Makefile - c/parsing/Makefile - c/dsl/Makefile - c/experimental/Makefile - c/input/Makefile - c/lib/Makefile - c/mapping/Makefile - c/output/Makefile - c/stream/Makefile - c/auxents/Makefile - c/unit_test/Makefile - c/reg_test/Makefile - c/reg_test/expected/Makefile - c/reg_test/input/Makefile - c/reg_test/input/rfc-csv/Makefile - c/reg_test/input/comments/Makefile - c/Makefile - man/Makefile]) -AC_OUTPUT diff --git a/docs/.vimrc b/docs/.vimrc deleted file mode 100644 index 139ec46ba..000000000 --- a/docs/.vimrc +++ /dev/null @@ -1,3 +0,0 @@ -map \f :w:!clear;make html -map \d :w:!clear;make clean html -map \z :w:%!h2rfoo diff --git a/docs/10-1.sh b/docs/10-1.sh deleted file mode 100755 index 749a161c7..000000000 --- a/docs/10-1.sh +++ /dev/null @@ -1,2 +0,0 @@ -grep op=cache log.txt \ - | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type diff --git a/docs/10-2.sh b/docs/10-2.sh deleted file mode 100755 index 8e6fc580b..000000000 --- a/docs/10-2.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr --from log.txt --opprint \ - filter 'is_present($batch_size)' \ - then step -a delta -f time,num_filtered \ - then sec2gmt time - diff --git a/docs/10min.rst b/docs/10min.rst deleted file mode 100644 index 4d823dff2..000000000 --- a/docs/10min.rst +++ /dev/null @@ -1,497 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Miller in 10 minutes -==================== - -CSV-file examples -^^^^^^^^^^^^^^^^^ - -Suppose you have this CSV data file (`example.csv <./example.csv>`_): - -.. code-block:: none - :emphasize-lines: 1,1 - - cat example.csv - color,shape,flag,index,quantity,rate - yellow,triangle,true,11,43.6498,9.8870 - red,square,true,15,79.2778,0.0130 - red,circle,true,16,13.8103,2.9010 - red,square,false,48,77.5542,7.4670 - purple,triangle,false,51,81.2290,8.5910 - red,square,false,64,77.1991,9.5310 - purple,triangle,false,65,80.1405,5.8240 - yellow,circle,true,73,63.9785,4.2370 - yellow,circle,true,87,63.5058,8.3350 - purple,square,false,91,72.3735,8.2430 - -``mlr cat`` is like cat -- it passes the data through unmodified: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cat example.csv - color,shape,flag,index,quantity,rate - yellow,triangle,true,11,43.6498,9.8870 - red,square,true,15,79.2778,0.0130 - red,circle,true,16,13.8103,2.9010 - red,square,false,48,77.5542,7.4670 - purple,triangle,false,51,81.2290,8.5910 - red,square,false,64,77.1991,9.5310 - purple,triangle,false,65,80.1405,5.8240 - yellow,circle,true,73,63.9785,4.2370 - yellow,circle,true,87,63.5058,8.3350 - purple,square,false,91,72.3735,8.2430 - -but it can also do format conversion (here, you can pretty-print in tabular format): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cat example.csv - color shape flag index quantity rate - yellow triangle true 11 43.6498 9.8870 - red square true 15 79.2778 0.0130 - red circle true 16 13.8103 2.9010 - red square false 48 77.5542 7.4670 - purple triangle false 51 81.2290 8.5910 - red square false 64 77.1991 9.5310 - purple triangle false 65 80.1405 5.8240 - yellow circle true 73 63.9785 4.2370 - yellow circle true 87 63.5058 8.3350 - purple square false 91 72.3735 8.2430 - -``mlr head`` and ``mlr tail`` count records rather than lines. Whethere you're getting the first few records or the last few, the CSV header is included either way: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv head -n 4 example.csv - color,shape,flag,index,quantity,rate - yellow,triangle,true,11,43.6498,9.8870 - red,square,true,15,79.2778,0.0130 - red,circle,true,16,13.8103,2.9010 - red,square,false,48,77.5542,7.4670 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv tail -n 4 example.csv - color,shape,flag,index,quantity,rate - purple,triangle,false,65,80.1405,5.8240 - yellow,circle,true,73,63.9785,4.2370 - yellow,circle,true,87,63.5058,8.3350 - purple,square,false,91,72.3735,8.2430 - -You can sort primarily alphabetically on one field, then secondarily numerically descending on another field: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint sort -f shape -nr index example.csv - color shape flag index quantity rate - yellow circle true 87 63.5058 8.3350 - yellow circle true 73 63.9785 4.2370 - red circle true 16 13.8103 2.9010 - purple square false 91 72.3735 8.2430 - red square false 64 77.1991 9.5310 - red square false 48 77.5542 7.4670 - red square true 15 79.2778 0.0130 - purple triangle false 65 80.1405 5.8240 - purple triangle false 51 81.2290 8.5910 - yellow triangle true 11 43.6498 9.8870 - -You can use ``cut`` to retain only specified fields, in the same order they appeared in the input data: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cut -f flag,shape example.csv - shape flag - triangle true - square true - circle true - square false - triangle false - square false - triangle false - circle true - circle true - square false - -You can also use ``cut -o`` to retain only specified fields in your preferred order: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cut -o -f flag,shape example.csv - flag shape - true triangle - true square - true circle - false square - false triangle - false square - false triangle - true circle - true circle - false square - -You can use ``cut -x`` to omit fields you don't care about: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cut -x -f flag,shape example.csv - color index quantity rate - yellow 11 43.6498 9.8870 - red 15 79.2778 0.0130 - red 16 13.8103 2.9010 - red 48 77.5542 7.4670 - purple 51 81.2290 8.5910 - red 64 77.1991 9.5310 - purple 65 80.1405 5.8240 - yellow 73 63.9785 4.2370 - yellow 87 63.5058 8.3350 - purple 91 72.3735 8.2430 - -You can use ``filter`` to keep only records you care about: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint filter '$color == "red"' example.csv - color shape flag index quantity rate - red square true 15 79.2778 0.0130 - red circle true 16 13.8103 2.9010 - red square false 48 77.5542 7.4670 - red square false 64 77.1991 9.5310 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint filter '$color == "red" && $flag == 1' example.csv - -You can use ``put`` to create new fields which are computed from other fields: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$ratio = $quantity / $rate; $color_shape = $color . "_" . $shape' example.csv - color shape flag index quantity rate ratio color_shape - yellow triangle true 11 43.6498 9.8870 4.414868 yellow_triangle - red square true 15 79.2778 0.0130 6098.292308 red_square - red circle true 16 13.8103 2.9010 4.760531 red_circle - red square false 48 77.5542 7.4670 10.386260 red_square - purple triangle false 51 81.2290 8.5910 9.455127 purple_triangle - red square false 64 77.1991 9.5310 8.099790 red_square - purple triangle false 65 80.1405 5.8240 13.760388 purple_triangle - yellow circle true 73 63.9785 4.2370 15.099953 yellow_circle - yellow circle true 87 63.5058 8.3350 7.619172 yellow_circle - purple square false 91 72.3735 8.2430 8.779995 purple_square - -Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index. Use ``$[[3]]`` to access the name of field 3 or ``$[[[3]]]`` to access the value of field 3: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$[[3]] = "NEW"' example.csv - color shape NEW index quantity rate - yellow triangle true 11 43.6498 9.8870 - red square true 15 79.2778 0.0130 - red circle true 16 13.8103 2.9010 - red square false 48 77.5542 7.4670 - purple triangle false 51 81.2290 8.5910 - red square false 64 77.1991 9.5310 - purple triangle false 65 80.1405 5.8240 - yellow circle true 73 63.9785 4.2370 - yellow circle true 87 63.5058 8.3350 - purple square false 91 72.3735 8.2430 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$[[[3]]] = "NEW"' example.csv - color shape flag index quantity rate - yellow triangle NEW 11 43.6498 9.8870 - red square NEW 15 79.2778 0.0130 - red circle NEW 16 13.8103 2.9010 - red square NEW 48 77.5542 7.4670 - purple triangle NEW 51 81.2290 8.5910 - red square NEW 64 77.1991 9.5310 - purple triangle NEW 65 80.1405 5.8240 - yellow circle NEW 73 63.9785 4.2370 - yellow circle NEW 87 63.5058 8.3350 - purple square NEW 91 72.3735 8.2430 - -JSON-file examples -^^^^^^^^^^^^^^^^^^ - -OK, CSV and pretty-print are fine. But Miller can also convert between a few other formats -- let's take a look at JSON output: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv - { "color": "yellow", "shape": "TRIANGLE", "flag": true, "index": 11, "quantity": 43.6498, "rate": 9.8870, "ratio": 4.414868 } - { "color": "red", "shape": "SQUARE", "flag": true, "index": 15, "quantity": 79.2778, "rate": 0.0130, "ratio": 6098.292308 } - { "color": "red", "shape": "CIRCLE", "flag": true, "index": 16, "quantity": 13.8103, "rate": 2.9010, "ratio": 4.760531 } - { "color": "red", "shape": "SQUARE", "flag": false, "index": 48, "quantity": 77.5542, "rate": 7.4670, "ratio": 10.386260 } - { "color": "purple", "shape": "TRIANGLE", "flag": false, "index": 51, "quantity": 81.2290, "rate": 8.5910, "ratio": 9.455127 } - { "color": "red", "shape": "SQUARE", "flag": false, "index": 64, "quantity": 77.1991, "rate": 9.5310, "ratio": 8.099790 } - { "color": "purple", "shape": "TRIANGLE", "flag": false, "index": 65, "quantity": 80.1405, "rate": 5.8240, "ratio": 13.760388 } - { "color": "yellow", "shape": "CIRCLE", "flag": true, "index": 73, "quantity": 63.9785, "rate": 4.2370, "ratio": 15.099953 } - { "color": "yellow", "shape": "CIRCLE", "flag": true, "index": 87, "quantity": 63.5058, "rate": 8.3350, "ratio": 7.619172 } - { "color": "purple", "shape": "SQUARE", "flag": false, "index": 91, "quantity": 72.3735, "rate": 8.2430, "ratio": 8.779995 } - -Or, JSON output with vertical-formatting flags: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojsonx tail -n 2 example.csv - { - "color": "yellow", - "shape": "circle", - "flag": true, - "index": 87, - "quantity": 63.5058, - "rate": 8.3350 - } - { - "color": "purple", - "shape": "square", - "flag": false, - "index": 91, - "quantity": 72.3735, - "rate": 8.2430 - } - -Sorts and stats -^^^^^^^^^^^^^^^ - -Now suppose you want to sort the data on a given column, *and then* take the top few in that ordering. You can use Miller's ``then`` feature to pipe commands together. - -Here are the records with the top three ``index`` values: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint sort -f shape -nr index then head -n 3 example.csv - color shape flag index quantity rate - yellow circle true 87 63.5058 8.3350 - yellow circle true 73 63.9785 4.2370 - red circle true 16 13.8103 2.9010 - -Lots of Miller commands take a ``-g`` option for group-by: here, ``head -n 1 -g shape`` outputs the first record for each distinct value of the ``shape`` field. This means we're finding the record with highest ``index`` field for each distinct ``shape`` field: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint sort -f shape -nr index then head -n 1 -g shape example.csv - color shape flag index quantity rate - yellow circle true 87 63.5058 8.3350 - purple square false 91 72.3735 8.2430 - purple triangle false 65 80.1405 5.8240 - -Statistics can be computed with or without group-by field(s): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape - shape quantity_count quantity_min quantity_mean quantity_max - triangle 3 43.649800 68.339767 81.229000 - square 4 72.373500 76.601150 79.277800 - circle 3 13.810300 47.098200 63.978500 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape,color - shape color quantity_count quantity_min quantity_mean quantity_max - triangle yellow 1 43.649800 43.649800 43.649800 - square red 3 77.199100 78.010367 79.277800 - circle red 1 13.810300 13.810300 13.810300 - triangle purple 2 80.140500 80.684750 81.229000 - circle yellow 2 63.505800 63.742150 63.978500 - square purple 1 72.373500 72.373500 72.373500 - -If your output has a lot of columns, you can use XTAB format to line things up vertically for you instead: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --oxtab --from example.csv stats1 -a p0,p10,p25,p50,p75,p90,p99,p100 -f rate - rate_p0 0.013000 - rate_p10 2.901000 - rate_p25 4.237000 - rate_p50 8.243000 - rate_p75 8.591000 - rate_p90 9.887000 - rate_p99 9.887000 - rate_p100 9.887000 - -.. _10min-choices-for-printing-to-files: - -Choices for printing to files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Often we want to print output to the screen. Miller does this by default, as we've seen in the previous examples. - -Sometimes we want to print output to another file: just use **> outputfilenamegoeshere** at the end of your command: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --icsv --opprint cat example.csv > newfile.csv - # Output goes to the new file; - # nothing is printed to the screen. - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.csv - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Other times we just want our files to be **changed in-place**: just use **mlr -I**: - -.. code-block:: none - :emphasize-lines: 1,1 - - % cp example.csv newfile.txt - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.txt - color,shape,flag,index,quantity,rate - yellow,triangle,1,11,43.6498,9.8870 - red,square,1,15,79.2778,0.0130 - red,circle,1,16,13.8103,2.9010 - red,square,0,48,77.5542,7.4670 - purple,triangle,0,51,81.2290,8.5910 - red,square,0,64,77.1991,9.5310 - purple,triangle,0,65,80.1405,5.8240 - yellow,circle,1,73,63.9785,4.2370 - yellow,circle,1,87,63.5058,8.3350 - purple,square,0,91,72.3735,8.2430 - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr -I --icsv --opprint cat newfile.txt - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.txt - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Also using ``mlr -I`` you can bulk-operate on lots of files: e.g.: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -I --csv cut -x -f unwanted_column_name *.csv - -If you like, you can first copy off your original data somewhere else, before doing in-place operations. - -Lastly, using ``tee`` within ``put``, you can split your input data into separate files per one or more field names: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*' - -.. code-block:: none - :emphasize-lines: 1,1 - - cat circle.csv - color,shape,flag,index,quantity,rate - red,circle,true,16,13.8103,2.9010 - yellow,circle,true,73,63.9785,4.2370 - yellow,circle,true,87,63.5058,8.3350 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat square.csv - color,shape,flag,index,quantity,rate - red,square,true,15,79.2778,0.0130 - red,square,false,48,77.5542,7.4670 - red,square,false,64,77.1991,9.5310 - purple,square,false,91,72.3735,8.2430 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat triangle.csv - color,shape,flag,index,quantity,rate - yellow,triangle,true,11,43.6498,9.8870 - purple,triangle,false,51,81.2290,8.5910 - purple,triangle,false,65,80.1405,5.8240 - -Other-format examples -^^^^^^^^^^^^^^^^^^^^^ - -What's a CSV file, really? It's an array of rows, or *records*, each being a list of key-value pairs, or *fields*: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line. - -For example, if you have: - -.. code-block:: none - - shape,flag,index - circle,1,24 - square,0,36 - -then that's a way of saying: - -.. code-block:: none - - shape=circle,flag=1,index=24 - shape=square,flag=0,index=36 - -Data written this way are called **DKVP**, for *delimited key-value pairs*. - -We've also already seen other ways to write the same data: - -.. code-block:: none - - CSV PPRINT JSON - shape,flag,index shape flag index [ - circle,1,24 circle 1 24 { - square,0,36 square 0 36 "shape": "circle", - "flag": 1, - "index": 24 - }, - DKVP XTAB { - shape=circle,flag=1,index=24 shape circle "shape": "square", - shape=square,flag=0,index=36 flag 1 "flag": 0, - index 24 "index": 36 - } - shape square ] - flag 0 - index 36 - -Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format. diff --git a/docs/10min.rst.in b/docs/10min.rst.in deleted file mode 100644 index 0779f780f..000000000 --- a/docs/10min.rst.in +++ /dev/null @@ -1,228 +0,0 @@ -Miller in 10 minutes -==================== - -CSV-file examples -^^^^^^^^^^^^^^^^^ - -Suppose you have this CSV data file (`example.csv <./example.csv>`_): - -POKI_RUN_COMMAND{{cat example.csv}}HERE - -``mlr cat`` is like cat -- it passes the data through unmodified: - -POKI_RUN_COMMAND{{mlr --csv cat example.csv}}HERE - -but it can also do format conversion (here, you can pretty-print in tabular format): - -POKI_RUN_COMMAND{{mlr --icsv --opprint cat example.csv}}HERE - -``mlr head`` and ``mlr tail`` count records rather than lines. Whethere you're getting the first few records or the last few, the CSV header is included either way: - -POKI_RUN_COMMAND{{mlr --csv head -n 4 example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv tail -n 4 example.csv}}HERE - -You can sort primarily alphabetically on one field, then secondarily numerically descending on another field: - -POKI_RUN_COMMAND{{mlr --icsv --opprint sort -f shape -nr index example.csv}}HERE - -You can use ``cut`` to retain only specified fields, in the same order they appeared in the input data: - -POKI_RUN_COMMAND{{mlr --icsv --opprint cut -f flag,shape example.csv}}HERE - -You can also use ``cut -o`` to retain only specified fields in your preferred order: - -POKI_RUN_COMMAND{{mlr --icsv --opprint cut -o -f flag,shape example.csv}}HERE - -You can use ``cut -x`` to omit fields you don't care about: - -POKI_RUN_COMMAND{{mlr --icsv --opprint cut -x -f flag,shape example.csv}}HERE - -You can use ``filter`` to keep only records you care about: - -POKI_RUN_COMMAND{{mlr --icsv --opprint filter '$color == "red"' example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint filter '$color == "red" && $flag == 1' example.csv}}HERE - -You can use ``put`` to create new fields which are computed from other fields: - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$ratio = $quantity / $rate; $color_shape = $color . "_" . $shape' example.csv}}HERE - -Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index. Use ``$[[3]]`` to access the name of field 3 or ``$[[[3]]]`` to access the value of field 3: - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$[[3]] = "NEW"' example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$[[[3]]] = "NEW"' example.csv}}HERE - -JSON-file examples -^^^^^^^^^^^^^^^^^^ - -OK, CSV and pretty-print are fine. But Miller can also convert between a few other formats -- let's take a look at JSON output: - -POKI_RUN_COMMAND{{mlr --icsv --ojson put '$ratio = $quantity/$rate; $shape = toupper($shape)' example.csv}}HERE - -Or, JSON output with vertical-formatting flags: - -POKI_RUN_COMMAND{{mlr --icsv --ojsonx tail -n 2 example.csv}}HERE - -Sorts and stats -^^^^^^^^^^^^^^^ - -Now suppose you want to sort the data on a given column, *and then* take the top few in that ordering. You can use Miller's ``then`` feature to pipe commands together. - -Here are the records with the top three ``index`` values: - -POKI_RUN_COMMAND{{mlr --icsv --opprint sort -f shape -nr index then head -n 3 example.csv}}HERE - -Lots of Miller commands take a ``-g`` option for group-by: here, ``head -n 1 -g shape`` outputs the first record for each distinct value of the ``shape`` field. This means we're finding the record with highest ``index`` field for each distinct ``shape`` field: - -POKI_RUN_COMMAND{{mlr --icsv --opprint sort -f shape -nr index then head -n 1 -g shape example.csv}}HERE - -Statistics can be computed with or without group-by field(s): - -POKI_RUN_COMMAND{{mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint --from example.csv stats1 -a count,min,mean,max -f quantity -g shape,color}}HERE - -If your output has a lot of columns, you can use XTAB format to line things up vertically for you instead: - -POKI_RUN_COMMAND{{mlr --icsv --oxtab --from example.csv stats1 -a p0,p10,p25,p50,p75,p90,p99,p100 -f rate}}HERE - -.. _10min-choices-for-printing-to-files: - -Choices for printing to files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Often we want to print output to the screen. Miller does this by default, as we've seen in the previous examples. - -Sometimes we want to print output to another file: just use **> outputfilenamegoeshere** at the end of your command: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --icsv --opprint cat example.csv > newfile.csv - # Output goes to the new file; - # nothing is printed to the screen. - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.csv - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Other times we just want our files to be **changed in-place**: just use **mlr -I**: - -.. code-block:: none - :emphasize-lines: 1,1 - - % cp example.csv newfile.txt - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.txt - color,shape,flag,index,quantity,rate - yellow,triangle,1,11,43.6498,9.8870 - red,square,1,15,79.2778,0.0130 - red,circle,1,16,13.8103,2.9010 - red,square,0,48,77.5542,7.4670 - purple,triangle,0,51,81.2290,8.5910 - red,square,0,64,77.1991,9.5310 - purple,triangle,0,65,80.1405,5.8240 - yellow,circle,1,73,63.9785,4.2370 - yellow,circle,1,87,63.5058,8.3350 - purple,square,0,91,72.3735,8.2430 - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr -I --icsv --opprint cat newfile.txt - -.. code-block:: none - :emphasize-lines: 1,1 - - % cat newfile.txt - color shape flag index quantity rate - yellow triangle 1 11 43.6498 9.8870 - red square 1 15 79.2778 0.0130 - red circle 1 16 13.8103 2.9010 - red square 0 48 77.5542 7.4670 - purple triangle 0 51 81.2290 8.5910 - red square 0 64 77.1991 9.5310 - purple triangle 0 65 80.1405 5.8240 - yellow circle 1 73 63.9785 4.2370 - yellow circle 1 87 63.5058 8.3350 - purple square 0 91 72.3735 8.2430 - -Also using ``mlr -I`` you can bulk-operate on lots of files: e.g.: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -I --csv cut -x -f unwanted_column_name *.csv - -If you like, you can first copy off your original data somewhere else, before doing in-place operations. - -Lastly, using ``tee`` within ``put``, you can split your input data into separate files per one or more field names: - -POKI_RUN_COMMAND{{mlr --csv --from example.csv put -q 'tee > $shape.".csv", $*'}}HERE - -POKI_RUN_COMMAND{{cat circle.csv}}HERE - -POKI_RUN_COMMAND{{cat square.csv}}HERE - -POKI_RUN_COMMAND{{cat triangle.csv}}HERE - -Other-format examples -^^^^^^^^^^^^^^^^^^^^^ - -What's a CSV file, really? It's an array of rows, or *records*, each being a list of key-value pairs, or *fields*: for CSV it so happens that all the keys are shared in the header line and the values vary data line by data line. - -For example, if you have: - -.. code-block:: none - - shape,flag,index - circle,1,24 - square,0,36 - -then that's a way of saying: - -.. code-block:: none - - shape=circle,flag=1,index=24 - shape=square,flag=0,index=36 - -Data written this way are called **DKVP**, for *delimited key-value pairs*. - -We've also already seen other ways to write the same data: - -.. code-block:: none - - CSV PPRINT JSON - shape,flag,index shape flag index [ - circle,1,24 circle 1 24 { - square,0,36 square 0 36 "shape": "circle", - "flag": 1, - "index": 24 - }, - DKVP XTAB { - shape=circle,flag=1,index=24 shape circle "shape": "square", - shape=square,flag=0,index=36 flag 1 "flag": 0, - index 24 "index": 36 - } - shape square ] - flag 0 - index 36 - -Anything we can do with CSV input data, we can do with any other format input data. And you can read from one format, do any record-processing, and output to the same format as the input, or to a different output format. diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 35e7bb3f7..000000000 --- a/docs/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# Minimal makefile for Sphinx documentation -# -# Note: run this after make in the ../c directory and make in the ../man directory -# since ../c/mlr is used to autogenerate ../man/manpage.txt which is used in this directory. -# See also https://miller.readthedocs.io/en/latest/build.html#creating-a-new-release-for-developers - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Respective MANPATH entries would include /usr/local/share/man or $HOME/man. -INSTALLDIR=/usr/local/share/man/man1 -INSTALLHOME=$(HOME)/man/man1 - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - ./genrst - $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md index 46e48e72b..7052a267d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,40 +1,53 @@ -# Miller Sphinx docs +# Miller docs -## Why use Sphinx +## Why use Mkdocs * Connects to https://miller.readthedocs.io so people can get their docmods onto the web instead of the self-hosted https://johnkerl.org/miller/doc. Thanks to @pabloab for the great advice! -* More standard look and feel -- lots of people use readthedocs for other things so this should feel familiar -* We get a Search feature for free +* More standard look and feel -- lots of people use readthedocs for other things so this should feel familiar. +* We get a Search feature for free. +* Mkdocs vs Sphinx: these are similar tools, but I find that I more easily get better desktop+mobile formatting using Mkdocs. ## Contributing -* You need `pip install sphinx` (or `pip3 install sphinx`) -* The docs include lots of live code examples which will be invoked using `mlr` which must be somewhere in your `$PATH` -* Clone https://github.com/johnkerl/miller and cd into `docs/` within your clone -* Editing loop: - * Edit `*.rst.in` - * Run `make html` - * Either `open _build/html/index.html` (MacOS) or point your browser to `file:///path/to/your/clone/of/miller/docs/_build/html/index.html` +* You need `pip install mkdocs` (or `pip3 install mkdocs`) as well as `pip install mkdocs-material`. +* The docs include lots of live code examples which will be invoked using `mlr` which must be somewhere in your `$PATH`. +* Clone https://github.com/johnkerl/miller and cd into `docs/` within your clone. +* Overview of flow: + * `docs/src` has `*.md.in` files containing markdown as well as directives for auto-generating code samples. + * A `genmds` script reads `docs/src/*.md.in` and writes `docs/src/*.md`. + * The `mkdocs build` tools reads `docs/src/*.md` and writes HTML files in `docs/site`. +* Quick-editing loop: + * In one terminal, cd to this directory and leave `mkdocs serve` running. + * In another terminal, cd to the `src` subdirectory of `docs` and edit `*.md.in`. + * Run `genmds` to re-create all the `*.md` files, or `genmds foo.md.in` to just re-create the `foo.md.in` file you just edited. + * In your browser, visit http://127.0.0.1:8000 + * This doesn't write HTML in `docs/site`; HTML is served up directly in the browser -- this is nice for previewing interactive edits +* For-publish editing loop: + * Leave one terminal open as a place you will run `mkdocs build` + * In one terminal, cd to the `src` subdirectory of `docs` and edit `*.md.in`. + * Generate `src/*.md` from `src/*.md.in`, and then from that generate the `site/*/*.html`: + * Run `genmds` to re-create all the `*.md` files, or `genmds foo.md.in` to just re-create the `foo.md.in` file you just edited. + * In the first terminal, run `mkdocs build` which will populate the `site` directory. + * See also [./regen.sh](./regen.sh) which combines the `genmds` and `mkdocs build` steps. + * This does write HTML in `docs/site`. + * In your browser, visit `file:///your/path/to/miller/docs/site/index.html` + * Link-checking: + * `sudo pip3 install git+https://github.com/linkchecker/linkchecker.git` + * `cd site` and `linkchecker .` * Submitting: - * `git add` your modified files, `git commit`, `git push`, and submit a PR at https://github.com/johnkerl/miller -* A nice markup reference: https://www.sphinx-doc.org/en/1.8/usage/restructuredtext/basics.html + * Do the for-publish editing steps -- in particular, `docs/src/*md.in` and `docs/src/*md` are both checked in to source control. + * `git add` your modified files, `git commit`, `git push`, and submit a PR at https://github.com/johnkerl/miller. ## Notes * CSS: - * I used the Sphinx Classic theme which I like a lot except the colors -- it's a blue scheme and Miller has never been blue. - * Files are in `docs/_static/*.css` where I marked my mods with `/* CHANGE ME */`. - * If you modify the CSS you must run `make clean html` (not just `make html`) then reload in your browser. + * I used the Mkdocs Readthedocs theme which I like a lot. I customized `docs/src/extra.css` for Miller coloring/branding. * Live code: - * I didn't find a way to include non-Python live-code examples within Sphinx so I adapted the pre-Sphinx Miller-doc strategy which is to have a generator script read a template file (here, `foo.rst.in`), run the marked lines, and generate the output file (`foo.rst`). - * Edit the `*.rst.in` files, not `*.rst` directly. - * Within the `*.rst.in` files are lines like `POKI_RUN_COMMAND`. These will be run, and their output included, by `make html` which calls the `genrst` script for you. + * I didn't find a way to include non-Python live-code examples within Mkdocs so I adapted the pre-Mkdocs Miller-doc strategy which is to have a generator script read a template file (here, `foo.md.in`), run the marked lines, and generate the output file (`foo.md`). This is `genmds`. + * Edit the `*.md.in` files, not `*.md` directly. + * Within the `*.md.in` files are lines like `GENMD_RUN_COMMAND`. These will be run, and their output included, by `genmds` which calls the `genmds` script for you. * readthedocs: * https://readthedocs.org/ * https://readthedocs.org/projects/miller/ * https://readthedocs.org/projects/miller/builds/ * https://miller.readthedocs.io/en/latest/ - -## To do - -* Let's all discuss if/how we want the v2 docs to be structured better than the v1 docs. diff --git a/docs/_static/scrolls.css b/docs/_static/scrolls.css deleted file mode 100644 index fd92f949c..000000000 --- a/docs/_static/scrolls.css +++ /dev/null @@ -1,524 +0,0 @@ -/* - * scrolls.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- scrolls theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -body { - /* background-color: #222; */ - background-color: #c0c0c0; /* CHANGED */ - margin: 0; - padding: 0; - /* font-family: 'Georgia', serif; */ - font-family: 'Trebuchet MS', sans-serif; /* CHANGED */ - font-size: 15px; - color: #eee; -} - -div.footer { - border-top: 1px solid #111; - padding: 8px; - font-size: 11px; - text-align: center; - letter-spacing: 0.5px; -} - -div.footer a { - color: #eee; -} - -div.header { - margin: 0 -15px 0 -15px; - background: url(headerbg.png) repeat-x; - border-top: 6px solid #1752b4; -} - -div.relnav { - border-bottom: 1px solid #111; - background: url(navigation.png); - margin: 0 -15px 0 -15px; - padding: 2px 20px 0 28px; - line-height: 25px; - color: #aaa; - font-size: 12px; - text-align: center; -} - -div.relnav a { - color: #eee; - font-weight: bold; - text-decoration: none; -} - -div.relnav a:hover { - text-decoration: underline; -} - -#content { - background-color: white; - color: #111; - border-bottom: 1px solid black; - background-color: #e0e0e0; - padding: 0 15px 0 15px; - margin: 0; -} - -h1 { - margin: 0; - padding: 15px 0 0 0; - color: #800000; /* CHANGED */ - background-color: #e0e0e0; /* CHANGED */ -} - -h1.heading { - margin: 0; - padding: 0; - height: 80px; -} - -h1.heading:hover { - background: #222; -} - -h1.heading a { - background: url(top.png) no-repeat center 0; - background-color: #808080; - display: block; - width: 100%; - height: 80px; -} - -h1.heading a:focus { - -moz-outline: none; - outline: none; -} - -h1.heading span { - display: none; -} - -#contentwrapper { - min-width: 0; - max-width: 680px; - padding: 0 18px 20px 18px; - margin: 0 auto 0 auto; - border-right: 1px solid #eee; - border-left: 1px solid #eee; - background: url(watermark_blur.png) center -114px; -} - -#contentwrapper h2, -#contentwrapper h2 a { - /* color: #222; */ - color: #800000; /* CHANGED */ - background-color: #e0e0e0; /* CHANGED */ - font-size: 24px; - margin: 20px 0 0 0; -} - -#contentwrapper h3, -#contentwrapper h3 a { - /* color: #0d306b; */ - color: #800000; /* CHANGED */ - background-color: #e0e0e0; /* CHANGED */ - font-size: 20px; - margin: 20px 0 0 0; -} - -table.docutils { - border-collapse: collapse; - border: 2px solid #aaa; - margin: 0.5em 1.5em 0.5em 1.5em; -} - -table.docutils td { - padding: 2px; - border: 1px solid #ddd; -} - -p, li, dd, dt, blockquote { - color: #333; -} - -blockquote { - margin: 10px 0 10px 20px; -} - -p { - line-height: 20px; - margin-bottom: 10px; - margin-top: 10px; -} - -hr { - border-top: 1px solid #ccc; - border-bottom: 0; - border-right: 0; - border-left: 0; - margin-bottom: 10px; - margin-top: 20px; -} - -dl { - margin-left: 10px; -} - -li, dt { - margin-top: 5px; -} - -dt { - font-weight: bold; - color: #000; -} - -dd { - margin-top: 10px; - line-height: 20px; -} - -th { - text-align: left; - padding: 3px; - background-color: #f2f2f2; -} - -a { - /* color: #1752b4; */ - color: #800000; /* CHANGED */ -} - -a:hover { - color: #444; -} - -pre { - /* background-image: url(metal.png); CHANGED -- REMOVED */ - /* border-top: 1px solid #ccc; CHANGED -- REMOVED */ - /* border-bottom: 1px solid #ccc; CHANGED -- REMOVED */ - padding: 5px; - font-size: 13px; - font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; -} - -code { - font-size: 13px; - font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; - color: black; - padding: 1px 2px 1px 2px; - /* background-color: #e9e2cd; */ /* CHANGE */ - /* background-color: #c3b694; */ - background-color: #e8e8e8; - border-bottom: 1px solid #eee; -} - -div.code-block-caption { - color: #efefef; - background-color: #888; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - padding: 1em 1em 0; -} - -div.literal-block-wrapper pre { - margin: 0; -} - -a.reference:hover code { - border-bottom-color: #aaa; -} - -cite { - /* abusing , it's generated by ReST for `x` */ - font-size: 13px; - font-family: 'Bitstream Vera Sans Mono', 'Monaco', monospace; - font-weight: bold; - font-style: normal; -} - -div.admonition { - margin: 10px 0 10px 0; - padding: 10px; - border: 1px solid #ccc; -} - -div.admonition p.admonition-title { - background-color: #28437f; - color: white; - margin: -10px -10px 10px -10px; - padding: 4px 10px 4px 10px; - font-weight: bold; - font-size: 15px; -} - -div.admonition p.admonition-title a { - color: white!important; -} - -a.headerlink { - color: #B4B4B4!important; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none!important; - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -a.headerlink:hover { - background-color: #B4B4B4; - color: #F0F0F0!important; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.indextable { - width: 100%; -} - -table.genindextable td { - vertical-align: top; - width: 50%; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; - font-size: 11px; -} - -table.indextable ul a { - color: #000; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -table.modindextable { - width: 100%; - border: none; -} - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -table.modindextable img.toggler { - margin-right: 10px; -} - -dl.function dt, -dl.class dt, -dl.exception dt, -dl.method dt, -dl.attribute dt { - font-weight: normal; -} - -dt .descname { - font-weight: bold; - margin-right: 4px; -} - -dt .sig-paren { - font-size: larger; -} - -dt .descname, dt .descclassname { - padding: 0; - background: transparent; - border-bottom: 1px solid #111; -} - -dt .descclassname { - margin-left: 2px; -} - -dl dt big { - font-size: 100%; -} - -ul.search { - margin: 10px 0 0 30px; - padding: 0; -} - -ul.search li { - margin: 10px 0 0 0; - padding: 0; -} - -ul.search div.context { - font-size: 12px; - padding: 4px 0 0 20px; - color: #888; -} - -span.highlight { - /* background-color: #eee; */ - background-color: #eae2cb; /* CHANGED */ - border: 1px solid #ccc; -} - -div.highlight { /* CHANGED */ - background-color: #eae2cb; - border: 0px solid #ccc; -} - -div.highlight-none { /* CHANGED */ - background-color: #eae2cb; - border-top: 0px solid #ffffff; - border-bottom: 10px solid #ffffff; - border-left: 0px solid #ffffff; - border-right: 0px solid #ffffff; - padding-left: 0px solid #ffffff; - padding-right: 0px solid #ffffff; -} - -#toc { - margin: 0 -17px 0 -17px; - display: none; -} - -#toc h3 { - float: right; - margin: 5px 5px 0 0; - padding: 0; - font-size: 12px; - color: #777; -} - -#toc h3:hover { - color: #333; - cursor: pointer; -} - -.expandedtoc { - background: #222 url(darkmetal.png); - border-bottom: 1px solid #111; - outline-bottom: 1px solid #000; - padding: 5px; -} - -.expandedtoc h3 { - color: #aaa; - margin: 0!important; -} - -.expandedtoc h3:hover { - color: white!important; -} - -#tod h3:hover { - color: white; -} - -#toc a { - color: #ddd; - text-decoration: none; -} - -#toc a:hover { - color: white; - text-decoration: underline; -} - -#toc ul { - margin: 5px 0 12px 17px; - padding: 0 7px 0 7px; -} - -#toc ul ul { - margin-bottom: 0; -} - -#toc ul li { - margin: 2px 0 0 0; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: 'Georgia', serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; - margin: -1px -5px; - padding: 0 5px; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* math display */ - -div.math p { - text-align: center; -} - -span.eqno { - float: right; -} diff --git a/docs/build-one b/docs/build-one deleted file mode 100755 index 7cc07f15f..000000000 --- a/docs/build-one +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -set -euo pipefail - -if [ $# -ge 1 ]; then - for name; do - if [[ $name == *.rst.in ]]; then - genrst $name; - fi - done -else - for rstin in *.rst.in; do genrst $rstin; done -fi -sphinx-build -M html . _build diff --git a/docs/build.rst b/docs/build.rst deleted file mode 100644 index 3ec1d9121..000000000 --- a/docs/build.rst +++ /dev/null @@ -1,211 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Building from source -================================================================ - -Please also see :doc:`install` for information about pre-built executables. - -Miller license ----------------------------------------------------------------- - -Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt. - -From release tarball using autoconfig ----------------------------------------------------------------- - -Miller allows you the option of using GNU ``autoconfigure`` to build portably. - -Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous and expert efforts of `Thomas Klausner `_. - -* Obtain ``mlr-i.j.k.tar.gz`` from https://github.com/johnkerl/miller/tags, replacing ``i.j.k`` with the desired release, e.g. ``2.2.1``. -* ``tar zxvf mlr-i.j.k.tar.gz`` -* ``cd mlr-i.j.k`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **flex** -* Various configuration options of your choice, e.g. - - * ``./configure`` - * ``./configure --prefix=/usr/local`` - * ``./configure --prefix=$HOME/pkgs`` - * ``./configure CC=clang`` - * ``./configure --disable-shared`` (to make a statically linked executable) - * ``./configure 'CFLAGS=-Wall -std=gnu99 -O3'`` - * etc. - -* ``make`` creates the ``c/mlr`` executable -* ``make check`` -* ``make install`` copies the ``c/mlr`` executable to your prefix's ``bin`` subdirectory. - -From git clone using autoconfig ----------------------------------------------------------------- - -* ``git clone https://github.com/johnkerl/miller`` -* ``cd miller`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **automake autoconf libtool flex** -* Run ``autoreconf -fiv``. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.) -* Then continue from "Install the following ... " as above. - -Without using autoconfig ----------------------------------------------------------------- - -GNU autoconfig is familiar to many users, and indeed plenty of folks won't bother to use an open-source software package which doesn't have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I'm happy that Miller supports autoconfig. - -But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ``./configure && make`` output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can't figure out the build errors, you may just keep walking. For this reason I'm happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues.) - -Steps: - -* Obtain a release tarball or git clone. -* ``cd`` into the ``c`` subdirectory. -* Edit the ``INSTALLDIR`` in ``Makefile.no-autoconfig``. -* To change the C compiler, edit the ``CC=`` lines in ``Makefile.no-autoconfig`` and ``dsls/Makefile.no-autoconfig``. -* ``make -f Makefile.no-autoconfig`` creates the ``mlr`` executable and runs unit/regression tests (i.e. the equivalent of both ``make`` and ``make check`` using autoconfig). -* ``make install`` copies the ``mlr`` executable to your install directory. - -The ``Makefile.no-autoconfig`` is simple: little more than ``gcc *.c``. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I'm aware of successful use with ``gcc`` and ``clang``, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD. - -Windows ----------------------------------------------------------------- - -*Disclaimer: I'm now relying exclusively on* `Appveyor `_ *for Windows builds; I haven't built from source using MSYS in quite a while.* - -Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above). - -You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to ``C:\msys2\``) run ``C:\msys2\mingw64.exe``. Within the MSYS2 shell, you can run the following to install dependent packages: - -.. code-block:: none - - pacman -Syu - pacman -Su - pacman -S base-devel - pacman -S msys2-devel - pacman -S mingw-w64-x86_64-toolchain - pacman -S mingw-w64-x86_64-pcre - pacman -S msys2-runtime - -The list of dependent packages may be also found in **appveyor.yml** in the Miller base directory. - -Then, simply run **msys2-build.sh** which is a thin wrapper around ``./configure && make`` which accommodates certain Windows/MSYS2 idiosyncracies. - -There is a unit-test false-negative issue involving the semantics of the ``mkstemp`` library routine but a ``make -k`` in the ``c`` subdirectory has been producing a ``mlr.exe`` for me. - -Within MSYS2 you can run ``mlr``: simply copy it from the ``c`` subdirectory to your desired location somewhere within your MSYS2 ``$PATH``. To run ``mlr`` outside of MSYS2, just as with precompiled binaries as described above, you'll need ``msys-2.0.dll``. One way to do this is to augment your path: - -.. code-block:: none - - C:\> set PATH=%PATH%;\msys64\mingw64\bin - -Another way to do it is to copy the Miller executable and the DLL to the same directory: - -.. code-block:: none - - C:\> mkdir \mbin - C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin - C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin - C:\> set PATH=%PATH%;\mbin - - -In case of problems ----------------------------------------------------------------- - -If you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues. - -Dependencies ----------------------------------------------------------------- - -Required external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are necessary to produce the ``mlr`` executable. - -* ``gcc``, ``clang``, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers) -* The standard C library -* ``flex`` -* ``automake``, ``autoconf``, and ``libtool``, if you build with autoconfig - -Optional external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This documentation pageset is built using Sphinx. Please see `./README.md` for details. - -Internal dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are included within the `Miller source tree `_ and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build): - -* `Mersenne Twister `_ for pseudorandom-number generation: `C implementation by Nishimura and Matsumoto `_ with license terms respected. -* `MinUnit `_ for unit-testing, with as-is-no-warranty license http://www.jera.com/techinfo/jtns/jtn002.html#License, https://github.com/johnkerl/miller/blob/master/c/lib/minunit.h. -* The `Lemon parser-generator `_, the author of which explicitly disclaims copyright. -* The `udp JSON parser `_, with BSD2 license. -* The `sheredom UTF-8 library `_, which is free and unencumbered software released into the public domain. -* The NetBSD ``strptime`` (needed for the Windows/MSYS2 port since MSYS2 lacks this), with BSD license. - -Creating a new release: for developers ----------------------------------------------------------------- - -At present I'm the primary developer so this is just my checklist for making new releases. - -In this example I am using version 3.4.0; of course that will change for subsequent revisions. - -* Update version found in ``mlr --version`` and ``man mlr``: - - * Edit ``configure.ac``, ``c/mlrvers.h``, ``miller.spec``, and ``docs/conf.py`` from ``3.3.2-dev`` to ``3.4.0``. - * Do a fresh ``autoreconf -fiv`` and commit the output. (Preferably on a Linux host, rather than MacOS, to reduce needless diffs in autogen build files.) - * ``make -C c -f Makefile.no-autoconfig installhome && make -C man -f Makefile.no-autoconfig installhome && make -C docs -f Makefile.no-autoconfig html`` - * The ordering is important: the first build creates ``mlr``; the second runs ``mlr`` to create ``manpage.txt``; the third includes ``manpage.txt`` into one of its outputs. - * Commit and push. - -* Create the release tarball and SRPM: - - * On buildbox: ``./configure && make distcheck`` - * On buildbox: make SRPM as in https://github.com/johnkerl/miller/blob/master/README-RPM.md - * On all buildboxes: ``cd c`` and ``make -f Makefile.no-autoconfig mlr.static``. Then copy ``mlr.static`` to ``../mlr.{arch}``. (This may require as prerequisite ``sudo yum install glibc-static`` or the like.) - * For static binaries, please do ``ldd mlr.static`` and make sure it says ``not a dynamic executable``. - * Then ``mv mlr.static ../mlr.linux_x86_64`` - * Pull back release tarball ``mlr-3.4.0.tar.gz`` and SRPM ``miller-3.4.0-1.el6.src.rpm`` from buildbox, and ``mlr.{arch}`` binaries from whatever buildboxes. - * Download ``mlr.exe`` and ``msys-2.0.dll`` from https://ci.appveyor.com/project/johnkerl/miller/build/artifacts. - -* Create the Github release tag: - - * Don't forget the ``v`` in ``v3.4.0`` - * Write the release notes - * Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded. - * Publish the release - -* Check the release-specific docs: - - * Look at https://miller.readthedocs.io for new-version docs, after a few minutes' propagation time. - -* Notify: - - * Submit ``brew`` pull request; notify any other distros which don't appear to have autoupdated since the previous release (notes below) - * Similarly for ``macports``: https://github.com/macports/macports-ports/blob/master/textproc/miller/Portfile. - * Social-media updates. - -.. code-block:: none - - git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only - git fetch upstream - git rebase upstream/master - git checkout -b miller-3.4.0 - shasum -a 256 /path/to/mlr-3.4.0.tar.gz - edit Formula/miller.rb - # Test the URL from the line like - # url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz" - # in a browser for typos - # A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build - git add Formula/miller.rb - git commit -m 'miller 3.4.0' - git push -u origin miller-3.4.0 - (submit the pull request) - -* Afterwork: - - * Edit ``configure.ac`` and ``c/mlrvers.h`` to change version from ``3.4.0`` to ``3.4.0-dev``. - * ``make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome`` - * Commit and push. - - -Misc. development notes ----------------------------------------------------------------- - -I use terminal width 120 and tabwidth 4. diff --git a/docs/build.rst.in b/docs/build.rst.in deleted file mode 100644 index acac15d2b..000000000 --- a/docs/build.rst.in +++ /dev/null @@ -1,208 +0,0 @@ -Building from source -================================================================ - -Please also see :doc:`install` for information about pre-built executables. - -Miller license ----------------------------------------------------------------- - -Two-clause BSD license https://github.com/johnkerl/miller/blob/master/LICENSE.txt. - -From release tarball using autoconfig ----------------------------------------------------------------- - -Miller allows you the option of using GNU ``autoconfigure`` to build portably. - -Grateful acknowledgement: Miller's GNU autoconfig work was done by the generous and expert efforts of `Thomas Klausner `_. - -* Obtain ``mlr-i.j.k.tar.gz`` from https://github.com/johnkerl/miller/tags, replacing ``i.j.k`` with the desired release, e.g. ``2.2.1``. -* ``tar zxvf mlr-i.j.k.tar.gz`` -* ``cd mlr-i.j.k`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **flex** -* Various configuration options of your choice, e.g. - - * ``./configure`` - * ``./configure --prefix=/usr/local`` - * ``./configure --prefix=$HOME/pkgs`` - * ``./configure CC=clang`` - * ``./configure --disable-shared`` (to make a statically linked executable) - * ``./configure 'CFLAGS=-Wall -std=gnu99 -O3'`` - * etc. - -* ``make`` creates the ``c/mlr`` executable -* ``make check`` -* ``make install`` copies the ``c/mlr`` executable to your prefix's ``bin`` subdirectory. - -From git clone using autoconfig ----------------------------------------------------------------- - -* ``git clone https://github.com/johnkerl/miller`` -* ``cd miller`` -* Install the following packages using your system's package manager (``apt-get``, ``yum install``, etc.): **automake autoconf libtool flex** -* Run ``autoreconf -fiv``. (This is necessary when building from head as discussed in https://github.com/johnkerl/miller/issues/131.) -* Then continue from "Install the following ... " as above. - -Without using autoconfig ----------------------------------------------------------------- - -GNU autoconfig is familiar to many users, and indeed plenty of folks won't bother to use an open-source software package which doesn't have autoconfig support. And this is for good reason: GNU autoconfig allows us to build software on a wide diversity of platforms. For this reason I'm happy that Miller supports autoconfig. - -But, many others (myself included!) find autoconfig confusing: if it works without errors, great, but if not, the ``./configure && make`` output can be exceedingly difficult to decipher. And this also can be a turn-off for using open-source software: if you can't figure out the build errors, you may just keep walking. For this reason I'm happy that Miller allows you to build without autoconfig. (Of course, if you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues.) - -Steps: - -* Obtain a release tarball or git clone. -* ``cd`` into the ``c`` subdirectory. -* Edit the ``INSTALLDIR`` in ``Makefile.no-autoconfig``. -* To change the C compiler, edit the ``CC=`` lines in ``Makefile.no-autoconfig`` and ``dsls/Makefile.no-autoconfig``. -* ``make -f Makefile.no-autoconfig`` creates the ``mlr`` executable and runs unit/regression tests (i.e. the equivalent of both ``make`` and ``make check`` using autoconfig). -* ``make install`` copies the ``mlr`` executable to your install directory. - -The ``Makefile.no-autoconfig`` is simple: little more than ``gcc *.c``. Customzing is less automatic than autoconfig, but more transparent. I expect this makefile to work with few modifications on a large fraction of modern Linux/BSD-like systems: I'm aware of successful use with ``gcc`` and ``clang``, on Ubuntu 12.04 LTS, SELinux, Darwin (MacOS Yosemite), and FreeBSD. - -Windows ----------------------------------------------------------------- - -*Disclaimer: I'm now relying exclusively on* `Appveyor `_ *for Windows builds; I haven't built from source using MSYS in quite a while.* - -Miller has been built on Windows using MSYS2: http://www.msys2.org/. You can install MSYS2 and build Miller from its source code within MSYS2, and then you can use the binary from outside MSYS2. You can also use a precompiled binary (see above). - -You will first need to install MSYS2: http://www.msys2.org/. Then, start an MSYS2 shell, e.g. (supposing you installed MSYS2 to ``C:\msys2\``) run ``C:\msys2\mingw64.exe``. Within the MSYS2 shell, you can run the following to install dependent packages: - -.. code-block:: none - - pacman -Syu - pacman -Su - pacman -S base-devel - pacman -S msys2-devel - pacman -S mingw-w64-x86_64-toolchain - pacman -S mingw-w64-x86_64-pcre - pacman -S msys2-runtime - -The list of dependent packages may be also found in **appveyor.yml** in the Miller base directory. - -Then, simply run **msys2-build.sh** which is a thin wrapper around ``./configure && make`` which accommodates certain Windows/MSYS2 idiosyncracies. - -There is a unit-test false-negative issue involving the semantics of the ``mkstemp`` library routine but a ``make -k`` in the ``c`` subdirectory has been producing a ``mlr.exe`` for me. - -Within MSYS2 you can run ``mlr``: simply copy it from the ``c`` subdirectory to your desired location somewhere within your MSYS2 ``$PATH``. To run ``mlr`` outside of MSYS2, just as with precompiled binaries as described above, you'll need ``msys-2.0.dll``. One way to do this is to augment your path: - -.. code-block:: none - - C:\> set PATH=%PATH%;\msys64\mingw64\bin - -Another way to do it is to copy the Miller executable and the DLL to the same directory: - -.. code-block:: none - - C:\> mkdir \mbin - C:\> copy \msys64\mingw64\bin\msys-2.0.dll \mbin - C:\> copy \msys64\wherever\you\installed\miller\c\mlr.exe \mbin - C:\> set PATH=%PATH%;\mbin - - -In case of problems ----------------------------------------------------------------- - -If you have any build errors, feel free to contact me at mailto:kerl.john.r+miller@gmail.com -- or, better, open an issue with "New Issue" at https://github.com/johnkerl/miller/issues. - -Dependencies ----------------------------------------------------------------- - -Required external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are necessary to produce the ``mlr`` executable. - -* ``gcc``, ``clang``, etc. (or presumably other compilers; please open an issue or send me a pull request if you have information for me about other 21st-century compilers) -* The standard C library -* ``flex`` -* ``automake``, ``autoconf``, and ``libtool``, if you build with autoconfig - -Optional external dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -This documentation pageset is built using Sphinx. Please see `./README.md` for details. - -Internal dependencies -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are included within the `Miller source tree `_ and do not need to be separately installed (and in fact any separate installation will not be picked up in the Miller build): - -* `Mersenne Twister `_ for pseudorandom-number generation: `C implementation by Nishimura and Matsumoto `_ with license terms respected. -* `MinUnit `_ for unit-testing, with as-is-no-warranty license http://www.jera.com/techinfo/jtns/jtn002.html#License, https://github.com/johnkerl/miller/blob/master/c/lib/minunit.h. -* The `Lemon parser-generator `_, the author of which explicitly disclaims copyright. -* The `udp JSON parser `_, with BSD2 license. -* The `sheredom UTF-8 library `_, which is free and unencumbered software released into the public domain. -* The NetBSD ``strptime`` (needed for the Windows/MSYS2 port since MSYS2 lacks this), with BSD license. - -Creating a new release: for developers ----------------------------------------------------------------- - -At present I'm the primary developer so this is just my checklist for making new releases. - -In this example I am using version 3.4.0; of course that will change for subsequent revisions. - -* Update version found in ``mlr --version`` and ``man mlr``: - - * Edit ``configure.ac``, ``c/mlrvers.h``, ``miller.spec``, and ``docs/conf.py`` from ``3.3.2-dev`` to ``3.4.0``. - * Do a fresh ``autoreconf -fiv`` and commit the output. (Preferably on a Linux host, rather than MacOS, to reduce needless diffs in autogen build files.) - * ``make -C c -f Makefile.no-autoconfig installhome && make -C man -f Makefile.no-autoconfig installhome && make -C docs -f Makefile.no-autoconfig html`` - * The ordering is important: the first build creates ``mlr``; the second runs ``mlr`` to create ``manpage.txt``; the third includes ``manpage.txt`` into one of its outputs. - * Commit and push. - -* Create the release tarball and SRPM: - - * On buildbox: ``./configure && make distcheck`` - * On buildbox: make SRPM as in https://github.com/johnkerl/miller/blob/master/README-RPM.md - * On all buildboxes: ``cd c`` and ``make -f Makefile.no-autoconfig mlr.static``. Then copy ``mlr.static`` to ``../mlr.{arch}``. (This may require as prerequisite ``sudo yum install glibc-static`` or the like.) - * For static binaries, please do ``ldd mlr.static`` and make sure it says ``not a dynamic executable``. - * Then ``mv mlr.static ../mlr.linux_x86_64`` - * Pull back release tarball ``mlr-3.4.0.tar.gz`` and SRPM ``miller-3.4.0-1.el6.src.rpm`` from buildbox, and ``mlr.{arch}`` binaries from whatever buildboxes. - * Download ``mlr.exe`` and ``msys-2.0.dll`` from https://ci.appveyor.com/project/johnkerl/miller/build/artifacts. - -* Create the Github release tag: - - * Don't forget the ``v`` in ``v3.4.0`` - * Write the release notes - * Attach the release tarball, SRPM, and binaries. Double-check assets were successfully uploaded. - * Publish the release - -* Check the release-specific docs: - - * Look at https://miller.readthedocs.io for new-version docs, after a few minutes' propagation time. - -* Notify: - - * Submit ``brew`` pull request; notify any other distros which don't appear to have autoupdated since the previous release (notes below) - * Similarly for ``macports``: https://github.com/macports/macports-ports/blob/master/textproc/miller/Portfile. - * Social-media updates. - -.. code-block:: none - - git remote add upstream https://github.com/Homebrew/homebrew-core # one-time setup only - git fetch upstream - git rebase upstream/master - git checkout -b miller-3.4.0 - shasum -a 256 /path/to/mlr-3.4.0.tar.gz - edit Formula/miller.rb - # Test the URL from the line like - # url "https://github.com/johnkerl/miller/releases/download/v3.4.0/mlr-3.4.0.tar.gz" - # in a browser for typos - # A '@BrewTestBot Test this please' comment within the homebrew-core pull request will restart the homebrew travis build - git add Formula/miller.rb - git commit -m 'miller 3.4.0' - git push -u origin miller-3.4.0 - (submit the pull request) - -* Afterwork: - - * Edit ``configure.ac`` and ``c/mlrvers.h`` to change version from ``3.4.0`` to ``3.4.0-dev``. - * ``make -C c -f Makefile.no-autoconfig installhome && make -C doc -f Makefile.no-autoconfig all installhome`` - * Commit and push. - - -Misc. development notes ----------------------------------------------------------------- - -I use terminal width 120 and tabwidth 4. diff --git a/docs/circle.csv b/docs/circle.csv deleted file mode 100644 index 193105dfc..000000000 --- a/docs/circle.csv +++ /dev/null @@ -1,4 +0,0 @@ -color,shape,flag,index,quantity,rate -red,circle,true,16,13.8103,2.9010 -yellow,circle,true,73,63.9785,4.2370 -yellow,circle,true,87,63.5058,8.3350 diff --git a/docs/community.rst b/docs/community.rst deleted file mode 100644 index ec85b5739..000000000 --- a/docs/community.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Community -========= - -* See `Miller GitHub Discussions `_ for general Q&A, advice, sharing success stories, etc. -* See also `Miller-tagged questions on Stack Overflow `_ -* See `Miller GitHub Issues `_ for bug reports and feature requests diff --git a/docs/community.rst.in b/docs/community.rst.in deleted file mode 100644 index 5d3fd72c6..000000000 --- a/docs/community.rst.in +++ /dev/null @@ -1,6 +0,0 @@ -Community -========= - -* See `Miller GitHub Discussions `_ for general Q&A, advice, sharing success stories, etc. -* See also `Miller-tagged questions on Stack Overflow `_ -* See `Miller GitHub Issues `_ for bug reports and feature requests diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 614ec7b85..000000000 --- a/docs/conf.py +++ /dev/null @@ -1,112 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# 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('.')) - - -# -- Project information ----------------------------------------------------- - -project = 'Miller' -copyright = '2020, John Kerl' -author = 'John Kerl' - -# The full version, including alpha/beta/rc tags -release = '5.10.2' - -# -- General configuration --------------------------------------------------- -master_doc = 'index' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# -- 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 = 'classic' -#html_theme = 'sphinxdoc' -#html_theme = 'nature' -html_theme = 'scrolls' - -# 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'] - -# ---------------------------------------------------------------- -# Include code-sample files in the Sphinx build tree. -# See also https://github.com/johnkerl/miller/issues/560. -# -# There is a problem, and an opportunity for a hack. -# -# * Our data files are in ./data/* (and a few other subdirs of .). -# -# * We want them copied to ./_build/data/* so that we can symlink from our doc -# files (written in ./*.rst. autogenned to HTML in ./_build/html/*.html) to -# relative paths like ./data/a.csv. -# -# * If we use html_extra_path = ['data'] then the files like ./data/a.csv -# are copied to _build/html/a.csv -- one directory 'down'. This means that -# example Miller commands are shown in the generated HTML using 'mlr --csv -# cat data/a.csv' but 'data/a.csv' doesn't exist relative to _build/html. -# This is bad enough for local Sphinx builds but worse for readthedocs -# (https://miller.readthedocs.io) since *only* _build/html files are put into -# readthedocs. -# -# * In our Makefile it's easy enough to do some cp -a commands from ./data -# to ./_build_html/data etc. for local Sphinx builds -- however, readthedocs -# doesn't use the Makefile at all, only this conf.py file. -# -# * Hence the hack: we have a subdir ./sphinx-hack which has a symlink -# ./sphinx-hack/data pointing to ./data. So when the Sphinx build executes -# html_extra_path and removes one directory level, it's an 'extra' level we -# can do without. -# -# * This all relies on symlinks being propagated through GitHub version -# control, readthedocs, and Sphinx build at readthedocs. - -html_extra_path = [ - 'sphinx-hack', - '10-1.sh', - '10-2.sh', - 'circle.csv', - 'commas.csv', - 'dates.csv', - 'example.csv', - 'expo-sample.sh', - 'log.txt', - 'make.bat', - 'manpage.txt', - 'oosvar-example-ewma.sh', - 'oosvar-example-sum-grouped.sh', - 'oosvar-example-sum.sh', - 'sample_mlrrc', - 'square.csv', - 'triangle.csv', - 'variance.mlr', - 'verb-example-ewma.sh', -] diff --git a/docs/contact.rst b/docs/contact.rst deleted file mode 100644 index 05fcaf93a..000000000 --- a/docs/contact.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Contact -================================================================ - -Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues - -For issues involving this documentation site please also use https://github.com/johnkerl/miller/issues - -Other correspondence: mailto:kerl.john.r+miller@gmail.com diff --git a/docs/contact.rst.in b/docs/contact.rst.in deleted file mode 100644 index 7d3d47d08..000000000 --- a/docs/contact.rst.in +++ /dev/null @@ -1,8 +0,0 @@ -Contact -================================================================ - -Bug reports, feature requests, etc.: https://github.com/johnkerl/miller/issues - -For issues involving this documentation site please also use https://github.com/johnkerl/miller/issues - -Other correspondence: mailto:kerl.john.r+miller@gmail.com diff --git a/docs/cookbook.rst b/docs/cookbook.rst deleted file mode 100644 index c8b7611ee..000000000 --- a/docs/cookbook.rst +++ /dev/null @@ -1,1235 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 1: common patterns -================================================================ - -Headerless CSV on input or output ----------------------------------------------------------------- - -Sometimes we get CSV files which lack a header. For example (`data/headerless.csv <./data/headerless.csv>`_): - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/headerless.csv - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -You can use Miller to add a header. The ``--implicit-csv-header`` applies positionally indexed labels: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --implicit-csv-header cat data/headerless.csv - 1,2,3 - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -Following that, you can rename the positionally indexed labels to names with meaning for your context. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --implicit-csv-header label name,age,status data/headerless.csv - name,age,status - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller's output to the system command ``sed 1d``, or you can use Miller's ``--headerless-csv-output`` option: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -5 data/colored-shapes.dkvp | mlr --ocsv cat - color,shape,flag,i,u,v,w,x - yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565 - red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207 - red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998 - red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269 - purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863 - -.. code-block:: none - :emphasize-lines: 1,1 - - head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat - yellow,triangle,1,11,0.6321695890307647,0.9887207810889004,0.4364983936735774,5.7981881667050565 - red,square,1,15,0.21966833570651523,0.001257332190235938,0.7927778364718627,2.944117399716207 - red,circle,1,16,0.20901671281497636,0.29005231936593445,0.13810280912907674,5.065034003400998 - red,square,0,48,0.9562743938458542,0.7467203085342884,0.7755423050923582,7.117831369597269 - purple,triangle,0,51,0.4355354501763202,0.8591292672156728,0.8122903963006748,5.753094629505863 - -Lastly, often we say "CSV" or "TSV" when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it's perhaps simpler to **just use NIDX format** which was designed for this purpose. (See also :doc:`file-formats`.) For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv - 1 John - 3 present - - 1 Fred - 3 present - - 1 Alice - 3 missing - - 1 Carol - 3 present - -Doing multiple joins ----------------------------------------------------------------- - -Suppose we have the following data: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat multi-join/input.csv - id,task - 10,chop - 20,puree - 20,wash - 30,fold - 10,bake - 20,mix - 10,knead - 30,clean - -And we want to augment the ``id`` column with lookups from the following data files: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat multi-join/name-lookup.csv - id,name - 30,Alice - 10,Bob - 20,Carol - -.. code-block:: none - :emphasize-lines: 1,1 - - cat multi-join/status-lookup.csv - id,status - 30,occupied - 10,idle - 20,idle - -We can run the input file through multiple ``join`` commands in a ``then``-chain: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv - id status name task - 10 idle Bob chop - 20 idle Carol puree - 20 idle Carol wash - 30 occupied Alice fold - 10 idle Bob bake - 20 idle Carol mix - 10 idle Bob knead - 30 occupied Alice clean - -Bulk rename of fields ----------------------------------------------------------------- - -Suppose you want to replace spaces with underscores in your column names: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/spaces.csv - a b c,def,g h i - 123,4567,890 - 2468,1357,3579 - 9987,3312,4543 - -The simplest way is to use ``mlr rename`` with ``-g`` (for global replace, not just first occurrence of space within each field) and ``-r`` for pattern-matching (rather than explicit single-column renames): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv rename -g -r ' ,_' data/spaces.csv - a_b_c,def,g_h_i - 123,4567,890 - 2468,1357,3579 - 9987,3312,4543 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --opprint rename -g -r ' ,_' data/spaces.csv - a_b_c def g_h_i - 123 4567 890 - 2468 1357 3579 - 9987 3312 4543 - -You can also do this with a for-loop: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/bulk-rename-for-loop.mlr - map newrec = {}; - for (oldk, v in $*) { - newrec[gsub(oldk, " ", "_")] = v; - } - $* = newrec - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv - a_b_c def g_h_i - 123 4567 890 - 2468 1357 3579 - 9987 3312 4543 - -Search-and-replace over all fields ----------------------------------------------------------------- - -How to do ``$name = gsub($name, "old", "new")`` for all fields? - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sar.csv - a,b,c - the quick,brown fox,jumped - over,the,lazy dogs - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sar.mlr - for (k in $*) { - $[k] = gsub($[k], "e", "X"); - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv put -f data/sar.mlr data/sar.csv - a,b,c - thX quick,brown fox,jumpXd - ovXr,thX,lazy dogs - -Full field renames and reassigns ----------------------------------------------------------------- - -Using Miller 5.0.0's map literals and assigning to ``$*``, you can fully generalize :ref:`mlr rename `, :ref:`mlr reorder `, etc. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put ' - begin { - @i_cumu = 0; - } - - @i_cumu += $i; - $* = { - "z": $x + y, - "KEYFIELD": $a, - "i": @i_cumu, - "b": $b, - "y": $x, - "x": $y, - }; - ' data/small - z=0.346790,KEYFIELD=pan,i=1,b=pan,y=0.346790,x=0.726803 - z=0.758680,KEYFIELD=eks,i=3,b=pan,y=0.758680,x=0.522151 - z=0.204603,KEYFIELD=wye,i=6,b=wye,y=0.204603,x=0.338319 - z=0.381399,KEYFIELD=eks,i=10,b=wye,y=0.381399,x=0.134189 - z=0.573289,KEYFIELD=wye,i=15,b=pan,y=0.573289,x=0.863624 - -Numbering and renumbering records ----------------------------------------------------------------- - -The ``awk``-like built-in variable ``NR`` is incremented for each input record: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$nr = NR' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,nr=1 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,nr=2 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,nr=4 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 - -However, this is the record number within the original input stream -- not after any filtering you may have done: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$a == "wye"' then put '$nr = NR' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,nr=3 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,nr=5 - -There are two good options here. One is to use the ``cat`` verb with ``-n``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$a == "wye"' then cat -n data/small - n=1,a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -The other is to keep your own counter within the ``put`` DSL: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,n=1 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,n=2 - -The difference is a matter of taste (although ``mlr cat -n`` puts the counter first). - -Splitting a string and taking a few of the components ----------------------------------------------------------------- - -Suppose you want to just keep the first two components of the hostnames: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/hosts.csv - host,status - xy01.east.acme.org,up - ab02.west.acme.org,down - ac91.west.acme.org,up - -While [Miller 6](https://johnkerl.org/miller6) we will have arrays, for Miller 5 we need to split using -maps, taking map keys `1` and `2`: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --from data/hosts.csv put '$host = joinv(mapselect(splitnvx($host,"."),1,2),".")' - host,status - xy01.east,up - ab02.west,down - ac91.west,up - -Options for dealing with duplicate rows ----------------------------------------------------------------- - -If your data has records appearing multiple times, you can use :ref:`mlr uniq ` to show and/or count the unique records. - -If you want to look at partial uniqueness -- for example, show only the first record for each unique combination of the ``account_id`` and ``account_status`` fields -- you might use ``mlr head -n 1 -g account_id,account_status``. Please also see :ref:`mlr head `. - -.. _cookbook-data-cleaning-examples: - -Data-cleaning examples ----------------------------------------------------------------- - -Here are some ways to use the type-checking options as described in :ref:`reference-dsl-type-tests-and-assertions` Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can't see it all at once and some automation is called for.) - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/het-bool.csv - name,reachable - barney,false - betty,true - fred,true - wilma,1 - -One option is to coerce everything to boolean, or integer: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv - name reachable - barney false - betty true - fred true - wilma true - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv - name reachable - barney 0 - betty 1 - fred 1 - wilma 1 - -A second option is to flag badly formatted data within the output stream: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv - name reachable format_ok - barney false true - betty true true - fred true true - wilma 1 false - -Or perhaps to flag badly formatted data outside the output stream: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv - Malformed at NR=4 - name reachable - barney false - betty true - fred true - wilma 1 - -A third way is to abort the process on first instance of bad data: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv - mlr: string type-assertion failed at NR=4 FNR=4 FILENAME=data/het-bool.csv - name,reachable - barney,false - betty,true - fred,true - -Splitting nested fields ----------------------------------------------------------------- - -Suppose you have a TSV file like this: - -.. code-block:: none - - a b - x z - s u:v:w - -The simplest option is to use :ref:`mlr nest `: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv - a b - x z - s u - s v - s w - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --tsv nest --explode --values --across-fields -f b --nested-fs : data/nested.tsv - a b_1 - x z - - a b_1 b_2 b_3 - s u v w - -While ``mlr nest`` is simplest, let's also take a look at a few ways to do this using the ``put`` DSL. - -One option to split out the colon-delimited values in the ``b`` column is to use ``splitnv`` to create an integer-indexed map and loop over it, adding new fields to the current record: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}' - a x - b z - p1 z - - a s - b u:v:w - p1 u - p2 v - p3 w - -while another is to loop over the same map from ``splitnv`` and use it (with ``put -q`` to suppress printing the original record) to produce multiple records: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}' - a x - b z - - a s - b u - - a s - b v - - a s - b w - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}' - a b - x z - s u - s v - s w - -Showing differences between successive queries ----------------------------------------------------------------- - -Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/previous_counters.csv - color,count - red,3472 - blue,6838 - orange,694 - purple,12 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/current_counters.csv - color,count - red,3467 - orange,670 - yellow,27 - blue,6944 - -And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren't all in the same order, nor are they all present on both sides, we can't just paste the two files side-by-side and do some column-four-minus-column-two arithmetic. - -First, rename counter columns to make them distinct: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/prevtemp.csv - color,previous_count - red,3472 - blue,6838 - orange,694 - purple,12 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/currtemp.csv - color,current_count - red,3467 - orange,670 - yellow,27 - blue,6944 - -Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use ``--ul`` and ``--ur`` to emit unpaired records (namely, purple on the left and yellow on the right): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint \ - join -j color --ul --ur -f data/prevtemp.csv \ - then unsparsify --fill-with 0 \ - then put '$count_delta = $current_count - $previous_count' \ - data/currtemp.csv - color previous_count current_count count_delta - red 3472 3467 -5 - orange 694 670 -24 - yellow 0 27 27 - blue 6838 6944 106 - purple 12 0 -12 - -Finding missing dates ----------------------------------------------------------------- - -Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 10 data/miss-date.csv - date,qoh - 2012-03-05,10055 - 2012-03-06,10486 - 2012-03-07,10430 - 2012-03-08,10674 - 2012-03-09,10880 - 2012-03-10,10718 - 2012-03-11,10795 - 2012-03-12,11043 - 2012-03-13,11177 - -.. code-block:: none - :emphasize-lines: 1,1 - - wc -l data/miss-date.csv - 1372 data/miss-date.csv - -Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using ``strptime``, then compute adjacent differences (the ``cat -n`` simply inserts record-counters): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ - | head - n=1,date=2012-03-05,qoh=10055,datestamp=1330905600.000000,datestamp_delta=0 - n=2,date=2012-03-06,qoh=10486,datestamp=1330992000.000000,datestamp_delta=86400.000000 - n=3,date=2012-03-07,qoh=10430,datestamp=1331078400.000000,datestamp_delta=86400.000000 - n=4,date=2012-03-08,qoh=10674,datestamp=1331164800.000000,datestamp_delta=86400.000000 - n=5,date=2012-03-09,qoh=10880,datestamp=1331251200.000000,datestamp_delta=86400.000000 - n=6,date=2012-03-10,qoh=10718,datestamp=1331337600.000000,datestamp_delta=86400.000000 - n=7,date=2012-03-11,qoh=10795,datestamp=1331424000.000000,datestamp_delta=86400.000000 - n=8,date=2012-03-12,qoh=11043,datestamp=1331510400.000000,datestamp_delta=86400.000000 - n=9,date=2012-03-13,qoh=11177,datestamp=1331596800.000000,datestamp_delta=86400.000000 - n=10,date=2012-03-14,qoh=11498,datestamp=1331683200.000000,datestamp_delta=86400.000000 - -Then, filter for adjacent difference not being 86400 (the number of seconds in a day): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ - then filter '$datestamp_delta != 86400 && $n != 1' - n=774,date=2014-04-19,qoh=130140,datestamp=1397865600.000000,datestamp_delta=259200.000000 - n=1119,date=2015-03-31,qoh=181625,datestamp=1427760000.000000,datestamp_delta=172800.000000 - -Given this, it's now easy to see where the gaps are: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv - n=770,1=2014-04-12,2=129435 - n=771,1=2014-04-13,2=129868 - n=772,1=2014-04-14,2=129797 - n=773,1=2014-04-15,2=129919 - n=774,1=2014-04-16,2=130181 - n=775,1=2014-04-19,2=130140 - n=776,1=2014-04-20,2=130271 - n=777,1=2014-04-21,2=130368 - n=778,1=2014-04-22,2=130368 - n=779,1=2014-04-23,2=130849 - n=780,1=2014-04-24,2=131026 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv - n=1115,1=2015-03-25,2=181006 - n=1116,1=2015-03-26,2=180995 - n=1117,1=2015-03-27,2=181043 - n=1118,1=2015-03-28,2=181112 - n=1119,1=2015-03-29,2=181306 - n=1120,1=2015-03-31,2=181625 - n=1121,1=2015-04-01,2=181494 - n=1122,1=2015-04-02,2=181718 - n=1123,1=2015-04-03,2=181835 - n=1124,1=2015-04-04,2=182104 - n=1125,1=2015-04-05,2=182528 - -Two-pass algorithms ----------------------------------------------------------------- - -Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as ``sort``, ``tac``, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory. - -Two-pass algorithms: computation of percentages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record's value to a percentage. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put -q ' - # These are executed once per record, which is the first pass. - # The key is to use NR to index an out-of-stream variable to - # retain all the x-field values. - @x_min = min($x, @x_min); - @x_max = max($x, @x_max); - @x[NR] = $x; - - # The second pass is in a for-loop in an end-block. - end { - for (nr, x in @x) { - @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min); - } - emit (@x, @x_pct), "NR" - } - ' - NR x x_pct - 1 0.346790 25.661943 - 2 0.758680 100.000000 - 3 0.204603 0.000000 - 4 0.381399 31.908236 - 5 0.573289 66.540542 - -Two-pass algorithms: line-number ratios -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Similarly, finding the total record count requires first reading through all the data: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/small put -q ' - @records[NR] = $*; - end { - for((I,k),v in @records) { - @records[I]["I"] = I; - @records[I]["N"] = NR; - @records[I]["PCT"] = 100*I/NR - } - emit @records,"I" - } - ' then reorder -f I,N,PCT - I N PCT a b i x y - 1 5 20 pan pan 1 0.3467901443380824 0.7268028627434533 - 2 5 40 eks pan 2 0.7586799647899636 0.5221511083334797 - 3 5 60 wye wye 3 0.20460330576630303 0.33831852551664776 - 4 5 80 eks wye 4 0.38139939387114097 0.13418874328430463 - 5 5 100 wye pan 5 0.5732889198020006 0.8636244699032729 - -Two-pass algorithms: records having max value -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The idea is to retain records having the largest value of ``n`` in the following data: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --itsv --opprint cat data/maxrows.tsv - a b n score - purple red 5 0.743231 - blue purple 2 0.093710 - red purple 2 0.802103 - purple red 5 0.389055 - red purple 2 0.880457 - orange red 2 0.540349 - purple purple 1 0.634451 - orange purple 5 0.257223 - orange purple 5 0.693499 - red red 4 0.981355 - blue purple 5 0.157052 - purple purple 1 0.441784 - red purple 1 0.124912 - orange blue 1 0.921944 - blue purple 4 0.490909 - purple red 5 0.454779 - green purple 4 0.198278 - orange blue 5 0.705700 - red red 3 0.940705 - purple red 5 0.072936 - orange blue 3 0.389463 - orange purple 2 0.664985 - blue purple 1 0.371813 - red purple 4 0.984571 - green purple 5 0.203577 - green purple 3 0.900873 - purple purple 0 0.965677 - blue purple 2 0.208785 - purple purple 1 0.455077 - red purple 4 0.477187 - blue red 4 0.007487 - -Of course, the largest value of ``n`` isn't known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/maxrows.mlr - # Retain all records - @records[NR] = $*; - # Track max value of n - @maxn = max(@maxn, $n); - - # After all records have been read, loop through retained records - # and print those with the max n value. - end { - for (int nr in @records) { - map record = @records[nr]; - if (record["n"] == @maxn) { - emit record; - } - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv - a b n score - purple red 5 0.743231 - purple red 5 0.389055 - orange purple 5 0.257223 - orange purple 5 0.693499 - blue purple 5 0.157052 - purple red 5 0.454779 - orange blue 5 0.705700 - purple red 5 0.072936 - green purple 5 0.203577 - -Rectangularizing data ----------------------------------------------------------------- - -Suppose you have a method (in whatever language) which is printing things of the form - -.. code-block:: none - - outer=1 - outer=2 - outer=3 - -and then calls another method which prints things of the form - -.. code-block:: none - - middle=10 - middle=11 - middle=12 - middle=20 - middle=21 - middle=30 - middle=31 - -and then, perhaps, that second method calls a third method which prints things of the form - -.. code-block:: none - - inner1=100,inner2=101 - inner1=120,inner2=121 - inner1=200,inner2=201 - inner1=210,inner2=211 - inner1=300,inner2=301 - inner1=312 - inner1=313,inner2=314 - -with the result that your program's output is - -.. code-block:: none - - outer=1 - middle=10 - inner1=100,inner2=101 - middle=11 - middle=12 - inner1=120,inner2=121 - outer=2 - middle=20 - inner1=200,inner2=201 - middle=21 - inner1=210,inner2=211 - outer=3 - middle=30 - inner1=300,inner2=301 - middle=31 - inner1=312 - inner1=313,inner2=314 - -The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don't refactor your code just to handle some ad-hoc log-data formatting -- instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/rect.txt put -q ' - is_present($outer) { - unset @r - } - for (k, v in $*) { - @r[k] = v - } - is_present($inner1) { - emit @r - }' - outer=1,middle=10,inner1=100,inner2=101 - outer=1,middle=12,inner1=120,inner2=121 - outer=2,middle=20,inner1=200,inner2=201 - outer=2,middle=21,inner1=210,inner2=211 - outer=3,middle=30,inner1=300,inner2=301 - outer=3,middle=31,inner1=312,inner2=301 - outer=3,middle=31,inner1=313,inner2=314 - -Regularizing ragged CSV ----------------------------------------------------------------- - -Miller handles compliant CSV: in particular, it's an error if the number of data fields in a given data line don't match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/ragged.csv - a,b,c - 1,2,3 - 4,5 - 6,7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - @nf = NF; - while(@nf < @maxnf) { - @nf += 1; - $[@nf] = "" - } - ' - a,b,c - 1,2,3 - 4,5, - 6,7,8,9 - -or, more simply, - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - while(NF < @maxnf) { - $[NF+1] = ""; - } - ' - a,b,c - 1,2,3 - 4,5, - 6,7,8,9 - -Feature-counting ----------------------------------------------------------------- - -Suppose you have some heterogeneous data like this: - -.. code-block:: none - - { "qoh": 29874, "rate": 1.68, "latency": 0.02 } - { "name": "alice", "uid": 572 } - { "qoh": 1227, "rate": 1.01, "latency": 0.07 } - { "qoh": 13458, "rate": 1.72, "latency": 0.04 } - { "qoh": 56782, "rate": 1.64 } - { "qoh": 23512, "rate": 1.71, "latency": 0.03 } - { "qoh": 9876, "rate": 1.89, "latency": 0.08 } - { "name": "bill", "uid": 684 } - { "name": "chuck", "uid2": 908 } - { "name": "dottie", "uid": 440 } - { "qoh": 0, "rate": 0.40, "latency": 0.01 } - { "qoh": 5438, "rate": 1.56, "latency": 0.17 } - -A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm: - -.. code-block:: none - - for (key in $*) { - @key_counts[key] += 1; - } - @record_count += 1; - - end { - for (key in @key_counts) { - @key_fraction[key] = @key_counts[key] / @record_count - } - emit @record_count; - emit @key_counts, "key"; - emit @key_fraction,"key" - } - -Then - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json put -q -f data/feature-count.mlr data/features.json - { "record_count": 12 } - { "key": "qoh", "key_counts": 8 } - { "key": "rate", "key_counts": 8 } - { "key": "latency", "key_counts": 7 } - { "key": "name", "key_counts": 4 } - { "key": "uid", "key_counts": 3 } - { "key": "uid2", "key_counts": 1 } - { "key": "qoh", "key_fraction": 0.666667 } - { "key": "rate", "key_fraction": 0.666667 } - { "key": "latency", "key_fraction": 0.583333 } - { "key": "name", "key_fraction": 0.333333 } - { "key": "uid", "key_fraction": 0.250000 } - { "key": "uid2", "key_fraction": 0.083333 } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json - record_count - 12 - - key key_counts - qoh 8 - rate 8 - latency 7 - name 4 - uid 3 - uid2 1 - - key key_fraction - qoh 0.666667 - rate 0.666667 - latency 0.583333 - name 0.333333 - uid 0.250000 - uid2 0.083333 - -Unsparsing ----------------------------------------------------------------- - -The previous section discussed how to fill out missing data fields within CSV with full header line -- so the list of all field names is present within the header line. Next, let's look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names. - -For example, suppose you have JSON input like this: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sparse.json - {"a":1,"b":2,"v":3} - {"u":1,"b":2} - {"a":1,"v":2,"x":3} - {"v":1,"w":2} - -There are field names ``a``, ``b``, ``v``, ``u``, ``x``, ``w`` in the data -- but not all in every record. Since we don't know the names of all the keys until we've read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use ``put -q`` since we don't want to produce per-record output, only emitting output in the ``end`` block: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/unsparsify.mlr - # First pass: - # Remember all unique key names: - for (k in $*) { - @all_keys[k] = 1; - } - # Remember all input records: - @records[NR] = $*; - - # Second pass: - end { - for (nr in @records) { - # Get the sparsely keyed input record: - irecord = @records[nr]; - # Fill in missing keys with empty string: - map orecord = {}; - for (k in @all_keys) { - if (haskey(irecord, k)) { - orecord[k] = irecord[k]; - } else { - orecord[k] = ""; - } - } - # Produce the output: - emit orecord; - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json put -q -f data/unsparsify.mlr data/sparse.json - { "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" } - { "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" } - { "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" } - { "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json - a,b,v,u,x,w - 1,2,3,,, - ,2,,1,, - 1,,2,,3, - ,,1,,,2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json - a b v u x w - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - 3 - - - - 1 - - 2 - -There is a keystroke-saving verb for this: :ref:`mlr unsparsify `. - -Parsing log-file output ----------------------------------------------------------------- - -This, of course, depends highly on what's in your log files. But, as an example, suppose you have log-file lines such as - -.. code-block:: none - - 2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378 - -I prefer to pre-filter with ``grep`` and/or ``sed`` to extract the structured text, then hand that to Miller. Example: - -.. code-block:: none - - grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status - -.. _cookbook-memoization-with-oosvars: - -Memoization with out-of-stream variables ----------------------------------------------------------------- - -The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using *f*(0)=1, *f*(1)=1, *f*(*n*)=*f*(*n*-1)+*f*(*n*-2) for *n*≥2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger *n*. This program - -.. code-block:: none - - mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (n < 2) { - return 1 - } else { - return f(n-1) + f(n-2) # recurse - } - } - - @fcount = 0; - $o = f($i); - $fcount = @fcount; - - ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds - - -produces output like this: - -.. code-block:: none - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000039101 - 3 3 5 0.000015974 - 4 5 9 0.000019073 - 5 8 15 0.000026941 - 6 13 25 0.000036955 - 7 21 41 0.000056028 - 8 34 67 0.000086069 - 9 55 109 0.000134945 - 10 89 177 0.000217915 - 11 144 287 0.000355959 - 12 233 465 0.000506163 - 13 377 753 0.000811815 - 14 610 1219 0.001297235 - 15 987 1973 0.001960993 - 16 1597 3193 0.003417969 - 17 2584 5167 0.006215811 - 18 4181 8361 0.008294106 - 19 6765 13529 0.012095928 - 20 10946 21891 0.019592047 - 21 17711 35421 0.031193972 - 22 28657 57313 0.057254076 - 23 46368 92735 0.080307961 - 24 75025 150049 0.129482031 - 25 121393 242785 0.213325977 - 26 196418 392835 0.334423065 - 27 317811 635621 0.605969906 - 28 514229 1028457 0.971235037 - -Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using ``@``-variables, which persist across records, we can cache and reuse the results of previous computations: - -.. code-block:: none - - mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (is_present(@fcache[n])) { # cache hit - return @fcache[n] - } else { # cache miss - num rv = 1; - if (n >= 2) { - rv = f(n-1) + f(n-2) # recurse - } - @fcache[n] = rv; - return rv - } - } - @fcount = 0; - $o = f($i); - $fcount = @fcount; - ' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds - -with output like this: - -.. code-block:: none - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000053883 - 3 3 3 0.000035048 - 4 5 3 0.000045061 - 5 8 3 0.000014067 - 6 13 3 0.000028849 - 7 21 3 0.000028133 - 8 34 3 0.000027895 - 9 55 3 0.000014067 - 10 89 3 0.000015020 - 11 144 3 0.000012875 - 12 233 3 0.000033140 - 13 377 3 0.000014067 - 14 610 3 0.000012875 - 15 987 3 0.000029087 - 16 1597 3 0.000013828 - 17 2584 3 0.000013113 - 18 4181 3 0.000012875 - 19 6765 3 0.000013113 - 20 10946 3 0.000012875 - 21 17711 3 0.000013113 - 22 28657 3 0.000013113 - 23 46368 3 0.000015974 - 24 75025 3 0.000012875 - 25 121393 3 0.000013113 - 26 196418 3 0.000012875 - 27 317811 3 0.000013113 - 28 514229 3 0.000012875 - diff --git a/docs/cookbook.rst.in b/docs/cookbook.rst.in deleted file mode 100644 index 2275d03ec..000000000 --- a/docs/cookbook.rst.in +++ /dev/null @@ -1,428 +0,0 @@ -Cookbook part 1: common patterns -================================================================ - -Headerless CSV on input or output ----------------------------------------------------------------- - -Sometimes we get CSV files which lack a header. For example (`data/headerless.csv <./data/headerless.csv>`_): - -POKI_RUN_COMMAND{{cat data/headerless.csv}}HERE - -You can use Miller to add a header. The ``--implicit-csv-header`` applies positionally indexed labels: - -POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header cat data/headerless.csv}}HERE - -Following that, you can rename the positionally indexed labels to names with meaning for your context. For example: - -POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header label name,age,status data/headerless.csv}}HERE - -Likewise, if you need to produce CSV which is lacking its header, you can pipe Miller's output to the system command ``sed 1d``, or you can use Miller's ``--headerless-csv-output`` option: - -POKI_RUN_COMMAND{{head -5 data/colored-shapes.dkvp | mlr --ocsv cat}}HERE - -POKI_RUN_COMMAND{{head -5 data/colored-shapes.dkvp | mlr --ocsv --headerless-csv-output cat}}HERE - -Lastly, often we say "CSV" or "TSV" when we have positionally indexed data in columns which are separated by commas or tabs, respectively. In this case it's perhaps simpler to **just use NIDX format** which was designed for this purpose. (See also :doc:`file-formats`.) For example: - -POKI_RUN_COMMAND{{mlr --inidx --ifs comma --oxtab cut -f 1,3 data/headerless.csv}}HERE - -Doing multiple joins ----------------------------------------------------------------- - -Suppose we have the following data: - -POKI_RUN_COMMAND{{cat multi-join/input.csv}}HERE - -And we want to augment the ``id`` column with lookups from the following data files: - -POKI_RUN_COMMAND{{cat multi-join/name-lookup.csv}}HERE - -POKI_RUN_COMMAND{{cat multi-join/status-lookup.csv}}HERE - -We can run the input file through multiple ``join`` commands in a ``then``-chain: - -POKI_RUN_COMMAND{{mlr --icsv --opprint join -f multi-join/name-lookup.csv -j id then join -f multi-join/status-lookup.csv -j id multi-join/input.csv}}HERE - -Bulk rename of fields ----------------------------------------------------------------- - -Suppose you want to replace spaces with underscores in your column names: - -POKI_RUN_COMMAND{{cat data/spaces.csv}}HERE - -The simplest way is to use ``mlr rename`` with ``-g`` (for global replace, not just first occurrence of space within each field) and ``-r`` for pattern-matching (rather than explicit single-column renames): - -POKI_RUN_COMMAND{{mlr --csv rename -g -r ' ,_' data/spaces.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv --opprint rename -g -r ' ,_' data/spaces.csv}}HERE - -You can also do this with a for-loop: - -POKI_RUN_COMMAND{{cat data/bulk-rename-for-loop.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint put -f data/bulk-rename-for-loop.mlr data/spaces.csv}}HERE - -Search-and-replace over all fields ----------------------------------------------------------------- - -How to do ``$name = gsub($name, "old", "new")`` for all fields? - -POKI_RUN_COMMAND{{cat data/sar.csv}}HERE - -POKI_RUN_COMMAND{{cat data/sar.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --csv put -f data/sar.mlr data/sar.csv}}HERE - -Full field renames and reassigns ----------------------------------------------------------------- - -Using Miller 5.0.0's map literals and assigning to ``$*``, you can fully generalize :ref:`mlr rename `, :ref:`mlr reorder `, etc. - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/full-reorg.sh)HERE - -Numbering and renumbering records ----------------------------------------------------------------- - -The ``awk``-like built-in variable ``NR`` is incremented for each input record: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$nr = NR' data/small}}HERE - -However, this is the record number within the original input stream -- not after any filtering you may have done: - -POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then put '$nr = NR' data/small}}HERE - -There are two good options here. One is to use the ``cat`` verb with ``-n``: - -POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then cat -n data/small}}HERE - -The other is to keep your own counter within the ``put`` DSL: - -POKI_RUN_COMMAND{{mlr filter '$a == "wye"' then put 'begin {@n = 1} $n = @n; @n += 1' data/small}}HERE - -The difference is a matter of taste (although ``mlr cat -n`` puts the counter first). - -Splitting a string and taking a few of the components ----------------------------------------------------------------- - -Suppose you want to just keep the first two components of the hostnames: - -POKI_RUN_COMMAND{{cat data/hosts.csv}}HERE - -While [Miller 6](https://johnkerl.org/miller6) we will have arrays, for Miller 5 we need to split using -maps, taking map keys `1` and `2`: - -POKI_RUN_COMMAND{{mlr --csv --from data/hosts.csv put '$host = joinv(mapselect(splitnvx($host,"."),1,2),".")'}}HERE - -Options for dealing with duplicate rows ----------------------------------------------------------------- - -If your data has records appearing multiple times, you can use :ref:`mlr uniq ` to show and/or count the unique records. - -If you want to look at partial uniqueness -- for example, show only the first record for each unique combination of the ``account_id`` and ``account_status`` fields -- you might use ``mlr head -n 1 -g account_id,account_status``. Please also see :ref:`mlr head `. - -.. _cookbook-data-cleaning-examples: - -Data-cleaning examples ----------------------------------------------------------------- - -Here are some ways to use the type-checking options as described in :ref:`reference-dsl-type-tests-and-assertions` Suppose you have the following data file, with inconsistent typing for boolean. (Also imagine that, for the sake of discussion, we have a million-line file rather than a four-line file, so we can't see it all at once and some automation is called for.) - -POKI_RUN_COMMAND{{cat data/het-bool.csv}}HERE - -One option is to coerce everything to boolean, or integer: - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$reachable = boolean($reachable)' data/het-bool.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$reachable = int(boolean($reachable))' data/het-bool.csv}}HERE - -A second option is to flag badly formatted data within the output stream: - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$format_ok = is_string($reachable)' data/het-bool.csv}}HERE - -Or perhaps to flag badly formatted data outside the output stream: - -POKI_RUN_COMMAND{{mlr --icsv --opprint put 'if (!is_string($reachable)) {eprint "Malformed at NR=".NR} ' data/het-bool.csv}}HERE - -A third way is to abort the process on first instance of bad data: - -POKI_RUN_COMMAND_TOLERATING_ERROR{{mlr --csv put '$reachable = asserting_string($reachable)' data/het-bool.csv}}HERE - -Splitting nested fields ----------------------------------------------------------------- - -Suppose you have a TSV file like this: - -POKI_INCLUDE_ESCAPED(data/nested.tsv)HERE - -The simplest option is to use :ref:`mlr nest `: - -POKI_RUN_COMMAND{{mlr --tsv nest --explode --values --across-records -f b --nested-fs : data/nested.tsv}}HERE - -POKI_RUN_COMMAND{{mlr --tsv nest --explode --values --across-fields -f b --nested-fs : data/nested.tsv}}HERE - -While ``mlr nest`` is simplest, let's also take a look at a few ways to do this using the ``put`` DSL. - -One option to split out the colon-delimited values in the ``b`` column is to use ``splitnv`` to create an integer-indexed map and loop over it, adding new fields to the current record: - -POKI_RUN_COMMAND{{mlr --from data/nested.tsv --itsv --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["p".k]=v}'}}HERE - -while another is to loop over the same map from ``splitnv`` and use it (with ``put -q`` to suppress printing the original record) to produce multiple records: - -POKI_RUN_COMMAND{{mlr --from data/nested.tsv --itsv --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'}}HERE - -POKI_RUN_COMMAND{{mlr --from data/nested.tsv --tsv put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'}}HERE - -Showing differences between successive queries ----------------------------------------------------------------- - -Suppose you have a database query which you run at one point in time, producing the output on the left, then again later producing the output on the right: - -POKI_RUN_COMMAND{{cat data/previous_counters.csv}}HERE - -POKI_RUN_COMMAND{{cat data/current_counters.csv}}HERE - -And, suppose you want to compute the differences in the counters between adjacent keys. Since the color names aren't all in the same order, nor are they all present on both sides, we can't just paste the two files side-by-side and do some column-four-minus-column-two arithmetic. - -First, rename counter columns to make them distinct: - -POKI_RUN_COMMAND{{mlr --csv rename count,previous_count data/previous_counters.csv > data/prevtemp.csv}}HERE - -POKI_RUN_COMMAND{{cat data/prevtemp.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv rename count,current_count data/current_counters.csv > data/currtemp.csv}}HERE - -POKI_RUN_COMMAND{{cat data/currtemp.csv}}HERE - -Then, join on the key field(s), and use unsparsify to zero-fill counters absent on one side but present on the other. Use ``--ul`` and ``--ur`` to emit unpaired records (namely, purple on the left and yellow on the right): - -POKI_INCLUDE_AND_RUN_ESCAPED(data/previous-to-current.sh)HERE - -Finding missing dates ----------------------------------------------------------------- - -Suppose you have some date-stamped data which may (or may not) be missing entries for one or more dates: - -POKI_RUN_COMMAND{{head -n 10 data/miss-date.csv}}HERE - -POKI_RUN_COMMAND{{wc -l data/miss-date.csv}}HERE - -Since there are 1372 lines in the data file, some automation is called for. To find the missing dates, you can convert the dates to seconds since the epoch using ``strptime``, then compute adjacent differences (the ``cat -n`` simply inserts record-counters): - -POKI_INCLUDE_AND_RUN_ESCAPED(data/miss-date-1.sh)HERE - -Then, filter for adjacent difference not being 86400 (the number of seconds in a day): - -POKI_INCLUDE_AND_RUN_ESCAPED(data/miss-date-2.sh)HERE - -Given this, it's now easy to see where the gaps are: - -POKI_RUN_COMMAND{{mlr cat -n then filter '$n >= 770 && $n <= 780' data/miss-date.csv}}HERE - -POKI_RUN_COMMAND{{mlr cat -n then filter '$n >= 1115 && $n <= 1125' data/miss-date.csv}}HERE - -Two-pass algorithms ----------------------------------------------------------------- - -Miller is a streaming record processor; commands are performed once per record. This makes Miller particularly suitable for single-pass algorithms, allowing many of its verbs to process files that are (much) larger than the amount of RAM present in your system. (Of course, Miller verbs such as ``sort``, ``tac``, etc. all must ingest and retain all input records before emitting any output records.) You can also use out-of-stream variables to perform multi-pass computations, at the price of retaining all input records in memory. - -Two-pass algorithms: computation of percentages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For example, mapping numeric values down a column to the percentage between their min and max values is two-pass: on the first pass you find the min and max values, then on the second, map each record's value to a percentage. - -POKI_INCLUDE_AND_RUN_ESCAPED(data/two-pass-percentage.sh)HERE - -Two-pass algorithms: line-number ratios -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Similarly, finding the total record count requires first reading through all the data: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/two-pass-record-numbers.sh)HERE - -Two-pass algorithms: records having max value -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The idea is to retain records having the largest value of ``n`` in the following data: - -POKI_RUN_COMMAND{{mlr --itsv --opprint cat data/maxrows.tsv}}HERE - -Of course, the largest value of ``n`` isn't known until after all data have been read. Using an out-of-stream variable we can retain all records as they are read, then filter them at the end: - -POKI_RUN_COMMAND{{cat data/maxrows.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --itsv --opprint put -q -f data/maxrows.mlr data/maxrows.tsv}}HERE - -Rectangularizing data ----------------------------------------------------------------- - -Suppose you have a method (in whatever language) which is printing things of the form - -POKI_INCLUDE_ESCAPED(data/rect-outer.txt)HERE - -and then calls another method which prints things of the form - -POKI_INCLUDE_ESCAPED(data/rect-middle.txt)HERE - -and then, perhaps, that second method calls a third method which prints things of the form - -POKI_INCLUDE_ESCAPED(data/rect-inner.txt)HERE - -with the result that your program's output is - -POKI_INCLUDE_ESCAPED(data/rect.txt)HERE - -The idea here is that middles starting with a 1 belong to the outer value of 1, and so on. (For example, the outer values might be account IDs, the middle values might be invoice IDs, and the inner values might be invoice line-items.) If you want all the middle and inner lines to have the context of which outers they belong to, you can modify your software to pass all those through your methods. Alternatively, don't refactor your code just to handle some ad-hoc log-data formatting -- instead, use the following to rectangularize the data. The idea is to use an out-of-stream variable to accumulate fields across records. Clear that variable when you see an outer ID; accumulate fields; emit output when you see the inner IDs. - -POKI_INCLUDE_AND_RUN_ESCAPED(data/rect.sh)HERE - -Regularizing ragged CSV ----------------------------------------------------------------- - -Miller handles compliant CSV: in particular, it's an error if the number of data fields in a given data line don't match the number of header lines. But in the event that you have a CSV file in which some lines have less than the full number of fields, you can use Miller to pad them out. The trick is to use NIDX format, for which each line stands on its own without respect to a header line. - -POKI_RUN_COMMAND{{cat data/ragged.csv}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/ragged-csv.sh)HERE - -or, more simply, - -POKI_INCLUDE_AND_RUN_ESCAPED(data/ragged-csv-2.sh)HERE - -Feature-counting ----------------------------------------------------------------- - -Suppose you have some heterogeneous data like this: - -POKI_INCLUDE_ESCAPED(data/features.json)HERE - -A reasonable question to ask is, how many occurrences of each field are there? And, what percentage of total row count has each of them? Since the denominator of the percentage is not known until the end, this is a two-pass algorithm: - -POKI_INCLUDE_ESCAPED(data/feature-count.mlr)HERE - -Then - -POKI_RUN_COMMAND{{mlr --json put -q -f data/feature-count.mlr data/features.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint put -q -f data/feature-count.mlr data/features.json}}HERE - -Unsparsing ----------------------------------------------------------------- - -The previous section discussed how to fill out missing data fields within CSV with full header line -- so the list of all field names is present within the header line. Next, let's look at a related problem: we have data where each record has various key names but we want to produce rectangular output having the union of all key names. - -For example, suppose you have JSON input like this: - -POKI_RUN_COMMAND{{cat data/sparse.json}}HERE - -There are field names ``a``, ``b``, ``v``, ``u``, ``x``, ``w`` in the data -- but not all in every record. Since we don't know the names of all the keys until we've read them all, this needs to be a two-pass algorithm. On the first pass, remember all the unique key names and all the records; on the second pass, loop through the records filling in absent values, then producing output. Use ``put -q`` since we don't want to produce per-record output, only emitting output in the ``end`` block: - -POKI_RUN_COMMAND{{cat data/unsparsify.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --json put -q -f data/unsparsify.mlr data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --ocsv put -q -f data/unsparsify.mlr data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint put -q -f data/unsparsify.mlr data/sparse.json}}HERE - -There is a keystroke-saving verb for this: :ref:`mlr unsparsify `. - -Parsing log-file output ----------------------------------------------------------------- - -This, of course, depends highly on what's in your log files. But, as an example, suppose you have log-file lines such as - -.. code-block:: none - - 2015-10-08 08:29:09,445 INFO com.company.path.to.ClassName @ [sometext] various/sorts/of data {& punctuation} hits=1 status=0 time=2.378 - -I prefer to pre-filter with ``grep`` and/or ``sed`` to extract the structured text, then hand that to Miller. Example: - -.. code-block:: none - - grep 'various sorts' *.log | sed 's/.*} //' | mlr --fs space --repifs --oxtab stats1 -a min,p10,p50,p90,max -f time -g status - -.. _cookbook-memoization-with-oosvars: - -Memoization with out-of-stream variables ----------------------------------------------------------------- - -The recursive function for the Fibonacci sequence is famous for its computational complexity. Namely, using *f*(0)=1, *f*(1)=1, *f*(*n*)=*f*(*n*-1)+*f*(*n*-2) for *n*≥2, the evaluation tree branches left as well as right at each non-trivial level, resulting in millions or more paths to the root 0/1 nodes for larger *n*. This program - -POKI_INCLUDE_ESCAPED(data/fibo-uncached.sh)HERE - -produces output like this: - -.. code-block:: none - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000039101 - 3 3 5 0.000015974 - 4 5 9 0.000019073 - 5 8 15 0.000026941 - 6 13 25 0.000036955 - 7 21 41 0.000056028 - 8 34 67 0.000086069 - 9 55 109 0.000134945 - 10 89 177 0.000217915 - 11 144 287 0.000355959 - 12 233 465 0.000506163 - 13 377 753 0.000811815 - 14 610 1219 0.001297235 - 15 987 1973 0.001960993 - 16 1597 3193 0.003417969 - 17 2584 5167 0.006215811 - 18 4181 8361 0.008294106 - 19 6765 13529 0.012095928 - 20 10946 21891 0.019592047 - 21 17711 35421 0.031193972 - 22 28657 57313 0.057254076 - 23 46368 92735 0.080307961 - 24 75025 150049 0.129482031 - 25 121393 242785 0.213325977 - 26 196418 392835 0.334423065 - 27 317811 635621 0.605969906 - 28 514229 1028457 0.971235037 - -Note that the time it takes to evaluate the function is blowing up exponentially as the input argument increases. Using ``@``-variables, which persist across records, we can cache and reuse the results of previous computations: - -POKI_INCLUDE_ESCAPED(data/fibo-cached.sh)HERE - -with output like this: - -.. code-block:: none - - i o fcount seconds_delta - 1 1 1 0 - 2 2 3 0.000053883 - 3 3 3 0.000035048 - 4 5 3 0.000045061 - 5 8 3 0.000014067 - 6 13 3 0.000028849 - 7 21 3 0.000028133 - 8 34 3 0.000027895 - 9 55 3 0.000014067 - 10 89 3 0.000015020 - 11 144 3 0.000012875 - 12 233 3 0.000033140 - 13 377 3 0.000014067 - 14 610 3 0.000012875 - 15 987 3 0.000029087 - 16 1597 3 0.000013828 - 17 2584 3 0.000013113 - 18 4181 3 0.000012875 - 19 6765 3 0.000013113 - 20 10946 3 0.000012875 - 21 17711 3 0.000013113 - 22 28657 3 0.000013113 - 23 46368 3 0.000015974 - 24 75025 3 0.000012875 - 25 121393 3 0.000013113 - 26 196418 3 0.000012875 - 27 317811 3 0.000013113 - 28 514229 3 0.000012875 - diff --git a/docs/cookbook2.rst b/docs/cookbook2.rst deleted file mode 100644 index 31be4d378..000000000 --- a/docs/cookbook2.rst +++ /dev/null @@ -1,538 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 2: Random things, and some math -================================================================ - -Randomly selecting words from a list ----------------------------------------------------------------- - -Given this `word list <./data/english-words.txt>`_, first take a look to see what the first few lines look like: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ head data/english-words.txt - a - aa - aal - aalii - aam - aardvark - aardwolf - aba - abac - abaca - -Then the following will randomly sample ten words with four to eight characters in them: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10 - thionine - birchman - mildewy - avigate - addedly - abaze - askant - aiming - insulant - coinmate - -Randomly generating jabberwocky words ----------------------------------------------------------------- - -These are simple *n*-grams as `described here `_. Some common functions are `located here `_. Then here are scripts for `1-grams `_ `2-grams `_ `3-grams `_ `4-grams `_, and `5-grams `_. - -The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list -- giving us automatically generated words in the same vein as *bromance* and *spork*: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr - beard - plastinguish - politicially - noise - loan - country - controductionary - suppery - lose - lessors - dollar - judge - rottendence - lessenger - diffendant - suggestional - -Program timing ----------------------------------------------------------------- - -This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller's own runtime. The ``delta`` function computes the difference between successive timestamps. - -.. code-block:: none - - $ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt - - $ head -n 5 lines.txt - i=1 - i=2 - i=3 - i=4 - i=5 - - mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7 - i t t_delta - 1 1430603027.018016 1.430603027e+09 - 2 1430603027.018043 2.694129944e-05 - 3 1430603027.018048 5.006790161e-06 - 4 1430603027.018052 4.053115845e-06 - 5 1430603027.018055 2.861022949e-06 - 6 1430603027.018058 3.099441528e-06 - - mlr --ofmt '%.9le' --oxtab \ - put '$t=systime()' then \ - step -a delta -f t then \ - filter '$i>1' then \ - stats1 -a min,mean,max -f t_delta \ - lines.txt - t_delta_min 2.861022949e-06 - t_delta_mean 4.077508505e-06 - t_delta_max 5.388259888e-05 - -Computing interquartile ranges ----------------------------------------------------------------- - -For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -f x -a p25,p75 \ - then put '$x_iqr = $x_p75 - $x_p25' \ - data/medium - x_p25 0.246670 - x_p75 0.748186 - x_iqr 0.501516 - -For wildcarded field names, first compute p25 and p75, then loop over field names with ``p25`` in them: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \ - then put 'for (k,v in $*) { - if (k =~ "(.*)_p25") { - $["\1_iqr"] = $["\1_p75"] - $["\1_p25"] - } - }' \ - data/medium - i_p25 2501 - i_p75 7501 - x_p25 0.246670 - x_p75 0.748186 - y_p25 0.252137 - y_p75 0.764003 - i_iqr 5000 - x_iqr 0.501516 - y_iqr 0.511866 - -Computing weighted means ----------------------------------------------------------------- - -This might be more elegantly implemented as an option within the ``stats1`` verb. Meanwhile, it's expressible within the DSL: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/medium put -q ' - # Using the y field for weighting in this example - weight = $y; - - # Using the a field for weighted aggregation in this example - @sumwx[$a] += weight * $i; - @sumw[$a] += weight; - - @sumx[$a] += $i; - @sumn[$a] += 1; - - end { - map wmean = {}; - map mean = {}; - for (a in @sumwx) { - wmean[a] = @sumwx[a] / @sumw[a] - } - for (a in @sumx) { - mean[a] = @sumx[a] / @sumn[a] - } - #emit wmean, "a"; - #emit mean, "a"; - emit (wmean, mean), "a"; - }' - a=pan,wmean=4979.563722,mean=5028.259010 - a=eks,wmean=4890.381593,mean=4956.290076 - a=wye,wmean=4946.987746,mean=4920.001017 - a=zee,wmean=5164.719685,mean=5123.092330 - a=hat,wmean=4925.533162,mean=4967.743946 - -Generating random numbers from various distributions ----------------------------------------------------------------- - -Here we can chain together a few simple building blocks: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat expo-sample.sh - # Generate 100,000 pairs of independent and identically distributed - # exponentially distributed random variables with the same rate parameter - # (namely, 2.5). Then compute histograms of one of them, along with - # histograms for their sum and their product. - # - # See also https://en.wikipedia.org/wiki/Exponential_distribution - # - # Here I'm using a specified random-number seed so this example always - # produces the same output for this web document: in everyday practice we - # wouldn't do that. - - mlr -n \ - --seed 0.25 \ - --opprint \ - seqgen --stop 100000 \ - then put ' - # https://en.wikipedia.org/wiki/Inverse_transform_sampling - func expo_sample(lambda) { - return -log(1-urand())/lambda - } - $u = expo_sample(2.5); - $v = expo_sample(2.5); - $s = $u + $v; - $p = $u * $v; - ' \ - then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \ - then bar -f u_count,s_count,p_count --auto -w 20 - -Namely: - -* Set the Miller random-number seed so this webdoc looks the same every time I regenerate it. -* Use pretty-printed tabular output. -* Use pretty-printed tabular output. -* Use ``seqgen`` to produce 100,000 records ``i=0``, ``i=1``, etc. -* Send those to a ``put`` step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples. -* Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc. - -The output is as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - sh expo-sample.sh - bin_lo bin_hi u_count s_count p_count - 0.000000 0.040000 [78]*******************#[9497] [353]#...................[3732] [20]*******************#[39755] - 0.040000 0.080000 [78]******************..[9497] [353]*****...............[3732] [20]*******.............[39755] - 0.080000 0.120000 [78]****************....[9497] [353]*********...........[3732] [20]****................[39755] - 0.120000 0.160000 [78]**************......[9497] [353]************........[3732] [20]***.................[39755] - 0.160000 0.200000 [78]*************.......[9497] [353]**************......[3732] [20]**..................[39755] - 0.200000 0.240000 [78]************........[9497] [353]****************....[3732] [20]*...................[39755] - 0.240000 0.280000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755] - 0.280000 0.320000 [78]**********..........[9497] [353]******************..[3732] [20]*...................[39755] - 0.320000 0.360000 [78]*********...........[9497] [353]*******************.[3732] [20]#...................[39755] - 0.360000 0.400000 [78]********............[9497] [353]*******************.[3732] [20]#...................[39755] - 0.400000 0.440000 [78]*******.............[9497] [353]*******************#[3732] [20]#...................[39755] - 0.440000 0.480000 [78]******..............[9497] [353]******************..[3732] [20]#...................[39755] - 0.480000 0.520000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755] - 0.520000 0.560000 [78]*****...............[9497] [353]******************..[3732] [20]#...................[39755] - 0.560000 0.600000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755] - 0.600000 0.640000 [78]****................[9497] [353]*****************...[3732] [20]#...................[39755] - 0.640000 0.680000 [78]****................[9497] [353]****************....[3732] [20]#...................[39755] - 0.680000 0.720000 [78]***.................[9497] [353]****************....[3732] [20]#...................[39755] - 0.720000 0.760000 [78]***.................[9497] [353]**************......[3732] [20]#...................[39755] - 0.760000 0.800000 [78]**..................[9497] [353]**************......[3732] [20]#...................[39755] - 0.800000 0.840000 [78]**..................[9497] [353]*************.......[3732] [20]#...................[39755] - 0.840000 0.880000 [78]**..................[9497] [353]************........[3732] [20]#...................[39755] - 0.880000 0.920000 [78]**..................[9497] [353]***********.........[3732] [20]#...................[39755] - 0.920000 0.960000 [78]*...................[9497] [353]***********.........[3732] [20]#...................[39755] - 0.960000 1.000000 [78]*...................[9497] [353]**********..........[3732] [20]#...................[39755] - 1.000000 1.040000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755] - 1.040000 1.080000 [78]*...................[9497] [353]*********...........[3732] [20]#...................[39755] - 1.080000 1.120000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755] - 1.120000 1.160000 [78]*...................[9497] [353]********............[3732] [20]#...................[39755] - 1.160000 1.200000 [78]#...................[9497] [353]*******.............[3732] [20]#...................[39755] - 1.200000 1.240000 [78]#...................[9497] [353]******..............[3732] [20]#...................[39755] - 1.240000 1.280000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.280000 1.320000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.320000 1.360000 [78]#...................[9497] [353]*****...............[3732] [20]#...................[39755] - 1.360000 1.400000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755] - 1.400000 1.440000 [78]#...................[9497] [353]****................[3732] [20]#...................[39755] - 1.440000 1.480000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.480000 1.520000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.520000 1.560000 [78]#...................[9497] [353]***.................[3732] [20]#...................[39755] - 1.560000 1.600000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755] - 1.600000 1.640000 [78]#...................[9497] [353]**..................[3732] [20]#...................[39755] - 1.640000 1.680000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.680000 1.720000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.720000 1.760000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.760000 1.800000 [78]#...................[9497] [353]*...................[3732] [20]#...................[39755] - 1.800000 1.840000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.840000 1.880000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.880000 1.920000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.920000 1.960000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - 1.960000 2.000000 [78]#...................[9497] [353]#...................[3732] [20]#...................[39755] - -Sieve of Eratosthenes ----------------------------------------------------------------- - -The `Sieve of Eratosthenes `_ is a standard introductory programming topic. The idea is to find all primes up to some *N* by making a list of the numbers 1 to *N*, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in ``begin`` and ``end`` statements; there is no file input (so we use ``mlr -n`` to keep Miller from waiting for input data). - -.. code-block:: none - :emphasize-lines: 1,1 - - cat programs/sieve.mlr - # ================================================================ - # Sieve of Eratosthenes: simple example of Miller DSL as programming language. - # ================================================================ - - # Put this in a begin-block so we can do either - # mlr -n put -q -f name-of-this-file.mlr - # or - # mlr -n put -q -f name-of-this-file.mlr -e '@n = 200' - # i.e. 100 is the default upper limit, and another can be specified using -e. - begin { - @n = 100; - } - - end { - for (int i = 0; i <= @n; i += 1) { - @s[i] = true; - } - @s[0] = false; # 0 is neither prime nor composite - @s[1] = false; # 1 is neither prime nor composite - # Strike out multiples - for (int i = 2; i <= @n; i += 1) { - for (int j = i+i; j <= @n; j += i) { - @s[j] = false; - } - } - # Print survivors - for (int i = 0; i <= @n; i += 1) { - if (@s[i]) { - print i; - } - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put -f programs/sieve.mlr - 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 - -Mandelbrot-set generator ----------------------------------------------------------------- - -The `Mandelbrot set `_ is also easily expressed. This isn't an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language -- a test case for the expressiveness of the language. - -The (approximate) computation of points in the complex plane which are and aren't members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat programs/mand.mlr - # Mandelbrot set generator: simple example of Miller DSL as programming language. - begin { - # Set defaults - @rcorn = -2.0; - @icorn = -2.0; - @side = 4.0; - @iheight = 50; - @iwidth = 100; - @maxits = 100; - @levelstep = 5; - @chars = "@X*o-."; # Palette of characters to print to the screen. - @verbose = false; - @do_julia = false; - @jr = 0.0; # Real part of Julia point, if any - @ji = 0.0; # Imaginary part of Julia point, if any - } - - # Here, we can override defaults from an input file (if any). In Miller's - # put/filter DSL, absent-null right-hand sides result in no assignment so we - # can simply put @rcorn = $rcorn: if there is a field in the input like - # 'rcorn = -1.847' we'll read and use it, else we'll keep the default. - @rcorn = $rcorn; - @icorn = $icorn; - @side = $side; - @iheight = $iheight; - @iwidth = $iwidth; - @maxits = $maxits; - @levelstep = $levelstep; - @chars = $chars; - @verbose = $verbose; - @do_julia = $do_julia; - @jr = $jr; - @ji = $ji; - - end { - if (@verbose) { - print "RCORN = ".@rcorn; - print "ICORN = ".@icorn; - print "SIDE = ".@side; - print "IHEIGHT = ".@iheight; - print "IWIDTH = ".@iwidth; - print "MAXITS = ".@maxits; - print "LEVELSTEP = ".@levelstep; - print "CHARS = ".@chars; - } - - # Iterate over a matrix of rows and columns, printing one character for each cell. - for (int ii = @iheight-1; ii >= 0; ii -= 1) { - num pi = @icorn + (ii/@iheight) * @side; - for (int ir = 0; ir < @iwidth; ir += 1) { - num pr = @rcorn + (ir/@iwidth) * @side; - printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji); - } - print; - } - } - - # This is a function to approximate membership in the Mandelbrot set (or Julia - # set for a given Julia point if do_julia == true) for a given point in the - # complex plane. - func get_point_plot(pr, pi, maxits, do_julia, jr, ji) { - num zr = 0.0; - num zi = 0.0; - num cr = 0.0; - num ci = 0.0; - - if (!do_julia) { - zr = 0.0; - zi = 0.0; - cr = pr; - ci = pi; - } else { - zr = pr; - zi = pi; - cr = jr; - ci = ji; - } - - int iti = 0; - bool escaped = false; - num zt = 0; - for (iti = 0; iti < maxits; iti += 1) { - num mag = zr*zr + zi+zi; - if (mag > 4.0) { - escaped = true; - break; - } - # z := z^2 + c - zt = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = zt; - } - if (!escaped) { - return "."; - } else { - # The // operator is Miller's (pythonic) integer-division operator - int level = (iti // @levelstep) % strlen(@chars); - return substr(@chars, level, level); - } - } - -At standard resolution this makes a nice little ASCII plot: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put -f ./programs/mand.mlr - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX.XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXooXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX**o..*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXX*-....-oXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@XXXXXXXXXX*......o*XXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXX**oo*-.-........oo.XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX....................X..o-XXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXX*oo......................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@XXX*XXXXXXXXXXXX**o........................*X*X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@XXXXXXooo***o*.*XX**X..........................o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@XXXXXXXX*-.......-***.............................oXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@XXXXXXXX*@..........Xo............................*XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@XXXX@XXXXXXXX*o@oX...........@...........................oXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - .........................................................o*XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@XXXXXXXXX*-.oX...........@...........................oXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXX**@..........*o............................*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXXXXX-........***.............................oXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@XXXXXXXXXXXXoo****o*.XX***@..........................o-XXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@XXXXX*XXXX*XXXXXXX**-........................***XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*.....................@o*XXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX*....................*..o-XX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX*ooo*-.o........oo.X*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX**@.....*XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX*o....-o*XXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXo*o..*XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX*o*XXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXX@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXX@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - -But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture: - -.. code-block:: none - - #!/bin/bash - # Get the number of rows and columns from the terminal window dimensions - iheight=$(stty size | mlr --nidx --fs space cut -f 1) - iwidth=$(stty size | mlr --nidx --fs space cut -f 2) - echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \ - | mlr put -f programs/mand.mlr - -.. image:: pix/mand.png diff --git a/docs/cookbook2.rst.in b/docs/cookbook2.rst.in deleted file mode 100644 index 202d2ebe5..000000000 --- a/docs/cookbook2.rst.in +++ /dev/null @@ -1,147 +0,0 @@ -Cookbook part 2: Random things, and some math -================================================================ - -Randomly selecting words from a list ----------------------------------------------------------------- - -Given this `word list <./data/english-words.txt>`_, first take a look to see what the first few lines look like: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ head data/english-words.txt - a - aa - aal - aalii - aam - aardvark - aardwolf - aba - abac - abaca - -Then the following will randomly sample ten words with four to eight characters in them: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --from data/english-words.txt --nidx filter -S 'n=strlen($1);4<=n&&n<=8' then sample -k 10 - thionine - birchman - mildewy - avigate - addedly - abaze - askant - aiming - insulant - coinmate - -Randomly generating jabberwocky words ----------------------------------------------------------------- - -These are simple *n*-grams as `described here `_. Some common functions are `located here `_. Then here are scripts for `1-grams `_ `2-grams `_ `3-grams `_ `4-grams `_, and `5-grams `_. - -The idea is that words from the input file are consumed, then taken apart and pasted back together in ways which imitate the letter-to-letter transitions found in the word list -- giving us automatically generated words in the same vein as *bromance* and *spork*: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --nidx --from ./ngrams/gsl-2000.txt put -q -f ./ngrams/ngfuncs.mlr -f ./ngrams/ng5.mlr - beard - plastinguish - politicially - noise - loan - country - controductionary - suppery - lose - lessors - dollar - judge - rottendence - lessenger - diffendant - suggestional - -Program timing ----------------------------------------------------------------- - -This admittedly artificial example demonstrates using Miller time and stats functions to introspectively acquire some information about Miller's own runtime. The ``delta`` function computes the difference between successive timestamps. - -POKI_INCLUDE_ESCAPED(data/timing-example.txt)HERE - -Computing interquartile ranges ----------------------------------------------------------------- - -For one or more specified field names, simply compute p25 and p75, then write the IQR as the difference of p75 and p25: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/iqr1.sh)HERE - -For wildcarded field names, first compute p25 and p75, then loop over field names with ``p25`` in them: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/iqrn.sh)HERE - -Computing weighted means ----------------------------------------------------------------- - -This might be more elegantly implemented as an option within the ``stats1`` verb. Meanwhile, it's expressible within the DSL: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/weighted-mean.sh)HERE - -Generating random numbers from various distributions ----------------------------------------------------------------- - -Here we can chain together a few simple building blocks: - -POKI_RUN_COMMAND{{cat expo-sample.sh}}HERE - -Namely: - -* Set the Miller random-number seed so this webdoc looks the same every time I regenerate it. -* Use pretty-printed tabular output. -* Use pretty-printed tabular output. -* Use ``seqgen`` to produce 100,000 records ``i=0``, ``i=1``, etc. -* Send those to a ``put`` step which defines an inverse-transform-sampling function and calls it twice, then computes the sum and product of samples. -* Send those to a histogram, and from there to a bar-plotter. This is just for visualization; you could just as well output CSV and send that off to your own plotting tool, etc. - -The output is as follows: - -POKI_RUN_COMMAND{{sh expo-sample.sh}}HERE - -Sieve of Eratosthenes ----------------------------------------------------------------- - -The `Sieve of Eratosthenes `_ is a standard introductory programming topic. The idea is to find all primes up to some *N* by making a list of the numbers 1 to *N*, then striking out all multiples of 2 except 2 itself, all multiples of 3 except 3 itself, all multiples of 4 except 4 itself, and so on. Whatever survives that without getting marked is a prime. This is easy enough in Miller. Notice that here all the work is in ``begin`` and ``end`` statements; there is no file input (so we use ``mlr -n`` to keep Miller from waiting for input data). - -POKI_RUN_COMMAND{{cat programs/sieve.mlr}}HERE - -POKI_RUN_COMMAND{{mlr -n put -f programs/sieve.mlr}}HERE - -Mandelbrot-set generator ----------------------------------------------------------------- - -The `Mandelbrot set `_ is also easily expressed. This isn't an important case of data-processing in the vein for which Miller was designed, but it is an example of Miller as a general-purpose programming language -- a test case for the expressiveness of the language. - -The (approximate) computation of points in the complex plane which are and aren't members is just a few lines of complex arithmetic (see the Wikipedia article); how to render them is another task. Using graphics libraries you can create PNG or JPEG files, but another fun way to do this is by printing various characters to the screen: - -POKI_RUN_COMMAND{{cat programs/mand.mlr}}HERE - -At standard resolution this makes a nice little ASCII plot: - -POKI_RUN_COMMAND{{mlr -n put -f ./programs/mand.mlr}}HERE - -But using a very small font size (as small as my Mac will let me go), and by choosing the coordinates to zoom in on a particular part of the complex plane, we can get a nice little picture: - -.. code-block:: none - - #!/bin/bash - # Get the number of rows and columns from the terminal window dimensions - iheight=$(stty size | mlr --nidx --fs space cut -f 1) - iwidth=$(stty size | mlr --nidx --fs space cut -f 2) - echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" \ - | mlr put -f programs/mand.mlr - -.. image:: pix/mand.png diff --git a/docs/cookbook3.rst b/docs/cookbook3.rst deleted file mode 100644 index 87023ae67..000000000 --- a/docs/cookbook3.rst +++ /dev/null @@ -1,343 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Cookbook part 3: Stats with and without out-of-stream variables -================================================================ - -Overview ----------------------------------------------------------------- - -One of Miller's strengths is its compact notation: for example, given input of the form - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 5 ../data/medium - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -you can simply do - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -a sum -f x ../data/medium - x_sum 4986.019682 - -or - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a sum -f x -g b ../data/medium - b x_sum - pan 965.763670 - wye 1023.548470 - zee 979.742016 - eks 1016.772857 - hat 1000.192668 - -rather than the more tedious - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put -q ' - @x_sum += $x; - end { - emit @x_sum - } - ' data/medium - x_sum 4986.019682 - -or - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put -q ' - @x_sum[$b] += $x; - end { - emit @x_sum, "b" - } - ' data/medium - b x_sum - pan 965.763670 - wye 1023.548470 - zee 979.742016 - eks 1016.772857 - hat 1000.192668 - -The former (``mlr stats1`` et al.) has the advantages of being easier to type, being less error-prone to type, and running faster. - -Nonetheless, out-of-stream variables (which I whimsically call *oosvars*), begin/end blocks, and emit statements give you the ability to implement logic -- if you wish to do so -- which isn't present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.) - -The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought. - -Mean without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a mean -f x data/medium - x_mean - 0.498602 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put -q ' - @x_sum += $x; - @x_count += 1; - end { - @x_mean = @x_sum / @x_count; - emit @x_mean - } - ' data/medium - x_mean - 0.498602 - -Keyed mean without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a mean -f x -g a,b data/medium - a b x_mean - pan pan 0.513314 - eks pan 0.485076 - wye wye 0.491501 - eks wye 0.483895 - wye pan 0.499612 - zee pan 0.519830 - eks zee 0.495463 - zee wye 0.514267 - hat wye 0.493813 - pan wye 0.502362 - zee eks 0.488393 - hat zee 0.509999 - hat eks 0.485879 - wye hat 0.497730 - pan eks 0.503672 - eks eks 0.522799 - hat hat 0.479931 - hat pan 0.464336 - zee zee 0.512756 - pan hat 0.492141 - pan zee 0.496604 - zee hat 0.467726 - wye zee 0.505907 - eks hat 0.500679 - wye eks 0.530604 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put -q ' - @x_sum[$a][$b] += $x; - @x_count[$a][$b] += 1; - end{ - for ((a, b), v in @x_sum) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]; - } - emit @x_mean, "a", "b" - } - ' data/medium - a b x_mean - pan pan 0.513314 - pan wye 0.502362 - pan eks 0.503672 - pan hat 0.492141 - pan zee 0.496604 - eks pan 0.485076 - eks wye 0.483895 - eks zee 0.495463 - eks eks 0.522799 - eks hat 0.500679 - wye wye 0.491501 - wye pan 0.499612 - wye hat 0.497730 - wye zee 0.505907 - wye eks 0.530604 - zee pan 0.519830 - zee wye 0.514267 - zee eks 0.488393 - zee zee 0.512756 - zee hat 0.467726 - hat wye 0.493813 - hat zee 0.509999 - hat eks 0.485879 - hat hat 0.479931 - hat pan 0.464336 - -Variance and standard deviation without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium - x_count 10000 - x_sum 4986.019682 - x_mean 0.498602 - x_var 0.084270 - x_stddev 0.290293 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat variance.mlr - @n += 1; - @sumx += $x; - @sumx2 += $x**2; - end { - @mean = @sumx / @n; - @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1); - @stddev = sqrt(@var); - emitf @n, @sumx, @sumx2, @mean, @var, @stddev - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put -q -f variance.mlr data/medium - n 10000 - sumx 4986.019682 - sumx2 3328.652400 - mean 0.498602 - var 0.084270 - stddev 0.290293 - -You can also do this keyed, of course, imitating the keyed-mean example above. - -Min/max without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -a min,max -f x data/medium - x_min 0.000045 - x_max 0.999953 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium - x_min 0.000045 - x_max 0.999953 - -Keyed min/max without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a min,max -f x -g a data/medium - a x_min x_max - pan 0.000204 0.999403 - eks 0.000692 0.998811 - wye 0.000187 0.999823 - zee 0.000549 0.999490 - hat 0.000045 0.999953 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/medium put -q ' - @min[$a] = min(@min[$a], $x); - @max[$a] = max(@max[$a], $x); - end{ - emit (@min, @max), "a"; - } - ' - a min max - pan 0.000204 0.999403 - eks 0.000692 0.998811 - wye 0.000187 0.999823 - zee 0.000549 0.999490 - hat 0.000045 0.999953 - -Delta without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a delta -f x data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 - wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 - eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 - wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0.411890 - wye wye 3 0.20460330576630303 0.33831852551664776 -0.554077 - eks wye 4 0.38139939387114097 0.13418874328430463 0.176796 - wye pan 5 0.5732889198020006 0.8636244699032729 0.191890 - -Keyed delta without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a delta -f x -g a data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0 - wye wye 3 0.20460330576630303 0.33831852551664776 0 - eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281 - wye pan 5 0.5732889198020006 0.8636244699032729 0.368686 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small - a b i x y x_delta - pan pan 1 0.3467901443380824 0.7268028627434533 0 - eks pan 2 0.7586799647899636 0.5221511083334797 0 - wye wye 3 0.20460330576630303 0.33831852551664776 0 - eks wye 4 0.38139939387114097 0.13418874328430463 -0.377281 - wye pan 5 0.5732889198020006 0.8636244699032729 0.368686 - -Exponentially weighted moving averages without/with oosvars ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a ewma -d 0.1 -f x data/small - a b i x y x_ewma_0.1 - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put ' - begin{ @a=0.1 }; - $e = NR==1 ? $x : @a * $x + (1 - @a) * @e; - @e=$e - ' data/small - a b i x y e - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 diff --git a/docs/cookbook3.rst.in b/docs/cookbook3.rst.in deleted file mode 100644 index cf7ee8d03..000000000 --- a/docs/cookbook3.rst.in +++ /dev/null @@ -1,91 +0,0 @@ -Cookbook part 3: Stats with and without out-of-stream variables -================================================================ - -Overview ----------------------------------------------------------------- - -One of Miller's strengths is its compact notation: for example, given input of the form - -POKI_RUN_COMMAND{{head -n 5 ../data/medium}}HERE - -you can simply do - -POKI_RUN_COMMAND{{mlr --oxtab stats1 -a sum -f x ../data/medium}}HERE - -or - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a sum -f x -g b ../data/medium}}HERE - -rather than the more tedious - -POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum.sh)HERE - -or - -POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-sum-grouped.sh)HERE - -The former (``mlr stats1`` et al.) has the advantages of being easier to type, being less error-prone to type, and running faster. - -Nonetheless, out-of-stream variables (which I whimsically call *oosvars*), begin/end blocks, and emit statements give you the ability to implement logic -- if you wish to do so -- which isn't present in other Miller verbs. (If you find yourself often using the same out-of-stream-variable logic over and over, please file a request at https://github.com/johnkerl/miller/issues to get it implemented directly in C as a Miller verb of its own.) - -The following examples compute some things using oosvars which are already computable using Miller verbs, by way of providing food for thought. - -Mean without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x data/medium}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/mean-with-oosvars.sh)HERE - -Keyed mean without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x -g a,b data/medium}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-mean-with-oosvars.sh)HERE - -Variance and standard deviation without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --oxtab stats1 -a count,sum,mean,var,stddev -f x data/medium}}HERE - -POKI_RUN_COMMAND{{cat variance.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab put -q -f variance.mlr data/medium}}HERE - -You can also do this keyed, of course, imitating the keyed-mean example above. - -Min/max without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --oxtab stats1 -a min,max -f x data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab put -q '@x_min = min(@x_min, $x); @x_max = max(@x_max, $x); end{emitf @x_min, @x_max}' data/medium}}HERE - -Keyed min/max without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,max -f x -g a data/medium}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/keyed-min-max-with-oosvars.sh)HERE - -Delta without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last) ? $x - @last : 0; @last = $x' data/small}}HERE - -Keyed delta without/with oosvars ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --opprint step -a delta -f x -g a data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$x_delta = is_present(@last[$a]) ? $x - @last[$a] : 0; @last[$a]=$x' data/small}}HERE - -Exponentially weighted moving averages without/with oosvars ----------------------------------------------------------------- - -POKI_INCLUDE_AND_RUN_ESCAPED(verb-example-ewma.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(oosvar-example-ewma.sh)HERE diff --git a/docs/customization.rst b/docs/customization.rst deleted file mode 100644 index a9726acea..000000000 --- a/docs/customization.rst +++ /dev/null @@ -1,96 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Customization: .mlrrc -================================================================ - -How to use .mlrrc ----------------------------------------------------------------- - -Suppose you always use CSV files. Then instead of always having to type ``--csv`` as in - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cut -x -f extra mydata.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv sort -n id mydata.csv - -and so on, you can instead put the following into your ``$HOME/.mlrrc``: - -.. code-block:: none - - --csv - -Then you can just type things like - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cut -x -f extra mydata.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -n id mydata.csv - -and the ``--csv`` part will automatically be understood. (If you do want to process, say, a JSON file then ``mlr --json ...`` at the command line will override the default from your ``.mlrrc``.) - -What you can put in your .mlrrc ----------------------------------------------------------------- - -* You can include any command-line flags, except the "terminal" ones such as ``--help``. - -* The formatting rule is you need to put one flag beginning with ``--`` per line: for example, ``--csv`` on one line and ``--nr-progress-mod 1000`` on a separate line. - -* Since every line starts with a ``--`` option, you can leave off the initial ``--`` if you want. For example, ``ojson`` is the same as ``--ojson``, and ``nr-progress-mod 1000`` is the same as ``--nr-progress-mod 1000``. - -* Comments are from a ``#`` to the end of the line. - -* Empty lines are ignored -- including lines which are empty after comments are removed. - -Here is an example ``.mlrrc file``: - -.. code-block:: none - - # These are my preferred default settings for Miller - - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - - # If a data line has fewer fields than the header line, instead of erroring - # (which is the default), just insert empty values for the missing ones: - allow-ragged-csv-input - - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - # Use "@", rather than "#", for comments within data files: - skip-comments-with @ - -Where to put your .mlrrc ----------------------------------------------------------------- - -* If the environment variable ``MLRRC`` is set: - - * If its value is ``__none__`` then no ``.mlrrc`` files are processed. (This is nice for things like regression testing.) - - * Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort ``mlr`` with a usage message (as if you had mistyped something on the command line). If the file can't be loaded at all, though, it is silently skipped. - - * Any ``.mlrrc`` in your home directory or current directory is ignored whenever ``MLRRC`` is set in the environment. - - * Example line in your shell's rc file: ``export MLRRC=/path/to/my/mlrrc`` - -* Otherwise: - - * If ``$HOME/.mlrrc`` exists, it's processed as above. - - * If ``./.mlrrc`` exists, it's then also processed as above. - - * The idea is you can have all your settings in your ``$HOME/.mlrrc``, then override maybe one or two for your current directory if you like. diff --git a/docs/customization.rst.in b/docs/customization.rst.in deleted file mode 100644 index 16125005e..000000000 --- a/docs/customization.rst.in +++ /dev/null @@ -1,75 +0,0 @@ -Customization: .mlrrc -================================================================ - -How to use .mlrrc ----------------------------------------------------------------- - -Suppose you always use CSV files. Then instead of always having to type ``--csv`` as in - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cut -x -f extra mydata.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv sort -n id mydata.csv - -and so on, you can instead put the following into your ``$HOME/.mlrrc``: - -.. code-block:: none - - --csv - -Then you can just type things like - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cut -x -f extra mydata.csv - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -n id mydata.csv - -and the ``--csv`` part will automatically be understood. (If you do want to process, say, a JSON file then ``mlr --json ...`` at the command line will override the default from your ``.mlrrc``.) - -What you can put in your .mlrrc ----------------------------------------------------------------- - -* You can include any command-line flags, except the "terminal" ones such as ``--help``. - -* The formatting rule is you need to put one flag beginning with ``--`` per line: for example, ``--csv`` on one line and ``--nr-progress-mod 1000`` on a separate line. - -* Since every line starts with a ``--`` option, you can leave off the initial ``--`` if you want. For example, ``ojson`` is the same as ``--ojson``, and ``nr-progress-mod 1000`` is the same as ``--nr-progress-mod 1000``. - -* Comments are from a ``#`` to the end of the line. - -* Empty lines are ignored -- including lines which are empty after comments are removed. - -Here is an example ``.mlrrc file``: - -POKI_INCLUDE_ESCAPED(sample_mlrrc)HERE - -Where to put your .mlrrc ----------------------------------------------------------------- - -* If the environment variable ``MLRRC`` is set: - - * If its value is ``__none__`` then no ``.mlrrc`` files are processed. (This is nice for things like regression testing.) - - * Otherwise, its value (as a filename) is loaded and processed. If there are syntax errors, they abort ``mlr`` with a usage message (as if you had mistyped something on the command line). If the file can't be loaded at all, though, it is silently skipped. - - * Any ``.mlrrc`` in your home directory or current directory is ignored whenever ``MLRRC`` is set in the environment. - - * Example line in your shell's rc file: ``export MLRRC=/path/to/my/mlrrc`` - -* Otherwise: - - * If ``$HOME/.mlrrc`` exists, it's processed as above. - - * If ``./.mlrrc`` exists, it's then also processed as above. - - * The idea is you can have all your settings in your ``$HOME/.mlrrc``, then override maybe one or two for your current directory if you like. diff --git a/docs/data-examples.rst b/docs/data-examples.rst deleted file mode 100644 index f1c389f88..000000000 --- a/docs/data-examples.rst +++ /dev/null @@ -1,229 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Data-diving examples -================================================================ - -flins data ----------------------------------------------------------------- - -The `flins.csv <./data/flins.csv>`_ file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data. - -Vertical-tabular format is good for a quick look at CSV data layout -- seeing what columns you have to work with: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 2 data/flins.csv | mlr --icsv --oxtab cat - county Seminole - tiv_2011 22890.55 - tiv_2012 20848.71 - line Residential - -A few simple queries: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head - county count - Seminole 1 - Miami Dade 2 - Palm Beach 1 - Highlands 2 - Duval 1 - St. Johns 1 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line - -Categorization of total insured value: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 - tiv_2012_min tiv_2012_mean tiv_2012_max - 19757.910000 1061531.463750 2785551.630000 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible - hu_site_deductible_p0 - hu_site_deductible_p10 - hu_site_deductible_p50 - hu_site_deductible_p90 - hu_site_deductible_p95 - hu_site_deductible_p99 - hu_site_deductible_p100 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head - county hu_site_deductible_p95 hu_site_deductible_p99 hu_site_deductible_p100 - Duval - - - - Highlands - - - - Miami Dade - - - - Palm Beach - - - - Seminole - - - - St. Johns - - - - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 - tiv_2011_tiv_2012_corr 0.935363 - tiv_2011_tiv_2012_ols_m 1.089091 - tiv_2011_tiv_2012_ols_b 103095.523356 - tiv_2011_tiv_2012_ols_n 8 - tiv_2011_tiv_2012_r2 0.874904 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county - county tiv_2011_tiv_2012_corr tiv_2011_tiv_2012_ols_m tiv_2011_tiv_2012_ols_b tiv_2011_tiv_2012_ols_n tiv_2011_tiv_2012_r2 - Seminole - - - 1 - - Miami Dade 1.000000 0.930643 -2311.154328 2 1.000000 - Palm Beach - - - 1 - - Highlands 1.000000 1.055693 -4529.793939 2 1.000000 - Duval - - - 1 - - St. Johns - - - 1 - - -Color/shape data ----------------------------------------------------------------- - -The `colored-shapes.dkvp <./data/colored-shapes.dkvp>`_ file is some sample data produced by the `mkdat2 <./data/mkdat2>`_ script. The idea is: - -* Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically. -* Each record is labeled with one of a few colors and one of a few shapes. -* The ``flag`` field is 0 or 1, with probability dependent on color -* The ``u`` field is plain uniform on the unit interval. -* The ``v`` field is the same, except tightly correlated with ``u`` for red circles. -* The ``w`` field is autocorrelated for each color/shape pair. -* The ``x`` field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape. - -Peek at the data: - -.. code-block:: none - :emphasize-lines: 1,1 - - wc -l data/colored-shapes.dkvp - 10078 data/colored-shapes.dkvp - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 6 data/colored-shapes.dkvp | mlr --opprint cat - color shape flag i u v w x - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - red square 1 15 0.21966833570651523 0.001257332190235938 0.7927778364718627 2.944117399716207 - red circle 1 16 0.20901671281497636 0.29005231936593445 0.13810280912907674 5.065034003400998 - red square 0 48 0.9562743938458542 0.7467203085342884 0.7755423050923582 7.117831369597269 - purple triangle 0 51 0.4355354501763202 0.8591292672156728 0.8122903963006748 5.753094629505863 - red square 0 64 0.2015510269821953 0.9531098083420033 0.7719912015786777 5.612050466474166 - -Look at uncategorized stats (using `creach `_ for spacing). - -Here it looks reasonable that ``u`` is unit-uniform; something's up with ``v`` but we can't yet see what: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3 - flag_min 0 - flag_mean 0.398889 - flag_max 1 - - u_min 0.000044 - u_mean 0.498326 - u_max 0.999969 - - v_min -0.092709 - v_mean 0.497787 - v_max 1.072500 - -The histogram shows the different distribution of 0/1 flags: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp - bin_lo bin_hi flag_count u_count v_count - -0.100000 0.000000 6058 0 36 - 0.000000 0.100000 0 1062 988 - 0.100000 0.200000 0 985 1003 - 0.200000 0.300000 0 1024 1014 - 0.300000 0.400000 0 1002 991 - 0.400000 0.500000 0 989 1041 - 0.500000 0.600000 0 1001 1016 - 0.600000 0.700000 0 972 962 - 0.700000 0.800000 0 1035 1070 - 0.800000 0.900000 0 995 993 - 0.900000 1.000000 4020 1013 939 - 1.000000 1.100000 0 0 25 - -Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp - color flag_min flag_mean flag_max u_min u_mean u_max v_min v_mean v_max - blue 0 0.584354 1 0.000044 0.517717 0.999969 0.001489 0.491056 0.999576 - green 0 0.209197 1 0.000488 0.504861 0.999936 0.000501 0.499085 0.999676 - orange 0 0.521452 1 0.001235 0.490532 0.998885 0.002449 0.487764 0.998475 - purple 0 0.090193 1 0.000266 0.494005 0.999647 0.000364 0.497051 0.999975 - red 0 0.303167 1 0.000671 0.492560 0.999882 -0.092709 0.496535 1.072500 - yellow 0 0.892427 1 0.001300 0.497129 0.999923 0.000711 0.510627 0.999919 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp - shape flag_min flag_mean flag_max u_min u_mean u_max v_min v_mean v_max - circle 0 0.399846 1 0.000044 0.498555 0.999923 -0.092709 0.495524 1.072500 - square 0 0.396112 1 0.000188 0.499385 0.999969 0.000089 0.496538 0.999975 - triangle 0 0.401542 1 0.000881 0.496859 0.999661 0.000717 0.501050 0.999995 - -Look at bivariate stats by color and shape. In particular, ``u,v`` pairwise correlation for red circles pops out: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp - u_v_corr w_x_corr - 0.133418 -0.011320 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp - color shape u_v_corr w_x_corr - red circle 0.980798 -0.018565 - orange square 0.176858 -0.071044 - green circle 0.057644 0.011795 - red square 0.055745 -0.000680 - yellow triangle 0.044573 0.024605 - yellow square 0.043792 -0.044623 - purple circle 0.035874 0.134112 - blue square 0.032412 -0.053508 - blue triangle 0.015356 -0.000608 - orange circle 0.010519 -0.162795 - red triangle 0.008098 0.012486 - purple triangle 0.005155 -0.045058 - purple square -0.025680 0.057694 - green square -0.025776 -0.003265 - orange triangle -0.030457 -0.131870 - yellow circle -0.064773 0.073695 - blue circle -0.102348 -0.030529 - green triangle -0.109018 -0.048488 diff --git a/docs/data-examples.rst.in b/docs/data-examples.rst.in deleted file mode 100644 index eee88eb7c..000000000 --- a/docs/data-examples.rst.in +++ /dev/null @@ -1,72 +0,0 @@ -Data-diving examples -================================================================ - -flins data ----------------------------------------------------------------- - -The `flins.csv <./data/flins.csv>`_ file is some sample data obtained from https://support.spatialkey.com/spatialkey-sample-csv-data. - -Vertical-tabular format is good for a quick look at CSV data layout -- seeing what columns you have to work with: - -POKI_RUN_COMMAND{{head -n 2 data/flins.csv | mlr --icsv --oxtab cat}}HERE - -A few simple queries: - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint count-distinct -f county | head}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint count-distinct -f construction,line}}HERE - -Categorization of total insured value: - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a min,mean,max -f tiv_2012 -g construction,line}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --oxtab stats1 -a p0,p10,p50,p90,p95,p99,p100 -f hu_site_deductible}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats1 -a p95,p99,p100 -f hu_site_deductible -g county then sort -f county | head}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --oxtab stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012}}HERE - -POKI_RUN_COMMAND{{mlr --from data/flins.csv --icsv --opprint stats2 -a corr,linreg-ols,r2 -f tiv_2011,tiv_2012 -g county}}HERE - -Color/shape data ----------------------------------------------------------------- - -The `colored-shapes.dkvp <./data/colored-shapes.dkvp>`_ file is some sample data produced by the `mkdat2 <./data/mkdat2>`_ script. The idea is: - -* Produce some data with known distributions and correlations, and verify that Miller recovers those properties empirically. -* Each record is labeled with one of a few colors and one of a few shapes. -* The ``flag`` field is 0 or 1, with probability dependent on color -* The ``u`` field is plain uniform on the unit interval. -* The ``v`` field is the same, except tightly correlated with ``u`` for red circles. -* The ``w`` field is autocorrelated for each color/shape pair. -* The ``x`` field is boring Gaussian with mean 5 and standard deviation about 1.2, with no dependence on color or shape. - -Peek at the data: - -POKI_RUN_COMMAND{{wc -l data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{head -n 6 data/colored-shapes.dkvp | mlr --opprint cat}}HERE - -Look at uncategorized stats (using `creach `_ for spacing). - -Here it looks reasonable that ``u`` is unit-uniform; something's up with ``v`` but we can't yet see what: - -POKI_RUN_COMMAND{{mlr --oxtab stats1 -a min,mean,max -f flag,u,v data/colored-shapes.dkvp | creach 3}}HERE - -The histogram shows the different distribution of 0/1 flags: - -POKI_RUN_COMMAND{{mlr --opprint histogram -f flag,u,v --lo -0.1 --hi 1.1 --nbins 12 data/colored-shapes.dkvp}}HERE - -Look at univariate stats by color and shape. In particular, color-dependent flag probabilities pop out, aligning with their original Bernoulli probablities from the data-generator script: - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,mean,max -f flag,u,v -g color then sort -f color data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a min,mean,max -f flag,u,v -g shape then sort -f shape data/colored-shapes.dkvp}}HERE - -Look at bivariate stats by color and shape. In particular, ``u,v`` pairwise correlation for red circles pops out: - -POKI_RUN_COMMAND{{mlr --opprint --right stats2 -a corr -f u,v,w,x data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --right stats2 -a corr -f u,v,w,x -g color,shape then sort -nr u_v_corr data/colored-shapes.dkvp}}HERE diff --git a/docs/data-sharing.rst b/docs/data-sharing.rst deleted file mode 100644 index 68dd029cb..000000000 --- a/docs/data-sharing.rst +++ /dev/null @@ -1,328 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Mixing with other languages -================================================================ - -As discussed in the section on :doc:`file-formats`, Miller supports several different file formats. Different tools are good at different things, so it's important to be able to move data into and out of other languages. **CSV** and **JSON** are well-known, of course; here are some examples using **DKVP** format, with **Ruby** and **Python**. Last, we show how to use arbitrary **shell commands** to extend functionality beyond Miller's domain-specific language. - -DKVP I/O in Python ----------------------------------------------------------------- - -Here are the I/O routines: - -.. code-block:: none - - #!/usr/bin/env python - - # ================================================================ - # Example of DKVP I/O using Python. - # - # Key point: Use Miller for what it's good at; pass data into/out of tools in - # other languages to do what they're good at. - # - # bash$ python -i dkvp_io.py - # - # # READ - # >>> map = dkvpline2map('x=1,y=2', '=', ',') - # >>> map - # OrderedDict([('x', '1'), ('y', '2')]) - # - # # MODIFY - # >>> map['z'] = map['x'] + map['y'] - # >>> map - # OrderedDict([('x', '1'), ('y', '2'), ('z', 3)]) - # - # # WRITE - # >>> line = map2dkvpline(map, '=', ',') - # >>> line - # 'x=1,y=2,z=3' - # - # ================================================================ - - import re - import collections - - # ---------------------------------------------------------------- - # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. - def dkvpline2map(line, ips, ifs): - pairs = re.split(ifs, line) - map = collections.OrderedDict() - for pair in pairs: - key, value = re.split(ips, pair, 1) - - # Type inference: - try: - value = int(value) - except: - try: - value = float(value) - except: - pass - - map[key] = value - return map - - # ---------------------------------------------------------------- - # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. - def map2dkvpline(map , ops, ofs): - line = '' - pairs = [] - for key in map: - pairs.append(str(key) + ops + str(map[key])) - return str.join(ofs, pairs) - -And here is an example using them: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat polyglot-dkvp-io/example.py - #!/usr/bin/env python - - import sys - import re - import copy - import dkvp_io - - while True: - # Read the original record: - line = sys.stdin.readline().strip() - if line == '': - break - map = dkvp_io.dkvpline2map(line, '=', ',') - - # Drop a field: - map.pop('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over - keys = omap.keys() - for key in keys: - # Convert "" to just "int", etc.: - type_string = str(map[key].__class__) - type_string = re.sub("", "", type_string) - map['t'+key] = type_string - - # Write the modified record: - print(dkvp_io.map2dkvpline(map, '=', ',')) - -Run as-is: - -.. code-block:: none - :emphasize-lines: 1,1 - - python polyglot-dkvp-io/example.py < data/small - a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=str,tb=str,ti=int,ty=float,tab=str,tiy=float - -Run as-is, then pipe to Miller for pretty-printing: - -.. code-block:: none - :emphasize-lines: 1,1 - - python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat - a b i y ab iy ta tb ti ty tab tiy - pan pan 1 0.7268028627434533 panpan 1.7268028627434533 str str int float str float - eks pan 2 0.5221511083334797 ekspan 2.5221511083334796 str str int float str float - wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 str str int float str float - eks wye 4 0.13418874328430463 ekswye 4.134188743284304 str str int float str float - wye pan 5 0.8636244699032729 wyepan 5.863624469903273 str str int float str float - -DKVP I/O in Ruby ----------------------------------------------------------------- - -Here are the I/O routines: - -.. code-block:: none - - #!/usr/bin/env ruby - - # ================================================================ - # Example of DKVP I/O using Ruby. - # - # Key point: Use Miller for what it's good at; pass data into/out of tools in - # other languages to do what they're good at. - # - # bash$ irb -I. -r dkvp_io.rb - # - # # READ - # irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',') - # => {"x"=>"1", "y"=>"2"} - # - # # MODIFY - # irb(main):001:0> map['z'] = map['x'] + map['y'] - # => 3 - # - # # WRITE - # irb(main):002:0> line = map2dkvpline(map, '=', ',') - # => "x=1,y=2,z=3" - # - # ================================================================ - - # ---------------------------------------------------------------- - # ips and ifs (input pair separator and input field separator) are nominally '=' and ','. - def dkvpline2map(line, ips, ifs) - map = {} - line.split(ifs).each do |pair| - (k, v) = pair.split(ips, 2) - - # Type inference: - begin - v = Integer(v) - rescue ArgumentError - begin - v = Float(v) - rescue ArgumentError - # Leave as string - end - end - - map[k] = v - end - map - end - - # ---------------------------------------------------------------- - # ops and ofs (output pair separator and output field separator) are nominally '=' and ','. - def map2dkvpline(map, ops, ofs) - map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs) - end - -And here is an example using them: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat polyglot-dkvp-io/example.rb - #!/usr/bin/env ruby - - require 'dkvp_io' - - ARGF.each do |line| - # Read the original record: - map = dkvpline2map(line.chomp, '=', ',') - - # Drop a field: - map.delete('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - keys = map.keys - keys.each do |key| - map['t'+key] = map[key].class - end - - # Write the modified record: - puts map2dkvpline(map, '=', ',') - end - -Run as-is: - -.. code-block:: none - :emphasize-lines: 1,1 - - ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small - a=pan,b=pan,i=1,y=0.7268028627434533,ab=panpan,iy=1.7268028627434533,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=eks,b=pan,i=2,y=0.5221511083334797,ab=ekspan,iy=2.5221511083334796,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=wye,b=wye,i=3,y=0.33831852551664776,ab=wyewye,iy=3.3383185255166477,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=eks,b=wye,i=4,y=0.13418874328430463,ab=ekswye,iy=4.134188743284304,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - a=wye,b=pan,i=5,y=0.8636244699032729,ab=wyepan,iy=5.863624469903273,ta=String,tb=String,ti=Integer,ty=Float,tab=String,tiy=Float - -Run as-is, then pipe to Miller for pretty-printing: - -.. code-block:: none - :emphasize-lines: 1,1 - - ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat - a b i y ab iy ta tb ti ty tab tiy - pan pan 1 0.7268028627434533 panpan 1.7268028627434533 String String Integer Float String Float - eks pan 2 0.5221511083334797 ekspan 2.5221511083334796 String String Integer Float String Float - wye wye 3 0.33831852551664776 wyewye 3.3383185255166477 String String Integer Float String Float - eks wye 4 0.13418874328430463 ekswye 4.134188743284304 String String Integer Float String Float - wye pan 5 0.8636244699032729 wyepan 5.863624469903273 String String Integer Float String Float - -SQL-output examples ----------------------------------------------------------------- - -Please see :ref:`sql-output-examples`. - -SQL-input examples ----------------------------------------------------------------- - -Please see :ref:`sql-input-examples`. - -Running shell commands ----------------------------------------------------------------- - -The :ref:`reference-dsl-system` DSL function allows you to run a specific shell command and put its output -- minus the final newline -- into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$o = system("echo hello world")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 hello world - eks pan 2 0.7586799647899636 0.5221511083334797 hello world - wye wye 3 0.20460330576630303 0.33831852551664776 hello world - eks wye 4 0.38139939387114097 0.13418874328430463 hello world - wye pan 5 0.5732889198020006 0.8636244699032729 hello world - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$o = system("echo {" . NR . "}")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 {1} - eks pan 2 0.7586799647899636 0.5221511083334797 {2} - wye wye 3 0.20460330576630303 0.33831852551664776 {3} - eks wye 4 0.38139939387114097 0.13418874328430463 {4} - wye pan 5 0.5732889198020006 0.8636244699032729 {5} - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small - a b i x y o - pan pan 1 0.3467901443380824 0.7268028627434533 f29c748220331c273ef16d5115f6ecd799947f13 - - eks pan 2 0.7586799647899636 0.5221511083334797 456d988ecb3bf1b75f057fc6e9fe70db464e9388 - - wye wye 3 0.20460330576630303 0.33831852551664776 eab0de043d67f441c7fd1e335f0ca38708e6ebf7 - - eks wye 4 0.38139939387114097 0.13418874328430463 456d988ecb3bf1b75f057fc6e9fe70db464e9388 - - wye pan 5 0.5732889198020006 0.8636244699032729 eab0de043d67f441c7fd1e335f0ca38708e6ebf7 - - -Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system ``date`` command for the current time in nanoseconds versus computing it in process: - -.. - hard-coded, not live-code, since %N doesn't exist on all platforms - -.. code-block:: none - - $ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.513903817 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.514722876 0.000819 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.517518828 0.000971 - -.. code-block:: none - - $ mlr --opprint put '$t=systime()' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.518699 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.518717 0.000018 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.518730 0.000003 diff --git a/docs/data-sharing.rst.in b/docs/data-sharing.rst.in deleted file mode 100644 index 84f3ce124..000000000 --- a/docs/data-sharing.rst.in +++ /dev/null @@ -1,88 +0,0 @@ -Mixing with other languages -================================================================ - -As discussed in the section on :doc:`file-formats`, Miller supports several different file formats. Different tools are good at different things, so it's important to be able to move data into and out of other languages. **CSV** and **JSON** are well-known, of course; here are some examples using **DKVP** format, with **Ruby** and **Python**. Last, we show how to use arbitrary **shell commands** to extend functionality beyond Miller's domain-specific language. - -DKVP I/O in Python ----------------------------------------------------------------- - -Here are the I/O routines: - -POKI_INCLUDE_ESCAPED(polyglot-dkvp-io/dkvp_io.py)HERE - -And here is an example using them: - -POKI_RUN_COMMAND{{cat polyglot-dkvp-io/example.py}}HERE - -Run as-is: - -POKI_RUN_COMMAND{{python polyglot-dkvp-io/example.py < data/small}}HERE - -Run as-is, then pipe to Miller for pretty-printing: - -POKI_RUN_COMMAND{{python polyglot-dkvp-io/example.py < data/small | mlr --opprint cat}}HERE - -DKVP I/O in Ruby ----------------------------------------------------------------- - -Here are the I/O routines: - -POKI_INCLUDE_ESCAPED(polyglot-dkvp-io/dkvp_io.rb)HERE - -And here is an example using them: - -POKI_RUN_COMMAND{{cat polyglot-dkvp-io/example.rb}}HERE - -Run as-is: - -POKI_RUN_COMMAND{{ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small}}HERE - -Run as-is, then pipe to Miller for pretty-printing: - -POKI_RUN_COMMAND{{ruby -I./polyglot-dkvp-io polyglot-dkvp-io/example.rb data/small | mlr --opprint cat}}HERE - -SQL-output examples ----------------------------------------------------------------- - -Please see :ref:`sql-output-examples`. - -SQL-input examples ----------------------------------------------------------------- - -Please see :ref:`sql-input-examples`. - -Running shell commands ----------------------------------------------------------------- - -The :ref:`reference-dsl-system` DSL function allows you to run a specific shell command and put its output -- minus the final newline -- into a record field. The command itself is any string, either a literal string, or a concatenation of strings, perhaps including other field values or what have you. - -POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo hello world")' data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo {" . NR . "}")' data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$o = system("echo -n ".$a."| sha1sum")' data/small}}HERE - -Note that running a subprocess on every record takes a non-trivial amount of time. Comparing asking the system ``date`` command for the current time in nanoseconds versus computing it in process: - -.. - hard-coded, not live-code, since %N doesn't exist on all platforms - -.. code-block:: none - - $ mlr --opprint put '$t=system("date +%s.%N")' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.513903817 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.514722876 0.000819 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.515618046 0.000895 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.516547441 0.000929 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.517518828 0.000971 - -.. code-block:: none - - $ mlr --opprint put '$t=systime()' then step -a delta -f t data/small - a b i x y t t_delta - pan pan 1 0.3467901443380824 0.7268028627434533 1568774318.518699 0 - eks pan 2 0.7586799647899636 0.5221511083334797 1568774318.518717 0.000018 - wye wye 3 0.20460330576630303 0.33831852551664776 1568774318.518723 0.000006 - eks wye 4 0.38139939387114097 0.13418874328430463 1568774318.518727 0.000004 - wye pan 5 0.5732889198020006 0.8636244699032729 1568774318.518730 0.000003 diff --git a/docs/data/a.csv b/docs/data/a.csv deleted file mode 100644 index 88700c714..000000000 --- a/docs/data/a.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -1,2,3 -4,5,6 diff --git a/docs/data/begin-end-example-1.sh b/docs/data/begin-end-example-1.sh deleted file mode 100644 index f66beaa7e..000000000 --- a/docs/data/begin-end-example-1.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr put ' - begin { @sum = 0 }; - @x_sum += $x; - end { emit @x_sum } -' ../data/small diff --git a/docs/data/begin-end-example-2.sh b/docs/data/begin-end-example-2.sh deleted file mode 100644 index 55ad689f6..000000000 --- a/docs/data/begin-end-example-2.sh +++ /dev/null @@ -1,4 +0,0 @@ -mlr put ' - @x_sum += $x; - end { emit @x_sum } -' ../data/small diff --git a/docs/data/begin-end-example-3.sh b/docs/data/begin-end-example-3.sh deleted file mode 100644 index d88dbe3c7..000000000 --- a/docs/data/begin-end-example-3.sh +++ /dev/null @@ -1,4 +0,0 @@ -mlr put -q ' - @x_sum += $x; - end { emit @x_sum } -' ../data/small diff --git a/docs/data/begin-end-example-4.sh b/docs/data/begin-end-example-4.sh deleted file mode 100644 index 5ac1c112b..000000000 --- a/docs/data/begin-end-example-4.sh +++ /dev/null @@ -1,8 +0,0 @@ -mlr put -q ' - @x_count += 1; - @x_sum += $x; - end { - emit @x_count; - emit @x_sum; - } -' ../data/small diff --git a/docs/data/begin-end-example-5.sh b/docs/data/begin-end-example-5.sh deleted file mode 100644 index dbd2efed1..000000000 --- a/docs/data/begin-end-example-5.sh +++ /dev/null @@ -1 +0,0 @@ -mlr stats1 -a count,sum -f x ../data/small diff --git a/docs/data/begin-end-example-6.sh b/docs/data/begin-end-example-6.sh deleted file mode 100644 index 7f9bbb6d1..000000000 --- a/docs/data/begin-end-example-6.sh +++ /dev/null @@ -1,8 +0,0 @@ -mlr put -q ' - @x_count[$a] += 1; - @x_sum[$a] += $x; - end { - emit @x_count, "a"; - emit @x_sum, "a"; - } -' ../data/small diff --git a/docs/data/begin-end-example-6a.sh b/docs/data/begin-end-example-6a.sh deleted file mode 100644 index 6b9e46bea..000000000 --- a/docs/data/begin-end-example-6a.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --from data/medium put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - emit (@x_count, @x_sum), "a", "b"; - } -' diff --git a/docs/data/begin-end-example-7.sh b/docs/data/begin-end-example-7.sh deleted file mode 100644 index 5c0101659..000000000 --- a/docs/data/begin-end-example-7.sh +++ /dev/null @@ -1 +0,0 @@ -mlr stats1 -a count,sum -f x -g a ../data/small diff --git a/docs/data/begin-end-example-8.sh b/docs/data/begin-end-example-8.sh deleted file mode 100644 index 4a239310d..000000000 --- a/docs/data/begin-end-example-8.sh +++ /dev/null @@ -1,15 +0,0 @@ -mlr put ' - begin { - @num_total = 0; - @num_positive = 0; - }; - @num_total += 1; - $x > 0.0 { - @num_positive += 1; - $y = log10($x); $z = sqrt($y) - }; - end { - emitf @num_total, @num_positive - } -' data/put-gating-example-1.dkvp - diff --git a/docs/data/colored-shapes.dkvp b/docs/data/colored-shapes.dkvp deleted file mode 100644 index d10602709..000000000 --- a/docs/data/colored-shapes.dkvp +++ /dev/null @@ -1,10078 +0,0 @@ -color=yellow,shape=triangle,flag=1,i=11,u=0.6321695890307647,v=0.9887207810889004,w=0.4364983936735774,x=5.7981881667050565 -color=red,shape=square,flag=1,i=15,u=0.21966833570651523,v=0.001257332190235938,w=0.7927778364718627,x=2.944117399716207 -color=red,shape=circle,flag=1,i=16,u=0.20901671281497636,v=0.29005231936593445,w=0.13810280912907674,x=5.065034003400998 -color=red,shape=square,flag=0,i=48,u=0.9562743938458542,v=0.7467203085342884,w=0.7755423050923582,x=7.117831369597269 -color=purple,shape=triangle,flag=0,i=51,u=0.4355354501763202,v=0.8591292672156728,w=0.8122903963006748,x=5.753094629505863 -color=red,shape=square,flag=0,i=64,u=0.2015510269821953,v=0.9531098083420033,w=0.7719912015786777,x=5.612050466474166 -color=purple,shape=triangle,flag=0,i=65,u=0.6842806710360729,v=0.5823723856331258,w=0.8014053396013747,x=5.805148213865135 -color=yellow,shape=circle,flag=1,i=73,u=0.6033649768090676,v=0.42370791211283076,w=0.639785141788745,x=7.006414410739997 -color=yellow,shape=circle,flag=1,i=87,u=0.2856563669907619,v=0.8335161523929382,w=0.6350579406858395,x=6.350035616385983 -color=purple,shape=square,flag=0,i=91,u=0.25992639068499135,v=0.824321938346312,w=0.7237347131411271,x=6.854221024776646 -color=red,shape=circle,flag=0,i=108,u=0.024802572314538085,v=-0.018793703176088375,w=0.1671176659369718,x=5.055666375592517 -color=yellow,shape=square,flag=1,i=109,u=0.9974736736046079,v=0.6760028458359627,w=0.41864350936782024,x=3.901025801203988 -color=red,shape=circle,flag=0,i=118,u=0.34117602470323594,v=0.38062693570973866,w=0.17327129470515584,x=3.29791352816602 -color=red,shape=triangle,flag=0,i=123,u=0.4278178693661939,v=0.3960696006932547,w=0.4669075799722325,x=6.075593868973896 -color=green,shape=triangle,flag=1,i=126,u=0.1513010528347546,v=0.40346767294704544,w=0.051213231883952326,x=5.955109300797182 -color=red,shape=circle,flag=0,i=132,u=0.00415869281443515,v=0.07120668907359722,w=0.18024088018973658,x=6.081369507941527 -color=red,shape=square,flag=1,i=136,u=0.7115806575648764,v=0.6358066944310004,w=0.733362749189488,x=2.0929047447188442 -color=purple,shape=triangle,flag=0,i=140,u=0.7170724772864769,v=0.971982521419424,w=0.7877975577532164,x=4.099359540509919 -color=purple,shape=triangle,flag=0,i=151,u=0.032614487569017414,v=0.7346633365041219,w=0.7812143304483805,x=2.6831992610568047 -color=green,shape=square,flag=0,i=152,u=0.6684429446914862,v=0.016056003736548696,w=0.4656148241291592,x=5.434588759225423 -color=yellow,shape=square,flag=1,i=158,u=0.41527900739142165,v=0.7118027080775757,w=0.4200799665161291,x=5.33279067554884 -color=red,shape=triangle,flag=1,i=177,u=0.46223900862848977,v=0.3756372162560322,w=0.46677374441501546,x=3.868738145214838 -color=red,shape=square,flag=1,i=181,u=0.7499237717390023,v=0.3011685472073139,w=0.7067889134216544,x=5.658717346090616 -color=red,shape=square,flag=0,i=207,u=0.8418732590895626,v=0.6829961308284442,w=0.6777973811978997,x=6.429841924437199 -color=blue,shape=circle,flag=0,i=215,u=0.7803586969333292,v=0.33146680638888126,w=0.04289047852629113,x=5.725365736377487 -color=blue,shape=triangle,flag=0,i=220,u=0.441773289968473,v=0.44597731903759075,w=0.6329360666849821,x=4.3064608776550894 -color=yellow,shape=triangle,flag=1,i=230,u=0.662341253298938,v=0.1395610797840987,w=0.4253162003550002,x=7.4205012813680336 -color=purple,shape=square,flag=0,i=247,u=0.7157068193458154,v=0.30556667456142306,w=0.7082214193677417,x=6.27840284372013 -color=blue,shape=circle,flag=1,i=282,u=0.4107894174130632,v=0.5237663206650146,w=0.04318568730902819,x=3.7814299131517406 -color=green,shape=triangle,flag=0,i=284,u=0.09184444247342893,v=0.4977908548241379,w=0.07847551915092178,x=5.171903191298225 -color=purple,shape=circle,flag=0,i=314,u=0.9970979544448977,v=0.19371928997895382,w=0.4669332097132727,x=6.253743240180984 -color=red,shape=circle,flag=0,i=317,u=0.3806668694886812,v=0.4639086417841095,w=0.24155540443368562,x=5.233591001880515 -color=blue,shape=square,flag=0,i=320,u=0.6567438551446514,v=0.6872579918742652,w=0.3126631069620033,x=4.783384797137046 -color=blue,shape=circle,flag=1,i=323,u=0.6831389508634012,v=0.5164266496909541,w=0.04279502510289964,x=6.430767892082264 -color=red,shape=circle,flag=0,i=342,u=0.022581234669267536,v=0.07297945199030628,w=0.24820497536870453,x=4.8817903893282315 -color=red,shape=circle,flag=0,i=343,u=0.19109789177540426,v=0.09277368510132841,w=0.25217038732339636,x=6.3438770884826345 -color=green,shape=square,flag=0,i=356,u=0.7674272008085286,v=0.341578843118008,w=0.4570224877870851,x=4.830320062215299 -color=yellow,shape=triangle,flag=1,i=360,u=0.04059511540040217,v=0.12175098644715998,w=0.4252690428843536,x=6.189923389321772 -color=blue,shape=square,flag=1,i=362,u=0.7956525257065691,v=0.6523132120850892,w=0.3200330380984027,x=4.072821305500013 -color=blue,shape=triangle,flag=0,i=396,u=0.919100549631871,v=0.8344721671140174,w=0.6244367001946488,x=2.49013750392186 -color=yellow,shape=circle,flag=1,i=397,u=0.39319598247811227,v=0.7827012405227943,w=0.6366920960401155,x=4.529206987025983 -color=red,shape=square,flag=1,i=398,u=0.5978201290608502,v=0.47272211894407123,w=0.6491217487672196,x=4.940940908354111 -color=yellow,shape=triangle,flag=1,i=417,u=0.5968783890703766,v=0.9180606623519213,w=0.43245864839969506,x=6.365943427549951 -color=green,shape=circle,flag=1,i=420,u=0.08351408650249226,v=0.54577336738499,w=0.5186728819298164,x=5.084667446471147 -color=red,shape=square,flag=0,i=426,u=0.18797364854358312,v=0.15618889495894983,w=0.6473124542782809,x=4.377289005882239 -color=purple,shape=triangle,flag=1,i=435,u=0.5533395314187117,v=0.6819531437186439,w=0.7660419032272928,x=6.318450342598268 -color=purple,shape=square,flag=0,i=442,u=0.5949936958119856,v=0.44333412244235537,w=0.699091705650557,x=4.0899656611487645 -color=yellow,shape=triangle,flag=0,i=450,u=0.42804650823641566,v=0.25454266416065197,w=0.4346507346665569,x=4.277203829116134 -color=red,shape=square,flag=0,i=455,u=0.511897747652211,v=0.9985224224854384,w=0.6362898913523033,x=5.154825231103973 -color=yellow,shape=circle,flag=1,i=463,u=0.36858008772332884,v=0.5075644639683616,w=0.6316304187169625,x=7.040221898203598 -color=red,shape=square,flag=0,i=469,u=0.13286513113313736,v=0.9084234595597834,w=0.6279253576837711,x=5.002168139084499 -color=red,shape=triangle,flag=0,i=476,u=0.7869818074820932,v=0.7917840934406875,w=0.4904465717482654,x=7.621374465824963 -color=red,shape=square,flag=1,i=485,u=0.0985075545140347,v=0.03323413200681258,w=0.6210493583280738,x=5.397832324814885 -color=purple,shape=triangle,flag=0,i=532,u=0.23339001715233743,v=0.18098824995902285,w=0.7538550076607498,x=4.482844983044244 -color=red,shape=triangle,flag=1,i=538,u=0.08342205930118507,v=0.5551231727340961,w=0.4969066537203422,x=6.400461402177794 -color=red,shape=circle,flag=1,i=543,u=0.27956692255780735,v=0.317716295298317,w=0.3094102421392519,x=4.797498617657461 -color=yellow,shape=triangle,flag=1,i=555,u=0.4324861814762554,v=0.6516173501148627,w=0.4391759668010706,x=4.839236316217861 -color=red,shape=triangle,flag=0,i=575,u=0.3822743205645871,v=0.13243663787308357,w=0.4885011925291688,x=3.1878336744268148 -color=yellow,shape=triangle,flag=1,i=576,u=0.38274055836949383,v=0.06907845482417962,w=0.4464344215456894,x=4.530719037043683 -color=orange,shape=triangle,flag=0,i=587,u=0.5175826237797857,v=0.08989091493635304,w=0.9011709461770973,x=4.265854207755811 -color=green,shape=square,flag=0,i=597,u=0.8257400998639863,v=0.9139935425693207,w=0.47634534610928053,x=4.535961637121465 -color=purple,shape=triangle,flag=0,i=599,u=0.5777696441179225,v=0.1592641459041092,w=0.7360769450811888,x=4.935473950297778 -color=purple,shape=triangle,flag=0,i=603,u=0.3445805348101557,v=0.9314586827288921,w=0.7303062345971375,x=6.286891127462662 -color=red,shape=square,flag=0,i=610,u=0.6559603758582659,v=0.8146680458330501,w=0.5902924985221454,x=5.82992604692209 -color=red,shape=circle,flag=1,i=626,u=0.585144230439763,v=0.6126667717785355,w=0.3169586786449619,x=4.184061048733821 -color=yellow,shape=circle,flag=1,i=627,u=0.21946692559859127,v=0.5778782092837894,w=0.6243751940834331,x=4.878526902029357 -color=yellow,shape=circle,flag=1,i=642,u=0.9848580578039592,v=0.8703332275688385,w=0.6196888245699355,x=3.733988283596638 -color=red,shape=triangle,flag=1,i=649,u=0.489957093971505,v=0.3478765534442614,w=0.4923961471690822,x=5.77651025721577 -color=red,shape=triangle,flag=0,i=658,u=0.13416793395996696,v=0.35313428818060877,w=0.503251673831712,x=4.663827900601466 -color=green,shape=triangle,flag=1,i=664,u=0.14261008249079687,v=0.749302805217999,w=0.12658931011976782,x=5.415746307714631 -color=red,shape=square,flag=0,i=668,u=0.8465455890449235,v=0.9267425085703102,w=0.576114475147851,x=4.414752318165809 -color=blue,shape=triangle,flag=1,i=675,u=0.04682538469656261,v=0.08768189741821031,w=0.5999310365332388,x=4.36169952189602 -color=red,shape=circle,flag=1,i=692,u=0.7736749647187496,v=0.7843041194779217,w=0.3222390448185294,x=4.918714674895596 -color=blue,shape=circle,flag=0,i=703,u=0.8715379458478961,v=0.20256829168055102,w=0.10985276936169859,x=7.997598940922333 -color=red,shape=triangle,flag=0,i=709,u=0.98329965475008,v=0.22471614331987888,w=0.5067594140832291,x=6.322260097816005 -color=red,shape=square,flag=0,i=711,u=0.17792705971938538,v=0.8342704569425529,w=0.5496181660392127,x=4.489594163882984 -color=red,shape=square,flag=1,i=721,u=0.41366768077123217,v=0.7926395050427005,w=0.5500236156239641,x=6.072243219753511 -color=green,shape=circle,flag=0,i=732,u=0.8796970347713795,v=0.5095418401519376,w=0.5036523462569609,x=3.732306962687 -color=red,shape=circle,flag=0,i=739,u=0.4656141644806484,v=0.43943619960025365,w=0.3389349788256644,x=4.6091252205967415 -color=red,shape=square,flag=0,i=743,u=0.7686293918141773,v=0.3860243778849791,w=0.5563945710051195,x=7.100899795404449 -color=blue,shape=square,flag=0,i=768,u=0.6142167398249276,v=0.5058741300020686,w=0.35440149163176193,x=4.9375675393287795 -color=red,shape=square,flag=0,i=769,u=0.5762503050626411,v=0.9449347972337795,w=0.5396454717504899,x=4.535027823576054 -color=yellow,shape=square,flag=1,i=776,u=0.2326699375087975,v=0.41062255056145136,w=0.4582838878078877,x=6.495550613116688 -color=red,shape=square,flag=0,i=779,u=0.4794321660481753,v=0.44957239137842164,w=0.534131183348918,x=4.554982584675483 -color=green,shape=square,flag=0,i=799,u=0.42442739328635637,v=0.8964958501280098,w=0.47303008264530383,x=6.156675863839864 -color=yellow,shape=triangle,flag=1,i=804,u=0.8706684482737265,v=0.8573693836211311,w=0.46816853382829726,x=4.584079169332856 -color=red,shape=triangle,flag=1,i=807,u=0.8577713918123153,v=0.297771559336396,w=0.5199360491732843,x=5.164415621374987 -color=red,shape=circle,flag=0,i=810,u=0.17018413008657984,v=0.23320478598130245,w=0.35152048053844065,x=5.46076150321937 -color=red,shape=circle,flag=0,i=817,u=0.28321334450458735,v=0.3237908657862255,w=0.35109142420998724,x=3.2464133941912263 -color=red,shape=circle,flag=0,i=818,u=0.02059623878479,v=0.04460593274894216,w=0.3541282614135311,x=3.554009715185525 -color=yellow,shape=circle,flag=1,i=834,u=0.9120488812571834,v=0.6857068784645892,w=0.6173957199588831,x=5.510289113034133 -color=red,shape=square,flag=0,i=848,u=0.18649722139766356,v=0.6452719235869846,w=0.5410438287513045,x=5.4189301744621545 -color=red,shape=triangle,flag=0,i=861,u=0.02316026733649934,v=0.32759419799888834,w=0.5209360429919869,x=8.050259613054594 -color=red,shape=triangle,flag=1,i=893,u=0.0431000918147989,v=0.9368515438540571,w=0.52117938032689,x=4.768735289587635 -color=purple,shape=circle,flag=0,i=894,u=0.8677645835678461,v=0.7370785187241339,w=0.4708243010989557,x=4.2195244701460615 -color=red,shape=triangle,flag=0,i=897,u=0.3907041450033255,v=0.808274357235241,w=0.5266690643733455,x=6.7868612382218485 -color=yellow,shape=square,flag=1,i=917,u=0.8547010348386344,v=0.7356782810796262,w=0.4531511689924275,x=5.774541777078352 -color=red,shape=triangle,flag=0,i=928,u=0.4348424420850825,v=0.25987383842479017,w=0.5266497212740388,x=4.759205173519602 -color=red,shape=square,flag=0,i=940,u=0.8935268981554093,v=0.23752077743261923,w=0.5303101957654777,x=5.022371854001634 -color=blue,shape=square,flag=0,i=965,u=0.03995102094087877,v=0.8687150837087656,w=0.37503067844024807,x=5.538510059726689 -color=red,shape=triangle,flag=0,i=968,u=0.7358954709070943,v=0.45034537546711884,w=0.5250268552773686,x=7.418808360536765 -color=blue,shape=square,flag=0,i=1015,u=0.5238929594441054,v=0.01866264734687595,w=0.3781919070818389,x=4.298408962228504 -color=blue,shape=circle,flag=1,i=1020,u=0.414263129226617,v=0.8304946402876182,w=0.13151094520189244,x=4.397873687920433 -color=red,shape=circle,flag=0,i=1026,u=0.277218685176133,v=0.18748462651423042,w=0.39326380124043414,x=5.388221285544738 -color=purple,shape=square,flag=0,i=1050,u=0.8386599118627978,v=0.6431386518603193,w=0.6599568630050375,x=5.640658611696019 -color=red,shape=square,flag=0,i=1051,u=0.012503475219730498,v=0.17427409937482508,w=0.536474470332281,x=4.28116623157883 -color=red,shape=triangle,flag=1,i=1070,u=0.5720273449472987,v=0.37095242731772415,w=0.5260587535784669,x=4.959913496964567 -color=purple,shape=square,flag=0,i=1071,u=0.9996465731736793,v=0.12117256465756021,w=0.6561529688463592,x=4.255321150756324 -color=green,shape=square,flag=0,i=1093,u=0.055028621071862016,v=0.6915161060781153,w=0.49147467774526704,x=4.7208465539980855 -color=green,shape=square,flag=0,i=1094,u=0.6670405529387,v=0.5053591509128329,w=0.49126209783152436,x=5.923108619120157 -color=yellow,shape=circle,flag=1,i=1102,u=0.15002349440510832,v=0.3519187041707791,w=0.6022634081227581,x=4.815072718895654 -color=blue,shape=triangle,flag=1,i=1116,u=0.7077536911489641,v=0.49036941803135947,w=0.6020556539487175,x=5.137160032805944 -color=red,shape=square,flag=1,i=1117,u=0.8695928610948207,v=0.4413106210300576,w=0.526989425543239,x=4.138772211849639 -color=green,shape=circle,flag=0,i=1119,u=0.9508887952015431,v=0.8514250527869424,w=0.49511812999518423,x=5.832692930713734 -color=red,shape=circle,flag=0,i=1125,u=0.5914223441741909,v=0.6302047728760605,w=0.4093383110513469,x=5.613869369240507 -color=green,shape=circle,flag=0,i=1135,u=0.6349780241056121,v=0.1391871575477529,w=0.491816217208502,x=6.240695426540594 -color=yellow,shape=square,flag=0,i=1143,u=0.9726268048453478,v=0.7609290425260713,w=0.4677883526425094,x=2.8702824020609667 -color=yellow,shape=square,flag=1,i=1153,u=0.5495746127462745,v=0.5020842413939993,w=0.4652783525584822,x=4.702777730880125 -color=red,shape=triangle,flag=0,i=1159,u=0.7164639751521532,v=0.7040454818650225,w=0.5336893612529211,x=7.744562940053119 -color=red,shape=square,flag=0,i=1163,u=0.23593117318357937,v=0.07314400743565841,w=0.5045049973814437,x=4.73466139311028 -color=red,shape=circle,flag=0,i=1170,u=0.5434581028057989,v=0.5661627010968945,w=0.4172475279694751,x=7.37542918069884 -color=yellow,shape=square,flag=1,i=1173,u=0.08039265724079736,v=0.832766339096367,w=0.47250864636017365,x=5.664797525706285 -color=red,shape=circle,flag=1,i=1210,u=0.9037819831553698,v=0.8406752791956175,w=0.42860730103623285,x=6.883611448821147 -color=purple,shape=triangle,flag=0,i=1219,u=0.048515488628120496,v=0.13503804313416723,w=0.6875112402366665,x=5.951608164047156 -color=blue,shape=triangle,flag=1,i=1224,u=0.8209941325124394,v=0.6975886986098433,w=0.5944059575518246,x=7.956611465149808 -color=green,shape=square,flag=0,i=1245,u=0.6254139945026417,v=0.44235631780910023,w=0.4947154445275026,x=6.094772664571022 -color=green,shape=circle,flag=0,i=1247,u=0.5647657502270278,v=0.48865785206231616,w=0.48417050428613967,x=5.314759345651722 -color=purple,shape=square,flag=1,i=1281,u=0.8419644842944525,v=0.5689558333095702,w=0.6486389225203539,x=6.764436221990853 -color=purple,shape=circle,flag=0,i=1291,u=0.022866144467924898,v=0.38374491731395266,w=0.47488125113633156,x=5.18381226767042 -color=yellow,shape=square,flag=1,i=1302,u=0.46763196111581096,v=0.2525360057842123,w=0.4784568397892102,x=3.418117118705274 -color=red,shape=circle,flag=0,i=1316,u=0.1851048293861305,v=0.23029591768852398,w=0.44492332341979296,x=5.760852454918667 -color=red,shape=triangle,flag=0,i=1318,u=0.3614334841934277,v=0.3172875150096478,w=0.5336359680294116,x=6.845141572695423 -color=red,shape=square,flag=0,i=1365,u=0.10240795530976454,v=0.3552096156265375,w=0.47512303248140236,x=5.145112817985559 -color=blue,shape=square,flag=0,i=1366,u=0.8519514847713295,v=0.19835341879714474,w=0.3819747805065463,x=3.8274801035623978 -color=red,shape=square,flag=0,i=1373,u=0.42611020600750116,v=0.7976170927642009,w=0.4799449965370654,x=3.1684210630654657 -color=red,shape=square,flag=0,i=1375,u=0.9928503382180878,v=0.9033585772774038,w=0.4828676064498975,x=4.977104381535792 -color=red,shape=triangle,flag=0,i=1378,u=0.0949997630141427,v=0.1855579383737852,w=0.5417557272405064,x=4.523739327972719 -color=red,shape=triangle,flag=0,i=1385,u=0.6979899125004204,v=0.03378535128967952,w=0.5452630524923384,x=5.4886108014086 -color=purple,shape=square,flag=0,i=1429,u=0.5205545614820511,v=0.7006373872685897,w=0.6432033836710063,x=5.266945662715147 -color=blue,shape=triangle,flag=0,i=1433,u=0.9333855793065959,v=0.13457317433354077,w=0.567313117792438,x=4.227344499078499 -color=red,shape=square,flag=0,i=1436,u=0.8540777405760767,v=0.5566155288943634,w=0.4727722605809266,x=4.484527380415446 -color=purple,shape=triangle,flag=0,i=1444,u=0.07729695867651976,v=0.3898344059504826,w=0.6616033649709776,x=2.5006537206630988 -color=red,shape=triangle,flag=0,i=1452,u=0.23007855704668956,v=0.41121885598115004,w=0.5374933633354123,x=4.625441986207416 -color=blue,shape=square,flag=1,i=1459,u=0.22262765045632182,v=0.9352664855626638,w=0.3940007578510445,x=4.367014885428804 -color=red,shape=circle,flag=1,i=1462,u=0.05269780281162828,v=0.0008025650932757603,w=0.4471177748347405,x=3.7253777762088505 -color=purple,shape=square,flag=1,i=1463,u=0.5390058988052654,v=0.4941026498784532,w=0.6302529899909097,x=6.448810781241274 -color=red,shape=square,flag=0,i=1469,u=0.9382780379672069,v=0.3315803564492994,w=0.4709422592301563,x=7.478803874367089 -color=red,shape=circle,flag=0,i=1470,u=0.3612888647136956,v=0.3900985902100856,w=0.4514271376849851,x=4.346341112284237 -color=yellow,shape=circle,flag=1,i=1482,u=0.32477438439891804,v=0.8527410497732805,w=0.578859866256276,x=5.09184064130106 -color=red,shape=circle,flag=0,i=1484,u=0.9892899846124164,v=1.0002035172577892,w=0.45576484556727054,x=6.155587409704622 -color=blue,shape=triangle,flag=0,i=1486,u=0.13417769775686017,v=0.32044326382695676,w=0.5697875944171061,x=3.611411935519723 -color=red,shape=triangle,flag=0,i=1495,u=0.5096319881899956,v=0.9169351211522347,w=0.5402306225183187,x=4.396004686347562 -color=yellow,shape=square,flag=1,i=1497,u=0.5519244132067481,v=0.9522672266399553,w=0.48892686507229033,x=5.2077741227745 -color=green,shape=square,flag=0,i=1504,u=0.7695790776074829,v=0.6493617013300224,w=0.5062258674295976,x=6.514182432634747 -color=red,shape=triangle,flag=0,i=1516,u=0.6884065489552523,v=0.9527958546677516,w=0.5400693011274069,x=5.124098932996773 -color=red,shape=triangle,flag=0,i=1519,u=0.9647269269195229,v=0.4098615080327179,w=0.5387660454251227,x=5.082276353255275 -color=orange,shape=triangle,flag=0,i=1533,u=0.32904497195507487,v=0.23168161807490417,w=0.8722623057355134,x=5.164071635714438 -color=red,shape=square,flag=0,i=1540,u=0.8050354592729326,v=0.8800778311059083,w=0.47775298210709655,x=3.095180099376346 -color=purple,shape=triangle,flag=0,i=1569,u=0.3999861324512596,v=0.07313403733425006,w=0.6498648356057545,x=5.182548842463077 -color=red,shape=circle,flag=0,i=1573,u=0.23626927515050655,v=0.3242669695209879,w=0.44084393598502025,x=6.114820791664641 -color=green,shape=triangle,flag=0,i=1579,u=0.5200009514905543,v=0.5374752601982243,w=0.2354954696805672,x=5.8992869223326485 -color=blue,shape=square,flag=0,i=1582,u=0.5183154789173914,v=0.7075622119669978,w=0.3937785908367411,x=5.611654480869177 -color=blue,shape=square,flag=0,i=1594,u=0.11151658334971082,v=0.6172273249045909,w=0.3916407637827865,x=3.8261795880638054 -color=red,shape=triangle,flag=0,i=1600,u=0.010600089850044125,v=0.18086148061836715,w=0.5481871021051281,x=6.486983620696889 -color=red,shape=circle,flag=1,i=1616,u=0.5276503192339859,v=0.6039148669161414,w=0.43904326409278605,x=6.7603585236707 -color=orange,shape=square,flag=0,i=1621,u=0.7768568392153472,v=0.7415199227211619,w=0.30004659103299586,x=6.671697402343637 -color=red,shape=circle,flag=0,i=1622,u=0.7040363113735977,v=0.6176206363095101,w=0.4359881195527714,x=5.14085836303596 -color=blue,shape=circle,flag=0,i=1645,u=0.972623992029269,v=0.023971597936596867,w=0.1673474138772468,x=5.620708271084801 -color=blue,shape=circle,flag=1,i=1648,u=0.6994166196793291,v=0.7487522475833888,w=0.1685666005757015,x=6.039438356676449 -color=blue,shape=circle,flag=1,i=1668,u=0.5632676790950631,v=0.6804706769536457,w=0.16774706277951218,x=3.464319925942332 -color=red,shape=square,flag=0,i=1672,u=0.4087041744414175,v=0.8070739084193961,w=0.4990316692688822,x=4.852123584076959 -color=blue,shape=triangle,flag=0,i=1675,u=0.8049838802477126,v=0.5857178387398677,w=0.5707520736614857,x=4.101240877591373 -color=red,shape=triangle,flag=0,i=1681,u=0.3729567091913156,v=0.6255047250460374,w=0.5546256899343207,x=5.7542960199220134 -color=red,shape=circle,flag=1,i=1689,u=0.6505984196326361,v=0.6708260329889433,w=0.4398215422347821,x=5.067703862320497 -color=orange,shape=triangle,flag=1,i=1693,u=0.16525507437570952,v=0.38752816874246854,w=0.8611704617935338,x=4.531213856608208 -color=blue,shape=square,flag=0,i=1724,u=0.9257134507887343,v=0.5484847437481889,w=0.41306693393231186,x=3.7813348129809774 -color=blue,shape=circle,flag=0,i=1738,u=0.07736655692516092,v=0.7094747964905463,w=0.1793050216454373,x=6.083634710543372 -color=blue,shape=square,flag=0,i=1762,u=0.3157995075758133,v=0.7834804805765219,w=0.4088692267189296,x=5.1672992424980615 -color=red,shape=triangle,flag=0,i=1779,u=0.652024124990294,v=0.08417005612192818,w=0.5341736009141594,x=6.259712945790969 -color=red,shape=square,flag=0,i=1780,u=0.2390150805932536,v=0.29510181237732014,w=0.4927936662914188,x=6.192807475537431 -color=red,shape=triangle,flag=1,i=1790,u=0.635969718915859,v=0.851056850456277,w=0.5413944877529929,x=5.428855112841159 -color=yellow,shape=circle,flag=1,i=1798,u=0.6608164196933896,v=0.36011968370773173,w=0.5629517068116978,x=6.35357925019693 -color=red,shape=circle,flag=0,i=1806,u=0.7744572161118486,v=0.6923633451408633,w=0.45034685773693056,x=5.010467953363613 -color=red,shape=circle,flag=1,i=1830,u=0.21217432304365524,v=0.2967593161416136,w=0.4553816455432691,x=4.659852515579381 -color=blue,shape=triangle,flag=0,i=1844,u=0.5636660445656244,v=0.8716846236127672,w=0.5625196889904541,x=4.866601675820479 -color=purple,shape=circle,flag=0,i=1856,u=0.24161151059540176,v=0.5928568671833314,w=0.4611930047170266,x=5.136306869359727 -color=red,shape=square,flag=1,i=1858,u=0.2815984094528883,v=0.9101405343282991,w=0.49915629018606633,x=4.776941788653463 -color=yellow,shape=circle,flag=1,i=1870,u=0.5652799060258915,v=0.2932807976729944,w=0.5579466819473858,x=5.789771169762942 -color=purple,shape=circle,flag=0,i=1876,u=0.3165066469353667,v=0.28941633786079357,w=0.4604066818976131,x=5.837141646184505 -color=orange,shape=square,flag=0,i=1885,u=0.8079311983747106,v=0.8685956833908394,w=0.3116410800256374,x=4.390864584500387 -color=red,shape=triangle,flag=0,i=1891,u=0.15719235042957025,v=0.831884921837593,w=0.5442701763072955,x=5.217201497530535 -color=red,shape=square,flag=0,i=1892,u=0.39483640410474385,v=0.32875398270302847,w=0.49948833443251855,x=5.005502977323175 -color=blue,shape=circle,flag=1,i=1920,u=0.6921050905721352,v=0.6372926162748623,w=0.22598792972014145,x=6.271379897001558 -color=yellow,shape=square,flag=1,i=1923,u=0.8770166356180739,v=0.4753410604663104,w=0.4973159198588518,x=6.153753768811987 -color=red,shape=triangle,flag=0,i=1939,u=0.22274687616209066,v=0.05820766875391936,w=0.5279811896729458,x=5.837491222209763 -color=blue,shape=triangle,flag=1,i=1947,u=0.9017978821708391,v=0.7636216486777394,w=0.5584057144333926,x=5.37225281233222 -color=red,shape=square,flag=1,i=1950,u=0.195954498947297,v=0.8407712819350194,w=0.5082386567466489,x=3.675549873683804 -color=orange,shape=square,flag=0,i=1957,u=0.38417441628136606,v=0.36836651319364344,w=0.3179537476836239,x=5.924890299398008 -color=purple,shape=square,flag=0,i=1958,u=0.012034648465485631,v=0.8937509799107239,w=0.6059859114206745,x=4.180251632603731 -color=red,shape=square,flag=0,i=1960,u=0.7348107158418772,v=0.8830348086865724,w=0.5096404025921634,x=3.4694534736043026 -color=purple,shape=triangle,flag=0,i=1961,u=0.3918413244226422,v=0.32805497520431326,w=0.6183627898972449,x=1.6595595062090327 -color=blue,shape=square,flag=1,i=1964,u=0.05732382015880355,v=0.9394672461010009,w=0.4145573007868255,x=5.561786594119987 -color=red,shape=square,flag=0,i=2004,u=0.010527450646065972,v=0.287701248250263,w=0.5045892743275767,x=3.236713744202779 -color=red,shape=square,flag=0,i=2039,u=0.22731984900916336,v=0.8983570756911684,w=0.5008712617811221,x=4.9984232085745495 -color=red,shape=square,flag=0,i=2049,u=0.5279313363373115,v=0.2409604806693607,w=0.49790560652173327,x=4.503685217976276 -color=green,shape=square,flag=0,i=2051,u=0.794245842750217,v=0.7402091093823174,w=0.4970912079728164,x=4.0373967594623075 -color=purple,shape=circle,flag=0,i=2054,u=0.42181769556812987,v=0.050792107711367884,w=0.4716000837281641,x=5.921232462690938 -color=red,shape=triangle,flag=0,i=2055,u=0.8078666014729401,v=0.8869222481916494,w=0.5014110450061955,x=7.381193838186551 -color=yellow,shape=square,flag=1,i=2061,u=0.5665190122003364,v=0.7545684264087924,w=0.494033380654766,x=3.718731030356641 -color=green,shape=triangle,flag=0,i=2062,u=0.17502291082114974,v=0.10387535544372395,w=0.28736501114742885,x=5.42969308340746 -color=blue,shape=square,flag=0,i=2063,u=0.3423782355214169,v=0.8918773539993816,w=0.41800999797758365,x=5.967516795513261 -color=orange,shape=square,flag=0,i=2070,u=0.8820268190136146,v=0.9171285154846617,w=0.31471547686648177,x=5.78334087255119 -color=yellow,shape=square,flag=1,i=2075,u=0.07613514761919937,v=0.5292282550348139,w=0.49149695903359814,x=6.060678779186645 -color=yellow,shape=square,flag=1,i=2088,u=0.7733220160378064,v=0.5368010271323386,w=0.49340954649249114,x=5.413943854861395 -color=red,shape=square,flag=1,i=2091,u=0.7907662511318669,v=0.41079315581366094,w=0.5011753270900353,x=5.446596187855135 -color=red,shape=triangle,flag=1,i=2096,u=0.473341079736037,v=0.722277726933131,w=0.5067185834520945,x=4.882622467240705 -color=orange,shape=square,flag=1,i=2098,u=0.6083933210185691,v=0.07344894561332505,w=0.3206503384346204,x=6.085497216074039 -color=yellow,shape=square,flag=1,i=2102,u=0.2450713937310044,v=0.37435737888140386,w=0.4893801364954174,x=5.293791266114078 -color=red,shape=triangle,flag=0,i=2122,u=0.9178243551654847,v=0.8813529027220147,w=0.5037787467721317,x=2.471433669632065 -color=red,shape=square,flag=0,i=2123,u=0.9035972672420634,v=0.14095059055333659,w=0.49238746681138607,x=4.908694594785998 -color=red,shape=circle,flag=0,i=2127,u=0.20415702895916688,v=0.19097359248059662,w=0.46445760154750326,x=3.6884724690021478 -color=purple,shape=triangle,flag=0,i=2172,u=0.05061974885761933,v=0.4436866147376577,w=0.6114885039462646,x=4.131496827328981 -color=blue,shape=triangle,flag=1,i=2180,u=0.7573212805370948,v=0.859274873940234,w=0.5524026174591629,x=4.305043355957215 -color=red,shape=square,flag=0,i=2184,u=0.5362996035868647,v=0.4812487672485227,w=0.49566643046175485,x=5.476429549181639 -color=red,shape=triangle,flag=0,i=2188,u=0.5413782361674907,v=0.446823449554417,w=0.5028345618617849,x=3.5493003465806687 -color=red,shape=square,flag=0,i=2209,u=0.6056101890433508,v=0.005237433858933049,w=0.4791373968143102,x=5.898746077346092 -color=red,shape=triangle,flag=1,i=2212,u=0.007668441317185581,v=0.46783886089685867,w=0.5068550462951366,x=2.8819823497202006 -color=red,shape=triangle,flag=0,i=2218,u=0.7051291422518633,v=0.4683361714954013,w=0.50786078207472,x=5.064898326542557 -color=red,shape=triangle,flag=0,i=2220,u=0.3917063706282701,v=0.358672920459875,w=0.5035119725326376,x=6.046505939663483 -color=blue,shape=triangle,flag=1,i=2234,u=0.9046419701146681,v=0.24662896173218762,w=0.5468128715558063,x=5.762357572121442 -color=blue,shape=circle,flag=1,i=2235,u=0.6298916188968251,v=0.5544412686634678,w=0.24476671639508038,x=3.4247663322242565 -color=red,shape=square,flag=1,i=2237,u=0.4181981748246649,v=0.7171836376857676,w=0.48304487521116446,x=5.131417000911822 -color=yellow,shape=triangle,flag=1,i=2242,u=0.706304493304751,v=0.6313225514654566,w=0.47487679584787923,x=3.2852244166106783 -color=green,shape=triangle,flag=0,i=2246,u=0.7535899572571703,v=0.29430202078094647,w=0.3153175896308371,x=5.80578311046114 -color=green,shape=triangle,flag=0,i=2251,u=0.5021607766323833,v=0.4436518391465001,w=0.32157678720951255,x=4.700097185905772 -color=purple,shape=square,flag=0,i=2256,u=0.19342782566837624,v=0.5784468640751923,w=0.594075840734447,x=4.253747745978391 -color=red,shape=triangle,flag=0,i=2260,u=0.13652640368197466,v=0.26322898842374454,w=0.4985684316788368,x=6.087846833969415 -color=blue,shape=triangle,flag=0,i=2262,u=0.5046089831646238,v=0.7618432314709886,w=0.5507671106047716,x=4.288243327121001 -color=green,shape=triangle,flag=0,i=2274,u=0.9080917087139062,v=0.11801530617669154,w=0.31761153702179556,x=4.817233799135541 -color=yellow,shape=circle,flag=1,i=2312,u=0.7122310419454759,v=0.49080032675698926,w=0.5494842698854607,x=7.207714292671764 -color=red,shape=square,flag=1,i=2326,u=0.0827312970778381,v=0.5517273827729732,w=0.48938352588506207,x=4.803961761077759 -color=purple,shape=triangle,flag=0,i=2331,u=0.48216200948294474,v=0.6053897887850926,w=0.6146269091327969,x=1.7550587684513594 -color=green,shape=square,flag=1,i=2332,u=0.8712104729844775,v=0.44649692054762347,w=0.5075555968045227,x=6.5094059131819035 -color=blue,shape=circle,flag=0,i=2372,u=0.059421255989027144,v=0.20003870343355956,w=0.2555347210848312,x=5.2061566797210865 -color=purple,shape=circle,flag=0,i=2373,u=0.9228566617233005,v=0.4497763107864796,w=0.4801253916143827,x=5.695378243720455 -color=red,shape=triangle,flag=0,i=2378,u=0.11574963698124985,v=0.42012103012753677,w=0.5117799890768516,x=7.525336843016226 -color=red,shape=square,flag=0,i=2382,u=0.7293913901135854,v=0.19408134570402402,w=0.4905942534785655,x=3.2561142488310395 -color=blue,shape=triangle,flag=1,i=2397,u=0.042930931898611746,v=0.28906353164388765,w=0.5561655237204032,x=6.041227599000723 -color=red,shape=circle,flag=0,i=2399,u=0.2745068723223836,v=0.3216275508472469,w=0.4910366611875597,x=6.366348407756217 -color=blue,shape=square,flag=0,i=2407,u=0.7569059264383019,v=0.6815621977881376,w=0.41839720783581624,x=5.599821803991174 -color=blue,shape=circle,flag=0,i=2415,u=0.04910154660574528,v=0.5404958756111141,w=0.26731849643366473,x=2.210917527535466 -color=red,shape=square,flag=1,i=2431,u=0.38378504852300466,v=0.11445015005595527,w=0.49355539228753786,x=5.146756570128739 -color=red,shape=square,flag=1,i=2432,u=0.5414289671593087,v=0.37429785299101825,w=0.4981634122502311,x=4.176700025555928 -color=red,shape=circle,flag=0,i=2437,u=0.600093686235087,v=0.5597042104813567,w=0.503798582016451,x=5.632456469655376 -color=yellow,shape=square,flag=1,i=2458,u=0.18218611935029128,v=0.2983612572175376,w=0.47416831683179905,x=6.609029907524025 -color=yellow,shape=circle,flag=0,i=2461,u=0.867165565736646,v=0.9025956363358136,w=0.5523459461012876,x=3.019338685410745 -color=red,shape=circle,flag=0,i=2464,u=0.4721625074822319,v=0.5400513390350403,w=0.5078545767976087,x=4.92582011506819 -color=yellow,shape=square,flag=1,i=2467,u=0.09361025430824799,v=0.6677738551374311,w=0.47706568665162646,x=4.939847642538352 -color=red,shape=triangle,flag=0,i=2469,u=0.3694207052198244,v=0.5447722282344535,w=0.5059100136768411,x=4.058121653794159 -color=red,shape=square,flag=0,i=2483,u=0.055122781482241257,v=0.8842125911938413,w=0.5008817538811919,x=4.217476992659292 -color=blue,shape=triangle,flag=0,i=2489,u=0.4834525731042024,v=0.2615842902696851,w=0.5501809269547815,x=4.504208776801217 -color=red,shape=square,flag=1,i=2509,u=0.10929196628953552,v=0.23255874008676836,w=0.49260009719904424,x=6.36244069119153 -color=yellow,shape=square,flag=1,i=2514,u=0.19316644777126923,v=0.8196598290451167,w=0.473664001595597,x=6.193348662471713 -color=red,shape=square,flag=0,i=2515,u=0.9993965134826659,v=0.3040179595308051,w=0.48973830078731395,x=4.653813116671806 -color=red,shape=triangle,flag=0,i=2518,u=0.787025573313828,v=0.15257056485934828,w=0.5140703781970453,x=5.3525068526509765 -color=red,shape=square,flag=0,i=2527,u=0.20767700100511788,v=0.6461450152555049,w=0.49067841457062716,x=4.783562262794988 -color=red,shape=square,flag=0,i=2530,u=0.6665993889100141,v=0.8103930799527951,w=0.48807857534214427,x=5.520916299675705 -color=red,shape=square,flag=0,i=2539,u=0.7423471131055149,v=0.49712551111307623,w=0.4931271699694902,x=4.749177198851762 -color=blue,shape=circle,flag=0,i=2545,u=0.5982593200568088,v=0.8652975100402089,w=0.275852335782209,x=4.845407519918545 -color=red,shape=square,flag=0,i=2549,u=0.856675161091566,v=0.3114165196831775,w=0.4975783715234556,x=6.130189441343838 -color=purple,shape=triangle,flag=0,i=2550,u=0.06926972665146325,v=0.7287032767882019,w=0.5889125005445655,x=4.359849328099409 -color=orange,shape=triangle,flag=0,i=2553,u=0.9508276473016848,v=0.289460587769503,w=0.8373034263773781,x=6.352831315473359 -color=red,shape=triangle,flag=0,i=2563,u=0.0013952880940285572,v=0.09067846202769703,w=0.5105621465435575,x=4.3689078711272495 -color=purple,shape=circle,flag=0,i=2571,u=0.6198746737775912,v=0.6117615279691757,w=0.48773872964753007,x=5.367637765862085 -color=red,shape=triangle,flag=0,i=2573,u=0.04812975524569185,v=0.552570125247716,w=0.5059278213119353,x=5.238843121110229 -color=blue,shape=circle,flag=0,i=2591,u=0.46654625780632264,v=0.5178845807488622,w=0.27839243430274463,x=6.439167354146311 -color=red,shape=circle,flag=0,i=2599,u=0.3893482722012248,v=0.319657811225841,w=0.5017287040828957,x=5.166054157250497 -color=blue,shape=triangle,flag=0,i=2604,u=0.6133335082909767,v=0.15706338849664125,w=0.546382973254671,x=6.129714467673984 -color=green,shape=circle,flag=0,i=2613,u=0.860428112262208,v=0.08499919357746821,w=0.4903153702211547,x=4.6590969040292585 -color=red,shape=triangle,flag=0,i=2615,u=0.47228486575544304,v=0.4120308924743207,w=0.5075734917977525,x=4.775638269918454 -color=red,shape=triangle,flag=0,i=2623,u=0.7621158578472799,v=0.631755186715638,w=0.512276263258318,x=4.755444596413841 -color=purple,shape=square,flag=0,i=2635,u=0.34455376959146433,v=0.21303267764916645,w=0.5755372207242745,x=3.5638766553560086 -color=red,shape=square,flag=1,i=2641,u=0.7965505613254553,v=0.0818371373308433,w=0.48195315152791485,x=5.339188550625941 -color=red,shape=circle,flag=0,i=2651,u=0.46662794315369327,v=0.5574202226941675,w=0.5052439560979188,x=5.609302980122653 -color=red,shape=square,flag=0,i=2658,u=0.8491361399463294,v=0.4187001806314964,w=0.47897319519987636,x=4.8801586640154495 -color=red,shape=triangle,flag=1,i=2667,u=0.29579261872209206,v=0.7019093817439674,w=0.50766809234967,x=6.228154313160498 -color=red,shape=circle,flag=1,i=2668,u=0.2712619135025529,v=0.3281769529113354,w=0.5038320732930575,x=4.04584386589855 -color=purple,shape=square,flag=0,i=2670,u=0.939866358287322,v=0.16458050042115857,w=0.5828959125996166,x=5.5577033688723505 -color=purple,shape=circle,flag=0,i=2676,u=0.2824853153170499,v=0.20800956788434943,w=0.4947041835530817,x=5.379239803600743 -color=orange,shape=triangle,flag=0,i=2681,u=0.14410249953214505,v=0.1369398445487081,w=0.8249877700073767,x=5.183498721719421 -color=red,shape=triangle,flag=1,i=2711,u=0.585818098844941,v=0.24354525693445694,w=0.49926327483226424,x=4.0251751521466606 -color=blue,shape=square,flag=1,i=2758,u=0.20431293728239353,v=0.6307312881241436,w=0.43724078843695274,x=4.966823103521364 -color=red,shape=triangle,flag=0,i=2760,u=0.466769578208979,v=0.10669816704947244,w=0.48928236874997666,x=4.022452582451303 -color=red,shape=circle,flag=0,i=2763,u=0.8540259816077556,v=0.8057968243570277,w=0.5156569287403475,x=4.366267337764332 -color=blue,shape=circle,flag=1,i=2769,u=0.26604661865892987,v=0.784638388252735,w=0.3015050382678674,x=7.025971487472547 -color=blue,shape=triangle,flag=1,i=2779,u=0.06503788484286777,v=0.7301736002489201,w=0.5563078532631365,x=3.0671895433922582 -color=orange,shape=square,flag=0,i=2784,u=0.6720087181027392,v=0.531597336406085,w=0.3189520919676537,x=4.22010568710081 -color=green,shape=square,flag=1,i=2793,u=0.6830203826405684,v=0.15743886622481862,w=0.5279821971362703,x=3.8051266229645573 -color=red,shape=square,flag=0,i=2807,u=0.02423949916367385,v=0.8786152407555577,w=0.48273103815866486,x=3.809563031581092 -color=green,shape=triangle,flag=0,i=2810,u=0.2515594916201451,v=0.31933380887633367,w=0.3636603986837392,x=5.934139909192768 -color=purple,shape=square,flag=1,i=2822,u=0.34075820160710024,v=0.23532145172796826,w=0.5805775413458969,x=4.495962024253348 -color=yellow,shape=circle,flag=1,i=2836,u=0.4213295413705884,v=0.35402689626709216,w=0.5240471070806512,x=5.6017322680647785 -color=blue,shape=square,flag=1,i=2837,u=0.4854078253161348,v=0.275549753634141,w=0.4432543288891906,x=5.022679046204014 -color=blue,shape=circle,flag=1,i=2899,u=0.011225865347384345,v=0.7596278939214351,w=0.2973899363809186,x=4.024307044697272 -color=yellow,shape=circle,flag=1,i=2904,u=0.060127079283722185,v=0.07991197701318664,w=0.5330818382412245,x=4.650117185226596 -color=red,shape=triangle,flag=0,i=2913,u=0.17119817923714076,v=0.5355228917196253,w=0.48173555768168314,x=4.29692961473938 -color=red,shape=square,flag=0,i=2917,u=0.5767756211798936,v=0.053820042841727034,w=0.46485144533441763,x=6.035228756502684 -color=blue,shape=square,flag=0,i=2929,u=0.7203315117368787,v=0.21719762158746425,w=0.4462166458471962,x=4.209121745669645 -color=green,shape=circle,flag=0,i=2961,u=0.5760332357877725,v=0.5368336322474956,w=0.49200327921124554,x=5.648004450093005 -color=red,shape=triangle,flag=1,i=2970,u=0.08962471199119348,v=0.193781073839137,w=0.478973743753035,x=6.0997977177612706 -color=red,shape=circle,flag=0,i=2976,u=0.7899621036244977,v=0.7271308924244587,w=0.5247304174521686,x=5.708568407328053 -color=orange,shape=triangle,flag=1,i=3039,u=0.03584605513790595,v=0.5494095902256649,w=0.8220909065564673,x=5.80251279122092 -color=yellow,shape=triangle,flag=1,i=3053,u=0.9545603543188562,v=0.28481029091550514,w=0.490004380848622,x=5.7383831216909575 -color=blue,shape=triangle,flag=0,i=3097,u=0.5079167708283442,v=0.9909569175762811,w=0.5331655908704808,x=5.227266519235796 -color=yellow,shape=square,flag=1,i=3100,u=0.7095883140937627,v=0.24693530853911083,w=0.4878625284719338,x=4.62163610402542 -color=red,shape=triangle,flag=1,i=3109,u=0.6423334769004939,v=0.7672655901818572,w=0.5085621363441877,x=5.159008562926921 -color=red,shape=square,flag=0,i=3110,u=0.7379664304456591,v=0.5526373549483992,w=0.501312078238629,x=4.873123746295923 -color=red,shape=circle,flag=0,i=3139,u=0.04835898233323954,v=-0.03964684310055758,w=0.5263660881848111,x=5.3758779366493625 -color=red,shape=square,flag=1,i=3143,u=0.43972972392734666,v=0.9073346476529275,w=0.5063542244408268,x=5.345589517721543 -color=blue,shape=square,flag=0,i=3146,u=0.8436718531141385,v=0.30178479630228927,w=0.4448269148693266,x=7.452227239754201 -color=blue,shape=triangle,flag=0,i=3172,u=0.18016375932930018,v=0.29903916667709207,w=0.5247628061736151,x=3.9126252951629135 -color=red,shape=circle,flag=0,i=3199,u=0.48902546841027794,v=0.4552351188158146,w=0.5188290321435243,x=5.112220714699938 -color=yellow,shape=square,flag=1,i=3217,u=0.11659672177986369,v=0.45709615572803697,w=0.5043422260876161,x=4.226149315453072 -color=purple,shape=square,flag=0,i=3234,u=0.8611706127248784,v=0.11899955602660062,w=0.5576943173830387,x=7.169704102126839 -color=red,shape=square,flag=1,i=3238,u=0.28766545256300513,v=0.23054782068431967,w=0.5070167484771201,x=4.462784514269713 -color=red,shape=square,flag=0,i=3242,u=0.3818565625270237,v=0.7635570067058998,w=0.5066415443480794,x=4.3118647467020095 -color=yellow,shape=triangle,flag=1,i=3258,u=0.17679254082047402,v=0.7230275416945412,w=0.49804435923705764,x=5.390455126526775 -color=green,shape=triangle,flag=0,i=3291,u=0.4160663781535642,v=0.7234505787229104,w=0.369071552135882,x=4.8965924838132935 -color=purple,shape=triangle,flag=0,i=3305,u=0.785074853942615,v=0.4428660270881599,w=0.558984242302829,x=3.493968237313094 -color=orange,shape=square,flag=0,i=3321,u=0.33728057367933106,v=0.9510575847640207,w=0.3345443373685077,x=6.16707538332792 -color=red,shape=square,flag=0,i=3323,u=0.9871076174950064,v=0.8155890910957214,w=0.5016892144614107,x=3.807943574802668 -color=yellow,shape=square,flag=1,i=3325,u=0.11895505800593942,v=0.3177824452328297,w=0.5028384303248526,x=2.958853038706725 -color=red,shape=circle,flag=0,i=3334,u=0.9342380991119758,v=1.0265406115139653,w=0.5282652844829879,x=5.096372390301005 -color=red,shape=triangle,flag=0,i=3342,u=0.06853001540725634,v=0.21518931089495796,w=0.5092400339915257,x=3.111120414030981 -color=red,shape=square,flag=0,i=3355,u=0.15868707140782912,v=0.8912603126080899,w=0.4974993376818556,x=4.139622205834469 -color=red,shape=square,flag=0,i=3377,u=0.44261900534999477,v=0.22156014384391187,w=0.4981056401951789,x=3.4482408274879326 -color=red,shape=triangle,flag=0,i=3383,u=0.1975740843420113,v=0.694066274381527,w=0.5099143602428216,x=6.278038820938137 -color=blue,shape=square,flag=1,i=3384,u=0.6494987803573309,v=0.10428905425407242,w=0.4638675835598705,x=5.017911147785691 -color=orange,shape=triangle,flag=1,i=3390,u=0.7626521312629074,v=0.7884860306182669,w=0.8041098361892922,x=3.3786922967553568 -color=red,shape=triangle,flag=1,i=3405,u=0.29986310508342595,v=0.4665669025486415,w=0.5035005171777974,x=5.287648152836879 -color=orange,shape=square,flag=0,i=3407,u=0.6569265707155644,v=0.3129012234653398,w=0.3418801239588996,x=1.4936798534555953 -color=purple,shape=triangle,flag=0,i=3424,u=0.6709158812243344,v=0.9902163309577701,w=0.5583023290102405,x=3.299970219543622 -color=orange,shape=square,flag=1,i=3427,u=0.5542951145301398,v=0.1443227656777426,w=0.33899948644371813,x=4.305918243540835 -color=purple,shape=square,flag=0,i=3441,u=0.2798375437463839,v=0.9679266172102754,w=0.5552404089697491,x=6.526454003994018 -color=yellow,shape=square,flag=1,i=3455,u=0.9750136599046068,v=0.40439261677513194,w=0.5114865981431348,x=5.37249037290091 -color=purple,shape=circle,flag=0,i=3465,u=0.6309531739733012,v=0.20965858831535633,w=0.4915931289679595,x=4.744129028484625 -color=purple,shape=square,flag=0,i=3467,u=0.12227601731152626,v=0.6657577272166397,w=0.5516707923681236,x=6.118030228989158 -color=green,shape=triangle,flag=1,i=3470,u=0.6075052268611216,v=0.8471110240351473,w=0.38138320578866713,x=4.131367985956812 -color=blue,shape=square,flag=1,i=3477,u=0.5342263588773409,v=0.4583144809407387,w=0.47952666325723603,x=4.314116433880872 -color=red,shape=triangle,flag=0,i=3479,u=0.7629680483968369,v=0.4851010795836088,w=0.5062802072376592,x=4.640328795473425 -color=yellow,shape=triangle,flag=1,i=3496,u=0.22226409991261276,v=0.25514199825301653,w=0.48929984054123293,x=4.29108639305515 -color=red,shape=circle,flag=0,i=3498,u=0.5025342202643073,v=0.5193089434912787,w=0.5076410961575311,x=7.5163195300728445 -color=purple,shape=circle,flag=0,i=3502,u=0.6127220192423671,v=0.42124237189082436,w=0.4903910646042732,x=6.69716264312309 -color=green,shape=square,flag=1,i=3530,u=0.31349264736927074,v=0.22359313446706852,w=0.5264958103979744,x=4.947703594485797 -color=red,shape=triangle,flag=1,i=3542,u=0.5488528555599972,v=0.14731891743885583,w=0.5205827627260905,x=4.907192591258627 -color=red,shape=circle,flag=0,i=3551,u=0.2573426126511935,v=0.26880369068162485,w=0.5051868939434375,x=4.283511251193726 -color=red,shape=triangle,flag=0,i=3557,u=0.7281939031315208,v=0.7105692440420169,w=0.5250568231767727,x=4.225341474471109 -color=purple,shape=triangle,flag=0,i=3588,u=0.9114219545246541,v=0.9454991714310369,w=0.5606932119266484,x=5.579409174036885 -color=yellow,shape=circle,flag=1,i=3592,u=0.25106457537004534,v=0.9189161472825008,w=0.5502393699709364,x=4.629742960614238 -color=red,shape=triangle,flag=0,i=3612,u=0.2624978784252636,v=0.22206817539475454,w=0.5238730041174808,x=3.293566613899943 -color=blue,shape=circle,flag=1,i=3616,u=0.8548431579124808,v=0.4989623130006362,w=0.3339426415875795,x=3.696785877560498 -color=green,shape=circle,flag=0,i=3619,u=0.4784857910983109,v=0.5493495527943834,w=0.4819892327327133,x=6.703865601324473 -color=yellow,shape=triangle,flag=1,i=3638,u=0.5681423563525043,v=0.7364416318425555,w=0.48057415644311974,x=4.5660100665444014 -color=red,shape=square,flag=1,i=3667,u=0.23130521649286728,v=0.9381273139743299,w=0.48009597176641444,x=5.397341753984847 -color=red,shape=circle,flag=0,i=3669,u=0.9314245382696817,v=0.9674373579337011,w=0.5132085419267511,x=5.481596451971721 -color=red,shape=triangle,flag=0,i=3692,u=0.544472556395205,v=0.11951193848308495,w=0.5196415119222436,x=5.384614938904473 -color=blue,shape=circle,flag=1,i=3706,u=0.0029050316374207297,v=0.6383605275040843,w=0.34390644347128174,x=3.3217254020358866 -color=yellow,shape=triangle,flag=1,i=3711,u=0.8830172834029085,v=0.0976486136749366,w=0.4671083759493429,x=6.758219613098135 -color=purple,shape=square,flag=0,i=3717,u=0.30507324254754,v=0.7580944229000848,w=0.5547429873740861,x=5.920423913087702 -color=green,shape=square,flag=0,i=3720,u=0.7484207921073818,v=0.6812830924610436,w=0.49879495046941286,x=5.309172286057781 -color=red,shape=square,flag=0,i=3727,u=0.2871708733313212,v=0.7441603570837213,w=0.4826618004789263,x=5.326089833147184 -color=red,shape=square,flag=0,i=3736,u=0.6731464315461275,v=0.8142237150005265,w=0.4836395285993182,x=4.162353571125508 -color=blue,shape=circle,flag=0,i=3737,u=0.7125529509526801,v=0.9945516400071723,w=0.34771246879360596,x=6.006278483191809 -color=red,shape=triangle,flag=1,i=3740,u=0.6352327108932165,v=0.3302652448233153,w=0.5199029809032459,x=5.503021380321466 -color=red,shape=triangle,flag=0,i=3745,u=0.26950091413397326,v=0.20488907698806225,w=0.5197578213189719,x=5.510190145440178 -color=red,shape=square,flag=1,i=3753,u=0.5650541503977822,v=0.9139666513927299,w=0.486154043146944,x=3.0724619744871817 -color=yellow,shape=square,flag=1,i=3778,u=0.5947707471316804,v=0.09026045684055795,w=0.4964365067198076,x=4.830669326396104 -color=red,shape=triangle,flag=0,i=3783,u=0.23109195853995956,v=0.36449444195718883,w=0.5224561596699105,x=3.8821579043978804 -color=red,shape=triangle,flag=0,i=3792,u=0.08616804062055272,v=0.8126508574261648,w=0.5233142649552321,x=7.9621859867573725 -color=green,shape=triangle,flag=0,i=3800,u=0.3719056969079264,v=0.4862618905657431,w=0.4065991004232053,x=4.443325054201435 -color=green,shape=square,flag=1,i=3839,u=0.5469614915238294,v=0.3072050190333283,w=0.4951257220963446,x=5.442782750264191 -color=red,shape=triangle,flag=1,i=3843,u=0.63750977846767,v=0.004933372974431416,w=0.5069261041379488,x=3.6004625092063005 -color=red,shape=triangle,flag=0,i=3847,u=0.4792497809968481,v=0.23042814116269672,w=0.5105283292600247,x=5.182239155954865 -color=red,shape=circle,flag=0,i=3852,u=0.6258776262265322,v=0.578436676444718,w=0.5010873044116889,x=4.0170195022323965 -color=red,shape=square,flag=1,i=3853,u=0.17872649913027228,v=0.2683197014208172,w=0.48836074729380285,x=4.798004218704503 -color=green,shape=triangle,flag=0,i=3865,u=0.34830225374577395,v=0.7007829632717277,w=0.4092352482005258,x=4.830443606736057 -color=green,shape=circle,flag=1,i=3867,u=0.07527024915669844,v=0.03535630586767424,w=0.4742796270589179,x=3.3261008085136528 -color=yellow,shape=square,flag=0,i=3880,u=0.9219460612150782,v=0.838447974289432,w=0.49181308071483315,x=4.51314563564714 -color=purple,shape=triangle,flag=0,i=3882,u=0.7721871261531433,v=0.8769023760773738,w=0.5677559622434847,x=3.1988096810546964 -color=red,shape=square,flag=0,i=3886,u=0.9658606990028249,v=0.38336621536381843,w=0.480800207772279,x=6.603932501820694 -color=red,shape=circle,flag=0,i=3887,u=0.065543174726716,v=0.06552331298811505,w=0.49656529536436195,x=5.504627088037929 -color=red,shape=triangle,flag=0,i=3893,u=0.6757353069418544,v=0.9642423797735116,w=0.5092994498974618,x=3.6985647200819507 -color=red,shape=square,flag=0,i=3916,u=0.9626445334664495,v=0.5516233097517408,w=0.4770575250413808,x=5.997423877021141 -color=green,shape=triangle,flag=0,i=3920,u=0.9194195238971357,v=0.5288738098195129,w=0.4101493645615294,x=6.119935959628971 -color=red,shape=square,flag=0,i=3922,u=0.09032982008561452,v=0.0008107480968789771,w=0.47081635593282695,x=4.580372453762882 -color=red,shape=square,flag=0,i=3924,u=0.005483716581601961,v=0.15863307151489492,w=0.4671178312000501,x=6.133005185525068 -color=blue,shape=circle,flag=1,i=3931,u=0.8902947073598717,v=0.9040755396991641,w=0.3577299631520571,x=6.460963763579916 -color=red,shape=triangle,flag=0,i=3938,u=0.1308631487570372,v=0.7188896777638393,w=0.5099137483712004,x=2.6886882935932532 -color=yellow,shape=circle,flag=1,i=3940,u=0.3214366344529531,v=0.32542143328187734,w=0.5573015922411075,x=4.287931687032514 -color=green,shape=triangle,flag=1,i=3951,u=0.8896811661805898,v=0.9602687863114365,w=0.41539297870639225,x=3.688485842795396 -color=red,shape=circle,flag=1,i=3973,u=0.5501212863905588,v=0.5060391827174543,w=0.4914473165563479,x=4.517096929825123 -color=red,shape=circle,flag=1,i=3978,u=0.8784076422313635,v=0.8071059960737477,w=0.49074922430355267,x=5.357454971490885 -color=red,shape=circle,flag=1,i=4000,u=0.05490416175132373,v=0.07392337815122155,w=0.49416101516594396,x=5.355725080701707 -color=blue,shape=square,flag=1,i=4007,u=0.3593621089751877,v=0.4204952586591253,w=0.48311885257376547,x=4.152786490042463 -color=red,shape=circle,flag=0,i=4008,u=0.6263771674542099,v=0.6273789656494907,w=0.4925932624358998,x=3.412081047867682 -color=yellow,shape=square,flag=1,i=4010,u=0.7166252708117242,v=0.5393574073258124,w=0.4864772500833869,x=3.005238186091022 -color=blue,shape=circle,flag=1,i=4048,u=0.6375928559984098,v=0.13094792714264747,w=0.3559378606794926,x=5.594978182895825 -color=red,shape=square,flag=1,i=4055,u=0.5584526843675628,v=0.274821142186197,w=0.4859245223815638,x=3.846472472964154 -color=yellow,shape=square,flag=1,i=4065,u=0.30055120732205987,v=0.8237403642678218,w=0.4940415884493408,x=4.389389322019022 -color=red,shape=circle,flag=1,i=4066,u=0.3079054257526094,v=0.3938428302018409,w=0.4840911577561348,x=5.025254765228029 -color=red,shape=triangle,flag=0,i=4070,u=0.7857193974786632,v=0.20523038183871056,w=0.5148166157666305,x=7.390248248875976 -color=red,shape=triangle,flag=0,i=4073,u=0.8715276951630303,v=0.7631813622272297,w=0.5149349053075495,x=3.831016926880204 -color=purple,shape=square,flag=0,i=4080,u=0.9507897518515176,v=0.7330368467293205,w=0.5618439565262913,x=5.065911449238861 -color=red,shape=triangle,flag=0,i=4089,u=0.23546693802152452,v=0.8864756100273485,w=0.5176775288597121,x=4.486048731255909 -color=green,shape=triangle,flag=0,i=4111,u=0.3284284241669122,v=0.7897294545153425,w=0.4255682687947704,x=4.33760596350459 -color=blue,shape=circle,flag=0,i=4113,u=0.7778561711591236,v=0.7026046553162363,w=0.36016953332639406,x=4.3253087131762 -color=green,shape=square,flag=0,i=4116,u=0.017264149877869173,v=0.6772019371129909,w=0.49127313845384646,x=4.561244596198336 -color=green,shape=circle,flag=0,i=4122,u=0.42041660464659514,v=0.9987265889293468,w=0.4709212310875591,x=5.270326965032162 -color=purple,shape=triangle,flag=0,i=4123,u=0.48215503477639954,v=0.6245337534585043,w=0.5520777975040859,x=5.260380548282169 -color=blue,shape=circle,flag=0,i=4125,u=0.7292024833007671,v=0.9886297258819318,w=0.35794951366222183,x=6.318628391623386 -color=red,shape=square,flag=1,i=4133,u=0.5131088766874894,v=0.99207096020626,w=0.49072827406779573,x=6.405522770873926 -color=red,shape=circle,flag=0,i=4137,u=0.13371213335685206,v=0.08184469599874578,w=0.4886718357447637,x=4.690215456366022 -color=green,shape=square,flag=0,i=4138,u=0.4870533364703431,v=0.6089277625056339,w=0.49423438876804665,x=2.962448288757521 -color=red,shape=square,flag=0,i=4141,u=0.7527801461726715,v=0.47801360576698193,w=0.49139292839500837,x=3.695696364641762 -color=blue,shape=square,flag=0,i=4144,u=0.6508968440851186,v=0.01594167925920531,w=0.4909152884928182,x=3.9139237568935084 -color=red,shape=triangle,flag=1,i=4152,u=0.5290995440135682,v=0.15147554840633548,w=0.5190495163964532,x=7.2158162973518065 -color=purple,shape=circle,flag=1,i=4153,u=0.010343789766863232,v=0.4542361685678803,w=0.45706733570733415,x=4.185599374272368 -color=red,shape=square,flag=1,i=4159,u=0.9090870913203859,v=0.4509060551323797,w=0.4921856922497064,x=5.206561949198413 -color=red,shape=square,flag=0,i=4187,u=0.24998114916946512,v=0.7793536566455239,w=0.4979741881291295,x=6.942078444289223 -color=red,shape=square,flag=1,i=4196,u=0.1649889386660216,v=0.1944723914799218,w=0.4877029534129722,x=4.012665515919996 -color=blue,shape=circle,flag=0,i=4210,u=0.43188118595514013,v=0.05626968920047648,w=0.36041342723044056,x=5.240538052406783 -color=purple,shape=triangle,flag=0,i=4219,u=0.7636107502661091,v=0.5386503845691811,w=0.5474633930296947,x=7.4079025462829335 -color=yellow,shape=triangle,flag=1,i=4224,u=0.23806761658919084,v=0.38805580422442765,w=0.4739522498157717,x=3.3417188940812355 -color=red,shape=square,flag=0,i=4233,u=0.6186732875970838,v=0.4519782222039107,w=0.4780176245355303,x=6.172910701285077 -color=blue,shape=square,flag=1,i=4243,u=0.3917412188768753,v=0.645158831472363,w=0.4953483544193797,x=3.428474040547902 -color=purple,shape=square,flag=0,i=4245,u=0.9891890351824295,v=0.6480643195288099,w=0.5524803116498138,x=5.458900869849497 -color=red,shape=triangle,flag=0,i=4259,u=0.040083681097769164,v=0.15745823308154772,w=0.5154490705077337,x=5.205330502248688 -color=blue,shape=triangle,flag=1,i=4266,u=0.807310216945378,v=0.6397280241121506,w=0.5378039116131943,x=3.7168978227298077 -color=purple,shape=circle,flag=0,i=4269,u=0.12564067513031663,v=0.08040467691871445,w=0.45938362065333793,x=5.994242178415964 -color=yellow,shape=triangle,flag=1,i=4278,u=0.8317601951056839,v=0.7616584106935024,w=0.4723712300439795,x=7.171809837380553 -color=green,shape=square,flag=0,i=4298,u=0.8889952525373963,v=0.37402240945052534,w=0.4904462579818838,x=5.76031072452648 -color=yellow,shape=circle,flag=1,i=4304,u=0.6776539392030757,v=0.46415285564554576,w=0.5489543752433077,x=6.952944315945049 -color=red,shape=square,flag=0,i=4315,u=0.777751491546273,v=0.33508243498264767,w=0.48093360774834243,x=6.687593635204276 -color=red,shape=square,flag=0,i=4320,u=0.56311263501616,v=0.911770016966866,w=0.47673720111374274,x=4.981452745180131 -color=red,shape=circle,flag=0,i=4354,u=0.5167962363665243,v=0.5433960802622636,w=0.4885582203940556,x=5.578784767733086 -color=red,shape=circle,flag=1,i=4364,u=0.7782083467757581,v=0.7997449329308299,w=0.4972269164599567,x=5.3362889036878585 -color=red,shape=square,flag=0,i=4369,u=0.434285938385071,v=0.01089664572421567,w=0.48229866547079614,x=3.881217457651722 -color=red,shape=square,flag=0,i=4379,u=0.5222428403277589,v=0.8011417037625204,w=0.47553145537873565,x=4.751087465594357 -color=blue,shape=triangle,flag=1,i=4398,u=0.41078756963174423,v=0.4641707690981701,w=0.5264967143522112,x=5.677853630107361 -color=red,shape=square,flag=1,i=4412,u=0.8128120936484775,v=0.9688455224228868,w=0.4702410026786483,x=3.271908704866489 -color=red,shape=square,flag=0,i=4419,u=0.20372484920186795,v=0.41298665778133037,w=0.4660083716530997,x=4.057537592001876 -color=purple,shape=square,flag=0,i=4427,u=0.8422493225818376,v=0.382468909787415,w=0.5632113301941087,x=4.454792138256643 -color=purple,shape=triangle,flag=0,i=4432,u=0.33934567909701696,v=0.958554458947561,w=0.5515871029354242,x=4.713000872537885 -color=green,shape=square,flag=0,i=4440,u=0.9132657377198357,v=0.7835187031065083,w=0.497602832547874,x=5.327120400792336 -color=green,shape=circle,flag=0,i=4449,u=0.3338305852467741,v=0.012692849632647496,w=0.4690271926679323,x=4.954187279536586 -color=blue,shape=circle,flag=1,i=4461,u=0.17485481067978437,v=0.5216593873404025,w=0.3744188448578828,x=4.393387724137667 -color=red,shape=square,flag=0,i=4479,u=0.6514331004292623,v=0.10236585048474345,w=0.4695351500820933,x=4.2650309820261345 -color=red,shape=square,flag=1,i=4480,u=0.8469976130899075,v=0.0011247642630375365,w=0.47227495497588245,x=7.4727705325755585 -color=red,shape=circle,flag=0,i=4481,u=0.6587785325792491,v=0.7131442696567425,w=0.4989878576569834,x=4.39459645796621 -color=red,shape=circle,flag=0,i=4483,u=0.3329844783281878,v=0.3025610271956023,w=0.4969507873863136,x=3.6657973248904376 -color=purple,shape=square,flag=0,i=4490,u=0.07386981905312218,v=0.29799061460644083,w=0.5646796267964418,x=7.028530018358976 -color=yellow,shape=triangle,flag=1,i=4497,u=0.5495164190322613,v=0.6741898996197746,w=0.4700650710173229,x=3.647356510274664 -color=red,shape=square,flag=1,i=4502,u=0.07282561554650291,v=0.19934102395334075,w=0.4840570278598482,x=5.460009845016438 -color=red,shape=circle,flag=0,i=4517,u=0.9560301078405197,v=0.9855615893929697,w=0.49407564580292324,x=4.204357524310372 -color=blue,shape=triangle,flag=1,i=4526,u=0.8839149042250543,v=0.316740732138862,w=0.5304074389039727,x=6.135035264406359 -color=blue,shape=triangle,flag=1,i=4533,u=0.41753698030666864,v=0.22724172152243005,w=0.5313197462660701,x=5.393428621429922 -color=yellow,shape=triangle,flag=0,i=4534,u=0.014620330740086618,v=0.4958745335342518,w=0.4676047611248905,x=5.286639600542727 -color=green,shape=circle,flag=1,i=4536,u=0.09684826124548573,v=0.004968761544236533,w=0.464446506694815,x=5.82288074428381 -color=green,shape=circle,flag=0,i=4544,u=0.6463719909807981,v=0.401498834272373,w=0.46521489990368287,x=6.295453090216363 -color=red,shape=square,flag=1,i=4569,u=0.38732684841686893,v=0.4879193813283953,w=0.4898777132996863,x=5.25807312230191 -color=red,shape=triangle,flag=0,i=4611,u=0.6897926667476658,v=0.8291653414676392,w=0.49602856830692227,x=7.516391237463194 -color=green,shape=triangle,flag=1,i=4614,u=0.4585811547325982,v=0.6261203358311093,w=0.44350744789842583,x=5.048531990168133 -color=red,shape=square,flag=0,i=4618,u=0.2730086470257036,v=0.7829600067694346,w=0.4860522657248413,x=5.395407567505142 -color=green,shape=circle,flag=0,i=4626,u=0.0226257356389713,v=0.9601029264420361,w=0.461311029254716,x=3.5882511689718135 -color=red,shape=square,flag=0,i=4652,u=0.05703877491940923,v=0.06585729734046852,w=0.48208385558520445,x=4.060983069969076 -color=yellow,shape=square,flag=1,i=4659,u=0.2801824030534069,v=0.0438178619705506,w=0.501986681267166,x=7.6131269954403 -color=blue,shape=circle,flag=1,i=4672,u=4.3912454007477564e-05,v=0.362796288952525,w=0.3993360484373074,x=3.9861223442408416 -color=orange,shape=circle,flag=1,i=4692,u=0.9954037369880855,v=0.02349018535873748,w=0.6159445024232557,x=4.7499934114291085 -color=blue,shape=circle,flag=1,i=4710,u=0.7871079093873165,v=0.7861781653597818,w=0.39291034976006217,x=4.153924056765995 -color=red,shape=triangle,flag=0,i=4727,u=0.5273654668420624,v=0.5600630076906481,w=0.5001817515136285,x=7.015063655811005 -color=red,shape=square,flag=1,i=4756,u=0.9589146091494035,v=0.9740295173385957,w=0.4862863231058336,x=3.779876984793303 -color=yellow,shape=square,flag=1,i=4759,u=0.9845759343144127,v=0.36563785275364136,w=0.5010217479150095,x=4.869039297795497 -color=red,shape=square,flag=1,i=4762,u=0.5575845396339288,v=0.97746474716903,w=0.48304555133080473,x=4.339129497099426 -color=red,shape=square,flag=1,i=4773,u=0.987130101490106,v=0.40244866871421126,w=0.4882601914063636,x=5.047887427900072 -color=blue,shape=square,flag=0,i=4783,u=0.22565129993731936,v=0.1707567132972978,w=0.46719616905216915,x=6.190039910143233 -color=red,shape=square,flag=0,i=4797,u=0.9636542512173785,v=0.5946682359307124,w=0.4895280923615869,x=2.9021778447739788 -color=green,shape=circle,flag=0,i=4808,u=0.47531974356169093,v=0.1164795381234004,w=0.46278990722449626,x=4.396019068357184 -color=red,shape=triangle,flag=0,i=4822,u=0.10849972348909509,v=0.8245184575125909,w=0.503656669017261,x=3.691476903043085 -color=orange,shape=square,flag=1,i=4831,u=0.7999192819621908,v=0.9520046684953247,w=0.359627084402705,x=4.788271505203496 -color=red,shape=square,flag=0,i=4838,u=0.12062753657031133,v=0.06097750480829511,w=0.4865831322953874,x=4.967876012945222 -color=blue,shape=triangle,flag=1,i=4858,u=0.47904328213813874,v=0.22569528473924072,w=0.5290903965165521,x=6.090757985580196 -color=yellow,shape=circle,flag=1,i=4861,u=0.8714478634106673,v=0.705860033229531,w=0.5403439167752929,x=5.158122690299913 -color=purple,shape=triangle,flag=1,i=4868,u=0.3196040625347073,v=0.45592095246985065,w=0.5421864325199726,x=5.038247417673449 -color=red,shape=square,flag=1,i=4877,u=0.6352240793453936,v=0.21551322767111503,w=0.5023205660300618,x=6.3075083428004985 -color=red,shape=triangle,flag=1,i=4889,u=0.05384871008434988,v=0.07587178184811971,w=0.49631820726428827,x=2.253273333249837 -color=yellow,shape=triangle,flag=1,i=4893,u=0.11402238792055563,v=0.10140796489934611,w=0.4763049121271566,x=5.706121371454866 -color=green,shape=circle,flag=1,i=4894,u=0.8670868228399143,v=0.7287253707307526,w=0.4711920364233325,x=4.958278717805755 -color=purple,shape=circle,flag=0,i=4901,u=0.4911898392656703,v=0.47771650215029504,w=0.47221468860917887,x=4.916147870038752 -color=yellow,shape=triangle,flag=1,i=4909,u=0.7835833005251677,v=0.253223644228022,w=0.47882827035870973,x=4.07965453809507 -color=purple,shape=circle,flag=0,i=4917,u=0.21405431790548124,v=0.22809134769476713,w=0.4762557694477563,x=6.595152012939322 -color=red,shape=triangle,flag=0,i=4923,u=0.6073390030280708,v=0.8188089199730891,w=0.49207972463552285,x=5.447411893042994 -color=red,shape=square,flag=0,i=4956,u=0.43253415766372016,v=0.7323508812510726,w=0.522914342700665,x=6.120916811217318 -color=blue,shape=triangle,flag=0,i=4962,u=0.6367779574323398,v=0.3947339560378299,w=0.5113021410683906,x=4.392191418330258 -color=red,shape=triangle,flag=1,i=4966,u=0.7684465674231389,v=0.17573220719193694,w=0.4833613335972867,x=6.371413249901571 -color=red,shape=circle,flag=0,i=4968,u=0.9691878006521278,v=0.8698367737670867,w=0.5060677109704748,x=3.990767354172237 -color=red,shape=square,flag=0,i=4984,u=0.6146393359480166,v=0.5101038208363462,w=0.5305089395451624,x=4.356529834004775 -color=red,shape=triangle,flag=0,i=5010,u=0.604365562732041,v=0.8079847476181391,w=0.4906319246434529,x=4.798297275786936 -color=orange,shape=square,flag=1,i=5016,u=0.19504118170080154,v=0.3520822859547038,w=0.35691733012089655,x=5.833861438271984 -color=red,shape=square,flag=0,i=5020,u=0.19361450696395321,v=0.4001616372613894,w=0.5310319459816489,x=2.4545267472064682 -color=green,shape=square,flag=0,i=5028,u=0.07963993301021555,v=0.06697791193622316,w=0.5216052853331227,x=7.172653891332646 -color=yellow,shape=square,flag=1,i=5033,u=0.6872771220970901,v=0.5126236481991991,w=0.4996821120073008,x=5.017493586848938 -color=red,shape=square,flag=0,i=5037,u=0.08920709206819122,v=0.11719414853680221,w=0.5365776596846343,x=5.9465368625308 -color=red,shape=triangle,flag=0,i=5041,u=0.3536748666857381,v=0.7952387130119751,w=0.49527174287537834,x=4.1035103127529196 -color=green,shape=triangle,flag=1,i=5058,u=0.9004975987784543,v=0.0290656688852996,w=0.44741049179718756,x=3.614604311632285 -color=yellow,shape=triangle,flag=1,i=5078,u=0.703794888428924,v=0.876877578963412,w=0.476153857870298,x=6.265288459212706 -color=purple,shape=circle,flag=0,i=5107,u=0.2795363933006426,v=0.41416671317299536,w=0.48024594626924516,x=4.58236419807355 -color=red,shape=triangle,flag=0,i=5114,u=0.5459583658068602,v=0.7097663308273577,w=0.49078816934002184,x=4.024368397437182 -color=red,shape=triangle,flag=1,i=5120,u=0.3058308697396813,v=0.32914633277497196,w=0.49153375908198477,x=6.158690132090211 -color=red,shape=square,flag=1,i=5122,u=0.48642277524060873,v=0.7977013112345599,w=0.5425386941097052,x=3.836137373926413 -color=red,shape=circle,flag=0,i=5123,u=0.861691357988579,v=0.7913306086663261,w=0.5020442668695987,x=3.6515566810550104 -color=red,shape=circle,flag=0,i=5129,u=0.8238063934964313,v=0.8176654026497628,w=0.4963399915135567,x=4.058369612979784 -color=red,shape=circle,flag=1,i=5154,u=0.3169193017115355,v=0.22665248853824443,w=0.4987271979279972,x=5.159098929883051 -color=yellow,shape=square,flag=1,i=5166,u=0.2803249006586175,v=0.5359442761836394,w=0.5107896973536701,x=4.597085405376856 -color=red,shape=circle,flag=1,i=5183,u=0.8557812372608711,v=0.9127347887390895,w=0.49400982545841743,x=5.264330525710999 -color=red,shape=square,flag=1,i=5186,u=0.8165284600289506,v=0.31230879758685837,w=0.5204004907998334,x=5.451993993057882 -color=red,shape=square,flag=0,i=5196,u=0.27689581006450603,v=0.7394640009940899,w=0.5166708364087473,x=4.343491758592539 -color=red,shape=triangle,flag=1,i=5210,u=0.7671319591554112,v=0.27923305305030366,w=0.4939196894546826,x=4.586177247868108 -color=yellow,shape=square,flag=1,i=5219,u=0.016884553811871483,v=0.7815478913950888,w=0.5052713146704236,x=4.720122118911909 -color=red,shape=circle,flag=0,i=5220,u=0.20521281132071523,v=0.119892417512705,w=0.4924842936771303,x=3.25331818168061 -color=yellow,shape=circle,flag=1,i=5225,u=0.3247971112570329,v=0.41443898848863536,w=0.5241058861810568,x=5.637380968369996 -color=red,shape=circle,flag=1,i=5229,u=0.40302762376415846,v=0.45321274325339284,w=0.4897762269556689,x=4.105730746345201 -color=yellow,shape=triangle,flag=1,i=5241,u=0.9194245661694567,v=0.4245526342935101,w=0.47628113176234915,x=5.5530165631171755 -color=yellow,shape=square,flag=1,i=5248,u=0.6655857326872444,v=0.541571483415203,w=0.5011099404154018,x=5.861835255081043 -color=red,shape=square,flag=0,i=5268,u=0.190867901564158,v=0.4891538330593278,w=0.5301900141183975,x=6.1611982912689784 -color=red,shape=triangle,flag=0,i=5272,u=0.8254638695159972,v=0.7448752353407149,w=0.486387161134547,x=5.273632489589256 -color=green,shape=triangle,flag=0,i=5273,u=0.7546301813415475,v=0.323871582533658,w=0.45424433413740173,x=4.430087789183369 -color=blue,shape=triangle,flag=0,i=5274,u=0.8145195367113205,v=0.670382826262773,w=0.5061648811956903,x=5.869251002344352 -color=green,shape=square,flag=0,i=5293,u=0.9716742088009472,v=0.7911696066830448,w=0.5219301837949548,x=4.703196776780304 -color=red,shape=triangle,flag=1,i=5298,u=0.5460710922901167,v=0.7013285098055233,w=0.48960158514348856,x=4.837150970530721 -color=red,shape=triangle,flag=0,i=5299,u=0.43174705987682027,v=0.7502016298078271,w=0.494126213095056,x=4.452565211510168 -color=red,shape=square,flag=1,i=5317,u=0.7009176336480939,v=0.021785807344981034,w=0.5164538203896442,x=3.6294283264196494 -color=blue,shape=circle,flag=1,i=5319,u=0.1566912706290573,v=0.22007285880750194,w=0.4345644688277157,x=7.744057545338137 -color=red,shape=circle,flag=0,i=5332,u=0.9806117525858196,v=0.9204546768661085,w=0.49349011013245503,x=6.213357898369942 -color=orange,shape=circle,flag=1,i=5340,u=0.4811348140983073,v=0.6551643755628681,w=0.6112832826828236,x=2.133203335064926 -color=blue,shape=square,flag=1,i=5347,u=0.9828791004053427,v=0.8530021158344594,w=0.48242637172402547,x=5.939278661543149 -color=yellow,shape=triangle,flag=1,i=5373,u=0.9531788600706754,v=0.4340981772974625,w=0.4848437598528061,x=3.3266816836723745 -color=purple,shape=square,flag=0,i=5379,u=0.7098198733959674,v=0.3736265270010867,w=0.5324712632741289,x=5.876357085397324 -color=red,shape=triangle,flag=0,i=5383,u=0.7518149145929596,v=0.7402708470487265,w=0.4910695100700751,x=4.420695582257983 -color=red,shape=circle,flag=1,i=5419,u=0.46120345804623264,v=0.4948385089781824,w=0.4913468113920055,x=7.40814630568676 -color=red,shape=triangle,flag=0,i=5422,u=0.08197776357773012,v=0.9669361078130646,w=0.48894290275519053,x=4.740888978916967 -color=red,shape=triangle,flag=1,i=5423,u=0.7344507332875202,v=0.3362814790662835,w=0.49109866378134515,x=6.007147287601158 -color=red,shape=square,flag=0,i=5425,u=0.2357167709491399,v=0.5152841340644533,w=0.49403680508208875,x=4.212187341924275 -color=green,shape=square,flag=0,i=5429,u=0.07774245944604241,v=0.964994594550859,w=0.5124137668635241,x=5.478920624538173 -color=blue,shape=circle,flag=0,i=5431,u=0.9906112914954729,v=0.44746308178858474,w=0.4338609015436608,x=6.518835807126326 -color=blue,shape=square,flag=1,i=5449,u=0.4860631799941614,v=0.9839334962924786,w=0.4830950046923664,x=6.073949563909348 -color=blue,shape=triangle,flag=0,i=5456,u=0.25038992161389095,v=0.23043385353332702,w=0.5078905734176592,x=6.3057961632124675 -color=green,shape=square,flag=0,i=5457,u=0.4684604519481598,v=0.7769294177621766,w=0.516941596048288,x=7.171461003054351 -color=red,shape=triangle,flag=0,i=5461,u=0.25294366711199856,v=0.5070854388291478,w=0.49114712956461404,x=4.476838296456381 -color=red,shape=triangle,flag=0,i=5463,u=0.608826642554208,v=0.07789433152186664,w=0.4922557167043311,x=6.393603353848435 -color=red,shape=triangle,flag=0,i=5479,u=0.7872114280323266,v=0.0916362874841371,w=0.4975388175743881,x=5.1007122242037966 -color=purple,shape=square,flag=0,i=5505,u=0.2799855143481479,v=0.6088919218342325,w=0.5248399368213407,x=3.897944745874863 -color=yellow,shape=square,flag=1,i=5507,u=0.6484833754240118,v=0.03136077558439587,w=0.5098510569841375,x=2.744325569188073 -color=red,shape=square,flag=0,i=5513,u=0.9028358793498334,v=0.6087929936485224,w=0.4808784176034518,x=5.46492806363922 -color=red,shape=square,flag=1,i=5517,u=0.4289157251019926,v=0.27223050052537523,w=0.49052968111210554,x=4.345423371673012 -color=red,shape=triangle,flag=0,i=5525,u=0.7317109830812456,v=0.03261841888525885,w=0.4993605420272282,x=3.880444568204959 -color=yellow,shape=square,flag=1,i=5538,u=0.4022101366915811,v=0.36572652105350933,w=0.5088194471660124,x=4.878808608470745 -color=green,shape=square,flag=0,i=5546,u=0.7294308945801579,v=0.8130068799671252,w=0.5143357290066191,x=5.546408048163998 -color=red,shape=triangle,flag=1,i=5569,u=0.5069614611521822,v=0.6982507966322651,w=0.48979688051894626,x=5.9072897890759135 -color=red,shape=circle,flag=1,i=5573,u=0.771208791227169,v=0.6805835324630879,w=0.4899728646284138,x=4.991038703312431 -color=red,shape=circle,flag=1,i=5574,u=0.8723819483185645,v=0.9666792341752801,w=0.48894193821989596,x=5.053462506768004 -color=blue,shape=circle,flag=0,i=5596,u=0.525225660059,v=0.9995761761685742,w=0.44164047681920576,x=7.206892302643266 -color=red,shape=square,flag=0,i=5599,u=0.46933514095815465,v=0.37867125339476027,w=0.48474283866549106,x=4.2486291255827 -color=red,shape=triangle,flag=0,i=5600,u=0.07797109331227103,v=0.12591557044120283,w=0.5024758798915459,x=5.585644003164902 -color=red,shape=square,flag=1,i=5601,u=0.3017407916254773,v=0.5794153190107305,w=0.4830100356390934,x=4.847727902017804 -color=blue,shape=square,flag=0,i=5610,u=0.6476099626265888,v=0.3834687832822731,w=0.4751568289902658,x=5.366291881237096 -color=red,shape=circle,flag=0,i=5611,u=0.9643530645989437,v=1.0128772868829967,w=0.4874941916721536,x=5.052491438671869 -color=yellow,shape=triangle,flag=1,i=5618,u=0.12235316022283638,v=0.4062772698823153,w=0.5027163696981481,x=4.423032864371648 -color=yellow,shape=circle,flag=1,i=5635,u=0.7490077148568529,v=0.7887882825548689,w=0.5174941753119322,x=4.9735430773511125 -color=green,shape=square,flag=1,i=5648,u=0.6838383400874987,v=0.2065873409297414,w=0.5138513557269427,x=3.7361689649122503 -color=blue,shape=square,flag=1,i=5657,u=0.7395822361624869,v=0.9376531852764505,w=0.46766201307943756,x=5.341558504004095 -color=red,shape=square,flag=0,i=5668,u=0.8118197610201682,v=0.12148743503276194,w=0.4782662920940548,x=6.477714121948768 -color=red,shape=square,flag=0,i=5672,u=0.8577133103095783,v=0.7110724383796043,w=0.47898401623391135,x=5.0500040117472755 -color=blue,shape=square,flag=0,i=5678,u=0.7218754013507698,v=0.884202554239838,w=0.4660259351946551,x=4.910713238335364 -color=red,shape=circle,flag=0,i=5682,u=0.46042761654160147,v=0.47440910925034985,w=0.48351736581602117,x=5.647426237831731 -color=green,shape=square,flag=1,i=5690,u=0.8118964231322414,v=0.22962574782744727,w=0.5107410649539317,x=4.651607685056169 -color=red,shape=square,flag=0,i=5698,u=0.6938931630037275,v=0.6955654236637328,w=0.48060441995288344,x=5.5283181070253065 -color=blue,shape=triangle,flag=1,i=5709,u=0.8790850372131346,v=0.85693275870204,w=0.5112304639110724,x=4.6089973865766956 -color=blue,shape=square,flag=1,i=5711,u=0.4980940550308919,v=0.3913209484276381,w=0.46779237871931606,x=6.5640792204993055 -color=yellow,shape=triangle,flag=1,i=5724,u=0.3355201655102771,v=0.7875312279106407,w=0.5028630279753463,x=6.41793674963149 -color=red,shape=square,flag=0,i=5730,u=0.5308515738786018,v=0.6762180403418967,w=0.47230059961154747,x=5.884364887449301 -color=blue,shape=circle,flag=0,i=5732,u=0.7934966072767009,v=0.011915016935549416,w=0.4418438302612928,x=6.5870020212659 -color=yellow,shape=square,flag=1,i=5734,u=0.8216755963110223,v=0.32350186713160345,w=0.5096510341494233,x=5.04995327371086 -color=red,shape=square,flag=0,i=5735,u=0.8865257836119743,v=0.6568982219919527,w=0.47174683876983087,x=5.369661169499781 -color=red,shape=triangle,flag=0,i=5739,u=0.28418616477886516,v=0.31409894322127174,w=0.5099767891546801,x=3.1827809857154725 -color=purple,shape=triangle,flag=0,i=5743,u=0.8627435828503356,v=0.6790570779555195,w=0.5286883405329251,x=4.754338532998504 -color=purple,shape=triangle,flag=1,i=5750,u=0.6540653802155625,v=0.8186032359193669,w=0.5278484072555955,x=3.968262979705669 -color=red,shape=triangle,flag=0,i=5763,u=0.8450436608844077,v=0.10860683564259188,w=0.5026580958498666,x=7.796656873978652 -color=red,shape=square,flag=1,i=5788,u=0.611091459831367,v=0.5449393388841275,w=0.4679003050764299,x=4.106164774064709 -color=red,shape=triangle,flag=1,i=5789,u=0.4537231592487151,v=0.05721358943032817,w=0.5073773380830467,x=4.2548297109158755 -color=red,shape=triangle,flag=0,i=5796,u=0.3325017179321761,v=0.9355862419367229,w=0.5112452901455476,x=4.976944510801324 -color=red,shape=circle,flag=0,i=5798,u=0.3161413192064507,v=0.2521014769803568,w=0.48972564953736775,x=4.1808585696670635 -color=blue,shape=circle,flag=0,i=5808,u=0.08131434372877844,v=0.7568649526045701,w=0.4462356099333533,x=5.513038754055881 -color=purple,shape=square,flag=1,i=5812,u=0.27511086390645434,v=0.407852391499247,w=0.520913309175292,x=6.635478279979536 -color=red,shape=circle,flag=0,i=5832,u=0.8889082016909575,v=0.9284038397038602,w=0.4942377200158909,x=3.936993288716035 -color=red,shape=square,flag=1,i=5842,u=0.2722988818432909,v=0.9498281949058748,w=0.4722977279397903,x=4.439007057463928 -color=red,shape=triangle,flag=0,i=5848,u=0.3686940082937461,v=0.2297986252753741,w=0.5135935212176223,x=4.877654246034681 -color=red,shape=triangle,flag=0,i=5849,u=0.1290210881088124,v=0.18520386905638975,w=0.5121461716402985,x=4.199815038098288 -color=red,shape=triangle,flag=1,i=5857,u=0.4519386142542523,v=0.7416817153691634,w=0.5068721954035537,x=2.7275712308424596 -color=red,shape=square,flag=0,i=5862,u=0.7157432573561867,v=0.7711157084297541,w=0.4730843646783483,x=4.151936833436429 -color=green,shape=circle,flag=0,i=5873,u=0.04944884812182149,v=0.7470049810374516,w=0.5132844272554256,x=7.36620286480328 -color=red,shape=triangle,flag=0,i=5883,u=0.5197236842627677,v=0.29325305698917603,w=0.49572671390448886,x=3.721153660510287 -color=yellow,shape=square,flag=1,i=5884,u=0.7649881866811434,v=0.970089274891161,w=0.5119786019607768,x=6.3555380379204145 -color=red,shape=circle,flag=0,i=5893,u=0.20615480760926808,v=0.14809836210373095,w=0.48270096968249926,x=6.177100090466365 -color=blue,shape=circle,flag=1,i=5901,u=0.7128337758915861,v=0.19150609105626704,w=0.4484209547990318,x=5.2000724629786275 -color=yellow,shape=triangle,flag=1,i=5911,u=0.42713138741103307,v=0.9696749783494829,w=0.4966670447335158,x=4.594677341096767 -color=red,shape=square,flag=0,i=5914,u=0.015123831588062964,v=0.16437153054635523,w=0.47223855886451477,x=5.267943515687804 -color=yellow,shape=square,flag=1,i=5925,u=0.3074495053049401,v=0.1895498704682077,w=0.5109241596636047,x=5.095299333882013 -color=blue,shape=square,flag=0,i=5933,u=0.51372249375865,v=0.5302858830176099,w=0.467689686816679,x=4.343967250123015 -color=blue,shape=triangle,flag=1,i=5969,u=0.17018060918505862,v=0.6132742704675529,w=0.5190720082234903,x=5.136739287366672 -color=red,shape=square,flag=0,i=5972,u=0.16028439108892767,v=0.7367391158511573,w=0.47720696945018315,x=7.042454670048072 -color=blue,shape=square,flag=1,i=5983,u=0.4112854332720899,v=0.8606792632824589,w=0.45768661179118436,x=6.214699633936114 -color=blue,shape=circle,flag=0,i=6023,u=0.017452962819985207,v=0.4070792408713856,w=0.45031984575502004,x=5.546776432889101 -color=red,shape=triangle,flag=0,i=6039,u=0.1436103074694539,v=0.34758216175700596,w=0.5106409670616571,x=5.088731339588974 -color=yellow,shape=circle,flag=1,i=6057,u=0.16275436095280493,v=0.7557647104557702,w=0.5050647566343319,x=4.677738410772791 -color=red,shape=circle,flag=0,i=6072,u=0.18020657415479036,v=0.10338573693208912,w=0.4824549330209736,x=4.7142476735582415 -color=purple,shape=square,flag=0,i=6076,u=0.32333551253153237,v=0.6565898162212596,w=0.5120503557378895,x=6.23321982454248 -color=purple,shape=square,flag=0,i=6081,u=0.31289907616388024,v=0.04822727790824588,w=0.5116817686988475,x=3.472623839730995 -color=purple,shape=triangle,flag=0,i=6099,u=0.9263235207487328,v=0.3884013218923913,w=0.5264041034546705,x=5.902532750266108 -color=blue,shape=square,flag=0,i=6109,u=0.27619166141967133,v=0.7118807565361399,w=0.45861518520038863,x=5.60784981030194 -color=red,shape=circle,flag=0,i=6113,u=0.22466430390726955,v=0.22771633736376914,w=0.49115476733211044,x=5.350244646149289 -color=red,shape=triangle,flag=0,i=6120,u=0.09635508035816032,v=0.026480199263408277,w=0.5335618690609663,x=5.228925126919848 -color=purple,shape=triangle,flag=0,i=6121,u=0.711562686476677,v=0.021610513173994317,w=0.5264462019792321,x=4.360769678132107 -color=purple,shape=triangle,flag=0,i=6162,u=0.9811720181036256,v=0.24537773815477126,w=0.5235712752538283,x=4.188763507197692 -color=red,shape=triangle,flag=1,i=6164,u=0.4884035800730596,v=0.4768145570774246,w=0.5370106211123385,x=4.355237008199155 -color=red,shape=triangle,flag=0,i=6166,u=0.9208181412134825,v=0.6027093372104054,w=0.5373932186312109,x=6.7880412292180035 -color=red,shape=triangle,flag=0,i=6168,u=0.6128294188136673,v=0.5662147536804297,w=0.5344176640252708,x=5.14474489489931 -color=red,shape=triangle,flag=1,i=6190,u=0.22193208158731081,v=0.583689588954846,w=0.5321425396208453,x=4.75547199780209 -color=blue,shape=circle,flag=1,i=6192,u=0.9617233280536962,v=0.0804036772290313,w=0.45466761358987057,x=4.766413914412179 -color=purple,shape=square,flag=0,i=6193,u=0.6925033853187198,v=0.4157324223786859,w=0.5225467116843022,x=3.203586388298083 -color=red,shape=square,flag=0,i=6200,u=0.171976928845461,v=0.1880835239752341,w=0.4936589185590948,x=5.836676241592183 -color=blue,shape=circle,flag=0,i=6206,u=0.6137995201817447,v=0.2914163889198288,w=0.4563692685949176,x=5.408699326357687 -color=purple,shape=circle,flag=0,i=6230,u=0.8995957974417165,v=0.838557554387364,w=0.49078343561983623,x=4.102062839862341 -color=blue,shape=square,flag=0,i=6233,u=0.7733534639419862,v=0.3573142412944096,w=0.4508620621062044,x=3.584941797575739 -color=red,shape=triangle,flag=0,i=6244,u=0.6325881339214032,v=0.5265910784732831,w=0.5267238734444296,x=6.6682420090850165 -color=purple,shape=circle,flag=0,i=6258,u=0.10367159942454274,v=0.43360378760767704,w=0.48597791924991773,x=5.788435808699311 -color=red,shape=square,flag=0,i=6270,u=0.6811227642195069,v=0.1479417361133034,w=0.4964458724418254,x=6.471935001457158 -color=red,shape=square,flag=1,i=6271,u=0.8845060174779521,v=0.594898831199482,w=0.49589169608087036,x=3.697088354944317 -color=blue,shape=square,flag=1,i=6280,u=0.6292854031641862,v=0.3505203031399461,w=0.4457801715897031,x=6.0940974118900435 -color=red,shape=square,flag=1,i=6300,u=0.4698259174276119,v=0.08680271714111099,w=0.4844979838413245,x=5.317674542168804 -color=red,shape=circle,flag=0,i=6304,u=0.9960747439102614,v=0.995262085389914,w=0.49210886331463977,x=5.985586009524911 -color=yellow,shape=triangle,flag=1,i=6307,u=0.8021056357273373,v=0.3550400989030522,w=0.4916276078449299,x=3.842965444936793 -color=green,shape=square,flag=1,i=6308,u=0.00048750676198217047,v=0.07350139064804029,w=0.5284521586313244,x=5.18296486436796 -color=red,shape=circle,flag=0,i=6312,u=0.13141301290886298,v=0.20819524558149588,w=0.4884349725677271,x=4.229487941982128 -color=red,shape=square,flag=0,i=6313,u=0.42004370502294874,v=0.5439573774055705,w=0.4890664637267789,x=6.069980788966126 -color=green,shape=triangle,flag=0,i=6318,u=0.23924495898799913,v=0.12744748462772704,w=0.5021828322382919,x=2.2957031433250514 -color=green,shape=circle,flag=0,i=6321,u=0.5856312729369325,v=0.6258020253571867,w=0.5016908279693554,x=5.809486355056517 -color=green,shape=square,flag=0,i=6343,u=0.27971643422586945,v=0.5148514093481248,w=0.5270090033316781,x=4.79676680029431 -color=green,shape=square,flag=0,i=6361,u=0.03363417584524808,v=0.5230059438871357,w=0.5287871548658247,x=5.687660694577732 -color=yellow,shape=square,flag=1,i=6388,u=0.3956375502429853,v=0.5935536617442623,w=0.5200741756209883,x=5.688808730969668 -color=red,shape=square,flag=1,i=6403,u=0.9417127579120319,v=0.5482150962847542,w=0.49747770748220865,x=5.103437297450152 -color=yellow,shape=circle,flag=1,i=6410,u=0.6644019692587911,v=0.5206303554834582,w=0.5256801790797414,x=5.242268650760439 -color=red,shape=circle,flag=1,i=6413,u=0.8685423617714676,v=0.8340407401130161,w=0.49941229305983253,x=6.623384640074739 -color=purple,shape=square,flag=0,i=6418,u=0.42378426216713116,v=0.21109387357250076,w=0.5147444221739821,x=5.8115636706845315 -color=red,shape=circle,flag=1,i=6430,u=0.22822478239561694,v=0.1979578968696555,w=0.5017015040441812,x=4.856038715443364 -color=blue,shape=triangle,flag=0,i=6431,u=0.035967834871633575,v=0.8826006501795345,w=0.5150464995633706,x=4.925641684269677 -color=green,shape=square,flag=0,i=6439,u=0.08849875224375359,v=0.6151865632680716,w=0.5207738636317834,x=5.472138215470408 -color=red,shape=square,flag=0,i=6454,u=0.8258633336815364,v=0.013536288520049955,w=0.49459776015373735,x=5.932338900020647 -color=red,shape=circle,flag=0,i=6459,u=0.9137091587098579,v=0.855588819983653,w=0.49888384748171133,x=5.830598036770098 -color=purple,shape=triangle,flag=0,i=6465,u=0.06247102989973785,v=0.5827509439740209,w=0.5245338321695424,x=4.196873383518774 -color=red,shape=circle,flag=0,i=6467,u=0.1199009593400917,v=0.1009342030991583,w=0.49428494602626355,x=4.602250052040592 -color=red,shape=circle,flag=0,i=6503,u=0.6998197031470909,v=0.6085957418813281,w=0.4953130273408016,x=4.645148592033905 -color=purple,shape=square,flag=0,i=6510,u=0.2822486415087655,v=0.9358660605865411,w=0.5081062978301883,x=7.230150974387606 -color=orange,shape=square,flag=0,i=6520,u=0.48679433237460934,v=0.43918945290527467,w=0.3723492312534282,x=5.3166346756671805 -color=blue,shape=triangle,flag=1,i=6524,u=0.42584599371114706,v=0.14938791233616222,w=0.5198447800578521,x=2.541732388925818 -color=blue,shape=circle,flag=0,i=6528,u=0.2133861214884899,v=0.2977412570644107,w=0.4662639803680262,x=3.467504298314753 -color=green,shape=triangle,flag=1,i=6529,u=0.1455227488931624,v=0.36600599340236795,w=0.4992332444785052,x=5.755984900287618 -color=red,shape=square,flag=0,i=6530,u=0.09539708205200137,v=0.5515665649713346,w=0.49071329226843785,x=6.2996393162813 -color=red,shape=triangle,flag=0,i=6539,u=0.5204664151681225,v=0.5070554408470832,w=0.5288833595190643,x=4.605395283680147 -color=purple,shape=triangle,flag=0,i=6542,u=0.9502790468241479,v=0.3357785146212582,w=0.5300160109397024,x=4.845176059365532 -color=yellow,shape=triangle,flag=1,i=6549,u=0.5771424149028278,v=0.5660412879806254,w=0.48483747163386864,x=2.5602532101362816 -color=purple,shape=square,flag=0,i=6563,u=0.7687466675905879,v=0.11722875109550102,w=0.5032611834861493,x=5.483909341325606 -color=red,shape=square,flag=0,i=6566,u=0.6741887634246249,v=0.15380339776136598,w=0.496319773686971,x=6.324302004246204 -color=red,shape=circle,flag=0,i=6609,u=0.3969565461680814,v=0.4511785951116354,w=0.5079426651093598,x=3.955969992231747 -color=purple,shape=triangle,flag=0,i=6611,u=0.4364083577087394,v=0.5045708384576747,w=0.5259459100161943,x=6.4426713973305665 -color=yellow,shape=triangle,flag=1,i=6620,u=0.6235993900623629,v=0.017917816715242063,w=0.49115228576139447,x=4.301389523013513 -color=red,shape=triangle,flag=1,i=6627,u=0.6856650689043784,v=0.63284643610226,w=0.5229115051728296,x=4.027530674760179 -color=green,shape=square,flag=0,i=6628,u=0.26295856712509924,v=0.2541337868869713,w=0.51827868923942,x=4.771988180341128 -color=red,shape=triangle,flag=1,i=6674,u=0.4177794845961972,v=0.476812791975578,w=0.5208393036798933,x=6.34351864080011 -color=blue,shape=triangle,flag=0,i=6676,u=0.7399933240054255,v=0.18293984789475248,w=0.5070224997673431,x=3.2070714538196015 -color=red,shape=square,flag=1,i=6701,u=0.34900953595354445,v=0.786080905493119,w=0.4961481792670415,x=2.852901749175578 -color=blue,shape=square,flag=1,i=6735,u=0.34034923900641,v=0.4115739309705059,w=0.45823308139114505,x=5.734928311390195 -color=yellow,shape=square,flag=1,i=6743,u=0.14675290922237116,v=0.20091568687579642,w=0.5143754328790378,x=5.055132311670772 -color=purple,shape=square,flag=1,i=6748,u=0.9553096124365628,v=0.49455375195562323,w=0.5197055497829153,x=5.376853905348537 -color=red,shape=triangle,flag=0,i=6756,u=0.6235947816770093,v=0.20560818487527288,w=0.5154785032231411,x=7.147889688914161 -color=red,shape=circle,flag=0,i=6759,u=0.39608610318639914,v=0.37939129752682976,w=0.5085387583420787,x=5.889957877085802 -color=purple,shape=circle,flag=0,i=6762,u=0.6049710532803669,v=0.490699224287502,w=0.4831891128310867,x=6.781366352382849 -color=green,shape=square,flag=0,i=6774,u=0.92036166370313,v=0.45844868918735504,w=0.5095426944728964,x=4.426988475486271 -color=red,shape=triangle,flag=0,i=6779,u=0.4056134300247821,v=0.8598247876181099,w=0.5088542515244571,x=6.653739825614015 -color=purple,shape=square,flag=0,i=6829,u=0.03888002324033257,v=0.7735660118411852,w=0.5211732631929624,x=4.2782931780784645 -color=blue,shape=triangle,flag=1,i=6832,u=0.6432597824598862,v=0.14901262084077693,w=0.5117564553618225,x=5.1406747337835546 -color=red,shape=circle,flag=0,i=6856,u=0.7932880491788271,v=0.8880971670944571,w=0.5031491081679628,x=4.509254962364701 -color=blue,shape=circle,flag=0,i=6869,u=0.25926388548013757,v=0.5697135282840454,w=0.4726970793976213,x=5.823127118388232 -color=yellow,shape=circle,flag=1,i=6890,u=0.022797909771872238,v=0.015614560644500175,w=0.5270780603581403,x=5.648996285991914 -color=blue,shape=triangle,flag=1,i=6898,u=0.11217428855810008,v=0.4162207461595341,w=0.5160423555935578,x=6.608737264826998 -color=green,shape=triangle,flag=1,i=6907,u=0.010595695908571012,v=0.06672239540002456,w=0.5108823870721609,x=4.071499678257095 -color=red,shape=circle,flag=0,i=6913,u=0.9176421729631826,v=0.8671864605213498,w=0.5098694331812486,x=5.564145541614013 -color=green,shape=triangle,flag=0,i=6942,u=0.951353895111777,v=0.01940942447103189,w=0.5109372851529531,x=4.923770424330399 -color=red,shape=circle,flag=1,i=6946,u=0.17359793905549392,v=0.17694790026491025,w=0.5126404694681714,x=6.061380864187323 -color=red,shape=circle,flag=0,i=6959,u=0.4218384175706841,v=0.34221928519084654,w=0.5208933241380524,x=5.868278303145508 -color=yellow,shape=square,flag=1,i=6993,u=0.5888959381485874,v=0.5797886860288838,w=0.5032120123089436,x=5.720813055528566 -color=yellow,shape=triangle,flag=1,i=6999,u=0.10488472811825678,v=0.5453707311201544,w=0.48771992710878564,x=6.5328921635204695 -color=green,shape=triangle,flag=1,i=7005,u=0.5781148751093989,v=0.6467442755925816,w=0.5002779723851982,x=4.408524553588991 -color=orange,shape=triangle,flag=0,i=7014,u=0.530788020110947,v=0.8463845303921943,w=0.7303882931571825,x=3.8499231205827744 -color=blue,shape=circle,flag=1,i=7021,u=0.4365880011170178,v=0.434228648324826,w=0.47027519375091686,x=4.800975965283767 -color=red,shape=square,flag=1,i=7024,u=0.49813374365242147,v=0.6191884040469128,w=0.4977393571863557,x=5.161534078410575 -color=purple,shape=square,flag=0,i=7045,u=0.697849039991967,v=0.06509252694950973,w=0.5222502487041877,x=4.060077660065311 -color=red,shape=square,flag=0,i=7047,u=0.9922157384754378,v=0.7222771324391467,w=0.48950221269029337,x=4.833417715084441 -color=purple,shape=square,flag=0,i=7048,u=0.6192278205835859,v=0.9195446956015411,w=0.5239561630151743,x=5.590886995908273 -color=yellow,shape=circle,flag=1,i=7050,u=0.8748989765505933,v=0.3447337515145761,w=0.5239204874713691,x=4.976665489675917 -color=red,shape=square,flag=1,i=7057,u=0.8886294118927316,v=0.05289470473768887,w=0.49871376027982056,x=5.132911523058775 -color=green,shape=triangle,flag=0,i=7065,u=0.098835939441553,v=0.15869889009449,w=0.5019566452657964,x=5.030364056162301 -color=red,shape=triangle,flag=0,i=7088,u=0.07595365785052699,v=0.33779382197618024,w=0.4848749687726861,x=4.374322647911401 -color=green,shape=circle,flag=0,i=7095,u=0.6247388408475909,v=0.9991523123256862,w=0.5112854921650918,x=1.7767395585015777 -color=yellow,shape=square,flag=1,i=7117,u=0.5772905510061195,v=0.2704694133924349,w=0.5066253767169198,x=4.189381943614731 -color=purple,shape=circle,flag=0,i=7136,u=0.2894791697512308,v=0.033051608871318194,w=0.492357853325225,x=3.97337756371869 -color=red,shape=square,flag=0,i=7144,u=0.025821846900757284,v=0.6022995464291134,w=0.4988985530813158,x=5.988476968485563 -color=blue,shape=square,flag=0,i=7150,u=0.5414584323905408,v=0.3830518548789039,w=0.45250406632977,x=3.9732956639691976 -color=purple,shape=circle,flag=0,i=7165,u=0.944217921762593,v=0.7379177249833838,w=0.4961857450966019,x=5.5420971545399595 -color=red,shape=triangle,flag=0,i=7172,u=0.24583453718523574,v=0.7527167474295307,w=0.49804635350617144,x=3.5496947568477686 -color=red,shape=circle,flag=0,i=7175,u=0.9479991716154256,v=1.0369161740262645,w=0.5058924082666929,x=3.736106391140407 -color=red,shape=square,flag=0,i=7196,u=0.1380874722502473,v=0.4808811847111706,w=0.4873049442005348,x=5.034824189616505 -color=blue,shape=square,flag=1,i=7199,u=0.2846357685675721,v=0.034308656536918836,w=0.4641984709812777,x=3.707273212888065 -color=purple,shape=triangle,flag=0,i=7212,u=0.4769912438446541,v=0.6974938580512576,w=0.5149177854034025,x=6.164832566560516 -color=yellow,shape=square,flag=1,i=7214,u=0.1548652026087668,v=0.5135568065293765,w=0.504486407453846,x=4.898030794903259 -color=red,shape=circle,flag=1,i=7215,u=0.8981919972663798,v=0.9335974654269985,w=0.5133264530859194,x=6.868209848760329 -color=green,shape=circle,flag=1,i=7223,u=0.6563049975968109,v=0.6379310552032911,w=0.5044189452720197,x=5.190778431272816 -color=red,shape=triangle,flag=0,i=7241,u=0.5102432961837956,v=0.8032601218913767,w=0.49959153976209736,x=5.889797855839329 -color=yellow,shape=circle,flag=1,i=7274,u=0.17064346403614084,v=0.6202252388474442,w=0.5174202251436207,x=4.961985406978 -color=blue,shape=triangle,flag=0,i=7279,u=0.23297868396434585,v=0.3273870800244896,w=0.5193758253255788,x=5.590432538345541 -color=green,shape=square,flag=0,i=7284,u=0.5826889304785134,v=0.4379875315613875,w=0.5123754896546877,x=6.823585827692646 -color=purple,shape=square,flag=0,i=7295,u=0.22449385427756263,v=0.3971284686550203,w=0.5060640328120517,x=6.910704217269335 -color=yellow,shape=triangle,flag=1,i=7308,u=0.8729845274981871,v=0.9405993007589881,w=0.4675975411246204,x=6.366380328584516 -color=red,shape=circle,flag=0,i=7311,u=0.4760159792216694,v=0.4539394533724592,w=0.5165497252161653,x=5.816294555984473 -color=purple,shape=square,flag=0,i=7313,u=0.3379494486558744,v=0.09024371495642125,w=0.5061550180767934,x=5.991137830729246 -color=yellow,shape=triangle,flag=1,i=7328,u=0.1792515767605839,v=0.6834184841983879,w=0.4724870771907172,x=6.992102798937367 -color=red,shape=circle,flag=0,i=7350,u=0.48674138881981655,v=0.5601685839629958,w=0.5215475885174312,x=4.845824511086588 -color=purple,shape=triangle,flag=0,i=7354,u=0.4518325021148949,v=0.9606740777959419,w=0.5020602076054972,x=5.0034495885706605 -color=green,shape=square,flag=0,i=7356,u=0.3677938789235593,v=0.5854902724492276,w=0.5180955404184138,x=6.082752945575091 -color=green,shape=circle,flag=0,i=7357,u=0.7472639566340794,v=0.9553679229462696,w=0.49650949457838633,x=3.963092622630164 -color=purple,shape=circle,flag=0,i=7359,u=0.40681782963444224,v=0.0655781326343009,w=0.5018001474767321,x=5.60497435091079 -color=red,shape=square,flag=0,i=7364,u=0.3481359432339536,v=0.17526327279056786,w=0.5017005211923841,x=6.863449538188116 -color=blue,shape=circle,flag=0,i=7376,u=0.5949976410326543,v=0.5191497225617425,w=0.4742427379869392,x=4.600043609638491 -color=blue,shape=square,flag=1,i=7383,u=0.3349581692171726,v=0.861606342284434,w=0.48260402600288677,x=5.197650156172798 -color=blue,shape=square,flag=0,i=7389,u=0.5508253156887805,v=0.7316077037730353,w=0.48251076734931897,x=3.0994689012789327 -color=purple,shape=square,flag=0,i=7419,u=0.7411078076522843,v=0.9347041368233332,w=0.5036254975884529,x=5.3347625898825415 -color=red,shape=triangle,flag=0,i=7430,u=0.22265578570345146,v=0.8235503097171234,w=0.501220026150789,x=4.896095901427996 -color=red,shape=triangle,flag=0,i=7447,u=0.5131460922798405,v=0.7113342782993815,w=0.49563286458819356,x=5.631574318638033 -color=red,shape=circle,flag=1,i=7452,u=0.332932610408742,v=0.3813424312656466,w=0.519913787740515,x=3.3437769090221057 -color=red,shape=triangle,flag=0,i=7461,u=0.9156378136581979,v=0.35497814831564534,w=0.49632741905136923,x=3.233348607800034 -color=red,shape=square,flag=0,i=7479,u=0.9088123146720241,v=0.6212620928222382,w=0.5042444557485127,x=5.770947384921745 -color=red,shape=circle,flag=0,i=7502,u=0.7444658886188185,v=0.6578015958365437,w=0.5134977908050689,x=3.240995197922807 -color=red,shape=circle,flag=1,i=7513,u=0.17183705995865772,v=0.14047879616986061,w=0.5123300518037209,x=4.952874895112429 -color=purple,shape=square,flag=0,i=7517,u=0.9467534335912478,v=0.1383355176433988,w=0.5026801409599071,x=6.465539844355604 -color=green,shape=triangle,flag=0,i=7523,u=0.5384462427394077,v=0.9930323232170654,w=0.49414215504572345,x=5.5606351593563055 -color=purple,shape=triangle,flag=0,i=7536,u=0.564458104142526,v=0.9317193264811368,w=0.4991679653893298,x=5.483001394288664 -color=green,shape=triangle,flag=0,i=7575,u=0.5267857263281721,v=0.3919466692466633,w=0.49252306504100196,x=6.058421712118855 -color=red,shape=triangle,flag=0,i=7605,u=0.8185598658994307,v=0.7344138900912033,w=0.508601979318828,x=6.477593123893033 -color=red,shape=square,flag=0,i=7634,u=0.7634321528985017,v=0.27486141316393153,w=0.5095201580987395,x=4.763931691692838 -color=red,shape=circle,flag=0,i=7636,u=0.5283769818182991,v=0.5724547726373208,w=0.5099196992951244,x=5.644459292514372 -color=red,shape=triangle,flag=1,i=7638,u=0.472595692933909,v=0.8931393410060183,w=0.5087010728151856,x=4.909859303511353 -color=red,shape=triangle,flag=1,i=7641,u=0.7635415733085489,v=0.7462246374962465,w=0.5104912718214487,x=2.938631427654759 -color=yellow,shape=triangle,flag=1,i=7643,u=0.5013903772817212,v=0.523283296143844,w=0.4929001286588054,x=6.81742771665317 -color=red,shape=square,flag=0,i=7660,u=0.5256349898180557,v=0.621653350604051,w=0.502096359348107,x=4.316699090916923 -color=red,shape=square,flag=1,i=7679,u=0.9260037167179073,v=0.13187092620676266,w=0.5083642379031688,x=4.46724883195843 -color=yellow,shape=square,flag=1,i=7692,u=0.7697510501379543,v=0.2567192652387792,w=0.5139696033889535,x=5.024139017937064 -color=red,shape=triangle,flag=0,i=7739,u=0.2633957776821456,v=0.9986998232584184,w=0.5166338858250329,x=4.475836835053049 -color=purple,shape=circle,flag=0,i=7750,u=0.19743798656579858,v=0.9719825842433248,w=0.4970796576327619,x=5.34154663754632 -color=red,shape=triangle,flag=0,i=7769,u=0.8198240155867028,v=0.1744516317206819,w=0.5164417844783209,x=7.665143760643453 -color=red,shape=circle,flag=1,i=7774,u=0.494268123163344,v=0.550910576446404,w=0.5077771206852292,x=6.962088321415898 -color=red,shape=square,flag=0,i=7777,u=0.9239648455079299,v=0.41693097233335064,w=0.4987475451302378,x=5.222198580651834 -color=purple,shape=square,flag=0,i=7786,u=0.1266160089270557,v=0.6749772289150633,w=0.5194603537327731,x=4.4502717072926075 -color=red,shape=square,flag=1,i=7803,u=0.793299436299623,v=0.8980969079462682,w=0.4822052646250561,x=5.546280193043419 -color=orange,shape=square,flag=1,i=7812,u=0.6641031494716884,v=0.4761904430746673,w=0.37672714168509386,x=2.996754419703491 -color=red,shape=square,flag=0,i=7813,u=0.9693818010668185,v=0.17406161729485248,w=0.48349569142111404,x=4.218512665691812 -color=green,shape=square,flag=0,i=7816,u=0.5044792725006048,v=0.4543829619916687,w=0.50932367205479,x=5.021235036393633 -color=yellow,shape=circle,flag=1,i=7819,u=0.12899615314500912,v=0.6742432137522391,w=0.5153035161069889,x=5.099233475282406 -color=red,shape=triangle,flag=1,i=7821,u=0.22430958056208294,v=0.45414801122065074,w=0.5234512169270004,x=4.274817353323278 -color=yellow,shape=triangle,flag=1,i=7823,u=0.8351724975473552,v=0.8305911376282958,w=0.5012639322423112,x=4.555232102203505 -color=blue,shape=square,flag=1,i=7825,u=0.20457489799150097,v=0.330778086672915,w=0.49055529747641874,x=4.981354523652595 -color=red,shape=triangle,flag=1,i=7829,u=0.3780586679727824,v=0.11042249907618684,w=0.5266492101068199,x=3.3635598306816212 -color=blue,shape=square,flag=1,i=7871,u=0.20257433596117635,v=0.7014598200673442,w=0.4903853568506331,x=4.00150176969896 -color=yellow,shape=triangle,flag=0,i=7874,u=0.7694964962813713,v=0.8481074947826541,w=0.5038581322444717,x=4.521973140661328 -color=purple,shape=circle,flag=0,i=7877,u=0.7264020235543306,v=0.616535652765936,w=0.49921334870186695,x=3.657073127268083 -color=red,shape=triangle,flag=0,i=7879,u=0.21834468318651634,v=0.39504936238956534,w=0.5281818881512426,x=3.898015300613191 -color=yellow,shape=circle,flag=1,i=7883,u=0.5742281300422394,v=0.7466221221826144,w=0.5222306209495245,x=4.569119357199804 -color=yellow,shape=triangle,flag=1,i=7886,u=0.5712380210568203,v=0.18979724377735452,w=0.506235609638394,x=5.70081134859861 -color=red,shape=circle,flag=0,i=7901,u=0.8807662999840191,v=0.891986759360848,w=0.5008797751056804,x=4.410678999047792 -color=green,shape=circle,flag=0,i=7904,u=0.6094063312934279,v=0.6698227962073791,w=0.4950993306940467,x=5.368755632790196 -color=red,shape=circle,flag=0,i=7905,u=0.9565533346212595,v=0.9904166259543984,w=0.5009803717283337,x=2.6418791288018317 -color=purple,shape=triangle,flag=0,i=7906,u=0.5099089725012095,v=0.9169139891019003,w=0.492833397732509,x=5.944109942271144 -color=green,shape=square,flag=0,i=7908,u=0.01506263540829611,v=0.2018815596654685,w=0.5103695699096816,x=4.223336764925055 -color=green,shape=circle,flag=0,i=7920,u=0.32127262288190883,v=0.3153027889655263,w=0.49949005571269994,x=4.793467059363383 -color=green,shape=circle,flag=0,i=7942,u=0.8801917177211557,v=0.9588604800847801,w=0.5042380823779957,x=3.3129293827158492 -color=yellow,shape=square,flag=1,i=7947,u=0.8812869784490356,v=0.9424539077564031,w=0.49902050126337094,x=4.694427305565892 -color=red,shape=square,flag=0,i=7952,u=0.5450596245553117,v=0.43027043400839204,w=0.4915413614845622,x=5.745446273942569 -color=orange,shape=square,flag=1,i=7959,u=0.2728113115244907,v=0.09813669204082831,w=0.3760742207757139,x=4.083646773701023 -color=green,shape=square,flag=0,i=7964,u=0.7941870563098401,v=0.2722817307228691,w=0.5029107572438085,x=5.4586179628470575 -color=red,shape=circle,flag=1,i=7977,u=0.11576343991948446,v=0.030160808455117052,w=0.5006117810191338,x=4.335867196315032 -color=yellow,shape=triangle,flag=1,i=7992,u=0.4877340178155548,v=0.9836298301233908,w=0.5063368828198392,x=7.497694316500325 -color=green,shape=circle,flag=1,i=8002,u=0.7072040887079999,v=0.653683735600399,w=0.5068944506247137,x=6.1409965547445955 -color=red,shape=triangle,flag=0,i=8004,u=0.0237327215667964,v=0.2591149124409372,w=0.533662500226452,x=4.026635846320427 -color=red,shape=square,flag=0,i=8008,u=0.8645220057901577,v=0.0466465560982543,w=0.4873985239030229,x=3.2070523626683993 -color=purple,shape=triangle,flag=0,i=8013,u=0.9677055220569556,v=0.1048748996521709,w=0.4979933363874665,x=4.026033842041724 -color=red,shape=triangle,flag=0,i=8040,u=0.2831848707319933,v=0.32131377330244926,w=0.5314136187817202,x=6.023647805153671 -color=blue,shape=square,flag=0,i=8062,u=0.3562517734051851,v=0.34719121809398723,w=0.4881963142395454,x=5.1376583368523745 -color=purple,shape=square,flag=0,i=8070,u=0.47681180128054845,v=0.9285748572772208,w=0.5135919940402126,x=6.253030888985303 -color=orange,shape=triangle,flag=1,i=8076,u=0.2299259478227308,v=0.6434601121853303,w=0.7116984694194914,x=4.631821964030653 -color=purple,shape=square,flag=0,i=8079,u=0.1715726120373201,v=0.47674256289856254,w=0.5111647189018764,x=5.481772374108111 -color=red,shape=square,flag=1,i=8093,u=0.9007445187355522,v=0.20800914937635862,w=0.49527195917301153,x=4.772464644511669 -color=red,shape=square,flag=0,i=8101,u=0.4150341839963011,v=0.4090264939836453,w=0.49796865355519715,x=5.266477636811369 -color=red,shape=triangle,flag=0,i=8113,u=0.803340198671731,v=0.3210179865614411,w=0.5173700325534561,x=6.255061981639997 -color=purple,shape=square,flag=0,i=8115,u=0.2990878701081897,v=0.6921656633697894,w=0.5064949137741244,x=3.226321942078377 -color=red,shape=square,flag=1,i=8119,u=0.27061069896386114,v=0.7785388652652188,w=0.4883358026633603,x=4.114220994567091 -color=yellow,shape=circle,flag=1,i=8123,u=0.14138299958981604,v=0.585726662205711,w=0.5321222049364318,x=3.177123105850282 -color=red,shape=circle,flag=1,i=8186,u=0.8168561888683831,v=0.7520909676391622,w=0.5191409563787748,x=4.717467646706537 -color=red,shape=triangle,flag=0,i=8189,u=0.31233982180076203,v=0.29958508985032184,w=0.5249803596062355,x=4.995393580200543 -color=green,shape=circle,flag=0,i=8192,u=0.48005832422866,v=0.9656155509002752,w=0.500075157787493,x=4.599625421020413 -color=red,shape=circle,flag=0,i=8206,u=0.36072228309983356,v=0.42804063280133536,w=0.513709617083048,x=2.3793012409694487 -color=green,shape=circle,flag=0,i=8244,u=0.22821342960813873,v=0.20185155254119747,w=0.49333966674156965,x=5.843436214265112 -color=red,shape=square,flag=0,i=8269,u=0.20396893614842126,v=0.7374670948120775,w=0.4922902862688887,x=3.5922792661219547 -color=yellow,shape=square,flag=1,i=8281,u=0.5141908306252949,v=0.34078571138541347,w=0.5009205837737613,x=4.0322191772088125 -color=red,shape=square,flag=0,i=8293,u=0.21158032304275443,v=0.20811956695843548,w=0.49834105290954284,x=5.397691717692726 -color=purple,shape=square,flag=0,i=8298,u=0.0009443393761726648,v=0.38809253603320815,w=0.49286241834730166,x=5.222846861751149 -color=yellow,shape=square,flag=1,i=8314,u=0.5697438526457065,v=0.6556378790688947,w=0.49933731484714794,x=5.39116026738095 -color=blue,shape=square,flag=1,i=8322,u=0.36895377459474843,v=0.03821420985385149,w=0.474713631451075,x=4.862260461363626 -color=red,shape=square,flag=0,i=8359,u=0.07514869684349179,v=0.8183685215443869,w=0.5086364545737491,x=6.764395190535715 -color=purple,shape=circle,flag=0,i=8360,u=0.7768606276858472,v=0.883269713735061,w=0.4962542131564194,x=5.7784139239954735 -color=red,shape=triangle,flag=0,i=8373,u=0.9571447205386587,v=0.6683306186275646,w=0.5234210775349102,x=4.029116090090505 -color=blue,shape=circle,flag=0,i=8384,u=0.6778348169115466,v=0.8976034585339653,w=0.492136137675184,x=4.2611419617960635 -color=red,shape=square,flag=1,i=8393,u=0.8145322861330438,v=0.5188951839598379,w=0.5101708156360694,x=5.688177873777448 -color=green,shape=square,flag=0,i=8408,u=0.9319903266708364,v=0.2552528002265292,w=0.4942626375188785,x=4.406676430407909 -color=red,shape=circle,flag=1,i=8415,u=0.3737966638793856,v=0.4350350661877376,w=0.5165896987927496,x=4.057651738121976 -color=yellow,shape=square,flag=1,i=8447,u=0.4659528108725113,v=0.4849582822316004,w=0.4996673036265974,x=4.3359382688858075 -color=red,shape=circle,flag=1,i=8456,u=0.7718966567879757,v=0.7623535522035053,w=0.509642190695718,x=3.4456739112551173 -color=blue,shape=triangle,flag=1,i=8462,u=0.17417141364366562,v=0.32259267046228357,w=0.4914666991467544,x=3.607842468256724 -color=yellow,shape=circle,flag=1,i=8468,u=0.3160565136615746,v=0.7258966130017701,w=0.5167828894515255,x=5.685094077593349 -color=green,shape=square,flag=1,i=8474,u=0.6888318900707574,v=0.7663070082537083,w=0.49673338840445225,x=4.085375008394762 -color=red,shape=triangle,flag=1,i=8488,u=0.8725601901985022,v=0.7282278659872645,w=0.5170005436076226,x=4.655617704867677 -color=red,shape=square,flag=0,i=8494,u=0.57813641146833,v=0.016303628886071397,w=0.5194109442337287,x=5.778684635132735 -color=blue,shape=triangle,flag=0,i=8496,u=0.4877196399515924,v=0.12693357745919653,w=0.49626122819564394,x=5.139701252238061 -color=red,shape=square,flag=0,i=8506,u=0.4536407571288589,v=0.4086845382855824,w=0.5190710521348575,x=3.754579654014337 -color=blue,shape=square,flag=0,i=8507,u=0.2297435330917933,v=0.07882370012429851,w=0.4803589650750251,x=5.523689542616318 -color=red,shape=circle,flag=0,i=8517,u=0.11069658735859877,v=0.2047762628081064,w=0.5108878400056613,x=6.392869487227589 -color=red,shape=circle,flag=0,i=8519,u=0.542189494928912,v=0.44711482178495193,w=0.5062600717517605,x=6.74430347319025 -color=red,shape=circle,flag=0,i=8540,u=0.8718737612065814,v=0.7850682501563381,w=0.5138776278910985,x=4.122174700518037 -color=red,shape=square,flag=1,i=8550,u=0.20086377295854685,v=0.12687473315218523,w=0.5101479818790312,x=6.311620164580912 -color=green,shape=circle,flag=0,i=8553,u=0.25348737093895146,v=0.4427485433100772,w=0.49688549289589706,x=5.536464725754262 -color=yellow,shape=circle,flag=1,i=8555,u=0.1113912897297743,v=0.7961745615073627,w=0.5195582693180096,x=6.656055560387666 -color=blue,shape=triangle,flag=1,i=8556,u=0.4087681879652537,v=0.8836337953532215,w=0.49787473850630415,x=3.991255488815962 -color=red,shape=square,flag=0,i=8581,u=0.5990853016967539,v=0.49312851059924045,w=0.5121823973667605,x=6.7769738887943305 -color=purple,shape=square,flag=0,i=8592,u=0.3470099382062559,v=0.4047370584614989,w=0.4896994890132443,x=5.78652394849317 -color=yellow,shape=square,flag=1,i=8600,u=0.35843383541104135,v=0.7915256928485487,w=0.48869486565694287,x=3.8755770712519086 -color=red,shape=square,flag=1,i=8627,u=0.3475933222458566,v=0.8932566012539622,w=0.5192762645754546,x=3.8511325789201414 -color=green,shape=triangle,flag=0,i=8637,u=0.5579523916184917,v=0.07645377562171862,w=0.48406050876403317,x=4.516167538234658 -color=purple,shape=triangle,flag=0,i=8641,u=0.25476179290265377,v=0.706689885658199,w=0.5000597522573289,x=4.447509032986428 -color=yellow,shape=square,flag=1,i=8644,u=0.789804715787522,v=0.08492026505562678,w=0.4952194118324802,x=6.451960792802628 -color=green,shape=square,flag=0,i=8649,u=0.1598220212724255,v=0.02611227073971989,w=0.5074391566237934,x=5.16440348882238 -color=purple,shape=circle,flag=0,i=8650,u=0.14981907033853037,v=0.43358946232181794,w=0.49097880055998006,x=4.636867930204307 -color=blue,shape=circle,flag=0,i=8658,u=0.5446107204065721,v=0.5604767893258834,w=0.4808299098354557,x=5.547343156427036 -color=red,shape=square,flag=0,i=8660,u=0.2561403606495931,v=0.2506687295256044,w=0.508628492525536,x=3.616802986154939 -color=red,shape=triangle,flag=0,i=8664,u=0.810005764737245,v=0.8945981286276391,w=0.5081039922981421,x=4.931439557625551 -color=blue,shape=circle,flag=1,i=8672,u=0.44395564565601353,v=0.4962942139299984,w=0.4779476055661547,x=7.453854753999149 -color=purple,shape=triangle,flag=1,i=8673,u=0.11908056326144001,v=0.22181294737757573,w=0.4993588818472647,x=4.5807526894603745 -color=red,shape=square,flag=0,i=8677,u=0.8281016851398877,v=0.7132410987840627,w=0.506764382593966,x=3.860261954310721 -color=purple,shape=square,flag=0,i=8678,u=0.2718676983317567,v=0.7611921753787938,w=0.49424427833493995,x=4.4276024609948905 -color=green,shape=triangle,flag=0,i=8681,u=0.4176693928160221,v=0.09133222803509622,w=0.4836138718665448,x=7.026520387683116 -color=orange,shape=triangle,flag=0,i=8701,u=0.2725988558078547,v=0.3862537521905285,w=0.699946598035849,x=2.6553678804373884 -color=yellow,shape=square,flag=0,i=8715,u=0.008952214123129854,v=0.35995275457905873,w=0.48992038220105244,x=3.621945875272798 -color=red,shape=square,flag=0,i=8737,u=0.3853757018330435,v=0.7847538469333147,w=0.5152476037559668,x=3.315038081713256 -color=red,shape=circle,flag=0,i=8748,u=0.4039054218827741,v=0.3276051706669772,w=0.5243957894883501,x=4.895102658178135 -color=yellow,shape=square,flag=1,i=8756,u=0.8093704572694426,v=0.9734174278792828,w=0.48612808334052166,x=3.7124036982591524 -color=yellow,shape=square,flag=1,i=8757,u=0.3139095744066982,v=0.8877570984399351,w=0.4898183054562425,x=3.864238924248801 -color=purple,shape=square,flag=0,i=8779,u=0.6345624907929879,v=0.1779834293934025,w=0.48387021131671126,x=5.435765989783728 -color=red,shape=square,flag=0,i=8785,u=0.7827206701253899,v=0.5605386489519403,w=0.5263241714807793,x=5.509550738120939 -color=red,shape=square,flag=0,i=8801,u=0.7539400478705093,v=0.04011530358785187,w=0.5373661330957247,x=3.571710668754149 -color=green,shape=circle,flag=1,i=8827,u=0.42541391007987583,v=0.8479815321289037,w=0.49346950133275896,x=6.198344604700275 -color=red,shape=triangle,flag=0,i=8850,u=0.15695717727974334,v=0.6764088102235764,w=0.502098359972572,x=5.180577922631893 -color=yellow,shape=square,flag=1,i=8857,u=0.10640657662691066,v=0.36357044255335336,w=0.49163002159908353,x=6.433270109386679 -color=green,shape=circle,flag=0,i=8874,u=0.4916056543827738,v=0.4432991839008358,w=0.49026005105510695,x=5.6234301612182085 -color=red,shape=square,flag=0,i=8888,u=0.8132318813423208,v=0.6362461681155229,w=0.5172130974055371,x=5.922091442004491 -color=purple,shape=triangle,flag=0,i=8918,u=0.21989580410270027,v=0.8348600460317008,w=0.49790789876635794,x=6.510688352365634 -color=purple,shape=triangle,flag=0,i=8924,u=0.07644699812156319,v=0.24881514980517194,w=0.49674481488258054,x=7.095839162258339 -color=yellow,shape=triangle,flag=1,i=8935,u=0.26821116898686204,v=0.26940011917560547,w=0.4986030019371527,x=4.777909939128046 -color=red,shape=square,flag=1,i=8941,u=0.4367168224514574,v=0.7488269269029236,w=0.507047213052922,x=7.506196629192871 -color=red,shape=triangle,flag=0,i=8963,u=0.24054793553982667,v=0.2618823402014181,w=0.4989901442620353,x=7.031245001582079 -color=blue,shape=circle,flag=1,i=8965,u=0.7291493248491975,v=0.3092409131842515,w=0.483661745588926,x=4.022568776318198 -color=yellow,shape=circle,flag=1,i=8966,u=0.6474146708126227,v=0.8296252006540943,w=0.5060153990435498,x=7.053177596314434 -color=red,shape=triangle,flag=1,i=8982,u=0.30155376997395167,v=0.9999946837499262,w=0.48607411733411804,x=5.823518217312073 -color=purple,shape=square,flag=0,i=8989,u=0.15374580399114035,v=0.18755871227920562,w=0.4861790458233523,x=5.231976429274122 -color=red,shape=circle,flag=0,i=8990,u=0.8997518246479991,v=0.9797604496781345,w=0.5213508868934383,x=4.543560849565531 -color=orange,shape=triangle,flag=1,i=9030,u=0.38757743328467886,v=0.2912146076739721,w=0.7023173255403671,x=3.6960197738656664 -color=purple,shape=square,flag=0,i=9032,u=0.885983182286682,v=0.037134205365180084,w=0.48151518397375026,x=5.581523273018959 -color=red,shape=square,flag=1,i=9037,u=0.21379323810017659,v=0.17552334077655318,w=0.5052799861300972,x=6.99195498944034 -color=purple,shape=triangle,flag=0,i=9041,u=0.06208574957565738,v=0.43095792240670827,w=0.49373249533446223,x=6.619316155293433 -color=red,shape=square,flag=1,i=9052,u=0.7299684002085917,v=0.20220283585645837,w=0.5053689603927922,x=4.856416763955198 -color=green,shape=triangle,flag=0,i=9073,u=0.04585250350751746,v=0.8031503807076456,w=0.4887630026090041,x=4.8916267035710455 -color=blue,shape=triangle,flag=0,i=9081,u=0.054266317926766616,v=0.3476494653394624,w=0.49571907114514874,x=4.4231986849294875 -color=yellow,shape=square,flag=1,i=9094,u=0.27741585216934417,v=0.7388612749734185,w=0.5111668501680261,x=6.738195084279833 -color=red,shape=square,flag=0,i=9107,u=0.38172268374833473,v=0.17980221819527864,w=0.49686386827918844,x=5.81848889706322 -color=purple,shape=square,flag=0,i=9108,u=0.6050603030907421,v=0.6455003077032176,w=0.4807828772100833,x=4.859662859992859 -color=green,shape=square,flag=0,i=9110,u=0.824425533603432,v=0.47606758311171826,w=0.5040029603810764,x=4.8060410562339575 -color=red,shape=triangle,flag=0,i=9113,u=0.1947275808525174,v=0.7966051959055993,w=0.48257581512393993,x=6.887781282006995 -color=blue,shape=triangle,flag=1,i=9115,u=0.7444699717618222,v=0.4781529616568201,w=0.4966461941793798,x=6.8635351135804585 -color=blue,shape=square,flag=0,i=9125,u=0.13986988778773646,v=0.7152865235103113,w=0.4574206931273791,x=4.183110711103503 -color=yellow,shape=square,flag=1,i=9132,u=0.9808394637494983,v=0.40257779222117007,w=0.5078413067758386,x=3.5514231147308046 -color=red,shape=circle,flag=0,i=9159,u=0.5077709879895513,v=0.5728492950744577,w=0.5159249647554017,x=6.259731522275572 -color=yellow,shape=circle,flag=1,i=9174,u=0.37244702785695716,v=0.3487377022098693,w=0.49881177578239244,x=5.795374632483997 -color=red,shape=triangle,flag=0,i=9175,u=0.19913137088527966,v=0.5187316705588461,w=0.4714517320764309,x=5.099914068298475 -color=orange,shape=circle,flag=1,i=9180,u=0.026745553707732128,v=0.21779299061284596,w=0.5864161051273346,x=5.184662140513534 -color=red,shape=circle,flag=0,i=9194,u=0.3887855351726862,v=0.38758417878155316,w=0.5105749410785941,x=5.64683935879446 -color=red,shape=square,flag=1,i=9198,u=0.7013532302293408,v=0.7232699229726844,w=0.5037542650034493,x=3.7861420260520426 -color=blue,shape=square,flag=0,i=9200,u=0.046971452930954394,v=0.2630429530291283,w=0.455287516932772,x=3.349106662824773 -color=red,shape=triangle,flag=0,i=9201,u=0.1292018506946545,v=0.5741225252703519,w=0.4746773887739432,x=6.822431485283919 -color=blue,shape=circle,flag=0,i=9208,u=0.27012723484676104,v=0.8135898329076594,w=0.49092853059749675,x=5.079018984437171 -color=yellow,shape=square,flag=1,i=9210,u=0.028686545367107463,v=0.47131931054906284,w=0.5104258863494733,x=6.315737213339897 -color=blue,shape=square,flag=0,i=9221,u=0.7167811505678501,v=0.531941131252952,w=0.4528614075427426,x=4.091536961008674 -color=yellow,shape=square,flag=1,i=9226,u=0.08770235588186515,v=0.9163626703991583,w=0.5132343418291514,x=5.714818392983794 -color=green,shape=triangle,flag=0,i=9237,u=0.9003147737355317,v=0.06796136184900581,w=0.4786679267548704,x=2.664167919754516 -color=purple,shape=square,flag=0,i=9238,u=0.26459261554897395,v=0.6371850119300632,w=0.48135264038173575,x=4.223431874599669 -color=green,shape=circle,flag=0,i=9241,u=0.8190519732467753,v=0.3477785647528371,w=0.499520278698399,x=5.894600369117107 -color=green,shape=square,flag=1,i=9257,u=0.22961383550996894,v=0.19280013564823295,w=0.5100440972478226,x=5.309564700170622 -color=blue,shape=square,flag=0,i=9268,u=0.8126930355527541,v=0.07341657355410935,w=0.45858294465674343,x=4.161642865200393 -color=red,shape=circle,flag=0,i=9272,u=0.7763540923452403,v=0.8372565550920146,w=0.5133384008788858,x=3.448459609826062 -color=red,shape=square,flag=0,i=9283,u=0.620617936642009,v=0.9240461620339983,w=0.5108622414017604,x=7.079247866846053 -color=red,shape=triangle,flag=0,i=9284,u=0.8700272612588612,v=0.46841348936537464,w=0.48066253107206536,x=5.608067139698977 -color=purple,shape=square,flag=0,i=9289,u=0.7517779283917652,v=0.40202937969283314,w=0.4794223206065857,x=4.03786842389076 -color=blue,shape=square,flag=0,i=9296,u=0.7190390075864663,v=0.03072263624465177,w=0.45611420692333937,x=5.753381508837911 -color=yellow,shape=triangle,flag=1,i=9301,u=0.13026923260250933,v=0.6797653794531855,w=0.5035263164712063,x=5.6893007027110984 -color=blue,shape=square,flag=0,i=9312,u=0.7085517465437186,v=0.17197180452055727,w=0.4614268654368201,x=3.8969198904752402 -color=yellow,shape=square,flag=1,i=9322,u=0.5365666017788426,v=0.8245167547731835,w=0.5133918529146169,x=4.6360351566736915 -color=red,shape=circle,flag=0,i=9345,u=0.965850682512915,v=0.9285587833091115,w=0.527289155220966,x=5.43056092953037 -color=red,shape=square,flag=0,i=9357,u=0.3614780624071209,v=0.7282887364010839,w=0.5161979553883289,x=4.321601733537874 -color=blue,shape=circle,flag=1,i=9359,u=0.6778972832833723,v=0.11457559561152497,w=0.4948660597602916,x=5.037891203973714 -color=red,shape=square,flag=1,i=9361,u=0.5775169425661867,v=0.14437402107683794,w=0.5162950254122401,x=5.602026301762984 -color=yellow,shape=triangle,flag=0,i=9367,u=0.8426405339502009,v=0.06709989638671376,w=0.5109099828354089,x=4.3835871371613555 -color=green,shape=triangle,flag=1,i=9400,u=0.12975362467386165,v=0.1870688265523458,w=0.4890597595250319,x=3.0156540960017577 -color=yellow,shape=square,flag=0,i=9401,u=0.3911552171110998,v=0.2666727279195633,w=0.5126584809354453,x=5.185253010947496 -color=red,shape=triangle,flag=0,i=9405,u=0.9133756483058748,v=0.01503062389521359,w=0.5000264773134935,x=5.552789249049147 -color=red,shape=triangle,flag=0,i=9412,u=0.8094227738671317,v=0.9549635298811832,w=0.5042479194364589,x=5.15961093055682 -color=yellow,shape=triangle,flag=1,i=9429,u=0.7595898724868989,v=0.9265515354497086,w=0.5145524639630858,x=6.250025998233281 -color=blue,shape=triangle,flag=1,i=9448,u=0.35490950499154705,v=0.7218135749871497,w=0.48960415497743376,x=4.056578595076009 -color=yellow,shape=circle,flag=1,i=9456,u=0.5542755253986698,v=0.9170865180330541,w=0.5073866609590761,x=5.311952337983083 -color=red,shape=triangle,flag=0,i=9459,u=0.6969632574122253,v=0.6900031247449963,w=0.5145838703085809,x=5.467500840880578 -color=green,shape=triangle,flag=0,i=9467,u=0.14971274889813713,v=0.8289364066362704,w=0.48237818566610047,x=4.40495869617859 -color=red,shape=triangle,flag=0,i=9478,u=0.4037244835596163,v=0.95010526746133,w=0.5145321856653201,x=5.187214580129454 -color=red,shape=triangle,flag=0,i=9479,u=0.6574838670307566,v=0.6071207826230505,w=0.5141624131051571,x=4.915951708455697 -color=red,shape=square,flag=0,i=9482,u=0.7823506851287032,v=0.5663159975759049,w=0.5137215344425443,x=6.208724152646211 -color=green,shape=square,flag=0,i=9485,u=0.9892470532121387,v=0.5780901879315828,w=0.5050597123131978,x=4.9482978032271925 -color=blue,shape=triangle,flag=1,i=9487,u=0.33174000275143345,v=0.9805653422093367,w=0.4874962268522663,x=5.424067024361242 -color=blue,shape=triangle,flag=0,i=9498,u=0.08806525704858126,v=0.6845535810031408,w=0.4867587263239217,x=3.9078278769210697 -color=red,shape=triangle,flag=0,i=9538,u=0.2787973729554404,v=0.5977060543020113,w=0.5026233410592158,x=5.780033849780893 -color=green,shape=circle,flag=1,i=9539,u=0.4727813595399488,v=0.30588276341122556,w=0.5000337989882224,x=5.911155551874862 -color=blue,shape=triangle,flag=0,i=9558,u=0.3942232279212846,v=0.681550197633219,w=0.4952276469234024,x=5.258234251088794 -color=blue,shape=square,flag=0,i=9572,u=0.2938257724304293,v=0.08310837953715178,w=0.4800033068787473,x=3.6185220418425197 -color=red,shape=square,flag=0,i=9574,u=0.36834155261450463,v=0.9846264110458885,w=0.5235116168144827,x=5.387329869125807 -color=red,shape=circle,flag=0,i=9581,u=0.1574705000072203,v=0.07671339361312166,w=0.5335770948556834,x=5.105743884182254 -color=yellow,shape=circle,flag=1,i=9590,u=0.6919299267049481,v=0.9484760074771249,w=0.5163352271468572,x=6.765298961875992 -color=red,shape=circle,flag=0,i=9592,u=0.19117559664839834,v=0.19812131104268485,w=0.5311783251476547,x=7.142330869904646 -color=blue,shape=circle,flag=0,i=9594,u=0.40738652017423194,v=0.31001652659599666,w=0.5029058222369502,x=4.4554665489626695 -color=yellow,shape=triangle,flag=0,i=9602,u=0.8200160347131148,v=0.660727005159579,w=0.527138830057806,x=5.251564779959805 -color=green,shape=square,flag=1,i=9610,u=0.9152180049237623,v=0.10723536008714007,w=0.5082172541278149,x=5.718517397171947 -color=purple,shape=circle,flag=0,i=9626,u=0.9430256954134297,v=0.9302480148520449,w=0.49921070901120224,x=4.743852660310452 -color=yellow,shape=square,flag=0,i=9633,u=0.26628854546987535,v=0.6509309701742603,w=0.4925628944682385,x=6.198844376628049 -color=red,shape=circle,flag=0,i=9643,u=0.9445622642980543,v=0.9328857181669454,w=0.5287018636480739,x=6.176694771281167 -color=red,shape=triangle,flag=1,i=9664,u=0.9827089712422166,v=0.8253263003253721,w=0.48370043864582557,x=3.9918476047322016 -color=red,shape=triangle,flag=0,i=9667,u=0.7790084522078857,v=0.45700254831314535,w=0.48818199549364266,x=5.791790089867092 -color=yellow,shape=circle,flag=1,i=9698,u=0.041328890456797995,v=0.12668786123324816,w=0.5205354351666666,x=3.799743420696681 -color=purple,shape=circle,flag=0,i=9707,u=0.5717598551034563,v=0.5639267981974007,w=0.5054823357461689,x=4.911593440660375 -color=red,shape=triangle,flag=0,i=9715,u=0.25746263072220565,v=0.17309993043681826,w=0.480189714553768,x=5.480751135712164 -color=red,shape=triangle,flag=0,i=9720,u=0.9208142603098871,v=0.27882842146823217,w=0.48355669073004154,x=5.336261003898746 -color=green,shape=circle,flag=0,i=9721,u=0.4058569796310627,v=0.2243574488740685,w=0.4971018877195509,x=3.509751222655615 -color=red,shape=triangle,flag=1,i=9729,u=0.8503734581546795,v=0.4720811245505807,w=0.47888724537369975,x=4.517638722576222 -color=red,shape=circle,flag=0,i=9732,u=0.6401978121634246,v=0.6033735060710232,w=0.5258265023685217,x=5.221307907735327 -color=green,shape=square,flag=0,i=9737,u=0.7872653678024677,v=0.3831147538551086,w=0.5011464535428705,x=6.244836782395747 -color=red,shape=square,flag=0,i=9741,u=0.004114153406486798,v=0.5897739959178878,w=0.48340205361053473,x=6.947916531652023 -color=green,shape=square,flag=0,i=9764,u=0.17073188692307373,v=0.2565606815720137,w=0.50539839593486,x=5.399678059731632 -color=red,shape=square,flag=0,i=9769,u=0.6718267664493363,v=0.9723218287519877,w=0.49227152266751234,x=3.430294262013731 -color=red,shape=circle,flag=0,i=9784,u=0.9296061848811287,v=0.9606905566403592,w=0.5214848119261636,x=4.8851603131892345 -color=green,shape=triangle,flag=0,i=9796,u=0.8370379794259183,v=0.7120045845357958,w=0.4951090907930372,x=3.206150179456037 -color=orange,shape=square,flag=0,i=9802,u=0.06700570246738258,v=0.45836984859846863,w=0.3984818598933386,x=3.9455761243945395 -color=red,shape=square,flag=0,i=9837,u=0.3972358704086074,v=0.010212272457749472,w=0.4893090841301849,x=4.774931845745172 -color=red,shape=square,flag=1,i=9838,u=0.5904621753195094,v=0.6900947625728051,w=0.49317866401113697,x=4.2116935711587 -color=purple,shape=square,flag=0,i=9839,u=0.4938998227017718,v=0.8568823533347376,w=0.48851346307245236,x=5.571639888526984 -color=red,shape=square,flag=0,i=9840,u=0.9593132165589725,v=0.39020310394037494,w=0.48951185250415524,x=4.733094821047713 -color=blue,shape=square,flag=1,i=9845,u=0.6341780708209619,v=0.7224458394381865,w=0.5003683856303103,x=4.618637960670433 -color=blue,shape=square,flag=1,i=9847,u=0.8347873205591642,v=0.6360297648978646,w=0.49738689428558946,x=4.615623749577749 -color=green,shape=triangle,flag=1,i=9850,u=0.6682951364863037,v=0.14113578797016302,w=0.4904489447055702,x=5.5892837868660346 -color=red,shape=triangle,flag=0,i=9865,u=0.9502855583392119,v=0.18664717140755305,w=0.47478258398761414,x=5.825006891468905 -color=green,shape=square,flag=1,i=9868,u=0.3703931977340147,v=0.7108800916931524,w=0.5097636206745125,x=4.272815850070903 -color=purple,shape=circle,flag=1,i=9871,u=0.637721821270784,v=0.8846735721773494,w=0.5053741363864312,x=5.189698676815268 -color=yellow,shape=square,flag=1,i=9876,u=0.9241687308294335,v=0.9180432017520105,w=0.500429013622843,x=5.30277566077152 -color=red,shape=triangle,flag=0,i=9880,u=0.07392166677675716,v=0.802966889255393,w=0.4723578310073455,x=3.9680667698693326 -color=red,shape=square,flag=0,i=9884,u=0.8676686917239586,v=0.4671422139026725,w=0.47848920569684533,x=4.671710740399873 -color=yellow,shape=square,flag=1,i=9889,u=0.15983367713251317,v=0.884002323354841,w=0.5018774252487583,x=4.683217783951939 -color=orange,shape=circle,flag=1,i=9891,u=0.3507739780054132,v=0.23681134469165388,w=0.5839008348261921,x=5.586479409147355 -color=red,shape=circle,flag=0,i=9897,u=0.2027638546120365,v=0.10663505863300009,w=0.5110753569843774,x=4.142367046527823 -color=red,shape=triangle,flag=1,i=9899,u=0.20875225791064334,v=0.026477975740831328,w=0.4790158661333253,x=4.859174878743788 -color=red,shape=square,flag=0,i=9928,u=0.926240346852433,v=0.8157414138097383,w=0.48267432464926147,x=4.414280522949761 -color=orange,shape=triangle,flag=0,i=9947,u=0.0775040970813301,v=0.2349883481677424,w=0.680236871400121,x=4.93314591314715 -color=red,shape=circle,flag=0,i=9948,u=0.001384930963921116,v=-0.04646102895619495,w=0.5064389927763275,x=5.047609204210816 -color=blue,shape=square,flag=1,i=9964,u=0.36359022145724174,v=0.8169367015685594,w=0.48799623194687536,x=5.395564954400644 -color=red,shape=triangle,flag=0,i=9968,u=0.6664951219850609,v=0.00729572463031114,w=0.4829971887973979,x=6.11788992814953 -color=yellow,shape=square,flag=0,i=9986,u=0.6360787450678319,v=0.5700247215428541,w=0.5080278906584305,x=3.251821941378497 -color=blue,shape=square,flag=0,i=9990,u=0.3970909761018069,v=0.3873498326266669,w=0.4896248875937391,x=7.623055607008342 -color=red,shape=square,flag=0,i=9992,u=0.4174205269471166,v=0.4899654335229112,w=0.4887066799276838,x=3.709175992443242 -color=red,shape=circle,flag=0,i=9997,u=0.5983435650407365,v=0.5252317110376808,w=0.5080040224609491,x=4.598143125962596 -color=orange,shape=triangle,flag=1,i=9998,u=0.17339816111848216,v=0.9350095940690382,w=0.6782037689680854,x=4.408185232495415 -color=purple,shape=triangle,flag=0,i=10014,u=0.06072618267891394,v=0.34535436406720355,w=0.4718481627239308,x=5.1448104406062125 -color=blue,shape=square,flag=1,i=10015,u=0.6366858287857551,v=0.4872060134264774,w=0.4856155915169885,x=5.879216136738878 -color=blue,shape=square,flag=0,i=10017,u=0.6359337202043088,v=0.7522439193656397,w=0.4842120565998406,x=3.0720598435493542 -color=red,shape=square,flag=1,i=10020,u=0.6903880373113135,v=0.7052172949460651,w=0.4888173141081072,x=4.6534512790916205 -color=red,shape=square,flag=1,i=10043,u=0.223218213339332,v=0.8132045407973688,w=0.4879281537092341,x=3.623355848002848 -color=blue,shape=circle,flag=0,i=10048,u=0.11614233186594036,v=0.9974328269342161,w=0.4923241396550544,x=4.9181740963506595 -color=red,shape=circle,flag=0,i=10061,u=0.03054566851221152,v=0.04776589296242091,w=0.4980992608226862,x=4.407725760243908 -color=red,shape=square,flag=0,i=10079,u=0.2965702612274227,v=0.7281142757699013,w=0.4771973730469952,x=4.795931631445647 -color=red,shape=triangle,flag=0,i=10095,u=0.4027282795814302,v=0.6050782938029197,w=0.46037656929186943,x=3.847528108645965 -color=red,shape=square,flag=0,i=10112,u=0.7836723307085427,v=0.7518713646037316,w=0.4724337254704511,x=7.122560644352233 -color=yellow,shape=square,flag=1,i=10124,u=0.670664735519011,v=0.8234649982301067,w=0.5031829100975869,x=3.316302908539081 -color=yellow,shape=circle,flag=1,i=10132,u=0.6008865185963321,v=0.0257466507560683,w=0.5137309855336052,x=5.331030182116883 -color=yellow,shape=square,flag=1,i=10146,u=0.7270499205866984,v=0.17307146439448928,w=0.4963048631275019,x=7.121337333209979 -color=red,shape=triangle,flag=1,i=10150,u=0.5688860498950544,v=0.9432006616575501,w=0.46932837079885015,x=6.752823694250325 -color=red,shape=square,flag=0,i=10151,u=0.6218541887127367,v=0.7797471633956696,w=0.486447718875377,x=5.4738654230575605 -color=purple,shape=triangle,flag=0,i=10152,u=0.48527261160303004,v=0.585827346663466,w=0.4795467669209268,x=5.27956435604168 -color=red,shape=circle,flag=0,i=10171,u=0.3182854807732849,v=0.3677954873174411,w=0.500094596478842,x=3.932177775501122 -color=purple,shape=circle,flag=0,i=10175,u=0.3695089656769409,v=0.29499422941358,w=0.5088692676676334,x=6.276836590018462 -color=orange,shape=circle,flag=1,i=10183,u=0.3549503392804705,v=0.5789176986942438,w=0.5804247579234454,x=5.790396267071447 -color=red,shape=triangle,flag=1,i=10213,u=0.49165683757057366,v=0.1677288732391946,w=0.48148162606303946,x=5.1728129729795 -color=blue,shape=circle,flag=1,i=10227,u=0.5293102206858952,v=0.3751471148580783,w=0.48074202911961395,x=6.138820851430933 -color=blue,shape=circle,flag=1,i=10239,u=0.6420976262887303,v=0.5908389417652758,w=0.4833295556454372,x=3.7756814224440824 -color=red,shape=triangle,flag=0,i=10246,u=0.7444639868523053,v=0.9207704110471246,w=0.4821147121851418,x=3.9691874726040797 -color=yellow,shape=square,flag=1,i=10254,u=0.1542529120347178,v=0.3979484141483848,w=0.4943326440596587,x=4.678860834821809 -color=red,shape=square,flag=0,i=10259,u=0.9100309840822012,v=0.8248903826644706,w=0.48186009597664314,x=4.4578951413316945 -color=red,shape=triangle,flag=0,i=10273,u=0.018618657602898048,v=0.028050985057383238,w=0.4723361630348696,x=5.650117529565353 -color=green,shape=circle,flag=0,i=10287,u=0.380588951047943,v=0.9432036800398204,w=0.4902082787727849,x=5.155661156846629 -color=orange,shape=circle,flag=1,i=10292,u=0.31837857956949256,v=0.27304068210494115,w=0.578899816258626,x=5.786126025532204 -color=yellow,shape=circle,flag=1,i=10309,u=0.6902349067081704,v=0.25378719605789046,w=0.5040016713116696,x=4.812138094867828 -color=red,shape=square,flag=0,i=10324,u=0.6946844867784652,v=0.29518475398919375,w=0.4927509262328253,x=4.840797365557551 -color=red,shape=triangle,flag=1,i=10332,u=0.8678442691791926,v=0.6091142064852949,w=0.45566205612353117,x=6.621885107061575 -color=blue,shape=circle,flag=1,i=10361,u=0.18734077997606402,v=0.43057564962814354,w=0.4860517243897379,x=3.3628410099181436 -color=orange,shape=square,flag=1,i=10364,u=0.058701011660487246,v=0.0024486660337188493,w=0.40453190647286613,x=2.7595222276739046 -color=red,shape=square,flag=0,i=10377,u=0.40074434771319645,v=0.8858692458551669,w=0.5001034027863797,x=5.524256954720021 -color=red,shape=triangle,flag=1,i=10381,u=0.598852132830924,v=0.22513365255483608,w=0.4585942527102313,x=4.0428843518171105 -color=blue,shape=square,flag=0,i=10384,u=0.32390090697376095,v=0.12332922299332161,w=0.5006041398872025,x=3.147212881176131 -color=green,shape=triangle,flag=0,i=10387,u=0.09558656808256394,v=0.6941294500901372,w=0.49227479318628864,x=3.9234313092361055 -color=green,shape=triangle,flag=0,i=10389,u=0.5828628013291147,v=0.6450916716182998,w=0.4966328544354502,x=5.550035797666644 -color=yellow,shape=circle,flag=1,i=10390,u=0.44453628889953445,v=0.2862979496613094,w=0.51090427670511,x=4.106918947724256 -color=red,shape=circle,flag=1,i=10441,u=0.8392661641723219,v=0.8162254792785985,w=0.509406082314283,x=3.2157801813406675 -color=red,shape=square,flag=0,i=10444,u=0.37463191756149894,v=0.5164572501446436,w=0.4995921410953584,x=5.992441205035628 -color=red,shape=triangle,flag=0,i=10450,u=0.8939541353212057,v=0.43537281987781684,w=0.45535988644152453,x=5.609043571666418 -color=red,shape=circle,flag=0,i=10472,u=0.8595124880771323,v=0.9569170074785238,w=0.5141491068253298,x=5.368165481005893 -color=blue,shape=triangle,flag=1,i=10483,u=0.147742722730816,v=0.20372021048433941,w=0.47294180453453544,x=4.627391489038878 -color=red,shape=square,flag=0,i=10484,u=0.8878079463765209,v=0.00017635526605375151,w=0.51508747491667,x=2.976917495644902 -color=red,shape=square,flag=1,i=10548,u=0.940988407212824,v=0.08560315347807823,w=0.5119577447249931,x=6.043202056298618 -color=purple,shape=circle,flag=0,i=10561,u=0.42258675955167735,v=0.13198365937277168,w=0.5093805088363241,x=4.368202755064007 -color=green,shape=square,flag=0,i=10568,u=0.0639050973301376,v=0.9007493007366816,w=0.49553583457744577,x=4.362982742442343 -color=red,shape=triangle,flag=0,i=10576,u=0.7083526270103587,v=0.23792218238445895,w=0.4642535710804465,x=4.202356336119785 -color=yellow,shape=square,flag=1,i=10578,u=0.18064235078743995,v=0.15701001178454999,w=0.4761292944268622,x=5.626741841707202 -color=yellow,shape=circle,flag=1,i=10586,u=0.8951203633447987,v=0.2294696897581885,w=0.5041469425442905,x=6.5568446813038195 -color=yellow,shape=circle,flag=1,i=10591,u=0.9093904646584292,v=0.31617090830606964,w=0.5054552168812472,x=6.859854899828519 -color=red,shape=circle,flag=0,i=10594,u=0.8724672333134783,v=0.9094104583865722,w=0.5048122529750436,x=4.239098112071388 -color=blue,shape=circle,flag=1,i=10604,u=0.02547124608037865,v=0.008433833874895491,w=0.48794640570767017,x=4.989348979833584 -color=red,shape=triangle,flag=0,i=10615,u=0.10581575696050416,v=0.4721139499926281,w=0.4741183492140849,x=3.055839138217507 -color=red,shape=square,flag=0,i=10630,u=0.9784438506506147,v=0.6749912312118184,w=0.4981023888184377,x=4.941318491004691 -color=yellow,shape=square,flag=1,i=10631,u=0.921744799017933,v=0.5109148751867204,w=0.4794048905192355,x=5.441928174118314 -color=purple,shape=square,flag=0,i=10650,u=0.9324480505984253,v=0.5958369240385151,w=0.5085894219020052,x=5.299271735359292 -color=orange,shape=circle,flag=1,i=10655,u=0.0292779736185238,v=0.8745744381939615,w=0.5848738119512179,x=4.574214055142606 -color=red,shape=triangle,flag=0,i=10657,u=0.09742169400515321,v=0.9228881083107748,w=0.47266101670274985,x=6.155913437822506 -color=purple,shape=circle,flag=0,i=10675,u=0.9601933247453555,v=0.6304606668777718,w=0.5059571702319123,x=4.184151821083756 -color=red,shape=circle,flag=0,i=10680,u=0.7197166647461486,v=0.6853077083507768,w=0.5126653209726362,x=5.4103005994612365 -color=green,shape=circle,flag=0,i=10693,u=0.9422033304147984,v=0.1471329439491209,w=0.49301655544871337,x=5.259397457175126 -color=red,shape=circle,flag=0,i=10701,u=0.4880271401016847,v=0.5395444187818046,w=0.5145204084133964,x=1.8675071452119234 -color=blue,shape=square,flag=1,i=10709,u=0.9653241084872171,v=0.04395488019105609,w=0.5024905915906125,x=5.546323886633406 -color=blue,shape=triangle,flag=1,i=10717,u=0.9557628022366502,v=0.1233345609217904,w=0.4709934407524951,x=4.959512065237491 -color=blue,shape=square,flag=1,i=10726,u=0.24950053218727852,v=0.84316257779601,w=0.5067875296633696,x=6.105313795137335 -color=red,shape=square,flag=0,i=10727,u=0.42551312752888215,v=0.7807129281916984,w=0.48217631391820354,x=6.421601643296746 -color=yellow,shape=square,flag=1,i=10741,u=0.7310761580626806,v=0.23310643869044967,w=0.47195941096111543,x=5.37356895735718 -color=red,shape=triangle,flag=0,i=10753,u=0.6964070676513231,v=0.44140441920770457,w=0.47721222547725634,x=5.309804258406171 -color=red,shape=square,flag=0,i=10760,u=0.14527150716616755,v=0.5308756743155378,w=0.491837076731806,x=5.58017756032455 -color=green,shape=square,flag=0,i=10770,u=0.5616339623171078,v=0.013534591047469346,w=0.513151662247277,x=5.692402129336116 -color=blue,shape=circle,flag=1,i=10776,u=0.617002338987463,v=0.7178353605529667,w=0.47982606898564667,x=7.1625674759908575 -color=green,shape=square,flag=0,i=10779,u=0.16921390058371377,v=0.6226350078856399,w=0.5091018378300389,x=7.38217515025018 -color=red,shape=circle,flag=0,i=10791,u=0.07073180415516123,v=0.08679003646117818,w=0.5038125746371834,x=4.533730929532047 -color=red,shape=triangle,flag=0,i=10834,u=0.18680073713177348,v=0.9993494201012043,w=0.4773213031616584,x=4.513094201691502 -color=red,shape=triangle,flag=0,i=10848,u=0.984328044546256,v=0.5188399587259762,w=0.4792564762820482,x=6.190887182676861 -color=blue,shape=triangle,flag=0,i=10852,u=0.9321131023511794,v=0.3891184969830609,w=0.47761527716199736,x=6.436951901516465 -color=yellow,shape=square,flag=1,i=10857,u=0.8748151304087454,v=0.2502476564941005,w=0.46876178744698155,x=5.910256453154365 -color=purple,shape=triangle,flag=1,i=10859,u=0.22134297370228684,v=0.5381961520098686,w=0.47784379113682435,x=6.273651804535049 -color=red,shape=square,flag=1,i=10860,u=0.28362174237205706,v=0.1471931408944923,w=0.4936718385481655,x=6.1948905831375045 -color=blue,shape=square,flag=1,i=10869,u=0.20275067438131744,v=0.6412109927679274,w=0.4886332308780323,x=6.232250491017066 -color=red,shape=square,flag=0,i=10875,u=0.3724868333669126,v=0.4945558584734414,w=0.4971480512417688,x=2.050545302249899 -color=green,shape=square,flag=0,i=10906,u=0.6982240526087021,v=0.7514175979192067,w=0.5115536630418412,x=6.968429898016403 -color=red,shape=square,flag=1,i=10909,u=0.2985422210188773,v=0.5312010234010901,w=0.4873596940435782,x=3.884998502994616 -color=yellow,shape=triangle,flag=0,i=10911,u=0.3207555001277137,v=0.8429118043855696,w=0.5208449061979111,x=3.778695284985284 -color=red,shape=circle,flag=0,i=10913,u=0.872067490697382,v=0.9002314977138762,w=0.4991571456570716,x=6.950177773971539 -color=orange,shape=triangle,flag=1,i=10931,u=0.5331297637845395,v=0.17949252153730288,w=0.6526524826688697,x=3.385410206381158 -color=purple,shape=triangle,flag=0,i=10944,u=0.19842604812664932,v=0.5067797693687401,w=0.4851881607747664,x=5.369323823641793 -color=red,shape=circle,flag=1,i=10955,u=0.7923455158157466,v=0.8019530599629591,w=0.5048197369451008,x=4.5502781771547784 -color=yellow,shape=circle,flag=1,i=10966,u=0.24552159321302525,v=0.805746444524981,w=0.5108015311343594,x=4.048119267937712 -color=purple,shape=square,flag=0,i=10983,u=0.9876514204552945,v=0.11996417053077923,w=0.5233392959126978,x=5.071441665115832 -color=red,shape=circle,flag=1,i=10986,u=0.5184179438992648,v=0.43206229986759037,w=0.5094392756024092,x=5.460470198538914 -color=purple,shape=circle,flag=0,i=10994,u=0.34184839500907716,v=0.3610569280371754,w=0.5165644912393597,x=4.510891511869123 -color=blue,shape=triangle,flag=1,i=11012,u=0.20962327641630263,v=0.510878839865751,w=0.4874951093361232,x=3.799354481847154 -color=blue,shape=square,flag=1,i=11017,u=0.21900020429734024,v=0.07539826589100262,w=0.4866422461152902,x=4.77299039000382 -color=yellow,shape=circle,flag=1,i=11049,u=0.9879114734877493,v=0.8008651633096259,w=0.5133355417416207,x=4.035598314023885 -color=red,shape=circle,flag=0,i=11072,u=0.5863573993677064,v=0.5001124378458295,w=0.5019171809014208,x=4.436860341907603 -color=purple,shape=triangle,flag=0,i=11074,u=0.10384254160495798,v=0.9108764866194752,w=0.48278130458879187,x=5.141442802465247 -color=blue,shape=triangle,flag=1,i=11078,u=0.601742020854989,v=0.038449961822750955,w=0.4786133501428849,x=4.439332167889311 -color=yellow,shape=triangle,flag=1,i=11092,u=0.8229740580476099,v=0.6733591604895702,w=0.4984983752336965,x=3.942811108775684 -color=red,shape=circle,flag=1,i=11099,u=0.2728275925451169,v=0.314517194021842,w=0.4988758958355545,x=3.9324093514767795 -color=red,shape=triangle,flag=0,i=11107,u=0.7094065590321239,v=0.8030118874423253,w=0.4867214032868347,x=6.030937389617873 -color=blue,shape=square,flag=1,i=11117,u=0.0720849469507776,v=0.1593880902173438,w=0.48923519619424893,x=4.205917868208034 -color=yellow,shape=circle,flag=1,i=11129,u=0.5253429225138768,v=0.9957041581408161,w=0.5112069864481082,x=5.828155778235353 -color=red,shape=circle,flag=1,i=11143,u=0.2287015927601742,v=0.23866654178630137,w=0.4887717387295377,x=3.6483727653031184 -color=red,shape=circle,flag=0,i=11167,u=0.769410713899481,v=0.7242717108131933,w=0.4900643581952675,x=6.097156235020855 -color=yellow,shape=triangle,flag=1,i=11195,u=0.36904224435599975,v=0.03819903379294887,w=0.5141217967739861,x=4.155731738639664 -color=red,shape=square,flag=1,i=11196,u=0.8517953650116588,v=0.3216635511738848,w=0.5068613544294537,x=6.428096183221197 -color=red,shape=triangle,flag=0,i=11201,u=0.44691797147262424,v=0.7377241338881,w=0.4938925575976855,x=5.41347608600304 -color=red,shape=triangle,flag=0,i=11208,u=0.9784684668798798,v=0.763570131307092,w=0.49867340086246087,x=5.98966387750217 -color=yellow,shape=square,flag=1,i=11209,u=0.43199606450901396,v=0.804605153054225,w=0.4847132137279541,x=5.585778068244217 -color=green,shape=square,flag=0,i=11214,u=0.9828302734965855,v=0.2646110580344787,w=0.517697113190525,x=4.574050226139 -color=red,shape=triangle,flag=1,i=11220,u=0.3783823715210768,v=0.782931040165063,w=0.5004273024688444,x=4.118492031159527 -color=red,shape=triangle,flag=1,i=11237,u=0.5196088079409146,v=0.8930630644369089,w=0.4978451986063169,x=4.011646211011216 -color=yellow,shape=circle,flag=1,i=11245,u=0.8996064197251387,v=0.5019226374046015,w=0.5041774153002586,x=4.252122823453672 -color=red,shape=triangle,flag=1,i=11248,u=0.7529483749500838,v=0.27122834845072485,w=0.49126074812474907,x=4.396888811264903 -color=blue,shape=circle,flag=0,i=11249,u=0.7572458107690444,v=0.33879274133843984,w=0.48911017307305293,x=4.859215124095175 -color=orange,shape=triangle,flag=0,i=11256,u=0.8764356862502545,v=0.411271947777773,w=0.6445857828598599,x=8.064821723348405 -color=blue,shape=square,flag=0,i=11257,u=0.5175904662522431,v=0.7273864358678984,w=0.48124549170822833,x=4.184485111215872 -color=yellow,shape=square,flag=1,i=11258,u=0.7757397185982723,v=0.029171556527266662,w=0.4887119754451175,x=5.819984776411416 -color=red,shape=triangle,flag=0,i=11264,u=0.6928399295420468,v=0.24260392165480227,w=0.48808978873247466,x=3.7857134648217268 -color=blue,shape=square,flag=1,i=11290,u=0.09526725337042308,v=0.5710776547333518,w=0.4816309850010684,x=5.004434437154619 -color=blue,shape=square,flag=1,i=11308,u=0.1984917645276455,v=0.4325895036234173,w=0.4840327278958722,x=6.0313655991758885 -color=red,shape=triangle,flag=0,i=11309,u=0.2695189163955175,v=0.3570033220716953,w=0.4798417621615095,x=6.215696689530307 -color=red,shape=square,flag=0,i=11312,u=0.09424803300847717,v=0.8633989547866907,w=0.4958724231713246,x=5.615260332390245 -color=red,shape=square,flag=0,i=11317,u=0.42075534020005223,v=0.7789609008087531,w=0.4924992539679409,x=4.148108664188815 -color=orange,shape=circle,flag=1,i=11323,u=0.541584000090338,v=0.15392248984531431,w=0.5819425797332739,x=4.675951236311783 -color=blue,shape=square,flag=1,i=11340,u=0.34028282557380873,v=0.29816007364043307,w=0.4920984255052471,x=4.87495995425447 -color=red,shape=triangle,flag=0,i=11347,u=0.29291365334291064,v=0.13595873977427797,w=0.47751618114842376,x=5.734165400286842 -color=purple,shape=triangle,flag=0,i=11365,u=0.14759568718194493,v=0.887197770529009,w=0.48786447532739424,x=3.9607027488190263 -color=red,shape=triangle,flag=1,i=11368,u=0.9958313144391746,v=0.1646426927041188,w=0.4681184791220049,x=5.7276072394750015 -color=blue,shape=circle,flag=1,i=11382,u=0.9547725049854346,v=0.4183334796458881,w=0.48986123904256673,x=7.359710210433526 -color=yellow,shape=square,flag=1,i=11390,u=0.41009075484481616,v=0.04012661259429706,w=0.4775282779934895,x=3.884603883571296 -color=blue,shape=square,flag=0,i=11398,u=0.5232009746280731,v=0.31732238901126764,w=0.4914814422996223,x=6.512711578515396 -color=red,shape=triangle,flag=0,i=11399,u=0.08307367491556572,v=0.2499088892139142,w=0.47155922421917745,x=3.533400043100729 -color=yellow,shape=triangle,flag=1,i=11401,u=0.646340926730741,v=0.5635156016582544,w=0.5227154278139758,x=5.0728700850026875 -color=red,shape=square,flag=1,i=11414,u=0.7833563881078867,v=0.8112218063333311,w=0.4953572009070725,x=3.212908169933748 -color=red,shape=circle,flag=1,i=11418,u=0.7053252293937231,v=0.653551579817268,w=0.47191442834795144,x=3.287977268143678 -color=red,shape=circle,flag=0,i=11420,u=0.6984771131230996,v=0.7110482786322159,w=0.47577018890375466,x=5.401042359876296 -color=red,shape=circle,flag=0,i=11422,u=0.8249976514282572,v=0.737746748760994,w=0.4742364173639332,x=7.579017916144487 -color=red,shape=square,flag=0,i=11429,u=0.3737646251850545,v=0.4802872430457342,w=0.49233298800830655,x=5.481851888719611 -color=red,shape=square,flag=1,i=11438,u=0.6851467661504475,v=0.30545748824705,w=0.495339373019669,x=4.510626503591532 -color=blue,shape=square,flag=1,i=11451,u=0.6784701333767903,v=0.7489987917811751,w=0.4950008966150163,x=4.665969126907384 -color=green,shape=triangle,flag=0,i=11454,u=0.9360018272424514,v=0.2864027960639961,w=0.5165963516009994,x=4.9775786669976485 -color=yellow,shape=square,flag=1,i=11455,u=0.5874636712003198,v=0.33625170329447196,w=0.47599885278694937,x=6.189576199895336 -color=red,shape=circle,flag=0,i=11482,u=0.7741798755046678,v=0.8379930521280073,w=0.4738560123073968,x=4.49012823554904 -color=red,shape=square,flag=1,i=11493,u=0.4655620686808072,v=0.40187813411072393,w=0.4869612526187048,x=7.011843588858941 -color=red,shape=square,flag=0,i=11504,u=0.2512000710535399,v=0.9770487857991338,w=0.49288221544919575,x=3.996943831694889 -color=red,shape=triangle,flag=1,i=11513,u=0.13716324075112885,v=0.09323268082827685,w=0.4690325797787599,x=4.635291371696009 -color=yellow,shape=triangle,flag=1,i=11514,u=0.9170930068074542,v=0.5491180187027114,w=0.5168261702635132,x=3.0882382523771423 -color=blue,shape=square,flag=0,i=11516,u=0.9974578628637201,v=0.8301906233920628,w=0.49595081858602413,x=3.4601454987596227 -color=red,shape=circle,flag=0,i=11531,u=0.8204214990540966,v=0.7836418299016412,w=0.47488759821374815,x=4.888488023964819 -color=green,shape=triangle,flag=0,i=11544,u=0.045882710718465725,v=0.3249778478756211,w=0.5025225347675908,x=4.007985423061229 -color=red,shape=triangle,flag=1,i=11555,u=0.9472068240562526,v=0.7150808909767029,w=0.46248860469745295,x=4.939501626451224 -color=purple,shape=triangle,flag=0,i=11564,u=0.2257016979446489,v=0.5835457139229187,w=0.4916758835993314,x=7.077737742343103 -color=red,shape=triangle,flag=0,i=11581,u=0.05296867528168259,v=0.8851415256565528,w=0.4581587302230065,x=7.147859160935391 -color=blue,shape=square,flag=1,i=11588,u=0.6907610118986325,v=0.9509088014367496,w=0.503467176557804,x=3.9012195604938618 -color=red,shape=triangle,flag=0,i=11605,u=0.8461633697593912,v=0.42590045242655017,w=0.4623193674136193,x=5.760556597285366 -color=red,shape=square,flag=0,i=11606,u=0.14743815857756082,v=0.7926700151981511,w=0.46758106127713767,x=5.651690083563808 -color=red,shape=triangle,flag=0,i=11614,u=0.9285775849365847,v=0.4436105623984308,w=0.4605823986171502,x=4.641207701078844 -color=red,shape=triangle,flag=1,i=11624,u=0.5378184503512431,v=0.6868286620233578,w=0.458044596481656,x=5.760748389455027 -color=green,shape=circle,flag=0,i=11628,u=0.7024909973441142,v=0.47502881219791715,w=0.4842624819433563,x=6.15740201181017 -color=red,shape=triangle,flag=1,i=11651,u=0.6389136656886427,v=0.9879034546079611,w=0.4527585622445751,x=5.867747214773206 -color=blue,shape=square,flag=0,i=11652,u=0.933381682410314,v=0.4513110963401843,w=0.5096623691323556,x=5.238611211712035 -color=green,shape=triangle,flag=0,i=11657,u=0.46144761961083647,v=0.3538475783105779,w=0.49870726886853095,x=5.3196302837939635 -color=yellow,shape=circle,flag=1,i=11685,u=0.8449966904024304,v=0.5070981101745116,w=0.5001667852213053,x=3.732928435147311 -color=green,shape=triangle,flag=1,i=11687,u=0.6772563427268082,v=0.21544631431493866,w=0.5019561571626965,x=5.31619891524488 -color=blue,shape=triangle,flag=0,i=11698,u=0.8848820237304224,v=0.009320939696153219,w=0.4843460557597541,x=6.288615093820109 -color=red,shape=circle,flag=1,i=11704,u=0.2532930709241966,v=0.3428809726162397,w=0.49804341460580354,x=3.857184741733857 -color=yellow,shape=circle,flag=1,i=11706,u=0.6235351648125035,v=0.585299949677482,w=0.49699588469369854,x=5.928003109455507 -color=red,shape=square,flag=1,i=11707,u=0.014558204062291136,v=0.19921504894386421,w=0.47695578762718704,x=3.4149863529399127 -color=yellow,shape=square,flag=1,i=11708,u=0.048244378828659285,v=0.2809558712937408,w=0.4709568341932725,x=4.420706623479959 -color=red,shape=triangle,flag=0,i=11710,u=0.20494397917669305,v=0.4262320810647471,w=0.45731113188615224,x=4.423002552014896 -color=yellow,shape=circle,flag=1,i=11726,u=0.45282366292121645,v=0.6647741644838494,w=0.4927926793367974,x=4.661809439673582 -color=green,shape=square,flag=1,i=11730,u=0.9906881228376359,v=0.9777942016481593,w=0.5079110438388657,x=4.338819691978291 -color=purple,shape=circle,flag=0,i=11734,u=0.42287055846265853,v=0.9882869130316426,w=0.5282827734537594,x=6.532314242063435 -color=red,shape=triangle,flag=1,i=11752,u=0.34383011667679386,v=0.6031852221586377,w=0.4695209466033571,x=3.984459717337193 -color=green,shape=square,flag=1,i=11763,u=0.9183820276561984,v=0.6690840570664534,w=0.5140245506141916,x=4.7409253195501515 -color=green,shape=square,flag=0,i=11767,u=0.9980026709735629,v=0.9899827733190545,w=0.5096223202039132,x=5.952455977819098 -color=red,shape=square,flag=0,i=11796,u=0.9479874833310005,v=0.834343027445699,w=0.4969871392454597,x=4.367186692110255 -color=red,shape=triangle,flag=0,i=11810,u=0.8066105662877066,v=0.7691536135774323,w=0.465643029832154,x=3.9914371935539728 -color=red,shape=triangle,flag=1,i=11818,u=0.2775306173073313,v=0.310875889416218,w=0.4653832299721089,x=4.601647026685676 -color=blue,shape=square,flag=0,i=11820,u=0.3986234307994264,v=0.11490444112384934,w=0.5043047773029952,x=5.235236020622918 -color=red,shape=circle,flag=0,i=11822,u=0.1562652272696856,v=0.10817354775735938,w=0.4926379151200919,x=6.938178596036544 -color=red,shape=circle,flag=0,i=11823,u=0.20795457468744316,v=0.23946683788624595,w=0.4898283085829625,x=4.189023959838033 -color=green,shape=square,flag=0,i=11827,u=0.5709288668323107,v=0.4697473555841214,w=0.5109635335955767,x=4.3514792424407664 -color=red,shape=triangle,flag=0,i=11837,u=0.7362412796046272,v=0.17758447605169292,w=0.470388376614015,x=5.734476797847964 -color=green,shape=circle,flag=0,i=11838,u=0.9394096652397737,v=0.8536155269641535,w=0.49327858557195275,x=5.653235497206928 -color=green,shape=square,flag=1,i=11844,u=0.07572527165339304,v=0.5798832020919857,w=0.5039524965605116,x=5.469468485704244 -color=green,shape=square,flag=1,i=11861,u=0.5189533342028887,v=0.01880180286971289,w=0.4953442604798373,x=5.12386157195204 -color=red,shape=square,flag=1,i=11878,u=0.980579950659443,v=0.4300954648186175,w=0.5061282471643798,x=5.7374403592120204 -color=purple,shape=circle,flag=0,i=11880,u=0.9135576118070077,v=0.5778536903449603,w=0.5402182044289588,x=4.731178645635094 -color=red,shape=square,flag=0,i=11884,u=0.15762614718843582,v=0.08208186127058492,w=0.509255648486443,x=2.877246262052175 -color=green,shape=triangle,flag=0,i=11905,u=0.9427780982901727,v=0.2822726998869619,w=0.5132467938139144,x=4.520472386485701 -color=red,shape=triangle,flag=1,i=11908,u=0.059358371495679574,v=0.7191292383130944,w=0.4819126119901219,x=4.520229349473795 -color=red,shape=triangle,flag=1,i=11922,u=0.05880192113588101,v=0.33145414147223107,w=0.4863267596429014,x=5.733256126532911 -color=red,shape=square,flag=0,i=11926,u=0.7068862355139671,v=0.7170568706731681,w=0.5087258896121807,x=4.603072869067202 -color=red,shape=circle,flag=1,i=11936,u=0.45238982329015276,v=0.5085615770278532,w=0.5015836518347339,x=2.271261911183687 -color=red,shape=triangle,flag=1,i=11937,u=0.19003791099127365,v=0.381443084578561,w=0.4798481676026286,x=4.722557073097453 -color=red,shape=triangle,flag=1,i=11953,u=0.5457659366927872,v=0.20647496257260112,w=0.4856727165653866,x=5.135026882914661 -color=red,shape=square,flag=0,i=11959,u=0.3451356777299144,v=0.782301962889177,w=0.512410753402933,x=4.688911190692649 -color=blue,shape=square,flag=0,i=11961,u=0.7124139056656043,v=0.8621419199293042,w=0.5001588278713436,x=5.791127598520412 -color=red,shape=square,flag=0,i=11995,u=0.34783605183672606,v=0.032302888090674275,w=0.5043983124513339,x=3.0317188474642567 -color=red,shape=triangle,flag=0,i=12010,u=0.7729719315576394,v=0.30049922969244836,w=0.4893167152155384,x=5.693226677965474 -color=red,shape=circle,flag=0,i=12020,u=0.2744061650207231,v=0.30248377776255525,w=0.502546296393573,x=3.867403836569691 -color=red,shape=triangle,flag=0,i=12027,u=0.04501409480558616,v=0.7549265836299452,w=0.49063433298390186,x=4.537008860790443 -color=yellow,shape=triangle,flag=1,i=12040,u=0.5566649253877446,v=0.4573445655321232,w=0.5323130019818018,x=5.970963386497712 -color=green,shape=triangle,flag=0,i=12054,u=0.4254817295258245,v=0.8748170051264729,w=0.5123524853234942,x=4.042414889832379 -color=red,shape=square,flag=0,i=12055,u=0.23543875758692723,v=0.25343933847289046,w=0.5099760587232518,x=5.776064510680494 -color=purple,shape=triangle,flag=0,i=12057,u=0.8519025346923821,v=0.6839852206805982,w=0.4963102645837585,x=6.866828187795584 -color=red,shape=square,flag=0,i=12063,u=0.00923931384134169,v=0.5375672051708866,w=0.5135738257161684,x=4.590367914195506 -color=red,shape=circle,flag=0,i=12075,u=0.18816975341851416,v=0.12209791531873972,w=0.4943234914402715,x=5.676649090268427 -color=green,shape=circle,flag=0,i=12076,u=0.32814442117828535,v=0.7296400228222215,w=0.4908674141550337,x=3.689452516163152 -color=green,shape=circle,flag=0,i=12079,u=0.8503269867409412,v=0.936071680503902,w=0.4893958325272159,x=4.176914190892412 -color=red,shape=triangle,flag=0,i=12080,u=0.304417644521224,v=0.12072407298416554,w=0.4824932904964195,x=4.483288986837734 -color=blue,shape=square,flag=1,i=12103,u=0.7805642873472752,v=0.6021578248473799,w=0.5057792095341139,x=2.9739880844327224 -color=red,shape=square,flag=1,i=12105,u=0.4460577291915605,v=0.5417740495785428,w=0.5101397145856149,x=5.0572329569199805 -color=orange,shape=square,flag=1,i=12110,u=0.45966776685191746,v=0.7646670171356208,w=0.4010923219092246,x=5.786150104427804 -color=blue,shape=circle,flag=0,i=12113,u=0.43968979742069225,v=0.8607996906473344,w=0.4974049569699694,x=5.837695133790341 -color=blue,shape=square,flag=0,i=12137,u=0.9434045187517408,v=0.274030853396236,w=0.502203210883063,x=4.19203204873216 -color=red,shape=circle,flag=1,i=12140,u=0.12010342788683448,v=0.06458670339028354,w=0.4937549695809898,x=6.713812678596761 -color=yellow,shape=square,flag=1,i=12141,u=0.5062086920078083,v=0.06784111786037528,w=0.4950362195602966,x=6.182068119699312 -color=red,shape=square,flag=0,i=12144,u=0.6178915767340124,v=0.40812033749505616,w=0.5134054287955381,x=3.057397299000543 -color=purple,shape=square,flag=0,i=12145,u=0.9301036698084061,v=0.1664640395494903,w=0.5126228731369876,x=5.321997603399074 -color=green,shape=triangle,flag=1,i=12170,u=0.3881534843843475,v=0.15297012294677814,w=0.5186299888768883,x=3.3475427503671114 -color=yellow,shape=square,flag=1,i=12179,u=0.376284735246494,v=0.006691551218347747,w=0.4991441252068821,x=4.398422927801676 -color=blue,shape=square,flag=0,i=12181,u=0.9451711208014877,v=0.6681813481587483,w=0.48831787318055037,x=7.171577580120623 -color=red,shape=square,flag=0,i=12182,u=0.7932552120427754,v=0.9040437711783676,w=0.5203952476755404,x=3.6348544885135237 -color=red,shape=circle,flag=0,i=12186,u=0.0712258925039464,v=-0.01048384499837035,w=0.49739297207963323,x=5.777276843835502 -color=red,shape=square,flag=0,i=12194,u=0.13777167814332203,v=0.5466858504389149,w=0.5199724413340178,x=3.5741650664449653 -color=red,shape=square,flag=0,i=12196,u=0.2954494488405188,v=0.4322243693054796,w=0.5139626813180235,x=5.600171210531258 -color=red,shape=square,flag=0,i=12197,u=0.22815055786123362,v=0.6247363759835414,w=0.5115657912113042,x=4.474262266164264 -color=red,shape=triangle,flag=0,i=12209,u=0.011558215130849536,v=0.6813096166913172,w=0.4920484798842238,x=4.937401503797912 -color=yellow,shape=circle,flag=1,i=12212,u=0.5936641645262978,v=0.4620350573757983,w=0.4989004291929008,x=5.306165823904028 -color=red,shape=triangle,flag=0,i=12221,u=0.7087595692961455,v=0.6832791598840698,w=0.4910108314613083,x=4.606169693489917 -color=blue,shape=triangle,flag=0,i=12223,u=0.8510146430273343,v=0.7168389538492936,w=0.5023850258593229,x=4.128003725145813 -color=red,shape=square,flag=0,i=12224,u=0.4274538589743495,v=0.6361645832418465,w=0.5170392933735131,x=4.4846096119647845 -color=purple,shape=circle,flag=1,i=12233,u=0.5134475909295445,v=0.18566671633448661,w=0.5448519268821536,x=3.596524324487605 -color=red,shape=triangle,flag=1,i=12235,u=0.27034222633662897,v=0.4463005217941033,w=0.4941692786712241,x=6.952954957628321 -color=green,shape=square,flag=0,i=12237,u=0.8710370193634492,v=0.8148800655806897,w=0.4837675081514471,x=5.205470293505575 -color=red,shape=square,flag=1,i=12238,u=0.35779992900062063,v=0.056369766250922826,w=0.5234328917932165,x=5.0337476519226945 -color=red,shape=circle,flag=0,i=12249,u=0.9030113247848618,v=0.8506564574230406,w=0.49549773169768996,x=5.864305798089799 -color=red,shape=triangle,flag=0,i=12254,u=0.9968044857248838,v=0.14785687196385533,w=0.49295293296623766,x=3.8013253941464176 -color=yellow,shape=square,flag=1,i=12256,u=0.8813136136947924,v=0.7036981129154224,w=0.5009114573079977,x=5.2335395542700995 -color=red,shape=circle,flag=0,i=12260,u=0.43290825891906914,v=0.521805455043792,w=0.49917033743429584,x=6.0435146425195905 -color=red,shape=triangle,flag=1,i=12262,u=0.8609109793010382,v=0.789098135698477,w=0.49306800262641864,x=4.695192938556527 -color=red,shape=triangle,flag=0,i=12272,u=0.5502944830733181,v=0.7139288515018252,w=0.4997725400931449,x=3.3269635277492076 -color=red,shape=circle,flag=0,i=12276,u=0.3470298189628759,v=0.377385582081882,w=0.4985325335096065,x=4.5896193469703155 -color=yellow,shape=square,flag=1,i=12297,u=0.5799236240742773,v=0.8612895494901701,w=0.4940982101160186,x=6.03608466854836 -color=red,shape=circle,flag=0,i=12298,u=0.05418741401466454,v=0.12416885273541382,w=0.4981795862533314,x=4.537078051703997 -color=red,shape=square,flag=0,i=12310,u=0.5682110943943911,v=0.85892217099607,w=0.5118894257025524,x=4.174863715344483 -color=yellow,shape=triangle,flag=1,i=12314,u=0.4301206717459879,v=0.8670561848391353,w=0.53381058364014,x=4.934396612619008 -color=red,shape=square,flag=0,i=12320,u=0.6182879435525621,v=0.5230543255252982,w=0.5205114604566122,x=5.627485435806179 -color=yellow,shape=square,flag=1,i=12329,u=0.6732390064779475,v=0.06536782556574938,w=0.4909241264020602,x=3.633715730391797 -color=purple,shape=triangle,flag=0,i=12331,u=0.056378972860580245,v=0.9345518095586507,w=0.52311290114093,x=6.642000583012488 -color=blue,shape=square,flag=0,i=12338,u=0.021659252915190108,v=0.9944553866323534,w=0.4702984591316464,x=5.432851743728047 -color=red,shape=triangle,flag=0,i=12362,u=0.13291700579187382,v=0.9590426237841152,w=0.5012301195140502,x=4.978245902341368 -color=red,shape=circle,flag=0,i=12365,u=0.42929685105018944,v=0.4451977210396489,w=0.5108724061659158,x=4.9123483651255695 -color=red,shape=circle,flag=1,i=12372,u=0.9193674657723226,v=0.9053240978019266,w=0.511461829910235,x=5.860032873469048 -color=green,shape=square,flag=0,i=12384,u=0.7103303607122681,v=0.540039717227922,w=0.48744491913965987,x=5.281189346839043 -color=blue,shape=triangle,flag=1,i=12393,u=0.9424545054038508,v=0.35028663558225404,w=0.4960435908412825,x=5.484406018909998 -color=blue,shape=circle,flag=1,i=12394,u=0.566389140860819,v=0.5030911981502101,w=0.4911517088010552,x=6.23798124481533 -color=blue,shape=square,flag=0,i=12403,u=0.009270333707540157,v=0.48265419088382044,w=0.4776403654387395,x=6.927005648273639 -color=green,shape=triangle,flag=0,i=12408,u=0.26026652184015175,v=0.5517657440959786,w=0.5190078976947085,x=4.552003607840779 -color=yellow,shape=circle,flag=1,i=12413,u=0.7357234098633864,v=0.4729012588892588,w=0.5023751350175498,x=3.2063614288720346 -color=red,shape=circle,flag=1,i=12417,u=0.23326783219864622,v=0.2804175839759428,w=0.5227630403633012,x=4.850308800048502 -color=yellow,shape=triangle,flag=1,i=12418,u=0.9296868462862925,v=0.5851442239400264,w=0.5344804009281637,x=5.7869946789495375 -color=purple,shape=square,flag=0,i=12420,u=0.05576505773219209,v=0.8827909825117362,w=0.518223252197535,x=2.8289555805429405 -color=red,shape=square,flag=0,i=12422,u=0.9254495812764103,v=0.020522825774678233,w=0.525883845353747,x=4.428687607326155 -color=red,shape=square,flag=0,i=12424,u=0.5477455357161356,v=0.8206769051934277,w=0.5269043847888704,x=4.549570179687992 -color=blue,shape=square,flag=1,i=12431,u=0.86919733477823,v=0.6016719217138693,w=0.47505040055378955,x=4.5505991532273615 -color=purple,shape=triangle,flag=0,i=12450,u=0.38932831028005355,v=0.5978324269701425,w=0.520508827958282,x=3.811899406983091 -color=red,shape=circle,flag=1,i=12458,u=0.22803129614510875,v=0.196234595447856,w=0.5189315357309688,x=2.7138850502471676 -color=blue,shape=triangle,flag=1,i=12464,u=0.8605308825186275,v=0.2086202140611736,w=0.49866823280126155,x=3.871755490814719 -color=yellow,shape=circle,flag=1,i=12494,u=0.3563675114731395,v=0.190633807291124,w=0.5045626988150675,x=3.8499595902757924 -color=red,shape=triangle,flag=0,i=12517,u=0.5588418947757484,v=0.7310743360594292,w=0.48799166937204047,x=3.369590248614523 -color=green,shape=square,flag=0,i=12523,u=0.5008395364935517,v=0.2954695726209686,w=0.479321354544725,x=4.9778413209738375 -color=red,shape=square,flag=0,i=12524,u=0.09929492623895952,v=0.40604810672259506,w=0.5049558223575824,x=3.5283735874972835 -color=blue,shape=triangle,flag=0,i=12542,u=0.9102204004144692,v=0.48535228972492994,w=0.501587166321046,x=6.280394317575749 -color=yellow,shape=square,flag=0,i=12545,u=0.7546628277632925,v=0.08197098913714151,w=0.48719007633744077,x=4.784685695215908 -color=purple,shape=triangle,flag=0,i=12547,u=0.517490985915425,v=0.6573923290840697,w=0.517729126078301,x=4.5272644772185915 -color=red,shape=triangle,flag=1,i=12558,u=0.44016190538135913,v=0.35049419620501454,w=0.48463502148104587,x=4.643038883386652 -color=blue,shape=circle,flag=0,i=12561,u=0.1671192884018161,v=0.6596993654960044,w=0.49559157704097595,x=6.326683259451191 -color=red,shape=circle,flag=0,i=12573,u=0.6798482749682002,v=0.7273133176332559,w=0.515865683296064,x=4.978158465173196 -color=blue,shape=circle,flag=0,i=12600,u=0.5963922619400469,v=0.08344823527076262,w=0.4887524343605998,x=4.057191889249201 -color=red,shape=square,flag=0,i=12636,u=0.20913558791154285,v=0.02218620690942419,w=0.5251404780140472,x=7.09890840078442 -color=red,shape=square,flag=1,i=12645,u=0.19602301027131042,v=0.3751115248607173,w=0.5173013180567451,x=4.708167379640014 -color=blue,shape=square,flag=1,i=12667,u=0.13473252993576534,v=0.39909188407580165,w=0.46927351034379794,x=4.877137364881301 -color=purple,shape=square,flag=0,i=12709,u=0.03672598560766016,v=0.49473315820401276,w=0.5283821113677094,x=5.9228628311301845 -color=yellow,shape=square,flag=1,i=12714,u=0.7498571202691773,v=0.2327267252456967,w=0.4913094346254017,x=5.223376626769959 -color=blue,shape=triangle,flag=1,i=12721,u=0.3491596241910907,v=0.9535680517463947,w=0.5067306121075658,x=3.502214119759598 -color=red,shape=square,flag=0,i=12727,u=0.3621028139959088,v=0.12510173857176532,w=0.527139777276255,x=3.7413326251681838 -color=red,shape=circle,flag=1,i=12731,u=0.7483954245887117,v=0.83911382278441,w=0.5092760129170182,x=4.4819053315172 -color=red,shape=circle,flag=0,i=12748,u=0.796482350446426,v=0.8365400523899128,w=0.5072365924705815,x=6.569715570818672 -color=red,shape=triangle,flag=0,i=12752,u=0.8654756538937693,v=0.12030101459043974,w=0.4798266464596761,x=5.11293399270295 -color=purple,shape=square,flag=0,i=12760,u=0.5190210485377224,v=0.5147627296650352,w=0.5310305279016496,x=6.90748787828668 -color=red,shape=square,flag=0,i=12763,u=0.98900569457842,v=0.39460308271675304,w=0.53387724881204,x=4.784005217288922 -color=yellow,shape=square,flag=1,i=12782,u=0.1679237147749727,v=0.6138059434481302,w=0.4917252923132335,x=5.5201768542963565 -color=yellow,shape=triangle,flag=1,i=12800,u=0.2529842987372265,v=0.20832517048507238,w=0.5308938522790781,x=4.317983927529439 -color=red,shape=square,flag=1,i=12802,u=0.1777238023705633,v=0.19873715559848193,w=0.528622920872539,x=4.676626456225272 -color=red,shape=circle,flag=1,i=12804,u=0.48862749584150966,v=0.5595497291187637,w=0.5186116160911766,x=3.7463529675400618 -color=green,shape=triangle,flag=0,i=12808,u=0.7332750177670676,v=0.07349544390959517,w=0.5134408018023058,x=4.221144061824084 -color=red,shape=square,flag=1,i=12819,u=0.01694973081935658,v=0.6006411137625514,w=0.5251809149832267,x=4.9526385454783375 -color=red,shape=square,flag=0,i=12823,u=0.7358511839620999,v=0.2075982076638021,w=0.5223974410859062,x=5.64665528828198 -color=red,shape=circle,flag=1,i=12838,u=0.6414518363655866,v=0.5971552526672049,w=0.5111913131378839,x=6.645730133109886 -color=red,shape=square,flag=0,i=12848,u=0.8991964912371576,v=0.7877715832772079,w=0.5182501072533066,x=6.793759763936873 -color=yellow,shape=square,flag=0,i=12852,u=0.13517523551179622,v=0.9368886242865431,w=0.5013990647531037,x=5.751401785078446 -color=purple,shape=square,flag=0,i=12862,u=0.9305811910292004,v=0.7808773982965442,w=0.5338464535126726,x=4.206512711987678 -color=yellow,shape=circle,flag=1,i=12874,u=0.8834737119841723,v=0.8827897263358067,w=0.5028709961554946,x=4.40358791075897 -color=orange,shape=square,flag=1,i=12896,u=0.19625924218455737,v=0.8012382218224551,w=0.39672750105935617,x=5.926406207357727 -color=green,shape=triangle,flag=1,i=12897,u=0.6467695640240094,v=0.2881124066335321,w=0.5076361351610983,x=6.97596121869987 -color=blue,shape=square,flag=1,i=12913,u=0.7192234533007247,v=0.6561045565834529,w=0.4755891412774963,x=6.538709933564054 -color=yellow,shape=triangle,flag=1,i=12926,u=0.7787829274007342,v=0.8666655366316399,w=0.5268238688543869,x=5.305460474128055 -color=purple,shape=circle,flag=0,i=12936,u=0.1922706389962523,v=0.3657640366304026,w=0.5345929270023603,x=6.584843335292457 -color=green,shape=square,flag=0,i=12938,u=0.2751318405813312,v=0.9996764373885353,w=0.4885851533254809,x=3.4032262956951556 -color=yellow,shape=square,flag=0,i=12956,u=0.22827815291835307,v=0.10940113926765138,w=0.49495945027982224,x=5.519192796553264 -color=red,shape=triangle,flag=0,i=12964,u=0.5277650090715932,v=0.9095188032621777,w=0.47769654400861283,x=7.356701377636051 -color=purple,shape=square,flag=0,i=12972,u=0.2272981374962454,v=0.6275803714815992,w=0.5280975803113913,x=3.1755285842416416 -color=purple,shape=square,flag=0,i=12976,u=0.9882272142903007,v=0.2543821364391944,w=0.5285708736540188,x=6.283369453252152 -color=yellow,shape=triangle,flag=1,i=13010,u=0.349745010538539,v=0.723745260971859,w=0.5220147909957564,x=5.362490418188354 -color=green,shape=square,flag=0,i=13025,u=0.5704032132620769,v=0.9520730893130085,w=0.4949742635007175,x=4.972595320121044 -color=yellow,shape=circle,flag=1,i=13030,u=0.8751019905366294,v=0.02854187087338156,w=0.5021941122434627,x=5.321770530720425 -color=yellow,shape=triangle,flag=1,i=13031,u=0.5187144465562195,v=0.18783350208908334,w=0.5219399178758146,x=4.685385105835355 -color=red,shape=square,flag=0,i=13050,u=0.008813010214251737,v=0.34911487791388507,w=0.5095449231613721,x=3.4303442336720704 -color=yellow,shape=triangle,flag=1,i=13052,u=0.6857004850205839,v=0.6431925825203684,w=0.5165401288654603,x=4.562951213675976 -color=red,shape=triangle,flag=0,i=13064,u=0.07613955243284565,v=0.03333761177749195,w=0.4699234376021442,x=4.688217784444799 -color=red,shape=circle,flag=0,i=13078,u=0.2860524243207774,v=0.34498087949241424,w=0.49848756793795024,x=6.448000652514857 -color=yellow,shape=circle,flag=1,i=13090,u=0.3815845684602467,v=0.07178736343547731,w=0.5022487513444382,x=7.615019377960697 -color=red,shape=square,flag=0,i=13096,u=0.6036560966868214,v=0.23587333775946517,w=0.5135337384296509,x=5.379789307509569 -color=blue,shape=circle,flag=0,i=13099,u=0.10006314778653913,v=0.7436569578778154,w=0.48161668141487796,x=4.723894604995649 -color=red,shape=circle,flag=1,i=13107,u=0.425900528621737,v=0.3824557861050103,w=0.4948976998364974,x=5.410527191225196 -color=red,shape=square,flag=0,i=13108,u=0.8494685992386175,v=0.7573687773377882,w=0.517353757970351,x=4.350640282866267 -color=red,shape=triangle,flag=1,i=13116,u=0.17453356860481373,v=0.41080027304525757,w=0.4781769846380775,x=4.633321441199356 -color=blue,shape=triangle,flag=1,i=13127,u=0.30256949909285336,v=0.8306436702065217,w=0.5168840336058484,x=5.050938701653189 -color=green,shape=square,flag=0,i=13137,u=0.6862398942853989,v=0.5084056603695462,w=0.5004703688991802,x=6.417792935960674 -color=blue,shape=circle,flag=0,i=13148,u=0.2902241989595149,v=0.4432537696404162,w=0.47820059351586996,x=5.585400330240989 -color=green,shape=triangle,flag=0,i=13156,u=0.5319755217308924,v=0.9227883390423964,w=0.5152632048179494,x=5.089260639238088 -color=yellow,shape=circle,flag=1,i=13162,u=0.5782826397828276,v=0.01106841619064336,w=0.5055812461707145,x=5.2379189849188466 -color=green,shape=circle,flag=0,i=13173,u=0.26944433608573093,v=0.39993866016419455,w=0.4775850697673785,x=4.989212261233978 -color=blue,shape=square,flag=1,i=13185,u=0.004726047126661137,v=0.5804128842508497,w=0.4675949465251732,x=4.905801459228339 -color=red,shape=circle,flag=1,i=13190,u=0.9814469186570991,v=0.9051553259597678,w=0.5030421911914653,x=5.250813683759118 -color=purple,shape=triangle,flag=0,i=13200,u=0.4698245094948157,v=0.5965706792499607,w=0.49929837552232353,x=6.2005610423044075 -color=green,shape=triangle,flag=0,i=13216,u=0.4332132855617774,v=0.7066356987490843,w=0.508416365967748,x=4.3605409205977415 -color=red,shape=triangle,flag=0,i=13235,u=0.8217685898297462,v=0.9523678510305673,w=0.49313686605591206,x=3.568563377430356 -color=red,shape=square,flag=0,i=13254,u=0.22629456609797405,v=0.19228930964424018,w=0.5176313767622042,x=2.9683441342720602 -color=green,shape=square,flag=0,i=13260,u=0.9703118455887261,v=0.980400158035085,w=0.507314503598571,x=6.593210458496963 -color=orange,shape=circle,flag=0,i=13269,u=0.48719118298482755,v=0.08728134510559582,w=0.581979025965587,x=4.470090606309107 -color=green,shape=triangle,flag=0,i=13283,u=0.7467117734824886,v=0.9357363071813254,w=0.5089081422555692,x=5.783746519480718 -color=blue,shape=triangle,flag=0,i=13294,u=0.9541134800876893,v=0.2907790160479963,w=0.5105280628007148,x=4.568129166475079 -color=red,shape=triangle,flag=0,i=13304,u=0.47059497054186417,v=0.20221586014032578,w=0.4908754467349471,x=4.058285075616765 -color=yellow,shape=square,flag=0,i=13351,u=0.8461799650924491,v=0.6318120946669082,w=0.46759705640243704,x=5.721962554758462 -color=orange,shape=square,flag=0,i=13352,u=0.8963503761031655,v=0.23211616464272544,w=0.40102363086037257,x=4.02914635043458 -color=green,shape=circle,flag=0,i=13383,u=0.9419490159169096,v=0.7318612168949039,w=0.48887296776473044,x=4.427041089797325 -color=yellow,shape=triangle,flag=1,i=13388,u=0.2089544690244033,v=0.9202091731573563,w=0.5152191352565799,x=6.592104641953245 -color=red,shape=square,flag=1,i=13397,u=0.10064756683173592,v=0.4489304388948713,w=0.51832962694166,x=6.65540557950357 -color=purple,shape=square,flag=0,i=13409,u=0.9371423291723412,v=0.29803040400991065,w=0.5121450138556084,x=3.4939064257351613 -color=red,shape=square,flag=1,i=13418,u=0.1537637870227615,v=0.9354750763256178,w=0.5290536415790195,x=5.643721411840539 -color=red,shape=square,flag=0,i=13422,u=0.38967470999925335,v=0.601346978579203,w=0.5291873656765577,x=4.850274346331086 -color=green,shape=triangle,flag=0,i=13441,u=0.8111105744137831,v=0.8053103144633811,w=0.5084229946930475,x=4.7202693919606995 -color=red,shape=triangle,flag=1,i=13456,u=0.5514532294861351,v=0.9754613900480172,w=0.49751009633149856,x=5.018938731576782 -color=orange,shape=square,flag=1,i=13463,u=0.46653710154903705,v=0.9112094509299352,w=0.4044947414716737,x=4.620647248764253 -color=red,shape=triangle,flag=0,i=13477,u=0.7422756428103977,v=0.4399188922170295,w=0.504434813634296,x=4.420271352827404 -color=blue,shape=circle,flag=0,i=13481,u=0.9959742894178187,v=0.033800662644015045,w=0.48010068515172655,x=4.051630176597462 -color=red,shape=triangle,flag=1,i=13499,u=0.7772647678975498,v=0.5378155166045918,w=0.5049499464855819,x=6.263251154295314 -color=green,shape=square,flag=0,i=13508,u=0.14006102985737723,v=0.13364635046450446,w=0.4953244024616738,x=6.871245375510823 -color=yellow,shape=square,flag=1,i=13515,u=0.7160989602828327,v=0.14369227023263675,w=0.4646232365446227,x=4.9168140198944945 -color=purple,shape=triangle,flag=0,i=13537,u=0.9083398402725494,v=0.7732847072104434,w=0.5049604899514466,x=6.825649522371393 -color=blue,shape=triangle,flag=0,i=13544,u=0.903945300780459,v=0.2098640713973361,w=0.5077875421457259,x=4.494071556685462 -color=blue,shape=square,flag=0,i=13557,u=0.7702659903491699,v=0.16818676874587557,w=0.4841220830226693,x=5.166116040298503 -color=red,shape=square,flag=1,i=13560,u=0.369773788976657,v=0.35129753108008,w=0.522666359297109,x=5.730119014371994 -color=yellow,shape=square,flag=1,i=13564,u=0.29270127333385076,v=0.31242974503053944,w=0.4666065227296944,x=7.517032597657452 -color=purple,shape=triangle,flag=0,i=13578,u=0.44198212325729924,v=0.2939370507575122,w=0.506214486615877,x=5.332459965725181 -color=blue,shape=square,flag=0,i=13585,u=0.5789547288569056,v=0.08924983433995748,w=0.48769550645450604,x=4.000380092051938 -color=red,shape=circle,flag=0,i=13595,u=0.9078413013162824,v=0.9395166451797881,w=0.5181781260199487,x=5.575184011179274 -color=red,shape=triangle,flag=0,i=13601,u=0.032260733763397775,v=0.4450003320073478,w=0.4982256424213833,x=5.202689687398945 -color=red,shape=circle,flag=0,i=13628,u=0.16918088818808807,v=0.22286939645087145,w=0.5152513471608811,x=4.60135386698301 -color=red,shape=triangle,flag=1,i=13629,u=0.5019930893225422,v=0.29416766831935826,w=0.49864286450099954,x=5.454346943058458 -color=green,shape=circle,flag=1,i=13649,u=0.40059225091173256,v=0.5586132550177968,w=0.4946359538305477,x=4.070457687939876 -color=red,shape=square,flag=1,i=13661,u=0.9700057189291136,v=0.8452003292357781,w=0.5388007475378267,x=5.5593949103649924 -color=red,shape=square,flag=1,i=13685,u=0.7776727898255269,v=0.9414778398913939,w=0.5373507383001258,x=5.542256741642599 -color=red,shape=circle,flag=0,i=13693,u=0.46099587766053374,v=0.5286382982993921,w=0.5178712490339592,x=5.7565853971533985 -color=green,shape=circle,flag=0,i=13697,u=0.6202180513956841,v=0.7822595276664809,w=0.503318243608966,x=6.948328867487852 -color=green,shape=circle,flag=0,i=13699,u=0.11687861550661938,v=0.3777206703009206,w=0.5074680940805018,x=6.617991278530166 -color=red,shape=square,flag=0,i=13703,u=0.5645226330165456,v=0.5884613851952621,w=0.5314538781080166,x=5.376940563011032 -color=purple,shape=square,flag=0,i=13716,u=0.4971525776095608,v=0.9922461167689713,w=0.4998689964188249,x=6.515899623801129 -color=red,shape=circle,flag=0,i=13720,u=0.5474848255161257,v=0.5305770839721894,w=0.5209318608656897,x=5.17085593640891 -color=orange,shape=triangle,flag=1,i=13722,u=0.3782297073205919,v=0.7187931018494899,w=0.6152346641224398,x=5.116776563773265 -color=purple,shape=circle,flag=0,i=13726,u=0.5865145111013352,v=0.7504016914330448,w=0.5261919546569646,x=7.3723518266128245 -color=red,shape=triangle,flag=0,i=13736,u=0.19613268001958084,v=0.4025071482245328,w=0.4909861422418182,x=6.278877610713334 -color=green,shape=square,flag=0,i=13758,u=0.2862208474141603,v=0.24792907196176872,w=0.5016757923516378,x=4.093190126142505 -color=red,shape=square,flag=1,i=13759,u=0.7530215061694446,v=0.3753700704839039,w=0.5136627056364026,x=3.792495153640998 -color=red,shape=circle,flag=0,i=13765,u=0.17741972819644558,v=0.2435601449127709,w=0.5289443213249622,x=3.297467647295553 -color=red,shape=square,flag=0,i=13781,u=0.5377782718430559,v=0.557401282980746,w=0.5239765837975974,x=5.771077644967007 -color=red,shape=square,flag=0,i=13791,u=0.7823965007048281,v=0.6943505339772328,w=0.5232571752008163,x=4.642075749587225 -color=green,shape=circle,flag=0,i=13848,u=0.5633321878333747,v=0.32096035349968677,w=0.5050195740412426,x=6.523171976547569 -color=red,shape=circle,flag=0,i=13851,u=0.9270836443970456,v=0.8695458595497157,w=0.5130425110853453,x=4.712921700518195 -color=red,shape=triangle,flag=0,i=13856,u=0.23943200938937625,v=0.7299432857736916,w=0.5100586499529426,x=3.529475063842637 -color=red,shape=square,flag=0,i=13860,u=0.6670834418885214,v=0.5823442620763544,w=0.5015830453385032,x=4.526046628481562 -color=red,shape=triangle,flag=0,i=13861,u=0.4322566532998203,v=0.5087918021514118,w=0.5173170447020637,x=5.632218341460665 -color=blue,shape=triangle,flag=0,i=13867,u=0.4805157109043937,v=0.47560598833481604,w=0.5088751385660572,x=5.300553387093035 -color=red,shape=square,flag=0,i=13872,u=0.013137849207726204,v=0.4237320753715379,w=0.5110521685695628,x=5.442478931496324 -color=purple,shape=triangle,flag=1,i=13879,u=0.8119819032214839,v=0.9364696232583868,w=0.5030354783309826,x=4.870192593182569 -color=red,shape=triangle,flag=0,i=13882,u=0.197045584040748,v=0.530818302394316,w=0.5207094114804968,x=6.0139877894697955 -color=red,shape=square,flag=0,i=13884,u=0.9031042965648081,v=0.08705372937335532,w=0.4988119042275611,x=5.6886405883157325 -color=blue,shape=triangle,flag=1,i=13885,u=0.23486497821444574,v=0.5977028809518629,w=0.5054570923456143,x=3.038315764650665 -color=red,shape=circle,flag=0,i=13892,u=0.2491984959690724,v=0.15019038320187167,w=0.5265357843177034,x=3.194853463355704 -color=yellow,shape=triangle,flag=1,i=13901,u=0.37792081136721123,v=0.6315517387588304,w=0.4958773064942009,x=5.880428670949502 -color=red,shape=triangle,flag=0,i=13918,u=0.8527700919776203,v=0.9259109312415792,w=0.5145725387941368,x=4.756830209576591 -color=blue,shape=triangle,flag=1,i=13932,u=0.44759548767184176,v=0.035434484379514464,w=0.5057763629705486,x=4.410575534025987 -color=green,shape=triangle,flag=0,i=13945,u=0.5058476575718424,v=0.503498364475034,w=0.4988914716043577,x=3.959636936310185 -color=blue,shape=triangle,flag=1,i=13961,u=0.7588755111385153,v=0.8081128330953042,w=0.5120779038485025,x=6.4321189606661 -color=red,shape=triangle,flag=1,i=13974,u=0.5146216895628355,v=0.463488416690244,w=0.5057712989879584,x=4.919711960172947 -color=yellow,shape=triangle,flag=1,i=14009,u=0.6947983492088922,v=0.18748558487792422,w=0.49714126331264546,x=3.9895877476262367 -color=purple,shape=square,flag=0,i=14021,u=0.9287108199752342,v=0.5777167666435793,w=0.4697775313994972,x=5.25856260280474 -color=purple,shape=circle,flag=0,i=14025,u=0.10018091166927201,v=0.9094457946335229,w=0.52235424713057,x=4.22768576807756 -color=yellow,shape=triangle,flag=1,i=14032,u=0.26323006731314846,v=0.5763933443708851,w=0.49501018907016114,x=5.175283692481721 -color=red,shape=circle,flag=0,i=14033,u=0.24107785439074925,v=0.14813511992443346,w=0.530076103655743,x=6.996285153704018 -color=yellow,shape=triangle,flag=1,i=14037,u=0.5010187906650703,v=0.13559285162329537,w=0.49346458556188927,x=3.5107561064547284 -color=purple,shape=circle,flag=0,i=14042,u=0.05537468236568588,v=0.9575056844169788,w=0.5234611734490178,x=4.226341242094729 -color=purple,shape=square,flag=0,i=14044,u=0.7747068464547636,v=0.9225342031316582,w=0.4652272969953895,x=4.645180221775256 -color=green,shape=triangle,flag=1,i=14045,u=0.6580938959616179,v=0.7737520170475047,w=0.4891501703869371,x=4.505602847942951 -color=red,shape=square,flag=0,i=14049,u=0.6627063941147188,v=0.8545208136983666,w=0.5100989876262721,x=6.096674807337865 -color=red,shape=square,flag=1,i=14065,u=0.5857772983969709,v=0.8801430207046448,w=0.49744243114899744,x=6.06550631778691 -color=red,shape=triangle,flag=1,i=14075,u=0.46496448900001963,v=0.5598179571337012,w=0.5134176412432347,x=7.4814395937427065 -color=orange,shape=triangle,flag=0,i=14078,u=0.8687397706039272,v=0.4868996536088652,w=0.6123050956157151,x=7.5200477870308005 -color=green,shape=triangle,flag=0,i=14092,u=0.9880046410537973,v=0.7676728421511271,w=0.49103330801913286,x=4.223556388922138 -color=green,shape=square,flag=1,i=14095,u=0.6141113468409892,v=0.9434561376170879,w=0.4889770873794551,x=6.025348578066428 -color=yellow,shape=triangle,flag=0,i=14112,u=0.46496585024767345,v=0.6301453362181888,w=0.5037916134773479,x=4.532418031614529 -color=red,shape=circle,flag=0,i=14118,u=0.03652010509822379,v=0.10035902003603757,w=0.5334046789775205,x=6.573984699433022 -color=yellow,shape=square,flag=1,i=14123,u=0.9513734938477925,v=0.27603368535478334,w=0.4805688832960833,x=7.778626010205239 -color=yellow,shape=square,flag=1,i=14127,u=0.9942065018265898,v=0.38948023991288017,w=0.48421306769203515,x=4.92452925704208 -color=green,shape=triangle,flag=0,i=14130,u=0.4969923552348652,v=0.5598345591310014,w=0.4897636973083939,x=4.427367256415264 -color=yellow,shape=triangle,flag=1,i=14134,u=0.910478233015974,v=0.9510471716682022,w=0.5044750030500602,x=4.119512435198779 -color=green,shape=circle,flag=0,i=14138,u=0.24286678957599617,v=0.3287092935333952,w=0.5067430913432592,x=4.306724280770815 -color=purple,shape=square,flag=0,i=14169,u=0.0002655214518428872,v=0.15396891895084863,w=0.4725892725504457,x=3.879709518721457 -color=blue,shape=square,flag=1,i=14182,u=0.14910591540192308,v=0.08192573260384939,w=0.5200025317692619,x=3.9924150397220246 -color=purple,shape=triangle,flag=0,i=14192,u=0.5196327866973567,v=0.7860928603468063,w=0.4964368415453642,x=4.899167143824484 -color=red,shape=square,flag=0,i=14198,u=0.9022358743682937,v=0.1802032827563611,w=0.4953767228360918,x=4.786262795418891 -color=green,shape=square,flag=1,i=14200,u=0.9947458080550922,v=0.2569501755634187,w=0.49243756888262175,x=3.7308350225093005 -color=purple,shape=square,flag=0,i=14203,u=0.09734336110031871,v=0.21901626767644156,w=0.4758254017090039,x=5.817512732665702 -color=red,shape=square,flag=0,i=14204,u=0.884564642190506,v=0.5763543308722057,w=0.4940934928193548,x=6.181335628957172 -color=purple,shape=square,flag=0,i=14205,u=0.004125602195031108,v=0.05321430693151308,w=0.4731197362471819,x=6.561064013233714 -color=red,shape=triangle,flag=0,i=14241,u=0.12868203144051626,v=0.0030225628890134804,w=0.5262271135710291,x=3.123899246741751 -color=red,shape=circle,flag=0,i=14246,u=0.10148553081173295,v=0.1339612715904494,w=0.5221170496304357,x=5.496289287733659 -color=red,shape=triangle,flag=1,i=14253,u=0.2120089224670827,v=0.7986499945852931,w=0.521784998982137,x=5.6634201426516135 -color=red,shape=triangle,flag=1,i=14268,u=0.15146444566253414,v=0.65791871007012,w=0.5198424601293512,x=4.392549807411798 -color=green,shape=square,flag=0,i=14272,u=0.8851823608373731,v=0.5089789369287248,w=0.4991071831888381,x=3.158657222232056 -color=yellow,shape=circle,flag=1,i=14281,u=0.2789053240270756,v=0.9090534232281638,w=0.5140980146223828,x=5.45647071580208 -color=red,shape=circle,flag=0,i=14290,u=0.5097405052024179,v=0.5041029683142759,w=0.5242051169057653,x=4.819743306409431 -color=purple,shape=circle,flag=0,i=14297,u=0.7947428527518005,v=0.3881703708096508,w=0.522427444575967,x=6.05534000029317 -color=red,shape=triangle,flag=0,i=14303,u=0.28416782619934855,v=0.06350555777253053,w=0.5085285453643593,x=6.55996735218059 -color=blue,shape=square,flag=1,i=14328,u=0.8155423000528911,v=0.6912227280319209,w=0.5102511256523973,x=4.57478249505884 -color=blue,shape=square,flag=1,i=14329,u=0.9760826951338114,v=0.25124876592230316,w=0.5095529156043155,x=7.087442691050007 -color=blue,shape=triangle,flag=1,i=14333,u=0.579686737751189,v=0.09902799524286565,w=0.4934126285207782,x=5.133174756142023 -color=green,shape=square,flag=1,i=14360,u=0.9168683455171529,v=0.5755568921836911,w=0.49846218390531355,x=5.147985460524783 -color=red,shape=triangle,flag=0,i=14364,u=0.4224395148550478,v=0.7585154661327256,w=0.5217501414466491,x=4.295667138519822 -color=red,shape=square,flag=0,i=14371,u=0.09121499143748579,v=0.8042966745450495,w=0.48215454460904383,x=6.17393521373408 -color=green,shape=square,flag=1,i=14381,u=0.30314308492664954,v=0.7584708740969923,w=0.508517100736907,x=2.963882010016347 -color=red,shape=square,flag=0,i=14397,u=0.5454189503033381,v=0.8888068105940029,w=0.47084227709772725,x=4.048438777827946 -color=blue,shape=circle,flag=0,i=14423,u=0.4181712466079194,v=0.8209287710482398,w=0.48659931742565604,x=4.391926930048069 -color=red,shape=triangle,flag=0,i=14425,u=0.9370428656273921,v=0.1812222313724986,w=0.5057835916976842,x=5.551701342497384 -color=purple,shape=square,flag=0,i=14438,u=0.5645412802083745,v=0.8679246560618926,w=0.48870219606413967,x=5.752207630085013 -color=red,shape=square,flag=0,i=14463,u=0.11918301072731197,v=0.05275510143846773,w=0.46619122720457223,x=5.725586133634786 -color=blue,shape=triangle,flag=1,i=14472,u=0.7302720268428897,v=0.07980285819832744,w=0.48290709781734625,x=5.848500169578638 -color=purple,shape=circle,flag=1,i=14492,u=0.7962356126602776,v=0.48105685844113766,w=0.5203139401671512,x=7.016191396527854 -color=red,shape=triangle,flag=0,i=14494,u=0.01212854627329596,v=0.11214983070216777,w=0.5132754902354534,x=5.3993805357678335 -color=red,shape=triangle,flag=1,i=14496,u=0.983541904397701,v=0.38994554176702,w=0.5111746327786401,x=6.755766147794492 -color=yellow,shape=circle,flag=1,i=14517,u=0.849866830009893,v=0.1377220040202335,w=0.5107063443534597,x=4.208319736321737 -color=blue,shape=triangle,flag=1,i=14521,u=0.9028140144457457,v=0.0072419946813584435,w=0.4802675263180019,x=5.754434079066073 -color=red,shape=circle,flag=0,i=14523,u=0.6984465647754432,v=0.7920528540094837,w=0.5245877189397763,x=4.179907521627238 -color=red,shape=square,flag=0,i=14526,u=0.9849328782355904,v=0.2864840698591318,w=0.4718275339637052,x=7.253623901141748 -color=red,shape=triangle,flag=1,i=14530,u=0.8926783209166769,v=0.8435143102133916,w=0.511019984414908,x=7.851768707388724 -color=green,shape=circle,flag=0,i=14532,u=0.14418906564710277,v=0.24720362522758532,w=0.4923618056032026,x=4.746626866797336 -color=red,shape=triangle,flag=0,i=14552,u=0.7123016643909355,v=0.08573345226885098,w=0.5049409771560193,x=3.8702519729405354 -color=purple,shape=circle,flag=0,i=14555,u=0.7881247957597121,v=0.99544664427954,w=0.511401258753662,x=6.45209261282207 -color=red,shape=square,flag=1,i=14556,u=0.8139498689596297,v=0.8692722469992163,w=0.4682179941760743,x=4.353719931144167 -color=red,shape=square,flag=0,i=14604,u=0.4249495382016051,v=0.7027022502679589,w=0.46509101575718004,x=6.373038410640301 -color=blue,shape=circle,flag=0,i=14607,u=0.03840312022946624,v=0.6376898058925444,w=0.48895143396370994,x=4.751765700768359 -color=blue,shape=triangle,flag=1,i=14616,u=0.8240179481581177,v=0.68683317204178,w=0.4936434564395495,x=5.19397603446981 -color=blue,shape=circle,flag=1,i=14633,u=0.9146067198859229,v=0.32917984208581086,w=0.49291722701703855,x=6.081940814725653 -color=red,shape=circle,flag=0,i=14650,u=0.93215869754079,v=0.9503845706324021,w=0.5108886987758767,x=3.1674552244314005 -color=yellow,shape=square,flag=1,i=14656,u=0.1716397683394062,v=0.2812511947883829,w=0.49349130699703886,x=5.623231416005445 -color=red,shape=square,flag=0,i=14709,u=0.6055516067077046,v=0.6770580988536724,w=0.4638158662115048,x=2.795668407356699 -color=purple,shape=triangle,flag=0,i=14719,u=0.31053388228140444,v=0.8087902453309674,w=0.5053809666882388,x=5.449792965610591 -color=red,shape=triangle,flag=1,i=14722,u=0.885983902300776,v=0.04338167501090617,w=0.5179683182470572,x=2.6815882750330355 -color=yellow,shape=triangle,flag=1,i=14765,u=0.5084344287647005,v=0.8630809028000475,w=0.500608452378707,x=6.401953315318596 -color=red,shape=triangle,flag=1,i=14773,u=0.47444630551956046,v=0.6310137874105359,w=0.5187282965028817,x=6.335173206953601 -color=red,shape=circle,flag=0,i=14794,u=0.9717864986784022,v=0.8968038334054035,w=0.5187101768752759,x=2.9453669767693476 -color=red,shape=triangle,flag=0,i=14813,u=0.3551620206225681,v=0.7733116511683221,w=0.5093590172857457,x=4.324833002386056 -color=yellow,shape=circle,flag=1,i=14832,u=0.47213281630529214,v=0.49296805884681205,w=0.5333347564474935,x=5.036572391045106 -color=blue,shape=square,flag=1,i=14835,u=0.4227183074665415,v=0.09683274749017745,w=0.5268413497109743,x=3.6594842667346925 -color=purple,shape=square,flag=0,i=14836,u=0.15813139741510351,v=0.2539421141756736,w=0.4869518089997193,x=5.163559493516648 -color=green,shape=triangle,flag=1,i=14843,u=0.38003108624109727,v=0.35730323583756707,w=0.4805526785811963,x=5.556106630834261 -color=red,shape=circle,flag=0,i=14847,u=0.9449193797119123,v=1.0075057280585997,w=0.5260100798455719,x=2.915031046104689 -color=blue,shape=triangle,flag=1,i=14853,u=0.20825749940394378,v=0.4640056781435975,w=0.48930578920643386,x=5.079973849941379 -color=green,shape=circle,flag=0,i=14857,u=0.6171063468992336,v=0.6700161392054423,w=0.5041583369048662,x=4.373782447048373 -color=purple,shape=square,flag=0,i=14866,u=0.5205815804383032,v=0.0030471655626180816,w=0.4906041430970303,x=4.183133422173761 -color=purple,shape=circle,flag=0,i=14872,u=0.9162351767525383,v=0.6108900727888027,w=0.5176947597314238,x=6.135111425729108 -color=orange,shape=triangle,flag=1,i=14874,u=0.5784371449667227,v=0.3273460250893254,w=0.6038914657817255,x=3.005209333609654 -color=red,shape=triangle,flag=1,i=14883,u=0.0441338048037756,v=0.07685514304714514,w=0.49817786236957623,x=6.396745629019118 -color=red,shape=triangle,flag=0,i=14884,u=0.5358364720949864,v=0.17870102293496515,w=0.5013563556163072,x=4.7061836789711515 -color=green,shape=circle,flag=0,i=14888,u=0.6433901398288796,v=0.723256067149859,w=0.5052324414327533,x=6.142146716544038 -color=red,shape=square,flag=1,i=14896,u=0.5308023477905606,v=0.11866285283759814,w=0.4633704925102731,x=4.737868333353272 -color=purple,shape=triangle,flag=0,i=14898,u=0.7800986870203719,v=0.23998073813992293,w=0.5014775988383656,x=3.141006771777843 -color=yellow,shape=square,flag=1,i=14899,u=0.9666761610516968,v=0.6828956724107826,w=0.49925404083245745,x=4.370065431949925 -color=yellow,shape=square,flag=1,i=14905,u=0.28038900627894836,v=0.8995022929871853,w=0.4987236881846455,x=4.725431433741935 -color=green,shape=triangle,flag=0,i=14909,u=0.43718934029556866,v=0.1587691485003473,w=0.48916274380494007,x=5.980542464457428 -color=blue,shape=circle,flag=1,i=14916,u=0.6127999424429291,v=0.13785341768538018,w=0.49416839669513263,x=5.504732688131258 -color=blue,shape=square,flag=0,i=14926,u=0.653706393978037,v=0.09518434113005991,w=0.5202500679270905,x=5.584469269622242 -color=red,shape=square,flag=0,i=14931,u=0.5682716889163334,v=0.16244711016158198,w=0.4788231163030483,x=4.280734789728041 -color=purple,shape=triangle,flag=0,i=14936,u=0.7088224781457672,v=0.443118701987686,w=0.5008785647356461,x=3.228486771484622 -color=yellow,shape=triangle,flag=1,i=14944,u=0.639919381963617,v=0.10279612347611944,w=0.4906602089908527,x=4.722854758956341 -color=red,shape=triangle,flag=0,i=14962,u=0.9523905742504042,v=0.6609376873998433,w=0.5045948997163691,x=6.700940568748937 -color=yellow,shape=triangle,flag=1,i=14968,u=0.2576802953811417,v=0.035106408653283294,w=0.49344843704159896,x=5.376983775840819 -color=orange,shape=circle,flag=0,i=14971,u=0.00123537823160913,v=0.08682338659633582,w=0.5629832470618805,x=5.565005676229032 -color=blue,shape=square,flag=0,i=14975,u=0.839651494852314,v=0.3979392800914997,w=0.5133908521883818,x=4.217827931670783 -color=red,shape=triangle,flag=1,i=14987,u=0.08238867613856005,v=0.5646773884752432,w=0.5050499811316836,x=4.051135582642282 -color=red,shape=square,flag=0,i=14991,u=0.06515598485003249,v=0.0062516600856381555,w=0.4803282546908886,x=2.735731481106074 -color=blue,shape=square,flag=1,i=14996,u=0.9899809059180887,v=0.7925442838246984,w=0.5111584505402456,x=7.248105823481322 -color=red,shape=circle,flag=0,i=14997,u=0.5600503100302892,v=0.547484361837022,w=0.5217974383062266,x=5.237620001555552 -color=red,shape=triangle,flag=0,i=15004,u=0.8911674185324588,v=0.30501982558163165,w=0.5056649592970451,x=5.594937799949894 -color=orange,shape=square,flag=1,i=15019,u=0.26704979254150596,v=0.05020948276570314,w=0.4046547386777556,x=3.50833423584467 -color=blue,shape=square,flag=1,i=15032,u=0.07626291191342116,v=0.9993762799575532,w=0.5084665202703759,x=7.599930387955021 -color=blue,shape=square,flag=1,i=15037,u=0.08450543351969575,v=0.7083592730009283,w=0.5066025009157761,x=4.101824218245984 -color=yellow,shape=triangle,flag=1,i=15047,u=0.02160588809822228,v=0.28381956178424583,w=0.48603349508971216,x=4.45822734152939 -color=green,shape=circle,flag=0,i=15062,u=0.586407200981746,v=0.7707706978930926,w=0.5072932452449916,x=4.310861183823518 -color=yellow,shape=square,flag=1,i=15069,u=0.08784767728557785,v=0.44320231025179124,w=0.5047122669375179,x=6.253108930741894 -color=red,shape=square,flag=1,i=15071,u=0.01808893569695258,v=0.6033400058803184,w=0.4963625608743614,x=5.676408204648928 -color=red,shape=triangle,flag=1,i=15078,u=0.5188445899471674,v=0.2054615782860223,w=0.5051081702877704,x=4.149809164238546 -color=blue,shape=square,flag=1,i=15088,u=0.0926751887349303,v=0.8575974785393341,w=0.5044046905115802,x=4.186681849097764 -color=green,shape=square,flag=0,i=15101,u=0.41216829983373626,v=0.2179541358341185,w=0.5031201088731738,x=6.438506161609307 -color=blue,shape=square,flag=1,i=15120,u=0.07814218751048518,v=0.017611194564903343,w=0.5173692197119569,x=5.6291495759830985 -color=red,shape=triangle,flag=0,i=15141,u=0.5839836293912036,v=0.7513576093695511,w=0.5045182683592248,x=7.116208678184901 -color=red,shape=triangle,flag=0,i=15145,u=0.5017162812700555,v=0.10542216954040406,w=0.5076140272722909,x=3.86112889258362 -color=red,shape=square,flag=0,i=15147,u=0.9630144759547907,v=0.5818194875098636,w=0.508225451222867,x=5.905251634865894 -color=purple,shape=square,flag=0,i=15155,u=0.6865054849633299,v=0.5656373357661751,w=0.5004484981383253,x=3.148680059493571 -color=red,shape=triangle,flag=0,i=15157,u=0.0798636843120577,v=0.5200051525880036,w=0.4981966695757328,x=5.411305125523746 -color=red,shape=circle,flag=0,i=15169,u=0.5475712093427035,v=0.5356832730230972,w=0.5233157934711181,x=4.334177690795344 -color=orange,shape=circle,flag=1,i=15198,u=0.1251493099854265,v=0.7473256465133866,w=0.5623911322731734,x=5.060336243273615 -color=red,shape=triangle,flag=1,i=15223,u=0.6684267910023817,v=0.8392604543470157,w=0.49361176598433076,x=4.0607633061476545 -color=red,shape=square,flag=1,i=15230,u=0.4273444325237651,v=0.174843786936679,w=0.5263527648879064,x=3.227467771218563 -color=red,shape=square,flag=1,i=15249,u=0.3787598732730033,v=0.7829831727114307,w=0.5222464333064276,x=5.816019939642196 -color=red,shape=square,flag=1,i=15252,u=0.3901545933278515,v=0.31070315021239137,w=0.5181834452960001,x=2.982092054779662 -color=red,shape=circle,flag=0,i=15255,u=0.9120094870970091,v=0.9813740008636757,w=0.5158701921078487,x=6.3789310652896205 -color=red,shape=circle,flag=0,i=15305,u=0.4464183994728518,v=0.42256561281989213,w=0.518999269233295,x=3.9340082222722237 -color=red,shape=triangle,flag=1,i=15313,u=0.6952114295322833,v=0.9444219775869979,w=0.4830149943508116,x=4.3272145034290865 -color=red,shape=triangle,flag=0,i=15330,u=0.12134833736624762,v=0.9930567573417352,w=0.48245707213158506,x=3.9631282674594015 -color=yellow,shape=square,flag=1,i=15334,u=0.39333742464735455,v=0.1554681210202501,w=0.5091068855271216,x=2.099045215760794 -color=yellow,shape=square,flag=1,i=15338,u=0.22300992387619245,v=0.16341182907341567,w=0.508758083967103,x=5.955059676059352 -color=red,shape=circle,flag=0,i=15398,u=0.3698975647561009,v=0.4044098003365939,w=0.5168819374333097,x=5.061536597109549 -color=green,shape=triangle,flag=0,i=15400,u=0.5178017082503106,v=0.8129724963030966,w=0.4744652134988754,x=4.070125186616651 -color=red,shape=square,flag=0,i=15409,u=0.022706372810424647,v=0.8602720415709226,w=0.5211763690503436,x=5.1642401750565154 -color=red,shape=square,flag=0,i=15420,u=0.3566305172259987,v=0.9317468119813289,w=0.5245711918651474,x=5.537410584198182 -color=red,shape=circle,flag=1,i=15429,u=0.4715419193369448,v=0.4601954093633077,w=0.5186490043572817,x=3.817513717598988 -color=orange,shape=triangle,flag=1,i=15432,u=0.3459437286892133,v=0.8294944511191099,w=0.6106267034178549,x=5.799144427135509 -color=blue,shape=triangle,flag=0,i=15451,u=0.542004310304193,v=0.39096310522820876,w=0.4869781863069116,x=4.780495603382041 -color=red,shape=triangle,flag=0,i=15495,u=0.6619965581838725,v=0.8324278360368469,w=0.5025508795167364,x=5.159649971148993 -color=yellow,shape=circle,flag=1,i=15496,u=0.49861119317248204,v=0.2517696396289262,w=0.5365441859017953,x=5.864840322817645 -color=red,shape=circle,flag=0,i=15510,u=0.11386588458115432,v=0.21058895524856036,w=0.5270659620153532,x=6.164853709933802 -color=blue,shape=square,flag=1,i=15515,u=0.1312072045610081,v=0.8113098528941513,w=0.508430889400386,x=4.780795121970809 -color=yellow,shape=triangle,flag=1,i=15523,u=0.9567230961328295,v=0.7833673727424829,w=0.47677068144729196,x=6.189454548308283 -color=blue,shape=triangle,flag=1,i=15528,u=0.3971554919191501,v=0.3527571547814464,w=0.4853951042177243,x=4.166376005034991 -color=yellow,shape=triangle,flag=0,i=15547,u=0.7383491744902775,v=0.7429696106353925,w=0.4827701585669367,x=6.2943201116537395 -color=red,shape=square,flag=0,i=15559,u=0.7195042917345941,v=0.021571195547008926,w=0.5209040755418666,x=4.862326357449001 -color=green,shape=triangle,flag=0,i=15571,u=0.09241811216262175,v=0.8156441098794263,w=0.4751145368157352,x=3.5107350397115717 -color=green,shape=circle,flag=0,i=15576,u=0.6045211936163736,v=0.4695583584388463,w=0.4968613575632019,x=3.5374538105516606 -color=red,shape=square,flag=0,i=15586,u=0.24734017270341624,v=0.46429832599716037,w=0.5153322803514591,x=4.089028004455932 -color=red,shape=square,flag=0,i=15587,u=0.3357918746850441,v=0.9913143775914488,w=0.5197651484946816,x=3.7596495952433417 -color=yellow,shape=square,flag=1,i=15595,u=0.9950497268959522,v=0.5058762315969073,w=0.5101049131860939,x=5.714446428794372 -color=red,shape=triangle,flag=0,i=15603,u=0.9942884186953432,v=0.48270741058008804,w=0.5072110422432571,x=4.709766889328525 -color=blue,shape=square,flag=0,i=15609,u=0.22610020400319486,v=0.07343477998960268,w=0.5049629817860245,x=5.0967426458698135 -color=red,shape=triangle,flag=1,i=15620,u=0.8369174954118124,v=0.24610261201796124,w=0.5025341724133885,x=3.311764984438249 -color=blue,shape=circle,flag=1,i=15625,u=0.4246995254499275,v=0.7737351100319132,w=0.5130141453459902,x=6.9219809003223185 -color=yellow,shape=triangle,flag=1,i=15627,u=0.5782309050173462,v=0.9334321281237464,w=0.4783628631054142,x=4.127115978333628 -color=blue,shape=square,flag=0,i=15640,u=0.2607501272150067,v=0.4436840748893439,w=0.49545042916181764,x=5.8221095062536925 -color=red,shape=triangle,flag=0,i=15662,u=0.7994227649583797,v=0.62077765210656,w=0.49717891865733305,x=4.173656675697485 -color=red,shape=square,flag=0,i=15676,u=0.04989642052714016,v=0.4777258033796561,w=0.5250816668534074,x=4.649008997299784 -color=red,shape=circle,flag=1,i=15679,u=0.4576676201388019,v=0.5112544358499069,w=0.5131145706611853,x=5.817248477957283 -color=purple,shape=triangle,flag=0,i=15683,u=0.3498400848855051,v=0.6030019170385277,w=0.47692032698793774,x=2.983906928830633 -color=green,shape=circle,flag=0,i=15694,u=0.27236785618696246,v=0.19170871868644357,w=0.48914269495088475,x=5.706680055662041 -color=red,shape=square,flag=0,i=15699,u=0.023503084200703128,v=0.10471979552007205,w=0.5258970669504822,x=4.2111126331215125 -color=green,shape=square,flag=0,i=15702,u=0.7071785578616405,v=0.6723988759647884,w=0.4968005538881674,x=4.518035820700271 -color=yellow,shape=triangle,flag=0,i=15708,u=0.4336051777290023,v=0.4525292947451417,w=0.48043792713808164,x=3.320257131947184 -color=purple,shape=circle,flag=0,i=15723,u=0.34992352669458926,v=0.19276286869640769,w=0.5325232572108609,x=5.306536206146193 -color=purple,shape=triangle,flag=0,i=15740,u=0.1945653968841844,v=0.09085936322480359,w=0.47368277204719483,x=6.372607396517254 -color=red,shape=circle,flag=0,i=15763,u=0.009932299416669066,v=-0.06451014087909289,w=0.5069666106637172,x=4.749498869367787 -color=yellow,shape=square,flag=1,i=15770,u=0.08152955087983449,v=0.15468358408489402,w=0.5139262104662475,x=3.8545545661956786 -color=blue,shape=circle,flag=1,i=15775,u=0.4834666438930203,v=0.9006942788906097,w=0.5214011493644019,x=4.416473243369009 -color=blue,shape=circle,flag=0,i=15780,u=0.1939322950705049,v=0.1985081272569087,w=0.5251202541490323,x=6.498516482547493 -color=yellow,shape=square,flag=1,i=15786,u=0.1712262295042275,v=0.27186087966750805,w=0.5114335148457115,x=5.574738537029383 -color=blue,shape=triangle,flag=1,i=15787,u=0.5323331248788394,v=0.09821673422323274,w=0.48539855457830294,x=4.0209042326472995 -color=blue,shape=circle,flag=1,i=15800,u=0.3812011341188266,v=0.041484109537629266,w=0.5251293597509595,x=6.887622387173594 -color=red,shape=triangle,flag=1,i=15803,u=0.033748370226377444,v=0.4711750714188022,w=0.5061162688959739,x=5.373795344628793 -color=blue,shape=triangle,flag=1,i=15811,u=0.7514087857345508,v=0.4834196353075204,w=0.48146260000496627,x=6.9420742165102185 -color=green,shape=triangle,flag=0,i=15812,u=0.24612392074151745,v=0.9182168804230652,w=0.47348245935172745,x=3.0664546470786433 -color=red,shape=triangle,flag=0,i=15844,u=0.0724090941756893,v=0.3266176648456305,w=0.487535025699818,x=4.914870156373522 -color=yellow,shape=square,flag=1,i=15850,u=0.17124067723267888,v=0.5506229570092481,w=0.5158445618782189,x=5.198513699946165 -color=yellow,shape=square,flag=1,i=15854,u=0.08248534364186932,v=0.3541209027335386,w=0.5134054823243431,x=4.426602897051975 -color=yellow,shape=triangle,flag=1,i=15856,u=0.2414160118125549,v=0.4496732915421796,w=0.4936445778656388,x=7.092079747699992 -color=yellow,shape=circle,flag=1,i=15864,u=0.7434834386165852,v=0.11676223388095575,w=0.5399775004974532,x=7.696682134988461 -color=green,shape=triangle,flag=1,i=15873,u=0.8317175879062484,v=0.06662307981988391,w=0.4755961173134097,x=4.149289340167659 -color=blue,shape=circle,flag=1,i=15882,u=0.8819234005380501,v=0.31444090657123047,w=0.5261191750041421,x=5.5606641225009215 -color=green,shape=square,flag=1,i=15903,u=0.07235666498638904,v=0.148354564410486,w=0.5005049277335725,x=3.543327491305058 -color=blue,shape=square,flag=0,i=15940,u=0.7828349509192136,v=0.871678820437661,w=0.49451038933479974,x=3.5923248589715997 -color=purple,shape=triangle,flag=0,i=15951,u=0.6860819003511519,v=0.1814278245572576,w=0.4794927254400799,x=3.208864964272895 -color=red,shape=square,flag=0,i=15955,u=0.8003070754464522,v=0.5749479993606467,w=0.5098731016062845,x=5.957604945420268 -color=red,shape=triangle,flag=0,i=15965,u=0.7147987757967604,v=0.13987108575516194,w=0.4992671722022492,x=4.403254491564382 -color=green,shape=square,flag=0,i=15970,u=0.6169011687279528,v=0.9898678110005391,w=0.4972698363449035,x=4.454162669804412 -color=purple,shape=triangle,flag=0,i=15986,u=0.9931091066584197,v=0.31661312143417375,w=0.47398735157249683,x=3.6066052590456614 -color=red,shape=square,flag=1,i=16006,u=0.6867610359697065,v=0.507610498524394,w=0.5124537172401294,x=5.522823349123399 -color=red,shape=square,flag=0,i=16037,u=0.39038053540378026,v=0.8417455077626104,w=0.5151235820737593,x=5.737086480829184 -color=red,shape=triangle,flag=0,i=16049,u=0.8392771571726819,v=0.00658144817429529,w=0.4959679105439668,x=4.323538416521468 -color=red,shape=triangle,flag=1,i=16054,u=0.18513306418580644,v=0.8542977470809716,w=0.49284172122844583,x=5.79632710038457 -color=green,shape=square,flag=0,i=16070,u=0.20118260052124137,v=0.8247099430266651,w=0.49547697102551935,x=6.588142150093525 -color=blue,shape=circle,flag=1,i=16074,u=0.34416719021029807,v=0.6202191150256388,w=0.5180377461130594,x=6.660325674155516 -color=red,shape=triangle,flag=0,i=16076,u=0.6438307311050486,v=0.35016718808172453,w=0.489062996881268,x=5.700374707236964 -color=red,shape=circle,flag=1,i=16077,u=0.5639382494899604,v=0.5446596958556292,w=0.4935413659977984,x=2.865999958892722 -color=yellow,shape=triangle,flag=0,i=16078,u=0.8704808697281591,v=0.05957843289143672,w=0.5028682718476899,x=3.0188461260254935 -color=red,shape=triangle,flag=0,i=16082,u=0.053365327860362854,v=0.9912416081091163,w=0.49775208051633135,x=4.702591301038054 -color=purple,shape=circle,flag=0,i=16086,u=0.04694416903551002,v=0.7592236332565199,w=0.5262201203837901,x=6.3791752087389435 -color=red,shape=square,flag=0,i=16087,u=0.26132763678507254,v=0.5607606371222695,w=0.5168835911823033,x=2.649601188871864 -color=red,shape=square,flag=0,i=16090,u=0.3400507466419064,v=0.38255979518418715,w=0.5213162229891568,x=2.6956329488167046 -color=red,shape=square,flag=0,i=16093,u=0.6593943690870726,v=0.7010289615498657,w=0.5256373993442685,x=5.774316010619184 -color=red,shape=circle,flag=0,i=16096,u=0.18615589711097635,v=0.21606761167369876,w=0.4878945650539288,x=2.776099139427691 -color=red,shape=square,flag=0,i=16105,u=0.9718748703203175,v=0.7908083944545664,w=0.5162287815514458,x=6.8949765609719575 -color=yellow,shape=triangle,flag=1,i=16114,u=0.2583367216370851,v=0.379467069737323,w=0.512250932144463,x=5.792278920400531 -color=red,shape=circle,flag=0,i=16127,u=0.7346525915213076,v=0.7250892134821284,w=0.49339996023614924,x=4.640289654683079 -color=red,shape=triangle,flag=1,i=16140,u=0.9574438414239587,v=0.5699177973645565,w=0.4949247876508358,x=5.251555836208156 -color=red,shape=triangle,flag=0,i=16141,u=0.4897477306855311,v=0.5156549960378174,w=0.49987639348711527,x=4.811537808181529 -color=red,shape=triangle,flag=0,i=16178,u=0.89800392509195,v=0.2580144819987862,w=0.49692118513426015,x=4.0294982342361925 -color=red,shape=square,flag=1,i=16181,u=0.7233474659703666,v=0.3392303014427521,w=0.5094232759404329,x=3.5418882933234457 -color=purple,shape=square,flag=0,i=16191,u=0.10209635801504768,v=0.6011677209175024,w=0.5167651178372316,x=5.192682714548251 -color=blue,shape=circle,flag=0,i=16229,u=0.4374272542886931,v=0.5894242709166924,w=0.5230775352669057,x=6.373857204331382 -color=red,shape=circle,flag=0,i=16249,u=0.13835731863340617,v=0.21611500948860513,w=0.5053199411285556,x=5.201769168244847 -color=yellow,shape=circle,flag=0,i=16256,u=0.14957695147412609,v=0.8555027647510632,w=0.5315644601641947,x=4.556975870400403 -color=red,shape=triangle,flag=1,i=16258,u=0.022187170738142026,v=0.3358024072006913,w=0.5068396826702423,x=4.831299635644792 -color=red,shape=square,flag=1,i=16263,u=0.3528403085787173,v=0.03685984223592509,w=0.5132513826044358,x=5.021860124253731 -color=red,shape=square,flag=0,i=16274,u=0.7883748235421791,v=0.9971508969805282,w=0.5116239619414613,x=5.690485030881441 -color=yellow,shape=triangle,flag=1,i=16276,u=0.923434585255116,v=0.12478266659611481,w=0.5074495438520203,x=4.785806381946745 -color=orange,shape=square,flag=0,i=16290,u=0.11565420469753684,v=0.361692773826765,w=0.4031605503087614,x=5.567366061297396 -color=red,shape=triangle,flag=1,i=16291,u=0.8796988140591834,v=0.35494707583212626,w=0.5077821331045622,x=7.142771835059627 -color=red,shape=triangle,flag=1,i=16305,u=0.8003826486203692,v=0.2814788021217849,w=0.5086043890539098,x=4.204651269441825 -color=red,shape=triangle,flag=0,i=16319,u=0.7880334263380261,v=0.5467556956126609,w=0.5071321058821943,x=6.212412030417991 -color=red,shape=triangle,flag=0,i=16335,u=0.035466580346306786,v=0.8440753383804791,w=0.5120773852172638,x=5.484198453750779 -color=blue,shape=triangle,flag=1,i=16358,u=0.8704798610241631,v=0.004234331182726758,w=0.4834610009721155,x=5.110536905890522 -color=yellow,shape=triangle,flag=1,i=16368,u=0.16722880094202985,v=0.5331665886741648,w=0.5157861793920647,x=3.5322031943831127 -color=red,shape=circle,flag=1,i=16375,u=0.3703855562429845,v=0.32947511455390815,w=0.5202030954426552,x=3.585167834817448 -color=red,shape=square,flag=1,i=16376,u=0.05904084002890608,v=0.26743060206617064,w=0.5099220775467259,x=6.311773927940631 -color=purple,shape=square,flag=0,i=16382,u=0.09967917895885192,v=0.21041935252986776,w=0.5273472954423297,x=5.032566824604894 -color=yellow,shape=circle,flag=1,i=16386,u=0.36498035473447876,v=0.6918375583976498,w=0.5364254815654066,x=5.632016879708189 -color=purple,shape=circle,flag=0,i=16396,u=0.8814059033154457,v=0.8237405564097807,w=0.5179644729193985,x=3.230307846779313 -color=yellow,shape=circle,flag=1,i=16401,u=0.99992313390574,v=0.3687646378408269,w=0.5333628931416158,x=5.96973184099635 -color=yellow,shape=triangle,flag=1,i=16406,u=0.8705483726379302,v=0.635717001186378,w=0.5176043232070217,x=8.277785148405325 -color=purple,shape=circle,flag=0,i=16412,u=0.9810618295911512,v=0.3357196242879985,w=0.5196718956581952,x=3.1066968216377204 -color=blue,shape=square,flag=1,i=16414,u=0.2185728190087145,v=0.9544337791387105,w=0.49913608886427385,x=6.209146397062262 -color=yellow,shape=triangle,flag=1,i=16417,u=0.09377810352804183,v=0.2476771066567658,w=0.512766464399817,x=4.4662569132323515 -color=red,shape=triangle,flag=0,i=16418,u=0.07218845329751722,v=0.2724171141092393,w=0.5205374098493715,x=3.381259366623943 -color=red,shape=triangle,flag=1,i=16424,u=0.5265377001205992,v=0.9831435482782511,w=0.5152972342892527,x=4.65230423340359 -color=blue,shape=triangle,flag=1,i=16429,u=0.6924068005202895,v=0.42471034602340607,w=0.48067755082778935,x=5.074324771783864 -color=green,shape=square,flag=1,i=16439,u=0.8843533910982385,v=0.6741814580467207,w=0.49960752542234205,x=5.80365741837183 -color=red,shape=circle,flag=0,i=16453,u=0.8577252485380948,v=0.8746765042352258,w=0.5333673223790014,x=6.7169125788696595 -color=blue,shape=square,flag=1,i=16456,u=0.9497528508796864,v=0.4492355758758799,w=0.5004988452896145,x=4.274697133447624 -color=orange,shape=triangle,flag=1,i=16465,u=0.8592782919029369,v=0.09695003443374672,w=0.5954823139158727,x=6.360133284119576 -color=blue,shape=square,flag=0,i=16468,u=0.22255129450047106,v=0.7468829366313168,w=0.4960209365540604,x=5.6865733367267834 -color=red,shape=square,flag=0,i=16472,u=0.22458948465907036,v=0.2721667664598685,w=0.5191019318244613,x=4.5526101222469455 -color=red,shape=circle,flag=0,i=16477,u=0.8631484426860168,v=0.9252436743177017,w=0.5342977530901505,x=6.392483029809245 -color=red,shape=circle,flag=1,i=16486,u=0.08462299404912799,v=0.017882956141416176,w=0.5327918958695028,x=4.260544072589946 -color=green,shape=circle,flag=0,i=16495,u=0.2596432122992507,v=0.7503298137323392,w=0.46929294123799264,x=5.550315151041893 -color=red,shape=square,flag=0,i=16497,u=0.053864179294253134,v=0.37353471823671136,w=0.5086405862162909,x=3.0547295088360613 -color=purple,shape=square,flag=0,i=16519,u=0.0994964767490375,v=0.14001067474429596,w=0.5174199439811942,x=4.621760714599228 -color=blue,shape=triangle,flag=1,i=16521,u=0.7879513768052773,v=0.8916704038169382,w=0.4797287034424058,x=4.279134665575557 -color=red,shape=circle,flag=0,i=16541,u=0.23872149124570918,v=0.24014661208119284,w=0.5437358846331318,x=3.1929060908341262 -color=orange,shape=triangle,flag=0,i=16587,u=0.5234694537217567,v=0.4605815096186735,w=0.58971963422156,x=3.187375123982554 -color=blue,shape=circle,flag=1,i=16603,u=0.6108133376599876,v=0.498712292828957,w=0.5135116718077685,x=4.519052492771044 -color=blue,shape=triangle,flag=1,i=16607,u=0.6797279981350438,v=0.12708162731226424,w=0.4817873238140527,x=5.368460523725744 -color=purple,shape=square,flag=0,i=16633,u=0.9942938259681083,v=0.44987288755072596,w=0.5255313084604537,x=5.835669669309084 -color=red,shape=triangle,flag=0,i=16644,u=0.9373771361562737,v=0.0877266080535285,w=0.5085159396037321,x=4.432721764652215 -color=red,shape=square,flag=0,i=16654,u=0.8735959361937571,v=0.2288162095854429,w=0.5127730057985358,x=4.492018245909538 -color=green,shape=triangle,flag=0,i=16657,u=0.9523858792126222,v=0.6794330346162207,w=0.4926446323722373,x=4.073198201688311 -color=red,shape=triangle,flag=1,i=16661,u=0.09189711069479922,v=0.8968558084908382,w=0.5068814878316061,x=5.0919613524662735 -color=blue,shape=triangle,flag=1,i=16670,u=0.8465877539470525,v=0.5652719171228668,w=0.487599679525874,x=4.05809980725319 -color=red,shape=triangle,flag=1,i=16679,u=0.16824077286349426,v=0.5881843630376156,w=0.5074803693891908,x=4.901239770209373 -color=yellow,shape=square,flag=1,i=16680,u=0.05182067070226637,v=0.07999705243584687,w=0.5204877982958585,x=5.8133383056361465 -color=blue,shape=square,flag=0,i=16705,u=0.4040460796776735,v=0.6043860761736015,w=0.5206421004107462,x=3.94536710062723 -color=red,shape=square,flag=1,i=16713,u=0.6132315984041578,v=0.7243914763704151,w=0.5138976351491796,x=5.457628945501302 -color=red,shape=circle,flag=0,i=16714,u=0.794219204918928,v=0.8709905063415768,w=0.5306588792724057,x=4.6300459187906515 -color=red,shape=square,flag=0,i=16728,u=0.17489634348845018,v=0.32291780950981286,w=0.5227342356819406,x=5.087670460713631 -color=blue,shape=square,flag=0,i=16729,u=0.9209555241015954,v=0.3864332210188094,w=0.5258252607739968,x=5.473074462749345 -color=blue,shape=circle,flag=1,i=16744,u=0.8571647326722809,v=0.12889376856375323,w=0.5136883723307814,x=4.336452905483142 -color=blue,shape=square,flag=1,i=16783,u=0.09974385090654347,v=0.7243899920872646,w=0.5353718443278438,x=4.431057737383438 -color=yellow,shape=circle,flag=1,i=16802,u=0.48655769279810934,v=0.7679185924679897,w=0.5247690629047864,x=5.7177527335448985 -color=red,shape=triangle,flag=1,i=16807,u=0.7204835603717645,v=0.9998431270283542,w=0.49680950152592795,x=7.163473415334352 -color=blue,shape=circle,flag=0,i=16814,u=0.27168186677888084,v=0.3083809001154564,w=0.518715814666991,x=3.1182534774139 -color=blue,shape=square,flag=1,i=16830,u=0.8689599747920659,v=0.6238375592925198,w=0.532460141808821,x=4.764105132197954 -color=red,shape=triangle,flag=0,i=16850,u=0.7274777926556241,v=0.4405545546118679,w=0.4948858108303919,x=5.170674024795059 -color=green,shape=triangle,flag=0,i=16856,u=0.9234003638906336,v=0.32686258354902686,w=0.48499546410968025,x=5.348453682608363 -color=red,shape=circle,flag=0,i=16866,u=0.5872965561599752,v=0.6720215212824586,w=0.5098523081919161,x=3.8787153834472448 -color=purple,shape=square,flag=0,i=16869,u=0.15168367840248909,v=0.8038573574438963,w=0.5218043909197505,x=6.48966366518547 -color=yellow,shape=circle,flag=1,i=16883,u=0.46750811189195696,v=0.9587424582053815,w=0.5209327909101931,x=3.80472327784312 -color=blue,shape=square,flag=0,i=16906,u=0.4417072858160903,v=0.36653760377856737,w=0.5335574644876531,x=4.926978701392438 -color=green,shape=triangle,flag=1,i=16907,u=0.4552944519405542,v=0.9448302570126156,w=0.48221941097524135,x=6.682936943083757 -color=red,shape=square,flag=1,i=16909,u=0.5959455084648746,v=0.06934870451273956,w=0.5174010585456551,x=5.812162827931043 -color=red,shape=circle,flag=0,i=16917,u=0.6298891229029142,v=0.6674656007390151,w=0.510336491650564,x=4.87015869498476 -color=blue,shape=triangle,flag=1,i=16928,u=0.4647596949594861,v=0.9788328526518476,w=0.4902231571615034,x=5.6158564854131 -color=purple,shape=square,flag=0,i=16932,u=0.5053424214209484,v=0.2190629477764645,w=0.530529101584259,x=4.94918813152563 -color=red,shape=triangle,flag=1,i=16958,u=0.44668695960118787,v=0.7330455454155936,w=0.4995256554394724,x=5.889024893119404 -color=red,shape=square,flag=1,i=16985,u=0.8449830715352793,v=0.21611575288156937,w=0.5182155074717697,x=5.925498285819928 -color=blue,shape=triangle,flag=1,i=17008,u=0.926958109999739,v=0.5342113765863877,w=0.49099023445820233,x=6.154341941941381 -color=purple,shape=triangle,flag=0,i=17023,u=0.9288825305316942,v=0.939341980818594,w=0.4929857040215251,x=3.548292623583446 -color=purple,shape=circle,flag=0,i=17035,u=0.9626625199225323,v=0.49321103995611204,w=0.5184648090893013,x=6.252167303074259 -color=yellow,shape=triangle,flag=1,i=17049,u=0.863185288184129,v=0.9824102452101089,w=0.5049890040216818,x=4.612167244335764 -color=red,shape=triangle,flag=0,i=17061,u=0.5958352128180107,v=0.8654861575613624,w=0.4972861186770385,x=4.301212412021034 -color=yellow,shape=triangle,flag=1,i=17074,u=0.6891109963670059,v=0.5598487053136425,w=0.5081804163010131,x=6.177650166306869 -color=red,shape=square,flag=1,i=17079,u=0.04444696494555278,v=0.40659666836302055,w=0.5019557737150733,x=5.016102424504741 -color=blue,shape=square,flag=1,i=17090,u=0.43533678167163514,v=0.6234199774564234,w=0.53043232462496,x=4.247318741992618 -color=yellow,shape=triangle,flag=1,i=17099,u=0.4885033103840972,v=0.8618985785584992,w=0.5103885187780002,x=5.86898618586082 -color=red,shape=circle,flag=0,i=17100,u=0.45903078371197326,v=0.41344786451110754,w=0.5001877573908404,x=3.1045092556740284 -color=red,shape=square,flag=1,i=17107,u=0.6524749145350351,v=0.4750682813895676,w=0.49587389900191603,x=5.571701325686253 -color=red,shape=square,flag=1,i=17110,u=0.13288382833222712,v=0.12652363890301355,w=0.4898886316409854,x=4.192329442381407 -color=purple,shape=triangle,flag=0,i=17132,u=0.9165693859199926,v=0.5990663759565618,w=0.48175339238838666,x=5.036858802932152 -color=green,shape=square,flag=0,i=17139,u=0.4969531680297712,v=0.6069793187187434,w=0.4853536293778346,x=3.617017936590416 -color=red,shape=circle,flag=1,i=17151,u=0.7673811559323066,v=0.7118863466073637,w=0.5000403901181234,x=3.2083771681535356 -color=red,shape=circle,flag=0,i=17159,u=0.26580652627237067,v=0.2760331671608922,w=0.49736425965449216,x=7.630871059376367 -color=blue,shape=circle,flag=1,i=17168,u=0.11013777448241957,v=0.9017110889256439,w=0.5047214420595714,x=3.6979178360614355 -color=yellow,shape=triangle,flag=1,i=17176,u=0.1331561035367932,v=0.2717369158720261,w=0.5135247227207125,x=1.9826667878965287 -color=blue,shape=triangle,flag=1,i=17189,u=0.9281915226809081,v=0.8567656494580272,w=0.4819063291682055,x=3.3700363405597096 -color=blue,shape=triangle,flag=0,i=17190,u=0.6560741835852083,v=0.9081115707455537,w=0.4843280261261515,x=4.61692007821373 -color=blue,shape=square,flag=0,i=17200,u=0.2573855469804952,v=0.052817807293260244,w=0.525614877145105,x=4.735408017435302 -color=red,shape=circle,flag=0,i=17204,u=0.9529616854463476,v=0.9297714206749162,w=0.5006966346960369,x=3.6965341674164436 -color=red,shape=circle,flag=1,i=17207,u=0.004535619454162698,v=-0.05728835919198161,w=0.4971310379335846,x=7.153721864285352 -color=red,shape=square,flag=0,i=17210,u=0.8822273632153151,v=0.653081844504803,w=0.5103419129447917,x=5.933332419607486 -color=red,shape=square,flag=0,i=17220,u=0.06669370736214342,v=0.36773747526761646,w=0.5079545366368898,x=6.210850232395764 -color=red,shape=triangle,flag=1,i=17245,u=0.6907567019266935,v=0.8606919751762712,w=0.48528181221837885,x=6.434699035200111 -color=red,shape=square,flag=1,i=17268,u=0.43846825973682,v=0.43124472691049043,w=0.514703836447414,x=5.080515361652981 -color=red,shape=square,flag=1,i=17275,u=0.006589188721299433,v=0.37588589051866106,w=0.5207165072910435,x=4.709114444836948 -color=green,shape=square,flag=0,i=17281,u=0.3192135829024829,v=0.3345720873057323,w=0.48941869913768826,x=6.569837798036416 -color=purple,shape=square,flag=1,i=17292,u=0.204977260756821,v=0.6371111201307692,w=0.5165373809591253,x=5.949163083044027 -color=yellow,shape=circle,flag=0,i=17293,u=0.597701461792648,v=0.35670266654168226,w=0.5058418665637808,x=3.7766931996225903 -color=red,shape=square,flag=0,i=17295,u=0.375466118901559,v=0.838530994982027,w=0.5184181346321209,x=5.761396597570934 -color=red,shape=square,flag=0,i=17300,u=0.2749973152860442,v=0.6120818076642955,w=0.5141722363816444,x=4.679835906439275 -color=green,shape=square,flag=0,i=17303,u=0.7952509358369487,v=0.11352179140199681,w=0.4877564007123762,x=6.044010973968475 -color=green,shape=triangle,flag=0,i=17315,u=0.5577754420142698,v=0.537015921693912,w=0.49216668978034595,x=5.25780930103903 -color=yellow,shape=circle,flag=1,i=17320,u=0.9298083801971766,v=0.2691936837615315,w=0.5074773323840887,x=5.943788739477523 -color=purple,shape=square,flag=0,i=17348,u=0.26844209430062005,v=0.16722149122350805,w=0.5171910939460402,x=5.529631800085454 -color=orange,shape=square,flag=0,i=17353,u=0.6236127964764546,v=0.824622233618583,w=0.41038412374955086,x=6.382606011640546 -color=blue,shape=circle,flag=0,i=17376,u=0.1289604180587025,v=0.7215540643216468,w=0.5124884412680788,x=4.104493916422971 -color=red,shape=circle,flag=1,i=17380,u=0.6960585098536233,v=0.7098281225752464,w=0.5065685553531767,x=4.747498559858811 -color=green,shape=square,flag=1,i=17388,u=0.14324020994482833,v=0.5477745931446888,w=0.4989466355760404,x=5.29301077071268 -color=green,shape=triangle,flag=0,i=17410,u=0.302256164969382,v=0.40827321598576705,w=0.48916041427608326,x=5.458618386292095 -color=yellow,shape=square,flag=1,i=17418,u=0.9989470669439893,v=0.8094609968758872,w=0.5220486909460273,x=5.606017207655145 -color=red,shape=triangle,flag=0,i=17422,u=0.49667485051740135,v=0.4410426190022123,w=0.4943920363122078,x=3.619905844571345 -color=green,shape=square,flag=0,i=17424,u=0.8535149065150077,v=0.17767917459805938,w=0.5053336928992425,x=4.987232980405251 -color=green,shape=circle,flag=0,i=17438,u=0.46711743492681324,v=0.7703705946909739,w=0.49946818840753443,x=6.944800092813793 -color=red,shape=triangle,flag=0,i=17441,u=0.3466592821905483,v=0.44613535018116524,w=0.4906961223719835,x=6.394956488950935 -color=red,shape=circle,flag=1,i=17444,u=0.35743135948632554,v=0.3931581158914216,w=0.5134829232936834,x=3.9386325934478816 -color=red,shape=circle,flag=0,i=17446,u=0.5994562009454839,v=0.6863393192150941,w=0.5177171005455358,x=3.5438057933320373 -color=red,shape=circle,flag=0,i=17452,u=0.9300393186700822,v=0.9730629946838242,w=0.5220100199772015,x=3.3574421162023618 -color=red,shape=triangle,flag=0,i=17462,u=0.9357964970459822,v=0.6974780997752765,w=0.49445737270561896,x=4.436924571862353 -color=yellow,shape=circle,flag=1,i=17463,u=0.19037117794694747,v=0.9462141857495838,w=0.5153512008271607,x=4.902176365027439 -color=green,shape=triangle,flag=1,i=17466,u=0.1974759436973993,v=0.6364433286063547,w=0.4875143524872009,x=6.070376328639818 -color=green,shape=triangle,flag=0,i=17470,u=0.011961258528259244,v=0.12833681307230294,w=0.49018819964701815,x=5.0097821956277615 -color=yellow,shape=square,flag=1,i=17491,u=0.2625002521574934,v=0.5268331696227,w=0.5153392727463008,x=6.127926832835439 -color=green,shape=circle,flag=0,i=17492,u=0.9183950271268285,v=0.28068213253221996,w=0.4982074271406311,x=3.4863064339772607 -color=red,shape=circle,flag=0,i=17496,u=0.5137285852430064,v=0.6121108763932952,w=0.5221909201857186,x=3.9867497508876255 -color=red,shape=circle,flag=0,i=17498,u=0.23132835434718124,v=0.16657327624206708,w=0.5240162454329246,x=6.211143736207306 -color=red,shape=triangle,flag=1,i=17499,u=0.3311507660196149,v=0.3072911451592233,w=0.4930352684774543,x=2.744361824185837 -color=blue,shape=square,flag=0,i=17507,u=0.689998439847817,v=0.17086757912137107,w=0.5314746114316544,x=4.226377913206856 -color=red,shape=triangle,flag=0,i=17514,u=0.3122803867641395,v=0.005530005742226951,w=0.4888479500186243,x=4.466384245256837 -color=red,shape=square,flag=0,i=17524,u=0.18721443249478764,v=0.5816600272569691,w=0.5092791481622222,x=6.725078049147522 -color=blue,shape=triangle,flag=1,i=17527,u=0.3256859367244205,v=0.7318787467561717,w=0.46723352798229956,x=4.142854655749216 -color=purple,shape=circle,flag=0,i=17546,u=0.720103476288958,v=0.27665638084450617,w=0.5184743700312244,x=3.8680365751931505 -color=orange,shape=triangle,flag=0,i=17550,u=0.136909765806981,v=0.7962599494612302,w=0.5759166080531287,x=4.891221168718161 -color=red,shape=circle,flag=0,i=17570,u=0.8409133535371011,v=0.830377583821616,w=0.5202413542184081,x=4.004141027021977 -color=red,shape=circle,flag=0,i=17575,u=0.47922843472128906,v=0.4801391717474627,w=0.5159806542454041,x=6.229308735970785 -color=red,shape=circle,flag=1,i=17593,u=0.6520460550560919,v=0.7012031828228016,w=0.5215992966552255,x=7.24717038157011 -color=red,shape=square,flag=0,i=17595,u=0.9628389672613668,v=0.7700936096284831,w=0.5144680508691644,x=6.402309060571096 -color=red,shape=triangle,flag=0,i=17606,u=0.5222458255471095,v=0.6794674289176424,w=0.487571815612238,x=6.301010686607192 -color=red,shape=triangle,flag=0,i=17624,u=0.9943305001843569,v=0.22105644256765367,w=0.4851530350422739,x=6.945469126131734 -color=green,shape=circle,flag=0,i=17627,u=0.7541179444584541,v=0.1995198131608652,w=0.4981938280026895,x=4.677340201319474 -color=red,shape=square,flag=0,i=17631,u=0.9304935412229189,v=0.25767245504117486,w=0.5201437186930495,x=4.347838722232848 -color=green,shape=circle,flag=0,i=17635,u=0.029856606049114442,v=0.4724542934246524,w=0.49529606749929744,x=5.239153910272168 -color=red,shape=circle,flag=0,i=17662,u=0.3478437693832558,v=0.43094945228989395,w=0.5195370451747886,x=3.4646229578630603 -color=blue,shape=triangle,flag=0,i=17673,u=0.1890335487272855,v=0.19692879923582374,w=0.46620361615742983,x=6.47726250919671 -color=red,shape=square,flag=0,i=17691,u=0.2822935000859188,v=0.2518444937152362,w=0.5116308723258176,x=4.795030252025749 -color=yellow,shape=circle,flag=1,i=17694,u=0.3079842059018105,v=0.31583331216016985,w=0.5160829950088107,x=5.7287833297392465 -color=yellow,shape=square,flag=1,i=17695,u=0.9312975273001926,v=0.3447736701073616,w=0.506512928694288,x=3.113794302887334 -color=green,shape=square,flag=1,i=17701,u=0.28680767421845577,v=0.19731353539187446,w=0.5023836181727168,x=5.974010357613005 -color=blue,shape=triangle,flag=0,i=17703,u=0.31415221485045286,v=0.10452498280803069,w=0.46651995765978715,x=6.775709626091987 -color=red,shape=circle,flag=0,i=17717,u=0.18118736635866772,v=0.2732601217275086,w=0.5150048478914612,x=3.038775381219024 -color=yellow,shape=circle,flag=0,i=17726,u=0.533109271437225,v=0.2409847389803199,w=0.519982259176935,x=3.7931595623721925 -color=blue,shape=square,flag=1,i=17730,u=0.8347202048347632,v=0.8348590571694064,w=0.5218446532326652,x=5.157077838611827 -color=red,shape=triangle,flag=0,i=17733,u=0.5385118250832934,v=0.6599222777978564,w=0.4963941634876704,x=2.450302952056379 -color=purple,shape=square,flag=0,i=17752,u=0.6379818509650313,v=0.27810883944405973,w=0.5258082533342047,x=4.902172150194376 -color=red,shape=triangle,flag=1,i=17772,u=0.45889509437717646,v=0.29306615608242537,w=0.4912948492098932,x=3.725714926612426 -color=red,shape=square,flag=1,i=17782,u=0.4535033333279207,v=0.5060440067258897,w=0.5034413413366144,x=3.837566865811176 -color=orange,shape=circle,flag=0,i=17785,u=0.3929316940775186,v=0.704627336422896,w=0.5694471343321359,x=3.4962592690274352 -color=green,shape=triangle,flag=1,i=17805,u=0.15580067906449124,v=0.7557704921766489,w=0.49392287246036126,x=5.329030236501437 -color=blue,shape=square,flag=1,i=17816,u=0.2567067410098277,v=0.15247060718470962,w=0.5089035564795482,x=4.789473104301443 -color=green,shape=triangle,flag=0,i=17822,u=0.3944824455680097,v=0.8121198519197657,w=0.49052355499603345,x=5.330948190715866 -color=blue,shape=triangle,flag=1,i=17840,u=0.5976330769507754,v=0.7102155310683201,w=0.4695164460027588,x=5.735878360382215 -color=yellow,shape=triangle,flag=1,i=17843,u=0.995942149508161,v=0.4941423999900775,w=0.5129643503653288,x=4.210098298969784 -color=purple,shape=square,flag=0,i=17849,u=0.7503726162226729,v=0.7028875584665251,w=0.5273210464131695,x=4.023682826869028 -color=orange,shape=triangle,flag=0,i=17888,u=0.8388145593651725,v=0.36539296496454376,w=0.5689138554856443,x=4.470934379368963 -color=blue,shape=square,flag=1,i=17889,u=0.15810908625937126,v=0.4977412858035154,w=0.4996616216961808,x=3.770318706188114 -color=green,shape=triangle,flag=1,i=17890,u=0.12688907780923842,v=0.9015488320860884,w=0.479732262522811,x=5.56933671342642 -color=red,shape=triangle,flag=0,i=17900,u=0.306096175594919,v=0.3599329931982266,w=0.4665503045245165,x=5.658701662250443 -color=yellow,shape=square,flag=1,i=17902,u=0.23044008790472226,v=0.5316460023460884,w=0.5167898488269921,x=3.2337158385108036 -color=purple,shape=square,flag=0,i=17904,u=0.583204232636298,v=0.03433398479572103,w=0.5192606437091687,x=5.055528221955931 -color=red,shape=square,flag=0,i=17915,u=0.8375324605585642,v=0.7240175484645615,w=0.4839359618987001,x=6.6148486392977555 -color=red,shape=triangle,flag=0,i=17930,u=0.16710089377926407,v=0.19217982174775416,w=0.4634849134665472,x=5.722381193570459 -color=purple,shape=triangle,flag=0,i=17934,u=0.9289822235477184,v=0.5466694706477355,w=0.4888344753616643,x=4.4614783250497805 -color=green,shape=triangle,flag=1,i=17957,u=0.7619211136981571,v=0.9664456797266976,w=0.48821251407230526,x=6.3435015346251555 -color=purple,shape=triangle,flag=0,i=17981,u=0.1831028184524659,v=0.8897278239300359,w=0.4833455897790024,x=5.058196201171949 -color=red,shape=triangle,flag=0,i=17987,u=0.982094481944249,v=0.6793314418094522,w=0.46844996778798054,x=5.890817102923555 -color=yellow,shape=triangle,flag=1,i=17988,u=0.45368052648596024,v=0.4745196812368383,w=0.5139841744490372,x=4.5522715493218575 -color=purple,shape=circle,flag=0,i=17999,u=0.9702000483454254,v=0.3617556458150133,w=0.5185003908844511,x=5.112799994729716 -color=yellow,shape=square,flag=1,i=18004,u=0.2547168060635172,v=0.07350203292972057,w=0.5107974338948419,x=2.688217134959706 -color=red,shape=square,flag=0,i=18015,u=0.560121772525682,v=0.9250063844899973,w=0.4942173949689627,x=4.601272719174409 -color=red,shape=square,flag=0,i=18016,u=0.29548533607403416,v=0.28021066457808974,w=0.48962151548347776,x=5.382165331250633 -color=purple,shape=circle,flag=0,i=18029,u=0.13659246925096058,v=0.06895464518149219,w=0.5176907558493679,x=4.844182939540203 -color=blue,shape=circle,flag=0,i=18041,u=0.47420493830062116,v=0.4689363664079186,w=0.5009137850835026,x=6.814850597466596 -color=yellow,shape=circle,flag=1,i=18045,u=0.3649574962053963,v=0.9438503252508527,w=0.524123219555697,x=6.911271124524205 -color=orange,shape=square,flag=1,i=18052,u=0.8391899083128312,v=0.6276509906479505,w=0.42844836573151446,x=7.041064455951641 -color=red,shape=square,flag=0,i=18055,u=0.11334223991708248,v=0.9788721421654617,w=0.4946712092420715,x=8.263906489831188 -color=blue,shape=circle,flag=1,i=18058,u=0.4975448290399146,v=0.4886137766199352,w=0.5026839209760607,x=4.0557343423602 -color=red,shape=square,flag=0,i=18074,u=0.9796179992230603,v=0.11925774539869971,w=0.5070233777528229,x=3.1993964769090817 -color=red,shape=square,flag=1,i=18083,u=0.04208110691033329,v=0.7045783603996948,w=0.5020761436204241,x=4.960897090162895 -color=green,shape=circle,flag=1,i=18090,u=0.2680421869217886,v=0.7263634531886776,w=0.4890766606974493,x=5.775746964352905 -color=red,shape=triangle,flag=1,i=18093,u=0.11892109194760236,v=0.12374392414032054,w=0.46487904187630064,x=5.240047904272167 -color=red,shape=square,flag=0,i=18097,u=0.7340181771722744,v=0.4150228289969201,w=0.5062101678586294,x=7.71940258167178 -color=blue,shape=circle,flag=1,i=18160,u=0.09869311940857994,v=0.9879665105886851,w=0.5060441257188537,x=4.897734148492549 -color=red,shape=triangle,flag=0,i=18167,u=0.6279603167184599,v=0.24328717017362333,w=0.46679460354113417,x=6.10072752791248 -color=red,shape=circle,flag=0,i=18177,u=0.4194598561896208,v=0.48095042182790404,w=0.47445644374146156,x=6.125518971125518 -color=red,shape=square,flag=1,i=18180,u=0.39419042509313074,v=0.4712120356676651,w=0.526520098315357,x=5.50858911126996 -color=orange,shape=square,flag=1,i=18197,u=0.21398545608874076,v=0.3327438217384592,w=0.42995049046229306,x=5.013794094349802 -color=green,shape=square,flag=0,i=18218,u=0.8620119499448504,v=0.7422761330543318,w=0.5010961516491418,x=5.235397592591949 -color=blue,shape=square,flag=1,i=18223,u=0.40870099957765416,v=0.09603364165041095,w=0.4982421218882375,x=4.433731858645439 -color=red,shape=circle,flag=0,i=18225,u=0.2758700142148337,v=0.18857808458009317,w=0.4774774289687381,x=3.6264788254500324 -color=green,shape=square,flag=0,i=18229,u=0.8456889525831227,v=0.34460038104831514,w=0.5013204315660162,x=3.1549125179985116 -color=red,shape=circle,flag=1,i=18237,u=0.584444842312468,v=0.6762016489942521,w=0.47332815768680336,x=6.191763407311394 -color=blue,shape=triangle,flag=1,i=18249,u=0.629872805152489,v=0.738237391718675,w=0.46475547392987365,x=4.369157260590089 -color=red,shape=circle,flag=1,i=18261,u=0.49549051712486447,v=0.4127856071935651,w=0.4702181248530784,x=6.496922388094785 -color=red,shape=square,flag=1,i=18265,u=0.41093547627034277,v=0.4152124376647903,w=0.5208299110691808,x=4.2991460101403165 -color=red,shape=triangle,flag=1,i=18269,u=0.09956924080952334,v=0.6245172273399839,w=0.4885407113769078,x=7.385039056658042 -color=red,shape=square,flag=1,i=18273,u=0.7254459671463113,v=0.21021140585863018,w=0.5224808677300795,x=2.2434457473906817 -color=red,shape=square,flag=1,i=18275,u=0.6216072217003132,v=0.3766395064413671,w=0.5238447903432146,x=5.157803976245525 -color=blue,shape=square,flag=1,i=18282,u=0.816083747187527,v=0.37427154100481097,w=0.49701815538436694,x=6.179702497024615 -color=purple,shape=triangle,flag=0,i=18314,u=0.6140602839536116,v=0.9578439146614126,w=0.4746984665016912,x=6.813225935585945 -color=red,shape=circle,flag=1,i=18316,u=0.6208984059548167,v=0.636639988537876,w=0.4726808922368345,x=3.188376306239057 -color=red,shape=triangle,flag=0,i=18321,u=0.22723088051723017,v=0.026149800459273287,w=0.49331198444034696,x=3.887630562796511 -color=red,shape=triangle,flag=0,i=18324,u=0.8001696915749024,v=0.5731942053107962,w=0.4929859256731647,x=3.568099487200511 -color=green,shape=triangle,flag=0,i=18331,u=0.9318387690602623,v=0.12665624035639111,w=0.5037004984699845,x=2.3467133447185216 -color=green,shape=square,flag=0,i=18349,u=0.12456581981931436,v=0.883148960798387,w=0.49515554358393876,x=3.603252602745812 -color=purple,shape=circle,flag=0,i=18372,u=0.009260966273030968,v=0.3643532551759031,w=0.50461608854499,x=3.224648113610772 -color=red,shape=circle,flag=0,i=18462,u=0.3305114197962977,v=0.26215981248890485,w=0.4669089573931814,x=6.1283965136077 -color=blue,shape=triangle,flag=1,i=18463,u=0.36351048587455226,v=0.15185578655505938,w=0.46882991402399815,x=5.411330819128106 -color=red,shape=triangle,flag=1,i=18473,u=0.6175374892791614,v=0.5591418620627553,w=0.49924434063975814,x=4.648435388479871 -color=red,shape=triangle,flag=0,i=18484,u=0.056485003653457544,v=0.5321067702850311,w=0.5097311523619275,x=4.078875360176105 -color=red,shape=square,flag=0,i=18485,u=0.6598001887643938,v=0.974483546568608,w=0.5110148390733568,x=5.471820968206001 -color=red,shape=circle,flag=1,i=18486,u=0.5480142845173197,v=0.5507287556020418,w=0.4648978333211994,x=4.26028250756848 -color=red,shape=square,flag=0,i=18495,u=0.66815605605291,v=0.16992318398289352,w=0.5125713069060034,x=2.3461676763012065 -color=blue,shape=triangle,flag=1,i=18500,u=0.2840645650597521,v=0.5915011022088547,w=0.47010132905443736,x=4.948260609046575 -color=orange,shape=square,flag=1,i=18509,u=0.34681888903921965,v=0.8883863876914582,w=0.43780403571896853,x=5.1432940680861625 -color=red,shape=circle,flag=1,i=18514,u=0.25980655441865086,v=0.31864635068856784,w=0.4616711880068182,x=7.627087597534827 -color=green,shape=square,flag=0,i=18517,u=0.0033977158708345945,v=0.879157308513157,w=0.49089343950599373,x=5.760800836737598 -color=red,shape=triangle,flag=0,i=18523,u=0.3523008482012435,v=0.233517374068138,w=0.5111283433205345,x=3.4231157107312082 -color=red,shape=circle,flag=0,i=18534,u=0.08830245423640493,v=0.12628649572433515,w=0.4606771844452173,x=4.696988200169612 -color=red,shape=circle,flag=0,i=18543,u=0.06153501592828736,v=0.03144237404548818,w=0.45625352560856436,x=4.0473573353997345 -color=red,shape=square,flag=0,i=18549,u=0.5394842076134735,v=0.8190064518912963,w=0.5149436109295445,x=6.103166467950317 -color=yellow,shape=circle,flag=0,i=18564,u=0.667516917381741,v=0.9070418145717987,w=0.5155575064369328,x=3.8724976015806 -color=red,shape=square,flag=1,i=18571,u=0.18154704500099672,v=0.11586736179004842,w=0.5183959674976494,x=4.902869038747442 -color=red,shape=triangle,flag=0,i=18599,u=0.6712385194632811,v=0.0491429765609408,w=0.4919172267929653,x=6.821391868320805 -color=red,shape=square,flag=0,i=18608,u=0.07671380981314968,v=0.005631145462132059,w=0.5236039946598601,x=3.167977833741342 -color=red,shape=circle,flag=0,i=18639,u=0.4349011581609893,v=0.38722668221800527,w=0.4731453910500843,x=5.3259745387953545 -color=red,shape=square,flag=0,i=18642,u=0.42822527792117604,v=0.786366831549971,w=0.5236981498070891,x=4.273571887520834 -color=green,shape=square,flag=1,i=18659,u=0.8796869175865145,v=0.5504382156610115,w=0.4879632964615258,x=6.2997048873170165 -color=red,shape=square,flag=0,i=18671,u=0.5630589411992264,v=0.37113655990793104,w=0.5204276279839974,x=3.6923615555266047 -color=red,shape=square,flag=0,i=18687,u=0.5187113003313534,v=0.09067843914892038,w=0.5149110152970373,x=2.1679929491871284 -color=red,shape=circle,flag=0,i=18691,u=0.14778317982910216,v=0.12571868464232716,w=0.48295829188184886,x=3.184000350864465 -color=red,shape=triangle,flag=0,i=18708,u=0.7926142706690833,v=0.04786436843223896,w=0.49907456005389134,x=3.926938270609296 -color=yellow,shape=triangle,flag=1,i=18727,u=0.4994430856875165,v=0.47935163963486827,w=0.4701160447993267,x=3.73262399412859 -color=red,shape=circle,flag=0,i=18735,u=0.3948046303024072,v=0.4121108483875691,w=0.48971017045156034,x=4.499219827848638 -color=red,shape=square,flag=0,i=18751,u=0.743644262127313,v=0.5157150655679379,w=0.5105152855289237,x=5.8322889389225905 -color=red,shape=triangle,flag=0,i=18768,u=0.8244386918780712,v=0.49522422520935383,w=0.49609792898559774,x=5.792777257826361 -color=purple,shape=triangle,flag=0,i=18780,u=0.1535425894580954,v=0.7120781510661807,w=0.47537974954703227,x=5.058900923916902 -color=blue,shape=triangle,flag=0,i=18791,u=0.1973218618775322,v=0.9530492388588838,w=0.4617885531200715,x=6.670471818319808 -color=red,shape=triangle,flag=0,i=18792,u=0.3576892089843021,v=0.882598171590402,w=0.4938401992690651,x=5.229466628010987 -color=green,shape=square,flag=0,i=18796,u=0.7556398308990591,v=0.5980658160073816,w=0.4878320283482015,x=4.408317424008135 -color=red,shape=triangle,flag=0,i=18836,u=0.02300133184088371,v=0.9779512673634337,w=0.48908924221353145,x=5.735290464494384 -color=red,shape=triangle,flag=0,i=18838,u=0.03124501773090571,v=0.21712108500504768,w=0.4923018317079637,x=4.76589558050777 -color=green,shape=square,flag=1,i=18847,u=0.9865896628528927,v=0.31615447659848284,w=0.5003805315856048,x=7.4518575317361035 -color=blue,shape=square,flag=0,i=18892,u=0.2801607700524624,v=0.2015854419727171,w=0.519552893958359,x=4.70876882080991 -color=purple,shape=circle,flag=0,i=18911,u=0.048399221894146804,v=0.6988242222804614,w=0.5171622814987747,x=7.33308130902666 -color=red,shape=triangle,flag=0,i=18921,u=0.43620780117479785,v=0.6889601156499006,w=0.4901148033925918,x=4.915015507868817 -color=green,shape=square,flag=0,i=18930,u=0.4028252886018707,v=0.9831099436527031,w=0.5034201780895502,x=4.894101913088159 -color=red,shape=circle,flag=0,i=18941,u=0.2736470334758355,v=0.18835044103727158,w=0.4703404544651524,x=6.22269238955904 -color=purple,shape=square,flag=0,i=18952,u=0.35498488247695426,v=0.9704453962233955,w=0.529651442786798,x=5.19716863007178 -color=red,shape=circle,flag=1,i=18958,u=0.9537936185938203,v=1.0342052123918053,w=0.476701579621606,x=1.9447915179969326 -color=green,shape=triangle,flag=0,i=18975,u=0.5897157268912211,v=0.6555441536188846,w=0.4945292833937358,x=3.9974627238892513 -color=red,shape=triangle,flag=0,i=18991,u=0.18013409590928642,v=0.35440753547028114,w=0.48921102464987837,x=5.547026580052797 -color=red,shape=triangle,flag=0,i=18993,u=0.728291402836162,v=0.23505179222597683,w=0.48709280398974536,x=4.177604570058875 -color=red,shape=triangle,flag=0,i=18994,u=0.5917663116001257,v=0.7767932899747644,w=0.4851895455582016,x=3.6331749639659674 -color=red,shape=circle,flag=0,i=18999,u=0.5955398962459819,v=0.5197973676207062,w=0.481989372463763,x=6.94120922844196 -color=red,shape=circle,flag=0,i=19023,u=0.011705052863797638,v=0.034648019856913057,w=0.48299438964552216,x=3.816372017573336 -color=blue,shape=square,flag=0,i=19025,u=0.9273009557486024,v=0.7357381633429845,w=0.5090561431721482,x=3.157013657905273 -color=green,shape=square,flag=0,i=19028,u=0.05469452707709799,v=0.8848738136208745,w=0.4956930824740668,x=4.281473117133831 -color=red,shape=square,flag=0,i=19031,u=0.8806668860792601,v=0.9786873175414998,w=0.49459196646275816,x=6.851446664830967 -color=orange,shape=circle,flag=1,i=19035,u=0.34593136590741314,v=0.4416897756734529,w=0.5676174161460276,x=5.648625579356253 -color=red,shape=square,flag=1,i=19062,u=0.8526501716488706,v=0.9333564387668003,w=0.4910510751371172,x=5.265449401015254 -color=purple,shape=circle,flag=1,i=19063,u=0.6139351366699671,v=0.39126953778481033,w=0.5090256721139687,x=4.814737897496203 -color=green,shape=circle,flag=0,i=19072,u=0.4433647201287031,v=0.4599288679870087,w=0.4848493488276461,x=5.371246411741548 -color=red,shape=square,flag=0,i=19083,u=0.1708011381668736,v=0.43438600758340673,w=0.5068254458597846,x=4.811428825813501 -color=red,shape=square,flag=0,i=19106,u=0.8831682858199408,v=0.5694865660439371,w=0.5076397692908704,x=5.145984347006527 -color=purple,shape=square,flag=0,i=19108,u=0.00839820281799708,v=0.7807552004223764,w=0.5059091637919266,x=3.868835632838128 -color=green,shape=square,flag=0,i=19131,u=0.41118817230705196,v=0.13968436485360425,w=0.5019171964746337,x=6.949639384553794 -color=red,shape=circle,flag=0,i=19147,u=0.18134716282828423,v=0.2043377400812217,w=0.47094608313511016,x=4.935272573054632 -color=red,shape=square,flag=1,i=19151,u=0.588740940721605,v=0.19724473220844008,w=0.5206415478067581,x=6.755422715821688 -color=red,shape=square,flag=0,i=19166,u=0.3278533058062141,v=0.8442042976660211,w=0.5203294879159722,x=4.423239178490451 -color=blue,shape=square,flag=1,i=19167,u=0.7720445432294831,v=0.5757219760273705,w=0.5164587104397059,x=4.510045768232531 -color=blue,shape=square,flag=1,i=19183,u=0.3541271073840022,v=0.6250820737479565,w=0.5169640456632087,x=4.592221832856935 -color=green,shape=triangle,flag=1,i=19198,u=0.28654536845388345,v=0.7104747674451096,w=0.4886288289397324,x=3.721143712861064 -color=purple,shape=triangle,flag=1,i=19203,u=0.3483325900059425,v=0.7618531249056861,w=0.49908236650320126,x=6.563431799795914 -color=purple,shape=square,flag=0,i=19211,u=0.984191051199003,v=0.49188353971303544,w=0.5146144529518357,x=5.464333616758623 -color=red,shape=triangle,flag=0,i=19235,u=0.003432401932833451,v=0.7894909501931063,w=0.4983287820955183,x=5.589711613507426 -color=yellow,shape=triangle,flag=1,i=19238,u=0.9879987050373236,v=0.5785879845775445,w=0.47782380647072115,x=3.5301921169928234 -color=blue,shape=square,flag=1,i=19242,u=0.4892906672106717,v=0.42325215900322055,w=0.5296326413109367,x=5.4089410793474535 -color=yellow,shape=triangle,flag=1,i=19245,u=0.335356080874326,v=0.9654767676653999,w=0.4786758345187025,x=4.032056425000531 -color=green,shape=triangle,flag=0,i=19257,u=0.08317960388420353,v=0.05527082012393969,w=0.4923720502222301,x=6.2456910159782355 -color=green,shape=circle,flag=0,i=19267,u=0.8565282360250388,v=0.6270400771471198,w=0.4887926213135214,x=4.050287884169138 -color=blue,shape=triangle,flag=1,i=19280,u=0.8247156059775866,v=0.9101045837615745,w=0.4645567791552847,x=2.2221697922297143 -color=red,shape=square,flag=0,i=19297,u=0.6338138291092693,v=0.8269611673177908,w=0.5034903167512426,x=3.694879197813178 -color=blue,shape=triangle,flag=0,i=19302,u=0.30339376605967683,v=0.2998294051248267,w=0.4729658293817687,x=5.079484364320856 -color=yellow,shape=square,flag=1,i=19310,u=0.7261012927606054,v=0.009325721191105418,w=0.4790924569942006,x=6.217337023365913 -color=red,shape=circle,flag=0,i=19326,u=0.9314730806510404,v=0.9954436659708578,w=0.4514717429006954,x=5.924753025553248 -color=purple,shape=square,flag=0,i=19346,u=0.39458413499368916,v=0.2813823844019291,w=0.5081072908947802,x=4.263514443880108 -color=green,shape=triangle,flag=1,i=19350,u=0.9065762690383302,v=0.9046720653596545,w=0.4921731941018724,x=4.319254894961902 -color=red,shape=triangle,flag=0,i=19357,u=0.6370843106967571,v=0.143488001432015,w=0.5095595648078439,x=5.65057539276244 -color=red,shape=circle,flag=0,i=19365,u=0.07968289816483531,v=0.008009844239713182,w=0.4575932686813045,x=5.708154737235744 -color=purple,shape=circle,flag=0,i=19371,u=0.42275087939323375,v=0.0016129021924315978,w=0.4961030391550122,x=5.522779801656512 -color=blue,shape=square,flag=1,i=19375,u=0.16557438657849877,v=0.7330541668699042,w=0.5208898178469412,x=4.728139565901707 -color=purple,shape=circle,flag=1,i=19379,u=0.3042560548629004,v=0.8613059771178814,w=0.49816799257040795,x=2.6996383607092898 -color=blue,shape=circle,flag=1,i=19381,u=0.6271845487497092,v=0.16756375559229952,w=0.5059461125942329,x=5.774558641274722 -color=purple,shape=square,flag=0,i=19382,u=0.621824733028831,v=0.7028058513640072,w=0.5044537891716677,x=5.994943407245322 -color=red,shape=square,flag=0,i=19387,u=0.5715553753973288,v=0.5950775409511314,w=0.4742473754259497,x=3.7499901142331016 -color=red,shape=square,flag=0,i=19417,u=0.39758435112802737,v=0.025681303523298338,w=0.4750521686273393,x=3.884814291977623 -color=red,shape=circle,flag=1,i=19424,u=0.6094371866342598,v=0.6145633286773059,w=0.4700595386519573,x=2.470061601378447 -color=red,shape=circle,flag=0,i=19430,u=0.022959149801579093,v=-0.06251659875376299,w=0.4679988134609304,x=6.467396176640464 -color=red,shape=triangle,flag=1,i=19435,u=0.8507450389967466,v=0.12738594042762352,w=0.49818119145661777,x=6.102639203395218 -color=yellow,shape=square,flag=1,i=19441,u=0.5870462085229411,v=0.7679267898979908,w=0.49299997859219014,x=4.611673042683459 -color=red,shape=triangle,flag=0,i=19453,u=0.6451743760348422,v=0.3649268467247472,w=0.4971641461407697,x=6.107101597117463 -color=yellow,shape=triangle,flag=1,i=19466,u=0.7986984420890121,v=0.4235654250272455,w=0.4685687516156792,x=5.979655057107756 -color=red,shape=circle,flag=1,i=19474,u=0.1664205758157251,v=0.24361276966915363,w=0.4629361758519966,x=5.44323737594651 -color=red,shape=square,flag=0,i=19480,u=0.2986642870745606,v=0.5342538236383578,w=0.47859429653087393,x=5.779630799319148 -color=purple,shape=square,flag=0,i=19484,u=0.1603995926908216,v=0.6712148279648789,w=0.5039088972783483,x=6.121671282246858 -color=blue,shape=square,flag=1,i=19506,u=0.35754702843715513,v=0.8469615137616913,w=0.5215485408315904,x=3.9908193019915523 -color=red,shape=circle,flag=0,i=19510,u=0.4089460209188528,v=0.343381695172298,w=0.4519349552897742,x=3.5033837674364907 -color=red,shape=triangle,flag=0,i=19513,u=0.028198426192367676,v=0.29538143970482256,w=0.4827496828740188,x=4.3784689050709575 -color=purple,shape=triangle,flag=0,i=19514,u=0.4190493676205109,v=0.326075179366235,w=0.48796103238995014,x=4.699772395270649 -color=red,shape=circle,flag=1,i=19540,u=0.09469437870012098,v=0.0171392211923395,w=0.45168513448312947,x=6.500318556207104 -color=red,shape=square,flag=0,i=19541,u=0.2199472493683048,v=0.4356283283786907,w=0.47451616440194,x=2.420696947665323 -color=red,shape=circle,flag=0,i=19546,u=0.17224817632060863,v=0.1923013692117715,w=0.4493551460602599,x=4.371702737184482 -color=blue,shape=circle,flag=1,i=19563,u=0.06973620768755595,v=0.6773734434770574,w=0.4956380924266746,x=3.411108402527207 -color=yellow,shape=square,flag=1,i=19569,u=0.08616466838911396,v=0.44959469573067934,w=0.49165226266629214,x=4.952423114928295 -color=yellow,shape=triangle,flag=1,i=19598,u=0.2880463736512431,v=0.06793370921106034,w=0.4857346424503494,x=6.202145331491682 -color=blue,shape=square,flag=0,i=19605,u=0.4666047558178156,v=0.4477869078884964,w=0.5270831626273705,x=6.483150967928366 -color=blue,shape=triangle,flag=1,i=19606,u=0.03958327071148926,v=0.9808591624675925,w=0.47999008331371423,x=3.387750609056868 -color=yellow,shape=circle,flag=1,i=19612,u=0.5839466437934966,v=0.047586056124955256,w=0.5043674860910469,x=4.2023422725991795 -color=red,shape=square,flag=1,i=19637,u=0.877050431737364,v=0.1412234784195453,w=0.4779698609655773,x=5.905344989578135 -color=purple,shape=circle,flag=0,i=19661,u=0.8323681578618354,v=0.4009772358073388,w=0.4991254172970417,x=5.796627333155844 -color=blue,shape=square,flag=1,i=19662,u=0.6218412534152329,v=0.13203849243261367,w=0.5276977657598075,x=5.218695664804933 -color=red,shape=triangle,flag=0,i=19668,u=0.9296449754835698,v=0.4712968643093124,w=0.4934614086654848,x=6.577965288044673 -color=purple,shape=square,flag=0,i=19677,u=0.7718737247780234,v=0.6001298920920297,w=0.5164177851721635,x=3.7329129523608358 -color=red,shape=square,flag=1,i=19699,u=0.6812370130538277,v=0.6870565007761864,w=0.47103173409617605,x=4.228692335973787 -color=green,shape=triangle,flag=0,i=19711,u=0.8107162511523891,v=0.6425720040589783,w=0.5039050475960446,x=4.895770349593239 -color=yellow,shape=circle,flag=1,i=19733,u=0.6612331744905893,v=0.9499200560279573,w=0.506581756209345,x=4.7403014772193535 -color=red,shape=triangle,flag=0,i=19734,u=0.44478151894654405,v=0.09070065226028967,w=0.48394783700353383,x=3.51242623422983 -color=yellow,shape=triangle,flag=1,i=19740,u=0.381032115426555,v=0.8837892566613732,w=0.48352160536753136,x=5.348641475307055 -color=yellow,shape=triangle,flag=1,i=19773,u=0.5027254051474224,v=0.5101930780600366,w=0.4830942953848948,x=2.7025322855637834 -color=orange,shape=square,flag=0,i=19778,u=0.6936910256320047,v=0.9498158297363946,w=0.4520906884958285,x=4.882801273625204 -color=green,shape=triangle,flag=0,i=19797,u=0.49853512058350125,v=0.5764915981286588,w=0.4956618875197631,x=4.774964274179864 -color=red,shape=triangle,flag=0,i=19806,u=0.5890841093340901,v=0.5883775815373468,w=0.49549226440127525,x=4.290868266838365 -color=red,shape=triangle,flag=1,i=19824,u=0.6317764449010911,v=0.6951353956260371,w=0.497588343917601,x=4.41150617864654 -color=red,shape=triangle,flag=0,i=19832,u=0.5472139804234594,v=0.09785001228873513,w=0.4978184952224072,x=6.962437924723382 -color=red,shape=circle,flag=0,i=19845,u=0.9562482183741495,v=0.8826967413678363,w=0.44139282286999065,x=4.103237354674017 -color=blue,shape=triangle,flag=1,i=19852,u=0.32906942834967834,v=0.04441043167758585,w=0.4786505667651544,x=6.941310794746223 -color=purple,shape=triangle,flag=0,i=19858,u=0.5423250339824264,v=0.9782254943207901,w=0.48591740051744153,x=5.399628344491177 -color=yellow,shape=square,flag=1,i=19859,u=0.13315820362144715,v=0.7929718422014979,w=0.49228322358169435,x=2.9066618802178397 -color=red,shape=square,flag=1,i=19870,u=0.28186709058447346,v=0.1567437708072471,w=0.4792286911651259,x=4.527431961920657 -color=red,shape=circle,flag=0,i=19886,u=0.21543583798778732,v=0.208894682890885,w=0.4486256468076395,x=6.5088292960379635 -color=yellow,shape=square,flag=1,i=19910,u=0.275008475479687,v=0.25732616191118773,w=0.4914647098759426,x=6.391657589122708 -color=yellow,shape=square,flag=0,i=19922,u=0.8691275228425905,v=0.8283907399963428,w=0.4905853123294009,x=5.141910048153816 -color=yellow,shape=square,flag=1,i=19923,u=0.6280486753499899,v=0.06997909890753551,w=0.49427503713290105,x=4.3310207524761255 -color=red,shape=square,flag=0,i=19929,u=0.8581791249533122,v=0.33032276800139293,w=0.4775603229971717,x=6.872740262005638 -color=orange,shape=square,flag=0,i=19931,u=0.5305484260888517,v=0.6395420890953419,w=0.4470812238449707,x=5.505592363895363 -color=purple,shape=circle,flag=0,i=19940,u=0.3910552042054093,v=0.5316953267797838,w=0.5045863608583576,x=6.630198164770575 -color=green,shape=triangle,flag=0,i=19941,u=0.2014741394799323,v=0.45356818204603155,w=0.4999580909964705,x=4.688201746429585 -color=blue,shape=square,flag=0,i=19955,u=0.9999687954968421,v=0.6608174493208964,w=0.5534745633575466,x=5.623642597337606 -color=green,shape=square,flag=0,i=19962,u=0.8056375568030112,v=0.02650362957483232,w=0.4972983771865608,x=6.4266425890062715 -color=red,shape=circle,flag=0,i=19965,u=0.6587117875549231,v=0.6323271493539752,w=0.4526179140575325,x=4.795868835633861 -color=purple,shape=square,flag=0,i=19980,u=0.3275622109317212,v=0.156398657216808,w=0.5134007901032216,x=4.214075516934493 -color=green,shape=square,flag=0,i=19985,u=0.10124980097061853,v=0.5883466718981434,w=0.48844941490238075,x=4.254112703841412 -color=red,shape=triangle,flag=0,i=19988,u=0.7764431209908271,v=0.6331391323799893,w=0.5097407847318928,x=4.585809575946289 -color=yellow,shape=triangle,flag=1,i=19991,u=0.35237549969116677,v=0.6440342810487489,w=0.48229902555079085,x=3.746025110505693 -color=yellow,shape=square,flag=1,i=19995,u=0.21144402683191654,v=0.35525920497339936,w=0.48980554175422575,x=5.563832041914108 -color=green,shape=square,flag=0,i=20006,u=0.9170264825333977,v=0.028239567818985956,w=0.4890411948355596,x=5.296458705657451 -color=red,shape=circle,flag=0,i=20017,u=0.3589061196040345,v=0.45499975082874927,w=0.46572530893566877,x=4.099318263473547 -color=red,shape=triangle,flag=0,i=20039,u=0.4834020950932344,v=0.8011928485397729,w=0.5036331486472593,x=5.916124955844004 -color=red,shape=circle,flag=0,i=20046,u=0.12020360205387759,v=0.11833445343070319,w=0.4723066864399126,x=4.91086132677583 -color=green,shape=square,flag=1,i=20064,u=0.7346402145701634,v=0.4870519246020618,w=0.4952248232210816,x=1.747089427849134 -color=red,shape=triangle,flag=1,i=20068,u=0.1771154216423373,v=0.9091111630027483,w=0.4969392822804526,x=5.508174477049551 -color=yellow,shape=square,flag=1,i=20071,u=0.1389484373935782,v=0.7954206786998465,w=0.49321513119577404,x=4.7109717054894835 -color=red,shape=square,flag=0,i=20080,u=0.4243748777326032,v=0.39735323780812826,w=0.47105027874477834,x=5.421171183462579 -color=red,shape=square,flag=0,i=20089,u=0.871843108864359,v=0.9336326551291133,w=0.4688954139345142,x=4.323140257845679 -color=red,shape=square,flag=0,i=20090,u=0.8908823925552248,v=0.20630191479378013,w=0.46716683277348237,x=2.472717016068336 -color=blue,shape=triangle,flag=0,i=20103,u=0.09100832624872379,v=0.04582601015673837,w=0.4823149266245357,x=5.339490039200462 -color=yellow,shape=triangle,flag=1,i=20108,u=0.7905855937210129,v=0.9593153532834586,w=0.48989896592471777,x=6.430462515321839 -color=red,shape=circle,flag=1,i=20111,u=0.057190524412237265,v=0.04385477044455901,w=0.4733817342765147,x=5.272474119505085 -color=red,shape=triangle,flag=1,i=20116,u=0.4354784562297822,v=0.21617331266801965,w=0.5009794314928293,x=5.877991685641125 -color=red,shape=triangle,flag=0,i=20120,u=0.7244838424717188,v=0.5309136275637878,w=0.4971465048246595,x=5.0658954358483195 -color=green,shape=square,flag=0,i=20121,u=0.24340675122958422,v=0.8255111608008159,w=0.4979733834816281,x=5.634563971385334 -color=yellow,shape=triangle,flag=1,i=20125,u=0.7453012545768237,v=0.7624020233421406,w=0.49334280447518736,x=5.700703641804989 -color=purple,shape=circle,flag=0,i=20137,u=0.6781333286747125,v=0.022576925798226788,w=0.5199250228369507,x=4.437825158510398 -color=blue,shape=square,flag=1,i=20145,u=0.7403880066348806,v=0.47262547174311853,w=0.5488913776965691,x=5.45906730646779 -color=red,shape=square,flag=0,i=20156,u=0.2541418088910403,v=0.7626275950615311,w=0.4767066609617063,x=3.1651518562895546 -color=blue,shape=square,flag=1,i=20157,u=0.9099244238077343,v=0.049171025656529754,w=0.5552170355377419,x=4.066033266203033 -color=red,shape=square,flag=1,i=20161,u=0.7276333778610681,v=0.3152306132283508,w=0.47304403629197467,x=5.598684925958004 -color=blue,shape=circle,flag=1,i=20182,u=0.7973611715302398,v=0.4681934591008653,w=0.5079136909749219,x=5.87364653371787 -color=yellow,shape=square,flag=0,i=20193,u=0.04418462529121048,v=0.5398725663459474,w=0.48315324426508943,x=4.953864327567819 -color=yellow,shape=square,flag=1,i=20198,u=0.4852966412860893,v=0.2097734853774884,w=0.48406903219773795,x=6.467237069367475 -color=red,shape=square,flag=0,i=20211,u=0.20767535187676434,v=0.35395988784192844,w=0.47318077532588954,x=4.585833153659872 -color=yellow,shape=triangle,flag=1,i=20218,u=0.7555638475616732,v=0.7581416343141402,w=0.49492005364328967,x=6.220711417672656 -color=red,shape=square,flag=0,i=20219,u=0.4402676003946484,v=0.7362714412432786,w=0.4751764719319071,x=4.2089843660157475 -color=yellow,shape=triangle,flag=1,i=20220,u=0.09949250682197808,v=0.7389268962441031,w=0.4916110158827713,x=2.5826792294446195 -color=red,shape=square,flag=1,i=20224,u=0.6655962518773444,v=0.05151794693857803,w=0.47410281384694064,x=4.690864719006703 -color=green,shape=circle,flag=0,i=20237,u=0.44838883136037433,v=0.6293054211549913,w=0.487621263769257,x=5.399285734027991 -color=blue,shape=circle,flag=1,i=20238,u=0.4457729491374911,v=0.7610803102136118,w=0.5093249361685223,x=7.175902031078318 -color=red,shape=square,flag=0,i=20244,u=0.18660890611323167,v=0.14660774667450938,w=0.477514688453468,x=4.376145717723959 -color=yellow,shape=square,flag=1,i=20247,u=0.902168245673722,v=0.6493342199208197,w=0.4825855039763055,x=5.894437524689646 -color=red,shape=triangle,flag=0,i=20253,u=0.04607346520696931,v=0.3365049865711909,w=0.5025770626581808,x=3.6815623444894316 -color=red,shape=square,flag=0,i=20255,u=0.09570767414574732,v=0.3220551102104332,w=0.47324770650740083,x=4.8837923540776815 -color=green,shape=square,flag=0,i=20256,u=0.3319426191497634,v=0.09054174434307893,w=0.5017534449904048,x=4.105641735089985 -color=yellow,shape=circle,flag=1,i=20271,u=0.556578973857646,v=0.7071490161280659,w=0.5069793212611403,x=5.469948849755434 -color=red,shape=circle,flag=0,i=20273,u=0.3039942254302943,v=0.3122089338916067,w=0.45605982272399836,x=5.563968295206995 -color=red,shape=circle,flag=1,i=20278,u=0.28175132252497204,v=0.2674419753028022,w=0.4596186856645792,x=4.5898142779889985 -color=purple,shape=square,flag=1,i=20290,u=0.19157058456027476,v=0.6428233519997256,w=0.5118420832713926,x=4.558290023769178 -color=yellow,shape=triangle,flag=1,i=20291,u=0.6243290631913431,v=0.2390007358170263,w=0.4845860681940951,x=5.94965287880476 -color=blue,shape=triangle,flag=0,i=20309,u=0.4603742143224958,v=0.6019134039230633,w=0.4723535978831347,x=3.6303899559080044 -color=red,shape=square,flag=1,i=20321,u=0.8558078327832467,v=0.733557172357148,w=0.46924133964859593,x=3.0087522559296573 -color=purple,shape=triangle,flag=1,i=20330,u=0.665769914796747,v=0.4873343938638852,w=0.5001326204800022,x=4.304108536780179 -color=blue,shape=triangle,flag=1,i=20331,u=0.4530933215615147,v=0.7638118580254276,w=0.475649898135404,x=3.122665111313174 -color=red,shape=triangle,flag=0,i=20344,u=0.8866858675128158,v=0.25359589218607814,w=0.5047222629462997,x=3.8760010833945824 -color=purple,shape=triangle,flag=0,i=20348,u=0.19087911365731003,v=0.33842493480764047,w=0.5015298350795904,x=4.1610259743794025 -color=blue,shape=triangle,flag=1,i=20356,u=0.3455948925423973,v=0.3683925659620565,w=0.47949830635276314,x=3.7715676445970114 -color=green,shape=square,flag=0,i=20361,u=0.9885483211654953,v=0.19005693630463472,w=0.5012041504764215,x=2.7176909504997457 -color=red,shape=square,flag=1,i=20413,u=0.16345566725498084,v=0.453627223426604,w=0.4792841717503976,x=5.434294337938392 -color=yellow,shape=circle,flag=0,i=20439,u=0.46086198545959567,v=0.03561387041350628,w=0.49675056150316477,x=4.620993840086939 -color=purple,shape=triangle,flag=0,i=20447,u=0.03238344335240806,v=0.5845934287185213,w=0.5035944492302823,x=4.109788851654614 -color=red,shape=circle,flag=0,i=20458,u=0.20353624365551426,v=0.12439513739605154,w=0.4900679585417017,x=3.0281987803634673 -color=purple,shape=circle,flag=0,i=20467,u=0.03015863675571462,v=0.5640779534472669,w=0.5198566608956013,x=3.152395238235569 -color=green,shape=triangle,flag=0,i=20468,u=0.4768331186199606,v=0.7845590135745738,w=0.5001349858115531,x=4.7617308313940105 -color=purple,shape=circle,flag=0,i=20487,u=0.41352057462161684,v=0.38036640836017444,w=0.523766189116093,x=4.8588539898092336 -color=blue,shape=triangle,flag=1,i=20510,u=0.578190438769998,v=0.06207467487639928,w=0.46279483083258044,x=4.942007404520102 -color=blue,shape=circle,flag=0,i=20521,u=0.4476477995189405,v=0.968305463597405,w=0.503931115171428,x=6.032347196283561 -color=yellow,shape=square,flag=1,i=20528,u=0.3980382303167961,v=0.16779058275347614,w=0.47807863399685996,x=5.166838739738081 -color=blue,shape=triangle,flag=0,i=20531,u=0.8185443882286287,v=0.4462946247223919,w=0.4583570542205554,x=5.121904497527895 -color=red,shape=square,flag=0,i=20541,u=0.5508470367861992,v=0.7352628408099238,w=0.49624081648185164,x=2.408961669932586 -color=yellow,shape=square,flag=1,i=20550,u=0.2949436952313761,v=0.25532287411059296,w=0.4749485239082093,x=5.7920768347332485 -color=purple,shape=circle,flag=0,i=20552,u=0.6673756437469976,v=0.11646967361570182,w=0.525127478437238,x=3.8041884589075416 -color=yellow,shape=square,flag=1,i=20560,u=0.9957663880933032,v=0.04075382445641618,w=0.4790131468409233,x=4.430449135887328 -color=purple,shape=circle,flag=0,i=20563,u=0.8859296580833327,v=0.44152398773944956,w=0.5243191840638861,x=6.284778254039376 -color=blue,shape=triangle,flag=1,i=20583,u=0.22343138765063875,v=0.7780592920251577,w=0.4671401797273996,x=6.404036002125561 -color=red,shape=triangle,flag=1,i=20593,u=0.9862681100782191,v=0.3625194217225697,w=0.4819975603569129,x=5.716266601790803 -color=red,shape=triangle,flag=0,i=20606,u=0.6509941267118564,v=0.8742107014890693,w=0.4841373642916209,x=6.154297063374156 -color=purple,shape=square,flag=0,i=20612,u=0.7844987016978546,v=0.1260516658115648,w=0.48882143192611405,x=4.923141649550177 -color=red,shape=square,flag=0,i=20613,u=0.2535448471843621,v=0.612824998756782,w=0.483281904203936,x=3.9650454100684853 -color=yellow,shape=square,flag=1,i=20622,u=0.4482405043218112,v=0.7208143188766652,w=0.4841411980701381,x=4.7184021718129605 -color=green,shape=square,flag=1,i=20623,u=0.32864238666518697,v=0.7422489567960413,w=0.4981631672571617,x=5.560039366900285 -color=blue,shape=circle,flag=0,i=20628,u=0.7931085242680358,v=0.5378664558396107,w=0.511333712944964,x=6.244418683732882 -color=green,shape=square,flag=0,i=20641,u=0.5024747591273615,v=0.30606775994656055,w=0.5023971107310841,x=5.971874361422845 -color=purple,shape=square,flag=0,i=20644,u=0.981607525837907,v=0.024517217534665736,w=0.48414038851979124,x=7.033471206867201 -color=yellow,shape=triangle,flag=1,i=20676,u=0.13078792556010643,v=0.3718249466630916,w=0.49257167615624425,x=5.420530758862185 -color=red,shape=circle,flag=0,i=20684,u=0.15087803153054025,v=0.13036837815332303,w=0.510640284057038,x=5.755186065704337 -color=blue,shape=circle,flag=0,i=20702,u=0.19072545825993015,v=0.5775810261036246,w=0.5086130740532994,x=4.494661457920724 -color=red,shape=circle,flag=1,i=20704,u=0.7013857648850876,v=0.6854606781088107,w=0.5124339097928752,x=4.5275892912353575 -color=yellow,shape=circle,flag=1,i=20740,u=0.28926084540176855,v=0.5255580433483552,w=0.500244785729827,x=4.864227836455215 -color=blue,shape=square,flag=0,i=20760,u=0.7364068542751167,v=0.8425750569780169,w=0.5202998470076121,x=4.568785316705065 -color=red,shape=triangle,flag=1,i=20761,u=0.015134158300051381,v=0.005141441604602726,w=0.4799910966279857,x=5.608059419471317 -color=green,shape=triangle,flag=0,i=20762,u=0.20232363430402966,v=0.9747976412788846,w=0.4869994008254588,x=5.144694606405472 -color=yellow,shape=circle,flag=1,i=20763,u=0.4200556032401409,v=0.0419122729174537,w=0.5029180228830644,x=6.39235931369511 -color=red,shape=triangle,flag=0,i=20768,u=0.604285406782027,v=0.8825898557122033,w=0.48361116770747503,x=4.101414735462282 -color=blue,shape=triangle,flag=0,i=20774,u=0.9150206510077719,v=0.7381481026558343,w=0.4717636808134761,x=3.8989520003469136 -color=red,shape=circle,flag=1,i=20776,u=0.9443781585303996,v=0.9363124317171395,w=0.5015458895612563,x=7.265805545896871 -color=red,shape=square,flag=0,i=20784,u=0.051312207547014155,v=0.03676194178498071,w=0.5015784226702108,x=4.73663565998667 -color=red,shape=circle,flag=0,i=20802,u=0.7005794532730988,v=0.6199760079942978,w=0.5052547171308521,x=6.929958368932134 -color=red,shape=square,flag=0,i=20803,u=0.16896240695737885,v=0.01402479456565009,w=0.5039303879865271,x=7.151823173558 -color=red,shape=triangle,flag=1,i=20805,u=0.5520575425730366,v=0.3132680497082878,w=0.4877565508517673,x=6.454420045772124 -color=green,shape=circle,flag=0,i=20814,u=0.7520206509086963,v=0.6553055268846822,w=0.49171094823350175,x=6.2568836785220725 -color=yellow,shape=square,flag=1,i=20833,u=0.3781062484210904,v=0.43552151042424603,w=0.48989793005176374,x=4.36450968555036 -color=blue,shape=triangle,flag=0,i=20861,u=0.1938547909208802,v=0.1602762573569535,w=0.4845845860150253,x=6.123530988085708 -color=green,shape=triangle,flag=0,i=20865,u=0.70746208666508,v=0.452479814138137,w=0.4811190367094136,x=4.654970168609935 -color=red,shape=triangle,flag=0,i=20870,u=0.7837690677100517,v=0.39190552606063767,w=0.4823449183268131,x=4.245377289823519 -color=yellow,shape=triangle,flag=1,i=20871,u=0.6595784940624211,v=0.08922864572034839,w=0.48811468372401096,x=4.87625037051284 -color=red,shape=triangle,flag=0,i=20874,u=0.4670648113957009,v=0.39507018052422593,w=0.48414830298406314,x=5.643536358223112 -color=red,shape=square,flag=0,i=20886,u=0.4588266866733186,v=0.30875703765159535,w=0.5117661414697479,x=3.7482905230326016 -color=red,shape=square,flag=0,i=20908,u=0.5771726400821975,v=0.3075124926254057,w=0.5076228127773007,x=3.782374903997308 -color=orange,shape=square,flag=0,i=20910,u=0.7877058307527456,v=0.2795287701194453,w=0.4639793508358662,x=3.6093105112053663 -color=purple,shape=square,flag=0,i=20917,u=0.42187001720453066,v=0.3910289983719927,w=0.4782068025346633,x=5.5548113220648005 -color=blue,shape=square,flag=1,i=20931,u=0.17419377514571455,v=0.988466648959089,w=0.5025268505070141,x=3.7535385827124315 -color=yellow,shape=triangle,flag=1,i=20943,u=0.43537375332290085,v=0.6660195638043036,w=0.4815614007667239,x=5.260029874205696 -color=orange,shape=square,flag=0,i=20959,u=0.26974136046632957,v=0.7243473388841524,w=0.4692110316805057,x=6.224696516280145 -color=red,shape=circle,flag=0,i=20986,u=0.7274543776117302,v=0.7197268976235901,w=0.5137025133174515,x=4.073324565455679 -color=yellow,shape=circle,flag=1,i=21001,u=0.8244211294077465,v=0.4825660119872498,w=0.504689011946689,x=5.133370845494649 -color=red,shape=square,flag=0,i=21007,u=0.18078420863249356,v=0.6627133015346834,w=0.49104305726380315,x=7.805174952380121 -color=red,shape=circle,flag=1,i=21008,u=0.7934007608495821,v=0.7598129355276987,w=0.5147500935084519,x=4.125728349661089 -color=red,shape=square,flag=1,i=21009,u=0.4339021451114192,v=0.8763828498445537,w=0.48716228147169227,x=4.8350904666621775 -color=red,shape=square,flag=1,i=21028,u=0.9846044230863127,v=0.7269395853722801,w=0.4857940563228247,x=3.5093487141875666 -color=green,shape=triangle,flag=1,i=21030,u=0.4268055269262121,v=0.25302576037986413,w=0.49682807188231104,x=6.53581977103698 -color=red,shape=triangle,flag=0,i=21039,u=0.3749137681851894,v=0.5887039101559038,w=0.5056732836696755,x=7.662409352299659 -color=purple,shape=circle,flag=0,i=21048,u=0.9581952715352486,v=0.306884773395668,w=0.5094180085614227,x=6.561621537914609 -color=green,shape=triangle,flag=0,i=21052,u=0.4444445924121314,v=0.9392318771195354,w=0.4955882458073949,x=4.456179712760757 -color=yellow,shape=triangle,flag=1,i=21061,u=0.7463326458125114,v=0.7480201022174645,w=0.4875042825188887,x=3.908828774224243 -color=blue,shape=square,flag=0,i=21066,u=0.46014722298657207,v=0.431619130779731,w=0.492328739500153,x=4.104287058571806 -color=red,shape=square,flag=0,i=21076,u=0.08086936595008021,v=0.8285766235634872,w=0.4922966863814496,x=5.122748040194756 -color=red,shape=square,flag=0,i=21078,u=0.7329916847856454,v=0.9698052478978167,w=0.49610227404122836,x=4.264437968440457 -color=red,shape=square,flag=0,i=21095,u=0.9764840347415089,v=0.838333079493244,w=0.4969026859805641,x=5.68131854704382 -color=red,shape=circle,flag=1,i=21126,u=0.014682784459728038,v=0.10550928941947696,w=0.5094537998867915,x=3.3239921648188537 -color=purple,shape=triangle,flag=0,i=21127,u=0.8463656790692411,v=0.4077440524757441,w=0.5101814889990439,x=3.846422687411694 -color=red,shape=square,flag=1,i=21132,u=0.7904267494405386,v=0.0060406446277151415,w=0.49480729617066893,x=5.422971662343695 -color=red,shape=square,flag=0,i=21143,u=0.24050115180077702,v=0.0259628938661991,w=0.4929038038863163,x=5.279677133329643 -color=red,shape=triangle,flag=0,i=21195,u=0.07514479515457051,v=0.9395936976454098,w=0.4911374432049697,x=6.103449808729015 -color=red,shape=square,flag=0,i=21206,u=0.8170123044579777,v=0.3363830563577408,w=0.5000333271090005,x=5.009080400063149 -color=green,shape=square,flag=1,i=21249,u=0.19556305857552714,v=0.8124073545532011,w=0.49840806271380145,x=5.606232044742601 -color=blue,shape=triangle,flag=0,i=21288,u=0.7128002001284794,v=0.1445677150741791,w=0.46702652105537623,x=2.880210428921245 -color=red,shape=square,flag=0,i=21293,u=0.479879952170827,v=0.23045326089982876,w=0.5149073585125089,x=4.445441822586167 -color=red,shape=triangle,flag=1,i=21303,u=0.21119451339365447,v=0.6857255229915151,w=0.48811329937464615,x=3.1597744122711724 -color=red,shape=circle,flag=0,i=21308,u=0.21412695396620884,v=0.2606484348270333,w=0.5092201386499259,x=7.317026721123564 -color=purple,shape=square,flag=1,i=21310,u=0.7941515170188567,v=0.15309972301899355,w=0.47522426187046973,x=6.455681479868335 -color=red,shape=circle,flag=0,i=21321,u=0.5913985027165712,v=0.5520566533130662,w=0.5136274713116568,x=4.979826280780514 -color=red,shape=square,flag=0,i=21368,u=0.6906209818509174,v=0.2240158925443917,w=0.5117884572803822,x=6.121298031342899 -color=purple,shape=triangle,flag=0,i=21374,u=0.2755963693831439,v=0.8289675472773185,w=0.49742984079090047,x=6.5284168279228 -color=red,shape=square,flag=0,i=21390,u=0.7689707378037345,v=0.31420038059789834,w=0.5083377777030393,x=5.560811933079074 -color=yellow,shape=circle,flag=1,i=21392,u=0.05622911377538875,v=0.30755696438543234,w=0.5016869193460596,x=5.11113585022663 -color=blue,shape=triangle,flag=0,i=21405,u=0.5268525396274654,v=0.795946919565389,w=0.45750842351701976,x=5.734388155634072 -color=green,shape=circle,flag=1,i=21411,u=0.04734644152491252,v=0.9895216947833483,w=0.4906643160218014,x=2.22884985139162 -color=red,shape=triangle,flag=0,i=21418,u=0.41134099675391245,v=0.6257906776454929,w=0.48407427561669986,x=5.876275839274189 -color=green,shape=square,flag=0,i=21423,u=0.3411519068342579,v=0.021195059955016582,w=0.49259224643733857,x=3.8341401924271956 -color=red,shape=square,flag=0,i=21433,u=0.15131023113786335,v=0.2545504713024562,w=0.5064130967091686,x=2.736294080363485 -color=red,shape=square,flag=0,i=21434,u=0.5003936342646786,v=0.7996668685364292,w=0.5075988890732777,x=5.8404083985184 -color=yellow,shape=square,flag=1,i=21435,u=0.891336051422774,v=0.8900231549747616,w=0.5040006583947538,x=5.692972336380177 -color=red,shape=square,flag=0,i=21448,u=0.5307491905644712,v=0.4379213716150401,w=0.5052880282668007,x=4.637437751239553 -color=purple,shape=circle,flag=0,i=21449,u=0.05531995928749733,v=0.9794913580104999,w=0.5038226428142504,x=5.892271836611318 -color=red,shape=circle,flag=0,i=21456,u=0.651076059619755,v=0.6263960433464169,w=0.5351105066633999,x=4.19398868353847 -color=red,shape=square,flag=0,i=21462,u=0.3369908585226723,v=0.04773072964788039,w=0.5043263604565719,x=3.7777468262293907 -color=green,shape=circle,flag=0,i=21490,u=0.7898180559305741,v=0.40108776279702374,w=0.4877770307347506,x=4.0088350488961835 -color=red,shape=circle,flag=0,i=21504,u=0.44144315627824804,v=0.42797485664212803,w=0.5346505822855753,x=4.524957114175236 -color=red,shape=circle,flag=0,i=21508,u=0.5995849828140898,v=0.6126915239432447,w=0.535772961147537,x=3.7804088229065833 -color=green,shape=triangle,flag=0,i=21532,u=0.7144051751268949,v=0.0532367368974076,w=0.5046211083736108,x=3.924063447585368 -color=yellow,shape=circle,flag=1,i=21540,u=0.8623257574586204,v=0.6375173484319057,w=0.4979865832912213,x=1.7651427679128553 -color=red,shape=triangle,flag=0,i=21541,u=0.5550061289868258,v=0.19311336373441867,w=0.4764961485801617,x=3.969861772108475 -color=purple,shape=square,flag=1,i=21543,u=0.8691151963850937,v=0.3446216224781544,w=0.47696591302089425,x=6.789067296199428 -color=yellow,shape=triangle,flag=1,i=21544,u=0.5806193156364592,v=0.2176519199388216,w=0.4817252637367531,x=5.326527398115316 -color=red,shape=triangle,flag=0,i=21552,u=0.5991815025532786,v=0.287622819045407,w=0.472811859081606,x=7.852624005892998 -color=red,shape=square,flag=0,i=21558,u=0.7161120538252276,v=0.200988584299714,w=0.49840475167334347,x=4.057135195723018 -color=blue,shape=triangle,flag=1,i=21563,u=0.5454124967341736,v=0.26733794533150324,w=0.46029991295852674,x=6.947049509191977 -color=yellow,shape=triangle,flag=1,i=21567,u=0.9088812503391556,v=0.2418400446321033,w=0.47848526048044004,x=5.321271711755872 -color=red,shape=circle,flag=1,i=21578,u=0.3422846056424762,v=0.37834502470474557,w=0.5501149829841544,x=4.444937470283529 -color=blue,shape=square,flag=0,i=21603,u=0.5428543052193355,v=0.46318585121897493,w=0.48955670625842057,x=4.17403137862323 -color=red,shape=triangle,flag=1,i=21606,u=0.3935490596732871,v=0.9797167798716727,w=0.4715102369673862,x=6.799445885564512 -color=red,shape=square,flag=1,i=21619,u=0.909934728202999,v=0.5119129155167673,w=0.49737464360721895,x=4.571572224384272 -color=green,shape=square,flag=1,i=21623,u=0.7814360511897981,v=0.5896324745193484,w=0.48699110699848763,x=4.43537350228137 -color=red,shape=triangle,flag=1,i=21625,u=0.051071354157938176,v=0.7519231802421672,w=0.4760077497564983,x=6.996091316618849 -color=red,shape=circle,flag=0,i=21628,u=0.07270971127986847,v=-0.016414971105282394,w=0.5472942566681013,x=5.860927896809422 -color=purple,shape=triangle,flag=0,i=21636,u=0.5685316767846199,v=0.01912106890856846,w=0.49782977364697106,x=4.685565821797521 -color=purple,shape=square,flag=0,i=21643,u=0.8863171836197399,v=0.5850820667956556,w=0.46804656937470335,x=5.158722695703592 -color=blue,shape=square,flag=1,i=21648,u=0.18180061370103762,v=0.5389115990457999,w=0.48397977953719323,x=4.391018882127969 -color=purple,shape=square,flag=0,i=21650,u=0.2272638063103246,v=0.9999751864255598,w=0.4690754110719239,x=4.874878689157362 -color=blue,shape=triangle,flag=0,i=21661,u=0.4822239781894736,v=0.459283624860774,w=0.45652395171573695,x=4.830135203545993 -color=yellow,shape=circle,flag=1,i=21678,u=0.9713252215203851,v=0.0032838959668622936,w=0.49924169829892373,x=4.347830870872097 -color=red,shape=triangle,flag=0,i=21688,u=0.5030123424917308,v=0.5065586655397507,w=0.4690210914902035,x=4.191715047877949 -color=red,shape=circle,flag=1,i=21695,u=0.878685971609549,v=0.8775353647337604,w=0.5389771332212562,x=4.637341572454716 -color=green,shape=square,flag=0,i=21709,u=0.8153050110816056,v=0.8789884604906779,w=0.48331051779034556,x=5.999810666772646 -color=yellow,shape=triangle,flag=1,i=21756,u=0.977185020962831,v=0.7903545309088181,w=0.4903148196725208,x=6.060236508394709 -color=orange,shape=triangle,flag=0,i=21762,u=0.9527922622244919,v=0.3741811039393883,w=0.5548027776141339,x=6.615729237293617 -color=orange,shape=square,flag=0,i=21769,u=0.8977463870394035,v=0.5179054952659966,w=0.4672807579458321,x=5.332571072807396 -color=orange,shape=triangle,flag=0,i=21771,u=0.4811752006010426,v=0.5975462878820786,w=0.5553053052970471,x=4.066752606850173 -color=red,shape=square,flag=1,i=21786,u=0.43632829092308345,v=0.3319361654062488,w=0.4848170535422973,x=4.624369904082484 -color=green,shape=square,flag=0,i=21787,u=0.6148973698468939,v=0.8978105718100777,w=0.4869429283976462,x=3.4458903012297717 -color=blue,shape=triangle,flag=1,i=21831,u=0.06491058549850748,v=0.5489107981049747,w=0.46057094312732805,x=2.6757834975650283 -color=red,shape=square,flag=0,i=21832,u=0.29725885508597305,v=0.7168105449072771,w=0.49053004634660896,x=4.060258874329796 -color=red,shape=square,flag=0,i=21834,u=0.6027093979020824,v=0.8116283323254283,w=0.4939688104637858,x=6.427074398871658 -color=red,shape=circle,flag=0,i=21835,u=0.20404592072358674,v=0.1547325628594451,w=0.5138768664066818,x=4.746891787347843 -color=red,shape=square,flag=1,i=21837,u=0.2536919623396767,v=0.7810050640160489,w=0.49657305998067386,x=4.940604650908614 -color=red,shape=circle,flag=1,i=21840,u=0.9327736097717733,v=0.9311343192263329,w=0.5135774833356186,x=5.45811746419271 -color=purple,shape=triangle,flag=0,i=21846,u=0.5041786130470416,v=0.9483200543242586,w=0.4888652617523682,x=4.139859418393173 -color=red,shape=square,flag=0,i=21858,u=0.13747478569265603,v=0.6500982446511613,w=0.4889957184466165,x=5.022966055803096 -color=red,shape=square,flag=1,i=21884,u=0.3227411936424912,v=0.7177207084319108,w=0.48985434213650725,x=7.747687963200451 -color=red,shape=circle,flag=1,i=21890,u=0.01779936782298963,v=0.01672704502333422,w=0.5162751961060607,x=5.815051083119799 -color=purple,shape=square,flag=0,i=21895,u=0.038200297008298745,v=0.6987117030511367,w=0.4633864788329225,x=6.078496804227996 -color=red,shape=square,flag=1,i=21904,u=0.27435041157131446,v=0.7198597249887962,w=0.4886877132333041,x=5.651700723390704 -color=green,shape=square,flag=0,i=21907,u=0.5074137845807053,v=0.11659089256269839,w=0.4791808061501693,x=4.748941677172227 -color=red,shape=triangle,flag=0,i=21917,u=0.5648956406376043,v=0.34858648370834544,w=0.46355835297722076,x=6.555133465611949 -color=green,shape=square,flag=0,i=21925,u=0.3143703464800479,v=0.5910473795803071,w=0.48435096892195106,x=5.85327588774183 -color=blue,shape=triangle,flag=1,i=21944,u=0.646556358055206,v=0.5767555325214678,w=0.460999235144728,x=6.063911829323001 -color=blue,shape=square,flag=1,i=21948,u=0.06249951576667556,v=0.6948640820041468,w=0.5006793250059718,x=2.490162327671141 -color=blue,shape=square,flag=1,i=21954,u=0.871739367274581,v=0.27721239255668517,w=0.5016402072715608,x=5.748282535510005 -color=red,shape=triangle,flag=0,i=21958,u=0.7348942724858728,v=0.6114793725971515,w=0.46704369426616466,x=5.557762902011185 -color=red,shape=circle,flag=1,i=21979,u=0.2268341966995554,v=0.13998481191626178,w=0.5142782047291493,x=3.1431670096486886 -color=orange,shape=square,flag=0,i=21985,u=0.3969542971064818,v=0.12450422641705017,w=0.4604904884157345,x=4.330105445041991 -color=red,shape=triangle,flag=1,i=21999,u=0.3575352265558621,v=0.21354018827826393,w=0.4620932065290542,x=4.093441077460721 -color=red,shape=square,flag=1,i=22006,u=0.6203058230695373,v=0.19052894035604195,w=0.4849307848850839,x=4.344531487207733 -color=red,shape=circle,flag=0,i=22029,u=0.043932278699233995,v=0.12567225604536203,w=0.5144657144432702,x=2.4989773830243527 -color=yellow,shape=circle,flag=1,i=22033,u=0.590581707368831,v=0.5596137226484427,w=0.49362805330000936,x=4.769959718677032 -color=blue,shape=square,flag=0,i=22040,u=0.43477105092947876,v=0.7886387272308767,w=0.5029690768161315,x=6.2180295927136084 -color=blue,shape=triangle,flag=0,i=22042,u=0.9645416995753514,v=0.938483196452791,w=0.467615803541512,x=6.453884220574573 -color=red,shape=square,flag=0,i=22051,u=0.9805684167239406,v=0.5452666091870497,w=0.4843116922718076,x=4.217434843189204 -color=blue,shape=circle,flag=1,i=22068,u=0.7885190863385096,v=0.6057816872362967,w=0.5055798595735497,x=4.2766593248087945 -color=red,shape=circle,flag=1,i=22073,u=0.9295942495471209,v=0.8963724948634558,w=0.5016493152624675,x=4.733670687810302 -color=red,shape=circle,flag=1,i=22076,u=0.5873168506919586,v=0.4941105665376684,w=0.5043295322856316,x=4.40241193062348 -color=blue,shape=square,flag=1,i=22080,u=0.36567058746781456,v=0.5467731375372858,w=0.4990598148918417,x=6.884640814498577 -color=blue,shape=triangle,flag=1,i=22102,u=0.05182869819523728,v=0.8050879763654976,w=0.4622316596018345,x=4.77035578066242 -color=red,shape=square,flag=1,i=22114,u=0.4261696616058921,v=0.6967517553320015,w=0.48346591276429723,x=4.3221731436400415 -color=red,shape=square,flag=1,i=22128,u=0.8627015910076006,v=0.10767986134045882,w=0.4871998838234642,x=5.913161342933268 -color=red,shape=triangle,flag=0,i=22140,u=0.31607338035315946,v=0.9153033877331799,w=0.47320147670034146,x=5.986312354469507 -color=red,shape=square,flag=0,i=22155,u=0.5507315423676834,v=0.07665942148140314,w=0.49898498721565226,x=5.913002188807847 -color=red,shape=square,flag=1,i=22182,u=0.10073684311425768,v=0.29940739523729143,w=0.5024464916537524,x=3.342679516509387 -color=blue,shape=square,flag=0,i=22195,u=0.4644743224822755,v=0.5346152340411093,w=0.5056339032967823,x=5.235196022920134 -color=red,shape=triangle,flag=1,i=22196,u=0.04108539719809534,v=0.4179295202262703,w=0.475537628255667,x=4.38497893936318 -color=purple,shape=triangle,flag=0,i=22198,u=0.10297868514442432,v=0.6353922829468174,w=0.5014166609242939,x=4.8793032399406755 -color=green,shape=square,flag=0,i=22205,u=0.9563827419868632,v=0.02774015231792981,w=0.48993454160192296,x=5.7838984271753615 -color=yellow,shape=square,flag=1,i=22206,u=0.1483118703576879,v=0.3724226563656645,w=0.5069770367150711,x=2.7387052395195934 -color=green,shape=triangle,flag=1,i=22221,u=0.01930095360344508,v=0.044260984931902,w=0.4901800304221115,x=4.512500787189332 -color=red,shape=triangle,flag=0,i=22245,u=0.35916710577309596,v=0.8509086368144284,w=0.4780522169181255,x=5.628970373182111 -color=red,shape=triangle,flag=0,i=22274,u=0.21365488275777578,v=0.4647660904660077,w=0.4897926501871917,x=5.058750319277301 -color=blue,shape=circle,flag=0,i=22279,u=0.3794552496743996,v=0.7642680403039164,w=0.5015277679634573,x=6.7195412034013176 -color=red,shape=triangle,flag=1,i=22280,u=0.9420399451250119,v=0.48428384263341495,w=0.4893376793024842,x=5.1506911101868775 -color=green,shape=circle,flag=0,i=22282,u=0.5263007670178349,v=0.014142276466250991,w=0.4888191763601706,x=3.3889692752380234 -color=red,shape=circle,flag=1,i=22290,u=0.8003957407184223,v=0.715103723476151,w=0.5008608133674888,x=5.882542060457841 -color=red,shape=circle,flag=0,i=22301,u=0.4657275707796691,v=0.4377350969195919,w=0.49943354393795486,x=5.311197783994828 -color=red,shape=circle,flag=0,i=22306,u=0.6081967282072333,v=0.6781471165779014,w=0.5006472842573739,x=5.447282649528127 -color=purple,shape=triangle,flag=0,i=22324,u=0.625120180063119,v=0.8240625003738329,w=0.5025026436099966,x=4.8994106981360614 -color=yellow,shape=triangle,flag=1,i=22325,u=0.1135299754240886,v=0.9893886679900336,w=0.4936421924352838,x=4.460815216189723 -color=yellow,shape=square,flag=1,i=22326,u=0.8800081445296511,v=0.019729917598184987,w=0.5123858143380315,x=5.695406076808497 -color=yellow,shape=triangle,flag=1,i=22330,u=0.561759466667296,v=0.5572254678485445,w=0.4969092861235089,x=4.810800340868497 -color=green,shape=triangle,flag=0,i=22358,u=0.18260375512941507,v=0.876073948800425,w=0.481858955029465,x=5.287760948091096 -color=green,shape=circle,flag=0,i=22367,u=0.3845957697508985,v=0.018692914671353145,w=0.48470952367028747,x=4.114261809864085 -color=yellow,shape=triangle,flag=0,i=22371,u=0.8443051188142019,v=0.43410019879010964,w=0.4960372684466781,x=5.986469091493085 -color=red,shape=circle,flag=1,i=22374,u=0.4078666427416304,v=0.31327016069074615,w=0.49235251483639225,x=2.7883857174436515 -color=red,shape=square,flag=0,i=22380,u=0.7015574472079029,v=0.05171416106481863,w=0.4941515301405302,x=5.04434905888516 -color=red,shape=circle,flag=1,i=22396,u=0.3564266725679328,v=0.43606361177962794,w=0.49722731137702975,x=5.103495908802769 -color=red,shape=square,flag=0,i=22400,u=0.7184341898806038,v=0.7410214031972242,w=0.500998282971396,x=4.777478749460866 -color=red,shape=triangle,flag=1,i=22405,u=0.5736535140532406,v=0.34937579864724044,w=0.49221501613768165,x=4.097212728395965 -color=yellow,shape=square,flag=1,i=22412,u=0.6063249455452154,v=0.09377389220655175,w=0.5167116405650078,x=6.584559889225678 -color=red,shape=square,flag=0,i=22417,u=0.25756424123855926,v=0.888281910692454,w=0.5001566046384343,x=4.228503437312928 -color=blue,shape=square,flag=0,i=22504,u=0.304475080753288,v=0.2082416028341023,w=0.49081234444357535,x=5.903768626693311 -color=yellow,shape=triangle,flag=1,i=22505,u=0.2476259721272076,v=0.9612620769583891,w=0.5066326788053319,x=4.690125741994019 -color=yellow,shape=circle,flag=1,i=22508,u=0.13515228920107658,v=0.630478194977146,w=0.4944251304893387,x=5.041932268369011 -color=green,shape=triangle,flag=0,i=22510,u=0.22850347539357074,v=0.23511388963295687,w=0.48979495139811197,x=4.557965762953089 -color=red,shape=triangle,flag=1,i=22514,u=0.9235242260081072,v=0.5616880992362214,w=0.5051202050979727,x=3.383680030189833 -color=blue,shape=triangle,flag=0,i=22541,u=0.7935783469207115,v=0.14609943654505775,w=0.4783763820435312,x=4.964762249510618 -color=orange,shape=square,flag=0,i=22544,u=0.8078036685860043,v=0.946039689000959,w=0.461221299545693,x=6.7932686589614795 -color=red,shape=triangle,flag=1,i=22563,u=0.9590803652137688,v=0.21934729755521032,w=0.5019932317563995,x=5.212499965616153 -color=red,shape=triangle,flag=0,i=22590,u=0.3211669968131414,v=0.9542622209474696,w=0.507398445019412,x=4.66317134962204 -color=red,shape=square,flag=0,i=22624,u=0.19123810966299948,v=0.897335774498942,w=0.4997050599047793,x=4.135730708677318 -color=red,shape=circle,flag=1,i=22626,u=0.9543889601592358,v=0.9809586445063544,w=0.51630715679236,x=4.8257437101738345 -color=green,shape=square,flag=1,i=22645,u=0.290673224233454,v=0.5624655455592135,w=0.4826390265997839,x=6.62699830717576 -color=red,shape=triangle,flag=0,i=22648,u=0.7869942861547136,v=0.25176797799312467,w=0.5076407728542566,x=5.742203258300368 -color=red,shape=triangle,flag=0,i=22654,u=0.34909640879353976,v=0.4771305310629287,w=0.510767723688411,x=3.908252301980633 -color=red,shape=square,flag=1,i=22662,u=0.7150019109976505,v=0.589139442261408,w=0.5060178606126404,x=3.966257988561391 -color=red,shape=triangle,flag=0,i=22663,u=0.0934293856347842,v=0.42037781783300454,w=0.5125806216641748,x=6.61196152561503 -color=blue,shape=triangle,flag=0,i=22664,u=0.011910868478755776,v=0.7708511846248055,w=0.48753490969087887,x=5.379080042442688 -color=red,shape=triangle,flag=0,i=22669,u=0.6710061633806403,v=0.1272278043460734,w=0.5160732179852063,x=6.062066031186976 -color=red,shape=square,flag=1,i=22675,u=0.23366310838626225,v=0.023855666927075747,w=0.5031681341948554,x=4.873906874526924 -color=red,shape=circle,flag=0,i=22679,u=0.14310254559089575,v=0.06814248262406124,w=0.5177678869079146,x=4.46572924532907 -color=green,shape=circle,flag=0,i=22685,u=0.1963330273098456,v=0.009943650095666667,w=0.47642674282069647,x=2.4618817353633187 -color=red,shape=circle,flag=0,i=22691,u=0.9084870151254993,v=0.8658081651692412,w=0.516359291858911,x=4.649828452052325 -color=red,shape=triangle,flag=0,i=22694,u=0.417181709097607,v=0.7136335454431197,w=0.5127798550135525,x=6.08976324251034 -color=blue,shape=circle,flag=0,i=22732,u=0.8420027395243015,v=0.41010848148155066,w=0.4950831386294427,x=4.634375806402584 -color=green,shape=square,flag=0,i=22744,u=0.12496920223784014,v=0.49858231402884456,w=0.483776100218785,x=4.016895638765839 -color=red,shape=circle,flag=0,i=22745,u=0.5345468901160937,v=0.5877527190456036,w=0.5138043737551222,x=4.992815954707054 -color=red,shape=circle,flag=1,i=22756,u=0.3536659679851689,v=0.41620391458279904,w=0.5130419796290119,x=5.330789604933889 -color=orange,shape=circle,flag=0,i=22763,u=0.9190273261231365,v=0.6714007132424881,w=0.5511375003169077,x=5.319044419531634 -color=purple,shape=triangle,flag=0,i=22781,u=0.9295205448942289,v=0.7111156518717175,w=0.5035970529485849,x=6.025408159343598 -color=red,shape=circle,flag=0,i=22782,u=0.18653467441088423,v=0.16407662792108896,w=0.510750316182501,x=3.998789546247329 -color=red,shape=circle,flag=1,i=22787,u=0.9970174169303028,v=0.9012157635807073,w=0.5145707456359636,x=3.9603187160501747 -color=red,shape=square,flag=1,i=22792,u=0.15136673239971,v=0.07701701967366947,w=0.49402665298825343,x=4.713683528049551 -color=yellow,shape=square,flag=1,i=22794,u=0.07667826164819724,v=0.37552971772134636,w=0.5235873231540557,x=4.494761710168215 -color=red,shape=triangle,flag=1,i=22803,u=0.6098053256350482,v=0.82972280023953,w=0.49796228414117655,x=5.6183185449501565 -color=green,shape=square,flag=0,i=22806,u=0.8267854594990207,v=0.38903665833444945,w=0.4740231286636921,x=2.543387333985283 -color=red,shape=square,flag=0,i=22809,u=0.7213338867324818,v=0.5076755245091441,w=0.49316520216914944,x=3.8586582476753377 -color=green,shape=square,flag=0,i=22825,u=0.8358486593628349,v=0.09219739905246627,w=0.47164484870792567,x=6.1596541846362785 -color=red,shape=circle,flag=0,i=22829,u=0.5066949289888992,v=0.437132273418202,w=0.5126548764383861,x=4.320802890683658 -color=purple,shape=square,flag=1,i=22831,u=0.6530872860581757,v=0.9328311165111116,w=0.49471925760625834,x=4.335871480662567 -color=red,shape=square,flag=1,i=22845,u=0.31664220635016394,v=0.9640193444436116,w=0.4962507172776447,x=7.371518039806723 -color=red,shape=square,flag=1,i=22853,u=0.5034364462806025,v=0.6481816564560297,w=0.5006019916644879,x=4.458341894469222 -color=green,shape=square,flag=1,i=22877,u=0.9769151376939849,v=0.18401206817468663,w=0.47601114176294956,x=4.691916594468638 -color=blue,shape=triangle,flag=1,i=22893,u=0.23534810546344453,v=0.12131320116499156,w=0.4842596616200066,x=3.044027827104633 -color=red,shape=triangle,flag=0,i=22905,u=0.045157540481247094,v=0.651585344377143,w=0.4945897960208256,x=5.031538731949464 -color=blue,shape=square,flag=0,i=22930,u=0.4501072656146621,v=0.8963078840091769,w=0.49511319577621776,x=4.607625033669522 -color=red,shape=circle,flag=0,i=22941,u=0.3543137697482621,v=0.30329261024218473,w=0.5059725122883698,x=6.297611804388446 -color=yellow,shape=triangle,flag=1,i=22945,u=0.05757503983477552,v=0.6236811778392366,w=0.4909242656735214,x=5.997358656717654 -color=green,shape=square,flag=1,i=22955,u=0.5044063382557639,v=0.8784454242096017,w=0.47927155028078905,x=5.313359674452236 -color=red,shape=square,flag=0,i=22960,u=0.11802117546997326,v=0.1447344694231808,w=0.4911330000888476,x=5.501587978118951 -color=green,shape=circle,flag=0,i=22965,u=0.47116799635680473,v=0.5514665055465101,w=0.48029862840348614,x=4.955149091785376 -color=red,shape=circle,flag=1,i=22976,u=0.35095448820822717,v=0.2835439038025327,w=0.5039589415490381,x=4.662992736200368 -color=blue,shape=triangle,flag=1,i=22990,u=0.4971451902854148,v=0.3618865702801357,w=0.49742858694753495,x=6.087065255578792 -color=blue,shape=circle,flag=0,i=23008,u=0.4850299809358679,v=0.9472683760002961,w=0.5029606908516189,x=5.286881830029806 -color=red,shape=square,flag=0,i=23011,u=0.9448095167203214,v=0.00318281597099912,w=0.49717706595087674,x=6.072178967336626 -color=red,shape=triangle,flag=0,i=23038,u=0.5974407519370348,v=0.6521533239726316,w=0.5087356628867192,x=5.362014623324517 -color=yellow,shape=circle,flag=1,i=23051,u=0.890221185607212,v=0.6184733433833359,w=0.49015670440801073,x=5.802267662246231 -color=green,shape=triangle,flag=1,i=23067,u=0.07256069885965499,v=0.5197958886035285,w=0.4938589624705172,x=5.539893849706517 -color=yellow,shape=triangle,flag=1,i=23094,u=0.16745477457964586,v=0.3210473090903906,w=0.4983589188440152,x=4.014640422202761 -color=green,shape=circle,flag=0,i=23110,u=0.6905717005250935,v=0.4196504374409644,w=0.48854375880908135,x=4.521045733215048 -color=red,shape=square,flag=0,i=23111,u=0.8273872555208033,v=0.924287338992132,w=0.5171730085436889,x=4.4507440944526495 -color=yellow,shape=square,flag=1,i=23117,u=0.6864514476428522,v=0.3875716690464819,w=0.5158671426294485,x=5.3841546979528765 -color=red,shape=square,flag=1,i=23119,u=0.4010482788675709,v=0.13987513942337404,w=0.5161442760631973,x=5.716300726599036 -color=red,shape=triangle,flag=0,i=23121,u=0.6564046358959225,v=0.5748079335638473,w=0.5163483397320485,x=5.164019508421592 -color=red,shape=square,flag=0,i=23139,u=0.47970021810374164,v=0.04448739444085237,w=0.5192800612108587,x=6.639047036038089 -color=blue,shape=square,flag=1,i=23147,u=0.6545299020038536,v=0.20907491979451132,w=0.4933565510711494,x=7.336259928188473 -color=purple,shape=square,flag=0,i=23150,u=0.8288170993684242,v=0.3013056124683675,w=0.5044752682364696,x=4.926947127363284 -color=orange,shape=circle,flag=1,i=23158,u=0.16296085075938893,v=0.1679143612528844,w=0.5510090715940692,x=7.131818625881533 -color=red,shape=square,flag=0,i=23164,u=0.19064338166542505,v=0.30609756445704817,w=0.5186227688008782,x=7.6304745511890575 -color=red,shape=circle,flag=1,i=23183,u=0.17963257616371797,v=0.21790149923600316,w=0.5167340115558117,x=4.979503240060656 -color=blue,shape=square,flag=0,i=23225,u=0.2722029921594127,v=0.0857704317288891,w=0.49455895389764915,x=6.234925129226768 -color=red,shape=square,flag=0,i=23226,u=0.3173198214327341,v=0.5287519872018137,w=0.5279871106775662,x=4.820793406798785 -color=blue,shape=triangle,flag=1,i=23227,u=0.06326765002799628,v=0.2030965851022173,w=0.5025357366076103,x=5.633596188776107 -color=yellow,shape=triangle,flag=1,i=23235,u=0.1959207011930677,v=0.9694446994077305,w=0.49858221639845063,x=5.688250176252964 -color=red,shape=triangle,flag=1,i=23236,u=0.11326307361349686,v=0.5238026000166917,w=0.5312506604967607,x=4.532098938118924 -color=green,shape=triangle,flag=0,i=23238,u=0.9284273023572681,v=0.024904179047771535,w=0.5014311473231676,x=5.264618742938295 -color=red,shape=triangle,flag=1,i=23239,u=0.7486308114425985,v=0.5792599414210843,w=0.5309433692635604,x=5.40094430990473 -color=red,shape=triangle,flag=0,i=23243,u=0.07349511303033818,v=0.7288456913871848,w=0.5261854598236152,x=5.9976981804079195 -color=green,shape=square,flag=1,i=23251,u=0.337738488006862,v=0.9218741783518535,w=0.48300040075101625,x=5.620615041617289 -color=red,shape=triangle,flag=1,i=23264,u=0.6429467881134677,v=0.24693845731394914,w=0.5245024821220093,x=5.781011225092461 -color=purple,shape=circle,flag=0,i=23274,u=0.2176506746399962,v=0.16151922944035269,w=0.5066370673260421,x=4.817078713659037 -color=red,shape=circle,flag=1,i=23277,u=0.1470965172704719,v=0.0939388375711197,w=0.516873496831346,x=5.765755063061776 -color=green,shape=square,flag=0,i=23284,u=0.33500362347418966,v=0.5107746808409778,w=0.48049337663962033,x=5.1203765990345405 -color=blue,shape=triangle,flag=0,i=23305,u=0.6234308829769849,v=0.49949725982288573,w=0.503289040855153,x=4.5194927690406415 -color=yellow,shape=square,flag=1,i=23316,u=0.928500902585382,v=0.5305811934229719,w=0.5111729062204553,x=5.21016447222306 -color=blue,shape=square,flag=1,i=23319,u=0.7891971824787298,v=0.9697638103413773,w=0.4832960148401535,x=5.714001015841863 -color=purple,shape=triangle,flag=0,i=23332,u=0.1894742972744351,v=0.09246415694188947,w=0.5038366568143672,x=5.264260713103147 -color=green,shape=circle,flag=0,i=23339,u=0.5598837889486235,v=0.42165928937339225,w=0.4796006283004833,x=5.5362293907604245 -color=green,shape=triangle,flag=0,i=23341,u=0.45400060369541884,v=0.7987833667175556,w=0.49315096966683747,x=7.389847427691393 -color=blue,shape=square,flag=1,i=23349,u=0.8759334909312394,v=0.8526409006897021,w=0.48212566267360624,x=4.295379910590351 -color=red,shape=square,flag=0,i=23353,u=0.33302228063348194,v=0.39005875101745735,w=0.5273874425863326,x=6.972948881298778 -color=yellow,shape=triangle,flag=0,i=23361,u=0.14411588978987833,v=0.2996404226191357,w=0.5008513906564935,x=5.342067144025026 -color=green,shape=square,flag=0,i=23363,u=0.11348677996467904,v=0.37960723964032306,w=0.4867056287486982,x=4.131443795714685 -color=yellow,shape=triangle,flag=0,i=23366,u=0.11453174843998815,v=0.05670257708150317,w=0.4985373321294248,x=5.021646317700202 -color=red,shape=circle,flag=1,i=23378,u=0.20742841236373621,v=0.1643143052980002,w=0.5200894196450062,x=6.669884843692472 -color=yellow,shape=triangle,flag=1,i=23387,u=0.8799429863815864,v=0.2238812513346875,w=0.49641443509606087,x=3.3315106686470326 -color=blue,shape=triangle,flag=1,i=23388,u=0.572348977940741,v=0.8719742819623544,w=0.5087346000006522,x=5.628147770546362 -color=purple,shape=square,flag=0,i=23394,u=0.11101035499249856,v=0.5361022909767356,w=0.5008023668268805,x=3.2150906726892825 -color=red,shape=square,flag=1,i=23403,u=0.9877866011909372,v=0.001407976217636775,w=0.5224953678090806,x=5.897717198549871 -color=blue,shape=triangle,flag=0,i=23408,u=0.7639238207095306,v=0.8433706642346348,w=0.5097220112537454,x=4.390790422880804 -color=red,shape=square,flag=0,i=23419,u=0.2686774934501168,v=0.04634149968713108,w=0.5324232027780118,x=4.0235176794683385 -color=green,shape=square,flag=0,i=23426,u=0.23570775454999937,v=0.8515944071369259,w=0.48024397522255824,x=4.510660774240647 -color=red,shape=square,flag=1,i=23443,u=0.9692643954254048,v=0.23654678728440626,w=0.5160723415840378,x=4.6213919982873986 -color=green,shape=triangle,flag=1,i=23452,u=0.35108078550552835,v=0.7323011571500437,w=0.4972178642922544,x=3.8568202113772023 -color=yellow,shape=square,flag=1,i=23456,u=0.2382981929787239,v=0.6439295813902012,w=0.5042095435101689,x=6.7238661644939945 -color=red,shape=circle,flag=1,i=23461,u=0.6849812512940661,v=0.7369214144541173,w=0.5215029622409405,x=5.074787342243876 -color=red,shape=square,flag=0,i=23487,u=0.1870558897159894,v=0.34911361061192403,w=0.5074974926998845,x=5.198021143370162 -color=red,shape=square,flag=0,i=23490,u=0.9571037103338532,v=0.30168283825069675,w=0.5076765930863943,x=4.87682808739305 -color=green,shape=triangle,flag=1,i=23492,u=0.37845588789308593,v=0.5843692716007478,w=0.49697714670954246,x=4.681154210691207 -color=red,shape=triangle,flag=1,i=23499,u=0.9489634816958415,v=0.9512562725625789,w=0.5181934400073268,x=5.798088204935347 -color=red,shape=triangle,flag=0,i=23512,u=0.6496381451909683,v=0.6264868349531356,w=0.5134794524602978,x=5.082460962998624 -color=blue,shape=circle,flag=1,i=23522,u=0.4498477086037945,v=0.7851690810404944,w=0.5146729929839238,x=4.545765283829305 -color=red,shape=square,flag=0,i=23534,u=0.5737520508427709,v=0.952008797349579,w=0.5083938733135008,x=6.085515991814169 -color=green,shape=square,flag=0,i=23545,u=0.2668898034132273,v=0.8751744182584394,w=0.4817901674248808,x=6.335147897977493 -color=purple,shape=square,flag=0,i=23547,u=0.480237346573802,v=0.17768333774784206,w=0.5143023435538197,x=4.393122019273999 -color=green,shape=triangle,flag=0,i=23549,u=0.5628552864115597,v=0.8525964434265687,w=0.5021437106137278,x=8.13414492020372 -color=green,shape=circle,flag=1,i=23555,u=0.5142752714065709,v=0.18839634572039876,w=0.48961056044451295,x=7.651422689170239 -color=blue,shape=triangle,flag=0,i=23572,u=0.5282897484829939,v=0.9571870333197425,w=0.5041198817098669,x=3.5926398772336134 -color=red,shape=circle,flag=1,i=23585,u=0.7926330525552574,v=0.7057002992540209,w=0.5275987625357925,x=6.6910453003375645 -color=green,shape=square,flag=0,i=23588,u=0.43291586321150977,v=0.7399387899109987,w=0.4819400508078948,x=4.213055836522195 -color=red,shape=circle,flag=1,i=23594,u=0.5584863101793759,v=0.5960031716881348,w=0.5266413669051735,x=5.040288577096548 -color=red,shape=square,flag=0,i=23601,u=0.026160425589723202,v=0.2106918355910713,w=0.5032833816481929,x=4.737356257458481 -color=red,shape=square,flag=0,i=23616,u=0.41384561250687146,v=0.1457072481923518,w=0.5120296475641143,x=5.212571615183232 -color=red,shape=circle,flag=0,i=23620,u=0.23984757848623084,v=0.21509975420297772,w=0.5260452920510058,x=5.560904782077699 -color=blue,shape=triangle,flag=0,i=23627,u=0.6221108424539085,v=0.6996988278755781,w=0.5088472481618641,x=4.31281683743493 -color=red,shape=square,flag=0,i=23633,u=0.28199172119733096,v=0.7598832023283023,w=0.5099509052814909,x=4.402472105430491 -color=red,shape=triangle,flag=0,i=23661,u=0.9661981561677621,v=0.3454740109285682,w=0.5264699444730383,x=5.6569681420945725 -color=yellow,shape=triangle,flag=1,i=23672,u=0.7973488634234054,v=0.06198682061980121,w=0.5053745358143131,x=7.10032832908191 -color=purple,shape=triangle,flag=0,i=23675,u=0.566385261024155,v=0.3349515750325801,w=0.5105398354895141,x=5.113656909198742 -color=red,shape=circle,flag=0,i=23682,u=0.05619336235744821,v=0.03041886979549777,w=0.5160708446578357,x=5.510910793914063 -color=purple,shape=circle,flag=0,i=23696,u=0.678870545187656,v=0.9305319252797172,w=0.4939277423511818,x=3.9485047826699287 -color=yellow,shape=triangle,flag=1,i=23705,u=0.2571202556454315,v=0.6200297589458074,w=0.5079060362440976,x=7.276836869756789 -color=blue,shape=triangle,flag=1,i=23707,u=0.8444785405864961,v=0.17881935841743757,w=0.5152639651748931,x=7.17855534872908 -color=red,shape=square,flag=1,i=23712,u=0.1066848119680377,v=0.6087079942632704,w=0.5013735574944854,x=6.710299404920831 -color=blue,shape=square,flag=0,i=23719,u=0.278423195659686,v=0.8896399663142538,w=0.5078848813292886,x=3.1042771661770683 -color=blue,shape=circle,flag=0,i=23722,u=0.6376399260926549,v=0.4637744999505107,w=0.5148754120648366,x=4.057503123569841 -color=red,shape=square,flag=0,i=23737,u=0.018811481913225236,v=0.24875484524575475,w=0.4871369557439983,x=5.672389420716473 -color=purple,shape=circle,flag=1,i=23744,u=0.17585924673523246,v=0.9396386758587885,w=0.49861994033105117,x=5.4001206638835795 -color=red,shape=triangle,flag=0,i=23745,u=0.08531808704159116,v=0.47560093962790306,w=0.5154554771508332,x=4.707170301843964 -color=red,shape=circle,flag=1,i=23748,u=0.8693976869888276,v=0.8950642871349858,w=0.5165295191706236,x=3.3253382532907527 -color=red,shape=triangle,flag=0,i=23762,u=0.8766604272138507,v=0.9550951297338228,w=0.5173269581062402,x=5.196227921112615 -color=red,shape=square,flag=1,i=23763,u=0.8463426770971938,v=0.7775220536146744,w=0.49423503094969923,x=3.0775080051111074 -color=purple,shape=square,flag=0,i=23767,u=0.2561566288142689,v=0.55902888885857,w=0.525641565266589,x=5.913894586745621 -color=red,shape=square,flag=1,i=23774,u=0.5031053936960308,v=0.47089973093923354,w=0.48999688647209,x=4.032194765926218 -color=green,shape=square,flag=1,i=23790,u=0.039010650178135986,v=0.7477425203559989,w=0.49054228398832755,x=5.758368112873792 -color=red,shape=triangle,flag=0,i=23798,u=0.2944493023068089,v=0.3053705033257309,w=0.5125433635936449,x=6.7534354418888105 -color=green,shape=circle,flag=0,i=23800,u=0.180749463380662,v=0.502074527083829,w=0.49090475819000967,x=6.3082002637492245 -color=blue,shape=square,flag=1,i=23804,u=0.1674016830221995,v=0.09291547366663333,w=0.5141152292492428,x=4.761397819580799 -color=yellow,shape=circle,flag=1,i=23810,u=0.03706662343613909,v=0.9159692580202179,w=0.489526405426117,x=6.0823389191202635 -color=red,shape=triangle,flag=0,i=23812,u=0.4360037792120762,v=0.48326292285672146,w=0.5119914861773859,x=3.0718120102284696 -color=yellow,shape=circle,flag=1,i=23841,u=0.91565115657097,v=0.1559391230984365,w=0.4918633802969998,x=4.359706209167996 -color=red,shape=square,flag=0,i=23847,u=0.2313801423459757,v=0.5188700566859388,w=0.4925272759241852,x=5.220219370173371 -color=purple,shape=circle,flag=0,i=23873,u=0.1264174840471627,v=0.5549920389724897,w=0.5031935120553704,x=6.036754843443859 -color=red,shape=circle,flag=0,i=23880,u=0.4250971118941149,v=0.32691141265128065,w=0.5088147484124527,x=5.921482985157826 -color=purple,shape=square,flag=1,i=23881,u=0.2059411178040228,v=0.802124762404155,w=0.5219456324784869,x=3.2332747784135076 -color=red,shape=square,flag=0,i=23890,u=0.262717368497979,v=0.4095960123131801,w=0.5004613573402783,x=4.007675878887047 -color=red,shape=triangle,flag=0,i=23892,u=0.990065337277071,v=0.49282710159029863,w=0.5061783313811727,x=4.420892427287193 -color=red,shape=square,flag=0,i=23898,u=0.17541228122753616,v=0.302744499009421,w=0.49595392511653763,x=6.497621157377228 -color=red,shape=square,flag=0,i=23900,u=0.32309551307993656,v=0.49686631256497904,w=0.49783027299140975,x=4.115022727441629 -color=blue,shape=triangle,flag=0,i=23908,u=0.964453190578294,v=0.0807492476378443,w=0.5257030088871973,x=6.364883177088749 -color=yellow,shape=square,flag=1,i=23912,u=0.9690658334747945,v=0.5133152381211084,w=0.521476357585508,x=5.550674235650296 -color=red,shape=triangle,flag=1,i=23922,u=0.03782868391756278,v=0.713864299069087,w=0.5002606814958692,x=4.594462729910213 -color=red,shape=square,flag=1,i=23950,u=0.7596490074850376,v=0.7032788867149541,w=0.48474982962521135,x=5.785065907227082 -color=blue,shape=triangle,flag=0,i=23953,u=0.36770004131687517,v=0.4492645440752139,w=0.5247018064386064,x=4.0701525069574265 -color=red,shape=square,flag=0,i=23966,u=0.9050174659381707,v=0.8568666693499032,w=0.4923683453069947,x=4.033789714716826 -color=orange,shape=square,flag=1,i=23975,u=0.22645819836382142,v=0.7108024053107417,w=0.46264714819619496,x=4.083309880103242 -color=red,shape=square,flag=0,i=23991,u=0.3293409049347982,v=0.11901085846456272,w=0.4789824685190482,x=4.674776266228354 -color=orange,shape=triangle,flag=0,i=24005,u=0.3822101717945783,v=0.4837522330957277,w=0.5275037097462535,x=4.277785276456906 -color=yellow,shape=square,flag=1,i=24012,u=0.6172480499647973,v=0.7936580678714651,w=0.5329173470085674,x=6.956542548759404 -color=green,shape=triangle,flag=1,i=24021,u=0.8313598500198173,v=0.2906790841176131,w=0.5027404486780256,x=4.301364943554991 -color=red,shape=circle,flag=0,i=24025,u=0.7693043369358932,v=0.7029426319887915,w=0.48905960467011156,x=1.8268617341471807 -color=yellow,shape=square,flag=1,i=24029,u=0.7330809386091931,v=0.49002949487944003,w=0.5290296814133423,x=3.036406465453382 -color=green,shape=square,flag=0,i=24039,u=0.9981802922692293,v=0.9349396701268718,w=0.5029245218383911,x=3.7307368500357314 -color=red,shape=square,flag=1,i=24049,u=0.8326647125311912,v=0.22711273133387866,w=0.48063609898704096,x=3.339649055008552 -color=purple,shape=triangle,flag=0,i=24066,u=0.35247876688893576,v=0.6982236744951981,w=0.48691393519695986,x=6.661632889317545 -color=red,shape=circle,flag=0,i=24077,u=0.6373331621648192,v=0.5802841510190402,w=0.4889588781476193,x=4.568362120656036 -color=red,shape=circle,flag=1,i=24081,u=0.12995456731136057,v=0.166743454166228,w=0.486728547135022,x=5.428564575412668 -color=purple,shape=square,flag=0,i=24085,u=0.9327858476840071,v=0.6019400312305438,w=0.5207851611964069,x=4.441070146286315 -color=yellow,shape=square,flag=1,i=24087,u=0.5767380461220525,v=0.22721827602865996,w=0.522801926163116,x=5.015791958340519 -color=red,shape=square,flag=0,i=24121,u=0.6923700959449809,v=0.40372280708971575,w=0.4768053562483246,x=6.814524252227478 -color=red,shape=triangle,flag=1,i=24129,u=0.07278460622061267,v=0.6363406558596526,w=0.5056310547612761,x=6.412204026501519 -color=purple,shape=circle,flag=0,i=24131,u=0.8293544307642253,v=0.26449789378830546,w=0.4969934211736489,x=4.66903641608489 -color=red,shape=square,flag=0,i=24149,u=0.491222046627109,v=0.2098133903893622,w=0.4880681938427089,x=1.7879383037512575 -color=yellow,shape=square,flag=1,i=24158,u=0.5493361890975975,v=0.382764036926871,w=0.5230805626817256,x=6.271504067004247 -color=yellow,shape=square,flag=0,i=24196,u=0.14682449845013568,v=0.460966767156074,w=0.5241028016642666,x=3.8178091040959568 -color=yellow,shape=circle,flag=1,i=24202,u=0.9926027440203834,v=0.7319753454275766,w=0.49649536522561144,x=4.3203040649067965 -color=yellow,shape=square,flag=0,i=24205,u=0.05713496088491765,v=0.946148566657532,w=0.5221414472322131,x=4.558171421280353 -color=blue,shape=triangle,flag=0,i=24210,u=0.05380120169641334,v=0.275318743628017,w=0.5303886077592667,x=3.5318396738589395 -color=red,shape=square,flag=0,i=24222,u=0.3509901122980337,v=0.5133600470322427,w=0.5092252413951253,x=4.399960551982097 -color=red,shape=square,flag=0,i=24226,u=0.07909196977259503,v=0.04209166124776631,w=0.5020116207515555,x=5.923454352424031 -color=red,shape=square,flag=1,i=24234,u=0.8783344279116255,v=0.2557030677507963,w=0.49656663735154266,x=5.087217606008873 -color=blue,shape=triangle,flag=0,i=24242,u=0.47684650008051666,v=0.8005730812576591,w=0.5312775038103603,x=5.401158410675392 -color=yellow,shape=square,flag=0,i=24244,u=0.1422759481650815,v=0.4499174639245199,w=0.5235911444388166,x=3.7226190258788256 -color=purple,shape=circle,flag=0,i=24246,u=0.18550030961376696,v=0.721342114703196,w=0.5047572430604074,x=5.876891170413199 -color=red,shape=circle,flag=1,i=24256,u=0.06467046009606936,v=0.0962187450196616,w=0.4819559155975114,x=4.6528223925989325 -color=red,shape=square,flag=1,i=24280,u=0.6038742473956866,v=0.6924952553560021,w=0.48831387578362817,x=4.647880963287406 -color=red,shape=triangle,flag=0,i=24309,u=0.6072322318971592,v=0.11145891318297196,w=0.5108167971890211,x=4.326995843193109 -color=red,shape=triangle,flag=0,i=24345,u=0.2734854812785562,v=0.9876372286167877,w=0.5200130162716525,x=3.0608064677951066 -color=red,shape=triangle,flag=0,i=24348,u=0.16931044275599072,v=0.33080512640023363,w=0.5176317514301072,x=4.7069378744015316 -color=red,shape=square,flag=0,i=24367,u=0.6477662909831355,v=0.3247662572031721,w=0.4932343730190598,x=4.876074038598661 -color=blue,shape=circle,flag=0,i=24380,u=0.9736113339129058,v=0.6756037446124955,w=0.5176266181342479,x=3.707869832367296 -color=yellow,shape=triangle,flag=1,i=24407,u=0.6663207383635591,v=0.7154532387334787,w=0.5224321085200672,x=5.502558389227132 -color=blue,shape=circle,flag=0,i=24410,u=0.5538009712487734,v=0.3099431836001013,w=0.5207113690485828,x=6.137761614926672 -color=red,shape=triangle,flag=0,i=24424,u=0.15424148992752262,v=0.42630925271530984,w=0.5226647909075632,x=5.112253484334038 -color=blue,shape=square,flag=0,i=24431,u=0.5791006981028038,v=0.147060030755771,w=0.5181654134678347,x=4.646179532504333 -color=purple,shape=triangle,flag=0,i=24443,u=0.4313279405805486,v=0.06686298675044844,w=0.5064134940369807,x=4.113614685094081 -color=red,shape=triangle,flag=0,i=24444,u=0.29196889630256473,v=0.46188259991821334,w=0.5257036770280761,x=5.6783853137436635 -color=red,shape=square,flag=0,i=24500,u=0.27287454203522576,v=0.5282281177523128,w=0.49810633325537496,x=3.6002534254547203 -color=red,shape=circle,flag=0,i=24507,u=0.10332461553478156,v=0.10374164345007093,w=0.48074698404961674,x=5.16782954746228 -color=purple,shape=circle,flag=0,i=24515,u=0.9558806142989852,v=0.7896106337170745,w=0.49987369136173165,x=3.475872194601838 -color=blue,shape=triangle,flag=0,i=24519,u=0.3039633105783571,v=0.04400441782744069,w=0.5274427478525106,x=3.615894807854925 -color=red,shape=circle,flag=0,i=24521,u=0.7828114510788164,v=0.7128370266436644,w=0.48004180837344274,x=4.266674685023329 -color=red,shape=triangle,flag=1,i=24526,u=0.40993615638834546,v=0.6306073940976629,w=0.5174098626153381,x=5.3453156509588835 -color=purple,shape=triangle,flag=0,i=24529,u=0.010083222198412178,v=0.5060460721226393,w=0.5138565613439221,x=5.106670108005759 -color=red,shape=square,flag=0,i=24532,u=0.781136641368791,v=0.7427123686735186,w=0.5104470463044536,x=4.846314479838938 -color=purple,shape=circle,flag=0,i=24546,u=0.8966809355188015,v=0.840720727841922,w=0.5019382506117174,x=3.61804101308595 -color=red,shape=circle,flag=0,i=24547,u=0.5675578207494792,v=0.6141838084420437,w=0.4814395347625242,x=3.8431531114531956 -color=red,shape=triangle,flag=0,i=24553,u=0.7330698610977062,v=0.5627167277643027,w=0.5183978952874161,x=6.499566618559693 -color=blue,shape=triangle,flag=1,i=24558,u=0.13683592814073509,v=0.8796684435701124,w=0.5260375921355964,x=5.63115054718767 -color=green,shape=square,flag=1,i=24565,u=0.8367623327688047,v=0.9981628321084548,w=0.48790359943912015,x=4.291861246731242 -color=purple,shape=circle,flag=0,i=24566,u=0.7887843806898586,v=0.019534311684181516,w=0.5036312105407535,x=3.7880401237487553 -color=red,shape=circle,flag=1,i=24567,u=0.9868577134070218,v=0.9686873132111709,w=0.4851988540542589,x=3.049266749000013 -color=red,shape=circle,flag=0,i=24583,u=0.7925786649322688,v=0.7953249025617605,w=0.48179294284468727,x=5.484696937132495 -color=yellow,shape=circle,flag=1,i=24590,u=0.45750678281984447,v=0.5870728563726236,w=0.49393297932789965,x=5.2918812270619675 -color=red,shape=triangle,flag=0,i=24593,u=0.8292097641384666,v=0.9369047916370914,w=0.5162029816955754,x=3.1772249052655472 -color=red,shape=circle,flag=0,i=24617,u=0.8423211077517533,v=0.9191099275539489,w=0.47664944115177404,x=4.9446864541468 -color=blue,shape=triangle,flag=0,i=24623,u=0.31784397770729356,v=0.2647086605489919,w=0.5277042941681739,x=6.211859687479072 -color=blue,shape=circle,flag=0,i=24634,u=0.8920021988760922,v=0.5292344220286258,w=0.5238682215285081,x=3.8886492251491425 -color=green,shape=triangle,flag=0,i=24635,u=0.41866526074699095,v=0.8003694387500091,w=0.5211946831489739,x=5.726274325678527 -color=purple,shape=square,flag=0,i=24637,u=0.4170921026773491,v=0.13124745702966734,w=0.5269139486368803,x=4.149645804172487 -color=orange,shape=circle,flag=0,i=24659,u=0.1856768858922363,v=0.7798826355298916,w=0.5425092425192989,x=4.351385569866242 -color=blue,shape=square,flag=1,i=24679,u=0.5168962434214746,v=0.6006008530800441,w=0.520216461930805,x=3.890667065613904 -color=yellow,shape=triangle,flag=1,i=24692,u=0.7784675871624672,v=0.7100548607832236,w=0.5115241528192892,x=4.742642277516541 -color=red,shape=square,flag=0,i=24697,u=0.4282191390403136,v=0.39936305191312504,w=0.4871076834485914,x=6.024071964882538 -color=red,shape=square,flag=0,i=24699,u=0.14562138711757877,v=0.9135999418847924,w=0.48870478503696296,x=4.741270389791599 -color=green,shape=square,flag=0,i=24713,u=0.4851289315173014,v=0.8555632738412017,w=0.48161174573999044,x=5.887215172661757 -color=green,shape=square,flag=1,i=24714,u=0.7496790575965755,v=0.02485648334475743,w=0.4819896989335906,x=5.477864781646009 -color=red,shape=circle,flag=0,i=24740,u=0.7549913608987702,v=0.8099642746020196,w=0.4685005987298493,x=3.9447805552141966 -color=purple,shape=triangle,flag=0,i=24750,u=0.5446504899723935,v=0.521573009820174,w=0.5050345487303328,x=4.750891782188507 -color=red,shape=circle,flag=0,i=24752,u=0.6143761129008561,v=0.6700034621960337,w=0.46741695022429874,x=5.057949004460491 -color=orange,shape=circle,flag=1,i=24764,u=0.2945430996974784,v=0.3201796153365686,w=0.5402160712004964,x=8.377666207479786 -color=orange,shape=square,flag=0,i=24767,u=0.25158419658777575,v=0.7038949330993773,w=0.46460313598867364,x=5.683706048813135 -color=yellow,shape=square,flag=0,i=24785,u=0.9545045160996185,v=0.4524478695361861,w=0.5077800004149832,x=5.319259963338258 -color=red,shape=circle,flag=0,i=24794,u=0.9512782502122759,v=0.9944442307252868,w=0.4729065834445926,x=5.041101153238117 -color=blue,shape=circle,flag=1,i=24795,u=0.6179294624125289,v=0.8260449527511678,w=0.5090377106372712,x=4.69614278615258 -color=red,shape=triangle,flag=1,i=24825,u=0.07150167317815714,v=0.5286578042738647,w=0.5179399470584168,x=5.5810535981192295 -color=red,shape=square,flag=0,i=24827,u=0.9063616356408548,v=0.33950307880563735,w=0.5078387603923648,x=7.092526721648312 -color=red,shape=circle,flag=0,i=24829,u=0.06399950880245531,v=0.08258391087274145,w=0.4694974287235985,x=4.312521389941339 -color=purple,shape=circle,flag=0,i=24834,u=0.13262433210219715,v=0.9812407114300432,w=0.5146244546537629,x=4.808785405997984 -color=orange,shape=circle,flag=0,i=24838,u=0.7264361685700211,v=0.7214928158359427,w=0.5399498856490877,x=5.27647934981674 -color=blue,shape=square,flag=1,i=24842,u=0.7998272822533002,v=0.5540738598008006,w=0.5089903629495965,x=4.051092327471555 -color=red,shape=square,flag=0,i=24848,u=0.7413232340211375,v=0.18739802080070334,w=0.4959363685432922,x=5.98179670687668 -color=orange,shape=triangle,flag=1,i=24855,u=0.828203545631617,v=0.16320239685847204,w=0.5385813765353484,x=4.349426323508998 -color=red,shape=square,flag=0,i=24860,u=0.7260174719821921,v=0.8143938811011305,w=0.49141811021692694,x=4.773896063746904 -color=red,shape=circle,flag=0,i=24862,u=0.18016795911435246,v=0.17993416143325622,w=0.4642124742981486,x=8.262446424259752 -color=blue,shape=triangle,flag=1,i=24863,u=0.5557089920741711,v=0.8593052233699389,w=0.5292722919728778,x=7.2860270209587865 -color=purple,shape=circle,flag=0,i=24868,u=0.35827381871070385,v=0.15443358251833816,w=0.5167271196943897,x=7.019351214304923 -color=yellow,shape=circle,flag=1,i=24875,u=0.4609088897514749,v=0.5005090881496719,w=0.48971584915675476,x=4.697055529964763 -color=red,shape=circle,flag=0,i=24876,u=0.08279982377309181,v=0.09326245911205308,w=0.46602560869831694,x=7.064746049628389 -color=red,shape=triangle,flag=1,i=24887,u=0.019388548190054866,v=0.16319784094155465,w=0.5216015278211371,x=3.917211378576552 -color=red,shape=circle,flag=0,i=24889,u=0.9712016664771334,v=0.9837470453798807,w=0.46445310959326774,x=4.404559825247913 -color=yellow,shape=circle,flag=1,i=24895,u=0.7351457116705528,v=0.11268862556618087,w=0.4873576011918283,x=8.26201097919447 -color=red,shape=triangle,flag=0,i=24897,u=0.3250842295630674,v=0.8841171771366662,w=0.5210653091264246,x=5.833904881714868 -color=orange,shape=square,flag=1,i=24924,u=0.3228177312988433,v=0.32584423822044506,w=0.4698703268350223,x=4.479784386363981 -color=red,shape=circle,flag=0,i=24940,u=0.4217278880696502,v=0.4003192502581979,w=0.47251941872746384,x=6.072471487722709 -color=red,shape=triangle,flag=1,i=24941,u=0.9368289632434924,v=0.6179612157670777,w=0.5128479641958037,x=5.482279977596622 -color=blue,shape=circle,flag=0,i=24944,u=0.3103782595729694,v=0.8433240163800687,w=0.5010540464797295,x=5.071897432691483 -color=yellow,shape=square,flag=1,i=24949,u=0.9826616843118412,v=0.5151233558225586,w=0.5201148638798578,x=4.9749169931806465 -color=red,shape=circle,flag=1,i=24953,u=0.2257374496016118,v=0.18501775724875621,w=0.46732798989534974,x=4.546718539022561 -color=red,shape=square,flag=0,i=24960,u=0.8535163524186117,v=0.3446860705123437,w=0.4936367217287923,x=3.7181138622323466 -color=yellow,shape=triangle,flag=1,i=24966,u=0.01604092808972868,v=0.3001635819282191,w=0.5193422128274403,x=6.553616926943543 -color=blue,shape=triangle,flag=0,i=24967,u=0.711472670773501,v=0.18154414637546534,w=0.5298075535265754,x=5.788995843607688 -color=red,shape=triangle,flag=1,i=24968,u=0.002977852200798048,v=0.09733930249777467,w=0.514537794388392,x=5.968530038869697 -color=red,shape=triangle,flag=0,i=24985,u=0.2026734823232471,v=0.6983256045299534,w=0.5238128302517565,x=5.649871772398176 -color=red,shape=triangle,flag=0,i=25004,u=0.040495542520180394,v=0.9099070564001548,w=0.5278904335963913,x=5.187501270378375 -color=green,shape=square,flag=0,i=25006,u=0.9384216991480615,v=0.4661783058074618,w=0.47885315912422893,x=7.17179520202514 -color=purple,shape=triangle,flag=0,i=25010,u=0.5555453434265945,v=0.5691402362180652,w=0.49226197917512793,x=5.305647040081683 -color=purple,shape=square,flag=1,i=25016,u=0.013318649820791117,v=0.4226407218607313,w=0.5100148207500508,x=6.4698238723308705 -color=purple,shape=square,flag=1,i=25030,u=0.26423266591008954,v=0.9941242266433082,w=0.5133987496787764,x=5.189225442419219 -color=red,shape=square,flag=0,i=25042,u=0.4348715926243021,v=0.5762389337773339,w=0.4836923254883376,x=4.279469384567861 -color=purple,shape=triangle,flag=0,i=25047,u=0.36834396113196066,v=0.2715104197951701,w=0.48939420299467634,x=5.117415089580451 -color=blue,shape=square,flag=0,i=25049,u=0.19379222378290906,v=0.751097278751949,w=0.5054958221487019,x=5.172302933154537 -color=yellow,shape=square,flag=1,i=25089,u=0.43377033331403325,v=0.7260011013253207,w=0.5137788738171449,x=6.551914055626052 -color=blue,shape=circle,flag=0,i=25142,u=0.867003385388892,v=0.3473217404964116,w=0.49438514111848003,x=4.245533571638877 -color=red,shape=square,flag=0,i=25145,u=0.43709113223610596,v=0.29405584165749543,w=0.4810763116744267,x=7.46502430821791 -color=purple,shape=triangle,flag=0,i=25161,u=0.8280275718593857,v=0.9417747856047048,w=0.49498321915889687,x=7.415747659218295 -color=blue,shape=square,flag=0,i=25188,u=0.6270113231985922,v=0.2230519958598457,w=0.5098322081234531,x=6.153828587135355 -color=green,shape=triangle,flag=0,i=25200,u=0.6689852490297616,v=0.6253210296437005,w=0.5229557605294215,x=3.4770348940454876 -color=orange,shape=square,flag=1,i=25216,u=0.48401756762364534,v=0.4226337084194922,w=0.46869804284243743,x=5.4422993284485095 -color=purple,shape=square,flag=0,i=25224,u=0.12648934842786963,v=0.403618978894864,w=0.5161063556852542,x=3.435872459765814 -color=blue,shape=square,flag=1,i=25227,u=0.06979281205572974,v=0.08862607882245854,w=0.5137236815303357,x=3.6905968208238935 -color=blue,shape=circle,flag=1,i=25242,u=0.4818031369883873,v=0.1813910166010726,w=0.49991336226740046,x=4.1430285161914275 -color=purple,shape=square,flag=0,i=25245,u=0.44237836042996226,v=0.7384322312479161,w=0.5188851283070829,x=6.02061367546791 -color=red,shape=triangle,flag=0,i=25249,u=0.41366583569292115,v=0.3091632969342911,w=0.5081857102508123,x=4.072596536874886 -color=blue,shape=square,flag=1,i=25258,u=0.6305080363965526,v=0.0944807331750731,w=0.5113262330065101,x=7.106332755820627 -color=green,shape=square,flag=1,i=25268,u=0.0562629545086607,v=0.49515633172707896,w=0.4669891336690399,x=4.855239549628251 -color=red,shape=square,flag=0,i=25270,u=0.6053177714909646,v=0.3639218974419395,w=0.4835413414642151,x=5.758895081622932 -color=yellow,shape=triangle,flag=1,i=25276,u=0.22919854217626123,v=0.004932551890295844,w=0.5198122231274163,x=5.678650661088027 -color=green,shape=triangle,flag=0,i=25312,u=0.8616276832925428,v=0.9966876352594423,w=0.507458696839184,x=4.913298909872215 -color=purple,shape=square,flag=0,i=25314,u=0.7582077798871317,v=0.004437127956541942,w=0.5145196605705948,x=7.352143193003523 -color=green,shape=square,flag=0,i=25338,u=0.7343318064474029,v=0.35103029756462767,w=0.463756847063779,x=4.340218211118136 -color=yellow,shape=triangle,flag=0,i=25353,u=0.49582773207250885,v=0.8776117849692151,w=0.5131465300555562,x=2.990661753826513 -color=blue,shape=square,flag=1,i=25387,u=0.8379941133905662,v=0.7227333902620957,w=0.5169698651951014,x=4.214109490126586 -color=red,shape=square,flag=0,i=25400,u=0.6647976990309508,v=0.6681166074108165,w=0.483662537121335,x=4.367156371007085 -color=yellow,shape=circle,flag=1,i=25419,u=0.5861097997868543,v=0.09304104701245608,w=0.480585167674643,x=4.31557167384405 -color=blue,shape=square,flag=0,i=25422,u=0.8381171169066005,v=0.9035648203069505,w=0.5189941468324766,x=3.486968257512897 -color=red,shape=circle,flag=0,i=25427,u=0.7238279092273934,v=0.8040643257155619,w=0.4816358458241982,x=5.377109562777432 -color=green,shape=triangle,flag=0,i=25428,u=0.026521925997903262,v=0.3907784742567403,w=0.5079862162004534,x=4.778410723710838 -color=yellow,shape=triangle,flag=1,i=25433,u=0.34158366408795626,v=0.005444890034735361,w=0.5136794132842879,x=4.428266821391993 -color=red,shape=triangle,flag=0,i=25435,u=0.582152083624704,v=0.3171113667930656,w=0.49700903956581793,x=4.7958472397154495 -color=purple,shape=triangle,flag=0,i=25439,u=0.6678234759775731,v=0.3243677520179289,w=0.4880360044701393,x=7.403742567293686 -color=red,shape=square,flag=0,i=25442,u=0.010092942375800162,v=0.13333359064367722,w=0.48905681266002865,x=5.376732151207544 -color=red,shape=circle,flag=0,i=25446,u=0.7813856759237412,v=0.8321045139195066,w=0.48762209498494247,x=5.061094349437838 -color=blue,shape=triangle,flag=0,i=25454,u=0.8484966309427525,v=0.012082178156971879,w=0.5342695369063898,x=6.826682002042546 -color=yellow,shape=circle,flag=0,i=25458,u=0.6537972550513452,v=0.5910849674788127,w=0.4777381011468813,x=6.355179083479012 -color=green,shape=triangle,flag=0,i=25469,u=0.038371626604647435,v=0.6121136952306467,w=0.5151296947307014,x=5.772213012236616 -color=purple,shape=triangle,flag=1,i=25477,u=0.32664149098824724,v=0.3270566306487753,w=0.48002579599316053,x=4.405665912819199 -color=blue,shape=circle,flag=1,i=25495,u=0.536855061623154,v=0.25275422849525864,w=0.5054052454358829,x=6.0468892012101305 -color=blue,shape=circle,flag=0,i=25498,u=0.5929396302837556,v=0.9365886925154252,w=0.5031106723644216,x=6.214885736377898 -color=yellow,shape=square,flag=1,i=25499,u=0.15618938338413857,v=0.5649222782779796,w=0.5006980941216002,x=5.010530103179517 -color=red,shape=triangle,flag=0,i=25514,u=0.24787971935484898,v=0.14596930011915066,w=0.48648268184742943,x=5.3880937750815034 -color=blue,shape=triangle,flag=1,i=25530,u=0.2895065875689401,v=0.08737234041385267,w=0.533182299700779,x=5.264305348202112 -color=red,shape=triangle,flag=0,i=25544,u=0.5564020468904375,v=0.469220034459098,w=0.4969889164985036,x=5.548019100193355 -color=red,shape=triangle,flag=0,i=25546,u=0.03927214832454329,v=0.8656276033417198,w=0.5016166743319996,x=6.713273682931319 -color=green,shape=square,flag=0,i=25559,u=0.46078982852078254,v=0.13039447341168842,w=0.4688506106833271,x=2.9766392539416984 -color=red,shape=square,flag=0,i=25585,u=0.12988420262355915,v=0.40387454791195365,w=0.49912201847992793,x=4.115495629323518 -color=red,shape=triangle,flag=1,i=25586,u=0.9243659644066534,v=0.8732778424081786,w=0.5079033160641335,x=4.835432405555579 -color=green,shape=square,flag=0,i=25589,u=0.4604805037990847,v=0.4828530507130857,w=0.47380448866240904,x=6.052131708988689 -color=blue,shape=square,flag=1,i=25593,u=0.9717135389121113,v=0.8956024358579959,w=0.5129793967681089,x=5.115284642159395 -color=red,shape=square,flag=1,i=25594,u=0.7441095256671921,v=0.3631964490297026,w=0.4906987074485295,x=4.688716482972666 -color=orange,shape=triangle,flag=1,i=25600,u=0.69695535764921,v=0.9890543754602146,w=0.5425817578176706,x=5.024244070203383 -color=purple,shape=circle,flag=0,i=25606,u=0.8641632107489988,v=0.013024198344529059,w=0.5109279908251705,x=5.594192736167078 -color=red,shape=square,flag=0,i=25612,u=0.08686544138582242,v=0.4182643741815759,w=0.4989660462744722,x=5.134468606511194 -color=blue,shape=circle,flag=1,i=25615,u=0.7128741260861531,v=0.7529173898877006,w=0.5051334980868171,x=4.977025552547777 -color=red,shape=square,flag=0,i=25618,u=0.5261020440632308,v=0.24793918270696214,w=0.5000373041209327,x=3.3928589618967906 -color=blue,shape=square,flag=1,i=25621,u=0.7987487532557355,v=0.4092683799709895,w=0.5036482874856193,x=6.203893021135113 -color=red,shape=circle,flag=1,i=25626,u=0.8225437630227117,v=0.8658634386489814,w=0.4876473515348685,x=5.716376034597446 -color=blue,shape=square,flag=0,i=25638,u=0.5661090435860126,v=0.9705151218982564,w=0.5039430666408083,x=6.7887104790552355 -color=yellow,shape=square,flag=1,i=25678,u=0.7229649005252713,v=0.7966350858062917,w=0.5144115099368456,x=6.138718468473015 -color=red,shape=circle,flag=1,i=25688,u=0.5403574726659569,v=0.5166753057015054,w=0.4986326351274328,x=5.517602876376867 -color=red,shape=triangle,flag=0,i=25728,u=0.6562738402068202,v=0.6313942944201059,w=0.49222163286374826,x=3.4146443110906617 -color=red,shape=square,flag=1,i=25737,u=0.21504602768160996,v=0.44943784512452967,w=0.49386010592306556,x=4.799553396710289 -color=red,shape=square,flag=0,i=25753,u=0.42488206832098474,v=0.9990283800959817,w=0.4952503152641763,x=2.873550855335749 -color=red,shape=triangle,flag=0,i=25758,u=0.7467306190501787,v=0.2704107626418716,w=0.4948115847870993,x=5.571217209167401 -color=red,shape=square,flag=0,i=25764,u=0.5814147575089484,v=0.4169809813630093,w=0.49770545340413025,x=6.387322165879361 -color=blue,shape=square,flag=1,i=25784,u=0.8660195733120086,v=0.6833150857537637,w=0.48941441380595596,x=4.367583348763191 -color=purple,shape=square,flag=0,i=25789,u=0.8710357965088035,v=0.5965520181038854,w=0.4966942633155147,x=6.938066210987087 -color=purple,shape=square,flag=0,i=25791,u=0.6183104781650229,v=0.6255565846788934,w=0.4932172464700376,x=4.826059319954716 -color=red,shape=triangle,flag=1,i=25798,u=0.2910246649656659,v=0.16134629813213797,w=0.4976488471971281,x=2.0505843872459377 -color=red,shape=square,flag=0,i=25823,u=0.3007399115862952,v=0.696901004610726,w=0.5099746390765068,x=4.393577374746172 -color=green,shape=square,flag=0,i=25826,u=0.11131905547969068,v=0.8234419098660856,w=0.4780193222691841,x=4.354601744136541 -color=blue,shape=square,flag=0,i=25837,u=0.5382433634007728,v=0.06633172929643638,w=0.49021353894229813,x=7.205544254688381 -color=red,shape=square,flag=0,i=25851,u=0.6845254244323443,v=0.7494942983776632,w=0.5135949531373896,x=4.478975820385832 -color=red,shape=square,flag=0,i=25855,u=0.4526191799565459,v=0.023487952393752565,w=0.5131634625164141,x=3.9290628772162832 -color=yellow,shape=square,flag=1,i=25861,u=0.002727180198842327,v=0.1854781570496533,w=0.5216193154685124,x=6.150478460606201 -color=orange,shape=triangle,flag=1,i=25865,u=0.8417560676109885,v=0.9287439707193731,w=0.5457255506490313,x=5.741055512423169 -color=yellow,shape=triangle,flag=1,i=25868,u=0.08944679719323745,v=0.4937144120678043,w=0.519825265073939,x=2.707751472799268 -color=blue,shape=triangle,flag=1,i=25874,u=0.9761858581977908,v=0.6051651728321814,w=0.5176731952997095,x=3.27437086687736 -color=purple,shape=triangle,flag=0,i=25885,u=0.532556057558905,v=0.6474779159215497,w=0.48276252233435424,x=4.410343808196996 -color=red,shape=circle,flag=0,i=25896,u=0.7010083717170356,v=0.6989074129751516,w=0.5120898940816476,x=5.585797969816234 -color=yellow,shape=square,flag=1,i=25912,u=0.45388994045052466,v=0.6452935634525502,w=0.5129537594723294,x=4.289391174280052 -color=red,shape=triangle,flag=0,i=25920,u=0.46741095435015056,v=0.10755028837097114,w=0.4681064915228646,x=4.036861980658842 -color=red,shape=triangle,flag=0,i=25924,u=0.6332806714358654,v=0.49510216615019786,w=0.46424121185302886,x=5.35070665891946 -color=purple,shape=circle,flag=0,i=25947,u=0.2809694102265121,v=0.7104362479118843,w=0.5045173897448305,x=3.858201598661237 -color=red,shape=triangle,flag=0,i=25959,u=0.9362920805410437,v=0.09165159321330985,w=0.4625184548035471,x=6.3974769470925885 -color=red,shape=square,flag=0,i=25981,u=0.9010704017795197,v=0.801976957683478,w=0.5035732224888378,x=3.6760525779786213 -color=yellow,shape=circle,flag=0,i=26013,u=0.5674926869705129,v=0.5887025840952027,w=0.4804616832694326,x=5.631104095061221 -color=blue,shape=triangle,flag=0,i=26014,u=0.33662767306681085,v=0.8032092299082553,w=0.5191275175662233,x=4.215326826381824 -color=red,shape=square,flag=0,i=26020,u=0.45755466262601874,v=0.6722733905280788,w=0.5100523187605494,x=4.021464353464206 -color=red,shape=circle,flag=1,i=26021,u=0.7234214190925028,v=0.7493938875057046,w=0.5104868346010132,x=4.475506651367415 -color=red,shape=triangle,flag=1,i=26037,u=0.7722985467528327,v=0.16074896785415294,w=0.4805294158916076,x=4.9022216908934935 -color=red,shape=square,flag=1,i=26039,u=0.3669155801680446,v=0.992419972514465,w=0.5008792368685754,x=5.958031900527238 -color=yellow,shape=circle,flag=1,i=26049,u=0.047233413284252346,v=0.6882814789140793,w=0.47931632740430413,x=5.229633873535885 -color=green,shape=square,flag=0,i=26059,u=0.7858574089783932,v=0.5560418297214267,w=0.4764267642780115,x=6.7406521074953005 -color=red,shape=triangle,flag=0,i=26065,u=0.5651630389685611,v=0.731032237722666,w=0.48190639190618556,x=4.86542480349785 -color=red,shape=square,flag=0,i=26068,u=0.12280481793074438,v=0.29137061782774876,w=0.509060843780268,x=7.061160288051109 -color=red,shape=triangle,flag=1,i=26073,u=0.873600409609657,v=0.05581585575137982,w=0.48450942367289684,x=5.376239733881472 -color=purple,shape=triangle,flag=0,i=26080,u=0.10286574688763916,v=0.2995293971612334,w=0.47423506718676905,x=3.4165735137128403 -color=yellow,shape=triangle,flag=0,i=26082,u=0.4504536134152547,v=0.1502301837612895,w=0.5241991997207003,x=3.8131619916861705 -color=red,shape=triangle,flag=1,i=26091,u=0.37327644656670544,v=0.8803236604791689,w=0.47336340297011587,x=3.528312786777707 -color=red,shape=square,flag=1,i=26096,u=0.09953103094932891,v=0.7207975921655532,w=0.5078191781308253,x=4.973197300196009 -color=red,shape=triangle,flag=0,i=26102,u=0.5674563645471775,v=0.802164639859275,w=0.47128259045977117,x=6.102705914046816 -color=purple,shape=square,flag=0,i=26103,u=0.8224805941997835,v=0.39657333418649676,w=0.49114300455947685,x=3.4255942660339254 -color=yellow,shape=triangle,flag=1,i=26104,u=0.3407861084239223,v=0.15152842414992795,w=0.5160348237826194,x=4.8422809827118245 -color=green,shape=square,flag=0,i=26139,u=0.05048675420753501,v=0.5867898197382816,w=0.48332771723619,x=4.854100394965795 -color=yellow,shape=square,flag=1,i=26141,u=0.8552151240513924,v=0.20968594770634863,w=0.5159753297215222,x=4.760681087708469 -color=red,shape=circle,flag=0,i=26147,u=0.7195606619287135,v=0.7185022318358479,w=0.5179909665054729,x=4.345130811754813 -color=purple,shape=circle,flag=0,i=26149,u=0.5718088801605313,v=0.6305392166677085,w=0.49954455506066525,x=6.331555225910537 -color=red,shape=square,flag=0,i=26178,u=0.9082928132030541,v=0.8698945448286087,w=0.5272810515794636,x=3.8139398884865403 -color=red,shape=circle,flag=0,i=26179,u=0.6521592081101321,v=0.6730313844926001,w=0.517629864433609,x=6.700258305599071 -color=purple,shape=square,flag=1,i=26195,u=0.8037216795503589,v=0.5351552045227781,w=0.4991400330285502,x=3.6115115212565576 -color=blue,shape=circle,flag=0,i=26216,u=0.29912820464115497,v=0.9930538927340354,w=0.5059305459275703,x=5.7174504294243285 -color=red,shape=triangle,flag=0,i=26217,u=0.26325310009245584,v=0.5440037493004181,w=0.4774500325950689,x=4.0479435067756215 -color=yellow,shape=triangle,flag=0,i=26236,u=0.2705619544716178,v=0.03620239324209429,w=0.5226419844984572,x=6.209747094149054 -color=red,shape=triangle,flag=0,i=26242,u=0.2271912767881561,v=0.09900208652947495,w=0.48469196279101134,x=5.175097751336078 -color=red,shape=circle,flag=0,i=26255,u=0.07578793911595427,v=0.14418122422110113,w=0.52623613457003,x=5.286764157810051 -color=green,shape=square,flag=0,i=26256,u=0.07983285201287438,v=0.3732667693155065,w=0.4822098358564333,x=5.875392136521286 -color=blue,shape=triangle,flag=1,i=26267,u=0.2224324528896101,v=0.2867753587278389,w=0.5133292284016726,x=5.8171157937798865 -color=blue,shape=square,flag=1,i=26268,u=0.6582484449449885,v=0.8349729996334416,w=0.4929353631279517,x=5.869326931510386 -color=yellow,shape=square,flag=1,i=26271,u=0.6841110660420242,v=0.2590027949643019,w=0.5097661285738265,x=3.1892114715505593 -color=red,shape=triangle,flag=0,i=26282,u=0.1889581524882299,v=0.24489732624609417,w=0.48272344860614913,x=5.475576478379538 -color=green,shape=triangle,flag=0,i=26296,u=0.02930308135433357,v=0.7055795909634528,w=0.5137693692160372,x=3.5786508001990893 -color=orange,shape=square,flag=1,i=26310,u=0.6204747130900325,v=0.9719450523498417,w=0.4597299643938189,x=5.484493488468659 -color=green,shape=square,flag=0,i=26319,u=0.30289284515443426,v=0.817765206955581,w=0.4918529944200194,x=5.8656377567539435 -color=purple,shape=triangle,flag=0,i=26320,u=0.6306874463524811,v=0.1487685720430315,w=0.4825151736941248,x=3.672167156490436 -color=red,shape=square,flag=1,i=26321,u=0.750218649620177,v=0.0984125890957338,w=0.5286319479298367,x=4.8143176942195565 -color=red,shape=square,flag=1,i=26325,u=0.4868581502958249,v=0.48150425444648104,w=0.525232334201949,x=6.073247048237519 -color=yellow,shape=circle,flag=1,i=26360,u=0.4412037452755281,v=0.7708584881142471,w=0.4880989661285275,x=4.25969589363992 -color=purple,shape=square,flag=0,i=26361,u=0.7709755145739532,v=0.19988998572095917,w=0.5101132492887455,x=3.7827542601515773 -color=green,shape=square,flag=1,i=26364,u=0.7455797244342347,v=0.7360614013903412,w=0.485498516388062,x=5.240256447655862 -color=blue,shape=circle,flag=0,i=26376,u=0.5074133618991272,v=0.8775162924130532,w=0.5146217761749357,x=5.800327330811402 -color=red,shape=circle,flag=0,i=26384,u=0.013427978247479544,v=0.03798655025342066,w=0.5183716254492988,x=4.115799450886711 -color=red,shape=square,flag=0,i=26405,u=0.32271796796248586,v=0.580844245222119,w=0.5233387768626253,x=4.785919904262766 -color=red,shape=square,flag=1,i=26422,u=0.07712716290141353,v=0.06759007456981025,w=0.5170157136476563,x=5.8590619949870915 -color=blue,shape=triangle,flag=1,i=26428,u=0.8066039931862952,v=0.13667465559354752,w=0.5094254416958333,x=6.48221280931649 -color=red,shape=square,flag=0,i=26450,u=0.6614679232451804,v=0.36560627572775484,w=0.5112020456684284,x=5.7989430933830866 -color=red,shape=square,flag=1,i=26459,u=0.8349583081613975,v=0.49121527113896,w=0.5094594741119449,x=4.578042288869326 -color=red,shape=square,flag=0,i=26488,u=0.2992860184309325,v=0.30468510566698714,w=0.499309537187126,x=4.079066245688449 -color=blue,shape=circle,flag=1,i=26501,u=0.917041248358781,v=0.7067105183468583,w=0.5154394499701502,x=4.101292991121372 -color=purple,shape=triangle,flag=0,i=26522,u=0.6754598108207435,v=0.3305442348394383,w=0.4849008270132726,x=4.421771370015716 -color=red,shape=square,flag=0,i=26530,u=0.9042880483893508,v=0.06099413346509874,w=0.5002171752588741,x=5.257614281771002 -color=red,shape=triangle,flag=0,i=26536,u=0.5911006938150419,v=0.5897328899362432,w=0.46924347801582117,x=5.689484567234765 -color=green,shape=circle,flag=0,i=26545,u=0.3623208792145606,v=0.23323485423986545,w=0.5115147126946714,x=5.35158134967828 -color=blue,shape=square,flag=1,i=26569,u=0.48025331099895974,v=0.8560052655339313,w=0.4844948903153413,x=5.164289509475767 -color=red,shape=square,flag=0,i=26582,u=0.507950835030121,v=0.3192740207145772,w=0.504631749329262,x=4.040353331683569 -color=red,shape=square,flag=0,i=26588,u=0.07254679949440512,v=0.6541535535288294,w=0.5165597035686713,x=4.586347010975786 -color=red,shape=circle,flag=0,i=26592,u=0.43312398233656857,v=0.5056084472447759,w=0.5204665906027872,x=5.272944869750703 -color=yellow,shape=square,flag=1,i=26667,u=0.8193943439705966,v=0.3571625416889197,w=0.5197354635125064,x=6.349805668981319 -color=green,shape=triangle,flag=0,i=26674,u=0.8974818674982699,v=0.8398510104447052,w=0.504866707561298,x=4.832797737251657 -color=orange,shape=triangle,flag=1,i=26686,u=0.04603294317064843,v=0.8274510328240161,w=0.5509392322252182,x=4.406052498078572 -color=blue,shape=triangle,flag=1,i=26698,u=0.6753583710894621,v=0.033878868508113835,w=0.48673787056689716,x=3.902086925821416 -color=blue,shape=triangle,flag=1,i=26719,u=0.36348033419139625,v=0.42564458666416605,w=0.4845578473194667,x=6.037012575682556 -color=red,shape=triangle,flag=0,i=26726,u=0.3978845033496452,v=0.33682159720116456,w=0.47469747027647335,x=4.285827356256915 -color=yellow,shape=square,flag=1,i=26733,u=0.5922068663028015,v=0.607715160656803,w=0.512018033637484,x=5.3179879793495966 -color=red,shape=square,flag=0,i=26735,u=0.3734819609294996,v=0.8114521124561588,w=0.5198949777829858,x=4.386531749315967 -color=blue,shape=circle,flag=1,i=26736,u=0.34970888132444145,v=0.41316544141892086,w=0.5157366965598891,x=5.62632509012514 -color=blue,shape=triangle,flag=1,i=26739,u=0.5647919738866877,v=0.8980528154775819,w=0.4888449665987099,x=3.9577522425539935 -color=red,shape=circle,flag=0,i=26742,u=0.3692140462833122,v=0.3445567284238393,w=0.5219405948032102,x=4.348588858525835 -color=purple,shape=square,flag=0,i=26744,u=0.7567417399385129,v=0.7321483500847341,w=0.5035884125480183,x=5.558552177118336 -color=yellow,shape=triangle,flag=1,i=26754,u=0.049805181119724984,v=0.07633748393697415,w=0.5204239273387096,x=3.8751505956718617 -color=green,shape=triangle,flag=0,i=26757,u=0.3137785606389706,v=0.5098674286094462,w=0.502420757954118,x=4.430605292351765 -color=yellow,shape=square,flag=1,i=26780,u=0.6625606542527752,v=0.33646535319509685,w=0.512961621090926,x=7.407143859998317 -color=red,shape=triangle,flag=0,i=26782,u=0.16255838938044764,v=0.3408280430640197,w=0.4811391819135336,x=5.080255646007596 -color=red,shape=square,flag=0,i=26786,u=0.4538521860807089,v=0.5597484646792217,w=0.5178339711086923,x=4.608455337734896 -color=red,shape=triangle,flag=0,i=26790,u=0.1707690161251476,v=0.023528819082283547,w=0.48419795105878805,x=4.362864304086654 -color=yellow,shape=square,flag=0,i=26801,u=0.6010695989372874,v=0.4189750631188234,w=0.5149831670040176,x=4.474712997630571 -color=red,shape=circle,flag=0,i=26809,u=0.7120666607155749,v=0.6157344434628239,w=0.5069250438685436,x=5.597903565077858 -color=yellow,shape=circle,flag=1,i=26821,u=0.6483551915361128,v=0.5241706946302818,w=0.48308404809074823,x=5.770167037477518 -color=red,shape=circle,flag=0,i=26823,u=0.8557606754079703,v=0.8900748004743387,w=0.512573624342546,x=7.381263471635822 -color=red,shape=square,flag=0,i=26827,u=0.7589778175645088,v=0.1428198878012017,w=0.5121056494596288,x=4.316137434324415 -color=blue,shape=square,flag=1,i=26831,u=0.493145176019827,v=0.9950557272941855,w=0.49681947293710677,x=5.6832376086334415 -color=red,shape=triangle,flag=0,i=26866,u=0.9283350107867175,v=0.612963188584986,w=0.4937085214672017,x=4.97786623765733 -color=red,shape=circle,flag=1,i=26886,u=0.059235361622315796,v=-0.009350846733344104,w=0.49281136495152006,x=4.479243454220769 -color=green,shape=square,flag=0,i=26902,u=0.07138074830827745,v=0.5517750468831158,w=0.4676810082660399,x=3.519734133389314 -color=purple,shape=square,flag=0,i=26909,u=0.07175308351536225,v=0.6143025641876438,w=0.5020292528114828,x=5.4184794600930095 -color=purple,shape=triangle,flag=0,i=26930,u=0.157573255795327,v=0.08144978332400066,w=0.5039854567079847,x=5.997170026635426 -color=green,shape=square,flag=1,i=26942,u=0.09716815988909777,v=0.7927349270307371,w=0.4610613865115853,x=6.2748830715508355 -color=green,shape=square,flag=0,i=26949,u=0.8941441013712047,v=0.935822127858959,w=0.46275196948895925,x=6.14353759988564 -color=red,shape=triangle,flag=1,i=26957,u=0.7516260678973634,v=0.16066535558026562,w=0.4955866943537309,x=5.6354394360722795 -color=green,shape=triangle,flag=0,i=26961,u=0.6152902388419965,v=0.7809381487916995,w=0.5054556097312073,x=5.812298714426703 -color=red,shape=square,flag=0,i=26965,u=0.03894676582954437,v=0.350088915999757,w=0.5065241332374407,x=3.617201779951147 -color=green,shape=square,flag=1,i=26975,u=0.1327783350236732,v=0.23107366243469418,w=0.4607242538935895,x=5.069607877222087 -color=red,shape=circle,flag=0,i=26978,u=0.018569739617654735,v=-0.03194322337457731,w=0.502229507390834,x=4.809141560510172 -color=red,shape=square,flag=0,i=26991,u=0.3979104401693284,v=0.8390915097200012,w=0.49639748109734533,x=4.525809585380252 -color=red,shape=square,flag=0,i=27002,u=0.8849391329404386,v=0.18449716375327663,w=0.49051190168963554,x=3.960786773523729 -color=purple,shape=square,flag=0,i=27003,u=0.11418120119286423,v=0.9385428097252992,w=0.5003128385268326,x=4.890841454746883 -color=purple,shape=square,flag=0,i=27007,u=0.967084318587712,v=0.6927643459518374,w=0.501351085996564,x=5.180338347509587 -color=red,shape=square,flag=0,i=27010,u=0.6071714877268013,v=0.7670781186304179,w=0.49029936873777674,x=5.573549421771868 -color=red,shape=circle,flag=0,i=27012,u=0.23151985811727704,v=0.21426530269768979,w=0.48824685168303644,x=5.822865694899559 -color=yellow,shape=triangle,flag=1,i=27016,u=0.6436869282003247,v=0.0011049265762280713,w=0.5078277957119917,x=4.182492521039611 -color=purple,shape=square,flag=0,i=27018,u=0.49797460610349686,v=0.47342334465527003,w=0.4997671880631366,x=5.336685828646352 -color=red,shape=square,flag=0,i=27025,u=0.9419706682305191,v=0.4891732025632741,w=0.490914509252106,x=3.6718805702327546 -color=blue,shape=circle,flag=1,i=27026,u=0.18394392717465924,v=0.8039172549565843,w=0.5150715717497438,x=5.64770642919999 -color=blue,shape=triangle,flag=0,i=27037,u=0.12980259796060445,v=0.18026336961913858,w=0.49616217681976854,x=6.932131616951679 -color=green,shape=triangle,flag=0,i=27045,u=0.8594739982162675,v=0.8402483279901528,w=0.50140100094159,x=4.232850167380566 -color=red,shape=triangle,flag=0,i=27047,u=0.7192949111541754,v=0.7104158291845282,w=0.5045655577374201,x=5.321104654816632 -color=red,shape=circle,flag=0,i=27049,u=0.1329538023465301,v=0.13935312367946467,w=0.4899459431292648,x=7.3582710994214695 -color=yellow,shape=circle,flag=1,i=27050,u=0.29514029891902605,v=0.46010332762638595,w=0.4890158180231643,x=3.905946477701537 -color=blue,shape=square,flag=1,i=27054,u=0.4157763158106056,v=0.6774927972814468,w=0.478898658779743,x=4.567792318648803 -color=red,shape=square,flag=0,i=27057,u=0.8784685404971725,v=0.6459689274067033,w=0.4903855250702302,x=4.775974197515729 -color=green,shape=circle,flag=1,i=27061,u=0.26471201060693683,v=0.8075122397243544,w=0.5035649233935773,x=5.113518581025738 -color=yellow,shape=square,flag=1,i=27063,u=0.6335109384738952,v=0.836221339336087,w=0.5064353539355512,x=2.9159694471689637 -color=blue,shape=square,flag=1,i=27074,u=0.9120004167525415,v=0.279756586348596,w=0.4698112186925432,x=7.458886959267756 -color=yellow,shape=triangle,flag=1,i=27077,u=0.39639682463367354,v=0.2195907727576396,w=0.5128074828090089,x=7.192932454729483 -color=red,shape=triangle,flag=1,i=27090,u=0.43696849807152205,v=0.21238576474516435,w=0.504958914415651,x=5.821054895827014 -color=yellow,shape=square,flag=1,i=27095,u=0.32785307516216033,v=0.03685688983277047,w=0.5141035883406879,x=5.913067557895645 -color=red,shape=square,flag=0,i=27097,u=0.06345071094583887,v=0.14661452403816855,w=0.5015064287162756,x=4.115747871418917 -color=red,shape=circle,flag=0,i=27099,u=0.31438720916106744,v=0.34683124248397534,w=0.4860010085182583,x=5.2599775662374535 -color=purple,shape=square,flag=0,i=27104,u=0.6099668304268366,v=0.667745199921237,w=0.48804930078899067,x=5.431534246439725 -color=red,shape=square,flag=0,i=27107,u=0.42251922393440633,v=0.6371943024345906,w=0.5060698378439741,x=6.052740848899056 -color=purple,shape=square,flag=0,i=27157,u=0.17414717818583236,v=0.47937732442953096,w=0.48419494496563315,x=3.671755192418631 -color=red,shape=triangle,flag=0,i=27177,u=0.23185109261094894,v=0.034986375486128596,w=0.5016399240889347,x=6.374065500026309 -color=blue,shape=triangle,flag=0,i=27183,u=0.0579740726355894,v=0.23089820986417708,w=0.4925714232253151,x=6.54126310431144 -color=purple,shape=square,flag=0,i=27190,u=0.5996379988697156,v=0.05368029958695486,w=0.48130952805473565,x=5.613797148097022 -color=red,shape=circle,flag=0,i=27195,u=0.9927922672983917,v=0.9885644181515599,w=0.4838279367068267,x=4.980618582527498 -color=red,shape=circle,flag=0,i=27202,u=0.306283429487599,v=0.37845399220216785,w=0.48375325082578646,x=5.035777489471395 -color=orange,shape=square,flag=1,i=27209,u=0.027482063658017086,v=0.9937591484460131,w=0.4607590345661461,x=6.782352951506791 -color=blue,shape=square,flag=0,i=27253,u=0.8708192185781217,v=0.3490018512053118,w=0.465835813960034,x=4.846040802276717 -color=blue,shape=circle,flag=1,i=27256,u=0.14638731247834025,v=0.05859365218368173,w=0.524593574733679,x=4.481450012867277 -color=blue,shape=circle,flag=1,i=27259,u=0.8452280461714454,v=0.7632098737690225,w=0.5195577504163494,x=4.395250116670545 -color=blue,shape=square,flag=0,i=27281,u=0.8935471500157395,v=0.291760682455656,w=0.46603709395381887,x=4.069117453568041 -color=purple,shape=square,flag=1,i=27293,u=0.4996378034256863,v=0.044510840223987436,w=0.4883543151474372,x=2.4608133232436096 -color=yellow,shape=triangle,flag=1,i=27310,u=0.4925088483341782,v=0.17324050954142478,w=0.5157789264233296,x=3.7466570937455193 -color=red,shape=circle,flag=0,i=27346,u=0.8018347469606378,v=0.8556143933254134,w=0.48809505468949543,x=5.645395525802054 -color=red,shape=square,flag=0,i=27357,u=0.16320105087127168,v=0.7034699250316768,w=0.5284048355933586,x=5.561550006587346 -color=blue,shape=triangle,flag=0,i=27363,u=0.4130329448846436,v=0.3519352908730169,w=0.47636229388247153,x=5.151462703186516 -color=red,shape=square,flag=1,i=27378,u=0.10324418612370423,v=0.7659582375643537,w=0.5328449585521345,x=5.228504681113512 -color=yellow,shape=triangle,flag=1,i=27384,u=0.7437989559360465,v=0.29747205449753,w=0.5161277444919578,x=4.256533611622648 -color=green,shape=square,flag=1,i=27388,u=0.8648037869602436,v=0.8950542870075304,w=0.44090419357036903,x=5.947837191551083 -color=red,shape=square,flag=1,i=27393,u=0.7757392514339877,v=0.24849789295030322,w=0.5373998300769587,x=5.138218296772785 -color=red,shape=square,flag=1,i=27402,u=0.9867977535720223,v=0.3715902374816953,w=0.5469161715246043,x=5.274005079103856 -color=purple,shape=circle,flag=0,i=27404,u=0.8359462835824559,v=0.904962756893604,w=0.5000158834208963,x=4.873808035972373 -color=red,shape=circle,flag=1,i=27443,u=0.595746766891408,v=0.6336257467148168,w=0.4893082024258384,x=5.331159292619122 -color=yellow,shape=circle,flag=1,i=27446,u=0.31985379810344927,v=0.9606880981487582,w=0.48923490010805043,x=3.868962208355834 -color=blue,shape=triangle,flag=1,i=27448,u=0.8268125742916685,v=0.3998703452412905,w=0.491866372215197,x=5.721832926157184 -color=yellow,shape=circle,flag=1,i=27475,u=0.5197098161886466,v=0.8631108523738137,w=0.4873454769950642,x=4.572074896210043 -color=yellow,shape=circle,flag=1,i=27478,u=0.22652757727260775,v=0.31057611580278777,w=0.4882687266266591,x=3.9518041003009743 -color=yellow,shape=triangle,flag=0,i=27482,u=0.28711919643251926,v=0.1908980004274613,w=0.511321293147556,x=5.95014763862045 -color=yellow,shape=circle,flag=1,i=27497,u=0.6426659729491119,v=0.512286546088875,w=0.4873892482159393,x=5.418381233739223 -color=green,shape=square,flag=0,i=27522,u=0.2515110008549335,v=0.30576319108663674,w=0.45496365129715727,x=5.621270062016968 -color=green,shape=square,flag=0,i=27539,u=0.19429792771798182,v=0.8626171349905406,w=0.45721369281973695,x=5.502840396776105 -color=red,shape=square,flag=0,i=27551,u=0.9555775298319636,v=0.16758963236152868,w=0.5212935602879686,x=4.739308567158005 -color=red,shape=square,flag=0,i=27552,u=0.6849432946111895,v=0.027592626375598783,w=0.5208084973864869,x=6.5075641867890655 -color=red,shape=square,flag=1,i=27554,u=0.009602541713840895,v=0.05362595373939616,w=0.5233716813483418,x=5.0350827570868075 -color=red,shape=square,flag=0,i=27565,u=0.34581503007236913,v=0.17899844606460158,w=0.5210636867240218,x=6.385385736683507 -color=red,shape=square,flag=1,i=27573,u=0.07471037824493965,v=0.6262793616745357,w=0.5153863607919399,x=5.682195343023874 -color=purple,shape=circle,flag=0,i=27582,u=0.4115490527891492,v=0.6257552515938879,w=0.5022826610413894,x=5.707371421220958 -color=blue,shape=square,flag=1,i=27587,u=0.5188945850183555,v=0.060462405121827656,w=0.4663858141382177,x=7.730769429050152 -color=purple,shape=triangle,flag=0,i=27597,u=0.08688693755889765,v=0.8272321009016912,w=0.5298275526308516,x=3.838250193058149 -color=purple,shape=triangle,flag=1,i=27619,u=0.46684821728741666,v=0.4504889519273011,w=0.5344357533574376,x=4.611888780123441 -color=purple,shape=circle,flag=0,i=27620,u=0.6328003446343509,v=0.5642591609818407,w=0.5050139278238139,x=3.010600022051086 -color=yellow,shape=square,flag=1,i=27622,u=0.20817032290921367,v=0.09530748794291277,w=0.4972031485293172,x=3.693278006557573 -color=purple,shape=square,flag=1,i=27627,u=0.9627137723595399,v=0.36154226102993925,w=0.49943739373158363,x=5.59694022079315 -color=red,shape=square,flag=0,i=27630,u=0.08967078286426255,v=0.9024726102483163,w=0.5077653214700644,x=4.853782928393596 -color=purple,shape=triangle,flag=0,i=27637,u=0.6999288940472289,v=0.07174878048151023,w=0.53355854374135,x=4.696012468305135 -color=red,shape=square,flag=0,i=27640,u=0.34235540992001123,v=0.9218228402491622,w=0.507903004838109,x=3.1816087937690227 -color=red,shape=triangle,flag=0,i=27650,u=0.3818340431310262,v=0.41679324652962124,w=0.4922658403993222,x=5.667307704492823 -color=blue,shape=circle,flag=0,i=27653,u=0.464677779239979,v=0.8970598256121256,w=0.5097040931846893,x=2.065092687014253 -color=red,shape=square,flag=1,i=27656,u=0.20635715362395446,v=0.5797692900851055,w=0.5076327049374316,x=4.669530325841901 -color=red,shape=triangle,flag=1,i=27659,u=0.07002267827379027,v=0.3918314682748526,w=0.5018377855725775,x=5.862375316095723 -color=green,shape=circle,flag=0,i=27662,u=0.4449199044459794,v=0.9241400214364984,w=0.5017264113861387,x=8.162672278687909 -color=red,shape=triangle,flag=0,i=27666,u=0.8047760942634103,v=0.7243848179939881,w=0.5058984618910746,x=4.751028824110264 -color=yellow,shape=triangle,flag=1,i=27678,u=0.3495016777010975,v=0.16406479675280117,w=0.5079909930130683,x=5.870896567944311 -color=red,shape=triangle,flag=0,i=27679,u=0.03734375273936086,v=0.023093256255436567,w=0.5041131920894031,x=4.865632047419705 -color=red,shape=square,flag=0,i=27699,u=0.8348850291263635,v=0.9711089524453331,w=0.5039050945132909,x=6.34054080143459 -color=red,shape=circle,flag=1,i=27703,u=0.2374998332106213,v=0.24054242347881033,w=0.49048542219970176,x=4.420484413483621 -color=yellow,shape=triangle,flag=1,i=27704,u=0.378749891413391,v=0.30677567180473864,w=0.5027680907856005,x=4.0894979530794995 -color=purple,shape=square,flag=0,i=27706,u=0.22285780338565875,v=0.9401926667799455,w=0.4970155192388356,x=6.399626524791413 -color=purple,shape=triangle,flag=0,i=27717,u=0.6329116506494805,v=0.9924508267796331,w=0.5297092801300398,x=3.534766360258851 -color=red,shape=square,flag=0,i=27756,u=0.6139556553654268,v=0.21632802938267093,w=0.5080062411290104,x=5.910432834133549 -color=red,shape=square,flag=0,i=27761,u=0.7440212958523756,v=0.2883670331114694,w=0.509640933477473,x=5.799677046181098 -color=red,shape=circle,flag=0,i=27779,u=0.7471829399335801,v=0.7730349227309443,w=0.4807281271523543,x=4.722671106315414 -color=red,shape=circle,flag=0,i=27796,u=0.09913668955736188,v=0.12309413644776823,w=0.4812725998527279,x=3.2685228072959966 -color=yellow,shape=square,flag=1,i=27798,u=0.06602314113396235,v=0.38048862897183,w=0.4863492889576679,x=4.073121770023163 -color=blue,shape=triangle,flag=1,i=27805,u=0.1675442679305863,v=0.4260256400670034,w=0.4805912877499991,x=3.7795648659917718 -color=purple,shape=square,flag=0,i=27808,u=0.12059355427027652,v=0.6183725870239523,w=0.5067880151851718,x=5.005695689963016 -color=blue,shape=square,flag=1,i=27822,u=0.15791406718752676,v=0.46308292999864875,w=0.4680990907225799,x=7.477062097665995 -color=green,shape=circle,flag=1,i=27828,u=0.8610613969164524,v=0.7616928187618666,w=0.49542555785444103,x=5.595612561622347 -color=purple,shape=square,flag=0,i=27837,u=0.7443264628044348,v=0.4172392050050805,w=0.5091107176240225,x=5.68174721554891 -color=red,shape=triangle,flag=0,i=27869,u=0.02256841682637889,v=0.13495941926847932,w=0.5179253505298245,x=4.447884040373096 -color=purple,shape=square,flag=0,i=27883,u=0.4204729201142918,v=0.2232691085152737,w=0.5096324534182842,x=4.2797301275778805 -color=purple,shape=square,flag=0,i=27887,u=0.23847431008399256,v=0.7912519910254534,w=0.5096021790288062,x=5.099767570769067 -color=red,shape=circle,flag=0,i=27891,u=0.6896288908444705,v=0.6746511203646123,w=0.47682211607005803,x=5.9568709380573095 -color=red,shape=triangle,flag=0,i=27900,u=0.6474025704935013,v=0.4470506022593155,w=0.5092203333009371,x=6.516576795606952 -color=purple,shape=square,flag=0,i=27927,u=0.5473078320886167,v=0.48795166064175244,w=0.5077680077401037,x=6.335847925394288 -color=green,shape=square,flag=0,i=27928,u=0.9726064119317577,v=0.637489925958458,w=0.4754048928668529,x=5.26387266033665 -color=purple,shape=circle,flag=0,i=27935,u=0.7230620578978485,v=0.4038691786447718,w=0.49980639912757174,x=3.3490820453604635 -color=green,shape=triangle,flag=0,i=27962,u=0.5179996429864556,v=0.2904084474502592,w=0.4947638815701277,x=5.390562875088569 -color=red,shape=square,flag=0,i=27963,u=0.8254546902733595,v=0.06995190839188759,w=0.5224087205105586,x=5.1025712023678205 -color=red,shape=square,flag=0,i=27981,u=0.5625714121266934,v=0.6827018255059881,w=0.5211543825175695,x=6.5205671688152025 -color=red,shape=triangle,flag=0,i=27983,u=0.5909447310305467,v=0.7727845735988802,w=0.5040170086300086,x=4.3563406241878235 -color=yellow,shape=triangle,flag=1,i=28018,u=0.5823920553824754,v=0.5251085207929088,w=0.502942741249661,x=5.235053087398988 -color=red,shape=square,flag=0,i=28032,u=0.8751427670157677,v=0.08765677133120198,w=0.5219893289230496,x=5.166286759636703 -color=red,shape=circle,flag=0,i=28043,u=0.8201835387872295,v=0.8125315868394274,w=0.4932394616038248,x=6.191450391613185 -color=purple,shape=triangle,flag=0,i=28092,u=0.6103293210508083,v=0.04683198291327806,w=0.5241885869286942,x=4.969465257372141 -color=red,shape=triangle,flag=0,i=28099,u=0.5966358146123887,v=0.4407076440143338,w=0.5279394214949618,x=4.334388730479109 -color=orange,shape=triangle,flag=0,i=28104,u=0.35235193508421536,v=0.661198864517614,w=0.5530621321078157,x=5.911061113056437 -color=red,shape=square,flag=0,i=28114,u=0.6220022931168655,v=0.5169139914232396,w=0.533259176807009,x=4.722275519919795 -color=red,shape=triangle,flag=1,i=28117,u=0.4404141642686237,v=0.6828470960510071,w=0.5230862955577851,x=5.0411548851929915 -color=yellow,shape=square,flag=1,i=28130,u=0.08260572730519622,v=0.8079246074496624,w=0.47933933197211814,x=4.161035066773145 -color=red,shape=triangle,flag=0,i=28131,u=0.6889410460117044,v=0.7967235359798783,w=0.5308960244383736,x=1.8798278038948748 -color=yellow,shape=square,flag=1,i=28139,u=0.5767346794735991,v=0.7820635235755214,w=0.4851128393917242,x=4.267436892449345 -color=purple,shape=square,flag=0,i=28150,u=0.49198144840493263,v=0.3592039099006533,w=0.5150019134021703,x=4.3305845116301676 -color=purple,shape=triangle,flag=0,i=28169,u=0.09511510612118623,v=0.8581454141261488,w=0.5292525160832064,x=6.343618639171265 -color=red,shape=circle,flag=1,i=28192,u=0.4896542796053409,v=0.43555404834955835,w=0.5061445693289723,x=1.8676763634866083 -color=blue,shape=square,flag=1,i=28204,u=0.692835444529816,v=0.04007915921360583,w=0.4854016545305637,x=6.26430309138549 -color=orange,shape=square,flag=0,i=28216,u=0.03240694152552326,v=0.7280435994419837,w=0.46652430705242015,x=4.61096196721505 -color=yellow,shape=square,flag=1,i=28223,u=0.7465917674868074,v=0.5255631584796615,w=0.49490311329289444,x=5.396551766535104 -color=yellow,shape=circle,flag=1,i=28243,u=0.8221628706360736,v=0.49400737048368715,w=0.4816245854796019,x=2.6613667538874863 -color=red,shape=triangle,flag=1,i=28247,u=0.13974402975419897,v=0.8878899161611569,w=0.540739038438854,x=4.234622542668613 -color=red,shape=circle,flag=0,i=28269,u=0.11015403663431544,v=0.07331712170462029,w=0.49966100234162975,x=5.46812151491859 -color=red,shape=square,flag=0,i=28274,u=0.14329262113512875,v=0.25080055020873715,w=0.5143616159652669,x=5.958552657748318 -color=yellow,shape=triangle,flag=1,i=28275,u=0.29946390397797285,v=0.8648264589694957,w=0.4959026555861158,x=3.6139060690920535 -color=red,shape=square,flag=1,i=28288,u=0.9678835647143682,v=0.7510274811533107,w=0.5117589561417298,x=5.449686753627403 -color=blue,shape=circle,flag=1,i=28295,u=0.7187456820618605,v=0.7800105263090523,w=0.5128302738159971,x=5.814906097068486 -color=green,shape=triangle,flag=1,i=28309,u=0.3172039589388749,v=0.2426766886611288,w=0.49662884243599864,x=7.166338198474645 -color=red,shape=square,flag=0,i=28316,u=0.9050632457009437,v=0.08013430995007564,w=0.5183931905742426,x=5.069104705781542 -color=red,shape=square,flag=0,i=28325,u=0.4866877061118874,v=0.12611565635691657,w=0.5181859053769521,x=4.187709661694755 -color=red,shape=square,flag=1,i=28334,u=0.07933833185722827,v=0.45710010917929567,w=0.5240004198956381,x=3.3067697246355507 -color=red,shape=triangle,flag=0,i=28336,u=0.5477935719397388,v=0.5778041783312308,w=0.5491380786608641,x=6.778257564252712 -color=purple,shape=circle,flag=0,i=28349,u=0.014649561627469776,v=0.016628037498831016,w=0.5080917018135109,x=4.115665653213783 -color=red,shape=triangle,flag=1,i=28359,u=0.444021185260022,v=0.18577745918453437,w=0.5594079754167716,x=5.707642377018594 -color=blue,shape=triangle,flag=1,i=28361,u=0.11974901409356431,v=0.20782183765487194,w=0.4938648861813803,x=6.374026910056023 -color=red,shape=circle,flag=0,i=28373,u=0.45322966943369203,v=0.3766007589878985,w=0.49144228366048304,x=5.068775371375214 -color=red,shape=square,flag=0,i=28374,u=0.4552045002651459,v=0.8960703347111706,w=0.5167618469826778,x=3.8872465881211036 -color=red,shape=circle,flag=0,i=28375,u=0.7601252595503035,v=0.8563107051708324,w=0.49065886949738863,x=6.6188545373573815 -color=purple,shape=square,flag=0,i=28387,u=0.39662610903491446,v=0.019632445338159443,w=0.5084619864070486,x=4.010086679219019 -color=orange,shape=triangle,flag=0,i=28400,u=0.7725692396808218,v=0.1015316356467284,w=0.553888820412427,x=5.6571258883842725 -color=red,shape=triangle,flag=1,i=28413,u=0.435123512213479,v=0.8542018109107539,w=0.5514452473103078,x=2.6615138644260043 -color=green,shape=triangle,flag=0,i=28416,u=0.8272587749972624,v=0.464202592461749,w=0.5004356810233123,x=1.6542809643179757 -color=yellow,shape=triangle,flag=1,i=28420,u=0.41150951181462425,v=0.34227334370701024,w=0.4936296179646732,x=5.234547141904993 -color=red,shape=circle,flag=0,i=28438,u=0.6520688243034927,v=0.7433153028370248,w=0.4854580578258922,x=3.44516472776952 -color=red,shape=triangle,flag=1,i=28463,u=0.42838053735247006,v=0.13215152238818328,w=0.5383370861147231,x=4.567407341731323 -color=red,shape=triangle,flag=0,i=28468,u=0.8558994881535174,v=0.009832768220795263,w=0.5329243024519078,x=6.036368454313947 -color=purple,shape=circle,flag=0,i=28485,u=0.14857889589995465,v=0.13375004135055546,w=0.49946183732132876,x=5.274396953004432 -color=red,shape=square,flag=0,i=28515,u=0.42279600641319415,v=0.38525179660689246,w=0.5022605258148014,x=5.874738012049626 -color=red,shape=square,flag=0,i=28519,u=0.6047087787686957,v=0.2011327061047723,w=0.4997450764998767,x=6.093118155420797 -color=red,shape=square,flag=1,i=28528,u=0.8719577649271965,v=0.6195031538320895,w=0.4925340906284094,x=4.860720126840298 -color=red,shape=circle,flag=0,i=28530,u=0.518491003490688,v=0.48831750092827675,w=0.4820843240448057,x=6.404656737891173 -color=red,shape=circle,flag=0,i=28532,u=0.1036937443679321,v=0.13055232636941888,w=0.486326113594918,x=4.749575024881765 -color=purple,shape=circle,flag=1,i=28538,u=0.5373399403106417,v=0.8585722405084844,w=0.49995465219226365,x=4.94154045386465 -color=yellow,shape=triangle,flag=1,i=28545,u=0.6012124290585683,v=0.011694530103482204,w=0.48820915498470346,x=6.926808443759181 -color=red,shape=triangle,flag=0,i=28571,u=0.6782716708746045,v=0.11487896052532887,w=0.5311985571143776,x=6.548279740802664 -color=red,shape=square,flag=1,i=28579,u=0.6341765345734965,v=0.4342412850369973,w=0.4862874515734766,x=5.324920904279886 -color=red,shape=triangle,flag=0,i=28583,u=0.7209003844516976,v=0.7742979018837206,w=0.5301192502056737,x=2.3471488869191846 -color=purple,shape=circle,flag=0,i=28591,u=0.4895230123400852,v=0.06847480526481375,w=0.49816527507484726,x=7.049750730407531 -color=red,shape=triangle,flag=1,i=28592,u=0.10212388974059594,v=0.11756040467444218,w=0.5292156702898925,x=5.615265861628302 -color=green,shape=triangle,flag=0,i=28593,u=0.9518567493039518,v=0.3714581372562319,w=0.5037757628393118,x=3.898496861984969 -color=red,shape=square,flag=0,i=28619,u=0.054184563081332904,v=0.9109809262653299,w=0.4857657041842572,x=4.107263075140758 -color=yellow,shape=circle,flag=0,i=28622,u=0.013454807311805372,v=0.9905880675689503,w=0.49532016377431287,x=5.700938078929518 -color=red,shape=square,flag=0,i=28625,u=0.772986059238039,v=0.12879777751306332,w=0.48598903118270675,x=7.689898593528845 -color=blue,shape=circle,flag=0,i=28641,u=0.39447743623569687,v=0.5451967663150283,w=0.5236123997650195,x=6.263661718783337 -color=green,shape=circle,flag=1,i=28645,u=0.36415504056281234,v=0.7291708992279763,w=0.49610326402964133,x=4.47615097974263 -color=green,shape=triangle,flag=1,i=28650,u=0.23590000244352172,v=0.4450954747254223,w=0.5060461258086376,x=5.234249911849379 -color=green,shape=triangle,flag=0,i=28657,u=0.35961305834380275,v=0.5916530676321765,w=0.5071847812892837,x=4.86664053649539 -color=red,shape=circle,flag=1,i=28686,u=0.4867383639531945,v=0.5332984967031007,w=0.48915065317892803,x=6.207955492027497 -color=red,shape=square,flag=1,i=28717,u=0.325526826252045,v=0.14475427039329924,w=0.5026684617980136,x=4.459868028317356 -color=purple,shape=triangle,flag=0,i=28724,u=0.44601457221875296,v=0.04588051810392901,w=0.5252460439764117,x=5.3087463180890415 -color=blue,shape=circle,flag=1,i=28779,u=0.504177557392305,v=0.38260202252665243,w=0.518795685894506,x=4.452651562487838 -color=yellow,shape=square,flag=0,i=28783,u=0.8711034844152754,v=0.09422856231965415,w=0.46198797212587217,x=4.650091045932945 -color=blue,shape=triangle,flag=1,i=28791,u=0.5411492486352146,v=0.8216878516902764,w=0.4973333351873608,x=3.3397907289223743 -color=blue,shape=circle,flag=1,i=28804,u=0.7117191118495163,v=0.7646894831760018,w=0.5199764598042789,x=6.272470164784568 -color=green,shape=triangle,flag=0,i=28818,u=0.5616601785051137,v=0.8308456444697,w=0.5099418522598458,x=5.348455968319544 -color=red,shape=square,flag=0,i=28832,u=0.9709121994904566,v=0.05023287952536082,w=0.5140393954673209,x=6.152082977477377 -color=red,shape=square,flag=0,i=28858,u=0.3270910098794877,v=0.32305146210774927,w=0.5180245345735146,x=4.683131232137949 -color=purple,shape=circle,flag=0,i=28875,u=0.47616596651561016,v=0.050538567510263976,w=0.5164027019751546,x=6.140565260543386 -color=red,shape=circle,flag=1,i=28902,u=0.48508290124584896,v=0.5069274634598699,w=0.4943284672673943,x=4.510585095038166 -color=red,shape=square,flag=0,i=28923,u=0.9866074000624323,v=0.9048405415491704,w=0.5026479964525619,x=3.8971718375534503 -color=red,shape=triangle,flag=0,i=28933,u=0.6010052893949556,v=0.45313889523796325,w=0.5177194901393425,x=5.387599773135471 -color=blue,shape=triangle,flag=1,i=28938,u=0.83970698437518,v=0.8605273621938,w=0.4993030619297307,x=4.2636942261972575 -color=green,shape=circle,flag=0,i=28950,u=0.06048151605792207,v=0.5496286632556652,w=0.48885752580835623,x=4.881327938140004 -color=yellow,shape=circle,flag=0,i=28960,u=0.5685696262018551,v=0.3615634458306888,w=0.5224889106979393,x=5.240556990437562 -color=yellow,shape=square,flag=1,i=28964,u=0.23260532778127208,v=0.14471852025946008,w=0.4721501628687404,x=4.094010848551506 -color=yellow,shape=circle,flag=1,i=28989,u=0.7375423729453301,v=0.1547304786896896,w=0.5266972007074195,x=4.910478492695728 -color=red,shape=square,flag=0,i=28991,u=0.7333848300888832,v=0.7577830768995295,w=0.5043754812940772,x=6.916116425809036 -color=red,shape=triangle,flag=0,i=28992,u=0.047493325966395994,v=0.01339901819414746,w=0.5226556002753617,x=6.896576321225491 -color=red,shape=square,flag=0,i=29009,u=0.967010822069736,v=0.20834003921694721,w=0.5129159759673435,x=4.196738316261908 -color=yellow,shape=triangle,flag=1,i=29018,u=0.6251948074595004,v=0.39379628196691974,w=0.4817350011030718,x=3.559609927977327 -color=red,shape=triangle,flag=0,i=29025,u=0.18795762906756586,v=0.6816232557388878,w=0.513069094501169,x=3.824453301290785 -color=red,shape=circle,flag=0,i=29027,u=0.8907508892002952,v=0.9103227266687736,w=0.5003594922691517,x=2.921623838308927 -color=red,shape=square,flag=1,i=29046,u=0.6205763124315744,v=0.8750577460978215,w=0.5105961405064133,x=3.438063265558912 -color=red,shape=triangle,flag=0,i=29053,u=0.536998466751463,v=0.21260903230242956,w=0.5174728217832933,x=2.8965095580760205 -color=purple,shape=triangle,flag=0,i=29072,u=0.28868344480040287,v=0.6515567652417326,w=0.5337921851714044,x=4.827509877339264 -color=red,shape=triangle,flag=0,i=29083,u=0.4128684878609814,v=0.15831517319687705,w=0.517168686172276,x=6.111325206020439 -color=orange,shape=square,flag=1,i=29084,u=0.5544759360176078,v=0.3879294106933915,w=0.47367898941866904,x=3.850575297664433 -color=red,shape=circle,flag=0,i=29087,u=0.8442961850889149,v=0.9211853852377734,w=0.513023774474256,x=4.67605032745099 -color=red,shape=triangle,flag=0,i=29097,u=0.7116352590682079,v=0.6968519252423728,w=0.5167586512729616,x=5.351935187745752 -color=green,shape=triangle,flag=0,i=29117,u=0.8890443071256672,v=0.4059821142795865,w=0.4895360904090859,x=6.7361965321945645 -color=red,shape=circle,flag=0,i=29120,u=0.17001534880056657,v=0.09509308046699194,w=0.5150981648158417,x=4.540104411367356 -color=red,shape=circle,flag=1,i=29127,u=0.3027848718935999,v=0.38632094440380577,w=0.5142607773786037,x=5.336150858051432 -color=yellow,shape=circle,flag=1,i=29148,u=0.22844561342706882,v=0.03373482377106363,w=0.5235083488338232,x=3.609216314372453 -color=green,shape=square,flag=1,i=29155,u=0.7652166571880631,v=0.5205160934567817,w=0.4389380692685188,x=5.110816505630562 -color=red,shape=triangle,flag=0,i=29169,u=0.14993492488041094,v=0.9522037282232144,w=0.5212752361427919,x=4.197940675836989 -color=red,shape=square,flag=1,i=29170,u=0.42449985737250007,v=0.37993195712480254,w=0.5216935556606677,x=6.401308353090935 -color=blue,shape=triangle,flag=1,i=29181,u=0.9191718701757283,v=0.3507778006364465,w=0.508947630687695,x=3.305380565048965 -color=purple,shape=triangle,flag=0,i=29188,u=0.10405006910190873,v=0.0989291305444161,w=0.5282855529095846,x=5.85950934637179 -color=red,shape=square,flag=0,i=29190,u=0.6103391230374575,v=0.24321145925900345,w=0.5198293990495322,x=5.565941969578737 -color=red,shape=circle,flag=1,i=29194,u=0.7345324373176755,v=0.6848713724324484,w=0.5182995572301282,x=6.010468108010923 -color=red,shape=square,flag=1,i=29211,u=0.040892145299960214,v=0.08769672404207951,w=0.52472320010642,x=4.3013110270557045 -color=yellow,shape=square,flag=0,i=29229,u=0.20572299024789398,v=0.04063121378724688,w=0.4779765376227126,x=6.995608150734949 -color=blue,shape=square,flag=1,i=29232,u=0.23563382296451874,v=0.40269448294757626,w=0.5153712844818279,x=6.583952920697662 -color=green,shape=triangle,flag=0,i=29235,u=0.5098376714442905,v=0.4413895380969317,w=0.47709407018436606,x=5.776635608162773 -color=green,shape=circle,flag=0,i=29241,u=0.4869799736767464,v=0.46460778026228566,w=0.4820819630867842,x=5.218998228321822 -color=red,shape=triangle,flag=0,i=29246,u=0.42063578804348967,v=0.686722550476034,w=0.5242797362851747,x=2.9640388504853026 -color=red,shape=square,flag=0,i=29251,u=0.5788924633356175,v=0.4387942346286279,w=0.522098394638534,x=3.6449052201269474 -color=purple,shape=square,flag=0,i=29266,u=0.05757123737932757,v=0.5347868515607477,w=0.49873505757516123,x=4.681783465239761 -color=green,shape=square,flag=0,i=29271,u=0.07944596322095798,v=0.43612401065227724,w=0.4477435516575735,x=4.533079292312345 -color=green,shape=triangle,flag=0,i=29285,u=0.7317958102801904,v=0.8857330888047565,w=0.4739073656584723,x=5.158622325287397 -color=red,shape=triangle,flag=0,i=29295,u=0.5961907954222443,v=0.4284237720726396,w=0.5218886057670831,x=4.653690663478196 -color=green,shape=triangle,flag=0,i=29303,u=0.7282365279615635,v=0.23844314050421345,w=0.4740329911182216,x=3.9528466067825216 -color=blue,shape=circle,flag=0,i=29308,u=0.509926504223778,v=0.7611953888370436,w=0.5088669165482629,x=5.905041755023697 -color=red,shape=triangle,flag=0,i=29320,u=0.2121522897086795,v=0.2684182945189899,w=0.5195398195519959,x=6.608822214135164 -color=purple,shape=triangle,flag=0,i=29323,u=0.6830294309255329,v=0.775679808410577,w=0.5325456015236554,x=7.890569948348088 -color=yellow,shape=triangle,flag=0,i=29324,u=0.6419903566927515,v=0.1388854726679677,w=0.49894990364901726,x=5.781778375798997 -color=orange,shape=square,flag=1,i=29326,u=0.5575885117103254,v=0.6337165921269444,w=0.4704135138012962,x=5.518048123035133 -color=red,shape=triangle,flag=0,i=29327,u=0.9858604425566663,v=0.6950368294498945,w=0.5207873085930961,x=6.47088038302435 -color=red,shape=triangle,flag=0,i=29338,u=0.8754579607080465,v=0.43136199359132943,w=0.5222736195093759,x=6.788377767991445 -color=red,shape=triangle,flag=0,i=29349,u=0.547371438476399,v=0.8837882300132288,w=0.5216647911783672,x=5.654792046823208 -color=blue,shape=triangle,flag=0,i=29350,u=0.213178409911158,v=0.38311577989553414,w=0.5168770549447369,x=4.504396475273677 -color=red,shape=triangle,flag=0,i=29351,u=0.30636312848825176,v=0.6778355136614823,w=0.5229651641401726,x=5.533291489414755 -color=yellow,shape=triangle,flag=1,i=29375,u=0.9375131092402302,v=0.8298702555736749,w=0.5014923386563265,x=6.003667707510409 -color=purple,shape=square,flag=0,i=29376,u=0.6906419545463135,v=0.002627950645080257,w=0.48707640086389775,x=3.2685374131930467 -color=red,shape=circle,flag=0,i=29377,u=0.31917165163209604,v=0.3181528144304471,w=0.5221809675214947,x=7.713420122508251 -color=purple,shape=square,flag=0,i=29396,u=0.7005408993695096,v=0.6214721124588273,w=0.48381148322077444,x=6.1575917605577635 -color=purple,shape=triangle,flag=0,i=29416,u=0.2698009708541149,v=0.9184834137984218,w=0.5380879564273844,x=6.3752631737619465 -color=blue,shape=circle,flag=1,i=29418,u=0.9208117165394312,v=0.1500342494124729,w=0.5029888822096371,x=4.668006421360798 -color=red,shape=circle,flag=0,i=29431,u=0.37992588141635897,v=0.4621092885060484,w=0.5244298248611731,x=5.787139082459711 -color=red,shape=triangle,flag=0,i=29435,u=0.6033161080944892,v=0.908086594516721,w=0.5205284317594274,x=4.603599447724595 -color=purple,shape=square,flag=0,i=29440,u=0.7663056748567126,v=0.5228817639784796,w=0.4853791515867845,x=4.7537605263894305 -color=red,shape=square,flag=1,i=29463,u=0.5940784768486077,v=0.7950023781325019,w=0.5184868753111943,x=5.921459456017554 -color=blue,shape=square,flag=1,i=29469,u=0.03096021057027154,v=0.8698958307719932,w=0.5244663662254642,x=4.80105659779744 -color=red,shape=circle,flag=0,i=29492,u=0.7431228129642022,v=0.66282091721515,w=0.519385088806541,x=3.081281871621522 -color=red,shape=square,flag=0,i=29506,u=0.18414286445228867,v=0.5439263685451944,w=0.5142522160125361,x=6.31795492767845 -color=red,shape=triangle,flag=1,i=29509,u=0.8229158005651677,v=0.5296418966706153,w=0.5263650920070448,x=4.920673641333984 -color=red,shape=circle,flag=1,i=29512,u=0.6150568263705181,v=0.6426552855844806,w=0.5187425632585658,x=4.287822886345743 -color=red,shape=square,flag=1,i=29521,u=0.4210838290352793,v=0.6698904561435841,w=0.5109098565338447,x=3.225364527552239 -color=purple,shape=square,flag=0,i=29530,u=0.6733360800094544,v=0.681708177032319,w=0.48602321404467064,x=5.271419797629661 -color=blue,shape=square,flag=1,i=29541,u=0.21220839536376723,v=0.4567711453708774,w=0.5265327618268626,x=3.135476309872564 -color=red,shape=circle,flag=0,i=29549,u=0.8742717427360113,v=0.9302430417547757,w=0.5196860677393458,x=5.516121902941492 -color=purple,shape=triangle,flag=0,i=29561,u=0.4513617376250799,v=0.3319877007295401,w=0.532290161585172,x=5.850451112686195 -color=purple,shape=circle,flag=0,i=29578,u=0.18178438177762435,v=0.45439238386916025,w=0.512912953421344,x=5.2531512898673745 -color=red,shape=square,flag=1,i=29583,u=0.0034019037355421666,v=0.372980961867854,w=0.5087102952780208,x=4.811340334353258 -color=purple,shape=triangle,flag=0,i=29590,u=0.44687363035531613,v=0.16483290678374607,w=0.5291137612729291,x=5.924271068238883 -color=red,shape=triangle,flag=0,i=29593,u=0.08478579259449859,v=0.030280726143774084,w=0.5220587031425125,x=5.683160475911261 -color=blue,shape=triangle,flag=1,i=29603,u=0.3870166741784411,v=0.7780611833095648,w=0.5222349597624755,x=3.2736604694145206 -color=purple,shape=circle,flag=0,i=29607,u=0.016501338804909116,v=0.2747537419490832,w=0.5133167183991689,x=5.204587366417591 -color=green,shape=triangle,flag=1,i=29623,u=0.9244494860196397,v=0.04760227483518442,w=0.46587444441461673,x=5.870242362954625 -color=yellow,shape=triangle,flag=1,i=29639,u=0.6574356205809735,v=0.17607080316040014,w=0.493287320358233,x=3.769050981090595 -color=purple,shape=triangle,flag=0,i=29644,u=0.275751722451941,v=0.5841750109724062,w=0.5260437970275496,x=5.4541860506335285 -color=red,shape=square,flag=0,i=29653,u=0.5865399307774417,v=0.8745844630545466,w=0.5168541966341402,x=3.295922878024351 -color=blue,shape=triangle,flag=1,i=29657,u=0.11255405091871984,v=0.054952836091728074,w=0.5202741897928987,x=6.404243381702867 -color=yellow,shape=triangle,flag=1,i=29659,u=0.266140692870774,v=0.6928470129413267,w=0.4944124834527488,x=4.799213117300116 -color=yellow,shape=triangle,flag=1,i=29661,u=0.585797330965652,v=0.6485153370388037,w=0.49588227128232515,x=5.0665872920028185 -color=green,shape=square,flag=1,i=29665,u=0.702974968407844,v=0.3304672973864793,w=0.4654244780542738,x=4.884596019592617 -color=blue,shape=circle,flag=1,i=29667,u=0.7210614003295094,v=0.23590427496902744,w=0.4971013421815183,x=6.691829906116394 -color=blue,shape=square,flag=1,i=29704,u=0.4027022037362268,v=0.7691703955959995,w=0.5259079205460773,x=5.897790666959815 -color=yellow,shape=square,flag=1,i=29721,u=0.49473596281744403,v=0.27469069367657206,w=0.49372817525374924,x=5.209634503095014 -color=red,shape=circle,flag=0,i=29729,u=0.4326293732706511,v=0.4056719258575794,w=0.5074613360998372,x=6.835725069911573 -color=blue,shape=triangle,flag=1,i=29739,u=0.05156349574935992,v=0.09004906045829553,w=0.5155149833666632,x=4.582831435013014 -color=blue,shape=square,flag=1,i=29752,u=0.5149817204989489,v=0.0016624922524925978,w=0.5250081992812912,x=3.098185998821226 -color=yellow,shape=square,flag=1,i=29770,u=0.41111508110444195,v=0.32045965506363006,w=0.4938881936066751,x=5.385870358510869 -color=blue,shape=triangle,flag=1,i=29777,u=0.41741426213421784,v=0.7467042913032289,w=0.5182128525405643,x=4.534055684590649 -color=green,shape=square,flag=0,i=29787,u=0.8190293834797779,v=0.8859257609952934,w=0.4675732077569812,x=3.6654444072825556 -color=orange,shape=triangle,flag=1,i=29821,u=0.5959848300384338,v=0.1822578625482384,w=0.5646184212494092,x=3.99977302240179 -color=red,shape=square,flag=0,i=29829,u=0.7301789779665903,v=0.41857022858194914,w=0.520276546060603,x=6.808112650060683 -color=purple,shape=square,flag=0,i=29840,u=0.5992454335855963,v=0.8056146895093382,w=0.49104006125759775,x=4.321982281031561 -color=red,shape=triangle,flag=0,i=29843,u=0.8589377860466937,v=0.9527401031865766,w=0.4875687935554442,x=5.978286660638037 -color=red,shape=circle,flag=1,i=29856,u=0.20604687792627696,v=0.2373665356831624,w=0.5030511797803342,x=3.03434307113751 -color=green,shape=circle,flag=0,i=29889,u=0.3545794601134278,v=0.9685736930775674,w=0.5073623923359062,x=5.5755280931640145 -color=red,shape=circle,flag=0,i=29896,u=0.9539709666522029,v=0.8899989164341081,w=0.4919316856408472,x=3.283701202922275 -color=red,shape=square,flag=1,i=29913,u=0.6319459054255879,v=0.6835283549035489,w=0.49452003747397744,x=4.59335912122535 -color=yellow,shape=circle,flag=1,i=29934,u=0.12903282043132014,v=0.0684388640589505,w=0.530523425220845,x=6.368948623377881 -color=green,shape=triangle,flag=0,i=29957,u=0.17852338581332783,v=0.9301404799503399,w=0.4734426664644052,x=6.2035626244904725 -color=purple,shape=square,flag=0,i=29958,u=0.753396065263036,v=0.4036467990991589,w=0.48954473928718306,x=3.070313888675163 -color=red,shape=circle,flag=0,i=29964,u=0.48545239079349856,v=0.5262122761226822,w=0.4831083745020635,x=5.009029679869083 -color=red,shape=circle,flag=0,i=29971,u=0.30551307645402237,v=0.3664800199847265,w=0.47708800376088945,x=5.363253467760244 -color=yellow,shape=triangle,flag=1,i=29972,u=0.29346228242489947,v=0.9818633639509691,w=0.5008219842080108,x=4.5232974897894875 -color=orange,shape=square,flag=0,i=29988,u=0.7290924974104981,v=0.625384244713551,w=0.4783605235815646,x=4.105279093671387 -color=blue,shape=triangle,flag=1,i=29992,u=0.2770027690563145,v=0.9785601760579371,w=0.5111913134260267,x=3.8791792989907066 -color=blue,shape=triangle,flag=1,i=29993,u=0.8035252551383874,v=0.3004863823453163,w=0.5073352358653068,x=5.661137070882127 -color=red,shape=square,flag=0,i=30007,u=0.20063414310531924,v=0.30756246832020584,w=0.4888795796415844,x=4.980829921930858 -color=red,shape=triangle,flag=1,i=30017,u=0.13832770125613314,v=0.768651597657867,w=0.4931892297340393,x=5.430528950141588 -color=blue,shape=square,flag=1,i=30018,u=0.8449273676275564,v=0.621166096994931,w=0.5053151982311194,x=5.902846882297393 -color=yellow,shape=square,flag=1,i=30052,u=0.7152808611391698,v=0.532517528197617,w=0.488992500041547,x=5.184232637479634 -color=red,shape=square,flag=0,i=30058,u=0.7814474459558515,v=0.20856273010326976,w=0.49253348431011335,x=4.179526995756143 -color=green,shape=square,flag=0,i=30065,u=0.6810829962381632,v=0.8087890938005086,w=0.489259397961584,x=3.5977529048923635 -color=red,shape=square,flag=0,i=30068,u=0.5196833892850999,v=0.9367150794714201,w=0.4965574827287151,x=3.3105954392389383 -color=yellow,shape=square,flag=1,i=30086,u=0.9343130317958508,v=0.7832383505783216,w=0.48723591291649976,x=5.040240159713332 -color=purple,shape=square,flag=0,i=30111,u=0.7986076861179164,v=0.7394174552605486,w=0.48306023430082523,x=5.470637712656124 -color=red,shape=triangle,flag=1,i=30122,u=0.22451841677562268,v=0.4008485681662449,w=0.5017897486594739,x=1.5004632464886598 -color=green,shape=square,flag=0,i=30143,u=0.33142749879811806,v=0.9020200038557241,w=0.49089941359372596,x=5.482553755806546 -color=purple,shape=circle,flag=0,i=30146,u=0.1477189654942207,v=0.47251966803487366,w=0.5063245255562299,x=5.346019341182475 -color=red,shape=square,flag=0,i=30151,u=0.5012244366768477,v=0.10415321475197947,w=0.4931749062560858,x=7.1595278694387305 -color=green,shape=triangle,flag=1,i=30157,u=0.6016650438179475,v=0.3669857434335294,w=0.4714022304049529,x=2.756406893326831 -color=purple,shape=circle,flag=0,i=30164,u=0.09156249040649578,v=0.229210690055338,w=0.5047227095739586,x=4.091959353137588 -color=orange,shape=triangle,flag=0,i=30166,u=0.4347367801621198,v=0.2790962095748857,w=0.5509229954930609,x=5.487200986388664 -color=red,shape=square,flag=0,i=30178,u=0.449207014107289,v=0.8428339809879006,w=0.49641758965516214,x=4.916088070652804 -color=red,shape=triangle,flag=1,i=30186,u=0.16590029994298372,v=0.2781810509850351,w=0.4959275804808212,x=4.995636120274436 -color=blue,shape=square,flag=1,i=30188,u=0.29844354274224605,v=0.16676696472197183,w=0.5036755539129283,x=5.674581541296543 -color=yellow,shape=triangle,flag=1,i=30192,u=0.46806203481637454,v=0.539568921643238,w=0.49715104248877445,x=5.005214696185409 -color=red,shape=square,flag=1,i=30198,u=0.2691135454136523,v=0.957159613663821,w=0.49224999822326776,x=5.247577586031528 -color=blue,shape=square,flag=1,i=30245,u=0.8656475748205655,v=0.9449542382343803,w=0.495117579326984,x=5.3753339335411825 -color=green,shape=triangle,flag=0,i=30262,u=0.307873059783773,v=0.9592139872606779,w=0.47922305165858636,x=5.850901069980025 -color=blue,shape=circle,flag=0,i=30263,u=0.6614015839422331,v=0.028552863313809906,w=0.5005600732195173,x=4.291423610723483 -color=red,shape=square,flag=0,i=30269,u=0.003830227522392371,v=0.7660957908256116,w=0.5006200173117727,x=6.233722971033761 -color=purple,shape=triangle,flag=0,i=30270,u=0.288177704672979,v=0.9459586009729012,w=0.5348338672571158,x=4.687882426913988 -color=red,shape=circle,flag=1,i=30281,u=0.5583883212944449,v=0.5896671246335984,w=0.48001088182143503,x=6.449324219113862 -color=green,shape=square,flag=0,i=30282,u=0.051033325162624155,v=0.7959475980378004,w=0.4982038524948576,x=6.247442473289776 -color=red,shape=square,flag=0,i=30285,u=0.39342596666005913,v=0.29269349946258305,w=0.49462703207301845,x=2.7358713106589576 -color=red,shape=square,flag=1,i=30286,u=0.027880527907372277,v=0.6415699409412685,w=0.4940481739540081,x=4.61169149889735 -color=red,shape=triangle,flag=0,i=30291,u=0.1470352078876791,v=0.8125500250619784,w=0.512394319131293,x=5.98236469224189 -color=yellow,shape=square,flag=1,i=30302,u=0.8302639347377956,v=0.8334333735657777,w=0.4891615217157213,x=6.485489844364913 -color=red,shape=circle,flag=0,i=30332,u=0.8895447722814571,v=0.9717354540107599,w=0.4854406758431147,x=4.824398026515303 -color=purple,shape=triangle,flag=0,i=30333,u=0.11950000546734574,v=0.3244988246632423,w=0.5152415980846886,x=3.5206566048485786 -color=red,shape=square,flag=0,i=30343,u=0.008260435602335026,v=0.7244644428748056,w=0.5028917688036276,x=5.493305286497622 -color=green,shape=triangle,flag=0,i=30348,u=0.4450670665515626,v=0.20264718068515652,w=0.4745790973762201,x=5.2402577730237265 -color=yellow,shape=circle,flag=1,i=30350,u=0.7778309469057162,v=0.6796926768442973,w=0.5260855728112273,x=3.5272244096067413 -color=red,shape=circle,flag=0,i=30354,u=0.301708448793656,v=0.29546375049306,w=0.4843449064349069,x=5.556597086323777 -color=blue,shape=square,flag=0,i=30357,u=0.03698558276279085,v=0.282947385603037,w=0.4930610727463199,x=3.993359818266453 -color=red,shape=square,flag=0,i=30375,u=0.15995068490840758,v=0.34931712073912613,w=0.5014310473810644,x=6.603087065113681 -color=red,shape=square,flag=0,i=30382,u=0.49277923914690824,v=0.644292093697381,w=0.5044079305212555,x=3.2145361339453107 -color=blue,shape=circle,flag=1,i=30385,u=0.7470845629328279,v=0.48578076348044175,w=0.5090265888617694,x=4.896898528388144 -color=yellow,shape=triangle,flag=0,i=30388,u=0.8253595607371385,v=0.09275631826692166,w=0.4999218035048412,x=6.1051243915627795 -color=green,shape=square,flag=0,i=30389,u=0.7778554677032801,v=0.8064929507105697,w=0.5000543529613237,x=5.50113587877009 -color=yellow,shape=circle,flag=0,i=30390,u=0.7150936592962341,v=0.3224611554616321,w=0.5243652813373487,x=3.341000050851713 -color=red,shape=square,flag=1,i=30399,u=0.34089854379698337,v=0.8647796046605544,w=0.5088227558623317,x=4.587514169567759 -color=red,shape=circle,flag=0,i=30402,u=0.16947487546279205,v=0.07523081969366156,w=0.4839323463296248,x=6.084071449415837 -color=red,shape=circle,flag=0,i=30405,u=0.5888921727408212,v=0.5751240662192442,w=0.48918397822006554,x=3.5960139251461034 -color=green,shape=triangle,flag=1,i=30432,u=0.18348526800532372,v=0.22588163531340089,w=0.47036883363533216,x=5.819706510873556 -color=red,shape=square,flag=1,i=30434,u=0.8120235545439471,v=0.14548108933387383,w=0.5091154210613482,x=3.818061629755697 -color=blue,shape=triangle,flag=1,i=30435,u=0.7274927147102481,v=0.4750011734546318,w=0.4899643232412815,x=2.6562563731825377 -color=purple,shape=square,flag=0,i=30444,u=0.22042132722165142,v=0.2575261498804785,w=0.47193038629235934,x=3.316979626952198 -color=purple,shape=circle,flag=0,i=30483,u=0.21721064411561197,v=0.554777745881919,w=0.49663492704955686,x=4.291710904681601 -color=purple,shape=triangle,flag=0,i=30487,u=0.8307657056891141,v=0.9447641439659609,w=0.5153151632804447,x=4.457897979223862 -color=red,shape=circle,flag=0,i=30501,u=0.896657859923559,v=0.8723902077877677,w=0.49986885723510327,x=3.690066682201989 -color=red,shape=square,flag=0,i=30506,u=0.8575325703791198,v=0.02833175026162782,w=0.5041695700951581,x=6.039720330089203 -color=green,shape=square,flag=0,i=30516,u=0.4338140378282922,v=0.3928659303185025,w=0.48929794672694793,x=6.223465939692186 -color=red,shape=square,flag=1,i=30520,u=0.9528955914171259,v=0.5531558822294478,w=0.5091922248456057,x=4.087593474489518 -color=red,shape=square,flag=0,i=30569,u=0.6126940909687901,v=0.5570447826214673,w=0.511572204173628,x=6.284588801688897 -color=red,shape=circle,flag=0,i=30585,u=0.3894503412249999,v=0.42039140372370654,w=0.49323703549648096,x=6.833595530194188 -color=red,shape=triangle,flag=0,i=30592,u=0.27527967879076043,v=0.790248820403096,w=0.5024868329017081,x=5.314677105794 -color=yellow,shape=circle,flag=1,i=30596,u=0.7957559797471911,v=0.5618444338292828,w=0.5285505391552109,x=6.382165742639831 -color=red,shape=triangle,flag=0,i=30603,u=0.2845741974727857,v=0.3473550442036083,w=0.5012311856523145,x=4.7202795409718235 -color=red,shape=triangle,flag=0,i=30607,u=0.1175938530648899,v=0.6518052989184085,w=0.5060915168345712,x=4.894007763795773 -color=red,shape=square,flag=1,i=30621,u=0.7609148906025656,v=0.6512899641547996,w=0.5125386254645461,x=5.080977630677931 -color=blue,shape=triangle,flag=1,i=30624,u=0.9600765693061948,v=0.08198983697064288,w=0.4955791731545013,x=6.057987291461597 -color=red,shape=square,flag=0,i=30662,u=0.6094290702112861,v=0.7487913790450337,w=0.5138772370700087,x=5.3182863310449 -color=red,shape=square,flag=0,i=30664,u=0.17217824127553671,v=0.5807344530586044,w=0.5110405596583685,x=4.426600886911363 -color=purple,shape=circle,flag=0,i=30675,u=0.31403654472520426,v=0.11357922039355395,w=0.5058549636815446,x=5.527648782096251 -color=red,shape=triangle,flag=0,i=30705,u=0.5725290396782309,v=0.048376064229432414,w=0.5184906763807028,x=3.5345940672180904 -color=red,shape=square,flag=1,i=30714,u=0.04980999657679841,v=0.25767585619592825,w=0.515984584202646,x=3.7981948910822605 -color=red,shape=triangle,flag=0,i=30719,u=0.21855866681958847,v=0.4982543964061553,w=0.523148157493496,x=5.329747612909604 -color=green,shape=square,flag=0,i=30736,u=0.534375342718703,v=0.16303254609835027,w=0.4805388913432233,x=6.392284967248595 -color=blue,shape=square,flag=0,i=30741,u=0.5950992758945963,v=0.7550950465466318,w=0.513987982901534,x=4.018636200757412 -color=orange,shape=square,flag=1,i=30763,u=0.7827732095297112,v=0.6167773920685936,w=0.46831216596398845,x=3.5940444643544676 -color=green,shape=triangle,flag=0,i=30764,u=0.2276334256884477,v=0.3404531276690478,w=0.4532130321998119,x=6.65168349766098 -color=red,shape=square,flag=1,i=30774,u=0.9437243280470229,v=0.43960170554974154,w=0.5143556484426715,x=2.912002559941799 -color=yellow,shape=square,flag=1,i=30778,u=0.6609143414169346,v=0.2192007192076071,w=0.5000548759558088,x=4.361794683171049 -color=red,shape=square,flag=0,i=30787,u=0.4134945323539029,v=0.6679675565253959,w=0.5195582107837091,x=5.653513950764757 -color=red,shape=square,flag=1,i=30816,u=0.469697258579583,v=0.7902222205684575,w=0.5355957165290308,x=5.01758689448523 -color=red,shape=circle,flag=0,i=30854,u=0.18140350510768333,v=0.18168800517293002,w=0.5170824333522133,x=5.533912842640693 -color=red,shape=triangle,flag=1,i=30877,u=0.6741179332464845,v=0.6461495367208291,w=0.5140053013282697,x=5.871825420274697 -color=blue,shape=circle,flag=0,i=30893,u=0.7245453907354324,v=0.918340980961967,w=0.5165643432325667,x=4.9255026811854234 -color=red,shape=square,flag=0,i=30896,u=0.485056411667279,v=0.3819608133877569,w=0.5462491902024431,x=4.42421979184498 -color=green,shape=triangle,flag=0,i=30902,u=0.49568237875725185,v=0.5831455586945526,w=0.4596912935849979,x=6.9176465634698125 -color=red,shape=triangle,flag=0,i=30928,u=0.14918364573664367,v=0.12634066592596216,w=0.5050016882791779,x=5.753544109278358 -color=blue,shape=triangle,flag=1,i=30933,u=0.8405576935323963,v=0.7934462926694278,w=0.48525764684461326,x=3.8407633379337853 -color=blue,shape=circle,flag=0,i=30944,u=0.1260653463516933,v=0.1693463988688123,w=0.5175684006583814,x=6.084164845246112 -color=red,shape=circle,flag=0,i=30953,u=0.5602094334631412,v=0.6359658861779514,w=0.5274257762503781,x=5.645037486950211 -color=red,shape=square,flag=0,i=30960,u=0.5803951853195812,v=0.7904139164895896,w=0.5364147140055715,x=6.046353563211684 -color=red,shape=square,flag=1,i=30963,u=0.5553374144593168,v=0.522862844160655,w=0.5322882454574523,x=5.063691234912764 -color=yellow,shape=square,flag=1,i=31000,u=0.02436920299593648,v=0.8831396964693253,w=0.5094730711991914,x=4.850603742648588 -color=red,shape=circle,flag=0,i=31005,u=0.5133765183162307,v=0.46724056305178574,w=0.5326036951272493,x=3.799676680219985 -color=blue,shape=square,flag=1,i=31008,u=0.170507123522057,v=0.8537386139649247,w=0.5009080264199828,x=6.371533374648447 -color=green,shape=square,flag=0,i=31024,u=0.610840629667652,v=0.2638782169056768,w=0.4928716967591164,x=5.595505781716166 -color=blue,shape=triangle,flag=1,i=31029,u=0.3389472459581383,v=0.5259091735902588,w=0.4921296219938035,x=4.408408542049037 -color=yellow,shape=triangle,flag=1,i=31031,u=0.48263206745864784,v=0.52505649107279,w=0.5088058598602397,x=5.125746406540444 -color=green,shape=square,flag=0,i=31046,u=0.5447546493131459,v=0.7029287311177661,w=0.496903661374872,x=5.559463121411629 -color=purple,shape=circle,flag=0,i=31075,u=0.43228702999525037,v=0.9234244308233611,w=0.5065028225159918,x=3.336893020979776 -color=blue,shape=triangle,flag=0,i=31079,u=0.6944413687865546,v=0.2890001568469157,w=0.4994660311746382,x=3.3129610345464635 -color=red,shape=triangle,flag=0,i=31082,u=0.8705769138388587,v=0.9751811859145059,w=0.5099232476147225,x=4.637004797474901 -color=blue,shape=triangle,flag=0,i=31106,u=0.9011950739572303,v=0.8947916221391885,w=0.4947526557052893,x=5.5981330467018084 -color=yellow,shape=triangle,flag=1,i=31111,u=0.1600763094716232,v=0.6361466679701256,w=0.49953173184304145,x=4.288646727484488 -color=red,shape=triangle,flag=0,i=31176,u=0.23533580621101424,v=0.2737770886965992,w=0.49911911237270923,x=6.814897422061496 -color=green,shape=circle,flag=0,i=31178,u=0.5775271221995039,v=0.5570784045661324,w=0.4977260455158192,x=5.716532045272153 -color=red,shape=triangle,flag=1,i=31180,u=0.811247343251775,v=0.05675863358810185,w=0.5043425462490259,x=6.217739907510967 -color=red,shape=circle,flag=0,i=31181,u=0.44251755428275075,v=0.5049948328915848,w=0.5364249490422851,x=5.613606720003211 -color=blue,shape=triangle,flag=1,i=31185,u=0.33679971121331065,v=0.8486508656001518,w=0.4906332183673078,x=3.339772963864308 -color=green,shape=circle,flag=0,i=31193,u=0.7830329685372199,v=0.8768831590318761,w=0.4937646251096954,x=5.050285102640554 -color=green,shape=square,flag=1,i=31199,u=0.9872641989143817,v=0.9063911516615576,w=0.47675701167179524,x=6.124551407295357 -color=blue,shape=square,flag=0,i=31219,u=0.5175367176493351,v=0.6575966685560474,w=0.4992142767543194,x=8.318347612152106 -color=purple,shape=square,flag=0,i=31235,u=0.8779783449906201,v=0.8023903932369643,w=0.4775146486723392,x=5.50699358032634 -color=red,shape=square,flag=0,i=31236,u=0.563873640719193,v=0.608209846049118,w=0.5223207369684941,x=3.400498674702021 -color=red,shape=circle,flag=0,i=31240,u=0.9957991931484116,v=1.0173926199780277,w=0.5242659965625325,x=4.701210712607983 -color=red,shape=square,flag=1,i=31248,u=0.17295284830929858,v=0.18206483634331327,w=0.5206993001710004,x=7.330427152460064 -color=red,shape=triangle,flag=0,i=31249,u=0.7592587621330351,v=0.9691470251130286,w=0.5081284088883297,x=4.211993275659857 -color=red,shape=triangle,flag=0,i=31257,u=0.26502970111342083,v=0.4891472505186757,w=0.5106525316910329,x=4.762995330113068 -color=red,shape=circle,flag=1,i=31263,u=0.21695287498289273,v=0.30114473327207275,w=0.5244355668432987,x=3.0124648383152395 -color=red,shape=circle,flag=1,i=31265,u=0.8954827085470323,v=0.8385131757298496,w=0.5266003543974686,x=4.65424086438879 -color=red,shape=circle,flag=0,i=31266,u=0.9748642235377072,v=0.9904893276325748,w=0.529975101878862,x=5.494366302028819 -color=purple,shape=circle,flag=0,i=31301,u=0.5493291926941055,v=0.19057244404881668,w=0.5016018782618987,x=4.8455164204222525 -color=red,shape=circle,flag=1,i=31315,u=0.4778945864664157,v=0.49839009704663917,w=0.5284871676906537,x=3.0953806464251845 -color=red,shape=square,flag=1,i=31328,u=0.5543599891496866,v=0.5246616963380494,w=0.510248897880488,x=7.334943586038254 -color=red,shape=square,flag=0,i=31347,u=0.1732076329323342,v=0.20547898691024935,w=0.5035173066241658,x=6.024678001200999 -color=red,shape=triangle,flag=1,i=31351,u=0.31260573645858714,v=0.6480985337958689,w=0.5174385195282847,x=4.856585050666885 -color=green,shape=circle,flag=0,i=31361,u=0.2275728625019101,v=0.1963649209210966,w=0.4997630181694436,x=5.192460479639976 -color=orange,shape=triangle,flag=1,i=31379,u=0.23100832430228502,v=0.7360710148554332,w=0.5436575392763905,x=4.6651264183168415 -color=orange,shape=triangle,flag=0,i=31380,u=0.6519225771058487,v=0.5145337606933655,w=0.546066660260992,x=3.503860128759937 -color=yellow,shape=circle,flag=1,i=31385,u=0.3588056961812789,v=0.6105479148733278,w=0.5126077793184256,x=3.46234788913182 -color=red,shape=square,flag=0,i=31406,u=0.3639534314697448,v=0.8392444450851481,w=0.521529631286661,x=5.334686284704513 -color=blue,shape=square,flag=1,i=31441,u=0.1650510898821953,v=0.21577671065592197,w=0.5041305071414098,x=5.585231870189646 -color=blue,shape=triangle,flag=0,i=31461,u=0.18437865374190476,v=0.6998235311408125,w=0.48350256970028316,x=4.578984084561866 -color=red,shape=square,flag=0,i=31462,u=0.6695417057570011,v=0.9042026761823094,w=0.515182134008645,x=5.18694720568645 -color=red,shape=triangle,flag=1,i=31472,u=0.10479902873544122,v=0.44268216477777955,w=0.49273094011637364,x=6.496818066105116 -color=purple,shape=circle,flag=0,i=31488,u=0.03554948121060564,v=0.4991785612452486,w=0.4994553856707923,x=5.533032269585125 -color=red,shape=square,flag=0,i=31492,u=0.25316932524554303,v=0.9328252579698911,w=0.5191884282865986,x=5.592492907689887 -color=red,shape=square,flag=0,i=31500,u=0.33269864522957815,v=0.5906155921932702,w=0.520041120948019,x=3.917181628687565 -color=blue,shape=triangle,flag=1,i=31506,u=0.7767827033953992,v=0.10636383285777307,w=0.48194182966348054,x=2.1699618582149935 -color=red,shape=circle,flag=1,i=31509,u=0.773553183388423,v=0.7332440819841319,w=0.5283481595420471,x=3.285338291587969 -color=yellow,shape=triangle,flag=1,i=31512,u=0.13634045207607548,v=0.9848515987730506,w=0.5284111256066597,x=6.486124999791548 -color=red,shape=square,flag=0,i=31529,u=0.827029555223276,v=0.27396208015093737,w=0.521147767788051,x=4.001442657993596 -color=green,shape=triangle,flag=0,i=31542,u=0.685093105738591,v=0.841175413796776,w=0.46197279904146615,x=4.198856066379299 -color=red,shape=square,flag=0,i=31545,u=0.21535666328841163,v=0.7965087605307248,w=0.5172818376380691,x=5.674780751560892 -color=red,shape=triangle,flag=0,i=31560,u=0.26717026424483004,v=0.666207719089041,w=0.49142150378785454,x=4.222843390519655 -color=blue,shape=circle,flag=0,i=31582,u=0.4380626656933765,v=0.3784071248206897,w=0.5083846792348192,x=6.660367507616556 -color=blue,shape=circle,flag=1,i=31590,u=0.9826682561493719,v=0.22447298467586185,w=0.5101864352642794,x=5.303306441693211 -color=red,shape=circle,flag=0,i=31608,u=0.7281695461225278,v=0.7127504449019734,w=0.522886415099259,x=5.28095374119536 -color=orange,shape=circle,flag=1,i=31644,u=0.37089566152670483,v=0.3587431317899764,w=0.5243279342307468,x=5.516444976320288 -color=red,shape=square,flag=1,i=31666,u=0.4393141758478778,v=0.5127837166545216,w=0.5071355880697656,x=3.3377340324740215 -color=blue,shape=circle,flag=0,i=31682,u=0.6887428002045259,v=0.13496513437879942,w=0.5039202926106429,x=3.6185745789652035 -color=yellow,shape=square,flag=1,i=31688,u=0.503319496246963,v=0.8154543708627862,w=0.5038767262466363,x=5.055344010450682 -color=red,shape=square,flag=1,i=31692,u=0.10571170419020703,v=0.12650267238699053,w=0.5115793514209701,x=4.084988330672991 -color=red,shape=triangle,flag=0,i=31706,u=0.22098230763993387,v=0.5672838112436571,w=0.4911030718909937,x=5.589453644740485 -color=blue,shape=triangle,flag=1,i=31715,u=0.3183370182824441,v=0.7996016086895069,w=0.48283196095496456,x=2.3958100747453916 -color=blue,shape=circle,flag=0,i=31722,u=0.3650983697013428,v=0.13341944683810525,w=0.5037785972222049,x=6.8124900397988055 -color=red,shape=square,flag=1,i=31749,u=0.0009893213602718554,v=0.49624776584522445,w=0.511169360409743,x=6.474948496483406 -color=yellow,shape=square,flag=1,i=31754,u=0.062237368491465106,v=0.5671098933453232,w=0.5005165044307704,x=4.544714235918196 -color=yellow,shape=square,flag=1,i=31756,u=0.3626218183080785,v=0.18705823876716987,w=0.5029280814495235,x=3.2714628470863967 -color=red,shape=circle,flag=0,i=31762,u=0.8524379787637962,v=0.7729978482703204,w=0.5125242747434275,x=5.661880995310369 -color=yellow,shape=square,flag=1,i=31763,u=0.903162259715378,v=0.4131659728496049,w=0.506974507225746,x=3.609871940324743 -color=purple,shape=square,flag=0,i=31777,u=0.6168332877427288,v=0.7205833553099292,w=0.4739679368782447,x=4.911673619751092 -color=green,shape=triangle,flag=0,i=31778,u=0.19590280469757537,v=0.9015498289893369,w=0.46553610900208986,x=5.194609391417984 -color=purple,shape=square,flag=0,i=31779,u=0.08186676316007535,v=0.26263113109305225,w=0.47359721010482025,x=6.842602989797476 -color=blue,shape=triangle,flag=0,i=31797,u=0.9174367887224559,v=0.35533358810982674,w=0.4723246924451188,x=6.156372544691018 -color=purple,shape=square,flag=0,i=31805,u=0.0005996381983701671,v=0.032544102008075226,w=0.47037566553006377,x=3.874637299268216 -color=blue,shape=square,flag=0,i=31810,u=0.2077541610621192,v=0.2596109544377776,w=0.503749542668205,x=2.313519357763424 -color=red,shape=triangle,flag=0,i=31816,u=0.23275619227052258,v=0.8159419426892464,w=0.4956078927369827,x=4.144340176089642 -color=yellow,shape=square,flag=1,i=31824,u=0.02354557000894919,v=0.29920837715434623,w=0.5109333065180163,x=3.2789882132277235 -color=red,shape=circle,flag=0,i=31852,u=0.8403796102089048,v=0.8562070039323685,w=0.5229978219868584,x=6.837703124670132 -color=red,shape=square,flag=1,i=31858,u=0.6642138997321104,v=0.38997532567208226,w=0.5034295270180834,x=5.252600907167657 -color=red,shape=triangle,flag=0,i=31864,u=0.05104705794887088,v=0.734317115046029,w=0.5084999845164628,x=3.4539759012770843 -color=red,shape=square,flag=0,i=31887,u=0.4126596385374226,v=0.7870263725239266,w=0.50427255750418,x=4.687687800797566 -color=purple,shape=circle,flag=0,i=31902,u=0.8221075588952916,v=0.4189752616214162,w=0.4983864592590349,x=4.41324965214633 -color=yellow,shape=circle,flag=1,i=31908,u=0.09700420236879748,v=0.32067446470589256,w=0.5135515943839901,x=7.780547039411862 -color=blue,shape=triangle,flag=1,i=31914,u=0.7724776592201179,v=0.48949607583578236,w=0.4715532140993242,x=4.217104729413005 -color=red,shape=square,flag=0,i=31924,u=0.33940484571730434,v=0.9744585971170209,w=0.5116798736107034,x=3.747450665383178 -color=red,shape=triangle,flag=0,i=31927,u=0.21911386857004045,v=0.5953644413456816,w=0.5054367095762375,x=4.847275004927652 -color=red,shape=triangle,flag=0,i=31936,u=0.2588727421514262,v=0.055671874326011506,w=0.5075489650989422,x=4.024506967834393 -color=red,shape=square,flag=0,i=31937,u=0.45127198494198617,v=0.21730283632927083,w=0.519996677534921,x=4.915701738835918 -color=purple,shape=triangle,flag=0,i=31943,u=0.6543595268509671,v=0.7152853419268527,w=0.5195989951680036,x=5.128138755133754 -color=blue,shape=square,flag=1,i=31946,u=0.6620260539692875,v=0.8693508955051746,w=0.4991555703514362,x=6.327221842839101 -color=yellow,shape=circle,flag=1,i=31954,u=0.21624658427387833,v=0.034722130898524495,w=0.5114356685979923,x=4.404708690578104 -color=red,shape=triangle,flag=0,i=31969,u=0.7425685366781526,v=0.397818074328401,w=0.49523049119946966,x=4.435865270981544 -color=green,shape=square,flag=0,i=31986,u=0.8877093863231819,v=0.6844471855848603,w=0.4648457624645645,x=6.935426749112351 -color=blue,shape=circle,flag=1,i=32010,u=0.5592699421679179,v=0.2286932036249878,w=0.5093229522279306,x=4.418651102065964 -color=blue,shape=triangle,flag=1,i=32055,u=0.9744028196315789,v=0.6387937214444578,w=0.4851322710547238,x=3.6747460920314197 -color=red,shape=triangle,flag=1,i=32057,u=0.0041252571189362985,v=0.5391424218838407,w=0.5133411716482529,x=6.776644055679761 -color=red,shape=triangle,flag=0,i=32073,u=0.5085780953194106,v=0.09085007059700079,w=0.5092288245379413,x=5.140647944455343 -color=red,shape=square,flag=0,i=32098,u=0.03423285764799833,v=0.5774944713960741,w=0.513077234263766,x=6.30087731506244 -color=red,shape=square,flag=0,i=32158,u=0.3877110921051712,v=0.4004256431664053,w=0.49751199493402815,x=4.034978135054424 -color=red,shape=square,flag=0,i=32169,u=0.1344437968883816,v=0.7825682593214645,w=0.4940447526141323,x=5.0953394201999656 -color=green,shape=circle,flag=1,i=32172,u=0.6675355500133372,v=0.3047046019493378,w=0.49804680236117094,x=4.429777247395564 -color=green,shape=square,flag=1,i=32173,u=0.44053078812006696,v=0.8866445026384596,w=0.47065917690012504,x=3.628797199056707 -color=red,shape=square,flag=0,i=32181,u=0.8149652435086298,v=0.802180739846241,w=0.49448691159004277,x=4.873513683897505 -color=blue,shape=square,flag=0,i=32197,u=0.7637369756880534,v=0.217820199951122,w=0.4904284873619981,x=3.602777711637847 -color=blue,shape=square,flag=0,i=32201,u=0.1424186527885838,v=0.457424737302245,w=0.4944334902375324,x=5.324203195198705 -color=blue,shape=triangle,flag=1,i=32204,u=0.5480451851777264,v=0.4781116260315582,w=0.49168376898056776,x=5.258531733354391 -color=yellow,shape=triangle,flag=1,i=32223,u=0.7776307339917085,v=0.5122875723494186,w=0.521256510567352,x=5.142866785301873 -color=red,shape=circle,flag=1,i=32228,u=0.7243578792284022,v=0.7885349366162395,w=0.4961340246820813,x=5.434908019992243 -color=red,shape=square,flag=0,i=32238,u=0.03744792426315624,v=0.7745425512761289,w=0.5216605800327686,x=3.46890547136746 -color=yellow,shape=circle,flag=0,i=32244,u=0.9408144403377761,v=0.029859810634737527,w=0.5098562359310378,x=3.675363106392737 -color=yellow,shape=triangle,flag=1,i=32245,u=0.8136901788954085,v=0.8755284272553082,w=0.5122538192380498,x=4.59068059600958 -color=blue,shape=square,flag=1,i=32264,u=0.05721313280803708,v=0.3475060435636014,w=0.49026037159564245,x=3.5678014963715454 -color=yellow,shape=circle,flag=1,i=32283,u=0.7291818747212584,v=0.3652864178443853,w=0.5102026389934516,x=5.2763314269174355 -color=red,shape=square,flag=1,i=32289,u=0.10032335582298779,v=0.8055879209733166,w=0.5309754007011206,x=4.107884465353599 -color=yellow,shape=square,flag=0,i=32293,u=0.7868494371238808,v=0.6987359627510948,w=0.5253008246713756,x=6.182785124274468 -color=yellow,shape=circle,flag=1,i=32299,u=0.8372907608514316,v=0.7522312524730911,w=0.5114980747554854,x=5.2734945742830925 -color=green,shape=triangle,flag=1,i=32300,u=0.19878286657954214,v=0.01733402077116275,w=0.45401278032540804,x=4.202165493582659 -color=red,shape=square,flag=0,i=32309,u=0.23338362638033416,v=0.35595411691358436,w=0.5283070781469115,x=4.6917501698780955 -color=red,shape=circle,flag=1,i=32331,u=0.9612663650163008,v=1.0610812102506386,w=0.4998157155415821,x=5.928187526631626 -color=red,shape=square,flag=0,i=32332,u=0.1799800420212142,v=0.5916681502254145,w=0.5216584750735137,x=6.375642148068084 -color=red,shape=square,flag=0,i=32339,u=0.605067817589507,v=0.40143764105090707,w=0.5250353859522513,x=4.5493440872246484 -color=red,shape=triangle,flag=0,i=32342,u=0.48219494244677663,v=0.4760288258882689,w=0.49558056917940285,x=5.061334946669055 -color=green,shape=square,flag=0,i=32344,u=0.47931925463972913,v=0.9719808760720149,w=0.4756384852406957,x=5.020660107159152 -color=green,shape=square,flag=0,i=32353,u=0.7070814064550497,v=0.24067515548843532,w=0.479633550845076,x=6.305768264280075 -color=red,shape=triangle,flag=0,i=32354,u=0.6000463470480698,v=0.6435697678704391,w=0.49602970977487293,x=7.100720620527883 -color=red,shape=square,flag=0,i=32365,u=0.4305544310943289,v=0.19601186774000467,w=0.5147239264198963,x=5.174082789461681 -color=red,shape=circle,flag=0,i=32381,u=0.148715951565217,v=0.06761300795991265,w=0.5087423149898872,x=5.753926182536837 -color=red,shape=circle,flag=0,i=32388,u=0.05910820023726637,v=0.10675974838732578,w=0.5077082220675109,x=3.008224853464814 -color=red,shape=square,flag=1,i=32398,u=0.021075722105496575,v=0.506201793177115,w=0.527038757353677,x=5.147460848560225 -color=red,shape=triangle,flag=0,i=32404,u=0.2846087187598718,v=0.6153307092302611,w=0.5048651599161194,x=4.37839151032885 -color=red,shape=circle,flag=1,i=32410,u=0.7355792920435406,v=0.7850551217919419,w=0.5078115837238074,x=3.264351747376816 -color=blue,shape=square,flag=1,i=32420,u=0.6015559576137279,v=0.8815103418321111,w=0.48460961082413323,x=3.638946734291146 -color=red,shape=square,flag=0,i=32423,u=0.2914080002358599,v=0.252593756086932,w=0.5184860448673824,x=4.126618428116534 -color=red,shape=square,flag=0,i=32444,u=0.3818672794857729,v=0.8176103501336636,w=0.5083125077743214,x=5.583021694785802 -color=green,shape=circle,flag=0,i=32454,u=0.04385066820236028,v=0.30964458914708637,w=0.494946082813775,x=6.348433461821028 -color=yellow,shape=circle,flag=1,i=32456,u=0.9695278060802851,v=0.876078811998003,w=0.5028186754792242,x=5.723713820559005 -color=yellow,shape=circle,flag=1,i=32457,u=0.07924092318114317,v=0.4972649107558108,w=0.5051305675339505,x=6.088499564809126 -color=red,shape=square,flag=0,i=32461,u=0.335219993270342,v=0.4440177073636694,w=0.5015435405316938,x=2.0561891537921246 -color=yellow,shape=square,flag=0,i=32462,u=0.8973529145692394,v=0.8665352070629379,w=0.5173193874373868,x=4.7939381992093955 -color=yellow,shape=circle,flag=0,i=32470,u=0.7557946901342758,v=0.7961926856419823,w=0.5085077656411156,x=6.169062428566167 -color=green,shape=square,flag=1,i=32471,u=0.5834781806368595,v=0.20528657408860163,w=0.4796995920217562,x=4.820787755000001 -color=blue,shape=triangle,flag=1,i=32491,u=0.5639389326047842,v=0.14413245062047586,w=0.47403063626635655,x=4.636433589540896 -color=purple,shape=square,flag=0,i=32496,u=0.6430224168736124,v=0.35563077150216527,w=0.4937300992729642,x=2.572575638535684 -color=yellow,shape=circle,flag=1,i=32498,u=0.4413513144817637,v=0.5068822483287729,w=0.5085973271869176,x=2.981065614677336 -color=green,shape=circle,flag=1,i=32503,u=0.04120634610433116,v=0.43901513919610846,w=0.4934139200541007,x=5.565045871657813 -color=blue,shape=triangle,flag=1,i=32504,u=0.11408661972037026,v=0.36040947632358633,w=0.47284493448601417,x=5.20584624664455 -color=red,shape=square,flag=0,i=32505,u=0.8880713128037928,v=0.16987367274053466,w=0.5064076964398891,x=4.7403114707213225 -color=red,shape=circle,flag=0,i=32523,u=0.014293547624514402,v=0.07798787875174154,w=0.486186765296906,x=5.842357414177379 -color=green,shape=triangle,flag=0,i=32534,u=0.5612345117373408,v=0.4302298430944852,w=0.4517043717301244,x=4.669697476946988 -color=orange,shape=triangle,flag=0,i=32556,u=0.10938360149604309,v=0.689869491310625,w=0.5431900459374166,x=6.468341862911658 -color=green,shape=triangle,flag=0,i=32567,u=0.8390024456403523,v=0.4450017751294524,w=0.46290717829798583,x=4.986551580250597 -color=red,shape=circle,flag=0,i=32584,u=0.36455480601916623,v=0.27319782568555084,w=0.48816597650186155,x=4.500385344325669 -color=red,shape=square,flag=0,i=32598,u=0.10250053721046726,v=0.7087364526238986,w=0.5210045166693695,x=4.643639332890903 -color=red,shape=triangle,flag=0,i=32606,u=0.6913292356787187,v=0.06967166120187973,w=0.4824837907808066,x=5.465619898155914 -color=red,shape=square,flag=0,i=32614,u=0.7747270426795929,v=0.23984074061613925,w=0.5236000839677001,x=4.6488885088208525 -color=red,shape=circle,flag=1,i=32632,u=0.9783301116733789,v=0.8922845915833825,w=0.481496073298218,x=5.283521905278108 -color=red,shape=square,flag=0,i=32639,u=0.11079274766957414,v=0.9207987973222405,w=0.5213225028042737,x=4.989071591906947 -color=red,shape=square,flag=0,i=32645,u=0.8695831833744887,v=0.7193058887103329,w=0.5221190859923294,x=5.142116340894931 -color=red,shape=circle,flag=1,i=32653,u=0.07296696400353986,v=0.11847925279677447,w=0.48314756070522863,x=4.026861982299126 -color=red,shape=square,flag=0,i=32670,u=0.04609021013675829,v=0.23587858063498013,w=0.5270475593197261,x=4.735031857298412 -color=red,shape=triangle,flag=0,i=32692,u=0.2584680516691501,v=0.40869061970140297,w=0.48716175022993646,x=6.369732083882231 -color=red,shape=triangle,flag=0,i=32708,u=0.06202640106795365,v=0.5455881697620651,w=0.49321189803590004,x=6.194436991128733 -color=red,shape=circle,flag=0,i=32709,u=0.829762112565778,v=0.9152054900746871,w=0.47820158721931305,x=5.546651140728074 -color=red,shape=circle,flag=0,i=32725,u=0.8593655778622782,v=0.930922698018613,w=0.4854880522402113,x=3.7606042959751593 -color=red,shape=square,flag=0,i=32736,u=0.5605287463932519,v=0.13416454976966774,w=0.5317901654025541,x=4.4131740756012094 -color=blue,shape=circle,flag=1,i=32744,u=0.3275951864212775,v=0.8375232619451524,w=0.49105284245042846,x=6.2528523638112 -color=red,shape=triangle,flag=0,i=32751,u=0.42355159046053836,v=0.13574632156384858,w=0.4947756144370737,x=6.80136136049152 -color=blue,shape=circle,flag=1,i=32759,u=0.920443573748635,v=0.05732739801145137,w=0.4887044665223418,x=6.151365241637104 -color=red,shape=circle,flag=0,i=32760,u=0.12605861345370017,v=0.1330606729262756,w=0.482834265404661,x=5.942869189338023 -color=red,shape=square,flag=0,i=32785,u=0.4496305526517207,v=0.8694052470439929,w=0.5305896042927005,x=6.13742498281885 -color=blue,shape=circle,flag=0,i=32797,u=0.7283349448900478,v=0.8782206753734855,w=0.47801707721757003,x=6.113102854628842 -color=red,shape=square,flag=1,i=32808,u=0.11877132627548537,v=0.5562890622969119,w=0.5254728874960856,x=3.5607861390070803 -color=red,shape=square,flag=1,i=32810,u=0.18638017786781336,v=0.15147107506841828,w=0.518594388590605,x=5.776604135254078 -color=red,shape=triangle,flag=0,i=32823,u=0.019546512636961277,v=0.7297009882606014,w=0.5020076643313628,x=4.21173761178851 -color=red,shape=circle,flag=0,i=32850,u=0.08561446532633354,v=0.09718124452985552,w=0.5112306260223481,x=5.611993204902898 -color=red,shape=circle,flag=1,i=32858,u=0.022743711990624527,v=-0.07431716804508803,w=0.510613417409727,x=6.658890632436983 -color=purple,shape=triangle,flag=0,i=32868,u=0.03580753056628516,v=0.9144736089299262,w=0.5220774021640889,x=5.273346771555825 -color=yellow,shape=square,flag=1,i=32871,u=0.6016128178556441,v=0.6731243644083288,w=0.5176526479112705,x=5.243038233400318 -color=red,shape=square,flag=0,i=32878,u=0.8908386918234684,v=0.2521529089942207,w=0.5229081191254045,x=2.6822998910699027 -color=purple,shape=circle,flag=0,i=32893,u=0.9511630714573232,v=0.31720116651082364,w=0.5162633135890542,x=4.703289829994978 -color=blue,shape=square,flag=1,i=32927,u=0.061298772069913854,v=0.8961443790039122,w=0.4721092867611639,x=5.550239755664254 -color=red,shape=circle,flag=0,i=32954,u=0.4382790503346733,v=0.5280133474272716,w=0.5030571663102756,x=7.407521664233937 -color=red,shape=circle,flag=0,i=32969,u=0.09086048446175976,v=0.17492728926937143,w=0.5005242760486518,x=3.8368044162916224 -color=green,shape=triangle,flag=0,i=32979,u=0.9565877633142008,v=0.6930816314512078,w=0.4816087030171712,x=4.614660534339733 -color=red,shape=triangle,flag=1,i=32995,u=0.0892500458749641,v=0.6616946215862346,w=0.5204257400970129,x=4.26005110843244 -color=red,shape=square,flag=1,i=32997,u=0.9334755525105627,v=0.5056734437982556,w=0.5215779512398034,x=5.528773143662652 -color=purple,shape=circle,flag=0,i=33000,u=0.1782957982498975,v=0.8780901538936552,w=0.5143171654754598,x=5.8768198236300755 -color=purple,shape=triangle,flag=0,i=33009,u=0.8663737140507328,v=0.783807814279407,w=0.5272262140832616,x=5.536663010743935 -color=yellow,shape=square,flag=0,i=33030,u=0.4651152927513983,v=0.3602632945931926,w=0.5331143301453313,x=7.6345432040879295 -color=red,shape=square,flag=1,i=33036,u=0.03470841178099904,v=0.6341489915183246,w=0.5191651416832344,x=5.516463901783101 -color=red,shape=triangle,flag=0,i=33052,u=0.2922274997969324,v=0.9846500142491651,w=0.5107062704090012,x=3.9360953088487793 -color=red,shape=triangle,flag=1,i=33056,u=0.7850283001716426,v=0.7599520866476104,w=0.5124377690192731,x=5.041794869223895 -color=red,shape=triangle,flag=1,i=33060,u=0.7852468915431168,v=0.7016513057112611,w=0.5074279656298706,x=4.045906807305639 -color=red,shape=square,flag=1,i=33073,u=0.30132899917604317,v=0.18533002968899426,w=0.5146883212733246,x=6.2797647612309815 -color=red,shape=circle,flag=0,i=33092,u=0.2905604215817402,v=0.26682598973926164,w=0.5201868694731542,x=3.792800013060998 -color=purple,shape=circle,flag=0,i=33134,u=0.15618552072155845,v=0.06919621582317592,w=0.5125020002065729,x=5.212852970245521 -color=red,shape=square,flag=0,i=33140,u=0.6585081332310359,v=0.9667074053765864,w=0.5163555554335203,x=6.098770797963791 -color=purple,shape=square,flag=0,i=33157,u=0.46212890188485545,v=0.625137805129282,w=0.5053429697218541,x=4.29239939967925 -color=blue,shape=square,flag=0,i=33160,u=0.7898244199380381,v=0.9188529669419712,w=0.46346768947896877,x=5.8308112695063015 -color=purple,shape=circle,flag=0,i=33179,u=0.5438418523715753,v=0.3472092475117562,w=0.508455522738372,x=6.370039900273446 -color=red,shape=circle,flag=1,i=33182,u=0.9367413023051921,v=0.9356999770483273,w=0.5326234780762712,x=5.417480842508904 -color=red,shape=circle,flag=1,i=33184,u=0.874599632720004,v=0.9510434905248792,w=0.5334452736644045,x=1.978455829594094 -color=purple,shape=square,flag=0,i=33185,u=0.7760270353900044,v=0.7661734308434004,w=0.5075931386160416,x=7.142709929123115 -color=purple,shape=triangle,flag=0,i=33191,u=0.4106078619000615,v=0.32656593840243553,w=0.5153208494716195,x=3.9131538166197255 -color=red,shape=square,flag=1,i=33216,u=0.6493394196009691,v=0.49000510937353015,w=0.5093941038753869,x=3.2861871044312365 -color=red,shape=circle,flag=1,i=33222,u=0.26463638320350424,v=0.2236520811055912,w=0.5317671651383756,x=6.9064585829203935 -color=red,shape=square,flag=0,i=33225,u=0.2810176899713178,v=0.9682968139514915,w=0.5103265085201572,x=3.538667671900324 -color=red,shape=triangle,flag=1,i=33230,u=0.9092840920930229,v=0.932861340491937,w=0.5168416968265344,x=5.938329643718402 -color=red,shape=circle,flag=0,i=33235,u=0.7605722298145382,v=0.6638542659368751,w=0.5310484146416167,x=3.732441352111149 -color=blue,shape=triangle,flag=1,i=33239,u=0.0531960129300687,v=0.527087430298157,w=0.4952531521869843,x=6.643823645645008 -color=purple,shape=square,flag=0,i=33255,u=0.7618637253516649,v=0.3435316755984419,w=0.49959534661166877,x=5.534841496457631 -color=yellow,shape=square,flag=1,i=33263,u=0.14179071616906058,v=0.8161388617100427,w=0.5228064088293859,x=4.3496314869206785 -color=green,shape=triangle,flag=0,i=33265,u=0.11232896330952147,v=0.9598717777536011,w=0.48561516946527766,x=4.959867117970179 -color=yellow,shape=square,flag=1,i=33269,u=0.631256517492463,v=0.8483710019686178,w=0.518930047707305,x=5.359029599173894 -color=red,shape=square,flag=0,i=33308,u=0.7955270591347272,v=0.22842133208530724,w=0.5092678013044601,x=5.0181528760107525 -color=green,shape=square,flag=0,i=33316,u=0.1934525173207342,v=0.024859410552620087,w=0.4636646219951484,x=3.4364646805265813 -color=blue,shape=square,flag=1,i=33323,u=0.6328985796809088,v=0.5371547030694789,w=0.47275191454349197,x=6.2070560605148755 -color=blue,shape=circle,flag=0,i=33324,u=0.4355433014907806,v=0.14348702134236835,w=0.48347146016713394,x=4.583848526395438 -color=red,shape=square,flag=0,i=33330,u=0.9547506060421391,v=0.15644715185217528,w=0.5074151029513085,x=4.988210476681349 -color=red,shape=circle,flag=0,i=33339,u=0.395951382030177,v=0.4690457786021151,w=0.5263989691998087,x=3.830936051131918 -color=yellow,shape=triangle,flag=1,i=33384,u=0.937053069014554,v=0.41421991895810684,w=0.5215462722781082,x=4.71658156473542 -color=red,shape=triangle,flag=1,i=33387,u=0.11042373483238732,v=0.2196353856999005,w=0.507860582766067,x=4.909263467330887 -color=red,shape=circle,flag=0,i=33392,u=0.3584193316943274,v=0.43342800755801575,w=0.5366763043446198,x=3.7127400894717844 -color=red,shape=square,flag=0,i=33399,u=0.8407975280050823,v=0.550262211104605,w=0.5144722922275274,x=3.1307343891515074 -color=red,shape=square,flag=0,i=33409,u=0.04837320004778167,v=0.9453096261457511,w=0.5226299334766344,x=4.145408001962476 -color=red,shape=square,flag=0,i=33430,u=0.7557420951042636,v=0.6274011228438122,w=0.5190456129482628,x=5.710222217579241 -color=yellow,shape=square,flag=1,i=33434,u=0.5925586618016372,v=0.8642705300196425,w=0.5075400894634231,x=4.376140424985202 -color=green,shape=triangle,flag=0,i=33440,u=0.128734666956844,v=0.4935100822626092,w=0.49447441731960207,x=4.017749836578955 -color=blue,shape=triangle,flag=1,i=33463,u=0.8327195325511809,v=0.5687789044576186,w=0.4812500380046313,x=6.715792283469528 -color=green,shape=circle,flag=0,i=33465,u=0.7573090091397728,v=0.14217508067307683,w=0.46049494689890613,x=3.216325379030023 -color=purple,shape=square,flag=0,i=33472,u=0.8053104216939593,v=0.5649751739490793,w=0.5009590951470976,x=4.731104486410476 -color=blue,shape=square,flag=1,i=33485,u=0.33307147725126396,v=0.8578623991579769,w=0.4766061787566923,x=2.673292048720166 -color=red,shape=square,flag=0,i=33488,u=0.0852817108198839,v=0.35831011255889866,w=0.5115311108701357,x=4.5710153259783075 -color=red,shape=triangle,flag=0,i=33502,u=0.9453784991134617,v=0.5964991605997636,w=0.5256741456919752,x=5.0968835655930205 -color=yellow,shape=square,flag=1,i=33510,u=0.476237863271449,v=0.2299353975160232,w=0.5019132696785426,x=4.546785402720325 -color=green,shape=triangle,flag=0,i=33519,u=0.7861768808447998,v=0.501560557142545,w=0.492695619424411,x=4.18826723005946 -color=yellow,shape=square,flag=1,i=33576,u=0.3098376725521097,v=0.8525628505287842,w=0.49774122460981685,x=4.494754378604669 -color=orange,shape=square,flag=1,i=33581,u=0.8466575606120571,v=0.9824458415307831,w=0.48420912272421157,x=4.304261218143297 -color=red,shape=triangle,flag=1,i=33585,u=0.940590719030772,v=0.5102080533960888,w=0.49762936689368364,x=5.95773795189861 -color=red,shape=triangle,flag=0,i=33599,u=0.11126641426591499,v=0.7407708894185547,w=0.491885275344142,x=6.697885922365963 -color=green,shape=triangle,flag=1,i=33624,u=0.8998354713692119,v=0.22574442291570274,w=0.5022537733586984,x=6.8576295941960845 -color=purple,shape=square,flag=0,i=33625,u=0.5344328737677263,v=0.7475693042065513,w=0.5003826610245873,x=3.989829588981453 -color=red,shape=triangle,flag=0,i=33630,u=0.5782696616005765,v=0.9760203785705569,w=0.4912191555946164,x=3.7160279478181315 -color=red,shape=square,flag=0,i=33655,u=0.4958670139651731,v=0.6737689627330573,w=0.5090254268071853,x=3.2132077010541775 -color=green,shape=square,flag=1,i=33697,u=0.7322935912265445,v=0.07626071869309903,w=0.47290935393202693,x=5.914213346338923 -color=red,shape=circle,flag=0,i=33718,u=0.00991552445414945,v=0.02127099216301769,w=0.5016001757077556,x=6.001019008382052 -color=blue,shape=triangle,flag=1,i=33719,u=0.5137958517836968,v=0.06885068919055182,w=0.49038853348429884,x=6.69133698373285 -color=purple,shape=square,flag=0,i=33754,u=0.9561599641074756,v=0.5501048141712281,w=0.4993870720207535,x=5.045089062446263 -color=purple,shape=square,flag=0,i=33772,u=0.7370742113118581,v=0.3730353916810043,w=0.5019065732030719,x=3.711468756834424 -color=purple,shape=square,flag=0,i=33773,u=0.09447098819853716,v=0.790287428273776,w=0.49911439564292837,x=6.192472033553568 -color=red,shape=circle,flag=0,i=33777,u=0.8847292101053823,v=0.806570693908014,w=0.5109699807126428,x=5.226442591485785 -color=purple,shape=circle,flag=1,i=33778,u=0.5350822848202962,v=0.2245304196200576,w=0.506154683713476,x=6.126712791034255 -color=red,shape=square,flag=1,i=33781,u=0.48994037628314646,v=0.25674747317596747,w=0.501410317035248,x=4.286095475400842 -color=blue,shape=square,flag=1,i=33789,u=0.0504095165754711,v=0.01065457219964927,w=0.46672206122909715,x=4.1379560497738 -color=red,shape=square,flag=0,i=33804,u=0.6835496616681078,v=0.517987895942444,w=0.4951210309275078,x=5.478495130930987 -color=yellow,shape=square,flag=1,i=33825,u=0.30159369435658434,v=0.814191094573637,w=0.4818169513038904,x=4.9468734253592155 -color=yellow,shape=triangle,flag=1,i=33832,u=0.44732346961311575,v=0.07696682381034459,w=0.5022999478095949,x=6.116966828681897 -color=green,shape=triangle,flag=0,i=33850,u=0.9632529800944208,v=0.14027292499084576,w=0.49405564243040323,x=3.6760398361651596 -color=red,shape=square,flag=1,i=33862,u=0.5332902509478825,v=0.8962620318569003,w=0.49812318796913635,x=6.1413247609702575 -color=red,shape=square,flag=1,i=33870,u=0.048764699218243224,v=0.00624750884993408,w=0.5054941592025307,x=7.2525370892298255 -color=orange,shape=square,flag=1,i=33873,u=0.8689076212131088,v=0.751516956021458,w=0.48262072178033993,x=3.5114467753569034 -color=purple,shape=triangle,flag=0,i=33910,u=0.2535445131820081,v=0.6609382011095314,w=0.503900635875241,x=5.8161117638499436 -color=yellow,shape=triangle,flag=0,i=33926,u=0.11435983140396122,v=0.6677516106391923,w=0.49421446223014703,x=5.948342155537765 -color=purple,shape=triangle,flag=0,i=33930,u=0.6919528562978747,v=0.42388857969831006,w=0.502527103193109,x=4.151183644935942 -color=red,shape=triangle,flag=1,i=33937,u=0.5279930616494033,v=0.6984021103897404,w=0.49975889556130276,x=6.054378852177866 -color=red,shape=square,flag=0,i=33942,u=0.06132506684318162,v=0.3466748219296514,w=0.5063137864461251,x=3.3900907995206118 -color=red,shape=square,flag=1,i=33947,u=0.7182598065996636,v=0.7680358019223692,w=0.502450819468748,x=3.378489779117633 -color=purple,shape=triangle,flag=0,i=33957,u=0.601550340430716,v=0.3100317848575521,w=0.49661749460458937,x=5.991108325027587 -color=red,shape=circle,flag=0,i=33968,u=0.014949678534078692,v=0.04279839083888062,w=0.49856663302714954,x=5.52360697936341 -color=red,shape=triangle,flag=0,i=33976,u=0.2672791558404415,v=0.5597226424873892,w=0.49810445512555035,x=3.3653932619685194 -color=red,shape=triangle,flag=0,i=33995,u=0.3990942754944298,v=0.45458509707451755,w=0.495453707149231,x=4.4974563970651475 -color=yellow,shape=triangle,flag=0,i=34013,u=0.1452264823632976,v=0.6635087498710336,w=0.4966461006453434,x=3.4997941458263355 -color=blue,shape=circle,flag=0,i=34028,u=0.05045555125321999,v=0.46714554109842454,w=0.48476865377311656,x=4.441997101725152 -color=purple,shape=square,flag=0,i=34037,u=0.34037448933266845,v=0.816109018563805,w=0.49709454937519393,x=6.450892352191203 -color=purple,shape=triangle,flag=1,i=34041,u=0.7910490665453144,v=0.5182527125227822,w=0.49506616730800096,x=5.343990675290571 -color=red,shape=circle,flag=0,i=34051,u=0.7556445666799146,v=0.6980041368463658,w=0.4982567322353604,x=7.259476549187287 -color=green,shape=triangle,flag=0,i=34059,u=0.532191386643586,v=0.8938163904668864,w=0.5021961708195306,x=3.483504218142245 -color=red,shape=square,flag=0,i=34068,u=0.8552157555152661,v=0.7695094996534865,w=0.5001313006576039,x=4.091816379282249 -color=red,shape=square,flag=0,i=34090,u=0.5189408663603009,v=0.4804978218013839,w=0.5054123840694835,x=6.821520734374373 -color=green,shape=square,flag=1,i=34092,u=0.8631077859365033,v=0.753604971778308,w=0.4896272438099371,x=6.10654553074706 -color=yellow,shape=square,flag=1,i=34098,u=0.31885193374206355,v=0.4097407686226072,w=0.49079824415735407,x=4.948081409291022 -color=purple,shape=triangle,flag=0,i=34102,u=0.10443930837746984,v=0.8925107022331715,w=0.5037227782146368,x=5.676617131559723 -color=blue,shape=circle,flag=1,i=34118,u=0.3983487912966074,v=0.6476964705855391,w=0.4840195339523367,x=4.90919899563209 -color=red,shape=square,flag=1,i=34136,u=0.6109591847553382,v=0.8324457681899656,w=0.5175179059509419,x=5.867586887031312 -color=blue,shape=triangle,flag=0,i=34140,u=0.7306166740899213,v=0.3443451697713036,w=0.48756257408856274,x=3.0108610334021755 -color=red,shape=circle,flag=0,i=34141,u=0.39641500695082477,v=0.34055260239888746,w=0.48883418429693526,x=4.186706699937368 -color=yellow,shape=triangle,flag=1,i=34146,u=0.21435960233958273,v=0.16803444133651257,w=0.4838956850780505,x=4.889177224954879 -color=purple,shape=circle,flag=0,i=34154,u=0.4674506226952587,v=0.3245070224091263,w=0.5031079781804169,x=4.115207982087914 -color=red,shape=circle,flag=1,i=34160,u=0.3060607345409456,v=0.3917873076953941,w=0.4819574328206247,x=5.6236685547090985 -color=red,shape=circle,flag=1,i=34169,u=0.4881481202474147,v=0.3922065030797688,w=0.473840586325123,x=6.656590682792996 -color=orange,shape=square,flag=1,i=34176,u=0.6674874615593233,v=0.024719925407742815,w=0.4843753664889284,x=7.464458307779386 -color=red,shape=square,flag=0,i=34185,u=0.7148651055989332,v=0.9998235495379489,w=0.5040868761210272,x=5.532235888558179 -color=green,shape=circle,flag=0,i=34190,u=0.7280427472907148,v=0.4567579911934213,w=0.45854535776078426,x=5.21813543103504 -color=yellow,shape=triangle,flag=1,i=34202,u=0.7331384343207656,v=0.4332784698955704,w=0.4903244539747814,x=3.5884950102750444 -color=red,shape=triangle,flag=0,i=34216,u=0.06472286549031248,v=0.5774469094535141,w=0.5263138982557002,x=4.310565034467615 -color=purple,shape=triangle,flag=0,i=34219,u=0.1432972365093521,v=0.301439118277821,w=0.49417800803008266,x=4.9160695802641 -color=red,shape=circle,flag=1,i=34237,u=0.9761788543112698,v=0.8778071736573624,w=0.4783976963137299,x=5.523065256801323 -color=red,shape=circle,flag=0,i=34241,u=0.6619908107313948,v=0.61624698819128,w=0.48255339917169754,x=6.627922490385643 -color=red,shape=square,flag=1,i=34249,u=0.4812995304756551,v=0.22961544612252704,w=0.5064937621560192,x=5.703153165167358 -color=red,shape=square,flag=1,i=34251,u=0.820249401815597,v=0.9323267701725214,w=0.506319707203613,x=6.37611441097098 -color=yellow,shape=square,flag=1,i=34261,u=0.3785806106206845,v=0.4162589031627225,w=0.4842083643320112,x=4.270000447679108 -color=red,shape=square,flag=0,i=34269,u=0.8718026394051107,v=0.0470259567904977,w=0.5143702663858574,x=6.540272804662254 -color=red,shape=circle,flag=0,i=34279,u=0.4059290930430718,v=0.48421466055444823,w=0.48325725681917764,x=6.513169741585334 -color=red,shape=square,flag=0,i=34305,u=0.27563800803707195,v=0.011433321043400557,w=0.5214486399000018,x=5.59630435120645 -color=yellow,shape=triangle,flag=0,i=34333,u=0.8946643080186434,v=0.6776637820177036,w=0.48954653582121926,x=7.350105343920716 -color=red,shape=square,flag=1,i=34368,u=0.7732638239554772,v=0.14525452477212875,w=0.5345337694823336,x=5.510414436862223 -color=blue,shape=square,flag=1,i=34370,u=0.4767559856843069,v=0.22973611722272336,w=0.49681109652176114,x=5.438582601401239 -color=red,shape=circle,flag=0,i=34376,u=0.7577613993026762,v=0.6585598837700077,w=0.4726208497533086,x=3.964848170673694 -color=yellow,shape=circle,flag=1,i=34397,u=0.317513693975086,v=0.6546923165741305,w=0.4816788980290248,x=6.571910646654488 -color=red,shape=circle,flag=1,i=34403,u=0.21941503085911906,v=0.18869929431950108,w=0.48859306821800486,x=5.842740479412579 -color=blue,shape=triangle,flag=1,i=34409,u=0.8469617797667944,v=0.16958776048164514,w=0.4793445672488068,x=4.773700655856586 -color=yellow,shape=circle,flag=1,i=34430,u=0.6457931187435664,v=0.42841099095573854,w=0.4799835219408184,x=5.9649795373803265 -color=blue,shape=square,flag=1,i=34431,u=0.8543938502155792,v=0.34692928235956055,w=0.502790984966972,x=5.437362331626982 -color=yellow,shape=triangle,flag=1,i=34476,u=0.5967973077120329,v=0.5930523139610333,w=0.509088854020594,x=3.0432641922775545 -color=red,shape=square,flag=1,i=34507,u=0.27936620925472266,v=0.4866543680579324,w=0.5156987596344246,x=6.9797896614208526 -color=red,shape=triangle,flag=1,i=34522,u=0.2608818745635353,v=0.3364049381210744,w=0.5233605199609624,x=4.940278775742981 -color=red,shape=square,flag=0,i=34523,u=0.22225796470244064,v=0.1332582605679279,w=0.5205748439676586,x=6.309789328434795 -color=blue,shape=square,flag=1,i=34566,u=0.04107424026323203,v=0.11983843877519573,w=0.5078371311459742,x=3.7105058188189854 -color=red,shape=triangle,flag=1,i=34567,u=0.7215146239803284,v=0.041272310151199476,w=0.5360961605003184,x=7.258734465807913 -color=red,shape=triangle,flag=0,i=34570,u=0.7647156151988541,v=0.8448194374182678,w=0.5397274236176406,x=5.359253363235088 -color=yellow,shape=circle,flag=0,i=34576,u=0.6530777146889488,v=0.7180653265277144,w=0.4859492262000971,x=3.855290951277588 -color=red,shape=square,flag=0,i=34581,u=0.7470469353368995,v=0.9413484225599422,w=0.5232076227576647,x=6.132329217012842 -color=green,shape=circle,flag=0,i=34589,u=0.6862005044395765,v=0.7819001574269004,w=0.4626182538011916,x=5.0849088715532105 -color=yellow,shape=triangle,flag=1,i=34601,u=0.42386517751772645,v=0.5877864631161966,w=0.505340184155104,x=3.2936319015205733 -color=red,shape=circle,flag=1,i=34608,u=0.10600943961119602,v=0.1331812284291659,w=0.48832218314379305,x=5.624601352964853 -color=green,shape=square,flag=0,i=34612,u=0.8035669458432357,v=0.15886599247592115,w=0.4815248255178455,x=5.372758381787815 -color=yellow,shape=circle,flag=1,i=34613,u=0.8806152218712957,v=0.029301932184296442,w=0.48573334959018694,x=4.570677922283701 -color=yellow,shape=square,flag=1,i=34626,u=0.13059085790395775,v=0.4238075454419431,w=0.4836004295976302,x=4.338146853924343 -color=purple,shape=circle,flag=0,i=34627,u=0.5900033669151352,v=0.699862983143041,w=0.5052280721198084,x=5.129133579277615 -color=red,shape=triangle,flag=0,i=34638,u=0.3209495315365807,v=0.6480613429075162,w=0.5376903889704104,x=4.1118838396995985 -color=purple,shape=triangle,flag=0,i=34666,u=0.04626449659658516,v=0.48307726625660397,w=0.49179329156097723,x=5.42509346790123 -color=purple,shape=triangle,flag=0,i=34671,u=0.7964359374317203,v=0.747560253900851,w=0.49520275786403684,x=4.848034152189103 -color=blue,shape=square,flag=0,i=34685,u=0.21451581925791252,v=0.893062049855773,w=0.5086448009960358,x=4.579116160585294 -color=red,shape=square,flag=0,i=34695,u=0.7088033444564572,v=0.5732100097135284,w=0.4923197385560654,x=3.4356147648010213 -color=yellow,shape=triangle,flag=1,i=34710,u=0.1737198440162111,v=0.22554513366711282,w=0.509951351802705,x=6.030722829976561 -color=yellow,shape=square,flag=1,i=34713,u=0.49982766585059957,v=0.3567875401759866,w=0.4899891118211901,x=5.497034004272597 -color=red,shape=circle,flag=0,i=34728,u=0.6556410666827029,v=0.7435466392991773,w=0.4885520392718432,x=3.1734941717153027 -color=purple,shape=triangle,flag=0,i=34740,u=0.6889750347172782,v=0.7396549894769746,w=0.4984921030129261,x=5.115578423799099 -color=yellow,shape=triangle,flag=1,i=34752,u=0.6164599768416416,v=0.5750169347854348,w=0.50450342241927,x=5.820965819877017 -color=red,shape=triangle,flag=1,i=34780,u=0.3091558671767515,v=0.5618734327661591,w=0.5604418880514627,x=3.6930811706977047 -color=red,shape=square,flag=0,i=34812,u=0.16887935202525606,v=0.4826833420664698,w=0.47990070043902017,x=5.208871401980609 -color=red,shape=square,flag=0,i=34816,u=0.016924065380366393,v=0.49940285977919563,w=0.48149141539927376,x=4.876700004560515 -color=red,shape=square,flag=1,i=34825,u=0.16586991590177458,v=0.9072323489467463,w=0.48305469099259585,x=4.817191956789259 -color=blue,shape=circle,flag=1,i=34833,u=0.7879939112129746,v=0.6417667094234194,w=0.48251969023459085,x=5.853176007679122 -color=red,shape=square,flag=0,i=34851,u=0.8363412245763133,v=0.7168488825346744,w=0.48637705536349857,x=4.6482727901073035 -color=blue,shape=triangle,flag=0,i=34863,u=0.5996733651406758,v=0.12079044043743303,w=0.4762187048052572,x=5.072846598598342 -color=yellow,shape=triangle,flag=1,i=34890,u=0.22220441627360665,v=0.0024720066691538145,w=0.5084801358731889,x=4.285505456496424 -color=red,shape=circle,flag=1,i=34892,u=0.017067035996868873,v=-0.010872275596614411,w=0.5009184047671624,x=5.594557159864827 -color=blue,shape=circle,flag=1,i=34904,u=0.6475103888218945,v=0.8358986744405981,w=0.4901718393276379,x=4.936780792820824 -color=purple,shape=square,flag=0,i=34909,u=0.21548416630048384,v=0.7168881304141844,w=0.4847670958656207,x=6.03470578686936 -color=red,shape=square,flag=0,i=34928,u=0.33826822157857617,v=0.24337084909399997,w=0.48795962184069913,x=5.860006625985281 -color=green,shape=square,flag=0,i=34933,u=0.5282606201586797,v=0.13326302500684695,w=0.4969544006632784,x=4.636325315887119 -color=yellow,shape=triangle,flag=1,i=34936,u=0.5977030363335227,v=0.3710969354393244,w=0.5134264596280065,x=2.898301446113752 -color=red,shape=triangle,flag=1,i=34942,u=0.7096094547277375,v=0.23279768477872154,w=0.5519681198866045,x=3.7005620130868944 -color=blue,shape=circle,flag=0,i=34946,u=0.7150669790785441,v=0.1505620611716597,w=0.4937139372147337,x=3.5124403430665354 -color=red,shape=square,flag=0,i=34950,u=0.9954654645739696,v=0.9979895387752443,w=0.48489049569183607,x=4.125063551810273 -color=red,shape=circle,flag=0,i=34951,u=0.9336534027163426,v=0.979886133911313,w=0.509769355264013,x=3.2463135803494603 -color=red,shape=triangle,flag=1,i=34967,u=0.6144961282101254,v=0.5919567607401033,w=0.5547614845912089,x=5.133940701264204 -color=purple,shape=triangle,flag=0,i=34979,u=0.7488960031617149,v=0.7169027469026279,w=0.4971962787920276,x=6.563317492327125 -color=red,shape=triangle,flag=1,i=34998,u=0.2693593786685329,v=0.8722544148301712,w=0.5486259251165017,x=5.6337722270622095 -color=red,shape=square,flag=0,i=35005,u=0.7034975533828274,v=0.8550829122275493,w=0.49809808081819124,x=3.7301181595835478 -color=red,shape=square,flag=1,i=35021,u=0.9879862569942768,v=0.9930386644519742,w=0.501898815665082,x=3.7187441082345303 -color=red,shape=circle,flag=1,i=35025,u=0.30488500886194114,v=0.20975391569347487,w=0.5014465035451617,x=4.270505116858137 -color=red,shape=triangle,flag=1,i=35031,u=0.8623052609548261,v=0.29012940374779694,w=0.5570281973151101,x=4.643179994283906 -color=red,shape=square,flag=0,i=35047,u=0.9655872321295176,v=0.2827679599658268,w=0.4967040448943348,x=4.663001085848208 -color=red,shape=triangle,flag=0,i=35051,u=0.6567955755291046,v=0.814195441949847,w=0.5503388695574147,x=5.990816849318608 -color=red,shape=square,flag=1,i=35059,u=0.36768548008275825,v=0.44440292324547337,w=0.4896219263281178,x=5.845965036568631 -color=red,shape=square,flag=0,i=35068,u=0.655736294735662,v=0.4508986039388483,w=0.4890681706036116,x=3.8009093460037895 -color=blue,shape=circle,flag=0,i=35072,u=0.44480284265145986,v=0.39821075947105034,w=0.4932134947430758,x=5.519185245571755 -color=green,shape=square,flag=0,i=35075,u=0.24024543656366526,v=0.6589010388292955,w=0.498227805505063,x=4.469746225531193 -color=red,shape=circle,flag=0,i=35087,u=0.38223948665874974,v=0.3400594344005033,w=0.4954786987998591,x=4.690808274663953 -color=red,shape=square,flag=1,i=35091,u=0.27479080189356064,v=0.7431595817085408,w=0.5055568803511261,x=5.945629748823969 -color=red,shape=triangle,flag=0,i=35093,u=0.9364565101134221,v=0.7605155975636313,w=0.5484947131859994,x=8.837284567094477 -color=yellow,shape=square,flag=1,i=35094,u=0.7547643969215461,v=0.9360498110969584,w=0.47826146568795513,x=6.5809845192487515 -color=yellow,shape=square,flag=1,i=35097,u=0.3061678382784907,v=0.35531037935800125,w=0.4798559275663495,x=6.188062952289637 -color=green,shape=square,flag=0,i=35104,u=0.6975462310121865,v=0.9121585541626753,w=0.5026444540103487,x=4.717891933001945 -color=blue,shape=triangle,flag=1,i=35105,u=0.8349796707463456,v=0.3620401657288581,w=0.48516381462957286,x=5.700140229447996 -color=blue,shape=circle,flag=1,i=35120,u=0.27764955621903553,v=0.2561302057739422,w=0.49608993723368133,x=5.780915824648228 -color=red,shape=square,flag=0,i=35130,u=0.45891455304048,v=0.22216580886164294,w=0.49618747027284893,x=4.444035957978259 -color=red,shape=square,flag=1,i=35137,u=0.257354992842448,v=0.6173552745514805,w=0.4921628248843043,x=5.933105110161988 -color=blue,shape=square,flag=0,i=35138,u=0.7705642362236201,v=0.3517590301253988,w=0.5013155679738115,x=4.043694758548754 -color=yellow,shape=triangle,flag=1,i=35148,u=0.7762653468986148,v=0.40651535517352677,w=0.5234622308968215,x=5.903222111483259 -color=red,shape=triangle,flag=0,i=35174,u=0.9183232167879394,v=0.2148677217517545,w=0.5601450263351141,x=3.38974840528139 -color=green,shape=circle,flag=0,i=35200,u=0.23089445532810493,v=0.8577953992016389,w=0.46015046569051077,x=3.1613221552960744 -color=red,shape=triangle,flag=0,i=35211,u=0.3705037168157047,v=0.885810166555292,w=0.5522418089539656,x=2.897925453018292 -color=purple,shape=triangle,flag=0,i=35219,u=0.9725001132283482,v=0.13277639935330288,w=0.487747046641999,x=2.2015620155468665 -color=red,shape=triangle,flag=0,i=35223,u=0.7040324213278444,v=0.8921678841206723,w=0.546727222145781,x=7.103099015035235 -color=blue,shape=circle,flag=1,i=35231,u=0.996123815251446,v=0.6352617109220584,w=0.5014828022543371,x=5.352406799116789 -color=blue,shape=square,flag=0,i=35251,u=0.5110585227045429,v=0.4027004366585739,w=0.5051066189703028,x=3.2446455260250744 -color=red,shape=square,flag=0,i=35258,u=0.9389096383301606,v=0.3673634766381102,w=0.458035191864455,x=6.511817427595346 -color=green,shape=triangle,flag=0,i=35262,u=0.7553734595769059,v=0.7395089724587098,w=0.5171563143940545,x=5.233390079591427 -color=red,shape=square,flag=0,i=35263,u=0.5295481090921785,v=0.1808946419744767,w=0.45629723390052845,x=6.634876630177293 -color=yellow,shape=square,flag=1,i=35265,u=0.15751361753859483,v=0.9747516389136786,w=0.4867899697485034,x=4.474685379889176 -color=yellow,shape=square,flag=1,i=35268,u=0.16988476612564363,v=0.18747064858546736,w=0.4902998496021098,x=4.570701388995132 -color=red,shape=circle,flag=1,i=35269,u=0.9696382540867533,v=1.013897094549336,w=0.5036081654433147,x=5.741380525592202 -color=blue,shape=triangle,flag=1,i=35272,u=0.8734980610079883,v=0.7685454483649139,w=0.4771442252401473,x=4.408545021637006 -color=green,shape=square,flag=0,i=35273,u=0.18196645736648154,v=0.27177407753971494,w=0.5057376136819023,x=4.937007914202822 -color=orange,shape=triangle,flag=0,i=35286,u=0.17722959525105375,v=0.12637391729931358,w=0.5124620404892575,x=5.445145459864347 -color=green,shape=triangle,flag=0,i=35297,u=0.12326812808571719,v=0.3968028504235963,w=0.5167279077327283,x=3.1556492835137235 -color=red,shape=circle,flag=1,i=35320,u=0.19404162328155494,v=0.2593099200554975,w=0.49693745457872984,x=4.399716250313301 -color=yellow,shape=circle,flag=1,i=35328,u=0.6305700239322426,v=0.21611845509758276,w=0.4977752260509924,x=4.151003456685091 -color=yellow,shape=square,flag=1,i=35354,u=0.3018764613738272,v=0.5683737504450298,w=0.4893524201975025,x=4.358317141775494 -color=red,shape=square,flag=1,i=35356,u=0.7611142043455059,v=0.3967923275407611,w=0.459699627955268,x=5.684971940704642 -color=red,shape=square,flag=0,i=35363,u=0.8944654058022213,v=0.3403254490551689,w=0.45556327224719945,x=5.1492207412477 -color=orange,shape=square,flag=0,i=35385,u=0.32563287458523493,v=0.3568824006318867,w=0.48049693943870253,x=5.082151895588843 -color=green,shape=circle,flag=0,i=35391,u=0.4463217787124222,v=0.613546486639892,w=0.45482093402284224,x=4.1980895699935035 -color=yellow,shape=square,flag=1,i=35401,u=0.9421482812092415,v=0.22494603773635746,w=0.4926965740191712,x=5.30536775361479 -color=blue,shape=triangle,flag=1,i=35404,u=0.8068114917862665,v=0.7609159408005416,w=0.47039609338079186,x=3.1655767166448165 -color=blue,shape=circle,flag=0,i=35424,u=0.9723740607051794,v=0.053951199263640226,w=0.4997814582794458,x=2.316503874939617 -color=purple,shape=triangle,flag=1,i=35432,u=0.4803136037759438,v=0.2089621904779686,w=0.4868646845394705,x=4.740663342443059 -color=green,shape=triangle,flag=0,i=35437,u=0.7201178699444909,v=0.6371143146612083,w=0.5145406588631537,x=7.720951121901103 -color=purple,shape=square,flag=0,i=35452,u=0.7398544292415974,v=0.6129954757727973,w=0.49465464882327276,x=2.431532104087084 -color=orange,shape=circle,flag=0,i=35458,u=0.9088178696541952,v=0.11739058465274177,w=0.5054053007716468,x=6.004553897248768 -color=purple,shape=circle,flag=1,i=35463,u=0.17575284184125572,v=0.7490855955751995,w=0.49341047616880274,x=3.745845516993159 -color=red,shape=circle,flag=1,i=35464,u=0.867454232885212,v=0.8556772595522998,w=0.48379126658027194,x=4.900604892587795 -color=purple,shape=circle,flag=0,i=35465,u=0.0912784993740926,v=0.9873598165524754,w=0.49287247603294837,x=8.157119547407868 -color=orange,shape=circle,flag=0,i=35468,u=0.2707774908576035,v=0.6259084157276901,w=0.5057382987928779,x=5.116109251101737 -color=red,shape=square,flag=0,i=35477,u=0.2700867372360217,v=0.14583264800133733,w=0.4793403299870868,x=3.3595387864441437 -color=blue,shape=circle,flag=1,i=35488,u=0.9182997597247113,v=0.456190689517743,w=0.4994482629664476,x=5.5173749528557705 -color=purple,shape=circle,flag=0,i=35494,u=0.5596337099203815,v=0.30652748843028776,w=0.49301557255583467,x=5.2995898541630915 -color=green,shape=circle,flag=0,i=35530,u=0.8096880908744482,v=0.9269545535917043,w=0.45284146096944833,x=6.151688024652061 -color=purple,shape=square,flag=0,i=35549,u=0.2949423212891584,v=0.8690753440979728,w=0.4994569355666641,x=4.532049502555437 -color=red,shape=square,flag=1,i=35565,u=0.47624089973644135,v=0.07916374297263873,w=0.48033923807806406,x=3.340440022458455 -color=blue,shape=square,flag=1,i=35588,u=0.84021940790032,v=0.6679580099121151,w=0.5220327873203584,x=4.9001089389293755 -color=blue,shape=circle,flag=1,i=35604,u=0.3552929550329027,v=0.08490058853155247,w=0.5020391780632532,x=5.798981787346546 -color=green,shape=triangle,flag=0,i=35617,u=0.33663095632101814,v=0.20856825285674907,w=0.508746926050083,x=5.51081814817882 -color=green,shape=square,flag=0,i=35622,u=0.4725956713095468,v=0.4936849785624218,w=0.5163346341007835,x=4.467197490481218 -color=red,shape=square,flag=1,i=35623,u=0.3345155609075673,v=0.9689997713208467,w=0.4810680274755842,x=5.77684604798774 -color=red,shape=square,flag=0,i=35626,u=0.4288850476194279,v=0.3830469074570414,w=0.4772361426201381,x=6.177358928126811 -color=yellow,shape=circle,flag=1,i=35627,u=0.3013463329922611,v=0.03924149703408919,w=0.5021030236560009,x=4.834615846827212 -color=red,shape=square,flag=1,i=35630,u=0.610915281182388,v=0.4622742234332208,w=0.4796858473431834,x=5.268669637381702 -color=orange,shape=square,flag=1,i=35656,u=0.7407946412358015,v=0.1466537762257486,w=0.4830447558260019,x=3.8276703751800283 -color=red,shape=circle,flag=0,i=35665,u=0.9486629504076773,v=1.032743271888732,w=0.47507950478696004,x=3.4237533802490154 -color=yellow,shape=square,flag=0,i=35670,u=0.8017079455392203,v=0.8324565235405808,w=0.4890734297890044,x=4.062628347995121 -color=purple,shape=circle,flag=1,i=35676,u=0.502751103981982,v=0.3067461377268961,w=0.4902836592750695,x=4.89617344970658 -color=green,shape=circle,flag=0,i=35698,u=0.6442889241136163,v=0.7130825779855385,w=0.45297484218400647,x=5.670303347082715 -color=yellow,shape=circle,flag=1,i=35708,u=0.622177923604868,v=0.697091953056837,w=0.5070376584353148,x=5.110215835456102 -color=yellow,shape=triangle,flag=1,i=35723,u=0.19306483745605496,v=0.7376736766172787,w=0.5245521454800511,x=3.9998149075053937 -color=purple,shape=circle,flag=0,i=35733,u=0.5844944241472961,v=0.8788136285229017,w=0.48488691076745927,x=5.64054487375537 -color=yellow,shape=square,flag=1,i=35735,u=0.9753956607089511,v=0.3266330765039256,w=0.4876863330647485,x=3.441407669312291 -color=red,shape=square,flag=1,i=35741,u=0.12597944458681098,v=0.2960746631341985,w=0.4619377851379353,x=4.609007097094427 -color=purple,shape=triangle,flag=0,i=35760,u=0.8619606977209893,v=0.7462029528649634,w=0.4999957863388805,x=3.698901402666472 -color=red,shape=square,flag=1,i=35766,u=0.34832036292221913,v=0.31136790366269496,w=0.4645221016628855,x=5.480759547085093 -color=green,shape=circle,flag=0,i=35781,u=0.3272717107219767,v=0.05467904352401809,w=0.45791547095604446,x=5.430090159436973 -color=green,shape=square,flag=0,i=35782,u=0.5503219618320905,v=0.9059490455665576,w=0.5109469960946523,x=4.628484361687513 -color=red,shape=triangle,flag=0,i=35788,u=0.12010060730896133,v=0.2424853913592211,w=0.5252045454571971,x=6.358434479094371 -color=red,shape=triangle,flag=0,i=35791,u=0.3685430910108468,v=0.7307990534978458,w=0.5285764092081605,x=5.382108987645677 -color=green,shape=circle,flag=0,i=35796,u=0.14026451560374587,v=0.1504851407090676,w=0.4633073534402448,x=7.090406969481044 -color=green,shape=circle,flag=0,i=35798,u=0.797455235154612,v=0.07388297272460043,w=0.4624729714543862,x=3.9310042421371683 -color=red,shape=square,flag=1,i=35809,u=0.08929112801625261,v=0.9550390801310992,w=0.46334290065871,x=6.0876883218868025 -color=green,shape=square,flag=1,i=35824,u=0.6769536678317906,v=0.24874245805869355,w=0.5030608094711576,x=4.65376960607422 -color=purple,shape=triangle,flag=0,i=35832,u=0.2398209168856601,v=0.1391002515024441,w=0.49566991371157043,x=5.1119782623455245 -color=blue,shape=square,flag=1,i=35867,u=0.007778509178521964,v=0.5590543125572744,w=0.5116875776993812,x=3.3067431120695012 -color=yellow,shape=square,flag=1,i=35870,u=0.9762650267531341,v=0.1716058542230009,w=0.4866207017343421,x=3.3635993931178922 -color=yellow,shape=circle,flag=1,i=35882,u=0.10489688052522406,v=0.09619165098821159,w=0.48899637844558314,x=3.7557063650425673 -color=yellow,shape=square,flag=1,i=35898,u=0.05932649150936753,v=0.9646701819382054,w=0.48595412795995635,x=5.164634370129134 -color=red,shape=triangle,flag=0,i=35930,u=0.9992266776567538,v=0.005608293769324368,w=0.5213259603323551,x=5.604037675138165 -color=red,shape=circle,flag=1,i=35931,u=0.9596319956050603,v=0.9994251604788358,w=0.46790683802035243,x=5.183794707486837 -color=red,shape=circle,flag=0,i=35936,u=0.3657739260107421,v=0.37924867922783556,w=0.46896422586596154,x=7.033610217385781 -color=purple,shape=square,flag=0,i=35957,u=0.28522752645294935,v=0.8095838626240286,w=0.5138132851322226,x=5.834548403656761 -color=red,shape=square,flag=1,i=35958,u=0.4508382814791214,v=0.6123379592216707,w=0.47051667092975547,x=7.015948231207051 -color=red,shape=triangle,flag=0,i=35963,u=0.024968016274487637,v=0.48857846042435493,w=0.5130671432730287,x=4.584500243494941 -color=green,shape=square,flag=0,i=35964,u=0.47071576124342795,v=0.043142879962644876,w=0.5099528685235624,x=4.253458849313737 -color=red,shape=circle,flag=1,i=35966,u=0.466740249131704,v=0.3960382580872263,w=0.4697493332539897,x=4.543932421642148 -color=red,shape=square,flag=0,i=35976,u=0.16781198202988123,v=0.7050050356392615,w=0.472561432923347,x=4.1792215407563775 -color=red,shape=circle,flag=1,i=35978,u=0.053957398515282584,v=0.07177719969862469,w=0.47405812199744557,x=3.824791548083543 -color=red,shape=square,flag=1,i=35985,u=0.13493528401182942,v=0.328225583427617,w=0.47716060280728373,x=5.624581062577337 -color=red,shape=triangle,flag=1,i=35987,u=0.2642142159149524,v=0.8886508387835679,w=0.5138600972488298,x=2.942461536737969 -color=red,shape=square,flag=0,i=35997,u=0.13139337751555846,v=0.6332295955532391,w=0.4783104211441366,x=6.141269941762608 -color=blue,shape=circle,flag=0,i=36000,u=0.34447972571737606,v=0.7026410374365138,w=0.5013803384637279,x=5.587999353052944 -color=yellow,shape=triangle,flag=1,i=36018,u=0.6081787154395466,v=0.7215775810614267,w=0.5347263059504765,x=4.972816677273092 -color=yellow,shape=square,flag=1,i=36020,u=0.9312650593076067,v=0.8608806141795469,w=0.4887479113127106,x=5.1442815338472245 -color=red,shape=circle,flag=1,i=36023,u=0.822527613824384,v=0.7464777498251306,w=0.47393901443714054,x=6.657369309873818 -color=green,shape=square,flag=0,i=36026,u=0.11107014864143827,v=0.9784143095010472,w=0.5026888681937136,x=4.053399132765147 -color=green,shape=triangle,flag=0,i=36056,u=0.7626117935882222,v=0.309550158241476,w=0.4845903943528254,x=3.155765217014325 -color=red,shape=square,flag=0,i=36061,u=0.3170200561392382,v=0.7429318277623178,w=0.485182656439949,x=5.507732949948455 -color=yellow,shape=triangle,flag=1,i=36069,u=0.11861173684922255,v=0.4554698760815262,w=0.5323254948829813,x=5.302950099647103 -color=blue,shape=triangle,flag=0,i=36078,u=0.6442921363236699,v=0.9524720494525128,w=0.5093097125807204,x=5.176347585050365 -color=yellow,shape=triangle,flag=1,i=36112,u=0.24720498520327272,v=0.581554475961664,w=0.5297442285935843,x=4.530641032502419 -color=yellow,shape=triangle,flag=1,i=36129,u=0.48433358117690994,v=0.028872798166045044,w=0.5349045318602461,x=5.531715501503167 -color=blue,shape=circle,flag=0,i=36134,u=0.08231896300240193,v=0.8768681886357066,w=0.4947753169052335,x=4.914117598252927 -color=blue,shape=square,flag=1,i=36145,u=0.5827265635038165,v=0.2931613245670849,w=0.5083122528108311,x=5.0622286692130904 -color=blue,shape=square,flag=0,i=36159,u=0.8656290081694464,v=0.27046859325223294,w=0.5085529440140144,x=6.398646218872774 -color=blue,shape=circle,flag=1,i=36174,u=0.10996848628078926,v=0.5920409024544292,w=0.48952616019948114,x=4.741787840413854 -color=red,shape=triangle,flag=0,i=36183,u=0.4432696365974439,v=0.755276220089996,w=0.5116173772804775,x=5.370739726083066 -color=red,shape=circle,flag=0,i=36195,u=0.16273640922648558,v=0.22856514159926355,w=0.47852290088166755,x=8.363770289164274 -color=green,shape=circle,flag=0,i=36197,u=0.28661979648870195,v=0.15287216905441703,w=0.45747883601914274,x=6.36714056548609 -color=yellow,shape=square,flag=1,i=36206,u=0.08972911396329153,v=0.6829686415538448,w=0.4810882668332189,x=3.6295803958383224 -color=red,shape=square,flag=1,i=36214,u=0.8096482657104355,v=0.8699371231194737,w=0.48352978017878057,x=3.7874598790180225 -color=red,shape=circle,flag=0,i=36220,u=0.3366089676059959,v=0.24411493155388006,w=0.47751317870457594,x=4.989970087508334 -color=blue,shape=triangle,flag=0,i=36222,u=0.885494699399685,v=0.586622883592311,w=0.5091687358179846,x=6.125939594495925 -color=orange,shape=triangle,flag=0,i=36228,u=0.332373235154922,v=0.03799185693503282,w=0.503732822477797,x=5.926032729850331 -color=purple,shape=circle,flag=0,i=36245,u=0.6610515032982477,v=0.5349123440965378,w=0.48119674893347175,x=5.009043458121987 -color=blue,shape=square,flag=0,i=36249,u=0.9151206637542442,v=0.9233621394880314,w=0.510797431207716,x=6.855579633923043 -color=green,shape=circle,flag=0,i=36262,u=0.6398082824373382,v=0.9872322676471937,w=0.4554814750136406,x=4.123749417311191 -color=red,shape=triangle,flag=0,i=36269,u=0.9950179533308375,v=0.8492157367428346,w=0.5192388704493881,x=7.20682287351051 -color=red,shape=square,flag=0,i=36271,u=0.47880305120222244,v=0.7537335820646339,w=0.4604291460210823,x=3.6692150761335163 -color=purple,shape=square,flag=0,i=36295,u=0.751157094254534,v=0.2876663845708769,w=0.5320260009479819,x=4.647464618679696 -color=blue,shape=triangle,flag=1,i=36300,u=0.2885172595147546,v=0.568389654989411,w=0.5090930436938382,x=6.321087408909778 -color=purple,shape=square,flag=0,i=36301,u=0.09408267998025954,v=0.12100170196826776,w=0.5286103230734899,x=3.289868564502827 -color=green,shape=circle,flag=0,i=36320,u=0.12417238686886067,v=0.13895383754582713,w=0.4582982312314858,x=2.6277938975607484 -color=red,shape=square,flag=1,i=36332,u=0.6183984283164207,v=0.4077857019223098,w=0.45294280189526454,x=4.486889011425212 -color=blue,shape=triangle,flag=1,i=36335,u=0.7009022683854048,v=0.44710919735898713,w=0.5094247735597784,x=5.764873355155639 -color=yellow,shape=square,flag=1,i=36344,u=0.05678045495688133,v=0.3283502203736862,w=0.484045754713974,x=5.229813963591415 -color=red,shape=square,flag=1,i=36348,u=0.6596157190562775,v=0.10394808464298388,w=0.45205307210229495,x=5.585133508704117 -color=blue,shape=triangle,flag=1,i=36353,u=0.9292191615331855,v=0.2433103953230864,w=0.5124512147659767,x=5.635203037194194 -color=red,shape=square,flag=0,i=36361,u=0.9097620304753045,v=0.4073058479727405,w=0.4493592880216265,x=4.247461112436097 -color=red,shape=square,flag=0,i=36370,u=0.7795127411009333,v=0.6403293629766633,w=0.45150930965841496,x=3.0107310863397543 -color=red,shape=square,flag=0,i=36379,u=0.06485730141567869,v=0.11085435876732552,w=0.4535408960110263,x=6.106000425837571 -color=red,shape=triangle,flag=0,i=36398,u=0.9871256151996948,v=0.8961354018562923,w=0.521318986790278,x=4.617017041126522 -color=red,shape=triangle,flag=0,i=36428,u=0.13816601084921998,v=0.7328007991694945,w=0.5212385014488661,x=4.93275187335988 -color=green,shape=circle,flag=0,i=36433,u=0.3713985931656163,v=0.5695768950213503,w=0.4705738757169754,x=4.2470491540708935 -color=yellow,shape=circle,flag=1,i=36439,u=0.6263103009567477,v=0.16069954346422588,w=0.4973043248458733,x=5.532482670949542 -color=purple,shape=circle,flag=0,i=36440,u=0.7426701120984155,v=0.5788419299702354,w=0.48076849315067743,x=3.9814808142179303 -color=green,shape=triangle,flag=0,i=36458,u=0.6385942738686113,v=0.6256491864636414,w=0.48363542839271007,x=5.689807273094277 -color=purple,shape=triangle,flag=0,i=36459,u=0.6760530306163005,v=0.8475308246448228,w=0.48897168058732365,x=4.316920661327468 -color=green,shape=square,flag=0,i=36463,u=0.6764888564952541,v=0.3377501667645332,w=0.4782767136419434,x=2.424985784964037 -color=red,shape=triangle,flag=0,i=36475,u=0.7318186371279689,v=0.6224442436263078,w=0.5121507307098174,x=4.570394267133452 -color=yellow,shape=triangle,flag=1,i=36488,u=0.6363799357654083,v=0.41477490737855516,w=0.5361994091659278,x=5.3541128610975335 -color=red,shape=triangle,flag=0,i=36507,u=0.33732124325998514,v=0.5684843035668788,w=0.5112753680465155,x=5.841770886810079 -color=red,shape=square,flag=0,i=36531,u=0.7264537270904323,v=0.3399132379111024,w=0.47402005274241243,x=4.008489810908823 -color=green,shape=square,flag=0,i=36538,u=0.4114719229186691,v=0.22854288539809597,w=0.46814287953206934,x=4.26031265274266 -color=red,shape=square,flag=0,i=36548,u=0.07479428672776522,v=0.030736133484613792,w=0.47064934313961604,x=4.948953391365716 -color=purple,shape=square,flag=0,i=36556,u=0.857727400426818,v=0.07333956746865777,w=0.5136475677723563,x=4.99884359540335 -color=red,shape=triangle,flag=1,i=36564,u=0.12055093967575436,v=0.6220197904079796,w=0.5066418834991658,x=6.116805117548381 -color=red,shape=triangle,flag=1,i=36569,u=0.8417718896315662,v=0.5815705089585642,w=0.5006306981334182,x=6.232426819569056 -color=yellow,shape=triangle,flag=1,i=36575,u=0.7201309058952723,v=0.9634681059201501,w=0.5333320887100327,x=6.942877119975308 -color=red,shape=square,flag=0,i=36576,u=0.565885889567358,v=0.559105879089216,w=0.47477780669043396,x=6.0065371823305815 -color=yellow,shape=circle,flag=1,i=36582,u=0.78038451123999,v=0.8793902556868812,w=0.498080765847204,x=5.279692577219706 -color=red,shape=square,flag=0,i=36585,u=0.38653845198027803,v=0.18368330169183422,w=0.48302032892191776,x=5.681332753882344 -color=yellow,shape=square,flag=1,i=36594,u=0.43700172579237917,v=0.06882933111154987,w=0.46966053460456797,x=8.231719488880193 -color=purple,shape=triangle,flag=0,i=36595,u=0.2842408140902941,v=0.750757327989996,w=0.49875615076157814,x=4.170629737828956 -color=red,shape=square,flag=0,i=36599,u=0.08033011257969547,v=0.7881433601568403,w=0.4868984875663315,x=6.7981227531301185 -color=yellow,shape=triangle,flag=0,i=36609,u=0.8051443179755297,v=0.7458257415640093,w=0.5311876370295827,x=5.021086324775774 -color=red,shape=circle,flag=0,i=36623,u=0.021430963799872305,v=0.11508144927710698,w=0.47303523263902325,x=4.965763451325536 -color=red,shape=triangle,flag=1,i=36631,u=0.10681668179034898,v=0.6881371496783187,w=0.5009009985730479,x=6.750008081181491 -color=orange,shape=square,flag=1,i=36638,u=0.19926421297813157,v=0.4212506345308833,w=0.47332110786931986,x=6.028219968380095 -color=red,shape=square,flag=0,i=36641,u=0.6335278965204195,v=0.1568472183763444,w=0.475481522738315,x=5.204186118165796 -color=red,shape=square,flag=0,i=36651,u=0.2837680149951288,v=0.025792332374715232,w=0.47478374095123144,x=7.382393175010345 -color=red,shape=circle,flag=1,i=36673,u=0.44391573671177065,v=0.5226136795125732,w=0.4659297935903861,x=5.650229201649052 -color=red,shape=square,flag=0,i=36676,u=0.06549851587900102,v=0.07597741266278202,w=0.46909000299305553,x=5.229708375740358 -color=red,shape=triangle,flag=0,i=36693,u=0.10812932587353663,v=0.579766960059624,w=0.5037585304647251,x=5.349084757249533 -color=orange,shape=circle,flag=1,i=36710,u=0.6629475389247007,v=0.6737613831063881,w=0.5264987997734101,x=5.259925415528492 -color=red,shape=square,flag=0,i=36722,u=0.9534364940556542,v=0.6067863736724277,w=0.4732950362855124,x=2.561956537281525 -color=red,shape=square,flag=0,i=36732,u=0.7431271447944012,v=0.26601303000154075,w=0.4778179044851428,x=4.576354427146499 -color=red,shape=triangle,flag=0,i=36735,u=0.6459581779977813,v=0.22862623676499227,w=0.5121677350384127,x=5.917664506255178 -color=red,shape=square,flag=0,i=36737,u=0.49220881265398886,v=0.8712377093570182,w=0.4720893776781397,x=4.266041087400654 -color=purple,shape=circle,flag=0,i=36751,u=0.32272234505821573,v=0.5964445905325239,w=0.4698203439736098,x=5.9781161532389495 -color=red,shape=triangle,flag=0,i=36752,u=0.10637415635000391,v=0.7696039656634384,w=0.5091672653612455,x=5.91306081429092 -color=blue,shape=triangle,flag=1,i=36758,u=0.6761307036783781,v=0.03512104198878663,w=0.5164203712358599,x=7.537441527036219 -color=blue,shape=square,flag=0,i=36759,u=0.48801207135789293,v=0.48790570230146313,w=0.494569984017705,x=5.612047443280563 -color=red,shape=circle,flag=1,i=36766,u=0.4856527525588953,v=0.48830913715981883,w=0.4625373268692104,x=5.044454183562541 -color=blue,shape=triangle,flag=1,i=36771,u=0.2297324651517394,v=0.2948124790776079,w=0.517513161664295,x=5.361494479511111 -color=red,shape=circle,flag=0,i=36779,u=0.9983576004836738,v=1.0118780308493212,w=0.4581749231312331,x=5.689111498378435 -color=red,shape=square,flag=0,i=36784,u=0.6865160898078319,v=0.9681689587798931,w=0.4897406585955326,x=3.1582636006103653 -color=red,shape=triangle,flag=1,i=36817,u=0.9959495527910684,v=0.05123122826552229,w=0.5119874998109148,x=6.172320037476944 -color=red,shape=circle,flag=0,i=36832,u=0.25160776570519783,v=0.35143833146071823,w=0.45591824020280797,x=5.936918696087108 -color=blue,shape=square,flag=1,i=36837,u=0.37831515612745625,v=0.47435855433536867,w=0.49095130049270963,x=6.026640907336895 -color=red,shape=circle,flag=0,i=36857,u=0.14005311210565763,v=0.22763248140208192,w=0.464773279811465,x=3.9383494797829073 -color=red,shape=circle,flag=1,i=36901,u=0.3909233075396039,v=0.3193390976063586,w=0.4739178772482244,x=5.360319976437881 -color=red,shape=triangle,flag=1,i=36904,u=0.40026732052605873,v=0.5775721407334361,w=0.5093919598946542,x=4.7420549329221675 -color=red,shape=square,flag=1,i=36947,u=0.5285811941239325,v=0.07747041832828583,w=0.48160506568558104,x=3.962447914893231 -color=orange,shape=square,flag=1,i=36959,u=0.8319686303211316,v=0.13009064565697037,w=0.4736475891694955,x=5.513559387282787 -color=red,shape=triangle,flag=1,i=36960,u=0.20721031351842834,v=0.20563119659791018,w=0.5107003570939529,x=5.394475665671298 -color=purple,shape=triangle,flag=0,i=36962,u=0.8383047347862198,v=0.8775121948045028,w=0.49553070242746894,x=6.0863808536528685 -color=orange,shape=square,flag=0,i=36973,u=0.9953363767790046,v=0.5856603924709683,w=0.47656582617656057,x=5.784106873515358 -color=green,shape=triangle,flag=0,i=36992,u=0.03231626528725373,v=0.5326267524379906,w=0.498519570048132,x=4.351520830156708 -color=red,shape=circle,flag=0,i=36994,u=0.8623445321811245,v=0.7765652870522611,w=0.4878046807823772,x=5.692053058697806 -color=yellow,shape=triangle,flag=0,i=36995,u=0.48699377543195665,v=0.7317101139022135,w=0.5405742662218538,x=4.773914755408491 -color=blue,shape=square,flag=0,i=37013,u=0.32771817069700737,v=0.4390377511845567,w=0.49053121989807175,x=4.127975634669458 -color=red,shape=circle,flag=1,i=37014,u=0.30209706103524725,v=0.3620471660009386,w=0.486122872016291,x=4.886967800140364 -color=blue,shape=square,flag=0,i=37022,u=0.17064265099283038,v=0.892659595265854,w=0.4841459080674549,x=6.27670346100543 -color=yellow,shape=triangle,flag=1,i=37031,u=0.5324477590924602,v=0.05974540470234002,w=0.5477027839787513,x=5.521765958241326 -color=green,shape=circle,flag=0,i=37036,u=0.10606156398296063,v=0.7217641576757475,w=0.4673033518338816,x=4.5668732484511265 -color=blue,shape=square,flag=0,i=37040,u=0.48785109558949846,v=0.6907117006800187,w=0.4800069469769406,x=6.44974385408032 -color=green,shape=triangle,flag=0,i=37044,u=0.8946869613066204,v=0.8098471066223272,w=0.49451173726193576,x=2.891011807481231 -color=red,shape=square,flag=0,i=37051,u=0.8796099432158769,v=0.12193308384451995,w=0.49815670114722,x=2.789603626401845 -color=green,shape=triangle,flag=0,i=37064,u=0.60591585401936,v=0.3356633890867142,w=0.48974673022693804,x=7.24355616800586 -color=red,shape=triangle,flag=0,i=37066,u=0.4235391066300558,v=0.553778356438792,w=0.5197305154099661,x=4.924006216420129 -color=green,shape=triangle,flag=0,i=37084,u=0.3284787910597309,v=0.16528648498020426,w=0.48822374051846684,x=3.4179873836565093 -color=red,shape=square,flag=0,i=37100,u=0.44512946876245985,v=0.6843771771102779,w=0.49440232404200146,x=5.462897963330664 -color=blue,shape=circle,flag=1,i=37127,u=0.2679268045522243,v=0.08596909720323032,w=0.4878667797370085,x=3.8215456480526115 -color=green,shape=square,flag=0,i=37132,u=0.4378194458238688,v=0.6835520934783675,w=0.48111752300750704,x=5.331321496458754 -color=green,shape=circle,flag=0,i=37133,u=0.8892914833064786,v=0.4193271210346531,w=0.472362508113252,x=5.841069794674747 -color=yellow,shape=circle,flag=1,i=37159,u=0.2726101911689758,v=0.5639791438536959,w=0.5004863639861948,x=7.201503320824382 -color=red,shape=triangle,flag=0,i=37190,u=0.4590965400752065,v=0.5533863436024102,w=0.5281583386284135,x=4.361818453371206 -color=green,shape=square,flag=1,i=37199,u=0.12163737564523602,v=0.4014462973141971,w=0.4858072409679675,x=7.673246371126193 -color=red,shape=circle,flag=0,i=37203,u=0.9209054444714102,v=0.908772038431933,w=0.48789814992412456,x=5.2260458713698466 -color=red,shape=triangle,flag=0,i=37204,u=0.34402022492252327,v=0.07012513866717396,w=0.5295997185499252,x=3.980541266720826 -color=red,shape=square,flag=1,i=37207,u=0.8444415491778481,v=0.14153089082798664,w=0.5034675458363985,x=5.770147902100302 -color=green,shape=circle,flag=1,i=37211,u=0.34905389412099075,v=0.6859795922179169,w=0.4775656820869437,x=4.963341915148402 -color=blue,shape=square,flag=1,i=37226,u=0.6413615050163423,v=0.2933802918358043,w=0.4896583166077016,x=3.700619007817077 -color=red,shape=square,flag=0,i=37227,u=0.9876672286695282,v=0.9428093794936758,w=0.5161090238215247,x=6.944280937158122 -color=purple,shape=square,flag=0,i=37247,u=0.45460083937637286,v=0.7564213829665887,w=0.5047271066138581,x=6.970607562042409 -color=red,shape=triangle,flag=1,i=37250,u=0.8325863986687886,v=0.43396032608141044,w=0.5210605619230178,x=4.63737979361521 -color=yellow,shape=triangle,flag=1,i=37252,u=0.9715999345797057,v=0.00172447386987451,w=0.5230270739804954,x=3.335155453613923 -color=red,shape=circle,flag=1,i=37269,u=0.5615822498213286,v=0.6164967334157775,w=0.4875093353752823,x=5.578981301797171 -color=green,shape=triangle,flag=1,i=37297,u=0.9784143556444374,v=0.11230754985994384,w=0.49090505998248923,x=3.7878819194298576 -color=red,shape=square,flag=0,i=37299,u=0.3811341846092945,v=0.3420777172507604,w=0.5106108100380538,x=4.767182011882721 -color=red,shape=circle,flag=0,i=37316,u=0.2686560141159776,v=0.19890962929317363,w=0.47129590072192634,x=3.406904163825312 -color=purple,shape=triangle,flag=0,i=37331,u=0.45330461089023766,v=0.44172965737918846,w=0.48902466740933015,x=3.6968190266633676 -color=purple,shape=circle,flag=0,i=37338,u=0.5302845634519802,v=0.37082672810720874,w=0.46999739328217544,x=4.109615080407763 -color=red,shape=triangle,flag=0,i=37339,u=0.24580844192998008,v=0.745932426091323,w=0.5318814387313013,x=3.439300063573949 -color=red,shape=square,flag=0,i=37347,u=0.9113976116769003,v=0.5717441754557772,w=0.5011901188463853,x=6.241667652553901 -color=red,shape=circle,flag=0,i=37361,u=0.5481129208721416,v=0.6294706620141673,w=0.47777439627161267,x=7.285373856753192 -color=yellow,shape=circle,flag=0,i=37369,u=0.3375387132878296,v=0.21419235539428816,w=0.4954607929026692,x=3.746885091796307 -color=red,shape=triangle,flag=0,i=37378,u=0.05851597245364226,v=0.3955398285561733,w=0.5318855359144191,x=4.974670625878876 -color=red,shape=square,flag=0,i=37403,u=0.40652847571468975,v=0.5379331564038987,w=0.490028695382077,x=4.532615384566884 -color=red,shape=triangle,flag=0,i=37415,u=0.1574014948290393,v=0.27830519590229796,w=0.5374805342297109,x=3.681427407515642 -color=red,shape=triangle,flag=1,i=37440,u=0.7166979316876014,v=0.20762566325161025,w=0.531254823588659,x=2.501888071157458 -color=purple,shape=triangle,flag=0,i=37444,u=0.5392537849080222,v=0.534992924377639,w=0.48521547991681174,x=5.194183322596916 -color=red,shape=square,flag=1,i=37460,u=0.6971150295592662,v=0.4064389406511253,w=0.5006569470610013,x=5.753844623975136 -color=red,shape=triangle,flag=0,i=37463,u=0.5554004914891789,v=0.5628719670833299,w=0.5293448461265443,x=7.115781077108316 -color=blue,shape=square,flag=0,i=37471,u=0.41426849367180885,v=0.16065915650296003,w=0.4736842441116863,x=4.55770340433462 -color=yellow,shape=triangle,flag=1,i=37487,u=0.24062409104057225,v=0.5010526365494592,w=0.5218186314632153,x=4.589373456459177 -color=blue,shape=square,flag=1,i=37500,u=0.3393478754061173,v=0.2881246381446081,w=0.46414802630528995,x=6.243150446903364 -color=green,shape=square,flag=0,i=37514,u=0.2693800001059923,v=0.04035180894988488,w=0.4833313258395809,x=4.092232864843839 -color=purple,shape=circle,flag=1,i=37518,u=0.5920169010216106,v=0.10459423843488291,w=0.4631134663489581,x=3.091984479817586 -color=green,shape=circle,flag=0,i=37521,u=0.6387119537418751,v=0.03714863275769187,w=0.48571899599410157,x=5.3937468048611406 -color=yellow,shape=square,flag=1,i=37541,u=0.819692604290505,v=0.5279896879534377,w=0.4490464876251143,x=4.09422705638926 -color=purple,shape=square,flag=0,i=37554,u=0.06034080193984881,v=0.033516594013897394,w=0.5042848921688678,x=6.9612489661961385 -color=red,shape=square,flag=0,i=37556,u=0.9750019392032869,v=0.4862456051737566,w=0.4972424851649748,x=3.929103492684863 -color=red,shape=square,flag=0,i=37558,u=0.6171598364673789,v=0.7250738618443542,w=0.49833147603219313,x=5.350267899964599 -color=blue,shape=circle,flag=1,i=37575,u=0.6843694547276777,v=0.21151730073066077,w=0.4806111302132133,x=3.7669067819074455 -color=red,shape=triangle,flag=0,i=37578,u=0.7665314034138527,v=0.7133409581940101,w=0.5377497844893196,x=6.346758117173912 -color=purple,shape=triangle,flag=1,i=37592,u=0.08953170682751777,v=0.1373090786979091,w=0.4834399942163302,x=2.88185175743152 -color=red,shape=circle,flag=0,i=37607,u=0.7337879389497028,v=0.6703890758114182,w=0.48323631140861006,x=4.59172351172061 -color=red,shape=triangle,flag=0,i=37608,u=0.9217610153513968,v=0.8989503607846147,w=0.5376757847225038,x=4.74741642957461 -color=blue,shape=square,flag=1,i=37613,u=0.2138076874342455,v=0.4958347828064372,w=0.4649597574914763,x=4.881855736157818 -color=purple,shape=triangle,flag=0,i=37616,u=0.8938083665743075,v=0.029239534824987423,w=0.4826411892835148,x=3.903514489982015 -color=red,shape=circle,flag=0,i=37618,u=0.28939222916565577,v=0.3329676477744654,w=0.4812724557340212,x=7.684625915207742 -color=red,shape=square,flag=0,i=37632,u=0.07911426041264935,v=0.1539046407624154,w=0.47923762858867835,x=3.1607856742881317 -color=red,shape=circle,flag=1,i=37647,u=0.719214252347564,v=0.7901868819983043,w=0.48358167828386855,x=5.7850786063311235 -color=green,shape=circle,flag=0,i=37655,u=0.09352173829497468,v=0.2676763517236652,w=0.4932650468905362,x=6.916429524956963 -color=red,shape=square,flag=0,i=37657,u=0.7136108560678266,v=0.2718872272660279,w=0.47769807610888887,x=5.346420772248663 -color=yellow,shape=circle,flag=0,i=37664,u=0.4191808474039801,v=0.739255703619348,w=0.5077530286313371,x=3.66666668116901 -color=orange,shape=circle,flag=0,i=37668,u=0.18007376885630966,v=0.8607135232102564,w=0.5281522937562019,x=3.4871488136155544 -color=red,shape=triangle,flag=0,i=37674,u=0.20231653462572208,v=0.8623478249818624,w=0.5368339928800547,x=5.414782863697613 -color=yellow,shape=circle,flag=0,i=37682,u=0.6248434447565645,v=0.3532431572350374,w=0.5172432757434454,x=4.084118842520906 -color=green,shape=square,flag=0,i=37685,u=0.4843672401568342,v=0.5080747139655946,w=0.483286331765644,x=4.860660246113421 -color=red,shape=circle,flag=0,i=37687,u=0.3489486185661024,v=0.323771076768919,w=0.4945300144788722,x=5.777523757759923 -color=red,shape=triangle,flag=0,i=37698,u=0.45816684290595133,v=0.2281742816684985,w=0.5350465367424906,x=6.341573764293282 -color=yellow,shape=square,flag=1,i=37704,u=0.7058346074133882,v=0.4965323642212405,w=0.4648549492625446,x=3.5046827972460073 -color=red,shape=triangle,flag=0,i=37708,u=0.738864106607189,v=0.6822447880234197,w=0.5425989594707775,x=4.127956949700301 -color=yellow,shape=triangle,flag=1,i=37712,u=0.5540042944833872,v=0.7949234874872454,w=0.5197699287875088,x=4.595715951910495 -color=yellow,shape=square,flag=1,i=37713,u=0.47172434062297064,v=0.13688354742815667,w=0.46577505611307707,x=5.090030296491598 -color=red,shape=circle,flag=1,i=37735,u=0.529071175011801,v=0.6257915577335662,w=0.4864639612273933,x=7.9492832752973195 -color=purple,shape=triangle,flag=0,i=37746,u=0.6564229969262801,v=0.5114125000839184,w=0.49318205924255587,x=4.079333502553843 -color=purple,shape=circle,flag=0,i=37751,u=0.26676268810918213,v=0.12674781998726992,w=0.46967993060868596,x=3.8387973966036473 -color=orange,shape=circle,flag=0,i=37758,u=0.9851029040372477,v=0.09593472594818309,w=0.5324612053263172,x=4.012838441365473 -color=green,shape=triangle,flag=0,i=37763,u=0.7790236271657485,v=0.37870381284129406,w=0.4971210197706475,x=5.1656570497710055 -color=green,shape=square,flag=0,i=37765,u=0.48785848916548635,v=0.8043586020008786,w=0.4803894237893302,x=5.932806251695024 -color=blue,shape=square,flag=1,i=37769,u=0.0010124921078813465,v=0.5003311052459606,w=0.45718856694064935,x=3.7276291403157935 -color=purple,shape=triangle,flag=0,i=37783,u=0.06351683841635458,v=0.5745664486338214,w=0.4913794324817373,x=3.9700437087588405 -color=blue,shape=triangle,flag=0,i=37792,u=0.07018903407844768,v=0.4178593082076467,w=0.51623104844378,x=4.423153846686451 -color=red,shape=square,flag=0,i=37797,u=0.8846457829810535,v=0.3836708390038597,w=0.48851153130672803,x=5.524878267979573 -color=yellow,shape=circle,flag=1,i=37826,u=0.475413165340109,v=0.6431636817661038,w=0.5358323966835233,x=4.016207572604287 -color=yellow,shape=triangle,flag=1,i=37848,u=0.5301875061178689,v=0.7174358946480373,w=0.5204534980191006,x=5.123733284961607 -color=red,shape=square,flag=0,i=37857,u=0.05661060905871662,v=0.4710547386694294,w=0.49083669966368476,x=5.811809648966007 -color=red,shape=square,flag=1,i=37860,u=0.9105423239090816,v=0.5898894925016474,w=0.49093560580562834,x=2.784241420176178 -color=purple,shape=triangle,flag=1,i=37874,u=0.8920613889121304,v=0.9769346868387789,w=0.48031545216099264,x=6.7204180236434325 -color=red,shape=circle,flag=0,i=37879,u=0.5202040603671577,v=0.5036022298027305,w=0.47872938475253196,x=4.696322906932882 -color=red,shape=circle,flag=0,i=37881,u=0.6355303017741958,v=0.5422679932363801,w=0.4814113386152919,x=4.6337482851262175 -color=red,shape=circle,flag=0,i=37890,u=0.2679618284646147,v=0.20434926416351096,w=0.47872981372379353,x=5.239165025228325 -color=red,shape=square,flag=1,i=37899,u=0.08937751343132816,v=0.659121762566092,w=0.48573418756702497,x=4.448799084662819 -color=red,shape=square,flag=0,i=37900,u=0.3728047469420135,v=0.26721468211357013,w=0.488577145299949,x=4.335668206081306 -color=red,shape=circle,flag=0,i=37904,u=0.38973313650324204,v=0.34818113846591997,w=0.47964161975394404,x=3.925209744193989 -color=red,shape=square,flag=1,i=37921,u=0.42276415798324474,v=0.31936643953218746,w=0.4883701885674235,x=4.869112919312211 -color=purple,shape=circle,flag=0,i=37929,u=0.5688491538886703,v=0.8435424572337955,w=0.47907239214577607,x=4.0856422045434835 -color=yellow,shape=triangle,flag=1,i=37940,u=0.06644491248211615,v=0.30894326501321445,w=0.5010173719770583,x=4.618433011753282 -color=red,shape=square,flag=1,i=37945,u=0.057877336618272435,v=0.32622237125734654,w=0.4830235607858425,x=3.2252275305890343 -color=red,shape=circle,flag=0,i=37962,u=0.32541490790626215,v=0.2645515629620241,w=0.4644091257813923,x=5.502821402064531 -color=red,shape=circle,flag=0,i=37991,u=0.07837608386530126,v=0.003129990899428267,w=0.4643253278238599,x=5.717808976937164 -color=red,shape=triangle,flag=0,i=37996,u=0.7113145301435015,v=0.791731618541279,w=0.5184424442026617,x=5.835128716537877 -color=purple,shape=circle,flag=0,i=38009,u=0.33697913513251365,v=0.06893260171284266,w=0.478784432217052,x=5.611396203650816 -color=yellow,shape=circle,flag=1,i=38034,u=0.684195029105751,v=0.7233193748183292,w=0.5276825057882527,x=5.722804639501624 -color=purple,shape=circle,flag=0,i=38038,u=0.6200315487640226,v=0.013067187966193994,w=0.47790013239599505,x=4.589665914470007 -color=purple,shape=square,flag=1,i=38064,u=0.7057434590803936,v=0.42792501087695867,w=0.5174348950562011,x=3.2802671704499526 -color=blue,shape=square,flag=1,i=38066,u=0.31668619949729515,v=0.11956444846336645,w=0.4594740359810732,x=5.186171127610534 -color=red,shape=triangle,flag=1,i=38067,u=0.875794814367842,v=0.21641459361363635,w=0.5178752395612677,x=5.321137461419996 -color=red,shape=square,flag=0,i=38071,u=0.3256626294752947,v=0.6148458085827894,w=0.5004939462835706,x=2.4499124766995695 -color=yellow,shape=circle,flag=1,i=38082,u=0.04853033836650689,v=0.5983776442018087,w=0.5231959648615166,x=2.651862379271653 -color=yellow,shape=triangle,flag=1,i=38087,u=0.32294116442437093,v=0.6700313175035897,w=0.502276254738623,x=2.756331697768259 -color=red,shape=square,flag=0,i=38093,u=0.7499294156246596,v=0.6508728277299138,w=0.5064734180564547,x=7.382597747691133 -color=blue,shape=circle,flag=0,i=38125,u=0.6344852606010264,v=0.6660916079421064,w=0.4807928674739172,x=5.600137266617754 -color=yellow,shape=square,flag=1,i=38136,u=0.5735178978082498,v=0.5774844534624073,w=0.4784106163746017,x=5.9532220972827945 -color=red,shape=square,flag=0,i=38138,u=0.8056362959350857,v=0.4174494412106985,w=0.5038079307699739,x=5.026394010510235 -color=blue,shape=circle,flag=0,i=38146,u=0.2539024448077958,v=0.884643951894558,w=0.4848131943192717,x=4.543595966846689 -color=orange,shape=square,flag=0,i=38155,u=0.01151138943702712,v=0.15843271602381304,w=0.4985979653977076,x=4.8762378756122375 -color=yellow,shape=triangle,flag=0,i=38158,u=0.3691612234596072,v=0.2535009771881511,w=0.5059627126079003,x=6.673606513538689 -color=blue,shape=square,flag=1,i=38163,u=0.4418109621078311,v=0.4079445387163324,w=0.4738897836881537,x=5.730483165187514 -color=blue,shape=circle,flag=1,i=38170,u=0.8854240497164021,v=0.18093916440605629,w=0.4937564584620208,x=4.783455616430091 -color=purple,shape=square,flag=1,i=38177,u=0.2529398200034281,v=0.4487866039308104,w=0.5117396167380375,x=4.63327672853102 -color=red,shape=triangle,flag=0,i=38178,u=0.5100182852203953,v=0.5467970338830797,w=0.5311490298737129,x=5.481841631670299 -color=blue,shape=square,flag=0,i=38179,u=0.44311997832909333,v=0.8822675357673682,w=0.4696302664911805,x=4.902853000731272 -color=yellow,shape=triangle,flag=1,i=38192,u=0.3083388647811234,v=0.4008475196275283,w=0.5105726870440547,x=2.33862119270893 -color=red,shape=square,flag=0,i=38195,u=0.8245719643294682,v=0.020460106436641756,w=0.5221084606309792,x=4.080764174039779 -color=yellow,shape=square,flag=1,i=38199,u=0.012238308815962995,v=0.2713121713455563,w=0.4815208009898373,x=4.734545325452867 -color=yellow,shape=circle,flag=1,i=38204,u=0.22930578122394973,v=0.5374967914492481,w=0.5176602906280251,x=4.654189519289205 -color=yellow,shape=square,flag=1,i=38206,u=0.10397346835119414,v=0.8411680853188428,w=0.4806578866864495,x=2.972552893791658 -color=red,shape=square,flag=0,i=38213,u=0.6616760821586517,v=0.8141486053201816,w=0.5121067455622184,x=5.173696312086968 -color=red,shape=triangle,flag=0,i=38222,u=0.43708134051341363,v=0.27726363254231,w=0.5376767429588353,x=4.970385307123877 -color=red,shape=circle,flag=1,i=38224,u=0.3315878136991349,v=0.38444839636873396,w=0.4931642161573426,x=4.634867995797333 -color=blue,shape=square,flag=1,i=38225,u=0.3944086255999918,v=0.23096523530620183,w=0.4684293434454281,x=7.736460768940426 -color=blue,shape=triangle,flag=0,i=38240,u=0.6034138327555548,v=0.07740707548700532,w=0.5374078324759183,x=6.0163596650900075 -color=blue,shape=triangle,flag=1,i=38248,u=0.9444130181082422,v=0.6362851436246229,w=0.5444405207767633,x=7.097199805027187 -color=red,shape=square,flag=1,i=38256,u=0.7630157570446002,v=0.6314772706185438,w=0.48880179137838625,x=4.950824723236743 -color=purple,shape=triangle,flag=1,i=38280,u=0.44767951581214094,v=0.2618111624810212,w=0.48201754540885355,x=5.465800399013794 -color=red,shape=triangle,flag=0,i=38283,u=0.05975605137424489,v=0.14920249696275234,w=0.5226984641337482,x=5.993304754102831 -color=red,shape=square,flag=0,i=38288,u=0.7523123498098522,v=0.13214299693268383,w=0.484645478581809,x=4.729721018081452 -color=red,shape=square,flag=0,i=38329,u=0.0904323592590498,v=0.5625067921820546,w=0.48023752756051724,x=3.0013981194136297 -color=red,shape=circle,flag=0,i=38340,u=0.3718779852140627,v=0.2845722722367581,w=0.4840326007039287,x=2.6311172406519434 -color=blue,shape=square,flag=0,i=38362,u=0.27691088100777006,v=0.17423641880397767,w=0.47142937713923433,x=6.406856001117499 -color=red,shape=triangle,flag=0,i=38365,u=0.6301973919902031,v=0.6837001355048282,w=0.5252041051772034,x=6.165249187305097 -color=red,shape=triangle,flag=0,i=38397,u=0.03933959336336268,v=0.8019190231722675,w=0.5278573389465854,x=3.6585746751325074 -color=orange,shape=circle,flag=0,i=38398,u=0.32435590442219053,v=0.13240200445348405,w=0.5300177517942973,x=3.095166599968655 -color=blue,shape=square,flag=0,i=38404,u=0.2961654979999577,v=0.767379671137321,w=0.47748248316065633,x=3.679766557118045 -color=red,shape=triangle,flag=1,i=38416,u=0.8480106987964048,v=0.7880753021521691,w=0.5327232064519288,x=3.2784486569622655 -color=blue,shape=square,flag=1,i=38418,u=0.03892693514917556,v=0.9327839698057228,w=0.4858211992579442,x=5.129305885128638 -color=green,shape=triangle,flag=0,i=38437,u=0.9121928040529615,v=0.7492150146311876,w=0.46895704168875035,x=6.292158170903022 -color=red,shape=circle,flag=1,i=38442,u=0.9328376819647649,v=0.9397539951616704,w=0.4709666044555381,x=4.7791385443263 -color=purple,shape=square,flag=0,i=38447,u=0.3753623855254079,v=0.43836066536547025,w=0.50816038364672,x=4.086078520372214 -color=blue,shape=circle,flag=0,i=38460,u=0.3274108699775241,v=0.8955352759871484,w=0.48438504053775594,x=4.33075542676652 -color=yellow,shape=square,flag=0,i=38468,u=0.8616481308988164,v=0.06593252432760732,w=0.49258093054003455,x=4.264419728202852 -color=red,shape=triangle,flag=0,i=38479,u=0.5515224755527709,v=0.6214207604744554,w=0.5422795277962215,x=5.477065778234362 -color=red,shape=triangle,flag=0,i=38497,u=0.14555181559868924,v=0.33620742616330357,w=0.5250900758986774,x=4.981313085590917 -color=purple,shape=square,flag=0,i=38501,u=0.4689339358886033,v=0.17276473586863939,w=0.5010008330089102,x=5.496998076900414 -color=green,shape=triangle,flag=1,i=38508,u=0.7471676588317212,v=0.09486262903295972,w=0.4646017555378223,x=4.709132548687026 -color=blue,shape=circle,flag=1,i=38522,u=0.9430620960892159,v=0.5650516037192317,w=0.4817430779521384,x=3.715760396312945 -color=green,shape=circle,flag=1,i=38526,u=0.8112239397064422,v=0.44388434199823823,w=0.5147274104243988,x=5.41469831778723 -color=red,shape=circle,flag=1,i=38529,u=0.6201453301474494,v=0.5514884958151548,w=0.4808571110565734,x=3.493435506996492 -color=purple,shape=square,flag=0,i=38531,u=0.9649930376221458,v=0.08470567736017742,w=0.5015458132224414,x=5.347433759370861 -color=green,shape=triangle,flag=0,i=38539,u=0.44957049999246235,v=0.5578831832346758,w=0.46170107859494736,x=3.9735797853073147 -color=red,shape=circle,flag=1,i=38550,u=0.011024426724858483,v=-0.007015438410399956,w=0.4846832966233285,x=6.724607023990394 -color=purple,shape=triangle,flag=0,i=38552,u=0.6798990230423072,v=0.2830766724009439,w=0.4771305824450562,x=5.918381912626522 -color=blue,shape=triangle,flag=0,i=38576,u=0.957435908299061,v=0.5792749204252066,w=0.543778458514963,x=3.682739112099584 -color=blue,shape=triangle,flag=1,i=38577,u=0.5735872226554793,v=0.16694377801618931,w=0.5419922146488843,x=3.041728610570415 -color=red,shape=square,flag=1,i=38581,u=0.5445142030131437,v=0.7528656620079609,w=0.4766827102963688,x=7.855906132291646 -color=green,shape=triangle,flag=0,i=38585,u=0.1984887330894427,v=0.4987380220449995,w=0.46144136154406673,x=3.7213611376525964 -color=purple,shape=square,flag=0,i=38595,u=0.6802320560976709,v=0.8275125281885453,w=0.4976524446808186,x=6.551242347727435 -color=red,shape=square,flag=0,i=38597,u=0.45738178272298546,v=0.19822849425140054,w=0.4831820401466904,x=4.961154469727897 -color=red,shape=square,flag=0,i=38609,u=0.6674339925748345,v=0.1618083318450113,w=0.4753971221718779,x=5.603536312892259 -color=red,shape=square,flag=0,i=38611,u=0.44503758460834086,v=0.8600393090018252,w=0.4741759511599409,x=2.9025418266670697 -color=yellow,shape=triangle,flag=0,i=38624,u=0.11714521071879747,v=0.34942138100928744,w=0.5316971724836042,x=7.454140833709264 -color=red,shape=circle,flag=0,i=38631,u=0.7648297947070223,v=0.6776771877066503,w=0.4915904089093778,x=3.8514837143856315 -color=purple,shape=triangle,flag=0,i=38652,u=0.01594130911978997,v=0.5890795687313576,w=0.47608914341169645,x=3.927338633492965 -color=purple,shape=square,flag=0,i=38663,u=0.15530651406707752,v=0.032180325518073816,w=0.507926038157922,x=4.224852492366136 -color=blue,shape=square,flag=1,i=38676,u=0.33803008812467517,v=0.9430048066012642,w=0.4826416690794807,x=7.915449951670008 -color=red,shape=square,flag=0,i=38698,u=0.4260617070738505,v=0.6679160107084341,w=0.4675325862982471,x=3.910816611978308 -color=red,shape=triangle,flag=0,i=38703,u=0.889343915415998,v=0.6047262639753926,w=0.5168713393637955,x=7.049840190714019 -color=red,shape=square,flag=0,i=38734,u=0.3564244365513213,v=0.44776358853917464,w=0.4617328476889762,x=5.007991880192758 -color=red,shape=square,flag=0,i=38736,u=0.740126370948802,v=0.7705393077048693,w=0.46144045361425906,x=5.483986766874151 -color=yellow,shape=square,flag=0,i=38748,u=0.2649295532261856,v=0.7818417150321095,w=0.5153526161795142,x=5.421038553603055 -color=yellow,shape=circle,flag=1,i=38749,u=0.3727998029310805,v=0.9346956478077907,w=0.5162228730057041,x=5.640991448007491 -color=red,shape=triangle,flag=0,i=38751,u=0.03734333974395809,v=0.1484023991549045,w=0.516697300114278,x=4.5812465361079635 -color=purple,shape=circle,flag=0,i=38769,u=0.336135273863733,v=0.10478466359914584,w=0.4883418813688285,x=3.7004061367284944 -color=red,shape=circle,flag=0,i=38773,u=0.8562965250990252,v=0.9079418463092541,w=0.494051799146844,x=4.4860224769938615 -color=green,shape=circle,flag=1,i=38775,u=0.5758517203810649,v=0.863665290241774,w=0.5295105874705537,x=7.108026075104436 -color=purple,shape=triangle,flag=0,i=38784,u=0.3217318967959222,v=0.9188365818667709,w=0.47572548117638436,x=2.8021200664712578 -color=red,shape=circle,flag=0,i=38803,u=0.7915146404267683,v=0.861964617574392,w=0.49483406287811166,x=4.660011755943997 -color=purple,shape=square,flag=0,i=38820,u=0.3273848048806479,v=0.721753425694558,w=0.506073146796731,x=5.063661923476471 -color=blue,shape=square,flag=0,i=38841,u=0.6913762315865113,v=0.12001632989361599,w=0.4925570122420449,x=4.7586521020289405 -color=purple,shape=square,flag=0,i=38846,u=0.9495507473776134,v=0.9392032827570884,w=0.5014704311333378,x=4.826822412761536 -color=red,shape=triangle,flag=0,i=38853,u=0.41641136027077863,v=0.46384944083018376,w=0.5059150065959896,x=6.2449010207835975 -color=orange,shape=circle,flag=1,i=38857,u=0.7561616060797361,v=0.6011829160290465,w=0.5170183460778673,x=5.464145004173815 -color=purple,shape=triangle,flag=1,i=38873,u=0.3412836770559612,v=0.5106988751826204,w=0.48578647491703114,x=8.253247926402961 -color=green,shape=triangle,flag=0,i=38883,u=0.45877660452687863,v=0.5211069169505502,w=0.4681733218056553,x=3.3275261814625985 -color=green,shape=triangle,flag=0,i=38889,u=0.8883676445361395,v=0.6015417053453661,w=0.47105973239501653,x=6.078143505674809 -color=purple,shape=circle,flag=0,i=38901,u=0.7319690780944992,v=0.4567889897970464,w=0.4912731260449902,x=4.184719957290204 -color=yellow,shape=square,flag=1,i=38928,u=0.9240311975534296,v=0.7019360344691004,w=0.5077523736033206,x=4.472317293716402 -color=green,shape=triangle,flag=0,i=38934,u=0.6380126796582992,v=0.9449695875523221,w=0.4624450508923107,x=4.273213691991617 -color=yellow,shape=square,flag=1,i=38961,u=0.1268351843656087,v=0.5211273692895315,w=0.5033684401053728,x=5.625293954232506 -color=green,shape=triangle,flag=0,i=38966,u=0.9096579654690838,v=0.6779907501390764,w=0.45893787607152725,x=4.725850414653185 -color=red,shape=circle,flag=0,i=38978,u=0.3652891236125678,v=0.37234355884923465,w=0.4977688696494028,x=3.8844029674106095 -color=red,shape=circle,flag=1,i=38980,u=0.15669341658400626,v=0.18744318394269907,w=0.49922521826079624,x=5.595762817968466 -color=yellow,shape=square,flag=1,i=38983,u=0.5034768929988753,v=0.648289357062001,w=0.50383746914453,x=5.184546230870219 -color=red,shape=triangle,flag=1,i=38997,u=0.11076561819085617,v=0.5599481660206294,w=0.5125690584242865,x=4.642475797173814 -color=yellow,shape=square,flag=1,i=39009,u=0.08470525262121531,v=0.9546622912906018,w=0.5061945768566833,x=2.3578447423524653 -color=red,shape=triangle,flag=1,i=39014,u=0.6613462567228076,v=0.47275595437501927,w=0.509598966206032,x=3.4577807597878283 -color=red,shape=circle,flag=1,i=39017,u=0.1553047699109077,v=0.23426338864293275,w=0.5053760937764255,x=4.354064782280358 -color=yellow,shape=circle,flag=1,i=39031,u=0.1895808365583801,v=0.41451067853476176,w=0.5193137946419872,x=5.994203236731685 -color=yellow,shape=square,flag=1,i=39036,u=0.4366319397585604,v=0.8853642091072212,w=0.5070794369862943,x=5.939429312334467 -color=red,shape=square,flag=1,i=39037,u=0.7634290148595653,v=0.5813909230046601,w=0.49179306499158965,x=5.997049936652246 -color=red,shape=square,flag=1,i=39059,u=0.8315658666403111,v=0.8784952621893528,w=0.4892572830056315,x=2.880528359468393 -color=red,shape=triangle,flag=0,i=39067,u=0.8704226366700998,v=0.533469043498947,w=0.5142011050681139,x=5.662784664121824 -color=red,shape=square,flag=0,i=39071,u=0.7967456882344144,v=0.20866378466645807,w=0.4946225164856906,x=6.543629849066412 -color=red,shape=square,flag=0,i=39072,u=0.030280521554805206,v=0.12321405546738207,w=0.48988027462368877,x=5.847872034205654 -color=blue,shape=circle,flag=1,i=39075,u=0.37520524903253005,v=0.20556677021060044,w=0.4861060752648033,x=4.98529466970652 -color=yellow,shape=circle,flag=1,i=39085,u=0.6761059171622457,v=0.4496309961242564,w=0.5177998244766702,x=3.8911030920443372 -color=red,shape=square,flag=0,i=39096,u=0.8386893229214152,v=0.18037298392866496,w=0.488742788476033,x=5.5802668829031745 -color=red,shape=square,flag=1,i=39101,u=0.3410758622142557,v=0.4265100182014795,w=0.4861798012237103,x=4.09281113615416 -color=orange,shape=triangle,flag=1,i=39104,u=0.5375973260418243,v=0.025378580102561443,w=0.5209130105188473,x=4.374368093971907 -color=red,shape=circle,flag=1,i=39108,u=0.06315594916114631,v=0.0473204457942318,w=0.5020600489686915,x=5.71888396030171 -color=yellow,shape=circle,flag=1,i=39140,u=0.04163266536526933,v=0.3735542532689454,w=0.5129004344973573,x=6.2006094397134355 -color=red,shape=circle,flag=0,i=39144,u=0.1252950270739791,v=0.2085369692489441,w=0.49511423232770985,x=5.6882736815440795 -color=green,shape=square,flag=0,i=39145,u=0.5945283933600861,v=0.5702218044889795,w=0.49801271180610407,x=5.733330077212044 -color=red,shape=square,flag=0,i=39147,u=0.32849756546704034,v=0.19330653960285815,w=0.49652552518608334,x=3.078153862828897 -color=red,shape=square,flag=0,i=39162,u=0.5082347260570108,v=0.018104333171229392,w=0.5047709326931358,x=6.14569285722409 -color=red,shape=square,flag=0,i=39169,u=0.35611963306648264,v=0.46415265378112647,w=0.5052790009618097,x=2.5208047949411108 -color=red,shape=circle,flag=0,i=39179,u=0.9934462881309655,v=1.0724998185026013,w=0.49083561169685813,x=5.960896195845709 -color=red,shape=square,flag=0,i=39193,u=0.8107253161858635,v=0.06119001723485462,w=0.5040571217154186,x=4.950845865162775 -color=blue,shape=square,flag=0,i=39212,u=0.3666067516985615,v=0.9543687651909756,w=0.4904069701798997,x=4.5900604435108505 -color=red,shape=square,flag=0,i=39214,u=0.3038520855773875,v=0.4570120300363385,w=0.5134766736400802,x=4.045412169596741 -color=purple,shape=square,flag=0,i=39220,u=0.40811899601274493,v=0.42258580068959894,w=0.5079708471546207,x=5.8434095706944085 -color=red,shape=circle,flag=0,i=39223,u=0.2548848991283086,v=0.23824052909393476,w=0.49368762796221016,x=3.9351541163129777 -color=blue,shape=circle,flag=0,i=39231,u=0.5467918928636517,v=0.436802594210994,w=0.47161891289677615,x=7.006859054118415 -color=yellow,shape=circle,flag=0,i=39251,u=0.995515315608599,v=0.664557028559361,w=0.515423435042191,x=5.169630751365037 -color=purple,shape=triangle,flag=0,i=39260,u=0.6875459706351555,v=0.6177647301665427,w=0.5019041927371927,x=3.0241900924198646 -color=yellow,shape=square,flag=1,i=39270,u=0.5118092734588805,v=0.25442788832414454,w=0.5019041582410692,x=5.87099123069972 -color=blue,shape=circle,flag=0,i=39277,u=0.25862296537153906,v=0.9195126012211688,w=0.4710367246140722,x=2.9978468725276795 -color=green,shape=circle,flag=0,i=39300,u=0.41020213039425923,v=0.6728517575614876,w=0.5265279632822963,x=4.921329419537524 -color=green,shape=circle,flag=1,i=39301,u=0.5864952275788667,v=0.10513511084979821,w=0.523894875619943,x=5.497434710917061 -color=green,shape=square,flag=0,i=39335,u=0.6400469949657999,v=0.06628578427370857,w=0.5148803991737776,x=4.132880393291873 -color=yellow,shape=circle,flag=1,i=39352,u=0.6479856313540792,v=0.2373533542788151,w=0.5178086170960043,x=5.415760588876039 -color=red,shape=square,flag=1,i=39353,u=0.9744182926995872,v=0.6439304774212721,w=0.4937014311429811,x=4.709992211021606 -color=purple,shape=circle,flag=0,i=39363,u=0.8750696087366453,v=0.8443946111777411,w=0.5150081590379324,x=6.9769606087666 -color=purple,shape=triangle,flag=0,i=39369,u=0.9160850795306806,v=0.9932014003101209,w=0.5018352998115054,x=4.793790312960973 -color=purple,shape=square,flag=0,i=39384,u=0.22368754258934542,v=0.24624496014649055,w=0.49496439725646624,x=3.6102318824700483 -color=purple,shape=circle,flag=0,i=39398,u=0.21517806608498646,v=0.8196968078409886,w=0.5187868513576659,x=5.9440824615539904 -color=yellow,shape=triangle,flag=1,i=39411,u=0.5646911415753773,v=0.6113202067574828,w=0.515655244170274,x=4.547456465946942 -color=red,shape=circle,flag=0,i=39414,u=0.08207536759740874,v=0.05545527956716427,w=0.5038531960132209,x=4.58456499360184 -color=purple,shape=square,flag=0,i=39417,u=0.7065466075694898,v=0.4544578679835566,w=0.49740396282091665,x=6.211697830216022 -color=red,shape=square,flag=0,i=39421,u=0.1514587929504907,v=0.015800774708563337,w=0.48889076339317666,x=6.278227085881568 -color=red,shape=triangle,flag=1,i=39424,u=0.4036420254819122,v=0.2208297853446305,w=0.5351694405156383,x=5.73245815993143 -color=red,shape=square,flag=0,i=39434,u=0.5092714136678518,v=0.08267959367777122,w=0.4897421326300275,x=6.189223273977316 -color=green,shape=circle,flag=0,i=39437,u=0.47143849771730817,v=0.7206230774891145,w=0.5105775019030652,x=3.096843331850879 -color=blue,shape=triangle,flag=1,i=39452,u=0.4108370944684231,v=0.17508398140092007,w=0.516846412069019,x=5.042433947122654 -color=red,shape=circle,flag=0,i=39459,u=0.8677153645774535,v=0.900316895018318,w=0.4936890101328895,x=6.019595126076823 -color=blue,shape=triangle,flag=1,i=39474,u=0.9553019148659684,v=0.45765246445471564,w=0.5142487080177939,x=4.825890094413331 -color=blue,shape=square,flag=1,i=39477,u=0.34349584856688986,v=0.5427373929948094,w=0.4827067468359886,x=6.161423400652301 -color=purple,shape=square,flag=0,i=39478,u=0.6181329264451106,v=0.2740582967902253,w=0.500325683569904,x=5.988873682044269 -color=red,shape=circle,flag=0,i=39485,u=0.2933425185682206,v=0.19696260825815642,w=0.49378278435690165,x=4.99296788607792 -color=blue,shape=square,flag=1,i=39508,u=0.6018296981161007,v=0.48671247321274247,w=0.4728499003115625,x=4.537908610131487 -color=blue,shape=square,flag=0,i=39515,u=0.5917021785500398,v=0.7180729704428234,w=0.47038782817852604,x=6.572393320560106 -color=blue,shape=triangle,flag=0,i=39523,u=0.7976643048373657,v=0.5657690973064404,w=0.5040865190265051,x=5.439688669204595 -color=red,shape=circle,flag=0,i=39535,u=0.01734841963435818,v=0.020433763178842223,w=0.47923692839106113,x=6.954518602995847 -color=red,shape=triangle,flag=0,i=39540,u=0.9975680760617336,v=0.5858113294982089,w=0.5239219495275551,x=3.583829045080017 -color=red,shape=triangle,flag=0,i=39543,u=0.5037390448566906,v=0.40265455325217936,w=0.5253108909612321,x=3.9629273595743437 -color=blue,shape=circle,flag=0,i=39547,u=0.44659669164426985,v=0.8581453296641002,w=0.4858215950748845,x=5.292404928997199 -color=red,shape=triangle,flag=1,i=39552,u=0.8261355187097076,v=0.6093458112426304,w=0.5222035903278082,x=4.906427613398106 -color=blue,shape=square,flag=0,i=39554,u=0.4847317606543907,v=0.4958025517192002,w=0.4738606886529594,x=5.414138281330171 -color=red,shape=square,flag=1,i=39556,u=0.5443966580579718,v=0.45841680799768203,w=0.48637556520255476,x=3.024551071286789 -color=purple,shape=square,flag=0,i=39561,u=0.8640637777725868,v=0.18496268115707704,w=0.498140287852323,x=4.364089163957901 -color=green,shape=square,flag=1,i=39562,u=0.5905261188438536,v=0.6422245286081031,w=0.5138031687405284,x=6.26814868803615 -color=red,shape=triangle,flag=0,i=39565,u=0.9561292202846399,v=0.9668194684210542,w=0.5178075470310429,x=5.60019581633746 -color=red,shape=circle,flag=0,i=39569,u=0.9695832824925855,v=0.9054094881243873,w=0.48100492235765596,x=5.416982353829602 -color=red,shape=square,flag=1,i=39576,u=0.004164445205783074,v=0.5358188259589823,w=0.4842846807116942,x=6.608741385162876 -color=purple,shape=triangle,flag=0,i=39582,u=0.06949449473715041,v=0.19234858063365412,w=0.49795450728510976,x=6.45445327635169 -color=purple,shape=square,flag=0,i=39603,u=0.06157543533408816,v=0.7314783967384737,w=0.49407401633436343,x=5.197801587627036 -color=purple,shape=square,flag=0,i=39614,u=0.33658041714586906,v=0.019206731167908053,w=0.49694622901044894,x=5.9178360928726255 -color=green,shape=circle,flag=0,i=39630,u=0.8845282032005826,v=0.172516015590907,w=0.5125949475751116,x=6.006543906800754 -color=red,shape=triangle,flag=0,i=39631,u=0.7844979349161723,v=0.23750260632865972,w=0.515044332417428,x=3.5797982962971004 -color=green,shape=circle,flag=0,i=39663,u=0.8889675338844115,v=0.8498083967833386,w=0.5048829219725421,x=4.346374870634605 -color=green,shape=triangle,flag=0,i=39673,u=0.26766239120667257,v=0.06097946000033494,w=0.4585066889177896,x=5.894437062355936 -color=red,shape=circle,flag=1,i=39698,u=0.1173908053575089,v=0.09611446635012184,w=0.47551198263215205,x=6.296276424483339 -color=yellow,shape=square,flag=1,i=39703,u=0.20142964823164766,v=0.18058821918715284,w=0.49137384443342447,x=6.125731071772061 -color=blue,shape=square,flag=0,i=39709,u=0.553868075349823,v=0.6606686727868244,w=0.4718475547749687,x=4.768194563131835 -color=red,shape=square,flag=0,i=39711,u=0.9720787852898816,v=0.7072650378533071,w=0.4934676899614167,x=4.211604713055995 -color=yellow,shape=square,flag=1,i=39717,u=0.15254906187727868,v=0.38871430549326036,w=0.49165626535368107,x=7.379618947124032 -color=yellow,shape=triangle,flag=0,i=39729,u=0.3406651787908065,v=0.7799297058381454,w=0.5164275222630685,x=5.536565084664942 -color=green,shape=square,flag=1,i=39733,u=0.7469905910748575,v=0.30802777422029715,w=0.5203235768840627,x=2.6697495842017864 -color=blue,shape=square,flag=1,i=39737,u=0.211788611644823,v=0.16738311426935804,w=0.47511503302109503,x=6.23205188154503 -color=red,shape=square,flag=0,i=39738,u=0.39159887437445307,v=0.7199605459574635,w=0.4872463773932245,x=5.423874298368646 -color=blue,shape=square,flag=1,i=39752,u=0.3652915738067196,v=0.7443797186837637,w=0.47992192966429087,x=5.429858542746497 -color=red,shape=triangle,flag=0,i=39769,u=0.08646867670314551,v=0.08843033220393537,w=0.5513404104853943,x=6.878343202242778 -color=blue,shape=square,flag=0,i=39777,u=0.20484721225053282,v=0.4661712168180666,w=0.48665786202900607,x=5.2961271387389655 -color=blue,shape=triangle,flag=1,i=39787,u=0.7567737011270878,v=0.32349488254926695,w=0.5129160929626151,x=3.8314523589367924 -color=red,shape=square,flag=0,i=39789,u=0.9479363213355183,v=0.4795817752837438,w=0.4822656993247,x=6.830410436201902 -color=green,shape=circle,flag=0,i=39792,u=0.2907685773558777,v=0.8731326700924537,w=0.5099500179293874,x=4.762207368025709 -color=blue,shape=square,flag=1,i=39795,u=0.15491812175550101,v=0.023550742079665565,w=0.48865565972064195,x=5.089974987985447 -color=purple,shape=triangle,flag=0,i=39815,u=0.35034166193227867,v=0.020341753938377338,w=0.5082622310079358,x=4.516956315272891 -color=blue,shape=triangle,flag=0,i=39829,u=0.19022816832990286,v=0.27381243034108327,w=0.5084215290532271,x=6.643229485686764 -color=purple,shape=triangle,flag=0,i=39849,u=0.011830854092107268,v=0.7466895614700884,w=0.5078861823801148,x=5.763338649318015 -color=blue,shape=circle,flag=1,i=39864,u=0.5286269860092916,v=0.09174636536052938,w=0.4839097995215383,x=5.245328225982277 -color=red,shape=square,flag=1,i=39874,u=0.017999673369659464,v=0.9022289169681199,w=0.4735626819075993,x=4.671385845088863 -color=red,shape=triangle,flag=0,i=39894,u=0.5929205919651507,v=0.5603993820061481,w=0.5575999627986716,x=5.105302929576312 -color=yellow,shape=square,flag=1,i=39900,u=0.8916354235969586,v=0.7857427902722474,w=0.47617734274964424,x=5.025706892371844 -color=red,shape=triangle,flag=1,i=39959,u=0.012772170008167327,v=0.07051393834139175,w=0.5582320757985528,x=6.515365898567603 -color=red,shape=square,flag=0,i=39963,u=0.3197367133413562,v=0.10412619413556723,w=0.4602761075396893,x=6.897129749637106 -color=red,shape=circle,flag=1,i=39992,u=0.2622598902731341,v=0.3580980981637506,w=0.4722640402950396,x=5.06230000166988 -color=yellow,shape=square,flag=1,i=39996,u=0.9738841115069133,v=0.30717572010172234,w=0.475067335019385,x=8.138199996818354 -color=green,shape=triangle,flag=0,i=40003,u=0.2595720628019772,v=0.29233364319412536,w=0.4416916820683191,x=5.039227185057932 -color=yellow,shape=circle,flag=1,i=40007,u=0.546523666600999,v=0.9608038475313697,w=0.4837411900879732,x=6.252574838238434 -color=orange,shape=square,flag=1,i=40022,u=0.764742255673633,v=0.3735179888280705,w=0.49808223124190154,x=2.7290452358014146 -color=green,shape=triangle,flag=0,i=40024,u=0.9369115965405426,v=0.543404003351943,w=0.44511272715032324,x=7.287797243559415 -color=yellow,shape=circle,flag=1,i=40027,u=0.7912279944547849,v=0.4466997015900954,w=0.4871534480092622,x=6.783131459101508 -color=red,shape=triangle,flag=1,i=40033,u=0.3461566834066091,v=0.33243600472851575,w=0.5461259501717964,x=3.0340888140346185 -color=blue,shape=square,flag=0,i=40038,u=0.5308869492507371,v=0.6032038924105055,w=0.5005736474388827,x=4.973886006800854 -color=red,shape=square,flag=0,i=40048,u=0.428795415660986,v=0.7380274411083768,w=0.4792342730468049,x=6.567457918921472 -color=blue,shape=square,flag=1,i=40049,u=0.34166912207856603,v=0.8327014292637935,w=0.49592881928346727,x=5.92458450568603 -color=yellow,shape=circle,flag=1,i=40054,u=0.5561122199642279,v=0.0028493163097591534,w=0.48751301099357564,x=5.6412088568231775 -color=blue,shape=square,flag=1,i=40058,u=0.30987001700396655,v=0.8839709700753099,w=0.49914722174633824,x=4.013303794389007 -color=blue,shape=triangle,flag=0,i=40070,u=0.2271139811341576,v=0.9972265275057707,w=0.5042128678302498,x=4.557252215397245 -color=red,shape=square,flag=0,i=40074,u=0.8963642740150665,v=0.5964074652491322,w=0.47743036114879545,x=4.365911200789994 -color=blue,shape=triangle,flag=0,i=40079,u=0.6415189362790564,v=0.2790523457099494,w=0.5044889560260606,x=4.4895918312870355 -color=blue,shape=circle,flag=1,i=40099,u=0.7197685198379256,v=0.4347940506722363,w=0.4820463817553045,x=3.534448259614519 -color=red,shape=square,flag=0,i=40112,u=0.39104810355783814,v=0.9851271188367299,w=0.4786667573710622,x=6.307719358232892 -color=red,shape=square,flag=0,i=40117,u=0.600924830991792,v=0.23071159514109874,w=0.4770169798669659,x=5.569954665957255 -color=red,shape=circle,flag=1,i=40123,u=0.5415517243642339,v=0.4830519911092873,w=0.4726137110014219,x=6.127840486254293 -color=purple,shape=triangle,flag=0,i=40144,u=0.541761838940377,v=0.9264512959889604,w=0.5130323486392376,x=3.6586127405988536 -color=blue,shape=triangle,flag=0,i=40162,u=0.29243460541559596,v=0.6744410500024415,w=0.5026381948680212,x=5.8265442314175955 -color=red,shape=triangle,flag=0,i=40175,u=0.1564732328065278,v=0.24314808298011803,w=0.5418818025802538,x=4.441802754098668 -color=yellow,shape=square,flag=1,i=40186,u=0.024433639695421228,v=0.9392705213913216,w=0.487225627309413,x=4.40986026307741 -color=purple,shape=square,flag=0,i=40187,u=0.36494982158182254,v=0.7491013055030736,w=0.49892339544862074,x=4.481404168274309 -color=yellow,shape=circle,flag=1,i=40188,u=0.30724989486511367,v=0.6087970132622745,w=0.5022534811698548,x=6.443804313933138 -color=yellow,shape=square,flag=1,i=40205,u=0.7273005003868648,v=0.11698694546772603,w=0.49123970666869876,x=4.066446099379594 -color=purple,shape=triangle,flag=0,i=40206,u=0.8419994001438059,v=0.4511699159384033,w=0.5075410555790757,x=4.920803384806212 -color=red,shape=square,flag=0,i=40207,u=0.29546702649377976,v=0.7859074991032909,w=0.4779569219799509,x=3.769994999411825 -color=purple,shape=square,flag=0,i=40209,u=0.25190692338867926,v=0.13564983177672008,w=0.4985303221261576,x=4.108993113180069 -color=yellow,shape=triangle,flag=1,i=40211,u=0.22698355978729134,v=0.8416204814932413,w=0.5047416284030152,x=4.867176354458826 -color=red,shape=square,flag=1,i=40265,u=0.9716859435742579,v=0.19469075755336318,w=0.489751512718313,x=5.71915087076871 -color=green,shape=triangle,flag=1,i=40270,u=0.06627365668608731,v=0.9535496678537436,w=0.4481542899331256,x=4.558220149223964 -color=yellow,shape=circle,flag=1,i=40315,u=0.6280807488381492,v=0.6758294962994147,w=0.5015582298229407,x=5.482064733393159 -color=yellow,shape=circle,flag=1,i=40319,u=0.3929534020474553,v=0.5836415948143827,w=0.49983089220161,x=6.045990918282446 -color=yellow,shape=square,flag=1,i=40328,u=0.5820644631862629,v=0.35706292051124566,w=0.5143514678699764,x=5.727779420801414 -color=blue,shape=square,flag=1,i=40355,u=0.40252632111500486,v=0.06066838582196632,w=0.5104408352048592,x=7.184418484522475 -color=green,shape=square,flag=0,i=40373,u=0.9368388199061015,v=0.285104100719457,w=0.4964870334481603,x=4.567357536587003 -color=red,shape=triangle,flag=1,i=40377,u=0.12678209202773827,v=0.5502625053793366,w=0.5468920720728657,x=6.906806670792279 -color=red,shape=circle,flag=0,i=40400,u=0.09973373500079907,v=0.07022044013142184,w=0.47181103539100266,x=6.510154327497104 -color=blue,shape=triangle,flag=1,i=40413,u=0.9334210137035209,v=0.25830827175843374,w=0.5131736002358351,x=4.77041058079687 -color=red,shape=square,flag=1,i=40416,u=0.7223755270344265,v=0.33344601000513996,w=0.4840363534853566,x=6.1459144800384315 -color=blue,shape=square,flag=0,i=40439,u=0.7417279035246976,v=0.5451620706961755,w=0.5006347727358323,x=3.300636947393009 -color=yellow,shape=circle,flag=1,i=40447,u=0.5975299201005286,v=0.40419080279383723,w=0.4934558348811598,x=3.6011551787102345 -color=red,shape=square,flag=0,i=40450,u=0.19618094137590136,v=0.18934014312096203,w=0.4783131267124837,x=5.273132451051901 -color=red,shape=triangle,flag=0,i=40469,u=0.8817838716003784,v=0.8071143104611547,w=0.5527616698688461,x=4.529886302096688 -color=green,shape=triangle,flag=0,i=40472,u=0.8463293433841946,v=0.43079526044877614,w=0.45669726828682,x=6.658687275454419 -color=orange,shape=triangle,flag=1,i=40482,u=0.09719669863578317,v=0.9542075038903742,w=0.5114357746931003,x=5.890787655368153 -color=green,shape=square,flag=0,i=40486,u=0.8386341684414829,v=0.8072870935662964,w=0.5015772295856746,x=5.347370781343389 -color=red,shape=square,flag=0,i=40495,u=0.42602920356188356,v=0.8046761689858815,w=0.4701341876184085,x=4.78536398896458 -color=blue,shape=triangle,flag=1,i=40507,u=0.5781226458185247,v=0.5433493291092453,w=0.5213700198910548,x=4.269212880065585 -color=red,shape=triangle,flag=0,i=40511,u=0.8078131796571932,v=0.6958244573624209,w=0.5434261697780716,x=4.212625508599345 -color=blue,shape=square,flag=1,i=40513,u=0.8515404918503977,v=0.4950299440035032,w=0.49331137090636235,x=4.873688308765054 -color=red,shape=square,flag=0,i=40536,u=0.29821255325239593,v=0.8099283947092014,w=0.4806279883656576,x=4.374504856035643 -color=yellow,shape=triangle,flag=1,i=40544,u=0.5576353082726088,v=0.3970836971495675,w=0.49633374375687517,x=5.733379761426601 -color=yellow,shape=triangle,flag=1,i=40593,u=0.9908727748501635,v=0.9676283907521892,w=0.5019612304905726,x=4.674444806193367 -color=red,shape=circle,flag=0,i=40594,u=0.11674066618334178,v=0.09023372455557184,w=0.48049073688711536,x=5.13302778687985 -color=purple,shape=square,flag=0,i=40597,u=0.3492940512796332,v=0.9673229033712439,w=0.49704641743407907,x=7.212836465274433 -color=blue,shape=triangle,flag=1,i=40624,u=0.8162808189972856,v=0.49953643979915785,w=0.5105490880991683,x=4.731723838834704 -color=red,shape=triangle,flag=0,i=40625,u=0.2989387938029462,v=0.21764995351122096,w=0.540044260381093,x=5.945125771878374 -color=red,shape=triangle,flag=0,i=40639,u=0.3601192225847776,v=0.16956569410415367,w=0.537265707842095,x=3.017915454400304 -color=green,shape=triangle,flag=1,i=40649,u=0.5245847279601498,v=0.6826424077937555,w=0.4544253043939622,x=4.389125679305141 -color=yellow,shape=square,flag=1,i=40664,u=0.9885773514745881,v=0.6105612255252967,w=0.5257605978316502,x=3.5799857260243293 -color=purple,shape=circle,flag=0,i=40678,u=0.243723853165545,v=0.1821879659809228,w=0.49447491359844953,x=5.986878367230524 -color=yellow,shape=square,flag=1,i=40683,u=0.389139248822608,v=0.29929440304684873,w=0.5218816792050955,x=5.711407349146634 -color=orange,shape=circle,flag=1,i=40689,u=0.2922946102013083,v=0.8984319222583506,w=0.5226900900636086,x=5.748448294105998 -color=blue,shape=triangle,flag=1,i=40713,u=0.2638578555186999,v=0.32626221995511817,w=0.5092620078581488,x=5.781044482017951 -color=red,shape=square,flag=0,i=40727,u=0.6248255135567757,v=0.6942025924840597,w=0.4689421346564869,x=4.928995571344981 -color=green,shape=triangle,flag=0,i=40730,u=0.24689259155257304,v=0.9453777091780577,w=0.46326003770942237,x=3.9774920738405286 -color=green,shape=circle,flag=0,i=40735,u=0.54361731859941,v=0.3292411229513592,w=0.5149143717230693,x=5.553641351015876 -color=yellow,shape=square,flag=1,i=40742,u=0.24847094475505616,v=0.1468553413352739,w=0.5166088143870115,x=3.3302202837109767 -color=green,shape=circle,flag=0,i=40750,u=0.1953446809965247,v=0.6669462160489693,w=0.5127609357344466,x=4.0648220863952185 -color=red,shape=square,flag=1,i=40753,u=0.2482649569337365,v=0.5468200264929788,w=0.47888313529202103,x=6.244672991570411 -color=red,shape=square,flag=0,i=40760,u=0.1565404857446866,v=0.9552720912259636,w=0.47887670604729,x=5.008396499448484 -color=purple,shape=square,flag=0,i=40763,u=0.7980154023490905,v=0.18362842111060684,w=0.5034074859932886,x=3.1052490476115815 -color=red,shape=triangle,flag=1,i=40766,u=0.10148508522988653,v=0.6749200091056718,w=0.5272583494058288,x=4.927605026849144 -color=red,shape=circle,flag=0,i=40768,u=0.3685289658276566,v=0.42530915019818777,w=0.5008733065270098,x=6.60437741887262 -color=red,shape=triangle,flag=0,i=40773,u=0.062414611390882,v=0.6447313268314849,w=0.5291563651803365,x=4.399995056769941 -color=green,shape=square,flag=1,i=40782,u=0.3505984244685435,v=0.465967717842515,w=0.4841104719509502,x=4.62313535479982 -color=red,shape=triangle,flag=0,i=40800,u=0.537964663415434,v=0.7519542908220004,w=0.526181268517801,x=4.443272861507481 -color=green,shape=square,flag=1,i=40813,u=0.5289840309445121,v=0.10394129575246724,w=0.48932302701561703,x=5.552179894913315 -color=blue,shape=circle,flag=0,i=40818,u=0.4864258195649044,v=0.3512910752065711,w=0.49431116334674097,x=5.708729268795683 -color=purple,shape=triangle,flag=0,i=40833,u=0.9776358235580903,v=0.8314235657286768,w=0.5194161174800925,x=4.28697326542846 -color=red,shape=circle,flag=1,i=40839,u=0.7319923668238524,v=0.6968009050681002,w=0.5000359440996291,x=4.595355498993931 -color=red,shape=circle,flag=0,i=40856,u=0.6668808350266331,v=0.5721907312804069,w=0.505326872199448,x=5.506691730649756 -color=purple,shape=triangle,flag=0,i=40857,u=0.7967412822368806,v=0.7119498900414054,w=0.520628165659509,x=4.675628286018475 -color=red,shape=triangle,flag=0,i=40870,u=0.47957344269608304,v=0.839257710714516,w=0.5224376985630319,x=4.824603300802242 -color=green,shape=square,flag=0,i=40872,u=0.27016769622638914,v=0.5437998876982383,w=0.48762848481292576,x=6.745588834970204 -color=orange,shape=circle,flag=0,i=40878,u=0.36706621318023924,v=0.9698982896181795,w=0.5194393610321152,x=4.877797049432641 -color=yellow,shape=square,flag=1,i=40897,u=0.4019283503485094,v=0.0037504417809507418,w=0.5068045481149688,x=5.661258661659244 -color=red,shape=triangle,flag=1,i=40899,u=0.7622444977219807,v=0.13532047409663006,w=0.5231148573440267,x=3.8140192857716806 -color=red,shape=triangle,flag=1,i=40907,u=0.5317162108988236,v=0.9032940349022393,w=0.5224512780828396,x=4.85896471624401 -color=yellow,shape=square,flag=1,i=40917,u=0.8297382129568323,v=0.23528709172060958,w=0.5097151973847575,x=3.041190360751321 -color=yellow,shape=circle,flag=1,i=40920,u=0.2187439834269861,v=0.30167565493257154,w=0.497839617549306,x=5.718425020284612 -color=red,shape=circle,flag=0,i=40930,u=0.4507346145614457,v=0.356013765145489,w=0.5139243590852092,x=4.1811086790605865 -color=red,shape=square,flag=1,i=40944,u=0.21612316339095672,v=0.5965080435398413,w=0.46558046836939543,x=5.068799087018072 -color=blue,shape=square,flag=1,i=40956,u=0.36474176773331146,v=0.8454453581782515,w=0.49727071171338044,x=3.860739839507016 -color=purple,shape=circle,flag=0,i=40959,u=0.19736177422410361,v=0.40712047453374944,w=0.49587377877530003,x=5.912429014001464 -color=red,shape=circle,flag=0,i=40970,u=0.7005872436257956,v=0.6221475947158343,w=0.5092852407263053,x=6.0702945128230406 -color=green,shape=square,flag=0,i=40979,u=0.1266107665974655,v=0.5356688591943147,w=0.48322227332103806,x=4.226742870121238 -color=blue,shape=circle,flag=1,i=41020,u=0.00943323226941939,v=0.8446978189819311,w=0.5018599546418963,x=4.793760867241468 -color=red,shape=square,flag=0,i=41024,u=0.11281835440030663,v=0.7789680950472638,w=0.44121932292225113,x=6.029666144555385 -color=orange,shape=triangle,flag=1,i=41035,u=0.05837890310319416,v=0.07636249822975938,w=0.50241097071327,x=3.9056186685192973 -color=red,shape=triangle,flag=0,i=41036,u=0.3588004771654896,v=0.029715204098169967,w=0.5098908448951518,x=5.977457621205759 -color=yellow,shape=circle,flag=1,i=41055,u=0.6642375363825297,v=0.7473161264597635,w=0.4911355627721241,x=6.3925846505742 -color=green,shape=triangle,flag=0,i=41068,u=0.6012568860610388,v=0.4071706777595179,w=0.4724788407174964,x=6.792622387122063 -color=green,shape=triangle,flag=0,i=41077,u=0.006409854905215173,v=0.9953897812617374,w=0.46909694265629237,x=5.092367804520576 -color=red,shape=circle,flag=0,i=41093,u=0.24774590349728343,v=0.25179334666781406,w=0.5074890714155886,x=3.7914211172739343 -color=purple,shape=circle,flag=0,i=41096,u=0.7332071609186626,v=0.3050420015750761,w=0.4975460107229564,x=4.338931958302688 -color=red,shape=square,flag=0,i=41110,u=0.3249535218520929,v=0.44695386243548285,w=0.44076515312824666,x=4.1232348383043345 -color=red,shape=triangle,flag=0,i=41117,u=0.22603976881447552,v=0.21132377795592672,w=0.4983573859172499,x=6.015265385514934 -color=green,shape=square,flag=0,i=41133,u=0.026186479360741366,v=0.13222331109096497,w=0.4905758343438278,x=6.121831330568276 -color=red,shape=circle,flag=1,i=41136,u=0.8585729729210986,v=0.9336032925866591,w=0.5150254587145655,x=6.083129177033072 -color=green,shape=circle,flag=0,i=41146,u=0.15200293613642057,v=0.41065522042278624,w=0.5056691493888975,x=4.142907611787745 -color=red,shape=square,flag=0,i=41148,u=0.35932841489150524,v=0.7975816126465474,w=0.4544689761869863,x=5.1704614314369275 -color=red,shape=triangle,flag=0,i=41166,u=0.6031154789698985,v=0.1632700399661593,w=0.4946392165868584,x=3.273113566179029 -color=yellow,shape=square,flag=1,i=41169,u=0.844895226225717,v=0.5002456401704629,w=0.5018381245124144,x=3.9265681141717788 -color=red,shape=circle,flag=1,i=41197,u=0.44272754321694174,v=0.4410411353162348,w=0.5103827820767027,x=7.336556085128362 -color=red,shape=circle,flag=0,i=41213,u=0.16244570059444574,v=0.1913282359798194,w=0.5080641700004002,x=5.2106138487944635 -color=yellow,shape=square,flag=1,i=41221,u=0.21378425914146149,v=0.2147182139306688,w=0.510938342839433,x=4.2407446250786895 -color=green,shape=square,flag=0,i=41224,u=0.2955710804078491,v=0.3505625824576629,w=0.4961112083801156,x=4.579727033980405 -color=red,shape=triangle,flag=0,i=41228,u=0.6589785137222948,v=0.7419091413749674,w=0.5012083314631209,x=3.459492032625103 -color=red,shape=triangle,flag=1,i=41229,u=0.008697938962164087,v=0.35751804341911053,w=0.503546859053565,x=5.0754090219045205 -color=red,shape=circle,flag=1,i=41233,u=0.20130571289997412,v=0.25983385732663467,w=0.5062401447372741,x=6.009491690988735 -color=red,shape=square,flag=0,i=41237,u=0.2077942336550639,v=0.24631488672081348,w=0.4561562318488982,x=5.763009389137171 -color=green,shape=triangle,flag=0,i=41240,u=0.1388091490042217,v=0.5367294697022725,w=0.47603068593969655,x=6.123297439839205 -color=red,shape=square,flag=0,i=41261,u=0.9998822102016469,v=0.46815234994788446,w=0.45856223710290567,x=4.890051638015498 -color=blue,shape=circle,flag=1,i=41280,u=0.1782114063356941,v=0.7877690766618495,w=0.5001458122603802,x=5.566726562619991 -color=red,shape=square,flag=0,i=41285,u=0.7173099141802141,v=0.7078029654590525,w=0.46469373672667796,x=4.583449217191266 -color=blue,shape=square,flag=0,i=41296,u=0.3454905642340733,v=0.19972304226274573,w=0.5088163812570099,x=5.946724813788657 -color=red,shape=circle,flag=0,i=41298,u=0.04912985095575162,v=0.08025091062765384,w=0.5149809643358482,x=4.122100038033584 -color=red,shape=triangle,flag=1,i=41302,u=0.9805547981785468,v=0.5788603877754698,w=0.5102740439436876,x=3.4387117775312728 -color=purple,shape=square,flag=0,i=41313,u=0.32050134640300276,v=0.20960368204663338,w=0.5016947735048498,x=5.436728676291729 -color=green,shape=circle,flag=0,i=41315,u=0.7558533887157577,v=0.8574758963562502,w=0.5058862878487302,x=5.372012723079794 -color=red,shape=square,flag=0,i=41320,u=0.16571923046766424,v=0.3395442840950539,w=0.46027698929239264,x=6.614191202761383 -color=red,shape=square,flag=0,i=41333,u=0.23539807857375017,v=0.029569983506120945,w=0.46424201371688983,x=4.664103309003582 -color=red,shape=triangle,flag=0,i=41334,u=0.9414131231521559,v=0.5637319354725785,w=0.5100317333100488,x=4.461039880202075 -color=red,shape=triangle,flag=0,i=41363,u=0.7496133321789066,v=0.5753027334048532,w=0.5082128925076759,x=5.68569856226981 -color=green,shape=square,flag=0,i=41370,u=0.5888626949264554,v=0.49794962288359834,w=0.492272843933555,x=4.299793988615572 -color=blue,shape=square,flag=0,i=41372,u=0.938522464304407,v=0.7997406406159722,w=0.5099388114091625,x=5.087434267728367 -color=blue,shape=triangle,flag=1,i=41379,u=0.6386442129462215,v=0.38205346810160934,w=0.5055560189831071,x=7.08816823364052 -color=yellow,shape=triangle,flag=1,i=41391,u=0.4967651674378841,v=0.7028857832766183,w=0.5050706908897531,x=2.617120492678897 -color=red,shape=square,flag=0,i=41425,u=0.11697592862776163,v=0.776070583666844,w=0.4628193075484102,x=5.81393272425408 -color=green,shape=triangle,flag=1,i=41430,u=0.8821014727718542,v=0.5879064792659994,w=0.48404470498269975,x=6.156342151205378 -color=yellow,shape=triangle,flag=1,i=41431,u=0.7216829279521791,v=0.41186085630062563,w=0.5139955664129368,x=5.822589071239395 -color=purple,shape=triangle,flag=0,i=41453,u=0.09799301117045978,v=0.5345676923879632,w=0.5169615184415605,x=5.250379441097196 -color=blue,shape=triangle,flag=1,i=41457,u=0.17123644077345412,v=0.7036414440481312,w=0.5064731785419707,x=5.8713124874714735 -color=red,shape=square,flag=1,i=41513,u=0.735640556687527,v=0.041482539910170924,w=0.46757039796840416,x=4.33615034009331 -color=red,shape=circle,flag=0,i=41521,u=0.7248062933235758,v=0.6477521864058217,w=0.5280510519219362,x=5.202996256962501 -color=red,shape=square,flag=0,i=41532,u=0.13939534134302878,v=0.7062580414788688,w=0.47014467278416444,x=5.333468435226506 -color=green,shape=circle,flag=0,i=41538,u=0.7618927248516096,v=0.011134728343045519,w=0.5013483663583217,x=5.075399723761248 -color=purple,shape=circle,flag=0,i=41543,u=0.1411284747024314,v=0.4776568215637865,w=0.49870883984795583,x=4.778201084034603 -color=red,shape=circle,flag=1,i=41545,u=0.043954004304485705,v=0.0729807080198989,w=0.5274826135833207,x=4.882747543352472 -color=yellow,shape=triangle,flag=1,i=41548,u=0.25542755651336757,v=0.5091813047427031,w=0.5176666495371838,x=6.074068520582077 -color=red,shape=circle,flag=1,i=41552,u=0.25684060526053965,v=0.28832406331707605,w=0.5316181251961247,x=4.949857478419258 -color=red,shape=square,flag=0,i=41559,u=0.9878723771262267,v=0.4030523061712127,w=0.47752596960788896,x=6.077950705004928 -color=red,shape=circle,flag=0,i=41564,u=0.4112819635335717,v=0.3145849525983753,w=0.5368963226770362,x=4.079965299696652 -color=red,shape=triangle,flag=0,i=41574,u=0.9442737382342208,v=0.5186928081995084,w=0.4959350376942421,x=6.218368622701866 -color=red,shape=triangle,flag=0,i=41587,u=0.7822208691306908,v=0.428004048191177,w=0.4937386986245334,x=5.455295306438355 -color=green,shape=circle,flag=1,i=41601,u=0.5523000602651791,v=0.1361133710703959,w=0.4979353732317967,x=3.1952963508563563 -color=yellow,shape=circle,flag=1,i=41620,u=0.3826753901716061,v=0.30935628659403125,w=0.479668210489739,x=6.514367447632842 -color=red,shape=circle,flag=0,i=41631,u=0.6446923855143726,v=0.7335233116379923,w=0.534095256070473,x=5.7265795413660685 -color=red,shape=square,flag=0,i=41632,u=0.8394911218955688,v=0.04337216607437766,w=0.4754390079134481,x=6.491073865316974 -color=red,shape=triangle,flag=0,i=41637,u=0.44348699682294734,v=0.37258376685737904,w=0.4883794578408287,x=4.686940646592702 -color=red,shape=circle,flag=0,i=41638,u=0.0990833525633743,v=0.12774801101336,w=0.5376366806602688,x=5.155195637415368 -color=yellow,shape=triangle,flag=1,i=41645,u=0.5936607610834136,v=0.864767408605107,w=0.508880796073613,x=4.887898650848888 -color=blue,shape=square,flag=0,i=41649,u=0.8639977215568386,v=0.9180348177137787,w=0.5158446528523883,x=6.3337406072164875 -color=blue,shape=circle,flag=1,i=41665,u=0.3480873714297278,v=0.8688101461893617,w=0.5050037849703162,x=5.9683006169880635 -color=blue,shape=square,flag=1,i=41671,u=0.5402380371666339,v=0.5827398874456162,w=0.5146432891390627,x=6.186739275855484 -color=blue,shape=square,flag=0,i=41695,u=0.8282270764147311,v=0.5912835709347535,w=0.5097168903307813,x=5.39833155523991 -color=red,shape=triangle,flag=1,i=41703,u=0.8735866032564092,v=0.3398557403739403,w=0.49015802677843745,x=2.9362695676130577 -color=red,shape=square,flag=1,i=41720,u=0.4100054829037967,v=0.7536418516648821,w=0.47518824456706443,x=4.311902979409429 -color=yellow,shape=triangle,flag=1,i=41726,u=0.8628818508076298,v=0.6169269692001,w=0.5086607908606664,x=4.448466380814399 -color=purple,shape=circle,flag=0,i=41738,u=0.5532393154222418,v=0.8064732451217115,w=0.5072042689758782,x=4.720496144538789 -color=green,shape=triangle,flag=0,i=41739,u=0.9303739602629575,v=0.06492932788889794,w=0.48567256563654826,x=5.0358552544991 -color=red,shape=circle,flag=0,i=41740,u=0.42298056691858954,v=0.5127969809049215,w=0.5338035318900609,x=3.4992734545454667 -color=red,shape=square,flag=0,i=41743,u=0.4577318178536147,v=0.30540883843616484,w=0.48464583923709154,x=5.544881004230361 -color=blue,shape=square,flag=0,i=41752,u=0.1912654647532387,v=0.440391285823696,w=0.5057045605970851,x=7.430903505000443 -color=red,shape=triangle,flag=0,i=41769,u=0.5939250019320538,v=0.6875073265444706,w=0.49396486970302567,x=5.644836926635821 -color=red,shape=triangle,flag=1,i=41786,u=0.6232155179969188,v=0.2928103736322655,w=0.48830623930381595,x=6.808422803040777 -color=red,shape=circle,flag=0,i=41805,u=0.7426278169578489,v=0.7573390612579981,w=0.5240344135238483,x=5.584839302972811 -color=red,shape=square,flag=1,i=41813,u=0.3230715545042646,v=0.7639435498121768,w=0.4917808347074572,x=3.966261819115246 -color=green,shape=triangle,flag=0,i=41823,u=0.8783766193667714,v=0.7581210435585213,w=0.4836238433355995,x=6.347874058559537 -color=red,shape=square,flag=0,i=41832,u=0.4616893914921477,v=0.4020793914327204,w=0.4868109611944463,x=3.731669480356746 -color=green,shape=square,flag=0,i=41839,u=0.4676881398040288,v=0.3614626383306794,w=0.5064596558928773,x=7.53678961725901 -color=purple,shape=square,flag=0,i=41849,u=0.003288508756311259,v=0.37258634553111547,w=0.5090223484494167,x=7.8797081122471715 -color=red,shape=circle,flag=1,i=41861,u=0.28169183849623547,v=0.35325889859005005,w=0.5299929210108116,x=5.257460163808932 -color=purple,shape=triangle,flag=0,i=41862,u=0.22744564505544673,v=0.01797650860414257,w=0.5150959385291496,x=3.9702671128207303 -color=red,shape=triangle,flag=0,i=41877,u=0.11385261206982633,v=0.7112402721658284,w=0.4807881101613337,x=3.6070149711306825 -color=red,shape=triangle,flag=1,i=41879,u=0.24562050029077143,v=0.5667948818409958,w=0.4823912935527294,x=5.318367451031023 -color=yellow,shape=triangle,flag=1,i=41894,u=0.8646126546477628,v=0.7269447179629449,w=0.5108291726212594,x=6.127638586274023 -color=blue,shape=triangle,flag=0,i=41897,u=0.28285200570649505,v=0.44071482628593517,w=0.5117921578186385,x=5.617456132495323 -color=purple,shape=triangle,flag=0,i=41903,u=0.5116390379078616,v=0.20550452018540133,w=0.5208510624740549,x=4.257767862398783 -color=purple,shape=square,flag=0,i=41923,u=0.30569947982029155,v=0.5156799057005967,w=0.5062834710742717,x=4.690419238125075 -color=blue,shape=triangle,flag=0,i=41924,u=0.11068557008179569,v=0.4080695094558585,w=0.519796870395737,x=5.883800571929169 -color=yellow,shape=circle,flag=1,i=41925,u=0.4148384583187227,v=0.8118160101737696,w=0.508391018785099,x=6.8992589282084635 -color=blue,shape=square,flag=1,i=41927,u=0.4156682416469647,v=0.7155029979934212,w=0.5249391655564007,x=5.847298248959041 -color=yellow,shape=circle,flag=1,i=41938,u=0.7240730664440489,v=0.0954108405747085,w=0.5044075596455153,x=5.037988878444145 -color=green,shape=triangle,flag=1,i=41940,u=0.5087711655657692,v=0.06299897744361416,w=0.4884523462606048,x=3.6194235062659352 -color=blue,shape=circle,flag=1,i=41942,u=0.10748851742570942,v=0.0014886830387470518,w=0.4907899756522415,x=5.147129598869486 -color=blue,shape=square,flag=1,i=41948,u=0.1618700266561418,v=0.6596619275167799,w=0.524413037415482,x=4.829632618636293 -color=yellow,shape=circle,flag=0,i=41966,u=0.8686333417471753,v=0.50451916147296,w=0.5074582137491923,x=4.0389301492297305 -color=red,shape=square,flag=0,i=41975,u=0.07179086871991747,v=0.9050221786221867,w=0.49902452767173505,x=5.091848248050398 -color=red,shape=circle,flag=0,i=41979,u=0.35849557351478467,v=0.3915700830767817,w=0.5155711207779339,x=3.6279069388602547 -color=yellow,shape=square,flag=1,i=41990,u=0.3249074585870637,v=0.2479354812604172,w=0.5259007413477471,x=3.357312046934293 -color=red,shape=triangle,flag=0,i=41995,u=0.8210388188038518,v=0.9264560839274985,w=0.48545525122054833,x=5.609078239739397 -color=purple,shape=square,flag=0,i=42001,u=0.24400549338973887,v=0.6547900624259892,w=0.5078061180717653,x=6.473465250282286 -color=blue,shape=square,flag=0,i=42010,u=0.804545068195525,v=0.2789632809940058,w=0.5196698875390361,x=5.502505953539515 -color=yellow,shape=triangle,flag=1,i=42016,u=0.8138352630566955,v=0.11122173080521858,w=0.49303627323372623,x=4.683369931910622 -color=red,shape=square,flag=0,i=42029,u=0.9657149301527435,v=0.7428716583258956,w=0.5032588575145742,x=4.462343563546749 -color=orange,shape=circle,flag=1,i=42051,u=0.10824346659361117,v=0.6491374613453533,w=0.5173534861487004,x=5.391252279044385 -color=blue,shape=square,flag=1,i=42052,u=0.24649880760239262,v=0.8185152468253247,w=0.5141870302109653,x=4.178383701874165 -color=purple,shape=triangle,flag=0,i=42056,u=0.5274644404495278,v=0.7818800869208066,w=0.5200456145894452,x=4.884359859641973 -color=yellow,shape=square,flag=1,i=42057,u=0.45982570719156546,v=0.7337423103803807,w=0.5334233891285076,x=4.221368007350595 -color=red,shape=triangle,flag=0,i=42060,u=0.1966558378102382,v=0.1743411435069091,w=0.49505755338398205,x=4.727620489120925 -color=red,shape=triangle,flag=0,i=42061,u=0.29013441804420415,v=0.4064257468993786,w=0.4942541475690011,x=4.386534253977956 -color=orange,shape=circle,flag=1,i=42067,u=0.06427892830620807,v=0.22422462687582723,w=0.5161064980027307,x=3.4951627649894914 -color=blue,shape=square,flag=1,i=42075,u=0.9595843180167247,v=0.8671714148718568,w=0.5119868162119788,x=4.448008039947396 -color=red,shape=triangle,flag=0,i=42078,u=0.2870316302780749,v=0.4983034146991252,w=0.5019647692225542,x=5.921212951787301 -color=red,shape=square,flag=0,i=42082,u=0.24613963773420355,v=0.572736625081269,w=0.5109733583358478,x=3.215723923036521 -color=red,shape=triangle,flag=0,i=42084,u=0.7813207520755331,v=0.20543488540258859,w=0.5061264507399164,x=6.08319233906244 -color=red,shape=triangle,flag=1,i=42085,u=0.6920020237888898,v=0.4893271280139224,w=0.502908749361798,x=7.265798781059612 -color=orange,shape=square,flag=1,i=42096,u=0.28317050051236914,v=0.49130353724990683,w=0.48848619157769246,x=3.1488280930860593 -color=blue,shape=circle,flag=0,i=42097,u=0.8561224052634198,v=0.4562308168928856,w=0.5037671325222282,x=5.551551588427199 -color=red,shape=square,flag=0,i=42098,u=0.5628059609004298,v=0.20943837510989205,w=0.5182431387140615,x=6.700325702707506 -color=purple,shape=square,flag=0,i=42101,u=0.39186894725720134,v=0.08228497730591156,w=0.5001365786428994,x=3.706860725633853 -color=yellow,shape=square,flag=1,i=42102,u=0.32327567693788806,v=0.45532141332280684,w=0.5406603950169535,x=5.588945394944036 -color=blue,shape=square,flag=0,i=42135,u=0.6256881072073424,v=0.3891003035192553,w=0.5071510914559967,x=3.793276830317215 -color=blue,shape=triangle,flag=1,i=42141,u=0.37268630015463755,v=0.5455657642318807,w=0.5145877170362394,x=4.991480220852533 -color=blue,shape=circle,flag=1,i=42154,u=0.1835088190477302,v=0.5343635866979393,w=0.49927038122453643,x=4.797613930176628 -color=red,shape=square,flag=0,i=42156,u=0.22987643851528983,v=0.49272629871419515,w=0.5112880476053994,x=5.7474335839157575 -color=yellow,shape=square,flag=1,i=42159,u=0.31004041847254893,v=0.3329373137909095,w=0.5439369602175674,x=4.086360975101474 -color=red,shape=circle,flag=1,i=42169,u=0.9811332712167679,v=0.8960659018648415,w=0.5073426387967269,x=1.9611268845333025 -color=green,shape=triangle,flag=0,i=42179,u=0.4311882306596425,v=0.8325541188326202,w=0.48651932154831173,x=3.5983701162626844 -color=red,shape=square,flag=1,i=42185,u=0.7306542063394752,v=0.22269600400426715,w=0.5073063634045416,x=5.52869525607922 -color=purple,shape=triangle,flag=1,i=42186,u=0.3740099087593247,v=0.45264429799441397,w=0.5062449830672904,x=6.8644775356862135 -color=red,shape=square,flag=1,i=42191,u=0.3530223697771485,v=0.6936746785846358,w=0.5101431886014118,x=4.048246868319073 -color=yellow,shape=circle,flag=1,i=42194,u=0.6678818956496095,v=0.6516547484612618,w=0.4974515489237669,x=5.101765929996367 -color=yellow,shape=circle,flag=1,i=42196,u=0.877382563604881,v=0.5996579632656069,w=0.4943612587598006,x=5.464626776304558 -color=green,shape=square,flag=0,i=42202,u=0.2977352298702497,v=0.5271662993559357,w=0.5043446098555483,x=5.34349681998629 -color=red,shape=triangle,flag=1,i=42206,u=0.12109722011885438,v=0.7452757819258516,w=0.49064068573003666,x=4.369828803162965 -color=yellow,shape=circle,flag=1,i=42209,u=0.9851396425761609,v=0.8378277502380294,w=0.49369530588921406,x=5.537998970979634 -color=green,shape=triangle,flag=1,i=42211,u=0.5594474558227601,v=0.39579981340682346,w=0.4905472397301975,x=4.092668411095752 -color=yellow,shape=square,flag=1,i=42217,u=0.2064235767216892,v=0.2942198804985633,w=0.5571095786148189,x=4.881917301545466 -color=blue,shape=triangle,flag=0,i=42221,u=0.5061839741257745,v=0.7132032834589251,w=0.517434473287979,x=6.6176137456898765 -color=blue,shape=square,flag=1,i=42228,u=0.5372127914061164,v=0.31798545221307706,w=0.5071770871208023,x=6.088877668388487 -color=purple,shape=square,flag=0,i=42234,u=0.7924483105949925,v=0.44831963157256793,w=0.49915589445469194,x=3.8437634952087847 -color=green,shape=square,flag=0,i=42238,u=0.31087680147123486,v=0.3733745090476206,w=0.5038560361860169,x=6.14863942793151 -color=red,shape=square,flag=1,i=42256,u=0.20272583129062705,v=0.6957814450139853,w=0.5129421098600568,x=3.1604750234820975 -color=red,shape=triangle,flag=0,i=42266,u=0.3110456644051389,v=0.1558679238461611,w=0.5061670312869957,x=4.0281842690507945 -color=blue,shape=square,flag=0,i=42271,u=0.9633969839586846,v=0.22304038836166473,w=0.5040612215693834,x=4.34465914745054 -color=yellow,shape=triangle,flag=1,i=42274,u=0.6843520205393837,v=0.48417356096788566,w=0.4996658609448684,x=5.994467966549343 -color=green,shape=square,flag=1,i=42288,u=0.9615799148129933,v=0.48658794096284974,w=0.5037533065690141,x=5.910504420571343 -color=green,shape=circle,flag=0,i=42289,u=0.6264750602597915,v=0.2151004100276106,w=0.49961881545835995,x=4.727481468034974 -color=blue,shape=square,flag=1,i=42297,u=0.7989463108882865,v=0.993872833141726,w=0.5025051060500516,x=4.069860493171828 -color=yellow,shape=circle,flag=0,i=42307,u=0.04007150493350675,v=0.8237919779094752,w=0.4913434132278825,x=4.7788667141447805 -color=red,shape=square,flag=0,i=42315,u=0.853290114858519,v=0.8038525580475187,w=0.513076299428633,x=3.7162116616489436 -color=red,shape=circle,flag=1,i=42324,u=0.7016969630728233,v=0.7355050769359464,w=0.5114210771160882,x=3.567562764483307 -color=red,shape=square,flag=1,i=42330,u=0.6142088505930275,v=0.2488087445693039,w=0.5141705076112492,x=4.933548477358564 -color=green,shape=square,flag=1,i=42342,u=0.35789294966397756,v=0.8703650300510167,w=0.5018347035919932,x=5.509126230497068 -color=red,shape=square,flag=0,i=42350,u=0.3623009008963618,v=0.6518411581855592,w=0.520569596785157,x=6.269230702829037 -color=green,shape=triangle,flag=0,i=42351,u=0.05844508921521008,v=0.7781592117631798,w=0.4818110430768114,x=7.964834790823628 -color=yellow,shape=triangle,flag=1,i=42363,u=0.975387275234549,v=0.14607131683150198,w=0.5027421726947764,x=4.472918452294312 -color=red,shape=triangle,flag=0,i=42379,u=0.5282407509990881,v=0.9197960692754503,w=0.5015631149952023,x=4.44603180596086 -color=red,shape=circle,flag=0,i=42380,u=0.8997669834819321,v=0.9749021276369567,w=0.5107372219724358,x=4.825488009866284 -color=green,shape=circle,flag=0,i=42394,u=0.10829075707431379,v=0.8195452548847731,w=0.4995022715506293,x=5.323340194644703 -color=yellow,shape=square,flag=1,i=42419,u=0.5171009635983354,v=0.28899641033983037,w=0.5518763386032669,x=5.09491537089958 -color=blue,shape=triangle,flag=0,i=42424,u=0.7162893401083892,v=0.8895666549128501,w=0.506362619234255,x=3.9277790101517778 -color=yellow,shape=square,flag=1,i=42425,u=0.08415778887173675,v=0.9941728940685433,w=0.5499279220362472,x=5.30249618071178 -color=yellow,shape=circle,flag=1,i=42433,u=0.789087683358848,v=0.13368795186008475,w=0.5044222917158122,x=6.080228577913922 -color=green,shape=square,flag=0,i=42435,u=0.7049917627597331,v=0.2223930407896494,w=0.5053146309588311,x=5.519001324619848 -color=red,shape=triangle,flag=0,i=42436,u=0.5185683439821897,v=0.3476523881538963,w=0.5075482605143149,x=5.201102669266679 -color=yellow,shape=square,flag=1,i=42438,u=0.2170361761863001,v=0.03005445396804196,w=0.5556937343880387,x=2.7005296882404726 -color=blue,shape=square,flag=1,i=42444,u=0.0865035276263465,v=0.7965071532225216,w=0.49211406753098264,x=4.452757281322867 -color=green,shape=square,flag=0,i=42474,u=0.317697804001168,v=0.12752552572271403,w=0.5096292122301531,x=3.352766497042952 -color=red,shape=circle,flag=0,i=42488,u=0.04304297300383053,v=0.06097411694834907,w=0.5154980384251677,x=4.503533593234685 -color=red,shape=square,flag=0,i=42492,u=0.7198694290330712,v=0.8120020333622945,w=0.5066193785182714,x=5.694944969883846 -color=blue,shape=square,flag=1,i=42496,u=0.5201540248376347,v=0.008429111686382051,w=0.4857916647454617,x=6.503721760550323 -color=green,shape=circle,flag=0,i=42503,u=0.6757033967220526,v=0.04920503523053921,w=0.49382462826368495,x=5.709516468045661 -color=red,shape=circle,flag=0,i=42510,u=0.05552434224298841,v=-0.014002814164676677,w=0.5154461470552877,x=6.334611672744182 -color=red,shape=square,flag=0,i=42536,u=0.5673298724176823,v=0.8449456446431269,w=0.5067106788803608,x=4.900193295727598 -color=red,shape=circle,flag=0,i=42552,u=0.8627770030241487,v=0.9430587269337052,w=0.5178492838837069,x=3.324773381565701 -color=green,shape=square,flag=1,i=42556,u=0.5239969477822893,v=0.9754006365455012,w=0.5070579643594629,x=4.792201054634316 -color=yellow,shape=square,flag=1,i=42565,u=0.8381155409838698,v=0.6560979478411256,w=0.5462285870559421,x=5.388218829027803 -color=red,shape=circle,flag=0,i=42583,u=0.7059701122499131,v=0.6905088822827575,w=0.5152096889465899,x=6.5702327462383545 -color=green,shape=circle,flag=0,i=42586,u=0.13597642818490763,v=0.008933755124756804,w=0.49884502922217605,x=5.321530606656419 -color=yellow,shape=triangle,flag=0,i=42598,u=0.909003968499731,v=0.36227466045002754,w=0.49573016749337484,x=5.249535033378173 -color=red,shape=triangle,flag=1,i=42604,u=0.7792729942102359,v=0.5053521848217665,w=0.5177893843145196,x=4.20792721829513 -color=purple,shape=square,flag=0,i=42629,u=0.11833542451635248,v=0.7459885164135419,w=0.5051044639181268,x=5.595193816324342 -color=blue,shape=circle,flag=0,i=42652,u=0.5036417020163063,v=0.20742157039852327,w=0.5302493538504605,x=4.457831081348835 -color=red,shape=triangle,flag=1,i=42658,u=0.23304428739391048,v=0.010965450734547577,w=0.4903460167419052,x=4.705190621096396 -color=red,shape=square,flag=0,i=42670,u=0.03981467696482632,v=0.19104720744757553,w=0.5031291051859914,x=4.705398588439117 -color=blue,shape=triangle,flag=0,i=42672,u=0.2987122930310858,v=0.6949354506374711,w=0.5035787856259482,x=5.952352512636865 -color=red,shape=square,flag=0,i=42690,u=0.07266307733882327,v=0.2745772820062482,w=0.49472352156758226,x=5.4950080494755404 -color=red,shape=triangle,flag=0,i=42702,u=0.9073085809127872,v=0.2691902927780708,w=0.4946481874826101,x=5.2705055027985965 -color=yellow,shape=circle,flag=1,i=42718,u=0.1284264192876422,v=0.5459402133636392,w=0.51100512699488,x=4.664695906856372 -color=red,shape=circle,flag=0,i=42719,u=0.6132150311583803,v=0.5181246526847756,w=0.5228090571339126,x=5.384797895223571 -color=purple,shape=circle,flag=0,i=42731,u=0.04326235111608934,v=0.6137422304173564,w=0.5048613478323388,x=6.540953126440567 -color=red,shape=square,flag=1,i=42737,u=0.3345546824736423,v=0.7467622343574337,w=0.503608741902435,x=4.151938801502289 -color=yellow,shape=square,flag=1,i=42754,u=0.022251531250828016,v=0.7806857442870315,w=0.5257402077720859,x=4.495234036224201 -color=red,shape=square,flag=1,i=42756,u=0.4124501538304661,v=0.18337187519521858,w=0.49905923374347805,x=6.2193184717717545 -color=red,shape=square,flag=0,i=42761,u=0.8463971868962755,v=0.4296289814593989,w=0.5001322843586747,x=5.228576020499294 -color=purple,shape=triangle,flag=0,i=42763,u=0.7460751865123395,v=0.10709331520471066,w=0.5121074977443849,x=5.787749979879276 -color=blue,shape=triangle,flag=1,i=42772,u=0.5936766343695294,v=0.906561121575526,w=0.5024528115467312,x=5.485568362223617 -color=red,shape=square,flag=0,i=42792,u=0.6479552291518469,v=0.9890931501309627,w=0.4961342765882706,x=3.2400934460174944 -color=red,shape=triangle,flag=1,i=42796,u=0.8255870170713169,v=0.6390300635867779,w=0.4995129376520485,x=5.68537479530974 -color=blue,shape=circle,flag=1,i=42806,u=0.37736665072404263,v=0.039952365664955525,w=0.5370182006037794,x=6.050619889744202 -color=red,shape=triangle,flag=0,i=42807,u=0.9159761208187744,v=0.9124000608215797,w=0.49887396133292944,x=4.082600076653383 -color=blue,shape=triangle,flag=1,i=42814,u=0.47371048450981046,v=0.464403691924149,w=0.5110519097818691,x=3.1101925706600686 -color=red,shape=triangle,flag=0,i=42824,u=0.7014228219301875,v=0.3441988119217,w=0.4964425168114189,x=3.3533613074818014 -color=red,shape=triangle,flag=0,i=42829,u=0.9718156174444482,v=0.5701224534271866,w=0.49256474394053706,x=5.066201152447089 -color=purple,shape=circle,flag=0,i=42836,u=0.09937685038703636,v=0.3417556566201373,w=0.5007171538088067,x=5.002896674672233 -color=red,shape=square,flag=0,i=42843,u=0.7970969450505384,v=0.733100502812636,w=0.5026814529243655,x=5.54112572883582 -color=blue,shape=triangle,flag=0,i=42845,u=0.6744808210268944,v=0.7889115724226872,w=0.5125209283952054,x=6.043335262375385 -color=yellow,shape=square,flag=1,i=42854,u=0.30222772430360934,v=0.8193371200452921,w=0.5264809712388231,x=3.6019393748313533 -color=yellow,shape=circle,flag=1,i=42899,u=0.7825638143960766,v=0.5153973349679857,w=0.5099924176581272,x=1.7691333573128656 -color=purple,shape=triangle,flag=0,i=42900,u=0.34544132963111296,v=0.7351768724791737,w=0.516248955752243,x=3.130958980504314 -color=green,shape=square,flag=0,i=42914,u=0.07732321450352886,v=0.5272848627168378,w=0.5013575205383178,x=6.720445838138212 -color=green,shape=square,flag=0,i=42915,u=0.5020151016389706,v=0.5933915790046229,w=0.5043433998034534,x=4.4445152100011205 -color=purple,shape=square,flag=0,i=42935,u=0.7705950515127238,v=0.15045227422756768,w=0.5079471116795059,x=3.195754737220289 -color=red,shape=triangle,flag=0,i=42941,u=0.6321089328055236,v=0.4891740494631376,w=0.49809774078676705,x=4.302372998211033 -color=red,shape=circle,flag=0,i=42950,u=0.5777357402100951,v=0.6179036911309645,w=0.5211491513146331,x=3.8952935315000112 -color=green,shape=square,flag=1,i=42955,u=0.9999361779701204,v=0.1740186045369594,w=0.5122252746891209,x=3.508542308929412 -color=green,shape=square,flag=0,i=42960,u=0.6296248667300545,v=0.06596337908912542,w=0.5149911452292064,x=5.321186164154646 -color=purple,shape=square,flag=0,i=42964,u=0.5442543466949902,v=0.4833185612469808,w=0.5086589281294314,x=6.402489243844781 -color=green,shape=triangle,flag=0,i=42975,u=0.8725372428037554,v=0.7805882819676262,w=0.4894450712255514,x=6.702477889769 -color=red,shape=circle,flag=1,i=43000,u=0.24548714093928314,v=0.27547871426849185,w=0.5148379381705622,x=7.715087543236476 -color=blue,shape=triangle,flag=0,i=43016,u=0.4583188188700552,v=0.923199871892756,w=0.5078088257113533,x=6.54443961118649 -color=red,shape=triangle,flag=1,i=43018,u=0.7585985137511034,v=0.8950932595678361,w=0.5091018110425221,x=6.221675345334963 -color=red,shape=square,flag=0,i=43030,u=0.06755819582194833,v=0.3007328200785029,w=0.4975973946247765,x=7.349860128935579 -color=yellow,shape=triangle,flag=1,i=43043,u=0.48554744093841185,v=0.00928978343668263,w=0.5015183526199568,x=5.159322499162008 -color=green,shape=circle,flag=0,i=43059,u=0.6685260928461136,v=0.7899163841948899,w=0.4956082348335964,x=6.241982624232588 -color=purple,shape=circle,flag=0,i=43087,u=0.7126589004431414,v=0.9680582347661287,w=0.5034189303688038,x=2.480455836223791 -color=red,shape=triangle,flag=1,i=43099,u=0.6188493831269095,v=0.6339438957021969,w=0.5115982653763845,x=2.340101421257748 -color=red,shape=square,flag=0,i=43110,u=0.09874167367643705,v=0.48227211011885185,w=0.489090899530579,x=5.964936731083792 -color=blue,shape=square,flag=0,i=43118,u=0.375533264014133,v=0.2524577903935834,w=0.5051295964731044,x=5.567730145109398 -color=orange,shape=circle,flag=0,i=43119,u=0.2174777185936042,v=0.8786011677515203,w=0.5285638211878175,x=5.908393426445126 -color=yellow,shape=circle,flag=1,i=43157,u=0.443829852552612,v=0.6859520889788074,w=0.5072978518951282,x=3.439137501119236 -color=yellow,shape=circle,flag=1,i=43173,u=0.08245514628573791,v=0.7225877836250619,w=0.511052252776385,x=4.475092158137214 -color=red,shape=square,flag=1,i=43187,u=0.6304046103545793,v=0.4370657018856887,w=0.48501649764297255,x=4.8811222636758025 -color=purple,shape=square,flag=0,i=43205,u=0.5574418043111553,v=0.3245319104461557,w=0.4993988729853276,x=4.7902909105952345 -color=green,shape=triangle,flag=1,i=43217,u=0.3396181693979178,v=0.49709357064701054,w=0.486448718696245,x=5.965996547883935 -color=red,shape=triangle,flag=0,i=43230,u=0.3658430788155381,v=0.69999635639543,w=0.5090322588349434,x=4.072571405459782 -color=red,shape=square,flag=1,i=43260,u=0.5551153411161501,v=0.986313668069793,w=0.49089025823823934,x=4.499275917557866 -color=purple,shape=triangle,flag=0,i=43283,u=0.6243454529276911,v=0.013941953703447307,w=0.5055044931746869,x=6.752169392747628 -color=blue,shape=square,flag=0,i=43291,u=0.19570206046322391,v=0.3243697139214208,w=0.5211419644940537,x=6.083066966868021 -color=red,shape=square,flag=0,i=43299,u=0.28497844298599617,v=0.23594270054654964,w=0.4881248108616436,x=6.633998830778498 -color=blue,shape=square,flag=1,i=43324,u=0.21265392007539652,v=0.11275837980087833,w=0.5202841202835982,x=4.487841095174716 -color=green,shape=square,flag=0,i=43342,u=0.2855734704668428,v=0.7629036434961336,w=0.5330877132313677,x=3.399003458023499 -color=purple,shape=square,flag=0,i=43352,u=0.03279630420385571,v=0.4253361333717529,w=0.4915264259517934,x=6.0757535526368 -color=red,shape=triangle,flag=1,i=43369,u=0.21453609862365663,v=0.09654734427519795,w=0.5160653251927467,x=7.5220416325811215 -color=red,shape=square,flag=1,i=43370,u=0.7788261941016054,v=0.11193394866730921,w=0.49069095387247047,x=2.964857188511713 -color=red,shape=square,flag=1,i=43391,u=0.21276224882942307,v=0.8434894350978464,w=0.49924021433304683,x=4.1033854776421315 -color=red,shape=triangle,flag=1,i=43398,u=0.057789855402812895,v=0.38681417996008827,w=0.5203287489629718,x=5.181712983035236 -color=red,shape=triangle,flag=0,i=43399,u=0.6016936536512857,v=0.7947774880543197,w=0.5205564575623793,x=6.802486523060771 -color=yellow,shape=square,flag=1,i=43405,u=0.17099094033580542,v=0.11783126262287535,w=0.5126831590242893,x=4.612637315365357 -color=yellow,shape=square,flag=1,i=43409,u=0.6109987340035941,v=0.5389870546151903,w=0.5106363576158865,x=5.823334546899578 -color=green,shape=circle,flag=1,i=43413,u=0.2464271224405592,v=0.5190300049522176,w=0.4886719958545684,x=5.513482563991414 -color=green,shape=triangle,flag=1,i=43422,u=0.05560941293547561,v=0.7563505478151175,w=0.4883312298107751,x=4.285572423716245 -color=red,shape=square,flag=0,i=43428,u=0.40048148673061734,v=0.02427467707505393,w=0.49634154357136356,x=3.8658492203827923 -color=green,shape=square,flag=1,i=43440,u=0.4865996275601915,v=0.253335622085325,w=0.5282102705122441,x=5.74439352175034 -color=red,shape=triangle,flag=0,i=43441,u=0.10947260546641757,v=0.3824336220967226,w=0.5293630557643787,x=4.3698131102209 -color=purple,shape=triangle,flag=0,i=43445,u=0.1831057652639978,v=0.20996065131648944,w=0.5075695137803501,x=7.202913231742464 -color=yellow,shape=square,flag=1,i=43468,u=0.4940864913496311,v=0.14604766440206818,w=0.5174455710929828,x=2.3542807923551377 -color=red,shape=square,flag=1,i=43470,u=0.269540599587923,v=0.5448965124859114,w=0.49282210092251383,x=5.537091943390234 -color=yellow,shape=circle,flag=1,i=43475,u=0.9159790379726092,v=0.37523795421438744,w=0.524319175230883,x=4.267359989715481 -color=red,shape=triangle,flag=0,i=43478,u=0.3686506265463694,v=0.5668733945095445,w=0.5321224133202799,x=5.0080222415824975 -color=red,shape=square,flag=0,i=43485,u=0.10450691071498597,v=0.7728890236460418,w=0.49325301834616636,x=4.091809742605316 -color=yellow,shape=triangle,flag=1,i=43488,u=0.722302011195158,v=0.331032286474518,w=0.5194704870129169,x=4.349261596403674 -color=red,shape=triangle,flag=1,i=43503,u=0.16436080173867562,v=0.3096968203615481,w=0.5224236863738517,x=4.952048077307234 -color=blue,shape=circle,flag=0,i=43512,u=0.3256066078530232,v=0.9261831505485677,w=0.5413039843095864,x=6.837155921143882 -color=red,shape=circle,flag=0,i=43517,u=0.26785192844622885,v=0.29202398791511974,w=0.5101730373631388,x=5.280859188628382 -color=blue,shape=circle,flag=1,i=43520,u=0.664222767046329,v=0.3949386668630649,w=0.5408299529686497,x=2.6598816707652935 -color=purple,shape=circle,flag=0,i=43524,u=0.052333802258738515,v=0.046906736262193216,w=0.4884477312907292,x=3.9584894405872384 -color=yellow,shape=square,flag=1,i=43528,u=0.6060689964742009,v=0.8196299647976067,w=0.5140253089594942,x=4.281993627549725 -color=purple,shape=square,flag=0,i=43534,u=0.6133972331910711,v=0.021598151701481716,w=0.5031963010702043,x=2.4477506978773564 -color=green,shape=circle,flag=0,i=43546,u=0.7295203740570595,v=0.7614624369012326,w=0.48338079265400624,x=6.482068009908247 -color=yellow,shape=circle,flag=1,i=43552,u=0.11427225576595679,v=0.12046847790249071,w=0.5300989056202788,x=4.0435713310099715 -color=red,shape=square,flag=0,i=43585,u=0.2569282143086494,v=0.8356955248973711,w=0.49988988227987496,x=5.758029889276149 -color=red,shape=square,flag=0,i=43610,u=0.4066651579035613,v=0.9821252098088572,w=0.4971325892932626,x=3.8355844366644285 -color=blue,shape=circle,flag=0,i=43625,u=0.25813215119938915,v=0.44812223117479943,w=0.5468063458142752,x=2.071753655903521 -color=blue,shape=square,flag=0,i=43643,u=0.8990438947452044,v=0.7932354106497107,w=0.478281459440448,x=5.309069073068615 -color=green,shape=square,flag=0,i=43654,u=0.7477088100417613,v=0.6741243723476034,w=0.5244962909214225,x=2.7085672551848745 -color=red,shape=triangle,flag=0,i=43669,u=0.16739577193567756,v=0.7848173059476037,w=0.5387387788747922,x=3.3126789418956775 -color=red,shape=square,flag=1,i=43676,u=0.12117516414786389,v=0.2360233631803369,w=0.4927785293749649,x=4.201575280207279 -color=blue,shape=circle,flag=0,i=43677,u=0.9194345322835871,v=0.18270434299753824,w=0.5480053700986861,x=4.197437995599496 -color=blue,shape=triangle,flag=1,i=43692,u=0.7918251417402319,v=0.9985440814769564,w=0.5153980684316232,x=4.076983037941575 -color=red,shape=circle,flag=1,i=43712,u=0.21906571058540392,v=0.1776774746383532,w=0.5221753029891931,x=6.040025216206015 -color=red,shape=triangle,flag=0,i=43713,u=0.9253279125896651,v=0.22517805432802462,w=0.5283695741538778,x=3.8790026347750497 -color=green,shape=square,flag=0,i=43714,u=0.7317008955916852,v=0.689787084674138,w=0.5169706828448152,x=5.4379745180684305 -color=red,shape=triangle,flag=1,i=43738,u=0.3299945615037232,v=0.8872983606718703,w=0.5203576185354666,x=6.034626076559896 -color=blue,shape=square,flag=0,i=43739,u=0.14780028281573,v=0.27491866587876024,w=0.47443949836759736,x=4.870244417503868 -color=purple,shape=circle,flag=0,i=43762,u=0.17936303377288854,v=0.1436998550948676,w=0.48755600944216687,x=3.663137378160956 -color=red,shape=square,flag=1,i=43764,u=0.09472711154976643,v=0.07947471553826624,w=0.5151653874708529,x=6.038494901522024 -color=red,shape=triangle,flag=0,i=43775,u=0.058055975409571414,v=0.9983985077857104,w=0.5225126018826308,x=5.25940132628363 -color=green,shape=triangle,flag=0,i=43776,u=0.8234163326320727,v=0.4287532297801402,w=0.4634462697525716,x=7.350481789269177 -color=blue,shape=square,flag=0,i=43792,u=0.311214771225637,v=0.02107475184991836,w=0.47102739175469466,x=5.228169691312015 -color=purple,shape=square,flag=0,i=43793,u=0.4178057527277276,v=0.7267418213089127,w=0.48635754559521877,x=5.562730898972807 -color=blue,shape=square,flag=0,i=43813,u=0.4340500185082796,v=0.5600062577845731,w=0.4691320375662904,x=4.60105608981731 -color=blue,shape=triangle,flag=1,i=43817,u=0.3880227798134268,v=0.15106213659034995,w=0.5189008882115655,x=3.92126341719537 -color=purple,shape=square,flag=0,i=43826,u=0.3208522998794402,v=0.6024271158202898,w=0.4876176838995849,x=5.172424232628977 -color=purple,shape=triangle,flag=0,i=43827,u=0.7368537409381595,v=0.24481331432747888,w=0.5120765560164056,x=5.5720435534912065 -color=green,shape=square,flag=0,i=43837,u=0.3179061411787266,v=0.4929006814215642,w=0.5221893060928178,x=5.766094654781486 -color=yellow,shape=triangle,flag=1,i=43840,u=0.9957624841248772,v=0.19989853802903979,w=0.5254515915885394,x=4.250999465020429 -color=red,shape=square,flag=0,i=43848,u=0.8185568465311813,v=0.980985487530177,w=0.5164551481216141,x=3.7970403802077013 -color=purple,shape=circle,flag=0,i=43855,u=0.23981274115974716,v=0.3599397660674801,w=0.48795907681975387,x=6.031291187545109 -color=red,shape=triangle,flag=0,i=43880,u=0.6113618174906779,v=0.33657526355508605,w=0.5188482545853158,x=5.956198917780778 -color=yellow,shape=square,flag=1,i=43884,u=0.43582170157434985,v=0.19905567878401975,w=0.5184715360454498,x=6.16835431728062 -color=blue,shape=circle,flag=1,i=43885,u=0.22252270157150522,v=0.5302693249479362,w=0.5383136678634378,x=4.207656833298322 -color=purple,shape=circle,flag=0,i=43887,u=0.1509900370436299,v=0.1678352120633062,w=0.49264854335407765,x=3.2513583593560096 -color=yellow,shape=triangle,flag=1,i=43889,u=0.22433523884019957,v=0.10069412898125463,w=0.519623353752461,x=4.816280759718293 -color=red,shape=circle,flag=0,i=43896,u=0.24232911273806235,v=0.1540012608889147,w=0.5250532861788867,x=4.21436664653267 -color=yellow,shape=circle,flag=1,i=43920,u=0.959586012999079,v=0.6159726932360294,w=0.5417432523021469,x=5.3879090971619705 -color=red,shape=square,flag=0,i=43924,u=0.5261377191454589,v=0.5369543069604715,w=0.5009948314214691,x=4.692850087583764 -color=red,shape=square,flag=0,i=43926,u=0.21518247740388474,v=0.769381146325305,w=0.5031148812119657,x=4.7969709781084715 -color=red,shape=circle,flag=0,i=43944,u=0.22727336629829564,v=0.2278034519943851,w=0.5263233877133829,x=6.441483382443116 -color=red,shape=circle,flag=0,i=43950,u=0.14663023492980587,v=0.08575644111019984,w=0.5289998568347268,x=5.263940163320825 -color=red,shape=square,flag=0,i=43955,u=0.5980035085951542,v=0.8188135506007557,w=0.5027243827823769,x=5.077626097902214 -color=blue,shape=square,flag=1,i=43973,u=0.7998007760559414,v=0.48489428203215756,w=0.46860017547310107,x=5.666085785503477 -color=green,shape=square,flag=0,i=43984,u=0.3290523041564759,v=0.4725386783499458,w=0.5143102645987679,x=3.3311889694198515 -color=red,shape=circle,flag=0,i=43985,u=0.24955223690952666,v=0.2795037136983582,w=0.5335114153384782,x=5.739299320684356 -color=green,shape=triangle,flag=0,i=43989,u=0.8668030782212506,v=0.8277101521033546,w=0.464487421690664,x=5.485884144057658 -color=red,shape=triangle,flag=1,i=43991,u=0.5740800375972737,v=0.17376072787838903,w=0.5276546779207952,x=5.852438211575425 -color=green,shape=circle,flag=0,i=44008,u=0.3411172798153771,v=0.9730140099804664,w=0.5120873063388043,x=3.7628249219959984 -color=red,shape=square,flag=0,i=44040,u=0.15125408828859999,v=0.855852819576754,w=0.4709566216015036,x=5.633358901100782 -color=red,shape=circle,flag=0,i=44044,u=0.2122875847334743,v=0.29920367143837723,w=0.5267012942189114,x=4.141742693628934 -color=yellow,shape=triangle,flag=1,i=44052,u=0.9197673005755368,v=0.9903860499594775,w=0.5221330145104475,x=5.264595956426461 -color=green,shape=triangle,flag=1,i=44070,u=0.46015174216033383,v=0.7864259897436401,w=0.4661422429080584,x=4.000848835103448 -color=red,shape=square,flag=0,i=44077,u=0.28309021515022303,v=0.44095392917397835,w=0.4760124800701126,x=5.146890721598369 -color=blue,shape=circle,flag=0,i=44078,u=0.7262537212988904,v=0.009454147229661647,w=0.5329253232395388,x=7.119014471227797 -color=orange,shape=square,flag=1,i=44101,u=0.09707919217155736,v=0.06119442269828457,w=0.5115570910791472,x=4.970416187446491 -color=yellow,shape=square,flag=1,i=44107,u=0.7921432366484691,v=0.2879939326546813,w=0.5173829969361902,x=4.966238748741917 -color=purple,shape=triangle,flag=0,i=44122,u=0.24515658015980557,v=0.7458623388261014,w=0.5089056150059037,x=4.005710167740754 -color=blue,shape=triangle,flag=1,i=44123,u=0.37255244182543634,v=0.4661842922625885,w=0.5117032157671845,x=5.464494944873894 -color=red,shape=circle,flag=1,i=44133,u=0.3128838894629171,v=0.2507526158915925,w=0.5234867057757788,x=5.090334848558721 -color=red,shape=triangle,flag=0,i=44178,u=0.9472068592621746,v=0.9004707124866083,w=0.5282594020561011,x=6.940393571300796 -color=red,shape=circle,flag=0,i=44192,u=0.553522123705715,v=0.4757932194359984,w=0.5183056079562443,x=5.265288955854104 -color=green,shape=square,flag=0,i=44215,u=0.23803052733996388,v=0.31886085535855424,w=0.4858553372710511,x=4.037327637892786 -color=purple,shape=square,flag=0,i=44220,u=0.8310620088678032,v=0.8002604338765056,w=0.5011875570174721,x=5.606741438839616 -color=blue,shape=circle,flag=1,i=44224,u=0.8959460851903286,v=0.9101141138264954,w=0.5325983322620735,x=5.561768665497113 -color=red,shape=circle,flag=1,i=44233,u=0.7561612376678916,v=0.7319007512574625,w=0.5265758235617998,x=3.0859138544839158 -color=green,shape=triangle,flag=0,i=44256,u=0.8816500699096232,v=0.11597815421053359,w=0.46795557880044064,x=5.341317078444804 -color=blue,shape=square,flag=0,i=44285,u=0.5330166763628916,v=0.22155951925639394,w=0.4733414630845997,x=4.225798186511307 -color=yellow,shape=circle,flag=1,i=44308,u=0.5055612332304337,v=0.7148802174379841,w=0.5305230755024368,x=3.8124055750730625 -color=blue,shape=square,flag=0,i=44314,u=0.10451706428413021,v=0.28791827095029365,w=0.47667793795343166,x=5.635233046020487 -color=red,shape=square,flag=0,i=44327,u=0.5191891059195163,v=0.7621392226051875,w=0.48239674973933916,x=4.992093323347892 -color=green,shape=triangle,flag=1,i=44338,u=0.5194168874962816,v=0.6178439837946711,w=0.459980457165933,x=4.412632675932382 -color=blue,shape=square,flag=1,i=44344,u=0.8759146828188182,v=0.4941540313853715,w=0.48344527618670596,x=6.610840828068064 -color=yellow,shape=circle,flag=1,i=44345,u=0.8809150845492812,v=0.39249131279324656,w=0.5311835451023484,x=3.7856582081391257 -color=red,shape=circle,flag=0,i=44375,u=0.8021276509013373,v=0.7573027582660581,w=0.518636305855153,x=3.5597809758185637 -color=red,shape=square,flag=0,i=44377,u=0.4787161503774482,v=0.44449729493545076,w=0.493148755903377,x=6.004312971559493 -color=blue,shape=square,flag=1,i=44391,u=0.004118706243226522,v=0.02513800294555546,w=0.4894725345334817,x=4.856908050965396 -color=orange,shape=circle,flag=0,i=44392,u=0.2742200716671289,v=0.6328099318331863,w=0.518605025877578,x=5.945956069870239 -color=orange,shape=circle,flag=1,i=44395,u=0.3284172795899255,v=0.4899180226956167,w=0.519783822356765,x=4.5617227268033576 -color=red,shape=square,flag=0,i=44396,u=0.32009268523941015,v=0.3814163904037119,w=0.4908694830921067,x=4.611924787845079 -color=red,shape=triangle,flag=0,i=44438,u=0.24027257183837814,v=0.21818158482375527,w=0.5132458986916885,x=4.3591820550187395 -color=red,shape=square,flag=1,i=44444,u=0.7571303069622878,v=0.3517997580679546,w=0.4874351362441344,x=4.857781650917474 -color=yellow,shape=circle,flag=1,i=44454,u=0.6319772746950029,v=0.6430990365761307,w=0.5233896886414907,x=3.87082362282355 -color=purple,shape=square,flag=0,i=44467,u=0.026836543269280422,v=0.7893267098230756,w=0.495334904743655,x=3.7770625386085506 -color=red,shape=square,flag=0,i=44500,u=0.06563573510369158,v=0.2484899718074014,w=0.49634022267762407,x=4.85578441358611 -color=red,shape=square,flag=0,i=44506,u=0.7506982661163093,v=0.9296261595719112,w=0.491456898126784,x=5.711361713133169 -color=blue,shape=square,flag=1,i=44507,u=0.8526918346098192,v=0.006090631709906091,w=0.485245940378111,x=5.480425823297286 -color=blue,shape=circle,flag=0,i=44511,u=0.17556779407921252,v=0.8544916101479395,w=0.5248266370320656,x=4.591712339305005 -color=yellow,shape=square,flag=1,i=44525,u=0.6138055226175024,v=0.2518408899858746,w=0.5202899004327896,x=5.068783420458643 -color=blue,shape=circle,flag=0,i=44526,u=0.32842430586019467,v=0.49808305418701226,w=0.5247939727367301,x=5.185844779531198 -color=red,shape=circle,flag=1,i=44566,u=0.7562262035901754,v=0.6997822237419802,w=0.5280998430297158,x=3.0998295171443986 -color=red,shape=square,flag=0,i=44568,u=0.20670391642095465,v=0.1240047571423365,w=0.475555549283771,x=5.6103992702153755 -color=red,shape=circle,flag=0,i=44583,u=0.7438403991426628,v=0.7267588754181725,w=0.5274991530869191,x=4.628048673728366 -color=red,shape=square,flag=0,i=44585,u=0.6636353241567207,v=0.28128898438023553,w=0.4806459917753007,x=5.588665257037561 -color=red,shape=circle,flag=1,i=44588,u=0.07016479646839524,v=0.015863532280976873,w=0.5221312273135886,x=4.791019138048099 -color=red,shape=triangle,flag=0,i=44594,u=0.9567737501912198,v=0.980436914124649,w=0.49587813963819216,x=2.4907338638786114 -color=orange,shape=square,flag=1,i=44625,u=0.48830064593906375,v=0.2993852388787641,w=0.509927679394459,x=2.8454961409041584 -color=blue,shape=circle,flag=1,i=44630,u=0.42558802690355557,v=0.9393782393189878,w=0.52115813084553,x=4.938382049792471 -color=yellow,shape=triangle,flag=1,i=44632,u=0.6395688201639387,v=0.7843029303915384,w=0.5313066272788163,x=5.730611522272919 -color=red,shape=circle,flag=1,i=44634,u=0.36790591261093386,v=0.33705188498522076,w=0.5154340522183124,x=4.721844087566265 -color=red,shape=square,flag=0,i=44649,u=0.0456118055634096,v=0.2042686380129506,w=0.47505074609138426,x=7.512377938810837 -color=red,shape=circle,flag=0,i=44655,u=0.3579242999769078,v=0.2777509205825483,w=0.5205527196274308,x=5.663197859271363 -color=blue,shape=square,flag=1,i=44663,u=0.6288702108731512,v=0.8910028672750042,w=0.48877388218574824,x=6.404309758663504 -color=yellow,shape=square,flag=1,i=44664,u=0.10269788103089272,v=0.7923037298789898,w=0.5178956397322221,x=4.674234728629004 -color=green,shape=triangle,flag=1,i=44665,u=0.9320728801982129,v=0.6636949374775633,w=0.47807593928535586,x=5.030582498624928 -color=green,shape=square,flag=0,i=44685,u=0.5705052364288866,v=0.5423147982199279,w=0.5007490792280032,x=4.999141534061898 -color=red,shape=square,flag=0,i=44686,u=0.4834685687045257,v=0.4548189570417823,w=0.4738343189308736,x=3.9379547987633785 -color=yellow,shape=square,flag=1,i=44688,u=0.9549118451890415,v=0.9651575275886732,w=0.5135915510756244,x=6.291247850816909 -color=yellow,shape=square,flag=1,i=44690,u=0.08960186475911591,v=0.7684575550314768,w=0.5139196703212905,x=5.341828374514144 -color=green,shape=circle,flag=0,i=44694,u=0.619023283596957,v=0.3523073846645306,w=0.49174690296899976,x=4.77248127957025 -color=yellow,shape=circle,flag=1,i=44714,u=0.2855480023002085,v=0.7450927731261932,w=0.5235022102880714,x=4.854784657440374 -color=yellow,shape=circle,flag=1,i=44721,u=0.36778939287893353,v=0.2908808967359484,w=0.5248896981033209,x=6.583085414673263 -color=red,shape=square,flag=0,i=44728,u=0.3696571044240461,v=0.47309836773508906,w=0.46826596740550164,x=6.743447125253634 -color=yellow,shape=circle,flag=1,i=44744,u=0.9965576878403373,v=0.6109026547640025,w=0.5201658756555807,x=5.402179928596834 -color=green,shape=triangle,flag=0,i=44773,u=0.35547899511722536,v=0.7704676786133092,w=0.4779667394153248,x=3.600543562246269 -color=orange,shape=square,flag=0,i=44780,u=0.6765285593597932,v=0.1795856137383327,w=0.5110740821608745,x=4.510517502274008 -color=red,shape=square,flag=1,i=44786,u=0.3209058790607138,v=0.12383583402998521,w=0.4821922856401145,x=4.546873006396432 -color=blue,shape=triangle,flag=1,i=44802,u=0.6747312071584478,v=0.748625992663632,w=0.5240271715080355,x=5.2614671612861015 -color=red,shape=triangle,flag=0,i=44803,u=0.6684141324998482,v=0.980704742273612,w=0.5014146429842454,x=5.372119829686997 -color=purple,shape=square,flag=0,i=44810,u=0.9602860904337266,v=0.5458529483448885,w=0.4981028471007708,x=4.523468619140365 -color=purple,shape=square,flag=0,i=44813,u=0.1721121032489782,v=0.06457716080047782,w=0.49485254164530884,x=5.212920559678786 -color=yellow,shape=circle,flag=1,i=44818,u=0.13594006155726335,v=0.3790972579153782,w=0.5199885303112306,x=5.894693684111605 -color=yellow,shape=triangle,flag=1,i=44834,u=0.10067618509380372,v=0.057919248569549,w=0.528807868107254,x=5.868977578493424 -color=orange,shape=square,flag=1,i=44850,u=0.45399035205866234,v=0.8699876442896479,w=0.5145405641008581,x=4.9571900749992786 -color=green,shape=triangle,flag=0,i=44858,u=0.9533590202309037,v=0.6531161401303006,w=0.47189450929094956,x=7.207353683199297 -color=purple,shape=circle,flag=0,i=44860,u=0.9089099522101729,v=0.1052946245683678,w=0.5115842828177806,x=5.214853370398667 -color=blue,shape=square,flag=1,i=44871,u=0.9995668390492636,v=0.4896572935308351,w=0.49350571249709796,x=5.3520690412975895 -color=red,shape=circle,flag=0,i=44887,u=0.6578724337813551,v=0.6111820141418478,w=0.534496219521755,x=5.164843374119267 -color=purple,shape=triangle,flag=1,i=44892,u=0.5645685107320864,v=0.6837227057123966,w=0.49626378588808984,x=6.466217097614532 -color=red,shape=circle,flag=1,i=44893,u=0.07187286885052446,v=0.1653798395372183,w=0.5295534429482346,x=5.572032290963382 -color=purple,shape=triangle,flag=0,i=44926,u=0.15722126805610137,v=0.1930311611998542,w=0.49228549443138814,x=4.608652529108745 -color=red,shape=square,flag=0,i=44931,u=0.9992587134757783,v=0.25573645017899804,w=0.5028010910605972,x=4.870966330534756 -color=red,shape=triangle,flag=0,i=44953,u=0.14261151438999453,v=0.974093920448945,w=0.5130076698647157,x=3.4742334364745573 -color=purple,shape=triangle,flag=1,i=44970,u=0.12045875072155343,v=0.39778838343457,w=0.48870706279164017,x=5.163100339971365 -color=blue,shape=square,flag=1,i=44971,u=0.7231465031324505,v=0.6426639050871611,w=0.5038035886995131,x=3.5812658871448186 -color=blue,shape=triangle,flag=0,i=44972,u=0.5743885455381894,v=0.9015137740404365,w=0.5071523917818452,x=4.392104656872195 -color=purple,shape=circle,flag=0,i=44980,u=0.0074105523414979,v=0.32140481843670354,w=0.5190865525638839,x=6.225849181673335 -color=red,shape=triangle,flag=0,i=44990,u=0.45766025182867676,v=0.8922138791942553,w=0.526754944791934,x=4.076778039864557 -color=red,shape=square,flag=0,i=45001,u=0.10029034484319854,v=0.21163060873318396,w=0.5035379821144141,x=7.3156656190152916 -color=yellow,shape=square,flag=1,i=45006,u=0.5207334994132492,v=0.37083753519747875,w=0.5198342428223057,x=6.643362495480676 -color=red,shape=triangle,flag=1,i=45017,u=0.3073491294273848,v=0.9642110929779293,w=0.5147568136313735,x=5.844190630797287 -color=blue,shape=triangle,flag=1,i=45036,u=0.8703150078913209,v=0.9858732213750153,w=0.5090044202649895,x=5.444867667791815 -color=yellow,shape=triangle,flag=1,i=45045,u=0.4308348851069683,v=0.8677031719818539,w=0.5277625058545177,x=7.056950967170884 -color=blue,shape=circle,flag=1,i=45051,u=0.39595236354355856,v=0.04568653865058303,w=0.5146027583721374,x=5.158254949451661 -color=red,shape=circle,flag=1,i=45057,u=0.21231142914114975,v=0.11827011540796274,w=0.5267563154507136,x=5.746953318743933 -color=red,shape=triangle,flag=0,i=45073,u=0.220890926919993,v=0.6382545820361779,w=0.5137215122805884,x=6.054346454263514 -color=red,shape=circle,flag=0,i=45085,u=0.10343414555356933,v=0.0854598736563924,w=0.5300173806571845,x=3.5211413915381757 -color=orange,shape=square,flag=0,i=45103,u=0.5069015298753995,v=0.9865405823764551,w=0.5136088627911064,x=2.7395760893199395 -color=green,shape=square,flag=1,i=45114,u=0.3710511813068966,v=0.10939008672183403,w=0.505077308978524,x=5.147776883112683 -color=red,shape=circle,flag=0,i=45130,u=0.23294107329360947,v=0.14254881168157957,w=0.5211576772644613,x=7.544770757486581 -color=red,shape=square,flag=1,i=45135,u=0.3285872756771737,v=0.474436698831299,w=0.5161246404740484,x=4.821317046014342 -color=yellow,shape=triangle,flag=1,i=45156,u=0.11245635984984359,v=0.5462070414752629,w=0.5388022731378233,x=4.803443593518167 -color=red,shape=circle,flag=0,i=45166,u=0.22483481608702138,v=0.26840902860157495,w=0.5158470239351043,x=4.353408794630831 -color=blue,shape=triangle,flag=1,i=45171,u=0.5340356710976087,v=0.48580905213986625,w=0.5145988937234728,x=3.190753106200006 -color=red,shape=circle,flag=0,i=45187,u=0.5218269179915481,v=0.48291141102199187,w=0.507988150814012,x=4.587852284602872 -color=red,shape=triangle,flag=1,i=45200,u=0.4648785723600424,v=0.15662490716392385,w=0.502627273437666,x=5.126089774833094 -color=yellow,shape=square,flag=1,i=45209,u=0.31641308456492667,v=0.41766007583201104,w=0.5156803473198549,x=4.486190964576527 -color=red,shape=circle,flag=0,i=45213,u=0.9190642191601589,v=0.9249959964768593,w=0.5087206455879548,x=4.360823891813719 -color=yellow,shape=circle,flag=1,i=45221,u=0.7406197210842403,v=0.797551650461032,w=0.5258520840789713,x=3.9996815312838936 -color=yellow,shape=triangle,flag=1,i=45229,u=0.431785881677494,v=0.7623720784105696,w=0.5407768232109682,x=5.082742009776406 -color=yellow,shape=circle,flag=1,i=45245,u=0.44370159095854655,v=0.6474270343771463,w=0.5270783585545887,x=4.916876931292912 -color=blue,shape=square,flag=0,i=45264,u=0.008701117901218747,v=0.9089262580608287,w=0.5027294363670075,x=4.143508501082306 -color=yellow,shape=square,flag=1,i=45266,u=0.3983240672849724,v=0.7317647492061637,w=0.5127567440121259,x=4.391866554668081 -color=green,shape=triangle,flag=0,i=45267,u=0.3489922349651863,v=0.1309769729966016,w=0.48865326216766564,x=4.7341727518141585 -color=red,shape=triangle,flag=0,i=45285,u=0.8529528906795177,v=0.2801201836212964,w=0.5120539688118472,x=5.4925318518139825 -color=red,shape=square,flag=0,i=45295,u=0.14720808245767525,v=0.13030981307150258,w=0.5020906886514244,x=3.9605969064579374 -color=red,shape=square,flag=1,i=45309,u=0.8764645684375807,v=0.01390401346575243,w=0.5042168097169483,x=7.2327564495502985 -color=red,shape=circle,flag=0,i=45317,u=0.8371223163876399,v=0.8954721512674688,w=0.5118977462673061,x=3.1653446378461623 -color=yellow,shape=square,flag=1,i=45333,u=0.8180300710172582,v=0.7992838268770319,w=0.5117228965198994,x=4.468813358314073 -color=yellow,shape=triangle,flag=1,i=45344,u=0.8666476334611205,v=0.46834494344142696,w=0.5449812925825097,x=4.653466710193914 -color=yellow,shape=circle,flag=0,i=45350,u=0.14151861441122293,v=0.8744775761628885,w=0.5434326905421337,x=4.870424755809928 -color=blue,shape=triangle,flag=1,i=45351,u=0.4677081725165374,v=0.5525407044233562,w=0.5118667730089137,x=4.399699331041051 -color=red,shape=square,flag=0,i=45358,u=0.14269181957750132,v=0.5528595463613156,w=0.5002238458574175,x=5.781514808117028 -color=red,shape=triangle,flag=0,i=45377,u=0.18303080006452788,v=0.0058017354302783986,w=0.523422859718131,x=5.567913514190596 -color=red,shape=circle,flag=0,i=45388,u=0.7345257254506266,v=0.7270179368277819,w=0.5103717529565557,x=5.834436684649049 -color=red,shape=triangle,flag=0,i=45390,u=0.0011926732543450225,v=0.7367315651951601,w=0.5140608434970648,x=4.525430615794258 -color=red,shape=circle,flag=0,i=45391,u=0.440836427255319,v=0.3980980657778506,w=0.5103697475822193,x=3.4113088721523446 -color=red,shape=circle,flag=0,i=45396,u=0.7171493584343511,v=0.6690982478236214,w=0.5142219189214519,x=7.262984922316579 -color=purple,shape=square,flag=0,i=45423,u=0.08585933998312123,v=0.18998814276855924,w=0.4863992757591215,x=4.425584886749749 -color=blue,shape=triangle,flag=1,i=45431,u=0.2623059136543101,v=0.16922747555449835,w=0.5123319087703594,x=3.5678226818066983 -color=blue,shape=square,flag=0,i=45484,u=0.9928718744290427,v=0.48793824130594465,w=0.4911507274128445,x=5.501928294793345 -color=red,shape=circle,flag=0,i=45489,u=0.0436319444347707,v=0.00037559668726951795,w=0.5348331381916813,x=4.9904588127503695 -color=red,shape=square,flag=0,i=45492,u=0.5611002805093157,v=0.445209175088075,w=0.4986559549516708,x=6.088023138558834 -color=red,shape=circle,flag=1,i=45493,u=0.5928527636422501,v=0.5310546263819504,w=0.5358519083796585,x=4.899892211847459 -color=yellow,shape=square,flag=1,i=45505,u=0.09791317778345843,v=0.6258372974259855,w=0.5355810783224939,x=4.878735628161608 -color=green,shape=triangle,flag=0,i=45506,u=0.15860542487611384,v=0.3324888717858109,w=0.4872436692143982,x=4.933397410148279 -color=blue,shape=square,flag=1,i=45513,u=0.8344454562492483,v=0.28991637424268,w=0.4930554835160037,x=6.630685398371834 -color=yellow,shape=triangle,flag=1,i=45522,u=0.6960495755695266,v=0.35662949568438584,w=0.5417977413573635,x=4.993835937393338 -color=green,shape=triangle,flag=0,i=45523,u=0.028726227233780266,v=0.8368987200063168,w=0.49144438317283956,x=4.91716778694866 -color=red,shape=square,flag=0,i=45527,u=0.362470705664502,v=0.23288251635350998,w=0.4837192428495595,x=7.319810129361041 -color=yellow,shape=triangle,flag=1,i=45541,u=0.3909461619111285,v=0.9603037348852396,w=0.5367475137335112,x=4.0747975295414625 -color=yellow,shape=circle,flag=0,i=45565,u=0.49711884869257894,v=0.4063296635007877,w=0.541821282319149,x=4.321738392032457 -color=red,shape=square,flag=1,i=45576,u=0.5910295406403523,v=0.5820570508367864,w=0.47872185401363015,x=6.416732335948374 -color=blue,shape=circle,flag=1,i=45592,u=0.36989121704141326,v=0.4521335780997142,w=0.5116245532264182,x=3.6690127676325535 -color=green,shape=square,flag=0,i=45593,u=0.07421018323124273,v=0.46250417315222725,w=0.49673545467011604,x=4.98690926513951 -color=red,shape=square,flag=0,i=45595,u=0.5323677885521801,v=0.49733842971342646,w=0.4703215915790957,x=6.047016287313322 -color=red,shape=circle,flag=0,i=45603,u=0.09807649946600483,v=0.0738983765849136,w=0.5272099757048196,x=5.235778755307683 -color=red,shape=square,flag=1,i=45618,u=0.24282315957964595,v=0.5083741163423824,w=0.4823275084626719,x=4.9515457101449725 -color=purple,shape=circle,flag=0,i=45619,u=0.320649306752549,v=0.7743856019807422,w=0.5166424857976284,x=6.792867234755408 -color=red,shape=square,flag=0,i=45621,u=0.7383745629253389,v=0.5701217458562096,w=0.48157784431598083,x=4.292122708256567 -color=blue,shape=triangle,flag=0,i=45635,u=0.1342696338557502,v=0.6255565877955351,w=0.505948628739885,x=3.1167301368582057 -color=yellow,shape=triangle,flag=1,i=45662,u=0.9596903920589072,v=0.20890286278455095,w=0.5441530368442388,x=3.2197718265173614 -color=red,shape=circle,flag=0,i=45672,u=0.9796340879843932,v=0.986480448637008,w=0.5319758182422377,x=4.3286292266413 -color=red,shape=square,flag=0,i=45694,u=0.987846244876944,v=0.40707353674400504,w=0.48622715121594995,x=6.430780212787359 -color=blue,shape=circle,flag=1,i=45697,u=0.4941716080492371,v=0.21045326175908352,w=0.4965027250181252,x=4.2251332758271944 -color=yellow,shape=circle,flag=1,i=45700,u=0.8039432740368295,v=0.4333289174684781,w=0.5429410295464143,x=5.356049355257544 -color=red,shape=square,flag=0,i=45722,u=0.29569528472445306,v=0.4214484911823976,w=0.49457823230290776,x=3.663297053844179 -color=red,shape=triangle,flag=0,i=45727,u=0.5802258910642472,v=0.21105636278613848,w=0.5000166463948257,x=6.891751326191411 -color=red,shape=triangle,flag=1,i=45729,u=0.7339480183316225,v=0.6604864835276257,w=0.5040423190425101,x=6.620850000868394 -color=red,shape=square,flag=0,i=45752,u=0.7118992958554076,v=0.5811156591032097,w=0.4986281250416253,x=6.7767526816590475 -color=red,shape=triangle,flag=1,i=45773,u=0.8841030289584918,v=0.5115932921587547,w=0.5134011019500868,x=4.998692873618105 -color=purple,shape=square,flag=0,i=45774,u=0.9652743344304694,v=0.9070327064358358,w=0.4914980251629097,x=4.594248023738808 -color=green,shape=square,flag=0,i=45789,u=0.993860338741655,v=0.3863846711806871,w=0.5106468829838453,x=3.4839113378701345 -color=red,shape=circle,flag=0,i=45792,u=0.35788962798853874,v=0.4097501815910554,w=0.5485136576962423,x=6.919867339175146 -color=yellow,shape=square,flag=1,i=45802,u=0.5078260148234183,v=0.8370292007945583,w=0.5267293179728605,x=5.240897554347324 -color=yellow,shape=square,flag=1,i=45806,u=0.8472003239385223,v=0.5924479536428879,w=0.5274849365040836,x=4.649745368307674 -color=red,shape=square,flag=1,i=45811,u=0.013178508944489242,v=0.5047094653724545,w=0.492524575441183,x=4.115776223728498 -color=blue,shape=triangle,flag=1,i=45844,u=0.16143164451186653,v=0.24980047239449477,w=0.5163918925759441,x=5.429282303965134 -color=orange,shape=square,flag=0,i=45900,u=0.9637822338407995,v=0.5231018284644444,w=0.4979551545626011,x=6.756277830301471 -color=yellow,shape=square,flag=1,i=45904,u=0.2833747747934823,v=0.5376753675836141,w=0.5209102388331349,x=5.454760759531425 -color=blue,shape=square,flag=0,i=45917,u=0.8511440112771441,v=0.9061136344992315,w=0.4801521277209463,x=4.48260411679007 -color=yellow,shape=triangle,flag=1,i=45930,u=0.29916361695325044,v=0.9288443295649261,w=0.5431226997013537,x=5.616987212342591 -color=yellow,shape=square,flag=1,i=45942,u=0.8574333219660808,v=0.5150315154654709,w=0.5193525317004768,x=5.205780956811961 -color=green,shape=square,flag=0,i=45954,u=0.8276920325701533,v=0.12452654293773313,w=0.5053331285693116,x=3.7596364097908186 -color=red,shape=square,flag=0,i=45960,u=0.5175434622957339,v=0.8379639703700468,w=0.507889195065473,x=3.3764141189485257 -color=red,shape=square,flag=1,i=46003,u=0.6368728959804477,v=0.8926266834562082,w=0.49372893914259,x=5.230870112873864 -color=red,shape=square,flag=0,i=46007,u=0.7095889763369441,v=0.9625515310526058,w=0.4972402606296109,x=6.724526949348188 -color=blue,shape=triangle,flag=1,i=46024,u=0.4073120956522893,v=0.9698912133718399,w=0.5126193000247149,x=4.3408159610800405 -color=red,shape=triangle,flag=0,i=46028,u=0.8846684524650361,v=0.47775334436491845,w=0.49773706374591903,x=3.6280666413795113 -color=blue,shape=circle,flag=0,i=46055,u=0.7975326758590642,v=0.9196451416634517,w=0.495263239892926,x=3.5609442821157558 -color=blue,shape=triangle,flag=1,i=46066,u=0.5471561931357293,v=0.09918859216347842,w=0.5085521251681956,x=8.20203872572708 -color=red,shape=square,flag=0,i=46070,u=0.19240243971579907,v=0.4371017177409373,w=0.5195085119920236,x=3.9230151773397828 -color=red,shape=triangle,flag=1,i=46081,u=0.9369185416860067,v=0.5901519010715599,w=0.49709603676515884,x=7.3089917028832785 -color=red,shape=triangle,flag=0,i=46096,u=0.21734975243598598,v=0.6417983668578033,w=0.4930405105573353,x=6.826837459403799 -color=red,shape=circle,flag=0,i=46130,u=0.37580495962606697,v=0.34301133566114617,w=0.5382518094318486,x=3.029951031097662 -color=red,shape=circle,flag=1,i=46147,u=0.31235698837751125,v=0.27453736539046647,w=0.5411521130682586,x=3.1926330867391997 -color=red,shape=triangle,flag=0,i=46154,u=0.20186480141864716,v=0.9720568082560206,w=0.4820419990538739,x=5.014978672294716 -color=orange,shape=square,flag=1,i=46156,u=0.9493554866603044,v=0.6557118497720306,w=0.49630002152989666,x=4.70687551898535 -color=yellow,shape=square,flag=1,i=46165,u=0.10451573025181304,v=0.8186215314993505,w=0.529385394822364,x=5.9327701376255355 -color=red,shape=triangle,flag=0,i=46175,u=0.0682014789362606,v=0.21280202762482492,w=0.47569041097849757,x=4.610725585552525 -color=red,shape=circle,flag=1,i=46188,u=0.8932859896364232,v=0.96711110915342,w=0.538656832247169,x=6.057830900285073 -color=yellow,shape=square,flag=1,i=46198,u=0.36220392092927745,v=0.33583358669699814,w=0.5277859868922251,x=4.789342608170004 -color=orange,shape=square,flag=1,i=46203,u=0.3439682252338231,v=0.2127262604833734,w=0.49359773227184034,x=5.784442614906929 -color=red,shape=circle,flag=0,i=46210,u=0.45214634391790864,v=0.3648123201579528,w=0.5339460574984352,x=6.225920328371827 -color=red,shape=circle,flag=0,i=46211,u=0.8839885326717482,v=0.8114201462773275,w=0.5286147811621462,x=5.198209243435775 -color=red,shape=circle,flag=0,i=46226,u=0.7453306724355845,v=0.838808058667226,w=0.5265038117371149,x=4.246609213895595 -color=red,shape=circle,flag=1,i=46234,u=0.07485087627191434,v=0.1032926259424846,w=0.5217006344754798,x=6.568839935962624 -color=red,shape=circle,flag=0,i=46260,u=0.7599922991304641,v=0.6764688341560959,w=0.5234634777466669,x=5.244796316561899 -color=yellow,shape=square,flag=0,i=46286,u=0.47874281763503257,v=0.3176732816778183,w=0.5230201215630013,x=6.629856645148432 -color=purple,shape=square,flag=0,i=46288,u=0.12698519073184733,v=0.35205788100264856,w=0.49943691027597703,x=2.491455836861123 -color=green,shape=square,flag=0,i=46289,u=0.38189833090065917,v=0.4229566494355128,w=0.5133842813534175,x=6.575277234204026 -color=green,shape=square,flag=1,i=46292,u=0.7824142633222194,v=0.23009146591293173,w=0.508965414696369,x=3.771112420977745 -color=green,shape=circle,flag=0,i=46306,u=0.5527630107732677,v=0.40671955338058496,w=0.5106215362988595,x=2.583959816031608 -color=blue,shape=triangle,flag=1,i=46315,u=0.7245880944138003,v=0.8815411187912761,w=0.5193192268573201,x=4.7110743591170605 -color=red,shape=circle,flag=0,i=46326,u=0.18518631901516835,v=0.19576651558603056,w=0.519588077699846,x=3.731996940759151 -color=red,shape=square,flag=0,i=46331,u=0.7624011920122076,v=0.46950974545590196,w=0.5061554181244927,x=3.190782856635772 -color=yellow,shape=circle,flag=1,i=46332,u=0.4099804092853969,v=0.6933342996241612,w=0.5548024496883684,x=5.402298994997285 -color=red,shape=square,flag=1,i=46340,u=0.9544020158953853,v=0.483924102949422,w=0.5064587968063257,x=4.583924022275249 -color=blue,shape=square,flag=0,i=46366,u=0.33586362388178603,v=0.43369563371293907,w=0.48094543516943067,x=7.1366620904277225 -color=yellow,shape=circle,flag=1,i=46370,u=0.5130434797929835,v=0.65024334625538,w=0.5575224174831193,x=6.455492159404774 -color=red,shape=circle,flag=0,i=46377,u=0.6320140373924674,v=0.5330833533595211,w=0.516867428593351,x=3.74951144436213 -color=blue,shape=square,flag=0,i=46403,u=0.08322265729916467,v=0.26425191838002804,w=0.48888955728189154,x=3.9473720097346123 -color=purple,shape=circle,flag=0,i=46404,u=0.6090234782866996,v=0.7001026135277432,w=0.5192966602472153,x=6.460675853622124 -color=red,shape=circle,flag=0,i=46405,u=0.8244771162660871,v=0.8413514042645212,w=0.5207962044325894,x=3.4196031768594195 -color=red,shape=square,flag=1,i=46407,u=0.7227584169355041,v=0.16881731256879295,w=0.4907749561317916,x=5.861970673069835 -color=yellow,shape=triangle,flag=1,i=46408,u=0.6493040533623267,v=0.8401994169767789,w=0.5411352020873921,x=5.7227150751418465 -color=red,shape=circle,flag=0,i=46420,u=0.47739989672422645,v=0.5216544167786235,w=0.528660721918708,x=5.566591599137276 -color=red,shape=triangle,flag=0,i=46444,u=0.3577563230979893,v=0.11583709904789907,w=0.4871855940429217,x=5.271873155405054 -color=yellow,shape=circle,flag=1,i=46457,u=0.8883488953241907,v=0.9129508551707828,w=0.5632938050523973,x=6.045349617286569 -color=red,shape=triangle,flag=1,i=46466,u=0.29487297540900936,v=0.331972803702242,w=0.49082955801428246,x=6.870182167534151 -color=blue,shape=circle,flag=0,i=46484,u=0.6995054328119791,v=0.9860819266589024,w=0.49938649158915105,x=4.144411290633849 -color=red,shape=circle,flag=0,i=46488,u=0.3618559577189957,v=0.34060942084156476,w=0.5319289242148977,x=5.2542899345150085 -color=red,shape=square,flag=0,i=46496,u=0.353832393958744,v=0.6707684943847947,w=0.49022094417422557,x=8.074957340314246 -color=red,shape=triangle,flag=0,i=46502,u=0.16672582814841352,v=0.30648067323446815,w=0.49162485115299764,x=5.24371007841722 -color=yellow,shape=circle,flag=1,i=46503,u=0.9448159797593451,v=0.1713081371340821,w=0.5620752132798074,x=4.531973046334346 -color=blue,shape=triangle,flag=0,i=46513,u=0.79743578278037,v=0.16456392167276657,w=0.5138414960049742,x=5.664171127785084 -color=purple,shape=triangle,flag=0,i=46515,u=0.08413793538334824,v=0.540634380103699,w=0.49386378244998147,x=6.954894581236826 -color=red,shape=triangle,flag=0,i=46516,u=0.24522364774371652,v=0.2598492936505107,w=0.5011047025275889,x=7.083891385200946 -color=red,shape=square,flag=0,i=46523,u=0.5934862679656275,v=0.18952844168090832,w=0.49068820402903646,x=5.115217884918773 -color=blue,shape=square,flag=0,i=46526,u=0.753370385439251,v=0.3503688609910435,w=0.5000911289370165,x=3.9820500380181776 -color=red,shape=circle,flag=0,i=46535,u=0.8114758209662933,v=0.8796999831036889,w=0.5238130521945566,x=5.340181402880078 -color=red,shape=triangle,flag=0,i=46542,u=0.9583935780536258,v=0.4048631445115657,w=0.5005042168495568,x=5.419712202523548 -color=blue,shape=square,flag=1,i=46547,u=0.9051582580631468,v=0.04438943953294161,w=0.5073988064076592,x=5.89213101038574 -color=yellow,shape=circle,flag=1,i=46550,u=0.5356739092804041,v=0.13961146443267358,w=0.5593304070159836,x=5.466342135747884 -color=red,shape=triangle,flag=0,i=46552,u=0.9028472567299615,v=0.8454530280611189,w=0.4996168807643213,x=4.4974549420168115 -color=blue,shape=square,flag=0,i=46564,u=0.5160334223574716,v=0.0023946266563006358,w=0.5160300771932227,x=5.498406464953454 -color=red,shape=triangle,flag=0,i=46580,u=0.07673636782664706,v=0.7982536179349987,w=0.48501538106572845,x=5.715335480385936 -color=yellow,shape=square,flag=1,i=46601,u=0.26873096775100924,v=0.28503903348657367,w=0.525949032642645,x=5.429716705738756 -color=red,shape=circle,flag=1,i=46614,u=0.7935061023857892,v=0.8361719143132195,w=0.5171550136919782,x=4.572290505656473 -color=blue,shape=circle,flag=0,i=46618,u=0.8835668226666227,v=0.016239543782154642,w=0.48929064100345765,x=5.920305510030054 -color=yellow,shape=square,flag=1,i=46620,u=0.4132160546802851,v=0.8735165822221441,w=0.5307585266488947,x=5.535900694529549 -color=orange,shape=square,flag=0,i=46623,u=0.15407786197921036,v=0.8090674618517943,w=0.5007508980077587,x=3.5715702606520447 -color=red,shape=square,flag=1,i=46629,u=0.5873323378987926,v=0.1915647703618364,w=0.48586002023725205,x=6.259105589465324 -color=red,shape=triangle,flag=0,i=46632,u=0.7667546716590242,v=0.062438782532887926,w=0.48881290524462906,x=2.8667176620244477 -color=purple,shape=square,flag=0,i=46633,u=0.794032810327964,v=0.6336521863502528,w=0.49823593067340505,x=2.981862945568826 -color=blue,shape=circle,flag=1,i=46643,u=0.9238139432990654,v=0.8080327057089758,w=0.4929428786143888,x=4.180894290122365 -color=green,shape=square,flag=0,i=46649,u=0.5433892863715665,v=0.13227472694614106,w=0.488304030493141,x=5.309734961677411 -color=red,shape=square,flag=0,i=46666,u=0.22450194351401398,v=0.28648454784011335,w=0.4835254418696976,x=4.9609309010150335 -color=red,shape=square,flag=1,i=46674,u=0.7027288261789671,v=0.816128180270261,w=0.48175651060847274,x=3.141949378893395 -color=orange,shape=triangle,flag=0,i=46681,u=0.7708069576787248,v=0.09203676709685482,w=0.5012100263702118,x=6.498960205893897 -color=red,shape=square,flag=0,i=46690,u=0.7180514052326967,v=0.6101693332816094,w=0.47942071411986864,x=5.223236710682899 -color=red,shape=triangle,flag=0,i=46696,u=0.7027731323172753,v=0.17573990013385177,w=0.49934759854366717,x=5.968216164756009 -color=yellow,shape=square,flag=1,i=46735,u=0.7499398624119413,v=0.684472265043443,w=0.5267408049252692,x=6.008447044231407 -color=blue,shape=circle,flag=0,i=46738,u=0.8194578781259652,v=0.4789674548825732,w=0.5007236065661714,x=6.847128147406359 -color=green,shape=square,flag=1,i=46741,u=0.7454021910487464,v=0.8504302160678308,w=0.5018832658371806,x=5.490400818579173 -color=yellow,shape=circle,flag=1,i=46742,u=0.8923911614586726,v=0.19585347958062027,w=0.5490755587753834,x=4.883575949603913 -color=red,shape=triangle,flag=0,i=46753,u=0.660969842579345,v=0.2712913961433966,w=0.4877660442676889,x=6.086473084504273 -color=green,shape=circle,flag=0,i=46763,u=0.10328031304171426,v=0.791958435129027,w=0.5155468420952434,x=4.748070083377726 -color=red,shape=square,flag=0,i=46766,u=0.7542937798918578,v=0.26771251517247974,w=0.4891611679957991,x=5.482268315816298 -color=red,shape=square,flag=0,i=46767,u=0.25519457622631814,v=0.6209145155916119,w=0.48804806092480507,x=7.663681831035738 -color=yellow,shape=triangle,flag=1,i=46815,u=0.8261702688121257,v=0.6417397171576062,w=0.5365649655692609,x=5.79497503679336 -color=yellow,shape=square,flag=0,i=46858,u=0.4768098187004117,v=0.6065725565123735,w=0.5258266090028999,x=4.346599600873398 -color=blue,shape=square,flag=1,i=46867,u=0.30219664549385616,v=0.6427937934434975,w=0.5090660253631316,x=2.7519410917381513 -color=red,shape=square,flag=0,i=46870,u=0.3254728094068935,v=0.02521790834004045,w=0.49190811212289776,x=6.161406809024527 -color=purple,shape=square,flag=0,i=46882,u=0.2885419361368933,v=0.1821784127387872,w=0.5011011056507825,x=6.596474587425309 -color=purple,shape=triangle,flag=0,i=46894,u=0.7649996830318427,v=0.7057760289297997,w=0.47818491276444397,x=7.764410234493627 -color=red,shape=circle,flag=1,i=46898,u=0.9173561068853706,v=0.8714539160783028,w=0.5217344831484071,x=5.983669217057653 -color=purple,shape=square,flag=0,i=46899,u=0.832133970352546,v=0.5513734277901636,w=0.5026254156852757,x=4.131415702503828 -color=blue,shape=triangle,flag=1,i=46918,u=0.17240803865256504,v=0.6714488880210832,w=0.5112204946266515,x=3.347056989012925 -color=yellow,shape=circle,flag=1,i=46927,u=0.7631633257999872,v=0.7501666922024665,w=0.5593739992516134,x=2.4884751403765417 -color=red,shape=square,flag=0,i=46934,u=0.3546037031992605,v=0.5904077190202255,w=0.5019602704950292,x=4.208827735873 -color=yellow,shape=square,flag=0,i=46941,u=0.4436343054257048,v=0.44262994004598855,w=0.5286489396957849,x=5.831869786461987 -color=yellow,shape=triangle,flag=1,i=46942,u=0.21767877193783636,v=0.22750832741862148,w=0.540032428858978,x=4.761954421542712 -color=green,shape=square,flag=0,i=46946,u=0.7262334097102364,v=0.2353282855778408,w=0.4999245913322337,x=4.745533301778669 -color=purple,shape=square,flag=0,i=46954,u=0.8186180239660209,v=0.10104364344236028,w=0.5104047484558277,x=3.9283208093090685 -color=yellow,shape=triangle,flag=0,i=46963,u=0.8044380242056894,v=0.48925045393264954,w=0.5364201979495122,x=5.645636168247152 -color=red,shape=square,flag=0,i=46985,u=0.06497557129893827,v=0.6991710199402009,w=0.507144569108046,x=5.677247556324136 -color=green,shape=circle,flag=0,i=47029,u=0.9762921825491683,v=0.7107268626684553,w=0.5286941439319393,x=5.144456965314547 -color=red,shape=circle,flag=0,i=47042,u=0.33490633893199995,v=0.3608104850818826,w=0.5205666360753458,x=7.4188199371195 -color=green,shape=triangle,flag=0,i=47047,u=0.039767338119254814,v=0.46529001464307707,w=0.5185059008702475,x=5.148145249729516 -color=purple,shape=triangle,flag=0,i=47075,u=0.4238377340456261,v=0.44971958577056437,w=0.48423243803313204,x=6.029563135645998 -color=orange,shape=circle,flag=1,i=47092,u=0.8030671880585626,v=0.9891023960550895,w=0.5110299177240867,x=5.126979133167343 -color=red,shape=circle,flag=0,i=47096,u=0.9471840359449452,v=1.032825306093868,w=0.5127214688113167,x=7.07887106904234 -color=purple,shape=square,flag=0,i=47110,u=0.9245975180239253,v=0.5501934438638421,w=0.5077342321500599,x=4.756429181394977 -color=red,shape=square,flag=1,i=47113,u=0.8807413193774567,v=0.3812022018313429,w=0.5028161723473694,x=6.616014823254446 -color=purple,shape=circle,flag=0,i=47120,u=0.16516499233085713,v=0.7180170213039255,w=0.49334801265863043,x=7.353533367934015 -color=green,shape=circle,flag=0,i=47133,u=0.8291327331666651,v=0.5404462685913383,w=0.5240367332104946,x=4.337129862861785 -color=yellow,shape=square,flag=1,i=47155,u=0.1393480894867064,v=0.877654137532857,w=0.5226830661084343,x=3.262304949571476 -color=red,shape=square,flag=0,i=47162,u=0.8175769322609224,v=0.546646526735896,w=0.5061686709812702,x=5.562478817447708 -color=red,shape=circle,flag=0,i=47174,u=0.02593532114748942,v=0.07308388086340462,w=0.5136019938756533,x=4.369231541321697 -color=red,shape=circle,flag=0,i=47183,u=0.26635567281883965,v=0.2563435326863076,w=0.5161011079146515,x=5.746347842276524 -color=purple,shape=square,flag=1,i=47186,u=0.6950764409032439,v=0.5096850967074611,w=0.5075729930370032,x=2.599811429785023 -color=red,shape=circle,flag=0,i=47208,u=0.9299636936493809,v=0.9971142934477801,w=0.5075293440101155,x=6.001482949241406 -color=green,shape=triangle,flag=1,i=47215,u=0.19507944614347916,v=0.6522992823341746,w=0.5179612139929514,x=4.7025089827995865 -color=red,shape=circle,flag=0,i=47216,u=0.14044300726542525,v=0.13484725741759343,w=0.5109732706855736,x=3.3028669887383555 -color=red,shape=square,flag=0,i=47229,u=0.016232583887730856,v=0.9275553091747389,w=0.5221262900186803,x=4.627264747342033 -color=red,shape=square,flag=0,i=47238,u=0.5864002275711035,v=0.7073043337719022,w=0.5136173048913757,x=5.114247824613758 -color=blue,shape=square,flag=1,i=47244,u=0.4203268727093499,v=0.15741438185063883,w=0.5060829885362574,x=4.547389302114683 -color=blue,shape=triangle,flag=1,i=47254,u=0.40195400941566617,v=0.012095128155866885,w=0.5071002461823524,x=6.8373947461241125 -color=red,shape=square,flag=1,i=47266,u=0.6892298887239438,v=0.06749581071176824,w=0.5134438523168204,x=5.846820804341373 -color=purple,shape=square,flag=0,i=47277,u=0.12928427203362913,v=0.36014711985384984,w=0.5160978398349982,x=4.723551855587213 -color=red,shape=square,flag=0,i=47278,u=0.6236826731568171,v=0.27885719808888465,w=0.5090518616191644,x=4.920001701161076 -color=green,shape=triangle,flag=0,i=47283,u=0.5398060712735295,v=0.4485334535555223,w=0.5178108058032534,x=5.021032207715689 -color=red,shape=square,flag=0,i=47286,u=0.32149074697541336,v=0.16677447012619573,w=0.5167315619046612,x=4.779809890363825 -color=yellow,shape=triangle,flag=1,i=47307,u=0.8098494450504433,v=0.7045128087832206,w=0.5340669794584956,x=4.392344316044515 -color=purple,shape=circle,flag=0,i=47314,u=0.47017533749995866,v=0.517684914820752,w=0.4971441451769297,x=6.024705678937541 -color=green,shape=circle,flag=0,i=47337,u=0.8366917068561538,v=0.3528213533573922,w=0.5327944049749043,x=4.964044336632469 -color=red,shape=square,flag=0,i=47338,u=0.7278866542361956,v=0.15464997955561854,w=0.5133664050021653,x=6.858963122633693 -color=blue,shape=square,flag=0,i=47346,u=0.5520878440143321,v=0.006707367587415192,w=0.5153431893106104,x=4.294330250353214 -color=purple,shape=circle,flag=0,i=47350,u=0.24259937277502486,v=0.8091021896462627,w=0.49728397753578957,x=5.025337740979827 -color=red,shape=circle,flag=1,i=47359,u=0.5170181142067491,v=0.454892013920827,w=0.5025080815457361,x=4.42293438162659 -color=purple,shape=circle,flag=1,i=47363,u=0.7748924526441401,v=0.5509722174238556,w=0.4909915790533446,x=5.548677350535702 -color=yellow,shape=square,flag=1,i=47371,u=0.3854236629925789,v=0.21570318517152565,w=0.5060967631551629,x=4.733777279077814 -color=red,shape=circle,flag=1,i=47380,u=0.04315118224791137,v=-0.034752698984486796,w=0.4979484445565782,x=4.674524646900773 -color=green,shape=square,flag=0,i=47401,u=0.5837047188683913,v=0.1491016258660176,w=0.505414130927496,x=5.2521255382489604 -color=red,shape=square,flag=0,i=47403,u=0.8511067117927236,v=0.5483185788902639,w=0.5258086531059414,x=4.65198911405789 -color=yellow,shape=triangle,flag=1,i=47411,u=0.5933459323270596,v=0.16725344350122384,w=0.5362386349574879,x=5.137955091297861 -color=green,shape=triangle,flag=0,i=47416,u=0.7869700833298803,v=0.6793671355665465,w=0.52061176475139,x=4.132773703302157 -color=red,shape=square,flag=1,i=47427,u=0.446071309064211,v=0.3204912632545579,w=0.5333678445883538,x=4.5565480665755 -color=red,shape=square,flag=0,i=47430,u=0.5268630293399926,v=0.6323270862196834,w=0.5310174979895886,x=5.5909091259466805 -color=red,shape=circle,flag=0,i=47437,u=0.0033475201684591838,v=0.03618362509207451,w=0.4901706767255952,x=4.699659209270325 -color=yellow,shape=square,flag=1,i=47440,u=0.4532982304848068,v=0.34391951198732584,w=0.5044737130552028,x=4.2420672792299845 -color=blue,shape=square,flag=0,i=47446,u=0.8812729694031037,v=0.45587457470399395,w=0.5198164188620964,x=5.679214137362975 -color=green,shape=circle,flag=1,i=47452,u=0.7614596041992977,v=0.21989950923730928,w=0.5265555445195841,x=6.662307420045459 -color=red,shape=square,flag=0,i=47465,u=0.6218962072373867,v=0.6724428584573833,w=0.536694507580103,x=5.178076509784404 -color=red,shape=square,flag=0,i=47471,u=0.5872206380159184,v=0.7176345624867879,w=0.538797809675456,x=5.383789374510235 -color=red,shape=triangle,flag=1,i=47481,u=0.6928641458980317,v=0.44484426295309343,w=0.4949000535279065,x=4.095925460442613 -color=red,shape=circle,flag=0,i=47484,u=0.21513830590522154,v=0.23004368703877412,w=0.49735463616800524,x=5.513201421614358 -color=red,shape=triangle,flag=1,i=47489,u=0.8590725669427592,v=0.13089164954576804,w=0.4955360747372989,x=3.658258041746844 -color=red,shape=square,flag=0,i=47491,u=0.09092420109253252,v=0.6107014928682417,w=0.5342359763308872,x=3.9664304163467627 -color=red,shape=square,flag=0,i=47493,u=0.07385313022791418,v=0.15527772839738208,w=0.5333571343089012,x=3.9477415123140234 -color=red,shape=circle,flag=1,i=47509,u=0.5196031022428723,v=0.4771131849532491,w=0.5043906528681675,x=3.2496313211363073 -color=blue,shape=triangle,flag=1,i=47511,u=0.7248176976849061,v=0.07478963524029203,w=0.49552344232871137,x=5.648361598236931 -color=green,shape=triangle,flag=0,i=47533,u=0.9211388368315184,v=0.520081232078681,w=0.5108849083338292,x=5.8260786964863245 -color=yellow,shape=square,flag=0,i=47569,u=0.21125667155172767,v=0.21424825678469328,w=0.5136158452229139,x=4.930873620977217 -color=red,shape=triangle,flag=1,i=47584,u=0.1987478038711763,v=0.463728206606544,w=0.48407014874509446,x=4.526361699165051 -color=yellow,shape=square,flag=1,i=47585,u=0.5730846239767229,v=0.2066868791782468,w=0.5136029921439264,x=4.269956990495315 -color=blue,shape=triangle,flag=0,i=47604,u=0.543662409079566,v=0.8361371757686075,w=0.48465436179841076,x=6.097942602425896 -color=yellow,shape=circle,flag=1,i=47608,u=0.403617662080057,v=0.4535962230302537,w=0.549302969457956,x=5.916501527412496 -color=blue,shape=square,flag=1,i=47627,u=0.9854503157430848,v=0.8941983548946112,w=0.5314197042696979,x=5.023011547336865 -color=purple,shape=square,flag=0,i=47635,u=0.16914141463889032,v=0.6038025749254585,w=0.5072717589504321,x=5.2920657228378465 -color=purple,shape=triangle,flag=0,i=47647,u=0.8619200581587098,v=0.5229170149441354,w=0.4799315219056057,x=6.638035518689588 -color=red,shape=square,flag=0,i=47660,u=0.9283720160571937,v=0.2474816210673465,w=0.5142575232470952,x=5.949403794221663 -color=red,shape=triangle,flag=0,i=47665,u=0.6148262077456892,v=0.7162368103735482,w=0.48239204738099745,x=6.951029129333624 -color=purple,shape=circle,flag=0,i=47667,u=0.5104938769063353,v=0.17631977959134892,w=0.49730585430084195,x=4.5704392887185135 -color=red,shape=square,flag=0,i=47671,u=0.07171018216177005,v=0.9017996603635156,w=0.5103505646311814,x=4.632223102769466 -color=red,shape=circle,flag=1,i=47682,u=0.04521087512440558,v=0.1377151964371221,w=0.5066743318122094,x=4.437634741641908 -color=red,shape=triangle,flag=1,i=47698,u=0.8823863291842416,v=0.5626322764894532,w=0.4837985371234255,x=3.9117594647506664 -color=purple,shape=square,flag=0,i=47706,u=0.2903609349180982,v=0.6942156762569489,w=0.5082670914676386,x=3.166451816968816 -color=purple,shape=square,flag=0,i=47707,u=0.5680612248801317,v=0.16825159228840192,w=0.5080037620565654,x=3.3689909146437684 -color=red,shape=triangle,flag=0,i=47718,u=0.18045844302485725,v=0.25176561793507424,w=0.48047039749789683,x=4.018882485998389 -color=red,shape=square,flag=0,i=47736,u=0.7979189416795182,v=0.2999153597732107,w=0.487598215209931,x=3.694876969421642 -color=green,shape=circle,flag=0,i=47741,u=0.4402030232136849,v=0.8421968533045011,w=0.5365266607533119,x=5.130174091558044 -color=red,shape=circle,flag=0,i=47743,u=0.6604988783065447,v=0.5869142611857939,w=0.5148341312621858,x=7.03133519788192 -color=blue,shape=triangle,flag=1,i=47756,u=0.05642048653696552,v=0.24325934491930334,w=0.47976502672925675,x=5.4922980433943716 -color=blue,shape=triangle,flag=1,i=47778,u=0.388042077863479,v=0.17638619687646184,w=0.4865413686494398,x=3.879669643140455 -color=red,shape=circle,flag=0,i=47792,u=0.9103375825942616,v=0.966657239609342,w=0.4995723626761557,x=4.552818628383551 -color=blue,shape=circle,flag=0,i=47794,u=0.3344093035190303,v=0.09668660774653226,w=0.515861996875231,x=4.890175280882126 -color=red,shape=triangle,flag=1,i=47799,u=0.6668862759788828,v=0.8772217943097802,w=0.48179917406062817,x=2.9279336035242203 -color=red,shape=square,flag=0,i=47809,u=0.40756810598260595,v=0.8455926667865655,w=0.4894830400617358,x=6.068225102456052 -color=purple,shape=circle,flag=0,i=47813,u=0.19929578139060056,v=0.8409397852537306,w=0.5006311511199087,x=4.232450014374734 -color=red,shape=circle,flag=0,i=47822,u=0.6700704665243736,v=0.632104846882164,w=0.4997268018829444,x=7.500088103578668 -color=yellow,shape=circle,flag=1,i=47823,u=0.082564141869508,v=0.6238747774166773,w=0.5417274677342676,x=6.8531184871841395 -color=red,shape=square,flag=0,i=47833,u=0.5598679771914572,v=0.28172185660693794,w=0.505726456936834,x=5.073077577302645 -color=red,shape=triangle,flag=0,i=47839,u=0.35988287648216055,v=0.472693908314731,w=0.4785657667365871,x=3.9517423057239234 -color=red,shape=circle,flag=0,i=47852,u=0.2283406457167374,v=0.1344710945832132,w=0.4975132651088428,x=5.331223040114022 -color=blue,shape=triangle,flag=0,i=47872,u=0.8512441006245143,v=0.4727090044181631,w=0.49410066653049767,x=4.77580289775587 -color=red,shape=circle,flag=0,i=47880,u=0.744194953359183,v=0.7502829952645584,w=0.49533158637346303,x=6.180917386032007 -color=red,shape=triangle,flag=0,i=47890,u=0.2620465608742797,v=0.20860132327691405,w=0.49223873600865087,x=4.935694587637626 -color=blue,shape=square,flag=0,i=47891,u=0.7973007078819028,v=0.20546163538542517,w=0.5176526155509582,x=5.650941616357592 -color=blue,shape=circle,flag=1,i=47894,u=0.1571961118348203,v=0.4607283986315843,w=0.5180755700440234,x=3.9649228862083192 -color=red,shape=triangle,flag=0,i=47896,u=0.4464273362498433,v=0.3367447258949119,w=0.49120143220909585,x=4.999779952481166 -color=red,shape=circle,flag=0,i=47904,u=0.9957422499995832,v=0.9185106240901652,w=0.49931738751417004,x=3.316584118400906 -color=red,shape=square,flag=0,i=47909,u=0.8894873731882789,v=0.3619572285135665,w=0.48208603800568667,x=4.8455340087338135 -color=blue,shape=triangle,flag=0,i=47913,u=0.4267903606219958,v=0.09060008208931469,w=0.4976247509688333,x=4.884935416810568 -color=purple,shape=circle,flag=0,i=47914,u=0.719323716238728,v=0.5435526378275625,w=0.501159076138094,x=5.137585015143159 -color=yellow,shape=triangle,flag=1,i=47920,u=0.5704764495151491,v=0.9870337429747029,w=0.5483222400846162,x=4.909570969761352 -color=green,shape=circle,flag=0,i=47924,u=0.6648461649774816,v=0.4016890120555501,w=0.5384674815935445,x=2.9409744675681835 -color=purple,shape=square,flag=0,i=47932,u=0.8751607622582941,v=0.21196254391444147,w=0.5063903415054063,x=5.921761672139258 -color=green,shape=square,flag=0,i=47936,u=0.19772266974951547,v=0.17103089912894365,w=0.5067439727967291,x=5.248412776342183 -color=red,shape=triangle,flag=0,i=47940,u=0.3186398493888438,v=0.02581181147895817,w=0.4974067484739183,x=6.309037778398963 -color=purple,shape=triangle,flag=0,i=47943,u=0.1241380988180828,v=0.8874798316641104,w=0.47450703295315516,x=5.121479584720205 -color=red,shape=square,flag=0,i=47988,u=0.5671311140404951,v=0.9207785390261547,w=0.49976963999832463,x=6.758332515741141 -color=red,shape=triangle,flag=0,i=47998,u=0.6723571513032998,v=0.32740627194747185,w=0.48707944338721215,x=6.211317562050446 -color=red,shape=triangle,flag=0,i=47999,u=0.7365727949580668,v=0.21766326398816216,w=0.4890421578389589,x=4.893501633400699 -color=green,shape=triangle,flag=0,i=48000,u=0.8042780199288174,v=0.620576865015893,w=0.49104841582930553,x=3.828071785453805 -color=yellow,shape=triangle,flag=1,i=48022,u=0.5334887947924264,v=0.06887897496797546,w=0.5474917486433377,x=5.947516235622001 -color=red,shape=square,flag=1,i=48024,u=0.42509860286647616,v=0.9472463849018017,w=0.4950947762668159,x=4.101599527400148 -color=green,shape=triangle,flag=0,i=48025,u=0.10178740645332085,v=0.8262483377093328,w=0.4878747646020304,x=7.4262084364493886 -color=yellow,shape=square,flag=1,i=48073,u=0.878953189398098,v=0.36745367758286984,w=0.526429333457668,x=6.053603149690692 -color=orange,shape=circle,flag=0,i=48080,u=0.5296672380020108,v=0.6436838062866405,w=0.5106530847743275,x=4.526397539243941 -color=red,shape=circle,flag=0,i=48116,u=0.5153156142354977,v=0.531376501868268,w=0.47286628552010285,x=5.188184731973516 -color=purple,shape=circle,flag=0,i=48133,u=0.1970919670272947,v=0.30697789820826293,w=0.49599805441535366,x=6.739055189801161 -color=orange,shape=square,flag=1,i=48136,u=0.6274668790899468,v=0.767392992401935,w=0.4979790658572044,x=4.071368856773449 -color=yellow,shape=triangle,flag=1,i=48155,u=0.49857993711361925,v=0.6631995822696762,w=0.5505388491606407,x=5.374198741748137 -color=blue,shape=circle,flag=1,i=48158,u=0.7376114528022307,v=0.20888560433341807,w=0.5071530643751293,x=6.239048104947037 -color=red,shape=square,flag=0,i=48163,u=0.30259715368291107,v=0.14425777907213877,w=0.48801482810319596,x=5.677003082121711 -color=red,shape=triangle,flag=0,i=48177,u=0.7041990089142588,v=0.29101971679400485,w=0.48354802535438846,x=3.564950747772413 -color=red,shape=triangle,flag=0,i=48179,u=0.4760079242416355,v=0.26481341756985877,w=0.48751130723309505,x=5.668848094481008 -color=red,shape=square,flag=1,i=48190,u=0.4799210067638763,v=0.779157284108455,w=0.4902286094256423,x=5.649216661386859 -color=purple,shape=triangle,flag=1,i=48192,u=0.4810586207870312,v=0.8153370799216061,w=0.4694653180578124,x=5.154970220330868 -color=green,shape=square,flag=0,i=48201,u=0.851199762592381,v=0.8923194944321882,w=0.4987378609319515,x=5.3028738629011665 -color=red,shape=square,flag=1,i=48233,u=0.39325006326518164,v=0.2665985973367109,w=0.4961654656442382,x=3.369537325857852 -color=yellow,shape=square,flag=1,i=48286,u=0.1361348285487186,v=0.15308955253919432,w=0.5290892122421875,x=5.353960055561228 -color=purple,shape=triangle,flag=0,i=48300,u=0.0018299515700209712,v=0.14328992498318616,w=0.46553051189247585,x=5.769945805719963 -color=purple,shape=triangle,flag=0,i=48323,u=0.00313861392460113,v=0.34931635605986966,w=0.4670599982039622,x=4.761175746520117 -color=orange,shape=circle,flag=0,i=48329,u=0.6297207639212663,v=0.8377381219572752,w=0.5086888522010742,x=3.634405391162001 -color=green,shape=square,flag=0,i=48334,u=0.1461510750238506,v=0.33943725308829475,w=0.4962336799882166,x=6.787793056331956 -color=yellow,shape=square,flag=1,i=48341,u=0.005678737451083715,v=0.18080360273427176,w=0.5252731559555475,x=4.733707380513718 -color=purple,shape=square,flag=0,i=48344,u=0.6440206650882553,v=0.5446681940585668,w=0.5304311891785677,x=3.124189071269072 -color=blue,shape=circle,flag=1,i=48347,u=0.420394688141821,v=0.7638162934379374,w=0.523931526791433,x=7.315932819495738 -color=green,shape=square,flag=0,i=48367,u=0.6392199138084892,v=0.5096272731754125,w=0.49803721790934646,x=6.006117047060915 -color=yellow,shape=circle,flag=1,i=48369,u=0.8516932806781125,v=0.914392829787277,w=0.5353110496329764,x=6.594555548207381 -color=blue,shape=square,flag=1,i=48370,u=0.8192287115041461,v=0.8969290114824194,w=0.5192558334681245,x=5.837683470905648 -color=green,shape=circle,flag=0,i=48392,u=0.02226553062925085,v=0.018885255866349038,w=0.5327886733374836,x=5.03898512398291 -color=green,shape=square,flag=0,i=48394,u=0.7959359626739195,v=0.9265676736905113,w=0.5013990805007352,x=4.870654310957548 -color=red,shape=circle,flag=0,i=48395,u=0.3330308055433241,v=0.4316772402238431,w=0.4629239713674204,x=4.017920859996644 -color=blue,shape=triangle,flag=0,i=48396,u=0.7781870859131903,v=0.7061940703974626,w=0.4977475795794286,x=4.388716680048084 -color=purple,shape=circle,flag=0,i=48411,u=0.6557444992833522,v=0.1424666921200025,w=0.48403253106941213,x=4.635019856522892 -color=red,shape=square,flag=0,i=48414,u=0.9915453831267441,v=0.01746444655110857,w=0.5174706259846977,x=2.8044754044433127 -color=blue,shape=square,flag=1,i=48420,u=0.2773151103818414,v=0.9604075839573473,w=0.5158980283602393,x=5.723286666956625 -color=red,shape=circle,flag=0,i=48423,u=0.9707402131399189,v=0.8928315718049378,w=0.4684487910966547,x=5.465510451380452 -color=purple,shape=circle,flag=0,i=48424,u=0.35441091608538144,v=0.8362085423431201,w=0.4837620049458438,x=6.829686813692745 -color=red,shape=square,flag=0,i=48431,u=0.9252760103799889,v=0.7871168302458378,w=0.508433111154264,x=6.09250408594293 -color=yellow,shape=square,flag=1,i=48434,u=0.1310168760157514,v=0.19125831238720814,w=0.5307792022058948,x=4.083837861868347 -color=red,shape=triangle,flag=1,i=48456,u=0.6626825778722105,v=0.05835851093628497,w=0.5015754768598653,x=4.019294913325446 -color=red,shape=square,flag=0,i=48465,u=0.4716901594344809,v=0.1360984962668913,w=0.5042388490867261,x=6.164164768264425 -color=blue,shape=triangle,flag=1,i=48466,u=0.5621750646951064,v=0.924656503724102,w=0.4974725752677423,x=5.116454477881539 -color=blue,shape=square,flag=0,i=48486,u=0.6328489014889085,v=0.569427034785481,w=0.5149315945651306,x=4.063893607403954 -color=red,shape=square,flag=1,i=48495,u=0.8651395398249447,v=0.41858665882182566,w=0.49845271391445384,x=5.371864929574073 -color=blue,shape=square,flag=1,i=48503,u=0.23175790087124892,v=0.43065203369185234,w=0.5068260393784609,x=5.404446177946749 -color=orange,shape=triangle,flag=0,i=48511,u=0.4468678804082995,v=0.7904105523237679,w=0.4931264625596131,x=3.7564168137174025 -color=red,shape=square,flag=0,i=48513,u=0.45177471152271464,v=0.7049019447388172,w=0.5006708329811198,x=5.6352144482256366 -color=red,shape=square,flag=1,i=48516,u=0.2481503893149476,v=0.1850263315833549,w=0.5042609901406907,x=5.541969469930131 -color=red,shape=square,flag=0,i=48527,u=0.7260659819913544,v=0.8326852084033661,w=0.49826228945898626,x=2.0753044147205277 -color=red,shape=circle,flag=0,i=48532,u=0.2336235463270796,v=0.3179988859679837,w=0.4791283016385554,x=5.221790548342736 -color=red,shape=square,flag=0,i=48548,u=0.5109009389785433,v=0.46149705659219753,w=0.4807524355169942,x=5.137727683476947 -color=red,shape=square,flag=1,i=48555,u=0.7120937714470833,v=0.7102624675692046,w=0.481358478850383,x=4.287285854876532 -color=purple,shape=square,flag=0,i=48558,u=0.7172448505589109,v=0.25664418888326046,w=0.5299342518224462,x=6.229292732123356 -color=green,shape=circle,flag=0,i=48564,u=0.8578903708518397,v=0.9344574054809978,w=0.5266759426185877,x=4.2231117746842335 -color=purple,shape=triangle,flag=0,i=48566,u=0.6317475058397665,v=0.20561366373556222,w=0.4705372300037366,x=2.3791634956727066 -color=red,shape=circle,flag=1,i=48593,u=0.22611913660739424,v=0.2811616508492888,w=0.4884056164914672,x=5.002988024105577 -color=green,shape=square,flag=1,i=48594,u=0.9146997086028177,v=0.5460414602258741,w=0.49962616155513506,x=5.7365892762882424 -color=blue,shape=triangle,flag=1,i=48595,u=0.40184983765676585,v=0.35586201768189774,w=0.4937088376822604,x=4.716852988923189 -color=blue,shape=square,flag=1,i=48609,u=0.8193904361598316,v=0.06938371747229877,w=0.5062554139989941,x=4.724885760428026 -color=red,shape=square,flag=0,i=48642,u=0.8615550997590109,v=0.7660807177205972,w=0.48916474230367085,x=5.445726145993582 -color=purple,shape=square,flag=0,i=48666,u=0.7025404242375245,v=0.895283075878103,w=0.5244784336208926,x=3.9768448928265485 -color=yellow,shape=circle,flag=1,i=48675,u=0.9093274317332981,v=0.30642859401261335,w=0.5167663594592573,x=3.539275263311339 -color=green,shape=triangle,flag=0,i=48689,u=0.14666525418216747,v=0.11519731769934427,w=0.5055995819717433,x=7.345703452411812 -color=green,shape=circle,flag=0,i=48691,u=0.7590122519980227,v=0.31098808751077667,w=0.5352839763407974,x=3.9696783120269914 -color=red,shape=square,flag=0,i=48695,u=0.21750185090231478,v=0.39145743210505357,w=0.4776447915650074,x=4.373734235592711 -color=green,shape=circle,flag=0,i=48722,u=0.25116833823810303,v=0.7504751180135623,w=0.529639671860548,x=4.36187834014974 -color=red,shape=circle,flag=1,i=48731,u=0.586032921474184,v=0.5177220606889043,w=0.5146031619309127,x=5.7917259706613535 -color=red,shape=triangle,flag=0,i=48740,u=0.7053847488791184,v=0.3512812451507956,w=0.4938310272198147,x=5.081861421952902 -color=green,shape=square,flag=0,i=48741,u=0.1835666996003048,v=0.7042974823519338,w=0.4987452527074754,x=4.077504296996638 -color=blue,shape=circle,flag=1,i=48747,u=0.571585583500929,v=0.0967250711451324,w=0.5277929502367874,x=6.353210634940375 -color=yellow,shape=triangle,flag=0,i=48777,u=0.5360703689306874,v=0.9758403436372661,w=0.5478451553806851,x=7.204139152423575 -color=red,shape=square,flag=0,i=48786,u=0.8758379938899296,v=0.4297308881874612,w=0.49405172926839025,x=5.347410419711326 -color=yellow,shape=square,flag=1,i=48789,u=0.850194158564887,v=0.3471656050084757,w=0.5083937478364037,x=5.9231422955706385 -color=yellow,shape=circle,flag=1,i=48793,u=0.17197656062677302,v=0.3773445818618718,w=0.5204331472012487,x=5.537213045417211 -color=red,shape=square,flag=1,i=48795,u=0.15968849416461606,v=0.49762928845241405,w=0.4904818983647905,x=2.4234625552522395 -color=red,shape=square,flag=0,i=48796,u=0.35127783920672206,v=0.7909780551138718,w=0.4890451655569846,x=5.458342533009376 -color=purple,shape=square,flag=0,i=48802,u=0.9899008389447401,v=0.6819884892271715,w=0.5199807793916681,x=3.776775459714525 -color=yellow,shape=triangle,flag=1,i=48804,u=0.5550243580361256,v=0.8879319164006181,w=0.5476627579217056,x=5.225800918902723 -color=red,shape=circle,flag=0,i=48807,u=0.5121849480165164,v=0.4854009772171398,w=0.499321294274982,x=4.771380521669399 -color=red,shape=square,flag=0,i=48821,u=0.027954470851159208,v=0.18289875370865072,w=0.493632037028138,x=6.075187965168664 -color=blue,shape=square,flag=0,i=48834,u=0.4517081405306025,v=0.4789033595105586,w=0.5104512121305513,x=3.169548824243132 -color=red,shape=triangle,flag=0,i=48839,u=0.2838632533549299,v=0.8702137152429561,w=0.4956041504161319,x=4.5500072951389 -color=green,shape=triangle,flag=0,i=48844,u=0.6572003438613823,v=0.6552237939405061,w=0.5087197315178495,x=4.711400043041627 -color=yellow,shape=square,flag=1,i=48852,u=0.9918848319068965,v=0.44945341990465193,w=0.5067671231272616,x=5.0681480805735 -color=red,shape=triangle,flag=1,i=48857,u=0.9426434232193396,v=0.8056058993361147,w=0.49946690700060753,x=4.535655321031028 -color=blue,shape=square,flag=0,i=48866,u=0.26063993730576307,v=0.9228215544003301,w=0.5068822575344889,x=4.988369809688219 -color=red,shape=square,flag=0,i=48876,u=0.4852575187771816,v=0.7202011781800157,w=0.4943741912186829,x=3.985077678185808 -color=red,shape=triangle,flag=0,i=48881,u=0.925808881844663,v=0.19512682871488096,w=0.4984221536186269,x=5.190811576909501 -color=red,shape=circle,flag=0,i=48888,u=0.7532550517681115,v=0.6945205805434272,w=0.4937598159402476,x=3.884304632957931 -color=red,shape=triangle,flag=0,i=48902,u=0.35218291440542426,v=0.2912536347895085,w=0.5021630155521924,x=4.764738613260103 -color=red,shape=circle,flag=0,i=48903,u=0.2551269068296582,v=0.2996842360799671,w=0.4967310547181671,x=7.806004952514143 -color=red,shape=square,flag=1,i=48907,u=0.7467051750991411,v=0.8418329480122392,w=0.49438003381460965,x=4.701164712489955 -color=red,shape=triangle,flag=0,i=48908,u=0.3935824957692202,v=0.3141532599522351,w=0.49779727447827266,x=6.096409068434248 -color=purple,shape=square,flag=1,i=48911,u=0.5251776976908747,v=0.060727249472551814,w=0.5140716442813988,x=5.89194905919355 -color=red,shape=triangle,flag=0,i=48916,u=0.8040006982467456,v=0.513111157827294,w=0.4920532798129258,x=5.673196905769039 -color=red,shape=square,flag=0,i=48947,u=0.010173815375059236,v=0.7330036363420449,w=0.49387660603019323,x=5.798584541507935 -color=red,shape=triangle,flag=1,i=48984,u=0.2735310050920434,v=0.054553170864756084,w=0.49442448328131583,x=3.892387353480809 -color=orange,shape=triangle,flag=1,i=48995,u=0.39760734288917954,v=0.3371746200076561,w=0.48791561154442464,x=5.260859646860521 -color=red,shape=triangle,flag=1,i=49003,u=0.06872646459313503,v=0.5392147800681325,w=0.4948153270917659,x=4.081119269485581 -color=green,shape=square,flag=0,i=49024,u=0.3821880750205392,v=0.18275551465330375,w=0.5082545487641369,x=4.608951112925888 -color=red,shape=triangle,flag=0,i=49076,u=0.9774733745602495,v=0.6770710217410209,w=0.49758257949481083,x=5.901737432951713 -color=blue,shape=triangle,flag=0,i=49091,u=0.3069757458761392,v=0.975915320777544,w=0.49497155098184337,x=3.2544458977368116 -color=purple,shape=triangle,flag=1,i=49110,u=0.5437191324592979,v=0.7452292907487643,w=0.46980054948311634,x=3.123213210792038 -color=red,shape=triangle,flag=0,i=49115,u=0.9723164560234776,v=0.252223523806952,w=0.4993876820825114,x=6.517281701806074 -color=red,shape=square,flag=0,i=49135,u=0.7139229738734771,v=0.18345268574285667,w=0.508209778062047,x=5.5626025115488575 -color=red,shape=triangle,flag=0,i=49157,u=0.6970981390918413,v=0.3518574147809991,w=0.5009766884967909,x=5.497528793414663 -color=red,shape=circle,flag=0,i=49164,u=0.647822123289506,v=0.6682539109127954,w=0.4933975034199711,x=3.219711890739834 -color=red,shape=square,flag=0,i=49172,u=0.8908937086069729,v=0.9379530871180463,w=0.5098313738414236,x=5.973769977022911 -color=red,shape=square,flag=1,i=49201,u=0.4454025085947698,v=0.4099923779264084,w=0.4910162129951342,x=4.481191310011913 -color=orange,shape=square,flag=1,i=49206,u=0.802010661820528,v=0.23000091696383262,w=0.4927673407688356,x=4.216408381007006 -color=green,shape=circle,flag=0,i=49214,u=0.5305743507867361,v=0.6491330644828276,w=0.5346855570498684,x=5.254963666890739 -color=purple,shape=square,flag=0,i=49223,u=0.3877533919022079,v=0.5938677202573172,w=0.4989497077897815,x=5.671028555564367 -color=blue,shape=triangle,flag=0,i=49235,u=0.5311947363805939,v=0.6703561600958575,w=0.4861320721695671,x=6.299587773146253 -color=yellow,shape=square,flag=1,i=49242,u=0.9865451790312803,v=0.17219550870565814,w=0.4912477106521422,x=4.264105576136469 -color=red,shape=triangle,flag=0,i=49246,u=0.406219998662978,v=0.27331208705285004,w=0.5007540658326034,x=5.6255485227686215 -color=red,shape=square,flag=0,i=49252,u=0.8246068002195602,v=0.8537876488777733,w=0.5001482756076582,x=5.55268531381848 -color=red,shape=square,flag=0,i=49288,u=0.7189907623048931,v=0.9789785037542742,w=0.5027097398153147,x=5.094206466597293 -color=yellow,shape=square,flag=1,i=49289,u=0.7007760621559119,v=0.725695057192697,w=0.4918534717715291,x=5.460288167284148 -color=blue,shape=square,flag=1,i=49294,u=0.7544683604570546,v=0.8600086961244224,w=0.48791610860242834,x=1.9556650133465148 -color=red,shape=square,flag=0,i=49295,u=0.310840082072806,v=0.19091871488745316,w=0.49933179156429874,x=6.523159823757539 -color=red,shape=triangle,flag=0,i=49311,u=0.7580251038778791,v=0.456167835826202,w=0.491624180505097,x=4.752075612365577 -color=yellow,shape=square,flag=1,i=49313,u=0.7117641094007058,v=0.7232167368995583,w=0.4937092167173523,x=5.938512076586304 -color=blue,shape=triangle,flag=1,i=49314,u=0.7318166275354759,v=0.25661529714867704,w=0.4790450213823,x=5.979998956866333 -color=red,shape=square,flag=0,i=49315,u=0.869185123892576,v=0.8378741632389953,w=0.5063259541702672,x=4.270802085649039 -color=red,shape=triangle,flag=0,i=49342,u=0.03320332728440745,v=0.07700944137920795,w=0.4910119560751279,x=4.9931301075275565 -color=red,shape=triangle,flag=1,i=49343,u=0.9313955894332584,v=0.41708825118334014,w=0.48883576456581534,x=5.755297244847177 -color=blue,shape=square,flag=1,i=49346,u=0.5497443049259817,v=0.7185820582707827,w=0.4836033179706641,x=5.663566217663256 -color=green,shape=square,flag=0,i=49350,u=0.08112136150383897,v=0.5447208740740511,w=0.5125548833694299,x=5.179848110767936 -color=red,shape=circle,flag=0,i=49355,u=0.8335649141129794,v=0.7570274858202322,w=0.4913087045300904,x=6.460193294575606 -color=blue,shape=square,flag=1,i=49360,u=0.45760255041639575,v=0.7946968642759207,w=0.47913393136516214,x=6.026001715554631 -color=blue,shape=square,flag=1,i=49369,u=0.7913352037589557,v=0.17849189377021557,w=0.48382559711653306,x=6.178075990951691 -color=blue,shape=square,flag=1,i=49373,u=0.6201521382312329,v=0.5861889938228702,w=0.48557410380423754,x=5.64283843802005 -color=yellow,shape=circle,flag=1,i=49377,u=0.03658591968793912,v=0.4058735993201916,w=0.49755749071881794,x=2.934903143221631 -color=blue,shape=square,flag=1,i=49381,u=0.39266340298369873,v=0.7886695634267545,w=0.4939756217999521,x=4.665959995675293 -color=red,shape=square,flag=0,i=49387,u=0.48219219328921015,v=0.4964378684587051,w=0.4980760491080519,x=3.4245589445501063 -color=red,shape=triangle,flag=0,i=49391,u=0.7065030238931678,v=0.6679897375840088,w=0.48960031729214004,x=4.416020360931529 -color=purple,shape=square,flag=0,i=49392,u=0.9210573729296656,v=0.6640920718150033,w=0.48730208489648125,x=5.196681075392454 -color=blue,shape=square,flag=1,i=49395,u=0.05495841303769311,v=0.3741662454478858,w=0.4939719796348749,x=3.104140981640939 -color=red,shape=square,flag=0,i=49400,u=0.28143319193979177,v=0.6418912250271882,w=0.495679472776123,x=4.658924131534239 -color=yellow,shape=circle,flag=1,i=49409,u=0.5757606669791355,v=0.44044794269386733,w=0.5013379147566249,x=5.675339087153817 -color=red,shape=triangle,flag=0,i=49416,u=0.29448978755687616,v=0.34393079463803833,w=0.4884291614826948,x=6.56773461946861 -color=red,shape=square,flag=1,i=49421,u=0.33999596293922807,v=0.4588495048775292,w=0.4875083920547538,x=4.194832820327149 -color=purple,shape=square,flag=0,i=49427,u=0.303115039166182,v=0.22809911637075353,w=0.48916609448408105,x=4.362707230050652 -color=red,shape=square,flag=0,i=49430,u=0.7012489333175754,v=0.4015245116358245,w=0.48484489072046555,x=4.568861212782241 -color=yellow,shape=circle,flag=1,i=49433,u=0.7811802488150853,v=0.5989464271880686,w=0.5001765320852266,x=4.2458181515784865 -color=red,shape=triangle,flag=0,i=49434,u=0.8849717804674293,v=0.45575692001832646,w=0.495217638561584,x=3.7449167334267988 -color=red,shape=circle,flag=0,i=49439,u=0.16528949894827216,v=0.22174842724882513,w=0.4870902339234367,x=4.777968970521575 -color=yellow,shape=triangle,flag=1,i=49445,u=0.13580674088483946,v=0.7221635933202355,w=0.5221682823936992,x=4.585758296132934 -color=purple,shape=square,flag=0,i=49451,u=0.4682284291312413,v=0.9154080748166535,w=0.49073126791938976,x=3.828544907465483 -color=red,shape=square,flag=0,i=49472,u=0.332757078393244,v=0.7468663316925892,w=0.49183931364494754,x=6.171396444107888 -color=red,shape=square,flag=1,i=49482,u=0.6532375778700675,v=0.9999738400353525,w=0.4979976227770923,x=6.313342717166062 -color=red,shape=triangle,flag=1,i=49486,u=0.6564707086249122,v=0.31655210715956383,w=0.4913379802978528,x=5.6115301757155445 -color=purple,shape=triangle,flag=0,i=49493,u=0.3190836882980076,v=0.1260070863226873,w=0.47634405006076563,x=3.5132129883372354 -color=yellow,shape=circle,flag=1,i=49512,u=0.709982070473867,v=0.8159510563775967,w=0.5040094147134031,x=5.782111172819735 -color=blue,shape=square,flag=1,i=49522,u=0.984731831321471,v=0.658544189262576,w=0.4922260214861222,x=6.965437099040508 -color=red,shape=circle,flag=0,i=49527,u=0.1861926771650423,v=0.09290641241696035,w=0.4884765727327744,x=4.632297533831132 -color=red,shape=square,flag=0,i=49530,u=0.22702746084676495,v=0.8600770689591424,w=0.49551656076421047,x=7.505218582567923 -color=red,shape=circle,flag=0,i=49541,u=0.7915540173606261,v=0.732843771782058,w=0.4877864872814856,x=3.912488309470623 -color=red,shape=square,flag=0,i=49548,u=0.6783829905365601,v=0.6282521586505893,w=0.4858966598398641,x=7.499229893949848 -color=red,shape=triangle,flag=1,i=49557,u=0.9168205464461484,v=0.3954899702159489,w=0.4800129024410063,x=4.940693034855969 -color=red,shape=triangle,flag=0,i=49563,u=0.6982611054222738,v=0.18741230873348302,w=0.47403507410215523,x=4.0847875639613 -color=yellow,shape=circle,flag=1,i=49567,u=0.9131580785775962,v=0.5853871962993066,w=0.5070823024905516,x=3.8281865071523384 -color=purple,shape=circle,flag=0,i=49571,u=0.32818065783603423,v=0.9573989305557657,w=0.49155943295905186,x=4.17882528417053 -color=red,shape=triangle,flag=0,i=49572,u=0.6634954841195608,v=0.5633985761260297,w=0.47047195637596195,x=4.8809429444036745 -color=red,shape=square,flag=0,i=49626,u=0.4836644768367475,v=0.09526250127802116,w=0.4795579389582386,x=4.783492481374331 -color=red,shape=circle,flag=1,i=49633,u=0.8034199284139771,v=0.7152912335451821,w=0.48277915336402183,x=3.2180424485077572 -color=yellow,shape=square,flag=1,i=49677,u=0.5162735060349285,v=0.969225339799034,w=0.49006888864034986,x=1.6592652333901825 -color=yellow,shape=square,flag=1,i=49678,u=0.3685566804851548,v=0.9962704630789017,w=0.4852604333387848,x=5.408582834990164 -color=purple,shape=square,flag=0,i=49693,u=0.0477754187285474,v=0.9325049416829603,w=0.510722380310676,x=4.91771588159503 -color=red,shape=triangle,flag=0,i=49701,u=0.5776650690636927,v=0.9351857538188668,w=0.46310101707851714,x=6.118166499197383 -color=yellow,shape=circle,flag=1,i=49713,u=0.39379418283321344,v=0.6537477108638561,w=0.4938079752836218,x=4.523284772542072 -color=yellow,shape=triangle,flag=1,i=49714,u=0.61424215051692,v=0.6452268511398105,w=0.5201597759314346,x=5.575952503499533 -color=yellow,shape=circle,flag=1,i=49718,u=0.4859216261926276,v=0.9568496375121113,w=0.49245658520614866,x=4.726719537053268 -color=yellow,shape=square,flag=1,i=49719,u=0.5776440938962014,v=0.4834609926851269,w=0.49009737665743003,x=6.808705577498416 -color=blue,shape=square,flag=1,i=49740,u=0.053358061199709206,v=0.43634653297530934,w=0.47908022747566364,x=3.9361571502835324 -color=red,shape=triangle,flag=0,i=49744,u=0.7040096893862022,v=0.11201935331026636,w=0.46635021639773855,x=5.961057486092087 -color=red,shape=triangle,flag=0,i=49745,u=0.21869200214312945,v=0.09431461320583334,w=0.47059577377557205,x=5.89150628794983 -color=red,shape=square,flag=1,i=49751,u=0.5299705735494521,v=0.42798476745333747,w=0.5142637838470888,x=4.366499608508683 -color=red,shape=square,flag=0,i=49752,u=0.3621898703570018,v=0.4364315628388641,w=0.5100652971080901,x=6.13409114857635 -color=red,shape=circle,flag=0,i=49767,u=0.5042836787861152,v=0.5184618209834472,w=0.47566683045377595,x=7.3601320879659164 -color=red,shape=circle,flag=0,i=49782,u=0.3557935611323194,v=0.4511683695605365,w=0.47342111246257573,x=5.175603678707147 -color=green,shape=triangle,flag=0,i=49792,u=0.12196397768396838,v=0.5371007542741264,w=0.4909638178602071,x=5.195881819406623 -color=green,shape=square,flag=0,i=49816,u=0.22898639454127634,v=0.18025397361757411,w=0.4922733194863845,x=6.060961718025254 -color=red,shape=square,flag=0,i=49833,u=0.03806273225841361,v=0.7294088403732395,w=0.5060737754235056,x=5.712521708834092 -color=yellow,shape=triangle,flag=1,i=49839,u=0.6678360776533244,v=0.7426186402365017,w=0.5170239491843038,x=6.7229904635227244 -color=red,shape=square,flag=0,i=49845,u=0.38273861705716894,v=0.3671623001122907,w=0.5110999992179351,x=8.167918680659604 -color=yellow,shape=square,flag=1,i=49848,u=0.5459812137659908,v=0.4937339730790854,w=0.48717960487934353,x=5.852822708070808 -color=red,shape=triangle,flag=1,i=49851,u=0.15386077217334082,v=0.604164567044745,w=0.4718547189706239,x=3.8176403905423064 -color=yellow,shape=square,flag=1,i=49856,u=0.40653949536229184,v=0.835665608149631,w=0.4852501321415279,x=3.771161247377052 -color=red,shape=circle,flag=1,i=49875,u=0.2919845825347708,v=0.35797653690581893,w=0.48364467004318856,x=3.657855410853113 -color=blue,shape=circle,flag=1,i=49876,u=0.950709524625065,v=0.4445897024345139,w=0.5168328686842913,x=5.2269066519488865 -color=red,shape=triangle,flag=0,i=49879,u=0.6270614534308284,v=0.3101237596094326,w=0.4702605958065787,x=4.108876920441974 -color=blue,shape=triangle,flag=1,i=49880,u=0.42997496746993313,v=0.8582037963654929,w=0.46450475434380323,x=5.200092942247525 -color=red,shape=square,flag=0,i=49891,u=0.8711531051451334,v=0.7694789393993068,w=0.5241702412868067,x=5.210067330660774 -color=red,shape=square,flag=0,i=49892,u=0.696204185232735,v=0.4020293107128635,w=0.5272820426683686,x=4.671871037346535 -color=red,shape=circle,flag=0,i=49894,u=0.9838712016184571,v=0.9102199041447175,w=0.4819026370038073,x=5.139898547914162 -color=yellow,shape=circle,flag=1,i=49901,u=0.1553073209969712,v=0.9207941064021002,w=0.4888748938449533,x=2.574451697687581 -color=green,shape=square,flag=0,i=49902,u=0.5965728562798117,v=0.31255320784124785,w=0.4830499428521977,x=5.293251364672678 -color=blue,shape=circle,flag=0,i=49904,u=0.9813370136605244,v=0.2412061292989396,w=0.5155493502964813,x=2.4664163933370307 -color=red,shape=square,flag=0,i=49915,u=0.6299961848109598,v=0.37991257366573217,w=0.5230685503353465,x=4.908148742650008 -color=blue,shape=square,flag=0,i=49922,u=0.8946995377719672,v=0.4265926315097449,w=0.4755563409955688,x=4.833969711287121 -color=green,shape=square,flag=0,i=49930,u=0.24435091727833202,v=0.36568556548539066,w=0.49237748726052044,x=6.5950096999354635 -color=yellow,shape=square,flag=1,i=49936,u=0.784723979200047,v=0.23787312267889693,w=0.49236002963033426,x=4.1501652196983345 -color=purple,shape=square,flag=0,i=49937,u=0.15037541434572543,v=0.27170422440342046,w=0.5202769160188874,x=2.560059325529736 -color=red,shape=circle,flag=1,i=49970,u=0.6980210230311733,v=0.7687717344134983,w=0.4839139632527132,x=3.0855679084295855 -color=purple,shape=square,flag=0,i=49978,u=0.24013578526811474,v=0.052583120901067204,w=0.5290824836170074,x=5.801432369222202 -color=yellow,shape=square,flag=1,i=49988,u=0.8144026047496149,v=0.15221705202083158,w=0.4973058446896879,x=6.951027215968963 -color=red,shape=circle,flag=0,i=49989,u=0.47106726757868045,v=0.4402812166328639,w=0.4783227272318673,x=3.699648225218383 -color=red,shape=square,flag=1,i=50004,u=0.7013748052499557,v=0.4034270198619889,w=0.5184488550259196,x=5.244514686222172 -color=blue,shape=triangle,flag=1,i=50020,u=0.13641370409351217,v=0.5569752815416528,w=0.4751818989713624,x=7.0289558697823 -color=orange,shape=square,flag=1,i=50024,u=0.6336369540269946,v=0.6195238857519708,w=0.49519247470112354,x=4.405870614825129 -color=green,shape=circle,flag=0,i=50028,u=0.5357953654384863,v=0.6397942233162857,w=0.5112498903114473,x=4.254470533167981 -color=red,shape=triangle,flag=0,i=50051,u=0.7937042229731515,v=0.05461553114970319,w=0.46034394267968093,x=5.309459435753332 -color=red,shape=circle,flag=1,i=50053,u=0.6323230935113741,v=0.5671463096195212,w=0.4765344192746495,x=4.4890074520913 -color=red,shape=circle,flag=0,i=50056,u=0.7800008362808605,v=0.7688763034210087,w=0.4766676723120258,x=6.259660119945244 -color=red,shape=triangle,flag=0,i=50058,u=0.4012062610071546,v=0.48857092809633007,w=0.4651137256663065,x=4.521746040865337 -color=red,shape=square,flag=0,i=50059,u=0.030801477985402115,v=0.4450925298840568,w=0.5139462106327378,x=5.765384660292173 -color=red,shape=triangle,flag=1,i=50079,u=0.9295633650851368,v=0.4465677743626929,w=0.4671581635207841,x=4.828768170947682 -color=red,shape=triangle,flag=0,i=50088,u=0.8522830355755283,v=0.8886608847411923,w=0.47296385265409335,x=5.123325386070224 -color=blue,shape=circle,flag=1,i=50089,u=0.5907974301602479,v=0.18177179958161316,w=0.5166142163134199,x=5.358514538446458 -color=red,shape=triangle,flag=0,i=50096,u=0.17499534404260897,v=0.58696812782145,w=0.47315665875831786,x=6.369426659509508 -color=red,shape=circle,flag=0,i=50101,u=0.8934191685801599,v=0.862206333993704,w=0.4759856470849733,x=5.591123147785623 -color=green,shape=square,flag=0,i=50151,u=0.9414833951003599,v=0.015676759070376134,w=0.4871686239600665,x=5.303980068715217 -color=red,shape=circle,flag=0,i=50168,u=0.9309035945390308,v=0.9106242351573676,w=0.4638384713939216,x=6.594051530574089 -color=yellow,shape=triangle,flag=1,i=50170,u=0.2729382919576864,v=0.8078255799681063,w=0.524625596873308,x=3.315998376803011 -color=purple,shape=square,flag=0,i=50197,u=0.9193696449117117,v=0.42274361686784134,w=0.5265756803732765,x=4.080435326801061 -color=red,shape=triangle,flag=1,i=50203,u=0.7608180397008772,v=0.14755623277866015,w=0.4707708829577415,x=6.875011922449908 -color=purple,shape=square,flag=0,i=50206,u=0.22877762481215724,v=0.015126352415622324,w=0.5243979356397273,x=4.394135416814222 -color=red,shape=triangle,flag=0,i=50229,u=0.07102165539037897,v=0.36011768221354434,w=0.4674087737947362,x=5.549161024383484 -color=green,shape=circle,flag=0,i=50232,u=0.3593507685450774,v=0.418392921869985,w=0.5042648553292465,x=3.450781184695579 -color=green,shape=circle,flag=0,i=50248,u=0.6456594515825015,v=0.0820729993527618,w=0.5071303473202191,x=6.247656511766292 -color=yellow,shape=square,flag=1,i=50260,u=0.4611922050817028,v=0.5227057126357607,w=0.4979592648374241,x=5.952420482443102 -color=red,shape=circle,flag=0,i=50270,u=0.20317572332075828,v=0.14294055851428855,w=0.4638252773859487,x=4.972612818726757 -color=red,shape=square,flag=0,i=50293,u=0.4135205195409214,v=0.820787494460942,w=0.5144877997763713,x=4.884023587702603 -color=purple,shape=circle,flag=0,i=50303,u=0.2508543748504978,v=0.6545550343704586,w=0.4857092988276182,x=6.349567176386176 -color=red,shape=square,flag=0,i=50315,u=0.47133303467784793,v=0.27019170581093654,w=0.5218652839478982,x=6.334716811976421 -color=green,shape=square,flag=0,i=50335,u=0.5940252800697978,v=0.12868818822249917,w=0.4840542504282353,x=5.465215904507521 -color=red,shape=circle,flag=0,i=50343,u=0.87343258156755,v=0.7959017908879359,w=0.4711587098487996,x=4.684253907654964 -color=red,shape=circle,flag=1,i=50346,u=0.24791976966800988,v=0.27718956956891944,w=0.47359723553040084,x=5.930786830052889 -color=red,shape=square,flag=0,i=50348,u=0.7704209906946302,v=0.9766476084478978,w=0.5306035676843213,x=4.8300351514815345 -color=blue,shape=triangle,flag=0,i=50349,u=0.12077841555563795,v=0.5177387059804798,w=0.4927447961584418,x=5.1632064660837935 -color=green,shape=triangle,flag=0,i=50358,u=0.02748574027015671,v=0.9390257598837265,w=0.4865971592096993,x=4.961063050270659 -color=purple,shape=triangle,flag=1,i=50363,u=0.6449573732415836,v=0.016448394449012138,w=0.4894746347705716,x=6.767456867759313 -color=purple,shape=triangle,flag=0,i=50373,u=0.8748874366356839,v=0.5525225999813276,w=0.48868205150023436,x=2.527605160718528 -color=red,shape=circle,flag=1,i=50374,u=0.8384770103507838,v=0.7634889116444994,w=0.4805909340794253,x=3.4834652531802326 -color=red,shape=triangle,flag=1,i=50375,u=0.4318928204558009,v=0.6542202452731594,w=0.4866972375699526,x=6.320080557404322 -color=yellow,shape=triangle,flag=1,i=50380,u=0.914181904742404,v=0.10831237121364024,w=0.5279995087276649,x=4.79409855936342 -color=red,shape=circle,flag=0,i=50386,u=0.4138647728689233,v=0.43369085609932245,w=0.477876823925084,x=2.931802613098213 -color=yellow,shape=square,flag=1,i=50396,u=0.5770019752306095,v=0.9625358495098011,w=0.501579697019034,x=6.100638786348616 -color=yellow,shape=triangle,flag=1,i=50398,u=0.2264710327058158,v=0.36792648004543194,w=0.5250291016834897,x=3.901075929475869 -color=blue,shape=square,flag=1,i=50403,u=0.3901434825842841,v=0.9099402944692845,w=0.4753329600288781,x=6.026259464550773 -color=green,shape=circle,flag=0,i=50410,u=0.9676110961220725,v=0.32560035996749737,w=0.5096600461327119,x=3.533407503347091 -color=yellow,shape=triangle,flag=0,i=50413,u=0.9829340648416501,v=0.09425380501741532,w=0.5240357774773491,x=3.8940758506063893 -color=blue,shape=triangle,flag=1,i=50428,u=0.8039263712443915,v=0.7808678035055574,w=0.49026108607687585,x=5.8131616109363895 -color=red,shape=square,flag=1,i=50431,u=0.5686249541193413,v=0.08427637225553308,w=0.5212980597185892,x=4.121873837196647 -color=red,shape=triangle,flag=0,i=50436,u=0.7823816716154223,v=0.8744433199210387,w=0.5015593604848051,x=5.213747870365629 -color=blue,shape=triangle,flag=1,i=50438,u=0.936214699098151,v=0.7502086695391157,w=0.4914269574675811,x=6.422841798647538 -color=red,shape=triangle,flag=0,i=50441,u=0.42185070776876454,v=0.935454711407329,w=0.5021998693452546,x=5.988321030275532 -color=orange,shape=square,flag=0,i=50455,u=0.8191624785498617,v=0.19961659304327606,w=0.4884942916814342,x=4.771518554714185 -color=red,shape=square,flag=0,i=50456,u=0.17787972292938847,v=0.29877209573782126,w=0.5170261095741998,x=4.1353044725898975 -color=red,shape=circle,flag=0,i=50473,u=0.7477748677573409,v=0.7626437912143071,w=0.47563557399231954,x=5.270389103012094 -color=green,shape=triangle,flag=0,i=50477,u=0.6347852199352854,v=0.24340025095082585,w=0.4922862352125309,x=5.347679834248751 -color=red,shape=triangle,flag=1,i=50482,u=0.3275636265752947,v=0.8951212056020474,w=0.5043605603375156,x=3.841778909020895 -color=yellow,shape=square,flag=1,i=50497,u=0.8166224444830922,v=0.9055235707927637,w=0.5112238278508051,x=2.2161110388844443 -color=yellow,shape=square,flag=1,i=50504,u=0.08611223547352909,v=0.36884810020179126,w=0.5053756287265811,x=4.974547297943633 -color=blue,shape=circle,flag=0,i=50513,u=0.2750202282858297,v=0.5486011607204487,w=0.5064998858474193,x=6.294227761632087 -color=red,shape=square,flag=0,i=50519,u=0.588539036402016,v=0.27551625156498993,w=0.5116306945698845,x=2.611724496686124 -color=red,shape=square,flag=1,i=50525,u=0.6128253921395171,v=0.01135418737128302,w=0.5061720101509078,x=4.540392968708135 -color=green,shape=square,flag=0,i=50526,u=0.3306297578439983,v=0.8407643269350541,w=0.48159196442731406,x=3.430110660320924 -color=green,shape=square,flag=0,i=50528,u=0.16334324636669795,v=0.5691464360401864,w=0.48579790641528486,x=7.19008906984642 -color=green,shape=triangle,flag=0,i=50533,u=0.6828397190827553,v=0.12658167213610316,w=0.49482436605694474,x=5.443268320596251 -color=green,shape=square,flag=0,i=50544,u=0.3735395457575743,v=0.38008622138529813,w=0.4891771276954551,x=2.967425323670074 -color=red,shape=triangle,flag=0,i=50547,u=0.736551146944394,v=0.11089018058115052,w=0.5012885848312164,x=5.303607683320858 -color=red,shape=square,flag=1,i=50570,u=0.8452166071431323,v=0.7887625111934684,w=0.5071417945021927,x=3.5467589172327636 -color=red,shape=triangle,flag=1,i=50571,u=0.43094206855343187,v=0.44081630803458705,w=0.4911024024851045,x=6.311380888682606 -color=red,shape=square,flag=1,i=50594,u=0.08081009994244115,v=0.5586230318460015,w=0.5112859672129461,x=5.085165032884066 -color=red,shape=triangle,flag=1,i=50608,u=0.10203423701992886,v=0.7766591108703994,w=0.49517477362691437,x=4.450112745037305 -color=red,shape=square,flag=0,i=50633,u=0.5410937033988072,v=0.2510818531169222,w=0.5044599965754888,x=5.278660762201601 -color=red,shape=circle,flag=1,i=50637,u=0.014157126433777867,v=-0.004027854421870591,w=0.47373829241227233,x=5.285192702359463 -color=red,shape=triangle,flag=0,i=50639,u=0.1922670519057157,v=0.57587148444939,w=0.50391478749328,x=5.000854990281784 -color=yellow,shape=triangle,flag=1,i=50660,u=0.6296237959124499,v=0.5899745988128372,w=0.517909799510696,x=4.980515950846882 -color=blue,shape=square,flag=1,i=50677,u=0.8547187217886532,v=0.9229455730501026,w=0.4901220363061899,x=4.533703416593276 -color=yellow,shape=circle,flag=0,i=50689,u=0.5768862140768666,v=0.7558901950286872,w=0.48697198883306003,x=3.8232674225777665 -color=yellow,shape=square,flag=1,i=50698,u=0.971536725234087,v=0.9450518727159516,w=0.5061549237388152,x=3.168331767532198 -color=orange,shape=triangle,flag=0,i=50700,u=0.28680386527684365,v=0.3184288338577611,w=0.49452855678469665,x=6.147396811086654 -color=red,shape=square,flag=0,i=50704,u=0.45266490200206344,v=0.3955399863580963,w=0.5021679105101176,x=4.94503393604431 -color=orange,shape=triangle,flag=0,i=50711,u=0.12125241072670401,v=0.4334721789048095,w=0.49692716203328496,x=3.075795899765114 -color=red,shape=triangle,flag=0,i=50729,u=0.964856578918815,v=0.8860718969310118,w=0.514272148743661,x=6.130095479879784 -color=yellow,shape=square,flag=1,i=50739,u=0.3633251539871051,v=0.5074568071938828,w=0.5071066856553837,x=5.417927138716871 -color=red,shape=square,flag=1,i=50750,u=0.3124765870373666,v=0.7219133866261176,w=0.4962271670480276,x=4.290170160861088 -color=yellow,shape=square,flag=1,i=50758,u=0.08734406056523925,v=0.17852809819350712,w=0.5166375105122211,x=2.511772136948832 -color=purple,shape=square,flag=0,i=50765,u=0.2050117710394752,v=0.9221666221421174,w=0.5261591475586372,x=4.905732135963039 -color=purple,shape=circle,flag=0,i=50784,u=0.5822698640607734,v=0.3527475647113385,w=0.48512751962693074,x=5.835390056926741 -color=red,shape=triangle,flag=0,i=50785,u=0.9305174271457112,v=0.7602509581240362,w=0.5231414221309666,x=2.8578020337344996 -color=red,shape=triangle,flag=0,i=50789,u=0.187327103221966,v=0.6964874955141749,w=0.5261435676131992,x=6.07188426053185 -color=blue,shape=square,flag=1,i=50800,u=0.7578075117552626,v=0.434013491880886,w=0.48528541370334394,x=4.301026866416596 -color=red,shape=circle,flag=0,i=50811,u=0.360202616329356,v=0.35989583296453714,w=0.49469391987465694,x=5.750914798889595 -color=green,shape=square,flag=0,i=50826,u=0.1742972776948868,v=0.2232399674915918,w=0.47896122181254464,x=4.097314615101047 -color=blue,shape=circle,flag=0,i=50827,u=0.5469195471712751,v=0.19403983266208824,w=0.5048591096566778,x=5.351786075998247 -color=red,shape=triangle,flag=0,i=50838,u=0.8810406285432517,v=0.0027700109965168584,w=0.5267194633766432,x=3.6120173107084903 -color=blue,shape=square,flag=1,i=50845,u=0.39895306951164056,v=0.053627472726518244,w=0.486468159305982,x=6.151304292398898 -color=red,shape=square,flag=0,i=50849,u=0.1649745341106975,v=0.1781266223193606,w=0.4916745291400111,x=3.7522383651757125 -color=green,shape=square,flag=0,i=50854,u=0.5778926708652365,v=0.16607730098833684,w=0.47786807950058424,x=4.641665940177721 -color=purple,shape=square,flag=0,i=50865,u=0.03627784238228193,v=0.5940492724105999,w=0.5228772281548504,x=5.058984253510755 -color=red,shape=triangle,flag=0,i=50879,u=0.9325719184637344,v=0.3972164381795129,w=0.523127919360907,x=6.571071966992455 -color=red,shape=square,flag=0,i=50889,u=0.1823879844505808,v=0.9563954291022192,w=0.49775451776549595,x=2.121362746111849 -color=purple,shape=circle,flag=0,i=50899,u=0.6744252969731875,v=0.8193923678767696,w=0.4885552072650017,x=2.595243680465718 -color=red,shape=square,flag=1,i=50901,u=0.25815993917916347,v=0.06698404561250404,w=0.5033331506287694,x=2.271143467981933 -color=red,shape=circle,flag=0,i=50904,u=0.1662808713397611,v=0.11721358536358262,w=0.49366295580769554,x=5.294905346001182 -color=red,shape=circle,flag=0,i=50908,u=0.7475619196584694,v=0.7972671824017802,w=0.49400066291491174,x=5.160671352112246 -color=red,shape=circle,flag=0,i=50911,u=0.992138580521617,v=0.977367722873699,w=0.5011341489407665,x=3.201061839890589 -color=red,shape=circle,flag=0,i=50922,u=0.039169533054587924,v=0.10311427748500852,w=0.4957241053053567,x=6.047754364706992 -color=red,shape=circle,flag=0,i=50959,u=0.5243401483121392,v=0.47795125901178614,w=0.5068006845133315,x=3.7770510589842843 -color=red,shape=triangle,flag=0,i=50965,u=0.07523305097130395,v=0.8897061152490147,w=0.539508843493083,x=7.540765986282469 -color=purple,shape=square,flag=0,i=50970,u=0.42685899525327364,v=0.8953390837018341,w=0.5239683589028498,x=4.707022506956129 -color=red,shape=triangle,flag=1,i=50987,u=0.9637357047681995,v=0.963395431752885,w=0.5474893266383639,x=4.165759331704324 -color=red,shape=triangle,flag=0,i=50994,u=0.07604778139495338,v=0.8961047832069696,w=0.5434631546274579,x=7.366686883283737 -color=red,shape=square,flag=1,i=50995,u=0.69381809847172,v=0.24744691498124527,w=0.519935360760861,x=5.943587449581854 -color=blue,shape=square,flag=1,i=50998,u=0.49537193661809464,v=0.08421382928387078,w=0.49128711930137836,x=7.732990515327043 -color=yellow,shape=circle,flag=0,i=51012,u=0.35706118260793507,v=0.20800478766753572,w=0.48387856554823144,x=6.41215738105116 -color=red,shape=circle,flag=1,i=51042,u=0.27533745197489723,v=0.1861882844753225,w=0.5039689230385741,x=6.230298878889761 -color=red,shape=circle,flag=1,i=51055,u=0.5852144832809227,v=0.6738964192500938,w=0.5117878801289304,x=4.025024404299064 -color=red,shape=triangle,flag=1,i=51057,u=0.6949978607748388,v=0.38605836265153837,w=0.535714765566648,x=7.683622248851269 -color=orange,shape=triangle,flag=1,i=51071,u=0.8514572419083051,v=0.01775620980069781,w=0.4988008648114351,x=6.407697305792211 -color=yellow,shape=triangle,flag=1,i=51072,u=0.5332454839284702,v=0.34538628637341273,w=0.5076223082605272,x=3.7576930767491348 -color=blue,shape=circle,flag=1,i=51085,u=0.28831946679475484,v=0.9426142171440738,w=0.4826060414357284,x=5.9178437469062075 -color=red,shape=triangle,flag=0,i=51092,u=0.7432687563111365,v=0.24816456477361093,w=0.5336436786526519,x=6.268906491708289 -color=red,shape=triangle,flag=0,i=51106,u=0.95076327141838,v=0.06102907057275764,w=0.5272385698543371,x=3.6220153746320896 -color=yellow,shape=triangle,flag=1,i=51110,u=0.734429401776723,v=0.08681255269814003,w=0.5085256103522185,x=5.4296018246596605 -color=green,shape=triangle,flag=0,i=51113,u=0.12073873284373415,v=0.2111256741059272,w=0.49595372881916666,x=4.387137440051554 -color=red,shape=square,flag=0,i=51118,u=0.704956644305658,v=0.4129288557104568,w=0.5214573504064933,x=5.393620300743894 -color=red,shape=square,flag=0,i=51125,u=0.6821975511075066,v=0.7576292055914602,w=0.5137454727526782,x=6.563979457042922 -color=blue,shape=triangle,flag=1,i=51133,u=0.7771767707606433,v=0.9302996310508366,w=0.4990336886341269,x=6.26915908413303 -color=yellow,shape=square,flag=1,i=51140,u=0.6527249980388876,v=0.2624021751911615,w=0.5074708115647842,x=5.033931426394182 -color=red,shape=circle,flag=0,i=51148,u=0.543891709896823,v=0.6422704000603097,w=0.519852927370641,x=5.921018269669783 -color=yellow,shape=square,flag=1,i=51151,u=0.22639103742944633,v=0.2039674475056904,w=0.5065845129816348,x=4.758396830137906 -color=blue,shape=square,flag=1,i=51152,u=0.8433720715706001,v=0.24308815255090832,w=0.49285882606892506,x=3.6064714102151663 -color=red,shape=square,flag=0,i=51163,u=0.799980754891858,v=0.6799130546145269,w=0.5014090624175368,x=6.8914482838827835 -color=red,shape=circle,flag=0,i=51182,u=0.0697214069483626,v=0.05696404011110066,w=0.5176388102937045,x=5.924685542753775 -color=red,shape=circle,flag=0,i=51193,u=0.4676920009759702,v=0.5156982936717904,w=0.5222328642547288,x=5.108520836739551 -color=red,shape=triangle,flag=0,i=51206,u=0.18746042030333698,v=0.2976196106567721,w=0.5312470349489933,x=4.159487169856136 -color=green,shape=triangle,flag=0,i=51230,u=0.6158260052253477,v=0.3381165203892189,w=0.4981138951863388,x=7.585826281397896 -color=red,shape=triangle,flag=0,i=51243,u=0.7250515468609884,v=0.6714252427201001,w=0.534232736438725,x=5.394736420427244 -color=yellow,shape=triangle,flag=1,i=51260,u=0.4372175152402803,v=0.4869712529203526,w=0.5287255912322614,x=6.308871170834088 -color=red,shape=square,flag=0,i=51265,u=0.31317592540252326,v=0.16928466634882766,w=0.5039790043763738,x=2.9853889074712456 -color=green,shape=circle,flag=0,i=51269,u=0.9230774740190772,v=0.9102907614134161,w=0.5001118696899801,x=3.087312240937056 -color=blue,shape=square,flag=0,i=51287,u=0.40022732626088375,v=0.27857733007954943,w=0.4988001143923414,x=3.8197671450059456 -color=red,shape=triangle,flag=0,i=51290,u=0.8521492228633735,v=0.7223744245087477,w=0.5293165352539642,x=4.540872189577106 -color=blue,shape=square,flag=0,i=51293,u=0.9750029940517997,v=0.9273663459949385,w=0.502473702535987,x=5.516816961545174 -color=red,shape=triangle,flag=0,i=51307,u=0.7280363455551779,v=0.71944250891602,w=0.525161269846493,x=6.136741866183258 -color=blue,shape=triangle,flag=0,i=51310,u=0.5138301434957004,v=0.007465860710565764,w=0.5091601132214234,x=5.306584609441324 -color=red,shape=square,flag=1,i=51313,u=0.25360397340016905,v=0.7596184841291769,w=0.503441766105535,x=3.2728298348514397 -color=red,shape=circle,flag=1,i=51357,u=0.6089574330058657,v=0.7066778975020571,w=0.522595005501187,x=5.846864187833653 -color=red,shape=square,flag=0,i=51359,u=0.7572955027907539,v=0.38647424182386725,w=0.4957004922973847,x=5.210097520620325 -color=green,shape=circle,flag=0,i=51369,u=0.4817830628089391,v=0.6027335740507863,w=0.5032580622706814,x=4.31121473585327 -color=red,shape=square,flag=0,i=51372,u=0.8367799277448835,v=0.893248422318739,w=0.4883538473632337,x=4.464249116935543 -color=purple,shape=square,flag=0,i=51373,u=0.7582890502650408,v=0.013912614811439017,w=0.5032163061648038,x=3.71956072761866 -color=red,shape=circle,flag=0,i=51387,u=0.8868907232412273,v=0.9337531047564203,w=0.5194825384577602,x=5.749002170752891 -color=blue,shape=circle,flag=0,i=51393,u=0.09401551660922158,v=0.5942674303033858,w=0.48175661160014704,x=8.031876042411836 -color=yellow,shape=triangle,flag=0,i=51416,u=0.6924826566113799,v=0.37030167277457804,w=0.5301359082109466,x=5.891079351783599 -color=red,shape=circle,flag=0,i=51419,u=0.7377761536940319,v=0.695730071033105,w=0.5114317564302873,x=3.714138215471475 -color=blue,shape=triangle,flag=1,i=51430,u=0.745608902246744,v=0.30967953282463523,w=0.5002873369293498,x=5.060823437635704 -color=red,shape=square,flag=0,i=51444,u=0.7149626242410154,v=0.6562048459217744,w=0.47517747061956994,x=5.048681271352033 -color=yellow,shape=square,flag=1,i=51454,u=0.9666352566308892,v=0.4657148381139695,w=0.4969257048462832,x=5.68680175222796 -color=green,shape=circle,flag=0,i=51460,u=0.8739180628664743,v=0.8186240265101146,w=0.5096171654550162,x=5.554756335890901 -color=blue,shape=triangle,flag=0,i=51466,u=0.2295939922656317,v=0.48774256860637055,w=0.500643008555975,x=5.169995559730423 -color=red,shape=triangle,flag=0,i=51487,u=0.7070632037089664,v=0.6113899806497552,w=0.5319638771233706,x=5.656018133449397 -color=yellow,shape=circle,flag=1,i=51496,u=0.8457454058738507,v=0.038506022431195164,w=0.48467959505292885,x=6.452126321803834 -color=red,shape=square,flag=1,i=51497,u=0.9571629531842557,v=0.5934000722492766,w=0.477240565418295,x=6.915223217908465 -color=red,shape=square,flag=0,i=51500,u=0.1409008588671108,v=0.2886739693807736,w=0.47477808567218116,x=6.479804087829895 -color=purple,shape=square,flag=0,i=51506,u=0.07879827202449086,v=0.7998478180303038,w=0.5099257311877712,x=5.098968328679642 -color=red,shape=triangle,flag=0,i=51508,u=0.8158332387476945,v=0.4125759281503657,w=0.5298669202110973,x=5.342442650318176 -color=red,shape=square,flag=0,i=51510,u=0.06573612991136613,v=0.7210550855091418,w=0.4784826563413761,x=6.802494441659632 -color=red,shape=triangle,flag=1,i=51513,u=0.9130059330296822,v=0.73222830445564,w=0.5307689734849879,x=4.944200424828462 -color=red,shape=circle,flag=0,i=51515,u=0.13157020410358145,v=0.13621387114226108,w=0.5251944493406018,x=4.783001779186537 -color=green,shape=circle,flag=0,i=51524,u=0.6628162237858021,v=0.40479096499092715,w=0.51241764571164,x=3.3464733559838975 -color=yellow,shape=circle,flag=1,i=51529,u=0.925419097026505,v=0.2746848777858075,w=0.48238559584587537,x=5.267512415070324 -color=blue,shape=square,flag=1,i=51531,u=0.9146713488587618,v=0.4187850192783583,w=0.5052031708516168,x=4.328362140085191 -color=red,shape=square,flag=0,i=51535,u=0.6697448292840856,v=0.783196991717567,w=0.4778892605182499,x=5.78918627694162 -color=purple,shape=circle,flag=0,i=51549,u=0.5907774720389022,v=0.30662430611178715,w=0.48452106044624255,x=4.005681698791068 -color=yellow,shape=square,flag=1,i=51557,u=0.6021343317889419,v=0.42178288814581477,w=0.5031743727430278,x=4.555450673506873 -color=red,shape=square,flag=0,i=51568,u=0.9265366061151674,v=0.7473004708913986,w=0.4685681296948298,x=5.730653200107484 -color=blue,shape=square,flag=1,i=51570,u=0.6969250127124594,v=0.29974935620697174,w=0.501147366772824,x=5.5280671016604535 -color=green,shape=square,flag=0,i=51571,u=0.4663865424840806,v=0.3522304620611182,w=0.46961666322142337,x=4.62020713183416 -color=red,shape=square,flag=0,i=51576,u=0.040342718477054396,v=0.5770444692907012,w=0.46354678813532385,x=7.151619484057629 -color=red,shape=square,flag=1,i=51578,u=0.37325844093423755,v=0.9655933365333579,w=0.45965020235125087,x=4.710096652461195 -color=red,shape=triangle,flag=0,i=51602,u=0.16302825549586486,v=0.5629489752483217,w=0.5258733416212248,x=4.174808681613526 -color=red,shape=square,flag=1,i=51604,u=0.41701707671758126,v=0.9175694687844062,w=0.4528007666201084,x=4.880351352714453 -color=purple,shape=square,flag=0,i=51605,u=0.8668838541588562,v=0.3658084272985406,w=0.508964753158348,x=5.839488746618781 -color=red,shape=square,flag=0,i=51632,u=0.21352378353543333,v=0.39800789753979215,w=0.44849862316922917,x=4.404420202833314 -color=orange,shape=circle,flag=0,i=51638,u=0.359563850875649,v=0.44183971037529857,w=0.4992925798624336,x=5.681907003428397 -color=purple,shape=triangle,flag=0,i=51643,u=0.7372586930970393,v=0.4683270726622283,w=0.48300142321406325,x=6.171657852147866 -color=red,shape=triangle,flag=0,i=51648,u=0.7109240438085478,v=0.9875131220035608,w=0.5293964074967556,x=3.587950604511093 -color=yellow,shape=triangle,flag=1,i=51655,u=0.04160554817225104,v=0.6458323941474418,w=0.5326931302379652,x=4.929764786347565 -color=blue,shape=triangle,flag=1,i=51660,u=0.24312357880726554,v=0.4234675253364347,w=0.506592134408511,x=6.421022808537366 -color=green,shape=triangle,flag=0,i=51662,u=0.9844801427550086,v=0.34546435167199774,w=0.4847984777789095,x=5.919735945055961 -color=red,shape=circle,flag=1,i=51673,u=0.9340217238631677,v=0.8696812631639652,w=0.5109516438715346,x=3.7853018086657926 -color=red,shape=triangle,flag=1,i=51674,u=0.15428409179982372,v=0.05503714886890332,w=0.5181907153123715,x=6.288109148235346 -color=red,shape=square,flag=0,i=51684,u=0.9741380597538469,v=0.018224040848909384,w=0.4478676183228643,x=5.420496133850821 -color=red,shape=circle,flag=1,i=51690,u=0.025187890752278563,v=0.011294397111185005,w=0.5148855518017568,x=6.167252011589368 -color=yellow,shape=triangle,flag=1,i=51703,u=0.10946808840217115,v=0.9672780362266309,w=0.5305167810495778,x=3.6903066711320576 -color=yellow,shape=square,flag=0,i=51711,u=0.5302403582175178,v=0.5556234547580495,w=0.5187480947758757,x=4.092016767656543 -color=red,shape=circle,flag=0,i=51713,u=0.5114496655001461,v=0.6064810358189353,w=0.5154031721277909,x=6.285577951416542 -color=red,shape=triangle,flag=0,i=51715,u=0.6354942383242759,v=0.426669705402724,w=0.5202883781268917,x=5.288680750052341 -color=red,shape=square,flag=1,i=51743,u=0.35914104559973503,v=0.7004399526603373,w=0.44049459546058434,x=4.280750263509971 -color=yellow,shape=triangle,flag=1,i=51745,u=0.5009413686804034,v=0.3124850966197281,w=0.5340891489458927,x=4.6986624047815555 -color=yellow,shape=circle,flag=0,i=51760,u=0.7276510081242807,v=0.9518224172477104,w=0.4887173847508473,x=4.153208149862749 -color=yellow,shape=circle,flag=1,i=51762,u=0.9227496226557272,v=0.023779447605717707,w=0.4917481819631273,x=4.855652911187007 -color=yellow,shape=circle,flag=1,i=51786,u=0.1522396936270799,v=0.3653112653568289,w=0.499439773612058,x=4.769269389187627 -color=blue,shape=circle,flag=1,i=51790,u=0.8409690881801342,v=0.5957994405022468,w=0.4768411624161044,x=5.321977867069022 -color=red,shape=circle,flag=0,i=51796,u=0.815549154524023,v=0.8642599037138339,w=0.5286541659427871,x=4.823636519927796 -color=yellow,shape=square,flag=1,i=51806,u=0.4922586095143108,v=0.1316807235586278,w=0.5135475132263021,x=5.5906743328888595 -color=green,shape=circle,flag=0,i=51807,u=0.9141731688670173,v=0.46523676900830624,w=0.5077395025666828,x=4.984733037268875 -color=red,shape=triangle,flag=0,i=51809,u=0.4476504009558353,v=0.511371954116705,w=0.5224315595765628,x=3.7472200693775193 -color=red,shape=triangle,flag=0,i=51814,u=0.7316700800263944,v=0.2814708929184262,w=0.52716560361122,x=6.0596550534655025 -color=blue,shape=triangle,flag=0,i=51821,u=0.6693424678597197,v=0.13615228256254785,w=0.4984427234099002,x=3.0604416817461346 -color=red,shape=square,flag=0,i=51837,u=0.9224420773691162,v=0.9751573249131247,w=0.4489943719777926,x=5.94297121407402 -color=yellow,shape=square,flag=1,i=51843,u=0.04529504186463029,v=0.2590147781397363,w=0.5106422562337171,x=5.05728472428805 -color=red,shape=square,flag=0,i=51871,u=0.4746160331781294,v=0.8021430706647209,w=0.4625385235041772,x=5.667349691950577 -color=blue,shape=triangle,flag=0,i=51894,u=0.03383802891646104,v=0.42815637397252193,w=0.5094869894118408,x=5.777914893347396 -color=red,shape=triangle,flag=1,i=51903,u=0.8654831367586814,v=0.21572479821068768,w=0.5422185981143006,x=5.395930425008316 -color=red,shape=triangle,flag=0,i=51905,u=0.7695971083833717,v=0.052280825893191496,w=0.5386653755584211,x=6.092696713021861 -color=red,shape=circle,flag=1,i=51913,u=0.42948597579972114,v=0.3389620002510328,w=0.5401730116239795,x=5.563662675850257 -color=green,shape=square,flag=0,i=51917,u=0.7509214654693568,v=0.9689894364551752,w=0.47791040325486656,x=6.245239164023682 -color=red,shape=square,flag=0,i=51926,u=0.07061408599678454,v=0.7013437939967658,w=0.48334129428323963,x=4.630264980712026 -color=blue,shape=square,flag=1,i=51930,u=0.03325950548093659,v=0.5302944639989472,w=0.49722888857410935,x=5.523889009938737 -color=red,shape=square,flag=0,i=51935,u=0.6288367073509661,v=0.5077078229492129,w=0.491203682248102,x=5.850726350369469 -color=green,shape=triangle,flag=0,i=51937,u=0.8110395177542319,v=0.8604262031679589,w=0.487705153062008,x=3.489013738388873 -color=red,shape=square,flag=0,i=51942,u=0.6284513175632728,v=0.8151131978741082,w=0.49000450174459026,x=4.753297819942608 -color=red,shape=circle,flag=0,i=51943,u=0.8129242840695271,v=0.7335036396443173,w=0.5388169192822269,x=6.662138084224714 -color=red,shape=triangle,flag=1,i=51950,u=0.6562712647630088,v=0.10117226646252886,w=0.5347273826326017,x=4.715389834504573 -color=yellow,shape=triangle,flag=1,i=51967,u=0.11678633023821827,v=0.31817702727595565,w=0.5295828201364886,x=6.99484642465337 -color=orange,shape=triangle,flag=0,i=51969,u=0.847444056702493,v=0.14137315674846596,w=0.49954109149852305,x=2.276290051910118 -color=yellow,shape=square,flag=1,i=51982,u=0.174803713787973,v=0.08488496442701599,w=0.5063942438660864,x=2.606033666755291 -color=yellow,shape=circle,flag=1,i=51986,u=0.5961635979844375,v=0.7630965022578878,w=0.4960337158868015,x=2.6491961183101957 -color=red,shape=circle,flag=1,i=51998,u=0.8582493166271552,v=0.7727476425494122,w=0.5311230162106322,x=5.312889792932207 -color=purple,shape=circle,flag=1,i=52000,u=0.00567006363171263,v=0.5852174051876605,w=0.4894640623922945,x=5.292625739249313 -color=purple,shape=circle,flag=0,i=52008,u=0.243996126869515,v=0.7263759935383862,w=0.4913110412259708,x=6.255297398939461 -color=red,shape=circle,flag=0,i=52031,u=0.5721855743496772,v=0.49853084187327373,w=0.5181973759061438,x=2.881267732496781 -color=red,shape=triangle,flag=1,i=52046,u=0.8474843575971506,v=0.7361385748930228,w=0.528659969589093,x=6.944834759284755 -color=red,shape=square,flag=0,i=52051,u=0.32980154524681793,v=0.9032738530198129,w=0.48305224884247205,x=5.767735093424061 -color=red,shape=square,flag=0,i=52056,u=0.4623444192072558,v=0.3231819396802911,w=0.4783859580866062,x=5.165766139792251 -color=red,shape=triangle,flag=0,i=52057,u=0.20690559658118024,v=0.623127527189831,w=0.5196151241770021,x=4.9453116514137365 -color=purple,shape=triangle,flag=0,i=52076,u=0.8503606604703292,v=0.944320244344703,w=0.48486955348868793,x=5.466595461830436 -color=blue,shape=square,flag=0,i=52103,u=0.5916309128884358,v=0.6500248651392257,w=0.49722515289836583,x=2.3999301835688915 -color=purple,shape=square,flag=1,i=52107,u=0.8588525745090811,v=0.5843369394083263,w=0.5179769913654745,x=5.148189365249592 -color=yellow,shape=square,flag=1,i=52114,u=0.8035308395661721,v=0.18182376894894947,w=0.5102668719159817,x=5.331062198055418 -color=red,shape=triangle,flag=1,i=52115,u=0.2933628823238398,v=0.92061551444389,w=0.5219463050710126,x=5.299837853971599 -color=yellow,shape=square,flag=1,i=52132,u=0.2024318088395488,v=0.1394320792052257,w=0.5140818090996991,x=5.323213095294748 -color=blue,shape=circle,flag=1,i=52134,u=0.42824825635872665,v=0.5800456605198561,w=0.4760686370564184,x=4.634730378496663 -color=red,shape=circle,flag=0,i=52143,u=0.09344004386067162,v=0.1741478533803294,w=0.5163961184470978,x=5.249623109348912 -color=red,shape=square,flag=0,i=52149,u=0.7377702473496214,v=0.009139564993111304,w=0.4772451858173621,x=5.60467292150054 -color=purple,shape=square,flag=0,i=52161,u=0.9512453342353719,v=0.8974241044880871,w=0.513593758113193,x=5.327884430880368 -color=red,shape=square,flag=0,i=52182,u=0.015522137619518928,v=0.1333793748758263,w=0.47904672116639313,x=4.424595485702003 -color=yellow,shape=circle,flag=1,i=52204,u=0.506835411816078,v=0.5631128409246836,w=0.49955121464053626,x=6.202554467791249 -color=green,shape=triangle,flag=0,i=52205,u=0.06877662852325894,v=0.9789054101866604,w=0.49464180611131714,x=5.387164967368842 -color=blue,shape=square,flag=0,i=52207,u=0.9542380394771601,v=0.9317909386399712,w=0.4909167630766677,x=6.734110505802306 -color=orange,shape=square,flag=1,i=52214,u=0.4496744014145475,v=0.08276236027308737,w=0.4904474474074879,x=3.5165422496211907 -color=yellow,shape=square,flag=1,i=52215,u=0.8042519668244892,v=0.2884491811449357,w=0.5109149758546478,x=6.283163848995784 -color=orange,shape=square,flag=1,i=52218,u=0.3157722639507038,v=0.9855837216848163,w=0.4951830337617732,x=5.800109088562794 -color=red,shape=circle,flag=0,i=52224,u=0.1728389118875222,v=0.11317941482199459,w=0.5244091560274324,x=6.5046882900817735 -color=green,shape=triangle,flag=0,i=52229,u=0.7110449580320812,v=0.20453192165165845,w=0.49406753937433706,x=4.387637067650083 -color=red,shape=triangle,flag=0,i=52237,u=0.36817863186231503,v=0.1971623626175223,w=0.5136900170452919,x=5.262223682053327 -color=purple,shape=square,flag=0,i=52239,u=0.08935440578648401,v=0.09541224385714908,w=0.5188380366660397,x=5.038428222166403 -color=blue,shape=triangle,flag=1,i=52252,u=0.2741723615556444,v=0.3130824117898964,w=0.5088615413102675,x=5.308579482081409 -color=red,shape=triangle,flag=1,i=52253,u=0.9779713440415067,v=0.774072177853534,w=0.5173897702213924,x=6.398087944020965 -color=yellow,shape=triangle,flag=1,i=52254,u=0.5287946617232347,v=0.3550702617349799,w=0.5282529415454152,x=5.400839490006583 -color=red,shape=circle,flag=0,i=52255,u=0.626097973401072,v=0.7195464329351933,w=0.5158838566430032,x=4.794338368698951 -color=yellow,shape=circle,flag=1,i=52279,u=0.7355076761897926,v=0.3806420101754633,w=0.49416060379455956,x=4.901707450592116 -color=yellow,shape=square,flag=1,i=52282,u=0.07807384582003984,v=0.4741934618504674,w=0.5077249877932862,x=3.672397302171495 -color=red,shape=triangle,flag=0,i=52283,u=0.36701413886903766,v=0.9336745582297516,w=0.5148719445492097,x=5.20172509300433 -color=red,shape=triangle,flag=0,i=52285,u=0.0990156465556884,v=0.8410130899820469,w=0.5178978077124209,x=2.6869689830232826 -color=red,shape=square,flag=0,i=52295,u=0.6049304927234905,v=0.7047521436520041,w=0.5112053089842875,x=4.079730178367164 -color=purple,shape=triangle,flag=0,i=52298,u=0.2149756915623633,v=0.04499740833010657,w=0.4802334336165949,x=4.836185658744674 -color=red,shape=circle,flag=0,i=52302,u=0.7514101864560648,v=0.677243471681068,w=0.5010317275494404,x=3.099854727323486 -color=red,shape=triangle,flag=1,i=52313,u=0.1881359166209492,v=0.9341342254208683,w=0.5139926118968475,x=5.393136232461404 -color=purple,shape=triangle,flag=0,i=52335,u=0.15791960711376474,v=0.6277523258484347,w=0.4816148562296628,x=5.388935116172032 -color=blue,shape=triangle,flag=1,i=52340,u=0.8733222646587602,v=0.9619949384736779,w=0.4943784949906086,x=3.767936800157836 -color=red,shape=triangle,flag=0,i=52345,u=0.08029122420389123,v=0.1439100337383613,w=0.5170842898800784,x=4.6692782396176815 -color=red,shape=triangle,flag=1,i=52356,u=0.5483739692174197,v=0.28495883359281626,w=0.5131064921453254,x=4.024261456239268 -color=red,shape=triangle,flag=1,i=52358,u=0.1032619734864989,v=0.9513537765332436,w=0.5153764600639816,x=3.7232419605329703 -color=red,shape=triangle,flag=1,i=52362,u=0.908869029920776,v=0.7826716483137682,w=0.5102402231247036,x=4.234752980025949 -color=orange,shape=square,flag=0,i=52379,u=0.7936665112690795,v=0.8426748908373884,w=0.4919550296572429,x=4.22790829887506 -color=red,shape=triangle,flag=0,i=52381,u=0.6475202334821598,v=0.8462874561504913,w=0.504320793146567,x=5.019939817941728 -color=orange,shape=triangle,flag=1,i=52387,u=0.5749983657581855,v=0.35987460533527227,w=0.5001348947428911,x=3.884981002818647 -color=green,shape=circle,flag=0,i=52418,u=0.67662155386729,v=0.6653302398275254,w=0.5029959671149259,x=3.856832287406202 -color=purple,shape=circle,flag=0,i=52440,u=0.688424437348071,v=0.17308065202330447,w=0.4865435847528421,x=5.154124046467038 -color=red,shape=triangle,flag=0,i=52468,u=0.6135810074552136,v=0.2764450176273855,w=0.5121002409489613,x=5.59186554887647 -color=red,shape=square,flag=0,i=52483,u=0.8733657386221578,v=0.6541739165106865,w=0.4906602023294829,x=4.9125395426848675 -color=red,shape=circle,flag=0,i=52498,u=0.6831138147452418,v=0.5904990386922024,w=0.5050111802695261,x=3.3111095677596736 -color=yellow,shape=square,flag=1,i=52502,u=0.9064391998762573,v=0.9888162512981494,w=0.49853393097373594,x=5.620736021863709 -color=red,shape=circle,flag=1,i=52518,u=0.077649783869285,v=0.11628539212179528,w=0.5107983708588363,x=5.932608047497987 -color=blue,shape=square,flag=1,i=52527,u=0.1301495953740337,v=0.5556767639288793,w=0.49003740246433636,x=5.367606120411192 -color=blue,shape=triangle,flag=0,i=52532,u=0.000881025170573424,v=0.5517627694496242,w=0.49305724181885535,x=6.371797048974764 -color=red,shape=triangle,flag=0,i=52547,u=0.23040699709948176,v=0.07246442447096735,w=0.5187151376071768,x=3.716213167206817 -color=red,shape=triangle,flag=0,i=52556,u=0.9830142148411835,v=0.02031325964142372,w=0.5232400897178063,x=4.994413026228556 -color=purple,shape=square,flag=0,i=52569,u=0.49564524082536643,v=0.6234083323619819,w=0.5216969741068767,x=6.5731584112566575 -color=red,shape=triangle,flag=0,i=52570,u=0.5276478009697795,v=0.1126643886907388,w=0.5205912546090715,x=4.219592271352261 -color=yellow,shape=circle,flag=1,i=52573,u=0.2959161260074732,v=0.10868429966375115,w=0.5006732080078359,x=3.161686835298362 -color=yellow,shape=square,flag=0,i=52575,u=0.5757324905306846,v=0.663209725308498,w=0.4964954775303364,x=4.477070389969837 -color=red,shape=square,flag=1,i=52576,u=0.6043095647210869,v=0.3042736836391958,w=0.48075738645409366,x=6.806321430196472 -color=yellow,shape=triangle,flag=1,i=52593,u=0.07387916169910536,v=0.3061990051362209,w=0.519022887342692,x=5.982167038244008 -color=green,shape=circle,flag=0,i=52598,u=0.13040318272752338,v=0.05666980978760916,w=0.5029184904909978,x=3.456664689530404 -color=red,shape=square,flag=0,i=52606,u=0.04512710904729755,v=0.1467837302768299,w=0.4869756818027536,x=3.9934943061059704 -color=blue,shape=triangle,flag=1,i=52609,u=0.9084407078949894,v=0.7424532654182623,w=0.48855863503507835,x=3.080847988790612 -color=red,shape=square,flag=1,i=52614,u=0.37869001838466576,v=0.8993972654399166,w=0.48922243951821953,x=3.917005683291519 -color=purple,shape=square,flag=0,i=52617,u=0.5907293854809421,v=0.8731493250391283,w=0.5243215380601083,x=5.696455073689237 -color=blue,shape=square,flag=1,i=52631,u=0.7837074900310228,v=0.312303888278461,w=0.485149227601041,x=4.497896357070947 -color=red,shape=square,flag=1,i=52646,u=0.39986058026787674,v=0.00873367373951961,w=0.49260168125349185,x=5.247702567202491 -color=purple,shape=square,flag=0,i=52652,u=0.08227296864945932,v=0.0027498863046688804,w=0.5276786142546909,x=4.8131204967338865 -color=orange,shape=square,flag=1,i=52676,u=0.3647329727753311,v=0.9760225945493155,w=0.4993673587267736,x=3.404664579955616 -color=red,shape=triangle,flag=0,i=52683,u=0.22436709765289364,v=0.2634707491686573,w=0.5116341805377761,x=6.7641946273908955 -color=blue,shape=triangle,flag=1,i=52687,u=0.7210912614188684,v=0.2687333044849789,w=0.4787611535711431,x=5.073167960937283 -color=red,shape=circle,flag=0,i=52691,u=0.5222832712871655,v=0.4309615584864218,w=0.5189220366355285,x=4.2400120909055685 -color=orange,shape=triangle,flag=1,i=52707,u=0.9214487852161317,v=0.09343660662775943,w=0.5012255358092673,x=3.7225883213157878 -color=purple,shape=square,flag=0,i=52708,u=0.14643777542001046,v=0.08700818141116695,w=0.5292311920140658,x=5.016131054958602 -color=red,shape=square,flag=1,i=52709,u=0.08897300301121103,v=0.7814700000383876,w=0.49895900444216007,x=2.2865095711177674 -color=red,shape=square,flag=0,i=52772,u=0.5786910734396149,v=0.05729958812990188,w=0.4933345442226914,x=3.386828921534422 -color=red,shape=square,flag=0,i=52785,u=0.03581062837884763,v=0.5926768901310614,w=0.4870356571675463,x=5.656973762384574 -color=blue,shape=triangle,flag=1,i=52787,u=0.22066838727428473,v=0.9724585787430184,w=0.4778306446037541,x=3.6993194051344243 -color=red,shape=circle,flag=0,i=52810,u=0.9339593499075624,v=0.8543023949591325,w=0.5286370929643673,x=5.377735499739121 -color=green,shape=circle,flag=0,i=52812,u=0.02781734924224788,v=0.20488543547914717,w=0.5192762517758809,x=2.633093512339452 -color=red,shape=circle,flag=1,i=52833,u=0.03451473868527677,v=-0.024521956623567445,w=0.5304534885529195,x=5.487298960378328 -color=blue,shape=square,flag=0,i=52846,u=0.7814824453356772,v=0.7248701534651746,w=0.4935167498542997,x=6.4853693993086665 -color=green,shape=square,flag=1,i=52847,u=0.3808836987911267,v=0.11601888960788242,w=0.4981033152354464,x=5.340503985443173 -color=green,shape=circle,flag=0,i=52850,u=0.6658425480876631,v=0.06879813186716244,w=0.5193911647959466,x=5.66886374349196 -color=yellow,shape=square,flag=1,i=52891,u=0.9432256294057052,v=0.51461277320613,w=0.48421920005995467,x=5.1984849938911 -color=blue,shape=square,flag=0,i=52895,u=0.3175335461687372,v=0.6642955604895936,w=0.48825253654031747,x=4.0172336283039485 -color=yellow,shape=square,flag=1,i=52903,u=0.7294708569272657,v=0.6834369198111935,w=0.48395310346914544,x=5.029639996887844 -color=red,shape=circle,flag=1,i=52925,u=0.3888344685340427,v=0.36685711824773165,w=0.5286078650116836,x=5.6297440077353365 -color=yellow,shape=square,flag=1,i=52926,u=0.40288126706358307,v=0.4725773225275295,w=0.4900308463285277,x=4.8423480629276545 -color=purple,shape=triangle,flag=0,i=52930,u=0.6243223554286969,v=0.01674605079475988,w=0.48784423798029597,x=5.813101129306321 -color=red,shape=triangle,flag=0,i=52950,u=0.4137729289410823,v=0.5381877940494273,w=0.5016704145897024,x=5.937617197460704 -color=purple,shape=square,flag=0,i=52951,u=0.7721308028509409,v=0.16645166096201747,w=0.5343470851456465,x=5.924206524129342 -color=red,shape=square,flag=0,i=52954,u=0.7152566018456312,v=0.9461356788286511,w=0.5057789928561544,x=2.803100018283603 -color=yellow,shape=triangle,flag=1,i=52960,u=0.007166004664540759,v=0.1468412366931977,w=0.5378776097852618,x=4.586780118277933 -color=yellow,shape=circle,flag=1,i=52981,u=0.5173462993422445,v=0.10318929741795924,w=0.5038983234708592,x=3.0644798227158656 -color=red,shape=circle,flag=0,i=52997,u=0.09245310798264372,v=0.08668137004811208,w=0.5220291354834344,x=6.290938076708495 -color=green,shape=circle,flag=0,i=53021,u=0.8577994488156397,v=0.5888623404030089,w=0.5152289064080161,x=5.337059411360258 -color=red,shape=triangle,flag=0,i=53029,u=0.0427220406033213,v=0.5996915527020832,w=0.5078774477298722,x=5.290998502312482 -color=green,shape=square,flag=0,i=53041,u=0.043570248003231504,v=0.5701860157154788,w=0.48611390263711507,x=5.246505110710838 -color=green,shape=circle,flag=1,i=53042,u=0.04875603581062338,v=0.15194792481958064,w=0.5147169283788311,x=3.7735864371362666 -color=yellow,shape=square,flag=1,i=53043,u=0.2558796969555164,v=0.23811733022208437,w=0.4856843295730806,x=2.203984897937227 -color=red,shape=square,flag=0,i=53047,u=0.15046233620422622,v=0.8317631511838962,w=0.5131889828276508,x=3.926268570051162 -color=blue,shape=square,flag=1,i=53061,u=0.995737268290847,v=0.9774029199356878,w=0.49361106199859145,x=5.444058955485115 -color=purple,shape=triangle,flag=0,i=53072,u=0.9413442697917878,v=0.6860665086684452,w=0.48544826702059524,x=4.591111804379497 -color=red,shape=circle,flag=0,i=53121,u=0.9835676379232661,v=0.9433763581069705,w=0.518576456967524,x=5.901150831764511 -color=red,shape=triangle,flag=1,i=53126,u=0.6105149066369585,v=0.9220560324294793,w=0.5130380585566496,x=5.928863577445601 -color=purple,shape=square,flag=1,i=53143,u=0.12530813144984565,v=0.3370136990801531,w=0.5331873228500835,x=4.672746340928424 -color=yellow,shape=triangle,flag=1,i=53154,u=0.41125103363273674,v=0.6822319800697034,w=0.5212070340660843,x=2.9674899677127056 -color=green,shape=triangle,flag=0,i=53162,u=0.028160872816518467,v=0.2362809112646198,w=0.5073427834924018,x=5.441330972245684 -color=green,shape=triangle,flag=1,i=53168,u=0.9190637778749419,v=0.19669683997132703,w=0.5115504561103202,x=4.732555979100018 -color=blue,shape=circle,flag=1,i=53172,u=0.6720223230340686,v=0.5738592422850695,w=0.4806935362352563,x=3.202817196382547 -color=red,shape=circle,flag=1,i=53175,u=0.2953529994616553,v=0.22808842205456112,w=0.51039702482179,x=3.1812281832600298 -color=blue,shape=square,flag=1,i=53185,u=0.2219380141638697,v=0.702824526761126,w=0.49697554673650995,x=6.847691045252694 -color=purple,shape=square,flag=0,i=53207,u=0.11425260785878544,v=0.49571714997225946,w=0.5307216360443998,x=4.4708469947821134 -color=red,shape=triangle,flag=0,i=53211,u=0.04347576894022498,v=0.7642076887432399,w=0.5085319918983586,x=6.590880005622975 -color=red,shape=circle,flag=0,i=53230,u=0.7917571475278645,v=0.8713469392168643,w=0.5107429288468274,x=3.9649950733894372 -color=red,shape=circle,flag=1,i=53236,u=0.4661241690495891,v=0.3895805149926871,w=0.5133996307698135,x=6.269463050471795 -color=red,shape=circle,flag=0,i=53239,u=0.6853093986187075,v=0.6712156691019893,w=0.5120264432661308,x=6.595980582926875 -color=red,shape=square,flag=1,i=53254,u=0.9524026372334484,v=0.7514457850648184,w=0.513176785350573,x=3.2079296611637993 -color=red,shape=circle,flag=0,i=53256,u=0.3023023021720317,v=0.26244344172585254,w=0.5151187899783981,x=4.576705251242261 -color=yellow,shape=square,flag=1,i=53264,u=0.4008409982664709,v=0.5280681718870366,w=0.4876154177872036,x=4.986710582672633 -color=red,shape=square,flag=0,i=53269,u=0.6041363127894107,v=0.4585492322173157,w=0.5106007139585819,x=5.6615486864247435 -color=blue,shape=triangle,flag=0,i=53272,u=0.9335538133176621,v=0.2848253193452338,w=0.46996588658449084,x=3.4058035578959767 -color=purple,shape=triangle,flag=0,i=53287,u=0.21012403509584532,v=0.8397203498651571,w=0.5008524047640063,x=6.7952218460292855 -color=red,shape=triangle,flag=0,i=53292,u=0.3429024667053624,v=0.47929843531181116,w=0.4828950353937109,x=6.383553259773147 -color=red,shape=triangle,flag=1,i=53295,u=0.18515384746521146,v=0.2532353230054266,w=0.4828736091474691,x=2.2107331839070894 -color=red,shape=square,flag=0,i=53296,u=0.054102905751847286,v=0.8200177614071831,w=0.509151958879271,x=5.453649617983902 -color=yellow,shape=square,flag=1,i=53327,u=0.5772437567081796,v=0.5598269088393589,w=0.49016335121085813,x=4.931818467865426 -color=red,shape=square,flag=0,i=53331,u=0.3775906125856252,v=0.2277540602251794,w=0.517292396112212,x=4.786477715205364 -color=red,shape=circle,flag=0,i=53337,u=0.453345289834169,v=0.48601281854322814,w=0.5254787905876568,x=3.5330797913065966 -color=red,shape=circle,flag=1,i=53338,u=0.1591571590783415,v=0.11740867795278917,w=0.5218605514830672,x=5.5504999324619275 -color=purple,shape=square,flag=0,i=53354,u=0.28528270410924894,v=0.7661302410766112,w=0.5385840766003268,x=5.740480574967503 -color=red,shape=triangle,flag=1,i=53357,u=0.5066315005500213,v=0.04587541647680238,w=0.4812503658479811,x=4.754679006982214 -color=yellow,shape=square,flag=1,i=53362,u=0.6637704535508312,v=0.5407507500216353,w=0.4976937531795198,x=5.925247151519417 -color=red,shape=square,flag=1,i=53383,u=0.39219176534827616,v=0.5476639535947663,w=0.5230376941274663,x=5.474048906674746 -color=red,shape=circle,flag=1,i=53391,u=0.9137916852709447,v=0.9478944588313902,w=0.5138826744560256,x=5.757539560086493 -color=red,shape=triangle,flag=0,i=53415,u=0.48092043523977046,v=0.41546775043329853,w=0.4747383481844223,x=2.9233854855550976 -color=blue,shape=square,flag=0,i=53426,u=0.8701931550778623,v=0.7792656037809297,w=0.502850839995768,x=4.763677718881973 -color=red,shape=triangle,flag=1,i=53444,u=0.37193805384657874,v=0.10708982250113408,w=0.47867695348317274,x=4.347290549442402 -color=purple,shape=circle,flag=0,i=53450,u=0.521272069501937,v=0.43007771234635894,w=0.48909289524535227,x=4.740719352360605 -color=purple,shape=circle,flag=0,i=53458,u=0.9050968120029785,v=0.09421191810403817,w=0.48511453320140385,x=4.011780724389438 -color=red,shape=triangle,flag=1,i=53479,u=0.619441644216284,v=0.2256311772293219,w=0.4832298027114756,x=2.7386664317490106 -color=red,shape=square,flag=0,i=53503,u=0.7139285914828621,v=0.3310777579816968,w=0.5137639984652621,x=4.6206541558997705 -color=red,shape=square,flag=0,i=53512,u=0.6643624860989904,v=0.580030202494807,w=0.5118441674036535,x=4.916144162544415 -color=purple,shape=circle,flag=0,i=53513,u=0.791819631623404,v=0.7956857548926921,w=0.48561619093919245,x=4.379655863178406 -color=red,shape=square,flag=0,i=53515,u=0.16980860287951083,v=0.28553949719489335,w=0.5148676871963515,x=4.758698950147402 -color=yellow,shape=circle,flag=1,i=53538,u=0.7307990296707214,v=0.7879215454293108,w=0.503632811970671,x=3.20953410050493 -color=yellow,shape=square,flag=1,i=53554,u=0.7963479367054498,v=0.49705860805537194,w=0.49680589593806285,x=6.520699023429686 -color=green,shape=triangle,flag=0,i=53559,u=0.9908112170890696,v=0.04601082055484296,w=0.5220844009523338,x=5.5664733389094465 -color=green,shape=square,flag=0,i=53562,u=0.9769859281555444,v=0.35172539040876183,w=0.5067621341649307,x=4.3539870595965295 -color=blue,shape=square,flag=0,i=53565,u=0.8706555987332689,v=0.757912235267193,w=0.5138498986973996,x=5.380743054745994 -color=red,shape=circle,flag=0,i=53567,u=0.0024676387987249138,v=0.05083429612273676,w=0.5039487592076144,x=2.619398230450757 -color=yellow,shape=circle,flag=1,i=53586,u=0.7297528117486306,v=0.14599466772121383,w=0.5026238525575261,x=5.233726078552931 -color=red,shape=triangle,flag=0,i=53587,u=0.5697980727474699,v=0.05589927899812319,w=0.49751109178158837,x=3.8853532836870808 -color=red,shape=square,flag=0,i=53597,u=0.2535867038890457,v=0.8688668103097184,w=0.49095495064502237,x=3.4563482752750816 -color=red,shape=circle,flag=0,i=53602,u=0.8734679331491012,v=0.9155012385468725,w=0.49792935205451705,x=5.866269132508942 -color=red,shape=circle,flag=0,i=53605,u=0.7170488710600035,v=0.6226868750484842,w=0.49682420642292735,x=5.324163770643963 -color=orange,shape=square,flag=0,i=53610,u=0.9988853487546249,v=0.15523943034690246,w=0.48807563823534394,x=2.7538513348864178 -color=red,shape=triangle,flag=0,i=53645,u=0.057152019703461954,v=0.7930713948164714,w=0.49888824941667814,x=5.510583133411919 -color=yellow,shape=square,flag=1,i=53659,u=0.7167298708974419,v=0.4536367065782505,w=0.4997763573482059,x=3.8338036542606724 -color=red,shape=triangle,flag=0,i=53670,u=0.6589006128983669,v=0.3352318775626706,w=0.4964646181879287,x=4.393022798543047 -color=red,shape=square,flag=0,i=53674,u=0.5666299747228207,v=0.3548557720214315,w=0.49798441027119517,x=6.219337458737967 -color=yellow,shape=circle,flag=1,i=53677,u=0.6746074516906357,v=0.8039286022479225,w=0.5051494977434232,x=5.764614291344667 -color=orange,shape=triangle,flag=1,i=53680,u=0.4431316693540571,v=0.3405488363333343,w=0.5128223130959686,x=3.9888930729618792 -color=red,shape=square,flag=0,i=53685,u=0.11657230495747417,v=0.45547628044542365,w=0.5084283018333108,x=6.669178540369981 -color=red,shape=triangle,flag=1,i=53689,u=0.21441583621150195,v=0.6239369274123343,w=0.5079931155014976,x=4.538675252448592 -color=green,shape=triangle,flag=0,i=53699,u=0.28462824993024594,v=0.07155955139375159,w=0.5151259593399791,x=6.021502904209325 -color=red,shape=triangle,flag=0,i=53702,u=0.18530003172725173,v=0.1850664287997309,w=0.507149064091653,x=3.7370196359860515 -color=purple,shape=triangle,flag=0,i=53720,u=0.07745692851639341,v=0.23790525694735942,w=0.48096875726637234,x=5.120135770251367 -color=red,shape=square,flag=0,i=53746,u=0.840797681742386,v=0.29353690430270774,w=0.5145304051265439,x=3.5203394220279804 -color=red,shape=square,flag=0,i=53749,u=0.4815363338880647,v=0.5299469809870514,w=0.5155044425846441,x=4.587977751351524 -color=red,shape=square,flag=0,i=53752,u=0.1163048156377906,v=0.21960117297230908,w=0.5134399107386405,x=5.435305480649757 -color=yellow,shape=circle,flag=1,i=53761,u=0.005122263098804036,v=0.6574735360653137,w=0.5103057475906442,x=4.951171156869705 -color=red,shape=square,flag=0,i=53810,u=0.964138306044566,v=0.4241014236028319,w=0.5288574667285163,x=4.780194606008348 -color=yellow,shape=square,flag=1,i=53817,u=0.565635480367983,v=0.8704653766551137,w=0.4973676075069901,x=5.8204865981743685 -color=blue,shape=circle,flag=1,i=53827,u=0.34908840275893527,v=0.5179528026928115,w=0.48140705231662767,x=4.860777277169732 -color=yellow,shape=square,flag=1,i=53835,u=0.10507907315420106,v=0.0007109695568577878,w=0.4922016811946543,x=5.836957315329459 -color=red,shape=circle,flag=1,i=53843,u=0.42044755874971507,v=0.3210808861558468,w=0.4996128360671105,x=6.604429307955042 -color=blue,shape=triangle,flag=0,i=53860,u=0.405274913883538,v=0.9975527859615919,w=0.47049502937321885,x=6.417363687440029 -color=blue,shape=square,flag=1,i=53863,u=0.88346768840092,v=0.8838828523547749,w=0.5209974150890856,x=6.272164759081348 -color=red,shape=square,flag=0,i=53866,u=0.24774929573044369,v=0.7029593322064707,w=0.5152669699524176,x=5.195079854140742 -color=red,shape=triangle,flag=1,i=53869,u=0.9935353142906873,v=0.142579247897212,w=0.5106771319334639,x=5.444897893078017 -color=green,shape=circle,flag=0,i=53873,u=0.8682771446512328,v=0.2466008572375623,w=0.5085008460973088,x=4.134816763927122 -color=red,shape=triangle,flag=1,i=53903,u=0.0417837627871912,v=0.8544738543752746,w=0.5097579661620304,x=6.503285475394995 -color=red,shape=square,flag=1,i=53908,u=0.254612181128988,v=0.7919180344301464,w=0.5225309978797998,x=5.028268149079994 -color=orange,shape=circle,flag=0,i=53924,u=0.6330475778581115,v=0.998475130432018,w=0.5014512347016831,x=7.461311238284132 -color=green,shape=triangle,flag=0,i=53929,u=0.20542197996154754,v=0.9883916746417903,w=0.5131160034219836,x=5.504788980700801 -color=red,shape=circle,flag=1,i=53939,u=0.7714809149922723,v=0.7469712349863759,w=0.5090878532311098,x=5.905824916190011 -color=red,shape=circle,flag=0,i=53941,u=0.9539246515732512,v=0.9995384958625388,w=0.5115435117396863,x=6.238837197673072 -color=yellow,shape=circle,flag=1,i=53950,u=0.16863623405708605,v=0.8500771517127843,w=0.504955747996841,x=6.428143152605753 -color=red,shape=circle,flag=0,i=53956,u=0.8864290977691268,v=0.8279829613181919,w=0.5087521850055658,x=2.849052445007865 -color=blue,shape=triangle,flag=1,i=53968,u=0.12066366003229945,v=0.6913183985162518,w=0.4754819404248616,x=4.859523758020624 -color=purple,shape=triangle,flag=0,i=53969,u=0.7906059108618957,v=0.3675018760374894,w=0.4934992714294153,x=4.32890628174515 -color=red,shape=circle,flag=1,i=53974,u=0.4955425961672869,v=0.4443882860346085,w=0.5056892565205361,x=4.165998830530639 -color=red,shape=triangle,flag=0,i=53986,u=0.6668311049269761,v=0.24200514606006396,w=0.5108715503568901,x=6.3833822487873695 -color=red,shape=square,flag=0,i=53994,u=0.10800887067401232,v=0.7569626287163034,w=0.5307660611121297,x=4.26824794541685 -color=purple,shape=circle,flag=0,i=53996,u=0.08752767189934352,v=0.5511965878076084,w=0.47916876612626685,x=6.509316389088983 -color=purple,shape=square,flag=0,i=54002,u=0.2789941535351438,v=0.9319339117099625,w=0.5097019006700386,x=5.9798739676589845 -color=red,shape=triangle,flag=0,i=54012,u=0.8345082860853451,v=0.4179764553333968,w=0.5269146516236533,x=6.864484717771276 -color=red,shape=square,flag=1,i=54013,u=0.9491144634945626,v=0.7621112475028795,w=0.5332520907479015,x=4.388301774638622 -color=yellow,shape=triangle,flag=1,i=54041,u=0.7230902638375496,v=0.08437511339144799,w=0.4972306924507012,x=3.4142817598659043 -color=red,shape=circle,flag=1,i=54050,u=0.18995478119414777,v=0.14879476624196236,w=0.4998992043066113,x=2.5810167412681726 -color=red,shape=circle,flag=0,i=54061,u=0.2491793966332707,v=0.20804943966535303,w=0.4988335601325387,x=4.098066625603907 -color=red,shape=triangle,flag=0,i=54067,u=0.6228668840765779,v=0.9135500394213574,w=0.5223329798324069,x=5.783153356283957 -color=green,shape=square,flag=0,i=54076,u=0.23849768154569584,v=0.17328522232309207,w=0.5081790134619015,x=6.252168083218025 -color=green,shape=circle,flag=0,i=54084,u=0.414321460415063,v=0.9651694664754853,w=0.5056045333529777,x=2.409679215791203 -color=red,shape=square,flag=0,i=54098,u=0.6343206916621129,v=0.5981898159489216,w=0.5369018644914485,x=3.681971461097613 -color=blue,shape=triangle,flag=0,i=54112,u=0.700617127347313,v=0.3137516432711571,w=0.4786212022287465,x=5.531785479928818 -color=blue,shape=square,flag=0,i=54141,u=0.34908693292224724,v=0.15605048233966923,w=0.5155216268127413,x=4.7536894652426644 -color=green,shape=square,flag=0,i=54164,u=0.4978177033542378,v=0.36864351427063813,w=0.5088662785366886,x=3.3946087933985982 -color=purple,shape=triangle,flag=0,i=54165,u=0.4823345660859609,v=0.4339435241650227,w=0.4966658912054024,x=7.244160447208348 -color=red,shape=circle,flag=1,i=54169,u=0.7778160951427734,v=0.7128511887786196,w=0.5204318295919914,x=2.6504079688494886 -color=yellow,shape=square,flag=1,i=54170,u=0.25551628884221045,v=0.7592248875502413,w=0.49378170743512373,x=5.304759077576299 -color=yellow,shape=square,flag=1,i=54171,u=0.853622259205767,v=0.39804044140495753,w=0.4970022667226532,x=5.6936059209304135 -color=red,shape=square,flag=0,i=54184,u=0.13857295136544323,v=0.15635585931005902,w=0.5360771564634886,x=4.867330183520015 -color=red,shape=circle,flag=0,i=54186,u=0.9673658593119613,v=1.0451821155548664,w=0.5229923818064347,x=6.950140295239923 -color=purple,shape=triangle,flag=0,i=54191,u=0.9110876197948057,v=0.537068970516768,w=0.49858273655801005,x=6.4228667834720525 -color=yellow,shape=square,flag=1,i=54210,u=0.29733161997679036,v=0.41907120074265025,w=0.49883577976743254,x=6.939327349112527 -color=blue,shape=square,flag=0,i=54214,u=0.7722959662108736,v=0.9980012276147741,w=0.528609477304339,x=3.639299837632295 -color=red,shape=triangle,flag=0,i=54217,u=0.1634861686411484,v=0.33120837760256094,w=0.526744101766661,x=6.4919450728932775 -color=red,shape=triangle,flag=0,i=54220,u=0.3519224403652488,v=0.32008494980496593,w=0.531310657963342,x=4.048240560651588 -color=blue,shape=square,flag=1,i=54227,u=0.976602396487405,v=0.8842595703606668,w=0.5289619584948578,x=4.843158687731266 -color=red,shape=triangle,flag=0,i=54237,u=0.6460095812313906,v=0.8544900861009376,w=0.521158482879284,x=4.022131751280413 -color=red,shape=square,flag=0,i=54254,u=0.905173553936471,v=0.5355582083568032,w=0.5393257506448982,x=4.255180427409536 -color=green,shape=triangle,flag=0,i=54274,u=0.3876576931416468,v=0.3918596665178963,w=0.5132365830335854,x=5.784765127245741 -color=blue,shape=circle,flag=0,i=54285,u=0.852766370520137,v=0.8135878645805505,w=0.4851581296740543,x=3.759177559170018 -color=red,shape=circle,flag=1,i=54286,u=0.3995101891937829,v=0.3733543220280349,w=0.540102136343489,x=5.423881521985339 -color=purple,shape=square,flag=0,i=54289,u=0.08869490426013016,v=0.878807563006648,w=0.5097486539846641,x=4.036375095266521 -color=red,shape=square,flag=0,i=54290,u=0.5206101225107433,v=0.8711000701138165,w=0.5360211371635281,x=4.857617416535469 -color=blue,shape=square,flag=1,i=54295,u=0.08819930606664927,v=0.5197551678746145,w=0.5289568825254514,x=7.3411078001010575 -color=red,shape=triangle,flag=0,i=54331,u=0.564201189521744,v=0.3152180529689288,w=0.5170213520004779,x=7.1335073634844335 -color=green,shape=triangle,flag=0,i=54332,u=0.06632998688651393,v=0.4031212517185745,w=0.5104869141912932,x=5.410769969133124 -color=purple,shape=circle,flag=0,i=54335,u=0.6431193383945193,v=0.7816474893411354,w=0.48065553706385544,x=4.356718054747709 -color=blue,shape=square,flag=1,i=54337,u=0.5163838002924002,v=0.36704452192662873,w=0.5249656443446242,x=3.9971352960083064 -color=green,shape=triangle,flag=0,i=54359,u=0.587899431669839,v=0.5834593234099636,w=0.5079504802221093,x=7.6908518425868495 -color=red,shape=triangle,flag=0,i=54370,u=0.07939613383519628,v=0.792382271979842,w=0.5068197608207315,x=3.7796059916196634 -color=yellow,shape=circle,flag=1,i=54375,u=0.28039897289684146,v=0.878319192775941,w=0.5087256947812533,x=3.1654664532423413 -color=blue,shape=circle,flag=0,i=54379,u=0.887833045983946,v=0.05235560575569076,w=0.48924670117002356,x=1.8758586365535759 -color=red,shape=triangle,flag=0,i=54383,u=0.5719263429762795,v=0.49508855878960933,w=0.5176344236668424,x=5.105277973154455 -color=yellow,shape=square,flag=1,i=54389,u=0.70243282572162,v=0.12208141892313373,w=0.510065577587627,x=4.869449203773317 -color=red,shape=triangle,flag=0,i=54391,u=0.015467589697611306,v=0.10639995635503474,w=0.513416123035257,x=5.20393222720596 -color=red,shape=square,flag=0,i=54423,u=0.15564986578484818,v=0.2888005527864398,w=0.5245288466574893,x=4.88596218353195 -color=yellow,shape=triangle,flag=1,i=54426,u=0.2674211987634295,v=0.6375640400393053,w=0.5042841168223927,x=6.563419460136988 -color=yellow,shape=circle,flag=1,i=54433,u=0.9174633626426539,v=0.23054425107300924,w=0.5081487367676373,x=3.3496674028300455 -color=red,shape=triangle,flag=1,i=54435,u=0.12188863469673472,v=0.7585169862504959,w=0.5137119149857992,x=5.581951672769995 -color=yellow,shape=square,flag=1,i=54436,u=0.5268161165014636,v=0.8785588662666121,w=0.5058773791931063,x=7.019185838783636 -color=red,shape=circle,flag=0,i=54445,u=0.39670442231034553,v=0.4098947862552379,w=0.5288957675147329,x=5.261542939867193 -color=blue,shape=square,flag=1,i=54465,u=0.8312166718564842,v=0.033317195606369254,w=0.5235051533411317,x=4.008303806634128 -color=purple,shape=triangle,flag=0,i=54472,u=0.15614161875046106,v=0.23516881335415285,w=0.4911661823426195,x=7.462777545802294 -color=red,shape=circle,flag=0,i=54490,u=0.05470827588117133,v=0.1261958848741258,w=0.5217194345166385,x=6.025527306040547 -color=blue,shape=square,flag=0,i=54498,u=0.2902590841835594,v=0.14374611197559284,w=0.5214587937763869,x=4.949951019871169 -color=red,shape=triangle,flag=0,i=54515,u=0.8465006783703279,v=0.9724051160762706,w=0.5232041443742209,x=4.866180450160544 -color=red,shape=circle,flag=1,i=54519,u=0.12892764519698774,v=0.12466340898629369,w=0.532539575568873,x=4.3457239674645365 -color=red,shape=square,flag=0,i=54533,u=0.08875167500584946,v=0.4596281162088727,w=0.5147630150665891,x=6.477057451534829 -color=red,shape=square,flag=0,i=54555,u=0.8857264627523018,v=0.04487754119375453,w=0.5224105898494541,x=4.208046451574389 -color=blue,shape=square,flag=0,i=54571,u=0.17487432111811152,v=0.624671925563803,w=0.5152628327989822,x=3.3802622855485285 -color=blue,shape=square,flag=1,i=54572,u=0.30966946995538036,v=0.899157442548078,w=0.5149934889102513,x=7.66539587702979 -color=red,shape=circle,flag=0,i=54575,u=0.21710396974197987,v=0.24640589580162442,w=0.5267483181717957,x=4.994489514933451 -color=red,shape=square,flag=1,i=54579,u=0.7871071803483068,v=0.6012720122300076,w=0.5247264331152747,x=5.034650919661394 -color=blue,shape=triangle,flag=0,i=54585,u=0.5452237848214723,v=0.537739934474744,w=0.48372824761253064,x=4.821167468295924 -color=red,shape=square,flag=0,i=54588,u=0.4123024496965355,v=0.7930259021034676,w=0.5315900258756656,x=4.486811032597063 -color=orange,shape=circle,flag=1,i=54593,u=0.6209846653766937,v=0.7532947521450949,w=0.5081633322025949,x=4.017462592550577 -color=red,shape=square,flag=1,i=54604,u=0.09878338104963091,v=0.09461200210241949,w=0.5368662592636505,x=5.8713897370150745 -color=red,shape=triangle,flag=1,i=54609,u=0.8078485867658558,v=0.3146397951164116,w=0.5180359037837303,x=4.419055740348531 -color=green,shape=triangle,flag=0,i=54616,u=0.008815582121518895,v=0.3351474610360117,w=0.5107505128564379,x=5.41150822475658 -color=red,shape=triangle,flag=1,i=54621,u=0.8757208482717299,v=0.7224311856730294,w=0.5183730449717274,x=3.2314847145299903 -color=red,shape=square,flag=0,i=54643,u=0.0016769682856588863,v=0.4062416143816475,w=0.5328763050189145,x=5.971581308961723 -color=yellow,shape=square,flag=1,i=54644,u=0.5547690556030465,v=0.383155411082328,w=0.5065232862262112,x=5.849401582746474 -color=yellow,shape=triangle,flag=1,i=54652,u=0.1845511835999143,v=0.1929059079085862,w=0.5151953137405589,x=5.049827624304032 -color=yellow,shape=square,flag=1,i=54658,u=0.26779702507825665,v=0.7162722527037098,w=0.5065254034827779,x=4.749739778942277 -color=red,shape=square,flag=0,i=54668,u=0.783395435356002,v=0.626299514823744,w=0.5295158987683225,x=3.828796123066978 -color=yellow,shape=square,flag=0,i=54674,u=0.498456045578728,v=0.539046645596661,w=0.516895643658785,x=5.942635508464914 -color=red,shape=triangle,flag=0,i=54680,u=0.19669769955250094,v=0.9354873908418636,w=0.5106611097235272,x=2.945552185578556 -color=yellow,shape=square,flag=1,i=54691,u=0.6091834979360137,v=0.2566723873307417,w=0.5161050534577085,x=5.031674540290492 -color=red,shape=circle,flag=1,i=54702,u=0.2893717897186381,v=0.3317770544966995,w=0.5109108042365773,x=6.091937588417157 -color=red,shape=square,flag=0,i=54711,u=0.14973294830107453,v=0.5899725236893825,w=0.5280524169581828,x=5.480189238550888 -color=red,shape=triangle,flag=0,i=54727,u=0.3782523515887105,v=0.00932837890979521,w=0.5120040412855404,x=4.96518872246986 -color=red,shape=triangle,flag=1,i=54742,u=0.22631139194355598,v=0.5040830302389918,w=0.5190608474678889,x=4.912829498689536 -color=blue,shape=triangle,flag=1,i=54754,u=0.7280619739056884,v=0.05621086289650323,w=0.49474704979810236,x=5.974094841247102 -color=green,shape=circle,flag=0,i=54791,u=0.04855959877458027,v=0.31630970368507483,w=0.4795217024774788,x=3.7647295408310817 -color=red,shape=triangle,flag=1,i=54801,u=0.5314933478013397,v=0.5129823261270892,w=0.5109384418975104,x=4.844811478344437 -color=purple,shape=circle,flag=0,i=54803,u=0.2730300791176786,v=0.03093712240566171,w=0.4798891709464476,x=4.490506813960657 -color=red,shape=circle,flag=0,i=54806,u=0.6733556323940694,v=0.5972087074567061,w=0.49581701424235325,x=6.015281164265031 -color=blue,shape=square,flag=1,i=54808,u=0.7952018617346195,v=0.6053258258742458,w=0.5085443739195697,x=5.892957552739641 -color=red,shape=triangle,flag=0,i=54810,u=0.878253352719066,v=0.32921449458391117,w=0.5060746422906507,x=3.0903805828575037 -color=red,shape=triangle,flag=0,i=54824,u=0.07300198333997798,v=0.12108880039320902,w=0.5121110563062768,x=4.810188031513911 -color=yellow,shape=square,flag=0,i=54826,u=0.5738360121336274,v=0.6229060874048589,w=0.5111293923421002,x=6.267278978817212 -color=green,shape=square,flag=0,i=54854,u=0.07190403045510674,v=0.5006125758409876,w=0.5061714198788955,x=6.057752870387191 -color=blue,shape=circle,flag=1,i=54877,u=0.33715041809877655,v=0.1636174722134922,w=0.5008539493361065,x=3.1961637878420497 -color=red,shape=square,flag=0,i=54900,u=0.30049595174919064,v=0.06930424937144253,w=0.5040792478563368,x=5.438021025802396 -color=blue,shape=triangle,flag=0,i=54906,u=0.5397242441468856,v=0.17376729124948875,w=0.48467063448593534,x=4.478741052031034 -color=red,shape=circle,flag=0,i=54913,u=0.5008917079236528,v=0.43574891231807084,w=0.49437554516039545,x=4.552431345082269 -color=yellow,shape=circle,flag=1,i=54918,u=0.612034983774875,v=0.5970370650250671,w=0.49513768015357135,x=4.429047871920659 -color=red,shape=triangle,flag=1,i=54927,u=0.38401515881057513,v=0.5375651145934137,w=0.512904194784432,x=3.0230779863388797 -color=green,shape=square,flag=0,i=54928,u=0.7667770742608941,v=0.6711749608749514,w=0.5066147320570372,x=5.703618968829413 -color=red,shape=square,flag=0,i=54933,u=0.26538835653318327,v=0.4659559661346837,w=0.5016039802794988,x=2.567129681994347 -color=green,shape=square,flag=1,i=54938,u=0.7267687245426453,v=0.5261619207171709,w=0.5112347025148704,x=8.921094681787602 -color=red,shape=circle,flag=0,i=54948,u=0.16719649952006788,v=0.13547028822215385,w=0.47957745854464096,x=5.673700584327684 -color=red,shape=triangle,flag=0,i=54958,u=0.4325448552435456,v=0.28455732112813403,w=0.5103299684146705,x=6.328857259586061 -color=red,shape=square,flag=0,i=54963,u=0.9362364382138753,v=0.6019020246619172,w=0.504269302409123,x=5.311025339338761 -color=blue,shape=square,flag=0,i=54971,u=0.11826414749280811,v=0.5529619954954097,w=0.501050181029679,x=4.68420076737738 -color=purple,shape=triangle,flag=0,i=54987,u=0.5274872947345021,v=0.9884402473965985,w=0.49438975781752975,x=3.8029186660774226 -color=green,shape=square,flag=0,i=55005,u=0.0748748386314243,v=0.7397130215942403,w=0.5132750513808505,x=4.878370506934766 -color=purple,shape=triangle,flag=0,i=55029,u=0.4600608414941606,v=0.21657853582503905,w=0.4901631665848423,x=5.580631059968616 -color=blue,shape=triangle,flag=1,i=55082,u=0.76329867593739,v=0.36868460283998494,w=0.47844635074027714,x=3.6905895397115516 -color=red,shape=circle,flag=1,i=55085,u=0.06602714113251362,v=0.020030421901805325,w=0.4791716079684297,x=7.752086928983793 -color=red,shape=triangle,flag=1,i=55094,u=0.0707028839327134,v=0.7635155934574812,w=0.5103980648847103,x=6.235629281818734 -color=red,shape=circle,flag=0,i=55100,u=0.09152091750208424,v=0.05543803075781528,w=0.48312870860215307,x=7.150819586602147 -color=yellow,shape=square,flag=0,i=55101,u=0.919191895577424,v=0.8295859952435531,w=0.5109429149296737,x=5.820284236639371 -color=blue,shape=square,flag=0,i=55124,u=0.22272873596803544,v=0.24138434018389743,w=0.518645518154923,x=4.247015482469394 -color=orange,shape=triangle,flag=1,i=55135,u=0.06388160709174939,v=0.23908466406508555,w=0.5048813287217734,x=5.7077317134792205 -color=blue,shape=square,flag=0,i=55143,u=0.7054189258248026,v=0.637609256323884,w=0.5175906051033486,x=3.94582893615266 -color=red,shape=circle,flag=0,i=55149,u=0.703973803251823,v=0.6947288347723674,w=0.49084500664170255,x=4.551397811405671 -color=red,shape=triangle,flag=0,i=55150,u=0.8626501161550487,v=0.7018378516107286,w=0.5105989574604536,x=3.349114578194707 -color=red,shape=triangle,flag=0,i=55152,u=0.028919239340594927,v=0.5643833415406265,w=0.5086122992007506,x=3.755066195459468 -color=purple,shape=triangle,flag=1,i=55160,u=0.503057970285384,v=0.7009260562516104,w=0.5050273021517575,x=4.992063727962121 -color=purple,shape=square,flag=0,i=55172,u=0.44347643006823345,v=0.6758886496866708,w=0.4940371977711606,x=4.142874556417575 -color=red,shape=triangle,flag=0,i=55180,u=0.8984858044483035,v=0.8531665272910918,w=0.5095340075539027,x=5.457822338663282 -color=red,shape=square,flag=0,i=55181,u=0.49398940985685225,v=0.5085582545001526,w=0.5010870263631043,x=6.450638502264784 -color=red,shape=triangle,flag=0,i=55215,u=0.4431206317548032,v=0.9628752521414382,w=0.5045272373912738,x=4.561468567472974 -color=yellow,shape=triangle,flag=0,i=55222,u=0.6005669475974964,v=0.7296625756779209,w=0.49427084710281965,x=4.355947219404446 -color=green,shape=square,flag=0,i=55223,u=0.22618766365175058,v=0.8088554614292689,w=0.5131254106170233,x=7.641072149513505 -color=yellow,shape=square,flag=0,i=55243,u=0.399725540602879,v=0.14194013668059835,w=0.5096808521092445,x=4.586658893124853 -color=purple,shape=triangle,flag=0,i=55245,u=0.18786744216200502,v=0.20737220026144143,w=0.4956183985078717,x=4.758069786282985 -color=blue,shape=triangle,flag=0,i=55247,u=0.5435214601492427,v=0.30982708123901115,w=0.4894672980021366,x=3.0710666568980773 -color=red,shape=triangle,flag=0,i=55259,u=0.43293535417692786,v=0.7120110825377013,w=0.49604357486040584,x=5.632933107247049 -color=red,shape=square,flag=0,i=55273,u=0.7577378760965514,v=0.5256070458979509,w=0.4791069248324443,x=4.380542667977143 -color=red,shape=circle,flag=0,i=55286,u=0.6708664560419884,v=0.5954096292016795,w=0.4676398215737821,x=3.8516263858082733 -color=red,shape=triangle,flag=0,i=55290,u=0.7659146528706552,v=0.762772763553792,w=0.5043443289321522,x=4.095123944519207 -color=green,shape=triangle,flag=0,i=55291,u=0.7109134057124564,v=0.15187738369327775,w=0.5100097726260219,x=5.522141045560848 -color=red,shape=circle,flag=0,i=55306,u=0.39005330647211667,v=0.3302482350949184,w=0.46560280550051075,x=3.9421432456617516 -color=orange,shape=triangle,flag=1,i=55323,u=0.9098686012935904,v=0.6783954193618972,w=0.5151313424146066,x=4.768731677173737 -color=red,shape=circle,flag=0,i=55324,u=0.10409608577871055,v=0.1902664743162913,w=0.4701527872707176,x=3.3300033484125944 -color=red,shape=circle,flag=0,i=55344,u=0.2949441000241585,v=0.3470963649118102,w=0.4778404541602554,x=5.556800434911691 -color=yellow,shape=square,flag=1,i=55352,u=0.6087824980326788,v=0.7697094995557414,w=0.5160134271069344,x=6.646393748457489 -color=red,shape=triangle,flag=0,i=55361,u=0.7318489001096495,v=0.4738975746105495,w=0.5135155478638224,x=4.889336294350405 -color=purple,shape=circle,flag=0,i=55404,u=0.7936605132922776,v=0.8476399761563178,w=0.5030183819674996,x=4.32454077466622 -color=red,shape=square,flag=0,i=55408,u=0.422784320473623,v=0.4200749652687161,w=0.46988200178668765,x=5.246554730320105 -color=red,shape=triangle,flag=0,i=55410,u=0.8968080761181384,v=0.6244745650698577,w=0.5167763405420956,x=6.391722352020554 -color=red,shape=triangle,flag=0,i=55420,u=0.015979341292861937,v=0.23922052296373097,w=0.5123591846025574,x=4.233901250365271 -color=red,shape=circle,flag=0,i=55427,u=0.6074917582395695,v=0.578917534323402,w=0.4822399753848357,x=3.8000481578793264 -color=green,shape=triangle,flag=0,i=55428,u=0.17073939879776,v=0.8657342539490759,w=0.5002172019238377,x=5.227842650174012 -color=purple,shape=circle,flag=0,i=55429,u=0.19597158721524732,v=0.5993437214659064,w=0.49814456864038525,x=3.9780976530522945 -color=red,shape=square,flag=0,i=55440,u=0.696007371916118,v=0.5708905041377343,w=0.4715038386045447,x=2.894791365740644 -color=red,shape=triangle,flag=1,i=55450,u=0.28837892193430104,v=0.05026172153923969,w=0.5121781302224944,x=3.3248860978053414 -color=red,shape=circle,flag=1,i=55458,u=0.1212165116190187,v=0.10483351567899724,w=0.49061845285656874,x=5.1395393630932835 -color=red,shape=circle,flag=0,i=55463,u=0.7260734009077561,v=0.7400802948875371,w=0.4923503029273603,x=4.110028267194617 -color=blue,shape=circle,flag=1,i=55473,u=0.4112702874032924,v=0.5100316200910434,w=0.4803498370952482,x=5.148836539738202 -color=blue,shape=square,flag=0,i=55479,u=0.19315338993612674,v=0.06290539413366214,w=0.507616604214517,x=5.469641715962468 -color=yellow,shape=square,flag=1,i=55491,u=0.0025440267883102274,v=0.05474106287787284,w=0.5102729153751984,x=3.526301273728043 -color=red,shape=triangle,flag=1,i=55516,u=0.8057550214518604,v=0.6530293954985826,w=0.5095020226271539,x=4.271759727442382 -color=red,shape=triangle,flag=0,i=55530,u=0.9457644760390884,v=0.9616505356071466,w=0.5090762911413765,x=3.981889322777672 -color=red,shape=circle,flag=1,i=55532,u=0.514083307970093,v=0.4485718972021694,w=0.4870195930639722,x=6.166190923992491 -color=red,shape=circle,flag=0,i=55545,u=0.07372385318757546,v=-0.02582775087576042,w=0.4833545057425041,x=5.024135036175388 -color=blue,shape=circle,flag=0,i=55555,u=0.8325779464249566,v=0.5004428332569696,w=0.4906098473141438,x=5.023685053968186 -color=blue,shape=square,flag=1,i=55566,u=0.41249599112419333,v=0.2571885770323481,w=0.5123988308126495,x=3.639941887422522 -color=blue,shape=triangle,flag=1,i=55570,u=0.6209067098681805,v=0.8320092553387912,w=0.47037697831630704,x=6.102916184689209 -color=red,shape=triangle,flag=0,i=55576,u=0.5492888305915383,v=0.3608440713737123,w=0.5021675668602483,x=3.7844584467280735 -color=blue,shape=square,flag=1,i=55582,u=0.8028839804644307,v=0.5603697890990146,w=0.5154500321453434,x=2.931211310051449 -color=red,shape=square,flag=1,i=55584,u=0.8565413137049229,v=0.8386116780970948,w=0.43626706140877497,x=6.301179901836098 -color=red,shape=square,flag=0,i=55618,u=0.5712787047695906,v=0.8957119536381241,w=0.43357485487313535,x=6.243071445465681 -color=red,shape=triangle,flag=0,i=55643,u=0.5118396963435251,v=0.9606779488440411,w=0.49522090409337827,x=3.945093591841642 -color=green,shape=triangle,flag=0,i=55648,u=0.09041696723310955,v=0.7755113333504334,w=0.49816042300026203,x=5.070909974229001 -color=red,shape=triangle,flag=0,i=55669,u=0.9332677721561746,v=0.9679994498357146,w=0.49483780003122824,x=3.244585209763837 -color=orange,shape=triangle,flag=0,i=55687,u=0.27267781031546623,v=0.7813464180011345,w=0.4996375454783771,x=4.661784753828535 -color=red,shape=square,flag=0,i=55708,u=0.9839258939427176,v=0.16332820343543863,w=0.4463957263096923,x=4.539950669868682 -color=yellow,shape=square,flag=1,i=55717,u=0.03870934074215293,v=0.5809797670449286,w=0.5140857391224181,x=3.785908532353401 -color=blue,shape=square,flag=1,i=55721,u=0.8066345310251971,v=0.10183314005794164,w=0.5187219015873368,x=5.37740829587483 -color=red,shape=square,flag=1,i=55732,u=0.6527689711674508,v=0.30385700532582105,w=0.4581006689816416,x=5.862767311886287 -color=orange,shape=triangle,flag=1,i=55748,u=0.6263559570955815,v=0.1516116880262247,w=0.49629424300074565,x=6.307471501377414 -color=purple,shape=triangle,flag=0,i=55757,u=0.26224310140155405,v=0.635012274594874,w=0.47849105401466574,x=4.159639149256694 -color=green,shape=circle,flag=0,i=55770,u=0.5918202914685192,v=0.5583787765896122,w=0.48952164277907384,x=6.0478759847039285 -color=red,shape=square,flag=0,i=55774,u=0.3996382178437635,v=0.714745942996061,w=0.46763429724619965,x=5.6225531919251095 -color=yellow,shape=square,flag=1,i=55779,u=0.882965353298848,v=0.643699074091605,w=0.519441483130259,x=5.361371000809978 -color=red,shape=square,flag=0,i=55784,u=0.057478735463183606,v=0.5753843191107093,w=0.4687520476034903,x=4.296129741408247 -color=yellow,shape=triangle,flag=1,i=55785,u=0.2359793854714849,v=0.8817194363273055,w=0.5015346733275015,x=5.827126581489421 -color=red,shape=square,flag=0,i=55796,u=0.02338747915938122,v=0.0653181470290759,w=0.47194211901037203,x=4.9959406342969155 -color=yellow,shape=circle,flag=1,i=55848,u=0.053438861570863194,v=0.2837359939899178,w=0.489990232439038,x=5.165439129405239 -color=green,shape=square,flag=0,i=55854,u=0.91784778624634,v=0.6904928289106833,w=0.5271666045798626,x=5.301754547519857 -color=yellow,shape=triangle,flag=0,i=55856,u=0.7101012751717551,v=0.9698261438645679,w=0.5025408896588757,x=4.205495079028961 -color=red,shape=circle,flag=0,i=55863,u=0.07286248453107336,v=0.08868289521299681,w=0.4788519143641167,x=3.5217669605766866 -color=green,shape=circle,flag=0,i=55876,u=0.9999075930926061,v=0.7951411545290447,w=0.4968959435862534,x=5.600737846731193 -color=red,shape=circle,flag=1,i=55879,u=0.3323627366421906,v=0.39724005213377805,w=0.4719396091598217,x=5.850277301902327 -color=red,shape=circle,flag=0,i=55907,u=0.028554771245874244,v=0.039705377504417536,w=0.4667803467199131,x=5.919590958570892 -color=blue,shape=square,flag=0,i=55909,u=0.7793907641777834,v=0.4630823003814567,w=0.516290481069534,x=4.971497033431556 -color=yellow,shape=square,flag=1,i=55918,u=0.13054808563653153,v=0.34384249697053704,w=0.5167132668626603,x=5.85992965274032 -color=green,shape=triangle,flag=1,i=55924,u=0.7963630493773972,v=0.7764018178252802,w=0.4942799480085401,x=6.605681724956578 -color=red,shape=square,flag=0,i=55927,u=0.9533081418342814,v=0.9845886508421707,w=0.49078148662281984,x=3.9105553977649588 -color=green,shape=triangle,flag=0,i=55938,u=0.8769501498223685,v=0.8376004959939759,w=0.4960456476893017,x=6.56085861617322 -color=green,shape=circle,flag=0,i=55941,u=0.30964490361119745,v=0.35207661176726923,w=0.5070406171765169,x=6.322950174413548 -color=yellow,shape=triangle,flag=1,i=55948,u=0.8123442020868297,v=0.6412668596562257,w=0.500873812975386,x=4.880819474499927 -color=red,shape=square,flag=0,i=55972,u=0.9796185838306837,v=0.9906595820809593,w=0.49670143026297237,x=4.948776264216938 -color=yellow,shape=triangle,flag=1,i=55980,u=0.25362233277876967,v=0.4482485856938603,w=0.4971388559208474,x=3.7560884705481747 -color=red,shape=triangle,flag=0,i=55989,u=0.3617971523882211,v=0.880547472991682,w=0.49733934930192464,x=5.291759060482392 -color=yellow,shape=circle,flag=1,i=55992,u=0.3818801474606376,v=0.8254638029404613,w=0.48590292532119767,x=5.973752056658978 -color=yellow,shape=square,flag=1,i=55995,u=0.9705535495907963,v=0.30350852723439314,w=0.5144716357279938,x=4.440266882014721 -color=red,shape=square,flag=0,i=56010,u=0.45913899381354406,v=0.8157811720434384,w=0.5068188383213508,x=5.728965401521253 -color=red,shape=square,flag=0,i=56013,u=0.8499367721851534,v=0.27894392008453595,w=0.5051553370073166,x=6.164712923395321 -color=purple,shape=triangle,flag=0,i=56037,u=0.3520135214352045,v=0.31712824656085803,w=0.48148499614041457,x=5.87369638902408 -color=purple,shape=square,flag=0,i=56045,u=0.6924422807264176,v=0.5238445684222774,w=0.4931401493487204,x=4.964424425635917 -color=red,shape=circle,flag=0,i=56065,u=0.5291122289148481,v=0.557221330086876,w=0.47699308366800103,x=5.190422655927031 -color=red,shape=circle,flag=0,i=56081,u=0.14743580029379144,v=0.19157246628102145,w=0.47021107319489885,x=3.9791016101032 -color=orange,shape=square,flag=1,i=56084,u=0.0470860317861852,v=0.08913803250375951,w=0.48153705749039766,x=4.701231440439263 -color=green,shape=circle,flag=0,i=56106,u=0.551224271070333,v=0.23271973109026156,w=0.499196492302761,x=5.161238750091768 -color=green,shape=square,flag=0,i=56110,u=0.6020030334322408,v=0.9517388114578516,w=0.5351881627117776,x=5.384521025243752 -color=red,shape=circle,flag=1,i=56119,u=0.5019221249749239,v=0.4731304899660218,w=0.46443583678984746,x=5.803288960614924 -color=yellow,shape=square,flag=1,i=56135,u=0.9018836471858397,v=0.7211590153593105,w=0.513203152737238,x=5.369196632319536 -color=red,shape=circle,flag=0,i=56137,u=0.3599432568767288,v=0.3306088539379391,w=0.46781120117646824,x=3.5266002715749245 -color=blue,shape=triangle,flag=1,i=56147,u=0.7724092517817623,v=0.8469990918582153,w=0.4610607522407421,x=5.5726950123343455 -color=red,shape=square,flag=1,i=56150,u=0.9317847378493062,v=0.906339948683953,w=0.4868930087667855,x=5.916312425647438 -color=red,shape=circle,flag=1,i=56154,u=0.4689612988400361,v=0.3734679509332499,w=0.4667566194941723,x=4.096156546146602 -color=red,shape=triangle,flag=0,i=56158,u=0.6775827621631926,v=0.6887802617936221,w=0.48372757521468257,x=6.072210893263811 -color=red,shape=circle,flag=1,i=56168,u=0.9502327595214659,v=0.9503902210948304,w=0.47099130612220075,x=5.4369083409897625 -color=red,shape=square,flag=1,i=56169,u=0.025922897186713256,v=0.6568704261491838,w=0.4866555082243846,x=3.871642450381844 -color=red,shape=square,flag=0,i=56193,u=0.3556025238324271,v=0.19445611896971127,w=0.48153393561919106,x=4.181191686311995 -color=blue,shape=square,flag=1,i=56200,u=0.6907062034941703,v=0.18385000999192347,w=0.5294009754698966,x=4.874109533787477 -color=red,shape=triangle,flag=0,i=56214,u=0.5836220016055733,v=0.6886458201977214,w=0.4910787214710552,x=5.911831869022606 -color=yellow,shape=square,flag=1,i=56223,u=0.8395099623387113,v=0.7661778468478677,w=0.5143395485409306,x=4.921271930929959 -color=green,shape=circle,flag=0,i=56239,u=0.13043451247655424,v=0.9926387162371304,w=0.5016382631712446,x=4.296273657523788 -color=blue,shape=square,flag=0,i=56253,u=0.892019364247622,v=0.6883949588983121,w=0.5240954993569905,x=3.849117023318049 -color=red,shape=circle,flag=0,i=56276,u=0.10237593390867661,v=0.009332569303519375,w=0.48308302663518365,x=3.797957581910026 -color=purple,shape=square,flag=0,i=56293,u=0.4423510378137281,v=0.6602641707640811,w=0.49475165894014145,x=4.250271651999045 -color=red,shape=square,flag=1,i=56295,u=0.035901721026623146,v=0.06208684894558103,w=0.4811180660331609,x=5.08786595608084 -color=red,shape=triangle,flag=0,i=56304,u=0.475278505152111,v=0.6300368516180012,w=0.47666186625274737,x=5.962182471623468 -color=yellow,shape=triangle,flag=0,i=56327,u=0.9825607881222167,v=0.6716370631949607,w=0.4971989507690275,x=5.311808345026688 -color=red,shape=triangle,flag=1,i=56333,u=0.4416813098236648,v=0.007612137993538437,w=0.4824728808559309,x=3.5925175826122207 -color=green,shape=square,flag=0,i=56335,u=0.4928813233685484,v=0.44175179736303394,w=0.513833052476633,x=6.040051723910193 -color=blue,shape=triangle,flag=0,i=56361,u=0.3860740201200319,v=0.9555767054915603,w=0.4565982286468696,x=4.108596171640287 -color=red,shape=triangle,flag=1,i=56364,u=0.0036050258267615876,v=0.9399580071261083,w=0.4791517385396412,x=4.998343359890288 -color=blue,shape=square,flag=1,i=56365,u=0.008174890287940495,v=0.4292433844364618,w=0.5278054152837448,x=5.903745938453992 -color=blue,shape=square,flag=1,i=56387,u=0.17294379957387085,v=0.7592373876625672,w=0.51484699011673,x=5.4099497576339575 -color=blue,shape=triangle,flag=0,i=56401,u=0.21249982428624348,v=0.9875464749685668,w=0.45337372459256964,x=5.259427443771463 -color=red,shape=circle,flag=1,i=56413,u=0.5275352921582073,v=0.4362477048131487,w=0.4775526021744573,x=3.0224781835694525 -color=purple,shape=circle,flag=0,i=56443,u=0.7292078370864499,v=0.9131430203424354,w=0.5016343168633657,x=6.532992270761079 -color=red,shape=triangle,flag=0,i=56457,u=0.08970938605945822,v=0.47686299599450144,w=0.49160104989408443,x=4.709479438939208 -color=blue,shape=square,flag=1,i=56459,u=0.8349053224300648,v=0.9466490126470953,w=0.5157413104081363,x=3.9539657304020692 -color=red,shape=circle,flag=0,i=56473,u=0.7338932145548156,v=0.6415923313232216,w=0.4831745752496531,x=4.271073181042245 -color=red,shape=square,flag=0,i=56492,u=0.5495964475302019,v=0.07347131140840091,w=0.4677965255376068,x=5.59013044342102 -color=green,shape=square,flag=0,i=56536,u=0.8107534537095848,v=0.09446807387302414,w=0.5257334875144043,x=4.780691710128859 -color=red,shape=square,flag=0,i=56537,u=0.30719905307363227,v=0.3298352740856826,w=0.4661478895233752,x=5.681649510225867 -color=red,shape=square,flag=0,i=56552,u=0.7678071632851629,v=0.4612159104758833,w=0.47570444575412274,x=5.161684307388276 -color=red,shape=square,flag=0,i=56568,u=0.028786675924196592,v=0.4856422295181674,w=0.476410489928568,x=5.081911534256035 -color=blue,shape=circle,flag=1,i=56573,u=0.7023788412762049,v=0.7914631958127581,w=0.49237490105138765,x=5.952259950409154 -color=red,shape=square,flag=1,i=56585,u=0.02749936714996104,v=0.8509857328609852,w=0.4639809122487109,x=4.97406088680667 -color=orange,shape=square,flag=0,i=56586,u=0.3854536327509306,v=0.18001284797279415,w=0.4808020104690101,x=5.181146944747667 -color=orange,shape=square,flag=0,i=56591,u=0.30507471609822634,v=0.7582234508798396,w=0.4779339786169748,x=5.147422435342539 -color=red,shape=circle,flag=0,i=56598,u=0.28903343040251384,v=0.29213655346318623,w=0.4865268017134947,x=5.92132059059805 -color=blue,shape=circle,flag=1,i=56617,u=0.04695354800936935,v=0.6425152243385953,w=0.4936125213980512,x=4.1763020576531495 -color=yellow,shape=circle,flag=1,i=56628,u=0.41164175726881913,v=0.5604421398634948,w=0.4983818762709919,x=5.187580583842933 -color=blue,shape=triangle,flag=1,i=56638,u=0.5733754175892306,v=0.4088410551277101,w=0.45314392294121913,x=5.521680822941849 -color=red,shape=square,flag=0,i=56641,u=0.8772444983691737,v=0.9330400578228586,w=0.46431956627578636,x=4.129574117926221 -color=red,shape=triangle,flag=1,i=56642,u=0.7956132660816322,v=0.06352767300677908,w=0.5058126580883646,x=5.930729856087858 -color=red,shape=triangle,flag=0,i=56651,u=0.15938196491812728,v=0.8231701416310142,w=0.5017963144497639,x=4.281361033745148 -color=red,shape=square,flag=0,i=56664,u=0.0906107258626494,v=0.2965946422551351,w=0.46545720696107185,x=5.574587696364536 -color=red,shape=square,flag=0,i=56675,u=0.4350346833944073,v=0.8251058719961641,w=0.4697759620192235,x=4.25994800673227 -color=yellow,shape=square,flag=0,i=56679,u=0.09071549503099097,v=0.6030104576807922,w=0.5303749901085183,x=5.789436954035075 -color=green,shape=square,flag=0,i=56691,u=0.2623304115693713,v=0.8692167890452746,w=0.5278381888601276,x=5.231196714676524 -color=red,shape=square,flag=0,i=56728,u=0.8265228034076931,v=0.2756747808382448,w=0.4775213175126215,x=5.348262191400402 -color=red,shape=triangle,flag=0,i=56730,u=0.11444329223125427,v=0.10092609807738806,w=0.5198100949826048,x=5.147965247632212 -color=red,shape=triangle,flag=1,i=56761,u=0.9226877392568987,v=0.5569729312214099,w=0.5164574681390561,x=5.3145474037736795 -color=yellow,shape=triangle,flag=1,i=56768,u=0.8577573056014351,v=0.4240808134972043,w=0.5143732653660601,x=3.410256536516419 -color=blue,shape=triangle,flag=1,i=56775,u=0.7103849580538455,v=0.627067107769321,w=0.45524479919427063,x=4.7423317732863 -color=green,shape=square,flag=0,i=56793,u=0.4305896462753718,v=0.30330627037423874,w=0.5239866021833908,x=3.1195884051528773 -color=green,shape=square,flag=0,i=56800,u=0.16880072940989221,v=0.423767426944905,w=0.526501492128006,x=4.975561025671241 -color=red,shape=triangle,flag=0,i=56824,u=0.6902062956497429,v=0.22233802607241515,w=0.5269841328438786,x=6.5025408278087236 -color=purple,shape=circle,flag=0,i=56830,u=0.8716189964351342,v=0.8482222162972167,w=0.49342512194980254,x=5.12646014192254 -color=red,shape=triangle,flag=0,i=56833,u=0.15307709151035487,v=0.10939470350347325,w=0.5231742195552982,x=4.432072889440078 -color=yellow,shape=triangle,flag=1,i=56851,u=0.2094533637488054,v=0.4598661695930325,w=0.5128926740646055,x=4.5216670549598 -color=blue,shape=triangle,flag=0,i=56868,u=0.8888754827007322,v=0.23370783367578984,w=0.4584574653147142,x=4.891265910645562 -color=purple,shape=square,flag=0,i=56882,u=0.28349543779278685,v=0.4550865872925278,w=0.507735244158975,x=3.82092076307304 -color=green,shape=triangle,flag=0,i=56883,u=0.5200463472803509,v=0.027328094014438253,w=0.4789202131261215,x=4.81002575128225 -color=red,shape=circle,flag=1,i=56886,u=0.39792133290042564,v=0.45019258935720663,w=0.472466648430075,x=5.453982301283424 -color=red,shape=circle,flag=0,i=56890,u=0.8050991905458178,v=0.7474642748848684,w=0.4697779205322726,x=6.072733542760872 -color=red,shape=square,flag=0,i=56893,u=0.421739812613543,v=0.28530057425095035,w=0.4959406944276449,x=3.396941877489479 -color=red,shape=triangle,flag=1,i=56902,u=0.5633974451409782,v=0.809683375886919,w=0.522995494066022,x=3.5359342803756824 -color=red,shape=triangle,flag=1,i=56922,u=0.6673346896452196,v=0.32499342283441834,w=0.5244168003137538,x=5.074393659408346 -color=green,shape=square,flag=0,i=56928,u=0.32857277286176967,v=0.33255534059463365,w=0.5169607688548151,x=2.566944453291659 -color=blue,shape=circle,flag=0,i=56929,u=0.9527921392004068,v=0.5456859654162112,w=0.5080747275824269,x=3.7892848890893944 -color=orange,shape=circle,flag=0,i=56930,u=0.8351770152013697,v=0.5712312164309754,w=0.5060167332680503,x=6.569894599761807 -color=yellow,shape=square,flag=1,i=56957,u=0.7983144929858307,v=0.5339720846840327,w=0.5307346506874707,x=6.165290611869111 -color=red,shape=circle,flag=0,i=56970,u=0.9645348672691165,v=0.9677780525296367,w=0.45749838713863294,x=7.621475926415006 -color=red,shape=square,flag=0,i=56986,u=0.4018434511701289,v=0.6576444371055434,w=0.4885995657012773,x=6.906668009315234 -color=red,shape=triangle,flag=0,i=56988,u=0.02749422557600889,v=0.7045721179591373,w=0.520403932703198,x=4.872474569039121 -color=purple,shape=triangle,flag=0,i=56993,u=0.5828964952744673,v=0.13758486326890618,w=0.47703384396283555,x=6.752267898515059 -color=yellow,shape=triangle,flag=1,i=57005,u=0.7517392165052279,v=0.7267227628890004,w=0.5060141050917312,x=4.745992459101271 -color=yellow,shape=square,flag=1,i=57026,u=0.9541583877298896,v=0.5760140001786096,w=0.5282467962179505,x=3.8938053481225765 -color=blue,shape=square,flag=1,i=57030,u=0.48695597423022874,v=0.08844546578461421,w=0.5425393953321049,x=5.877098806908617 -color=green,shape=triangle,flag=0,i=57041,u=0.0033388293078778775,v=0.933896354599408,w=0.4922603130880413,x=5.05781464079432 -color=blue,shape=circle,flag=0,i=57042,u=0.5901418240007674,v=0.5638573553123257,w=0.4992871485240841,x=6.843458415083828 -color=red,shape=circle,flag=0,i=57049,u=0.5234989354153977,v=0.5013872148712362,w=0.45558732325544266,x=4.022174600497456 -color=green,shape=triangle,flag=0,i=57070,u=0.6793028781891647,v=0.8966963246342607,w=0.49049432235610496,x=4.7595315484090515 -color=red,shape=triangle,flag=1,i=57072,u=0.9894870180524885,v=0.12448031200177812,w=0.5278646069763161,x=6.5079674124606095 -color=yellow,shape=square,flag=1,i=57074,u=0.7635076661052428,v=0.34100637493184516,w=0.5364141341389145,x=4.973597414939134 -color=yellow,shape=square,flag=1,i=57081,u=0.45587453331616634,v=0.3719269791702716,w=0.5305794111781517,x=6.818298776457883 -color=red,shape=triangle,flag=0,i=57097,u=0.43763430414406546,v=0.3355450325004481,w=0.5322349637512487,x=4.144267240289442 -color=purple,shape=triangle,flag=0,i=57099,u=0.01726445002433008,v=0.6061670254318432,w=0.48593179134149195,x=5.818141198433318 -color=green,shape=triangle,flag=1,i=57119,u=0.10582645587507367,v=0.521006587052829,w=0.49292885747088644,x=3.952132493715093 -color=green,shape=square,flag=1,i=57128,u=0.8777788174730123,v=0.6053559241858126,w=0.5041838406916876,x=5.025422132747454 -color=yellow,shape=square,flag=1,i=57129,u=0.04370246851186399,v=0.9244275032393586,w=0.5190230729648553,x=3.568376893796305 -color=red,shape=square,flag=0,i=57131,u=0.574928682414844,v=0.8441844909829774,w=0.49537442335669113,x=3.856032522133598 -color=blue,shape=circle,flag=1,i=57133,u=0.4305620562125635,v=0.7631207453798586,w=0.49905957592729966,x=5.16672919673186 -color=red,shape=square,flag=1,i=57143,u=0.011133646443627465,v=0.7141590196476079,w=0.49737333569489073,x=6.170355522542974 -color=red,shape=square,flag=1,i=57146,u=0.5231044166750242,v=0.19463966358945672,w=0.49623456672129695,x=5.150253929407074 -color=yellow,shape=triangle,flag=1,i=57171,u=0.26286275903750933,v=0.13487837447926443,w=0.503134444072826,x=4.551438247550485 -color=red,shape=square,flag=0,i=57203,u=0.6823163349826873,v=0.7525422127169011,w=0.5040709330470553,x=4.095461272966488 -color=green,shape=square,flag=0,i=57219,u=0.3349518079477095,v=0.1744883654218755,w=0.49436840112567093,x=3.817607547323984 -color=green,shape=square,flag=0,i=57223,u=0.32690487224136544,v=0.4141834589506679,w=0.4933218182035997,x=7.376539251590466 -color=purple,shape=triangle,flag=0,i=57224,u=0.7573665233415403,v=0.8354143305321534,w=0.4890312780408859,x=8.0931254697284 -color=orange,shape=triangle,flag=0,i=57234,u=0.5749728727062464,v=0.48146164961201965,w=0.5011606874777892,x=6.180701217648733 -color=red,shape=triangle,flag=0,i=57239,u=0.5371578220267906,v=0.8628290492646968,w=0.506724492496839,x=5.746764910184286 -color=red,shape=triangle,flag=0,i=57257,u=0.5992834970253335,v=0.39212689720661953,w=0.5056845878304536,x=4.234837524377951 -color=red,shape=triangle,flag=1,i=57258,u=0.9431390078364953,v=0.2263825266731717,w=0.5087258217097054,x=4.327778442628588 -color=red,shape=square,flag=0,i=57302,u=0.024310814110374945,v=0.4095077705745581,w=0.4888377553630069,x=5.735408709508672 -color=blue,shape=square,flag=0,i=57304,u=0.8405784101472124,v=0.7771487531548834,w=0.5454224573178974,x=5.14223922534172 -color=blue,shape=circle,flag=1,i=57315,u=0.1943125705810267,v=0.874892905922052,w=0.4947312666483951,x=5.113473234066195 -color=purple,shape=circle,flag=0,i=57348,u=0.08012648429205915,v=0.43419035849512433,w=0.4962768431042337,x=1.8218709525461902 -color=red,shape=square,flag=1,i=57367,u=0.5331769343069407,v=0.15913725305046733,w=0.4856533100600407,x=4.4664660072676705 -color=red,shape=circle,flag=1,i=57374,u=0.505448780648294,v=0.4137611479270784,w=0.46210978040392303,x=5.0505399265465085 -color=blue,shape=circle,flag=0,i=57375,u=0.819962506396029,v=0.45907589643516133,w=0.49844446032542133,x=3.786287200260798 -color=blue,shape=triangle,flag=0,i=57401,u=0.991684390968233,v=0.6615833277935615,w=0.46034698962148457,x=4.606985970888641 -color=red,shape=square,flag=0,i=57408,u=0.46827162958802415,v=0.14502708271779496,w=0.4880037830804171,x=2.9217207711082662 -color=orange,shape=triangle,flag=1,i=57414,u=0.7526477184435457,v=0.17303880234425795,w=0.5056005475852575,x=6.404295427295288 -color=red,shape=square,flag=1,i=57431,u=0.6708732581311403,v=0.3848803051856632,w=0.4947665693719608,x=3.6033512472322364 -color=yellow,shape=triangle,flag=1,i=57435,u=0.7167064211543328,v=0.7110980170684112,w=0.5123207949126591,x=4.591761803535008 -color=blue,shape=triangle,flag=0,i=57446,u=0.9290923551978754,v=0.6248957884857331,w=0.45465587739088054,x=3.9510839966005236 -color=yellow,shape=circle,flag=1,i=57463,u=0.15064392046205055,v=0.08745106422655047,w=0.5063690026859407,x=3.5526915331132614 -color=orange,shape=triangle,flag=0,i=57473,u=0.4835478569328253,v=0.7394294029674733,w=0.5094490708298437,x=3.634359237734911 -color=blue,shape=triangle,flag=1,i=57474,u=0.3047030252517603,v=0.7854749436564218,w=0.45509954569842925,x=7.047348711029993 -color=yellow,shape=triangle,flag=1,i=57506,u=0.3557250664804664,v=0.8613722336217875,w=0.5188848321598005,x=4.13511689990692 -color=red,shape=triangle,flag=0,i=57531,u=0.34310465354277797,v=0.14601516898030686,w=0.48776139903739407,x=3.7085713178943247 -color=yellow,shape=square,flag=1,i=57555,u=0.1074819150883004,v=0.14331800130044148,w=0.5194270050530218,x=3.8204075185975 -color=red,shape=circle,flag=0,i=57571,u=0.29389097072910497,v=0.3752129737476142,w=0.4563436788366135,x=5.522596038156965 -color=red,shape=circle,flag=0,i=57580,u=0.5958110886414048,v=0.5054359815521408,w=0.45319937957392453,x=5.354176766053418 -color=red,shape=square,flag=0,i=57596,u=0.7811301545207279,v=0.2980362509854374,w=0.49207538225570135,x=6.027243437914091 -color=red,shape=circle,flag=0,i=57610,u=0.8233649279576193,v=0.73904582248031,w=0.4541318258963891,x=7.642428407307745 -color=purple,shape=triangle,flag=0,i=57631,u=0.8540315697044478,v=0.04609427008330358,w=0.488262583172852,x=5.539949286347295 -color=red,shape=square,flag=0,i=57637,u=0.9420434567416045,v=0.8981000140354319,w=0.48941050607015335,x=7.555764361279043 -color=yellow,shape=triangle,flag=1,i=57642,u=0.38968010081327076,v=0.9540814651604933,w=0.514159643781292,x=6.532882011297591 -color=yellow,shape=circle,flag=1,i=57651,u=0.9347185453750891,v=0.5447342237797289,w=0.497977505982243,x=3.8019142886853423 -color=red,shape=triangle,flag=0,i=57654,u=0.8222235435440701,v=0.3333960510494647,w=0.4995854831609417,x=4.833720416434571 -color=red,shape=triangle,flag=1,i=57660,u=0.27702587689935565,v=0.19614331479441227,w=0.5065239584390209,x=5.5927229063235515 -color=red,shape=square,flag=0,i=57670,u=0.6366283515101797,v=0.6535462532929339,w=0.5006712583969031,x=4.912964686166155 -color=red,shape=triangle,flag=1,i=57679,u=0.04334757937389089,v=0.7158486850175766,w=0.5119599316397105,x=5.1203072145074975 -color=red,shape=circle,flag=1,i=57681,u=0.2210413188660827,v=0.2915898689504459,w=0.45556445015967656,x=4.681601871130785 -color=purple,shape=triangle,flag=1,i=57692,u=0.8628936629670622,v=0.1966642019894962,w=0.48856646652539204,x=5.970464010626437 -color=yellow,shape=square,flag=1,i=57698,u=0.7242860726730068,v=0.5339888683866254,w=0.501527012580424,x=5.345921023483595 -color=green,shape=triangle,flag=0,i=57710,u=0.37101762957900253,v=0.3443520380884232,w=0.47797586146427484,x=3.870324394854277 -color=red,shape=circle,flag=0,i=57731,u=0.4821465757067268,v=0.39316657572010405,w=0.4571060516885655,x=5.00958653366266 -color=red,shape=circle,flag=0,i=57746,u=0.34511084840221895,v=0.4140085082708238,w=0.46754512089738315,x=5.977675868607181 -color=yellow,shape=square,flag=1,i=57767,u=0.9499162157354892,v=0.8075609279750459,w=0.4931056053774451,x=3.7522855466153664 -color=red,shape=square,flag=1,i=57772,u=0.6814429124267467,v=0.44075167328087106,w=0.51896667418475,x=6.784776699806738 -color=yellow,shape=triangle,flag=1,i=57774,u=0.3460115788163808,v=0.03989743806852186,w=0.5114632861912366,x=4.15447347610549 -color=red,shape=triangle,flag=0,i=57789,u=0.8223596537644666,v=0.2917985221516214,w=0.5275780753259222,x=4.855470806583331 -color=blue,shape=square,flag=1,i=57802,u=0.7814522755751936,v=0.4011480871235916,w=0.5415249320577042,x=3.6637416731066588 -color=purple,shape=triangle,flag=0,i=57808,u=0.20389189152079468,v=0.9808875832638677,w=0.48579353711463447,x=5.269943112967642 -color=green,shape=circle,flag=1,i=57809,u=0.5341964740458628,v=0.3473966837132799,w=0.5275397137823564,x=6.386015994285457 -color=red,shape=circle,flag=0,i=57815,u=0.3619390582070744,v=0.33255552951042255,w=0.45620209335071493,x=5.261101692283105 -color=yellow,shape=square,flag=0,i=57848,u=0.6966389553248836,v=0.8908193594966756,w=0.49985893675191756,x=4.860279612009441 -color=red,shape=circle,flag=0,i=57856,u=0.722947859807555,v=0.773463345237181,w=0.45605999833559924,x=6.91278234216967 -color=red,shape=square,flag=0,i=57868,u=0.14254976689213528,v=0.4043076443225304,w=0.5104583797348571,x=6.065852860375048 -color=red,shape=triangle,flag=0,i=57917,u=0.6174810588832751,v=0.9687278093726709,w=0.525284631043206,x=5.2050143792971495 -color=blue,shape=triangle,flag=1,i=57926,u=0.6912373499388854,v=0.2827176950147081,w=0.46290998325400357,x=4.9373944996986525 -color=red,shape=circle,flag=1,i=57939,u=0.5646429245654448,v=0.6299242940932583,w=0.46545787411508893,x=5.4817928223811885 -color=red,shape=triangle,flag=0,i=57941,u=0.28613750402421345,v=0.7420133839544106,w=0.5236049145924581,x=4.972331408060795 -color=yellow,shape=triangle,flag=1,i=57976,u=0.02328897123233986,v=0.8728876102816807,w=0.5124783146272579,x=2.0501167711259147 -color=red,shape=square,flag=1,i=57977,u=0.6018861306238275,v=0.04060100984613002,w=0.5068073649563413,x=5.670692988748578 -color=blue,shape=triangle,flag=1,i=57984,u=0.5041221527024292,v=0.22928520241395167,w=0.46383528432360316,x=4.563692432051018 -color=red,shape=square,flag=0,i=57990,u=0.6292919350374835,v=0.16731851752737936,w=0.5066900825728794,x=4.2326378211670335 -color=red,shape=square,flag=0,i=58005,u=0.056491194565309044,v=0.5682866397729098,w=0.5030114013487311,x=5.056221590340435 -color=blue,shape=square,flag=1,i=58021,u=0.03453216727901298,v=0.6170675254270521,w=0.5377164525247832,x=3.812252287605825 -color=red,shape=circle,flag=0,i=58027,u=0.9342661181784879,v=0.8352788276045955,w=0.4661641058179585,x=2.5817231019526594 -color=red,shape=triangle,flag=0,i=58046,u=0.07843948971308079,v=0.4995848419188429,w=0.5217584461237067,x=4.531222533167488 -color=red,shape=triangle,flag=0,i=58047,u=0.9078974894907839,v=0.0879068083362109,w=0.5226871726803604,x=6.2939959995419335 -color=red,shape=square,flag=0,i=58075,u=0.7013672841889225,v=0.29465664118913204,w=0.5125841365207433,x=5.053586573263087 -color=blue,shape=square,flag=0,i=58078,u=0.753189614429923,v=0.7024283523871544,w=0.541288289102727,x=3.311674915905701 -color=green,shape=circle,flag=0,i=58094,u=0.7744418231840695,v=0.3324840149989756,w=0.5307729247001642,x=4.848679905277873 -color=purple,shape=triangle,flag=0,i=58104,u=0.669227967847044,v=0.3237591477708297,w=0.47793061337111314,x=2.365978168115422 -color=red,shape=triangle,flag=0,i=58113,u=0.9614312210130712,v=0.20261199579282851,w=0.5270456824641488,x=6.454928663423767 -color=orange,shape=triangle,flag=0,i=58118,u=0.8527805448627521,v=0.9945548365280416,w=0.5067710924833986,x=6.565683264595286 -color=green,shape=circle,flag=0,i=58125,u=0.016829507182027248,v=0.6631387994706708,w=0.5317288275743672,x=5.076598194600096 -color=red,shape=triangle,flag=1,i=58128,u=0.38953541435785677,v=0.08064794347039539,w=0.5270273656555923,x=3.8576852102002053 -color=green,shape=circle,flag=0,i=58172,u=0.7692883104468107,v=0.9704200386450227,w=0.5301771736237355,x=3.0787169782653705 -color=blue,shape=square,flag=1,i=58205,u=0.9139907247345335,v=0.0631186842959306,w=0.5355092665657734,x=3.874123653800236 -color=purple,shape=triangle,flag=0,i=58235,u=0.5590233167117773,v=0.5530982609728853,w=0.477038335154019,x=5.100754652066263 -color=red,shape=circle,flag=0,i=58247,u=0.7888680495919136,v=0.7970614189925921,w=0.4874588405896818,x=5.006356308204476 -color=purple,shape=square,flag=0,i=58251,u=0.4501224039416202,v=0.7555272334404862,w=0.5220107834612485,x=3.510281002395835 -color=red,shape=square,flag=0,i=58261,u=0.6228628555349012,v=0.8257224503666623,w=0.5019733390119124,x=3.58731584511304 -color=yellow,shape=square,flag=1,i=58262,u=0.4084622196476705,v=0.6203721816193781,w=0.5058602094520064,x=5.1071266294854505 -color=red,shape=triangle,flag=1,i=58267,u=0.0990239735967664,v=0.5928044158065129,w=0.5277814029048679,x=4.129341735861966 -color=yellow,shape=triangle,flag=1,i=58269,u=0.28863622879125594,v=0.5219089913113051,w=0.501181056281952,x=6.805928625406299 -color=red,shape=triangle,flag=0,i=58291,u=0.7488317523088905,v=0.4244727651395648,w=0.5292518064783566,x=4.163104463278721 -color=red,shape=square,flag=0,i=58293,u=0.4523751608592228,v=0.37396633862360074,w=0.498832444910943,x=1.689435892425134 -color=red,shape=square,flag=0,i=58305,u=0.3663341440656648,v=0.9286463325463061,w=0.49866636736612063,x=6.025152801409885 -color=red,shape=square,flag=0,i=58307,u=0.8371059671758849,v=0.8171431625057642,w=0.5027239947717429,x=7.358223709838609 -color=purple,shape=square,flag=0,i=58310,u=0.8650044776033571,v=0.17748234761700155,w=0.519046758735384,x=5.47792772385575 -color=green,shape=circle,flag=1,i=58319,u=0.536286085982837,v=0.3933444036103214,w=0.5298185420316195,x=4.82429925301114 -color=green,shape=square,flag=0,i=58324,u=0.8529107372710464,v=0.5405310906383437,w=0.4817690340074414,x=5.672703995607141 -color=blue,shape=triangle,flag=0,i=58327,u=0.9836306342365648,v=0.5580768581604194,w=0.4779274157234226,x=6.683490874494278 -color=purple,shape=square,flag=0,i=58328,u=0.7273236786663938,v=0.882744937276109,w=0.5184927030846959,x=5.134432288561755 -color=red,shape=triangle,flag=0,i=58334,u=0.3024102692037406,v=0.6041772421910551,w=0.5288266186541732,x=4.134730630542767 -color=red,shape=triangle,flag=1,i=58335,u=0.7760809534743702,v=0.9209548838435749,w=0.5242428182140852,x=3.724709105963436 -color=red,shape=square,flag=1,i=58341,u=0.38455578067821794,v=0.10309244931028216,w=0.49100402236276647,x=3.300544412714942 -color=green,shape=square,flag=0,i=58342,u=0.041770092456995256,v=0.5653991838616541,w=0.482779161285375,x=5.829280550418571 -color=red,shape=square,flag=0,i=58403,u=0.22119036413199444,v=0.45549972236039427,w=0.4967131757267248,x=3.6395484393390958 -color=red,shape=triangle,flag=0,i=58412,u=0.34515999026724253,v=0.8067283710107612,w=0.517895299072838,x=5.126823397695507 -color=purple,shape=triangle,flag=0,i=58433,u=0.22283510207794788,v=0.741953760223494,w=0.4640615700408663,x=4.158819477747105 -color=blue,shape=circle,flag=1,i=58453,u=0.8392015555058513,v=0.5455764168759512,w=0.5245742206618093,x=4.628803773278881 -color=purple,shape=triangle,flag=1,i=58455,u=0.8893469901719875,v=0.18434977141471764,w=0.46176350669815247,x=6.356909114263387 -color=green,shape=square,flag=1,i=58462,u=0.5765420268540784,v=0.8831731033254521,w=0.4884692983115413,x=6.528111288020533 -color=red,shape=circle,flag=0,i=58468,u=0.6789937093939847,v=0.731985813167086,w=0.5003190530763734,x=2.997453097180325 -color=orange,shape=triangle,flag=1,i=58471,u=0.7080025391419025,v=0.48091255603363914,w=0.5068436073986482,x=4.692879025150829 -color=green,shape=square,flag=0,i=58478,u=0.8844980262525789,v=0.652029271902799,w=0.4873767399101722,x=5.300677709842588 -color=blue,shape=circle,flag=0,i=58495,u=0.24613519589961708,v=0.39875643763618507,w=0.5278567895651531,x=3.4742887516143646 -color=red,shape=circle,flag=0,i=58512,u=0.9217057340403986,v=0.9602433928493403,w=0.5023738971546923,x=6.261719743721753 -color=blue,shape=triangle,flag=1,i=58515,u=0.8901273559874665,v=0.6476409389872694,w=0.4874259285482577,x=5.056998927734246 -color=green,shape=circle,flag=0,i=58525,u=0.16680279431025324,v=0.599957009048826,w=0.538139640406762,x=4.852636257864416 -color=red,shape=square,flag=0,i=58541,u=0.9731259228381611,v=0.7817514446657341,w=0.4852653696528141,x=4.3114959477113475 -color=red,shape=square,flag=0,i=58546,u=0.9125850124338356,v=0.4409835879738838,w=0.48112557584212456,x=5.1008125395301604 -color=yellow,shape=triangle,flag=1,i=58574,u=0.21184116734669112,v=0.34350488899414156,w=0.4926646864103738,x=4.652611868947775 -color=red,shape=triangle,flag=1,i=58590,u=0.42507658367336476,v=0.21016489604327915,w=0.5035631971135429,x=4.682735965201783 -color=red,shape=triangle,flag=0,i=58600,u=0.8138242171256701,v=0.15298589168226517,w=0.5011786952142664,x=6.183038756572543 -color=blue,shape=circle,flag=0,i=58618,u=0.8055517396574174,v=0.25190528517481103,w=0.5317737094468621,x=6.232033008546204 -color=red,shape=triangle,flag=0,i=58629,u=0.8333627464577654,v=0.8048486676246054,w=0.49081665542292613,x=4.753468945440081 -color=red,shape=square,flag=0,i=58635,u=0.8283882073520143,v=0.7664605134595852,w=0.4710204681907803,x=4.03515813210888 -color=purple,shape=square,flag=0,i=58647,u=0.7341327240760214,v=0.08849070682205296,w=0.5274713300012743,x=5.885548222539512 -color=red,shape=triangle,flag=1,i=58651,u=0.160406193480767,v=0.9313706492934899,w=0.49582790954757083,x=7.237443140445843 -color=orange,shape=circle,flag=0,i=58678,u=0.8526598416126374,v=0.846180672330378,w=0.5038970535979693,x=6.965075082684908 -color=yellow,shape=circle,flag=1,i=58702,u=0.6540249477176301,v=0.7676035130825353,w=0.4997081039816843,x=2.9261088871125622 -color=red,shape=triangle,flag=0,i=58707,u=0.48020589114775214,v=0.0642982089297347,w=0.4963296052523536,x=4.323968118097352 -color=green,shape=square,flag=1,i=58729,u=0.24081441277584592,v=0.7535243105422101,w=0.49602410655824525,x=8.433989906307671 -color=red,shape=square,flag=1,i=58732,u=0.6044893290864333,v=0.31575083068632737,w=0.4666483148997662,x=4.2872093119365795 -color=blue,shape=circle,flag=1,i=58761,u=0.7736819807853733,v=0.27121674871610024,w=0.5304317528332403,x=3.433947168154671 -color=red,shape=triangle,flag=0,i=58766,u=0.7923922344707054,v=0.6590670763835446,w=0.49577917620346657,x=6.119542141095465 -color=red,shape=square,flag=0,i=58770,u=0.8882460551360579,v=0.14372946573581613,w=0.46817836161335413,x=5.343391547798532 -color=red,shape=square,flag=0,i=58786,u=0.7266871347048595,v=0.25953672310532006,w=0.4691136530008869,x=5.819682185014687 -color=green,shape=triangle,flag=1,i=58790,u=0.8623520577678409,v=0.95679961338491,w=0.4899748423624019,x=2.5710146291060245 -color=red,shape=square,flag=0,i=58791,u=0.0847414066198453,v=0.6677842249273277,w=0.46471543190025083,x=6.260401915212237 -color=red,shape=square,flag=0,i=58819,u=0.5123300445781311,v=0.3118425790761661,w=0.4594267189708461,x=5.009860473207472 -color=purple,shape=triangle,flag=0,i=58851,u=0.9799352597926767,v=0.1588428171799734,w=0.4475443411229563,x=5.4227244989926 -color=red,shape=triangle,flag=0,i=58862,u=0.8112589931962002,v=0.12831513933525085,w=0.4922712354464417,x=3.538258302561511 -color=blue,shape=square,flag=1,i=58871,u=0.5473903377576527,v=0.6909896477605875,w=0.5345265456708845,x=4.388932767057418 -color=purple,shape=triangle,flag=0,i=58881,u=0.8777280580134494,v=0.3955145992873986,w=0.44738938938831824,x=4.620651176690026 -color=blue,shape=square,flag=1,i=58895,u=0.7291766541236148,v=0.29922655475786664,w=0.5436646021049597,x=3.7845402706451114 -color=green,shape=square,flag=0,i=58905,u=0.6294930752661401,v=0.22304826646157672,w=0.4993973336074978,x=5.329000184983069 -color=green,shape=square,flag=0,i=58913,u=0.340246931270076,v=0.7477935410227243,w=0.4958621026062283,x=4.902393591550665 -color=red,shape=square,flag=1,i=58937,u=0.25005493192702166,v=0.6009872970522427,w=0.47523361850663626,x=5.1648570823276865 -color=red,shape=triangle,flag=0,i=58965,u=0.10110453502245331,v=0.7832535542117784,w=0.49604315405130983,x=5.8613494883678925 -color=purple,shape=square,flag=0,i=58967,u=0.9366059760590085,v=0.3874098466275303,w=0.5120726336459891,x=3.0627487531820283 -color=blue,shape=circle,flag=1,i=58975,u=0.06780676925715112,v=0.568931748987323,w=0.5385689010987372,x=3.709861800026573 -color=yellow,shape=triangle,flag=1,i=58980,u=0.7068476708732563,v=0.9999189897724752,w=0.46884528404855447,x=4.330113594485119 -color=red,shape=triangle,flag=1,i=58983,u=0.9680396921055037,v=0.5004152074794316,w=0.4883577740670396,x=5.062226901519312 -color=purple,shape=triangle,flag=0,i=58984,u=0.6485406826372255,v=0.26055023531394605,w=0.44964428159147796,x=3.679771822144931 -color=red,shape=square,flag=1,i=58990,u=0.09822042499794581,v=0.4721308614555967,w=0.4716577332666743,x=5.038923484700747 -color=yellow,shape=triangle,flag=1,i=58998,u=0.5428921513623008,v=0.44422778344940905,w=0.4689031432263098,x=5.328961305576487 -color=blue,shape=square,flag=1,i=59001,u=0.8566177608383426,v=0.8271499907892523,w=0.5466309172928557,x=3.742076008326857 -color=blue,shape=circle,flag=1,i=59010,u=0.20746697621757848,v=0.0416450436545337,w=0.5350822997282313,x=3.987876556185007 -color=green,shape=triangle,flag=0,i=59021,u=0.2861756112499002,v=0.5720629411750932,w=0.5085520503326988,x=6.3610492698092465 -color=green,shape=square,flag=0,i=59032,u=0.9294703650367374,v=0.15595264499897765,w=0.495347833271314,x=5.13528728899091 -color=red,shape=triangle,flag=1,i=59040,u=0.6693516488305271,v=0.9363959410830951,w=0.4834568941426011,x=3.832096208108085 -color=purple,shape=square,flag=0,i=59069,u=0.9475916179839136,v=0.29865429028869617,w=0.5146889666558835,x=2.539750454831528 -color=red,shape=triangle,flag=0,i=59071,u=0.3130709106299676,v=0.38871256610085025,w=0.48164877534132167,x=3.3211790766925318 -color=red,shape=square,flag=0,i=59074,u=0.39113693958859785,v=0.7761577445177983,w=0.4663004474487686,x=4.693395763208141 -color=purple,shape=square,flag=0,i=59076,u=0.30019674425684617,v=0.6262114315377585,w=0.5160162501758863,x=2.943606204006251 -color=red,shape=square,flag=0,i=59087,u=0.5652931995020114,v=0.9310644767615538,w=0.46371883276660253,x=4.587457379634179 -color=orange,shape=square,flag=0,i=59108,u=0.8523526718052418,v=0.045441157692545864,w=0.4901543677067723,x=5.437648718691428 -color=purple,shape=circle,flag=0,i=59120,u=0.6132680906024632,v=0.24071681251837995,w=0.4852945274864665,x=4.7293442246217 -color=blue,shape=triangle,flag=1,i=59136,u=0.9027038969310971,v=0.5682822528015326,w=0.49163730560647995,x=4.775580298639574 -color=yellow,shape=square,flag=1,i=59137,u=0.4328651737515983,v=0.30369182610863665,w=0.49387608114631815,x=4.563515629843871 -color=red,shape=square,flag=0,i=59139,u=0.3386320831614862,v=0.7172145445087343,w=0.4588487112561816,x=4.326448248575368 -color=orange,shape=square,flag=1,i=59144,u=0.21621923205720683,v=0.612406871210008,w=0.48875106135898644,x=5.566531426339076 -color=blue,shape=square,flag=0,i=59169,u=0.12743812900976104,v=0.3704811127026947,w=0.5505346354396387,x=3.754022129962694 -color=blue,shape=circle,flag=1,i=59187,u=0.3545446952494561,v=0.5803454111094273,w=0.5291069870863622,x=5.770355484262528 -color=purple,shape=square,flag=0,i=59198,u=0.09607190841293178,v=0.13684392353269614,w=0.5147065416334244,x=4.494554722658508 -color=red,shape=square,flag=1,i=59204,u=0.21662850506626408,v=0.21442710835724388,w=0.46647522160934335,x=4.186516102379482 -color=purple,shape=circle,flag=0,i=59228,u=0.9859248949980823,v=0.4472860339755894,w=0.4850433406069708,x=5.0427622870286655 -color=orange,shape=square,flag=1,i=59241,u=0.40227896915373196,v=0.8396533887004508,w=0.49137323091255614,x=5.735128743806576 -color=yellow,shape=square,flag=1,i=59248,u=0.1586216027165228,v=0.578425993724517,w=0.4982541930814546,x=5.720989004286217 -color=blue,shape=circle,flag=1,i=59278,u=0.024773368142677055,v=0.40036101451109285,w=0.5285292887238052,x=5.6213133291368464 -color=yellow,shape=triangle,flag=1,i=59293,u=0.7864088027130408,v=0.9554833709529619,w=0.4766187647235236,x=3.739850054462682 -color=red,shape=triangle,flag=0,i=59298,u=0.11189153471928626,v=0.29773142203006864,w=0.4940937002097084,x=3.7831513988412806 -color=red,shape=square,flag=1,i=59315,u=0.23259496109788058,v=0.4741853404934552,w=0.49431057508140075,x=4.561900354549574 -color=purple,shape=triangle,flag=0,i=59319,u=0.4057531538385848,v=0.30910095231087875,w=0.4424574385120491,x=5.534218913750713 -color=red,shape=circle,flag=0,i=59337,u=0.9486119039495877,v=1.0468280305327768,w=0.511655208248468,x=4.611930670204417 -color=purple,shape=square,flag=1,i=59342,u=0.37978890485357586,v=0.8128658675617892,w=0.5234976358529531,x=6.111507237953888 -color=blue,shape=circle,flag=0,i=59362,u=0.9641680881641452,v=0.4150589103472394,w=0.5259584938612869,x=5.551265241044931 -color=red,shape=triangle,flag=0,i=59366,u=0.562197139585697,v=0.41255288922228106,w=0.4906806182909494,x=5.546655679971994 -color=red,shape=circle,flag=0,i=59378,u=0.48078922559343307,v=0.4229723230857455,w=0.5069760450637796,x=3.2154294107148407 -color=red,shape=triangle,flag=1,i=59380,u=0.6766474296955985,v=0.17302563156129103,w=0.4881119613024596,x=3.7959813405567853 -color=yellow,shape=triangle,flag=1,i=59381,u=0.2926450242309324,v=0.2911575047655115,w=0.475505781890316,x=5.692694144796749 -color=red,shape=square,flag=0,i=59390,u=0.5697875239428923,v=0.679689053555388,w=0.4831269467552712,x=5.362638083319464 -color=green,shape=triangle,flag=0,i=59406,u=0.4856847425607669,v=0.7602160955896392,w=0.5116839474995949,x=6.707703894930925 -color=red,shape=triangle,flag=0,i=59409,u=0.11662290117546481,v=0.279683717617913,w=0.48578708535661336,x=4.025282919744382 -color=yellow,shape=square,flag=1,i=59411,u=0.10242685846591137,v=0.14244272059015983,w=0.49332686687271954,x=5.046470073616738 -color=green,shape=triangle,flag=0,i=59416,u=0.5036024284493329,v=0.000716883409890845,w=0.5078436931234223,x=5.386783602754711 -color=red,shape=square,flag=1,i=59421,u=0.9565992780801307,v=0.391888547519641,w=0.4882428536993298,x=4.678069335734491 -color=red,shape=square,flag=1,i=59431,u=0.045645722259456956,v=0.7678316856228136,w=0.49301891154484795,x=5.0994860621646 -color=green,shape=square,flag=0,i=59437,u=0.8965429844923264,v=0.8594422863253137,w=0.504237440861051,x=4.052025996361799 -color=yellow,shape=triangle,flag=1,i=59447,u=0.26519000677552373,v=0.5146021817953338,w=0.47031253457870803,x=6.906317931075872 -color=red,shape=square,flag=0,i=59456,u=0.19319589868062348,v=0.27109174465708263,w=0.49075623527344225,x=3.5055432443081127 -color=red,shape=square,flag=0,i=59461,u=0.8342347266008945,v=0.050210087252675284,w=0.4829427458824445,x=6.258562385907329 -color=red,shape=triangle,flag=0,i=59463,u=0.47152394364522066,v=0.11591939306515076,w=0.4653369317500246,x=7.077570170395727 -color=red,shape=square,flag=1,i=59465,u=0.47119118618167777,v=0.7221904681946161,w=0.4813686074054236,x=4.238091218942955 -color=red,shape=square,flag=0,i=59469,u=0.28328416261445555,v=0.7499332799763361,w=0.47773188592199,x=5.9402790022423275 -color=blue,shape=circle,flag=1,i=59485,u=0.18499600179476738,v=0.26821367317511613,w=0.52838909703659,x=5.819455103995662 -color=orange,shape=triangle,flag=0,i=59489,u=0.19018417868188553,v=0.11667221083622226,w=0.5108476884795996,x=6.895272007440184 -color=red,shape=square,flag=1,i=59511,u=0.9721017469870473,v=0.21329374223958908,w=0.4729102824029775,x=5.80962377361852 -color=red,shape=circle,flag=0,i=59513,u=0.669909552192451,v=0.5714566604335872,w=0.49609823369631634,x=4.630498467935303 -color=blue,shape=square,flag=1,i=59538,u=0.2781074948353178,v=0.5853700862533163,w=0.5272440504419877,x=5.051385157745677 -color=yellow,shape=triangle,flag=1,i=59543,u=0.8121305258287984,v=0.9439243790359957,w=0.47002328233164337,x=4.808869080797949 -color=yellow,shape=square,flag=1,i=59562,u=0.5588039639966413,v=0.21895882842418446,w=0.4924397608576836,x=5.930823306177107 -color=red,shape=circle,flag=0,i=59585,u=0.8431743909773395,v=0.8429992075973789,w=0.49564124784555214,x=5.06138198461682 -color=blue,shape=triangle,flag=0,i=59590,u=0.2623185427858544,v=0.36658803068427936,w=0.4956368567290423,x=4.954940895755882 -color=red,shape=circle,flag=0,i=59595,u=0.26959762349647964,v=0.2530065846482056,w=0.49063917380089617,x=4.081586199641363 -color=green,shape=triangle,flag=0,i=59603,u=0.6092615715256717,v=0.21159160957338474,w=0.5118969562633681,x=4.6856635517272425 -color=red,shape=square,flag=0,i=59612,u=0.12160457464683472,v=0.7153362033575198,w=0.4786915873610719,x=4.145958039579617 -color=blue,shape=triangle,flag=1,i=59620,u=0.709404390250226,v=0.16203635906555813,w=0.4978395544167789,x=4.23006581964683 -color=green,shape=triangle,flag=0,i=59632,u=0.23199631072772864,v=0.4803312745946785,w=0.5099247581319517,x=4.091101499560562 -color=red,shape=triangle,flag=0,i=59633,u=0.8859601371346695,v=0.22373794956094917,w=0.46891562801991576,x=4.3483032931649825 -color=green,shape=square,flag=0,i=59639,u=0.9957463277412469,v=0.24723951040588443,w=0.5016546264278595,x=3.4834589129389477 -color=blue,shape=triangle,flag=1,i=59643,u=0.35522185926251837,v=0.871845694415609,w=0.5040840399863876,x=4.315572437101423 -color=purple,shape=circle,flag=0,i=59658,u=0.036063302356188154,v=0.23811982898511808,w=0.48315474999216695,x=4.07325211122341 -color=blue,shape=square,flag=1,i=59662,u=0.7688878054881069,v=0.05073358446579801,w=0.5151669446320261,x=5.734002017117182 -color=yellow,shape=triangle,flag=1,i=59675,u=0.09661187384420866,v=0.0708294155067768,w=0.4656499827251335,x=4.479820656523532 -color=red,shape=square,flag=0,i=59700,u=0.7697779674760553,v=0.6087426987674531,w=0.48009991096523863,x=5.276041632364311 -color=red,shape=triangle,flag=0,i=59704,u=0.6145378722431138,v=0.2522093198037776,w=0.46342618533547025,x=4.750063816585814 -color=red,shape=triangle,flag=0,i=59721,u=0.6074021231045044,v=0.4459202208723996,w=0.46478686150331816,x=5.633280256071977 -color=yellow,shape=circle,flag=0,i=59725,u=0.16312410076670225,v=0.9525579123223971,w=0.515915123861317,x=3.4930911846115293 -color=red,shape=square,flag=1,i=59730,u=0.14767562172521354,v=0.11163258893136208,w=0.4735042506096502,x=4.1215875375541735 -color=red,shape=square,flag=0,i=59731,u=0.7717895506774058,v=0.3209651966078415,w=0.4777527155377761,x=3.277936085505915 -color=red,shape=square,flag=1,i=59734,u=0.19754839918290767,v=0.11239951507997248,w=0.4783758644194376,x=6.128778661460413 -color=red,shape=square,flag=1,i=59738,u=0.28519754752302573,v=0.3798685944960586,w=0.48184288043656176,x=6.185457242216272 -color=blue,shape=circle,flag=1,i=59772,u=0.9327138914480179,v=0.660543523574067,w=0.5326944508585649,x=4.61914047857024 -color=red,shape=square,flag=1,i=59780,u=0.5831547754084914,v=0.16283501386351695,w=0.4686528960135068,x=5.409508252510452 -color=red,shape=square,flag=0,i=59787,u=0.017975872307126717,v=0.09938042362589927,w=0.4672523732912803,x=5.293585731193196 -color=yellow,shape=circle,flag=1,i=59803,u=0.9321732779863839,v=0.2741867762484177,w=0.5165428172575693,x=3.3187550721737034 -color=orange,shape=square,flag=0,i=59812,u=0.06314784014201447,v=0.15811283944090349,w=0.4935201981856332,x=5.164577796001799 -color=green,shape=triangle,flag=0,i=59814,u=0.299391082596862,v=0.41163536573041415,w=0.5046643056866701,x=4.512986146614555 -color=red,shape=square,flag=0,i=59830,u=0.14517045684523344,v=0.013670877743999998,w=0.4817437539295141,x=6.326949796935388 -color=blue,shape=square,flag=0,i=59854,u=0.4476611337505636,v=0.7801221096820661,w=0.5191395482079683,x=5.539605026604586 -color=red,shape=square,flag=1,i=59871,u=0.859232642447632,v=0.22003881191397745,w=0.4914506540710125,x=5.8982398632018525 -color=red,shape=square,flag=0,i=59872,u=0.49753080437928054,v=0.6587404206820608,w=0.4866024176735825,x=3.6797731454982743 -color=red,shape=square,flag=0,i=59873,u=0.7044923244705168,v=0.9340596054256529,w=0.4883296575590863,x=3.905597431766193 -color=green,shape=circle,flag=0,i=59877,u=0.42103210314596606,v=0.8357212534144285,w=0.5480406068658668,x=5.378146498354905 -color=red,shape=circle,flag=1,i=59910,u=0.7263060939063148,v=0.7536136460986113,w=0.49644669950941334,x=3.8757988386798465 -color=red,shape=square,flag=1,i=59921,u=0.24880260275220722,v=0.023725022806381113,w=0.487536845817757,x=6.016966219740868 -color=green,shape=square,flag=0,i=59936,u=0.7763864793820608,v=0.31561068312737994,w=0.4989935942600376,x=5.933257794344787 -color=red,shape=triangle,flag=0,i=59947,u=0.12528610031358367,v=0.8906913922061578,w=0.47948130182690357,x=5.9629837948227005 -color=purple,shape=triangle,flag=0,i=59956,u=0.5816387676459744,v=0.9511327115745335,w=0.4603331122226516,x=7.179647177872418 -color=red,shape=square,flag=0,i=59959,u=0.2578253136093108,v=0.5892041381039295,w=0.4831056459328499,x=5.441853050502611 -color=red,shape=square,flag=0,i=59977,u=0.8973190947190652,v=0.5018151811839017,w=0.4853163651983584,x=4.61669823550631 -color=purple,shape=circle,flag=0,i=59984,u=0.8300008706180275,v=0.1275332490304978,w=0.4750718152173571,x=4.511563227189963 -color=red,shape=square,flag=0,i=59989,u=0.5273822465701745,v=0.9286734523645935,w=0.48890214223520034,x=5.427272197226707 -color=blue,shape=square,flag=1,i=59993,u=0.01812674786184776,v=0.06313323303656337,w=0.5029760870794235,x=6.1291662183615365 -color=red,shape=square,flag=1,i=59996,u=0.10191295874723083,v=0.01178821607847469,w=0.4889066278006681,x=3.513404926195023 -color=red,shape=square,flag=1,i=60023,u=0.7838214512210948,v=0.5825956262321237,w=0.48391871259128105,x=4.63728636336322 -color=green,shape=square,flag=0,i=60031,u=0.2812562665580939,v=0.2756903188251216,w=0.5049104712505684,x=4.958042604347722 -color=red,shape=triangle,flag=1,i=60033,u=0.5149792094014062,v=0.08030516396604948,w=0.4783715629622743,x=6.001861021926376 -color=red,shape=square,flag=0,i=60036,u=0.25865300869772023,v=0.2810863103838145,w=0.4906321649433822,x=6.512943775572094 -color=red,shape=triangle,flag=0,i=60041,u=0.7121380140783574,v=0.3914785923081784,w=0.4741953774617361,x=6.576617109348067 -color=blue,shape=triangle,flag=0,i=60043,u=0.36869112608804,v=0.8001615458818079,w=0.48635626298799045,x=3.57447294161479 -color=purple,shape=triangle,flag=0,i=60057,u=0.6891384831640978,v=0.3357481194274481,w=0.460734939938052,x=6.0371079828721435 -color=red,shape=circle,flag=1,i=60079,u=0.6938631031492669,v=0.6208774028350542,w=0.5004387524845038,x=5.956376933506028 -color=purple,shape=triangle,flag=0,i=60083,u=0.5856512822237091,v=0.36554759366219336,w=0.4640443816913114,x=6.100398057947508 -color=red,shape=square,flag=0,i=60092,u=0.8660709900065859,v=0.9273650846271052,w=0.49045899266672016,x=3.694815146011953 -color=green,shape=square,flag=1,i=60104,u=0.08753092756593095,v=0.7785159087286321,w=0.509951811134412,x=4.7146650347883785 -color=red,shape=circle,flag=0,i=60110,u=0.06721694669057832,v=0.15719799892416475,w=0.4962263043647782,x=3.556245430527886 -color=red,shape=triangle,flag=0,i=60116,u=0.06713184793043103,v=0.5791242899788971,w=0.48704038064901384,x=3.9321200064963686 -color=orange,shape=triangle,flag=1,i=60125,u=0.4602726170278648,v=0.944503432262257,w=0.5034391366080336,x=5.6848123231107195 -color=red,shape=triangle,flag=0,i=60126,u=0.9996614910922645,v=0.07233426867697246,w=0.48617011659381976,x=5.751868107675523 -color=red,shape=square,flag=1,i=60127,u=0.7823409978929143,v=0.4792437505690891,w=0.4972645493601718,x=6.0799965297228775 -color=red,shape=square,flag=1,i=60161,u=0.7330074587171623,v=0.9074755779508309,w=0.4978493810854733,x=7.00513807387306 -color=yellow,shape=triangle,flag=1,i=60169,u=0.2591390012141541,v=0.04055506669904452,w=0.4695202283472291,x=4.402007284014633 -color=red,shape=triangle,flag=0,i=60171,u=0.9980645351223236,v=0.8691009559567416,w=0.47937656476978113,x=5.755333219904422 -color=green,shape=square,flag=0,i=60183,u=0.3374471439395277,v=0.1486784869787705,w=0.5081179655250804,x=5.276210095435389 -color=purple,shape=square,flag=0,i=60188,u=0.3162527134231783,v=0.6221869218763099,w=0.528659860431892,x=5.659532063374793 -color=red,shape=triangle,flag=0,i=60189,u=0.7552699472402814,v=0.2368027970925739,w=0.4864831923304649,x=5.841106271389741 -color=red,shape=circle,flag=0,i=60196,u=0.19340501200990967,v=0.28034400077865584,w=0.4850449344289182,x=6.485939862731996 -color=red,shape=square,flag=0,i=60216,u=0.8810670865088781,v=0.5412594578961352,w=0.4836614115462953,x=5.581688877735268 -color=green,shape=circle,flag=1,i=60217,u=0.4100057587606315,v=0.05121955440675141,w=0.542951158152421,x=3.3192357074885486 -color=red,shape=square,flag=0,i=60218,u=0.0646847306637629,v=0.08358166281191581,w=0.48069838295384115,x=6.374792858788698 -color=yellow,shape=square,flag=1,i=60234,u=0.29763588162061483,v=0.4822968296523553,w=0.5249462934370704,x=4.186304568925794 -color=red,shape=circle,flag=0,i=60235,u=0.35973802236716823,v=0.32695281407603277,w=0.48776351920577343,x=4.553275861705693 -color=red,shape=square,flag=0,i=60240,u=0.8686348409722066,v=0.05122503167764181,w=0.4764515029063973,x=5.150059327536076 -color=blue,shape=triangle,flag=0,i=60245,u=0.8822469399477052,v=0.2089840757936804,w=0.47413946278818964,x=6.015399920849606 -color=red,shape=square,flag=0,i=60251,u=0.07858733610112978,v=0.22513000306533348,w=0.4742518390027568,x=5.738642465958939 -color=purple,shape=square,flag=0,i=60260,u=0.9724754765129763,v=0.8598431190680944,w=0.5251303307557621,x=5.74004652341167 -color=red,shape=square,flag=1,i=60283,u=0.8217857343122882,v=0.4724766569907044,w=0.48985911924632036,x=5.7550665953206215 -color=red,shape=triangle,flag=1,i=60293,u=0.4174436320443585,v=0.0818948555259601,w=0.4897210966784838,x=3.4750819465734133 -color=red,shape=circle,flag=0,i=60312,u=0.5290365243844631,v=0.45561976370868545,w=0.4791553279544811,x=3.5030805602028288 -color=yellow,shape=triangle,flag=0,i=60318,u=0.46752802370690716,v=0.6437835090336509,w=0.4645950031622949,x=4.410657423983349 -color=yellow,shape=circle,flag=1,i=60322,u=0.33938525828694033,v=0.4927467967496709,w=0.5148269280658283,x=3.2759392762935633 -color=purple,shape=square,flag=1,i=60342,u=0.11858156996972902,v=0.9689500949945644,w=0.5264544801289793,x=4.57981700555419 -color=red,shape=square,flag=0,i=60345,u=0.10725828146672467,v=0.5671134023892811,w=0.48131623171961896,x=3.773835861866853 -color=blue,shape=square,flag=0,i=60348,u=0.29498028590741554,v=0.9111176851694784,w=0.5117503689661391,x=3.575451838518792 -color=red,shape=square,flag=0,i=60352,u=0.6599065507527369,v=0.08582757282514442,w=0.4775027095988978,x=4.576116562350592 -color=yellow,shape=triangle,flag=1,i=60362,u=0.9668415009904369,v=0.391203983395248,w=0.4682704916987754,x=4.706540200035216 -color=red,shape=triangle,flag=1,i=60372,u=0.8175755771981199,v=0.36754896811257676,w=0.4908202755762249,x=5.34889526826722 -color=blue,shape=triangle,flag=0,i=60411,u=0.5571999022273035,v=0.9628178133371085,w=0.4888087442471147,x=4.597365840125252 -color=red,shape=triangle,flag=0,i=60413,u=0.9408621238999432,v=0.603858306633542,w=0.4729294664039747,x=4.288024716188104 -color=blue,shape=triangle,flag=1,i=60419,u=0.2052972681365467,v=0.4362325116244431,w=0.49139311799476687,x=5.019068470514523 -color=red,shape=square,flag=0,i=60423,u=0.59381746802724,v=0.595260563747876,w=0.5017081107203388,x=6.094864844860684 -color=green,shape=triangle,flag=0,i=60430,u=0.8955355233771013,v=0.19218078824011886,w=0.4893653739016167,x=4.533760129865052 -color=red,shape=triangle,flag=0,i=60443,u=0.05696209730598478,v=0.2588562361734128,w=0.47520079488500244,x=3.964653850358843 -color=purple,shape=square,flag=0,i=60475,u=0.2830105981314246,v=0.1961643783533038,w=0.5217528894561918,x=5.50138828879668 -color=red,shape=triangle,flag=1,i=60491,u=0.4396484351555848,v=0.6148028100358339,w=0.47826159551440234,x=4.6085143798648085 -color=red,shape=square,flag=1,i=60498,u=0.19095923398793668,v=0.12027518718769892,w=0.5224695416498987,x=3.5244114880365216 -color=yellow,shape=square,flag=1,i=60499,u=0.9169751356807347,v=0.010467376639013648,w=0.519285668323052,x=6.256884862925893 -color=red,shape=circle,flag=0,i=60515,u=0.9849290487302916,v=1.004163590473081,w=0.4749339818918633,x=3.265781671299751 -color=red,shape=square,flag=1,i=60525,u=0.4230107948511078,v=0.6970638994945618,w=0.5293475768351691,x=5.59859575642475 -color=blue,shape=square,flag=1,i=60532,u=0.5654488582651724,v=0.16309904880804227,w=0.5062287771058848,x=5.578740309742421 -color=purple,shape=circle,flag=0,i=60534,u=0.04931802554582421,v=0.7314770503214695,w=0.4884183130029546,x=5.811049354827598 -color=red,shape=triangle,flag=1,i=60541,u=0.2779413333385813,v=0.16341649987902007,w=0.4815424217173877,x=5.467411398187516 -color=yellow,shape=circle,flag=1,i=60545,u=0.689556271739904,v=0.10784055865500419,w=0.5091532973255217,x=4.266690380912545 -color=purple,shape=square,flag=0,i=60564,u=0.6736399194722431,v=0.8166936455969278,w=0.5236412485915501,x=4.6300408702139535 -color=red,shape=square,flag=0,i=60577,u=0.006960154447920863,v=0.18854556453965643,w=0.5294222230141536,x=5.453903226031674 -color=green,shape=triangle,flag=0,i=60581,u=0.9459083712699817,v=0.35490705899504815,w=0.4948107369495015,x=5.052121599496897 -color=red,shape=triangle,flag=0,i=60586,u=0.10764049505353857,v=0.0956138006790711,w=0.49511874551605556,x=5.555512700444382 -color=blue,shape=triangle,flag=1,i=60594,u=0.7323865110586989,v=0.3551990668965117,w=0.4914224346805326,x=4.775053747320865 -color=red,shape=circle,flag=0,i=60596,u=0.22438662961075506,v=0.29079315097619196,w=0.48122732502564625,x=4.171483480337229 -color=blue,shape=circle,flag=1,i=60601,u=0.6106848977747265,v=0.7876941758796613,w=0.5312822823466608,x=6.188801400604075 -color=red,shape=square,flag=0,i=60620,u=0.6400543618312639,v=0.24143436548567,w=0.5220150168760616,x=4.339685182825391 -color=red,shape=square,flag=1,i=60623,u=0.41027956538631183,v=0.9518356784881522,w=0.5119945310324343,x=4.700489664112699 -color=blue,shape=square,flag=0,i=60637,u=0.6838808494976234,v=0.5358387115323204,w=0.5064096875079349,x=4.742006631924768 -color=yellow,shape=square,flag=1,i=60640,u=0.34755132599157,v=0.8609430106915147,w=0.49720119277707453,x=5.633606132762609 -color=red,shape=triangle,flag=0,i=60650,u=0.6423624245958586,v=0.8024822218116717,w=0.48060748553357413,x=5.45092641049676 -color=red,shape=square,flag=1,i=60678,u=0.07629736340083904,v=0.8642438572119743,w=0.5168411288934797,x=3.517023458390583 -color=red,shape=square,flag=0,i=60679,u=0.07367362091358842,v=0.8983540537729365,w=0.5154650442185652,x=5.893253759620215 -color=red,shape=circle,flag=0,i=60727,u=0.016614927787423794,v=-0.04547000496606706,w=0.4849661234279177,x=6.355241846601054 -color=purple,shape=triangle,flag=0,i=60751,u=0.038533667680094474,v=0.20724377674189576,w=0.46603362985770486,x=5.429067161296178 -color=purple,shape=square,flag=0,i=60762,u=0.8497140275956977,v=0.9763779461261324,w=0.5399639176626764,x=7.5129161373355435 -color=red,shape=square,flag=0,i=60778,u=0.9731686307900813,v=0.40459426277744837,w=0.5040836926411789,x=6.5617114075336636 -color=red,shape=triangle,flag=0,i=60787,u=0.9795834792511154,v=0.01684817576288289,w=0.47861205080311614,x=3.7273739440080966 -color=red,shape=square,flag=1,i=60788,u=0.5444699705095233,v=0.6098074518426574,w=0.5037006414065412,x=3.5432373534458192 -color=purple,shape=square,flag=0,i=60798,u=0.9682023322453407,v=0.6346154333987898,w=0.5308698174084637,x=5.384724936478967 -color=purple,shape=circle,flag=0,i=60800,u=0.19550633393403594,v=0.338729312866061,w=0.49173512204007286,x=4.807989215253477 -color=green,shape=triangle,flag=0,i=60812,u=0.13133219197811485,v=0.6336708439984976,w=0.4954725307705143,x=5.275380054723782 -color=red,shape=square,flag=1,i=60817,u=0.652937670494351,v=0.4175649118056507,w=0.506289718755797,x=5.4752026302174635 -color=green,shape=triangle,flag=0,i=60818,u=0.07282458371524225,v=0.20417586575315572,w=0.49807778054674634,x=5.090679675026739 -color=red,shape=square,flag=0,i=60820,u=0.2516239640465522,v=0.24859650062343153,w=0.5098131578750846,x=4.414335638772218 -color=red,shape=circle,flag=1,i=60830,u=0.8142117218255019,v=0.8873630457342749,w=0.4903123237152411,x=7.190824475389927 -color=purple,shape=triangle,flag=0,i=60876,u=0.2416322662263728,v=0.30381167794267727,w=0.47021632219011344,x=4.1054767902279865 -color=red,shape=triangle,flag=0,i=60877,u=0.5862793977888927,v=0.8002261969651429,w=0.4900026313553891,x=4.973786421586735 -color=red,shape=square,flag=1,i=60888,u=0.7023934775730509,v=0.7021373087346692,w=0.5120889673210968,x=4.647736820752722 -color=purple,shape=square,flag=0,i=60908,u=0.2619271896052734,v=0.5404501025713073,w=0.515012193771817,x=4.164463504439264 -color=red,shape=square,flag=0,i=60921,u=0.6425660122558448,v=0.6695126675524524,w=0.52483335391632,x=5.731219329753633 -color=red,shape=circle,flag=0,i=60935,u=0.44797253232491463,v=0.42270944990698744,w=0.4899650743991284,x=5.09036197594088 -color=red,shape=triangle,flag=0,i=60946,u=0.8042902254720634,v=0.7166082669926087,w=0.49661375481353576,x=5.209323225833944 -color=orange,shape=triangle,flag=1,i=60950,u=0.5201915748923396,v=0.26754408712925837,w=0.5108516350911392,x=6.819727886144155 -color=orange,shape=triangle,flag=1,i=60960,u=0.904731906772507,v=0.9620610146052339,w=0.514950425722935,x=4.7406826739650265 -color=red,shape=triangle,flag=0,i=60985,u=0.3484291016880289,v=0.1783452957121321,w=0.5008003803252687,x=3.654103873966568 -color=yellow,shape=circle,flag=1,i=60986,u=0.17801517756216867,v=0.6008023288667509,w=0.5045357850698797,x=7.417381404988291 -color=red,shape=square,flag=0,i=61014,u=0.8485374895960776,v=0.9156155528971213,w=0.5086498143578984,x=6.3346179099081725 -color=purple,shape=triangle,flag=0,i=61025,u=0.7874902342591952,v=0.21665795000622023,w=0.4569266419562924,x=4.770474670295125 -color=red,shape=circle,flag=0,i=61028,u=0.18140494952400665,v=0.08866788385859563,w=0.49366355213393215,x=2.860607311875004 -color=green,shape=square,flag=0,i=61030,u=0.09133863193933855,v=0.694373715130335,w=0.5145616649789181,x=6.632328342374033 -color=red,shape=triangle,flag=0,i=61034,u=0.5248296551985476,v=0.8029863176823646,w=0.5127702749492332,x=3.912010138699948 -color=orange,shape=square,flag=0,i=61044,u=0.2898748045089715,v=0.8536701379191667,w=0.49890774503602914,x=6.149901939106962 -color=purple,shape=square,flag=0,i=61050,u=0.8448465595667581,v=0.5170364857814286,w=0.5042921422037655,x=5.18596154763907 -color=purple,shape=circle,flag=0,i=61055,u=0.25508956914459247,v=0.24024794821806583,w=0.504727953767809,x=3.8681131994737292 -color=green,shape=circle,flag=0,i=61059,u=0.2886442963069412,v=0.9418778015541577,w=0.49846086314124705,x=6.349863185330958 -color=red,shape=triangle,flag=0,i=61065,u=0.8575952324207371,v=0.6588020716675531,w=0.5207722049947101,x=4.2276328828804735 -color=green,shape=triangle,flag=0,i=61066,u=0.2662809669984314,v=0.1987284669605881,w=0.5057777398809051,x=3.3848005984338765 -color=red,shape=triangle,flag=1,i=61085,u=0.19488650871393232,v=0.4726402997083098,w=0.5138063121553798,x=5.165860778048057 -color=red,shape=triangle,flag=0,i=61087,u=0.3031556352264796,v=0.7196635061168956,w=0.51088090222633,x=6.1998207701112085 -color=orange,shape=square,flag=1,i=61094,u=0.8779403876123824,v=0.7798192554185158,w=0.49718772298242214,x=5.1018235586077365 -color=red,shape=circle,flag=0,i=61097,u=0.15548983287316043,v=0.10911602713099237,w=0.490617004397277,x=4.4318058511393055 -color=red,shape=triangle,flag=1,i=61099,u=0.6585576916445907,v=0.5338615856748484,w=0.5129113061633741,x=4.18244520719598 -color=yellow,shape=square,flag=0,i=61101,u=0.012536744410525325,v=0.2433144520608007,w=0.4990267345214811,x=6.126888840918949 -color=red,shape=square,flag=0,i=61116,u=0.9797924913789501,v=0.22232880990887227,w=0.5222487249549825,x=3.621860673676309 -color=red,shape=circle,flag=1,i=61127,u=0.3930768144390525,v=0.4554647978804084,w=0.4963411758276519,x=5.486692374627584 -color=red,shape=square,flag=0,i=61134,u=0.3067684059767384,v=0.9172846509418883,w=0.5267657540899479,x=3.866675043547861 -color=yellow,shape=square,flag=1,i=61151,u=0.8262122856166667,v=0.05980134224575373,w=0.5048474180113024,x=6.434022674428818 -color=red,shape=triangle,flag=1,i=61156,u=0.8912190721179941,v=0.0634747296927507,w=0.5196621111365651,x=4.26893774976731 -color=red,shape=circle,flag=0,i=61165,u=0.26669807742281604,v=0.2990826380900149,w=0.5032289635505375,x=4.004513394884534 -color=green,shape=square,flag=1,i=61168,u=0.8540259347627556,v=0.5321654340814977,w=0.5135082711211014,x=4.234551468444308 -color=yellow,shape=square,flag=1,i=61176,u=0.190434565438922,v=0.7654894204047193,w=0.49856498258069676,x=6.111066606323395 -color=yellow,shape=triangle,flag=1,i=61183,u=0.7015332343471989,v=0.8632199990272507,w=0.48495781664928933,x=5.063714991777166 -color=yellow,shape=square,flag=1,i=61190,u=0.5154372964414472,v=0.23924871976585527,w=0.49471251054831755,x=6.106156861066687 -color=green,shape=circle,flag=0,i=61203,u=0.4815355864808283,v=0.6144924765717046,w=0.4937778373680289,x=4.574622551809915 -color=blue,shape=circle,flag=0,i=61209,u=0.6708269149700532,v=0.49124797248493635,w=0.532411661628068,x=8.199510512113994 -color=blue,shape=circle,flag=0,i=61214,u=0.2664318774840565,v=0.8817824151982447,w=0.5288885391042243,x=4.750227751871143 -color=blue,shape=circle,flag=1,i=61220,u=0.5666796420060147,v=0.44228918409920337,w=0.5324450569077825,x=6.2270721922416366 -color=red,shape=circle,flag=1,i=61224,u=0.01752009255670739,v=0.012003433338529424,w=0.49818512336643095,x=5.744755900379748 -color=blue,shape=triangle,flag=1,i=61278,u=0.6153931662265688,v=0.4457963077074518,w=0.4768612589726274,x=7.427865684424334 -color=yellow,shape=triangle,flag=1,i=61281,u=0.6788862712314652,v=0.4116741778150316,w=0.4855399156424676,x=4.248117990214868 -color=purple,shape=square,flag=0,i=61295,u=0.5062418674625349,v=0.08904801167462162,w=0.5180705629762576,x=3.497194833123453 -color=green,shape=square,flag=0,i=61301,u=0.6238365472963749,v=0.8736654333706457,w=0.5035753695801006,x=5.624999791044096 -color=yellow,shape=square,flag=1,i=61313,u=0.2517342409381401,v=0.5607854671328018,w=0.4863569738074924,x=5.342195972264192 -color=red,shape=square,flag=0,i=61318,u=0.9505419452167662,v=0.679779407076754,w=0.521654288615688,x=5.3809428613227395 -color=red,shape=square,flag=1,i=61329,u=0.6047566003389032,v=0.7766057306299667,w=0.527040506395118,x=5.507599575188592 -color=blue,shape=triangle,flag=0,i=61334,u=0.337316210469482,v=0.6267681207152156,w=0.47353032471912027,x=5.062344070600751 -color=red,shape=triangle,flag=1,i=61337,u=0.016161402703349093,v=0.8548922014389212,w=0.5298979679549719,x=3.2641953115109756 -color=red,shape=circle,flag=0,i=61339,u=0.02567761097810839,v=-0.03655897410556717,w=0.4926471028706084,x=3.0354622575591432 -color=blue,shape=triangle,flag=0,i=61351,u=0.7932092952421166,v=0.4380255564355239,w=0.4802627712178217,x=5.546435385768809 -color=red,shape=square,flag=0,i=61353,u=0.9204264182079643,v=0.4018584502141255,w=0.5243590791041091,x=3.5849988439432985 -color=yellow,shape=circle,flag=0,i=61357,u=0.16587039072607757,v=0.663664050422724,w=0.4987946747111364,x=5.291600456899086 -color=green,shape=triangle,flag=0,i=61362,u=0.7299202050218979,v=0.6552680850374167,w=0.5003637812412703,x=4.886295254176624 -color=yellow,shape=square,flag=1,i=61366,u=0.21811593993643819,v=0.17547386290873968,w=0.487260370873267,x=5.249231279209982 -color=red,shape=square,flag=1,i=61369,u=0.5058724526255617,v=0.6129664323550472,w=0.5254787222987124,x=7.663968872616754 -color=red,shape=circle,flag=1,i=61415,u=0.9676760423225215,v=1.0475429032640997,w=0.4986227555350541,x=3.577868740338316 -color=red,shape=square,flag=1,i=61422,u=0.11886395244680237,v=0.3900272500889973,w=0.5234791847519441,x=3.072662158492658 -color=red,shape=circle,flag=0,i=61424,u=0.09936195107484114,v=0.05744379933681094,w=0.5033330692596379,x=5.643635287839078 -color=blue,shape=triangle,flag=0,i=61425,u=0.5771409404126412,v=0.11760707686727356,w=0.48475608421831184,x=4.460017797219344 -color=red,shape=triangle,flag=0,i=61426,u=0.762804204487993,v=0.7809558764276042,w=0.5063507913255922,x=5.145310374210368 -color=red,shape=square,flag=0,i=61431,u=0.900799522559889,v=0.38618958860399644,w=0.5222527711160118,x=4.961621920724561 -color=green,shape=triangle,flag=0,i=61444,u=0.5270179878980258,v=0.10052818496180849,w=0.5023819910843416,x=3.4923362070071136 -color=red,shape=circle,flag=1,i=61457,u=0.6566857444348829,v=0.6729806090763196,w=0.5038144544580992,x=6.193904013666604 -color=blue,shape=triangle,flag=0,i=61472,u=0.1911714345722222,v=0.7715257323545277,w=0.49130390736052193,x=4.422388311122001 -color=yellow,shape=square,flag=1,i=61475,u=0.5171052700708267,v=0.25554476579258234,w=0.48970608678347916,x=5.036532735831131 -color=red,shape=square,flag=1,i=61479,u=0.2610815163955674,v=0.503074712438503,w=0.517828018995584,x=3.973960441261171 -color=yellow,shape=triangle,flag=1,i=61483,u=0.519313490412225,v=0.87933187127998,w=0.48771296185269913,x=6.534530792176736 -color=orange,shape=square,flag=0,i=61503,u=0.6197602176490566,v=0.7795540660347835,w=0.4963122713166586,x=7.390044813411266 -color=red,shape=circle,flag=0,i=61525,u=0.48739846973074064,v=0.465361757932242,w=0.5023423634876732,x=4.630956041174142 -color=yellow,shape=triangle,flag=1,i=61527,u=0.12739507818779683,v=0.1173985798756847,w=0.4952982067434773,x=3.944866416793379 -color=red,shape=triangle,flag=1,i=61535,u=0.33804896935526785,v=0.03732253381609851,w=0.48239195355097997,x=5.793156035393705 -color=red,shape=square,flag=0,i=61548,u=0.4651417535641841,v=0.07133907568851139,w=0.530744518298765,x=4.743418278295491 -color=blue,shape=square,flag=1,i=61549,u=0.3707408775242743,v=0.49362478651153885,w=0.49587747960735457,x=3.9321869738237925 -color=orange,shape=square,flag=0,i=61568,u=0.8888385367297386,v=0.34270045850419917,w=0.4933264096015811,x=7.229833779056122 -color=red,shape=square,flag=0,i=61579,u=0.8152304447693551,v=0.8464616377854375,w=0.5200260049466741,x=6.1930063800980735 -color=orange,shape=circle,flag=0,i=61584,u=0.9799542974777731,v=0.5631117008263572,w=0.5083318815358503,x=6.151762981660114 -color=red,shape=circle,flag=0,i=61596,u=0.8390768284706766,v=0.8355328733352815,w=0.4910259931175871,x=2.7763269232413346 -color=blue,shape=square,flag=0,i=61600,u=0.9401414287917517,v=0.6556333863888074,w=0.48738484797112674,x=6.331561672320703 -color=purple,shape=triangle,flag=1,i=61628,u=0.9608504870227901,v=0.8879020064555192,w=0.45513052916821123,x=4.546442239319432 -color=red,shape=square,flag=1,i=61643,u=0.33341608047187854,v=0.9146588007328265,w=0.5248379423489885,x=5.5586352879388565 -color=green,shape=square,flag=1,i=61649,u=0.6473958664771461,v=0.43314657244792587,w=0.4977987270169415,x=3.9042555214124284 -color=red,shape=triangle,flag=0,i=61659,u=0.8610127571485326,v=0.9753251811562222,w=0.48505406455789435,x=5.701706364739529 -color=yellow,shape=triangle,flag=1,i=61664,u=0.019966081909734368,v=0.7900350537304219,w=0.49414474669405634,x=5.625946820854317 -color=red,shape=square,flag=0,i=61669,u=0.570969903227153,v=0.1173371837329994,w=0.5238531001038308,x=5.2480280636640835 -color=yellow,shape=square,flag=1,i=61672,u=0.8139158540272159,v=0.13388403451215614,w=0.4884567964312617,x=5.932513833114542 -color=red,shape=triangle,flag=0,i=61688,u=0.48028863400702104,v=0.7865251623168836,w=0.4831142966051367,x=5.24616219807332 -color=red,shape=square,flag=0,i=61697,u=0.23046740317570558,v=0.15606819151927054,w=0.5272004102723183,x=4.411628790173593 -color=red,shape=square,flag=0,i=61702,u=0.1546280693721046,v=0.8913675994706256,w=0.5225725331373712,x=5.4333335302840196 -color=red,shape=triangle,flag=0,i=61708,u=0.5471240843420443,v=0.3327729472814235,w=0.469663504191194,x=3.6272696237402733 -color=yellow,shape=triangle,flag=0,i=61714,u=0.9429733797903551,v=0.19709094011834438,w=0.49437998774077196,x=5.047868963299641 -color=orange,shape=circle,flag=1,i=61716,u=0.30825285073289554,v=0.11497565384418063,w=0.5108191806126069,x=4.703363374380971 -color=red,shape=square,flag=1,i=61737,u=0.6510434435597998,v=0.5456212090941364,w=0.5150287503883463,x=5.936227367102567 -color=red,shape=square,flag=0,i=61809,u=0.9965013982405774,v=0.6809694313684723,w=0.5209128718546598,x=4.935376841731837 -color=yellow,shape=triangle,flag=1,i=61810,u=0.07792819621552127,v=0.26181505152828544,w=0.4933310003789433,x=4.609218090023302 -color=red,shape=circle,flag=0,i=61815,u=0.1848788266184207,v=0.1249622316055749,w=0.5134887995047095,x=2.966850998643373 -color=red,shape=circle,flag=0,i=61816,u=0.449212787550498,v=0.38322795122897707,w=0.5150248112002551,x=5.009587731920402 -color=blue,shape=circle,flag=1,i=61818,u=0.8534363554971895,v=0.2263431230033489,w=0.5410603220327522,x=4.816601810884746 -color=red,shape=square,flag=0,i=61833,u=0.4451879247858581,v=0.11726299169004328,w=0.5300535469286223,x=4.487810030799225 -color=purple,shape=circle,flag=0,i=61835,u=0.6511017701858289,v=0.19418601516093892,w=0.5153960480448987,x=7.225402183189696 -color=red,shape=triangle,flag=0,i=61836,u=0.004171787933958004,v=0.5663383523540735,w=0.4865556516253405,x=7.118214175470552 -color=red,shape=circle,flag=0,i=61853,u=0.345559838619691,v=0.2508853560238945,w=0.503913744966538,x=5.44463784456043 -color=green,shape=circle,flag=1,i=61869,u=0.817380657759987,v=0.10544621627598816,w=0.48973381007222,x=3.2584664923826057 -color=red,shape=circle,flag=1,i=61871,u=0.08366616020436324,v=0.10742385561455178,w=0.5041942028737925,x=5.588329685146665 -color=red,shape=circle,flag=0,i=61884,u=0.9599580117658257,v=0.8956373603658663,w=0.510071088152013,x=5.625943395628897 -color=red,shape=square,flag=0,i=61891,u=0.36576069934033495,v=0.35809365200980947,w=0.5232769997016458,x=6.932004575561117 -color=yellow,shape=square,flag=1,i=61897,u=0.13464086236823825,v=0.15650924065865113,w=0.4835104953095868,x=5.889263490765791 -color=orange,shape=square,flag=0,i=61918,u=0.18640602854348598,v=0.2672271622271526,w=0.5030058785289381,x=4.326083882616069 -color=red,shape=triangle,flag=0,i=61925,u=0.04746071475927671,v=0.5367543900755519,w=0.48581705431478733,x=5.630710628608316 -color=red,shape=triangle,flag=1,i=61936,u=0.356381744385441,v=0.26813337819748007,w=0.48971389404584026,x=4.580274896046053 -color=blue,shape=circle,flag=0,i=61938,u=0.5295366501170954,v=0.4735172172627693,w=0.5370203616295891,x=6.7412581801620055 -color=purple,shape=circle,flag=0,i=61954,u=0.9353238472782092,v=0.9124694467231034,w=0.5157439552390941,x=3.83882578956262 -color=purple,shape=circle,flag=1,i=61980,u=0.7867447915994401,v=0.17554390367142436,w=0.5114776859288765,x=5.478594520165248 -color=yellow,shape=triangle,flag=0,i=61994,u=0.9890464545334569,v=0.8023850293870773,w=0.4988618909788258,x=4.166279351226079 -color=red,shape=square,flag=1,i=61995,u=0.02062837024103603,v=0.2984043381983892,w=0.5295629576749717,x=5.881978788925136 -color=purple,shape=circle,flag=0,i=61997,u=0.46741352656817403,v=0.018808978834384593,w=0.5075786262030751,x=6.149918814819884 -color=green,shape=square,flag=0,i=62009,u=0.3585964350991907,v=0.1941680966793713,w=0.4991629820690804,x=4.966840885787054 -color=blue,shape=square,flag=0,i=62013,u=0.5622781351587085,v=0.8052890967176738,w=0.493901760566586,x=3.976849572787254 -color=green,shape=circle,flag=0,i=62017,u=0.34006592038936656,v=0.3204413264209244,w=0.48229410183663773,x=5.237564677155148 -color=blue,shape=triangle,flag=1,i=62019,u=0.0426531732390083,v=0.15171870407048826,w=0.4948472041070654,x=2.8507447122043423 -color=green,shape=square,flag=1,i=62029,u=0.2835571115639437,v=0.47155549882567127,w=0.49623530121712217,x=6.028679636526424 -color=purple,shape=square,flag=0,i=62043,u=0.704537451002878,v=0.5229872604390595,w=0.5297127404570943,x=4.648907585804309 -color=red,shape=circle,flag=0,i=62050,u=0.5643784714302795,v=0.5012497913882893,w=0.518136912453673,x=3.925065918220419 -color=red,shape=square,flag=0,i=62062,u=0.9531264061878373,v=0.974142690969671,w=0.523931211666261,x=3.367303302553521 -color=purple,shape=triangle,flag=0,i=62075,u=0.6234285019734616,v=0.9419453626430792,w=0.4581269392232534,x=5.1527756955510355 -color=purple,shape=square,flag=0,i=62093,u=0.15205925058803949,v=0.6150394904958729,w=0.526110447227855,x=4.1154186380623665 -color=red,shape=triangle,flag=0,i=62097,u=0.908145221611164,v=0.12983617465009645,w=0.4846339020774075,x=4.446892273216744 -color=blue,shape=square,flag=0,i=62101,u=0.4543743951049868,v=0.11843388872347449,w=0.4992715642172183,x=5.136386084128629 -color=red,shape=triangle,flag=0,i=62108,u=0.167357771442878,v=0.968288578412845,w=0.48428631555807067,x=3.187524544500509 -color=red,shape=circle,flag=0,i=62121,u=0.5979099497775078,v=0.6794539039958924,w=0.5242018264009921,x=5.280042401144994 -color=blue,shape=square,flag=1,i=62126,u=0.036113790200399065,v=0.16910869536960704,w=0.502918336080108,x=1.8672835436541029 -color=green,shape=triangle,flag=0,i=62134,u=0.6048830568385326,v=0.729874240054699,w=0.5159393385770069,x=4.257994071557856 -color=red,shape=square,flag=1,i=62154,u=0.8775160541846945,v=0.9806110363238945,w=0.5327824889664153,x=3.3435869551092536 -color=green,shape=square,flag=0,i=62166,u=0.4330001902467715,v=0.6376378265760058,w=0.49276627036701437,x=5.9411261297465 -color=yellow,shape=triangle,flag=1,i=62167,u=0.5614588863279815,v=0.7608824536408751,w=0.5037189316894571,x=4.821830950875217 -color=red,shape=square,flag=0,i=62188,u=0.40744592792362677,v=0.6744828103129084,w=0.5302394945174181,x=6.231715197692458 -color=red,shape=triangle,flag=0,i=62200,u=0.23988771374155948,v=0.8533403056991652,w=0.49368384416477895,x=6.4310693402923365 -color=orange,shape=triangle,flag=1,i=62204,u=0.05483042340149369,v=0.06378038360469551,w=0.5298994743718047,x=6.402343677154847 -color=red,shape=circle,flag=0,i=62212,u=0.11868607588693214,v=0.16008078324282432,w=0.5230138690384019,x=5.573261510373027 -color=red,shape=square,flag=0,i=62235,u=0.05781825160678089,v=0.9812159629061238,w=0.528849248056283,x=3.6240024153043655 -color=yellow,shape=triangle,flag=1,i=62256,u=0.18729558177233296,v=0.9635241693178325,w=0.5067570914450856,x=6.8510085898613235 -color=red,shape=square,flag=1,i=62261,u=0.42032239218584777,v=0.41881499558405855,w=0.5318614609301553,x=3.8751212362484946 -color=red,shape=triangle,flag=0,i=62284,u=0.6219982876210621,v=0.6405049256535393,w=0.48168248154296756,x=6.218527099708347 -color=red,shape=circle,flag=0,i=62310,u=0.8796648595608879,v=0.8960933890140106,w=0.5224014162804669,x=5.680682297922847 -color=red,shape=triangle,flag=0,i=62316,u=0.19184117907032205,v=0.06402197475999527,w=0.4766580720878818,x=5.502526429341152 -color=red,shape=circle,flag=1,i=62317,u=0.24245419168304982,v=0.17592089644676354,w=0.5234713664732507,x=3.3228402967788644 -color=red,shape=triangle,flag=0,i=62333,u=0.3081433543019789,v=0.17475252323788693,w=0.4807335630203863,x=3.3559216335905027 -color=red,shape=square,flag=0,i=62374,u=0.05127427063072498,v=0.5098696172787879,w=0.5373294457332315,x=4.430513110438568 -color=red,shape=triangle,flag=1,i=62375,u=0.23661559056090142,v=0.9855861026865775,w=0.47743130333143724,x=4.190599069091753 -color=orange,shape=square,flag=1,i=62383,u=0.023685079195092218,v=0.026937947780171778,w=0.4919021407386805,x=4.627379567957559 -color=purple,shape=circle,flag=0,i=62386,u=0.6352835250630797,v=0.9147156642130767,w=0.5234945884182443,x=5.798712173600094 -color=red,shape=triangle,flag=1,i=62404,u=0.058402282344989676,v=0.532894108788653,w=0.4836000966532128,x=6.7646632689431385 -color=orange,shape=square,flag=1,i=62415,u=0.623264816515352,v=0.01029168112753609,w=0.49028138372204577,x=4.64314623932384 -color=yellow,shape=triangle,flag=1,i=62420,u=0.5922537439254313,v=0.7931024659310686,w=0.5174533409684671,x=7.0776406088871004 -color=red,shape=triangle,flag=1,i=62435,u=0.6566103647142346,v=0.3093046962173661,w=0.4890548784170205,x=4.430438008663087 -color=yellow,shape=circle,flag=1,i=62440,u=0.9195091050599192,v=0.6284006272763784,w=0.4910750656033562,x=5.9488601492085875 -color=orange,shape=square,flag=1,i=62444,u=0.8198924252182687,v=0.9403939619690145,w=0.49483627897599086,x=5.385190500599406 -color=red,shape=circle,flag=1,i=62446,u=0.25695039848198686,v=0.17690972548675077,w=0.5107397978022713,x=5.379986286167665 -color=purple,shape=square,flag=1,i=62450,u=0.4679304831122051,v=0.2520485779531624,w=0.5265733936128689,x=4.523746787611793 -color=red,shape=triangle,flag=0,i=62453,u=0.2719444687249306,v=0.2727615921669144,w=0.49218570449784094,x=4.132534482868859 -color=red,shape=square,flag=0,i=62460,u=0.1095132438049864,v=0.5990961326315646,w=0.5487367811634232,x=5.30813078014137 -color=red,shape=square,flag=0,i=62477,u=0.1681727567517537,v=0.459575124418405,w=0.5399539027694862,x=3.0640498749206455 -color=red,shape=square,flag=0,i=62521,u=0.9394264527956095,v=0.35691204119685405,w=0.5447973167051736,x=5.509032937560587 -color=yellow,shape=circle,flag=1,i=62544,u=0.6372716681357813,v=0.23390888746555438,w=0.49294978983371884,x=4.412810738362551 -color=red,shape=circle,flag=0,i=62551,u=0.01233752976713054,v=-0.0057486829804792375,w=0.5126452670422521,x=5.570141909643815 -color=yellow,shape=triangle,flag=1,i=62560,u=0.9396323804778914,v=0.085811621835723,w=0.5175845777084611,x=5.27077636400634 -color=red,shape=circle,flag=0,i=62575,u=0.07034914442806128,v=-0.004086988597465882,w=0.5238122498045377,x=3.797765987178355 -color=blue,shape=square,flag=0,i=62613,u=0.6811858095759061,v=0.7887531811761556,w=0.49361127715826314,x=4.355142569541913 -color=purple,shape=circle,flag=0,i=62617,u=0.714587824554388,v=0.9313613753470926,w=0.5194524554371356,x=4.015819963177061 -color=purple,shape=square,flag=0,i=62632,u=0.3985259326969677,v=0.5444232350161109,w=0.5314123884676734,x=4.492798714605738 -color=red,shape=square,flag=0,i=62647,u=0.5291260503620531,v=0.013794840772883843,w=0.5407737287180777,x=5.102488976688594 -color=red,shape=square,flag=1,i=62683,u=0.11355392145660848,v=0.8669393022115569,w=0.5320901384179496,x=4.356001846362568 -color=red,shape=square,flag=1,i=62698,u=0.653364670305655,v=0.6124356991252056,w=0.5287119902302228,x=4.007826612460133 -color=red,shape=circle,flag=0,i=62701,u=0.003951253933919596,v=0.04522770982418345,w=0.5258906687903119,x=3.7990821290093546 -color=purple,shape=triangle,flag=0,i=62716,u=0.8823544350221625,v=0.1118404389612665,w=0.4586347777216839,x=3.2594503465151825 -color=purple,shape=triangle,flag=0,i=62730,u=0.636759249610899,v=0.06469280402168953,w=0.46135189192740805,x=4.312389513007878 -color=red,shape=triangle,flag=0,i=62735,u=0.8189085838177863,v=0.9399067495737984,w=0.4617192345326423,x=4.849007284652777 -color=red,shape=triangle,flag=0,i=62749,u=0.6703354930086899,v=0.5368154670226469,w=0.4574999605240849,x=3.207734868653835 -color=red,shape=square,flag=1,i=62768,u=0.9551936046838428,v=0.9319414615167267,w=0.5190503305114829,x=5.846548662129798 -color=red,shape=circle,flag=1,i=62777,u=0.18133834128167947,v=0.26477984785201514,w=0.531294217269015,x=6.008486744113405 -color=red,shape=circle,flag=0,i=62780,u=0.5170426364721215,v=0.6036794769162875,w=0.5269285591637343,x=4.583458820391482 -color=green,shape=triangle,flag=0,i=62782,u=0.42042232286231107,v=0.9347763946491507,w=0.5040717113848027,x=7.523280788788996 -color=yellow,shape=square,flag=1,i=62797,u=0.9311901039381898,v=0.5711913554470899,w=0.49929217899612793,x=4.948899182820194 -color=red,shape=circle,flag=0,i=62830,u=0.8526471187916753,v=0.8809963270663802,w=0.5182405502050984,x=4.179081514411876 -color=red,shape=square,flag=1,i=62837,u=0.5492872519519799,v=0.330190328959171,w=0.5273996033970642,x=5.290135392615926 -color=red,shape=square,flag=0,i=62841,u=0.34626047307667374,v=0.892390856973551,w=0.5304223359053766,x=3.402558165132803 -color=green,shape=square,flag=0,i=62844,u=0.18924796767097984,v=0.8273744526178146,w=0.4920170035408091,x=6.040914722549808 -color=red,shape=square,flag=0,i=62856,u=0.021636620168551723,v=0.7236946094748882,w=0.5284752005412547,x=5.677699797339172 -color=green,shape=circle,flag=0,i=62882,u=0.9295860315045217,v=0.025690266107089244,w=0.497645272785663,x=5.320746340884946 -color=yellow,shape=triangle,flag=1,i=62884,u=0.8422450133883254,v=0.7184760862620894,w=0.517631549601741,x=4.6335430681225125 -color=blue,shape=triangle,flag=0,i=62890,u=0.9435960887336685,v=0.16011742032923715,w=0.5041171987880846,x=4.723921873053907 -color=red,shape=circle,flag=0,i=62903,u=0.6229907355548229,v=0.6089807098214721,w=0.5003728523104544,x=4.489645633365675 -color=red,shape=square,flag=0,i=62910,u=0.9332192658756376,v=0.33365715523135997,w=0.5234511225329016,x=3.785653711839109 -color=red,shape=square,flag=0,i=62920,u=0.43226258201365564,v=0.5011363797109236,w=0.5277935121014361,x=5.322289568074705 -color=red,shape=square,flag=1,i=62923,u=0.4729688221358348,v=0.8082247750242778,w=0.5273715962644718,x=4.643643565339712 -color=blue,shape=circle,flag=1,i=62935,u=0.18167566189367645,v=0.7569900365744251,w=0.538237704000588,x=8.127688766703892 -color=yellow,shape=triangle,flag=1,i=62937,u=0.22154114504521083,v=0.340772002724789,w=0.5207086040146836,x=6.4729265882176135 -color=purple,shape=triangle,flag=1,i=62945,u=0.21555300092636231,v=0.20483990731212587,w=0.4562467436503796,x=4.525005146165923 -color=orange,shape=triangle,flag=0,i=62947,u=0.14478704880216064,v=0.2044324703382988,w=0.5394246020147753,x=5.651896509979963 -color=blue,shape=square,flag=1,i=62950,u=0.6178240188407061,v=0.9944428415377913,w=0.4852047757312502,x=2.718796906504569 -color=purple,shape=triangle,flag=0,i=62958,u=0.04184135931479238,v=0.4391855754156955,w=0.45360908771268516,x=4.924092734588453 -color=red,shape=square,flag=1,i=62971,u=0.10046091286823744,v=0.8609250387942977,w=0.5180430599900656,x=5.992000469626208 -color=red,shape=square,flag=0,i=62973,u=0.7424499126672801,v=0.1809899807448302,w=0.519415823485699,x=6.852372532872102 -color=red,shape=square,flag=0,i=62976,u=0.7443486017365128,v=0.48920301606010896,w=0.5234426858165389,x=5.039298499368262 -color=red,shape=square,flag=1,i=62992,u=0.9146580735998954,v=0.24536011183661321,w=0.5211570622432113,x=4.766820404263631 -color=blue,shape=circle,flag=0,i=63033,u=0.5305454206207826,v=0.8200238314591863,w=0.5347077688264033,x=4.591968684117361 -color=purple,shape=square,flag=0,i=63035,u=0.32005025763871653,v=0.15647470360006588,w=0.5167848779664501,x=6.684007339790288 -color=purple,shape=square,flag=0,i=63039,u=0.15240895214791716,v=0.29919244949961166,w=0.5121863211192852,x=6.159969568372798 -color=yellow,shape=square,flag=1,i=63049,u=0.6828108211160484,v=0.4015796847989789,w=0.49659371409731,x=5.257250967168765 -color=red,shape=triangle,flag=1,i=63057,u=0.6919746500336635,v=0.055960241491301965,w=0.5063304835655412,x=3.5035930223060276 -color=yellow,shape=circle,flag=1,i=63063,u=0.11616430991193993,v=0.5887832221524038,w=0.4964918954928837,x=6.3899289491183024 -color=red,shape=triangle,flag=1,i=63071,u=0.018672373269410625,v=0.9092165171697827,w=0.5118839892370847,x=4.722531198828153 -color=red,shape=square,flag=0,i=63072,u=0.8427844846500919,v=0.5992584871080688,w=0.5204742345347062,x=4.173435918614957 -color=red,shape=square,flag=0,i=63092,u=0.41951588383617777,v=0.03589601186018754,w=0.516942061824854,x=4.8376214446814565 -color=red,shape=triangle,flag=0,i=63096,u=0.7529650295448971,v=0.9431215182519007,w=0.49788731296415195,x=4.5347574004159545 -color=red,shape=circle,flag=0,i=63099,u=0.9309288783393869,v=0.8730077851333838,w=0.5076944717355235,x=5.654391605110433 -color=red,shape=circle,flag=0,i=63113,u=0.1033485563735913,v=0.06697824662028311,w=0.5055526799192447,x=3.517999338707257 -color=red,shape=circle,flag=1,i=63116,u=0.09384641871081734,v=0.08801379322138762,w=0.5014132780158835,x=3.993779177395526 -color=purple,shape=triangle,flag=0,i=63123,u=0.8961539423393202,v=0.7906187187333196,w=0.4567045808453017,x=5.149069214549051 -color=yellow,shape=triangle,flag=1,i=63148,u=0.9844731667969369,v=0.33541222586489206,w=0.5325186683372911,x=3.9812266558026486 -color=blue,shape=triangle,flag=0,i=63153,u=0.6735264887492048,v=0.39303923267692786,w=0.4986446566249354,x=6.201349714039229 -color=purple,shape=triangle,flag=1,i=63156,u=0.9714046347882829,v=0.27764276534699883,w=0.4597202347461114,x=4.659991375203884 -color=green,shape=triangle,flag=0,i=63165,u=0.6072741742180652,v=0.13442242488002998,w=0.4916312823761641,x=4.704378970892795 -color=red,shape=square,flag=1,i=63185,u=0.650261949898459,v=0.9794670276459893,w=0.5098135457039272,x=5.180812607593896 -color=red,shape=triangle,flag=0,i=63186,u=0.5251361946156848,v=0.2544468570870363,w=0.49071187482834566,x=4.943535099881426 -color=green,shape=circle,flag=0,i=63192,u=0.4628765932777914,v=0.5009559466597028,w=0.4792149363823281,x=4.479643917875211 -color=purple,shape=square,flag=0,i=63196,u=0.6560744766739839,v=0.17830975975236907,w=0.5042125314907943,x=5.985763097936512 -color=red,shape=circle,flag=1,i=63204,u=0.7164135106143265,v=0.6830955315025736,w=0.4878851428933129,x=3.775819536462746 -color=yellow,shape=triangle,flag=1,i=63220,u=0.4892590459180154,v=0.5065529413283534,w=0.5357798002844943,x=3.5732158909433434 -color=red,shape=square,flag=1,i=63223,u=0.7690690369913366,v=0.3055912466129418,w=0.5061163364523721,x=6.174020583937238 -color=red,shape=triangle,flag=0,i=63242,u=0.1064618484753983,v=0.6706095691549498,w=0.48721578275580185,x=5.274640214979204 -color=yellow,shape=circle,flag=1,i=63260,u=0.7419118468860325,v=0.4921678134634284,w=0.48746178071049073,x=3.822538553667331 -color=yellow,shape=circle,flag=1,i=63266,u=0.7052472262240931,v=0.3591091119235702,w=0.4921315753736453,x=3.897337107792995 -color=blue,shape=square,flag=0,i=63308,u=0.008287052333036948,v=0.36269407929162556,w=0.48380293397067686,x=4.804535386767394 -color=green,shape=circle,flag=0,i=63310,u=0.6591083265083223,v=0.6420080793229909,w=0.4811638732876288,x=3.927447690754425 -color=red,shape=triangle,flag=0,i=63317,u=0.10982625662686818,v=0.9960010135922871,w=0.4913318746186599,x=4.718179918484908 -color=red,shape=square,flag=0,i=63320,u=0.7893941269986001,v=0.9354940582614681,w=0.5235952465041683,x=4.115492450913288 -color=red,shape=square,flag=0,i=63332,u=0.970888211877224,v=0.6857596689710466,w=0.5228003194736635,x=2.668264923871252 -color=yellow,shape=square,flag=1,i=63337,u=0.0874924263896879,v=0.950183958407756,w=0.510721718370206,x=4.687215641469513 -color=blue,shape=square,flag=1,i=63343,u=0.14114074518146535,v=0.655241608504671,w=0.4852961463128133,x=4.005104442608682 -color=red,shape=circle,flag=0,i=63350,u=0.8796945751428287,v=0.8923085930699057,w=0.4687078728895611,x=4.764711681488481 -color=red,shape=triangle,flag=1,i=63373,u=0.6595832092253243,v=0.06801374618261546,w=0.49126597353639273,x=3.59910120629142 -color=red,shape=circle,flag=0,i=63386,u=0.2764553187950215,v=0.3353116438105522,w=0.4770231965668702,x=4.71820724688136 -color=yellow,shape=triangle,flag=1,i=63403,u=0.07339514161166527,v=0.44152339049489187,w=0.5160645007944001,x=5.7446544144498235 -color=red,shape=circle,flag=0,i=63404,u=0.09355951248555727,v=0.04769500731061244,w=0.4785452562682194,x=5.592835865813732 -color=blue,shape=circle,flag=1,i=63421,u=0.5236272820681089,v=0.2817463347056647,w=0.5384011232085524,x=4.728088219772792 -color=yellow,shape=square,flag=1,i=63425,u=0.10463534688361364,v=0.6759023798945356,w=0.5118460945285656,x=5.0010213467351425 -color=red,shape=square,flag=0,i=63447,u=0.07821593216320089,v=0.41749452211592886,w=0.5115398197381817,x=3.0271934060020254 -color=green,shape=square,flag=0,i=63449,u=0.28280413381317115,v=0.9556857697539318,w=0.4957326089443081,x=5.215505460596041 -color=yellow,shape=triangle,flag=1,i=63452,u=0.9273827654059374,v=0.8835971806115526,w=0.5119031140441194,x=5.685017178429618 -color=red,shape=triangle,flag=0,i=63461,u=0.3175544716298998,v=0.5365224802620152,w=0.4838196449828189,x=3.589982889198821 -color=yellow,shape=triangle,flag=1,i=63473,u=0.4684268930197133,v=0.3996793351218243,w=0.5118596889991462,x=6.225859492489028 -color=orange,shape=square,flag=1,i=63477,u=0.07928933894273849,v=0.0514072129984835,w=0.490949314628272,x=6.608600888579531 -color=purple,shape=square,flag=0,i=63504,u=0.9700830866905408,v=0.9797449445666488,w=0.5028390388130227,x=5.835149255056467 -color=red,shape=square,flag=0,i=63514,u=0.0378176948932033,v=0.1427414392172779,w=0.5130201815984372,x=5.715139555750857 -color=red,shape=square,flag=0,i=63520,u=0.3397124390805968,v=0.2714845545300445,w=0.5170010396204573,x=5.561806237121956 -color=red,shape=square,flag=0,i=63552,u=0.32371787599694224,v=0.507907498039507,w=0.5045012450134124,x=6.395184987087981 -color=red,shape=triangle,flag=0,i=63565,u=0.48020871013960653,v=0.9884932297951934,w=0.4982588641272306,x=6.137621853716542 -color=purple,shape=square,flag=0,i=63574,u=0.15379335750978063,v=0.5281964960658879,w=0.4994394965067309,x=2.0727416448885454 -color=red,shape=square,flag=1,i=63581,u=0.802394784163531,v=0.6939027134332991,w=0.4966973402746471,x=7.32803597295909 -color=red,shape=square,flag=0,i=63585,u=0.4189667395959692,v=0.0045752361451588675,w=0.4994227523808975,x=2.4327208837196515 -color=yellow,shape=triangle,flag=1,i=63587,u=0.7167050254544781,v=0.5549538255428227,w=0.5100523850015138,x=3.5714062736529097 -color=red,shape=triangle,flag=0,i=63625,u=0.29649511175488363,v=0.7077525174728829,w=0.4948358938306383,x=7.19674170777774 -color=yellow,shape=triangle,flag=1,i=63636,u=0.3190657421387958,v=0.9766789545324229,w=0.5146995473706589,x=3.139905763814006 -color=red,shape=circle,flag=1,i=63653,u=0.7124949067752695,v=0.7354776104940559,w=0.46776554713874124,x=4.160604070493101 -color=red,shape=triangle,flag=0,i=63654,u=0.627050404609583,v=0.13035775383831516,w=0.5008612680386838,x=4.642981482508208 -color=red,shape=square,flag=0,i=63685,u=0.9497956342657677,v=0.7842243295282431,w=0.4927051141152887,x=4.014959212256174 -color=blue,shape=square,flag=1,i=63689,u=0.6426554468489805,v=0.379984431650072,w=0.503239329678487,x=4.5235969349819705 -color=red,shape=triangle,flag=0,i=63707,u=0.2096771803308467,v=0.7973446680349758,w=0.5153683037016645,x=5.81953942794393 -color=blue,shape=triangle,flag=0,i=63708,u=0.22170963254835463,v=0.08469046744317732,w=0.5054861869194943,x=5.957782715737459 -color=red,shape=triangle,flag=0,i=63716,u=0.9608586826415092,v=0.5778298988776719,w=0.5059131561374438,x=7.582299416281928 -color=red,shape=triangle,flag=1,i=63719,u=0.8306323684682014,v=0.07878243923100481,w=0.5030716956841577,x=5.376611272914098 -color=red,shape=square,flag=0,i=63739,u=0.39726637906191364,v=0.9974072581707458,w=0.49092955531644206,x=4.742988813801126 -color=blue,shape=square,flag=1,i=63748,u=0.038958390272422316,v=0.6899245148086993,w=0.511877267123885,x=6.201614716402648 -color=red,shape=triangle,flag=1,i=63763,u=0.8260508879078403,v=0.7122915266979948,w=0.5036212844700014,x=4.681609009062412 -color=blue,shape=circle,flag=0,i=63792,u=0.19728458061068666,v=0.16181839296814904,w=0.5348196368757366,x=4.674163075607887 -color=red,shape=circle,flag=0,i=63799,u=0.7784454827895895,v=0.8011778292745955,w=0.4662777472228059,x=6.100564869441399 -color=red,shape=square,flag=1,i=63806,u=0.6141650607593339,v=0.9142559360340724,w=0.4928580365712914,x=2.8435797160193492 -color=green,shape=square,flag=0,i=63810,u=0.8331122386607416,v=0.5796137503861937,w=0.5017164714242858,x=4.731477885461558 -color=green,shape=circle,flag=1,i=63816,u=0.40266172833400726,v=0.42381083247437346,w=0.492115379639235,x=7.571613470933646 -color=red,shape=circle,flag=0,i=63822,u=0.9437821789349579,v=0.9969487167272225,w=0.4729779526387773,x=5.4405712549070735 -color=red,shape=circle,flag=1,i=63839,u=0.3041192394162371,v=0.2647701882074305,w=0.4680206081922557,x=4.044029861775884 -color=red,shape=circle,flag=0,i=63853,u=0.5492798216939365,v=0.6217327646534917,w=0.46506013977555066,x=5.631350743071785 -color=red,shape=square,flag=0,i=63855,u=0.442889751448163,v=0.36586238799084936,w=0.48412448099437144,x=3.7324822580201364 -color=blue,shape=circle,flag=1,i=63856,u=0.6855547858747592,v=0.2707295407356246,w=0.5336873724393838,x=3.8762418109589163 -color=blue,shape=circle,flag=1,i=63859,u=0.7459299364313137,v=0.3072131190087173,w=0.5341191395549857,x=5.53068068586547 -color=purple,shape=triangle,flag=0,i=63865,u=0.7092757264208321,v=0.23235465548151513,w=0.46216513190126063,x=3.4202946860209327 -color=red,shape=triangle,flag=0,i=63886,u=0.45946135793073595,v=0.2588272307510143,w=0.5013865092069411,x=6.440630111447324 -color=red,shape=triangle,flag=0,i=63888,u=0.969619606173608,v=0.21558215623761867,w=0.49863958446076706,x=6.1485718143846455 -color=red,shape=square,flag=0,i=63899,u=0.3982583133796107,v=0.5549078775856298,w=0.48613666613912915,x=5.303023386962724 -color=blue,shape=circle,flag=1,i=63910,u=0.6863886117058431,v=0.37206295297347436,w=0.5293565980248977,x=4.282396951942643 -color=red,shape=square,flag=0,i=63934,u=0.28362300522034134,v=0.9776435032329341,w=0.49500489717812485,x=4.22874121836814 -color=red,shape=square,flag=0,i=63938,u=0.44540466147148683,v=0.2602174184280942,w=0.49636965013518813,x=5.678133972691477 -color=red,shape=square,flag=0,i=63950,u=0.5945643984227755,v=0.07057457546776025,w=0.5025606472334991,x=6.562575077178184 -color=red,shape=triangle,flag=0,i=63955,u=0.4748958361621747,v=0.5026362244360355,w=0.493515269580427,x=5.387268214423738 -color=red,shape=square,flag=0,i=63970,u=0.8833261553905527,v=0.7186996387121306,w=0.5011426431160687,x=5.02885669106661 -color=purple,shape=triangle,flag=1,i=63973,u=0.09727017174152641,v=0.46447544054366596,w=0.47035211902337365,x=4.381689376612946 -color=red,shape=square,flag=0,i=63975,u=0.38211363356881844,v=0.1851051930756088,w=0.5088977332933559,x=6.033395726606865 -color=yellow,shape=circle,flag=1,i=63982,u=0.05475943205246048,v=0.4827379884980324,w=0.4839250759959782,x=5.461357807406426 -color=yellow,shape=square,flag=0,i=63983,u=0.9759577775531386,v=0.5346636072398493,w=0.5090356632542478,x=4.3427832507791475 -color=purple,shape=triangle,flag=0,i=63991,u=0.6450211290963586,v=0.7647205800081447,w=0.47397787262422303,x=7.512466509854714 -color=yellow,shape=circle,flag=1,i=64000,u=0.6072697294590961,v=0.7735604234985045,w=0.4782161481440966,x=4.028959539850409 -color=green,shape=square,flag=0,i=64021,u=0.7279543112915372,v=0.6448926086368608,w=0.4867345558653957,x=5.34349840321175 -color=red,shape=square,flag=0,i=64022,u=0.9963151094127419,v=0.5614860220224002,w=0.5162238695986654,x=4.799168980917745 -color=red,shape=square,flag=1,i=64023,u=0.4876345274932703,v=0.4723527804131543,w=0.5188911764015784,x=4.5079013835331745 -color=blue,shape=triangle,flag=0,i=64036,u=0.7478597761606541,v=0.7144990122993502,w=0.5008458260525993,x=5.568158772053908 -color=red,shape=triangle,flag=0,i=64041,u=0.8912540679796508,v=0.13308974592620937,w=0.4966351988438118,x=4.740432531230698 -color=red,shape=triangle,flag=0,i=64042,u=0.45734507250285783,v=0.2594904818337578,w=0.4989310014114306,x=2.456291754405488 -color=yellow,shape=triangle,flag=1,i=64045,u=0.5308586812797977,v=0.7725052654525788,w=0.5133303452297842,x=5.510681131225151 -color=blue,shape=circle,flag=0,i=64046,u=0.23449582206897412,v=0.9588065538630066,w=0.5386645118591479,x=5.561227745195509 -color=red,shape=circle,flag=0,i=64066,u=0.9240927253960263,v=0.8320418784551288,w=0.46142196509973243,x=4.878844901170772 -color=red,shape=square,flag=1,i=64077,u=0.5735278128678156,v=0.05680994750733448,w=0.5033359042288733,x=6.090509801075051 -color=green,shape=square,flag=1,i=64085,u=0.38079080255192166,v=0.18905354331113844,w=0.4907037858557233,x=5.263999791996457 -color=red,shape=square,flag=0,i=64087,u=0.5960898446331889,v=0.7903397230154193,w=0.5017152619611266,x=3.059881005175774 -color=blue,shape=triangle,flag=1,i=64090,u=0.8848908085564067,v=0.8923312132333386,w=0.4990548475069474,x=5.002427345515826 -color=blue,shape=triangle,flag=1,i=64094,u=0.1569268443018389,v=0.3196742984588615,w=0.49493793352365983,x=3.756729477592257 -color=green,shape=circle,flag=1,i=64100,u=0.5647815083385339,v=0.4863408108927847,w=0.4978077398156158,x=5.285395987891518 -color=red,shape=square,flag=0,i=64107,u=0.3136389492477193,v=0.8459831062057569,w=0.5054226352575494,x=2.583552870227812 -color=purple,shape=circle,flag=0,i=64111,u=0.08274291700283631,v=0.011981531702173531,w=0.5310308500191578,x=5.987754772763229 -color=green,shape=circle,flag=0,i=64129,u=0.09629011688513611,v=0.7869194660837012,w=0.5003479541242317,x=6.49648483163907 -color=red,shape=square,flag=1,i=64136,u=0.35692812504153615,v=0.5554943275309325,w=0.5134677416671467,x=4.496888235107965 -color=red,shape=triangle,flag=0,i=64147,u=0.020012867427591008,v=0.9805642371114248,w=0.5040291259439584,x=4.231686261830181 -color=purple,shape=circle,flag=0,i=64153,u=0.009337255555096569,v=0.13918972136927654,w=0.5283727377866156,x=5.103066168043456 -color=red,shape=triangle,flag=1,i=64162,u=0.2985305141624415,v=0.8555467295075686,w=0.49579115054307554,x=5.960945321253074 -color=yellow,shape=square,flag=1,i=64167,u=0.9011278559567346,v=0.7285422107675157,w=0.503217543589724,x=4.7521316916146725 -color=red,shape=square,flag=0,i=64175,u=0.7059444692365139,v=0.46370555304500527,w=0.5115203103971437,x=4.22356701299343 -color=yellow,shape=square,flag=0,i=64197,u=0.015601479148791952,v=0.03483907379197315,w=0.5008076421823484,x=4.66396019719809 -color=red,shape=triangle,flag=0,i=64200,u=0.6847297348626562,v=0.7932145655465365,w=0.4908329573718279,x=5.445535502726784 -color=red,shape=square,flag=1,i=64213,u=0.45342505049552717,v=0.5125225107549417,w=0.5190128579359139,x=4.118315119598916 -color=yellow,shape=triangle,flag=1,i=64215,u=0.6705071617575188,v=0.8803817427148197,w=0.5013233583723586,x=6.298922709137407 -color=blue,shape=square,flag=1,i=64221,u=0.8702136360214097,v=0.49692647582661886,w=0.5299607495813312,x=6.6131819422058244 -color=blue,shape=triangle,flag=1,i=64224,u=0.24947955591329274,v=0.48029654076629635,w=0.49494007087366737,x=3.669811326668052 -color=red,shape=square,flag=0,i=64230,u=0.17131051116198714,v=0.8517566554649438,w=0.5215963440875848,x=5.548306467460223 -color=blue,shape=triangle,flag=0,i=64240,u=0.4363641687828099,v=0.019544474085960273,w=0.4883218526438222,x=7.387452606559268 -color=blue,shape=square,flag=1,i=64245,u=0.5322542720406609,v=0.21065509258665627,w=0.5269834892915934,x=2.5326375376948724 -color=red,shape=triangle,flag=0,i=64256,u=0.710143402260618,v=0.8534076581081995,w=0.49975492780193975,x=3.707913732714907 -color=red,shape=circle,flag=0,i=64262,u=0.7984166628795825,v=0.8623991335719142,w=0.4791416501521122,x=4.167364845068389 -color=yellow,shape=square,flag=1,i=64296,u=0.972916353164527,v=0.3684926942422071,w=0.49736489968193426,x=5.618405006881453 -color=yellow,shape=triangle,flag=1,i=64305,u=0.4692257097702849,v=0.3232319653088911,w=0.4956778330548818,x=6.740500416957165 -color=red,shape=triangle,flag=0,i=64326,u=0.9683081350452416,v=0.06627198553757219,w=0.4948835589424861,x=5.660492884833842 -color=green,shape=triangle,flag=0,i=64328,u=0.9715889849359332,v=0.6309264306921687,w=0.46616568176306455,x=6.371837539270937 -color=purple,shape=square,flag=0,i=64338,u=0.9336239383135657,v=0.12656727153155733,w=0.5179953179287038,x=5.373824217752926 -color=green,shape=circle,flag=0,i=64342,u=0.9644393199588971,v=0.8066328910947824,w=0.5097391666721242,x=7.7391571591368065 -color=blue,shape=triangle,flag=1,i=64343,u=0.04233891284097735,v=0.6565482518638562,w=0.49572672756256864,x=5.852762818653058 -color=green,shape=square,flag=0,i=64348,u=0.8223999917274492,v=0.3277495051022389,w=0.5011804726006969,x=6.29409308520921 -color=red,shape=circle,flag=0,i=64370,u=0.8730393727931256,v=0.8846982456315251,w=0.46943485903510607,x=3.469662858803927 -color=green,shape=square,flag=0,i=64394,u=0.8759037505341121,v=0.2768411564827987,w=0.4941481492696853,x=4.356843922601224 -color=yellow,shape=triangle,flag=1,i=64401,u=0.9164000913872118,v=0.5224988236587411,w=0.4936227158934918,x=2.569989762935232 -color=purple,shape=circle,flag=0,i=64407,u=0.45050526713854444,v=0.3810065490600414,w=0.5216637275515531,x=4.309329417360491 -color=red,shape=square,flag=0,i=64426,u=0.38755407348408877,v=0.4052117319250018,w=0.5420427752432667,x=2.6621468072160517 -color=yellow,shape=square,flag=1,i=64433,u=0.8463768288412885,v=0.19634946726177027,w=0.5073074847287324,x=3.1131903296146803 -color=red,shape=square,flag=1,i=64434,u=0.2899660655195041,v=0.2607739531495955,w=0.5308400515996639,x=5.378602804959737 -color=green,shape=square,flag=0,i=64435,u=0.2686419363736554,v=0.5884194571306015,w=0.49156965416921433,x=7.33472067034177 -color=blue,shape=circle,flag=0,i=64449,u=0.5312097691912956,v=0.2866998766884393,w=0.5300547771100046,x=4.809521088514162 -color=red,shape=triangle,flag=0,i=64452,u=0.46335425384275486,v=0.6625945608407157,w=0.5221104204691589,x=4.006153695745944 -color=red,shape=circle,flag=0,i=64457,u=0.1531298558749995,v=0.07053912927400352,w=0.46452585900732735,x=5.256278983755565 -color=red,shape=circle,flag=0,i=64477,u=0.5940629877888385,v=0.601296637083989,w=0.46630411447173187,x=4.436644125785411 -color=purple,shape=square,flag=0,i=64481,u=0.37065765846951126,v=0.4067283952673201,w=0.5274680100421396,x=3.9896762684542346 -color=purple,shape=square,flag=0,i=64534,u=0.2015145831423374,v=0.3960021303646689,w=0.5319611531145543,x=3.64698269911374 -color=red,shape=circle,flag=1,i=64539,u=0.2607995955602843,v=0.22400239384539683,w=0.45787860930613217,x=5.45651471941169 -color=yellow,shape=square,flag=1,i=64541,u=0.4001773190623412,v=0.25630894165050044,w=0.5182528477901761,x=4.875544406373321 -color=red,shape=circle,flag=1,i=64542,u=0.7842388254663052,v=0.6881628448515157,w=0.45689713863516374,x=4.956630170345078 -color=blue,shape=triangle,flag=1,i=64543,u=0.9351764837201605,v=0.3413938482854869,w=0.5091841787274728,x=2.481757224688957 -color=purple,shape=triangle,flag=0,i=64566,u=0.3791540064862967,v=0.2937931357505441,w=0.48337957209757326,x=5.707400788309904 -color=red,shape=triangle,flag=0,i=64572,u=0.978883263957583,v=0.17208215251297787,w=0.5254050061158511,x=3.76829801681267 -color=blue,shape=circle,flag=0,i=64578,u=0.852192730327997,v=0.875831829797369,w=0.5307611835100067,x=4.588894350897245 -color=red,shape=square,flag=0,i=64601,u=0.5918043606292889,v=0.7000468134049758,w=0.5169782111633763,x=4.543946337259999 -color=red,shape=triangle,flag=1,i=64615,u=0.45739248862444637,v=0.8672414109138011,w=0.5215251455748212,x=2.7227260734492176 -color=red,shape=circle,flag=0,i=64619,u=0.24723301084060134,v=0.2841229280120296,w=0.4664359479037898,x=3.1377552847749857 -color=red,shape=triangle,flag=0,i=64627,u=0.6380693842353886,v=0.624769350221581,w=0.5166966282202463,x=5.933012199227495 -color=red,shape=square,flag=0,i=64639,u=0.8792987396666089,v=0.07680337370292156,w=0.5151463811642052,x=5.915825493566256 -color=red,shape=circle,flag=0,i=64646,u=0.02946597584823507,v=-0.00964173446964052,w=0.4598542294953604,x=6.066656368439051 -color=red,shape=square,flag=0,i=64656,u=0.9957593004096548,v=0.5457792865191033,w=0.5202985812877525,x=5.876195227853195 -color=red,shape=triangle,flag=0,i=64659,u=0.316076570954698,v=0.49451312023591176,w=0.5197858997736655,x=5.432327494908552 -color=blue,shape=square,flag=1,i=64675,u=0.9894146584394644,v=0.1598456849653801,w=0.5190465620260806,x=5.321717094729606 -color=red,shape=triangle,flag=0,i=64685,u=0.9667942870792993,v=0.45834058366298125,w=0.5193796874853984,x=2.7752124774275586 -color=orange,shape=circle,flag=1,i=64698,u=0.9530300915157188,v=0.6157661209513193,w=0.5000750694642581,x=5.501506237847437 -color=green,shape=square,flag=0,i=64706,u=0.025466555741951558,v=0.9314023931438274,w=0.4918391536631408,x=4.003904813492953 -color=purple,shape=square,flag=0,i=64720,u=0.16261944210584722,v=0.9622114930511119,w=0.5159587490104004,x=4.5962545116326945 -color=blue,shape=triangle,flag=1,i=64723,u=0.30303255688848285,v=0.08693611578817917,w=0.51113716940579,x=4.255873939755748 -color=red,shape=square,flag=1,i=64746,u=0.11150300883706599,v=0.812752471011457,w=0.5251511912985377,x=5.962202895801816 -color=red,shape=circle,flag=1,i=64755,u=0.49783467917086743,v=0.5674595761425589,w=0.4802455708585952,x=3.662032559009031 -color=yellow,shape=circle,flag=1,i=64764,u=0.7002826909415023,v=0.8114218848057422,w=0.4878827731446801,x=5.561974666181925 -color=red,shape=square,flag=0,i=64769,u=0.6178092770759732,v=0.24994269586172424,w=0.5272017256334964,x=5.718707747559576 -color=blue,shape=square,flag=1,i=64775,u=0.36765547446107316,v=0.8335993289522815,w=0.5120397252558292,x=4.279514054167786 -color=yellow,shape=circle,flag=1,i=64781,u=0.6474511034851618,v=0.9441289636599535,w=0.48706589514743537,x=6.857391291304986 -color=red,shape=triangle,flag=0,i=64816,u=0.9990007970649004,v=0.5984063560112501,w=0.5192765965918773,x=6.02505866341543 -color=red,shape=triangle,flag=0,i=64821,u=0.9025392010053739,v=0.08866257265615829,w=0.5160043250545797,x=5.720386334787676 -color=yellow,shape=triangle,flag=1,i=64831,u=0.5134958791049719,v=0.8682061667809065,w=0.49802201640066407,x=5.261964049553423 -color=green,shape=square,flag=0,i=64832,u=0.931142864151507,v=0.24549905593507126,w=0.478110673194234,x=3.437685703888444 -color=green,shape=circle,flag=1,i=64838,u=0.3254608716787136,v=0.41431860395529174,w=0.498711875491115,x=6.53041911957271 -color=yellow,shape=square,flag=1,i=64842,u=0.947359937140417,v=0.7724299503572887,w=0.5068265682251539,x=4.243199493337334 -color=red,shape=triangle,flag=0,i=64848,u=0.9494992003261125,v=0.17488470368341058,w=0.5063790096338582,x=6.847445460858204 -color=red,shape=square,flag=1,i=64859,u=0.632974858484807,v=8.930277299445954e-05,w=0.5290750594438621,x=4.610258616114966 -color=red,shape=triangle,flag=0,i=64861,u=0.35914496258462403,v=0.31383948785887983,w=0.5031666087844853,x=4.208162268033191 -color=green,shape=square,flag=0,i=64871,u=0.5132468772575083,v=0.734496148973709,w=0.47531369383510536,x=5.4639852903521495 -color=yellow,shape=square,flag=1,i=64873,u=0.16463447410131382,v=0.22800574067939772,w=0.5049253759450267,x=6.212815695863007 -color=blue,shape=triangle,flag=1,i=64890,u=0.20956241202265335,v=0.2726171005354915,w=0.5144404976118491,x=5.822733204105899 -color=red,shape=triangle,flag=1,i=64893,u=0.5354715208728439,v=0.24613133287194167,w=0.5012996540359805,x=5.808934763221032 -color=red,shape=triangle,flag=0,i=64899,u=0.5460430282095673,v=0.916400948528702,w=0.4968924116236075,x=4.948528140292663 -color=red,shape=square,flag=1,i=64907,u=0.48750530053116925,v=0.8354207519202246,w=0.5329904601574204,x=4.5400396422906 -color=purple,shape=square,flag=0,i=64912,u=0.6290497451733703,v=0.04900077904469091,w=0.5362106970499977,x=3.9536667555229728 -color=red,shape=triangle,flag=0,i=64925,u=0.7356531907462553,v=0.8973901227620534,w=0.4890626288215829,x=4.240885522928878 -color=red,shape=square,flag=1,i=64929,u=0.8525662903112224,v=0.9487130591701535,w=0.5327118930797484,x=4.536914619191142 -color=red,shape=circle,flag=1,i=64951,u=0.2753183104553981,v=0.24022062075193212,w=0.47358419495404414,x=3.949768957643478 -color=purple,shape=triangle,flag=0,i=64957,u=0.058320987548133085,v=0.6123565767998979,w=0.46733568865542235,x=4.233692005189134 -color=red,shape=square,flag=0,i=64958,u=0.44240926277505943,v=0.9523325413193555,w=0.5326671561332541,x=4.2894849799572015 -color=blue,shape=square,flag=0,i=64963,u=0.024426947590495796,v=0.5316266848361411,w=0.5124139001677811,x=5.619054311325499 -color=blue,shape=circle,flag=0,i=64964,u=0.5063412718934043,v=0.7486730533820664,w=0.5069041429725936,x=4.443930448302951 -color=red,shape=square,flag=1,i=64976,u=0.7773778380327702,v=0.5907033048263742,w=0.5306760834520597,x=5.766312964627865 -color=red,shape=circle,flag=0,i=64978,u=0.4119729859087361,v=0.479541486794416,w=0.47274220675869755,x=5.604600467622807 -color=purple,shape=square,flag=0,i=64985,u=0.16842275192459144,v=0.7888948967618983,w=0.5335551370240443,x=3.8748462668508084 -color=yellow,shape=circle,flag=1,i=64992,u=0.3395358854734897,v=0.4717722447811884,w=0.47183492669344995,x=5.1030090499269924 -color=red,shape=square,flag=0,i=64995,u=0.0567647560319825,v=0.8852584386364303,w=0.5308195825619981,x=4.812497654502461 -color=green,shape=circle,flag=0,i=65002,u=0.747777869980808,v=0.15672336812474486,w=0.4983671857021502,x=3.5524937270702743 -color=purple,shape=circle,flag=0,i=65009,u=0.11448659042521758,v=0.37128980405316847,w=0.5280579389173199,x=6.7711738113629565 -color=blue,shape=triangle,flag=1,i=65028,u=0.811814842995744,v=0.2538914035408405,w=0.49895245391075094,x=5.554581328507087 -color=purple,shape=circle,flag=0,i=65051,u=0.16617239618475033,v=0.4346085580893905,w=0.531990236539049,x=3.9211115790816913 -color=red,shape=square,flag=0,i=65053,u=0.2718576509578965,v=0.15577912026012075,w=0.5278939165818484,x=6.984378812791431 -color=red,shape=triangle,flag=0,i=65055,u=0.4293332706716929,v=0.7463306612814803,w=0.5008319015861331,x=4.818548965080251 -color=blue,shape=circle,flag=1,i=65058,u=0.5283589194442528,v=0.23472492897549846,w=0.5135573256417975,x=5.120523443235321 -color=orange,shape=square,flag=1,i=65072,u=0.41479594499790895,v=0.48373183240935813,w=0.4920374216652845,x=3.4676338222668917 -color=red,shape=square,flag=1,i=65073,u=0.36776326219296496,v=0.026864515735567918,w=0.5249304995524096,x=4.8976826634433985 -color=blue,shape=circle,flag=1,i=65083,u=0.5809690675464005,v=0.9409031057132201,w=0.5126529986638552,x=5.4930181893311 -color=yellow,shape=triangle,flag=1,i=65084,u=0.2924621514312543,v=0.4519628107299266,w=0.5060714279073292,x=4.022430968547574 -color=red,shape=square,flag=0,i=65086,u=0.3616524063450083,v=0.6748725045521407,w=0.5220869562971677,x=6.466926281716532 -color=green,shape=square,flag=0,i=65100,u=0.18992913486063678,v=0.6976525721214802,w=0.48573717600808036,x=4.604820235923111 -color=red,shape=square,flag=0,i=65125,u=0.10613781365226538,v=0.06695608747900939,w=0.5245187213867367,x=4.677799445091317 -color=red,shape=circle,flag=0,i=65128,u=0.23743225205268448,v=0.1783788641581944,w=0.49701046700655943,x=4.691433950645753 -color=red,shape=circle,flag=1,i=65141,u=0.47632324588875885,v=0.4530808242615764,w=0.5050409997934431,x=4.270843356712796 -color=red,shape=triangle,flag=0,i=65143,u=0.6275028105541011,v=0.7213672357227178,w=0.5002172762645051,x=3.440055274826553 -color=yellow,shape=triangle,flag=0,i=65154,u=0.08575403258114778,v=0.4061910694743488,w=0.5000709824020975,x=5.452885175514719 -color=blue,shape=circle,flag=0,i=65166,u=0.9627736861082165,v=0.3444540262018051,w=0.5169924498805815,x=5.244021008140907 -color=purple,shape=triangle,flag=1,i=65197,u=0.02188951027035302,v=0.44449210075211454,w=0.4648009260304861,x=5.625409051079889 -color=red,shape=triangle,flag=1,i=65199,u=0.22641941927027553,v=0.027411990493695804,w=0.49000303878724694,x=6.070081980144997 -color=yellow,shape=square,flag=1,i=65202,u=0.5466110589119082,v=0.7993443396901851,w=0.5115614601985802,x=3.310085028681474 -color=red,shape=square,flag=1,i=65204,u=0.5445462751290312,v=0.23545602382978847,w=0.5084121071928628,x=4.978951854769487 -color=purple,shape=circle,flag=0,i=65213,u=0.24386271930329795,v=0.4948862591969918,w=0.5310211373033625,x=7.332289486054274 -color=yellow,shape=square,flag=1,i=65243,u=0.4207977187353583,v=0.06559148241184698,w=0.5119971292357092,x=5.713981506956713 -color=purple,shape=square,flag=0,i=65255,u=0.3694078438004057,v=0.8845307798454202,w=0.5196124743571258,x=3.772024658063442 -color=yellow,shape=square,flag=1,i=65261,u=0.364342339312579,v=0.6778843851093698,w=0.5109535945540792,x=4.997107064745154 -color=red,shape=square,flag=0,i=65264,u=0.9026517077683804,v=0.4662380200947325,w=0.5254560965412735,x=4.85920289078181 -color=blue,shape=triangle,flag=1,i=65272,u=0.6171043031985003,v=0.6563591096612812,w=0.501899987292809,x=4.705629956098989 -color=red,shape=square,flag=1,i=65274,u=0.7565377040169405,v=0.77687484140646,w=0.5247431613810872,x=6.385264763616131 -color=red,shape=square,flag=0,i=65276,u=0.8857073415633464,v=0.0568738396449876,w=0.5225633155813637,x=4.457044827399879 -color=red,shape=circle,flag=0,i=65297,u=0.8965680990892491,v=0.9866394224571755,w=0.5132353404710892,x=8.36378992550476 -color=red,shape=square,flag=0,i=65302,u=0.4060476274644077,v=0.6921115525227287,w=0.5249918109489632,x=5.2400281554119195 -color=orange,shape=square,flag=0,i=65330,u=0.6350121426552636,v=0.048032888259897044,w=0.48537979050664637,x=5.209091859880245 -color=blue,shape=circle,flag=1,i=65336,u=0.2703392928886307,v=0.12155510214852938,w=0.5246866921197347,x=3.1267564242051695 -color=red,shape=triangle,flag=0,i=65340,u=0.563117131148891,v=0.7939612650067187,w=0.4915541049563324,x=3.7090816210948603 -color=red,shape=circle,flag=1,i=65357,u=0.02704338146223284,v=-0.04106383914389711,w=0.5196009194626682,x=5.195519463029234 -color=yellow,shape=square,flag=1,i=65359,u=0.6837164121801776,v=0.8617931960386346,w=0.5129301527828952,x=5.427528440148539 -color=purple,shape=square,flag=0,i=65363,u=0.9525761753790593,v=0.49451301162020544,w=0.522167193867163,x=4.640759310495134 -color=red,shape=square,flag=1,i=65368,u=0.1628701489879193,v=0.4486789942169367,w=0.5329971644668731,x=6.4143655401408095 -color=yellow,shape=square,flag=1,i=65372,u=0.23314746745489467,v=0.5140457025729221,w=0.5144697602469269,x=5.382406309641655 -color=purple,shape=triangle,flag=0,i=65375,u=0.32710018093748117,v=0.682952682314051,w=0.4587534389825774,x=4.161987410672152 -color=blue,shape=square,flag=1,i=65382,u=0.9499804206300224,v=0.8830151918905924,w=0.49493525846972275,x=7.2901199343317105 -color=purple,shape=triangle,flag=0,i=65387,u=0.45117504834511646,v=0.7528625843741594,w=0.46369375666349016,x=6.018868590488388 -color=red,shape=triangle,flag=0,i=65412,u=0.2673400311085029,v=0.9748084027835497,w=0.4858489835268026,x=3.454207420625662 -color=yellow,shape=triangle,flag=1,i=65424,u=0.8521956893378505,v=0.31778334288020316,w=0.5045010392783321,x=7.740849571194886 -color=red,shape=circle,flag=1,i=65425,u=0.6621048080269045,v=0.6793782554213099,w=0.5361145560063162,x=3.989075765882611 -color=purple,shape=square,flag=0,i=65445,u=0.07770708160455186,v=0.15686282473056257,w=0.5219192637211514,x=7.565571153685286 -color=red,shape=square,flag=1,i=65452,u=0.5070802815676585,v=0.0991009994388381,w=0.5142618220957491,x=4.005160234130259 -color=yellow,shape=triangle,flag=1,i=65460,u=0.21670855056612637,v=0.4229092229670731,w=0.5090821428584934,x=4.171376694980853 -color=red,shape=triangle,flag=0,i=65463,u=0.47594230481617894,v=0.26577985821357586,w=0.4793083008522725,x=3.312364535109152 -color=yellow,shape=triangle,flag=1,i=65469,u=0.35486872424687865,v=0.35645941772963985,w=0.5126031740370534,x=6.913966157444608 -color=red,shape=square,flag=0,i=65470,u=0.8177422009952898,v=0.77502762265133,w=0.5201128676434438,x=4.281609650116536 -color=red,shape=square,flag=1,i=65480,u=0.6608780225835991,v=0.25110646468794273,w=0.5248571536023938,x=5.681629426309661 -color=green,shape=square,flag=0,i=65485,u=0.19684165053851022,v=0.0658455013679633,w=0.482523956636488,x=6.074793796362852 -color=red,shape=triangle,flag=0,i=65490,u=0.48503770531462564,v=0.2097154454813771,w=0.48426800355276983,x=4.432375055866024 -color=yellow,shape=square,flag=1,i=65523,u=0.1187328949230666,v=0.9371930150464581,w=0.5117171183989658,x=5.2214576049932315 -color=orange,shape=square,flag=0,i=65529,u=0.6422253013524792,v=0.3262956938191697,w=0.49531878153527514,x=5.072003145791108 -color=yellow,shape=square,flag=1,i=65532,u=0.04911615336020381,v=0.0740469691539487,w=0.5119210394408731,x=4.181382559173605 -color=green,shape=circle,flag=0,i=65544,u=0.9130327920089024,v=0.1547003795449442,w=0.48815423889993104,x=5.164413079351491 -color=green,shape=square,flag=0,i=65549,u=0.9806626403344759,v=0.7092852901524583,w=0.47924229221639825,x=4.249550586613052 -color=yellow,shape=circle,flag=1,i=65555,u=0.5475144808182765,v=0.874686834933429,w=0.48702762694608687,x=3.6028032373094185 -color=green,shape=triangle,flag=0,i=65569,u=0.7710719710129457,v=0.09701565689653802,w=0.4952347592409199,x=7.914435535668112 -color=blue,shape=square,flag=0,i=65578,u=0.596264040060545,v=0.2007539589978875,w=0.4816977457008478,x=6.328477665108153 -color=orange,shape=square,flag=0,i=65594,u=0.033244875883853386,v=0.1976111706760848,w=0.49694125371360376,x=6.915507637934556 -color=yellow,shape=circle,flag=1,i=65597,u=0.7128461133000341,v=0.7379828956763212,w=0.4921527474600759,x=5.810573662243253 -color=red,shape=triangle,flag=1,i=65598,u=0.2813099806314614,v=0.40467576543705563,w=0.4862179676409222,x=3.025497259794875 -color=yellow,shape=triangle,flag=1,i=65606,u=0.650388664784633,v=0.748753198306179,w=0.5110256564418473,x=3.8444908893851584 -color=red,shape=circle,flag=0,i=65609,u=0.038891398021832724,v=-0.0047455971530552254,w=0.5376717895435597,x=6.972551732184367 -color=red,shape=square,flag=0,i=65611,u=0.3610852846643944,v=0.8191668782064966,w=0.5159380801099495,x=2.4549765988995085 -color=red,shape=circle,flag=0,i=65618,u=0.8154109490283452,v=0.8613841121586385,w=0.5417314957392083,x=3.212581844644406 -color=yellow,shape=triangle,flag=1,i=65622,u=0.9417779749131687,v=0.5989427790361583,w=0.5123731859941992,x=5.652941363127328 -color=purple,shape=circle,flag=0,i=65640,u=0.8032016297505784,v=0.20018915268808912,w=0.5504532139490572,x=6.3672926809200305 -color=red,shape=triangle,flag=1,i=65675,u=0.8904964369108095,v=0.7717976078033741,w=0.4831082951099408,x=4.903953345673804 -color=purple,shape=square,flag=0,i=65680,u=0.3078085627958542,v=0.3513847980538256,w=0.52968501849301,x=5.791490385475154 -color=red,shape=triangle,flag=0,i=65682,u=0.5630094998177576,v=0.39810214349093065,w=0.4840927278330533,x=2.8641043493827794 -color=green,shape=triangle,flag=0,i=65688,u=0.3495391028098135,v=0.04847993696677777,w=0.4909365492240992,x=2.6334722384675815 -color=purple,shape=circle,flag=0,i=65713,u=0.20780248179986993,v=0.9641870358252208,w=0.5491676250640222,x=5.355817321209251 -color=red,shape=square,flag=1,i=65718,u=0.9631572523989812,v=0.1988227554831976,w=0.5169183681327704,x=4.413010187336062 -color=red,shape=square,flag=1,i=65719,u=0.6610719375001668,v=0.9466620977827448,w=0.5191538795175775,x=6.181558463760098 -color=blue,shape=triangle,flag=0,i=65735,u=0.532217274575207,v=0.9215165572456875,w=0.49769189054544016,x=2.951659057688412 -color=yellow,shape=square,flag=1,i=65748,u=0.8565215838409299,v=0.547557706752661,w=0.5284014936577571,x=5.139861303617188 -color=blue,shape=circle,flag=0,i=65758,u=0.11493638715498466,v=0.9068576192504535,w=0.5238762042749868,x=5.002189566230604 -color=blue,shape=square,flag=1,i=65777,u=0.31889897017136026,v=0.316537088637698,w=0.4838142844156904,x=5.200245777483391 -color=red,shape=triangle,flag=0,i=65786,u=0.9723832339657721,v=0.9216069378968924,w=0.4763934397254572,x=4.936530481775569 -color=blue,shape=square,flag=0,i=65805,u=0.2591789176525001,v=0.2944090414593282,w=0.4813982600767997,x=2.510009144578748 -color=red,shape=square,flag=1,i=65818,u=0.23553567696241795,v=0.41739723335043155,w=0.5260361259322007,x=4.732313414838944 -color=purple,shape=circle,flag=0,i=65826,u=0.9031037628536029,v=0.017696160981824693,w=0.5485179355840061,x=5.175351802162621 -color=yellow,shape=square,flag=0,i=65831,u=0.870609726338584,v=0.401006888910205,w=0.5298318710186819,x=4.867283791678956 -color=green,shape=square,flag=1,i=65844,u=0.8465149981805902,v=0.7637890006015269,w=0.46456320279830216,x=6.110137649663902 -color=red,shape=square,flag=0,i=65850,u=0.4095920919277024,v=0.09660392615422109,w=0.5304399566102151,x=4.547702374449521 -color=blue,shape=circle,flag=0,i=65860,u=0.4805512213466605,v=0.21737726353706888,w=0.5235499503604353,x=6.0818172193662825 -color=red,shape=triangle,flag=1,i=65861,u=0.21789574557058644,v=0.2392185651492852,w=0.4896732875300848,x=3.8626313362452542 -color=red,shape=triangle,flag=1,i=65870,u=0.39632844612386,v=0.9492528818969544,w=0.4998987826941821,x=5.008781245264196 -color=red,shape=circle,flag=0,i=65888,u=0.23643734825428298,v=0.20261135185297066,w=0.5408689398703113,x=5.572425751726677 -color=green,shape=triangle,flag=1,i=65913,u=0.5186176275777967,v=0.2054289898134315,w=0.4915810215318341,x=5.578258500530295 -color=red,shape=square,flag=0,i=65935,u=0.3309357423883479,v=0.725713868060836,w=0.5260549831742616,x=2.663995747138903 -color=purple,shape=square,flag=0,i=65941,u=0.7450693314454351,v=0.7874976347311841,w=0.5200618730968948,x=7.286778748858808 -color=red,shape=triangle,flag=0,i=65944,u=0.9864367180455702,v=0.37045174487388777,w=0.49368088095638113,x=4.516041844745154 -color=red,shape=circle,flag=0,i=65959,u=0.7255351327908097,v=0.6765720696316141,w=0.533735323931998,x=5.412834633959929 -color=yellow,shape=square,flag=1,i=65973,u=0.8527274263056215,v=0.24925696247631246,w=0.5404171056841892,x=4.04240852877822 -color=blue,shape=triangle,flag=1,i=65979,u=0.16931548166599253,v=0.9012430937935009,w=0.4975508276252114,x=3.48300168160711 -color=red,shape=triangle,flag=0,i=65992,u=0.08157658671038037,v=0.8848745359917821,w=0.4905829398825815,x=4.929880364065919 -color=red,shape=triangle,flag=0,i=66001,u=0.08289326883489034,v=0.2838100050711774,w=0.48575482154347827,x=2.088330588192684 -color=red,shape=triangle,flag=0,i=66006,u=0.9455253272892942,v=0.3529829462119589,w=0.49077719478025816,x=5.266825104703118 -color=purple,shape=triangle,flag=0,i=66015,u=0.10635533022443988,v=0.765912250372427,w=0.4735170744381001,x=3.609019408830163 -color=red,shape=triangle,flag=0,i=66016,u=0.3584662810316416,v=0.34006804463021645,w=0.4867656248152798,x=5.250274043912767 -color=red,shape=square,flag=1,i=66018,u=0.0300185210043572,v=0.5764237783253642,w=0.5128833371312603,x=7.4318991469801645 -color=yellow,shape=square,flag=1,i=66034,u=0.7086307737392321,v=0.8361197500271356,w=0.5361286488166549,x=6.827805765791069 -color=yellow,shape=circle,flag=1,i=66038,u=0.6600574003945087,v=0.9708996159541871,w=0.49875470972187536,x=6.482600605885213 -color=blue,shape=square,flag=1,i=66046,u=0.6726727227871588,v=0.42156202307788926,w=0.4646818934036413,x=5.865547807266733 -color=red,shape=circle,flag=0,i=66071,u=0.6826415438045406,v=0.7196333842311028,w=0.4999336999532344,x=5.507996239808637 -color=red,shape=square,flag=0,i=66074,u=0.7556849406675512,v=0.5756232032160563,w=0.5224706806586751,x=4.541628910447802 -color=red,shape=square,flag=1,i=66077,u=0.38934017968027124,v=0.14080289508555732,w=0.5216904519812638,x=3.4921097942148016 -color=purple,shape=circle,flag=0,i=66082,u=0.954963362975394,v=0.1891919072927566,w=0.5408947025157844,x=5.8209278216532025 -color=purple,shape=square,flag=1,i=66106,u=0.2900797292359212,v=0.18331788415779138,w=0.5270743920271593,x=3.659391675899025 -color=red,shape=square,flag=0,i=66136,u=0.3729001003048925,v=0.002579446584631273,w=0.5294590180084595,x=4.95781140146564 -color=green,shape=circle,flag=0,i=66142,u=0.03144618970573354,v=0.8101630773552404,w=0.48369241851009676,x=3.8429602486887213 -color=red,shape=circle,flag=1,i=66175,u=0.9973354035694538,v=1.0250351309434942,w=0.4935338096568391,x=5.509620355031186 -color=blue,shape=square,flag=1,i=66176,u=0.1479544549133024,v=0.32540757563244527,w=0.4437949228633597,x=6.318550963640885 -color=blue,shape=square,flag=1,i=66200,u=0.44768572765841963,v=0.04397540764708863,w=0.444071830711182,x=6.195617335156531 -color=red,shape=triangle,flag=0,i=66204,u=0.9417220624872231,v=0.4436263500097287,w=0.4786815325027116,x=3.318969107234588 -color=red,shape=square,flag=1,i=66206,u=0.1354827939983685,v=0.6519926007293998,w=0.5167012747461797,x=5.3403656899448535 -color=purple,shape=square,flag=0,i=66236,u=0.19725791130471593,v=0.8886735735471696,w=0.5202572576222524,x=6.1845270378912005 -color=yellow,shape=circle,flag=1,i=66237,u=0.31705867680025823,v=0.48231965740539307,w=0.5005327965861784,x=5.381476542710105 -color=green,shape=triangle,flag=0,i=66238,u=0.9347680034905226,v=0.36701360311453735,w=0.49502633335598634,x=3.683186013099862 -color=purple,shape=square,flag=0,i=66239,u=0.5271711430700915,v=0.7227290178600558,w=0.524822340480443,x=4.8809938498534216 -color=red,shape=square,flag=0,i=66258,u=0.23930771373547066,v=0.03683328236103234,w=0.5118633935383123,x=3.606252695220856 -color=yellow,shape=triangle,flag=1,i=66262,u=0.3733808320786386,v=0.6931814674308489,w=0.5235631423725657,x=7.917140850139177 -color=yellow,shape=circle,flag=1,i=66269,u=0.08782418290771077,v=0.8347630784912323,w=0.5004540813415114,x=5.197587756035834 -color=red,shape=circle,flag=1,i=66271,u=0.36970893386210535,v=0.3603436727865095,w=0.5049689608408068,x=4.287473295735559 -color=red,shape=square,flag=0,i=66309,u=0.07323232881509201,v=0.45224050849874353,w=0.5192136219354534,x=5.0383588764659315 -color=red,shape=triangle,flag=1,i=66312,u=0.010374109347336735,v=0.7210057788853429,w=0.4960503172467584,x=6.670613483638313 -color=purple,shape=square,flag=0,i=66313,u=0.04885589167611071,v=0.450398946587766,w=0.527895568997768,x=4.115753420734689 -color=yellow,shape=circle,flag=1,i=66317,u=0.25762659294265433,v=0.44995364281875383,w=0.49951882697041644,x=4.430394540365172 -color=red,shape=square,flag=1,i=66322,u=0.8233051235532824,v=0.8589839077847085,w=0.5254531384385038,x=7.852404771370387 -color=green,shape=square,flag=0,i=66328,u=0.9498766864488037,v=0.20202855966978006,w=0.4641182359211531,x=3.6893558600419034 -color=red,shape=square,flag=1,i=66335,u=0.899333701568108,v=0.7643239731785252,w=0.5248623623895429,x=6.6339667975807854 -color=purple,shape=square,flag=0,i=66356,u=0.712394110164147,v=0.5297183088522027,w=0.5328788495605058,x=3.49423106887173 -color=red,shape=circle,flag=0,i=66368,u=0.07898180234040808,v=0.04330381604433551,w=0.5036563874946085,x=4.824946004870912 -color=red,shape=square,flag=1,i=66410,u=0.9783997467683435,v=0.5109396272243703,w=0.5082780131771135,x=7.3093713678681995 -color=red,shape=square,flag=0,i=66415,u=0.9552966721697438,v=0.6160266342909247,w=0.5125112064128358,x=6.376790106211591 -color=red,shape=square,flag=0,i=66417,u=0.1928267584415475,v=0.5594588538553201,w=0.5164678104978181,x=6.107762635342415 -color=blue,shape=square,flag=0,i=66422,u=0.5984414550438949,v=0.2243290253995549,w=0.4623649717120488,x=6.384665642108395 -color=blue,shape=square,flag=0,i=66430,u=0.9926547550299167,v=0.7908575923909869,w=0.46538090540242893,x=6.534229486435346 -color=green,shape=triangle,flag=0,i=66501,u=0.41008743275463455,v=0.9540041122276325,w=0.49703293923627817,x=5.370225158636948 -color=purple,shape=triangle,flag=0,i=66507,u=0.24145483884064445,v=0.6001331753869563,w=0.48397448747318994,x=4.39911885782561 -color=red,shape=circle,flag=0,i=66530,u=0.5044534801229158,v=0.5143901636756646,w=0.5116229673513467,x=6.786266048750883 -color=red,shape=circle,flag=0,i=66540,u=0.7547711528509382,v=0.658106530533973,w=0.508855987535961,x=4.945025033780427 -color=red,shape=triangle,flag=0,i=66555,u=0.2500977730548797,v=0.9129695640597973,w=0.4818570020053532,x=4.6049692126986415 -color=red,shape=triangle,flag=1,i=66560,u=0.012900503227791127,v=0.49515488453999823,w=0.4833487910286201,x=6.59986392957629 -color=blue,shape=circle,flag=1,i=66563,u=0.5272222279462238,v=0.19555673939108975,w=0.49944987654326745,x=5.306056673576671 -color=red,shape=circle,flag=1,i=66576,u=0.49990721572452335,v=0.42862780826648084,w=0.5044337668370974,x=7.431507202200861 -color=red,shape=triangle,flag=1,i=66585,u=0.4061691395975665,v=0.292167854706467,w=0.47163984488873617,x=4.116284788376728 -color=red,shape=circle,flag=0,i=66590,u=0.35630131104980933,v=0.4066879736950085,w=0.5002708510503441,x=3.543704086467416 -color=red,shape=triangle,flag=1,i=66603,u=0.8906161103137673,v=0.6091053864328775,w=0.47440589735298,x=5.03094694195465 -color=purple,shape=triangle,flag=0,i=66604,u=0.7042221664315672,v=0.5128106917394376,w=0.49303464394348323,x=4.96213723048833 -color=orange,shape=triangle,flag=0,i=66606,u=0.423239265987457,v=0.8891023847447177,w=0.5250404727529637,x=5.085534737372059 -color=purple,shape=square,flag=0,i=66609,u=0.22375288720964792,v=0.9883856917650247,w=0.5201514432059866,x=4.421756318535291 -color=purple,shape=square,flag=0,i=66611,u=0.8938199953871618,v=0.381049212560979,w=0.5191836445300219,x=5.165541396421528 -color=yellow,shape=square,flag=1,i=66623,u=0.7493992413628368,v=0.34141832595978716,w=0.5211239294918676,x=4.997086636179925 -color=red,shape=circle,flag=1,i=66625,u=0.17556465854211778,v=0.23844407602915813,w=0.5139626884864597,x=4.24764900389517 -color=red,shape=circle,flag=0,i=66626,u=0.4235176655820543,v=0.4772064134151415,w=0.5118853241853449,x=4.111991213514116 -color=red,shape=circle,flag=0,i=66628,u=0.08997876672028216,v=0.07632424407363828,w=0.5069546439921603,x=5.03268986376001 -color=blue,shape=triangle,flag=1,i=66632,u=0.15701626157887338,v=0.5665693404336789,w=0.5199247734183263,x=3.2898196461533256 -color=red,shape=triangle,flag=0,i=66641,u=0.12305355931656947,v=0.7546996253454846,w=0.4834595339977609,x=5.826520670935331 -color=purple,shape=square,flag=1,i=66642,u=0.8237609344817053,v=0.8952905197453466,w=0.5249501867410838,x=4.305402489854181 -color=red,shape=triangle,flag=1,i=66645,u=0.5615683215035173,v=0.7731402026244802,w=0.48362704116604427,x=4.1488998631965694 -color=red,shape=square,flag=0,i=66646,u=0.7212817424144539,v=0.9790669266804314,w=0.5042828690200761,x=5.774773784289639 -color=red,shape=square,flag=0,i=66652,u=0.5882165289478377,v=0.17520631796148456,w=0.5004355579282849,x=3.924825599855493 -color=red,shape=triangle,flag=0,i=66686,u=0.4613672842273536,v=0.669833618422066,w=0.4901214607244927,x=4.694922565569576 -color=red,shape=circle,flag=0,i=66695,u=0.578488346712645,v=0.6610513101021155,w=0.5055864150843146,x=4.494855857746079 -color=red,shape=square,flag=0,i=66717,u=0.8015276534098261,v=0.5544533228721135,w=0.5135878885650611,x=4.061493147797097 -color=blue,shape=triangle,flag=1,i=66720,u=0.3033961340149909,v=0.04813475296608227,w=0.5181023143258533,x=4.199090848856527 -color=blue,shape=triangle,flag=1,i=66742,u=0.20004802089064222,v=0.18591901263558663,w=0.5152060339598382,x=2.8361967165418167 -color=blue,shape=triangle,flag=1,i=66758,u=0.384278856796202,v=0.1997036405316519,w=0.5149807018100885,x=4.758547711964797 -color=red,shape=circle,flag=0,i=66759,u=0.9392853200813096,v=0.8441488997660864,w=0.5147058182557732,x=6.055767788257512 -color=red,shape=triangle,flag=1,i=66761,u=0.41496885580986553,v=0.908640105447663,w=0.49122562762542893,x=5.488137961034415 -color=yellow,shape=circle,flag=1,i=66764,u=0.2920932491763666,v=0.8692865023305532,w=0.5184907105511031,x=4.419363606849407 -color=red,shape=square,flag=0,i=66768,u=0.8236716731833342,v=0.010021013848361404,w=0.4913160770922267,x=4.536101717194666 -color=blue,shape=square,flag=1,i=66770,u=0.2836467007247855,v=0.6616205252454654,w=0.48050023726874946,x=6.094241352444784 -color=blue,shape=triangle,flag=0,i=66773,u=0.4228313153164106,v=0.5823378028838815,w=0.5173136485447389,x=4.997980854606079 -color=orange,shape=triangle,flag=1,i=66777,u=0.3129206488715679,v=0.6851397243598627,w=0.5348597832220764,x=3.8634075661511553 -color=red,shape=square,flag=1,i=66790,u=0.19849719587767822,v=0.2613345844669408,w=0.4963769331116409,x=4.521006452169434 -color=green,shape=triangle,flag=1,i=66791,u=0.5350318085773056,v=0.40944426110455967,w=0.4911000322013426,x=4.4354831966465085 -color=red,shape=square,flag=1,i=66816,u=0.3923693055652152,v=0.7431305087616882,w=0.48679070193544083,x=3.8864520327295495 -color=green,shape=square,flag=1,i=66821,u=0.007765892408628128,v=0.8401764747915572,w=0.4942199391753263,x=4.838354051366495 -color=red,shape=triangle,flag=1,i=66823,u=0.1391237909022971,v=0.15538351629960645,w=0.4922103833419881,x=4.955411917951427 -color=yellow,shape=circle,flag=1,i=66825,u=0.1248988838216819,v=0.40576231171468624,w=0.5136830797433093,x=3.7696375352121696 -color=purple,shape=triangle,flag=1,i=66843,u=0.925946055444376,v=0.8766003133696987,w=0.5115061539967923,x=6.1215562358932445 -color=blue,shape=square,flag=0,i=66864,u=0.48348983966127645,v=0.586655193224428,w=0.471635438741144,x=2.8926566286394753 -color=green,shape=circle,flag=0,i=66869,u=0.5160009767781689,v=0.6683768427706686,w=0.49642460752018686,x=3.789795981353663 -color=green,shape=square,flag=0,i=66877,u=0.08432995564391765,v=0.7209098806770929,w=0.49901137701973064,x=7.051168603111813 -color=red,shape=circle,flag=1,i=66884,u=0.500308841080413,v=0.5789087430651415,w=0.5048963672347088,x=5.34770862406305 -color=red,shape=square,flag=0,i=66885,u=0.15704232557193787,v=0.9279163649296636,w=0.46682827193566123,x=4.294848201027139 -color=red,shape=circle,flag=1,i=66889,u=0.8363008102718889,v=0.7448809832606749,w=0.5022575338178311,x=5.988341310717203 -color=red,shape=triangle,flag=0,i=66893,u=0.2988297716953924,v=0.05062817652271934,w=0.4901996459117237,x=5.996361597098165 -color=red,shape=triangle,flag=0,i=66900,u=0.6459277405019923,v=0.6011640855254711,w=0.4884279565057329,x=4.315414524343859 -color=red,shape=triangle,flag=0,i=66901,u=0.9162613996021998,v=0.17013938442276344,w=0.4934925932312003,x=4.0327922346751075 -color=yellow,shape=square,flag=1,i=66909,u=0.7123377421608842,v=0.6128429843228138,w=0.5271290139614403,x=4.392578429555868 -color=yellow,shape=triangle,flag=1,i=66910,u=0.4677420770661258,v=0.2680425528551549,w=0.49845515830540604,x=5.009527134273384 -color=blue,shape=square,flag=1,i=66912,u=0.21137229454062545,v=0.05331880392125621,w=0.47136963398598053,x=6.452142277953546 -color=red,shape=square,flag=0,i=66913,u=0.15232902422482852,v=0.11857431396554541,w=0.46763700404210046,x=4.725426738109991 -color=purple,shape=triangle,flag=0,i=66944,u=0.9907578821712121,v=0.14032932272904886,w=0.5227359176347566,x=3.5000533821466036 -color=red,shape=circle,flag=1,i=66947,u=0.29336379977804583,v=0.24268494782403655,w=0.4943785716258085,x=5.858778872787762 -color=red,shape=square,flag=0,i=66952,u=0.9049431707410562,v=0.9552676497038975,w=0.47324246602048986,x=4.9610194866257205 -color=green,shape=triangle,flag=0,i=66957,u=0.7658148534886452,v=0.7891249375971042,w=0.4878046404539158,x=6.250076176872376 -color=red,shape=square,flag=0,i=66960,u=0.4937941137351646,v=0.03325026822216248,w=0.4688839061357942,x=4.572206627225068 -color=green,shape=square,flag=0,i=66986,u=0.3519467974490942,v=0.35320049904664697,w=0.49558269425196494,x=4.038467707721917 -color=red,shape=square,flag=0,i=66995,u=0.28102549377976715,v=0.553386256533946,w=0.4636924544578165,x=3.427570228572519 -color=green,shape=square,flag=1,i=67002,u=0.2740658215359376,v=0.07503585705630522,w=0.5022185621358694,x=4.86518134871109 -color=yellow,shape=square,flag=1,i=67003,u=0.2069003406845804,v=0.7432074188450274,w=0.5168554448090693,x=2.953162460698124 -color=purple,shape=square,flag=0,i=67005,u=0.9096177095197674,v=0.862650424275686,w=0.5299990602415251,x=3.924517162091974 -color=blue,shape=triangle,flag=1,i=67023,u=0.4831120794148649,v=0.5335144371880642,w=0.5244180686527155,x=5.421987782674819 -color=blue,shape=square,flag=0,i=67030,u=0.39723710571507254,v=0.9361101556126938,w=0.4763485888200111,x=5.51714207553837 -color=purple,shape=square,flag=0,i=67044,u=0.924188649223442,v=0.7533592504589738,w=0.5336386387891984,x=5.015165734368007 -color=red,shape=square,flag=0,i=67047,u=0.8858955414751043,v=0.8457255661231017,w=0.4615924607942248,x=4.112605035145278 -color=blue,shape=triangle,flag=1,i=67051,u=0.2420480657298678,v=0.5095052669433282,w=0.5191926241877622,x=5.350393668828462 -color=blue,shape=triangle,flag=0,i=67064,u=0.3354051946445308,v=0.008655508816868385,w=0.5191864398021466,x=4.708090867466985 -color=red,shape=triangle,flag=1,i=67068,u=0.450315313203289,v=0.5566798747518442,w=0.4989844006489304,x=4.638042385360747 -color=red,shape=triangle,flag=1,i=67071,u=0.8147775263952478,v=0.3457072984660293,w=0.49493724176120396,x=4.925106639475966 -color=red,shape=triangle,flag=0,i=67079,u=0.0743111590518225,v=0.42485486599808064,w=0.5031619419284431,x=7.034683618118856 -color=red,shape=circle,flag=0,i=67087,u=0.19924064908250594,v=0.1629881689070343,w=0.5200192914775502,x=4.230488023729935 -color=green,shape=circle,flag=0,i=67098,u=0.31256269335908493,v=0.25362247423785667,w=0.5004040051775326,x=5.308845777780988 -color=red,shape=circle,flag=1,i=67110,u=0.044730829597704025,v=0.06555864543997994,w=0.5254451221566663,x=4.065249571884831 -color=orange,shape=square,flag=0,i=67111,u=0.6198382187331319,v=0.2982527573262761,w=0.4899112286385977,x=4.588381252452653 -color=red,shape=circle,flag=0,i=67116,u=0.23558327516561317,v=0.18191164629043607,w=0.5289976920989634,x=3.0849402550490734 -color=red,shape=circle,flag=0,i=67120,u=0.7029499310102802,v=0.7855524632564224,w=0.532657601008814,x=4.552258901807314 -color=red,shape=square,flag=0,i=67121,u=0.11017099160971788,v=0.9172209763950294,w=0.4675075683209409,x=3.3227826767726185 -color=yellow,shape=circle,flag=1,i=67132,u=0.2034961029948661,v=0.24282265457691143,w=0.5110378006927006,x=2.202025080476504 -color=red,shape=circle,flag=0,i=67151,u=0.21446023308587558,v=0.12871063260704096,w=0.5233480700607201,x=3.48131430457118 -color=blue,shape=square,flag=0,i=67153,u=0.811294472237815,v=0.7609423218095801,w=0.47830852095003895,x=4.6169775499145524 -color=red,shape=square,flag=1,i=67154,u=0.26748735061612194,v=0.011330267559624296,w=0.4592845818599402,x=5.022049367016508 -color=green,shape=triangle,flag=0,i=67155,u=0.8760937276605476,v=0.6086758643745905,w=0.47851822969782437,x=6.8273365261346255 -color=red,shape=triangle,flag=1,i=67161,u=0.8552653695574853,v=0.4317517129121736,w=0.5129891420711241,x=6.058565638729665 -color=red,shape=triangle,flag=0,i=67167,u=0.8663868317145373,v=0.5469619396068313,w=0.5167213802988432,x=3.5781012411377433 -color=purple,shape=square,flag=0,i=67172,u=0.6597405306363103,v=0.05231119312568355,w=0.5254846965803984,x=5.081634019722279 -color=yellow,shape=triangle,flag=1,i=67173,u=0.6292665793608427,v=0.7527639860823551,w=0.4996179091451437,x=2.6596030955269874 -color=purple,shape=square,flag=0,i=67175,u=0.8079679991649296,v=0.4339596087569675,w=0.5241812344253002,x=5.222991290029498 -color=green,shape=square,flag=0,i=67183,u=0.1649130446013265,v=0.11559652340112836,w=0.48940576107196065,x=6.31013075194948 -color=green,shape=square,flag=0,i=67200,u=0.36974074823157055,v=0.7778955532640902,w=0.4947591937299127,x=4.229129190538797 -color=purple,shape=circle,flag=0,i=67202,u=0.8408466265047859,v=0.31378357368010923,w=0.5405773621668882,x=5.499239543728046 -color=red,shape=square,flag=1,i=67219,u=0.09304559261759127,v=0.4274136001569173,w=0.45704577105724403,x=5.3430367229514255 -color=blue,shape=square,flag=1,i=67221,u=0.9737998030627488,v=0.32321593804913995,w=0.47377265093112625,x=4.803134494759509 -color=red,shape=square,flag=0,i=67247,u=0.7906914473459556,v=0.6238712972262597,w=0.45577226559151984,x=3.115842729362546 -color=red,shape=square,flag=1,i=67254,u=0.4724820151758632,v=0.40418115474135274,w=0.4557220380207631,x=6.094464796848755 -color=blue,shape=square,flag=1,i=67269,u=0.30239220543556244,v=0.008455494621451787,w=0.48059742367110847,x=4.613068554396242 -color=purple,shape=square,flag=1,i=67274,u=0.1568446022488631,v=0.0676113463686161,w=0.5248261493135646,x=5.40857482613658 -color=red,shape=circle,flag=0,i=67277,u=0.9743792957335071,v=0.9695009394097888,w=0.4918929260195619,x=6.460444786258642 -color=blue,shape=square,flag=1,i=67290,u=0.8283126571971555,v=0.7168326787935714,w=0.481374917480795,x=4.277394052783378 -color=blue,shape=square,flag=1,i=67318,u=0.9661317088764938,v=0.3280278868946216,w=0.4730325667871105,x=7.570326370156036 -color=blue,shape=triangle,flag=0,i=67335,u=0.8502290633459983,v=0.5148133316609538,w=0.5112618091687502,x=3.089441479475988 -color=red,shape=triangle,flag=0,i=67342,u=0.008427542977352487,v=0.7707074966308841,w=0.5307135816420264,x=4.402152853660554 -color=red,shape=circle,flag=1,i=67350,u=0.23513357894063258,v=0.14435263549633578,w=0.5074254222022195,x=5.649303602045116 -color=red,shape=triangle,flag=0,i=67383,u=0.730828399674826,v=0.5536174886909421,w=0.5480995744393308,x=5.19404293386826 -color=green,shape=triangle,flag=0,i=67422,u=0.20922823103187416,v=0.30157307877967043,w=0.4732996886222535,x=4.9845880382881145 -color=orange,shape=triangle,flag=0,i=67439,u=0.21051101433682518,v=0.896949830523208,w=0.5173441626125038,x=5.750977772451585 -color=purple,shape=square,flag=0,i=67440,u=0.5793926926771701,v=0.8650714632066344,w=0.5161255494607535,x=6.65752128919885 -color=blue,shape=circle,flag=1,i=67441,u=0.6605696382626751,v=0.49837549056668207,w=0.48787465412172504,x=7.605381432451677 -color=red,shape=circle,flag=0,i=67460,u=0.8306200504893689,v=0.8796656250473595,w=0.49806694698115805,x=4.85942200136293 -color=blue,shape=circle,flag=0,i=67468,u=0.4690602875832268,v=0.08148124959122183,w=0.48559495492927357,x=6.558285993609325 -color=purple,shape=triangle,flag=1,i=67474,u=0.5901803154515517,v=0.846276534455526,w=0.5185387785287199,x=4.025614304581798 -color=green,shape=triangle,flag=1,i=67492,u=0.49336257960897567,v=0.5862858408368612,w=0.4712553360668919,x=7.396479387845698 -color=yellow,shape=circle,flag=1,i=67509,u=0.31573074505134635,v=0.5905395360515501,w=0.5135844980655543,x=5.221156442034755 -color=purple,shape=triangle,flag=1,i=67532,u=0.5381553677997888,v=0.40134077017170555,w=0.5195272991285951,x=4.772200480028286 -color=red,shape=square,flag=0,i=67540,u=0.14382481823543358,v=0.9460901256723131,w=0.4795216346610163,x=4.202636215954668 -color=red,shape=triangle,flag=0,i=67541,u=0.3399283926992025,v=0.16422037044150006,w=0.536592033250578,x=3.9952006024221407 -color=yellow,shape=square,flag=1,i=67556,u=0.42773585019214744,v=0.7408199581118642,w=0.49964441827321476,x=2.9838276386594136 -color=red,shape=circle,flag=1,i=67561,u=0.26488584324669806,v=0.251126282519104,w=0.4958301992667927,x=6.588361810347281 -color=red,shape=square,flag=0,i=67567,u=0.4209195503598534,v=0.8757342586804544,w=0.4645327569839821,x=4.106378452042522 -color=green,shape=square,flag=0,i=67578,u=0.8509629782342558,v=0.5515418431137002,w=0.4839825597669376,x=3.3023385684066064 -color=red,shape=square,flag=0,i=67590,u=0.09991600873732587,v=0.06384578733863078,w=0.46753788516703854,x=6.174200183451327 -color=blue,shape=square,flag=1,i=67599,u=0.30638882765114106,v=0.10763270363327226,w=0.466334631251064,x=6.365675600648949 -color=red,shape=triangle,flag=0,i=67604,u=0.4321783466485628,v=0.7014568178708425,w=0.5202357082193139,x=5.907564170935971 -color=red,shape=square,flag=1,i=67624,u=0.4971741125411364,v=0.5811608655116559,w=0.45804152815932214,x=3.795977828471798 -color=purple,shape=square,flag=0,i=67631,u=0.40722897743097586,v=0.2225330196760652,w=0.5148022004105537,x=4.077167939918903 -color=red,shape=triangle,flag=0,i=67638,u=0.29759481172709,v=0.2082338663035449,w=0.5212116469794605,x=3.607383256658986 -color=red,shape=circle,flag=1,i=67653,u=0.4530359205476763,v=0.41167029713608355,w=0.47670396666188697,x=5.2140836081200135 -color=blue,shape=square,flag=0,i=67654,u=0.5382069084699173,v=0.14028017918246594,w=0.4700836846752964,x=2.8749297767695636 -color=red,shape=circle,flag=0,i=67658,u=0.8460038734049266,v=0.9067816101077448,w=0.4760517876452035,x=4.4751149277776685 -color=green,shape=triangle,flag=0,i=67661,u=0.19599119968689338,v=0.5384357358321801,w=0.47083636678830354,x=4.81248580971879 -color=red,shape=square,flag=0,i=67675,u=0.5802937490466814,v=0.6044216074346045,w=0.46473660164977854,x=4.343324010574871 -color=green,shape=triangle,flag=0,i=67688,u=0.19575790908233281,v=0.1380718680284786,w=0.4690077034300179,x=3.515254467587338 -color=purple,shape=circle,flag=0,i=67689,u=0.3965317033177346,v=0.6969675855759648,w=0.5220227178286838,x=4.730578059630629 -color=blue,shape=circle,flag=1,i=67698,u=0.7121384291276366,v=0.37101303387672635,w=0.4941902231781026,x=4.313664682837074 -color=red,shape=triangle,flag=0,i=67723,u=0.06375920134231694,v=0.9164632411989492,w=0.5114568826512258,x=3.6191818358278502 -color=red,shape=triangle,flag=1,i=67732,u=0.7955036927070805,v=0.12644458670870573,w=0.5032433890961331,x=6.647243383414671 -color=red,shape=square,flag=0,i=67749,u=0.9108788341301611,v=0.7589036131879225,w=0.48346232183731586,x=5.453951638273309 -color=blue,shape=circle,flag=1,i=67762,u=0.876557648513366,v=0.010226925181195501,w=0.49994301339533065,x=5.099098137981954 -color=red,shape=square,flag=0,i=67778,u=0.9036817450407312,v=0.05657640702145672,w=0.4789658838147387,x=3.1618019754259605 -color=red,shape=square,flag=0,i=67784,u=0.7509099093027015,v=0.5060859084930431,w=0.4841160159738699,x=4.391471974875909 -color=red,shape=circle,flag=0,i=67785,u=0.1852448089686518,v=0.20935648175645089,w=0.46794039693624667,x=5.7026292714456055 -color=orange,shape=triangle,flag=1,i=67792,u=0.6415179629775529,v=0.5370130515499791,w=0.5143329048103801,x=4.912780887917735 -color=red,shape=triangle,flag=1,i=67796,u=0.5084882560830951,v=0.3245223154587864,w=0.49987988713491327,x=6.363930854581859 -color=red,shape=triangle,flag=0,i=67802,u=0.6658650249803867,v=0.19862058901655777,w=0.5025258524105425,x=5.573042932024308 -color=red,shape=triangle,flag=0,i=67804,u=0.9628239390445612,v=0.6914016615516959,w=0.5031805873452655,x=5.590106052947546 -color=red,shape=square,flag=0,i=67806,u=0.03536694281345143,v=0.3112831253343247,w=0.4768333680564785,x=5.66150028085485 -color=purple,shape=square,flag=0,i=67810,u=0.2928082624097207,v=0.59729366806836,w=0.5226321868942799,x=5.860873755778478 -color=red,shape=circle,flag=0,i=67812,u=0.01581220245496673,v=0.04306459825296785,w=0.4739357245399127,x=2.9235751733266184 -color=red,shape=square,flag=0,i=67821,u=0.20255535941826142,v=0.7589055563480288,w=0.47381283637295724,x=4.025758277912924 -color=red,shape=triangle,flag=1,i=67830,u=0.15996978517117066,v=0.7591008185768334,w=0.5013304496228127,x=3.668401710802236 -color=purple,shape=triangle,flag=0,i=67833,u=0.21338053705360005,v=0.2988226037993801,w=0.525778379588284,x=2.753908275383377 -color=red,shape=triangle,flag=0,i=67841,u=0.5402158095684065,v=0.988717974750288,w=0.5016253274947949,x=5.497035672106951 -color=orange,shape=triangle,flag=0,i=67847,u=0.36746306902109926,v=0.5161574810505635,w=0.5176199566173642,x=3.1748088656576567 -color=purple,shape=square,flag=1,i=67852,u=0.19756755342177168,v=0.22278300313958432,w=0.5189691167910176,x=4.540737175404271 -color=red,shape=square,flag=1,i=67853,u=0.13981060968839087,v=0.4978146846472551,w=0.4714417044084672,x=5.905401820908257 -color=blue,shape=triangle,flag=1,i=67858,u=0.9612285128692593,v=0.9719369118711608,w=0.5227135321362504,x=4.753762935994645 -color=blue,shape=square,flag=0,i=67864,u=0.4488411746283215,v=0.06480690186199511,w=0.4736281436258382,x=7.417715122257813 -color=red,shape=triangle,flag=1,i=67870,u=0.0021843535603690567,v=0.5569773035323207,w=0.4976561831824928,x=4.041472724328929 -color=purple,shape=triangle,flag=0,i=67873,u=0.5084209941651522,v=0.2005164153691117,w=0.5279330216569906,x=6.466293137371827 -color=red,shape=square,flag=0,i=67878,u=0.878187436435287,v=0.46967493268125093,w=0.47241377518987776,x=4.900326908951866 -color=red,shape=circle,flag=1,i=67894,u=0.16334219308017184,v=0.12827290211140027,w=0.47126629591091806,x=1.801509416788143 -color=blue,shape=square,flag=1,i=67905,u=0.3359139042946343,v=0.29566956018031576,w=0.4693802177983527,x=3.219910729164217 -color=green,shape=triangle,flag=0,i=67907,u=0.985700789078508,v=0.08881532345550991,w=0.47566567791056025,x=5.239205390291109 -color=red,shape=triangle,flag=0,i=67913,u=0.8586410142217982,v=0.44541661998022286,w=0.5093962961678724,x=3.021149536827933 -color=red,shape=triangle,flag=1,i=67917,u=0.9621472170623827,v=0.6183930948625491,w=0.5098833626277339,x=3.91824631325485 -color=green,shape=circle,flag=0,i=67928,u=0.7185795012258754,v=0.22014963455723136,w=0.5114855523794521,x=6.756013786812303 -color=red,shape=triangle,flag=0,i=67934,u=0.30787631344588684,v=0.22235291110968713,w=0.5072790086934953,x=2.7685538757973505 -color=purple,shape=square,flag=0,i=67939,u=0.0910612863828183,v=0.2609391334321657,w=0.5188672866521942,x=6.666338514980583 -color=purple,shape=circle,flag=0,i=67978,u=0.37561590531696576,v=0.05981056809685281,w=0.5161431107435306,x=4.55727271434604 -color=purple,shape=triangle,flag=1,i=67982,u=0.8834419519412534,v=0.5040617053719859,w=0.532397177614643,x=4.944192871491981 -color=red,shape=triangle,flag=0,i=67999,u=0.668845012440946,v=0.5611892452180305,w=0.4960641488241489,x=6.972812342221473 -color=red,shape=triangle,flag=0,i=68000,u=0.5351149224657745,v=0.8313470284008747,w=0.49222493843884685,x=2.8888772231627655 -color=red,shape=triangle,flag=1,i=68039,u=0.0011360340761349397,v=0.4302369371119399,w=0.49208247539912736,x=5.660693105334708 -color=red,shape=circle,flag=1,i=68040,u=0.8297892987745266,v=0.8893828196261309,w=0.4795992454274786,x=6.59804591009307 -color=blue,shape=circle,flag=0,i=68074,u=0.29864025520426674,v=0.07510692087434934,w=0.5038441805253064,x=3.8249638890030337 -color=purple,shape=square,flag=0,i=68078,u=0.49345001551494017,v=0.07708064202491949,w=0.5066459348318622,x=5.340989529605572 -color=blue,shape=circle,flag=1,i=68087,u=0.3740715129195079,v=0.4452639041615416,w=0.5047240420749676,x=6.20678425351764 -color=blue,shape=square,flag=1,i=68091,u=0.23097613362920377,v=0.5557940853969917,w=0.4823596035342819,x=5.018269566032738 -color=blue,shape=triangle,flag=1,i=68092,u=0.7768011035297442,v=0.5188285159700683,w=0.5230796978624578,x=5.575880578520308 -color=yellow,shape=square,flag=1,i=68096,u=0.2659370596251577,v=0.9998381827889564,w=0.5220323129615507,x=4.022456641435475 -color=green,shape=square,flag=0,i=68100,u=0.2944144191648722,v=0.8086115518520445,w=0.46532901062942533,x=4.197153751310898 -color=purple,shape=square,flag=0,i=68109,u=0.6657314724345074,v=0.734073813410269,w=0.5059519178367344,x=6.406887007526845 -color=red,shape=triangle,flag=0,i=68112,u=0.7867756158025541,v=0.6517850912042173,w=0.46983712409693407,x=3.8827409286198495 -color=purple,shape=square,flag=0,i=68116,u=0.7927915957202445,v=0.3828753928547427,w=0.5096431992867221,x=6.474017858476223 -color=green,shape=square,flag=1,i=68128,u=0.34555720729544626,v=0.5763110034334317,w=0.4614497863759154,x=5.727328362215346 -color=red,shape=square,flag=0,i=68137,u=0.3063983514022208,v=0.32964409227594793,w=0.4690397819411294,x=6.096477652340938 -color=green,shape=triangle,flag=0,i=68147,u=0.7845603405317797,v=0.02278255307330279,w=0.48014102641028333,x=5.565178377345814 -color=purple,shape=square,flag=0,i=68151,u=0.764324077200473,v=0.24234318633612628,w=0.5058473015838383,x=5.549263008146947 -color=yellow,shape=square,flag=1,i=68175,u=0.3338594528779868,v=0.11380983840700687,w=0.5135074425464116,x=7.048062037617432 -color=red,shape=square,flag=0,i=68215,u=0.11332528494316718,v=0.017792348096119737,w=0.47592711342533944,x=5.517748304350454 -color=green,shape=circle,flag=0,i=68246,u=0.32523526995278396,v=0.618590891280269,w=0.5064267774034495,x=4.702670779509249 -color=green,shape=triangle,flag=0,i=68250,u=0.6199855371372242,v=0.28086165197811996,w=0.48440542914645784,x=4.210631680470752 -color=yellow,shape=circle,flag=1,i=68262,u=0.8122626715990472,v=0.15728750646318734,w=0.49521116688420147,x=3.891315182091191 -color=red,shape=square,flag=0,i=68268,u=0.40488371668974754,v=0.9350274816315169,w=0.484582442016185,x=5.557011337812445 -color=purple,shape=square,flag=0,i=68279,u=0.8976047879003065,v=0.4952902381450467,w=0.49397446304812587,x=3.626636581286695 -color=purple,shape=square,flag=0,i=68309,u=0.828135535713927,v=0.5461594658775379,w=0.4981642319899816,x=4.68406157466973 -color=red,shape=triangle,flag=0,i=68310,u=0.02111807207745353,v=0.19503944330702794,w=0.47156637512548233,x=5.770927005349891 -color=yellow,shape=triangle,flag=1,i=68315,u=0.10695321122262924,v=0.04401472363457726,w=0.47461610610691124,x=3.360348064106988 -color=yellow,shape=triangle,flag=0,i=68317,u=0.1977806627227694,v=0.828148191266892,w=0.47914132973267015,x=3.769914478937698 -color=green,shape=square,flag=0,i=68326,u=0.697680132484342,v=0.2753223251144453,w=0.47771955259966453,x=5.463519132240379 -color=green,shape=circle,flag=0,i=68346,u=0.4161369316736381,v=0.1340738538807631,w=0.5117645990897882,x=6.876227879199813 -color=blue,shape=triangle,flag=1,i=68355,u=0.10498752556757207,v=0.2703201968160799,w=0.5295901736415003,x=5.499988012389757 -color=yellow,shape=square,flag=1,i=68357,u=0.9280128629061655,v=0.49850725872859847,w=0.526428056071611,x=5.1940408602986805 -color=blue,shape=triangle,flag=1,i=68376,u=0.976513344745936,v=0.6585338787651902,w=0.5276956600771103,x=5.511983625834894 -color=red,shape=square,flag=0,i=68382,u=0.7286990618924857,v=0.5570649699163673,w=0.5000181574673307,x=5.261649771937158 -color=red,shape=square,flag=0,i=68389,u=0.1367802069170596,v=0.7142401863081582,w=0.5054326634850937,x=6.019281377848263 -color=red,shape=circle,flag=0,i=68391,u=0.3355353570512608,v=0.2623289813225954,w=0.4744892345478426,x=3.473785303162208 -color=green,shape=square,flag=0,i=68402,u=0.473489997589151,v=0.5762125908899266,w=0.47691118135321797,x=3.7804871994873412 -color=red,shape=square,flag=0,i=68405,u=0.4652944663682248,v=0.7569681968978113,w=0.5185611498669923,x=3.656014666575231 -color=red,shape=triangle,flag=0,i=68412,u=0.05702941272009865,v=0.44537417530679535,w=0.45588765898427475,x=6.567563312055866 -color=yellow,shape=triangle,flag=1,i=68448,u=0.18776073140867766,v=0.7494400135054345,w=0.49463791144909613,x=4.388613491412687 -color=green,shape=square,flag=0,i=68454,u=0.3781051733102999,v=0.26582164718146906,w=0.46772728930856416,x=5.59125372548202 -color=green,shape=triangle,flag=1,i=68472,u=0.6983900098757269,v=0.6289056527563444,w=0.4830460689169057,x=3.144676445630877 -color=yellow,shape=square,flag=1,i=68477,u=0.3628377432277585,v=0.06684589775364813,w=0.5183343779431111,x=4.3370769955264015 -color=blue,shape=circle,flag=0,i=68492,u=0.9983300113363165,v=0.2542428343376858,w=0.5055328110782875,x=7.5870200820254325 -color=yellow,shape=square,flag=1,i=68495,u=0.3529671400524197,v=0.3386075310696972,w=0.5124236052327679,x=3.836611999052964 -color=blue,shape=triangle,flag=0,i=68509,u=0.7847102910400018,v=0.14220869349572907,w=0.5213294859665485,x=7.475707723402412 -color=red,shape=triangle,flag=1,i=68511,u=0.9926670247732102,v=0.8910383667364378,w=0.4572484265951943,x=4.944826304327351 -color=red,shape=square,flag=0,i=68519,u=0.22425852642483557,v=0.3426099466672562,w=0.5175712081835074,x=4.794319278978379 -color=purple,shape=triangle,flag=0,i=68532,u=0.5334993732529922,v=0.13945970463701696,w=0.5336182492072351,x=3.4234447882956403 -color=purple,shape=square,flag=0,i=68535,u=0.625625295935268,v=0.42532629361317775,w=0.5112185429091727,x=5.9231224388120545 -color=red,shape=triangle,flag=0,i=68557,u=0.012928014813329836,v=0.6567404209726571,w=0.4547980982293529,x=2.686645936295603 -color=purple,shape=triangle,flag=0,i=68563,u=0.5941850377067739,v=0.3993670492705633,w=0.5291643212180438,x=5.56227143262337 -color=red,shape=circle,flag=0,i=68575,u=0.09559948946113006,v=0.10106289976297325,w=0.4718349560848555,x=3.53817067943994 -color=red,shape=square,flag=0,i=68577,u=0.8376276345925656,v=0.3582182646212917,w=0.5151496768230458,x=7.2669339256273835 -color=purple,shape=triangle,flag=0,i=68592,u=0.28382875564140386,v=0.5856736375729285,w=0.5289983001895936,x=6.894285022208653 -color=purple,shape=square,flag=0,i=68597,u=0.40225357655868754,v=0.48207742744425686,w=0.5169124934666831,x=5.512893844372549 -color=purple,shape=square,flag=0,i=68600,u=0.22148529017906327,v=0.8019312932109042,w=0.512149900791891,x=4.773464678154914 -color=purple,shape=triangle,flag=0,i=68618,u=0.7614489113414785,v=0.9623021645343284,w=0.530167685095895,x=4.281326069788846 -color=yellow,shape=triangle,flag=1,i=68623,u=0.2660480443335692,v=0.9222304725006795,w=0.5055172482367397,x=3.22429127314756 -color=green,shape=circle,flag=0,i=68628,u=0.7641230740731968,v=0.5353101455582845,w=0.5113588475927884,x=4.846160843285455 -color=red,shape=circle,flag=0,i=68668,u=0.9500489980255084,v=0.903446356456837,w=0.4881501907593259,x=3.3727762245931934 -color=red,shape=triangle,flag=0,i=68683,u=0.4129642389409839,v=0.3892464671534208,w=0.468213053217685,x=5.447759504443021 -color=red,shape=triangle,flag=1,i=68691,u=0.7600315259533497,v=0.3710709264092896,w=0.4646973831384869,x=5.8654463519229125 -color=purple,shape=square,flag=0,i=68694,u=0.4030199075011802,v=0.06775246258424994,w=0.5069963278064568,x=5.610068041214974 -color=blue,shape=square,flag=1,i=68702,u=0.7617100085931011,v=0.4249382302961203,w=0.4879080101761871,x=5.85245841399487 -color=red,shape=triangle,flag=0,i=68710,u=0.6695191385624132,v=0.029246264919047138,w=0.46860213368980347,x=6.92114895242112 -color=red,shape=square,flag=0,i=68728,u=0.8414284355674937,v=0.04032436235487513,w=0.5201041997323839,x=5.994154585022702 -color=red,shape=square,flag=0,i=68731,u=0.018494278189453595,v=0.04784358651825715,w=0.5215761541362249,x=4.99676035192983 -color=red,shape=circle,flag=0,i=68732,u=0.6329163121429047,v=0.6882188392357669,w=0.4823483666282965,x=4.084033058521265 -color=red,shape=circle,flag=0,i=68737,u=0.8455809630074161,v=0.8858345858520237,w=0.47899125892467204,x=6.3619154995619285 -color=red,shape=triangle,flag=0,i=68738,u=0.1375190930931086,v=0.877978400114902,w=0.4736324759462279,x=4.629438831663366 -color=red,shape=square,flag=0,i=68755,u=0.09865805164903618,v=0.684841955415073,w=0.5166274355605394,x=5.963371434324311 -color=red,shape=square,flag=0,i=68762,u=0.03263522972817534,v=0.07164894231538299,w=0.5171424337836874,x=4.833766916225087 -color=yellow,shape=square,flag=1,i=68763,u=0.5533610297601814,v=0.701555630690594,w=0.5284683441472497,x=4.456958738082069 -color=red,shape=triangle,flag=0,i=68766,u=0.8453844923183049,v=0.9319411188207832,w=0.47241453073709627,x=5.486948343923898 -color=green,shape=square,flag=0,i=68770,u=0.5426928693992278,v=0.9162649382935716,w=0.47334851689722646,x=4.693403410838484 -color=red,shape=triangle,flag=0,i=68779,u=0.4760694653532198,v=0.8030095761192232,w=0.4708036880823985,x=3.9931953989197786 -color=red,shape=triangle,flag=1,i=68801,u=0.47723442788338033,v=0.7845935420188765,w=0.46913353509850775,x=6.5273753064857685 -color=red,shape=circle,flag=0,i=68802,u=0.4760922812719409,v=0.49672867541833843,w=0.46680574403151737,x=6.915604252345591 -color=red,shape=circle,flag=0,i=68805,u=0.13532064437291802,v=0.1615719977197794,w=0.47132291232384516,x=4.331543077612349 -color=red,shape=square,flag=0,i=68819,u=0.7666884100197773,v=0.28451320002589364,w=0.5030926298040588,x=3.884116182180667 -color=red,shape=triangle,flag=0,i=68820,u=0.38657177398652875,v=0.04894755172925214,w=0.4661726534877161,x=6.596289859578107 -color=red,shape=square,flag=0,i=68822,u=0.5215992936741864,v=0.2856326211190313,w=0.5040118302781285,x=4.513434246673131 -color=red,shape=triangle,flag=0,i=68835,u=0.6718416603920457,v=0.5216962119664431,w=0.4656868808590736,x=3.9972913459664148 -color=yellow,shape=triangle,flag=1,i=68839,u=0.2881586787610234,v=0.5471584288917918,w=0.5081595722550083,x=6.295198888515725 -color=red,shape=circle,flag=1,i=68840,u=0.6457236337320433,v=0.7431528875144406,w=0.46919569851031856,x=3.8891074728054034 -color=red,shape=circle,flag=0,i=68842,u=0.09775429457503426,v=-0.0020524378823035816,w=0.47040561743747966,x=5.082402046500879 -color=red,shape=triangle,flag=0,i=68851,u=0.1559640656902983,v=0.37991863616113775,w=0.46215011721325505,x=6.534293115763405 -color=blue,shape=square,flag=0,i=68858,u=0.9092981641584647,v=0.32221595760350197,w=0.47801076838412243,x=5.373613025816827 -color=red,shape=square,flag=0,i=68875,u=0.3099047825782869,v=0.2961812629075966,w=0.4855249179478112,x=3.6563096477504264 -color=red,shape=circle,flag=0,i=68876,u=0.5177467961448814,v=0.5099872601269796,w=0.4764050653510098,x=5.5642968182624 -color=yellow,shape=triangle,flag=1,i=68886,u=0.059726821797589036,v=0.8211672626399925,w=0.5156673338140635,x=6.2609667972142296 -color=blue,shape=triangle,flag=0,i=68889,u=0.7134633373824785,v=0.5328742313315238,w=0.533171757183686,x=5.6541624976013125 -color=green,shape=square,flag=1,i=68899,u=0.14185245884199305,v=0.09606096864832747,w=0.4800759751576183,x=3.963803606163611 -color=green,shape=circle,flag=0,i=68907,u=0.6988260193676281,v=0.5285436197395215,w=0.5139192482516397,x=5.9630840816031885 -color=red,shape=triangle,flag=0,i=68920,u=0.5211397634681679,v=0.758986596302163,w=0.4599308397258781,x=5.759341856375319 -color=blue,shape=triangle,flag=1,i=68928,u=0.6510425415988589,v=0.9062124772068315,w=0.5282749493615922,x=3.6556157930082187 -color=red,shape=circle,flag=1,i=68935,u=0.16677327299138378,v=0.14845197827952564,w=0.4783097208132937,x=3.7897283172667606 -color=red,shape=triangle,flag=0,i=68975,u=0.24651780035484205,v=0.12624152516009202,w=0.4603921738184078,x=3.0095879766986826 -color=red,shape=circle,flag=0,i=68977,u=0.09275798208673347,v=-0.002090729770024252,w=0.4870519173765326,x=5.151192972929663 -color=blue,shape=circle,flag=1,i=68986,u=0.5655322547794535,v=0.9181929232092501,w=0.5283330413631823,x=4.49786172817804 -color=green,shape=square,flag=0,i=68995,u=0.8739067295472751,v=0.16005246375419435,w=0.4872252272343391,x=3.4504146635686617 -color=blue,shape=square,flag=0,i=69005,u=0.36073384533414266,v=0.4956431868677028,w=0.47917380454138014,x=4.877630842578681 -color=red,shape=square,flag=0,i=69017,u=0.918359677682029,v=0.08726651880207492,w=0.48787291174522796,x=5.966882703544101 -color=yellow,shape=circle,flag=1,i=69018,u=0.27965547911277056,v=0.1919615473803814,w=0.5144380638672983,x=6.810846662517374 -color=green,shape=triangle,flag=1,i=69030,u=0.4986474511576042,v=0.9168035360952317,w=0.477854666893145,x=5.09415802151272 -color=red,shape=square,flag=0,i=69046,u=0.02210119598479232,v=0.49061545926465844,w=0.4979407434728175,x=7.190117079808278 -color=red,shape=triangle,flag=0,i=69048,u=0.8849816156878877,v=0.46870012123607485,w=0.4587588000824334,x=3.652186861619159 -color=yellow,shape=triangle,flag=1,i=69051,u=0.49852385798529597,v=0.7803230047616176,w=0.5077746458439206,x=6.342513016850216 -color=red,shape=circle,flag=0,i=69062,u=0.23595652722759153,v=0.21542355900335747,w=0.47953787376412843,x=5.440633616613831 -color=red,shape=circle,flag=0,i=69064,u=0.0006711367180041172,v=-0.028023015666464146,w=0.4792649380793085,x=4.915306117440554 -color=blue,shape=circle,flag=0,i=69066,u=0.33658755129596907,v=0.740311484519669,w=0.5371168347131089,x=4.17793368628434 -color=red,shape=square,flag=0,i=69079,u=0.009779894076680451,v=0.667190141515633,w=0.4969965606017363,x=4.106394373976512 -color=red,shape=triangle,flag=0,i=69083,u=0.47143920100465087,v=0.009957568472394929,w=0.4578295742128322,x=5.1971429135054015 -color=red,shape=square,flag=0,i=69094,u=0.8061790981177414,v=0.5940705819003267,w=0.4930204202450082,x=4.947868683963813 -color=blue,shape=triangle,flag=1,i=69098,u=0.7658001053348079,v=0.33740504420794826,w=0.5195701744262636,x=3.8315334406737143 -color=yellow,shape=triangle,flag=1,i=69100,u=0.8799777468862519,v=0.8371877735336805,w=0.5113921544312108,x=5.881891279724761 -color=yellow,shape=square,flag=1,i=69105,u=0.44601917373704403,v=0.28511146802981924,w=0.5208687052981408,x=4.848393167658788 -color=purple,shape=triangle,flag=0,i=69106,u=0.29250907174717156,v=0.43841986906152064,w=0.5206153305504506,x=4.697284794661885 -color=yellow,shape=triangle,flag=1,i=69119,u=0.13556721322971543,v=0.6048614115285981,w=0.5143676948375627,x=6.866589398994655 -color=green,shape=square,flag=0,i=69122,u=0.9443317521353046,v=0.561292541128249,w=0.47880422831467084,x=6.095999920301009 -color=blue,shape=circle,flag=1,i=69123,u=0.9369334616587377,v=0.7804787229682106,w=0.5365706540074183,x=7.029578083128769 -color=purple,shape=triangle,flag=0,i=69126,u=0.497660533107116,v=0.31338072573649467,w=0.528526443516083,x=5.041662044267623 -color=red,shape=square,flag=0,i=69143,u=0.6216454368164317,v=0.9608539884963702,w=0.47558845436920966,x=5.2188758653772105 -color=red,shape=square,flag=0,i=69151,u=0.059026999948722514,v=0.10658989783039596,w=0.4716319123778163,x=5.067649940319932 -color=blue,shape=triangle,flag=1,i=69167,u=0.08946041756959022,v=0.10118704842128567,w=0.5098947310986154,x=6.602260971173923 -color=red,shape=circle,flag=0,i=69172,u=0.19509133273781787,v=0.12615932642522254,w=0.45811889322440624,x=4.774104105172287 -color=blue,shape=triangle,flag=1,i=69179,u=0.9666694566440466,v=0.5843670667530714,w=0.5171527031821277,x=5.9572296221679615 -color=red,shape=triangle,flag=1,i=69193,u=0.20854251977726201,v=0.8308784880530742,w=0.4669532798910778,x=5.334280001786786 -color=red,shape=circle,flag=1,i=69198,u=0.7724314656419924,v=0.787612322543885,w=0.44520886502459867,x=6.34225269276731 -color=red,shape=square,flag=0,i=69201,u=0.03561220969758283,v=0.8577325406783857,w=0.46524448665285945,x=5.4968567737069405 -color=green,shape=circle,flag=0,i=69210,u=0.9827830702738234,v=0.14118427991724614,w=0.5039932043107836,x=6.11286504787189 -color=blue,shape=square,flag=1,i=69213,u=0.5955781060646785,v=0.1631643351553299,w=0.4685909978146904,x=4.760338164940683 -color=red,shape=square,flag=0,i=69214,u=0.5690609254023578,v=0.7176829571239673,w=0.46706020645301366,x=2.891694325083255 -color=yellow,shape=triangle,flag=1,i=69228,u=0.061741592804722356,v=0.6497840944211585,w=0.5133026308117076,x=7.4798569993523865 -color=blue,shape=circle,flag=0,i=69232,u=0.12621927057552473,v=0.26918991598572883,w=0.5335349542208438,x=4.60215649639514 -color=red,shape=square,flag=0,i=69256,u=0.14394871521246977,v=0.6362466800046659,w=0.4762780678243511,x=3.451643404979985 -color=yellow,shape=circle,flag=1,i=69258,u=0.4389388331307189,v=0.6900425260452325,w=0.5200368566408604,x=4.624641979988268 -color=red,shape=triangle,flag=0,i=69260,u=0.5453639666555096,v=0.6308363411540232,w=0.4742871013489679,x=3.1105956071546537 -color=blue,shape=square,flag=1,i=69284,u=0.5343652945627411,v=0.9260871677546342,w=0.46516820754265464,x=5.668219696078864 -color=blue,shape=square,flag=1,i=69296,u=0.48110872673581706,v=0.5279332175280251,w=0.46713160689216376,x=3.374628314274664 -color=blue,shape=triangle,flag=1,i=69302,u=0.31972254299951197,v=0.29063653872860684,w=0.5217710009178079,x=4.337592874970713 -color=red,shape=square,flag=0,i=69313,u=0.05340157806832513,v=0.4348439989034647,w=0.4655866454606626,x=4.277654257365081 -color=green,shape=triangle,flag=0,i=69315,u=0.5206472355245816,v=0.3520437165971796,w=0.47988621348603344,x=6.654344537657977 -color=red,shape=square,flag=0,i=69329,u=0.07507013297557164,v=0.6538902796344467,w=0.4721540921348289,x=3.6604057939688293 -color=red,shape=square,flag=0,i=69332,u=0.7697384633757886,v=0.4386267313320903,w=0.4712385338887111,x=3.6483381219756663 -color=red,shape=circle,flag=0,i=69366,u=0.6072325796803902,v=0.6755849284472571,w=0.4387174181398574,x=6.353089622811791 -color=red,shape=square,flag=1,i=69412,u=0.5623192542324812,v=0.8704045787594452,w=0.45218856436499505,x=3.968587094464315 -color=yellow,shape=square,flag=1,i=69413,u=0.0818768857778348,v=0.0783936436757765,w=0.5076317502611338,x=5.058755790405443 -color=red,shape=triangle,flag=0,i=69416,u=0.9819644201614285,v=0.636219170186856,w=0.4648596943425631,x=7.196424086256478 -color=blue,shape=square,flag=0,i=69419,u=0.9283113482754644,v=0.4296763566281766,w=0.46194099896555124,x=5.202635143009017 -color=red,shape=triangle,flag=0,i=69428,u=0.7956929045480968,v=0.7186188935075404,w=0.4674840488859866,x=4.914124758937222 -color=red,shape=triangle,flag=0,i=69431,u=0.04800803049191993,v=0.47933790870604664,w=0.4635665650276448,x=5.80115161916817 -color=purple,shape=triangle,flag=0,i=69439,u=0.4215032142713818,v=0.46272749061099705,w=0.522616227385514,x=7.119606450879161 -color=red,shape=square,flag=0,i=69442,u=0.4497046319214262,v=0.840045763940314,w=0.4601046413833293,x=5.782061700594266 -color=red,shape=square,flag=0,i=69448,u=0.8818526170729677,v=0.8322831311637614,w=0.4650497483764701,x=5.129504075985016 -color=yellow,shape=square,flag=1,i=69454,u=0.8107763871550109,v=0.22561331651499195,w=0.5068366868692024,x=6.123542071306427 -color=red,shape=circle,flag=0,i=69455,u=0.2911472217638337,v=0.3720351095560285,w=0.44890421610307735,x=4.4002387825964115 -color=red,shape=triangle,flag=1,i=69456,u=0.4879913670796475,v=0.44554244347317673,w=0.4646245722914073,x=3.347448849989378 -color=green,shape=square,flag=0,i=69458,u=0.7688657288100241,v=0.70965545241211,w=0.48054538042736333,x=4.218731339655735 -color=green,shape=triangle,flag=0,i=69460,u=0.4122953819481596,v=0.5499824840751137,w=0.48516194823676473,x=2.958900291199454 -color=purple,shape=square,flag=0,i=69462,u=0.600959810942846,v=0.5151284060595234,w=0.49258804502782116,x=3.836709058566605 -color=purple,shape=square,flag=0,i=69478,u=0.929933974629326,v=0.03924294555892005,w=0.49158330662423105,x=6.305247351543206 -color=red,shape=circle,flag=1,i=69486,u=0.7545810062790629,v=0.687411113750077,w=0.46133075223650144,x=5.276050293313197 -color=orange,shape=circle,flag=1,i=69496,u=0.4324817003273569,v=0.3302611903833793,w=0.49890359164150405,x=6.118703989480785 -color=red,shape=circle,flag=0,i=69501,u=0.814136224158346,v=0.850993325245652,w=0.45705196223466754,x=5.611084068493458 -color=purple,shape=circle,flag=0,i=69512,u=0.1824866577759634,v=0.6508141587171782,w=0.5219347899099144,x=4.6298025328496735 -color=blue,shape=square,flag=1,i=69544,u=0.3797186966689098,v=0.039858283310917564,w=0.4715666563949616,x=5.065767594788532 -color=green,shape=square,flag=0,i=69553,u=0.24715997169611548,v=0.21161724515668323,w=0.4956862540070395,x=3.042423353646378 -color=red,shape=triangle,flag=0,i=69554,u=0.8096588006268209,v=0.17796429849044226,w=0.4608969613607288,x=6.937385364429591 -color=red,shape=circle,flag=0,i=69568,u=0.4990551540742264,v=0.5400396781251594,w=0.460149996409612,x=4.081343840360213 -color=green,shape=square,flag=0,i=69578,u=0.7025718140001154,v=0.7889187578526875,w=0.4959657697515365,x=4.276896945716246 -color=green,shape=square,flag=0,i=69583,u=0.5820130837551444,v=0.5515958146829859,w=0.49273129965879453,x=4.777282784027128 -color=yellow,shape=triangle,flag=1,i=69605,u=0.6634226080943237,v=0.8253328918913303,w=0.5133258801154447,x=4.043723899620055 -color=red,shape=triangle,flag=1,i=69637,u=0.5336968281506377,v=0.012718468676372607,w=0.47182098400103717,x=6.976448912843615 -color=red,shape=triangle,flag=0,i=69639,u=0.3037688393349792,v=0.5707837057672708,w=0.47077687932071144,x=4.867738581652589 -color=yellow,shape=square,flag=0,i=69652,u=0.4301534938159117,v=0.8774600177616122,w=0.4894989946219708,x=5.3226443514652555 -color=blue,shape=triangle,flag=0,i=69659,u=0.8847081101733607,v=0.6606333927684054,w=0.5214476059473266,x=4.899736806234068 -color=yellow,shape=square,flag=1,i=69661,u=0.5120017554584522,v=0.8935109639421571,w=0.4895631453745595,x=6.017421579470294 -color=red,shape=circle,flag=1,i=69666,u=0.8973184372570012,v=0.874232933124548,w=0.45269896016310357,x=7.129393621203346 -color=red,shape=square,flag=1,i=69667,u=0.6053184172889774,v=0.018361475148605866,w=0.47903939198546974,x=5.424039450162838 -color=purple,shape=square,flag=0,i=69672,u=0.5672166069534896,v=0.34128344720370807,w=0.4908837690414435,x=6.359669182038199 -color=purple,shape=square,flag=0,i=69684,u=0.18634132483074772,v=0.034616561508754584,w=0.49519749645430744,x=5.39285393218865 -color=green,shape=square,flag=0,i=69703,u=0.3722992670621068,v=0.8142035946389312,w=0.48472094597820187,x=5.437069110693275 -color=yellow,shape=square,flag=1,i=69713,u=0.4607518717752783,v=0.32231468596367274,w=0.4876113609152386,x=6.600285415903593 -color=blue,shape=triangle,flag=1,i=69721,u=0.031817234745955325,v=0.49563236737951144,w=0.5191382681514833,x=5.102323737786801 -color=yellow,shape=circle,flag=1,i=69740,u=0.19839657429917068,v=0.507399125690283,w=0.513004341377871,x=7.854744461260047 -color=red,shape=circle,flag=0,i=69745,u=0.43321093254383936,v=0.4312311951841651,w=0.4601522763939675,x=5.870681050340848 -color=red,shape=square,flag=0,i=69747,u=0.0033969810194677263,v=0.5576734202441213,w=0.46397392912819146,x=5.770210263730799 -color=green,shape=circle,flag=0,i=69749,u=0.31195228332924463,v=0.34438639680563776,w=0.4988872194566121,x=4.228275571750981 -color=blue,shape=square,flag=1,i=69754,u=0.23803534959272155,v=0.15635083726405385,w=0.4697949892497802,x=4.344280979409066 -color=green,shape=square,flag=0,i=69755,u=0.05824898236792997,v=0.9901745564521951,w=0.4881026272243993,x=5.0841145684671725 -color=red,shape=triangle,flag=0,i=69785,u=0.3277309937956212,v=0.06608620839396484,w=0.47684260238886017,x=4.589788918537699 -color=green,shape=triangle,flag=0,i=69798,u=0.374622463516212,v=0.3759650945485026,w=0.48362435956581207,x=7.110279668730697 -color=green,shape=triangle,flag=0,i=69799,u=0.6000201934150515,v=0.47634380979460755,w=0.4831529789309448,x=5.781075180579241 -color=green,shape=triangle,flag=0,i=69804,u=0.6158281209636258,v=0.4699339650007536,w=0.482701088608407,x=3.005270129700188 -color=red,shape=circle,flag=1,i=69811,u=0.5057174357673917,v=0.46014759488014645,w=0.45305185144573756,x=3.7692174686807345 -color=orange,shape=square,flag=1,i=69812,u=0.12979313628882894,v=0.7127822716567956,w=0.4847977963945583,x=3.6479664203071045 -color=red,shape=triangle,flag=0,i=69817,u=0.5945656363704701,v=0.9052596395874356,w=0.47386286060674215,x=5.927743882138195 -color=green,shape=square,flag=0,i=69821,u=0.43226427321527605,v=0.0014318954638008474,w=0.483275331621697,x=5.660463244762102 -color=red,shape=triangle,flag=0,i=69844,u=0.2322371463987839,v=0.25770388203203676,w=0.4772984088650054,x=4.76850930905141 -color=green,shape=circle,flag=0,i=69864,u=0.7068180962371635,v=0.023451719540563243,w=0.5018411850443318,x=4.302412074156987 -color=red,shape=square,flag=0,i=69875,u=0.5613761706070518,v=0.25279499318800525,w=0.46091061410189244,x=5.352226872612641 -color=red,shape=circle,flag=1,i=69876,u=0.1952785512717301,v=0.2271607997456859,w=0.4489002707282888,x=5.421188669537877 -color=red,shape=triangle,flag=1,i=69877,u=0.09616285653948198,v=0.8264679058634747,w=0.47727404777677523,x=6.620045357133544 -color=green,shape=triangle,flag=0,i=69884,u=0.12616019698851932,v=0.904472633940801,w=0.48978609245475213,x=6.148228490515784 -color=yellow,shape=square,flag=1,i=69892,u=0.24676035617307335,v=0.9408061148806862,w=0.512305181239476,x=4.9462372411489195 -color=red,shape=triangle,flag=1,i=69902,u=0.439815272440947,v=0.4344324065428421,w=0.4808735240717272,x=6.213799559430444 -color=yellow,shape=triangle,flag=1,i=69904,u=0.001300228762057487,v=0.2062778463807362,w=0.501407681655131,x=5.9095345942475825 -color=blue,shape=circle,flag=0,i=69914,u=0.41971724674041433,v=0.9319054335523033,w=0.539462070053501,x=1.4173071784250093 -color=red,shape=triangle,flag=0,i=69921,u=0.009361452526190361,v=0.5965779108821103,w=0.4715481439171798,x=5.519374819655067 -color=blue,shape=triangle,flag=0,i=69934,u=0.6406480887508884,v=0.7546962668518489,w=0.5188758604918126,x=5.537662801543306 -color=purple,shape=square,flag=0,i=69935,u=0.37988121844067013,v=0.02226646406720656,w=0.5156318560807699,x=5.668811695920972 -color=blue,shape=square,flag=0,i=69949,u=0.030086538972189047,v=0.8118791094991538,w=0.46483096089673476,x=5.3567945011725016 -color=red,shape=square,flag=0,i=69955,u=0.7036638631883033,v=0.004856929691393064,w=0.47633000604326803,x=5.626071953618396 -color=purple,shape=square,flag=0,i=69988,u=0.2489015509955531,v=0.7568490872846169,w=0.5152912436488364,x=3.8566493738130236 -color=red,shape=triangle,flag=0,i=70009,u=0.28843229951710103,v=0.7482334016767954,w=0.47653705075616476,x=3.94562059219324 -color=blue,shape=triangle,flag=1,i=70015,u=0.7935828014602364,v=0.14693530926332676,w=0.5208818692545475,x=6.844514711530233 -color=red,shape=triangle,flag=0,i=70039,u=0.33896859896208564,v=0.8144008393004512,w=0.47027353090421314,x=5.704509784389781 -color=yellow,shape=triangle,flag=1,i=70057,u=0.41801286289636086,v=0.8713945317636304,w=0.5060218053756067,x=5.071653188434744 -color=red,shape=triangle,flag=0,i=70063,u=0.27281585129215047,v=0.48073229906370984,w=0.47820529927426686,x=6.368837215359647 -color=red,shape=circle,flag=1,i=70094,u=0.1296067149114526,v=0.2184913050919094,w=0.46907437185940687,x=6.0027119639172675 -color=green,shape=square,flag=0,i=70097,u=0.3991884279483219,v=0.09112729509684525,w=0.4861274627904305,x=3.276707368273465 -color=orange,shape=triangle,flag=0,i=70098,u=0.593285937191172,v=0.26421878516356845,w=0.5142195589656878,x=4.763758558738041 -color=red,shape=square,flag=0,i=70131,u=0.8306451360531165,v=0.8641131731876416,w=0.4828972580357625,x=4.1764711471015 -color=red,shape=triangle,flag=1,i=70132,u=0.3293301917344511,v=0.8639722133495149,w=0.48497071739703485,x=4.284756967994485 -color=green,shape=triangle,flag=1,i=70167,u=0.0819418848539123,v=0.6668598059481504,w=0.4827603698364912,x=4.585792560353115 -color=purple,shape=square,flag=0,i=70176,u=0.19979467952627794,v=0.9532631395456415,w=0.5236857005770857,x=4.779891558246537 -color=green,shape=square,flag=0,i=70186,u=0.4971397223115398,v=0.7385307093498256,w=0.4904671941431531,x=6.091184888625186 -color=red,shape=circle,flag=0,i=70232,u=0.47895903350709546,v=0.39915190865134625,w=0.46789761839139826,x=6.771695313720123 -color=green,shape=circle,flag=0,i=70251,u=0.6122582536527329,v=0.08002207871938238,w=0.5202345069695744,x=4.086525989111807 -color=red,shape=square,flag=0,i=70260,u=0.3383749796723805,v=0.3875133560367806,w=0.48900758357219504,x=5.529894776399036 -color=blue,shape=square,flag=1,i=70261,u=0.5447251539404915,v=0.006059722228251241,w=0.47619769719724026,x=4.7661166405307815 -color=red,shape=circle,flag=0,i=70263,u=0.7067346048622455,v=0.76716389704191,w=0.47003603675883254,x=2.7439544178395807 -color=purple,shape=square,flag=1,i=70295,u=0.42838822900129525,v=0.62129010244363,w=0.5133571731134445,x=5.042874484503295 -color=red,shape=circle,flag=0,i=70303,u=0.32679568006347026,v=0.4111216034890369,w=0.4653032513646058,x=6.115243255368423 -color=red,shape=circle,flag=0,i=70304,u=0.9303422661422813,v=0.9584328358505106,w=0.46607141033196303,x=3.972684739317477 -color=blue,shape=triangle,flag=0,i=70311,u=0.20741575838026827,v=0.76092037729762,w=0.5147986841875498,x=1.999197376053828 -color=yellow,shape=circle,flag=1,i=70336,u=0.48445619111842453,v=0.3534518509560315,w=0.5015195472835544,x=4.922891134981402 -color=red,shape=triangle,flag=0,i=70341,u=0.1041219723795922,v=0.5529578253060873,w=0.5026036179374485,x=5.9670715419675995 -color=purple,shape=circle,flag=0,i=70348,u=0.9533892200777749,v=0.5735542815099814,w=0.5132094122283021,x=4.04531075756608 -color=red,shape=triangle,flag=1,i=70350,u=0.8621549950984946,v=0.5621723342380833,w=0.49767486640132536,x=5.468406224600032 -color=yellow,shape=triangle,flag=0,i=70356,u=0.0662145268661527,v=0.2543285042303731,w=0.5088129366861065,x=3.0142929374027205 -color=green,shape=circle,flag=0,i=70369,u=0.20387644657041237,v=0.6327726229440156,w=0.5125926949365995,x=3.3309441046898147 -color=red,shape=circle,flag=1,i=70403,u=0.03182564851492309,v=0.028769986756787456,w=0.4693275542989095,x=5.838711779702892 -color=red,shape=circle,flag=0,i=70411,u=0.33124006750192214,v=0.2912219753575103,w=0.4635522256612755,x=3.04588452244588 -color=purple,shape=square,flag=0,i=70428,u=0.17126363186301197,v=0.08294783428384,w=0.5077358977400327,x=4.604046489623582 -color=yellow,shape=circle,flag=1,i=70455,u=0.6033446013550903,v=0.00221064395135695,w=0.4946696074733959,x=4.257804042412244 -color=green,shape=triangle,flag=1,i=70468,u=0.08653907563957397,v=0.45754942090935835,w=0.4907660603322923,x=5.895955143582559 -color=purple,shape=square,flag=0,i=70477,u=0.5839492033679627,v=0.8006458535536909,w=0.505755772205924,x=2.0853164777551614 -color=yellow,shape=circle,flag=1,i=70486,u=0.20930617141526897,v=0.9979282889331919,w=0.49251319852125297,x=5.974648419959032 -color=orange,shape=circle,flag=0,i=70504,u=0.48203830513556145,v=0.4497923540027192,w=0.49351750880563383,x=6.299390594748737 -color=blue,shape=triangle,flag=1,i=70518,u=0.7776150866441245,v=0.11462301412408815,w=0.510077369386084,x=5.823944795901187 -color=green,shape=square,flag=0,i=70519,u=0.168119656393256,v=0.5464456733619076,w=0.4809871498689162,x=5.645304580573757 -color=red,shape=circle,flag=0,i=70527,u=0.652017001976078,v=0.614572626533121,w=0.45870958286741786,x=7.191618056214211 -color=red,shape=square,flag=0,i=70529,u=0.17915768564879686,v=0.8368672884112376,w=0.5140331125492308,x=4.00728776976045 -color=red,shape=triangle,flag=0,i=70534,u=0.8856658330982353,v=0.9691902080376713,w=0.4933038353541619,x=5.141974357872562 -color=red,shape=triangle,flag=0,i=70552,u=0.13466344997959467,v=0.573630591842171,w=0.4881475642559347,x=3.2997965676447585 -color=yellow,shape=square,flag=1,i=70571,u=0.6525197973673978,v=0.11164725299706191,w=0.5241287377042846,x=5.453063892632254 -color=blue,shape=square,flag=0,i=70580,u=0.5209500611919252,v=0.8228809232278712,w=0.4740510499860352,x=4.2592361588703715 -color=orange,shape=triangle,flag=1,i=70590,u=0.9758951524172744,v=0.13471085808299466,w=0.5173572634512178,x=4.129788272993497 -color=red,shape=square,flag=1,i=70592,u=0.1263826954539895,v=0.9121154325973673,w=0.5019476697261506,x=6.072645811123195 -color=red,shape=square,flag=0,i=70600,u=0.272471240348379,v=0.06896728422519727,w=0.5021769921302964,x=5.363789196287403 -color=yellow,shape=triangle,flag=1,i=70615,u=0.19448918766599577,v=0.852752464976683,w=0.512915654884222,x=4.479304566211807 -color=red,shape=square,flag=0,i=70627,u=0.5922362650531797,v=0.8849134363022688,w=0.48843486696991395,x=4.374758184062623 -color=red,shape=triangle,flag=0,i=70661,u=0.38645245884150203,v=0.5350792753664514,w=0.5043933884170217,x=3.6813867291217917 -color=green,shape=circle,flag=0,i=70663,u=0.9637119134420807,v=0.07596584200522494,w=0.507878171481228,x=7.065760953566021 -color=red,shape=triangle,flag=0,i=70668,u=0.7834936808687326,v=0.5354067928816593,w=0.5002757718302819,x=6.64699312169981 -color=purple,shape=circle,flag=0,i=70685,u=0.9752229353208299,v=0.1172947502198527,w=0.5077550243168627,x=4.303853168755417 -color=purple,shape=circle,flag=0,i=70686,u=0.9888929892441335,v=0.9093725419603532,w=0.5091764498920349,x=5.080118069872132 -color=red,shape=square,flag=0,i=70701,u=0.6381806910428824,v=0.8878900167147529,w=0.4965457374097267,x=3.2949925288207944 -color=yellow,shape=triangle,flag=1,i=70704,u=0.6344849434194559,v=0.88495382846792,w=0.5169531941801474,x=4.483002793256385 -color=green,shape=square,flag=0,i=70711,u=0.005480654895213211,v=0.8859303606376187,w=0.47756214670387553,x=4.01707495631635 -color=blue,shape=square,flag=1,i=70718,u=0.7707453343279551,v=0.5643959084148585,w=0.4782643241798857,x=3.506250532270767 -color=blue,shape=triangle,flag=0,i=70728,u=0.0490645206064928,v=0.45753599756783525,w=0.5141268105464349,x=6.941075095521338 -color=purple,shape=square,flag=1,i=70731,u=0.5947653198164036,v=0.38445254549263574,w=0.4973185925952695,x=5.578662278010982 -color=red,shape=triangle,flag=0,i=70734,u=0.19216432881525625,v=0.6919344256312707,w=0.4825020763385382,x=6.203885172513126 -color=green,shape=square,flag=0,i=70748,u=0.2998349014437194,v=0.21479349504408973,w=0.4841252994353549,x=4.5404686282445725 -color=red,shape=triangle,flag=0,i=70803,u=0.8392295956288878,v=0.9228427735197161,w=0.4904440254114455,x=5.105089064015293 -color=green,shape=square,flag=0,i=70840,u=0.40006744398227756,v=0.9863947346163966,w=0.48858903710951673,x=4.510495843068351 -color=red,shape=circle,flag=0,i=70854,u=0.38585784040946114,v=0.33941861552106123,w=0.4846306247585242,x=5.451864875397825 -color=red,shape=square,flag=0,i=70859,u=0.9526994745048071,v=0.8489559983029092,w=0.4960922865567807,x=8.105752133535562 -color=blue,shape=square,flag=1,i=70874,u=0.4311124668263351,v=0.3813025627528992,w=0.4781675777416238,x=5.925720080536299 -color=blue,shape=triangle,flag=1,i=70880,u=0.212067960630421,v=0.20862234586039796,w=0.5159491333582178,x=5.534971467658803 -color=red,shape=square,flag=0,i=70919,u=0.917761359583518,v=0.8682283083400067,w=0.4930497104666478,x=5.306099779499687 -color=red,shape=square,flag=0,i=70920,u=0.09432017633032219,v=0.7415889035116207,w=0.49749113047635013,x=6.095547437484139 -color=red,shape=square,flag=0,i=70945,u=0.3133108518977532,v=0.16079027748763086,w=0.500809226062123,x=3.5863753965994687 -color=yellow,shape=triangle,flag=1,i=70959,u=0.0844080476194049,v=0.46772079614029494,w=0.510431133361715,x=5.376911557705742 -color=yellow,shape=square,flag=1,i=70965,u=0.7572031924626978,v=0.8975815145478762,w=0.5044263990081977,x=4.331032130215704 -color=red,shape=circle,flag=1,i=70970,u=0.7228914007596593,v=0.6429867373588052,w=0.4918742571405869,x=5.135408581262435 -color=yellow,shape=circle,flag=1,i=70971,u=0.7008333595577442,v=0.9034965819535411,w=0.48955681376101967,x=4.219392523099354 -color=red,shape=triangle,flag=0,i=70982,u=0.6564111716387253,v=0.11820024512269911,w=0.5185515548109318,x=6.891113452683467 -color=red,shape=triangle,flag=0,i=70983,u=0.27808617333759267,v=0.07019584882321916,w=0.5225251830367279,x=8.837199304537544 -color=red,shape=triangle,flag=1,i=70985,u=0.554197772278591,v=0.24248276297537252,w=0.5229372476924858,x=3.65199432488946 -color=green,shape=circle,flag=0,i=70997,u=0.4541604304107233,v=0.2544407155523085,w=0.501436241890304,x=4.251751089374899 -color=red,shape=circle,flag=1,i=71002,u=0.7310895368358641,v=0.6505678701396869,w=0.49217738854506776,x=4.75881509902728 -color=red,shape=triangle,flag=0,i=71036,u=0.0263654235852141,v=0.8670942263538283,w=0.5173158038483301,x=5.582179561294879 -color=red,shape=square,flag=0,i=71063,u=0.8233904920898184,v=0.8451845888402929,w=0.511007645071146,x=4.786434247754553 -color=purple,shape=square,flag=0,i=71066,u=0.04139987240245935,v=0.062285631080705506,w=0.5045779143946145,x=5.808353661483579 -color=orange,shape=square,flag=1,i=71074,u=0.8373589926703098,v=0.9379896142048211,w=0.47640820426142855,x=5.416088565132912 -color=purple,shape=square,flag=0,i=71084,u=0.310751665508779,v=0.8768157856376457,w=0.5035380732114612,x=4.449333456387371 -color=red,shape=square,flag=0,i=71087,u=0.30028045601841435,v=0.07326624509987845,w=0.51216015275223,x=5.782301182546941 -color=yellow,shape=circle,flag=1,i=71100,u=0.8372038262903813,v=0.32135652221320476,w=0.49853515045954155,x=4.570883766883914 -color=blue,shape=triangle,flag=0,i=71109,u=0.1411198080414786,v=0.6638382943305755,w=0.5327407255348998,x=5.18046003906776 -color=red,shape=circle,flag=1,i=71126,u=0.7093571896426425,v=0.7079911155325735,w=0.49506425807567117,x=3.3098143694382736 -color=yellow,shape=triangle,flag=1,i=71134,u=0.020145156942520615,v=0.8435478218136347,w=0.5106292411364343,x=4.259359304067164 -color=purple,shape=triangle,flag=0,i=71137,u=0.07216171507084501,v=0.23208291925432978,w=0.5100320903797786,x=3.7598722639010176 -color=red,shape=triangle,flag=1,i=71157,u=0.5758899677096482,v=0.5015242625760362,w=0.5207043996909565,x=3.1224246575456736 -color=orange,shape=circle,flag=1,i=71171,u=0.6891402552181615,v=0.7507976766308857,w=0.5019472903995487,x=6.739718325051122 -color=blue,shape=triangle,flag=0,i=71201,u=0.2741682056554611,v=0.4189701374788116,w=0.5275020503876324,x=5.663557221579059 -color=green,shape=triangle,flag=0,i=71215,u=0.23320675219678966,v=0.8984783250081758,w=0.48864901685596684,x=4.57692580627106 -color=blue,shape=square,flag=1,i=71218,u=0.3993454233714371,v=0.9571137353867507,w=0.47159435854702575,x=4.498779214203264 -color=green,shape=circle,flag=0,i=71220,u=0.2757167605009151,v=0.8060906079363401,w=0.5169697994869984,x=6.852895808486612 -color=red,shape=square,flag=1,i=71221,u=0.6430833014171399,v=0.6166573551009144,w=0.5004471291931618,x=5.275548737828118 -color=red,shape=square,flag=0,i=71230,u=0.5505925178382273,v=0.9166918276578473,w=0.5059269880863613,x=7.509809000162676 -color=red,shape=square,flag=1,i=71234,u=0.7218731064538846,v=0.6085165243254672,w=0.5107792636884733,x=4.909437537650276 -color=purple,shape=triangle,flag=0,i=71266,u=0.46190404038050525,v=0.8892003311103399,w=0.5050063343741922,x=6.478574583620347 -color=red,shape=square,flag=0,i=71279,u=0.9780796011793812,v=0.6059043104911305,w=0.4972084348381971,x=3.950570089273197 -color=red,shape=square,flag=1,i=71296,u=0.3236362297804214,v=0.6745134084402382,w=0.4938888566051915,x=5.220429436387733 -color=red,shape=square,flag=0,i=71301,u=0.10660180457004442,v=0.10312934597510115,w=0.49287967626033585,x=7.255280620760256 -color=red,shape=triangle,flag=0,i=71313,u=0.5268453551868513,v=0.9611181643318456,w=0.5096349889063778,x=6.3642451967423215 -color=blue,shape=triangle,flag=1,i=71330,u=0.8299366082877903,v=0.644388555112061,w=0.5192826663634306,x=3.2149017574920826 -color=green,shape=circle,flag=0,i=71333,u=0.8233175050582501,v=0.10763797155481425,w=0.5184707403861915,x=4.429975773149633 -color=red,shape=triangle,flag=0,i=71340,u=0.9320005723838692,v=0.44942146416850826,w=0.5155016616972926,x=3.1184412296992092 -color=red,shape=triangle,flag=0,i=71346,u=0.8689610609302297,v=0.6765405455778964,w=0.514257567398497,x=4.058370923593006 -color=blue,shape=triangle,flag=1,i=71361,u=0.6196637241523173,v=0.8015276929259406,w=0.5218314134132265,x=4.196263817751366 -color=green,shape=square,flag=0,i=71366,u=0.9170324603559099,v=0.177699050649888,w=0.4867621234124314,x=3.787773639082021 -color=red,shape=triangle,flag=0,i=71383,u=0.7919838469118691,v=0.9687928786502585,w=0.5102282071086157,x=4.963606376558527 -color=green,shape=triangle,flag=0,i=71385,u=0.1863187436504804,v=0.3178395860928517,w=0.4864498006323157,x=7.583730889603243 -color=blue,shape=circle,flag=0,i=71392,u=0.1428204439223032,v=0.46983737704317063,w=0.5388015187614065,x=5.023501082149909 -color=red,shape=triangle,flag=0,i=71449,u=0.5530582494609316,v=0.22172232832478544,w=0.49957596679343397,x=5.599091116840739 -color=green,shape=circle,flag=1,i=71457,u=0.43185645822537644,v=0.7968473841625647,w=0.5217128117637824,x=7.403662159537441 -color=green,shape=triangle,flag=1,i=71476,u=0.2022190630498869,v=0.9755253595358716,w=0.48357427302557315,x=3.4821548170583756 -color=yellow,shape=circle,flag=1,i=71489,u=0.9881034556938793,v=0.5616270495991024,w=0.49044363914657274,x=3.8128983452043035 -color=purple,shape=circle,flag=0,i=71498,u=0.7679821242660411,v=0.8152066742702209,w=0.5104977752499912,x=5.701381658002021 -color=red,shape=square,flag=0,i=71499,u=0.04962945954542297,v=0.7299398492852339,w=0.4668075735150984,x=3.4814335795937854 -color=purple,shape=square,flag=0,i=71506,u=0.8386424793796523,v=0.9236910415654715,w=0.5263082570190778,x=5.604548786381753 -color=green,shape=circle,flag=0,i=71511,u=0.8064356399481699,v=0.7021744499068829,w=0.5188749306872492,x=7.240904866750598 -color=red,shape=square,flag=0,i=71512,u=0.15331491138861308,v=0.8505257936580274,w=0.4711092523930207,x=2.419359398792088 -color=red,shape=square,flag=0,i=71528,u=0.6922829507132523,v=0.5086177138590715,w=0.482944535671648,x=6.1559378909445535 -color=yellow,shape=square,flag=1,i=71548,u=0.940719964852526,v=0.6295413636428192,w=0.49496119923234727,x=5.73876217201141 -color=red,shape=triangle,flag=0,i=71567,u=0.5226875272697896,v=0.5827838948281352,w=0.5152651615973485,x=5.126944984749388 -color=orange,shape=square,flag=0,i=71578,u=0.9335953962173617,v=0.66503079510125,w=0.47753733174647284,x=6.193645367817166 -color=blue,shape=square,flag=0,i=71589,u=0.587769405258297,v=0.8497084677665449,w=0.4963179808585544,x=6.607461916149375 -color=red,shape=triangle,flag=1,i=71606,u=0.4060308985813511,v=0.7775430574839062,w=0.5075407093860688,x=6.833540513006433 -color=blue,shape=square,flag=0,i=71632,u=0.6757367669495898,v=0.5392996320464976,w=0.4887572518391169,x=1.9198711349114832 -color=blue,shape=triangle,flag=1,i=71639,u=0.610195874368423,v=0.16288612282955583,w=0.5190577031928474,x=6.114142291503789 -color=red,shape=square,flag=0,i=71641,u=0.8589127057101466,v=0.20064877545151616,w=0.47726152202212846,x=7.234955631658913 -color=red,shape=square,flag=0,i=71648,u=0.014145755254664771,v=0.9417633530987584,w=0.4772538761479938,x=4.734938536817874 -color=yellow,shape=square,flag=1,i=71653,u=0.10238970486386823,v=0.6390895175804414,w=0.49193716035761287,x=4.843939192153916 -color=green,shape=triangle,flag=0,i=71662,u=0.18327844889231804,v=0.4880799960054719,w=0.4857896640073938,x=5.99201830399105 -color=blue,shape=square,flag=1,i=71665,u=0.5373406457990239,v=0.031913816252884586,w=0.4846862806613487,x=4.157751099019811 -color=yellow,shape=square,flag=1,i=71685,u=0.9793687191958267,v=0.8231684840599436,w=0.4949038181410422,x=6.247143284408513 -color=red,shape=square,flag=0,i=71687,u=0.5156429750858571,v=0.6001203735483422,w=0.4775755197336394,x=5.285976241067357 -color=red,shape=square,flag=1,i=71699,u=0.6235239252554838,v=0.4189129850032297,w=0.47199685043654604,x=5.703255919608537 -color=red,shape=circle,flag=1,i=71711,u=0.1782360713583011,v=0.27275767537164464,w=0.49995083748570746,x=4.294306617517748 -color=red,shape=square,flag=0,i=71728,u=0.4934993917270485,v=0.5676711987087899,w=0.4508498747536485,x=4.568989818294916 -color=red,shape=circle,flag=0,i=71739,u=0.45667845729016887,v=0.5195300112144212,w=0.5056454127164266,x=5.594830610757504 -color=red,shape=square,flag=1,i=71790,u=0.7683512090579981,v=0.89460269386649,w=0.4497939291187564,x=3.159151176112882 -color=blue,shape=square,flag=1,i=71802,u=0.8054901780082733,v=0.3897818045035222,w=0.48371695078730015,x=2.5967492896958597 -color=red,shape=triangle,flag=0,i=71805,u=0.28529624548208654,v=0.26904677668238575,w=0.48197812563278014,x=5.1884477210654785 -color=green,shape=triangle,flag=0,i=71808,u=0.1869638887973949,v=0.7178631837936446,w=0.49133362574055983,x=6.068233654841454 -color=yellow,shape=square,flag=1,i=71816,u=0.6206981133539567,v=0.5527365406867808,w=0.5034970903979047,x=5.813109070294089 -color=red,shape=triangle,flag=1,i=71831,u=0.2736670291180907,v=0.06591346589091218,w=0.4774885385533246,x=4.469274780966335 -color=red,shape=circle,flag=0,i=71850,u=0.8971616950778091,v=0.9501536173703798,w=0.5027446233514858,x=6.294623587875706 -color=purple,shape=triangle,flag=0,i=71856,u=0.6088960910019354,v=0.10605433326238001,w=0.5074756973107567,x=4.078096858672714 -color=purple,shape=square,flag=1,i=71884,u=0.581291270259683,v=0.3192580058949176,w=0.5165459622593128,x=2.4303326247177695 -color=red,shape=circle,flag=1,i=71898,u=0.3185643171809277,v=0.3469584244092953,w=0.5073645792223062,x=7.005110864106552 -color=red,shape=circle,flag=0,i=71912,u=0.4227573742756736,v=0.4909845312410876,w=0.5030144151233247,x=4.348912205787133 -color=blue,shape=square,flag=1,i=71920,u=0.5700580980882581,v=0.04630828203757942,w=0.49052936173964956,x=6.438852423166 -color=red,shape=square,flag=0,i=71929,u=0.7606607304223528,v=0.6398544901590759,w=0.46877986208312883,x=4.364959869804138 -color=blue,shape=square,flag=1,i=71939,u=0.6134131927883871,v=0.3685853813026815,w=0.4897787817066283,x=5.708872869160932 -color=purple,shape=circle,flag=0,i=71945,u=0.4083167965966822,v=0.9401859407571762,w=0.5080721271874327,x=6.04702584451529 -color=purple,shape=circle,flag=0,i=71962,u=0.7016249239486223,v=0.8742718342925873,w=0.5008291234912605,x=6.222017909710246 -color=red,shape=circle,flag=1,i=71971,u=0.7047184325033955,v=0.6337496005172589,w=0.5033732759666719,x=4.040723314272406 -color=red,shape=triangle,flag=0,i=71980,u=0.10551268791745183,v=0.07227443410232526,w=0.48946696946378915,x=4.859140771105152 -color=blue,shape=triangle,flag=1,i=71982,u=0.41993798170645813,v=0.04455214525008511,w=0.5133023700702466,x=6.023101367696458 -color=red,shape=circle,flag=0,i=71987,u=0.4695950581374321,v=0.5669907042763076,w=0.49573366460637935,x=4.577855537814462 -color=red,shape=triangle,flag=0,i=71990,u=0.9843966650819161,v=0.12918745592135572,w=0.48840912798477515,x=6.429439242845484 -color=blue,shape=triangle,flag=0,i=71993,u=0.620514405562138,v=0.7693591711432153,w=0.5174674939642929,x=5.73190496830431 -color=red,shape=square,flag=0,i=71995,u=0.7742690221961455,v=0.2846877580589011,w=0.47530484584381805,x=4.899235588625699 -color=green,shape=triangle,flag=0,i=72009,u=0.7431840593345334,v=0.9590230950575055,w=0.5008984583519989,x=5.625971554636142 -color=red,shape=triangle,flag=0,i=72027,u=0.7273416781463514,v=0.7881215497775622,w=0.49198026661895833,x=5.663064059486664 -color=red,shape=circle,flag=0,i=72029,u=0.057522207334796516,v=0.11395744120444962,w=0.5077705855872757,x=5.459393531305232 -color=red,shape=square,flag=0,i=72050,u=0.3682795763044404,v=0.0844757731167679,w=0.4679178924527475,x=3.5909590699973872 -color=red,shape=triangle,flag=0,i=72056,u=0.5935453258613138,v=0.3183768643456797,w=0.48702746597632485,x=6.243943733564163 -color=red,shape=square,flag=1,i=72066,u=0.5837318236315873,v=0.02144957095217348,w=0.46652127025307916,x=7.315007800089179 -color=red,shape=circle,flag=1,i=72073,u=0.15176831094800436,v=0.09608206780570924,w=0.5113246446621849,x=5.792667707356017 -color=green,shape=triangle,flag=0,i=72075,u=0.3096650689346735,v=0.5066860501690279,w=0.49833294212598267,x=4.269849935028879 -color=red,shape=square,flag=0,i=72083,u=0.5704980183999417,v=0.9060426665925241,w=0.46583151104430703,x=3.757772065843092 -color=purple,shape=triangle,flag=0,i=72094,u=0.7681159228004103,v=0.696598070667945,w=0.49983694436019876,x=5.860226662740637 -color=red,shape=triangle,flag=1,i=72102,u=0.5626005005489886,v=0.3463973348334999,w=0.4833606212379729,x=2.8294951842413645 -color=blue,shape=square,flag=0,i=72103,u=0.10622884128780419,v=0.3403388881584658,w=0.4752815617968869,x=4.148737940916104 -color=purple,shape=square,flag=0,i=72110,u=0.3701719453706033,v=0.7411443242414714,w=0.5185177725175872,x=5.926269951198743 -color=red,shape=triangle,flag=1,i=72111,u=0.24211659645119632,v=0.9680010719181319,w=0.47694517231644107,x=5.346121224149105 -color=red,shape=triangle,flag=0,i=72120,u=0.7446022010168153,v=0.49448153945666884,w=0.4882729836164162,x=3.8065482206424774 -color=orange,shape=triangle,flag=1,i=72127,u=0.39119426252611345,v=0.48515137455399515,w=0.5094580296098834,x=5.550774612490744 -color=orange,shape=triangle,flag=1,i=72131,u=0.9741666638794001,v=0.12706499195471666,w=0.507745761635562,x=4.360934867185619 -color=red,shape=circle,flag=0,i=72138,u=0.6507816109518472,v=0.6080817206898531,w=0.5176709572313898,x=4.630544212533603 -color=blue,shape=square,flag=1,i=72145,u=0.7266495338513433,v=0.6454085245082393,w=0.4721609002834268,x=4.471898234676016 -color=blue,shape=circle,flag=1,i=72148,u=0.2981803433464918,v=0.5420492033743072,w=0.49683231807289474,x=4.569167316839617 -color=red,shape=triangle,flag=0,i=72162,u=0.1048254397734687,v=0.5163078884252859,w=0.47368881447609745,x=4.720843051421998 -color=red,shape=circle,flag=0,i=72164,u=0.6856483636289505,v=0.7678508144115663,w=0.5118957997176568,x=2.9064603487948375 -color=red,shape=circle,flag=1,i=72168,u=0.2066529929015949,v=0.2845124725164412,w=0.5157767408768849,x=5.095268220584159 -color=purple,shape=square,flag=0,i=72177,u=0.506117402387862,v=0.8683061705944894,w=0.5263750648218846,x=3.9305470987145763 -color=red,shape=circle,flag=0,i=72201,u=0.007212468584910092,v=-0.09270905318501277,w=0.526821148743246,x=6.408899027084977 -color=blue,shape=circle,flag=1,i=72204,u=0.8571356556740704,v=0.9922619348062551,w=0.5019522060049386,x=3.5123391890029336 -color=blue,shape=square,flag=0,i=72207,u=0.2700487088580654,v=0.7766482893237935,w=0.4629839738836373,x=5.527289588935786 -color=yellow,shape=triangle,flag=1,i=72214,u=0.5631605148153284,v=0.5170766876882995,w=0.5177992787639062,x=5.639328869111757 -color=yellow,shape=square,flag=0,i=72223,u=0.3809061134560793,v=0.45195670798437837,w=0.4894571969656264,x=3.2912026101958074 -color=red,shape=square,flag=0,i=72227,u=0.8599911746980318,v=0.10182239501353652,w=0.4668626511045798,x=4.724935046510523 -color=yellow,shape=triangle,flag=1,i=72237,u=0.9857265188602886,v=0.9241710109683817,w=0.5127908044086285,x=6.537835565685955 -color=red,shape=triangle,flag=0,i=72245,u=0.3329204908983361,v=0.20940520806088692,w=0.47082028411646815,x=5.698051285382731 -color=purple,shape=square,flag=0,i=72262,u=0.4495317435923373,v=0.04939073616165468,w=0.5261428424160512,x=5.9398154928585996 -color=red,shape=square,flag=0,i=72274,u=0.9572007574973389,v=0.10956507743667465,w=0.4640209844050756,x=3.7859692319368805 -color=green,shape=circle,flag=0,i=72316,u=0.7487513991246616,v=0.9520670145567668,w=0.5223489163743699,x=3.7482706935485637 -color=red,shape=circle,flag=0,i=72320,u=0.5593727999981427,v=0.5990223010878878,w=0.5193862255106959,x=4.809475773151121 -color=red,shape=square,flag=1,i=72328,u=0.050771763223548816,v=0.4580589070395509,w=0.4799018613455928,x=3.9676018055848545 -color=red,shape=circle,flag=0,i=72332,u=0.08944377441526308,v=0.09394577323776458,w=0.5199488742891534,x=4.7674230058662 -color=red,shape=square,flag=1,i=72344,u=0.24915983719094792,v=0.8350204792914224,w=0.47909080899880857,x=6.321827920232859 -color=blue,shape=square,flag=0,i=72352,u=0.9120756594803551,v=0.6094267790877336,w=0.46569099255904356,x=5.760392865724737 -color=purple,shape=circle,flag=0,i=72353,u=0.726001928358824,v=0.9975323613899104,w=0.5038848893470722,x=4.7250193014261965 -color=purple,shape=square,flag=0,i=72379,u=0.5816394016117985,v=0.8899999928484077,w=0.5144843217459071,x=6.791947771902887 -color=red,shape=circle,flag=1,i=72389,u=0.2793990756083822,v=0.3557982917670405,w=0.5165501049970794,x=5.136375507742795 -color=red,shape=circle,flag=0,i=72392,u=0.9774601689026017,v=0.8829915086818088,w=0.5168776217090721,x=6.378832482982435 -color=purple,shape=square,flag=0,i=72398,u=0.8446149449117143,v=0.9681987243163415,w=0.5123187910160215,x=2.8422320045530824 -color=green,shape=square,flag=0,i=72404,u=0.6233692670991832,v=0.4461944514615205,w=0.48668132798125824,x=4.85995442412096 -color=red,shape=square,flag=0,i=72406,u=0.011205992248350505,v=0.7077100546922461,w=0.47879427792740337,x=5.688684150831193 -color=blue,shape=circle,flag=1,i=72428,u=0.4307506113407853,v=0.8122537549871254,w=0.506914167064739,x=5.8951275307868345 -color=blue,shape=square,flag=1,i=72435,u=0.1264929860724492,v=0.8278675579711217,w=0.46390204049080963,x=5.971530626825399 -color=blue,shape=triangle,flag=1,i=72443,u=0.823808156686541,v=0.009166747224625404,w=0.4990467476279494,x=4.107750768369923 -color=purple,shape=square,flag=0,i=72453,u=0.20445566622570988,v=0.5714374404238081,w=0.49856900446487107,x=6.115821566430142 -color=red,shape=triangle,flag=0,i=72454,u=0.9883195242246663,v=0.46528690646822546,w=0.4701671670257296,x=3.9649375186771416 -color=green,shape=square,flag=0,i=72467,u=0.8018179538564826,v=0.4776903700559191,w=0.4856038544965456,x=3.7577105591583333 -color=purple,shape=square,flag=0,i=72478,u=0.8139711133469876,v=0.6826135821368494,w=0.5100199071910589,x=5.771256806775164 -color=red,shape=square,flag=1,i=72482,u=0.47328429070939715,v=0.7699556261202214,w=0.47482301092413287,x=4.356230738358275 -color=green,shape=triangle,flag=1,i=72498,u=0.4385493281520624,v=0.6379307906223648,w=0.4964576274592531,x=5.914061956514195 -color=purple,shape=circle,flag=0,i=72504,u=0.7368014150031545,v=0.26432055827239886,w=0.49365301780658155,x=3.5202273437357685 -color=orange,shape=circle,flag=1,i=72505,u=0.49810811312802905,v=0.48350461151912605,w=0.49767094924358934,x=6.154927127764089 -color=yellow,shape=triangle,flag=1,i=72523,u=0.6774491625295976,v=0.4289333352305539,w=0.4919753398904435,x=6.035966540890378 -color=yellow,shape=triangle,flag=1,i=72547,u=0.12462203771355929,v=0.7474705627340478,w=0.49030490998090365,x=5.478271011364921 -color=yellow,shape=circle,flag=1,i=72554,u=0.9473554633188314,v=0.06905012766392826,w=0.4821619721531113,x=6.589265120851309 -color=green,shape=square,flag=0,i=72572,u=0.2960577095496675,v=0.11776070373636338,w=0.48464646050238475,x=5.206019116330586 -color=green,shape=circle,flag=0,i=72592,u=0.27230371997244107,v=0.8430216989002598,w=0.5248611669066987,x=3.734918784932097 -color=blue,shape=circle,flag=0,i=72604,u=0.9277684947712729,v=0.08298835018060802,w=0.515032473244275,x=3.628706904158925 -color=red,shape=square,flag=1,i=72613,u=0.902878030621165,v=0.6070439231754423,w=0.507830212038955,x=5.4475060097281025 -color=blue,shape=triangle,flag=0,i=72631,u=0.6754216236406407,v=0.6454711951897404,w=0.5029213599951664,x=5.469943053541013 -color=purple,shape=square,flag=0,i=72641,u=0.47291420354886293,v=0.8952440238846755,w=0.5105798103773396,x=4.322618883318763 -color=blue,shape=triangle,flag=0,i=72644,u=0.5297760721253563,v=0.7959422479275593,w=0.5028924556416838,x=3.0638213158307743 -color=red,shape=square,flag=1,i=72650,u=0.04989192827376143,v=0.27663728579119895,w=0.5151445293977063,x=4.328831199686278 -color=purple,shape=triangle,flag=0,i=72658,u=0.858755203567509,v=0.9490152195465916,w=0.5005008213959479,x=3.757001828255658 -color=orange,shape=square,flag=1,i=72660,u=0.00928430359520327,v=0.09648592370970421,w=0.4769044770493649,x=4.70294048426385 -color=blue,shape=square,flag=0,i=72665,u=0.914693304088616,v=0.9279208005607608,w=0.483712475757045,x=6.288911702615664 -color=red,shape=square,flag=0,i=72680,u=0.27743949493588715,v=0.7124275204250927,w=0.5171893242057247,x=5.094733956379064 -color=blue,shape=triangle,flag=1,i=72692,u=0.8638191382478866,v=0.9984550897671751,w=0.4991318433069977,x=5.859607989157865 -color=yellow,shape=triangle,flag=1,i=72702,u=0.2544731224671224,v=0.05573925021387982,w=0.48173491559423204,x=6.259231070134628 -color=red,shape=triangle,flag=0,i=72726,u=0.3135634418540596,v=0.7811603857103299,w=0.46043446560175966,x=5.7203833798669725 -color=blue,shape=circle,flag=0,i=72739,u=0.8409759058208828,v=0.06570230467810834,w=0.518127271598969,x=6.230249069357121 -color=yellow,shape=square,flag=1,i=72753,u=0.8076665248831448,v=0.18562070816039222,w=0.48059685531962193,x=4.801588711872754 -color=red,shape=square,flag=0,i=72754,u=0.6657937575344537,v=0.6839324213093635,w=0.5016594906681198,x=4.790078870715307 -color=red,shape=circle,flag=0,i=72757,u=0.9070956024784969,v=0.861999741244341,w=0.5320729860764385,x=4.929840960818676 -color=red,shape=circle,flag=0,i=72769,u=0.36349074142468374,v=0.37672871750028747,w=0.5325872604052474,x=4.37633351935909 -color=green,shape=circle,flag=1,i=72777,u=0.025216295921019927,v=0.5478422998693638,w=0.5248591923981608,x=5.381140110173693 -color=red,shape=circle,flag=1,i=72784,u=0.26373822486102383,v=0.18344208910848292,w=0.5294229146521763,x=4.037632084476621 -color=red,shape=square,flag=1,i=72793,u=0.8742169240941673,v=0.380984820174165,w=0.5053650967861464,x=4.334431718774201 -color=blue,shape=square,flag=1,i=72799,u=0.7966156504592768,v=0.8255818067694661,w=0.481041618391877,x=3.9073806957276944 -color=red,shape=circle,flag=0,i=72817,u=0.5585823236053085,v=0.46055277285245,w=0.5227068112448294,x=4.690514071968136 -color=red,shape=square,flag=1,i=72825,u=0.9203463819594913,v=0.696725652942245,w=0.49831781926220675,x=4.798487468854657 -color=purple,shape=square,flag=0,i=72833,u=0.1076066798452584,v=0.5343202364829062,w=0.5015256648338,x=4.741579133759864 -color=red,shape=circle,flag=0,i=72845,u=0.7296695528623173,v=0.7445745915538573,w=0.5219627492871897,x=4.0598798522134665 -color=red,shape=square,flag=1,i=72877,u=0.9933876790230393,v=0.7140172351477977,w=0.47802179150624646,x=6.175994497440937 -color=yellow,shape=square,flag=1,i=72889,u=0.858108245552053,v=0.21275998194956924,w=0.4832208090657703,x=7.24085860486491 -color=red,shape=triangle,flag=0,i=72899,u=0.8268056703391791,v=0.5588665164299295,w=0.47428483730612836,x=5.054368684296835 -color=red,shape=triangle,flag=0,i=72906,u=0.23118887929972798,v=0.17223576037076538,w=0.47235336093321695,x=6.887834865742074 -color=blue,shape=square,flag=0,i=72911,u=0.833212349540034,v=0.08603278870401632,w=0.4731255720891816,x=2.715314892566983 -color=purple,shape=square,flag=0,i=72918,u=0.34272203207651397,v=0.6179697916917083,w=0.5064652485390138,x=3.8316958502305476 -color=blue,shape=triangle,flag=0,i=72935,u=0.5415420368585162,v=0.5893076726921904,w=0.49849339704148765,x=4.293722174007237 -color=green,shape=triangle,flag=0,i=72969,u=0.32611786086655536,v=0.6792666645810701,w=0.5003684308061643,x=4.699130317837855 -color=red,shape=circle,flag=0,i=72970,u=0.9961258888051265,v=1.0498318491312169,w=0.5043378086026293,x=4.863904894045845 -color=red,shape=triangle,flag=0,i=72979,u=0.6407996963484139,v=0.4448129582597735,w=0.4690007678399177,x=4.336702771650028 -color=red,shape=triangle,flag=0,i=72989,u=0.7816594595738134,v=0.1478841961630989,w=0.4696594371325213,x=5.532022773983765 -color=purple,shape=triangle,flag=0,i=72992,u=0.0759845047491956,v=0.5775728861572089,w=0.5092218456305272,x=4.239048674824838 -color=red,shape=square,flag=1,i=73004,u=0.9116471043472949,v=0.8928207405420929,w=0.47629130875441433,x=4.6420594628836405 -color=green,shape=square,flag=0,i=73005,u=0.21339609547993565,v=0.9125717355872759,w=0.4795830544894485,x=4.520488661389336 -color=red,shape=triangle,flag=0,i=73027,u=0.7734515847600993,v=0.8165714019035812,w=0.47791153264777664,x=6.626207732797006 -color=red,shape=triangle,flag=1,i=73041,u=0.7382331862323227,v=0.6115116805949784,w=0.48534295923648857,x=4.700948261444632 -color=red,shape=circle,flag=1,i=73046,u=0.47685082871462414,v=0.40653348336191336,w=0.5010050043207679,x=3.615478576455267 -color=blue,shape=triangle,flag=0,i=73056,u=0.8660840120743803,v=0.7087550705129804,w=0.49469534751440397,x=7.850562118211282 -color=red,shape=square,flag=0,i=73058,u=0.5724115044307474,v=0.14061042121837497,w=0.475222835160045,x=4.808813683700198 -color=red,shape=triangle,flag=1,i=73081,u=0.10809337585472945,v=0.5263559248875243,w=0.48998168968065464,x=5.685385844800567 -color=red,shape=circle,flag=0,i=73082,u=0.6134266017037263,v=0.6613676229907061,w=0.5080652246100984,x=3.599115030968829 -color=red,shape=triangle,flag=0,i=73088,u=0.28627888471375007,v=0.11574180810961576,w=0.49215999716804654,x=2.7771562739618094 -color=blue,shape=square,flag=1,i=73089,u=0.7312241055040474,v=0.3341860983717747,w=0.47288135493739936,x=4.593268831441955 -color=red,shape=triangle,flag=0,i=73107,u=0.8229161839484023,v=0.09961796061708328,w=0.4992078285280151,x=5.486653228028314 -color=blue,shape=square,flag=1,i=73125,u=0.2480872311626361,v=0.2896716253493766,w=0.4745171260373533,x=3.953163769464099 -color=red,shape=square,flag=0,i=73126,u=0.7226548780755402,v=0.4328849907977659,w=0.5030008976049739,x=5.607731813197586 -color=orange,shape=square,flag=1,i=73130,u=0.27133484364941185,v=0.22931916659578666,w=0.4936072702308622,x=5.081950490150782 -color=red,shape=square,flag=0,i=73131,u=0.8092824445698978,v=0.4068811725051118,w=0.5013690859141154,x=3.849626790148212 -color=blue,shape=square,flag=1,i=73145,u=0.33398575704430455,v=0.4410680068740741,w=0.4776831225459644,x=4.535974945207352 -color=purple,shape=circle,flag=0,i=73148,u=0.07538657794927406,v=0.7837313714996098,w=0.5014372456268962,x=5.784883970926296 -color=purple,shape=circle,flag=0,i=73177,u=0.25338520318979507,v=0.47637057576955844,w=0.5028831989695736,x=4.446518216759074 -color=orange,shape=triangle,flag=1,i=73190,u=0.7760451236040097,v=0.2043651170692704,w=0.5008577984814421,x=3.5858763909052276 -color=red,shape=square,flag=0,i=73198,u=0.12393622561371376,v=0.37017887804243077,w=0.489510625314009,x=5.596005794355364 -color=green,shape=square,flag=0,i=73201,u=0.713207814191945,v=0.07519388335466493,w=0.48504226917198595,x=4.360076213861312 -color=red,shape=circle,flag=0,i=73202,u=0.39289505842030115,v=0.2947356532400002,w=0.4871448462169997,x=4.473024024906055 -color=red,shape=triangle,flag=0,i=73203,u=0.677149369350636,v=0.2884004409049301,w=0.49472845551993927,x=5.132085726779002 -color=red,shape=square,flag=0,i=73210,u=0.1867089302087731,v=0.18357753948121114,w=0.49228407226862014,x=3.8300608987875315 -color=yellow,shape=square,flag=1,i=73215,u=0.5677835833870515,v=0.9133416373621372,w=0.4758284635938738,x=4.346456505132783 -color=blue,shape=square,flag=1,i=73217,u=0.2987504959521605,v=0.23837982354031273,w=0.47303585934056136,x=5.662891451791427 -color=red,shape=triangle,flag=0,i=73219,u=0.2071186857990156,v=0.9776147044886387,w=0.5036873984858958,x=5.525109547990574 -color=red,shape=square,flag=0,i=73223,u=0.24842057210112012,v=0.6212266125336219,w=0.4993977147879554,x=7.282954064166996 -color=blue,shape=square,flag=1,i=73233,u=0.45732890871277954,v=0.779527850662401,w=0.4732625566106589,x=5.126047490657016 -color=green,shape=square,flag=0,i=73235,u=0.6457059659870845,v=0.465168864383234,w=0.4930919365223765,x=5.7404127587893 -color=green,shape=triangle,flag=0,i=73242,u=0.26870655219679274,v=0.9761871475918202,w=0.4941748882762842,x=4.756969912380434 -color=red,shape=circle,flag=1,i=73256,u=0.4105523221866697,v=0.4000339621499748,w=0.484684070304413,x=3.8814050522478247 -color=red,shape=square,flag=1,i=73259,u=0.737061451030215,v=0.47167364763342723,w=0.5031086475230642,x=3.644000558506836 -color=red,shape=triangle,flag=1,i=73266,u=0.3739120330714697,v=0.08353943325514579,w=0.49935825878250684,x=2.518845857450657 -color=yellow,shape=triangle,flag=1,i=73278,u=0.2224353313701355,v=0.6588932153198386,w=0.5001032147808447,x=3.8605775611912976 -color=red,shape=circle,flag=0,i=73285,u=0.5152641780163079,v=0.5373869106517458,w=0.4797637137795361,x=4.08739490293446 -color=blue,shape=circle,flag=1,i=73292,u=0.7930891102601632,v=0.047068939026991274,w=0.49724471200325515,x=6.937747535570582 -color=blue,shape=triangle,flag=1,i=73294,u=0.8482866459700806,v=0.8370625432863222,w=0.481108489375018,x=5.586467149278353 -color=red,shape=triangle,flag=0,i=73300,u=0.40437487551710605,v=0.5919758906282285,w=0.49480617692222506,x=4.564088412508501 -color=purple,shape=circle,flag=0,i=73301,u=0.6417985791687332,v=0.5075200260409516,w=0.5100911374463913,x=6.264261317748019 -color=red,shape=square,flag=1,i=73314,u=0.8051183568627752,v=0.5334895698192947,w=0.49960516776485075,x=6.3109677479783075 -color=yellow,shape=square,flag=1,i=73330,u=0.6737546113802931,v=0.6528368087455942,w=0.47206702004536333,x=6.308596728951717 -color=red,shape=square,flag=0,i=73344,u=0.6940889957771803,v=0.5186276320207436,w=0.48615106548672843,x=5.620521243886766 -color=blue,shape=triangle,flag=1,i=73348,u=0.6934698862986908,v=0.7317966358404299,w=0.4796080814827919,x=4.253253710596258 -color=red,shape=triangle,flag=0,i=73358,u=0.07674494935678555,v=0.4072161572364629,w=0.5068815087466405,x=6.260206898510124 -color=red,shape=triangle,flag=0,i=73398,u=0.07605305599014578,v=0.08313912658315925,w=0.5046269804689287,x=5.035397854932586 -color=red,shape=square,flag=0,i=73421,u=0.28412250903350234,v=0.06695902775055163,w=0.49955999811282736,x=6.081442659797958 -color=yellow,shape=square,flag=1,i=73422,u=0.7059322154515407,v=0.37996526842060874,w=0.4798337174494267,x=3.6329416904647966 -color=red,shape=triangle,flag=0,i=73459,u=0.642391425501434,v=0.043767096534954586,w=0.4972187064269506,x=3.7740191683991373 -color=yellow,shape=square,flag=1,i=73460,u=0.7761989432029298,v=0.5279337773239262,w=0.4859124901428017,x=3.625881432843299 -color=red,shape=triangle,flag=0,i=73461,u=0.014020713135102225,v=0.03442264993244459,w=0.4967695366663496,x=4.680240538509591 -color=blue,shape=circle,flag=0,i=73467,u=0.10378634591381608,v=0.5743656926595915,w=0.49825105245392803,x=5.3980410219457005 -color=yellow,shape=square,flag=1,i=73470,u=0.35652165358844257,v=0.9428124663410518,w=0.48352938301168036,x=5.225093370053339 -color=red,shape=triangle,flag=1,i=73487,u=0.285390114164328,v=0.08607680093429271,w=0.4919644924806896,x=6.208169211500192 -color=orange,shape=circle,flag=0,i=73503,u=0.7689211631000442,v=0.21579704582186632,w=0.48756968143741325,x=5.528835958251567 -color=red,shape=circle,flag=0,i=73505,u=0.36277364787138233,v=0.3685023235550707,w=0.5041797964377719,x=5.598731517717937 -color=red,shape=triangle,flag=1,i=73508,u=0.2976753200547928,v=0.8830544360707335,w=0.4954230928090637,x=3.4754490211784064 -color=red,shape=circle,flag=0,i=73511,u=0.3098031741805707,v=0.2675765645447079,w=0.5039013524796738,x=7.445521971968751 -color=red,shape=triangle,flag=1,i=73528,u=0.38602030673035703,v=0.19694465343570078,w=0.4956655404728734,x=2.0220160571696577 -color=yellow,shape=square,flag=1,i=73538,u=0.09410104825295551,v=0.7794515208774729,w=0.4872326411228931,x=4.164005386141844 -color=red,shape=square,flag=0,i=73555,u=0.5724509837165904,v=0.5105676887129689,w=0.5053447134795521,x=6.3500581033684504 -color=blue,shape=triangle,flag=1,i=73581,u=0.12999432288622081,v=0.9990348486841953,w=0.48731486734200313,x=5.64657736458589 -color=red,shape=square,flag=0,i=73591,u=0.8989909498962174,v=0.36920052049492713,w=0.5035522351774396,x=5.049760446451766 -color=red,shape=circle,flag=0,i=73596,u=0.9628743127397472,v=0.8756883603336953,w=0.48711155022487523,x=3.802290150045721 -color=purple,shape=triangle,flag=0,i=73611,u=0.12967141299212925,v=0.5451293215366149,w=0.4910990578065233,x=3.663065939687771 -color=yellow,shape=square,flag=1,i=73613,u=0.7677260347684008,v=0.3846466530565561,w=0.48484969341049805,x=7.302856900739751 -color=yellow,shape=triangle,flag=1,i=73624,u=0.6295337656375458,v=0.21297983704867607,w=0.505206110046823,x=4.22272845694787 -color=red,shape=circle,flag=1,i=73632,u=0.5407046846479205,v=0.5711028753837529,w=0.5018562622577037,x=3.532671949677436 -color=orange,shape=square,flag=0,i=73633,u=0.06939805372657937,v=0.7338128030499417,w=0.48644421007084726,x=3.502468389049794 -color=red,shape=triangle,flag=0,i=73638,u=0.9962990422585004,v=0.9573072552649218,w=0.4858349737091535,x=4.340330747037244 -color=red,shape=triangle,flag=0,i=73659,u=0.47655726575723556,v=0.26680165601778527,w=0.4862753334367252,x=4.0042188999592865 -color=blue,shape=triangle,flag=1,i=73662,u=0.5545237073345199,v=0.8482821469792923,w=0.4872738747478104,x=5.998760540677206 -color=red,shape=square,flag=0,i=73666,u=0.20247655318002322,v=0.5592349400550598,w=0.4972910633704216,x=4.7720702789266 -color=red,shape=square,flag=1,i=73681,u=0.8431256175304304,v=0.9564545934523625,w=0.4932128944499044,x=5.656469896302969 -color=green,shape=square,flag=0,i=73684,u=0.8916213324602849,v=0.4588203099732582,w=0.49570914609592487,x=4.4184849931812495 -color=red,shape=triangle,flag=0,i=73687,u=0.9424167172925552,v=0.607344744392924,w=0.4851325542324003,x=4.830476994921856 -color=yellow,shape=triangle,flag=1,i=73731,u=0.009681337380882504,v=0.3653326235396833,w=0.5010217651244245,x=3.9776096339372233 -color=yellow,shape=circle,flag=1,i=73733,u=0.2686168510127359,v=0.3916782894656532,w=0.4982641362270937,x=5.076883774145872 -color=blue,shape=triangle,flag=0,i=73751,u=0.9215647950195507,v=0.3905247807140644,w=0.4959433811364549,x=4.804840899751561 -color=red,shape=triangle,flag=1,i=73775,u=0.034215305887544734,v=0.3210999355484824,w=0.4761246461210536,x=6.450831831666183 -color=purple,shape=square,flag=0,i=73781,u=0.4911574876509637,v=0.6765193880370212,w=0.5225450018623883,x=3.2300474648631585 -color=red,shape=square,flag=0,i=73800,u=0.7272346117146764,v=0.7154223615292531,w=0.4962356972660502,x=4.805217013434523 -color=red,shape=triangle,flag=1,i=73810,u=0.19425743908285453,v=0.26700226617025435,w=0.47098572438582337,x=5.92000930101425 -color=yellow,shape=square,flag=1,i=73814,u=0.30922206588272516,v=0.3885715325915504,w=0.48031566496221323,x=3.5021119175060647 -color=red,shape=triangle,flag=0,i=73816,u=0.5950138526894632,v=0.7601983682220361,w=0.46821510255916216,x=4.514538567289188 -color=yellow,shape=square,flag=0,i=73857,u=0.24262509476485994,v=0.9043456576492875,w=0.4835369088167234,x=4.749412371736739 -color=red,shape=circle,flag=0,i=73859,u=0.20640610824543904,v=0.17711697163402487,w=0.49902918559354636,x=6.6239138557343535 -color=red,shape=circle,flag=0,i=73868,u=0.47085905547554563,v=0.3939223633636871,w=0.4980892915350956,x=6.082009142106543 -color=red,shape=circle,flag=0,i=73882,u=0.16783082711700814,v=0.07845062279807329,w=0.489843991858881,x=4.290215986207049 -color=purple,shape=triangle,flag=0,i=73885,u=0.7319106217070923,v=0.8148112614595804,w=0.4871519125560546,x=5.91760314023933 -color=blue,shape=square,flag=0,i=73893,u=0.12516576865925688,v=0.46666954188249266,w=0.4971144262354856,x=2.985491670179851 -color=green,shape=square,flag=1,i=73906,u=0.46392558723663824,v=0.046747832340204964,w=0.49938087530550646,x=6.21713251739346 -color=red,shape=square,flag=0,i=73917,u=0.4516847660001998,v=0.045973849391362065,w=0.4965108305295375,x=4.267796319425178 -color=red,shape=square,flag=1,i=73918,u=0.9533499781216933,v=0.0027281080580259243,w=0.49667185922593776,x=5.1339131451979805 -color=red,shape=square,flag=0,i=73922,u=0.6822225308850183,v=0.38001726432235505,w=0.49645024110110897,x=2.9732061640307657 -color=red,shape=triangle,flag=0,i=73927,u=0.8548647082166396,v=0.984773716257365,w=0.46744965644811975,x=3.9556049115678658 -color=blue,shape=circle,flag=0,i=73929,u=0.6699124194757352,v=0.13722203662564214,w=0.5121481948131902,x=5.656377569538088 -color=red,shape=triangle,flag=0,i=73931,u=0.04412288751984583,v=0.5773400064111115,w=0.4681608961314278,x=4.578422167946148 -color=yellow,shape=triangle,flag=1,i=73946,u=0.026323220440112927,v=0.2943030839877602,w=0.491641826346298,x=6.7266558823087585 -color=red,shape=square,flag=0,i=73948,u=0.5995931742327236,v=0.6260253911771474,w=0.5073357829382608,x=5.49790017581537 -color=yellow,shape=square,flag=1,i=73965,u=0.06091085838590138,v=0.24609391724975715,w=0.48365426626296254,x=4.012087318829319 -color=yellow,shape=triangle,flag=1,i=73968,u=0.6481630575842057,v=0.011254568504986628,w=0.5007725549223798,x=3.963124376529929 -color=red,shape=triangle,flag=0,i=73976,u=0.38401826239098913,v=0.606804998746147,w=0.45996255656885343,x=5.630524417288048 -color=yellow,shape=triangle,flag=1,i=73981,u=0.9468422574413714,v=0.7871663270852913,w=0.5026240804535607,x=7.131826522379086 -color=yellow,shape=square,flag=0,i=73983,u=0.5605182571004323,v=0.5144029280934599,w=0.4868655352189978,x=3.6100406404223264 -color=yellow,shape=triangle,flag=1,i=73986,u=0.562795746360657,v=0.07147939514130686,w=0.49938144460274,x=3.4329658033991675 -color=red,shape=triangle,flag=0,i=73991,u=0.5343658220263324,v=0.7130630242448898,w=0.46093199333821533,x=4.366849535911659 -color=green,shape=square,flag=0,i=74023,u=0.544776152251061,v=0.8416317371472,w=0.4991598209288799,x=3.851396544303494 -color=yellow,shape=square,flag=1,i=74040,u=0.10966248632397124,v=0.7379686518318879,w=0.4864300566842841,x=5.7441531934028065 -color=green,shape=circle,flag=0,i=74064,u=0.19499703393627577,v=0.650736823611962,w=0.5261124326366297,x=5.37280066111514 -color=red,shape=triangle,flag=0,i=74101,u=0.9578573725683837,v=0.9022521714491644,w=0.4786703734395629,x=5.929930586659921 -color=blue,shape=circle,flag=0,i=74104,u=0.03180303629652925,v=0.2634392751669268,w=0.5099586206987196,x=5.708746243439055 -color=red,shape=circle,flag=0,i=74122,u=0.7961928082819837,v=0.8366329828729749,w=0.5183789907229683,x=6.724341864974814 -color=purple,shape=circle,flag=0,i=74135,u=0.8149059957235426,v=0.6321382282560014,w=0.4967871723905764,x=4.894664816866129 -color=red,shape=triangle,flag=0,i=74146,u=0.8363241263823191,v=0.9317767897809397,w=0.47026181140492246,x=2.135478415238911 -color=yellow,shape=triangle,flag=1,i=74150,u=0.9634762168199501,v=0.5822647727459717,w=0.49796252426159604,x=5.300855031754312 -color=blue,shape=circle,flag=1,i=74155,u=0.10011927718805236,v=0.07500172749065825,w=0.5180593992652905,x=4.169458849533399 -color=red,shape=triangle,flag=0,i=74158,u=0.9449591785210132,v=0.702856125955232,w=0.4730808836079962,x=5.1347387002909075 -color=blue,shape=circle,flag=1,i=74163,u=0.1092563351885939,v=0.13884509384344856,w=0.5199822806284418,x=6.098778122728651 -color=red,shape=square,flag=0,i=74174,u=0.8712826351031138,v=0.4436291520044644,w=0.5132309508314374,x=4.97465287966913 -color=yellow,shape=triangle,flag=1,i=74181,u=0.7511281258442482,v=0.23840946915563233,w=0.4989955975567813,x=4.561469655978386 -color=red,shape=triangle,flag=0,i=74188,u=0.4266118053404341,v=0.6881344305908903,w=0.47630582096994784,x=4.244907594909962 -color=purple,shape=triangle,flag=0,i=74195,u=0.4037795203363368,v=0.05390781813228618,w=0.4996809422346196,x=6.077785983601697 -color=blue,shape=square,flag=1,i=74201,u=0.5805067256511077,v=0.37808391930573826,w=0.5072967332958901,x=5.33517712393137 -color=red,shape=circle,flag=0,i=74209,u=0.1342302134651655,v=0.06459187647814006,w=0.5334208170455429,x=4.440485437828833 -color=red,shape=triangle,flag=0,i=74215,u=0.40765793598833056,v=0.7834863720200711,w=0.4888715175164901,x=3.8702767608330952 -color=blue,shape=square,flag=1,i=74219,u=0.7353282171966982,v=0.4955007039351944,w=0.5067343724392008,x=5.652753390892282 -color=purple,shape=triangle,flag=0,i=74225,u=0.7537454017576176,v=0.18320212007907832,w=0.49727465605478777,x=5.388678343443851 -color=yellow,shape=square,flag=1,i=74235,u=0.35625431893337234,v=0.7854228436430979,w=0.491337294839168,x=3.7238017175135485 -color=red,shape=circle,flag=0,i=74257,u=0.09453880825386307,v=0.11131070308675836,w=0.5313441267814368,x=5.708388758350463 -color=red,shape=triangle,flag=1,i=74263,u=0.79716268521799,v=0.6377104160298015,w=0.4890250121970355,x=6.402402388487867 -color=red,shape=triangle,flag=0,i=74275,u=0.6522863591653894,v=0.8079463098364482,w=0.4901996271362057,x=5.674600793103391 -color=blue,shape=triangle,flag=0,i=74337,u=0.16303242596229017,v=0.8641563713235006,w=0.5241221367340247,x=5.17257583610434 -color=green,shape=square,flag=0,i=74342,u=0.5569260573797796,v=0.431765970419284,w=0.48528542143808717,x=4.4786129438598 -color=red,shape=square,flag=0,i=74360,u=0.6054830649877131,v=0.290171721052222,w=0.5075596149926536,x=6.4680819912203615 -color=red,shape=triangle,flag=0,i=74364,u=0.7224317042523765,v=0.4213175990194369,w=0.4994275942565782,x=3.763757712745255 -color=red,shape=circle,flag=1,i=74365,u=0.22976069233610774,v=0.3186458146707333,w=0.5270088327659848,x=5.448233564300657 -color=red,shape=circle,flag=1,i=74381,u=0.9941763000591275,v=1.0480076548084407,w=0.524717272826327,x=4.736381080337667 -color=red,shape=triangle,flag=1,i=74384,u=0.16902092605533459,v=0.7780701292295173,w=0.5094062702839045,x=5.7396609465179225 -color=green,shape=square,flag=0,i=74390,u=0.12422815912527574,v=0.7465012698616101,w=0.4835980549100516,x=4.870676063552579 -color=red,shape=triangle,flag=0,i=74398,u=0.9290878308409746,v=0.6177766702414434,w=0.5102960938565552,x=4.581709971949926 -color=blue,shape=triangle,flag=1,i=74411,u=0.6108903492719456,v=0.6701572144070943,w=0.5208733075561003,x=4.6881833671233695 -color=red,shape=square,flag=1,i=74413,u=0.23410956469104527,v=0.24580540619674573,w=0.5211736250788455,x=4.275816949445322 -color=red,shape=triangle,flag=0,i=74417,u=0.5592005106035348,v=0.3180955066529366,w=0.5063035565909414,x=5.460277298718489 -color=purple,shape=square,flag=0,i=74424,u=0.35002091459496454,v=0.3958790434470656,w=0.5098794193597085,x=4.474706250833276 -color=red,shape=circle,flag=0,i=74437,u=0.79291025522697,v=0.8493005744918936,w=0.5263302149927336,x=4.602587432483611 -color=green,shape=square,flag=1,i=74443,u=0.40291391742358695,v=0.6021815986441458,w=0.48626671272928873,x=5.612360053442166 -color=blue,shape=triangle,flag=1,i=74450,u=0.06583186167773669,v=0.2992133757023169,w=0.5166522451567229,x=7.034692986210788 -color=red,shape=triangle,flag=0,i=74458,u=0.5006374274046266,v=0.1546090633702616,w=0.5042697870488335,x=5.291583227203817 -color=red,shape=triangle,flag=0,i=74465,u=0.9864723786100202,v=0.8250479892913812,w=0.49612436711205143,x=5.105525358933398 -color=yellow,shape=square,flag=1,i=74471,u=0.5241133434511219,v=0.13718435454131117,w=0.49990225761923773,x=6.133552328593815 -color=orange,shape=triangle,flag=0,i=74476,u=0.010474395956650007,v=0.10813919297176067,w=0.5089801531858591,x=4.436400330850538 -color=red,shape=triangle,flag=1,i=74477,u=0.32943558295730657,v=0.9639409828615061,w=0.4957871460681552,x=2.9078262118445366 -color=green,shape=circle,flag=0,i=74488,u=0.3289651954956777,v=0.0005012669003675585,w=0.5168396145304434,x=5.763564391334159 -color=blue,shape=triangle,flag=1,i=74505,u=0.8644876769517047,v=0.2816080933358057,w=0.51584081453108,x=4.039672499886708 -color=blue,shape=circle,flag=0,i=74509,u=0.5965385151564035,v=0.951036798339431,w=0.5149565701117595,x=5.30678271186835 -color=green,shape=triangle,flag=0,i=74514,u=0.8649132779034757,v=0.09148676051735127,w=0.47719837345277005,x=6.622641694721412 -color=blue,shape=circle,flag=0,i=74516,u=0.4500036001257083,v=0.9595646461419677,w=0.5145311776465503,x=3.0774155194558888 -color=red,shape=triangle,flag=1,i=74519,u=0.9186764537850587,v=0.11238234017476367,w=0.49710736840479497,x=5.954795765343072 -color=purple,shape=triangle,flag=0,i=74522,u=0.9699693146496409,v=0.32194205614852567,w=0.4921425489278764,x=7.188639100501519 -color=yellow,shape=triangle,flag=1,i=74525,u=0.6183461492286181,v=0.7553582988924024,w=0.5068765649512922,x=6.798741976251505 -color=red,shape=triangle,flag=0,i=74526,u=0.23008657394441356,v=0.8671538544785025,w=0.49797364430528185,x=5.915835529186908 -color=blue,shape=circle,flag=1,i=74543,u=0.8510489726029078,v=0.6488404429484304,w=0.5067544548660893,x=3.9968082317052294 -color=green,shape=square,flag=0,i=74544,u=0.6558736950046088,v=0.4426693570923439,w=0.48633782631649775,x=3.6796350041568684 -color=yellow,shape=circle,flag=1,i=74547,u=0.23000152048303502,v=0.7264792541863004,w=0.499072587362543,x=6.0138648938010535 -color=red,shape=triangle,flag=0,i=74565,u=0.5179873809927983,v=0.7117302875055687,w=0.5034995883795009,x=4.06281266643197 -color=red,shape=square,flag=1,i=74572,u=0.2723551975430052,v=0.1897879757149683,w=0.5254401488733796,x=4.7372181328436085 -color=red,shape=square,flag=0,i=74590,u=0.30983182228477213,v=0.0778484722085594,w=0.5308148030729908,x=4.517821672237914 -color=red,shape=square,flag=1,i=74609,u=0.709120648229431,v=0.17004605025488417,w=0.5273920145694707,x=4.47368188880185 -color=red,shape=circle,flag=1,i=74622,u=0.14764498315564645,v=0.1929774637478571,w=0.5292450006647548,x=4.0999308862013875 -color=blue,shape=square,flag=0,i=74626,u=0.5294156983321282,v=0.8286313269472367,w=0.4982429879863127,x=5.793112969323659 -color=red,shape=triangle,flag=0,i=74638,u=0.04867850900404547,v=0.9383175985076053,w=0.49563483918301704,x=5.8925709764789564 -color=green,shape=square,flag=0,i=74652,u=0.5221295680710472,v=0.9888864052686629,w=0.4979885981986899,x=4.607816454947834 -color=blue,shape=square,flag=1,i=74676,u=0.9420382598038157,v=0.379324794370812,w=0.49563464161249665,x=7.904342191233759 -color=red,shape=triangle,flag=1,i=74677,u=0.9068279425614332,v=0.8563730677745992,w=0.4919221265912739,x=4.863947969500148 -color=red,shape=circle,flag=0,i=74695,u=0.7563958208448414,v=0.6998420957844103,w=0.5251902558268223,x=5.894682368656684 -color=purple,shape=square,flag=0,i=74701,u=0.45817334086480754,v=0.5170576990703348,w=0.4968839326757915,x=4.942121550003258 -color=red,shape=square,flag=0,i=74740,u=0.43817873495487525,v=0.11641921116287135,w=0.5253951944272784,x=3.8899618805750404 -color=red,shape=circle,flag=0,i=74754,u=0.07647795745176733,v=0.113566323029729,w=0.5129774099736205,x=4.183420642946919 -color=red,shape=square,flag=0,i=74763,u=0.020592823584431152,v=0.975173817482053,w=0.5201764887296262,x=3.3376322773067817 -color=blue,shape=square,flag=1,i=74771,u=0.24337781675897274,v=0.2177815017781496,w=0.5066889951636958,x=3.6461295802047498 -color=red,shape=square,flag=0,i=74776,u=0.623543025423303,v=0.10433876527445662,w=0.517179691766531,x=4.624612095721415 -color=yellow,shape=triangle,flag=1,i=74779,u=0.7512935510372817,v=0.734837885516518,w=0.49846560985990546,x=4.2636152571421855 -color=red,shape=circle,flag=0,i=74790,u=0.10534648801385027,v=0.20524199587201541,w=0.5035367076184488,x=2.970228485933329 -color=blue,shape=triangle,flag=0,i=74793,u=0.6772071447096011,v=0.7838638110987186,w=0.5104766569470135,x=5.85929135054377 -color=green,shape=square,flag=0,i=74802,u=0.7263706240692465,v=0.030781064159093985,w=0.48667733318817413,x=3.3070100398451365 -color=red,shape=triangle,flag=1,i=74814,u=0.2607019003379061,v=0.5339014318993949,w=0.48157592588909687,x=4.4358352560455 -color=green,shape=square,flag=0,i=74820,u=0.9448557069603734,v=0.46144943854412324,w=0.4889583137136693,x=5.363334356029843 -color=green,shape=circle,flag=0,i=74851,u=0.9771917335030909,v=0.6888322919339299,w=0.4975961982610521,x=3.449680357165145 -color=red,shape=triangle,flag=1,i=74860,u=0.6026463336619938,v=0.1024166716399133,w=0.4732245130091161,x=5.835247136578104 -color=red,shape=square,flag=1,i=74862,u=0.48262587595894835,v=0.37157525189736296,w=0.5297945671059928,x=4.224868771609265 -color=green,shape=square,flag=0,i=74869,u=0.18288427925472805,v=0.015877164393682364,w=0.4909218346237854,x=5.441451111365079 -color=blue,shape=square,flag=1,i=74871,u=0.7905099363493048,v=0.7896156225587122,w=0.5187914231141615,x=5.426423768480798 -color=red,shape=circle,flag=0,i=74890,u=0.5516627345373434,v=0.5864021452580853,w=0.4983626770607954,x=3.4071241968360337 -color=red,shape=circle,flag=0,i=74918,u=0.945429259821453,v=0.9719372848090725,w=0.4967795542266296,x=5.347800519043236 -color=green,shape=square,flag=0,i=74924,u=0.1535922133019476,v=0.010668070394192819,w=0.4907173534845199,x=5.984633685060537 -color=blue,shape=square,flag=0,i=74930,u=0.5981963559775522,v=0.11792577988732766,w=0.5190767792230858,x=6.830316594649006 -color=purple,shape=square,flag=0,i=74941,u=0.19347104279068772,v=0.21573095612416882,w=0.4941875867798613,x=5.632709057232895 -color=red,shape=square,flag=0,i=74952,u=0.09111599781438584,v=0.45811081075245175,w=0.5287255586227518,x=4.151652872382568 -color=red,shape=triangle,flag=0,i=74960,u=0.8305238189559678,v=0.2823882612515901,w=0.4605735290481944,x=4.196752960002679 -color=blue,shape=square,flag=1,i=74961,u=0.20763259922265842,v=0.9962466757568939,w=0.5203329282517026,x=5.161169723849628 -color=red,shape=square,flag=1,i=74971,u=0.3322698897360169,v=0.5457527501700328,w=0.5285993508400428,x=5.633722348136948 -color=purple,shape=square,flag=0,i=74972,u=0.563061970220946,v=0.6657924898046755,w=0.489399159568048,x=5.454305611354727 -color=red,shape=triangle,flag=0,i=74989,u=0.20258116002912574,v=0.7232876317439324,w=0.4698974291569513,x=4.30383926696124 -color=blue,shape=triangle,flag=0,i=75000,u=0.8625968637336654,v=0.8612979219248911,w=0.5003823503353495,x=4.2538705389806974 -color=red,shape=square,flag=0,i=75004,u=0.6892800110198373,v=0.1251579760229029,w=0.5227290201720401,x=5.891890301810555 -color=purple,shape=square,flag=0,i=75010,u=0.5715658727337238,v=0.5383962053561394,w=0.4882862473154879,x=4.379031207070903 -color=purple,shape=square,flag=0,i=75015,u=0.01005264691899832,v=0.7023238764836227,w=0.49376657434988924,x=6.7332438589909644 -color=red,shape=square,flag=1,i=75035,u=0.19227533016762532,v=0.9391381148603628,w=0.5247846045691217,x=4.562503628146505 -color=blue,shape=triangle,flag=0,i=75044,u=0.5108493646092617,v=0.04514088017253726,w=0.503498744545002,x=4.8591549326123475 -color=yellow,shape=triangle,flag=1,i=75051,u=0.38333447674132615,v=0.7628189688940775,w=0.492977771366999,x=4.083112374709039 -color=purple,shape=square,flag=0,i=75052,u=0.03378335735159066,v=0.6605812699878494,w=0.48444801239592317,x=3.6137194488627067 -color=purple,shape=square,flag=0,i=75076,u=0.11983350395662407,v=0.6776305066704684,w=0.4802682236113198,x=4.104738631543207 -color=green,shape=triangle,flag=0,i=75092,u=0.8607417326531254,v=0.5949693667749962,w=0.48549329179404455,x=4.407897460367713 -color=yellow,shape=square,flag=1,i=75101,u=0.4596765018887293,v=0.26422536386579976,w=0.5173476340952787,x=6.148702548461491 -color=red,shape=triangle,flag=1,i=75103,u=0.15202526130769134,v=0.38063211337670755,w=0.4893375663310441,x=3.4519042360517695 -color=red,shape=square,flag=1,i=75104,u=0.40175905204290274,v=0.40391774232223854,w=0.5279002982270758,x=3.778059594042656 -color=blue,shape=square,flag=1,i=75106,u=0.9244395349673898,v=0.42443049923804577,w=0.5170664137792557,x=4.550639626971413 -color=purple,shape=triangle,flag=0,i=75132,u=0.12671748229364066,v=0.4874007275096701,w=0.48601340180309904,x=5.919214501812422 -color=green,shape=square,flag=1,i=75143,u=0.5134938685226365,v=0.8839705864814802,w=0.4782139684567321,x=4.226420194212593 -color=red,shape=square,flag=0,i=75144,u=0.21301900232216486,v=0.12593123029841757,w=0.5220877510995696,x=3.6410497166169886 -color=red,shape=circle,flag=1,i=75149,u=0.07693130714370355,v=0.10995103522411168,w=0.48038894775611385,x=4.228261653242684 -color=red,shape=triangle,flag=0,i=75161,u=0.3874632390923548,v=0.4327220575708186,w=0.4924739242568785,x=5.35625158595733 -color=red,shape=triangle,flag=0,i=75167,u=0.9701929769281673,v=0.9037417970215005,w=0.4847116714111441,x=5.725677359896707 -color=orange,shape=triangle,flag=1,i=75171,u=0.18863723342263317,v=0.24846632036006866,w=0.5109649587971444,x=5.813016576370831 -color=red,shape=circle,flag=0,i=75180,u=0.3287320520386863,v=0.3250446235760209,w=0.49127620877440253,x=2.5084090150515412 -color=green,shape=triangle,flag=0,i=75189,u=0.25779790129408353,v=0.0674247087839257,w=0.4911262483264463,x=5.567269566215741 -color=blue,shape=circle,flag=1,i=75193,u=0.357690113525865,v=0.5401196101290404,w=0.4993864466653269,x=3.7044565220355117 -color=red,shape=circle,flag=0,i=75207,u=0.7510120944091546,v=0.7431781866112418,w=0.49058708243254423,x=6.810490235822786 -color=purple,shape=triangle,flag=0,i=75208,u=0.1603043319255274,v=0.4625692979491671,w=0.48695883391154,x=4.96732957568248 -color=yellow,shape=circle,flag=1,i=75248,u=0.676844164319526,v=0.936725146337167,w=0.5099969215041289,x=6.234240676254099 -color=red,shape=square,flag=0,i=75256,u=0.6446659281006489,v=0.5175660435630324,w=0.5151958930781878,x=6.8611019790328145 -color=red,shape=square,flag=0,i=75257,u=0.3409687777588285,v=0.8999995674758315,w=0.5156917920846991,x=6.7921599695275505 -color=red,shape=square,flag=1,i=75259,u=0.45859657967610057,v=0.3656105550835457,w=0.5154729016657188,x=3.696978455287106 -color=yellow,shape=triangle,flag=0,i=75303,u=0.2610907123027705,v=0.5237798928294737,w=0.5014752981619796,x=6.365781918924758 -color=blue,shape=circle,flag=0,i=75317,u=0.15141833645024882,v=0.26378981580255034,w=0.48911646158067973,x=4.8737693597224485 -color=yellow,shape=square,flag=1,i=75331,u=0.6964641888418144,v=0.2027409369455846,w=0.5118328475993918,x=4.799359812196501 -color=blue,shape=triangle,flag=0,i=75342,u=0.5930466331147796,v=0.7567849694048852,w=0.5081372745594764,x=4.657691984751567 -color=red,shape=triangle,flag=0,i=75352,u=0.10922834451652375,v=0.6103106443343256,w=0.4767723707613561,x=5.583897254866231 -color=blue,shape=square,flag=1,i=75353,u=0.6375437277279246,v=0.7744805532740272,w=0.5038428932065878,x=5.04725085115049 -color=red,shape=circle,flag=0,i=75372,u=0.7155677568355481,v=0.6598571030784607,w=0.49629260875176784,x=6.607036320640603 -color=red,shape=triangle,flag=0,i=75402,u=0.8808261525746126,v=0.15523665320888558,w=0.473999401371741,x=6.287426943392451 -color=purple,shape=triangle,flag=1,i=75403,u=0.5386779497713138,v=0.06733566374828381,w=0.4901505560981755,x=6.51914329025031 -color=red,shape=triangle,flag=1,i=75414,u=0.38950713442883356,v=0.2666800464770108,w=0.4764081342261732,x=7.432812911521515 -color=blue,shape=square,flag=0,i=75432,u=0.3554035819456608,v=0.5629294550493659,w=0.5048791235784019,x=4.818441659188746 -color=red,shape=square,flag=0,i=75433,u=0.16482058499765828,v=0.7562790517306017,w=0.5043472942958557,x=6.147200440654905 -color=red,shape=square,flag=0,i=75450,u=0.0009495799592779131,v=0.03406316353835148,w=0.4990426666507558,x=4.905440225098672 -color=yellow,shape=square,flag=1,i=75459,u=0.6352053093764487,v=0.962711097993488,w=0.5085909817814864,x=3.7600148098726898 -color=yellow,shape=square,flag=1,i=75473,u=0.004725539958056246,v=0.4576002449786595,w=0.5145504402085824,x=5.226666060773338 -color=blue,shape=triangle,flag=0,i=75483,u=0.069577529834978,v=0.8771892135808287,w=0.5073546889309503,x=4.520959625846948 -color=red,shape=circle,flag=1,i=75491,u=0.928088830749936,v=0.8896654695319893,w=0.501216303408147,x=3.7360966573202514 -color=blue,shape=triangle,flag=0,i=75506,u=0.8553222803773598,v=0.10082373724243787,w=0.5083141981233915,x=5.959244981300554 -color=yellow,shape=triangle,flag=1,i=75508,u=0.9026235012282425,v=0.014810326518428507,w=0.4975508044571711,x=5.853777038623881 -color=yellow,shape=circle,flag=1,i=75517,u=0.2865333014524597,v=0.09746212379561847,w=0.5173857972860151,x=4.905216217374824 -color=red,shape=square,flag=1,i=75522,u=0.10175448150457833,v=0.5751535160121101,w=0.5038512522281451,x=4.723603312684658 -color=red,shape=square,flag=1,i=75529,u=0.38339531909138613,v=0.2639001311017938,w=0.5132283932993867,x=6.006291577090569 -color=red,shape=square,flag=1,i=75538,u=0.2558592745784639,v=0.05311299722166407,w=0.5115484086707561,x=2.7016662817727286 -color=green,shape=triangle,flag=0,i=75572,u=0.4305180890062592,v=0.9354143160561779,w=0.5172762833306427,x=4.359080074142157 -color=red,shape=square,flag=1,i=75595,u=0.14405675430660847,v=0.3037167415128579,w=0.5101798085754583,x=5.70927704526992 -color=yellow,shape=square,flag=1,i=75604,u=0.201035208887139,v=0.8480401023090458,w=0.5050193448739322,x=3.4944549796548596 -color=blue,shape=square,flag=1,i=75628,u=0.8802285846004505,v=0.13407926435102302,w=0.49640083115194,x=6.087347708773302 -color=yellow,shape=square,flag=1,i=75641,u=0.8960158694466789,v=0.9704766533218534,w=0.5042020194564072,x=5.029082053242115 -color=yellow,shape=square,flag=1,i=75642,u=0.5978488198743882,v=0.37787829397501427,w=0.5004855381958734,x=4.389400795529668 -color=red,shape=triangle,flag=0,i=75652,u=0.6240064191051112,v=0.5703501649929268,w=0.488843747208351,x=5.129025026851264 -color=red,shape=triangle,flag=0,i=75658,u=0.5470569475832744,v=0.9756165926047606,w=0.4932618907149586,x=5.253286623148804 -color=red,shape=square,flag=1,i=75663,u=0.7102481456297569,v=0.4911367230806417,w=0.5008489806383956,x=5.26961788741773 -color=red,shape=triangle,flag=1,i=75678,u=0.6561003034425807,v=0.7972740338240779,w=0.49421066817522435,x=7.803822059996219 -color=red,shape=square,flag=0,i=75698,u=0.4366390844393546,v=0.6906985181971231,w=0.4807420064596584,x=4.7393503683284095 -color=blue,shape=square,flag=1,i=75711,u=0.6149584495093532,v=0.41934374368866256,w=0.5098315710175045,x=5.608160441574413 -color=yellow,shape=square,flag=1,i=75722,u=0.6990257283371092,v=0.2962816179750801,w=0.4941817022232349,x=5.534226672377635 -color=red,shape=square,flag=0,i=75736,u=0.4694271707680544,v=0.3208448478265661,w=0.4744399093376625,x=4.4734000147075825 -color=green,shape=triangle,flag=0,i=75739,u=0.9325980125289542,v=0.863020102025737,w=0.5084650379055495,x=6.391887528533768 -color=red,shape=square,flag=1,i=75762,u=0.16813249459460233,v=0.7374549851261671,w=0.4718190527883035,x=3.6718018956767327 -color=red,shape=square,flag=1,i=75793,u=0.08894582109819293,v=0.6000135568343806,w=0.4795656502027283,x=4.335128625899531 -color=purple,shape=square,flag=0,i=75795,u=0.3468131948434764,v=0.6006738188914619,w=0.4931816181929421,x=3.983448108356022 -color=blue,shape=square,flag=1,i=75815,u=0.5149419880487021,v=0.5036298899468596,w=0.5088589858709743,x=4.408149743880865 -color=blue,shape=triangle,flag=1,i=75824,u=0.8954548036364832,v=0.4408623314596646,w=0.4746441626388489,x=6.426931798648624 -color=red,shape=circle,flag=0,i=75825,u=0.12287715187493742,v=0.04789986778155528,w=0.5196696158158836,x=4.560843478512571 -color=red,shape=square,flag=0,i=75828,u=0.3985572566687491,v=0.12815682950766194,w=0.4756016974432333,x=5.377997650338762 -color=purple,shape=triangle,flag=0,i=75844,u=0.8021072746184713,v=0.12070363535957285,w=0.4702399817686198,x=5.0113682597077185 -color=green,shape=circle,flag=0,i=75847,u=0.18488866254057112,v=0.11468324436011201,w=0.49143001203031084,x=3.2943961749610438 -color=red,shape=circle,flag=0,i=75848,u=0.1381322171900793,v=0.15022762256624764,w=0.5212530276762425,x=5.056600368873066 -color=yellow,shape=square,flag=1,i=75857,u=0.03295318379313106,v=0.8850626143030532,w=0.49413067472286637,x=5.385128438317927 -color=purple,shape=square,flag=0,i=75905,u=0.20200805455323,v=0.744647626765385,w=0.49206822092449926,x=8.220892842497657 -color=blue,shape=circle,flag=1,i=75908,u=0.8052598880713813,v=0.057428685846987015,w=0.48831355100325613,x=6.611056168510579 -color=red,shape=circle,flag=1,i=75911,u=0.4332171492101451,v=0.44534885763395476,w=0.5196597647356826,x=4.107100514199269 -color=green,shape=circle,flag=0,i=75917,u=0.17705199786990788,v=0.4207031506723816,w=0.5014435007025267,x=3.546014256391011 -color=red,shape=circle,flag=0,i=75943,u=0.7878904315943659,v=0.8055486594828597,w=0.5301132508138457,x=6.1134866317158405 -color=purple,shape=square,flag=0,i=75976,u=0.06734587877410814,v=0.21288735833675743,w=0.4767770370956767,x=6.445437307417428 -color=blue,shape=square,flag=0,i=75988,u=0.39575172885065846,v=0.4637412237308357,w=0.5032758150206922,x=5.499823719296377 -color=red,shape=circle,flag=1,i=75991,u=0.9091170467174449,v=0.9741284357179678,w=0.5295212319647594,x=6.308852776865592 -color=green,shape=square,flag=1,i=76031,u=0.2493610294300448,v=0.9204098762255356,w=0.47734531980910777,x=5.187007359259788 -color=blue,shape=circle,flag=1,i=76036,u=0.9927854320007904,v=0.32506230148003556,w=0.4871355497015411,x=5.021868544862186 -color=blue,shape=circle,flag=1,i=76037,u=0.6925251794010225,v=0.8804878900515186,w=0.4898651628380573,x=4.480835808161586 -color=red,shape=square,flag=0,i=76051,u=0.9167587913426889,v=0.6490837121495829,w=0.4850515398929979,x=3.7837005627476956 -color=green,shape=triangle,flag=0,i=76057,u=0.5177756935104152,v=0.8144260505173898,w=0.5101053061428206,x=3.8260057306518136 -color=red,shape=circle,flag=0,i=76092,u=0.013500520841920438,v=0.07936605338912676,w=0.5274579583239124,x=5.384077958139304 -color=blue,shape=triangle,flag=1,i=76172,u=0.42918097650983045,v=0.6765565737144372,w=0.4704877451252106,x=2.206541563902966 -color=red,shape=square,flag=0,i=76173,u=0.2614546432113146,v=0.8779217806047592,w=0.4689909245888773,x=3.515801994314156 -color=purple,shape=square,flag=0,i=76175,u=0.9230548490799251,v=0.20677485645913862,w=0.4918545620497562,x=4.8305498361765435 -color=red,shape=circle,flag=1,i=76177,u=0.9873402214957514,v=0.989657002194948,w=0.5237403101147309,x=6.166278355280192 -color=purple,shape=square,flag=0,i=76212,u=0.9431532816538241,v=0.21474141660271073,w=0.4930253515593033,x=3.7594040745083124 -color=purple,shape=triangle,flag=0,i=76214,u=0.609821464183716,v=0.6389526317244818,w=0.48376135835783185,x=5.014872046499547 -color=purple,shape=circle,flag=0,i=76219,u=0.20026725870065754,v=0.793205581150307,w=0.4969441153050769,x=5.6323833995846195 -color=yellow,shape=triangle,flag=0,i=76231,u=0.3136266773812564,v=0.8272054379835488,w=0.49668967367362116,x=5.257403979198879 -color=blue,shape=triangle,flag=1,i=76251,u=0.49434565499304994,v=0.41676771659597245,w=0.46723583175996675,x=4.335445528958487 -color=orange,shape=triangle,flag=0,i=76287,u=0.7552996540912389,v=0.8935930400745189,w=0.5065363727687604,x=5.994057905754794 -color=red,shape=triangle,flag=0,i=76318,u=0.335725690636258,v=0.41837153975083907,w=0.4959504523532034,x=4.519741043597379 -color=purple,shape=square,flag=0,i=76320,u=0.8288363545777822,v=0.08577507565980647,w=0.48765964027079794,x=4.600099106336966 -color=purple,shape=triangle,flag=0,i=76361,u=0.5715881630469227,v=0.14729620799909005,w=0.48039556454605437,x=6.146797804220459 -color=red,shape=triangle,flag=0,i=76380,u=0.279101484797904,v=0.4109954206489326,w=0.5004782122977516,x=4.623599803175675 -color=red,shape=triangle,flag=0,i=76392,u=0.9573963142758083,v=0.4935114236307473,w=0.49685789478221154,x=5.259212049815939 -color=green,shape=square,flag=0,i=76399,u=0.2952553189706415,v=0.3715260554059431,w=0.4714357366530857,x=5.361695064178093 -color=red,shape=square,flag=0,i=76422,u=0.3834635032257123,v=0.029416298554753473,w=0.45550242204102026,x=4.736058545702815 -color=orange,shape=square,flag=1,i=76426,u=0.2850562919010694,v=0.7868728087902546,w=0.5183553119186447,x=4.795621189829819 -color=red,shape=triangle,flag=0,i=76428,u=0.7410802738316075,v=0.9010013222494525,w=0.49696282194342084,x=5.504560178177751 -color=purple,shape=square,flag=0,i=76437,u=0.2839796784965293,v=0.5781825327832731,w=0.4901380690647679,x=4.853108645301831 -color=red,shape=square,flag=1,i=76442,u=0.7198502716552054,v=0.5269945982200485,w=0.4580120750821909,x=5.606712965703426 -color=red,shape=square,flag=0,i=76450,u=0.882822684791914,v=0.7382766439307654,w=0.4606550342194117,x=6.058089929367234 -color=yellow,shape=circle,flag=1,i=76454,u=0.7841204724506287,v=0.968116729443913,w=0.5291663496637445,x=5.05585812332319 -color=blue,shape=square,flag=1,i=76456,u=0.7713878211892955,v=0.1825730748525337,w=0.5206337721721971,x=5.673757426079461 -color=red,shape=square,flag=1,i=76474,u=0.12950794968832724,v=0.9732315184612382,w=0.46671396209064847,x=6.196978169535126 -color=yellow,shape=triangle,flag=1,i=76488,u=0.16708369275300383,v=0.10000696220863614,w=0.5030373383268141,x=6.710254718636688 -color=red,shape=triangle,flag=0,i=76502,u=0.16780794197173354,v=0.3692395976984879,w=0.5015701856233178,x=3.638292085279994 -color=yellow,shape=square,flag=1,i=76524,u=0.19198671073585116,v=0.17932130955503012,w=0.49847691944723177,x=7.519202986839545 -color=yellow,shape=circle,flag=1,i=76528,u=0.9903564738971828,v=0.7682144346892245,w=0.5168304712952871,x=4.961367236877486 -color=red,shape=square,flag=0,i=76532,u=0.7533687620024123,v=0.5848577522418097,w=0.45942372500333273,x=7.215166600925446 -color=red,shape=square,flag=0,i=76547,u=0.8905442476175128,v=0.3161612820671559,w=0.45922492218360644,x=4.5884612079356595 -color=yellow,shape=triangle,flag=1,i=76562,u=0.5641945990626297,v=0.28371417959395917,w=0.5020034373981855,x=7.295391934824061 -color=red,shape=square,flag=0,i=76601,u=0.4210588440059848,v=0.7639543920834846,w=0.45347407490917707,x=5.170145105502908 -color=red,shape=square,flag=1,i=76609,u=0.7939565415336549,v=0.9475167748252384,w=0.4605768025184789,x=4.635759652301643 -color=red,shape=square,flag=0,i=76619,u=0.09482789359701671,v=0.7810394740165318,w=0.46042606676004,x=4.348479427136168 -color=green,shape=square,flag=0,i=76622,u=0.31546661809489795,v=0.3025053899297562,w=0.4846801333400167,x=4.7358072152506505 -color=yellow,shape=square,flag=1,i=76642,u=0.004766043712697288,v=0.4285654945304932,w=0.4990474064849798,x=4.5790215377135475 -color=red,shape=triangle,flag=0,i=76686,u=0.29815928993385976,v=0.49258608624814926,w=0.4940528476148049,x=4.410959847806137 -color=purple,shape=triangle,flag=0,i=76696,u=0.9833449975502577,v=0.6904901237251319,w=0.4677075990679117,x=5.38305939403546 -color=orange,shape=square,flag=0,i=76733,u=0.1340198537032199,v=0.6230296547623884,w=0.5191147587853986,x=4.317819627450959 -color=red,shape=triangle,flag=0,i=76736,u=0.33712120934518763,v=0.6355057298358443,w=0.4885421721611272,x=5.462678747284495 -color=red,shape=square,flag=0,i=76743,u=0.7076128300554048,v=0.3612592418390992,w=0.4534417088536488,x=3.553903621042796 -color=red,shape=circle,flag=0,i=76745,u=0.7346994503904052,v=0.6709551075125401,w=0.5201947203592728,x=5.836860612469489 -color=red,shape=square,flag=1,i=76748,u=0.3935879606692859,v=0.4113539802848414,w=0.45628730910451076,x=5.311646949788667 -color=red,shape=circle,flag=1,i=76753,u=0.41235423667859183,v=0.493829133643183,w=0.5157115690246393,x=5.303995341566885 -color=yellow,shape=triangle,flag=1,i=76769,u=0.305985160252608,v=0.8809371695402696,w=0.5081662679952208,x=7.822690417690133 -color=purple,shape=square,flag=0,i=76770,u=0.3659882568404359,v=0.476692011500199,w=0.4884406863910534,x=3.1242199348560633 -color=red,shape=square,flag=1,i=76783,u=0.959283579866316,v=0.770921589533541,w=0.46381838261628455,x=4.763967572986673 -color=green,shape=square,flag=0,i=76819,u=0.6532515707206029,v=0.14428910080925705,w=0.4927813260498352,x=4.799584976230563 -color=red,shape=circle,flag=0,i=76832,u=0.36559371364884163,v=0.37579210044452566,w=0.5101190603508893,x=6.863713650351852 -color=green,shape=square,flag=1,i=76840,u=0.1682757425890279,v=0.8119245998051429,w=0.501864835850702,x=4.546026981081092 -color=purple,shape=square,flag=0,i=76842,u=0.5227178082152303,v=0.29203156269608455,w=0.49532571929570274,x=5.026733299375825 -color=yellow,shape=square,flag=1,i=76846,u=0.661282221648051,v=0.5356646035492276,w=0.5101232526911603,x=3.664937209856302 -color=blue,shape=circle,flag=0,i=76849,u=0.15985966900502668,v=0.20680381891863253,w=0.4976140209855073,x=5.44375813420731 -color=red,shape=square,flag=1,i=76866,u=0.47595884339009054,v=0.7788440380136896,w=0.4637651356713886,x=4.056418678235501 -color=blue,shape=triangle,flag=0,i=76869,u=0.5148765705215134,v=0.8201343712473447,w=0.4833697262853864,x=4.444947868201772 -color=red,shape=square,flag=0,i=76889,u=0.06276868823340664,v=0.21467726472252235,w=0.4677796759139046,x=3.984786234417578 -color=red,shape=square,flag=0,i=76897,u=0.3528319674319337,v=0.10294828448589244,w=0.47574671852218026,x=4.831450986764156 -color=green,shape=circle,flag=0,i=76907,u=0.11120179319678114,v=0.1857854246924422,w=0.5027494113393097,x=6.153389907420025 -color=red,shape=circle,flag=1,i=76919,u=0.1513898702929034,v=0.09170235004311755,w=0.5280104857140738,x=4.721211513188092 -color=red,shape=circle,flag=1,i=76936,u=0.7827812711822434,v=0.7263464027350637,w=0.5281972165627313,x=5.6435949386947755 -color=red,shape=triangle,flag=0,i=76940,u=0.2607488809569648,v=0.3692085201022801,w=0.48136495022376974,x=7.8727596727241185 -color=red,shape=circle,flag=1,i=76946,u=0.6550325045303718,v=0.7084881945203096,w=0.5269230330360379,x=4.587075827592058 -color=red,shape=square,flag=0,i=76961,u=0.6335073543985587,v=0.21036469813066117,w=0.479503905024245,x=6.231482302904311 -color=green,shape=square,flag=0,i=76972,u=0.9088008377276038,v=0.5469320319841137,w=0.4936443160847649,x=7.641369883045168 -color=red,shape=triangle,flag=1,i=76999,u=0.9281446487255947,v=0.8585629394008908,w=0.47618411763181206,x=6.394502412078232 -color=yellow,shape=square,flag=0,i=77003,u=0.19738235360934986,v=0.11021928539582238,w=0.5055229571562947,x=4.664690223675415 -color=orange,shape=square,flag=1,i=77007,u=0.7375304044096296,v=0.36511415064301433,w=0.5136264196737452,x=5.342645643600903 -color=red,shape=square,flag=0,i=77016,u=0.32752017620638896,v=0.9856779086957664,w=0.4823151627725228,x=5.010023735914677 -color=red,shape=triangle,flag=1,i=77030,u=0.5469610403836389,v=0.9522044439683123,w=0.485575358704096,x=5.159358604405621 -color=blue,shape=triangle,flag=0,i=77047,u=0.7938322489682957,v=0.46407313222969127,w=0.4758874717080517,x=3.5729030713180876 -color=red,shape=circle,flag=0,i=77053,u=0.8831034522394201,v=0.9531503251783967,w=0.5279176082822314,x=4.524986670551221 -color=red,shape=square,flag=0,i=77081,u=0.29516644811905557,v=0.5110105965402431,w=0.4769777390821584,x=4.253687086097668 -color=red,shape=square,flag=0,i=77091,u=0.7825277204760981,v=0.7822768676055581,w=0.47481923731339115,x=5.079670205105158 -color=red,shape=square,flag=0,i=77099,u=0.07302432520920188,v=0.39785580369448503,w=0.47842499657163207,x=5.71835421334615 -color=blue,shape=triangle,flag=1,i=77112,u=0.39423653538152303,v=0.11795572601740678,w=0.4737626042420189,x=4.0947033853609645 -color=red,shape=circle,flag=0,i=77116,u=0.9421489349811454,v=1.0070134143017686,w=0.5217223355804862,x=5.3218552534961745 -color=blue,shape=circle,flag=0,i=77136,u=0.0379159016193118,v=0.7798608866751163,w=0.509728511574839,x=4.736924438644583 -color=purple,shape=square,flag=0,i=77140,u=0.8946258375181065,v=0.18082688296579663,w=0.5048421067172387,x=6.573813893201475 -color=red,shape=square,flag=1,i=77143,u=0.5575107832809912,v=0.2054568499609042,w=0.46947134425273107,x=6.170322550837511 -color=blue,shape=triangle,flag=1,i=77160,u=0.6522799342859079,v=0.6472997601595853,w=0.4818153443925534,x=6.6272356859148465 -color=yellow,shape=triangle,flag=1,i=77163,u=0.7491156796196939,v=0.8135376354490241,w=0.5114868676273986,x=5.838198702223457 -color=red,shape=triangle,flag=0,i=77184,u=0.6917504998535641,v=0.013787670735251667,w=0.4978673714798339,x=3.344329605081361 -color=yellow,shape=triangle,flag=1,i=77192,u=0.3072066911750212,v=0.32871805637486695,w=0.5083451332581012,x=4.5195331356617565 -color=orange,shape=triangle,flag=0,i=77194,u=0.6446130972426188,v=0.7270919351343222,w=0.4987853860085344,x=6.983885845745921 -color=green,shape=triangle,flag=0,i=77197,u=0.3009031556184564,v=0.6237406211754767,w=0.49489214109005336,x=5.6186287395451755 -color=red,shape=triangle,flag=1,i=77203,u=0.5485532893952202,v=0.10777937836919693,w=0.5011720691330133,x=7.749001863831452 -color=yellow,shape=square,flag=1,i=77210,u=0.6076597668411704,v=0.8319760196147771,w=0.5037714972963674,x=5.418550391547821 -color=red,shape=triangle,flag=1,i=77222,u=0.80988229108039,v=0.6596996615507281,w=0.502707372277778,x=5.344332909793438 -color=green,shape=square,flag=0,i=77229,u=0.5554816226317305,v=0.7913655706475917,w=0.47466356301209983,x=5.751465481275758 -color=red,shape=triangle,flag=1,i=77231,u=0.9329857915909096,v=0.37436598445850366,w=0.5060516424261574,x=5.643318282782549 -color=yellow,shape=circle,flag=1,i=77232,u=0.4558401430598601,v=0.4212612403995363,w=0.5284789105375716,x=4.61532583912487 -color=yellow,shape=circle,flag=1,i=77286,u=0.6926199692441136,v=0.9308710026879694,w=0.5290527097598187,x=4.882279348854452 -color=red,shape=circle,flag=0,i=77304,u=0.8956542163016912,v=0.8537758569578553,w=0.5106731868446719,x=4.892239666282779 -color=blue,shape=circle,flag=1,i=77311,u=0.11561282844370702,v=0.3607453384892849,w=0.5097827693620435,x=3.175863668577604 -color=red,shape=circle,flag=1,i=77314,u=0.5331088810981582,v=0.4730798674677947,w=0.5061594431176809,x=4.020397800630222 -color=red,shape=triangle,flag=0,i=77316,u=0.968280211023668,v=0.05032418921882176,w=0.49601957682997005,x=3.8472715702079605 -color=yellow,shape=circle,flag=1,i=77319,u=0.5701614887192601,v=0.3542393125377259,w=0.5257995256701111,x=2.8808568691332312 -color=purple,shape=triangle,flag=0,i=77324,u=0.5974162886593449,v=0.6957137682534142,w=0.4944406849904481,x=3.217706487697329 -color=yellow,shape=circle,flag=1,i=77341,u=0.7416742727996676,v=0.042077644178583284,w=0.5210366039030419,x=5.836723130229981 -color=purple,shape=square,flag=0,i=77342,u=0.8437817412938233,v=0.5372651573035038,w=0.5038483946843023,x=3.4668181137543943 -color=green,shape=triangle,flag=1,i=77343,u=0.8304648665831763,v=0.5571220069861031,w=0.4970822219104579,x=7.678924727076833 -color=green,shape=square,flag=0,i=77353,u=0.31383630914270855,v=0.9320126658774085,w=0.48419044896910335,x=6.019436588292823 -color=red,shape=square,flag=0,i=77363,u=0.9349481745701733,v=0.5197747794529468,w=0.4840420519147051,x=7.200716439674264 -color=red,shape=triangle,flag=0,i=77370,u=0.027606628544258438,v=0.21072466641787524,w=0.5013165961470609,x=6.548724610890811 -color=green,shape=square,flag=0,i=77371,u=0.975699067608121,v=0.383422099140901,w=0.4909791398855183,x=5.621084666025872 -color=orange,shape=square,flag=1,i=77373,u=0.08047770282189626,v=0.793062492110941,w=0.5157356687352839,x=6.81235010781937 -color=red,shape=circle,flag=1,i=77374,u=0.9400781515070912,v=0.9937705586525689,w=0.506866768577407,x=6.015225138650724 -color=red,shape=square,flag=0,i=77394,u=0.9771929304404441,v=0.04584250823149516,w=0.4787690060978922,x=5.872117327313018 -color=red,shape=triangle,flag=0,i=77407,u=0.6209929959828102,v=0.5315706426683636,w=0.49456277587745673,x=5.261144849257304 -color=red,shape=triangle,flag=1,i=77409,u=0.5250678973758585,v=0.3074724562911556,w=0.4971848377915727,x=6.236980514084699 -color=red,shape=triangle,flag=0,i=77430,u=0.6922825609674655,v=0.6191756664552196,w=0.4897381531488978,x=5.173187322230956 -color=blue,shape=circle,flag=1,i=77435,u=0.29326301377252006,v=0.18764379074495874,w=0.4998037683537533,x=4.967728741567706 -color=yellow,shape=triangle,flag=1,i=77441,u=0.6568385917730865,v=0.38603501449884037,w=0.504300851951063,x=6.617972042200967 -color=yellow,shape=square,flag=1,i=77443,u=0.8086373354888161,v=0.5326267434636608,w=0.49826731674132146,x=5.466272639931759 -color=red,shape=triangle,flag=0,i=77449,u=0.12783454755598145,v=0.15518016995699857,w=0.4945620418537517,x=4.520613296394768 -color=red,shape=square,flag=1,i=77453,u=0.7535876571287363,v=0.9587404274991285,w=0.4828953368987452,x=7.774863579308164 -color=red,shape=triangle,flag=1,i=77454,u=0.5913530687458667,v=0.2286859031300481,w=0.49347898440221705,x=4.752452355807436 -color=red,shape=triangle,flag=0,i=77457,u=0.6845112304964417,v=0.7197492167199879,w=0.4948868982170782,x=3.3799971961615207 -color=purple,shape=triangle,flag=0,i=77470,u=0.2709531771155317,v=0.2830805073235585,w=0.5046952892589561,x=5.823416136767672 -color=green,shape=square,flag=0,i=77483,u=0.7810562792809393,v=0.9945846444761719,w=0.4895694917364415,x=3.9067195661716716 -color=red,shape=triangle,flag=1,i=77504,u=0.5160926536255005,v=0.3425738694725817,w=0.5009294398462697,x=4.296389952769009 -color=orange,shape=square,flag=0,i=77520,u=0.3046916484991026,v=0.022007322608711077,w=0.518102233366699,x=5.811935169365285 -color=green,shape=circle,flag=0,i=77521,u=0.1847073823991494,v=0.6277665629404164,w=0.49561411904056657,x=5.302702802198399 -color=purple,shape=square,flag=0,i=77533,u=0.19418624775109472,v=0.40598362848990033,w=0.48574326786845745,x=3.7112014346560205 -color=red,shape=circle,flag=0,i=77556,u=0.2470181921781045,v=0.26861474422319465,w=0.4822202295907846,x=4.611908933883087 -color=green,shape=circle,flag=0,i=77562,u=0.06706697303218212,v=0.2991750066193938,w=0.48631848107883785,x=5.087555678305484 -color=purple,shape=triangle,flag=0,i=77583,u=0.498934408482288,v=0.44398600058670823,w=0.5075041081658945,x=5.917191652700367 -color=yellow,shape=square,flag=0,i=77584,u=0.9187883771903261,v=0.9512686681524661,w=0.5062377803074822,x=5.690376112643951 -color=yellow,shape=circle,flag=1,i=77587,u=0.617108774754534,v=0.5561639609600528,w=0.5128661764819804,x=4.871203993468564 -color=red,shape=triangle,flag=1,i=77598,u=0.16028155177408732,v=0.7586084220507242,w=0.49359654375993006,x=4.112822440203012 -color=blue,shape=triangle,flag=1,i=77601,u=0.7704374985124988,v=0.14875326540096667,w=0.4900491229537145,x=4.337224914834552 -color=red,shape=circle,flag=1,i=77623,u=0.31605935880087166,v=0.23094444829271144,w=0.47216564115389187,x=6.171378882479556 -color=red,shape=circle,flag=0,i=77633,u=0.3789869749517534,v=0.30556001010592937,w=0.4606437567191414,x=3.549907806626836 -color=red,shape=square,flag=0,i=77637,u=0.42222644988739166,v=0.5776307774389853,w=0.4739427501946395,x=4.6556211646127075 -color=red,shape=square,flag=0,i=77644,u=0.23949740134670738,v=0.8040688651973041,w=0.47582915437015594,x=5.118198059843437 -color=purple,shape=circle,flag=0,i=77652,u=0.5654133645400323,v=0.5864252072985249,w=0.5189541424921014,x=4.441782794376311 -color=yellow,shape=square,flag=1,i=77653,u=0.7545532758263411,v=0.3809261963117392,w=0.5003507386396013,x=4.860571830101594 -color=purple,shape=square,flag=0,i=77682,u=0.15362166225812446,v=0.953304120678275,w=0.468433510834353,x=2.029232283175198 -color=purple,shape=square,flag=0,i=77683,u=0.5948768035457942,v=0.7875120569217479,w=0.4730640436383393,x=3.628939653649251 -color=yellow,shape=square,flag=1,i=77686,u=0.9643190178476154,v=0.9895091024459554,w=0.49608726683679294,x=5.989422198987494 -color=yellow,shape=square,flag=1,i=77687,u=0.5283933507512453,v=0.9357567666401563,w=0.4932828831862534,x=4.256644629940401 -color=red,shape=square,flag=0,i=77707,u=0.42832799289107804,v=0.6911480641381447,w=0.4727426709468536,x=4.867022461021341 -color=red,shape=triangle,flag=1,i=77713,u=0.06005610379110382,v=0.9290427781433881,w=0.508106383899453,x=3.923142028906728 -color=yellow,shape=circle,flag=1,i=77715,u=0.5824507944605519,v=0.33036925359945146,w=0.5207630881651547,x=4.506288025168842 -color=blue,shape=triangle,flag=1,i=77717,u=0.8169194900881884,v=0.6562802772541768,w=0.4909568306631267,x=3.6994105319054165 -color=yellow,shape=triangle,flag=1,i=77724,u=0.20626226201954412,v=0.10627033212268189,w=0.5201865113813897,x=6.576264450279848 -color=red,shape=circle,flag=1,i=77725,u=0.6329069317746927,v=0.5904613849683402,w=0.4622840002175637,x=5.317070896496403 -color=red,shape=square,flag=0,i=77733,u=0.8119042486209389,v=0.08674696906313295,w=0.4744983606299709,x=5.460845682331897 -color=red,shape=square,flag=0,i=77744,u=0.5169866320853493,v=0.9903358500297689,w=0.46666405521906595,x=5.063859609553524 -color=yellow,shape=square,flag=1,i=77751,u=0.7312031190861369,v=0.29551859041115225,w=0.4872724688038252,x=6.093214875935353 -color=red,shape=square,flag=1,i=77775,u=0.15908942773660728,v=0.3555485917665824,w=0.4749996833976505,x=6.241436735526784 -color=red,shape=square,flag=0,i=77778,u=0.632555727291959,v=0.7445617396779969,w=0.4762180709299892,x=3.9950859060840216 -color=red,shape=square,flag=0,i=77788,u=0.6692951498082319,v=0.33974444942480664,w=0.4742385589548459,x=3.5887931577232646 -color=orange,shape=square,flag=1,i=77793,u=0.11058735435983735,v=0.5961427322054564,w=0.5148986707983465,x=5.663541742240869 -color=blue,shape=circle,flag=1,i=77799,u=0.6582307214407296,v=0.9120939175274341,w=0.48178010815093913,x=7.025552654046845 -color=red,shape=circle,flag=1,i=77815,u=0.7214603496315611,v=0.7266824220555177,w=0.4718515455092195,x=4.426497271087648 -color=orange,shape=square,flag=1,i=77817,u=0.010721538735855907,v=0.006231260234710323,w=0.5133732359584059,x=3.634738606032416 -color=red,shape=triangle,flag=1,i=77818,u=0.6894477612063545,v=0.3466947464453557,w=0.5023635515762704,x=5.732609940743846 -color=yellow,shape=circle,flag=1,i=77820,u=0.1805495217652382,v=0.7356976980899061,w=0.5113463297982055,x=4.287067699934512 -color=green,shape=circle,flag=0,i=77822,u=0.8381807923274504,v=0.24799701284383524,w=0.4937220905991134,x=4.9168942702912295 -color=blue,shape=square,flag=0,i=77827,u=0.8377691267068565,v=0.16853365106050433,w=0.5096345672312499,x=5.92659233789247 -color=red,shape=circle,flag=0,i=77846,u=0.40161141025848024,v=0.3568366471118537,w=0.47702946462799095,x=6.7201255638955 -color=yellow,shape=square,flag=1,i=77848,u=0.08717387543489763,v=0.18903835663899238,w=0.5002446132706532,x=5.394152429229117 -color=blue,shape=square,flag=1,i=77858,u=0.7159764146658746,v=0.17361214699001926,w=0.5154234380129497,x=6.102118432767727 -color=red,shape=square,flag=0,i=77860,u=0.68609942993425,v=0.7935778898771765,w=0.47812940732287995,x=3.5889712576734603 -color=blue,shape=square,flag=0,i=77861,u=0.002114299434209821,v=0.39882240519050904,w=0.5191756265908456,x=4.824742410244574 -color=blue,shape=triangle,flag=0,i=77870,u=0.775360758763765,v=0.2783291526656304,w=0.48944612263499926,x=5.338678435610491 -color=red,shape=circle,flag=0,i=77872,u=0.8680476325600849,v=0.8167415390870927,w=0.472608720728658,x=3.328455099895193 -color=red,shape=square,flag=0,i=77875,u=0.5835400490623033,v=0.0312166650136545,w=0.4761746270310046,x=5.016665320337946 -color=yellow,shape=square,flag=1,i=77884,u=0.31879462180245877,v=0.7497260747609514,w=0.5004369925444385,x=2.3434768309767144 -color=yellow,shape=triangle,flag=1,i=77886,u=0.152957773366603,v=0.6122166796629332,w=0.5101679681372908,x=5.825939818868314 -color=green,shape=triangle,flag=1,i=77912,u=0.31303350334407654,v=0.42620281563653317,w=0.4831708192702349,x=4.6305260410503335 -color=red,shape=triangle,flag=0,i=77929,u=0.8156248518553473,v=0.8338480696227472,w=0.4960040063482286,x=3.8624072514656915 -color=yellow,shape=square,flag=1,i=77934,u=0.4267965736488637,v=0.7759427068971257,w=0.5049441010008491,x=3.8387119284945057 -color=yellow,shape=circle,flag=1,i=77954,u=0.6357057475847177,v=0.30246148703502485,w=0.5169708499405329,x=4.5702132329167915 -color=yellow,shape=circle,flag=1,i=77957,u=0.9348750604828651,v=0.864792119493025,w=0.5156532495188857,x=3.2672143629402606 -color=red,shape=square,flag=0,i=77960,u=0.793461757186159,v=0.5882045693931537,w=0.4752212538739568,x=3.626033253384827 -color=red,shape=triangle,flag=0,i=77963,u=0.6028216253895896,v=0.0008956982834695815,w=0.5064966176711667,x=4.717284871910093 -color=red,shape=square,flag=0,i=77968,u=0.8874850920712726,v=0.6257795451871339,w=0.47102547495804714,x=4.9502066220776 -color=red,shape=square,flag=0,i=77970,u=0.08802088099264205,v=0.7504791948832154,w=0.47005532441178166,x=6.302068634173157 -color=green,shape=triangle,flag=0,i=77983,u=0.5583560511282069,v=0.5194434953425001,w=0.4857027160000571,x=5.388647618137455 -color=red,shape=circle,flag=0,i=77995,u=0.8601538501589202,v=0.867692667916776,w=0.4617847774762544,x=5.997970042411047 -color=red,shape=square,flag=1,i=78001,u=0.9650874187152643,v=0.19725884833035134,w=0.47771668723042016,x=5.330336419986309 -color=red,shape=triangle,flag=0,i=78017,u=0.9448438101498315,v=0.9165771363591984,w=0.5200575691349669,x=6.387160423485304 -color=red,shape=square,flag=0,i=78020,u=0.902350650742806,v=0.5942270825728875,w=0.47940275222439077,x=2.506107516235967 -color=green,shape=triangle,flag=0,i=78027,u=0.39774192879339965,v=0.04396508243794717,w=0.4847775550914205,x=6.064109580345679 -color=green,shape=square,flag=0,i=78061,u=0.30331859546608275,v=0.9476643498124749,w=0.49946514667160014,x=3.581179436461072 -color=green,shape=triangle,flag=0,i=78063,u=0.7422084300066089,v=0.6197886024036005,w=0.4785118760711613,x=3.9198983089500623 -color=green,shape=square,flag=0,i=78068,u=0.455890556156204,v=0.594152071809712,w=0.500047875264678,x=5.580889617184944 -color=blue,shape=square,flag=1,i=78100,u=0.5748057642537174,v=0.6579858236199554,w=0.5250573555363868,x=6.346387149130874 -color=purple,shape=circle,flag=0,i=78107,u=0.6229735336939355,v=0.5081215772406867,w=0.5226386765471286,x=5.2918090841924394 -color=red,shape=square,flag=0,i=78122,u=0.4136255316258376,v=0.18924320591093313,w=0.4776272438166506,x=4.693634338428173 -color=purple,shape=circle,flag=0,i=78123,u=0.1781525896540036,v=0.455359511218705,w=0.5252335990346062,x=4.088265961874737 -color=blue,shape=circle,flag=1,i=78128,u=0.20655620779317196,v=0.18529062673063934,w=0.48938279798533735,x=3.9040042259508003 -color=blue,shape=triangle,flag=0,i=78140,u=0.8719402071240042,v=0.09624769525464993,w=0.4874478932545316,x=3.9723927812052584 -color=red,shape=square,flag=0,i=78144,u=0.33200414822064583,v=0.03849564448066456,w=0.473922058709498,x=4.483174645483503 -color=yellow,shape=square,flag=1,i=78149,u=0.33132053647279525,v=0.9636604208244348,w=0.49142093193025177,x=3.864359212067503 -color=red,shape=circle,flag=0,i=78154,u=0.880614881751517,v=0.826790628981774,w=0.4808911221776618,x=4.7919899475481875 -color=blue,shape=square,flag=1,i=78155,u=0.17517437142632575,v=0.9409823435375293,w=0.5340917285542284,x=5.310267403861228 -color=orange,shape=square,flag=0,i=78157,u=0.9551186469628827,v=0.8047168842805802,w=0.5200144869107375,x=4.397281337808794 -color=red,shape=triangle,flag=0,i=78164,u=0.44974511345509494,v=0.37202469748821687,w=0.5079764789790872,x=3.5351994712542982 -color=yellow,shape=square,flag=1,i=78166,u=0.8065854147386377,v=0.2586081844491136,w=0.49125795981591963,x=5.1673578771629955 -color=red,shape=square,flag=0,i=78171,u=0.6084936209239225,v=0.8123508534370562,w=0.46337837471641785,x=4.844607854033959 -color=orange,shape=square,flag=0,i=78173,u=0.9534734041941707,v=0.6813228979385701,w=0.5220430655265749,x=3.7388281088696473 -color=red,shape=triangle,flag=1,i=78190,u=0.469076822150737,v=0.9014958009225952,w=0.5094461425380735,x=6.385199362908412 -color=green,shape=square,flag=0,i=78196,u=0.6489584015758096,v=0.17430902865833275,w=0.5076612696198981,x=4.620246764582878 -color=green,shape=square,flag=0,i=78197,u=0.32913285689323646,v=0.6692022820261171,w=0.5039070564585555,x=4.521863568836199 -color=red,shape=triangle,flag=1,i=78214,u=0.02580275955219513,v=0.18264797646663433,w=0.5051595249796011,x=5.002558902923959 -color=red,shape=square,flag=1,i=78215,u=0.9703815570506079,v=0.8483012206318402,w=0.4622112607112254,x=4.6924594132754605 -color=blue,shape=square,flag=1,i=78239,u=0.6243951764080419,v=0.011851169660828664,w=0.5334909761035769,x=6.587862330883272 -color=yellow,shape=square,flag=1,i=78257,u=0.23893548367235995,v=0.5297986408287602,w=0.48617233410436944,x=2.636653095746359 -color=red,shape=triangle,flag=0,i=78266,u=0.38742970677841326,v=0.2549029681350147,w=0.5049438702835601,x=4.88431428392951 -color=red,shape=triangle,flag=0,i=78289,u=0.029356572941512837,v=0.14591883140580164,w=0.5083036708090861,x=3.5317344427344097 -color=red,shape=square,flag=0,i=78307,u=0.8035297876735588,v=0.6717776829023981,w=0.48037007764595596,x=4.143543403359177 -color=orange,shape=triangle,flag=0,i=78311,u=0.984001598799322,v=0.7250361897254229,w=0.49133482057985,x=6.014093637465911 -color=orange,shape=triangle,flag=0,i=78322,u=0.40153579492834746,v=0.7319097010431299,w=0.4825230255849636,x=3.9062320331599665 -color=blue,shape=triangle,flag=1,i=78330,u=0.5518413674592594,v=0.5930351919261024,w=0.48331968982811896,x=3.73463466862135 -color=green,shape=circle,flag=0,i=78364,u=0.030808083341177683,v=0.20251333031277108,w=0.4902278147110733,x=5.923016419884884 -color=yellow,shape=square,flag=1,i=78372,u=0.41255524734832605,v=0.8418945325639113,w=0.4920198699975043,x=5.348714662895561 -color=blue,shape=circle,flag=0,i=78375,u=0.518247872583379,v=0.47761844149072596,w=0.4872554212820434,x=4.793137115257515 -color=purple,shape=circle,flag=0,i=78405,u=0.7788163508509055,v=0.5376361669925529,w=0.5234782140474772,x=4.732569945626591 -color=yellow,shape=square,flag=1,i=78411,u=0.9882975696723743,v=0.17819609349016996,w=0.49687706833219186,x=3.589027943508762 -color=yellow,shape=square,flag=1,i=78425,u=0.5968597917433949,v=0.635016909815138,w=0.5012927561314738,x=3.836154775929804 -color=purple,shape=square,flag=0,i=78454,u=0.5237458884612408,v=0.8033059083760481,w=0.4711650609911605,x=4.587703418439682 -color=yellow,shape=circle,flag=1,i=78475,u=0.11830995316370829,v=0.7575277109788863,w=0.5352868669656894,x=5.946236618246123 -color=green,shape=circle,flag=0,i=78476,u=0.6320793422390463,v=0.9975984576955893,w=0.4858688394848248,x=4.19913711326596 -color=red,shape=circle,flag=0,i=78478,u=0.34707670638239585,v=0.4418709351761112,w=0.47257454302801893,x=3.849868045499098 -color=green,shape=circle,flag=1,i=78485,u=0.9907635833945612,v=0.789320027688391,w=0.48776867732277673,x=5.8390016307995785 -color=red,shape=triangle,flag=0,i=78488,u=0.8133526347154115,v=0.3564041438426686,w=0.5125114426998465,x=3.9911295023040307 -color=red,shape=triangle,flag=0,i=78492,u=0.2206240895931414,v=0.4111724798224238,w=0.5098029648429543,x=4.714522761935395 -color=red,shape=circle,flag=0,i=78494,u=0.4002350148435839,v=0.3131625894244392,w=0.47340601417718475,x=4.263144541276149 -color=blue,shape=triangle,flag=1,i=78506,u=0.8850341362471923,v=0.37261339174406405,w=0.48591115218918823,x=4.974425529999273 -color=yellow,shape=triangle,flag=1,i=78511,u=0.3090135607651209,v=0.319584244585589,w=0.5037872859100175,x=3.6659777896615613 -color=purple,shape=circle,flag=0,i=78518,u=0.02997378362120917,v=0.2849862631715253,w=0.5210476640477564,x=6.078375426069524 -color=red,shape=triangle,flag=0,i=78519,u=0.36535188450024225,v=0.6497654795848965,w=0.5118617642203704,x=5.583918267247114 -color=green,shape=circle,flag=0,i=78543,u=0.3073270814401341,v=0.17546376191912805,w=0.48056072159350577,x=7.176281687856657 -color=yellow,shape=square,flag=1,i=78547,u=0.13282556754354702,v=0.9397981737932565,w=0.4853677203748385,x=4.704527629556687 -color=red,shape=square,flag=0,i=78574,u=0.7569730973714514,v=0.28387901410752936,w=0.4896860772487533,x=2.399632724285245 -color=purple,shape=square,flag=0,i=78587,u=0.7355184641902509,v=0.8667308844638129,w=0.48040716902888597,x=5.630089592509133 -color=purple,shape=circle,flag=0,i=78607,u=0.6395519936094233,v=0.1356787278742081,w=0.5199648818553185,x=7.668084970600297 -color=red,shape=square,flag=0,i=78612,u=0.47530034099251073,v=0.5027952553898097,w=0.481021281974662,x=5.576210983759033 -color=red,shape=triangle,flag=1,i=78614,u=0.4989748467062284,v=0.5669518955374244,w=0.5361012250619259,x=4.5704219095663525 -color=blue,shape=square,flag=1,i=78618,u=0.9748286383197624,v=0.49788586961809767,w=0.5127826880144537,x=5.0302576741161475 -color=red,shape=triangle,flag=0,i=78621,u=0.8281590339412406,v=0.33150732441922304,w=0.5302294387919646,x=3.807563159727275 -color=purple,shape=circle,flag=0,i=78636,u=0.45569968348308565,v=0.721551340416129,w=0.5114370843244953,x=5.273815430434352 -color=yellow,shape=circle,flag=1,i=78666,u=0.5186048502264816,v=0.7108834302471597,w=0.5379739558462163,x=4.682291852346103 -color=blue,shape=triangle,flag=0,i=78673,u=0.6794412492092253,v=0.04913814530242255,w=0.48676103108023333,x=6.044560312835642 -color=red,shape=square,flag=1,i=78675,u=0.4695366829497617,v=0.6515037752856159,w=0.48505664023964234,x=1.1132941036620763 -color=blue,shape=square,flag=0,i=78691,u=0.4931797922903194,v=0.5089204399306346,w=0.5133268038924338,x=6.087833963069808 -color=red,shape=circle,flag=0,i=78692,u=0.6767400847978318,v=0.6020890855531064,w=0.47248071373744044,x=6.8287916640813044 -color=purple,shape=square,flag=0,i=78718,u=0.8967685342713414,v=0.8709093934964588,w=0.48398481664548265,x=2.0978736704389136 -color=yellow,shape=triangle,flag=1,i=78728,u=0.15431974888539235,v=0.6290652046968342,w=0.49834984222823364,x=4.771077868403118 -color=blue,shape=square,flag=0,i=78729,u=0.011127578786497838,v=0.3804970445991629,w=0.5121523979759478,x=2.8930631384568133 -color=yellow,shape=triangle,flag=0,i=78732,u=0.8607044590768693,v=0.35579776123387674,w=0.502156275375239,x=5.021614890364703 -color=red,shape=triangle,flag=0,i=78743,u=0.006407233865938555,v=0.3805170919425195,w=0.5080342527620084,x=2.6188600831210653 -color=blue,shape=circle,flag=0,i=78755,u=0.8077579792612988,v=0.27358325538981876,w=0.4744143093917175,x=3.5054136432182434 -color=yellow,shape=square,flag=1,i=78766,u=0.059408461514058986,v=0.8154295145258834,w=0.4886042406379574,x=6.070185318503744 -color=orange,shape=triangle,flag=1,i=78776,u=0.7620238194322251,v=0.8886560286032301,w=0.4818367746429384,x=3.831342492780672 -color=purple,shape=circle,flag=0,i=78778,u=0.3591853262732747,v=0.42900409186154564,w=0.515109496418418,x=4.7391181805104425 -color=purple,shape=triangle,flag=0,i=78779,u=0.1487264446206331,v=0.6547189200253156,w=0.512635712721492,x=6.589435914769717 -color=yellow,shape=square,flag=1,i=78780,u=0.9124063702109222,v=0.7723557563057873,w=0.4866835002111276,x=5.55042027283877 -color=purple,shape=circle,flag=0,i=78809,u=0.6054028830430566,v=0.17509150076499358,w=0.5136396295754986,x=5.988679150218251 -color=red,shape=square,flag=0,i=78824,u=0.7975694132287922,v=0.36067760105922897,w=0.5062509124675325,x=5.574468513407841 -color=red,shape=triangle,flag=0,i=78827,u=0.09224952297092448,v=0.2729071335254831,w=0.5156253872284782,x=3.2897089404732522 -color=blue,shape=square,flag=1,i=78844,u=0.16659716319004625,v=0.7748445504157822,w=0.5142652785660647,x=6.66097206271499 -color=green,shape=triangle,flag=0,i=78849,u=0.4435473664731624,v=0.41347152717235636,w=0.48223904442941073,x=4.006726741119238 -color=purple,shape=circle,flag=0,i=78850,u=0.943553550286837,v=0.10544929080493914,w=0.5190718420719124,x=6.0451921114602944 -color=yellow,shape=square,flag=1,i=78860,u=0.0585832513649065,v=0.6474958047240276,w=0.49220072738490284,x=4.568219073738864 -color=yellow,shape=square,flag=1,i=78864,u=0.5099682078558174,v=0.7001189979289515,w=0.4957162434212332,x=5.365185853750901 -color=purple,shape=triangle,flag=0,i=78871,u=0.9333415825480972,v=0.9700311705333038,w=0.5103879915262132,x=6.07730214846839 -color=purple,shape=square,flag=0,i=78881,u=0.6170354361847651,v=0.45342414469779957,w=0.4811556900653034,x=5.116399204100104 -color=green,shape=circle,flag=0,i=78885,u=0.42942817004051803,v=0.6028826289495663,w=0.49199068923681555,x=4.224041498560072 -color=blue,shape=triangle,flag=0,i=78888,u=0.8134201319114985,v=0.8213739103688027,w=0.4828251444520929,x=6.339805363413824 -color=blue,shape=square,flag=1,i=78904,u=0.48117018883394225,v=0.1853716874275697,w=0.5071294386414359,x=3.8935840387677785 -color=yellow,shape=triangle,flag=1,i=78911,u=0.5252787192402597,v=0.3203486748855435,w=0.5087749233644241,x=5.601303590159087 -color=red,shape=triangle,flag=0,i=78916,u=0.8967439828977617,v=0.6222625716112746,w=0.5193843377667596,x=5.871054898606155 -color=orange,shape=circle,flag=0,i=78924,u=0.6545453967991703,v=0.2867944566035391,w=0.4743715180305014,x=5.352136458694123 -color=yellow,shape=triangle,flag=0,i=78926,u=0.8958867934253948,v=0.10746979653290634,w=0.5046171347183478,x=6.052478922172219 -color=blue,shape=square,flag=1,i=78928,u=0.7086999416718613,v=0.1285870562315632,w=0.5057580997218196,x=3.8274562014905933 -color=blue,shape=circle,flag=1,i=78934,u=0.6740778042345809,v=0.19996267031658865,w=0.46636276853581987,x=6.014731640556275 -color=blue,shape=triangle,flag=0,i=78935,u=0.15035382200358538,v=0.4096368944186668,w=0.4834475946120639,x=2.7484092712834176 -color=blue,shape=triangle,flag=1,i=78937,u=0.9384197362965879,v=0.2946936045173627,w=0.4835553873322687,x=6.480964392023829 -color=red,shape=circle,flag=0,i=78954,u=0.6174878699286632,v=0.6983784143207769,w=0.4993917513080853,x=4.068449784886343 -color=yellow,shape=triangle,flag=1,i=78971,u=0.7828844802795552,v=0.6456594443219873,w=0.5046676416687235,x=5.769783442243234 -color=blue,shape=square,flag=1,i=78974,u=0.26119742104092325,v=0.23775889051050825,w=0.5142127056452043,x=6.325423443506 -color=yellow,shape=square,flag=1,i=78977,u=0.27745763826887204,v=0.5258880293681799,w=0.5012656771704572,x=4.623099240411954 -color=red,shape=square,flag=0,i=78987,u=0.4890945668630936,v=0.8462112891876167,w=0.5059371357777522,x=4.738106673225415 -color=blue,shape=circle,flag=1,i=78988,u=0.7392551502685211,v=0.2884451315196527,w=0.4696460499819925,x=4.157670926261769 -color=purple,shape=circle,flag=0,i=78989,u=0.5239269467434411,v=0.12194627567096217,w=0.5186145964223063,x=2.860527323988938 -color=purple,shape=square,flag=1,i=78991,u=0.7245239497949775,v=0.9900719301718675,w=0.49951408699053557,x=5.071267402261118 -color=purple,shape=triangle,flag=0,i=79002,u=0.16266169671633302,v=0.8929664290886613,w=0.5127198203118545,x=5.22989298990311 -color=red,shape=triangle,flag=1,i=79006,u=0.5358183473401142,v=0.7980309789542206,w=0.5111166549169541,x=5.086362784504239 -color=red,shape=triangle,flag=1,i=79009,u=0.5560476744525559,v=0.020714619871965545,w=0.5099561431182376,x=3.7931117798082767 -color=red,shape=square,flag=0,i=79017,u=0.4258790047671537,v=0.6520098494886234,w=0.4984074273349598,x=4.505869704612273 -color=red,shape=square,flag=0,i=79022,u=0.7424390908363775,v=0.5984268063149127,w=0.5010650034056413,x=4.89925152173891 -color=green,shape=square,flag=0,i=79023,u=0.4610479147534501,v=0.943900513077834,w=0.5030645986196268,x=4.755916605811492 -color=yellow,shape=square,flag=1,i=79047,u=0.17375789907264516,v=0.6520212237260526,w=0.4943061627310351,x=4.51650982224826 -color=red,shape=square,flag=0,i=79071,u=0.6156755920110408,v=0.8875180722680661,w=0.48793252872533105,x=5.58771609194477 -color=yellow,shape=square,flag=1,i=79081,u=0.5877485327198827,v=0.6662970180636223,w=0.49253991018112214,x=7.171552773839032 -color=yellow,shape=circle,flag=0,i=79096,u=0.03148183941160598,v=0.6082202098818508,w=0.5311468948151284,x=6.3539378438110345 -color=green,shape=square,flag=0,i=79101,u=0.9730598969081158,v=0.2475685374260561,w=0.4964283442857959,x=3.164485787625679 -color=blue,shape=triangle,flag=0,i=79122,u=0.8071404691242077,v=0.2744377649312486,w=0.48611397696260467,x=6.146215988906477 -color=yellow,shape=circle,flag=1,i=79131,u=0.38576815006939125,v=0.26317615945804984,w=0.5256497972917057,x=6.21976242364832 -color=blue,shape=square,flag=1,i=79156,u=0.7889153676149613,v=0.38024626195661315,w=0.49453841493333456,x=5.160063711659489 -color=blue,shape=circle,flag=1,i=79166,u=0.3956980557805423,v=0.30467683831929016,w=0.47720041000468705,x=3.295349566013487 -color=green,shape=circle,flag=0,i=79170,u=0.7447373508800587,v=0.2479806371057497,w=0.4959471189926129,x=6.3149741158844845 -color=red,shape=square,flag=0,i=79191,u=0.7272981520260766,v=0.9146553500494844,w=0.4789888614054285,x=3.280849483936364 -color=red,shape=triangle,flag=0,i=79199,u=0.058347954591589146,v=0.33543986840004614,w=0.5095995229136923,x=3.6941500494377544 -color=red,shape=circle,flag=1,i=79201,u=0.39660402982233844,v=0.4376837839769812,w=0.5018749698934021,x=4.2386855611061085 -color=blue,shape=triangle,flag=1,i=79203,u=0.4214364163268637,v=0.32370795542344566,w=0.4870665506510103,x=7.8471832711619145 -color=red,shape=triangle,flag=0,i=79229,u=0.3224087408609303,v=0.9322104070718528,w=0.5142666321007043,x=5.2066085793174635 -color=purple,shape=triangle,flag=0,i=79240,u=0.5278051157923712,v=0.4801124541920866,w=0.5260585122427309,x=3.949301724816762 -color=red,shape=triangle,flag=0,i=79241,u=0.6823237191056968,v=0.6237557048298875,w=0.5089074668844323,x=6.988118207680359 -color=red,shape=square,flag=0,i=79261,u=0.23604184263762729,v=0.7065381003913147,w=0.4843472565321945,x=3.10221460495729 -color=yellow,shape=square,flag=1,i=79285,u=0.5754178025720357,v=0.25692588609685396,w=0.4865771364699389,x=4.818831415267984 -color=red,shape=circle,flag=1,i=79288,u=0.7923924944720981,v=0.8153849543138612,w=0.5097698278905594,x=4.320376694529966 -color=red,shape=square,flag=1,i=79293,u=0.08276877045706355,v=0.8300083834421527,w=0.47864426023029505,x=4.011645661459549 -color=blue,shape=triangle,flag=1,i=79310,u=0.302302269103624,v=0.12749257150961324,w=0.4894941107169753,x=3.2084134917991043 -color=red,shape=square,flag=0,i=79311,u=0.09619032284802886,v=0.5034145674410632,w=0.4663228710752538,x=6.1631969831902 -color=yellow,shape=triangle,flag=1,i=79312,u=0.2033885527538184,v=0.18932579661468651,w=0.4969740105828321,x=7.5198734677343 -color=blue,shape=triangle,flag=1,i=79313,u=0.9846547748836074,v=0.4169770959345305,w=0.4935500529621402,x=6.67534437770552 -color=yellow,shape=square,flag=1,i=79316,u=0.9021696568169558,v=0.39939774692887364,w=0.4862560527322492,x=5.125095237594603 -color=red,shape=square,flag=0,i=79317,u=0.4143546387275874,v=0.1900846094333244,w=0.4681448453579504,x=7.3047454107224405 -color=red,shape=triangle,flag=0,i=79319,u=0.6176221455637819,v=0.7568725792652309,w=0.5105802264984762,x=5.051303585630667 -color=blue,shape=square,flag=1,i=79325,u=0.8899735076542671,v=0.31767407575956963,w=0.5000652207751421,x=4.886804862237104 -color=red,shape=square,flag=0,i=79335,u=0.622005311603634,v=0.8600197259002501,w=0.46434698368213034,x=4.945882803655408 -color=red,shape=square,flag=1,i=79346,u=0.6788617665004296,v=0.23752400227706738,w=0.4618530345276877,x=7.562080945878709 -color=yellow,shape=square,flag=1,i=79355,u=0.003843266145860502,v=0.11031077277988544,w=0.4780646050115228,x=5.537787491226869 -color=blue,shape=circle,flag=1,i=79356,u=0.18536216857603882,v=0.766683800229544,w=0.47894262484882694,x=4.845417400769171 -color=red,shape=triangle,flag=0,i=79389,u=0.08390279424627389,v=0.42128820339301964,w=0.5301501586156777,x=5.955357810985476 -color=purple,shape=triangle,flag=0,i=79391,u=0.4114177867065415,v=0.6208023328132486,w=0.5292858463152981,x=4.907496282964897 -color=red,shape=square,flag=0,i=79395,u=0.3399895409812538,v=0.5835278917409553,w=0.4604881603059351,x=3.470841473463859 -color=blue,shape=square,flag=1,i=79397,u=0.5976538062013957,v=0.018446772908260467,w=0.5047032856867655,x=5.647345848907235 -color=red,shape=square,flag=0,i=79409,u=0.3393818117339277,v=0.029519295484499053,w=0.4597172202042671,x=4.016968861789205 -color=red,shape=triangle,flag=0,i=79419,u=0.45797621996903226,v=0.9716933472003787,w=0.5301435759685531,x=4.757786619819228 -color=green,shape=square,flag=0,i=79430,u=0.17479008715482935,v=0.37270908756264987,w=0.49645323741937925,x=4.940492146668691 -color=blue,shape=square,flag=1,i=79437,u=0.7850470706131807,v=0.4109944246121302,w=0.5005269616825161,x=4.987884724347951 -color=purple,shape=square,flag=0,i=79462,u=0.605194065511209,v=0.7107823860739754,w=0.5120682313044231,x=6.0802605860822245 -color=red,shape=circle,flag=0,i=79481,u=0.9288091142870283,v=0.855206444390143,w=0.5111567326661041,x=6.695596290347343 -color=red,shape=circle,flag=0,i=79498,u=0.558019909019613,v=0.4593248665826407,w=0.5199755823371071,x=7.919128399765235 -color=yellow,shape=triangle,flag=1,i=79508,u=0.6436766603182998,v=0.44465339319781105,w=0.5046666572164952,x=3.8879478747231393 -color=green,shape=triangle,flag=1,i=79509,u=0.09731595843961205,v=0.6461191795308754,w=0.47098447685180966,x=6.899896991680443 -color=yellow,shape=square,flag=0,i=79519,u=0.5176399386787562,v=0.44453628697996483,w=0.47033778575495144,x=3.7420359667387206 -color=red,shape=triangle,flag=0,i=79525,u=0.5936884074604519,v=0.7078740650967525,w=0.5260029570220314,x=5.1026549528846665 -color=green,shape=square,flag=0,i=79541,u=0.2882516102599727,v=0.2777661423178951,w=0.49783135593555417,x=4.024689781740826 -color=green,shape=circle,flag=0,i=79547,u=0.3438974955989943,v=0.0813639105363434,w=0.5030798588971864,x=8.150963821504002 -color=red,shape=square,flag=0,i=79553,u=0.20883250533979125,v=0.8362310032413758,w=0.46354353838381235,x=4.903372469209553 -color=red,shape=square,flag=1,i=79556,u=0.8497185651541359,v=0.2718889152936008,w=0.4643907226308197,x=6.83054693652392 -color=red,shape=circle,flag=1,i=79572,u=0.9605717848579287,v=1.0112713173932795,w=0.5176800276706987,x=4.838156817294856 -color=red,shape=triangle,flag=0,i=79576,u=0.3278641394468932,v=0.40171121510569163,w=0.5252098744191269,x=5.226328014597578 -color=purple,shape=circle,flag=0,i=79586,u=0.3376814788001681,v=0.042577799296216634,w=0.5210180415497392,x=4.277102481445268 -color=purple,shape=square,flag=0,i=79587,u=0.05076109484633573,v=0.3185921079309624,w=0.5179047094595288,x=4.534790004968021 -color=purple,shape=square,flag=0,i=79598,u=0.02461768720734958,v=0.4497138793212936,w=0.5167117828111896,x=5.4924049294601645 -color=yellow,shape=circle,flag=1,i=79604,u=0.3333607940710924,v=0.7969360620675239,w=0.5252844159593557,x=5.642652918933352 -color=red,shape=triangle,flag=1,i=79634,u=0.7944811169957301,v=0.8726220975852376,w=0.5058710548383101,x=5.663673584390932 -color=green,shape=triangle,flag=1,i=79646,u=0.08381170034644447,v=0.8605287123539986,w=0.4906448508763901,x=3.6425119498491356 -color=red,shape=triangle,flag=0,i=79647,u=0.7849593560917905,v=0.0025612740347946694,w=0.5059731235562696,x=2.522111924576022 -color=red,shape=square,flag=1,i=79655,u=0.3348404262303303,v=0.9846610188547051,w=0.48442710235037906,x=3.9092426564514215 -color=yellow,shape=square,flag=1,i=79657,u=0.6428593308131003,v=0.6608182035006832,w=0.46542380962791785,x=3.7132619009894317 -color=yellow,shape=square,flag=0,i=79659,u=0.13102872237599117,v=0.7510757252421997,w=0.4667098016885225,x=7.415144742635231 -color=red,shape=square,flag=0,i=79660,u=0.3660120644975239,v=0.1869192482321721,w=0.485978626583954,x=6.1516685326283165 -color=green,shape=triangle,flag=1,i=79675,u=0.4482510459302451,v=0.7921301599545691,w=0.48793861625658314,x=4.258579582022921 -color=red,shape=square,flag=0,i=79679,u=0.2564327054997859,v=0.9365773527927684,w=0.4810803033607526,x=6.579012966050112 -color=red,shape=square,flag=0,i=79685,u=0.503601749388099,v=0.7857858924833435,w=0.4845884461100247,x=6.313669872269866 -color=blue,shape=square,flag=0,i=79705,u=0.05235505097958093,v=0.6435790814493085,w=0.4968956465602559,x=4.006439315816361 -color=red,shape=triangle,flag=0,i=79718,u=0.7872173489030302,v=0.9307698624445959,w=0.5167758988963995,x=3.704579256038856 -color=blue,shape=triangle,flag=1,i=79722,u=0.08682653813852848,v=0.2389586792017674,w=0.4931419882010198,x=6.537997081938009 -color=green,shape=square,flag=1,i=79724,u=0.19599689663002906,v=0.4400931201352687,w=0.5020444891530043,x=4.838334686559436 -color=green,shape=triangle,flag=0,i=79729,u=0.3134960451266987,v=0.1878719518108959,w=0.4944935903784199,x=4.816401760550203 -color=yellow,shape=circle,flag=1,i=79738,u=0.3139003060867519,v=0.1387885682212998,w=0.5148213060322916,x=3.234764624781852 -color=red,shape=square,flag=0,i=79749,u=0.37244882772007937,v=0.08682910359838336,w=0.47317683383021586,x=3.7312406550641373 -color=blue,shape=circle,flag=1,i=79752,u=0.3949899989515271,v=0.09995812583168595,w=0.4772644403277299,x=5.22642124774037 -color=yellow,shape=triangle,flag=1,i=79768,u=0.7918096020436663,v=0.24259367893593964,w=0.5059467526969904,x=4.4097596767099025 -color=blue,shape=triangle,flag=1,i=79784,u=0.6603864282836619,v=0.9655492680898329,w=0.4899519471535957,x=5.219247395428643 -color=red,shape=square,flag=0,i=79789,u=0.5940618421079977,v=0.5806676927481258,w=0.47313672290536224,x=4.603666849260115 -color=yellow,shape=triangle,flag=1,i=79796,u=0.5489362122788316,v=0.4268281301587079,w=0.5050779889182377,x=6.695147685507092 -color=red,shape=circle,flag=0,i=79802,u=0.3408090469398939,v=0.42535933528799263,w=0.4966867801941816,x=6.131910465507478 -color=red,shape=triangle,flag=0,i=79803,u=0.9640371264465135,v=0.07417952975699449,w=0.526207315586203,x=4.566374130132015 -color=red,shape=square,flag=0,i=79806,u=0.18950581000889566,v=0.2859698290975977,w=0.4680671506126159,x=3.8647882289363 -color=yellow,shape=square,flag=1,i=79814,u=0.3101931471891194,v=0.1525418538953085,w=0.4875072321298923,x=3.253653655747412 -color=red,shape=square,flag=0,i=79824,u=0.6587722857084605,v=0.8502483939877142,w=0.47356538928965186,x=7.200369579970798 -color=purple,shape=circle,flag=1,i=79832,u=0.548120017531071,v=0.3552888905096304,w=0.5271553600172266,x=4.090689821696762 -color=red,shape=triangle,flag=0,i=79842,u=0.3035354615610383,v=0.8710768842992129,w=0.5187216336697482,x=5.062091260847933 -color=green,shape=square,flag=0,i=79847,u=0.019403500141540797,v=0.08209044789639452,w=0.4977700255104592,x=4.388952754305449 -color=red,shape=triangle,flag=0,i=79854,u=0.6709647670273164,v=0.1110796622708431,w=0.5193251716421644,x=2.6797163666732238 -color=red,shape=square,flag=0,i=79857,u=0.7971252951768416,v=0.15274520733521524,w=0.4724608631771495,x=3.176350219281487 -color=red,shape=triangle,flag=1,i=79864,u=0.6996650236053583,v=0.4283218588579887,w=0.5157373423741389,x=5.442183846123078 -color=purple,shape=square,flag=0,i=79870,u=0.2481769254548858,v=0.501606412821526,w=0.5028209702218303,x=2.9478008833323006 -color=red,shape=circle,flag=0,i=79885,u=0.4120263946444137,v=0.49017316806310735,w=0.49754170394049424,x=4.688310355860282 -color=blue,shape=circle,flag=0,i=79902,u=0.8629658597673444,v=0.2836167875349973,w=0.4926494587805149,x=4.634395691493609 -color=red,shape=triangle,flag=0,i=79907,u=0.4588335351549798,v=0.27462418982501613,w=0.5263845567095322,x=5.3428757567820275 -color=purple,shape=circle,flag=0,i=79909,u=0.499713165566278,v=0.3038215879482996,w=0.5313272949087348,x=4.470148893074704 -color=red,shape=square,flag=0,i=79911,u=0.056007970832857135,v=0.6970083932352116,w=0.45091074161851635,x=2.589813910793146 -color=red,shape=circle,flag=1,i=79913,u=0.8850562556128662,v=0.9763341628808809,w=0.49651821281400343,x=5.172694988602751 -color=purple,shape=square,flag=0,i=79916,u=0.8994177515185625,v=0.5629709261388051,w=0.5051989045818918,x=5.523453822296372 -color=green,shape=triangle,flag=0,i=79917,u=0.20592177853330706,v=0.407330595444347,w=0.49566689044128037,x=5.389858787896965 -color=red,shape=square,flag=0,i=79920,u=0.4298275780314793,v=0.9899741753423438,w=0.4419098130277203,x=6.021336486536975 -color=red,shape=square,flag=0,i=79926,u=0.22273303459411498,v=0.13536584170301613,w=0.4499575084470442,x=5.43218185696798 -color=orange,shape=triangle,flag=0,i=79931,u=0.38034793624600294,v=0.4913476969577343,w=0.4875678068557107,x=4.328280298916137 -color=red,shape=square,flag=1,i=79939,u=0.6583434730152657,v=0.9782445647506394,w=0.45056785610667854,x=3.9622808255847572 -color=green,shape=triangle,flag=0,i=79943,u=0.21590085363811606,v=0.3448709809670565,w=0.49000202868366477,x=3.920988522632161 -color=blue,shape=square,flag=1,i=79952,u=0.9315314855448646,v=0.9126090907248396,w=0.49356467446101127,x=4.565988537553371 -color=red,shape=circle,flag=0,i=79960,u=0.42464460881481514,v=0.3396173000728427,w=0.49930712361417556,x=5.503567077503534 -color=blue,shape=square,flag=1,i=79962,u=0.4301285151334293,v=0.9242135620568264,w=0.4956198435331367,x=3.994002151418744 -color=yellow,shape=square,flag=1,i=79965,u=0.22622019411622307,v=0.0033001304901467687,w=0.49396072210544356,x=6.007721868583303 -color=red,shape=triangle,flag=0,i=79973,u=0.36136224989693144,v=0.6981465309778118,w=0.5243270587516823,x=6.016940675183331 -color=red,shape=triangle,flag=0,i=79997,u=0.1576494444367771,v=0.06222734327504997,w=0.5202057116676856,x=7.517636298288419 -color=yellow,shape=square,flag=0,i=79998,u=0.4667791334724365,v=0.66972046140167,w=0.4894459598299596,x=6.315702677088665 -color=red,shape=circle,flag=1,i=80010,u=0.7868279361217875,v=0.7959717975274792,w=0.4894647683126907,x=4.2743690418930775 -color=blue,shape=triangle,flag=0,i=80020,u=0.9783921471346148,v=0.21683880583104198,w=0.47122758885543675,x=4.368489032947065 -color=red,shape=triangle,flag=1,i=80030,u=0.8989500616599656,v=0.43774548519105005,w=0.5259436488412276,x=7.513032080229963 -color=red,shape=triangle,flag=1,i=80031,u=0.9068187506928986,v=0.21898802740186774,w=0.5299595399291744,x=3.27141672734799 -color=red,shape=circle,flag=0,i=80039,u=0.6718574199272026,v=0.6288496878061334,w=0.49254746165738167,x=3.0577187612044407 -color=blue,shape=square,flag=1,i=80044,u=0.3274495434420571,v=0.6108724811302428,w=0.4994472565193502,x=3.388444244746052 -color=red,shape=circle,flag=0,i=80048,u=0.8316208112929605,v=0.8418396635431125,w=0.49240943413007104,x=3.7039159684118066 -color=green,shape=circle,flag=0,i=80057,u=0.26572090937736903,v=0.33287297303128516,w=0.4818400975353708,x=4.5338084407834485 -color=green,shape=triangle,flag=0,i=80060,u=0.8932777757462668,v=0.43088475886050126,w=0.4924592053530206,x=5.165388023924138 -color=purple,shape=triangle,flag=0,i=80063,u=0.7915510275950732,v=0.21744044632969017,w=0.5178078438536686,x=4.6965274122983365 -color=purple,shape=square,flag=0,i=80074,u=0.37745605750823497,v=0.8729948628513216,w=0.5010841384609732,x=5.049496052528739 -color=red,shape=triangle,flag=0,i=80089,u=0.886972552465994,v=0.9223375130080247,w=0.5175826912656052,x=5.63439157169535 -color=red,shape=triangle,flag=0,i=80090,u=0.44979469055098475,v=0.22390458870419683,w=0.5209310244874763,x=5.752325012950348 -color=purple,shape=triangle,flag=0,i=80095,u=0.30757471660098856,v=0.8766076841655448,w=0.5240116281148052,x=6.319367451714549 -color=green,shape=square,flag=0,i=80104,u=0.5503343124819645,v=0.5021220030348597,w=0.4943678871873938,x=4.776408569474099 -color=red,shape=square,flag=1,i=80132,u=0.8057464595148707,v=0.32703480324111667,w=0.4799108473346855,x=4.6207898690026825 -color=green,shape=circle,flag=1,i=80151,u=0.31204011555646627,v=0.9694829436539054,w=0.48626047590682303,x=5.220829654645416 -color=green,shape=square,flag=1,i=80157,u=0.2483243851579442,v=0.01651699407656204,w=0.49444045492375654,x=4.880587789735788 -color=blue,shape=square,flag=0,i=80163,u=0.38998365593161477,v=0.6052995452458801,w=0.4913874615939241,x=3.1660192186716807 -color=red,shape=triangle,flag=0,i=80186,u=0.24042834558616866,v=0.6120650342363653,w=0.49260734602938205,x=3.193384454484519 -color=yellow,shape=triangle,flag=1,i=80188,u=0.022848118481146873,v=0.4632874207073766,w=0.4964950169440125,x=5.601571379617769 -color=red,shape=circle,flag=0,i=80195,u=0.7694660952205691,v=0.713629559094739,w=0.48789347690001594,x=5.040152534821419 -color=yellow,shape=triangle,flag=1,i=80224,u=0.8711192484765315,v=0.4924438431341892,w=0.5025745010194284,x=3.7684192583013214 -color=red,shape=circle,flag=0,i=80232,u=0.7909891627314936,v=0.6967399709781779,w=0.48795335882350876,x=2.129944856995 -color=purple,shape=circle,flag=0,i=80236,u=0.7250023187759362,v=0.4719935479721763,w=0.5156937019190284,x=3.2839184707766975 -color=orange,shape=triangle,flag=1,i=80248,u=0.690990824052148,v=0.6523015134991966,w=0.48912678574092905,x=6.058105458863224 -color=orange,shape=square,flag=1,i=80253,u=0.6615272419000529,v=0.09143617495971179,w=0.5091738235027199,x=3.979554693223335 -color=red,shape=triangle,flag=0,i=80282,u=0.3761928060408076,v=0.2739392032581741,w=0.482668851289034,x=6.165974375258287 -color=purple,shape=square,flag=0,i=80299,u=0.3416842440819282,v=0.9550556495942709,w=0.4996458047835978,x=4.348183474630548 -color=green,shape=triangle,flag=0,i=80335,u=0.6006870409480494,v=0.005656146396773809,w=0.501414387418723,x=4.143834807239776 -color=red,shape=triangle,flag=0,i=80361,u=0.6212867536081688,v=0.8346035922210256,w=0.48130044503609465,x=3.554730751346824 -color=yellow,shape=circle,flag=1,i=80368,u=0.4506187362814901,v=0.9574905567495345,w=0.522705273579471,x=5.295362701749678 -color=green,shape=circle,flag=0,i=80369,u=0.44907494005796145,v=0.6326957323133965,w=0.4898913514670375,x=4.665061005323544 -color=yellow,shape=square,flag=0,i=80372,u=0.2928109790365885,v=0.4741500033357211,w=0.47034667996595264,x=5.909410894277826 -color=red,shape=square,flag=0,i=80376,u=0.21917524756134998,v=0.2994065258861244,w=0.4814303423692874,x=4.793838162146657 -color=blue,shape=square,flag=1,i=80379,u=0.11976300680737628,v=0.8390272412678051,w=0.49343597536419836,x=6.917578217608042 -color=red,shape=square,flag=0,i=80391,u=0.9699115737738526,v=0.8214738093360542,w=0.4878503850985437,x=3.5864444538586135 -color=red,shape=square,flag=0,i=80392,u=0.18835009762098598,v=0.4595575122650062,w=0.4890766865306696,x=5.396313657396367 -color=blue,shape=triangle,flag=1,i=80415,u=0.003821253427345628,v=0.3457366428739148,w=0.4868916123767053,x=6.733474814312726 -color=red,shape=square,flag=0,i=80416,u=0.7276519608703166,v=0.2804003014919929,w=0.47980196450454765,x=2.9975750720157097 -color=red,shape=circle,flag=1,i=80419,u=0.5931971965534922,v=0.596169410899892,w=0.503255438061614,x=4.93076717815815 -color=red,shape=circle,flag=0,i=80421,u=0.7143443397446484,v=0.8109939252650021,w=0.499975909788949,x=3.297748148109701 -color=yellow,shape=circle,flag=1,i=80422,u=0.07476741533304199,v=0.5150419734511656,w=0.5156345723078775,x=3.6863057565111355 -color=red,shape=triangle,flag=0,i=80423,u=0.15223312461894956,v=0.6885067716576594,w=0.48268591118049525,x=5.852628138931508 -color=red,shape=circle,flag=1,i=80428,u=0.870763185999346,v=0.847930369727079,w=0.4965320536393585,x=4.7052358193175 -color=blue,shape=square,flag=1,i=80442,u=0.15422360854574735,v=0.8215012254178151,w=0.48641673564503524,x=4.118061232137882 -color=purple,shape=square,flag=0,i=80461,u=0.6060907653129965,v=0.8912975875554006,w=0.4927284992336668,x=4.624253628719714 -color=purple,shape=circle,flag=0,i=80475,u=0.17365147913024592,v=0.6162643012858035,w=0.5213604483108598,x=6.856389963271934 -color=green,shape=square,flag=0,i=80479,u=0.14761502249105485,v=0.02076685288738145,w=0.48300193177878625,x=4.002196520332066 -color=red,shape=circle,flag=0,i=80483,u=0.3630537582837837,v=0.4442539362783049,w=0.5015674013509037,x=5.241719893804957 -color=red,shape=square,flag=0,i=80486,u=0.5296312717280713,v=0.687352915743534,w=0.5004677822300945,x=4.710699075037799 -color=red,shape=circle,flag=1,i=80487,u=0.5380076191014402,v=0.556704339362353,w=0.5059564481336482,x=4.868603531538355 -color=red,shape=triangle,flag=1,i=80539,u=0.9600753999833448,v=0.8781008059492228,w=0.4798566146445525,x=5.443788305242998 -color=blue,shape=square,flag=0,i=80541,u=0.4366913412646968,v=0.44062231562140364,w=0.5079708564146506,x=5.899330192660174 -color=blue,shape=circle,flag=1,i=80543,u=0.5726470627314059,v=0.48516993577967726,w=0.5146473174155888,x=6.518649730178282 -color=yellow,shape=triangle,flag=1,i=80552,u=0.5250765506134357,v=0.45260818585592133,w=0.5057693949523865,x=6.465116306039182 -color=purple,shape=triangle,flag=0,i=80570,u=0.2913975034291644,v=0.6240564483648665,w=0.5200190639546951,x=4.734298252985626 -color=blue,shape=circle,flag=1,i=80577,u=0.38257658465133737,v=0.22342161067094857,w=0.5134986105201723,x=5.299673503176932 -color=green,shape=square,flag=0,i=80585,u=0.5845870841769435,v=0.16989910138000985,w=0.4842137639232346,x=6.533938932788195 -color=red,shape=triangle,flag=1,i=80590,u=0.01211709305625508,v=0.6542842955383379,w=0.46683756906199836,x=6.694435487614079 -color=red,shape=square,flag=0,i=80592,u=0.22100124014115852,v=0.8752589509570184,w=0.48380311383457325,x=2.8064383834836266 -color=yellow,shape=square,flag=1,i=80599,u=0.20702757674793437,v=0.4556432121341488,w=0.475970376670478,x=6.099558421283923 -color=red,shape=triangle,flag=1,i=80612,u=0.8493398658355825,v=0.7549886112265968,w=0.46706240377552416,x=5.122260995854644 -color=yellow,shape=triangle,flag=1,i=80620,u=0.3628940097962684,v=0.5370714944020242,w=0.5025279239959358,x=6.606825693748306 -color=green,shape=square,flag=0,i=80626,u=0.9780048126964492,v=0.141895498946788,w=0.48570359582727674,x=6.268722854758162 -color=blue,shape=triangle,flag=0,i=80637,u=0.9291997875710609,v=0.7347377367941812,w=0.5033993272428519,x=4.152676077598887 -color=red,shape=triangle,flag=0,i=80646,u=0.8795236343853282,v=0.989995020207047,w=0.46705123377769253,x=4.9250368129016735 -color=red,shape=circle,flag=0,i=80649,u=0.3337430288480052,v=0.3935519602756101,w=0.5119701378758255,x=4.573256871979468 -color=yellow,shape=triangle,flag=1,i=80651,u=0.9474523792919719,v=0.2341362231602162,w=0.49857903039142704,x=5.489545325585954 -color=red,shape=square,flag=1,i=80659,u=0.09899205030204361,v=0.44634819776935863,w=0.4795918144654544,x=3.472980762354491 -color=purple,shape=circle,flag=0,i=80676,u=0.9505735706366919,v=0.8140593727204981,w=0.5192695320870152,x=5.984019524223947 -color=red,shape=circle,flag=0,i=80678,u=0.36295149702465124,v=0.40646382607705583,w=0.5059112323444674,x=6.269492223112832 -color=red,shape=circle,flag=0,i=80680,u=0.49460239713735754,v=0.5858473027520993,w=0.5103140183313618,x=5.969527336505943 -color=purple,shape=triangle,flag=0,i=80690,u=0.7813183541235384,v=0.6997154610346155,w=0.509569021204282,x=4.222041428961673 -color=green,shape=square,flag=0,i=80703,u=0.7822540503348718,v=0.08013996555041669,w=0.49241047522758513,x=2.7597989252805486 -color=green,shape=triangle,flag=1,i=80707,u=0.06260924555516012,v=0.7101003570056101,w=0.5131727957160952,x=5.0293390816826795 -color=green,shape=triangle,flag=0,i=80713,u=0.03807871259249562,v=0.8976223083051812,w=0.5112083554477538,x=3.497888419816359 -color=red,shape=triangle,flag=0,i=80732,u=0.785938553457258,v=0.16229784429792316,w=0.47259997127022535,x=3.324415447538995 -color=yellow,shape=square,flag=0,i=80735,u=0.40881668370453206,v=0.7524785987059216,w=0.46533051220525096,x=3.328199759452083 -color=yellow,shape=circle,flag=1,i=80740,u=0.5221258127500068,v=0.8125094586675005,w=0.5277675875460986,x=4.74253682823263 -color=green,shape=triangle,flag=0,i=80749,u=0.5703422839342319,v=0.5454564484497564,w=0.5112587904530268,x=6.2911196875690285 -color=red,shape=triangle,flag=0,i=80757,u=0.5317900235255633,v=0.5453638928280089,w=0.46787756269773456,x=2.933557903412217 -color=yellow,shape=triangle,flag=1,i=80772,u=0.7950413330161353,v=0.04276419461600012,w=0.49056177043283267,x=5.903159849736873 -color=red,shape=circle,flag=1,i=80794,u=0.6330247151181408,v=0.5332857027215929,w=0.5040563967389192,x=3.7534610955933503 -color=red,shape=circle,flag=0,i=80802,u=0.21713525023295177,v=0.24068187508806013,w=0.49825346149351213,x=5.014860495232035 -color=green,shape=circle,flag=0,i=80814,u=0.4574061763010573,v=0.9417799573750492,w=0.489674911091246,x=6.95460940681949 -color=red,shape=circle,flag=1,i=80815,u=0.8453610587594265,v=0.7471583858532046,w=0.49535881803605625,x=4.08414183849149 -color=purple,shape=circle,flag=0,i=80818,u=0.5115798925578537,v=0.36638325781829906,w=0.5265729123510134,x=4.990522307245661 -color=blue,shape=triangle,flag=1,i=80824,u=0.603429424713317,v=0.21992051153814896,w=0.5100652075855192,x=3.620198797468316 -color=red,shape=circle,flag=0,i=80825,u=0.7117420277337698,v=0.7375692252591715,w=0.4889105336210068,x=4.582913678497223 -color=yellow,shape=square,flag=1,i=80836,u=0.43465836968032945,v=0.2944947078665102,w=0.46697650141474073,x=6.658973805782234 -color=red,shape=square,flag=0,i=80839,u=0.8371620369493814,v=0.6771433708990082,w=0.5059990622054875,x=3.106148250800141 -color=red,shape=triangle,flag=1,i=80852,u=0.35449890659767846,v=0.07336712962788716,w=0.46903218929105817,x=4.192224035496229 -color=red,shape=triangle,flag=0,i=80853,u=0.16136751777606406,v=0.48175571562672914,w=0.46477231651483153,x=5.131614889172382 -color=purple,shape=circle,flag=0,i=80854,u=0.3839059058165204,v=0.7114527036095148,w=0.5286248827284201,x=4.614031159897478 -color=red,shape=triangle,flag=1,i=80856,u=0.30106948192181104,v=0.38283761752744194,w=0.46423951546746817,x=3.9816470731351203 -color=blue,shape=circle,flag=1,i=80864,u=0.43424017075552024,v=0.7386606286551116,w=0.5256578678163965,x=4.360331312846383 -color=purple,shape=triangle,flag=0,i=80875,u=0.4438546857091278,v=0.3983761756243145,w=0.5070794649556897,x=5.190230177446805 -color=green,shape=square,flag=0,i=80877,u=0.1007375489625546,v=0.03141297060586479,w=0.4835687499927464,x=5.71881455330282 -color=red,shape=triangle,flag=1,i=80889,u=0.318117456406819,v=0.8121194379610589,w=0.46832533745164906,x=4.897841618104257 -color=green,shape=triangle,flag=1,i=80898,u=0.7331574867859811,v=0.007731669484874915,w=0.5081942839412676,x=3.964469330379886 -color=orange,shape=square,flag=0,i=80904,u=0.9261109525714024,v=0.16902139574077724,w=0.519976661970576,x=4.609320571081436 -color=yellow,shape=triangle,flag=1,i=80905,u=0.3510397345773142,v=0.06629861469260812,w=0.49387945441415654,x=6.089738612436837 -color=red,shape=triangle,flag=0,i=80921,u=0.7295708066033625,v=0.6210928004006522,w=0.48063645401742666,x=5.047097096313824 -color=green,shape=triangle,flag=0,i=80933,u=0.8685663483162033,v=0.7341494559127941,w=0.5048333947154192,x=6.081161567166447 -color=purple,shape=circle,flag=0,i=80945,u=0.07296484848003104,v=0.6583384983125776,w=0.5171712867995383,x=4.175973363809756 -color=blue,shape=circle,flag=0,i=80947,u=0.21335121388388822,v=0.0306064859968328,w=0.5236855132652346,x=4.760485925362123 -color=green,shape=triangle,flag=0,i=80960,u=0.9781079124168008,v=0.7691822319895872,w=0.5070264988340502,x=3.3553852374472974 -color=blue,shape=triangle,flag=1,i=80968,u=0.4682411828614066,v=0.8698965430522557,w=0.5062972996688164,x=4.535436595565735 -color=green,shape=triangle,flag=0,i=80969,u=0.9305510412124427,v=0.805055390123565,w=0.511787932663312,x=5.3595341969361625 -color=blue,shape=triangle,flag=1,i=80997,u=0.5354871615741676,v=0.6741058023591125,w=0.5052100419645796,x=5.716551834053451 -color=red,shape=triangle,flag=1,i=80998,u=0.25439394796168535,v=0.445601055359785,w=0.4830174871083399,x=6.881969601049451 -color=green,shape=square,flag=1,i=81011,u=0.16931285750707004,v=0.3932111283293588,w=0.48246980376488385,x=4.540884687311148 -color=blue,shape=circle,flag=0,i=81031,u=0.48029339354185263,v=0.44990213404584367,w=0.5279659590533214,x=4.580907529525736 -color=orange,shape=square,flag=1,i=81032,u=0.6733733597680485,v=0.11932676365927153,w=0.5212104567295263,x=4.778217035739361 -color=red,shape=triangle,flag=0,i=81043,u=0.9826723310764041,v=0.7597238558443249,w=0.48173988485257707,x=3.9232671611948136 -color=purple,shape=square,flag=0,i=81046,u=0.7691069167479181,v=0.032625541005836256,w=0.4862093878948887,x=6.304459636731554 -color=blue,shape=circle,flag=1,i=81047,u=0.7511134566561493,v=0.849374323078136,w=0.5272258279560779,x=5.500474857166767 -color=red,shape=triangle,flag=1,i=81050,u=0.9311215590875397,v=0.23976521113695926,w=0.476699887510756,x=2.7719362249268538 -color=yellow,shape=square,flag=1,i=81060,u=0.9453487737189021,v=0.8534094187280329,w=0.4737613849671166,x=6.253098182151933 -color=orange,shape=triangle,flag=0,i=81075,u=0.18455162894565746,v=0.8900612513224546,w=0.4802491971007073,x=6.460176596997393 -color=red,shape=triangle,flag=0,i=81094,u=0.04880754225430084,v=0.8933576967724739,w=0.4878637072164853,x=6.133531821368554 -color=yellow,shape=triangle,flag=1,i=81106,u=0.7344102721075413,v=0.4426238198478445,w=0.4942209732306668,x=3.0337258831598306 -color=blue,shape=square,flag=0,i=81107,u=0.503762184381541,v=0.739686967268895,w=0.4945565834284612,x=6.831250561965329 -color=blue,shape=square,flag=1,i=81110,u=0.9699949015565439,v=0.012275531396004569,w=0.4975542402582834,x=3.0954450837583702 -color=red,shape=triangle,flag=0,i=81117,u=0.22075802373600872,v=0.43177808102968285,w=0.4920843807244184,x=3.3257267267795467 -color=red,shape=circle,flag=0,i=81130,u=0.6889398213680793,v=0.6970537518456349,w=0.4963974017373721,x=4.911286103649867 -color=purple,shape=square,flag=0,i=81157,u=0.9640184490993524,v=0.16215921660800925,w=0.4818539250098085,x=4.487679740771076 -color=red,shape=square,flag=0,i=81160,u=0.4215482560635301,v=0.595620451511917,w=0.5200426592817691,x=4.946783272019761 -color=red,shape=square,flag=0,i=81176,u=0.3282311760023535,v=0.1887749655018911,w=0.5192574597681919,x=4.987244211463204 -color=purple,shape=triangle,flag=0,i=81199,u=0.7983660199431438,v=0.08097005074748809,w=0.5073715774247403,x=2.5949038482568954 -color=purple,shape=square,flag=0,i=81208,u=0.1525077300705856,v=0.6559322775785215,w=0.4840115807432963,x=4.863790663371244 -color=green,shape=square,flag=1,i=81213,u=0.9704203860986943,v=0.38149034726511344,w=0.4845375767505428,x=4.050148078245072 -color=yellow,shape=square,flag=1,i=81217,u=0.2789887446731357,v=0.8993149491642233,w=0.4903002741463905,x=3.566559931788932 -color=yellow,shape=circle,flag=1,i=81230,u=0.4371608508573076,v=0.8425572359734482,w=0.5388144093850497,x=4.718924920114666 -color=yellow,shape=square,flag=1,i=81283,u=0.6765654484340974,v=0.4072997798037028,w=0.4992190864581606,x=3.720460443206887 -color=blue,shape=square,flag=0,i=81295,u=0.7468634502298326,v=0.45874270106489135,w=0.4986880302610183,x=6.492520018164465 -color=green,shape=triangle,flag=0,i=81313,u=0.28373655325255565,v=0.1756479577949659,w=0.5158588310027669,x=4.205533272838828 -color=red,shape=square,flag=0,i=81317,u=0.5734455761672053,v=0.3951462921681146,w=0.5068549371021885,x=4.4474381043866105 -color=blue,shape=triangle,flag=0,i=81328,u=0.5947997793104784,v=0.22877115751397348,w=0.49365699194985563,x=5.178076625308762 -color=red,shape=triangle,flag=0,i=81333,u=0.5080757197799637,v=0.9593078266744622,w=0.5063717725934735,x=4.919330236232047 -color=red,shape=circle,flag=0,i=81342,u=0.32922398844282796,v=0.42465918247230633,w=0.49580639616775063,x=5.785344684127675 -color=red,shape=triangle,flag=0,i=81357,u=0.3989645338918619,v=0.07068375177736086,w=0.5014017028858937,x=4.833864274612641 -color=red,shape=square,flag=0,i=81358,u=0.31216236772743844,v=0.5362913765535935,w=0.4976717195823757,x=5.569486386010156 -color=yellow,shape=circle,flag=1,i=81388,u=0.6997189562713367,v=0.01571941399993837,w=0.5266868789549263,x=5.411158184044324 -color=red,shape=triangle,flag=0,i=81394,u=0.17970011316136447,v=0.723950847402832,w=0.48781900887291796,x=5.955795221618423 -color=red,shape=circle,flag=1,i=81397,u=0.48264763070207206,v=0.5029292318117448,w=0.49433451884229757,x=4.83575345381074 -color=blue,shape=square,flag=0,i=81399,u=0.011889263693010022,v=0.41880540970805713,w=0.5075269936798311,x=5.784389369817901 -color=blue,shape=triangle,flag=0,i=81400,u=0.17392580476712072,v=0.9206399419944473,w=0.4920361413777392,x=4.471542765820451 -color=red,shape=triangle,flag=0,i=81401,u=0.47619512177381973,v=0.9351158079079561,w=0.4833701216798004,x=2.196355270074184 -color=red,shape=triangle,flag=0,i=81417,u=0.502926094608134,v=0.5243801829291423,w=0.48326953616896057,x=6.08322449581254 -color=red,shape=triangle,flag=0,i=81426,u=0.7663733947426048,v=0.91336590956359,w=0.4862324264646229,x=5.045292597110608 -color=red,shape=square,flag=0,i=81496,u=0.246033088739135,v=0.5899145062026309,w=0.5181120767160675,x=1.9595663181925307 -color=red,shape=square,flag=0,i=81500,u=0.582017958862124,v=0.04300196180732763,w=0.5175534675332268,x=7.197056489084802 -color=blue,shape=triangle,flag=1,i=81503,u=0.7641177175953137,v=0.09071569377362021,w=0.4900951368217516,x=4.1980964255254 -color=red,shape=square,flag=0,i=81507,u=0.1809065361834491,v=0.27499266249565435,w=0.5116891473905982,x=3.978241871622719 -color=red,shape=triangle,flag=0,i=81510,u=0.47339962437298544,v=0.3901375718647604,w=0.5025023287674841,x=5.118451744127785 -color=blue,shape=square,flag=1,i=81517,u=0.6825558927235732,v=0.06985223394546658,w=0.504645209945903,x=4.527684222491165 -color=red,shape=square,flag=0,i=81556,u=0.9430581407698928,v=0.7993631368300492,w=0.5218151116199066,x=3.6950777816762947 -color=red,shape=circle,flag=0,i=81567,u=0.04240981604118543,v=0.0763887721046691,w=0.49278547628798963,x=4.569112234104232 -color=red,shape=circle,flag=1,i=81578,u=0.7512666250546094,v=0.7711025843096267,w=0.4924420245784761,x=6.456537045120279 -color=red,shape=square,flag=0,i=81584,u=0.3342498426902266,v=0.6414676805488785,w=0.5135249968058191,x=5.872494934413659 -color=red,shape=circle,flag=1,i=81592,u=0.6179929017424887,v=0.6340469718979167,w=0.49158265208247226,x=3.446285313916354 -color=red,shape=circle,flag=0,i=81601,u=0.0843692809175206,v=0.12722422079605555,w=0.4971328331702479,x=5.212085571506336 -color=red,shape=triangle,flag=0,i=81602,u=0.5573947494515696,v=0.38975752208434433,w=0.5126238186651708,x=4.3114345365676074 -color=yellow,shape=triangle,flag=1,i=81615,u=0.9093571004282791,v=0.5792238831693498,w=0.5065612240067842,x=3.5392047193840526 -color=blue,shape=square,flag=0,i=81622,u=0.7203276924049226,v=0.3667046445663138,w=0.5024950787070839,x=6.770523383903327 -color=purple,shape=circle,flag=1,i=81635,u=0.2885798258082818,v=0.5234491704943466,w=0.4986284927430894,x=5.924520672568417 -color=red,shape=square,flag=0,i=81637,u=0.3992984243757146,v=0.9729579454719782,w=0.5159546272861733,x=4.437287495329566 -color=red,shape=circle,flag=0,i=81649,u=0.6438422794575033,v=0.6390754079028129,w=0.4988364843821413,x=4.840967245170557 -color=red,shape=triangle,flag=0,i=81651,u=0.20680787475652063,v=0.43736532839455355,w=0.5123230089230779,x=4.3214131099058966 -color=orange,shape=circle,flag=1,i=81670,u=0.08253999981609705,v=0.015013086252800734,w=0.47803139932336064,x=6.039640054015769 -color=green,shape=circle,flag=0,i=81672,u=0.24282204821726772,v=0.5760225898635326,w=0.49110661997716804,x=4.067140097950282 -color=red,shape=circle,flag=0,i=81679,u=0.4287948131329321,v=0.39157420285171596,w=0.4999610769875731,x=6.566369411159282 -color=red,shape=square,flag=1,i=81685,u=0.6406098415169508,v=0.2646569768013902,w=0.5227351470330938,x=7.143978111596226 -color=blue,shape=square,flag=0,i=81688,u=0.9393986457623662,v=0.1940300094536369,w=0.5153355130813149,x=4.804700133038835 -color=red,shape=circle,flag=0,i=81689,u=0.6170877030169017,v=0.6543489033805715,w=0.4950052915117413,x=4.791477871234577 -color=red,shape=square,flag=0,i=81691,u=0.374345610382843,v=0.011631740019972137,w=0.5201777618421457,x=7.07082573894231 -color=red,shape=circle,flag=1,i=81694,u=0.18280117437795373,v=0.09420576052710888,w=0.49043042705050727,x=5.393871728240573 -color=red,shape=circle,flag=0,i=81710,u=0.6858331568637801,v=0.7506297164980605,w=0.4929729300464558,x=6.569545491322146 -color=red,shape=triangle,flag=0,i=81724,u=0.5797428109128266,v=0.6068332310914224,w=0.506283965445832,x=4.6435765729202805 -color=red,shape=square,flag=0,i=81733,u=0.20765558352559554,v=0.8486359562121671,w=0.5168173575061112,x=3.660407027802499 -color=yellow,shape=triangle,flag=1,i=81746,u=0.5732825888528483,v=0.7349810907346581,w=0.5065444772804333,x=4.949855575428452 -color=red,shape=triangle,flag=0,i=81763,u=0.08358419311582332,v=0.6873249510167284,w=0.5129036464938158,x=4.264207740399289 -color=red,shape=square,flag=1,i=81764,u=0.5551108619014528,v=0.07395531571137448,w=0.5156180686530784,x=3.8443549814108553 -color=red,shape=triangle,flag=0,i=81793,u=0.49554086563547917,v=0.12309999661562765,w=0.5064709442306965,x=4.192379582131352 -color=yellow,shape=circle,flag=1,i=81825,u=0.0362940768718778,v=0.3962533724798095,w=0.5229298626779088,x=6.354657807738413 -color=red,shape=square,flag=0,i=81842,u=0.4706634671490242,v=0.9610960545204995,w=0.5214938003585593,x=4.713881772725928 -color=green,shape=triangle,flag=0,i=81865,u=0.4052862901580394,v=0.08372119470326678,w=0.5184352990046684,x=6.2760282518420185 -color=yellow,shape=square,flag=1,i=81869,u=0.4344578077628283,v=0.468695067925739,w=0.4976437962672821,x=4.748196718414499 -color=red,shape=square,flag=1,i=81876,u=0.5855201233125406,v=0.5391142768421466,w=0.525480886650077,x=6.8056053921918425 -color=red,shape=triangle,flag=1,i=81905,u=0.7052826337698797,v=0.22982219401729975,w=0.5099725921977243,x=6.9530028500423775 -color=purple,shape=square,flag=0,i=81906,u=0.5854520927461457,v=0.11770299413055596,w=0.491699793546107,x=4.9698192732541715 -color=red,shape=circle,flag=1,i=81907,u=0.37163847797251504,v=0.400829027269246,w=0.4962317770086797,x=6.4387239513669305 -color=yellow,shape=circle,flag=1,i=81908,u=0.8190797984458409,v=0.23833106733842013,w=0.5295948377364428,x=4.056902855412558 -color=red,shape=triangle,flag=0,i=81916,u=0.44469573301468945,v=0.37871469895814514,w=0.5092411510912408,x=5.147708122508301 -color=red,shape=square,flag=1,i=81919,u=0.2529252950148785,v=0.7073796022463315,w=0.5289771707367834,x=4.004098830614893 -color=blue,shape=circle,flag=0,i=81932,u=0.21938969030060307,v=0.928251409188362,w=0.5253520480994954,x=5.230595544239608 -color=red,shape=triangle,flag=0,i=81935,u=0.8162341560427582,v=0.9906220905132913,w=0.5207408951203899,x=6.5217958463839425 -color=red,shape=circle,flag=1,i=81945,u=0.892607462969383,v=0.8854819932923311,w=0.500242135793435,x=5.124708072040491 -color=red,shape=triangle,flag=0,i=81958,u=0.6085217312591791,v=0.7251958321237331,w=0.5204825002103738,x=6.273496526985627 -color=red,shape=triangle,flag=1,i=81975,u=0.942350369754318,v=0.9574679537705263,w=0.5270827537157838,x=5.557671721464943 -color=red,shape=triangle,flag=0,i=81986,u=0.9206106365392773,v=0.3101350370481294,w=0.5260496270079443,x=5.211736062548158 -color=red,shape=triangle,flag=1,i=82002,u=0.762944607447994,v=0.6822350804287131,w=0.5276045940814295,x=5.562549016450775 -color=yellow,shape=circle,flag=1,i=82018,u=0.2941692879250857,v=0.03367571271482628,w=0.5323502644372534,x=4.7266609152183685 -color=red,shape=square,flag=0,i=82021,u=0.4888604843882428,v=0.13420642199999677,w=0.53100892030084,x=8.20071612615397 -color=purple,shape=triangle,flag=0,i=82030,u=0.2532387782477389,v=0.6613800791765458,w=0.5130003522926362,x=4.13827034318382 -color=red,shape=triangle,flag=0,i=82037,u=0.8155834893387192,v=0.600747726377886,w=0.5243821093021257,x=5.267510724452422 -color=red,shape=square,flag=0,i=82038,u=0.526952198917595,v=0.3883619866691551,w=0.5239548996324123,x=4.403288957344245 -color=yellow,shape=triangle,flag=1,i=82089,u=0.8971913939212398,v=0.05343074617760546,w=0.49209975676351675,x=5.530133181969077 -color=blue,shape=square,flag=1,i=82097,u=0.544679624468908,v=0.7855291101302742,w=0.49930976036776337,x=4.67214337820684 -color=red,shape=square,flag=0,i=82119,u=0.6217318755332524,v=0.21018176009500322,w=0.5284072910671912,x=6.147988448529972 -color=orange,shape=circle,flag=0,i=82146,u=0.6638572463312785,v=0.6500668188429215,w=0.47678322845435045,x=4.072461053508557 -color=red,shape=square,flag=0,i=82149,u=0.33837204663982035,v=0.19197179643208517,w=0.524959855348316,x=4.925185675626268 -color=red,shape=triangle,flag=0,i=82151,u=0.8570899840546615,v=0.04971801516907148,w=0.512822016136913,x=6.652061445418897 -color=red,shape=square,flag=1,i=82159,u=0.7673434923667805,v=0.00037654356442629044,w=0.5236425156848175,x=5.163962278526361 -color=yellow,shape=square,flag=1,i=82165,u=0.34653657882562194,v=0.6366966851406346,w=0.504017020524526,x=4.7146198841123965 -color=red,shape=circle,flag=0,i=82186,u=0.546767776910464,v=0.45433043516472915,w=0.48859736669470427,x=4.507104913664541 -color=red,shape=square,flag=0,i=82190,u=0.008316979455405882,v=0.9026225296964588,w=0.5193988762007243,x=6.365731955881866 -color=red,shape=square,flag=0,i=82192,u=0.4659512785708738,v=0.9762037780131061,w=0.5167177043188586,x=5.090767697412583 -color=purple,shape=circle,flag=1,i=82196,u=0.5209108557055107,v=0.979313898441847,w=0.5078318509679425,x=6.310739948473898 -color=red,shape=triangle,flag=0,i=82213,u=0.9173715910230548,v=0.11661677647235802,w=0.5156311281151702,x=5.619900596208495 -color=red,shape=triangle,flag=1,i=82236,u=0.9545142566635887,v=0.7132570354705988,w=0.5166409364290429,x=3.7830449602244705 -color=blue,shape=triangle,flag=1,i=82259,u=0.33643667866979665,v=0.7222312015275271,w=0.4924811207747196,x=3.751718993504626 -color=blue,shape=triangle,flag=0,i=82266,u=0.4855831948475259,v=0.9416541527042219,w=0.49421118348299153,x=4.2604083091027025 -color=red,shape=square,flag=0,i=82268,u=0.7789843132831411,v=0.07723341037885179,w=0.5148967720656697,x=4.883961995706305 -color=purple,shape=square,flag=0,i=82286,u=0.23294640945080303,v=0.20941660258541228,w=0.4904160264338973,x=4.492335472766562 -color=purple,shape=triangle,flag=0,i=82287,u=0.0874416708178064,v=0.8608235934840683,w=0.5086228235469287,x=6.904058004901947 -color=red,shape=triangle,flag=0,i=82315,u=0.16861637661800255,v=0.3425188083960208,w=0.5167684242004628,x=3.2500482408887645 -color=red,shape=triangle,flag=1,i=82331,u=0.5442188179114065,v=0.7040962175423547,w=0.5166993190489322,x=4.9804760472696605 -color=red,shape=square,flag=0,i=82347,u=0.6338308539195121,v=0.3108694477844265,w=0.5062422909508266,x=4.073143585425137 -color=purple,shape=circle,flag=0,i=82349,u=0.7319347451086649,v=0.30788954817190783,w=0.507397221546586,x=4.479781538469108 -color=blue,shape=triangle,flag=0,i=82360,u=0.8458567069898428,v=0.9112027663730352,w=0.4932980417220871,x=5.341155998830385 -color=blue,shape=circle,flag=0,i=82373,u=0.7226277574624174,v=0.7768685909029331,w=0.5398936550335363,x=6.983909056804033 -color=red,shape=circle,flag=0,i=82383,u=0.03421378357288907,v=0.047397902115352705,w=0.4752072100068521,x=4.464330295169857 -color=blue,shape=circle,flag=1,i=82388,u=0.048454150163879994,v=0.7217662666742595,w=0.5443876638676958,x=5.126694888849488 -color=purple,shape=circle,flag=0,i=82400,u=0.44708643968685247,v=0.1814357932083771,w=0.513103201251819,x=6.372625790974066 -color=purple,shape=circle,flag=0,i=82403,u=0.7144845044389426,v=0.7813678023182257,w=0.5111258378878383,x=6.199025215732114 -color=yellow,shape=circle,flag=1,i=82431,u=0.8505627687870435,v=0.6982094236081248,w=0.5203169643839746,x=4.829779398627252 -color=red,shape=square,flag=0,i=82450,u=0.8504685039854782,v=0.052190358591393315,w=0.4902410595724105,x=3.5281760591869205 -color=yellow,shape=triangle,flag=0,i=82459,u=0.2808921739138933,v=0.8195922791573089,w=0.48899755962846475,x=3.889749071345894 -color=orange,shape=circle,flag=1,i=82475,u=0.6744306766532117,v=0.5522132513998601,w=0.4794634977776188,x=4.118434182022859 -color=red,shape=square,flag=0,i=82484,u=0.10824529982235909,v=0.8365071905115189,w=0.4777329838523633,x=4.704951595091578 -color=blue,shape=square,flag=0,i=82485,u=0.007070340657070795,v=0.8065032806733391,w=0.4907367854458501,x=5.17749184088046 -color=red,shape=circle,flag=1,i=82487,u=0.3188422078407027,v=0.29284170828514816,w=0.4812742281794559,x=6.985842741046636 -color=red,shape=square,flag=0,i=82489,u=0.9832543113563688,v=0.7671990130618139,w=0.4776401719501203,x=7.486513299459086 -color=blue,shape=triangle,flag=1,i=82495,u=0.6346736052959036,v=0.2747382767489376,w=0.5010716625572224,x=6.199864235840695 -color=red,shape=circle,flag=0,i=82499,u=0.3475022942148621,v=0.32761708689501046,w=0.47996439935936613,x=2.624558172779161 -color=red,shape=triangle,flag=0,i=82501,u=0.3219698367494802,v=0.7224432607726242,w=0.503497480955817,x=5.476625302023457 -color=green,shape=circle,flag=0,i=82502,u=0.33996989698495517,v=0.4224840119144194,w=0.49880075489530057,x=5.665653883382729 -color=red,shape=square,flag=1,i=82511,u=0.060011186502833325,v=0.3966134759004424,w=0.4798480692984614,x=5.213159696306523 -color=blue,shape=square,flag=1,i=82516,u=0.5657431765911797,v=0.6511695881996549,w=0.48706999168894954,x=3.7372147807759593 -color=blue,shape=circle,flag=1,i=82527,u=0.6249413978117138,v=0.23596450396984647,w=0.5395796611792876,x=6.196345575821962 -color=red,shape=circle,flag=0,i=82537,u=0.9101350700684699,v=0.9710791928275359,w=0.4797399447267551,x=3.53929078467614 -color=blue,shape=triangle,flag=1,i=82538,u=0.3292474475923741,v=0.25173632519152445,w=0.506807093196346,x=3.2909743356840693 -color=red,shape=triangle,flag=0,i=82540,u=0.4647489450337531,v=0.16404243944577412,w=0.5077628807075795,x=4.332450242736735 -color=red,shape=square,flag=0,i=82556,u=0.6615645537979847,v=0.12878907174984167,w=0.48853149559786474,x=4.65578723005813 -color=purple,shape=circle,flag=0,i=82568,u=0.23175045836804964,v=0.9691500402287213,w=0.5135755570127799,x=7.453538774375066 -color=red,shape=triangle,flag=0,i=82583,u=0.7267047915389362,v=0.977249460120103,w=0.49605507598916354,x=4.368002766493595 -color=purple,shape=square,flag=0,i=82596,u=0.523775033537616,v=0.5334317086213074,w=0.4895645833544572,x=4.655860125829382 -color=red,shape=triangle,flag=0,i=82599,u=0.8496987888273095,v=0.4246320475803621,w=0.49200327365168206,x=4.229097853905992 -color=red,shape=square,flag=0,i=82602,u=0.5398059090000749,v=0.13586944337249574,w=0.48385062819551933,x=5.997671347891504 -color=red,shape=triangle,flag=0,i=82619,u=0.261705929435199,v=0.23008166052237766,w=0.4964270566324088,x=6.176768120730368 -color=yellow,shape=square,flag=1,i=82626,u=0.7882518280260266,v=0.6719794319255251,w=0.4993886978493441,x=5.127601342482564 -color=red,shape=square,flag=0,i=82627,u=0.9055698731289945,v=0.7007932093620781,w=0.4852146273743674,x=4.516386680724516 -color=red,shape=triangle,flag=0,i=82630,u=0.955022379650656,v=0.03527091264062365,w=0.4928540831853299,x=4.479236639542448 -color=red,shape=square,flag=0,i=82631,u=0.4935263016589604,v=0.8590568423649695,w=0.49228500147246274,x=7.485064960997819 -color=yellow,shape=triangle,flag=1,i=82647,u=0.35196921796850955,v=0.27772075890541303,w=0.47205730357553066,x=3.870571261482733 -color=blue,shape=triangle,flag=1,i=82653,u=0.6571069496666412,v=0.4823514127618985,w=0.5188596535405834,x=6.158960058773757 -color=yellow,shape=square,flag=1,i=82685,u=0.7948337045418883,v=0.05084332874896913,w=0.5083391846457594,x=6.209108243280217 -color=blue,shape=triangle,flag=1,i=82717,u=0.27775391443861974,v=0.34206760285904136,w=0.5166286588514517,x=4.504508652344163 -color=red,shape=square,flag=0,i=82725,u=0.4832747660915765,v=0.337631290163507,w=0.5002363226947814,x=4.033507775381328 -color=red,shape=square,flag=1,i=82727,u=0.3406456989651434,v=0.2014998126824079,w=0.5042958375996044,x=6.466292513024502 -color=yellow,shape=circle,flag=1,i=82759,u=0.46021572333639893,v=0.884704669096846,w=0.5340660385807497,x=7.440102842860784 -color=red,shape=triangle,flag=0,i=82764,u=0.6674025925569613,v=0.15530746467479817,w=0.4765301048927643,x=4.551772488508328 -color=yellow,shape=square,flag=1,i=82783,u=0.3929210074560181,v=0.6147548679471491,w=0.5161098315561932,x=4.11886819040765 -color=purple,shape=triangle,flag=0,i=82794,u=0.019535331958087876,v=0.6991357141620065,w=0.49963979860895197,x=2.8996262031203823 -color=red,shape=triangle,flag=0,i=82800,u=0.6088982216874902,v=0.9784559732704764,w=0.4749560013042373,x=5.221133011472841 -color=green,shape=square,flag=0,i=82805,u=0.7615265000602532,v=0.7782477383542531,w=0.5324580018121762,x=5.519010472287544 -color=blue,shape=square,flag=1,i=82817,u=0.2587342615118756,v=0.951942151485277,w=0.470791036697166,x=4.944072536036763 -color=red,shape=triangle,flag=1,i=82826,u=0.9407511495938944,v=0.03050893732240545,w=0.4715127113505447,x=4.54063268723984 -color=blue,shape=triangle,flag=1,i=82836,u=0.8916457885505735,v=0.8395568828203379,w=0.5164919658990521,x=5.615096359022343 -color=green,shape=triangle,flag=0,i=82837,u=0.9732434010964439,v=0.13258286148850296,w=0.5186563022891615,x=5.322145802264406 -color=yellow,shape=circle,flag=1,i=82858,u=0.8943270776958472,v=0.15415856635871605,w=0.5338036582905477,x=8.895613215546922 -color=red,shape=square,flag=0,i=82860,u=0.1522785546595561,v=0.4076949916621755,w=0.5062867997115744,x=3.72759091153538 -color=yellow,shape=circle,flag=1,i=82866,u=0.3323961558364591,v=0.15073461294128987,w=0.5290453694522023,x=5.264995372745593 -color=yellow,shape=triangle,flag=1,i=82868,u=0.10715872273516158,v=0.5866169535763028,w=0.4826283761096491,x=4.169264618577826 -color=orange,shape=circle,flag=1,i=82871,u=0.3763549478929412,v=0.7505727822128362,w=0.48583050566254155,x=4.653394487480818 -color=red,shape=square,flag=1,i=82872,u=0.7030570127735172,v=0.12858702930391686,w=0.5075341318315327,x=6.334703842431654 -color=yellow,shape=triangle,flag=1,i=82878,u=0.3224569799869038,v=0.7935501733243558,w=0.49041629613951876,x=7.96242727900034 -color=yellow,shape=triangle,flag=1,i=82892,u=0.9796416789195468,v=0.5557143709162574,w=0.49023563488756977,x=4.390198848248415 -color=green,shape=triangle,flag=1,i=82909,u=0.6298784229837792,v=0.7521639720803523,w=0.5191358249030289,x=7.433811460606919 -color=orange,shape=triangle,flag=0,i=82926,u=0.428500167119526,v=0.36607866845295145,w=0.47081347144738445,x=4.481033048286446 -color=red,shape=square,flag=1,i=82929,u=0.28144443092516513,v=0.4472626824439989,w=0.5080662970436506,x=6.744925948024256 -color=red,shape=circle,flag=1,i=82944,u=0.1102804286675072,v=0.09234797502378038,w=0.480737483906285,x=6.1526126375492325 -color=red,shape=square,flag=0,i=82960,u=0.8956221368012316,v=0.3118665481409354,w=0.5084850820655602,x=4.995155059184679 -color=blue,shape=square,flag=1,i=82973,u=0.8380663221334929,v=0.5532882632162486,w=0.4854303199774404,x=5.901151272085234 -color=green,shape=square,flag=0,i=82986,u=0.926762603039401,v=0.7883352330499447,w=0.5351220122805623,x=3.6259157035866565 -color=red,shape=triangle,flag=0,i=82992,u=0.42865346928153225,v=0.018536231765446498,w=0.4636237754596017,x=4.296858047706796 -color=red,shape=triangle,flag=1,i=83008,u=0.34455620836566636,v=0.7508928532640805,w=0.4684564656600809,x=3.516141064947919 -color=purple,shape=triangle,flag=0,i=83016,u=0.8400245605967229,v=0.8365978274030381,w=0.49420198830081785,x=4.833873683961947 -color=red,shape=circle,flag=0,i=83018,u=0.02530312560074266,v=-0.020744347387753548,w=0.47267233327964453,x=6.380444688698895 -color=blue,shape=square,flag=1,i=83021,u=0.022980864754761132,v=0.1472520029150809,w=0.48260481240710823,x=4.608710090282286 -color=red,shape=triangle,flag=0,i=83027,u=0.2544090554838675,v=0.3915246991655562,w=0.4636566102279231,x=3.3439464090488413 -color=yellow,shape=triangle,flag=0,i=83042,u=0.721780167694505,v=0.7165798894392567,w=0.4896651613952397,x=5.195098582544258 -color=red,shape=triangle,flag=0,i=83058,u=0.6588398833636143,v=0.49372843789109044,w=0.4691619714090176,x=3.990637057658626 -color=yellow,shape=triangle,flag=1,i=83068,u=0.5630791159911716,v=0.27766051432685335,w=0.49449852155501156,x=3.9389413540314884 -color=red,shape=square,flag=0,i=83077,u=0.9705593796951105,v=0.6662762876494098,w=0.5096717055755128,x=5.334085589168752 -color=blue,shape=circle,flag=1,i=83087,u=0.9714025422387434,v=0.8642377163674381,w=0.5413355579680965,x=5.2024624972859455 -color=purple,shape=square,flag=0,i=83090,u=0.5226547821368325,v=0.7801297575816978,w=0.5008553672951415,x=6.027848591378281 -color=blue,shape=triangle,flag=1,i=83095,u=0.8332807000442715,v=0.7498494025256474,w=0.5132796810911399,x=5.8977613781313165 -color=red,shape=square,flag=1,i=83108,u=0.9862296300552067,v=0.5825351970438819,w=0.5033480758722415,x=5.428051039799477 -color=red,shape=triangle,flag=0,i=83115,u=0.4760572296600407,v=0.33170820717220306,w=0.4717397184789229,x=4.0631750113093945 -color=red,shape=triangle,flag=0,i=83116,u=0.990314309153224,v=0.07269972495938892,w=0.47416383470284945,x=4.106577102893966 -color=red,shape=circle,flag=0,i=83117,u=0.3661906625602602,v=0.4025536714299455,w=0.47364288879216815,x=4.5910129949000895 -color=blue,shape=square,flag=0,i=83118,u=0.49163801548879127,v=0.24330154714116303,w=0.4819515245455142,x=5.718476399136688 -color=red,shape=circle,flag=0,i=83122,u=0.6195004711843787,v=0.5727866189621638,w=0.47401378896208646,x=5.542319267634021 -color=red,shape=circle,flag=0,i=83149,u=0.8328788685536079,v=0.8641085074514573,w=0.46979413223846245,x=3.9706101547653767 -color=blue,shape=triangle,flag=0,i=83150,u=0.43713699201805456,v=0.2660525142526584,w=0.5126656935668523,x=3.246619511051145 -color=red,shape=triangle,flag=0,i=83166,u=0.5001685641935002,v=0.8698183381006106,w=0.4922326402370768,x=6.024953643905896 -color=purple,shape=triangle,flag=0,i=83167,u=0.8020011720459099,v=0.22756270790291333,w=0.5033954027225506,x=6.068019207862608 -color=blue,shape=triangle,flag=0,i=83212,u=0.006945114263260832,v=0.21170056978885798,w=0.5143509734188596,x=4.651095411918273 -color=red,shape=circle,flag=0,i=83213,u=0.42812775359923905,v=0.37703136082457084,w=0.46449024799404914,x=5.15670466708205 -color=red,shape=circle,flag=0,i=83217,u=0.3538487489824198,v=0.27518672100861263,w=0.4617118610651707,x=3.580507603681859 -color=red,shape=circle,flag=0,i=83222,u=0.9430470015669334,v=0.9487467603887084,w=0.45897929561174744,x=4.365152675185844 -color=green,shape=triangle,flag=0,i=83225,u=0.09619528634889285,v=0.057739380692552134,w=0.517122397340599,x=4.862942749772543 -color=red,shape=circle,flag=1,i=83247,u=0.7574474611973291,v=0.8186996574524749,w=0.44832254622782247,x=4.7591596511939205 -color=red,shape=square,flag=0,i=83258,u=0.6903995209230517,v=0.3143369559713949,w=0.48585522297270783,x=5.01810837305451 -color=green,shape=circle,flag=0,i=83266,u=0.7205578548894788,v=0.828048458508868,w=0.5012711321138965,x=4.049348703616304 -color=red,shape=square,flag=0,i=83287,u=0.6466422667540417,v=0.7334969056903076,w=0.4804811122167074,x=5.921120324045841 -color=red,shape=triangle,flag=0,i=83289,u=0.2030025641518599,v=0.5930684242120423,w=0.49141472582738843,x=3.9874069634019995 -color=yellow,shape=circle,flag=1,i=83298,u=0.35163840806684055,v=0.4033210378463076,w=0.5345431813618567,x=6.484809729397359 -color=red,shape=triangle,flag=0,i=83312,u=0.8909271689139356,v=0.9156076344481769,w=0.4892871797467797,x=5.936154387085878 -color=yellow,shape=circle,flag=1,i=83316,u=0.16400859146840308,v=0.5965219871671622,w=0.5335026812963714,x=3.9943511258275706 -color=blue,shape=square,flag=1,i=83317,u=0.0980590317872454,v=0.41023458750011066,w=0.47707448980878275,x=6.175828247841214 -color=orange,shape=square,flag=1,i=83318,u=0.05174991698657738,v=0.3328841163758609,w=0.5117641506357392,x=4.069100960802553 -color=purple,shape=triangle,flag=0,i=83326,u=0.05804430334154431,v=0.7713956565531557,w=0.49517047333737396,x=3.770492286942417 -color=red,shape=square,flag=0,i=83328,u=0.48179183318412167,v=0.3526213194215202,w=0.46248950728747634,x=4.838732082289352 -color=yellow,shape=circle,flag=1,i=83358,u=0.005612599675430596,v=0.8088273404826914,w=0.5366467393279692,x=4.43178494213615 -color=purple,shape=triangle,flag=0,i=83369,u=0.10367082337284161,v=0.5089532068397383,w=0.496226936926661,x=4.868745172566798 -color=red,shape=square,flag=0,i=83370,u=0.08591998921287558,v=0.5901508592354079,w=0.4512489122504173,x=4.91564141561331 -color=green,shape=square,flag=0,i=83375,u=0.12970926493292545,v=0.7482186387117108,w=0.5249988957291557,x=3.5014075062557324 -color=red,shape=square,flag=1,i=83380,u=0.40319979689704244,v=0.7636111045492379,w=0.45211006913473917,x=5.412159529692301 -color=red,shape=square,flag=0,i=83394,u=0.6383818321890626,v=0.34198783159892543,w=0.45641301029695575,x=3.6925029907519344 -color=purple,shape=square,flag=1,i=83397,u=0.7572343826950665,v=0.6309017032820423,w=0.5028100170032692,x=3.334733544512153 -color=red,shape=square,flag=0,i=83405,u=0.9113462113891848,v=0.5187228415960464,w=0.4560399174032374,x=3.122234019892994 -color=red,shape=triangle,flag=1,i=83417,u=0.7495570465674024,v=0.8300551158843191,w=0.49245783860352277,x=6.175286703786654 -color=blue,shape=triangle,flag=0,i=83421,u=0.419519799589274,v=0.7135029511659471,w=0.5086966262581886,x=2.8929187832748853 -color=red,shape=square,flag=0,i=83426,u=0.3205151839886584,v=0.5645212911306043,w=0.4603770783617119,x=2.0661427685480716 -color=purple,shape=triangle,flag=0,i=83431,u=0.5711017923040533,v=0.03865980639472766,w=0.4883347189303134,x=6.388751840905303 -color=red,shape=circle,flag=0,i=83440,u=0.5855849793524782,v=0.6119243040112797,w=0.4280044413263959,x=8.323760491444853 -color=red,shape=square,flag=0,i=83443,u=0.09306731483603303,v=0.05221619154508683,w=0.4580502735802006,x=2.9393596878019714 -color=red,shape=square,flag=0,i=83451,u=0.5080993505480947,v=0.6662217093579649,w=0.4579274856433957,x=2.9869439946581493 -color=red,shape=square,flag=1,i=83479,u=0.13627138255214732,v=0.48623242410050516,w=0.46423702487186497,x=6.623316593297788 -color=red,shape=square,flag=0,i=83485,u=0.4932497928658681,v=0.15231118656399234,w=0.4664903573917578,x=5.417917228983158 -color=red,shape=circle,flag=1,i=83507,u=0.34876404340306644,v=0.2703972493882617,w=0.42768403320036097,x=4.181572832249706 -color=purple,shape=circle,flag=0,i=83510,u=0.49490645264980193,v=0.24752119385976667,w=0.4897046476479821,x=3.392519206652731 -color=green,shape=triangle,flag=0,i=83512,u=0.15469913998663198,v=0.5275669232293471,w=0.5125965526021815,x=6.202048195261952 -color=red,shape=square,flag=0,i=83515,u=0.4776565220971556,v=0.8019318489407621,w=0.4747333738063338,x=5.318639755539156 -color=blue,shape=triangle,flag=1,i=83525,u=0.4243645471310227,v=0.37420782833898925,w=0.5136846948039873,x=4.926556373439734 -color=red,shape=triangle,flag=0,i=83528,u=0.7263364294020428,v=0.468342904133927,w=0.5042821572045862,x=5.434048253892715 -color=purple,shape=triangle,flag=1,i=83529,u=0.7260601135141455,v=0.9297385606947408,w=0.49353669051830046,x=4.882010401564516 -color=green,shape=circle,flag=0,i=83530,u=0.7804965521411584,v=0.8854589402560958,w=0.5042453119891259,x=4.4590244881267 -color=red,shape=circle,flag=1,i=83602,u=0.2256042182898581,v=0.24739727081194185,w=0.4315387829544891,x=2.32742869673782 -color=yellow,shape=circle,flag=1,i=83608,u=0.3584799144288826,v=0.173946869402819,w=0.5317370022627771,x=3.7434801260034463 -color=red,shape=circle,flag=0,i=83625,u=0.2486872223029497,v=0.3319274331187414,w=0.4250771454361501,x=4.909765695950619 -color=yellow,shape=triangle,flag=1,i=83634,u=0.4787606665741654,v=0.6617860112773567,w=0.47158200435444225,x=6.721233713172783 -color=purple,shape=square,flag=0,i=83655,u=0.6239062694658689,v=0.11065159041832395,w=0.510052521858901,x=8.029689766687161 -color=purple,shape=square,flag=0,i=83657,u=0.11293849922481936,v=0.008855787273896243,w=0.5089106996804605,x=5.2066763491198556 -color=yellow,shape=square,flag=1,i=83668,u=0.29222900592551015,v=0.1617721066226956,w=0.5125688323415893,x=5.257280559078665 -color=red,shape=circle,flag=0,i=83692,u=0.4785698702803115,v=0.5340052689518955,w=0.43785075136677304,x=5.319094297656166 -color=red,shape=square,flag=0,i=83693,u=0.644309699064817,v=0.5861256430759361,w=0.5160755245391613,x=2.4739604669907966 -color=purple,shape=triangle,flag=0,i=83695,u=0.32765619699116266,v=0.04717576449588323,w=0.49510694729807003,x=3.3660856169364872 -color=purple,shape=circle,flag=0,i=83700,u=0.34564049250131523,v=0.2100286091493202,w=0.4817621695949327,x=4.673931141789692 -color=purple,shape=triangle,flag=0,i=83706,u=0.26916047972550294,v=0.4806804615006416,w=0.4962450194770319,x=5.193831246245857 -color=red,shape=square,flag=1,i=83720,u=0.1341165155177233,v=0.6073081718250779,w=0.5175096422682183,x=6.831408929518912 -color=blue,shape=triangle,flag=0,i=83723,u=0.5887476483923134,v=0.5074989436889473,w=0.515205098683211,x=6.4700679314894245 -color=red,shape=circle,flag=0,i=83740,u=0.11918405593694148,v=0.08867615517788549,w=0.4394253247178085,x=5.950469582574622 -color=yellow,shape=triangle,flag=1,i=83744,u=0.559465311034973,v=0.5851322286825043,w=0.4752743880183645,x=6.092580944596932 -color=red,shape=circle,flag=0,i=83766,u=0.07245661514460844,v=0.028668585166640233,w=0.45062442800371105,x=4.221752994815294 -color=red,shape=square,flag=1,i=83777,u=0.09272629825783374,v=0.5907352761204864,w=0.5166121740248965,x=5.732664933000755 -color=blue,shape=square,flag=1,i=83780,u=0.5659067235626688,v=0.11794294903035007,w=0.4779849402704211,x=4.949091899397209 -color=blue,shape=square,flag=0,i=83791,u=0.37971553000369285,v=0.1152171664862347,w=0.48012958722493926,x=5.193986950124411 -color=blue,shape=circle,flag=0,i=83797,u=0.31274767760449274,v=0.27134123391623366,w=0.5243005052378935,x=6.402246284432516 -color=green,shape=square,flag=0,i=83802,u=0.6065480850298873,v=0.7253560192089153,w=0.5198369024479206,x=4.400359463051699 -color=blue,shape=triangle,flag=1,i=83810,u=0.17698236637235687,v=0.12033899861995145,w=0.5243035948387528,x=6.636269103850641 -color=green,shape=square,flag=0,i=83811,u=0.03992098826862389,v=0.6263984646969762,w=0.5226431193254288,x=4.880216140629437 -color=blue,shape=circle,flag=1,i=83814,u=0.48262252187422305,v=0.14844748834794808,w=0.5202308814447982,x=4.838675015261391 -color=red,shape=square,flag=0,i=83823,u=0.6407951567603292,v=0.1174570878397333,w=0.5243827686373389,x=4.461836317974531 -color=purple,shape=triangle,flag=1,i=83833,u=0.4112514620133395,v=0.4013960953774379,w=0.48959686815477893,x=4.719200306281575 -color=yellow,shape=square,flag=1,i=83834,u=0.8128890125577551,v=0.5303271844237689,w=0.5043163802327053,x=4.515719801764994 -color=red,shape=square,flag=0,i=83851,u=0.8459992691859014,v=0.5687235069114398,w=0.5179995879876328,x=5.810491948149306 -color=purple,shape=circle,flag=0,i=83866,u=0.788659054238965,v=0.2057394713923727,w=0.4800188075984709,x=6.611217667011823 -color=red,shape=triangle,flag=1,i=83868,u=0.34327808925073,v=0.4282106811267582,w=0.5073775830952365,x=5.025946486651326 -color=blue,shape=circle,flag=0,i=83869,u=0.7435925250692076,v=0.050394473270299334,w=0.5252954908253112,x=6.023473823699479 -color=red,shape=triangle,flag=1,i=83870,u=0.14759530436434143,v=0.30504333234305203,w=0.5098637272460711,x=5.501689760480581 -color=green,shape=triangle,flag=0,i=83874,u=0.7851794194652867,v=0.40356871876936984,w=0.49856121844967827,x=4.422402863649022 -color=red,shape=circle,flag=0,i=83877,u=0.5357206940841953,v=0.6159024616433673,w=0.4417066294586936,x=3.3008200348263563 -color=red,shape=square,flag=0,i=83885,u=0.497728482478768,v=0.6568766816078183,w=0.5156409137941457,x=6.7459219401214865 -color=yellow,shape=square,flag=0,i=83886,u=0.9831176109691093,v=0.12016879812103598,w=0.5063371582187389,x=4.002888361916657 -color=red,shape=circle,flag=0,i=83890,u=0.18078963931854763,v=0.17975551799418893,w=0.4414635374896249,x=6.133341531260502 -color=yellow,shape=square,flag=1,i=83897,u=0.0032107127687728276,v=0.6247875259079945,w=0.4994796987604175,x=3.8878280100714235 -color=yellow,shape=circle,flag=1,i=83898,u=0.7283687030103658,v=0.3503603938864758,w=0.5425727711866225,x=5.465893082835568 -color=purple,shape=circle,flag=0,i=83907,u=0.3182933578236352,v=0.13416345428779297,w=0.47941171551479606,x=3.9126176436354747 -color=blue,shape=square,flag=1,i=83913,u=0.9492379398120842,v=0.39366296929477573,w=0.47239174506269305,x=4.893587209093668 -color=blue,shape=square,flag=0,i=83931,u=0.4304997545174736,v=0.33396334081820134,w=0.4697097596494418,x=6.857989200005004 -color=yellow,shape=square,flag=1,i=83959,u=0.8468832442546941,v=0.8625749446461438,w=0.4982585193965951,x=3.3999100448088395 -color=red,shape=triangle,flag=1,i=83961,u=0.9900536015797581,v=0.13764424035406442,w=0.5150222548494368,x=3.7778205861620306 -color=red,shape=square,flag=0,i=83964,u=0.10649203939316398,v=0.9104669542208729,w=0.5128459717086693,x=4.763743330455749 -color=yellow,shape=triangle,flag=1,i=83972,u=0.5376717393736369,v=0.23656209596307531,w=0.4751502662070869,x=4.772911352493985 -color=red,shape=circle,flag=1,i=83974,u=0.5387485677513972,v=0.6180599523806768,w=0.4500877751260209,x=4.911772553659389 -color=blue,shape=square,flag=1,i=83982,u=0.3513514077826374,v=0.15208318703166146,w=0.45934192210156266,x=5.088986600009058 -color=red,shape=circle,flag=0,i=83997,u=0.08951075543053155,v=0.07362376046190192,w=0.4482243519895226,x=4.487627218025021 -color=red,shape=triangle,flag=1,i=83998,u=0.6824702806418353,v=0.7461089819377266,w=0.5065779501420412,x=4.372032553209347 -color=blue,shape=circle,flag=1,i=84004,u=0.775461605625285,v=0.9760998075460481,w=0.5319321347612134,x=6.185012881228327 -color=purple,shape=triangle,flag=0,i=84005,u=0.4450957908541562,v=0.7229964638814087,w=0.4963891458217236,x=5.555679568100611 -color=red,shape=square,flag=0,i=84007,u=0.32138973910976965,v=0.3212980963551523,w=0.5093263822517776,x=4.280641488700887 -color=blue,shape=circle,flag=1,i=84015,u=0.9388887458530584,v=0.8609702695830763,w=0.5323551392787857,x=6.279675473328702 -color=blue,shape=square,flag=0,i=84021,u=0.20733027416885952,v=0.6309677439872041,w=0.46835732829307836,x=5.064016781771638 -color=red,shape=triangle,flag=0,i=84024,u=0.15589321076051543,v=0.7721679170997856,w=0.5091670999777331,x=4.238585586171747 -color=purple,shape=circle,flag=0,i=84035,u=0.6658447689157138,v=0.4278410789063032,w=0.48325704108040973,x=4.836444687375318 -color=blue,shape=triangle,flag=1,i=84038,u=0.9923032048192627,v=0.5512066701071145,w=0.510110423338272,x=4.043821217028412 -color=red,shape=circle,flag=0,i=84054,u=0.07815809188305467,v=-0.005166171309403611,w=0.4619224914145091,x=3.7302097734546904 -color=red,shape=square,flag=0,i=84061,u=0.13973941028581927,v=0.5409886769252491,w=0.5008958149170422,x=6.190696250694951 -color=green,shape=triangle,flag=0,i=84075,u=0.32956554788510006,v=0.5988667525692233,w=0.4889638022392036,x=3.9605060882435095 -color=purple,shape=triangle,flag=0,i=84080,u=0.09376770845345361,v=0.865261456689735,w=0.4941171777736501,x=6.544276297520681 -color=green,shape=square,flag=0,i=84091,u=0.4765715334261724,v=0.2432673706396874,w=0.5122487395509979,x=6.22276152269719 -color=red,shape=triangle,flag=0,i=84103,u=0.1755073072365766,v=0.3661387851424014,w=0.5277425941847986,x=7.33320574592114 -color=purple,shape=circle,flag=0,i=84114,u=0.7683281978547455,v=0.6652738892993179,w=0.4700499417260775,x=4.237591710833429 -color=blue,shape=square,flag=0,i=84145,u=0.9634567292099476,v=0.7616512666481643,w=0.46593547717089623,x=5.8728163832941265 -color=blue,shape=square,flag=1,i=84171,u=0.38062296360170167,v=0.5097475809004562,w=0.46279279351507085,x=5.593228683611702 -color=red,shape=triangle,flag=0,i=84174,u=0.12120920680117409,v=0.38448436815394005,w=0.5226332746524399,x=5.174918896192733 -color=blue,shape=triangle,flag=1,i=84182,u=0.4091216272376227,v=0.703010888647567,w=0.5045686882224233,x=5.640179590359914 -color=red,shape=circle,flag=1,i=84191,u=0.9119375048120245,v=0.9495525581923282,w=0.47331221620880004,x=4.07959729392461 -color=purple,shape=square,flag=0,i=84208,u=0.641806501032175,v=0.21250698695225523,w=0.5085333633812319,x=4.584715094139626 -color=yellow,shape=circle,flag=1,i=84221,u=0.286405507549519,v=0.8082900367305083,w=0.5458348425158348,x=3.9570103139675035 -color=yellow,shape=circle,flag=1,i=84223,u=0.0781039547881206,v=0.15460194406739203,w=0.5404475035429774,x=3.5772472136097964 -color=green,shape=triangle,flag=0,i=84237,u=0.910538291083186,v=0.11227748033451224,w=0.4905020629512842,x=4.938672328482595 -color=purple,shape=circle,flag=0,i=84238,u=0.39741723896475534,v=0.3119764265038476,w=0.45687560357417495,x=3.856373670994896 -color=red,shape=triangle,flag=0,i=84258,u=0.22997337335951007,v=0.5241719142826281,w=0.5040589050882092,x=3.3428223385200373 -color=blue,shape=triangle,flag=1,i=84293,u=0.3912066418534581,v=0.802309595939718,w=0.5023443886541941,x=5.803742771910691 -color=red,shape=triangle,flag=0,i=84296,u=0.21349483413334447,v=0.6743255768847448,w=0.5002369988689419,x=5.07681927367883 -color=red,shape=triangle,flag=0,i=84305,u=0.17887033117247464,v=0.18715285325045183,w=0.4974027151126915,x=6.057029567875758 -color=red,shape=triangle,flag=1,i=84309,u=0.4512757646684652,v=0.993734601173005,w=0.5024266019217427,x=3.4502023559579036 -color=yellow,shape=triangle,flag=1,i=84310,u=0.4901720145278564,v=0.09164867035655966,w=0.49313791481675356,x=4.920643217483616 -color=purple,shape=square,flag=0,i=84315,u=0.3399808993062704,v=0.04127876859147306,w=0.511967519087579,x=5.762010673413871 -color=blue,shape=triangle,flag=0,i=84326,u=0.13220137206634552,v=0.7793633267917444,w=0.49934759022397573,x=3.8042440474445236 -color=purple,shape=circle,flag=0,i=84338,u=0.6312658643754951,v=0.6448690157921327,w=0.4596221953901663,x=3.6231321482262406 -color=red,shape=circle,flag=0,i=84340,u=0.09078148278855669,v=0.15462268170062665,w=0.4586840392126474,x=3.5719558184920106 -color=blue,shape=triangle,flag=0,i=84352,u=0.8519968700186483,v=0.5431421882717834,w=0.4976543166827394,x=5.411954000774678 -color=blue,shape=circle,flag=1,i=84368,u=0.39823758629063866,v=0.17747700745079165,w=0.5263597303878068,x=4.942388839313421 -color=yellow,shape=square,flag=0,i=84373,u=0.20276340976126683,v=0.08063057577027488,w=0.48693185304190123,x=3.9991522556540247 -color=red,shape=triangle,flag=1,i=84387,u=0.6169476159181688,v=0.008157381504150352,w=0.5064232151310086,x=3.7602545156818388 -color=blue,shape=triangle,flag=1,i=84394,u=0.9464696613785609,v=0.21875861695530463,w=0.5058011846350001,x=4.459892045268972 -color=orange,shape=circle,flag=1,i=84396,u=0.6548669492595104,v=0.6625709068459517,w=0.4859572320930812,x=5.280507319360176 -color=blue,shape=triangle,flag=1,i=84412,u=0.22842183738672617,v=0.8771339922454624,w=0.5064493565206147,x=5.087556726422471 -color=red,shape=square,flag=0,i=84415,u=0.7265418504828559,v=0.5563096404688408,w=0.49143651361346413,x=5.568190299392107 -color=blue,shape=circle,flag=0,i=84442,u=0.8248725344255894,v=0.39209379229874686,w=0.5227997397164804,x=3.4751205735705333 -color=red,shape=triangle,flag=0,i=84444,u=0.522851906241407,v=0.43608383016782204,w=0.5063728656223513,x=4.274538495471897 -color=red,shape=square,flag=0,i=84446,u=0.17335648238807821,v=0.2674430516701156,w=0.4908649331222643,x=4.198948537291329 -color=blue,shape=square,flag=0,i=84450,u=0.4354867491224371,v=0.7856218965977316,w=0.4787273295512921,x=7.464601336288314 -color=blue,shape=triangle,flag=1,i=84467,u=0.3063383753601002,v=0.10396312686133169,w=0.508702813038436,x=4.590321370903393 -color=red,shape=square,flag=0,i=84472,u=0.6779119033983828,v=0.29502336421498343,w=0.49798236054183365,x=6.0887588906882675 -color=yellow,shape=triangle,flag=1,i=84475,u=0.2793850272265196,v=0.33066593505469666,w=0.4951274187659189,x=6.733385215299943 -color=purple,shape=square,flag=0,i=84493,u=0.7665570484926579,v=0.6267711899704203,w=0.5076242832573972,x=7.681767609263716 -color=yellow,shape=triangle,flag=1,i=84499,u=0.8102589958124413,v=0.01822955537663462,w=0.4911328887302529,x=6.939255135064175 -color=red,shape=square,flag=1,i=84502,u=0.09218611031858914,v=0.6843884932079767,w=0.5074768447817486,x=6.522408854573524 -color=red,shape=circle,flag=1,i=84504,u=0.2391638935246463,v=0.21669966988784334,w=0.482075354587983,x=4.852284919389121 -color=red,shape=square,flag=0,i=84510,u=0.8713369143741349,v=0.9961354978991265,w=0.5103807668011715,x=3.584766094737614 -color=yellow,shape=triangle,flag=1,i=84526,u=0.691087851817801,v=0.7868338939692598,w=0.49859804610546365,x=3.9136303126874066 -color=blue,shape=square,flag=0,i=84527,u=0.6232035322090675,v=0.5021788550619062,w=0.4771117909231017,x=5.260454617949134 -color=blue,shape=square,flag=1,i=84538,u=0.9113227919157537,v=0.1214988747081529,w=0.4793201450679552,x=7.471518664410535 -color=blue,shape=square,flag=0,i=84544,u=0.6274281898591093,v=0.1487238712848501,w=0.4717429292559921,x=5.980771630766033 -color=red,shape=square,flag=0,i=84547,u=0.19572256430413804,v=0.6645880587282045,w=0.504048662582051,x=6.1478699023513625 -color=red,shape=circle,flag=0,i=84553,u=0.39399389819049324,v=0.34108334384295924,w=0.47837647377149906,x=5.235365468205119 -color=green,shape=triangle,flag=1,i=84555,u=0.8571075083886939,v=0.005432943350398345,w=0.49636770240542544,x=4.026075610733411 -color=purple,shape=square,flag=0,i=84557,u=0.11422696544446342,v=0.5444423457254739,w=0.5061268494104082,x=2.4498703133255693 -color=purple,shape=circle,flag=0,i=84568,u=0.7594442010862045,v=0.8850235308519641,w=0.4538532040618892,x=4.823699728083295 -color=purple,shape=circle,flag=0,i=84576,u=0.25764872780491554,v=0.29643582593363893,w=0.45260252651905714,x=6.453082123422326 -color=purple,shape=circle,flag=0,i=84581,u=0.057498107806975285,v=0.571385861245452,w=0.4491137507287069,x=6.1772982133642955 -color=red,shape=circle,flag=1,i=84594,u=0.26047143915342275,v=0.31134032641931036,w=0.47647509800992915,x=4.860592225566909 -color=yellow,shape=circle,flag=1,i=84613,u=0.8277135750293394,v=0.8097598068686582,w=0.5537927536438878,x=2.9018166469568984 -color=red,shape=triangle,flag=0,i=84619,u=0.46158524348506424,v=0.48483994732571123,w=0.4960415246098488,x=4.902335667528943 -color=red,shape=triangle,flag=0,i=84628,u=0.8081564672048231,v=0.6141752144426256,w=0.4971870322771153,x=4.866070269885102 -color=red,shape=square,flag=1,i=84640,u=0.39519884055437904,v=0.9164095595828995,w=0.5024359751551882,x=4.947931539683516 -color=red,shape=square,flag=0,i=84648,u=0.9663104055050857,v=0.9316063431259665,w=0.5037641668693889,x=6.52948065159558 -color=red,shape=square,flag=0,i=84650,u=0.19768740184097222,v=0.33747053803626403,w=0.506008673145862,x=4.542667868842889 -color=red,shape=circle,flag=0,i=84654,u=0.9981298611871363,v=1.033142534029489,w=0.48122454006344817,x=5.471859227093806 -color=purple,shape=circle,flag=0,i=84658,u=0.0826198126900467,v=0.7663654733410326,w=0.45064182878433157,x=3.4997846877625736 -color=red,shape=triangle,flag=0,i=84677,u=0.917366677399632,v=0.1600825446719557,w=0.49672429055898054,x=4.783865469383976 -color=green,shape=triangle,flag=1,i=84681,u=0.5167232957507374,v=0.5906429506180194,w=0.49603446546416136,x=5.681356092497879 -color=red,shape=circle,flag=0,i=84684,u=0.5618792437229114,v=0.47476376187724434,w=0.49077438408929325,x=4.1297581154108824 -color=red,shape=triangle,flag=1,i=84687,u=0.6331540491606704,v=0.8228904217882436,w=0.4995613145029491,x=6.752619752644885 -color=green,shape=triangle,flag=0,i=84694,u=0.8844290783131042,v=0.37751330116644166,w=0.5011864962969341,x=5.205704557499417 -color=blue,shape=square,flag=1,i=84700,u=0.5595307154969456,v=0.8196583374164971,w=0.47222952702091925,x=7.331449811224478 -color=blue,shape=circle,flag=0,i=84714,u=0.03861643834946327,v=0.4854506463568181,w=0.5329293059177043,x=5.111822930637758 -color=red,shape=triangle,flag=0,i=84730,u=0.29244787054596133,v=0.4330977891452481,w=0.504130556248503,x=7.35082449854281 -color=purple,shape=triangle,flag=0,i=84736,u=0.20430110446442407,v=0.3929882389934475,w=0.49385352607461636,x=4.517251449086623 -color=blue,shape=triangle,flag=1,i=84763,u=0.2669042494119066,v=0.4590092691038372,w=0.5099980568432776,x=4.117594382024488 -color=red,shape=triangle,flag=0,i=84765,u=0.9355705249257841,v=0.9369196923949129,w=0.503860900113285,x=3.8604615545931487 -color=red,shape=circle,flag=1,i=84771,u=0.8383550173417015,v=0.808406855475372,w=0.4960280209975012,x=5.968965971904798 -color=red,shape=circle,flag=0,i=84790,u=0.6529820277882176,v=0.628874774869151,w=0.49687396352278995,x=4.52261320381504 -color=red,shape=square,flag=0,i=84804,u=0.25663181926400536,v=0.9727661599849248,w=0.5132658723080127,x=5.426257046930297 -color=purple,shape=square,flag=0,i=84816,u=0.38326323260477413,v=0.046358787043141114,w=0.5107969443916618,x=4.9942743361256134 -color=orange,shape=square,flag=0,i=84833,u=0.7135417290023929,v=0.5616180516712003,w=0.5053749607989979,x=2.8920973077666314 -color=purple,shape=square,flag=0,i=84844,u=0.7894239820145166,v=0.1557304918328546,w=0.5080335051392121,x=6.390974330149276 -color=red,shape=triangle,flag=0,i=84861,u=0.04171663848949825,v=0.18201975586900154,w=0.4993168012316726,x=7.073345153242407 -color=red,shape=circle,flag=1,i=84862,u=0.6657520237052819,v=0.578339423566302,w=0.49881907484704463,x=5.128702343721816 -color=blue,shape=triangle,flag=0,i=84878,u=0.9822248067469724,v=0.7124408927579092,w=0.5114109499406355,x=5.280662316539495 -color=purple,shape=triangle,flag=0,i=84880,u=0.7384022185448347,v=0.627917108777412,w=0.49171489047163885,x=1.7460582889478633 -color=red,shape=triangle,flag=0,i=84907,u=0.27355357853304085,v=0.24234572962600331,w=0.49627089393657586,x=6.559109634016019 -color=red,shape=circle,flag=0,i=84915,u=0.948879045920595,v=0.8553745137306265,w=0.49419148495266274,x=3.888399632140649 -color=red,shape=triangle,flag=0,i=84924,u=0.7773778755698789,v=0.3300384867893771,w=0.4924433033519024,x=6.059699763981318 -color=purple,shape=square,flag=0,i=84925,u=0.7247670035450625,v=0.11974741035291536,w=0.5096314557272542,x=4.42453511961119 -color=yellow,shape=square,flag=1,i=84933,u=0.01638922093087003,v=0.6259575289432724,w=0.47107959659631293,x=5.56966217227509 -color=yellow,shape=square,flag=1,i=84943,u=0.593468380468002,v=0.2529719507654551,w=0.47441530516841673,x=5.678756268202779 -color=purple,shape=triangle,flag=0,i=84978,u=0.6888067151424385,v=0.5778705905592166,w=0.4888276349872249,x=3.6004690047827936 -color=yellow,shape=square,flag=1,i=84997,u=0.6948563903709681,v=0.4773120583924717,w=0.46799778516555024,x=5.200188934040355 -color=blue,shape=triangle,flag=1,i=85001,u=0.4468466813667844,v=0.43362920993357335,w=0.515729505499019,x=4.81533198522991 -color=red,shape=circle,flag=1,i=85007,u=0.32293035851090535,v=0.2695397847604287,w=0.49819765309459557,x=4.432970695645839 -color=red,shape=circle,flag=0,i=85011,u=0.0934455553004091,v=0.09706827408347332,w=0.5002420671062757,x=2.9921874167667997 -color=red,shape=square,flag=0,i=85029,u=0.4155861942682759,v=0.8323807540582205,w=0.5079107752577897,x=4.7743652931057206 -color=red,shape=square,flag=0,i=85035,u=0.2547348661030797,v=0.8176917826597205,w=0.5065431430624738,x=6.072912280477126 -color=red,shape=square,flag=0,i=85055,u=0.7347099053004672,v=0.20777365073206178,w=0.4983527615812199,x=6.906273367401151 -color=yellow,shape=square,flag=1,i=85069,u=0.34708535893298476,v=0.7588761693759328,w=0.46509805840758206,x=5.958273799673441 -color=red,shape=square,flag=1,i=85072,u=0.9702967271485906,v=0.8217949607270094,w=0.49749142383226713,x=7.923479574964664 -color=red,shape=square,flag=1,i=85073,u=0.5595827772690272,v=0.8629834809138323,w=0.4963813746205957,x=3.643111682849435 -color=yellow,shape=triangle,flag=1,i=85084,u=0.27016626275607336,v=0.2361061432725633,w=0.4975572638226982,x=4.899198302990696 -color=red,shape=triangle,flag=1,i=85092,u=0.9783138836283432,v=0.06871908092818602,w=0.4723087234497161,x=2.429194040014615 -color=yellow,shape=square,flag=1,i=85100,u=0.601341752261887,v=0.9871014256790142,w=0.4656642070109788,x=3.9584981516024524 -color=yellow,shape=circle,flag=1,i=85109,u=0.2584121166844663,v=0.5770647909784982,w=0.5389870481057049,x=5.1688393644673765 -color=purple,shape=triangle,flag=1,i=85114,u=0.6627940020983101,v=0.21742985611982912,w=0.48638370238500866,x=4.627590199271363 -color=orange,shape=square,flag=0,i=85118,u=0.8669739809149121,v=0.9756108423175313,w=0.5053008946570394,x=5.409891613045471 -color=red,shape=square,flag=1,i=85119,u=0.36555357466852056,v=0.07645205536172783,w=0.508337935006973,x=5.193246662529672 -color=orange,shape=square,flag=0,i=85122,u=0.18957297427068343,v=0.011289215203845293,w=0.5014881603996104,x=5.156932876359062 -color=red,shape=triangle,flag=1,i=85129,u=0.5417221364135402,v=0.05125548267174118,w=0.4713375130413683,x=4.392247287226662 -color=red,shape=square,flag=0,i=85131,u=0.5773984901362054,v=0.2862726305555673,w=0.5072039719902021,x=2.682110304825743 -color=red,shape=square,flag=0,i=85150,u=0.5342658852870467,v=0.40331767406650676,w=0.5071660161631717,x=4.263485716178285 -color=red,shape=square,flag=0,i=85154,u=0.16538091099895547,v=0.21231903796909646,w=0.5077362885250679,x=3.4170918666907717 -color=green,shape=triangle,flag=0,i=85169,u=0.9130901842355247,v=0.42733433771940554,w=0.5155023420439412,x=5.084294034388891 -color=purple,shape=circle,flag=0,i=85199,u=0.8524367050494912,v=0.16889278277483777,w=0.468648674681958,x=4.608871038377759 -color=red,shape=triangle,flag=0,i=85205,u=0.7170259743418136,v=0.48217035408733866,w=0.46432760927314887,x=5.7237002632622636 -color=yellow,shape=square,flag=1,i=85215,u=0.5443243056501877,v=0.6274756987542268,w=0.46024736512963077,x=3.3378575398079207 -color=blue,shape=circle,flag=1,i=85228,u=0.730781063090646,v=0.8305406720518591,w=0.5294685295586468,x=5.279958423374869 -color=purple,shape=square,flag=0,i=85237,u=0.2115296774168054,v=0.3849712182704629,w=0.5205918866192383,x=4.174181627928343 -color=purple,shape=square,flag=0,i=85244,u=0.20863695328870535,v=0.029838647145262076,w=0.5154733388357255,x=5.749372843102285 -color=purple,shape=circle,flag=0,i=85263,u=0.11426478394849648,v=0.21050411490040977,w=0.4635914066485068,x=2.434820725773794 -color=red,shape=circle,flag=0,i=85273,u=0.8361221943478852,v=0.8757821773856019,w=0.49332492821121826,x=4.710085487104611 -color=orange,shape=square,flag=0,i=85303,u=0.630866106889544,v=0.3508645843901491,w=0.5002736025930848,x=3.1474729833495876 -color=blue,shape=triangle,flag=1,i=85304,u=0.6577322326675539,v=0.5225108935589138,w=0.5156793109401394,x=5.460942893587558 -color=purple,shape=triangle,flag=0,i=85306,u=0.8677775392639049,v=0.6198611554396952,w=0.48793011766344674,x=5.673571977672875 -color=orange,shape=triangle,flag=1,i=85308,u=0.591971936852446,v=0.11662916228512576,w=0.4737029597625125,x=4.273321383567371 -color=red,shape=triangle,flag=1,i=85332,u=0.2280079468651427,v=0.7814860351373184,w=0.45158159881824833,x=4.518228902849963 -color=red,shape=circle,flag=1,i=85333,u=0.7132420929497385,v=0.7186658256455496,w=0.48848404033182935,x=5.0887037297452204 -color=red,shape=triangle,flag=0,i=85348,u=0.8220190323544991,v=0.9925354915056449,w=0.45713990783701103,x=5.57264764814727 -color=purple,shape=square,flag=0,i=85361,u=0.5574011458103179,v=0.7149337853086016,w=0.5309299835992229,x=5.408515297062594 -color=red,shape=square,flag=0,i=85390,u=0.09687680238856133,v=0.891289484293177,w=0.49620176948822337,x=4.41081053227365 -color=yellow,shape=triangle,flag=1,i=85420,u=0.9706115695543969,v=0.1247673124994404,w=0.5222142030313565,x=6.609298129619411 -color=red,shape=triangle,flag=0,i=85441,u=0.28580596622573007,v=0.3907064570339188,w=0.4716269715918478,x=6.043439010813056 -color=red,shape=square,flag=1,i=85442,u=0.4278639656009402,v=0.4774052494332929,w=0.5050408021489939,x=6.126742881761789 -color=red,shape=triangle,flag=0,i=85446,u=0.17378473843917996,v=0.9701494204940466,w=0.4702290960944805,x=6.718528092966392 -color=red,shape=square,flag=1,i=85457,u=0.24499921027124094,v=0.255208718562683,w=0.5008275824423128,x=3.9262527039462953 -color=red,shape=circle,flag=1,i=85466,u=0.5277776840661931,v=0.42950624105860313,w=0.49914970743581427,x=3.5720884940081934 -color=green,shape=square,flag=0,i=85473,u=0.0714693766989114,v=0.8434590154440507,w=0.5052443561253518,x=6.145472220740967 -color=green,shape=square,flag=0,i=85478,u=0.32639389722343193,v=0.5267758335709026,w=0.5066189091332679,x=5.464966261201148 -color=green,shape=square,flag=1,i=85510,u=0.6004974338488954,v=0.7787426708887795,w=0.509429189860972,x=4.965408694259128 -color=yellow,shape=square,flag=1,i=85521,u=0.38092380568353834,v=0.3196930143459549,w=0.4560242699345026,x=4.204302702715086 -color=red,shape=circle,flag=0,i=85524,u=0.4624156956849369,v=0.455344260258324,w=0.5040478108921573,x=6.410838916235206 -color=red,shape=square,flag=0,i=85547,u=0.22301696363349044,v=0.8109135025164587,w=0.5013234191873367,x=4.7675392701979575 -color=yellow,shape=square,flag=0,i=85553,u=0.5405534796417821,v=0.1406357376974694,w=0.45337132724477797,x=4.71939290164823 -color=orange,shape=triangle,flag=1,i=85557,u=0.01590664870399494,v=0.4572765600077092,w=0.4840452019160308,x=5.782387968496991 -color=yellow,shape=triangle,flag=1,i=85567,u=0.20242937347513024,v=0.32187513135938317,w=0.5189221860617227,x=4.473026779655001 -color=red,shape=square,flag=1,i=85577,u=0.2041418104845184,v=0.4581217249811622,w=0.4895326428218526,x=4.83545893940905 -color=yellow,shape=circle,flag=0,i=85585,u=0.8297487271228928,v=0.47265214548585377,w=0.5324445777405135,x=5.332570876788594 -color=red,shape=square,flag=0,i=85586,u=0.60619770573938,v=0.7868679676557547,w=0.49445333773164496,x=3.564003050613175 -color=red,shape=triangle,flag=0,i=85594,u=0.6857743746636775,v=0.8978983846092662,w=0.458790528254551,x=4.904617735550746 -color=green,shape=square,flag=0,i=85607,u=0.9722726751360444,v=0.9583812069083181,w=0.5106020893074634,x=6.707855553111038 -color=purple,shape=triangle,flag=0,i=85614,u=0.7187795651758097,v=0.5476835679019041,w=0.48872223232107664,x=4.555474941216741 -color=blue,shape=square,flag=1,i=85618,u=0.8069624874650082,v=0.5437604410713842,w=0.47384612223623185,x=4.38964723496028 -color=blue,shape=square,flag=1,i=85620,u=0.5029309949119753,v=0.5272989418629264,w=0.4737437693534424,x=6.251160899306548 -color=orange,shape=square,flag=1,i=85624,u=0.42850197928902745,v=0.9327841104315517,w=0.4939073304491279,x=4.071958673876106 -color=blue,shape=square,flag=1,i=85627,u=0.36979380303155596,v=0.2487632991955283,w=0.47112878559950194,x=5.458867702183956 -color=red,shape=square,flag=0,i=85641,u=0.6892243942831818,v=0.12380871620827827,w=0.49126188466862863,x=5.786270563124558 -color=yellow,shape=circle,flag=1,i=85655,u=0.7661219735643151,v=0.17461499712153228,w=0.5224586176582287,x=3.5546468931271082 -color=red,shape=circle,flag=1,i=85664,u=0.2637257788219187,v=0.22562504866157346,w=0.49992691459899724,x=2.236094072428751 -color=green,shape=circle,flag=0,i=85685,u=0.9438304606302973,v=0.21780940451843955,w=0.5104681714170178,x=5.200868325295786 -color=yellow,shape=square,flag=1,i=85690,u=0.49407280185669855,v=0.632541357132386,w=0.4600063441141154,x=5.5178447148283984 -color=yellow,shape=circle,flag=1,i=85694,u=0.8381672748863793,v=0.21755473462835673,w=0.5207229879030026,x=6.4984791392966805 -color=yellow,shape=triangle,flag=0,i=85708,u=0.19514881275968465,v=0.025996136864955277,w=0.5191329727433874,x=3.565050187934149 -color=red,shape=triangle,flag=0,i=85726,u=0.07567877986647131,v=0.42068268728195646,w=0.4696827504269808,x=6.609871290553852 -color=red,shape=triangle,flag=0,i=85729,u=0.5709126090910467,v=0.5413260773979797,w=0.4697768627794909,x=7.947189574977039 -color=yellow,shape=square,flag=1,i=85739,u=0.3246029901266696,v=0.9588994619184443,w=0.4603194775432964,x=5.897082314294825 -color=green,shape=square,flag=1,i=85751,u=0.8462597371150543,v=0.721456519915196,w=0.5118679688546229,x=4.5177921623167885 -color=green,shape=circle,flag=0,i=85753,u=0.8434747395858071,v=0.07402838892297958,w=0.5158831371942311,x=4.293753444251344 -color=red,shape=circle,flag=1,i=85757,u=0.4680733653101632,v=0.5371720006634939,w=0.5026094351783746,x=3.3877495456668973 -color=red,shape=circle,flag=1,i=85762,u=0.4191097569913754,v=0.47246119250979496,w=0.5044547720935116,x=3.7685738018741746 -color=blue,shape=triangle,flag=0,i=85771,u=0.6461324979428906,v=0.8361442544262598,w=0.519335505911322,x=6.575771580595844 -color=green,shape=triangle,flag=0,i=85772,u=0.8377644060982539,v=0.5503414418976728,w=0.4985261271489029,x=4.7498125701451706 -color=blue,shape=square,flag=1,i=85783,u=0.6964744348337873,v=0.8868560515441671,w=0.47398401764450804,x=6.114045508861097 -color=red,shape=square,flag=1,i=85798,u=0.013020691498634274,v=0.5495552753534988,w=0.5253784442607773,x=4.725617124076844 -color=red,shape=circle,flag=1,i=85801,u=0.4738364893586757,v=0.4701732332869386,w=0.49639536384015565,x=6.8752987633081135 -color=red,shape=circle,flag=1,i=85810,u=0.6656105725283946,v=0.75108137973318,w=0.4949443113514723,x=5.281658329539386 -color=red,shape=square,flag=0,i=85811,u=0.25596923431129603,v=0.051093538322888876,w=0.5264823108099105,x=3.6654730030376803 -color=purple,shape=circle,flag=0,i=85822,u=0.8938248057786501,v=0.42098153130622296,w=0.4802087471289647,x=5.863618478077068 -color=blue,shape=circle,flag=1,i=85824,u=0.4708250203200308,v=0.19654657972700595,w=0.5051505439281154,x=3.585234005506477 -color=red,shape=square,flag=0,i=85826,u=0.008350166019426397,v=0.09470629678221865,w=0.5181745987055807,x=5.191052375330684 -color=red,shape=circle,flag=1,i=85850,u=0.37045404571025775,v=0.41743549979617406,w=0.4858214415189545,x=5.741370933050528 -color=red,shape=circle,flag=0,i=85864,u=0.8942631011543773,v=0.8638887743711348,w=0.4966035867030875,x=2.9373743964041954 -color=red,shape=triangle,flag=0,i=85865,u=0.957273783720544,v=0.7733201101963969,w=0.4713425199954149,x=6.175683625759825 -color=purple,shape=square,flag=0,i=85869,u=0.5128409293908851,v=0.11497086312151694,w=0.531286691146988,x=7.656167922482241 -color=red,shape=triangle,flag=0,i=85873,u=0.20784804688845426,v=0.7388074595717812,w=0.47014346630134474,x=3.694114890206754 -color=red,shape=triangle,flag=1,i=85874,u=0.30082957301848523,v=0.5653276652271506,w=0.4734696065196633,x=6.357267490275895 -color=red,shape=circle,flag=0,i=85881,u=0.23433800404204164,v=0.1393151182299473,w=0.4950474060233168,x=4.786690595721022 -color=purple,shape=circle,flag=0,i=85884,u=0.6214496500365904,v=0.30742759739689407,w=0.4792694327595867,x=4.91100159602182 -color=blue,shape=circle,flag=0,i=85898,u=0.7986458160900594,v=0.18585005223047135,w=0.5039231103949626,x=5.626741318070789 -color=red,shape=square,flag=0,i=85903,u=0.6848533104329096,v=0.33056972283940667,w=0.5379726281281916,x=4.717831083697813 -color=green,shape=triangle,flag=0,i=85916,u=0.2839822189749771,v=0.73775579533104,w=0.5049172441133688,x=6.716827851033396 -color=red,shape=circle,flag=0,i=85927,u=0.5492331749387379,v=0.6457659939155009,w=0.48873057639053413,x=6.400011063657911 -color=purple,shape=circle,flag=0,i=85954,u=0.33026844977478165,v=0.34444832024348426,w=0.4814777732869112,x=4.4048141888059265 -color=yellow,shape=circle,flag=1,i=85955,u=0.9133316022820065,v=0.9649385884565533,w=0.524248057841048,x=4.101212085394714 -color=purple,shape=circle,flag=0,i=85956,u=0.316217615121002,v=0.25815593493508604,w=0.4851282848578222,x=6.0113687193808145 -color=red,shape=square,flag=0,i=85957,u=0.03892892550034732,v=0.5851772338257412,w=0.549080533872407,x=3.9391065302101325 -color=blue,shape=square,flag=0,i=85962,u=0.5796519950537246,v=0.5225193068500436,w=0.46812592683127857,x=3.5333053612012635 -color=green,shape=square,flag=0,i=85964,u=0.9940685289652789,v=0.3196874106138835,w=0.5106399734383792,x=6.627733957167792 -color=red,shape=square,flag=0,i=85968,u=0.24608812446195005,v=0.1800137254303592,w=0.5446206058541022,x=4.893937149938307 -color=purple,shape=triangle,flag=0,i=86013,u=0.6506952388147397,v=0.6296636866615741,w=0.4914499285808656,x=4.012082590394638 -color=red,shape=triangle,flag=1,i=86025,u=0.2514261207127588,v=0.6535792580599258,w=0.46582790524260004,x=2.9258416449390894 -color=red,shape=square,flag=0,i=86029,u=0.8029325391323049,v=0.9263691643301364,w=0.5578502339843877,x=3.186559900751657 -color=red,shape=triangle,flag=0,i=86032,u=0.882105188724888,v=0.04775054632160425,w=0.46798223198899663,x=6.252781391016099 -color=red,shape=triangle,flag=0,i=86055,u=0.1674972380102433,v=0.2609421092907568,w=0.4699456074449321,x=5.078946056985045 -color=purple,shape=circle,flag=0,i=86080,u=0.12397971577750255,v=0.9708882164743036,w=0.48617682829403663,x=5.257074069129675 -color=blue,shape=square,flag=0,i=86082,u=0.7340898571795469,v=0.4757366760248247,w=0.46296304032021257,x=6.244017326913152 -color=red,shape=triangle,flag=0,i=86089,u=0.08891645540192639,v=0.7531671348537611,w=0.4682200355584395,x=2.907319480910244 -color=yellow,shape=circle,flag=1,i=86099,u=0.0254896318150033,v=0.8823210564149404,w=0.5211398295543085,x=5.378323465527184 -color=yellow,shape=circle,flag=1,i=86101,u=0.5349134399214438,v=0.5923192653969284,w=0.5167487348865745,x=4.405082669340497 -color=yellow,shape=triangle,flag=1,i=86104,u=0.6059341819703445,v=0.42433189146973194,w=0.5112106634865347,x=5.896060950562372 -color=red,shape=square,flag=0,i=86126,u=0.03999643900721206,v=0.7132445010070424,w=0.5388732506134749,x=3.4010268008615916 -color=purple,shape=circle,flag=0,i=86132,u=0.1041833210653601,v=0.6829350157801621,w=0.49201749557060254,x=3.781136668626683 -color=red,shape=circle,flag=0,i=86142,u=0.3759087757093993,v=0.46423172399914614,w=0.48604745777303643,x=5.808747262283556 -color=yellow,shape=square,flag=1,i=86144,u=0.4029289128797666,v=0.0013758815078774855,w=0.4645604940556546,x=4.368476056376362 -color=purple,shape=triangle,flag=0,i=86152,u=0.058665436954591255,v=0.40989712209393114,w=0.4934392583554017,x=2.8678175407018283 -color=green,shape=triangle,flag=0,i=86154,u=0.40322931048568733,v=0.27864472268185003,w=0.5062392349203582,x=4.248792381923482 -color=blue,shape=circle,flag=1,i=86155,u=0.29812139403575255,v=0.5632206087816237,w=0.49860214007931175,x=8.146885882174693 -color=yellow,shape=triangle,flag=1,i=86156,u=0.3154182356974319,v=0.5474863972186107,w=0.5093497549932269,x=5.050591329344595 -color=purple,shape=circle,flag=0,i=86176,u=0.21380841899332537,v=0.4513242975790873,w=0.4965056985119337,x=4.5494233554288295 -color=purple,shape=triangle,flag=0,i=86189,u=0.28655987765812085,v=0.16266134693515133,w=0.4932688699946626,x=6.321522974744133 -color=blue,shape=circle,flag=1,i=86195,u=0.000690052898613347,v=0.7789329485527191,w=0.4996831517213931,x=5.861801301751025 -color=red,shape=triangle,flag=0,i=86199,u=0.2798998249390876,v=0.23113290298367495,w=0.4921642951191572,x=4.9619101130679555 -color=red,shape=square,flag=0,i=86201,u=0.9356844302485094,v=0.9211556757351993,w=0.5286359285573382,x=4.095001154333659 -color=yellow,shape=square,flag=1,i=86205,u=0.1721818367237269,v=0.9124919327239045,w=0.4706789831435059,x=4.327202260637639 -color=red,shape=square,flag=0,i=86213,u=0.407164590915292,v=0.020187542465808894,w=0.5236383119561624,x=3.6898982852695568 -color=purple,shape=circle,flag=0,i=86216,u=0.9061186371270176,v=0.9312798715094261,w=0.4983599282061592,x=4.53529395941221 -color=red,shape=square,flag=0,i=86217,u=0.6342717782829218,v=0.5039073408150256,w=0.5226067930252241,x=4.492831683399684 -color=purple,shape=triangle,flag=0,i=86235,u=0.736999489217027,v=0.9288874856518851,w=0.49342172835776904,x=4.895402544925116 -color=red,shape=triangle,flag=1,i=86240,u=0.09511647804434442,v=0.8624159415485466,w=0.49925655183443063,x=3.5898618000696856 -color=red,shape=circle,flag=1,i=86244,u=0.7436229251357463,v=0.7932897198188944,w=0.483432704305946,x=4.833950135623271 -color=yellow,shape=circle,flag=1,i=86281,u=0.3223478910035237,v=0.013718487106361699,w=0.5071570059762378,x=4.6248122736214965 -color=yellow,shape=circle,flag=1,i=86282,u=0.031442165109897946,v=0.538171663420788,w=0.5071514616236765,x=4.491465925327968 -color=red,shape=square,flag=0,i=86297,u=0.7215000632812368,v=0.9783446977147177,w=0.520997153003067,x=5.550844082665016 -color=red,shape=circle,flag=0,i=86311,u=0.5958837608067776,v=0.5709302556286382,w=0.48900804484503757,x=5.042102449732762 -color=red,shape=square,flag=0,i=86317,u=0.6046801460521182,v=0.028027083129846586,w=0.5115028321305282,x=5.004572163125208 -color=red,shape=circle,flag=1,i=86336,u=0.22553877314772253,v=0.1394629716917561,w=0.4866804974288476,x=6.997607529360064 -color=red,shape=circle,flag=0,i=86342,u=0.15050749354087012,v=0.2429233771101954,w=0.49180627238182884,x=4.141027438779219 -color=red,shape=square,flag=0,i=86347,u=0.5734807473265005,v=0.7050556756360538,w=0.5117582718270743,x=3.795151568207107 -color=green,shape=circle,flag=0,i=86371,u=0.6033823900126042,v=0.16207432846592873,w=0.5134011972671004,x=4.735523286095609 -color=purple,shape=triangle,flag=0,i=86377,u=0.3689413424208302,v=0.055498762494094134,w=0.4957949619575204,x=5.292643120408306 -color=green,shape=square,flag=0,i=86382,u=0.0994751006178235,v=0.6511327561927346,w=0.4938150397937878,x=7.268578505820497 -color=blue,shape=square,flag=1,i=86383,u=0.6047195197378054,v=0.660608346804571,w=0.4663422523744924,x=5.6997159281568 -color=yellow,shape=circle,flag=1,i=86388,u=0.6564709385781753,v=0.994190627211483,w=0.5018065000024834,x=4.073076131944515 -color=yellow,shape=circle,flag=1,i=86392,u=0.9159440153422648,v=0.7208506227267477,w=0.49994664904904,x=5.8765737127761595 -color=red,shape=square,flag=0,i=86393,u=0.23969864901411753,v=0.4352870885496487,w=0.5049458261730994,x=4.210419201281581 -color=red,shape=triangle,flag=0,i=86400,u=0.6940160483165602,v=0.08575494812049977,w=0.501242183887338,x=3.9464616531747096 -color=blue,shape=triangle,flag=1,i=86402,u=0.8605317944477321,v=0.2271908329075828,w=0.5073438854913153,x=4.1888063190023805 -color=red,shape=triangle,flag=0,i=86410,u=0.14299995143384658,v=0.8867698601893216,w=0.49966092838729625,x=4.199278798485914 -color=red,shape=circle,flag=1,i=86468,u=0.02771278651557585,v=0.03429131662711673,w=0.4706123757423119,x=5.170327939421174 -color=red,shape=triangle,flag=1,i=86477,u=0.44699388675486385,v=0.14982804239628988,w=0.491861371753282,x=5.358698469407348 -color=red,shape=square,flag=0,i=86496,u=0.9001852868513311,v=0.1563407769787356,w=0.5017492852481726,x=5.869252325467563 -color=green,shape=circle,flag=1,i=86508,u=0.7845871626702107,v=0.019979627232190045,w=0.5115787320434757,x=4.2030315831903735 -color=green,shape=square,flag=0,i=86510,u=0.8116052190275128,v=0.8935586352512453,w=0.4942763185069306,x=4.52279110202832 -color=red,shape=square,flag=0,i=86547,u=0.7660819275029396,v=0.3115107074174447,w=0.4978429768605359,x=3.3946909305862696 -color=green,shape=square,flag=0,i=86554,u=0.20726603123512322,v=0.42379106773486197,w=0.4972105620776079,x=4.555006054175362 -color=green,shape=square,flag=1,i=86563,u=0.5546738511920734,v=0.7079784162616318,w=0.5007437090007817,x=4.940556766517629 -color=yellow,shape=circle,flag=1,i=86585,u=0.6546501013144669,v=0.09128249159926538,w=0.4925300405426629,x=3.202670367906642 -color=red,shape=square,flag=1,i=86587,u=0.16661565181086957,v=0.8444460150291666,w=0.48899516856978387,x=4.605005124717778 -color=purple,shape=circle,flag=0,i=86595,u=0.046096169230748996,v=0.6330365289927855,w=0.49763304811033415,x=5.287341985182163 -color=yellow,shape=square,flag=1,i=86619,u=0.6644835752780938,v=0.4066231631531583,w=0.498414931297478,x=3.9208640839403675 -color=blue,shape=circle,flag=1,i=86628,u=0.6360027207753243,v=0.7040623704100735,w=0.5079478269038831,x=5.369460230158197 -color=red,shape=circle,flag=0,i=86634,u=0.6102336275941573,v=0.5426461613898843,w=0.4787986920317028,x=6.91946947575433 -color=blue,shape=square,flag=0,i=86642,u=0.12358187244307994,v=0.02035756741710959,w=0.47691608451661566,x=3.637759428157294 -color=green,shape=square,flag=0,i=86652,u=0.49987543705384985,v=0.27028489536048905,w=0.49681960723694485,x=3.3080913569405497 -color=blue,shape=square,flag=1,i=86657,u=0.05946106617345159,v=0.4532670390203296,w=0.4776134074601565,x=6.671658709259874 -color=blue,shape=triangle,flag=1,i=86674,u=0.27971271459463276,v=0.35402444918062537,w=0.4999477642634154,x=4.092460843085399 -color=red,shape=triangle,flag=0,i=86682,u=0.43368658742377975,v=0.8826609374254298,w=0.5193062129437737,x=1.2146763609358853 -color=purple,shape=triangle,flag=0,i=86694,u=0.4361122074666044,v=0.6917074618192002,w=0.49239944720507756,x=3.084716917371697 -color=red,shape=triangle,flag=1,i=86701,u=0.2765643106345562,v=0.5939979701878836,w=0.5146188457161298,x=6.8359795324213835 -color=blue,shape=triangle,flag=1,i=86708,u=0.5786771300643293,v=0.6142600340649169,w=0.4991815807818477,x=5.290739355892209 -color=yellow,shape=triangle,flag=0,i=86720,u=0.7711922622191889,v=0.2251062751896522,w=0.4939260197702981,x=3.160490042738331 -color=green,shape=circle,flag=0,i=86730,u=0.09860641262650338,v=0.5449504130478615,w=0.5045129181223662,x=5.165867446005227 -color=yellow,shape=circle,flag=1,i=86743,u=0.3665007718315332,v=0.7514930942145615,w=0.4848596594877264,x=4.842455768318108 -color=red,shape=square,flag=0,i=86749,u=0.8389029960044865,v=0.860750605855949,w=0.501458353783284,x=3.19218817124321 -color=yellow,shape=triangle,flag=1,i=86759,u=0.07227170639272118,v=0.2816426208022663,w=0.48605622671986337,x=5.354836096912901 -color=purple,shape=circle,flag=0,i=86764,u=0.17201355773495508,v=0.24756271742805946,w=0.4944297443915493,x=4.918458155450148 -color=green,shape=square,flag=0,i=86778,u=0.6635615363258186,v=0.19657031432664474,w=0.49589837786327046,x=6.642454900130587 -color=red,shape=triangle,flag=0,i=86785,u=0.360773189183068,v=0.5248461207576682,w=0.5090292387452188,x=4.430519083215832 -color=green,shape=triangle,flag=0,i=86788,u=0.9226419634151455,v=0.06741602036717442,w=0.5091812925736865,x=3.4154247812656515 -color=red,shape=triangle,flag=1,i=86797,u=0.2780736090059539,v=0.6747335930438723,w=0.508377691060558,x=3.322333341339808 -color=orange,shape=circle,flag=0,i=86798,u=0.20748653676403406,v=0.4123003163495188,w=0.494195797219976,x=6.232117654654036 -color=red,shape=circle,flag=0,i=86803,u=0.5152339306361557,v=0.5750573240341217,w=0.4895081853111887,x=6.406757210484545 -color=purple,shape=triangle,flag=0,i=86804,u=0.053563008562753645,v=0.08131649748602454,w=0.48618442533423495,x=4.762474218129651 -color=red,shape=square,flag=0,i=86820,u=0.7487535986212616,v=0.5149128090498354,w=0.5091472709116461,x=4.175425294558464 -color=blue,shape=square,flag=1,i=86823,u=0.9782709459666242,v=0.5258073459494389,w=0.47581614867538397,x=6.20605772925591 -color=blue,shape=square,flag=1,i=86833,u=0.9652355409798492,v=0.2729426369750859,w=0.48104940270659097,x=5.400030744031735 -color=yellow,shape=square,flag=1,i=86844,u=0.9659526616525094,v=0.8275642198610555,w=0.4978229875585131,x=3.253920147246891 -color=purple,shape=square,flag=0,i=86853,u=0.5638980409308909,v=0.1361063038780117,w=0.5381885216746034,x=3.5002808094746194 -color=green,shape=square,flag=0,i=86855,u=0.7837064000167976,v=0.7644152694922427,w=0.49875527920017143,x=4.6183863066724244 -color=red,shape=triangle,flag=0,i=86864,u=0.2976658081930511,v=0.36850196425385795,w=0.4973013602419118,x=4.661139636780618 -color=blue,shape=square,flag=1,i=86866,u=0.7365425661310253,v=0.45583970199582713,w=0.48565503296948664,x=5.209628722186546 -color=green,shape=circle,flag=0,i=86869,u=0.8479196770587611,v=0.9933079612771681,w=0.5048446284964669,x=5.567739255489422 -color=red,shape=square,flag=1,i=86886,u=0.991096511437496,v=0.025105301614998132,w=0.5179123967745594,x=5.931435348137742 -color=red,shape=triangle,flag=1,i=86910,u=0.39767185862779686,v=0.9376186130941725,w=0.4994102614655188,x=3.399354147428521 -color=red,shape=circle,flag=1,i=86911,u=0.781160381108894,v=0.725985369836209,w=0.4955132160741051,x=4.732900556687531 -color=red,shape=square,flag=0,i=86919,u=0.6549377334854134,v=0.09084926769783574,w=0.5174924922748046,x=3.475455623251961 -color=red,shape=circle,flag=0,i=86923,u=0.6017358132650914,v=0.5219351035857995,w=0.4958945620205581,x=6.38592524546268 -color=blue,shape=circle,flag=0,i=86931,u=0.8012162042283488,v=0.3480468507230474,w=0.5046025568164396,x=5.073914226625629 -color=red,shape=circle,flag=0,i=86953,u=0.11509170888080389,v=0.13995988845008878,w=0.49467070579276473,x=4.672111397578845 -color=red,shape=triangle,flag=0,i=86956,u=0.6955703797996894,v=0.3362958683867011,w=0.4995226901985453,x=7.19957078603985 -color=green,shape=square,flag=0,i=86958,u=0.5277957486992041,v=0.3793846240217911,w=0.4962027804037736,x=6.103713989801951 -color=red,shape=triangle,flag=1,i=86968,u=0.9585030343837033,v=0.34914529683213924,w=0.4980864448121288,x=7.888527058456321 -color=red,shape=triangle,flag=1,i=86975,u=0.6316751169638901,v=0.15769747029531256,w=0.49936074424643995,x=2.737391868241301 -color=blue,shape=circle,flag=1,i=86977,u=0.30488416058328904,v=0.4558390636812145,w=0.506877310972472,x=5.65093335347233 -color=green,shape=circle,flag=0,i=86981,u=0.6255236855282953,v=0.6010377242870991,w=0.5090970434834531,x=4.754334188386776 -color=red,shape=square,flag=1,i=86988,u=0.20098946351521962,v=0.13185884973284479,w=0.501977508680943,x=5.137385350112086 -color=purple,shape=triangle,flag=0,i=87000,u=0.6994711351679362,v=0.6618277787917952,w=0.47045540593326923,x=6.577365405041516 -color=purple,shape=circle,flag=0,i=87009,u=0.15060201263445305,v=0.9526823209642867,w=0.5091184802785791,x=2.3268436901379306 -color=blue,shape=triangle,flag=1,i=87013,u=0.020116121842534085,v=0.25635180042008754,w=0.4948032078553967,x=5.439475014913131 -color=purple,shape=square,flag=0,i=87017,u=0.783648275792587,v=0.02340576806594241,w=0.5340442822042968,x=4.881974126747804 -color=blue,shape=circle,flag=1,i=87022,u=0.42136803817120383,v=0.7131486953510967,w=0.5093248294858664,x=5.468675937919926 -color=red,shape=circle,flag=0,i=87080,u=0.50695904929708,v=0.45362813092781795,w=0.5002424650267973,x=4.416628162677404 -color=blue,shape=square,flag=1,i=87082,u=0.5911521642027565,v=0.4720656349088185,w=0.49510426570538496,x=5.7692674352098985 -color=blue,shape=triangle,flag=1,i=87083,u=0.4296989532318465,v=0.9371168543502997,w=0.49531661348596145,x=5.2322044274594575 -color=yellow,shape=circle,flag=1,i=87108,u=0.3246411752422569,v=0.3644432284212491,w=0.4968276436683879,x=2.8080934642277473 -color=red,shape=triangle,flag=1,i=87109,u=0.4493685440024452,v=0.16826268546764256,w=0.48580962454749893,x=5.166151101612523 -color=red,shape=circle,flag=1,i=87113,u=0.5317233378110757,v=0.45055848630920664,w=0.4930285204979886,x=4.585538506531893 -color=purple,shape=square,flag=0,i=87119,u=0.7427966349427934,v=0.2222935928238179,w=0.5330710139192982,x=5.4924322667759355 -color=red,shape=circle,flag=0,i=87149,u=0.9236325375565893,v=0.9832729896877908,w=0.497548945316094,x=6.71540062485585 -color=red,shape=square,flag=0,i=87154,u=0.8028538910089711,v=0.6025610722494016,w=0.5014357913252403,x=4.8481044995948155 -color=red,shape=square,flag=0,i=87156,u=0.2681937779542889,v=0.46910428355996714,w=0.49944434596958537,x=3.8667157964383563 -color=red,shape=circle,flag=0,i=87160,u=0.7913245583599238,v=0.8821033627387526,w=0.5002065748823282,x=5.878072480622866 -color=red,shape=square,flag=0,i=87166,u=0.2337740963749929,v=0.7911502694649526,w=0.4997634201960948,x=5.67127583019391 -color=yellow,shape=square,flag=1,i=87171,u=0.014463649390616617,v=0.9837926714492485,w=0.49980358969649386,x=5.0111706027673275 -color=red,shape=square,flag=0,i=87174,u=0.1562566929126603,v=0.4290665500761336,w=0.5022801380970983,x=6.902420474152438 -color=yellow,shape=triangle,flag=1,i=87175,u=0.2375611414097496,v=0.9852052086053142,w=0.48030668773323715,x=5.435750356155446 -color=red,shape=circle,flag=0,i=87196,u=0.5697177596331662,v=0.637137927512288,w=0.504765268428757,x=6.521184641043341 -color=purple,shape=circle,flag=0,i=87212,u=0.23853054657683792,v=0.30855453350224804,w=0.5174371327855982,x=3.803679566057577 -color=red,shape=triangle,flag=0,i=87219,u=0.038974881726389854,v=0.4389225463461832,w=0.4918740234305623,x=5.4559847697751165 -color=red,shape=square,flag=0,i=87245,u=0.4243200031812161,v=0.6031112292826726,w=0.5052494099934095,x=6.593335216985331 -color=blue,shape=triangle,flag=0,i=87258,u=0.7138077066588048,v=0.3378096019743009,w=0.500106561267031,x=4.272743149102255 -color=red,shape=square,flag=0,i=87268,u=0.6205255682269005,v=0.14147893469504425,w=0.4986622808073623,x=4.0627699524514505 -color=orange,shape=triangle,flag=1,i=87269,u=0.47319505589017075,v=0.9294545364714185,w=0.47238614038576715,x=6.537923118990357 -color=yellow,shape=triangle,flag=0,i=87272,u=0.9428402660452866,v=0.32186434896555915,w=0.4816828497633597,x=6.098183066730402 -color=red,shape=triangle,flag=1,i=87282,u=0.15992551794282983,v=0.19890216072920908,w=0.48335744664048497,x=3.07125232146341 -color=purple,shape=triangle,flag=0,i=87312,u=0.3129854564713729,v=0.3792399653791011,w=0.46563231823560597,x=4.324967003807103 -color=green,shape=triangle,flag=0,i=87316,u=0.2758544471060357,v=0.01365600095224595,w=0.5145523126691295,x=4.40742003013768 -color=blue,shape=square,flag=0,i=87319,u=0.7766391040883234,v=0.5644225008050158,w=0.49294593580993085,x=4.788165323074899 -color=purple,shape=triangle,flag=0,i=87329,u=0.5094893133094806,v=0.22450526042029795,w=0.46577525630662003,x=4.628604062422395 -color=blue,shape=circle,flag=1,i=87332,u=0.3112964381397433,v=0.2709314163445954,w=0.5011548045349941,x=5.540669535555615 -color=red,shape=square,flag=0,i=87333,u=0.7583388587589652,v=0.9390969035285209,w=0.49886046786225685,x=3.5612480004500107 -color=yellow,shape=triangle,flag=1,i=87338,u=0.9526867008363316,v=0.853135758386563,w=0.4799509587136798,x=5.439724371904723 -color=green,shape=circle,flag=0,i=87345,u=0.08237352314777191,v=0.47981501485082045,w=0.5192264472047406,x=6.017654059187713 -color=green,shape=square,flag=0,i=87346,u=0.4837984364895892,v=0.08212342594685296,w=0.4989424517518087,x=4.591124046680975 -color=purple,shape=square,flag=0,i=87366,u=0.7989598073281962,v=0.5096502141039582,w=0.5316381787772568,x=3.8789339926634394 -color=purple,shape=triangle,flag=0,i=87376,u=0.3034489146837266,v=0.46111355683416066,w=0.48148090892523454,x=5.720528951331072 -color=red,shape=square,flag=1,i=87379,u=0.5459049549584437,v=0.8615964143320817,w=0.49783457770364803,x=5.134484027998303 -color=green,shape=circle,flag=0,i=87406,u=0.9629137203360748,v=0.8123086572355038,w=0.5142570052810861,x=4.1534557070311955 -color=red,shape=square,flag=1,i=87407,u=0.14770150341212673,v=0.903512495403854,w=0.49567081691264325,x=6.258395988913281 -color=yellow,shape=square,flag=1,i=87417,u=0.28002856110177954,v=0.29795833570702346,w=0.4910092411864575,x=6.3136532508126875 -color=red,shape=circle,flag=1,i=87420,u=0.25127736636236975,v=0.32061491138408477,w=0.4943838040606187,x=4.189096851109034 -color=blue,shape=circle,flag=1,i=87446,u=0.4232332637130508,v=0.8264736455737158,w=0.5016118864032161,x=4.170665868518532 -color=blue,shape=circle,flag=1,i=87448,u=0.7457723861278099,v=0.8397272154116819,w=0.5035069083706825,x=6.556715538294082 -color=red,shape=square,flag=1,i=87450,u=0.5095886815351525,v=0.6065178517378399,w=0.5085299762015498,x=3.817158298641582 -color=red,shape=triangle,flag=0,i=87455,u=0.3305395678687296,v=0.062119313495134,w=0.49220585645772924,x=4.723193491004722 -color=purple,shape=triangle,flag=0,i=87474,u=0.9216356208770554,v=0.30720940279440767,w=0.4910691774582122,x=5.872878787578732 -color=red,shape=square,flag=0,i=87477,u=0.9137390773740979,v=0.843296298890668,w=0.510708864248982,x=5.2314432010903555 -color=red,shape=triangle,flag=0,i=87483,u=0.4498803349383491,v=0.8349484721387818,w=0.49481789053919684,x=4.473596701715838 -color=red,shape=triangle,flag=0,i=87488,u=0.9856802834929906,v=0.817445756075083,w=0.49833987780253874,x=4.842297329187473 -color=green,shape=square,flag=0,i=87501,u=0.41969716607526797,v=0.41246822835741026,w=0.4729790463334082,x=5.841410534093214 -color=red,shape=triangle,flag=1,i=87504,u=0.446005237631788,v=0.8272206360039658,w=0.4974427116274343,x=6.098135903248214 -color=red,shape=square,flag=0,i=87506,u=0.6357719216821314,v=0.6970867759393995,w=0.4940826462055272,x=6.351579417310387 -color=green,shape=triangle,flag=1,i=87508,u=0.07749125283097746,v=0.7997042551392148,w=0.5288478155217743,x=5.007411503973972 -color=green,shape=circle,flag=0,i=87513,u=0.9584890321396345,v=0.9071482496705534,w=0.5028355537497216,x=7.487895566803419 -color=blue,shape=square,flag=1,i=87537,u=0.49259738352949933,v=0.30088238308609916,w=0.5063911292326709,x=5.952328499006593 -color=red,shape=circle,flag=0,i=87540,u=0.5905461065786989,v=0.623179466125097,w=0.47874817004071524,x=3.5231833476979104 -color=green,shape=square,flag=0,i=87544,u=0.5133449964213642,v=0.49937712662022526,w=0.46134939808677317,x=5.78306778786595 -color=red,shape=triangle,flag=0,i=87546,u=0.9969563940686739,v=0.7499973912247889,w=0.49448365391989535,x=7.36954257910979 -color=yellow,shape=triangle,flag=1,i=87561,u=0.13496025290854552,v=0.5217498986523218,w=0.48551447548341087,x=3.5577946657011092 -color=blue,shape=square,flag=0,i=87567,u=0.7463183377611071,v=0.825252332938222,w=0.5068189472967893,x=6.93171207010579 -color=yellow,shape=square,flag=1,i=87580,u=0.4416790184735747,v=0.13950659864761872,w=0.5085852140115215,x=4.931998239207409 -color=red,shape=triangle,flag=0,i=87585,u=0.3357458308660205,v=0.987787257675211,w=0.4982976228692731,x=5.199558010519528 -color=red,shape=square,flag=0,i=87592,u=0.4901879899763838,v=0.14587122114775153,w=0.49458437920692955,x=4.845752511490685 -color=blue,shape=circle,flag=1,i=87599,u=0.07372513228168276,v=0.5864060917603757,w=0.5045085623235273,x=6.42278126360607 -color=yellow,shape=square,flag=1,i=87621,u=0.9075173707301951,v=0.05143325135168264,w=0.5122879298678802,x=5.276269449222794 -color=purple,shape=square,flag=0,i=87638,u=0.6499955143261992,v=0.5178349881169059,w=0.5369289114554097,x=4.349514278885358 -color=blue,shape=triangle,flag=0,i=87651,u=0.17807658049029917,v=0.579104218035652,w=0.4870918822315874,x=4.675223662724696 -color=green,shape=circle,flag=0,i=87655,u=0.2884037929853277,v=0.6397445195072545,w=0.5098688603427093,x=3.574153588066576 -color=yellow,shape=triangle,flag=1,i=87661,u=0.5672323779767716,v=0.2814294745384365,w=0.4838183495729003,x=4.974573059595241 -color=yellow,shape=square,flag=1,i=87667,u=0.7705906347934989,v=0.667636326193905,w=0.5082772307126497,x=6.125310716375598 -color=orange,shape=square,flag=0,i=87676,u=0.06101771810283574,v=0.68747202343077,w=0.4977162098081796,x=5.86366195486773 -color=purple,shape=square,flag=0,i=87677,u=0.3611207259034017,v=0.42341141436130003,w=0.5280384429543278,x=4.8796170389126745 -color=red,shape=circle,flag=1,i=87679,u=0.6327931231418402,v=0.6354081948441541,w=0.479977026205797,x=4.971796343510399 -color=green,shape=circle,flag=0,i=87694,u=0.05850798902155985,v=0.1494250980937728,w=0.5062962141692333,x=4.791005887808977 -color=red,shape=circle,flag=0,i=87703,u=0.022716756783163983,v=-0.04550339558289733,w=0.4763622882951251,x=5.041071040355236 -color=red,shape=square,flag=0,i=87705,u=0.18562161738142502,v=0.21310243818378483,w=0.4723122607157748,x=4.132081540406548 -color=red,shape=square,flag=0,i=87708,u=0.6374982811884574,v=0.6099608499400054,w=0.47461686349453747,x=5.949395991206852 -color=red,shape=square,flag=0,i=87718,u=0.8053219066168321,v=0.1720154947794349,w=0.46953125756802383,x=4.5503332287909375 -color=yellow,shape=square,flag=1,i=87763,u=0.6622352625341551,v=0.7516914590682935,w=0.5018600368415771,x=5.900068161467413 -color=red,shape=triangle,flag=1,i=87769,u=0.030763315524464097,v=0.048046419497038806,w=0.5014969377401141,x=3.453336043496867 -color=red,shape=circle,flag=1,i=87779,u=0.7596985781043656,v=0.676769507947792,w=0.4926600813762199,x=4.828095546150267 -color=red,shape=circle,flag=0,i=87787,u=0.8039494723040335,v=0.8386905755444028,w=0.4944790747453228,x=6.269379475769703 -color=yellow,shape=square,flag=1,i=87790,u=0.7921866752048135,v=0.6308460604509636,w=0.4984727741059736,x=3.276324692412942 -color=blue,shape=square,flag=0,i=87830,u=0.10265836567897935,v=0.32638461078657655,w=0.5119714005506554,x=4.269124842881164 -color=yellow,shape=square,flag=1,i=87849,u=0.35442688806057465,v=0.24892532566113024,w=0.5074146618757114,x=4.348844746556087 -color=yellow,shape=square,flag=0,i=87850,u=0.2832641207530461,v=0.6254350874744813,w=0.5107725636659052,x=5.194552452114789 -color=blue,shape=triangle,flag=1,i=87859,u=0.265352957757781,v=0.4494794970773357,w=0.4993155680014865,x=5.6815388090161525 -color=green,shape=circle,flag=0,i=87891,u=0.7827620634015832,v=0.1489433297198135,w=0.524003633111052,x=6.9472992082066725 -color=red,shape=square,flag=0,i=87896,u=0.7293072220778287,v=0.37238776377168914,w=0.48681184506762265,x=3.926077542116739 -color=yellow,shape=square,flag=1,i=87897,u=0.3135922615958485,v=0.7797854070367942,w=0.5188429177276422,x=3.8320867814208697 -color=blue,shape=square,flag=1,i=87900,u=0.8731750371736396,v=0.14612363064889267,w=0.5149166820164824,x=5.291640592692446 -color=purple,shape=circle,flag=0,i=87903,u=0.5710166912494727,v=0.6649825509600855,w=0.5029678144574063,x=6.331869454074109 -color=red,shape=square,flag=0,i=87914,u=0.08985452983154363,v=0.3799670228687487,w=0.4815387999436772,x=4.998463990527032 -color=red,shape=circle,flag=1,i=87918,u=0.41139881394532307,v=0.38247378288693273,w=0.49395132915690565,x=5.076191747456232 -color=blue,shape=square,flag=0,i=87941,u=0.5958795474789534,v=0.9650288792488426,w=0.5130935495028425,x=3.602812164366276 -color=red,shape=circle,flag=0,i=87945,u=0.40006256299770415,v=0.38006292020666504,w=0.4995942008798641,x=4.673738376435888 -color=red,shape=square,flag=0,i=87947,u=0.08272216273078481,v=0.3112842492079485,w=0.4807278094010713,x=7.0405840627018 -color=red,shape=triangle,flag=0,i=87970,u=0.2990669127338327,v=0.2983260640711731,w=0.4499446747220163,x=3.542906066728784 -color=red,shape=triangle,flag=0,i=87977,u=0.6720015430475421,v=0.6546768141747031,w=0.4523995233843355,x=6.011678720585611 -color=red,shape=circle,flag=1,i=87979,u=0.07247979286484463,v=0.0471698508108894,w=0.5088250436340264,x=4.75519501453581 -color=red,shape=circle,flag=1,i=87981,u=0.6068989294457883,v=0.6460422663340607,w=0.5128038279280751,x=4.661192874383532 -color=red,shape=square,flag=0,i=87984,u=0.9737256059273646,v=0.7729558779616146,w=0.4764367960911733,x=5.3797986546814585 -color=blue,shape=circle,flag=0,i=87992,u=0.9985033118469864,v=0.02168487276952369,w=0.4949114601289796,x=5.364779836670457 -color=green,shape=circle,flag=1,i=87994,u=0.7531148833988812,v=0.9261500889434449,w=0.5166640413149932,x=4.396605345009767 -color=yellow,shape=square,flag=1,i=87996,u=0.38369376198210003,v=0.5566287163925541,w=0.5158700170155865,x=4.792051124659165 -color=orange,shape=triangle,flag=0,i=88012,u=0.6557121007590262,v=0.8965621337880214,w=0.470066456294922,x=6.929231187046221 -color=red,shape=circle,flag=1,i=88027,u=0.21452854786405895,v=0.1321154858776587,w=0.5060835569286852,x=7.478139592018818 -color=red,shape=triangle,flag=1,i=88030,u=0.50005049712499,v=0.3839754040397897,w=0.4538518356649542,x=3.4029927914529083 -color=blue,shape=circle,flag=0,i=88033,u=0.03295136399070908,v=0.009081578674498325,w=0.49940792861127686,x=3.1228103797439855 -color=green,shape=circle,flag=0,i=88036,u=0.9579150604888034,v=0.9750840934204242,w=0.5123161351823644,x=5.335261121705259 -color=red,shape=square,flag=0,i=88043,u=0.5082609379666647,v=0.3346382317779304,w=0.4719707245196532,x=4.190726172776387 -color=blue,shape=square,flag=1,i=88058,u=0.4362165492248087,v=0.9819564009555275,w=0.5024352513790827,x=5.873017249856111 -color=purple,shape=square,flag=0,i=88064,u=0.611716423366671,v=0.7664955317248566,w=0.5321640403274255,x=4.691068621855334 -color=red,shape=circle,flag=0,i=88074,u=0.6522860975095488,v=0.6400444572683154,w=0.5119191624131018,x=4.654239128564439 -color=green,shape=square,flag=0,i=88077,u=0.41702052797594,v=0.3608576346836717,w=0.4652760468633792,x=3.231321835357653 -color=blue,shape=triangle,flag=0,i=88079,u=0.11834371397672705,v=0.36934516933707107,w=0.4968956949052766,x=5.861846605882917 -color=blue,shape=square,flag=1,i=88111,u=0.7737321083499213,v=0.7449057893591654,w=0.5001277224089868,x=3.614796219609024 -color=purple,shape=square,flag=1,i=88154,u=0.5007069292369971,v=0.8848441362135548,w=0.5336571678728803,x=3.903699498236351 -color=red,shape=triangle,flag=0,i=88157,u=0.0040382138447428995,v=0.49961042780152,w=0.4649976121869656,x=5.229330772299352 -color=red,shape=triangle,flag=0,i=88169,u=0.632171508310568,v=0.22423952987051454,w=0.45894490445334934,x=4.965656457765346 -color=purple,shape=circle,flag=0,i=88177,u=0.7193478718530358,v=0.7037935662217834,w=0.5125738582429837,x=6.948251558917331 -color=yellow,shape=circle,flag=1,i=88183,u=0.300966752521977,v=0.605296042977697,w=0.5098839352828569,x=4.8694716549020525 -color=purple,shape=triangle,flag=1,i=88218,u=0.707582945503699,v=0.16975279619447947,w=0.486476878621979,x=5.2344891495961505 -color=red,shape=triangle,flag=1,i=88237,u=0.9906153518323846,v=0.13380935887238754,w=0.4723496902095573,x=4.760369181150268 -color=red,shape=square,flag=1,i=88272,u=0.2715281311275948,v=0.2802889951960974,w=0.49818875677272034,x=3.3657936216185127 -color=blue,shape=square,flag=1,i=88275,u=0.5163824267332552,v=0.49087223410583103,w=0.49415676301769174,x=5.236009850217315 -color=red,shape=square,flag=0,i=88298,u=0.8673710607527264,v=0.8391348445986926,w=0.49626304176160374,x=4.984579988423242 -color=red,shape=square,flag=1,i=88301,u=0.3769469350596182,v=0.6593199090560792,w=0.49786516711451045,x=2.867732981018023 -color=red,shape=triangle,flag=1,i=88306,u=0.1292428394146602,v=0.34457066502641287,w=0.46476446363278606,x=3.312102546024265 -color=red,shape=circle,flag=1,i=88314,u=0.14627648175402486,v=0.14624736644861613,w=0.49126944914279785,x=4.033456311496372 -color=yellow,shape=square,flag=0,i=88333,u=0.25041763463660793,v=0.9495420481713808,w=0.5065378670818175,x=4.583058663808659 -color=red,shape=square,flag=0,i=88336,u=0.6433292334580075,v=0.5885111352213954,w=0.5013705027763812,x=5.878979246545559 -color=purple,shape=square,flag=0,i=88340,u=0.056072203415901356,v=0.48033821150897216,w=0.5212617413156152,x=5.538166407723655 -color=yellow,shape=circle,flag=1,i=88347,u=0.060741073922975675,v=0.49782097598943464,w=0.5061057524132392,x=5.480905699232227 -color=red,shape=square,flag=1,i=88361,u=0.8352673940161575,v=0.527743128001706,w=0.49877548072170935,x=6.852602576121783 -color=purple,shape=triangle,flag=1,i=88375,u=0.9101887436521007,v=0.17622880698439491,w=0.48815545596037374,x=3.604371076687747 -color=blue,shape=circle,flag=1,i=88378,u=0.9915167482992112,v=0.014069971967963224,w=0.49481925379443886,x=5.37913964666594 -color=red,shape=square,flag=0,i=88394,u=0.6632149147813329,v=0.08794973470826617,w=0.47895434146417604,x=3.5061002170922304 -color=red,shape=square,flag=1,i=88400,u=0.10095891837842952,v=0.6169852840627512,w=0.48349268052813876,x=4.03206087029174 -color=blue,shape=triangle,flag=0,i=88406,u=0.6993042699745837,v=0.544764220669782,w=0.4907896571214816,x=4.996625876449597 -color=yellow,shape=triangle,flag=1,i=88437,u=0.6822545874837266,v=0.6251588777823828,w=0.49375391144443836,x=2.7494710587771016 -color=red,shape=triangle,flag=1,i=88444,u=0.039918692115316734,v=0.5875031989615571,w=0.4842669497874155,x=4.718663395905376 -color=blue,shape=circle,flag=1,i=88458,u=0.3846298871904309,v=0.8956562953164224,w=0.489377318417961,x=4.3378875540250945 -color=purple,shape=triangle,flag=0,i=88465,u=0.7400965090278344,v=0.2307244941921872,w=0.48832278194004997,x=3.724216634214372 -color=red,shape=triangle,flag=0,i=88476,u=0.2159949287669335,v=0.9360632312665199,w=0.48737371383798067,x=5.54180270857389 -color=orange,shape=square,flag=1,i=88490,u=0.6062372900083869,v=0.9765246338376521,w=0.49947082060985737,x=5.719071638903 -color=green,shape=circle,flag=0,i=88501,u=0.9821750218017179,v=0.8705095781919526,w=0.5114787011440788,x=5.11356123121372 -color=red,shape=circle,flag=0,i=88503,u=0.04864990921591128,v=0.14600142797984408,w=0.4974380001512097,x=5.781925216655537 -color=yellow,shape=circle,flag=1,i=88508,u=0.26385912551351187,v=0.8814871931558996,w=0.5159777449917443,x=5.103907573502464 -color=orange,shape=circle,flag=0,i=88514,u=0.8215904602436896,v=0.3876439912523567,w=0.49517085430527685,x=4.472961309508148 -color=yellow,shape=square,flag=0,i=88526,u=0.8773724758592496,v=0.7373423563352277,w=0.4946927555356018,x=4.698380929213007 -color=purple,shape=triangle,flag=0,i=88536,u=0.6077129492869676,v=0.9083735281192004,w=0.4949179846207753,x=4.259416062243471 -color=red,shape=triangle,flag=1,i=88544,u=0.5627375390411199,v=0.8386631019958997,w=0.4828884370601367,x=2.6548670752056753 -color=blue,shape=triangle,flag=0,i=88551,u=0.82630636997486,v=0.6291173904518748,w=0.47591740974177127,x=3.6505045385805275 -color=red,shape=square,flag=0,i=88567,u=0.5644112393570121,v=0.18322688507602947,w=0.5044452008196995,x=5.673381218978144 -color=red,shape=square,flag=0,i=88570,u=0.259308940351339,v=0.7875302838370638,w=0.5058220613074879,x=5.152908148900953 -color=purple,shape=triangle,flag=0,i=88578,u=0.6627371565900392,v=0.9310278364107417,w=0.49904926629768687,x=4.206143897803815 -color=purple,shape=circle,flag=0,i=88579,u=0.9312823471550226,v=0.7789533782872469,w=0.5020912237035545,x=3.5164498199179213 -color=red,shape=square,flag=1,i=88597,u=0.46098167944675017,v=0.07283217942437248,w=0.5057623997420375,x=3.1861470177463507 -color=green,shape=triangle,flag=0,i=88598,u=0.2779705597866634,v=0.8301719320663272,w=0.5404614949138474,x=3.729476436503088 -color=blue,shape=square,flag=1,i=88601,u=0.9109874211020059,v=0.5098284367933799,w=0.4956215027885098,x=3.918788094046096 -color=yellow,shape=triangle,flag=1,i=88604,u=0.3525556620209537,v=0.3867002936036744,w=0.4940104932522002,x=4.616777243034125 -color=yellow,shape=triangle,flag=1,i=88631,u=0.2555074756813629,v=0.4507924446521573,w=0.4954163395035782,x=5.455912284252989 -color=yellow,shape=triangle,flag=1,i=88649,u=0.9541692664215917,v=0.758698677489762,w=0.5000814389058308,x=6.215063038946362 -color=blue,shape=square,flag=0,i=88657,u=0.37752845687915515,v=0.5931136641898378,w=0.486148312478229,x=7.669653349683045 -color=yellow,shape=square,flag=1,i=88658,u=0.2962771241075962,v=0.47394598039108493,w=0.5077184527911259,x=5.673908119166579 -color=red,shape=square,flag=0,i=88660,u=0.8012595968633182,v=0.9295623324899136,w=0.5103369532672469,x=3.843542927629272 -color=yellow,shape=circle,flag=1,i=88668,u=0.832863678136198,v=0.9270281236704438,w=0.5131235089092736,x=6.206566962678607 -color=green,shape=circle,flag=0,i=88675,u=0.2779058390325091,v=0.7727500037862135,w=0.5173837450201316,x=5.331243044083203 -color=blue,shape=triangle,flag=1,i=88706,u=0.5022897075484847,v=0.7398779485309679,w=0.4825058422158058,x=4.182932971790497 -color=purple,shape=square,flag=0,i=88717,u=0.9988289623611757,v=0.4988894788232766,w=0.5124386181279549,x=3.2182954663505434 -color=green,shape=circle,flag=0,i=88726,u=0.7864078589372331,v=0.7882769931966768,w=0.5203253586083161,x=5.5144131250341255 -color=purple,shape=triangle,flag=0,i=88729,u=0.7110849578310664,v=0.534067477762772,w=0.490380122311564,x=3.0835743066496364 -color=orange,shape=triangle,flag=0,i=88731,u=0.730641446947837,v=0.02055110282292305,w=0.479931591934255,x=6.924750095021172 -color=purple,shape=square,flag=0,i=88737,u=0.30370509236896226,v=0.8120553356278055,w=0.5075231511444706,x=4.533714981212117 -color=green,shape=square,flag=0,i=88744,u=0.7057167651257295,v=0.4838942291361874,w=0.46921129053654415,x=7.978526733640109 -color=purple,shape=square,flag=0,i=88777,u=0.774379949039789,v=0.8717785176743207,w=0.515407615352064,x=5.711434410734145 -color=purple,shape=square,flag=0,i=88787,u=0.8371630597755065,v=0.6943153660331514,w=0.5193481029899407,x=6.417195174812719 -color=red,shape=triangle,flag=0,i=88792,u=0.21918936774909303,v=0.7786280833469691,w=0.48410862668392096,x=6.720409924536409 -color=blue,shape=square,flag=0,i=88797,u=0.08552224821362053,v=0.9087191374852543,w=0.4886691930034402,x=6.464754293558916 -color=blue,shape=triangle,flag=0,i=88800,u=0.10468181952469902,v=0.21650350166773713,w=0.47951057763321253,x=6.243838155254253 -color=red,shape=triangle,flag=0,i=88806,u=0.022022736320014946,v=0.8985328771999243,w=0.487504551771972,x=3.719350478839578 -color=blue,shape=triangle,flag=0,i=88809,u=0.7408579450275424,v=0.09014740028937729,w=0.4773694923779749,x=4.849912525703252 -color=green,shape=circle,flag=1,i=88814,u=0.888135437977485,v=0.5535016119426845,w=0.5192864338601159,x=4.5509814659145595 -color=blue,shape=square,flag=0,i=88829,u=0.9535279568548674,v=0.15048532155582217,w=0.48971550709894085,x=5.865885884538478 -color=purple,shape=triangle,flag=0,i=88837,u=0.4093518607280927,v=0.08880414630880318,w=0.48341927521745753,x=5.361301869286393 -color=purple,shape=triangle,flag=0,i=88841,u=0.18324546638714145,v=0.035391140611822136,w=0.4826496591937977,x=2.5072569345106923 -color=red,shape=square,flag=0,i=88870,u=0.939072169241531,v=0.973363940636961,w=0.5123100100025192,x=2.852636585719953 -color=red,shape=square,flag=1,i=88871,u=0.7336985093936491,v=0.07183632110641358,w=0.5118799741224445,x=5.148500229718575 -color=red,shape=square,flag=0,i=88875,u=0.6683138367209588,v=0.9606514391691601,w=0.5075376322572759,x=6.8283250705078915 -color=green,shape=circle,flag=0,i=88886,u=0.9954509019734094,v=0.989326006815659,w=0.5249846241275673,x=5.193775448437145 -color=green,shape=square,flag=0,i=88887,u=0.20167268551713202,v=0.48024813055520477,w=0.47603451899533994,x=3.330281753131296 -color=blue,shape=square,flag=1,i=88899,u=0.0001881939925673093,v=0.011642740454585132,w=0.48760710891177944,x=3.8824332474753724 -color=green,shape=triangle,flag=0,i=88900,u=0.15685186323460454,v=0.23951406231195416,w=0.5145058917451085,x=5.61328595501674 -color=red,shape=triangle,flag=1,i=88901,u=0.6750501788591787,v=0.45652468849441274,w=0.48782070685331175,x=4.63126163820595 -color=blue,shape=triangle,flag=1,i=88911,u=0.14553976478384933,v=0.843240912542431,w=0.4848300110946718,x=3.668749854578589 -color=green,shape=square,flag=0,i=88919,u=0.04188189450383273,v=0.5241212375589694,w=0.48221761163587984,x=4.210961178884712 -color=red,shape=triangle,flag=0,i=88929,u=0.4514220268704663,v=0.45625772873157455,w=0.49847921318025606,x=3.6719466196879433 -color=red,shape=circle,flag=1,i=88943,u=0.9688549980967243,v=1.0286459256891882,w=0.4905745574823278,x=2.9692068183076246 -color=red,shape=square,flag=1,i=88949,u=0.4588253638837526,v=0.8608710332573164,w=0.49810480756865183,x=5.014791203332805 -color=green,shape=triangle,flag=0,i=88970,u=0.6533937418009187,v=0.6959936468051435,w=0.520186454910893,x=6.086419264019727 -color=red,shape=triangle,flag=0,i=88986,u=0.22177929590252532,v=0.002299553729503745,w=0.4911305349864925,x=5.316233104081186 -color=red,shape=triangle,flag=0,i=88989,u=0.5929008035969083,v=0.8799512854665865,w=0.49435635418647006,x=6.111757131042782 -color=yellow,shape=square,flag=1,i=88993,u=0.6984705400493004,v=0.46321722682722677,w=0.505696986850224,x=6.309180698105859 -color=purple,shape=triangle,flag=0,i=88997,u=0.8846615099739226,v=0.5383981091673841,w=0.48035176954474035,x=6.296836836948955 -color=blue,shape=square,flag=0,i=89000,u=0.3121216311085495,v=0.7587451701463619,w=0.4953390075820551,x=6.537922019910994 -color=green,shape=circle,flag=0,i=89010,u=0.698922603424709,v=0.1099616325320324,w=0.51675316993946,x=3.755133998984684 -color=yellow,shape=circle,flag=1,i=89023,u=0.7782015356083248,v=0.3618989464534593,w=0.49678376836570737,x=6.636603653767602 -color=orange,shape=triangle,flag=1,i=89047,u=0.3330941702327105,v=0.02833885861372576,w=0.4849023805442175,x=5.110456238441714 -color=red,shape=circle,flag=0,i=89080,u=0.04330257542826388,v=0.12759922430013998,w=0.4800401127378481,x=6.1837272662888765 -color=red,shape=triangle,flag=1,i=89089,u=0.03549709072673535,v=0.5154466593325573,w=0.484443296847137,x=5.692110499604396 -color=red,shape=triangle,flag=0,i=89100,u=0.8436577119045815,v=0.8615992331585086,w=0.48541591264052014,x=4.947538335385587 -color=blue,shape=circle,flag=1,i=89101,u=0.8727359786172227,v=0.06222594055627939,w=0.49714720518634276,x=4.5827531498795375 -color=red,shape=square,flag=0,i=89119,u=0.42155946361675223,v=0.38935174715012955,w=0.49516123934045936,x=4.13693934062463 -color=red,shape=triangle,flag=0,i=89145,u=0.3731165384253897,v=0.04169630232505683,w=0.4809022469322787,x=3.8663124019589574 -color=red,shape=triangle,flag=0,i=89149,u=0.049802211389571416,v=0.42060538701272976,w=0.48568249392618523,x=4.551942896755848 -color=purple,shape=triangle,flag=0,i=89154,u=0.4758808978776726,v=0.23910297509300804,w=0.48301566137970414,x=5.774411077261264 -color=yellow,shape=square,flag=1,i=89156,u=0.7428578549992408,v=0.8620632674915779,w=0.5086395397469757,x=5.669823563821919 -color=red,shape=square,flag=0,i=89161,u=0.15774359481765832,v=0.9371804513993472,w=0.507388374891406,x=4.981898876618663 -color=red,shape=triangle,flag=1,i=89162,u=0.04177782773807748,v=0.520993421335663,w=0.483141383554438,x=4.8138020275768065 -color=red,shape=triangle,flag=1,i=89167,u=0.009718102420543606,v=0.0861070024391587,w=0.4863618768682354,x=6.301609716480578 -color=red,shape=square,flag=0,i=89188,u=0.9920351410141162,v=0.5355857031762932,w=0.49213289682984623,x=4.403213905031578 -color=purple,shape=circle,flag=0,i=89191,u=0.165614540877152,v=0.23211381880542892,w=0.5094817000748718,x=3.9239741532289796 -color=green,shape=square,flag=0,i=89203,u=0.6506481185492858,v=0.08136335408786188,w=0.49342981285369464,x=4.930528223872577 -color=red,shape=square,flag=0,i=89227,u=0.8157497657540733,v=0.993822325658967,w=0.48275573434263963,x=3.3473140285453318 -color=red,shape=square,flag=1,i=89242,u=0.7422649121079717,v=0.928729372288155,w=0.48255448793009226,x=5.367694373384597 -color=purple,shape=square,flag=0,i=89254,u=0.709522561361518,v=0.5841387945197102,w=0.5227834622350629,x=3.9183653583589617 -color=red,shape=circle,flag=0,i=89270,u=0.26766304588677525,v=0.2931224020148894,w=0.49467775224965294,x=6.2894810850804355 -color=red,shape=triangle,flag=1,i=89271,u=0.5543210532891159,v=0.35239372696630067,w=0.4900184062341633,x=5.145154515991534 -color=red,shape=circle,flag=1,i=89285,u=0.2904610383624747,v=0.36651291446621154,w=0.492997225144362,x=4.785746587497086 -color=red,shape=triangle,flag=0,i=89294,u=0.8229433094768309,v=0.7157285621811823,w=0.49239457003609943,x=5.81756397199988 -color=red,shape=square,flag=0,i=89295,u=0.14595392167202892,v=0.04299005731318595,w=0.4936833751547652,x=3.5234047640517345 -color=red,shape=circle,flag=1,i=89301,u=0.7186925246474581,v=0.7711611862820316,w=0.48824777155271804,x=4.995108959536832 -color=red,shape=square,flag=0,i=89324,u=0.1264975061870569,v=0.9655632668160816,w=0.5025961142188484,x=5.5438565525161 -color=yellow,shape=square,flag=0,i=89359,u=0.3672555343730993,v=0.23477276791238189,w=0.5017554974672566,x=4.605279929439107 -color=green,shape=square,flag=0,i=89367,u=0.1472478300497796,v=0.2904489594227754,w=0.48353992788891126,x=5.187965304496066 -color=purple,shape=square,flag=0,i=89372,u=0.9714797414438361,v=0.9127078177889117,w=0.526987160867719,x=6.227534026265386 -color=purple,shape=square,flag=0,i=89396,u=0.5171045995792689,v=0.5937636516263206,w=0.5278451368899363,x=4.4676615107009505 -color=green,shape=circle,flag=0,i=89398,u=0.1987689325626627,v=0.47719159828682356,w=0.5092297342386748,x=3.048411407762402 -color=red,shape=triangle,flag=0,i=89400,u=0.0019438518296458485,v=0.4004359510760367,w=0.494379567558679,x=5.874772155590041 -color=yellow,shape=triangle,flag=1,i=89416,u=0.13575226120459194,v=0.16210411194059415,w=0.5084848690320436,x=6.270440295079358 -color=red,shape=triangle,flag=1,i=89423,u=0.4082297034059267,v=0.1303373109056687,w=0.4861950038528154,x=4.862219156423197 -color=red,shape=square,flag=1,i=89432,u=0.6866882539759991,v=0.46814437228637296,w=0.5012549506028816,x=5.599682066189068 -color=purple,shape=triangle,flag=0,i=89443,u=0.025326489777993566,v=0.9281749697689827,w=0.4920211863446441,x=2.9054869594098247 -color=red,shape=triangle,flag=1,i=89463,u=0.5752115786540709,v=0.4866678216887339,w=0.4933909721995991,x=6.805064707529792 -color=purple,shape=square,flag=0,i=89468,u=0.6029258317191418,v=0.9202105009591189,w=0.5275366717839259,x=2.6930687460118965 -color=red,shape=circle,flag=1,i=89472,u=0.23599622934598585,v=0.21026494183424715,w=0.4945905759652379,x=6.968680553472493 -color=red,shape=triangle,flag=0,i=89474,u=0.05699425071104147,v=0.4232870356766806,w=0.4972148939655111,x=4.707009608677642 -color=green,shape=circle,flag=0,i=89491,u=0.24201211293506764,v=0.5395674338577402,w=0.5093550332081724,x=5.152275005935069 -color=yellow,shape=square,flag=1,i=89493,u=0.2808229998933893,v=0.1851635544347222,w=0.49398036951730545,x=3.453856926780093 -color=purple,shape=circle,flag=0,i=89494,u=0.8652334830838943,v=0.39197818124783146,w=0.5079842532565122,x=4.643017885441312 -color=red,shape=circle,flag=1,i=89499,u=0.5325067884305689,v=0.5682824793337954,w=0.506835987695379,x=5.527214827915017 -color=purple,shape=triangle,flag=1,i=89506,u=0.7276524648761041,v=0.16642757876490766,w=0.4896709470836472,x=4.957014088573877 -color=orange,shape=circle,flag=0,i=89524,u=0.5185893756925903,v=0.8259011938287191,w=0.497517953583872,x=5.98959438949182 -color=red,shape=circle,flag=1,i=89530,u=0.36643160507537975,v=0.33315339269392114,w=0.4998978225566717,x=3.366789782844395 -color=blue,shape=triangle,flag=1,i=89537,u=0.2895967231160067,v=0.19333516954326402,w=0.5016399412530849,x=3.8500024543136795 -color=purple,shape=triangle,flag=0,i=89542,u=0.645510433576818,v=0.2169787920181585,w=0.4964131478510544,x=4.792044016643982 -color=purple,shape=square,flag=0,i=89543,u=0.9607729491239191,v=0.10073543431297738,w=0.5332405753196187,x=2.847024112917248 -color=yellow,shape=circle,flag=1,i=89549,u=0.38275345435331254,v=0.7754708003903482,w=0.4700033436411555,x=5.1108013552959255 -color=purple,shape=triangle,flag=1,i=89556,u=0.8368006806250886,v=0.20136398649445264,w=0.4967183477588903,x=4.221320314681726 -color=red,shape=square,flag=1,i=89557,u=0.9430156453314023,v=0.4285376246925712,w=0.5049798596749927,x=6.095571788398876 -color=blue,shape=circle,flag=1,i=89569,u=0.3370688195446372,v=0.21534325310840896,w=0.5092287946067081,x=6.747226057993529 -color=red,shape=square,flag=0,i=89607,u=0.7375634914925461,v=0.7499876766360295,w=0.5117929428525317,x=5.88407163354148 -color=red,shape=square,flag=1,i=89613,u=0.09688595796452038,v=0.8021124881038976,w=0.5110397665789819,x=5.265856001805414 -color=red,shape=triangle,flag=1,i=89614,u=0.46858131180267737,v=0.6529653826382829,w=0.488165696030253,x=5.258786671430322 -color=green,shape=triangle,flag=0,i=89616,u=0.9708058592611087,v=0.26858102507132053,w=0.5055915727727762,x=4.547747752778398 -color=blue,shape=square,flag=0,i=89633,u=0.2159489656464776,v=0.9134817567510763,w=0.5225551378566878,x=6.048240230169964 -color=yellow,shape=square,flag=1,i=89643,u=0.3643136265693401,v=0.2570533120910926,w=0.4935938818978104,x=3.5065146012606943 -color=red,shape=triangle,flag=0,i=89690,u=0.872646473460946,v=0.8976179865624867,w=0.4785419582204308,x=5.106423955556792 -color=blue,shape=circle,flag=0,i=89715,u=0.5271742504887879,v=0.8375171373215283,w=0.4980544932090869,x=1.5805938541131141 -color=orange,shape=circle,flag=1,i=89721,u=0.36871790565452167,v=0.9676600384399547,w=0.49212998870484037,x=5.435061672516423 -color=purple,shape=circle,flag=0,i=89722,u=0.8843255980609986,v=0.21308751152267535,w=0.4976755590131926,x=5.5450908514011985 -color=yellow,shape=triangle,flag=1,i=89725,u=0.5578863133084223,v=0.9115572113450849,w=0.5186292898896853,x=7.333641762114863 -color=blue,shape=square,flag=0,i=89733,u=0.5217112154592198,v=0.09486439657285706,w=0.5173974824591157,x=3.041308565438131 -color=red,shape=triangle,flag=0,i=89742,u=0.19162780991670503,v=0.6373278702216745,w=0.4897417415251563,x=3.8486004485523364 -color=purple,shape=square,flag=0,i=89754,u=0.8700037571776598,v=0.16656929485139116,w=0.5113150912109558,x=6.13129821591691 -color=red,shape=square,flag=0,i=89761,u=0.8767695232320187,v=0.45478718825421904,w=0.4976413466523611,x=6.372841963746882 -color=red,shape=circle,flag=0,i=89767,u=0.772318913665505,v=0.7995766031455851,w=0.5023608091218965,x=2.572856833660525 -color=red,shape=triangle,flag=0,i=89769,u=0.31607013930460104,v=0.7778893200423551,w=0.47963242861827393,x=3.5355435969503315 -color=red,shape=circle,flag=0,i=89771,u=0.004458599352718862,v=0.0599186543161407,w=0.49996590557240617,x=4.811493438558459 -color=red,shape=circle,flag=1,i=89773,u=0.3663274238879526,v=0.4290027156868429,w=0.5017278005792333,x=4.36742152252372 -color=blue,shape=square,flag=0,i=89777,u=0.48303418589821845,v=0.29632953976721466,w=0.5134830480126882,x=4.047561359874297 -color=red,shape=circle,flag=0,i=89782,u=0.7252373511978643,v=0.7371043475022744,w=0.4953133029535336,x=6.193311560073211 -color=red,shape=circle,flag=0,i=89788,u=0.15495864734490983,v=0.09012796305978421,w=0.49216233794231784,x=5.705060761556267 -color=red,shape=square,flag=0,i=89796,u=0.6112489222623326,v=0.869655807437518,w=0.5107268937590611,x=4.644490105247546 -color=green,shape=triangle,flag=0,i=89801,u=0.76680181513751,v=0.2588676541402922,w=0.5125946410501047,x=5.033891879438619 -color=yellow,shape=circle,flag=1,i=89830,u=0.8782139644049379,v=0.05198242018238697,w=0.48268944090968946,x=7.312346872558417 -color=red,shape=square,flag=1,i=89831,u=0.4535556036831109,v=0.4378627365277633,w=0.5211577860322459,x=3.46283701270737 -color=blue,shape=circle,flag=1,i=89856,u=0.6741055832559035,v=0.42368855134376904,w=0.5003520044696009,x=4.2467341378249355 -color=yellow,shape=triangle,flag=1,i=89874,u=0.5858143598332209,v=0.3888970086546677,w=0.530669235415513,x=5.855218122757549 -color=yellow,shape=square,flag=1,i=89875,u=0.10903073040937439,v=0.616637758826171,w=0.49834887243197634,x=2.161542870232784 -color=red,shape=square,flag=0,i=89878,u=0.9204332308249449,v=0.7253152544743801,w=0.5172478183655352,x=3.470744353802786 -color=red,shape=square,flag=0,i=89891,u=0.8887499018702762,v=0.9425581242916636,w=0.5145710486886484,x=5.556780226599233 -color=purple,shape=triangle,flag=0,i=89910,u=0.7812478494730575,v=0.00912951722420452,w=0.5112169022303502,x=5.068791667508587 -color=purple,shape=square,flag=0,i=89915,u=0.679049425764766,v=0.5101671973862475,w=0.5201903014303277,x=6.294013360441816 -color=red,shape=square,flag=0,i=89974,u=0.08626982425407559,v=0.8791010117764225,w=0.5115809823214129,x=7.680116039751927 -color=purple,shape=square,flag=1,i=89983,u=0.28452302516828565,v=0.35097593798880866,w=0.5143489248136583,x=5.764566301226548 -color=red,shape=square,flag=0,i=89987,u=0.8891411478263056,v=0.6244456675692178,w=0.5051654730104275,x=5.026299373009687 -color=blue,shape=circle,flag=1,i=89990,u=0.12378997604975961,v=0.5865543345730155,w=0.49274029275901693,x=5.044803686365359 -color=red,shape=triangle,flag=0,i=89993,u=0.0427909749227402,v=0.33612511638045894,w=0.49990058020429884,x=6.526299001101261 -color=purple,shape=square,flag=0,i=89994,u=0.658842906559141,v=0.047243179268898094,w=0.517508729401253,x=5.496981800136941 -color=red,shape=square,flag=0,i=89997,u=0.340789502875009,v=0.3593713921823164,w=0.5044492590475607,x=5.731317775015861 -color=red,shape=circle,flag=0,i=90000,u=0.17836540748161522,v=0.08775766352456943,w=0.48489469236172666,x=4.532847521368993 -color=green,shape=triangle,flag=0,i=90006,u=0.09672658588835337,v=0.6802493827824281,w=0.49974769192223695,x=5.652047000673833 -color=red,shape=triangle,flag=1,i=90014,u=0.16762030193322497,v=0.9085113550458388,w=0.4950414511211123,x=4.747421363587864 -color=blue,shape=triangle,flag=1,i=90015,u=0.3558121388962219,v=0.36000093792579346,w=0.49273128475991207,x=5.218863990723695 -color=green,shape=triangle,flag=0,i=90018,u=0.7653994122571245,v=0.9104009891319974,w=0.502822523881717,x=5.507104152535064 -color=red,shape=square,flag=1,i=90020,u=0.39587839065615826,v=0.014449645507643383,w=0.5048293371521958,x=2.0502841201810287 -color=red,shape=square,flag=0,i=90036,u=0.8420540846709074,v=0.9195475149980085,w=0.5002779408819791,x=5.375773847505244 -color=purple,shape=square,flag=0,i=90045,u=0.16297741206463356,v=0.7596519333461603,w=0.5150153396874657,x=3.3463300748721987 -color=yellow,shape=square,flag=1,i=90046,u=0.7076098069685339,v=0.7993374083205312,w=0.5017245264570126,x=5.400179483823213 -color=red,shape=square,flag=0,i=90065,u=0.5043915250951406,v=0.9126647850429106,w=0.5088897027119359,x=5.505000599463879 -color=red,shape=circle,flag=0,i=90071,u=0.15756716501853762,v=0.252972495274118,w=0.47760356254137737,x=6.1196922896522965 -color=red,shape=square,flag=0,i=90077,u=0.1954418391020637,v=0.7941955610167312,w=0.5074307953077141,x=5.429488005545071 -color=purple,shape=square,flag=0,i=90111,u=0.3447424863473555,v=0.6982847731330748,w=0.5055716767280367,x=4.547393206386748 -color=red,shape=triangle,flag=0,i=90114,u=0.1397987823444078,v=0.23708880317593284,w=0.49397481784556085,x=6.780381366779236 -color=yellow,shape=triangle,flag=1,i=90116,u=0.31901180939395335,v=0.9507107777740856,w=0.5414418960924794,x=4.6419297851089425 -color=purple,shape=triangle,flag=0,i=90122,u=0.9986871176198068,v=0.3037738877233719,w=0.5154934457238382,x=5.365962021016529 -color=red,shape=triangle,flag=1,i=90139,u=0.11691116433975857,v=0.2652804740538689,w=0.4872423546889221,x=4.774434894224382 -color=red,shape=circle,flag=0,i=90156,u=0.4202678645487803,v=0.5004979209475295,w=0.5001783526500607,x=5.690468379315669 -color=red,shape=square,flag=0,i=90163,u=0.07789228347129029,v=0.36245374853617474,w=0.5201278001103601,x=4.170355335199179 -color=red,shape=square,flag=1,i=90171,u=0.3953541732267084,v=0.3378344487108793,w=0.5159913925552971,x=4.799366367893301 -color=green,shape=triangle,flag=0,i=90174,u=0.24867350894483742,v=0.7415252835872189,w=0.5002241307468654,x=4.895033316702443 -color=red,shape=triangle,flag=0,i=90192,u=0.49353128832835935,v=0.6799621297476228,w=0.48926531808194296,x=7.217058026916234 -color=red,shape=triangle,flag=0,i=90207,u=0.20985585683143892,v=0.7263842666073457,w=0.48489185402160373,x=2.75533147005426 -color=yellow,shape=square,flag=0,i=90242,u=0.5423225650824823,v=0.27294860846791,w=0.5021850959347206,x=6.685798062719805 -color=red,shape=triangle,flag=0,i=90246,u=0.3154346275797085,v=0.15666893407471405,w=0.47786323925788016,x=6.530383213503373 -color=purple,shape=square,flag=0,i=90249,u=0.9367672823637156,v=0.18863879978884768,w=0.4985702617034263,x=4.860873842294733 -color=red,shape=circle,flag=0,i=90252,u=0.08987042311561,v=-0.008246897960893798,w=0.4819419130896962,x=5.273455773583588 -color=yellow,shape=triangle,flag=1,i=90253,u=0.16191958799143635,v=0.6275776709316752,w=0.5413394718309322,x=8.65047297738678 -color=red,shape=triangle,flag=0,i=90257,u=0.40335891184008055,v=0.9732935203552395,w=0.48387764102401926,x=5.385082976946599 -color=purple,shape=circle,flag=0,i=90285,u=0.19936322068358658,v=0.724498693995839,w=0.4945654263388173,x=4.3524220087124235 -color=red,shape=square,flag=0,i=90305,u=0.1640108239430247,v=0.5826328862746135,w=0.5028453751657805,x=5.123345558127809 -color=red,shape=square,flag=0,i=90314,u=0.5492348475981281,v=0.2535871852925128,w=0.5008059539861747,x=4.693174310253581 -color=green,shape=triangle,flag=0,i=90320,u=0.035638622196488945,v=0.46870823481388035,w=0.5097694111239055,x=7.160854483636338 -color=red,shape=triangle,flag=1,i=90324,u=0.8793042111308871,v=0.11029097764481455,w=0.4926947143836904,x=4.057171191884191 -color=green,shape=square,flag=1,i=90334,u=0.9057446807762088,v=0.37127876736977017,w=0.501301970192802,x=5.70767295293032 -color=red,shape=triangle,flag=0,i=90336,u=0.807736252233716,v=0.7500087321259287,w=0.4942722581208215,x=4.397641346235832 -color=orange,shape=circle,flag=1,i=90339,u=0.5190593265581473,v=0.23334499334978265,w=0.5035025531991322,x=4.568574034780903 -color=purple,shape=circle,flag=0,i=90344,u=0.8592098223452053,v=0.7151851887380719,w=0.5015056754941445,x=6.352846311690776 -color=green,shape=square,flag=1,i=90345,u=0.29045605871455193,v=0.48232613684644843,w=0.5024295542244392,x=4.15100841237567 -color=red,shape=square,flag=1,i=90347,u=0.28769819749964864,v=0.4771887384714104,w=0.5052316266452762,x=4.524501149974622 -color=red,shape=triangle,flag=0,i=90348,u=0.23944554472984803,v=0.463739039867444,w=0.5026475196611454,x=4.217571671433153 -color=red,shape=circle,flag=0,i=90362,u=0.13079678554889984,v=0.07440200201809144,w=0.4785706956254339,x=4.752427208523464 -color=blue,shape=circle,flag=0,i=90377,u=0.05990808090028965,v=0.043446084425751264,w=0.48203889622340756,x=3.696046636449399 -color=purple,shape=square,flag=0,i=90378,u=0.08252205370039623,v=0.5258699246447656,w=0.49721032942964094,x=5.59424690257691 -color=red,shape=triangle,flag=0,i=90379,u=0.7979614464096105,v=0.5087409492566641,w=0.5078580087116009,x=4.799983946720443 -color=red,shape=square,flag=1,i=90386,u=0.11007004558158795,v=0.92470739384724,w=0.507876720207312,x=5.199404415159344 -color=red,shape=circle,flag=0,i=90391,u=0.6856904730485566,v=0.6263620137783436,w=0.4826019012674464,x=6.210356566607657 -color=blue,shape=square,flag=1,i=90407,u=0.023206669758393028,v=0.24876449154620495,w=0.512427823263119,x=3.8387536308008614 -color=red,shape=square,flag=0,i=90415,u=0.12294413040305086,v=0.18854613952093002,w=0.5062323224233299,x=5.8580150999782825 -color=orange,shape=triangle,flag=1,i=90418,u=0.1886265771379605,v=0.6328604190683784,w=0.4732386249993919,x=5.1922956858463705 -color=green,shape=triangle,flag=1,i=90422,u=0.27992478348208594,v=0.6788238710899672,w=0.5034138303596242,x=3.392851049663188 -color=purple,shape=circle,flag=0,i=90427,u=0.9352840909256329,v=0.5865811199708838,w=0.5001339373784378,x=5.451972791058954 -color=red,shape=circle,flag=1,i=90460,u=0.6347056033348353,v=0.7345534078310048,w=0.48230890153809247,x=4.586144495033316 -color=red,shape=triangle,flag=1,i=90470,u=0.2878097690702818,v=0.2992114392069204,w=0.49670607807559214,x=4.835707986216085 -color=red,shape=square,flag=1,i=90508,u=0.5100807341593498,v=0.39097195027203246,w=0.515960701791966,x=5.088042746021345 -color=blue,shape=square,flag=1,i=90520,u=0.3554110708449719,v=0.4731059392140229,w=0.5097235855616599,x=4.77911769479472 -color=purple,shape=square,flag=0,i=90530,u=0.8050304477823438,v=0.6486635533163133,w=0.5006720825425117,x=5.343433954678218 -color=red,shape=square,flag=0,i=90535,u=0.827977949714675,v=0.8311787073170042,w=0.5184286766818691,x=3.758603397555909 -color=red,shape=square,flag=1,i=90538,u=0.5298178608473539,v=0.32404775134609776,w=0.5179907302280644,x=1.9381545474723956 -color=red,shape=triangle,flag=0,i=90545,u=0.588917154337286,v=0.0646395517234003,w=0.4895318500518509,x=5.788286795016194 -color=red,shape=square,flag=0,i=90553,u=0.9270783024036149,v=0.20508066298602778,w=0.5135153518020926,x=3.2803911454259853 -color=red,shape=circle,flag=0,i=90556,u=0.7651862922780163,v=0.753562407403163,w=0.47422605173968296,x=4.5878152848088005 -color=green,shape=triangle,flag=0,i=90561,u=0.5112283956303908,v=0.3400224283402157,w=0.49216956129386397,x=2.5085918747322347 -color=yellow,shape=triangle,flag=1,i=90565,u=0.5542130058209688,v=0.41696685686448587,w=0.549649260831491,x=7.336351465867044 -color=red,shape=triangle,flag=1,i=90597,u=0.48583326649249703,v=0.30019368849376593,w=0.505567964720742,x=4.585150542351635 -color=blue,shape=circle,flag=0,i=90611,u=0.2218207425069817,v=0.9429675704580606,w=0.48934724654471073,x=4.389644324818581 -color=purple,shape=circle,flag=0,i=90618,u=0.8738298264345629,v=0.3252577861318232,w=0.502949035655393,x=3.733972947841442 -color=red,shape=triangle,flag=0,i=90621,u=0.5755477797623524,v=0.26260623042467757,w=0.49987465754881394,x=3.516897529532771 -color=yellow,shape=triangle,flag=1,i=90622,u=0.2761477810660815,v=0.5764531765395416,w=0.5486543503150296,x=4.838837171160761 -color=green,shape=square,flag=1,i=90625,u=0.721868804133974,v=0.013003890842041232,w=0.5023529996131063,x=4.638992558795287 -color=red,shape=triangle,flag=0,i=90653,u=0.5989100280751152,v=0.45340281931249515,w=0.49634869409361465,x=3.831281536644813 -color=red,shape=triangle,flag=0,i=90658,u=0.24017797574133604,v=0.0922736585524595,w=0.5003442429775836,x=5.670421108884522 -color=red,shape=triangle,flag=0,i=90685,u=0.3053688875062811,v=0.6960561114445247,w=0.5071561659791778,x=3.9375725064892992 -color=yellow,shape=triangle,flag=1,i=90688,u=0.22514505494168546,v=0.11692334049201614,w=0.5513777190429429,x=3.4695806352977727 -color=red,shape=circle,flag=0,i=90690,u=0.6073411157321065,v=0.5304651732136773,w=0.48607353148084365,x=4.965102919330073 -color=yellow,shape=square,flag=1,i=90704,u=0.7458578133193874,v=0.7749028967733181,w=0.5036532585654224,x=4.779455321041035 -color=yellow,shape=square,flag=1,i=90755,u=0.809700941822523,v=0.8893906089910453,w=0.4997778408684163,x=5.386448418230657 -color=blue,shape=triangle,flag=0,i=90761,u=0.16244083849413704,v=0.6019240942196404,w=0.5118952265834457,x=6.814995548516496 -color=red,shape=triangle,flag=0,i=90776,u=0.7338605641043282,v=0.9883685875456313,w=0.5025296466527208,x=6.831623976912691 -color=purple,shape=triangle,flag=0,i=90779,u=0.5827259443404007,v=0.47210499365646064,w=0.5346443733145939,x=3.2276532363943375 -color=red,shape=triangle,flag=0,i=90781,u=0.7251561928570949,v=0.6177066881930315,w=0.4988902762038017,x=6.697805098343282 -color=yellow,shape=triangle,flag=1,i=90791,u=0.02383448839891633,v=0.5599171056645973,w=0.5556961557821248,x=7.240232112812035 -color=blue,shape=circle,flag=1,i=90798,u=0.06906212685270718,v=0.1462349090513304,w=0.5015274180475309,x=6.250182377795521 -color=red,shape=square,flag=1,i=90811,u=0.160455322083089,v=0.16291730823626482,w=0.5177837149188115,x=4.728512114677581 -color=blue,shape=triangle,flag=1,i=90822,u=0.7747928487657679,v=0.7642079426865998,w=0.5150590902672858,x=5.641539130666282 -color=purple,shape=circle,flag=0,i=90842,u=0.06255306943569905,v=0.9620995674244678,w=0.48874859411328214,x=6.021293641284653 -color=purple,shape=triangle,flag=0,i=90852,u=0.2787985045712791,v=0.8724661952121843,w=0.5310524799287406,x=6.808757858235606 -color=red,shape=square,flag=0,i=90890,u=0.7885689440673699,v=0.840308785070548,w=0.5113386323382079,x=7.947678682407606 -color=red,shape=circle,flag=0,i=90892,u=0.2677676779374627,v=0.2877834454738195,w=0.49413387041625034,x=5.400371358473737 -color=orange,shape=circle,flag=1,i=90903,u=0.886804278072299,v=0.3203936921657189,w=0.5018734979515417,x=4.506241395925766 -color=red,shape=circle,flag=0,i=90907,u=0.3100184663492891,v=0.2293333236715393,w=0.48379278616357707,x=4.452125831977417 -color=purple,shape=triangle,flag=0,i=90909,u=0.13065092513182774,v=0.6041768208129114,w=0.525563926528807,x=3.814828096868639 -color=red,shape=circle,flag=0,i=90914,u=0.9350315691758353,v=0.9696530842260699,w=0.4876501207723808,x=2.7432917622859385 -color=yellow,shape=square,flag=1,i=90916,u=0.3160488353087332,v=0.8810799285539127,w=0.4995785741408299,x=6.285357533235178 -color=red,shape=triangle,flag=0,i=90920,u=0.83921933370351,v=0.39865610111471816,w=0.49428007343403463,x=4.645784642171786 -color=yellow,shape=square,flag=1,i=90921,u=0.5144188887415021,v=0.4052440833167297,w=0.49779974462126353,x=5.666068683211667 -color=purple,shape=square,flag=0,i=90939,u=0.11300536391477212,v=0.3376600323469505,w=0.5008026741607734,x=4.69226890825451 -color=purple,shape=square,flag=0,i=90959,u=0.7233088730417938,v=0.8174321610875676,w=0.4965787064914473,x=6.47617484547926 -color=red,shape=square,flag=0,i=90976,u=0.9233187441765867,v=0.8186289075210802,w=0.518434465363418,x=6.267753892417456 -color=blue,shape=circle,flag=1,i=90980,u=0.18558288122356947,v=0.8961549063476867,w=0.4973855285240476,x=7.31746097949041 -color=blue,shape=triangle,flag=1,i=90997,u=0.2420870107274563,v=0.49521794103038264,w=0.5135155049387067,x=5.7746793310856575 -color=yellow,shape=square,flag=1,i=90998,u=0.10702810775030158,v=0.04350653673585947,w=0.49776205527238104,x=4.6469190183886635 -color=red,shape=circle,flag=0,i=91012,u=0.7854819422442846,v=0.8342796869306377,w=0.49249565228106357,x=4.600961737053408 -color=blue,shape=circle,flag=0,i=91025,u=0.32718666016242026,v=0.21211963780727683,w=0.4927886026858033,x=6.116603766820709 -color=green,shape=triangle,flag=0,i=91026,u=0.6241876365295881,v=0.4576714194981364,w=0.49281571815124664,x=5.4819287050410965 -color=red,shape=square,flag=0,i=91038,u=0.9062368572869695,v=0.11658464275912994,w=0.49972952685754635,x=3.0012654962462997 -color=yellow,shape=circle,flag=1,i=91045,u=0.37580230728286446,v=0.24840676685696939,w=0.4710603546802674,x=5.9902292069685315 -color=purple,shape=square,flag=0,i=91071,u=0.16229709813147586,v=0.298713475161028,w=0.497734146531199,x=6.493413200196891 -color=red,shape=square,flag=0,i=91072,u=0.400797403203887,v=0.8884294894746171,w=0.4885835046667912,x=2.315111925336007 -color=red,shape=triangle,flag=0,i=91083,u=0.5994805553084954,v=0.8085302706707413,w=0.495401530490264,x=2.819925848338199 -color=red,shape=triangle,flag=0,i=91084,u=0.26986934773740356,v=0.7855248535717263,w=0.49297565725569004,x=4.891534717975175 -color=yellow,shape=square,flag=1,i=91089,u=0.25370903732564076,v=0.10956929699009377,w=0.49174589404172653,x=5.0838711418159095 -color=yellow,shape=square,flag=1,i=91104,u=0.23992710389429817,v=0.8908123695225105,w=0.4889228404111286,x=5.215181711548609 -color=red,shape=triangle,flag=0,i=91106,u=0.533247728358512,v=0.02041605159071358,w=0.4887756060360072,x=4.569246204347969 -color=yellow,shape=square,flag=1,i=91112,u=0.07578651471934816,v=0.3277052165546407,w=0.48614349757915915,x=5.080252692659559 -color=red,shape=triangle,flag=0,i=91115,u=0.8436737428956873,v=0.3663356851628098,w=0.4852749987647031,x=6.869461051528152 -color=blue,shape=triangle,flag=1,i=91131,u=0.6329609667001268,v=0.6178775793718218,w=0.5028497482610984,x=5.710427769374764 -color=red,shape=square,flag=0,i=91132,u=0.00427944806862568,v=0.20913790319307657,w=0.5011473140315142,x=3.3302266626930677 -color=yellow,shape=square,flag=0,i=91135,u=0.358542821055,v=0.6483871600513494,w=0.48777511630696985,x=4.573855665853982 -color=green,shape=circle,flag=1,i=91150,u=0.6181342024294035,v=0.17264429878491294,w=0.48042965447083186,x=5.930947335211152 -color=red,shape=triangle,flag=1,i=91159,u=0.25250077823736283,v=0.9167718033394358,w=0.4777447511522709,x=3.652792092111459 -color=red,shape=triangle,flag=0,i=91161,u=0.18870802888773774,v=0.365304575071729,w=0.4752002381259525,x=4.55204930986767 -color=orange,shape=triangle,flag=0,i=91164,u=0.038822520942587424,v=0.15418584144460235,w=0.48491288450593595,x=5.599474556341277 -color=purple,shape=circle,flag=1,i=91169,u=0.8153145827646127,v=0.6997637912910207,w=0.49365621494796,x=4.8649843617752495 -color=red,shape=circle,flag=1,i=91185,u=0.3246505282022073,v=0.3502084319312681,w=0.49507857434621455,x=3.930448297282758 -color=green,shape=square,flag=1,i=91190,u=0.33081898348726224,v=0.44299978995758893,w=0.5027397240630732,x=6.467556815361878 -color=red,shape=square,flag=1,i=91191,u=0.3052679178476624,v=0.9532394840350259,w=0.49401926965829684,x=4.631747456905484 -color=red,shape=triangle,flag=0,i=91202,u=0.18916630968802117,v=0.59383212847744,w=0.4815982607707376,x=4.331998181377281 -color=red,shape=square,flag=0,i=91209,u=0.9398253403615706,v=0.42555599292790947,w=0.49332026236945403,x=7.485717497992588 -color=red,shape=triangle,flag=0,i=91213,u=0.9863195080326516,v=0.0051668701701588216,w=0.485361190011576,x=3.761552734849012 -color=blue,shape=circle,flag=1,i=91215,u=0.2778481624887428,v=0.6171677875772678,w=0.49084586603345837,x=4.2824173260817355 -color=green,shape=triangle,flag=0,i=91219,u=0.49565892890081975,v=0.967965195820225,w=0.4791653636678037,x=6.74060657225258 -color=yellow,shape=circle,flag=1,i=91224,u=0.4497877446201469,v=0.9258725758511029,w=0.4749507961085395,x=6.513484627194484 -color=red,shape=circle,flag=0,i=91227,u=0.9240919042439283,v=0.855019639416469,w=0.49307138532208566,x=6.0363023015794655 -color=red,shape=square,flag=0,i=91283,u=0.7994803855502892,v=0.9026461086411324,w=0.5008968394507144,x=5.479940567848111 -color=purple,shape=triangle,flag=0,i=91286,u=0.8511074940387708,v=0.22868249181661215,w=0.5323644690233761,x=6.431782449433335 -color=red,shape=triangle,flag=0,i=91316,u=0.9624114979199616,v=0.0936084877947696,w=0.4700903722135018,x=4.644299516792057 -color=blue,shape=triangle,flag=0,i=91329,u=0.20637133641536598,v=0.34091663361170943,w=0.5092943679104792,x=5.221524304665318 -color=orange,shape=circle,flag=1,i=91330,u=0.8767044967708005,v=0.30710153995642675,w=0.4955553797179159,x=5.089276810389023 -color=blue,shape=triangle,flag=1,i=91336,u=0.7814091143824703,v=0.5108862395778669,w=0.5039613396992398,x=2.908779569869387 -color=red,shape=triangle,flag=0,i=91354,u=0.6629649874424657,v=0.6788690419543433,w=0.4770912550596344,x=4.411620603793001 -color=red,shape=circle,flag=0,i=91364,u=0.43422779158406644,v=0.4774617947145634,w=0.5093434721634299,x=2.8207581201408174 -color=red,shape=circle,flag=1,i=91377,u=0.3860307048422146,v=0.3903416725354504,w=0.510361697022731,x=5.883462988566008 -color=blue,shape=square,flag=1,i=91378,u=0.694772085833029,v=0.7746997407475625,w=0.5203776491906638,x=5.694762515704891 -color=red,shape=square,flag=0,i=91393,u=0.6824239723971212,v=0.394288926200405,w=0.5088759730211957,x=6.58293092192962 -color=green,shape=circle,flag=0,i=91396,u=0.6364026087046742,v=0.24481198353190614,w=0.4823153681763248,x=3.210681512547708 -color=red,shape=square,flag=0,i=91406,u=0.3006986477945419,v=0.44483541969061113,w=0.5108849572172346,x=4.4847160532079435 -color=green,shape=circle,flag=1,i=91407,u=0.735661409506189,v=0.4401762466032022,w=0.47762995132730485,x=7.09191263711682 -color=blue,shape=square,flag=1,i=91411,u=0.9905644099169285,v=0.2896062766982779,w=0.513319674610675,x=7.547753788255066 -color=red,shape=triangle,flag=0,i=91417,u=0.36203899437581344,v=0.43064437625210006,w=0.46253402977711366,x=3.434195204419042 -color=blue,shape=square,flag=0,i=91419,u=0.444036983006567,v=0.069817884832169,w=0.5156465029260499,x=4.6749549224092695 -color=yellow,shape=square,flag=1,i=91425,u=0.24304003259488005,v=0.7591206936098678,w=0.5100772778172763,x=7.854300032726772 -color=blue,shape=triangle,flag=0,i=91428,u=0.2820565192241996,v=0.4925946507939064,w=0.5108752968082304,x=4.971216012650028 -color=green,shape=circle,flag=1,i=91446,u=0.8479269539496317,v=0.7380964884411712,w=0.4842517944590293,x=4.110059847432784 -color=yellow,shape=circle,flag=1,i=91449,u=0.18090402508265702,v=0.06572564836888284,w=0.4703096961523589,x=4.0155953689850445 -color=orange,shape=triangle,flag=0,i=91451,u=0.17176534740593108,v=0.28941693918342226,w=0.48212754741221825,x=5.508330146794736 -color=yellow,shape=square,flag=1,i=91458,u=0.8592018567316879,v=0.41535934742931246,w=0.5058849035126034,x=6.031420714557252 -color=red,shape=triangle,flag=1,i=91471,u=0.5950943681823347,v=0.2896550372662995,w=0.46496099715610895,x=6.6052724912283916 -color=red,shape=square,flag=0,i=91486,u=0.36385650975566386,v=0.049984214587354026,w=0.5104589230194905,x=5.507624098924034 -color=yellow,shape=triangle,flag=1,i=91489,u=0.9179146539778262,v=0.31280853999011815,w=0.5374871891513899,x=4.440286950959973 -color=red,shape=triangle,flag=1,i=91529,u=0.20297909435871497,v=0.1543382897636152,w=0.45015996046379725,x=4.760113780949169 -color=green,shape=circle,flag=0,i=91547,u=0.24564579945840082,v=0.6605816403918892,w=0.481854964312864,x=4.329166941013414 -color=red,shape=triangle,flag=1,i=91549,u=0.4758056288898427,v=0.3567587304608373,w=0.4519995075787081,x=4.555222216187146 -color=red,shape=circle,flag=1,i=91559,u=0.5580590999040709,v=0.5804261663194424,w=0.5000949764325087,x=5.788907409896858 -color=purple,shape=triangle,flag=0,i=91570,u=0.18325975883523482,v=0.7107227013159194,w=0.5203302715119601,x=5.357967957714937 -color=blue,shape=circle,flag=1,i=91575,u=0.3630241631202715,v=0.6433766613042373,w=0.4978535614215523,x=4.443620092292179 -color=yellow,shape=triangle,flag=1,i=91593,u=0.2545529702047109,v=0.28171672777337275,w=0.5246939143338366,x=4.316309837756274 -color=yellow,shape=triangle,flag=1,i=91615,u=0.6161022313500286,v=0.06612934762383571,w=0.5220682826096286,x=4.637669044418764 -color=red,shape=triangle,flag=1,i=91621,u=0.14273557448127117,v=0.5366764805665182,w=0.46742511928290736,x=5.713997632996233 -color=red,shape=square,flag=0,i=91626,u=0.1656622731110724,v=0.536288996696253,w=0.5235401546593665,x=4.663030082770255 -color=red,shape=triangle,flag=1,i=91640,u=0.9880567081131927,v=0.07363726990358421,w=0.4624652344823099,x=4.411470011663428 -color=red,shape=square,flag=1,i=91642,u=0.4693877772439784,v=0.522442790337406,w=0.5186062694807124,x=5.36362021792682 -color=yellow,shape=circle,flag=1,i=91644,u=0.8766522519775174,v=0.9571664582213368,w=0.4772865416409325,x=4.603053316014542 -color=red,shape=circle,flag=0,i=91648,u=0.5261001781029132,v=0.45163711568351644,w=0.5043785643488391,x=4.96998738926161 -color=yellow,shape=triangle,flag=1,i=91653,u=0.8628770817598326,v=0.8819327945932551,w=0.5254641032080442,x=4.178156454940569 -color=green,shape=circle,flag=0,i=91661,u=0.8023580980939091,v=0.6996956709770846,w=0.481525499643165,x=5.8775206641349085 -color=red,shape=square,flag=0,i=91668,u=0.09783686108043887,v=0.530025152416621,w=0.5210424632841472,x=5.316359630278907 -color=yellow,shape=square,flag=1,i=91675,u=0.6132742840309455,v=0.08070659496836463,w=0.5088026118846664,x=3.092904758938053 -color=green,shape=square,flag=0,i=91711,u=0.2824022859932803,v=0.18005009447061449,w=0.5024952378395806,x=3.814401215652659 -color=red,shape=square,flag=0,i=91712,u=0.7427098330918429,v=0.11149548010084931,w=0.5229359885877523,x=5.993827222740602 -color=red,shape=triangle,flag=0,i=91718,u=0.7008881314272662,v=0.5979627916619819,w=0.4682990283680194,x=6.348179694917609 -color=red,shape=square,flag=1,i=91730,u=0.5583393349507647,v=0.26698333284373976,w=0.5265489966121711,x=4.973224539375698 -color=red,shape=square,flag=1,i=91733,u=0.20260378961582914,v=0.022873917331863947,w=0.5246194038713854,x=5.513971534135039 -color=purple,shape=circle,flag=0,i=91734,u=0.09776285081800018,v=0.4932058484136499,w=0.4959515236016569,x=3.0564681465623678 -color=red,shape=square,flag=0,i=91736,u=0.7216339567549901,v=0.06842141141286417,w=0.5292942059522587,x=6.698134986022218 -color=red,shape=circle,flag=0,i=91744,u=0.21181220113532762,v=0.29004649808129196,w=0.5142370871792684,x=4.571793704366557 -color=blue,shape=square,flag=1,i=91748,u=0.9952236487822826,v=0.7393893347987025,w=0.5118379426146453,x=4.225401078450837 -color=red,shape=circle,flag=0,i=91753,u=0.8105353320888463,v=0.74202532136776,w=0.5107772825088437,x=5.847123691210849 -color=yellow,shape=circle,flag=1,i=91772,u=0.9348860641048993,v=0.23343410103541873,w=0.4698149863961367,x=4.302568705572054 -color=red,shape=triangle,flag=0,i=91778,u=0.19611428787063734,v=0.6974799834590074,w=0.48323186716508787,x=6.186358405338665 -color=red,shape=circle,flag=1,i=91791,u=0.6441346265887943,v=0.5644621703156312,w=0.5211665809597502,x=4.496026070258934 -color=red,shape=triangle,flag=0,i=91817,u=0.3182834990173712,v=0.10148407384605473,w=0.5037527835634726,x=4.610432898731612 -color=red,shape=square,flag=0,i=91820,u=0.9116021350082723,v=0.4480013956954678,w=0.5181149505466778,x=6.396620086344207 -color=red,shape=circle,flag=1,i=91824,u=0.9994612061005654,v=0.9592224706415884,w=0.5051473710730526,x=7.0918663369179065 -color=red,shape=triangle,flag=1,i=91829,u=0.03107725595847166,v=0.276768272001487,w=0.5046530327725621,x=3.4365165514285834 -color=red,shape=circle,flag=1,i=91832,u=0.8632632536336465,v=0.8446376076233072,w=0.5019122193806458,x=5.798376120058726 -color=red,shape=triangle,flag=0,i=91857,u=0.41057451735385875,v=0.8484088548755442,w=0.5061162471325613,x=5.025848868646665 -color=yellow,shape=triangle,flag=1,i=91874,u=0.04363439387123724,v=0.7917850965793704,w=0.5127769582181586,x=4.180738606220763 -color=red,shape=triangle,flag=1,i=91875,u=0.35131577748658727,v=0.6162270448251954,w=0.4983799652098564,x=4.725937491407109 -color=red,shape=triangle,flag=0,i=91880,u=0.08197456433785766,v=0.7500621019108593,w=0.49656423587453546,x=3.9503880566002234 -color=red,shape=square,flag=0,i=91886,u=0.20634247716004317,v=0.1645474405943148,w=0.5260342445678624,x=6.896099469782151 -color=purple,shape=triangle,flag=0,i=91892,u=0.8823190968633116,v=0.671099311868697,w=0.5407071049555798,x=7.204233579981788 -color=red,shape=square,flag=0,i=91908,u=0.3370994637738046,v=0.6083133047234414,w=0.5172415955963661,x=6.210860238783639 -color=purple,shape=triangle,flag=0,i=91910,u=0.7678543577032402,v=0.6163521376387997,w=0.5420632850381245,x=4.702062249546853 -color=green,shape=circle,flag=0,i=91930,u=0.9681370877868263,v=0.08573176997472465,w=0.49609755869542993,x=4.666371701354854 -color=green,shape=triangle,flag=0,i=91938,u=0.9772952210959027,v=0.5631809925746565,w=0.5042759811756851,x=6.0692636261403194 -color=yellow,shape=square,flag=1,i=91972,u=0.31078322955061566,v=0.6809230335753754,w=0.5006899841251623,x=6.230431765922893 -color=red,shape=square,flag=0,i=91975,u=0.667204468381998,v=0.6204835430536997,w=0.5229311356159404,x=6.581019246693914 -color=blue,shape=triangle,flag=0,i=91977,u=0.22452323374052807,v=0.775845223005245,w=0.5180028762706006,x=4.9475704423005356 -color=red,shape=square,flag=0,i=91986,u=0.015801093152288725,v=0.971167268927586,w=0.5282008131839773,x=4.973936971213001 -color=red,shape=circle,flag=0,i=91991,u=0.31870124675600886,v=0.30486111389878146,w=0.5117870165623808,x=4.095300083170412 -color=yellow,shape=square,flag=1,i=92003,u=0.057429590146707676,v=0.6948719918278353,w=0.5020751132516253,x=3.853930429186416 -color=yellow,shape=square,flag=0,i=92004,u=0.41885733943308734,v=0.34365528573412096,w=0.5060582893423151,x=4.8396921202898655 -color=red,shape=triangle,flag=0,i=92008,u=0.9406380961352001,v=0.7985118962465688,w=0.4963134081440155,x=5.114645730283114 -color=yellow,shape=square,flag=1,i=92009,u=0.14407143754217755,v=0.8446226564205986,w=0.5029943923322807,x=4.235142121429885 -color=red,shape=square,flag=0,i=92016,u=0.1621248875476391,v=0.21464296483413225,w=0.5302583490345193,x=6.189845971890642 -color=orange,shape=square,flag=0,i=92018,u=0.9936350141409035,v=0.7965161313201811,w=0.507241378987466,x=4.573375347076401 -color=green,shape=square,flag=0,i=92020,u=0.5037391620989604,v=0.1545022691115584,w=0.5048282966431534,x=6.171225513328001 -color=purple,shape=square,flag=0,i=92027,u=0.904080501847882,v=0.0003641137096487279,w=0.5110947496270191,x=4.546882851246963 -color=red,shape=square,flag=0,i=92036,u=0.34766775585296683,v=0.024637837713211708,w=0.5298011734960065,x=5.090435375273604 -color=purple,shape=square,flag=0,i=92047,u=0.4408077437876803,v=0.41559679251477255,w=0.5136793595478374,x=4.69008713690436 -color=purple,shape=square,flag=0,i=92055,u=0.9661101196938342,v=0.8718373473728233,w=0.5116778439765637,x=5.669109212196023 -color=red,shape=triangle,flag=0,i=92071,u=0.7985781211924962,v=0.35827199712772884,w=0.503244848388862,x=6.864423175741454 -color=blue,shape=circle,flag=0,i=92084,u=0.9551257808863871,v=0.08329033874270686,w=0.4757333294104717,x=5.143296035524737 -color=blue,shape=circle,flag=1,i=92089,u=0.6578081662214453,v=0.28105221560733384,w=0.4731904367563546,x=6.205429943565818 -color=purple,shape=triangle,flag=0,i=92095,u=0.9695828465816689,v=0.45164347112830405,w=0.5428049164236736,x=3.8727288079726327 -color=red,shape=square,flag=0,i=92131,u=0.8851120303886465,v=0.9900534444123827,w=0.5329218953586609,x=4.91715017352908 -color=red,shape=triangle,flag=0,i=92133,u=0.018660777403799678,v=0.22033128187680862,w=0.4852951873882128,x=7.565787716855552 -color=green,shape=triangle,flag=1,i=92140,u=0.20225096363936002,v=0.426589662046562,w=0.5034010858470748,x=4.548687108007283 -color=green,shape=circle,flag=0,i=92146,u=0.47316698396367085,v=0.17017670369396543,w=0.505410348493332,x=5.87097046802118 -color=red,shape=circle,flag=0,i=92151,u=0.3063173889975037,v=0.322971980124509,w=0.5008340611718457,x=4.811384233564396 -color=purple,shape=square,flag=0,i=92158,u=0.4876358930136361,v=0.07143269678147524,w=0.5194326580751527,x=5.593525888765722 -color=red,shape=circle,flag=0,i=92161,u=0.5782559882905408,v=0.5572684026056344,w=0.4999665666656498,x=5.971280815682376 -color=yellow,shape=triangle,flag=1,i=92188,u=0.1546352035429529,v=0.7614118132207637,w=0.5103450444907335,x=3.9386396343519436 -color=red,shape=triangle,flag=0,i=92193,u=0.4114570194206454,v=0.1643985160794008,w=0.487651535003318,x=6.192091366674923 -color=yellow,shape=square,flag=1,i=92207,u=0.7607670947909257,v=0.3330458741547624,w=0.5043800911114551,x=4.83260073369964 -color=red,shape=triangle,flag=0,i=92211,u=0.29880763752176087,v=0.5565947269821077,w=0.4770125214159317,x=4.319237166817335 -color=blue,shape=circle,flag=1,i=92228,u=0.6013823346938687,v=0.03694488190439982,w=0.4774086111769818,x=3.475820508311775 -color=red,shape=square,flag=1,i=92245,u=0.7961877224295332,v=0.7070632441200317,w=0.5149390478858223,x=5.677540601346222 -color=yellow,shape=triangle,flag=1,i=92254,u=0.15326317994623084,v=0.8110679924897019,w=0.5039151512231504,x=3.248213299635964 -color=green,shape=triangle,flag=0,i=92256,u=0.8517874621186892,v=0.7429907448393668,w=0.4991747674473293,x=5.306090477467658 -color=orange,shape=triangle,flag=0,i=92268,u=0.16513620273716123,v=0.1088324925021571,w=0.48314751526264116,x=4.528111869504131 -color=blue,shape=triangle,flag=1,i=92270,u=0.03137096951445939,v=0.015178453173292805,w=0.5197708539156422,x=4.586874060593856 -color=green,shape=triangle,flag=0,i=92277,u=0.24617576360789872,v=0.575053102410867,w=0.49727005821305376,x=5.0817951672332144 -color=blue,shape=triangle,flag=0,i=92279,u=0.18910359054034243,v=0.857055364316783,w=0.5288206247883013,x=6.639857301622398 -color=blue,shape=square,flag=0,i=92286,u=0.5301528580525783,v=0.4975650586832604,w=0.4970342834457019,x=6.067740841687204 -color=blue,shape=circle,flag=1,i=92292,u=0.5959005449495492,v=0.04149008704490953,w=0.47466327278231685,x=4.2966234373857075 -color=green,shape=triangle,flag=0,i=92318,u=0.4150619571543004,v=0.4771523156481643,w=0.5008583240388441,x=3.3388519128404677 -color=red,shape=square,flag=1,i=92319,u=0.47287165320109836,v=0.18159150038154392,w=0.5038470806308768,x=2.8806534294051 -color=purple,shape=triangle,flag=0,i=92327,u=0.05761765717059886,v=0.7143162058196174,w=0.5166700588437635,x=5.222879480116811 -color=yellow,shape=square,flag=1,i=92335,u=0.5466631161636603,v=0.2494339978848218,w=0.5036639348713162,x=5.082181303040596 -color=red,shape=square,flag=0,i=92338,u=0.7643701160252161,v=0.612162225482781,w=0.49679512063851927,x=4.722092810491887 -color=yellow,shape=square,flag=1,i=92354,u=0.2739911611659992,v=0.6753834443612994,w=0.508456368184811,x=2.3417038003893644 -color=purple,shape=square,flag=0,i=92360,u=0.2031974808069621,v=0.9756168089473269,w=0.5047373057063923,x=5.763432027776442 -color=red,shape=triangle,flag=0,i=92369,u=0.22793449535306032,v=0.7380592625353234,w=0.5144759209326154,x=7.557222620904095 -color=red,shape=circle,flag=1,i=92375,u=0.15480386085221798,v=0.07711216469128883,w=0.49574537165250765,x=6.645911888014537 -color=red,shape=triangle,flag=0,i=92382,u=0.053419499784761126,v=0.8062155893570594,w=0.5145173301638083,x=4.529566110748772 -color=red,shape=triangle,flag=0,i=92393,u=0.5382320437869095,v=0.09987302865394376,w=0.5224850816574071,x=3.706690197276604 -color=red,shape=circle,flag=0,i=92398,u=0.6443723678042178,v=0.5938518534031301,w=0.4863800626197255,x=4.83719485934379 -color=red,shape=square,flag=0,i=92402,u=0.4257768620476886,v=0.10536792875086354,w=0.498514740689355,x=4.550360005282122 -color=green,shape=square,flag=1,i=92425,u=0.5726072783935123,v=0.29848380955676024,w=0.5180631508418188,x=3.4695996692799085 -color=red,shape=triangle,flag=1,i=92426,u=0.7959615576462308,v=0.9226158388596538,w=0.5300927664325107,x=4.534824812213121 -color=red,shape=circle,flag=0,i=92446,u=0.10841739950267182,v=0.03245882446936885,w=0.48856373496143407,x=4.8329225099364175 -color=green,shape=square,flag=0,i=92459,u=0.7954227952686221,v=0.048758535169457606,w=0.5217434442272614,x=7.407826079329731 -color=purple,shape=square,flag=1,i=92510,u=0.13899564089860716,v=0.8942760780015213,w=0.5090806308225366,x=5.184812958189893 -color=blue,shape=circle,flag=1,i=92519,u=0.469508851635727,v=0.6060128836516456,w=0.47568685391621157,x=6.158734204238261 -color=blue,shape=circle,flag=1,i=92520,u=0.635988188067897,v=0.6153770350297673,w=0.480520976793717,x=5.514426888518556 -color=red,shape=square,flag=0,i=92535,u=0.5545564397859419,v=0.004975058750256167,w=0.5021996196417431,x=3.4913706546421897 -color=yellow,shape=triangle,flag=1,i=92554,u=0.0508505318161705,v=0.5263444036615852,w=0.48955628228349646,x=7.604937349444351 -color=red,shape=circle,flag=1,i=92608,u=0.2822691801658972,v=0.34855564797154814,w=0.4748559704366241,x=5.556851992239643 -color=green,shape=square,flag=0,i=92638,u=0.029424758781300686,v=0.11934556673090824,w=0.5101799612232227,x=5.057554973622578 -color=red,shape=square,flag=0,i=92645,u=0.09180410298341202,v=0.5724164077251228,w=0.5122394828590608,x=4.532359856579168 -color=red,shape=circle,flag=0,i=92659,u=0.31350006300167166,v=0.3272104744822449,w=0.4825076800166879,x=5.809479499335666 -color=red,shape=square,flag=0,i=92661,u=0.02282478666148624,v=0.19699177428237968,w=0.5146061147481212,x=7.767973891890201 -color=green,shape=circle,flag=0,i=92672,u=0.9153683684039098,v=0.18453213315330053,w=0.49127124481601797,x=6.118977960477081 -color=red,shape=triangle,flag=1,i=92717,u=0.6795899441943761,v=0.4682537414974407,w=0.5209558399487871,x=4.112178597388621 -color=blue,shape=circle,flag=1,i=92726,u=0.9996778243345615,v=0.9635197665367478,w=0.4763386520182622,x=5.499485586527228 -color=red,shape=square,flag=0,i=92742,u=0.7321911720522182,v=0.930143072499428,w=0.5198188275747119,x=3.0432406647346877 -color=red,shape=triangle,flag=0,i=92748,u=0.4538098580684852,v=0.0467629130011904,w=0.5236593729797778,x=5.2074414955021 -color=purple,shape=triangle,flag=0,i=92751,u=0.7614298089465806,v=0.13614291655875688,w=0.5175877223594458,x=4.870697582921675 -color=blue,shape=triangle,flag=1,i=92757,u=0.21810762014610507,v=0.8486704950725418,w=0.5262841573779571,x=4.745195483335376 -color=green,shape=triangle,flag=1,i=92764,u=0.8318920297622162,v=0.07065159489357287,w=0.5266471559552776,x=4.903809205618754 -color=yellow,shape=circle,flag=1,i=92769,u=0.5283882491643586,v=0.9596697427917676,w=0.4597097311306728,x=3.9661418161181743 -color=yellow,shape=square,flag=1,i=92770,u=0.40726751668994143,v=0.004504819016453276,w=0.48425820424305643,x=4.178275044109716 -color=red,shape=triangle,flag=0,i=92775,u=0.11885081653923701,v=0.6634541882476465,w=0.5312863980180776,x=3.412433822839326 -color=yellow,shape=square,flag=0,i=92776,u=0.3149888324070357,v=0.8891663083686959,w=0.487684662001148,x=3.7934257303984045 -color=blue,shape=square,flag=1,i=92782,u=0.2616790176590942,v=0.9288893597920503,w=0.5047140751760347,x=5.462105621360529 -color=green,shape=triangle,flag=1,i=92783,u=0.8152409830126898,v=0.22809947431131516,w=0.5233213578941764,x=7.84271096801136 -color=red,shape=triangle,flag=0,i=92792,u=0.7670053051575968,v=0.34381238969062633,w=0.5224213908901688,x=6.671527132141768 -color=blue,shape=triangle,flag=1,i=92793,u=0.9681200784557468,v=0.06514897515076978,w=0.5211512954592566,x=5.427151990471681 -color=yellow,shape=triangle,flag=0,i=92832,u=0.8355741503985865,v=0.14353757878206297,w=0.48983561930149894,x=3.639550295648638 -color=purple,shape=circle,flag=0,i=92833,u=0.933956065069158,v=0.7444615049007317,w=0.49051910849701874,x=5.359581909913964 -color=red,shape=square,flag=0,i=92842,u=0.9163350445516149,v=0.0693224312097972,w=0.5353111211040978,x=5.06624745150635 -color=purple,shape=circle,flag=0,i=92852,u=0.19509610173714598,v=0.8963782829333146,w=0.49562647480060795,x=4.757839412385918 -color=yellow,shape=square,flag=1,i=92865,u=0.9653441843366023,v=0.6814992311554665,w=0.48607508128545984,x=5.242837461923397 -color=red,shape=circle,flag=1,i=92879,u=0.2989184007375316,v=0.20499177748267272,w=0.47599987191778625,x=5.801420620548199 -color=blue,shape=triangle,flag=1,i=92880,u=0.7574828586453414,v=0.4703249280658751,w=0.5161843621984696,x=5.7918408385145 -color=yellow,shape=square,flag=1,i=92886,u=0.03437818736756382,v=0.7542842790682457,w=0.4851924034983134,x=5.316392358603744 -color=red,shape=square,flag=0,i=92894,u=0.5259715974448427,v=0.6676927167048409,w=0.5374419000570985,x=3.117727175798819 -color=yellow,shape=square,flag=1,i=92907,u=0.8941569514930652,v=0.09136754623771648,w=0.4854992788549717,x=5.9287181478082935 -color=red,shape=circle,flag=0,i=92926,u=0.4571281201653624,v=0.3640667092811309,w=0.4845875076376031,x=6.0338208463432865 -color=blue,shape=square,flag=1,i=92951,u=0.8027753059592647,v=0.9522259177922886,w=0.4951835502591678,x=5.257062426736476 -color=red,shape=triangle,flag=0,i=92957,u=0.02852601873387428,v=0.40192847564997536,w=0.5261071981010705,x=4.565911708491163 -color=green,shape=triangle,flag=0,i=92962,u=0.9665394439249344,v=0.2504479751848746,w=0.529951697558247,x=3.149697511119832 -color=red,shape=square,flag=0,i=92971,u=0.5392918163547559,v=0.67779843613693,w=0.5248689331932467,x=6.669369791867976 -color=red,shape=triangle,flag=0,i=92978,u=0.9508062326874523,v=0.03555208804734766,w=0.5144286948493904,x=4.0898018115026575 -color=orange,shape=triangle,flag=1,i=92984,u=0.07633389276796809,v=0.445759093824172,w=0.49283755242261584,x=4.563217539559333 -color=yellow,shape=square,flag=1,i=92994,u=0.9013019685248668,v=0.5813894564487491,w=0.4835026958147206,x=4.811509040226049 -color=green,shape=circle,flag=0,i=92996,u=0.14622635812306606,v=0.8756168106429231,w=0.49747785768357394,x=3.9194806776713165 -color=blue,shape=square,flag=1,i=93001,u=0.6997340636540766,v=0.2330670364480757,w=0.49690507255975425,x=2.9551172908143335 -color=red,shape=square,flag=0,i=93009,u=0.8505020593786509,v=0.7804319053229719,w=0.5288208989296913,x=5.203149388234519 -color=red,shape=circle,flag=0,i=93015,u=0.2906422110687059,v=0.19856199376085376,w=0.49696495402199636,x=4.402764098571768 -color=red,shape=circle,flag=0,i=93017,u=0.3839105921853829,v=0.39272548180902345,w=0.5041956956711864,x=4.237576891218751 -color=green,shape=square,flag=0,i=93042,u=0.7623626386073344,v=0.0996208726354616,w=0.5183905784919866,x=5.810487712022876 -color=green,shape=square,flag=0,i=93044,u=0.4965074040960592,v=0.11795140763996548,w=0.5230714792430993,x=6.727380670166152 -color=red,shape=circle,flag=0,i=93062,u=0.8513884070513233,v=0.8675652973774632,w=0.4993418892074519,x=5.146272663977379 -color=red,shape=triangle,flag=0,i=93094,u=0.25520808229759373,v=0.7870163214307724,w=0.4955130665205509,x=5.165412775005804 -color=red,shape=square,flag=0,i=93108,u=0.9643936510115555,v=0.4734974290131616,w=0.5274669502661687,x=5.282533997276936 -color=red,shape=square,flag=0,i=93123,u=0.8222251004216543,v=0.9749139546679646,w=0.5205783559126494,x=3.84769168143684 -color=red,shape=square,flag=0,i=93124,u=0.8662887556479304,v=0.5862258230484788,w=0.5209048840653713,x=5.518343672215752 -color=orange,shape=square,flag=0,i=93128,u=0.5059794215688194,v=0.4369215031571725,w=0.4891070507778887,x=6.015340178717828 -color=yellow,shape=square,flag=1,i=93135,u=0.2312012161150525,v=0.5795106123362668,w=0.49039908385128095,x=3.853333744017356 -color=red,shape=square,flag=1,i=93143,u=0.3541430883400659,v=0.02262336757086958,w=0.5130678711987102,x=6.024604807210472 -color=red,shape=triangle,flag=0,i=93151,u=0.44121314725292793,v=0.9439416972289323,w=0.5032953044014319,x=3.8331430269314573 -color=blue,shape=circle,flag=0,i=93161,u=0.6165234627284528,v=0.7552642230512452,w=0.4883359791673761,x=3.2367430762645752 -color=red,shape=square,flag=0,i=93168,u=0.11409431369441736,v=0.7569309648297614,w=0.5175339791669048,x=5.785829205432354 -color=blue,shape=square,flag=0,i=93173,u=0.6540565113170111,v=0.7201095564252947,w=0.4832297478890186,x=6.062736184419772 -color=green,shape=square,flag=1,i=93175,u=0.8974314194464692,v=0.8349160188793906,w=0.5125667527740619,x=6.728679564471983 -color=yellow,shape=square,flag=1,i=93183,u=0.4937187266731211,v=0.8436237722811973,w=0.4903840434805118,x=4.264969466944225 -color=blue,shape=square,flag=0,i=93190,u=0.9766163480003753,v=0.5268862063863686,w=0.4765947594358578,x=6.745225341428919 -color=blue,shape=triangle,flag=1,i=93213,u=0.11907254956563906,v=0.8144139418586077,w=0.5079494483200321,x=4.676249224493708 -color=yellow,shape=triangle,flag=1,i=93214,u=0.33103726921483967,v=0.9616065799366738,w=0.4899165036528938,x=5.134708601742912 -color=green,shape=triangle,flag=0,i=93215,u=0.37710680288805665,v=0.1566898063975043,w=0.5163657815354505,x=6.064064740413205 -color=green,shape=triangle,flag=0,i=93229,u=0.0013258871306677245,v=0.5798172276769943,w=0.5138419019643939,x=6.122818515520134 -color=red,shape=square,flag=1,i=93230,u=0.8275992424509893,v=0.39872438964098533,w=0.5330883620249358,x=4.968673737934752 -color=blue,shape=circle,flag=0,i=93254,u=0.7384732397492123,v=0.13190215454573573,w=0.48280945124405006,x=4.992524345138505 -color=red,shape=triangle,flag=0,i=93256,u=0.9865530869255993,v=0.5743289208964387,w=0.49140389376624477,x=5.543740809426006 -color=red,shape=square,flag=0,i=93271,u=0.4443044458467864,v=0.015610202954379648,w=0.5389352125188843,x=3.143567386481036 -color=red,shape=triangle,flag=0,i=93284,u=0.6928566123391451,v=0.38269886332409164,w=0.4935787951216088,x=3.824109249591025 -color=yellow,shape=triangle,flag=1,i=93289,u=0.06577524528643552,v=0.728178454196101,w=0.4937156220549639,x=4.854591083166828 -color=orange,shape=square,flag=1,i=93291,u=0.5944176543007182,v=0.17744449786454086,w=0.49262281749172077,x=3.1548117990710653 -color=red,shape=square,flag=0,i=93294,u=0.060123683254037275,v=0.7336514016462937,w=0.5343524865320674,x=3.33763544917446 -color=red,shape=circle,flag=1,i=93313,u=0.9426343485223739,v=0.9337632293605146,w=0.49172331416952686,x=5.852198581267326 -color=red,shape=triangle,flag=0,i=93321,u=0.6469324887469351,v=0.9870276206294317,w=0.494198111917428,x=4.9216750513143195 -color=red,shape=square,flag=1,i=93341,u=0.9012516845235167,v=0.3343117410561025,w=0.5505884613347477,x=2.6723750372674187 -color=purple,shape=circle,flag=0,i=93343,u=0.45490256047283373,v=0.09341179841698799,w=0.5075655467130734,x=3.6904298527934998 -color=yellow,shape=square,flag=1,i=93345,u=0.6234008496744187,v=0.9050961984801064,w=0.4881886254730515,x=4.1532052120224 -color=red,shape=square,flag=1,i=93348,u=0.43769972149913183,v=0.30241245777007375,w=0.5476086702138897,x=5.6874062529006 -color=green,shape=square,flag=1,i=93357,u=0.4797820346792012,v=0.9257894695131084,w=0.5133701095281766,x=4.262304435220472 -color=red,shape=square,flag=1,i=93368,u=0.8921223557391114,v=0.8833200555987885,w=0.5437774224849312,x=3.698668134727517 -color=purple,shape=triangle,flag=0,i=93373,u=0.3967550710841131,v=0.8773985303929602,w=0.5101006115433356,x=5.833640908762368 -color=green,shape=square,flag=0,i=93389,u=0.04951293420840053,v=0.625564248733943,w=0.5101249581630469,x=4.204217702244588 -color=green,shape=circle,flag=0,i=93390,u=0.04960840913639242,v=0.7509652156689688,w=0.4981353201164877,x=5.837736020714733 -color=red,shape=triangle,flag=1,i=93408,u=0.9719968115768202,v=0.5533383291375743,w=0.4853573356235901,x=2.47556385529334 -color=green,shape=square,flag=0,i=93419,u=0.07862983651361821,v=0.9726746956569318,w=0.506618710198194,x=4.230466529238665 -color=yellow,shape=square,flag=1,i=93422,u=0.7707399302971367,v=0.74454757636542,w=0.49026468607370105,x=4.905992608161124 -color=blue,shape=square,flag=1,i=93430,u=0.4776634860537742,v=0.15008982307836605,w=0.46962613311952284,x=3.684577760467564 -color=red,shape=triangle,flag=0,i=93462,u=0.16949647933386958,v=0.5500932564894656,w=0.48993496095662503,x=7.820293074733988 -color=orange,shape=triangle,flag=1,i=93471,u=0.3317570325318646,v=0.8874313110698134,w=0.4917960233719517,x=6.150180241447093 -color=blue,shape=circle,flag=1,i=93474,u=0.7951874520684338,v=0.10991976813353188,w=0.46246243465321546,x=5.312471106905913 -color=blue,shape=circle,flag=1,i=93483,u=0.19819444535883923,v=0.9650442796073642,w=0.45960864116555084,x=5.885303740852502 -color=green,shape=circle,flag=1,i=93489,u=0.7946899755101324,v=0.7062447187970816,w=0.5041569797892488,x=6.635187739927555 -color=yellow,shape=square,flag=1,i=93492,u=0.1391217816721203,v=0.3490258416387182,w=0.5058287137137161,x=4.376778666894332 -color=yellow,shape=triangle,flag=1,i=93493,u=0.2869046503640855,v=0.8991814710011304,w=0.49178644118689196,x=5.005051283145076 -color=orange,shape=circle,flag=1,i=93495,u=0.06123132666421649,v=0.2821051915517929,w=0.4928871506359694,x=3.860615227561887 -color=red,shape=square,flag=0,i=93501,u=0.9804810165190108,v=0.9575533653990974,w=0.551511309670641,x=4.909064942581761 -color=yellow,shape=square,flag=0,i=93510,u=0.3870469742262176,v=0.7395313029925318,w=0.5143245997387486,x=3.8823841202648333 -color=yellow,shape=triangle,flag=1,i=93512,u=0.3551782043885905,v=0.3860661616455179,w=0.4898839563251213,x=6.309612880605467 -color=red,shape=triangle,flag=0,i=93523,u=0.31019402808218133,v=0.0017066744945283263,w=0.48718463296886166,x=5.366521614930793 -color=yellow,shape=triangle,flag=1,i=93532,u=0.6734190129695646,v=0.8127365178402746,w=0.4877103797644284,x=4.286242165738341 -color=blue,shape=triangle,flag=0,i=93539,u=0.0776556252320888,v=0.5263248088118108,w=0.5069126298706793,x=3.464696010612767 -color=orange,shape=circle,flag=1,i=93545,u=0.9800645989862569,v=0.3320947616535743,w=0.4849232347773755,x=6.7351973771244 -color=purple,shape=circle,flag=0,i=93553,u=0.6303209046293548,v=0.9760157836122396,w=0.5106195949566945,x=5.124970200047329 -color=red,shape=circle,flag=0,i=93565,u=0.7026920687017486,v=0.6369658130150313,w=0.47290967661829403,x=4.801407443392416 -color=red,shape=circle,flag=0,i=93574,u=0.6028234204669851,v=0.5940159567370489,w=0.4747189259116316,x=6.33256070968014 -color=purple,shape=square,flag=0,i=93595,u=0.846258015505779,v=0.6219819168177243,w=0.5101388644661239,x=6.214315476041591 -color=green,shape=circle,flag=0,i=93600,u=0.5670351172290983,v=0.7525719360010829,w=0.5151070091575891,x=5.194525795959978 -color=red,shape=triangle,flag=0,i=93622,u=0.8397793180453716,v=0.2298114067470377,w=0.5042924065590354,x=4.450936896369874 -color=red,shape=square,flag=0,i=93628,u=0.3764132629098499,v=0.2061263831967045,w=0.5556804473939273,x=7.086494163900947 -color=red,shape=triangle,flag=1,i=93630,u=0.8000515157591985,v=0.3299830905077069,w=0.5003150965773266,x=5.056555067066446 -color=yellow,shape=triangle,flag=1,i=93641,u=0.2852969801675491,v=0.7251859514901501,w=0.4859277604790131,x=5.6898535468645655 -color=blue,shape=circle,flag=0,i=93675,u=0.6593652182186537,v=0.4840409484505477,w=0.47220631400727414,x=6.338461158631241 -color=blue,shape=square,flag=1,i=93680,u=0.5004081971443053,v=0.39590146186375463,w=0.48578090209402663,x=6.849620799402179 -color=purple,shape=square,flag=0,i=93721,u=0.7119956695985707,v=0.9510172307531325,w=0.5118257462801897,x=5.5848143476602985 -color=green,shape=square,flag=1,i=93723,u=0.3387637382868649,v=0.409859465673577,w=0.5032410769749635,x=5.48676071013304 -color=yellow,shape=square,flag=1,i=93748,u=0.419789310541153,v=0.2712707372716193,w=0.523300517369533,x=5.435398027595331 -color=orange,shape=triangle,flag=0,i=93751,u=0.7576589887629124,v=0.13341827054829603,w=0.49161736806866035,x=6.243172713132708 -color=red,shape=square,flag=0,i=93759,u=0.5739837642797534,v=0.11257651047118522,w=0.551379593054145,x=3.073780043803366 -color=purple,shape=square,flag=0,i=93765,u=0.88450672427772,v=0.7074934904557063,w=0.5149872326094626,x=5.10564513026127 -color=red,shape=triangle,flag=0,i=93768,u=0.14490986690222107,v=0.6264602380089783,w=0.5052576483618616,x=5.455976673270964 -color=yellow,shape=square,flag=1,i=93769,u=0.6925053131313421,v=0.0590393306122966,w=0.5126015924600923,x=2.2972082930216287 -color=purple,shape=square,flag=0,i=93781,u=0.6769527169521316,v=0.15017489841352472,w=0.5149308401611511,x=5.15973196698775 -color=red,shape=triangle,flag=0,i=93785,u=0.6820969607290105,v=0.9692933367083294,w=0.49418514046151085,x=5.244448761021533 -color=yellow,shape=circle,flag=1,i=93799,u=0.19250341230696455,v=0.8914620645317418,w=0.4759772558860603,x=4.397251919348142 -color=red,shape=square,flag=1,i=93828,u=0.4843819007850958,v=0.21359464813149265,w=0.560814452111647,x=5.430842361999297 -color=yellow,shape=circle,flag=1,i=93851,u=0.4024019516054841,v=0.1825374420345245,w=0.48456018586205823,x=3.578853310866885 -color=red,shape=triangle,flag=0,i=93852,u=0.11952950915222171,v=0.6185272814895332,w=0.49741882875022647,x=5.0121198411566334 -color=blue,shape=triangle,flag=1,i=93859,u=0.09029863080652811,v=0.22567055830278748,w=0.48893493169194147,x=6.446439246029592 -color=orange,shape=triangle,flag=0,i=93870,u=0.8259861912431266,v=0.9343182166720388,w=0.4929060477123214,x=4.995155582067377 -color=red,shape=square,flag=0,i=93871,u=0.8949022645096748,v=0.6167442271717923,w=0.5537527502067653,x=6.7191312344797725 -color=red,shape=triangle,flag=0,i=93875,u=0.18506301278734083,v=0.25312152583462066,w=0.4956811843542052,x=7.107063398379303 -color=orange,shape=square,flag=1,i=93877,u=0.6146269026026114,v=0.9831570446610254,w=0.48068478651677626,x=2.2631522425725774 -color=red,shape=square,flag=0,i=93879,u=0.7123353951988787,v=0.8043752849371905,w=0.5573239389293855,x=6.910626363495999 -color=blue,shape=circle,flag=0,i=93880,u=0.6204195601559785,v=0.640348104956813,w=0.47812898788824953,x=4.344053549229683 -color=blue,shape=circle,flag=1,i=93884,u=0.23502896721065203,v=0.19105574636443756,w=0.475404629082949,x=4.94288997758962 -color=red,shape=square,flag=0,i=93887,u=0.9981209646945113,v=0.006068840188553359,w=0.5529009750438596,x=4.056257971130269 -color=yellow,shape=circle,flag=0,i=93898,u=0.9565614763131942,v=0.02969877386503017,w=0.49133615993289326,x=4.519062466134162 -color=orange,shape=square,flag=0,i=93901,u=0.2999452881728999,v=0.7373598643188187,w=0.47695222134422094,x=4.2081548632214245 -color=red,shape=square,flag=0,i=93917,u=0.6648739426025233,v=0.7120710767117031,w=0.5479377375551202,x=2.3356981534561068 -color=red,shape=square,flag=1,i=93928,u=0.9732214443819778,v=0.3973479454498102,w=0.5508834309603914,x=6.523232212249323 -color=yellow,shape=circle,flag=1,i=93940,u=0.5618903283784817,v=0.8414430025793512,w=0.48804353012559665,x=3.9904572853451654 -color=red,shape=triangle,flag=0,i=93955,u=0.0011440315528401523,v=0.6207181938203082,w=0.5060629786876807,x=4.727110155278569 -color=red,shape=triangle,flag=1,i=93956,u=0.5074579736789474,v=0.3305676691911855,w=0.5025715037410848,x=4.271352606640998 -color=green,shape=square,flag=0,i=93958,u=0.6079825212562244,v=0.5575270220373377,w=0.5098082205063277,x=4.61681197798782 -color=red,shape=circle,flag=0,i=93962,u=0.40055818460746717,v=0.39910862230813293,w=0.4905404411620984,x=6.0603024799097005 -color=green,shape=triangle,flag=1,i=93987,u=0.5454807147881016,v=0.6207105676173871,w=0.5225719151339943,x=4.069721679825503 -color=red,shape=circle,flag=1,i=93992,u=0.2763361078610522,v=0.2666879169300569,w=0.4917675415517746,x=5.579288808426948 -color=green,shape=triangle,flag=0,i=94000,u=0.596867165023715,v=0.3143330563356329,w=0.5176841286592171,x=5.369235743300724 -color=blue,shape=square,flag=0,i=94020,u=0.5756750119027304,v=0.7597294424669012,w=0.47363668336805564,x=5.6956721237176 -color=red,shape=triangle,flag=0,i=94021,u=0.019665959645606135,v=0.709096231096199,w=0.5132178431121155,x=5.7815869865312886 -color=red,shape=square,flag=0,i=94035,u=0.06202231884381981,v=0.45881411578088305,w=0.5430055483069299,x=4.5312835409983565 -color=purple,shape=triangle,flag=0,i=94056,u=0.7333756860381885,v=0.4355040438341987,w=0.5037252999182574,x=4.207334203288932 -color=red,shape=square,flag=1,i=94057,u=0.8870712075654925,v=0.3742052239190763,w=0.5367893127742382,x=4.973851642082246 -color=red,shape=square,flag=1,i=94062,u=0.036237343693436785,v=0.1045713876831671,w=0.5298576710817157,x=5.13455908393862 -color=green,shape=square,flag=0,i=94065,u=0.4585932299592197,v=0.12564001882630038,w=0.504402442320757,x=5.331034089536822 -color=purple,shape=square,flag=0,i=94068,u=0.5513014169727752,v=0.5718537966970478,w=0.5060666646311373,x=5.393288486858334 -color=red,shape=square,flag=1,i=94071,u=0.08747924241901106,v=0.44693950378812997,w=0.5288899014580909,x=3.1801187710324945 -color=red,shape=square,flag=0,i=94074,u=0.40837336355933873,v=0.7289826885634818,w=0.5222326650165192,x=5.709660083354817 -color=red,shape=square,flag=1,i=94087,u=0.05638885574133767,v=0.7306385271934962,w=0.5210498318999434,x=5.969087548189066 -color=orange,shape=circle,flag=1,i=94089,u=0.27898512998075076,v=0.2584110932734265,w=0.4721934103684907,x=5.513768608251465 -color=red,shape=triangle,flag=0,i=94090,u=0.011579423006631506,v=0.1461924744427231,w=0.50680797233544,x=5.392685691328301 -color=green,shape=square,flag=0,i=94100,u=0.037726806682094716,v=0.23709186351754974,w=0.5041152111424824,x=6.484096787948876 -color=red,shape=square,flag=0,i=94112,u=0.7199989054206615,v=0.991854573709443,w=0.5113764101595197,x=4.6865206360636575 -color=blue,shape=triangle,flag=1,i=94114,u=0.7382669242389647,v=0.7462570727414071,w=0.4876544853162869,x=5.172390184290637 -color=purple,shape=triangle,flag=0,i=94117,u=0.4330002456835155,v=0.036183005402333435,w=0.5029683977003918,x=2.9789436077830285 -color=blue,shape=triangle,flag=1,i=94119,u=0.1617402064868817,v=0.8062815967450566,w=0.49255678594325925,x=6.74287289463116 -color=green,shape=triangle,flag=0,i=94123,u=0.1566992041830444,v=0.6502079277615944,w=0.503984894552716,x=7.484419265837637 -color=red,shape=circle,flag=1,i=94130,u=0.15025294659968402,v=0.1826767485274198,w=0.49834962988783793,x=4.395734848632275 -color=yellow,shape=circle,flag=1,i=94140,u=0.316070340832189,v=0.7101629932380786,w=0.48915255791936957,x=4.2400283270050565 -color=purple,shape=triangle,flag=0,i=94172,u=0.7130775460451007,v=0.45847194779652833,w=0.5000733607237531,x=6.380990883251704 -color=red,shape=circle,flag=0,i=94222,u=0.4801940809555969,v=0.38905265587066573,w=0.51272480213867,x=5.0973318023038905 -color=green,shape=circle,flag=0,i=94244,u=0.4584926300361336,v=0.5870594531146602,w=0.4988618595197844,x=4.738058113092706 -color=red,shape=square,flag=0,i=94247,u=0.8644573371403343,v=0.20775632350917972,w=0.49001702979812234,x=4.882984810120678 -color=red,shape=square,flag=0,i=94258,u=0.10974848478001653,v=0.9238792277853174,w=0.4931964816545601,x=5.005871005846089 -color=purple,shape=circle,flag=0,i=94260,u=0.03026821410397551,v=0.6601671837266547,w=0.5013582146221717,x=5.825536992273702 -color=red,shape=circle,flag=1,i=94265,u=0.8952216177780481,v=0.8090882896574163,w=0.5089747905882614,x=4.778298116541301 -color=red,shape=triangle,flag=0,i=94277,u=0.007709963688652177,v=0.9029200616419227,w=0.4990300005410127,x=5.545512050968591 -color=blue,shape=circle,flag=0,i=94285,u=0.24574478706342118,v=0.6679910258383416,w=0.4916341120587314,x=6.7966231451877706 -color=red,shape=square,flag=0,i=94288,u=0.28309302811729564,v=0.5085532188072315,w=0.49135330990857284,x=4.361399595396993 -color=red,shape=circle,flag=1,i=94292,u=0.6568717051446402,v=0.6902297122905847,w=0.5089085375512069,x=2.7577249665674337 -color=yellow,shape=triangle,flag=1,i=94296,u=0.6370176934677825,v=0.614556634906679,w=0.4967281062437877,x=4.90842228979405 -color=red,shape=triangle,flag=0,i=94297,u=0.6390569892003273,v=0.2800883357076729,w=0.4996117534180357,x=2.84246196222414 -color=green,shape=triangle,flag=0,i=94302,u=0.18746119677416706,v=0.3855462437973667,w=0.5112384808411182,x=6.331189281337317 -color=yellow,shape=square,flag=1,i=94309,u=0.8866337057460133,v=0.6189719844623301,w=0.5183884097335458,x=5.959968983741753 -color=green,shape=triangle,flag=0,i=94313,u=0.6039146830681794,v=0.6591951564269052,w=0.5069562547481516,x=5.426924829725192 -color=red,shape=circle,flag=0,i=94328,u=0.1178044938851679,v=0.09765788832777922,w=0.5096548007181898,x=6.162578475662966 -color=red,shape=triangle,flag=0,i=94331,u=0.15621371120778282,v=0.754212713361215,w=0.5096398159401533,x=3.6887648385047043 -color=red,shape=triangle,flag=1,i=94357,u=0.2996787317674632,v=0.7691044755514256,w=0.5058095516173593,x=5.827341785600333 -color=red,shape=square,flag=0,i=94366,u=0.31608323212142986,v=0.8715833046771758,w=0.4978348162138525,x=5.553252896036036 -color=red,shape=triangle,flag=1,i=94367,u=0.6662377473177329,v=0.4702165198335524,w=0.5051974170750035,x=5.754693755771456 -color=red,shape=circle,flag=1,i=94371,u=0.8294280325421534,v=0.8606920580175302,w=0.5037941657003376,x=5.366318775628849 -color=green,shape=square,flag=0,i=94374,u=0.04120083857891943,v=0.7819031687459034,w=0.5068380006622194,x=5.3211837250040235 -color=yellow,shape=triangle,flag=1,i=94377,u=0.561842232414588,v=0.33463441831305163,w=0.5062941803470954,x=7.047894151343674 -color=red,shape=square,flag=0,i=94384,u=0.15092231087778962,v=0.9340875197091294,w=0.5000959746053216,x=5.449726038865738 -color=green,shape=circle,flag=0,i=94390,u=0.7445986819096515,v=0.5103769969234335,w=0.4899875928840483,x=4.926734628338052 -color=red,shape=triangle,flag=0,i=94424,u=0.22017046612119995,v=0.8742365917352823,w=0.5006016387170509,x=4.335172534725971 -color=purple,shape=triangle,flag=0,i=94427,u=0.9935914290043147,v=0.9342657400938085,w=0.5118327447890746,x=2.0134488376685247 -color=red,shape=square,flag=0,i=94442,u=0.34365020022019244,v=0.9326683227116795,w=0.49537084356699923,x=3.95370253836643 -color=red,shape=square,flag=1,i=94443,u=0.04794827187476092,v=0.8019147552612818,w=0.49057813770779696,x=2.8574798883721173 -color=red,shape=square,flag=1,i=94453,u=0.3054788812346224,v=0.24512087312543007,w=0.48799474653991864,x=5.555475461380162 -color=red,shape=square,flag=0,i=94481,u=0.4840969077705247,v=0.5255163652043569,w=0.48227193978663613,x=5.145849918594299 -color=red,shape=circle,flag=1,i=94497,u=0.8480077230984338,v=0.9312751854302335,w=0.4967372515496152,x=4.124199971516984 -color=yellow,shape=circle,flag=0,i=94534,u=0.38861816691240514,v=0.7567099874157627,w=0.4852223209453526,x=4.538396661892992 -color=yellow,shape=triangle,flag=0,i=94538,u=0.2672799595387756,v=0.10443191846080979,w=0.5073074570120953,x=6.346063034361737 -color=yellow,shape=circle,flag=1,i=94552,u=0.1712882335567838,v=0.3259475088295717,w=0.482824218920368,x=3.291686965324202 -color=green,shape=square,flag=0,i=94567,u=0.0038661826908737984,v=0.2492595243587501,w=0.5011076376431046,x=6.351171996193123 -color=green,shape=triangle,flag=1,i=94590,u=0.07343742625437688,v=0.23343054548193543,w=0.5037820674281168,x=4.89002956905163 -color=blue,shape=triangle,flag=0,i=94607,u=0.6631920507557296,v=0.4369451571175079,w=0.4988225129478721,x=6.472272684702357 -color=red,shape=triangle,flag=0,i=94610,u=0.544646967828129,v=0.20310412230863117,w=0.5140842686550952,x=5.518515038283496 -color=yellow,shape=square,flag=0,i=94631,u=0.6131922881261986,v=0.8829452805834902,w=0.5402682177789455,x=2.8697984248805546 -color=red,shape=triangle,flag=0,i=94649,u=0.37680586149507656,v=0.531873848826147,w=0.5164075447477771,x=3.18077524958789 -color=blue,shape=circle,flag=0,i=94657,u=0.6856076866129293,v=0.7529799784201368,w=0.48531361009112406,x=5.186956673568379 -color=red,shape=square,flag=1,i=94658,u=0.1314205100276179,v=0.77631958671169,w=0.4786633165232282,x=6.530427842311236 -color=purple,shape=circle,flag=0,i=94686,u=0.283186607515193,v=0.9269615978919837,w=0.4950964993082637,x=5.070609618417811 -color=red,shape=square,flag=0,i=94689,u=0.30882279665974666,v=0.39737758625652664,w=0.48539674823193363,x=6.196100423711762 -color=red,shape=circle,flag=0,i=94695,u=0.5206530070612057,v=0.48652278324879217,w=0.5122921729017607,x=5.033313205622764 -color=purple,shape=square,flag=0,i=94705,u=0.8761909968441094,v=0.7935235409462378,w=0.49173438927674956,x=3.63647136539369 -color=red,shape=circle,flag=0,i=94713,u=0.3137063900928977,v=0.366181626284267,w=0.49932326037455843,x=5.24781522779401 -color=purple,shape=circle,flag=0,i=94717,u=0.5675782394285436,v=0.9664918468422924,w=0.4928726435866197,x=2.924947001995275 -color=red,shape=square,flag=1,i=94724,u=0.7903522556392034,v=0.31382994092682914,w=0.48810859660059247,x=5.418578189391887 -color=orange,shape=triangle,flag=1,i=94728,u=0.6147952572304167,v=0.8124737047060224,w=0.5055720258945624,x=6.652973421501709 -color=red,shape=circle,flag=1,i=94733,u=0.8994797966638701,v=0.9983461696475617,w=0.4959427260304219,x=4.432052402667912 -color=red,shape=triangle,flag=0,i=94746,u=0.8794538103662065,v=0.33466829860805336,w=0.5223415478465803,x=5.713245666496277 -color=blue,shape=square,flag=1,i=94773,u=0.8336971507856067,v=0.663403839465149,w=0.5006522631854345,x=5.458211184283616 -color=red,shape=triangle,flag=1,i=94776,u=0.09071028397115666,v=0.8967033302080704,w=0.5186715318445669,x=6.989417880277936 -color=red,shape=circle,flag=0,i=94779,u=0.5823372950326793,v=0.6740514019239459,w=0.5064685529523256,x=5.331017166908641 -color=red,shape=square,flag=1,i=94784,u=0.30371275947244813,v=0.5034727917273265,w=0.481131269675275,x=4.962293804099515 -color=yellow,shape=triangle,flag=1,i=94790,u=0.3322725154831089,v=0.8823377013102264,w=0.5009485797470198,x=5.779120363231121 -color=blue,shape=square,flag=1,i=94804,u=0.9296809251812996,v=0.12257445659613919,w=0.498561566168998,x=5.121694224083096 -color=red,shape=triangle,flag=1,i=94813,u=0.21382240047675283,v=0.013747014227901588,w=0.5168355835879442,x=4.559371640094053 -color=red,shape=circle,flag=0,i=94821,u=0.5427294680901177,v=0.5846906690312902,w=0.5151429523730308,x=4.540204950104281 -color=purple,shape=square,flag=0,i=94836,u=0.9589364512377747,v=0.8992749036434428,w=0.49913083145091747,x=2.991314573147467 -color=red,shape=square,flag=0,i=94841,u=0.5453932721227068,v=0.1170152774877814,w=0.4889908334563191,x=5.709273342310534 -color=red,shape=triangle,flag=0,i=94843,u=0.493262149490416,v=0.011832543612560475,w=0.5211706349493206,x=6.751266943293774 -color=red,shape=triangle,flag=0,i=94883,u=0.08579176463726834,v=0.9462601501846178,w=0.5156905411971057,x=8.317120491404644 -color=red,shape=triangle,flag=1,i=94893,u=0.08462118503806337,v=0.5031727971245549,w=0.5201656177638505,x=3.994941407188952 -color=blue,shape=triangle,flag=1,i=94897,u=0.3491300124700786,v=0.6730402529320697,w=0.5083649532317387,x=5.543764417034228 -color=blue,shape=circle,flag=0,i=94902,u=0.40794873898572936,v=0.7878724521540721,w=0.4745816531957584,x=5.806567795021444 -color=blue,shape=square,flag=1,i=94904,u=0.8703689730540912,v=0.06863351477175472,w=0.5031774300991061,x=5.287292351512755 -color=blue,shape=triangle,flag=0,i=94906,u=0.3522477548518742,v=0.8398156224627885,w=0.5110082619972443,x=4.170139664987736 -color=red,shape=square,flag=0,i=94933,u=0.8207051907469852,v=0.6714645520414942,w=0.48801120394288877,x=4.63621338421315 -color=green,shape=square,flag=1,i=94937,u=0.3289070354445588,v=0.8292630098024294,w=0.4962475252528494,x=4.862447599534005 -color=purple,shape=square,flag=0,i=94957,u=0.20768211872859366,v=0.6499999060660224,w=0.49368674988959443,x=6.494327950599405 -color=yellow,shape=square,flag=1,i=94963,u=0.40733279263945354,v=0.3186454624205395,w=0.5382223738809148,x=4.308974276404359 -color=green,shape=square,flag=0,i=94969,u=0.03264992823656221,v=0.42486754230411117,w=0.48959948211148785,x=3.1653282971243404 -color=red,shape=circle,flag=1,i=94995,u=0.40018494514183234,v=0.3480321407370032,w=0.5246486261630341,x=5.560277002593004 -color=red,shape=triangle,flag=0,i=95002,u=0.6855407751847372,v=0.9464659022555953,w=0.5269400607233719,x=4.63468662541698 -color=red,shape=circle,flag=0,i=95012,u=0.7224846297526336,v=0.7219864465393859,w=0.5195749900489327,x=4.902925843596016 -color=blue,shape=square,flag=0,i=95022,u=0.728288231234988,v=0.5065821144524781,w=0.5039210773062858,x=6.242217985806318 -color=orange,shape=square,flag=0,i=95024,u=0.25728281287165866,v=0.20625420973668496,w=0.47709369091696907,x=4.391356923921371 -color=blue,shape=square,flag=1,i=95030,u=0.8497378924791577,v=0.8333678484852933,w=0.49752889449149,x=4.707818407401047 -color=red,shape=square,flag=1,i=95034,u=0.25533669227738776,v=0.27258380537926363,w=0.48520197325696696,x=6.535404826584711 -color=blue,shape=triangle,flag=0,i=95057,u=0.1369196405633063,v=0.6162470540747264,w=0.4981850993726346,x=5.702007281253594 -color=green,shape=square,flag=1,i=95068,u=0.9373976679412133,v=0.06035623015974323,w=0.49984563506697693,x=6.004911983193927 -color=red,shape=square,flag=0,i=95086,u=0.8837368704356093,v=0.9686455453605962,w=0.4881631668996269,x=4.999466746102727 -color=purple,shape=triangle,flag=0,i=95087,u=0.04335295621534607,v=0.9792751193896676,w=0.501766859767471,x=6.6708700239603225 -color=red,shape=triangle,flag=0,i=95088,u=0.2649450054099186,v=0.15161228510007507,w=0.5195177264686487,x=6.380042443361127 -color=red,shape=square,flag=1,i=95121,u=0.21303014597832648,v=0.7311358637438857,w=0.48754645962691634,x=6.111526162212111 -color=blue,shape=square,flag=1,i=95125,u=0.5955700798695953,v=0.8134808776264878,w=0.49339314186848326,x=5.8017966955992195 -color=red,shape=triangle,flag=0,i=95141,u=0.29481998221536876,v=0.09137433215243673,w=0.5118901394297206,x=4.355213237069349 -color=purple,shape=triangle,flag=0,i=95151,u=0.5897354668458885,v=0.11543551902136306,w=0.5036141198980587,x=7.413682874456235 -color=red,shape=circle,flag=0,i=95159,u=0.6580958028021712,v=0.5979317066374599,w=0.522622054598586,x=6.2092608840357855 -color=red,shape=triangle,flag=0,i=95174,u=0.2624235602005557,v=0.5925909658759327,w=0.49724034980788917,x=6.124609884272918 -color=red,shape=circle,flag=0,i=95178,u=0.5914399755031541,v=0.5898156594042067,w=0.5234331561925322,x=3.421463339154903 -color=red,shape=circle,flag=1,i=95183,u=0.4857063606352723,v=0.4390647619053223,w=0.5253408182083623,x=5.963401300829486 -color=purple,shape=square,flag=0,i=95215,u=0.9341323936426884,v=0.972813669639962,w=0.5017288605008587,x=5.734994402979431 -color=red,shape=triangle,flag=0,i=95216,u=0.07841751130870456,v=0.42060655680140135,w=0.5022107131398774,x=4.6792402972527825 -color=blue,shape=square,flag=1,i=95217,u=0.002667137924713292,v=0.5014182755245598,w=0.4880693833559115,x=4.881973194125624 -color=red,shape=square,flag=0,i=95220,u=0.412263864780532,v=0.7785638206166626,w=0.48212397564704074,x=4.611284397417477 -color=purple,shape=square,flag=0,i=95229,u=0.3624747282603584,v=0.5939038093671826,w=0.49821052158468077,x=4.374313894877282 -color=red,shape=square,flag=0,i=95251,u=0.3685822458693424,v=0.5613292278042047,w=0.47839914095991976,x=5.024453624479713 -color=purple,shape=square,flag=0,i=95261,u=0.8651707322542452,v=0.8561690535945209,w=0.4993389329792418,x=4.913920786901495 -color=red,shape=square,flag=1,i=95263,u=0.7056606241226618,v=0.9131802494473958,w=0.4767798774936042,x=3.279070825509402 -color=red,shape=square,flag=0,i=95287,u=0.8890251343676947,v=0.9376401531381994,w=0.4836685892842009,x=3.942407879007797 -color=red,shape=square,flag=0,i=95296,u=0.5051401432321563,v=0.14651534990658466,w=0.4871240751226292,x=5.918087358747563 -color=red,shape=circle,flag=1,i=95297,u=0.44925183921642853,v=0.5169020729434569,w=0.5366717598225503,x=5.9616844890939475 -color=red,shape=triangle,flag=0,i=95313,u=0.6522284708651094,v=0.16923004476845127,w=0.5134734546535809,x=4.905143145646957 -color=red,shape=square,flag=0,i=95316,u=0.6892255042303376,v=0.033837867513929476,w=0.4816445312543678,x=6.080410840680348 -color=purple,shape=square,flag=0,i=95335,u=0.12447081577623254,v=0.4865239679315827,w=0.49567244611016287,x=4.625897653478866 -color=red,shape=circle,flag=0,i=95340,u=0.23803259383291164,v=0.1927099302240184,w=0.5437750683231967,x=3.579218558870553 -color=purple,shape=triangle,flag=0,i=95341,u=0.4048454403699504,v=0.007033073257603495,w=0.4925772685601072,x=1.643332528737662 -color=red,shape=circle,flag=0,i=95350,u=0.37570136111425056,v=0.4205590285282056,w=0.5436174164147097,x=5.202928530061143 -color=red,shape=triangle,flag=0,i=95352,u=0.01809102467202106,v=0.5240977500610657,w=0.5106305766528645,x=6.169422572683959 -color=red,shape=triangle,flag=0,i=95362,u=0.597437393156178,v=0.9114017582517434,w=0.5060223311345061,x=5.990425557359262 -color=red,shape=square,flag=1,i=95394,u=0.43087387419591494,v=0.7799068618205608,w=0.473510360726394,x=3.9821117889142705 -color=red,shape=triangle,flag=0,i=95413,u=0.48645724495841736,v=0.37479955178501734,w=0.5136315068754431,x=2.547267875687577 -color=purple,shape=triangle,flag=0,i=95429,u=0.6324607515918962,v=0.9619671858094646,w=0.49282856219274584,x=6.834662683629477 -color=red,shape=circle,flag=1,i=95434,u=0.7951595910186059,v=0.7293016881795313,w=0.5422550745559764,x=5.624573389906437 -color=red,shape=square,flag=0,i=95441,u=0.8120401678127536,v=0.06334723509015716,w=0.48399060925776144,x=3.8171986500868837 -color=red,shape=circle,flag=0,i=95443,u=0.7999996233802388,v=0.8478632472527992,w=0.5419826987461797,x=5.189927429602718 -color=green,shape=triangle,flag=0,i=95454,u=0.021820495826963993,v=0.247973120267464,w=0.48863389666214974,x=3.9858728454058965 -color=red,shape=triangle,flag=0,i=95455,u=0.5880337984059256,v=0.3979594286222955,w=0.5107003730173946,x=3.9146303503754187 -color=red,shape=square,flag=0,i=95489,u=0.38937956844509736,v=0.7439014662120559,w=0.49749690214338643,x=2.08599486568694 -color=blue,shape=triangle,flag=1,i=95500,u=0.6723111785672105,v=0.9208224128407376,w=0.5162501058657194,x=3.8836463081731956 -color=yellow,shape=square,flag=1,i=95501,u=0.698850017364642,v=0.27440040121581477,w=0.5118851821238122,x=5.329166449998421 -color=yellow,shape=square,flag=0,i=95511,u=0.4603948184700003,v=0.49007080527570546,w=0.5114651386198127,x=6.118980676097276 -color=orange,shape=circle,flag=0,i=95518,u=0.7677021168866173,v=0.1525069385499992,w=0.4692760523145991,x=3.826875524783335 -color=red,shape=square,flag=0,i=95528,u=0.8299728998149455,v=0.5941379319705079,w=0.4883684011509505,x=4.119105391794861 -color=red,shape=triangle,flag=0,i=95531,u=0.38633998695999805,v=0.755881127616098,w=0.5224722412362447,x=4.0529339900811685 -color=blue,shape=square,flag=0,i=95533,u=0.1706273080172087,v=0.27422112273499943,w=0.49118868750712774,x=4.040895932069326 -color=purple,shape=square,flag=0,i=95549,u=0.2933916978683071,v=0.2971101531880507,w=0.5107156672668544,x=4.0783722737591885 -color=red,shape=triangle,flag=0,i=95554,u=0.4336516522618147,v=0.36564087249127863,w=0.5231860955089859,x=3.828429839171689 -color=red,shape=square,flag=0,i=95556,u=0.8110403312925802,v=0.07422675259198352,w=0.49276361425070986,x=6.291640296267218 -color=red,shape=square,flag=0,i=95567,u=0.6298377141604105,v=0.22435450875520302,w=0.49238530491492405,x=4.760177677140182 -color=green,shape=circle,flag=0,i=95574,u=0.08723182565571463,v=0.0006094934266722696,w=0.4824320986207452,x=4.071748509925414 -color=yellow,shape=square,flag=1,i=95580,u=0.1973977898574082,v=0.9817446192748276,w=0.5082030600746619,x=3.9187500216584232 -color=red,shape=circle,flag=0,i=95609,u=0.4768456124311581,v=0.4039576678577314,w=0.5302862787106399,x=6.49732439627864 -color=purple,shape=square,flag=0,i=95635,u=0.8111369256022484,v=0.193745686230979,w=0.5013701310782523,x=4.0452536100578085 -color=blue,shape=square,flag=0,i=95639,u=0.44854536144294777,v=0.8133097125608071,w=0.49850422530326555,x=5.324877126207013 -color=green,shape=triangle,flag=0,i=95652,u=0.42831050632895995,v=0.6025341497610506,w=0.48494414585066087,x=7.223783905266928 -color=red,shape=circle,flag=0,i=95653,u=0.05362336509312238,v=-0.043310883828218,w=0.5304203962378913,x=4.934405825487166 -color=red,shape=circle,flag=0,i=95654,u=0.4433411320722124,v=0.44825754039189947,w=0.5326836182516868,x=5.776396139848291 -color=red,shape=square,flag=0,i=95661,u=0.5918935990633056,v=0.4733480030338092,w=0.48170754885858796,x=3.4317974666052766 -color=blue,shape=triangle,flag=0,i=95677,u=0.11758649380606867,v=0.2564395323353277,w=0.5168535618031888,x=2.9460769960805293 -color=yellow,shape=square,flag=1,i=95688,u=0.08805025615564177,v=0.8681852991004899,w=0.5066765273061633,x=3.2422160219759273 -color=red,shape=square,flag=0,i=95715,u=0.09515556834057048,v=0.2476069131448505,w=0.4694731137835921,x=6.258881681726623 -color=purple,shape=square,flag=0,i=95716,u=0.8661051890893713,v=0.2548893019964037,w=0.4961224261867851,x=4.90815280336836 -color=red,shape=circle,flag=0,i=95726,u=0.5729003917059892,v=0.48102977701485233,w=0.5190850523208961,x=5.7189671324680305 -color=red,shape=square,flag=0,i=95738,u=0.6036878845436557,v=0.519282753397272,w=0.4695051406703007,x=3.8153909034622253 -color=red,shape=circle,flag=0,i=95744,u=0.5316089582888708,v=0.5849715421326843,w=0.5227757989885363,x=5.963378791330766 -color=blue,shape=square,flag=1,i=95746,u=0.893044466429303,v=0.5614463993752504,w=0.5052916700308168,x=3.988417964607063 -color=yellow,shape=circle,flag=1,i=95757,u=0.6434932765584167,v=0.5034054921640212,w=0.4809738855512452,x=4.035531593145203 -color=purple,shape=circle,flag=0,i=95764,u=0.501319018852234,v=0.33688514834799477,w=0.4787809380726825,x=3.0898069848448624 -color=purple,shape=triangle,flag=0,i=95776,u=0.38084018073898485,v=0.580626025410974,w=0.5018086361771342,x=6.27371689970268 -color=purple,shape=triangle,flag=0,i=95809,u=0.7895510446195199,v=0.8017870470521001,w=0.5058125219353772,x=4.608350393771451 -color=red,shape=square,flag=0,i=95855,u=0.6708696653307745,v=0.864290005125367,w=0.46002377498082186,x=4.371903851161853 -color=blue,shape=circle,flag=0,i=95856,u=0.48468979737859186,v=0.7050802087044364,w=0.4903873948315253,x=4.310859903954784 -color=blue,shape=circle,flag=0,i=95869,u=0.433699314724719,v=0.9815830528860979,w=0.4859165997731851,x=4.249701542758067 -color=blue,shape=triangle,flag=1,i=95876,u=0.7607275569966165,v=0.3444373072309326,w=0.5176824027954439,x=5.178559864617614 -color=yellow,shape=square,flag=1,i=95880,u=0.2708214888936329,v=0.33893901007098237,w=0.5071423755655081,x=3.878089050267082 -color=green,shape=square,flag=0,i=95913,u=0.977812714071183,v=0.8213216550332649,w=0.5037895209853568,x=4.501399772902655 -color=green,shape=triangle,flag=0,i=95916,u=0.41209521739690724,v=0.009840812423060674,w=0.4923116593995726,x=6.121704104855858 -color=yellow,shape=triangle,flag=1,i=95922,u=0.770196523924362,v=0.5366579950148794,w=0.4940098259506026,x=6.450025232982571 -color=blue,shape=square,flag=1,i=95933,u=0.4460982583770846,v=0.06284278404643429,w=0.5131543736940538,x=6.5981643517007535 -color=red,shape=square,flag=0,i=95959,u=0.9778390717447472,v=0.5267474727962671,w=0.48899476248113577,x=6.986010326962725 -color=blue,shape=triangle,flag=1,i=95988,u=0.19822067579147096,v=0.05887446013478115,w=0.5123538284044189,x=5.862640977432053 -color=green,shape=triangle,flag=0,i=95999,u=0.2777888980702661,v=0.6036755664651436,w=0.5004330266521184,x=5.594060009477997 -color=red,shape=triangle,flag=0,i=96001,u=0.07201289135218536,v=0.9578500735124724,w=0.5024362973163085,x=5.319861055814207 -color=red,shape=square,flag=0,i=96022,u=0.4709205322315836,v=0.7937369877489687,w=0.49007862193940366,x=3.973003372311459 -color=blue,shape=square,flag=1,i=96035,u=0.4423886625964605,v=0.9366746323015379,w=0.5050051256716289,x=5.313988804185247 -color=red,shape=square,flag=1,i=96048,u=0.4573455212892237,v=0.8689836365200174,w=0.5026099292380142,x=4.284593437243346 -color=red,shape=triangle,flag=1,i=96071,u=0.7014027677589221,v=0.7050266694844497,w=0.4991756884347118,x=3.9612918655374205 -color=yellow,shape=square,flag=1,i=96086,u=0.7833683478375343,v=0.6149748333528218,w=0.49362651600138596,x=5.189911883843258 -color=red,shape=square,flag=0,i=96090,u=0.2362815181764243,v=0.08052300595014228,w=0.5064439828465793,x=3.4067046807656305 -color=yellow,shape=circle,flag=1,i=96095,u=0.0036354395410326257,v=0.6635853765373362,w=0.48103253822812914,x=5.359085246783725 -color=red,shape=triangle,flag=0,i=96121,u=0.3505461523143154,v=0.93233366310048,w=0.5126317356885189,x=4.297395337314128 -color=red,shape=circle,flag=0,i=96141,u=0.39597887757686256,v=0.39562748029305544,w=0.5351730203208921,x=3.394427748518069 -color=red,shape=square,flag=0,i=96142,u=0.820574896008899,v=0.9178219586117422,w=0.5066322293802394,x=7.0697506748462935 -color=green,shape=square,flag=1,i=96146,u=0.4694324766526824,v=0.5658438480255048,w=0.5321410697850847,x=4.106989909501264 -color=red,shape=circle,flag=1,i=96159,u=0.5122412779436548,v=0.4638787927655735,w=0.5367372010647821,x=5.637915664281828 -color=red,shape=triangle,flag=1,i=96163,u=0.6053873173220439,v=0.7748744349075521,w=0.5063751364943072,x=5.780191564409791 -color=red,shape=triangle,flag=0,i=96189,u=0.6799282412050941,v=0.15346921699793092,w=0.495885574165823,x=4.7011577154887645 -color=red,shape=square,flag=0,i=96201,u=0.1537994073527562,v=0.9791783796380524,w=0.5080221713445994,x=4.316219815138682 -color=red,shape=triangle,flag=0,i=96205,u=0.9853517582765164,v=0.8117688328600086,w=0.49210970081556293,x=4.346809360490263 -color=red,shape=circle,flag=0,i=96219,u=0.2540037235882736,v=0.16291780516875548,w=0.5234860327068843,x=2.9306178016011946 -color=yellow,shape=triangle,flag=1,i=96220,u=0.04510353065983863,v=0.6982109032332625,w=0.4883775242226292,x=4.088662097165213 -color=red,shape=square,flag=0,i=96223,u=0.09402120561917393,v=0.05313157052444151,w=0.5039799968651898,x=4.8771799749006055 -color=purple,shape=circle,flag=0,i=96233,u=0.11571093831848556,v=0.5113038026470524,w=0.46862217953527663,x=3.392490400038291 -color=red,shape=circle,flag=0,i=96238,u=0.01573142157455376,v=0.0768552496541719,w=0.5217362210575832,x=4.403578027256978 -color=red,shape=triangle,flag=0,i=96244,u=0.19524302626749834,v=0.3758656097497919,w=0.4983507551303781,x=2.304522394049828 -color=red,shape=triangle,flag=0,i=96250,u=0.8337474618350973,v=0.9600628954017896,w=0.49456350408513333,x=4.8508758297677215 -color=red,shape=circle,flag=1,i=96257,u=0.18506914976633337,v=0.15877971707154517,w=0.5236120006634366,x=3.336001097280219 -color=green,shape=circle,flag=0,i=96267,u=0.1347991479459697,v=0.4980375318782472,w=0.47939951705788325,x=3.60633618172144 -color=red,shape=square,flag=0,i=96277,u=0.03850189729758602,v=0.7178419532250438,w=0.5079281526733028,x=4.5290403972179885 -color=yellow,shape=square,flag=1,i=96278,u=0.6454657419549751,v=0.983018108485444,w=0.4774335826811351,x=2.955729927262149 -color=yellow,shape=circle,flag=0,i=96314,u=0.8205284107378986,v=0.7083231637415845,w=0.4890166781426609,x=5.225617763479977 -color=red,shape=square,flag=1,i=96317,u=0.13741722855999394,v=0.6973181200378114,w=0.5211802110632608,x=3.9668210915973128 -color=yellow,shape=triangle,flag=1,i=96320,u=0.5973408278919474,v=0.5730119857753153,w=0.4824021977514047,x=5.592620345137888 -color=purple,shape=triangle,flag=0,i=96321,u=0.22122636521068006,v=0.3915798896420922,w=0.5059835132049681,x=5.114537322072974 -color=red,shape=square,flag=1,i=96353,u=0.49625834974236394,v=0.26548572878487686,w=0.5209824742084431,x=4.989615126271908 -color=red,shape=triangle,flag=0,i=96358,u=0.9531132081452546,v=0.31613044984587446,w=0.496200227805815,x=6.7151425135946745 -color=yellow,shape=square,flag=1,i=96359,u=0.8408871035291287,v=0.9755149608180735,w=0.48851094419217744,x=6.0403806170332155 -color=blue,shape=circle,flag=1,i=96370,u=0.4256799445593342,v=0.8440931690888698,w=0.48925221027347976,x=4.0988964628309725 -color=red,shape=circle,flag=0,i=96374,u=0.5394311155541947,v=0.6206571237155135,w=0.5147480752868391,x=4.942284674972361 -color=red,shape=square,flag=1,i=96377,u=0.07817501039392116,v=0.29586063255101147,w=0.5233383643238237,x=5.0987289913082074 -color=blue,shape=square,flag=1,i=96387,u=0.8279662404044754,v=0.1336329890718898,w=0.5133205197150905,x=5.412347036816107 -color=red,shape=triangle,flag=0,i=96397,u=0.5550176624219795,v=0.3759031486752258,w=0.4910617171658142,x=2.9951560160680053 -color=red,shape=triangle,flag=1,i=96431,u=0.3206443033037468,v=0.6609938133553613,w=0.500129219027092,x=4.093189058880722 -color=red,shape=square,flag=0,i=96440,u=0.5527743240009251,v=0.5617708584536918,w=0.5064558542785705,x=5.0849946219112825 -color=yellow,shape=circle,flag=1,i=96461,u=0.4213770360462241,v=0.5643111647745723,w=0.4911471936490873,x=4.359268750812394 -color=red,shape=square,flag=1,i=96462,u=0.9049197708860998,v=0.9754284660267258,w=0.5068111207191822,x=6.069349019779153 -color=red,shape=square,flag=1,i=96476,u=0.44075709413911857,v=0.4868365504334653,w=0.5067130449725873,x=4.856440652889357 -color=red,shape=circle,flag=1,i=96481,u=0.8671250136807436,v=0.9442368143550283,w=0.5024024616048917,x=6.281369351378448 -color=red,shape=circle,flag=1,i=96483,u=0.257923630044134,v=0.20425375031078905,w=0.5022896654545875,x=4.653332394665 -color=yellow,shape=triangle,flag=1,i=96492,u=0.9222129750986249,v=0.3148953740017284,w=0.48113731450222064,x=6.9539559011754415 -color=blue,shape=square,flag=1,i=96498,u=0.875846620932736,v=0.2886080825394486,w=0.5225328851711897,x=5.641928193172539 -color=red,shape=triangle,flag=0,i=96499,u=0.54370234369147,v=0.9830996930683974,w=0.5119538464738257,x=5.3725541404567965 -color=purple,shape=square,flag=1,i=96509,u=0.25213949940984015,v=0.5600094467964819,w=0.483611074389497,x=5.463995937804239 -color=red,shape=circle,flag=0,i=96513,u=0.5840255152025253,v=0.64379073239883,w=0.5125190766820626,x=4.686287327540726 -color=purple,shape=triangle,flag=0,i=96518,u=0.7811323759842613,v=0.7008683738425372,w=0.5121591861656576,x=3.6940357853817924 -color=blue,shape=circle,flag=1,i=96534,u=0.763586420854788,v=0.3548512130831012,w=0.48909414385967737,x=4.21153573427312 -color=purple,shape=triangle,flag=0,i=96548,u=0.8853360655849348,v=0.21596139123580305,w=0.5094280911754115,x=6.868205543959447 -color=red,shape=triangle,flag=0,i=96557,u=0.7072217595654958,v=0.9122544763954878,w=0.5150148516633359,x=5.3407435655052495 -color=red,shape=square,flag=0,i=96561,u=0.6271868228292494,v=0.2126169635646109,w=0.5040037335246169,x=6.154218037849257 -color=green,shape=triangle,flag=0,i=96599,u=0.5506321480028791,v=0.8625866013557643,w=0.48788637049117073,x=4.358405203753322 -color=green,shape=circle,flag=1,i=96602,u=0.4971419875895393,v=0.8477666091538062,w=0.4774357227021727,x=3.363433494675512 -color=blue,shape=square,flag=0,i=96605,u=0.09933759395928465,v=0.004100487542805453,w=0.5276495494792367,x=3.832435218383292 -color=red,shape=triangle,flag=1,i=96621,u=0.2313996645622367,v=0.16044417338891637,w=0.5081820702418738,x=6.868830432605786 -color=purple,shape=square,flag=1,i=96646,u=0.8153799649374639,v=0.37606604371496444,w=0.49495402472012084,x=6.607505990567295 -color=red,shape=triangle,flag=0,i=96650,u=0.9573758464230904,v=0.011650017863653161,w=0.5042523373034675,x=6.053236752187001 -color=green,shape=circle,flag=1,i=96656,u=0.15301253370395795,v=0.9360480916991148,w=0.47996540675389343,x=4.964909635026444 -color=red,shape=circle,flag=0,i=96660,u=0.9339160633706772,v=0.9400747392523728,w=0.5072699914900494,x=5.696583467192387 -color=blue,shape=circle,flag=1,i=96674,u=0.6578842880061873,v=0.7430280001393442,w=0.4927840002992643,x=4.933691349038118 -color=red,shape=circle,flag=0,i=96681,u=0.9093417723765131,v=0.9312061484621479,w=0.5013956927167295,x=3.968201236086754 -color=yellow,shape=triangle,flag=1,i=96688,u=0.5441493781561474,v=0.7088517900510397,w=0.4900280653093751,x=4.315969716960768 -color=red,shape=triangle,flag=0,i=96710,u=0.2094719376918206,v=0.6082243970055167,w=0.5159501284164395,x=3.181489653403958 -color=blue,shape=triangle,flag=0,i=96713,u=0.21223246933503637,v=0.3103920219698435,w=0.5168260373272008,x=5.880069791255057 -color=yellow,shape=triangle,flag=1,i=96721,u=0.33556301493448626,v=0.7304677916147592,w=0.49932965008316815,x=3.8903214671557933 -color=yellow,shape=triangle,flag=1,i=96740,u=0.9664443538532672,v=0.5845457292223816,w=0.4968884965550576,x=5.8459770548241 -color=red,shape=square,flag=0,i=96766,u=0.22515664670363855,v=0.3233909748386826,w=0.5116507298661361,x=6.398730903199202 -color=purple,shape=circle,flag=0,i=96768,u=0.33608049960076525,v=0.6371986348667935,w=0.45349282172603966,x=6.781829725175949 -color=green,shape=square,flag=0,i=96774,u=0.2154734180741319,v=0.8781674700172086,w=0.5326455027398711,x=3.936220468122993 -color=purple,shape=square,flag=0,i=96782,u=0.27623451642617936,v=0.13894980550912983,w=0.5107294732254406,x=3.0829420270559056 -color=blue,shape=square,flag=0,i=96784,u=0.4193489666956077,v=0.10629875093142627,w=0.5317360271949962,x=3.876647954589947 -color=blue,shape=triangle,flag=1,i=96796,u=0.41206622235504087,v=0.3603765642834287,w=0.513749246897892,x=4.245544314256821 -color=red,shape=triangle,flag=0,i=96797,u=0.8390250766619783,v=0.8204339989162104,w=0.5019774546766443,x=6.234464210198609 -color=purple,shape=square,flag=0,i=96801,u=0.1696382894249373,v=0.6615691688116003,w=0.5153534841236239,x=4.335865319920412 -color=green,shape=triangle,flag=0,i=96811,u=0.9595897649215346,v=0.5455859308302632,w=0.48839988183493277,x=3.50764881622457 -color=red,shape=square,flag=1,i=96812,u=0.6633006211474649,v=0.3924932082381519,w=0.5000987314047961,x=4.524240244136892 -color=blue,shape=triangle,flag=0,i=96819,u=0.4213681511663504,v=0.23313744252939783,w=0.5088472157695753,x=4.398928665675311 -color=red,shape=square,flag=0,i=96845,u=0.3339797831018281,v=0.2588719544248831,w=0.4954868820621749,x=4.127128968682313 -color=red,shape=square,flag=0,i=96848,u=0.07791643009408067,v=0.1560682540432935,w=0.49666969974421393,x=5.572885243477472 -color=yellow,shape=square,flag=1,i=96851,u=0.5388018181776875,v=0.5546247073558797,w=0.48064667292004665,x=2.0579684303789714 -color=purple,shape=circle,flag=0,i=96870,u=0.5847649579675587,v=0.9875482745532688,w=0.4565858410190943,x=3.797353743957879 -color=blue,shape=square,flag=1,i=96875,u=0.9142142223643162,v=0.8731989992783917,w=0.5232963609026355,x=5.931479720806045 -color=purple,shape=triangle,flag=0,i=96886,u=0.7620914159993625,v=0.2589179659624974,w=0.5060775126241244,x=5.801846079964444 -color=red,shape=circle,flag=1,i=96887,u=0.008915214662668425,v=-0.06271145266677931,w=0.48755793492550203,x=3.5158895775946895 -color=purple,shape=square,flag=0,i=96892,u=0.9295795784913928,v=0.5567736910666704,w=0.5116561868187911,x=4.378387402108497 -color=orange,shape=circle,flag=1,i=96897,u=0.16818297872450094,v=0.810633088388253,w=0.4675226650638352,x=6.07189029851303 -color=yellow,shape=circle,flag=1,i=96901,u=0.2018414695350964,v=0.4057862820377357,w=0.5004512182623366,x=3.0974982927217423 -color=red,shape=square,flag=0,i=96903,u=0.9860464850796222,v=0.951976247614596,w=0.5212279100883831,x=8.578089301488708 -color=blue,shape=circle,flag=1,i=96915,u=0.006866076456939152,v=0.007289346396799012,w=0.49547388319366714,x=5.884116143801638 -color=purple,shape=triangle,flag=0,i=96930,u=0.5055845700264154,v=0.4552677253123145,w=0.5068760828442833,x=6.302386576403815 -color=red,shape=triangle,flag=0,i=96934,u=0.9607457187268132,v=0.38616109086537587,w=0.5080702805466717,x=3.9224562048526743 -color=red,shape=circle,flag=0,i=96945,u=0.6809384119739392,v=0.6554448624275744,w=0.48081192375711385,x=5.330509785976479 -color=red,shape=triangle,flag=1,i=96949,u=0.8436280439405668,v=0.8627029373150187,w=0.5007828226892923,x=5.965284103870897 -color=blue,shape=circle,flag=0,i=96953,u=0.09053061144662133,v=0.053288751024586634,w=0.49901702449999247,x=4.566063051710288 -color=red,shape=triangle,flag=0,i=96958,u=0.0329567371644508,v=0.48380256164528723,w=0.5054524565225944,x=5.913939544134682 -color=blue,shape=square,flag=1,i=96961,u=0.03575219860906198,v=0.015273446978771754,w=0.5244294295109888,x=4.8942594680635 -color=yellow,shape=triangle,flag=1,i=96964,u=0.6753010144630732,v=0.8088645160439986,w=0.49357119216876405,x=4.973181581826535 -color=blue,shape=circle,flag=0,i=96978,u=0.9982633408245939,v=0.4362474578687586,w=0.5044673207376004,x=4.461821832481811 -color=green,shape=square,flag=0,i=97000,u=0.6290508849121716,v=0.5975249117583501,w=0.5346361734874436,x=5.092610428669288 -color=red,shape=triangle,flag=1,i=97003,u=0.49391957222866134,v=0.3517329710102629,w=0.5067788753681516,x=5.849695362146246 -color=red,shape=triangle,flag=1,i=97016,u=0.9873458756911708,v=0.022119209398065,w=0.506457654513772,x=5.915977124768982 -color=yellow,shape=triangle,flag=1,i=97024,u=0.38811420132912866,v=0.7051529503359618,w=0.4926659114806118,x=7.386209603734446 -color=red,shape=circle,flag=0,i=97025,u=0.48790356365516274,v=0.5548030066184464,w=0.4970032883214445,x=3.8679936376690534 -color=red,shape=triangle,flag=1,i=97026,u=0.08818720098756072,v=0.415248186499631,w=0.5034342518985538,x=4.617569322681561 -color=red,shape=circle,flag=1,i=97028,u=0.392026413515555,v=0.42006604703125006,w=0.501221476705388,x=5.007722271208663 -color=purple,shape=triangle,flag=0,i=97029,u=0.1798377909811557,v=0.7675681621527558,w=0.509208691532998,x=5.688833082887121 -color=red,shape=triangle,flag=0,i=97041,u=0.32876541948093685,v=0.004890115461912536,w=0.49982816588472173,x=3.9469309159597246 -color=yellow,shape=triangle,flag=1,i=97048,u=0.7932219576138572,v=0.969102802862149,w=0.49328967669718116,x=4.834697688075342 -color=green,shape=square,flag=0,i=97055,u=0.24118869910422647,v=0.8159199718066013,w=0.5309988727295452,x=6.068079177044434 -color=red,shape=square,flag=0,i=97060,u=0.11827652670713684,v=0.442615493329682,w=0.48777601263636,x=4.631940118607367 -color=blue,shape=triangle,flag=0,i=97061,u=0.8741193108337573,v=0.7994579077417499,w=0.49637326188864817,x=5.084328756762589 -color=red,shape=square,flag=1,i=97082,u=0.09580776868114327,v=0.3127038023023665,w=0.49597039606379695,x=7.3113914677542295 -color=blue,shape=square,flag=0,i=97084,u=0.018387098959581127,v=0.46331768179852206,w=0.5141904006106274,x=6.823278545150015 -color=blue,shape=triangle,flag=1,i=97122,u=0.6293976558954338,v=0.1987399668110742,w=0.4751446156062487,x=4.8111959438878955 -color=red,shape=triangle,flag=0,i=97127,u=0.7406867607291928,v=0.7869628368930285,w=0.48725187375451035,x=6.373002723583167 -color=red,shape=square,flag=0,i=97131,u=0.07099747423767344,v=0.21023697449405598,w=0.5083224815615155,x=5.500497178920348 -color=red,shape=circle,flag=0,i=97142,u=0.09833987353193874,v=0.1147791068458756,w=0.49978560088685176,x=6.649395472152787 -color=red,shape=square,flag=0,i=97145,u=0.1095278718757351,v=0.4712615049049269,w=0.500997151201516,x=6.152237213506827 -color=blue,shape=square,flag=1,i=97149,u=0.1886728827395836,v=0.720803500813239,w=0.5140856399205782,x=5.255487499247563 -color=red,shape=triangle,flag=0,i=97151,u=0.13342444052386448,v=0.07884187380217789,w=0.492165846333622,x=5.9595039299953365 -color=purple,shape=square,flag=0,i=97154,u=0.28042409017376335,v=0.9412376677981548,w=0.5277662963859316,x=4.737930471132928 -color=red,shape=triangle,flag=0,i=97166,u=0.30970638691215,v=0.32341380412269727,w=0.49912091515574897,x=6.01117247150778 -color=green,shape=square,flag=0,i=97168,u=0.1912513634038605,v=0.49303796342198103,w=0.5352330183500308,x=3.326483531615287 -color=red,shape=circle,flag=0,i=97176,u=0.45579218349119677,v=0.3869630943022203,w=0.49883949059815036,x=6.494520740802528 -color=red,shape=triangle,flag=1,i=97177,u=0.12668139785697063,v=0.6323225812171959,w=0.4984072671432093,x=5.671608659509612 -color=red,shape=triangle,flag=0,i=97214,u=0.5348072571734852,v=0.5927012513329605,w=0.5108259339428247,x=6.735193656056778 -color=purple,shape=square,flag=0,i=97230,u=0.35470524541749526,v=0.20010542749315596,w=0.5303222548334717,x=6.428357947355543 -color=yellow,shape=triangle,flag=1,i=97234,u=0.47631436173471964,v=0.7765559018355477,w=0.47732119043101473,x=4.806593955730334 -color=purple,shape=circle,flag=0,i=97243,u=0.8230092004181703,v=0.9381872267787872,w=0.45712006521814225,x=6.174824436263681 -color=blue,shape=triangle,flag=1,i=97266,u=0.6909701381885082,v=0.8240221760455293,w=0.48619698532670647,x=4.259612407736948 -color=blue,shape=square,flag=1,i=97276,u=0.8516966151374171,v=0.10016699452463229,w=0.508175647297329,x=3.43208556464738 -color=yellow,shape=triangle,flag=1,i=97277,u=0.3860135243757694,v=0.14162591139520508,w=0.4764937593207753,x=4.009840029937227 -color=red,shape=circle,flag=1,i=97280,u=0.5917993310006303,v=0.5194695413216914,w=0.5010615202598578,x=5.698417328761084 -color=purple,shape=triangle,flag=0,i=97294,u=0.9755702075513683,v=0.24584559293392982,w=0.5214214048541824,x=4.723840504286124 -color=purple,shape=square,flag=0,i=97300,u=0.42027484356278855,v=0.22270130081509798,w=0.5242214498337153,x=3.5625814547603514 -color=orange,shape=circle,flag=1,i=97301,u=0.9553848886986518,v=0.7799807659966358,w=0.4608595151265397,x=4.604757742088484 -color=red,shape=circle,flag=1,i=97309,u=0.04777252740431659,v=0.11857770295836605,w=0.49994976976023503,x=3.5012074061713405 -color=yellow,shape=circle,flag=1,i=97312,u=0.7273664187957455,v=0.6821231276230334,w=0.4900791531096476,x=5.129983466787765 -color=red,shape=square,flag=0,i=97331,u=0.37926688266873265,v=0.4864574679061694,w=0.4942426957567359,x=5.269920041356692 -color=red,shape=square,flag=0,i=97343,u=0.6241079278926611,v=0.8018744306885754,w=0.4909620282552845,x=2.6395618832093914 -color=green,shape=square,flag=0,i=97344,u=0.8616687764933793,v=0.5685012317353809,w=0.5257345134696678,x=5.616811142165216 -color=red,shape=circle,flag=1,i=97363,u=0.16491847512221658,v=0.21048409982526964,w=0.5031948314548698,x=7.349845996160004 -color=red,shape=square,flag=0,i=97372,u=0.8269241296383256,v=0.6967117814030773,w=0.4965201109007503,x=5.1784863070239355 -color=red,shape=square,flag=0,i=97376,u=0.19609500207002672,v=0.19023274723169536,w=0.5070041538850066,x=5.223435346279785 -color=red,shape=triangle,flag=0,i=97380,u=0.8919455096083191,v=0.5924857368525175,w=0.5106536844624204,x=5.8747646648899865 -color=blue,shape=triangle,flag=0,i=97384,u=0.3215611431884712,v=0.21973012811149484,w=0.48887320823151775,x=5.387662287666793 -color=blue,shape=square,flag=1,i=97390,u=0.5683638775808385,v=0.2784245223252638,w=0.5229640465145601,x=3.438195606907572 -color=yellow,shape=circle,flag=1,i=97396,u=0.9432514765439831,v=0.4255263132934115,w=0.4910916056568584,x=8.311929483038284 -color=purple,shape=triangle,flag=0,i=97400,u=0.6861602139534393,v=0.9421516880329144,w=0.5131445004303671,x=4.548344352898108 -color=blue,shape=circle,flag=1,i=97403,u=0.9772545408148562,v=0.02667878239259458,w=0.4800751827681361,x=5.4068923530300586 -color=red,shape=triangle,flag=0,i=97415,u=0.4202070093270537,v=0.5567466106741579,w=0.5083881941755304,x=6.015079574597386 -color=purple,shape=square,flag=0,i=97437,u=0.7147659294214207,v=0.22750813482497856,w=0.5097905756139546,x=5.571440660985307 -color=purple,shape=square,flag=0,i=97456,u=0.7723035279117967,v=0.050217423978692555,w=0.5144639026111142,x=5.993029032868384 -color=green,shape=square,flag=0,i=97460,u=0.0782987251399535,v=0.12876499173112188,w=0.5220400684813095,x=5.789980053367799 -color=red,shape=square,flag=0,i=97462,u=0.08965807151828942,v=0.10643707279095249,w=0.5008978912962472,x=5.616013051283294 -color=red,shape=circle,flag=0,i=97467,u=0.7766741505785799,v=0.7484017480681512,w=0.5030197226971365,x=3.496080359290433 -color=green,shape=triangle,flag=0,i=97479,u=0.44152744337097793,v=0.5844495248568005,w=0.4940033847922217,x=4.315221374690091 -color=purple,shape=square,flag=0,i=97516,u=0.28402613483717465,v=0.4272049677002838,w=0.5091847486779658,x=4.300723570993671 -color=red,shape=triangle,flag=0,i=97518,u=0.13164672554701873,v=0.22921222398891972,w=0.5150332966927038,x=4.163427956316571 -color=red,shape=triangle,flag=0,i=97521,u=0.8298504144125524,v=0.6334400989390334,w=0.5138879233833277,x=4.580764024404662 -color=blue,shape=circle,flag=0,i=97522,u=0.6161536601333419,v=0.10011125645874996,w=0.48975848692141466,x=4.272053125774312 -color=red,shape=square,flag=0,i=97528,u=0.5026882085865776,v=0.09627587585336217,w=0.5006311175911682,x=5.209893874383046 -color=yellow,shape=triangle,flag=1,i=97537,u=0.2618325583909621,v=0.8139707712866776,w=0.47221599116161334,x=4.814572637440977 -color=red,shape=square,flag=1,i=97541,u=0.26012815842242976,v=0.5746267570070889,w=0.5058301006804881,x=7.894284173816768 -color=red,shape=square,flag=0,i=97579,u=0.5562711220007341,v=0.904963651078646,w=0.5058172540812761,x=5.924094256885994 -color=red,shape=circle,flag=0,i=97609,u=0.8961614931968467,v=0.979176636525386,w=0.5025893437530877,x=3.8290612156016643 -color=red,shape=square,flag=0,i=97621,u=0.9214089464989041,v=0.9071850948395918,w=0.5001465142808271,x=5.764287284989577 -color=orange,shape=triangle,flag=0,i=97626,u=0.9630188333882982,v=0.27386939920704134,w=0.5064392730701361,x=4.538819506187884 -color=red,shape=square,flag=1,i=97680,u=0.3209211121736111,v=0.3899516029122365,w=0.5198867447086687,x=7.06857285048642 -color=red,shape=square,flag=0,i=97688,u=0.5911520575244686,v=0.33186590764785806,w=0.5180611691981245,x=5.04041766542527 -color=purple,shape=triangle,flag=0,i=97711,u=0.04797693766549749,v=0.4056005979165126,w=0.5273590237315651,x=6.255121933383456 -color=blue,shape=triangle,flag=1,i=97720,u=0.594943728773139,v=0.021015724656598733,w=0.49445682186947093,x=4.686014512170725 -color=red,shape=square,flag=1,i=97728,u=0.18091463089999837,v=0.7024748500590835,w=0.5213011945044698,x=3.816509651620779 -color=green,shape=triangle,flag=0,i=97743,u=0.4660292875154822,v=0.9055364869739684,w=0.5027993217625732,x=3.9121321558708826 -color=blue,shape=circle,flag=0,i=97757,u=0.21642242605405448,v=0.7011683595472,w=0.49092845735927554,x=5.149654671760703 -color=red,shape=triangle,flag=0,i=97769,u=0.2758974960696885,v=0.14252263841836466,w=0.5092202307326151,x=3.9296557153052114 -color=green,shape=circle,flag=0,i=97782,u=0.9229506182027291,v=0.7709550496964023,w=0.48690715626806763,x=5.003019797233288 -color=red,shape=triangle,flag=1,i=97785,u=0.6687944994434781,v=0.4292208180608189,w=0.5060053205603642,x=6.445192505384767 -color=purple,shape=square,flag=0,i=97787,u=0.1626976458292152,v=0.7169415062126457,w=0.505993441989183,x=6.757878157483494 -color=green,shape=triangle,flag=0,i=97792,u=0.6942834648605322,v=0.35075423520437954,w=0.5025883258793723,x=3.851474577720205 -color=red,shape=triangle,flag=0,i=97804,u=0.32617072932399793,v=0.9068176837587851,w=0.5064110510788882,x=6.24923704998471 -color=red,shape=square,flag=0,i=97811,u=0.9110657161485545,v=0.3361415665550729,w=0.5223693330863728,x=4.719245115124646 -color=blue,shape=circle,flag=1,i=97814,u=0.2336720213891289,v=0.017690895141252994,w=0.49160496509972607,x=3.368817659596946 -color=green,shape=square,flag=1,i=97831,u=0.791839678998911,v=0.09716252851029294,w=0.5529004211039809,x=5.806767943682989 -color=red,shape=triangle,flag=1,i=97850,u=0.27791068733728586,v=0.43087228249903153,w=0.507797637334018,x=4.20709013302241 -color=red,shape=triangle,flag=0,i=97865,u=0.6706345591784993,v=0.14657495989907243,w=0.5103829126613852,x=3.489613130965964 -color=red,shape=square,flag=0,i=97871,u=0.6580510350061215,v=0.24238942484632964,w=0.508294984179414,x=3.0467382134923864 -color=green,shape=square,flag=0,i=97889,u=0.49524086289950964,v=0.26821675698893166,w=0.552217601994032,x=7.590476710621381 -color=purple,shape=square,flag=0,i=97900,u=0.6356407072311071,v=0.25518813062704515,w=0.49942290791391064,x=5.847117102786026 -color=red,shape=square,flag=1,i=97907,u=0.34307032893968903,v=0.7647008654150338,w=0.5050882613982243,x=4.866015539792325 -color=red,shape=square,flag=0,i=97919,u=0.7820969385206633,v=0.10597975297762219,w=0.5036810391453648,x=3.460596463977654 -color=green,shape=square,flag=0,i=97925,u=0.6057162184564446,v=0.3400418548484976,w=0.5480957487864978,x=5.268311384911246 -color=blue,shape=triangle,flag=1,i=97937,u=0.1785561921637433,v=0.775634933829922,w=0.47680078029824097,x=3.490791433897275 -color=green,shape=square,flag=0,i=97956,u=0.09790995734527219,v=0.5256502236653826,w=0.5544820469204593,x=3.8546594386452635 -color=yellow,shape=circle,flag=1,i=97959,u=0.8883170086471701,v=0.6035152092966669,w=0.4808478413838625,x=5.770285032852261 -color=red,shape=square,flag=0,i=97967,u=0.7402283154845064,v=0.1604949757057924,w=0.5140215805849698,x=6.116271657363665 -color=yellow,shape=square,flag=1,i=97971,u=0.08311863804936337,v=0.0643552871363311,w=0.5034505068151336,x=6.00942969226669 -color=red,shape=circle,flag=0,i=98022,u=0.596592697008244,v=0.6436328707837564,w=0.47959785785757963,x=4.964166660347895 -color=green,shape=circle,flag=0,i=98027,u=0.40649882186404573,v=0.09562074476567484,w=0.49007555940735587,x=4.98731748857221 -color=purple,shape=square,flag=0,i=98028,u=0.7931704431696368,v=0.7928491541153797,w=0.4959683700173671,x=8.2086458340531 -color=green,shape=triangle,flag=1,i=98062,u=0.5750083677475532,v=0.1258784060108571,w=0.5120529416099076,x=4.675720601321245 -color=blue,shape=circle,flag=0,i=98064,u=0.008471805828746404,v=0.31301781762169756,w=0.4988495921835018,x=6.22981100786252 -color=red,shape=triangle,flag=0,i=98070,u=0.8890180051875659,v=0.641894541546162,w=0.5230969157729751,x=6.492158723647763 -color=green,shape=circle,flag=0,i=98079,u=0.9638868362687497,v=0.7509965571682672,w=0.49409764753305424,x=6.392330683917962 -color=red,shape=square,flag=0,i=98088,u=0.7138491163783625,v=0.5660995446533844,w=0.5322588559331034,x=4.3846152618851955 -color=yellow,shape=triangle,flag=1,i=98116,u=0.5119224643680647,v=0.8325885087413708,w=0.5027608321302205,x=4.182137286239789 -color=yellow,shape=square,flag=1,i=98125,u=0.8649783193074638,v=0.8296944841891143,w=0.5071693423344046,x=4.818995357800668 -color=blue,shape=circle,flag=1,i=98142,u=0.11903130827090902,v=0.0794600640138523,w=0.5045210513824391,x=3.858197748626988 -color=yellow,shape=square,flag=1,i=98149,u=0.9029710888023735,v=0.8717011042953099,w=0.49652962702863235,x=6.619770189242416 -color=orange,shape=triangle,flag=0,i=98151,u=0.43642298258222634,v=0.2193997453172266,w=0.499106748704397,x=4.3030028275210475 -color=red,shape=triangle,flag=0,i=98154,u=0.30232977366424907,v=0.3959937521763154,w=0.5258396790372201,x=4.282090119984676 -color=red,shape=triangle,flag=0,i=98163,u=0.15968459410082014,v=0.6593181353960239,w=0.5302854614163199,x=4.175227952430347 -color=red,shape=square,flag=1,i=98196,u=0.11040543455660845,v=0.2918881950971337,w=0.5227695638617097,x=4.369949207705616 -color=purple,shape=square,flag=0,i=98202,u=0.30751541181208664,v=0.9197690237746908,w=0.4991078400590991,x=5.914550009254785 -color=green,shape=circle,flag=0,i=98207,u=0.9911573976993934,v=0.17411590095256702,w=0.48569904607795705,x=4.556901286375683 -color=yellow,shape=square,flag=1,i=98208,u=0.05702815869116118,v=0.23117048329632328,w=0.4914488924620556,x=5.995338563130926 -color=red,shape=square,flag=0,i=98209,u=0.3156966222570933,v=0.2698358712069102,w=0.5205166475872047,x=3.179376363487068 -color=red,shape=square,flag=1,i=98219,u=0.3585605891873931,v=0.7849025301242254,w=0.5247071043755026,x=3.6436009871680306 -color=yellow,shape=circle,flag=0,i=98225,u=0.5101004345114215,v=0.8276951221554976,w=0.48994504198333605,x=5.217640747985201 -color=purple,shape=triangle,flag=0,i=98237,u=0.6056701129171512,v=0.17760094149129158,w=0.5064293455604001,x=4.787472118135386 -color=red,shape=circle,flag=0,i=98246,u=0.8396846017362914,v=0.7948287790783244,w=0.48174517695444125,x=6.232121886626242 -color=red,shape=triangle,flag=0,i=98264,u=0.6925214882912937,v=0.7060504603224776,w=0.5194984955295038,x=5.129705681175931 -color=red,shape=square,flag=1,i=98270,u=0.8333327091854051,v=0.9073243527476074,w=0.5092593522702931,x=5.447554624882591 -color=blue,shape=circle,flag=0,i=98277,u=0.8833050862568871,v=0.32423120247830917,w=0.5045031620937903,x=4.151562791435151 -color=yellow,shape=triangle,flag=1,i=98292,u=0.027845065631730836,v=0.04910793281989667,w=0.5016167941049705,x=4.032763706389033 -color=red,shape=triangle,flag=1,i=98304,u=0.960050401343297,v=0.878848157843013,w=0.5092386650812065,x=5.734219891862999 -color=blue,shape=square,flag=0,i=98307,u=0.30723347276213786,v=0.3227401321430875,w=0.5083917433216159,x=3.6616507743396816 -color=blue,shape=square,flag=0,i=98316,u=0.5174898118201812,v=0.5205216914321144,w=0.5060395164659975,x=6.791077771912952 -color=yellow,shape=square,flag=1,i=98322,u=0.5024867844104095,v=0.859915626689891,w=0.48031937822922294,x=5.63959426909231 -color=yellow,shape=square,flag=1,i=98325,u=0.2693442027373001,v=0.18337718642091838,w=0.48013256486796685,x=3.764308344824317 -color=red,shape=triangle,flag=0,i=98332,u=0.32667214044077975,v=0.05130212052518457,w=0.527595893109353,x=6.130190313809526 -color=red,shape=square,flag=1,i=98342,u=0.12841792565501742,v=0.008480499687680498,w=0.4965187584425047,x=4.692798781705341 -color=purple,shape=square,flag=1,i=98346,u=0.7582084573585267,v=0.5214721652872817,w=0.4908777054805034,x=6.948015382313787 -color=green,shape=circle,flag=0,i=98365,u=0.11274608726768476,v=0.2548579470940253,w=0.4900444734968059,x=2.8952501845025704 -color=red,shape=circle,flag=0,i=98375,u=0.3445971803963863,v=0.2706372068659536,w=0.4799366072558581,x=4.584488823465119 -color=green,shape=circle,flag=0,i=98378,u=0.14799431378210703,v=0.7006060042757039,w=0.48690198078433355,x=4.694771460754332 -color=yellow,shape=triangle,flag=1,i=98395,u=0.2983265373399384,v=0.6070296404204049,w=0.5040106455993951,x=6.178216789219749 -color=red,shape=square,flag=0,i=98405,u=0.3656304933774207,v=0.9265696681158306,w=0.4965558078481272,x=6.3116669969858785 -color=red,shape=square,flag=1,i=98407,u=0.7314842259220952,v=0.7974038161823683,w=0.4939948999334246,x=4.93517526162906 -color=yellow,shape=triangle,flag=1,i=98414,u=0.009369601388535709,v=0.202361826029956,w=0.5070663603552441,x=7.25521627101551 -color=red,shape=circle,flag=0,i=98435,u=0.7330783388812637,v=0.6595531078341765,w=0.5003030690931154,x=4.374039636250854 -color=red,shape=square,flag=0,i=98444,u=0.7068916459367539,v=0.10909506233927113,w=0.4934182655187043,x=6.594235035626636 -color=blue,shape=square,flag=1,i=98475,u=0.8486649164434737,v=0.6603138829940969,w=0.5143953511210234,x=3.8853877436383013 -color=blue,shape=triangle,flag=1,i=98476,u=0.1706498432969359,v=0.9313273233962576,w=0.46953105665730394,x=4.421531563835029 -color=green,shape=square,flag=0,i=98477,u=0.7968165647564313,v=0.6920218355838409,w=0.5353477482292824,x=5.326952229760757 -color=red,shape=circle,flag=0,i=98489,u=0.5040210327435094,v=0.5080539671354949,w=0.4953259570701542,x=2.686190680986473 -color=green,shape=triangle,flag=1,i=98502,u=0.5791988541078736,v=0.2075863271917444,w=0.5179011746463379,x=6.829881907712913 -color=red,shape=circle,flag=0,i=98510,u=0.8022565155247456,v=0.833447459978276,w=0.49209858648418725,x=5.0105549808616905 -color=red,shape=square,flag=0,i=98513,u=0.7411176091737193,v=0.9081116317859208,w=0.4763468049657452,x=4.174979354461981 -color=red,shape=triangle,flag=0,i=98521,u=0.7618365018681525,v=0.6532884547101894,w=0.5180203507031043,x=1.97042672080589 -color=red,shape=square,flag=0,i=98523,u=0.7505947513859343,v=0.8838996599672665,w=0.4725185204387244,x=5.278352800864932 -color=blue,shape=square,flag=1,i=98530,u=0.19902590179507995,v=0.7675412314816443,w=0.5072773038301646,x=4.41905381308439 -color=blue,shape=triangle,flag=0,i=98532,u=0.3387489623595159,v=0.8056357479122686,w=0.4708233015007791,x=6.3592144032863445 -color=red,shape=triangle,flag=1,i=98543,u=0.5573891226375833,v=0.513218875199012,w=0.525218791919852,x=6.302312930645479 -color=red,shape=triangle,flag=0,i=98556,u=0.773584819993225,v=0.954863754652885,w=0.5387324719083295,x=4.168274102156399 -color=purple,shape=triangle,flag=0,i=98603,u=0.4709942129781579,v=0.5776538348539528,w=0.4903421367001042,x=4.22875298100828 -color=red,shape=triangle,flag=1,i=98604,u=0.21617190570220934,v=0.8118320769990091,w=0.5302895785660899,x=4.994739916648304 -color=red,shape=square,flag=1,i=98614,u=0.7717997271506307,v=0.694889660989654,w=0.49182606233464893,x=5.586762853077823 -color=yellow,shape=square,flag=1,i=98618,u=0.7158601697212569,v=0.6198863169592298,w=0.5017311396656775,x=3.1657203518557764 -color=red,shape=square,flag=0,i=98641,u=0.5903083379634668,v=0.40294970262148055,w=0.49124292307181483,x=7.460997468162266 -color=green,shape=square,flag=1,i=98650,u=0.17462174347448733,v=0.17291197841103367,w=0.5365201920196407,x=4.219315695577421 -color=blue,shape=triangle,flag=0,i=98651,u=0.850163636671208,v=0.7437087441707033,w=0.48493078635184755,x=5.356779484241809 -color=red,shape=square,flag=0,i=98666,u=0.44755524137388003,v=0.7290060921550455,w=0.4895362079521921,x=4.540070940732686 -color=red,shape=triangle,flag=0,i=98673,u=0.9522918108313615,v=0.6632409839961452,w=0.5160995929179415,x=5.453980519882566 -color=yellow,shape=square,flag=1,i=98679,u=0.7257230636415277,v=0.15821791451345935,w=0.5041210057325703,x=4.658210493083602 -color=red,shape=triangle,flag=0,i=98691,u=0.7056870482058987,v=0.6121270004524071,w=0.5107845688446131,x=3.202611395785899 -color=red,shape=square,flag=1,i=98694,u=0.9255603190188986,v=0.7578759177697019,w=0.4810597353437104,x=7.343140375626663 -color=red,shape=circle,flag=0,i=98700,u=0.6081536638347593,v=0.5793295448994082,w=0.46847664251643806,x=6.103593510786826 -color=blue,shape=triangle,flag=1,i=98715,u=0.025345432928356004,v=0.04590075545663996,w=0.4807235119165878,x=3.7631866957272027 -color=green,shape=square,flag=0,i=98739,u=0.6181931897553943,v=0.19631572035713352,w=0.5376470373273067,x=5.060939091160315 -color=red,shape=circle,flag=0,i=98751,u=0.08589407452496844,v=0.16138463561292965,w=0.4624927933033351,x=5.525860659224803 -color=red,shape=circle,flag=1,i=98753,u=0.629930398213001,v=0.6490202846783595,w=0.46158517170089164,x=1.9479107880796083 -color=yellow,shape=triangle,flag=1,i=98764,u=0.22411239108292103,v=0.6541807772205734,w=0.5204002524770049,x=6.780293402854686 -color=blue,shape=circle,flag=1,i=98786,u=0.5684202039796897,v=0.5431289702655762,w=0.48376204053409183,x=5.9318278617135585 -color=green,shape=circle,flag=1,i=98788,u=0.8002481149533739,v=0.70249445769141,w=0.47109923260072795,x=6.711355283725356 -color=orange,shape=triangle,flag=0,i=98803,u=0.584108170545539,v=0.6170673393043582,w=0.5017516669982233,x=6.399187526134138 -color=purple,shape=triangle,flag=0,i=98840,u=0.745183310848143,v=0.7851594618870195,w=0.48610608245077697,x=5.171335378864255 -color=red,shape=triangle,flag=1,i=98846,u=0.2635165971815081,v=0.6682494697333642,w=0.5217979550147812,x=5.346978866248844 -color=red,shape=square,flag=0,i=98859,u=0.5576207204193139,v=0.2779344828569307,w=0.48737356354465594,x=4.958860724637386 -color=blue,shape=square,flag=1,i=98861,u=0.4534982983108291,v=0.1821425448485171,w=0.5077049428376395,x=4.392226779015571 -color=red,shape=square,flag=0,i=98874,u=0.9766648327855758,v=0.7538581370395677,w=0.4734546946880415,x=2.708026978057306 -color=red,shape=square,flag=0,i=98875,u=0.9177867276372873,v=0.28688458940185124,w=0.4715348727021706,x=4.944174406898203 -color=red,shape=square,flag=1,i=98889,u=0.8298108266101528,v=0.2609649733736763,w=0.4731757812181874,x=4.121731738027449 -color=blue,shape=triangle,flag=1,i=98917,u=0.30352961806180756,v=0.7222121763294063,w=0.4937171857379458,x=3.889977642599162 -color=red,shape=circle,flag=0,i=98918,u=0.5395892607693311,v=0.4679800027559581,w=0.45650436231680047,x=4.291241711911771 -color=purple,shape=square,flag=0,i=98919,u=0.9215020298105698,v=0.41359427330555776,w=0.5105720245647634,x=4.053039115224837 -color=red,shape=square,flag=0,i=98924,u=0.16323720289059396,v=0.5399433188460773,w=0.4706758338100679,x=3.6793976137362208 -color=red,shape=triangle,flag=0,i=98930,u=0.5071704346461817,v=0.7475614109700602,w=0.5075627708923901,x=5.727124769296046 -color=orange,shape=triangle,flag=1,i=98938,u=0.03682067994139049,v=0.8058252534406598,w=0.5013635617853365,x=3.957012035092648 -color=red,shape=circle,flag=0,i=98951,u=0.6502988217727155,v=0.6738339190891354,w=0.4642859620025278,x=4.578867404302979 -color=yellow,shape=circle,flag=1,i=98959,u=0.052607659809360774,v=0.7429411241873004,w=0.4770783523327097,x=3.540971072333878 -color=red,shape=circle,flag=0,i=98970,u=0.030517997188448054,v=-0.019938543236686895,w=0.46025313863193423,x=5.192876447732735 -color=yellow,shape=square,flag=1,i=98972,u=0.7923703839245609,v=0.9496086708617593,w=0.4926256087476328,x=5.884152411212029 -color=red,shape=triangle,flag=0,i=98973,u=0.9646647324293749,v=0.23353083519222173,w=0.5082820599508759,x=4.243920290934238 -color=red,shape=circle,flag=0,i=98982,u=0.87531761397145,v=0.8410483054865789,w=0.4688967315014258,x=5.515906047564568 -color=red,shape=square,flag=0,i=98991,u=0.38950844371289317,v=0.2095912314566527,w=0.4746905213482261,x=6.416946106030669 -color=purple,shape=triangle,flag=0,i=98999,u=0.8373888270995616,v=0.9004631711504962,w=0.500910407607595,x=6.404667123458629 -color=yellow,shape=triangle,flag=1,i=99018,u=0.3703359855470002,v=0.7567799821125469,w=0.5305932826585406,x=4.704801613062089 -color=blue,shape=square,flag=0,i=99019,u=0.4126019275484226,v=0.47466901454349353,w=0.517700140254291,x=6.40040516807471 -color=red,shape=triangle,flag=1,i=99021,u=0.2746609317921088,v=0.27535794611277764,w=0.5102809797353317,x=4.194039625007223 -color=purple,shape=triangle,flag=0,i=99029,u=0.814872228954333,v=0.6437340043868705,w=0.4992262140974474,x=3.476020918161739 -color=purple,shape=square,flag=0,i=99044,u=0.18298976791687627,v=0.08620598646493649,w=0.508255493932817,x=5.74997950238174 -color=red,shape=square,flag=0,i=99060,u=0.1861052169166879,v=0.5578501417003999,w=0.4830831596641846,x=5.638164559647614 -color=red,shape=square,flag=0,i=99063,u=0.8691209244378582,v=0.7255397901285395,w=0.48473307117656084,x=5.554244905866582 -color=purple,shape=square,flag=0,i=99084,u=0.140135809141123,v=0.8796690116315877,w=0.5090719448370761,x=3.592292833797416 -color=red,shape=triangle,flag=0,i=99089,u=0.9604861106351722,v=0.7895720428617851,w=0.5044234430734816,x=6.979556771038148 -color=red,shape=square,flag=0,i=99096,u=0.3968012085621694,v=0.05957411372935073,w=0.4848470893576292,x=4.623878746546619 -color=red,shape=square,flag=0,i=99101,u=0.0011651940899418678,v=0.11229628959018367,w=0.4788050982043006,x=5.095099652910183 -color=blue,shape=triangle,flag=1,i=99113,u=0.3978290825561349,v=0.9374672741761598,w=0.4906901634524283,x=6.166006351081285 -color=red,shape=triangle,flag=0,i=99114,u=0.3179370117598467,v=0.7521866058794734,w=0.5013292175628846,x=3.924316170342216 -color=purple,shape=square,flag=0,i=99122,u=0.5067956247665032,v=0.40978981981124984,w=0.512695182649365,x=4.644094764497326 -color=red,shape=circle,flag=0,i=99132,u=0.8183473866720897,v=0.8004326135444801,w=0.4681417601305023,x=6.636958016528148 -color=blue,shape=triangle,flag=1,i=99149,u=0.9347833190023043,v=0.17759947718311153,w=0.48342825690505387,x=4.294291297643057 -color=red,shape=triangle,flag=0,i=99160,u=0.9118601081739102,v=0.21866307347201497,w=0.5126438139193853,x=3.7614015818050635 -color=blue,shape=circle,flag=1,i=99178,u=0.5522042974181056,v=0.5110264204106798,w=0.454725293617378,x=5.497867112649582 -color=red,shape=square,flag=0,i=99182,u=0.8284785228042405,v=0.11334020374011111,w=0.4743863622973718,x=4.490154043481057 -color=purple,shape=circle,flag=1,i=99196,u=0.9895554723278063,v=0.6080605951457241,w=0.4579125157028215,x=3.623307368175551 -color=red,shape=triangle,flag=0,i=99199,u=0.8796844690129273,v=0.78836214798338,w=0.49821688429188404,x=4.873427084229231 -color=yellow,shape=triangle,flag=1,i=99228,u=0.5983123975020165,v=0.3800340402706248,w=0.5252102605288587,x=4.64246012097752 -color=red,shape=circle,flag=0,i=99251,u=0.6324438847732219,v=0.6814258727283171,w=0.46724065035984785,x=3.7384566384604434 -color=purple,shape=circle,flag=1,i=99253,u=0.2795693874420423,v=0.29814197666682773,w=0.45853317683334,x=3.851117815506532 -color=red,shape=square,flag=0,i=99256,u=0.21274424557691052,v=0.5976191487889706,w=0.4719030343187279,x=4.081821670992002 -color=yellow,shape=triangle,flag=1,i=99259,u=0.32430798930823,v=0.9520335926581642,w=0.5234824129992659,x=4.264556022626916 -color=green,shape=square,flag=0,i=99262,u=0.007623723341571131,v=0.4139260214166408,w=0.545108727764001,x=3.1603213699973236 -color=red,shape=circle,flag=0,i=99268,u=0.4355482865958541,v=0.33867909144166575,w=0.47066794301154957,x=4.481125137057083 -color=yellow,shape=square,flag=1,i=99272,u=0.7095694323926698,v=0.4534111967446265,w=0.5076592155958451,x=4.335544569970653 -color=red,shape=triangle,flag=0,i=99278,u=0.9548394302661511,v=0.2548985622086267,w=0.5080298283382719,x=5.050137551587912 -color=red,shape=square,flag=0,i=99280,u=0.3133923167715389,v=0.0653636454921509,w=0.4687503117971006,x=4.468325259930274 -color=yellow,shape=circle,flag=1,i=99284,u=0.6530503199545348,v=0.23908588907834516,w=0.4799125551304738,x=6.379888206335166 -color=yellow,shape=triangle,flag=1,i=99291,u=0.7614050649292594,v=0.10253010428320819,w=0.5273143616350555,x=5.691701516753241 -color=blue,shape=square,flag=0,i=99313,u=0.7901772384605223,v=0.3528868403443989,w=0.5270429175217797,x=4.451400324939132 -color=blue,shape=triangle,flag=1,i=99332,u=0.2841324877296606,v=0.2094373026612476,w=0.4864008357821705,x=5.608657584231664 -color=blue,shape=triangle,flag=0,i=99343,u=0.3835355889880442,v=0.9627143534778757,w=0.4845060869373707,x=5.821407210159099 -color=blue,shape=circle,flag=0,i=99346,u=0.14926698328541177,v=0.3173338938597636,w=0.4592474153396285,x=2.9937797037782476 -color=red,shape=triangle,flag=1,i=99350,u=0.5591628968416275,v=0.15274073137276667,w=0.5201633734512585,x=6.427777836179761 -color=yellow,shape=circle,flag=1,i=99353,u=0.5188661038632155,v=0.6454466534583754,w=0.48192389963375143,x=5.417220745930677 -color=green,shape=circle,flag=0,i=99356,u=0.9287483786191593,v=0.5448422718795073,w=0.48572595180883404,x=4.232961138381335 -color=orange,shape=square,flag=1,i=99364,u=0.21062547263510378,v=0.057097772636379496,w=0.4800603180908969,x=5.929286003481908 -color=blue,shape=square,flag=1,i=99374,u=0.9014855376883767,v=0.3843193381166754,w=0.5302549095013845,x=5.617111099160013 -color=red,shape=square,flag=0,i=99387,u=0.7284775790688164,v=0.5830407198778343,w=0.47264024729354126,x=4.749638973634444 -color=red,shape=triangle,flag=1,i=99389,u=0.969493522972176,v=0.14580711732352647,w=0.516274600964966,x=4.431460556073614 -color=purple,shape=square,flag=0,i=99399,u=0.37261182117473546,v=0.5122761495638001,w=0.5186797952023794,x=4.832424434642822 -color=red,shape=circle,flag=1,i=99413,u=0.04515578822892985,v=0.1027674776150671,w=0.4824507480155599,x=3.2750466098772306 -color=green,shape=circle,flag=0,i=99421,u=0.49007843311537935,v=0.2767289990629622,w=0.4845426312972711,x=3.2754112510228803 -color=red,shape=square,flag=0,i=99424,u=0.5512592927823597,v=0.01821904923581552,w=0.46774548667175353,x=3.6895821421292747 -color=red,shape=circle,flag=1,i=99434,u=0.3792243153960161,v=0.466831985895362,w=0.4925736244351452,x=6.327652379516802 -color=green,shape=triangle,flag=0,i=99441,u=0.5146116108450614,v=0.4987895969345195,w=0.5458469449083049,x=4.325609904488275 -color=blue,shape=triangle,flag=1,i=99442,u=0.7487344013310542,v=0.2085025891392418,w=0.4867242313908085,x=5.2295149366099976 -color=yellow,shape=circle,flag=1,i=99458,u=0.005660571937996628,v=0.9022898196092912,w=0.48706905915563037,x=4.579708935331985 -color=red,shape=square,flag=1,i=99470,u=0.8119142504046272,v=0.8362806282160352,w=0.46096046558142645,x=4.612507390997711 -color=yellow,shape=triangle,flag=1,i=99476,u=0.2024424684853019,v=0.4234637932716139,w=0.520849384463336,x=5.314646088506813 -color=red,shape=circle,flag=0,i=99484,u=0.7551632127081732,v=0.6974814333958862,w=0.487473970650931,x=7.374009786587409 -color=yellow,shape=triangle,flag=1,i=99491,u=0.12007298876629291,v=0.3559014176804719,w=0.5168219132382291,x=5.940741085759094 -color=red,shape=circle,flag=0,i=99508,u=0.8587979286309798,v=0.8851429506115143,w=0.48047251565051924,x=3.295818956537587 -color=red,shape=triangle,flag=0,i=99513,u=0.6934187000138446,v=0.734327396129899,w=0.5148028596289214,x=4.9893445490629285 -color=red,shape=square,flag=1,i=99546,u=0.5226384738105205,v=0.8368705748998306,w=0.4788787393405911,x=5.385597013594741 -color=red,shape=square,flag=1,i=99550,u=0.09927742729294176,v=0.08334068303333408,w=0.47963609129774487,x=2.1640218691086637 -color=red,shape=circle,flag=0,i=99560,u=0.9990202831729463,v=1.0660108878409864,w=0.48700006218753306,x=5.990375609679333 -color=red,shape=triangle,flag=1,i=99568,u=0.918622141544091,v=0.09170747993234607,w=0.5126931035458203,x=4.093198958956755 -color=red,shape=square,flag=0,i=99569,u=0.8774917490203964,v=0.4741856843373682,w=0.4765875113105786,x=7.15960642862528 -color=red,shape=circle,flag=1,i=99574,u=0.7261362203352475,v=0.6688528726234391,w=0.48463087593733783,x=4.950691779690078 -color=red,shape=circle,flag=0,i=99575,u=0.2862321158163894,v=0.22602228805678667,w=0.4862857875485638,x=4.877584139614217 -color=red,shape=circle,flag=0,i=99583,u=0.20560442475704344,v=0.18707407434171675,w=0.48497548694697634,x=4.2634620543479125 -color=blue,shape=triangle,flag=1,i=99596,u=0.9936929747471016,v=0.5782013223299753,w=0.47733286108085177,x=4.353289748867776 -color=blue,shape=circle,flag=1,i=99597,u=0.6175129674140937,v=0.8783236614148164,w=0.4873937147367046,x=6.918267492102772 -color=yellow,shape=triangle,flag=1,i=99614,u=0.12566638292604648,v=0.5370862994594293,w=0.5122647540391286,x=4.365715410728572 -color=yellow,shape=triangle,flag=1,i=99621,u=0.20627664554814118,v=0.35410036072858564,w=0.5097694279541631,x=3.7798087754661402 -color=yellow,shape=triangle,flag=1,i=99641,u=0.0736393350308906,v=0.49031595380876525,w=0.5104133711102727,x=4.950276263785367 -color=green,shape=circle,flag=1,i=99648,u=0.9641579443310726,v=0.3242629907787482,w=0.48240604262015435,x=6.919585546894953 -color=red,shape=square,flag=0,i=99649,u=0.934800701949643,v=0.48441573208482147,w=0.4960238751196558,x=5.184238195675467 -color=orange,shape=square,flag=0,i=99653,u=0.789722064722879,v=0.1772884294744761,w=0.473493062083468,x=5.824390067813731 -color=green,shape=square,flag=0,i=99661,u=0.9334760677782648,v=0.6636912260358271,w=0.5189444654944722,x=4.339282513908433 -color=blue,shape=triangle,flag=0,i=99667,u=0.6647853588616123,v=0.12951977333017117,w=0.4823202919144525,x=5.503462561380917 -color=yellow,shape=triangle,flag=1,i=99669,u=0.2950046077841554,v=0.5169302532253321,w=0.5099820713902785,x=5.008819660736467 -color=purple,shape=square,flag=0,i=99670,u=0.13481616615250724,v=0.3696670704944679,w=0.5233050032196054,x=2.0019206676443346 -color=yellow,shape=triangle,flag=1,i=99676,u=0.0544866311571256,v=0.5050551065757343,w=0.507418730447903,x=3.985785711266788 -color=blue,shape=circle,flag=0,i=99697,u=0.630939787187507,v=0.4422449497231823,w=0.4854213185772358,x=5.388775571792507 -color=red,shape=triangle,flag=1,i=99699,u=0.44046451701881817,v=0.6693620880735209,w=0.4939501843398234,x=3.4298583527006112 -color=green,shape=circle,flag=0,i=99707,u=0.7262197524235358,v=0.003176104402091151,w=0.48663192680473805,x=3.7299165991633174 -color=yellow,shape=triangle,flag=1,i=99716,u=0.5327221391974075,v=0.6129975879822656,w=0.49795086174788955,x=5.491213639071156 -color=purple,shape=circle,flag=0,i=99722,u=0.7486045159615866,v=0.02653501689939608,w=0.4572205993722214,x=6.223327501534848 -color=yellow,shape=square,flag=1,i=99737,u=0.7817216417913274,v=0.5151975809561844,w=0.5120362880736075,x=5.094375748508235 -color=purple,shape=square,flag=0,i=99752,u=0.2933784074149981,v=0.28316289440376663,w=0.5195849897897076,x=4.466194613824574 -color=red,shape=triangle,flag=0,i=99771,u=0.7499528240734045,v=0.510649322249461,w=0.48848536220862615,x=5.379912183986147 -color=blue,shape=circle,flag=1,i=99792,u=0.3076962240598582,v=0.8882325633423691,w=0.4920877813292329,x=4.835327839887664 -color=green,shape=circle,flag=0,i=99794,u=0.8350677370237658,v=0.18712252292764242,w=0.4857238383933379,x=3.9041984421067504 -color=red,shape=square,flag=0,i=99820,u=0.4110846740079569,v=0.1409845690629965,w=0.5148459393384885,x=5.755754455114368 -color=red,shape=triangle,flag=0,i=99854,u=0.0580164801671621,v=0.10149907122466983,w=0.48474226744746424,x=4.175624509332196 -color=yellow,shape=square,flag=1,i=99855,u=0.654308310890614,v=0.04227513301555064,w=0.5186850271601244,x=3.129028558096429 -color=red,shape=square,flag=0,i=99856,u=0.38201892995720876,v=0.049740344297180106,w=0.5230065047547933,x=4.7461113502869905 -color=green,shape=triangle,flag=0,i=99873,u=0.07195979341157455,v=0.44813762004548474,w=0.5447437466480782,x=3.403048855248761 -color=yellow,shape=square,flag=1,i=99879,u=0.6617832193311329,v=0.01108165945780859,w=0.517245611263905,x=2.819903015712994 -color=yellow,shape=circle,flag=1,i=99882,u=0.5635339096217307,v=0.5750498291651793,w=0.5061095841354115,x=1.741510100620954 -color=red,shape=circle,flag=0,i=99896,u=0.3229231533121689,v=0.33710663161056176,w=0.4781650530426834,x=5.350071553734736 -color=red,shape=square,flag=0,i=99907,u=0.6389417074123076,v=0.16310270270306293,w=0.5267980152655629,x=3.7422859875313157 -color=yellow,shape=circle,flag=1,i=99922,u=0.5177420062217538,v=0.5626371673235627,w=0.5068390067489178,x=3.9636645948617457 -color=purple,shape=square,flag=0,i=99923,u=0.22587344110808483,v=0.3529160737725947,w=0.519883718053089,x=3.421331967577624 -color=blue,shape=circle,flag=1,i=99925,u=0.41222408674206745,v=0.4302961063823483,w=0.5006899693333398,x=3.2881616182365114 -color=green,shape=circle,flag=0,i=99938,u=0.31517128587360044,v=0.9370877470212836,w=0.4970914108233537,x=5.006451117858268 -color=red,shape=triangle,flag=0,i=99948,u=0.9107115544023052,v=0.32519669604939616,w=0.49373516335938644,x=2.931371497952684 -color=purple,shape=triangle,flag=0,i=99955,u=0.516433078636893,v=0.10057092319662564,w=0.5052269474197051,x=4.048839550090146 -color=blue,shape=circle,flag=1,i=99969,u=0.4845171309004245,v=0.8572710188113218,w=0.49452921927634125,x=4.034770268996462 -color=blue,shape=square,flag=1,i=99974,u=0.6189062525431605,v=0.2637962404841453,w=0.5311465405784674,x=6.210738209085753 -color=blue,shape=triangle,flag=0,i=99976,u=0.008110504040268474,v=0.8267274952432482,w=0.4732962944898885,x=6.146956761817328 -color=yellow,shape=triangle,flag=0,i=99990,u=0.3839424618160777,v=0.55952913620132,w=0.5113763011485609,x=4.307973891915119 -color=yellow,shape=circle,flag=1,i=99994,u=0.764950884927175,v=0.25284227383991364,w=0.49969878539567425,x=5.013809741826425 diff --git a/docs/data/delimiter-examples.txt b/docs/data/delimiter-examples.txt deleted file mode 100644 index 27d7c7233..000000000 --- a/docs/data/delimiter-examples.txt +++ /dev/null @@ -1,57 +0,0 @@ -# Use the `file` command to see if there are CR/LF terminators (in this case, -# there are not): -$ file data/colours.csv -data/colours.csv: UTF-8 Unicode text - -# Look at the file to find names of fields -$ cat data/colours.csv -KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR -masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz -masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - -# Extract a few fields: -$ mlr --csv cut -f KEY,PL,RO data/colours.csv -(only blank lines appear) - -# Use XTAB output format to get a sharper picture of where records/fields -# are being split: -$ mlr --icsv --oxtab cat data/colours.csv -KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz - -KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - -# Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being -# treated as a single field name in the CSV header, and likewise each -# subsequent line is being treated as a single field value. This is because -# the default field separator is a comma but we have semicolons here. -# Use XTAB again with different field separator (--fs semicolon): - mlr --icsv --ifs semicolon --oxtab cat data/colours.csv -KEY masterdata_colourcode_1 -DE Weiß -EN White -ES Blanco -FI Valkoinen -FR Blanc -IT Bianco -NL Wit -PL Biały -RO Alb -TR Beyaz - -KEY masterdata_colourcode_2 -DE Schwarz -EN Black -ES Negro -FI Musta -FR Noir -IT Nero -NL Zwart -PL Czarny -RO Negru -TR Siyah - -# Using the new field-separator, retry the cut: - mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv -KEY;PL;RO -masterdata_colourcode_1;Biały;Alb -masterdata_colourcode_2;Czarny;Negru diff --git a/docs/data/dynamic-nr.sh b/docs/data/dynamic-nr.sh deleted file mode 100644 index b9bfb73e9..000000000 --- a/docs/data/dynamic-nr.sh +++ /dev/null @@ -1,11 +0,0 @@ -mlr --opprint --from data/small put ' - begin{ @nr1 = 0 } - @nr1 += 1; - $nr1 = @nr1 -' \ -then filter '$x>0.5' \ -then put ' - begin{ @nr2 = 0 } - @nr2 += 1; - $nr2 = @nr2 -' diff --git a/docs/data/emit-lashed.sh b/docs/data/emit-lashed.sh deleted file mode 100644 index 29dd4787c..000000000 --- a/docs/data/emit-lashed.sh +++ /dev/null @@ -1,10 +0,0 @@ -mlr --from data/medium --opprint put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - for ((a, b), _ in @x_count) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b] - } - emit (@x_sum, @x_count, @x_mean), "a", "b" - } -' diff --git a/docs/data/factorial-example.sh b/docs/data/factorial-example.sh deleted file mode 100644 index c3984d568..000000000 --- a/docs/data/factorial-example.sh +++ /dev/null @@ -1,14 +0,0 @@ -mlr --opprint --from data/small put ' - func f(n) { - if (is_numeric(n)) { - if (n > 0) { - return n * f(n-1); - } else { - return 1; - } - } - # implicitly return absent-null if non-numeric - } - $ox = f($x + NR); - $oi = f($i); -' diff --git a/docs/data/fe-example-1.sh b/docs/data/fe-example-1.sh deleted file mode 100644 index 9575e4cf9..000000000 --- a/docs/data/fe-example-1.sh +++ /dev/null @@ -1 +0,0 @@ -mlr --from data/small put '$xy = sqrt($x**2 + $y**2)' diff --git a/docs/data/fe-example-2.sh b/docs/data/fe-example-2.sh deleted file mode 100644 index 048c3672e..000000000 --- a/docs/data/fe-example-2.sh +++ /dev/null @@ -1 +0,0 @@ -mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)' diff --git a/docs/data/fibo-uncached.sh b/docs/data/fibo-uncached.sh deleted file mode 100644 index 1c6d85c9b..000000000 --- a/docs/data/fibo-uncached.sh +++ /dev/null @@ -1,16 +0,0 @@ -mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (n < 2) { - return 1 - } else { - return f(n-1) + f(n-2) # recurse - } - } - - @fcount = 0; - $o = f($i); - $fcount = @fcount; - -' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds - diff --git a/docs/data/fill-down.csv b/docs/data/fill-down.csv deleted file mode 100644 index 88477a59d..000000000 --- a/docs/data/fill-down.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,,3 -4,5,6 -7,,9 diff --git a/docs/data/flins.csv b/docs/data/flins.csv deleted file mode 100644 index ce48ea897..000000000 --- a/docs/data/flins.csv +++ /dev/null @@ -1,9 +0,0 @@ -county,tiv_2011,tiv_2012,line -Seminole,22890.55,20848.71,Residential -Miami Dade,1158674.85,1076001.08,Residential -Palm Beach,1174081.5,1856589.17,Residential -Miami Dade,2850980.31,2650932.72,Commercial -Highlands,23006.41,19757.91,Residential -Highlands,49155.16,47362.96,Residential -Duval,1731888.18,2785551.63,Residential -St. Johns,29589.12,35207.53,Residential diff --git a/docs/data/for-oosvar-example-0b.sh b/docs/data/for-oosvar-example-0b.sh deleted file mode 100644 index 538a8f58d..000000000 --- a/docs/data/for-oosvar-example-0b.sh +++ /dev/null @@ -1,10 +0,0 @@ -mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { dump } -' diff --git a/docs/data/for-oosvar-example-0c.sh b/docs/data/for-oosvar-example-0c.sh deleted file mode 100644 index d70455ccc..000000000 --- a/docs/data/for-oosvar-example-0c.sh +++ /dev/null @@ -1,16 +0,0 @@ -mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for (k, v in @myvar) { - print - "key=" . k . - ",valuetype=" . typeof(v); - } - } -' diff --git a/docs/data/for-oosvar-example-0d.sh b/docs/data/for-oosvar-example-0d.sh deleted file mode 100644 index b03441e75..000000000 --- a/docs/data/for-oosvar-example-0d.sh +++ /dev/null @@ -1,17 +0,0 @@ -mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } -' diff --git a/docs/data/for-oosvar-example-0e.sh b/docs/data/for-oosvar-example-0e.sh deleted file mode 100644 index 1c0ae6238..000000000 --- a/docs/data/for-oosvar-example-0e.sh +++ /dev/null @@ -1,17 +0,0 @@ -mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar[6]) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } -' diff --git a/docs/data/for-srec-example-1.sh b/docs/data/for-srec-example-1.sh deleted file mode 100644 index 960ea65c9..000000000 --- a/docs/data/for-srec-example-1.sh +++ /dev/null @@ -1,11 +0,0 @@ -mlr --pprint --from data/for-srec-example.tbl put ' - $sum1 = $f1 + $f2 + $f3; - $sum2 = 0; - $sum3 = 0; - for (key, value in $*) { - if (key =~ "^f[0-9]+") { - $sum2 += value; - $sum3 += $[key]; - } - } -' diff --git a/docs/data/for-srec-example-2.sh b/docs/data/for-srec-example-2.sh deleted file mode 100644 index ffefb4ad7..000000000 --- a/docs/data/for-srec-example-2.sh +++ /dev/null @@ -1,10 +0,0 @@ -mlr --from data/small --opprint put ' - $sum1 = 0; - $sum2 = 0; - for (k,v in $*) { - if (is_numeric(v)) { - $sum1 +=v; - $sum2 += $[k]; - } - } -' diff --git a/docs/data/for-srec-example-3.sh b/docs/data/for-srec-example-3.sh deleted file mode 100644 index a6cc45ccb..000000000 --- a/docs/data/for-srec-example-3.sh +++ /dev/null @@ -1,9 +0,0 @@ -mlr --from data/small --opprint put ' - sum = 0; - for (k,v in $*) { - if (is_numeric(v)) { - sum += $[k]; - } - } - $sum = sum -' diff --git a/docs/data/full-reorg.sh b/docs/data/full-reorg.sh deleted file mode 100644 index fa56418a5..000000000 --- a/docs/data/full-reorg.sh +++ /dev/null @@ -1,15 +0,0 @@ -mlr put ' - begin { - @i_cumu = 0; - } - - @i_cumu += $i; - $* = { - "z": $x + y, - "KEYFIELD": $a, - "i": @i_cumu, - "b": $b, - "y": $x, - "x": $y, - }; -' data/small diff --git a/docs/data/het.csv b/docs/data/het.csv deleted file mode 100644 index f48f8f295..000000000 --- a/docs/data/het.csv +++ /dev/null @@ -1,14 +0,0 @@ -resource,loadsec,ok -/path/to/file,0.45,true - -record_count,resource -100,/path/to/file - -resource,loadsec,ok -/path/to/second/file,0.32,true - -record_count,resource -150,/path/to/second/file - -resource,loadsec,ok -/some/other/path,0.97,false diff --git a/docs/data/if-chain.sh b/docs/data/if-chain.sh deleted file mode 100644 index ebe2de795..000000000 --- a/docs/data/if-chain.sh +++ /dev/null @@ -1,11 +0,0 @@ -mlr put ' - if (NR == 2) { - ... - } elif (NR ==4) { - ... - } elif (NR ==6) { - ... - } else { - ... - } -' diff --git a/docs/data/iqr1.sh b/docs/data/iqr1.sh deleted file mode 100644 index d462c2ab3..000000000 --- a/docs/data/iqr1.sh +++ /dev/null @@ -1,3 +0,0 @@ -mlr --oxtab stats1 -f x -a p25,p75 \ - then put '$x_iqr = $x_p75 - $x_p25' \ - data/medium diff --git a/docs/data/iqrn.sh b/docs/data/iqrn.sh deleted file mode 100644 index c3f2ce503..000000000 --- a/docs/data/iqrn.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --oxtab stats1 --fr '[i-z]' -a p25,p75 \ - then put 'for (k,v in $*) { - if (k =~ "(.*)_p25") { - $["\1_iqr"] = $["\1_p75"] - $["\1_p25"] - } - }' \ - data/medium diff --git a/docs/data/json-example-1.json b/docs/data/json-example-1.json deleted file mode 100644 index f667efb22..000000000 --- a/docs/data/json-example-1.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "color": "yellow", - "shape": "triangle", - "flag": 1, - "i": 11, - "u": 0.6321695890307647, - "v": 0.9887207810889004, - "w": 0.4364983936735774, - "x": 5.7981881667050565 -} -{ - "color": "red", - "shape": "square", - "flag": 1, - "i": 15, - "u": 0.21966833570651523, - "v": 0.001257332190235938, - "w": 0.7927778364718627, - "x": 2.944117399716207 -} -{ - "color": "red", - "shape": "circle", - "flag": 1, - "i": 16, - "u": 0.20901671281497636, - "v": 0.29005231936593445, - "w": 0.13810280912907674, - "x": 5.065034003400998 -} -{ - "color": "red", - "shape": "square", - "flag": 0, - "i": 48, - "u": 0.9562743938458542, - "v": 0.7467203085342884, - "w": 0.7755423050923582, - "x": 7.117831369597269 -} -{ - "color": "purple", - "shape": "triangle", - "flag": 0, - "i": 51, - "u": 0.4355354501763202, - "v": 0.8591292672156728, - "w": 0.8122903963006748, - "x": 5.753094629505863 -} -{ - "color": "red", - "shape": "square", - "flag": 0, - "i": 64, - "u": 0.2015510269821953, - "v": 0.9531098083420033, - "w": 0.7719912015786777, - "x": 5.612050466474166 -} -{ - "color": "purple", - "shape": "triangle", - "flag": 0, - "i": 65, - "u": 0.6842806710360729, - "v": 0.5823723856331258, - "w": 0.8014053396013747, - "x": 5.805148213865135 -} -{ - "color": "yellow", - "shape": "circle", - "flag": 1, - "i": 73, - "u": 0.6033649768090676, - "v": 0.42370791211283076, - "w": 0.639785141788745, - "x": 7.006414410739997 -} -{ - "color": "yellow", - "shape": "circle", - "flag": 1, - "i": 87, - "u": 0.2856563669907619, - "v": 0.8335161523929382, - "w": 0.6350579406858395, - "x": 6.350035616385983 -} -{ - "color": "purple", - "shape": "square", - "flag": 0, - "i": 91, - "u": 0.25992639068499135, - "v": 0.824321938346312, - "w": 0.7237347131411271, - "x": 6.854221024776646 -} diff --git a/docs/data/keyed-mean-with-oosvars.sh b/docs/data/keyed-mean-with-oosvars.sh deleted file mode 100644 index 60675dff9..000000000 --- a/docs/data/keyed-mean-with-oosvars.sh +++ /dev/null @@ -1,11 +0,0 @@ -mlr --opprint put -q ' - @x_sum[$a][$b] += $x; - @x_count[$a][$b] += 1; - end{ - for ((a, b), v in @x_sum) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b]; - } - emit @x_mean, "a", "b" - } -' data/medium - diff --git a/docs/data/keyed-min-max-with-oosvars.sh b/docs/data/keyed-min-max-with-oosvars.sh deleted file mode 100644 index 48e9e6d5c..000000000 --- a/docs/data/keyed-min-max-with-oosvars.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --opprint --from data/medium put -q ' - @min[$a] = min(@min[$a], $x); - @max[$a] = max(@max[$a], $x); - end{ - emit (@min, @max), "a"; - } -' diff --git a/docs/data/local-example-1.sh b/docs/data/local-example-1.sh deleted file mode 100755 index cc4d7bb82..000000000 --- a/docs/data/local-example-1.sh +++ /dev/null @@ -1,16 +0,0 @@ -# Here I'm using a specified random-number seed so this example always -# produces the same output for this web document: in everyday practice we -# would leave off the --seed 12345 part. -mlr --seed 12345 seqgen --start 1 --stop 10 then put ' - func f(a, b) { # function arguments a and b - r = 0.0; # local r scoped to the function - for (int i = 0; i < 6; i += 1) { # local i scoped to the for-loop - num u = urand(); # local u scoped to the for-loop - r += u; # updates r from the enclosing scope - } - r /= 6; - return a + (b - a) * r; - } - num o = f(10, 20); # local to the top-level scope - $o = o; -' diff --git a/docs/data/map-literal-example-1.sh b/docs/data/map-literal-example-1.sh deleted file mode 100755 index 90d04a9be..000000000 --- a/docs/data/map-literal-example-1.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --opprint put ' - $* = { - "a": $i, - "i": $a, - "y": $y * 10, - } -' data/small diff --git a/docs/data/map-literal-example-2.sh b/docs/data/map-literal-example-2.sh deleted file mode 100755 index 41f17c7b8..000000000 --- a/docs/data/map-literal-example-2.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --from data/small put ' - func f(map m): map { - m["x"] *= 200; - return m; - } - $* = f({"a": $a, "x": $x}); -' diff --git a/docs/data/map-literal-example-3.sh b/docs/data/map-literal-example-3.sh deleted file mode 100755 index 2561ce741..000000000 --- a/docs/data/map-literal-example-3.sh +++ /dev/null @@ -1,19 +0,0 @@ -mlr --from data/small put -q ' - begin { - @o = { - "nrec": 0, - "nkey": {"numeric":0, "non-numeric":0}, - }; - } - @o["nrec"] += 1; - for (k, v in $*) { - if (is_numeric(v)) { - @o["nkey"]["numeric"] += 1; - } else { - @o["nkey"]["non-numeric"] += 1; - } - } - end { - dump @o; - } -' diff --git a/docs/data/maxrows.mlr b/docs/data/maxrows.mlr deleted file mode 100644 index f9578b6be..000000000 --- a/docs/data/maxrows.mlr +++ /dev/null @@ -1,15 +0,0 @@ -# Retain all records -@records[NR] = $*; -# Track max value of n -@maxn = max(@maxn, $n); - -# After all records have been read, loop through retained records -# and print those with the max n value. -end { - for (int nr in @records) { - map record = @records[nr]; - if (record["n"] == @maxn) { - emit record; - } - } -} diff --git a/docs/data/mean-with-oosvars.sh b/docs/data/mean-with-oosvars.sh deleted file mode 100644 index 672072b99..000000000 --- a/docs/data/mean-with-oosvars.sh +++ /dev/null @@ -1,9 +0,0 @@ -mlr --opprint put -q ' - @x_sum += $x; - @x_count += 1; - end { - @x_mean = @x_sum / @x_count; - emit @x_mean - } -' data/medium - diff --git a/docs/data/miss-date-1.sh b/docs/data/miss-date-1.sh deleted file mode 100644 index 1701f7280..000000000 --- a/docs/data/miss-date-1.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ -| head diff --git a/docs/data/miss-date-2.sh b/docs/data/miss-date-2.sh deleted file mode 100644 index 7430b40cf..000000000 --- a/docs/data/miss-date-2.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr --from data/miss-date.csv --icsv \ - cat -n \ - then put '$datestamp = strptime($date, "%Y-%m-%d")' \ - then step -a delta -f datestamp \ - then filter '$datestamp_delta != 86400 && $n != 1' diff --git a/docs/data/mkdat2 b/docs/data/mkdat2 deleted file mode 100755 index 7bc27f589..000000000 --- a/docs/data/mkdat2 +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/ruby - -# ================================================================ -# Produces a variety of categorized pseudo-random data in support -# of Miller documentation at http://johnkerl.org/miller/doc/index.html -# -# John Kerl May 2015 -# ================================================================ -# -# Sample output: -# -# ./datagen/mkdat2 6 | mlr --opprint cat -# color shape flag i u v w x -# purple circle 0 1 0.5637512757306459 0.4981743566291943 0.36884254478967105 4.480962906000271 -# orange square 1 2 0.5232158098904274 0.33717333156510765 0.44646982455699713 5.807558719657881 -# red circle 1 3 0.5084894411433544 0.7025118761232125 0.672558508897624 5.094127602621387 -# blue square 0 4 0.3145642940519666 0.3040179460903778 0.6388947856924174 7.517194060345607 -# yellow triangle 1 5 0.06776212921515201 0.8517576443958519 0.4319941923080997 4.955913436917771 -# red square 0 6 0.24407904404655156 0.4297654986740608 0.6681496181121647 4.702469482713694 -# ================================================================ - -# Vary repeat counts to obtain non-uniform distribution on colors -$colors=%w( - red red red red red red red red red red red red red red red red - green green green green - blue blue blue blue blue - orange - yellow yellow yellow yellow yellow - purple purple purple purple -) -# Vary repeat counts to obtain non-uniform distribution on shapes -$shapes = %w( - circle circle circle - square square square square square - triangle triangle triangle triangle -) -# Vary per-color probabilities of flag==1 -$color_flag_ps = { - 'blue' => 0.6, - 'green' => 0.2, - 'orange' => 0.5, - 'purple' => 0.1, - 'red' => 0.3, - 'yellow' => 0.9, -} -# For autocorrelation of time series by color -$eta = 0.99 - -# ================================================================ -def main() - n = 100000 - n = Integer ARGV[0] if ARGV.length == 1 - - history_keys = [] - $colors.uniq.each do |color| - $shapes.uniq.each do |shape| - history_keys << color + '-' + shape - end - end - - ht = HistoryTracker.new(history_keys, $eta) - - n.times do |i| - color = $colors[rand $colors.length] - shape = $shapes[rand $shapes.length] - flag = bernoulli($color_flag_ps[color]) - - # u: plain unit-interval uniform - # v: similar, except for circles, pairwise-correlate u and v - u = rand - v = rand - if color == 'red' && shape == 'circle' - v = u + 0.2*(rand-0.5) - end - - # w: autocorrelated time series by color. If you look at stats of w you'll - # see roughly uniform distribution. But if you follow each color/shape - # combination then you'll see small deltas from one to the next. - w = ht.emit(color + '-' + shape) - - # x: gaussian (boring) - x = gaussian - - puts "color=#{color},shape=#{shape},flag=#{flag},i=#{i+1},u=#{u},v=#{v},w=#{w},x=#{x}" - end - end - -# ================================================================ -# Roughly normal between 0 and 10, mean 5, stddev about 1.2 -def gaussian() - 10*(rand+rand+rand+rand+rand+rand)/6 -end - -def bernoulli(p) - if rand < p - 1 - else - 0 - end -end - -# Autocorrelated time series per color. -# For reference please see http://johnkerl.org/rcm/eta.pdf. -class HistoryTracker - def initialize(keys, eta) - @keys = keys - @prevs = {} - @keys.each do |key| - @prevs[key] = rand - end - @eta = eta - @etac = 1.0 - eta - @s = Math.sqrt((1+eta)/(1-eta)) - @a = 0.5 * (1 - @s) - @b = 0.5 * (1 + @s) - end - def emit(key) - @prevs[key] = @eta * @prevs[key] + @etac * rand - end -end - -# ================================================================ -begin - main() -rescue Errno::EPIPE # E.g. we're piped to head - exit 0 -end diff --git a/docs/data/previous-to-current.sh b/docs/data/previous-to-current.sh deleted file mode 100644 index d7480d26c..000000000 --- a/docs/data/previous-to-current.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr --icsv --opprint \ - join -j color --ul --ur -f data/prevtemp.csv \ - then unsparsify --fill-with 0 \ - then put '$count_delta = $current_count - $previous_count' \ - data/currtemp.csv diff --git a/docs/data/put-multiline-example.txt b/docs/data/put-multiline-example.txt deleted file mode 100644 index 7e1f9e213..000000000 --- a/docs/data/put-multiline-example.txt +++ /dev/null @@ -1,7 +0,0 @@ -mlr --opprint put ' - $nf = NF; - $nr = NR; - $fnr = FNR; - $filenum = FILENUM; - $filename = FILENAME -' data/small data/small2 diff --git a/docs/data/ragged-csv-2.sh b/docs/data/ragged-csv-2.sh deleted file mode 100644 index a2664d8d7..000000000 --- a/docs/data/ragged-csv-2.sh +++ /dev/null @@ -1,6 +0,0 @@ -mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - while(NF < @maxnf) { - $[NF+1] = ""; - } -' diff --git a/docs/data/ragged-csv.sh b/docs/data/ragged-csv.sh deleted file mode 100755 index b53812050..000000000 --- a/docs/data/ragged-csv.sh +++ /dev/null @@ -1,8 +0,0 @@ -mlr --from data/ragged.csv --fs comma --nidx put ' - @maxnf = max(@maxnf, NF); - @nf = NF; - while(@nf < @maxnf) { - @nf += 1; - $[@nf] = "" - } -' diff --git a/docs/data/ragged.csv b/docs/data/ragged.csv deleted file mode 100644 index ae7f0ec57..000000000 --- a/docs/data/ragged.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,2,3 -4,5 -6,7,8,9 diff --git a/docs/data/rect.sh b/docs/data/rect.sh deleted file mode 100644 index aa36b2861..000000000 --- a/docs/data/rect.sh +++ /dev/null @@ -1,10 +0,0 @@ -mlr --from data/rect.txt put -q ' - is_present($outer) { - unset @r - } - for (k, v in $*) { - @r[k] = v - } - is_present($inner1) { - emit @r - }' diff --git a/docs/data/remove-empty-columns.csv b/docs/data/remove-empty-columns.csv deleted file mode 100644 index 9c485d345..000000000 --- a/docs/data/remove-empty-columns.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c,d,e -1,,3,,5 -2,,4,,5 -3,,5,,7 diff --git a/docs/data/repeats.dkvp b/docs/data/repeats.dkvp deleted file mode 100644 index c19438e51..000000000 --- a/docs/data/repeats.dkvp +++ /dev/null @@ -1,57 +0,0 @@ -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=1 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=triangle,flag=1 -color=purple,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=red,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=1 -color=red,shape=square,flag=0 -color=red,shape=circle,flag=1 -color=purple,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=1 -color=purple,shape=triangle,flag=0 -color=purple,shape=triangle,flag=0 -color=purple,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=yellow,shape=triangle,flag=1 -color=yellow,shape=circle,flag=1 -color=purple,shape=square,flag=0 diff --git a/docs/data/sar.mlr b/docs/data/sar.mlr deleted file mode 100644 index 4b5d8ead3..000000000 --- a/docs/data/sar.mlr +++ /dev/null @@ -1,3 +0,0 @@ - for (k in $*) { - $[k] = gsub($[k], "e", "X"); - } diff --git a/docs/data/single-for-example-1.sh b/docs/data/single-for-example-1.sh deleted file mode 100755 index b0b0735aa..000000000 --- a/docs/data/single-for-example-1.sh +++ /dev/null @@ -1,8 +0,0 @@ -mlr --from data/small put ' - print "NR = ".NR; - for (key in $*) { - value = $[key]; - print " key:" . key . " value:".value; - } - -' diff --git a/docs/data/single-for-example-2.sh b/docs/data/single-for-example-2.sh deleted file mode 100755 index 1fa863209..000000000 --- a/docs/data/single-for-example-2.sh +++ /dev/null @@ -1,8 +0,0 @@ -mlr -n put ' - end { - o = {1:2, 3:{4:5}}; - for (key in o) { - print " key:" . key . " valuetype:" . typeof(o[key]); - } - } -' diff --git a/docs/data/small b/docs/data/small deleted file mode 100644 index 875611d8a..000000000 --- a/docs/data/small +++ /dev/null @@ -1,5 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 diff --git a/docs/data/subr-example.sh b/docs/data/subr-example.sh deleted file mode 100644 index 07141a065..000000000 --- a/docs/data/subr-example.sh +++ /dev/null @@ -1,17 +0,0 @@ -mlr --opprint --from data/small put -q ' - begin { - @call_count = 0; - } - subr s(n) { - @call_count += 1; - if (is_numeric(n)) { - if (n > 1) { - call s(n-1); - } else { - print "numcalls=" . @call_count; - } - } - } - print "NR=" . NR; - call s(NR); -' diff --git a/docs/data/system-file-ojson-example.txt b/docs/data/system-file-ojson-example.txt deleted file mode 100644 index 029450caf..000000000 --- a/docs/data/system-file-ojson-example.txt +++ /dev/null @@ -1,22 +0,0 @@ -$ grep -v '^#' /etc/passwd | head -n 2 | \ - mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell -[ -{ - "name": "nobody", - "password": "*", - "uid": -2, - "gid": -2, - "gecos": "Unprivileged User", - "home_dir": "/var/empty", - "shell": "/usr/bin/false" -} -,{ - "name": "root", - "password": "*", - "uid": 0, - "gid": 0, - "gecos": "System Administrator", - "home_dir": "/var/root", - "shell": "/bin/sh" -} -] diff --git a/docs/data/system-file-opprint-example.txt b/docs/data/system-file-opprint-example.txt deleted file mode 100644 index 0e1487221..000000000 --- a/docs/data/system-file-opprint-example.txt +++ /dev/null @@ -1,8 +0,0 @@ -$ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat -1 2 3 4 5 6 7 -nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false -root * 0 0 System Administrator /var/root /bin/sh -daemon * 1 1 System Services /var/root /usr/bin/false -_uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico -_taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false -_networkd * 24 24 Network Services /var/networkd /usr/bin/false diff --git a/docs/data/system-file-oxtab-example.txt b/docs/data/system-file-oxtab-example.txt deleted file mode 100644 index 0ee71109c..000000000 --- a/docs/data/system-file-oxtab-example.txt +++ /dev/null @@ -1,16 +0,0 @@ -$ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat -1 nobody -2 * -3 -2 -4 -2 -5 Unprivileged User -6 /var/empty -7 /usr/bin/false - -1 root -2 * -3 0 -4 0 -5 System Administrator -6 /var/root -7 /bin/sh diff --git a/docs/data/then-chaining-performance.txt b/docs/data/then-chaining-performance.txt deleted file mode 100644 index 4dd2ea5b2..000000000 --- a/docs/data/then-chaining-performance.txt +++ /dev/null @@ -1,16 +0,0 @@ -% cat piped.sh -mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null - -% time sh piped.sh -real 0m2.828s -user 0m3.183s -sys 0m0.137s - - -% cat chained.sh -mlr cut -x -f i,y then sort -n y data/big > /dev/null - -% time sh chained.sh -real 0m2.082s -user 0m1.933s -sys 0m0.137s diff --git a/docs/data/trailing-commas.sh b/docs/data/trailing-commas.sh deleted file mode 100755 index 0f655cd89..000000000 --- a/docs/data/trailing-commas.sh +++ /dev/null @@ -1,17 +0,0 @@ -mlr --csvlite --from data/a.csv put ' - func f( - num a, - num b, - ): num { - return a**2 + b**2; - } - $* = { - "s": $a + $b, - "t": $a - $b, - "u": f( - $a, - $b, - ), - "v": NR, - } -' diff --git a/docs/data/triple-for-example-1.sh b/docs/data/triple-for-example-1.sh deleted file mode 100644 index d92979fc3..000000000 --- a/docs/data/triple-for-example-1.sh +++ /dev/null @@ -1,7 +0,0 @@ -mlr --from data/small --opprint put ' - num suma = 0; - for (a = 1; a <= NR; a += 1) { - suma += a; - } - $suma = suma; -' diff --git a/docs/data/triple-for-example-2.sh b/docs/data/triple-for-example-2.sh deleted file mode 100644 index 928dddc59..000000000 --- a/docs/data/triple-for-example-2.sh +++ /dev/null @@ -1,10 +0,0 @@ -mlr --from data/small --opprint put ' - num suma = 0; - num sumb = 0; - for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) { - suma += a; - sumb += b; - } - $suma = suma; - $sumb = sumb; -' diff --git a/docs/data/trivial-records.csv b/docs/data/trivial-records.csv deleted file mode 100644 index 42d5e9304..000000000 --- a/docs/data/trivial-records.csv +++ /dev/null @@ -1,5 +0,0 @@ -a,b,c -1,2,3 -4,,6 -,, -,8,9 diff --git a/docs/data/two-pass-percentage.sh b/docs/data/two-pass-percentage.sh deleted file mode 100644 index b7e1fc066..000000000 --- a/docs/data/two-pass-percentage.sh +++ /dev/null @@ -1,16 +0,0 @@ -mlr --from data/small --opprint put -q ' - # These are executed once per record, which is the first pass. - # The key is to use NR to index an out-of-stream variable to - # retain all the x-field values. - @x_min = min($x, @x_min); - @x_max = max($x, @x_max); - @x[NR] = $x; - - # The second pass is in a for-loop in an end-block. - end { - for (nr, x in @x) { - @x_pct[nr] = 100 * (x - @x_min) / (@x_max - @x_min); - } - emit (@x, @x_pct), "NR" - } -' diff --git a/docs/data/two-pass-record-numbers.sh b/docs/data/two-pass-record-numbers.sh deleted file mode 100644 index 051feb442..000000000 --- a/docs/data/two-pass-record-numbers.sh +++ /dev/null @@ -1,11 +0,0 @@ -mlr --opprint --from data/small put -q ' - @records[NR] = $*; - end { - for((I,k),v in @records) { - @records[I]["I"] = I; - @records[I]["N"] = NR; - @records[I]["PCT"] = 100*I/NR - } - emit @records,"I" - } -' then reorder -f I,N,PCT diff --git a/docs/data/type-decl-example.mlr b/docs/data/type-decl-example.mlr deleted file mode 100644 index 37db0739f..000000000 --- a/docs/data/type-decl-example.mlr +++ /dev/null @@ -1,37 +0,0 @@ -subr s(a, str b, int c) { # a is implicitly var (untyped). - # b is explicitly str. - # c is explicitly int. - # The type-checking is done at the callsite - # when arguments are bound to parameters. - # - var b = 100; # error # Re-declaration in the same scope is disallowed. - int n = 10; # Declaration of variable local to the subroutine. - n = 20; # Assignment is OK. - int n = 30; # error # Re-declaration in the same scope is disallowed. - str n = "abc"; # error # Re-declaration in the same scope is disallowed. - # - float f1 = 1; # error # 1 is an int, not a float. - float f2 = 2.0; # 2.0 is a float. - num f3 = 3; # 3 is a num. - num f4 = 4.0; # 4.0 is a num. -} # - # -call s(1, 2, 3); # Type-assertion '3 is int' is done here at the callsite. - # -k = "def"; # Top-level variable k. - # -for (str k, v in $*) { # k and v are bound here, masking outer k. - print k . ":" . v; # k is explicitly str; v is implicitly var. -} # - # -print "k is".k; # k at this scope level is still "def". -print "v is".v; # v is undefined in this scope. - # -i = -1; # -for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless - # declared local: i is outer, j is local to the loop. - print "inner i =" . i; # - print "inner j =" . j; # -} # -print "outer i =" . i; # i has been modified by the loop. -print "outer j =" . j; # j is undefined in this scope. diff --git a/docs/data/weighted-mean.sh b/docs/data/weighted-mean.sh deleted file mode 100644 index 1b627b782..000000000 --- a/docs/data/weighted-mean.sh +++ /dev/null @@ -1,25 +0,0 @@ -mlr --from data/medium put -q ' - # Using the y field for weighting in this example - weight = $y; - - # Using the a field for weighted aggregation in this example - @sumwx[$a] += weight * $i; - @sumw[$a] += weight; - - @sumx[$a] += $i; - @sumn[$a] += 1; - - end { - map wmean = {}; - map mean = {}; - for (a in @sumwx) { - wmean[a] = @sumwx[a] / @sumw[a] - } - for (a in @sumx) { - mean[a] = @sumx[a] / @sumn[a] - } - #emit wmean, "a"; - #emit mean, "a"; - emit (wmean, mean), "a"; - }' - diff --git a/docs/data/while-example-1.sh b/docs/data/while-example-1.sh deleted file mode 100644 index 16575ef86..000000000 --- a/docs/data/while-example-1.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo x=1,y=2 | mlr put ' - while (NF < 10) { - $[NF+1] = "" - } - $foo = "bar" -' diff --git a/docs/data/while-example-2.sh b/docs/data/while-example-2.sh deleted file mode 100644 index ffbb78d9e..000000000 --- a/docs/data/while-example-2.sh +++ /dev/null @@ -1,9 +0,0 @@ -echo x=1,y=2 | mlr put ' - do { - $[NF+1] = ""; - if (NF == 5) { - break - } - } while (NF < 10); - $foo = "bar" -' diff --git a/docs/etymology.rst b/docs/etymology.rst deleted file mode 100644 index 5fe69f2f5..000000000 --- a/docs/etymology.rst +++ /dev/null @@ -1,9 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Why call it Miller? -================================================================ - -The Unix toolkit was created in the **1970s** and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the `classic toolkit style `_: if this were music, Miller would be a **tribute album**. Likewise, since commands are subcommands of the ``mlr`` executable, the result is a **band**, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the `Steve Miller Band `_. - -(Additionally, and far more prosaically ... just as a miller is someone who grinds and mixes grain into flour to extend its usefulness, Miller grinds and mixes data for you.) diff --git a/docs/etymology.rst.in b/docs/etymology.rst.in deleted file mode 100644 index 9ec6bc32a..000000000 --- a/docs/etymology.rst.in +++ /dev/null @@ -1,6 +0,0 @@ -Why call it Miller? -================================================================ - -The Unix toolkit was created in the **1970s** and is a mainstay to this day. Miller is written in plain C, and its look and feel adheres closely to the `classic toolkit style `_: if this were music, Miller would be a **tribute album**. Likewise, since commands are subcommands of the ``mlr`` executable, the result is a **band**, if you will, of command-line tools. Put these together and the namesake is another classic product of the 1970s: the `Steve Miller Band `_. - -(Additionally, and far more prosaically ... just as a miller is someone who grinds and mixes grain into flour to extend its usefulness, Miller grinds and mixes data for you.) diff --git a/docs/example.csv b/docs/example.csv deleted file mode 100644 index 779283dcb..000000000 --- a/docs/example.csv +++ /dev/null @@ -1,11 +0,0 @@ -color,shape,flag,index,quantity,rate -yellow,triangle,true,11,43.6498,9.8870 -red,square,true,15,79.2778,0.0130 -red,circle,true,16,13.8103,2.9010 -red,square,false,48,77.5542,7.4670 -purple,triangle,false,51,81.2290,8.5910 -red,square,false,64,77.1991,9.5310 -purple,triangle,false,65,80.1405,5.8240 -yellow,circle,true,73,63.9785,4.2370 -yellow,circle,true,87,63.5058,8.3350 -purple,square,false,91,72.3735,8.2430 diff --git a/docs/expo-sample.sh b/docs/expo-sample.sh deleted file mode 100755 index 5ac5fc254..000000000 --- a/docs/expo-sample.sh +++ /dev/null @@ -1,27 +0,0 @@ -# Generate 100,000 pairs of independent and identically distributed -# exponentially distributed random variables with the same rate parameter -# (namely, 2.5). Then compute histograms of one of them, along with -# histograms for their sum and their product. -# -# See also https://en.wikipedia.org/wiki/Exponential_distribution -# -# Here I'm using a specified random-number seed so this example always -# produces the same output for this web document: in everyday practice we -# wouldn't do that. - -mlr -n \ - --seed 0.25 \ - --opprint \ - seqgen --stop 100000 \ - then put ' - # https://en.wikipedia.org/wiki/Inverse_transform_sampling - func expo_sample(lambda) { - return -log(1-urand())/lambda - } - $u = expo_sample(2.5); - $v = expo_sample(2.5); - $s = $u + $v; - $p = $u * $v; - ' \ - then histogram -f u,s,p --lo 0 --hi 2 --nbins 50 \ - then bar -f u_count,s_count,p_count --auto -w 20 diff --git a/docs/faq.rst b/docs/faq.rst deleted file mode 100644 index 8af3d4008..000000000 --- a/docs/faq.rst +++ /dev/null @@ -1,721 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -FAQ -========= - -No output at all ----------------------------------------------------------------- - -Try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -If you're using Miller version less than 5.0.0 (try ``mlr --version`` on your system to find out), when the line-ending-autodetect feature was introduced, please see http://johnkerl.org/miller-releases/miller-4.5.0/doc/index.html. - -Fields not selected ----------------------------------------------------------------- - -Check the field-separators of the data, e.g. with the command-line ``head`` program. Example: for CSV, Miller's default record separator is comma; if your data is tab-delimited, e.g. ``aTABbTABc``, then Miller won't find three fields named ``a``, ``b``, and ``c`` but rather just one named ``aTABbTABc``. Solution in this case: ``mlr --fs tab {remaining arguments ...}``. - -Also try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -Headerless CSV with duplicate field values ------------------------------------------- - -Miller is (by central design) a mapping from name to value, rather than integer position to value as in most tools in the Unix toolkit such as ``sort``, ``cut``, ``awk``, etc. So given input ``Yea=1,Yea=2`` on the same input line, first ``Yea=1`` is stored, then updated with ``Yea=2``. This is in the input-parser and the value ``Yea=1`` is unavailable to any further processing. The following example line comes from a headerless CSV file and includes 5 times the string (value) ``'NA'``: - -``ag '0.9' nas.csv |head -1 -2:-349801.10097848,4537221.43295653,2,1,NA,NA,NA,NA,NA`` - -The repeated ``'NA'`` strings (values) in the same line will be treated as fields (columns) with same name, thus only one is kept in the output. - -This can be worked around by telling ``mlr`` that there is no header row by using ``--implicit-csv-header`` or changing the input format by using ``nidx`` like so:: - - ag '0.9' nas.csv | mlr --n2c --fs "," label xsn,ysn,x,y,t,a,e29,e31,e32 then head - -Diagnosing delimiter specifications ----------------------------------------------------------------- - -.. code-block:: none - - # Use the `file` command to see if there are CR/LF terminators (in this case, - # there are not): - $ file data/colours.csv - data/colours.csv: UTF-8 Unicode text - - # Look at the file to find names of fields - $ cat data/colours.csv - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR - masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz - masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - - # Extract a few fields: - $ mlr --csv cut -f KEY,PL,RO data/colours.csv - (only blank lines appear) - - # Use XTAB output format to get a sharper picture of where records/fields - # are being split: - $ mlr --icsv --oxtab cat data/colours.csv - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz - - KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah - - # Using XTAB output format makes it clearer that KEY;DE;...;RO;TR is being - # treated as a single field name in the CSV header, and likewise each - # subsequent line is being treated as a single field value. This is because - # the default field separator is a comma but we have semicolons here. - # Use XTAB again with different field separator (--fs semicolon): - mlr --icsv --ifs semicolon --oxtab cat data/colours.csv - KEY masterdata_colourcode_1 - DE Weiß - EN White - ES Blanco - FI Valkoinen - FR Blanc - IT Bianco - NL Wit - PL Biały - RO Alb - TR Beyaz - - KEY masterdata_colourcode_2 - DE Schwarz - EN Black - ES Negro - FI Musta - FR Noir - IT Nero - NL Zwart - PL Czarny - RO Negru - TR Siyah - - # Using the new field-separator, retry the cut: - mlr --csv --fs semicolon cut -f KEY,PL,RO data/colours.csv - KEY;PL;RO - masterdata_colourcode_1;Biały;Alb - masterdata_colourcode_2;Czarny;Negru - -How do I suppress numeric conversion? ----------------------------------------------------------------- - -**TL;DR use put -S**. - -Within ``mlr put`` and ``mlr filter``, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/scan-example-1.tbl - value - 1 - 2.0 - 3x - hello - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl - value copy type - 1 1 int - 2.0 2.000000 float - 3x 3x string - hello hello string - -The numeric-conversion rule is simple: - -* Try to scan as integer (``"1"`` should be int); -* If that doesn't succeed, try to scan as float (``"1.0"`` should be float); -* If that doesn't succeed, leave the value as a string (``"1x"`` is string). - -This is a sensible default: you should be able to put ``'$z = $x + $y'`` without having to write ``'$z = int($x) + float($y)'``. Also note that default output format for floating-point numbers created by ``put`` (and other verbs such as ``stats1``) is six decimal places; you can override this using ``mlr --ofmt``. Also note that Miller uses your system's C library functions whenever possible: e.g. ``sscanf`` for converting strings to integer or floating-point. - -But now suppose you have data like these: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/scan-example-2.tbl - value - 0001 - 0002 - 0005 - 0005WA - 0006 - 0007 - 0007WA - 0008 - 0009 - 0010 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl - value copy type - 0001 1 int - 0002 2 int - 0005 5 int - 0005WA 0005WA string - 0006 6 int - 0007 7 int - 0007WA 0007WA string - 0008 8.000000 float - 0009 9.000000 float - 0010 8 int - -The same conversion rules as above are being used. Namely: - -* By default field values are inferred to int, else float, else string; - -* leading zeroes indicate octal for integers (``sscanf`` semantics); - -* since ``0008`` doesn't scan as integer (leading 0 requests octal but 8 isn't a valid octal digit), the float scan is tried next and it succeeds; - -* default floating-point output format is 6 decimal places (override with ``mlr --ofmt``). - -Taken individually the rules make sense; taken collectively they produce a mishmash of types here. - -The solution is to **use the -S flag** for ``mlr put`` and/or ``mlr filter``. Then all field values are left as string. You can type-coerce on demand using syntax like ``'$z = int($x) + float($y)'``. (See also :doc:`reference-dsl`; see also https://github.com/johnkerl/miller/issues/150.) - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl - value copy type - 0001 0001 string - 0002 0002 string - 0005 0005 string - 0005WA 0005WA string - 0006 0006 string - 0007 0007 string - 0007WA 0007WA string - 0008 0008 string - 0009 0009 string - 0010 0010 string - -How do I examine then-chaining? ----------------------------------------------------------------- - -Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step. - -First, look at the input data: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/then-example.csv - Status,Payment_Type,Amount - paid,cash,10.00 - pending,debit,20.00 - paid,cash,50.00 - pending,credit,40.00 - paid,debit,30.00 - -Next, run the first step of your command, omitting anything from the first ``then`` onward: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -After that, run it with the next ``then`` step included: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -Now if you use ``then`` to include another verb after that, the columns ``Status``, ``Payment_Type``, and ``count`` will be the input to that verb. - -Note, by the way, that you'll get the same results using pipes: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count - Status Payment_Type count - paid cash 2 - pending debit 1 - pending credit 1 - paid debit 1 - -I assigned $9 and it's not 9th ----------------------------------------------------------------- - -Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with ``--implicit-csv-header``, Miller will sequentially assign keys of the form ``1``, ``2``, etc. But these are not integer array indices: they're just field names taken from the initial field ordering in the input data. - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --dkvp cat - 1=x,2=y,3=z - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"' - 1=x,2=y,3=z,6=a,4=b,55=cde - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --nidx cat - x,y,z - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --csv --implicit-csv-header cat - 1,2,3 - x,y,z - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --dkvp rename 2,999 - 1=x,999=y,3=z - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --dkvp rename 2,newname - 1=x,newname=y,3=z - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2 - 3,1,2 - z,x,y - -How can I filter by date? ----------------------------------------------------------------- - -Given input like - -.. code-block:: none - :emphasize-lines: 1,1 - - cat dates.csv - date,event - 2018-02-03,initialization - 2018-03-07,discovery - 2018-02-03,allocation - -we can use ``strptime`` to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset's date-formatting to the :ref:`reference-dsl-strptime` format-string. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv - date,event - 2018-03-07,discovery - -Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 -- thanks @aborruso! - -How can I handle commas-as-data in various formats? ----------------------------------------------------------------- - -:doc:`CSV ` handles this well and by design: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat commas.csv - Name,Role - "Xiao, Lin",administrator - "Khavari, Darius",tester - -Likewise :ref:`file-formats-json`: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson cat commas.csv - { "Name": "Xiao, Lin", "Role": "administrator" } - { "Name": "Khavari, Darius", "Role": "tester" } - -For Miller's :ref:`vertical-tabular format ` there is no escaping for carriage returns, but commas work fine: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --oxtab cat commas.csv - Name Xiao, Lin - Role administrator - - Name Khavari, Darius - Role tester - -But for :ref:`Key-value_pairs ` and :ref:`index-numbered `, commas are the default field separator. And -- as of Miller 5.4.0 anyway -- there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --odkvp cat commas.csv - Name=Xiao, Lin,Role=administrator - Name=Khavari, Darius,Role=tester - -One solution is to use a different delimiter, such as a pipe character: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --odkvp --ofs pipe cat commas.csv - Name=Xiao, Lin|Role=administrator - Name=Khavari, Darius|Role=tester - -To be extra-sure to avoid data/delimiter clashes, you can also use control -characters as delimiters -- here, control-A: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --odkvp --ofs '\001' cat commas.csv | cat -v - Name=Xiao, Lin^ARole=administrator - Name=Khavari, Darius^ARole=tester - -How can I handle field names with special symbols in them? ----------------------------------------------------------------- - -Simply surround the field names with curly braces: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}' - x.a=3,y:b=4,z/c=5,product.all=60 - -How to escape '?' in regexes? ----------------------------------------------------------------- - -One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/question.dat - a=is it?,b=it is! -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat - a is it? - b it is! - c is it ... -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat - a is it? - b it is! - c is it ... - -The ``ssub`` function exists precisely for this reason: so you don't have to escape anything. - -How can I put single-quotes into strings? ----------------------------------------------------------------- - -This is a little tricky due to the shell's handling of quotes. For simplicity, let's first put an update script into a file: - -.. code-block:: none - - $a = "It's OK, I said, then 'for now'." - -.. code-block:: none - :emphasize-lines: 1,1 - - echo a=bcd | mlr put -f data/single-quote-example.mlr - a=It's OK, I said, then 'for now'. - -So, it's simple: Miller's DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem. - -Without putting the update expression in a file, it's messier: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."' - a=It's OK, I said, 'for now'. - -The idea is that the outermost single-quotes are to protect the ``put`` expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it *outside* the single-quoting for the shell. The pieces are the following, all concatenated together: - -* ``$a="It`` -* ``\'`` -* ``s OK, I said,`` -* ``\'`` -* ``for now`` -* ``\'`` -* ``.`` - -Why doesn't mlr cut put fields in the order I want? ----------------------------------------------------------------- - -Example: columns ``x,i,a`` were requested but they appear here in the order ``a,i,x``: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cut -f x,i,a data/small - a=pan,i=1,x=0.3467901443380824 - a=eks,i=2,x=0.7586799647899636 - a=wye,i=3,x=0.20460330576630303 - a=eks,i=4,x=0.38139939387114097 - a=wye,i=5,x=0.5732889198020006 - -The issue is that Miller's ``cut``, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the Unix/Linux system ``cut`` command, which has the same semantics. - -The solution is to use the ``-o`` option: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cut -o -f x,i,a data/small - x=0.3467901443380824,i=1,a=pan - x=0.7586799647899636,i=2,a=eks - x=0.20460330576630303,i=3,a=wye - x=0.38139939387114097,i=4,a=eks - x=0.5732889198020006,i=5,a=wye - -NR is not consecutive after then-chaining ----------------------------------------------------------------- - -Given this input data: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -why don't I see ``NR=1`` and ``NR=2`` here?? - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$x > 0.5' then put '$NR = NR' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NR=2 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NR=5 - -The reason is that ``NR`` is computed for the original input records and isn't dynamically updated. By contrast, ``NF`` is dynamically updated: it's the number of fields in the current record, and if you add/remove a field, the value of ``NF`` will change: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF' - nf1=3,u=4,nf2=5,nf3=3 - -``NR``, by contrast (and ``FNR`` as well), retains the value from the original input stream, and records may be dropped by a ``filter`` within a ``then``-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/small put ' - begin{ @nr1 = 0 } - @nr1 += 1; - $nr1 = @nr1 - ' \ - then filter '$x>0.5' \ - then put ' - begin{ @nr2 = 0 } - @nr2 += 1; - $nr2 = @nr2 - ' - a b i x y nr1 nr2 - eks pan 2 0.7586799647899636 0.5221511083334797 2 1 - wye pan 5 0.5732889198020006 0.8636244699032729 5 2 - -Or, simply use ``mlr cat -n``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$x > 0.5' then cat -n data/small - n=1,a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - n=2,a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Why am I not seeing all possible joins occur? ----------------------------------------------------------------- - -**This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.** - -For example, the right file here has nine records, and the left file should add in the ``hostname`` column -- so the join output should also have 9 records: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint cat data/join-u-left.csv - hostname ipaddr - nadir.east.our.org 10.3.1.18 - zenith.west.our.org 10.3.1.27 - apoapsis.east.our.org 10.4.5.94 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint cat data/join-u-right.csv - ipaddr timestamp bytes - 10.3.1.27 1448762579 4568 - 10.3.1.18 1448762578 8729 - 10.4.5.94 1448762579 17445 - 10.3.1.27 1448762589 12 - 10.3.1.18 1448762588 44558 - 10.4.5.94 1448762589 8899 - 10.3.1.27 1448762599 0 - 10.3.1.18 1448762598 73425 - 10.4.5.94 1448762599 12200 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv - ipaddr hostname timestamp bytes - 10.3.1.27 zenith.west.our.org 1448762579 4568 - 10.4.5.94 apoapsis.east.our.org 1448762579 17445 - 10.4.5.94 apoapsis.east.our.org 1448762589 8899 - 10.4.5.94 apoapsis.east.our.org 1448762599 12200 - -The issue is that Miller's ``join``, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the Unix/Linux system ``join`` command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input. - -The solution (besides pre-sorting the input files on the join keys) is to simply use **mlr join -u** (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv - ipaddr hostname timestamp bytes - 10.3.1.27 zenith.west.our.org 1448762579 4568 - 10.3.1.18 nadir.east.our.org 1448762578 8729 - 10.4.5.94 apoapsis.east.our.org 1448762579 17445 - 10.3.1.27 zenith.west.our.org 1448762589 12 - 10.3.1.18 nadir.east.our.org 1448762588 44558 - 10.4.5.94 apoapsis.east.our.org 1448762589 8899 - 10.3.1.27 zenith.west.our.org 1448762599 0 - 10.3.1.18 nadir.east.our.org 1448762598 73425 - 10.4.5.94 apoapsis.east.our.org 1448762599 12200 - -General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file. - -How to rectangularize after joins with unpaired? ----------------------------------------------------------------- - -Suppose you have the following two data files: - -.. code-block:: none - - id,code - 3,0000ff - 2,00ff00 - 4,ff0000 - -.. code-block:: none - - id,color - 4,red - 2,green - -Joining on color the results are as expected: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv join -j id -f data/color-codes.csv data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - -However, if we ask for left-unpaireds, since there's no ``color`` column, we get a row not having the same column names as the other: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - - id,code - 3,0000ff - -To fix this, we can use **unsparsify**: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv - id,code,color - 4,ff0000,red - 2,00ff00,green - 3,0000ff, - -Thanks to @aborruso for the tip! - -What about XML or JSON file formats? ----------------------------------------------------------------- - -Miller handles **tabular data**, which is a list of records each having fields which are key-value pairs. Miller also doesn't require that each record have the same field names (see also :doc:`record-heterogeneity`). Regardless, tabular data is a **non-recursive data structure**. - -XML, JSON, etc. are, by contrast, all **recursive** or **nested** data structures. For example, in JSON you can represent a hash map whose values are lists of lists. - -Now, you can put tabular data into these formats -- since list-of-key-value-pairs is one of the things representable in XML or JSON. Example: - -.. code-block:: none - - # DKVP - x=1,y=2 - z=3 - -.. code-block:: none - - # XML - - - - x 1 - - - y 2 - - - - - z 3 - - -
- -.. code-block:: none - - # JSON - [{"x":1,"y":2},{"z":3}] - -However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics -- only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form -- this is a general text-processing problem. - -Miller does support tabular data represented in JSON: please see :doc:`file-formats`. See also `jq `_ for a truly powerful, JSON-specific tool. - -For XML, my suggestion is to use a tool like `ff-extractor `_ to do format conversion. diff --git a/docs/faq.rst.in b/docs/faq.rst.in deleted file mode 100644 index e33f9dee2..000000000 --- a/docs/faq.rst.in +++ /dev/null @@ -1,329 +0,0 @@ -FAQ -========= - -No output at all ----------------------------------------------------------------- - -Try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -If you're using Miller version less than 5.0.0 (try ``mlr --version`` on your system to find out), when the line-ending-autodetect feature was introduced, please see http://johnkerl.org/miller-releases/miller-4.5.0/doc/index.html. - -Fields not selected ----------------------------------------------------------------- - -Check the field-separators of the data, e.g. with the command-line ``head`` program. Example: for CSV, Miller's default record separator is comma; if your data is tab-delimited, e.g. ``aTABbTABc``, then Miller won't find three fields named ``a``, ``b``, and ``c`` but rather just one named ``aTABbTABc``. Solution in this case: ``mlr --fs tab {remaining arguments ...}``. - -Also try ``od -xcv`` and/or ``cat -e`` on your file to check for non-printable characters. - -Headerless CSV with duplicate field values ------------------------------------------- - -Miller is (by central design) a mapping from name to value, rather than integer position to value as in most tools in the Unix toolkit such as ``sort``, ``cut``, ``awk``, etc. So given input ``Yea=1,Yea=2`` on the same input line, first ``Yea=1`` is stored, then updated with ``Yea=2``. This is in the input-parser and the value ``Yea=1`` is unavailable to any further processing. The following example line comes from a headerless CSV file and includes 5 times the string (value) ``'NA'``: - -``ag '0.9' nas.csv |head -1 -2:-349801.10097848,4537221.43295653,2,1,NA,NA,NA,NA,NA`` - -The repeated ``'NA'`` strings (values) in the same line will be treated as fields (columns) with same name, thus only one is kept in the output. - -This can be worked around by telling ``mlr`` that there is no header row by using ``--implicit-csv-header`` or changing the input format by using ``nidx`` like so:: - - ag '0.9' nas.csv | mlr --n2c --fs "," label xsn,ysn,x,y,t,a,e29,e31,e32 then head - -Diagnosing delimiter specifications ----------------------------------------------------------------- - -POKI_INCLUDE_ESCAPED(data/delimiter-examples.txt)HERE - -How do I suppress numeric conversion? ----------------------------------------------------------------- - -**TL;DR use put -S**. - -Within ``mlr put`` and ``mlr filter``, the default behavior for scanning input records is to parse them as integer, if possible, then as float, if possible, else leave them as string: - -POKI_RUN_COMMAND{{cat data/scan-example-1.tbl}}HERE - -POKI_RUN_COMMAND{{mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-1.tbl}}HERE - -The numeric-conversion rule is simple: - -* Try to scan as integer (``"1"`` should be int); -* If that doesn't succeed, try to scan as float (``"1.0"`` should be float); -* If that doesn't succeed, leave the value as a string (``"1x"`` is string). - -This is a sensible default: you should be able to put ``'$z = $x + $y'`` without having to write ``'$z = int($x) + float($y)'``. Also note that default output format for floating-point numbers created by ``put`` (and other verbs such as ``stats1``) is six decimal places; you can override this using ``mlr --ofmt``. Also note that Miller uses your system's C library functions whenever possible: e.g. ``sscanf`` for converting strings to integer or floating-point. - -But now suppose you have data like these: - -POKI_RUN_COMMAND{{cat data/scan-example-2.tbl}}HERE - -POKI_RUN_COMMAND{{mlr --pprint put '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl}}HERE - -The same conversion rules as above are being used. Namely: - -* By default field values are inferred to int, else float, else string; - -* leading zeroes indicate octal for integers (``sscanf`` semantics); - -* since ``0008`` doesn't scan as integer (leading 0 requests octal but 8 isn't a valid octal digit), the float scan is tried next and it succeeds; - -* default floating-point output format is 6 decimal places (override with ``mlr --ofmt``). - -Taken individually the rules make sense; taken collectively they produce a mishmash of types here. - -The solution is to **use the -S flag** for ``mlr put`` and/or ``mlr filter``. Then all field values are left as string. You can type-coerce on demand using syntax like ``'$z = int($x) + float($y)'``. (See also :doc:`reference-dsl`; see also https://github.com/johnkerl/miller/issues/150.) - -POKI_RUN_COMMAND{{mlr --pprint put -S '$copy = $value; $type = typeof($value)' data/scan-example-2.tbl}}HERE - -How do I examine then-chaining? ----------------------------------------------------------------- - -Then-chaining found in Miller is intended to function the same as Unix pipes, but with less keystroking. You can print your data one pipeline step at a time, to see what intermediate output at one step becomes the input to the next step. - -First, look at the input data: - -POKI_RUN_COMMAND{{cat data/then-example.csv}}HERE - -Next, run the first step of your command, omitting anything from the first ``then`` onward: - -POKI_RUN_COMMAND{{mlr --icsv --opprint count-distinct -f Status,Payment_Type data/then-example.csv}}HERE - -After that, run it with the next ``then`` step included: - -POKI_RUN_COMMAND{{mlr --icsv --opprint count-distinct -f Status,Payment_Type then sort -nr count data/then-example.csv}}HERE - -Now if you use ``then`` to include another verb after that, the columns ``Status``, ``Payment_Type``, and ``count`` will be the input to that verb. - -Note, by the way, that you'll get the same results using pipes: - -POKI_RUN_COMMAND{{mlr --csv count-distinct -f Status,Payment_Type data/then-example.csv | mlr --icsv --opprint sort -nr count}}HERE - -I assigned $9 and it's not 9th ----------------------------------------------------------------- - -Miller records are ordered lists of key-value pairs. For NIDX format, DKVP format when keys are missing, or CSV/CSV-lite format with ``--implicit-csv-header``, Miller will sequentially assign keys of the form ``1``, ``2``, etc. But these are not integer array indices: they're just field names taken from the initial field ordering in the input data. - -POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp cat}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp put '$6="a";$4="b";$55="cde"'}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --nidx cat}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --csv --implicit-csv-header cat}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp rename 2,999}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --dkvp rename 2,newname}}HERE - -POKI_RUN_COMMAND{{echo x,y,z | mlr --csv --implicit-csv-header reorder -f 3,1,2}}HERE - -How can I filter by date? ----------------------------------------------------------------- - -Given input like - -POKI_RUN_COMMAND{{cat dates.csv}}HERE - -we can use ``strptime`` to parse the date field into seconds-since-epoch and then do numeric comparisons. Simply match your input dataset's date-formatting to the :ref:`reference-dsl-strptime` format-string. For example: - -POKI_RUN_COMMAND{{mlr --csv filter 'strptime($date, "%Y-%m-%d") > strptime("2018-03-03", "%Y-%m-%d")' dates.csv}}HERE - -Caveat: localtime-handling in timezones with DST is still a work in progress; see https://github.com/johnkerl/miller/issues/170. See also https://github.com/johnkerl/miller/issues/208 -- thanks @aborruso! - -How can I handle commas-as-data in various formats? ----------------------------------------------------------------- - -:doc:`CSV ` handles this well and by design: - -POKI_RUN_COMMAND{{cat commas.csv}}HERE - -Likewise :ref:`file-formats-json`: - -POKI_RUN_COMMAND{{mlr --icsv --ojson cat commas.csv}}HERE - -For Miller's :ref:`vertical-tabular format ` there is no escaping for carriage returns, but commas work fine: - -POKI_RUN_COMMAND{{mlr --icsv --oxtab cat commas.csv}}HERE - -But for :ref:`Key-value_pairs ` and :ref:`index-numbered `, commas are the default field separator. And -- as of Miller 5.4.0 anyway -- there is no CSV-style double-quote-handling like there is for CSV. So commas within the data look like delimiters: - -POKI_RUN_COMMAND{{mlr --icsv --odkvp cat commas.csv}}HERE - -One solution is to use a different delimiter, such as a pipe character: - -POKI_RUN_COMMAND{{mlr --icsv --odkvp --ofs pipe cat commas.csv}}HERE - -To be extra-sure to avoid data/delimiter clashes, you can also use control -characters as delimiters -- here, control-A: - -POKI_RUN_COMMAND{{mlr --icsv --odkvp --ofs '\001' cat commas.csv | cat -v}}HERE - -How can I handle field names with special symbols in them? ----------------------------------------------------------------- - -Simply surround the field names with curly braces: - -POKI_RUN_COMMAND{{echo 'x.a=3,y:b=4,z/c=5' | mlr put '${product.all} = ${x.a} * ${y:b} * ${z/c}'}}HERE - -How to escape '?' in regexes? ----------------------------------------------------------------- - -One way is to use square brackets; an alternative is to use simple string-substitution rather than a regular expression. - -POKI_RUN_COMMAND{{cat data/question.dat}}HERE -POKI_RUN_COMMAND{{mlr --oxtab put '$c = gsub($a, "[?]"," ...")' data/question.dat}}HERE -POKI_RUN_COMMAND{{mlr --oxtab put '$c = ssub($a, "?"," ...")' data/question.dat}}HERE - -The ``ssub`` function exists precisely for this reason: so you don't have to escape anything. - -How can I put single-quotes into strings? ----------------------------------------------------------------- - -This is a little tricky due to the shell's handling of quotes. For simplicity, let's first put an update script into a file: - -POKI_INCLUDE_ESCAPED(data/single-quote-example.mlr)HERE - -POKI_RUN_COMMAND{{echo a=bcd | mlr put -f data/single-quote-example.mlr}}HERE - -So, it's simple: Miller's DSL uses double quotes for strings, and you can put single quotes (or backslash-escaped double-quotes) inside strings, no problem. - -Without putting the update expression in a file, it's messier: - -POKI_RUN_COMMAND{{echo a=bcd | mlr put '$a="It'\''s OK, I said, '\''for now'\''."'}}HERE - -The idea is that the outermost single-quotes are to protect the ``put`` expression from the shell, and the double quotes within them are for Miller. To get a single quote in the middle there, you need to actually put it *outside* the single-quoting for the shell. The pieces are the following, all concatenated together: - -* ``$a="It`` -* ``\'`` -* ``s OK, I said,`` -* ``\'`` -* ``for now`` -* ``\'`` -* ``.`` - -Why doesn't mlr cut put fields in the order I want? ----------------------------------------------------------------- - -Example: columns ``x,i,a`` were requested but they appear here in the order ``a,i,x``: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr cut -f x,i,a data/small}}HERE - -The issue is that Miller's ``cut``, by default, outputs cut fields in the order they appear in the input data. This design decision was made intentionally to parallel the Unix/Linux system ``cut`` command, which has the same semantics. - -The solution is to use the ``-o`` option: - -POKI_RUN_COMMAND{{mlr cut -o -f x,i,a data/small}}HERE - -NR is not consecutive after then-chaining ----------------------------------------------------------------- - -Given this input data: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -why don't I see ``NR=1`` and ``NR=2`` here?? - -POKI_RUN_COMMAND{{mlr filter '$x > 0.5' then put '$NR = NR' data/small}}HERE - -The reason is that ``NR`` is computed for the original input records and isn't dynamically updated. By contrast, ``NF`` is dynamically updated: it's the number of fields in the current record, and if you add/remove a field, the value of ``NF`` will change: - -POKI_RUN_COMMAND{{echo x=1,y=2,z=3 | mlr put '$nf1 = NF; $u = 4; $nf2 = NF; unset $x,$y,$z; $nf3 = NF'}}HERE - -``NR``, by contrast (and ``FNR`` as well), retains the value from the original input stream, and records may be dropped by a ``filter`` within a ``then``-chain. To recover consecutive record numbers, you can use out-of-stream variables as follows: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/dynamic-nr.sh)HERE - -Or, simply use ``mlr cat -n``: - -POKI_RUN_COMMAND{{mlr filter '$x > 0.5' then cat -n data/small}}HERE - -Why am I not seeing all possible joins occur? ----------------------------------------------------------------- - -**This section describes behavior before Miller 5.1.0. As of 5.1.0, -u is the default.** - -For example, the right file here has nine records, and the left file should add in the ``hostname`` column -- so the join output should also have 9 records: - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-u-left.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-u-right.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -s -j ipaddr -f data/join-u-left.csv data/join-u-right.csv}}HERE - -The issue is that Miller's ``join``, by default (before 5.1.0), took input sorted (lexically ascending) by the sort keys on both the left and right files. This design decision was made intentionally to parallel the Unix/Linux system ``join`` command, which has the same semantics. The benefit of this default is that the joiner program can stream through the left and right files, needing to load neither entirely into memory. The drawback, of course, is that is requires sorted input. - -The solution (besides pre-sorting the input files on the join keys) is to simply use **mlr join -u** (which is now the default). This loads the left file entirely into memory (while the right file is still streamed one line at a time) and does all possible joins without requiring sorted input: - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -u -j ipaddr -f data/join-u-left.csv data/join-u-right.csv}}HERE - -General advice is to make sure the left-file is relatively small, e.g. containing name-to-number mappings, while saving large amounts of data for the right file. - -How to rectangularize after joins with unpaired? ----------------------------------------------------------------- - -Suppose you have the following two data files: - -POKI_INCLUDE_ESCAPED(data/color-codes.csv)HERE - -POKI_INCLUDE_ESCAPED(data/color-names.csv)HERE - -Joining on color the results are as expected: - -POKI_RUN_COMMAND{{mlr --csv join -j id -f data/color-codes.csv data/color-names.csv}}HERE - -However, if we ask for left-unpaireds, since there's no ``color`` column, we get a row not having the same column names as the other: - -POKI_RUN_COMMAND{{mlr --csv join --ul -j id -f data/color-codes.csv data/color-names.csv}}HERE - -To fix this, we can use **unsparsify**: - -POKI_RUN_COMMAND{{mlr --csv join --ul -j id -f data/color-codes.csv then unsparsify --fill-with "" data/color-names.csv}}HERE - -Thanks to @aborruso for the tip! - -What about XML or JSON file formats? ----------------------------------------------------------------- - -Miller handles **tabular data**, which is a list of records each having fields which are key-value pairs. Miller also doesn't require that each record have the same field names (see also :doc:`record-heterogeneity`). Regardless, tabular data is a **non-recursive data structure**. - -XML, JSON, etc. are, by contrast, all **recursive** or **nested** data structures. For example, in JSON you can represent a hash map whose values are lists of lists. - -Now, you can put tabular data into these formats -- since list-of-key-value-pairs is one of the things representable in XML or JSON. Example: - -.. code-block:: none - - # DKVP - x=1,y=2 - z=3 - -.. code-block:: none - - # XML - - - - x 1 - - - y 2 - - - - - z 3 - - -
- -.. code-block:: none - - # JSON - [{"x":1,"y":2},{"z":3}] - -However, a tool like Miller which handles non-recursive data is never going to be able to handle full XML/JSON semantics -- only a small subset. If tabular data represented in XML/JSON/etc are sufficiently well-structured, it may be easy to grep/sed out the data into a simpler text form -- this is a general text-processing problem. - -Miller does support tabular data represented in JSON: please see :doc:`file-formats`. See also `jq `_ for a truly powerful, JSON-specific tool. - -For XML, my suggestion is to use a tool like `ff-extractor `_ to do format conversion. diff --git a/docs/feature-comparison.rst b/docs/feature-comparison.rst deleted file mode 100644 index a93bed4b0..000000000 --- a/docs/feature-comparison.rst +++ /dev/null @@ -1,71 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Unix-toolkit context -================================================================ - -How does Miller fit within the Unix toolkit (`grep`, `sed`, `awk`, etc.)? - -File-format awareness ----------------------------------------------------------------- - -Miller respects CSV headers. If you do ``mlr --csv cat *.csv`` then the header line is written once: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/a.csv - a,b,c - 1,2,3 - 4,5,6 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/b.csv - a,b,c - 7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cat data/a.csv data/b.csv - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv sort -nr b data/a.csv data/b.csv - a,b,c - 7,8,9 - 4,5,6 - 1,2,3 - -Likewise with ``mlr sort``, ``mlr tac``, and so on. - -awk-like features: mlr filter and mlr put ----------------------------------------------------------------- - -* ``mlr filter`` includes/excludes records based on a filter expression, e.g. ``mlr filter '$count > 10'``. - -* ``mlr put`` adds a new field as a function of others, e.g. ``mlr put '$xy = $x * $y'`` or ``mlr put '$counter = NR'``. - -* The ``$name`` syntax is straight from ``awk``'s ``$1 $2 $3`` (adapted to name-based indexing), as are the variables ``FS``, ``OFS``, ``RS``, ``ORS``, ``NF``, ``NR``, and ``FILENAME``. The ``ENV[...]`` syntax is from Ruby. - -* While ``awk`` functions are record-based, Miller subcommands (or *verbs*) are stream-based: each of them maps a stream of records into another stream of records. - -* Like ``awk``, Miller (as of v5.0.0) allows you to define new functions within its ``put`` and ``filter`` expression language. Further programmability comes from chaining with ``then``. - -* As with ``awk``, ``$``-variables are stream variables and all verbs (such as ``cut``, ``stats1``, ``put``, etc.) as well as ``put``/``filter`` statements operate on streams. This means that you define actions to be done on each record and then stream your data through those actions. The built-in variables ``NF``, ``NR``, etc. change from one line to another, ``$x`` is a label for field ``x`` in the current record, and the input to ``sqrt($x)`` changes from one record to the next. The expression language for the ``put`` and ``filter`` verbs additionally allows you to define ``begin {...}`` and ``end {...}`` blocks for actions to be taken before and after records are processed, respectively. - -* As with ``awk``, Miller's ``put``/``filter`` language lets you set ``@sum=0`` before records are read, then update that sum on each record, then print its value at the end. Unlike ``awk``, Miller makes syntactically explicit the difference between variables with extent across all records (names starting with ``@``, such as ``@sum``) and variables which are local to the current expression (names starting without ``@``, such as ``sum``). - -* Miller can be faster than ``awk``, ``cut``, and so on, depending on platform; see also :doc:`performance`. In particular, Miller's DSL syntax is parsed into C control structures at startup time, with the bulk data-stream processing all done in C. - -See also ----------------------------------------------------------------- - -See :doc:`reference-verbs` for more on Miller's subcommands ``cat``, ``cut``, ``head``, ``sort``, ``tac``, ``tail``, ``top``, and ``uniq``, as well as :doc:`reference-dsl` for more on the awk-like ``mlr filter`` and ``mlr put``. diff --git a/docs/feature-comparison.rst.in b/docs/feature-comparison.rst.in deleted file mode 100644 index 8b0d268af..000000000 --- a/docs/feature-comparison.rst.in +++ /dev/null @@ -1,43 +0,0 @@ -Unix-toolkit context -================================================================ - -How does Miller fit within the Unix toolkit (`grep`, `sed`, `awk`, etc.)? - -File-format awareness ----------------------------------------------------------------- - -Miller respects CSV headers. If you do ``mlr --csv cat *.csv`` then the header line is written once: - -POKI_RUN_COMMAND{{cat data/a.csv}}HERE - -POKI_RUN_COMMAND{{cat data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv cat data/a.csv data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv sort -nr b data/a.csv data/b.csv}}HERE - -Likewise with ``mlr sort``, ``mlr tac``, and so on. - -awk-like features: mlr filter and mlr put ----------------------------------------------------------------- - -* ``mlr filter`` includes/excludes records based on a filter expression, e.g. ``mlr filter '$count > 10'``. - -* ``mlr put`` adds a new field as a function of others, e.g. ``mlr put '$xy = $x * $y'`` or ``mlr put '$counter = NR'``. - -* The ``$name`` syntax is straight from ``awk``'s ``$1 $2 $3`` (adapted to name-based indexing), as are the variables ``FS``, ``OFS``, ``RS``, ``ORS``, ``NF``, ``NR``, and ``FILENAME``. The ``ENV[...]`` syntax is from Ruby. - -* While ``awk`` functions are record-based, Miller subcommands (or *verbs*) are stream-based: each of them maps a stream of records into another stream of records. - -* Like ``awk``, Miller (as of v5.0.0) allows you to define new functions within its ``put`` and ``filter`` expression language. Further programmability comes from chaining with ``then``. - -* As with ``awk``, ``$``-variables are stream variables and all verbs (such as ``cut``, ``stats1``, ``put``, etc.) as well as ``put``/``filter`` statements operate on streams. This means that you define actions to be done on each record and then stream your data through those actions. The built-in variables ``NF``, ``NR``, etc. change from one line to another, ``$x`` is a label for field ``x`` in the current record, and the input to ``sqrt($x)`` changes from one record to the next. The expression language for the ``put`` and ``filter`` verbs additionally allows you to define ``begin {...}`` and ``end {...}`` blocks for actions to be taken before and after records are processed, respectively. - -* As with ``awk``, Miller's ``put``/``filter`` language lets you set ``@sum=0`` before records are read, then update that sum on each record, then print its value at the end. Unlike ``awk``, Miller makes syntactically explicit the difference between variables with extent across all records (names starting with ``@``, such as ``@sum``) and variables which are local to the current expression (names starting without ``@``, such as ``sum``). - -* Miller can be faster than ``awk``, ``cut``, and so on, depending on platform; see also :doc:`performance`. In particular, Miller's DSL syntax is parsed into C control structures at startup time, with the bulk data-stream processing all done in C. - -See also ----------------------------------------------------------------- - -See :doc:`reference-verbs` for more on Miller's subcommands ``cat``, ``cut``, ``head``, ``sort``, ``tac``, ``tail``, ``top``, and ``uniq``, as well as :doc:`reference-dsl` for more on the awk-like ``mlr filter`` and ``mlr put``. diff --git a/docs/features.rst b/docs/features.rst deleted file mode 100644 index 1e6aee55d..000000000 --- a/docs/features.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Features -================================================================ - -Miller is like awk, sed, cut, join, and sort for **name-indexed data such as -CSV, TSV, and tabular JSON**. You get to work with your data using named -fields, without needing to count positional column indices. - -This is something the Unix toolkit always could have done, and arguably -always should have done. It operates on key-value-pair data while the familiar -Unix tools operate on integer-indexed fields: if the natural data structure for -the latter is the array, then Miller's natural data structure is the -insertion-ordered hash map. This encompasses a **variety of data formats**, -including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle -**positionally-indexed data** as a special case.) - -* Miller is **multi-purpose**: it's useful for **data cleaning**, **data reduction**, **statistical reporting**, **devops**, **system administration**, **log-file processing**, **format conversion**, and **database-query post-processing**. - -* You can use Miller to snarf and munge **log-file data**, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. - -* Miller complements **data-analysis tools** such as **R**, **pandas**, etc.: you can use Miller to **clean** and **prepare** your data. While you can do **basic statistics** entirely in Miller, its streaming-data feature and single-pass algorithms enable you to **reduce very large data sets**. - -* Miller complements SQL **databases**: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples :ref:`here ` and :ref:`here `.) You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. - -* Miller also goes beyond the classic Unix tools by stepping fully into our modern, **no-SQL** world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. - -* Miller is **streaming**: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (``sort``, ``tac``, ``stats1``), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system's available RAM, and you can use Miller in **tail -f** contexts. - -* Miller is **pipe-friendly** and interoperates with the Unix toolkit - -* Miller's I/O formats include **tabular pretty-printing**, **positionally indexed** (Unix-toolkit style), CSV, JSON, and others - -* Miller does **conversion** between formats - -* Miller's **processing is format-aware**: e.g. CSV ``sort`` and ``tac`` keep header lines first - -* Miller has high-throughput **performance** on par with the Unix toolkit - -* Not unlike `jq `_ (for JSON), Miller is written in portable, modern C, with **zero runtime dependencies**. You can download or compile a single binary, ``scp`` it to a faraway machine, and expect it to work. - -Releases and release notes: https://github.com/johnkerl/miller/releases. diff --git a/docs/features.rst.in b/docs/features.rst.in deleted file mode 100644 index e70ec51d5..000000000 --- a/docs/features.rst.in +++ /dev/null @@ -1,40 +0,0 @@ -Features -================================================================ - -Miller is like awk, sed, cut, join, and sort for **name-indexed data such as -CSV, TSV, and tabular JSON**. You get to work with your data using named -fields, without needing to count positional column indices. - -This is something the Unix toolkit always could have done, and arguably -always should have done. It operates on key-value-pair data while the familiar -Unix tools operate on integer-indexed fields: if the natural data structure for -the latter is the array, then Miller's natural data structure is the -insertion-ordered hash map. This encompasses a **variety of data formats**, -including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle -**positionally-indexed data** as a special case.) - -* Miller is **multi-purpose**: it's useful for **data cleaning**, **data reduction**, **statistical reporting**, **devops**, **system administration**, **log-file processing**, **format conversion**, and **database-query post-processing**. - -* You can use Miller to snarf and munge **log-file data**, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. - -* Miller complements **data-analysis tools** such as **R**, **pandas**, etc.: you can use Miller to **clean** and **prepare** your data. While you can do **basic statistics** entirely in Miller, its streaming-data feature and single-pass algorithms enable you to **reduce very large data sets**. - -* Miller complements SQL **databases**: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples :ref:`here ` and :ref:`here `.) You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. - -* Miller also goes beyond the classic Unix tools by stepping fully into our modern, **no-SQL** world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. - -* Miller is **streaming**: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (``sort``, ``tac``, ``stats1``), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system's available RAM, and you can use Miller in **tail -f** contexts. - -* Miller is **pipe-friendly** and interoperates with the Unix toolkit - -* Miller's I/O formats include **tabular pretty-printing**, **positionally indexed** (Unix-toolkit style), CSV, JSON, and others - -* Miller does **conversion** between formats - -* Miller's **processing is format-aware**: e.g. CSV ``sort`` and ``tac`` keep header lines first - -* Miller has high-throughput **performance** on par with the Unix toolkit - -* Not unlike `jq `_ (for JSON), Miller is written in portable, modern C, with **zero runtime dependencies**. You can download or compile a single binary, ``scp`` it to a faraway machine, and expect it to work. - -Releases and release notes: https://github.com/johnkerl/miller/releases. diff --git a/docs/file-formats.rst b/docs/file-formats.rst deleted file mode 100644 index 6eaa8a5ba..000000000 --- a/docs/file-formats.rst +++ /dev/null @@ -1,659 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -File formats -================================================================ - -Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON -- and other formats you're likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data. - -Examples ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --usage-data-format-examples - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - -.. _file-formats-csv: - -CSV/TSV/ASV/USV/etc. ----------------------------------------------------------------- - -When ``mlr`` is invoked with the ``--csv`` or ``--csvlite`` option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -Miller has record separator ``RS`` and field separator ``FS``, just as ``awk`` does. For TSV, use ``--fs tab``; to convert TSV to CSV, use ``--ifs tab --ofs comma``, etc. (See also :ref:`reference-separators`.) - -**TSV (tab-separated values):** the following are synonymous pairs: - -* ``--tsv`` and ``--csv --fs tab`` -* ``--itsv`` and ``--icsv --ifs tab`` -* ``--otsv`` and ``--ocsv --ofs tab`` -* ``--tsvlite`` and ``--csvlite --fs tab`` -* ``--itsvlite`` and ``--icsvlite --ifs tab`` -* ``--otsvlite`` and ``--ocsvlite --ofs tab`` - -**ASV (ASCII-separated values):** the flags ``--asv``, ``--iasv``, ``--oasv``, ``--asvlite``, ``--iasvlite``, and ``--oasvlite`` are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively. - -**USV (Unicode-separated values):** likewise, the flags ``--usv``, ``--iusv``, ``--ousv``, ``--usvlite``, ``--iusvlite``, and ``--ousvlite`` use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively. - -Miller's ``--csv`` flag supports `RFC-4180 CSV `_. This includes CRLF line-terminators by default, regardless of platform. - -Here are the differences between CSV and CSV-lite: - -* CSV supports `RFC-4180 `_-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not. - -* CSV does not allow heterogeneous data; CSV-lite does (see also :doc:`record-heterogeneity`). - -* The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader. - -Here are things they have in common: - -* The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on. - -* The ``--implicit-csv-header`` flag for input and the ``--headerless-csv-output`` flag for output. - -.. _file-formats-dkvp: - -DKVP: Key-value pairs ----------------------------------------------------------------- - -Miller's default file format is DKVP, for **delimited key-value pairs**. Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Such data are easy to generate, e.g. in Ruby with - -.. code-block:: none - - puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}" - -.. code-block:: none - - puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',') - -or ``print`` statements in various languages, e.g. - -.. code-block:: none - - echo "type=3,user=$USER,date=$date\n"; - -.. code-block:: none - - logger.log("type=3,user=$USER,date=$date\n"); - -Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, ``dish=7,egg=8,flint`` is parsed as ``"dish" => "7", "egg" => "8", "3" => "flint"`` and ``dish,egg,flint`` is parsed as ``"1" => "dish", "2" => "egg", "3" => "flint"``. - -As discussed in :doc:`record-heterogeneity`, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as - -.. code-block:: none - - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100, resource=/path/to/file - resource=/some/other/path,loadsec=0.97,ok=false - -etc. and I just log them as needed. Then later, I can use ``grep``, ``mlr --opprint group-like``, etc. -to analyze my logs. - -See :doc:`reference` regarding how to specify separators other than the default equals-sign and comma. - -.. _file-formats-nidx: - -NIDX: Index-numbered (toolkit style) ----------------------------------------------------------------- - -With ``--inidx --ifs ' ' --repifs``, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior. - -Example with index-numbered output: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --onidx --ofs ' ' cat data/small - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Example with index-numbered input: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/mydata.txt - oh say can you see - by the dawn's - early light - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt - 1=oh,2=say,3=can,4=you,5=see - 1=by,2=the,3=dawn's - 1=early,2=light - -Example with index-numbered input and output: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/mydata.txt - oh say can you see - by the dawn's - early light - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt - say can - the dawn's - light - -.. _file-formats-json: - -Tabular JSON ----------------------------------------------------------------- - -JSON is a format which supports arbitrarily deep nesting of "objects" (hashmaps) and "arrays" (lists), while Miller is a tool for handling **tabular data** only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out `jq `_.) - -But if you have tabular data represented in JSON then Miller can handle that for you. - -Single-level JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -An **array of single-level objects** is, quite simply, **a table**: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json head -n 2 then cut -f color,shape data/json-example-1.json - { "color": "yellow", "shape": "triangle" } - { "color": "red", "shape": "square" } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json - { - "color": "yellow", - "u": 0.6321695890307647, - "v": 0.9887207810889004 - } - { - "color": "red", - "u": 0.21966833570651523, - "v": 0.001257332190235938 - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json - shape u_mean u_stddev u_count - triangle 0.583995 0.131184 3 - square 0.409355 0.365428 4 - circle 0.366013 0.209094 3 - -Nested JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Additionally, Miller can **tabularize nested objects by concatentating keys**: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json --jvstack head -n 2 data/json-example-2.json - { - "flag": 1, - "i": 11, - "attributes": { - "color": "yellow", - "shape": "triangle" - }, - "values": { - "u": 0.632170, - "v": 0.988721, - "w": 0.436498, - "x": 5.798188 - } - } - { - "flag": 1, - "i": 15, - "attributes": { - "color": "red", - "shape": "square" - }, - "values": { - "u": 0.219668, - "v": 0.001257, - "w": 0.792778, - "x": 2.944117 - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint head -n 4 data/json-example-2.json - flag i attributes:color attributes:shape values:u values:v values:w values:x - 1 11 yellow triangle 0.632170 0.988721 0.436498 5.798188 - 1 15 red square 0.219668 0.001257 0.792778 2.944117 - 1 16 red circle 0.209017 0.290052 0.138103 5.065034 - 0 48 red square 0.956274 0.746720 0.775542 7.117831 - -Note in particular that as far as Miller's ``put`` and ``filter``, as well as other I/O formats, are concerned, these are simply field names with colons in them: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json - { - "flag": 1, - "i": 11, - "attributes": { - "color": "yellow", - "shape": "triangle" - }, - "values": { - "u": 0.632170, - "v": 0.988721, - "w": 0.436498, - "x": 5.798188, - "uv": 0.625040 - } - } - -Arrays -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Arrays aren't supported in Miller's ``put``/``filter`` DSL. By default, JSON arrays are read in as integer-keyed maps. - -Suppose we have arrays like this in our input data: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/json-example-3.json - { - "label": "orange", - "values": [12.2, 13.8, 17.2] - } - { - "label": "purple", - "values": [27.0, 32.4] - } - -Then integer indices (starting from 0 and counting up) are used as map keys: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --oxtab cat data/json-example-3.json - label orange - values:0 12.2 - values:1 13.8 - values:2 17.2 - - label purple - values:0 27.0 - values:1 32.4 - -When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json --jvstack cat data/json-example-3.json - { - "label": "orange", - "values": { - "0": 12.2, - "1": 13.8, - "2": 17.2 - } - } - { - "label": "purple", - "values": { - "0": 27.0, - "1": 32.4 - } - } - -This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all. - -You might also use ``mlr --json-skip-arrays-on-input`` or ``mlr --json-fatal-arrays-on-input``. - -To truly handle JSON, please use a JSON-processing tool such as `jq `_. - -Formatting JSON options -^^^^^^^^^^^^^^^^^^^^^^^^^ - -JSON isn't a parameterized format, so ``RS``, ``FS``, ``PS`` aren't specifiable. Nonetheless, you can do the following: - -* Use ``--jvstack`` to pretty-print JSON objects with multi-line (vertically stacked) spacing. By default, each Miller record (JSON object) is one per line. - -* Keystroke-savers: ``--jsonx`` simply means ``--json --jvstack``, and ``--ojsonx`` simply means ``--ojson --jvstack``. - -* Use ``--jlistwrap`` to print the sequence of JSON objects wrapped in an outermost ``[`` and ``]``. By default, these aren't printed. - -* Use ``--jquoteall`` to double-quote all object values. By default, integers, floating-point numbers, and booleans ``true`` and ``false`` are not double-quoted when they appear as JSON-object keys. - -* Use ``--jflatsep yourstringhere`` to specify the string used for key concatenation: this defaults to a single colon. - -* Use ``--jofmt`` to force Miller to apply the global ``--ofmt`` to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in ``%lf``, ``%le``, or ``%lg``. Miller floats are double-precision so behavior using ``%f``, ``%d``, etc. is undefined. Second note: ``0.123`` is valid JSON; ``.123`` is not. Thus this feature allows you to emit JSON which may be unparseable by other tools. - -Again, please see `jq `_ for a truly powerful, JSON-specific tool. - -JSON non-streaming -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in ``tail -f`` contexts. - -.. _file-formats-pprint: - -PPRINT: Pretty-printed tabular ----------------------------------------------------------------- - -Miller's pretty-print format is like CSV, but column-aligned. For example, compare - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ocsv cat data/small - a,b,i,x,y - pan,pan,1,0.3467901443380824,0.7268028627434533 - eks,pan,2,0.7586799647899636,0.5221511083334797 - wye,wye,3,0.20460330576630303,0.33831852551664776 - eks,wye,4,0.38139939387114097,0.13418874328430463 - wye,pan,5,0.5732889198020006,0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won't work on ``tail -f`` contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory. - -See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -For output only (this isn't supported in the input-scanner as of 5.0.0) you can use ``--barred`` with pprint output format: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --barred cat data/small - +-----+-----+---+---------------------+---------------------+ - | a | b | i | x | y | - +-----+-----+---+---------------------+---------------------+ - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - +-----+-----+---+---------------------+---------------------+ - -.. _file-formats-xtab: - -XTAB: Vertical tabular ----------------------------------------------------------------- - -This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also -`ngrid `_ for an entirely different, very powerful option). Namely: - -.. code-block:: none - - $ grep -v '^#' /etc/passwd | head -n 6 | mlr --nidx --fs : --opprint cat - 1 2 3 4 5 6 7 - nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false - root * 0 0 System Administrator /var/root /bin/sh - daemon * 1 1 System Services /var/root /usr/bin/false - _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico - _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false - _networkd * 24 24 Network Services /var/networkd /usr/bin/false - -.. code-block:: none - - $ grep -v '^#' /etc/passwd | head -n 2 | mlr --nidx --fs : --oxtab cat - 1 nobody - 2 * - 3 -2 - 4 -2 - 5 Unprivileged User - 6 /var/empty - 7 /usr/bin/false - - 1 root - 2 * - 3 0 - 4 0 - 5 System Administrator - 6 /var/root - 7 /bin/sh - -.. code-block:: none - - $ grep -v '^#' /etc/passwd | head -n 2 | \ - mlr --nidx --fs : --ojson --jvstack --jlistwrap label name,password,uid,gid,gecos,home_dir,shell - [ - { - "name": "nobody", - "password": "*", - "uid": -2, - "gid": -2, - "gecos": "Unprivileged User", - "home_dir": "/var/empty", - "shell": "/usr/bin/false" - } - ,{ - "name": "root", - "password": "*", - "uid": 0, - "gid": 0, - "gecos": "System Administrator", - "home_dir": "/var/root", - "shell": "/bin/sh" - } - ] - -Markdown tabular ----------------------------------------------------------------- - -Markdown format looks like this: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --omd cat data/small - | a | b | i | x | y | - | --- | --- | --- | --- | --- | - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - -which renders like this when dropped into various web tools (e.g. github comments): - -.. image:: pix/omd.png - -As of Miller 4.3.0, markdown format is supported only for output, not input. - -Data-conversion keystroke-savers ----------------------------------------------------------------- - -While you can do format conversion using ``mlr --icsv --ojson cat myfile.csv``, there are also keystroke-savers for this purpose, such as ``mlr --c2j cat myfile.csv``. For a complete list: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --usage-format-conversion-keystroke-saver-options - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - -Autodetect of line endings ----------------------------------------------------------------- - -Default line endings (``--irs`` and ``--ors``) are ``'auto'`` which means **autodetect from the input file format**, as long as the input file(s) have lines ending in either LF (also known as linefeed, ``'\n'``, ``0x0a``, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, ``'\r\n'``, ``0x0d 0x0a``, Windows style). - -**If both IRS and ORS are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you're running on.** - -The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF. - -If you use ``--ors {something else}`` with (default or explicitly specified) ``--irs auto`` then line endings are autodetected on input and set to what you specify on output. - -If you use ``--irs {something else}`` with (default or explicitly specified) ``--ors auto`` then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - -See also :ref:`reference-separators` for more information about record/field/pair separators. - -Comments in data ----------------------------------------------------------------- - -You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --usage-comments-in-data - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - -Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/budget.csv - # Asana -- here are the budget figures you asked for! - type,quantity - purple,456.78 - green,678.12 - orange,123.45 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv - type quantity - green 678.12 - purple 456.78 - orange 123.45 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv - # Asana -- here are the budget figures you asked for! - type quantity - green 678.12 - purple 456.78 - orange 123.45 diff --git a/docs/file-formats.rst.in b/docs/file-formats.rst.in deleted file mode 100644 index 8204f90f4..000000000 --- a/docs/file-formats.rst.in +++ /dev/null @@ -1,279 +0,0 @@ -File formats -================================================================ - -Miller handles name-indexed data using several formats: some you probably know by name, such as CSV, TSV, and JSON -- and other formats you're likely already seeing and using in your structured data. Additionally, Miller gives you the option of including comments within your data. - -Examples ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr --usage-data-format-examples}}HERE - -.. _file-formats-csv: - -CSV/TSV/ASV/USV/etc. ----------------------------------------------------------------- - -When ``mlr`` is invoked with the ``--csv`` or ``--csvlite`` option, key names are found on the first record and values are taken from subsequent records. This includes the case of CSV-formatted files. See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -Miller has record separator ``RS`` and field separator ``FS``, just as ``awk`` does. For TSV, use ``--fs tab``; to convert TSV to CSV, use ``--ifs tab --ofs comma``, etc. (See also :ref:`reference-separators`.) - -**TSV (tab-separated values):** the following are synonymous pairs: - -* ``--tsv`` and ``--csv --fs tab`` -* ``--itsv`` and ``--icsv --ifs tab`` -* ``--otsv`` and ``--ocsv --ofs tab`` -* ``--tsvlite`` and ``--csvlite --fs tab`` -* ``--itsvlite`` and ``--icsvlite --ifs tab`` -* ``--otsvlite`` and ``--ocsvlite --ofs tab`` - -**ASV (ASCII-separated values):** the flags ``--asv``, ``--iasv``, ``--oasv``, ``--asvlite``, ``--iasvlite``, and ``--oasvlite`` are analogous except they use ASCII FS and RS 0x1f and 0x1e, respectively. - -**USV (Unicode-separated values):** likewise, the flags ``--usv``, ``--iusv``, ``--ousv``, ``--usvlite``, ``--iusvlite``, and ``--ousvlite`` use Unicode FS and RS U+241F (UTF-8 0x0xe2909f) and U+241E (UTF-8 0xe2909e), respectively. - -Miller's ``--csv`` flag supports `RFC-4180 CSV `_. This includes CRLF line-terminators by default, regardless of platform. - -Here are the differences between CSV and CSV-lite: - -* CSV supports `RFC-4180 `_-style double-quoting, including the ability to have commas and/or LF/CRLF line-endings contained within an input field; CSV-lite does not. - -* CSV does not allow heterogeneous data; CSV-lite does (see also :doc:`record-heterogeneity`). - -* The CSV-lite input-reading code is fractionally more efficient than the CSV input-reader. - -Here are things they have in common: - -* The ability to specify record/field separators other than the default, e.g. CR-LF vs. LF, or tab instead of comma for TSV, and so on. - -* The ``--implicit-csv-header`` flag for input and the ``--headerless-csv-output`` flag for output. - -.. _file-formats-dkvp: - -DKVP: Key-value pairs ----------------------------------------------------------------- - -Miller's default file format is DKVP, for **delimited key-value pairs**. Example: - -POKI_RUN_COMMAND{{mlr cat data/small}}HERE - -Such data are easy to generate, e.g. in Ruby with - -.. code-block:: none - - puts "host=#{hostname},seconds=#{t2-t1},message=#{msg}" - -.. code-block:: none - - puts mymap.collect{|k,v| "#{k}=#{v}"}.join(',') - -or ``print`` statements in various languages, e.g. - -.. code-block:: none - - echo "type=3,user=$USER,date=$date\n"; - -.. code-block:: none - - logger.log("type=3,user=$USER,date=$date\n"); - -Fields lacking an IPS will have positional index (starting at 1) used as the key, as in NIDX format. For example, ``dish=7,egg=8,flint`` is parsed as ``"dish" => "7", "egg" => "8", "3" => "flint"`` and ``dish,egg,flint`` is parsed as ``"1" => "dish", "2" => "egg", "3" => "flint"``. - -As discussed in :doc:`record-heterogeneity`, Miller handles changes of field names within the same data stream. But using DKVP format this is particularly natural. One of my favorite use-cases for Miller is in application/server logs, where I log all sorts of lines such as - -.. code-block:: none - - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100, resource=/path/to/file - resource=/some/other/path,loadsec=0.97,ok=false - -etc. and I just log them as needed. Then later, I can use ``grep``, ``mlr --opprint group-like``, etc. -to analyze my logs. - -See :doc:`reference` regarding how to specify separators other than the default equals-sign and comma. - -.. _file-formats-nidx: - -NIDX: Index-numbered (toolkit style) ----------------------------------------------------------------- - -With ``--inidx --ifs ' ' --repifs``, Miller splits lines on whitespace and assigns integer field names starting with 1. This recapitulates Unix-toolkit behavior. - -Example with index-numbered output: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --onidx --ofs ' ' cat data/small}}HERE - -Example with index-numbered input: - -POKI_RUN_COMMAND{{cat data/mydata.txt}}HERE - -POKI_RUN_COMMAND{{mlr --inidx --ifs ' ' --odkvp cat data/mydata.txt}}HERE - -Example with index-numbered input and output: - -POKI_RUN_COMMAND{{cat data/mydata.txt}}HERE - -POKI_RUN_COMMAND{{mlr --nidx --fs ' ' --repifs cut -f 2,3 data/mydata.txt}}HERE - -.. _file-formats-json: - -Tabular JSON ----------------------------------------------------------------- - -JSON is a format which supports arbitrarily deep nesting of "objects" (hashmaps) and "arrays" (lists), while Miller is a tool for handling **tabular data** only. This means Miller cannot (and should not) handle arbitrary JSON. (Check out `jq `_.) - -But if you have tabular data represented in JSON then Miller can handle that for you. - -Single-level JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -An **array of single-level objects** is, quite simply, **a table**: - -POKI_RUN_COMMAND{{mlr --json head -n 2 then cut -f color,shape data/json-example-1.json}}HERE - -POKI_RUN_COMMAND{{mlr --json --jvstack head -n 2 then cut -f color,u,v data/json-example-1.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint stats1 -a mean,stddev,count -f u -g shape data/json-example-1.json}}HERE - -Nested JSON objects -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Additionally, Miller can **tabularize nested objects by concatentating keys**: - -POKI_RUN_COMMAND{{mlr --json --jvstack head -n 2 data/json-example-2.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint head -n 4 data/json-example-2.json}}HERE - -Note in particular that as far as Miller's ``put`` and ``filter``, as well as other I/O formats, are concerned, these are simply field names with colons in them: - -POKI_RUN_COMMAND{{mlr --json --jvstack head -n 1 then put '${values:uv} = ${values:u} * ${values:v}' data/json-example-2.json}}HERE - -Arrays -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Arrays aren't supported in Miller's ``put``/``filter`` DSL. By default, JSON arrays are read in as integer-keyed maps. - -Suppose we have arrays like this in our input data: - -POKI_RUN_COMMAND{{cat data/json-example-3.json}}HERE - -Then integer indices (starting from 0 and counting up) are used as map keys: - -POKI_RUN_COMMAND{{mlr --ijson --oxtab cat data/json-example-3.json}}HERE - -When the data are written back out as JSON, field names are re-expanded as above, but what were arrays on input are now maps on output: - -POKI_RUN_COMMAND{{mlr --json --jvstack cat data/json-example-3.json}}HERE - -This is non-ideal, but it allows Miller (5.x release being latest as of this writing) to handle JSON arrays at all. - -You might also use ``mlr --json-skip-arrays-on-input`` or ``mlr --json-fatal-arrays-on-input``. - -To truly handle JSON, please use a JSON-processing tool such as `jq `_. - -Formatting JSON options -^^^^^^^^^^^^^^^^^^^^^^^^^ - -JSON isn't a parameterized format, so ``RS``, ``FS``, ``PS`` aren't specifiable. Nonetheless, you can do the following: - -* Use ``--jvstack`` to pretty-print JSON objects with multi-line (vertically stacked) spacing. By default, each Miller record (JSON object) is one per line. - -* Keystroke-savers: ``--jsonx`` simply means ``--json --jvstack``, and ``--ojsonx`` simply means ``--ojson --jvstack``. - -* Use ``--jlistwrap`` to print the sequence of JSON objects wrapped in an outermost ``[`` and ``]``. By default, these aren't printed. - -* Use ``--jquoteall`` to double-quote all object values. By default, integers, floating-point numbers, and booleans ``true`` and ``false`` are not double-quoted when they appear as JSON-object keys. - -* Use ``--jflatsep yourstringhere`` to specify the string used for key concatenation: this defaults to a single colon. - -* Use ``--jofmt`` to force Miller to apply the global ``--ofmt`` to floating-point values. First note: please use sprintf-style codes for double precision, e.g. ending in ``%lf``, ``%le``, or ``%lg``. Miller floats are double-precision so behavior using ``%f``, ``%d``, etc. is undefined. Second note: ``0.123`` is valid JSON; ``.123`` is not. Thus this feature allows you to emit JSON which may be unparseable by other tools. - -Again, please see `jq `_ for a truly powerful, JSON-specific tool. - -JSON non-streaming -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The JSON parser Miller uses does not return until all input is parsed: in particular this means that, unlike for other file formats, Miller does not (at present) handle JSON files in ``tail -f`` contexts. - -.. _file-formats-pprint: - -PPRINT: Pretty-printed tabular ----------------------------------------------------------------- - -Miller's pretty-print format is like CSV, but column-aligned. For example, compare - -POKI_RUN_COMMAND{{mlr --ocsv cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -Note that while Miller is a line-at-a-time processor and retains input lines in memory only where necessary (e.g. for sort), pretty-print output requires it to accumulate all input lines (so that it can compute maximum column widths) before producing any output. This has two consequences: (a) pretty-print output won't work on ``tail -f`` contexts, where Miller will be waiting for an end-of-file marker which never arrives; (b) pretty-print output for large files is constrained by available machine memory. - -See :doc:`record-heterogeneity` for how Miller handles changes of field names within a single data stream. - -For output only (this isn't supported in the input-scanner as of 5.0.0) you can use ``--barred`` with pprint output format: - -POKI_RUN_COMMAND{{mlr --opprint --barred cat data/small}}HERE - -.. _file-formats-xtab: - -XTAB: Vertical tabular ----------------------------------------------------------------- - -This is perhaps most useful for looking a very wide and/or multi-column data which causes line-wraps on the screen (but see also -`ngrid `_ for an entirely different, very powerful option). Namely: - -POKI_INCLUDE_ESCAPED(data/system-file-opprint-example.txt)HERE - -POKI_INCLUDE_ESCAPED(data/system-file-oxtab-example.txt)HERE - -POKI_INCLUDE_ESCAPED(data/system-file-ojson-example.txt)HERE - -Markdown tabular ----------------------------------------------------------------- - -Markdown format looks like this: - -POKI_RUN_COMMAND{{mlr --omd cat data/small}}HERE - -which renders like this when dropped into various web tools (e.g. github comments): - -.. image:: pix/omd.png - -As of Miller 4.3.0, markdown format is supported only for output, not input. - -Data-conversion keystroke-savers ----------------------------------------------------------------- - -While you can do format conversion using ``mlr --icsv --ojson cat myfile.csv``, there are also keystroke-savers for this purpose, such as ``mlr --c2j cat myfile.csv``. For a complete list: - -POKI_RUN_COMMAND{{mlr --usage-format-conversion-keystroke-saver-options}}HERE - -Autodetect of line endings ----------------------------------------------------------------- - -Default line endings (``--irs`` and ``--ors``) are ``'auto'`` which means **autodetect from the input file format**, as long as the input file(s) have lines ending in either LF (also known as linefeed, ``'\n'``, ``0x0a``, Unix-style) or CRLF (also known as carriage-return/linefeed pairs, ``'\r\n'``, ``0x0d 0x0a``, Windows style). - -**If both IRS and ORS are auto (which is the default) then LF input will lead to LF output and CRLF input will lead to CRLF output, regardless of the platform you're running on.** - -The line-ending autodetector triggers on the first line ending detected in the input stream. E.g. if you specify a CRLF-terminated file on the command line followed by an LF-terminated file then autodetected line endings will be CRLF. - -If you use ``--ors {something else}`` with (default or explicitly specified) ``--irs auto`` then line endings are autodetected on input and set to what you specify on output. - -If you use ``--irs {something else}`` with (default or explicitly specified) ``--ors auto`` then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - -See also :ref:`reference-separators` for more information about record/field/pair separators. - -Comments in data ----------------------------------------------------------------- - -You can include comments within your data files, and either have them ignored, or passed directly through to the standard output as soon as they are encountered: - -POKI_RUN_COMMAND{{mlr --usage-comments-in-data}}HERE - -Examples: - -POKI_RUN_COMMAND{{cat data/budget.csv}}HERE - -POKI_RUN_COMMAND{{mlr --skip-comments --icsv --opprint sort -nr quantity data/budget.csv}}HERE - -POKI_RUN_COMMAND{{mlr --pass-comments --icsv --opprint sort -nr quantity data/budget.csv}}HERE diff --git a/docs/genrst b/docs/genrst deleted file mode 100755 index 42535d989..000000000 --- a/docs/genrst +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -# Use poki to run the live-code bits within the markup files. See README.md for details. - -names=$(echo *.rst.in | sed 's/\.rst\.in//g') - -for name in $names; do - echo BUILDING $name - if [ -f $name.rst ]; then # Won't exist yet on first run - chmod u+w $name.rst - fi - poki < $name.rst.in > $name.rst - chmod 400 $name.rst -done diff --git a/docs/h2rfoo b/docs/h2rfoo deleted file mode 100755 index e68460e54..000000000 --- a/docs/h2rfoo +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Tries to do the low-hanging fruit for v1 html to v2 rst. - -cat "$@" \ - | sed \ - -e 's:

::g' \ - -e 's:

::g' \ - -e 's:

::g' \ - -e 's::**:g' \ - -e 's::**:g' \ - -e 's::*:g' \ - -e 's::*:g' \ - -e 's::``:g' \ - -e 's::``:g' \ - -e 's::``:g' \ - -e 's::``:g' \ - -e 's:

  • :* :g' \ - -e 's:
  • :* :g' \ - -e 's:
  • ::g' \ - -e "s:’:':g" \ - -e 's:“:":g' \ - -e 's:”:":g' \ - -e 's:—:--:g' \ - -e 's:&:\&:g' \ - -e 's:>:>:g' \ - -e 's:<:<:g' \ - -e 's::**:g' \ - -e 's::**:g' \ - | h1foo \ - | h2foo \ - | pokifoo \ - | sed 's/^ *//' \ - | grep -v '
      ' \ - | grep -v '
    ' \ - | grep -v '^`_ installation support for OSX is available via - -.. code-block:: none - :emphasize-lines: 1,1 - - brew update && brew install miller - -...and also via `MacPorts `_: - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo port selfupdate && sudo port install miller - -You may already have the ``mlr`` executable available in your platform's package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following: - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo apt-get install miller - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo apt install miller - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo yum install miller - -On Windows, Miller is available via `Chocolatey `_: - -.. code-block:: none - :emphasize-lines: 1,1 - - choco install miller - -Prebuilt executables via GitHub per release ----------------------------------------------------------------- - -Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts). - -Miller is autobuilt for **Linux** using **Travis** on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of `SikhNerd `_ on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for **Windows** using the **Appveyor** continuous-build system: https://ci.appveyor.com/project/johnkerl/miller. - -Miller releases from `5.1.0 `_ onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select *Latest Build* and then *Artifacts* to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release. - -Building from source ----------------------------------------------------------------- - -Please see :doc:`build`. diff --git a/docs/install.rst.in b/docs/install.rst.in deleted file mode 100644 index ccc87d82e..000000000 --- a/docs/install.rst.in +++ /dev/null @@ -1,57 +0,0 @@ -Installation -================================================================ - -Prebuilt executables via package managers ----------------------------------------------------------------- - -`Homebrew `_ installation support for OSX is available via - -.. code-block:: none - :emphasize-lines: 1,1 - - brew update && brew install miller - -...and also via `MacPorts `_: - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo port selfupdate && sudo port install miller - -You may already have the ``mlr`` executable available in your platform's package manager on NetBSD, Debian Linux, Ubuntu Xenial and upward, Arch Linux, or perhaps other distributions. For example, on various Linux distributions you might do one of the following: - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo apt-get install miller - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo apt install miller - -.. code-block:: none - :emphasize-lines: 1,1 - - sudo yum install miller - -On Windows, Miller is available via `Chocolatey `_: - -.. code-block:: none - :emphasize-lines: 1,1 - - choco install miller - -Prebuilt executables via GitHub per release ----------------------------------------------------------------- - -Please see https://github.com/johnkerl/miller/releases where there are builds for OSX Yosemite, Linux x86-64 (dynamically linked), and Windows (via Appveyor build artifacts). - -Miller is autobuilt for **Linux** using **Travis** on every commit (https://travis-ci.org/johnkerl/miller/builds). This was set up by the generous assistance of `SikhNerd `_ on Github, tracked in https://github.com/johnkerl/miller/issues/15. Analogously, Miller is autobuilt for **Windows** using the **Appveyor** continuous-build system: https://ci.appveyor.com/project/johnkerl/miller. - -Miller releases from `5.1.0 `_ onward will have a precompiled Windows binary, in addition to the MacOSX and Linux 64-bit precompiled binaries as on previous releases. Specifically, at https://ci.appveyor.com/project/johnkerl/miller you can select *Latest Build* and then *Artifacts* to always get the current head build. Miller releases from 5.3.0 onward will simply point to a particular Appveyor artifact associated with the release. - -Building from source ----------------------------------------------------------------- - -Please see :doc:`build`. diff --git a/docs/internationalization.rst b/docs/internationalization.rst deleted file mode 100644 index 74c917e3c..000000000 --- a/docs/internationalization.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Internationalization -================================================================ - -Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.) - -By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes: - -* Tabular output formats such pprint and xtab (see :doc:`file-formats`) are aligned correctly. -* The :ref:`reference-dsl-strlen` function correctly counts UTF-8 codepoints rather than bytes. -* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions within the capabilities of https://github.com/sheredom/utf8.h. - -Meanwhile, regular expressions and the DSL functions :ref:`reference-dsl-sub` and :ref:`reference-dsl-gsub` function correctly, albeit without explicit intentional support. - -Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). diff --git a/docs/internationalization.rst.in b/docs/internationalization.rst.in deleted file mode 100644 index ce639f128..000000000 --- a/docs/internationalization.rst.in +++ /dev/null @@ -1,14 +0,0 @@ -Internationalization -================================================================ - -Miller handles strings with any characters other than 0x00 or 0xff, using explicit UTF-8-friendly string-length computations. (I have no plans to support UTF-16 or ISO-8859-1.) - -By and large, Miller treats strings as sequences of non-null bytes without need to interpret them semantically. Intentional support for internationalization includes: - -* Tabular output formats such pprint and xtab (see :doc:`file-formats`) are aligned correctly. -* The :ref:`reference-dsl-strlen` function correctly counts UTF-8 codepoints rather than bytes. -* The :ref:`reference-dsl-toupper`, :ref:`reference-dsl-tolower`, and :ref:`reference-dsl-capitalize` DSL functions within the capabilities of https://github.com/sheredom/utf8.h. - -Meanwhile, regular expressions and the DSL functions :ref:`reference-dsl-sub` and :ref:`reference-dsl-gsub` function correctly, albeit without explicit intentional support. - -Please file an issue at https://github.com/johnkerl/miller if you encounter bugs related to internationalization (or anything else for that matter). diff --git a/docs/log-processing-examples.rst b/docs/log-processing-examples.rst deleted file mode 100644 index 65513bf47..000000000 --- a/docs/log-processing-examples.rst +++ /dev/null @@ -1,196 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Log-processing examples ----------------------------------------------------------------- - -Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here's where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can ``grep`` or what have you. Also it means not every line needs to have the same list of field names ("schema"). - -Again, all the examples in the CSV section apply here -- just change the input-format flags. But there's more you can do when not all the records have the same shape. - -Writing a program -- in any language whatsoever -- you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it. - -Suppose your program has printed something like this (`log.txt <./log.txt>`_): - -.. code-block:: none - :emphasize-lines: 1,1 - - cat log.txt - op=enter,time=1472819681 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - time=1472819690,batch_size=100,num_filtered=237 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A1,hit=1 - time=1472819705,batch_size=100,num_filtered=348 - op=cache,type=A4,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - time=1472819713,batch_size=100,num_filtered=493 - op=cache,type=A9,hit=1 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=1 - time=1472819720,batch_size=100,num_filtered=554 - op=cache,type=A1,hit=0 - op=cache,type=A4,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=0 - op=cache,type=A4,hit=0 - op=cache,type=A9,hit=0 - time=1472819736,batch_size=100,num_filtered=612 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - op=cache,type=A4,hit=1 - op=cache,type=A1,hit=1 - op=cache,type=A9,hit=0 - op=cache,type=A9,hit=0 - time=1472819742,batch_size=100,num_filtered=728 - -Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system ``grep`` command, or Miller's ``having-fields``, or ``is_present``, we can pick out the parts we want and analyze them: - -.. code-block:: none - :emphasize-lines: 1,1 - - grep op=cache log.txt \ - | mlr --idkvp --opprint stats1 -a mean -f hit -g type then sort -f type - type hit_mean - A1 0.857143 - A4 0.714286 - A9 0.090909 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from log.txt --opprint \ - filter 'is_present($batch_size)' \ - then step -a delta -f time,num_filtered \ - then sec2gmt time - time batch_size num_filtered time_delta num_filtered_delta - 2016-09-02T12:34:50Z 100 237 0 0 - 2016-09-02T12:35:05Z 100 348 15 111 - 2016-09-02T12:35:13Z 100 493 8 145 - 2016-09-02T12:35:20Z 100 554 7 61 - 2016-09-02T12:35:36Z 100 612 16 58 - 2016-09-02T12:35:42Z 100 728 6 116 - -Alternatively, we can simply group the similar data for a better look: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint group-like log.txt - op time - enter 1472819681 - - op type hit - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A1 1 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A9 1 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 1 - cache A1 0 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 0 - cache A4 0 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A9 0 - - time batch_size num_filtered - 1472819690 100 237 - 1472819705 100 348 - 1472819713 100 493 - 1472819720 100 554 - 1472819736 100 612 - 1472819742 100 728 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint group-like then sec2gmt time log.txt - op time - enter 2016-09-02T12:34:41Z - - op type hit - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A1 1 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A9 1 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 1 - cache A1 0 - cache A4 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 0 - cache A4 0 - cache A9 0 - cache A1 1 - cache A9 0 - cache A9 0 - cache A9 0 - cache A9 0 - cache A4 1 - cache A1 1 - cache A9 0 - cache A9 0 - - time batch_size num_filtered - 2016-09-02T12:34:50Z 100 237 - 2016-09-02T12:35:05Z 100 348 - 2016-09-02T12:35:13Z 100 493 - 2016-09-02T12:35:20Z 100 554 - 2016-09-02T12:35:36Z 100 612 - 2016-09-02T12:35:42Z 100 728 diff --git a/docs/log-processing-examples.rst.in b/docs/log-processing-examples.rst.in deleted file mode 100644 index ca26ae8e4..000000000 --- a/docs/log-processing-examples.rst.in +++ /dev/null @@ -1,24 +0,0 @@ -Log-processing examples ----------------------------------------------------------------- - -Another of my favorite use-cases for Miller is doing ad-hoc processing of log-file data. Here's where DKVP format really shines: one, since the field names and field values are present on every line, every line stands on its own. That means you can ``grep`` or what have you. Also it means not every line needs to have the same list of field names ("schema"). - -Again, all the examples in the CSV section apply here -- just change the input-format flags. But there's more you can do when not all the records have the same shape. - -Writing a program -- in any language whatsoever -- you can have it print out log lines as it goes along, with items for various events jumbled together. After the program has finished running you can sort it all out, filter it, analyze it, and learn from it. - -Suppose your program has printed something like this (`log.txt <./log.txt>`_): - -POKI_RUN_COMMAND{{cat log.txt}}HERE - -Each print statement simply contains local information: the current timestamp, whether a particular cache was hit or not, etc. Then using either the system ``grep`` command, or Miller's ``having-fields``, or ``is_present``, we can pick out the parts we want and analyze them: - -POKI_INCLUDE_AND_RUN_ESCAPED(10-1.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(10-2.sh)HERE - -Alternatively, we can simply group the similar data for a better look: - -POKI_RUN_COMMAND{{mlr --opprint group-like log.txt}}HERE - -POKI_RUN_COMMAND{{mlr --opprint group-like then sec2gmt time log.txt}}HERE diff --git a/docs/manpage.rst b/docs/manpage.rst deleted file mode 100644 index 34d6fa074..000000000 --- a/docs/manpage.rst +++ /dev/null @@ -1,2381 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Manpage -================================================================ - -This is simply a copy of what you should see on running **man mlr** at a command prompt, once Miller is installed on your system. - -.. code-block:: none - - MILLER(1) MILLER(1) - - - - NAME - miller - like awk, sed, cut, join, and sort for name-indexed data such - as CSV and tabular JSON. - - SYNOPSIS - Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or - more file names} - - - DESCRIPTION - Miller operates on key-value-pair data while the familiar Unix tools - operate on integer-indexed fields: if the natural data structure for - the latter is the array, then Miller's natural data structure is the - insertion-ordered hash map. This encompasses a variety of data - formats, including but not limited to the familiar CSV, TSV, and JSON. - (Miller can handle positionally-indexed data as a special case.) This - manpage documents Miller v5.10.1. - - EXAMPLES - COMMAND-LINE SYNTAX - mlr --csv cut -f hostname,uptime mydata.csv - mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv - mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - mlr stats2 -a linreg-pca -f u,v -g shape data/* - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' - mlr --from infile.dat put -f analyze.mlr - mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - DATA FORMATS - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - - OPTIONS - In the following option flags, the version with "i" designates the - input stream, "o" the output stream, and the version without prefix - sets the option for both input and output stream. For example: --irs - sets the input record separator, --ors the output record separator, and - --rs sets both the input and output separator to the given value. - - HELP OPTIONS - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. - - VERB LIST - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down filter format-values fraction grep - group-by group-like having-fields head histogram join label least-frequent - merge-fields most-frequent nest nothing put regularize remove-empty-columns - rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle - skip-trivial-records sort sort-within-records stats1 stats2 step tac tail tee - top uniq unsparsify - - FUNCTION LIST - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ - > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub - substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh - sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms - fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt - sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime - strftime_local strptime strptime_local systime is_absent is_bool is_boolean - is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty - is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv - splitkvx splitnv splitnvx - - Please use "mlr --help-function {function name}" for function-specific help. - - I/O FORMATTING - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. - - COMMENTS IN DATA - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - - FORMAT-CONVERSION KEYSTROKE-SAVERS - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - - COMPRESSED I/O - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. - - SEPARATORS - --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space - - CSV-SPECIFIC OPTIONS - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. - - DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. - - NUMERICAL FORMATTING - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. - - OTHER OPTIONS - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. - - THEN-CHAINING - Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color - - AUXILIARY COMMANDS - Miller has a few otherwise-standalone executables packaged within it. - They do not participate in any other parts of Miller. - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - - MLRRC - You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. - For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file - and that will be the default input/output format unless otherwise specified on the command line. - - The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. - Hash-style comments and blank lines are ignored. - - Sample .mlrrc: - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - How to specify location of .mlrrc: - * If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. - * Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - - See also: - https://johnkerl.org/miller/doc/customization.html - - VERBS - altkv - Usage: mlr altkv [no options] - Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. - - bar - Usage: mlr bar [options] - Replaces a numeric field with a number of asterisks, allowing for cheesy - bar plots. These align best with --opprint or --oxtab output format. - Options: - -f {a,b,c} Field names to convert to bars. - -c {character} Fill character: default '*'. - -x {character} Out-of-bounds character: default '#'. - -b {character} Blank character: default '.'. - --lo {lo} Lower-limit value for min-width bar: default '0.000000'. - --hi {hi} Upper-limit value for max-width bar: default '100.000000'. - -w {n} Bar-field width: default '40'. - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. - - bootstrap - Usage: mlr bootstrap [options] - Emits an n-sample, with replacement, of the input records. - Options: - -n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. - See also mlr sample and mlr shuffle. - - cat - Usage: mlr cat [options] - Passes input records directly to output. Most useful for format conversion. - Options: - -n Prepend field "n" to each record with record-counter starting at 1 - -g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). - -v Write a low-level record-structure dump to stderr. - -N {name} Prepend field {name} to each record with record-counter starting at 1 - - check - Usage: mlr check - Consumes records without printing any output. - Useful for doing a well-formatted check on input data. - - clean-whitespace - Usage: mlr clean-whitespace [options] - For each record, for each field in the record, whitespace-cleans the keys and - values. Whitespace-cleaning entails stripping leading and trailing whitespace, - and replacing multiple whitespace with singles. For finer-grained control, - please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, - and clean_whitespace. - - Options: - -k|--keys-only Do not touch values. - -v|--values-only Do not touch keys. - It is an error to specify -k as well as -v -- to clean keys and values, - leave off -k as well as -v. - - count - Usage: mlr count [options] - Prints number of records, optionally grouped by distinct values for specified field names. - - Options: - -g {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not interesting without -g. - -o {name} Field name for output count. Default "count". - - count-distinct - Usage: mlr count-distinct [options] - Prints number of records having distinct values for specified field names. - Same as uniq -c. - - Options: - -f {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not compatible with -u. - -o {name} Field name for output count. Default "count". - Ignored with -u. - -u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. - - count-similar - Usage: mlr count-similar [options] - Ingests all records, then emits each record augmented by a count of - the number of other records having the same group-by field values. - Options: - -g {d,e,f} Group-by-field names for counts. - -o {name} Field name for output count. Default "count". - - cut - Usage: mlr cut [options] - Passes through input records with specified fields included/excluded. - -f {a,b,c} Field names to include for cut. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. - Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) - - decimate - Usage: mlr decimate [options] - -n {count} Decimation factor; default 10 - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts - Passes through one of every n records, optionally by category. - - fill-down - Usage: mlr fill-down [options] - -f {a,b,c} Field names for fill-down - -a|--only-if-absent Field names for fill-down - If a given record has a missing value for a given field, fill that from - the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - - filter - Usage: mlr filter [options] {expression} - Prints records for which {expression} evaluates to true. - If there are multiple semicolon-delimited expressions, all of them are - evaluated and the last one is used as the filter criterion. - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -x: Prints records for which {expression} evaluates to false. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". Please also see "mlr grep" which is - useful when you don't yet know which field name(s) you're looking for. - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter - - format-values - Usage: mlr format-values [options] - Applies format strings to all field values, depending on autodetected type. - * If a field value is detected to be integer, applies integer format. - * Else, if a field value is detected to be float, applies float format. - * Else, applies string format. - - Note: this is a low-keystroke way to apply formatting to many fields. To get - finer control, please see the fmtnum function within the mlr put DSL. - - Note: this verb lets you apply arbitrary format strings, which can produce - undefined behavior and/or program crashes. See your system's "man printf". - - Options: - -i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. - -f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. - -s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. - -n Coerce field values autodetected as int to float, and then - apply the float format. - - fraction - Usage: mlr fraction [options] - For each record's value in specified fields, computes the ratio of that - value to the sum of values in that field over all input records. - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - - Note: this is internally a two-pass algorithm: on the first pass it retains - input records and accumulates sums; on the second pass it computes quotients - and emits output records. This means it produces no output until all input is read. - - Options: - -f {a,b,c} Field name(s) for fraction calculation - -g {d,e,f} Optional group-by-field name(s) for fraction counts - -p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" - -c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 - - grep - Usage: mlr grep [options] {regular expression} - Passes through records which match {regex}. - Options: - -i Use case-insensitive search. - -v Invert: pass through records which do not match the regex. - Note that "mlr filter" is more powerful, but requires you to know field names. - By contrast, "mlr grep" allows you to regex-match the entire record. It does - this by formatting each record in memory as DKVP, using command-line-specified - ORS/OFS/OPS, and matching the resulting line against the regex specified - here. In particular, the regex is not applied to the input stream: if you - have CSV with header line "x,y,z" and data line "1,2,3" then the regex will - be matched, not against either of these lines, but against the DKVP line - "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, - and this command is intended to be merely a keystroke-saver. To get all the - features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." - - group-by - Usage: mlr group-by {comma-separated field names} - Outputs records in batches having identical values at specified field names. - - group-like - Usage: mlr group-like - Outputs records in batches having identical field names. - - having-fields - Usage: mlr having-fields [options] - Conditionally passes through records depending on each record's field names. - Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} - Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) - - head - Usage: mlr head [options] - -n {count} Head count to print; default 10 - -g {a,b,c} Optional group-by-field names for head counts - Passes through the first n records, optionally by category. - Without -g, ceases consuming more input (i.e. is fast) when n - records have been read. - - histogram - Usage: mlr histogram [options] - -f {a,b,c} Value-field names for histogram counts - --lo {lo} Histogram low value - --hi {hi} Histogram high value - --nbins {n} Number of histogram bins - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. - -o {prefix} Prefix for output field name. Default: no prefix. - Just a histogram. Input values < lo or > hi are not counted. - - join - Usage: mlr join [options] - Joins records from specified left file name with records from all file names - at the end of the Miller argument list. - Functionality is essentially the same as the system "join" command, but for - record streams. - Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - File-format options default to those for the right file names on the Miller - argument list, but may be overridden for the left file as follows. Please see - the main "mlr --help" for more information on syntax for these arguments. - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - Please use "mlr --usage-separator-options" for information on specifying separators. - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information - including examples. - - label - Usage: mlr label {new1,new2,new3,...} - Given n comma-separated names, renames the first n fields of each record to - have the respective name. (Fields past the nth are left with their original - names.) Particularly useful with --inidx or --implicit-csv-header, to give - useful names to otherwise integer-indexed fields. - Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" - - least-frequent - Usage: mlr least-frequent [options] - Shows the least frequently occurring distinct values for specified field names. - The first entry is the statistical anti-mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr most-frequent". - - merge-fields - Usage: mlr merge-fields [options] - Computes univariate statistics for each input record, accumulated across - specified fields. - Options: - -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics. Requires -o. - -r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. - -c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -o {name} Output field basename for -f/-r. - -k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -F Computes integerable things (e.g. count) in floating point. - - String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - - Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". - Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. - Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. - Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". - - most-frequent - Usage: mlr most-frequent [options] - Shows the most frequently occurring distinct values for specified field names. - The first entry is the statistical mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr least-frequent". - - nest - Usage: mlr nest [options] - Explodes specified field values into separate fields/records, or reverses this. - Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} - Please use "mlr --usage-separator-options" for information on specifying separators. - - Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - - Notes: - * With --pairs, --implode doesn't make sense since the original field name has - been lost. - * The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. - * It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. - See also mlr reshape. - - nothing - Usage: mlr nothing - Drops all input records. Useful for testing, or after tee/print/etc. have - produced other output. - - put - Usage: mlr put [options] {expression} - Adds/updates specified field(s). Expressions are semicolon-separated and must - either be assignments, or evaluate to boolean. Booleans with following - statements in curly braces control whether those statements are executed; - booleans without following curly braces do nothing except side effects (e.g. - regex-captures into \1, \2, etc.). - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - - Please see also 'mlr -k' for examples using redirected output. - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put - - regularize - Usage: mlr regularize - For records seen earlier in the data stream with same field names in - a different order, outputs them with field names in the previously - encountered order. - Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 - output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 - - remove-empty-columns - Usage: mlr remove-empty-columns - Omits fields which are empty on every input row. Non-streaming. - - rename - Usage: mlr rename [options] {old1,new1,old2,new2,...} - Renames specified fields. - Options: - -r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\1" through - "\9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. - -g Do global replacement within each field name rather than - first-match replacement. - Examples: - mlr rename old_name,new_name' - mlr rename old_name_1,new_name_1,old_name_2,new_name_2' - mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" - mlr rename -r '"Date_[0-9]+",Date' Same - mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 - mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" - - reorder - Usage: mlr reorder [options] - -f {a,b,c} Field names to reorder. - -e Put specified field names at record end: default is to put - them at record start. - Examples: - mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". - mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". - - repeat - Usage: mlr repeat [options] - Copies input records to output records multiple times. - Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. - Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' - produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 - Example: - echo a=1,b=2,c=3 | mlr repeat -f b - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - Example: - echo a=1,b=2,c=3 | mlr repeat -f c - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 - - reshape - Usage: mlr reshape [options] - Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. - Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - - Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - See also mlr nest. - - sample - Usage: mlr sample [options] - Reservoir sampling (subsampling without replacement), optionally by category. - -k {count} Required: number of records to output, total, or by group if using -g. - -g {a,b,c} Optional: group-by-field names for samples. - See also mlr bootstrap and mlr shuffle. - - sec2gmt - Usage: mlr sec2gmt [options] {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT timestamp; leaves non-numbers as-is. This is nothing - more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 - is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' - Options: - -1 through -9: format the seconds using 1..9 decimal places, respectively. - - sec2gmtdate - Usage: mlr sec2gmtdate {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT year-month-day timestamp; leaves non-numbers as-is. - This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 - is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' - - seqgen - Usage: mlr seqgen [options] - Produces a sequence of counters. Discards the input record stream. Produces - output as specified by the following options: - -f {name} Field name for counters; default "i". - --start {number} Inclusive start value; default "1". - --stop {number} Inclusive stop value; default "100". - --step {number} Step value; default "1". - Start, stop, and/or step may be floating-point. Output is integer if start, - stop, and step are all integers. Step may be negative. It may not be zero - unless start == stop. - - shuffle - Usage: mlr shuffle {no options} - Outputs records randomly permuted. No output records are produced until - all input records are read. - See also mlr bootstrap and mlr sample. - - skip-trivial-records - Usage: mlr skip-trivial-records [options] - Passes through all records except: - * those with zero fields; - * those for which all fields have empty value. - - sort - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z - - sort-within-records - Usage: mlr sort-within-records [no options] - Outputs records sorted lexically ascending by keys. - - stats1 - Usage: mlr stats1 [options] - Computes univariate statistics for one or more given fields, accumulated across - the input record stream. - Options: - -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics - --fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) - --fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - -g {d,e,f} Optional group-by-field names - --gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) - --gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - -F Computes integerable things (e.g. count) in floating point. - Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - Example: mlr stats1 -a count,mode -f size - Example: mlr stats1 -a count,mode -f size -g shape - Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - Notes: - * p50 and median are synonymous. - * min and max output the same results as p0 and p100, respectively, but use - less memory. - * String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - * count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. - * When there are mode ties, the first-encountered datum wins. - - stats2 - Usage: mlr stats2 [options] - Computes bivariate statistics for one or more given field-name pairs, - accumulated across the input record stream. - -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix - -f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. - -g {e,f,g} Optional group-by-field names. - -v Print additional output for linreg-pca. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - --fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. - Only one of -s or --fit may be used. - Example: mlr stats2 -a linreg-pca -f x,y - Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape - Example: mlr stats2 -a corr -f x,y - - step - Usage: mlr step [options] - Computes values dependent on the previous record, optionally grouped - by category. - - Options: - -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - -f {a,b,c} Value-field names on which to compute statistics - -g {d,e,f} Optional group-by-field names - -F Computes integerable things (e.g. counter) in floating point. - -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". - -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - - Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average - for more information on EWMA. - - tac - Usage: mlr tac - Prints records in reverse order from the order in which they were encountered. - - tail - Usage: mlr tail [options] - -n {count} Tail count to print; default 10 - -g {a,b,c} Optional group-by-field names for tail counts - Passes through the last n records, optionally by category. - - tee - Usage: mlr tee [options] {filename} - Passes through input records (like mlr cat) but also writes to specified output - file, using output-format flags from the command line (e.g. --ocsv). See also - the "tee" keyword within mlr put, which allows data-dependent filenames. - Options: - -a: append to existing file, if any, rather than overwriting. - --no-fflush: don't call fflush() after every record. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - - top - Usage: mlr top [options] - -f {a,b,c} Value-field names for top counts. - -g {d,e,f} Optional group-by-field names for top counts. - -n {count} How many records to print per category; default 1. - -a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. - --min Print top smallest values; default is top largest values. - -F Keep top values as floats even if they look like integers. - -o {name} Field name for output indices. Default "top_idx". - Prints the n records with smallest/largest values at specified fields, - optionally by category. - - uniq - Usage: mlr uniq [options] - Prints distinct values for specified field names. With -c, same as - count-distinct. For uniq, -f is a synonym for -g. - - Options: - -g {d,e,f} Group-by-field names for uniq counts. - -c Show repeat counts in addition to unique values. - -n Show only the number of distinct values. - -o {name} Field name for output count. Default "count". - -a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. - - unsparsify - Usage: mlr unsparsify [options] - Prints records with the union of field names over all input records. - For field names absent in a given record but present in others, fills in a - value. Without -f, this verb retains all input before producing any output. - - Options: - --fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. - -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - - Example: if the input is two records, one being 'a=1,b=2' and the other - being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and - 'a=,b=3,c=4'. - - FUNCTIONS FOR FILTER/PUT - + - (class=arithmetic #args=2): Addition. - - + (class=arithmetic #args=1): Unary plus. - - - - (class=arithmetic #args=2): Subtraction. - - - (class=arithmetic #args=1): Unary minus. - - * - (class=arithmetic #args=2): Multiplication. - - / - (class=arithmetic #args=2): Division. - - // - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). - - .+ - (class=arithmetic #args=2): Addition, with integer-to-integer overflow - - .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. - - .- - (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - - .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. - - .* - (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. - - ./ - (class=arithmetic #args=2): Division, with integer-to-integer overflow. - - .// - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. - - % - (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). - - ** - (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix - operator. - - | - (class=arithmetic #args=2): Bitwise OR. - - ^ - (class=arithmetic #args=2): Bitwise XOR. - - & - (class=arithmetic #args=2): Bitwise AND. - - ~ - (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the - regex-match operator: try '$y = ~$x'. - - << - (class=arithmetic #args=2): Bitwise left-shift. - - >> - (class=arithmetic #args=2): Bitwise right-shift. - - bitcount - (class=arithmetic #args=1): Count of 1-bits - - == - (class=boolean #args=2): String/numeric equality. Mixing number and string - results in string compare. - - != - (class=boolean #args=2): String/numeric inequality. Mixing number and string - results in string compare. - - =~ - (class=boolean #args=2): String (left-hand side) matches regex (right-hand - side), e.g. '$name =~ "^a.*b$"'. - - !=~ - (class=boolean #args=2): String (left-hand side) does not match regex - (right-hand side), e.g. '$name !=~ "^a.*b$"'. - - > - (class=boolean #args=2): String/numeric greater-than. Mixing number and string - results in string compare. - - >= - (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number - and string results in string compare. - - < - (class=boolean #args=2): String/numeric less-than. Mixing number and string - results in string compare. - - <= - (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number - and string results in string compare. - - && - (class=boolean #args=2): Logical AND. - - || - (class=boolean #args=2): Logical OR. - - ^^ - (class=boolean #args=2): Logical XOR. - - ! - (class=boolean #args=1): Logical negation. - - ? : - (class=boolean #args=3): Ternary operator. - - . - (class=string #args=2): String concatenation. - - gsub - (class=string #args=3): Example: '$name=gsub($name, "old", "new")' - (replace all). - - regextract - (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' - . - - regextract_or_else - (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' - . - - strlen - (class=string #args=1): String length. - - sub - (class=string #args=3): Example: '$name=sub($name, "old", "new")' - (replace once). - - ssub - (class=string #args=3): Like sub but does no regexing. No characters are special. - - substr - (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n - inclusive. Negative indices -len .. -1 alias to 0 .. len-1. - - tolower - (class=string #args=1): Convert string to lowercase. - - toupper - (class=string #args=1): Convert string to uppercase. - - truncate - (class=string #args=2): Truncates string first argument to max length of int second argument. - - capitalize - (class=string #args=1): Convert string's first character to uppercase. - - lstrip - (class=string #args=1): Strip leading whitespace from string. - - rstrip - (class=string #args=1): Strip trailing whitespace from string. - - strip - (class=string #args=1): Strip leading and trailing whitespace from string. - - collapse_whitespace - (class=string #args=1): Strip repeated whitespace from string. - - clean_whitespace - (class=string #args=1): Same as collapse_whitespace and strip. - - system - (class=string #args=1): Run command string, yielding its stdout minus final carriage return. - - abs - (class=math #args=1): Absolute value. - - acos - (class=math #args=1): Inverse trigonometric cosine. - - acosh - (class=math #args=1): Inverse hyperbolic cosine. - - asin - (class=math #args=1): Inverse trigonometric sine. - - asinh - (class=math #args=1): Inverse hyperbolic sine. - - atan - (class=math #args=1): One-argument arctangent. - - atan2 - (class=math #args=2): Two-argument arctangent. - - atanh - (class=math #args=1): Inverse hyperbolic tangent. - - cbrt - (class=math #args=1): Cube root. - - ceil - (class=math #args=1): Ceiling: nearest integer at or above. - - cos - (class=math #args=1): Trigonometric cosine. - - cosh - (class=math #args=1): Hyperbolic cosine. - - erf - (class=math #args=1): Error function. - - erfc - (class=math #args=1): Complementary error function. - - exp - (class=math #args=1): Exponential function e**x. - - expm1 - (class=math #args=1): e**x - 1. - - floor - (class=math #args=1): Floor: nearest integer at or below. - - invqnorm - (class=math #args=1): Inverse of normal cumulative distribution - function. Note that invqorm(urand()) is normally distributed. - - log - (class=math #args=1): Natural (base-e) logarithm. - - log10 - (class=math #args=1): Base-10 logarithm. - - log1p - (class=math #args=1): log(1-x). - - logifit - (class=math #args=3): Given m and b from logistic regression, compute - fit: $yhat=logifit($x,$m,$b). - - madd - (class=math #args=3): a + b mod m (integers) - - max - (class=math variadic): max of n numbers; null loses - - mexp - (class=math #args=3): a ** b mod m (integers) - - min - (class=math variadic): Min of n numbers; null loses - - mmul - (class=math #args=3): a * b mod m (integers) - - msub - (class=math #args=3): a - b mod m (integers) - - pow - (class=math #args=2): Exponentiation; same as **. - - qnorm - (class=math #args=1): Normal cumulative distribution function. - - round - (class=math #args=1): Round to nearest integer. - - roundm - (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is - the same as round($x/$m)*$m - - sgn - (class=math #args=1): +1 for positive input, 0 for zero input, -1 for - negative input. - - sin - (class=math #args=1): Trigonometric sine. - - sinh - (class=math #args=1): Hyperbolic sine. - - sqrt - (class=math #args=1): Square root. - - tan - (class=math #args=1): Trigonometric tangent. - - tanh - (class=math #args=1): Hyperbolic tangent. - - urand - (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. - Int-valued example: '$n=floor(20+urand()*11)'. - - urandrange - (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). - - urand32 - (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 - inclusive. - - urandint - (class=math #args=2): Integer uniformly distributed between inclusive - integer endpoints. - - dhms2fsec - (class=time #args=1): Recovers floating-point seconds as in - dhms2fsec("5d18h53m20.250000s") = 500000.250000 - - dhms2sec - (class=time #args=1): Recovers integer seconds as in - dhms2sec("5d18h53m20s") = 500000 - - fsec2dhms - (class=time #args=1): Formats floating-point seconds as in - fsec2dhms(500000.25) = "5d18h53m20.250000s" - - fsec2hms - (class=time #args=1): Formats floating-point seconds as in - fsec2hms(5000.25) = "01:23:20.250000" - - gmt2sec - (class=time #args=1): Parses GMT timestamp as integer seconds since - the epoch. - - localtime2sec - (class=time #args=1): Parses local timestamp as integer seconds since - the epoch. Consults $TZ environment variable. - - hms2fsec - (class=time #args=1): Recovers floating-point seconds as in - hms2fsec("01:23:20.250000") = 5000.250000 - - hms2sec - (class=time #args=1): Recovers integer seconds as in - hms2sec("01:23:20") = 5000 - - sec2dhms - (class=time #args=1): Formats integer seconds as in sec2dhms(500000) - = "5d18h53m20s" - - sec2gmt - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". - Leaves non-numbers as-is. - - sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n - decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Leaves non-numbers as-is. - - sec2gmtdate - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". - Leaves non-numbers as-is. - - sec2localtime - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n - decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localdate - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2hms - (class=time #args=1): Formats integer seconds as in - sec2hms(5000) = "01:23:20" - - strftime - (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". - Format strings are as in the C library (please see "man strftime" on your system), - with the Miller-specific addition of "%1S" through "%9S" which format the seconds - with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) - See also strftime_local. - - strftime_local - (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. - - strptime - (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, - e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, - and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. - See also strptime_local. - - strptime_local - (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. - - systime - (class=time #args=0): Floating-point seconds since the epoch, - e.g. 1440768801.748936. - - is_absent - (class=typing #args=1): False if field is present in input, true otherwise - - is_bool - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. - - is_boolean - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. - - is_empty - (class=typing #args=1): True if field is present in input with empty string value, false otherwise. - - is_empty_map - (class=typing #args=1): True if argument is a map which is empty. - - is_float - (class=typing #args=1): True if field is present with value inferred to be float - - is_int - (class=typing #args=1): True if field is present with value inferred to be int - - is_map - (class=typing #args=1): True if argument is a map. - - is_nonempty_map - (class=typing #args=1): True if argument is a map which is non-empty. - - is_not_empty - (class=typing #args=1): False if field is present in input with empty value, true otherwise - - is_not_map - (class=typing #args=1): True if argument is not a map. - - is_not_null - (class=typing #args=1): False if argument is null (empty or absent), true otherwise. - - is_null - (class=typing #args=1): True if argument is null (empty or absent), false otherwise. - - is_numeric - (class=typing #args=1): True if field is present with value inferred to be int or float - - is_present - (class=typing #args=1): True if field is present in input, false otherwise. - - is_string - (class=typing #args=1): True if field is present with string (including empty-string) value - - asserting_absent - (class=typing #args=1): Returns argument if it is absent in the input data, else - throws an error. - - asserting_bool - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_boolean - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_empty - (class=typing #args=1): Returns argument if it is present in input with empty value, - else throws an error. - - asserting_empty_map - (class=typing #args=1): Returns argument if it is a map with empty value, else - throws an error. - - asserting_float - (class=typing #args=1): Returns argument if it is present with float value, else - throws an error. - - asserting_int - (class=typing #args=1): Returns argument if it is present with int value, else - throws an error. - - asserting_map - (class=typing #args=1): Returns argument if it is a map, else throws an error. - - asserting_nonempty_map - (class=typing #args=1): Returns argument if it is a non-empty map, else throws - an error. - - asserting_not_empty - (class=typing #args=1): Returns argument if it is present in input with non-empty - value, else throws an error. - - asserting_not_map - (class=typing #args=1): Returns argument if it is not a map, else throws an error. - - asserting_not_null - (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), - else throws an error. - - asserting_null - (class=typing #args=1): Returns argument if it is null (empty or absent), else throws - an error. - - asserting_numeric - (class=typing #args=1): Returns argument if it is present with int or float value, - else throws an error. - - asserting_present - (class=typing #args=1): Returns argument if it is present in input, else throws - an error. - - asserting_string - (class=typing #args=1): Returns argument if it is present with string (including - empty-string) value, else throws an error. - - boolean - (class=conversion #args=1): Convert int/float/bool/string to boolean. - - float - (class=conversion #args=1): Convert int/float/bool/string to float. - - fmtnum - (class=conversion #args=2): Convert int/float/bool to string using - printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers - are all long long or double. If you use formats like %d or %f, behavior is undefined. - - hexfmt - (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". - - int - (class=conversion #args=1): Convert int/float/bool/string to int. - - string - (class=conversion #args=1): Convert int/float/bool/string to string. - - typeof - (class=conversion #args=1): Convert argument to type of argument (e.g. - MT_STRING). For debug. - - depth - (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. - - haskey - (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or - 'haskey(mymap, mykey)'. Error if 1st argument is not a map. - - joink - (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. - - joinkv - (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' - - joinv - (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. - - leafcount - (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, - same as length. - - length - (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. - - mapdiff - (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. - With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. - - mapexcept - (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. - E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. - - mapselect - (class=maps variadic): Returns a map with only keys from remaining arguments set. - E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. - - mapsum - (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with - key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. - - splitkv - (class=maps #args=3): Splits string by separators into map with type inference. - E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. - - splitkvx - (class=maps #args=3): Splits string by separators into map without type inference (keys and - values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives - '{"a" : "1", "b" : "2", "c" : "3"}'. - - splitnv - (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. - E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. - - splitnvx - (class=maps #args=2): Splits string by separator into integer-indexed map without type - inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. - - KEYWORDS FOR PUT AND FILTER - all - all: used in "emit", "emitp", and "unset" as a synonym for @* - - begin - begin: defines a block of statements to be executed before input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'begin { @count = 0 }' - - bool - bool: declares a boolean local variable in the current curly-braced scope. - Type-checking happens at assignment: 'bool b = 1' is an error. - - break - break: causes execution to continue after the body of the current - for/while/do-while loop. - - call - call: used for invoking a user-defined subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - continue - continue: causes execution to skip the remaining statements in the body of - the current for/while/do-while loop. For-loop increments are still applied. - - do - do: with "while", introduces a do-while loop. The body statements must be wrapped - in curly braces. - - dump - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - - edump - edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' - - elif - elif: the way Miller spells "else if". The body statements must be wrapped - in curly braces. - - else - else: terminates an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - emit - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - emitf - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - - emitp - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - end - end: defines a block of statements to be executed after input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' - - eprint - eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' - - eprintn - eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' - - false - false: the boolean literal value. - - filter - filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' - - float - float: declares a floating-point local variable in the current curly-braced scope. - Type-checking happens at assignment: 'float x = 0' is an error. - - for - for: defines a for-loop using one of three styles. The body statements must - be wrapped in curly braces. - For-loop over stream record: - Example: 'for (k, v in $*) { ... }' - For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' - - func - func: used for defining a user-defined function. - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' - - if - if: starts an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - in - in: used in for-loops over stream records or out-of-stream variables. - - int - int: declares an integer local variable in the current curly-braced scope. - Type-checking happens at assignment: 'int x = 0.0' is an error. - - map - map: declares an map-valued local variable in the current curly-braced scope. - Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is - always OK. map b = a is OK or not depending on whether a is a map. - - num - num: declares an int/float local variable in the current curly-braced scope. - Type-checking happens at assignment: 'num b = true' is an error. - - print - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - printn - printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' - - return - return: specifies the return value from a user-defined function. - Omitted return statements (including via if-branches) result in an absent-null - return value, which in turns results in a skipped assignment to an LHS. - - stderr - stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. - - stdout - stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. - - str - str: declares a string local variable in the current curly-braced scope. - Type-checking happens at assignment. - - subr - subr: used for defining a subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - tee - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - - true - true: the boolean literal value. - - unset - unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' - - var - var: declares an untyped local variable in the current curly-braced scope. - Examples: 'var a=1', 'var xyz=""' - - while - while: introduces a while loop, or with "do", introduces a do-while loop. - The body statements must be wrapped in curly braces. - - ENV - ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' - - FILENAME - FILENAME: evaluates to the name of the current file being processed. - - FILENUM - FILENUM: evaluates to the number of the current file being processed, - starting with 1. - - FNR - FNR: evaluates to the number of the current record within the current file - being processed, starting with 1. Resets at the start of each file. - - IFS - IFS: evaluates to the input field separator from the command line. - - IPS - IPS: evaluates to the input pair separator from the command line. - - IRS - IRS: evaluates to the input record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - M_E - M_E: the mathematical constant e. - - M_PI - M_PI: the mathematical constant pi. - - NF - NF: evaluates to the number of fields in the current record. - - NR - NR: evaluates to the number of the current record over all files - being processed, starting with 1. Does not reset at the start of each file. - - OFS - OFS: evaluates to the output field separator from the command line. - - OPS - OPS: evaluates to the output pair separator from the command line. - - ORS - ORS: evaluates to the output record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - AUTHOR - Miller is written by John Kerl . - - This manual page has been composed from Miller's help output by Eric - MSP Veith . - - SEE ALSO - awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and - MIME Type for Comma-Separated Values (CSV) Files, the miller website - http://johnkerl.org/miller/doc - - - - 2021-03-22 MILLER(1) diff --git a/docs/manpage.rst.in b/docs/manpage.rst.in deleted file mode 100644 index 672ebbc88..000000000 --- a/docs/manpage.rst.in +++ /dev/null @@ -1,6 +0,0 @@ -Manpage -================================================================ - -This is simply a copy of what you should see on running **man mlr** at a command prompt, once Miller is installed on your system. - -POKI_INCLUDE_ESCAPED(manpage.txt)HERE diff --git a/docs/manpage.txt b/docs/manpage.txt deleted file mode 100644 index 00b44fad4..000000000 --- a/docs/manpage.txt +++ /dev/null @@ -1,2371 +0,0 @@ -MILLER(1) MILLER(1) - - - -NAME - miller - like awk, sed, cut, join, and sort for name-indexed data such - as CSV and tabular JSON. - -SYNOPSIS - Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or - more file names} - - -DESCRIPTION - Miller operates on key-value-pair data while the familiar Unix tools - operate on integer-indexed fields: if the natural data structure for - the latter is the array, then Miller's natural data structure is the - insertion-ordered hash map. This encompasses a variety of data - formats, including but not limited to the familiar CSV, TSV, and JSON. - (Miller can handle positionally-indexed data as a special case.) This - manpage documents Miller v5.10.1. - -EXAMPLES - COMMAND-LINE SYNTAX - mlr --csv cut -f hostname,uptime mydata.csv - mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv - mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - mlr stats2 -a linreg-pca -f u,v -g shape data/* - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' - mlr --from infile.dat put -f analyze.mlr - mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - DATA FORMATS - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - -OPTIONS - In the following option flags, the version with "i" designates the - input stream, "o" the output stream, and the version without prefix - sets the option for both input and output stream. For example: --irs - sets the input record separator, --ors the output record separator, and - --rs sets both the input and output separator to the given value. - - HELP OPTIONS - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. - - VERB LIST - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down filter format-values fraction grep - group-by group-like having-fields head histogram join label least-frequent - merge-fields most-frequent nest nothing put regularize remove-empty-columns - rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle - skip-trivial-records sort sort-within-records stats1 stats2 step tac tail tee - top uniq unsparsify - - FUNCTION LIST - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ - > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub - substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh - sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms - fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt - sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime - strftime_local strptime strptime_local systime is_absent is_bool is_boolean - is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty - is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv - splitkvx splitnv splitnvx - - Please use "mlr --help-function {function name}" for function-specific help. - - I/O FORMATTING - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. - - COMMENTS IN DATA - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - - FORMAT-CONVERSION KEYSTROKE-SAVERS - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - - COMPRESSED I/O - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. - - SEPARATORS - --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space - - CSV-SPECIFIC OPTIONS - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. - - DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. - - NUMERICAL FORMATTING - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. - - OTHER OPTIONS - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. - - THEN-CHAINING - Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color - - AUXILIARY COMMANDS - Miller has a few otherwise-standalone executables packaged within it. - They do not participate in any other parts of Miller. - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - -MLRRC - You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. - For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file - and that will be the default input/output format unless otherwise specified on the command line. - - The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. - Hash-style comments and blank lines are ignored. - - Sample .mlrrc: - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - How to specify location of .mlrrc: - * If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. - * Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - - See also: - https://johnkerl.org/miller/doc/customization.html - -VERBS - altkv - Usage: mlr altkv [no options] - Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. - - bar - Usage: mlr bar [options] - Replaces a numeric field with a number of asterisks, allowing for cheesy - bar plots. These align best with --opprint or --oxtab output format. - Options: - -f {a,b,c} Field names to convert to bars. - -c {character} Fill character: default '*'. - -x {character} Out-of-bounds character: default '#'. - -b {character} Blank character: default '.'. - --lo {lo} Lower-limit value for min-width bar: default '0.000000'. - --hi {hi} Upper-limit value for max-width bar: default '100.000000'. - -w {n} Bar-field width: default '40'. - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. - - bootstrap - Usage: mlr bootstrap [options] - Emits an n-sample, with replacement, of the input records. - Options: - -n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. - See also mlr sample and mlr shuffle. - - cat - Usage: mlr cat [options] - Passes input records directly to output. Most useful for format conversion. - Options: - -n Prepend field "n" to each record with record-counter starting at 1 - -g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). - -v Write a low-level record-structure dump to stderr. - -N {name} Prepend field {name} to each record with record-counter starting at 1 - - check - Usage: mlr check - Consumes records without printing any output. - Useful for doing a well-formatted check on input data. - - clean-whitespace - Usage: mlr clean-whitespace [options] - For each record, for each field in the record, whitespace-cleans the keys and - values. Whitespace-cleaning entails stripping leading and trailing whitespace, - and replacing multiple whitespace with singles. For finer-grained control, - please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, - and clean_whitespace. - - Options: - -k|--keys-only Do not touch values. - -v|--values-only Do not touch keys. - It is an error to specify -k as well as -v -- to clean keys and values, - leave off -k as well as -v. - - count - Usage: mlr count [options] - Prints number of records, optionally grouped by distinct values for specified field names. - - Options: - -g {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not interesting without -g. - -o {name} Field name for output count. Default "count". - - count-distinct - Usage: mlr count-distinct [options] - Prints number of records having distinct values for specified field names. - Same as uniq -c. - - Options: - -f {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not compatible with -u. - -o {name} Field name for output count. Default "count". - Ignored with -u. - -u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. - - count-similar - Usage: mlr count-similar [options] - Ingests all records, then emits each record augmented by a count of - the number of other records having the same group-by field values. - Options: - -g {d,e,f} Group-by-field names for counts. - -o {name} Field name for output count. Default "count". - - cut - Usage: mlr cut [options] - Passes through input records with specified fields included/excluded. - -f {a,b,c} Field names to include for cut. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. - Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) - - decimate - Usage: mlr decimate [options] - -n {count} Decimation factor; default 10 - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts - Passes through one of every n records, optionally by category. - - fill-down - Usage: mlr fill-down [options] - -f {a,b,c} Field names for fill-down - -a|--only-if-absent Field names for fill-down - If a given record has a missing value for a given field, fill that from - the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - - filter - Usage: mlr filter [options] {expression} - Prints records for which {expression} evaluates to true. - If there are multiple semicolon-delimited expressions, all of them are - evaluated and the last one is used as the filter criterion. - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -x: Prints records for which {expression} evaluates to false. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". Please also see "mlr grep" which is - useful when you don't yet know which field name(s) you're looking for. - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter - - format-values - Usage: mlr format-values [options] - Applies format strings to all field values, depending on autodetected type. - * If a field value is detected to be integer, applies integer format. - * Else, if a field value is detected to be float, applies float format. - * Else, applies string format. - - Note: this is a low-keystroke way to apply formatting to many fields. To get - finer control, please see the fmtnum function within the mlr put DSL. - - Note: this verb lets you apply arbitrary format strings, which can produce - undefined behavior and/or program crashes. See your system's "man printf". - - Options: - -i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. - -f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. - -s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. - -n Coerce field values autodetected as int to float, and then - apply the float format. - - fraction - Usage: mlr fraction [options] - For each record's value in specified fields, computes the ratio of that - value to the sum of values in that field over all input records. - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - - Note: this is internally a two-pass algorithm: on the first pass it retains - input records and accumulates sums; on the second pass it computes quotients - and emits output records. This means it produces no output until all input is read. - - Options: - -f {a,b,c} Field name(s) for fraction calculation - -g {d,e,f} Optional group-by-field name(s) for fraction counts - -p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" - -c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 - - grep - Usage: mlr grep [options] {regular expression} - Passes through records which match {regex}. - Options: - -i Use case-insensitive search. - -v Invert: pass through records which do not match the regex. - Note that "mlr filter" is more powerful, but requires you to know field names. - By contrast, "mlr grep" allows you to regex-match the entire record. It does - this by formatting each record in memory as DKVP, using command-line-specified - ORS/OFS/OPS, and matching the resulting line against the regex specified - here. In particular, the regex is not applied to the input stream: if you - have CSV with header line "x,y,z" and data line "1,2,3" then the regex will - be matched, not against either of these lines, but against the DKVP line - "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, - and this command is intended to be merely a keystroke-saver. To get all the - features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." - - group-by - Usage: mlr group-by {comma-separated field names} - Outputs records in batches having identical values at specified field names. - - group-like - Usage: mlr group-like - Outputs records in batches having identical field names. - - having-fields - Usage: mlr having-fields [options] - Conditionally passes through records depending on each record's field names. - Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} - Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) - - head - Usage: mlr head [options] - -n {count} Head count to print; default 10 - -g {a,b,c} Optional group-by-field names for head counts - Passes through the first n records, optionally by category. - Without -g, ceases consuming more input (i.e. is fast) when n - records have been read. - - histogram - Usage: mlr histogram [options] - -f {a,b,c} Value-field names for histogram counts - --lo {lo} Histogram low value - --hi {hi} Histogram high value - --nbins {n} Number of histogram bins - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. - -o {prefix} Prefix for output field name. Default: no prefix. - Just a histogram. Input values < lo or > hi are not counted. - - join - Usage: mlr join [options] - Joins records from specified left file name with records from all file names - at the end of the Miller argument list. - Functionality is essentially the same as the system "join" command, but for - record streams. - Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - File-format options default to those for the right file names on the Miller - argument list, but may be overridden for the left file as follows. Please see - the main "mlr --help" for more information on syntax for these arguments. - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - Please use "mlr --usage-separator-options" for information on specifying separators. - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information - including examples. - - label - Usage: mlr label {new1,new2,new3,...} - Given n comma-separated names, renames the first n fields of each record to - have the respective name. (Fields past the nth are left with their original - names.) Particularly useful with --inidx or --implicit-csv-header, to give - useful names to otherwise integer-indexed fields. - Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" - - least-frequent - Usage: mlr least-frequent [options] - Shows the least frequently occurring distinct values for specified field names. - The first entry is the statistical anti-mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr most-frequent". - - merge-fields - Usage: mlr merge-fields [options] - Computes univariate statistics for each input record, accumulated across - specified fields. - Options: - -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics. Requires -o. - -r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. - -c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -o {name} Output field basename for -f/-r. - -k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -F Computes integerable things (e.g. count) in floating point. - - String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - - Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". - Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. - Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. - Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". - - most-frequent - Usage: mlr most-frequent [options] - Shows the most frequently occurring distinct values for specified field names. - The first entry is the statistical mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr least-frequent". - - nest - Usage: mlr nest [options] - Explodes specified field values into separate fields/records, or reverses this. - Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} - Please use "mlr --usage-separator-options" for information on specifying separators. - - Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - - Notes: - * With --pairs, --implode doesn't make sense since the original field name has - been lost. - * The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. - * It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. - See also mlr reshape. - - nothing - Usage: mlr nothing - Drops all input records. Useful for testing, or after tee/print/etc. have - produced other output. - - put - Usage: mlr put [options] {expression} - Adds/updates specified field(s). Expressions are semicolon-separated and must - either be assignments, or evaluate to boolean. Booleans with following - statements in curly braces control whether those statements are executed; - booleans without following curly braces do nothing except side effects (e.g. - regex-captures into \1, \2, etc.). - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - - Please see also 'mlr -k' for examples using redirected output. - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put - - regularize - Usage: mlr regularize - For records seen earlier in the data stream with same field names in - a different order, outputs them with field names in the previously - encountered order. - Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 - output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 - - remove-empty-columns - Usage: mlr remove-empty-columns - Omits fields which are empty on every input row. Non-streaming. - - rename - Usage: mlr rename [options] {old1,new1,old2,new2,...} - Renames specified fields. - Options: - -r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\1" through - "\9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. - -g Do global replacement within each field name rather than - first-match replacement. - Examples: - mlr rename old_name,new_name' - mlr rename old_name_1,new_name_1,old_name_2,new_name_2' - mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" - mlr rename -r '"Date_[0-9]+",Date' Same - mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 - mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" - - reorder - Usage: mlr reorder [options] - -f {a,b,c} Field names to reorder. - -e Put specified field names at record end: default is to put - them at record start. - Examples: - mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". - mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". - - repeat - Usage: mlr repeat [options] - Copies input records to output records multiple times. - Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. - Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' - produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 - Example: - echo a=1,b=2,c=3 | mlr repeat -f b - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - Example: - echo a=1,b=2,c=3 | mlr repeat -f c - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 - - reshape - Usage: mlr reshape [options] - Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. - Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - - Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - See also mlr nest. - - sample - Usage: mlr sample [options] - Reservoir sampling (subsampling without replacement), optionally by category. - -k {count} Required: number of records to output, total, or by group if using -g. - -g {a,b,c} Optional: group-by-field names for samples. - See also mlr bootstrap and mlr shuffle. - - sec2gmt - Usage: mlr sec2gmt [options] {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT timestamp; leaves non-numbers as-is. This is nothing - more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 - is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' - Options: - -1 through -9: format the seconds using 1..9 decimal places, respectively. - - sec2gmtdate - Usage: mlr sec2gmtdate {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT year-month-day timestamp; leaves non-numbers as-is. - This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 - is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' - - seqgen - Usage: mlr seqgen [options] - Produces a sequence of counters. Discards the input record stream. Produces - output as specified by the following options: - -f {name} Field name for counters; default "i". - --start {number} Inclusive start value; default "1". - --stop {number} Inclusive stop value; default "100". - --step {number} Step value; default "1". - Start, stop, and/or step may be floating-point. Output is integer if start, - stop, and step are all integers. Step may be negative. It may not be zero - unless start == stop. - - shuffle - Usage: mlr shuffle {no options} - Outputs records randomly permuted. No output records are produced until - all input records are read. - See also mlr bootstrap and mlr sample. - - skip-trivial-records - Usage: mlr skip-trivial-records [options] - Passes through all records except: - * those with zero fields; - * those for which all fields have empty value. - - sort - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z - - sort-within-records - Usage: mlr sort-within-records [no options] - Outputs records sorted lexically ascending by keys. - - stats1 - Usage: mlr stats1 [options] - Computes univariate statistics for one or more given fields, accumulated across - the input record stream. - Options: - -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics - --fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) - --fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - -g {d,e,f} Optional group-by-field names - --gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) - --gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - -F Computes integerable things (e.g. count) in floating point. - Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - Example: mlr stats1 -a count,mode -f size - Example: mlr stats1 -a count,mode -f size -g shape - Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - Notes: - * p50 and median are synonymous. - * min and max output the same results as p0 and p100, respectively, but use - less memory. - * String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - * count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. - * When there are mode ties, the first-encountered datum wins. - - stats2 - Usage: mlr stats2 [options] - Computes bivariate statistics for one or more given field-name pairs, - accumulated across the input record stream. - -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix - -f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. - -g {e,f,g} Optional group-by-field names. - -v Print additional output for linreg-pca. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - --fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. - Only one of -s or --fit may be used. - Example: mlr stats2 -a linreg-pca -f x,y - Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape - Example: mlr stats2 -a corr -f x,y - - step - Usage: mlr step [options] - Computes values dependent on the previous record, optionally grouped - by category. - - Options: - -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - -f {a,b,c} Value-field names on which to compute statistics - -g {d,e,f} Optional group-by-field names - -F Computes integerable things (e.g. counter) in floating point. - -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". - -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - - Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average - for more information on EWMA. - - tac - Usage: mlr tac - Prints records in reverse order from the order in which they were encountered. - - tail - Usage: mlr tail [options] - -n {count} Tail count to print; default 10 - -g {a,b,c} Optional group-by-field names for tail counts - Passes through the last n records, optionally by category. - - tee - Usage: mlr tee [options] {filename} - Passes through input records (like mlr cat) but also writes to specified output - file, using output-format flags from the command line (e.g. --ocsv). See also - the "tee" keyword within mlr put, which allows data-dependent filenames. - Options: - -a: append to existing file, if any, rather than overwriting. - --no-fflush: don't call fflush() after every record. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - - top - Usage: mlr top [options] - -f {a,b,c} Value-field names for top counts. - -g {d,e,f} Optional group-by-field names for top counts. - -n {count} How many records to print per category; default 1. - -a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. - --min Print top smallest values; default is top largest values. - -F Keep top values as floats even if they look like integers. - -o {name} Field name for output indices. Default "top_idx". - Prints the n records with smallest/largest values at specified fields, - optionally by category. - - uniq - Usage: mlr uniq [options] - Prints distinct values for specified field names. With -c, same as - count-distinct. For uniq, -f is a synonym for -g. - - Options: - -g {d,e,f} Group-by-field names for uniq counts. - -c Show repeat counts in addition to unique values. - -n Show only the number of distinct values. - -o {name} Field name for output count. Default "count". - -a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. - - unsparsify - Usage: mlr unsparsify [options] - Prints records with the union of field names over all input records. - For field names absent in a given record but present in others, fills in a - value. Without -f, this verb retains all input before producing any output. - - Options: - --fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. - -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - - Example: if the input is two records, one being 'a=1,b=2' and the other - being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and - 'a=,b=3,c=4'. - -FUNCTIONS FOR FILTER/PUT - + - (class=arithmetic #args=2): Addition. - - + (class=arithmetic #args=1): Unary plus. - - - - (class=arithmetic #args=2): Subtraction. - - - (class=arithmetic #args=1): Unary minus. - - * - (class=arithmetic #args=2): Multiplication. - - / - (class=arithmetic #args=2): Division. - - // - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). - - .+ - (class=arithmetic #args=2): Addition, with integer-to-integer overflow - - .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. - - .- - (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - - .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. - - .* - (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. - - ./ - (class=arithmetic #args=2): Division, with integer-to-integer overflow. - - .// - (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. - - % - (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). - - ** - (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix - operator. - - | - (class=arithmetic #args=2): Bitwise OR. - - ^ - (class=arithmetic #args=2): Bitwise XOR. - - & - (class=arithmetic #args=2): Bitwise AND. - - ~ - (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the - regex-match operator: try '$y = ~$x'. - - << - (class=arithmetic #args=2): Bitwise left-shift. - - >> - (class=arithmetic #args=2): Bitwise right-shift. - - bitcount - (class=arithmetic #args=1): Count of 1-bits - - == - (class=boolean #args=2): String/numeric equality. Mixing number and string - results in string compare. - - != - (class=boolean #args=2): String/numeric inequality. Mixing number and string - results in string compare. - - =~ - (class=boolean #args=2): String (left-hand side) matches regex (right-hand - side), e.g. '$name =~ "^a.*b$"'. - - !=~ - (class=boolean #args=2): String (left-hand side) does not match regex - (right-hand side), e.g. '$name !=~ "^a.*b$"'. - - > - (class=boolean #args=2): String/numeric greater-than. Mixing number and string - results in string compare. - - >= - (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number - and string results in string compare. - - < - (class=boolean #args=2): String/numeric less-than. Mixing number and string - results in string compare. - - <= - (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number - and string results in string compare. - - && - (class=boolean #args=2): Logical AND. - - || - (class=boolean #args=2): Logical OR. - - ^^ - (class=boolean #args=2): Logical XOR. - - ! - (class=boolean #args=1): Logical negation. - - ? : - (class=boolean #args=3): Ternary operator. - - . - (class=string #args=2): String concatenation. - - gsub - (class=string #args=3): Example: '$name=gsub($name, "old", "new")' - (replace all). - - regextract - (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' - . - - regextract_or_else - (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' - . - - strlen - (class=string #args=1): String length. - - sub - (class=string #args=3): Example: '$name=sub($name, "old", "new")' - (replace once). - - ssub - (class=string #args=3): Like sub but does no regexing. No characters are special. - - substr - (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n - inclusive. Negative indices -len .. -1 alias to 0 .. len-1. - - tolower - (class=string #args=1): Convert string to lowercase. - - toupper - (class=string #args=1): Convert string to uppercase. - - truncate - (class=string #args=2): Truncates string first argument to max length of int second argument. - - capitalize - (class=string #args=1): Convert string's first character to uppercase. - - lstrip - (class=string #args=1): Strip leading whitespace from string. - - rstrip - (class=string #args=1): Strip trailing whitespace from string. - - strip - (class=string #args=1): Strip leading and trailing whitespace from string. - - collapse_whitespace - (class=string #args=1): Strip repeated whitespace from string. - - clean_whitespace - (class=string #args=1): Same as collapse_whitespace and strip. - - system - (class=string #args=1): Run command string, yielding its stdout minus final carriage return. - - abs - (class=math #args=1): Absolute value. - - acos - (class=math #args=1): Inverse trigonometric cosine. - - acosh - (class=math #args=1): Inverse hyperbolic cosine. - - asin - (class=math #args=1): Inverse trigonometric sine. - - asinh - (class=math #args=1): Inverse hyperbolic sine. - - atan - (class=math #args=1): One-argument arctangent. - - atan2 - (class=math #args=2): Two-argument arctangent. - - atanh - (class=math #args=1): Inverse hyperbolic tangent. - - cbrt - (class=math #args=1): Cube root. - - ceil - (class=math #args=1): Ceiling: nearest integer at or above. - - cos - (class=math #args=1): Trigonometric cosine. - - cosh - (class=math #args=1): Hyperbolic cosine. - - erf - (class=math #args=1): Error function. - - erfc - (class=math #args=1): Complementary error function. - - exp - (class=math #args=1): Exponential function e**x. - - expm1 - (class=math #args=1): e**x - 1. - - floor - (class=math #args=1): Floor: nearest integer at or below. - - invqnorm - (class=math #args=1): Inverse of normal cumulative distribution - function. Note that invqorm(urand()) is normally distributed. - - log - (class=math #args=1): Natural (base-e) logarithm. - - log10 - (class=math #args=1): Base-10 logarithm. - - log1p - (class=math #args=1): log(1-x). - - logifit - (class=math #args=3): Given m and b from logistic regression, compute - fit: $yhat=logifit($x,$m,$b). - - madd - (class=math #args=3): a + b mod m (integers) - - max - (class=math variadic): max of n numbers; null loses - - mexp - (class=math #args=3): a ** b mod m (integers) - - min - (class=math variadic): Min of n numbers; null loses - - mmul - (class=math #args=3): a * b mod m (integers) - - msub - (class=math #args=3): a - b mod m (integers) - - pow - (class=math #args=2): Exponentiation; same as **. - - qnorm - (class=math #args=1): Normal cumulative distribution function. - - round - (class=math #args=1): Round to nearest integer. - - roundm - (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is - the same as round($x/$m)*$m - - sgn - (class=math #args=1): +1 for positive input, 0 for zero input, -1 for - negative input. - - sin - (class=math #args=1): Trigonometric sine. - - sinh - (class=math #args=1): Hyperbolic sine. - - sqrt - (class=math #args=1): Square root. - - tan - (class=math #args=1): Trigonometric tangent. - - tanh - (class=math #args=1): Hyperbolic tangent. - - urand - (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. - Int-valued example: '$n=floor(20+urand()*11)'. - - urandrange - (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). - - urand32 - (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 - inclusive. - - urandint - (class=math #args=2): Integer uniformly distributed between inclusive - integer endpoints. - - dhms2fsec - (class=time #args=1): Recovers floating-point seconds as in - dhms2fsec("5d18h53m20.250000s") = 500000.250000 - - dhms2sec - (class=time #args=1): Recovers integer seconds as in - dhms2sec("5d18h53m20s") = 500000 - - fsec2dhms - (class=time #args=1): Formats floating-point seconds as in - fsec2dhms(500000.25) = "5d18h53m20.250000s" - - fsec2hms - (class=time #args=1): Formats floating-point seconds as in - fsec2hms(5000.25) = "01:23:20.250000" - - gmt2sec - (class=time #args=1): Parses GMT timestamp as integer seconds since - the epoch. - - localtime2sec - (class=time #args=1): Parses local timestamp as integer seconds since - the epoch. Consults $TZ environment variable. - - hms2fsec - (class=time #args=1): Recovers floating-point seconds as in - hms2fsec("01:23:20.250000") = 5000.250000 - - hms2sec - (class=time #args=1): Recovers integer seconds as in - hms2sec("01:23:20") = 5000 - - sec2dhms - (class=time #args=1): Formats integer seconds as in sec2dhms(500000) - = "5d18h53m20s" - - sec2gmt - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". - Leaves non-numbers as-is. - - sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n - decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Leaves non-numbers as-is. - - sec2gmtdate - (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". - Leaves non-numbers as-is. - - sec2localtime - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n - decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localdate - (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2hms - (class=time #args=1): Formats integer seconds as in - sec2hms(5000) = "01:23:20" - - strftime - (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". - Format strings are as in the C library (please see "man strftime" on your system), - with the Miller-specific addition of "%1S" through "%9S" which format the seconds - with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) - See also strftime_local. - - strftime_local - (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. - - strptime - (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, - e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, - and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. - See also strptime_local. - - strptime_local - (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. - - systime - (class=time #args=0): Floating-point seconds since the epoch, - e.g. 1440768801.748936. - - is_absent - (class=typing #args=1): False if field is present in input, true otherwise - - is_bool - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. - - is_boolean - (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. - - is_empty - (class=typing #args=1): True if field is present in input with empty string value, false otherwise. - - is_empty_map - (class=typing #args=1): True if argument is a map which is empty. - - is_float - (class=typing #args=1): True if field is present with value inferred to be float - - is_int - (class=typing #args=1): True if field is present with value inferred to be int - - is_map - (class=typing #args=1): True if argument is a map. - - is_nonempty_map - (class=typing #args=1): True if argument is a map which is non-empty. - - is_not_empty - (class=typing #args=1): False if field is present in input with empty value, true otherwise - - is_not_map - (class=typing #args=1): True if argument is not a map. - - is_not_null - (class=typing #args=1): False if argument is null (empty or absent), true otherwise. - - is_null - (class=typing #args=1): True if argument is null (empty or absent), false otherwise. - - is_numeric - (class=typing #args=1): True if field is present with value inferred to be int or float - - is_present - (class=typing #args=1): True if field is present in input, false otherwise. - - is_string - (class=typing #args=1): True if field is present with string (including empty-string) value - - asserting_absent - (class=typing #args=1): Returns argument if it is absent in the input data, else - throws an error. - - asserting_bool - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_boolean - (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - asserting_empty - (class=typing #args=1): Returns argument if it is present in input with empty value, - else throws an error. - - asserting_empty_map - (class=typing #args=1): Returns argument if it is a map with empty value, else - throws an error. - - asserting_float - (class=typing #args=1): Returns argument if it is present with float value, else - throws an error. - - asserting_int - (class=typing #args=1): Returns argument if it is present with int value, else - throws an error. - - asserting_map - (class=typing #args=1): Returns argument if it is a map, else throws an error. - - asserting_nonempty_map - (class=typing #args=1): Returns argument if it is a non-empty map, else throws - an error. - - asserting_not_empty - (class=typing #args=1): Returns argument if it is present in input with non-empty - value, else throws an error. - - asserting_not_map - (class=typing #args=1): Returns argument if it is not a map, else throws an error. - - asserting_not_null - (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), - else throws an error. - - asserting_null - (class=typing #args=1): Returns argument if it is null (empty or absent), else throws - an error. - - asserting_numeric - (class=typing #args=1): Returns argument if it is present with int or float value, - else throws an error. - - asserting_present - (class=typing #args=1): Returns argument if it is present in input, else throws - an error. - - asserting_string - (class=typing #args=1): Returns argument if it is present with string (including - empty-string) value, else throws an error. - - boolean - (class=conversion #args=1): Convert int/float/bool/string to boolean. - - float - (class=conversion #args=1): Convert int/float/bool/string to float. - - fmtnum - (class=conversion #args=2): Convert int/float/bool to string using - printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers - are all long long or double. If you use formats like %d or %f, behavior is undefined. - - hexfmt - (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". - - int - (class=conversion #args=1): Convert int/float/bool/string to int. - - string - (class=conversion #args=1): Convert int/float/bool/string to string. - - typeof - (class=conversion #args=1): Convert argument to type of argument (e.g. - MT_STRING). For debug. - - depth - (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. - - haskey - (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or - 'haskey(mymap, mykey)'. Error if 1st argument is not a map. - - joink - (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. - - joinkv - (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' - - joinv - (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. - - leafcount - (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, - same as length. - - length - (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. - - mapdiff - (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. - With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. - - mapexcept - (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. - E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. - - mapselect - (class=maps variadic): Returns a map with only keys from remaining arguments set. - E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. - - mapsum - (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with - key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. - - splitkv - (class=maps #args=3): Splits string by separators into map with type inference. - E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. - - splitkvx - (class=maps #args=3): Splits string by separators into map without type inference (keys and - values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives - '{"a" : "1", "b" : "2", "c" : "3"}'. - - splitnv - (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. - E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. - - splitnvx - (class=maps #args=2): Splits string by separator into integer-indexed map without type - inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. - -KEYWORDS FOR PUT AND FILTER - all - all: used in "emit", "emitp", and "unset" as a synonym for @* - - begin - begin: defines a block of statements to be executed before input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'begin { @count = 0 }' - - bool - bool: declares a boolean local variable in the current curly-braced scope. - Type-checking happens at assignment: 'bool b = 1' is an error. - - break - break: causes execution to continue after the body of the current - for/while/do-while loop. - - call - call: used for invoking a user-defined subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - continue - continue: causes execution to skip the remaining statements in the body of - the current for/while/do-while loop. For-loop increments are still applied. - - do - do: with "while", introduces a do-while loop. The body statements must be wrapped - in curly braces. - - dump - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - - edump - edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' - - elif - elif: the way Miller spells "else if". The body statements must be wrapped - in curly braces. - - else - else: terminates an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - emit - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - emitf - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - - emitp - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - end - end: defines a block of statements to be executed after input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' - - eprint - eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' - - eprintn - eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' - - false - false: the boolean literal value. - - filter - filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' - - float - float: declares a floating-point local variable in the current curly-braced scope. - Type-checking happens at assignment: 'float x = 0' is an error. - - for - for: defines a for-loop using one of three styles. The body statements must - be wrapped in curly braces. - For-loop over stream record: - Example: 'for (k, v in $*) { ... }' - For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' - - func - func: used for defining a user-defined function. - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' - - if - if: starts an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - in - in: used in for-loops over stream records or out-of-stream variables. - - int - int: declares an integer local variable in the current curly-braced scope. - Type-checking happens at assignment: 'int x = 0.0' is an error. - - map - map: declares an map-valued local variable in the current curly-braced scope. - Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is - always OK. map b = a is OK or not depending on whether a is a map. - - num - num: declares an int/float local variable in the current curly-braced scope. - Type-checking happens at assignment: 'num b = true' is an error. - - print - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - printn - printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' - - return - return: specifies the return value from a user-defined function. - Omitted return statements (including via if-branches) result in an absent-null - return value, which in turns results in a skipped assignment to an LHS. - - stderr - stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. - - stdout - stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. - - str - str: declares a string local variable in the current curly-braced scope. - Type-checking happens at assignment. - - subr - subr: used for defining a subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - tee - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - - true - true: the boolean literal value. - - unset - unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' - - var - var: declares an untyped local variable in the current curly-braced scope. - Examples: 'var a=1', 'var xyz=""' - - while - while: introduces a while loop, or with "do", introduces a do-while loop. - The body statements must be wrapped in curly braces. - - ENV - ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' - - FILENAME - FILENAME: evaluates to the name of the current file being processed. - - FILENUM - FILENUM: evaluates to the number of the current file being processed, - starting with 1. - - FNR - FNR: evaluates to the number of the current record within the current file - being processed, starting with 1. Resets at the start of each file. - - IFS - IFS: evaluates to the input field separator from the command line. - - IPS - IPS: evaluates to the input pair separator from the command line. - - IRS - IRS: evaluates to the input record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - M_E - M_E: the mathematical constant e. - - M_PI - M_PI: the mathematical constant pi. - - NF - NF: evaluates to the number of fields in the current record. - - NR - NR: evaluates to the number of the current record over all files - being processed, starting with 1. Does not reset at the start of each file. - - OFS - OFS: evaluates to the output field separator from the command line. - - OPS - OPS: evaluates to the output pair separator from the command line. - - ORS - ORS: evaluates to the output record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - -AUTHOR - Miller is written by John Kerl . - - This manual page has been composed from Miller's help output by Eric - MSP Veith . - -SEE ALSO - awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and - MIME Type for Comma-Separated Values (CSV) Files, the miller website - http://johnkerl.org/miller/doc - - - - 2021-03-22 MILLER(1) diff --git a/docs/mk-func-h2s.sh b/docs/mk-func-h2s.sh deleted file mode 100755 index cd2e41750..000000000 --- a/docs/mk-func-h2s.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash - -# In case the user running this has a .mlrrc -export MLRRC=__none__ - -mlr -F | grep -v '^[a-zA-Z]' | uniq | while read funcname; do - displayname=$funcname - linkname="$funcname" - if [ "$funcname" = '+' ]; then - displayname='\+' - linkname='plus' - elif [ "$funcname" = '-' ]; then - displayname='\-' - linkname='minus' - elif [ "$funcname" = '*' ]; then - displayname='\*' - linkname='times' - elif [ "$funcname" = '**' ]; then - displayname='\**' - linkname='exponentiation' - elif [ "$funcname" = '|' ]; then - displayname='\|' - linkname='bitwise-or' - elif [ "$funcname" = '?' ]; then - displayname='\?' - linkname='question-mark' - elif [ "$funcname" = ':' ]; then - displayname='\:' - linkname='colon' - elif [ "$funcname" = '? :' ]; then - displayname='\?' - linkname='question-mark-colon' - fi - - echo "" - echo ".. _reference-dsl-${linkname}:" - echo "" - echo "$displayname" - echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" - echo "" - echo '::' - echo '' - mlr --help-function "$funcname" | sed 's/^/ /' - echo '' - echo '' -done - -mlr -F | grep '^[a-zA-Z]' | sort -u | while read funcname; do - displayname=$funcname - linkname="$funcname" - if [ "$funcname" = '+' ]; then - displayname='\+' - linkname='plus' - elif [ "$funcname" = '-' ]; then - displayname='\-' - linkname='minus' - elif [ "$funcname" = '*' ]; then - displayname='\*' - linkname='times' - elif [ "$funcname" = '**' ]; then - displayname='\**' - linkname='exponentiation' - elif [ "$funcname" = '|' ]; then - displayname='\|' - linkname='bitwise-or' - elif [ "$funcname" = '?' ]; then - displayname='\?' - linkname='question-mark' - elif [ "$funcname" = ':' ]; then - displayname='\:' - linkname='colon' - elif [ "$funcname" = '? :' ]; then - displayname='\?' - linkname='question-mark-colon' - fi - - echo "" - echo ".. _reference-dsl-${linkname}:" - echo "" - echo "$displayname" - echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" - echo "" - echo '::' - echo '' - mlr --help-function "$funcname" | sed 's/^/ /' - echo '' - echo '' -done - diff --git a/docs/mk-func-table.rb b/docs/mk-func-table.rb deleted file mode 100755 index aeab061af..000000000 --- a/docs/mk-func-table.rb +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env ruby - -# Sphinx tables need to be precisely lined up, unlike Markdown tables which -# are more flexible. For example this is fine Markdown: -# -# | a | b | i | x | y | -# | --- | --- | --- | --- | --- | -# | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -# | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -# | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -# | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -# -# but Sphinx wants -# -# +-----+-----+---+---------------------+---------------------+ -# | a | b | i | x | y | -# +=====+=====+===+=====================+=====================+ -# | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | -# +-----+-----+---+---------------------+---------------------+ -# | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | -# +-----+-----+---+---------------------+---------------------+ -# | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | -# +-----+-----+---+---------------------+---------------------+ -# | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | -# +-----+-----+---+---------------------+---------------------+ -# -# So we need to build up a list of tuples, then compute the max length down -# each column, then write a fixed number of -/= per row. - -lines = `mlr --list-all-functions-as-table` - -# ---------------------------------------------------------------- -# Pass 1 - -max_name_length = 1 -max_function_class_length = 1 -max_nargs_length = 1 - -rows = [] -lines.split("\n").each do |line| - if line =~ /^? :.*/ # has an extra whitespace which throws off the naive split - ig, nore, function_class, nargs = line.split(/\s+/) - name = '? :' - else - name, function_class, nargs = line.split(/\s+/) - end - - name = '``' + name + '``' - - if max_name_length < name.length - max_name_length = name.length - end - if max_function_class_length < function_class.length - max_function_class_length = function_class.length - end - if max_nargs_length < nargs.length - max_nargs_length = nargs.length - end - - # TODO: format name with page-internal link - row = [name, function_class, nargs] - rows.append(row) -end - -# ---------------------------------------------------------------- -# Pass 2 - -name_dashes = '-' * max_name_length -function_class_dashes = '-' * max_function_class_length -nargs_dashes = '-' * max_nargs_length - -name_equals = '=' * max_name_length -function_class_equals = '=' * max_function_class_length -nargs_equals = '=' * max_nargs_length - -dashes_line = "+-#{name_dashes}-+-#{function_class_dashes}-+-#{nargs_dashes}-+" -equals_line = "+=#{name_equals}=+=#{function_class_equals}=+=#{nargs_equals}=+" - -counter = 0 -rows.each do |row| - name, function_class, nargs = row - - counter = counter + 1 - if counter == 1 - puts dashes_line - puts "| #{name.ljust(max_name_length)} | #{function_class.ljust(max_function_class_length)} | #{nargs.ljust(max_nargs_length)} |" - puts equals_line - else - puts "| #{name.ljust(max_name_length)} | #{function_class.ljust(max_function_class_length)} | #{nargs.ljust(max_nargs_length)} |" - puts dashes_line - end -end - diff --git a/docs6/mkdocs.yml b/docs/mkdocs.yml similarity index 100% rename from docs6/mkdocs.yml rename to docs/mkdocs.yml diff --git a/docs/mlr.1 b/docs/mlr.1 deleted file mode 100644 index 7321506b9..000000000 --- a/docs/mlr.1 +++ /dev/null @@ -1,4114 +0,0 @@ -'\" t -.\" Title: mlr -.\" Author: [see the "AUTHOR" section] -.\" Generator: ./mkman.rb -.\" Date: 2021-03-22 -.\" Manual: \ \& -.\" Source: \ \& -.\" Language: English -.\" -.TH "MILLER" "1" "2021-03-22" "\ \&" "\ \&" -.\" ----------------------------------------------------------------- -.\" * Portability definitions -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq (aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l -.\" ----------------------------------------------------------------- -.SH "NAME" -.sp -miller \- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. -.SH "SYNOPSIS" -.sp -Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} - -.SH "DESCRIPTION" -.sp -Miller operates on key-value-pair data while the familiar Unix tools operate -on integer-indexed fields: if the natural data structure for the latter is the -array, then Miller's natural data structure is the insertion-ordered hash map. -This encompasses a variety of data formats, including but not limited to the -familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as -a special case.) This manpage documents Miller v5.10.1. -.SH "EXAMPLES" -.sp - -.SS "COMMAND-LINE SYNTAX" -.if n \{\ -.RS 0 -.\} -.nf -mlr --csv cut -f hostname,uptime mydata.csv -mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv -mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat -grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group -mlr join -j account_id -f accounts.dat then group-by account_name balances.dat -mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\e1:\e2")' data/*.json -mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* -mlr stats2 -a linreg-pca -f u,v -g shape data/* -mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* -mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' -mlr --from infile.dat put -f analyze.mlr -mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' -mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' -mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' -mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' -.fi -.if n \{\ -.RE -.SS "DATA FORMATS" -.if n \{\ -.RS 0 -.\} -.nf - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ -.fi -.if n \{\ -.RE -.SH "OPTIONS" -.sp -In the following option flags, the version with "i" designates the input -stream, "o" the output stream, and the version without prefix sets the option -for both input and output stream. For example: --irs sets the input record -separator, --ors the output record separator, and --rs sets both the input and -output separator to the given value. -.SS "HELP OPTIONS" -.if n \{\ -.RS 0 -.\} -.nf - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. -.fi -.if n \{\ -.RE -.SS "VERB LIST" -.if n \{\ -.RS 0 -.\} -.nf - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down filter format-values fraction grep - group-by group-like having-fields head histogram join label least-frequent - merge-fields most-frequent nest nothing put regularize remove-empty-columns - rename reorder repeat reshape sample sec2gmt sec2gmtdate seqgen shuffle - skip-trivial-records sort sort-within-records stats1 stats2 step tac tail tee - top uniq unsparsify -.fi -.if n \{\ -.RE -.SS "FUNCTION LIST" -.if n \{\ -.RS 0 -.\} -.nf - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ - > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub - substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh - sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms - fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt - sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime - strftime_local strptime strptime_local systime is_absent is_bool is_boolean - is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty - is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv - splitkvx splitnv splitnvx - -Please use "mlr --help-function {function name}" for function-specific help. -.fi -.if n \{\ -.RE -.SS "I/O FORMATTING" -.if n \{\ -.RS 0 -.\} -.nf - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. -.fi -.if n \{\ -.RE -.SS "COMMENTS IN DATA" -.if n \{\ -.RS 0 -.\} -.nf - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. -Notes: -* Comments are only honored at the start of a line. -* In the absence of any of the above four options, comments are data like - any other text. -* When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. -.fi -.if n \{\ -.RE -.SS "FORMAT-CONVERSION KEYSTROKE-SAVERS" -.if n \{\ -.RS 0 -.\} -.nf -As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m -The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, -PPRINT, and markdown, respectively. Note that markdown format is available for -output only. -.fi -.if n \{\ -.RE -.SS "COMPRESSED I/O" -.if n \{\ -.RS 0 -.\} -.nf - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. -.fi -.if n \{\ -.RE -.SS "SEPARATORS" -.if n \{\ -.RS 0 -.\} -.nf - --rs --irs --ors Record separators, e.g. 'lf' or '\er\en' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\en', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\er\en', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\er\en' --fs '\et'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space -.fi -.if n \{\ -.RE -.SS "CSV-SPECIFIC OPTIONS" -.if n \{\ -.RS 0 -.\} -.nf - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. -.fi -.if n \{\ -.RE -.SS "DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT" -.if n \{\ -.RS 0 -.\} -.nf - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. -.fi -.if n \{\ -.RE -.SS "NUMERICAL FORMATTING" -.if n \{\ -.RS 0 -.\} -.nf - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. -.fi -.if n \{\ -.RE -.SS "OTHER OPTIONS" -.if n \{\ -.RS 0 -.\} -.nf - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. -.fi -.if n \{\ -.RE -.SS "THEN-CHAINING" -.if n \{\ -.RS 0 -.\} -.nf -Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color -.fi -.if n \{\ -.RE -.SS "AUXILIARY COMMANDS" -.if n \{\ -.RS 0 -.\} -.nf -Miller has a few otherwise-standalone executables packaged within it. -They do not participate in any other parts of Miller. -Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime -For more information, please invoke mlr {subcommand} --help -.fi -.if n \{\ -.RE -.SH "MLRRC" -.if n \{\ -.RS 0 -.\} -.nf -You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. -For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file -and that will be the default input/output format unless otherwise specified on the command line. - -The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. -Hash-style comments and blank lines are ignored. - -Sample .mlrrc: -# Input and output formats are CSV by default (unless otherwise specified -# on the mlr command line): -csv -# These are no-ops for CSV, but when I do use JSON output, I want these -# pretty-printing options to be used: -jvstack -jlistwrap - -How to specify location of .mlrrc: -* If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. -* Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - -See also: -https://johnkerl.org/miller/doc/customization.html -.fi -.if n \{\ -.RE -.SH "VERBS" -.sp - -.SS "altkv" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr altkv [no options] -Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. -.fi -.if n \{\ -.RE -.SS "bar" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr bar [options] -Replaces a numeric field with a number of asterisks, allowing for cheesy -bar plots. These align best with --opprint or --oxtab output format. -Options: --f {a,b,c} Field names to convert to bars. --c {character} Fill character: default '*'. --x {character} Out-of-bounds character: default '#'. --b {character} Blank character: default '.'. ---lo {lo} Lower-limit value for min-width bar: default '0.000000'. ---hi {hi} Upper-limit value for max-width bar: default '100.000000'. --w {n} Bar-field width: default '40'. ---auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. -.fi -.if n \{\ -.RE -.SS "bootstrap" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr bootstrap [options] -Emits an n-sample, with replacement, of the input records. -Options: --n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. -See also mlr sample and mlr shuffle. -.fi -.if n \{\ -.RE -.SS "cat" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr cat [options] -Passes input records directly to output. Most useful for format conversion. -Options: --n Prepend field "n" to each record with record-counter starting at 1 --g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). --v Write a low-level record-structure dump to stderr. --N {name} Prepend field {name} to each record with record-counter starting at 1 -.fi -.if n \{\ -.RE -.SS "check" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr check -Consumes records without printing any output. -Useful for doing a well-formatted check on input data. -.fi -.if n \{\ -.RE -.SS "clean-whitespace" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr clean-whitespace [options] -For each record, for each field in the record, whitespace-cleans the keys and -values. Whitespace-cleaning entails stripping leading and trailing whitespace, -and replacing multiple whitespace with singles. For finer-grained control, -please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, -and clean_whitespace. - -Options: --k|--keys-only Do not touch values. --v|--values-only Do not touch keys. -It is an error to specify -k as well as -v -- to clean keys and values, -leave off -k as well as -v. -.fi -.if n \{\ -.RE -.SS "count" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count [options] -Prints number of records, optionally grouped by distinct values for specified field names. - -Options: --g {a,b,c} Field names for distinct count. --n Show only the number of distinct values. Not interesting without -g. --o {name} Field name for output count. Default "count". -.fi -.if n \{\ -.RE -.SS "count-distinct" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count-distinct [options] -Prints number of records having distinct values for specified field names. -Same as uniq -c. - -Options: --f {a,b,c} Field names for distinct count. --n Show only the number of distinct values. Not compatible with -u. --o {name} Field name for output count. Default "count". - Ignored with -u. --u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. -.fi -.if n \{\ -.RE -.SS "count-similar" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count-similar [options] -Ingests all records, then emits each record augmented by a count of -the number of other records having the same group-by field values. -Options: --g {d,e,f} Group-by-field names for counts. --o {name} Field name for output count. Default "count". -.fi -.if n \{\ -.RE -.SS "cut" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr cut [options] -Passes through input records with specified fields included/excluded. --f {a,b,c} Field names to include for cut. --o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. --x|--complement Exclude, rather than include, field names specified by -f. --r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. -Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) -.fi -.if n \{\ -.RE -.SS "decimate" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr decimate [options] --n {count} Decimation factor; default 10 --b Decimate by printing first of every n. --e Decimate by printing last of every n (default). --g {a,b,c} Optional group-by-field names for decimate counts -Passes through one of every n records, optionally by category. -.fi -.if n \{\ -.RE -.SS "fill-down" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr fill-down [options] --f {a,b,c} Field names for fill-down --a|--only-if-absent Field names for fill-down -If a given record has a missing value for a given field, fill that from -the corresponding value from a previous record, if any. -By default, a 'missing' field either is absent, or has the empty-string value. -With -a, a field is 'missing' only if it is absent. -.fi -.if n \{\ -.RE -.SS "filter" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr filter [options] {expression} -Prints records for which {expression} evaluates to true. -If there are multiple semicolon-delimited expressions, all of them are -evaluated and the last one is used as the filter criterion. - -Conversion options: --S: Keeps field values as strings with no type inference to int or float. --F: Keeps field values as strings or floats with no inference to int. -All field values are type-inferred to int/float/string unless this behavior is -suppressed with -S or -F. - -Output/formatting options: ---oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". ---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. ---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. ---no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - -Expression-specification options: --f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) --e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. -(If you mix -e and -f then the expressions are evaluated in the order encountered. -Since the expression pieces are simply concatenated, please be sure to use intervening -semicolons to separate expressions.) - --s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - -Tracing options: --v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. --a: Prints a low-level stack-allocation trace to stdout. --t: Prints a low-level parser trace to stderr. --T: Prints a every statement to stderr as it is executed. - -Other options: --x: Prints records for which {expression} evaluates to false. - -Please use a dollar sign for field names and double-quotes for string -literals. If field names have special characters such as "." then you might -use braces, e.g. '${field.name}'. Miller built-in variables are -NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment -variables. The environment-variable name may be an expression, e.g. a field -value. - -Use # to comment to end of line. - -Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - -Please see https://miller.readthedocs.io/en/latest/reference.html for more information -including function list. Or "mlr -f". Please also see "mlr grep" which is -useful when you don't yet know which field name(s) you're looking for. -Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter -.fi -.if n \{\ -.RE -.SS "format-values" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr format-values [options] -Applies format strings to all field values, depending on autodetected type. -* If a field value is detected to be integer, applies integer format. -* Else, if a field value is detected to be float, applies float format. -* Else, applies string format. - -Note: this is a low-keystroke way to apply formatting to many fields. To get -finer control, please see the fmtnum function within the mlr put DSL. - -Note: this verb lets you apply arbitrary format strings, which can produce -undefined behavior and/or program crashes. See your system's "man printf". - -Options: --i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. --f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. --s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. --n Coerce field values autodetected as int to float, and then - apply the float format. -.fi -.if n \{\ -.RE -.SS "fraction" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr fraction [options] -For each record's value in specified fields, computes the ratio of that -value to the sum of values in that field over all input records. -E.g. with input records x=1 x=2 x=3 and x=4, emits output records -x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - -Note: this is internally a two-pass algorithm: on the first pass it retains -input records and accumulates sums; on the second pass it computes quotients -and emits output records. This means it produces no output until all input is read. - -Options: --f {a,b,c} Field name(s) for fraction calculation --g {d,e,f} Optional group-by-field name(s) for fraction counts --p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" --c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 -.fi -.if n \{\ -.RE -.SS "grep" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr grep [options] {regular expression} -Passes through records which match {regex}. -Options: --i Use case-insensitive search. --v Invert: pass through records which do not match the regex. -Note that "mlr filter" is more powerful, but requires you to know field names. -By contrast, "mlr grep" allows you to regex-match the entire record. It does -this by formatting each record in memory as DKVP, using command-line-specified -ORS/OFS/OPS, and matching the resulting line against the regex specified -here. In particular, the regex is not applied to the input stream: if you -have CSV with header line "x,y,z" and data line "1,2,3" then the regex will -be matched, not against either of these lines, but against the DKVP line -"x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, -and this command is intended to be merely a keystroke-saver. To get all the -features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." -.fi -.if n \{\ -.RE -.SS "group-by" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr group-by {comma-separated field names} -Outputs records in batches having identical values at specified field names. -.fi -.if n \{\ -.RE -.SS "group-like" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr group-like -Outputs records in batches having identical field names. -.fi -.if n \{\ -.RE -.SS "having-fields" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr having-fields [options] -Conditionally passes through records depending on each record's field names. -Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} -Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) -.fi -.if n \{\ -.RE -.SS "head" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr head [options] --n {count} Head count to print; default 10 --g {a,b,c} Optional group-by-field names for head counts -Passes through the first n records, optionally by category. -Without -g, ceases consuming more input (i.e. is fast) when n -records have been read. -.fi -.if n \{\ -.RE -.SS "histogram" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr histogram [options] --f {a,b,c} Value-field names for histogram counts ---lo {lo} Histogram low value ---hi {hi} Histogram high value ---nbins {n} Number of histogram bins ---auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. --o {prefix} Prefix for output field name. Default: no prefix. -Just a histogram. Input values < lo or > hi are not counted. -.fi -.if n \{\ -.RE -.SS "join" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr join [options] -Joins records from specified left file name with records from all file names -at the end of the Miller argument list. -Functionality is essentially the same as the system "join" command, but for -record streams. -Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. -File-format options default to those for the right file names on the Miller -argument list, but may be overridden for the left file as follows. Please see -the main "mlr --help" for more information on syntax for these arguments. - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips -Please use "mlr --usage-separator-options" for information on specifying separators. -Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information -including examples. -.fi -.if n \{\ -.RE -.SS "label" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr label {new1,new2,new3,...} -Given n comma-separated names, renames the first n fields of each record to -have the respective name. (Fields past the nth are left with their original -names.) Particularly useful with --inidx or --implicit-csv-header, to give -useful names to otherwise integer-indexed fields. -Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" -.fi -.if n \{\ -.RE -.SS "least-frequent" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr least-frequent [options] -Shows the least frequently occurring distinct values for specified field names. -The first entry is the statistical anti-mode; the remaining are runners-up. -Options: --f {one or more comma-separated field names}. Required flag. --n {count}. Optional flag defaulting to 10. --b Suppress counts; show only field values. --o {name} Field name for output count. Default "count". -See also "mlr most-frequent". -.fi -.if n \{\ -.RE -.SS "merge-fields" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr merge-fields [options] -Computes univariate statistics for each input record, accumulated across -specified fields. -Options: --a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields --f {a,b,c} Value-field names on which to compute statistics. Requires -o. --r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. --c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. --i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. --o {name} Output field basename for -f/-r. --k Keep the input fields which contributed to the output statistics; - the default is to omit them. --F Computes integerable things (e.g. count) in floating point. - -String-valued data make sense unless arithmetic on them is required, -e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, -numbers are less than strings. - -Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". -Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. -Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. -Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". -.fi -.if n \{\ -.RE -.SS "most-frequent" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr most-frequent [options] -Shows the most frequently occurring distinct values for specified field names. -The first entry is the statistical mode; the remaining are runners-up. -Options: --f {one or more comma-separated field names}. Required flag. --n {count}. Optional flag defaulting to 10. --b Suppress counts; show only field values. --o {name} Field name for output count. Default "count". -See also "mlr least-frequent". -.fi -.if n \{\ -.RE -.SS "nest" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr nest [options] -Explodes specified field values into separate fields/records, or reverses this. -Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} -Please use "mlr --usage-separator-options" for information on specifying separators. - -Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - -Notes: -* With --pairs, --implode doesn't make sense since the original field name has - been lost. -* The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. -* It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. -See also mlr reshape. -.fi -.if n \{\ -.RE -.SS "nothing" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr nothing -Drops all input records. Useful for testing, or after tee/print/etc. have -produced other output. -.fi -.if n \{\ -.RE -.SS "put" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr put [options] {expression} -Adds/updates specified field(s). Expressions are semicolon-separated and must -either be assignments, or evaluate to boolean. Booleans with following -statements in curly braces control whether those statements are executed; -booleans without following curly braces do nothing except side effects (e.g. -regex-captures into \e1, \e2, etc.). - -Conversion options: --S: Keeps field values as strings with no type inference to int or float. --F: Keeps field values as strings or floats with no inference to int. -All field values are type-inferred to int/float/string unless this behavior is -suppressed with -S or -F. - -Output/formatting options: ---oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". ---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. ---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. ---no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - -Expression-specification options: --f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) --e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. -(If you mix -e and -f then the expressions are evaluated in the order encountered. -Since the expression pieces are simply concatenated, please be sure to use intervening -semicolons to separate expressions.) - --s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - -Tracing options: --v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. --a: Prints a low-level stack-allocation trace to stdout. --t: Prints a low-level parser trace to stderr. --T: Prints a every statement to stderr as it is executed. - -Other options: --q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - -Please use a dollar sign for field names and double-quotes for string -literals. If field names have special characters such as "." then you might -use braces, e.g. '${field.name}'. Miller built-in variables are -NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment -variables. The environment-variable name may be an expression, e.g. a field -value. - -Use # to comment to end of line. - -Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\e1"; $c = "right_\e2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\e1"; $c = "right_\e2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - -Please see also 'mlr -k' for examples using redirected output. - -Please see https://miller.readthedocs.io/en/latest/reference.html for more information -including function list. Or "mlr -f". -Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put -.fi -.if n \{\ -.RE -.SS "regularize" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr regularize -For records seen earlier in the data stream with same field names in -a different order, outputs them with field names in the previously -encountered order. -Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 -output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 -.fi -.if n \{\ -.RE -.SS "remove-empty-columns" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr remove-empty-columns -Omits fields which are empty on every input row. Non-streaming. -.fi -.if n \{\ -.RE -.SS "rename" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr rename [options] {old1,new1,old2,new2,...} -Renames specified fields. -Options: --r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\e1" through - "\e9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. --g Do global replacement within each field name rather than - first-match replacement. -Examples: -mlr rename old_name,new_name' -mlr rename old_name_1,new_name_1,old_name_2,new_name_2' -mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" -mlr rename -r '"Date_[0-9]+",Date' Same -mlr rename -r 'Date_([0-9]+).*,\e1' Rename all such fields to be of the form 20151015 -mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" -.fi -.if n \{\ -.RE -.SS "reorder" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr reorder [options] --f {a,b,c} Field names to reorder. --e Put specified field names at record end: default is to put - them at record start. -Examples: -mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". -mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". -.fi -.if n \{\ -.RE -.SS "repeat" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr repeat [options] -Copies input records to output records multiple times. -Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. -Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' -produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 -Example: - echo a=1,b=2,c=3 | mlr repeat -f b -produces: - a=1,b=2,c=3 - a=1,b=2,c=3 -Example: - echo a=1,b=2,c=3 | mlr repeat -f c -produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 -.fi -.if n \{\ -.RE -.SS "reshape" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr reshape [options] -Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. -Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - -Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 -See also mlr nest. -.fi -.if n \{\ -.RE -.SS "sample" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sample [options] -Reservoir sampling (subsampling without replacement), optionally by category. --k {count} Required: number of records to output, total, or by group if using -g. --g {a,b,c} Optional: group-by-field names for samples. -See also mlr bootstrap and mlr shuffle. -.fi -.if n \{\ -.RE -.SS "sec2gmt" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sec2gmt [options] {comma-separated list of field names} -Replaces a numeric field representing seconds since the epoch with the -corresponding GMT timestamp; leaves non-numbers as-is. This is nothing -more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 -is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' -Options: --1 through -9: format the seconds using 1..9 decimal places, respectively. -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sec2gmtdate {comma-separated list of field names} -Replaces a numeric field representing seconds since the epoch with the -corresponding GMT year-month-day timestamp; leaves non-numbers as-is. -This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 -is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' -.fi -.if n \{\ -.RE -.SS "seqgen" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr seqgen [options] -Produces a sequence of counters. Discards the input record stream. Produces -output as specified by the following options: --f {name} Field name for counters; default "i". ---start {number} Inclusive start value; default "1". ---stop {number} Inclusive stop value; default "100". ---step {number} Step value; default "1". -Start, stop, and/or step may be floating-point. Output is integer if start, -stop, and step are all integers. Step may be negative. It may not be zero -unless start == stop. -.fi -.if n \{\ -.RE -.SS "shuffle" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr shuffle {no options} -Outputs records randomly permuted. No output records are produced until -all input records are read. -See also mlr bootstrap and mlr sample. -.fi -.if n \{\ -.RE -.SS "skip-trivial-records" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr skip-trivial-records [options] -Passes through all records except: -* those with zero fields; -* those for which all fields have empty value. -.fi -.if n \{\ -.RE -.SS "sort" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sort {flags} -Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first -Sorts records primarily by the first specified field, secondarily by the second -field, and so on. (Any records not having all specified sort keys will appear -at the end of the output, in the order they were encountered, regardless of the -specified sort order.) The sort is stable: records that compare equal will sort -in the order they were encountered in the input record stream. - -Example: - mlr sort -f a,b -nr x,y,z -which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z -.fi -.if n \{\ -.RE -.SS "sort-within-records" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sort-within-records [no options] -Outputs records sorted lexically ascending by keys. -.fi -.if n \{\ -.RE -.SS "stats1" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr stats1 [options] -Computes univariate statistics for one or more given fields, accumulated across -the input record stream. -Options: --a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields --f {a,b,c} Value-field names on which to compute statistics ---fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) ---fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) --g {d,e,f} Optional group-by-field names ---gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) ---gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) ---grfx {regex} Shorthand for --gr {regex} --fx {that same regex} --i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. --s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). --F Computes integerable things (e.g. count) in floating point. -Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape -Example: mlr stats1 -a count,mode -f size -Example: mlr stats1 -a count,mode -f size -g shape -Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. -Notes: -* p50 and median are synonymous. -* min and max output the same results as p0 and p100, respectively, but use - less memory. -* String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. -* count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. -* When there are mode ties, the first-encountered datum wins. -.fi -.if n \{\ -.RE -.SS "stats2" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr stats2 [options] -Computes bivariate statistics for one or more given field-name pairs, -accumulated across the input record stream. --a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix --f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. --g {e,f,g} Optional group-by-field names. --v Print additional output for linreg-pca. --s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). ---fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. -Only one of -s or --fit may be used. -Example: mlr stats2 -a linreg-pca -f x,y -Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape -Example: mlr stats2 -a corr -f x,y -.fi -.if n \{\ -.RE -.SS "step" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr step [options] -Computes values dependent on the previous record, optionally grouped -by category. - -Options: --a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records --f {a,b,c} Value-field names on which to compute statistics --g {d,e,f} Optional group-by-field names --F Computes integerable things (e.g. counter) in floating point. --d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". --o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - -Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - -Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or -https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average -for more information on EWMA. -.fi -.if n \{\ -.RE -.SS "tac" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tac -Prints records in reverse order from the order in which they were encountered. -.fi -.if n \{\ -.RE -.SS "tail" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tail [options] --n {count} Tail count to print; default 10 --g {a,b,c} Optional group-by-field names for tail counts -Passes through the last n records, optionally by category. -.fi -.if n \{\ -.RE -.SS "tee" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tee [options] {filename} -Passes through input records (like mlr cat) but also writes to specified output -file, using output-format flags from the command line (e.g. --ocsv). See also -the "tee" keyword within mlr put, which allows data-dependent filenames. -Options: --a: append to existing file, if any, rather than overwriting. ---no-fflush: don't call fflush() after every record. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. -.fi -.if n \{\ -.RE -.SS "top" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr top [options] --f {a,b,c} Value-field names for top counts. --g {d,e,f} Optional group-by-field names for top counts. --n {count} How many records to print per category; default 1. --a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. ---min Print top smallest values; default is top largest values. --F Keep top values as floats even if they look like integers. --o {name} Field name for output indices. Default "top_idx". -Prints the n records with smallest/largest values at specified fields, -optionally by category. -.fi -.if n \{\ -.RE -.SS "uniq" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr uniq [options] -Prints distinct values for specified field names. With -c, same as -count-distinct. For uniq, -f is a synonym for -g. - -Options: --g {d,e,f} Group-by-field names for uniq counts. --c Show repeat counts in addition to unique values. --n Show only the number of distinct values. --o {name} Field name for output count. Default "count". --a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. -.fi -.if n \{\ -.RE -.SS "unsparsify" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr unsparsify [options] -Prints records with the union of field names over all input records. -For field names absent in a given record but present in others, fills in a -value. Without -f, this verb retains all input before producing any output. - -Options: ---fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. --f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - -Example: if the input is two records, one being 'a=1,b=2' and the other -being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and -\(cqa=,b=3,c=4'. -.fi -.if n \{\ -.RE -.SH "FUNCTIONS FOR FILTER/PUT" -.sp - -.SS "+" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Addition. - -+ (class=arithmetic #args=1): Unary plus. -.fi -.if n \{\ -.RE -.SS "-" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Subtraction. - -- (class=arithmetic #args=1): Unary minus. -.fi -.if n \{\ -.RE -.SS "*" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Multiplication. -.fi -.if n \{\ -.RE -.SS "/" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Division. -.fi -.if n \{\ -.RE -.SS "//" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Integer division: rounds to negative (pythonic). -.fi -.if n \{\ -.RE -.SS ".+" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Addition, with integer-to-integer overflow - -\&.+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".-" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - -\&.- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".*" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS "./" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Division, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".//" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS "%" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Remainder; never negative-valued (pythonic). -.fi -.if n \{\ -.RE -.SS "**" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Exponentiation; same as pow, but as an infix -operator. -.fi -.if n \{\ -.RE -.SS "|" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise OR. -.fi -.if n \{\ -.RE -.SS "^" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise XOR. -.fi -.if n \{\ -.RE -.SS "&" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise AND. -.fi -.if n \{\ -.RE -.SS "~" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the -regex-match operator: try '$y = ~$x'. -.fi -.if n \{\ -.RE -.SS "<<" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise left-shift. -.fi -.if n \{\ -.RE -.SS ">>" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise right-shift. -.fi -.if n \{\ -.RE -.SS "bitcount" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=1): Count of 1-bits -.fi -.if n \{\ -.RE -.SS "==" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric equality. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "!=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric inequality. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "=~" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String (left-hand side) matches regex (right-hand -side), e.g. '$name =~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS "!=~" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String (left-hand side) does not match regex -(right-hand side), e.g. '$name !=~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS ">" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric greater-than. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS ">=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number -and string results in string compare. -.fi -.if n \{\ -.RE -.SS "<" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric less-than. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "<=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric less-than-or-equals. Mixing number -and string results in string compare. -.fi -.if n \{\ -.RE -.SS "&&" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical AND. -.fi -.if n \{\ -.RE -.SS "||" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical OR. -.fi -.if n \{\ -.RE -.SS "^^" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical XOR. -.fi -.if n \{\ -.RE -.SS "!" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=1): Logical negation. -.fi -.if n \{\ -.RE -.SS "? :" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=3): Ternary operator. -.fi -.if n \{\ -.RE -.SS "." -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): String concatenation. -.fi -.if n \{\ -.RE -.SS "gsub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=gsub($name, "old", "new")' -(replace all). -.fi -.if n \{\ -.RE -.SS "regextract" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' -\&. -.fi -.if n \{\ -.RE -.SS "regextract_or_else" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' -\&. -.fi -.if n \{\ -.RE -.SS "strlen" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): String length. -.fi -.if n \{\ -.RE -.SS "sub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=sub($name, "old", "new")' -(replace once). -.fi -.if n \{\ -.RE -.SS "ssub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Like sub but does no regexing. No characters are special. -.fi -.if n \{\ -.RE -.SS "substr" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n -inclusive. Negative indices -len .. -1 alias to 0 .. len-1. -.fi -.if n \{\ -.RE -.SS "tolower" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string to lowercase. -.fi -.if n \{\ -.RE -.SS "toupper" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string to uppercase. -.fi -.if n \{\ -.RE -.SS "truncate" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): Truncates string first argument to max length of int second argument. -.fi -.if n \{\ -.RE -.SS "capitalize" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string's first character to uppercase. -.fi -.if n \{\ -.RE -.SS "lstrip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip leading whitespace from string. -.fi -.if n \{\ -.RE -.SS "rstrip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "strip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip leading and trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "collapse_whitespace" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip repeated whitespace from string. -.fi -.if n \{\ -.RE -.SS "clean_whitespace" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Same as collapse_whitespace and strip. -.fi -.if n \{\ -.RE -.SS "system" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Run command string, yielding its stdout minus final carriage return. -.fi -.if n \{\ -.RE -.SS "abs" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Absolute value. -.fi -.if n \{\ -.RE -.SS "acos" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse trigonometric cosine. -.fi -.if n \{\ -.RE -.SS "acosh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse hyperbolic cosine. -.fi -.if n \{\ -.RE -.SS "asin" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse trigonometric sine. -.fi -.if n \{\ -.RE -.SS "asinh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "atan" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): One-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atan2" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Two-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atanh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "cbrt" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Cube root. -.fi -.if n \{\ -.RE -.SS "ceil" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Ceiling: nearest integer at or above. -.fi -.if n \{\ -.RE -.SS "cos" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric cosine. -.fi -.if n \{\ -.RE -.SS "cosh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic cosine. -.fi -.if n \{\ -.RE -.SS "erf" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Error function. -.fi -.if n \{\ -.RE -.SS "erfc" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Complementary error function. -.fi -.if n \{\ -.RE -.SS "exp" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Exponential function e**x. -.fi -.if n \{\ -.RE -.SS "expm1" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): e**x - 1. -.fi -.if n \{\ -.RE -.SS "floor" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Floor: nearest integer at or below. -.fi -.if n \{\ -.RE -.SS "invqnorm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse of normal cumulative distribution -function. Note that invqorm(urand()) is normally distributed. -.fi -.if n \{\ -.RE -.SS "log" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Natural (base-e) logarithm. -.fi -.if n \{\ -.RE -.SS "log10" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Base-10 logarithm. -.fi -.if n \{\ -.RE -.SS "log1p" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): log(1-x). -.fi -.if n \{\ -.RE -.SS "logifit" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): Given m and b from logistic regression, compute -fit: $yhat=logifit($x,$m,$b). -.fi -.if n \{\ -.RE -.SS "madd" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a + b mod m (integers) -.fi -.if n \{\ -.RE -.SS "max" -.if n \{\ -.RS 0 -.\} -.nf -(class=math variadic): max of n numbers; null loses -.fi -.if n \{\ -.RE -.SS "mexp" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a ** b mod m (integers) -.fi -.if n \{\ -.RE -.SS "min" -.if n \{\ -.RS 0 -.\} -.nf -(class=math variadic): Min of n numbers; null loses -.fi -.if n \{\ -.RE -.SS "mmul" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a * b mod m (integers) -.fi -.if n \{\ -.RE -.SS "msub" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a - b mod m (integers) -.fi -.if n \{\ -.RE -.SS "pow" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Exponentiation; same as **. -.fi -.if n \{\ -.RE -.SS "qnorm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Normal cumulative distribution function. -.fi -.if n \{\ -.RE -.SS "round" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Round to nearest integer. -.fi -.if n \{\ -.RE -.SS "roundm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is -the same as round($x/$m)*$m -.fi -.if n \{\ -.RE -.SS "sgn" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): +1 for positive input, 0 for zero input, -1 for -negative input. -.fi -.if n \{\ -.RE -.SS "sin" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric sine. -.fi -.if n \{\ -.RE -.SS "sinh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "sqrt" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Square root. -.fi -.if n \{\ -.RE -.SS "tan" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric tangent. -.fi -.if n \{\ -.RE -.SS "tanh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "urand" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. -Int-valued example: '$n=floor(20+urand()*11)'. -.fi -.if n \{\ -.RE -.SS "urandrange" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). -.fi -.if n \{\ -.RE -.SS "urand32" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=0): Integer uniformly distributed 0 and 2**32-1 -inclusive. -.fi -.if n \{\ -.RE -.SS "urandint" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Integer uniformly distributed between inclusive -integer endpoints. -.fi -.if n \{\ -.RE -.SS "dhms2fsec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers floating-point seconds as in -dhms2fsec("5d18h53m20.250000s") = 500000.250000 -.fi -.if n \{\ -.RE -.SS "dhms2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers integer seconds as in -dhms2sec("5d18h53m20s") = 500000 -.fi -.if n \{\ -.RE -.SS "fsec2dhms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats floating-point seconds as in -fsec2dhms(500000.25) = "5d18h53m20.250000s" -.fi -.if n \{\ -.RE -.SS "fsec2hms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats floating-point seconds as in -fsec2hms(5000.25) = "01:23:20.250000" -.fi -.if n \{\ -.RE -.SS "gmt2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Parses GMT timestamp as integer seconds since -the epoch. -.fi -.if n \{\ -.RE -.SS "localtime2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Parses local timestamp as integer seconds since -the epoch. Consults $TZ environment variable. -.fi -.if n \{\ -.RE -.SS "hms2fsec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers floating-point seconds as in -hms2fsec("01:23:20.250000") = 5000.250000 -.fi -.if n \{\ -.RE -.SS "hms2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers integer seconds as in -hms2sec("01:23:20") = 5000 -.fi -.if n \{\ -.RE -.SS "sec2dhms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats integer seconds as in sec2dhms(500000) -= "5d18h53m20s" -.fi -.if n \{\ -.RE -.SS "sec2gmt" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". -Leaves non-numbers as-is. - -sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n -decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". -Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". -Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2localtime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". -Consults $TZ environment variable. Leaves non-numbers as-is. - -sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n -decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". -Consults $TZ environment variable. Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2localdate" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". -Consults $TZ environment variable. Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2hms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats integer seconds as in -sec2hms(5000) = "01:23:20" -.fi -.if n \{\ -.RE -.SS "strftime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Formats seconds since the epoch as timestamp, e.g. -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". -Format strings are as in the C library (please see "man strftime" on your system), -with the Miller-specific addition of "%1S" through "%9S" which format the seconds -with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) -See also strftime_local. -.fi -.if n \{\ -.RE -.SS "strftime_local" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. -.fi -.if n \{\ -.RE -.SS "strptime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Parses timestamp as floating-point seconds since the epoch, -e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, -and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. -See also strptime_local. -.fi -.if n \{\ -.RE -.SS "strptime_local" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. -.fi -.if n \{\ -.RE -.SS "systime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=0): Floating-point seconds since the epoch, -e.g. 1440768801.748936. -.fi -.if n \{\ -.RE -.SS "is_absent" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if field is present in input, true otherwise -.fi -.if n \{\ -.RE -.SS "is_bool" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. -.fi -.if n \{\ -.RE -.SS "is_boolean" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. -.fi -.if n \{\ -.RE -.SS "is_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present in input with empty string value, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_empty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map which is empty. -.fi -.if n \{\ -.RE -.SS "is_float" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be float -.fi -.if n \{\ -.RE -.SS "is_int" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be int -.fi -.if n \{\ -.RE -.SS "is_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map. -.fi -.if n \{\ -.RE -.SS "is_nonempty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map which is non-empty. -.fi -.if n \{\ -.RE -.SS "is_not_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if field is present in input with empty value, true otherwise -.fi -.if n \{\ -.RE -.SS "is_not_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is not a map. -.fi -.if n \{\ -.RE -.SS "is_not_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if argument is null (empty or absent), true otherwise. -.fi -.if n \{\ -.RE -.SS "is_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is null (empty or absent), false otherwise. -.fi -.if n \{\ -.RE -.SS "is_numeric" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be int or float -.fi -.if n \{\ -.RE -.SS "is_present" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present in input, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_string" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with string (including empty-string) value -.fi -.if n \{\ -.RE -.SS "asserting_absent" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is absent in the input data, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_bool" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with boolean value, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_boolean" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with boolean value, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present in input with empty value, -else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_empty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is a map with empty value, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_float" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with float value, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_int" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with int value, else -throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is a map, else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_nonempty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is a non-empty map, else throws -an error. -.fi -.if n \{\ -.RE -.SS "asserting_not_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present in input with non-empty -value, else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_not_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is not a map, else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_not_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), -else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is null (empty or absent), else throws -an error. -.fi -.if n \{\ -.RE -.SS "asserting_numeric" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with int or float value, -else throws an error. -.fi -.if n \{\ -.RE -.SS "asserting_present" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present in input, else throws -an error. -.fi -.if n \{\ -.RE -.SS "asserting_string" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): Returns argument if it is present with string (including -empty-string) value, else throws an error. -.fi -.if n \{\ -.RE -.SS "boolean" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert int/float/bool/string to boolean. -.fi -.if n \{\ -.RE -.SS "float" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert int/float/bool/string to float. -.fi -.if n \{\ -.RE -.SS "fmtnum" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=2): Convert int/float/bool to string using -printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers -are all long long or double. If you use formats like %d or %f, behavior is undefined. -.fi -.if n \{\ -.RE -.SS "hexfmt" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". -.fi -.if n \{\ -.RE -.SS "int" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert int/float/bool/string to int. -.fi -.if n \{\ -.RE -.SS "string" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert int/float/bool/string to string. -.fi -.if n \{\ -.RE -.SS "typeof" -.if n \{\ -.RS 0 -.\} -.nf -(class=conversion #args=1): Convert argument to type of argument (e.g. -MT_STRING). For debug. -.fi -.if n \{\ -.RE -.SS "depth" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. -.fi -.if n \{\ -.RE -.SS "haskey" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or -\(cqhaskey(mymap, mykey)'. Error if 1st argument is not a map. -.fi -.if n \{\ -.RE -.SS "joink" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. -.fi -.if n \{\ -.RE -.SS "joinkv" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' -.fi -.if n \{\ -.RE -.SS "joinv" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. -.fi -.if n \{\ -.RE -.SS "leafcount" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, -same as length. -.fi -.if n \{\ -.RE -.SS "length" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. -.fi -.if n \{\ -.RE -.SS "mapdiff" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. -With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. -.fi -.if n \{\ -.RE -.SS "mapexcept" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. -E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. -.fi -.if n \{\ -.RE -.SS "mapselect" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps variadic): Returns a map with only keys from remaining arguments set. -E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. -.fi -.if n \{\ -.RE -.SS "mapsum" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with -key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. -.fi -.if n \{\ -.RE -.SS "splitkv" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=3): Splits string by separators into map with type inference. -E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. -.fi -.if n \{\ -.RE -.SS "splitkvx" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=3): Splits string by separators into map without type inference (keys and -values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives -\(cq{"a" : "1", "b" : "2", "c" : "3"}'. -.fi -.if n \{\ -.RE -.SS "splitnv" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=2): Splits string by separator into integer-indexed map with type inference. -E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. -.fi -.if n \{\ -.RE -.SS "splitnvx" -.if n \{\ -.RS 0 -.\} -.nf -(class=maps #args=2): Splits string by separator into integer-indexed map without type -inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. -.fi -.if n \{\ -.RE -.SH "KEYWORDS FOR PUT AND FILTER" -.sp - -.SS "all" -.if n \{\ -.RS 0 -.\} -.nf -all: used in "emit", "emitp", and "unset" as a synonym for @* -.fi -.if n \{\ -.RE -.SS "begin" -.if n \{\ -.RS 0 -.\} -.nf -begin: defines a block of statements to be executed before input records -are ingested. The body statements must be wrapped in curly braces. -Example: 'begin { @count = 0 }' -.fi -.if n \{\ -.RE -.SS "bool" -.if n \{\ -.RS 0 -.\} -.nf -bool: declares a boolean local variable in the current curly-braced scope. -Type-checking happens at assignment: 'bool b = 1' is an error. -.fi -.if n \{\ -.RE -.SS "break" -.if n \{\ -.RS 0 -.\} -.nf -break: causes execution to continue after the body of the current -for/while/do-while loop. -.fi -.if n \{\ -.RE -.SS "call" -.if n \{\ -.RS 0 -.\} -.nf -call: used for invoking a user-defined subroutine. -Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' -.fi -.if n \{\ -.RE -.SS "continue" -.if n \{\ -.RS 0 -.\} -.nf -continue: causes execution to skip the remaining statements in the body of -the current for/while/do-while loop. For-loop increments are still applied. -.fi -.if n \{\ -.RE -.SS "do" -.if n \{\ -.RS 0 -.\} -.nf -do: with "while", introduces a do-while loop. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "dump" -.if n \{\ -.RS 0 -.\} -.nf -dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' -.fi -.if n \{\ -.RE -.SS "edump" -.if n \{\ -.RS 0 -.\} -.nf -edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' -.fi -.if n \{\ -.RE -.SS "elif" -.if n \{\ -.RS 0 -.\} -.nf -elif: the way Miller spells "else if". The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "else" -.if n \{\ -.RS 0 -.\} -.nf -else: terminates an if/elif/elif chain. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "emit" -.if n \{\ -.RS 0 -.\} -.nf -emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "emitf" -.if n \{\ -.RS 0 -.\} -.nf -emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "emitp" -.if n \{\ -.RS 0 -.\} -.nf -emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "end" -.if n \{\ -.RS 0 -.\} -.nf -end: defines a block of statements to be executed after input records -are ingested. The body statements must be wrapped in curly braces. -Example: 'end { emit @count }' -Example: 'end { eprint "Final count is " . @count }' -.fi -.if n \{\ -.RE -.SS "eprint" -.if n \{\ -.RS 0 -.\} -.nf -eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' -.fi -.if n \{\ -.RE -.SS "eprintn" -.if n \{\ -.RS 0 -.\} -.nf -eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' -.fi -.if n \{\ -.RE -.SS "false" -.if n \{\ -.RS 0 -.\} -.nf -false: the boolean literal value. -.fi -.if n \{\ -.RE -.SS "filter" -.if n \{\ -.RS 0 -.\} -.nf -filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' -.fi -.if n \{\ -.RE -.SS "float" -.if n \{\ -.RS 0 -.\} -.nf -float: declares a floating-point local variable in the current curly-braced scope. -Type-checking happens at assignment: 'float x = 0' is an error. -.fi -.if n \{\ -.RE -.SS "for" -.if n \{\ -.RS 0 -.\} -.nf -for: defines a for-loop using one of three styles. The body statements must -be wrapped in curly braces. -For-loop over stream record: - Example: 'for (k, v in $*) { ... }' -For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' -C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' -.fi -.if n \{\ -.RE -.SS "func" -.if n \{\ -.RS 0 -.\} -.nf -func: used for defining a user-defined function. -Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' -.fi -.if n \{\ -.RE -.SS "if" -.if n \{\ -.RS 0 -.\} -.nf -if: starts an if/elif/elif chain. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "in" -.if n \{\ -.RS 0 -.\} -.nf -in: used in for-loops over stream records or out-of-stream variables. -.fi -.if n \{\ -.RE -.SS "int" -.if n \{\ -.RS 0 -.\} -.nf -int: declares an integer local variable in the current curly-braced scope. -Type-checking happens at assignment: 'int x = 0.0' is an error. -.fi -.if n \{\ -.RE -.SS "map" -.if n \{\ -.RS 0 -.\} -.nf -map: declares an map-valued local variable in the current curly-braced scope. -Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is -always OK. map b = a is OK or not depending on whether a is a map. -.fi -.if n \{\ -.RE -.SS "num" -.if n \{\ -.RS 0 -.\} -.nf -num: declares an int/float local variable in the current curly-braced scope. -Type-checking happens at assignment: 'num b = true' is an error. -.fi -.if n \{\ -.RE -.SS "print" -.if n \{\ -.RS 0 -.\} -.nf -print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' -.fi -.if n \{\ -.RE -.SS "printn" -.if n \{\ -.RS 0 -.\} -.nf -printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' -.fi -.if n \{\ -.RE -.SS "return" -.if n \{\ -.RS 0 -.\} -.nf -return: specifies the return value from a user-defined function. -Omitted return statements (including via if-branches) result in an absent-null -return value, which in turns results in a skipped assignment to an LHS. -.fi -.if n \{\ -.RE -.SS "stderr" -.if n \{\ -.RS 0 -.\} -.nf -stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. -.fi -.if n \{\ -.RE -.SS "stdout" -.if n \{\ -.RS 0 -.\} -.nf -stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. -.fi -.if n \{\ -.RE -.SS "str" -.if n \{\ -.RS 0 -.\} -.nf -str: declares a string local variable in the current curly-braced scope. -Type-checking happens at assignment. -.fi -.if n \{\ -.RE -.SS "subr" -.if n \{\ -.RS 0 -.\} -.nf -subr: used for defining a subroutine. -Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' -.fi -.if n \{\ -.RE -.SS "tee" -.if n \{\ -.RS 0 -.\} -.nf -tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' -.fi -.if n \{\ -.RE -.SS "true" -.if n \{\ -.RS 0 -.\} -.nf -true: the boolean literal value. -.fi -.if n \{\ -.RE -.SS "unset" -.if n \{\ -.RS 0 -.\} -.nf -unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' -.fi -.if n \{\ -.RE -.SS "var" -.if n \{\ -.RS 0 -.\} -.nf -var: declares an untyped local variable in the current curly-braced scope. -Examples: 'var a=1', 'var xyz=""' -.fi -.if n \{\ -.RE -.SS "while" -.if n \{\ -.RS 0 -.\} -.nf -while: introduces a while loop, or with "do", introduces a do-while loop. -The body statements must be wrapped in curly braces. -.fi -.if n \{\ -.RE -.SS "ENV" -.if n \{\ -.RS 0 -.\} -.nf -ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' -.fi -.if n \{\ -.RE -.SS "FILENAME" -.if n \{\ -.RS 0 -.\} -.nf -FILENAME: evaluates to the name of the current file being processed. -.fi -.if n \{\ -.RE -.SS "FILENUM" -.if n \{\ -.RS 0 -.\} -.nf -FILENUM: evaluates to the number of the current file being processed, -starting with 1. -.fi -.if n \{\ -.RE -.SS "FNR" -.if n \{\ -.RS 0 -.\} -.nf -FNR: evaluates to the number of the current record within the current file -being processed, starting with 1. Resets at the start of each file. -.fi -.if n \{\ -.RE -.SS "IFS" -.if n \{\ -.RS 0 -.\} -.nf -IFS: evaluates to the input field separator from the command line. -.fi -.if n \{\ -.RE -.SS "IPS" -.if n \{\ -.RS 0 -.\} -.nf -IPS: evaluates to the input pair separator from the command line. -.fi -.if n \{\ -.RE -.SS "IRS" -.if n \{\ -.RS 0 -.\} -.nf -IRS: evaluates to the input record separator from the command line, -or to LF or CRLF from the input data if in autodetect mode (which is -the default). -.fi -.if n \{\ -.RE -.SS "M_E" -.if n \{\ -.RS 0 -.\} -.nf -M_E: the mathematical constant e. -.fi -.if n \{\ -.RE -.SS "M_PI" -.if n \{\ -.RS 0 -.\} -.nf -M_PI: the mathematical constant pi. -.fi -.if n \{\ -.RE -.SS "NF" -.if n \{\ -.RS 0 -.\} -.nf -NF: evaluates to the number of fields in the current record. -.fi -.if n \{\ -.RE -.SS "NR" -.if n \{\ -.RS 0 -.\} -.nf -NR: evaluates to the number of the current record over all files -being processed, starting with 1. Does not reset at the start of each file. -.fi -.if n \{\ -.RE -.SS "OFS" -.if n \{\ -.RS 0 -.\} -.nf -OFS: evaluates to the output field separator from the command line. -.fi -.if n \{\ -.RE -.SS "OPS" -.if n \{\ -.RS 0 -.\} -.nf -OPS: evaluates to the output pair separator from the command line. -.fi -.if n \{\ -.RE -.SS "ORS" -.if n \{\ -.RS 0 -.\} -.nf -ORS: evaluates to the output record separator from the command line, -or to LF or CRLF from the input data if in autodetect mode (which is -the default). -.fi -.if n \{\ -.RE -.SH "AUTHOR" -.sp -Miller is written by John Kerl . -.sp -This manual page has been composed from Miller's help output by Eric MSP Veith . -.SH "SEE ALSO" -.sp -awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc diff --git a/docs/oosvar-example-ewma.sh b/docs/oosvar-example-ewma.sh deleted file mode 100644 index b2f1f8665..000000000 --- a/docs/oosvar-example-ewma.sh +++ /dev/null @@ -1,5 +0,0 @@ -mlr --opprint put ' - begin{ @a=0.1 }; - $e = NR==1 ? $x : @a * $x + (1 - @a) * @e; - @e=$e -' data/small diff --git a/docs/oosvar-example-sum-grouped.sh b/docs/oosvar-example-sum-grouped.sh deleted file mode 100644 index 5229a1d98..000000000 --- a/docs/oosvar-example-sum-grouped.sh +++ /dev/null @@ -1,6 +0,0 @@ -mlr --opprint put -q ' - @x_sum[$b] += $x; - end { - emit @x_sum, "b" - } -' data/medium diff --git a/docs/oosvar-example-sum.sh b/docs/oosvar-example-sum.sh deleted file mode 100644 index f31642c86..000000000 --- a/docs/oosvar-example-sum.sh +++ /dev/null @@ -1,6 +0,0 @@ -mlr --oxtab put -q ' - @x_sum += $x; - end { - emit @x_sum - } -' data/medium diff --git a/docs/originality.rst b/docs/originality.rst deleted file mode 100644 index d43603a4a..000000000 --- a/docs/originality.rst +++ /dev/null @@ -1,43 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -How original is Miller? -================================================================ - -It isn't. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include ``awk``, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools: - -**The Unix toolkit**: Intentional similarities as described in :doc:`feature-comparison`. - -Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites: - -* http://en.wikibooks.org/wiki/Ad_Hoc_Data_Analysis_From_The_Unix_Command_Line -* http://www.gregreda.com/2013/07/15/unix-commands-for-data-science -* https://github.com/dbohdan/structured-text-tools - -**RecordStream**: Miller owes particular inspiration to `RecordStream `_. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the ``sort``, ``stats1`` (analog of RecordStream's ``collate``), and ``delta`` operations, as well as ``filter`` and ``put``, and pretty-print formatting. - -**stats_m**: A third source of lineage is my Python `stats_m `_ module. This includes simple single-pass algorithms which form Miller's ``stats1`` and ``stats2`` subcommands. - -**SQL**: Fourthly, Miller's ``group-by`` command name is from SQL, as is the term ``aggregate``. - -**Added value**: Miller's added values include: - -* Name-indexing, compared to the Unix toolkit's positional indexing. -* Raw speed, compared to ``awk``, RecordStream, ``stats_m``, or various other kinds of Python/Ruby/etc. scripts one can easily create. -* Compact keystroking for many common tasks, with a decent amount of flexibility. -* Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases. -* Various file formats, and on-the-fly format conversion. - -**jq**: Miller does for name-indexed text what `jq `_ does for JSON. If you're not already familiar with ``jq``, please check it out!. - -**What about similar tools?** - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. Last I knew it doesn't mention `rows `_ so here's a plug for that as well. As it turns out, I learned about most of these after writing Miller. - -**What about DOTADIW?** One of the key points of the `Unix philosophy `_ is that a tool should do one thing and do it well. Hence ``sort`` and ``cut`` do just one thing. Why does Miller put ``awk``-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also :doc:`reference`)? This is a fair question. First note that many standard tools, such as ``awk`` and ``perl``, do quite a few things -- as does ``jq``. But I could have pushed for putting format awareness and name-indexing options into ``cut``, ``awk``, and so on (so you could do ``cut -f hostname,uptime`` or ``awk '{sum += $x*$y}END{print sum}'``). Patching ``cut``, ``sort``, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features. - -**Why not use Perl/Python/Ruby etc.?** Maybe you should. With those tools you'll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you'll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking. - -When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I'd need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I'd get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I'd get the language's ``eval`` for free and I wouldn't need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I'd gotten good enough performance from the latter I'd have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL. - -**No, really, why one more command-line data-manipulation tool?** I wrote Miller because I was frustrated with tools like ``grep``, ``sed``, and so on being *line-aware* without being *format-aware*. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of `RecordStream `_ combined with the raw speed of the Unix toolkit. Miller does precisely that. diff --git a/docs/originality.rst.in b/docs/originality.rst.in deleted file mode 100644 index 2fe1fb973..000000000 --- a/docs/originality.rst.in +++ /dev/null @@ -1,40 +0,0 @@ -How original is Miller? -================================================================ - -It isn't. Miller is one of many, many participants in the online-analytical-processing culture. Other key participants include ``awk``, SQL, spreadsheets, etc. etc. etc. Far from being an original concept, Miller explicitly strives to imitate several existing tools: - -**The Unix toolkit**: Intentional similarities as described in :doc:`feature-comparison`. - -Recipes abound for command-line data analysis using the Unix toolkit. Here are just a couple of my favorites: - -* http://en.wikibooks.org/wiki/Ad_Hoc_Data_Analysis_From_The_Unix_Command_Line -* http://www.gregreda.com/2013/07/15/unix-commands-for-data-science -* https://github.com/dbohdan/structured-text-tools - -**RecordStream**: Miller owes particular inspiration to `RecordStream `_. The key difference is that RecordStream is a Perl-based tool for manipulating JSON (including requiring it to separately manipulate other formats such as CSV into and out of JSON), while Miller is fast C which handles its formats natively. The similarities include the ``sort``, ``stats1`` (analog of RecordStream's ``collate``), and ``delta`` operations, as well as ``filter`` and ``put``, and pretty-print formatting. - -**stats_m**: A third source of lineage is my Python `stats_m `_ module. This includes simple single-pass algorithms which form Miller's ``stats1`` and ``stats2`` subcommands. - -**SQL**: Fourthly, Miller's ``group-by`` command name is from SQL, as is the term ``aggregate``. - -**Added value**: Miller's added values include: - -* Name-indexing, compared to the Unix toolkit's positional indexing. -* Raw speed, compared to ``awk``, RecordStream, ``stats_m``, or various other kinds of Python/Ruby/etc. scripts one can easily create. -* Compact keystroking for many common tasks, with a decent amount of flexibility. -* Ability to handle text files on the Unix pipe, without need for creating database tables, compared to SQL databases. -* Various file formats, and on-the-fly format conversion. - -**jq**: Miller does for name-indexed text what `jq `_ does for JSON. If you're not already familiar with ``jq``, please check it out!. - -**What about similar tools?** - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. Last I knew it doesn't mention `rows `_ so here's a plug for that as well. As it turns out, I learned about most of these after writing Miller. - -**What about DOTADIW?** One of the key points of the `Unix philosophy `_ is that a tool should do one thing and do it well. Hence ``sort`` and ``cut`` do just one thing. Why does Miller put ``awk``-like processing, a few SQL-like operations, and statistical reduction all into one tool (see also :doc:`reference`)? This is a fair question. First note that many standard tools, such as ``awk`` and ``perl``, do quite a few things -- as does ``jq``. But I could have pushed for putting format awareness and name-indexing options into ``cut``, ``awk``, and so on (so you could do ``cut -f hostname,uptime`` or ``awk '{sum += $x*$y}END{print sum}'``). Patching ``cut``, ``sort``, etc. on multiple operating systems is a non-starter in terms of uptake. Moreover, it makes sense for me to have Miller be a tool which collects together format-aware record-stream processing into one place, with good reuse of Miller-internal library code for its various features. - -**Why not use Perl/Python/Ruby etc.?** Maybe you should. With those tools you'll get far more expressive power, and sufficiently quick turnaround time for small-to-medium-sized data. Using Miller you'll get something less than a complete programming language, but which is fast, with moderate amounts of flexibility and much less keystroking. - -When I was first developing Miller I made a survey of several languages. Using low-level implementation languages like C, Go, Rust, and Nim, I'd need to create my own domain-specific language (DSL) which would always be less featured than a full programming language, but I'd get better performance. Using high-level interpreted languages such as Perl/Python/Ruby I'd get the language's ``eval`` for free and I wouldn't need a DSL; Miller would have mainly been a set of format-specific I/O hooks. If I'd gotten good enough performance from the latter I'd have done it without question and Miller would be far more flexible. But C won the performance criteria by a landslide so we have Miller in C with a custom DSL. - -**No, really, why one more command-line data-manipulation tool?** I wrote Miller because I was frustrated with tools like ``grep``, ``sed``, and so on being *line-aware* without being *format-aware*. The single most poignant example I can think of is seeing people grep data lines out of their CSV files and sadly losing their header lines. While some lighter-than-SQL processing is very nice to have, at core I wanted the format-awareness of `RecordStream `_ combined with the raw speed of the Unix toolkit. Miller does precisely that. diff --git a/docs/performance.rst b/docs/performance.rst deleted file mode 100644 index 444e35fed..000000000 --- a/docs/performance.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Performance -================================================================ - -Disclaimer ----------------------------------------------------------------- - -In a previous version of this page (see `here `_) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples: - -* Miller's principal strength is that it handles **key-value data in various formats** while the system tools **do not**. So if you time ``mlr sort`` on a CSV file against system ``sort``, it's not relevant to say which is faster by how many percent -- Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, ``awk`` doesn't respect header lines, although you can code up some CSV-handling using ``if (NR==1) { ... } else { ... }``. And that's just CSV: I don't know any simple way to get ``sort``, ``awk``, etc. to handle DKVP, JSON, etc. -- which is the main rreason I wrote Miller. - -* **Implementations differ by platform**: one ``awk`` may be fundamentally faster than another, and ``mawk`` has a very efficient bytecode implementation -- which handles positionally indexed data far faster than Miller does. - -* The system ``sort`` command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants. - -* Etc. - -Summary ----------------------------------------------------------------- - -Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in ``grep``, ``sed``, etc. diff --git a/docs/performance.rst.in b/docs/performance.rst.in deleted file mode 100644 index a98b5daab..000000000 --- a/docs/performance.rst.in +++ /dev/null @@ -1,20 +0,0 @@ -Performance -================================================================ - -Disclaimer ----------------------------------------------------------------- - -In a previous version of this page (see `here `_) I compared Miller to some items in the Unix toolkit in terms of run time. But such comparisons are very much not apples-to-apples: - -* Miller's principal strength is that it handles **key-value data in various formats** while the system tools **do not**. So if you time ``mlr sort`` on a CSV file against system ``sort``, it's not relevant to say which is faster by how many percent -- Miller will respect the header line, leaving it in place, while the system sort will move it, sorting it along with all the other header lines. This would be comparing the run times of two programs produce different outputs. Likewise, ``awk`` doesn't respect header lines, although you can code up some CSV-handling using ``if (NR==1) { ... } else { ... }``. And that's just CSV: I don't know any simple way to get ``sort``, ``awk``, etc. to handle DKVP, JSON, etc. -- which is the main rreason I wrote Miller. - -* **Implementations differ by platform**: one ``awk`` may be fundamentally faster than another, and ``mawk`` has a very efficient bytecode implementation -- which handles positionally indexed data far faster than Miller does. - -* The system ``sort`` command will, on some systems, handle too-large-for-RAM datasets by spilling to disk; Miller (as of version 5.2.0, mid-2017) does not. Miller sorts are always stable; GNU supports stable and unstable variants. - -* Etc. - -Summary ----------------------------------------------------------------- - -Miller can do many kinds of processing on key-value-pair data using elapsed time roughly of the same order of magnitude as items in the Unix toolkit can handle positionally indexed data. Specific results vary widely by platform, implementation details, multi-core use (or not). Lastly, specific special-purpose non-record-aware processing will run far faster in ``grep``, ``sed``, etc. diff --git a/docs/poki b/docs/poki deleted file mode 100755 index 8382092d3..000000000 --- a/docs/poki +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env ruby - -$us = File.basename $0 - -require 'getoptlong' -require 'fileutils' -require 'json' - -# ---------------------------------------------------------------- -# This is used to run live code for Miller Sphinx docs. -# * Edit foo.rst.in -# * Run this script to generate foo.rst -# * The caller should chmod 400 the foo.rst file -# * See README.md for more information. - -def main - input_handle = $stdin - output_handle = $stdout - - output_handle.puts("..") - output_handle.puts(" PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE.") - output_handle.puts("") - - input_handle.readlines.each do |content_line| - - if content_line =~ /POKI_INCLUDE_ESCAPED\(([^)]+)\)HERE/ - included_file_name = $1 - include_escaped(included_file_name, output_handle) - - elsif content_line =~ /POKI_INCLUDE_AND_RUN_ESCAPED\(([^)]+)\)HERE/ - included_file_name = $1 - cmd = File.readlines(included_file_name).join('') - run_command(cmd, output_handle) - - elsif content_line =~ /POKI_RUN_CONTENT_GENERATOR\(([^)]+)\)HERE/ - cmd = $1 - run_content_generator(cmd, output_handle) - - elsif content_line =~ /POKI_RUN_COMMAND{{(.+)}}HERE/ - cmd = $1 - run_command(cmd, output_handle) - - elsif content_line =~ /POKI_RUN_COMMAND_TOLERATING_ERROR{{(.+)}}HERE/ - cmd = $1 - run_command_tolerating_error(cmd, output_handle) - - elsif content_line =~ /POKI/ - #raise "Unhandled poki line #{content_line}" - $stderr.puts "Unhandled poki line <<#{content_line}>>" - output_handle.write(content_line) - else - output_handle.write(content_line) - end - end -end - -# ---------------------------------------------------------------- -def include_escaped(included_file_name, output_handle) - write_card(false, File.readlines(included_file_name), output_handle) -end - -# ---------------------------------------------------------------- -def run_command(cmd, output_handle) - cmd_output = `#{cmd} 2>&1` - status = $?.to_i - if status != 0 - raise "\"#{cmd}\" exited with non-zero code #{status}." - end - # The command can be multi-line - cmd_lines = cmd.split(/\n/) - write_card(true, cmd_lines + cmd_output.split(/\n/), output_handle) -end - -# ---------------------------------------------------------------- -def run_command_tolerating_error(cmd, output_handle) - cmd_output = `#{cmd} 2>&1` - write_card(true, [cmd] + cmd_output.split(/\n/), output_handle) -end - -# ---------------------------------------------------------------- -def run_content_generator(cmd, output_handle) - cmd_output = `#{cmd} 2>&1` - status = $?.to_i - if status != 0 - raise "\"#{cmd}\" exited with non-zero code #{status}." - end - output_handle.puts(cmd_output) -end - -# ---------------------------------------------------------------- -def write_card(highlight_first_line, content_lines, output_handle) - output_handle.puts('.. code-block:: none') - if highlight_first_line - output_handle.puts(' :emphasize-lines: 1,1') # 'hll' in _static/*.css - end - output_handle.puts - content_lines.each do |content_line| - # The callsite should do the "::", blank line, then this, then blank line - # in order to adhere to Sphinx code-block syntax. (Another option would be - # us here doing the ::, blank line, , then the content line, then the other - # blank line.) - output_handle.write(' ') # four leading spaces for Sphinx, on each line - output_handle.puts(content_line) - end -end - -# ================================================================ -main() diff --git a/docs/pokifoo b/docs/pokifoo deleted file mode 100755 index b95e34441..000000000 --- a/docs/pokifoo +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -awk '{ - if ($0 ~ /^POKI*/) { - print (""); - print ("::"); - print (""); - print $0; - print (""); - } else { - print $0 - } -}' "$@" diff --git a/docs/programs/mand.mlr b/docs/programs/mand.mlr deleted file mode 100644 index 8f3eab23f..000000000 --- a/docs/programs/mand.mlr +++ /dev/null @@ -1,100 +0,0 @@ -# Mandelbrot set generator: simple example of Miller DSL as programming language. -begin { - # Set defaults - @rcorn = -2.0; - @icorn = -2.0; - @side = 4.0; - @iheight = 50; - @iwidth = 100; - @maxits = 100; - @levelstep = 5; - @chars = "@X*o-."; # Palette of characters to print to the screen. - @verbose = false; - @do_julia = false; - @jr = 0.0; # Real part of Julia point, if any - @ji = 0.0; # Imaginary part of Julia point, if any -} - -# Here, we can override defaults from an input file (if any). In Miller's -# put/filter DSL, absent-null right-hand sides result in no assignment so we -# can simply put @rcorn = $rcorn: if there is a field in the input like -# 'rcorn = -1.847' we'll read and use it, else we'll keep the default. -@rcorn = $rcorn; -@icorn = $icorn; -@side = $side; -@iheight = $iheight; -@iwidth = $iwidth; -@maxits = $maxits; -@levelstep = $levelstep; -@chars = $chars; -@verbose = $verbose; -@do_julia = $do_julia; -@jr = $jr; -@ji = $ji; - -end { - if (@verbose) { - print "RCORN = ".@rcorn; - print "ICORN = ".@icorn; - print "SIDE = ".@side; - print "IHEIGHT = ".@iheight; - print "IWIDTH = ".@iwidth; - print "MAXITS = ".@maxits; - print "LEVELSTEP = ".@levelstep; - print "CHARS = ".@chars; - } - - # Iterate over a matrix of rows and columns, printing one character for each cell. - for (int ii = @iheight-1; ii >= 0; ii -= 1) { - num pi = @icorn + (ii/@iheight) * @side; - for (int ir = 0; ir < @iwidth; ir += 1) { - num pr = @rcorn + (ir/@iwidth) * @side; - printn get_point_plot(pr, pi, @maxits, @do_julia, @jr, @ji); - } - print; - } -} - -# This is a function to approximate membership in the Mandelbrot set (or Julia -# set for a given Julia point if do_julia == true) for a given point in the -# complex plane. -func get_point_plot(pr, pi, maxits, do_julia, jr, ji) { - num zr = 0.0; - num zi = 0.0; - num cr = 0.0; - num ci = 0.0; - - if (!do_julia) { - zr = 0.0; - zi = 0.0; - cr = pr; - ci = pi; - } else { - zr = pr; - zi = pi; - cr = jr; - ci = ji; - } - - int iti = 0; - bool escaped = false; - num zt = 0; - for (iti = 0; iti < maxits; iti += 1) { - num mag = zr*zr + zi+zi; - if (mag > 4.0) { - escaped = true; - break; - } - # z := z^2 + c - zt = zr*zr - zi*zi + cr; - zi = 2*zr*zi + ci; - zr = zt; - } - if (!escaped) { - return "."; - } else { - # The // operator is Miller's (pythonic) integer-division operator - int level = (iti // @levelstep) % strlen(@chars); - return substr(@chars, level, level); - } -} diff --git a/docs/programs/mand.sh b/docs/programs/mand.sh deleted file mode 100644 index c7f9fe09e..000000000 --- a/docs/programs/mand.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -iheight=$(stty size | mlr --nidx --fs space cut -f 1) -iwidth=$(stty size | mlr --nidx --fs space cut -f 2) -if [ "$1" = "1" ]; then - echo "rcorn=-1.787582,icorn=-0.000002,side=0.000004,maxits=1000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = "2" ]; then - echo "rcorn=-0.162950,icorn=+1.026100,side=0.000200,maxits=100000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = "3" ]; then - echo "rcorn=-1.755350,icorn=+0.014230,side=0.000020,maxits=10000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 4 ]; then - echo "do_julia=true,jr= 0.35,ji=0.35,maxits=1000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 5 ]; then - echo "do_julia=true,jr= 0.0,ji=0.63567,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 6 ]; then - echo "do_julia=true,jr= 0.4,ji=0.34745,maxits=1000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 7 ]; then - echo "do_julia=true,jr= 0.36,ji=0.36,maxits=80,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 8 ]; then - echo "do_julia=true,jr=-0.55,ji=0.55,maxits=100,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 9 ]; then - echo "do_julia=true,jr=-0.51,ji=0.51,maxits=1000,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 10 ]; then - echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.3,icorn=-0.3,side=0.6,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 11 ]; then - echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.6,icorn=-0.6,side=.2,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 12 ]; then - echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.75,icorn=-0.03125,side=.0625,iheight=$iheight,iwidth=$iwidth" -elif [ "$1" = 13 ]; then - echo "do_julia=true,jr=-1.26,ji=-0.03,rcorn=-0.75,icorn=-0.01,side=.02,iheight=$iheight,iwidth=$iwidth" -else - echo "iheight=$iheight,iwidth=$iwidth" -fi | mlr put -f programs/mand.mlr diff --git a/docs/quick-examples.rst b/docs/quick-examples.rst deleted file mode 100644 index a1f4c1068..000000000 --- a/docs/quick-examples.rst +++ /dev/null @@ -1,117 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Quick examples -================================================================ - -Column select: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --csv cut -f hostname,uptime mydata.csv - -Add new columns as function of other columns: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - -Row filter: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv - -Apply column labels and pretty-print: - -.. code-block:: none - :emphasize-lines: 1,1 - - % grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - -Join multiple data sources on key columns: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - -Multiple formats including JSON: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - -Aggregate per-column statistics: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - -Linear regression: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr stats2 -a linreg-pca -f u,v -g shape data/* - -Aggregate custom per-column statistics: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - -Iterate over data using DSL expressions: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset - ' - -Run DSL expressions from a script file: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put -f analyze.mlr - -Split/reduce output to multiple filenames: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - -Compressed I/O: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - -Interoperate with other data-processing tools using standard pipes: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - -Tap/trace: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' diff --git a/docs/quick-examples.rst.in b/docs/quick-examples.rst.in deleted file mode 100644 index 4ae54d30d..000000000 --- a/docs/quick-examples.rst.in +++ /dev/null @@ -1,114 +0,0 @@ -Quick examples -================================================================ - -Column select: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --csv cut -f hostname,uptime mydata.csv - -Add new columns as function of other columns: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - -Row filter: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --csv filter '$status != "down" && $upsec >= 10000' *.csv - -Apply column labels and pretty-print: - -.. code-block:: none - :emphasize-lines: 1,1 - - % grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - -Join multiple data sources on key columns: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - -Multiple formats including JSON: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - -Aggregate per-column statistics: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - -Linear regression: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr stats2 -a linreg-pca -f u,v -g shape data/* - -Aggregate custom per-column statistics: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - -Iterate over data using DSL expressions: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset - ' - -Run DSL expressions from a script file: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put -f analyze.mlr - -Split/reduce output to multiple filenames: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - -Compressed I/O: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - -Interoperate with other data-processing tools using standard pipes: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - -Tap/trace: - -.. code-block:: none - :emphasize-lines: 1,1 - - % mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' diff --git a/docs/record-heterogeneity.rst b/docs/record-heterogeneity.rst deleted file mode 100644 index cc776be8d..000000000 --- a/docs/record-heterogeneity.rst +++ /dev/null @@ -1,219 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Record-heterogeneity -================================================================ - -We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error. - -But heterogeneous data abound (today's no-SQL databases for example). Miller handles this. - -For I/O ----------------------------------------------------------------- - -CSV and pretty-print -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ocsvlite cat data/het.dkvp - resource,loadsec,ok - /path/to/file,0.45,true - - record_count,resource - 100,/path/to/file - - resource,loadsec,ok - /path/to/second/file,0.32,true - - record_count,resource - 150,/path/to/second/file - - resource,loadsec,ok - /some/other/path,0.97,false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - - record_count resource - 100 /path/to/file - - resource loadsec ok - /path/to/second/file 0.32 true - - record_count resource - 150 /path/to/second/file - - resource loadsec ok - /some/other/path 0.97 false - -Miller handles explicit header changes as just shown. If your CSV input contains ragged data -- if there are implicit header changes -- you can use ``--allow-ragged-csv-input`` (or keystroke-saver ``--ragged``). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/ragged.csv - a,b,c - 1,2,3 - 4,5 - 6,7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv - a 1 - b 2 - c 3 - - a 4 - b 5 - c - - a 6 - b 7 - c 8 - 4 9 - -You may also find Miller's ``group-like`` feature handy (see also :doc:`reference`): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ocsvlite group-like data/het.dkvp - resource,loadsec,ok - /path/to/file,0.45,true - /path/to/second/file,0.32,true - /some/other/path,0.97,false - - record_count,resource - 100,/path/to/file - 150,/path/to/second/file - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint group-like data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - /path/to/second/file 0.32 true - /some/other/path 0.97 false - - record_count resource - 100 /path/to/file - 150 /path/to/second/file - -Key-value-pair, vertical-tabular, and index-numbered formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For these formats, record-heterogeneity comes naturally: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --onidx --ofs ' ' cat data/het.dkvp - /path/to/file 0.45 true - 100 /path/to/file - /path/to/second/file 0.32 true - 150 /path/to/second/file - /some/other/path 0.97 false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab cat data/het.dkvp - resource /path/to/file - loadsec 0.45 - ok true - - record_count 100 - resource /path/to/file - - resource /path/to/second/file - loadsec 0.32 - ok true - - record_count 150 - resource /path/to/second/file - - resource /some/other/path - loadsec 0.97 - ok false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab group-like data/het.dkvp - resource /path/to/file - loadsec 0.45 - ok true - - resource /path/to/second/file - loadsec 0.32 - ok true - - resource /some/other/path - loadsec 0.97 - ok false - - record_count 100 - resource /path/to/file - - record_count 150 - resource /path/to/second/file - -For processing ----------------------------------------------------------------- - -Miller operates on specified fields and takes the rest along: for example, if you are sorting on the ``count`` field then all records in the input stream must have a ``count`` field but the other fields can vary, and moreover the sorted-on field name(s) don't need to be in the same position on each line: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sort-het.dkvp - count=500,color=green - count=600 - status=ok,count=250,hours=0.22 - status=ok,count=200,hours=3.4 - count=300,color=blue - count=100,color=green - count=450 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -n count data/sort-het.dkvp - count=100,color=green - status=ok,count=200,hours=3.4 - status=ok,count=250,hours=0.22 - count=300,color=blue - count=450 - count=500,color=green - count=600 diff --git a/docs/record-heterogeneity.rst.in b/docs/record-heterogeneity.rst.in deleted file mode 100644 index 140b04644..000000000 --- a/docs/record-heterogeneity.rst.in +++ /dev/null @@ -1,54 +0,0 @@ -Record-heterogeneity -================================================================ - -We think of CSV tables as rectangular: if there are 17 columns in the header then there are 17 columns for every row, else the data have a formatting error. - -But heterogeneous data abound (today's no-SQL databases for example). Miller handles this. - -For I/O ----------------------------------------------------------------- - -CSV and pretty-print -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller simply prints a newline and a new header when there is a schema change. When there is no schema change, you get CSV per se as a special case. Likewise, Miller reads heterogeneous CSV or pretty-print input the same way. The difference between CSV and CSV-lite is that the former is RFC4180-compliant, while the latter readily handles heterogeneous data (which is non-compliant). For example: - -POKI_RUN_COMMAND{{cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --ocsvlite cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/het.dkvp}}HERE - -Miller handles explicit header changes as just shown. If your CSV input contains ragged data -- if there are implicit header changes -- you can use ``--allow-ragged-csv-input`` (or keystroke-saver ``--ragged``). For too-short data lines, values are filled with empty string; for too-long data lines, missing field names are replaced with positional indices (counting up from 1, not 0), as follows: - -POKI_RUN_COMMAND{{cat data/ragged.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --oxtab --allow-ragged-csv-input cat data/ragged.csv}}HERE - -You may also find Miller's ``group-like`` feature handy (see also :doc:`reference`): - -POKI_RUN_COMMAND{{mlr --ocsvlite group-like data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint group-like data/het.dkvp}}HERE - -Key-value-pair, vertical-tabular, and index-numbered formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For these formats, record-heterogeneity comes naturally: - -POKI_RUN_COMMAND{{cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --onidx --ofs ' ' cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab group-like data/het.dkvp}}HERE - -For processing ----------------------------------------------------------------- - -Miller operates on specified fields and takes the rest along: for example, if you are sorting on the ``count`` field then all records in the input stream must have a ``count`` field but the other fields can vary, and moreover the sorted-on field name(s) don't need to be in the same position on each line: - -POKI_RUN_COMMAND{{cat data/sort-het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr sort -n count data/sort-het.dkvp}}HERE diff --git a/docs/reference-dsl.rst b/docs/reference-dsl.rst deleted file mode 100644 index 0ab033275..000000000 --- a/docs/reference-dsl.rst +++ /dev/null @@ -1,5050 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -DSL reference -================================================================ - -Overview ----------------------------------------------------------------- - -Here's comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats1 -a sum -f x -g a data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -Please see :doc:`reference-verbs` for information on verbs other than ``put`` and ``filter``. - -The essential usages of ``mlr filter`` and ``mlr put`` are for record-selection and record-updating expressions, respectively. For example, given the following input data: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -you might retain only the records whose ``a`` field has value ``eks``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$a == "eks"' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - -or you might add a new field which is a function of existing fields: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$ab = $a . "_" . $b ' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,ab=pan_pan - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,ab=eks_pan - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,ab=wye_wye - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,ab=eks_wye - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,ab=wye_pan - -The two verbs ``mlr filter`` and ``mlr put`` are essentially the same. The only differences are: - -* Expressions sent to ``mlr filter`` must end with a boolean expression, which is the filtering criterion; - -* ``mlr filter`` expressions may not reference the ``filter`` keyword within them; and - -* ``mlr filter`` expressions may not use ``tee``, ``emit``, ``emitp``, or ``emitf``. - -All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement. - -There are more details and more choices, of course, as detailed in the following sections. - -Syntax ----------------------------------------------------------------- - -Expression formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Multiple expressions may be given, separated by semicolons, and each may refer to the ones before: - -.. code-block:: none - :emphasize-lines: 1,1 - - ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j' - i j k - 0 1 1 - 1 2 3 - 2 3 5 - 3 4 7 - 4 5 9 - 5 6 11 - 6 7 13 - 7 8 15 - 8 9 17 - 9 10 19 - -Newlines within the expression are ignored, which can help increase legibility of complex expressions: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put ' - $nf = NF; - $nr = NR; - $fnr = FNR; - $filenum = FILENUM; - $filename = FILENAME - ' data/small data/small2 - a b i x y nf nr fnr filenum filename - pan pan 1 0.3467901443380824 0.7268028627434533 5 1 1 1 data/small - eks pan 2 0.7586799647899636 0.5221511083334797 5 2 2 1 data/small - wye wye 3 0.20460330576630303 0.33831852551664776 5 3 3 1 data/small - eks wye 4 0.38139939387114097 0.13418874328430463 5 4 4 1 data/small - wye pan 5 0.5732889198020006 0.8636244699032729 5 5 5 1 data/small - pan eks 9999 0.267481232652199086 0.557077185510228001 5 6 1 2 data/small2 - wye eks 10000 0.734806020620654365 0.884788571337605134 5 7 2 2 data/small2 - pan wye 10001 0.870530722602517626 0.009854780514656930 5 8 3 2 data/small2 - hat wye 10002 0.321507044286237609 0.568893318795083758 5 9 4 2 data/small2 - pan zee 10003 0.272054845593895200 0.425789896597056627 5 10 5 2 data/small2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium - x_y_corr - -0.747994 - -.. _reference-dsl-expressions-from-files: - -Expressions from files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The simplest way to enter expressions for ``put`` and ``filter`` is between single quotes on the command line, e.g. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put '$xy = sqrt($x**2 + $y**2)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put 'func f(a, b) { return sqrt(a**2 + b**2) } $xy = f($x, $y)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -You may, though, find it convenient to put expressions into files for reuse, and read them -**using the -f option**. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/fe-example-3.mlr - func f(a, b) { - return sqrt(a**2 + b**2) - } - $xy = f($x, $y) - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put -f data/fe-example-3.mlr - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -If you have some of the logic in a file and you want to write the rest on the command line, you can **use the -f and -e options together**: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/fe-example-4.mlr - func f(a, b) { - return sqrt(a**2 + b**2) - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)' - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,xy=0.805299 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,xy=0.920998 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,xy=0.395376 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,xy=0.404317 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,xy=1.036584 - -A suggested use-case here is defining functions in files, and calling them from command-line expressions. - -Another suggested use-case is putting default parameter values in files, e.g. using ``begin{@count=is_present(@count)?@count:10}`` in the file, where you can precede that using ``begin{@count=40}`` using ``-e``. - -Moreover, you can have one or more ``-f`` expressions (maybe one function per file, for example) and one or more ``-e`` expressions on the command line. If you mix ``-f`` and ``-e`` then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don't forget intervening semicolons: e.g. not ``mlr put -e '$x=1' -e '$y=2 ...'`` but rather ``mlr put -e '$x=1;' -e '$y=2' ...``.) - -Semicolons, commas, newlines, and curly braces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller uses **semicolons as statement separators**, not statement terminators. This means you can write: - -.. code-block:: none - - mlr put 'x=1' - mlr put 'x=1;$y=2' - mlr put 'x=1;$y=2;' - mlr put 'x=1;;;;$y=2;' - -Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below). - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""} $foo = "bar"' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -Semicolons are required between statements even if those statements are on separate lines. **Newlines** are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines: - -.. code-block:: none - - mlr put ' - $x = 1 - $y = 2 # Syntax error - ' - - mlr put ' - $x = 1; - $y = 2 # This is OK - ' - -**Trailing commas** are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --from data/a.csv put ' - func f( - num a, - num b, - ): num { - return a**2 + b**2; - } - $* = { - "s": $a + $b, - "t": $a - $b, - "u": f( - $a, - $b, - ), - "v": NR, - } - ' - s,t,u,v - 3,-1,5.000000,1 - 9,-1,41.000000,2 - -Bodies for all compound statements must be enclosed in **curly braces**, even if the body is a single statement: - -.. code-block:: none - - mlr put 'if ($x == 1) $y = 2' # Syntax error - -.. code-block:: none - - mlr put 'if ($x == 1) { $y = 2 }' # This is OK - -Bodies for compound statements may be empty: - -.. code-block:: none - - mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable - -Variables ----------------------------------------------------------------- - -Miller has the following kinds of variables: - -**Built-in variables** such as ``NF``, ``NF``, ``FILENAME``, ``M_PI``, and ``M_E``. These are all capital letters and are read-only (although some of them change value from one record to another). - -**Fields of stream records**, accessed using the ``$`` prefix. These refer to fields of the current data-stream record. For example, in ``echo x=1,y=2 | mlr put '$z = $x + $y'``, ``$x`` and ``$y`` refer to input fields, and ``$z`` refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as ``$*``. - -**Out-of-stream variables** accessed using the ``@`` prefix. These refer to data which persist from one record to the next, including in ``begin`` and ``end`` blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as ``@*``. - -**Local variables** are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables. - -**Keywords** are not variables, but since their names are reserved, you cannot use these names for local variables. - -Built-in variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are written all in capital letters, such as ``NR``, ``NF``, ``FILENAME``, and only a small, specific set of them is defined by Miller. - -Namely, Miller supports the following five built-in variables for :doc:`filter and put `, all ``awk``-inspired: ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME``, as well as the mathematical constants ``M_PI`` and ``M_E``. Lastly, the ``ENV`` hashmap allows read access to environment variables, e.g. ``ENV["HOME"]`` or ``ENV["foo_".$hostname]``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter 'FNR == 2' data/small* - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 - a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$fnr = FNR' data/small* - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,fnr=1 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,fnr=2 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,fnr=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,fnr=4 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,fnr=5 - 1=a,2=b,3=i,4=x,5=y,fnr=1 - 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533,fnr=2 - 1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797,fnr=3 - 1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776,fnr=4 - 1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463,fnr=5 - 1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729,fnr=6 - a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001,fnr=1 - a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134,fnr=2 - a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930,fnr=3 - a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758,fnr=4 - a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627,fnr=5 - -Their values of ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME`` change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ``ENV`` is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution. - -Their **scope is global**: you can refer to them in any ``filter`` or ``put`` statement. Their values are assigned by the input-record reader: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv put '$nr = NR' data/a.csv - a,b,c,nr - 1,2,3,1 - 4,5,6,2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv - a,b,c,nr - 1,2,3,1 - 1,2,3,1 - 1,2,3,1 - 4,5,6,2 - 4,5,6,2 - 4,5,6,2 - -The **extent** is for the duration of the put/filter: in a ``begin`` statement (which executes before the first input record is consumed) you will find ``NR=1`` and in an ``end`` statement (which is executed after the last input record is consumed) you will find ``NR`` to be the total number of records ingested. - -These are all **read-only** for the ``mlr put`` and ``mlr filter`` DSLs: they may be assigned from, e.g. ``$nr=NR``, but they may not be assigned to: ``NR=100`` is a syntax error. - -Field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Names of fields within stream records must be specified using a ``$`` in :doc:`filter and put expressions `, even though the dollar signs don't appear in the data stream itself. For integer-indexed data, this looks like ``awk``'s ``$1,$2,$3``, except that Miller allows non-numeric names such as ``$quantity`` or ``$hostname``. Likewise, enclose string literals in double quotes in ``filter`` expressions even though they don't appear in file data. In particular, ``mlr filter '$x=="abc"'`` passes through the record ``x=abc``. - -If field names have **special characters** such as ``.`` then you can use braces, e.g. ``'${field.name}'``. - -You may also use a **computed field name** in square brackets, e.g. - -.. code-block:: none - :emphasize-lines: 1,1 - - echo a=3,b=4 | mlr filter '$["x"] < 0.5' - -.. code-block:: none - :emphasize-lines: 1,1 - - echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b' - s=green,t=blue,a=3,b=4,green_blue=12 - -Notes: - -The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream. - -Their **extent** is limited to the current record; their **scope** is the ``filter`` or ``put`` command in which they appear. - -These are **read-write**: you can do ``$y=2*$x``, ``$x=$x+1``, etc. - -Records are Miller's output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with ``cut``, or records are excluded with ``filter`` or ``put -q``, etc. Simply assign a value to a field and it will be output. - -Positional field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1). - -Use ``$[[3]]`` to access the name of field 3. More generally, any expression evaluating to an integer can go between ``$[[`` and ``]]``. - -Then using a computed field name, ``$[ $[[3]] ]`` is the value in the third field. This has the shorter equivalent notation ``$[[[3]]]``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$[[3]] = "NEW"' data/small - a=pan,b=pan,NEW=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,NEW=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,NEW=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,NEW=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,NEW=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$[[[3]]] = "NEW"' data/small - a=pan,b=pan,i=NEW,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=NEW,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=NEW,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=NEW,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$NEW = $[[NR]]' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=a - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=b - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=i - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=x - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=y - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$NEW = $[[[NR]]]' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533,NEW=pan - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,NEW=pan - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776,NEW=3 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463,NEW=0.381399 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,NEW=0.863624 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$[[[NR]]] = "NEW"' data/small - a=NEW,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=NEW,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=NEW,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=NEW,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=NEW - -Right-hand side accesses to non-existent fields -- i.e. with index less than 1 or greater than ``NF`` -- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$[[6]] = "NEW"' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$[[[6]]] = "NEW"' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are prefixed with an at-sign, e.g. ``@sum``. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do ``@sum += $quantity``, or ``@sum[$color] += $quantity``, or ``@sum[$color][$shape] += $quantity``. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. ``@sum[NR] = $a + $b``, ``@sum[$a."-".$b] = $x``, etc. - -Their names and their values are entirely under your control; they change only when you assign to them. - -Just as for field names in stream records, if you want to define out-of-stream variables with **special characters** such as ``.`` then you can use braces, e.g. ``'@{variable.name}["index"]'``. - -You may use a **computed key** in square brackets, e.g. - -.. code-block:: none - :emphasize-lines: 1,1 - - echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all' - green_blue=12 - -Out-of-stream variables are **scoped** to the ``put`` command in which they appear. In particular, if you have two or more ``put`` commands separated by ``then``, each put will have its own set of out-of-stream variables: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/a.dkvp - a=1,b=2,c=3 - a=4,b=5,c=6 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp - a=10,b=2,c=3 - a=40,b=5,c=6 - sum=5 - sum=50 - -Out-of-stream variables' **extent** is from the start to the end of the record stream, i.e. every time the ``put`` or ``filter`` statement referring to them is executed. - -Out-of-stream variables are **read-write**: you can do ``$sum=@sum``, ``@sum=$sum``, etc. - -Indexed out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Using an index on the ``@count`` and ``@sum`` variables, we get the benefit of the ``-g`` (group-by) option which ``mlr stats1`` and various other Miller commands have: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q ' - @x_count[$a] += 1; - @x_sum[$a] += $x; - end { - emit @x_count, "a"; - emit @x_sum, "a"; - } - ' ../data/small - a=pan,x_count=2 - a=eks,x_count=3 - a=wye,x_count=2 - a=zee,x_count=2 - a=hat,x_count=1 - a=pan,x_sum=0.849416 - a=eks,x_sum=1.751863 - a=wye,x_sum=0.777892 - a=zee,x_sum=1.125680 - a=hat,x_sum=0.031442 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats1 -a count,sum -f x -g a ../data/small - a=pan,x_count=2,x_sum=0.849416 - a=eks,x_count=3,x_sum=1.751863 - a=wye,x_count=2,x_sum=0.777892 - a=zee,x_count=2,x_sum=1.125680 - a=hat,x_count=1,x_sum=0.031442 - -Indices can be arbitrarily deep -- here there are two or more of them: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/medium put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - emit (@x_count, @x_sum), "a", "b"; - } - ' - a=pan,b=pan,x_count=427,x_sum=219.185129 - a=pan,b=wye,x_count=395,x_sum=198.432931 - a=pan,b=eks,x_count=429,x_sum=216.075228 - a=pan,b=hat,x_count=417,x_sum=205.222776 - a=pan,b=zee,x_count=413,x_sum=205.097518 - a=eks,b=pan,x_count=371,x_sum=179.963030 - a=eks,b=wye,x_count=407,x_sum=196.945286 - a=eks,b=zee,x_count=357,x_sum=176.880365 - a=eks,b=eks,x_count=413,x_sum=215.916097 - a=eks,b=hat,x_count=417,x_sum=208.783171 - a=wye,b=wye,x_count=377,x_sum=185.295850 - a=wye,b=pan,x_count=392,x_sum=195.847900 - a=wye,b=hat,x_count=426,x_sum=212.033183 - a=wye,b=zee,x_count=385,x_sum=194.774048 - a=wye,b=eks,x_count=386,x_sum=204.812961 - a=zee,b=pan,x_count=389,x_sum=202.213804 - a=zee,b=wye,x_count=455,x_sum=233.991394 - a=zee,b=eks,x_count=391,x_sum=190.961778 - a=zee,b=zee,x_count=403,x_sum=206.640635 - a=zee,b=hat,x_count=409,x_sum=191.300006 - a=hat,b=wye,x_count=423,x_sum=208.883010 - a=hat,b=zee,x_count=385,x_sum=196.349450 - a=hat,b=eks,x_count=389,x_sum=189.006793 - a=hat,b=hat,x_count=381,x_sum=182.853532 - a=hat,b=pan,x_count=363,x_sum=168.553807 - -The idea is that ``stats1``, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do. - -Begin/end blocks can be mixed with pattern/action blocks. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put ' - begin { - @num_total = 0; - @num_positive = 0; - }; - @num_total += 1; - $x > 0.0 { - @num_positive += 1; - $y = log10($x); $z = sqrt($y) - }; - end { - emitf @num_total, @num_positive - } - ' data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - num_total=5,num_positive=3 - -.. _reference-dsl-local-variables: - -Local variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can't be computed using square brackets). There are three kinds of local variables: **arguments** to functions/subroutines, **variables bound within for-loops**, and **locals** defined within control blocks. They may be untyped using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, ``bool``, and ``map``. - -For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - # Here I'm using a specified random-number seed so this example always - # produces the same output for this web document: in everyday practice we - # would leave off the --seed 12345 part. - mlr --seed 12345 seqgen --start 1 --stop 10 then put ' - func f(a, b) { # function arguments a and b - r = 0.0; # local r scoped to the function - for (int i = 0; i < 6; i += 1) { # local i scoped to the for-loop - num u = urand(); # local u scoped to the for-loop - r += u; # updates r from the enclosing scope - } - r /= 6; - return a + (b - a) * r; - } - num o = f(10, 20); # local to the top-level scope - $o = o; - ' - i=1,o=14.662901 - i=2,o=17.881983 - i=3,o=14.586560 - i=4,o=16.402409 - i=5,o=16.336598 - i=6,o=14.622701 - i=7,o=15.983753 - i=8,o=13.852177 - i=9,o=15.472899 - i=10,o=15.643912 - -Things which are completely unsurprising, resembling many other languages: - -* Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named ``a`` then you can reassign the value of ``a`` to be something else within the function if you like. - -* However, you cannot redeclare the *type* of an argument or a local: ``var a=1; var a=2`` is an error but ``var a=1; a=2`` is OK. - -* All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference) - -* You can define locals (using ``var``, ``num``, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope. - -* If you assign to a local variable for the first time in a scope without declaring it as ``var``, ``num``, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as if ``var`` had been used. (See also :ref:`reference-dsl-type-checking` for an example.) I recommend always declaring variables explicitly to make the intended scoping clear. - -* Functions and subroutines never have access to locals from their callee (unless passed by value as arguments). - -Things which are perhaps surprising compared to other languages: - -* Type declarations using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, and ``bool`` are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are *implicitly* declared using ``var``. (Some examples are shown below.) - -* Type-checking is done at assignment time. For example, ``float f = 0`` is an error (since ``0`` is an integer), as is ``float f = 0.0; f = 1``. For this reason I prefer to use ``num`` over ``float`` in most contexts since ``num`` encompasses integer and floating-point values. More information about type-checking is at :ref:`reference-dsl-type-checking`. - -* Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in ``for (k, v in $*) { ... }`` ``for ((k1, k2), v in @*) { ... }`` if there are ``k``, ``v``, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop. - -* For C-style triple-for loops, if a for-loop variable is defined using ``var``, ``int``, etc. then it is scoped to that for-loop. E.g. ``for (i = 0; i < 10; i += 1) { ... }`` and ``for (int i = 0; i < 10; i += 1) { ... }``. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only. - -The following example demonstrates the scope rules: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/scope-example.mlr - func f(a) { # argument is local to the function - var b = 100; # local to the function - c = 100; # local to the function; does not overwrite outer c - return a + 1; - } - var a = 10; # local at top level - var b = 20; # local at top level - c = 30; # local at top level; there is no more-outer-scope c - if (NR == 3) { - var a = 40; # scoped to the if-statement; doesn't overwrite outer a - b = 50; # not scoped to the if-statement; overwrites outer b - c = 60; # not scoped to the if-statement; overwrites outer c - d = 70; # there is no outer d so a local d is created here - - $inner_a = a; - $inner_b = b; - $inner_c = c; - $inner_d = d; - } - $outer_a = a; - $outer_b = b; - $outer_c = c; - $outer_d = d; # there is no outer d defined so no assignment happens - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/scope-example.dat - n=1,x=123 - n=2,x=456 - n=3,x=789 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr - n 1 - x 123 - outer_a 10 - outer_b 20 - outer_c 30 - - n 2 - x 456 - outer_a 10 - outer_b 20 - outer_c 30 - - n 3 - x 789 - inner_a 40 - inner_b 50 - inner_c 60 - inner_d 70 - outer_a 10 - outer_b 50 - outer_c 60 - -And this example demonstrates the type-declaration rules: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/type-decl-example.mlr - subr s(a, str b, int c) { # a is implicitly var (untyped). - # b is explicitly str. - # c is explicitly int. - # The type-checking is done at the callsite - # when arguments are bound to parameters. - # - var b = 100; # error # Re-declaration in the same scope is disallowed. - int n = 10; # Declaration of variable local to the subroutine. - n = 20; # Assignment is OK. - int n = 30; # error # Re-declaration in the same scope is disallowed. - str n = "abc"; # error # Re-declaration in the same scope is disallowed. - # - float f1 = 1; # error # 1 is an int, not a float. - float f2 = 2.0; # 2.0 is a float. - num f3 = 3; # 3 is a num. - num f4 = 4.0; # 4.0 is a num. - } # - # - call s(1, 2, 3); # Type-assertion '3 is int' is done here at the callsite. - # - k = "def"; # Top-level variable k. - # - for (str k, v in $*) { # k and v are bound here, masking outer k. - print k . ":" . v; # k is explicitly str; v is implicitly var. - } # - # - print "k is".k; # k at this scope level is still "def". - print "v is".v; # v is undefined in this scope. - # - i = -1; # - for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, unless - # declared local: i is outer, j is local to the loop. - print "inner i =" . i; # - print "inner j =" . j; # - } # - print "outer i =" . i; # i has been modified by the loop. - print "outer j =" . j; # j is undefined in this scope. - -Map literals -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSL has four kinds of hashmaps. **Stream records** are (single-level) maps from name to value. **Out-of-stream variables** and **local variables** can also be maps, although they can be multi-level hashmaps (e.g. ``@sum[$x][$y]``). The fourth kind is **map literals**. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. ``"3"`` rather than ``3``). - -For example, the following swaps the input stream's ``a`` and ``i`` fields, modifies ``y``, and drops the rest: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put ' - $* = { - "a": $i, - "i": $a, - "y": $y * 10, - } - ' data/small - a i y - 1 pan 7.268029 - 2 eks 5.221511 - 3 wye 3.383185 - 4 eks 1.341887 - 5 wye 8.636245 - -Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put ' - func f(map m): map { - m["x"] *= 200; - return m; - } - $* = f({"a": $a, "x": $x}); - ' - a=pan,x=69.358029 - a=eks,x=151.735993 - a=wye,x=40.920661 - a=eks,x=76.279879 - a=wye,x=114.657784 - -Like out-of-stream and local variables, map literals can be multi-level: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put -q ' - begin { - @o = { - "nrec": 0, - "nkey": {"numeric":0, "non-numeric":0}, - }; - } - @o["nrec"] += 1; - for (k, v in $*) { - if (is_numeric(v)) { - @o["nkey"]["numeric"] += 1; - } else { - @o["nkey"]["non-numeric"] += 1; - } - } - end { - dump @o; - } - ' - { - "nrec": 5, - "nkey": { - "numeric": 15, - "non-numeric": 10 - } - } - -By default, map-valued expressions are dumped using JSON formatting. If you use ``dump`` to print a hashmap with integer keys and you don't want them double-quoted (JSON-style) then you can use ``mlr put --jknquoteint``. See also ``mlr put --help``. - -.. _reference-dsl-type-checking: - -Type-checking -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSLs support two optional kinds of type-checking. One is inline **type-tests** and **type-assertions** within expressions. The other is **type declarations** for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections. - -Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data. - -.. _reference-dsl-type-tests-and-assertions: - -Type-test and type-assertion expressions -................................................................ - -The following ``is...`` functions take a value and return a boolean indicating whether the argument is of the indicated type. The ``assert_...`` functions return their argument if it is of the specified type, and cause a fatal error otherwise: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -F | grep ^is - is_absent - is_bool - is_boolean - is_empty - is_empty_map - is_float - is_int - is_map - is_nonempty_map - is_not_empty - is_not_map - is_not_null - is_null - is_numeric - is_present - is_string - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -F | grep ^assert - asserting_absent - asserting_bool - asserting_boolean - asserting_empty - asserting_empty_map - asserting_float - asserting_int - asserting_map - asserting_nonempty_map - asserting_not_empty - asserting_not_map - asserting_not_null - asserting_null - asserting_numeric - asserting_present - asserting_string - -Please see :ref:`cookbook-data-cleaning-examples` for examples of how to use these. - -Type-declarations for local variables, function parameter, and function return values -............................................................................................... - -Local variables can be defined either untyped as in ``x = 1``, or typed as in ``int x = 1``. Types include **var** (explicitly untyped), **int**, **float**, **num** (int or float), **str**, **bool**, and **map**. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in ``int x = 1`` or in any subsequent assignments to the same variable farther down in the scope. - -The reason for ``num`` is that ``int`` and ``float`` typedecls are very precise: - -.. code-block:: none - - float a = 0; # Runtime error since 0 is int not float - int b = 1.0; # Runtime error since 1.0 is float not int - num c = 0; # OK - num d = 1.0; # OK - -A suggestion is to use ``num`` for general use when you want numeric content, and use ``int`` when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints). - -The ``var`` type declaration indicates no type restrictions, e.g. ``var x = 1`` has the same type restrictions on ``x`` as ``x = 1``. The difference is in intentional shadowing: if you have ``x = 1`` in outer scope and ``x = 2`` in inner scope (e.g. within a for-loop or an if-statement) then outer-scope ``x`` has value 2 after the second assignment. But if you have ``var x = 2`` in the inner scope, then you are declaring a variable scoped to the inner block.) For example: - -.. code-block:: none - - x = 1; - if (NR == 4) { - x = 2; # Refers to outer-scope x: value changes from 1 to 2. - } - print x; # Value of x is now two - -.. code-block:: none - - x = 1; - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Likewise function arguments can optionally be typed, with type enforced when the function is called: - -.. code-block:: none - - func f(map m, int i) { - ... - } - $a = f({1:2, 3:4}, 5); # OK - $b = f({1:2, 3:4}, "abc"); # Runtime error - $c = f({1:2, 3:4}, $x); # Runtime error for records with non-integer field named x - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Thirdly, function return values can be type-checked at the point of ``return`` using ``:`` and a typedecl after the parameter list: - -.. code-block:: none - - func f(map m, int i): bool { - ... - ... - if (...) { - return "false"; # Runtime error if this branch is taken - } - ... - ... - if (...) { - return retval; # Runtime error if this function doesn't have an in-scope - # boolean-valued variable named retval - } - ... - ... - # In Miller if your functions don't explicitly return a value, they return absent-null. - # So it would also be a runtime error on reaching the end of this function without - # an explicit return statement. - } - -Null data: empty and absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :ref:`reference-null-data`. - -Aggregate variable assignments -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the ``$*`` syntax: - -* Recursive copy of out-of-stream variables -* Out-of-stream variable assigned to full stream record -* Full stream record assigned to an out-of-stream variable - -Example recursive copy of out-of-stream variables: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small - { - "v": { - "sum": 2.264762, - "count": 5 - } - } - { - "v": { - "sum": 2.264762, - "count": 5 - }, - "w": { - "sum": 2.264762, - "count": 5 - } - } - -Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -Example of full stream record assigned to an out-of-stream variable, finding the record for which the ``x`` field has the largest value in the input stream: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - -Keywords for filter and put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-all-keywords - all: used in "emit", "emitp", and "unset" as a synonym for @* - - begin: defines a block of statements to be executed before input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'begin { @count = 0 }' - - bool: declares a boolean local variable in the current curly-braced scope. - Type-checking happens at assignment: 'bool b = 1' is an error. - - break: causes execution to continue after the body of the current - for/while/do-while loop. - - call: used for invoking a user-defined subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - continue: causes execution to skip the remaining statements in the body of - the current for/while/do-while loop. For-loop increments are still applied. - - do: with "while", introduces a do-while loop. The body statements must be wrapped - in curly braces. - - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - - edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' - - elif: the way Miller spells "else if". The body statements must be wrapped - in curly braces. - - else: terminates an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - - end: defines a block of statements to be executed after input records - are ingested. The body statements must be wrapped in curly braces. - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' - - eprint: prints expression immediately to stderr. - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' - - eprintn: prints expression immediately to stderr, without trailing newline. - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' - - false: the boolean literal value. - - filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' - - float: declares a floating-point local variable in the current curly-braced scope. - Type-checking happens at assignment: 'float x = 0' is an error. - - for: defines a for-loop using one of three styles. The body statements must - be wrapped in curly braces. - For-loop over stream record: - Example: 'for (k, v in $*) { ... }' - For-loop over out-of-stream variables: - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - C-style for-loop: - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' - - func: used for defining a user-defined function. - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' - - if: starts an if/elif/elif chain. The body statements must be wrapped - in curly braces. - - in: used in for-loops over stream records or out-of-stream variables. - - int: declares an integer local variable in the current curly-braced scope. - Type-checking happens at assignment: 'int x = 0.0' is an error. - - map: declares an map-valued local variable in the current curly-braced scope. - Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is - always OK. map b = a is OK or not depending on whether a is a map. - - num: declares an int/float local variable in the current curly-braced scope. - Type-checking happens at assignment: 'num b = true' is an error. - - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - printn: prints expression immediately to stdout, without trailing newline. - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' - - return: specifies the return value from a user-defined function. - Omitted return statements (including via if-branches) result in an absent-null - return value, which in turns results in a skipped assignment to an LHS. - - stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. - - stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. - - str: declares a string local variable in the current curly-braced scope. - Type-checking happens at assignment. - - subr: used for defining a subroutine. - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' - - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - - true: the boolean literal value. - - unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' - - var: declares an untyped local variable in the current curly-braced scope. - Examples: 'var a=1', 'var xyz=""' - - while: introduces a while loop, or with "do", introduces a do-while loop. - The body statements must be wrapped in curly braces. - - ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' - - FILENAME: evaluates to the name of the current file being processed. - - FILENUM: evaluates to the number of the current file being processed, - starting with 1. - - FNR: evaluates to the number of the current record within the current file - being processed, starting with 1. Resets at the start of each file. - - IFS: evaluates to the input field separator from the command line. - - IPS: evaluates to the input pair separator from the command line. - - IRS: evaluates to the input record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - - M_E: the mathematical constant e. - - M_PI: the mathematical constant pi. - - NF: evaluates to the number of fields in the current record. - - NR: evaluates to the number of the current record over all files - being processed, starting with 1. Does not reset at the start of each file. - - OFS: evaluates to the output field separator from the command line. - - OPS: evaluates to the output pair separator from the command line. - - ORS: evaluates to the output record separator from the command line, - or to LF or CRLF from the input data if in autodetect mode (which is - the default). - -Operator precedence ----------------------------------------------------------------- - -Operators are listed in order of decreasing precedence, highest first. - -.. code-block:: none - - Operators Associativity - --------- ------------- - () left to right - ** right to left - ! ~ unary+ unary- & right to left - binary* / // % left to right - binary+ binary- . left to right - << >> left to right - & left to right - ^ left to right - | left to right - < <= > >= left to right - == != =~ !=~ left to right - && left to right - ^^ left to right - || left to right - ? : right to left - = N/A for Miller (there is no $a=$b=$c) - -Operator and function semantics ----------------------------------------------------------------- - -* Functions are in general pass-throughs straight to the system-standard C library. - -* The ``min`` and ``max`` functions are different from other multi-argument functions which return null if any of their inputs are null: for ``min`` and ``max``, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string. - -* Symmetrically with respect to the bitwise OR, XOR, and AND operators ``|``, ``^``, ``&``, Miller has logical operators ``||``, ``^^``, ``&&``: the logical XOR not existing in C. - -* The exponentiation operator ``**`` is familiar from many languages. - -* The regex-match and regex-not-match operators ``=~`` and ``!=~`` are similar to those in Ruby and Perl. - -Control structures ----------------------------------------------------------------- - -Pattern-action blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are reminiscent of ``awk`` syntax. They can be used to allow assignments to be done only when appropriate -- e.g. for math-function domain restrictions, regex-matching, and so on: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1 - x=2 - x=3 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp - x=-1 - x=0 - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/put-gating-example-2.dkvp - a=abc_123 - a=some other name - a=xyz_789 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp - a=abc_123,b=left_abc,c=right_123 - a=some other name - a=xyz_789,b=left_xyz,c=right_789 - -This produces heteregenous output which Miller, of course, has no problems with (see :doc:`record-heterogeneity`). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes ``put`` to evaluate the boolean expression (along with any side effects, namely, regex-captures ``\1``, ``\2``, etc.) but doesn't use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp - x=-1,y=nan,z=nan - x=0,y=-inf,z=nan - x=1,y=0.000000,z=0.000000 - x=2,y=0.301030,z=0.548662 - x=3,y=0.477121,z=0.690740 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp - a=abc_123,b=left_abc,c=right_123 - a=some other name,b=left_,c=right_ - a=xyz_789,b=left_xyz,c=right_789 - -If-statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are again reminiscent of ``awk``. Pattern-action blocks are a special case of ``if`` with no ``elif`` or ``else`` blocks, no ``if`` keyword, and parentheses optional around the boolean expression: - -.. code-block:: none - - mlr put 'NR == 4 {$foo = "bar"}' - -.. code-block:: none - - mlr put 'if (NR == 4) {$foo = "bar"}' - -Compound statements use ``elif`` (rather than ``elsif`` or ``else if``): - -.. code-block:: none - - mlr put ' - if (NR == 2) { - ... - } elif (NR ==4) { - ... - } elif (NR ==6) { - ... - } else { - ... - } - ' - -While and do-while loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``while`` and ``do-while`` are unsurprising in comparison to various languages, as are ``break`` and ``continue``: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x=1,y=2 | mlr put ' - while (NF < 10) { - $[NF+1] = "" - } - $foo = "bar" - ' - x=1,y=2,3=,4=,5=,6=,7=,8=,9=,10=,foo=bar - -.. code-block:: none - :emphasize-lines: 1,1 - - echo x=1,y=2 | mlr put ' - do { - $[NF+1] = ""; - if (NF == 5) { - break - } - } while (NF < 10); - $foo = "bar" - ' - x=1,y=2,3=,4=,5=,foo=bar - -A ``break`` or ``continue`` within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. -The existence of ``while``, ``do-while``, and ``for`` loops in Miller's DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in ``begin`` or ``end`` blocks, and once *per record* otherwise. For example, **while (NR < 10) will never terminate as NR is only incremented between records**. - -For-loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -While Miller's ``while`` and ``do-while`` statements are much as in many other languages, ``for`` loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of ``foreach``, as in (for example) PHP. There are **for-loops over map keys** and **for-loops over key-value tuples**. Additionally, Miller has a **C-style triple-for loop** with initialize, test, and update statements. - -As with ``while`` and ``do-while``, a ``break`` or ``continue`` within nested control structures will propagate to the innermost loop enclosing them, if any, and a ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. - -Key-only for-loops -................................................................ - -The ``key`` variable is always bound to the *key* of key-value pairs: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small put ' - print "NR = ".NR; - for (key in $*) { - value = $[key]; - print " key:" . key . " value:".value; - } - - ' - NR = 1 - key:a value:pan - key:b value:pan - key:i value:1 - key:x value:0.346790 - key:y value:0.726803 - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - NR = 2 - key:a value:eks - key:b value:pan - key:i value:2 - key:x value:0.758680 - key:y value:0.522151 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - NR = 3 - key:a value:wye - key:b value:wye - key:i value:3 - key:x value:0.204603 - key:y value:0.338319 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - NR = 4 - key:a value:eks - key:b value:wye - key:i value:4 - key:x value:0.381399 - key:y value:0.134189 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - NR = 5 - key:a value:wye - key:b value:pan - key:i value:5 - key:x value:0.573289 - key:y value:0.863624 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put ' - end { - o = {1:2, 3:{4:5}}; - for (key in o) { - print " key:" . key . " valuetype:" . typeof(o[key]); - } - } - ' - key:1 valuetype:int - key:3 valuetype:map - -Note that the value corresponding to a given key may be gotten as through a **computed field name** using square brackets as in ``$[key]`` for stream records, or by indexing the looped-over variable using square brackets. - -Key-value for-loops -................................................................ - -Single-level keys may be gotten at using either ``for(k,v)`` or ``for((k),v)``; multi-level keys may be gotten at using ``for((k1,k2,k3),v)`` and so on. The ``v`` variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn't deep enough then the loop body won't be executed. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/for-srec-example.tbl - label1 label2 f1 f2 f3 - blue green 100 240 350 - red green 120 11 195 - yellow blue 140 0 240 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --pprint --from data/for-srec-example.tbl put ' - $sum1 = $f1 + $f2 + $f3; - $sum2 = 0; - $sum3 = 0; - for (key, value in $*) { - if (key =~ "^f[0-9]+") { - $sum2 += value; - $sum3 += $[key]; - } - } - ' - label1 label2 f1 f2 f3 sum1 sum2 sum3 - blue green 100 240 350 690 690 690 - red green 120 11 195 326 326 326 - yellow blue 140 0 240 380 380 380 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }' - a b i x y a_type b_type i_type x_type y_type - pan pan 1 0.3467901443380824 0.7268028627434533 string string int float float - eks pan 2 0.7586799647899636 0.5221511083334797 string string int float float - wye wye 3 0.20460330576630303 0.33831852551664776 string string int float float - eks wye 4 0.38139939387114097 0.13418874328430463 string string int float float - wye pan 5 0.5732889198020006 0.8636244699032729 string string int float float - -Note that the value of the current field in the for-loop can be gotten either using the bound variable ``value``, or through a **computed field name** using square brackets as in ``$[key]``. - -Important note: to avoid inconsistent looping behavior in case you're setting new fields (and/or unsetting existing ones) while looping over the record, **Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself**: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put ' - $sum1 = 0; - $sum2 = 0; - for (k,v in $*) { - if (is_numeric(v)) { - $sum1 +=v; - $sum2 += $[k]; - } - } - ' - a b i x y sum1 sum2 - pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 8.294372 - eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 13.123324 - wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 14.171687 - eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 18.062353 - wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 25.747654 - -It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put ' - sum = 0; - for (k,v in $*) { - if (is_numeric(v)) { - sum += $[k]; - } - } - $sum = sum - ' - a b i x y sum - pan pan 1 0.3467901443380824 0.7268028627434533 2.073593 - eks pan 2 0.7586799647899636 0.5221511083334797 3.280831 - wye wye 3 0.20460330576630303 0.33831852551664776 3.542922 - eks wye 4 0.38139939387114097 0.13418874328430463 4.515588 - wye pan 5 0.5732889198020006 0.8636244699032729 6.436913 - -You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after ``in``, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows: - -.. code-block:: none - - # Parentheses are optional for single key: - for (k1, v in @a["b"]["c"]) { ... } - for ((k1), v in @a["b"]["c"]) { ... } - # Parentheses are required for multiple keys: - for ((k1, k2), v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable - for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto - for ((k1, k2, k3), v in @a { ... } # Loop over variable starting from basename - for ((k1, k2, k3), v in @* { ... } # Loop over all variables (k1 is bound to basename) - -That's confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable ``@myvar`` is populated as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { dump } - ' - { - "myvar": { - 1: 2, - 3: { - 4: 5 - }, - 6: { - 7: { - 8: 9 - } - } - } - } - -Then we can get at various values as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for (k, v in @myvar) { - print - "key=" . k . - ",valuetype=" . typeof(v); - } - } - ' - key=1,valuetype=int - key=3,valuetype=map - key=6,valuetype=map - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } - ' - key1=3,key2=4,valuetype=int - key1=6,key2=7,valuetype=map - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr -n put --jknquoteint -q ' - begin { - @myvar = { - 1: 2, - 3: { 4 : 5 }, - 6: { 7: { 8: 9 } } - } - } - end { - for ((k1, k2), v in @myvar[6]) { - print - "key1=" . k1 . - ",key2=" . k2 . - ",valuetype=" . typeof(v); - } - } - ' - key1=7,key2=8,valuetype=int - -C-style triple-for loops -................................................................ - -These are supported as follows: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put ' - num suma = 0; - for (a = 1; a <= NR; a += 1) { - suma += a; - } - $suma = suma; - ' - a b i x y suma - pan pan 1 0.3467901443380824 0.7268028627434533 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3 - wye wye 3 0.20460330576630303 0.33831852551664776 6 - eks wye 4 0.38139939387114097 0.13418874328430463 10 - wye pan 5 0.5732889198020006 0.8636244699032729 15 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put ' - num suma = 0; - num sumb = 0; - for (num a = 1, num b = 1; a <= NR; a += 1, b *= 2) { - suma += a; - sumb += b; - } - $suma = suma; - $sumb = sumb; - ' - a b i x y suma sumb - pan pan 1 0.3467901443380824 0.7268028627434533 1 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3 3 - wye wye 3 0.20460330576630303 0.33831852551664776 6 7 - eks wye 4 0.38139939387114097 0.13418874328430463 10 15 - wye pan 5 0.5732889198020006 0.8636244699032729 15 31 - -Notes: - -* In ``for (start; continuation; update) { body }``, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. ``for(i=1;;i+=1)``) it defaults to true. - -* In particular, you may use ``$``-variables and/or ``@``-variables in the start, continuation, and/or update steps (as well as the body, of course). - -* The typedecls such as ``int`` or ``num`` are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified. - -* Miller has no ``++`` or ``--`` operators. - -* As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty. - -Begin/end blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller supports an ``awk``-like ``begin/end`` syntax. The statements in the ``begin`` block are executed before any input records are read; the statements in the ``end`` block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with ``begin``, you might use a pattern/action block of the form ``FNR == 1 { ... }``.) All statements outside of ``begin`` or ``end`` are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put ' - begin { @sum = 0 }; - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - x_sum=4.536294 - -Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (not quite as in ``awk``, where they'd default to 0 either way), the above can be written more succinctly as - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put ' - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 - a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 - a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 - a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 - a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 - x_sum=4.536294 - -The **put -q** option is a shorthand which suppresses printing of each output record, with only ``emit`` statements being output. So to get only summary outputs, one could write - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q ' - @x_sum += $x; - end { emit @x_sum } - ' ../data/small - x_sum=4.536294 - -We can do similarly with multiple out-of-stream variables: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q ' - @x_count += 1; - @x_sum += $x; - end { - emit @x_count; - emit @x_sum; - } - ' ../data/small - x_count=10 - x_sum=4.536294 - -This is of course not much different than - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats1 -a count,sum -f x ../data/small - x_count=10,x_sum=4.536294 - -Note that it's a syntax error for begin/end blocks to refer to field names (beginning with ``$``), since these execute outside the context of input records. - -Output statements ----------------------------------------------------------------- - -You can **output** variable-values or expressions in **five ways**: - -* **Assign** them to stream-record fields. For example, ``$cumulative_sum = @sum``. For another example, ``$nr = NR`` adds a field named ``nr`` to each output record, containing the value of the built-in variable ``NR`` as of when that record was ingested. - -* Use the **print** or **eprint** keywords which immediately print an expression *directly to standard output or standard error*, respectively. Note that ``dump``, ``edump``, ``print``, and ``eprint`` don't output records which participate in ``then``-chaining; rather, they're just immediate prints to stdout/stderr. The ``printn`` and ``eprintn`` keywords are the same except that they don't print final newlines. Additionally, you can print to a specified file instead of stdout/stderr. - -* Use the **dump** or **edump** keywords, which *immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error* (respectively). - -* Use **tee** which formats the current stream record (not just an arbitrary string as with **print**) to a specific file. - -* Use **emit**/**emitp**/**emitf** to send out-of-stream variables' current values to the output record stream, e.g. ``@sum += $x; emit @sum`` which produces an extra output record such as ``sum=3.1648382``. - -For the first two options you are populating the output-records stream which feeds into the next verb in a ``then``-chain (if any), or which otherwise is formatted for output using ``--o...`` flags. - -For the last three options you are sending output directly to standard output, standard error, or a file. - -.. _reference-dsl-print-statements: - -Print statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``print`` statement is perhaps self-explanatory, but with a few light caveats: - -* There are four variants: ``print`` goes to stdout with final newline, ``printn`` goes to stdout without final newline (you can include one using "\n" in your output string), ``eprint`` goes to stderr with final newline, and ``eprintn`` goes to stderr without final newline. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* Print statements are for strings (``print "hello"``), or things which can be made into strings: numbers (``print 3``, ``print $a + $b``, or concatenations thereof (``print "a + b = " . ($a + $b)``). Maps (in ``$*``, map-valued out-of-stream or local variables, and map literals) aren't convertible into strings. If you print a map, you get ``{is-a-map}`` as output. Please use ``dump`` to print maps. - -* You can redirect print output to a file: ``mlr --from myfile.dat put 'print > "tap.txt", $x'`` ``mlr --from myfile.dat put 'o=$*; print > $a.".txt", $x'``. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-dump-statements: - -Dump statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``dump`` statement is for printing expressions, including maps, directly to stdout/stderr, respectively: - -* There are two variants: ``dump`` prints to stdout; ``edump`` prints to stderr. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* You can use ``dump`` to output single strings, numbers, or expressions including map-valued data. Map-valued data are printed as JSON. Miller allows string and integer keys in its map literals while JSON allows only string keys, so use ``mlr put --jknquoteint`` if you want integer-valued map keys not double-quoted. - -* If you use ``dump`` (or ``edump``) with no arguments, you get a JSON structure representing the current values of all out-of-stream variables. - -* As with ``print``, you can redirect output to files. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -Tee statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Records produced by a ``mlr put`` go downstream to the next verb in your ``then``-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using ``tee``. - -The syntax is, by example, ``mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index``. First is ``tee >``, then the filename expression (which can be an expression such as ``"tap.".$a.".dat"``), then a comma, then ``$*``. (Nothing else but ``$*`` is teeable.) - -See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-redirected-output-statements: - -Redirected-output statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The **print**, **dump** **tee**, **emitf**, **emit**, and **emitp** keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on. - -Details: - -* The ``print`` and ``dump`` keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword print - print: prints expression immediately to stdout. - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword dump - dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' - -* ``mlr put`` sends the current record (possibly modified by the ``put`` expression) to the output record stream. Records are then input to the following verb in a ``then``-chain (if any), else printed to standard output (unless ``put -q``). The **tee** keyword *additionally* writes the output record to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword tee - tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. - - emit with redirect and tee with redirect are identical, except tee can only - output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\] [A-Z\] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' - -* ``mlr put``'s ``emitf``, ``emitp``, and ``emit`` send out-of-stream variables to the output record stream. These are then input to the following verb in a ``then``-chain (if any), else printed to standard output. When redirected with ``>``, ``>>``, or ``|``, they *instead* write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword emitf - emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - - Please see http://johnkerl.org/miller/doc for more information. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword emitp - emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help-keyword emit - emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. - - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. - - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. - - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - - Please see http://johnkerl.org/miller/doc for more information. - -.. _reference-dsl-emit-statements: - -Emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three variants: ``emitf``, ``emit``, and ``emitp``. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using ``dump``), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including ``$*``, map-valued out-of-stream variables, the entire out-of-stream-variable collection ``@*``, map-valued local variables, map literals, or map-valued function return values. - -Use **emitf** to output several out-of-stream variables side-by-side in the same output record. For ``emitf`` these mustn't have indexing using ``@name[...]``. Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small - count=5,x_sum=2.264762,y_sum=2.585086 - -Use **emit** to output an out-of-stream variable. If it's non-indexed you'll get a simple key-value pair: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum += $x; end { dump }' data/small - { - "sum": 2.264762 - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum += $x; end { emit @sum }' data/small - sum=2.264762 - -If it's indexed then use as many names after ``emit`` as there are indices: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a] += $x; end { dump }' data/small - { - "sum": { - "pan": 0.346790, - "eks": 1.140079, - "wye": 0.777892 - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small - a=pan,sum=0.346790 - a=eks,sum=1.140079 - a=wye,sum=0.777892 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small - a=pan,b=pan,sum=0.346790 - a=eks,b=pan,sum=0.758680 - a=eks,b=wye,sum=0.381399 - a=wye,b=wye,sum=0.204603 - a=wye,b=pan,sum=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": { - "1": 0.346790 - } - }, - "eks": { - "pan": { - "2": 0.758680 - }, - "wye": { - "4": 0.381399 - } - }, - "wye": { - "wye": { - "3": 0.204603 - }, - "pan": { - "5": 0.573289 - } - } - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small - a=pan,b=pan,i=1,sum=0.346790 - a=eks,b=pan,i=2,sum=0.758680 - a=eks,b=wye,i=4,sum=0.381399 - a=wye,b=wye,i=3,sum=0.204603 - a=wye,b=pan,i=5,sum=0.573289 - -Now for **emitp**: if you have as many names following ``emit`` as there are levels in the out-of-stream variable's hashmap, then ``emit`` and ``emitp`` do the same thing. Where they differ is when you don't specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: ``emitp`` includes full prefixing (hence the ``p`` in ``emitp``) while ``emit`` takes the deepest hashmap key as the output-record key: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small - a=pan,pan=0.346790 - a=eks,pan=0.758680,wye=0.381399 - a=wye,wye=0.204603,pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small - pan=0.346790 - pan=0.758680,wye=0.381399 - wye=0.204603,pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small - a=pan,sum:pan=0.346790 - a=eks,sum:pan=0.758680,sum:wye=0.381399 - a=wye,sum:wye=0.204603,sum:pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum:pan:pan=0.346790,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:wye:wye=0.204603,sum:wye:pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum:pan:pan 0.346790 - sum:eks:pan 0.758680 - sum:eks:wye 0.381399 - sum:wye:wye 0.204603 - sum:wye:pan 0.573289 - -Use **--oflatsep** to specify the character which joins multilevel -keys for ``emitp`` (it defaults to a colon): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small - a=pan,sum/pan=0.346790 - a=eks,sum/pan=0.758680,sum/wye=0.381399 - a=wye,sum/wye=0.204603,sum/pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum/pan/pan=0.346790,sum/eks/pan=0.758680,sum/eks/wye=0.381399,sum/wye/wye=0.204603,sum/wye/pan=0.573289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small - sum/pan/pan 0.346790 - sum/eks/pan 0.758680 - sum/eks/wye 0.381399 - sum/wye/wye 0.204603 - sum/wye/pan 0.573289 - -Multi-emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can emit **multiple map-valued expressions side-by-side** by -including their names in parentheses: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/medium --opprint put -q ' - @x_count[$a][$b] += 1; - @x_sum[$a][$b] += $x; - end { - for ((a, b), _ in @x_count) { - @x_mean[a][b] = @x_sum[a][b] / @x_count[a][b] - } - emit (@x_sum, @x_count, @x_mean), "a", "b" - } - ' - a b x_sum x_count x_mean - pan pan 219.185129 427 0.513314 - pan wye 198.432931 395 0.502362 - pan eks 216.075228 429 0.503672 - pan hat 205.222776 417 0.492141 - pan zee 205.097518 413 0.496604 - eks pan 179.963030 371 0.485076 - eks wye 196.945286 407 0.483895 - eks zee 176.880365 357 0.495463 - eks eks 215.916097 413 0.522799 - eks hat 208.783171 417 0.500679 - wye wye 185.295850 377 0.491501 - wye pan 195.847900 392 0.499612 - wye hat 212.033183 426 0.497730 - wye zee 194.774048 385 0.505907 - wye eks 204.812961 386 0.530604 - zee pan 202.213804 389 0.519830 - zee wye 233.991394 455 0.514267 - zee eks 190.961778 391 0.488393 - zee zee 206.640635 403 0.512756 - zee hat 191.300006 409 0.467726 - hat wye 208.883010 423 0.493813 - hat zee 196.349450 385 0.509999 - hat eks 189.006793 389 0.485879 - hat hat 182.853532 381 0.479931 - hat pan 168.553807 363 0.464336 - -What this does is walk through the first out-of-stream variable (``@x_sum`` in this example) as usual, then for each keylist found (e.g. ``pan,wye``), include the values for the remaining out-of-stream variables (here, ``@x_count`` and ``@x_mean``). You should use this when all out-of-stream variables in the emit statement have **the same shape and the same keylists**. - -Emit-all statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use **emit all** (or ``emit @*`` which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of ``mlr stats1``): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}' - a b sum count - pan pan 0.346790 1 - eks pan 0.758680 1 - eks wye 0.381399 1 - wye wye 0.204603 1 - wye pan 0.573289 1 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}' - a b sum - pan pan 0.346790 - eks pan 0.758680 - eks wye 0.381399 - wye wye 0.204603 - wye pan 0.573289 - - a b count - pan pan 1 - eks pan 1 - eks wye 1 - wye wye 1 - wye pan 1 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}' - a b sum count - pan pan 0.346790 1 - eks pan 0.758680 1 - eks wye 0.381399 1 - wye wye 0.204603 1 - wye pan 0.573289 1 - -Unset statements ----------------------------------------------------------------- - -You can clear a map key by assigning the empty string as its value: ``$x=""`` or ``@x=""``. Using ``unset`` you can remove the key entirely. Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/small - a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put 'unset $x, $a' data/small - b=pan,i=1,y=0.7268028627434533 - b=pan,i=2,y=0.5221511083334797 - b=wye,i=3,y=0.33831852551664776 - b=wye,i=4,y=0.13418874328430463 - b=pan,i=5,y=0.8636244699032729 - -This can also be done, of course, using ``mlr cut -x``. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - { - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "eks": { - "pan": 0.758680, - "wye": 0.381399 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - { - "sum": { - "pan": { - "pan": 0.346790 - }, - "wye": { - "wye": 0.204603, - "pan": 0.573289 - } - } - } - -If you use ``unset all`` (or ``unset @*`` which is synonymous), that will unset all out-of-stream variables which have been defined up to that point. - -Filter statements ----------------------------------------------------------------- - -You can use ``filter`` within ``put``. In fact, the following two are synonymous: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter 'NR==2 || NR==3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put 'filter NR==2 || NR==3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - -The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small - a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$z = $x * $y; filter $z > 0.3' data/small - a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797,z=0.396146 - a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729,z=0.495106 - -Built-in functions for filter and put, summary ----------------------------------------------------------------- - -+----------------------------+------------+----------+ -| ``Name`` | Class | #Args | -+============================+============+==========+ -| ``+`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``+`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``-`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``-`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``*`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``/`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``//`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.+`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.+`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``.-`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.-`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``.*`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``./`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``.//`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``%`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``**`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``|`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``^`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``&`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``~`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``<<`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``>>`` | arithmetic | 2 | -+----------------------------+------------+----------+ -| ``bitcount`` | arithmetic | 1 | -+----------------------------+------------+----------+ -| ``==`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``=~`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!=~`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``>`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``>=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``<`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``<=`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``&&`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``||`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``^^`` | boolean | 2 | -+----------------------------+------------+----------+ -| ``!`` | boolean | 1 | -+----------------------------+------------+----------+ -| ``? :`` | boolean | 3 | -+----------------------------+------------+----------+ -| ``.`` | string | 2 | -+----------------------------+------------+----------+ -| ``gsub`` | string | 3 | -+----------------------------+------------+----------+ -| ``regextract`` | string | 2 | -+----------------------------+------------+----------+ -| ``regextract_or_else`` | string | 3 | -+----------------------------+------------+----------+ -| ``strlen`` | string | 1 | -+----------------------------+------------+----------+ -| ``sub`` | string | 3 | -+----------------------------+------------+----------+ -| ``ssub`` | string | 3 | -+----------------------------+------------+----------+ -| ``substr`` | string | 3 | -+----------------------------+------------+----------+ -| ``tolower`` | string | 1 | -+----------------------------+------------+----------+ -| ``toupper`` | string | 1 | -+----------------------------+------------+----------+ -| ``truncate`` | string | 2 | -+----------------------------+------------+----------+ -| ``capitalize`` | string | 1 | -+----------------------------+------------+----------+ -| ``lstrip`` | string | 1 | -+----------------------------+------------+----------+ -| ``rstrip`` | string | 1 | -+----------------------------+------------+----------+ -| ``strip`` | string | 1 | -+----------------------------+------------+----------+ -| ``collapse_whitespace`` | string | 1 | -+----------------------------+------------+----------+ -| ``clean_whitespace`` | string | 1 | -+----------------------------+------------+----------+ -| ``system`` | string | 1 | -+----------------------------+------------+----------+ -| ``abs`` | math | 1 | -+----------------------------+------------+----------+ -| ``acos`` | math | 1 | -+----------------------------+------------+----------+ -| ``acosh`` | math | 1 | -+----------------------------+------------+----------+ -| ``asin`` | math | 1 | -+----------------------------+------------+----------+ -| ``asinh`` | math | 1 | -+----------------------------+------------+----------+ -| ``atan`` | math | 1 | -+----------------------------+------------+----------+ -| ``atan2`` | math | 2 | -+----------------------------+------------+----------+ -| ``atanh`` | math | 1 | -+----------------------------+------------+----------+ -| ``cbrt`` | math | 1 | -+----------------------------+------------+----------+ -| ``ceil`` | math | 1 | -+----------------------------+------------+----------+ -| ``cos`` | math | 1 | -+----------------------------+------------+----------+ -| ``cosh`` | math | 1 | -+----------------------------+------------+----------+ -| ``erf`` | math | 1 | -+----------------------------+------------+----------+ -| ``erfc`` | math | 1 | -+----------------------------+------------+----------+ -| ``exp`` | math | 1 | -+----------------------------+------------+----------+ -| ``expm1`` | math | 1 | -+----------------------------+------------+----------+ -| ``floor`` | math | 1 | -+----------------------------+------------+----------+ -| ``invqnorm`` | math | 1 | -+----------------------------+------------+----------+ -| ``log`` | math | 1 | -+----------------------------+------------+----------+ -| ``log10`` | math | 1 | -+----------------------------+------------+----------+ -| ``log1p`` | math | 1 | -+----------------------------+------------+----------+ -| ``logifit`` | math | 3 | -+----------------------------+------------+----------+ -| ``madd`` | math | 3 | -+----------------------------+------------+----------+ -| ``max`` | math | variadic | -+----------------------------+------------+----------+ -| ``mexp`` | math | 3 | -+----------------------------+------------+----------+ -| ``min`` | math | variadic | -+----------------------------+------------+----------+ -| ``mmul`` | math | 3 | -+----------------------------+------------+----------+ -| ``msub`` | math | 3 | -+----------------------------+------------+----------+ -| ``pow`` | math | 2 | -+----------------------------+------------+----------+ -| ``qnorm`` | math | 1 | -+----------------------------+------------+----------+ -| ``round`` | math | 1 | -+----------------------------+------------+----------+ -| ``roundm`` | math | 2 | -+----------------------------+------------+----------+ -| ``sgn`` | math | 1 | -+----------------------------+------------+----------+ -| ``sin`` | math | 1 | -+----------------------------+------------+----------+ -| ``sinh`` | math | 1 | -+----------------------------+------------+----------+ -| ``sqrt`` | math | 1 | -+----------------------------+------------+----------+ -| ``tan`` | math | 1 | -+----------------------------+------------+----------+ -| ``tanh`` | math | 1 | -+----------------------------+------------+----------+ -| ``urand`` | math | 0 | -+----------------------------+------------+----------+ -| ``urandrange`` | math | 2 | -+----------------------------+------------+----------+ -| ``urand32`` | math | 0 | -+----------------------------+------------+----------+ -| ``urandint`` | math | 2 | -+----------------------------+------------+----------+ -| ``dhms2fsec`` | time | 1 | -+----------------------------+------------+----------+ -| ``dhms2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``fsec2dhms`` | time | 1 | -+----------------------------+------------+----------+ -| ``fsec2hms`` | time | 1 | -+----------------------------+------------+----------+ -| ``gmt2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``localtime2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``hms2fsec`` | time | 1 | -+----------------------------+------------+----------+ -| ``hms2sec`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2dhms`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2gmt`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2gmt`` | time | 2 | -+----------------------------+------------+----------+ -| ``sec2gmtdate`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2localtime`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2localtime`` | time | 2 | -+----------------------------+------------+----------+ -| ``sec2localdate`` | time | 1 | -+----------------------------+------------+----------+ -| ``sec2hms`` | time | 1 | -+----------------------------+------------+----------+ -| ``strftime`` | time | 2 | -+----------------------------+------------+----------+ -| ``strftime_local`` | time | 2 | -+----------------------------+------------+----------+ -| ``strptime`` | time | 2 | -+----------------------------+------------+----------+ -| ``strptime_local`` | time | 2 | -+----------------------------+------------+----------+ -| ``systime`` | time | 0 | -+----------------------------+------------+----------+ -| ``is_absent`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_bool`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_boolean`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_empty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_float`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_int`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_nonempty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_not_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_numeric`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_present`` | typing | 1 | -+----------------------------+------------+----------+ -| ``is_string`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_absent`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_bool`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_boolean`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_empty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_float`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_int`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_nonempty_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_empty`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_map`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_not_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_null`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_numeric`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_present`` | typing | 1 | -+----------------------------+------------+----------+ -| ``asserting_string`` | typing | 1 | -+----------------------------+------------+----------+ -| ``boolean`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``float`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``fmtnum`` | conversion | 2 | -+----------------------------+------------+----------+ -| ``hexfmt`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``int`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``string`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``typeof`` | conversion | 1 | -+----------------------------+------------+----------+ -| ``depth`` | maps | 1 | -+----------------------------+------------+----------+ -| ``haskey`` | maps | 2 | -+----------------------------+------------+----------+ -| ``joink`` | maps | 2 | -+----------------------------+------------+----------+ -| ``joinkv`` | maps | 3 | -+----------------------------+------------+----------+ -| ``joinv`` | maps | 2 | -+----------------------------+------------+----------+ -| ``leafcount`` | maps | 1 | -+----------------------------+------------+----------+ -| ``length`` | maps | 1 | -+----------------------------+------------+----------+ -| ``mapdiff`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapexcept`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapselect`` | maps | variadic | -+----------------------------+------------+----------+ -| ``mapsum`` | maps | variadic | -+----------------------------+------------+----------+ -| ``splitkv`` | maps | 3 | -+----------------------------+------------+----------+ -| ``splitkvx`` | maps | 3 | -+----------------------------+------------+----------+ -| ``splitnv`` | maps | 2 | -+----------------------------+------------+----------+ -| ``splitnvx`` | maps | 2 | -+----------------------------+------------+----------+ - -Built-in functions for filter and put ----------------------------------------------------------------- - -Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as ``min`` and ``max``. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference. - -You can get a list of all functions using **mlr -F**. - - -.. _reference-dsl-plus: - -\+ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - + (class=arithmetic #args=2): Addition. - - + (class=arithmetic #args=1): Unary plus. - - - -.. _reference-dsl-minus: - -\- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - - (class=arithmetic #args=2): Subtraction. - - - (class=arithmetic #args=1): Unary minus. - - - -.. _reference-dsl-times: - -\* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - * (class=arithmetic #args=2): Multiplication. - - - -.. _reference-dsl-/: - -/ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - / (class=arithmetic #args=2): Division. - - - -.. _reference-dsl-//: - -// -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - // (class=arithmetic #args=2): Integer division: rounds to negative (pythonic). - - - -.. _reference-dsl-.+: - -.+ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .+ (class=arithmetic #args=2): Addition, with integer-to-integer overflow - - .+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. - - - -.. _reference-dsl-.-: - -.- -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .- (class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - - .- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. - - - -.. _reference-dsl-.*: - -.* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .* (class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. - - - -.. _reference-dsl-./: - -./ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ./ (class=arithmetic #args=2): Division, with integer-to-integer overflow. - - - -.. _reference-dsl-.//: - -.// -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - .// (class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. - - - -.. _reference-dsl-%: - -% -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - % (class=arithmetic #args=2): Remainder; never negative-valued (pythonic). - - - -.. _reference-dsl-exponentiation: - -\** -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ** (class=arithmetic #args=2): Exponentiation; same as pow, but as an infix - operator. - - - -.. _reference-dsl-bitwise-or: - -\| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - | (class=arithmetic #args=2): Bitwise OR. - - - -.. _reference-dsl-^: - -^ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ^ (class=arithmetic #args=2): Bitwise XOR. - - - -.. _reference-dsl-&: - -& -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - & (class=arithmetic #args=2): Bitwise AND. - - - -.. _reference-dsl-~: - -~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ~ (class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the - regex-match operator: try '$y = ~$x'. - - - -.. _reference-dsl-<<: - -<< -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - << (class=arithmetic #args=2): Bitwise left-shift. - - - -.. _reference-dsl->>: - ->> -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - >> (class=arithmetic #args=2): Bitwise right-shift. - - - -.. _reference-dsl-==: - -== -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - == (class=boolean #args=2): String/numeric equality. Mixing number and string - results in string compare. - - - -.. _reference-dsl-!=: - -!= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - != (class=boolean #args=2): String/numeric inequality. Mixing number and string - results in string compare. - - - -.. _reference-dsl-=~: - -=~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - =~ (class=boolean #args=2): String (left-hand side) matches regex (right-hand - side), e.g. '$name =~ "^a.*b$"'. - - - -.. _reference-dsl-!=~: - -!=~ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - !=~ (class=boolean #args=2): String (left-hand side) does not match regex - (right-hand side), e.g. '$name !=~ "^a.*b$"'. - - - -.. _reference-dsl->: - -> -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - > (class=boolean #args=2): String/numeric greater-than. Mixing number and string - results in string compare. - - - -.. _reference-dsl->=: - ->= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - >= (class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number - and string results in string compare. - - - -.. _reference-dsl-<: - -< -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - < (class=boolean #args=2): String/numeric less-than. Mixing number and string - results in string compare. - - - -.. _reference-dsl-<=: - -<= -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - <= (class=boolean #args=2): String/numeric less-than-or-equals. Mixing number - and string results in string compare. - - - -.. _reference-dsl-&&: - -&& -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - && (class=boolean #args=2): Logical AND. - - - -.. _reference-dsl-||: - -|| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - || (class=boolean #args=2): Logical OR. - - - -.. _reference-dsl-^^: - -^^ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ^^ (class=boolean #args=2): Logical XOR. - - - -.. _reference-dsl-!: - -! -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ! (class=boolean #args=1): Logical negation. - - - -.. _reference-dsl-question-mark-colon: - -\? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ? : (class=boolean #args=3): Ternary operator. - - - -.. _reference-dsl-.: - -. -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - . (class=string #args=2): String concatenation. - - - -.. _reference-dsl-abs: - -abs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - abs (class=math #args=1): Absolute value. - - - -.. _reference-dsl-acos: - -acos -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - acos (class=math #args=1): Inverse trigonometric cosine. - - - -.. _reference-dsl-acosh: - -acosh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - acosh (class=math #args=1): Inverse hyperbolic cosine. - - - -.. _reference-dsl-asin: - -asin -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asin (class=math #args=1): Inverse trigonometric sine. - - - -.. _reference-dsl-asinh: - -asinh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asinh (class=math #args=1): Inverse hyperbolic sine. - - - -.. _reference-dsl-asserting_absent: - -asserting_absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_absent (class=typing #args=1): Returns argument if it is absent in the input data, else - throws an error. - - - -.. _reference-dsl-asserting_bool: - -asserting_bool -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_bool (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - - -.. _reference-dsl-asserting_boolean: - -asserting_boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_boolean (class=typing #args=1): Returns argument if it is present with boolean value, else - throws an error. - - - -.. _reference-dsl-asserting_empty: - -asserting_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_empty (class=typing #args=1): Returns argument if it is present in input with empty value, - else throws an error. - - - -.. _reference-dsl-asserting_empty_map: - -asserting_empty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_empty_map (class=typing #args=1): Returns argument if it is a map with empty value, else - throws an error. - - - -.. _reference-dsl-asserting_float: - -asserting_float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_float (class=typing #args=1): Returns argument if it is present with float value, else - throws an error. - - - -.. _reference-dsl-asserting_int: - -asserting_int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_int (class=typing #args=1): Returns argument if it is present with int value, else - throws an error. - - - -.. _reference-dsl-asserting_map: - -asserting_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_map (class=typing #args=1): Returns argument if it is a map, else throws an error. - - - -.. _reference-dsl-asserting_nonempty_map: - -asserting_nonempty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_nonempty_map (class=typing #args=1): Returns argument if it is a non-empty map, else throws - an error. - - - -.. _reference-dsl-asserting_not_empty: - -asserting_not_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_empty (class=typing #args=1): Returns argument if it is present in input with non-empty - value, else throws an error. - - - -.. _reference-dsl-asserting_not_map: - -asserting_not_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_map (class=typing #args=1): Returns argument if it is not a map, else throws an error. - - - -.. _reference-dsl-asserting_not_null: - -asserting_not_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_not_null (class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), - else throws an error. - - - -.. _reference-dsl-asserting_null: - -asserting_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_null (class=typing #args=1): Returns argument if it is null (empty or absent), else throws - an error. - - - -.. _reference-dsl-asserting_numeric: - -asserting_numeric -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_numeric (class=typing #args=1): Returns argument if it is present with int or float value, - else throws an error. - - - -.. _reference-dsl-asserting_present: - -asserting_present -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_present (class=typing #args=1): Returns argument if it is present in input, else throws - an error. - - - -.. _reference-dsl-asserting_string: - -asserting_string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - asserting_string (class=typing #args=1): Returns argument if it is present with string (including - empty-string) value, else throws an error. - - - -.. _reference-dsl-atan: - -atan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atan (class=math #args=1): One-argument arctangent. - - - -.. _reference-dsl-atan2: - -atan2 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atan2 (class=math #args=2): Two-argument arctangent. - - - -.. _reference-dsl-atanh: - -atanh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - atanh (class=math #args=1): Inverse hyperbolic tangent. - - - -.. _reference-dsl-bitcount: - -bitcount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - bitcount (class=arithmetic #args=1): Count of 1-bits - - - -.. _reference-dsl-boolean: - -boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - boolean (class=conversion #args=1): Convert int/float/bool/string to boolean. - - - -.. _reference-dsl-capitalize: - -capitalize -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - capitalize (class=string #args=1): Convert string's first character to uppercase. - - - -.. _reference-dsl-cbrt: - -cbrt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cbrt (class=math #args=1): Cube root. - - - -.. _reference-dsl-ceil: - -ceil -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ceil (class=math #args=1): Ceiling: nearest integer at or above. - - - -.. _reference-dsl-clean_whitespace: - -clean_whitespace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - clean_whitespace (class=string #args=1): Same as collapse_whitespace and strip. - - - -.. _reference-dsl-collapse_whitespace: - -collapse_whitespace -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - collapse_whitespace (class=string #args=1): Strip repeated whitespace from string. - - - -.. _reference-dsl-cos: - -cos -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cos (class=math #args=1): Trigonometric cosine. - - - -.. _reference-dsl-cosh: - -cosh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - cosh (class=math #args=1): Hyperbolic cosine. - - - -.. _reference-dsl-depth: - -depth -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - depth (class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. - - - -.. _reference-dsl-dhms2fsec: - -dhms2fsec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - dhms2fsec (class=time #args=1): Recovers floating-point seconds as in - dhms2fsec("5d18h53m20.250000s") = 500000.250000 - - - -.. _reference-dsl-dhms2sec: - -dhms2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - dhms2sec (class=time #args=1): Recovers integer seconds as in - dhms2sec("5d18h53m20s") = 500000 - - - -.. _reference-dsl-erf: - -erf -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - erf (class=math #args=1): Error function. - - - -.. _reference-dsl-erfc: - -erfc -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - erfc (class=math #args=1): Complementary error function. - - - -.. _reference-dsl-exp: - -exp -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - exp (class=math #args=1): Exponential function e**x. - - - -.. _reference-dsl-expm1: - -expm1 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - expm1 (class=math #args=1): e**x - 1. - - - -.. _reference-dsl-float: - -float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - float (class=conversion #args=1): Convert int/float/bool/string to float. - - - -.. _reference-dsl-floor: - -floor -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - floor (class=math #args=1): Floor: nearest integer at or below. - - - -.. _reference-dsl-fmtnum: - -fmtnum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fmtnum (class=conversion #args=2): Convert int/float/bool to string using - printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers - are all long long or double. If you use formats like %d or %f, behavior is undefined. - - - -.. _reference-dsl-fsec2dhms: - -fsec2dhms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fsec2dhms (class=time #args=1): Formats floating-point seconds as in - fsec2dhms(500000.25) = "5d18h53m20.250000s" - - - -.. _reference-dsl-fsec2hms: - -fsec2hms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - fsec2hms (class=time #args=1): Formats floating-point seconds as in - fsec2hms(5000.25) = "01:23:20.250000" - - - -.. _reference-dsl-gmt2sec: - -gmt2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - gmt2sec (class=time #args=1): Parses GMT timestamp as integer seconds since - the epoch. - - - -.. _reference-dsl-gsub: - -gsub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - gsub (class=string #args=3): Example: '$name=gsub($name, "old", "new")' - (replace all). - - - -.. _reference-dsl-haskey: - -haskey -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - haskey (class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or - 'haskey(mymap, mykey)'. Error if 1st argument is not a map. - - - -.. _reference-dsl-hexfmt: - -hexfmt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hexfmt (class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". - - - -.. _reference-dsl-hms2fsec: - -hms2fsec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hms2fsec (class=time #args=1): Recovers floating-point seconds as in - hms2fsec("01:23:20.250000") = 5000.250000 - - - -.. _reference-dsl-hms2sec: - -hms2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - hms2sec (class=time #args=1): Recovers integer seconds as in - hms2sec("01:23:20") = 5000 - - - -.. _reference-dsl-int: - -int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - int (class=conversion #args=1): Convert int/float/bool/string to int. - - - -.. _reference-dsl-invqnorm: - -invqnorm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - invqnorm (class=math #args=1): Inverse of normal cumulative distribution - function. Note that invqorm(urand()) is normally distributed. - - - -.. _reference-dsl-is_absent: - -is_absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_absent (class=typing #args=1): False if field is present in input, true otherwise - - - -.. _reference-dsl-is_bool: - -is_bool -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_bool (class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. - - - -.. _reference-dsl-is_boolean: - -is_boolean -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_boolean (class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. - - - -.. _reference-dsl-is_empty: - -is_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_empty (class=typing #args=1): True if field is present in input with empty string value, false otherwise. - - - -.. _reference-dsl-is_empty_map: - -is_empty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_empty_map (class=typing #args=1): True if argument is a map which is empty. - - - -.. _reference-dsl-is_float: - -is_float -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_float (class=typing #args=1): True if field is present with value inferred to be float - - - -.. _reference-dsl-is_int: - -is_int -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_int (class=typing #args=1): True if field is present with value inferred to be int - - - -.. _reference-dsl-is_map: - -is_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_map (class=typing #args=1): True if argument is a map. - - - -.. _reference-dsl-is_nonempty_map: - -is_nonempty_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_nonempty_map (class=typing #args=1): True if argument is a map which is non-empty. - - - -.. _reference-dsl-is_not_empty: - -is_not_empty -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_empty (class=typing #args=1): False if field is present in input with empty value, true otherwise - - - -.. _reference-dsl-is_not_map: - -is_not_map -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_map (class=typing #args=1): True if argument is not a map. - - - -.. _reference-dsl-is_not_null: - -is_not_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_not_null (class=typing #args=1): False if argument is null (empty or absent), true otherwise. - - - -.. _reference-dsl-is_null: - -is_null -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_null (class=typing #args=1): True if argument is null (empty or absent), false otherwise. - - - -.. _reference-dsl-is_numeric: - -is_numeric -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_numeric (class=typing #args=1): True if field is present with value inferred to be int or float - - - -.. _reference-dsl-is_present: - -is_present -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_present (class=typing #args=1): True if field is present in input, false otherwise. - - - -.. _reference-dsl-is_string: - -is_string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - is_string (class=typing #args=1): True if field is present with string (including empty-string) value - - - -.. _reference-dsl-joink: - -joink -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joink (class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. - - - -.. _reference-dsl-joinkv: - -joinkv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joinkv (class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' - - - -.. _reference-dsl-joinv: - -joinv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - joinv (class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. - - - -.. _reference-dsl-leafcount: - -leafcount -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - leafcount (class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, - same as length. - - - -.. _reference-dsl-length: - -length -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - length (class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. - - - -.. _reference-dsl-localtime2sec: - -localtime2sec -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - localtime2sec (class=time #args=1): Parses local timestamp as integer seconds since - the epoch. Consults $TZ environment variable. - - - -.. _reference-dsl-log: - -log -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log (class=math #args=1): Natural (base-e) logarithm. - - - -.. _reference-dsl-log10: - -log10 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log10 (class=math #args=1): Base-10 logarithm. - - - -.. _reference-dsl-log1p: - -log1p -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - log1p (class=math #args=1): log(1-x). - - - -.. _reference-dsl-logifit: - -logifit -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - logifit (class=math #args=3): Given m and b from logistic regression, compute - fit: $yhat=logifit($x,$m,$b). - - - -.. _reference-dsl-lstrip: - -lstrip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - lstrip (class=string #args=1): Strip leading whitespace from string. - - - -.. _reference-dsl-madd: - -madd -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - madd (class=math #args=3): a + b mod m (integers) - - - -.. _reference-dsl-mapdiff: - -mapdiff -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapdiff (class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. - With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. - - - -.. _reference-dsl-mapexcept: - -mapexcept -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapexcept (class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. - E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. - - - -.. _reference-dsl-mapselect: - -mapselect -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapselect (class=maps variadic): Returns a map with only keys from remaining arguments set. - E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. - - - -.. _reference-dsl-mapsum: - -mapsum -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mapsum (class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with - key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. - - - -.. _reference-dsl-max: - -max -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - max (class=math variadic): max of n numbers; null loses - - - -.. _reference-dsl-mexp: - -mexp -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mexp (class=math #args=3): a ** b mod m (integers) - - - -.. _reference-dsl-min: - -min -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - min (class=math variadic): Min of n numbers; null loses - - - -.. _reference-dsl-mmul: - -mmul -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - mmul (class=math #args=3): a * b mod m (integers) - - - -.. _reference-dsl-msub: - -msub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - msub (class=math #args=3): a - b mod m (integers) - - - -.. _reference-dsl-pow: - -pow -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - pow (class=math #args=2): Exponentiation; same as **. - - - -.. _reference-dsl-qnorm: - -qnorm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - qnorm (class=math #args=1): Normal cumulative distribution function. - - - -.. _reference-dsl-regextract: - -regextract -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - regextract (class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' - . - - - -.. _reference-dsl-regextract_or_else: - -regextract_or_else -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - regextract_or_else (class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' - . - - - -.. _reference-dsl-round: - -round -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - round (class=math #args=1): Round to nearest integer. - - - -.. _reference-dsl-roundm: - -roundm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - roundm (class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is - the same as round($x/$m)*$m - - - -.. _reference-dsl-rstrip: - -rstrip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - rstrip (class=string #args=1): Strip trailing whitespace from string. - - - -.. _reference-dsl-sec2dhms: - -sec2dhms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2dhms (class=time #args=1): Formats integer seconds as in sec2dhms(500000) - = "5d18h53m20s" - - - -.. _reference-dsl-sec2gmt: - -sec2gmt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2gmt (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". - Leaves non-numbers as-is. - - sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n - decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2gmtdate: - -sec2gmtdate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2gmtdate (class=time #args=1): Formats seconds since epoch (integer part) - as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". - Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2hms: - -sec2hms -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2hms (class=time #args=1): Formats integer seconds as in - sec2hms(5000) = "01:23:20" - - - -.. _reference-dsl-sec2localdate: - -sec2localdate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2localdate (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". - Consults $TZ environment variable. Leaves non-numbers as-is. - - - -.. _reference-dsl-sec2localtime: - -sec2localtime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sec2localtime (class=time #args=1): Formats seconds since epoch (integer part) - as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n - decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". - Consults $TZ environment variable. Leaves non-numbers as-is. - - - -.. _reference-dsl-sgn: - -sgn -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sgn (class=math #args=1): +1 for positive input, 0 for zero input, -1 for - negative input. - - - -.. _reference-dsl-sin: - -sin -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sin (class=math #args=1): Trigonometric sine. - - - -.. _reference-dsl-sinh: - -sinh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sinh (class=math #args=1): Hyperbolic sine. - - - -.. _reference-dsl-splitkv: - -splitkv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitkv (class=maps #args=3): Splits string by separators into map with type inference. - E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. - - - -.. _reference-dsl-splitkvx: - -splitkvx -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitkvx (class=maps #args=3): Splits string by separators into map without type inference (keys and - values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives - '{"a" : "1", "b" : "2", "c" : "3"}'. - - - -.. _reference-dsl-splitnv: - -splitnv -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitnv (class=maps #args=2): Splits string by separator into integer-indexed map with type inference. - E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. - - - -.. _reference-dsl-splitnvx: - -splitnvx -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - splitnvx (class=maps #args=2): Splits string by separator into integer-indexed map without type - inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. - - - -.. _reference-dsl-sqrt: - -sqrt -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sqrt (class=math #args=1): Square root. - - - -.. _reference-dsl-ssub: - -ssub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - ssub (class=string #args=3): Like sub but does no regexing. No characters are special. - - - -.. _reference-dsl-strftime: - -strftime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strftime (class=time #args=2): Formats seconds since the epoch as timestamp, e.g. - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and - strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". - Format strings are as in the C library (please see "man strftime" on your system), - with the Miller-specific addition of "%1S" through "%9S" which format the seconds - with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) - See also strftime_local. - - - -.. _reference-dsl-strftime_local: - -strftime_local -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strftime_local (class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. - - - -.. _reference-dsl-string: - -string -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - string (class=conversion #args=1): Convert int/float/bool/string to string. - - - -.. _reference-dsl-strip: - -strip -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strip (class=string #args=1): Strip leading and trailing whitespace from string. - - - -.. _reference-dsl-strlen: - -strlen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strlen (class=string #args=1): String length. - - - -.. _reference-dsl-strptime: - -strptime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strptime (class=time #args=2): Parses timestamp as floating-point seconds since the epoch, - e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, - and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. - See also strptime_local. - - - -.. _reference-dsl-strptime_local: - -strptime_local -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - strptime_local (class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. - - - -.. _reference-dsl-sub: - -sub -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - sub (class=string #args=3): Example: '$name=sub($name, "old", "new")' - (replace once). - - - -.. _reference-dsl-substr: - -substr -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - substr (class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n - inclusive. Negative indices -len .. -1 alias to 0 .. len-1. - - - -.. _reference-dsl-system: - -system -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - system (class=string #args=1): Run command string, yielding its stdout minus final carriage return. - - - -.. _reference-dsl-systime: - -systime -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - systime (class=time #args=0): Floating-point seconds since the epoch, - e.g. 1440768801.748936. - - - -.. _reference-dsl-tan: - -tan -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tan (class=math #args=1): Trigonometric tangent. - - - -.. _reference-dsl-tanh: - -tanh -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tanh (class=math #args=1): Hyperbolic tangent. - - - -.. _reference-dsl-tolower: - -tolower -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - tolower (class=string #args=1): Convert string to lowercase. - - - -.. _reference-dsl-toupper: - -toupper -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - toupper (class=string #args=1): Convert string to uppercase. - - - -.. _reference-dsl-truncate: - -truncate -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - truncate (class=string #args=2): Truncates string first argument to max length of int second argument. - - - -.. _reference-dsl-typeof: - -typeof -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - typeof (class=conversion #args=1): Convert argument to type of argument (e.g. - MT_STRING). For debug. - - - -.. _reference-dsl-urand: - -urand -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urand (class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. - Int-valued example: '$n=floor(20+urand()*11)'. - - - -.. _reference-dsl-urand32: - -urand32 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urand32 (class=math #args=0): Integer uniformly distributed 0 and 2**32-1 - inclusive. - - - -.. _reference-dsl-urandint: - -urandint -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urandint (class=math #args=2): Integer uniformly distributed between inclusive - integer endpoints. - - - -.. _reference-dsl-urandrange: - -urandrange -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -:: - - urandrange (class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). - - - -User-defined functions and subroutines ----------------------------------------------------------------- - -As of Miller 5.0.0 you can define your own functions, as well as subroutines. - -User-defined functions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Here's the obligatory example of a recursive function to compute the factorial function: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/small put ' - func f(n) { - if (is_numeric(n)) { - if (n > 0) { - return n * f(n-1); - } else { - return 1; - } - } - # implicitly return absent-null if non-numeric - } - $ox = f($x + NR); - $oi = f($i); - ' - a b i x y ox oi - pan pan 1 0.3467901443380824 0.7268028627434533 0.467054 1 - eks pan 2 0.7586799647899636 0.5221511083334797 3.680838 2 - wye wye 3 0.20460330576630303 0.33831852551664776 1.741251 6 - eks wye 4 0.38139939387114097 0.13418874328430463 18.588349 24 - wye pan 5 0.5732889198020006 0.8636244699032729 211.387310 120 - -Properties of user-defined functions: - -* Function bodies start with ``func`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested functions.) - -* A function (uniqified by its name) may not be redefined: either by redefining a user-defined function, or by redefining a built-in function. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Functions may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, functions may be either recursive or mutually recursive. Functions may not call subroutines. - -* Functions may be defined and called either within ``mlr put`` or ``mlr put``. - -* Functions have read access to ``$``-variables and ``@``-variables but may not modify them. See also :ref:`cookbook-memoization-with-oosvars` for an example. - -* Argument values may be reassigned: they are not read-only. - -* When a return value is not implicitly returned, this results in a return value of absent-null. (In the example above, if there were records for which the argument to ``f`` is non-numeric, the assignments would be skipped.) See also the section on :ref:`reference-null-data`. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -User-defined subroutines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/small put -q ' - begin { - @call_count = 0; - } - subr s(n) { - @call_count += 1; - if (is_numeric(n)) { - if (n > 1) { - call s(n-1); - } else { - print "numcalls=" . @call_count; - } - } - } - print "NR=" . NR; - call s(NR); - ' - NR=1 - numcalls=1 - NR=2 - numcalls=3 - NR=3 - numcalls=6 - NR=4 - numcalls=10 - NR=5 - numcalls=15 - -Properties of user-defined subroutines: - -* Subroutine bodies start with ``subr`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested subroutines.) - -* A subroutine (uniqified by its name) may not be redefined. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Subroutines may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, subroutines may be either recursive or mutually recursive. Subroutines may call functions. - -* Subroutines may be defined and called either within ``mlr put`` or ``mlr put``. - -* Subroutines have read/write access to ``$``-variables and ``@``-variables. - -* Argument values may be reassigned: they are not read-only. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -.. _reference-dsl-errors-and-transparency: - -Errors and transparency ----------------------------------------------------------------- - -As soon as you have a programming language, you start having the problem *What is my code doing, and why?* This includes getting syntax errors -- which are always annoying -- as well as the even more annoying problem of a program which parses without syntax error but doesn't do what you expect. - -The ``syntax error`` message is cryptic: it says ``syntax error at `` followed by the next symbol it couldn't parse. This is good, but (as of 5.0.0) it doesn't say things like ``syntax error at line 17, character 22``. Here are some common causes of syntax errors: - -* Don't forget ``;`` at end of line, before another statement on the next line. - -* Miller's DSL lacks the ``++`` and ``--`` operators. - -* Curly braces are required for the bodies of ``if``/``while``/``for`` blocks, even when the body is a single statement. - -Now for transparency: - -* As in any language, you can do (see :ref:`reference-dsl-print-statements`) ``print`` (or ``eprint`` to print to stderr). See also :ref:`reference-dsl-dump-statements` and :ref:`reference-dsl-emit-statements`. - -* The ``-v`` option to ``mlr put`` and ``mlr filter`` prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous. - -* The ``-T`` option prints a trace of each statement executed. - -* The ``-t`` and ``-a`` options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience. - -* Please see :ref:`reference-dsl-type-checking` for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller's important use-cases is being able to say simple things like ``mlr put '$y = $x + 1' myfile.dat`` with a minimum of punctuational bric-a-brac -- but for programs over a few lines I generally find that the more type-specification, the better. - -A note on the complexity of Miller's expression language ----------------------------------------------------------------- - -One of Miller's strengths is its brevity: it's much quicker -- and less error-prone -- to type ``mlr stats1 -a sum -f x,y -g a,b`` than having to track summation variables as in ``awk``, or using Miller's out-of-stream variables. And the more language features Miller's put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the *less* powerful it begins to seem: because of the other programming-language features it *doesn't* have (classes, execptions, and so on). - -When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the ``put`` statements be handled by the implementation language's own ``eval``: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular -- by a wide margin. So Miller is C under the hood with a hand-rolled DSL. - -I do want to keep focusing on what Miller is good at -- concise notation, low latency, and high throughput -- and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as ``awk``; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as ``awk`` along with optional type-declaration syntax. While I'm excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller's sweet spot which is speed plus simplicity. - diff --git a/docs/reference-dsl.rst.in b/docs/reference-dsl.rst.in deleted file mode 100644 index 11e51930d..000000000 --- a/docs/reference-dsl.rst.in +++ /dev/null @@ -1,958 +0,0 @@ -DSL reference -================================================================ - -Overview ----------------------------------------------------------------- - -Here's comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -POKI_RUN_COMMAND{{mlr stats1 -a sum -f x -g a data/small}}HERE - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -POKI_RUN_COMMAND{{mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small}}HERE - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -Please see :doc:`reference-verbs` for information on verbs other than ``put`` and ``filter``. - -The essential usages of ``mlr filter`` and ``mlr put`` are for record-selection and record-updating expressions, respectively. For example, given the following input data: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -you might retain only the records whose ``a`` field has value ``eks``: - -POKI_RUN_COMMAND{{mlr filter '$a == "eks"' data/small}}HERE - -or you might add a new field which is a function of existing fields: - -POKI_RUN_COMMAND{{mlr put '$ab = $a . "_" . $b ' data/small}}HERE - -The two verbs ``mlr filter`` and ``mlr put`` are essentially the same. The only differences are: - -* Expressions sent to ``mlr filter`` must end with a boolean expression, which is the filtering criterion; - -* ``mlr filter`` expressions may not reference the ``filter`` keyword within them; and - -* ``mlr filter`` expressions may not use ``tee``, ``emit``, ``emitp``, or ``emitf``. - -All the rest is the same: in particular, you can define and invoke functions and subroutines to help produce the final boolean statement, and record fields may be assigned to in the statements preceding the final boolean statement. - -There are more details and more choices, of course, as detailed in the following sections. - -Syntax ----------------------------------------------------------------- - -Expression formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Multiple expressions may be given, separated by semicolons, and each may refer to the ones before: - -POKI_RUN_COMMAND{{ruby -e '10.times{|i|puts "i=#{i}"}' | mlr --opprint put '$j = $i + 1; $k = $i +$j'}}HERE - -Newlines within the expression are ignored, which can help increase legibility of complex expressions: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/put-multiline-example.txt)HERE - -POKI_RUN_COMMAND{{mlr --opprint filter '($x > 0.5 && $y < 0.5) || ($x < 0.5 && $y > 0.5)' then stats2 -a corr -f x,y data/medium}}HERE - -.. _reference-dsl-expressions-from-files: - -Expressions from files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The simplest way to enter expressions for ``put`` and ``filter`` is between single quotes on the command line, e.g. - -POKI_INCLUDE_AND_RUN_ESCAPED(data/fe-example-1.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/fe-example-2.sh)HERE - -You may, though, find it convenient to put expressions into files for reuse, and read them -**using the -f option**. For example: - -POKI_RUN_COMMAND{{cat data/fe-example-3.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --from data/small put -f data/fe-example-3.mlr}}HERE - -If you have some of the logic in a file and you want to write the rest on the command line, you can **use the -f and -e options together**: - -POKI_RUN_COMMAND{{cat data/fe-example-4.mlr}}HERE - -POKI_RUN_COMMAND{{mlr --from data/small put -f data/fe-example-4.mlr -e '$xy = f($x, $y)'}}HERE - -A suggested use-case here is defining functions in files, and calling them from command-line expressions. - -Another suggested use-case is putting default parameter values in files, e.g. using ``begin{@count=is_present(@count)?@count:10}`` in the file, where you can precede that using ``begin{@count=40}`` using ``-e``. - -Moreover, you can have one or more ``-f`` expressions (maybe one function per file, for example) and one or more ``-e`` expressions on the command line. If you mix ``-f`` and ``-e`` then the expressions are evaluated in the order encountered. (Since the expressions are all simply concatenated together in order, don't forget intervening semicolons: e.g. not ``mlr put -e '$x=1' -e '$y=2 ...'`` but rather ``mlr put -e '$x=1;' -e '$y=2' ...``.) - -Semicolons, commas, newlines, and curly braces -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller uses **semicolons as statement separators**, not statement terminators. This means you can write: - -POKI_INCLUDE_ESCAPED(data/semicolon-example.txt)HERE - -Semicolons are optional after closing curly braces (which close conditionals and loops as discussed below). - -POKI_RUN_COMMAND{{echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""} $foo = "bar"'}}HERE - -POKI_RUN_COMMAND{{echo x=1,y=2 | mlr put 'while (NF < 10) { $[NF+1] = ""}; $foo = "bar"'}}HERE - -Semicolons are required between statements even if those statements are on separate lines. **Newlines** are for your convenience but have no syntactic meaning: line endings do not terminate statements. For example, adjacent assignment statements must be separated by semicolons even if those statements are on separate lines: - -POKI_INCLUDE_ESCAPED(data/newline-example.txt)HERE - -**Trailing commas** are allowed in function/subroutine definitions, function/subroutine callsites, and map literals. This is intended for (although not restricted to) the multi-line case: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/trailing-commas.sh)HERE - -Bodies for all compound statements must be enclosed in **curly braces**, even if the body is a single statement: - -.. code-block:: none - - mlr put 'if ($x == 1) $y = 2' # Syntax error - -.. code-block:: none - - mlr put 'if ($x == 1) { $y = 2 }' # This is OK - -Bodies for compound statements may be empty: - -.. code-block:: none - - mlr put 'if ($x == 1) { }' # This no-op is syntactically acceptable - -Variables ----------------------------------------------------------------- - -Miller has the following kinds of variables: - -**Built-in variables** such as ``NF``, ``NF``, ``FILENAME``, ``M_PI``, and ``M_E``. These are all capital letters and are read-only (although some of them change value from one record to another). - -**Fields of stream records**, accessed using the ``$`` prefix. These refer to fields of the current data-stream record. For example, in ``echo x=1,y=2 | mlr put '$z = $x + $y'``, ``$x`` and ``$y`` refer to input fields, and ``$z`` refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as ``$*``. - -**Out-of-stream variables** accessed using the ``@`` prefix. These refer to data which persist from one record to the next, including in ``begin`` and ``end`` blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as ``@*``. - -**Local variables** are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and explicitly declared local variables. - -**Keywords** are not variables, but since their names are reserved, you cannot use these names for local variables. - -Built-in variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are written all in capital letters, such as ``NR``, ``NF``, ``FILENAME``, and only a small, specific set of them is defined by Miller. - -Namely, Miller supports the following five built-in variables for :doc:`filter and put `, all ``awk``-inspired: ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME``, as well as the mathematical constants ``M_PI`` and ``M_E``. Lastly, the ``ENV`` hashmap allows read access to environment variables, e.g. ``ENV["HOME"]`` or ``ENV["foo_".$hostname]``. - -POKI_RUN_COMMAND{{mlr filter 'FNR == 2' data/small*}}HERE - -POKI_RUN_COMMAND{{mlr put '$fnr = FNR' data/small*}}HERE - -Their values of ``NF``, ``NR``, ``FNR``, ``FILENUM``, and ``FILENAME`` change from one record to the next as Miller scans through your input data stream. The mathematical constants, of course, do not change; ``ENV`` is populated from the system environment variables at the time Miller starts and is read-only for the remainder of program execution. - -Their **scope is global**: you can refer to them in any ``filter`` or ``put`` statement. Their values are assigned by the input-record reader: - -POKI_RUN_COMMAND{{mlr --csv put '$nr = NR' data/a.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv}}HERE - -The **extent** is for the duration of the put/filter: in a ``begin`` statement (which executes before the first input record is consumed) you will find ``NR=1`` and in an ``end`` statement (which is executed after the last input record is consumed) you will find ``NR`` to be the total number of records ingested. - -These are all **read-only** for the ``mlr put`` and ``mlr filter`` DSLs: they may be assigned from, e.g. ``$nr=NR``, but they may not be assigned to: ``NR=100`` is a syntax error. - -Field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Names of fields within stream records must be specified using a ``$`` in :doc:`filter and put expressions `, even though the dollar signs don't appear in the data stream itself. For integer-indexed data, this looks like ``awk``'s ``$1,$2,$3``, except that Miller allows non-numeric names such as ``$quantity`` or ``$hostname``. Likewise, enclose string literals in double quotes in ``filter`` expressions even though they don't appear in file data. In particular, ``mlr filter '$x=="abc"'`` passes through the record ``x=abc``. - -If field names have **special characters** such as ``.`` then you can use braces, e.g. ``'${field.name}'``. - -You may also use a **computed field name** in square brackets, e.g. - -POKI_RUN_COMMAND{{echo a=3,b=4 | mlr filter '$["x"] < 0.5'}}HERE - -POKI_RUN_COMMAND{{echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b'}}HERE - -Notes: - -The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream. - -Their **extent** is limited to the current record; their **scope** is the ``filter`` or ``put`` command in which they appear. - -These are **read-write**: you can do ``$y=2*$x``, ``$x=$x+1``, etc. - -Records are Miller's output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with ``cut``, or records are excluded with ``filter`` or ``put -q``, etc. Simply assign a value to a field and it will be output. - -Positional field names -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1). - -Use ``$[[3]]`` to access the name of field 3. More generally, any expression evaluating to an integer can go between ``$[[`` and ``]]``. - -Then using a computed field name, ``$[ $[[3]] ]`` is the value in the third field. This has the shorter equivalent notation ``$[[[3]]]``. - -POKI_RUN_COMMAND{{mlr cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$[[3]] = "NEW"' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$[[[3]]] = "NEW"' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$NEW = $[[NR]]' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$NEW = $[[[NR]]]' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$[[[NR]]] = "NEW"' data/small}}HERE - -Right-hand side accesses to non-existent fields -- i.e. with index less than 1 or greater than ``NF`` -- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op. - -POKI_RUN_COMMAND{{mlr put '$[[6]] = "NEW"' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$[[[6]]] = "NEW"' data/small}}HERE - -Out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are prefixed with an at-sign, e.g. ``@sum``. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested hashmap: you can do ``@sum += $quantity``, or ``@sum[$color] += $quantity``, or ``@sum[$color][$shape] += $quantity``. The keys for the multi-level hashmap can be any expression which evaluates to string or integer: e.g. ``@sum[NR] = $a + $b``, ``@sum[$a."-".$b] = $x``, etc. - -Their names and their values are entirely under your control; they change only when you assign to them. - -Just as for field names in stream records, if you want to define out-of-stream variables with **special characters** such as ``.`` then you can use braces, e.g. ``'@{variable.name}["index"]'``. - -You may use a **computed key** in square brackets, e.g. - -POKI_RUN_COMMAND{{echo s=green,t=blue,a=3,b=4 | mlr put -q '@[$s."_".$t] = $a * $b; emit all'}}HERE - -Out-of-stream variables are **scoped** to the ``put`` command in which they appear. In particular, if you have two or more ``put`` commands separated by ``then``, each put will have its own set of out-of-stream variables: - -POKI_RUN_COMMAND{{cat data/a.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put '@sum += $a; end {emit @sum}' then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' data/a.dkvp}}HERE - -Out-of-stream variables' **extent** is from the start to the end of the record stream, i.e. every time the ``put`` or ``filter`` statement referring to them is executed. - -Out-of-stream variables are **read-write**: you can do ``$sum=@sum``, ``@sum=$sum``, etc. - -Indexed out-of-stream variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Using an index on the ``@count`` and ``@sum`` variables, we get the benefit of the ``-g`` (group-by) option which ``mlr stats1`` and various other Miller commands have: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-6.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-7.sh)HERE - -Indices can be arbitrarily deep -- here there are two or more of them: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-6a.sh)HERE - -The idea is that ``stats1``, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do. - -Begin/end blocks can be mixed with pattern/action blocks. For example: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-8.sh)HERE - -.. _reference-dsl-local-variables: - -Local variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can't be computed using square brackets). There are three kinds of local variables: **arguments** to functions/subroutines, **variables bound within for-loops**, and **locals** defined within control blocks. They may be untyped using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, ``bool``, and ``map``. - -For example: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/local-example-1.sh)HERE - -Things which are completely unsurprising, resembling many other languages: - -* Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named ``a`` then you can reassign the value of ``a`` to be something else within the function if you like. - -* However, you cannot redeclare the *type* of an argument or a local: ``var a=1; var a=2`` is an error but ``var a=1; a=2`` is OK. - -* All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference) - -* You can define locals (using ``var``, ``num``, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope. - -* If you assign to a local variable for the first time in a scope without declaring it as ``var``, ``num``, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as if ``var`` had been used. (See also :ref:`reference-dsl-type-checking` for an example.) I recommend always declaring variables explicitly to make the intended scoping clear. - -* Functions and subroutines never have access to locals from their callee (unless passed by value as arguments). - -Things which are perhaps surprising compared to other languages: - -* Type declarations using ``var``, or typed using ``num``, ``int``, ``float``, ``str``, and ``bool`` are necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are *implicitly* declared using ``var``. (Some examples are shown below.) - -* Type-checking is done at assignment time. For example, ``float f = 0`` is an error (since ``0`` is an integer), as is ``float f = 0.0; f = 1``. For this reason I prefer to use ``num`` over ``float`` in most contexts since ``num`` encompasses integer and floating-point values. More information about type-checking is at :ref:`reference-dsl-type-checking`. - -* Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in ``for (k, v in $*) { ... }`` ``for ((k1, k2), v in @*) { ... }`` if there are ``k``, ``v``, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop. - -* For C-style triple-for loops, if a for-loop variable is defined using ``var``, ``int``, etc. then it is scoped to that for-loop. E.g. ``for (i = 0; i < 10; i += 1) { ... }`` and ``for (int i = 0; i < 10; i += 1) { ... }``. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But of there is no outer-scope variable of that name then the variable is scoped to the for-loop only. - -The following example demonstrates the scope rules: - -POKI_RUN_COMMAND{{cat data/scope-example.mlr}}HERE - -POKI_RUN_COMMAND{{cat data/scope-example.dat}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr}}HERE - -And this example demonstrates the type-declaration rules: - -POKI_RUN_COMMAND{{cat data/type-decl-example.mlr}}HERE - -Map literals -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSL has four kinds of hashmaps. **Stream records** are (single-level) maps from name to value. **Out-of-stream variables** and **local variables** can also be maps, although they can be multi-level hashmaps (e.g. ``@sum[$x][$y]``). The fourth kind is **map literals**. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. ``"3"`` rather than ``3``). - -For example, the following swaps the input stream's ``a`` and ``i`` fields, modifies ``y``, and drops the rest: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-1.sh)HERE - -Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-2.sh)HERE - -Like out-of-stream and local variables, map literals can be multi-level: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/map-literal-example-3.sh)HERE - -By default, map-valued expressions are dumped using JSON formatting. If you use ``dump`` to print a hashmap with integer keys and you don't want them double-quoted (JSON-style) then you can use ``mlr put --jknquoteint``. See also ``mlr put --help``. - -.. _reference-dsl-type-checking: - -Type-checking -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``put``/``filter`` DSLs support two optional kinds of type-checking. One is inline **type-tests** and **type-assertions** within expressions. The other is **type declarations** for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections. - -Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data. - -.. _reference-dsl-type-tests-and-assertions: - -Type-test and type-assertion expressions -................................................................ - -The following ``is...`` functions take a value and return a boolean indicating whether the argument is of the indicated type. The ``assert_...`` functions return their argument if it is of the specified type, and cause a fatal error otherwise: - -POKI_RUN_COMMAND{{mlr -F | grep ^is}}HERE - -POKI_RUN_COMMAND{{mlr -F | grep ^assert}}HERE - -Please see :ref:`cookbook-data-cleaning-examples` for examples of how to use these. - -Type-declarations for local variables, function parameter, and function return values -............................................................................................... - -Local variables can be defined either untyped as in ``x = 1``, or typed as in ``int x = 1``. Types include **var** (explicitly untyped), **int**, **float**, **num** (int or float), **str**, **bool**, and **map**. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in ``int x = 1`` or in any subsequent assignments to the same variable farther down in the scope. - -The reason for ``num`` is that ``int`` and ``float`` typedecls are very precise: - -.. code-block:: none - - float a = 0; # Runtime error since 0 is int not float - int b = 1.0; # Runtime error since 1.0 is float not int - num c = 0; # OK - num d = 1.0; # OK - -A suggestion is to use ``num`` for general use when you want numeric content, and use ``int`` when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints). - -The ``var`` type declaration indicates no type restrictions, e.g. ``var x = 1`` has the same type restrictions on ``x`` as ``x = 1``. The difference is in intentional shadowing: if you have ``x = 1`` in outer scope and ``x = 2`` in inner scope (e.g. within a for-loop or an if-statement) then outer-scope ``x`` has value 2 after the second assignment. But if you have ``var x = 2`` in the inner scope, then you are declaring a variable scoped to the inner block.) For example: - -.. code-block:: none - - x = 1; - if (NR == 4) { - x = 2; # Refers to outer-scope x: value changes from 1 to 2. - } - print x; # Value of x is now two - -.. code-block:: none - - x = 1; - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Likewise function arguments can optionally be typed, with type enforced when the function is called: - -.. code-block:: none - - func f(map m, int i) { - ... - } - $a = f({1:2, 3:4}, 5); # OK - $b = f({1:2, 3:4}, "abc"); # Runtime error - $c = f({1:2, 3:4}, $x); # Runtime error for records with non-integer field named x - if (NR == 4) { - var x = 2; # Defines a new inner-scope x with value 2 - } - print x; # Value of this x is still 1 - -Thirdly, function return values can be type-checked at the point of ``return`` using ``:`` and a typedecl after the parameter list: - -.. code-block:: none - - func f(map m, int i): bool { - ... - ... - if (...) { - return "false"; # Runtime error if this branch is taken - } - ... - ... - if (...) { - return retval; # Runtime error if this function doesn't have an in-scope - # boolean-valued variable named retval - } - ... - ... - # In Miller if your functions don't explicitly return a value, they return absent-null. - # So it would also be a runtime error on reaching the end of this function without - # an explicit return statement. - } - -Null data: empty and absent -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :ref:`reference-null-data`. - -Aggregate variable assignments -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the ``$*`` syntax: - -* Recursive copy of out-of-stream variables -* Out-of-stream variable assigned to full stream record -* Full stream record assigned to an out-of-stream variable - -Example recursive copy of out-of-stream variables: - -POKI_RUN_COMMAND{{mlr --opprint put -q '@v["sum"] += $x; @v["count"] += 1; end{dump; @w = @v; dump}' data/small}}HERE - -Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that: - -POKI_RUN_COMMAND{{mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small}}HERE - -Example of full stream record assigned to an out-of-stream variable, finding the record for which the ``x`` field has the largest value in the input stream: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' data/small}}HERE - -Keywords for filter and put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -POKI_RUN_COMMAND{{mlr --help-all-keywords}}HERE - -Operator precedence ----------------------------------------------------------------- - -Operators are listed in order of decreasing precedence, highest first. - -.. code-block:: none - - Operators Associativity - --------- ------------- - () left to right - ** right to left - ! ~ unary+ unary- & right to left - binary* / // % left to right - binary+ binary- . left to right - << >> left to right - & left to right - ^ left to right - | left to right - < <= > >= left to right - == != =~ !=~ left to right - && left to right - ^^ left to right - || left to right - ? : right to left - = N/A for Miller (there is no $a=$b=$c) - -Operator and function semantics ----------------------------------------------------------------- - -* Functions are in general pass-throughs straight to the system-standard C library. - -* The ``min`` and ``max`` functions are different from other multi-argument functions which return null if any of their inputs are null: for ``min`` and ``max``, by contrast, if one argument is absent-null, the other is returned. Empty-null loses min or max against numeric or boolean; empty-null is less than any other string. - -* Symmetrically with respect to the bitwise OR, XOR, and AND operators ``|``, ``^``, ``&``, Miller has logical operators ``||``, ``^^``, ``&&``: the logical XOR not existing in C. - -* The exponentiation operator ``**`` is familiar from many languages. - -* The regex-match and regex-not-match operators ``=~`` and ``!=~`` are similar to those in Ruby and Perl. - -Control structures ----------------------------------------------------------------- - -Pattern-action blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are reminiscent of ``awk`` syntax. They can be used to allow assignments to be done only when appropriate -- e.g. for math-function domain restrictions, regex-matching, and so on: - -POKI_RUN_COMMAND{{mlr cat data/put-gating-example-1.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put '$x > 0.0 { $y = log10($x); $z = sqrt($y) }' data/put-gating-example-1.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr cat data/put-gating-example-2.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put '$a =~ "([a-z]+)_([0-9]+)" { $b = "left_\1"; $c = "right_\2" }' data/put-gating-example-2.dkvp}}HERE - -This produces heteregenous output which Miller, of course, has no problems with (see :doc:`record-heterogeneity`). But if you want homogeneous output, the curly braces can be replaced with a semicolon between the expression and the body statements. This causes ``put`` to evaluate the boolean expression (along with any side effects, namely, regex-captures ``\1``, ``\2``, etc.) but doesn't use it as a criterion for whether subsequent assignments should be executed. Instead, subsequent assignments are done unconditionally: - -POKI_RUN_COMMAND{{mlr put '$x > 0.0; $y = log10($x); $z = sqrt($y)' data/put-gating-example-1.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put '$a =~ "([a-z]+)_([0-9]+)"; $b = "left_\1"; $c = "right_\2"' data/put-gating-example-2.dkvp}}HERE - -If-statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These are again reminiscent of ``awk``. Pattern-action blocks are a special case of ``if`` with no ``elif`` or ``else`` blocks, no ``if`` keyword, and parentheses optional around the boolean expression: - -.. code-block:: none - - mlr put 'NR == 4 {$foo = "bar"}' - -.. code-block:: none - - mlr put 'if (NR == 4) {$foo = "bar"}' - -Compound statements use ``elif`` (rather than ``elsif`` or ``else if``): - -POKI_INCLUDE_ESCAPED(data/if-chain.sh)HERE - -While and do-while loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller's ``while`` and ``do-while`` are unsurprising in comparison to various languages, as are ``break`` and ``continue``: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/while-example-1.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/while-example-2.sh)HERE - -A ``break`` or ``continue`` within nested conditional blocks or if-statements will, of course, propagate to the innermost loop enclosing them, if any. A ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. -The existence of ``while``, ``do-while``, and ``for`` loops in Miller's DSL means that you can create infinite-loop scenarios inadvertently. In particular, please recall that DSL statements are executed once if in ``begin`` or ``end`` blocks, and once *per record* otherwise. For example, **while (NR < 10) will never terminate as NR is only incremented between records**. - -For-loops -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -While Miller's ``while`` and ``do-while`` statements are much as in many other languages, ``for`` loops are more idiosyncratic to Miller. They are loops over key-value pairs, whether in stream records, out-of-stream variables, local variables, or map-literals: more reminiscent of ``foreach``, as in (for example) PHP. There are **for-loops over map keys** and **for-loops over key-value tuples**. Additionally, Miller has a **C-style triple-for loop** with initialize, test, and update statements. - -As with ``while`` and ``do-while``, a ``break`` or ``continue`` within nested control structures will propagate to the innermost loop enclosing them, if any, and a ``break`` or ``continue`` outside a loop is a syntax error that will be flagged as soon as the expression is parsed, before any input records are ingested. - -Key-only for-loops -................................................................ - -The ``key`` variable is always bound to the *key* of key-value pairs: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/single-for-example-1.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/single-for-example-2.sh)HERE - -Note that the value corresponding to a given key may be gotten as through a **computed field name** using square brackets as in ``$[key]`` for stream records, or by indexing the looped-over variable using square brackets. - -Key-value for-loops -................................................................ - -Single-level keys may be gotten at using either ``for(k,v)`` or ``for((k),v)``; multi-level keys may be gotten at using ``for((k1,k2,k3),v)`` and so on. The ``v`` variable will be bound to to a scalar value (a string or a number) if the map stops at that level, or to a map-valued variable if the map goes deeper. If the map isn't deep enough then the loop body won't be executed. - -POKI_RUN_COMMAND{{cat data/for-srec-example.tbl}}HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-1.sh)HERE - -POKI_RUN_COMMAND{{mlr --from data/small --opprint put 'for (k,v in $*) { $[k."_type"] = typeof(v) }'}}HERE - -Note that the value of the current field in the for-loop can be gotten either using the bound variable ``value``, or through a **computed field name** using square brackets as in ``$[key]``. - -Important note: to avoid inconsistent looping behavior in case you're setting new fields (and/or unsetting existing ones) while looping over the record, **Miller makes a copy of the record before the loop: loop variables are bound from the copy and all other reads/writes involve the record itself**: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-2.sh)HERE - -It can be confusing to modify the stream record while iterating over a copy of it, so instead you might find it simpler to use a local variable in the loop and only update the stream record after the loop: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-srec-example-3.sh)HERE - -You can also start iterating on sub-hashmaps of an out-of-stream or local variable; you can loop over nested keys; you can loop over all out-of-stream variables. The bound variables are bound to a copy of the sub-hashmap as it was before the loop started. The sub-hashmap is specified by square-bracketed indices after ``in``, and additional deeper indices are bound to loop key-variables. The terminal values are bound to the loop value-variable whenever the keys are not too shallow. The value-variable may refer to a terminal (string, number) or it may be map-valued if the map goes deeper. Example indexing is as follows: - -POKI_INCLUDE_ESCAPED(data/for-oosvar-example-0a.txt)HERE - -That's confusing in the abstract, so a concrete example is in order. Suppose the out-of-stream variable ``@myvar`` is populated as follows: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0b.sh)HERE - -Then we can get at various values as follows: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0c.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0d.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/for-oosvar-example-0e.sh)HERE - -C-style triple-for loops -................................................................ - -These are supported as follows: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/triple-for-example-1.sh)HERE - -POKI_INCLUDE_AND_RUN_ESCAPED(data/triple-for-example-2.sh)HERE - -Notes: - -* In ``for (start; continuation; update) { body }``, the start, continuation, and update statements may be empty, single statements, or multiple comma-separated statements. If the continuation is empty (e.g. ``for(i=1;;i+=1)``) it defaults to true. - -* In particular, you may use ``$``-variables and/or ``@``-variables in the start, continuation, and/or update steps (as well as the body, of course). - -* The typedecls such as ``int`` or ``num`` are optional. If a typedecl is provided (for a local variable), it binds a variable scoped to the for-loop regardless of whether a same-name variable is present in outer scope. If a typedecl is not provided, then the variable is scoped to the for-loop if no same-name variable is present in outer scope, or if a same-name variable is present in outer scope then it is modified. - -* Miller has no ``++`` or ``--`` operators. - -* As with all for/if/while statements in Miller, the curly braces are required even if the body is a single statement, or empty. - -Begin/end blocks -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller supports an ``awk``-like ``begin/end`` syntax. The statements in the ``begin`` block are executed before any input records are read; the statements in the ``end`` block are executed after the last input record is read. (If you want to execute some statement at the start of each file, not at the start of the first file as with ``begin``, you might use a pattern/action block of the form ``FNR == 1 { ... }``.) All statements outside of ``begin`` or ``end`` are, of course, executed on every input record. Semicolons separate statements inside or outside of begin/end blocks; semicolons are required between begin/end block bodies and any subsequent statement. For example: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-1.sh)HERE - -Since uninitialized out-of-stream variables default to 0 for addition/substraction and 1 for multiplication when they appear on expression right-hand sides (not quite as in ``awk``, where they'd default to 0 either way), the above can be written more succinctly as - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-2.sh)HERE - -The **put -q** option is a shorthand which suppresses printing of each output record, with only ``emit`` statements being output. So to get only summary outputs, one could write - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-3.sh)HERE - -We can do similarly with multiple out-of-stream variables: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-4.sh)HERE - -This is of course not much different than - -POKI_INCLUDE_AND_RUN_ESCAPED(data/begin-end-example-5.sh)HERE - -Note that it's a syntax error for begin/end blocks to refer to field names (beginning with ``$``), since these execute outside the context of input records. - -Output statements ----------------------------------------------------------------- - -You can **output** variable-values or expressions in **five ways**: - -* **Assign** them to stream-record fields. For example, ``$cumulative_sum = @sum``. For another example, ``$nr = NR`` adds a field named ``nr`` to each output record, containing the value of the built-in variable ``NR`` as of when that record was ingested. - -* Use the **print** or **eprint** keywords which immediately print an expression *directly to standard output or standard error*, respectively. Note that ``dump``, ``edump``, ``print``, and ``eprint`` don't output records which participate in ``then``-chaining; rather, they're just immediate prints to stdout/stderr. The ``printn`` and ``eprintn`` keywords are the same except that they don't print final newlines. Additionally, you can print to a specified file instead of stdout/stderr. - -* Use the **dump** or **edump** keywords, which *immediately print all out-of-stream variables as a JSON data structure to the standard output or standard error* (respectively). - -* Use **tee** which formats the current stream record (not just an arbitrary string as with **print**) to a specific file. - -* Use **emit**/**emitp**/**emitf** to send out-of-stream variables' current values to the output record stream, e.g. ``@sum += $x; emit @sum`` which produces an extra output record such as ``sum=3.1648382``. - -For the first two options you are populating the output-records stream which feeds into the next verb in a ``then``-chain (if any), or which otherwise is formatted for output using ``--o...`` flags. - -For the last three options you are sending output directly to standard output, standard error, or a file. - -.. _reference-dsl-print-statements: - -Print statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``print`` statement is perhaps self-explanatory, but with a few light caveats: - -* There are four variants: ``print`` goes to stdout with final newline, ``printn`` goes to stdout without final newline (you can include one using "\n" in your output string), ``eprint`` goes to stderr with final newline, and ``eprintn`` goes to stderr without final newline. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* Print statements are for strings (``print "hello"``), or things which can be made into strings: numbers (``print 3``, ``print $a + $b``, or concatenations thereof (``print "a + b = " . ($a + $b)``). Maps (in ``$*``, map-valued out-of-stream or local variables, and map literals) aren't convertible into strings. If you print a map, you get ``{is-a-map}`` as output. Please use ``dump`` to print maps. - -* You can redirect print output to a file: ``mlr --from myfile.dat put 'print > "tap.txt", $x'`` ``mlr --from myfile.dat put 'o=$*; print > $a.".txt", $x'``. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-dump-statements: - -Dump statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``dump`` statement is for printing expressions, including maps, directly to stdout/stderr, respectively: - -* There are two variants: ``dump`` prints to stdout; ``edump`` prints to stderr. - -* Output goes directly to stdout/stderr, respectively: data produced this way do not go downstream to the next verb in a ``then``-chain. (Use ``emit`` for that.) - -* You can use ``dump`` to output single strings, numbers, or expressions including map-valued data. Map-valued data are printed as JSON. Miller allows string and integer keys in its map literals while JSON allows only string keys, so use ``mlr put --jknquoteint`` if you want integer-valued map keys not double-quoted. - -* If you use ``dump`` (or ``edump``) with no arguments, you get a JSON structure representing the current values of all out-of-stream variables. - -* As with ``print``, you can redirect output to files. - -* See also :ref:`reference-dsl-redirected-output-statements` for examples. - -Tee statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Records produced by a ``mlr put`` go downstream to the next verb in your ``then``-chain, if any, or otherwise to standard output. If you want to additionally copy out records to files, you can do that using ``tee``. - -The syntax is, by example, ``mlr --from myfile.dat put 'tee > "tap.dat", $*' then sort -n index``. First is ``tee >``, then the filename expression (which can be an expression such as ``"tap.".$a.".dat"``), then a comma, then ``$*``. (Nothing else but ``$*`` is teeable.) - -See also :ref:`reference-dsl-redirected-output-statements` for examples. - -.. _reference-dsl-redirected-output-statements: - -Redirected-output statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The **print**, **dump** **tee**, **emitf**, **emit**, and **emitp** keywords all allow you to redirect output to one or more files or pipe-to commands. The filenames/commands are strings which can be constructed using record-dependent values, so you can do things like splitting a table into multiple files, one for each account ID, and so on. - -Details: - -* The ``print`` and ``dump`` keywords produce output immediately to standard output, or to specified file(s) or pipe-to command if present. - -POKI_RUN_COMMAND{{mlr --help-keyword print}}HERE - -POKI_RUN_COMMAND{{mlr --help-keyword dump}}HERE - -* ``mlr put`` sends the current record (possibly modified by the ``put`` expression) to the output record stream. Records are then input to the following verb in a ``then``-chain (if any), else printed to standard output (unless ``put -q``). The **tee** keyword *additionally* writes the output record to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -POKI_RUN_COMMAND{{mlr --help-keyword tee}}HERE - -* ``mlr put``'s ``emitf``, ``emitp``, and ``emit`` send out-of-stream variables to the output record stream. These are then input to the following verb in a ``then``-chain (if any), else printed to standard output. When redirected with ``>``, ``>>``, or ``|``, they *instead* write the out-of-stream variable(s) to specified file(s) or pipe-to command, or immediately to ``stdout``/``stderr``. - -POKI_RUN_COMMAND{{mlr --help-keyword emitf}}HERE - -POKI_RUN_COMMAND{{mlr --help-keyword emitp}}HERE - -POKI_RUN_COMMAND{{mlr --help-keyword emit}}HERE - -.. _reference-dsl-emit-statements: - -Emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -There are three variants: ``emitf``, ``emit``, and ``emitp``. Keep in mind that out-of-stream variables are a nested, multi-level hashmap (directly viewable as JSON using ``dump``), whereas Miller output records are lists of single-level key-value pairs. The three emit variants allow you to control how the multilevel hashmaps are flatten down to output records. You can emit any map-valued expression, including ``$*``, map-valued out-of-stream variables, the entire out-of-stream-variable collection ``@*``, map-valued local variables, map literals, or map-valued function return values. - -Use **emitf** to output several out-of-stream variables side-by-side in the same output record. For ``emitf`` these mustn't have indexing using ``@name[...]``. Example: - -POKI_RUN_COMMAND{{mlr put -q '@count += 1; @x_sum += $x; @y_sum += $y; end { emitf @count, @x_sum, @y_sum}' data/small}}HERE - -Use **emit** to output an out-of-stream variable. If it's non-indexed you'll get a simple key-value pair: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum += $x; end { dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum += $x; end { emit @sum }' data/small}}HERE - -If it's indexed then use as many names after ``emit`` as there are indices: - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a] += $x; end { dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a] += $x; end { emit @sum, "a" }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a", "b" }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b][$i] += $x; end { dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b][$i] += $x; end { emit @sum, "a", "b", "i" }' data/small}}HERE - -Now for **emitp**: if you have as many names following ``emit`` as there are levels in the out-of-stream variable's hashmap, then ``emit`` and ``emitp`` do the same thing. Where they differ is when you don't specify as many names as there are hashmap levels. In this case, Miller needs to flatten multiple map indices down to output-record keys: ``emitp`` includes full prefixing (hence the ``p`` in ``emitp``) while ``emit`` takes the deepest hashmap key as the output-record key: - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum, "a" }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emit @sum }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab put -q '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE - -Use **--oflatsep** to specify the character which joins multilevel -keys for ``emitp`` (it defaults to a colon): - -POKI_RUN_COMMAND{{mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum, "a" }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr --oxtab put -q --oflatsep / '@sum[$a][$b] += $x; end { emitp @sum }' data/small}}HERE - -Multi-emit statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can emit **multiple map-valued expressions side-by-side** by -including their names in parentheses: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/emit-lashed.sh)HERE - -What this does is walk through the first out-of-stream variable (``@x_sum`` in this example) as usual, then for each keylist found (e.g. ``pan,wye``), include the values for the remaining out-of-stream variables (here, ``@x_count`` and ``@x_mean``). You should use this when all out-of-stream variables in the emit statement have **the same shape and the same keylists**. - -Emit-all statements -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use **emit all** (or ``emit @*`` which is synonymous) to output all out-of-stream variables. You can use the following idiom to get various accumulators output side-by-side (reminiscent of ``mlr stats1``): - -POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@v[$a][$b]["sum"] += $x; @v[$a][$b]["count"] += 1; end{emit @*,"a","b"}'}}HERE - -POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit @*,"a","b"}'}}HERE - -POKI_RUN_COMMAND{{mlr --from data/small --opprint put -q '@sum[$a][$b] += $x; @count[$a][$b] += 1; end{emit (@sum, @count),"a","b"}'}}HERE - -Unset statements ----------------------------------------------------------------- - -You can clear a map key by assigning the empty string as its value: ``$x=""`` or ``@x=""``. Using ``unset`` you can remove the key entirely. Examples: - -POKI_RUN_COMMAND{{cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr put 'unset $x, $a' data/small}}HERE - -This can also be done, of course, using ``mlr cut -x``. You can also clear out-of-stream or local variables, at the base name level, or at an indexed sublevel: - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum; dump }' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put -q '@sum[$a][$b] += $x; end { dump; unset @sum["eks"]; dump }' data/small}}HERE - -If you use ``unset all`` (or ``unset @*`` which is synonymous), that will unset all out-of-stream variables which have been defined up to that point. - -Filter statements ----------------------------------------------------------------- - -You can use ``filter`` within ``put``. In fact, the following two are synonymous: - -POKI_RUN_COMMAND{{mlr filter 'NR==2 || NR==3' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put 'filter NR==2 || NR==3' data/small}}HERE - -The former, of course, is much easier to type. But the latter allows you to define more complex expressions for the filter, and/or do other things in addition to the filter: - -POKI_RUN_COMMAND{{mlr put '@running_sum += $x; filter @running_sum > 1.3' data/small}}HERE - -POKI_RUN_COMMAND{{mlr put '$z = $x * $y; filter $z > 0.3' data/small}}HERE - -Built-in functions for filter and put, summary ----------------------------------------------------------------- - -POKI_RUN_CONTENT_GENERATOR(mk-func-table.rb)HERE - -Built-in functions for filter and put ----------------------------------------------------------------- - -Each function takes a specific number of arguments, as shown below, except for functions marked as variadic such as ``min`` and ``max``. (The latter compute min and max of any number of numerical arguments.) There is no notion of optional or default-on-absent arguments. All argument-passing is positional rather than by name; arguments are passed by value, not by reference. - -You can get a list of all functions using **mlr -F**. - -POKI_RUN_CONTENT_GENERATOR(mk-func-h2s.sh)HERE - -User-defined functions and subroutines ----------------------------------------------------------------- - -As of Miller 5.0.0 you can define your own functions, as well as subroutines. - -User-defined functions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Here's the obligatory example of a recursive function to compute the factorial function: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/factorial-example.sh)HERE - -Properties of user-defined functions: - -* Function bodies start with ``func`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested functions.) - -* A function (uniqified by its name) may not be redefined: either by redefining a user-defined function, or by redefining a built-in function. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Functions may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, functions may be either recursive or mutually recursive. Functions may not call subroutines. - -* Functions may be defined and called either within ``mlr put`` or ``mlr put``. - -* Functions have read access to ``$``-variables and ``@``-variables but may not modify them. See also :ref:`cookbook-memoization-with-oosvars` for an example. - -* Argument values may be reassigned: they are not read-only. - -* When a return value is not implicitly returned, this results in a return value of absent-null. (In the example above, if there were records for which the argument to ``f`` is non-numeric, the assignments would be skipped.) See also the section on :ref:`reference-null-data`. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -User-defined subroutines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Example: - -POKI_INCLUDE_AND_RUN_ESCAPED(data/subr-example.sh)HERE - -Properties of user-defined subroutines: - -* Subroutine bodies start with ``subr`` and a parameter list, defined outside of ``begin``, ``end``, or other ``func`` or ``subr`` blocks. (I.e. the Miller DSL has no nested subroutines.) - -* A subroutine (uniqified by its name) may not be redefined. However, functions and subroutines have separate namespaces: you can define a subroutine ``log`` which does not clash with the mathematical ``log`` function. - -* Subroutines may be defined either before or after use (there is an object-binding/linkage step at startup). More specifically, subroutines may be either recursive or mutually recursive. Subroutines may call functions. - -* Subroutines may be defined and called either within ``mlr put`` or ``mlr put``. - -* Subroutines have read/write access to ``$``-variables and ``@``-variables. - -* Argument values may be reassigned: they are not read-only. - -* See the section on :ref:`reference-dsl-local-variables` for information on scope and extent of arguments, as well as for information on the use of local variables within functions. - -* See the section on :ref:`reference-dsl-expressions-from-files` for information on the use of ``-f`` and ``-e`` flags. - -.. _reference-dsl-errors-and-transparency: - -Errors and transparency ----------------------------------------------------------------- - -As soon as you have a programming language, you start having the problem *What is my code doing, and why?* This includes getting syntax errors -- which are always annoying -- as well as the even more annoying problem of a program which parses without syntax error but doesn't do what you expect. - -The ``syntax error`` message is cryptic: it says ``syntax error at `` followed by the next symbol it couldn't parse. This is good, but (as of 5.0.0) it doesn't say things like ``syntax error at line 17, character 22``. Here are some common causes of syntax errors: - -* Don't forget ``;`` at end of line, before another statement on the next line. - -* Miller's DSL lacks the ``++`` and ``--`` operators. - -* Curly braces are required for the bodies of ``if``/``while``/``for`` blocks, even when the body is a single statement. - -Now for transparency: - -* As in any language, you can do (see :ref:`reference-dsl-print-statements`) ``print`` (or ``eprint`` to print to stderr). See also :ref:`reference-dsl-dump-statements` and :ref:`reference-dsl-emit-statements`. - -* The ``-v`` option to ``mlr put`` and ``mlr filter`` prints abstract syntax trees for your code. While not all details here will be of interest to everyone, certainly this makes questions such as operator precedence completely unambiguous. - -* The ``-T`` option prints a trace of each statement executed. - -* The ``-t`` and ``-a`` options show low-level details for the parsing process and for stack-variable-index allocation, respectively. These will likely be of interest to people who enjoy compilers, and probably less useful for a more general audience. - -* Please see :ref:`reference-dsl-type-checking` for type declarations and type-assertions you can use to make sure expressions and the data flowing them are evaluating as you expect. I made them optional because one of Miller's important use-cases is being able to say simple things like ``mlr put '$y = $x + 1' myfile.dat`` with a minimum of punctuational bric-a-brac -- but for programs over a few lines I generally find that the more type-specification, the better. - -A note on the complexity of Miller's expression language ----------------------------------------------------------------- - -One of Miller's strengths is its brevity: it's much quicker -- and less error-prone -- to type ``mlr stats1 -a sum -f x,y -g a,b`` than having to track summation variables as in ``awk``, or using Miller's out-of-stream variables. And the more language features Miller's put-DSL has (for-loops, if-statements, nested control structures, user-defined functions, etc.) then the *less* powerful it begins to seem: because of the other programming-language features it *doesn't* have (classes, execptions, and so on). - -When I was originally prototyping Miller in 2015, the decision I had was whether to hand-code in a low-level language like C or Rust, with my own hand-rolled DSL, or whether to use a higher-level language (like Python or Lua or Nim) and let the ``put`` statements be handled by the implementation language's own ``eval``: the implementation language would take the place of a DSL. Multiple performance experiments showed me I could get better throughput using the former, and using C in particular -- by a wide margin. So Miller is C under the hood with a hand-rolled DSL. - -I do want to keep focusing on what Miller is good at -- concise notation, low latency, and high throughput -- and not add too much in terms of high-level-language features to the DSL. That said, some sort of customizability is a basic thing to want. As of 4.1.0 we have recursive for/while/if structures on about the same complexity level as ``awk``; as of 5.0.0 we have user-defined functions and map-valued variables, again on about the same complexity level as ``awk`` along with optional type-declaration syntax. While I'm excited by these powerful language features, I hope to keep new features beyond 5.0.0 focused on Miller's sweet spot which is speed plus simplicity. - diff --git a/docs/reference-verbs.rst b/docs/reference-verbs.rst deleted file mode 100644 index 239a04cdf..000000000 --- a/docs/reference-verbs.rst +++ /dev/null @@ -1,3623 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Verbs reference -================================================================ - -Overview ----------------------------------------------------------------- - -When you type ``mlr {something} myfile.dat``, the ``{something}`` part is called a **verb**. It specifies how you want to transform your data. (See also :ref:`reference-command-overview` for a breakdown.) The following is an alphabetical list of verbs with their descriptions. - -The verbs ``put`` and ``filter`` are special in that they have a rich expression language (domain-specific language, or "DSL"). More information about them can be found at :doc:`reference-dsl`. - -Here's a comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats1 -a sum -f x -g a data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small - a=pan,x_sum=0.346790 - a=eks,x_sum=1.140079 - a=wye,x_sum=0.777892 - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -.. _reference-verbs-altkv: - -altkv ----------------------------------------------------------------- - -Map list of values to alternating key/value pairs. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr altkv -h - Usage: mlr altkv [no options] - Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'a,b,c,d,e,f' | mlr altkv - a=b,c=d,e=f - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'a,b,c,d,e,f,g' | mlr altkv - a=b,c=d,e=f,4=g - -.. _reference-verbs-bar: - -bar ----------------------------------------------------------------- - -Cheesy bar-charting. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr bar -h - Usage: mlr bar [options] - Replaces a numeric field with a number of asterisks, allowing for cheesy - bar plots. These align best with --opprint or --oxtab output format. - Options: - -f {a,b,c} Field names to convert to bars. - -c {character} Fill character: default '*'. - -x {character} Out-of-bounds character: default '#'. - -b {character} Blank character: default '.'. - --lo {lo} Lower-limit value for min-width bar: default '0.000000'. - --hi {hi} Upper-limit value for max-width bar: default '100.000000'. - -w {n} Bar-field width: default '40'. - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint bar --lo 0 --hi 1 -f x,y data/small - a b i x y - pan pan 1 *************........................... *****************************........... - eks pan 2 ******************************.......... ********************.................... - wye wye 3 ********................................ *************........................... - eks wye 4 ***************......................... *****................................... - wye pan 5 **********************.................. **********************************...... - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small - a b i x y - pan pan 1 #....................................... ***************************************# - eks pan 2 ***************************************# ************************................ - wye wye 3 #....................................... #....................................... - eks wye 4 #....................................... #....................................... - wye pan 5 **********************************...... ***************************************# - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint bar --auto -f x,y data/small - a b i x y - pan pan 1 [0.204603]**********..............................[0.75868] [0.134189]********************************........[0.863624] - eks pan 2 [0.204603]***************************************#[0.75868] [0.134189]*********************...................[0.863624] - wye wye 3 [0.204603]#.......................................[0.75868] [0.134189]***********.............................[0.863624] - eks wye 4 [0.204603]************............................[0.75868] [0.134189]#.......................................[0.863624] - wye pan 5 [0.204603]**************************..............[0.75868] [0.134189]***************************************#[0.863624] - -.. _reference-verbs-bootstrap: - -bootstrap ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr bootstrap --help - Usage: mlr bootstrap [options] - Emits an n-sample, with replacement, of the input records. - Options: - -n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. - See also mlr sample and mlr shuffle. - -The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example: - -.. code-block:: none - - $ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.497129 1413 - red 0.492560 4641 - purple 0.494005 1142 - green 0.504861 1109 - blue 0.517717 1470 - orange 0.490532 303 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.500651 1380 - purple 0.501556 1111 - green 0.503272 1068 - red 0.493895 4702 - blue 0.512529 1496 - orange 0.521030 321 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.498046 1485 - blue 0.513576 1417 - red 0.492870 4595 - orange 0.507697 307 - green 0.496803 1075 - purple 0.486337 1199 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - blue 0.522921 1447 - red 0.490717 4617 - yellow 0.496450 1419 - purple 0.496523 1192 - green 0.507569 1111 - orange 0.468014 292 - -.. _reference-verbs-cat: - -cat ----------------------------------------------------------------- - -Most useful for format conversions (see :doc:`file-formats`, and concatenating multiple same-schema CSV files to have the same header: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat -h - Usage: mlr cat [options] - Passes input records directly to output. Most useful for format conversion. - Options: - -n Prepend field "n" to each record with record-counter starting at 1 - -g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). - -v Write a low-level record-structure dump to stderr. - -N {name} Prepend field {name} to each record with record-counter starting at 1 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/a.csv - a,b,c - 1,2,3 - 4,5,6 - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/b.csv - a,b,c - 7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cat data/a.csv data/b.csv - a,b,c - 1,2,3 - 4,5,6 - 7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --oxtab cat data/a.csv data/b.csv - a 1 - b 2 - c 3 - - a 4 - b 5 - c 6 - - a 7 - b 8 - c 9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv cat -n data/a.csv data/b.csv - n,a,b,c - 1,1,2,3 - 2,4,5,6 - 3,7,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat -n -g a data/small - n a b i x y - 1 pan pan 1 0.3467901443380824 0.7268028627434533 - 1 eks pan 2 0.7586799647899636 0.5221511083334797 - 1 wye wye 3 0.20460330576630303 0.33831852551664776 - 2 eks wye 4 0.38139939387114097 0.13418874328430463 - 2 wye pan 5 0.5732889198020006 0.8636244699032729 - -.. _reference-verbs-check: - -check ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr check --help - Usage: mlr check - Consumes records without printing any output. - Useful for doing a well-formatted check on input data. - -.. _reference-verbs-clean-whitespace: - -clean-whitespace ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr clean-whitespace --help - Usage: mlr clean-whitespace [options] - For each record, for each field in the record, whitespace-cleans the keys and - values. Whitespace-cleaning entails stripping leading and trailing whitespace, - and replacing multiple whitespace with singles. For finer-grained control, - please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, - and clean_whitespace. - - Options: - -k|--keys-only Do not touch values. - -v|--values-only Do not touch keys. - It is an error to specify -k as well as -v -- to clean keys and values, - leave off -k as well as -v. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson cat data/clean-whitespace.csv - { " Name ": " Ann Simons", " Preference ": " blue " } - { " Name ": "Bob Wang ", " Preference ": " red " } - { " Name ": " Carol Vee", " Preference ": " yellow" } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson clean-whitespace -k data/clean-whitespace.csv - { "Name": " Ann Simons", "Preference": " blue " } - { "Name": "Bob Wang ", "Preference": " red " } - { "Name": " Carol Vee", "Preference": " yellow" } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson clean-whitespace -v data/clean-whitespace.csv - { " Name ": "Ann Simons", " Preference ": "blue" } - { " Name ": "Bob Wang", " Preference ": "red" } - { " Name ": "Carol Vee", " Preference ": "yellow" } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --ojson clean-whitespace data/clean-whitespace.csv - { "Name": "Ann Simons", "Preference": "blue" } - { "Name": "Bob Wang", "Preference": "red" } - { "Name": "Carol Vee", "Preference": "yellow" } - -Function links: - -* :ref:`reference-dsl-lstrip` -* :ref:`reference-dsl-rstrip` -* :ref:`reference-dsl-strip` -* :ref:`reference-dsl-collapse_whitespace` -* :ref:`reference-dsl-clean_whitespace` - -.. _reference-verbs-count: - -count ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count --help - Usage: mlr count [options] - Prints number of records, optionally grouped by distinct values for specified field names. - - Options: - -g {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not interesting without -g. - -o {name} Field name for output count. Default "count". - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count data/medium - count=10000 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count -g a data/medium - a=pan,count=2081 - a=eks,count=1965 - a=wye,count=1966 - a=zee,count=2047 - a=hat,count=1941 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count -n -g a data/medium - count=5 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count -g b data/medium - b=pan,count=1942 - b=wye,count=2057 - b=zee,count=1943 - b=eks,count=2008 - b=hat,count=2050 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count -n -g b data/medium - count=5 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count -g a,b data/medium - a=pan,b=pan,count=427 - a=eks,b=pan,count=371 - a=wye,b=wye,count=377 - a=eks,b=wye,count=407 - a=wye,b=pan,count=392 - a=zee,b=pan,count=389 - a=eks,b=zee,count=357 - a=zee,b=wye,count=455 - a=hat,b=wye,count=423 - a=pan,b=wye,count=395 - a=zee,b=eks,count=391 - a=hat,b=zee,count=385 - a=hat,b=eks,count=389 - a=wye,b=hat,count=426 - a=pan,b=eks,count=429 - a=eks,b=eks,count=413 - a=hat,b=hat,count=381 - a=hat,b=pan,count=363 - a=zee,b=zee,count=403 - a=pan,b=hat,count=417 - a=pan,b=zee,count=413 - a=zee,b=hat,count=409 - a=wye,b=zee,count=385 - a=eks,b=hat,count=417 - a=wye,b=eks,count=386 - -.. _reference-verbs-count-distinct: - -count-distinct ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-distinct --help - Usage: mlr count-distinct [options] - Prints number of records having distinct values for specified field names. - Same as uniq -c. - - Options: - -f {a,b,c} Field names for distinct count. - -n Show only the number of distinct values. Not compatible with -u. - -o {name} Field name for output count. Default "count". - Ignored with -u. - -u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-distinct -f a,b then sort -nr count data/medium - a=zee,b=wye,count=455 - a=pan,b=eks,count=429 - a=pan,b=pan,count=427 - a=wye,b=hat,count=426 - a=hat,b=wye,count=423 - a=pan,b=hat,count=417 - a=eks,b=hat,count=417 - a=eks,b=eks,count=413 - a=pan,b=zee,count=413 - a=zee,b=hat,count=409 - a=eks,b=wye,count=407 - a=zee,b=zee,count=403 - a=pan,b=wye,count=395 - a=wye,b=pan,count=392 - a=zee,b=eks,count=391 - a=zee,b=pan,count=389 - a=hat,b=eks,count=389 - a=wye,b=eks,count=386 - a=hat,b=zee,count=385 - a=wye,b=zee,count=385 - a=hat,b=hat,count=381 - a=wye,b=wye,count=377 - a=eks,b=pan,count=371 - a=hat,b=pan,count=363 - a=eks,b=zee,count=357 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-distinct -u -f a,b data/medium - field=a,value=pan,count=2081 - field=a,value=eks,count=1965 - field=a,value=wye,count=1966 - field=a,value=zee,count=2047 - field=a,value=hat,count=1941 - field=b,value=pan,count=1942 - field=b,value=wye,count=2057 - field=b,value=zee,count=1943 - field=b,value=eks,count=2008 - field=b,value=hat,count=2050 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium - a=zee,b=wye,someothername=455 - a=pan,b=eks,someothername=429 - a=pan,b=pan,someothername=427 - a=wye,b=hat,someothername=426 - a=hat,b=wye,someothername=423 - a=pan,b=hat,someothername=417 - a=eks,b=hat,someothername=417 - a=eks,b=eks,someothername=413 - a=pan,b=zee,someothername=413 - a=zee,b=hat,someothername=409 - a=eks,b=wye,someothername=407 - a=zee,b=zee,someothername=403 - a=pan,b=wye,someothername=395 - a=wye,b=pan,someothername=392 - a=zee,b=eks,someothername=391 - a=zee,b=pan,someothername=389 - a=hat,b=eks,someothername=389 - a=wye,b=eks,someothername=386 - a=hat,b=zee,someothername=385 - a=wye,b=zee,someothername=385 - a=hat,b=hat,someothername=381 - a=wye,b=wye,someothername=377 - a=eks,b=pan,someothername=371 - a=hat,b=pan,someothername=363 - a=eks,b=zee,someothername=357 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-distinct -n -f a,b data/medium - count=25 - -.. _reference-verbs-count-similar: - -count-similar ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr count-similar --help - Usage: mlr count-similar [options] - Ingests all records, then emits each record augmented by a count of - the number of other records having the same group-by field values. - Options: - -g {d,e,f} Group-by-field names for counts. - -o {name} Field name for output count. Default "count". - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint head -n 20 data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - zee pan 6 0.5271261600918548 0.49322128674835697 - eks zee 7 0.6117840605678454 0.1878849191181694 - zee wye 8 0.5985540091064224 0.976181385699006 - hat wye 9 0.03144187646093577 0.7495507603507059 - pan wye 10 0.5026260055412137 0.9526183602969864 - pan pan 11 0.7930488423451967 0.6505816637259333 - zee pan 12 0.3676141320555616 0.23614420670296965 - eks pan 13 0.4915175580479536 0.7709126592971468 - eks zee 14 0.5207382318405251 0.34141681118811673 - eks pan 15 0.07155556372719507 0.3596137145616235 - pan pan 16 0.5736853980681922 0.7554169353781729 - zee eks 17 0.29081949506712723 0.054478717073354166 - hat zee 18 0.05727869223575699 0.13343527626645157 - zee pan 19 0.43144132839222604 0.8442204830496998 - eks wye 20 0.38245149780530685 0.4730652428100751 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint head -n 20 then count-similar -g a data/medium - a b i x y count - pan pan 1 0.3467901443380824 0.7268028627434533 4 - pan wye 10 0.5026260055412137 0.9526183602969864 4 - pan pan 11 0.7930488423451967 0.6505816637259333 4 - pan pan 16 0.5736853980681922 0.7554169353781729 4 - eks pan 2 0.7586799647899636 0.5221511083334797 7 - eks wye 4 0.38139939387114097 0.13418874328430463 7 - eks zee 7 0.6117840605678454 0.1878849191181694 7 - eks pan 13 0.4915175580479536 0.7709126592971468 7 - eks zee 14 0.5207382318405251 0.34141681118811673 7 - eks pan 15 0.07155556372719507 0.3596137145616235 7 - eks wye 20 0.38245149780530685 0.4730652428100751 7 - wye wye 3 0.20460330576630303 0.33831852551664776 2 - wye pan 5 0.5732889198020006 0.8636244699032729 2 - zee pan 6 0.5271261600918548 0.49322128674835697 5 - zee wye 8 0.5985540091064224 0.976181385699006 5 - zee pan 12 0.3676141320555616 0.23614420670296965 5 - zee eks 17 0.29081949506712723 0.054478717073354166 5 - zee pan 19 0.43144132839222604 0.8442204830496998 5 - hat wye 9 0.03144187646093577 0.7495507603507059 2 - hat zee 18 0.05727869223575699 0.13343527626645157 2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium - a b i x y count - eks pan 2 0.7586799647899636 0.5221511083334797 7 - eks wye 4 0.38139939387114097 0.13418874328430463 7 - eks zee 7 0.6117840605678454 0.1878849191181694 7 - eks pan 13 0.4915175580479536 0.7709126592971468 7 - eks zee 14 0.5207382318405251 0.34141681118811673 7 - eks pan 15 0.07155556372719507 0.3596137145616235 7 - eks wye 20 0.38245149780530685 0.4730652428100751 7 - hat wye 9 0.03144187646093577 0.7495507603507059 2 - hat zee 18 0.05727869223575699 0.13343527626645157 2 - pan pan 1 0.3467901443380824 0.7268028627434533 4 - pan wye 10 0.5026260055412137 0.9526183602969864 4 - pan pan 11 0.7930488423451967 0.6505816637259333 4 - pan pan 16 0.5736853980681922 0.7554169353781729 4 - wye wye 3 0.20460330576630303 0.33831852551664776 2 - wye pan 5 0.5732889198020006 0.8636244699032729 2 - zee pan 6 0.5271261600918548 0.49322128674835697 5 - zee wye 8 0.5985540091064224 0.976181385699006 5 - zee pan 12 0.3676141320555616 0.23614420670296965 5 - zee eks 17 0.29081949506712723 0.054478717073354166 5 - zee pan 19 0.43144132839222604 0.8442204830496998 5 - -.. _reference-verbs-cut: - -cut ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cut --help - Usage: mlr cut [options] - Passes through input records with specified fields included/excluded. - -f {a,b,c} Field names to include for cut. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. - Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cut -f y,x,i data/small - i x y - 1 0.3467901443380824 0.7268028627434533 - 2 0.7586799647899636 0.5221511083334797 - 3 0.20460330576630303 0.33831852551664776 - 4 0.38139939387114097 0.13418874328430463 - 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'a=1,b=2,c=3' | mlr cut -f b,c,a - a=1,b=2,c=3 - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a - b=2,c=3,a=1 - -.. _reference-verbs-decimate: - -decimate ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr decimate --help - Usage: mlr decimate [options] - -n {count} Decimation factor; default 10 - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts - Passes through one of every n records, optionally by category. - -.. _reference-verbs-fill-down: - -fill-down ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr fill-down --help - Usage: mlr fill-down [options] - If a given record has a missing value for a given field, fill that from - the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - - Options: - --all Operate on all fields in the input. - -a|--only-if-absent If a given record has a missing value for a given field, - fill that from the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - -f Field names for fill-down. - -h|--help Show this message. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv fill-down -f b data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,5,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv fill-down -a -f b data/fill-down.csv - a,b,c - 1,,3 - 4,5,6 - 7,,9 - -.. _reference-verbs-filter: - -filter ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter --help - Usage: mlr filter [options] {expression} - Prints records for which {expression} evaluates to true. - If there are multiple semicolon-delimited expressions, all of them are - evaluated and the last one is used as the filter criterion. - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -x: Prints records for which {expression} evaluates to false. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". Please also see "mlr grep" which is - useful when you don't yet know which field name(s) you're looking for. - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter - -Features which filter shares with put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :doc:`reference-dsl` for more information about the expression language for ``mlr filter``. - -.. _reference-verbs-format-values: - -format-values ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr format-values --help - Usage: mlr format-values [options] - Applies format strings to all field values, depending on autodetected type. - * If a field value is detected to be integer, applies integer format. - * Else, if a field value is detected to be float, applies float format. - * Else, applies string format. - - Note: this is a low-keystroke way to apply formatting to many fields. To get - finer control, please see the fmtnum function within the mlr put DSL. - - Note: this verb lets you apply arbitrary format strings, which can produce - undefined behavior and/or program crashes. See your system's "man printf". - - Options: - -i {integer format} Defaults to "%lld". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. - -f {float format} Defaults to "%lf". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. - -s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. - -n Coerce field values autodetected as int to float, and then - apply the float format. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint format-values data/small - a b i x y - pan pan 1 0.346790 0.726803 - eks pan 2 0.758680 0.522151 - wye wye 3 0.204603 0.338319 - eks wye 4 0.381399 0.134189 - wye pan 5 0.573289 0.863624 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint format-values -n data/small - a b i x y - pan pan 1.000000 0.346790 0.726803 - eks pan 2.000000 0.758680 0.522151 - wye wye 3.000000 0.204603 0.338319 - eks wye 4.000000 0.381399 0.134189 - wye pan 5.000000 0.573289 0.863624 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small - a b i x y - XpanX XpanX 00000001 3.467901e-01 7.268029e-01 - XeksX XpanX 00000002 7.586800e-01 5.221511e-01 - XwyeX XwyeX 00000003 2.046033e-01 3.383185e-01 - XeksX XwyeX 00000004 3.813994e-01 1.341887e-01 - XwyeX XpanX 00000005 5.732889e-01 8.636245e-01 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small - a b i x y - XpanX XpanX 1.000000e+00 3.467901e-01 7.268029e-01 - XeksX XpanX 2.000000e+00 7.586800e-01 5.221511e-01 - XwyeX XwyeX 3.000000e+00 2.046033e-01 3.383185e-01 - XeksX XwyeX 4.000000e+00 3.813994e-01 1.341887e-01 - XwyeX XpanX 5.000000e+00 5.732889e-01 8.636245e-01 - -.. _reference-verbs-fraction: - -fraction ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr fraction --help - Usage: mlr fraction [options] - For each record's value in specified fields, computes the ratio of that - value to the sum of values in that field over all input records. - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - - Note: this is internally a two-pass algorithm: on the first pass it retains - input records and accumulates sums; on the second pass it computes quotients - and emits output records. This means it produces no output until all input is read. - - Options: - -f {a,b,c} Field name(s) for fraction calculation - -g {d,e,f} Optional group-by-field name(s) for fraction counts - -p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" - -c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 - -For example, suppose you have the following CSV file: - -.. code-block:: none - - u=female,v=red,n=2458 - u=female,v=green,n=192 - u=female,v=blue,n=337 - u=female,v=purple,n=468 - u=female,v=yellow,n=3 - u=female,v=orange,n=17 - u=male,v=red,n=143 - u=male,v=green,n=227 - u=male,v=blue,n=2034 - u=male,v=purple,n=12 - u=male,v=yellow,n=1192 - u=male,v=orange,n=448 - -Then we can see what each record's ``n`` contributes to the total ``n``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n data/fraction-example.csv - u v n n_fraction - female red 2458 0.326384 - female green 192 0.025495 - female blue 337 0.044748 - female purple 468 0.062143 - female yellow 3 0.000398 - female orange 17 0.002257 - male red 143 0.018988 - male green 227 0.030142 - male blue 2034 0.270084 - male purple 12 0.001593 - male yellow 1192 0.158279 - male orange 448 0.059487 - -Using ``-g`` we can split those out by gender, or by color: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n -g u data/fraction-example.csv - u v n n_fraction - female red 2458 0.707338 - female green 192 0.055252 - female blue 337 0.096978 - female purple 468 0.134676 - female yellow 3 0.000863 - female orange 17 0.004892 - male red 143 0.035256 - male green 227 0.055966 - male blue 2034 0.501479 - male purple 12 0.002959 - male yellow 1192 0.293886 - male orange 448 0.110454 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n -g v data/fraction-example.csv - u v n n_fraction - female red 2458 0.945021 - female green 192 0.458234 - female blue 337 0.142134 - female purple 468 0.975000 - female yellow 3 0.002510 - female orange 17 0.036559 - male red 143 0.054979 - male green 227 0.541766 - male blue 2034 0.857866 - male purple 12 0.025000 - male yellow 1192 0.997490 - male orange 448 0.963441 - -We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females. - -To convert fractions to percents, you may use ``-p``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n -p data/fraction-example.csv - u v n n_percent - female red 2458 32.638428 - female green 192 2.549462 - female blue 337 4.474837 - female purple 468 6.214314 - female yellow 3 0.039835 - female orange 17 0.225734 - male red 143 1.898818 - male green 227 3.014208 - male blue 2034 27.008365 - male purple 12 0.159341 - male yellow 1192 15.827911 - male orange 448 5.948745 - -Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as "running sums". Here, you can use ``-c``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n -p -c data/fraction-example.csv - u v n n_cumulative_percent - female red 2458 32.638428 - female green 192 35.187890 - female blue 337 39.662727 - female purple 468 45.877042 - female yellow 3 45.916877 - female orange 17 46.142611 - male red 143 48.041429 - male green 227 51.055637 - male blue 2034 78.064002 - male purple 12 78.223344 - male yellow 1192 94.051255 - male orange 448 100 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv - u v n n_cumulative_percent - female red 2458 70.733813 - female green 192 76.258993 - female blue 337 85.956835 - female purple 468 99.424460 - female yellow 3 99.510791 - female orange 17 100 - male red 143 3.525641 - male green 227 9.122288 - male blue 2034 59.270217 - male purple 12 59.566075 - male yellow 1192 88.954635 - male orange 448 100 - -.. _reference-verbs-grep: - -grep ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr grep -h - Usage: mlr grep [options] {regular expression} - Passes through records which match {regex}. - Options: - -i Use case-insensitive search. - -v Invert: pass through records which do not match the regex. - Note that "mlr filter" is more powerful, but requires you to know field names. - By contrast, "mlr grep" allows you to regex-match the entire record. It does - this by formatting each record in memory as DKVP, using command-line-specified - ORS/OFS/OPS, and matching the resulting line against the regex specified - here. In particular, the regex is not applied to the input stream: if you - have CSV with header line "x,y,z" and data line "1,2,3" then the regex will - be matched, not against either of these lines, but against the DKVP line - "x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, - and this command is intended to be merely a keystroke-saver. To get all the - features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." - -.. _reference-verbs-group-by: - -group-by ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr group-by --help - Usage: mlr group-by {comma-separated field names} - Outputs records in batches having identical values at specified field names. - -This is similar to ``sort`` but with less work. Namely, Miller's sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint group-by a data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye wye 3 0.20460330576630303 0.33831852551664776 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint sort -f a data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - pan pan 1 0.3467901443380824 0.7268028627434533 - wye wye 3 0.20460330576630303 0.33831852551664776 - wye pan 5 0.5732889198020006 0.8636244699032729 - -In this example, since the sort is on field ``a``, the first step is to group together all records having the same value for field ``a``; the second step is to sort the distinct ``a``-field values ``pan``, ``eks``, and ``wye`` into ``eks``, ``pan``, and ``wye``; the third step is to print out the record-list for ``a=eks``, then the record-list for ``a=pan``, then the record-list for ``a=wye``. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn't desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you. - -.. _reference-verbs-group-like: - -group-like ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr group-like --help - Usage: mlr group-like - Outputs records in batches having identical field names. - -This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in :doc:`record-heterogeneity` -- in particular, in preparation for CSV or pretty-print output. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint group-like data/het.dkvp - resource loadsec ok - /path/to/file 0.45 true - /path/to/second/file 0.32 true - /some/other/path 0.97 false - - record_count resource - 100 /path/to/file - 150 /path/to/second/file - -.. _reference-verbs-having-fields: - -having-fields ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr having-fields --help - Usage: mlr having-fields [options] - Conditionally passes through records depending on each record's field names. - Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} - Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) - -Similar to :ref:`reference-verbs-group-like`, this retains records with specified schema. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr having-fields --at-least resource data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr having-fields --which-are resource,ok,loadsec data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - resource=/path/to/second/file,loadsec=0.32,ok=true - resource=/some/other/path,loadsec=0.97,ok=false - -.. _reference-verbs-head: - -head ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr head --help - Usage: mlr head [options] - -n {count} Head count to print; default 10 - -g {a,b,c} Optional group-by-field names for head counts - Passes through the first n records, optionally by category. - Without -g, ceases consuming more input (i.e. is fast) when n - records have been read. - -Note that ``head`` is distinct from :ref:`reference-verbs-top` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint head -n 4 data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint head -n 1 -g b data/medium - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks zee 7 0.6117840605678454 0.1878849191181694 - zee eks 17 0.29081949506712723 0.054478717073354166 - wye hat 24 0.7286126830627567 0.19441962592638418 - -.. _reference-verbs-histogram: - -histogram ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr histogram --help - Usage: mlr histogram [options] - -f {a,b,c} Value-field names for histogram counts - --lo {lo} Histogram low value - --hi {hi} Histogram high value - --nbins {n} Number of histogram bins - --auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. - -o {prefix} Prefix for output field name. Default: no prefix. - Just a histogram. Input values < lo or > hi are not counted. - -This is just a histogram; there's not too much to say here. A note about binning, by example: Suppose you use ``--lo 0.0 --hi 1.0 --nbins 10 -f x``. The input numbers less than 0 or greater than 1 aren't counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has ``0.0 ≤ x < 0.1``, bin 1 has ``0.1 ≤ x < 0.2``, etc., but bin 9 has ``0.9 ≤ x ≤ 1.0``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium - bin_lo bin_hi x_count x2_count x3_count - 0.000000 0.100000 1072 3231 4661 - 0.100000 0.200000 938 1254 1184 - 0.200000 0.300000 1037 988 845 - 0.300000 0.400000 988 832 676 - 0.400000 0.500000 950 774 576 - 0.500000 0.600000 1002 692 476 - 0.600000 0.700000 1007 591 438 - 0.700000 0.800000 1007 560 420 - 0.800000 0.900000 986 571 383 - 0.900000 1.000000 1013 507 341 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium - my_bin_lo my_bin_hi my_x_count my_x2_count my_x3_count - 0.000000 0.100000 1072 3231 4661 - 0.100000 0.200000 938 1254 1184 - 0.200000 0.300000 1037 988 845 - 0.300000 0.400000 988 832 676 - 0.400000 0.500000 950 774 576 - 0.500000 0.600000 1002 692 476 - 0.600000 0.700000 1007 591 438 - 0.700000 0.800000 1007 560 420 - 0.800000 0.900000 986 571 383 - 0.900000 1.000000 1013 507 341 - -.. _reference-verbs-join: - -join ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr join --help - Usage: mlr join [options] - Joins records from specified left file name with records from all file names - at the end of the Miller argument list. - Functionality is essentially the same as the system "join" command, but for - record streams. - Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - File-format options default to those for the right file names on the Miller - argument list, but may be overridden for the left file as follows. Please see - the main "mlr --help" for more information on syntax for these arguments: - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - --implicit-csv-header - --no-implicit-csv-header - For example, if you have 'mlr --csv ... join -l foo ... ' then the left-file format will - be specified CSV as well unless you override with 'mlr --csv ... join --ijson -l foo' etc. - Likewise, if you have 'mlr --csv --implicit-csv-header ...' then the join-in file will be - expected to be headerless as well unless you put '--no-implicit-csv-header' after 'join'. - Please use "mlr --usage-separator-options" for information on specifying separators. - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information - including examples. - -Examples: - -Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint cat data/join-left-example.csv - id name - 100 alice - 200 bob - 300 carol - 400 david - 500 edgar - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint cat data/join-right-example.csv - status idcode - present 400 - present 100 - missing 200 - present 100 - present 200 - missing 100 - missing 200 - present 300 - missing 600 - present 400 - present 400 - present 300 - present 100 - missing 400 - present 200 - present 200 - present 200 - present 200 - present 400 - present 300 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - id name status - 400 david present - 100 alice present - 200 bob missing - 100 alice present - 200 bob present - 100 alice missing - 200 bob missing - 300 carol present - 400 david present - 400 david present - 300 carol present - 100 alice present - 400 david missing - 200 bob present - 200 bob present - 200 bob present - 200 bob present - 400 david present - 300 carol present - -Same, but with sorting the input first: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - id name status - 100 alice present - 100 alice present - 100 alice missing - 100 alice present - 200 bob missing - 200 bob present - 200 bob missing - 200 bob present - 200 bob present - 200 bob present - 200 bob present - 300 carol present - 300 carol present - 300 carol present - 400 david present - 400 david present - 400 david present - 400 david missing - 400 david present - -Same, but showing only unpaired records: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv - status idcode - missing 600 - - id name - 500 edgar - -Use prefixing options to disambiguate between otherwise identical non-join field names: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv - a b c - 1 2 3 - 1 4 5 - 1 2 3 - 1 4 5 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv - a left_b left_c right_b right_c - 1 2 3 2 3 - 1 4 5 2 3 - 1 2 3 4 5 - 1 4 5 4 5 - -Use zero join columns: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv - left_a left_b left_c right_a right_b right_c - 1 2 3 1 2 3 - 1 4 5 1 2 3 - 1 2 3 1 4 5 - 1 4 5 1 4 5 - -.. _reference-verbs-label: - -label ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr label --help - Usage: mlr label {new1,new2,new3,...} - Given n comma-separated names, renames the first n fields of each record to - have the respective name. (Fields past the nth are left with their original - names.) Particularly useful with --inidx or --implicit-csv-header, to give - useful names to otherwise integer-indexed fields. - Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" - -See also :ref:`reference-verbs-rename`. - -Example: Files such as ``/etc/passwd``, ``/etc/group``, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows: - -.. code-block:: none - - % grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head - name password uid gid gecos home_dir shell - nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false - root * 0 0 System Administrator /var/root /bin/sh - daemon * 1 1 System Services /var/root /usr/bin/false - _uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico - _taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false - _networkd * 24 24 Network Services /var/networkd /usr/bin/false - _installassistant * 25 25 Install Assistant /var/empty /usr/bin/false - _lp * 26 26 Printing Services /var/spool/cups /usr/bin/false - _postfix * 27 27 Postfix Mail Server /var/spool/postfix /usr/bin/false - -Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using ``--implicit-csv-header`` and ``label``: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/headerless.csv - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --implicit-csv-header cat data/headerless.csv - 1,2,3 - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv --implicit-csv-header label name,age,status data/headerless.csv - name,age,status - John,23,present - Fred,34,present - Alice,56,missing - Carol,45,present - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv - name age status - John 23 present - Fred 34 present - Alice 56 missing - Carol 45 present - -.. _reference-verbs-least-frequent: - -least-frequent ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr least-frequent -h - Usage: mlr least-frequent [options] - Shows the least frequently occurring distinct values for specified field names. - The first entry is the statistical anti-mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr most-frequent". - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape -n 5 - shape count - circle 2591 - triangle 3372 - square 4115 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 - shape color count - circle orange 68 - triangle orange 107 - square orange 128 - circle green 287 - circle purple 289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -o someothername - shape color someothername - circle orange 68 - triangle orange 107 - square orange 128 - circle green 287 - circle purple 289 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -b - shape color - circle orange - triangle orange - square orange - circle green - circle purple - -See also :ref:`reference-verbs-most-frequent`. - -.. _reference-verbs-merge-fields: - -merge-fields ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr merge-fields --help - Usage: mlr merge-fields [options] - Computes univariate statistics for each input record, accumulated across - specified fields. - Options: - -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics. Requires -o. - -r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. - -c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -o {name} Output field basename for -f/-r. - -k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -F Computes integerable things (e.g. count) in floating point. - - String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - - Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". - Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. - Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. - Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". - -This is like ``mlr stats1`` but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will. - -Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint cat data/inout.csv - a_in a_out b_in b_out - 436 490 446 195 - 526 320 963 780 - 220 888 705 831 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv - a_min a_max a_sum b_min b_max b_sum - 436 490 926 195 446 641 - 320 526 846 780 963 1743 - 220 888 1108 705 831 1536 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv - a_in a_out b_in b_out a_sum b_sum - 436 490 446 195 926 641 - 526 320 963 780 846 1743 - 220 888 705 831 1108 1536 - -.. _reference-verbs-most-frequent: - -most-frequent ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr most-frequent -h - Usage: mlr most-frequent [options] - Shows the most frequently occurring distinct values for specified field names. - The first entry is the statistical mode; the remaining are runners-up. - Options: - -f {one or more comma-separated field names}. Required flag. - -n {count}. Optional flag defaulting to 10. - -b Suppress counts; show only field values. - -o {name} Field name for output count. Default "count". - See also "mlr least-frequent". - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape -n 5 - shape count - square 4115 - triangle 3372 - circle 2591 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 - shape color count - square red 1874 - triangle red 1560 - circle red 1207 - square yellow 589 - square blue 589 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -o someothername - shape color someothername - square red 1874 - triangle red 1560 - circle red 1207 - square yellow 589 - square blue 589 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -b - shape color - square red - triangle red - circle red - square yellow - square blue - -See also :ref:`reference-verbs-least-frequent`. - -.. _reference-verbs-nest: - -nest ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr nest -h - Usage: mlr nest [options] - Explodes specified field values into separate fields/records, or reverses this. - Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} - Please use "mlr --usage-separator-options" for information on specifying separators. - - Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - - Notes: - * With --pairs, --implode doesn't make sense since the original field name has - been lost. - * The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. - * It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. - See also mlr reshape. - -.. _reference-verbs-nothing: - -nothing ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr nothing -h - Usage: mlr nothing - Drops all input records. Useful for testing, or after tee/print/etc. have - produced other output. - -.. _reference-verbs-put: - -put ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put --help - Usage: mlr put [options] {expression} - Adds/updates specified field(s). Expressions are semicolon-separated and must - either be assignments, or evaluate to boolean. Booleans with following - statements in curly braces control whether those statements are executed; - booleans without following curly braces do nothing except side effects (e.g. - regex-captures into \1, \2, etc.). - - Conversion options: - -S: Keeps field values as strings with no type inference to int or float. - -F: Keeps field values as strings or floats with no inference to int. - All field values are type-inferred to int/float/string unless this behavior is - suppressed with -S or -F. - - Output/formatting options: - --oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". - --jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. - --jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - --no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - - Expression-specification options: - -f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) - -e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - (If you mix -e and -f then the expressions are evaluated in the order encountered. - Since the expression pieces are simply concatenated, please be sure to use intervening - semicolons to separate expressions.) - - -s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - - Tracing options: - -v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - -a: Prints a low-level stack-allocation trace to stdout. - -t: Prints a low-level parser trace to stderr. - -T: Prints a every statement to stderr as it is executed. - - Other options: - -q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. - - Please use a dollar sign for field names and double-quotes for string - literals. If field names have special characters such as "." then you might - use braces, e.g. '${field.name}'. Miller built-in variables are - NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment - variables. The environment-variable name may be an expression, e.g. a field - value. - - Use # to comment to end of line. - - Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\1"; $c = "right_\2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\1"; $c = "right_\2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' - - Please see also 'mlr -k' for examples using redirected output. - - Please see https://miller.readthedocs.io/en/latest/reference.html for more information - including function list. Or "mlr -f". - Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put - -Features which put shares with filter -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see the :doc:`reference-dsl` for more information about the expression language for ``mlr put``. - -.. _reference-verbs-regularize: - -regularize ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr regularize --help - Usage: mlr regularize - For records seen earlier in the data stream with same field names in - a different order, outputs them with field names in the previously - encountered order. - Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 - output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 - -This exists since hash-map software in various languages and tools encountered in the wild does not always print similar rows with fields in the same order: ``mlr regularize`` helps clean that up. - -See also :ref:`reference-verbs-reorder`. - -.. _reference-verbs-remove-empty-columns: - -remove-empty-columns ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr remove-empty-columns --help - Usage: mlr remove-empty-columns - Omits fields which are empty on every input row. Non-streaming. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/remove-empty-columns.csv - a,b,c,d,e - 1,,3,,5 - 2,,4,,5 - 3,,5,,7 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv remove-empty-columns data/remove-empty-columns.csv - a,c,e - 1,3,5 - 2,4,5 - 3,5,7 - -Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any. - -.. _reference-verbs-rename: - -rename ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr rename --help - Usage: mlr rename [options] {old1,new1,old2,new2,...} - Renames specified fields. - Options: - -r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\1" through - "\9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. - -g Do global replacement within each field name rather than - first-match replacement. - Examples: - mlr rename old_name,new_name' - mlr rename old_name_1,new_name_1,old_name_2,new_name_2' - mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" - mlr rename -r '"Date_[0-9]+",Date' Same - mlr rename -r 'Date_([0-9]+).*,\1' Rename all such fields to be of the form 20151015 - mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint rename i,INDEX,b,COLUMN2 data/small - a COLUMN2 INDEX x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -As discussed in :doc:`performance`, ``sed`` is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - sed 's/y/COLUMN5/g' data/small - a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797 - a=wCOLUMN5e,b=wCOLUMN5e,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776 - a=eks,b=wCOLUMN5e,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463 - a=wCOLUMN5e,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr rename y,COLUMN5 data/small - a=pan,b=pan,i=1,x=0.3467901443380824,COLUMN5=0.7268028627434533 - a=eks,b=pan,i=2,x=0.7586799647899636,COLUMN5=0.5221511083334797 - a=wye,b=wye,i=3,x=0.20460330576630303,COLUMN5=0.33831852551664776 - a=eks,b=wye,i=4,x=0.38139939387114097,COLUMN5=0.13418874328430463 - a=wye,b=pan,i=5,x=0.5732889198020006,COLUMN5=0.8636244699032729 - -See also :ref:`reference-verbs-label`. - -.. _reference-verbs-reorder: - -reorder ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr reorder --help - Usage: mlr reorder [options] - -f {a,b,c} Field names to reorder. - -e Put specified field names at record end: default is to put - them at record start. - -b {x} Put field names specified with -f before field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. - -a {x} Put field names specified with -f after field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. - Examples: - mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". - mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". - -This pivots specified field names to the start or end of the record -- for -example when you have highly multi-column data and you want to bring a field or -two to the front of line where you can give a quick visual scan. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint reorder -f i,b data/small - i b a x y - 1 pan pan 0.3467901443380824 0.7268028627434533 - 2 pan eks 0.7586799647899636 0.5221511083334797 - 3 wye wye 0.20460330576630303 0.33831852551664776 - 4 wye eks 0.38139939387114097 0.13418874328430463 - 5 pan wye 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint reorder -e -f i,b data/small - a x y i b - pan 0.3467901443380824 0.7268028627434533 1 pan - eks 0.7586799647899636 0.5221511083334797 2 pan - wye 0.20460330576630303 0.33831852551664776 3 wye - eks 0.38139939387114097 0.13418874328430463 4 wye - wye 0.5732889198020006 0.8636244699032729 5 pan - -.. _reference-verbs-repeat: - -repeat ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr repeat --help - Usage: mlr repeat [options] - Copies input records to output records multiple times. - Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. - Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' - produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 - Example: - echo a=1,b=2,c=3 | mlr repeat -f b - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - Example: - echo a=1,b=2,c=3 | mlr repeat -f c - produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 - -This is useful in at least two ways: one, as a data-generator as in the -above example using ``urand()``; two, for reconstructing individual -samples from data which has been count-aggregated: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/repeat-example.dat - color=blue,count=5 - color=red,count=4 - color=green,count=3 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr repeat -f count then cut -x -f count data/repeat-example.dat - color=blue - color=blue - color=blue - color=blue - color=blue - color=red - color=red - color=red - color=red - color=green - color=green - color=green - -After expansion with ``repeat``, such data can then be sent on to -``stats1 -a mode``, or (if the data are numeric) to ``stats1 -a -p10,p50,p90``, etc. - -.. _reference-verbs-reshape: - -reshape ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr reshape --help - Usage: mlr reshape [options] - Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. - Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - - Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - See also mlr nest. - -.. _reference-verbs-sample: - -sample ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sample --help - Usage: mlr sample [options] - Reservoir sampling (subsampling without replacement), optionally by category. - -k {count} Required: number of records to output, total, or by group if using -g. - -g {a,b,c} Optional: group-by-field names for samples. - See also mlr bootstrap and mlr shuffle. - -This is reservoir-sampling: select *k* items from *n* with -uniform probability and no repeats in the sample. (If *n* is less than -*k*, then of course only *n* samples are produced.) With ``-g -{field names}``, produce a *k*-sample for each distinct value of the -specified field names. - -.. code-block:: none - - $ mlr --opprint sample -k 4 data/colored-shapes.dkvp - color shape flag i u v w x - purple triangle 0 90122 0.9986871176198068 0.3037738877233719 0.5154934457238382 5.365962021016529 - red circle 0 3139 0.04835898233323954 -0.03964684310055758 0.5263660881848111 5.3758779366493625 - orange triangle 0 67847 0.36746306902109926 0.5161574810505635 0.5176199566173642 3.1748088656576567 - yellow square 1 33576 0.3098376725521097 0.8525628505287842 0.49774122460981685 4.494754378604669 - - $ mlr --opprint sample -k 4 data/colored-shapes.dkvp - color shape flag i u v w x - blue square 1 16783 0.09974385090654347 0.7243899920872646 0.5353718443278438 4.431057737383438 - orange square 1 93291 0.5944176543007182 0.17744449786454086 0.49262281749172077 3.1548117990710653 - yellow square 1 54436 0.5268161165014636 0.8785588662666121 0.5058773791931063 7.019185838783636 - yellow square 1 55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984 3.526301273728043 - - $ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp - color shape flag i u v w x - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - yellow square 1 917 0.8547010348386344 0.7356782810796262 0.4531511689924275 5.774541777078352 - red circle 1 4000 0.05490416175132373 0.07392337815122155 0.49416101516594396 5.355725080701707 - red square 0 87506 0.6357719216821314 0.6970867759393995 0.4940826462055272 6.351579417310387 - purple triangle 0 14898 0.7800986870203719 0.23998073813992293 0.5014775988383656 3.141006771777843 - purple triangle 0 151 0.032614487569017414 0.7346633365041219 0.7812143304483805 2.6831992610568047 - green triangle 1 126 0.1513010528347546 0.40346767294704544 0.051213231883952326 5.955109300797182 - green circle 0 17635 0.029856606049114442 0.4724542934246524 0.49529606749929744 5.239153910272168 - blue circle 1 1020 0.414263129226617 0.8304946402876182 0.13151094520189244 4.397873687920433 - blue triangle 0 220 0.441773289968473 0.44597731903759075 0.6329360666849821 4.3064608776550894 - orange square 0 1885 0.8079311983747106 0.8685956833908394 0.3116410800256374 4.390864584500387 - orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 - - $ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp - color shape flag i u v w x - blue circle 0 215 0.7803586969333292 0.33146680638888126 0.04289047852629113 5.725365736377487 - blue circle 1 3616 0.8548431579124808 0.4989623130006362 0.3339426415875795 3.696785877560498 - green square 0 356 0.7674272008085286 0.341578843118008 0.4570224877870851 4.830320062215299 - green square 0 152 0.6684429446914862 0.016056003736548696 0.4656148241291592 5.434588759225423 - orange triangle 0 587 0.5175826237797857 0.08989091493635304 0.9011709461770973 4.265854207755811 - orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 - purple triangle 0 14192 0.5196327866973567 0.7860928603468063 0.4964368415453642 4.899167143824484 - purple triangle 0 65 0.6842806710360729 0.5823723856331258 0.8014053396013747 5.805148213865135 - red square 1 2431 0.38378504852300466 0.11445015005595527 0.49355539228753786 5.146756570128739 - red triangle 0 57097 0.43763430414406546 0.3355450325004481 0.5322349637512487 4.144267240289442 - yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 - yellow square 1 158 0.41527900739142165 0.7118027080775757 0.4200799665161291 5.33279067554884 - - -Note that no output is produced until all inputs are in. Another way to do -sampling, which works in the streaming case, is ``mlr filter 'urand() & -0.001'`` where you tune the 0.001 to meet your needs. - -.. _reference-verbs-sec2gmt: - -sec2gmt ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sec2gmt -h - Usage: mlr sec2gmt [options] {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT timestamp; leaves non-numbers as-is. This is nothing - more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 - is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' - Options: - -1 through -9: format the seconds using 1..9 decimal places, respectively. - -.. _reference-verbs-sec2gmtdate: - -sec2gmtdate ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sec2gmtdate -h - Usage: mlr sec2gmtdate {comma-separated list of field names} - Replaces a numeric field representing seconds since the epoch with the - corresponding GMT year-month-day timestamp; leaves non-numbers as-is. - This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 - is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' - -.. _reference-verbs-seqgen: - -seqgen ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr seqgen -h - Usage: mlr seqgen [options] - Produces a sequence of counters. Discards the input record stream. Produces - output as specified by the following options: - -f {name} Field name for counters; default "i". - --start {number} Inclusive start value; default "1". - --stop {number} Inclusive stop value; default "100". - --step {number} Step value; default "1". - Start, stop, and/or step may be floating-point. Output is integer if start, - stop, and step are all integers. Step may be negative. It may not be zero - unless start == stop. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr seqgen --stop 10 - i=1 - i=2 - i=3 - i=4 - i=5 - i=6 - i=7 - i=8 - i=9 - i=10 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr seqgen --start 20 --stop 40 --step 4 - i=20 - i=24 - i=28 - i=32 - i=36 - i=40 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr seqgen --start 40 --stop 20 --step -4 - i=40 - i=36 - i=32 - i=28 - i=24 - i=20 - -.. _reference-verbs-shuffle: - -shuffle ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr shuffle -h - Usage: mlr shuffle {no options} - Outputs records randomly permuted. No output records are produced until - all input records are read. - See also mlr bootstrap and mlr sample. - -.. _reference-verbs-skip-trivial-records: - -skip-trivial-records ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr skip-trivial-records -h - Usage: mlr skip-trivial-records [options] - Passes through all records except: - * those with zero fields; - * those for which all fields have empty value. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/trivial-records.csv - a,b,c - 1,2,3 - 4,,6 - ,, - ,8,9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --csv skip-trivial-records data/trivial-records.csv - a,b,c - 1,2,3 - 4,,6 - ,8,9 - -.. _reference-verbs-sort: - -sort ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort --help - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint sort -f a -nr x data/small - a b i x y - eks pan 2 0.7586799647899636 0.5221511083334797 - eks wye 4 0.38139939387114097 0.13418874328430463 - pan pan 1 0.3467901443380824 0.7268028627434533 - wye pan 5 0.5732889198020006 0.8636244699032729 - wye wye 3 0.20460330576630303 0.33831852551664776 - -Here's an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 10 data/multicountdown.dat - upsec=0.002,color=green,count=1203 - upsec=0.083,color=red,count=3817 - upsec=0.188,color=red,count=3801 - upsec=0.395,color=blue,count=2697 - upsec=0.526,color=purple,count=953 - upsec=0.671,color=blue,count=2684 - upsec=0.899,color=purple,count=926 - upsec=0.912,color=red,count=3798 - upsec=1.093,color=blue,count=2662 - upsec=1.327,color=purple,count=917 - -We can group these by thread by sorting on the thread ID (here, -``color``). Since Miller's sort is stable, this means that -timestamps within each thread's log data are still chronological: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 20 data/multicountdown.dat | mlr --opprint sort -f color - upsec color count - 0.395 blue 2697 - 0.671 blue 2684 - 1.093 blue 2662 - 2.064 blue 2659 - 2.2880000000000003 blue 2647 - 0.002 green 1203 - 1.407 green 1187 - 1.448 green 1177 - 2.313 green 1161 - 0.526 purple 953 - 0.899 purple 926 - 1.327 purple 917 - 1.703 purple 908 - 0.083 red 3817 - 0.188 red 3801 - 0.912 red 3798 - 1.416 red 3788 - 1.587 red 3782 - 1.601 red 3755 - 1.832 red 3717 - -Any records not having all specified sort keys will appear at the end of the output, in the order they -were encountered, regardless of the specified sort order: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -n x data/sort-missing.dkvp - x=1 - x=2 - x=4 - a=3 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -nr x data/sort-missing.dkvp - x=4 - x=2 - x=1 - a=3 - -.. _reference-verbs-sort-within-records: - -sort-within-records ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort-within-records -h - Usage: mlr sort-within-records [no options] - Outputs records sorted lexically ascending by keys. - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sort-within-records.json - { - "a": 1, - "b": 2, - "c": 3 - } - { - "b": 4, - "a": 5, - "c": 6 - } - { - "c": 7, - "b": 8, - "a": 9 - } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint cat data/sort-within-records.json - a b c - 1 2 3 - - b a c - 4 5 6 - - c b a - 7 8 9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json sort-within-records data/sort-within-records.json - { "a": 1, "b": 2, "c": 3 } - { "a": 5, "b": 4, "c": 6 } - { "a": 9, "b": 8, "c": 7 } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint sort-within-records data/sort-within-records.json - a b c - 1 2 3 - 5 4 6 - 9 8 7 - -.. _reference-verbs-stats1: - -stats1 ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats1 --help - Usage: mlr stats1 [options] - Computes univariate statistics for one or more given fields, accumulated across - the input record stream. - Options: - -a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - -f {a,b,c} Value-field names on which to compute statistics - --fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) - --fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - -g {d,e,f} Optional group-by-field names - --gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) - --gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - -i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - -F Computes integerable things (e.g. count) in floating point. - Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - Example: mlr stats1 -a count,mode -f size - Example: mlr stats1 -a count,mode -f size -g shape - Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - Notes: - * p50 and median are synonymous. - * min and max output the same results as p0 and p100, respectively, but use - less memory. - * String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. - * count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. - * When there are mode ties, the first-encountered datum wins. - -These are simple univariate statistics on one or more number-valued fields -(``count`` and ``mode`` apply to non-numeric fields as well), -optionally categorized by one or more other fields. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium - x_count 10000 - x_sum 4986.019682 - x_min 0.000045 - x_p10 0.093322 - x_p50 0.501159 - x_mean 0.498602 - x_p90 0.900794 - x_max 0.999953 - y_count 10000 - y_sum 5062.057445 - y_min 0.000088 - y_p10 0.102132 - y_p50 0.506021 - y_mean 0.506206 - y_p90 0.905366 - y_max 0.999965 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium - b x_mean y_mean - eks 0.506361 0.510293 - hat 0.487899 0.513118 - pan 0.497304 0.499599 - wye 0.497593 0.504596 - zee 0.504242 0.502997 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp - color u_p50 u_p99 v_p50 v_p99 ur vr - yellow 0.501019 0.989046 0.520630 0.987034 1.974069 1.895845 - red 0.485038 0.990054 0.492586 0.994444 2.041189 2.018823 - purple 0.501319 0.988893 0.504571 0.988287 1.972582 1.958668 - green 0.502015 0.990764 0.505359 0.990175 1.973574 1.959350 - blue 0.525226 0.992655 0.485170 0.993873 1.889958 2.048505 - orange 0.483548 0.993635 0.480913 0.989102 2.054884 2.056717 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp - shape count - square 4115 - triangle 3372 - circle 2591 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp - shape color_mode - triangle red - square red - circle red - -.. _reference-verbs-stats2: - -stats2 ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr stats2 --help - Usage: mlr stats2 [options] - Computes bivariate statistics for one or more given field-name pairs, - accumulated across the input record stream. - -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix - -f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. - -g {e,f,g} Optional group-by-field names. - -v Print additional output for linreg-pca. - -s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). - --fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. - Only one of -s or --fit may be used. - Example: mlr stats2 -a linreg-pca -f x,y - Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape - Example: mlr stats2 -a corr -f x,y - -These are simple bivariate statistics on one or more pairs of number-valued -fields, optionally categorized by one or more fields. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium - x_y_cov 0.000043 - x_y_corr 0.000504 - y_y_cov 0.084611 - y_y_corr 1.000000 - x2_xy_cov 0.041884 - x2_xy_corr 0.630174 - x2_y2_cov -0.000310 - x2_y2_corr -0.003425 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium - a x_y_ols_m x_y_ols_b x_y_ols_n x_y_r2 y_y_ols_m y_y_ols_b y_y_ols_n y_y_r2 xy_y2_ols_m xy_y2_ols_b xy_y2_ols_n xy_y2_r2 - pan 0.017026 0.500403 2081 0.000287 1.000000 0.000000 2081 1.000000 0.878132 0.119082 2081 0.417498 - eks 0.040780 0.481402 1965 0.001646 1.000000 0.000000 1965 1.000000 0.897873 0.107341 1965 0.455632 - wye -0.039153 0.525510 1966 0.001505 1.000000 0.000000 1966 1.000000 0.853832 0.126745 1966 0.389917 - zee 0.002781 0.504307 2047 0.000008 1.000000 0.000000 2047 1.000000 0.852444 0.124017 2047 0.393566 - hat -0.018621 0.517901 1941 0.000352 1.000000 0.000000 1941 1.000000 0.841230 0.135573 1941 0.368794 - -Here's an example simple line-fit. The ``x`` and ``y`` -fields of the ``data/medium`` dataset are just independent uniformly -distributed on the unit interval. Here we remove half the data and fit a line to it. - -.. code-block:: none - - - # Prepare input data: - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares - - # Do a linear regression and examine coefficients: - mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares - x_y_pca_m=1.014419 - x_y_pca_b=0.000308 - x_y_pca_quality=0.861354 - - # Option 1 to apply the regression coefficients and produce a linear fit: - # Set x_y_pca_m and x_y_pca_b as shell variables: - eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares) - # In addition to x and y, make a new yfit which is the line fit, then plot - # using your favorite tool: - mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - - # Option 2 to apply the regression coefficients and produce a linear fit: use --fit option - mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - - -I use `pgr `_ for plotting; here's a screenshot. - -.. image:: data/linreg-example.jpg - - -(Thanks Drew Kunas for a good conversation about PCA!) - -Here's an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the ``count`` field and accumulated seconds in the ``upsec`` field, labeled by the ``color`` field: - -.. code-block:: none - :emphasize-lines: 1,1 - - head -n 10 data/multicountdown.dat - upsec=0.002,color=green,count=1203 - upsec=0.083,color=red,count=3817 - upsec=0.188,color=red,count=3801 - upsec=0.395,color=blue,count=2697 - upsec=0.526,color=purple,count=953 - upsec=0.671,color=blue,count=2684 - upsec=0.899,color=purple,count=926 - upsec=0.912,color=red,count=3798 - upsec=1.093,color=blue,count=2662 - upsec=1.327,color=purple,count=917 - -We can do a linear regression on count remaining as a function of time: with ``c = m*u+b`` we want to find the time when the count goes to zero, i.e. ``u=-b/m``. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat - color green - upsec_count_pca_m -32.756917 - upsec_count_pca_b 1213.722730 - upsec_count_pca_n 24 - upsec_count_pca_quality 0.999984 - donesec 37.052410 - - color red - upsec_count_pca_m -37.367646 - upsec_count_pca_b 3810.133400 - upsec_count_pca_n 30 - upsec_count_pca_quality 0.999989 - donesec 101.963431 - - color blue - upsec_count_pca_m -29.231212 - upsec_count_pca_b 2698.932820 - upsec_count_pca_n 25 - upsec_count_pca_quality 0.999959 - donesec 92.330514 - - color purple - upsec_count_pca_m -39.030097 - upsec_count_pca_b 979.988341 - upsec_count_pca_n 21 - upsec_count_pca_quality 0.999991 - donesec 25.108529 - -.. _reference-verbs-step: - -step ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr step --help - Usage: mlr step [options] - Computes values dependent on the previous record, optionally grouped - by category. - - Options: - -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - -f {a,b,c} Value-field names on which to compute statistics - -g {d,e,f} Optional group-by-field names - -F Computes integerable things (e.g. counter) in floating point. - -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". - -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. - - Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - - Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average - for more information on EWMA. - -Most Miller commands are record-at-a-time, with the exception of ``stats1``, ``stats2``, and ``histogram`` which compute aggregate output. The ``step`` command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for *running sum*. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15 - a b i x y x_shift x_delta x_rsum x_counter - pan pan 1 0.3467901443380824 0.7268028627434533 - 0 0.346790 1 - eks pan 2 0.7586799647899636 0.5221511083334797 0.3467901443380824 0.411890 1.105470 2 - wye wye 3 0.20460330576630303 0.33831852551664776 0.7586799647899636 -0.554077 1.310073 3 - eks wye 4 0.38139939387114097 0.13418874328430463 0.20460330576630303 0.176796 1.691473 4 - wye pan 5 0.5732889198020006 0.8636244699032729 0.38139939387114097 0.191890 2.264762 5 - zee pan 6 0.5271261600918548 0.49322128674835697 0.5732889198020006 -0.046163 2.791888 6 - eks zee 7 0.6117840605678454 0.1878849191181694 0.5271261600918548 0.084658 3.403672 7 - zee wye 8 0.5985540091064224 0.976181385699006 0.6117840605678454 -0.013230 4.002226 8 - hat wye 9 0.03144187646093577 0.7495507603507059 0.5985540091064224 -0.567112 4.033668 9 - pan wye 10 0.5026260055412137 0.9526183602969864 0.03144187646093577 0.471184 4.536294 10 - pan pan 11 0.7930488423451967 0.6505816637259333 0.5026260055412137 0.290423 5.329343 11 - zee pan 12 0.3676141320555616 0.23614420670296965 0.7930488423451967 -0.425435 5.696957 12 - eks pan 13 0.4915175580479536 0.7709126592971468 0.3676141320555616 0.123903 6.188474 13 - eks zee 14 0.5207382318405251 0.34141681118811673 0.4915175580479536 0.029221 6.709213 14 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15 - a b i x y x_shift x_delta x_rsum x_counter - pan pan 1 0.3467901443380824 0.7268028627434533 - 0 0.346790 1 - eks pan 2 0.7586799647899636 0.5221511083334797 - 0 0.758680 1 - wye wye 3 0.20460330576630303 0.33831852551664776 - 0 0.204603 1 - eks wye 4 0.38139939387114097 0.13418874328430463 0.7586799647899636 -0.377281 1.140079 2 - wye pan 5 0.5732889198020006 0.8636244699032729 0.20460330576630303 0.368686 0.777892 2 - zee pan 6 0.5271261600918548 0.49322128674835697 - 0 0.527126 1 - eks zee 7 0.6117840605678454 0.1878849191181694 0.38139939387114097 0.230385 1.751863 3 - zee wye 8 0.5985540091064224 0.976181385699006 0.5271261600918548 0.071428 1.125680 2 - hat wye 9 0.03144187646093577 0.7495507603507059 - 0 0.031442 1 - pan wye 10 0.5026260055412137 0.9526183602969864 0.3467901443380824 0.155836 0.849416 2 - pan pan 11 0.7930488423451967 0.6505816637259333 0.5026260055412137 0.290423 1.642465 3 - zee pan 12 0.3676141320555616 0.23614420670296965 0.5985540091064224 -0.230940 1.493294 3 - eks pan 13 0.4915175580479536 0.7709126592971468 0.6117840605678454 -0.120267 2.243381 4 - eks zee 14 0.5207382318405251 0.34141681118811673 0.4915175580479536 0.029221 2.764119 5 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a ewma -f x -d 0.1,0.9 data/medium | head -15 - a b i x y x_ewma_0.1 x_ewma_0.9 - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 0.717491 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 0.255892 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 0.368849 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 0.552845 - zee pan 6 0.5271261600918548 0.49322128674835697 0.404671 0.529698 - eks zee 7 0.6117840605678454 0.1878849191181694 0.425382 0.603575 - zee wye 8 0.5985540091064224 0.976181385699006 0.442699 0.599056 - hat wye 9 0.03144187646093577 0.7495507603507059 0.401573 0.088203 - pan wye 10 0.5026260055412137 0.9526183602969864 0.411679 0.461184 - pan pan 11 0.7930488423451967 0.6505816637259333 0.449816 0.759862 - zee pan 12 0.3676141320555616 0.23614420670296965 0.441596 0.406839 - eks pan 13 0.4915175580479536 0.7709126592971468 0.446588 0.483050 - eks zee 14 0.5207382318405251 0.34141681118811673 0.454003 0.516969 - - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough data/medium | head -15 - a b i x y x_ewma_smooth x_ewma_rough - pan pan 1 0.3467901443380824 0.7268028627434533 0.346790 0.346790 - eks pan 2 0.7586799647899636 0.5221511083334797 0.387979 0.717491 - wye wye 3 0.20460330576630303 0.33831852551664776 0.369642 0.255892 - eks wye 4 0.38139939387114097 0.13418874328430463 0.370817 0.368849 - wye pan 5 0.5732889198020006 0.8636244699032729 0.391064 0.552845 - zee pan 6 0.5271261600918548 0.49322128674835697 0.404671 0.529698 - eks zee 7 0.6117840605678454 0.1878849191181694 0.425382 0.603575 - zee wye 8 0.5985540091064224 0.976181385699006 0.442699 0.599056 - hat wye 9 0.03144187646093577 0.7495507603507059 0.401573 0.088203 - pan wye 10 0.5026260055412137 0.9526183602969864 0.411679 0.461184 - pan pan 11 0.7930488423451967 0.6505816637259333 0.449816 0.759862 - zee pan 12 0.3676141320555616 0.23614420670296965 0.441596 0.406839 - eks pan 13 0.4915175580479536 0.7709126592971468 0.446588 0.483050 - eks zee 14 0.5207382318405251 0.34141681118811673 0.454003 0.516969 - - -Example deriving uptime-delta from system uptime: - -.. code-block:: none - - $ each 10 uptime | mlr -p step -a delta -f 11 - ... - 20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000 - 20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000 - 20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000 - 20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000 - 20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000 - 20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000 - 20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000 - 20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000 - - -.. _reference-verbs-tac: - -tac ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr tac --help - Usage: mlr tac - Prints records in reverse order from the order in which they were encountered. - -Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cat data/a.csv - a b c - 1 2 3 - 4 5 6 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint cat data/b.csv - a b c - 7 8 9 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint tac data/a.csv data/b.csv - a b c - 7 8 9 - 4 5 6 - 1 2 3 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv - a b c filename - 7 8 9 data/b.csv - 4 5 6 data/a.csv - 1 2 3 data/a.csv - -.. _reference-verbs-tail: - -tail ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr tail --help - Usage: mlr tail [options] - -n {count} Tail count to print; default 10 - -g {a,b,c} Optional group-by-field names for tail counts - Passes through the last n records, optionally by category. - -Prints the last *n* records in the input stream, optionally by category. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint tail -n 4 data/colored-shapes.dkvp - color shape flag i u v w x - blue square 1 99974 0.6189062525431605 0.2637962404841453 0.5311465405784674 6.210738209085753 - blue triangle 0 99976 0.008110504040268474 0.8267274952432482 0.4732962944898885 6.146956761817328 - yellow triangle 0 99990 0.3839424618160777 0.55952913620132 0.5113763011485609 4.307973891915119 - yellow circle 1 99994 0.764950884927175 0.25284227383991364 0.49969878539567425 5.013809741826425 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp - color shape flag i u v w x - yellow triangle 0 99990 0.3839424618160777 0.55952913620132 0.5113763011485609 4.307973891915119 - blue square 1 99974 0.6189062525431605 0.2637962404841453 0.5311465405784674 6.210738209085753 - yellow circle 1 99994 0.764950884927175 0.25284227383991364 0.49969878539567425 5.013809741826425 - -.. _reference-verbs-tee: - -tee ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr tee --help - Usage: mlr tee [options] {filename} - Passes through input records (like mlr cat) but also writes to specified output - file, using output-format flags from the command line (e.g. --ocsv). See also - the "tee" keyword within mlr put, which allows data-dependent filenames. - Options: - -a: append to existing file, if any, rather than overwriting. - --no-fflush: don't call fflush() after every record. - Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... - the input is CSV, the output is pretty-print tabular, but the tee-file output - is written in JSON format. - -.. _reference-verbs-top: - -top ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr top --help - Usage: mlr top [options] - -f {a,b,c} Value-field names for top counts. - -g {d,e,f} Optional group-by-field names for top counts. - -n {count} How many records to print per category; default 1. - -a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. - --min Print top smallest values; default is top largest values. - -F Keep top values as floats even if they look like integers. - -o {name} Field name for output indices. Default "top_idx". - Prints the n records with smallest/largest values at specified fields, - optionally by category. - -Note that ``top`` is distinct from :ref:`reference-verbs-head` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint top -n 4 -f x data/medium - top_idx x_top - 1 0.999953 - 2 0.999823 - 3 0.999733 - 4 0.999563 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint top -n 4 -f x -o someothername data/medium - someothername x_top - 1 0.999953 - 2 0.999823 - 3 0.999733 - 4 0.999563 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint top -n 2 -f x -g a then sort -f a data/medium - a top_idx x_top - eks 1 0.998811 - eks 2 0.998534 - hat 1 0.999953 - hat 2 0.999733 - pan 1 0.999403 - pan 2 0.999044 - wye 1 0.999823 - wye 2 0.999264 - zee 1 0.999490 - zee 2 0.999438 - -.. _reference-verbs-uniq: - -uniq ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr uniq --help - Usage: mlr uniq [options] - Prints distinct values for specified field names. With -c, same as - count-distinct. For uniq, -f is a synonym for -g. - - Options: - -g {d,e,f} Group-by-field names for uniq counts. - -c Show repeat counts in addition to unique values. - -n Show only the number of distinct values. - -o {name} Field name for output count. Default "count". - -a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. - -There are two main ways to use ``mlr uniq``: the first way is with ``-g`` to specify group-by columns. - -.. code-block:: none - :emphasize-lines: 1,1 - - wc -l data/colored-shapes.dkvp - 10078 data/colored-shapes.dkvp - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr uniq -g color,shape data/colored-shapes.dkvp - color=yellow,shape=triangle - color=red,shape=square - color=red,shape=circle - color=purple,shape=triangle - color=yellow,shape=circle - color=purple,shape=square - color=yellow,shape=square - color=red,shape=triangle - color=green,shape=triangle - color=green,shape=square - color=blue,shape=circle - color=blue,shape=triangle - color=purple,shape=circle - color=blue,shape=square - color=green,shape=circle - color=orange,shape=triangle - color=orange,shape=square - color=orange,shape=circle - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp - color shape count - blue circle 384 - blue square 589 - blue triangle 497 - green circle 287 - green square 454 - green triangle 368 - orange circle 68 - orange square 128 - orange triangle 107 - purple circle 289 - purple square 481 - purple triangle 372 - red circle 1207 - red square 1874 - red triangle 1560 - yellow circle 356 - yellow square 589 - yellow triangle 468 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp - color shape someothername - red square 1874 - red triangle 1560 - red circle 1207 - yellow square 589 - blue square 589 - blue triangle 497 - purple square 481 - yellow triangle 468 - green square 454 - blue circle 384 - purple triangle 372 - green triangle 368 - yellow circle 356 - purple circle 289 - green circle 287 - orange square 128 - orange triangle 107 - orange circle 68 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp - count - 18 - -The second main way to use ``mlr uniq`` is without group-by columns, using ``-a`` instead: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/repeats.dkvp - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=yellow,shape=circle,flag=1 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=1 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=0 - color=red,shape=square,flag=0 - color=purple,shape=triangle,flag=0 - color=yellow,shape=triangle,flag=1 - color=purple,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=red,shape=circle,flag=1 - color=purple,shape=triangle,flag=0 - color=purple,shape=triangle,flag=0 - color=red,shape=square,flag=0 - color=red,shape=circle,flag=1 - color=red,shape=square,flag=1 - color=red,shape=square,flag=0 - color=red,shape=circle,flag=1 - color=purple,shape=square,flag=0 - color=purple,shape=square,flag=0 - color=red,shape=square,flag=1 - color=purple,shape=triangle,flag=0 - color=purple,shape=triangle,flag=0 - color=purple,shape=square,flag=0 - color=yellow,shape=circle,flag=1 - color=red,shape=square,flag=0 - color=yellow,shape=triangle,flag=1 - color=yellow,shape=circle,flag=1 - color=purple,shape=square,flag=0 - -.. code-block:: none - :emphasize-lines: 1,1 - - wc -l data/repeats.dkvp - 57 data/repeats.dkvp - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -a data/repeats.dkvp - color shape flag - red square 0 - purple triangle 0 - yellow circle 1 - red circle 1 - purple square 0 - red square 1 - yellow triangle 1 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -a -n data/repeats.dkvp - count - 7 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint uniq -a -c data/repeats.dkvp - count color shape flag - 17 red square 0 - 11 purple triangle 0 - 11 yellow circle 1 - 6 red circle 1 - 7 purple square 0 - 3 red square 1 - 2 yellow triangle 1 - -.. _reference-verbs-unsparsify: - -unsparsify ----------------------------------------------------------------- - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr unsparsify --help - Usage: mlr unsparsify [options] - Prints records with the union of field names over all input records. - For field names absent in a given record but present in others, fills in a - value. Without -f, this verb retains all input before producing any output. - - Options: - --fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. - -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - - Example: if the input is two records, one being 'a=1,b=2' and the other - being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and - 'a=,b=3,c=4'. - -Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/sparse.json - {"a":1,"b":2,"v":3} - {"u":1,"b":2} - {"a":1,"v":2,"x":3} - {"v":1,"w":2} - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --json unsparsify data/sparse.json - { "a": 1, "b": 2, "v": 3, "u": "", "x": "", "w": "" } - { "a": "", "b": 2, "v": "", "u": 1, "x": "", "w": "" } - { "a": 1, "b": "", "v": 2, "u": "", "x": 3, "w": "" } - { "a": "", "b": "", "v": 1, "u": "", "x": "", "w": 2 } - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint unsparsify data/sparse.json - a b v u x w - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - 3 - - - - 1 - - 2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json - a b v u x w - 1 2 3 missing missing missing - missing 2 missing 1 missing missing - 1 missing 2 missing 3 missing - missing missing 1 missing missing 2 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint unsparsify -f a,b,u data/sparse.json - a b v u - 1 2 3 - - - u b a - 1 2 - - - a v x b u - 1 2 3 - - - - v w a b u - 1 2 - - - - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --ijson --opprint unsparsify -f a,b,u,v,w,x then regularize data/sparse.json - a b v u w x - 1 2 3 - - - - - 2 - 1 - - - 1 - 2 - - 3 - - - 1 - 2 - - diff --git a/docs/reference-verbs.rst.in b/docs/reference-verbs.rst.in deleted file mode 100644 index 58ed328d3..000000000 --- a/docs/reference-verbs.rst.in +++ /dev/null @@ -1,897 +0,0 @@ -Verbs reference -================================================================ - -Overview ----------------------------------------------------------------- - -When you type ``mlr {something} myfile.dat``, the ``{something}`` part is called a **verb**. It specifies how you want to transform your data. (See also :ref:`reference-command-overview` for a breakdown.) The following is an alphabetical list of verbs with their descriptions. - -The verbs ``put`` and ``filter`` are special in that they have a rich expression language (domain-specific language, or "DSL"). More information about them can be found at :doc:`reference-dsl`. - -Here's a comparison of verbs and ``put``/``filter`` DSL expressions: - -Example: - -POKI_RUN_COMMAND{{mlr stats1 -a sum -f x -g a data/small}}HERE - -* Verbs are coded in C -* They run a bit faster -* They take fewer keystrokes -* There is less to learn -* Their customization is limited to each verb's options - -Example: - -POKI_RUN_COMMAND{{mlr put -q '@x_sum[$a] += $x; end{emit @x_sum, "a"}' data/small}}HERE - -* You get to write your own DSL expressions -* They run a bit slower -* They take more keystrokes -* There is more to learn -* They are highly customizable - -.. _reference-verbs-altkv: - -altkv ----------------------------------------------------------------- - -Map list of values to alternating key/value pairs. - -POKI_RUN_COMMAND{{mlr altkv -h}}HERE - -POKI_RUN_COMMAND{{echo 'a,b,c,d,e,f' | mlr altkv}}HERE - -POKI_RUN_COMMAND{{echo 'a,b,c,d,e,f,g' | mlr altkv}}HERE - -.. _reference-verbs-bar: - -bar ----------------------------------------------------------------- - -Cheesy bar-charting. - -POKI_RUN_COMMAND{{mlr bar -h}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint bar --lo 0 --hi 1 -f x,y data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint bar --lo 0.4 --hi 0.6 -f x,y data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint bar --auto -f x,y data/small}}HERE - -.. _reference-verbs-bootstrap: - -bootstrap ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr bootstrap --help}}HERE - -The canonical use for bootstrap sampling is to put error bars on statistical quantities, such as mean. For example: - -.. code-block:: none - - $ mlr --opprint stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.497129 1413 - red 0.492560 4641 - purple 0.494005 1142 - green 0.504861 1109 - blue 0.517717 1470 - orange 0.490532 303 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.500651 1380 - purple 0.501556 1111 - green 0.503272 1068 - red 0.493895 4702 - blue 0.512529 1496 - orange 0.521030 321 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - yellow 0.498046 1485 - blue 0.513576 1417 - red 0.492870 4595 - orange 0.507697 307 - green 0.496803 1075 - purple 0.486337 1199 - -.. code-block:: none - - $ mlr --opprint bootstrap then stats1 -a mean,count -f u -g color data/colored-shapes.dkvp - color u_mean u_count - blue 0.522921 1447 - red 0.490717 4617 - yellow 0.496450 1419 - purple 0.496523 1192 - green 0.507569 1111 - orange 0.468014 292 - -.. _reference-verbs-cat: - -cat ----------------------------------------------------------------- - -Most useful for format conversions (see :doc:`file-formats`, and concatenating multiple same-schema CSV files to have the same header: - -POKI_RUN_COMMAND{{mlr cat -h}}HERE - -POKI_RUN_COMMAND{{cat data/a.csv}}HERE - -POKI_RUN_COMMAND{{cat data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv cat data/a.csv data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --oxtab cat data/a.csv data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv cat -n data/a.csv data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat -n -g a data/small}}HERE - -.. _reference-verbs-check: - -check ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr check --help}}HERE - -.. _reference-verbs-clean-whitespace: - -clean-whitespace ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr clean-whitespace --help}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --ojson cat data/clean-whitespace.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace -k data/clean-whitespace.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace -v data/clean-whitespace.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --ojson clean-whitespace data/clean-whitespace.csv}}HERE - -Function links: - -* :ref:`reference-dsl-lstrip` -* :ref:`reference-dsl-rstrip` -* :ref:`reference-dsl-strip` -* :ref:`reference-dsl-collapse_whitespace` -* :ref:`reference-dsl-clean_whitespace` - -.. _reference-verbs-count: - -count ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr count --help}}HERE - -POKI_RUN_COMMAND{{mlr count data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count -g a data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count -n -g a data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count -g b data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count -n -g b data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count -g a,b data/medium}}HERE - -.. _reference-verbs-count-distinct: - -count-distinct ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr count-distinct --help}}HERE - -POKI_RUN_COMMAND{{mlr count-distinct -f a,b then sort -nr count data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count-distinct -u -f a,b data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count-distinct -f a,b -o someothername then sort -nr someothername data/medium}}HERE - -POKI_RUN_COMMAND{{mlr count-distinct -n -f a,b data/medium}}HERE - -.. _reference-verbs-count-similar: - -count-similar ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr count-similar --help}}HERE - -POKI_RUN_COMMAND{{mlr --opprint head -n 20 data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint head -n 20 then count-similar -g a data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint head -n 20 then count-similar -g a then sort -f a data/medium}}HERE - -.. _reference-verbs-cut: - -cut ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr cut --help}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cut -f y,x,i data/small}}HERE - -POKI_RUN_COMMAND{{echo 'a=1,b=2,c=3' | mlr cut -f b,c,a}}HERE - -POKI_RUN_COMMAND{{echo 'a=1,b=2,c=3' | mlr cut -o -f b,c,a}}HERE - -.. _reference-verbs-decimate: - -decimate ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr decimate --help}}HERE - -.. _reference-verbs-fill-down: - -fill-down ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr fill-down --help}}HERE - -POKI_RUN_COMMAND{{cat data/fill-down.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv fill-down -f b data/fill-down.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv fill-down -a -f b data/fill-down.csv}}HERE - -.. _reference-verbs-filter: - -filter ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr filter --help}}HERE - -Features which filter shares with put -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see :doc:`reference-dsl` for more information about the expression language for ``mlr filter``. - -.. _reference-verbs-format-values: - -format-values ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr format-values --help}}HERE - -POKI_RUN_COMMAND{{mlr --opprint format-values data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint format-values -n data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint format-values -i %08llx -f %.6le -s X%sX data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint format-values -i %08llx -f %.6le -s X%sX -n data/small}}HERE - -.. _reference-verbs-fraction: - -fraction ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr fraction --help}}HERE - -For example, suppose you have the following CSV file: - -POKI_INCLUDE_ESCAPED(data/fraction-example.csv)HERE - -Then we can see what each record's ``n`` contributes to the total ``n``: - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n data/fraction-example.csv}}HERE - -Using ``-g`` we can split those out by gender, or by color: - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g u data/fraction-example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g v data/fraction-example.csv}}HERE - -We can see, for example, that 70.9% of females have red (on the left) while 94.5% of reds are for females. - -To convert fractions to percents, you may use ``-p``: - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n -p data/fraction-example.csv}}HERE - -Another often-used idiom is to convert from a point distribution to a cumulative distribution, also known as "running sums". Here, you can use ``-c``: - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n -p -c data/fraction-example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --opprint fraction -f n -g u -p -c data/fraction-example.csv}}HERE - -.. _reference-verbs-grep: - -grep ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr grep -h}}HERE - -.. _reference-verbs-group-by: - -group-by ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr group-by --help}}HERE - -This is similar to ``sort`` but with less work. Namely, Miller's sort has three steps: read through the data and append linked lists of records, one for each unique combination of the key-field values; after all records are read, sort the key-field values; then print each record-list. The group-by operation simply omits the middle sort. An example should make this more clear. - -POKI_RUN_COMMAND{{mlr --opprint group-by a data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint sort -f a data/small}}HERE - -In this example, since the sort is on field ``a``, the first step is to group together all records having the same value for field ``a``; the second step is to sort the distinct ``a``-field values ``pan``, ``eks``, and ``wye`` into ``eks``, ``pan``, and ``wye``; the third step is to print out the record-list for ``a=eks``, then the record-list for ``a=pan``, then the record-list for ``a=wye``. The group-by operation omits the middle sort and just puts like records together, for those times when a sort isn't desired. In particular, the ordering of group-by fields for group-by is the order in which they were encountered in the data stream, which in some cases may be more interesting to you. - -.. _reference-verbs-group-like: - -group-like ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr group-like --help}}HERE - -This groups together records having the same schema (i.e. same ordered list of field names) which is useful for making sense of time-ordered output as described in :doc:`record-heterogeneity` -- in particular, in preparation for CSV or pretty-print output. - -POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint group-like data/het.dkvp}}HERE - -.. _reference-verbs-having-fields: - -having-fields ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr having-fields --help}}HERE - -Similar to :ref:`reference-verbs-group-like`, this retains records with specified schema. - -POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr having-fields --at-least resource data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr having-fields --which-are resource,ok,loadsec data/het.dkvp}}HERE - -.. _reference-verbs-head: - -head ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr head --help}}HERE - -Note that ``head`` is distinct from :ref:`reference-verbs-top` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -POKI_RUN_COMMAND{{mlr --opprint head -n 4 data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint head -n 1 -g b data/medium}}HERE - -.. _reference-verbs-histogram: - -histogram ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr histogram --help}}HERE - -This is just a histogram; there's not too much to say here. A note about binning, by example: Suppose you use ``--lo 0.0 --hi 1.0 --nbins 10 -f x``. The input numbers less than 0 or greater than 1 aren't counted in any bin. Input numbers equal to 1 are counted in the last bin. That is, bin 0 has ``0.0 ≤ x < 0.1``, bin 1 has ``0.1 ≤ x < 0.2``, etc., but bin 9 has ``0.9 ≤ x ≤ 1.0``. - -POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x**2;$x3=$x2*$x' then histogram -f x,x2,x3 --lo 0 --hi 1 --nbins 10 -o my_ data/medium}}HERE - -.. _reference-verbs-join: - -join ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr join --help}}HERE - -Examples: - -Join larger table with IDs with smaller ID-to-name lookup table, showing only paired records: - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-left-example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint cat data/join-right-example.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint join -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE - -Same, but with sorting the input first: - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint sort -f idcode then join -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE - -Same, but showing only unpaired records: - -POKI_RUN_COMMAND{{mlr --icsvlite --opprint join --np --ul --ur -u -j id -r idcode -f data/join-left-example.csv data/join-right-example.csv}}HERE - -Use prefixing options to disambiguate between otherwise identical non-join field names: - -POKI_RUN_COMMAND{{mlr --csvlite --opprint cat data/self-join.csv data/self-join.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csvlite --opprint join -j a --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv}}HERE - -Use zero join columns: - -POKI_RUN_COMMAND{{mlr --csvlite --opprint join -j "" --lp left_ --rp right_ -f data/self-join.csv data/self-join.csv}}HERE - -.. _reference-verbs-label: - -label ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr label --help}}HERE - -See also :ref:`reference-verbs-rename`. - -Example: Files such as ``/etc/passwd``, ``/etc/group``, and so on have implicit field names which are found in section-5 manpages. These field names may be made explicit as follows: - -POKI_INCLUDE_ESCAPED(data/label-example.txt)HERE - -Likewise, if you have CSV/CSV-lite input data which has somehow been bereft of its header line, you can re-add a header line using ``--implicit-csv-header`` and ``label``: - -POKI_RUN_COMMAND{{cat data/headerless.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header cat data/headerless.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv --implicit-csv-header label name,age,status data/headerless.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --implicit-csv-header --opprint label name,age,status data/headerless.csv}}HERE - -.. _reference-verbs-least-frequent: - -least-frequent ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr least-frequent -h}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape -n 5}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -o someothername}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp least-frequent -f shape,color -n 5 -b}}HERE - -See also :ref:`reference-verbs-most-frequent`. - -.. _reference-verbs-merge-fields: - -merge-fields ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr merge-fields --help}}HERE - -This is like ``mlr stats1`` but all accumulation is done across fields within each given record: horizontal rather than vertical statistics, if you will. - -Examples: - -POKI_RUN_COMMAND{{mlr --csvlite --opprint cat data/inout.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csvlite --opprint merge-fields -a min,max,sum -c _in,_out data/inout.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csvlite --opprint merge-fields -k -a sum -c _in,_out data/inout.csv}}HERE - -.. _reference-verbs-most-frequent: - -most-frequent ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr most-frequent -h}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape -n 5}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -o someothername}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --from data/colored-shapes.dkvp most-frequent -f shape,color -n 5 -b}}HERE - -See also :ref:`reference-verbs-least-frequent`. - -.. _reference-verbs-nest: - -nest ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr nest -h}}HERE - -.. _reference-verbs-nothing: - -nothing ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr nothing -h}}HERE - -.. _reference-verbs-put: - -put ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr put --help}}HERE - -Features which put shares with filter -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Please see the :doc:`reference-dsl` for more information about the expression language for ``mlr put``. - -.. _reference-verbs-regularize: - -regularize ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr regularize --help}}HERE - -This exists since hash-map software in various languages and tools encountered in the wild does not always print similar rows with fields in the same order: ``mlr regularize`` helps clean that up. - -See also :ref:`reference-verbs-reorder`. - -.. _reference-verbs-remove-empty-columns: - -remove-empty-columns ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr remove-empty-columns --help}}HERE - -POKI_RUN_COMMAND{{cat data/remove-empty-columns.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv remove-empty-columns data/remove-empty-columns.csv}}HERE - -Since this verb needs to read all records to see if any of them has a non-empty value for a given field name, it is non-streaming: it will ingest all records before writing any. - -.. _reference-verbs-rename: - -rename ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr rename --help}}HERE - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint rename i,INDEX,b,COLUMN2 data/small}}HERE - -As discussed in :doc:`performance`, ``sed`` is significantly faster than Miller at doing this. However, Miller is format-aware, so it knows to do renames only within specified field keys and not any others, nor in field values which may happen to contain the same pattern. Example: - -POKI_RUN_COMMAND{{sed 's/y/COLUMN5/g' data/small}}HERE - -POKI_RUN_COMMAND{{mlr rename y,COLUMN5 data/small}}HERE - -See also :ref:`reference-verbs-label`. - -.. _reference-verbs-reorder: - -reorder ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr reorder --help}}HERE - -This pivots specified field names to the start or end of the record -- for -example when you have highly multi-column data and you want to bring a field or -two to the front of line where you can give a quick visual scan. - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint reorder -f i,b data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint reorder -e -f i,b data/small}}HERE - -.. _reference-verbs-repeat: - -repeat ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr repeat --help}}HERE - -This is useful in at least two ways: one, as a data-generator as in the -above example using ``urand()``; two, for reconstructing individual -samples from data which has been count-aggregated: - -POKI_RUN_COMMAND{{cat data/repeat-example.dat}}HERE - -POKI_RUN_COMMAND{{mlr repeat -f count then cut -x -f count data/repeat-example.dat}}HERE - -After expansion with ``repeat``, such data can then be sent on to -``stats1 -a mode``, or (if the data are numeric) to ``stats1 -a -p10,p50,p90``, etc. - -.. _reference-verbs-reshape: - -reshape ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr reshape --help}}HERE - -.. _reference-verbs-sample: - -sample ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr sample --help}}HERE - -This is reservoir-sampling: select *k* items from *n* with -uniform probability and no repeats in the sample. (If *n* is less than -*k*, then of course only *n* samples are produced.) With ``-g -{field names}``, produce a *k*-sample for each distinct value of the -specified field names. - -POKI_INCLUDE_ESCAPED(data/sample-example.txt)HERE - -Note that no output is produced until all inputs are in. Another way to do -sampling, which works in the streaming case, is ``mlr filter 'urand() & -0.001'`` where you tune the 0.001 to meet your needs. - -.. _reference-verbs-sec2gmt: - -sec2gmt ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr sec2gmt -h}}HERE - -.. _reference-verbs-sec2gmtdate: - -sec2gmtdate ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr sec2gmtdate -h}}HERE - -.. _reference-verbs-seqgen: - -seqgen ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr seqgen -h}}HERE - -POKI_RUN_COMMAND{{mlr seqgen --stop 10}}HERE - -POKI_RUN_COMMAND{{mlr seqgen --start 20 --stop 40 --step 4}}HERE - -POKI_RUN_COMMAND{{mlr seqgen --start 40 --stop 20 --step -4}}HERE - -.. _reference-verbs-shuffle: - -shuffle ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr shuffle -h}}HERE - -.. _reference-verbs-skip-trivial-records: - -skip-trivial-records ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr skip-trivial-records -h}}HERE - -POKI_RUN_COMMAND{{cat data/trivial-records.csv}}HERE - -POKI_RUN_COMMAND{{mlr --csv skip-trivial-records data/trivial-records.csv}}HERE - -.. _reference-verbs-sort: - -sort ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr sort --help}}HERE - -Example: - -POKI_RUN_COMMAND{{mlr --opprint sort -f a -nr x data/small}}HERE - -Here's an example filtering log data: suppose multiple threads (labeled here by color) are all logging progress counts to a single log file. The log file is (by nature) chronological, so the progress of various threads is interleaved: - -POKI_RUN_COMMAND{{head -n 10 data/multicountdown.dat}}HERE - -We can group these by thread by sorting on the thread ID (here, -``color``). Since Miller's sort is stable, this means that -timestamps within each thread's log data are still chronological: - -POKI_RUN_COMMAND{{head -n 20 data/multicountdown.dat | mlr --opprint sort -f color}}HERE - -Any records not having all specified sort keys will appear at the end of the output, in the order they -were encountered, regardless of the specified sort order: - -POKI_RUN_COMMAND{{mlr sort -n x data/sort-missing.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr sort -nr x data/sort-missing.dkvp}}HERE - -.. _reference-verbs-sort-within-records: - -sort-within-records ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr sort-within-records -h}}HERE - -POKI_RUN_COMMAND{{cat data/sort-within-records.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint cat data/sort-within-records.json}}HERE - -POKI_RUN_COMMAND{{mlr --json sort-within-records data/sort-within-records.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint sort-within-records data/sort-within-records.json}}HERE - -.. _reference-verbs-stats1: - -stats1 ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr stats1 --help}}HERE - -These are simple univariate statistics on one or more number-valued fields -(``count`` and ``mode`` apply to non-numeric fields as well), -optionally categorized by one or more other fields. - -POKI_RUN_COMMAND{{mlr --oxtab stats1 -a count,sum,min,p10,p50,mean,p90,max -f x,y data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a mean -f x,y -g b then sort -f b data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a p50,p99 -f u,v -g color then put '$ur=$u_p99/$u_p50;$vr=$v_p99/$v_p50' data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint count-distinct -f shape then sort -nr count data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint stats1 -a mode -f color -g shape data/colored-shapes.dkvp}}HERE - -.. _reference-verbs-stats2: - -stats2 ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr stats2 --help}}HERE - -These are simple bivariate statistics on one or more pairs of number-valued -fields, optionally categorized by one or more fields. - -POKI_RUN_COMMAND{{mlr --oxtab put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a cov,corr -f x,y,y,y,x2,xy,x2,y2 data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint put '$x2=$x*$x; $xy=$x*$y; $y2=$y**2' then stats2 -a linreg-ols,r2 -f x,y,y,y,xy,y2 -g a data/medium}}HERE - -Here's an example simple line-fit. The ``x`` and ``y`` -fields of the ``data/medium`` dataset are just independent uniformly -distributed on the unit interval. Here we remove half the data and fit a line to it. - -POKI_INCLUDE_ESCAPED(data/linreg-example.txt)HERE - -I use `pgr `_ for plotting; here's a screenshot. - -.. image:: data/linreg-example.jpg - - -(Thanks Drew Kunas for a good conversation about PCA!) - -Here's an example estimating time-to-completion for a set of jobs. Input data comes from a log file, with number of work units left to do in the ``count`` field and accumulated seconds in the ``upsec`` field, labeled by the ``color`` field: - -POKI_RUN_COMMAND{{head -n 10 data/multicountdown.dat}}HERE - -We can do a linear regression on count remaining as a function of time: with ``c = m*u+b`` we want to find the time when the count goes to zero, i.e. ``u=-b/m``. - -POKI_RUN_COMMAND{{mlr --oxtab stats2 -a linreg-pca -f upsec,count -g color then put '$donesec = -$upsec_count_pca_b/$upsec_count_pca_m' data/multicountdown.dat}}HERE - -.. _reference-verbs-step: - -step ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr step --help}}HERE - -Most Miller commands are record-at-a-time, with the exception of ``stats1``, ``stats2``, and ``histogram`` which compute aggregate output. The ``step`` command is intermediate: it allows the option of adding fields which are functions of fields from previous records. Rsum is short for *running sum*. - -POKI_RUN_COMMAND{{mlr --opprint step -a shift,delta,rsum,counter -f x data/medium | head -15}}HERE - -POKI_RUN_COMMAND{{mlr --opprint step -a shift,delta,rsum,counter -f x -g a data/medium | head -15}}HERE - -POKI_RUN_COMMAND{{mlr --opprint step -a ewma -f x -d 0.1,0.9 data/medium | head -15}}HERE - - -POKI_RUN_COMMAND{{mlr --opprint step -a ewma -f x -d 0.1,0.9 -o smooth,rough data/medium | head -15}}HERE - - -Example deriving uptime-delta from system uptime: - -POKI_INCLUDE_ESCAPED(data/ping-delta-example.txt)HERE - -.. _reference-verbs-tac: - -tac ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr tac --help}}HERE - -Prints the records in the input stream in reverse order. Note: this requires Miller to retain all input records in memory before any output records are produced. - -POKI_RUN_COMMAND{{mlr --icsv --opprint cat data/a.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint cat data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint tac data/a.csv data/b.csv}}HERE - -POKI_RUN_COMMAND{{mlr --icsv --opprint put '$filename=FILENAME' then tac data/a.csv data/b.csv}}HERE - -.. _reference-verbs-tail: - -tail ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr tail --help}}HERE - -Prints the last *n* records in the input stream, optionally by category. - -POKI_RUN_COMMAND{{mlr --opprint tail -n 4 data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint tail -n 1 -g shape data/colored-shapes.dkvp}}HERE - -.. _reference-verbs-tee: - -tee ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr tee --help}}HERE - -.. _reference-verbs-top: - -top ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr top --help}}HERE - -Note that ``top`` is distinct from :ref:`reference-verbs-head` -- ``head`` shows fields which appear first in the data stream; ``top`` shows fields which are numerically largest (or smallest). - -POKI_RUN_COMMAND{{mlr --opprint top -n 4 -f x data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint top -n 4 -f x -o someothername data/medium}}HERE - -POKI_RUN_COMMAND{{mlr --opprint top -n 2 -f x -g a then sort -f a data/medium}}HERE - -.. _reference-verbs-uniq: - -uniq ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr uniq --help}}HERE - -There are two main ways to use ``mlr uniq``: the first way is with ``-g`` to specify group-by columns. - -POKI_RUN_COMMAND{{wc -l data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr uniq -g color,shape data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -g color,shape -c then sort -f color,shape data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -g color,shape -c -o someothername then sort -nr someothername data/colored-shapes.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -n -g color,shape data/colored-shapes.dkvp}}HERE - -The second main way to use ``mlr uniq`` is without group-by columns, using ``-a`` instead: - -POKI_RUN_COMMAND{{cat data/repeats.dkvp}}HERE - -POKI_RUN_COMMAND{{wc -l data/repeats.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -a data/repeats.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -a -n data/repeats.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr --opprint uniq -a -c data/repeats.dkvp}}HERE - -.. _reference-verbs-unsparsify: - -unsparsify ----------------------------------------------------------------- - -POKI_RUN_COMMAND{{mlr unsparsify --help}}HERE - -Examples: - -POKI_RUN_COMMAND{{cat data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --json unsparsify data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify --fill-with missing data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify -f a,b,u data/sparse.json}}HERE - -POKI_RUN_COMMAND{{mlr --ijson --opprint unsparsify -f a,b,u,v,w,x then regularize data/sparse.json}}HERE - diff --git a/docs/reference.rst b/docs/reference.rst deleted file mode 100644 index 9c21fecc2..000000000 --- a/docs/reference.rst +++ /dev/null @@ -1,1128 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Main reference -================================================================ - - -.. _reference-command-overview: - -Command overview ----------------------------------------------------------------- - -Whereas the Unix toolkit is made of the separate executables ``cat``, ``tail``, ``cut``, -``sort``, etc., Miller has subcommands, or **verbs**, invoked as follows: - -.. code-block:: none - - mlr tac *.dat - mlr cut --complement -f os_version *.dat - mlr sort -f hostname,uptime *.dat - -These fall into categories as follows: - -* Analogs of their Unix-toolkit namesakes, discussed below as well as in :doc:`feature-comparison`: :ref:`reference-verbs-cat` :ref:`reference-verbs-cut` :ref:`reference-verbs-grep` :ref:`reference-verbs-head` :ref:`reference-verbs-join` :ref:`reference-verbs-sort` :ref:`reference-verbs-tac` :ref:`reference-verbs-tail` :ref:`reference-verbs-top` :ref:`reference-verbs-uniq`. - -* ``awk``-like functionality: :ref:`reference-verbs-filter` :ref:`reference-verbs-put` :ref:`reference-verbs-sec2gmt` :ref:`reference-verbs-sec2gmtdate` :ref:`reference-verbs-step` :ref:`reference-verbs-tee`. - -* Statistically oriented: :ref:`reference-verbs-bar` :ref:`reference-verbs-bootstrap` :ref:`reference-verbs-decimate` :ref:`reference-verbs-histogram` :ref:`reference-verbs-least-frequent` :ref:`reference-verbs-most-frequent` :ref:`reference-verbs-sample` :ref:`reference-verbs-shuffle` :ref:`reference-verbs-stats1` :ref:`reference-verbs-stats2`. - -* Particularly oriented toward :doc:`record-heterogeneity`, although all Miller commands can handle heterogeneous records: :ref:`reference-verbs-group-by` :ref:`reference-verbs-group-like` :ref:`reference-verbs-having-fields`. - -* These draw from other sources (see also :doc:`originality`): :ref:`reference-verbs-count-distinct` is SQL-ish, and :ref:`reference-verbs-rename` can be done by ``sed`` (which does it faster: see :doc:`performance`. Verbs: :ref:`reference-verbs-check` :ref:`reference-verbs-count-distinct` :ref:`reference-verbs-label` :ref:`reference-verbs-merge-fields` :ref:`reference-verbs-nest` :ref:`reference-verbs-nothing` :ref:`reference-verbs-regularize` :ref:`reference-verbs-rename` :ref:`reference-verbs-reorder` :ref:`reference-verbs-reshape` :ref:`reference-verbs-seqgen`. - -I/O options ----------------------------------------------------------------- - -Formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -.. code-block:: none - - --dkvp --idkvp --odkvp - --nidx --inidx --onidx - --csv --icsv --ocsv - --csvlite --icsvlite --ocsvlite - --pprint --ipprint --opprint --right - --xtab --ixtab --oxtab - --json --ijson --ojson - -These are as discussed in :doc:`file-formats`, with the exception of ``--right`` which makes pretty-printed output right-aligned: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --opprint --right cat data/small - a b i x y - pan pan 1 0.3467901443380824 0.7268028627434533 - eks pan 2 0.7586799647899636 0.5221511083334797 - wye wye 3 0.20460330576630303 0.33831852551664776 - eks wye 4 0.38139939387114097 0.13418874328430463 - wye pan 5 0.5732889198020006 0.8636244699032729 - -Additional notes: - -* Use ``--csv``, ``--pprint``, etc. when the input and output formats are the same. - -* Use ``--icsv --opprint``, etc. when you want format conversion as part of what Miller does to your data. - -* DKVP (key-value-pair) format is the default for input and output. So, ``--oxtab`` is the same as ``--idkvp --oxtab``. - -**Pro-tip:** Please use either **--format1**, or **--iformat1 --oformat2**. If you use **--format1 --oformat2** then what happens is that flags are set up for input *and* output for format1, some of which are overwritten for output in format2. For technical reasons, having ``--oformat2`` clobber all the output-related effects of ``--format1`` also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199. - -In-place mode -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the ``mlr -I`` flag to process files in-place. For example, ``mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv`` will remove ``unwanted_column_name`` from all your ``*.csv`` files in your ``mydata/`` subdirectory. - -By default, Miller output goes to the screen (or you can redirect a file using ``>`` or to another process using ``|``). With ``-I``, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on. - -Please see :ref:`10min-choices-for-printing-to-files` for examples. - -Compression -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -.. code-block:: none - - --prepipe {command} - - -The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. ``mlr --prepipe 'zcat -cf'``. Examples: - -.. code-block:: none - - # These two produce the same output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz - # With multiple input files you need --prepipe: - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz - $ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz - -.. code-block:: none - - # Similar to the above, but with compressed output as well as input: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz - -.. code-block:: none - - # Similar to the above, but with different compression tools for input and output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz - $ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz - $ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz - -.. _reference-separators: - -Record/field/pair separators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller has record separators ``IRS`` and ``ORS``, field separators ``IFS`` and ``OFS``, and pair separators ``IPS`` and ``OPS``. For example, in the DKVP line ``a=1,b=2,c=3``, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values. - -Options: - -.. code-block:: none - - --rs --irs --ors - --fs --ifs --ofs --repifs - --ps --ips --ops - -* You can change a separator from input to output via e.g. ``--ifs = --ofs :``. Or, you can specify that the same separator is to be used for input and output via e.g. ``--fs :``. - -* The pair separator is only relevant to DKVP format. - -* Pretty-print and xtab formats ignore the separator arguments altogether. - -* The ``--repifs`` means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. ``2,9,,,,,6,5,4``. On the other hand, if the field separator is a space, it might be more natural to parse ``2 4 5`` the same as ``2 4 5``: ``--repifs --ifs ' '`` lets this happen. In fact, the ``--ipprint`` option above is internally implemented in terms of ``--repifs``. - -* Just write out the desired separator, e.g. ``--ofs '|'``. But you may use the symbolic names ``newline``, ``space``, ``tab``, ``pipe``, or ``semicolon`` if you like. - -Number formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The command-line option ``--ofmt {format string}`` is the global number format for commands which generate numeric output, e.g. ``stats1``, ``stats2``, ``histogram``, and ``step``, as well as ``mlr put``. Examples: - -.. code-block:: none - - --ofmt %.9le --ofmt %.6lf --ofmt %.0lf - -These are just C ``printf`` formats applied to double-precision numbers. Please don't use ``%s`` or ``%d``. Additionally, if you use leading width (e.g. ``%18.12lf``) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller's pretty-print format (``mlr --opprint``) to column-align numerical data. - -To apply formatting to a single field, overriding the global ``ofmt``, use ``fmtnum`` function within ``mlr put``. For example: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")' - x=3.1,y=4.3,z=13.330000 - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")' - x=0xffff,y=0xff,z=00feff01 - -Input conversion from hexadecimal is done automatically on fields handled by ``mlr put`` and ``mlr filter`` as long as the field value begins with "0x". To apply output conversion to hexadecimal on a single column, you may use ``fmtnum``, or the keystroke-saving ``hexfmt`` function. Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)' - x=0xffff,y=0xff,z=0xfeff01 - -Data transformations (verbs) ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-verbs`. - -Expression language for filter and put ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-dsl`. - -then-chaining ----------------------------------------------------------------- - -In accord with the `Unix philosophy `_, you can pipe data into or out of Miller. For example: - -.. code-block:: none - - mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime - -You can, if you like, instead simply chain commands together using the ``then`` keyword: - -.. code-block:: none - - mlr cut --complement -f os_version then sort -f hostname,uptime *.dat - -(You can precede the very first verb with ``then``, if you like, for symmetry.) - -Here's a performance comparison: - -.. code-block:: none - - % cat piped.sh - mlr cut -x -f i,y data/big | mlr sort -n y > /dev/null - - % time sh piped.sh - real 0m2.828s - user 0m3.183s - sys 0m0.137s - - - % cat chained.sh - mlr cut -x -f i,y then sort -n y data/big > /dev/null - - % time sh chained.sh - real 0m2.082s - user 0m1.933s - sys 0m0.137s - -There are two reasons to use then-chaining: one is for performance, although I don't expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way. - -The other reason to use then-chaining is for simplicity: you don't have re-type formatting flags (e.g. ``--csv --fs tab``) at every pipeline stage. - -Auxiliary commands ----------------------------------------------------------------- - -There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they're delivered within the main Miller executable for convenience. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr aux-list - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr lecat --help - Usage: mlr lecat [options] {zero or more file names} - Simply echoes input, but flags CR characters in red and LF characters in green. - If zero file names are supplied, standard input is read. - Options: - --mono: don't try to colorize the output - -h or --help: print this message - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr termcvt --help - Usage: mlr termcvt [option] {zero or more file names} - Option (exactly one is required): - --cr2crlf - --lf2crlf - --crlf2cr - --crlf2lf - --cr2lf - --lf2cr - -I in-place processing (default is to write to stdout) - -h or --help: print this message - Zero file names means read from standard input. - Output is always to standard output; files are not written in-place. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr hex --help - Usage: mlr hex [options] {zero or more file names} - Simple hex-dump. - If zero file names are supplied, standard input is read. - Options: - -r: print only raw hex without leading offset indicators or trailing ASCII dump. - -h or --help: print this message - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr unhex --help - Usage: mlr unhex [option] {zero or more file names} - Options: - -h or --help: print this message - Zero file names means read from standard input. - Output is always to standard output; files are not written in-place. - -Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'Hello, world!' | mlr lecat --mono - Hello, world![LF] - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono - Hello, world![CR][LF] - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr hex data/budget.csv - 00000000: 23 20 41 73 61 6e 61 20 2d 2d 20 68 65 72 65 20 |# Asana -- here | - 00000010: 61 72 65 20 74 68 65 20 62 75 64 67 65 74 20 66 |are the budget f| - 00000020: 69 67 75 72 65 73 20 79 6f 75 20 61 73 6b 65 64 |igures you asked| - 00000030: 20 66 6f 72 21 0a 74 79 70 65 2c 71 75 61 6e 74 | for!.type,quant| - 00000040: 69 74 79 0a 70 75 72 70 6c 65 2c 34 35 36 2e 37 |ity.purple,456.7| - 00000050: 38 0a 67 72 65 65 6e 2c 36 37 38 2e 31 32 0a 6f |8.green,678.12.o| - 00000060: 72 61 6e 67 65 2c 31 32 33 2e 34 35 0a |range,123.45.| - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr hex -r data/budget.csv - 23 20 41 73 61 6e 61 20 2d 2d 20 68 65 72 65 20 - 61 72 65 20 74 68 65 20 62 75 64 67 65 74 20 66 - 69 67 75 72 65 73 20 79 6f 75 20 61 73 6b 65 64 - 20 66 6f 72 21 0a 74 79 70 65 2c 71 75 61 6e 74 - 69 74 79 0a 70 75 72 70 6c 65 2c 34 35 36 2e 37 - 38 0a 67 72 65 65 6e 2c 36 37 38 2e 31 32 0a 6f - 72 61 6e 67 65 2c 31 32 33 2e 34 35 0a - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex - #*Asana*--*here*are*the*budget*figures*you*asked*for! - type,quantity - purple,456.78 - green,678.12 - orange,123.45 - -Data types ----------------------------------------------------------------- - -Miller's input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like "3"; field values are usually strings. Field values' ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations. - -Field values are treated as numeric for the following: - -* Numeric sort: ``mlr sort -n``, ``mlr sort -nr``. -* Statistics: ``mlr histogram``, ``mlr stats1``, ``mlr stats2``. -* Cross-record arithmetic: ``mlr step``. - -For ``mlr put`` and ``mlr filter``: - -* Miller's types for function processing are **empty-null** (empty string), **absent-null** (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), **error**, **string**, **float** (double-precision), **int** (64-bit signed), and **boolean**. - -* On input, string values representable as numbers, e.g. "3" or "3.1", are treated as int or float, respectively. If a record has ``x=1,y=2`` then ``mlr put '$z=$x+$y'`` will produce ``x=1,y=2,z=3``, and ``mlr put '$z=$x.$y'`` does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the ``string`` function: ``mlr put '$z=string($x).string($y)'`` will produce ``x=1,y=2,z=12``. - -* On input, string values representable as boolean (e.g. ``"true"``, ``"false"``) are *not* automatically treated as boolean. (This is because ``"true"`` and ``"false"`` are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the ``boolean`` function to coerce: e.g. giving the record ``x=1,y=2,w=false`` to ``mlr put '$z=($x<$y) || boolean($w)'``. - -* Functions take types as described in ``mlr --help-all-functions``: for example, ``log10`` takes float input and produces float output, ``gmt2sec`` maps string to int, and ``sec2gmt`` maps int to string. - -* All math functions described in ``mlr --help-all-functions`` take integer as well as float input. - -.. _reference-null-data: - -Null data: empty and absent ----------------------------------------------------------------- - -One of Miller's key features is its support for **heterogeneous** data. For example, take ``mlr sort``: if you try to sort on field ``hostname`` when not all records in the data stream *have* a field named ``hostname``, it is not an error (although you could pre-filter the data stream using ``mlr having-fields --at-least hostname then sort ...``). Rather, records lacking one or more sort keys are simply output contiguously by ``mlr sort``. - -Miller has two kinds of null data: - -* **Empty (key present, value empty)**: a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. ``x=,y=2`` in the data input stream, or assignment ``$x=""`` or ``@x=""`` in ``mlr put``. - -* **Absent (key not present)**: a field name is not present, e.g. input record is ``x=1,y=2`` and a ``put`` or ``filter`` expression refers to ``$z``. Or, reading an out-of-stream variable which hasn't been assigned a value yet, e.g. ``mlr put -q '@sum += $x; end{emit @sum}'`` or ``mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'``. - -You can test these programatically using the functions ``is_empty``/``is_not_empty``, ``is_absent``/``is_present``, and ``is_null``/``is_not_null``. For the last pair, note that null means either empty or absent. - -Rules for null-handling: - -* Records with one or more empty sort-field values sort after records with all sort-field values present: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/sort-null.dat - a=3,b=2 - a=1,b=8 - a=,b=4 - x=9,b=10 - a=5,b=7 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -n a data/sort-null.dat - a=1,b=8 - a=3,b=2 - a=5,b=7 - a=,b=4 - x=9,b=10 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort -nr a data/sort-null.dat - a=,b=4 - a=5,b=7 - a=3,b=2 - a=1,b=8 - x=9,b=10 - -* Functions/operators which have one or more *empty* arguments produce empty output: e.g. - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=2,y=3' | mlr put '$a=$x+$y' - x=2,y=3,a=5 - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=,y=3' | mlr put '$a=$x+$y' - x=,y=3,a= - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)' - x=,y=3,a=,b=1.098612 - -with the exception that the ``min`` and ``max`` functions are special: if one argument is non-null, it wins: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)' - x=,y=3,a=3,b=3 - -* Functions of *absent* variables (e.g. ``mlr put '$y = log10($nonesuch)'``) evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, **any expression which evaluates to absent is not stored in the left-hand side of an assignment statement**: - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y' - x=2,y=3,b=3,c=5 - -.. code-block:: none - :emphasize-lines: 1,1 - - echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)' - x=2,y=3,a=2,b=3 - -* Likewise, for assignment to maps, **absent-valued keys or values result in a skipped assignment**. - -The reasoning is as follows: - -* Empty values are explicit in the data so they should explicitly affect accumulations: ``mlr put '@sum += $x'`` should accumulate numeric ``x`` values into the sum but an empty ``x``, when encountered in the input data stream, should make the sum non-numeric. To work around this you can use the ``is_not_null`` function as follows: ``mlr put 'is_not_null($x) { @sum += $x }'`` - -* Absent stream-record values should not break accumulations, since Miller by design handles heterogenous data: the running ``@sum`` in ``mlr put '@sum += $x'`` should not be invalidated for records which have no ``x``. - -* Absent out-of-stream-variable values are precisely what allow you to write ``mlr put '@sum += $x'``. Otherwise you would have to write ``mlr put 'begin{@sum = 0}; @sum += $x'`` -- which is tolerable -- but for ``mlr put 'begin{...}; @sum[$a][$b] += $x'`` you'd have to pre-initialize ``@sum`` for all values of ``$a`` and ``$b`` in your input data stream, which is intolerable. - -* The penalty for the absent feature is that misspelled variables can be hard to find: e.g. in ``mlr put 'begin{@sumx = 10}; ...; update @sumx somehow per-record; ...; end {@something = @sum * 2}'`` the accumulator is spelt ``@sumx`` in the begin-block but ``@sum`` in the end-block, where since it is absent, ``@sum*2`` evaluates to 2. See also the section on :ref:`reference-dsl-errors-and-transparency`. - -Since absent plus absent is absent (and likewise for other operators), accumulations such as ``@sum += $x`` work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don't desire. To work around this -- namely, to set an output field only for records which have all the inputs present -- you can use a pattern-action block with ``is_present``: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr cat data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000 - record_count=100,resource=/path/to/file - resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000 - record_count=150,resource=/path/to/second/file - resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000 - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp - resource=/path/to/file,loadsec=0.45,ok=true,loadmillis=450.000000 - record_count=100,resource=/path/to/file,loadmillis=0.000000 - resource=/path/to/second/file,loadsec=0.32,ok=true,loadmillis=320.000000 - record_count=150,resource=/path/to/second/file,loadmillis=0.000000 - resource=/some/other/path,loadsec=0.97,ok=false,loadmillis=970.000000 - -If you're interested in a formal description of how empty and absent fields participate in arithmetic, here's a table for plus (other arithmetic/boolean/bitwise operators are similar): - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --print-type-arithmetic-info - (+) | error absent empty string int float bool - ------ + ------ ------ ------ ------ ------ ------ ------ - error | error error error error error error error - absent | error absent absent error int float error - empty | error absent empty error empty empty error - string | error error error error error error error - int | error int empty error int float error - float | error float empty error float float error - bool | error error error error error error error - -String literals ----------------------------------------------------------------- - -You can use the following backslash escapes for strings such as between the double quotes in contexts such as ``mlr filter '$name =~ "..."'``, ``mlr put '$name = $othername . "..."'``, ``mlr put '$name = sub($name, "...", "...")``, etc.: - -* ``\a``: ASCII code 0x07 (alarm/bell) -* ``\b``: ASCII code 0x08 (backspace) -* ``\f``: ASCII code 0x0c (formfeed) -* ``\n``: ASCII code 0x0a (LF/linefeed/newline) -* ``\r``: ASCII code 0x0d (CR/carriage return) -* ``\t``: ASCII code 0x09 (tab) -* ``\v``: ASCII code 0x0b (vertical tab) -* ``\\``: backslash -* ``\"``: double quote -* ``\123``: Octal 123, etc. for ``\000`` up to ``\377`` -* ``\x7f``: Hexadecimal 7f, etc. for ``\x00`` up to ``\xff`` - -See also https://en.wikipedia.org/wiki/Escape_sequences_in_C. - -These replacements apply only to strings you key in for the DSL expressions for ``filter`` and ``put``: that is, if you type ``\t`` in a string literal for a ``filter``/``put`` expression, it will be turned into a tab character. If you want a backslash followed by a ``t``, then please type ``\\t``. - -However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named ``field``, ``mlr put '$field = gsub($field, "\\t", "\t")'``. If you need to make such a replacement for all fields in your data, you should probably simply use the system ``sed`` command. - -Regular expressions ----------------------------------------------------------------- - -Miller lets you use regular expressions (of type POSIX.2) in the following contexts: - -* In ``mlr filter`` with ``=~`` or ``!=~``, e.g. ``mlr filter '$url =~ "http.*com"'`` - -* In ``mlr put`` with ``sub`` or ``gsub``, e.g. ``mlr put '$url = sub($url, "http.*com", "")'`` - -* In ``mlr having-fields``, e.g. ``mlr having-fields --any-matching '^sda[0-9]'`` - -* In ``mlr cut``, e.g. ``mlr cut -r -f '^status$,^sda[0-9]'`` - -* In ``mlr rename``, e.g. ``mlr rename -r '^(sda[0-9]).*$,dev/\1'`` - -* In ``mlr grep``, e.g. ``mlr --csv grep 00188555487 myfiles*.csv`` - -Points demonstrated by the above examples: - -* There are no implicit start-of-string or end-of-string anchors; please use ``^`` and/or ``$`` explicitly. - -* Miller regexes are wrapped with double quotes rather than slashes. - -* The ``i`` after the ending double quote indicates a case-insensitive regex. - -* Capture groups are wrapped with ``(...)`` rather than ``\(...\)``; use ``\(`` and ``\)`` to match against parentheses. - -For ``filter`` and ``put``, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ``.``, or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching. - -Example: - -.. code-block:: none - :emphasize-lines: 1,1 - - cat data/regex-in-data.dat - name=jane,regex=^j.*e$ - name=bill,regex=^b[ou]ll$ - name=bull,regex=^b[ou]ll$ - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr filter '$name =~ $regex' data/regex-in-data.dat - name=jane,regex=^j.*e$ - name=bull,regex=^b[ou]ll$ - -Regex captures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Regex captures of the form ``\0`` through ``\9`` are supported as - -* Captures have in-function context for ``sub`` and ``gsub``. For example, the first ``\1,\2`` pair belong to the first ``sub`` and the second ``\1,\2`` pair belong to the second ``sub``: - -.. code-block:: none - - mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")' - -* Captures endure for the entirety of a ``put`` for the ``=~`` and ``!=~`` operators. For example, here the ``\1,\2`` are set by the ``=~`` operator and are used by both subsequent assignment statements: - -.. code-block:: none - - mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"' - -* The captures are not retained across multiple puts. For example, here the ``\1,\2`` won't be expanded from the regex capture: - -.. code-block:: none - - mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"' - -* Captures are ignored in ``filter`` for the ``=~`` and ``!=~`` operators. For example, there is no mechanism provided to refer to the first ``(..)`` as ``\1`` or to the second ``(....)`` as ``\2`` in the following filter statement: - -.. code-block:: none - - mlr filter '$a =~ "(..)_(....)' - -* Up to nine matches are supported: ``\1`` through ``\9``, while ``\0`` is the entire match string; ``\15`` is treated as ``\1`` followed by an unrelated ``5``. - -Arithmetic ----------------------------------------------------------------- - -Input scanning -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g ``123`` or ``0xabcd``, is treated as an integer; otherwise, input scannable as float (``4.56`` or ``8e9``) is treated as float; everything else is a string. - -If you want all numbers to be treated as floats, then you may use ``float()`` in your filter/put expressions (e.g. replacing ``$c = $a * $b`` with ``$c = float($a) * float($b)``) -- or, more simply, use ``mlr filter -F`` and ``mlr put -F`` which forces all numeric input, whether from expression literals or field values, to float. Likewise ``mlr stats1 -F`` and ``mlr step -F`` force integerable accumulators (such as ``count``) to be done in floating-point. - -Conversion by math routines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For most math functions, integers are cast to float on input, and produce float output: e.g. ``exp(0) = 1.0`` rather than ``1``. The following, however, produce integer output if their inputs are integers: ``+`` ``-`` ``*`` ``/`` ``//`` ``%`` ``abs`` ``ceil`` ``floor`` ``max`` ``min`` ``round`` ``roundm`` ``sgn``. As well, ``stats1 -a min``, ``stats1 -a max``, ``stats1 -a sum``, ``step -a delta``, and ``step -a rsum`` produce integer output if their inputs are integers. - -Conversion by arithmetic operators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float. - -The short of it is that Miller does this transparently for you so you needn't think about it. - -Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -2\ :sup:`63` or greater than 2\ :sup:`63`\ -1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas -- so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range: - -.. code-block:: none - - 64-bit integer 64-bit integer Casted to double Back to 64-bit - in hex in decimal integer - 0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000 - 0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000 - 0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000 - -That is, one cannot check an integer product to see if it is precisely greater than 2\ :sup:`63`\ -1 or less than -2\ :sup:`63` using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 2\ :sup:`63`, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.) - -Pythonic division -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Division and remainder are `pythonic `_: - -* Quotient of integers is floating-point: ``7/2`` is ``3.5``. -* Integer division is done with ``//``: ``7//2`` is ``3``. This rounds toward the negative. -* Remainders are non-negative. - -On-line help ----------------------------------------------------------------- - -Examples: - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr --help - Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} - - Command-line-syntax examples: - mlr --csv cut -f hostname,uptime mydata.csv - mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv - mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat - grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group - mlr join -j account_id -f accounts.dat then group-by account_name balances.dat - mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\1:\2")' data/*.json - mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* - mlr stats2 -a linreg-pca -f u,v -g shape data/* - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* - mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' - mlr --from infile.dat put -f analyze.mlr - mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' - mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' - mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' - mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' - - Data-format examples: - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ - - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ - - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ - - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ - - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ - - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ - - Help options: - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. - - Customization via .mlrrc: - You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. - For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file - and that will be the default input/output format unless otherwise specified on the command line. - - The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. - Hash-style comments and blank lines are ignored. - - Sample .mlrrc: - # Input and output formats are CSV by default (unless otherwise specified - # on the mlr command line): - csv - # These are no-ops for CSV, but when I do use JSON output, I want these - # pretty-printing options to be used: - jvstack - jlistwrap - - How to specify location of .mlrrc: - * If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. - * Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - - See also: - https://johnkerl.org/miller/doc/customization.html - - Verbs: - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down fill-empty filter format-values - fraction grep group-by group-like having-fields head histogram join label - least-frequent merge-fields most-frequent nest nothing put regularize - remove-empty-columns rename reorder repeat reshape sample sec2gmt - sec2gmtdate seqgen shuffle skip-trivial-records sort sort-within-records - stats1 stats2 step tac tail tee top uniq unsparsify - - Functions for the filter and put verbs: - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ - !=~ > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub - ssub substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin - sinh sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec - fsec2dhms fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt - sec2gmt sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms - strftime strftime_local strptime strptime_local systime is_absent is_bool - is_boolean is_empty is_empty_map is_float is_int is_map is_nonempty_map - is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum - splitkv splitkvx splitnv splitnvx - - Please use "mlr --help-function {function name}" for function-specific help. - - Data-format options, for input, output, or both: - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). - - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. - - Comments in data: - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. - Notes: - * Comments are only honored at the start of a line. - * In the absence of any of the above four options, comments are data like - any other text. - * When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. - - Format-conversion keystroke-saver options, for input, output, or both: - As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m - The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, - PPRINT, and markdown, respectively. Note that markdown format is available for - output only. - - Compressed-data options: - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". - - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' - mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. - - Separator options, for input, output, or both: - --rs --irs --ors Record separators, e.g. 'lf' or '\r\n' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign - - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\n', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\r\n', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. - - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\r\n' --fs '\t'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space - - Relevant to CSV/CSV-lite input only: - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --no-implicit-csv-header Do not use --implicit-csv-header. This is the default - anyway -- the main use is for the flags to 'mlr join' if you have - main file(s) which are headerless but you want to join in on - a file which does have a CSV header. Then you could use - 'mlr --csv --implicit-csv-header join --no-implicit-csv-header - -l your-join-in-with-header.csv ... your-headerless.csv' - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. - - Double-quoting for CSV output: - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. - - Numerical formatting: - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. - - Other options: - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. - - Then-chaining: - Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color - - Auxiliary commands: - Miller has a few otherwise-standalone executables packaged within it. - They do not participate in any other parts of Miller. - Available subcommands: - aux-list - lecat - termcvt - hex - unhex - netbsd-strptime - For more information, please invoke mlr {subcommand} --help - - For more information please see http://johnkerl.org/miller/doc and/or - http://github.com/johnkerl/miller. This is Miller version v5.10.2-dev. - -.. code-block:: none - :emphasize-lines: 1,1 - - mlr sort --help - Usage: mlr sort {flags} - Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first - Sorts records primarily by the first specified field, secondarily by the second - field, and so on. (Any records not having all specified sort keys will appear - at the end of the output, in the order they were encountered, regardless of the - specified sort order.) The sort is stable: records that compare equal will sort - in the order they were encountered in the input record stream. - - Example: - mlr sort -f a,b -nr x,y,z - which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z diff --git a/docs/reference.rst.in b/docs/reference.rst.in deleted file mode 100644 index 0dfc7aa71..000000000 --- a/docs/reference.rst.in +++ /dev/null @@ -1,447 +0,0 @@ -Main reference -================================================================ - - -.. _reference-command-overview: - -Command overview ----------------------------------------------------------------- - -Whereas the Unix toolkit is made of the separate executables ``cat``, ``tail``, ``cut``, -``sort``, etc., Miller has subcommands, or **verbs**, invoked as follows: - -POKI_INCLUDE_ESCAPED(data/subcommand-example.txt)HERE - -These fall into categories as follows: - -* Analogs of their Unix-toolkit namesakes, discussed below as well as in :doc:`feature-comparison`: :ref:`reference-verbs-cat` :ref:`reference-verbs-cut` :ref:`reference-verbs-grep` :ref:`reference-verbs-head` :ref:`reference-verbs-join` :ref:`reference-verbs-sort` :ref:`reference-verbs-tac` :ref:`reference-verbs-tail` :ref:`reference-verbs-top` :ref:`reference-verbs-uniq`. - -* ``awk``-like functionality: :ref:`reference-verbs-filter` :ref:`reference-verbs-put` :ref:`reference-verbs-sec2gmt` :ref:`reference-verbs-sec2gmtdate` :ref:`reference-verbs-step` :ref:`reference-verbs-tee`. - -* Statistically oriented: :ref:`reference-verbs-bar` :ref:`reference-verbs-bootstrap` :ref:`reference-verbs-decimate` :ref:`reference-verbs-histogram` :ref:`reference-verbs-least-frequent` :ref:`reference-verbs-most-frequent` :ref:`reference-verbs-sample` :ref:`reference-verbs-shuffle` :ref:`reference-verbs-stats1` :ref:`reference-verbs-stats2`. - -* Particularly oriented toward :doc:`record-heterogeneity`, although all Miller commands can handle heterogeneous records: :ref:`reference-verbs-group-by` :ref:`reference-verbs-group-like` :ref:`reference-verbs-having-fields`. - -* These draw from other sources (see also :doc:`originality`): :ref:`reference-verbs-count-distinct` is SQL-ish, and :ref:`reference-verbs-rename` can be done by ``sed`` (which does it faster: see :doc:`performance`. Verbs: :ref:`reference-verbs-check` :ref:`reference-verbs-count-distinct` :ref:`reference-verbs-label` :ref:`reference-verbs-merge-fields` :ref:`reference-verbs-nest` :ref:`reference-verbs-nothing` :ref:`reference-verbs-regularize` :ref:`reference-verbs-rename` :ref:`reference-verbs-reorder` :ref:`reference-verbs-reshape` :ref:`reference-verbs-seqgen`. - -I/O options ----------------------------------------------------------------- - -Formats -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -.. code-block:: none - - --dkvp --idkvp --odkvp - --nidx --inidx --onidx - --csv --icsv --ocsv - --csvlite --icsvlite --ocsvlite - --pprint --ipprint --opprint --right - --xtab --ixtab --oxtab - --json --ijson --ojson - -These are as discussed in :doc:`file-formats`, with the exception of ``--right`` which makes pretty-printed output right-aligned: - -POKI_RUN_COMMAND{{mlr --opprint cat data/small}}HERE - -POKI_RUN_COMMAND{{mlr --opprint --right cat data/small}}HERE - -Additional notes: - -* Use ``--csv``, ``--pprint``, etc. when the input and output formats are the same. - -* Use ``--icsv --opprint``, etc. when you want format conversion as part of what Miller does to your data. - -* DKVP (key-value-pair) format is the default for input and output. So, ``--oxtab`` is the same as ``--idkvp --oxtab``. - -**Pro-tip:** Please use either **--format1**, or **--iformat1 --oformat2**. If you use **--format1 --oformat2** then what happens is that flags are set up for input *and* output for format1, some of which are overwritten for output in format2. For technical reasons, having ``--oformat2`` clobber all the output-related effects of ``--format1`` also removes some flexibility from the command-line interface. See also https://github.com/johnkerl/miller/issues/180 and https://github.com/johnkerl/miller/issues/199. - -In-place mode -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Use the ``mlr -I`` flag to process files in-place. For example, ``mlr -I --csv cut -x -f unwanted_column_name mydata/*.csv`` will remove ``unwanted_column_name`` from all your ``*.csv`` files in your ``mydata/`` subdirectory. - -By default, Miller output goes to the screen (or you can redirect a file using ``>`` or to another process using ``|``). With ``-I``, for each file name on the command line, output is written to a temporary file in the same directory. Miller writes its output into that temp file, which is then renamed over the original. Then, processing continues on the next file. Each file is processed in isolation: if the output format is CSV, CSV headers will be present in each output file; statistics are only over each file's own records; and so on. - -Please see :ref:`10min-choices-for-printing-to-files` for examples. - -Compression -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Options: - -.. code-block:: none - - --prepipe {command} - - -The prepipe command is anything which reads from standard input and produces data acceptable to Miller. Nominally this allows you to use whichever decompression utilities you have installed on your system, on a per-file basis. If the command has flags, quote them: e.g. ``mlr --prepipe 'zcat -cf'``. Examples: - -.. code-block:: none - - # These two produce the same output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz - # With multiple input files you need --prepipe: - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz - $ mlr --prepipe gunzip --idkvp --oxtab cut -f hostname,uptime myfile1.dat.gz myfile2.dat.gz - -.. code-block:: none - - # Similar to the above, but with compressed output as well as input: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz | gzip > outfile.csv.gz - $ mlr --prepipe gunzip cut -f hostname,uptime myfile1.csv.gz myfile2.csv.gz | gzip > outfile.csv.gz - -.. code-block:: none - - # Similar to the above, but with different compression tools for input and output: - $ gunzip < myfile1.csv.gz | mlr cut -f hostname,uptime | xz -z > outfile.csv.xz - $ xz -cd < myfile1.csv.xz | mlr cut -f hostname,uptime | gzip > outfile.csv.xz - $ mlr --prepipe 'xz -cd' cut -f hostname,uptime myfile1.csv.xz myfile2.csv.xz | xz -z > outfile.csv.xz - -.. _reference-separators: - -Record/field/pair separators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Miller has record separators ``IRS`` and ``ORS``, field separators ``IFS`` and ``OFS``, and pair separators ``IPS`` and ``OPS``. For example, in the DKVP line ``a=1,b=2,c=3``, the record separator is newline, field separator is comma, and pair separator is the equals sign. These are the default values. - -Options: - -.. code-block:: none - - --rs --irs --ors - --fs --ifs --ofs --repifs - --ps --ips --ops - -* You can change a separator from input to output via e.g. ``--ifs = --ofs :``. Or, you can specify that the same separator is to be used for input and output via e.g. ``--fs :``. - -* The pair separator is only relevant to DKVP format. - -* Pretty-print and xtab formats ignore the separator arguments altogether. - -* The ``--repifs`` means that multiple successive occurrences of the field separator count as one. For example, in CSV data we often signify nulls by empty strings, e.g. ``2,9,,,,,6,5,4``. On the other hand, if the field separator is a space, it might be more natural to parse ``2 4 5`` the same as ``2 4 5``: ``--repifs --ifs ' '`` lets this happen. In fact, the ``--ipprint`` option above is internally implemented in terms of ``--repifs``. - -* Just write out the desired separator, e.g. ``--ofs '|'``. But you may use the symbolic names ``newline``, ``space``, ``tab``, ``pipe``, or ``semicolon`` if you like. - -Number formatting -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The command-line option ``--ofmt {format string}`` is the global number format for commands which generate numeric output, e.g. ``stats1``, ``stats2``, ``histogram``, and ``step``, as well as ``mlr put``. Examples: - -.. code-block:: none - - --ofmt %.9le --ofmt %.6lf --ofmt %.0lf - -These are just C ``printf`` formats applied to double-precision numbers. Please don't use ``%s`` or ``%d``. Additionally, if you use leading width (e.g. ``%18.12lf``) then the output will contain embedded whitespace, which may not be what you want if you pipe the output to something else, particularly CSV. I use Miller's pretty-print format (``mlr --opprint``) to column-align numerical data. - -To apply formatting to a single field, overriding the global ``ofmt``, use ``fmtnum`` function within ``mlr put``. For example: - -POKI_RUN_COMMAND{{echo 'x=3.1,y=4.3' | mlr put '$z=fmtnum($x*$y,"%08lf")'}}HERE - -POKI_RUN_COMMAND{{echo 'x=0xffff,y=0xff' | mlr put '$z=fmtnum(int($x*$y),"%08llx")'}}HERE - -Input conversion from hexadecimal is done automatically on fields handled by ``mlr put`` and ``mlr filter`` as long as the field value begins with "0x". To apply output conversion to hexadecimal on a single column, you may use ``fmtnum``, or the keystroke-saving ``hexfmt`` function. Example: - -POKI_RUN_COMMAND{{echo 'x=0xffff,y=0xff' | mlr put '$z=hexfmt($x*$y)'}}HERE - -Data transformations (verbs) ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-verbs`. - -Expression language for filter and put ----------------------------------------------------------------- - -Please see the separate page :doc:`reference-dsl`. - -then-chaining ----------------------------------------------------------------- - -In accord with the `Unix philosophy `_, you can pipe data into or out of Miller. For example: - -.. code-block:: none - - mlr cut --complement -f os_version *.dat | mlr sort -f hostname,uptime - -You can, if you like, instead simply chain commands together using the ``then`` keyword: - -.. code-block:: none - - mlr cut --complement -f os_version then sort -f hostname,uptime *.dat - -(You can precede the very first verb with ``then``, if you like, for symmetry.) - -Here's a performance comparison: - -POKI_INCLUDE_ESCAPED(data/then-chaining-performance.txt)HERE - -There are two reasons to use then-chaining: one is for performance, although I don't expect this to be a win in all cases. Using then-chaining avoids redundant string-parsing and string-formatting at each pipeline step: instead input records are parsed once, they are fed through each pipeline stage in memory, and then output records are formatted once. On the other hand, Miller is single-threaded, while modern systems are usually multi-processor, and when streaming-data programs operate through pipes, each one can use a CPU. Rest assured you get the same results either way. - -The other reason to use then-chaining is for simplicity: you don't have re-type formatting flags (e.g. ``--csv --fs tab``) at every pipeline stage. - -Auxiliary commands ----------------------------------------------------------------- - -There are a few nearly-standalone programs which have nothing to do with the rest of Miller, do not participate in record streams, and do not deal with file formats. They might as well be little standalone executables but they're delivered within the main Miller executable for convenience. - -POKI_RUN_COMMAND{{mlr aux-list}}HERE - -POKI_RUN_COMMAND{{mlr lecat --help}}HERE - -POKI_RUN_COMMAND{{mlr termcvt --help}}HERE - -POKI_RUN_COMMAND{{mlr hex --help}}HERE - -POKI_RUN_COMMAND{{mlr unhex --help}}HERE - -Examples: - -POKI_RUN_COMMAND{{echo 'Hello, world!' | mlr lecat --mono}}HERE - -POKI_RUN_COMMAND{{echo 'Hello, world!' | mlr termcvt --lf2crlf | mlr lecat --mono}}HERE - -POKI_RUN_COMMAND{{mlr hex data/budget.csv}}HERE - -POKI_RUN_COMMAND{{mlr hex -r data/budget.csv}}HERE - -POKI_RUN_COMMAND{{mlr hex -r data/budget.csv | sed 's/20/2a/g' | mlr unhex}}HERE - -Data types ----------------------------------------------------------------- - -Miller's input and output are all string-oriented: there is (as of August 2015 anyway) no support for binary record packing. In this sense, everything is a string in and out of Miller. During processing, field names are always strings, even if they have names like "3"; field values are usually strings. Field values' ability to be interpreted as a non-string type only has meaning when comparison or function operations are done on them. And it is an error condition if Miller encounters non-numeric (or otherwise mistyped) data in a field in which it has been asked to do numeric (or otherwise type-specific) operations. - -Field values are treated as numeric for the following: - -* Numeric sort: ``mlr sort -n``, ``mlr sort -nr``. -* Statistics: ``mlr histogram``, ``mlr stats1``, ``mlr stats2``. -* Cross-record arithmetic: ``mlr step``. - -For ``mlr put`` and ``mlr filter``: - -* Miller's types for function processing are **empty-null** (empty string), **absent-null** (reads of unset right-hand sides, or fall-through non-explicit return values from user-defined functions), **error**, **string**, **float** (double-precision), **int** (64-bit signed), and **boolean**. - -* On input, string values representable as numbers, e.g. "3" or "3.1", are treated as int or float, respectively. If a record has ``x=1,y=2`` then ``mlr put '$z=$x+$y'`` will produce ``x=1,y=2,z=3``, and ``mlr put '$z=$x.$y'`` does not give an error simply because the dot operator has been generalized to stringify non-strings. To coerce back to string for processing, use the ``string`` function: ``mlr put '$z=string($x).string($y)'`` will produce ``x=1,y=2,z=12``. - -* On input, string values representable as boolean (e.g. ``"true"``, ``"false"``) are *not* automatically treated as boolean. (This is because ``"true"`` and ``"false"`` are ordinary words, and auto string-to-boolean on a column consisting of words would result in some strings mixed with some booleans.) Use the ``boolean`` function to coerce: e.g. giving the record ``x=1,y=2,w=false`` to ``mlr put '$z=($x<$y) || boolean($w)'``. - -* Functions take types as described in ``mlr --help-all-functions``: for example, ``log10`` takes float input and produces float output, ``gmt2sec`` maps string to int, and ``sec2gmt`` maps int to string. - -* All math functions described in ``mlr --help-all-functions`` take integer as well as float input. - -.. _reference-null-data: - -Null data: empty and absent ----------------------------------------------------------------- - -One of Miller's key features is its support for **heterogeneous** data. For example, take ``mlr sort``: if you try to sort on field ``hostname`` when not all records in the data stream *have* a field named ``hostname``, it is not an error (although you could pre-filter the data stream using ``mlr having-fields --at-least hostname then sort ...``). Rather, records lacking one or more sort keys are simply output contiguously by ``mlr sort``. - -Miller has two kinds of null data: - -* **Empty (key present, value empty)**: a field name is present in a record (or in an out-of-stream variable) with empty value: e.g. ``x=,y=2`` in the data input stream, or assignment ``$x=""`` or ``@x=""`` in ``mlr put``. - -* **Absent (key not present)**: a field name is not present, e.g. input record is ``x=1,y=2`` and a ``put`` or ``filter`` expression refers to ``$z``. Or, reading an out-of-stream variable which hasn't been assigned a value yet, e.g. ``mlr put -q '@sum += $x; end{emit @sum}'`` or ``mlr put -q '@sum[$a][$b] += $x; end{emit @sum, "a", "b"}'``. - -You can test these programatically using the functions ``is_empty``/``is_not_empty``, ``is_absent``/``is_present``, and ``is_null``/``is_not_null``. For the last pair, note that null means either empty or absent. - -Rules for null-handling: - -* Records with one or more empty sort-field values sort after records with all sort-field values present: - -POKI_RUN_COMMAND{{mlr cat data/sort-null.dat}}HERE - -POKI_RUN_COMMAND{{mlr sort -n a data/sort-null.dat}}HERE - -POKI_RUN_COMMAND{{mlr sort -nr a data/sort-null.dat}}HERE - -* Functions/operators which have one or more *empty* arguments produce empty output: e.g. - -POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=$x+$y'}}HERE - -POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=$x+$y'}}HERE - -POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=log($x);$b=log($y)'}}HERE - -with the exception that the ``min`` and ``max`` functions are special: if one argument is non-null, it wins: - -POKI_RUN_COMMAND{{echo 'x=,y=3' | mlr put '$a=min($x,$y);$b=max($x,$y)'}}HERE - -* Functions of *absent* variables (e.g. ``mlr put '$y = log10($nonesuch)'``) evaluate to absent, and arithmetic/bitwise/boolean operators with both operands being absent evaluate to absent. Arithmetic operators with one absent operand return the other operand. More specifically, absent values act like zero for addition/subtraction, and one for multiplication: Furthermore, **any expression which evaluates to absent is not stored in the left-hand side of an assignment statement**: - -POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=$u+$v; $b=$u+$y; $c=$x+$y'}}HERE - -POKI_RUN_COMMAND{{echo 'x=2,y=3' | mlr put '$a=min($x,$v);$b=max($u,$y);$c=min($u,$v)'}}HERE - -* Likewise, for assignment to maps, **absent-valued keys or values result in a skipped assignment**. - -The reasoning is as follows: - -* Empty values are explicit in the data so they should explicitly affect accumulations: ``mlr put '@sum += $x'`` should accumulate numeric ``x`` values into the sum but an empty ``x``, when encountered in the input data stream, should make the sum non-numeric. To work around this you can use the ``is_not_null`` function as follows: ``mlr put 'is_not_null($x) { @sum += $x }'`` - -* Absent stream-record values should not break accumulations, since Miller by design handles heterogenous data: the running ``@sum`` in ``mlr put '@sum += $x'`` should not be invalidated for records which have no ``x``. - -* Absent out-of-stream-variable values are precisely what allow you to write ``mlr put '@sum += $x'``. Otherwise you would have to write ``mlr put 'begin{@sum = 0}; @sum += $x'`` -- which is tolerable -- but for ``mlr put 'begin{...}; @sum[$a][$b] += $x'`` you'd have to pre-initialize ``@sum`` for all values of ``$a`` and ``$b`` in your input data stream, which is intolerable. - -* The penalty for the absent feature is that misspelled variables can be hard to find: e.g. in ``mlr put 'begin{@sumx = 10}; ...; update @sumx somehow per-record; ...; end {@something = @sum * 2}'`` the accumulator is spelt ``@sumx`` in the begin-block but ``@sum`` in the end-block, where since it is absent, ``@sum*2`` evaluates to 2. See also the section on :ref:`reference-dsl-errors-and-transparency`. - -Since absent plus absent is absent (and likewise for other operators), accumulations such as ``@sum += $x`` work correctly on heterogenous data, as do within-record formulas if both operands are absent. If one operand is present, you may get behavior you don't desire. To work around this -- namely, to set an output field only for records which have all the inputs present -- you can use a pattern-action block with ``is_present``: - -POKI_RUN_COMMAND{{mlr cat data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put 'is_present($loadsec) { $loadmillis = $loadsec * 1000 }' data/het.dkvp}}HERE - -POKI_RUN_COMMAND{{mlr put '$loadmillis = (is_present($loadsec) ? $loadsec : 0.0) * 1000' data/het.dkvp}}HERE - -If you're interested in a formal description of how empty and absent fields participate in arithmetic, here's a table for plus (other arithmetic/boolean/bitwise operators are similar): - -POKI_RUN_COMMAND{{mlr --print-type-arithmetic-info}}HERE - -String literals ----------------------------------------------------------------- - -You can use the following backslash escapes for strings such as between the double quotes in contexts such as ``mlr filter '$name =~ "..."'``, ``mlr put '$name = $othername . "..."'``, ``mlr put '$name = sub($name, "...", "...")``, etc.: - -* ``\a``: ASCII code 0x07 (alarm/bell) -* ``\b``: ASCII code 0x08 (backspace) -* ``\f``: ASCII code 0x0c (formfeed) -* ``\n``: ASCII code 0x0a (LF/linefeed/newline) -* ``\r``: ASCII code 0x0d (CR/carriage return) -* ``\t``: ASCII code 0x09 (tab) -* ``\v``: ASCII code 0x0b (vertical tab) -* ``\\``: backslash -* ``\"``: double quote -* ``\123``: Octal 123, etc. for ``\000`` up to ``\377`` -* ``\x7f``: Hexadecimal 7f, etc. for ``\x00`` up to ``\xff`` - -See also https://en.wikipedia.org/wiki/Escape_sequences_in_C. - -These replacements apply only to strings you key in for the DSL expressions for ``filter`` and ``put``: that is, if you type ``\t`` in a string literal for a ``filter``/``put`` expression, it will be turned into a tab character. If you want a backslash followed by a ``t``, then please type ``\\t``. - -However, these replacements are not done automatically within your data stream. If you wish to make these replacements, you can do, for example, for a field named ``field``, ``mlr put '$field = gsub($field, "\\t", "\t")'``. If you need to make such a replacement for all fields in your data, you should probably simply use the system ``sed`` command. - -Regular expressions ----------------------------------------------------------------- - -Miller lets you use regular expressions (of type POSIX.2) in the following contexts: - -* In ``mlr filter`` with ``=~`` or ``!=~``, e.g. ``mlr filter '$url =~ "http.*com"'`` - -* In ``mlr put`` with ``sub`` or ``gsub``, e.g. ``mlr put '$url = sub($url, "http.*com", "")'`` - -* In ``mlr having-fields``, e.g. ``mlr having-fields --any-matching '^sda[0-9]'`` - -* In ``mlr cut``, e.g. ``mlr cut -r -f '^status$,^sda[0-9]'`` - -* In ``mlr rename``, e.g. ``mlr rename -r '^(sda[0-9]).*$,dev/\1'`` - -* In ``mlr grep``, e.g. ``mlr --csv grep 00188555487 myfiles*.csv`` - -Points demonstrated by the above examples: - -* There are no implicit start-of-string or end-of-string anchors; please use ``^`` and/or ``$`` explicitly. - -* Miller regexes are wrapped with double quotes rather than slashes. - -* The ``i`` after the ending double quote indicates a case-insensitive regex. - -* Capture groups are wrapped with ``(...)`` rather than ``\(...\)``; use ``\(`` and ``\)`` to match against parentheses. - -For ``filter`` and ``put``, if the regular expression is a string literal (the normal case), it is precompiled at process start and reused thereafter, which is efficient. If the regular expression is a more complex expression, including string concatenation using ``.``, or a column name (in which case you can take regular expressions from input data!), then regexes are compiled on each record which works but is less efficient. As well, in this case there is no way to specify case-insensitive matching. - -Example: - -POKI_RUN_COMMAND{{cat data/regex-in-data.dat}}HERE - -POKI_RUN_COMMAND{{mlr filter '$name =~ $regex' data/regex-in-data.dat}}HERE - -Regex captures -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Regex captures of the form ``\0`` through ``\9`` are supported as - -* Captures have in-function context for ``sub`` and ``gsub``. For example, the first ``\1,\2`` pair belong to the first ``sub`` and the second ``\1,\2`` pair belong to the second ``sub``: - -.. code-block:: none - - mlr put '$b = sub($a, "(..)_(...)", "\2-\1"); $c = sub($a, "(..)_(.)(..)", ":\1:\2:\3")' - -* Captures endure for the entirety of a ``put`` for the ``=~`` and ``!=~`` operators. For example, here the ``\1,\2`` are set by the ``=~`` operator and are used by both subsequent assignment statements: - -.. code-block:: none - - mlr put '$a =~ "(..)_(....); $b = "left_\1"; $c = "right_\2"' - -* The captures are not retained across multiple puts. For example, here the ``\1,\2`` won't be expanded from the regex capture: - -.. code-block:: none - - mlr put '$a =~ "(..)_(....)' then {... something else ...} then put '$b = "left_\1"; $c = "right_\2"' - -* Captures are ignored in ``filter`` for the ``=~`` and ``!=~`` operators. For example, there is no mechanism provided to refer to the first ``(..)`` as ``\1`` or to the second ``(....)`` as ``\2`` in the following filter statement: - -.. code-block:: none - - mlr filter '$a =~ "(..)_(....)' - -* Up to nine matches are supported: ``\1`` through ``\9``, while ``\0`` is the entire match string; ``\15`` is treated as ``\1`` followed by an unrelated ``5``. - -Arithmetic ----------------------------------------------------------------- - -Input scanning -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Numbers in Miller are double-precision float or 64-bit signed integers. Anything scannable as int, e.g ``123`` or ``0xabcd``, is treated as an integer; otherwise, input scannable as float (``4.56`` or ``8e9``) is treated as float; everything else is a string. - -If you want all numbers to be treated as floats, then you may use ``float()`` in your filter/put expressions (e.g. replacing ``$c = $a * $b`` with ``$c = float($a) * float($b)``) -- or, more simply, use ``mlr filter -F`` and ``mlr put -F`` which forces all numeric input, whether from expression literals or field values, to float. Likewise ``mlr stats1 -F`` and ``mlr step -F`` force integerable accumulators (such as ``count``) to be done in floating-point. - -Conversion by math routines -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -For most math functions, integers are cast to float on input, and produce float output: e.g. ``exp(0) = 1.0`` rather than ``1``. The following, however, produce integer output if their inputs are integers: ``+`` ``-`` ``*`` ``/`` ``//`` ``%`` ``abs`` ``ceil`` ``floor`` ``max`` ``min`` ``round`` ``roundm`` ``sgn``. As well, ``stats1 -a min``, ``stats1 -a max``, ``stats1 -a sum``, ``step -a delta``, and ``step -a rsum`` produce integer output if their inputs are integers. - -Conversion by arithmetic operators -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The sum, difference, and product of integers is again integer, except for when that would overflow a 64-bit integer at which point Miller converts the result to float. - -The short of it is that Miller does this transparently for you so you needn't think about it. - -Implementation details of this, for the interested: integer adds and subtracts overflow by at most one bit so it suffices to check sign-changes. Thus, Miller allows you to add and subtract arbitrary 64-bit signed integers, converting only to float precisely when the result is less than -2\ :sup:`63` or greater than 2\ :sup:`63`\ -1. Multiplies, on the other hand, can overflow by a word size and a sign-change technique does not suffice to detect overflow. Instead Miller tests whether the floating-point product exceeds the representable integer range. Now, 64-bit integers have 64-bit precision while IEEE-doubles have only 52-bit mantissas -- so, there are 53 bits including implicit leading one. The following experiment explicitly demonstrates the resolution at this range: - -.. code-block:: none - - 64-bit integer 64-bit integer Casted to double Back to 64-bit - in hex in decimal integer - 0x7ffffffffffff9ff 9223372036854774271 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffa00 9223372036854774272 9223372036854773760.000000 0x7ffffffffffff800 - 0x7ffffffffffffbff 9223372036854774783 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffc00 9223372036854774784 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffdff 9223372036854775295 9223372036854774784.000000 0x7ffffffffffffc00 - 0x7ffffffffffffe00 9223372036854775296 9223372036854775808.000000 0x8000000000000000 - 0x7ffffffffffffffe 9223372036854775806 9223372036854775808.000000 0x8000000000000000 - 0x7fffffffffffffff 9223372036854775807 9223372036854775808.000000 0x8000000000000000 - -That is, one cannot check an integer product to see if it is precisely greater than 2\ :sup:`63`\ -1 or less than -2\ :sup:`63` using either integer arithmetic (it may have already overflowed) or using double-precision (due to granularity). Instead Miller checks for overflow in 64-bit integer multiplication by seeing whether the absolute value of the double-precision product exceeds the largest representable IEEE double less than 2\ :sup:`63`, which we see from the listing above is 9223372036854774784. (An alternative would be to do all integer multiplies using handcrafted multi-word 128-bit arithmetic. This approach is not taken.) - -Pythonic division -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Division and remainder are `pythonic `_: - -* Quotient of integers is floating-point: ``7/2`` is ``3.5``. -* Integer division is done with ``//``: ``7//2`` is ``3``. This rounds toward the negative. -* Remainders are non-negative. - -On-line help ----------------------------------------------------------------- - -Examples: - -POKI_RUN_COMMAND{{mlr --help}}HERE - -POKI_RUN_COMMAND{{mlr sort --help}}HERE diff --git a/docs6/regen.sh b/docs/regen.sh similarity index 100% rename from docs6/regen.sh rename to docs/regen.sh diff --git a/docs/release-docs.rst b/docs/release-docs.rst deleted file mode 100644 index eda04cbc8..000000000 --- a/docs/release-docs.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Documents by release -================================================================ - -As of September 2020, for 5.9.1 onward, release-specific docs will be handled automatically by https://miller.readthedocs.io whenever a new release is tagged at https://github.com/johnkerl/miller/releases. - -Information here is for documents from before the readthedocs port: - -* `Head `_ -* `Miller 5.9.1 `_ -* `Miller 5.9.0 `_ -* `Miller 5.8.0 `_ -* `Miller 5.7.0 `_ -* `Miller 5.6.2 `_ -* `Miller 5.6.1 `_ -* `Miller 5.6.0 `_ -* `Miller 5.5.0 `_ -* `Miller 5.4.0 `_ -* `Miller 5.3.0 `_ diff --git a/docs/release-docs.rst.in b/docs/release-docs.rst.in deleted file mode 100644 index 5a3bf8151..000000000 --- a/docs/release-docs.rst.in +++ /dev/null @@ -1,18 +0,0 @@ -Documents by release -================================================================ - -As of September 2020, for 5.9.1 onward, release-specific docs will be handled automatically by https://miller.readthedocs.io whenever a new release is tagged at https://github.com/johnkerl/miller/releases. - -Information here is for documents from before the readthedocs port: - -* `Head `_ -* `Miller 5.9.1 `_ -* `Miller 5.9.0 `_ -* `Miller 5.8.0 `_ -* `Miller 5.7.0 `_ -* `Miller 5.6.2 `_ -* `Miller 5.6.1 `_ -* `Miller 5.6.0 `_ -* `Miller 5.5.0 `_ -* `Miller 5.4.0 `_ -* `Miller 5.3.0 `_ diff --git a/docs6/retitle b/docs/retitle similarity index 100% rename from docs6/retitle rename to docs/retitle diff --git a/docs/sample_mlrrc b/docs/sample_mlrrc deleted file mode 100644 index b13d78cd6..000000000 --- a/docs/sample_mlrrc +++ /dev/null @@ -1,17 +0,0 @@ -# These are my preferred default settings for Miller - -# Input and output formats are CSV by default (unless otherwise specified -# on the mlr command line): -csv - -# If a data line has fewer fields than the header line, instead of erroring -# (which is the default), just insert empty values for the missing ones: -allow-ragged-csv-input - -# These are no-ops for CSV, but when I do use JSON output, I want these -# pretty-printing options to be used: -jvstack -jlistwrap - -# Use "@", rather than "#", for comments within data files: -skip-comments-with @ diff --git a/docs/sphinx-hack/data b/docs/sphinx-hack/data deleted file mode 120000 index 4909e06ef..000000000 --- a/docs/sphinx-hack/data +++ /dev/null @@ -1 +0,0 @@ -../data \ No newline at end of file diff --git a/docs/sphinx-hack/multi-join b/docs/sphinx-hack/multi-join deleted file mode 120000 index 920079753..000000000 --- a/docs/sphinx-hack/multi-join +++ /dev/null @@ -1 +0,0 @@ -../multi-join/ \ No newline at end of file diff --git a/docs/sphinx-hack/ngrams b/docs/sphinx-hack/ngrams deleted file mode 120000 index 8decc1852..000000000 --- a/docs/sphinx-hack/ngrams +++ /dev/null @@ -1 +0,0 @@ -../ngrams/ \ No newline at end of file diff --git a/docs/sphinx-hack/pix b/docs/sphinx-hack/pix deleted file mode 120000 index b3d248783..000000000 --- a/docs/sphinx-hack/pix +++ /dev/null @@ -1 +0,0 @@ -../pix \ No newline at end of file diff --git a/docs/sphinx-hack/polyglot-dkvp-io b/docs/sphinx-hack/polyglot-dkvp-io deleted file mode 120000 index 736f8e567..000000000 --- a/docs/sphinx-hack/polyglot-dkvp-io +++ /dev/null @@ -1 +0,0 @@ -../polyglot-dkvp-io/ \ No newline at end of file diff --git a/docs/sphinx-hack/programs b/docs/sphinx-hack/programs deleted file mode 120000 index fbc03e6c4..000000000 --- a/docs/sphinx-hack/programs +++ /dev/null @@ -1 +0,0 @@ -../programs/ \ No newline at end of file diff --git a/docs/sql-examples.rst b/docs/sql-examples.rst deleted file mode 100644 index 60c6adef8..000000000 --- a/docs/sql-examples.rst +++ /dev/null @@ -1,266 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -SQL examples -==================== - -.. _sql-output-examples: - -SQL-output examples -^^^^^^^^^^^^^^^^^^^ - -I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with ``mlr --tsv`` or ``mlr --tsvlite``. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller -- whichever is most convenient for my needs at the moment. - -For example, using default output formatting in ``mysql`` we get formatting like Miller's ``--opprint --barred``: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -e 'show columns in mytable' - +------------------+--------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +------------------+--------------+------+-----+---------+-------+ - | id | bigint(20) | NO | MUL | NULL | | - | category | varchar(256) | NO | | NULL | | - | is_permanent | tinyint(1) | NO | | NULL | | - | assigned_to | bigint(20) | YES | | NULL | | - | last_update_time | int(11) | YES | | NULL | | - +------------------+--------------+------+-----+---------+-------+ - -Using ``mysql``'s ``-B`` we get TSV output: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat - Field Type Null Key Default Extra - id bigint(20) NO MUL NULL - - category varchar(256) NO - NULL - - is_permanent tinyint(1) NO - NULL - - assigned_to bigint(20) YES - NULL - - last_update_time int(11) YES - NULL - - -Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat - [ - { - "Field": "id", - "Type": "bigint(20)", - "Null": "NO", - "Key": "MUL", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "category", - "Type": "varchar(256)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "is_permanent", - "Type": "tinyint(1)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "assigned_to", - "Type": "bigint(20)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "last_update_time", - "Type": "int(11)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - } - ] - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'select * from mytable' > query.tsv - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to - category assigned_to id_count - special 10000978 207 - special 10003924 385 - special 10009872 168 - standard 10000978 524 - standard 10003924 392 - standard 10009872 108 - ... - -Again, all the examples in the CSV section apply here -- just change the input-format flags. - -.. _sql-input-examples: - -SQL-input examples -^^^^^^^^^^^^^^^^^^ - -One use of NIDX (value-only, no keys) format is for loading up SQL tables. - -Create and load SQL table: - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> CREATE TABLE abixy( - a VARCHAR(32), - b VARCHAR(32), - i BIGINT(10), - x DOUBLE, - y DOUBLE - ); - Query OK, 0 rows affected (0.01 sec) - -.. code-block:: none - :emphasize-lines: 1,1 - - bash$ mlr --onidx --fs comma cat data/medium > medium.nidx - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ; - Query OK, 10000 rows affected (0.07 sec) - Records: 10000 Deleted: 0 Skipped: 0 Warnings: 0 - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT COUNT(*) AS count FROM abixy; - +-------+ - | count | - +-------+ - | 10000 | - +-------+ - 1 row in set (0.00 sec) - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT * FROM abixy LIMIT 10; - +------+------+------+---------------------+---------------------+ - | a | b | i | x | y | - +------+------+------+---------------------+---------------------+ - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | - | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | - | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | - | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | - | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - +------+------+------+---------------------+---------------------+ - -Aggregate counts within SQL: - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC; - +------+------+-------+ - | a | b | count | - +------+------+-------+ - | zee | wye | 455 | - | pan | eks | 429 | - | pan | pan | 427 | - | wye | hat | 426 | - | hat | wye | 423 | - | pan | hat | 417 | - | eks | hat | 417 | - | pan | zee | 413 | - | eks | eks | 413 | - | zee | hat | 409 | - | eks | wye | 407 | - | zee | zee | 403 | - | pan | wye | 395 | - | wye | pan | 392 | - | zee | eks | 391 | - | zee | pan | 389 | - | hat | eks | 389 | - | wye | eks | 386 | - | wye | zee | 385 | - | hat | zee | 385 | - | hat | hat | 381 | - | wye | wye | 377 | - | eks | pan | 371 | - | hat | pan | 363 | - | eks | zee | 357 | - +------+------+-------+ - 25 rows in set (0.01 sec) - -Aggregate counts within Miller: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --opprint uniq -c -g a,b then sort -nr count data/medium - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - hat pan 363 - eks zee 357 - -Pipe SQL output to aggregate counts within Miller: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - wye pan 392 - zee eks 391 - zee pan 389 - hat eks 389 - wye eks 386 - hat zee 385 - wye zee 385 - hat hat 381 - wye wye 377 - eks pan 371 - hat pan 363 - eks zee 357 diff --git a/docs/sql-examples.rst.in b/docs/sql-examples.rst.in deleted file mode 100644 index 5487b60e9..000000000 --- a/docs/sql-examples.rst.in +++ /dev/null @@ -1,263 +0,0 @@ -SQL examples -==================== - -.. _sql-output-examples: - -SQL-output examples -^^^^^^^^^^^^^^^^^^^ - -I like to produce SQL-query output with header-column and tab delimiter: this is CSV but with a tab instead of a comma, also known as TSV. Then I post-process with ``mlr --tsv`` or ``mlr --tsvlite``. This means I can do some (or all, or none) of my data processing within SQL queries, and some (or none, or all) of my data processing using Miller -- whichever is most convenient for my needs at the moment. - -For example, using default output formatting in ``mysql`` we get formatting like Miller's ``--opprint --barred``: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -e 'show columns in mytable' - +------------------+--------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +------------------+--------------+------+-----+---------+-------+ - | id | bigint(20) | NO | MUL | NULL | | - | category | varchar(256) | NO | | NULL | | - | is_permanent | tinyint(1) | NO | | NULL | | - | assigned_to | bigint(20) | YES | | NULL | | - | last_update_time | int(11) | YES | | NULL | | - +------------------+--------------+------+-----+---------+-------+ - -Using ``mysql``'s ``-B`` we get TSV output: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --opprint cat - Field Type Null Key Default Extra - id bigint(20) NO MUL NULL - - category varchar(256) NO - NULL - - is_permanent tinyint(1) NO - NULL - - assigned_to bigint(20) YES - NULL - - last_update_time int(11) YES - NULL - - -Since Miller handles TSV output, we can do as much or as little processing as we want in the SQL query, then send the rest on to Miller. This includes outputting as JSON, doing further selects/joins in Miller, doing stats, etc. etc.: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'show columns in mytable' | mlr --itsvlite --ojson --jlistwrap --jvstack cat - [ - { - "Field": "id", - "Type": "bigint(20)", - "Null": "NO", - "Key": "MUL", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "category", - "Type": "varchar(256)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "is_permanent", - "Type": "tinyint(1)", - "Null": "NO", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "assigned_to", - "Type": "bigint(20)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - }, - { - "Field": "last_update_time", - "Type": "int(11)", - "Null": "YES", - "Key": "", - "Default": "NULL", - "Extra": "" - } - ] - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql --database=mydb -B -e 'select * from mytable' > query.tsv - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --from query.tsv --t2p stats1 -a count -f id -g category,assigned_to - category assigned_to id_count - special 10000978 207 - special 10003924 385 - special 10009872 168 - standard 10000978 524 - standard 10003924 392 - standard 10009872 108 - ... - -Again, all the examples in the CSV section apply here -- just change the input-format flags. - -.. _sql-input-examples: - -SQL-input examples -^^^^^^^^^^^^^^^^^^ - -One use of NIDX (value-only, no keys) format is for loading up SQL tables. - -Create and load SQL table: - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> CREATE TABLE abixy( - a VARCHAR(32), - b VARCHAR(32), - i BIGINT(10), - x DOUBLE, - y DOUBLE - ); - Query OK, 0 rows affected (0.01 sec) - -.. code-block:: none - :emphasize-lines: 1,1 - - bash$ mlr --onidx --fs comma cat data/medium > medium.nidx - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> LOAD DATA LOCAL INFILE 'medium.nidx' REPLACE INTO TABLE abixy FIELDS TERMINATED BY ',' ; - Query OK, 10000 rows affected (0.07 sec) - Records: 10000 Deleted: 0 Skipped: 0 Warnings: 0 - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT COUNT(*) AS count FROM abixy; - +-------+ - | count | - +-------+ - | 10000 | - +-------+ - 1 row in set (0.00 sec) - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT * FROM abixy LIMIT 10; - +------+------+------+---------------------+---------------------+ - | a | b | i | x | y | - +------+------+------+---------------------+---------------------+ - | pan | pan | 1 | 0.3467901443380824 | 0.7268028627434533 | - | eks | pan | 2 | 0.7586799647899636 | 0.5221511083334797 | - | wye | wye | 3 | 0.20460330576630303 | 0.33831852551664776 | - | eks | wye | 4 | 0.38139939387114097 | 0.13418874328430463 | - | wye | pan | 5 | 0.5732889198020006 | 0.8636244699032729 | - | zee | pan | 6 | 0.5271261600918548 | 0.49322128674835697 | - | eks | zee | 7 | 0.6117840605678454 | 0.1878849191181694 | - | zee | wye | 8 | 0.5985540091064224 | 0.976181385699006 | - | hat | wye | 9 | 0.03144187646093577 | 0.7495507603507059 | - | pan | wye | 10 | 0.5026260055412137 | 0.9526183602969864 | - +------+------+------+---------------------+---------------------+ - -Aggregate counts within SQL: - -.. code-block:: none - :emphasize-lines: 1,1 - - mysql> SELECT a, b, COUNT(*) AS count FROM abixy GROUP BY a, b ORDER BY COUNT DESC; - +------+------+-------+ - | a | b | count | - +------+------+-------+ - | zee | wye | 455 | - | pan | eks | 429 | - | pan | pan | 427 | - | wye | hat | 426 | - | hat | wye | 423 | - | pan | hat | 417 | - | eks | hat | 417 | - | pan | zee | 413 | - | eks | eks | 413 | - | zee | hat | 409 | - | eks | wye | 407 | - | zee | zee | 403 | - | pan | wye | 395 | - | wye | pan | 392 | - | zee | eks | 391 | - | zee | pan | 389 | - | hat | eks | 389 | - | wye | eks | 386 | - | wye | zee | 385 | - | hat | zee | 385 | - | hat | hat | 381 | - | wye | wye | 377 | - | eks | pan | 371 | - | hat | pan | 363 | - | eks | zee | 357 | - +------+------+-------+ - 25 rows in set (0.01 sec) - -Aggregate counts within Miller: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mlr --opprint uniq -c -g a,b then sort -nr count data/medium - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - hat pan 363 - eks zee 357 - -Pipe SQL output to aggregate counts within Miller: - -.. code-block:: none - :emphasize-lines: 1,1 - - $ mysql -D miller -B -e 'select * from abixy' | mlr --itsv --opprint uniq -c -g a,b then sort -nr count - a b count - zee wye 455 - pan eks 429 - pan pan 427 - wye hat 426 - hat wye 423 - pan hat 417 - eks hat 417 - eks eks 413 - pan zee 413 - zee hat 409 - eks wye 407 - zee zee 403 - pan wye 395 - wye pan 392 - zee eks 391 - zee pan 389 - hat eks 389 - wye eks 386 - hat zee 385 - wye zee 385 - hat hat 381 - wye wye 377 - eks pan 371 - hat pan 363 - eks zee 357 diff --git a/docs/square.csv b/docs/square.csv deleted file mode 100644 index 464f52132..000000000 --- a/docs/square.csv +++ /dev/null @@ -1,5 +0,0 @@ -color,shape,flag,index,quantity,rate -red,square,true,15,79.2778,0.0130 -red,square,false,48,77.5542,7.4670 -red,square,false,64,77.1991,9.5310 -purple,square,false,91,72.3735,8.2430 diff --git a/docs6/src/.vimrc b/docs/src/.vimrc similarity index 100% rename from docs6/src/.vimrc rename to docs/src/.vimrc diff --git a/docs6/src/10min.md b/docs/src/10min.md similarity index 100% rename from docs6/src/10min.md rename to docs/src/10min.md diff --git a/docs6/src/10min.md.in b/docs/src/10min.md.in similarity index 100% rename from docs6/src/10min.md.in rename to docs/src/10min.md.in diff --git a/docs6/src/Makefile b/docs/src/Makefile similarity index 100% rename from docs6/src/Makefile rename to docs/src/Makefile diff --git a/docs/_static/basic.css b/docs/src/_static/basic.css similarity index 100% rename from docs/_static/basic.css rename to docs/src/_static/basic.css diff --git a/docs/_static/classic.css b/docs/src/_static/classic.css similarity index 100% rename from docs/_static/classic.css rename to docs/src/_static/classic.css diff --git a/docs/_static/mlr.jpg b/docs/src/_static/mlr.jpg similarity index 100% rename from docs/_static/mlr.jpg rename to docs/src/_static/mlr.jpg diff --git a/docs/_static/pygments.css b/docs/src/_static/pygments.css similarity index 100% rename from docs/_static/pygments.css rename to docs/src/_static/pygments.css diff --git a/docs6/src/_static/scrolls.css b/docs/src/_static/scrolls.css similarity index 100% rename from docs6/src/_static/scrolls.css rename to docs/src/_static/scrolls.css diff --git a/docs/_static/top.png b/docs/src/_static/top.png similarity index 100% rename from docs/_static/top.png rename to docs/src/_static/top.png diff --git a/docs6/src/absent-example.json b/docs/src/absent-example.json similarity index 100% rename from docs6/src/absent-example.json rename to docs/src/absent-example.json diff --git a/docs6/src/build-one b/docs/src/build-one similarity index 100% rename from docs6/src/build-one rename to docs/src/build-one diff --git a/docs6/src/build.md b/docs/src/build.md similarity index 97% rename from docs6/src/build.md rename to docs/src/build.md index 677f678b7..833472bd0 100644 --- a/docs6/src/build.md +++ b/docs/src/build.md @@ -55,7 +55,7 @@ These are necessary to produce the `mlr` executable. ### Optional external dependencies -This documentation pageset is built using [https://www.mkdocs.org/](MkDocs). Please see [https://github.com/johnkerl/miller/blob/main/docs6/README.md](https://github.com/johnkerl/miller/blob/main/docs6/README.md) for details. +This documentation pageset is built using [https://www.mkdocs.org/](MkDocs). Please see [https://github.com/johnkerl/miller/blob/main/docs/README.md](https://github.com/johnkerl/miller/blob/main/docs/README.md) for details. ## Creating a new release: for developers @@ -66,7 +66,7 @@ In this example I am using version 6.1.0 to 6.2.0; of course that will change fo * Update version found in `mlr --version` and `man mlr`: * Edit `go/src/version/version.go` from `6.1.0-dev` to `6.2.0`. - * `cd ../docs6` + * `cd ../docs` * `export PATH=../go:$PATH` * `make html` * The ordering is important: the first build creates `mlr`; the second runs `mlr` to create `manpage.txt`; the third includes `manpage.txt` into one of its outputs. diff --git a/docs6/src/build.md.in b/docs/src/build.md.in similarity index 97% rename from docs6/src/build.md.in rename to docs/src/build.md.in index 887797549..0c0eeb07a 100644 --- a/docs6/src/build.md.in +++ b/docs/src/build.md.in @@ -39,7 +39,7 @@ These are necessary to produce the `mlr` executable. ### Optional external dependencies -This documentation pageset is built using [https://www.mkdocs.org/](MkDocs). Please see [https://github.com/johnkerl/miller/blob/main/docs6/README.md](https://github.com/johnkerl/miller/blob/main/docs6/README.md) for details. +This documentation pageset is built using [https://www.mkdocs.org/](MkDocs). Please see [https://github.com/johnkerl/miller/blob/main/docs/README.md](https://github.com/johnkerl/miller/blob/main/docs/README.md) for details. ## Creating a new release: for developers @@ -50,7 +50,7 @@ In this example I am using version 6.1.0 to 6.2.0; of course that will change fo * Update version found in `mlr --version` and `man mlr`: * Edit `go/src/version/version.go` from `6.1.0-dev` to `6.2.0`. - * `cd ../docs6` + * `cd ../docs` * `export PATH=../go:$PATH` * `make html` * The ordering is important: the first build creates `mlr`; the second runs `mlr` to create `manpage.txt`; the third includes `manpage.txt` into one of its outputs. diff --git a/docs6/src/circle.csv b/docs/src/circle.csv similarity index 100% rename from docs6/src/circle.csv rename to docs/src/circle.csv diff --git a/docs/commas.csv b/docs/src/commas.csv similarity index 100% rename from docs/commas.csv rename to docs/src/commas.csv diff --git a/docs6/src/community.md b/docs/src/community.md similarity index 100% rename from docs6/src/community.md rename to docs/src/community.md diff --git a/docs6/src/community.md.in b/docs/src/community.md.in similarity index 100% rename from docs6/src/community.md.in rename to docs/src/community.md.in diff --git a/docs6/src/context-example.mlr b/docs/src/context-example.mlr similarity index 100% rename from docs6/src/context-example.mlr rename to docs/src/context-example.mlr diff --git a/docs6/src/contributing.md b/docs/src/contributing.md similarity index 94% rename from docs6/src/contributing.md rename to docs/src/contributing.md index 82e8effc5..0e46b30c8 100644 --- a/docs6/src/contributing.md +++ b/docs/src/contributing.md @@ -22,9 +22,9 @@ You can ask questions -- or answer them! -- following the links on the [Communit ## Documentation improvements -Pre-release Miller documentation is at [https://github.com/johnkerl/miller/tree/main/docs6](https://github.com/johnkerl/miller/tree/main/docs6). +Pre-release Miller documentation is at [https://github.com/johnkerl/miller/tree/main/docs](https://github.com/johnkerl/miller/tree/main/docs). -Instructions for modifying, viewing, and submitting PRs for these are in the [docs6/README.md](https://github.com/johnkerl/miller/blob/main/docs6/README.md). +Instructions for modifying, viewing, and submitting PRs for these are in the [docs/README.md](https://github.com/johnkerl/miller/blob/main/docs/README.md). While Miller 6 is in pre-release, these docs are not viewable at [https://miller.readthedocs.io](https://miller.readthedocs.io) which shows Miller 5 docs. diff --git a/docs6/src/contributing.md.in b/docs/src/contributing.md.in similarity index 93% rename from docs6/src/contributing.md.in rename to docs/src/contributing.md.in index c7962de4f..49a81f57b 100644 --- a/docs6/src/contributing.md.in +++ b/docs/src/contributing.md.in @@ -6,9 +6,9 @@ You can ask questions -- or answer them! -- following the links on the [Communit ## Documentation improvements -Pre-release Miller documentation is at [https://github.com/johnkerl/miller/tree/main/docs6](https://github.com/johnkerl/miller/tree/main/docs6). +Pre-release Miller documentation is at [https://github.com/johnkerl/miller/tree/main/docs](https://github.com/johnkerl/miller/tree/main/docs). -Instructions for modifying, viewing, and submitting PRs for these are in the [docs6/README.md](https://github.com/johnkerl/miller/blob/main/docs6/README.md). +Instructions for modifying, viewing, and submitting PRs for these are in the [docs/README.md](https://github.com/johnkerl/miller/blob/main/docs/README.md). While Miller 6 is in pre-release, these docs are not viewable at [https://miller.readthedocs.io](https://miller.readthedocs.io) which shows Miller 5 docs. diff --git a/docs/coverart/cover-cat.png b/docs/src/coverart/cover-cat.png similarity index 100% rename from docs/coverart/cover-cat.png rename to docs/src/coverart/cover-cat.png diff --git a/docs/coverart/cover-combined.png b/docs/src/coverart/cover-combined.png similarity index 100% rename from docs/coverart/cover-combined.png rename to docs/src/coverart/cover-combined.png diff --git a/docs/coverart/cover-filter-to-json.png b/docs/src/coverart/cover-filter-to-json.png similarity index 100% rename from docs/coverart/cover-filter-to-json.png rename to docs/src/coverart/cover-filter-to-json.png diff --git a/docs/coverart/cover-sort-to-pprint.png b/docs/src/coverart/cover-sort-to-pprint.png similarity index 100% rename from docs/coverart/cover-sort-to-pprint.png rename to docs/src/coverart/cover-sort-to-pprint.png diff --git a/docs/coverart/coverart.key b/docs/src/coverart/coverart.key similarity index 100% rename from docs/coverart/coverart.key rename to docs/src/coverart/coverart.key diff --git a/docs6/src/cpu.md b/docs/src/cpu.md similarity index 100% rename from docs6/src/cpu.md rename to docs/src/cpu.md diff --git a/docs6/src/cpu.md.in b/docs/src/cpu.md.in similarity index 100% rename from docs6/src/cpu.md.in rename to docs/src/cpu.md.in diff --git a/docs6/src/csv-with-and-without-headers.md b/docs/src/csv-with-and-without-headers.md similarity index 100% rename from docs6/src/csv-with-and-without-headers.md rename to docs/src/csv-with-and-without-headers.md diff --git a/docs6/src/csv-with-and-without-headers.md.in b/docs/src/csv-with-and-without-headers.md.in similarity index 100% rename from docs6/src/csv-with-and-without-headers.md.in rename to docs/src/csv-with-and-without-headers.md.in diff --git a/docs6/src/customization.md b/docs/src/customization.md similarity index 100% rename from docs6/src/customization.md rename to docs/src/customization.md diff --git a/docs6/src/customization.md.in b/docs/src/customization.md.in similarity index 100% rename from docs6/src/customization.md.in rename to docs/src/customization.md.in diff --git a/docs6/src/data-cleaning-examples.md b/docs/src/data-cleaning-examples.md similarity index 100% rename from docs6/src/data-cleaning-examples.md rename to docs/src/data-cleaning-examples.md diff --git a/docs6/src/data-cleaning-examples.md.in b/docs/src/data-cleaning-examples.md.in similarity index 100% rename from docs6/src/data-cleaning-examples.md.in rename to docs/src/data-cleaning-examples.md.in diff --git a/docs6/src/data-diving-examples.md b/docs/src/data-diving-examples.md similarity index 100% rename from docs6/src/data-diving-examples.md rename to docs/src/data-diving-examples.md diff --git a/docs6/src/data-diving-examples.md.in b/docs/src/data-diving-examples.md.in similarity index 100% rename from docs6/src/data-diving-examples.md.in rename to docs/src/data-diving-examples.md.in diff --git a/c/reg_test/input/a.csv b/docs/src/data/a.csv similarity index 100% rename from c/reg_test/input/a.csv rename to docs/src/data/a.csv diff --git a/docs/data/a.dkvp b/docs/src/data/a.dkvp similarity index 100% rename from docs/data/a.dkvp rename to docs/src/data/a.dkvp diff --git a/docs6/src/data/array-example.json b/docs/src/data/array-example.json similarity index 100% rename from docs6/src/data/array-example.json rename to docs/src/data/array-example.json diff --git a/docs6/src/data/array-values-nested.json b/docs/src/data/array-values-nested.json similarity index 100% rename from docs6/src/data/array-values-nested.json rename to docs/src/data/array-values-nested.json diff --git a/docs6/src/data/array-values-spread-colon.csv b/docs/src/data/array-values-spread-colon.csv similarity index 100% rename from docs6/src/data/array-values-spread-colon.csv rename to docs/src/data/array-values-spread-colon.csv diff --git a/docs6/src/data/array-values-spread.csv b/docs/src/data/array-values-spread.csv similarity index 100% rename from docs6/src/data/array-values-spread.csv rename to docs/src/data/array-values-spread.csv diff --git a/docs6/src/data/array-values.json b/docs/src/data/array-values.json similarity index 100% rename from docs6/src/data/array-values.json rename to docs/src/data/array-values.json diff --git a/docs/data/b.csv b/docs/src/data/b.csv similarity index 100% rename from docs/data/b.csv rename to docs/src/data/b.csv diff --git a/docs/data/b.dkvp b/docs/src/data/b.dkvp similarity index 100% rename from docs/data/b.dkvp rename to docs/src/data/b.dkvp diff --git a/docs/data/begin-end-example-7b.sh b/docs/src/data/begin-end-example-7b.sh similarity index 100% rename from docs/data/begin-end-example-7b.sh rename to docs/src/data/begin-end-example-7b.sh diff --git a/docs/data/budget.csv b/docs/src/data/budget.csv similarity index 100% rename from docs/data/budget.csv rename to docs/src/data/budget.csv diff --git a/docs/data/bulk-rename-for-loop.mlr b/docs/src/data/bulk-rename-for-loop.mlr similarity index 100% rename from docs/data/bulk-rename-for-loop.mlr rename to docs/src/data/bulk-rename-for-loop.mlr diff --git a/docs/data/clean-whitespace.csv b/docs/src/data/clean-whitespace.csv similarity index 100% rename from docs/data/clean-whitespace.csv rename to docs/src/data/clean-whitespace.csv diff --git a/docs/data/color-codes.csv b/docs/src/data/color-codes.csv similarity index 100% rename from docs/data/color-codes.csv rename to docs/src/data/color-codes.csv diff --git a/docs/data/color-names.csv b/docs/src/data/color-names.csv similarity index 100% rename from docs/data/color-names.csv rename to docs/src/data/color-names.csv diff --git a/docs6/src/data/colored-shapes.csv b/docs/src/data/colored-shapes.csv similarity index 100% rename from docs6/src/data/colored-shapes.csv rename to docs/src/data/colored-shapes.csv diff --git a/docs6/src/data/colored-shapes.dkvp b/docs/src/data/colored-shapes.dkvp similarity index 100% rename from docs6/src/data/colored-shapes.dkvp rename to docs/src/data/colored-shapes.dkvp diff --git a/docs/data/colours.csv b/docs/src/data/colours.csv similarity index 100% rename from docs/data/colours.csv rename to docs/src/data/colours.csv diff --git a/docs6/src/data/consecutive.csv b/docs/src/data/consecutive.csv similarity index 100% rename from docs6/src/data/consecutive.csv rename to docs/src/data/consecutive.csv diff --git a/docs/data/current_counters.csv b/docs/src/data/current_counters.csv similarity index 100% rename from docs/data/current_counters.csv rename to docs/src/data/current_counters.csv diff --git a/docs/data/currtemp.csv b/docs/src/data/currtemp.csv similarity index 100% rename from docs/data/currtemp.csv rename to docs/src/data/currtemp.csv diff --git a/docs/data/dollar-sign.txt b/docs/src/data/dollar-sign.txt similarity index 100% rename from docs/data/dollar-sign.txt rename to docs/src/data/dollar-sign.txt diff --git a/docs/data/english-words.txt b/docs/src/data/english-words.txt similarity index 100% rename from docs/data/english-words.txt rename to docs/src/data/english-words.txt diff --git a/docs6/src/data/extra-spaces.txt b/docs/src/data/extra-spaces.txt similarity index 100% rename from docs6/src/data/extra-spaces.txt rename to docs/src/data/extra-spaces.txt diff --git a/docs/data/fe-example-3.mlr b/docs/src/data/fe-example-3.mlr similarity index 100% rename from docs/data/fe-example-3.mlr rename to docs/src/data/fe-example-3.mlr diff --git a/docs/data/fe-example-4.mlr b/docs/src/data/fe-example-4.mlr similarity index 100% rename from docs/data/fe-example-4.mlr rename to docs/src/data/fe-example-4.mlr diff --git a/docs/data/feature-count.mlr b/docs/src/data/feature-count.mlr similarity index 100% rename from docs/data/feature-count.mlr rename to docs/src/data/feature-count.mlr diff --git a/docs/data/features.json b/docs/src/data/features.json similarity index 100% rename from docs/data/features.json rename to docs/src/data/features.json diff --git a/docs/data/fibo-cached.sh b/docs/src/data/fibo-cached.sh similarity index 100% rename from docs/data/fibo-cached.sh rename to docs/src/data/fibo-cached.sh diff --git a/docs6/src/data/fibo-uncached.sh b/docs/src/data/fibo-uncached.sh similarity index 100% rename from docs6/src/data/fibo-uncached.sh rename to docs/src/data/fibo-uncached.sh diff --git a/docs6/src/data/fillable.csv b/docs/src/data/fillable.csv similarity index 100% rename from docs6/src/data/fillable.csv rename to docs/src/data/fillable.csv diff --git a/docs/data/filter-multiline-example.txt b/docs/src/data/filter-multiline-example.txt similarity index 100% rename from docs/data/filter-multiline-example.txt rename to docs/src/data/filter-multiline-example.txt diff --git a/docs6/src/data/flins.csv b/docs/src/data/flins.csv similarity index 100% rename from docs6/src/data/flins.csv rename to docs/src/data/flins.csv diff --git a/docs/data/flins.json b/docs/src/data/flins.json similarity index 100% rename from docs/data/flins.json rename to docs/src/data/flins.json diff --git a/docs/data/for-oosvar-example-0a.txt b/docs/src/data/for-oosvar-example-0a.txt similarity index 100% rename from docs/data/for-oosvar-example-0a.txt rename to docs/src/data/for-oosvar-example-0a.txt diff --git a/docs/data/for-srec-example.tbl b/docs/src/data/for-srec-example.tbl similarity index 100% rename from docs/data/for-srec-example.tbl rename to docs/src/data/for-srec-example.tbl diff --git a/docs/data/fraction-example.csv b/docs/src/data/fraction-example.csv similarity index 100% rename from docs/data/fraction-example.csv rename to docs/src/data/fraction-example.csv diff --git a/docs/data/headerless.csv b/docs/src/data/headerless.csv similarity index 100% rename from docs/data/headerless.csv rename to docs/src/data/headerless.csv diff --git a/docs/data/het-bool.csv b/docs/src/data/het-bool.csv similarity index 100% rename from docs/data/het-bool.csv rename to docs/src/data/het-bool.csv diff --git a/c/reg_test/input/het.csv b/docs/src/data/het.csv similarity index 100% rename from c/reg_test/input/het.csv rename to docs/src/data/het.csv diff --git a/docs/data/het.dkvp b/docs/src/data/het.dkvp similarity index 100% rename from docs/data/het.dkvp rename to docs/src/data/het.dkvp diff --git a/docs6/src/data/het.json b/docs/src/data/het.json similarity index 100% rename from docs6/src/data/het.json rename to docs/src/data/het.json diff --git a/docs6/src/data/het/fillable.csv b/docs/src/data/het/fillable.csv similarity index 100% rename from docs6/src/data/het/fillable.csv rename to docs/src/data/het/fillable.csv diff --git a/docs6/src/data/het/hom.csv b/docs/src/data/het/hom.csv similarity index 100% rename from docs6/src/data/het/hom.csv rename to docs/src/data/het/hom.csv diff --git a/docs6/src/data/het/irregular.json b/docs/src/data/het/irregular.json similarity index 100% rename from docs6/src/data/het/irregular.json rename to docs/src/data/het/irregular.json diff --git a/docs6/src/data/het/ragged.csv b/docs/src/data/het/ragged.csv similarity index 100% rename from docs6/src/data/het/ragged.csv rename to docs/src/data/het/ragged.csv diff --git a/docs6/src/data/het/sparse.json b/docs/src/data/het/sparse.json similarity index 100% rename from docs6/src/data/het/sparse.json rename to docs/src/data/het/sparse.json diff --git a/docs6/src/data/hostnames.csv b/docs/src/data/hostnames.csv similarity index 100% rename from docs6/src/data/hostnames.csv rename to docs/src/data/hostnames.csv diff --git a/docs6/src/data/hostnames.xtab b/docs/src/data/hostnames.xtab similarity index 100% rename from docs6/src/data/hostnames.xtab rename to docs/src/data/hostnames.xtab diff --git a/docs/data/hosts.csv b/docs/src/data/hosts.csv similarity index 100% rename from docs/data/hosts.csv rename to docs/src/data/hosts.csv diff --git a/docs/data/inout.csv b/docs/src/data/inout.csv similarity index 100% rename from docs/data/inout.csv rename to docs/src/data/inout.csv diff --git a/docs/data/join-left-example.csv b/docs/src/data/join-left-example.csv similarity index 100% rename from docs/data/join-left-example.csv rename to docs/src/data/join-left-example.csv diff --git a/docs/data/join-right-example.csv b/docs/src/data/join-right-example.csv similarity index 100% rename from docs/data/join-right-example.csv rename to docs/src/data/join-right-example.csv diff --git a/docs/data/join-u-left.csv b/docs/src/data/join-u-left.csv similarity index 100% rename from docs/data/join-u-left.csv rename to docs/src/data/join-u-left.csv diff --git a/docs/data/join-u-right.csv b/docs/src/data/join-u-right.csv similarity index 100% rename from docs/data/join-u-right.csv rename to docs/src/data/join-u-right.csv diff --git a/docs6/src/data/json-example-1.json b/docs/src/data/json-example-1.json similarity index 100% rename from docs6/src/data/json-example-1.json rename to docs/src/data/json-example-1.json diff --git a/docs/data/json-example-2.json b/docs/src/data/json-example-2.json similarity index 100% rename from docs/data/json-example-2.json rename to docs/src/data/json-example-2.json diff --git a/docs/data/json-example-3.json b/docs/src/data/json-example-3.json similarity index 100% rename from docs/data/json-example-3.json rename to docs/src/data/json-example-3.json diff --git a/docs6/src/data/json-in-csv.csv b/docs/src/data/json-in-csv.csv similarity index 100% rename from docs6/src/data/json-in-csv.csv rename to docs/src/data/json-in-csv.csv diff --git a/docs/data/label-example.txt b/docs/src/data/label-example.txt similarity index 100% rename from docs/data/label-example.txt rename to docs/src/data/label-example.txt diff --git a/docs/data/linreg-example.jpg b/docs/src/data/linreg-example.jpg similarity index 100% rename from docs/data/linreg-example.jpg rename to docs/src/data/linreg-example.jpg diff --git a/docs/data/linreg-example.txt b/docs/src/data/linreg-example.txt similarity index 100% rename from docs/data/linreg-example.txt rename to docs/src/data/linreg-example.txt diff --git a/docs6/src/data/map-values-nested.json b/docs/src/data/map-values-nested.json similarity index 100% rename from docs6/src/data/map-values-nested.json rename to docs/src/data/map-values-nested.json diff --git a/docs6/src/data/map-values-spread-colon.csv b/docs/src/data/map-values-spread-colon.csv similarity index 100% rename from docs6/src/data/map-values-spread-colon.csv rename to docs/src/data/map-values-spread-colon.csv diff --git a/docs6/src/data/map-values-spread.csv b/docs/src/data/map-values-spread.csv similarity index 100% rename from docs6/src/data/map-values-spread.csv rename to docs/src/data/map-values-spread.csv diff --git a/docs6/src/data/map-values.json b/docs/src/data/map-values.json similarity index 100% rename from docs6/src/data/map-values.json rename to docs/src/data/map-values.json diff --git a/docs6/src/data/maxrows.mlr b/docs/src/data/maxrows.mlr similarity index 100% rename from docs6/src/data/maxrows.mlr rename to docs/src/data/maxrows.mlr diff --git a/docs/data/maxrows.tsv b/docs/src/data/maxrows.tsv similarity index 100% rename from docs/data/maxrows.tsv rename to docs/src/data/maxrows.tsv diff --git a/docs/data/medium b/docs/src/data/medium similarity index 100% rename from docs/data/medium rename to docs/src/data/medium diff --git a/docs/data/medium-squares b/docs/src/data/medium-squares similarity index 100% rename from docs/data/medium-squares rename to docs/src/data/medium-squares diff --git a/docs/data/miss-date.csv b/docs/src/data/miss-date.csv similarity index 100% rename from docs/data/miss-date.csv rename to docs/src/data/miss-date.csv diff --git a/docs6/src/data/mkdat2 b/docs/src/data/mkdat2 similarity index 100% rename from docs6/src/data/mkdat2 rename to docs/src/data/mkdat2 diff --git a/docs6/src/data/modsep.dkvp b/docs/src/data/modsep.dkvp similarity index 100% rename from docs6/src/data/modsep.dkvp rename to docs/src/data/modsep.dkvp diff --git a/docs/data/multicountdown.dat b/docs/src/data/multicountdown.dat similarity index 100% rename from docs/data/multicountdown.dat rename to docs/src/data/multicountdown.dat diff --git a/docs/data/multicountdown.rb b/docs/src/data/multicountdown.rb similarity index 100% rename from docs/data/multicountdown.rb rename to docs/src/data/multicountdown.rb diff --git a/docs/data/mydata.txt b/docs/src/data/mydata.txt similarity index 100% rename from docs/data/mydata.txt rename to docs/src/data/mydata.txt diff --git a/docs6/src/data/nas.csv b/docs/src/data/nas.csv similarity index 100% rename from docs6/src/data/nas.csv rename to docs/src/data/nas.csv diff --git a/docs/data/nested.tsv b/docs/src/data/nested.tsv similarity index 100% rename from docs/data/nested.tsv rename to docs/src/data/nested.tsv diff --git a/docs/data/newline-example.txt b/docs/src/data/newline-example.txt similarity index 100% rename from docs/data/newline-example.txt rename to docs/src/data/newline-example.txt diff --git a/docs6/src/data/non-consecutive.csv b/docs/src/data/non-consecutive.csv similarity index 100% rename from docs6/src/data/non-consecutive.csv rename to docs/src/data/non-consecutive.csv diff --git a/docs/data/ping-delta-example.txt b/docs/src/data/ping-delta-example.txt similarity index 100% rename from docs/data/ping-delta-example.txt rename to docs/src/data/ping-delta-example.txt diff --git a/docs/data/previous_counters.csv b/docs/src/data/previous_counters.csv similarity index 100% rename from docs/data/previous_counters.csv rename to docs/src/data/previous_counters.csv diff --git a/docs/data/prevtemp.csv b/docs/src/data/prevtemp.csv similarity index 100% rename from docs/data/prevtemp.csv rename to docs/src/data/prevtemp.csv diff --git a/docs/data/put-gating-example-1.dkvp b/docs/src/data/put-gating-example-1.dkvp similarity index 100% rename from docs/data/put-gating-example-1.dkvp rename to docs/src/data/put-gating-example-1.dkvp diff --git a/docs/data/put-gating-example-2.dkvp b/docs/src/data/put-gating-example-2.dkvp similarity index 100% rename from docs/data/put-gating-example-2.dkvp rename to docs/src/data/put-gating-example-2.dkvp diff --git a/docs/data/question.dat b/docs/src/data/question.dat similarity index 100% rename from docs/data/question.dat rename to docs/src/data/question.dat diff --git a/c/reg_test/input/ragged.csv b/docs/src/data/ragged.csv similarity index 100% rename from c/reg_test/input/ragged.csv rename to docs/src/data/ragged.csv diff --git a/docs/data/rect-inner.txt b/docs/src/data/rect-inner.txt similarity index 100% rename from docs/data/rect-inner.txt rename to docs/src/data/rect-inner.txt diff --git a/docs/data/rect-middle.txt b/docs/src/data/rect-middle.txt similarity index 100% rename from docs/data/rect-middle.txt rename to docs/src/data/rect-middle.txt diff --git a/docs/data/rect-outer.txt b/docs/src/data/rect-outer.txt similarity index 100% rename from docs/data/rect-outer.txt rename to docs/src/data/rect-outer.txt diff --git a/docs/data/rect.txt b/docs/src/data/rect.txt similarity index 100% rename from docs/data/rect.txt rename to docs/src/data/rect.txt diff --git a/docs/data/regex-in-data.dat b/docs/src/data/regex-in-data.dat similarity index 100% rename from docs/data/regex-in-data.dat rename to docs/src/data/regex-in-data.dat diff --git a/c/reg_test/input/remove-empty-columns.csv b/docs/src/data/remove-empty-columns.csv similarity index 100% rename from c/reg_test/input/remove-empty-columns.csv rename to docs/src/data/remove-empty-columns.csv diff --git a/docs/data/repeat-example.dat b/docs/src/data/repeat-example.dat similarity index 100% rename from docs/data/repeat-example.dat rename to docs/src/data/repeat-example.dat diff --git a/c/reg_test/input/repeats.dkvp b/docs/src/data/repeats.dkvp similarity index 100% rename from c/reg_test/input/repeats.dkvp rename to docs/src/data/repeats.dkvp diff --git a/docs/data/sample-example.txt b/docs/src/data/sample-example.txt similarity index 100% rename from docs/data/sample-example.txt rename to docs/src/data/sample-example.txt diff --git a/docs/data/sar.csv b/docs/src/data/sar.csv similarity index 100% rename from docs/data/sar.csv rename to docs/src/data/sar.csv diff --git a/docs6/src/data/sar.mlr b/docs/src/data/sar.mlr similarity index 100% rename from docs6/src/data/sar.mlr rename to docs/src/data/sar.mlr diff --git a/docs/data/scan-example-1.tbl b/docs/src/data/scan-example-1.tbl similarity index 100% rename from docs/data/scan-example-1.tbl rename to docs/src/data/scan-example-1.tbl diff --git a/docs/data/scan-example-2.tbl b/docs/src/data/scan-example-2.tbl similarity index 100% rename from docs/data/scan-example-2.tbl rename to docs/src/data/scan-example-2.tbl diff --git a/docs/data/scope-example.dat b/docs/src/data/scope-example.dat similarity index 100% rename from docs/data/scope-example.dat rename to docs/src/data/scope-example.dat diff --git a/docs/data/scope-example.mlr b/docs/src/data/scope-example.mlr similarity index 100% rename from docs/data/scope-example.mlr rename to docs/src/data/scope-example.mlr diff --git a/docs/data/self-join.csv b/docs/src/data/self-join.csv similarity index 100% rename from docs/data/self-join.csv rename to docs/src/data/self-join.csv diff --git a/docs/data/semicolon-example.txt b/docs/src/data/semicolon-example.txt similarity index 100% rename from docs/data/semicolon-example.txt rename to docs/src/data/semicolon-example.txt diff --git a/docs6/src/data/server-log.json b/docs/src/data/server-log.json similarity index 100% rename from docs6/src/data/server-log.json rename to docs/src/data/server-log.json diff --git a/docs6/src/data/short.csv b/docs/src/data/short.csv similarity index 100% rename from docs6/src/data/short.csv rename to docs/src/data/short.csv diff --git a/docs/data/single-quote-example.mlr b/docs/src/data/single-quote-example.mlr similarity index 100% rename from docs/data/single-quote-example.mlr rename to docs/src/data/single-quote-example.mlr diff --git a/docs6/src/data/small b/docs/src/data/small similarity index 100% rename from docs6/src/data/small rename to docs/src/data/small diff --git a/docs/data/small.csv b/docs/src/data/small.csv similarity index 100% rename from docs/data/small.csv rename to docs/src/data/small.csv diff --git a/docs/data/small2 b/docs/src/data/small2 similarity index 100% rename from docs/data/small2 rename to docs/src/data/small2 diff --git a/docs/data/sort-het.dkvp b/docs/src/data/sort-het.dkvp similarity index 100% rename from docs/data/sort-het.dkvp rename to docs/src/data/sort-het.dkvp diff --git a/docs/data/sort-missing.dkvp b/docs/src/data/sort-missing.dkvp similarity index 100% rename from docs/data/sort-missing.dkvp rename to docs/src/data/sort-missing.dkvp diff --git a/docs/data/sort-null.dat b/docs/src/data/sort-null.dat similarity index 100% rename from docs/data/sort-null.dat rename to docs/src/data/sort-null.dat diff --git a/docs/data/sort-within-records.json b/docs/src/data/sort-within-records.json similarity index 100% rename from docs/data/sort-within-records.json rename to docs/src/data/sort-within-records.json diff --git a/docs6/src/data/sorta-example-text.csv b/docs/src/data/sorta-example-text.csv similarity index 100% rename from docs6/src/data/sorta-example-text.csv rename to docs/src/data/sorta-example-text.csv diff --git a/docs6/src/data/sorta-example.csv b/docs/src/data/sorta-example.csv similarity index 100% rename from docs6/src/data/sorta-example.csv rename to docs/src/data/sorta-example.csv diff --git a/docs6/src/data/sortaf-example.csv b/docs/src/data/sortaf-example.csv similarity index 100% rename from docs6/src/data/sortaf-example.csv rename to docs/src/data/sortaf-example.csv diff --git a/docs/data/spaces.csv b/docs/src/data/spaces.csv similarity index 100% rename from docs/data/spaces.csv rename to docs/src/data/spaces.csv diff --git a/docs/data/sparse.json b/docs/src/data/sparse.json similarity index 100% rename from docs/data/sparse.json rename to docs/src/data/sparse.json diff --git a/docs/data/subcommand-example.txt b/docs/src/data/subcommand-example.txt similarity index 100% rename from docs/data/subcommand-example.txt rename to docs/src/data/subcommand-example.txt diff --git a/docs6/src/data/then-chaining-performance.txt b/docs/src/data/then-chaining-performance.txt similarity index 100% rename from docs6/src/data/then-chaining-performance.txt rename to docs/src/data/then-chaining-performance.txt diff --git a/docs/data/then-example.csv b/docs/src/data/then-example.csv similarity index 100% rename from docs/data/then-example.csv rename to docs/src/data/then-example.csv diff --git a/docs/data/timing-example.txt b/docs/src/data/timing-example.txt similarity index 100% rename from docs/data/timing-example.txt rename to docs/src/data/timing-example.txt diff --git a/c/reg_test/input/trivial-records.csv b/docs/src/data/trivial-records.csv similarity index 100% rename from c/reg_test/input/trivial-records.csv rename to docs/src/data/trivial-records.csv diff --git a/docs6/src/data/type-decl-example.mlr b/docs/src/data/type-decl-example.mlr similarity index 100% rename from docs6/src/data/type-decl-example.mlr rename to docs/src/data/type-decl-example.mlr diff --git a/docs6/src/data/type-infer.csv b/docs/src/data/type-infer.csv similarity index 100% rename from docs6/src/data/type-infer.csv rename to docs/src/data/type-infer.csv diff --git a/docs/data/unsparsify.mlr b/docs/src/data/unsparsify.mlr similarity index 100% rename from docs/data/unsparsify.mlr rename to docs/src/data/unsparsify.mlr diff --git a/docs6/src/date-time-examples.md b/docs/src/date-time-examples.md similarity index 100% rename from docs6/src/date-time-examples.md rename to docs/src/date-time-examples.md diff --git a/docs6/src/date-time-examples.md.in b/docs/src/date-time-examples.md.in similarity index 100% rename from docs6/src/date-time-examples.md.in rename to docs/src/date-time-examples.md.in diff --git a/docs/dates.csv b/docs/src/dates.csv similarity index 100% rename from docs/dates.csv rename to docs/src/dates.csv diff --git a/docs6/src/dkvp-examples.md b/docs/src/dkvp-examples.md similarity index 100% rename from docs6/src/dkvp-examples.md rename to docs/src/dkvp-examples.md diff --git a/docs6/src/dkvp-examples.md.in b/docs/src/dkvp-examples.md.in similarity index 100% rename from docs6/src/dkvp-examples.md.in rename to docs/src/dkvp-examples.md.in diff --git a/docs6/src/doc-reorg.txt b/docs/src/doc-reorg.txt similarity index 100% rename from docs6/src/doc-reorg.txt rename to docs/src/doc-reorg.txt diff --git a/docs6/src/dsl-example.mlr b/docs/src/dsl-example.mlr similarity index 100% rename from docs6/src/dsl-example.mlr rename to docs/src/dsl-example.mlr diff --git a/docs6/src/etymology.md b/docs/src/etymology.md similarity index 100% rename from docs6/src/etymology.md rename to docs/src/etymology.md diff --git a/docs6/src/etymology.md.in b/docs/src/etymology.md.in similarity index 100% rename from docs6/src/etymology.md.in rename to docs/src/etymology.md.in diff --git a/docs6/src/example.csv b/docs/src/example.csv similarity index 100% rename from docs6/src/example.csv rename to docs/src/example.csv diff --git a/docs6/src/example.json b/docs/src/example.json similarity index 100% rename from docs6/src/example.json rename to docs/src/example.json diff --git a/docs6/src/expo-sample.sh b/docs/src/expo-sample.sh similarity index 100% rename from docs6/src/expo-sample.sh rename to docs/src/expo-sample.sh diff --git a/docs6/src/extra.css b/docs/src/extra.css similarity index 100% rename from docs6/src/extra.css rename to docs/src/extra.css diff --git a/docs6/src/factorial-example.mlr b/docs/src/factorial-example.mlr similarity index 100% rename from docs6/src/factorial-example.mlr rename to docs/src/factorial-example.mlr diff --git a/docs6/src/features.md b/docs/src/features.md similarity index 100% rename from docs6/src/features.md rename to docs/src/features.md diff --git a/docs6/src/features.md.in b/docs/src/features.md.in similarity index 100% rename from docs6/src/features.md.in rename to docs/src/features.md.in diff --git a/docs6/src/file-formats.md b/docs/src/file-formats.md similarity index 100% rename from docs6/src/file-formats.md rename to docs/src/file-formats.md diff --git a/docs6/src/file-formats.md.in b/docs/src/file-formats.md.in similarity index 100% rename from docs6/src/file-formats.md.in rename to docs/src/file-formats.md.in diff --git a/docs6/src/flags.txt b/docs/src/flags.txt similarity index 100% rename from docs6/src/flags.txt rename to docs/src/flags.txt diff --git a/docs6/src/flatten-unflatten.md b/docs/src/flatten-unflatten.md similarity index 100% rename from docs6/src/flatten-unflatten.md rename to docs/src/flatten-unflatten.md diff --git a/docs6/src/flatten-unflatten.md.in b/docs/src/flatten-unflatten.md.in similarity index 100% rename from docs6/src/flatten-unflatten.md.in rename to docs/src/flatten-unflatten.md.in diff --git a/docs6/src/for-example.mlr b/docs/src/for-example.mlr similarity index 100% rename from docs6/src/for-example.mlr rename to docs/src/for-example.mlr diff --git a/docs6/src/genmd-filter b/docs/src/genmd-filter similarity index 100% rename from docs6/src/genmd-filter rename to docs/src/genmd-filter diff --git a/docs6/src/genmds b/docs/src/genmds similarity index 100% rename from docs6/src/genmds rename to docs/src/genmds diff --git a/docs6/src/glossary.md b/docs/src/glossary.md similarity index 100% rename from docs6/src/glossary.md rename to docs/src/glossary.md diff --git a/docs6/src/glossary.md.in b/docs/src/glossary.md.in similarity index 100% rename from docs6/src/glossary.md.in rename to docs/src/glossary.md.in diff --git a/docs6/src/gz-example.csv.gz b/docs/src/gz-example.csv.gz similarity index 100% rename from docs6/src/gz-example.csv.gz rename to docs/src/gz-example.csv.gz diff --git a/docs/h1foo b/docs/src/h1foo similarity index 100% rename from docs/h1foo rename to docs/src/h1foo diff --git a/docs/h2foo b/docs/src/h2foo similarity index 100% rename from docs/h2foo rename to docs/src/h2foo diff --git a/docs/h3foo b/docs/src/h3foo similarity index 100% rename from docs/h3foo rename to docs/src/h3foo diff --git a/docs6/src/if-example.mlr b/docs/src/if-example.mlr similarity index 100% rename from docs6/src/if-example.mlr rename to docs/src/if-example.mlr diff --git a/docs6/src/images/favicon.ico b/docs/src/images/favicon.ico similarity index 100% rename from docs6/src/images/favicon.ico rename to docs/src/images/favicon.ico diff --git a/docs6/src/images/favicon.png b/docs/src/images/favicon.png similarity index 100% rename from docs6/src/images/favicon.png rename to docs/src/images/favicon.png diff --git a/docs6/src/index.md b/docs/src/index.md similarity index 100% rename from docs6/src/index.md rename to docs/src/index.md diff --git a/docs6/src/index.md.in b/docs/src/index.md.in similarity index 100% rename from docs6/src/index.md.in rename to docs/src/index.md.in diff --git a/docs6/src/installation.md b/docs/src/installation.md similarity index 100% rename from docs6/src/installation.md rename to docs/src/installation.md diff --git a/docs6/src/installation.md.in b/docs/src/installation.md.in similarity index 100% rename from docs6/src/installation.md.in rename to docs/src/installation.md.in diff --git a/docs6/src/installing-miller.md b/docs/src/installing-miller.md similarity index 100% rename from docs6/src/installing-miller.md rename to docs/src/installing-miller.md diff --git a/docs6/src/installing-miller.md.in b/docs/src/installing-miller.md.in similarity index 100% rename from docs6/src/installing-miller.md.in rename to docs/src/installing-miller.md.in diff --git a/docs6/src/internationalization.md b/docs/src/internationalization.md similarity index 100% rename from docs6/src/internationalization.md rename to docs/src/internationalization.md diff --git a/docs6/src/internationalization.md.in b/docs/src/internationalization.md.in similarity index 100% rename from docs6/src/internationalization.md.in rename to docs/src/internationalization.md.in diff --git a/docs6/src/javascripts/tables.js b/docs/src/javascripts/tables.js similarity index 100% rename from docs6/src/javascripts/tables.js rename to docs/src/javascripts/tables.js diff --git a/docs6/src/keystroke-savers.md b/docs/src/keystroke-savers.md similarity index 100% rename from docs6/src/keystroke-savers.md rename to docs/src/keystroke-savers.md diff --git a/docs6/src/keystroke-savers.md.in b/docs/src/keystroke-savers.md.in similarity index 100% rename from docs6/src/keystroke-savers.md.in rename to docs/src/keystroke-savers.md.in diff --git a/docs6/src/link.txt b/docs/src/link.txt similarity index 100% rename from docs6/src/link.txt rename to docs/src/link.txt diff --git a/docs6/src/log-processing-examples.md b/docs/src/log-processing-examples.md similarity index 100% rename from docs6/src/log-processing-examples.md rename to docs/src/log-processing-examples.md diff --git a/docs6/src/log-processing-examples.md.in b/docs/src/log-processing-examples.md.in similarity index 100% rename from docs6/src/log-processing-examples.md.in rename to docs/src/log-processing-examples.md.in diff --git a/docs/log.txt b/docs/src/log.txt similarity index 100% rename from docs/log.txt rename to docs/src/log.txt diff --git a/docs/make.bat b/docs/src/make.bat similarity index 100% rename from docs/make.bat rename to docs/src/make.bat diff --git a/docs6/src/manpage.md b/docs/src/manpage.md similarity index 100% rename from docs6/src/manpage.md rename to docs/src/manpage.md diff --git a/docs6/src/manpage.md.in b/docs/src/manpage.md.in similarity index 100% rename from docs6/src/manpage.md.in rename to docs/src/manpage.md.in diff --git a/docs6/src/manpage.txt b/docs/src/manpage.txt similarity index 100% rename from docs6/src/manpage.txt rename to docs/src/manpage.txt diff --git a/docs6/src/miller-on-windows.md b/docs/src/miller-on-windows.md similarity index 100% rename from docs6/src/miller-on-windows.md rename to docs/src/miller-on-windows.md diff --git a/docs6/src/miller-on-windows.md.in b/docs/src/miller-on-windows.md.in similarity index 100% rename from docs6/src/miller-on-windows.md.in rename to docs/src/miller-on-windows.md.in diff --git a/docs6/src/miller-programming-language.md b/docs/src/miller-programming-language.md similarity index 100% rename from docs6/src/miller-programming-language.md rename to docs/src/miller-programming-language.md diff --git a/docs6/src/miller-programming-language.md.in b/docs/src/miller-programming-language.md.in similarity index 100% rename from docs6/src/miller-programming-language.md.in rename to docs/src/miller-programming-language.md.in diff --git a/docs6/src/misc-examples.md b/docs/src/misc-examples.md similarity index 100% rename from docs6/src/misc-examples.md rename to docs/src/misc-examples.md diff --git a/docs6/src/misc-examples.md.in b/docs/src/misc-examples.md.in similarity index 100% rename from docs6/src/misc-examples.md.in rename to docs/src/misc-examples.md.in diff --git a/docs6/src/mk-flag-info.rb b/docs/src/mk-flag-info.rb similarity index 100% rename from docs6/src/mk-flag-info.rb rename to docs/src/mk-flag-info.rb diff --git a/docs6/src/mk-func-h2s.sh b/docs/src/mk-func-h2s.sh similarity index 100% rename from docs6/src/mk-func-h2s.sh rename to docs/src/mk-func-h2s.sh diff --git a/docs6/src/mk-func-info.rb b/docs/src/mk-func-info.rb similarity index 100% rename from docs6/src/mk-func-info.rb rename to docs/src/mk-func-info.rb diff --git a/docs6/src/mlr.1 b/docs/src/mlr.1 similarity index 100% rename from docs6/src/mlr.1 rename to docs/src/mlr.1 diff --git a/docs6/src/morph b/docs/src/morph similarity index 100% rename from docs6/src/morph rename to docs/src/morph diff --git a/docs6/src/morphs b/docs/src/morphs similarity index 100% rename from docs6/src/morphs rename to docs/src/morphs diff --git a/docs/multi-join/input.csv b/docs/src/multi-join/input.csv similarity index 100% rename from docs/multi-join/input.csv rename to docs/src/multi-join/input.csv diff --git a/docs/multi-join/name-lookup.csv b/docs/src/multi-join/name-lookup.csv similarity index 100% rename from docs/multi-join/name-lookup.csv rename to docs/src/multi-join/name-lookup.csv diff --git a/docs/multi-join/status-lookup.csv b/docs/src/multi-join/status-lookup.csv similarity index 100% rename from docs/multi-join/status-lookup.csv rename to docs/src/multi-join/status-lookup.csv diff --git a/docs6/src/new-in-miller-6.md b/docs/src/new-in-miller-6.md similarity index 100% rename from docs6/src/new-in-miller-6.md rename to docs/src/new-in-miller-6.md diff --git a/docs6/src/new-in-miller-6.md.in b/docs/src/new-in-miller-6.md.in similarity index 100% rename from docs6/src/new-in-miller-6.md.in rename to docs/src/new-in-miller-6.md.in diff --git a/docs/ngrams/gsl-2000.txt b/docs/src/ngrams/gsl-2000.txt similarity index 100% rename from docs/ngrams/gsl-2000.txt rename to docs/src/ngrams/gsl-2000.txt diff --git a/docs/ngrams/mkv.mlr b/docs/src/ngrams/mkv.mlr similarity index 100% rename from docs/ngrams/mkv.mlr rename to docs/src/ngrams/mkv.mlr diff --git a/docs/ngrams/mkv3.mlr b/docs/src/ngrams/mkv3.mlr similarity index 100% rename from docs/ngrams/mkv3.mlr rename to docs/src/ngrams/mkv3.mlr diff --git a/docs/ngrams/mkv4.mlr b/docs/src/ngrams/mkv4.mlr similarity index 100% rename from docs/ngrams/mkv4.mlr rename to docs/src/ngrams/mkv4.mlr diff --git a/docs/ngrams/mkv5.mlr b/docs/src/ngrams/mkv5.mlr similarity index 100% rename from docs/ngrams/mkv5.mlr rename to docs/src/ngrams/mkv5.mlr diff --git a/docs/ngrams/ng1 b/docs/src/ngrams/ng1 similarity index 100% rename from docs/ngrams/ng1 rename to docs/src/ngrams/ng1 diff --git a/docs/ngrams/ng1.mlr b/docs/src/ngrams/ng1.mlr similarity index 100% rename from docs/ngrams/ng1.mlr rename to docs/src/ngrams/ng1.mlr diff --git a/docs/ngrams/ng1.mlr.txt b/docs/src/ngrams/ng1.mlr.txt similarity index 100% rename from docs/ngrams/ng1.mlr.txt rename to docs/src/ngrams/ng1.mlr.txt diff --git a/docs/ngrams/ng2 b/docs/src/ngrams/ng2 similarity index 100% rename from docs/ngrams/ng2 rename to docs/src/ngrams/ng2 diff --git a/docs/ngrams/ng2.mlr b/docs/src/ngrams/ng2.mlr similarity index 100% rename from docs/ngrams/ng2.mlr rename to docs/src/ngrams/ng2.mlr diff --git a/docs/ngrams/ng2.mlr.txt b/docs/src/ngrams/ng2.mlr.txt similarity index 100% rename from docs/ngrams/ng2.mlr.txt rename to docs/src/ngrams/ng2.mlr.txt diff --git a/docs/ngrams/ng3 b/docs/src/ngrams/ng3 similarity index 100% rename from docs/ngrams/ng3 rename to docs/src/ngrams/ng3 diff --git a/docs/ngrams/ng3.mlr b/docs/src/ngrams/ng3.mlr similarity index 100% rename from docs/ngrams/ng3.mlr rename to docs/src/ngrams/ng3.mlr diff --git a/docs/ngrams/ng3.mlr.txt b/docs/src/ngrams/ng3.mlr.txt similarity index 100% rename from docs/ngrams/ng3.mlr.txt rename to docs/src/ngrams/ng3.mlr.txt diff --git a/docs/ngrams/ng4 b/docs/src/ngrams/ng4 similarity index 100% rename from docs/ngrams/ng4 rename to docs/src/ngrams/ng4 diff --git a/docs/ngrams/ng4.mlr b/docs/src/ngrams/ng4.mlr similarity index 100% rename from docs/ngrams/ng4.mlr rename to docs/src/ngrams/ng4.mlr diff --git a/docs/ngrams/ng4.mlr.txt b/docs/src/ngrams/ng4.mlr.txt similarity index 100% rename from docs/ngrams/ng4.mlr.txt rename to docs/src/ngrams/ng4.mlr.txt diff --git a/docs/ngrams/ng5 b/docs/src/ngrams/ng5 similarity index 100% rename from docs/ngrams/ng5 rename to docs/src/ngrams/ng5 diff --git a/docs/ngrams/ng5.mlr b/docs/src/ngrams/ng5.mlr similarity index 100% rename from docs/ngrams/ng5.mlr rename to docs/src/ngrams/ng5.mlr diff --git a/docs/ngrams/ng5.mlr.txt b/docs/src/ngrams/ng5.mlr.txt similarity index 100% rename from docs/ngrams/ng5.mlr.txt rename to docs/src/ngrams/ng5.mlr.txt diff --git a/docs/ngrams/ngfuncs.mlr b/docs/src/ngrams/ngfuncs.mlr similarity index 100% rename from docs/ngrams/ngfuncs.mlr rename to docs/src/ngrams/ngfuncs.mlr diff --git a/docs/ngrams/ngfuncs.mlr.txt b/docs/src/ngrams/ngfuncs.mlr.txt similarity index 100% rename from docs/ngrams/ngfuncs.mlr.txt rename to docs/src/ngrams/ngfuncs.mlr.txt diff --git a/docs6/src/online-help.md b/docs/src/online-help.md similarity index 100% rename from docs6/src/online-help.md rename to docs/src/online-help.md diff --git a/docs6/src/online-help.md.in b/docs/src/online-help.md.in similarity index 100% rename from docs6/src/online-help.md.in rename to docs/src/online-help.md.in diff --git a/docs6/src/operating-on-all-fields.md b/docs/src/operating-on-all-fields.md similarity index 100% rename from docs6/src/operating-on-all-fields.md rename to docs/src/operating-on-all-fields.md diff --git a/docs6/src/operating-on-all-fields.md.in b/docs/src/operating-on-all-fields.md.in similarity index 100% rename from docs6/src/operating-on-all-fields.md.in rename to docs/src/operating-on-all-fields.md.in diff --git a/docs6/src/operating-on-all-records.md b/docs/src/operating-on-all-records.md similarity index 100% rename from docs6/src/operating-on-all-records.md rename to docs/src/operating-on-all-records.md diff --git a/docs6/src/operating-on-all-records.md.in b/docs/src/operating-on-all-records.md.in similarity index 100% rename from docs6/src/operating-on-all-records.md.in rename to docs/src/operating-on-all-records.md.in diff --git a/docs6/src/originality.md b/docs/src/originality.md similarity index 100% rename from docs6/src/originality.md rename to docs/src/originality.md diff --git a/docs6/src/originality.md.in b/docs/src/originality.md.in similarity index 100% rename from docs6/src/originality.md.in rename to docs/src/originality.md.in diff --git a/docs6/src/output-colorization.md b/docs/src/output-colorization.md similarity index 100% rename from docs6/src/output-colorization.md rename to docs/src/output-colorization.md diff --git a/docs6/src/output-colorization.md.in b/docs/src/output-colorization.md.in similarity index 100% rename from docs6/src/output-colorization.md.in rename to docs/src/output-colorization.md.in diff --git a/docs6/src/performance.md b/docs/src/performance.md similarity index 100% rename from docs6/src/performance.md rename to docs/src/performance.md diff --git a/docs6/src/performance.md.in b/docs/src/performance.md.in similarity index 100% rename from docs6/src/performance.md.in rename to docs/src/performance.md.in diff --git a/docs6/src/pix/colorization.png b/docs/src/pix/colorization.png similarity index 100% rename from docs6/src/pix/colorization.png rename to docs/src/pix/colorization.png diff --git a/docs6/src/pix/colorization.png.000 b/docs/src/pix/colorization.png.000 similarity index 100% rename from docs6/src/pix/colorization.png.000 rename to docs/src/pix/colorization.png.000 diff --git a/docs6/src/pix/colorization2.png b/docs/src/pix/colorization2.png similarity index 100% rename from docs6/src/pix/colorization2.png rename to docs/src/pix/colorization2.png diff --git a/docs6/src/pix/colorization2.png.000 b/docs/src/pix/colorization2.png.000 similarity index 100% rename from docs6/src/pix/colorization2.png.000 rename to docs/src/pix/colorization2.png.000 diff --git a/docs/pix/mand.png b/docs/src/pix/mand.png similarity index 100% rename from docs/pix/mand.png rename to docs/src/pix/mand.png diff --git a/docs6/src/pix/miller-msys-complex.png b/docs/src/pix/miller-msys-complex.png similarity index 100% rename from docs6/src/pix/miller-msys-complex.png rename to docs/src/pix/miller-msys-complex.png diff --git a/docs6/src/pix/miller-msys.png b/docs/src/pix/miller-msys.png similarity index 100% rename from docs6/src/pix/miller-msys.png rename to docs/src/pix/miller-msys.png diff --git a/docs6/src/pix/miller-windows-complex-workaround.png b/docs/src/pix/miller-windows-complex-workaround.png similarity index 100% rename from docs6/src/pix/miller-windows-complex-workaround.png rename to docs/src/pix/miller-windows-complex-workaround.png diff --git a/docs6/src/pix/miller-windows-complex.png b/docs/src/pix/miller-windows-complex.png similarity index 100% rename from docs6/src/pix/miller-windows-complex.png rename to docs/src/pix/miller-windows-complex.png diff --git a/docs6/src/pix/miller-windows-triple-double-quote.png b/docs/src/pix/miller-windows-triple-double-quote.png similarity index 100% rename from docs6/src/pix/miller-windows-triple-double-quote.png rename to docs/src/pix/miller-windows-triple-double-quote.png diff --git a/docs6/src/pix/miller-windows.png b/docs/src/pix/miller-windows.png similarity index 100% rename from docs6/src/pix/miller-windows.png rename to docs/src/pix/miller-windows.png diff --git a/docs/pix/mlr-doc-sepia.jpg b/docs/src/pix/mlr-doc-sepia.jpg similarity index 100% rename from docs/pix/mlr-doc-sepia.jpg rename to docs/src/pix/mlr-doc-sepia.jpg diff --git a/docs/pix/mlr.jpg b/docs/src/pix/mlr.jpg similarity index 100% rename from docs/pix/mlr.jpg rename to docs/src/pix/mlr.jpg diff --git a/docs/pix/omd.png b/docs/src/pix/omd.png similarity index 100% rename from docs/pix/omd.png rename to docs/src/pix/omd.png diff --git a/docs/pix/sepia-overlay.jpg b/docs/src/pix/sepia-overlay.jpg similarity index 100% rename from docs/pix/sepia-overlay.jpg rename to docs/src/pix/sepia-overlay.jpg diff --git a/docs6/src/pix/vim-syntax-off.png b/docs/src/pix/vim-syntax-off.png similarity index 100% rename from docs6/src/pix/vim-syntax-off.png rename to docs/src/pix/vim-syntax-off.png diff --git a/docs6/src/pix/vim-syntax-on.png b/docs/src/pix/vim-syntax-on.png similarity index 100% rename from docs6/src/pix/vim-syntax-on.png rename to docs/src/pix/vim-syntax-on.png diff --git a/docs/polyglot-dkvp-io/dkvp_io.py b/docs/src/polyglot-dkvp-io/dkvp_io.py similarity index 100% rename from docs/polyglot-dkvp-io/dkvp_io.py rename to docs/src/polyglot-dkvp-io/dkvp_io.py diff --git a/docs/polyglot-dkvp-io/dkvp_io.rb b/docs/src/polyglot-dkvp-io/dkvp_io.rb similarity index 100% rename from docs/polyglot-dkvp-io/dkvp_io.rb rename to docs/src/polyglot-dkvp-io/dkvp_io.rb diff --git a/docs/polyglot-dkvp-io/example.py b/docs/src/polyglot-dkvp-io/example.py similarity index 100% rename from docs/polyglot-dkvp-io/example.py rename to docs/src/polyglot-dkvp-io/example.py diff --git a/docs/polyglot-dkvp-io/example.rb b/docs/src/polyglot-dkvp-io/example.rb similarity index 100% rename from docs/polyglot-dkvp-io/example.rb rename to docs/src/polyglot-dkvp-io/example.rb diff --git a/docs6/src/programming-examples.md b/docs/src/programming-examples.md similarity index 100% rename from docs6/src/programming-examples.md rename to docs/src/programming-examples.md diff --git a/docs6/src/programming-examples.md.in b/docs/src/programming-examples.md.in similarity index 100% rename from docs6/src/programming-examples.md.in rename to docs/src/programming-examples.md.in diff --git a/docs6/src/programs/mand.mlr b/docs/src/programs/mand.mlr similarity index 100% rename from docs6/src/programs/mand.mlr rename to docs/src/programs/mand.mlr diff --git a/docs6/src/programs/mand.sh b/docs/src/programs/mand.sh similarity index 100% rename from docs6/src/programs/mand.sh rename to docs/src/programs/mand.sh diff --git a/docs/programs/sieve.mlr b/docs/src/programs/sieve.mlr similarity index 100% rename from docs/programs/sieve.mlr rename to docs/src/programs/sieve.mlr diff --git a/docs6/src/purple.csv.gz b/docs/src/purple.csv.gz similarity index 100% rename from docs6/src/purple.csv.gz rename to docs/src/purple.csv.gz diff --git a/docs6/src/questions-about-joins.md b/docs/src/questions-about-joins.md similarity index 100% rename from docs6/src/questions-about-joins.md rename to docs/src/questions-about-joins.md diff --git a/docs6/src/questions-about-joins.md.in b/docs/src/questions-about-joins.md.in similarity index 100% rename from docs6/src/questions-about-joins.md.in rename to docs/src/questions-about-joins.md.in diff --git a/docs6/src/questions-about-then-chaining.md b/docs/src/questions-about-then-chaining.md similarity index 100% rename from docs6/src/questions-about-then-chaining.md rename to docs/src/questions-about-then-chaining.md diff --git a/docs6/src/questions-about-then-chaining.md.in b/docs/src/questions-about-then-chaining.md.in similarity index 100% rename from docs6/src/questions-about-then-chaining.md.in rename to docs/src/questions-about-then-chaining.md.in diff --git a/docs6/src/randomizing-examples.md b/docs/src/randomizing-examples.md similarity index 100% rename from docs6/src/randomizing-examples.md rename to docs/src/randomizing-examples.md diff --git a/docs6/src/randomizing-examples.md.in b/docs/src/randomizing-examples.md.in similarity index 100% rename from docs6/src/randomizing-examples.md.in rename to docs/src/randomizing-examples.md.in diff --git a/docs6/src/record-heterogeneity.md b/docs/src/record-heterogeneity.md similarity index 100% rename from docs6/src/record-heterogeneity.md rename to docs/src/record-heterogeneity.md diff --git a/docs6/src/record-heterogeneity.md.in b/docs/src/record-heterogeneity.md.in similarity index 100% rename from docs6/src/record-heterogeneity.md.in rename to docs/src/record-heterogeneity.md.in diff --git a/docs6/src/red.csv.gz b/docs/src/red.csv.gz similarity index 100% rename from docs6/src/red.csv.gz rename to docs/src/red.csv.gz diff --git a/docs6/src/reference-dsl-builtin-functions.md b/docs/src/reference-dsl-builtin-functions.md similarity index 100% rename from docs6/src/reference-dsl-builtin-functions.md rename to docs/src/reference-dsl-builtin-functions.md diff --git a/docs6/src/reference-dsl-builtin-functions.md.in b/docs/src/reference-dsl-builtin-functions.md.in similarity index 100% rename from docs6/src/reference-dsl-builtin-functions.md.in rename to docs/src/reference-dsl-builtin-functions.md.in diff --git a/docs6/src/reference-dsl-complexity.md b/docs/src/reference-dsl-complexity.md similarity index 100% rename from docs6/src/reference-dsl-complexity.md rename to docs/src/reference-dsl-complexity.md diff --git a/docs6/src/reference-dsl-complexity.md.in b/docs/src/reference-dsl-complexity.md.in similarity index 100% rename from docs6/src/reference-dsl-complexity.md.in rename to docs/src/reference-dsl-complexity.md.in diff --git a/docs6/src/reference-dsl-control-structures.md b/docs/src/reference-dsl-control-structures.md similarity index 100% rename from docs6/src/reference-dsl-control-structures.md rename to docs/src/reference-dsl-control-structures.md diff --git a/docs6/src/reference-dsl-control-structures.md.in b/docs/src/reference-dsl-control-structures.md.in similarity index 100% rename from docs6/src/reference-dsl-control-structures.md.in rename to docs/src/reference-dsl-control-structures.md.in diff --git a/docs6/src/reference-dsl-differences.md b/docs/src/reference-dsl-differences.md similarity index 100% rename from docs6/src/reference-dsl-differences.md rename to docs/src/reference-dsl-differences.md diff --git a/docs6/src/reference-dsl-differences.md.in b/docs/src/reference-dsl-differences.md.in similarity index 100% rename from docs6/src/reference-dsl-differences.md.in rename to docs/src/reference-dsl-differences.md.in diff --git a/docs6/src/reference-dsl-errors.md b/docs/src/reference-dsl-errors.md similarity index 100% rename from docs6/src/reference-dsl-errors.md rename to docs/src/reference-dsl-errors.md diff --git a/docs6/src/reference-dsl-errors.md.in b/docs/src/reference-dsl-errors.md.in similarity index 100% rename from docs6/src/reference-dsl-errors.md.in rename to docs/src/reference-dsl-errors.md.in diff --git a/docs6/src/reference-dsl-filter-statements.md b/docs/src/reference-dsl-filter-statements.md similarity index 100% rename from docs6/src/reference-dsl-filter-statements.md rename to docs/src/reference-dsl-filter-statements.md diff --git a/docs6/src/reference-dsl-filter-statements.md.in b/docs/src/reference-dsl-filter-statements.md.in similarity index 100% rename from docs6/src/reference-dsl-filter-statements.md.in rename to docs/src/reference-dsl-filter-statements.md.in diff --git a/docs6/src/reference-dsl-higher-order-functions.md b/docs/src/reference-dsl-higher-order-functions.md similarity index 100% rename from docs6/src/reference-dsl-higher-order-functions.md rename to docs/src/reference-dsl-higher-order-functions.md diff --git a/docs6/src/reference-dsl-higher-order-functions.md.in b/docs/src/reference-dsl-higher-order-functions.md.in similarity index 100% rename from docs6/src/reference-dsl-higher-order-functions.md.in rename to docs/src/reference-dsl-higher-order-functions.md.in diff --git a/docs6/src/reference-dsl-operators.md b/docs/src/reference-dsl-operators.md similarity index 100% rename from docs6/src/reference-dsl-operators.md rename to docs/src/reference-dsl-operators.md diff --git a/docs6/src/reference-dsl-operators.md.in b/docs/src/reference-dsl-operators.md.in similarity index 100% rename from docs6/src/reference-dsl-operators.md.in rename to docs/src/reference-dsl-operators.md.in diff --git a/docs6/src/reference-dsl-output-statements.md b/docs/src/reference-dsl-output-statements.md similarity index 100% rename from docs6/src/reference-dsl-output-statements.md rename to docs/src/reference-dsl-output-statements.md diff --git a/docs6/src/reference-dsl-output-statements.md.in b/docs/src/reference-dsl-output-statements.md.in similarity index 100% rename from docs6/src/reference-dsl-output-statements.md.in rename to docs/src/reference-dsl-output-statements.md.in diff --git a/docs6/src/reference-dsl-syntax.md b/docs/src/reference-dsl-syntax.md similarity index 100% rename from docs6/src/reference-dsl-syntax.md rename to docs/src/reference-dsl-syntax.md diff --git a/docs6/src/reference-dsl-syntax.md.in b/docs/src/reference-dsl-syntax.md.in similarity index 100% rename from docs6/src/reference-dsl-syntax.md.in rename to docs/src/reference-dsl-syntax.md.in diff --git a/docs6/src/reference-dsl-time.md b/docs/src/reference-dsl-time.md similarity index 100% rename from docs6/src/reference-dsl-time.md rename to docs/src/reference-dsl-time.md diff --git a/docs6/src/reference-dsl-time.md.in b/docs/src/reference-dsl-time.md.in similarity index 100% rename from docs6/src/reference-dsl-time.md.in rename to docs/src/reference-dsl-time.md.in diff --git a/docs6/src/reference-dsl-unset-statements.md b/docs/src/reference-dsl-unset-statements.md similarity index 100% rename from docs6/src/reference-dsl-unset-statements.md rename to docs/src/reference-dsl-unset-statements.md diff --git a/docs6/src/reference-dsl-unset-statements.md.in b/docs/src/reference-dsl-unset-statements.md.in similarity index 100% rename from docs6/src/reference-dsl-unset-statements.md.in rename to docs/src/reference-dsl-unset-statements.md.in diff --git a/docs6/src/reference-dsl-user-defined-functions.md b/docs/src/reference-dsl-user-defined-functions.md similarity index 100% rename from docs6/src/reference-dsl-user-defined-functions.md rename to docs/src/reference-dsl-user-defined-functions.md diff --git a/docs6/src/reference-dsl-user-defined-functions.md.in b/docs/src/reference-dsl-user-defined-functions.md.in similarity index 100% rename from docs6/src/reference-dsl-user-defined-functions.md.in rename to docs/src/reference-dsl-user-defined-functions.md.in diff --git a/docs6/src/reference-dsl-variables.md b/docs/src/reference-dsl-variables.md similarity index 100% rename from docs6/src/reference-dsl-variables.md rename to docs/src/reference-dsl-variables.md diff --git a/docs6/src/reference-dsl-variables.md.in b/docs/src/reference-dsl-variables.md.in similarity index 100% rename from docs6/src/reference-dsl-variables.md.in rename to docs/src/reference-dsl-variables.md.in diff --git a/docs6/src/reference-dsl.md b/docs/src/reference-dsl.md similarity index 100% rename from docs6/src/reference-dsl.md rename to docs/src/reference-dsl.md diff --git a/docs6/src/reference-dsl.md.in b/docs/src/reference-dsl.md.in similarity index 100% rename from docs6/src/reference-dsl.md.in rename to docs/src/reference-dsl.md.in diff --git a/docs6/src/reference-main-arithmetic.md b/docs/src/reference-main-arithmetic.md similarity index 100% rename from docs6/src/reference-main-arithmetic.md rename to docs/src/reference-main-arithmetic.md diff --git a/docs6/src/reference-main-arithmetic.md.in b/docs/src/reference-main-arithmetic.md.in similarity index 100% rename from docs6/src/reference-main-arithmetic.md.in rename to docs/src/reference-main-arithmetic.md.in diff --git a/docs6/src/reference-main-arrays.md b/docs/src/reference-main-arrays.md similarity index 100% rename from docs6/src/reference-main-arrays.md rename to docs/src/reference-main-arrays.md diff --git a/docs6/src/reference-main-arrays.md.in b/docs/src/reference-main-arrays.md.in similarity index 100% rename from docs6/src/reference-main-arrays.md.in rename to docs/src/reference-main-arrays.md.in diff --git a/docs6/src/reference-main-auxiliary-commands.md b/docs/src/reference-main-auxiliary-commands.md similarity index 100% rename from docs6/src/reference-main-auxiliary-commands.md rename to docs/src/reference-main-auxiliary-commands.md diff --git a/docs6/src/reference-main-auxiliary-commands.md.in b/docs/src/reference-main-auxiliary-commands.md.in similarity index 100% rename from docs6/src/reference-main-auxiliary-commands.md.in rename to docs/src/reference-main-auxiliary-commands.md.in diff --git a/docs6/src/reference-main-compressed-data.md b/docs/src/reference-main-compressed-data.md similarity index 100% rename from docs6/src/reference-main-compressed-data.md rename to docs/src/reference-main-compressed-data.md diff --git a/docs6/src/reference-main-compressed-data.md.in b/docs/src/reference-main-compressed-data.md.in similarity index 100% rename from docs6/src/reference-main-compressed-data.md.in rename to docs/src/reference-main-compressed-data.md.in diff --git a/docs6/src/reference-main-data-types.md b/docs/src/reference-main-data-types.md similarity index 100% rename from docs6/src/reference-main-data-types.md rename to docs/src/reference-main-data-types.md diff --git a/docs6/src/reference-main-data-types.md.in b/docs/src/reference-main-data-types.md.in similarity index 100% rename from docs6/src/reference-main-data-types.md.in rename to docs/src/reference-main-data-types.md.in diff --git a/docs6/src/reference-main-env-vars.md b/docs/src/reference-main-env-vars.md similarity index 100% rename from docs6/src/reference-main-env-vars.md rename to docs/src/reference-main-env-vars.md diff --git a/docs6/src/reference-main-env-vars.md.in b/docs/src/reference-main-env-vars.md.in similarity index 100% rename from docs6/src/reference-main-env-vars.md.in rename to docs/src/reference-main-env-vars.md.in diff --git a/docs6/src/reference-main-flag-list.md b/docs/src/reference-main-flag-list.md similarity index 100% rename from docs6/src/reference-main-flag-list.md rename to docs/src/reference-main-flag-list.md diff --git a/docs6/src/reference-main-flag-list.md.in b/docs/src/reference-main-flag-list.md.in similarity index 100% rename from docs6/src/reference-main-flag-list.md.in rename to docs/src/reference-main-flag-list.md.in diff --git a/docs6/src/reference-main-in-place-processing.md b/docs/src/reference-main-in-place-processing.md similarity index 100% rename from docs6/src/reference-main-in-place-processing.md rename to docs/src/reference-main-in-place-processing.md diff --git a/docs6/src/reference-main-in-place-processing.md.in b/docs/src/reference-main-in-place-processing.md.in similarity index 100% rename from docs6/src/reference-main-in-place-processing.md.in rename to docs/src/reference-main-in-place-processing.md.in diff --git a/docs6/src/reference-main-maps.md b/docs/src/reference-main-maps.md similarity index 100% rename from docs6/src/reference-main-maps.md rename to docs/src/reference-main-maps.md diff --git a/docs6/src/reference-main-maps.md.in b/docs/src/reference-main-maps.md.in similarity index 100% rename from docs6/src/reference-main-maps.md.in rename to docs/src/reference-main-maps.md.in diff --git a/docs6/src/reference-main-null-data.md b/docs/src/reference-main-null-data.md similarity index 100% rename from docs6/src/reference-main-null-data.md rename to docs/src/reference-main-null-data.md diff --git a/docs6/src/reference-main-null-data.md.in b/docs/src/reference-main-null-data.md.in similarity index 100% rename from docs6/src/reference-main-null-data.md.in rename to docs/src/reference-main-null-data.md.in diff --git a/docs6/src/reference-main-number-formatting.md b/docs/src/reference-main-number-formatting.md similarity index 100% rename from docs6/src/reference-main-number-formatting.md rename to docs/src/reference-main-number-formatting.md diff --git a/docs6/src/reference-main-number-formatting.md.in b/docs/src/reference-main-number-formatting.md.in similarity index 100% rename from docs6/src/reference-main-number-formatting.md.in rename to docs/src/reference-main-number-formatting.md.in diff --git a/docs6/src/reference-main-overview.md b/docs/src/reference-main-overview.md similarity index 100% rename from docs6/src/reference-main-overview.md rename to docs/src/reference-main-overview.md diff --git a/docs6/src/reference-main-overview.md.in b/docs/src/reference-main-overview.md.in similarity index 100% rename from docs6/src/reference-main-overview.md.in rename to docs/src/reference-main-overview.md.in diff --git a/docs6/src/reference-main-regular-expressions.md b/docs/src/reference-main-regular-expressions.md similarity index 100% rename from docs6/src/reference-main-regular-expressions.md rename to docs/src/reference-main-regular-expressions.md diff --git a/docs6/src/reference-main-regular-expressions.md.in b/docs/src/reference-main-regular-expressions.md.in similarity index 100% rename from docs6/src/reference-main-regular-expressions.md.in rename to docs/src/reference-main-regular-expressions.md.in diff --git a/docs6/src/reference-main-separators.md b/docs/src/reference-main-separators.md similarity index 100% rename from docs6/src/reference-main-separators.md rename to docs/src/reference-main-separators.md diff --git a/docs6/src/reference-main-separators.md.in b/docs/src/reference-main-separators.md.in similarity index 100% rename from docs6/src/reference-main-separators.md.in rename to docs/src/reference-main-separators.md.in diff --git a/docs6/src/reference-main-strings.md b/docs/src/reference-main-strings.md similarity index 100% rename from docs6/src/reference-main-strings.md rename to docs/src/reference-main-strings.md diff --git a/docs6/src/reference-main-strings.md.in b/docs/src/reference-main-strings.md.in similarity index 100% rename from docs6/src/reference-main-strings.md.in rename to docs/src/reference-main-strings.md.in diff --git a/docs6/src/reference-main-then-chaining.md b/docs/src/reference-main-then-chaining.md similarity index 100% rename from docs6/src/reference-main-then-chaining.md rename to docs/src/reference-main-then-chaining.md diff --git a/docs6/src/reference-main-then-chaining.md.in b/docs/src/reference-main-then-chaining.md.in similarity index 100% rename from docs6/src/reference-main-then-chaining.md.in rename to docs/src/reference-main-then-chaining.md.in diff --git a/docs6/src/reference-verbs.md b/docs/src/reference-verbs.md similarity index 100% rename from docs6/src/reference-verbs.md rename to docs/src/reference-verbs.md diff --git a/docs6/src/reference-verbs.md.in b/docs/src/reference-verbs.md.in similarity index 100% rename from docs6/src/reference-verbs.md.in rename to docs/src/reference-verbs.md.in diff --git a/docs6/src/release-docs.md b/docs/src/release-docs.md similarity index 100% rename from docs6/src/release-docs.md rename to docs/src/release-docs.md diff --git a/docs6/src/release-docs.md.in b/docs/src/release-docs.md.in similarity index 100% rename from docs6/src/release-docs.md.in rename to docs/src/release-docs.md.in diff --git a/docs6/src/repl.md b/docs/src/repl.md similarity index 100% rename from docs6/src/repl.md rename to docs/src/repl.md diff --git a/docs6/src/repl.md.in b/docs/src/repl.md.in similarity index 100% rename from docs6/src/repl.md.in rename to docs/src/repl.md.in diff --git a/docs6/src/sample_mlrrc b/docs/src/sample_mlrrc similarity index 100% rename from docs6/src/sample_mlrrc rename to docs/src/sample_mlrrc diff --git a/docs6/src/shapes-of-data.md b/docs/src/shapes-of-data.md similarity index 100% rename from docs6/src/shapes-of-data.md rename to docs/src/shapes-of-data.md diff --git a/docs6/src/shapes-of-data.md.in b/docs/src/shapes-of-data.md.in similarity index 100% rename from docs6/src/shapes-of-data.md.in rename to docs/src/shapes-of-data.md.in diff --git a/docs6/src/shell-commands.md b/docs/src/shell-commands.md similarity index 100% rename from docs6/src/shell-commands.md rename to docs/src/shell-commands.md diff --git a/docs6/src/shell-commands.md.in b/docs/src/shell-commands.md.in similarity index 100% rename from docs6/src/shell-commands.md.in rename to docs/src/shell-commands.md.in diff --git a/docs6/src/sorting.md b/docs/src/sorting.md similarity index 100% rename from docs6/src/sorting.md rename to docs/src/sorting.md diff --git a/docs6/src/sorting.md.in b/docs/src/sorting.md.in similarity index 100% rename from docs6/src/sorting.md.in rename to docs/src/sorting.md.in diff --git a/docs6/src/special-symbols-and-formatting.md b/docs/src/special-symbols-and-formatting.md similarity index 100% rename from docs6/src/special-symbols-and-formatting.md rename to docs/src/special-symbols-and-formatting.md diff --git a/docs6/src/special-symbols-and-formatting.md.in b/docs/src/special-symbols-and-formatting.md.in similarity index 100% rename from docs6/src/special-symbols-and-formatting.md.in rename to docs/src/special-symbols-and-formatting.md.in diff --git a/docs6/src/sql-examples.md b/docs/src/sql-examples.md similarity index 100% rename from docs6/src/sql-examples.md rename to docs/src/sql-examples.md diff --git a/docs6/src/sql-examples.md.in b/docs/src/sql-examples.md.in similarity index 100% rename from docs6/src/sql-examples.md.in rename to docs/src/sql-examples.md.in diff --git a/docs6/src/square.csv b/docs/src/square.csv similarity index 100% rename from docs6/src/square.csv rename to docs/src/square.csv diff --git a/docs6/src/statistics-examples.md b/docs/src/statistics-examples.md similarity index 100% rename from docs6/src/statistics-examples.md rename to docs/src/statistics-examples.md diff --git a/docs6/src/statistics-examples.md.in b/docs/src/statistics-examples.md.in similarity index 100% rename from docs6/src/statistics-examples.md.in rename to docs/src/statistics-examples.md.in diff --git a/docs6/src/streaming-and-memory.md b/docs/src/streaming-and-memory.md similarity index 100% rename from docs6/src/streaming-and-memory.md rename to docs/src/streaming-and-memory.md diff --git a/docs6/src/streaming-and-memory.md.in b/docs/src/streaming-and-memory.md.in similarity index 100% rename from docs6/src/streaming-and-memory.md.in rename to docs/src/streaming-and-memory.md.in diff --git a/docs6/src/structure-of-these-documents.md b/docs/src/structure-of-these-documents.md similarity index 100% rename from docs6/src/structure-of-these-documents.md rename to docs/src/structure-of-these-documents.md diff --git a/docs6/src/structure-of-these-documents.md.in b/docs/src/structure-of-these-documents.md.in similarity index 100% rename from docs6/src/structure-of-these-documents.md.in rename to docs/src/structure-of-these-documents.md.in diff --git a/docs6/src/tools/rr b/docs/src/tools/rr similarity index 100% rename from docs6/src/tools/rr rename to docs/src/tools/rr diff --git a/docs6/src/triangle.csv b/docs/src/triangle.csv similarity index 100% rename from docs6/src/triangle.csv rename to docs/src/triangle.csv diff --git a/docs6/src/two-pass-algorithms.md b/docs/src/two-pass-algorithms.md similarity index 100% rename from docs6/src/two-pass-algorithms.md rename to docs/src/two-pass-algorithms.md diff --git a/docs6/src/two-pass-algorithms.md.in b/docs/src/two-pass-algorithms.md.in similarity index 100% rename from docs6/src/two-pass-algorithms.md.in rename to docs/src/two-pass-algorithms.md.in diff --git a/docs6/src/unix-toolkit-context.md b/docs/src/unix-toolkit-context.md similarity index 100% rename from docs6/src/unix-toolkit-context.md rename to docs/src/unix-toolkit-context.md diff --git a/docs6/src/unix-toolkit-context.md.in b/docs/src/unix-toolkit-context.md.in similarity index 100% rename from docs6/src/unix-toolkit-context.md.in rename to docs/src/unix-toolkit-context.md.in diff --git a/docs/variance.mlr b/docs/src/variance.mlr similarity index 100% rename from docs/variance.mlr rename to docs/src/variance.mlr diff --git a/docs6/src/vimrc.md b/docs/src/vimrc.md similarity index 100% rename from docs6/src/vimrc.md rename to docs/src/vimrc.md diff --git a/docs6/src/vimrc.md.in b/docs/src/vimrc.md.in similarity index 100% rename from docs6/src/vimrc.md.in rename to docs/src/vimrc.md.in diff --git a/docs6/src/why.md b/docs/src/why.md similarity index 100% rename from docs6/src/why.md rename to docs/src/why.md diff --git a/docs6/src/why.md.in b/docs/src/why.md.in similarity index 100% rename from docs6/src/why.md.in rename to docs/src/why.md.in diff --git a/docs6/src/yellow.csv.gz b/docs/src/yellow.csv.gz similarity index 100% rename from docs6/src/yellow.csv.gz rename to docs/src/yellow.csv.gz diff --git a/docs6/src/παράδειγμα.csv b/docs/src/παράδειγμα.csv similarity index 100% rename from docs6/src/παράδειγμα.csv rename to docs/src/παράδειγμα.csv diff --git a/docs6/src/пример.csv b/docs/src/пример.csv similarity index 100% rename from docs6/src/пример.csv rename to docs/src/пример.csv diff --git a/docs/triangle.csv b/docs/triangle.csv deleted file mode 100644 index b8bc0650d..000000000 --- a/docs/triangle.csv +++ /dev/null @@ -1,4 +0,0 @@ -color,shape,flag,index,quantity,rate -yellow,triangle,true,11,43.6498,9.8870 -purple,triangle,false,51,81.2290,8.5910 -purple,triangle,false,65,80.1405,5.8240 diff --git a/docs/verb-example-ewma.sh b/docs/verb-example-ewma.sh deleted file mode 100644 index e990b52b4..000000000 --- a/docs/verb-example-ewma.sh +++ /dev/null @@ -1 +0,0 @@ -mlr --opprint step -a ewma -d 0.1 -f x data/small diff --git a/docs/why.rst b/docs/why.rst deleted file mode 100644 index 73feab2e7..000000000 --- a/docs/why.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. - PLEASE DO NOT EDIT DIRECTLY. EDIT THE .rst.in FILE PLEASE. - -Why? -================================================================ - -Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers. - -Who is Miller for? ----------------------------------------------------------------- - -For background, I'm a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. **Initially I wrote Miller mainly for myself:** I'm coder-friendly (being a coder); I'm Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I've encountered them all); I do all my work on Linux or OSX. - -But now there's this neat little tool **which seems to be useful for people in various disciplines**. I don't even know entirely *who*. I can click through Github starrers and read a bit about what they seem to do, but not everyone that uses Miller is even *on* Github (or stars things). I've gotten a lot of feature requests through Github -- but only from people who are Github users. Not everyone's a coder (it seems like a lot of Miller's Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on. - -So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn't? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even *is* in the first place? Should I think differently about who it's for? - -What was Miller created to do? ----------------------------------------------------------------- - -First: there are tools like ``xsv`` which handles CSV marvelously and ``jq`` which handles JSON marvelously, and so on -- but I over the years of my career in the software industry I've found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same *except* for format. So the number one thing about Miller is doing common things while supporting **multiple formats**: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream -- either in the same format as input, or in a different format. - -Second thing, a lot like the first: just as I didn't want to build something only for a single file format, I didn't want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to **solve as many problems simultaneously as possible**. - -Third: it had to be **streaming**. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it's maybe less important, but I'm unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time. - -Fourth: it had to be **fast**. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a *lot* lower -- it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn't write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C. - -Fifth thing: I wanted Miller to be **pipe-friendly and interoperate with other command-line tools**. Since the basic paradigm is ingest records, transform records, emit records -- where the input and output formats can be the same or different, and the transform can be complex, or just pass-through -- this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the "real" work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can. - -Sixth thing: Must have **comprehensive documentation and unit-test**. Since Miller handles a lot of formats and solves a lot of problems, there's a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself -- not only through web docs like the one you're reading but also through ``man mlr`` and ``mlr --help``, ``mlr sort --help``, etc. - -Seventh thing: **Must have a domain-specific language** (DSL) **but also must let you do common things without it**. All those little verbs Miller has to help you *avoid* having to write for-loops are great. I use them for keystroke-saving: ``mlr stats1 -a mean,stddev,min,max -f quantity``, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: ``mlr put '$distance = $rate * $time'`` or anything else you can think up. In Perl/AWK/etc. it's all DSL. In xsv et al. it's all verbs. In Miller I like having the combination. - -Eighth thing: It's an **awful lot of fun to write**. In my experience I didn't find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don't guarantee it's unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life. - -Tradeoffs ----------------------------------------------------------------- - -Miller is command-line-only by design. People who want a graphical user interface won't find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying. - -Another tradeoff: supporting lists of records -- each with only one depth -- keeps me supporting only what can be expressed in *all* of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn't handle. So Miller can't (and won't) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats. - -A third tradeoff is doing build-from-scratch in a low-level language. It'd be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an ``eval`` of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the `rows `_ tool -- if you find Miller useful, you should check out ``rows`` as well. - -A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed -- so you can just say y=x+1 with a minimum number of keystrokes -- vs. having it do a good job of telling you when you've made a typo. This is a common paradigm across *all* languages. Some like Ruby you don't declare anything and they're quick to code little stuff in but programs of even a few thousand lines (which isn't large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get ``y=x+1`` by default but you can have things like ``int y = x+1`` etc. so the typesafety is opt-in. See also :ref:`reference-dsl-type-checking` for more information on type-checking. - -Related tools ----------------------------------------------------------------- - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. It doesn't mention `rows `_ so here's a plug for that as well. - -Moving forward ----------------------------------------------------------------- - -I originally aimed Miller at people who already know what ``sed``/``awk``/``cut``/``sort``/``join`` are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who *don't* know what those things are; people who aren't primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next. diff --git a/docs/why.rst.in b/docs/why.rst.in deleted file mode 100644 index 576ff91f9..000000000 --- a/docs/why.rst.in +++ /dev/null @@ -1,53 +0,0 @@ -Why? -================================================================ - -Someone asked me the other day about design, tradeoffs, thought process, why I felt it necessary to build Miller, etc. Here are some answers. - -Who is Miller for? ----------------------------------------------------------------- - -For background, I'm a software engineer, with a heavy devops bent and a non-trivial amount of data-engineering in my career. **Initially I wrote Miller mainly for myself:** I'm coder-friendly (being a coder); I'm Github-friendly; most of my data are well-structured or easily structurable (TSV-formatted SQL-query output, CSV files, log files, JSON data structures); I care about interoperability between all the various formats Miller supports (I've encountered them all); I do all my work on Linux or OSX. - -But now there's this neat little tool **which seems to be useful for people in various disciplines**. I don't even know entirely *who*. I can click through Github starrers and read a bit about what they seem to do, but not everyone that uses Miller is even *on* Github (or stars things). I've gotten a lot of feature requests through Github -- but only from people who are Github users. Not everyone's a coder (it seems like a lot of Miller's Github starrers are devops folks like myself, or data-science-ish people, or biology/genomics folks.) A lot of people care 100% about CSV. And so on. - -So I wonder (please drop a note at https://github.com/johnkerl/miller/issues) does Miller do what you need? Do you use it for all sorts of things, or just one or two nice things? Are there things you wish it did but it doesn't? Is it almost there, or just nowhere near what you want? Are there not enough features or way too many? Are the docs too complicated; do you have a hard time finding out how to do what you want? Should I think differently about what this tool even *is* in the first place? Should I think differently about who it's for? - -What was Miller created to do? ----------------------------------------------------------------- - -First: there are tools like ``xsv`` which handles CSV marvelously and ``jq`` which handles JSON marvelously, and so on -- but I over the years of my career in the software industry I've found myself, and others, doing a lot of ad-hoc things which really were fundamentally the same *except* for format. So the number one thing about Miller is doing common things while supporting **multiple formats**: (a) ingest a list of records where a record is a list of key-value pairs (however represented in the input files); (b) transform that stream of records; (c) emit the transformed stream -- either in the same format as input, or in a different format. - -Second thing, a lot like the first: just as I didn't want to build something only for a single file format, I didn't want to build something only for one problem domain. In my work doing software engineering, devops, data engineering, etc. I saw a lot of commonalities and I wanted to **solve as many problems simultaneously as possible**. - -Third: it had to be **streaming**. As time goes by and we (some of us, sometimes) have machines with tens or hundreds of GB of RAM, it's maybe less important, but I'm unhappy with tools which ingest all data, then do stuff, then emit all data. One reason is to be able to handle files bigger than available RAM. Another reason is to be able to handle input which trickles in, e.g. you have some process emitting data now and then and you can pipe it to Miller and it will emit transformed records one at a time. - -Fourth: it had to be **fast**. This precludes all sorts of very nice things written in Ruby, for example. I love Ruby as a very expressive language, and I have several very useful little utility scripts written in Ruby. But a few years ago I ported over some of my old tried-and-true C programs and the lines-of-code count was a *lot* lower -- it was great! Until I ran them on multi-GB files and realized they took 60x as long to complete. So I couldn't write Miller in Ruby, or in languages like it. I was going to have to do something in a low-level language in order to make it performant. I did simple experiments in several languages, and nothing was as fast as C, so I used C. - -Fifth thing: I wanted Miller to be **pipe-friendly and interoperate with other command-line tools**. Since the basic paradigm is ingest records, transform records, emit records -- where the input and output formats can be the same or different, and the transform can be complex, or just pass-through -- this means you can use it to transform data, or re-format it, or both. So if you just want to do data-cleaning/prep/formatting and do all the "real" work in R, you can. If you just want a little glue script between other tools you can get that. And if you want to do non-trivial data-reduction in Miller you can. - -Sixth thing: Must have **comprehensive documentation and unit-test**. Since Miller handles a lot of formats and solves a lot of problems, there's a lot to test and a lot to keep working correctly as I add features or optimize. And I wanted it to be able to explain itself -- not only through web docs like the one you're reading but also through ``man mlr`` and ``mlr --help``, ``mlr sort --help``, etc. - -Seventh thing: **Must have a domain-specific language** (DSL) **but also must let you do common things without it**. All those little verbs Miller has to help you *avoid* having to write for-loops are great. I use them for keystroke-saving: ``mlr stats1 -a mean,stddev,min,max -f quantity``, for example, without you having to write for-loops or define accumulator variables. But you also have to be able to break out of that and write arbitrary code when you want to: ``mlr put '$distance = $rate * $time'`` or anything else you can think up. In Perl/AWK/etc. it's all DSL. In xsv et al. it's all verbs. In Miller I like having the combination. - -Eighth thing: It's an **awful lot of fun to write**. In my experience I didn't find any tools which do multi-format, streaming, efficient, multi-purpose, with DSL and non-DSL, so I wrote one. But I don't guarantee it's unique in the world. It fills a niche in the world (people use it) but it also fills a niche in my life. - -Tradeoffs ----------------------------------------------------------------- - -Miller is command-line-only by design. People who want a graphical user interface won't find it here. This is in part (a) accommodating my personal preferences, and in part (b) guided by my experience/belief that the command line is very expressive. Steep learning curve, yes. I consider that price worth paying. - -Another tradeoff: supporting lists of records -- each with only one depth -- keeps me supporting only what can be expressed in *all* of those formats. E.g. in JSON you can have lists of lists of lists which Miller just doesn't handle. So Miller can't (and won't) handle arbitrary JSON because it only handles tabular data which can be expressed in a variety of formats. - -A third tradeoff is doing build-from-scratch in a low-level language. It'd be quicker to write (but slower to run) if written in a high-level language. If Miller were written in Python, it would be implemented in significantly fewer lines of code than its current C implementation. The DSL would just be an ``eval`` of Python code. And it would run slower, but maybe not enough slower to be a problem for most folks. Later I found out about the `rows `_ tool -- if you find Miller useful, you should check out ``rows`` as well. - -A fourth tradeoff is in the DSL (more visibly so in 5.0.0 but already in pre-5.0.0): how much to make it dynamically typed -- so you can just say y=x+1 with a minimum number of keystrokes -- vs. having it do a good job of telling you when you've made a typo. This is a common paradigm across *all* languages. Some like Ruby you don't declare anything and they're quick to code little stuff in but programs of even a few thousand lines (which isn't large in the software world) become insanely unmanageable. Then Java at the other extreme which is very typesafe but you have to type in a lot of punctuation, angle brackets, datatypes, repetition, etc. just to be able to get anything done. And some in the middle like Go which are typesafe but with type inference which aim to do the best of both. In the Miller (5.0.0) DSL you get ``y=x+1`` by default but you can have things like ``int y = x+1`` etc. so the typesafety is opt-in. See also :ref:`reference-dsl-type-checking` for more information on type-checking. - -Related tools ----------------------------------------------------------------- - -Here's a comprehensive list: https://github.com/dbohdan/structured-text-tools. It doesn't mention `rows `_ so here's a plug for that as well. - -Moving forward ----------------------------------------------------------------- - -I originally aimed Miller at people who already know what ``sed``/``awk``/``cut``/``sort``/``join`` are and wanted some options. But as time goes by I realize that tools like this can be useful to folks who *don't* know what those things are; people who aren't primarily coders; people who are scientists, or data scientists. These days some journalists do data analysis. So moving forward in terms of docs, I am working on having more cookbook, follow-by-example stuff in addition to the existing language-reference kinds of stuff. And continuing to seek out input from people who use Miller on where to go next. diff --git a/docs6/README.md b/docs6/README.md deleted file mode 100644 index 197dae27e..000000000 --- a/docs6/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# Miller docs - -## Why use Mkdocs - -* Connects to https://miller.readthedocs.io so people can get their docmods onto the web instead of the self-hosted https://johnkerl.org/miller/doc. Thanks to @pabloab for the great advice! -* More standard look and feel -- lots of people use readthedocs for other things so this should feel familiar. -* We get a Search feature for free. -* Mkdocs vs Sphinx: these are similar tools, but I find that I more easily get better desktop+mobile formatting using Mkdocs. - -## Contributing - -* You need `pip install mkdocs` (or `pip3 install mkdocs`) as well as `pip install mkdocs-material`. -* The docs include lots of live code examples which will be invoked using `mlr` which must be somewhere in your `$PATH`. -* Clone https://github.com/johnkerl/miller and cd into `docs6/` within your clone. -* Overview of flow: - * `docs6/src` has `*.md.in` files containing markdown as well as directives for auto-generating code samples. - * A `genmds` script reads `docs6/src/*.md.in` and writes `docs6/src/*.md`. - * The `mkdocs build` tools reads `docs6/src/*.md` and writes HTML files in `docs6/site`. -* Quick-editing loop: - * In one terminal, cd to this directory and leave `mkdocs serve` running. - * In another terminal, cd to the `src` subdirectory of `docs6` and edit `*.md.in`. - * Run `genmds` to re-create all the `*.md` files, or `genmds foo.md.in` to just re-create the `foo.md.in` file you just edited. - * In your browser, visit http://127.0.0.1:8000 - * This doesn't write HTML in `docs6/site`; HTML is served up directly in the browser -- this is nice for previewing interactive edits -* For-publish editing loop: - * Leave one terminal open as a place you will run `mkdocs build` - * In one terminal, cd to the `src` subdirectory of `docs6` and edit `*.md.in`. - * Generate `src/*.md` from `src/*.md.in`, and then from that generate the `site/*/*.html`: - * Run `genmds` to re-create all the `*.md` files, or `genmds foo.md.in` to just re-create the `foo.md.in` file you just edited. - * In the first terminal, run `mkdocs build` which will populate the `site` directory. - * See also [./regen.sh](./regen.sh) which combines the `genmds` and `mkdocs build` steps. - * This does write HTML in `docs6/site`. - * In your browser, visit `file:///your/path/to/miller/docs6/site/index.html` - * Link-checking: - * `sudo pip3 install git+https://github.com/linkchecker/linkchecker.git` - * `cd site` and `linkchecker .` -* Submitting: - * Do the for-publish editing steps -- in particular, `docs6/src/*md.in` and `docs6/src/*md` are both checked in to source control. - * `git add` your modified files, `git commit`, `git push`, and submit a PR at https://github.com/johnkerl/miller. - -## Notes - -* CSS: - * I used the Mkdocs Readthedocs theme which I like a lot. I customized `docs6/src/extra.css` for Miller coloring/branding. -* Live code: - * I didn't find a way to include non-Python live-code examples within Mkdocs so I adapted the pre-Mkdocs Miller-doc strategy which is to have a generator script read a template file (here, `foo.md.in`), run the marked lines, and generate the output file (`foo.md`). This is `genmds`. - * Edit the `*.md.in` files, not `*.md` directly. - * Within the `*.md.in` files are lines like `GENMD_RUN_COMMAND`. These will be run, and their output included, by `genmds` which calls the `genmds` script for you. -* readthedocs: - * https://readthedocs.org/ - * https://readthedocs.org/projects/miller/ - * https://readthedocs.org/projects/miller/builds/ - * https://miller.readthedocs.io/en/latest/ diff --git a/docs6/src/_static/basic.css b/docs6/src/_static/basic.css deleted file mode 100644 index a19fd46c5..000000000 --- a/docs6/src/_static/basic.css +++ /dev/null @@ -1,861 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -/* CHANGE ME */ -div.body li { - margin:10px 0 0 0; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li div.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 450px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a.brackets:before, -span.brackets > a:before{ - content: "["; -} - -a.brackets:after, -span.brackets > a:after { - content: "]"; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -table.footnote td, table.footnote th { - border: 0 !important; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -dl.footnote > dt, -dl.citation > dt { - float: left; - margin-right: 0.5em; -} - -dl.footnote > dd, -dl.citation > dd { - margin-bottom: 0em; -} - -dl.footnote > dd:after, -dl.citation > dd:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dt:after { - content: ":"; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #0be54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0.5em; - content: ":"; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; - font-style: bold; /* CHANGED */ -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} diff --git a/docs6/src/_static/classic.css b/docs6/src/_static/classic.css deleted file mode 100644 index c18792d87..000000000 --- a/docs6/src/_static/classic.css +++ /dev/null @@ -1,271 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -html { - /* CSS hack for macOS's scrollbar (see #1125) */ - background-color: #FFFFFF; -} - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #808080; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - /* CHANGE ME */ - background-color: #c0c0c0; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - /* CHANGE ME */ - background-color: #808080; - line-height: 30px; - color: #000000; -} - -div.related a { - /* CHANGE ME */ - color: #000000; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #000000; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #000000; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #000000; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #000000; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - /* CHANGE ME */ - color: #404040; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #800000; - text-decoration: none; -} - -a:visited { - color: #800000; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - /* CHANGE ME */ - color: #800000; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: unset; - color: unset; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th, dl.field-list > dt { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} diff --git a/docs6/src/_static/mlr.jpg b/docs6/src/_static/mlr.jpg deleted file mode 100644 index f7b6f9756..000000000 Binary files a/docs6/src/_static/mlr.jpg and /dev/null differ diff --git a/docs6/src/_static/pygments.css b/docs6/src/_static/pygments.css deleted file mode 100644 index b45d40de9..000000000 --- a/docs6/src/_static/pygments.css +++ /dev/null @@ -1,76 +0,0 @@ -pre { line-height: 125%; margin: 0; } -td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; } -span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; } -td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; } -.highlight .hll { background-color: #c5b690; font-weight: bold; } /* CHANGED */ -/*.highlight { background: #eeffcc; }*/ -/* CHANGE ME */ -.highlight { background-color: #eae2cb; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #208050 } /* Literal.Number.Bin */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ diff --git a/docs6/src/_static/top.png b/docs6/src/_static/top.png deleted file mode 100644 index d63e1c950..000000000 Binary files a/docs6/src/_static/top.png and /dev/null differ diff --git a/docs6/src/commas.csv b/docs6/src/commas.csv deleted file mode 100644 index ad81fc39f..000000000 --- a/docs6/src/commas.csv +++ /dev/null @@ -1,3 +0,0 @@ -Name,Role -"Xiao, Lin",administrator -"Khavari, Darius",tester diff --git a/docs6/src/coverart/cover-cat.png b/docs6/src/coverart/cover-cat.png deleted file mode 100644 index 8b3121b7d..000000000 Binary files a/docs6/src/coverart/cover-cat.png and /dev/null differ diff --git a/docs6/src/coverart/cover-combined.png b/docs6/src/coverart/cover-combined.png deleted file mode 100644 index b35647ec5..000000000 Binary files a/docs6/src/coverart/cover-combined.png and /dev/null differ diff --git a/docs6/src/coverart/cover-filter-to-json.png b/docs6/src/coverart/cover-filter-to-json.png deleted file mode 100644 index f8a8d4a7d..000000000 Binary files a/docs6/src/coverart/cover-filter-to-json.png and /dev/null differ diff --git a/docs6/src/coverart/cover-sort-to-pprint.png b/docs6/src/coverart/cover-sort-to-pprint.png deleted file mode 100644 index 39f3d3d2d..000000000 Binary files a/docs6/src/coverart/cover-sort-to-pprint.png and /dev/null differ diff --git a/docs6/src/coverart/coverart.key b/docs6/src/coverart/coverart.key deleted file mode 100755 index 5f6feb9ef..000000000 Binary files a/docs6/src/coverart/coverart.key and /dev/null differ diff --git a/docs6/src/data/a.csv b/docs6/src/data/a.csv deleted file mode 100644 index 88700c714..000000000 --- a/docs6/src/data/a.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -1,2,3 -4,5,6 diff --git a/docs6/src/data/a.dkvp b/docs6/src/data/a.dkvp deleted file mode 100644 index c9e1a06ef..000000000 --- a/docs6/src/data/a.dkvp +++ /dev/null @@ -1,2 +0,0 @@ -a=1,b=2,c=3 -a=4,b=5,c=6 diff --git a/docs6/src/data/b.csv b/docs6/src/data/b.csv deleted file mode 100644 index 45f82f9f9..000000000 --- a/docs6/src/data/b.csv +++ /dev/null @@ -1,2 +0,0 @@ -a,b,c -7,8,9 diff --git a/docs6/src/data/b.dkvp b/docs6/src/data/b.dkvp deleted file mode 100644 index d9be5c2ce..000000000 --- a/docs6/src/data/b.dkvp +++ /dev/null @@ -1 +0,0 @@ -a=7,b=8,c=9 diff --git a/docs6/src/data/begin-end-example-7b.sh b/docs6/src/data/begin-end-example-7b.sh deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs6/src/data/budget.csv b/docs6/src/data/budget.csv deleted file mode 100644 index 1791a8657..000000000 --- a/docs6/src/data/budget.csv +++ /dev/null @@ -1,5 +0,0 @@ -# Asana -- here are the budget figures you asked for! -type,quantity -purple,456.78 -green,678.12 -orange,123.45 diff --git a/docs6/src/data/bulk-rename-for-loop.mlr b/docs6/src/data/bulk-rename-for-loop.mlr deleted file mode 100644 index ec648319c..000000000 --- a/docs6/src/data/bulk-rename-for-loop.mlr +++ /dev/null @@ -1,5 +0,0 @@ -map newrec = {}; -for (oldk, v in $*) { - newrec[gsub(oldk, " ", "_")] = v; -} -$* = newrec diff --git a/docs6/src/data/clean-whitespace.csv b/docs6/src/data/clean-whitespace.csv deleted file mode 100644 index 655f65a1b..000000000 --- a/docs6/src/data/clean-whitespace.csv +++ /dev/null @@ -1,4 +0,0 @@ - Name , Preference - Ann Simons, blue -Bob Wang , red - Carol Vee, yellow diff --git a/docs6/src/data/color-codes.csv b/docs6/src/data/color-codes.csv deleted file mode 100644 index b23e146e9..000000000 --- a/docs6/src/data/color-codes.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,code -3,0000ff -2,00ff00 -4,ff0000 diff --git a/docs6/src/data/color-names.csv b/docs6/src/data/color-names.csv deleted file mode 100644 index 4677150b6..000000000 --- a/docs6/src/data/color-names.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,color -4,red -2,green diff --git a/docs6/src/data/colours.csv b/docs6/src/data/colours.csv deleted file mode 100644 index f6dbe24aa..000000000 --- a/docs6/src/data/colours.csv +++ /dev/null @@ -1,3 +0,0 @@ -KEY;DE;EN;ES;FI;FR;IT;NL;PL;RO;TR -masterdata_colourcode_1;Weiß;White;Blanco;Valkoinen;Blanc;Bianco;Wit;Biały;Alb;Beyaz -masterdata_colourcode_2;Schwarz;Black;Negro;Musta;Noir;Nero;Zwart;Czarny;Negru;Siyah diff --git a/docs6/src/data/current_counters.csv b/docs6/src/data/current_counters.csv deleted file mode 100644 index 3193153cd..000000000 --- a/docs6/src/data/current_counters.csv +++ /dev/null @@ -1,5 +0,0 @@ -color,count -red,3467 -orange,670 -yellow,27 -blue,6944 diff --git a/docs6/src/data/currtemp.csv b/docs6/src/data/currtemp.csv deleted file mode 100644 index 7b335ce9e..000000000 --- a/docs6/src/data/currtemp.csv +++ /dev/null @@ -1,5 +0,0 @@ -color,current_count -red,3467 -orange,670 -yellow,27 -blue,6944 diff --git a/docs6/src/data/dollar-sign.txt b/docs6/src/data/dollar-sign.txt deleted file mode 100644 index dbd5fddf7..000000000 --- a/docs6/src/data/dollar-sign.txt +++ /dev/null @@ -1,32 +0,0 @@ -$ cat sample.csv -EventOccurred,EventType,Description,Status,PaymentType,NameonAccount,TransactionNumber,Amount -10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,John,1,$230.36 -10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Fred,2,$32.25 -10/1/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Bob,3,$39.02 -10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Alice,4,$57.54 -10/1/2015,Charged Back,Reason: Authorization Revoked By Customer,Disputed,Checking,Jungle,5,$230.36 -10/1/2015,Charged Back,Reason: Payment Stopped,Disputed,Checking,Joe,6,$281.96 -10/2/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Joseph,7,$188.19 -10/2/2015,Charged Back,Reason: Customer Advises Not Authorized,Disputed,Checking,Joseph,8,$188.19 -10/2/2015,Charged Back,Reason: Payment Stopped,Disputed,Checking,Anthony,9,$250.00 - -$ mlr --icsv --opprint cat sample.csv -EventOccurred EventType Description Status PaymentType NameonAccount TransactionNumber Amount -10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking John 1 $230.36 -10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Fred 2 $32.25 -10/1/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Bob 3 $39.02 -10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Alice 4 $57.54 -10/1/2015 Charged Back Reason: Authorization Revoked By Customer Disputed Checking Jungle 5 $230.36 -10/1/2015 Charged Back Reason: Payment Stopped Disputed Checking Joe 6 $281.96 -10/2/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Joseph 7 $188.19 -10/2/2015 Charged Back Reason: Customer Advises Not Authorized Disputed Checking Joseph 8 $188.19 -10/2/2015 Charged Back Reason: Payment Stopped Disputed Checking Anthony 9 $250.00 - -$ mlr --csv put '$Amount = sub(string($Amount), "\$", "")' then stats1 -a sum -f Amount sample.csv -Amount_sum -1497.870000 - -$ mlr --csv --ofmt '%.2lf' put '$Amount = sub(string($Amount), "\$", "")' then stats1 -a sum -f Amount sample.csv -Amount_sum -1497.87 - diff --git a/docs6/src/data/english-words.txt b/docs6/src/data/english-words.txt deleted file mode 100644 index 9e382cd81..000000000 --- a/docs6/src/data/english-words.txt +++ /dev/null @@ -1,210687 +0,0 @@ -a -aa -aal -aalii -aam -aardvark -aardwolf -aba -abac -abaca -abacate -abacay -abacinate -abacination -abaciscus -abacist -aback -abactinal -abactinally -abaction -abactor -abaculus -abacus -abaff -abaft -abaisance -abaiser -abaissed -abalienate -abalienation -abalone -abampere -abandon -abandonable -abandoned -abandonedly -abandonee -abandoner -abandonment -abaptiston -abarthrosis -abarticular -abarticulation -abas -abase -abased -abasedly -abasedness -abasement -abaser -abash -abashed -abashedly -abashedness -abashless -abashlessly -abashment -abasia -abasic -abask -abastardize -abatable -abate -abatement -abater -abatis -abatised -abaton -abator -abattoir -abature -abave -abaxial -abaxile -abaze -abb -abbacomes -abbacy -abbas -abbasi -abbassi -abbatial -abbatical -abbess -abbey -abbeystede -abbot -abbotcy -abbotnullius -abbotship -abbreviate -abbreviately -abbreviation -abbreviator -abbreviatory -abbreviature -abcoulomb -abdal -abdat -abdest -abdicable -abdicant -abdicate -abdication -abdicative -abdicator -abditive -abditory -abdomen -abdominal -abdominalian -abdominally -abdominoanterior -abdominocardiac -abdominocentesis -abdominocystic -abdominogenital -abdominohysterectomy -abdominohysterotomy -abdominoposterior -abdominoscope -abdominoscopy -abdominothoracic -abdominous -abdominovaginal -abdominovesical -abduce -abducens -abducent -abduct -abduction -abductor -abeam -abear -abearance -abecedarian -abecedarium -abecedary -abed -abeigh -abele -abelite -abelmosk -abeltree -abenteric -abepithymia -aberdevine -aberrance -aberrancy -aberrant -aberrate -aberration -aberrational -aberrator -aberrometer -aberroscope -aberuncator -abet -abetment -abettal -abettor -abevacuation -abey -abeyance -abeyancy -abeyant -abfarad -abhenry -abhiseka -abhominable -abhor -abhorrence -abhorrency -abhorrent -abhorrently -abhorrer -abhorrible -abhorring -abidal -abidance -abide -abider -abidi -abiding -abidingly -abidingness -abietate -abietene -abietic -abietin -abietineous -abietinic -abigail -abigailship -abigeat -abigeus -abilao -ability -abilla -abilo -abintestate -abiogenesis -abiogenesist -abiogenetic -abiogenetical -abiogenetically -abiogenist -abiogenous -abiogeny -abiological -abiologically -abiology -abiosis -abiotic -abiotrophic -abiotrophy -abir -abirritant -abirritate -abirritation -abirritative -abiston -abiuret -abject -abjectedness -abjection -abjective -abjectly -abjectness -abjoint -abjudge -abjudicate -abjudication -abjunction -abjunctive -abjuration -abjuratory -abjure -abjurement -abjurer -abkar -abkari -ablach -ablactate -ablactation -ablare -ablastemic -ablastous -ablate -ablation -ablatitious -ablatival -ablative -ablator -ablaut -ablaze -able -ableeze -ablegate -ableness -ablepharia -ablepharon -ablepharous -ablepsia -ableptical -ableptically -abler -ablest -ablewhackets -ablins -abloom -ablow -ablude -abluent -ablush -ablution -ablutionary -abluvion -ably -abmho -abnegate -abnegation -abnegative -abnegator -abnerval -abnet -abneural -abnormal -abnormalism -abnormalist -abnormality -abnormalize -abnormally -abnormalness -abnormity -abnormous -abnumerable -aboard -abode -abodement -abody -abohm -aboil -abolish -abolisher -abolishment -abolition -abolitionary -abolitionism -abolitionist -abolitionize -abolla -aboma -abomasum -abomasus -abominable -abominableness -abominably -abominate -abomination -abominator -abomine -aboon -aborad -aboral -aborally -abord -aboriginal -aboriginality -aboriginally -aboriginary -aborigine -abort -aborted -aborticide -abortient -abortifacient -abortin -abortion -abortional -abortionist -abortive -abortively -abortiveness -abortus -abouchement -abound -abounder -abounding -aboundingly -about -abouts -above -aboveboard -abovedeck -aboveground -aboveproof -abovestairs -abox -abracadabra -abrachia -abradant -abrade -abrader -abraid -abranchial -abranchialism -abranchian -abranchiate -abranchious -abrasax -abrase -abrash -abrasiometer -abrasion -abrasive -abrastol -abraum -abraxas -abreact -abreaction -abreast -abrenounce -abret -abrico -abridge -abridgeable -abridged -abridgedly -abridger -abridgment -abrim -abrin -abristle -abroach -abroad -abrocome -abrogable -abrogate -abrogation -abrogative -abrogator -abrook -abrotanum -abrotine -abrupt -abruptedly -abruption -abruptly -abruptness -absampere -absarokite -abscess -abscessed -abscession -abscessroot -abscind -abscise -abscision -absciss -abscissa -abscissae -abscisse -abscission -absconce -abscond -absconded -abscondedly -abscondence -absconder -absconsa -abscoulomb -absence -absent -absentation -absentee -absenteeism -absenteeship -absenter -absently -absentment -absentmindedly -absentness -absfarad -abshenry -absinthe -absinthial -absinthian -absinthiate -absinthic -absinthin -absinthine -absinthism -absinthismic -absinthium -absinthol -absit -absmho -absohm -absolute -absolutely -absoluteness -absolution -absolutism -absolutist -absolutistic -absolutistically -absolutive -absolutization -absolutize -absolutory -absolvable -absolvatory -absolve -absolvent -absolver -absolvitor -absolvitory -absonant -absonous -absorb -absorbability -absorbable -absorbed -absorbedly -absorbedness -absorbefacient -absorbency -absorbent -absorber -absorbing -absorbingly -absorbition -absorpt -absorptance -absorptiometer -absorptiometric -absorption -absorptive -absorptively -absorptiveness -absorptivity -absquatulate -abstain -abstainer -abstainment -abstemious -abstemiously -abstemiousness -abstention -abstentionist -abstentious -absterge -abstergent -abstersion -abstersive -abstersiveness -abstinence -abstinency -abstinent -abstinential -abstinently -abstract -abstracted -abstractedly -abstractedness -abstracter -abstraction -abstractional -abstractionism -abstractionist -abstractitious -abstractive -abstractively -abstractiveness -abstractly -abstractness -abstractor -abstrahent -abstricted -abstriction -abstruse -abstrusely -abstruseness -abstrusion -abstrusity -absume -absumption -absurd -absurdity -absurdly -absurdness -absvolt -abterminal -abthain -abthainrie -abthainry -abthanage -abu -abucco -abulia -abulic -abulomania -abuna -abundance -abundancy -abundant -abundantly -abura -aburabozu -aburban -aburst -aburton -abusable -abuse -abusedly -abusee -abuseful -abusefully -abusefulness -abuser -abusion -abusious -abusive -abusively -abusiveness -abut -abutment -abuttal -abutter -abutting -abuzz -abvolt -abwab -aby -abysm -abysmal -abysmally -abyss -abyssal -abyssobenthonic -abyssolith -abyssopelagic -acacatechin -acacatechol -acacetin -acaciin -acacin -academe -academial -academian -academic -academical -academically -academicals -academician -academicism -academism -academist -academite -academization -academize -academy -acadialite -acajou -acaleph -acalephan -acalephoid -acalycal -acalycine -acalycinous -acalyculate -acalyptrate -acampsia -acana -acanaceous -acanonical -acanth -acantha -acanthaceous -acanthad -acanthial -acanthin -acanthine -acanthion -acanthite -acanthocarpous -acanthocephalan -acanthocephalous -acanthocladous -acanthodean -acanthodian -acanthoid -acanthological -acanthology -acantholysis -acanthoma -acanthon -acanthophorous -acanthopod -acanthopodous -acanthopomatous -acanthopore -acanthopteran -acanthopterous -acanthopterygian -acanthosis -acanthous -acanthus -acapnia -acapnial -acapsular -acapu -acapulco -acara -acardia -acardiac -acari -acarian -acariasis -acaricidal -acaricide -acarid -acaridean -acaridomatium -acariform -acarine -acarinosis -acarocecidium -acarodermatitis -acaroid -acarol -acarologist -acarology -acarophilous -acarophobia -acarotoxic -acarpelous -acarpous -acatalectic -acatalepsia -acatalepsy -acataleptic -acatallactic -acatamathesia -acataphasia -acataposis -acatastasia -acatastatic -acate -acategorical -acatery -acatharsia -acatharsy -acatholic -acaudal -acaudate -acaulescent -acauline -acaulose -acaulous -acca -accede -accedence -acceder -accelerable -accelerando -accelerant -accelerate -accelerated -acceleratedly -acceleration -accelerative -accelerator -acceleratory -accelerograph -accelerometer -accend -accendibility -accendible -accension -accensor -accent -accentless -accentor -accentuable -accentual -accentuality -accentually -accentuate -accentuation -accentuator -accentus -accept -acceptability -acceptable -acceptableness -acceptably -acceptance -acceptancy -acceptant -acceptation -accepted -acceptedly -accepter -acceptilate -acceptilation -acception -acceptive -acceptor -acceptress -accerse -accersition -accersitor -access -accessarily -accessariness -accessary -accessaryship -accessibility -accessible -accessibly -accession -accessional -accessioner -accessive -accessively -accessless -accessorial -accessorily -accessoriness -accessorius -accessory -accidence -accidency -accident -accidental -accidentalism -accidentalist -accidentality -accidentally -accidentalness -accidented -accidential -accidentiality -accidently -accidia -accidie -accinge -accipient -accipitral -accipitrary -accipitrine -accismus -accite -acclaim -acclaimable -acclaimer -acclamation -acclamator -acclamatory -acclimatable -acclimatation -acclimate -acclimatement -acclimation -acclimatizable -acclimatization -acclimatize -acclimatizer -acclimature -acclinal -acclinate -acclivitous -acclivity -acclivous -accloy -accoast -accoil -accolade -accoladed -accolated -accolent -accolle -accombination -accommodable -accommodableness -accommodate -accommodately -accommodateness -accommodating -accommodatingly -accommodation -accommodational -accommodative -accommodativeness -accommodator -accompanier -accompaniment -accompanimental -accompanist -accompany -accompanyist -accompletive -accomplice -accompliceship -accomplicity -accomplish -accomplishable -accomplished -accomplisher -accomplishment -accomplisht -accompt -accord -accordable -accordance -accordancy -accordant -accordantly -accorder -according -accordingly -accordion -accordionist -accorporate -accorporation -accost -accostable -accosted -accouche -accouchement -accoucheur -accoucheuse -account -accountability -accountable -accountableness -accountably -accountancy -accountant -accountantship -accounting -accountment -accouple -accouplement -accouter -accouterment -accoy -accredit -accreditate -accreditation -accredited -accreditment -accrementitial -accrementition -accresce -accrescence -accrescent -accretal -accrete -accretion -accretionary -accretive -accroach -accroides -accrual -accrue -accruement -accruer -accubation -accubitum -accubitus -accultural -acculturate -acculturation -acculturize -accumbency -accumbent -accumber -accumulable -accumulate -accumulation -accumulativ -accumulative -accumulatively -accumulativeness -accumulator -accuracy -accurate -accurately -accurateness -accurse -accursed -accursedly -accursedness -accusable -accusably -accusal -accusant -accusation -accusatival -accusative -accusatively -accusatorial -accusatorially -accusatory -accusatrix -accuse -accused -accuser -accusingly -accusive -accustom -accustomed -accustomedly -accustomedness -ace -aceacenaphthene -aceanthrene -aceanthrenequinone -acecaffine -aceconitic -acedia -acediamine -acediast -acedy -acenaphthene -acenaphthenyl -acenaphthylene -acentric -acentrous -aceologic -aceology -acephal -acephalan -acephalia -acephaline -acephalism -acephalist -acephalocyst -acephalous -acephalus -aceraceous -acerate -acerathere -aceratosis -acerb -acerbate -acerbic -acerbity -acerdol -acerin -acerose -acerous -acerra -acertannin -acervate -acervately -acervation -acervative -acervose -acervuline -acervulus -acescence -acescency -acescent -aceship -acesodyne -acetabular -acetabuliferous -acetabuliform -acetabulous -acetabulum -acetacetic -acetal -acetaldehydase -acetaldehyde -acetaldehydrase -acetalization -acetalize -acetamide -acetamidin -acetamidine -acetamido -acetaminol -acetanilid -acetanilide -acetanion -acetaniside -acetanisidide -acetannin -acetarious -acetarsone -acetate -acetated -acetation -acetbromamide -acetenyl -acethydrazide -acetic -acetification -acetifier -acetify -acetimeter -acetimetry -acetin -acetize -acetmethylanilide -acetnaphthalide -acetoacetanilide -acetoacetate -acetoacetic -acetoamidophenol -acetoarsenite -acetobenzoic -acetobromanilide -acetochloral -acetocinnamene -acetoin -acetol -acetolysis -acetolytic -acetometer -acetometrical -acetometrically -acetometry -acetomorphine -acetonaphthone -acetonate -acetonation -acetone -acetonemia -acetonemic -acetonic -acetonitrile -acetonization -acetonize -acetonuria -acetonurometer -acetonyl -acetonylacetone -acetonylidene -acetophenetide -acetophenin -acetophenine -acetophenone -acetopiperone -acetopyrin -acetosalicylic -acetose -acetosity -acetosoluble -acetothienone -acetotoluide -acetotoluidine -acetous -acetoveratrone -acetoxime -acetoxyl -acetoxyphthalide -acetphenetid -acetphenetidin -acetract -acettoluide -acetum -aceturic -acetyl -acetylacetonates -acetylacetone -acetylamine -acetylate -acetylation -acetylator -acetylbenzene -acetylbenzoate -acetylbenzoic -acetylbiuret -acetylcarbazole -acetylcellulose -acetylcholine -acetylcyanide -acetylenation -acetylene -acetylenediurein -acetylenic -acetylenyl -acetylfluoride -acetylglycine -acetylhydrazine -acetylic -acetylide -acetyliodide -acetylizable -acetylization -acetylize -acetylizer -acetylmethylcarbinol -acetylperoxide -acetylphenol -acetylphenylhydrazine -acetylrosaniline -acetylsalicylate -acetylsalol -acetyltannin -acetylthymol -acetyltropeine -acetylurea -ach -achaetous -achage -achalasia -achar -achate -ache -acheilia -acheilous -acheiria -acheirous -acheirus -achene -achenial -achenium -achenocarp -achenodium -acher -achete -acheweed -achievable -achieve -achievement -achiever -achigan -achilary -achill -achilleine -achillobursitis -achillodynia -achime -aching -achingly -achira -achlamydate -achlamydeous -achlorhydria -achlorophyllous -achloropsia -acholia -acholic -acholous -acholuria -acholuric -achondrite -achondritic -achondroplasia -achondroplastic -achor -achordal -achordate -achree -achroacyte -achrodextrin -achrodextrinase -achroglobin -achroiocythaemia -achroiocythemia -achroite -achroma -achromacyte -achromasia -achromat -achromate -achromatic -achromatically -achromaticity -achromatin -achromatinic -achromatism -achromatizable -achromatization -achromatize -achromatocyte -achromatolysis -achromatope -achromatophile -achromatopia -achromatopsia -achromatopsy -achromatosis -achromatous -achromaturia -achromia -achromic -achromoderma -achromophilous -achromotrichia -achromous -achronical -achroodextrin -achroodextrinase -achroous -achropsia -achtehalber -achtel -achtelthaler -achy -achylia -achylous -achymia -achymous -acichloride -acicula -acicular -acicularly -aciculate -aciculated -aciculum -acid -acidemia -acider -acidic -acidiferous -acidifiable -acidifiant -acidific -acidification -acidifier -acidify -acidimeter -acidimetric -acidimetrical -acidimetrically -acidimetry -acidite -acidity -acidize -acidly -acidness -acidoid -acidology -acidometer -acidometry -acidophile -acidophilic -acidophilous -acidoproteolytic -acidosis -acidosteophyte -acidotic -acidproof -acidulate -acidulent -acidulous -aciduric -acidyl -acier -acierage -acierate -acieration -aciform -aciliate -aciliated -acinaceous -acinaces -acinacifolious -acinaciform -acinar -acinarious -acinary -acinetan -acinetarian -acinetic -acinetiform -acinetinan -acinic -aciniform -acinose -acinotubular -acinous -acinus -acipenserid -acipenserine -acipenseroid -aciurgy -acker -ackey -ackman -acknow -acknowledge -acknowledgeable -acknowledged -acknowledgedly -acknowledger -aclastic -acle -acleidian -acleistous -aclidian -aclinal -aclinic -acloud -aclys -acmatic -acme -acmesthesia -acmic -acmite -acne -acneform -acneiform -acnemia -acnodal -acnode -acocantherin -acock -acockbill -acocotl -acoelomate -acoelomatous -acoelomous -acoelous -acoin -acoine -acold -acologic -acology -acolous -acoluthic -acolyte -acolythate -acoma -acomia -acomous -aconative -acondylose -acondylous -acone -aconic -aconin -aconine -aconital -aconite -aconitia -aconitic -aconitin -aconitine -acontium -aconuresis -acopic -acopon -acopyrin -acopyrine -acor -acorea -acoria -acorn -acorned -acosmic -acosmism -acosmist -acosmistic -acotyledon -acotyledonous -acouasm -acouchi -acouchy -acoumeter -acoumetry -acouometer -acouophonia -acoupa -acousmata -acousmatic -acoustic -acoustical -acoustically -acoustician -acousticolateral -acoustics -acquaint -acquaintance -acquaintanceship -acquaintancy -acquaintant -acquainted -acquaintedness -acquest -acquiesce -acquiescement -acquiescence -acquiescency -acquiescent -acquiescently -acquiescer -acquiescingly -acquirability -acquirable -acquire -acquired -acquirement -acquirenda -acquirer -acquisible -acquisite -acquisited -acquisition -acquisitive -acquisitively -acquisitiveness -acquisitor -acquisitum -acquist -acquit -acquitment -acquittal -acquittance -acquitter -acracy -acraein -acraldehyde -acranial -acraniate -acrasia -acraspedote -acratia -acraturesis -acrawl -acraze -acre -acreable -acreage -acreak -acream -acred -acreman -acrestaff -acrid -acridan -acridian -acridic -acridine -acridinic -acridinium -acridity -acridly -acridness -acridone -acridonium -acridophagus -acridyl -acriflavin -acriflavine -acrimonious -acrimoniously -acrimoniousness -acrimony -acrindoline -acrinyl -acrisia -acritan -acrite -acritical -acritol -acroaesthesia -acroama -acroamatic -acroamatics -acroanesthesia -acroarthritis -acroasphyxia -acroataxia -acroatic -acrobacy -acrobat -acrobatholithic -acrobatic -acrobatical -acrobatically -acrobatics -acrobatism -acroblast -acrobryous -acrobystitis -acrocarpous -acrocephalia -acrocephalic -acrocephalous -acrocephaly -acrochordon -acroconidium -acrocontracture -acrocoracoid -acrocyanosis -acrocyst -acrodactylum -acrodermatitis -acrodont -acrodontism -acrodrome -acrodromous -acrodynia -acroesthesia -acrogamous -acrogamy -acrogen -acrogenic -acrogenous -acrogenously -acrography -acrogynae -acrogynous -acrolein -acrolith -acrolithan -acrolithic -acrologic -acrologically -acrologism -acrologue -acrology -acromania -acromastitis -acromegalia -acromegalic -acromegaly -acromelalgia -acrometer -acromial -acromicria -acromioclavicular -acromiocoracoid -acromiodeltoid -acromiohumeral -acromiohyoid -acromion -acromioscapular -acromiosternal -acromiothoracic -acromonogrammatic -acromphalus -acromyodian -acromyodic -acromyodous -acromyotonia -acromyotonus -acron -acronarcotic -acroneurosis -acronical -acronically -acronyc -acronych -acronyctous -acronym -acronymic -acronymize -acronymous -acronyx -acrook -acroparalysis -acroparesthesia -acropathology -acropathy -acropetal -acropetally -acrophobia -acrophonetic -acrophonic -acrophony -acropodium -acropoleis -acropolis -acropolitan -acrorhagus -acrorrheuma -acrosarc -acrosarcum -acroscleriasis -acroscleroderma -acroscopic -acrose -acrosome -acrosphacelus -acrospire -acrospore -acrosporous -across -acrostic -acrostical -acrostically -acrostichal -acrostichic -acrostichoid -acrosticism -acrostolion -acrostolium -acrotarsial -acrotarsium -acroteleutic -acroterial -acroteric -acroterium -acrotic -acrotism -acrotomous -acrotrophic -acrotrophoneurosis -acryl -acrylaldehyde -acrylate -acrylic -acrylonitrile -acrylyl -act -acta -actability -actable -actification -actifier -actify -actin -actinal -actinally -actinautographic -actinautography -actine -actinenchyma -acting -actinian -actiniarian -actinic -actinically -actiniferous -actiniform -actinine -actiniochrome -actiniohematin -actinism -actinium -actinobacillosis -actinoblast -actinobranch -actinobranchia -actinocarp -actinocarpic -actinocarpous -actinochemistry -actinocrinid -actinocrinite -actinocutitis -actinodermatitis -actinodielectric -actinodrome -actinodromous -actinoelectric -actinoelectrically -actinoelectricity -actinogonidiate -actinogram -actinograph -actinography -actinoid -actinolite -actinolitic -actinologous -actinologue -actinology -actinomere -actinomeric -actinometer -actinometric -actinometrical -actinometry -actinomorphic -actinomorphous -actinomorphy -actinomycete -actinomycetous -actinomycin -actinomycoma -actinomycosis -actinomycotic -actinon -actinoneuritis -actinophone -actinophonic -actinophore -actinophorous -actinophryan -actinopraxis -actinopteran -actinopterous -actinopterygian -actinopterygious -actinoscopy -actinosoma -actinosome -actinost -actinostereoscopy -actinostomal -actinostome -actinotherapeutic -actinotherapeutics -actinotherapy -actinotoxemia -actinotrichium -actinotrocha -actinouranium -actinozoal -actinozoan -actinozoon -actinula -action -actionable -actionably -actional -actionary -actioner -actionize -actionless -activable -activate -activation -activator -active -actively -activeness -activin -activism -activist -activital -activity -activize -actless -actomyosin -acton -actor -actorship -actress -actu -actual -actualism -actualist -actualistic -actuality -actualization -actualize -actually -actualness -actuarial -actuarially -actuarian -actuary -actuaryship -actuation -actuator -acture -acturience -actutate -acuaesthesia -acuate -acuation -acuclosure -acuductor -acuesthesia -acuity -aculea -aculeate -aculeated -aculeiform -aculeolate -aculeolus -aculeus -acumen -acuminate -acumination -acuminose -acuminous -acuminulate -acupress -acupressure -acupunctuate -acupunctuation -acupuncturation -acupuncturator -acupuncture -acurative -acushla -acutangular -acutate -acute -acutely -acutenaculum -acuteness -acutiator -acutifoliate -acutilingual -acutilobate -acutiplantar -acutish -acutograve -acutonodose -acutorsion -acyanoblepsia -acyanopsia -acyclic -acyesis -acyetic -acyl -acylamido -acylamidobenzene -acylamino -acylate -acylation -acylogen -acyloin -acyloxy -acyloxymethane -acyrological -acyrology -acystia -ad -adactyl -adactylia -adactylism -adactylous -adad -adage -adagial -adagietto -adagio -adamant -adamantean -adamantine -adamantinoma -adamantoblast -adamantoblastoma -adamantoid -adamantoma -adamas -adambulacral -adamellite -adamine -adamite -adamsite -adance -adangle -adapid -adapt -adaptability -adaptable -adaptation -adaptational -adaptationally -adaptative -adaptedness -adapter -adaption -adaptional -adaptionism -adaptitude -adaptive -adaptively -adaptiveness -adaptometer -adaptor -adaptorial -adarme -adat -adati -adatom -adaunt -adaw -adawe -adawlut -adawn -adaxial -aday -adays -adazzle -adcraft -add -adda -addability -addable -addax -addebted -added -addedly -addend -addenda -addendum -adder -adderbolt -adderfish -adderspit -adderwort -addibility -addible -addicent -addict -addicted -addictedness -addiction -addiment -additament -additamentary -addition -additional -additionally -additionary -additionist -addititious -additive -additively -additivity -additory -addle -addlebrain -addlebrained -addlehead -addleheaded -addleheadedly -addleheadedness -addlement -addleness -addlepate -addlepated -addlepatedness -addleplot -addlings -addlins -addorsed -address -addressee -addresser -addressful -addressor -addrest -adduce -adducent -adducer -adducible -adduct -adduction -adductive -adductor -ade -adead -adeem -adeep -adelarthrosomatous -adeling -adelite -adelocerous -adelocodonic -adelomorphic -adelomorphous -adelopod -adelphogamy -adelpholite -adelphophagy -ademonist -adempted -ademption -adenalgia -adenalgy -adenase -adenasthenia -adendric -adendritic -adenectomy -adenectopia -adenectopic -adenemphractic -adenemphraxis -adenia -adeniform -adenine -adenitis -adenization -adenoacanthoma -adenoblast -adenocancroid -adenocarcinoma -adenocarcinomatous -adenocele -adenocellulitis -adenochondroma -adenochondrosarcoma -adenochrome -adenocyst -adenocystoma -adenocystomatous -adenodermia -adenodiastasis -adenodynia -adenofibroma -adenofibrosis -adenogenesis -adenogenous -adenographer -adenographic -adenographical -adenography -adenohypersthenia -adenoid -adenoidal -adenoidism -adenoliomyofibroma -adenolipoma -adenolipomatosis -adenologaditis -adenological -adenology -adenolymphocele -adenolymphoma -adenoma -adenomalacia -adenomatome -adenomatous -adenomeningeal -adenometritis -adenomycosis -adenomyofibroma -adenomyoma -adenomyxoma -adenomyxosarcoma -adenoncus -adenoneural -adenoneure -adenopathy -adenopharyngeal -adenopharyngitis -adenophlegmon -adenophore -adenophorous -adenophthalmia -adenophyllous -adenophyma -adenopodous -adenosarcoma -adenosclerosis -adenose -adenosine -adenosis -adenostemonous -adenotome -adenotomic -adenotomy -adenotyphoid -adenotyphus -adenyl -adenylic -adephagan -adephagia -adephagous -adept -adeptness -adeptship -adequacy -adequate -adequately -adequateness -adequation -adequative -adermia -adermin -adet -adevism -adfected -adfix -adfluxion -adglutinate -adhaka -adhamant -adharma -adhere -adherence -adherency -adherent -adherently -adherer -adherescence -adherescent -adhesion -adhesional -adhesive -adhesively -adhesivemeter -adhesiveness -adhibit -adhibition -adiabatic -adiabatically -adiabolist -adiactinic -adiadochokinesis -adiagnostic -adiantiform -adiaphon -adiaphonon -adiaphoral -adiaphoresis -adiaphoretic -adiaphorism -adiaphorist -adiaphoristic -adiaphorite -adiaphoron -adiaphorous -adiate -adiathermal -adiathermancy -adiathermanous -adiathermic -adiathetic -adiation -adicity -adieu -adieux -adigranth -adinidan -adinole -adion -adipate -adipescent -adipic -adipinic -adipocele -adipocellulose -adipocere -adipoceriform -adipocerous -adipocyte -adipofibroma -adipogenic -adipogenous -adipoid -adipolysis -adipolytic -adipoma -adipomatous -adipometer -adipopexia -adipopexis -adipose -adiposeness -adiposis -adiposity -adiposogenital -adiposuria -adipous -adipsia -adipsic -adipsous -adipsy -adipyl -adit -adital -aditus -adjacency -adjacent -adjacently -adjag -adject -adjection -adjectional -adjectival -adjectivally -adjective -adjectively -adjectivism -adjectivitis -adjiger -adjoin -adjoined -adjoinedly -adjoining -adjoint -adjourn -adjournal -adjournment -adjudge -adjudgeable -adjudger -adjudgment -adjudicate -adjudication -adjudicative -adjudicator -adjudicature -adjunct -adjunction -adjunctive -adjunctively -adjunctly -adjuration -adjuratory -adjure -adjurer -adjust -adjustable -adjustably -adjustage -adjustation -adjuster -adjustive -adjustment -adjutage -adjutancy -adjutant -adjutantship -adjutorious -adjutory -adjutrice -adjuvant -adlay -adless -adlet -adlumidine -adlumine -adman -admarginate -admaxillary -admeasure -admeasurement -admeasurer -admedial -admedian -admensuration -admi -adminicle -adminicula -adminicular -adminiculary -adminiculate -adminiculation -adminiculum -administer -administerd -administerial -administrable -administrant -administrate -administration -administrational -administrative -administratively -administrator -administratorship -administratress -administratrices -administratrix -admirability -admirable -admirableness -admirably -admiral -admiralship -admiralty -admiration -admirative -admirator -admire -admired -admiredly -admirer -admiring -admiringly -admissibility -admissible -admissibleness -admissibly -admission -admissive -admissory -admit -admittable -admittance -admitted -admittedly -admittee -admitter -admittible -admix -admixtion -admixture -admonish -admonisher -admonishingly -admonishment -admonition -admonitioner -admonitionist -admonitive -admonitively -admonitor -admonitorial -admonitorily -admonitory -admonitrix -admortization -adnascence -adnascent -adnate -adnation -adnephrine -adnerval -adneural -adnex -adnexal -adnexed -adnexitis -adnexopexy -adnominal -adnominally -adnomination -adnoun -ado -adobe -adolesce -adolescence -adolescency -adolescent -adolescently -adonidin -adonin -adonite -adonitol -adonize -adoperate -adoperation -adopt -adoptability -adoptable -adoptant -adoptative -adopted -adoptedly -adoptee -adopter -adoptian -adoptianism -adoptianist -adoption -adoptional -adoptionism -adoptionist -adoptious -adoptive -adoptively -adorability -adorable -adorableness -adorably -adoral -adorally -adorant -adoration -adoratory -adore -adorer -adoringly -adorn -adorner -adorningly -adornment -adosculation -adossed -adoulie -adown -adoxaceous -adoxography -adoxy -adoze -adpao -adpress -adpromission -adradial -adradially -adradius -adread -adream -adreamed -adreamt -adrectal -adrenal -adrenalectomize -adrenalectomy -adrenaline -adrenalize -adrenalone -adrenergic -adrenin -adrenine -adrenochrome -adrenocortical -adrenocorticotropic -adrenolysis -adrenolytic -adrenotropic -adrift -adrip -adroit -adroitly -adroitness -adroop -adrop -adrostral -adrowse -adrue -adry -adsbud -adscendent -adscititious -adscititiously -adscript -adscripted -adscription -adscriptitious -adscriptitius -adscriptive -adsessor -adsheart -adsignification -adsignify -adsmith -adsmithing -adsorb -adsorbable -adsorbate -adsorbent -adsorption -adsorptive -adstipulate -adstipulation -adstipulator -adterminal -adtevac -adular -adularescence -adularia -adulate -adulation -adulator -adulatory -adulatress -adult -adulter -adulterant -adulterate -adulterately -adulterateness -adulteration -adulterator -adulterer -adulteress -adulterine -adulterize -adulterous -adulterously -adultery -adulthood -adulticidal -adulticide -adultness -adultoid -adumbral -adumbrant -adumbrate -adumbration -adumbrative -adumbratively -adunc -aduncate -aduncated -aduncity -aduncous -adusk -adust -adustion -adustiosis -advance -advanceable -advanced -advancedness -advancement -advancer -advancing -advancingly -advancive -advantage -advantageous -advantageously -advantageousness -advection -advectitious -advective -advehent -advene -advenience -advenient -advential -adventitia -adventitious -adventitiously -adventitiousness -adventive -adventual -adventure -adventureful -adventurement -adventurer -adventureship -adventuresome -adventuresomely -adventuresomeness -adventuress -adventurish -adventurous -adventurously -adventurousness -adverb -adverbial -adverbiality -adverbialize -adverbially -adverbiation -adversant -adversaria -adversarious -adversary -adversative -adversatively -adverse -adversely -adverseness -adversifoliate -adversifolious -adversity -advert -advertence -advertency -advertent -advertently -advertisable -advertise -advertisee -advertisement -advertiser -advertising -advice -adviceful -advisability -advisable -advisableness -advisably -advisal -advisatory -advise -advised -advisedly -advisedness -advisee -advisement -adviser -advisership -advisive -advisiveness -advisor -advisorily -advisory -advocacy -advocate -advocateship -advocatess -advocation -advocator -advocatory -advocatress -advocatrice -advocatrix -advolution -advowee -advowson -ady -adynamia -adynamic -adynamy -adyta -adyton -adytum -adz -adze -adzer -adzooks -ae -aecial -aecidial -aecidioform -aecidiospore -aecidiostage -aecidium -aeciospore -aeciostage -aecioteliospore -aeciotelium -aecium -aedeagus -aedicula -aedile -aedileship -aedilian -aedilic -aedilitian -aedility -aedoeagus -aefald -aefaldness -aefaldy -aefauld -aegagropila -aegagropile -aegagrus -aegerian -aegeriid -aegicrania -aegirine -aegirinolite -aegirite -aegis -aegithognathism -aegithognathous -aegrotant -aegyptilla -aegyrite -aeluroid -aelurophobe -aelurophobia -aeluropodous -aenach -aenean -aeneolithic -aeneous -aenigmatite -aeolharmonica -aeolid -aeolina -aeoline -aeolipile -aeolistic -aeolodicon -aeolodion -aeolomelodicon -aeolopantalon -aeolotropic -aeolotropism -aeolotropy -aeolsklavier -aeon -aeonial -aeonian -aeonist -aequoreal -aer -aerage -aerarian -aerarium -aerate -aeration -aerator -aerenchyma -aerenterectasia -aerial -aerialist -aeriality -aerially -aerialness -aeric -aerical -aerie -aeried -aerifaction -aeriferous -aerification -aeriform -aerify -aero -aerobate -aerobatic -aerobatics -aerobe -aerobian -aerobic -aerobically -aerobiologic -aerobiological -aerobiologically -aerobiologist -aerobiology -aerobion -aerobiont -aerobioscope -aerobiosis -aerobiotic -aerobiotically -aerobious -aerobium -aeroboat -aerobranchiate -aerobus -aerocamera -aerocartograph -aerocolpos -aerocraft -aerocurve -aerocyst -aerodermectasia -aerodone -aerodonetic -aerodonetics -aerodrome -aerodromics -aerodynamic -aerodynamical -aerodynamicist -aerodynamics -aerodyne -aeroembolism -aeroenterectasia -aerofoil -aerogel -aerogen -aerogenes -aerogenesis -aerogenic -aerogenically -aerogenous -aerogeologist -aerogeology -aerognosy -aerogram -aerograph -aerographer -aerographic -aerographical -aerographics -aerography -aerogun -aerohydrodynamic -aerohydropathy -aerohydroplane -aerohydrotherapy -aerohydrous -aeroides -aerolite -aerolith -aerolithology -aerolitic -aerolitics -aerologic -aerological -aerologist -aerology -aeromaechanic -aeromancer -aeromancy -aeromantic -aeromarine -aeromechanical -aeromechanics -aerometeorograph -aerometer -aerometric -aerometry -aeromotor -aeronat -aeronaut -aeronautic -aeronautical -aeronautically -aeronautics -aeronautism -aeronef -aeroneurosis -aeropathy -aeroperitoneum -aeroperitonia -aerophagia -aerophagist -aerophagy -aerophane -aerophilatelic -aerophilatelist -aerophilately -aerophile -aerophilic -aerophilous -aerophobia -aerophobic -aerophone -aerophor -aerophore -aerophotography -aerophysical -aerophysics -aerophyte -aeroplane -aeroplaner -aeroplanist -aeropleustic -aeroporotomy -aeroscepsis -aeroscepsy -aeroscope -aeroscopic -aeroscopically -aeroscopy -aerose -aerosiderite -aerosiderolite -aerosol -aerosphere -aerosporin -aerostat -aerostatic -aerostatical -aerostatics -aerostation -aerosteam -aerotactic -aerotaxis -aerotechnical -aerotherapeutics -aerotherapy -aerotonometer -aerotonometric -aerotonometry -aerotropic -aerotropism -aeroyacht -aeruginous -aerugo -aery -aes -aeschynomenous -aesculaceous -aesthete -aesthetic -aesthetical -aesthetically -aesthetician -aestheticism -aestheticist -aestheticize -aesthetics -aesthiology -aesthophysiology -aethalioid -aethalium -aetheogam -aetheogamic -aetheogamous -aethered -aethogen -aethrioscope -aetiogenic -aetiotropic -aetiotropically -aetosaur -aetosaurian -aevia -aface -afaint -afar -afara -afear -afeard -afeared -afebrile -afernan -afetal -affa -affability -affable -affableness -affably -affabrous -affair -affaite -affect -affectable -affectate -affectation -affectationist -affected -affectedly -affectedness -affecter -affectibility -affectible -affecting -affectingly -affection -affectional -affectionally -affectionate -affectionately -affectionateness -affectioned -affectious -affective -affectively -affectivity -affeer -affeerer -affeerment -affeir -affenpinscher -affenspalte -afferent -affettuoso -affiance -affiancer -affiant -affidation -affidavit -affidavy -affiliable -affiliate -affiliation -affinal -affination -affine -affined -affinely -affinitative -affinitatively -affinite -affinition -affinitive -affinity -affirm -affirmable -affirmably -affirmance -affirmant -affirmation -affirmative -affirmatively -affirmatory -affirmer -affirmingly -affix -affixal -affixation -affixer -affixion -affixture -afflation -afflatus -afflict -afflicted -afflictedness -afflicter -afflicting -afflictingly -affliction -afflictionless -afflictive -afflictively -affluence -affluent -affluently -affluentness -afflux -affluxion -afforce -afforcement -afford -affordable -afforest -afforestable -afforestation -afforestment -afformative -affranchise -affranchisement -affray -affrayer -affreight -affreighter -affreightment -affricate -affricated -affrication -affricative -affright -affrighted -affrightedly -affrighter -affrightful -affrightfully -affrightingly -affrightment -affront -affronte -affronted -affrontedly -affrontedness -affronter -affronting -affrontingly -affrontingness -affrontive -affrontiveness -affrontment -affuse -affusion -affy -afghani -afield -afikomen -afire -aflagellar -aflame -aflare -aflat -aflaunt -aflicker -aflight -afloat -aflow -aflower -afluking -aflush -aflutter -afoam -afoot -afore -aforehand -aforenamed -aforesaid -aforethought -aforetime -aforetimes -afortiori -afoul -afraid -afraidness -afreet -afresh -afret -afront -afrown -aft -aftaba -after -afteract -afterage -afterattack -afterband -afterbeat -afterbirth -afterblow -afterbody -afterbrain -afterbreach -afterbreast -afterburner -afterburning -aftercare -aftercareer -aftercast -aftercataract -aftercause -afterchance -afterchrome -afterchurch -afterclap -afterclause -aftercome -aftercomer -aftercoming -aftercooler -aftercost -aftercourse -aftercrop -aftercure -afterdamp -afterdate -afterdays -afterdeck -afterdinner -afterdrain -afterdrops -aftereffect -afterend -aftereye -afterfall -afterfame -afterfeed -afterfermentation -afterform -afterfriend -afterfruits -afterfuture -aftergame -aftergas -afterglide -afterglow -aftergo -aftergood -aftergrass -aftergrave -aftergrief -aftergrind -aftergrowth -afterguard -afterguns -afterhand -afterharm -afterhatch -afterhelp -afterhend -afterhold -afterhope -afterhours -afterimage -afterimpression -afterings -afterking -afterknowledge -afterlife -afterlifetime -afterlight -afterloss -afterlove -aftermark -aftermarriage -aftermass -aftermast -aftermath -aftermatter -aftermeal -aftermilk -aftermost -afternight -afternoon -afternoons -afternose -afternote -afteroar -afterpain -afterpart -afterpast -afterpeak -afterpiece -afterplanting -afterplay -afterpressure -afterproof -afterrake -afterreckoning -afterrider -afterripening -afterroll -afterschool -aftersend -aftersensation -aftershaft -aftershafted -aftershine -aftership -aftershock -aftersong -aftersound -afterspeech -afterspring -afterstain -afterstate -afterstorm -afterstrain -afterstretch -afterstudy -afterswarm -afterswarming -afterswell -aftertan -aftertask -aftertaste -afterthinker -afterthought -afterthoughted -afterthrift -aftertime -aftertimes -aftertouch -aftertreatment -aftertrial -afterturn -aftervision -afterwale -afterwar -afterward -afterwards -afterwash -afterwhile -afterwisdom -afterwise -afterwit -afterwitted -afterwork -afterworking -afterworld -afterwrath -afterwrist -aftmost -aftosa -aftward -aftwards -afunction -afunctional -afwillite -aga -agabanee -agacante -agacella -again -against -againstand -agal -agalactia -agalactic -agalactous -agalawood -agalaxia -agalaxy -agalite -agalloch -agallochum -agallop -agalma -agalmatolite -agalwood -agama -agamete -agami -agamian -agamic -agamically -agamid -agamobium -agamogenesis -agamogenetic -agamogenetically -agamogony -agamoid -agamont -agamospore -agamous -agamy -aganglionic -agape -agapetae -agapeti -agapetid -agar -agaric -agaricaceae -agaricaceous -agaricic -agariciform -agaricin -agaricine -agaricoid -agarita -agarwal -agasp -agastric -agastroneuria -agate -agateware -agathin -agathism -agathist -agathodaemon -agathodaemonic -agathokakological -agathology -agatiferous -agatiform -agatine -agatize -agatoid -agaty -agavose -agaze -agazed -age -aged -agedly -agedness -agee -ageless -agelessness -agelong -agen -agency -agenda -agendum -agenesia -agenesic -agenesis -agennetic -agent -agentess -agential -agentival -agentive -agentry -agentship -ageometrical -ager -ageusia -ageusic -ageustia -agger -aggerate -aggeration -aggerose -agglomerant -agglomerate -agglomerated -agglomeratic -agglomeration -agglomerative -agglomerator -agglutinability -agglutinable -agglutinant -agglutinate -agglutination -agglutinationist -agglutinative -agglutinator -agglutinin -agglutinize -agglutinogen -agglutinogenic -agglutinoid -agglutinoscope -agglutogenic -aggradation -aggradational -aggrade -aggrandizable -aggrandize -aggrandizement -aggrandizer -aggrate -aggravate -aggravating -aggravatingly -aggravation -aggravative -aggravator -aggregable -aggregant -aggregate -aggregately -aggregateness -aggregation -aggregative -aggregator -aggregatory -aggress -aggressin -aggression -aggressionist -aggressive -aggressively -aggressiveness -aggressor -aggrievance -aggrieve -aggrieved -aggrievedly -aggrievedness -aggrievement -aggroup -aggroupment -aggry -aggur -agha -aghanee -aghast -aghastness -agilawood -agile -agilely -agileness -agility -agillawood -aging -agio -agiotage -agist -agistator -agistment -agistor -agitable -agitant -agitate -agitatedly -agitation -agitational -agitationist -agitative -agitator -agitatorial -agitatrix -agitprop -agla -aglance -aglaozonia -aglare -agleaf -agleam -aglet -aglethead -agley -aglimmer -aglint -aglitter -aglobulia -aglossal -aglossate -aglossia -aglow -aglucon -aglutition -aglycosuric -aglyphodont -aglyphous -agmatine -agmatology -agminate -agminated -agnail -agname -agnamed -agnate -agnathia -agnathic -agnathostomatous -agnathous -agnatic -agnatically -agnation -agnel -agnification -agnize -agnoiology -agnomen -agnomical -agnominal -agnomination -agnosia -agnosis -agnostic -agnostically -agnosticism -agnosy -agnus -ago -agog -agoge -agogic -agogics -agoho -agoing -agomensin -agomphiasis -agomphious -agomphosis -agon -agonal -agone -agoniada -agoniadin -agoniatite -agonic -agonied -agonist -agonistarch -agonistic -agonistically -agonistics -agonium -agonize -agonizedly -agonizer -agonizingly -agonothete -agonothetic -agony -agora -agoranome -agoraphobia -agouara -agouta -agouti -agpaite -agpaitic -agraffee -agrah -agral -agrammatical -agrammatism -agranulocyte -agranulocytosis -agranuloplastic -agraphia -agraphic -agrarian -agrarianism -agrarianize -agrarianly -agre -agree -agreeability -agreeable -agreeableness -agreeably -agreed -agreeing -agreeingly -agreement -agreer -agregation -agrege -agrestal -agrestial -agrestian -agrestic -agria -agricere -agricole -agricolist -agricolite -agricolous -agricultor -agricultural -agriculturalist -agriculturally -agriculture -agriculturer -agriculturist -agrimony -agrimotor -agrin -agriological -agriologist -agriology -agrionid -agrise -agrito -agroan -agrobiologic -agrobiological -agrobiologically -agrobiologist -agrobiology -agrogeological -agrogeologically -agrogeology -agrologic -agrological -agrologically -agrology -agrom -agromyzid -agronome -agronomial -agronomic -agronomical -agronomics -agronomist -agronomy -agroof -agrope -agrosteral -agrostographer -agrostographic -agrostographical -agrostography -agrostologic -agrostological -agrostologist -agrostology -agrotechny -aground -agrufe -agruif -agrypnia -agrypnotic -agsam -agua -aguacate -aguavina -ague -aguelike -agueproof -agueweed -aguey -aguilarite -aguilawood -aguinaldo -aguirage -aguish -aguishly -aguishness -agunah -agush -agust -agy -agynarious -agynary -agynous -agyrate -agyria -ah -aha -ahaaina -ahankara -ahartalav -ahaunch -ahead -aheap -ahem -ahey -ahimsa -ahind -ahint -ahluwalia -ahmadi -aho -ahong -ahorse -ahorseback -ahoy -ahsan -ahu -ahuatle -ahuehuete -ahull -ahum -ahungered -ahungry -ahunt -ahura -ahush -ahwal -ahypnia -ai -aichmophobia -aid -aidable -aidance -aidant -aide -aider -aidful -aidless -aiel -aigialosaur -aiglet -aigremore -aigrette -aiguille -aiguillesque -aiguillette -aiguilletted -aikinite -ail -ailantery -ailanthic -ailantine -ailanto -aile -aileron -ailette -ailing -aillt -ailment -ailsyte -ailuro -ailuroid -ailweed -aim -aimara -aimer -aimful -aimfully -aiming -aimless -aimlessly -aimlessness -aimworthiness -ainaleh -ainhum -ainoi -ainsell -aint -aion -aionial -air -airable -airampo -airan -airbound -airbrained -airbrush -aircraft -aircraftman -aircraftsman -aircraftswoman -aircraftwoman -aircrew -aircrewman -airdock -airdrome -airdrop -aire -airedale -airer -airfield -airfoil -airframe -airfreight -airfreighter -airgraphics -airhead -airiferous -airified -airily -airiness -airing -airish -airless -airlift -airlike -airliner -airmail -airman -airmanship -airmark -airmarker -airmonger -airohydrogen -airometer -airpark -airphobia -airplane -airplanist -airport -airproof -airscape -airscrew -airship -airsick -airsickness -airstrip -airt -airtight -airtightly -airtightness -airward -airwards -airway -airwayman -airwoman -airworthiness -airworthy -airy -aischrolatreia -aiseweed -aisle -aisled -aisleless -aisling -aisteoir -ait -aitch -aitchbone -aitchless -aitchpiece -aitesis -aithochroi -aition -aitiotropic -aiwan -aizle -aizoaceous -ajaja -ajangle -ajar -ajari -ajava -ajhar -ajivika -ajog -ajoint -ajowan -ajutment -ak -aka -akala -akalimba -akamatsu -akaroa -akasa -akazga -akazgine -akcheh -ake -akeake -akebi -akee -akeki -akeley -akenobeite -akepiro -akerite -akey -akhoond -akhrot -akhyana -akia -akimbo -akin -akindle -akinesia -akinesic -akinesis -akinete -akinetic -akmudar -akmuddar -aknee -ako -akoasm -akoasma -akoluthia -akonge -akov -akpek -akra -akroasis -akrochordite -akroterion -aku -akuammine -akule -akund -al -ala -alabamide -alabamine -alabandite -alabarch -alabaster -alabastos -alabastrian -alabastrine -alabastrites -alabastron -alabastrum -alacha -alack -alackaday -alacreatine -alacreatinine -alacrify -alacritous -alacrity -alada -alaihi -alaite -alala -alalite -alalonga -alalunga -alalus -alameda -alamo -alamodality -alamonti -alamosite -alamoth -alan -aland -alangin -alangine -alani -alanine -alannah -alantic -alantin -alantol -alantolactone -alantolic -alanyl -alar -alares -alarm -alarmable -alarmed -alarmedly -alarming -alarmingly -alarmism -alarmist -alarum -alary -alas -alaskaite -alaskite -alastrim -alate -alated -alatern -alaternus -alation -alaudine -alb -alba -albacore -albahaca -alban -albanite -albarco -albardine -albarello -albarium -albaspidin -albata -albatross -albe -albedo -albedograph -albee -albeit -albertin -albertite -albertustaler -albertype -albescence -albescent -albespine -albetad -albicans -albicant -albication -albiculi -albification -albificative -albiflorous -albify -albinal -albiness -albinic -albinism -albinistic -albino -albinoism -albinotic -albinuria -albite -albitic -albitite -albitization -albitophyre -albocarbon -albocinereous -albocracy -albolite -albolith -albopannin -albopruinose -alboranite -albronze -albuginea -albugineous -albuginitis -albugo -album -albumean -albumen -albumenization -albumenize -albumenizer -albumimeter -albumin -albuminate -albuminaturia -albuminiferous -albuminiform -albuminimeter -albuminimetry -albuminiparous -albuminization -albuminize -albuminocholia -albuminofibrin -albuminogenous -albuminoid -albuminoidal -albuminolysis -albuminometer -albuminometry -albuminone -albuminorrhea -albuminoscope -albuminose -albuminosis -albuminous -albuminousness -albuminuria -albuminuric -albumoid -albumoscope -albumose -albumosuria -alburn -alburnous -alburnum -albus -albutannin -alcaide -alcalde -alcaldeship -alcaldia -alcalizate -alcamine -alcanna -alcarraza -alcatras -alcazar -alcelaphine -alchemic -alchemical -alchemically -alchemist -alchemistic -alchemistical -alchemistry -alchemize -alchemy -alchera -alcheringa -alchimy -alchitran -alchochoden -alchymy -alcidine -alcine -alclad -alco -alcoate -alcogel -alcogene -alcohate -alcohol -alcoholate -alcoholature -alcoholdom -alcoholemia -alcoholic -alcoholically -alcoholicity -alcoholimeter -alcoholism -alcoholist -alcoholizable -alcoholization -alcoholize -alcoholmeter -alcoholmetric -alcoholomania -alcoholometer -alcoholometric -alcoholometrical -alcoholometry -alcoholophilia -alcoholuria -alcoholysis -alcoholytic -alcornoco -alcornoque -alcosol -alcove -alcovinometer -alcyon -alcyonacean -alcyonarian -alcyonic -alcyoniform -alcyonoid -aldamine -aldane -aldazin -aldazine -aldeament -aldebaranium -aldehol -aldehydase -aldehyde -aldehydic -aldehydine -aldehydrol -alder -alderman -aldermanate -aldermancy -aldermaness -aldermanic -aldermanical -aldermanity -aldermanlike -aldermanly -aldermanry -aldermanship -aldern -alderwoman -aldim -aldime -aldimine -aldine -aldoheptose -aldohexose -aldoketene -aldol -aldolization -aldolize -aldononose -aldopentose -aldose -aldoside -aldoxime -ale -aleak -aleatory -alebench -aleberry -alec -alecithal -alecize -aleconner -alecost -alectoria -alectoridine -alectorioid -alectoromachy -alectoromancy -alectoromorphous -alectoropodous -alectryomachy -alectryomancy -alecup -alee -alef -alefnull -aleft -alefzero -alegar -alehoof -alehouse -alem -alemana -alembic -alembicate -alembroth -alemite -alemmal -alemonger -alen -aleph -alephs -alephzero -alepidote -alepole -alepot -alerce -alerse -alert -alertly -alertness -alesan -alestake -aletap -aletaster -alethiology -alethopteis -alethopteroid -alethoscope -aletocyte -alette -aleukemic -aleuritic -aleuromancy -aleurometer -aleuronat -aleurone -aleuronic -aleuroscope -aleutite -alevin -alewife -alexanders -alexandrite -alexia -alexic -alexin -alexinic -alexipharmacon -alexipharmacum -alexipharmic -alexipharmical -alexipyretic -alexiteric -alexiterical -aleyard -aleyrodid -alf -alfa -alfaje -alfalfa -alfaqui -alfaquin -alfenide -alfet -alfilaria -alfileria -alfilerilla -alfilerillo -alfiona -alfonsin -alfonso -alforja -alfresco -alfridaric -alfridary -alga -algae -algaecide -algaeological -algaeologist -algaeology -algaesthesia -algaesthesis -algal -algalia -algarroba -algarrobilla -algarrobin -algate -algebra -algebraic -algebraical -algebraically -algebraist -algebraization -algebraize -algedo -algedonic -algedonics -algefacient -algerine -algesia -algesic -algesis -algesthesis -algetic -algic -algid -algidity -algidness -algific -algin -alginate -algine -alginic -alginuresis -algiomuscular -algist -algivorous -algocyan -algodoncillo -algodonite -algoesthesiometer -algogenic -algoid -algolagnia -algolagnic -algolagnist -algolagny -algological -algologist -algology -algometer -algometric -algometrical -algometrically -algometry -algophilia -algophilist -algophobia -algor -algorism -algorismic -algorist -algoristic -algorithm -algorithmic -algosis -algous -algovite -algraphic -algraphy -alguazil -algum -alhenna -alias -alibangbang -alibi -alibility -alible -alichel -alicoche -alictisal -alicyclic -alidade -alien -alienability -alienable -alienage -alienate -alienation -alienator -aliency -alienee -aliener -alienicola -alienigenate -alienism -alienist -alienize -alienor -alienship -aliethmoid -aliethmoidal -alif -aliferous -aliform -aligerous -alight -align -aligner -alignment -aligreek -aliipoe -alike -alikeness -alikewise -alilonghi -alima -aliment -alimental -alimentally -alimentariness -alimentary -alimentation -alimentative -alimentatively -alimentativeness -alimenter -alimentic -alimentive -alimentiveness -alimentotherapy -alimentum -alimonied -alimony -alin -alinasal -alineation -alintatao -aliofar -alipata -aliped -aliphatic -alipterion -aliptes -aliptic -aliquant -aliquot -aliseptal -alish -alisier -alismaceous -alismad -alismal -alismoid -aliso -alison -alisonite -alisp -alisphenoid -alisphenoidal -alist -alit -alite -alitrunk -aliturgic -aliturgical -aliunde -alive -aliveness -alivincular -aliyah -alizarate -alizari -alizarin -aljoba -alk -alkahest -alkahestic -alkahestica -alkahestical -alkalamide -alkalemia -alkalescence -alkalescency -alkalescent -alkali -alkalic -alkaliferous -alkalifiable -alkalify -alkaligen -alkaligenous -alkalimeter -alkalimetric -alkalimetrical -alkalimetrically -alkalimetry -alkaline -alkalinity -alkalinization -alkalinize -alkalinuria -alkalizable -alkalizate -alkalization -alkalize -alkalizer -alkaloid -alkaloidal -alkalometry -alkalosis -alkalous -alkamin -alkamine -alkane -alkanet -alkannin -alkapton -alkaptonuria -alkaptonuric -alkargen -alkarsin -alkekengi -alkene -alkenna -alkenyl -alkermes -alkide -alkine -alkool -alkoxide -alkoxy -alkoxyl -alky -alkyd -alkyl -alkylamine -alkylate -alkylation -alkylene -alkylic -alkylidene -alkylize -alkylogen -alkyloxy -alkyne -all -allabuta -allactite -allaeanthus -allagite -allagophyllous -allagostemonous -allalinite -allamotti -allan -allanite -allanitic -allantiasis -allantochorion -allantoic -allantoid -allantoidal -allantoidean -allantoidian -allantoin -allantoinase -allantoinuria -allantois -allantoxaidin -allanturic -allassotonic -allative -allatrate -allay -allayer -allayment -allbone -allecret -allectory -allegate -allegation -allegator -allege -allegeable -allegedly -allegement -alleger -allegiance -allegiancy -allegiant -allegoric -allegorical -allegorically -allegoricalness -allegorism -allegorist -allegorister -allegoristic -allegorization -allegorize -allegorizer -allegory -allegretto -allegro -allele -allelic -allelism -allelocatalytic -allelomorph -allelomorphic -allelomorphism -allelotropic -allelotropism -allelotropy -alleluia -alleluiatic -allemand -allemande -allemontite -allenarly -allene -aller -allergen -allergenic -allergia -allergic -allergin -allergist -allergy -allerion -allesthesia -alleviate -alleviatingly -alleviation -alleviative -alleviator -alleviatory -alley -alleyed -alleyite -alleyway -allgood -allheal -alliable -alliably -alliaceous -alliance -alliancer -allicampane -allice -allicholly -alliciency -allicient -allied -allies -alligate -alligator -alligatored -allineate -allineation -allision -alliteral -alliterate -alliteration -alliterational -alliterationist -alliterative -alliteratively -alliterativeness -alliterator -allivalite -allmouth -allness -allocable -allocaffeine -allocatable -allocate -allocatee -allocation -allocator -allochetia -allochetite -allochezia -allochiral -allochirally -allochiria -allochlorophyll -allochroic -allochroite -allochromatic -allochroous -allochthonous -allocinnamic -alloclase -alloclasite -allocochick -allocrotonic -allocryptic -allocute -allocution -allocutive -allocyanine -allodelphite -allodesmism -alloeosis -alloeostropha -alloeotic -alloerotic -alloerotism -allogamous -allogamy -allogene -allogeneity -allogeneous -allogenic -allogenically -allograph -alloiogenesis -alloisomer -alloisomeric -alloisomerism -allokinesis -allokinetic -allokurtic -allomerism -allomerous -allometric -allometry -allomorph -allomorphic -allomorphism -allomorphite -allomucic -allonomous -allonym -allonymous -allopalladium -allopath -allopathetic -allopathetically -allopathic -allopathically -allopathist -allopathy -allopatric -allopatrically -allopatry -allopelagic -allophanamide -allophanates -allophane -allophanic -allophone -allophyle -allophylian -allophylic -allophytoid -alloplasm -alloplasmatic -alloplasmic -alloplast -alloplastic -alloplasty -alloploidy -allopolyploid -allopsychic -alloquial -alloquialism -alloquy -allorhythmia -allorrhyhmia -allorrhythmic -allosaur -allose -allosematic -allosome -allosyndesis -allosyndetic -allot -allotee -allotelluric -allotheism -allothigene -allothigenetic -allothigenetically -allothigenic -allothigenous -allothimorph -allothimorphic -allothogenic -allothogenous -allotment -allotriodontia -allotriomorphic -allotriophagia -allotriophagy -allotriuria -allotrope -allotrophic -allotropic -allotropical -allotropically -allotropicity -allotropism -allotropize -allotropous -allotropy -allotrylic -allottable -allottee -allotter -allotype -allotypical -allover -allow -allowable -allowableness -allowably -allowance -allowedly -allower -alloxan -alloxanate -alloxanic -alloxantin -alloxuraemia -alloxuremia -alloxuric -alloxyproteic -alloy -alloyage -allozooid -allseed -allspice -allthing -allthorn -alltud -allude -allure -allurement -allurer -alluring -alluringly -alluringness -allusion -allusive -allusively -allusiveness -alluvia -alluvial -alluviate -alluviation -alluvion -alluvious -alluvium -allwhere -allwhither -allwork -ally -allyl -allylamine -allylate -allylation -allylene -allylic -allylthiourea -alma -almaciga -almacigo -almadia -almadie -almagest -almagra -almanac -almandine -almandite -alme -almeidina -almemar -almeriite -almightily -almightiness -almighty -almique -almirah -almochoden -almoign -almon -almond -almondy -almoner -almonership -almonry -almost -almous -alms -almsdeed -almsfolk -almsful -almsgiver -almsgiving -almshouse -almsman -almswoman -almucantar -almuce -almud -almude -almug -almuten -aln -alnage -alnager -alnagership -alnein -alnico -alniresinol -alniviridol -alnoite -alnuin -alo -alochia -alod -alodial -alodialism -alodialist -alodiality -alodially -alodian -alodiary -alodification -alodium -alody -aloe -aloed -aloelike -aloemodin -aloeroot -aloesol -aloeswood -aloetic -aloetical -aloewood -aloft -alogia -alogical -alogically -alogism -alogy -aloid -aloin -aloisiite -aloma -alomancy -alone -aloneness -along -alongshore -alongshoreman -alongside -alongst -aloof -aloofly -aloofness -aloose -alop -alopecia -alopecist -alopecoid -alopeke -alose -alouatte -aloud -alow -alowe -alp -alpaca -alpasotes -alpeen -alpenglow -alpenhorn -alpenstock -alpenstocker -alpestral -alpestrian -alpestrine -alpha -alphabet -alphabetarian -alphabetic -alphabetical -alphabetically -alphabetics -alphabetiform -alphabetism -alphabetist -alphabetization -alphabetize -alphabetizer -alphatoluic -alphenic -alphitomancy -alphitomorphous -alphol -alphorn -alphos -alphosis -alphyl -alpieu -alpigene -alpine -alpinely -alpinery -alpinesque -alpist -alqueire -alquier -alquifou -alraun -alreadiness -already -alright -alrighty -alroot -alruna -alsbachite -alsinaceous -also -alsoon -alstonidine -alstonine -alstonite -alsweill -alt -altaite -altar -altarage -altared -altarist -altarlet -altarpiece -altarwise -altazimuth -alter -alterability -alterable -alterableness -alterably -alterant -alterate -alteration -alterative -altercate -altercation -altercative -alteregoism -alteregoistic -alterer -alterity -altern -alternacy -alternance -alternant -alternariose -alternate -alternately -alternateness -alternating -alternatingly -alternation -alternationist -alternative -alternatively -alternativeness -alternativity -alternator -alterne -alternifoliate -alternipetalous -alternipinnate -alternisepalous -alternize -alterocentric -althaein -althea -althein -altheine -althionic -altho -althorn -although -altigraph -altilik -altiloquence -altiloquent -altimeter -altimetrical -altimetrically -altimetry -altin -altincar -altingiaceous -altininck -altiplano -altiscope -altisonant -altisonous -altissimo -altitude -altitudinal -altitudinarian -alto -altogether -altogetherness -altometer -altoun -altrices -altricial -altropathy -altrose -altruism -altruist -altruistic -altruistically -altschin -altun -aludel -alula -alular -alulet -alum -alumbloom -alumic -alumiferous -alumina -aluminaphone -aluminate -alumine -aluminic -aluminide -aluminiferous -aluminiform -aluminish -aluminite -aluminium -aluminize -aluminoferric -aluminographic -aluminography -aluminose -aluminosilicate -aluminosis -aluminosity -aluminothermic -aluminothermics -aluminothermy -aluminotype -aluminous -aluminum -aluminyl -alumish -alumite -alumium -alumna -alumnae -alumnal -alumni -alumniate -alumnus -alumohydrocalcite -alumroot -aluniferous -alunite -alunogen -alupag -alure -alurgite -alushtite -aluta -alutaceous -alvar -alvearium -alveary -alveloz -alveola -alveolar -alveolariform -alveolary -alveolate -alveolated -alveolation -alveole -alveolectomy -alveoli -alveoliform -alveolite -alveolitis -alveoloclasia -alveolocondylean -alveolodental -alveololabial -alveololingual -alveolonasal -alveolosubnasal -alveolotomy -alveolus -alveus -alviducous -alvine -alvite -alvus -alway -always -aly -alycompaine -alymphia -alymphopotent -alypin -alysson -alytarch -am -ama -amaas -amability -amacratic -amacrinal -amacrine -amadavat -amadelphous -amadou -amaga -amah -amain -amaister -amakebe -amala -amalaita -amalaka -amalgam -amalgamable -amalgamate -amalgamation -amalgamationist -amalgamative -amalgamatize -amalgamator -amalgamist -amalgamization -amalgamize -amaltas -amamau -amandin -amang -amani -amania -amanitin -amanitine -amanori -amanous -amantillo -amanuenses -amanuensis -amapa -amar -amarantaceous -amaranth -amaranthaceous -amaranthine -amaranthoid -amarantite -amarelle -amarevole -amargoso -amarillo -amarin -amarine -amaritude -amarity -amaroid -amaroidal -amarthritis -amaryllid -amaryllidaceous -amaryllideous -amasesis -amass -amassable -amasser -amassment -amasthenic -amastia -amasty -amaterialistic -amateur -amateurish -amateurishly -amateurishness -amateurism -amateurship -amative -amatively -amativeness -amatol -amatorial -amatorially -amatorian -amatorious -amatory -amatrice -amatungula -amaurosis -amaurotic -amaze -amazed -amazedly -amazedness -amazeful -amazement -amazia -amazing -amazingly -amazonite -amba -ambage -ambagiosity -ambagious -ambagiously -ambagiousness -ambagitory -ambalam -amban -ambar -ambaree -ambarella -ambary -ambash -ambassade -ambassador -ambassadorial -ambassadorially -ambassadorship -ambassadress -ambassage -ambassy -ambatch -ambatoarinite -ambay -ambeer -amber -amberfish -ambergris -amberiferous -amberite -amberoid -amberous -ambery -ambicolorate -ambicoloration -ambidexter -ambidexterity -ambidextral -ambidextrous -ambidextrously -ambidextrousness -ambience -ambiency -ambiens -ambient -ambier -ambigenous -ambiguity -ambiguous -ambiguously -ambiguousness -ambilateral -ambilateralaterally -ambilaterality -ambilevous -ambilian -ambilogy -ambiopia -ambiparous -ambisinister -ambisinistrous -ambisporangiate -ambisyllabic -ambit -ambital -ambitendency -ambition -ambitionist -ambitionless -ambitionlessly -ambitious -ambitiously -ambitiousness -ambitty -ambitus -ambivalence -ambivalency -ambivalent -ambivert -amble -ambler -ambling -amblingly -amblotic -amblyacousia -amblyaphia -amblychromatic -amblygeusia -amblygon -amblygonal -amblygonite -amblyocarpous -amblyope -amblyopia -amblyopic -amblyoscope -amblypod -amblypodous -amblystegite -ambo -amboceptoid -amboceptor -ambomalleal -ambon -ambonite -ambos -ambosexous -ambosexual -ambrain -ambrein -ambrette -ambrite -ambroid -ambrology -ambrose -ambrosia -ambrosiac -ambrosiaceous -ambrosial -ambrosially -ambrosian -ambrosiate -ambrosin -ambrosine -ambrosterol -ambrotype -ambry -ambsace -ambulacral -ambulacriform -ambulacrum -ambulance -ambulancer -ambulant -ambulate -ambulatio -ambulation -ambulative -ambulator -ambulatorial -ambulatorium -ambulatory -ambuling -ambulomancy -amburbial -ambury -ambuscade -ambuscader -ambush -ambusher -ambushment -amchoor -ame -amebiform -ameed -ameen -amelcorn -amelia -amelification -ameliorable -ameliorableness -ameliorant -ameliorate -amelioration -ameliorativ -ameliorative -ameliorator -amellus -ameloblast -ameloblastic -amelu -amelus -amen -amenability -amenable -amenableness -amenably -amend -amendable -amendableness -amendatory -amende -amender -amendment -amends -amene -amenia -amenity -amenorrhea -amenorrheal -amenorrheic -amenorrhoea -ament -amentaceous -amental -amentia -amentiferous -amentiform -amentulum -amentum -amerce -amerceable -amercement -amercer -amerciament -americium -amerism -ameristic -amesite -ametabole -ametabolia -ametabolian -ametabolic -ametabolism -ametabolous -ametaboly -ametallous -amethodical -amethodically -amethyst -amethystine -ametoecious -ametria -ametrometer -ametrope -ametropia -ametropic -ametrous -amgarn -amhar -amherstite -amhran -ami -amiability -amiable -amiableness -amiably -amianth -amianthiform -amianthine -amianthoid -amianthoidal -amianthus -amic -amicability -amicable -amicableness -amicably -amical -amice -amiced -amicicide -amicrobic -amicron -amicronucleate -amid -amidase -amidate -amidation -amide -amidic -amidid -amidide -amidin -amidine -amido -amidoacetal -amidoacetic -amidoacetophenone -amidoaldehyde -amidoazo -amidoazobenzene -amidoazobenzol -amidocaffeine -amidocapric -amidofluorid -amidofluoride -amidogen -amidoguaiacol -amidohexose -amidoketone -amidol -amidomyelin -amidon -amidophenol -amidophosphoric -amidoplast -amidoplastid -amidopyrine -amidosuccinamic -amidosulphonal -amidothiazole -amidoxime -amidoxy -amidoxyl -amidrazone -amidship -amidships -amidst -amidstream -amidulin -amil -amimia -amimide -amin -aminate -amination -amine -amini -aminic -aminity -aminization -aminize -amino -aminoacetal -aminoacetanilide -aminoacetic -aminoacetone -aminoacetophenetidine -aminoacetophenone -aminoacidemia -aminoaciduria -aminoanthraquinone -aminoazobenzene -aminobarbituric -aminobenzaldehyde -aminobenzamide -aminobenzene -aminobenzoic -aminocaproic -aminodiphenyl -aminoethionic -aminoformic -aminogen -aminoglutaric -aminoguanidine -aminoid -aminoketone -aminolipin -aminolysis -aminolytic -aminomalonic -aminomyelin -aminophenol -aminoplast -aminoplastic -aminopropionic -aminopurine -aminopyrine -aminoquinoline -aminosis -aminosuccinamic -aminosulphonic -aminothiophen -aminovaleric -aminoxylol -amir -amiray -amirship -amiss -amissibility -amissible -amissness -amitosis -amitotic -amitotically -amity -amixia -amla -amli -amlikar -amlong -amma -amman -ammelide -ammelin -ammeline -ammer -ammeter -ammiaceous -ammine -amminochloride -amminolysis -amminolytic -ammiolite -ammo -ammochaeta -ammochryse -ammocoete -ammocoetes -ammocoetid -ammocoetiform -ammocoetoid -ammodytoid -ammonal -ammonate -ammonation -ammonia -ammoniacal -ammoniacum -ammoniate -ammoniation -ammonic -ammonical -ammoniemia -ammonification -ammonifier -ammonify -ammoniojarosite -ammonion -ammonionitrate -ammonite -ammonitic -ammoniticone -ammonitiferous -ammonitoid -ammonium -ammoniuria -ammonization -ammono -ammonobasic -ammonocarbonic -ammonocarbonous -ammonoid -ammonoidean -ammonolysis -ammonolytic -ammonolyze -ammophilous -ammoresinol -ammotherapy -ammu -ammunition -amnemonic -amnesia -amnesic -amnestic -amnesty -amnia -amniac -amniatic -amnic -amnioallantoic -amniocentesis -amniochorial -amnioclepsis -amniomancy -amnion -amnionate -amnionic -amniorrhea -amniote -amniotic -amniotitis -amniotome -amober -amobyr -amoeba -amoebae -amoebaean -amoebaeum -amoebalike -amoeban -amoebian -amoebiasis -amoebic -amoebicide -amoebid -amoebiform -amoebocyte -amoeboid -amoeboidism -amoebous -amoebula -amok -amoke -amole -amolilla -amomal -amomum -among -amongst -amontillado -amor -amorado -amoraic -amoraim -amoral -amoralism -amoralist -amorality -amoralize -amoret -amoretto -amorism -amorist -amoristic -amorosity -amoroso -amorous -amorously -amorousness -amorphia -amorphic -amorphinism -amorphism -amorphophyte -amorphotae -amorphous -amorphously -amorphousness -amorphus -amorphy -amort -amortisseur -amortizable -amortization -amortize -amortizement -amotion -amotus -amount -amour -amourette -amovability -amovable -amove -ampalaya -ampalea -ampangabeite -ampasimenite -ampelidaceous -ampelideous -ampelite -ampelitic -ampelographist -ampelography -ampelopsidin -ampelopsin -ampelotherapy -amper -amperage -ampere -amperemeter -amperometer -ampersand -ampery -amphanthium -ampheclexis -ampherotokous -ampherotoky -amphetamine -amphiarthrodial -amphiarthrosis -amphiaster -amphibalus -amphibial -amphibian -amphibichnite -amphibiety -amphibiological -amphibiology -amphibion -amphibiotic -amphibious -amphibiously -amphibiousness -amphibium -amphiblastic -amphiblastula -amphiblestritis -amphibole -amphibolia -amphibolic -amphiboliferous -amphiboline -amphibolite -amphibolitic -amphibological -amphibologically -amphibologism -amphibology -amphibolous -amphiboly -amphibrach -amphibrachic -amphibryous -amphicarpic -amphicarpium -amphicarpogenous -amphicarpous -amphicentric -amphichroic -amphichrom -amphichromatic -amphichrome -amphicoelian -amphicoelous -amphicondylous -amphicrania -amphicreatinine -amphicribral -amphictyon -amphictyonian -amphictyonic -amphictyony -amphicyrtic -amphicyrtous -amphicytula -amphid -amphide -amphidesmous -amphidetic -amphidiarthrosis -amphidiploid -amphidiploidy -amphidisc -amphidiscophoran -amphierotic -amphierotism -amphigam -amphigamous -amphigastrium -amphigastrula -amphigean -amphigen -amphigene -amphigenesis -amphigenetic -amphigenous -amphigenously -amphigonic -amphigonium -amphigonous -amphigony -amphigoric -amphigory -amphigouri -amphikaryon -amphilogism -amphilogy -amphimacer -amphimictic -amphimictical -amphimictically -amphimixis -amphimorula -amphineurous -amphinucleus -amphioxus -amphipeptone -amphiphloic -amphiplatyan -amphiploid -amphiploidy -amphipneust -amphipneustic -amphipod -amphipodal -amphipodan -amphipodiform -amphipodous -amphiprostylar -amphiprostyle -amphiprotic -amphipyrenin -amphirhinal -amphirhine -amphisarca -amphisbaena -amphisbaenian -amphisbaenic -amphisbaenoid -amphisbaenous -amphiscians -amphiscii -amphispermous -amphisporangiate -amphispore -amphistomatic -amphistome -amphistomoid -amphistomous -amphistylar -amphistylic -amphistyly -amphitene -amphitheater -amphitheatered -amphitheatral -amphitheatric -amphitheatrical -amphitheatrically -amphithecial -amphithecium -amphithect -amphithyron -amphitokal -amphitokous -amphitoky -amphitriaene -amphitrichous -amphitropal -amphitropous -amphivasal -amphivorous -amphodarch -amphodelite -amphodiplopia -amphogenous -ampholyte -amphopeptone -amphophil -amphophile -amphophilic -amphophilous -amphora -amphoral -amphore -amphorette -amphoric -amphoricity -amphoriloquy -amphorophony -amphorous -amphoteric -ample -amplectant -ampleness -amplexation -amplexicaudate -amplexicaul -amplexicauline -amplexifoliate -amplexus -ampliate -ampliation -ampliative -amplicative -amplidyne -amplification -amplificative -amplificator -amplificatory -amplifier -amplify -amplitude -amply -ampollosity -ampongue -ampoule -ampul -ampulla -ampullaceous -ampullar -ampullary -ampullate -ampullated -ampulliform -ampullitis -ampullula -amputate -amputation -amputational -amputative -amputator -amputee -ampyx -amra -amreeta -amrita -amsath -amsel -amt -amtman -amuck -amuguis -amula -amulet -amuletic -amulla -amunam -amurca -amurcosity -amurcous -amusable -amuse -amused -amusedly -amusee -amusement -amuser -amusette -amusia -amusing -amusingly -amusingness -amusive -amusively -amusiveness -amutter -amuyon -amuyong -amuze -amvis -amy -amyelencephalia -amyelencephalic -amyelencephalous -amyelia -amyelic -amyelinic -amyelonic -amyelous -amygdal -amygdala -amygdalaceous -amygdalase -amygdalate -amygdalectomy -amygdalic -amygdaliferous -amygdaliform -amygdalin -amygdaline -amygdalinic -amygdalitis -amygdaloid -amygdaloidal -amygdalolith -amygdaloncus -amygdalopathy -amygdalothripsis -amygdalotome -amygdalotomy -amygdonitrile -amygdophenin -amygdule -amyl -amylaceous -amylamine -amylan -amylase -amylate -amylemia -amylene -amylenol -amylic -amylidene -amyliferous -amylin -amylo -amylocellulose -amyloclastic -amylocoagulase -amylodextrin -amylodyspepsia -amylogen -amylogenesis -amylogenic -amylohydrolysis -amylohydrolytic -amyloid -amyloidal -amyloidosis -amyloleucite -amylolysis -amylolytic -amylom -amylometer -amylon -amylopectin -amylophagia -amylophosphate -amylophosphoric -amyloplast -amyloplastic -amyloplastid -amylopsin -amylose -amylosis -amylosynthesis -amylum -amyluria -amynodont -amyosthenia -amyosthenic -amyotaxia -amyotonia -amyotrophia -amyotrophic -amyotrophy -amyous -amyrin -amyrol -amyroot -amyxorrhea -amyxorrhoea -an -ana -anabaptize -anabasine -anabasis -anabasse -anabata -anabathmos -anabatic -anaberoga -anabibazon -anabiosis -anabiotic -anabo -anabohitsite -anabolic -anabolin -anabolism -anabolite -anabolize -anabong -anabranch -anabrosis -anabrotic -anacahuita -anacahuite -anacalypsis -anacampsis -anacamptic -anacamptically -anacamptics -anacamptometer -anacanth -anacanthine -anacanthous -anacara -anacard -anacardiaceous -anacardic -anacatadidymus -anacatharsis -anacathartic -anacephalaeosis -anacephalize -anachorism -anachromasis -anachronic -anachronical -anachronically -anachronism -anachronismatical -anachronist -anachronistic -anachronistical -anachronistically -anachronize -anachronous -anachronously -anachueta -anacid -anacidity -anaclasis -anaclastic -anaclastics -anacleticum -anaclinal -anaclisis -anaclitic -anacoenosis -anacoluthia -anacoluthic -anacoluthically -anacoluthon -anaconda -anacrisis -anacrogynae -anacrogynous -anacromyodian -anacrotic -anacrotism -anacrusis -anacrustic -anacrustically -anaculture -anacusia -anacusic -anacusis -anadem -anadenia -anadicrotic -anadicrotism -anadidymus -anadiplosis -anadipsia -anadipsic -anadrom -anadromous -anaematosis -anaemia -anaemic -anaeretic -anaerobation -anaerobe -anaerobia -anaerobian -anaerobic -anaerobically -anaerobies -anaerobion -anaerobiont -anaerobiosis -anaerobiotic -anaerobiotically -anaerobious -anaerobism -anaerobium -anaerophyte -anaeroplastic -anaeroplasty -anaesthesia -anaesthesiant -anaesthetically -anaesthetizer -anaetiological -anagalactic -anagap -anagenesis -anagenetic -anagep -anagignoskomena -anaglyph -anaglyphic -anaglyphical -anaglyphics -anaglyphoscope -anaglyphy -anaglyptic -anaglyptical -anaglyptics -anaglyptograph -anaglyptographic -anaglyptography -anaglypton -anagnorisis -anagnost -anagoge -anagogic -anagogical -anagogically -anagogics -anagogy -anagram -anagrammatic -anagrammatical -anagrammatically -anagrammatism -anagrammatist -anagrammatize -anagrams -anagraph -anagua -anagyrin -anagyrine -anahau -anakinesis -anakinetic -anakinetomer -anakinetomeric -anakoluthia -anakrousis -anaktoron -anal -analabos -analav -analcime -analcimite -analcite -analcitite -analecta -analectic -analects -analemma -analemmatic -analepsis -analepsy -analeptic -analeptical -analgen -analgesia -analgesic -analgesis -analgesist -analgetic -analgia -analgic -analgize -analkalinity -anallagmatic -anallantoic -anallantoidean -anallergic -anally -analogic -analogical -analogically -analogicalness -analogion -analogism -analogist -analogistic -analogize -analogon -analogous -analogously -analogousness -analogue -analogy -analphabet -analphabete -analphabetic -analphabetical -analphabetism -analysability -analysable -analysand -analysation -analyse -analyser -analyses -analysis -analyst -analytic -analytical -analytically -analytics -analyzability -analyzable -analyzation -analyze -analyzer -anam -anama -anamesite -anametadromous -anamirtin -anamite -anammonid -anammonide -anamnesis -anamnestic -anamnestically -anamnionic -anamniote -anamniotic -anamorphic -anamorphism -anamorphoscope -anamorphose -anamorphosis -anamorphote -anamorphous -anan -anana -ananaplas -ananaples -ananas -ananda -anandrarious -anandria -anandrous -ananepionic -anangioid -anangular -anankastic -anantherate -anantherous -ananthous -ananym -anapaest -anapaestic -anapaestical -anapaestically -anapaganize -anapaite -anapanapa -anapeiratic -anaphalantiasis -anaphase -anaphia -anaphora -anaphoral -anaphoria -anaphoric -anaphorical -anaphrodisia -anaphrodisiac -anaphroditic -anaphroditous -anaphylactic -anaphylactin -anaphylactogen -anaphylactogenic -anaphylactoid -anaphylatoxin -anaphylaxis -anaphyte -anaplasia -anaplasis -anaplasm -anaplasmosis -anaplastic -anaplasty -anaplerosis -anaplerotic -anapnea -anapneic -anapnoeic -anapnograph -anapnoic -anapnometer -anapodeictic -anapophysial -anapophysis -anapsid -anapsidan -anapterygote -anapterygotism -anapterygotous -anaptotic -anaptychus -anaptyctic -anaptyctical -anaptyxis -anaqua -anarcestean -anarch -anarchal -anarchial -anarchic -anarchical -anarchically -anarchism -anarchist -anarchistic -anarchize -anarchoindividualist -anarchosocialist -anarchosyndicalism -anarchosyndicalist -anarchy -anarcotin -anareta -anaretic -anaretical -anargyros -anarthria -anarthric -anarthropod -anarthropodous -anarthrosis -anarthrous -anarthrously -anarthrousness -anartismos -anarya -anasarca -anasarcous -anaschistic -anaseismic -anaspadias -anaspalin -anastalsis -anastaltic -anastasimon -anastasimos -anastasis -anastate -anastatic -anastigmat -anastigmatic -anastomose -anastomosis -anastomotic -anastrophe -anatase -anatexis -anathema -anathematic -anathematical -anathematically -anathematism -anathematization -anathematize -anathematizer -anatheme -anathemize -anatifa -anatifer -anatiferous -anatine -anatocism -anatomic -anatomical -anatomically -anatomicobiological -anatomicochirurgical -anatomicomedical -anatomicopathologic -anatomicopathological -anatomicophysiologic -anatomicophysiological -anatomicosurgical -anatomism -anatomist -anatomization -anatomize -anatomizer -anatomopathologic -anatomopathological -anatomy -anatopism -anatox -anatoxin -anatreptic -anatripsis -anatripsology -anatriptic -anatron -anatropal -anatropia -anatropous -anaudia -anaunter -anaunters -anaxial -anaxon -anaxone -anay -anazoturia -anba -anbury -ancestor -ancestorial -ancestorially -ancestral -ancestrally -ancestress -ancestrial -ancestrian -ancestry -anchietin -anchietine -anchieutectic -anchimonomineral -anchithere -anchitherioid -anchor -anchorable -anchorage -anchorate -anchored -anchorer -anchoress -anchoret -anchoretic -anchoretical -anchoretish -anchoretism -anchorhold -anchorite -anchoritess -anchoritic -anchoritical -anchoritish -anchoritism -anchorless -anchorlike -anchorwise -anchovy -anchusin -anchusine -anchylose -anchylosis -ancience -anciency -ancient -ancientism -anciently -ancientness -ancientry -ancienty -ancile -ancilla -ancillary -ancipital -ancipitous -ancistrocladaceous -ancistroid -ancon -anconad -anconagra -anconal -ancone -anconeal -anconeous -anconeus -anconitis -anconoid -ancony -ancora -ancoral -ancylopod -ancylostome -ancylostomiasis -and -anda -andabatarian -andalusite -andante -andantino -andesine -andesinite -andesite -andesitic -andirin -andirine -andiroba -andiron -andorite -andouillet -andradite -andranatomy -andrarchy -andrenid -andrewsite -andric -androcentric -androcephalous -androcephalum -androclinium -androconium -androcracy -androcratic -androcyte -androdioecious -androdioecism -androdynamous -androecial -androecium -androgametangium -androgametophore -androgen -androgenesis -androgenetic -androgenic -androgenous -androginous -androgone -androgonia -androgonial -androgonidium -androgonium -andrographolide -androgynal -androgynary -androgyne -androgyneity -androgynia -androgynism -androgynous -androgynus -androgyny -android -androidal -androkinin -androl -androlepsia -androlepsy -andromania -andromedotoxin -andromonoecious -andromonoecism -andromorphous -andron -andronitis -andropetalar -andropetalous -androphagous -androphobia -androphonomania -androphore -androphorous -androphorum -androphyll -androseme -androsin -androsphinx -androsporangium -androspore -androsterone -androtauric -androtomy -anear -aneath -anecdota -anecdotage -anecdotal -anecdotalism -anecdote -anecdotic -anecdotical -anecdotically -anecdotist -anele -anelectric -anelectrode -anelectrotonic -anelectrotonus -anelytrous -anematosis -anemia -anemic -anemobiagraph -anemochord -anemoclastic -anemogram -anemograph -anemographic -anemographically -anemography -anemological -anemology -anemometer -anemometric -anemometrical -anemometrically -anemometrograph -anemometrographic -anemometrographically -anemometry -anemonal -anemone -anemonin -anemonol -anemony -anemopathy -anemophile -anemophilous -anemophily -anemoscope -anemosis -anemotaxis -anemotropic -anemotropism -anencephalia -anencephalic -anencephalotrophia -anencephalous -anencephalus -anencephaly -anend -anenergia -anenst -anent -anenterous -anepia -anepigraphic -anepigraphous -anepiploic -anepithymia -anerethisia -aneretic -anergia -anergic -anergy -anerly -aneroid -aneroidograph -anerotic -anerythroplasia -anerythroplastic -anes -anesis -anesthesia -anesthesiant -anesthesimeter -anesthesiologist -anesthesiology -anesthesis -anesthetic -anesthetically -anesthetist -anesthetization -anesthetize -anesthetizer -anesthyl -anethole -anetiological -aneuploid -aneuploidy -aneuria -aneuric -aneurilemmic -aneurin -aneurism -aneurismally -aneurysm -aneurysmal -aneurysmally -aneurysmatic -anew -anfractuose -anfractuosity -anfractuous -anfractuousness -anfracture -angaralite -angaria -angary -angekok -angel -angelate -angeldom -angelet -angeleyes -angelfish -angelhood -angelic -angelica -angelical -angelically -angelicalness -angelicic -angelicize -angelico -angelin -angeline -angelique -angelize -angellike -angelocracy -angelographer -angelolater -angelolatry -angelologic -angelological -angelology -angelomachy -angelophany -angelot -angelship -anger -angerly -angeyok -angiasthenia -angico -angiectasis -angiectopia -angiemphraxis -angiitis -angild -angili -angina -anginal -anginiform -anginoid -anginose -anginous -angioasthenia -angioataxia -angioblast -angioblastic -angiocarditis -angiocarp -angiocarpian -angiocarpic -angiocarpous -angiocavernous -angiocholecystitis -angiocholitis -angiochondroma -angioclast -angiocyst -angiodermatitis -angiodiascopy -angioelephantiasis -angiofibroma -angiogenesis -angiogenic -angiogeny -angioglioma -angiograph -angiography -angiohyalinosis -angiohydrotomy -angiohypertonia -angiohypotonia -angioid -angiokeratoma -angiokinesis -angiokinetic -angioleucitis -angiolipoma -angiolith -angiology -angiolymphitis -angiolymphoma -angioma -angiomalacia -angiomatosis -angiomatous -angiomegaly -angiometer -angiomyocardiac -angiomyoma -angiomyosarcoma -angioneoplasm -angioneurosis -angioneurotic -angionoma -angionosis -angioparalysis -angioparalytic -angioparesis -angiopathy -angiophorous -angioplany -angioplasty -angioplerosis -angiopoietic -angiopressure -angiorrhagia -angiorrhaphy -angiorrhea -angiorrhexis -angiosarcoma -angiosclerosis -angiosclerotic -angioscope -angiosis -angiospasm -angiospastic -angiosperm -angiospermal -angiospermatous -angiospermic -angiospermous -angiosporous -angiostegnosis -angiostenosis -angiosteosis -angiostomize -angiostomy -angiostrophy -angiosymphysis -angiotasis -angiotelectasia -angiothlipsis -angiotome -angiotomy -angiotonic -angiotonin -angiotribe -angiotripsy -angiotrophic -anglaise -angle -angleberry -angled -anglehook -anglepod -angler -anglesite -anglesmith -angletouch -angletwitch -anglewing -anglewise -angleworm -anglicization -anglicize -anglimaniac -angling -angloid -ango -angolar -angor -angostura -angrily -angriness -angrite -angry -angst -angster -angstrom -anguid -anguiform -anguilliform -anguilloid -anguine -anguineal -anguineous -anguiped -anguis -anguish -anguished -anguishful -anguishous -anguishously -angula -angular -angulare -angularity -angularization -angularize -angularly -angularness -angulate -angulated -angulately -angulateness -angulation -angulatogibbous -angulatosinuous -anguliferous -angulinerved -angulodentate -angulometer -angulosity -angulosplenial -angulous -anguria -angusticlave -angustifoliate -angustifolious -angustirostrate -angustisellate -angustiseptal -angustiseptate -angwantibo -anhalamine -anhaline -anhalonine -anhalouidine -anhang -anharmonic -anhedonia -anhedral -anhedron -anhelation -anhelous -anhematosis -anhemolytic -anhidrosis -anhidrotic -anhima -anhinga -anhistic -anhistous -anhungered -anhungry -anhydrate -anhydration -anhydremia -anhydremic -anhydric -anhydride -anhydridization -anhydridize -anhydrite -anhydrization -anhydrize -anhydroglocose -anhydromyelia -anhydrous -anhydroxime -anhysteretic -ani -aniconic -aniconism -anicular -anicut -anidian -anidiomatic -anidiomatical -anidrosis -aniente -anigh -anight -anights -anil -anilao -anilau -anile -anileness -anilic -anilid -anilide -anilidic -anilidoxime -aniline -anilinism -anilinophile -anilinophilous -anility -anilla -anilopyrin -anilopyrine -anima -animability -animable -animableness -animadversion -animadversional -animadversive -animadversiveness -animadvert -animadverter -animal -animalcula -animalculae -animalcular -animalcule -animalculine -animalculism -animalculist -animalculous -animalculum -animalhood -animalian -animalic -animalier -animalish -animalism -animalist -animalistic -animality -animalivore -animalivorous -animalization -animalize -animally -animastic -animastical -animate -animated -animatedly -animately -animateness -animater -animating -animatingly -animation -animatism -animatistic -animative -animatograph -animator -anime -animi -animikite -animism -animist -animistic -animize -animosity -animotheism -animous -animus -anion -anionic -aniridia -anis -anisal -anisalcohol -anisaldehyde -anisaldoxime -anisamide -anisandrous -anisanilide -anisate -anischuria -anise -aniseed -aniseikonia -aniseikonic -aniselike -aniseroot -anisette -anisic -anisidin -anisidine -anisil -anisilic -anisobranchiate -anisocarpic -anisocarpous -anisocercal -anisochromatic -anisochromia -anisocoria -anisocotyledonous -anisocotyly -anisocratic -anisocycle -anisocytosis -anisodactyl -anisodactylic -anisodactylous -anisodont -anisogamete -anisogamous -anisogamy -anisogenous -anisogeny -anisognathism -anisognathous -anisogynous -anisoin -anisole -anisoleucocytosis -anisomelia -anisomelus -anisomeric -anisomerous -anisometric -anisometrope -anisometropia -anisometropic -anisomyarian -anisomyodian -anisomyodous -anisopetalous -anisophyllous -anisophylly -anisopia -anisopleural -anisopleurous -anisopod -anisopodal -anisopodous -anisopogonous -anisopterous -anisosepalous -anisospore -anisostaminous -anisostemonous -anisosthenic -anisostichous -anisostomous -anisotonic -anisotropal -anisotrope -anisotropic -anisotropical -anisotropically -anisotropism -anisotropous -anisotropy -anisoyl -anisum -anisuria -anisyl -anisylidene -anither -anitrogenous -anjan -ankaramite -ankaratrite -ankee -anker -ankerite -ankh -ankle -anklebone -anklejack -anklet -anklong -ankus -ankusha -ankylenteron -ankyloblepharon -ankylocheilia -ankylodactylia -ankylodontia -ankyloglossia -ankylomele -ankylomerism -ankylophobia -ankylopodia -ankylopoietic -ankyloproctia -ankylorrhinia -ankylose -ankylosis -ankylostoma -ankylotia -ankylotic -ankylotome -ankylotomy -ankylurethria -ankyroid -anlace -anlaut -ann -anna -annabergite -annal -annale -annaline -annalism -annalist -annalistic -annalize -annals -annat -annates -annatto -anneal -annealer -annectent -annection -annelid -annelidan -annelidian -annelidous -annelism -anneloid -annerodite -annet -annex -annexa -annexable -annexal -annexation -annexational -annexationist -annexer -annexion -annexionist -annexitis -annexive -annexment -annexure -annidalin -annihilability -annihilable -annihilate -annihilation -annihilationism -annihilationist -annihilative -annihilator -annihilatory -annite -anniversarily -anniversariness -anniversary -anniverse -annodated -annona -annonaceous -annotate -annotater -annotation -annotative -annotator -annotatory -annotine -annotinous -announce -announceable -announcement -announcer -annoy -annoyance -annoyancer -annoyer -annoyful -annoying -annoyingly -annoyingness -annoyment -annual -annualist -annualize -annually -annuary -annueler -annuent -annuitant -annuity -annul -annular -annularity -annularly -annulary -annulate -annulated -annulation -annulet -annulettee -annulism -annullable -annullate -annullation -annuller -annulment -annuloid -annulosan -annulose -annulus -annunciable -annunciate -annunciation -annunciative -annunciator -annunciatory -anoa -anocarpous -anociassociation -anococcygeal -anodal -anode -anodendron -anodic -anodically -anodize -anodontia -anodos -anodyne -anodynia -anodynic -anodynous -anoegenetic -anoesia -anoesis -anoestrous -anoestrum -anoestrus -anoetic -anogenic -anogenital -anoil -anoine -anoint -anointer -anointment -anole -anoli -anolian -anolyte -anomaliflorous -anomaliped -anomalism -anomalist -anomalistic -anomalistical -anomalistically -anomalocephalus -anomaloflorous -anomalogonatous -anomalonomy -anomaloscope -anomalotrophy -anomalous -anomalously -anomalousness -anomalure -anomaly -anomite -anomocarpous -anomodont -anomophyllous -anomorhomboid -anomorhomboidal -anomphalous -anomural -anomuran -anomurous -anomy -anon -anonang -anoncillo -anonol -anonychia -anonym -anonyma -anonymity -anonymous -anonymously -anonymousness -anonymuncule -anoopsia -anoperineal -anophele -anopheline -anophoria -anophthalmia -anophthalmos -anophyte -anopia -anopisthographic -anoplocephalic -anoplonemertean -anoplothere -anoplotherioid -anoplotheroid -anopluriform -anopsia -anopubic -anorak -anorchia -anorchism -anorchous -anorchus -anorectal -anorectic -anorectous -anorexia -anorexy -anorgana -anorganic -anorganism -anorganology -anormal -anormality -anorogenic -anorth -anorthic -anorthite -anorthitic -anorthitite -anorthoclase -anorthographic -anorthographical -anorthographically -anorthography -anorthophyre -anorthopia -anorthoscope -anorthose -anorthosite -anoscope -anoscopy -anosmatic -anosmia -anosmic -anosphrasia -anosphresia -anospinal -anostosis -anoterite -another -anotherkins -anotia -anotropia -anotta -anotto -anotus -anounou -anovesical -anoxemia -anoxemic -anoxia -anoxic -anoxidative -anoxybiosis -anoxybiotic -anoxyscope -ansa -ansar -ansarian -ansate -ansation -anserated -anserine -anserous -anspessade -ansu -ansulate -answer -answerability -answerable -answerableness -answerably -answerer -answeringly -answerless -answerlessly -ant -anta -antacid -antacrid -antadiform -antagonism -antagonist -antagonistic -antagonistical -antagonistically -antagonization -antagonize -antagonizer -antagony -antal -antalgesic -antalgol -antalkali -antalkaline -antambulacral -antanacathartic -antanaclasis -antanemic -antapex -antaphrodisiac -antaphroditic -antapocha -antapodosis -antapology -antapoplectic -antarchism -antarchist -antarchistic -antarchistical -antarchy -antarctic -antarctica -antarctical -antarctically -antarthritic -antasphyctic -antasthenic -antasthmatic -antatrophic -antdom -ante -anteact -anteal -anteambulate -anteambulation -anteater -antebaptismal -antebath -antebrachial -antebrachium -antebridal -antecabinet -antecaecal -antecardium -antecavern -antecedaneous -antecedaneously -antecede -antecedence -antecedency -antecedent -antecedental -antecedently -antecessor -antechamber -antechapel -antechoir -antechurch -anteclassical -antecloset -antecolic -antecommunion -anteconsonantal -antecornu -antecourt -antecoxal -antecubital -antecurvature -antedate -antedawn -antediluvial -antediluvially -antediluvian -antedonin -antedorsal -antefebrile -antefix -antefixal -anteflected -anteflexed -anteflexion -antefurca -antefurcal -antefuture -antegarden -antegrade -antehall -antehistoric -antehuman -antehypophysis -anteinitial -antejentacular -antejudiciary -antejuramentum -antelabium -antelegal -antelocation -antelope -antelopian -antelucan -antelude -anteluminary -antemarginal -antemarital -antemedial -antemeridian -antemetallic -antemetic -antemillennial -antemingent -antemortal -antemundane -antemural -antenarial -antenatal -antenatalitial -antenati -antenave -antenna -antennae -antennal -antennariid -antennary -antennate -antenniferous -antenniform -antennula -antennular -antennulary -antennule -antenodal -antenoon -antenumber -anteoccupation -anteocular -anteopercle -anteoperculum -anteorbital -antepagmenta -antepagments -antepalatal -antepaschal -antepast -antepatriarchal -antepectoral -antepectus -antependium -antepenult -antepenultima -antepenultimate -antephialtic -antepileptic -antepirrhema -anteporch -anteportico -anteposition -anteposthumous -anteprandial -antepredicament -antepredicamental -antepreterit -antepretonic -anteprohibition -anteprostate -anteprostatic -antepyretic -antequalm -antereformation -antereformational -anteresurrection -anterethic -anterevolutional -anterevolutionary -anteriad -anterior -anteriority -anteriorly -anteriorness -anteroclusion -anterodorsal -anteroexternal -anterofixation -anteroflexion -anterofrontal -anterograde -anteroinferior -anterointerior -anterointernal -anterolateral -anterolaterally -anteromedial -anteromedian -anteroom -anteroparietal -anteroposterior -anteroposteriorly -anteropygal -anterospinal -anterosuperior -anteroventral -anteroventrally -antes -antescript -antesignanus -antespring -antestature -antesternal -antesternum -antesunrise -antesuperior -antetemple -antetype -antevenient -anteversion -antevert -antevocalic -antewar -anthecological -anthecologist -anthecology -anthela -anthelion -anthelmintic -anthem -anthema -anthemene -anthemia -anthemion -anthemwise -anthemy -anther -antheral -antherid -antheridial -antheridiophore -antheridium -antheriferous -antheriform -antherless -antherogenous -antheroid -antherozoid -antherozoidal -antherozooid -antherozooidal -anthesis -anthesterin -anthesterol -antheximeter -anthill -anthine -anthobiology -anthocarp -anthocarpous -anthocephalous -anthocerote -anthochlor -anthochlorine -anthoclinium -anthocyan -anthocyanidin -anthocyanin -anthodium -anthoecological -anthoecologist -anthoecology -anthogenesis -anthogenetic -anthogenous -anthography -anthoid -anthokyan -antholite -anthological -anthologically -anthologion -anthologist -anthologize -anthology -antholysis -anthomania -anthomaniac -anthomedusan -anthomyiid -anthood -anthophagous -anthophile -anthophilian -anthophilous -anthophobia -anthophore -anthophorous -anthophyllite -anthophyllitic -anthophyte -anthorine -anthosiderite -anthotaxis -anthotaxy -anthotropic -anthotropism -anthoxanthin -anthozoan -anthozoic -anthozooid -anthozoon -anthracemia -anthracene -anthraceniferous -anthrachrysone -anthracia -anthracic -anthraciferous -anthracin -anthracite -anthracitic -anthracitiferous -anthracitious -anthracitism -anthracitization -anthracnose -anthracnosis -anthracocide -anthracoid -anthracolithic -anthracomancy -anthracomartian -anthracometer -anthracometric -anthraconecrosis -anthraconite -anthracosis -anthracothere -anthracotic -anthracyl -anthradiol -anthradiquinone -anthraflavic -anthragallol -anthrahydroquinone -anthramine -anthranil -anthranilate -anthranilic -anthranol -anthranone -anthranoyl -anthranyl -anthraphenone -anthrapurpurin -anthrapyridine -anthraquinol -anthraquinone -anthraquinonyl -anthrarufin -anthratetrol -anthrathiophene -anthratriol -anthrax -anthraxolite -anthraxylon -anthribid -anthrohopobiological -anthroic -anthrol -anthrone -anthropic -anthropical -anthropobiologist -anthropobiology -anthropocentric -anthropocentrism -anthropoclimatologist -anthropoclimatology -anthropocosmic -anthropodeoxycholic -anthropogenesis -anthropogenetic -anthropogenic -anthropogenist -anthropogenous -anthropogeny -anthropogeographer -anthropogeographical -anthropogeography -anthropoglot -anthropogony -anthropography -anthropoid -anthropoidal -anthropoidean -anthropolater -anthropolatric -anthropolatry -anthropolite -anthropolithic -anthropolitic -anthropological -anthropologically -anthropologist -anthropology -anthropomancy -anthropomantic -anthropomantist -anthropometer -anthropometric -anthropometrical -anthropometrically -anthropometrist -anthropometry -anthropomorph -anthropomorphic -anthropomorphical -anthropomorphically -anthropomorphism -anthropomorphist -anthropomorphite -anthropomorphitic -anthropomorphitical -anthropomorphitism -anthropomorphization -anthropomorphize -anthropomorphological -anthropomorphologically -anthropomorphology -anthropomorphosis -anthropomorphotheist -anthropomorphous -anthropomorphously -anthroponomical -anthroponomics -anthroponomist -anthroponomy -anthropopathia -anthropopathic -anthropopathically -anthropopathism -anthropopathite -anthropopathy -anthropophagi -anthropophagic -anthropophagical -anthropophaginian -anthropophagism -anthropophagist -anthropophagistic -anthropophagite -anthropophagize -anthropophagous -anthropophagously -anthropophagy -anthropophilous -anthropophobia -anthropophuism -anthropophuistic -anthropophysiography -anthropophysite -anthropopsychic -anthropopsychism -anthroposcopy -anthroposociologist -anthroposociology -anthroposomatology -anthroposophical -anthroposophist -anthroposophy -anthropoteleoclogy -anthropoteleological -anthropotheism -anthropotomical -anthropotomist -anthropotomy -anthropotoxin -anthropurgic -anthroropolith -anthroxan -anthroxanic -anthryl -anthrylene -anthypophora -anthypophoretic -anti -antiabolitionist -antiabrasion -antiabrin -antiabsolutist -antiacid -antiadiaphorist -antiaditis -antiadministration -antiae -antiaesthetic -antiager -antiagglutinating -antiagglutinin -antiaggression -antiaggressionist -antiaggressive -antiaircraft -antialbumid -antialbumin -antialbumose -antialcoholic -antialcoholism -antialcoholist -antialdoxime -antialexin -antialien -antiamboceptor -antiamusement -antiamylase -antianaphylactogen -antianaphylaxis -antianarchic -antianarchist -antiangular -antiannexation -antiannexationist -antianopheline -antianthrax -antianthropocentric -antianthropomorphism -antiantibody -antiantidote -antiantienzyme -antiantitoxin -antiaphrodisiac -antiaphthic -antiapoplectic -antiapostle -antiaquatic -antiar -antiarin -antiaristocrat -antiarthritic -antiascetic -antiasthmatic -antiastronomical -antiatheism -antiatheist -antiatonement -antiattrition -antiautolysin -antibacchic -antibacchius -antibacterial -antibacteriolytic -antiballooner -antibalm -antibank -antibasilican -antibenzaldoxime -antiberiberin -antibibliolatry -antibigotry -antibilious -antibiont -antibiosis -antibiotic -antibishop -antiblastic -antiblennorrhagic -antiblock -antiblue -antibody -antiboxing -antibreakage -antibridal -antibromic -antibubonic -antic -anticachectic -antical -anticalcimine -anticalculous -anticalligraphic -anticancer -anticapital -anticapitalism -anticapitalist -anticardiac -anticardium -anticarious -anticarnivorous -anticaste -anticatalase -anticatalyst -anticatalytic -anticatalyzer -anticatarrhal -anticathexis -anticathode -anticaustic -anticensorship -anticentralization -anticephalalgic -anticeremonial -anticeremonialism -anticeremonialist -anticheater -antichlor -antichlorine -antichloristic -antichlorotic -anticholagogue -anticholinergic -antichoromanic -antichorus -antichresis -antichretic -antichrist -antichristian -antichristianity -antichristianly -antichrome -antichronical -antichronically -antichthon -antichurch -antichurchian -antichymosin -anticipant -anticipatable -anticipate -anticipation -anticipative -anticipatively -anticipator -anticipatorily -anticipatory -anticivic -anticivism -anticize -anticker -anticlactic -anticlassical -anticlassicist -anticlergy -anticlerical -anticlericalism -anticlimactic -anticlimax -anticlinal -anticline -anticlinorium -anticlockwise -anticlogging -anticly -anticnemion -anticness -anticoagulant -anticoagulating -anticoagulative -anticoagulin -anticogitative -anticolic -anticombination -anticomet -anticomment -anticommercial -anticommunist -anticomplement -anticomplementary -anticomplex -anticonceptionist -anticonductor -anticonfederationist -anticonformist -anticonscience -anticonscription -anticonscriptive -anticonstitutional -anticonstitutionalist -anticonstitutionally -anticontagion -anticontagionist -anticontagious -anticonventional -anticonventionalism -anticonvulsive -anticor -anticorn -anticorrosion -anticorrosive -anticorset -anticosine -anticosmetic -anticouncil -anticourt -anticourtier -anticous -anticovenanter -anticovenanting -anticreation -anticreative -anticreator -anticreep -anticreeper -anticreeping -anticrepuscular -anticrepuscule -anticrisis -anticritic -anticritique -anticrochet -anticrotalic -anticryptic -anticum -anticyclic -anticyclone -anticyclonic -anticyclonically -anticynic -anticytolysin -anticytotoxin -antidactyl -antidancing -antidecalogue -antideflation -antidemocrat -antidemocratic -antidemocratical -antidemoniac -antidetonant -antidetonating -antidiabetic -antidiastase -antidictionary -antidiffuser -antidinic -antidiphtheria -antidiphtheric -antidiphtherin -antidiphtheritic -antidisciplinarian -antidivine -antidivorce -antidogmatic -antidomestic -antidominican -antidoron -antidotal -antidotally -antidotary -antidote -antidotical -antidotically -antidotism -antidraft -antidrag -antidromal -antidromic -antidromically -antidromous -antidromy -antidrug -antiduke -antidumping -antidynamic -antidynastic -antidyscratic -antidysenteric -antidysuric -antiecclesiastic -antiecclesiastical -antiedemic -antieducation -antieducational -antiegotism -antiejaculation -antiemetic -antiemperor -antiempirical -antiendotoxin -antiendowment -antienergistic -antienthusiastic -antienzyme -antienzymic -antiepicenter -antiepileptic -antiepiscopal -antiepiscopist -antiepithelial -antierosion -antierysipelas -antiethnic -antieugenic -antievangelical -antievolution -antievolutionist -antiexpansionist -antiexporting -antiextreme -antieyestrain -antiface -antifaction -antifame -antifanatic -antifat -antifatigue -antifebrile -antifederal -antifederalism -antifederalist -antifelon -antifelony -antifeminism -antifeminist -antiferment -antifermentative -antifertilizer -antifeudal -antifeudalism -antifibrinolysin -antifibrinolysis -antifideism -antifire -antiflash -antiflattering -antiflatulent -antiflux -antifoam -antifoaming -antifogmatic -antiforeign -antiforeignism -antiformin -antifouler -antifouling -antifowl -antifreeze -antifreezing -antifriction -antifrictional -antifrost -antifundamentalist -antifungin -antigalactagogue -antigalactic -antigambling -antiganting -antigen -antigenic -antigenicity -antighostism -antigigmanic -antiglare -antiglyoxalase -antigod -antigonococcic -antigonorrheic -antigorite -antigovernment -antigraft -antigrammatical -antigraph -antigravitate -antigravitational -antigropelos -antigrowth -antiguggler -antigyrous -antihalation -antiharmonist -antihectic -antihelix -antihelminthic -antihemagglutinin -antihemisphere -antihemoglobin -antihemolysin -antihemolytic -antihemorrhagic -antihemorrheidal -antihero -antiheroic -antiheroism -antiheterolysin -antihidrotic -antihierarchical -antihierarchist -antihistamine -antihistaminic -antiholiday -antihormone -antihuff -antihum -antihuman -antihumbuggist -antihunting -antihydrophobic -antihydropic -antihydropin -antihygienic -antihylist -antihypnotic -antihypochondriac -antihypophora -antihysteric -antikathode -antikenotoxin -antiketogen -antiketogenesis -antiketogenic -antikinase -antiking -antiknock -antilabor -antilaborist -antilacrosse -antilacrosser -antilactase -antilapsarian -antileague -antilegalist -antilegomena -antilemic -antilens -antilepsis -antileptic -antilethargic -antileveling -antiliberal -antilibration -antilift -antilipase -antilipoid -antiliquor -antilithic -antiliturgical -antiliturgist -antilobium -antiloemic -antilogarithm -antilogic -antilogical -antilogism -antilogous -antilogy -antiloimic -antilottery -antiluetin -antilynching -antilysin -antilysis -antilyssic -antilytic -antimacassar -antimachine -antimachinery -antimagistratical -antimalaria -antimalarial -antimallein -antimaniac -antimaniacal -antimark -antimartyr -antimask -antimasker -antimasque -antimasquer -antimasquerade -antimaterialist -antimaterialistic -antimatrimonial -antimatrimonialist -antimedical -antimedieval -antimelancholic -antimellin -antimeningococcic -antimension -antimensium -antimephitic -antimere -antimerger -antimeric -antimerism -antimeristem -antimetabole -antimetathesis -antimetathetic -antimeter -antimethod -antimetrical -antimetropia -antimetropic -antimiasmatic -antimicrobic -antimilitarism -antimilitarist -antimilitary -antiministerial -antiministerialist -antiminsion -antimiscegenation -antimission -antimissionary -antimissioner -antimixing -antimnemonic -antimodel -antimodern -antimonarchial -antimonarchic -antimonarchical -antimonarchically -antimonarchicalness -antimonarchist -antimonate -antimonial -antimoniate -antimoniated -antimonic -antimonid -antimonide -antimoniferous -antimonious -antimonite -antimonium -antimoniuret -antimoniureted -antimoniuretted -antimonopolist -antimonopoly -antimonsoon -antimony -antimonyl -antimoral -antimoralism -antimoralist -antimosquito -antimusical -antimycotic -antimythic -antimythical -antinarcotic -antinarrative -antinational -antinationalist -antinationalistic -antinatural -antinegro -antinegroism -antineologian -antinephritic -antinepotic -antineuralgic -antineuritic -antineurotoxin -antineutral -antinial -antinicotine -antinion -antinode -antinoise -antinome -antinomian -antinomianism -antinomic -antinomical -antinomist -antinomy -antinormal -antinosarian -antiodont -antiodontalgic -antiopelmous -antiophthalmic -antiopium -antiopiumist -antiopiumite -antioptimist -antioptionist -antiorgastic -antiorthodox -antioxidant -antioxidase -antioxidizer -antioxidizing -antioxygen -antioxygenation -antioxygenator -antioxygenic -antipacifist -antipapacy -antipapal -antipapalist -antipapism -antipapist -antipapistical -antiparabema -antiparagraphe -antiparagraphic -antiparallel -antiparallelogram -antiparalytic -antiparalytical -antiparasitic -antiparastatitis -antiparliament -antiparliamental -antiparliamentarist -antiparliamentary -antipart -antipass -antipastic -antipatharian -antipathetic -antipathetical -antipathetically -antipatheticalness -antipathic -antipathist -antipathize -antipathogen -antipathy -antipatriarch -antipatriarchal -antipatriot -antipatriotic -antipatriotism -antipedal -antipeduncular -antipellagric -antipepsin -antipeptone -antiperiodic -antiperistalsis -antiperistaltic -antiperistasis -antiperistatic -antiperistatical -antiperistatically -antipersonnel -antiperthite -antipestilential -antipetalous -antipewism -antiphagocytic -antipharisaic -antipharmic -antiphase -antiphilosophic -antiphilosophical -antiphlogistian -antiphlogistic -antiphon -antiphonal -antiphonally -antiphonary -antiphoner -antiphonetic -antiphonic -antiphonical -antiphonically -antiphonon -antiphony -antiphrasis -antiphrastic -antiphrastical -antiphrastically -antiphthisic -antiphthisical -antiphylloxeric -antiphysic -antiphysical -antiphysician -antiplague -antiplanet -antiplastic -antiplatelet -antipleion -antiplenist -antiplethoric -antipleuritic -antiplurality -antipneumococcic -antipodagric -antipodagron -antipodal -antipode -antipodean -antipodes -antipodic -antipodism -antipodist -antipoetic -antipoints -antipolar -antipole -antipolemist -antipolitical -antipollution -antipolo -antipolygamy -antipolyneuritic -antipool -antipooling -antipope -antipopery -antipopular -antipopulationist -antiportable -antiposition -antipoverty -antipragmatic -antipragmatist -antiprecipitin -antipredeterminant -antiprelate -antiprelatic -antiprelatist -antipreparedness -antiprestidigitation -antipriest -antipriestcraft -antiprime -antiprimer -antipriming -antiprinciple -antiprism -antiproductionist -antiprofiteering -antiprohibition -antiprohibitionist -antiprojectivity -antiprophet -antiprostate -antiprostatic -antiprotease -antiproteolysis -antiprotozoal -antiprudential -antipruritic -antipsalmist -antipsoric -antiptosis -antipudic -antipuritan -antiputrefaction -antiputrefactive -antiputrescent -antiputrid -antipyic -antipyonin -antipyresis -antipyretic -antipyrotic -antipyryl -antiqua -antiquarian -antiquarianism -antiquarianize -antiquarianly -antiquarism -antiquartan -antiquary -antiquate -antiquated -antiquatedness -antiquation -antique -antiquely -antiqueness -antiquer -antiquing -antiquist -antiquitarian -antiquity -antirabic -antirabies -antiracemate -antiracer -antirachitic -antirachitically -antiracing -antiradiating -antiradiation -antiradical -antirailwayist -antirational -antirationalism -antirationalist -antirationalistic -antirattler -antireactive -antirealism -antirealistic -antirebating -antirecruiting -antired -antireducer -antireform -antireformer -antireforming -antireformist -antireligion -antireligious -antiremonstrant -antirennet -antirennin -antirent -antirenter -antirentism -antirepublican -antireservationist -antirestoration -antireticular -antirevisionist -antirevolutionary -antirevolutionist -antirheumatic -antiricin -antirickets -antiritual -antiritualistic -antirobin -antiromance -antiromantic -antiromanticism -antiroyal -antiroyalist -antirumor -antirun -antirust -antisacerdotal -antisacerdotalist -antisaloon -antisalooner -antisavage -antiscabious -antiscale -antischolastic -antischool -antiscians -antiscientific -antiscion -antiscolic -antiscorbutic -antiscorbutical -antiscrofulous -antiseismic -antiselene -antisensitizer -antisensuous -antisensuousness -antisepalous -antisepsin -antisepsis -antiseptic -antiseptical -antiseptically -antisepticism -antisepticist -antisepticize -antiseption -antiseptize -antiserum -antishipping -antisialagogue -antisialic -antisiccative -antisideric -antisilverite -antisimoniacal -antisine -antisiphon -antisiphonal -antiskeptical -antiskid -antiskidding -antislavery -antislaveryism -antislickens -antislip -antismoking -antisnapper -antisocial -antisocialist -antisocialistic -antisocialistically -antisociality -antisolar -antisophist -antisoporific -antispace -antispadix -antispasis -antispasmodic -antispast -antispastic -antispectroscopic -antispermotoxin -antispiritual -antispirochetic -antisplasher -antisplenetic -antisplitting -antispreader -antispreading -antisquama -antisquatting -antistadholder -antistadholderian -antistalling -antistaphylococcic -antistate -antistatism -antistatist -antisteapsin -antisterility -antistes -antistimulant -antistock -antistreptococcal -antistreptococcic -antistreptococcin -antistreptococcus -antistrike -antistrophal -antistrophe -antistrophic -antistrophically -antistrophize -antistrophon -antistrumatic -antistrumous -antisubmarine -antisubstance -antisudoral -antisudorific -antisuffrage -antisuffragist -antisun -antisupernaturalism -antisupernaturalist -antisurplician -antisymmetrical -antisyndicalism -antisyndicalist -antisynod -antisyphilitic -antitabetic -antitabloid -antitangent -antitank -antitarnish -antitartaric -antitax -antiteetotalism -antitegula -antitemperance -antitetanic -antitetanolysin -antithalian -antitheft -antitheism -antitheist -antitheistic -antitheistical -antitheistically -antithenar -antitheologian -antitheological -antithermic -antithermin -antitheses -antithesis -antithesism -antithesize -antithet -antithetic -antithetical -antithetically -antithetics -antithrombic -antithrombin -antitintinnabularian -antitobacco -antitobacconal -antitobacconist -antitonic -antitorpedo -antitoxic -antitoxin -antitrade -antitrades -antitraditional -antitragal -antitragic -antitragicus -antitragus -antitrismus -antitrochanter -antitropal -antitrope -antitropic -antitropical -antitropous -antitropy -antitrust -antitrypsin -antitryptic -antituberculin -antituberculosis -antituberculotic -antituberculous -antiturnpikeism -antitwilight -antitypal -antitype -antityphoid -antitypic -antitypical -antitypically -antitypy -antityrosinase -antiunion -antiunionist -antiuratic -antiurease -antiusurious -antiutilitarian -antivaccination -antivaccinationist -antivaccinator -antivaccinist -antivariolous -antivenefic -antivenereal -antivenin -antivenom -antivenomous -antivermicular -antivibrating -antivibrator -antivibratory -antivice -antiviral -antivirus -antivitalist -antivitalistic -antivitamin -antivivisection -antivivisectionist -antivolition -antiwar -antiwarlike -antiwaste -antiwedge -antiweed -antiwit -antixerophthalmic -antizealot -antizymic -antizymotic -antler -antlered -antlerite -antlerless -antlia -antliate -antling -antluetic -antodontalgic -antoeci -antoecian -antoecians -antoninianus -antonomasia -antonomastic -antonomastical -antonomastically -antonomasy -antonym -antonymous -antonymy -antorbital -antproof -antra -antral -antralgia -antre -antrectomy -antrin -antritis -antrocele -antronasal -antrophore -antrophose -antrorse -antrorsely -antroscope -antroscopy -antrotome -antrotomy -antrotympanic -antrotympanitis -antrum -antrustion -antrustionship -antship -antu -antwise -anubing -anucleate -anukabiet -anuloma -anuran -anuresis -anuretic -anuria -anuric -anurous -anury -anus -anusim -anusvara -anutraminosa -anvasser -anvil -anvilsmith -anxietude -anxiety -anxious -anxiously -anxiousness -any -anybody -anyhow -anyone -anyplace -anything -anythingarian -anythingarianism -anyway -anyways -anywhen -anywhere -anywhereness -anywheres -anywhy -anywise -anywither -aogiri -aonach -aorist -aoristic -aoristically -aorta -aortal -aortarctia -aortectasia -aortectasis -aortic -aorticorenal -aortism -aortitis -aortoclasia -aortoclasis -aortolith -aortomalacia -aortomalaxis -aortopathy -aortoptosia -aortoptosis -aortorrhaphy -aortosclerosis -aortostenosis -aortotomy -aosmic -aoudad -apa -apabhramsa -apace -apache -apachism -apachite -apadana -apagoge -apagogic -apagogical -apagogically -apaid -apalit -apandry -apanthropia -apanthropy -apar -aparaphysate -aparejo -aparithmesis -apart -apartheid -aparthrosis -apartment -apartmental -apartness -apasote -apastron -apatan -apatetic -apathetic -apathetical -apathetically -apathic -apathism -apathist -apathistical -apathogenic -apathy -apatite -ape -apeak -apectomy -apedom -apehood -apeiron -apelet -apelike -apeling -apellous -apenteric -apepsia -apepsinia -apepsy -apeptic -aper -aperch -aperea -aperient -aperiodic -aperiodically -aperiodicity -aperispermic -aperistalsis -aperitive -apert -apertly -apertness -apertometer -apertural -aperture -apertured -apery -apesthesia -apesthetic -apesthetize -apetaloid -apetalose -apetalous -apetalousness -apetaly -apex -apexed -aphaeresis -aphaeretic -aphagia -aphakia -aphakial -aphakic -aphanesite -aphanipterous -aphanite -aphanitic -aphanitism -aphanophyre -aphanozygous -aphasia -aphasiac -aphasic -aphelian -aphelion -apheliotropic -apheliotropically -apheliotropism -aphemia -aphemic -aphengescope -aphengoscope -aphenoscope -apheresis -apheretic -aphesis -apheta -aphetic -aphetically -aphetism -aphetize -aphicidal -aphicide -aphid -aphides -aphidian -aphidicide -aphidicolous -aphidid -aphidious -aphidivorous -aphidolysin -aphidophagous -aphidozer -aphilanthropy -aphlaston -aphlebia -aphlogistic -aphnology -aphodal -aphodian -aphodus -aphonia -aphonic -aphonous -aphony -aphoria -aphorism -aphorismatic -aphorismer -aphorismic -aphorismical -aphorismos -aphorist -aphoristic -aphoristically -aphorize -aphorizer -aphotic -aphototactic -aphototaxis -aphototropic -aphototropism -aphrasia -aphrite -aphrizite -aphrodisia -aphrodisiac -aphrodisiacal -aphrodisian -aphroditic -aphroditous -aphrolite -aphronia -aphrosiderite -aphtha -aphthic -aphthitalite -aphthoid -aphthong -aphthongal -aphthongia -aphthous -aphydrotropic -aphydrotropism -aphyllose -aphyllous -aphylly -aphyric -apiaceous -apian -apiarian -apiarist -apiary -apiator -apicad -apical -apically -apices -apicifixed -apicilar -apicillary -apicitis -apickaback -apicoectomy -apicolysis -apicula -apicular -apiculate -apiculated -apiculation -apicultural -apiculture -apiculturist -apiculus -apiece -apieces -apigenin -apii -apiin -apikoros -apilary -apinch -aping -apinoid -apio -apioid -apioidal -apiole -apiolin -apiologist -apiology -apionol -apiose -apiphobia -apish -apishamore -apishly -apishness -apism -apitong -apitpat -apivorous -apjohnite -aplacental -aplacophoran -aplacophorous -aplanat -aplanatic -aplanatically -aplanatism -aplanogamete -aplanospore -aplasia -aplastic -aplenty -aplite -aplitic -aplobasalt -aplodiorite -aplomb -aplome -aploperistomatous -aplostemonous -aplotaxene -aplotomy -aplustre -apnea -apneal -apneic -apneumatic -apneumatosis -apneumonous -apneustic -apoaconitine -apoatropine -apobiotic -apoblast -apocaffeine -apocalypse -apocalypst -apocalypt -apocalyptic -apocalyptical -apocalyptically -apocalypticism -apocalyptism -apocalyptist -apocamphoric -apocarp -apocarpous -apocarpy -apocatastasis -apocatastatic -apocatharsis -apocenter -apocentric -apocentricity -apocha -apocholic -apochromat -apochromatic -apochromatism -apocinchonine -apocodeine -apocopate -apocopated -apocopation -apocope -apocopic -apocrenic -apocrisiary -apocrustic -apocryph -apocryphal -apocryphalist -apocryphally -apocryphalness -apocryphate -apocryphon -apocynaceous -apocyneous -apod -apodal -apodan -apodeipnon -apodeixis -apodema -apodemal -apodematal -apodeme -apodia -apodictic -apodictical -apodictically -apodictive -apodixis -apodosis -apodous -apodyterium -apoembryony -apofenchene -apogaeic -apogalacteum -apogamic -apogamically -apogamous -apogamously -apogamy -apogeal -apogean -apogee -apogeic -apogenous -apogeny -apogeotropic -apogeotropically -apogeotropism -apograph -apographal -apoharmine -apohyal -apoise -apojove -apokrea -apokreos -apolar -apolarity -apolaustic -apolegamic -apollonicon -apologal -apologete -apologetic -apologetical -apologetically -apologetics -apologia -apologist -apologize -apologizer -apologue -apology -apolousis -apolysis -apolytikion -apomecometer -apomecometry -apometabolic -apometabolism -apometabolous -apometaboly -apomictic -apomictical -apomixis -apomorphia -apomorphine -aponeurology -aponeurorrhaphy -aponeurosis -aponeurositis -aponeurotic -aponeurotome -aponeurotomy -aponia -aponic -aponogetonaceous -apoop -apopenptic -apopetalous -apophantic -apophasis -apophatic -apophlegmatic -apophonia -apophony -apophorometer -apophthegm -apophthegmatist -apophyge -apophylactic -apophylaxis -apophyllite -apophyllous -apophysary -apophysate -apophyseal -apophysis -apophysitis -apoplasmodial -apoplastogamous -apoplectic -apoplectical -apoplectically -apoplectiform -apoplectoid -apoplex -apoplexy -apopyle -apoquinamine -apoquinine -aporetic -aporetical -aporhyolite -aporia -aporobranchian -aporose -aporphin -aporphine -aporrhaoid -aporrhegma -aport -aportoise -aposafranine -aposaturn -aposaturnium -aposematic -aposematically -aposepalous -aposia -aposiopesis -aposiopetic -apositia -apositic -aposoro -aposporogony -aposporous -apospory -apostasis -apostasy -apostate -apostatic -apostatical -apostatically -apostatism -apostatize -apostaxis -apostemate -apostematic -apostemation -apostematous -aposteme -aposteriori -aposthia -apostil -apostle -apostlehood -apostleship -apostolate -apostoless -apostoli -apostolic -apostolical -apostolically -apostolicalness -apostolicism -apostolicity -apostolize -apostrophal -apostrophation -apostrophe -apostrophic -apostrophied -apostrophize -apostrophus -apotelesm -apotelesmatic -apotelesmatical -apothecal -apothecary -apothecaryship -apothece -apothecial -apothecium -apothegm -apothegmatic -apothegmatical -apothegmatically -apothegmatist -apothegmatize -apothem -apotheose -apotheoses -apotheosis -apotheosize -apothesine -apothesis -apotome -apotracheal -apotropaic -apotropaion -apotropaism -apotropous -apoturmeric -apotype -apotypic -apout -apoxesis -apozem -apozema -apozemical -apozymase -appall -appalling -appallingly -appallment -appalment -appanage -appanagist -apparatus -apparel -apparelment -apparence -apparency -apparent -apparently -apparentness -apparition -apparitional -apparitor -appassionata -appassionato -appay -appeal -appealability -appealable -appealer -appealing -appealingly -appealingness -appear -appearance -appearanced -appearer -appeasable -appeasableness -appeasably -appease -appeasement -appeaser -appeasing -appeasingly -appeasive -appellability -appellable -appellancy -appellant -appellate -appellation -appellational -appellative -appellatived -appellatively -appellativeness -appellatory -appellee -appellor -append -appendage -appendaged -appendalgia -appendance -appendancy -appendant -appendectomy -appendical -appendicalgia -appendice -appendicectasis -appendicectomy -appendices -appendicial -appendicious -appendicitis -appendicle -appendicocaecostomy -appendicostomy -appendicular -appendicularian -appendiculate -appendiculated -appenditious -appendix -appendorontgenography -appendotome -appentice -apperceive -apperception -apperceptionism -apperceptionist -apperceptionistic -apperceptive -apperceptively -appercipient -appersonation -appertain -appertainment -appertinent -appet -appete -appetence -appetency -appetent -appetently -appetibility -appetible -appetibleness -appetite -appetition -appetitional -appetitious -appetitive -appetize -appetizement -appetizer -appetizingly -appinite -applanate -applanation -applaud -applaudable -applaudably -applauder -applaudingly -applause -applausive -applausively -apple -appleberry -appleblossom -applecart -appledrane -applegrower -applejack -applejohn -applemonger -applenut -appleringy -appleroot -applesauce -applewife -applewoman -appliable -appliableness -appliably -appliance -appliant -applicability -applicable -applicableness -applicably -applicancy -applicant -applicate -application -applicative -applicatively -applicator -applicatorily -applicatory -applied -appliedly -applier -applique -applosion -applosive -applot -applotment -apply -applyingly -applyment -appoggiatura -appoint -appointable -appointe -appointee -appointer -appointive -appointment -appointor -apport -apportion -apportionable -apportioner -apportionment -apposability -apposable -appose -apposer -apposiopestic -apposite -appositely -appositeness -apposition -appositional -appositionally -appositive -appositively -appraisable -appraisal -appraise -appraisement -appraiser -appraising -appraisingly -appraisive -appreciable -appreciably -appreciant -appreciate -appreciatingly -appreciation -appreciational -appreciativ -appreciative -appreciatively -appreciativeness -appreciator -appreciatorily -appreciatory -appredicate -apprehend -apprehender -apprehendingly -apprehensibility -apprehensible -apprehensibly -apprehension -apprehensive -apprehensively -apprehensiveness -apprend -apprense -apprentice -apprenticehood -apprenticement -apprenticeship -appressed -appressor -appressorial -appressorium -appreteur -apprise -apprize -apprizement -apprizer -approach -approachability -approachabl -approachable -approachableness -approacher -approaching -approachless -approachment -approbate -approbation -approbative -approbativeness -approbator -approbatory -approof -appropinquate -appropinquation -appropinquity -appropre -appropriable -appropriate -appropriately -appropriateness -appropriation -appropriative -appropriativeness -appropriator -approvable -approvableness -approval -approvance -approve -approvedly -approvedness -approvement -approver -approvingly -approximal -approximate -approximately -approximation -approximative -approximatively -approximativeness -approximator -appulse -appulsion -appulsive -appulsively -appurtenance -appurtenant -apractic -apraxia -apraxic -apricate -aprication -aprickle -apricot -apriori -apriorism -apriorist -aprioristic -apriority -aproctia -aproctous -apron -aproneer -apronful -apronless -apronlike -apropos -aprosexia -aprosopia -aprosopous -aproterodont -apse -apselaphesia -apselaphesis -apsidal -apsidally -apsides -apsidiole -apsis -apsychia -apsychical -apt -apteral -apteran -apterial -apterium -apteroid -apterous -apterygial -apterygote -apterygotous -aptitude -aptitudinal -aptitudinally -aptly -aptness -aptote -aptotic -aptyalia -aptyalism -aptychus -apulmonic -apulse -apurpose -apyonin -apyrene -apyretic -apyrexia -apyrexial -apyrexy -apyrotype -apyrous -aqua -aquabelle -aquabib -aquacade -aquacultural -aquaculture -aquaemanale -aquafortist -aquage -aquagreen -aquamarine -aquameter -aquaplane -aquapuncture -aquarelle -aquarellist -aquaria -aquarial -aquarian -aquariist -aquarium -aquarter -aquascutum -aquatic -aquatical -aquatically -aquatile -aquatint -aquatinta -aquatinter -aquation -aquativeness -aquatone -aquavalent -aquavit -aqueduct -aqueoglacial -aqueoigneous -aqueomercurial -aqueous -aqueously -aqueousness -aquicolous -aquicultural -aquiculture -aquiculturist -aquifer -aquiferous -aquifoliaceous -aquiform -aquilawood -aquilege -aquiline -aquilino -aquincubital -aquincubitalism -aquintocubital -aquintocubitalism -aquiparous -aquiver -aquo -aquocapsulitis -aquocarbonic -aquocellolitis -aquopentamminecobaltic -aquose -aquosity -aquotization -aquotize -ar -ara -araba -araban -arabana -arabesque -arabesquely -arabesquerie -arability -arabin -arabinic -arabinose -arabinosic -arabit -arabitol -arabiyeh -arable -araca -aracanga -aracari -araceous -arachic -arachidonic -arachin -arachnactis -arachnean -arachnid -arachnidan -arachnidial -arachnidism -arachnidium -arachnism -arachnitis -arachnoid -arachnoidal -arachnoidea -arachnoidean -arachnoiditis -arachnological -arachnologist -arachnology -arachnophagous -arachnopia -arad -arado -araeostyle -araeosystyle -aragonite -araguato -arain -arakawaite -arake -araliaceous -araliad -aralie -aralkyl -aralkylated -aramayoite -aramina -araneid -araneidan -araneiform -aranein -araneologist -araneology -araneous -aranga -arango -aranzada -arapahite -arapaima -araphorostic -arapunga -arar -arara -araracanga -ararao -ararauna -arariba -araroba -arati -aration -aratory -araucarian -arba -arbacin -arbalest -arbalester -arbalestre -arbalestrier -arbalist -arbalister -arbalo -arbiter -arbitrable -arbitrager -arbitragist -arbitral -arbitrament -arbitrarily -arbitrariness -arbitrary -arbitrate -arbitration -arbitrational -arbitrationist -arbitrative -arbitrator -arbitratorship -arbitratrix -arbitrement -arbitrer -arbitress -arboloco -arbor -arboraceous -arboral -arborary -arborator -arboreal -arboreally -arborean -arbored -arboreous -arborescence -arborescent -arborescently -arboresque -arboret -arboreta -arboretum -arborical -arboricole -arboricoline -arboricolous -arboricultural -arboriculture -arboriculturist -arboriform -arborist -arborization -arborize -arboroid -arborolatry -arborous -arborvitae -arborway -arbuscle -arbuscula -arbuscular -arbuscule -arbusterol -arbustum -arbutase -arbute -arbutean -arbutin -arbutinase -arbutus -arc -arca -arcade -arcadian -arcana -arcanal -arcane -arcanite -arcanum -arcate -arcature -arch -archabomination -archae -archaecraniate -archaeogeology -archaeographic -archaeographical -archaeography -archaeolatry -archaeolith -archaeolithic -archaeologer -archaeologian -archaeologic -archaeological -archaeologically -archaeologist -archaeology -archaeostoma -archaeostomatous -archagitator -archaic -archaical -archaically -archaicism -archaism -archaist -archaistic -archaize -archaizer -archangel -archangelic -archangelical -archangelship -archantagonist -archantiquary -archapostate -archapostle -archarchitect -archarios -archartist -archband -archbeacon -archbeadle -archbishop -archbishopess -archbishopric -archbishopry -archbotcher -archboutefeu -archbuffoon -archbuilder -archchampion -archchaplain -archcharlatan -archcheater -archchemic -archchief -archchronicler -archcity -archconfraternity -archconsoler -archconspirator -archcorrupter -archcorsair -archcount -archcozener -archcriminal -archcritic -archcrown -archcupbearer -archdapifer -archdapifership -archdeacon -archdeaconate -archdeaconess -archdeaconry -archdeaconship -archdean -archdeanery -archdeceiver -archdefender -archdemon -archdepredator -archdespot -archdetective -archdevil -archdiocesan -archdiocese -archdiplomatist -archdissembler -archdisturber -archdivine -archdogmatist -archdolt -archdruid -archducal -archduchess -archduchy -archduke -archdukedom -arche -archeal -archearl -archebiosis -archecclesiastic -archecentric -arched -archegone -archegonial -archegoniate -archegoniophore -archegonium -archegony -archeion -archelogy -archemperor -archencephalic -archenemy -archengineer -archenteric -archenteron -archeocyte -archer -archeress -archerfish -archership -archery -arches -archespore -archesporial -archesporium -archetypal -archetypally -archetype -archetypic -archetypical -archetypically -archetypist -archeunuch -archeus -archexorcist -archfelon -archfiend -archfire -archflamen -archflatterer -archfoe -archfool -archform -archfounder -archfriend -archgenethliac -archgod -archgomeral -archgovernor -archgunner -archhead -archheart -archheresy -archheretic -archhost -archhouse -archhumbug -archhypocrisy -archhypocrite -archiater -archibenthal -archibenthic -archibenthos -archiblast -archiblastic -archiblastoma -archiblastula -archicantor -archicarp -archicerebrum -archichlamydeous -archicleistogamous -archicleistogamy -archicoele -archicontinent -archicyte -archicytula -archidiaconal -archidiaconate -archididascalian -archididascalos -archidome -archiepiscopacy -archiepiscopal -archiepiscopally -archiepiscopate -archiereus -archigaster -archigastrula -archigenesis -archigonic -archigonocyte -archigony -archiheretical -archikaryon -archil -archilithic -archilowe -archimage -archimagus -archimandrite -archimime -archimorphic -archimorula -archimperial -archimperialism -archimperialist -archimperialistic -archimpressionist -archineuron -archinfamy -archinformer -arching -archipallial -archipallium -archipelagian -archipelagic -archipelago -archipin -archiplasm -archiplasmic -archiprelatical -archipresbyter -archipterygial -archipterygium -archisperm -archisphere -archispore -archistome -archisupreme -archisymbolical -architect -architective -architectonic -architectonically -architectonics -architectress -architectural -architecturalist -architecturally -architecture -architecturesque -architis -architraval -architrave -architraved -architypographer -archival -archive -archivist -archivolt -archizoic -archjockey -archking -archknave -archleader -archlecher -archleveler -archlexicographer -archliar -archlute -archly -archmachine -archmagician -archmagirist -archmarshal -archmediocrity -archmessenger -archmilitarist -archmime -archminister -archmock -archmocker -archmockery -archmonarch -archmonarchist -archmonarchy -archmugwump -archmurderer -archmystagogue -archness -archocele -archocystosyrinx -archology -archon -archonship -archont -archontate -archontic -archoplasm -archoplasmic -archoptoma -archoptosis -archorrhagia -archorrhea -archostegnosis -archostenosis -archosyrinx -archoverseer -archpall -archpapist -archpastor -archpatriarch -archpatron -archphilosopher -archphylarch -archpiece -archpilferer -archpillar -archpirate -archplagiarist -archplagiary -archplayer -archplotter -archplunderer -archplutocrat -archpoet -archpolitician -archpontiff -archpractice -archprelate -archprelatic -archprelatical -archpresbyter -archpresbyterate -archpresbytery -archpretender -archpriest -archpriesthood -archpriestship -archprimate -archprince -archprophet -archprotopope -archprototype -archpublican -archpuritan -archradical -archrascal -archreactionary -archrebel -archregent -archrepresentative -archrobber -archrogue -archruler -archsacrificator -archsacrificer -archsaint -archsatrap -archscoundrel -archseducer -archsee -archsewer -archshepherd -archsin -archsnob -archspirit -archspy -archsteward -archswindler -archsynagogue -archtempter -archthief -archtraitor -archtreasurer -archtreasurership -archturncoat -archtyrant -archurger -archvagabond -archvampire -archvestryman -archvillain -archvillainy -archvisitor -archwag -archway -archwench -archwise -archworker -archworkmaster -archy -arciferous -arcifinious -arciform -arcing -arcked -arcking -arcocentrous -arcocentrum -arcograph -arctation -arctian -arctic -arctically -arctician -arcticize -arcticward -arcticwards -arctiid -arctoid -arctoidean -arcual -arcuale -arcuate -arcuated -arcuately -arcuation -arcubalist -arcubalister -arcula -arculite -ardassine -ardeb -ardella -ardency -ardennite -ardent -ardently -ardentness -ardish -ardoise -ardor -ardri -ardu -arduinite -arduous -arduously -arduousness -ardurous -are -area -areach -aread -areal -areality -arear -areasoner -areaway -arecaceous -arecaidin -arecaidine -arecain -arecaine -arecolidin -arecolidine -arecolin -arecoline -ared -areek -areel -arefact -arefaction -aregenerative -aregeneratory -areito -arena -arenaceous -arenae -arenariae -arenarious -arenation -arend -arendalite -areng -arenicole -arenicolite -arenicolous -arenilitic -arenoid -arenose -arenosity -arent -areocentric -areographer -areographic -areographical -areographically -areography -areola -areolar -areolate -areolated -areolation -areole -areolet -areologic -areological -areologically -areologist -areology -areometer -areometric -areometrical -areometry -areotectonics -areroscope -aretaics -arete -arfvedsonite -argal -argala -argali -argans -argasid -argeers -argel -argemony -argenol -argent -argental -argentamid -argentamide -argentamin -argentamine -argentate -argentation -argenteous -argenter -argenteum -argentic -argenticyanide -argentide -argentiferous -argentine -argentinitrate -argention -argentite -argentojarosite -argentol -argentometric -argentometrically -argentometry -argenton -argentoproteinum -argentose -argentous -argentum -arghan -arghel -arghool -argil -argillaceous -argilliferous -argillite -argillitic -argilloarenaceous -argillocalcareous -argillocalcite -argilloferruginous -argilloid -argillomagnesian -argillous -arginine -argininephosphoric -argo -argol -argolet -argon -argosy -argot -argotic -arguable -argue -arguer -argufier -argufy -argument -argumental -argumentation -argumentatious -argumentative -argumentatively -argumentativeness -argumentator -argumentatory -argusfish -argute -argutely -arguteness -argyranthemous -argyranthous -argyria -argyric -argyrite -argyrocephalous -argyrodite -argyrose -argyrosis -argyrythrose -arhar -arhat -arhatship -arhythmic -aria -aribine -aricine -arid -aridge -aridian -aridity -aridly -aridness -ariegite -ariel -arienzo -arietation -arietinous -arietta -aright -arightly -arigue -aril -ariled -arillary -arillate -arillated -arilliform -arillode -arillodium -arilloid -arillus -ariose -arioso -ariot -aripple -arisard -arise -arisen -arist -arista -aristarchy -aristate -aristocracy -aristocrat -aristocratic -aristocratical -aristocratically -aristocraticalness -aristocraticism -aristocraticness -aristocratism -aristodemocracy -aristodemocratical -aristogenesis -aristogenetic -aristogenic -aristogenics -aristolochiaceous -aristolochin -aristolochine -aristological -aristologist -aristology -aristomonarchy -aristorepublicanism -aristotype -aristulate -arite -arithmetic -arithmetical -arithmetically -arithmetician -arithmetization -arithmetize -arithmic -arithmocracy -arithmocratic -arithmogram -arithmograph -arithmography -arithmomania -arithmometer -arizonite -arjun -ark -arkansite -arkite -arkose -arkosic -arksutite -arles -arm -armada -armadilla -armadillo -armagnac -armament -armamentarium -armamentary -armangite -armariolum -armarium -armature -armbone -armchair -armchaired -armed -armeniaceous -armer -armet -armful -armgaunt -armhole -armhoop -armied -armiferous -armiger -armigeral -armigerous -armil -armilla -armillary -armillate -armillated -arming -armipotence -armipotent -armisonant -armisonous -armistice -armless -armlet -armload -armoire -armonica -armor -armored -armorer -armorial -armoried -armorist -armorproof -armorwise -armory -armozeen -armpiece -armpit -armplate -armrack -armrest -arms -armscye -armure -army -arn -arna -arnberry -arnee -arni -arnica -arnotta -arnotto -arnut -aroar -aroast -arock -aroeira -aroid -aroideous -aroint -arolium -arolla -aroma -aromacity -aromadendrin -aromatic -aromatically -aromaticness -aromatite -aromatites -aromatization -aromatize -aromatizer -aromatophor -aromatophore -aroon -arose -around -arousal -arouse -arousement -arouser -arow -aroxyl -arpeggiando -arpeggiated -arpeggiation -arpeggio -arpeggioed -arpen -arpent -arquerite -arquifoux -arracach -arracacha -arrack -arrah -arraign -arraigner -arraignment -arrame -arrange -arrangeable -arrangement -arranger -arrant -arrantly -arras -arrased -arrasene -arrastra -arrastre -arratel -arrau -array -arrayal -arrayer -arrayment -arrear -arrearage -arrect -arrector -arrendation -arrenotokous -arrenotoky -arrent -arrentable -arrentation -arreptitious -arrest -arrestable -arrestation -arrestee -arrester -arresting -arrestingly -arrestive -arrestment -arrestor -arrhenal -arrhenoid -arrhenotokous -arrhenotoky -arrhinia -arrhizal -arrhizous -arrhythmia -arrhythmic -arrhythmical -arrhythmically -arrhythmous -arrhythmy -arriage -arriba -arride -arridge -arrie -arriere -arrimby -arris -arrish -arrisways -arriswise -arrival -arrive -arriver -arroba -arrogance -arrogancy -arrogant -arrogantly -arrogantness -arrogate -arrogatingly -arrogation -arrogative -arrogator -arrojadite -arrope -arrosive -arrow -arrowbush -arrowed -arrowhead -arrowheaded -arrowleaf -arrowless -arrowlet -arrowlike -arrowplate -arrowroot -arrowsmith -arrowstone -arrowweed -arrowwood -arrowworm -arrowy -arroyo -arsanilic -arse -arsedine -arsenal -arsenate -arsenation -arseneted -arsenetted -arsenfast -arsenferratose -arsenhemol -arseniasis -arseniate -arsenic -arsenical -arsenicalism -arsenicate -arsenicism -arsenicize -arsenicophagy -arsenide -arseniferous -arsenillo -arseniopleite -arseniosiderite -arsenious -arsenism -arsenite -arsenium -arseniuret -arseniureted -arsenization -arseno -arsenobenzene -arsenobenzol -arsenobismite -arsenoferratin -arsenofuran -arsenohemol -arsenolite -arsenophagy -arsenophen -arsenophenol -arsenophenylglycin -arsenopyrite -arsenostyracol -arsenotherapy -arsenotungstates -arsenotungstic -arsenous -arsenoxide -arsenyl -arses -arsesmart -arsheen -arshin -arshine -arsine -arsinic -arsino -arsis -arsle -arsmetrik -arsmetrike -arsnicker -arsoite -arson -arsonate -arsonation -arsonic -arsonist -arsonite -arsonium -arsono -arsonvalization -arsphenamine -arsyl -arsylene -art -artaba -artabe -artal -artar -artarine -artcraft -artefact -artel -artemisic -artemisin -arteriagra -arterial -arterialization -arterialize -arterially -arteriarctia -arteriasis -arteriectasia -arteriectasis -arteriectopia -arterin -arterioarctia -arteriocapillary -arteriococcygeal -arteriodialysis -arteriodiastasis -arteriofibrosis -arteriogenesis -arteriogram -arteriograph -arteriography -arteriole -arteriolith -arteriology -arteriolosclerosis -arteriomalacia -arteriometer -arteriomotor -arterionecrosis -arteriopalmus -arteriopathy -arteriophlebotomy -arterioplania -arterioplasty -arteriopressor -arteriorenal -arteriorrhagia -arteriorrhaphy -arteriorrhexis -arteriosclerosis -arteriosclerotic -arteriospasm -arteriostenosis -arteriostosis -arteriostrepsis -arteriosympathectomy -arteriotome -arteriotomy -arteriotrepsis -arterious -arteriovenous -arterioversion -arterioverter -arteritis -artery -artesian -artful -artfully -artfulness -artha -arthel -arthemis -arthragra -arthral -arthralgia -arthralgic -arthrectomy -arthredema -arthrempyesis -arthresthesia -arthritic -arthritical -arthriticine -arthritis -arthritism -arthrobacterium -arthrobranch -arthrobranchia -arthrocace -arthrocarcinoma -arthrocele -arthrochondritis -arthroclasia -arthrocleisis -arthroclisis -arthroderm -arthrodesis -arthrodia -arthrodial -arthrodic -arthrodiran -arthrodire -arthrodirous -arthrodynia -arthrodynic -arthroempyema -arthroempyesis -arthroendoscopy -arthrogastran -arthrogenous -arthrography -arthrogryposis -arthrolite -arthrolith -arthrolithiasis -arthrology -arthromeningitis -arthromere -arthromeric -arthrometer -arthrometry -arthroncus -arthroneuralgia -arthropathic -arthropathology -arthropathy -arthrophlogosis -arthrophyma -arthroplastic -arthroplasty -arthropleura -arthropleure -arthropod -arthropodal -arthropodan -arthropodous -arthropomatous -arthropterous -arthropyosis -arthrorheumatism -arthrorrhagia -arthrosclerosis -arthrosia -arthrosis -arthrospore -arthrosporic -arthrosporous -arthrosteitis -arthrosterigma -arthrostome -arthrostomy -arthrosynovitis -arthrosyrinx -arthrotome -arthrotomy -arthrotrauma -arthrotropic -arthrotyphoid -arthrous -arthroxerosis -arthrozoan -arthrozoic -artiad -artichoke -article -articled -articulability -articulable -articulacy -articulant -articular -articulare -articularly -articulary -articulate -articulated -articulately -articulateness -articulation -articulationist -articulative -articulator -articulatory -articulite -articulus -artifact -artifactitious -artifice -artificer -artificership -artificial -artificialism -artificiality -artificialize -artificially -artificialness -artiller -artillerist -artillery -artilleryman -artilleryship -artiness -artinite -artiodactyl -artiodactylous -artiphyllous -artisan -artisanship -artist -artistdom -artiste -artistic -artistical -artistically -artistry -artless -artlessly -artlessness -artlet -artlike -artocarpad -artocarpeous -artocarpous -artolater -artophagous -artophorion -artotype -artotypy -artware -arty -aru -arui -aruke -arumin -arundiferous -arundinaceous -arundineous -arupa -arusa -arusha -arustle -arval -arvel -arvicole -arvicoline -arvicolous -arviculture -arx -ary -aryballoid -aryballus -aryepiglottic -aryl -arylamine -arylamino -arylate -arytenoid -arytenoidal -arzan -arzrunite -arzun -as -asaddle -asafetida -asak -asale -asana -asaphia -asaphid -asaprol -asarabacca -asarite -asaron -asarone -asarotum -asbest -asbestic -asbestiform -asbestine -asbestinize -asbestoid -asbestoidal -asbestos -asbestosis -asbestous -asbestus -asbolin -asbolite -ascan -ascare -ascariasis -ascaricidal -ascaricide -ascarid -ascarides -ascaridiasis -ascaridole -ascaron -ascellus -ascend -ascendable -ascendance -ascendancy -ascendant -ascendence -ascendency -ascendent -ascender -ascendible -ascending -ascendingly -ascension -ascensional -ascensionist -ascensive -ascent -ascertain -ascertainable -ascertainableness -ascertainably -ascertainer -ascertainment -ascescency -ascescent -ascetic -ascetical -ascetically -asceticism -aschaffite -ascham -aschistic -asci -ascian -ascidian -ascidiate -ascidicolous -ascidiferous -ascidiform -ascidioid -ascidiozooid -ascidium -asciferous -ascigerous -ascii -ascites -ascitic -ascitical -ascititious -asclent -asclepiad -asclepiadaceous -asclepiadeous -asclepidin -asclepidoid -asclepin -ascocarp -ascocarpous -ascogenous -ascogone -ascogonial -ascogonidium -ascogonium -ascolichen -ascoma -ascomycetal -ascomycete -ascomycetous -ascon -ascophore -ascophorous -ascorbic -ascospore -ascosporic -ascosporous -ascot -ascribable -ascribe -ascript -ascription -ascriptitii -ascriptitious -ascriptitius -ascry -ascula -ascus -ascyphous -asdic -ase -asearch -asecretory -aseethe -aseismatic -aseismic -aseismicity -aseity -aselgeia -asellate -asem -asemasia -asemia -asepsis -aseptate -aseptic -aseptically -asepticism -asepticize -aseptify -aseptol -aseptolin -asexual -asexuality -asexualization -asexualize -asexually -asfetida -ash -ashake -ashame -ashamed -ashamedly -ashamedness -ashamnu -ashberry -ashcake -ashen -asherah -ashery -ashes -ashet -ashily -ashimmer -ashine -ashiness -ashipboard -ashiver -ashkoko -ashlar -ashlared -ashlaring -ashless -ashling -ashman -ashore -ashpan -ashpit -ashplant -ashraf -ashrafi -ashthroat -ashur -ashweed -ashwort -ashy -asialia -aside -asidehand -asideness -asiderite -asideu -asiento -asilid -asimen -asimmer -asinego -asinine -asininely -asininity -asiphonate -asiphonogama -asitia -ask -askable -askance -askant -askar -askari -asker -askew -askingly -askip -asklent -askos -aslant -aslantwise -aslaver -asleep -aslop -aslope -aslumber -asmack -asmalte -asmear -asmile -asmoke -asmolder -asniffle -asnort -asoak -asocial -asok -asoka -asomatophyte -asomatous -asonant -asonia -asop -asor -asouth -asp -aspace -aspalathus -asparagic -asparagine -asparaginic -asparaginous -asparagus -asparagyl -asparkle -aspartate -aspartic -aspartyl -aspect -aspectable -aspectant -aspection -aspectual -aspen -asper -asperate -asperation -aspergation -asperge -asperger -aspergil -aspergill -aspergilliform -aspergillin -aspergillosis -aspergillum -aspergillus -asperifoliate -asperifolious -asperite -asperity -aspermatic -aspermatism -aspermatous -aspermia -aspermic -aspermous -asperous -asperously -asperse -aspersed -asperser -aspersion -aspersive -aspersively -aspersor -aspersorium -aspersory -asperuloside -asperulous -asphalt -asphaltene -asphalter -asphaltic -asphaltite -asphaltum -aspheterism -aspheterize -asphodel -asphyctic -asphyctous -asphyxia -asphyxial -asphyxiant -asphyxiate -asphyxiation -asphyxiative -asphyxiator -asphyxied -asphyxy -aspic -aspiculate -aspiculous -aspidate -aspidiaria -aspidinol -aspidium -aspidobranchiate -aspidomancy -aspidospermine -aspirant -aspirata -aspirate -aspiration -aspirator -aspiratory -aspire -aspirer -aspirin -aspiring -aspiringly -aspiringness -aspish -asplanchnic -asplenioid -asporogenic -asporogenous -asporous -asport -asportation -asporulate -aspout -asprawl -aspread -aspring -asprout -asquare -asquat -asqueal -asquint -asquirm -ass -assacu -assagai -assai -assail -assailable -assailableness -assailant -assailer -assailment -assapan -assapanic -assarion -assart -assary -assassin -assassinate -assassination -assassinative -assassinator -assassinatress -assassinist -assate -assation -assault -assaultable -assaulter -assaut -assay -assayable -assayer -assaying -assbaa -asse -assecuration -assecurator -assedation -assegai -asself -assemblable -assemblage -assemble -assembler -assembly -assemblyman -assent -assentaneous -assentation -assentatious -assentator -assentatorily -assentatory -assented -assenter -assentient -assenting -assentingly -assentive -assentiveness -assentor -assert -assertable -assertative -asserter -assertible -assertion -assertional -assertive -assertively -assertiveness -assertor -assertorial -assertorially -assertoric -assertorical -assertorically -assertorily -assertory -assertress -assertrix -assertum -assess -assessable -assessably -assessed -assessee -assession -assessionary -assessment -assessor -assessorial -assessorship -assessory -asset -assets -assever -asseverate -asseveratingly -asseveration -asseverative -asseveratively -asseveratory -asshead -assi -assibilate -assibilation -assident -assidual -assidually -assiduity -assiduous -assiduously -assiduousness -assientist -assiento -assify -assign -assignability -assignable -assignably -assignat -assignation -assigned -assignee -assigneeship -assigner -assignment -assignor -assilag -assimilability -assimilable -assimilate -assimilation -assimilationist -assimilative -assimilativeness -assimilator -assimilatory -assis -assise -assish -assishly -assishness -assist -assistance -assistant -assistanted -assistantship -assistency -assister -assistful -assistive -assistless -assistor -assize -assizement -assizer -assizes -asslike -assman -assmanship -associability -associable -associableness -associate -associated -associatedness -associateship -association -associational -associationalism -associationalist -associationism -associationist -associationistic -associative -associatively -associativeness -associator -associatory -assoil -assoilment -assoilzie -assonance -assonanced -assonant -assonantal -assonantic -assonate -assort -assortative -assorted -assortedness -assorter -assortive -assortment -assuade -assuage -assuagement -assuager -assuasive -assubjugate -assuetude -assumable -assumably -assume -assumed -assumedly -assumer -assuming -assumingly -assumingness -assumpsit -assumption -assumptious -assumptiousness -assumptive -assumptively -assurable -assurance -assurant -assure -assured -assuredly -assuredness -assurer -assurge -assurgency -assurgent -assuring -assuringly -assyntite -assythment -ast -asta -astalk -astarboard -astare -astart -astasia -astatic -astatically -astaticism -astatine -astatize -astatizer -astay -asteam -asteatosis -asteep -asteer -asteism -astelic -astely -aster -asteraceous -astereognosis -asteria -asterial -asteriated -asterikos -asterin -asterioid -asterion -asterisk -asterism -asterismal -astern -asternal -asternia -asteroid -asteroidal -asteroidean -asterophyllite -asterospondylic -asterospondylous -asterwort -asthenia -asthenic -asthenical -asthenobiosis -asthenobiotic -asthenolith -asthenology -asthenopia -asthenopic -asthenosphere -astheny -asthma -asthmatic -asthmatical -asthmatically -asthmatoid -asthmogenic -asthore -asthorin -astichous -astigmatic -astigmatical -astigmatically -astigmatism -astigmatizer -astigmatometer -astigmatoscope -astigmatoscopy -astigmia -astigmism -astigmometer -astigmometry -astilbe -astint -astipulate -astir -astite -astomatal -astomatous -astomia -astomous -astonied -astonish -astonishedly -astonisher -astonishing -astonishingly -astonishingness -astonishment -astony -astoop -astor -astound -astoundable -astounding -astoundingly -astoundment -astraddle -astraean -astraeid -astraeiform -astragal -astragalar -astragalectomy -astragali -astragalocalcaneal -astragalocentral -astragalomancy -astragalonavicular -astragaloscaphoid -astragalotibial -astragalus -astrain -astrakanite -astrakhan -astral -astrally -astrand -astraphobia -astrapophobia -astray -astream -astrer -astrict -astriction -astrictive -astrictively -astrictiveness -astride -astrier -astriferous -astrild -astringe -astringency -astringent -astringently -astringer -astroalchemist -astroblast -astrochemist -astrochemistry -astrochronological -astrocyte -astrocytoma -astrocytomata -astrodiagnosis -astrodome -astrofel -astrogeny -astroglia -astrognosy -astrogonic -astrogony -astrograph -astrographic -astrography -astroid -astroite -astrolabe -astrolabical -astrolater -astrolatry -astrolithology -astrologaster -astrologer -astrologian -astrologic -astrological -astrologically -astrologistic -astrologize -astrologous -astrology -astromancer -astromancy -astromantic -astrometeorological -astrometeorologist -astrometeorology -astrometer -astrometrical -astrometry -astronaut -astronautics -astronomer -astronomic -astronomical -astronomically -astronomics -astronomize -astronomy -astrophil -astrophobia -astrophotographic -astrophotography -astrophotometer -astrophotometrical -astrophotometry -astrophyllite -astrophysical -astrophysicist -astrophysics -astroscope -astroscopy -astrospectral -astrospectroscopic -astrosphere -astrotheology -astrut -astucious -astuciously -astucity -astute -astutely -astuteness -astylar -asudden -asunder -aswail -aswarm -asway -asweat -aswell -aswim -aswing -aswirl -aswoon -aswooned -asyla -asyllabia -asyllabic -asyllabical -asylum -asymbiotic -asymbolia -asymbolic -asymbolical -asymmetric -asymmetrical -asymmetrically -asymmetry -asymptomatic -asymptote -asymptotic -asymptotical -asymptotically -asynapsis -asynaptic -asynartete -asynartetic -asynchronism -asynchronous -asyndesis -asyndetic -asyndetically -asyndeton -asynergia -asynergy -asyngamic -asyngamy -asyntactic -asyntrophy -asystole -asystolic -asystolism -asyzygetic -at -atabal -atabeg -atabek -atacamite -atactic -atactiform -atafter -ataman -atamasco -atangle -atap -ataraxia -ataraxy -atatschite -ataunt -atavi -atavic -atavism -atavist -atavistic -atavistically -atavus -ataxaphasia -ataxia -ataxiagram -ataxiagraph -ataxiameter -ataxiaphasia -ataxic -ataxinomic -ataxite -ataxonomic -ataxophemia -ataxy -atazir -atbash -atchison -ate -atebrin -atechnic -atechnical -atechny -ateeter -atef -atelectasis -atelectatic -ateleological -atelestite -atelets -atelier -ateliosis -atelo -atelocardia -atelocephalous -ateloglossia -atelognathia -atelomitic -atelomyelia -atelopodia -ateloprosopia -atelorachidia -atelostomia -atemporal -ates -ateuchi -ateuchus -athalamous -athalline -athanasia -athanasy -athanor -athar -athecate -atheism -atheist -atheistic -atheistical -atheistically -atheisticalness -atheize -atheizer -athelia -atheling -athematic -athenaeum -athenee -athenor -atheological -atheologically -atheology -atheous -athericeran -athericerous -atherine -athermancy -athermanous -athermic -athermous -atheroma -atheromasia -atheromata -atheromatosis -atheromatous -atherosclerosis -athetesis -athetize -athetoid -athetosic -athetosis -athing -athirst -athlete -athletehood -athletic -athletical -athletically -athleticism -athletics -athletism -athletocracy -athlothete -athlothetes -athodyd -athort -athrepsia -athreptic -athrill -athrive -athrob -athrocyte -athrocytosis -athrogenic -athrong -athrough -athwart -athwarthawse -athwartship -athwartships -athwartwise -athymia -athymic -athymy -athyreosis -athyria -athyrid -athyroid -athyroidism -athyrosis -atilt -atimon -atinga -atingle -atinkle -atip -atis -atlantad -atlantal -atlantes -atlantic -atlantite -atlantoaxial -atlantodidymus -atlantomastoid -atlantoodontoid -atlas -atlatl -atle -atlee -atloaxoid -atloid -atloidean -atloidoaxoid -atma -atman -atmiatrics -atmiatry -atmid -atmidalbumin -atmidometer -atmidometry -atmo -atmocausis -atmocautery -atmoclastic -atmogenic -atmograph -atmologic -atmological -atmologist -atmology -atmolysis -atmolyzation -atmolyze -atmolyzer -atmometer -atmometric -atmometry -atmos -atmosphere -atmosphereful -atmosphereless -atmospheric -atmospherical -atmospherically -atmospherics -atmospherology -atmostea -atmosteal -atmosteon -atocha -atocia -atokal -atoke -atokous -atoll -atom -atomatic -atomechanics -atomerg -atomic -atomical -atomically -atomician -atomicism -atomicity -atomics -atomiferous -atomism -atomist -atomistic -atomistical -atomistically -atomistics -atomity -atomization -atomize -atomizer -atomology -atomy -atonable -atonal -atonalism -atonalistic -atonality -atonally -atone -atonement -atoneness -atoner -atonia -atonic -atonicity -atoningly -atony -atop -atophan -atopic -atopite -atopy -atour -atoxic -atoxyl -atrabilarian -atrabilarious -atrabiliar -atrabiliarious -atrabiliary -atrabilious -atrabiliousness -atracheate -atragene -atrail -atrament -atramental -atramentary -atramentous -atraumatic -atrematous -atremble -atrepsy -atreptic -atresia -atresic -atresy -atretic -atria -atrial -atrichia -atrichosis -atrichous -atrickle -atrienses -atriensis -atriocoelomic -atrioporal -atriopore -atrioventricular -atrip -atrium -atrocha -atrochal -atrochous -atrocious -atrociously -atrociousness -atrocity -atrolactic -atropaceous -atropal -atropamine -atrophia -atrophiated -atrophic -atrophied -atrophoderma -atrophy -atropia -atropic -atropine -atropinism -atropinization -atropinize -atropism -atropous -atrorubent -atrosanguineous -atroscine -atrous -atry -atta -attacco -attach -attachable -attachableness -attache -attached -attachedly -attacher -attacheship -attachment -attack -attackable -attacker -attacolite -attacus -attagen -attaghan -attain -attainability -attainable -attainableness -attainder -attainer -attainment -attaint -attaintment -attainture -attaleh -attar -attargul -attask -attemper -attemperament -attemperance -attemperate -attemperately -attemperation -attemperator -attempt -attemptability -attemptable -attempter -attemptless -attend -attendance -attendancy -attendant -attendantly -attender -attendingly -attendment -attendress -attensity -attent -attention -attentional -attentive -attentively -attentiveness -attently -attenuable -attenuant -attenuate -attenuation -attenuative -attenuator -atter -attercop -attercrop -atterminal -attermine -atterminement -attern -attery -attest -attestable -attestant -attestation -attestative -attestator -attester -attestive -attic -atticism -atticize -atticomastoid -attid -attinge -attingence -attingency -attingent -attire -attired -attirement -attirer -attitude -attitudinal -attitudinarian -attitudinarianism -attitudinize -attitudinizer -attorn -attorney -attorneydom -attorneyism -attorneyship -attornment -attract -attractability -attractable -attractableness -attractant -attracter -attractile -attractingly -attraction -attractionally -attractive -attractively -attractiveness -attractivity -attractor -attrahent -attrap -attributable -attributal -attribute -attributer -attribution -attributive -attributively -attributiveness -attrist -attrite -attrited -attriteness -attrition -attritive -attritus -attune -attunely -attunement -atule -atumble -atune -atwain -atweel -atween -atwin -atwirl -atwist -atwitch -atwitter -atwixt -atwo -atypic -atypical -atypically -atypy -auantic -aube -aubepine -aubrietia -aubrite -auburn -aubusson -auca -auchenia -auchenium -auchlet -auction -auctionary -auctioneer -auctorial -aucuba -aucupate -audacious -audaciously -audaciousness -audacity -audibility -audible -audibleness -audibly -audience -audiencier -audient -audile -audio -audiogenic -audiogram -audiologist -audiology -audiometer -audiometric -audiometry -audion -audiophile -audiphone -audit -audition -auditive -auditor -auditoria -auditorial -auditorially -auditorily -auditorium -auditorship -auditory -auditress -auditual -audivise -audiviser -audivision -auganite -auge -augelite -augen -augend -auger -augerer -augh -aught -aughtlins -augite -augitic -augitite -augitophyre -augment -augmentable -augmentation -augmentationer -augmentative -augmentatively -augmented -augmentedly -augmenter -augmentive -augur -augural -augurate -augurial -augurous -augurship -augury -august -augustal -augustly -augustness -auh -auhuhu -auk -auklet -aula -aulacocarpous -aulae -aularian -auld -auldfarrantlike -auletai -aulete -auletes -auletic -auletrides -auletris -aulic -aulicism -auloi -aulophyte -aulos -aulostomid -aulu -aum -aumaga -aumail -aumbry -aumery -aumil -aumildar -aumous -aumrie -auncel -aune -aunt -aunthood -auntie -auntish -auntlike -auntly -auntsary -auntship -aupaka -aura -aurae -aural -aurally -auramine -aurantiaceous -aurantium -aurar -aurate -aurated -aureate -aureately -aureateness -aureation -aureity -aurelia -aurelian -aureola -aureole -aureolin -aureoline -aureomycin -aureous -aureously -auresca -aureus -auribromide -auric -aurichalcite -aurichalcum -aurichloride -aurichlorohydric -auricle -auricled -auricomous -auricula -auriculae -auricular -auriculare -auriculares -auricularia -auriculariae -auricularian -auricularis -auricularly -auriculate -auriculated -auriculately -auriculocranial -auriculoparietal -auriculotemporal -auriculoventricular -auriculovertical -auricyanhydric -auricyanic -auricyanide -auride -auriferous -aurific -aurification -auriform -aurify -aurigal -aurigation -aurigerous -aurilave -aurin -aurinasal -auriphone -auriphrygia -auriphrygiate -auripuncture -aurir -auriscalp -auriscalpia -auriscalpium -auriscope -auriscopy -aurist -aurite -aurivorous -auroauric -aurobromide -aurochloride -aurochs -aurocyanide -aurodiamine -auronal -aurophobia -aurophore -aurora -aurorae -auroral -aurorally -aurore -aurorean -aurorium -aurotellurite -aurothiosulphate -aurothiosulphuric -aurous -aurrescu -aurulent -aurum -aurure -auryl -auscult -auscultascope -auscultate -auscultation -auscultative -auscultator -auscultatory -auscultoscope -auslaut -auslaute -auspex -auspicate -auspice -auspices -auspicial -auspicious -auspiciously -auspiciousness -auspicy -austenite -austenitic -austere -austerely -austereness -austerity -austral -australene -australite -australopithecine -austrium -austromancy -ausu -ausubo -autacoid -autacoidal -autallotriomorphic -autantitypy -autarch -autarchic -autarchical -autarchy -autarkic -autarkical -autarkist -autarky -aute -autechoscope -autecious -auteciously -auteciousness -autecism -autecologic -autecological -autecologically -autecologist -autecology -autecy -autem -authentic -authentical -authentically -authenticalness -authenticate -authentication -authenticator -authenticity -authenticly -authenticness -authigene -authigenetic -authigenic -authigenous -author -authorcraft -authoress -authorhood -authorial -authorially -authorish -authorism -authoritarian -authoritarianism -authoritative -authoritatively -authoritativeness -authority -authorizable -authorization -authorize -authorized -authorizer -authorless -authorling -authorly -authorship -authotype -autism -autist -autistic -auto -autoabstract -autoactivation -autoactive -autoaddress -autoagglutinating -autoagglutination -autoagglutinin -autoalarm -autoalkylation -autoallogamous -autoallogamy -autoanalysis -autoanalytic -autoantibody -autoanticomplement -autoantitoxin -autoasphyxiation -autoaspiration -autoassimilation -autobahn -autobasidia -autobasidiomycetous -autobasidium -autobiographal -autobiographer -autobiographic -autobiographical -autobiographically -autobiographist -autobiography -autobiology -autoblast -autoboat -autoboating -autobolide -autobus -autocab -autocade -autocall -autocamp -autocamper -autocamping -autocar -autocarist -autocarpian -autocarpic -autocarpous -autocatalepsy -autocatalysis -autocatalytic -autocatalytically -autocatalyze -autocatheterism -autocephalia -autocephality -autocephalous -autocephaly -autoceptive -autochemical -autocholecystectomy -autochrome -autochromy -autochronograph -autochthon -autochthonal -autochthonic -autochthonism -autochthonous -autochthonously -autochthonousness -autochthony -autocide -autocinesis -autoclasis -autoclastic -autoclave -autocoenobium -autocoherer -autocoid -autocollimation -autocollimator -autocolony -autocombustible -autocombustion -autocomplexes -autocondensation -autoconduction -autoconvection -autoconverter -autocopist -autocoprophagous -autocorrosion -autocracy -autocrat -autocratic -autocratical -autocratically -autocrator -autocratoric -autocratorical -autocratrix -autocratship -autocremation -autocriticism -autocystoplasty -autocytolysis -autocytolytic -autodecomposition -autodepolymerization -autodermic -autodestruction -autodetector -autodiagnosis -autodiagnostic -autodiagrammatic -autodidact -autodidactic -autodifferentiation -autodiffusion -autodigestion -autodigestive -autodrainage -autodrome -autodynamic -autodyne -autoecholalia -autoecic -autoecious -autoeciously -autoeciousness -autoecism -autoecous -autoecy -autoeducation -autoeducative -autoelectrolysis -autoelectrolytic -autoelectronic -autoelevation -autoepigraph -autoepilation -autoerotic -autoerotically -autoeroticism -autoerotism -autoexcitation -autofecundation -autofermentation -autoformation -autofrettage -autogamic -autogamous -autogamy -autogauge -autogeneal -autogenesis -autogenetic -autogenetically -autogenic -autogenous -autogenously -autogeny -autogiro -autognosis -autognostic -autograft -autografting -autogram -autograph -autographal -autographer -autographic -autographical -autographically -autographism -autographist -autographometer -autography -autogravure -autoharp -autoheader -autohemic -autohemolysin -autohemolysis -autohemolytic -autohemorrhage -autohemotherapy -autoheterodyne -autoheterosis -autohexaploid -autohybridization -autohypnosis -autohypnotic -autohypnotism -autohypnotization -autoicous -autoignition -autoimmunity -autoimmunization -autoinduction -autoinductive -autoinfection -autoinfusion -autoinhibited -autoinoculable -autoinoculation -autointellectual -autointoxicant -autointoxication -autoirrigation -autoist -autojigger -autojuggernaut -autokinesis -autokinetic -autokrator -autolaryngoscope -autolaryngoscopic -autolaryngoscopy -autolater -autolatry -autolavage -autolesion -autolimnetic -autolith -autoloading -autological -autologist -autologous -autology -autoluminescence -autoluminescent -autolysate -autolysin -autolysis -autolytic -autolyzate -autolyze -automa -automacy -automanual -automat -automata -automatic -automatical -automatically -automaticity -automatin -automatism -automatist -automatization -automatize -automatograph -automaton -automatonlike -automatous -automechanical -automelon -autometamorphosis -autometric -autometry -automobile -automobilism -automobilist -automobilistic -automobility -automolite -automonstration -automorph -automorphic -automorphically -automorphism -automotive -automotor -automower -automysophobia -autonegation -autonephrectomy -autonephrotoxin -autoneurotoxin -autonitridation -autonoetic -autonomasy -autonomic -autonomical -autonomically -autonomist -autonomize -autonomous -autonomously -autonomy -autonym -autoparasitism -autopathic -autopathography -autopathy -autopelagic -autopepsia -autophagi -autophagia -autophagous -autophagy -autophobia -autophoby -autophon -autophone -autophonoscope -autophonous -autophony -autophotoelectric -autophotograph -autophotometry -autophthalmoscope -autophyllogeny -autophyte -autophytic -autophytically -autophytograph -autophytography -autopilot -autoplagiarism -autoplasmotherapy -autoplast -autoplastic -autoplasty -autopneumatic -autopoint -autopoisonous -autopolar -autopolo -autopoloist -autopolyploid -autopore -autoportrait -autoportraiture -autopositive -autopotent -autoprogressive -autoproteolysis -autoprothesis -autopsic -autopsical -autopsy -autopsychic -autopsychoanalysis -autopsychology -autopsychorhythmia -autopsychosis -autoptic -autoptical -autoptically -autopticity -autopyotherapy -autoracemization -autoradiograph -autoradiographic -autoradiography -autoreduction -autoregenerator -autoregulation -autoreinfusion -autoretardation -autorhythmic -autorhythmus -autoriser -autorotation -autorrhaphy -autoschediasm -autoschediastic -autoschediastical -autoschediastically -autoschediaze -autoscience -autoscope -autoscopic -autoscopy -autosender -autosensitization -autosensitized -autosepticemia -autoserotherapy -autoserum -autosexing -autosight -autosign -autosite -autositic -autoskeleton -autosled -autoslip -autosomal -autosomatognosis -autosomatognostic -autosome -autosoteric -autosoterism -autospore -autosporic -autospray -autostability -autostage -autostandardization -autostarter -autostethoscope -autostylic -autostylism -autostyly -autosuggestibility -autosuggestible -autosuggestion -autosuggestionist -autosuggestive -autosuppression -autosymbiontic -autosymbolic -autosymbolical -autosymbolically -autosymnoia -autosyndesis -autotelegraph -autotelic -autotetraploid -autotetraploidy -autothaumaturgist -autotheater -autotheism -autotheist -autotherapeutic -autotherapy -autothermy -autotomic -autotomize -autotomous -autotomy -autotoxaemia -autotoxic -autotoxication -autotoxicity -autotoxicosis -autotoxin -autotoxis -autotractor -autotransformer -autotransfusion -autotransplant -autotransplantation -autotrepanation -autotriploid -autotriploidy -autotroph -autotrophic -autotrophy -autotropic -autotropically -autotropism -autotruck -autotuberculin -autoturning -autotype -autotyphization -autotypic -autotypography -autotypy -autourine -autovaccination -autovaccine -autovalet -autovalve -autovivisection -autoxeny -autoxidation -autoxidator -autoxidizability -autoxidizable -autoxidize -autoxidizer -autozooid -autrefois -autumn -autumnal -autumnally -autumnian -autumnity -autunite -auxamylase -auxanogram -auxanology -auxanometer -auxesis -auxetic -auxetical -auxetically -auxiliar -auxiliarly -auxiliary -auxiliate -auxiliation -auxiliator -auxiliatory -auxilium -auximone -auxin -auxinic -auxinically -auxoaction -auxoamylase -auxoblast -auxobody -auxocardia -auxochrome -auxochromic -auxochromism -auxochromous -auxocyte -auxoflore -auxofluor -auxograph -auxographic -auxohormone -auxology -auxometer -auxospore -auxosubstance -auxotonic -auxotox -ava -avadana -avadavat -avadhuta -avahi -avail -availability -available -availableness -availably -availingly -availment -aval -avalanche -avalent -avalvular -avania -avanious -avanturine -avaremotemo -avarice -avaricious -avariciously -avariciousness -avascular -avast -avaunt -ave -avellan -avellane -avellaneous -avellano -avelonge -aveloz -avenaceous -avenage -avenalin -avener -avenge -avengeful -avengement -avenger -avengeress -avenging -avengingly -avenin -avenolith -avenous -avens -aventail -aventurine -avenue -aver -avera -average -averagely -averager -averah -averil -averin -averment -averrable -averral -averruncate -averruncation -averruncator -aversant -aversation -averse -aversely -averseness -aversion -aversive -avert -avertable -averted -avertedly -averter -avertible -avian -avianization -avianize -aviarist -aviary -aviate -aviatic -aviation -aviator -aviatorial -aviatoriality -aviatory -aviatress -aviatrices -aviatrix -avichi -avicide -avick -avicolous -avicular -avicularia -avicularian -avicularium -aviculture -aviculturist -avid -avidious -avidiously -avidity -avidly -avidous -avidya -avifauna -avifaunal -avigate -avigation -avigator -avijja -avine -aviolite -avirulence -avirulent -aviso -avital -avitaminosis -avitaminotic -avitic -avives -avizandum -avo -avocado -avocate -avocation -avocative -avocatory -avocet -avodire -avogadrite -avoid -avoidable -avoidably -avoidance -avoider -avoidless -avoidment -avoirdupois -avolate -avolation -avolitional -avondbloem -avouch -avouchable -avoucher -avouchment -avourneen -avow -avowable -avowableness -avowably -avowal -avowance -avowant -avowed -avowedly -avowedness -avower -avowry -avoyer -avoyership -avulse -avulsion -avuncular -avunculate -aw -awa -awabi -awaft -awag -await -awaiter -awakable -awake -awaken -awakenable -awakener -awakening -awakeningly -awakenment -awald -awalim -awalt -awane -awanting -awapuhi -award -awardable -awarder -awardment -aware -awaredom -awareness -awaruite -awash -awaste -awat -awatch -awater -awave -away -awayness -awber -awd -awe -awearied -aweary -aweather -aweband -awedness -awee -aweek -aweel -aweigh -awesome -awesomely -awesomeness -awest -aweto -awfu -awful -awfully -awfulness -awheel -awheft -awhet -awhile -awhir -awhirl -awide -awiggle -awikiwiki -awin -awing -awink -awiwi -awkward -awkwardish -awkwardly -awkwardness -awl -awless -awlessness -awlwort -awmous -awn -awned -awner -awning -awninged -awnless -awnlike -awny -awoke -awork -awreck -awrist -awrong -awry -ax -axal -axbreaker -axe -axed -axenic -axes -axfetch -axhammer -axhammered -axhead -axial -axiality -axially -axiate -axiation -axiform -axifugal -axil -axile -axilemma -axilemmata -axilla -axillae -axillant -axillar -axillary -axine -axinite -axinomancy -axiolite -axiolitic -axiological -axiologically -axiologist -axiology -axiom -axiomatic -axiomatical -axiomatically -axiomatization -axiomatize -axion -axiopisty -axis -axised -axisymmetric -axisymmetrical -axite -axle -axled -axlesmith -axletree -axmaker -axmaking -axman -axmanship -axmaster -axodendrite -axofugal -axogamy -axoid -axoidean -axolemma -axolotl -axolysis -axometer -axometric -axometry -axon -axonal -axoneure -axoneuron -axonolipous -axonometric -axonometry -axonophorous -axonost -axopetal -axophyte -axoplasm -axopodia -axopodium -axospermous -axostyle -axseed -axstone -axtree -axunge -axweed -axwise -axwort -ay -ayacahuite -ayah -aye -ayegreen -ayelp -ayenbite -ayin -ayless -aylet -ayllu -ayond -ayont -ayous -ayu -azadrachta -azafrin -azalea -azarole -azedarach -azelaic -azelate -azeotrope -azeotropic -azeotropism -azeotropy -azide -aziethane -azilut -azimene -azimethylene -azimide -azimine -azimino -aziminobenzene -azimuth -azimuthal -azimuthally -azine -aziola -azlactone -azo -azobacter -azobenzene -azobenzil -azobenzoic -azobenzol -azoblack -azoch -azocochineal -azocoralline -azocorinth -azocyanide -azocyclic -azodicarboxylic -azodiphenyl -azodisulphonic -azoeosin -azoerythrin -azofication -azofier -azoflavine -azoformamide -azoformic -azofy -azogallein -azogreen -azogrenadine -azohumic -azoic -azoimide -azoisobutyronitrile -azole -azolitmin -azomethine -azon -azonal -azonaphthalene -azonic -azonium -azoospermia -azoparaffin -azophen -azophenetole -azophenine -azophenol -azophenyl -azophenylene -azophosphin -azophosphore -azoprotein -azorite -azorubine -azosulphine -azosulphonic -azotate -azote -azoted -azotemia -azotenesis -azotetrazole -azoth -azothionium -azotic -azotine -azotite -azotize -azotoluene -azotometer -azotorrhoea -azotous -azoturia -azovernine -azox -azoxazole -azoxime -azoxine -azoxonium -azoxy -azoxyanisole -azoxybenzene -azoxybenzoic -azoxynaphthalene -azoxyphenetole -azoxytoluidine -azteca -azthionium -azulene -azulite -azulmic -azumbre -azure -azurean -azured -azureous -azurine -azurite -azurmalachite -azurous -azury -azygobranchiate -azygomatous -azygos -azygosperm -azygospore -azygous -azyme -azymite -azymous -b -ba -baa -baahling -baal -baar -baba -babacoote -babai -babasco -babassu -babaylan -babbitt -babbitter -babblative -babble -babblement -babbler -babblesome -babbling -babblingly -babblish -babblishly -babbly -babby -babe -babehood -babelet -babelike -babery -babeship -babesiasis -babiche -babied -babillard -babingtonite -babirusa -babish -babished -babishly -babishness -bablah -babloh -baboen -baboo -baboodom -babooism -baboon -baboonery -baboonish -baboonroot -baboot -babouche -babroot -babu -babudom -babuina -babuism -babul -babushka -baby -babydom -babyfied -babyhood -babyhouse -babyish -babyishly -babyishness -babyism -babylike -babyolatry -babyship -bac -bacaba -bacach -bacalao -bacao -bacbakiri -bacca -baccaceous -baccae -baccalaurean -baccalaureate -baccara -baccarat -baccate -baccated -bacchanal -bacchanalian -bacchanalianism -bacchanalianly -bacchanalism -bacchanalization -bacchanalize -bacchant -bacchante -bacchantes -bacchantic -bacchar -baccharis -baccharoid -baccheion -bacchiac -bacchian -bacchic -bacchii -bacchius -bacciferous -bacciform -baccivorous -bach -bache -bachel -bachelor -bachelordom -bachelorhood -bachelorism -bachelorize -bachelorlike -bachelorly -bachelorship -bachelorwise -bachelry -bacillar -bacillariaceous -bacillary -bacillemia -bacilli -bacillian -bacillicidal -bacillicide -bacillicidic -bacilliculture -bacilliform -bacilligenic -bacilliparous -bacillite -bacillogenic -bacillogenous -bacillophobia -bacillosis -bacilluria -bacillus -bacitracin -back -backache -backaching -backachy -backage -backband -backbearing -backbencher -backbite -backbiter -backbitingly -backblow -backboard -backbone -backboned -backboneless -backbonelessness -backbrand -backbreaker -backbreaking -backcap -backcast -backchain -backchat -backcourt -backcross -backdoor -backdown -backdrop -backed -backen -backer -backet -backfall -backfatter -backfield -backfill -backfiller -backfilling -backfire -backfiring -backflap -backflash -backflow -backfold -backframe -backfriend -backfurrow -backgame -backgammon -background -backhand -backhanded -backhandedly -backhandedness -backhander -backhatch -backheel -backhooker -backhouse -backie -backiebird -backing -backjaw -backjoint -backlands -backlash -backlashing -backless -backlet -backlings -backlog -backlotter -backmost -backpedal -backpiece -backplate -backrope -backrun -backsaw -backscraper -backset -backsetting -backsettler -backshift -backside -backsight -backslap -backslapper -backslapping -backslide -backslider -backslidingness -backspace -backspacer -backspang -backspier -backspierer -backspin -backspread -backspringing -backstaff -backstage -backstamp -backstay -backster -backstick -backstitch -backstone -backstop -backstrap -backstretch -backstring -backstrip -backstroke -backstromite -backswept -backswing -backsword -backswording -backswordman -backswordsman -backtack -backtender -backtenter -backtrack -backtracker -backtrick -backup -backveld -backvelder -backwall -backward -backwardation -backwardly -backwardness -backwards -backwash -backwasher -backwashing -backwater -backwatered -backway -backwood -backwoods -backwoodsiness -backwoodsman -backwoodsy -backword -backworm -backwort -backyarder -baclin -bacon -baconer -baconize -baconweed -bacony -bacteremia -bacteria -bacteriaceous -bacterial -bacterially -bacterian -bacteric -bactericholia -bactericidal -bactericide -bactericidin -bacterid -bacteriemia -bacteriform -bacterin -bacterioagglutinin -bacterioblast -bacteriocyte -bacteriodiagnosis -bacteriofluorescin -bacteriogenic -bacteriogenous -bacteriohemolysin -bacterioid -bacterioidal -bacteriologic -bacteriological -bacteriologically -bacteriologist -bacteriology -bacteriolysin -bacteriolysis -bacteriolytic -bacteriolyze -bacteriopathology -bacteriophage -bacteriophagia -bacteriophagic -bacteriophagous -bacteriophagy -bacteriophobia -bacterioprecipitin -bacterioprotein -bacteriopsonic -bacteriopsonin -bacteriopurpurin -bacterioscopic -bacterioscopical -bacterioscopically -bacterioscopist -bacterioscopy -bacteriosis -bacteriosolvent -bacteriostasis -bacteriostat -bacteriostatic -bacteriotherapeutic -bacteriotherapy -bacteriotoxic -bacteriotoxin -bacteriotropic -bacteriotropin -bacteriotrypsin -bacterious -bacteritic -bacterium -bacteriuria -bacterization -bacterize -bacteroid -bacteroidal -bactriticone -bactritoid -bacula -bacule -baculi -baculiferous -baculiform -baculine -baculite -baculitic -baculiticone -baculoid -baculum -baculus -bacury -bad -badan -badarrah -baddeleyite -badderlocks -baddish -baddishly -baddishness -baddock -bade -badenite -badge -badgeless -badgeman -badger -badgerbrush -badgerer -badgeringly -badgerlike -badgerly -badgerweed -badiaga -badian -badigeon -badinage -badious -badland -badlands -badly -badminton -badness -bae -baetuli -baetulus -baetyl -baetylic -baetylus -baetzner -bafaro -baff -baffeta -baffle -bafflement -baffler -baffling -bafflingly -bafflingness -baffy -baft -bafta -bag -baga -bagani -bagasse -bagataway -bagatelle -bagatine -bagattini -bagattino -bagel -bagful -baggage -baggageman -baggagemaster -baggager -baggala -bagganet -bagged -bagger -baggie -baggily -bagginess -bagging -baggit -baggy -baghouse -bagleaves -baglike -bagmaker -bagmaking -bagman -bagnio -bagnut -bago -bagonet -bagpipe -bagpiper -bagpipes -bagplant -bagrationite -bagre -bagreef -bagroom -baguette -bagwig -bagwigged -bagworm -bagwyn -bah -bahan -bahar -bahawder -bahay -bahera -bahiaite -bahisti -bahnung -baho -bahoe -bahoo -baht -bahur -bahut -bahuvrihi -baidarka -baiginet -baignet -baikalite -baikerinite -baikerite -baikie -bail -bailable -bailage -bailee -bailer -bailey -bailie -bailiery -bailieship -bailiff -bailiffry -bailiffship -bailiwick -bailliage -baillone -bailment -bailor -bailpiece -bailsman -bailwood -bain -bainie -baioc -baiocchi -baiocco -bairagi -bairn -bairnie -bairnish -bairnishness -bairnliness -bairnly -bairnteam -bairntime -bairnwort -baister -bait -baiter -baith -baittle -baitylos -baize -bajada -bajan -bajarigar -bajra -bajree -bajri -bajury -baka -bakal -bake -bakeboard -baked -bakehouse -bakelite -bakelize -baken -bakeoven -bakepan -baker -bakerdom -bakeress -bakerite -bakerless -bakerly -bakership -bakery -bakeshop -bakestone -bakie -baking -bakingly -bakli -baksheesh -baktun -baku -bakula -bakupari -bal -balachong -balaclava -baladine -balaenid -balaenoid -balaenoidean -balafo -balagan -balaghat -balai -balalaika -balance -balanceable -balanced -balancedness -balancelle -balanceman -balancement -balancer -balancewise -balancing -balander -balandra -balandrana -balaneutics -balangay -balanic -balanid -balaniferous -balanism -balanite -balanitis -balanoblennorrhea -balanocele -balanoid -balanophoraceous -balanophore -balanophorin -balanoplasty -balanoposthitis -balanopreputial -balanorrhagia -balantidial -balantidiasis -balantidic -balantidiosis -balao -balas -balata -balatong -balatron -balatronic -balausta -balaustine -balaustre -balboa -balbriggan -balbutiate -balbutient -balbuties -balconet -balconied -balcony -bald -baldachin -baldachined -baldachini -baldachino -baldberry -baldcrown -balden -balder -balderdash -baldhead -baldicoot -baldish -baldling -baldly -baldmoney -baldness -baldpate -baldrib -baldric -baldricked -baldricwise -balductum -baldy -bale -baleen -balefire -baleful -balefully -balefulness -balei -baleise -baleless -baler -balete -bali -balibago -baline -balinger -balinghasay -balisaur -balistarius -balistid -balistraria -balita -balk -balker -balkingly -balky -ball -ballad -ballade -balladeer -ballader -balladeroyal -balladic -balladical -balladier -balladism -balladist -balladize -balladlike -balladling -balladmonger -balladmongering -balladry -balladwise -ballahoo -ballam -ballan -ballant -ballast -ballastage -ballaster -ballasting -ballata -ballate -ballatoon -balldom -balled -baller -ballerina -ballet -balletic -balletomane -balli -ballist -ballista -ballistae -ballistic -ballistically -ballistician -ballistics -ballistocardiograph -ballium -ballmine -ballogan -ballonet -balloon -balloonation -ballooner -balloonery -balloonet -balloonfish -balloonflower -balloonful -ballooning -balloonish -balloonist -balloonlike -ballot -ballotade -ballotage -balloter -balloting -ballotist -ballottement -ballow -ballplayer -ballproof -ballroom -ballstock -ballup -ballweed -bally -ballyhack -ballyhoo -ballyhooer -ballywack -ballywrack -balm -balmacaan -balmily -balminess -balmlike -balmony -balmy -balneal -balneary -balneation -balneatory -balneographer -balneography -balneologic -balneological -balneologist -balneology -balneophysiology -balneotechnics -balneotherapeutics -balneotherapia -balneotherapy -balonea -baloney -baloo -balow -balsa -balsam -balsamation -balsameaceous -balsamer -balsamic -balsamical -balsamically -balsamiferous -balsamina -balsaminaceous -balsamine -balsamitic -balsamiticness -balsamize -balsamo -balsamous -balsamroot -balsamum -balsamweed -balsamy -baltei -balter -balteus -baltimorite -balu -baluchithere -baluchitheria -baluchitherium -balushai -baluster -balustered -balustrade -balustraded -balustrading -balut -balwarra -balza -balzarine -bam -bamban -bambini -bambino -bambocciade -bamboo -bamboozle -bamboozlement -bamboozler -bamboula -bamoth -ban -banaba -banago -banak -banakite -banal -banality -banally -banana -bananist -bananivorous -banat -banatite -banausic -banc -banca -bancal -banchi -banco -bancus -band -banda -bandage -bandager -bandagist -bandaite -bandaka -bandala -bandalore -bandanna -bandannaed -bandar -bandarlog -bandbox -bandboxical -bandboxy -bandcase -bandcutter -bande -bandeau -banded -bandelet -bander -banderole -bandersnatch -bandfish -bandhava -bandhook -bandhu -bandi -bandicoot -bandicoy -bandie -bandikai -bandiness -banding -bandit -banditism -banditry -banditti -bandle -bandless -bandlessly -bandlessness -bandlet -bandman -bandmaster -bando -bandog -bandoleer -bandoleered -bandoline -bandonion -bandore -bandrol -bandsman -bandstand -bandster -bandstring -bandwork -bandy -bandyball -bandyman -bane -baneberry -baneful -banefully -banefulness -banewort -bang -banga -bangalay -bangalow -bangboard -bange -banger -banghy -bangiaceous -banging -bangkok -bangle -bangled -bangling -bangster -bangtail -bani -banian -banig -banilad -banish -banisher -banishment -banister -baniwa -baniya -banjo -banjoist -banjore -banjorine -banjuke -bank -bankable -bankbook -banked -banker -bankera -bankerdom -bankeress -banket -bankfull -banking -bankman -bankrider -bankrupt -bankruptcy -bankruptism -bankruptlike -bankruptly -bankruptship -bankrupture -bankshall -bankside -banksman -bankweed -banky -banner -bannered -bannerer -banneret -bannerfish -bannerless -bannerlike -bannerman -bannerol -bannerwise -bannet -banning -bannister -bannock -banns -bannut -banovina -banquet -banqueteer -banqueteering -banqueter -banquette -bansalague -banshee -banstickle -bant -bantam -bantamize -bantamweight -bantay -bantayan -banteng -banter -banterer -banteringly -bantery -bantingize -bantling -banty -banuyo -banxring -banya -banyan -banzai -baobab -bap -baptisin -baptism -baptismal -baptismally -baptistery -baptistic -baptizable -baptize -baptizee -baptizement -baptizer -bar -bara -barabara -barabora -barad -baragnosis -baragouin -baragouinish -barajillo -barandos -barangay -barasingha -barathea -barathra -barathrum -barauna -barb -barbacou -barbal -barbaloin -barbaralalia -barbaresque -barbarian -barbarianism -barbarianize -barbaric -barbarical -barbarically -barbarious -barbariousness -barbarism -barbarity -barbarization -barbarize -barbarous -barbarously -barbarousness -barbary -barbas -barbasco -barbastel -barbate -barbated -barbatimao -barbe -barbecue -barbed -barbeiro -barbel -barbellate -barbellula -barbellulate -barber -barberess -barberfish -barberish -barberry -barbershop -barbet -barbette -barbican -barbicel -barbigerous -barbion -barbital -barbitalism -barbiton -barbitone -barbitos -barbiturate -barbituric -barbless -barblet -barbone -barbotine -barbudo -barbulate -barbule -barbulyie -barbwire -barcarole -barcella -barcelona -bard -bardane -bardash -bardcraft -bardel -bardess -bardic -bardie -bardiglio -bardily -bardiness -barding -bardish -bardism -bardlet -bardlike -bardling -bardo -bardship -bardy -bare -bareback -barebacked -bareboat -barebone -bareboned -bareca -barefaced -barefacedly -barefacedness -barefit -barefoot -barefooted -barehanded -barehead -bareheaded -bareheadedness -barelegged -barely -barenecked -bareness -barer -baresark -baresma -baretta -barff -barfish -barfly -barful -bargain -bargainee -bargainer -bargainor -bargainwise -bargander -barge -bargeboard -bargee -bargeer -bargeese -bargehouse -bargelike -bargeload -bargeman -bargemaster -barger -bargh -bargham -barghest -bargoose -bari -baria -baric -barid -barie -barile -barilla -baring -baris -barish -barit -barite -baritone -barium -bark -barkbound -barkcutter -barkeeper -barken -barkentine -barker -barkery -barkevikite -barkevikitic -barkey -barkhan -barking -barkingly -barkle -barkless -barklyite -barkometer -barkpeel -barkpeeler -barkpeeling -barksome -barky -barlafumble -barlafummil -barless -barley -barleybird -barleybreak -barleycorn -barleyhood -barleymow -barleysick -barling -barlock -barlow -barm -barmaid -barman -barmaster -barmbrack -barmcloth -barmkin -barmote -barmskin -barmy -barmybrained -barn -barnacle -barnard -barnbrack -barney -barnful -barnhardtite -barnman -barnstorm -barnstormer -barnstorming -barny -barnyard -barocyclonometer -barodynamic -barodynamics -barognosis -barogram -barograph -barographic -baroi -barolo -barology -barometer -barometric -barometrical -barometrically -barometrograph -barometrography -barometry -barometz -baromotor -baron -baronage -baroness -baronet -baronetage -baronetcy -baronethood -baronetical -baronetship -barong -baronial -baronize -baronry -baronship -barony -baroque -baroscope -baroscopic -baroscopical -barosmin -barotactic -barotaxis -barotaxy -barothermograph -barothermohygrograph -baroto -barouche -barouchet -baroxyton -barpost -barquantine -barra -barrabkie -barrable -barrabora -barracan -barrack -barracker -barraclade -barracoon -barracouta -barracuda -barrad -barragan -barrage -barragon -barramunda -barramundi -barranca -barrandite -barras -barrator -barratrous -barratrously -barratry -barred -barrel -barrelage -barreled -barreler -barrelet -barrelful -barrelhead -barrelmaker -barrelmaking -barrelwise -barren -barrenly -barrenness -barrenwort -barrer -barret -barrette -barretter -barricade -barricader -barricado -barrico -barrier -barriguda -barrigudo -barrikin -barriness -barring -barrio -barrister -barristerial -barristership -barristress -barroom -barrow -barrowful -barrowman -barrulee -barrulet -barrulety -barruly -barry -barse -barsom -bartender -bartending -barter -barterer -barth -barthite -bartholinitis -bartizan -bartizaned -barton -baru -baruria -barvel -barwal -barway -barways -barwise -barwood -barycenter -barycentric -barye -baryecoia -baryglossia -barylalia -barylite -baryphonia -baryphonic -baryphony -barysilite -barysphere -baryta -barytes -barythymia -barytic -barytine -barytocalcite -barytocelestine -barytocelestite -baryton -barytone -barytophyllite -barytostrontianite -barytosulphate -bas -basal -basale -basalia -basally -basalt -basaltes -basaltic -basaltiform -basaltine -basaltoid -basanite -basaree -bascule -base -baseball -baseballdom -baseballer -baseboard -baseborn -basebred -based -basehearted -baseheartedness -baselard -baseless -baselessly -baselessness -baselike -baseliner -basellaceous -basely -baseman -basement -basementward -baseness -basenji -bases -bash -bashaw -bashawdom -bashawism -bashawship -bashful -bashfully -bashfulness -bashlyk -basial -basialveolar -basiarachnitis -basiarachnoiditis -basiate -basiation -basibranchial -basibranchiate -basibregmatic -basic -basically -basichromatic -basichromatin -basichromatinic -basichromiole -basicity -basicranial -basicytoparaplastin -basidia -basidial -basidigital -basidigitale -basidiogenetic -basidiolichen -basidiomycete -basidiomycetous -basidiophore -basidiospore -basidiosporous -basidium -basidorsal -basifacial -basification -basifier -basifixed -basifugal -basify -basigamous -basigamy -basigenic -basigenous -basiglandular -basigynium -basihyal -basihyoid -basil -basilar -basilary -basilateral -basilemma -basileus -basilic -basilica -basilical -basilican -basilicate -basilicon -basilinna -basiliscan -basiliscine -basilisk -basilissa -basilweed -basilysis -basilyst -basimesostasis -basin -basinasal -basinasial -basined -basinerved -basinet -basinlike -basioccipital -basion -basiophitic -basiophthalmite -basiophthalmous -basiotribe -basiotripsy -basiparachromatin -basiparaplastin -basipetal -basiphobia -basipodite -basipoditic -basipterygial -basipterygium -basipterygoid -basiradial -basirhinal -basirostral -basis -basiscopic -basisphenoid -basisphenoidal -basitemporal -basiventral -basivertebral -bask -basker -basket -basketball -basketballer -basketful -basketing -basketmaker -basketmaking -basketry -basketware -basketwoman -basketwood -basketwork -basketworm -basoid -basommatophorous -bason -basophile -basophilia -basophilic -basophilous -basophobia -basos -basote -basque -basqued -basquine -bass -bassan -bassanello -bassanite -bassara -bassarid -bassarisk -basset -bassetite -bassetta -bassie -bassine -bassinet -bassist -bassness -basso -bassoon -bassoonist -bassorin -bassus -basswood -bast -basta -bastard -bastardism -bastardization -bastardize -bastardliness -bastardly -bastardy -baste -basten -baster -bastide -bastille -bastinade -bastinado -basting -bastion -bastionary -bastioned -bastionet -bastite -bastnasite -basto -baston -basurale -bat -bataan -batad -batakan -bataleur -batara -batata -batatilla -batch -batcher -bate -batea -bateau -bateaux -bated -batel -bateman -batement -bater -batfish -batfowl -batfowler -batfowling -bath -bathe -batheable -bather -bathetic -bathflower -bathhouse -bathic -bathing -bathless -bathman -bathmic -bathmism -bathmotropic -bathmotropism -bathochromatic -bathochromatism -bathochrome -bathochromic -bathochromy -bathoflore -bathofloric -batholite -batholith -batholithic -batholitic -bathometer -bathophobia -bathorse -bathos -bathrobe -bathroom -bathroomed -bathroot -bathtub -bathukolpian -bathukolpic -bathvillite -bathwort -bathyal -bathyanesthesia -bathybian -bathybic -bathybius -bathycentesis -bathychrome -bathycolpian -bathycolpic -bathycurrent -bathyesthesia -bathygraphic -bathyhyperesthesia -bathyhypesthesia -bathylimnetic -bathylite -bathylith -bathylithic -bathylitic -bathymeter -bathymetric -bathymetrical -bathymetrically -bathymetry -bathyorographical -bathypelagic -bathyplankton -bathyseism -bathysmal -bathysophic -bathysophical -bathysphere -bathythermograph -batidaceous -batik -batiker -batikulin -batikuling -bating -batino -batiste -batitinan -batlan -batlike -batling -batlon -batman -batoid -baton -batonistic -batonne -batophobia -batrachian -batrachiate -batrachoid -batrachophagous -batrachophobia -batrachoplasty -bats -batsman -batsmanship -batster -batswing -batt -batta -battailous -battalia -battalion -battarism -battarismus -battel -batteler -batten -battener -battening -batter -batterable -battercake -batterdock -battered -batterer -batterfang -batteried -batterman -battery -batteryman -battik -batting -battish -battle -battled -battledore -battlefield -battleful -battleground -battlement -battlemented -battleplane -battler -battleship -battlesome -battlestead -battlewagon -battleward -battlewise -battological -battologist -battologize -battology -battue -batty -batukite -batule -batwing -batyphone -batz -batzen -bauble -baublery -baubling -bauch -bauchle -bauckie -bauckiebird -baud -baudekin -baudrons -baul -bauleah -baumhauerite -baun -bauno -bauson -bausond -bauta -bauxite -bauxitite -bavaroy -bavary -bavenite -baviaantje -bavian -baviere -bavin -bavoso -baw -bawarchi -bawbee -bawcock -bawd -bawdily -bawdiness -bawdry -bawdship -bawdyhouse -bawl -bawler -bawley -bawn -bawtie -baxter -baxtone -bay -baya -bayadere -bayal -bayamo -bayard -bayardly -bayberry -baybolt -baybush -baycuru -bayed -bayeta -baygall -bayhead -bayish -bayldonite -baylet -baylike -bayman -bayness -bayok -bayonet -bayoneted -bayoneteer -bayou -baywood -bazaar -baze -bazoo -bazooka -bazzite -bdellid -bdellium -bdelloid -bdellotomy -be -beach -beachcomb -beachcomber -beachcombing -beached -beachhead -beachlamar -beachless -beachman -beachmaster -beachward -beachy -beacon -beaconage -beaconless -beaconwise -bead -beaded -beader -beadflush -beadhouse -beadily -beadiness -beading -beadle -beadledom -beadlehood -beadleism -beadlery -beadleship -beadlet -beadlike -beadman -beadroll -beadrow -beadsman -beadswoman -beadwork -beady -beagle -beagling -beak -beaked -beaker -beakerful -beakerman -beakermen -beakful -beakhead -beakiron -beaklike -beaky -beal -beala -bealing -beallach -bealtared -beam -beamage -beambird -beamed -beamer -beamfilling -beamful -beamhouse -beamily -beaminess -beaming -beamingly -beamish -beamless -beamlet -beamlike -beamman -beamsman -beamster -beamwork -beamy -bean -beanbag -beanbags -beancod -beanery -beanfeast -beanfeaster -beanfield -beanie -beano -beansetter -beanshooter -beanstalk -beant -beanweed -beany -beaproned -bear -bearable -bearableness -bearably -bearance -bearbaiter -bearbaiting -bearbane -bearberry -bearbind -bearbine -bearcoot -beard -bearded -bearder -beardie -bearding -beardless -beardlessness -beardom -beardtongue -beardy -bearer -bearess -bearfoot -bearherd -bearhide -bearhound -bearing -bearish -bearishly -bearishness -bearlet -bearlike -bearm -bearship -bearskin -beartongue -bearward -bearwood -bearwort -beast -beastbane -beastdom -beasthood -beastie -beastily -beastish -beastishness -beastlike -beastlily -beastliness -beastling -beastlings -beastly -beastman -beastship -beat -beata -beatable -beatae -beatee -beaten -beater -beaterman -beath -beatific -beatifical -beatifically -beatificate -beatification -beatify -beatinest -beating -beatitude -beatster -beatus -beau -beaufin -beauish -beauism -beaupere -beauseant -beauship -beauteous -beauteously -beauteousness -beauti -beautician -beautied -beautification -beautifier -beautiful -beautifully -beautifulness -beautify -beautihood -beauty -beautydom -beautyship -beaux -beaver -beaverboard -beavered -beaverette -beaverish -beaverism -beaverite -beaverize -beaverkin -beaverlike -beaverpelt -beaverroot -beaverteen -beaverwood -beavery -beback -bebait -beballed -bebang -bebannered -bebar -bebaron -bebaste -bebat -bebathe -bebatter -bebay -bebeast -bebed -bebeerine -bebeeru -bebelted -bebilya -bebite -bebization -beblain -beblear -bebled -bebless -beblister -beblood -bebloom -beblotch -beblubber -bebog -bebop -beboss -bebotch -bebothered -bebouldered -bebrave -bebreech -bebrine -bebrother -bebrush -bebump -bebusy -bebuttoned -becall -becalm -becalmment -becap -becard -becarpet -becarve -becassocked -becater -because -beccafico -becense -bechained -bechalk -bechance -becharm -bechase -bechatter -bechauffeur -becheck -becher -bechern -bechignoned -bechirp -becircled -becivet -beck -beckelite -becker -becket -beckiron -beckon -beckoner -beckoning -beckoningly -beclad -beclamor -beclamour -beclang -beclart -beclasp -beclatter -beclaw -becloak -beclog -beclothe -becloud -beclout -beclown -becluster -becobweb -becoiffed -becollier -becolme -becolor -becombed -become -becomes -becoming -becomingly -becomingness -becomma -becompass -becompliment -becoom -becoresh -becost -becousined -becovet -becoward -becquerelite -becram -becramp -becrampon -becrawl -becreep -becrime -becrimson -becrinolined -becripple -becroak -becross -becrowd -becrown -becrush -becrust -becry -becudgel -becuffed -becuiba -becumber -becuna -becurl -becurry -becurse -becurtained -becushioned -becut -bed -bedabble -bedad -bedaggered -bedamn -bedamp -bedangled -bedare -bedark -bedarken -bedash -bedaub -bedawn -beday -bedaze -bedazement -bedazzle -bedazzlement -bedazzling -bedazzlingly -bedboard -bedbug -bedcap -bedcase -bedchair -bedchamber -bedclothes -bedcord -bedcover -bedded -bedder -bedding -bedead -bedeaf -bedeafen -bedebt -bedeck -bedecorate -bedeguar -bedel -beden -bedene -bedesman -bedevil -bedevilment -bedew -bedewer -bedewoman -bedfast -bedfellow -bedfellowship -bedflower -bedfoot -bedframe -bedgery -bedgoer -bedgown -bediademed -bediamonded -bediaper -bedight -bedikah -bedim -bedimple -bedin -bedip -bedirt -bedirter -bedirty -bedismal -bedizen -bedizenment -bedkey -bedlam -bedlamer -bedlamism -bedlamite -bedlamitish -bedlamize -bedlar -bedless -bedlids -bedmaker -bedmaking -bedman -bedmate -bedoctor -bedog -bedolt -bedot -bedote -bedouse -bedown -bedoyo -bedpan -bedplate -bedpost -bedquilt -bedrabble -bedraggle -bedragglement -bedrail -bedral -bedrape -bedravel -bedrench -bedress -bedribble -bedrid -bedridden -bedriddenness -bedrift -bedright -bedrip -bedrivel -bedrizzle -bedrock -bedroll -bedroom -bedrop -bedrown -bedrowse -bedrug -bedscrew -bedsick -bedside -bedsite -bedsock -bedsore -bedspread -bedspring -bedstaff -bedstand -bedstaves -bedstead -bedstock -bedstraw -bedstring -bedtick -bedticking -bedtime -bedub -beduchess -beduck -beduke -bedull -bedumb -bedunce -bedunch -bedung -bedur -bedusk -bedust -bedwarf -bedway -bedways -bedwell -bedye -bee -beearn -beebread -beech -beechdrops -beechen -beechnut -beechwood -beechwoods -beechy -beedged -beedom -beef -beefeater -beefer -beefhead -beefheaded -beefily -beefin -beefiness -beefish -beefishness -beefless -beeflower -beefsteak -beeftongue -beefwood -beefy -beegerite -beehead -beeheaded -beeherd -beehive -beehouse -beeish -beeishness -beek -beekeeper -beekeeping -beekite -beelbow -beelike -beeline -beelol -beeman -beemaster -been -beennut -beer -beerage -beerbachite -beerbibber -beerhouse -beerily -beeriness -beerish -beerishly -beermaker -beermaking -beermonger -beerocracy -beerpull -beery -bees -beest -beestings -beeswax -beeswing -beeswinged -beet -beeth -beetle -beetled -beetlehead -beetleheaded -beetler -beetlestock -beetlestone -beetleweed -beetmister -beetrave -beetroot -beetrooty -beety -beeve -beevish -beeware -beeway -beeweed -beewise -beewort -befall -befame -befamilied -befamine -befan -befancy -befanned -befathered -befavor -befavour -befeather -beferned -befetished -befetter -befezzed -befiddle -befilch -befile -befilleted -befilmed -befilth -befinger -befire -befist -befit -befitting -befittingly -befittingness -beflag -beflannel -beflap -beflatter -beflea -befleck -beflounce -beflour -beflout -beflower -beflum -befluster -befoam -befog -befool -befoolment -befop -before -beforehand -beforeness -beforested -beforetime -beforetimes -befortune -befoul -befouler -befoulment -befountained -befraught -befreckle -befreeze -befreight -befret -befriend -befriender -befriendment -befrill -befringe -befriz -befrocked -befrogged -befrounce -befrumple -befuddle -befuddlement -befuddler -befume -befurbelowed -befurred -beg -begabled -begad -begall -begani -begar -begari -begarlanded -begarnish -begartered -begash -begat -begaud -begaudy -begay -begaze -begeck -begem -beget -begettal -begetter -beggable -beggar -beggardom -beggarer -beggaress -beggarhood -beggarism -beggarlike -beggarliness -beggarly -beggarman -beggarweed -beggarwise -beggarwoman -beggary -beggiatoaceous -begging -beggingly -beggingwise -begift -begiggle -begild -begin -beginger -beginner -beginning -begird -begirdle -beglad -beglamour -beglare -beglerbeg -beglerbeglic -beglerbegluc -beglerbegship -beglerbey -beglic -beglide -beglitter -beglobed -begloom -begloze -begluc -beglue -begnaw -bego -begob -begobs -begoggled -begohm -begone -begonia -begoniaceous -begorra -begorry -begotten -begottenness -begoud -begowk -begowned -begrace -begrain -begrave -begray -begrease -begreen -begrett -begrim -begrime -begrimer -begroan -begrown -begrudge -begrudgingly -begruntle -begrutch -begrutten -beguard -beguess -beguile -beguileful -beguilement -beguiler -beguiling -beguilingly -beguine -begulf -begum -begun -begunk -begut -behale -behalf -behallow -behammer -behap -behatted -behave -behavior -behavioral -behaviored -behaviorism -behaviorist -behavioristic -behavioristically -behead -beheadal -beheader -beheadlined -behear -behears -behearse -behedge -beheld -behelp -behemoth -behen -behenate -behenic -behest -behind -behinder -behindhand -behindsight -behint -behn -behold -beholdable -beholden -beholder -beholding -beholdingness -behoney -behoof -behooped -behoot -behoove -behooveful -behoovefully -behoovefulness -behooves -behooving -behoovingly -behorn -behorror -behowl -behung -behusband -behymn -behypocrite -beice -beige -being -beingless -beingness -beinked -beira -beisa -bejabers -bejade -bejan -bejant -bejaundice -bejazz -bejel -bejewel -bejezebel -bejig -bejuggle -bejumble -bekah -bekerchief -bekick -bekilted -beking -bekinkinite -bekiss -bekko -beknave -beknight -beknit -beknived -beknotted -beknottedly -beknottedness -beknow -beknown -bel -bela -belabor -belaced -beladle -belady -belage -belah -belam -belanda -belar -belard -belash -belate -belated -belatedly -belatedness -belatticed -belaud -belauder -belavendered -belay -belayer -belch -belcher -beld -beldam -beldamship -belderroot -belduque -beleaf -beleaguer -beleaguerer -beleaguerment -beleap -beleave -belecture -beledgered -belee -belemnid -belemnite -belemnitic -belemnoid -beletter -belfried -belfry -belga -belibel -belick -belie -belief -beliefful -belieffulness -beliefless -belier -believability -believable -believableness -believe -believer -believing -believingly -belight -beliked -belimousined -belion -beliquor -belite -belitter -belittle -belittlement -belittler -belive -bell -belladonna -bellarmine -bellbind -bellbird -bellbottle -bellboy -belle -belled -belledom -bellehood -belleric -belletrist -belletristic -bellflower -bellhanger -bellhanging -bellhop -bellhouse -bellicism -bellicose -bellicosely -bellicoseness -bellicosity -bellied -belliferous -belligerence -belligerency -belligerent -belligerently -belling -bellipotent -bellite -bellmaker -bellmaking -bellman -bellmanship -bellmaster -bellmouth -bellmouthed -bellonion -bellote -bellow -bellower -bellows -bellowsful -bellowslike -bellowsmaker -bellowsmaking -bellowsman -bellpull -belltail -belltopper -belltopperdom -bellware -bellwaver -bellweed -bellwether -bellwind -bellwine -bellwood -bellwort -belly -bellyache -bellyband -bellyer -bellyfish -bellyflaught -bellyful -bellying -bellyland -bellylike -bellyman -bellypiece -bellypinch -beloam -beloeilite -beloid -belomancy -belonesite -belong -belonger -belonging -belonid -belonite -belonoid -belonosphaerite -belord -belout -belove -beloved -below -belowstairs -belozenged -belsire -belt -belted -belter -beltie -beltine -belting -beltmaker -beltmaking -beltman -belton -beltwise -beluga -belugite -belute -belve -belvedere -bely -belying -belyingly -belzebuth -bema -bemad -bemadam -bemaddening -bemail -bemaim -bemajesty -beman -bemangle -bemantle -bemar -bemartyr -bemask -bemaster -bemat -bemata -bemaul -bemazed -bemeal -bemean -bemedaled -bemedalled -bementite -bemercy -bemingle -beminstrel -bemire -bemirement -bemirror -bemirrorment -bemist -bemistress -bemitered -bemitred -bemix -bemoan -bemoanable -bemoaner -bemoaning -bemoaningly -bemoat -bemock -bemoil -bemoisten -bemole -bemolt -bemonster -bemoon -bemotto -bemoult -bemouth -bemuck -bemud -bemuddle -bemuddlement -bemuddy -bemuffle -bemurmur -bemuse -bemused -bemusedly -bemusement -bemusk -bemuslined -bemuzzle -ben -bena -benab -bename -benami -benamidar -benasty -benben -bench -benchboard -bencher -benchership -benchfellow -benchful -benching -benchland -benchlet -benchman -benchwork -benchy -bencite -bend -benda -bendability -bendable -bended -bender -bending -bendingly -bendlet -bendsome -bendwise -bendy -bene -beneaped -beneath -beneception -beneceptive -beneceptor -benedicite -benedict -benediction -benedictional -benedictionary -benedictive -benedictively -benedictory -benedight -benefaction -benefactive -benefactor -benefactorship -benefactory -benefactress -benefic -benefice -beneficed -beneficeless -beneficence -beneficent -beneficential -beneficently -beneficial -beneficially -beneficialness -beneficiary -beneficiaryship -beneficiate -beneficiation -benefit -benefiter -beneighbored -benempt -benempted -beneplacito -benet -benettle -benevolence -benevolent -benevolently -benevolentness -benevolist -beng -bengaline -beni -benight -benighted -benightedness -benighten -benighter -benightmare -benightment -benign -benignancy -benignant -benignantly -benignity -benignly -benison -benitoite -benj -benjamin -benjaminite -benjy -benmost -benn -benne -bennel -bennet -bennettitaceous -bennetweed -benny -beno -benorth -benote -bensel -bensh -benshea -benshee -benshi -bent -bentang -benthal -benthic -benthon -benthonic -benthos -bentiness -benting -bentonite -bentstar -bentwood -benty -benumb -benumbed -benumbedness -benumbing -benumbingly -benumbment -benward -benweed -benzacridine -benzal -benzalacetone -benzalacetophenone -benzalaniline -benzalazine -benzalcohol -benzalcyanhydrin -benzaldehyde -benzaldiphenyl -benzaldoxime -benzalethylamine -benzalhydrazine -benzalphenylhydrazone -benzalphthalide -benzamide -benzamido -benzamine -benzaminic -benzamino -benzanalgen -benzanilide -benzanthrone -benzantialdoxime -benzazide -benzazimide -benzazine -benzazole -benzbitriazole -benzdiazine -benzdifuran -benzdioxazine -benzdioxdiazine -benzdioxtriazine -benzein -benzene -benzenediazonium -benzenoid -benzenyl -benzhydrol -benzhydroxamic -benzidine -benzidino -benzil -benzilic -benzimidazole -benziminazole -benzinduline -benzine -benzo -benzoate -benzoated -benzoazurine -benzobis -benzocaine -benzocoumaran -benzodiazine -benzodiazole -benzoflavine -benzofluorene -benzofulvene -benzofuran -benzofuroquinoxaline -benzofuryl -benzoglycolic -benzoglyoxaline -benzohydrol -benzoic -benzoid -benzoin -benzoinated -benzoiodohydrin -benzol -benzolate -benzole -benzolize -benzomorpholine -benzonaphthol -benzonitrile -benzonitrol -benzoperoxide -benzophenanthrazine -benzophenanthroline -benzophenazine -benzophenol -benzophenone -benzophenothiazine -benzophenoxazine -benzophloroglucinol -benzophosphinic -benzophthalazine -benzopinacone -benzopyran -benzopyranyl -benzopyrazolone -benzopyrylium -benzoquinoline -benzoquinone -benzoquinoxaline -benzosulphimide -benzotetrazine -benzotetrazole -benzothiazine -benzothiazole -benzothiazoline -benzothiodiazole -benzothiofuran -benzothiophene -benzothiopyran -benzotoluide -benzotriazine -benzotriazole -benzotrichloride -benzotrifuran -benzoxate -benzoxy -benzoxyacetic -benzoxycamphor -benzoxyphenanthrene -benzoyl -benzoylate -benzoylation -benzoylformic -benzoylglycine -benzpinacone -benzthiophen -benztrioxazine -benzyl -benzylamine -benzylic -benzylidene -benzylpenicillin -beode -bepaid -bepale -bepaper -beparch -beparody -beparse -bepart -bepaste -bepastured -bepat -bepatched -bepaw -bepearl -bepelt -bepen -bepepper -beperiwigged -bepester -bepewed -bephilter -bephrase -bepicture -bepiece -bepierce -bepile -bepill -bepillared -bepimple -bepinch -bepistoled -bepity -beplague -beplaided -beplaster -beplumed -bepommel -bepowder -bepraise -bepraisement -bepraiser -beprank -bepray -bepreach -bepress -bepretty -bepride -beprose -bepuddle -bepuff -bepun -bepurple -bepuzzle -bepuzzlement -bequalm -bequeath -bequeathable -bequeathal -bequeather -bequeathment -bequest -bequirtle -bequote -ber -berain -berairou -berakah -berake -berakoth -berapt -berascal -berat -berate -berattle -beraunite -beray -berbamine -berberid -berberidaceous -berberine -berberry -berdache -bere -bereason -bereave -bereavement -bereaven -bereaver -bereft -berend -berengelite -beresite -beret -berewick -berg -bergalith -bergamiol -bergamot -bergander -bergaptene -berger -berghaan -berginization -berginize -berglet -bergschrund -bergut -bergy -bergylt -berhyme -beribanded -beribboned -beriberi -beriberic -beride -berigora -beringed -beringite -beringleted -berinse -berith -berkelium -berkovets -berkowitz -berley -berlin -berline -berlinite -berm -bermudite -berne -bernicle -berobed -beroll -berouged -beround -berrendo -berret -berri -berried -berrier -berrigan -berrugate -berry -berrybush -berryless -berrylike -berrypicker -berrypicking -berseem -berserk -berserker -berth -berthage -berthed -berther -berthierite -berthing -bertram -bertrandite -bertrum -beruffed -beruffled -berust -bervie -berycid -beryciform -berycine -berycoid -berycoidean -beryl -berylate -beryllia -berylline -berylliosis -beryllium -berylloid -beryllonate -beryllonite -beryllosis -berzelianite -berzeliite -bes -besa -besagne -besaiel -besaint -besan -besanctify -besauce -bescab -bescarf -bescatter -bescent -bescorch -bescorn -bescoundrel -bescour -bescourge -bescramble -bescrape -bescratch -bescrawl -bescreen -bescribble -bescurf -bescurvy -bescutcheon -beseam -besee -beseech -beseecher -beseeching -beseechingly -beseechingness -beseechment -beseem -beseeming -beseemingly -beseemingness -beseemliness -beseemly -beseen -beset -besetment -besetter -besetting -beshackle -beshade -beshadow -beshag -beshake -beshame -beshawled -beshear -beshell -beshield -beshine -beshiver -beshlik -beshod -beshout -beshow -beshower -beshrew -beshriek -beshrivel -beshroud -besiclometer -beside -besides -besiege -besieged -besiegement -besieger -besieging -besiegingly -besigh -besilver -besin -besing -besiren -besit -beslab -beslap -beslash -beslave -beslaver -besleeve -beslime -beslimer -beslings -beslipper -beslobber -beslow -beslubber -beslur -beslushed -besmear -besmearer -besmell -besmile -besmirch -besmircher -besmirchment -besmoke -besmooth -besmother -besmouch -besmudge -besmut -besmutch -besnare -besneer -besnivel -besnow -besnuff -besodden -besogne -besognier -besoil -besom -besomer -besonnet -besoot -besoothe -besoothement -besot -besotment -besotted -besottedly -besottedness -besotting -besottingly -besought -besoul -besour -bespangle -bespate -bespatter -bespatterer -bespatterment -bespawl -bespeak -bespeakable -bespeaker -bespecked -bespeckle -bespecklement -bespectacled -besped -bespeech -bespeed -bespell -bespelled -bespend -bespete -bespew -bespice -bespill -bespin -bespirit -bespit -besplash -besplatter -besplit -bespoke -bespoken -bespot -bespottedness -bespouse -bespout -bespray -bespread -besprent -besprinkle -besprinkler -bespurred -besputter -bespy -besqueeze -besquib -besra -bessemer -bessemerize -best -bestab -bestain -bestamp -bestar -bestare -bestarve -bestatued -bestay -bestayed -bestead -besteer -bestench -bester -bestial -bestialism -bestialist -bestiality -bestialize -bestially -bestiarian -bestiarianism -bestiary -bestick -bestill -bestink -bestir -bestness -bestock -bestore -bestorm -bestove -bestow -bestowable -bestowage -bestowal -bestower -bestowing -bestowment -bestraddle -bestrapped -bestraught -bestraw -bestreak -bestream -bestrew -bestrewment -bestride -bestripe -bestrode -bestubbled -bestuck -bestud -besugar -besuit -besully -beswarm -besweatered -besweeten -beswelter -beswim -beswinge -beswitch -bet -beta -betacism -betacismus -betafite -betag -betail -betailor -betaine -betainogen -betalk -betallow -betangle -betanglement -betask -betassel -betatron -betattered -betaxed -betear -beteela -beteem -betel -beth -bethabara -bethankit -bethel -bethflower -bethink -bethought -bethrall -bethreaten -bethroot -bethumb -bethump -bethunder -bethwack -betide -betimber -betimes -betinge -betipple -betire -betis -betitle -betocsin -betoil -betoken -betokener -betone -betongue -betony -betorcin -betorcinol -betoss -betowel -betowered -betrace -betrail -betrample -betrap -betravel -betray -betrayal -betrayer -betrayment -betread -betrend -betrim -betrinket -betroth -betrothal -betrothed -betrothment -betrough -betrousered -betrumpet -betrunk -betso -betted -better -betterer -bettergates -bettering -betterly -betterment -bettermost -betterness -betters -betting -bettong -bettonga -bettor -betty -betuckered -betulaceous -betulin -betulinamaric -betulinic -betulinol -beturbaned -betusked -betutor -betutored -betwattled -between -betweenbrain -betweenity -betweenmaid -betweenness -betweenwhiles -betwine -betwit -betwixen -betwixt -beudantite -beuniformed -bevatron -beveil -bevel -beveled -beveler -bevelled -bevelment -bevenom -bever -beverage -beverse -bevesseled -bevesselled -beveto -bevillain -bevined -bevoiled -bevomit -bevue -bevy -bewail -bewailable -bewailer -bewailing -bewailingly -bewailment -bewaitered -bewall -beware -bewash -bewaste -bewater -beweary -beweep -beweeper -bewelcome -bewelter -bewept -bewest -bewet -bewhig -bewhiskered -bewhisper -bewhistle -bewhite -bewhiten -bewidow -bewig -bewigged -bewilder -bewildered -bewilderedly -bewilderedness -bewildering -bewilderingly -bewilderment -bewimple -bewinged -bewinter -bewired -bewitch -bewitchedness -bewitcher -bewitchery -bewitchful -bewitching -bewitchingly -bewitchingness -bewitchment -bewith -bewizard -bework -beworm -beworn -beworry -beworship -bewrap -bewrathed -bewray -bewrayer -bewrayingly -bewrayment -bewreath -bewreck -bewrite -bey -beydom -beylic -beylical -beyond -beyrichite -beyship -bezant -bezantee -bezanty -bezel -bezesteen -bezetta -bezique -bezoar -bezoardic -bezonian -bezzi -bezzle -bezzo -bhabar -bhagavat -bhagavata -bhaiachari -bhaiyachara -bhakta -bhakti -bhalu -bhandar -bhandari -bhang -bhangi -bhara -bharal -bhat -bhava -bheesty -bhikku -bhikshu -bhoosa -bhoy -bhungi -bhungini -bhut -bhutatathata -biabo -biacetyl -biacetylene -biacid -biacromial -biacuminate -biacuru -bialate -biallyl -bialveolar -bianchite -bianco -biangular -biangulate -biangulated -biangulous -bianisidine -biannual -biannually -biannulate -biarchy -biarcuate -biarcuated -biarticular -biarticulate -biarticulated -bias -biasness -biasteric -biaswise -biatomic -biauricular -biauriculate -biaxal -biaxial -biaxiality -biaxially -biaxillary -bib -bibacious -bibacity -bibasic -bibation -bibb -bibber -bibble -bibbler -bibbons -bibcock -bibenzyl -bibi -bibionid -bibiri -bibitory -bibless -biblioclasm -biblioclast -bibliofilm -bibliogenesis -bibliognost -bibliognostic -bibliogony -bibliograph -bibliographer -bibliographic -bibliographical -bibliographically -bibliographize -bibliography -biblioklept -bibliokleptomania -bibliokleptomaniac -bibliolater -bibliolatrous -bibliolatry -bibliological -bibliologist -bibliology -bibliomancy -bibliomane -bibliomania -bibliomaniac -bibliomaniacal -bibliomanian -bibliomanianism -bibliomanism -bibliomanist -bibliopegic -bibliopegist -bibliopegistic -bibliopegy -bibliophage -bibliophagic -bibliophagist -bibliophagous -bibliophile -bibliophilic -bibliophilism -bibliophilist -bibliophilistic -bibliophily -bibliophobia -bibliopolar -bibliopole -bibliopolery -bibliopolic -bibliopolical -bibliopolically -bibliopolism -bibliopolist -bibliopolistic -bibliopoly -bibliosoph -bibliotaph -bibliotaphic -bibliothec -bibliotheca -bibliothecal -bibliothecarial -bibliothecarian -bibliothecary -bibliotherapeutic -bibliotherapist -bibliotherapy -bibliothetic -bibliotic -bibliotics -bibliotist -biblus -biborate -bibracteate -bibracteolate -bibulosity -bibulous -bibulously -bibulousness -bicalcarate -bicameral -bicameralism -bicamerist -bicapitate -bicapsular -bicarbonate -bicarbureted -bicarinate -bicarpellary -bicarpellate -bicaudal -bicaudate -bice -bicellular -bicentenary -bicentennial -bicephalic -bicephalous -biceps -bicetyl -bichir -bichloride -bichord -bichromate -bichromatic -bichromatize -bichrome -bichromic -bichy -biciliate -biciliated -bicipital -bicipitous -bicircular -bicirrose -bick -bicker -bickerer -bickern -biclavate -biclinium -bicollateral -bicollaterality -bicolligate -bicolor -bicolored -bicolorous -biconcave -biconcavity -bicondylar -bicone -biconic -biconical -biconically -biconjugate -biconsonantal -biconvex -bicorn -bicornate -bicorne -bicorned -bicornous -bicornuate -bicornuous -bicornute -bicorporal -bicorporate -bicorporeal -bicostate -bicrenate -bicrescentic -bicrofarad -bicron -bicrural -bicursal -bicuspid -bicuspidate -bicyanide -bicycle -bicycler -bicyclic -bicyclism -bicyclist -bicyclo -bicycloheptane -bicylindrical -bid -bidactyl -bidactyle -bidactylous -bidar -bidarka -bidcock -biddable -biddableness -biddably -biddance -bidder -bidding -biddy -bide -bident -bidental -bidentate -bidented -bidential -bidenticulate -bider -bidet -bidigitate -bidimensional -biding -bidirectional -bidiurnal -bidri -biduous -bieberite -bield -bieldy -bielectrolysis -bielenite -bien -bienly -bienness -biennia -biennial -biennially -biennium -bier -bierbalk -biethnic -bietle -bifacial -bifanged -bifara -bifarious -bifariously -bifer -biferous -biff -biffin -bifid -bifidate -bifidated -bifidity -bifidly -bifilar -bifilarly -bifistular -biflabellate -biflagellate -biflecnode -biflected -biflex -biflorate -biflorous -bifluoride -bifocal -bifoil -bifold -bifolia -bifoliate -bifoliolate -bifolium -biforked -biform -biformed -biformity -biforous -bifront -bifrontal -bifronted -bifurcal -bifurcate -bifurcated -bifurcately -bifurcation -big -biga -bigamic -bigamist -bigamistic -bigamize -bigamous -bigamously -bigamy -bigarade -bigaroon -bigarreau -bigbloom -bigemina -bigeminal -bigeminate -bigeminated -bigeminum -bigener -bigeneric -bigential -bigeye -bigg -biggah -biggen -bigger -biggest -biggin -biggish -biggonet -bigha -bighead -bighearted -bigheartedness -bighorn -bight -biglandular -biglenoid -biglot -bigmouth -bigmouthed -bigness -bignoniaceous -bignoniad -bignou -bigoniac -bigonial -bigot -bigoted -bigotedly -bigotish -bigotry -bigotty -bigroot -bigthatch -biguanide -biguttate -biguttulate -bigwig -bigwigged -bigwiggedness -bigwiggery -bigwiggism -bihamate -biharmonic -bihourly -bihydrazine -bija -bijasal -bijou -bijouterie -bijoux -bijugate -bijugular -bike -bikh -bikhaconitine -bikini -bilabe -bilabial -bilabiate -bilalo -bilamellar -bilamellate -bilamellated -bilaminar -bilaminate -bilaminated -bilander -bilateral -bilateralism -bilaterality -bilaterally -bilateralness -bilberry -bilbie -bilbo -bilboquet -bilby -bilch -bilcock -bildar -bilders -bile -bilestone -bilge -bilgy -bilharzial -bilharziasis -bilharzic -bilharziosis -bilianic -biliary -biliate -biliation -bilic -bilicyanin -bilifaction -biliferous -bilification -bilifuscin -bilify -bilihumin -bilimbi -bilimbing -biliment -bilinear -bilineate -bilingual -bilingualism -bilingually -bilinguar -bilinguist -bilinigrin -bilinite -bilio -bilious -biliously -biliousness -biliprasin -bilipurpurin -bilipyrrhin -bilirubin -bilirubinemia -bilirubinic -bilirubinuria -biliteral -biliteralism -bilith -bilithon -biliverdic -biliverdin -bilixanthin -bilk -bilker -bill -billa -billable -billabong -billback -billbeetle -billboard -billbroking -billbug -billed -biller -billet -billeter -billethead -billeting -billetwood -billety -billfish -billfold -billhead -billheading -billholder -billhook -billian -billiard -billiardist -billiardly -billiards -billikin -billing -billingsgate -billion -billionaire -billionism -billionth -billitonite -billman -billon -billot -billow -billowiness -billowy -billposter -billposting -billsticker -billsticking -billy -billyboy -billycan -billycock -billyer -billyhood -billywix -bilo -bilobated -bilobe -bilobed -bilobiate -bilobular -bilocation -bilocellate -bilocular -biloculate -biloculine -bilophodont -bilsh -bilsted -biltong -biltongue -bimaculate -bimaculated -bimalar -bimanal -bimane -bimanous -bimanual -bimanually -bimarginate -bimarine -bimastic -bimastism -bimastoid -bimasty -bimaxillary -bimbil -bimeby -bimensal -bimester -bimestrial -bimetalic -bimetallism -bimetallist -bimetallistic -bimillenary -bimillennium -bimillionaire -bimodal -bimodality -bimolecular -bimonthly -bimotored -bimotors -bimucronate -bimuscular -bin -binal -binaphthyl -binarium -binary -binate -binately -bination -binational -binaural -binauricular -binbashi -bind -binder -bindery -bindheimite -binding -bindingly -bindingness -bindle -bindlet -bindoree -bindweb -bindweed -bindwith -bindwood -bine -binervate -bineweed -bing -binge -bingey -binghi -bingle -bingo -bingy -binh -biniodide -bink -binman -binna -binnacle -binning -binnite -binnogue -bino -binocle -binocular -binocularity -binocularly -binoculate -binodal -binode -binodose -binodous -binomenclature -binomial -binomialism -binomially -binominal -binominated -binominous -binormal -binotic -binotonous -binous -binoxalate -binoxide -bint -bintangor -binturong -binuclear -binucleate -binucleated -binucleolate -binukau -biobibliographical -biobibliography -bioblast -bioblastic -biocatalyst -biocellate -biocentric -biochemic -biochemical -biochemically -biochemics -biochemist -biochemistry -biochemy -biochore -bioclimatic -bioclimatology -biocoenose -biocoenosis -biocoenotic -biocycle -biod -biodynamic -biodynamical -biodynamics -biodyne -bioecologic -bioecological -bioecologically -bioecologist -bioecology -biogen -biogenase -biogenesis -biogenesist -biogenetic -biogenetical -biogenetically -biogenetics -biogenous -biogeny -biogeochemistry -biogeographic -biogeographical -biogeographically -biogeography -biognosis -biograph -biographee -biographer -biographic -biographical -biographically -biographist -biographize -biography -bioherm -biokinetics -biolinguistics -biolith -biologese -biologic -biological -biologically -biologicohumanistic -biologism -biologist -biologize -biology -bioluminescence -bioluminescent -biolysis -biolytic -biomagnetic -biomagnetism -biomathematics -biome -biomechanical -biomechanics -biometeorology -biometer -biometric -biometrical -biometrically -biometrician -biometricist -biometrics -biometry -biomicroscopy -bion -bionergy -bionomic -bionomical -bionomically -bionomics -bionomist -bionomy -biophagism -biophagous -biophagy -biophilous -biophore -biophotophone -biophysical -biophysicochemical -biophysics -biophysiography -biophysiological -biophysiologist -biophysiology -biophyte -bioplasm -bioplasmic -bioplast -bioplastic -bioprecipitation -biopsic -biopsy -biopsychic -biopsychical -biopsychological -biopsychologist -biopsychology -biopyribole -bioral -biorbital -biordinal -bioreaction -biorgan -bios -bioscope -bioscopic -bioscopy -biose -biosis -biosocial -biosociological -biosphere -biostatic -biostatical -biostatics -biostatistics -biosterin -biosterol -biostratigraphy -biosynthesis -biosynthetic -biosystematic -biosystematics -biosystematist -biosystematy -biota -biotaxy -biotechnics -biotic -biotical -biotics -biotin -biotite -biotitic -biotome -biotomy -biotope -biotype -biotypic -biovular -biovulate -bioxalate -bioxide -bipack -bipaleolate -bipalmate -biparasitic -biparental -biparietal -biparous -biparted -bipartible -bipartient -bipartile -bipartisan -bipartisanship -bipartite -bipartitely -bipartition -biparty -bipaschal -bipectinate -bipectinated -biped -bipedal -bipedality -bipedism -bipeltate -bipennate -bipennated -bipenniform -biperforate -bipersonal -bipetalous -biphase -biphasic -biphenol -biphenyl -biphenylene -bipinnaria -bipinnate -bipinnated -bipinnately -bipinnatifid -bipinnatiparted -bipinnatipartite -bipinnatisect -bipinnatisected -biplanal -biplanar -biplane -biplicate -biplicity -biplosion -biplosive -bipod -bipolar -bipolarity -bipolarize -biporose -biporous -biprism -biprong -bipunctal -bipunctate -bipunctual -bipupillate -bipyramid -bipyramidal -bipyridine -bipyridyl -biquadrantal -biquadrate -biquadratic -biquarterly -biquartz -biquintile -biracial -biracialism -biradial -biradiate -biradiated -biramous -birational -birch -birchbark -birchen -birching -birchman -birchwood -bird -birdbander -birdbanding -birdbath -birdberry -birdcall -birdcatcher -birdcatching -birdclapper -birdcraft -birddom -birdeen -birder -birdglue -birdhood -birdhouse -birdie -birdikin -birding -birdland -birdless -birdlet -birdlike -birdlime -birdling -birdlore -birdman -birdmouthed -birdnest -birdnester -birdseed -birdstone -birdweed -birdwise -birdwoman -birdy -birectangular -birefracting -birefraction -birefractive -birefringence -birefringent -bireme -biretta -biri -biriba -birimose -birk -birken -birkie -birkremite -birl -birle -birler -birlie -birlieman -birlinn -birma -birn -birny -birostrate -birostrated -birotation -birotatory -birr -birse -birsle -birsy -birth -birthbed -birthday -birthland -birthless -birthmark -birthmate -birthnight -birthplace -birthright -birthroot -birthstone -birthstool -birthwort -birthy -bis -bisabol -bisaccate -bisacromial -bisalt -bisantler -bisaxillary -bisbeeite -biscacha -biscayen -bischofite -biscotin -biscuit -biscuiting -biscuitlike -biscuitmaker -biscuitmaking -biscuitroot -biscuitry -bisdiapason -bisdimethylamino -bisect -bisection -bisectional -bisectionally -bisector -bisectrices -bisectrix -bisegment -biseptate -biserial -biserially -biseriate -biseriately -biserrate -bisetose -bisetous -bisexed -bisext -bisexual -bisexualism -bisexuality -bisexually -bisexuous -bisglyoxaline -bishop -bishopdom -bishopess -bishopful -bishophood -bishopless -bishoplet -bishoplike -bishopling -bishopric -bishopship -bishopweed -bisiliac -bisilicate -bisiliquous -bisimine -bisinuate -bisinuation -bisischiadic -bisischiatic -bislings -bismar -bismarine -bismerpund -bismillah -bismite -bismuth -bismuthal -bismuthate -bismuthic -bismuthide -bismuthiferous -bismuthine -bismuthinite -bismuthite -bismuthous -bismuthyl -bismutite -bismutoplagionite -bismutosmaltite -bismutosphaerite -bisnaga -bison -bisonant -bisontine -bisphenoid -bispinose -bispinous -bispore -bisporous -bisque -bisquette -bissext -bissextile -bisson -bistate -bistephanic -bister -bistered -bistetrazole -bisti -bistipular -bistipulate -bistipuled -bistort -bistournage -bistoury -bistratal -bistratose -bistriate -bistriazole -bistro -bisubstituted -bisubstitution -bisulcate -bisulfid -bisulphate -bisulphide -bisulphite -bisyllabic -bisyllabism -bisymmetric -bisymmetrical -bisymmetrically -bisymmetry -bit -bitable -bitangent -bitangential -bitanhol -bitartrate -bitbrace -bitch -bite -bitemporal -bitentaculate -biter -biternate -biternately -bitesheep -bitewing -bitheism -biti -biting -bitingly -bitingness -bitless -bito -bitolyl -bitonality -bitreadle -bitripartite -bitripinnatifid -bitriseptate -bitrochanteric -bitstock -bitstone -bitt -bitted -bitten -bitter -bitterbark -bitterblain -bitterbloom -bitterbur -bitterbush -bitterful -bitterhead -bitterhearted -bitterheartedness -bittering -bitterish -bitterishness -bitterless -bitterling -bitterly -bittern -bitterness -bitternut -bitterroot -bitters -bittersweet -bitterweed -bitterwood -bitterworm -bitterwort -bitthead -bittie -bittock -bitty -bitubercular -bituberculate -bituberculated -bitulithic -bitume -bitumed -bitumen -bituminate -bituminiferous -bituminization -bituminize -bituminoid -bituminous -bitwise -bityite -bitypic -biune -biunial -biunity -biunivocal -biurate -biurea -biuret -bivalence -bivalency -bivalent -bivalve -bivalved -bivalvian -bivalvous -bivalvular -bivariant -bivariate -bivascular -bivaulted -bivector -biventer -biventral -biverbal -bivinyl -bivious -bivittate -bivocal -bivocalized -bivoltine -bivoluminous -bivouac -biwa -biweekly -biwinter -bixaceous -bixbyite -bixin -biyearly -biz -bizardite -bizarre -bizarrely -bizarreness -bizet -bizonal -bizone -bizygomatic -bizz -blab -blabber -blabberer -blachong -black -blackacre -blackamoor -blackback -blackball -blackballer -blackband -blackbelly -blackberry -blackbine -blackbird -blackbirder -blackbirding -blackboard -blackboy -blackbreast -blackbush -blackbutt -blackcap -blackcoat -blackcock -blackdamp -blacken -blackener -blackening -blacker -blacketeer -blackey -blackeyes -blackface -blackfellow -blackfellows -blackfin -blackfire -blackfish -blackfisher -blackfishing -blackfoot -blackguard -blackguardism -blackguardize -blackguardly -blackguardry -blackhead -blackheads -blackheart -blackhearted -blackheartedness -blackie -blacking -blackish -blackishly -blackishness -blackit -blackjack -blackland -blackleg -blackleggery -blacklegism -blacklegs -blackly -blackmail -blackmailer -blackneb -blackneck -blackness -blacknob -blackout -blackpoll -blackroot -blackseed -blackshirted -blacksmith -blacksmithing -blackstick -blackstrap -blacktail -blackthorn -blacktongue -blacktree -blackwash -blackwasher -blackwater -blackwood -blackwork -blackwort -blacky -blad -bladder -bladderet -bladderless -bladderlike -bladdernose -bladdernut -bladderpod -bladderseed -bladderweed -bladderwort -bladdery -blade -bladebone -bladed -bladelet -bladelike -blader -bladesmith -bladewise -blading -bladish -blady -bladygrass -blae -blaeberry -blaeness -blaewort -blaff -blaffert -blaflum -blah -blahlaut -blain -blair -blairmorite -blake -blakeberyed -blamable -blamableness -blamably -blame -blamed -blameful -blamefully -blamefulness -blameless -blamelessly -blamelessness -blamer -blameworthiness -blameworthy -blaming -blamingly -blan -blanc -blanca -blancard -blanch -blancher -blanching -blanchingly -blancmange -blancmanger -blanco -bland -blanda -blandiloquence -blandiloquious -blandiloquous -blandish -blandisher -blandishing -blandishingly -blandishment -blandly -blandness -blank -blankard -blankbook -blanked -blankeel -blanket -blanketed -blanketeer -blanketflower -blanketing -blanketless -blanketmaker -blanketmaking -blanketry -blanketweed -blankety -blanking -blankish -blankite -blankly -blankness -blanky -blanque -blanquillo -blare -blarney -blarneyer -blarnid -blarny -blart -blas -blase -blash -blashy -blaspheme -blasphemer -blasphemous -blasphemously -blasphemousness -blasphemy -blast -blasted -blastema -blastemal -blastematic -blastemic -blaster -blastful -blasthole -blastid -blastie -blasting -blastment -blastocarpous -blastocheme -blastochyle -blastocoele -blastocolla -blastocyst -blastocyte -blastoderm -blastodermatic -blastodermic -blastodisk -blastogenesis -blastogenetic -blastogenic -blastogeny -blastogranitic -blastoid -blastoma -blastomata -blastomere -blastomeric -blastomycete -blastomycetic -blastomycetous -blastomycosis -blastomycotic -blastoneuropore -blastophitic -blastophoral -blastophore -blastophoric -blastophthoria -blastophthoric -blastophyllum -blastoporal -blastopore -blastoporic -blastoporphyritic -blastosphere -blastospheric -blastostylar -blastostyle -blastozooid -blastplate -blastula -blastulae -blastular -blastulation -blastule -blasty -blat -blatancy -blatant -blatantly -blate -blately -blateness -blather -blatherer -blatherskite -blathery -blatjang -blatta -blatter -blatterer -blatti -blattid -blattiform -blattoid -blaubok -blauwbok -blaver -blaw -blawort -blay -blaze -blazer -blazing -blazingly -blazon -blazoner -blazoning -blazonment -blazonry -blazy -bleaberry -bleach -bleachability -bleachable -bleached -bleacher -bleacherite -bleacherman -bleachery -bleachfield -bleachground -bleachhouse -bleaching -bleachman -bleachworks -bleachyard -bleak -bleakish -bleakly -bleakness -bleaky -blear -bleared -blearedness -bleareye -bleariness -blearness -bleary -bleat -bleater -bleating -bleatingly -bleaty -bleb -blebby -blechnoid -bleck -blee -bleed -bleeder -bleeding -bleekbok -bleery -bleeze -bleezy -blellum -blemish -blemisher -blemishment -blench -blencher -blenching -blenchingly -blencorn -blend -blendcorn -blende -blended -blender -blending -blendor -blendure -blendwater -blennadenitis -blennemesis -blennenteria -blennenteritis -blenniid -blenniiform -blennioid -blennocele -blennocystitis -blennoemesis -blennogenic -blennogenous -blennoid -blennoma -blennometritis -blennophlogisma -blennophlogosis -blennophthalmia -blennoptysis -blennorrhagia -blennorrhagic -blennorrhea -blennorrheal -blennorrhinia -blennosis -blennostasis -blennostatic -blennothorax -blennotorrhea -blennuria -blenny -blennymenitis -blent -bleo -blephara -blepharadenitis -blepharal -blepharanthracosis -blepharedema -blepharelcosis -blepharemphysema -blepharism -blepharitic -blepharitis -blepharoadenitis -blepharoadenoma -blepharoatheroma -blepharoblennorrhea -blepharocarcinoma -blepharochalasis -blepharochromidrosis -blepharoclonus -blepharocoloboma -blepharoconjunctivitis -blepharodiastasis -blepharodyschroia -blepharohematidrosis -blepharolithiasis -blepharomelasma -blepharoncosis -blepharoncus -blepharophimosis -blepharophryplasty -blepharophthalmia -blepharophyma -blepharoplast -blepharoplastic -blepharoplasty -blepharoplegia -blepharoptosis -blepharopyorrhea -blepharorrhaphy -blepharospasm -blepharospath -blepharosphincterectomy -blepharostat -blepharostenosis -blepharosymphysis -blepharosyndesmitis -blepharosynechia -blepharotomy -blepharydatis -blesbok -blesbuck -bless -blessed -blessedly -blessedness -blesser -blessing -blessingly -blest -blet -bletheration -blewits -blibe -blick -blickey -blight -blightbird -blighted -blighter -blighting -blightingly -blighty -blimbing -blimp -blimy -blind -blindage -blindball -blinded -blindedly -blinder -blindeyes -blindfast -blindfish -blindfold -blindfolded -blindfoldedness -blindfolder -blindfoldly -blinding -blindingly -blindish -blindless -blindling -blindly -blindness -blindstory -blindweed -blindworm -blink -blinkard -blinked -blinker -blinkered -blinking -blinkingly -blinks -blinky -blinter -blintze -blip -bliss -blissful -blissfully -blissfulness -blissless -blissom -blister -blistered -blistering -blisteringly -blisterweed -blisterwort -blistery -blite -blithe -blithebread -blitheful -blithefully -blithehearted -blithelike -blithely -blithemeat -blithen -blitheness -blither -blithering -blithesome -blithesomely -blithesomeness -blitter -blitz -blitzbuggy -blitzkrieg -blizz -blizzard -blizzardly -blizzardous -blizzardy -blo -bloat -bloated -bloatedness -bloater -bloating -blob -blobbed -blobber -blobby -bloc -block -blockade -blockader -blockage -blockbuster -blocked -blocker -blockhead -blockheaded -blockheadedly -blockheadedness -blockheadish -blockheadishness -blockheadism -blockholer -blockhouse -blockiness -blocking -blockish -blockishly -blockishness -blocklayer -blocklike -blockmaker -blockmaking -blockman -blockpate -blockship -blocky -blodite -bloke -blolly -blomstrandine -blonde -blondeness -blondine -blood -bloodalley -bloodalp -bloodbeat -bloodberry -bloodbird -bloodcurdler -bloodcurdling -blooddrop -blooddrops -blooded -bloodfin -bloodflower -bloodguilt -bloodguiltiness -bloodguiltless -bloodguilty -bloodhound -bloodied -bloodily -bloodiness -bloodleaf -bloodless -bloodlessly -bloodlessness -bloodletter -bloodletting -bloodline -bloodmobile -bloodmonger -bloodnoun -bloodripe -bloodripeness -bloodroot -bloodshed -bloodshedder -bloodshedding -bloodshot -bloodshotten -bloodspiller -bloodspilling -bloodstain -bloodstained -bloodstainedness -bloodstanch -bloodstock -bloodstone -bloodstroke -bloodsuck -bloodsucker -bloodsucking -bloodthirst -bloodthirster -bloodthirstily -bloodthirstiness -bloodthirsting -bloodthirsty -bloodweed -bloodwite -bloodwood -bloodworm -bloodwort -bloodworthy -bloody -bloodybones -blooey -bloom -bloomage -bloomer -bloomerism -bloomers -bloomery -bloomfell -blooming -bloomingly -bloomingness -bloomkin -bloomless -bloomy -bloop -blooper -blooping -blore -blosmy -blossom -blossombill -blossomed -blossomhead -blossomless -blossomry -blossomtime -blossomy -blot -blotch -blotched -blotchy -blotless -blotter -blottesque -blottesquely -blotting -blottingly -blotto -blotty -bloubiskop -blouse -bloused -blousing -blout -blow -blowback -blowball -blowcock -blowdown -blowen -blower -blowfish -blowfly -blowgun -blowhard -blowhole -blowiness -blowing -blowings -blowiron -blowlamp -blowline -blown -blowoff -blowout -blowpipe -blowpoint -blowproof -blowspray -blowth -blowtorch -blowtube -blowup -blowy -blowze -blowzed -blowzing -blowzy -blub -blubber -blubberer -blubbering -blubberingly -blubberman -blubberous -blubbery -blucher -bludgeon -bludgeoned -bludgeoneer -bludgeoner -blue -blueback -bluebead -bluebeard -bluebell -bluebelled -blueberry -bluebill -bluebird -blueblaw -bluebonnet -bluebook -bluebottle -bluebreast -bluebuck -bluebush -bluebutton -bluecap -bluecoat -bluecup -bluefish -bluegill -bluegown -bluegrass -bluehearted -bluehearts -blueing -bluejack -bluejacket -bluejoint -blueleg -bluelegs -bluely -blueness -bluenose -blueprint -blueprinter -bluer -blues -bluesides -bluestem -bluestocking -bluestockingish -bluestockingism -bluestone -bluestoner -bluet -bluethroat -bluetongue -bluetop -blueweed -bluewing -bluewood -bluey -bluff -bluffable -bluffer -bluffly -bluffness -bluffy -bluggy -bluing -bluish -bluishness -bluism -blunder -blunderbuss -blunderer -blunderful -blunderhead -blunderheaded -blunderheadedness -blundering -blunderingly -blundersome -blunge -blunger -blunk -blunker -blunks -blunnen -blunt -blunter -blunthead -blunthearted -bluntie -bluntish -bluntly -bluntness -blup -blur -blurb -blurbist -blurred -blurredness -blurrer -blurry -blurt -blush -blusher -blushful -blushfully -blushfulness -blushiness -blushing -blushingly -blushless -blushwort -blushy -bluster -blusteration -blusterer -blustering -blusteringly -blusterous -blusterously -blustery -blype -bo -boa -boagane -boanergism -boar -boarcite -board -boardable -boarder -boarding -boardinghouse -boardlike -boardly -boardman -boardwalk -boardy -boarfish -boarhound -boarish -boarishly -boarishness -boarship -boarskin -boarspear -boarstaff -boarwood -boast -boaster -boastful -boastfully -boastfulness -boasting -boastive -boastless -boat -boatable -boatage -boatbill -boatbuilder -boatbuilding -boater -boatfalls -boatful -boathead -boatheader -boathouse -boatie -boating -boatkeeper -boatless -boatlike -boatlip -boatload -boatloader -boatloading -boatly -boatman -boatmanship -boatmaster -boatowner -boatsetter -boatshop -boatside -boatsman -boatswain -boattail -boatward -boatwise -boatwoman -boatwright -bob -boba -bobac -bobbed -bobber -bobbery -bobbin -bobbiner -bobbinet -bobbing -bobbinwork -bobbish -bobbishly -bobble -bobby -bobcat -bobcoat -bobeche -bobfly -bobierrite -bobization -bobjerom -bobo -bobolink -bobotie -bobsled -bobsleigh -bobstay -bobtail -bobtailed -bobwhite -bobwood -bocaccio -bocal -bocardo -bocasine -bocca -boccale -boccarella -boccaro -bocce -boce -bocedization -bocher -bock -bockerel -bockeret -bocking -bocoy -bod -bodach -bodacious -bodaciously -bode -bodeful -bodega -bodement -boden -bodenbenderite -boder -bodewash -bodge -bodger -bodgery -bodhi -bodhisattva -bodice -bodiced -bodicemaker -bodicemaking -bodied -bodier -bodieron -bodikin -bodiless -bodilessness -bodiliness -bodily -bodiment -boding -bodingly -bodkin -bodkinwise -bodle -bodock -body -bodybending -bodybuilder -bodyguard -bodyhood -bodyless -bodymaker -bodymaking -bodyplate -bodywise -bodywood -bodywork -boeotarch -bog -boga -bogan -bogard -bogart -bogberry -bogey -bogeyman -boggart -boggin -bogginess -boggish -boggle -bogglebo -boggler -boggy -boghole -bogie -bogieman -bogier -bogland -boglander -bogle -bogledom -boglet -bogman -bogmire -bogo -bogong -bogsucker -bogtrot -bogtrotter -bogtrotting -bogue -bogum -bogus -bogusness -bogway -bogwood -bogwort -bogy -bogydom -bogyism -bogyland -bohawn -bohea -bohemium -bohereen -bohireen -boho -bohor -bohunk -boid -boil -boilable -boildown -boiled -boiler -boilerful -boilerhouse -boilerless -boilermaker -boilermaking -boilerman -boilersmith -boilerworks -boilery -boiling -boilinglike -boilingly -boilover -boily -boist -boisterous -boisterously -boisterousness -bojite -bojo -bokadam -bokard -bokark -boke -bokom -bola -bolar -bold -bolden -boldhearted -boldine -boldly -boldness -boldo -bole -bolection -bolectioned -boled -boleite -bolelike -bolero -boletaceous -bolete -boleweed -bolewort -bolide -bolimba -bolis -bolivar -bolivarite -bolivia -boliviano -bolk -boll -bollard -bolled -boller -bolling -bollock -bollworm -bolly -bolo -bolograph -bolographic -bolographically -bolography -boloman -bolometer -bolometric -boloney -boloroot -bolson -bolster -bolsterer -bolsterwork -bolt -boltage -boltant -boltcutter -boltel -bolter -bolthead -boltheader -boltheading -bolthole -bolti -bolting -boltless -boltlike -boltmaker -boltmaking -boltonite -boltrope -boltsmith -boltstrake -boltuprightness -boltwork -bolus -bom -boma -bomb -bombable -bombacaceous -bombard -bombarde -bombardelle -bombarder -bombardier -bombardment -bombardon -bombast -bombaster -bombastic -bombastically -bombastry -bombazet -bombazine -bombed -bomber -bombiccite -bombilate -bombilation -bombinate -bombination -bombo -bombola -bombonne -bombous -bombproof -bombshell -bombsight -bombycid -bombyciform -bombycine -bon -bonaci -bonagh -bonaght -bonair -bonairly -bonairness -bonally -bonang -bonanza -bonasus -bonaventure -bonavist -bonbon -bonce -bond -bondage -bondager -bondar -bonded -bonder -bonderman -bondfolk -bondholder -bondholding -bonding -bondless -bondman -bondmanship -bondsman -bondstone -bondswoman -bonduc -bondwoman -bone -boneache -bonebinder -boneblack -bonebreaker -boned -bonedog -bonefish -boneflower -bonehead -boneheaded -boneless -bonelessly -bonelessness -bonelet -bonelike -boner -boneset -bonesetter -bonesetting -boneshaker -boneshaw -bonetail -bonewood -bonework -bonewort -bonfire -bong -bongo -bonhomie -boniata -bonification -boniform -bonify -boniness -boninite -bonitarian -bonitary -bonito -bonk -bonnaz -bonnet -bonneted -bonneter -bonnethead -bonnetless -bonnetlike -bonnetman -bonnibel -bonnily -bonniness -bonny -bonnyclabber -bonnyish -bonnyvis -bonsai -bonspiel -bontebok -bontebuck -bontequagga -bonus -bonxie -bony -bonyfish -bonze -bonzer -bonzery -bonzian -boo -boob -boobery -boobily -boobook -booby -boobyalla -boobyish -boobyism -bood -boodie -boodle -boodledom -boodleism -boodleize -boodler -boody -boof -booger -boogiewoogie -boohoo -boojum -book -bookable -bookbinder -bookbindery -bookbinding -bookboard -bookcase -bookcraft -bookdealer -bookdom -booked -booker -bookery -bookfold -bookful -bookholder -bookhood -bookie -bookiness -booking -bookish -bookishly -bookishness -bookism -bookkeeper -bookkeeping -bookland -bookless -booklet -booklike -bookling -booklore -booklover -bookmaker -bookmaking -bookman -bookmark -bookmarker -bookmate -bookmobile -bookmonger -bookplate -bookpress -bookrack -bookrest -bookroom -bookseller -booksellerish -booksellerism -bookselling -bookshelf -bookshop -bookstack -bookstall -bookstand -bookstore -bookward -bookwards -bookways -bookwise -bookwork -bookworm -bookwright -booky -bool -booly -boolya -boom -boomable -boomage -boomah -boomboat -boomdas -boomer -boomerang -booming -boomingly -boomless -boomlet -boomorah -boomslang -boomslange -boomster -boomy -boon -boondock -boondocks -boondoggle -boondoggler -boonfellow -boongary -boonk -boonless -boopis -boor -boorish -boorishly -boorishness -boort -boose -boost -booster -boosterism -boosy -boot -bootblack -bootboy -booted -bootee -booter -bootery -bootful -booth -boother -boothite -bootholder -boothose -bootied -bootikin -booting -bootjack -bootlace -bootleg -bootlegger -bootlegging -bootless -bootlessly -bootlessness -bootlick -bootlicker -bootmaker -bootmaking -boots -bootstrap -booty -bootyless -booze -boozed -boozer -boozily -booziness -boozy -bop -bopeep -boppist -bopyrid -bopyridian -bor -bora -borable -borachio -boracic -boraciferous -boracous -borage -boraginaceous -borak -boral -borasca -borasque -borate -borax -borborygmic -borborygmus -bord -bordage -bordar -bordarius -bordel -bordello -border -bordered -borderer -bordering -borderism -borderland -borderlander -borderless -borderline -bordermark -bordroom -bordure -bordured -bore -boreable -boread -boreal -borealis -borean -borecole -boredom -boree -boreen -boregat -borehole -boreism -borele -borer -boresome -borg -borgh -borghalpenny -borh -boric -borickite -boride -borine -boring -boringly -boringness -borish -borism -bority -borize -borlase -born -borne -borneol -borning -bornite -bornitic -bornyl -boro -borocalcite -borocarbide -borocitrate -borofluohydric -borofluoric -borofluoride -borofluorin -boroglycerate -boroglyceride -boroglycerine -borolanite -boron -boronatrocalcite -boronic -borophenol -borophenylic -borosalicylate -borosalicylic -borosilicate -borosilicic -borotungstate -borotungstic -borough -boroughlet -boroughmaster -boroughmonger -boroughmongering -boroughmongery -boroughship -borowolframic -borracha -borrel -borrow -borrowable -borrower -borrowing -borsch -borscht -borsholder -borsht -borstall -bort -bortsch -borty -bortz -borwort -boryl -borzoi -boscage -bosch -boschbok -boschvark -boschveld -bose -boser -bosh -bosher -bosjesman -bosk -bosker -bosket -boskiness -bosky -bosn -bosom -bosomed -bosomer -bosomy -bosporus -boss -bossage -bossdom -bossed -bosselated -bosselation -bosser -bosset -bossiness -bossing -bossism -bosslet -bossship -bossy -bostangi -bostanji -bosthoon -boston -bostonite -bostrychid -bostrychoid -bostrychoidal -bostryx -bosun -bot -bota -botanic -botanical -botanically -botanist -botanize -botanizer -botanomancy -botanophile -botanophilist -botany -botargo -botch -botched -botchedly -botcher -botcherly -botchery -botchily -botchiness -botchka -botchy -bote -botella -boterol -botfly -both -bother -botheration -botherer -botherheaded -botherment -bothersome -bothlike -bothrenchyma -bothrium -bothropic -bothros -bothsided -bothsidedness -bothway -bothy -botonee -botong -botryogen -botryoid -botryoidal -botryoidally -botryolite -botryomycoma -botryomycosis -botryomycotic -botryopterid -botryose -botryotherapy -bott -bottekin -bottine -bottle -bottlebird -bottled -bottleflower -bottleful -bottlehead -bottleholder -bottlelike -bottlemaker -bottlemaking -bottleman -bottleneck -bottlenest -bottlenose -bottler -bottling -bottom -bottomchrome -bottomed -bottomer -bottoming -bottomless -bottomlessly -bottomlessness -bottommost -bottomry -bottstick -botuliform -botulin -botulinum -botulism -botulismus -bouchal -bouchaleen -boucharde -bouche -boucher -boucherism -boucherize -bouchette -boud -boudoir -bouffancy -bouffant -bougar -bouge -bouget -bough -boughed -boughless -boughpot -bought -boughten -boughy -bougie -bouillabaisse -bouillon -bouk -boukit -boulangerite -boulder -boulderhead -bouldering -bouldery -boule -boulevard -boulevardize -boultel -boulter -boulterer -boun -bounce -bounceable -bounceably -bouncer -bouncing -bouncingly -bound -boundable -boundary -bounded -boundedly -boundedness -bounden -bounder -bounding -boundingly -boundless -boundlessly -boundlessness -boundly -boundness -bounteous -bounteously -bounteousness -bountied -bountiful -bountifully -bountifulness -bountith -bountree -bounty -bountyless -bouquet -bourasque -bourbon -bourbonize -bourd -bourder -bourdon -bourette -bourg -bourgeois -bourgeoise -bourgeoisie -bourgeoisitic -bourn -bournless -bournonite -bourock -bourse -bourtree -bouse -bouser -boussingaultite -boustrophedon -boustrophedonic -bousy -bout -boutade -bouto -boutonniere -boutylka -bouw -bovarism -bovarysm -bovate -bovenland -bovicide -boviculture -bovid -boviform -bovine -bovinely -bovinity -bovoid -bovovaccination -bovovaccine -bow -bowable -bowback -bowbells -bowbent -bowboy -bowdlerism -bowdlerization -bowdlerize -bowed -bowedness -bowel -boweled -bowelless -bowellike -bowels -bowenite -bower -bowerbird -bowerlet -bowermaiden -bowermay -bowerwoman -bowery -bowet -bowfin -bowgrace -bowhead -bowie -bowieful -bowing -bowingly -bowk -bowkail -bowker -bowknot -bowl -bowla -bowleg -bowlegged -bowleggedness -bowler -bowless -bowlful -bowlike -bowline -bowling -bowllike -bowlmaker -bowls -bowly -bowmaker -bowmaking -bowman -bowpin -bowralite -bowshot -bowsprit -bowstave -bowstring -bowstringed -bowwoman -bowwood -bowwort -bowwow -bowyer -boxberry -boxboard -boxbush -boxcar -boxen -boxer -boxfish -boxful -boxhaul -boxhead -boxing -boxkeeper -boxlike -boxmaker -boxmaking -boxman -boxthorn -boxty -boxwallah -boxwood -boxwork -boxy -boy -boyang -boyar -boyard -boyardism -boyardom -boyarism -boycott -boycottage -boycotter -boycottism -boydom -boyer -boyhood -boyish -boyishly -boyishness -boyism -boyla -boylike -boyology -boysenberry -boyship -boza -bozal -bozo -bozze -bra -brab -brabagious -brabant -brabble -brabblement -brabbler -brabblingly -braca -braccate -braccia -bracciale -braccianite -braccio -brace -braced -bracelet -braceleted -bracer -bracero -braces -brach -brachelytrous -bracherer -brachering -brachet -brachial -brachialgia -brachialis -brachiate -brachiation -brachiator -brachiferous -brachigerous -brachiocephalic -brachiocrural -brachiocubital -brachiocyllosis -brachiofacial -brachiofaciolingual -brachioganoid -brachiolaria -brachiolarian -brachiopod -brachiopode -brachiopodist -brachiopodous -brachioradial -brachioradialis -brachiorrhachidian -brachiorrheuma -brachiosaur -brachiostrophosis -brachiotomy -brachistocephali -brachistocephalic -brachistocephalous -brachistocephaly -brachistochrone -brachistochronic -brachistochronous -brachium -brachtmema -brachyaxis -brachycardia -brachycatalectic -brachycephal -brachycephalic -brachycephalism -brachycephalization -brachycephalize -brachycephalous -brachycephaly -brachyceral -brachyceric -brachycerous -brachychronic -brachycnemic -brachycranial -brachydactyl -brachydactylic -brachydactylism -brachydactylous -brachydactyly -brachydiagonal -brachydodrome -brachydodromous -brachydomal -brachydomatic -brachydome -brachydont -brachydontism -brachyfacial -brachyglossal -brachygnathia -brachygnathism -brachygnathous -brachygrapher -brachygraphic -brachygraphical -brachygraphy -brachyhieric -brachylogy -brachymetropia -brachymetropic -brachyphalangia -brachypinacoid -brachypinacoidal -brachypleural -brachypnea -brachypodine -brachypodous -brachyprism -brachyprosopic -brachypterous -brachypyramid -brachyrrhinia -brachysclereid -brachyskelic -brachysm -brachystaphylic -brachystochrone -brachystomatous -brachystomous -brachytic -brachytypous -brachyural -brachyuran -brachyuranic -brachyure -brachyurous -bracing -bracingly -bracingness -brack -brackebuschite -bracken -brackened -bracker -bracket -bracketing -bracketwise -brackish -brackishness -brackmard -bracky -braconid -bract -bractea -bracteal -bracteate -bracted -bracteiform -bracteolate -bracteole -bracteose -bractless -bractlet -brad -bradawl -bradenhead -bradmaker -bradsot -bradyacousia -bradycardia -bradycauma -bradycinesia -bradycrotic -bradydactylia -bradyesthesia -bradyglossia -bradykinesia -bradykinetic -bradylalia -bradylexia -bradylogia -bradynosus -bradypepsia -bradypeptic -bradyphagia -bradyphasia -bradyphemia -bradyphrasia -bradyphrenia -bradypnea -bradypnoea -bradypod -bradypode -bradypodoid -bradyseism -bradyseismal -bradyseismic -bradyseismical -bradyseismism -bradyspermatism -bradysphygmia -bradystalsis -bradyteleocinesia -bradyteleokinesis -bradytocia -bradytrophic -bradyuria -brae -braeface -braehead -braeman -braeside -brag -braggardism -braggart -braggartism -braggartly -braggartry -braggat -bragger -braggery -bragget -bragging -braggingly -braggish -braggishly -bragite -bragless -braguette -brahmachari -braid -braided -braider -braiding -brail -brain -brainache -braincap -braincraft -brainer -brainfag -brainge -braininess -brainless -brainlessly -brainlessness -brainlike -brainpan -brains -brainsick -brainsickly -brainsickness -brainstone -brainward -brainwash -brainwasher -brainwashing -brainwater -brainwood -brainwork -brainworker -brainy -braird -braireau -brairo -braise -brake -brakeage -brakehand -brakehead -brakeless -brakeload -brakemaker -brakemaking -brakeman -braker -brakeroot -brakesman -brakie -braky -bramble -brambleberry -bramblebush -brambled -brambling -brambly -brambrack -bran -brancard -branch -branchage -branched -brancher -branchery -branchful -branchi -branchia -branchiae -branchial -branchiate -branchicolous -branchiferous -branchiform -branchihyal -branchiness -branching -branchiocardiac -branchiogenous -branchiomere -branchiomeric -branchiomerism -branchiopallial -branchiopod -branchiopodan -branchiopodous -branchiopulmonate -branchiosaur -branchiosaurian -branchiostegal -branchiostegite -branchiostegous -branchiostomid -branchireme -branchiurous -branchless -branchlet -branchlike -branchling -branchman -branchstand -branchway -branchy -brand -branded -brander -brandering -brandied -brandify -brandise -brandish -brandisher -brandisite -brandless -brandling -brandreth -brandy -brandyball -brandyman -brandywine -brangle -brangled -branglement -brangler -brangling -branial -brank -brankie -brankursine -branle -branner -brannerite -branny -bransle -bransolder -brant -brantail -brantness -brash -brashiness -brashness -brashy -brasiletto -brasque -brass -brassage -brassard -brassart -brassbound -brassbounder -brasse -brasser -brasset -brassic -brassicaceous -brassidic -brassie -brassiere -brassily -brassiness -brassish -brasslike -brassware -brasswork -brassworker -brassworks -brassy -brassylic -brat -bratling -bratstvo -brattach -brattice -bratticer -bratticing -brattie -brattish -brattishing -brattle -brauna -braunite -bravade -bravado -bravadoism -brave -bravehearted -bravely -braveness -braver -bravery -braving -bravish -bravo -bravoite -bravura -bravuraish -braw -brawl -brawler -brawling -brawlingly -brawlsome -brawly -brawlys -brawn -brawned -brawnedness -brawner -brawnily -brawniness -brawny -braws -braxy -bray -brayer -brayera -brayerin -braystone -braza -braze -brazen -brazenface -brazenfaced -brazenfacedly -brazenly -brazenness -brazer -brazera -brazier -braziery -brazil -brazilein -brazilette -brazilin -brazilite -brazilwood -breach -breacher -breachful -breachy -bread -breadbasket -breadberry -breadboard -breadbox -breadearner -breadearning -breaden -breadfruit -breadless -breadlessness -breadmaker -breadmaking -breadman -breadnut -breadroot -breadseller -breadstuff -breadth -breadthen -breadthless -breadthriders -breadthways -breadthwise -breadwinner -breadwinning -breaghe -break -breakable -breakableness -breakably -breakage -breakaway -breakax -breakback -breakbones -breakdown -breaker -breakerman -breakfast -breakfaster -breakfastless -breaking -breakless -breakneck -breakoff -breakout -breakover -breakshugh -breakstone -breakthrough -breakup -breakwater -breakwind -bream -breards -breast -breastband -breastbeam -breastbone -breasted -breaster -breastfeeding -breastful -breastheight -breasthook -breastie -breasting -breastless -breastmark -breastpiece -breastpin -breastplate -breastplow -breastrail -breastrope -breastsummer -breastweed -breastwise -breastwood -breastwork -breath -breathable -breathableness -breathe -breathed -breather -breathful -breathiness -breathing -breathingly -breathless -breathlessly -breathlessness -breathseller -breathy -breba -breccia -breccial -brecciated -brecciation -brecham -breck -brecken -bred -bredbergite -brede -bredi -bree -breech -breechblock -breechcloth -breechclout -breeched -breeches -breechesflower -breechesless -breeching -breechless -breechloader -breed -breedable -breedbate -breeder -breediness -breeding -breedy -breek -breekless -breekums -breeze -breezeful -breezeless -breezelike -breezeway -breezily -breeziness -breezy -bregma -bregmata -bregmate -bregmatic -brehon -brehonship -brei -breislakite -breithauptite -brekkle -brelaw -breloque -breme -bremely -bremeness -bremsstrahlung -brennage -brent -brephic -bret -bretelle -bretesse -breth -brethren -brett -brettice -breunnerite -breva -breve -brevet -brevetcy -breviary -breviate -breviature -brevicaudate -brevicipitid -breviconic -brevier -brevifoliate -breviger -brevilingual -breviloquence -breviloquent -breviped -brevipen -brevipennate -breviradiate -brevirostral -brevirostrate -brevit -brevity -brew -brewage -brewer -brewership -brewery -brewhouse -brewing -brewis -brewmaster -brewst -brewster -brewsterite -brey -briar -briarberry -briarroot -bribe -bribee -bribegiver -bribegiving -bribemonger -briber -bribery -bribetaker -bribetaking -bribeworthy -brichen -brichette -brick -brickbat -brickcroft -brickel -bricken -brickfield -brickfielder -brickhood -bricking -brickish -brickkiln -bricklayer -bricklaying -brickle -brickleness -bricklike -brickliner -bricklining -brickly -brickmaker -brickmaking -brickmason -brickset -bricksetter -bricktimber -brickwise -brickwork -bricky -brickyard -bricole -bridal -bridale -bridaler -bridally -bride -bridebed -bridebowl -bridecake -bridechamber -bridecup -bridegod -bridegroom -bridegroomship -bridehead -bridehood -brideknot -bridelace -brideless -bridelike -bridely -bridemaid -bridemaiden -bridemaidship -brideship -bridesmaid -bridesmaiding -bridesman -bridestake -bridewain -brideweed -bridewell -bridewort -bridge -bridgeable -bridgeboard -bridgebote -bridgebuilder -bridgebuilding -bridged -bridgehead -bridgekeeper -bridgeless -bridgelike -bridgemaker -bridgemaking -bridgeman -bridgemaster -bridgepot -bridger -bridgetree -bridgeward -bridgewards -bridgeway -bridgework -bridging -bridle -bridled -bridleless -bridleman -bridler -bridling -bridoon -brief -briefing -briefless -brieflessly -brieflessness -briefly -briefness -briefs -brier -brierberry -briered -brierroot -brierwood -briery -brieve -brig -brigade -brigadier -brigadiership -brigalow -brigand -brigandage -brigander -brigandine -brigandish -brigandishly -brigandism -brigantine -brigatry -brigbote -brigetty -bright -brighten -brightener -brightening -brighteyes -brightish -brightly -brightness -brightsmith -brightsome -brightsomeness -brightwork -brill -brilliance -brilliancy -brilliandeer -brilliant -brilliantine -brilliantly -brilliantness -brilliantwise -brilliolette -brillolette -brills -brim -brimborion -brimborium -brimful -brimfully -brimfulness -briming -brimless -brimmed -brimmer -brimming -brimmingly -brimstone -brimstonewort -brimstony -brin -brindlish -brine -brinehouse -brineless -brineman -briner -bring -bringal -bringall -bringer -brininess -brinish -brinishness -brinjal -brinjarry -brink -brinkless -briny -brioche -briolette -brique -briquette -brisk -brisken -brisket -briskish -briskly -briskness -brisling -brisque -briss -bristle -bristlebird -bristlecone -bristled -bristleless -bristlelike -bristler -bristletail -bristlewort -bristliness -bristly -brisure -brit -britchka -brith -brither -britska -britten -brittle -brittlebush -brittlely -brittleness -brittlestem -brittlewood -brittlewort -brittling -brizz -broach -broacher -broad -broadacre -broadax -broadbill -broadbrim -broadcast -broadcaster -broadcloth -broaden -broadhead -broadhearted -broadhorn -broadish -broadleaf -broadloom -broadly -broadmouth -broadness -broadpiece -broadshare -broadsheet -broadside -broadspread -broadsword -broadtail -broadthroat -broadway -broadways -broadwife -broadwise -brob -brocade -brocaded -brocard -brocardic -brocatel -brocatello -broccoli -broch -brochan -brochant -brochantite -broche -brochette -brochidodromous -brocho -brochure -brock -brockage -brocked -brocket -brockle -brod -brodder -brodeglass -brodequin -broderer -brog -brogan -brogger -broggerite -broggle -brogue -brogueful -brogueneer -broguer -broguery -broguish -broider -broiderer -broideress -broidery -broigne -broil -broiler -broiling -broilingly -brokage -broke -broken -brokenhearted -brokenheartedly -brokenheartedness -brokenly -brokenness -broker -brokerage -brokeress -brokership -broking -brolga -broll -brolly -broma -bromacetanilide -bromacetate -bromacetic -bromacetone -bromal -bromalbumin -bromamide -bromargyrite -bromate -bromaurate -bromauric -brombenzamide -brombenzene -brombenzyl -bromcamphor -bromcresol -brome -bromeigon -bromeikon -bromeliaceous -bromeliad -bromelin -bromellite -bromethyl -bromethylene -bromgelatin -bromhidrosis -bromhydrate -bromhydric -bromic -bromide -bromidic -bromidically -bromidrosis -brominate -bromination -bromindigo -bromine -brominism -brominize -bromiodide -bromism -bromite -bromization -bromize -bromizer -bromlite -bromoacetone -bromoaurate -bromoauric -bromobenzene -bromobenzyl -bromocamphor -bromochlorophenol -bromocresol -bromocyanidation -bromocyanide -bromocyanogen -bromoethylene -bromoform -bromogelatin -bromohydrate -bromohydrin -bromoil -bromoiodide -bromoiodism -bromoiodized -bromoketone -bromol -bromomania -bromomenorrhea -bromomethane -bromometric -bromometrical -bromometrically -bromometry -bromonaphthalene -bromophenol -bromopicrin -bromopnea -bromoprotein -bromothymol -bromous -bromphenol -brompicrin -bromthymol -bromuret -bromvogel -bromyrite -bronc -bronchadenitis -bronchi -bronchia -bronchial -bronchially -bronchiarctia -bronchiectasis -bronchiectatic -bronchiloquy -bronchiocele -bronchiocrisis -bronchiogenic -bronchiolar -bronchiole -bronchioli -bronchiolitis -bronchiolus -bronchiospasm -bronchiostenosis -bronchitic -bronchitis -bronchium -bronchoadenitis -bronchoalveolar -bronchoaspergillosis -bronchoblennorrhea -bronchocavernous -bronchocele -bronchocephalitis -bronchoconstriction -bronchoconstrictor -bronchodilatation -bronchodilator -bronchoegophony -bronchoesophagoscopy -bronchogenic -bronchohemorrhagia -broncholemmitis -broncholith -broncholithiasis -bronchomotor -bronchomucormycosis -bronchomycosis -bronchopathy -bronchophonic -bronchophony -bronchophthisis -bronchoplasty -bronchoplegia -bronchopleurisy -bronchopneumonia -bronchopneumonic -bronchopulmonary -bronchorrhagia -bronchorrhaphy -bronchorrhea -bronchoscope -bronchoscopic -bronchoscopist -bronchoscopy -bronchospasm -bronchostenosis -bronchostomy -bronchotetany -bronchotome -bronchotomist -bronchotomy -bronchotracheal -bronchotyphoid -bronchotyphus -bronchovesicular -bronchus -bronco -broncobuster -brongniardite -bronk -bronteon -brontephobia -bronteum -brontide -brontogram -brontograph -brontolite -brontology -brontometer -brontophobia -brontoscopy -bronze -bronzed -bronzelike -bronzen -bronzer -bronzesmith -bronzewing -bronzify -bronzine -bronzing -bronzite -bronzitite -bronzy -broo -brooch -brood -brooder -broodiness -brooding -broodingly -broodless -broodlet -broodling -broody -brook -brookable -brooked -brookflower -brookie -brookite -brookless -brooklet -brooklike -brooklime -brookside -brookweed -brooky -brool -broom -broombush -broomcorn -broomer -broommaker -broommaking -broomrape -broomroot -broomshank -broomstaff -broomstick -broomstraw -broomtail -broomweed -broomwood -broomwort -broomy -broon -broose -broozled -brose -brosot -brosy -brot -brotan -brotany -broth -brothel -brotheler -brothellike -brothelry -brother -brotherhood -brotherless -brotherlike -brotherliness -brotherly -brothership -brotherwort -brothy -brotocrystal -brotulid -brotuliform -brough -brougham -brought -brow -browache -browallia -browband -browbeat -browbeater -browbound -browden -browed -browis -browless -browman -brown -brownback -browner -brownie -browniness -browning -brownish -brownly -brownness -brownout -brownstone -browntail -browntop -brownweed -brownwort -browny -browpiece -browpost -browse -browser -browsick -browsing -browst -bruang -brucellosis -brucia -brucina -brucine -brucite -bruckle -bruckled -bruckleness -brugh -brugnatellite -bruin -bruise -bruiser -bruisewort -bruising -bruit -bruiter -bruke -brulee -brulyie -brulyiement -brumal -brumby -brume -brummagem -brumous -brumstane -brumstone -brunch -brunelliaceous -brunet -brunetness -brunette -brunetteness -brunissure -brunneous -brunswick -brunt -bruscus -brush -brushable -brushball -brushbird -brushbush -brushed -brusher -brushes -brushet -brushful -brushiness -brushing -brushite -brushland -brushless -brushlessness -brushlet -brushlike -brushmaker -brushmaking -brushman -brushoff -brushproof -brushwood -brushwork -brushy -brusque -brusquely -brusqueness -brustle -brut -brutage -brutal -brutalism -brutalist -brutalitarian -brutality -brutalization -brutalize -brutally -brute -brutedom -brutelike -brutely -bruteness -brutification -brutify -bruting -brutish -brutishly -brutishness -brutism -brutter -bruzz -bryaceous -bryogenin -bryological -bryologist -bryology -bryonidin -bryonin -bryony -bryophyte -bryophytic -bryozoan -bryozoon -bryozoum -bu -bual -buaze -bub -buba -bubal -bubaline -bubalis -bubble -bubbleless -bubblement -bubbler -bubbling -bubblingly -bubblish -bubbly -bubby -bubbybush -bubinga -bubo -buboed -bubonalgia -bubonic -bubonocele -bubukle -bucare -bucca -buccal -buccally -buccan -buccaneer -buccaneerish -buccate -buccina -buccinal -buccinator -buccinatory -bucciniform -buccinoid -buccobranchial -buccocervical -buccogingival -buccolabial -buccolingual -bucconasal -buccopharyngeal -buccula -bucentaur -buchite -buchnerite -buchonite -buchu -buck -buckaroo -buckberry -buckboard -buckbrush -buckbush -bucked -buckeen -bucker -bucket -bucketer -bucketful -bucketing -bucketmaker -bucketmaking -bucketman -buckety -buckeye -buckhorn -buckhound -buckie -bucking -buckish -buckishly -buckishness -buckjump -buckjumper -bucklandite -buckle -buckled -buckleless -buckler -buckling -bucklum -bucko -buckplate -buckpot -buckra -buckram -bucksaw -buckshee -buckshot -buckskin -buckskinned -buckstall -buckstay -buckstone -bucktail -buckthorn -bucktooth -buckwagon -buckwash -buckwasher -buckwashing -buckwheat -buckwheater -buckwheatlike -bucky -bucoliast -bucolic -bucolical -bucolically -bucolicism -bucrane -bucranium -bud -buda -buddage -budder -buddhi -budding -buddle -buddleman -buddler -buddy -budge -budger -budgeree -budgereegah -budgerigar -budgerow -budget -budgetary -budgeteer -budgeter -budgetful -budless -budlet -budlike -budmash -budtime -budwood -budworm -budzat -bufagin -buff -buffable -buffalo -buffaloback -buffball -buffcoat -buffed -buffer -buffet -buffeter -buffing -buffle -bufflehead -bufflehorn -buffont -buffoon -buffoonery -buffoonesque -buffoonish -buffoonism -buffware -buffy -bufidin -bufo -bufonite -bufotalin -bug -bugaboo -bugan -bugbane -bugbear -bugbeardom -bugbearish -bugbite -bugdom -bugfish -bugger -buggery -bugginess -buggy -buggyman -bughead -bughouse -bugle -bugled -bugler -buglet -bugleweed -buglewort -bugloss -bugologist -bugology -bugproof -bugre -bugseed -bugweed -bugwort -buhl -buhr -buhrstone -build -buildable -builder -building -buildingless -buildress -buildup -built -buirdly -buisson -buist -bukh -bukshi -bulak -bulb -bulbaceous -bulbar -bulbed -bulbiferous -bulbiform -bulbil -bulbilla -bulbless -bulblet -bulblike -bulbocapnin -bulbocapnine -bulbocavernosus -bulbocavernous -bulbomedullary -bulbomembranous -bulbonuclear -bulborectal -bulbose -bulbospinal -bulbotuber -bulbous -bulbul -bulbule -bulby -bulchin -bulge -bulger -bulginess -bulgy -bulimia -bulimiac -bulimic -bulimiform -bulimoid -bulimy -bulk -bulked -bulker -bulkhead -bulkheaded -bulkily -bulkiness -bulkish -bulky -bull -bulla -bullace -bullamacow -bullan -bullary -bullate -bullated -bullation -bullback -bullbaiting -bullbat -bullbeggar -bullberry -bullbird -bullboat -bullcart -bullcomber -bulldog -bulldogged -bulldoggedness -bulldoggy -bulldogism -bulldoze -bulldozer -buller -bullet -bulleted -bullethead -bulletheaded -bulletheadedness -bulletin -bulletless -bulletlike -bulletmaker -bulletmaking -bulletproof -bulletwood -bullety -bullfeast -bullfight -bullfighter -bullfighting -bullfinch -bullfist -bullflower -bullfoot -bullfrog -bullhead -bullheaded -bullheadedly -bullheadedness -bullhide -bullhoof -bullhorn -bulliform -bullimong -bulling -bullion -bullionism -bullionist -bullionless -bullish -bullishly -bullishness -bullism -bullit -bullneck -bullnose -bullnut -bullock -bullocker -bullockman -bullocky -bullous -bullpates -bullpoll -bullpout -bullskin -bullsticker -bullsucker -bullswool -bulltoad -bullule -bullweed -bullwhack -bullwhacker -bullwhip -bullwort -bully -bullyable -bullydom -bullyhuff -bullying -bullyism -bullyrag -bullyragger -bullyragging -bullyrook -bulrush -bulrushlike -bulrushy -bulse -bult -bulter -bultey -bultong -bultow -bulwand -bulwark -bum -bumbailiff -bumbailiffship -bumbarge -bumbaste -bumbaze -bumbee -bumbershoot -bumble -bumblebee -bumbleberry -bumblefoot -bumblekite -bumblepuppy -bumbler -bumbo -bumboat -bumboatman -bumboatwoman -bumclock -bumicky -bummalo -bummaree -bummed -bummer -bummerish -bummie -bumming -bummler -bummock -bump -bumpee -bumper -bumperette -bumpily -bumpiness -bumping -bumpingly -bumpkin -bumpkinet -bumpkinish -bumpkinly -bumpology -bumptious -bumptiously -bumptiousness -bumpy -bumtrap -bumwood -bun -buna -buncal -bunce -bunch -bunchberry -buncher -bunchflower -bunchily -bunchiness -bunchy -buncombe -bund -bunder -bundle -bundler -bundlerooted -bundlet -bundobust -bundook -bundweed -bundy -bunemost -bung -bungaloid -bungalow -bungarum -bungee -bungerly -bungey -bungfu -bungfull -bunghole -bungle -bungler -bunglesome -bungling -bunglingly -bungmaker -bungo -bungwall -bungy -bunion -bunk -bunker -bunkerman -bunkery -bunkhouse -bunkie -bunkload -bunko -bunkum -bunnell -bunny -bunnymouth -bunodont -bunolophodont -bunoselenodont -bunsenite -bunt -buntal -bunted -bunter -bunting -buntline -bunton -bunty -bunya -bunyah -bunyip -buoy -buoyage -buoyance -buoyancy -buoyant -buoyantly -buoyantness -buphthalmia -buphthalmic -bupleurol -buplever -buprestid -buprestidan -bur -buran -burao -burbank -burbankian -burbark -burble -burbler -burbly -burbot -burbush -burd -burdalone -burden -burdener -burdenless -burdenous -burdensome -burdensomely -burdensomeness -burdie -burdock -burdon -bure -bureau -bureaucracy -bureaucrat -bureaucratic -bureaucratical -bureaucratically -bureaucratism -bureaucratist -bureaucratization -bureaucratize -bureaux -burel -burele -buret -burette -burfish -burg -burgage -burgality -burgall -burgee -burgensic -burgeon -burgess -burgessdom -burggrave -burgh -burghal -burghalpenny -burghbote -burghemot -burgher -burgherage -burgherdom -burgheress -burgherhood -burghermaster -burghership -burghmaster -burghmoot -burglar -burglarious -burglariously -burglarize -burglarproof -burglary -burgle -burgomaster -burgomastership -burgonet -burgoo -burgoyne -burgrave -burgraviate -burgul -burgus -burgware -burhead -buri -burial -burian -buried -burier -burin -burinist -burion -buriti -burka -burke -burker -burkundaz -burl -burlap -burled -burler -burlesque -burlesquely -burlesquer -burlet -burletta -burlily -burliness -burly -burmanniaceous -burmite -burn -burnable -burnbeat -burned -burner -burnet -burnetize -burnfire -burnie -burniebee -burning -burningly -burnish -burnishable -burnisher -burnishing -burnishment -burnoose -burnoosed -burnous -burnout -burnover -burnside -burnsides -burnt -burntweed -burnut -burnwood -burny -buro -burp -burr -burrah -burrawang -burred -burrel -burrer -burrgrailer -burring -burrish -burrito -burrknot -burro -burrobrush -burrow -burroweed -burrower -burrowstown -burry -bursa -bursal -bursar -bursarial -bursarship -bursary -bursate -bursattee -bursautee -burse -burseed -bursicle -bursiculate -bursiform -bursitis -burst -burster -burstwort -burt -burthenman -burton -burtonization -burtonize -burucha -burweed -bury -burying -bus -busby -buscarl -buscarle -bush -bushbeater -bushbuck -bushcraft -bushed -bushel -busheler -bushelful -bushelman -bushelwoman -busher -bushfighter -bushfighting -bushful -bushhammer -bushi -bushily -bushiness -bushing -bushland -bushless -bushlet -bushlike -bushmaker -bushmaking -bushmanship -bushmaster -bushment -bushranger -bushranging -bushrope -bushveld -bushwa -bushwhack -bushwhacker -bushwhacking -bushwife -bushwoman -bushwood -bushy -busied -busily -busine -business -businesslike -businesslikeness -businessman -businesswoman -busk -busked -busker -busket -buskin -buskined -buskle -busky -busman -buss -busser -bussock -bussu -bust -bustard -busted -bustee -buster -busthead -bustic -busticate -bustle -bustled -bustler -bustling -bustlingly -busy -busybodied -busybody -busybodyish -busybodyism -busybodyness -busyhead -busying -busyish -busyness -busywork -but -butadiene -butadiyne -butanal -butane -butanoic -butanol -butanolid -butanolide -butanone -butch -butcher -butcherbird -butcherdom -butcherer -butcheress -butchering -butcherless -butcherliness -butcherly -butcherous -butchery -butein -butene -butenyl -buteonine -butic -butine -butler -butlerage -butlerdom -butleress -butlerism -butlerlike -butlership -butlery -butment -butomaceous -butoxy -butoxyl -butt -butte -butter -butteraceous -butterback -butterball -butterbill -butterbird -butterbox -butterbump -butterbur -butterbush -buttercup -buttered -butterfat -butterfingered -butterfingers -butterfish -butterflower -butterfly -butterflylike -butterhead -butterine -butteriness -butteris -butterjags -butterless -butterlike -buttermaker -buttermaking -butterman -buttermilk -buttermonger -buttermouth -butternose -butternut -butterroot -butterscotch -butterweed -butterwife -butterwoman -butterworker -butterwort -butterwright -buttery -butteryfingered -buttgenbachite -butting -buttinsky -buttle -buttock -buttocked -buttocker -button -buttonball -buttonbur -buttonbush -buttoned -buttoner -buttonhold -buttonholder -buttonhole -buttonholer -buttonhook -buttonless -buttonlike -buttonmold -buttons -buttonweed -buttonwood -buttony -buttress -buttressless -buttresslike -buttstock -buttwoman -buttwood -butty -buttyman -butyl -butylamine -butylation -butylene -butylic -butyne -butyr -butyraceous -butyral -butyraldehyde -butyrate -butyric -butyrically -butyrin -butyrinase -butyrochloral -butyrolactone -butyrometer -butyrometric -butyrone -butyrous -butyrousness -butyryl -buxaceous -buxerry -buxom -buxomly -buxomness -buy -buyable -buyer -buzane -buzylene -buzz -buzzard -buzzardlike -buzzardly -buzzer -buzzerphone -buzzgloak -buzzies -buzzing -buzzingly -buzzle -buzzwig -buzzy -by -bycoket -bye -byee -byegaein -byeman -byepath -byerite -byerlite -byestreet -byeworker -byeworkman -bygane -byganging -bygo -bygoing -bygone -byhand -bylaw -bylawman -byname -bynedestin -byon -byordinar -byordinary -byous -byously -bypass -bypasser -bypast -bypath -byplay -byre -byreman -byrewards -byrewoman -byrlaw -byrlawman -byrnie -byroad -byrrus -byrthynsak -bysen -bysmalith -byspell -byssaceous -byssal -byssiferous -byssin -byssine -byssinosis -byssogenous -byssoid -byssolite -byssus -bystander -bystreet -byth -bytime -bytownite -bytownitite -bywalk -bywalker -byway -bywoner -byword -bywork -c -ca -caam -caama -caaming -caapeba -caatinga -cab -caba -cabaan -caback -cabaho -cabal -cabala -cabalassou -cabaletta -cabalic -cabalism -cabalist -cabalistic -cabalistical -cabalistically -caballer -caballine -caban -cabana -cabaret -cabas -cabasset -cabassou -cabbage -cabbagehead -cabbagewood -cabbagy -cabber -cabble -cabbler -cabby -cabda -cabdriver -cabdriving -cabellerote -caber -cabernet -cabestro -cabezon -cabilliau -cabin -cabinet -cabinetmaker -cabinetmaking -cabinetry -cabinetwork -cabinetworker -cabinetworking -cabio -cable -cabled -cablegram -cableless -cablelike -cableman -cabler -cablet -cableway -cabling -cabman -cabob -caboceer -cabochon -cabocle -caboodle -cabook -caboose -caboshed -cabot -cabotage -cabree -cabrerite -cabreuva -cabrilla -cabriole -cabriolet -cabrit -cabstand -cabureiba -cabuya -cacam -cacanthrax -cacao -cacesthesia -cacesthesis -cachalot -cachaza -cache -cachectic -cachemia -cachemic -cachet -cachexia -cachexic -cachexy -cachibou -cachinnate -cachinnation -cachinnator -cachinnatory -cacholong -cachou -cachrys -cachucha -cachunde -cacidrosis -caciocavallo -cacique -caciqueship -caciquism -cack -cackerel -cackle -cackler -cacocholia -cacochroia -cacochylia -cacochymia -cacochymic -cacochymical -cacochymy -cacocnemia -cacodaemoniac -cacodaemonial -cacodaemonic -cacodemon -cacodemonia -cacodemoniac -cacodemonial -cacodemonic -cacodemonize -cacodemonomania -cacodontia -cacodorous -cacodoxian -cacodoxical -cacodoxy -cacodyl -cacodylate -cacodylic -cacoeconomy -cacoepist -cacoepistic -cacoepy -cacoethes -cacoethic -cacogalactia -cacogastric -cacogenesis -cacogenic -cacogenics -cacogeusia -cacoglossia -cacographer -cacographic -cacographical -cacography -cacology -cacomagician -cacomelia -cacomistle -cacomixl -cacomixle -cacomorphia -cacomorphosis -caconychia -caconym -caconymic -cacoon -cacopathy -cacopharyngia -cacophonia -cacophonic -cacophonical -cacophonically -cacophonist -cacophonize -cacophonous -cacophonously -cacophony -cacophthalmia -cacoplasia -cacoplastic -cacoproctia -cacorhythmic -cacorrhachis -cacorrhinia -cacosmia -cacospermia -cacosplanchnia -cacostomia -cacothansia -cacotheline -cacothesis -cacothymia -cacotrichia -cacotrophia -cacotrophic -cacotrophy -cacotype -cacoxene -cacoxenite -cacozeal -cacozealous -cacozyme -cactaceous -cacti -cactiform -cactoid -cacuminal -cacuminate -cacumination -cacuminous -cacur -cad -cadalene -cadamba -cadastral -cadastration -cadastre -cadaver -cadaveric -cadaverine -cadaverize -cadaverous -cadaverously -cadaverousness -cadbait -cadbit -cadbote -caddice -caddiced -caddie -caddis -caddised -caddish -caddishly -caddishness -caddle -caddow -caddy -cade -cadelle -cadence -cadenced -cadency -cadent -cadential -cadenza -cader -caderas -cadet -cadetcy -cadetship -cadette -cadew -cadge -cadger -cadgily -cadginess -cadgy -cadi -cadilesker -cadinene -cadism -cadiueio -cadjan -cadlock -cadmia -cadmic -cadmide -cadmiferous -cadmium -cadmiumize -cados -cadrans -cadre -cadua -caduac -caduca -caducary -caducean -caduceus -caduciary -caducibranch -caducibranchiate -caducicorn -caducity -caducous -cadus -cadweed -caeca -caecal -caecally -caecectomy -caeciform -caecilian -caecitis -caecocolic -caecostomy -caecotomy -caecum -caelometer -caenostylic -caenostyly -caeoma -caeremoniarius -caesalpiniaceous -caesaropapacy -caesaropapism -caesaropopism -caesious -caesura -caesural -caesuric -cafeneh -cafenet -cafeteria -caffa -caffeate -caffeic -caffeina -caffeine -caffeinic -caffeinism -caffeism -caffeol -caffeone -caffetannic -caffetannin -caffiso -caffle -caffoline -caffoy -cafh -cafiz -caftan -caftaned -cag -cage -caged -cageful -cageless -cagelike -cageling -cageman -cager -cagester -cagework -cagey -caggy -cagily -cagit -cagmag -cahincic -cahiz -cahoot -cahot -cahow -caickle -caid -cailcedra -cailleach -caimacam -caimakam -caiman -caimitillo -caimito -cain -caique -caiquejee -caird -cairn -cairned -cairngorm -cairngorum -cairny -caisson -caissoned -caitiff -cajeput -cajole -cajolement -cajoler -cajolery -cajoling -cajolingly -cajuela -cajun -cajuput -cajuputene -cajuputol -cake -cakebox -cakebread -cakehouse -cakemaker -cakemaking -caker -cakette -cakewalk -cakewalker -cakey -caky -cal -calaba -calabash -calabaza -calabazilla -calaber -calaboose -calabrasella -calabrese -calade -calais -calalu -calamanco -calamansi -calamariaceous -calamarian -calamarioid -calamaroid -calamary -calambac -calambour -calamiferous -calamiform -calaminary -calamine -calamint -calamistral -calamistrum -calamite -calamitean -calamitoid -calamitous -calamitously -calamitousness -calamity -calamondin -calamus -calander -calandria -calangay -calantas -calapite -calascione -calash -calathian -calathidium -calathiform -calathiscus -calathus -calaverite -calbroben -calcaneal -calcaneoastragalar -calcaneoastragaloid -calcaneocuboid -calcaneofibular -calcaneonavicular -calcaneoplantar -calcaneoscaphoid -calcaneotibial -calcaneum -calcaneus -calcar -calcarate -calcareoargillaceous -calcareobituminous -calcareocorneous -calcareosiliceous -calcareosulphurous -calcareous -calcareously -calcareousness -calcariferous -calcariform -calcarine -calced -calceiform -calcemia -calceolate -calcic -calciclase -calcicole -calcicolous -calcicosis -calciferol -calciferous -calcific -calcification -calcified -calciform -calcifugal -calcifuge -calcifugous -calcify -calcigenous -calcigerous -calcimeter -calcimine -calciminer -calcinable -calcination -calcinatory -calcine -calcined -calciner -calcinize -calciobiotite -calciocarnotite -calcioferrite -calcioscheelite -calciovolborthite -calcipexy -calciphile -calciphilia -calciphilous -calciphobe -calciphobous -calciphyre -calciprivic -calcisponge -calcite -calcitestaceous -calcitic -calcitrant -calcitrate -calcitreation -calcium -calcivorous -calcographer -calcographic -calcography -calcrete -calculability -calculable -calculary -calculate -calculated -calculatedly -calculating -calculatingly -calculation -calculational -calculative -calculator -calculatory -calculi -calculiform -calculist -calculous -calculus -calden -caldron -calean -caledonite -calefacient -calefaction -calefactive -calefactor -calefactory -calelectric -calelectrical -calelectricity -calendal -calendar -calendarer -calendarial -calendarian -calendaric -calender -calenderer -calendric -calendrical -calendry -calends -calendulin -calentural -calenture -calenturist -calepin -calescence -calescent -calf -calfbound -calfhood -calfish -calfkill -calfless -calflike -calfling -calfskin -caliber -calibered -calibogus -calibrate -calibration -calibrator -calibre -calicate -calices -caliciform -calicle -calico -calicoback -calicoed -calicular -caliculate -calid -calidity -caliduct -californite -californium -caliga -caligated -caliginous -caliginously -caligo -calinda -calinut -caliological -caliologist -caliology -calipash -calipee -caliper -caliperer -calipers -caliph -caliphal -caliphate -caliphship -calistheneum -calisthenic -calisthenical -calisthenics -caliver -calix -calk -calkage -calker -calkin -calking -call -callable -callainite -callant -callboy -caller -callet -calli -callid -callidity -callidness -calligraph -calligrapha -calligrapher -calligraphic -calligraphical -calligraphically -calligraphist -calligraphy -calling -calliophone -calliper -calliperer -calliphorid -calliphorine -callipygian -callipygous -callisection -callisteia -callithump -callithumpian -callitrichaceous -callitype -callo -callosal -callose -callosity -callosomarginal -callosum -callous -callously -callousness -callow -callower -callowman -callowness -callus -calm -calmant -calmative -calmer -calmierer -calmingly -calmly -calmness -calmy -calodemon -calography -calomba -calomel -calomorphic -calool -calor -calorescence -calorescent -caloric -caloricity -calorie -calorifacient -calorific -calorifical -calorifically -calorification -calorifics -calorifier -calorify -calorigenic -calorimeter -calorimetric -calorimetrical -calorimetrically -calorimetry -calorimotor -caloris -calorisator -calorist -calorize -calorizer -calotermitid -calotte -calotype -calotypic -calotypist -caloyer -calp -calpac -calpack -calpacked -calpulli -caltrap -caltrop -calumba -calumet -calumniate -calumniation -calumniative -calumniator -calumniatory -calumnious -calumniously -calumniousness -calumny -calutron -calvaria -calvarium -calve -calved -calver -calves -calvish -calvities -calvity -calvous -calx -calycanth -calycanthaceous -calycanthemous -calycanthemy -calycanthine -calycate -calyceraceous -calyces -calyciferous -calycifloral -calyciflorate -calyciflorous -calyciform -calycinal -calycine -calycle -calycled -calycoid -calycoideous -calycophoran -calycozoan -calycozoic -calycozoon -calycular -calyculate -calyculated -calycule -calyculus -calymma -calyphyomy -calypsist -calypso -calypsonian -calypter -calyptoblastic -calyptra -calyptrate -calyptriform -calyptrimorphous -calyptro -calyptrogen -calyx -cam -camaca -camagon -camail -camailed -camalote -caman -camansi -camara -camaraderie -camarilla -camass -camata -camatina -camb -cambaye -camber -cambial -cambiform -cambiogenetic -cambism -cambist -cambistry -cambium -cambogia -cambrel -cambresine -cambricleaf -cambuca -came -cameist -camel -camelback -cameleer -cameline -camelish -camelishness -camelkeeper -camellike -camellin -camelman -cameloid -camelopard -camelry -cameo -cameograph -cameography -camera -cameral -cameralism -cameralist -cameralistic -cameralistics -cameraman -camerate -camerated -cameration -camerier -camerist -camerlingo -camilla -camillus -camion -camisado -camise -camisia -camisole -camlet -camleteen -cammed -cammock -cammocky -camomile -camoodi -camoodie -camouflage -camouflager -camp -campagna -campagnol -campaign -campaigner -campana -campane -campanero -campaniform -campanile -campaniliform -campanilla -campanini -campanist -campanistic -campanologer -campanological -campanologically -campanologist -campanology -campanulaceous -campanular -campanularian -campanulate -campanulated -campanulous -campbellite -campcraft -campephagine -camper -campestral -campfight -campfire -campground -camphane -camphanic -camphanone -camphanyl -camphene -camphine -camphire -campho -camphocarboxylic -camphoid -camphol -campholic -campholide -campholytic -camphor -camphoraceous -camphorate -camphoric -camphorize -camphorone -camphoronic -camphoroyl -camphorphorone -camphorwood -camphory -camphoryl -camphylene -campimeter -campimetrical -campimetry -campion -cample -campmaster -campo -campodeid -campodeiform -campodeoid -campody -campoo -camporee -campshed -campshedding -campsheeting -campshot -campstool -camptodrome -camptonite -campulitropal -campulitropous -campus -campward -campylite -campylodrome -campylometer -campylospermous -campylotropal -campylotropous -camshach -camshachle -camshaft -camstane -camstone -camuning -camus -camused -camwood -can -canaba -canada -canadine -canadite -canadol -canaigre -canaille -canajong -canal -canalage -canalboat -canalicular -canaliculate -canaliculated -canaliculation -canaliculi -canaliculization -canaliculus -canaliferous -canaliform -canalization -canalize -canaller -canalling -canalman -canalside -canamo -canape -canapina -canard -canari -canarin -canary -canasta -canaster -canaut -canavalin -cancan -cancel -cancelable -cancelation -canceleer -canceler -cancellarian -cancellate -cancellated -cancellation -cancelli -cancellous -cancellus -cancelment -cancer -cancerate -canceration -cancerdrops -cancered -cancerigenic -cancerism -cancerophobe -cancerophobia -cancerous -cancerously -cancerousness -cancerroot -cancerweed -cancerwort -canch -canchalagua -cancriform -cancrinite -cancrisocial -cancrivorous -cancrizans -cancroid -cancrophagous -cancrum -cand -candareen -candela -candelabra -candelabrum -candelilla -candent -candescence -candescent -candescently -candid -candidacy -candidate -candidateship -candidature -candidly -candidness -candied -candier -candify -candiru -candle -candleball -candlebeam -candleberry -candlebomb -candlebox -candlefish -candleholder -candlelight -candlelighted -candlelighter -candlelighting -candlelit -candlemaker -candlemaking -candlenut -candlepin -candler -candlerent -candleshine -candleshrift -candlestand -candlestick -candlesticked -candlestickward -candlewaster -candlewasting -candlewick -candlewood -candlewright -candock -candolleaceous -candor -candroy -candy -candymaker -candymaking -candys -candystick -candytuft -candyweed -cane -canebrake -canel -canelike -canella -canellaceous -canelo -caneology -canephor -canephore -canephoros -canephroi -caner -canescence -canescent -canette -canewise -canework -canfieldite -canful -cangan -cangia -cangle -cangler -cangue -canhoop -canicola -canicular -canicule -canid -canille -caninal -canine -caniniform -caninity -caninus -canioned -canions -canistel -canister -canities -canjac -cank -canker -cankerberry -cankerbird -cankereat -cankered -cankeredly -cankeredness -cankerflower -cankerous -cankerroot -cankerweed -cankerworm -cankerwort -cankery -canmaker -canmaking -canman -canna -cannabic -cannabinaceous -cannabine -cannabinol -cannabism -cannaceous -cannach -canned -cannel -cannelated -cannelure -cannelured -cannequin -canner -cannery -cannet -cannibal -cannibalean -cannibalic -cannibalish -cannibalism -cannibalistic -cannibalistically -cannibality -cannibalization -cannibalize -cannibally -cannikin -cannily -canniness -canning -cannon -cannonade -cannoned -cannoneer -cannoneering -cannonproof -cannonry -cannot -cannula -cannular -cannulate -cannulated -canny -canoe -canoeing -canoeist -canoeload -canoeman -canoewood -canon -canoncito -canoness -canonic -canonical -canonically -canonicalness -canonicals -canonicate -canonicity -canonics -canonist -canonistic -canonistical -canonizant -canonization -canonize -canonizer -canonlike -canonry -canonship -canoodle -canoodler -canopic -canopy -canorous -canorously -canorousness -canroy -canroyer -canso -cant -cantabank -cantabile -cantala -cantalite -cantaloupe -cantankerous -cantankerously -cantankerousness -cantar -cantara -cantaro -cantata -cantation -cantative -cantatory -cantboard -canted -canteen -cantefable -canter -canterer -canthal -cantharidal -cantharidate -cantharides -cantharidian -cantharidin -cantharidism -cantharidize -cantharis -cantharophilous -cantharus -canthectomy -canthitis -cantholysis -canthoplasty -canthorrhaphy -canthotomy -canthus -cantic -canticle -cantico -cantilena -cantilene -cantilever -cantilevered -cantillate -cantillation -cantily -cantina -cantiness -canting -cantingly -cantingness -cantion -cantish -cantle -cantlet -canto -canton -cantonal -cantonalism -cantoned -cantoner -cantonment -cantoon -cantor -cantoral -cantoris -cantorous -cantorship -cantred -cantref -cantrip -cantus -cantwise -canty -canun -canvas -canvasback -canvasman -canvass -canvassy -cany -canyon -canzon -canzonet -caoba -caoutchouc -caoutchoucin -cap -capability -capable -capableness -capably -capacious -capaciously -capaciousness -capacitance -capacitate -capacitation -capacitative -capacitativly -capacitive -capacitor -capacity -capanna -capanne -caparison -capax -capcase -cape -caped -capel -capelet -capelin -capeline -capellet -caper -caperbush -capercaillie -capercally -capercut -caperer -capering -caperingly -capernoited -capernoitie -capernoity -capersome -caperwort -capes -capeskin -capeweed -capewise -capful -caph -caphar -caphite -capias -capicha -capillaceous -capillaire -capillament -capillarectasia -capillarily -capillarimeter -capillariness -capillariomotor -capillarity -capillary -capillation -capilliculture -capilliform -capillitial -capillitium -capillose -capistrate -capital -capitaldom -capitaled -capitalism -capitalist -capitalistic -capitalistically -capitalizable -capitalization -capitalize -capitally -capitalness -capitan -capitate -capitated -capitatim -capitation -capitative -capitatum -capitellar -capitellate -capitelliform -capitellum -capitoul -capitoulate -capitulant -capitular -capitularly -capitulary -capitulate -capitulation -capitulator -capitulatory -capituliform -capitulum -capivi -capkin -capless -caplin -capmaker -capmaking -capman -capmint -capnomancy -capocchia -capomo -capon -caponier -caponize -caponizer -caporal -capot -capote -cappadine -capparidaceous -capped -cappelenite -capper -cappie -capping -capple -cappy -caprate -caprelline -capreol -capreolar -capreolary -capreolate -capreoline -capric -capriccetto -capricci -capriccio -caprice -capricious -capriciously -capriciousness -caprid -caprificate -caprification -caprificator -caprifig -caprifoliaceous -caprifolium -capriform -caprigenous -caprimulgine -caprin -caprine -caprinic -capriole -capriped -capripede -caprizant -caproate -caproic -caproin -caprone -capronic -capronyl -caproyl -capryl -caprylate -caprylene -caprylic -caprylin -caprylone -caprylyl -capsa -capsaicin -capsheaf -capshore -capsicin -capsicum -capsid -capsizal -capsize -capstan -capstone -capsula -capsulae -capsular -capsulate -capsulated -capsulation -capsule -capsulectomy -capsuler -capsuliferous -capsuliform -capsuligerous -capsulitis -capsulociliary -capsulogenous -capsulolenticular -capsulopupillary -capsulorrhaphy -capsulotome -capsulotomy -capsumin -captaculum -captain -captaincy -captainess -captainly -captainry -captainship -captance -captation -caption -captious -captiously -captiousness -captivate -captivately -captivating -captivatingly -captivation -captivative -captivator -captivatrix -captive -captivity -captor -captress -capturable -capture -capturer -capuche -capuched -capuchin -capucine -capulet -capulin -capybara -car -carabao -carabeen -carabid -carabidan -carabideous -carabidoid -carabin -carabineer -caraboid -carabus -caracal -caracara -caracol -caracole -caracoler -caracoli -caracolite -caracoller -caracore -caract -caracter -carafe -caraguata -caraibe -caraipi -carajura -caramba -carambola -carambole -caramel -caramelan -caramelen -caramelin -caramelization -caramelize -caramoussal -carancha -caranda -caranday -carane -carangid -carangoid -caranna -carapace -carapaced -carapacic -carapato -carapax -carapine -carapo -carat -caratch -caraunda -caravan -caravaneer -caravanist -caravanner -caravansary -caravanserai -caravanserial -caravel -caraway -carbacidometer -carbamate -carbamic -carbamide -carbamido -carbamine -carbamino -carbamyl -carbanil -carbanilic -carbanilide -carbarn -carbasus -carbazic -carbazide -carbazine -carbazole -carbazylic -carbeen -carbene -carberry -carbethoxy -carbethoxyl -carbide -carbimide -carbine -carbinol -carbinyl -carbo -carboazotine -carbocinchomeronic -carbodiimide -carbodynamite -carbogelatin -carbohemoglobin -carbohydrase -carbohydrate -carbohydraturia -carbohydrazide -carbohydride -carbohydrogen -carbolate -carbolated -carbolfuchsin -carbolic -carbolineate -carbolize -carboluria -carbolxylol -carbomethene -carbomethoxy -carbomethoxyl -carbon -carbona -carbonaceous -carbonade -carbonado -carbonatation -carbonate -carbonation -carbonatization -carbonator -carbonemia -carbonero -carbonic -carbonide -carboniferous -carbonification -carbonify -carbonigenous -carbonimeter -carbonimide -carbonite -carbonitride -carbonium -carbonizable -carbonization -carbonize -carbonizer -carbonless -carbonometer -carbonometry -carbonous -carbonuria -carbonyl -carbonylene -carbonylic -carbophilous -carbora -carborundum -carbosilicate -carbostyril -carboxide -carboxy -carboxyhemoglobin -carboxyl -carboxylase -carboxylate -carboxylation -carboxylic -carboy -carboyed -carbro -carbromal -carbuilder -carbuncle -carbuncled -carbuncular -carbungi -carburant -carburate -carburation -carburator -carbure -carburet -carburetant -carburetor -carburization -carburize -carburizer -carburometer -carbyl -carbylamine -carcajou -carcake -carcanet -carcaneted -carcass -carceag -carcel -carceral -carcerate -carceration -carchariid -carcharioid -carcharodont -carcinemia -carcinogen -carcinogenesis -carcinogenic -carcinoid -carcinological -carcinologist -carcinology -carcinolysin -carcinolytic -carcinoma -carcinomata -carcinomatoid -carcinomatosis -carcinomatous -carcinomorphic -carcinophagous -carcinopolypus -carcinosarcoma -carcinosarcomata -carcinosis -carcoon -card -cardaissin -cardamom -cardboard -cardcase -cardecu -carded -cardel -carder -cardholder -cardia -cardiac -cardiacal -cardiacean -cardiagra -cardiagram -cardiagraph -cardiagraphy -cardial -cardialgia -cardialgy -cardiameter -cardiamorphia -cardianesthesia -cardianeuria -cardiant -cardiaplegia -cardiarctia -cardiasthenia -cardiasthma -cardiataxia -cardiatomy -cardiatrophia -cardiauxe -cardicentesis -cardiectasis -cardiectomize -cardiectomy -cardielcosis -cardiemphraxia -cardiform -cardigan -cardin -cardinal -cardinalate -cardinalic -cardinalism -cardinalist -cardinalitial -cardinalitian -cardinally -cardinalship -cardines -carding -cardioaccelerator -cardioarterial -cardioblast -cardiocarpum -cardiocele -cardiocentesis -cardiocirrhosis -cardioclasia -cardioclasis -cardiodilator -cardiodynamics -cardiodynia -cardiodysesthesia -cardiodysneuria -cardiogenesis -cardiogenic -cardiogram -cardiograph -cardiographic -cardiography -cardiohepatic -cardioid -cardiokinetic -cardiolith -cardiological -cardiologist -cardiology -cardiolysis -cardiomalacia -cardiomegaly -cardiomelanosis -cardiometer -cardiometric -cardiometry -cardiomotility -cardiomyoliposis -cardiomyomalacia -cardioncus -cardionecrosis -cardionephric -cardioneural -cardioneurosis -cardionosus -cardioparplasis -cardiopathic -cardiopathy -cardiopericarditis -cardiophobe -cardiophobia -cardiophrenia -cardioplasty -cardioplegia -cardiopneumatic -cardiopneumograph -cardioptosis -cardiopulmonary -cardiopuncture -cardiopyloric -cardiorenal -cardiorespiratory -cardiorrhaphy -cardiorrheuma -cardiorrhexis -cardioschisis -cardiosclerosis -cardioscope -cardiospasm -cardiosphygmogram -cardiosphygmograph -cardiosymphysis -cardiotherapy -cardiotomy -cardiotonic -cardiotoxic -cardiotrophia -cardiotrophotherapy -cardiovascular -cardiovisceral -cardipaludism -cardipericarditis -cardisophistical -carditic -carditis -cardlike -cardmaker -cardmaking -cardo -cardol -cardon -cardona -cardoncillo -cardooer -cardoon -cardophagus -cardplayer -cardroom -cardsharp -cardsharping -cardstock -carduaceous -care -carecloth -careen -careenage -careener -career -careerer -careering -careeringly -careerist -carefree -careful -carefully -carefulness -careless -carelessly -carelessness -carene -carer -caress -caressant -caresser -caressing -caressingly -caressive -caressively -carest -caret -caretaker -caretaking -careworn -carfare -carfax -carfuffle -carful -carga -cargo -cargoose -carhop -carhouse -cariacine -cariama -caribou -caricaceous -caricatura -caricaturable -caricatural -caricature -caricaturist -caricetum -caricographer -caricography -caricologist -caricology -caricous -carid -caridean -caridoid -caries -carillon -carillonneur -carina -carinal -carinate -carinated -carination -cariniform -cariole -carioling -cariosity -carious -cariousness -caritative -caritive -cark -carking -carkingly -carkled -carl -carless -carlet -carlie -carlin -carline -carling -carlings -carlish -carlishness -carload -carloading -carloadings -carlot -carls -carmagnole -carmalum -carman -carmele -carmeloite -carminative -carmine -carminette -carminic -carminite -carminophilous -carmoisin -carmot -carnage -carnaged -carnal -carnalism -carnalite -carnality -carnalize -carnallite -carnally -carnalness -carnaptious -carnassial -carnate -carnation -carnationed -carnationist -carnauba -carnaubic -carnaubyl -carnelian -carneol -carneole -carneous -carney -carnic -carniferous -carniferrin -carnifex -carnification -carnifices -carnificial -carniform -carnify -carnival -carnivaler -carnivalesque -carnivoracity -carnivoral -carnivore -carnivorism -carnivorous -carnivorously -carnivorousness -carnose -carnosine -carnosity -carnotite -carnous -caroa -carob -caroba -caroche -carol -caroler -caroli -carolin -caroline -carolus -carom -carombolette -carone -caronic -caroome -caroon -carotene -carotenoid -carotic -carotid -carotidal -carotidean -carotin -carotinemia -carotinoid -caroubier -carousal -carouse -carouser -carousing -carousingly -carp -carpaine -carpal -carpale -carpalia -carpel -carpellary -carpellate -carpent -carpenter -carpentering -carpentership -carpentry -carper -carpet -carpetbag -carpetbagger -carpetbaggery -carpetbaggism -carpetbagism -carpetbeater -carpeting -carpetlayer -carpetless -carpetmaker -carpetmaking -carpetmonger -carpetweb -carpetweed -carpetwork -carpetwoven -carpholite -carphosiderite -carpid -carpidium -carpincho -carping -carpingly -carpintero -carpitis -carpium -carpocace -carpocarpal -carpocephala -carpocephalum -carpocerite -carpocervical -carpogam -carpogamy -carpogenic -carpogenous -carpogone -carpogonial -carpogonium -carpolite -carpolith -carpological -carpologically -carpologist -carpology -carpomania -carpometacarpal -carpometacarpus -carpopedal -carpophagous -carpophalangeal -carpophore -carpophyll -carpophyte -carpopodite -carpopoditic -carpoptosia -carpoptosis -carport -carpos -carposperm -carposporangia -carposporangial -carposporangium -carpospore -carposporic -carposporous -carpostome -carpus -carquaise -carr -carrack -carrageen -carrageenin -carrel -carriable -carriage -carriageable -carriageful -carriageless -carriagesmith -carriageway -carrick -carried -carrier -carrion -carritch -carritches -carriwitchet -carrizo -carroch -carrollite -carronade -carrot -carrotage -carroter -carrotiness -carrottop -carrotweed -carrotwood -carroty -carrousel -carrow -carry -carryall -carrying -carrytale -carse -carshop -carsick -carsmith -cart -cartable -cartaceous -cartage -cartboot -cartbote -carte -cartel -cartelism -cartelist -cartelization -cartelize -carter -cartful -carthame -carthamic -carthamin -cartilage -cartilaginean -cartilagineous -cartilaginification -cartilaginoid -cartilaginous -cartisane -cartload -cartmaker -cartmaking -cartman -cartobibliography -cartogram -cartograph -cartographer -cartographic -cartographical -cartographically -cartography -cartomancy -carton -cartonnage -cartoon -cartoonist -cartouche -cartridge -cartsale -cartulary -cartway -cartwright -cartwrighting -carty -carua -carucage -carucal -carucate -carucated -caruncle -caruncula -carunculae -caruncular -carunculate -carunculated -carunculous -carvacrol -carvacryl -carval -carve -carvel -carven -carvene -carver -carvership -carvestrene -carving -carvoepra -carvol -carvomenthene -carvone -carvyl -carwitchet -caryatic -caryatid -caryatidal -caryatidean -caryatidic -caryl -caryocaraceous -caryophyllaceous -caryophyllene -caryophylleous -caryophyllin -caryophyllous -caryopilite -caryopses -caryopsides -caryopsis -casaba -casabe -casal -casalty -casate -casaun -casava -casave -casavi -casbah -cascabel -cascade -cascadite -cascado -cascalho -cascalote -cascara -cascarilla -cascaron -casco -cascol -case -casease -caseate -caseation -casebook -casebox -cased -caseful -casefy -caseharden -caseic -casein -caseinate -caseinogen -casekeeper -caseless -caselessly -casemaker -casemaking -casemate -casemated -casement -casemented -caseolysis -caseose -caseous -caser -casern -caseum -caseweed -casewood -casework -caseworker -caseworm -cash -casha -cashable -cashableness -cashaw -cashbook -cashbox -cashboy -cashcuttee -cashel -cashew -cashgirl -cashier -cashierer -cashierment -cashkeeper -cashment -cashmere -cashmerette -casing -casino -casiri -cask -casket -casking -casklike -casque -casqued -casquet -casquetel -casquette -cass -cassabanana -cassabully -cassady -cassareep -cassation -casse -casselty -cassena -casserole -cassia -cassican -cassideous -cassidid -cassidony -cassiduloid -cassie -cassimere -cassina -cassine -cassinette -cassino -cassinoid -cassioberry -cassiopeium -cassis -cassiterite -cassock -cassolette -casson -cassonade -cassoon -cassowary -cassumunar -cast -castable -castagnole -castanean -castaneous -castanet -castaway -caste -casteless -castelet -castellan -castellano -castellanship -castellany -castellar -castellate -castellated -castellation -caster -casterless -casthouse -castice -castigable -castigate -castigation -castigative -castigator -castigatory -casting -castle -castled -castlelike -castlet -castlewards -castlewise -castling -castock -castoff -castor -castoreum -castorial -castorin -castorite -castorized -castory -castra -castral -castrametation -castrate -castrater -castration -castrator -castrensial -castrensian -castrum -castuli -casual -casualism -casualist -casuality -casually -casualness -casualty -casuarinaceous -casuary -casuist -casuistess -casuistic -casuistical -casuistically -casuistry -casula -caswellite -cat -catabaptist -catabases -catabasis -catabatic -catabibazon -catabiotic -catabolic -catabolically -catabolin -catabolism -catabolite -catabolize -catacaustic -catachreses -catachresis -catachrestic -catachrestical -catachrestically -catachthonian -cataclasm -cataclasmic -cataclastic -cataclinal -cataclysm -cataclysmal -cataclysmatic -cataclysmatist -cataclysmic -cataclysmically -cataclysmist -catacomb -catacorolla -catacoustics -catacromyodian -catacrotic -catacrotism -catacumbal -catadicrotic -catadicrotism -catadioptric -catadioptrical -catadioptrics -catadromous -catafalco -catafalque -catagenesis -catagenetic -catagmatic -catakinesis -catakinetic -catakinetomer -catakinomeric -catalase -catalecta -catalectic -catalecticant -catalepsis -catalepsy -cataleptic -cataleptiform -cataleptize -cataleptoid -catalexis -catalina -catalineta -catalinite -catallactic -catallactically -catallactics -catallum -catalogia -catalogic -catalogical -catalogist -catalogistic -catalogue -cataloguer -cataloguish -cataloguist -cataloguize -catalowne -catalpa -catalufa -catalyses -catalysis -catalyst -catalyte -catalytic -catalytical -catalytically -catalyzator -catalyze -catalyzer -catamaran -catamenia -catamenial -catamite -catamited -catamiting -catamount -catamountain -catan -catapan -catapasm -catapetalous -cataphasia -cataphatic -cataphora -cataphoresis -cataphoretic -cataphoria -cataphoric -cataphract -cataphrenia -cataphrenic -cataphrygianism -cataphyll -cataphylla -cataphyllary -cataphyllum -cataphysical -cataplasia -cataplasis -cataplasm -catapleiite -cataplexy -catapult -catapultic -catapultier -cataract -cataractal -cataracted -cataractine -cataractous -cataractwise -cataria -catarinite -catarrh -catarrhal -catarrhally -catarrhed -catarrhine -catarrhinian -catarrhous -catasarka -catasta -catastaltic -catastasis -catastate -catastatic -catasterism -catastrophal -catastrophe -catastrophic -catastrophical -catastrophically -catastrophism -catastrophist -catathymic -catatonia -catatoniac -catatonic -catawampous -catawampously -catawamptious -catawamptiously -catawampus -catberry -catbird -catboat -catcall -catch -catchable -catchall -catchcry -catcher -catchfly -catchiness -catching -catchingly -catchingness -catchland -catchment -catchpenny -catchplate -catchpole -catchpolery -catchpoleship -catchpoll -catchpollery -catchup -catchwater -catchweed -catchweight -catchword -catchwork -catchy -catclaw -catdom -cate -catechesis -catechetic -catechetical -catechetically -catechin -catechism -catechismal -catechist -catechistic -catechistical -catechistically -catechizable -catechization -catechize -catechizer -catechol -catechu -catechumen -catechumenal -catechumenate -catechumenical -catechumenically -catechumenism -catechumenship -catechutannic -categorem -categorematic -categorematical -categorematically -categorial -categoric -categorical -categorically -categoricalness -categorist -categorization -categorize -category -catelectrotonic -catelectrotonus -catella -catena -catenae -catenarian -catenary -catenate -catenated -catenation -catenoid -catenulate -catepuce -cater -cateran -catercap -catercorner -caterer -caterership -cateress -caterpillar -caterpillared -caterpillarlike -caterva -caterwaul -caterwauler -caterwauling -cateye -catface -catfaced -catfacing -catfall -catfish -catfoot -catfooted -catgut -catharization -catharize -catharpin -catharping -catharsis -cathartic -cathartical -cathartically -catharticalness -cathead -cathect -cathectic -cathection -cathedra -cathedral -cathedraled -cathedralesque -cathedralic -cathedrallike -cathedralwise -cathedratic -cathedratica -cathedratical -cathedratically -cathedraticum -cathepsin -catheter -catheterism -catheterization -catheterize -catheti -cathetometer -cathetometric -cathetus -cathexion -cathexis -cathidine -cathin -cathine -cathinine -cathion -cathisma -cathodal -cathode -cathodic -cathodical -cathodically -cathodofluorescence -cathodograph -cathodography -cathodoluminescence -cathograph -cathography -cathole -catholic -catholical -catholically -catholicalness -catholicate -catholicism -catholicist -catholicity -catholicize -catholicizer -catholicly -catholicness -catholicon -catholicos -catholicus -catholyte -cathood -cathop -cathro -cation -cationic -cativo -catjang -catkin -catkinate -catlap -catlike -catlin -catling -catlinite -catmalison -catmint -catnip -catoblepas -catocalid -catocathartic -catoctin -catodont -catogene -catogenic -catoptric -catoptrical -catoptrically -catoptrics -catoptrite -catoptromancy -catoptromantic -catostomid -catostomoid -catpiece -catpipe -catproof -catskin -catstep -catstick -catstitch -catstitcher -catstone -catsup -cattabu -cattail -cattalo -cattery -cattily -cattimandoo -cattiness -catting -cattish -cattishly -cattishness -cattle -cattlebush -cattlegate -cattleless -cattleman -cattleya -cattleyak -catty -cattyman -catvine -catwalk -catwise -catwood -catwort -caubeen -cauboge -cauch -cauchillo -caucho -caucus -cauda -caudad -caudae -caudal -caudally -caudalward -caudata -caudate -caudated -caudation -caudatolenticular -caudatory -caudatum -caudex -caudices -caudicle -caudiform -caudillism -caudle -caudocephalad -caudodorsal -caudofemoral -caudolateral -caudotibial -caudotibialis -caught -cauk -caul -cauld -cauldrife -cauldrifeness -caulerpaceous -caules -caulescent -caulicle -caulicole -caulicolous -caulicule -cauliculus -cauliferous -cauliflorous -cauliflory -cauliflower -cauliform -cauligenous -caulinar -caulinary -cauline -caulis -caulivorous -caulocarpic -caulocarpous -caulome -caulomer -caulomic -caulophylline -caulopteris -caulosarc -caulotaxis -caulotaxy -caulote -caum -cauma -caumatic -caunch -caup -caupo -caupones -caurale -causability -causable -causal -causalgia -causality -causally -causate -causation -causational -causationism -causationist -causative -causatively -causativeness -causativity -cause -causeful -causeless -causelessly -causelessness -causer -causerie -causeway -causewayman -causey -causidical -causing -causingness -causse -causson -caustic -caustical -caustically -causticiser -causticism -causticity -causticization -causticize -causticizer -causticly -causticness -caustification -caustify -cautel -cautelous -cautelously -cautelousness -cauter -cauterant -cauterization -cauterize -cautery -caution -cautionary -cautioner -cautionry -cautious -cautiously -cautiousness -cautivo -cava -cavae -caval -cavalcade -cavalero -cavalier -cavalierish -cavalierishness -cavalierism -cavalierly -cavalierness -cavaliero -cavaliership -cavalla -cavalry -cavalryman -cavascope -cavate -cavatina -cave -caveat -caveator -cavekeeper -cavel -cavelet -cavelike -cavendish -cavern -cavernal -caverned -cavernicolous -cavernitis -cavernlike -cavernoma -cavernous -cavernously -cavernulous -cavesson -cavetto -caviar -cavicorn -cavie -cavil -caviler -caviling -cavilingly -cavilingness -cavillation -caving -cavings -cavish -cavitary -cavitate -cavitation -cavitied -cavity -caviya -cavort -cavus -cavy -caw -cawk -cawky -cawney -cawquaw -caxiri -caxon -cay -cayenne -cayenned -cayman -caza -cazimi -ce -cearin -cease -ceaseless -ceaselessly -ceaselessness -ceasmic -cebell -cebian -cebid -cebil -cebine -ceboid -cebollite -cebur -cecidiologist -cecidiology -cecidium -cecidogenous -cecidologist -cecidology -cecidomyian -cecidomyiid -cecidomyiidous -cecilite -cecils -cecity -cecograph -cecomorphic -cecostomy -cecutiency -cedar -cedarbird -cedared -cedarn -cedarware -cedarwood -cedary -cede -cedent -ceder -cedilla -cedrat -cedrate -cedre -cedrene -cedrin -cedrine -cedriret -cedrium -cedrol -cedron -cedry -cedula -cee -ceibo -ceil -ceile -ceiler -ceilidh -ceiling -ceilinged -ceilingward -ceilingwards -ceilometer -celadon -celadonite -celandine -celastraceous -celation -celative -celature -celebrant -celebrate -celebrated -celebratedness -celebrater -celebration -celebrative -celebrator -celebratory -celebrity -celemin -celemines -celeomorph -celeomorphic -celeriac -celerity -celery -celesta -celeste -celestial -celestiality -celestialize -celestially -celestialness -celestina -celestine -celestite -celestitude -celiac -celiadelphus -celiagra -celialgia -celibacy -celibatarian -celibate -celibatic -celibatist -celibatory -celidographer -celidography -celiectasia -celiectomy -celiemia -celiitis -celiocele -celiocentesis -celiocolpotomy -celiocyesis -celiodynia -celioelytrotomy -celioenterotomy -celiogastrotomy -celiohysterotomy -celiolymph -celiomyalgia -celiomyodynia -celiomyomectomy -celiomyomotomy -celiomyositis -celioncus -celioparacentesis -celiopyosis -celiorrhaphy -celiorrhea -celiosalpingectomy -celiosalpingotomy -celioschisis -celioscope -celioscopy -celiotomy -celite -cell -cella -cellae -cellar -cellarage -cellarer -cellaress -cellaret -cellaring -cellarless -cellarman -cellarous -cellarway -cellarwoman -cellated -celled -cellepore -celliferous -celliform -cellifugal -cellipetal -cellist -cello -cellobiose -celloid -celloidin -celloist -cellophane -cellose -cellular -cellularity -cellularly -cellulase -cellulate -cellulated -cellulation -cellule -cellulicidal -celluliferous -cellulifugal -cellulifugally -cellulin -cellulipetal -cellulipetally -cellulitis -cellulocutaneous -cellulofibrous -celluloid -celluloided -cellulose -cellulosic -cellulosity -cellulotoxic -cellulous -celotomy -celsian -celt -celtiform -celtium -celtuce -cembalist -cembalo -cement -cemental -cementation -cementatory -cementer -cementification -cementin -cementite -cementitious -cementless -cementmaker -cementmaking -cementoblast -cementoma -cementum -cemeterial -cemetery -cenacle -cenaculum -cenanthous -cenanthy -cencerro -cendre -cenobian -cenobite -cenobitic -cenobitical -cenobitically -cenobitism -cenobium -cenoby -cenogenesis -cenogenetic -cenogenetically -cenogonous -cenosite -cenosity -cenospecies -cenospecific -cenospecifically -cenotaph -cenotaphic -cenotaphy -cenozoology -cense -censer -censerless -censive -censor -censorable -censorate -censorial -censorious -censoriously -censoriousness -censorship -censual -censurability -censurable -censurableness -censurably -censure -censureless -censurer -censureship -census -cent -centage -cental -centare -centaur -centaurdom -centauress -centauri -centaurial -centaurian -centauric -centauromachia -centauromachy -centaurus -centaury -centavo -centena -centenar -centenarian -centenarianism -centenary -centenier -centenionalis -centennial -centennially -center -centerable -centerboard -centered -centerer -centering -centerless -centermost -centerpiece -centervelic -centerward -centerwise -centesimal -centesimally -centesimate -centesimation -centesimi -centesimo -centesis -centetid -centgener -centiar -centiare -centibar -centifolious -centigrade -centigram -centile -centiliter -centillion -centillionth -centime -centimeter -centimo -centimolar -centinormal -centipedal -centipede -centiplume -centipoise -centistere -centistoke -centner -cento -centonical -centonism -centrad -central -centrale -centralism -centralist -centralistic -centrality -centralization -centralize -centralizer -centrally -centralness -centranth -centrarchid -centrarchoid -centraxonial -centric -centrical -centricality -centrically -centricalness -centricipital -centriciput -centricity -centriffed -centrifugal -centrifugalization -centrifugalize -centrifugaller -centrifugally -centrifugate -centrifugation -centrifuge -centrifugence -centriole -centripetal -centripetalism -centripetally -centripetence -centripetency -centriscid -centrisciform -centriscoid -centrist -centroacinar -centrobaric -centrobarical -centroclinal -centrode -centrodesmose -centrodesmus -centrodorsal -centrodorsally -centroid -centroidal -centrolecithal -centrolepidaceous -centrolinead -centrolineal -centromere -centronucleus -centroplasm -centrosome -centrosomic -centrosphere -centrosymmetric -centrosymmetry -centrum -centry -centum -centumvir -centumviral -centumvirate -centuple -centuplicate -centuplication -centuply -centuria -centurial -centuriate -centuriation -centuriator -centuried -centurion -century -ceorl -ceorlish -cep -cepa -cepaceous -cepe -cephaeline -cephalad -cephalagra -cephalalgia -cephalalgic -cephalalgy -cephalanthium -cephalanthous -cephalate -cephaldemae -cephalemia -cephaletron -cephalhematoma -cephalhydrocele -cephalic -cephalin -cephaline -cephalism -cephalitis -cephalization -cephaloauricular -cephalobranchiate -cephalocathartic -cephalocaudal -cephalocele -cephalocentesis -cephalocercal -cephalochord -cephalochordal -cephalochordate -cephaloclasia -cephaloclast -cephalocone -cephaloconic -cephalocyst -cephalodiscid -cephalodymia -cephalodymus -cephalodynia -cephalofacial -cephalogenesis -cephalogram -cephalograph -cephalohumeral -cephalohumeralis -cephaloid -cephalology -cephalomancy -cephalomant -cephalomelus -cephalomenia -cephalomeningitis -cephalomere -cephalometer -cephalometric -cephalometry -cephalomotor -cephalomyitis -cephalon -cephalonasal -cephalopagus -cephalopathy -cephalopharyngeal -cephalophine -cephalophorous -cephalophyma -cephaloplegia -cephaloplegic -cephalopod -cephalopodan -cephalopodic -cephalopodous -cephalorachidian -cephalorhachidian -cephalosome -cephalospinal -cephalostyle -cephalotaceous -cephalotheca -cephalothecal -cephalothoracic -cephalothoracopagus -cephalothorax -cephalotome -cephalotomy -cephalotractor -cephalotribe -cephalotripsy -cephalotrocha -cephalous -cephid -ceps -ceptor -cequi -ceraceous -cerago -ceral -ceramal -cerambycid -ceramiaceous -ceramic -ceramicite -ceramics -ceramidium -ceramist -ceramographic -ceramography -cerargyrite -ceras -cerasein -cerasin -cerastes -cerata -cerate -ceratectomy -cerated -ceratiasis -ceratiid -ceratioid -ceration -ceratite -ceratitic -ceratitoid -ceratoblast -ceratobranchial -ceratocricoid -ceratofibrous -ceratoglossal -ceratoglossus -ceratohyal -ceratohyoid -ceratoid -ceratomandibular -ceratomania -ceratophyllaceous -ceratophyte -ceratopsian -ceratopsid -ceratopteridaceous -ceratorhine -ceratospongian -ceratotheca -ceratothecal -ceraunia -ceraunics -ceraunogram -ceraunograph -ceraunomancy -ceraunophone -ceraunoscope -ceraunoscopy -cercal -cercaria -cercarial -cercarian -cercariform -cercelee -cerci -cercomonad -cercopid -cercopithecid -cercopithecoid -cercopod -cercus -cere -cereal -cerealian -cerealin -cerealism -cerealist -cerealose -cerebella -cerebellar -cerebellifugal -cerebellipetal -cerebellocortex -cerebellopontile -cerebellopontine -cerebellorubral -cerebellospinal -cerebellum -cerebra -cerebral -cerebralgia -cerebralism -cerebralist -cerebralization -cerebralize -cerebrally -cerebrasthenia -cerebrasthenic -cerebrate -cerebration -cerebrational -cerebric -cerebricity -cerebriform -cerebriformly -cerebrifugal -cerebrin -cerebripetal -cerebritis -cerebrize -cerebrocardiac -cerebrogalactose -cerebroganglion -cerebroganglionic -cerebroid -cerebrology -cerebroma -cerebromalacia -cerebromedullary -cerebromeningeal -cerebromeningitis -cerebrometer -cerebron -cerebronic -cerebroparietal -cerebropathy -cerebropedal -cerebrophysiology -cerebropontile -cerebropsychosis -cerebrorachidian -cerebrosclerosis -cerebroscope -cerebroscopy -cerebrose -cerebrosensorial -cerebroside -cerebrosis -cerebrospinal -cerebrospinant -cerebrosuria -cerebrotomy -cerebrotonia -cerebrotonic -cerebrovisceral -cerebrum -cerecloth -cered -cereless -cerement -ceremonial -ceremonialism -ceremonialist -ceremonialize -ceremonially -ceremonious -ceremoniously -ceremoniousness -ceremony -cereous -cerer -ceresin -cerevis -ceria -cerianthid -cerianthoid -ceric -ceride -ceriferous -cerigerous -cerillo -ceriman -cerin -cerine -ceriops -cerise -cerite -cerithioid -cerium -cermet -cern -cerniture -cernuous -cero -cerograph -cerographic -cerographist -cerography -ceroline -cerolite -ceroma -ceromancy -cerophilous -ceroplast -ceroplastic -ceroplastics -ceroplasty -cerotate -cerote -cerotene -cerotic -cerotin -cerotype -cerous -ceroxyle -cerrero -cerrial -cerris -certain -certainly -certainty -certie -certifiable -certifiableness -certifiably -certificate -certification -certificative -certificator -certificatory -certified -certifier -certify -certiorari -certiorate -certioration -certis -certitude -certosina -certosino -certy -cerule -cerulean -cerulein -ceruleite -ceruleolactite -ceruleous -cerulescent -ceruleum -cerulignol -cerulignone -cerumen -ceruminal -ceruminiferous -ceruminous -cerumniparous -ceruse -cerussite -cervantite -cervical -cervicaprine -cervicectomy -cervicicardiac -cervicide -cerviciplex -cervicispinal -cervicitis -cervicoauricular -cervicoaxillary -cervicobasilar -cervicobrachial -cervicobregmatic -cervicobuccal -cervicodorsal -cervicodynia -cervicofacial -cervicohumeral -cervicolabial -cervicolingual -cervicolumbar -cervicomuscular -cerviconasal -cervicorn -cervicoscapular -cervicothoracic -cervicovaginal -cervicovesical -cervid -cervine -cervisia -cervisial -cervix -cervoid -cervuline -ceryl -cesarevitch -cesarolite -cesious -cesium -cespititous -cespitose -cespitosely -cespitulose -cess -cessantly -cessation -cessative -cessavit -cesser -cession -cessionaire -cessionary -cessor -cesspipe -cesspit -cesspool -cest -cestode -cestoid -cestoidean -cestraciont -cestrum -cestus -cetacean -cetaceous -cetaceum -cetane -cetene -ceterach -ceti -cetic -ceticide -cetin -cetiosaurian -cetological -cetologist -cetology -cetomorphic -cetonian -cetorhinid -cetorhinoid -cetotolite -cetraric -cetrarin -cetyl -cetylene -cetylic -cevadilla -cevadilline -cevadine -cevine -cevitamic -ceylanite -ceylonite -ceyssatite -cha -chaa -chab -chabasie -chabazite -chabot -chabouk -chabuk -chabutra -chacate -chachalaca -chack -chacker -chackle -chackler -chacma -chacona -chacte -chad -chadacryst -chaeta -chaetiferous -chaetodont -chaetodontid -chaetognath -chaetognathan -chaetognathous -chaetophoraceous -chaetophorous -chaetopod -chaetopodan -chaetopodous -chaetopterin -chaetosema -chaetotactic -chaetotaxy -chafe -chafer -chafery -chafewax -chafeweed -chaff -chaffcutter -chaffer -chafferer -chaffinch -chaffiness -chaffing -chaffingly -chaffless -chafflike -chaffman -chaffseed -chaffwax -chaffweed -chaffy -chaft -chafted -chagan -chagrin -chaguar -chagul -chahar -chai -chain -chainage -chained -chainer -chainette -chainless -chainlet -chainmaker -chainmaking -chainman -chainon -chainsmith -chainwale -chainwork -chair -chairer -chairless -chairmaker -chairmaking -chairman -chairmanship -chairmender -chairmending -chairwarmer -chairwoman -chais -chaise -chaiseless -chaitya -chaja -chaka -chakar -chakari -chakazi -chakdar -chakobu -chakra -chakram -chakravartin -chaksi -chal -chalaco -chalana -chalastic -chalaza -chalazal -chalaze -chalazian -chalaziferous -chalazion -chalazogam -chalazogamic -chalazogamy -chalazoidite -chalcanthite -chalcedonic -chalcedonous -chalcedony -chalcedonyx -chalchuite -chalcid -chalcidicum -chalcidid -chalcidiform -chalcidoid -chalcites -chalcocite -chalcograph -chalcographer -chalcographic -chalcographical -chalcographist -chalcography -chalcolite -chalcolithic -chalcomancy -chalcomenite -chalcon -chalcone -chalcophanite -chalcophyllite -chalcopyrite -chalcosiderite -chalcosine -chalcostibite -chalcotrichite -chalcotript -chalcus -chalder -chaldron -chalet -chalice -chaliced -chalicosis -chalicothere -chalicotheriid -chalicotherioid -chalinine -chalk -chalkcutter -chalker -chalkiness -chalklike -chalkography -chalkosideric -chalkstone -chalkstony -chalkworker -chalky -challah -challenge -challengeable -challengee -challengeful -challenger -challengingly -challie -challis -challote -chalmer -chalon -chalone -chalque -chalta -chalumeau -chalutz -chalutzim -chalybeate -chalybeous -chalybite -cham -chamaecranial -chamaeprosopic -chamaerrhine -chamal -chamar -chamber -chamberdeacon -chambered -chamberer -chambering -chamberlain -chamberlainry -chamberlainship -chamberlet -chamberleted -chamberletted -chambermaid -chamberwoman -chambray -chambrel -chambul -chamecephalic -chamecephalous -chamecephalus -chamecephaly -chameleon -chameleonic -chameleonize -chameleonlike -chamfer -chamferer -chamfron -chamisal -chamiso -chamite -chamma -chamois -chamoisite -chamoline -champ -champac -champaca -champacol -champagne -champagneless -champagnize -champaign -champain -champaka -champer -champertor -champertous -champerty -champignon -champion -championess -championize -championless -championlike -championship -champleve -champy -chance -chanceful -chancefully -chancefulness -chancel -chanceled -chanceless -chancellery -chancellor -chancellorate -chancelloress -chancellorism -chancellorship -chancer -chancery -chancewise -chanche -chanchito -chanco -chancre -chancriform -chancroid -chancroidal -chancrous -chancy -chandala -chandam -chandelier -chandi -chandler -chandleress -chandlering -chandlery -chandoo -chandu -chandul -chanfrin -chang -changa -changar -change -changeability -changeable -changeableness -changeably -changedale -changedness -changeful -changefully -changefulness -changeless -changelessly -changelessness -changeling -changement -changer -chank -chankings -channel -channelbill -channeled -channeler -channeling -channelization -channelize -channelled -channeller -channelling -channelwards -channer -chanson -chansonnette -chanst -chant -chantable -chanter -chanterelle -chantership -chantey -chanteyman -chanticleer -chanting -chantingly -chantlate -chantress -chantry -chao -chaogenous -chaology -chaos -chaotic -chaotical -chaotically -chaoticness -chap -chapah -chaparral -chaparro -chapatty -chapbook -chape -chapeau -chapeaux -chaped -chapel -chapeless -chapelet -chapelgoer -chapelgoing -chapellage -chapellany -chapelman -chapelmaster -chapelry -chapelward -chaperno -chaperon -chaperonage -chaperone -chaperonless -chapfallen -chapin -chapiter -chapitral -chaplain -chaplaincy -chaplainry -chaplainship -chapless -chaplet -chapleted -chapman -chapmanship -chapournet -chapournetted -chappaul -chapped -chapper -chappie -chappin -chapping -chappow -chappy -chaps -chapt -chaptalization -chaptalize -chapter -chapteral -chapterful -chapwoman -char -charabanc -charabancer -charac -characeous -characetum -characin -characine -characinid -characinoid -character -characterful -characterial -characterical -characterism -characterist -characteristic -characteristical -characteristically -characteristicalness -characteristicness -characterizable -characterization -characterize -characterizer -characterless -characterlessness -characterological -characterologist -characterology -charactery -charade -charadriiform -charadrine -charadrioid -charas -charbon -charcoal -charcoaly -charcutier -chard -chardock -chare -charer -charet -charette -charge -chargeability -chargeable -chargeableness -chargeably -chargee -chargeless -chargeling -chargeman -charger -chargeship -charging -charier -charily -chariness -chariot -charioted -chariotee -charioteer -charioteership -chariotlike -chariotman -chariotry -chariotway -charism -charisma -charismatic -charisticary -charitable -charitableness -charitably -charity -charityless -charivari -chark -charka -charkha -charkhana -charlady -charlatan -charlatanic -charlatanical -charlatanically -charlatanish -charlatanism -charlatanistic -charlatanry -charlatanship -charlock -charm -charmedly -charmel -charmer -charmful -charmfully -charmfulness -charming -charmingly -charmingness -charmless -charmlessly -charmwise -charnel -charnockite -charpit -charpoy -charqued -charqui -charr -charry -charshaf -charsingha -chart -chartaceous -charter -charterable -charterage -chartered -charterer -charterhouse -charterless -chartermaster -charthouse -charting -chartist -chartless -chartographist -chartology -chartometer -chartophylax -chartreuse -chartroom -chartula -chartulary -charuk -charwoman -chary -chasable -chase -chaseable -chaser -chasing -chasm -chasma -chasmal -chasmed -chasmic -chasmogamic -chasmogamous -chasmogamy -chasmophyte -chasmy -chasse -chassepot -chasseur -chassignite -chassis -chaste -chastely -chasten -chastener -chasteness -chasteningly -chastenment -chasteweed -chastisable -chastise -chastisement -chastiser -chastity -chasuble -chasubled -chat -chataka -chateau -chateaux -chatelain -chatelaine -chatelainry -chatellany -chathamite -chati -chatoyance -chatoyancy -chatoyant -chatsome -chatta -chattable -chattation -chattel -chattelhood -chattelism -chattelization -chattelize -chattelship -chatter -chatteration -chatterbag -chatterbox -chatterer -chattering -chatteringly -chattermag -chattermagging -chattery -chattily -chattiness -chatting -chattingly -chatty -chatwood -chaudron -chauffer -chauffeur -chauffeurship -chauk -chaukidari -chaulmoogra -chaulmoograte -chaulmoogric -chaus -chausseemeile -chaute -chauth -chauvinism -chauvinist -chauvinistic -chauvinistically -chavender -chavibetol -chavicin -chavicine -chavicol -chavish -chaw -chawan -chawbacon -chawer -chawk -chawl -chawstick -chay -chaya -chayaroot -chayote -chayroot -chazan -che -cheap -cheapen -cheapener -cheapery -cheaping -cheapish -cheaply -cheapness -cheat -cheatable -cheatableness -cheatee -cheater -cheatery -cheating -cheatingly -cheatrie -chebec -chebel -chebog -chebule -chebulinic -check -checkable -checkage -checkbird -checkbite -checkbook -checked -checker -checkerbelly -checkerberry -checkerbloom -checkerboard -checkerbreast -checkered -checkerist -checkers -checkerwise -checkerwork -checkhook -checkless -checkman -checkmate -checkoff -checkrack -checkrein -checkroll -checkroom -checkrope -checkrow -checkrowed -checkrower -checkstone -checkstrap -checkstring -checkup -checkweigher -checkwork -checky -cheddaring -cheddite -cheder -chedlock -chee -cheecha -cheechako -cheek -cheekbone -cheeker -cheekily -cheekiness -cheekish -cheekless -cheekpiece -cheeky -cheep -cheeper -cheepily -cheepiness -cheepy -cheer -cheered -cheerer -cheerful -cheerfulize -cheerfully -cheerfulness -cheerfulsome -cheerily -cheeriness -cheering -cheeringly -cheerio -cheerleader -cheerless -cheerlessly -cheerlessness -cheerly -cheery -cheese -cheeseboard -cheesebox -cheeseburger -cheesecake -cheesecloth -cheesecurd -cheesecutter -cheeseflower -cheeselip -cheesemonger -cheesemongering -cheesemongerly -cheesemongery -cheeseparer -cheeseparing -cheeser -cheesery -cheesewood -cheesiness -cheesy -cheet -cheetah -cheeter -cheetie -chef -chegoe -chegre -cheilitis -cheilostomatous -cheir -cheiragra -cheirognomy -cheirography -cheirolin -cheirology -cheiromancy -cheiromegaly -cheiropatagium -cheiropodist -cheiropody -cheiropompholyx -cheiropterygium -cheirosophy -cheirospasm -chekan -cheke -cheki -chekmak -chela -chelaship -chelate -chelation -chelem -chelerythrine -chelicer -chelicera -cheliceral -chelicerate -chelicere -chelide -chelidon -chelidonate -chelidonian -chelidonic -chelidonine -cheliferous -cheliform -chelingo -cheliped -chello -chelodine -chelone -chelonian -chelonid -cheloniid -chelonin -chelophore -chelp -chelydroid -chelys -chemasthenia -chemawinite -chemesthesis -chemiatric -chemiatrist -chemiatry -chemic -chemical -chemicalization -chemicalize -chemically -chemicker -chemicoastrological -chemicobiologic -chemicobiology -chemicocautery -chemicodynamic -chemicoengineering -chemicoluminescence -chemicomechanical -chemicomineralogical -chemicopharmaceutical -chemicophysical -chemicophysics -chemicophysiological -chemicovital -chemigraph -chemigraphic -chemigraphy -chemiloon -chemiluminescence -chemiotactic -chemiotaxic -chemiotaxis -chemiotropic -chemiotropism -chemiphotic -chemis -chemise -chemisette -chemism -chemisorb -chemisorption -chemist -chemistry -chemitype -chemitypy -chemoceptor -chemokinesis -chemokinetic -chemolysis -chemolytic -chemolyze -chemoreception -chemoreceptor -chemoreflex -chemoresistance -chemoserotherapy -chemosis -chemosmosis -chemosmotic -chemosynthesis -chemosynthetic -chemotactic -chemotactically -chemotaxis -chemotaxy -chemotherapeutic -chemotherapeutics -chemotherapist -chemotherapy -chemotic -chemotropic -chemotropically -chemotropism -chemurgic -chemurgical -chemurgy -chena -chende -chenevixite -cheng -chenica -chenille -cheniller -chenopod -chenopodiaceous -cheoplastic -chepster -cheque -chercock -cherem -cherimoya -cherish -cherishable -cherisher -cherishing -cherishingly -cherishment -chernozem -cheroot -cherried -cherry -cherryblossom -cherrylike -chersonese -chert -cherte -cherty -cherub -cherubic -cherubical -cherubically -cherubim -cherubimic -cherubimical -cherubin -chervil -chervonets -cheson -chess -chessboard -chessdom -chessel -chesser -chessist -chessman -chessmen -chesstree -chessylite -chest -chester -chesterfield -chesterlite -chestful -chestily -chestiness -chestnut -chestnutty -chesty -cheth -chettik -chetty -chetverik -chetvert -chevage -cheval -chevalier -chevaline -chevance -cheve -cheven -chevener -chevesaile -chevin -chevisance -chevise -chevon -chevrette -chevron -chevrone -chevronel -chevronelly -chevronwise -chevrony -chevrotain -chevy -chew -chewbark -chewer -chewink -chewstick -chewy -cheyney -chhatri -chi -chia -chiaroscurist -chiaroscuro -chiasm -chiasma -chiasmal -chiasmatype -chiasmatypy -chiasmic -chiasmodontid -chiasmus -chiastic -chiastolite -chiastoneural -chiastoneurous -chiastoneury -chiaus -chibinite -chibouk -chibrit -chic -chicane -chicaner -chicanery -chicaric -chicayote -chichi -chichicaste -chichimecan -chichipate -chichipe -chichituna -chick -chickabiddy -chickadee -chickaree -chickasaw -chickell -chicken -chickenberry -chickenbill -chickenbreasted -chickenhearted -chickenheartedly -chickenheartedness -chickenhood -chickenweed -chickenwort -chicker -chickhood -chickling -chickstone -chickweed -chickwit -chicky -chicle -chicness -chico -chicory -chicot -chicote -chicqued -chicquer -chicquest -chicquing -chid -chidden -chide -chider -chiding -chidingly -chidingness -chidra -chief -chiefdom -chiefery -chiefess -chiefest -chiefish -chiefless -chiefling -chiefly -chiefship -chieftain -chieftaincy -chieftainess -chieftainry -chieftainship -chieftess -chield -chien -chiffer -chiffon -chiffonade -chiffonier -chiffony -chifforobe -chigetai -chiggak -chigger -chiggerweed -chignon -chignoned -chigoe -chih -chihfu -chikara -chil -chilacavote -chilalgia -chilarium -chilblain -child -childbearing -childbed -childbirth -childcrowing -childe -childed -childhood -childing -childish -childishly -childishness -childkind -childless -childlessness -childlike -childlikeness -childly -childness -childrenite -childridden -childship -childward -chile -chilectropion -chilenite -chili -chiliad -chiliadal -chiliadic -chiliagon -chiliahedron -chiliarch -chiliarchia -chiliarchy -chiliasm -chiliast -chiliastic -chilicote -chilicothe -chilidium -chiliomb -chilitis -chill -chilla -chillagite -chilled -chiller -chillily -chilliness -chilling -chillingly -chillish -chillness -chillo -chillroom -chillsome -chillum -chillumchee -chilly -chilognath -chilognathan -chilognathous -chilogrammo -chiloma -chiloncus -chiloplasty -chilopod -chilopodan -chilopodous -chilostomatous -chilostome -chilotomy -chilver -chimaera -chimaerid -chimaeroid -chimango -chimble -chime -chimer -chimera -chimeric -chimerical -chimerically -chimericalness -chimesmaster -chiminage -chimney -chimneyhead -chimneyless -chimneyman -chimopeelagic -chimpanzee -chin -china -chinaberry -chinalike -chinamania -chinamaniac -chinampa -chinanta -chinaphthol -chinar -chinaroot -chinaware -chinawoman -chinband -chinch -chincha -chinchayote -chinche -chincherinchee -chinchilla -chinching -chincloth -chincough -chine -chined -ching -chingma -chinik -chinin -chink -chinkara -chinker -chinkerinchee -chinking -chinkle -chinks -chinky -chinless -chinnam -chinned -chinny -chino -chinoa -chinol -chinotoxine -chinotti -chinpiece -chinquapin -chinse -chint -chintz -chinwood -chiococcine -chiolite -chionablepsia -chiotilla -chip -chipchap -chipchop -chiplet -chipling -chipmunk -chippable -chippage -chipped -chipper -chipping -chippy -chips -chipwood -chiragra -chiral -chiralgia -chirality -chirapsia -chirarthritis -chirata -chirimen -chirinola -chiripa -chirivita -chirk -chirm -chiro -chirocosmetics -chirogale -chirognomic -chirognomically -chirognomist -chirognomy -chirognostic -chirograph -chirographary -chirographer -chirographic -chirographical -chirography -chirogymnast -chirological -chirologically -chirologist -chirology -chiromance -chiromancer -chiromancist -chiromancy -chiromant -chiromantic -chiromantical -chiromegaly -chirometer -chironomic -chironomid -chironomy -chironym -chiropatagium -chiroplasty -chiropod -chiropodial -chiropodic -chiropodical -chiropodist -chiropodistry -chiropodous -chiropody -chiropompholyx -chiropractic -chiropractor -chiropraxis -chiropter -chiropteran -chiropterite -chiropterophilous -chiropterous -chiropterygian -chiropterygious -chiropterygium -chirosophist -chirospasm -chirotherian -chirothesia -chirotonsor -chirotonsory -chirotony -chirotype -chirp -chirper -chirpily -chirpiness -chirping -chirpingly -chirpling -chirpy -chirr -chirrup -chirruper -chirrupy -chirurgeon -chirurgery -chisel -chiseled -chiseler -chisellike -chiselly -chiselmouth -chit -chitak -chital -chitchat -chitchatty -chitin -chitinization -chitinized -chitinocalcareous -chitinogenous -chitinoid -chitinous -chiton -chitosamine -chitosan -chitose -chitra -chittamwood -chitter -chitterling -chitty -chivalresque -chivalric -chivalrous -chivalrously -chivalrousness -chivalry -chive -chivey -chiviatite -chkalik -chladnite -chlamyd -chlamydate -chlamydeous -chlamydobacteriaceous -chlamydospore -chlamydozoan -chlamyphore -chlamys -chloanthite -chloasma -chlor -chloracetate -chloragogen -chloral -chloralformamide -chloralide -chloralism -chloralization -chloralize -chloralose -chloralum -chloramide -chloramine -chloramphenicol -chloranemia -chloranemic -chloranhydride -chloranil -chloranthaceous -chloranthy -chlorapatite -chlorastrolite -chlorate -chlorazide -chlorcosane -chlordan -chlordane -chlore -chlorellaceous -chloremia -chlorenchyma -chlorhydrate -chlorhydric -chloric -chloridate -chloridation -chloride -chlorider -chloridize -chlorimeter -chlorimetric -chlorimetry -chlorinate -chlorination -chlorinator -chlorine -chlorinize -chlorinous -chloriodide -chlorite -chloritic -chloritization -chloritize -chloritoid -chlorize -chlormethane -chlormethylic -chloroacetate -chloroacetic -chloroacetone -chloroacetophenone -chloroamide -chloroamine -chloroanaemia -chloroanemia -chloroaurate -chloroauric -chloroaurite -chlorobenzene -chlorobromide -chlorocalcite -chlorocarbonate -chlorochromates -chlorochromic -chlorochrous -chlorocresol -chlorocruorin -chlorodize -chloroform -chloroformate -chloroformic -chloroformism -chloroformist -chloroformization -chloroformize -chlorogenic -chlorogenine -chlorohydrin -chlorohydrocarbon -chloroiodide -chloroleucite -chloroma -chloromelanite -chlorometer -chloromethane -chlorometric -chlorometry -chloronitrate -chloropal -chloropalladates -chloropalladic -chlorophane -chlorophenol -chlorophoenicite -chlorophyceous -chlorophyl -chlorophyll -chlorophyllaceous -chlorophyllan -chlorophyllase -chlorophyllian -chlorophyllide -chlorophylliferous -chlorophylligenous -chlorophylligerous -chlorophyllin -chlorophyllite -chlorophylloid -chlorophyllose -chlorophyllous -chloropia -chloropicrin -chloroplast -chloroplastic -chloroplastid -chloroplatinate -chloroplatinic -chloroplatinite -chloroplatinous -chloroprene -chloropsia -chloroquine -chlorosilicate -chlorosis -chlorospinel -chlorosulphonic -chlorotic -chlorous -chlorozincate -chlorsalol -chloryl -cho -choachyte -choana -choanate -choanocytal -choanocyte -choanoflagellate -choanoid -choanophorous -choanosomal -choanosome -choate -choaty -chob -choca -chocard -chocho -chock -chockablock -chocker -chockler -chockman -chocolate -choel -choenix -choffer -choga -chogak -chogset -choice -choiceful -choiceless -choicelessness -choicely -choiceness -choicy -choil -choiler -choir -choirboy -choirlike -choirman -choirmaster -choirwise -chokage -choke -chokeberry -chokebore -chokecherry -chokedamp -choker -chokered -chokerman -chokestrap -chokeweed -chokidar -choking -chokingly -chokra -choky -chol -chola -cholagogic -cholagogue -cholalic -cholane -cholangioitis -cholangitis -cholanic -cholanthrene -cholate -chold -choleate -cholecyanine -cholecyst -cholecystalgia -cholecystectasia -cholecystectomy -cholecystenterorrhaphy -cholecystenterostomy -cholecystgastrostomy -cholecystic -cholecystitis -cholecystnephrostomy -cholecystocolostomy -cholecystocolotomy -cholecystoduodenostomy -cholecystogastrostomy -cholecystogram -cholecystography -cholecystoileostomy -cholecystojejunostomy -cholecystokinin -cholecystolithiasis -cholecystolithotripsy -cholecystonephrostomy -cholecystopexy -cholecystorrhaphy -cholecystostomy -cholecystotomy -choledoch -choledochal -choledochectomy -choledochitis -choledochoduodenostomy -choledochoenterostomy -choledocholithiasis -choledocholithotomy -choledocholithotripsy -choledochoplasty -choledochorrhaphy -choledochostomy -choledochotomy -cholehematin -choleic -choleine -choleinic -cholelith -cholelithiasis -cholelithic -cholelithotomy -cholelithotripsy -cholelithotrity -cholemia -choleokinase -cholepoietic -choler -cholera -choleraic -choleric -cholericly -cholericness -choleriform -cholerigenous -cholerine -choleroid -choleromania -cholerophobia -cholerrhagia -cholestane -cholestanol -cholesteatoma -cholesteatomatous -cholestene -cholesterate -cholesteremia -cholesteric -cholesterin -cholesterinemia -cholesterinic -cholesterinuria -cholesterol -cholesterolemia -cholesteroluria -cholesterosis -cholesteryl -choletelin -choletherapy -choleuria -choli -choliamb -choliambic -choliambist -cholic -choline -cholinergic -cholinesterase -cholinic -cholla -choller -cholochrome -cholocyanine -chologenetic -choloidic -choloidinic -chololith -chololithic -cholophein -cholorrhea -choloscopy -cholterheaded -cholum -choluria -chomp -chondral -chondralgia -chondrarsenite -chondre -chondrectomy -chondrenchyma -chondric -chondrification -chondrify -chondrigen -chondrigenous -chondrin -chondrinous -chondriocont -chondriome -chondriomere -chondriomite -chondriosomal -chondriosome -chondriosphere -chondrite -chondritic -chondritis -chondroadenoma -chondroalbuminoid -chondroangioma -chondroarthritis -chondroblast -chondroblastoma -chondrocarcinoma -chondrocele -chondroclasis -chondroclast -chondrocoracoid -chondrocostal -chondrocranial -chondrocranium -chondrocyte -chondrodite -chondroditic -chondrodynia -chondrodystrophia -chondrodystrophy -chondroendothelioma -chondroepiphysis -chondrofetal -chondrofibroma -chondrofibromatous -chondrogen -chondrogenesis -chondrogenetic -chondrogenous -chondrogeny -chondroglossal -chondroglossus -chondrography -chondroid -chondroitic -chondroitin -chondrolipoma -chondrology -chondroma -chondromalacia -chondromatous -chondromucoid -chondromyoma -chondromyxoma -chondromyxosarcoma -chondropharyngeal -chondropharyngeus -chondrophore -chondrophyte -chondroplast -chondroplastic -chondroplasty -chondroprotein -chondropterygian -chondropterygious -chondrosamine -chondrosarcoma -chondrosarcomatous -chondroseptum -chondrosin -chondrosis -chondroskeleton -chondrostean -chondrosteoma -chondrosteous -chondrosternal -chondrotome -chondrotomy -chondroxiphoid -chondrule -chondrus -chonolith -chonta -chontawood -choop -choosable -choosableness -choose -chooser -choosing -choosingly -choosy -chop -chopa -chopboat -chopfallen -chophouse -chopin -chopine -choplogic -chopped -chopper -choppered -chopping -choppy -chopstick -choragic -choragion -choragium -choragus -choragy -choral -choralcelo -choraleon -choralist -chorally -chord -chorda -chordacentrous -chordacentrum -chordaceous -chordal -chordally -chordamesoderm -chordate -chorded -chorditis -chordoid -chordomesoderm -chordotomy -chordotonal -chore -chorea -choreal -choreatic -choree -choregic -choregus -choregy -choreic -choreiform -choreograph -choreographer -choreographic -choreographical -choreography -choreoid -choreomania -chorepiscopal -chorepiscopus -choreus -choreutic -chorial -choriamb -choriambic -choriambize -choriambus -choric -chorine -chorioadenoma -chorioallantoic -chorioallantoid -chorioallantois -choriocapillaris -choriocapillary -choriocarcinoma -choriocele -chorioepithelioma -chorioid -chorioidal -chorioiditis -chorioidocyclitis -chorioidoiritis -chorioidoretinitis -chorioma -chorion -chorionepithelioma -chorionic -chorioptic -chorioretinal -chorioretinitis -choripetalous -choriphyllous -chorisepalous -chorisis -chorism -chorist -choristate -chorister -choristership -choristic -choristoblastoma -choristoma -choristry -chorization -chorizont -chorizontal -chorizontes -chorizontic -chorizontist -chorogi -chorograph -chorographer -chorographic -chorographical -chorographically -chorography -choroid -choroidal -choroidea -choroiditis -choroidocyclitis -choroidoiritis -choroidoretinitis -chorological -chorologist -chorology -choromania -choromanic -chorometry -chorook -chort -chorten -chortle -chortler -chortosterol -chorus -choruser -choruslike -choryos -chose -chosen -chott -chouette -chough -chouka -choultry -choup -chouquette -chous -chouse -chouser -chousingha -chow -chowchow -chowder -chowderhead -chowderheaded -chowk -chowry -choya -choyroot -chrematheism -chrematist -chrematistic -chrematistics -chreotechnics -chresmology -chrestomathic -chrestomathics -chrestomathy -chria -chrimsel -chrism -chrisma -chrismal -chrismary -chrismatine -chrismation -chrismatite -chrismatize -chrismatory -chrismon -chrisom -chrisomloosing -chrisroot -christcross -christen -christened -christener -christening -christianite -chroatol -chroma -chromaffin -chromaffinic -chromammine -chromaphil -chromaphore -chromascope -chromate -chromatic -chromatical -chromatically -chromatician -chromaticism -chromaticity -chromatics -chromatid -chromatin -chromatinic -chromatism -chromatist -chromatize -chromatocyte -chromatodysopia -chromatogenous -chromatogram -chromatograph -chromatographic -chromatography -chromatoid -chromatology -chromatolysis -chromatolytic -chromatometer -chromatone -chromatopathia -chromatopathic -chromatopathy -chromatophil -chromatophile -chromatophilia -chromatophilic -chromatophilous -chromatophobia -chromatophore -chromatophoric -chromatophorous -chromatoplasm -chromatopsia -chromatoptometer -chromatoptometry -chromatoscope -chromatoscopy -chromatosis -chromatosphere -chromatospheric -chromatrope -chromaturia -chromatype -chromazurine -chromdiagnosis -chrome -chromene -chromesthesia -chromic -chromicize -chromid -chromidial -chromidiogamy -chromidiosome -chromidium -chromidrosis -chromiferous -chromiole -chromism -chromite -chromitite -chromium -chromo -chromoblast -chromocenter -chromocentral -chromochalcographic -chromochalcography -chromocollograph -chromocollographic -chromocollography -chromocollotype -chromocollotypy -chromocratic -chromocyte -chromocytometer -chromodermatosis -chromodiascope -chromogen -chromogene -chromogenesis -chromogenetic -chromogenic -chromogenous -chromogram -chromograph -chromoisomer -chromoisomeric -chromoisomerism -chromoleucite -chromolipoid -chromolith -chromolithic -chromolithograph -chromolithographer -chromolithographic -chromolithography -chromolysis -chromomere -chromometer -chromone -chromonema -chromoparous -chromophage -chromophane -chromophile -chromophilic -chromophilous -chromophobic -chromophore -chromophoric -chromophorous -chromophotograph -chromophotographic -chromophotography -chromophotolithograph -chromophyll -chromoplasm -chromoplasmic -chromoplast -chromoplastid -chromoprotein -chromopsia -chromoptometer -chromoptometrical -chromosantonin -chromoscope -chromoscopic -chromoscopy -chromosomal -chromosome -chromosphere -chromospheric -chromotherapist -chromotherapy -chromotrope -chromotropic -chromotropism -chromotropy -chromotype -chromotypic -chromotypographic -chromotypography -chromotypy -chromous -chromoxylograph -chromoxylography -chromule -chromy -chromyl -chronal -chronanagram -chronaxia -chronaxie -chronaxy -chronic -chronical -chronically -chronicity -chronicle -chronicler -chronicon -chronisotherm -chronist -chronobarometer -chronocinematography -chronocrator -chronocyclegraph -chronodeik -chronogeneous -chronogenesis -chronogenetic -chronogram -chronogrammatic -chronogrammatical -chronogrammatically -chronogrammatist -chronogrammic -chronograph -chronographer -chronographic -chronographical -chronographically -chronography -chronoisothermal -chronologer -chronologic -chronological -chronologically -chronologist -chronologize -chronology -chronomancy -chronomantic -chronometer -chronometric -chronometrical -chronometrically -chronometry -chrononomy -chronopher -chronophotograph -chronophotographic -chronophotography -chronoscope -chronoscopic -chronoscopically -chronoscopy -chronosemic -chronostichon -chronothermal -chronothermometer -chronotropic -chronotropism -chroococcaceous -chroococcoid -chrotta -chrysal -chrysalid -chrysalidal -chrysalides -chrysalidian -chrysaline -chrysalis -chrysaloid -chrysamine -chrysammic -chrysamminic -chrysaniline -chrysanisic -chrysanthemin -chrysanthemum -chrysanthous -chrysarobin -chrysatropic -chrysazin -chrysazol -chryselectrum -chryselephantine -chrysene -chrysenic -chrysid -chrysidid -chrysin -chrysoaristocracy -chrysoberyl -chrysobull -chrysocarpous -chrysochlore -chrysochlorous -chrysochrous -chrysocolla -chrysocracy -chrysoeriol -chrysogen -chrysograph -chrysographer -chrysography -chrysohermidin -chrysoidine -chrysolite -chrysolitic -chrysology -chrysomelid -chrysomonad -chrysomonadine -chrysopal -chrysopee -chrysophan -chrysophanic -chrysophenine -chrysophilist -chrysophilite -chrysophyll -chrysopid -chrysopoeia -chrysopoetic -chrysopoetics -chrysoprase -chrysorin -chrysosperm -chrysotile -chrystocrene -chthonian -chthonic -chthonophagia -chthonophagy -chub -chubbed -chubbedness -chubbily -chubbiness -chubby -chuck -chucker -chuckhole -chuckies -chucking -chuckingly -chuckle -chucklehead -chuckleheaded -chuckler -chucklingly -chuckrum -chuckstone -chuckwalla -chucky -chuddar -chufa -chuff -chuffy -chug -chugger -chuhra -chukar -chukker -chukor -chulan -chullpa -chum -chummage -chummer -chummery -chummily -chummy -chump -chumpaka -chumpish -chumpishness -chumpy -chumship -chun -chunari -chunga -chunk -chunkhead -chunkily -chunkiness -chunky -chunner -chunnia -chunter -chupak -chupon -chuprassie -chuprassy -church -churchanity -churchcraft -churchdom -churchful -churchgoer -churchgoing -churchgrith -churchianity -churchified -churchiness -churching -churchish -churchism -churchite -churchless -churchlet -churchlike -churchliness -churchly -churchman -churchmanly -churchmanship -churchmaster -churchscot -churchward -churchwarden -churchwardenism -churchwardenize -churchwardenship -churchwards -churchway -churchwise -churchwoman -churchy -churchyard -churel -churinga -churl -churled -churlhood -churlish -churlishly -churlishness -churly -churm -churn -churnability -churnful -churning -churnmilk -churnstaff -churr -churruck -churrus -churrworm -chut -chute -chuter -chutney -chyack -chyak -chylaceous -chylangioma -chylaqueous -chyle -chylemia -chylidrosis -chylifaction -chylifactive -chylifactory -chyliferous -chylific -chylification -chylificatory -chyliform -chylify -chylocaulous -chylocauly -chylocele -chylocyst -chyloid -chylomicron -chylopericardium -chylophyllous -chylophylly -chylopoiesis -chylopoietic -chylosis -chylothorax -chylous -chyluria -chymaqueous -chymase -chyme -chymia -chymic -chymiferous -chymification -chymify -chymosin -chymosinogen -chymotrypsin -chymotrypsinogen -chymous -chypre -chytra -chytrid -chytridiaceous -chytridial -chytridiose -chytridiosis -cibarial -cibarian -cibarious -cibation -cibol -cibophobia -ciborium -cibory -ciboule -cicad -cicada -cicadid -cicala -cicatrice -cicatrices -cicatricial -cicatricle -cicatricose -cicatricula -cicatricule -cicatrisive -cicatrix -cicatrizant -cicatrizate -cicatrization -cicatrize -cicatrizer -cicatrose -cicely -cicer -ciceronage -cicerone -ciceroni -ciceronism -ciceronize -cichlid -cichloid -cichoraceous -cichoriaceous -cicindelid -cicindelidae -cicisbeism -ciclatoun -ciconian -ciconiid -ciconiiform -ciconine -ciconioid -cicutoxin -cidarid -cidaris -cider -ciderish -ciderist -ciderkin -cig -cigala -cigar -cigaresque -cigarette -cigarfish -cigarillo -cigarito -cigarless -cigua -ciguatera -cilectomy -cilia -ciliary -ciliate -ciliated -ciliately -ciliation -cilice -cilicious -ciliella -ciliferous -ciliform -ciliiferous -ciliiform -cilioflagellate -ciliograde -ciliolate -ciliolum -cilioretinal -cilioscleral -ciliospinal -ciliotomy -cilium -cillosis -cimbia -cimelia -cimex -cimicid -cimicide -cimiciform -cimicifugin -cimicoid -ciminite -cimline -cimolite -cinch -cincher -cincholoipon -cincholoiponic -cinchomeronic -cinchonaceous -cinchonamine -cinchonate -cinchonia -cinchonic -cinchonicine -cinchonidia -cinchonidine -cinchonine -cinchoninic -cinchonism -cinchonization -cinchonize -cinchonology -cinchophen -cinchotine -cinchotoxine -cincinnal -cincinnus -cinclis -cinct -cincture -cinder -cinderlike -cinderman -cinderous -cindery -cine -cinecamera -cinefilm -cinel -cinema -cinematic -cinematical -cinematically -cinematize -cinematograph -cinematographer -cinematographic -cinematographical -cinematographically -cinematographist -cinematography -cinemelodrama -cinemize -cinemograph -cinenchyma -cinenchymatous -cinene -cinenegative -cineole -cineolic -cinephone -cinephotomicrography -cineplastics -cineplasty -cineraceous -cinerarium -cinerary -cineration -cinerator -cinerea -cinereal -cinereous -cineritious -cinevariety -cingle -cingular -cingulate -cingulated -cingulum -cinnabar -cinnabaric -cinnabarine -cinnamal -cinnamaldehyde -cinnamate -cinnamein -cinnamene -cinnamenyl -cinnamic -cinnamol -cinnamomic -cinnamon -cinnamoned -cinnamonic -cinnamonlike -cinnamonroot -cinnamonwood -cinnamyl -cinnamylidene -cinnoline -cinnyl -cinquain -cinque -cinquecentism -cinquecentist -cinquecento -cinquefoil -cinquefoiled -cinquepace -cinter -cinuran -cinurous -cion -cionectomy -cionitis -cionocranial -cionocranian -cionoptosis -cionorrhaphia -cionotome -cionotomy -cipher -cipherable -cipherdom -cipherer -cipherhood -cipo -cipolin -cippus -circa -circinal -circinate -circinately -circination -circiter -circle -circled -circler -circlet -circlewise -circling -circovarian -circuit -circuitable -circuital -circuiteer -circuiter -circuition -circuitman -circuitor -circuitous -circuitously -circuitousness -circuity -circulable -circulant -circular -circularism -circularity -circularization -circularize -circularizer -circularly -circularness -circularwise -circulate -circulation -circulative -circulator -circulatory -circumagitate -circumagitation -circumambages -circumambagious -circumambience -circumambiency -circumambient -circumambulate -circumambulation -circumambulator -circumambulatory -circumanal -circumantarctic -circumarctic -circumarticular -circumaviate -circumaviation -circumaviator -circumaxial -circumaxile -circumaxillary -circumbasal -circumbendibus -circumboreal -circumbuccal -circumbulbar -circumcallosal -circumcenter -circumcentral -circumcinct -circumcincture -circumcircle -circumcise -circumciser -circumcision -circumclude -circumclusion -circumcolumnar -circumcone -circumconic -circumcorneal -circumcrescence -circumcrescent -circumdenudation -circumdiction -circumduce -circumduct -circumduction -circumesophagal -circumesophageal -circumference -circumferential -circumferentially -circumferentor -circumflant -circumflect -circumflex -circumflexion -circumfluence -circumfluent -circumfluous -circumforaneous -circumfulgent -circumfuse -circumfusile -circumfusion -circumgenital -circumgyrate -circumgyration -circumgyratory -circumhorizontal -circumincession -circuminsession -circuminsular -circumintestinal -circumitineration -circumjacence -circumjacency -circumjacent -circumlental -circumlitio -circumlittoral -circumlocute -circumlocution -circumlocutional -circumlocutionary -circumlocutionist -circumlocutory -circummeridian -circummeridional -circummigration -circummundane -circummure -circumnatant -circumnavigable -circumnavigate -circumnavigation -circumnavigator -circumnavigatory -circumneutral -circumnuclear -circumnutate -circumnutation -circumnutatory -circumocular -circumoesophagal -circumoral -circumorbital -circumpacific -circumpallial -circumparallelogram -circumpentagon -circumplicate -circumplication -circumpolar -circumpolygon -circumpose -circumposition -circumradius -circumrenal -circumrotate -circumrotation -circumrotatory -circumsail -circumscissile -circumscribable -circumscribe -circumscribed -circumscriber -circumscript -circumscription -circumscriptive -circumscriptively -circumscriptly -circumsinous -circumspangle -circumspatial -circumspect -circumspection -circumspective -circumspectively -circumspectly -circumspectness -circumspheral -circumstance -circumstanced -circumstantiability -circumstantiable -circumstantial -circumstantiality -circumstantially -circumstantialness -circumstantiate -circumstantiation -circumtabular -circumterraneous -circumterrestrial -circumtonsillar -circumtropical -circumumbilical -circumundulate -circumundulation -circumvallate -circumvallation -circumvascular -circumvent -circumventer -circumvention -circumventive -circumventor -circumviate -circumvolant -circumvolute -circumvolution -circumvolutory -circumvolve -circumzenithal -circus -circusy -cirque -cirrate -cirrated -cirrhosed -cirrhosis -cirrhotic -cirrhous -cirri -cirribranch -cirriferous -cirriform -cirrigerous -cirrigrade -cirriped -cirripedial -cirrolite -cirropodous -cirrose -cirrous -cirrus -cirsectomy -cirsocele -cirsoid -cirsomphalos -cirsophthalmia -cirsotome -cirsotomy -ciruela -cirurgian -cisalpine -cisandine -cisatlantic -cisco -cise -cisele -cisgangetic -cisjurane -cisleithan -cismarine -cismontane -cisoceanic -cispadane -cisplatine -cispontine -cisrhenane -cissing -cissoid -cissoidal -cist -cista -cistaceous -cistae -cisted -cistern -cisterna -cisternal -cistic -cistophoric -cistophorus -cistvaen -cit -citable -citadel -citation -citator -citatory -cite -citee -citer -citess -cithara -citharist -citharista -citharoedi -citharoedic -citharoedus -cither -citied -citification -citified -citify -citigrade -citizen -citizendom -citizeness -citizenhood -citizenish -citizenism -citizenize -citizenly -citizenry -citizenship -citole -citraconate -citraconic -citral -citramide -citramontane -citrange -citrangeade -citrate -citrated -citrean -citrene -citreous -citric -citriculture -citriculturist -citril -citrin -citrination -citrine -citrinin -citrinous -citrometer -citron -citronade -citronella -citronellal -citronelle -citronellic -citronellol -citronin -citronwood -citropten -citrous -citrullin -citrus -citrylidene -cittern -citua -city -citycism -citydom -cityfolk -cityful -cityish -cityless -cityness -cityscape -cityward -citywards -cive -civet -civetlike -civetone -civic -civically -civicism -civics -civil -civilian -civility -civilizable -civilization -civilizational -civilizatory -civilize -civilized -civilizedness -civilizee -civilizer -civilly -civilness -civism -civvy -cixiid -clabber -clabbery -clachan -clack -clackdish -clacker -clacket -clackety -clad -cladanthous -cladautoicous -cladding -cladine -cladocarpous -cladoceran -cladocerous -cladode -cladodial -cladodont -cladodontid -cladogenous -cladoniaceous -cladonioid -cladophoraceous -cladophyll -cladophyllum -cladoptosis -cladose -cladoselachian -cladosiphonic -cladus -clag -claggum -claggy -claim -claimable -claimant -claimer -claimless -clairaudience -clairaudient -clairaudiently -clairce -clairecole -clairecolle -clairschach -clairschacher -clairsentience -clairsentient -clairvoyance -clairvoyancy -clairvoyant -clairvoyantly -claith -claithes -claiver -clam -clamant -clamantly -clamative -clamatorial -clamatory -clamb -clambake -clamber -clamberer -clamcracker -clame -clamer -clammed -clammer -clammily -clamminess -clamming -clammish -clammy -clammyweed -clamor -clamorer -clamorist -clamorous -clamorously -clamorousness -clamorsome -clamp -clamper -clamshell -clamworm -clan -clancular -clancularly -clandestine -clandestinely -clandestineness -clandestinity -clanfellow -clang -clangful -clangingly -clangor -clangorous -clangorously -clanjamfray -clanjamfrey -clanjamfrie -clanjamphrey -clank -clankety -clanking -clankingly -clankingness -clankless -clanless -clanned -clanning -clannishly -clannishness -clansfolk -clanship -clansman -clansmanship -clanswoman -clap -clapboard -clapbread -clapmatch -clapnet -clapped -clapper -clapperclaw -clapperclawer -clapperdudgeon -clappermaclaw -clapping -clapt -claptrap -clapwort -claque -claquer -clarabella -clarain -clarendon -claret -claribella -clarifiant -clarification -clarifier -clarify -clarigation -clarin -clarinet -clarinetist -clarinettist -clarion -clarionet -clarity -clark -clarkeite -claro -clarshech -clart -clarty -clary -clash -clasher -clashingly -clashy -clasmatocyte -clasmatosis -clasp -clasper -clasping -claspt -class -classable -classbook -classed -classer -classes -classfellow -classic -classical -classicalism -classicalist -classicality -classicalize -classically -classicalness -classicism -classicist -classicistic -classicize -classicolatry -classifiable -classific -classifically -classification -classificational -classificator -classificatory -classified -classifier -classis -classism -classman -classmanship -classmate -classroom -classwise -classwork -classy -clastic -clat -clatch -clathraceous -clathrarian -clathrate -clathroid -clathrose -clathrulate -clatter -clatterer -clatteringly -clattertrap -clattery -clatty -claudent -claudetite -claudicant -claudicate -claudication -claught -clausal -clause -clausthalite -claustra -claustral -claustration -claustrophobia -claustrum -clausula -clausular -clausule -clausure -claut -clava -clavacin -claval -clavariaceous -clavate -clavated -clavately -clavation -clave -clavecin -clavecinist -clavel -clavelization -clavelize -clavellate -clavellated -claver -clavial -claviature -clavicembalo -clavichord -clavichordist -clavicithern -clavicle -clavicorn -clavicornate -clavicotomy -clavicular -clavicularium -claviculate -claviculus -clavicylinder -clavicymbal -clavicytherium -clavier -clavierist -claviform -claviger -clavigerous -claviharp -clavilux -claviol -clavipectoral -clavis -clavodeltoid -clavodeltoideus -clavola -clavolae -clavolet -clavus -clavy -claw -clawed -clawer -clawk -clawker -clawless -clay -claybank -claybrained -clayen -clayer -clayey -clayiness -clayish -claylike -clayman -claymore -claypan -clayware -clayweed -cleach -clead -cleaded -cleading -cleam -cleamer -clean -cleanable -cleaner -cleanhanded -cleanhandedness -cleanhearted -cleaning -cleanish -cleanlily -cleanliness -cleanly -cleanness -cleanout -cleansable -cleanse -cleanser -cleansing -cleanskins -cleanup -clear -clearable -clearage -clearance -clearcole -clearedness -clearer -clearheaded -clearheadedly -clearheadedness -clearhearted -clearing -clearinghouse -clearish -clearly -clearness -clearskins -clearstarch -clearweed -clearwing -cleat -cleavability -cleavable -cleavage -cleave -cleaveful -cleavelandite -cleaver -cleavers -cleaverwort -cleaving -cleavingly -cleche -cleck -cled -cledge -cledgy -cledonism -clee -cleek -cleeked -cleeky -clef -cleft -clefted -cleg -cleidagra -cleidarthritis -cleidocostal -cleidocranial -cleidohyoid -cleidomancy -cleidomastoid -cleidorrhexis -cleidoscapular -cleidosternal -cleidotomy -cleidotripsy -cleistocarp -cleistocarpous -cleistogamic -cleistogamically -cleistogamous -cleistogamously -cleistogamy -cleistogene -cleistogenous -cleistogeny -cleistothecium -cleithral -cleithrum -clem -clematite -clemence -clemency -clement -clemently -clench -cleoid -clep -clepsydra -cleptobiosis -cleptobiotic -clerestoried -clerestory -clergy -clergyable -clergylike -clergyman -clergywoman -cleric -clerical -clericalism -clericalist -clericality -clericalize -clerically -clericate -clericature -clericism -clericity -clerid -clerihew -clerisy -clerk -clerkage -clerkdom -clerkery -clerkess -clerkhood -clerking -clerkish -clerkless -clerklike -clerkliness -clerkly -clerkship -cleromancy -cleronomy -cleruch -cleruchial -cleruchic -cleruchy -cletch -clethraceous -cleuch -cleve -cleveite -clever -cleverality -cleverish -cleverishly -cleverly -cleverness -clevis -clew -cliack -clianthus -cliche -click -clicker -clicket -clickless -clicky -cliency -client -clientage -cliental -cliented -clientelage -clientele -clientless -clientry -clientship -cliff -cliffed -cliffless -clifflet -clifflike -cliffside -cliffsman -cliffweed -cliffy -clift -cliftonite -clifty -clima -climaciaceous -climacteric -climacterical -climacterically -climactic -climactical -climactically -climacus -climata -climatal -climate -climath -climatic -climatical -climatically -climatize -climatographical -climatography -climatologic -climatological -climatologically -climatologist -climatology -climatometer -climatotherapeutics -climatotherapy -climature -climax -climb -climbable -climber -climbing -clime -climograph -clinal -clinamen -clinamina -clinandria -clinandrium -clinanthia -clinanthium -clinch -clincher -clinchingly -clinchingness -cline -cling -clinger -clingfish -clinging -clingingly -clingingness -clingstone -clingy -clinia -clinic -clinical -clinically -clinician -clinicist -clinicopathological -clinium -clink -clinker -clinkerer -clinkery -clinking -clinkstone -clinkum -clinoaxis -clinocephalic -clinocephalism -clinocephalous -clinocephalus -clinocephaly -clinochlore -clinoclase -clinoclasite -clinodiagonal -clinodomatic -clinodome -clinograph -clinographic -clinohedral -clinohedrite -clinohumite -clinoid -clinologic -clinology -clinometer -clinometric -clinometrical -clinometry -clinopinacoid -clinopinacoidal -clinoprism -clinopyramid -clinopyroxene -clinorhombic -clinospore -clinostat -clinquant -clint -clinting -clintonite -clinty -clip -clipei -clipeus -clippable -clipped -clipper -clipperman -clipping -clips -clipse -clipsheet -clipsome -clipt -clique -cliquedom -cliqueless -cliquish -cliquishly -cliquishness -cliquism -cliquy -cliseometer -clisere -clishmaclaver -clit -clitch -clite -clitella -clitellar -clitelliferous -clitelline -clitellum -clitellus -clites -clithe -clithral -clithridiate -clitia -clition -clitoridauxe -clitoridean -clitoridectomy -clitoriditis -clitoridotomy -clitoris -clitorism -clitoritis -clitter -clitterclatter -clival -clive -clivers -clivis -clivus -cloaca -cloacal -cloacaline -cloacean -cloacinal -cloacinean -cloacitis -cloak -cloakage -cloaked -cloakedly -cloaking -cloakless -cloaklet -cloakmaker -cloakmaking -cloakroom -cloakwise -cloam -cloamen -cloamer -clobber -clobberer -clochan -cloche -clocher -clochette -clock -clockbird -clockcase -clocked -clocker -clockface -clockhouse -clockkeeper -clockless -clocklike -clockmaker -clockmaking -clockmutch -clockroom -clocksmith -clockwise -clockwork -clod -clodbreaker -clodder -cloddily -cloddiness -cloddish -cloddishly -cloddishness -cloddy -clodhead -clodhopper -clodhopping -clodlet -clodpate -clodpated -clodpoll -cloff -clog -clogdogdo -clogger -cloggily -clogginess -cloggy -cloghad -cloglike -clogmaker -clogmaking -clogwood -clogwyn -cloiochoanitic -cloisonless -cloisonne -cloister -cloisteral -cloistered -cloisterer -cloisterless -cloisterlike -cloisterliness -cloisterly -cloisterwise -cloistral -cloistress -cloit -clomb -clomben -clonal -clone -clonic -clonicity -clonicotonic -clonism -clonorchiasis -clonus -cloof -cloop -cloot -clootie -clop -cloragen -clorargyrite -cloriodid -closable -close -closecross -closed -closefisted -closefistedly -closefistedness -closehanded -closehearted -closely -closemouth -closemouthed -closen -closeness -closer -closestool -closet -closewing -closh -closish -closter -clostridial -closure -clot -clotbur -clote -cloth -clothbound -clothe -clothes -clothesbag -clothesbasket -clothesbrush -clotheshorse -clothesline -clothesman -clothesmonger -clothespin -clothespress -clothesyard -clothier -clothify -clothing -clothmaker -clothmaking -clothworker -clothy -clottage -clottedness -clotter -clotty -cloture -clotweed -cloud -cloudage -cloudberry -cloudburst -cloudcap -clouded -cloudful -cloudily -cloudiness -clouding -cloudland -cloudless -cloudlessly -cloudlessness -cloudlet -cloudlike -cloudling -cloudology -cloudscape -cloudship -cloudward -cloudwards -cloudy -clough -clour -clout -clouted -clouter -clouterly -clouty -clove -cloven -clovene -clover -clovered -cloverlay -cloverleaf -cloveroot -cloverroot -clovery -clow -clown -clownade -clownage -clownery -clownheal -clownish -clownishly -clownishness -clownship -clowring -cloy -cloyedness -cloyer -cloying -cloyingly -cloyingness -cloyless -cloysome -club -clubbability -clubbable -clubbed -clubber -clubbily -clubbing -clubbish -clubbism -clubbist -clubby -clubdom -clubfellow -clubfisted -clubfoot -clubfooted -clubhand -clubhaul -clubhouse -clubionid -clubland -clubman -clubmate -clubmobile -clubmonger -clubridden -clubroom -clubroot -clubstart -clubster -clubweed -clubwoman -clubwood -cluck -clue -cluff -clump -clumpish -clumproot -clumpy -clumse -clumsily -clumsiness -clumsy -clunch -clung -clunk -clupanodonic -clupeid -clupeiform -clupeine -clupeoid -cluricaune -clusiaceous -cluster -clusterberry -clustered -clusterfist -clustering -clusteringly -clustery -clutch -clutchman -cluther -clutter -clutterer -clutterment -cluttery -cly -clyer -clyfaker -clyfaking -clype -clypeal -clypeastroid -clypeate -clypeiform -clypeolar -clypeolate -clypeole -clypeus -clysis -clysma -clysmian -clysmic -clyster -clysterize -cnemapophysis -cnemial -cnemidium -cnemis -cneoraceous -cnicin -cnida -cnidarian -cnidoblast -cnidocell -cnidocil -cnidocyst -cnidophore -cnidophorous -cnidopod -cnidosac -cnidosis -coabode -coabound -coabsume -coacceptor -coacervate -coacervation -coach -coachability -coachable -coachbuilder -coachbuilding -coachee -coacher -coachfellow -coachful -coaching -coachlet -coachmaker -coachmaking -coachman -coachmanship -coachmaster -coachsmith -coachsmithing -coachway -coachwhip -coachwise -coachwoman -coachwork -coachwright -coachy -coact -coaction -coactive -coactively -coactivity -coactor -coadamite -coadapt -coadaptation -coadequate -coadjacence -coadjacency -coadjacent -coadjacently -coadjudicator -coadjust -coadjustment -coadjutant -coadjutator -coadjute -coadjutement -coadjutive -coadjutor -coadjutorship -coadjutress -coadjutrix -coadjuvancy -coadjuvant -coadjuvate -coadminister -coadministration -coadministrator -coadministratrix -coadmiration -coadmire -coadmit -coadnate -coadore -coadsorbent -coadunate -coadunation -coadunative -coadunatively -coadunite -coadventure -coadventurer -coadvice -coaffirmation -coafforest -coaged -coagency -coagent -coaggregate -coaggregated -coaggregation -coagitate -coagitator -coagment -coagonize -coagriculturist -coagula -coagulability -coagulable -coagulant -coagulase -coagulate -coagulation -coagulative -coagulator -coagulatory -coagulin -coagulometer -coagulose -coagulum -coaid -coaita -coak -coakum -coal -coalbag -coalbagger -coalbin -coalbox -coaldealer -coaler -coalesce -coalescence -coalescency -coalescent -coalfish -coalfitter -coalhole -coalification -coalify -coalition -coalitional -coalitioner -coalitionist -coalize -coalizer -coalless -coalmonger -coalmouse -coalpit -coalrake -coalsack -coalternate -coalternation -coalternative -coaltitude -coaly -coalyard -coambassador -coambulant -coamiable -coaming -coanimate -coannex -coannihilate -coapostate -coapparition -coappear -coappearance -coapprehend -coapprentice -coappriser -coapprover -coapt -coaptate -coaptation -coaration -coarb -coarbiter -coarbitrator -coarctate -coarctation -coardent -coarrange -coarrangement -coarse -coarsely -coarsen -coarseness -coarsish -coascend -coassert -coasserter -coassession -coassessor -coassignee -coassist -coassistance -coassistant -coassume -coast -coastal -coastally -coaster -coastguardman -coasting -coastland -coastman -coastside -coastwaiter -coastward -coastwards -coastways -coastwise -coat -coated -coatee -coater -coati -coatie -coatimondie -coatimundi -coating -coatless -coatroom -coattail -coattailed -coattend -coattest -coattestation -coattestator -coaudience -coauditor -coaugment -coauthor -coauthority -coauthorship -coawareness -coax -coaxal -coaxation -coaxer -coaxial -coaxially -coaxing -coaxingly -coaxy -cob -cobaea -cobalt -cobaltammine -cobaltic -cobalticyanic -cobalticyanides -cobaltiferous -cobaltinitrite -cobaltite -cobaltocyanic -cobaltocyanide -cobaltous -cobang -cobbed -cobber -cobberer -cobbing -cobble -cobbler -cobblerfish -cobblerism -cobblerless -cobblership -cobblery -cobblestone -cobbling -cobbly -cobbra -cobby -cobcab -cobego -cobelief -cobeliever -cobelligerent -cobenignity -coberger -cobewail -cobhead -cobia -cobiron -cobishop -coble -cobleman -cobless -cobloaf -cobnut -cobola -coboundless -cobourg -cobra -cobreathe -cobridgehead -cobriform -cobrother -cobstone -coburg -coburgess -coburgher -coburghership -cobweb -cobwebbery -cobwebbing -cobwebby -cobwork -coca -cocaceous -cocaine -cocainism -cocainist -cocainization -cocainize -cocainomania -cocainomaniac -cocamine -cocarboxylase -cocash -cocashweed -cocause -cocautioner -coccagee -coccal -coccerin -cocci -coccid -coccidia -coccidial -coccidian -coccidioidal -coccidiosis -coccidium -coccidology -cocciferous -cocciform -coccigenic -coccinella -coccinellid -coccionella -cocco -coccobacillus -coccochromatic -coccogone -coccogonium -coccoid -coccolite -coccolith -coccolithophorid -coccosphere -coccostean -coccosteid -coccothraustine -coccous -coccule -cocculiferous -cocculus -coccus -coccydynia -coccygalgia -coccygeal -coccygean -coccygectomy -coccygerector -coccyges -coccygeus -coccygine -coccygodynia -coccygomorph -coccygomorphic -coccygotomy -coccyodynia -coccyx -cocentric -cochairman -cochal -cochief -cochineal -cochlea -cochlear -cochleare -cochlearifoliate -cochleariform -cochleate -cochleated -cochleiform -cochleitis -cochleous -cochlidiid -cochliodont -cochlospermaceous -cochurchwarden -cocillana -cocircular -cocircularity -cocitizen -cocitizenship -cock -cockade -cockaded -cockal -cockalorum -cockamaroo -cockarouse -cockateel -cockatoo -cockatrice -cockawee -cockbell -cockbill -cockbird -cockboat -cockbrain -cockchafer -cockcrow -cockcrower -cockcrowing -cocked -cocker -cockerel -cockermeg -cockernony -cocket -cockeye -cockeyed -cockfight -cockfighting -cockhead -cockhorse -cockieleekie -cockily -cockiness -cocking -cockish -cockle -cockleboat -cocklebur -cockled -cockler -cockleshell -cocklet -cocklewife -cocklight -cockling -cockloft -cockly -cockmaster -cockmatch -cockmate -cockneian -cockneity -cockney -cockneybred -cockneydom -cockneyese -cockneyess -cockneyfication -cockneyfy -cockneyish -cockneyishly -cockneyism -cockneyize -cockneyland -cockneyship -cockpit -cockroach -cockscomb -cockscombed -cocksfoot -cockshead -cockshot -cockshut -cockshy -cockshying -cockspur -cockstone -cocksure -cocksuredom -cocksureism -cocksurely -cocksureness -cocksurety -cocktail -cockthrowing -cockup -cockweed -cocky -coco -cocoa -cocoach -cocobolo -coconnection -coconqueror -coconscious -coconsciously -coconsciousness -coconsecrator -coconspirator -coconstituent -cocontractor -coconut -cocoon -cocoonery -cocorico -cocoroot -cocotte -cocovenantor -cocowood -cocowort -cocozelle -cocreate -cocreator -cocreatorship -cocreditor -cocrucify -coctile -coction -coctoantigen -coctoprecipitin -cocuisa -cocullo -cocurator -cocurrent -cocuswood -cocuyo -cod -coda -codamine -codbank -codder -codding -coddle -coddler -code -codebtor -codeclination -codecree -codefendant -codeine -codeless -codelight -codelinquency -codelinquent -codenization -codeposit -coder -coderive -codescendant -codespairer -codex -codfish -codfisher -codfishery -codger -codhead -codheaded -codiaceous -codical -codices -codicil -codicilic -codicillary -codictatorship -codification -codifier -codify -codilla -codille -codiniac -codirectional -codirector -codiscoverer -codisjunct -codist -codivine -codling -codman -codo -codol -codomestication -codominant -codon -codpiece -codpitchings -codshead -codworm -coe -coecal -coecum -coed -coeditor -coeditorship -coeducate -coeducation -coeducational -coeducationalism -coeducationalize -coeducationally -coeffect -coefficacy -coefficient -coefficiently -coeffluent -coeffluential -coelacanth -coelacanthid -coelacanthine -coelacanthoid -coelacanthous -coelanaglyphic -coelar -coelarium -coelastraceous -coelder -coeldership -coelect -coelection -coelector -coelectron -coelelminth -coelelminthic -coelenterate -coelenteric -coelenteron -coelestine -coelevate -coelho -coelia -coeliac -coelialgia -coelian -coeligenous -coelin -coeline -coeliomyalgia -coeliorrhea -coeliorrhoea -coelioscopy -coeliotomy -coeloblastic -coeloblastula -coelodont -coelogastrula -coelom -coeloma -coelomate -coelomatic -coelomatous -coelomesoblast -coelomic -coelomopore -coelonavigation -coelongated -coeloplanula -coelosperm -coelospermous -coelostat -coelozoic -coemanate -coembedded -coembody -coembrace -coeminency -coemperor -coemploy -coemployee -coemployment -coempt -coemption -coemptional -coemptionator -coemptive -coemptor -coenact -coenactor -coenaculous -coenamor -coenamorment -coenamourment -coenanthium -coendear -coendure -coenenchym -coenenchyma -coenenchymal -coenenchymatous -coenenchyme -coenesthesia -coenesthesis -coenflame -coengage -coengager -coenjoy -coenobe -coenobiar -coenobic -coenobioid -coenobium -coenoblast -coenoblastic -coenocentrum -coenocyte -coenocytic -coenodioecism -coenoecial -coenoecic -coenoecium -coenogamete -coenomonoecism -coenosarc -coenosarcal -coenosarcous -coenosite -coenospecies -coenospecific -coenospecifically -coenosteal -coenosteum -coenotrope -coenotype -coenotypic -coenthrone -coenurus -coenzyme -coequal -coequality -coequalize -coequally -coequalness -coequate -coequated -coequation -coerce -coercement -coercer -coercibility -coercible -coercibleness -coercibly -coercion -coercionary -coercionist -coercitive -coercive -coercively -coerciveness -coercivity -coeruleolactite -coessential -coessentiality -coessentially -coessentialness -coestablishment -coestate -coetaneity -coetaneous -coetaneously -coetaneousness -coeternal -coeternally -coeternity -coetus -coeval -coevality -coevally -coexchangeable -coexclusive -coexecutant -coexecutor -coexecutrix -coexert -coexertion -coexist -coexistence -coexistency -coexistent -coexpand -coexpanded -coexperiencer -coexpire -coexplosion -coextend -coextension -coextensive -coextensively -coextensiveness -coextent -cofactor -cofaster -cofather -cofathership -cofeature -cofeoffee -coferment -cofermentation -coff -coffee -coffeebush -coffeecake -coffeegrower -coffeegrowing -coffeehouse -coffeeleaf -coffeepot -coffeeroom -coffeetime -coffeeweed -coffeewood -coffer -cofferdam -cofferer -cofferfish -coffering -cofferlike -cofferwork -coffin -coffinless -coffinmaker -coffinmaking -coffle -coffret -cofighter -coforeknown -coformulator -cofounder -cofoundress -cofreighter -coft -cofunction -cog -cogence -cogency -cogener -cogeneric -cogent -cogently -cogged -cogger -coggie -cogging -coggle -coggledy -cogglety -coggly -coghle -cogitability -cogitable -cogitabund -cogitabundity -cogitabundly -cogitabundous -cogitant -cogitantly -cogitate -cogitatingly -cogitation -cogitative -cogitatively -cogitativeness -cogitativity -cogitator -coglorify -coglorious -cogman -cognac -cognate -cognateness -cognatic -cognatical -cognation -cognisable -cognisance -cognition -cognitional -cognitive -cognitively -cognitum -cognizability -cognizable -cognizableness -cognizably -cognizance -cognizant -cognize -cognizee -cognizer -cognizor -cognomen -cognominal -cognominate -cognomination -cognosce -cognoscent -cognoscibility -cognoscible -cognoscitive -cognoscitively -cogon -cogonal -cogovernment -cogovernor -cogracious -cograil -cogrediency -cogredient -cogroad -coguarantor -coguardian -cogue -cogway -cogwheel -cogwood -cohabit -cohabitancy -cohabitant -cohabitation -coharmonious -coharmoniously -coharmonize -coheartedness -coheir -coheiress -coheirship -cohelper -cohelpership -cohenite -coherald -cohere -coherence -coherency -coherent -coherently -coherer -coheretic -coheritage -coheritor -cohesibility -cohesible -cohesion -cohesive -cohesively -cohesiveness -cohibit -cohibition -cohibitive -cohibitor -coho -cohoba -cohobate -cohobation -cohobator -cohol -cohort -cohortation -cohortative -cohosh -cohune -cohusband -coidentity -coif -coifed -coiffure -coign -coigue -coil -coiled -coiler -coiling -coilsmith -coimmense -coimplicant -coimplicate -coimplore -coin -coinable -coinage -coincide -coincidence -coincidency -coincident -coincidental -coincidentally -coincidently -coincider -coinclination -coincline -coinclude -coincorporate -coindicant -coindicate -coindication -coindwelling -coiner -coinfeftment -coinfer -coinfinite -coinfinity -coinhabit -coinhabitant -coinhabitor -coinhere -coinherence -coinherent -coinheritance -coinheritor -coining -coinitial -coinmaker -coinmaking -coinmate -coinspire -coinstantaneity -coinstantaneous -coinstantaneously -coinstantaneousness -coinsurance -coinsure -cointense -cointension -cointensity -cointer -cointerest -cointersecting -cointise -coinventor -coinvolve -coiny -coir -coislander -coistrel -coistril -coital -coition -coiture -coitus -cojudge -cojuror -cojusticiar -coke -cokelike -cokeman -coker -cokernut -cokery -coking -coky -col -cola -colaborer -colalgia -colander -colane -colarin -colate -colation -colatitude -colatorium -colature -colauxe -colback -colberter -colbertine -colcannon -colchicine -colchyte -colcothar -cold -colder -coldfinch -coldhearted -coldheartedly -coldheartedness -coldish -coldly -coldness -coldproof -coldslaw -cole -coleader -colecannon -colectomy -colegatee -colegislator -colemanite -colemouse -coleochaetaceous -coleopter -coleopteral -coleopteran -coleopterist -coleopteroid -coleopterological -coleopterology -coleopteron -coleopterous -coleoptile -coleoptilum -coleorhiza -coleplant -coleseed -coleslaw -colessee -colessor -coletit -coleur -colewort -coli -colibacillosis -colibacterin -colibri -colic -colical -colichemarde -colicky -colicolitis -colicroot -colicweed -colicwort -colicystitis -colicystopyelitis -coliform -colilysin -colima -colin -colinear -colinephritis -coling -coliplication -colipuncture -colipyelitis -colipyuria -colisepsis -coliseum -colitic -colitis -colitoxemia -coliuria -colk -coll -collaborate -collaboration -collaborationism -collaborationist -collaborative -collaboratively -collaborator -collage -collagen -collagenic -collagenous -collapse -collapsibility -collapsible -collar -collarband -collarbird -collarbone -collard -collare -collared -collaret -collarino -collarless -collarman -collatable -collate -collatee -collateral -collaterality -collaterally -collateralness -collation -collationer -collatitious -collative -collator -collatress -collaud -collaudation -colleague -colleagueship -collect -collectability -collectable -collectanea -collectarium -collected -collectedly -collectedness -collectibility -collectible -collection -collectional -collectioner -collective -collectively -collectiveness -collectivism -collectivist -collectivistic -collectivistically -collectivity -collectivization -collectivize -collector -collectorate -collectorship -collectress -colleen -collegatary -college -colleger -collegial -collegialism -collegiality -collegian -collegianer -collegiate -collegiately -collegiateness -collegiation -collegium -collembolan -collembole -collembolic -collembolous -collenchyma -collenchymatic -collenchymatous -collenchyme -collencytal -collencyte -collery -collet -colleter -colleterial -colleterium -colletic -colletin -colletside -colley -collibert -colliculate -colliculus -collide -collidine -collie -collied -collier -colliery -collieshangie -colliform -colligate -colligation -colligative -colligible -collimate -collimation -collimator -collin -collinal -colline -collinear -collinearity -collinearly -collineate -collineation -colling -collingly -collingual -collins -collinsite -colliquate -colliquation -colliquative -colliquativeness -collision -collisional -collisive -colloblast -collobrierite -collocal -collocate -collocation -collocationable -collocative -collocatory -collochemistry -collochromate -collock -collocution -collocutor -collocutory -collodiochloride -collodion -collodionization -collodionize -collodiotype -collodium -collogue -colloid -colloidal -colloidality -colloidize -colloidochemical -collop -colloped -collophanite -collophore -colloque -colloquia -colloquial -colloquialism -colloquialist -colloquiality -colloquialize -colloquially -colloquialness -colloquist -colloquium -colloquize -colloquy -collothun -collotype -collotypic -collotypy -colloxylin -colluctation -collude -colluder -collum -collumelliaceous -collusion -collusive -collusively -collusiveness -collutorium -collutory -colluvial -colluvies -colly -collyba -collyrite -collyrium -collywest -collyweston -collywobbles -colmar -colobin -colobium -coloboma -colocentesis -colocephalous -coloclysis -colocola -colocolic -colocynth -colocynthin -colodyspepsia -coloenteritis -cologarithm -cololite -colombier -colombin -colometric -colometrically -colometry -colon -colonalgia -colonate -colonel -colonelcy -colonelship -colongitude -colonial -colonialism -colonialist -colonialize -colonially -colonialness -colonic -colonist -colonitis -colonizability -colonizable -colonization -colonizationist -colonize -colonizer -colonnade -colonnaded -colonnette -colonopathy -colonopexy -colonoscope -colonoscopy -colony -colopexia -colopexotomy -colopexy -colophane -colophany -colophene -colophenic -colophon -colophonate -colophonic -colophonist -colophonite -colophonium -colophony -coloplication -coloproctitis -coloptosis -colopuncture -coloquintid -coloquintida -color -colorability -colorable -colorableness -colorably -colorado -coloradoite -colorant -colorate -coloration -colorational -colorationally -colorative -coloratura -colorature -colorcast -colorectitis -colorectostomy -colored -colorer -colorfast -colorful -colorfully -colorfulness -colorific -colorifics -colorimeter -colorimetric -colorimetrical -colorimetrically -colorimetrics -colorimetrist -colorimetry -colorin -coloring -colorist -coloristic -colorization -colorize -colorless -colorlessly -colorlessness -colormaker -colormaking -colorman -colorrhaphy -colors -colortype -colory -coloss -colossal -colossality -colossally -colossean -colossi -colossus -colostomy -colostral -colostration -colostric -colostrous -colostrum -colotomy -colotyphoid -colove -colp -colpenchyma -colpeo -colpeurynter -colpeurysis -colpindach -colpitis -colpocele -colpocystocele -colpohyperplasia -colpohysterotomy -colpoperineoplasty -colpoperineorrhaphy -colpoplastic -colpoplasty -colpoptosis -colporrhagia -colporrhaphy -colporrhea -colporrhexis -colport -colportage -colporter -colporteur -colposcope -colposcopy -colpotomy -colpus -colt -colter -colthood -coltish -coltishly -coltishness -coltpixie -coltpixy -coltsfoot -coltskin -colubrid -colubriform -colubrine -colubroid -colugo -columbaceous -columbarium -columbary -columbate -columbeion -columbiad -columbic -columbier -columbiferous -columbin -columbine -columbite -columbium -columbo -columboid -columbotantalate -columbotitanate -columella -columellar -columellate -columelliform -column -columnal -columnar -columnarian -columnarity -columnated -columned -columner -columniation -columniferous -columniform -columning -columnist -columnization -columnwise -colunar -colure -coly -colymbiform -colymbion -colyone -colyonic -colytic -colyum -colyumist -colza -coma -comacine -comagistracy -comagmatic -comaker -comal -comamie -comanic -comart -comate -comatose -comatosely -comatoseness -comatosity -comatous -comatula -comatulid -comb -combaron -combat -combatable -combatant -combater -combative -combatively -combativeness -combativity -combed -comber -combfish -combflower -combinable -combinableness -combinant -combinantive -combinate -combination -combinational -combinative -combinator -combinatorial -combinatory -combine -combined -combinedly -combinedness -combinement -combiner -combing -combining -comble -combless -comblessness -combmaker -combmaking -comboloio -comboy -combretaceous -combure -comburendo -comburent -comburgess -comburimeter -comburimetry -comburivorous -combust -combustibility -combustible -combustibleness -combustibly -combustion -combustive -combustor -combwise -combwright -comby -come -comeback -comedial -comedian -comediant -comedic -comedical -comedienne -comedietta -comedist -comedo -comedown -comedy -comelily -comeliness -comeling -comely -comendite -comenic -comephorous -comer -comes -comestible -comet -cometarium -cometary -comether -cometic -cometical -cometlike -cometographer -cometographical -cometography -cometoid -cometology -cometwise -comeuppance -comfit -comfiture -comfort -comfortable -comfortableness -comfortably -comforter -comfortful -comforting -comfortingly -comfortless -comfortlessly -comfortlessness -comfortress -comfortroot -comfrey -comfy -comic -comical -comicality -comically -comicalness -comicocratic -comicocynical -comicodidactic -comicography -comicoprosaic -comicotragedy -comicotragic -comicotragical -comicry -comiferous -coming -comingle -comino -comism -comital -comitant -comitatensian -comitative -comitatus -comitia -comitial -comitragedy -comity -comma -command -commandable -commandant -commandedness -commandeer -commander -commandership -commandery -commanding -commandingly -commandingness -commandless -commandment -commando -commandoman -commandress -commassation -commassee -commatic -commation -commatism -commeasurable -commeasure -commeddle -commelinaceous -commemorable -commemorate -commemoration -commemorational -commemorative -commemoratively -commemorativeness -commemorator -commemoratory -commemorize -commence -commenceable -commencement -commencer -commend -commendable -commendableness -commendably -commendador -commendam -commendatary -commendation -commendator -commendatory -commender -commendingly -commendment -commensal -commensalism -commensalist -commensalistic -commensality -commensally -commensurability -commensurable -commensurableness -commensurably -commensurate -commensurately -commensurateness -commensuration -comment -commentarial -commentarialism -commentary -commentate -commentation -commentator -commentatorial -commentatorially -commentatorship -commenter -commerce -commerceless -commercer -commerciable -commercial -commercialism -commercialist -commercialistic -commerciality -commercialization -commercialize -commercially -commercium -commerge -commie -comminate -commination -comminative -comminator -comminatory -commingle -comminglement -commingler -comminister -comminuate -comminute -comminution -comminutor -commiserable -commiserate -commiseratingly -commiseration -commiserative -commiseratively -commiserator -commissar -commissarial -commissariat -commissary -commissaryship -commission -commissionaire -commissional -commissionate -commissioner -commissionership -commissionship -commissive -commissively -commissural -commissure -commissurotomy -commit -commitment -committable -committal -committee -committeeism -committeeman -committeeship -committeewoman -committent -committer -committible -committor -commix -commixt -commixtion -commixture -commodatary -commodate -commodation -commodatum -commode -commodious -commodiously -commodiousness -commoditable -commodity -commodore -common -commonable -commonage -commonality -commonalty -commoner -commonership -commoney -commonish -commonition -commonize -commonly -commonness -commonplace -commonplaceism -commonplacely -commonplaceness -commonplacer -commons -commonsensible -commonsensibly -commonsensical -commonsensically -commonty -commonweal -commonwealth -commonwealthism -commorancy -commorant -commorient -commorth -commot -commotion -commotional -commotive -commove -communa -communal -communalism -communalist -communalistic -communality -communalization -communalize -communalizer -communally -communard -commune -communer -communicability -communicable -communicableness -communicably -communicant -communicate -communicatee -communicating -communication -communicative -communicatively -communicativeness -communicator -communicatory -communion -communionist -communique -communism -communist -communistery -communistic -communistically -communital -communitarian -communitary -communitive -communitorium -community -communization -communize -commutability -commutable -commutableness -commutant -commutate -commutation -commutative -commutatively -commutator -commute -commuter -commuting -commutual -commutuality -comoid -comolecule -comortgagee -comose -comourn -comourner -comournful -comous -compact -compacted -compactedly -compactedness -compacter -compactible -compaction -compactly -compactness -compactor -compacture -compages -compaginate -compagination -companator -companion -companionability -companionable -companionableness -companionably -companionage -companionate -companionize -companionless -companionship -companionway -company -comparability -comparable -comparableness -comparably -comparascope -comparate -comparatival -comparative -comparatively -comparativeness -comparativist -comparator -compare -comparer -comparison -comparition -comparograph -compart -compartition -compartment -compartmental -compartmentalization -compartmentalize -compartmentally -compartmentize -compass -compassable -compasser -compasses -compassing -compassion -compassionable -compassionate -compassionately -compassionateness -compassionless -compassive -compassivity -compassless -compaternity -compatibility -compatible -compatibleness -compatibly -compatriot -compatriotic -compatriotism -compear -compearance -compearant -compeer -compel -compellable -compellably -compellation -compellative -compellent -compeller -compelling -compellingly -compend -compendency -compendent -compendia -compendiary -compendiate -compendious -compendiously -compendiousness -compendium -compenetrate -compenetration -compensable -compensate -compensating -compensatingly -compensation -compensational -compensative -compensativeness -compensator -compensatory -compense -compenser -compesce -compete -competence -competency -competent -competently -competentness -competition -competitioner -competitive -competitively -competitiveness -competitor -competitorship -competitory -competitress -competitrix -compilation -compilator -compilatory -compile -compilement -compiler -compital -compitum -complacence -complacency -complacent -complacential -complacentially -complacently -complain -complainable -complainant -complainer -complainingly -complainingness -complaint -complaintive -complaintiveness -complaisance -complaisant -complaisantly -complaisantness -complanar -complanate -complanation -complect -complected -complement -complemental -complementally -complementalness -complementariness -complementarism -complementary -complementation -complementative -complementer -complementoid -complete -completedness -completely -completement -completeness -completer -completion -completive -completively -completory -complex -complexedness -complexification -complexify -complexion -complexionably -complexional -complexionally -complexioned -complexionist -complexionless -complexity -complexively -complexly -complexness -complexus -compliable -compliableness -compliably -compliance -compliancy -compliant -compliantly -complicacy -complicant -complicate -complicated -complicatedly -complicatedness -complication -complicative -complice -complicitous -complicity -complier -compliment -complimentable -complimental -complimentally -complimentalness -complimentarily -complimentariness -complimentary -complimentation -complimentative -complimenter -complimentingly -complin -complot -complotter -compluvium -comply -compo -compoer -compole -compone -componed -componency -componendo -component -componental -componented -compony -comport -comportment -compos -compose -composed -composedly -composedness -composer -composita -composite -compositely -compositeness -composition -compositional -compositionally -compositive -compositively -compositor -compositorial -compositous -composograph -compossibility -compossible -compost -composture -composure -compotation -compotationship -compotator -compotatory -compote -compotor -compound -compoundable -compoundedness -compounder -compounding -compoundness -comprachico -comprador -comprecation -compreg -compregnate -comprehend -comprehender -comprehendible -comprehendingly -comprehense -comprehensibility -comprehensible -comprehensibleness -comprehensibly -comprehension -comprehensive -comprehensively -comprehensiveness -comprehensor -compresbyter -compresbyterial -compresence -compresent -compress -compressed -compressedly -compressibility -compressible -compressibleness -compressingly -compression -compressional -compressive -compressively -compressometer -compressor -compressure -comprest -compriest -comprisable -comprisal -comprise -comprised -compromise -compromiser -compromising -compromisingly -compromissary -compromission -compromissorial -compromit -compromitment -comprovincial -compter -comptroller -comptrollership -compulsative -compulsatively -compulsatorily -compulsatory -compulsed -compulsion -compulsitor -compulsive -compulsively -compulsiveness -compulsorily -compulsoriness -compulsory -compunction -compunctionary -compunctionless -compunctious -compunctiously -compunctive -compurgation -compurgator -compurgatorial -compurgatory -compursion -computability -computable -computably -computation -computational -computative -computativeness -compute -computer -computist -computus -comrade -comradely -comradery -comradeship -comstockery -comurmurer -con -conacaste -conacre -conal -conalbumin -conamed -conarial -conarium -conation -conational -conationalistic -conative -conatus -conaxial -concamerate -concamerated -concameration -concanavalin -concaptive -concassation -concatenary -concatenate -concatenation -concatenator -concausal -concause -concavation -concave -concavely -concaveness -concaver -concavity -conceal -concealable -concealed -concealedly -concealedness -concealer -concealment -concede -conceded -concededly -conceder -conceit -conceited -conceitedly -conceitedness -conceitless -conceity -conceivability -conceivable -conceivableness -conceivably -conceive -conceiver -concelebrate -concelebration -concent -concenter -concentive -concentralization -concentrate -concentrated -concentration -concentrative -concentrativeness -concentrator -concentric -concentrically -concentricity -concentual -concentus -concept -conceptacle -conceptacular -conceptaculum -conception -conceptional -conceptionist -conceptism -conceptive -conceptiveness -conceptual -conceptualism -conceptualist -conceptualistic -conceptuality -conceptualization -conceptualize -conceptually -conceptus -concern -concerned -concernedly -concernedness -concerning -concerningly -concerningness -concernment -concert -concerted -concertedly -concertgoer -concertina -concertinist -concertist -concertize -concertizer -concertmaster -concertmeister -concertment -concerto -concertstuck -concessible -concession -concessionaire -concessional -concessionary -concessioner -concessionist -concessive -concessively -concessiveness -concessor -concettism -concettist -conch -concha -conchal -conchate -conche -conched -concher -conchiferous -conchiform -conchinine -conchiolin -conchitic -conchitis -conchoid -conchoidal -conchoidally -conchological -conchologically -conchologist -conchologize -conchology -conchometer -conchometry -conchotome -conchuela -conchy -conchyliated -conchyliferous -conchylium -concierge -concile -conciliable -conciliabule -conciliabulum -conciliar -conciliate -conciliating -conciliatingly -conciliation -conciliationist -conciliative -conciliator -conciliatorily -conciliatoriness -conciliatory -concilium -concinnity -concinnous -concionator -concipiency -concipient -concise -concisely -conciseness -concision -conclamant -conclamation -conclave -conclavist -concludable -conclude -concluder -concluding -concludingly -conclusion -conclusional -conclusionally -conclusive -conclusively -conclusiveness -conclusory -concoagulate -concoagulation -concoct -concocter -concoction -concoctive -concoctor -concolor -concolorous -concomitance -concomitancy -concomitant -concomitantly -conconscious -concord -concordal -concordance -concordancer -concordant -concordantial -concordantly -concordat -concordatory -concorder -concordial -concordist -concordity -concorporate -concourse -concreate -concremation -concrement -concresce -concrescence -concrescible -concrescive -concrete -concretely -concreteness -concreter -concretion -concretional -concretionary -concretism -concretive -concretively -concretize -concretor -concubinage -concubinal -concubinarian -concubinary -concubinate -concubine -concubinehood -concubitancy -concubitant -concubitous -concubitus -concupiscence -concupiscent -concupiscible -concupiscibleness -concupy -concur -concurrence -concurrency -concurrent -concurrently -concurrentness -concurring -concurringly -concursion -concurso -concursus -concuss -concussant -concussion -concussional -concussive -concutient -concyclic -concyclically -cond -condemn -condemnable -condemnably -condemnate -condemnation -condemnatory -condemned -condemner -condemning -condemningly -condensability -condensable -condensance -condensary -condensate -condensation -condensational -condensative -condensator -condense -condensed -condensedly -condensedness -condenser -condensery -condensity -condescend -condescendence -condescendent -condescender -condescending -condescendingly -condescendingness -condescension -condescensive -condescensively -condescensiveness -condiction -condictious -condiddle -condiddlement -condign -condigness -condignity -condignly -condiment -condimental -condimentary -condisciple -condistillation -condite -condition -conditional -conditionalism -conditionalist -conditionality -conditionalize -conditionally -conditionate -conditioned -conditioner -condivision -condolatory -condole -condolement -condolence -condolent -condoler -condoling -condolingly -condominate -condominium -condonable -condonance -condonation -condonative -condone -condonement -condoner -condor -conduce -conducer -conducing -conducingly -conducive -conduciveness -conduct -conductance -conductibility -conductible -conductility -conductimeter -conductio -conduction -conductional -conductitious -conductive -conductively -conductivity -conductometer -conductometric -conductor -conductorial -conductorless -conductorship -conductory -conductress -conductus -conduit -conduplicate -conduplicated -conduplication -condurangin -condurango -condylar -condylarth -condylarthrosis -condylarthrous -condyle -condylectomy -condylion -condyloid -condyloma -condylomatous -condylome -condylopod -condylopodous -condylos -condylotomy -condylure -cone -coned -coneen -coneflower -conehead -coneighboring -coneine -conelet -conemaker -conemaking -conenose -conepate -coner -cones -conessine -confab -confabular -confabulate -confabulation -confabulator -confabulatory -confact -confarreate -confarreation -confated -confect -confection -confectionary -confectioner -confectionery -confederacy -confederal -confederalist -confederate -confederater -confederatio -confederation -confederationist -confederatism -confederative -confederatize -confederator -confelicity -conferee -conference -conferential -conferment -conferrable -conferral -conferrer -conferruminate -conferted -confervaceous -conferval -confervoid -confervous -confess -confessable -confessant -confessarius -confessary -confessedly -confesser -confessing -confessingly -confession -confessional -confessionalian -confessionalism -confessionalist -confessionary -confessionist -confessor -confessorship -confessory -confidant -confide -confidence -confidency -confident -confidential -confidentiality -confidentially -confidentialness -confidentiary -confidently -confidentness -confider -confiding -confidingly -confidingness -configural -configurate -configuration -configurational -configurationally -configurationism -configurationist -configurative -configure -confinable -confine -confineable -confined -confinedly -confinedness -confineless -confinement -confiner -confining -confinity -confirm -confirmable -confirmand -confirmation -confirmative -confirmatively -confirmatorily -confirmatory -confirmed -confirmedly -confirmedness -confirmee -confirmer -confirming -confirmingly -confirmity -confirmment -confirmor -confiscable -confiscatable -confiscate -confiscation -confiscator -confiscatory -confitent -confiteor -confiture -confix -conflagrant -conflagrate -conflagration -conflagrative -conflagrator -conflagratory -conflate -conflated -conflation -conflict -conflicting -conflictingly -confliction -conflictive -conflictory -conflow -confluence -confluent -confluently -conflux -confluxibility -confluxible -confluxibleness -confocal -conform -conformability -conformable -conformableness -conformably -conformal -conformance -conformant -conformate -conformation -conformator -conformer -conformist -conformity -confound -confoundable -confounded -confoundedly -confoundedness -confounder -confounding -confoundingly -confrater -confraternal -confraternity -confraternization -confrere -confriar -confrication -confront -confrontal -confrontation -confronte -confronter -confrontment -confusability -confusable -confusably -confuse -confused -confusedly -confusedness -confusingly -confusion -confusional -confusticate -confustication -confutable -confutation -confutative -confutator -confute -confuter -conga -congeable -congeal -congealability -congealable -congealableness -congealedness -congealer -congealment -congee -congelation -congelative -congelifraction -congeliturbate -congeliturbation -congener -congeneracy -congeneric -congenerical -congenerous -congenerousness -congenetic -congenial -congeniality -congenialize -congenially -congenialness -congenital -congenitally -congenitalness -conger -congeree -congest -congested -congestible -congestion -congestive -congiary -congius -conglobate -conglobately -conglobation -conglobe -conglobulate -conglomerate -conglomeratic -conglomeration -conglutin -conglutinant -conglutinate -conglutination -conglutinative -congou -congratulable -congratulant -congratulate -congratulation -congratulational -congratulator -congratulatory -congredient -congreet -congregable -congreganist -congregant -congregate -congregation -congregational -congregationalism -congregationalize -congregationally -congregationist -congregative -congregativeness -congregator -congress -congresser -congressional -congressionalist -congressionally -congressionist -congressist -congressive -congressman -congresswoman -congroid -congruence -congruency -congruent -congruential -congruently -congruism -congruist -congruistic -congruity -congruous -congruously -congruousness -conhydrine -conic -conical -conicality -conically -conicalness -coniceine -conichalcite -conicine -conicity -conicle -conicoid -conicopoly -conics -conidia -conidial -conidian -conidiiferous -conidioid -conidiophore -conidiophorous -conidiospore -conidium -conifer -coniferin -coniferophyte -coniferous -conification -coniform -conima -conimene -conin -conine -coniosis -coniroster -conirostral -conject -conjective -conjecturable -conjecturably -conjectural -conjecturalist -conjecturality -conjecturally -conjecture -conjecturer -conjobble -conjoin -conjoined -conjoinedly -conjoiner -conjoint -conjointly -conjointment -conjointness -conjubilant -conjugable -conjugacy -conjugal -conjugality -conjugally -conjugant -conjugata -conjugate -conjugated -conjugately -conjugateness -conjugation -conjugational -conjugationally -conjugative -conjugator -conjugial -conjugium -conjunct -conjunction -conjunctional -conjunctionally -conjunctiva -conjunctival -conjunctive -conjunctively -conjunctiveness -conjunctivitis -conjunctly -conjunctur -conjunctural -conjuncture -conjuration -conjurator -conjure -conjurement -conjurer -conjurership -conjuror -conjury -conk -conkanee -conker -conkers -conky -conn -connach -connaraceous -connarite -connascency -connascent -connatal -connate -connately -connateness -connation -connatural -connaturality -connaturalize -connaturally -connaturalness -connature -connaught -connect -connectable -connectant -connected -connectedly -connectedness -connectible -connection -connectional -connectival -connective -connectively -connectivity -connector -connellite -conner -connex -connexion -connexionalism -connexity -connexive -connexivum -connexus -conning -conniption -connivance -connivancy -connivant -connivantly -connive -connivent -conniver -connoissance -connoisseur -connoisseurship -connotation -connotative -connotatively -connote -connotive -connotively -connubial -connubiality -connubially -connubiate -connubium -connumerate -connumeration -conoclinium -conocuneus -conodont -conoid -conoidal -conoidally -conoidic -conoidical -conoidically -conominee -cononintelligent -conopid -conoplain -conopodium -conormal -conoscope -conourish -conphaseolin -conplane -conquedle -conquer -conquerable -conquerableness -conqueress -conquering -conqueringly -conquerment -conqueror -conquest -conquian -conquinamine -conquinine -conquistador -conrector -conrectorship -conred -consanguine -consanguineal -consanguinean -consanguineous -consanguineously -consanguinity -conscience -conscienceless -consciencelessly -consciencelessness -consciencewise -conscient -conscientious -conscientiously -conscientiousness -conscionable -conscionableness -conscionably -conscious -consciously -consciousness -conscribe -conscript -conscription -conscriptional -conscriptionist -conscriptive -consecrate -consecrated -consecratedness -consecrater -consecration -consecrative -consecrator -consecratory -consectary -consecute -consecution -consecutive -consecutively -consecutiveness -consecutives -consenescence -consenescency -consension -consensual -consensually -consensus -consent -consentable -consentaneity -consentaneous -consentaneously -consentaneousness -consentant -consenter -consentful -consentfully -consentience -consentient -consentiently -consenting -consentingly -consentingness -consentive -consentively -consentment -consequence -consequency -consequent -consequential -consequentiality -consequentially -consequentialness -consequently -consertal -conservable -conservacy -conservancy -conservant -conservate -conservation -conservational -conservationist -conservatism -conservatist -conservative -conservatively -conservativeness -conservatize -conservatoire -conservator -conservatorio -conservatorium -conservatorship -conservatory -conservatrix -conserve -conserver -consider -considerability -considerable -considerableness -considerably -considerance -considerate -considerately -considerateness -consideration -considerative -consideratively -considerativeness -considerator -considered -considerer -considering -consideringly -consign -consignable -consignatary -consignation -consignatory -consignee -consigneeship -consigner -consignificant -consignificate -consignification -consignificative -consignificator -consignify -consignment -consignor -consiliary -consilience -consilient -consimilar -consimilarity -consimilate -consist -consistence -consistency -consistent -consistently -consistorial -consistorian -consistory -consociate -consociation -consociational -consociationism -consociative -consocies -consol -consolable -consolableness -consolably -consolation -consolatorily -consolatoriness -consolatory -consolatrix -console -consolement -consoler -consolidant -consolidate -consolidated -consolidation -consolidationist -consolidative -consolidator -consoling -consolingly -consolute -consomme -consonance -consonancy -consonant -consonantal -consonantic -consonantism -consonantize -consonantly -consonantness -consonate -consonous -consort -consortable -consorter -consortial -consortion -consortism -consortium -consortship -consound -conspecies -conspecific -conspectus -consperse -conspersion -conspicuity -conspicuous -conspicuously -conspicuousness -conspiracy -conspirant -conspiration -conspirative -conspirator -conspiratorial -conspiratorially -conspiratory -conspiratress -conspire -conspirer -conspiring -conspiringly -conspue -constable -constablery -constableship -constabless -constablewick -constabular -constabulary -constancy -constant -constantan -constantly -constantness -constat -constatation -constate -constatory -constellate -constellation -constellatory -consternate -consternation -constipate -constipation -constituency -constituent -constituently -constitute -constituter -constitution -constitutional -constitutionalism -constitutionalist -constitutionality -constitutionalization -constitutionalize -constitutionally -constitutionary -constitutioner -constitutionist -constitutive -constitutively -constitutiveness -constitutor -constrain -constrainable -constrained -constrainedly -constrainedness -constrainer -constraining -constrainingly -constrainment -constraint -constrict -constricted -constriction -constrictive -constrictor -constringe -constringency -constringent -construability -construable -construct -constructer -constructible -construction -constructional -constructionally -constructionism -constructionist -constructive -constructively -constructiveness -constructivism -constructivist -constructor -constructorship -constructure -construe -construer -constuprate -constupration -consubsist -consubsistency -consubstantial -consubstantialism -consubstantialist -consubstantiality -consubstantially -consubstantiate -consubstantiation -consubstantiationist -consubstantive -consuete -consuetitude -consuetude -consuetudinal -consuetudinary -consul -consulage -consular -consularity -consulary -consulate -consulship -consult -consultable -consultant -consultary -consultation -consultative -consultatory -consultee -consulter -consulting -consultive -consultively -consultor -consultory -consumable -consume -consumedly -consumeless -consumer -consuming -consumingly -consumingness -consummate -consummately -consummation -consummative -consummatively -consummativeness -consummator -consummatory -consumpt -consumpted -consumptible -consumption -consumptional -consumptive -consumptively -consumptiveness -consumptivity -consute -contabescence -contabescent -contact -contactor -contactual -contactually -contagion -contagioned -contagionist -contagiosity -contagious -contagiously -contagiousness -contagium -contain -containable -container -containment -contakion -contaminable -contaminant -contaminate -contamination -contaminative -contaminator -contaminous -contangential -contango -conte -contect -contection -contemn -contemner -contemnible -contemnibly -contemning -contemningly -contemnor -contemper -contemperate -contemperature -contemplable -contemplamen -contemplant -contemplate -contemplatingly -contemplation -contemplatist -contemplative -contemplatively -contemplativeness -contemplator -contemplature -contemporanean -contemporaneity -contemporaneous -contemporaneously -contemporaneousness -contemporarily -contemporariness -contemporary -contemporize -contempt -contemptful -contemptibility -contemptible -contemptibleness -contemptibly -contemptuous -contemptuously -contemptuousness -contendent -contender -contending -contendingly -contendress -content -contentable -contented -contentedly -contentedness -contentful -contention -contentional -contentious -contentiously -contentiousness -contentless -contently -contentment -contentness -contents -conter -conterminal -conterminant -contermine -conterminous -conterminously -conterminousness -contest -contestable -contestableness -contestably -contestant -contestation -contestee -contester -contestingly -contestless -context -contextive -contextual -contextually -contextural -contexture -contextured -conticent -contignation -contiguity -contiguous -contiguously -contiguousness -continence -continency -continent -continental -continentalism -continentalist -continentality -continentally -continently -contingence -contingency -contingent -contingential -contingentialness -contingently -contingentness -continuable -continual -continuality -continually -continualness -continuance -continuancy -continuando -continuant -continuantly -continuate -continuately -continuateness -continuation -continuative -continuatively -continuativeness -continuator -continue -continued -continuedly -continuedness -continuer -continuingly -continuist -continuity -continuous -continuously -continuousness -continuum -contise -contline -conto -contorniate -contorsive -contort -contorted -contortedly -contortedness -contortion -contortional -contortionate -contortioned -contortionist -contortionistic -contortive -contour -contourne -contra -contraband -contrabandage -contrabandery -contrabandism -contrabandist -contrabandista -contrabass -contrabassist -contrabasso -contracapitalist -contraception -contraceptionist -contraceptive -contracivil -contraclockwise -contract -contractable -contractant -contractation -contracted -contractedly -contractedness -contractee -contracter -contractibility -contractible -contractibleness -contractibly -contractile -contractility -contraction -contractional -contractionist -contractive -contractively -contractiveness -contractor -contractual -contractually -contracture -contractured -contradebt -contradict -contradictable -contradictedness -contradicter -contradiction -contradictional -contradictious -contradictiously -contradictiousness -contradictive -contradictively -contradictiveness -contradictor -contradictorily -contradictoriness -contradictory -contradiscriminate -contradistinct -contradistinction -contradistinctive -contradistinctively -contradistinctly -contradistinguish -contradivide -contrafacture -contrafagotto -contrafissura -contraflexure -contraflow -contrafocal -contragredience -contragredient -contrahent -contrail -contraindicate -contraindication -contraindicative -contralateral -contralto -contramarque -contranatural -contrantiscion -contraoctave -contraparallelogram -contraplex -contrapolarization -contrapone -contraponend -contrapose -contraposit -contraposita -contraposition -contrapositive -contraprogressist -contraprop -contraproposal -contraption -contraptious -contrapuntal -contrapuntalist -contrapuntally -contrapuntist -contrapunto -contrarational -contraregular -contraregularity -contraremonstrance -contraremonstrant -contrarevolutionary -contrariant -contrariantly -contrariety -contrarily -contrariness -contrarious -contrariously -contrariousness -contrariwise -contrarotation -contrary -contrascriptural -contrast -contrastable -contrastably -contrastedly -contrastimulant -contrastimulation -contrastimulus -contrastingly -contrastive -contrastively -contrastment -contrasty -contrasuggestible -contratabular -contrate -contratempo -contratenor -contravalence -contravallation -contravariant -contravene -contravener -contravention -contraversion -contravindicate -contravindication -contrawise -contrayerva -contrectation -contreface -contrefort -contretemps -contributable -contribute -contribution -contributional -contributive -contributively -contributiveness -contributor -contributorial -contributorship -contributory -contrite -contritely -contriteness -contrition -contriturate -contrivance -contrivancy -contrive -contrivement -contriver -control -controllability -controllable -controllableness -controllably -controller -controllership -controlless -controllingly -controlment -controversial -controversialism -controversialist -controversialize -controversially -controversion -controversional -controversionalism -controversionalist -controversy -controvert -controverter -controvertible -controvertibly -controvertist -contubernal -contubernial -contubernium -contumacious -contumaciously -contumaciousness -contumacity -contumacy -contumelious -contumeliously -contumeliousness -contumely -contund -conturbation -contuse -contusion -contusioned -contusive -conubium -conumerary -conumerous -conundrum -conundrumize -conurbation -conure -conus -conusable -conusance -conusant -conusee -conusor -conutrition -conuzee -conuzor -convalesce -convalescence -convalescency -convalescent -convalescently -convallamarin -convallariaceous -convallarin -convect -convection -convectional -convective -convectively -convector -convenable -convenably -convene -convenee -convener -convenership -convenience -conveniency -convenient -conveniently -convenientness -convent -conventical -conventically -conventicle -conventicler -conventicular -convention -conventional -conventionalism -conventionalist -conventionality -conventionalization -conventionalize -conventionally -conventionary -conventioner -conventionism -conventionist -conventionize -conventual -conventually -converge -convergement -convergence -convergency -convergent -convergescence -converging -conversable -conversableness -conversably -conversance -conversancy -conversant -conversantly -conversation -conversationable -conversational -conversationalist -conversationally -conversationism -conversationist -conversationize -conversative -converse -conversely -converser -conversibility -conversible -conversion -conversional -conversionism -conversionist -conversive -convert -converted -convertend -converter -convertibility -convertible -convertibleness -convertibly -converting -convertingness -convertise -convertism -convertite -convertive -convertor -conveth -convex -convexed -convexedly -convexedness -convexity -convexly -convexness -convey -conveyable -conveyal -conveyance -conveyancer -conveyancing -conveyer -convict -convictable -conviction -convictional -convictism -convictive -convictively -convictiveness -convictment -convictor -convince -convinced -convincedly -convincedness -convincement -convincer -convincibility -convincible -convincing -convincingly -convincingness -convival -convive -convivial -convivialist -conviviality -convivialize -convivially -convocant -convocate -convocation -convocational -convocationally -convocationist -convocative -convocator -convoke -convoker -convolute -convoluted -convolutely -convolution -convolutional -convolutionary -convolutive -convolve -convolvement -convolvulaceous -convolvulad -convolvuli -convolvulic -convolvulin -convolvulinic -convolvulinolic -convoy -convulsant -convulse -convulsedly -convulsibility -convulsible -convulsion -convulsional -convulsionary -convulsionism -convulsionist -convulsive -convulsively -convulsiveness -cony -conycatcher -conyrine -coo -cooba -coodle -cooee -cooer -coof -cooing -cooingly -cooja -cook -cookable -cookbook -cookdom -cookee -cookeite -cooker -cookery -cookhouse -cooking -cookish -cookishly -cookless -cookmaid -cookout -cookroom -cookshack -cookshop -cookstove -cooky -cool -coolant -coolen -cooler -coolerman -coolheaded -coolheadedly -coolheadedness -coolhouse -coolibah -coolie -cooling -coolingly -coolingness -coolish -coolly -coolness -coolth -coolung -coolweed -coolwort -cooly -coom -coomb -coomy -coon -cooncan -coonily -cooniness -coonroot -coonskin -coontail -coontie -coony -coop -cooper -cooperage -coopering -coopery -cooree -coorie -cooruptibly -cooser -coost -coot -cooter -cootfoot -coothay -cootie -cop -copa -copable -copacetic -copaene -copaiba -copaibic -copaivic -copaiye -copal -copalche -copalcocote -copaliferous -copalite -copalm -coparallel -coparcenary -coparcener -coparceny -coparent -copart -copartaker -copartner -copartnership -copartnery -coparty -copassionate -copastor -copastorate -copatain -copatentee -copatriot -copatron -copatroness -cope -copei -copelate -copellidine -copeman -copemate -copen -copending -copenetrate -copepod -copepodan -copepodous -coper -coperception -coperiodic -coperta -copesman -copesmate -copestone -copetitioner -cophasal -cophosis -copiability -copiable -copiapite -copied -copier -copilot -coping -copiopia -copiopsia -copiosity -copious -copiously -copiousness -copis -copist -copita -coplaintiff -coplanar -coplanarity -copleased -coplotter -coploughing -coplowing -copolar -copolymer -copolymerization -copolymerize -coppaelite -copped -copper -copperas -copperbottom -copperer -copperhead -copperheadism -coppering -copperish -copperization -copperize -copperleaf -coppernose -coppernosed -copperplate -copperproof -coppersidesman -copperskin -coppersmith -coppersmithing -copperware -copperwing -copperworks -coppery -copperytailed -coppet -coppice -coppiced -coppicing -coppin -copping -copple -copplecrown -coppled -coppy -copr -copra -coprecipitate -coprecipitation -copremia -copremic -copresbyter -copresence -copresent -coprincipal -coprincipate -coprisoner -coprodaeum -coproduce -coproducer -coprojector -coprolagnia -coprolagnist -coprolalia -coprolaliac -coprolite -coprolith -coprolitic -coprology -copromisor -copromoter -coprophagan -coprophagia -coprophagist -coprophagous -coprophagy -coprophilia -coprophiliac -coprophilic -coprophilism -coprophilous -coprophyte -coproprietor -coproprietorship -coprose -coprostasis -coprosterol -coprozoic -copse -copsewood -copsewooded -copsing -copsy -copter -copula -copulable -copular -copularium -copulate -copulation -copulative -copulatively -copulatory -copunctal -copurchaser -copus -copy -copybook -copycat -copygraph -copygraphed -copyhold -copyholder -copyholding -copyism -copyist -copyman -copyreader -copyright -copyrightable -copyrighter -copywise -coque -coquecigrue -coquelicot -coqueluche -coquet -coquetoon -coquetry -coquette -coquettish -coquettishly -coquettishness -coquicken -coquilla -coquille -coquimbite -coquina -coquita -coquito -cor -cora -corach -coracial -coraciiform -coracine -coracle -coracler -coracoacromial -coracobrachial -coracobrachialis -coracoclavicular -coracocostal -coracohumeral -coracohyoid -coracoid -coracoidal -coracomandibular -coracomorph -coracomorphic -coracopectoral -coracoprocoracoid -coracoradialis -coracoscapular -coracovertebral -coradical -coradicate -corah -coraise -coral -coralberry -coralbush -coraled -coralflower -coralist -corallet -corallic -corallidomous -coralliferous -coralliform -coralligenous -coralligerous -corallike -corallinaceous -coralline -corallite -coralloid -coralloidal -corallum -coralroot -coralwort -coram -coranto -corban -corbeau -corbeil -corbel -corbeling -corbicula -corbiculate -corbiculum -corbie -corbiestep -corbovinum -corbula -corcass -corcir -corcopali -cord -cordage -cordaitaceous -cordaitalean -cordaitean -cordant -cordate -cordately -cordax -corded -cordel -cordeliere -cordelle -corder -cordewane -cordial -cordiality -cordialize -cordially -cordialness -cordiceps -cordicole -cordierite -cordies -cordiform -cordigeri -cordillera -cordilleran -cordiner -cording -cordite -corditis -cordleaf -cordmaker -cordoba -cordon -cordonnet -corduroy -corduroyed -cordwain -cordwainer -cordwainery -cordwood -cordy -cordyl -core -corebel -coreceiver -coreciprocal -corectome -corectomy -corector -cored -coredeem -coredeemer -coredemptress -coreductase -coreflexed -coregence -coregency -coregent -coregnancy -coregnant -coregonid -coregonine -coregonoid -coreid -coreign -coreigner -corejoice -coreless -coreligionist -corella -corelysis -coremaker -coremaking -coremium -coremorphosis -corenounce -coreometer -coreplastic -coreplasty -corer -coresidence -coresidual -coresign -coresonant -coresort -corespect -corespondency -corespondent -coretomy -coreveler -coreveller -corevolve -corf -corge -corgi -coriaceous -corial -coriamyrtin -coriander -coriandrol -coriariaceous -coriin -corindon -coring -corinne -coriparian -corium -cork -corkage -corkboard -corke -corked -corker -corkiness -corking -corkish -corkite -corkmaker -corkmaking -corkscrew -corkscrewy -corkwing -corkwood -corky -corm -cormel -cormidium -cormoid -cormophyte -cormophytic -cormorant -cormous -cormus -corn -cornaceous -cornage -cornbell -cornberry -cornbin -cornbinks -cornbird -cornbole -cornbottle -cornbrash -corncake -corncob -corncracker -corncrib -corncrusher -corndodger -cornea -corneagen -corneal -cornein -corneitis -cornel -cornelian -cornemuse -corneocalcareous -corneosclerotic -corneosiliceous -corneous -corner -cornerbind -cornered -cornerer -cornerpiece -cornerstone -cornerways -cornerwise -cornet -cornetcy -cornettino -cornettist -corneule -corneum -cornfield -cornfloor -cornflower -corngrower -cornhouse -cornhusk -cornhusker -cornhusking -cornic -cornice -cornicle -corniculate -corniculer -corniculum -cornific -cornification -cornified -corniform -cornigerous -cornin -corning -corniplume -cornland -cornless -cornloft -cornmaster -cornmonger -cornopean -cornpipe -cornrick -cornroot -cornstalk -cornstarch -cornstook -cornu -cornual -cornuate -cornuated -cornubianite -cornucopia -cornucopian -cornucopiate -cornule -cornulite -cornupete -cornute -cornuted -cornutine -cornuto -cornwallis -cornwallite -corny -coroa -corocleisis -corodiary -corodiastasis -corodiastole -corody -corol -corolla -corollaceous -corollarial -corollarially -corollary -corollate -corollated -corolliferous -corolliform -corollike -corolline -corollitic -corometer -corona -coronach -coronad -coronadite -coronae -coronagraph -coronagraphic -coronal -coronale -coronaled -coronally -coronamen -coronary -coronate -coronated -coronation -coronatorial -coroner -coronership -coronet -coroneted -coronetted -coronetty -coroniform -coronillin -coronion -coronitis -coronium -coronize -coronobasilar -coronofacial -coronofrontal -coronoid -coronule -coroparelcysis -coroplast -coroplasta -coroplastic -coroscopy -corotomy -corozo -corp -corpora -corporal -corporalism -corporality -corporally -corporalship -corporas -corporate -corporately -corporateness -corporation -corporational -corporationer -corporationism -corporative -corporator -corporature -corporeal -corporealist -corporeality -corporealization -corporealize -corporeally -corporealness -corporeals -corporeity -corporeous -corporification -corporify -corporosity -corposant -corps -corpsbruder -corpse -corpsman -corpulence -corpulency -corpulent -corpulently -corpulentness -corpus -corpuscle -corpuscular -corpuscularian -corpuscularity -corpusculated -corpuscule -corpusculous -corpusculum -corrade -corradial -corradiate -corradiation -corral -corrasion -corrasive -correal -correality -correct -correctable -correctant -corrected -correctedness -correctible -correcting -correctingly -correction -correctional -correctionalist -correctioner -correctitude -corrective -correctively -correctiveness -correctly -correctness -corrector -correctorship -correctress -correctrice -corregidor -correlatable -correlate -correlated -correlation -correlational -correlative -correlatively -correlativeness -correlativism -correlativity -correligionist -corrente -correption -corresol -correspond -correspondence -correspondency -correspondent -correspondential -correspondentially -correspondently -correspondentship -corresponder -corresponding -correspondingly -corresponsion -corresponsive -corresponsively -corridor -corridored -corrie -corrige -corrigenda -corrigendum -corrigent -corrigibility -corrigible -corrigibleness -corrigibly -corrival -corrivality -corrivalry -corrivalship -corrivate -corrivation -corrobboree -corroborant -corroborate -corroboration -corroborative -corroboratively -corroborator -corroboratorily -corroboratory -corroboree -corrode -corrodent -corroder -corrodiary -corrodibility -corrodible -corrodier -corroding -corrosibility -corrosible -corrosibleness -corrosion -corrosional -corrosive -corrosively -corrosiveness -corrosivity -corrugate -corrugated -corrugation -corrugator -corrupt -corrupted -corruptedly -corruptedness -corrupter -corruptful -corruptibility -corruptible -corruptibleness -corrupting -corruptingly -corruption -corruptionist -corruptive -corruptively -corruptly -corruptness -corruptor -corruptress -corsac -corsage -corsaint -corsair -corse -corselet -corsepresent -corsesque -corset -corseting -corsetless -corsetry -corsie -corsite -corta -cortege -cortex -cortez -cortical -cortically -corticate -corticated -corticating -cortication -cortices -corticiferous -corticiform -corticifugal -corticifugally -corticipetal -corticipetally -corticoafferent -corticoefferent -corticoline -corticopeduncular -corticose -corticospinal -corticosterone -corticostriate -corticous -cortin -cortina -cortinarious -cortinate -cortisone -cortlandtite -coruco -coruler -corundophilite -corundum -corupay -coruscant -coruscate -coruscation -corver -corvette -corvetto -corviform -corvillosum -corvina -corvine -corvoid -corybantiasm -corybantic -corybantish -corybulbin -corybulbine -corycavamine -corycavidin -corycavidine -corycavine -corydalin -corydaline -corydine -coryl -corylaceous -corylin -corymb -corymbed -corymbiate -corymbiated -corymbiferous -corymbiform -corymbose -corymbous -corynebacterial -corynine -corynocarpaceous -coryphaenid -coryphaenoid -coryphaeus -coryphee -coryphene -coryphodont -coryphylly -corytuberine -coryza -cos -cosalite -cosaque -cosavior -coscet -coscinomancy -coscoroba -coseasonal -coseat -cosec -cosecant -cosech -cosectarian -cosectional -cosegment -coseism -coseismal -coseismic -cosenator -cosentiency -cosentient -coservant -cosession -coset -cosettler -cosh -cosharer -cosheath -cosher -cosherer -coshering -coshery -cosignatory -cosigner -cosignitary -cosily -cosinage -cosine -cosiness -cosingular -cosinusoid -cosmecology -cosmesis -cosmetic -cosmetical -cosmetically -cosmetician -cosmetiste -cosmetological -cosmetologist -cosmetology -cosmic -cosmical -cosmicality -cosmically -cosmism -cosmist -cosmocracy -cosmocrat -cosmocratic -cosmogenesis -cosmogenetic -cosmogenic -cosmogeny -cosmogonal -cosmogoner -cosmogonic -cosmogonical -cosmogonist -cosmogonize -cosmogony -cosmographer -cosmographic -cosmographical -cosmographically -cosmographist -cosmography -cosmolabe -cosmolatry -cosmologic -cosmological -cosmologically -cosmologist -cosmology -cosmometry -cosmopathic -cosmoplastic -cosmopoietic -cosmopolicy -cosmopolis -cosmopolitan -cosmopolitanism -cosmopolitanization -cosmopolitanize -cosmopolitanly -cosmopolite -cosmopolitic -cosmopolitical -cosmopolitics -cosmopolitism -cosmorama -cosmoramic -cosmorganic -cosmos -cosmoscope -cosmosophy -cosmosphere -cosmotellurian -cosmotheism -cosmotheist -cosmotheistic -cosmothetic -cosmotron -cosmozoan -cosmozoic -cosmozoism -cosonant -cosounding -cosovereign -cosovereignty -cospecies -cospecific -cosphered -cosplendor -cosplendour -coss -cossas -cosse -cosset -cossette -cossid -cossnent -cossyrite -cost -costa -costal -costalgia -costally -costander -costar -costard -costate -costated -costean -costeaning -costectomy -costellate -coster -costerdom -costermonger -costicartilage -costicartilaginous -costicervical -costiferous -costiform -costing -costipulator -costispinal -costive -costively -costiveness -costless -costlessness -costliness -costly -costmary -costoabdominal -costoapical -costocentral -costochondral -costoclavicular -costocolic -costocoracoid -costodiaphragmatic -costogenic -costoinferior -costophrenic -costopleural -costopneumopexy -costopulmonary -costoscapular -costosternal -costosuperior -costothoracic -costotome -costotomy -costotrachelian -costotransversal -costotransverse -costovertebral -costoxiphoid -costraight -costrel -costula -costulation -costume -costumer -costumery -costumic -costumier -costumiere -costuming -costumist -costusroot -cosubject -cosubordinate -cosuffer -cosufferer -cosuggestion -cosuitor -cosurety -cosustain -coswearer -cosy -cosymmedian -cot -cotangent -cotangential -cotarius -cotarnine -cotch -cote -coteful -coteline -coteller -cotemporane -cotemporanean -cotemporaneous -cotemporaneously -cotemporary -cotenancy -cotenant -cotenure -coterell -coterie -coterminous -coth -cothamore -cothe -cotheorist -cothish -cothon -cothurn -cothurnal -cothurnate -cothurned -cothurnian -cothurnus -cothy -cotidal -cotillage -cotillion -cotingid -cotingoid -cotise -cotitular -cotland -cotman -coto -cotoin -cotonier -cotorment -cotoro -cotorture -cotquean -cotraitor -cotransfuse -cotranslator -cotranspire -cotransubstantiate -cotrine -cotripper -cotrustee -cotset -cotsetla -cotsetle -cotta -cottabus -cottage -cottaged -cottager -cottagers -cottagey -cotte -cotted -cotter -cotterel -cotterite -cotterway -cottid -cottier -cottierism -cottiform -cottoid -cotton -cottonade -cottonbush -cottonee -cottoneer -cottoner -cottonization -cottonize -cottonless -cottonmouth -cottonocracy -cottonseed -cottontail -cottontop -cottonweed -cottonwood -cottony -cotty -cotuit -cotula -cotunnite -cotutor -cotwin -cotwinned -cotwist -cotyla -cotylar -cotyledon -cotyledonal -cotyledonar -cotyledonary -cotyledonous -cotyliform -cotyligerous -cotyliscus -cotyloid -cotylophorous -cotylopubic -cotylosacral -cotylosaur -cotylosaurian -cotype -couac -coucal -couch -couchancy -couchant -couched -couchee -coucher -couching -couchmaker -couchmaking -couchmate -couchy -coude -coudee -coue -cougar -cough -cougher -coughroot -coughweed -coughwort -cougnar -coul -could -couldron -coulee -coulisse -coulomb -coulometer -coulterneb -coulure -couma -coumalic -coumalin -coumara -coumaran -coumarate -coumaric -coumarilic -coumarin -coumarinic -coumarone -coumarou -council -councilist -councilman -councilmanic -councilor -councilorship -councilwoman -counderstand -counite -couniversal -counsel -counselable -counselee -counselful -counselor -counselorship -count -countable -countableness -countably -countdom -countenance -countenancer -counter -counterabut -counteraccusation -counteracquittance -counteract -counteractant -counteracter -counteracting -counteractingly -counteraction -counteractive -counteractively -counteractivity -counteractor -counteraddress -counteradvance -counteradvantage -counteradvice -counteradvise -counteraffirm -counteraffirmation -counteragency -counteragent -counteragitate -counteragitation -counteralliance -counterambush -counterannouncement -counteranswer -counterappeal -counterappellant -counterapproach -counterapse -counterarch -counterargue -counterargument -counterartillery -counterassertion -counterassociation -counterassurance -counterattack -counterattestation -counterattired -counterattraction -counterattractive -counterattractively -counteraverment -counteravouch -counteravouchment -counterbalance -counterbarrage -counterbase -counterbattery -counterbeating -counterbend -counterbewitch -counterbid -counterblast -counterblow -counterbond -counterborder -counterbore -counterboycott -counterbrace -counterbranch -counterbrand -counterbreastwork -counterbuff -counterbuilding -countercampaign -countercarte -countercause -counterchange -counterchanged -countercharge -countercharm -countercheck -countercheer -counterclaim -counterclaimant -counterclockwise -countercolored -countercommand -countercompetition -countercomplaint -countercompony -countercondemnation -counterconquest -counterconversion -countercouchant -countercoupe -countercourant -countercraft -countercriticism -countercross -countercry -countercurrent -countercurrently -countercurrentwise -counterdance -counterdash -counterdecision -counterdeclaration -counterdecree -counterdefender -counterdemand -counterdemonstration -counterdeputation -counterdesire -counterdevelopment -counterdifficulty -counterdigged -counterdike -counterdiscipline -counterdisengage -counterdisengagement -counterdistinction -counterdistinguish -counterdoctrine -counterdogmatism -counterdraft -counterdrain -counterdrive -counterearth -counterefficiency -countereffort -counterembattled -counterembowed -counterenamel -counterend -counterenergy -counterengagement -counterengine -counterenthusiasm -counterentry -counterequivalent -counterermine -counterespionage -counterestablishment -counterevidence -counterexaggeration -counterexcitement -counterexcommunication -counterexercise -counterexplanation -counterexposition -counterexpostulation -counterextend -counterextension -counterfact -counterfallacy -counterfaller -counterfeit -counterfeiter -counterfeitly -counterfeitment -counterfeitness -counterferment -counterfessed -counterfire -counterfix -counterflange -counterflashing -counterflight -counterflory -counterflow -counterflux -counterfoil -counterforce -counterformula -counterfort -counterfugue -countergabble -countergabion -countergambit -countergarrison -countergauge -countergauger -countergift -countergirded -counterglow -counterguard -counterhaft -counterhammering -counterhypothesis -counteridea -counterideal -counterimagination -counterimitate -counterimitation -counterimpulse -counterindentation -counterindented -counterindicate -counterindication -counterinfluence -counterinsult -counterintelligence -counterinterest -counterinterpretation -counterintrigue -counterinvective -counterirritant -counterirritate -counterirritation -counterjudging -counterjumper -counterlath -counterlathing -counterlatration -counterlaw -counterleague -counterlegislation -counterlife -counterlocking -counterlode -counterlove -counterly -countermachination -counterman -countermand -countermandable -countermaneuver -countermanifesto -countermarch -countermark -countermarriage -countermeasure -countermeet -countermessage -countermigration -countermine -countermission -countermotion -countermount -countermove -countermovement -countermure -countermutiny -counternaiant -counternarrative -counternatural -counternecromancy -counternoise -counternotice -counterobjection -counterobligation -counteroffensive -counteroffer -counteropening -counteropponent -counteropposite -counterorator -counterorder -counterorganization -counterpaled -counterpaly -counterpane -counterpaned -counterparadox -counterparallel -counterparole -counterparry -counterpart -counterpassant -counterpassion -counterpenalty -counterpendent -counterpetition -counterpicture -counterpillar -counterplan -counterplay -counterplayer -counterplea -counterplead -counterpleading -counterplease -counterplot -counterpoint -counterpointe -counterpointed -counterpoise -counterpoison -counterpole -counterponderate -counterpose -counterposition -counterposting -counterpotence -counterpotency -counterpotent -counterpractice -counterpray -counterpreach -counterpreparation -counterpressure -counterprick -counterprinciple -counterprocess -counterproject -counterpronunciamento -counterproof -counterpropaganda -counterpropagandize -counterprophet -counterproposal -counterproposition -counterprotection -counterprotest -counterprove -counterpull -counterpunch -counterpuncture -counterpush -counterquartered -counterquarterly -counterquery -counterquestion -counterquip -counterradiation -counterraid -counterraising -counterrampant -counterrate -counterreaction -counterreason -counterreckoning -counterrecoil -counterreconnaissance -counterrefer -counterreflected -counterreform -counterreformation -counterreligion -counterremonstrant -counterreply -counterreprisal -counterresolution -counterrestoration -counterretreat -counterrevolution -counterrevolutionary -counterrevolutionist -counterrevolutionize -counterriposte -counterroll -counterround -counterruin -countersale -countersalient -counterscale -counterscalloped -counterscarp -counterscoff -countersconce -counterscrutiny -countersea -counterseal -countersecure -countersecurity -counterselection -countersense -counterservice -countershade -countershaft -countershafting -countershear -countershine -countershout -counterside -countersiege -countersign -countersignal -countersignature -countersink -countersleight -counterslope -countersmile -countersnarl -counterspying -counterstain -counterstamp -counterstand -counterstatant -counterstatement -counterstatute -counterstep -counterstimulate -counterstimulation -counterstimulus -counterstock -counterstratagem -counterstream -counterstrike -counterstroke -counterstruggle -countersubject -countersuggestion -countersuit -countersun -countersunk -countersurprise -counterswing -countersworn -countersympathy -countersynod -countertack -countertail -countertally -countertaste -countertechnicality -countertendency -countertenor -counterterm -counterterror -countertheme -countertheory -counterthought -counterthreat -counterthrust -counterthwarting -countertierce -countertime -countertouch -countertraction -countertrades -countertransference -countertranslation -countertraverse -countertreason -countertree -countertrench -countertrespass -countertrippant -countertripping -countertruth -countertug -counterturn -counterturned -countertype -countervail -countervair -countervairy -countervallation -countervaunt -countervene -countervengeance -countervenom -countervibration -counterview -countervindication -countervolition -countervolley -countervote -counterwager -counterwall -counterwarmth -counterwave -counterweigh -counterweight -counterweighted -counterwheel -counterwill -counterwilling -counterwind -counterwitness -counterword -counterwork -counterworker -counterwrite -countess -countfish -counting -countinghouse -countless -countor -countrified -countrifiedness -country -countryfolk -countryman -countrypeople -countryseat -countryside -countryward -countrywoman -countship -county -coup -coupage -coupe -couped -coupee -coupelet -couper -couple -coupled -couplement -coupler -coupleress -couplet -coupleteer -coupling -coupon -couponed -couponless -coupstick -coupure -courage -courageous -courageously -courageousness -courager -courant -courante -courap -couratari -courb -courbache -courbaril -courbash -courge -courida -courier -couril -courlan -course -coursed -courser -coursing -court -courtbred -courtcraft -courteous -courteously -courteousness -courtepy -courter -courtesan -courtesanry -courtesanship -courtesy -courtezanry -courtezanship -courthouse -courtier -courtierism -courtierly -courtiership -courtin -courtless -courtlet -courtlike -courtliness -courtling -courtly -courtman -courtroom -courtship -courtyard -courtzilite -couscous -couscousou -couseranite -cousin -cousinage -cousiness -cousinhood -cousinly -cousinry -cousinship -cousiny -coussinet -coustumier -coutel -coutelle -couter -couth -couthie -couthily -couthiness -couthless -coutil -coutumier -couvade -couxia -covado -covalence -covalent -covariable -covariance -covariant -covariation -covassal -cove -coved -covelline -covellite -covenant -covenantal -covenanted -covenantee -covenanter -covenanting -covenantor -covent -coventrate -coventrize -cover -coverage -coveralls -coverchief -covercle -covered -coverer -covering -coverless -coverlet -coverlid -coversed -coverside -coversine -coverslut -covert -covertical -covertly -covertness -coverture -covet -covetable -coveter -coveting -covetingly -covetiveness -covetous -covetously -covetousness -covey -covibrate -covibration -covid -covillager -covin -coving -covinous -covinously -covisit -covisitor -covite -covolume -covotary -cow -cowal -coward -cowardice -cowardliness -cowardly -cowardness -cowardy -cowbane -cowbell -cowberry -cowbind -cowbird -cowboy -cowcatcher -cowdie -coween -cower -cowfish -cowgate -cowgram -cowhage -cowheart -cowhearted -cowheel -cowherb -cowherd -cowhide -cowhiding -cowhorn -cowish -cowitch -cowkeeper -cowl -cowle -cowled -cowleech -cowleeching -cowlick -cowlicks -cowlike -cowling -cowlstaff -cowman -cowpath -cowpea -cowpen -cowperitis -cowpock -cowpox -cowpuncher -cowquake -cowrie -cowroid -cowshed -cowskin -cowslip -cowslipped -cowsucker -cowtail -cowthwort -cowtongue -cowweed -cowwheat -cowy -cowyard -cox -coxa -coxal -coxalgia -coxalgic -coxankylometer -coxarthritis -coxarthrocace -coxarthropathy -coxbones -coxcomb -coxcombess -coxcombhood -coxcombic -coxcombical -coxcombicality -coxcombically -coxcombity -coxcombry -coxcomby -coxcomical -coxcomically -coxite -coxitis -coxocerite -coxoceritic -coxodynia -coxofemoral -coxopodite -coxswain -coxy -coy -coyan -coydog -coyish -coyishness -coyly -coyness -coynye -coyo -coyol -coyote -coyotillo -coyoting -coypu -coyure -coz -coze -cozen -cozenage -cozener -cozening -cozeningly -cozier -cozily -coziness -cozy -crab -crabbed -crabbedly -crabbedness -crabber -crabbery -crabbing -crabby -crabcatcher -crabeater -craber -crabhole -crablet -crablike -crabman -crabmill -crabsidle -crabstick -crabweed -crabwise -crabwood -crack -crackable -crackajack -crackbrain -crackbrained -crackbrainedness -crackdown -cracked -crackedness -cracker -crackerberry -crackerjack -crackers -crackhemp -crackiness -cracking -crackjaw -crackle -crackled -crackless -crackleware -crackling -crackly -crackmans -cracknel -crackpot -crackskull -cracksman -cracky -cracovienne -craddy -cradge -cradle -cradleboard -cradlechild -cradlefellow -cradleland -cradlelike -cradlemaker -cradlemaking -cradleman -cradlemate -cradler -cradleside -cradlesong -cradletime -cradling -craft -craftily -craftiness -craftless -craftsman -craftsmanship -craftsmaster -craftswoman -craftwork -craftworker -crafty -crag -craggan -cragged -craggedness -craggily -cragginess -craggy -craglike -cragsman -cragwork -craichy -craigmontite -crain -craisey -craizey -crajuru -crake -crakefeet -crakow -cram -cramasie -crambambulee -crambambuli -crambe -cramberry -crambid -cramble -crambly -crambo -crammer -cramp -cramped -crampedness -cramper -crampet -crampfish -cramping -crampingly -crampon -cramponnee -crampy -cran -cranage -cranberry -crance -crandall -crandallite -crane -cranelike -craneman -craner -cranesman -craneway -craney -crania -craniacromial -craniad -cranial -cranially -cranian -craniate -cranic -craniectomy -craniocele -craniocerebral -cranioclasis -cranioclasm -cranioclast -cranioclasty -craniodidymus -craniofacial -craniognomic -craniognomy -craniognosy -craniograph -craniographer -craniography -craniological -craniologically -craniologist -craniology -craniomalacia -craniomaxillary -craniometer -craniometric -craniometrical -craniometrically -craniometrist -craniometry -craniopagus -craniopathic -craniopathy -craniopharyngeal -craniophore -cranioplasty -craniopuncture -craniorhachischisis -craniosacral -cranioschisis -cranioscopical -cranioscopist -cranioscopy -craniospinal -craniostenosis -craniostosis -craniotabes -craniotome -craniotomy -craniotopography -craniotympanic -craniovertebral -cranium -crank -crankbird -crankcase -cranked -cranker -crankery -crankily -crankiness -crankle -crankless -crankly -crankman -crankous -crankpin -crankshaft -crankum -cranky -crannage -crannied -crannock -crannog -crannoger -cranny -cranreuch -crantara -crants -crap -crapaud -crapaudine -crape -crapefish -crapehanger -crapelike -crappie -crappin -crapple -crappo -craps -crapshooter -crapulate -crapulence -crapulent -crapulous -crapulously -crapulousness -crapy -craquelure -crare -crash -crasher -crasis -craspedal -craspedodromous -craspedon -craspedotal -craspedote -crass -crassamentum -crassier -crassilingual -crassitude -crassly -crassness -crassulaceous -cratch -cratchens -cratches -crate -crateful -cratemaker -cratemaking -crateman -crater -crateral -cratered -crateriform -crateris -craterkin -craterless -craterlet -craterlike -craterous -craticular -cratometer -cratometric -cratometry -craunch -craunching -craunchingly -cravat -crave -craven -cravenette -cravenhearted -cravenly -cravenness -craver -craving -cravingly -cravingness -cravo -craw -crawberry -crawdad -crawfish -crawfoot -crawful -crawl -crawler -crawlerize -crawley -crawleyroot -crawling -crawlingly -crawlsome -crawly -crawm -crawtae -crayer -crayfish -crayon -crayonist -crayonstone -craze -crazed -crazedly -crazedness -crazily -craziness -crazingmill -crazy -crazycat -crazyweed -crea -creagh -creaght -creak -creaker -creakily -creakiness -creakingly -creaky -cream -creambush -creamcake -creamcup -creamer -creamery -creameryman -creamfruit -creamily -creaminess -creamless -creamlike -creammaker -creammaking -creamometer -creamsacs -creamware -creamy -creance -creancer -creant -crease -creaseless -creaser -creashaks -creasing -creasy -creat -creatable -create -createdness -creatic -creatine -creatinephosphoric -creatinine -creatininemia -creatinuria -creation -creational -creationary -creationism -creationist -creationistic -creative -creatively -creativeness -creativity -creatophagous -creator -creatorhood -creatorrhea -creatorship -creatotoxism -creatress -creatrix -creatural -creature -creaturehood -creatureless -creatureliness -creatureling -creaturely -creatureship -creaturize -crebricostate -crebrisulcate -crebrity -crebrous -creche -creddock -credence -credencive -credenciveness -credenda -credensive -credensiveness -credent -credential -credently -credenza -credibility -credible -credibleness -credibly -credit -creditability -creditable -creditableness -creditably -creditive -creditless -creditor -creditorship -creditress -creditrix -crednerite -credulity -credulous -credulously -credulousness -cree -creed -creedal -creedalism -creedalist -creeded -creedist -creedite -creedless -creedlessness -creedmore -creedsman -creek -creeker -creekfish -creekside -creekstuff -creeky -creel -creeler -creem -creen -creep -creepage -creeper -creepered -creeperless -creephole -creepie -creepiness -creeping -creepingly -creepmouse -creepmousy -creepy -creese -creesh -creeshie -creeshy -creirgist -cremaster -cremasterial -cremasteric -cremate -cremation -cremationism -cremationist -cremator -crematorial -crematorium -crematory -crembalum -cremnophobia -cremocarp -cremometer -cremone -cremor -cremorne -cremule -crena -crenate -crenated -crenately -crenation -crenature -crenel -crenelate -crenelated -crenelation -crenele -creneled -crenelet -crenellate -crenellation -crenic -crenitic -crenology -crenotherapy -crenula -crenulate -crenulated -crenulation -creodont -creole -creoleize -creolian -creolism -creolization -creolize -creophagia -creophagism -creophagist -creophagous -creophagy -creosol -creosote -creosoter -creosotic -crepance -crepe -crepehanger -crepine -crepiness -crepitaculum -crepitant -crepitate -crepitation -crepitous -crepitus -crepon -crept -crepuscle -crepuscular -crepuscule -crepusculine -crepusculum -crepy -cresamine -crescendo -crescent -crescentade -crescentader -crescentic -crescentiform -crescentlike -crescentoid -crescentwise -crescive -crescograph -crescographic -cresegol -cresol -cresolin -cresorcinol -cresotate -cresotic -cresotinic -cresoxide -cresoxy -cresphontes -cress -cressed -cresselle -cresset -cresson -cressweed -cresswort -cressy -crest -crested -crestfallen -crestfallenly -crestfallenness -cresting -crestless -crestline -crestmoreite -cresyl -cresylate -cresylene -cresylic -cresylite -creta -cretaceous -cretaceously -cretefaction -cretic -cretification -cretify -cretin -cretinic -cretinism -cretinization -cretinize -cretinoid -cretinous -cretion -cretionary -cretonne -crevalle -crevasse -crevice -creviced -crew -crewel -crewelist -crewellery -crewelwork -crewer -crewless -crewman -crib -cribbage -cribber -cribbing -cribble -cribellum -cribo -cribral -cribrate -cribrately -cribration -cribriform -cribrose -cribwork -cric -cricetine -crick -cricket -cricketer -cricketing -crickety -crickey -crickle -cricoarytenoid -cricoid -cricopharyngeal -cricothyreoid -cricothyreotomy -cricothyroid -cricothyroidean -cricotomy -cricotracheotomy -cried -crier -criey -crig -crile -crime -crimeful -crimeless -crimelessness -crimeproof -criminal -criminaldom -criminalese -criminalism -criminalist -criminalistic -criminalistician -criminalistics -criminality -criminally -criminalness -criminaloid -criminate -crimination -criminative -criminator -criminatory -crimine -criminogenesis -criminogenic -criminologic -criminological -criminologist -criminology -criminosis -criminous -criminously -criminousness -crimogenic -crimp -crimpage -crimper -crimping -crimple -crimpness -crimpy -crimson -crimsonly -crimsonness -crimsony -crin -crinal -crinanite -crinated -crinatory -crine -crined -crinet -cringe -cringeling -cringer -cringing -cringingly -cringingness -cringle -crinicultural -criniculture -criniferous -crinigerous -criniparous -crinite -crinitory -crinivorous -crink -crinkle -crinkleroot -crinkly -crinoid -crinoidal -crinoidean -crinoline -crinose -crinosity -crinula -criobolium -criocephalus -crioceratite -crioceratitic -criophore -criosphinx -cripes -crippingly -cripple -crippledom -crippleness -crippler -crippling -cripply -crises -crisic -crisis -crisp -crispate -crispated -crispation -crispature -crisped -crisper -crispily -crispine -crispiness -crisping -crisply -crispness -crispy -criss -crissal -crisscross -crissum -crista -cristate -cristiform -cristobalite -critch -criteria -criteriology -criterion -criterional -criterium -crith -crithmene -crithomancy -critic -critical -criticality -critically -criticalness -criticaster -criticasterism -criticastry -criticisable -criticism -criticist -criticizable -criticize -criticizer -criticizingly -critickin -criticship -criticule -critique -critling -crizzle -cro -croak -croaker -croakily -croakiness -croaky -croc -crocard -croceic -crocein -croceine -croceous -crocetin -croche -crochet -crocheter -crocheting -croci -crocidolite -crocin -crock -crocker -crockery -crockeryware -crocket -crocketed -crocky -crocodile -crocodilian -crocodiline -crocodilite -crocodiloid -crocoisite -crocoite -croconate -croconic -crocus -crocused -croft -crofter -crofterization -crofterize -crofting -croftland -croisette -croissante -cromaltite -crome -cromfordite -cromlech -cromorna -cromorne -crone -croneberry -cronet -cronish -cronk -cronkness -cronstedtite -crony -crood -croodle -crook -crookback -crookbacked -crookbill -crookbilled -crooked -crookedly -crookedness -crooken -crookesite -crookfingered -crookheaded -crookkneed -crookle -crooklegged -crookneck -crooknecked -crooknosed -crookshouldered -crooksided -crooksterned -crooktoothed -crool -croon -crooner -crooning -crooningly -crop -crophead -cropland -cropman -croppa -cropper -croppie -cropplecrown -croppy -cropshin -cropsick -cropsickness -cropweed -croquet -croquette -crore -crosa -crosier -crosiered -crosnes -cross -crossability -crossable -crossarm -crossband -crossbar -crossbeak -crossbeam -crossbelt -crossbill -crossbolt -crossbolted -crossbones -crossbow -crossbowman -crossbred -crossbreed -crosscurrent -crosscurrented -crosscut -crosscutter -crosscutting -crosse -crossed -crosser -crossette -crossfall -crossfish -crossflow -crossflower -crossfoot -crosshackle -crosshand -crosshatch -crosshaul -crosshauling -crosshead -crossing -crossite -crossjack -crosslegs -crosslet -crossleted -crosslight -crosslighted -crossline -crossly -crossness -crossopodia -crossopterygian -crossosomataceous -crossover -crosspatch -crosspath -crosspiece -crosspoint -crossrail -crossroad -crossroads -crossrow -crossruff -crosstail -crosstie -crosstied -crosstoes -crosstrack -crosstree -crosswalk -crossway -crossways -crossweb -crossweed -crosswise -crossword -crosswort -crostarie -crotal -crotalic -crotaliform -crotaline -crotalism -crotalo -crotaloid -crotalum -crotaphic -crotaphion -crotaphite -crotaphitic -crotch -crotched -crotchet -crotcheteer -crotchetiness -crotchety -crotchy -crotin -crotonaldehyde -crotonate -crotonic -crotonization -crotonyl -crotonylene -crottels -crottle -crotyl -crouch -crouchant -crouched -croucher -crouching -crouchingly -crounotherapy -croup -croupade -croupal -croupe -crouperbush -croupier -croupily -croupiness -croupous -croupy -crouse -crousely -crout -croute -crouton -crow -crowbait -crowbar -crowberry -crowbill -crowd -crowded -crowdedly -crowdedness -crowder -crowdweed -crowdy -crower -crowflower -crowfoot -crowfooted -crowhop -crowing -crowingly -crowkeeper -crowl -crown -crownbeard -crowned -crowner -crownless -crownlet -crownling -crownmaker -crownwork -crownwort -crowshay -crowstep -crowstepped -crowstick -crowstone -crowtoe -croy -croyden -croydon -croze -crozer -crozzle -crozzly -crubeen -cruce -cruces -crucethouse -cruche -crucial -cruciality -crucially -crucian -cruciate -cruciately -cruciation -crucible -crucifer -cruciferous -crucificial -crucified -crucifier -crucifix -crucifixion -cruciform -cruciformity -cruciformly -crucify -crucigerous -crucilly -crucily -cruck -crude -crudely -crudeness -crudity -crudwort -cruel -cruelhearted -cruelize -cruelly -cruelness -cruels -cruelty -cruent -cruentation -cruet -cruety -cruise -cruiser -cruisken -cruive -cruller -crum -crumb -crumbable -crumbcloth -crumber -crumble -crumblement -crumblet -crumbliness -crumblingness -crumblings -crumbly -crumby -crumen -crumenal -crumlet -crummie -crummier -crummiest -crummock -crummy -crump -crumper -crumpet -crumple -crumpled -crumpler -crumpling -crumply -crumpy -crunch -crunchable -crunchiness -crunching -crunchingly -crunchingness -crunchweed -crunchy -crunk -crunkle -crunodal -crunode -crunt -cruor -crupper -crural -crureus -crurogenital -cruroinguinal -crurotarsal -crus -crusade -crusader -crusado -cruse -crush -crushability -crushable -crushed -crusher -crushing -crushingly -crusie -crusily -crust -crusta -crustaceal -crustacean -crustaceological -crustaceologist -crustaceology -crustaceous -crustade -crustal -crustalogical -crustalogist -crustalogy -crustate -crustated -crustation -crusted -crustedly -cruster -crustific -crustification -crustily -crustiness -crustless -crustose -crustosis -crusty -crutch -crutched -crutcher -crutching -crutchlike -cruth -crutter -crux -cruzeiro -cry -cryable -cryaesthesia -cryalgesia -cryanesthesia -crybaby -cryesthesia -crying -cryingly -crymodynia -crymotherapy -cryoconite -cryogen -cryogenic -cryogenics -cryogeny -cryohydrate -cryohydric -cryolite -cryometer -cryophile -cryophilic -cryophoric -cryophorus -cryophyllite -cryophyte -cryoplankton -cryoscope -cryoscopic -cryoscopy -cryosel -cryostase -cryostat -crypt -crypta -cryptal -cryptamnesia -cryptamnesic -cryptanalysis -cryptanalyst -cryptarch -cryptarchy -crypted -cryptesthesia -cryptesthetic -cryptic -cryptical -cryptically -cryptoagnostic -cryptobatholithic -cryptobranch -cryptobranchiate -cryptocarp -cryptocarpic -cryptocarpous -cryptocephalous -cryptocerous -cryptoclastic -cryptococci -cryptococcic -cryptococcus -cryptocommercial -cryptocrystalline -cryptocrystallization -cryptodeist -cryptodiran -cryptodire -cryptodirous -cryptodouble -cryptodynamic -cryptogam -cryptogamian -cryptogamic -cryptogamical -cryptogamist -cryptogamous -cryptogamy -cryptogenetic -cryptogenic -cryptogenous -cryptoglioma -cryptogram -cryptogrammatic -cryptogrammatical -cryptogrammatist -cryptogrammic -cryptograph -cryptographal -cryptographer -cryptographic -cryptographical -cryptographically -cryptographist -cryptography -cryptoheresy -cryptoheretic -cryptoinflationist -cryptolite -cryptologist -cryptology -cryptolunatic -cryptomere -cryptomerous -cryptomnesia -cryptomnesic -cryptomonad -cryptonema -cryptoneurous -cryptonym -cryptonymous -cryptopapist -cryptoperthite -cryptophthalmos -cryptophyte -cryptopine -cryptoporticus -cryptoproselyte -cryptoproselytism -cryptopyic -cryptopyrrole -cryptorchid -cryptorchidism -cryptorchis -cryptorrhesis -cryptorrhetic -cryptoscope -cryptoscopy -cryptosplenetic -cryptostoma -cryptostomate -cryptostome -cryptous -cryptovalence -cryptovalency -cryptozonate -cryptozygosity -cryptozygous -crystal -crystallic -crystalliferous -crystalliform -crystalligerous -crystallin -crystalline -crystallinity -crystallite -crystallitic -crystallitis -crystallizability -crystallizable -crystallization -crystallize -crystallized -crystallizer -crystalloblastic -crystallochemical -crystallochemistry -crystallogenesis -crystallogenetic -crystallogenic -crystallogenical -crystallogeny -crystallogram -crystallographer -crystallographic -crystallographical -crystallographically -crystallography -crystalloid -crystalloidal -crystallology -crystalloluminescence -crystallomagnetic -crystallomancy -crystallometric -crystallometry -crystallophyllian -crystallose -crystallurgy -crystalwort -crystic -crystograph -crystoleum -crystosphene -csardas -ctene -ctenidial -ctenidium -cteniform -ctenocyst -ctenodactyl -ctenodont -ctenoid -ctenoidean -ctenoidian -ctenolium -ctenophoral -ctenophoran -ctenophore -ctenophoric -ctenophorous -ctenostomatous -ctenostome -ctetology -cuadra -cuapinole -cuarenta -cuarta -cuarteron -cuartilla -cuartillo -cub -cubage -cubangle -cubanite -cubatory -cubature -cubbing -cubbish -cubbishly -cubbishness -cubby -cubbyhole -cubbyhouse -cubbyyew -cubdom -cube -cubeb -cubelet -cuber -cubhood -cubi -cubic -cubica -cubical -cubically -cubicalness -cubicity -cubicle -cubicly -cubicone -cubicontravariant -cubicovariant -cubicular -cubiculum -cubiform -cubism -cubist -cubit -cubital -cubitale -cubited -cubitiere -cubito -cubitocarpal -cubitocutaneous -cubitodigital -cubitometacarpal -cubitopalmar -cubitoplantar -cubitoradial -cubitus -cubmaster -cubocalcaneal -cuboctahedron -cubocube -cubocuneiform -cubododecahedral -cuboid -cuboidal -cuboides -cubomancy -cubomedusan -cubometatarsal -cubonavicular -cuck -cuckhold -cuckold -cuckoldom -cuckoldry -cuckoldy -cuckoo -cuckooflower -cuckoomaid -cuckoopint -cuckoopintle -cuckstool -cucoline -cuculiform -cuculine -cuculla -cucullaris -cucullate -cucullately -cuculliform -cucullus -cuculoid -cucumber -cucumiform -cucurbit -cucurbitaceous -cucurbite -cucurbitine -cud -cudava -cudbear -cudden -cuddle -cuddleable -cuddlesome -cuddly -cuddy -cuddyhole -cudgel -cudgeler -cudgerie -cudweed -cue -cueball -cueca -cueist -cueman -cuemanship -cuerda -cuesta -cuff -cuffer -cuffin -cuffy -cuffyism -cuggermugger -cuichunchulli -cuinage -cuir -cuirass -cuirassed -cuirassier -cuisinary -cuisine -cuissard -cuissart -cuisse -cuissen -cuisten -cuittikin -cuke -culbut -culebra -culet -culeus -culgee -culicid -culicidal -culicide -culiciform -culicifugal -culicifuge -culicine -culilawan -culinarily -culinary -cull -culla -cullage -culler -cullet -culling -cullion -cullis -cully -culm -culmen -culmicolous -culmiferous -culmigenous -culminal -culminant -culminate -culmination -culmy -culotte -culottes -culottic -culottism -culpa -culpability -culpable -culpableness -culpably -culpatory -culpose -culprit -cult -cultch -cultellation -cultellus -culteranismo -cultic -cultigen -cultirostral -cultish -cultism -cultismo -cultist -cultivability -cultivable -cultivably -cultivar -cultivatability -cultivatable -cultivate -cultivated -cultivation -cultivator -cultrate -cultrated -cultriform -cultrirostral -cultual -culturable -cultural -culturally -culture -cultured -culturine -culturist -culturization -culturize -culturological -culturologically -culturologist -culturology -cultus -culver -culverfoot -culverhouse -culverin -culverineer -culverkey -culvert -culvertage -culverwort -cum -cumacean -cumaceous -cumal -cumaldehyde -cumaphyte -cumaphytic -cumaphytism -cumay -cumbent -cumber -cumberer -cumberlandite -cumberless -cumberment -cumbersome -cumbersomely -cumbersomeness -cumberworld -cumbha -cumbly -cumbraite -cumbrance -cumbre -cumbrous -cumbrously -cumbrousness -cumbu -cumene -cumengite -cumenyl -cumflutter -cumhal -cumic -cumidin -cumidine -cumin -cuminal -cuminic -cuminoin -cuminol -cuminole -cuminseed -cuminyl -cummer -cummerbund -cummin -cummingtonite -cumol -cump -cumshaw -cumulant -cumular -cumulate -cumulately -cumulation -cumulatist -cumulative -cumulatively -cumulativeness -cumuli -cumuliform -cumulite -cumulophyric -cumulose -cumulous -cumulus -cumyl -cunabular -cunctation -cunctatious -cunctative -cunctator -cunctatorship -cunctatury -cunctipotent -cundeamor -cuneal -cuneate -cuneately -cuneatic -cuneator -cuneiform -cuneiformist -cuneocuboid -cuneonavicular -cuneoscaphoid -cunette -cuneus -cungeboi -cunicular -cuniculus -cunila -cunjah -cunjer -cunjevoi -cunner -cunnilinctus -cunnilingus -cunning -cunningly -cunningness -cunoniaceous -cunye -cuorin -cup -cupay -cupbearer -cupboard -cupcake -cupel -cupeler -cupellation -cupflower -cupful -cuphead -cupholder -cupidinous -cupidity -cupidon -cupidone -cupless -cupmaker -cupmaking -cupman -cupmate -cupola -cupolaman -cupolar -cupolated -cupped -cupper -cupping -cuppy -cuprammonia -cuprammonium -cupreine -cuprene -cupreous -cupressineous -cupric -cupride -cupriferous -cuprite -cuproammonium -cuprobismutite -cuprocyanide -cuprodescloizite -cuproid -cuproiodargyrite -cupromanganese -cupronickel -cuproplumbite -cuproscheelite -cuprose -cuprosilicon -cuprotungstite -cuprous -cuprum -cupseed -cupstone -cupula -cupulate -cupule -cupuliferous -cupuliform -cur -curability -curable -curableness -curably -curacao -curacy -curare -curarine -curarization -curarize -curassow -curatage -curate -curatel -curateship -curatess -curatial -curatic -curation -curative -curatively -curativeness -curatize -curatolatry -curator -curatorial -curatorium -curatorship -curatory -curatrix -curb -curbable -curber -curbing -curbless -curblike -curbstone -curbstoner -curby -curcas -curch -curcuddoch -curculionid -curculionist -curcumin -curd -curdiness -curdle -curdler -curdly -curdwort -curdy -cure -cureless -curelessly -curemaster -curer -curettage -curette -curettement -curfew -curial -curialism -curialist -curialistic -curiality -curiate -curiboca -curie -curiescopy -curietherapy -curin -curine -curing -curio -curiologic -curiologically -curiologics -curiology -curiomaniac -curiosa -curiosity -curioso -curious -curiously -curiousness -curite -curium -curl -curled -curledly -curledness -curler -curlew -curlewberry -curlicue -curliewurly -curlike -curlily -curliness -curling -curlingly -curlpaper -curly -curlycue -curlyhead -curlylocks -curmudgeon -curmudgeonery -curmudgeonish -curmudgeonly -curmurring -curn -curney -curnock -curple -curr -currach -currack -curragh -currant -curratow -currawang -currency -current -currently -currentness -currentwise -curricle -curricula -curricular -curricularization -curricularize -curriculum -curried -currier -curriery -currish -currishly -currishness -curry -currycomb -curryfavel -cursal -curse -cursed -cursedly -cursedness -curser -curship -cursitor -cursive -cursively -cursiveness -cursor -cursorary -cursorial -cursorily -cursoriness -cursorious -cursory -curst -curstful -curstfully -curstly -curstness -cursus -curt -curtail -curtailed -curtailedly -curtailer -curtailment -curtain -curtaining -curtainless -curtainwise -curtal -curtate -curtation -curtesy -curtilage -curtly -curtness -curtsy -curua -curuba -curucucu -curule -cururo -curvaceous -curvaceousness -curvacious -curvant -curvate -curvation -curvature -curve -curved -curvedly -curvedness -curver -curvesome -curvesomeness -curvet -curvicaudate -curvicostate -curvidentate -curvifoliate -curviform -curvilineal -curvilinear -curvilinearity -curvilinearly -curvimeter -curvinervate -curvinerved -curvirostral -curviserial -curvital -curvity -curvograph -curvometer -curvous -curvulate -curvy -curwhibble -curwillet -cuscohygrine -cusconine -cuscus -cuscutaceous -cusec -cuselite -cush -cushag -cushat -cushaw -cushewbird -cushion -cushioned -cushionflower -cushionless -cushionlike -cushiony -cushlamochree -cushy -cusie -cusinero -cusk -cusp -cuspal -cusparidine -cusparine -cuspate -cusped -cuspid -cuspidal -cuspidate -cuspidation -cuspidine -cuspidor -cuspule -cuss -cussed -cussedly -cussedness -cusser -cusso -custard -custerite -custodee -custodes -custodial -custodiam -custodian -custodianship -custodier -custody -custom -customable -customarily -customariness -customary -customer -customhouse -customs -custumal -cut -cutaneal -cutaneous -cutaneously -cutaway -cutback -cutch -cutcher -cutcherry -cute -cutely -cuteness -cutheal -cuticle -cuticolor -cuticula -cuticular -cuticularization -cuticularize -cuticulate -cutidure -cutie -cutification -cutigeral -cutin -cutinization -cutinize -cutireaction -cutis -cutisector -cutitis -cutization -cutlass -cutler -cutleress -cutleriaceous -cutlery -cutlet -cutling -cutlips -cutocellulose -cutoff -cutout -cutover -cutpurse -cuttable -cuttage -cuttail -cuttanee -cutted -cutter -cutterhead -cutterman -cutthroat -cutting -cuttingly -cuttingness -cuttle -cuttlebone -cuttlefish -cuttler -cuttoo -cutty -cuttyhunk -cutup -cutwater -cutweed -cutwork -cutworm -cuvette -cuvy -cuya -cwierc -cwm -cyamelide -cyan -cyanacetic -cyanamide -cyananthrol -cyanate -cyanaurate -cyanauric -cyanbenzyl -cyancarbonic -cyanean -cyanemia -cyaneous -cyanephidrosis -cyanformate -cyanformic -cyanhidrosis -cyanhydrate -cyanhydric -cyanhydrin -cyanic -cyanicide -cyanidation -cyanide -cyanidin -cyanidine -cyanidrosis -cyanimide -cyanin -cyanine -cyanite -cyanize -cyanmethemoglobin -cyanoacetate -cyanoacetic -cyanoaurate -cyanoauric -cyanobenzene -cyanocarbonic -cyanochlorous -cyanochroia -cyanochroic -cyanocrystallin -cyanoderma -cyanogen -cyanogenesis -cyanogenetic -cyanogenic -cyanoguanidine -cyanohermidin -cyanohydrin -cyanol -cyanole -cyanomaclurin -cyanometer -cyanomethaemoglobin -cyanomethemoglobin -cyanometric -cyanometry -cyanopathic -cyanopathy -cyanophile -cyanophilous -cyanophoric -cyanophose -cyanophycean -cyanophyceous -cyanophycin -cyanopia -cyanoplastid -cyanoplatinite -cyanoplatinous -cyanopsia -cyanose -cyanosed -cyanosis -cyanotic -cyanotrichite -cyanotype -cyanuramide -cyanurate -cyanuret -cyanuric -cyanurine -cyanus -cyaphenine -cyath -cyatheaceous -cyathiform -cyathium -cyathoid -cyatholith -cyathophylline -cyathophylloid -cyathos -cyathozooid -cyathus -cybernetic -cyberneticist -cybernetics -cycad -cycadaceous -cycadean -cycadeoid -cycadeous -cycadiform -cycadlike -cycadofilicale -cycadofilicinean -cyclamen -cyclamin -cyclamine -cyclammonium -cyclane -cyclanthaceous -cyclar -cyclarthrodial -cyclarthrsis -cyclas -cycle -cyclecar -cycledom -cyclene -cycler -cyclesmith -cyclian -cyclic -cyclical -cyclically -cyclicism -cyclide -cycling -cyclism -cyclist -cyclistic -cyclitic -cyclitis -cyclization -cyclize -cycloalkane -cyclobutane -cyclocoelic -cyclocoelous -cyclodiolefin -cycloganoid -cyclogram -cyclograph -cyclographer -cycloheptane -cycloheptanone -cyclohexane -cyclohexanol -cyclohexanone -cyclohexene -cyclohexyl -cycloid -cycloidal -cycloidally -cycloidean -cycloidian -cycloidotrope -cyclolith -cyclomania -cyclometer -cyclometric -cyclometrical -cyclometry -cyclomyarian -cyclonal -cyclone -cyclonic -cyclonical -cyclonically -cyclonist -cyclonite -cyclonologist -cyclonology -cyclonometer -cyclonoscope -cycloolefin -cycloparaffin -cyclope -cyclopean -cyclopedia -cyclopedic -cyclopedical -cyclopedically -cyclopedist -cyclopentadiene -cyclopentane -cyclopentanone -cyclopentene -cyclopes -cyclophoria -cyclophoric -cyclophrenia -cyclopia -cyclopism -cyclopite -cycloplegia -cycloplegic -cyclopoid -cyclopropane -cyclopteroid -cyclopterous -cyclopy -cyclorama -cycloramic -cyclorrhaphous -cycloscope -cyclose -cyclosis -cyclospermous -cyclospondylic -cyclospondylous -cyclosporous -cyclostomate -cyclostomatous -cyclostome -cyclostomous -cyclostrophic -cyclostyle -cyclothem -cyclothure -cyclothurine -cyclothyme -cyclothymia -cyclothymiac -cyclothymic -cyclotome -cyclotomic -cyclotomy -cyclotron -cyclovertebral -cyclus -cydippian -cydippid -cydonium -cyesiology -cyesis -cygneous -cygnet -cygnine -cyke -cylinder -cylindered -cylinderer -cylinderlike -cylindraceous -cylindrarthrosis -cylindrelloid -cylindrenchyma -cylindric -cylindrical -cylindricality -cylindrically -cylindricalness -cylindricity -cylindricule -cylindriform -cylindrite -cylindrocellular -cylindrocephalic -cylindroconical -cylindroconoidal -cylindrocylindric -cylindrodendrite -cylindrograph -cylindroid -cylindroidal -cylindroma -cylindromatous -cylindrometric -cylindroogival -cylindruria -cylix -cyllosis -cyma -cymagraph -cymaphen -cymaphyte -cymaphytic -cymaphytism -cymar -cymation -cymatium -cymba -cymbaeform -cymbal -cymbaleer -cymbaler -cymbaline -cymbalist -cymballike -cymbalo -cymbalon -cymbate -cymbiform -cymbling -cymbocephalic -cymbocephalous -cymbocephaly -cyme -cymelet -cymene -cymiferous -cymling -cymogene -cymograph -cymographic -cymoid -cymometer -cymophane -cymophanous -cymophenol -cymoscope -cymose -cymosely -cymotrichous -cymotrichy -cymous -cymule -cymulose -cynanche -cynanthropy -cynaraceous -cynarctomachy -cynareous -cynaroid -cynebot -cynegetic -cynegetics -cynegild -cynhyena -cyniatria -cyniatrics -cynic -cynical -cynically -cynicalness -cynicism -cynicist -cynipid -cynipidous -cynipoid -cynism -cynocephalic -cynocephalous -cynocephalus -cynoclept -cynocrambaceous -cynodont -cynogenealogist -cynogenealogy -cynography -cynoid -cynology -cynomoriaceous -cynomorphic -cynomorphous -cynophile -cynophilic -cynophilist -cynophobe -cynophobia -cynopithecoid -cynopodous -cynorrhodon -cynosural -cynosure -cynotherapy -cyp -cyperaceous -cyphella -cyphellate -cyphonautes -cyphonism -cypraeid -cypraeiform -cypraeoid -cypre -cypres -cypress -cypressed -cypressroot -cypridinoid -cyprine -cyprinid -cypriniform -cyprinine -cyprinodont -cyprinodontoid -cyprinoid -cyprinoidean -cypsela -cypseliform -cypseline -cypseloid -cypselomorph -cypselomorphic -cypselous -cyptozoic -cyrillaceous -cyriologic -cyriological -cyrtoceracone -cyrtoceratite -cyrtoceratitic -cyrtograph -cyrtolite -cyrtometer -cyrtopia -cyrtosis -cyrus -cyst -cystadenoma -cystadenosarcoma -cystal -cystalgia -cystamine -cystaster -cystatrophia -cystatrophy -cystectasia -cystectasy -cystectomy -cysted -cysteine -cysteinic -cystelcosis -cystenchyma -cystenchymatous -cystencyte -cysterethism -cystic -cysticarpic -cysticarpium -cysticercoid -cysticercoidal -cysticercosis -cysticercus -cysticolous -cystid -cystidean -cystidicolous -cystidium -cystiferous -cystiform -cystigerous -cystignathine -cystine -cystinuria -cystirrhea -cystis -cystitis -cystitome -cystoadenoma -cystocarcinoma -cystocarp -cystocarpic -cystocele -cystocolostomy -cystocyte -cystodynia -cystoelytroplasty -cystoenterocele -cystoepiplocele -cystoepithelioma -cystofibroma -cystoflagellate -cystogenesis -cystogenous -cystogram -cystoid -cystoidean -cystolith -cystolithectomy -cystolithiasis -cystolithic -cystoma -cystomatous -cystomorphous -cystomyoma -cystomyxoma -cystonectous -cystonephrosis -cystoneuralgia -cystoparalysis -cystophore -cystophotography -cystophthisis -cystoplasty -cystoplegia -cystoproctostomy -cystoptosis -cystopyelitis -cystopyelography -cystopyelonephritis -cystoradiography -cystorrhagia -cystorrhaphy -cystorrhea -cystosarcoma -cystoschisis -cystoscope -cystoscopic -cystoscopy -cystose -cystospasm -cystospastic -cystospore -cystostomy -cystosyrinx -cystotome -cystotomy -cystotrachelotomy -cystoureteritis -cystourethritis -cystous -cytase -cytasic -cytinaceous -cytioderm -cytisine -cytitis -cytoblast -cytoblastema -cytoblastemal -cytoblastematous -cytoblastemic -cytoblastemous -cytochemistry -cytochrome -cytochylema -cytocide -cytoclasis -cytoclastic -cytococcus -cytocyst -cytode -cytodendrite -cytoderm -cytodiagnosis -cytodieresis -cytodieretic -cytogamy -cytogene -cytogenesis -cytogenetic -cytogenetical -cytogenetically -cytogeneticist -cytogenetics -cytogenic -cytogenous -cytogeny -cytoglobin -cytohyaloplasm -cytoid -cytokinesis -cytolist -cytologic -cytological -cytologically -cytologist -cytology -cytolymph -cytolysin -cytolysis -cytolytic -cytoma -cytomere -cytometer -cytomicrosome -cytomitome -cytomorphosis -cyton -cytoparaplastin -cytopathologic -cytopathological -cytopathologically -cytopathology -cytophagous -cytophagy -cytopharynx -cytophil -cytophysics -cytophysiology -cytoplasm -cytoplasmic -cytoplast -cytoplastic -cytoproct -cytopyge -cytoreticulum -cytoryctes -cytosine -cytosome -cytost -cytostomal -cytostome -cytostroma -cytostromatic -cytotactic -cytotaxis -cytotoxic -cytotoxin -cytotrophoblast -cytotrophy -cytotropic -cytotropism -cytozoic -cytozoon -cytozymase -cytozyme -cytula -cyzicene -czar -czardas -czardom -czarevitch -czarevna -czarian -czaric -czarina -czarinian -czarish -czarism -czarist -czaristic -czaritza -czarowitch -czarowitz -czarship -d -da -daalder -dab -dabb -dabba -dabber -dabble -dabbler -dabbling -dabblingly -dabblingness -dabby -dabchick -dablet -daboia -daboya -dabster -dace -dacelonine -dachshound -dachshund -dacite -dacitic -dacker -dacoit -dacoitage -dacoity -dacryadenalgia -dacryadenitis -dacryagogue -dacrycystalgia -dacryelcosis -dacryoadenalgia -dacryoadenitis -dacryoblenorrhea -dacryocele -dacryocyst -dacryocystalgia -dacryocystitis -dacryocystoblennorrhea -dacryocystocele -dacryocystoptosis -dacryocystorhinostomy -dacryocystosyringotomy -dacryocystotome -dacryocystotomy -dacryohelcosis -dacryohemorrhea -dacryolite -dacryolith -dacryolithiasis -dacryoma -dacryon -dacryops -dacryopyorrhea -dacryopyosis -dacryosolenitis -dacryostenosis -dacryosyrinx -dacryuria -dactyl -dactylar -dactylate -dactylic -dactylically -dactylioglyph -dactylioglyphic -dactylioglyphist -dactylioglyphtic -dactylioglyphy -dactyliographer -dactyliographic -dactyliography -dactyliology -dactyliomancy -dactylion -dactyliotheca -dactylist -dactylitic -dactylitis -dactylogram -dactylograph -dactylographic -dactylography -dactyloid -dactylology -dactylomegaly -dactylonomy -dactylopatagium -dactylopodite -dactylopore -dactylorhiza -dactyloscopic -dactyloscopy -dactylose -dactylosternal -dactylosymphysis -dactylotheca -dactylous -dactylozooid -dactylus -dacyorrhea -dad -dada -dadap -dadder -daddle -daddock -daddocky -daddy -daddynut -dade -dadenhudd -dado -daduchus -dae -daedal -daedaloid -daemon -daemonic -daemonurgist -daemonurgy -daemony -daer -daff -daffery -daffing -daffish -daffle -daffodil -daffodilly -daffy -daffydowndilly -daft -daftberry -daftlike -daftly -daftness -dag -dagaba -dagame -dagassa -dagesh -dagga -dagger -daggerbush -daggered -daggerlike -daggerproof -daggers -daggle -daggletail -daggletailed -daggly -daggy -daghesh -daglock -dagoba -dags -daguerreotype -daguerreotyper -daguerreotypic -daguerreotypist -daguerreotypy -dah -dahabeah -dahoon -daidle -daidly -daiker -daikon -dailiness -daily -daimen -daimiate -daimio -daimon -daimonic -daimonion -daimonistic -daimonology -dain -daincha -dainteth -daintify -daintihood -daintily -daintiness -daintith -dainty -daira -dairi -dairy -dairying -dairymaid -dairyman -dairywoman -dais -daisied -daisy -daisybush -daitya -daiva -dak -daker -dakir -daktylon -daktylos -dal -dalar -dale -daleman -daler -dalesfolk -dalesman -dalespeople -daleswoman -daleth -dali -dalk -dallack -dalle -dalles -dalliance -dallier -dally -dallying -dallyingly -dalmatic -dalt -dalteen -dalton -dam -dama -damage -damageability -damageable -damageableness -damageably -damagement -damager -damages -damagingly -daman -damascene -damascened -damascener -damascenine -damask -damaskeen -damasse -damassin -dambonitol -dambose -dambrod -dame -damenization -damewort -damiana -damie -damier -damine -damkjernite -damlike -dammar -damme -dammer -dammish -damn -damnability -damnable -damnableness -damnably -damnation -damnatory -damned -damner -damnification -damnify -damning -damningly -damningness -damnonians -damnous -damnously -damoiseau -damonico -damourite -damp -dampang -damped -dampen -dampener -damper -damping -dampish -dampishly -dampishness -damply -dampness -dampproof -dampproofer -dampproofing -dampy -damsel -damselfish -damselhood -damson -dan -danaid -danaide -danaine -danaite -danalite -danburite -dancalite -dance -dancer -danceress -dancery -dancette -dancing -dancingly -dand -danda -dandelion -dander -dandiacal -dandiacally -dandically -dandification -dandify -dandilly -dandily -dandiprat -dandizette -dandle -dandler -dandling -dandlingly -dandruff -dandruffy -dandy -dandydom -dandyish -dandyism -dandyize -dandyling -dang -danger -dangerful -dangerfully -dangerless -dangerous -dangerously -dangerousness -dangersome -dangle -dangleberry -danglement -dangler -danglin -dangling -danglingly -danicism -danio -dank -dankish -dankishness -dankly -dankness -danli -dannemorite -danner -dannock -danoranja -dansant -danseuse -danta -danton -dao -daoine -dap -daphnetin -daphnin -daphnioid -daphnoid -dapicho -dapico -dapifer -dapper -dapperling -dapperly -dapperness -dapple -dappled -dar -darabukka -darac -daraf -darat -darbha -darby -dardanarius -dardanium -dardaol -dare -dareall -daredevil -daredevilism -daredevilry -daredeviltry -dareful -darer -daresay -darg -dargah -darger -dargsman -dargue -dari -daribah -daric -daring -daringly -daringness -dariole -dark -darken -darkener -darkening -darkful -darkhearted -darkheartedness -darkish -darkishness -darkle -darkling -darklings -darkly -darkmans -darkness -darkroom -darkskin -darksome -darksomeness -darky -darling -darlingly -darlingness -darn -darnation -darned -darnel -darner -darnex -darning -daroga -daroo -darr -darrein -darshana -darst -dart -dartars -dartboard -darter -darting -dartingly -dartingness -dartle -dartlike -dartman -dartoic -dartoid -dartos -dartre -dartrose -dartrous -darts -dartsman -darzee -das -dash -dashboard -dashed -dashedly -dashee -dasheen -dasher -dashing -dashingly -dashmaker -dashplate -dashpot -dashwheel -dashy -dasi -dasnt -dassie -dassy -dastard -dastardize -dastardliness -dastardly -dastur -dasturi -dasycladaceous -dasymeter -dasypaedal -dasypaedes -dasypaedic -dasyphyllous -dasypodoid -dasyproctine -dasyure -dasyurine -dasyuroid -data -datable -datableness -datably -dataria -datary -datch -datcha -date -dateless -datemark -dater -datil -dating -dation -datiscaceous -datiscetin -datiscin -datiscoside -datival -dative -datively -dativogerundial -datolite -datolitic -dattock -datum -daturic -daturism -daub -daube -dauber -daubery -daubing -daubingly -daubreeite -daubreelite -daubster -dauby -daud -daughter -daughterhood -daughterkin -daughterless -daughterlike -daughterliness -daughterling -daughterly -daughtership -daunch -dauncy -daunt -daunter -daunting -dauntingly -dauntingness -dauntless -dauntlessly -dauntlessness -daunton -dauphin -dauphine -dauphiness -daut -dautie -dauw -davach -daven -davenport -daver -daverdy -davidsonite -daviesite -davit -davoch -davy -davyne -daw -dawdle -dawdler -dawdling -dawdlingly -dawdy -dawish -dawkin -dawn -dawning -dawnlight -dawnlike -dawnstreak -dawnward -dawny -dawsoniaceous -dawsonite -dawtet -dawtit -dawut -day -dayabhaga -dayal -daybeam -dayberry -dayblush -daybook -daybreak -daydawn -daydream -daydreamer -daydreamy -daydrudge -dayflower -dayfly -daygoing -dayless -daylight -daylit -daylong -dayman -daymare -daymark -dayroom -days -dayshine -daysman -dayspring -daystar -daystreak -daytale -daytide -daytime -daytimes -dayward -daywork -dayworker -daywrit -daze -dazed -dazedly -dazedness -dazement -dazingly -dazy -dazzle -dazzlement -dazzler -dazzlingly -de -deacetylate -deacetylation -deacidification -deacidify -deacon -deaconal -deaconate -deaconess -deaconhood -deaconize -deaconry -deaconship -deactivate -deactivation -dead -deadbeat -deadborn -deadcenter -deaden -deadener -deadening -deader -deadeye -deadfall -deadhead -deadheadism -deadhearted -deadheartedly -deadheartedness -deadhouse -deading -deadish -deadishly -deadishness -deadlatch -deadlight -deadlily -deadline -deadliness -deadlock -deadly -deadman -deadmelt -deadness -deadpan -deadpay -deadtongue -deadwood -deadwort -deaerate -deaeration -deaerator -deaf -deafen -deafening -deafeningly -deafforest -deafforestation -deafish -deafly -deafness -deair -deal -dealable -dealate -dealated -dealation -dealbate -dealbation -dealbuminize -dealcoholist -dealcoholization -dealcoholize -dealer -dealerdom -dealership -dealfish -dealing -dealkalize -dealkylate -dealkylation -dealt -deambulation -deambulatory -deamidase -deamidate -deamidation -deamidization -deamidize -deaminase -deaminate -deamination -deaminization -deaminize -deammonation -dean -deanathematize -deaner -deanery -deaness -deanimalize -deanship -deanthropomorphic -deanthropomorphism -deanthropomorphization -deanthropomorphize -deappetizing -deaquation -dear -dearborn -dearie -dearly -dearness -dearomatize -dearsenicate -dearsenicator -dearsenicize -dearth -dearthfu -dearticulation -dearworth -dearworthily -dearworthiness -deary -deash -deasil -deaspirate -deaspiration -deassimilation -death -deathbed -deathblow -deathday -deathful -deathfully -deathfulness -deathify -deathin -deathiness -deathless -deathlessly -deathlessness -deathlike -deathliness -deathling -deathly -deathroot -deathshot -deathsman -deathtrap -deathward -deathwards -deathwatch -deathweed -deathworm -deathy -deave -deavely -deb -debacle -debadge -debamboozle -debar -debarbarization -debarbarize -debark -debarkation -debarkment -debarment -debarrance -debarrass -debarration -debase -debasedness -debasement -debaser -debasingly -debatable -debate -debateful -debatefully -debatement -debater -debating -debatingly -debauch -debauched -debauchedly -debauchedness -debauchee -debaucher -debauchery -debauchment -debby -debeige -debellate -debellation -debellator -deben -debenture -debentured -debenzolize -debile -debilissima -debilitant -debilitate -debilitated -debilitation -debilitative -debility -debind -debit -debiteuse -debituminization -debituminize -deblaterate -deblateration -deboistly -deboistness -debonair -debonaire -debonairity -debonairly -debonairness -debonnaire -debord -debordment -debosh -deboshed -debouch -debouchment -debride -debrief -debris -debrominate -debromination -debruise -debt -debtee -debtful -debtless -debtor -debtorship -debullition -debunk -debunker -debunkment -debus -debut -debutant -debutante -decachord -decad -decadactylous -decadal -decadally -decadarch -decadarchy -decadary -decadation -decade -decadence -decadency -decadent -decadentism -decadently -decadescent -decadianome -decadic -decadist -decadrachm -decadrachma -decaesarize -decaffeinate -decaffeinize -decafid -decagon -decagonal -decagram -decagramme -decahedral -decahedron -decahydrate -decahydrated -decahydronaphthalene -decal -decalcification -decalcifier -decalcify -decalcomania -decalcomaniac -decalescence -decalescent -decaliter -decalitre -decalobate -decalvant -decalvation -decameral -decamerous -decameter -decametre -decamp -decampment -decan -decanal -decanally -decanate -decane -decangular -decani -decanically -decannulation -decanonization -decanonize -decant -decantate -decantation -decanter -decantherous -decap -decapetalous -decaphyllous -decapitable -decapitalization -decapitalize -decapitate -decapitation -decapitator -decapod -decapodal -decapodan -decapodiform -decapodous -decapper -decapsulate -decapsulation -decarbonate -decarbonator -decarbonization -decarbonize -decarbonized -decarbonizer -decarboxylate -decarboxylation -decarboxylization -decarboxylize -decarburation -decarburization -decarburize -decarch -decarchy -decardinalize -decare -decarhinus -decarnate -decarnated -decart -decasemic -decasepalous -decaspermal -decaspermous -decast -decastellate -decastere -decastich -decastyle -decasualization -decasualize -decasyllabic -decasyllable -decasyllabon -decate -decathlon -decatholicize -decatize -decatizer -decatoic -decator -decatyl -decaudate -decaudation -decay -decayable -decayed -decayedness -decayer -decayless -decease -deceased -decedent -deceit -deceitful -deceitfully -deceitfulness -deceivability -deceivable -deceivableness -deceivably -deceive -deceiver -deceiving -deceivingly -decelerate -deceleration -decelerator -decelerometer -decemcostate -decemdentate -decemfid -decemflorous -decemfoliate -decemfoliolate -decemjugate -decemlocular -decempartite -decempeda -decempedal -decempedate -decempennate -decemplex -decemplicate -decempunctate -decemstriate -decemuiri -decemvir -decemviral -decemvirate -decemvirship -decenary -decence -decency -decene -decennal -decennary -decennia -decenniad -decennial -decennially -decennium -decennoval -decent -decenter -decently -decentness -decentralism -decentralist -decentralization -decentralize -decentration -decentre -decenyl -decephalization -deceptibility -deceptible -deception -deceptious -deceptiously -deceptitious -deceptive -deceptively -deceptiveness -deceptivity -decerebrate -decerebration -decerebrize -decern -decerniture -decernment -decess -decession -dechemicalization -dechemicalize -dechenite -dechlore -dechlorination -dechoralize -dechristianization -dechristianize -deciare -deciatine -decibel -deciceronize -decidable -decide -decided -decidedly -decidedness -decider -decidingly -decidua -decidual -deciduary -deciduate -deciduitis -deciduoma -deciduous -deciduously -deciduousness -decigram -decigramme -decil -decile -deciliter -decillion -decillionth -decima -decimal -decimalism -decimalist -decimalization -decimalize -decimally -decimate -decimation -decimator -decimestrial -decimeter -decimolar -decimole -decimosexto -decinormal -decipher -decipherability -decipherable -decipherably -decipherer -decipherment -decipium -decipolar -decision -decisional -decisive -decisively -decisiveness -decistere -decitizenize -decivilization -decivilize -deck -decke -decked -deckel -decker -deckhead -deckhouse -deckie -decking -deckle -deckload -deckswabber -declaim -declaimant -declaimer -declamation -declamatoriness -declamatory -declarable -declarant -declaration -declarative -declaratively -declarator -declaratorily -declaratory -declare -declared -declaredly -declaredness -declarer -declass -declassicize -declassify -declension -declensional -declensionally -declericalize -declimatize -declinable -declinal -declinate -declination -declinational -declinatory -declinature -decline -declined -declinedness -decliner -declinograph -declinometer -declivate -declive -declivitous -declivity -declivous -declutch -decoagulate -decoagulation -decoat -decocainize -decoct -decoctible -decoction -decoctive -decoctum -decode -decohere -decoherence -decoherer -decohesion -decoic -decoke -decollate -decollated -decollation -decollator -decolletage -decollete -decolor -decolorant -decolorate -decoloration -decolorimeter -decolorization -decolorize -decolorizer -decolour -decommission -decompensate -decompensation -decomplex -decomponible -decomposability -decomposable -decompose -decomposed -decomposer -decomposite -decomposition -decomposure -decompound -decompoundable -decompoundly -decompress -decompressing -decompression -decompressive -deconcatenate -deconcentrate -deconcentration -deconcentrator -decongestive -deconsecrate -deconsecration -deconsider -deconsideration -decontaminate -decontamination -decontrol -deconventionalize -decopperization -decopperize -decorability -decorable -decorably -decorament -decorate -decorated -decoration -decorationist -decorative -decoratively -decorativeness -decorator -decoratory -decorist -decorous -decorously -decorousness -decorrugative -decorticate -decortication -decorticator -decorticosis -decorum -decostate -decoy -decoyer -decoyman -decrassify -decream -decrease -decreaseless -decreasing -decreasingly -decreation -decreative -decree -decreeable -decreement -decreer -decreet -decrement -decrementless -decremeter -decrepit -decrepitate -decrepitation -decrepitly -decrepitness -decrepitude -decrescence -decrescendo -decrescent -decretal -decretalist -decrete -decretist -decretive -decretively -decretorial -decretorily -decretory -decretum -decrew -decrial -decried -decrier -decrown -decrudescence -decrustation -decry -decrystallization -decubital -decubitus -decultivate -deculturate -decuman -decumana -decumanus -decumary -decumbence -decumbency -decumbent -decumbently -decumbiture -decuple -decuplet -decuria -decurion -decurionate -decurrence -decurrency -decurrent -decurrently -decurring -decursion -decursive -decursively -decurtate -decurvation -decurvature -decurve -decury -decus -decussate -decussated -decussately -decussation -decussis -decussorium -decyl -decylene -decylenic -decylic -decyne -dedecorate -dedecoration -dedecorous -dedendum -dedentition -dedicant -dedicate -dedicatee -dedication -dedicational -dedicative -dedicator -dedicatorial -dedicatorily -dedicatory -dedicature -dedifferentiate -dedifferentiation -dedimus -deditician -dediticiancy -dedition -dedo -dedoggerelize -dedogmatize -dedolation -deduce -deducement -deducibility -deducible -deducibleness -deducibly -deducive -deduct -deductible -deduction -deductive -deductively -deductory -deduplication -dee -deed -deedbox -deedeed -deedful -deedfully -deedily -deediness -deedless -deedy -deem -deemer -deemie -deemster -deemstership -deep -deepen -deepener -deepening -deepeningly -deeping -deepish -deeplier -deeply -deepmost -deepmouthed -deepness -deepsome -deepwater -deepwaterman -deer -deerberry -deerdog -deerdrive -deerfood -deerhair -deerherd -deerhorn -deerhound -deerlet -deermeat -deerskin -deerstalker -deerstalking -deerstand -deerstealer -deertongue -deerweed -deerwood -deeryard -deevey -deevilick -deface -defaceable -defacement -defacer -defacing -defacingly -defalcate -defalcation -defalcator -defalk -defamation -defamatory -defame -defamed -defamer -defamingly -defassa -defat -default -defaultant -defaulter -defaultless -defaulture -defeasance -defeasanced -defease -defeasibility -defeasible -defeasibleness -defeat -defeater -defeatism -defeatist -defeatment -defeature -defecant -defecate -defecation -defecator -defect -defectibility -defectible -defection -defectionist -defectious -defective -defectively -defectiveness -defectless -defectology -defector -defectoscope -defedation -defeminize -defence -defend -defendable -defendant -defender -defendress -defenestration -defensative -defense -defenseless -defenselessly -defenselessness -defensibility -defensible -defensibleness -defensibly -defension -defensive -defensively -defensiveness -defensor -defensorship -defensory -defer -deferable -deference -deferent -deferentectomy -deferential -deferentiality -deferentially -deferentitis -deferment -deferrable -deferral -deferred -deferrer -deferrization -deferrize -defervesce -defervescence -defervescent -defeudalize -defiable -defial -defiance -defiant -defiantly -defiantness -defiber -defibrinate -defibrination -defibrinize -deficience -deficiency -deficient -deficiently -deficit -defier -defiguration -defilade -defile -defiled -defiledness -defilement -defiler -defiliation -defiling -defilingly -definability -definable -definably -define -defined -definedly -definement -definer -definiendum -definiens -definite -definitely -definiteness -definition -definitional -definitiones -definitive -definitively -definitiveness -definitization -definitize -definitor -definitude -deflagrability -deflagrable -deflagrate -deflagration -deflagrator -deflate -deflation -deflationary -deflationist -deflator -deflect -deflectable -deflected -deflection -deflectionization -deflectionize -deflective -deflectometer -deflector -deflesh -deflex -deflexibility -deflexible -deflexion -deflexure -deflocculant -deflocculate -deflocculation -deflocculator -deflorate -defloration -deflorescence -deflower -deflowerer -defluent -defluous -defluvium -defluxion -defoedation -defog -defoliage -defoliate -defoliated -defoliation -defoliator -deforce -deforcement -deforceor -deforcer -deforciant -deforest -deforestation -deforester -deform -deformability -deformable -deformalize -deformation -deformational -deformative -deformed -deformedly -deformedness -deformer -deformeter -deformism -deformity -defortify -defoul -defraud -defraudation -defrauder -defraudment -defray -defrayable -defrayal -defrayer -defrayment -defreeze -defrication -defrock -defrost -defroster -deft -defterdar -deftly -deftness -defunct -defunction -defunctionalization -defunctionalize -defunctness -defuse -defusion -defy -defyingly -deg -deganglionate -degarnish -degas -degasification -degasifier -degasify -degasser -degauss -degelatinize -degelation -degeneracy -degeneralize -degenerate -degenerately -degenerateness -degeneration -degenerationist -degenerative -degenerescence -degenerescent -degentilize -degerm -degerminate -degerminator -degged -degger -deglaciation -deglaze -deglutinate -deglutination -deglutition -deglutitious -deglutitive -deglutitory -deglycerin -deglycerine -degorge -degradable -degradand -degradation -degradational -degradative -degrade -degraded -degradedly -degradedness -degradement -degrader -degrading -degradingly -degradingness -degraduate -degraduation -degrain -degrease -degreaser -degree -degreeless -degreewise -degression -degressive -degressively -degu -deguelin -degum -degummer -degust -degustation -dehair -dehairer -deheathenize -dehematize -dehepatize -dehisce -dehiscence -dehiscent -dehistoricize -dehnstufe -dehonestate -dehonestation -dehorn -dehorner -dehors -dehort -dehortation -dehortative -dehortatory -dehorter -dehull -dehumanization -dehumanize -dehumidification -dehumidifier -dehumidify -dehusk -dehydrant -dehydrase -dehydrate -dehydration -dehydrator -dehydroascorbic -dehydrocorydaline -dehydrofreezing -dehydrogenase -dehydrogenate -dehydrogenation -dehydrogenization -dehydrogenize -dehydromucic -dehydrosparteine -dehypnotize -deice -deicer -deicidal -deicide -deictic -deictical -deictically -deidealize -deific -deifical -deification -deificatory -deifier -deiform -deiformity -deify -deign -deincrustant -deindividualization -deindividualize -deindividuate -deindustrialization -deindustrialize -deink -deinos -deinsularize -deintellectualization -deintellectualize -deionize -deiparous -deipnodiplomatic -deipnophobia -deipnosophism -deipnosophist -deipnosophistic -deipotent -deiseal -deisidaimonia -deism -deist -deistic -deistical -deistically -deisticalness -deity -deityship -deject -dejecta -dejected -dejectedly -dejectedness -dejectile -dejection -dejectly -dejectory -dejecture -dejerate -dejeration -dejerator -dejeune -dejeuner -dejunkerize -dekaparsec -dekapode -dekko -dekle -deknight -delabialization -delabialize -delacrimation -delactation -delaine -delaminate -delamination -delapse -delapsion -delate -delater -delatinization -delatinize -delation -delator -delatorian -delawn -delay -delayable -delayage -delayer -delayful -delaying -delayingly -dele -delead -delectability -delectable -delectableness -delectably -delectate -delectation -delectus -delegable -delegacy -delegalize -delegant -delegate -delegatee -delegateship -delegation -delegative -delegator -delegatory -delenda -delesseriaceous -delete -deleterious -deleteriously -deleteriousness -deletion -deletive -deletory -delf -delft -delftware -deliberalization -deliberalize -deliberant -deliberate -deliberately -deliberateness -deliberation -deliberative -deliberatively -deliberativeness -deliberator -delible -delicacy -delicate -delicately -delicateness -delicatesse -delicatessen -delicense -delicioso -delicious -deliciously -deliciousness -delict -delictum -deligated -deligation -delight -delightable -delighted -delightedly -delightedness -delighter -delightful -delightfully -delightfulness -delighting -delightingly -delightless -delightsome -delightsomely -delightsomeness -delignate -delignification -delime -delimit -delimitate -delimitation -delimitative -delimiter -delimitize -delineable -delineament -delineate -delineation -delineative -delineator -delineatory -delineature -delinquence -delinquency -delinquent -delinquently -delint -delinter -deliquesce -deliquescence -deliquescent -deliquium -deliracy -delirament -deliration -deliriant -delirifacient -delirious -deliriously -deliriousness -delirium -delitescence -delitescency -delitescent -deliver -deliverable -deliverance -deliverer -deliveress -deliveror -delivery -deliveryman -dell -dellenite -delocalization -delocalize -delomorphic -delomorphous -deloul -delouse -delphacid -delphine -delphinic -delphinin -delphinine -delphinite -delphinoid -delphinoidine -delphocurarine -delta -deltafication -deltaic -deltal -deltarium -deltation -delthyrial -delthyrium -deltic -deltidial -deltidium -deltiology -deltohedron -deltoid -deltoidal -delubrum -deludable -delude -deluder -deludher -deluding -deludingly -deluge -deluminize -delundung -delusion -delusional -delusionist -delusive -delusively -delusiveness -delusory -deluster -deluxe -delve -delver -demagnetizable -demagnetization -demagnetize -demagnetizer -demagog -demagogic -demagogical -demagogically -demagogism -demagogue -demagoguery -demagogy -demal -demand -demandable -demandant -demander -demanding -demandingly -demanganization -demanganize -demantoid -demarcate -demarcation -demarcator -demarch -demarchy -demargarinate -demark -demarkation -demast -dematerialization -dematerialize -dematiaceous -deme -demean -demeanor -demegoric -demency -dement -dementate -dementation -demented -dementedly -dementedness -dementholize -dementia -demephitize -demerit -demeritorious -demeritoriously -demersal -demersed -demersion -demesman -demesmerize -demesne -demesnial -demetallize -demethylate -demethylation -demetricize -demi -demiadult -demiangel -demiassignation -demiatheism -demiatheist -demibarrel -demibastion -demibastioned -demibath -demibeast -demibelt -demibob -demibombard -demibrassart -demibrigade -demibrute -demibuckram -demicadence -demicannon -demicanon -demicanton -demicaponier -demichamfron -demicircle -demicircular -demicivilized -demicolumn -demicoronal -demicritic -demicuirass -demiculverin -demicylinder -demicylindrical -demidandiprat -demideify -demideity -demidevil -demidigested -demidistance -demiditone -demidoctor -demidog -demidolmen -demidome -demieagle -demifarthing -demifigure -demiflouncing -demifusion -demigardebras -demigauntlet -demigentleman -demiglobe -demigod -demigoddess -demigoddessship -demigorge -demigriffin -demigroat -demihag -demihearse -demiheavenly -demihigh -demihogshead -demihorse -demihuman -demijambe -demijohn -demikindred -demiking -demilance -demilancer -demilawyer -demilegato -demilion -demilitarization -demilitarize -demiliterate -demilune -demiluster -demilustre -demiman -demimark -demimentoniere -demimetope -demimillionaire -demimondaine -demimonde -demimonk -deminatured -demineralization -demineralize -deminude -deminudity -demioctagonal -demioctangular -demiofficial -demiorbit -demiourgoi -demiowl -demiox -demipagan -demiparallel -demipauldron -demipectinate -demipesade -demipike -demipillar -demipique -demiplacate -demiplate -demipomada -demipremise -demipremiss -demipriest -demipronation -demipuppet -demiquaver -demiracle -demiram -demirelief -demirep -demirevetment -demirhumb -demirilievo -demirobe -demisability -demisable -demisacrilege -demisang -demisangue -demisavage -demise -demiseason -demisecond -demisemiquaver -demisemitone -demisheath -demishirt -demisovereign -demisphere -demiss -demission -demissionary -demissly -demissness -demissory -demisuit -demit -demitasse -demitint -demitoilet -demitone -demitrain -demitranslucence -demitube -demiturned -demiurge -demiurgeous -demiurgic -demiurgical -demiurgically -demiurgism -demivambrace -demivirgin -demivoice -demivol -demivolt -demivotary -demiwivern -demiwolf -demnition -demob -demobilization -demobilize -democracy -democrat -democratian -democratic -democratical -democratically -democratifiable -democratism -democratist -democratization -democratize -demodectic -demoded -demodulation -demodulator -demogenic -demographer -demographic -demographical -demographically -demographist -demography -demoid -demoiselle -demolish -demolisher -demolishment -demolition -demolitionary -demolitionist -demological -demology -demon -demonastery -demoness -demonetization -demonetize -demoniac -demoniacal -demoniacally -demoniacism -demonial -demonian -demonianism -demoniast -demonic -demonical -demonifuge -demonish -demonism -demonist -demonize -demonkind -demonland -demonlike -demonocracy -demonograph -demonographer -demonography -demonolater -demonolatrous -demonolatrously -demonolatry -demonologer -demonologic -demonological -demonologically -demonologist -demonology -demonomancy -demonophobia -demonry -demonship -demonstrability -demonstrable -demonstrableness -demonstrably -demonstrant -demonstratable -demonstrate -demonstratedly -demonstrater -demonstration -demonstrational -demonstrationist -demonstrative -demonstratively -demonstrativeness -demonstrator -demonstratorship -demonstratory -demophil -demophilism -demophobe -demoralization -demoralize -demoralizer -demorphinization -demorphism -demos -demote -demotic -demotics -demotion -demotist -demount -demountability -demountable -dempster -demulce -demulcent -demulsibility -demulsify -demulsion -demure -demurely -demureness -demurity -demurrable -demurrage -demurral -demurrant -demurrer -demurring -demurringly -demutization -demy -demyship -den -denarcotization -denarcotize -denarius -denaro -denary -denat -denationalization -denationalize -denaturalization -denaturalize -denaturant -denaturate -denaturation -denature -denaturization -denaturize -denaturizer -denazify -denda -dendrachate -dendral -dendraxon -dendric -dendriform -dendrite -dendritic -dendritical -dendritically -dendritiform -dendrobe -dendroceratine -dendrochronological -dendrochronologist -dendrochronology -dendroclastic -dendrocoelan -dendrocoele -dendrocoelous -dendrocolaptine -dendrodont -dendrograph -dendrography -dendroid -dendroidal -dendrolatry -dendrolite -dendrologic -dendrological -dendrologist -dendrologous -dendrology -dendrometer -dendron -dendrophil -dendrophile -dendrophilous -dene -denegate -denegation -denehole -denervate -denervation -deneutralization -dengue -deniable -denial -denicotinize -denier -denierage -denierer -denigrate -denigration -denigrator -denim -denitrate -denitration -denitrator -denitrificant -denitrification -denitrificator -denitrifier -denitrify -denitrize -denization -denizen -denizenation -denizenize -denizenship -dennet -denominable -denominate -denomination -denominational -denominationalism -denominationalist -denominationalize -denominationally -denominative -denominatively -denominator -denotable -denotation -denotative -denotatively -denotativeness -denotatum -denote -denotement -denotive -denouement -denounce -denouncement -denouncer -dense -densely -densen -denseness -denshare -densher -denshire -densification -densifier -densify -densimeter -densimetric -densimetrically -densimetry -densitometer -density -dent -dentagra -dental -dentale -dentalgia -dentalism -dentality -dentalization -dentalize -dentally -dentaphone -dentary -dentata -dentate -dentated -dentately -dentation -dentatoangulate -dentatocillitate -dentatocostate -dentatocrenate -dentatoserrate -dentatosetaceous -dentatosinuate -dentel -dentelated -dentelle -dentelure -denter -dentex -dentical -denticate -denticle -denticular -denticulate -denticulately -denticulation -denticule -dentiferous -dentification -dentiform -dentifrice -dentigerous -dentil -dentilabial -dentilated -dentilation -dentile -dentilingual -dentiloquist -dentiloquy -dentimeter -dentin -dentinal -dentinalgia -dentinasal -dentine -dentinitis -dentinoblast -dentinocemental -dentinoid -dentinoma -dentiparous -dentiphone -dentiroster -dentirostral -dentirostrate -dentiscalp -dentist -dentistic -dentistical -dentistry -dentition -dentoid -dentolabial -dentolingual -dentonasal -dentosurgical -dentural -denture -denty -denucleate -denudant -denudate -denudation -denudative -denude -denuder -denumerable -denumerably -denumeral -denumerant -denumerantive -denumeration -denumerative -denunciable -denunciant -denunciate -denunciation -denunciative -denunciatively -denunciator -denunciatory -denutrition -deny -denyingly -deobstruct -deobstruent -deoccidentalize -deoculate -deodand -deodara -deodorant -deodorization -deodorize -deodorizer -deontological -deontologist -deontology -deoperculate -deoppilant -deoppilate -deoppilation -deoppilative -deordination -deorganization -deorganize -deorientalize -deorsumvergence -deorsumversion -deorusumduction -deossification -deossify -deota -deoxidant -deoxidate -deoxidation -deoxidative -deoxidator -deoxidization -deoxidize -deoxidizer -deoxygenate -deoxygenation -deoxygenization -deozonization -deozonize -deozonizer -depa -depaganize -depaint -depancreatization -depancreatize -depark -deparliament -depart -departed -departer -departisanize -departition -department -departmental -departmentalism -departmentalization -departmentalize -departmentally -departmentization -departmentize -departure -depas -depascent -depass -depasturable -depasturage -depasturation -depasture -depatriate -depauperate -depauperation -depauperization -depauperize -depencil -depend -dependability -dependable -dependableness -dependably -dependence -dependency -dependent -dependently -depender -depending -dependingly -depeople -deperdite -deperditely -deperition -depersonalization -depersonalize -depersonize -depetalize -depeter -depetticoat -dephase -dephilosophize -dephlegmate -dephlegmation -dephlegmatize -dephlegmator -dephlegmatory -dephlegmedness -dephlogisticate -dephlogisticated -dephlogistication -dephosphorization -dephosphorize -dephysicalization -dephysicalize -depickle -depict -depicter -depiction -depictive -depicture -depiedmontize -depigment -depigmentate -depigmentation -depigmentize -depilate -depilation -depilator -depilatory -depilitant -depilous -deplaceable -deplane -deplasmolysis -deplaster -deplenish -deplete -deplethoric -depletion -depletive -depletory -deploitation -deplorability -deplorable -deplorableness -deplorably -deploration -deplore -deplored -deploredly -deploredness -deplorer -deploringly -deploy -deployment -deplumate -deplumated -deplumation -deplume -deplump -depoetize -depoh -depolarization -depolarize -depolarizer -depolish -depolishing -depolymerization -depolymerize -depone -deponent -depopularize -depopulate -depopulation -depopulative -depopulator -deport -deportable -deportation -deportee -deporter -deportment -deposable -deposal -depose -deposer -deposit -depositary -depositation -depositee -deposition -depositional -depositive -depositor -depository -depositum -depositure -depot -depotentiate -depotentiation -depravation -deprave -depraved -depravedly -depravedness -depraver -depravingly -depravity -deprecable -deprecate -deprecatingly -deprecation -deprecative -deprecator -deprecatorily -deprecatoriness -deprecatory -depreciable -depreciant -depreciate -depreciatingly -depreciation -depreciative -depreciatively -depreciator -depreciatoriness -depreciatory -depredate -depredation -depredationist -depredator -depredatory -depress -depressant -depressed -depressibility -depressible -depressing -depressingly -depressingness -depression -depressive -depressively -depressiveness -depressomotor -depressor -depreter -deprint -depriorize -deprivable -deprival -deprivate -deprivation -deprivative -deprive -deprivement -depriver -deprovincialize -depside -depth -depthen -depthing -depthless -depthometer -depthwise -depullulation -depurant -depurate -depuration -depurative -depurator -depuratory -depursement -deputable -deputation -deputational -deputationist -deputationize -deputative -deputatively -deputator -depute -deputize -deputy -deputyship -dequeen -derabbinize -deracialize -deracinate -deracination -deradelphus -deradenitis -deradenoncus -derah -deraign -derail -derailer -derailment -derange -derangeable -deranged -derangement -deranger -derat -derate -derater -derationalization -derationalize -deratization -deray -derby -derbylite -dere -deregister -deregulationize -dereism -dereistic -dereistically -derelict -dereliction -derelictly -derelictness -dereligion -dereligionize -derencephalocele -derencephalus -deresinate -deresinize -deric -deride -derider -deridingly -derisible -derision -derisive -derisively -derisiveness -derisory -derivability -derivable -derivably -derival -derivant -derivate -derivately -derivation -derivational -derivationally -derivationist -derivatist -derivative -derivatively -derivativeness -derive -derived -derivedly -derivedness -deriver -derm -derma -dermad -dermahemia -dermal -dermalgia -dermalith -dermamyiasis -dermanaplasty -dermapostasis -dermapteran -dermapterous -dermaskeleton -dermasurgery -dermatagra -dermatalgia -dermataneuria -dermatatrophia -dermatauxe -dermathemia -dermatic -dermatine -dermatitis -dermatocele -dermatocellulitis -dermatoconiosis -dermatocoptic -dermatocyst -dermatodynia -dermatogen -dermatoglyphics -dermatograph -dermatographia -dermatography -dermatoheteroplasty -dermatoid -dermatological -dermatologist -dermatology -dermatolysis -dermatoma -dermatome -dermatomere -dermatomic -dermatomuscular -dermatomyces -dermatomycosis -dermatomyoma -dermatoneural -dermatoneurology -dermatoneurosis -dermatonosus -dermatopathia -dermatopathic -dermatopathology -dermatopathophobia -dermatophobia -dermatophone -dermatophony -dermatophyte -dermatophytic -dermatophytosis -dermatoplasm -dermatoplast -dermatoplastic -dermatoplasty -dermatopnagic -dermatopsy -dermatoptic -dermatorrhagia -dermatorrhea -dermatorrhoea -dermatosclerosis -dermatoscopy -dermatosis -dermatoskeleton -dermatotherapy -dermatotome -dermatotomy -dermatotropic -dermatoxerasia -dermatozoon -dermatozoonosis -dermatrophia -dermatrophy -dermenchysis -dermestid -dermestoid -dermic -dermis -dermitis -dermoblast -dermobranchiata -dermobranchiate -dermochrome -dermococcus -dermogastric -dermographia -dermographic -dermographism -dermography -dermohemal -dermohemia -dermohumeral -dermoid -dermoidal -dermoidectomy -dermol -dermolysis -dermomuscular -dermomycosis -dermoneural -dermoneurosis -dermonosology -dermoosseous -dermoossification -dermopathic -dermopathy -dermophlebitis -dermophobe -dermophyte -dermophytic -dermoplasty -dermopteran -dermopterous -dermoreaction -dermorhynchous -dermosclerite -dermoskeletal -dermoskeleton -dermostenosis -dermostosis -dermosynovitis -dermotropic -dermovaccine -dermutation -dern -dernier -derodidymus -derogate -derogately -derogation -derogative -derogatively -derogator -derogatorily -derogatoriness -derogatory -derotremate -derotrematous -derotreme -derout -derrick -derricking -derrickman -derride -derries -derringer -derry -dertrotheca -dertrum -deruinate -deruralize -derust -dervish -dervishhood -dervishism -dervishlike -desaccharification -desacralization -desacralize -desalt -desamidization -desand -desaturate -desaturation -desaurin -descale -descant -descanter -descantist -descend -descendable -descendance -descendant -descendence -descendent -descendental -descendentalism -descendentalist -descendentalistic -descender -descendibility -descendible -descending -descendingly -descension -descensional -descensionist -descensive -descent -descloizite -descort -describability -describable -describably -describe -describer -descrier -descript -description -descriptionist -descriptionless -descriptive -descriptively -descriptiveness -descriptory -descrive -descry -deseasonalize -desecrate -desecrater -desecration -desectionalize -deseed -desegmentation -desegmented -desensitization -desensitize -desensitizer -desentimentalize -deseret -desert -deserted -desertedly -desertedness -deserter -desertful -desertfully -desertic -deserticolous -desertion -desertism -desertless -desertlessly -desertlike -desertness -desertress -desertrice -desertward -deserve -deserved -deservedly -deservedness -deserveless -deserver -deserving -deservingly -deservingness -desex -desexualization -desexualize -deshabille -desi -desiccant -desiccate -desiccation -desiccative -desiccator -desiccatory -desiderant -desiderata -desiderate -desideration -desiderative -desideratum -desight -desightment -design -designable -designate -designation -designative -designator -designatory -designatum -designed -designedly -designedness -designee -designer -designful -designfully -designfulness -designing -designingly -designless -designlessly -designlessness -desilicate -desilicification -desilicify -desiliconization -desiliconize -desilver -desilverization -desilverize -desilverizer -desinence -desinent -desiodothyroxine -desipience -desipiency -desipient -desirability -desirable -desirableness -desirably -desire -desired -desiredly -desiredness -desireful -desirefulness -desireless -desirer -desiringly -desirous -desirously -desirousness -desist -desistance -desistive -desition -desize -desk -desklike -deslime -desma -desmachymatous -desmachyme -desmacyte -desman -desmarestiaceous -desmectasia -desmepithelium -desmic -desmid -desmidiaceous -desmidiologist -desmidiology -desmine -desmitis -desmocyte -desmocytoma -desmodont -desmodynia -desmogen -desmogenous -desmognathism -desmognathous -desmography -desmohemoblast -desmoid -desmology -desmoma -desmon -desmoneoplasm -desmonosology -desmopathologist -desmopathology -desmopathy -desmopelmous -desmopexia -desmopyknosis -desmorrhexis -desmosis -desmosite -desmotomy -desmotrope -desmotropic -desmotropism -desocialization -desocialize -desolate -desolately -desolateness -desolater -desolating -desolatingly -desolation -desolative -desonation -desophisticate -desophistication -desorption -desoxalate -desoxyanisoin -desoxybenzoin -desoxycinchonine -desoxycorticosterone -desoxymorphine -desoxyribonucleic -despair -despairer -despairful -despairfully -despairfulness -despairing -despairingly -despairingness -despecialization -despecialize -despecificate -despecification -despect -desperacy -desperado -desperadoism -desperate -desperately -desperateness -desperation -despicability -despicable -despicableness -despicably -despiritualization -despiritualize -despisable -despisableness -despisal -despise -despisedness -despisement -despiser -despisingly -despite -despiteful -despitefully -despitefulness -despiteous -despiteously -despoil -despoiler -despoilment -despoliation -despond -despondence -despondency -despondent -despondently -desponder -desponding -despondingly -despot -despotat -despotic -despotically -despoticalness -despoticly -despotism -despotist -despotize -despumate -despumation -desquamate -desquamation -desquamative -desquamatory -dess -dessa -dessert -dessertspoon -dessertspoonful -dessiatine -dessil -destabilize -destain -destandardize -desterilization -desterilize -destinate -destination -destine -destinezite -destinism -destinist -destiny -destitute -destitutely -destituteness -destitution -destour -destress -destrier -destroy -destroyable -destroyer -destroyingly -destructibility -destructible -destructibleness -destruction -destructional -destructionism -destructionist -destructive -destructively -destructiveness -destructivism -destructivity -destructor -destructuralize -desubstantiate -desucration -desuete -desuetude -desugar -desugarize -desulphur -desulphurate -desulphuration -desulphurization -desulphurize -desulphurizer -desultor -desultorily -desultoriness -desultorious -desultory -desuperheater -desyatin -desyl -desynapsis -desynaptic -desynonymization -desynonymize -detach -detachability -detachable -detachableness -detachably -detached -detachedly -detachedness -detacher -detachment -detail -detailed -detailedly -detailedness -detailer -detailism -detailist -detain -detainable -detainal -detainer -detainingly -detainment -detar -detassel -detax -detect -detectability -detectable -detectably -detectaphone -detecter -detectible -detection -detective -detectivism -detector -detenant -detent -detention -detentive -deter -deterge -detergence -detergency -detergent -detergible -deteriorate -deterioration -deteriorationist -deteriorative -deteriorator -deteriorism -deteriority -determent -determinability -determinable -determinableness -determinably -determinacy -determinant -determinantal -determinate -determinately -determinateness -determination -determinative -determinatively -determinativeness -determinator -determine -determined -determinedly -determinedness -determiner -determinism -determinist -deterministic -determinoid -deterrence -deterrent -detersion -detersive -detersively -detersiveness -detest -detestability -detestable -detestableness -detestably -detestation -detester -dethronable -dethrone -dethronement -dethroner -dethyroidism -detin -detinet -detinue -detonable -detonate -detonation -detonative -detonator -detorsion -detour -detoxicant -detoxicate -detoxication -detoxicator -detoxification -detoxify -detract -detracter -detractingly -detraction -detractive -detractively -detractiveness -detractor -detractory -detractress -detrain -detrainment -detribalization -detribalize -detriment -detrimental -detrimentality -detrimentally -detrimentalness -detrital -detrited -detrition -detritus -detrude -detruncate -detruncation -detrusion -detrusive -detrusor -detubation -detumescence -detune -detur -deuce -deuced -deucedly -deul -deurbanize -deutencephalic -deutencephalon -deuteragonist -deuteranomal -deuteranomalous -deuteranope -deuteranopia -deuteranopic -deuteric -deuteride -deuterium -deuteroalbumose -deuterocanonical -deuterocasease -deuterocone -deuteroconid -deuterodome -deuteroelastose -deuterofibrinose -deuterogamist -deuterogamy -deuterogelatose -deuterogenic -deuteroglobulose -deuteromorphic -deuteromyosinose -deuteron -deuteropathic -deuteropathy -deuteroplasm -deuteroprism -deuteroproteose -deuteroscopic -deuteroscopy -deuterostoma -deuterostomatous -deuterotokous -deuterotoky -deuterotype -deuterovitellose -deuterozooid -deutobromide -deutocarbonate -deutochloride -deutomala -deutomalal -deutomalar -deutomerite -deuton -deutonephron -deutonymph -deutonymphal -deutoplasm -deutoplasmic -deutoplastic -deutoscolex -deutoxide -dev -deva -devachan -devadasi -devall -devaloka -devalorize -devaluate -devaluation -devalue -devance -devaporate -devaporation -devast -devastate -devastating -devastatingly -devastation -devastative -devastator -devastavit -devaster -devata -develin -develop -developability -developable -developedness -developer -developist -development -developmental -developmentalist -developmentally -developmentarian -developmentary -developmentist -developoid -devertebrated -devest -deviability -deviable -deviancy -deviant -deviate -deviation -deviationism -deviationist -deviative -deviator -deviatory -device -deviceful -devicefully -devicefulness -devil -devilbird -devildom -deviled -deviler -deviless -devilet -devilfish -devilhood -deviling -devilish -devilishly -devilishness -devilism -devilize -devilkin -devillike -devilman -devilment -devilmonger -devilry -devilship -deviltry -devilward -devilwise -devilwood -devily -devious -deviously -deviousness -devirginate -devirgination -devirginator -devirilize -devisable -devisal -deviscerate -devisceration -devise -devisee -deviser -devisor -devitalization -devitalize -devitalized -devitaminize -devitrification -devitrify -devocalization -devocalize -devoice -devoid -devoir -devolatilize -devolute -devolution -devolutionary -devolutionist -devolve -devolvement -devonite -devonport -devonshire -devorative -devote -devoted -devotedly -devotedness -devotee -devoteeism -devotement -devoter -devotion -devotional -devotionalism -devotionalist -devotionality -devotionally -devotionalness -devotionate -devotionist -devour -devourable -devourer -devouress -devouring -devouringly -devouringness -devourment -devout -devoutless -devoutlessly -devoutlessness -devoutly -devoutness -devow -devulcanization -devulcanize -devulgarize -devvel -dew -dewan -dewanee -dewanship -dewater -dewaterer -dewax -dewbeam -dewberry -dewclaw -dewclawed -dewcup -dewdamp -dewdrop -dewdropper -dewer -deweylite -dewfall -dewflower -dewily -dewiness -dewlap -dewlapped -dewless -dewlight -dewlike -dewool -deworm -dewret -dewtry -dewworm -dewy -dexiocardia -dexiotrope -dexiotropic -dexiotropism -dexiotropous -dexter -dexterical -dexterity -dexterous -dexterously -dexterousness -dextrad -dextral -dextrality -dextrally -dextran -dextraural -dextrin -dextrinase -dextrinate -dextrinize -dextrinous -dextro -dextroaural -dextrocardia -dextrocardial -dextrocerebral -dextrocular -dextrocularity -dextroduction -dextroglucose -dextrogyrate -dextrogyration -dextrogyratory -dextrogyrous -dextrolactic -dextrolimonene -dextropinene -dextrorotary -dextrorotatary -dextrorotation -dextrorsal -dextrorse -dextrorsely -dextrosazone -dextrose -dextrosinistral -dextrosinistrally -dextrosuria -dextrotartaric -dextrotropic -dextrotropous -dextrous -dextrously -dextrousness -dextroversion -dey -deyhouse -deyship -deywoman -dezinc -dezincation -dezincification -dezincify -dezymotize -dha -dhabb -dhai -dhak -dhamnoo -dhan -dhangar -dhanuk -dhanush -dharana -dharani -dharma -dharmakaya -dharmashastra -dharmasmriti -dharmasutra -dharmsala -dharna -dhaura -dhauri -dhava -dhaw -dheri -dhobi -dhole -dhoni -dhoon -dhoti -dhoul -dhow -dhu -dhunchee -dhunchi -dhurra -dhyal -dhyana -di -diabase -diabasic -diabetes -diabetic -diabetogenic -diabetogenous -diabetometer -diablerie -diabolarch -diabolarchy -diabolatry -diabolepsy -diaboleptic -diabolic -diabolical -diabolically -diabolicalness -diabolification -diabolify -diabolism -diabolist -diabolization -diabolize -diabological -diabology -diabolology -diabrosis -diabrotic -diacanthous -diacaustic -diacetamide -diacetate -diacetic -diacetin -diacetine -diacetonuria -diaceturia -diacetyl -diacetylene -diachoretic -diachronic -diachylon -diachylum -diacid -diacipiperazine -diaclase -diaclasis -diaclastic -diacle -diaclinal -diacodion -diacoele -diacoelia -diaconal -diaconate -diaconia -diaconicon -diaconicum -diacope -diacranterian -diacranteric -diacrisis -diacritic -diacritical -diacritically -diacromyodian -diact -diactin -diactinal -diactinic -diactinism -diadelphian -diadelphic -diadelphous -diadem -diaderm -diadermic -diadoche -diadochite -diadochokinesia -diadochokinetic -diadromous -diadumenus -diaene -diaereses -diaeresis -diaeretic -diaetetae -diagenesis -diagenetic -diageotropic -diageotropism -diaglyph -diaglyphic -diagnosable -diagnose -diagnoseable -diagnoses -diagnosis -diagnostic -diagnostically -diagnosticate -diagnostication -diagnostician -diagnostics -diagometer -diagonal -diagonality -diagonalize -diagonally -diagonalwise -diagonic -diagram -diagrammatic -diagrammatical -diagrammatician -diagrammatize -diagrammeter -diagrammitically -diagraph -diagraphic -diagraphical -diagraphics -diagredium -diagrydium -diaheliotropic -diaheliotropically -diaheliotropism -diakinesis -dial -dialcohol -dialdehyde -dialect -dialectal -dialectalize -dialectally -dialectic -dialectical -dialectically -dialectician -dialecticism -dialecticize -dialectics -dialectologer -dialectological -dialectologist -dialectology -dialector -dialer -dialin -dialing -dialist -dialkyl -dialkylamine -diallage -diallagic -diallagite -diallagoid -diallel -diallelon -diallelus -diallyl -dialogic -dialogical -dialogically -dialogism -dialogist -dialogistic -dialogistical -dialogistically -dialogite -dialogize -dialogue -dialoguer -dialuric -dialycarpous -dialypetalous -dialyphyllous -dialysepalous -dialysis -dialystaminous -dialystelic -dialystely -dialytic -dialytically -dialyzability -dialyzable -dialyzate -dialyzation -dialyzator -dialyze -dialyzer -diamagnet -diamagnetic -diamagnetically -diamagnetism -diamantiferous -diamantine -diamantoid -diamb -diambic -diamesogamous -diameter -diametral -diametrally -diametric -diametrical -diametrically -diamicton -diamide -diamidogen -diamine -diaminogen -diaminogene -diammine -diamminobromide -diamminonitrate -diammonium -diamond -diamondback -diamonded -diamondiferous -diamondize -diamondlike -diamondwise -diamondwork -diamorphine -diamylose -dian -diander -diandrian -diandrous -dianetics -dianilid -dianilide -dianisidin -dianisidine -dianite -dianodal -dianoetic -dianoetical -dianoetically -diapalma -diapase -diapasm -diapason -diapasonal -diapause -diapedesis -diapedetic -diapensiaceous -diapente -diaper -diapering -diaphane -diaphaneity -diaphanie -diaphanometer -diaphanometric -diaphanometry -diaphanoscope -diaphanoscopy -diaphanotype -diaphanous -diaphanously -diaphanousness -diaphany -diaphone -diaphonia -diaphonic -diaphonical -diaphony -diaphoresis -diaphoretic -diaphoretical -diaphorite -diaphote -diaphototropic -diaphototropism -diaphragm -diaphragmal -diaphragmatic -diaphragmatically -diaphtherin -diaphysial -diaphysis -diaplasma -diaplex -diaplexal -diaplexus -diapnoic -diapnotic -diapophysial -diapophysis -diapositive -diapsid -diapsidan -diapyesis -diapyetic -diarch -diarchial -diarchic -diarchy -diarhemia -diarial -diarian -diarist -diaristic -diarize -diarrhea -diarrheal -diarrheic -diarrhetic -diarsenide -diarthric -diarthrodial -diarthrosis -diarticular -diary -diaschisis -diaschisma -diaschistic -diascope -diascopy -diascord -diascordium -diaskeuasis -diaskeuast -diaspidine -diaspine -diaspirin -diaspore -diastaltic -diastase -diastasic -diastasimetry -diastasis -diastataxic -diastataxy -diastatic -diastatically -diastem -diastema -diastematic -diastematomyelia -diaster -diastole -diastolic -diastomatic -diastral -diastrophe -diastrophic -diastrophism -diastrophy -diasynthesis -diasyrm -diatessaron -diathermacy -diathermal -diathermancy -diathermaneity -diathermanous -diathermic -diathermize -diathermometer -diathermotherapy -diathermous -diathermy -diathesic -diathesis -diathetic -diatom -diatomacean -diatomaceoid -diatomaceous -diatomean -diatomic -diatomicity -diatomiferous -diatomin -diatomist -diatomite -diatomous -diatonic -diatonical -diatonically -diatonous -diatoric -diatreme -diatribe -diatribist -diatropic -diatropism -diaulic -diaulos -diaxial -diaxon -diazenithal -diazeuctic -diazeuxis -diazide -diazine -diazoamine -diazoamino -diazoaminobenzene -diazoanhydride -diazoate -diazobenzene -diazohydroxide -diazoic -diazoimide -diazoimido -diazole -diazoma -diazomethane -diazonium -diazotate -diazotic -diazotizability -diazotizable -diazotization -diazotize -diazotype -dib -dibase -dibasic -dibasicity -dibatag -dibber -dibble -dibbler -dibbuk -dibenzophenazine -dibenzopyrrole -dibenzoyl -dibenzyl -dibhole -diblastula -diborate -dibrach -dibranch -dibranchiate -dibranchious -dibrom -dibromid -dibromide -dibromoacetaldehyde -dibromobenzene -dibs -dibstone -dibutyrate -dibutyrin -dicacodyl -dicaeology -dicalcic -dicalcium -dicarbonate -dicarbonic -dicarboxylate -dicarboxylic -dicarpellary -dicaryon -dicaryophase -dicaryophyte -dicaryotic -dicast -dicastery -dicastic -dicatalectic -dicatalexis -dice -diceboard -dicebox -dicecup -dicellate -diceman -dicentrine -dicephalism -dicephalous -dicephalus -diceplay -dicer -dicerion -dicerous -dicetyl -dich -dichas -dichasial -dichasium -dichastic -dichlamydeous -dichloramine -dichlorhydrin -dichloride -dichloroacetic -dichlorohydrin -dichloromethane -dichocarpism -dichocarpous -dichogamous -dichogamy -dichopodial -dichoptic -dichord -dichoree -dichotic -dichotomal -dichotomic -dichotomically -dichotomist -dichotomistic -dichotomization -dichotomize -dichotomous -dichotomously -dichotomy -dichroic -dichroiscope -dichroism -dichroite -dichroitic -dichromasy -dichromat -dichromate -dichromatic -dichromatism -dichromic -dichromism -dichronous -dichrooscope -dichroous -dichroscope -dichroscopic -dicing -dick -dickcissel -dickens -dicker -dickey -dickeybird -dickinsonite -dicky -diclinic -diclinism -diclinous -dicoccous -dicodeine -dicoelious -dicolic -dicolon -dicondylian -dicot -dicotyl -dicotyledon -dicotyledonary -dicotyledonous -dicotylous -dicoumarin -dicranaceous -dicranoid -dicranterian -dicrotal -dicrotic -dicrotism -dicrotous -dicta -dictate -dictatingly -dictation -dictational -dictative -dictator -dictatorial -dictatorialism -dictatorially -dictatorialness -dictatorship -dictatory -dictatress -dictatrix -dictature -dictic -diction -dictionary -dictum -dictynid -dictyoceratine -dictyodromous -dictyogen -dictyogenous -dictyoid -dictyonine -dictyopteran -dictyosiphonaceous -dictyosome -dictyostele -dictyostelic -dictyotaceous -dictyotic -dicyanide -dicyanine -dicyanodiamide -dicyanogen -dicycle -dicyclic -dicyclist -dicyemid -dicynodont -did -didactic -didactical -didacticality -didactically -didactician -didacticism -didacticity -didactics -didactive -didactyl -didactylism -didactylous -didapper -didascalar -didascaliae -didascalic -didascalos -didascaly -didder -diddle -diddler -diddy -didelph -didelphian -didelphic -didelphid -didelphine -didelphoid -didelphous -didepsid -didepside -didie -didine -didle -didna -didnt -didodecahedral -didodecahedron -didrachma -didrachmal -didromy -didst -diductor -didym -didymate -didymia -didymitis -didymium -didymoid -didymolite -didymous -didymus -didynamian -didynamic -didynamous -didynamy -die -dieb -dieback -diectasis -diedral -diedric -diehard -dielectric -dielectrically -dielike -diem -diemaker -diemaking -diencephalic -diencephalon -diene -dier -diesel -dieselization -dieselize -diesinker -diesinking -diesis -diestock -diet -dietal -dietarian -dietary -dieter -dietetic -dietetically -dietetics -dietetist -diethanolamine -diethyl -diethylamine -diethylenediamine -diethylstilbestrol -dietic -dietician -dietics -dietine -dietist -dietitian -dietotherapeutics -dietotherapy -dietotoxic -dietotoxicity -dietrichite -dietzeite -diewise -diezeugmenon -diferrion -diffame -diffarreation -differ -difference -differencingly -different -differentia -differentiable -differential -differentialize -differentially -differentiant -differentiate -differentiation -differentiator -differently -differentness -differingly -difficile -difficileness -difficult -difficultly -difficultness -difficulty -diffidation -diffide -diffidence -diffident -diffidently -diffidentness -diffinity -diffluence -diffluent -difform -difformed -difformity -diffract -diffraction -diffractive -diffractively -diffractiveness -diffractometer -diffrangibility -diffrangible -diffugient -diffusate -diffuse -diffused -diffusedly -diffusely -diffuseness -diffuser -diffusibility -diffusible -diffusibleness -diffusibly -diffusimeter -diffusiometer -diffusion -diffusionism -diffusionist -diffusive -diffusively -diffusiveness -diffusivity -diffusor -diformin -dig -digallate -digallic -digametic -digamist -digamma -digammated -digammic -digamous -digamy -digastric -digeneous -digenesis -digenetic -digenic -digenous -digeny -digerent -digest -digestant -digested -digestedly -digestedness -digester -digestibility -digestible -digestibleness -digestibly -digestion -digestional -digestive -digestively -digestiveness -digestment -diggable -digger -digging -diggings -dight -dighter -digit -digital -digitalein -digitalin -digitalis -digitalism -digitalization -digitalize -digitally -digitate -digitated -digitately -digitation -digitiform -digitigrade -digitigradism -digitinervate -digitinerved -digitipinnate -digitize -digitizer -digitogenin -digitonin -digitoplantar -digitorium -digitoxin -digitoxose -digitule -digitus -digladiate -digladiation -digladiator -diglossia -diglot -diglottic -diglottism -diglottist -diglucoside -diglyceride -diglyph -diglyphic -digmeat -dignification -dignified -dignifiedly -dignifiedness -dignify -dignitarial -dignitarian -dignitary -dignity -digoneutic -digoneutism -digonoporous -digonous -digram -digraph -digraphic -digredience -digrediency -digredient -digress -digressingly -digression -digressional -digressionary -digressive -digressively -digressiveness -digressory -digs -diguanide -digynian -digynous -dihalide -dihalo -dihalogen -dihedral -dihedron -dihexagonal -dihexahedral -dihexahedron -dihybrid -dihybridism -dihydrate -dihydrated -dihydrazone -dihydric -dihydride -dihydrite -dihydrocupreine -dihydrocuprin -dihydrogen -dihydrol -dihydronaphthalene -dihydronicotine -dihydrotachysterol -dihydroxy -dihydroxysuccinic -dihydroxytoluene -dihysteria -diiamb -diiambus -diiodide -diiodo -diiodoform -diipenates -diisatogen -dijudicate -dijudication -dika -dikage -dikamali -dikaryon -dikaryophase -dikaryophasic -dikaryophyte -dikaryophytic -dikaryotic -dike -dikegrave -dikelocephalid -diker -dikereeve -dikeside -diketo -diketone -dikkop -diktyonite -dilacerate -dilaceration -dilambdodont -dilamination -dilapidate -dilapidated -dilapidation -dilapidator -dilatability -dilatable -dilatableness -dilatably -dilatancy -dilatant -dilatate -dilatation -dilatative -dilatator -dilatatory -dilate -dilated -dilatedly -dilatedness -dilater -dilatingly -dilation -dilative -dilatometer -dilatometric -dilatometry -dilator -dilatorily -dilatoriness -dilatory -dildo -dilection -dilemma -dilemmatic -dilemmatical -dilemmatically -dilettant -dilettante -dilettanteish -dilettanteism -dilettanteship -dilettanti -dilettantish -dilettantism -dilettantist -diligence -diligency -diligent -diligentia -diligently -diligentness -dilker -dill -dilleniaceous -dilleniad -dilli -dillier -dilligrout -dilling -dillseed -dillue -dilluer -dillweed -dilly -dillydallier -dillydally -dillyman -dilo -dilogy -diluent -dilute -diluted -dilutedly -dilutedness -dilutee -dilutely -diluteness -dilutent -diluter -dilution -dilutive -dilutor -diluvia -diluvial -diluvialist -diluvian -diluvianism -diluvion -diluvium -dim -dimagnesic -dimanganion -dimanganous -dimastigate -dimber -dimberdamber -dimble -dime -dimensible -dimension -dimensional -dimensionality -dimensionally -dimensioned -dimensionless -dimensive -dimer -dimeran -dimercuric -dimercurion -dimercury -dimeric -dimeride -dimerism -dimerization -dimerlie -dimerous -dimetallic -dimeter -dimethoxy -dimethyl -dimethylamine -dimethylamino -dimethylaniline -dimethylbenzene -dimetria -dimetric -dimication -dimidiate -dimidiation -diminish -diminishable -diminishableness -diminisher -diminishingly -diminishment -diminuendo -diminutal -diminute -diminution -diminutival -diminutive -diminutively -diminutiveness -diminutivize -dimiss -dimission -dimissorial -dimissory -dimit -dimity -dimly -dimmed -dimmedness -dimmer -dimmest -dimmet -dimmish -dimness -dimolecular -dimoric -dimorph -dimorphic -dimorphism -dimorphous -dimple -dimplement -dimply -dimps -dimpsy -dimyarian -dimyaric -din -dinamode -dinaphthyl -dinar -dinder -dindle -dine -diner -dinergate -dineric -dinero -dinette -dineuric -ding -dingar -dingbat -dingdong -dinge -dingee -dinghee -dinghy -dingily -dinginess -dingle -dingleberry -dinglebird -dingledangle -dingly -dingmaul -dingo -dingus -dingy -dinheiro -dinic -dinical -dining -dinitrate -dinitril -dinitrile -dinitro -dinitrobenzene -dinitrocellulose -dinitrophenol -dinitrotoluene -dink -dinkey -dinkum -dinky -dinmont -dinner -dinnerless -dinnerly -dinnertime -dinnerware -dinnery -dinoceratan -dinoceratid -dinoflagellate -dinomic -dinornithic -dinornithid -dinornithine -dinornithoid -dinosaur -dinosaurian -dinothere -dinotherian -dinsome -dint -dintless -dinus -diobely -diobol -diocesan -diocese -dioctahedral -diode -diodont -dioecian -dioeciodimorphous -dioeciopolygamous -dioecious -dioeciously -dioeciousness -dioecism -dioecy -dioestrous -dioestrum -dioestrus -diogenite -dioicous -diol -diolefin -diolefinic -dionise -dionym -dionymal -diopside -dioptase -diopter -dioptograph -dioptometer -dioptometry -dioptoscopy -dioptra -dioptral -dioptrate -dioptric -dioptrical -dioptrically -dioptrics -dioptrometer -dioptrometry -dioptroscopy -dioptry -diorama -dioramic -diordinal -diorite -dioritic -diorthosis -diorthotic -dioscoreaceous -dioscorein -dioscorine -diose -diosmin -diosmose -diosmosis -diosmotic -diosphenol -diospyraceous -diota -diotic -diovular -dioxane -dioxide -dioxime -dioxindole -dioxy -dip -diparentum -dipartite -dipartition -dipaschal -dipentene -dipeptid -dipeptide -dipetalous -dipetto -diphase -diphaser -diphasic -diphead -diphenol -diphenyl -diphenylamine -diphenylchloroarsine -diphenylene -diphenylenimide -diphenylguanidine -diphenylmethane -diphenylquinomethane -diphenylthiourea -diphosgene -diphosphate -diphosphide -diphosphoric -diphosphothiamine -diphrelatic -diphtheria -diphtherial -diphtherian -diphtheric -diphtheritic -diphtheritically -diphtheritis -diphtheroid -diphtheroidal -diphtherotoxin -diphthong -diphthongal -diphthongalize -diphthongally -diphthongation -diphthongic -diphthongization -diphthongize -diphycercal -diphycercy -diphygenic -diphyletic -diphyllous -diphyodont -diphyozooid -diphyzooid -dipicrate -dipicrylamin -dipicrylamine -diplacusis -diplanar -diplanetic -diplanetism -diplantidian -diplarthrism -diplarthrous -diplasiasmus -diplasic -diplasion -diplegia -dipleidoscope -dipleura -dipleural -dipleurogenesis -dipleurogenetic -diplex -diplobacillus -diplobacterium -diploblastic -diplocardia -diplocardiac -diplocaulescent -diplocephalous -diplocephalus -diplocephaly -diplochlamydeous -diplococcal -diplococcemia -diplococcic -diplococcoid -diplococcus -diploconical -diplocoria -diploe -diploetic -diplogangliate -diplogenesis -diplogenetic -diplogenic -diploglossate -diplograph -diplographic -diplographical -diplography -diplohedral -diplohedron -diploic -diploid -diploidic -diploidion -diploidy -diplois -diplokaryon -diploma -diplomacy -diplomat -diplomate -diplomatic -diplomatical -diplomatically -diplomatics -diplomatism -diplomatist -diplomatize -diplomatology -diplomyelia -diplonema -diplonephridia -diploneural -diplont -diploperistomic -diplophase -diplophyte -diplopia -diplopic -diploplacula -diploplacular -diploplaculate -diplopod -diplopodic -diplopterous -diplopy -diplosis -diplosome -diplosphenal -diplosphene -diplospondylic -diplospondylism -diplostemonous -diplostemony -diplostichous -diplotegia -diplotene -diplumbic -dipneumonous -dipneustal -dipnoan -dipnoid -dipnoous -dipode -dipodic -dipody -dipolar -dipolarization -dipolarize -dipole -diporpa -dipotassic -dipotassium -dipped -dipper -dipperful -dipping -diprimary -diprismatic -dipropargyl -dipropyl -diprotodont -dipsacaceous -dipsaceous -dipsas -dipsetic -dipsey -dipsomania -dipsomaniac -dipsomaniacal -dipsosis -dipter -dipteraceous -dipterad -dipteral -dipteran -dipterist -dipterocarp -dipterocarpaceous -dipterocarpous -dipterocecidium -dipterological -dipterologist -dipterology -dipteron -dipteros -dipterous -diptote -diptych -dipware -dipygus -dipylon -dipyre -dipyrenous -dipyridyl -dird -dirdum -dire -direct -directable -directed -directer -direction -directional -directionally -directionless -directitude -directive -directively -directiveness -directivity -directly -directness -director -directoral -directorate -directorial -directorially -directorship -directory -directress -directrices -directrix -direful -direfully -direfulness -direly -dirempt -diremption -direness -direption -dirge -dirgeful -dirgelike -dirgeman -dirgler -dirhem -dirigent -dirigibility -dirigible -dirigomotor -diriment -dirk -dirl -dirndl -dirt -dirtbird -dirtboard -dirten -dirtily -dirtiness -dirtplate -dirty -dis -disability -disable -disabled -disablement -disabusal -disabuse -disacceptance -disaccharide -disaccharose -disaccommodate -disaccommodation -disaccord -disaccordance -disaccordant -disaccustom -disaccustomed -disaccustomedness -disacidify -disacknowledge -disacknowledgement -disacquaint -disacquaintance -disadjust -disadorn -disadvance -disadvantage -disadvantageous -disadvantageously -disadvantageousness -disadventure -disadventurous -disadvise -disaffect -disaffectation -disaffected -disaffectedly -disaffectedness -disaffection -disaffectionate -disaffiliate -disaffiliation -disaffirm -disaffirmance -disaffirmation -disaffirmative -disafforest -disafforestation -disafforestment -disagglomeration -disaggregate -disaggregation -disaggregative -disagio -disagree -disagreeability -disagreeable -disagreeableness -disagreeably -disagreed -disagreement -disagreer -disalicylide -disalign -disalignment -disalike -disallow -disallowable -disallowableness -disallowance -disally -disamenity -disanagrammatize -disanalogous -disangularize -disanimal -disanimate -disanimation -disannex -disannexation -disannul -disannuller -disannulment -disanoint -disanswerable -disapostle -disapparel -disappear -disappearance -disappearer -disappearing -disappoint -disappointed -disappointedly -disappointer -disappointing -disappointingly -disappointingness -disappointment -disappreciate -disappreciation -disapprobation -disapprobative -disapprobatory -disappropriate -disappropriation -disapprovable -disapproval -disapprove -disapprover -disapprovingly -disaproned -disarchbishop -disarm -disarmament -disarmature -disarmed -disarmer -disarming -disarmingly -disarrange -disarrangement -disarray -disarticulate -disarticulation -disarticulator -disasinate -disasinize -disassemble -disassembly -disassimilate -disassimilation -disassimilative -disassociate -disassociation -disaster -disastimeter -disastrous -disastrously -disastrousness -disattaint -disattire -disattune -disauthenticate -disauthorize -disavow -disavowable -disavowal -disavowedly -disavower -disavowment -disawa -disazo -disbalance -disbalancement -disband -disbandment -disbar -disbark -disbarment -disbelief -disbelieve -disbeliever -disbelieving -disbelievingly -disbench -disbenchment -disbloom -disbody -disbosom -disbowel -disbrain -disbranch -disbud -disbudder -disburden -disburdenment -disbursable -disburse -disbursement -disburser -disburthen -disbury -disbutton -disc -discage -discal -discalceate -discalced -discanonization -discanonize -discanter -discantus -discapacitate -discard -discardable -discarder -discardment -discarnate -discarnation -discase -discastle -discept -disceptation -disceptator -discern -discerner -discernible -discernibleness -discernibly -discerning -discerningly -discernment -discerp -discerpibility -discerpible -discerpibleness -discerptibility -discerptible -discerptibleness -discerption -discharacter -discharge -dischargeable -dischargee -discharger -discharging -discharity -discharm -dischase -discifloral -disciform -discigerous -discinct -discinoid -disciple -disciplelike -discipleship -disciplinability -disciplinable -disciplinableness -disciplinal -disciplinant -disciplinarian -disciplinarianism -disciplinarily -disciplinary -disciplinative -disciplinatory -discipline -discipliner -discipular -discircumspection -discission -discitis -disclaim -disclaimant -disclaimer -disclamation -disclamatory -disclass -disclassify -disclike -disclimax -discloister -disclose -disclosed -discloser -disclosive -disclosure -discloud -discoach -discoactine -discoblastic -discoblastula -discobolus -discocarp -discocarpium -discocarpous -discocephalous -discodactyl -discodactylous -discogastrula -discoglossid -discoglossoid -discographical -discography -discohexaster -discoid -discoidal -discolichen -discolith -discolor -discolorate -discoloration -discolored -discoloredness -discolorization -discolorment -discolourization -discomedusan -discomedusoid -discomfit -discomfiter -discomfiture -discomfort -discomfortable -discomfortableness -discomforting -discomfortingly -discommend -discommendable -discommendableness -discommendably -discommendation -discommender -discommode -discommodious -discommodiously -discommodiousness -discommodity -discommon -discommons -discommunity -discomorula -discompliance -discompose -discomposed -discomposedly -discomposedness -discomposing -discomposingly -discomposure -discomycete -discomycetous -disconanthous -disconcert -disconcerted -disconcertedly -disconcertedness -disconcerting -disconcertingly -disconcertingness -disconcertion -disconcertment -disconcord -disconduce -disconducive -disconform -disconformable -disconformity -discongruity -disconjure -disconnect -disconnected -disconnectedly -disconnectedness -disconnecter -disconnection -disconnective -disconnectiveness -disconnector -disconsider -disconsideration -disconsolate -disconsolately -disconsolateness -disconsolation -disconsonancy -disconsonant -discontent -discontented -discontentedly -discontentedness -discontentful -discontenting -discontentive -discontentment -discontiguity -discontiguous -discontiguousness -discontinuable -discontinuance -discontinuation -discontinue -discontinuee -discontinuer -discontinuity -discontinuor -discontinuous -discontinuously -discontinuousness -disconula -disconvenience -disconvenient -disconventicle -discophile -discophoran -discophore -discophorous -discoplacenta -discoplacental -discoplacentalian -discoplasm -discopodous -discord -discordance -discordancy -discordant -discordantly -discordantness -discordful -discording -discorporate -discorrespondency -discorrespondent -discount -discountable -discountenance -discountenancer -discounter -discouple -discourage -discourageable -discouragement -discourager -discouraging -discouragingly -discouragingness -discourse -discourseless -discourser -discoursive -discoursively -discoursiveness -discourteous -discourteously -discourteousness -discourtesy -discous -discovenant -discover -discoverability -discoverable -discoverably -discovered -discoverer -discovert -discoverture -discovery -discreate -discreation -discredence -discredit -discreditability -discreditable -discreet -discreetly -discreetness -discrepance -discrepancy -discrepant -discrepantly -discrepate -discrepation -discrested -discrete -discretely -discreteness -discretion -discretional -discretionally -discretionarily -discretionary -discretive -discretively -discretiveness -discriminability -discriminable -discriminal -discriminant -discriminantal -discriminate -discriminately -discriminateness -discriminating -discriminatingly -discrimination -discriminational -discriminative -discriminatively -discriminator -discriminatory -discrown -disculpate -disculpation -disculpatory -discumber -discursative -discursativeness -discursify -discursion -discursive -discursively -discursiveness -discursory -discursus -discurtain -discus -discuss -discussable -discussant -discusser -discussible -discussion -discussional -discussionism -discussionist -discussive -discussment -discutable -discutient -disdain -disdainable -disdainer -disdainful -disdainfully -disdainfulness -disdainly -disdeceive -disdenominationalize -disdiaclast -disdiaclastic -disdiapason -disdiazo -disdiplomatize -disdodecahedroid -disdub -disease -diseased -diseasedly -diseasedness -diseaseful -diseasefulness -disecondary -disedge -disedification -disedify -diseducate -diselder -diselectrification -diselectrify -diselenide -disematism -disembargo -disembark -disembarkation -disembarkment -disembarrass -disembarrassment -disembattle -disembed -disembellish -disembitter -disembocation -disembodiment -disembody -disembogue -disemboguement -disembosom -disembowel -disembowelment -disembower -disembroil -disemburden -diseme -disemic -disemplane -disemploy -disemployment -disempower -disenable -disenablement -disenact -disenactment -disenamor -disenamour -disenchain -disenchant -disenchanter -disenchantingly -disenchantment -disenchantress -disencharm -disenclose -disencumber -disencumberment -disencumbrance -disendow -disendower -disendowment -disenfranchise -disenfranchisement -disengage -disengaged -disengagedness -disengagement -disengirdle -disenjoy -disenjoyment -disenmesh -disennoble -disennui -disenshroud -disenslave -disensoul -disensure -disentail -disentailment -disentangle -disentanglement -disentangler -disenthral -disenthrall -disenthrallment -disenthralment -disenthrone -disenthronement -disentitle -disentomb -disentombment -disentrain -disentrainment -disentrammel -disentrance -disentrancement -disentwine -disenvelop -disepalous -disequalize -disequalizer -disequilibrate -disequilibration -disequilibrium -disestablish -disestablisher -disestablishment -disestablishmentarian -disesteem -disesteemer -disestimation -disexcommunicate -disfaith -disfame -disfashion -disfavor -disfavorer -disfeature -disfeaturement -disfellowship -disfen -disfiguration -disfigurative -disfigure -disfigurement -disfigurer -disfiguringly -disflesh -disfoliage -disforest -disforestation -disfranchise -disfranchisement -disfranchiser -disfrequent -disfriar -disfrock -disfurnish -disfurnishment -disgarland -disgarnish -disgarrison -disgavel -disgeneric -disgenius -disgig -disglorify -disglut -disgood -disgorge -disgorgement -disgorger -disgospel -disgown -disgrace -disgraceful -disgracefully -disgracefulness -disgracement -disgracer -disgracious -disgradation -disgrade -disgregate -disgregation -disgruntle -disgruntlement -disguisable -disguisal -disguise -disguised -disguisedly -disguisedness -disguiseless -disguisement -disguiser -disguising -disgulf -disgust -disgusted -disgustedly -disgustedness -disguster -disgustful -disgustfully -disgustfulness -disgusting -disgustingly -disgustingness -dish -dishabilitate -dishabilitation -dishabille -dishabituate -dishallow -dishallucination -disharmonic -disharmonical -disharmonious -disharmonism -disharmonize -disharmony -dishboard -dishcloth -dishclout -disheart -dishearten -disheartener -disheartening -dishearteningly -disheartenment -disheaven -dished -dishellenize -dishelm -disher -disherent -disherison -disherit -disheritment -dishevel -disheveled -dishevelment -dishexecontahedroid -dishful -dishlike -dishling -dishmaker -dishmaking -dishmonger -dishome -dishonest -dishonestly -dishonor -dishonorable -dishonorableness -dishonorably -dishonorary -dishonorer -dishorn -dishorner -dishorse -dishouse -dishpan -dishpanful -dishrag -dishumanize -dishwasher -dishwashing -dishwashings -dishwater -dishwatery -dishwiper -dishwiping -disidentify -disilane -disilicane -disilicate -disilicic -disilicid -disilicide -disillude -disilluminate -disillusion -disillusionist -disillusionize -disillusionizer -disillusionment -disillusive -disimagine -disimbitter -disimitate -disimitation -disimmure -disimpark -disimpassioned -disimprison -disimprisonment -disimprove -disimprovement -disincarcerate -disincarceration -disincarnate -disincarnation -disinclination -disincline -disincorporate -disincorporation -disincrust -disincrustant -disincrustion -disindividualize -disinfect -disinfectant -disinfecter -disinfection -disinfective -disinfector -disinfest -disinfestation -disinfeudation -disinflame -disinflate -disinflation -disingenuity -disingenuous -disingenuously -disingenuousness -disinherison -disinherit -disinheritable -disinheritance -disinhume -disinsulation -disinsure -disintegrable -disintegrant -disintegrate -disintegration -disintegrationist -disintegrative -disintegrator -disintegratory -disintegrity -disintegrous -disintensify -disinter -disinterest -disinterested -disinterestedly -disinterestedness -disinteresting -disinterment -disintertwine -disintrench -disintricate -disinvagination -disinvest -disinvestiture -disinvigorate -disinvite -disinvolve -disjasked -disject -disjection -disjoin -disjoinable -disjoint -disjointed -disjointedly -disjointedness -disjointly -disjointure -disjunct -disjunction -disjunctive -disjunctively -disjunctor -disjuncture -disjune -disk -diskelion -diskless -disklike -dislaurel -disleaf -dislegitimate -dislevelment -dislicense -dislikable -dislike -dislikelihood -disliker -disliking -dislimn -dislink -dislip -disload -dislocability -dislocable -dislocate -dislocated -dislocatedly -dislocatedness -dislocation -dislocator -dislocatory -dislodge -dislodgeable -dislodgement -dislove -disloyal -disloyalist -disloyally -disloyalty -disluster -dismain -dismal -dismality -dismalize -dismally -dismalness -disman -dismantle -dismantlement -dismantler -dismarble -dismark -dismarket -dismask -dismast -dismastment -dismay -dismayable -dismayed -dismayedness -dismayful -dismayfully -dismayingly -disme -dismember -dismembered -dismemberer -dismemberment -dismembrate -dismembrator -disminion -disminister -dismiss -dismissable -dismissal -dismissible -dismissingly -dismission -dismissive -dismissory -dismoded -dismount -dismountable -dismutation -disna -disnaturalization -disnaturalize -disnature -disnest -disnew -disniche -disnosed -disnumber -disobedience -disobedient -disobediently -disobey -disobeyal -disobeyer -disobligation -disoblige -disobliger -disobliging -disobligingly -disobligingness -disoccupation -disoccupy -disodic -disodium -disomatic -disomatous -disomic -disomus -disoperculate -disorb -disorchard -disordained -disorder -disordered -disorderedly -disorderedness -disorderer -disorderliness -disorderly -disordinated -disordination -disorganic -disorganization -disorganize -disorganizer -disorient -disorientate -disorientation -disown -disownable -disownment -disoxygenate -disoxygenation -disozonize -dispapalize -disparage -disparageable -disparagement -disparager -disparaging -disparagingly -disparate -disparately -disparateness -disparation -disparity -dispark -dispart -dispartment -dispassionate -dispassionately -dispassionateness -dispassioned -dispatch -dispatcher -dispatchful -dispatriated -dispauper -dispauperize -dispeace -dispeaceful -dispel -dispeller -dispend -dispender -dispendious -dispendiously -dispenditure -dispensability -dispensable -dispensableness -dispensary -dispensate -dispensation -dispensational -dispensative -dispensatively -dispensator -dispensatorily -dispensatory -dispensatress -dispensatrix -dispense -dispenser -dispensingly -dispeople -dispeoplement -dispeopler -dispergate -dispergation -dispergator -dispericraniate -disperiwig -dispermic -dispermous -dispermy -dispersal -dispersant -disperse -dispersed -dispersedly -dispersedness -dispersement -disperser -dispersibility -dispersible -dispersion -dispersity -dispersive -dispersively -dispersiveness -dispersoid -dispersoidological -dispersoidology -dispersonalize -dispersonate -dispersonification -dispersonify -dispetal -disphenoid -dispiece -dispireme -dispirit -dispirited -dispiritedly -dispiritedness -dispiritingly -dispiritment -dispiteous -dispiteously -dispiteousness -displace -displaceability -displaceable -displacement -displacency -displacer -displant -display -displayable -displayed -displayer -displease -displeased -displeasedly -displeaser -displeasing -displeasingly -displeasingness -displeasurable -displeasurably -displeasure -displeasurement -displenish -displicency -displume -displuviate -dispondaic -dispondee -dispone -disponee -disponent -disponer -dispope -dispopularize -disporous -disport -disportive -disportment -disposability -disposable -disposableness -disposal -dispose -disposed -disposedly -disposedness -disposer -disposingly -disposition -dispositional -dispositioned -dispositive -dispositively -dispossess -dispossession -dispossessor -dispossessory -dispost -disposure -dispowder -dispractice -dispraise -dispraiser -dispraisingly -dispread -dispreader -disprejudice -disprepare -disprince -disprison -disprivacied -disprivilege -disprize -disprobabilization -disprobabilize -disprobative -dispromise -disproof -disproportion -disproportionable -disproportionableness -disproportionably -disproportional -disproportionality -disproportionally -disproportionalness -disproportionate -disproportionately -disproportionateness -disproportionation -disprovable -disproval -disprove -disprovement -disproven -disprover -dispulp -dispunct -dispunishable -dispunitive -disputability -disputable -disputableness -disputably -disputant -disputation -disputatious -disputatiously -disputatiousness -disputative -disputatively -disputativeness -disputator -dispute -disputeless -disputer -disqualification -disqualify -disquantity -disquiet -disquieted -disquietedly -disquietedness -disquieten -disquieter -disquieting -disquietingly -disquietly -disquietness -disquietude -disquiparancy -disquiparant -disquiparation -disquisite -disquisition -disquisitional -disquisitionary -disquisitive -disquisitively -disquisitor -disquisitorial -disquisitory -disquixote -disrank -disrate -disrealize -disrecommendation -disregard -disregardable -disregardance -disregardant -disregarder -disregardful -disregardfully -disregardfulness -disrelated -disrelation -disrelish -disrelishable -disremember -disrepair -disreputability -disreputable -disreputableness -disreputably -disreputation -disrepute -disrespect -disrespecter -disrespectful -disrespectfully -disrespectfulness -disrestore -disring -disrobe -disrobement -disrober -disroof -disroost -disroot -disrudder -disrump -disrupt -disruptability -disruptable -disrupter -disruption -disruptionist -disruptive -disruptively -disruptiveness -disruptment -disruptor -disrupture -diss -dissatisfaction -dissatisfactoriness -dissatisfactory -dissatisfied -dissatisfiedly -dissatisfiedness -dissatisfy -dissaturate -disscepter -disseat -dissect -dissected -dissectible -dissecting -dissection -dissectional -dissective -dissector -disseize -disseizee -disseizin -disseizor -disseizoress -disselboom -dissemblance -dissemble -dissembler -dissemblingly -dissembly -dissemilative -disseminate -dissemination -disseminative -disseminator -disseminule -dissension -dissensualize -dissent -dissentaneous -dissentaneousness -dissenter -dissenterism -dissentience -dissentiency -dissentient -dissenting -dissentingly -dissentious -dissentiously -dissentism -dissentment -dissepiment -dissepimental -dissert -dissertate -dissertation -dissertational -dissertationist -dissertative -dissertator -disserve -disservice -disserviceable -disserviceableness -disserviceably -dissettlement -dissever -disseverance -disseverment -disshadow -dissheathe -disshroud -dissidence -dissident -dissidently -dissight -dissightly -dissiliency -dissilient -dissimilar -dissimilarity -dissimilarly -dissimilars -dissimilate -dissimilation -dissimilatory -dissimile -dissimilitude -dissimulate -dissimulation -dissimulative -dissimulator -dissimule -dissimuler -dissipable -dissipate -dissipated -dissipatedly -dissipatedness -dissipater -dissipation -dissipative -dissipativity -dissipator -dissociability -dissociable -dissociableness -dissocial -dissociality -dissocialize -dissociant -dissociate -dissociation -dissociative -dissoconch -dissogeny -dissogony -dissolubility -dissoluble -dissolubleness -dissolute -dissolutely -dissoluteness -dissolution -dissolutional -dissolutionism -dissolutionist -dissolutive -dissolvable -dissolvableness -dissolve -dissolveability -dissolvent -dissolver -dissolving -dissolvingly -dissonance -dissonancy -dissonant -dissonantly -dissonous -dissoul -dissuade -dissuader -dissuasion -dissuasive -dissuasively -dissuasiveness -dissuasory -dissuit -dissuitable -dissuited -dissyllabic -dissyllabification -dissyllabify -dissyllabism -dissyllabize -dissyllable -dissymmetric -dissymmetrical -dissymmetrically -dissymmetry -dissympathize -dissympathy -distad -distaff -distain -distal -distale -distally -distalwards -distance -distanceless -distancy -distannic -distant -distantly -distantness -distaste -distasted -distasteful -distastefully -distastefulness -distater -distemonous -distemper -distemperature -distempered -distemperedly -distemperedness -distemperer -distenant -distend -distendedly -distender -distensibility -distensible -distensive -distent -distention -disthene -disthrall -disthrone -distich -distichous -distichously -distill -distillable -distillage -distilland -distillate -distillation -distillatory -distilled -distiller -distillery -distilling -distillmint -distinct -distinctify -distinction -distinctional -distinctionless -distinctive -distinctively -distinctiveness -distinctly -distinctness -distingue -distinguish -distinguishability -distinguishable -distinguishableness -distinguishably -distinguished -distinguishedly -distinguisher -distinguishing -distinguishingly -distinguishment -distoclusion -distomatosis -distomatous -distome -distomian -distomiasis -distort -distorted -distortedly -distortedness -distorter -distortion -distortional -distortionist -distortionless -distortive -distract -distracted -distractedly -distractedness -distracter -distractibility -distractible -distractingly -distraction -distractive -distractively -distrain -distrainable -distrainee -distrainer -distrainment -distrainor -distraint -distrait -distraite -distraught -distress -distressed -distressedly -distressedness -distressful -distressfully -distressfulness -distressing -distressingly -distributable -distributary -distribute -distributed -distributedly -distributee -distributer -distribution -distributional -distributionist -distributival -distributive -distributively -distributiveness -distributor -distributress -district -distrouser -distrust -distruster -distrustful -distrustfully -distrustfulness -distrustingly -distune -disturb -disturbance -disturbative -disturbed -disturbedly -disturber -disturbing -disturbingly -disturn -disturnpike -disubstituted -disubstitution -disulfonic -disulfuric -disulphate -disulphide -disulphonate -disulphone -disulphonic -disulphoxide -disulphuret -disulphuric -disuniform -disuniformity -disunify -disunion -disunionism -disunionist -disunite -disuniter -disunity -disusage -disusance -disuse -disutility -disutilize -disvaluation -disvalue -disvertebrate -disvisage -disvoice -disvulnerability -diswarren -diswench -diswood -disworth -disyllabic -disyllable -disyoke -dit -dita -dital -ditch -ditchbank -ditchbur -ditchdigger -ditchdown -ditcher -ditchless -ditchside -ditchwater -dite -diter -diterpene -ditertiary -ditetragonal -dithalous -dithecal -ditheism -ditheist -ditheistic -ditheistical -dithematic -dither -dithery -dithiobenzoic -dithioglycol -dithioic -dithion -dithionate -dithionic -dithionite -dithionous -dithymol -dithyramb -dithyrambic -dithyrambically -ditokous -ditolyl -ditone -ditrematous -ditremid -ditrichotomous -ditriglyph -ditriglyphic -ditrigonal -ditrigonally -ditrochean -ditrochee -ditrochous -ditroite -dittamy -dittander -dittany -dittay -dittied -ditto -dittogram -dittograph -dittographic -dittography -dittology -ditty -diumvirate -diuranate -diureide -diuresis -diuretic -diuretically -diureticalness -diurnal -diurnally -diurnalness -diurnation -diurne -diurnule -diuturnal -diuturnity -div -diva -divagate -divagation -divalence -divalent -divan -divariant -divaricate -divaricately -divaricating -divaricatingly -divarication -divaricator -divata -dive -divekeeper -divel -divellent -divellicate -diver -diverge -divergement -divergence -divergency -divergent -divergently -diverging -divergingly -divers -diverse -diversely -diverseness -diversicolored -diversifiability -diversifiable -diversification -diversified -diversifier -diversiflorate -diversiflorous -diversifoliate -diversifolious -diversiform -diversify -diversion -diversional -diversionary -diversipedate -diversisporous -diversity -diversly -diversory -divert -divertedly -diverter -divertibility -divertible -diverticle -diverticular -diverticulate -diverticulitis -diverticulosis -diverticulum -diverting -divertingly -divertingness -divertisement -divertive -divertor -divest -divestible -divestitive -divestiture -divestment -divesture -dividable -dividableness -divide -divided -dividedly -dividedness -dividend -divider -dividing -dividingly -dividual -dividualism -dividually -dividuity -dividuous -divinable -divinail -divination -divinator -divinatory -divine -divinely -divineness -diviner -divineress -diving -divinify -divining -diviningly -divinity -divinityship -divinization -divinize -divinyl -divisibility -divisible -divisibleness -divisibly -division -divisional -divisionally -divisionary -divisionism -divisionist -divisionistic -divisive -divisively -divisiveness -divisor -divisorial -divisory -divisural -divorce -divorceable -divorcee -divorcement -divorcer -divorcible -divorcive -divot -divoto -divulgate -divulgater -divulgation -divulgatory -divulge -divulgement -divulgence -divulger -divulse -divulsion -divulsive -divulsor -divus -divvy -diwata -dixenite -dixie -dixit -dixy -dizain -dizen -dizenment -dizoic -dizygotic -dizzard -dizzily -dizziness -dizzy -djasakid -djave -djehad -djerib -djersa -do -doab -doable -doarium -doat -doated -doater -doating -doatish -dob -dobbed -dobber -dobbin -dobbing -dobby -dobe -dobla -doblon -dobra -dobrao -dobson -doby -doc -docent -docentship -dochmiac -dochmiacal -dochmiasis -dochmius -docibility -docible -docibleness -docile -docilely -docility -docimasia -docimastic -docimastical -docimasy -docimology -docity -dock -dockage -docken -docker -docket -dockhead -dockhouse -dockization -dockize -dockland -dockmackie -dockman -dockmaster -dockside -dockyard -dockyardman -docmac -docoglossan -docoglossate -docosane -doctor -doctoral -doctorally -doctorate -doctorbird -doctordom -doctoress -doctorfish -doctorhood -doctorial -doctorially -doctorization -doctorize -doctorless -doctorlike -doctorly -doctorship -doctress -doctrinaire -doctrinairism -doctrinal -doctrinalism -doctrinalist -doctrinality -doctrinally -doctrinarian -doctrinarianism -doctrinarily -doctrinarity -doctrinary -doctrinate -doctrine -doctrinism -doctrinist -doctrinization -doctrinize -doctrix -document -documental -documentalist -documentarily -documentary -documentation -documentize -dod -dodd -doddart -dodded -dodder -doddered -dodderer -doddering -doddery -doddie -dodding -doddle -doddy -doddypoll -dodecade -dodecadrachm -dodecafid -dodecagon -dodecagonal -dodecahedral -dodecahedric -dodecahedron -dodecahydrate -dodecahydrated -dodecamerous -dodecane -dodecanoic -dodecant -dodecapartite -dodecapetalous -dodecarch -dodecarchy -dodecasemic -dodecastyle -dodecastylos -dodecasyllabic -dodecasyllable -dodecatemory -dodecatoic -dodecatyl -dodecatylic -dodecuplet -dodecyl -dodecylene -dodecylic -dodge -dodgeful -dodger -dodgery -dodgily -dodginess -dodgy -dodkin -dodlet -dodman -dodo -dodoism -dodrans -doe -doebird -doeglic -doegling -doer -does -doeskin -doesnt -doest -doff -doffer -doftberry -dog -dogal -dogate -dogbane -dogberry -dogbite -dogblow -dogboat -dogbolt -dogbush -dogcart -dogcatcher -dogdom -doge -dogedom -dogeless -dogeship -dogface -dogfall -dogfight -dogfish -dogfoot -dogged -doggedly -doggedness -dogger -doggerel -doggereler -doggerelism -doggerelist -doggerelize -doggerelizer -doggery -doggess -doggish -doggishly -doggishness -doggo -doggone -doggoned -doggrel -doggrelize -doggy -doghead -doghearted -doghole -doghood -doghouse -dogie -dogless -doglike -dogly -dogma -dogman -dogmata -dogmatic -dogmatical -dogmatically -dogmaticalness -dogmatician -dogmatics -dogmatism -dogmatist -dogmatization -dogmatize -dogmatizer -dogmouth -dogplate -dogproof -dogs -dogship -dogshore -dogskin -dogsleep -dogstone -dogtail -dogtie -dogtooth -dogtoothing -dogtrick -dogtrot -dogvane -dogwatch -dogwood -dogy -doigt -doiled -doily -doina -doing -doings -doit -doited -doitkin -doitrified -doke -dokhma -dokimastic -dola -dolabra -dolabrate -dolabriform -dolcan -dolcian -dolciano -dolcino -doldrum -doldrums -dole -dolefish -doleful -dolefully -dolefulness -dolefuls -dolent -dolently -dolerite -doleritic -dolerophanite -dolesman -dolesome -dolesomely -dolesomeness -doless -doli -dolia -dolichoblond -dolichocephal -dolichocephali -dolichocephalic -dolichocephalism -dolichocephalize -dolichocephalous -dolichocephaly -dolichocercic -dolichocnemic -dolichocranial -dolichofacial -dolichohieric -dolichopellic -dolichopodous -dolichoprosopic -dolichos -dolichosaur -dolichostylous -dolichotmema -dolichuric -dolichurus -dolina -doline -dolioform -dolium -doll -dollar -dollarbird -dollardee -dollardom -dollarfish -dollarleaf -dollbeer -dolldom -dollface -dollfish -dollhood -dollhouse -dollier -dolliness -dollish -dollishly -dollishness -dollmaker -dollmaking -dollop -dollship -dolly -dollyman -dollyway -dolman -dolmen -dolmenic -dolomite -dolomitic -dolomitization -dolomitize -dolomization -dolomize -dolor -doloriferous -dolorific -dolorifuge -dolorous -dolorously -dolorousness -dolose -dolous -dolphin -dolphinlike -dolt -dolthead -doltish -doltishly -doltishness -dom -domain -domainal -domal -domanial -domatium -domatophobia -domba -dome -domelike -doment -domer -domesday -domestic -domesticable -domesticality -domestically -domesticate -domestication -domesticative -domesticator -domesticity -domesticize -domett -domeykite -domic -domical -domically -domicile -domicilement -domiciliar -domiciliary -domiciliate -domiciliation -dominance -dominancy -dominant -dominantly -dominate -dominated -dominatingly -domination -dominative -dominator -domine -domineer -domineerer -domineering -domineeringly -domineeringness -dominial -dominical -dominicale -dominie -dominion -dominionism -dominionist -dominium -domino -dominus -domitable -domite -domitic -domn -domnei -domoid -dompt -domy -don -donable -donaciform -donary -donatary -donate -donated -donatee -donation -donative -donatively -donator -donatory -donatress -donax -doncella -done -donee -doney -dong -donga -dongon -donjon -donkey -donkeyback -donkeyish -donkeyism -donkeyman -donkeywork -donna -donnered -donnert -donnish -donnishness -donnism -donnot -donor -donorship -donought -donship -donsie -dont -donum -doob -doocot -doodab -doodad -doodle -doodlebug -doodler -doodlesack -doohickey -doohickus -doohinkey -doohinkus -dooja -dook -dooket -dookit -dool -doolee -dooley -dooli -doolie -dooly -doom -doomage -doombook -doomer -doomful -dooms -doomsday -doomsman -doomstead -doon -door -doorba -doorbell -doorboy -doorbrand -doorcase -doorcheek -doored -doorframe -doorhead -doorjamb -doorkeeper -doorknob -doorless -doorlike -doormaid -doormaker -doormaking -doorman -doornail -doorplate -doorpost -doorsill -doorstead -doorstep -doorstone -doorstop -doorward -doorway -doorweed -doorwise -dooryard -dop -dopa -dopamelanin -dopaoxidase -dopatta -dope -dopebook -doper -dopester -dopey -doppelkummel -dopper -doppia -dopplerite -dor -dorab -dorad -dorado -doraphobia -dorbeetle -dorcastry -doree -dorestane -dorhawk -doria -dorje -dorlach -dorlot -dorm -dormancy -dormant -dormer -dormered -dormie -dormient -dormilona -dormition -dormitive -dormitory -dormouse -dormy -dorn -dorneck -dornic -dornick -dornock -dorp -dorsabdominal -dorsabdominally -dorsad -dorsal -dorsale -dorsalgia -dorsalis -dorsally -dorsalmost -dorsalward -dorsalwards -dorsel -dorser -dorsibranch -dorsibranchiate -dorsicollar -dorsicolumn -dorsicommissure -dorsicornu -dorsiduct -dorsiferous -dorsifixed -dorsiflex -dorsiflexion -dorsiflexor -dorsigrade -dorsilateral -dorsilumbar -dorsimedian -dorsimesal -dorsimeson -dorsiparous -dorsispinal -dorsiventral -dorsiventrality -dorsiventrally -dorsoabdominal -dorsoanterior -dorsoapical -dorsocaudad -dorsocaudal -dorsocentral -dorsocephalad -dorsocephalic -dorsocervical -dorsocervically -dorsodynia -dorsoepitrochlear -dorsointercostal -dorsointestinal -dorsolateral -dorsolumbar -dorsomedial -dorsomedian -dorsomesal -dorsonasal -dorsonuchal -dorsopleural -dorsoposteriad -dorsoposterior -dorsoradial -dorsosacral -dorsoscapular -dorsosternal -dorsothoracic -dorsoventrad -dorsoventral -dorsoventrally -dorsulum -dorsum -dorsumbonal -dorter -dortiness -dortiship -dorts -dorty -doruck -dory -doryphorus -dos -dosa -dosadh -dosage -dose -doser -dosimeter -dosimetric -dosimetrician -dosimetrist -dosimetry -dosiology -dosis -dosology -doss -dossal -dossel -dosser -dosseret -dossier -dossil -dossman -dot -dotage -dotal -dotard -dotardism -dotardly -dotardy -dotate -dotation -dotchin -dote -doted -doter -dothideaceous -dothienenteritis -dotiness -doting -dotingly -dotingness -dotish -dotishness -dotkin -dotless -dotlike -dotriacontane -dotted -dotter -dotterel -dottily -dottiness -dotting -dottle -dottler -dotty -doty -douar -double -doubled -doubledamn -doubleganger -doublegear -doublehanded -doublehandedly -doublehandedness -doublehatching -doublehearted -doubleheartedness -doublehorned -doubleleaf -doublelunged -doubleness -doubler -doublet -doubleted -doubleton -doubletone -doubletree -doublets -doubling -doubloon -doubly -doubt -doubtable -doubtably -doubtedly -doubter -doubtful -doubtfully -doubtfulness -doubting -doubtingly -doubtingness -doubtless -doubtlessly -doubtlessness -doubtmonger -doubtous -doubtsome -douc -douce -doucely -douceness -doucet -douche -doucin -doucine -doudle -dough -doughbird -doughboy -doughface -doughfaceism -doughfoot -doughhead -doughiness -doughlike -doughmaker -doughmaking -doughman -doughnut -dought -doughtily -doughtiness -doughty -doughy -doulocracy -doum -doundake -doup -douping -dour -dourine -dourly -dourness -douse -douser -dout -douter -doutous -douzepers -douzieme -dove -dovecot -doveflower -dovefoot -dovehouse -dovekey -dovekie -dovelet -dovelike -doveling -dover -dovetail -dovetailed -dovetailer -dovetailwise -doveweed -dovewood -dovish -dow -dowable -dowager -dowagerism -dowcet -dowd -dowdily -dowdiness -dowdy -dowdyish -dowdyism -dowed -dowel -dower -doweral -doweress -dowerless -dowery -dowf -dowie -dowily -dowiness -dowitch -dowitcher -dowl -dowlas -dowless -down -downbear -downbeard -downbeat -downby -downcast -downcastly -downcastness -downcome -downcomer -downcoming -downcry -downcurved -downcut -downdale -downdraft -downer -downface -downfall -downfallen -downfalling -downfeed -downflow -downfold -downfolded -downgate -downgone -downgrade -downgrowth -downhanging -downhaul -downheaded -downhearted -downheartedly -downheartedness -downhill -downily -downiness -downland -downless -downlie -downlier -downligging -downlike -downline -downlooked -downlooker -downlying -downmost -downness -downpour -downpouring -downright -downrightly -downrightness -downrush -downrushing -downset -downshare -downshore -downside -downsinking -downsitting -downsliding -downslip -downslope -downsman -downspout -downstage -downstairs -downstate -downstater -downstream -downstreet -downstroke -downswing -downtake -downthrow -downthrown -downthrust -downtown -downtrampling -downtreading -downtrend -downtrodden -downtroddenness -downturn -downward -downwardly -downwardness -downway -downweed -downweigh -downweight -downweighted -downwind -downwith -downy -dowp -dowry -dowsabel -dowse -dowser -dowset -doxa -doxastic -doxasticon -doxographer -doxographical -doxography -doxological -doxologically -doxologize -doxology -doxy -doze -dozed -dozen -dozener -dozenth -dozer -dozily -doziness -dozy -dozzled -drab -drabbet -drabbish -drabble -drabbler -drabbletail -drabbletailed -drabby -drably -drabness -drachm -drachma -drachmae -drachmai -drachmal -dracma -draconic -draconites -draconitic -dracontian -dracontiasis -dracontic -dracontine -dracontites -dracunculus -draegerman -draff -draffman -draffy -draft -draftage -draftee -drafter -draftily -draftiness -drafting -draftman -draftmanship -draftproof -draftsman -draftsmanship -draftswoman -draftswomanship -draftwoman -drafty -drag -dragade -dragbar -dragbolt -dragged -dragger -draggily -dragginess -dragging -draggingly -draggle -draggletail -draggletailed -draggletailedly -draggletailedness -draggly -draggy -draghound -dragline -dragman -dragnet -drago -dragoman -dragomanate -dragomanic -dragomanish -dragon -dragonesque -dragoness -dragonet -dragonfish -dragonfly -dragonhead -dragonhood -dragonish -dragonism -dragonize -dragonkind -dragonlike -dragonnade -dragonroot -dragontail -dragonwort -dragoon -dragoonable -dragoonade -dragoonage -dragooner -dragrope -dragsaw -dragsawing -dragsman -dragstaff -drail -drain -drainable -drainage -drainboard -draine -drained -drainer -drainerman -drainless -drainman -drainpipe -draintile -draisine -drake -drakestone -drakonite -dram -drama -dramalogue -dramatic -dramatical -dramatically -dramaticism -dramatics -dramaticule -dramatism -dramatist -dramatizable -dramatization -dramatize -dramatizer -dramaturge -dramaturgic -dramaturgical -dramaturgist -dramaturgy -dramm -drammage -dramme -drammed -drammer -dramming -drammock -dramseller -dramshop -drang -drank -drant -drapable -drape -drapeable -draper -draperess -draperied -drapery -drapetomania -drapping -drassid -drastic -drastically -drat -dratchell -drate -dratted -dratting -draught -draughtboard -draughthouse -draughtman -draughtmanship -draughts -draughtsman -draughtsmanship -draughtswoman -draughtswomanship -dravya -draw -drawable -drawarm -drawback -drawbar -drawbeam -drawbench -drawboard -drawbolt -drawbore -drawboy -drawbridge -drawcut -drawdown -drawee -drawer -drawers -drawfile -drawfiling -drawgate -drawgear -drawglove -drawhead -drawhorse -drawing -drawk -drawknife -drawknot -drawl -drawlatch -drawler -drawling -drawlingly -drawlingness -drawlink -drawloom -drawly -drawn -drawnet -drawoff -drawout -drawplate -drawpoint -drawrod -drawshave -drawsheet -drawspan -drawspring -drawstop -drawstring -drawtongs -drawtube -dray -drayage -drayman -drazel -dread -dreadable -dreader -dreadful -dreadfully -dreadfulness -dreadingly -dreadless -dreadlessly -dreadlessness -dreadly -dreadness -dreadnought -dream -dreamage -dreamer -dreamery -dreamful -dreamfully -dreamfulness -dreamhole -dreamily -dreaminess -dreamingly -dreamish -dreamland -dreamless -dreamlessly -dreamlessness -dreamlet -dreamlike -dreamlit -dreamlore -dreamsily -dreamsiness -dreamsy -dreamt -dreamtide -dreamwhile -dreamwise -dreamworld -dreamy -drear -drearfully -drearily -dreariment -dreariness -drearisome -drearly -drearness -dreary -dredge -dredgeful -dredger -dredging -dree -dreep -dreepiness -dreepy -dreg -dreggily -dregginess -dreggish -dreggy -dregless -dregs -dreiling -dreissiger -drench -drencher -drenching -drenchingly -dreng -drengage -drepaniform -drepanium -drepanoid -dress -dressage -dressed -dresser -dressership -dressily -dressiness -dressing -dressline -dressmaker -dressmakership -dressmakery -dressmaking -dressy -drest -drew -drewite -drias -drib -dribble -dribblement -dribbler -driblet -driddle -dried -drier -drierman -driest -drift -driftage -driftbolt -drifter -drifting -driftingly -driftland -driftless -driftlessness -driftlet -driftman -driftpiece -driftpin -driftway -driftweed -driftwind -driftwood -drifty -drightin -drill -driller -drillet -drilling -drillman -drillmaster -drillstock -dringle -drink -drinkability -drinkable -drinkableness -drinkably -drinker -drinking -drinkless -drinkproof -drinn -drip -dripper -dripping -dripple -dripproof -drippy -dripstick -dripstone -drisheen -drisk -drivable -drivage -drive -driveaway -driveboat -drivebolt -drivehead -drivel -driveler -drivelingly -driven -drivepipe -driver -driverless -drivership -drivescrew -driveway -drivewell -driving -drivingly -drizzle -drizzly -drochuil -droddum -drofland -drogh -drogher -drogherman -drogue -droit -droitsman -droitural -droiturel -droll -drollery -drollingly -drollish -drollishness -drollist -drollness -drolly -dromaeognathism -dromaeognathous -drome -dromedarian -dromedarist -dromedary -drometer -dromic -dromograph -dromomania -dromometer -dromond -dromos -dromotropic -drona -dronage -drone -dronepipe -droner -drongo -droningly -dronish -dronishly -dronishness -dronkgrass -drony -drool -droop -drooper -drooping -droopingly -droopingness -droopt -droopy -drop -dropberry -dropcloth -dropflower -drophead -droplet -droplight -droplike -dropling -dropman -dropout -dropper -dropping -droppingly -droppy -dropseed -dropsical -dropsically -dropsicalness -dropsied -dropsy -dropsywort -dropt -dropwise -dropworm -dropwort -droseraceous -droshky -drosky -drosograph -drosometer -dross -drossel -drosser -drossiness -drossless -drossy -drostdy -droud -drought -droughtiness -droughty -drouk -drove -drover -drovy -drow -drown -drowner -drowningly -drowse -drowsily -drowsiness -drowsy -drub -drubber -drubbing -drubbly -drucken -drudge -drudger -drudgery -drudgingly -drudgism -druery -drug -drugeteria -drugger -druggery -drugget -druggeting -druggist -druggister -druggy -drugless -drugman -drugshop -drugstore -druid -druidess -druidic -druidical -druidism -druidry -druith -drum -drumbeat -drumble -drumbledore -drumbler -drumfire -drumfish -drumhead -drumheads -drumlike -drumlin -drumline -drumlinoid -drumloid -drumloidal -drumly -drummer -drumming -drummy -drumskin -drumstick -drumwood -drung -drungar -drunk -drunkard -drunken -drunkenly -drunkenness -drunkensome -drunkenwise -drunkery -drupaceous -drupal -drupe -drupel -drupelet -drupeole -drupetum -drupiferous -druse -drusy -druxiness -druxy -dry -dryad -dryadetum -dryadic -dryas -dryasdust -drybeard -drybrained -drycoal -dryfoot -drygoodsman -dryhouse -drying -dryish -dryly -dryness -dryopithecid -dryopithecine -dryopteroid -drysalter -drysaltery -dryster -dryth -dryworker -duad -duadic -dual -duali -dualin -dualism -dualist -dualistic -dualistically -duality -dualization -dualize -dually -dualogue -duarch -duarchy -dub -dubash -dubb -dubba -dubbah -dubbeltje -dubber -dubbing -dubby -dubiety -dubiocrystalline -dubiosity -dubious -dubiously -dubiousness -dubitable -dubitably -dubitancy -dubitant -dubitate -dubitatingly -dubitation -dubitative -dubitatively -duboisin -duboisine -dubs -ducal -ducally -ducamara -ducape -ducat -ducato -ducatoon -ducdame -duces -duchess -duchesse -duchesslike -duchy -duck -duckbill -duckblind -duckboard -duckboat -ducker -duckery -duckfoot -duckhearted -duckhood -duckhouse -duckhunting -duckie -ducking -duckling -ducklingship -duckmeat -duckpin -duckpond -duckstone -duckweed -duckwife -duckwing -duct -ducted -ductibility -ductible -ductile -ductilely -ductileness -ductilimeter -ductility -ductilize -duction -ductless -ductor -ductule -dud -dudaim -dudder -duddery -duddies -dude -dudeen -dudgeon -dudine -dudish -dudishness -dudism -dudler -dudley -dudleyite -dudman -due -duel -dueler -dueling -duelist -duelistic -duello -dueness -duenna -duennadom -duennaship -duer -duet -duettist -duff -duffadar -duffel -duffer -dufferdom -duffing -dufoil -dufrenite -dufrenoysite -dufter -dufterdar -duftery -dug -dugal -dugdug -duggler -dugong -dugout -dugway -duhat -duiker -duikerbok -duim -duit -dujan -duke -dukedom -dukeling -dukely -dukery -dukeship -dukhn -dukker -dukkeripen -dulbert -dulcet -dulcetly -dulcetness -dulcian -dulciana -dulcification -dulcifluous -dulcify -dulcigenic -dulcimer -dulcitol -dulcitude -dulcose -duledge -duler -dulia -dull -dullard -dullardism -dullardness -dullbrained -duller -dullery -dullhead -dullhearted -dullification -dullify -dullish -dullity -dullness -dullpate -dullsome -dully -dulosis -dulotic -dulse -dulseman -dult -dultie -dulwilly -duly -dum -duma -dumaist -dumb -dumba -dumbbell -dumbbeller -dumbcow -dumbfounder -dumbfounderment -dumbhead -dumbledore -dumbly -dumbness -dumdum -dumetose -dumfound -dumfounder -dumfounderment -dummel -dummered -dumminess -dummy -dummyism -dummyweed -dumontite -dumortierite -dumose -dumosity -dump -dumpage -dumpcart -dumper -dumpily -dumpiness -dumping -dumpish -dumpishly -dumpishness -dumple -dumpling -dumpoke -dumpy -dumsola -dun -dunair -dunal -dunbird -dunce -duncedom -duncehood -duncery -dunch -duncical -duncify -duncish -duncishly -duncishness -dundasite -dunder -dunderhead -dunderheaded -dunderheadedness -dunderpate -dune -dunelike -dunfish -dung -dungannonite -dungaree -dungbeck -dungbird -dungbred -dungeon -dungeoner -dungeonlike -dunger -dunghill -dunghilly -dungol -dungon -dungy -dungyard -dunite -dunk -dunkadoo -dunker -dunlin -dunnage -dunne -dunner -dunness -dunnish -dunnite -dunnock -dunny -dunpickle -dunst -dunstable -dunt -duntle -duny -dunziekte -duo -duocosane -duodecahedral -duodecahedron -duodecane -duodecennial -duodecillion -duodecimal -duodecimality -duodecimally -duodecimfid -duodecimo -duodecimole -duodecuple -duodena -duodenal -duodenary -duodenate -duodenation -duodene -duodenectomy -duodenitis -duodenocholangitis -duodenocholecystostomy -duodenocholedochotomy -duodenocystostomy -duodenoenterostomy -duodenogram -duodenojejunal -duodenojejunostomy -duodenopancreatectomy -duodenoscopy -duodenostomy -duodenotomy -duodenum -duodrama -duograph -duogravure -duole -duoliteral -duologue -duomachy -duopod -duopolistic -duopoly -duopsonistic -duopsony -duosecant -duotone -duotriacontane -duotype -dup -dupability -dupable -dupe -dupedom -duper -dupery -dupion -dupla -duplation -duple -duplet -duplex -duplexity -duplicability -duplicable -duplicand -duplicate -duplication -duplicative -duplicator -duplicature -duplicia -duplicident -duplicidentate -duplicipennate -duplicitas -duplicity -duplification -duplify -duplone -dupondius -duppy -dura -durability -durable -durableness -durably -durain -dural -duramatral -duramen -durance -durangite -durant -duraplasty -duraquara -duraspinalis -duration -durational -durationless -durative -durax -durbachite -durbar -durdenite -dure -durene -durenol -duress -duressor -durgan -durian -duridine -during -duringly -durity -durmast -durn -duro -durometer -duroquinone -durra -durrie -durrin -durry -durst -durukuli -durwaun -duryl -dusack -duscle -dush -dusio -dusk -dusken -duskily -duskiness -duskingtide -duskish -duskishly -duskishness -duskly -duskness -dusky -dust -dustbin -dustbox -dustcloth -dustee -duster -dusterman -dustfall -dustily -dustiness -dusting -dustless -dustlessness -dustman -dustpan -dustproof -dustuck -dustwoman -dusty -dustyfoot -dutch -duteous -duteously -duteousness -dutiability -dutiable -dutied -dutiful -dutifully -dutifulness -dutra -duty -dutymonger -duumvir -duumviral -duumvirate -duvet -duvetyn -dux -duyker -dvaita -dvandva -dwale -dwalm -dwang -dwarf -dwarfish -dwarfishly -dwarfishness -dwarfism -dwarfling -dwarfness -dwarfy -dwayberry -dwell -dwelled -dweller -dwelling -dwelt -dwindle -dwindlement -dwine -dyad -dyadic -dyakisdodecahedron -dyarchic -dyarchical -dyarchy -dyaster -dyce -dye -dyeable -dyehouse -dyeing -dyeleaves -dyemaker -dyemaking -dyer -dyester -dyestuff -dyeware -dyeweed -dyewood -dygogram -dying -dyingly -dyingness -dyke -dykehopper -dyker -dykereeve -dynagraph -dynameter -dynametric -dynametrical -dynamic -dynamical -dynamically -dynamics -dynamis -dynamism -dynamist -dynamistic -dynamitard -dynamite -dynamiter -dynamitic -dynamitical -dynamitically -dynamiting -dynamitish -dynamitism -dynamitist -dynamization -dynamize -dynamo -dynamoelectric -dynamoelectrical -dynamogenesis -dynamogenic -dynamogenous -dynamogenously -dynamogeny -dynamometamorphic -dynamometamorphism -dynamometamorphosed -dynamometer -dynamometric -dynamometrical -dynamometry -dynamomorphic -dynamoneure -dynamophone -dynamostatic -dynamotor -dynast -dynastical -dynastically -dynasticism -dynastid -dynastidan -dynasty -dynatron -dyne -dyophone -dyotheism -dyphone -dysacousia -dysacousis -dysanalyte -dysaphia -dysarthria -dysarthric -dysarthrosis -dysbulia -dysbulic -dyschiria -dyschroa -dyschroia -dyschromatopsia -dyschromatoptic -dyschronous -dyscrasia -dyscrasial -dyscrasic -dyscrasite -dyscratic -dyscrystalline -dysenteric -dysenterical -dysentery -dysepulotic -dysepulotical -dyserethisia -dysergasia -dysergia -dysesthesia -dysesthetic -dysfunction -dysgenesic -dysgenesis -dysgenetic -dysgenic -dysgenical -dysgenics -dysgeogenous -dysgnosia -dysgraphia -dysidrosis -dyskeratosis -dyskinesia -dyskinetic -dyslalia -dyslexia -dyslogia -dyslogistic -dyslogistically -dyslogy -dysluite -dyslysin -dysmenorrhea -dysmenorrheal -dysmerism -dysmeristic -dysmerogenesis -dysmerogenetic -dysmeromorph -dysmeromorphic -dysmetria -dysmnesia -dysmorphism -dysmorphophobia -dysneuria -dysnomy -dysodile -dysodontiasis -dysorexia -dysorexy -dysoxidation -dysoxidizable -dysoxidize -dyspathetic -dyspathy -dyspepsia -dyspepsy -dyspeptic -dyspeptical -dyspeptically -dysphagia -dysphagic -dysphasia -dysphasic -dysphemia -dysphonia -dysphonic -dysphoria -dysphoric -dysphotic -dysphrasia -dysphrenia -dyspituitarism -dysplasia -dysplastic -dyspnea -dyspneal -dyspneic -dyspnoic -dysprosia -dysprosium -dysraphia -dyssnite -dysspermatism -dyssynergia -dyssystole -dystaxia -dystectic -dysteleological -dysteleologist -dysteleology -dysthyroidism -dystocia -dystocial -dystome -dystomic -dystomous -dystrophia -dystrophic -dystrophy -dysuria -dysuric -dysyntribite -dytiscid -dzeren -e -ea -each -eachwhere -eager -eagerly -eagerness -eagle -eaglelike -eagless -eaglestone -eaglet -eaglewood -eagre -ean -ear -earache -earbob -earcap -earcockle -eardrop -eardropper -eardrum -eared -earflower -earful -earhole -earing -earjewel -earl -earlap -earldom -earless -earlet -earlike -earliness -earlish -earlock -earlship -early -earmark -earn -earner -earnest -earnestly -earnestness -earnful -earning -earnings -earphone -earpick -earpiece -earplug -earreach -earring -earringed -earscrew -earshot -earsore -earsplitting -eartab -earth -earthboard -earthborn -earthbred -earthdrake -earthed -earthen -earthenhearted -earthenware -earthfall -earthfast -earthgall -earthgrubber -earthian -earthiness -earthkin -earthless -earthlight -earthlike -earthliness -earthling -earthly -earthmaker -earthmaking -earthnut -earthpea -earthquake -earthquaked -earthquaken -earthquaking -earthshine -earthshock -earthslide -earthsmoke -earthstar -earthtongue -earthwall -earthward -earthwards -earthwork -earthworm -earthy -earwax -earwig -earwigginess -earwiggy -earwitness -earworm -earwort -ease -easeful -easefully -easefulness -easel -easeless -easement -easer -easier -easiest -easily -easiness -easing -east -eastabout -eastbound -easter -easterling -easterly -eastern -easterner -easternmost -easting -eastland -eastmost -eastward -eastwardly -easy -easygoing -easygoingness -eat -eatability -eatable -eatableness -eatage -eatberry -eaten -eater -eatery -eating -eats -eave -eaved -eavedrop -eaver -eaves -eavesdrop -eavesdropper -eavesdropping -ebb -ebbman -ebenaceous -ebeneous -eboe -ebon -ebonist -ebonite -ebonize -ebony -ebracteate -ebracteolate -ebriate -ebriety -ebriosity -ebrious -ebriously -ebullate -ebullience -ebulliency -ebullient -ebulliently -ebulliometer -ebullioscope -ebullioscopic -ebullioscopy -ebullition -ebullitive -ebulus -eburated -eburine -eburnated -eburnation -eburnean -eburneoid -eburneous -eburnian -eburnification -ecad -ecalcarate -ecanda -ecardinal -ecarinate -ecarte -ecaudate -ecbatic -ecblastesis -ecbole -ecbolic -eccaleobion -eccentrate -eccentric -eccentrical -eccentrically -eccentricity -eccentring -eccentrometer -ecchondroma -ecchondrosis -ecchondrotome -ecchymoma -ecchymose -ecchymosis -ecclesia -ecclesial -ecclesiarch -ecclesiarchy -ecclesiast -ecclesiastic -ecclesiastical -ecclesiastically -ecclesiasticism -ecclesiasticize -ecclesiastics -ecclesiastry -ecclesioclastic -ecclesiography -ecclesiolater -ecclesiolatry -ecclesiologic -ecclesiological -ecclesiologically -ecclesiologist -ecclesiology -ecclesiophobia -eccoprotic -eccoproticophoric -eccrinology -eccrisis -eccritic -eccyclema -eccyesis -ecdemic -ecdemite -ecderon -ecderonic -ecdysiast -ecdysis -ecesic -ecesis -ecgonine -eche -echea -echelette -echelon -echelonment -echeneidid -echeneidoid -echidna -echinal -echinate -echinid -echinital -echinite -echinochrome -echinococcus -echinoderm -echinodermal -echinodermatous -echinodermic -echinoid -echinologist -echinology -echinopsine -echinostome -echinostomiasis -echinulate -echinulated -echinulation -echinuliform -echinus -echitamine -echiurid -echiuroid -echo -echoer -echoic -echoingly -echoism -echoist -echoize -echolalia -echolalic -echoless -echometer -echopractic -echopraxia -echowise -eciliate -ecize -ecklein -eclair -eclampsia -eclamptic -eclat -eclectic -eclectical -eclectically -eclecticism -eclecticize -eclectism -eclectist -eclegm -eclegma -eclipsable -eclipsareon -eclipsation -eclipse -eclipser -eclipsis -ecliptic -ecliptical -ecliptically -eclogite -eclogue -eclosion -ecmnesia -ecoid -ecole -ecologic -ecological -ecologically -ecologist -ecology -econometer -econometric -econometrician -econometrics -economic -economical -economically -economics -economism -economist -economization -economize -economizer -economy -ecophene -ecophobia -ecorticate -ecospecies -ecospecific -ecospecifically -ecostate -ecosystem -ecotonal -ecotone -ecotype -ecotypic -ecotypically -ecphonesis -ecphorable -ecphore -ecphoria -ecphorization -ecphorize -ecphrasis -ecrasite -ecru -ecrustaceous -ecstasis -ecstasize -ecstasy -ecstatic -ecstatica -ecstatical -ecstatically -ecstaticize -ecstrophy -ectad -ectadenia -ectal -ectally -ectasia -ectasis -ectatic -ectene -ectental -ectepicondylar -ectethmoid -ectethmoidal -ecthetically -ecthlipsis -ecthyma -ectiris -ectobatic -ectoblast -ectoblastic -ectobronchium -ectocardia -ectocarpaceous -ectocarpic -ectocarpous -ectocinerea -ectocinereal -ectocoelic -ectocondylar -ectocondyle -ectocondyloid -ectocornea -ectocranial -ectocuneiform -ectocuniform -ectocyst -ectodactylism -ectoderm -ectodermal -ectodermic -ectodermoidal -ectodermosis -ectodynamomorphic -ectoentad -ectoenzyme -ectoethmoid -ectogenesis -ectogenic -ectogenous -ectoglia -ectolecithal -ectoloph -ectomere -ectomeric -ectomesoblast -ectomorph -ectomorphic -ectomorphy -ectonephridium -ectoparasite -ectoparasitic -ectopatagium -ectophloic -ectophyte -ectophytic -ectopia -ectopic -ectoplacenta -ectoplasm -ectoplasmatic -ectoplasmic -ectoplastic -ectoplasy -ectoproctan -ectoproctous -ectopterygoid -ectopy -ectoretina -ectorganism -ectorhinal -ectosarc -ectosarcous -ectoskeleton -ectosomal -ectosome -ectosphenoid -ectosphenotic -ectosphere -ectosteal -ectosteally -ectostosis -ectotheca -ectotoxin -ectotrophic -ectozoa -ectozoan -ectozoic -ectozoon -ectrodactylia -ectrodactylism -ectrodactyly -ectrogenic -ectrogeny -ectromelia -ectromelian -ectromelic -ectromelus -ectropion -ectropium -ectropometer -ectrosyndactyly -ectypal -ectype -ectypography -ecuelling -ecumenic -ecumenical -ecumenicalism -ecumenicality -ecumenically -ecumenicity -ecyphellate -eczema -eczematization -eczematoid -eczematosis -eczematous -edacious -edaciously -edaciousness -edacity -edaphic -edaphology -edaphon -edder -eddish -eddo -eddy -eddyroot -edea -edeagra -edeitis -edelweiss -edema -edematous -edemic -edenite -edental -edentalous -edentate -edentulate -edentulous -edeodynia -edeology -edeomania -edeoscopy -edeotomy -edestan -edestin -edge -edgebone -edged -edgeless -edgemaker -edgemaking -edgeman -edger -edgerman -edgeshot -edgestone -edgeways -edgeweed -edgewise -edginess -edging -edgingly -edgrew -edgy -edh -edibility -edible -edibleness -edict -edictal -edictally -edicule -edificable -edification -edificator -edificatory -edifice -edificial -edifier -edify -edifying -edifyingly -edifyingness -edingtonite -edit -edital -edition -editor -editorial -editorialize -editorially -editorship -editress -edriophthalmatous -edriophthalmian -edriophthalmic -edriophthalmous -educabilian -educability -educable -educand -educatable -educate -educated -educatee -education -educationable -educational -educationalism -educationalist -educationally -educationary -educationist -educative -educator -educatory -educatress -educe -educement -educible -educive -educt -eduction -eductive -eductor -edulcorate -edulcoration -edulcorative -edulcorator -eegrass -eel -eelboat -eelbob -eelbobber -eelcake -eelcatcher -eeler -eelery -eelfare -eelfish -eelgrass -eellike -eelpot -eelpout -eelshop -eelskin -eelspear -eelware -eelworm -eely -eer -eerie -eerily -eeriness -eerisome -effable -efface -effaceable -effacement -effacer -effect -effecter -effectful -effectible -effective -effectively -effectiveness -effectivity -effectless -effector -effects -effectual -effectuality -effectualize -effectually -effectualness -effectuate -effectuation -effeminacy -effeminate -effeminately -effeminateness -effemination -effeminatize -effeminization -effeminize -effendi -efferent -effervesce -effervescence -effervescency -effervescent -effervescible -effervescingly -effervescive -effete -effeteness -effetman -efficacious -efficaciously -efficaciousness -efficacity -efficacy -efficience -efficiency -efficient -efficiently -effigial -effigiate -effigiation -effigurate -effiguration -effigy -efflate -efflation -effloresce -efflorescence -efflorescency -efflorescent -efflower -effluence -effluency -effluent -effluvia -effluvial -effluviate -effluviography -effluvious -effluvium -efflux -effluxion -effodient -efform -efformation -efformative -effort -effortful -effortless -effortlessly -effossion -effraction -effranchise -effranchisement -effrontery -effulge -effulgence -effulgent -effulgently -effund -effuse -effusiometer -effusion -effusive -effusively -effusiveness -eflagelliferous -efoliolate -efoliose -efoveolate -eft -eftest -eftsoons -egad -egalitarian -egalitarianism -egality -egence -egeran -egest -egesta -egestion -egestive -egg -eggberry -eggcup -eggcupful -eggeater -egger -eggfish -eggfruit -egghead -egghot -egging -eggler -eggless -egglike -eggnog -eggplant -eggshell -eggy -egilops -egipto -eglandular -eglandulose -eglantine -eglatere -eglestonite -egma -ego -egocentric -egocentricity -egocentrism -egohood -egoism -egoist -egoistic -egoistical -egoistically -egoity -egoize -egoizer -egol -egolatrous -egomania -egomaniac -egomaniacal -egomism -egophonic -egophony -egosyntonic -egotheism -egotism -egotist -egotistic -egotistical -egotistically -egotize -egregious -egregiously -egregiousness -egress -egression -egressive -egressor -egret -egrimony -egueiite -egurgitate -eguttulate -eh -eheu -ehlite -ehrwaldite -ehuawa -eichbergite -eichwaldite -eicosane -eident -eidently -eider -eidetic -eidograph -eidolic -eidolism -eidology -eidolology -eidolon -eidoptometry -eidouranion -eigenfunction -eigenvalue -eight -eighteen -eighteenfold -eighteenmo -eighteenth -eighteenthly -eightfoil -eightfold -eighth -eighthly -eightieth -eightling -eightpenny -eightscore -eightsman -eightsome -eighty -eightyfold -eigne -eikonology -eimer -einkorn -eiresione -eisegesis -eisegetical -eisodic -eisteddfod -eisteddfodic -eisteddfodism -either -ejaculate -ejaculation -ejaculative -ejaculator -ejaculatory -eject -ejecta -ejectable -ejection -ejective -ejectively -ejectivity -ejectment -ejector -ejicient -ejoo -ekaboron -ekacaesium -ekaha -ekamanganese -ekasilicon -ekatantalum -eke -ekebergite -eker -ekerite -eking -ekka -ekphore -ektene -ektenes -ektodynamorphic -el -elaborate -elaborately -elaborateness -elaboration -elaborative -elaborator -elaboratory -elabrate -elachistaceous -elaeagnaceous -elaeoblast -elaeoblastic -elaeocarpaceous -elaeodochon -elaeomargaric -elaeometer -elaeoptene -elaeosaccharum -elaeothesium -elaidate -elaidic -elaidin -elaidinic -elain -elaine -elaioleucite -elaioplast -elaiosome -elance -eland -elanet -elaphine -elaphure -elaphurine -elapid -elapine -elapoid -elapse -elasmobranch -elasmobranchian -elasmobranchiate -elasmosaur -elasmothere -elastance -elastic -elastica -elastically -elastician -elasticin -elasticity -elasticize -elasticizer -elasticness -elastin -elastivity -elastomer -elastomeric -elastometer -elastometry -elastose -elatcha -elate -elated -elatedly -elatedness -elater -elaterid -elaterin -elaterite -elaterium -elateroid -elatinaceous -elation -elative -elator -elatrometer -elb -elbow -elbowboard -elbowbush -elbowchair -elbowed -elbower -elbowpiece -elbowroom -elbowy -elcaja -elchee -eld -elder -elderberry -elderbrotherhood -elderbrotherish -elderbrotherly -elderbush -elderhood -elderliness -elderly -elderman -eldership -eldersisterly -elderwoman -elderwood -elderwort -eldest -eldin -elding -eldress -eldritch -elecampane -elect -electable -electee -electicism -election -electionary -electioneer -electioneerer -elective -electively -electiveness -electivism -electivity -electly -elector -electoral -electorally -electorate -electorial -electorship -electragist -electragy -electralize -electrepeter -electress -electret -electric -electrical -electricalize -electrically -electricalness -electrician -electricity -electricize -electrics -electriferous -electrifiable -electrification -electrifier -electrify -electrion -electrionic -electrizable -electrization -electrize -electrizer -electro -electroacoustic -electroaffinity -electroamalgamation -electroanalysis -electroanalytic -electroanalytical -electroanesthesia -electroballistic -electroballistics -electrobath -electrobiological -electrobiologist -electrobiology -electrobioscopy -electroblasting -electrobrasser -electrobus -electrocapillarity -electrocapillary -electrocardiogram -electrocardiograph -electrocardiographic -electrocardiography -electrocatalysis -electrocatalytic -electrocataphoresis -electrocataphoretic -electrocauterization -electrocautery -electroceramic -electrochemical -electrochemically -electrochemist -electrochemistry -electrochronograph -electrochronographic -electrochronometer -electrochronometric -electrocoagulation -electrocoating -electrocolloidal -electrocontractility -electrocorticogram -electroculture -electrocute -electrocution -electrocutional -electrocutioner -electrocystoscope -electrode -electrodeless -electrodentistry -electrodeposit -electrodepositable -electrodeposition -electrodepositor -electrodesiccate -electrodesiccation -electrodiagnosis -electrodialysis -electrodialyze -electrodialyzer -electrodiplomatic -electrodispersive -electrodissolution -electrodynamic -electrodynamical -electrodynamics -electrodynamism -electrodynamometer -electroencephalogram -electroencephalograph -electroencephalography -electroendosmose -electroendosmosis -electroendosmotic -electroengrave -electroengraving -electroergometer -electroetching -electroethereal -electroextraction -electroform -electroforming -electrofuse -electrofused -electrofusion -electrogalvanic -electrogalvanize -electrogenesis -electrogenetic -electrogild -electrogilding -electrogilt -electrograph -electrographic -electrographite -electrography -electroharmonic -electrohemostasis -electrohomeopathy -electrohorticulture -electrohydraulic -electroimpulse -electroindustrial -electroionic -electroirrigation -electrokinematics -electrokinetic -electrokinetics -electrolier -electrolithotrity -electrologic -electrological -electrologist -electrology -electroluminescence -electroluminescent -electrolysis -electrolyte -electrolytic -electrolytical -electrolytically -electrolyzability -electrolyzable -electrolyzation -electrolyze -electrolyzer -electromagnet -electromagnetic -electromagnetical -electromagnetically -electromagnetics -electromagnetism -electromagnetist -electromassage -electromechanical -electromechanics -electromedical -electromer -electromeric -electromerism -electrometallurgical -electrometallurgist -electrometallurgy -electrometer -electrometric -electrometrical -electrometrically -electrometry -electromobile -electromobilism -electromotion -electromotive -electromotivity -electromotograph -electromotor -electromuscular -electromyographic -electron -electronarcosis -electronegative -electronervous -electronic -electronics -electronographic -electrooptic -electrooptical -electrooptically -electrooptics -electroosmosis -electroosmotic -electroosmotically -electrootiatrics -electropathic -electropathology -electropathy -electropercussive -electrophobia -electrophone -electrophore -electrophoresis -electrophoretic -electrophoric -electrophorus -electrophotometer -electrophotometry -electrophototherapy -electrophrenic -electrophysics -electrophysiological -electrophysiologist -electrophysiology -electropism -electroplate -electroplater -electroplating -electroplax -electropneumatic -electropneumatically -electropoion -electropolar -electropositive -electropotential -electropower -electropsychrometer -electropult -electropuncturation -electropuncture -electropuncturing -electropyrometer -electroreceptive -electroreduction -electrorefine -electroscission -electroscope -electroscopic -electrosherardizing -electroshock -electrosmosis -electrostatic -electrostatical -electrostatically -electrostatics -electrosteel -electrostenolysis -electrostenolytic -electrostereotype -electrostriction -electrosurgery -electrosurgical -electrosynthesis -electrosynthetic -electrosynthetically -electrotactic -electrotautomerism -electrotaxis -electrotechnic -electrotechnical -electrotechnician -electrotechnics -electrotechnology -electrotelegraphic -electrotelegraphy -electrotelethermometer -electrotellurograph -electrotest -electrothanasia -electrothanatosis -electrotherapeutic -electrotherapeutical -electrotherapeutics -electrotherapeutist -electrotherapist -electrotherapy -electrothermal -electrothermancy -electrothermic -electrothermics -electrothermometer -electrothermostat -electrothermostatic -electrothermotic -electrotitration -electrotonic -electrotonicity -electrotonize -electrotonus -electrotrephine -electrotropic -electrotropism -electrotype -electrotyper -electrotypic -electrotyping -electrotypist -electrotypy -electrovalence -electrovalency -electrovection -electroviscous -electrovital -electrowin -electrum -electuary -eleemosynarily -eleemosynariness -eleemosynary -elegance -elegancy -elegant -elegantly -elegiac -elegiacal -elegiambic -elegiambus -elegiast -elegist -elegit -elegize -elegy -eleidin -element -elemental -elementalism -elementalist -elementalistic -elementalistically -elementality -elementalize -elementally -elementarily -elementariness -elementary -elementoid -elemi -elemicin -elemin -elench -elenchi -elenchic -elenchical -elenchically -elenchize -elenchtic -elenchtical -elenctic -elenge -eleoblast -eleolite -eleomargaric -eleometer -eleonorite -eleoptene -eleostearate -eleostearic -elephant -elephanta -elephantiac -elephantiasic -elephantiasis -elephantic -elephanticide -elephantine -elephantlike -elephantoid -elephantoidal -elephantous -elephantry -eleutherarch -eleutherism -eleutherodactyl -eleutheromania -eleutheromaniac -eleutheromorph -eleutheropetalous -eleutherophyllous -eleutherosepalous -eleutherozoan -elevate -elevated -elevatedly -elevatedness -elevating -elevatingly -elevation -elevational -elevator -elevatory -eleven -elevener -elevenfold -eleventh -eleventhly -elevon -elf -elfenfolk -elfhood -elfic -elfin -elfinwood -elfish -elfishly -elfishness -elfkin -elfland -elflike -elflock -elfship -elfwife -elfwort -eliasite -elicit -elicitable -elicitate -elicitation -elicitor -elicitory -elide -elidible -eligibility -eligible -eligibleness -eligibly -eliminable -eliminand -eliminant -eliminate -elimination -eliminative -eliminator -eliminatory -eliquate -eliquation -elision -elisor -elite -elixir -elk -elkhorn -elkhound -elkslip -elkwood -ell -ellachick -ellagate -ellagic -ellagitannin -elle -elleck -ellenyard -ellfish -ellipse -ellipses -ellipsis -ellipsograph -ellipsoid -ellipsoidal -ellipsone -ellipsonic -elliptic -elliptical -elliptically -ellipticalness -ellipticity -elliptograph -elliptoid -ellops -ellwand -elm -elmy -elocular -elocute -elocution -elocutionary -elocutioner -elocutionist -elocutionize -elod -eloge -elogium -eloign -eloigner -eloignment -elongate -elongated -elongation -elongative -elope -elopement -eloper -elops -eloquence -eloquent -eloquential -eloquently -eloquentness -elotillo -elpasolite -elpidite -els -else -elsehow -elsewards -elseways -elsewhen -elsewhere -elsewheres -elsewhither -elsewise -elsin -elt -eluate -elucidate -elucidation -elucidative -elucidator -elucidatory -elucubrate -elucubration -elude -eluder -elusion -elusive -elusively -elusiveness -elusoriness -elusory -elute -elution -elutor -elutriate -elutriation -elutriator -eluvial -eluviate -eluviation -eluvium -elvan -elvanite -elvanitic -elver -elves -elvet -elvish -elvishly -elydoric -elysia -elytral -elytriferous -elytriform -elytrigerous -elytrin -elytrocele -elytroclasia -elytroid -elytron -elytroplastic -elytropolypus -elytroposis -elytrorhagia -elytrorrhagia -elytrorrhaphy -elytrostenosis -elytrotomy -elytrous -elytrum -em -emaciate -emaciation -emajagua -emanant -emanate -emanation -emanational -emanationism -emanationist -emanatism -emanatist -emanatistic -emanativ -emanative -emanatively -emanator -emanatory -emancipate -emancipation -emancipationist -emancipatist -emancipative -emancipator -emancipatory -emancipatress -emancipist -emandibulate -emanium -emarcid -emarginate -emarginately -emargination -emasculate -emasculation -emasculative -emasculator -emasculatory -emball -emballonurid -emballonurine -embalm -embalmer -embalmment -embank -embankment -embannered -embar -embargo -embargoist -embark -embarkation -embarkment -embarras -embarrass -embarrassed -embarrassedly -embarrassing -embarrassingly -embarrassment -embarrel -embassage -embassy -embastioned -embathe -embatholithic -embattle -embattled -embattlement -embay -embayment -embed -embedment -embeggar -embelic -embellish -embellisher -embellishment -ember -embergoose -emberizidae -emberizine -embezzle -embezzlement -embezzler -embind -embiotocid -embiotocoid -embira -embitter -embitterer -embitterment -emblaze -emblazer -emblazon -emblazoner -emblazonment -emblazonry -emblem -emblema -emblematic -emblematical -emblematically -emblematicalness -emblematicize -emblematist -emblematize -emblematology -emblement -emblemist -emblemize -emblemology -emblic -emblossom -embodier -embodiment -embody -embog -emboitement -embolden -emboldener -embole -embolectomy -embolemia -embolic -emboliform -embolism -embolismic -embolismus -embolite -embolium -embolize -embolo -embololalia -embolomerism -embolomerous -embolomycotic -embolum -embolus -emboly -emborder -emboscata -embosom -emboss -embossage -embosser -embossing -embossman -embossment -embosture -embottle -embouchure -embound -embow -embowed -embowel -emboweler -embowelment -embower -embowerment -embowment -embox -embrace -embraceable -embraceably -embracement -embraceor -embracer -embracery -embracing -embracingly -embracingness -embracive -embrail -embranchment -embrangle -embranglement -embrasure -embreathe -embreathement -embright -embrittle -embrittlement -embroaden -embrocate -embrocation -embroider -embroiderer -embroideress -embroidery -embroil -embroiler -embroilment -embronze -embrown -embryectomy -embryo -embryocardia -embryoctonic -embryoctony -embryoferous -embryogenesis -embryogenetic -embryogenic -embryogeny -embryogony -embryographer -embryographic -embryography -embryoid -embryoism -embryologic -embryological -embryologically -embryologist -embryology -embryoma -embryon -embryonal -embryonary -embryonate -embryonated -embryonic -embryonically -embryoniferous -embryoniform -embryony -embryopathology -embryophagous -embryophore -embryophyte -embryoplastic -embryoscope -embryoscopic -embryotega -embryotic -embryotome -embryotomy -embryotrophic -embryotrophy -embryous -embryulcia -embryulcus -embubble -embuia -embus -embusk -embuskin -emcee -eme -emeer -emeership -emend -emendable -emendandum -emendate -emendation -emendator -emendatory -emender -emerald -emeraldine -emeraude -emerge -emergence -emergency -emergent -emergently -emergentness -emerited -emeritus -emerize -emerse -emersed -emersion -emery -emesis -emetatrophia -emetic -emetically -emetine -emetocathartic -emetology -emetomorphine -emgalla -emication -emiction -emictory -emigrant -emigrate -emigration -emigrational -emigrationist -emigrative -emigrator -emigratory -emigree -eminence -eminency -eminent -eminently -emir -emirate -emirship -emissarium -emissary -emissaryship -emissile -emission -emissive -emissivity -emit -emittent -emitter -emma -emmarble -emmarvel -emmenagogic -emmenagogue -emmenic -emmeniopathy -emmenology -emmensite -emmer -emmergoose -emmet -emmetrope -emmetropia -emmetropic -emmetropism -emmetropy -emodin -emollescence -emolliate -emollient -emoloa -emolument -emolumental -emolumentary -emote -emotion -emotionable -emotional -emotionalism -emotionalist -emotionality -emotionalization -emotionalize -emotionally -emotioned -emotionist -emotionize -emotionless -emotionlessness -emotive -emotively -emotiveness -emotivity -empacket -empaistic -empall -empanel -empanelment -empanoply -empaper -emparadise -emparchment -empark -empasm -empathic -empathically -empathize -empathy -empeirema -emperor -emperorship -empery -empetraceous -emphases -emphasis -emphasize -emphatic -emphatical -emphatically -emphaticalness -emphlysis -emphractic -emphraxis -emphysema -emphysematous -emphyteusis -emphyteuta -emphyteutic -empicture -empiecement -empire -empirema -empiric -empirical -empiricalness -empiricism -empiricist -empirics -empiriocritcism -empiriocritical -empiriological -empirism -empiristic -emplace -emplacement -emplane -emplastic -emplastration -emplastrum -emplectite -empleomania -employ -employability -employable -employed -employee -employer -employless -employment -emplume -empocket -empodium -empoison -empoisonment -emporetic -emporeutic -emporia -emporial -emporium -empower -empowerment -empress -emprise -emprosthotonic -emprosthotonos -emprosthotonus -empt -emptier -emptily -emptiness -emptings -emptins -emption -emptional -emptor -empty -emptyhearted -emptysis -empurple -empyema -empyemic -empyesis -empyocele -empyreal -empyrean -empyreuma -empyreumatic -empyreumatical -empyreumatize -empyromancy -emu -emulable -emulant -emulate -emulation -emulative -emulatively -emulator -emulatory -emulatress -emulgence -emulgent -emulous -emulously -emulousness -emulsibility -emulsible -emulsifiability -emulsifiable -emulsification -emulsifier -emulsify -emulsin -emulsion -emulsionize -emulsive -emulsoid -emulsor -emunctory -emundation -emyd -emydian -emydosaurian -en -enable -enablement -enabler -enact -enactable -enaction -enactive -enactment -enactor -enactory -enaena -enage -enalid -enaliosaur -enaliosaurian -enallachrome -enallage -enaluron -enam -enamber -enambush -enamdar -enamel -enameler -enameling -enamelist -enamelless -enamellist -enameloma -enamelware -enamor -enamorato -enamored -enamoredness -enamorment -enamourment -enanguish -enanthem -enanthema -enanthematous -enanthesis -enantiobiosis -enantioblastic -enantioblastous -enantiomer -enantiomeride -enantiomorph -enantiomorphic -enantiomorphism -enantiomorphous -enantiomorphously -enantiomorphy -enantiopathia -enantiopathic -enantiopathy -enantiosis -enantiotropic -enantiotropy -enantobiosis -enapt -enarbor -enarbour -enarch -enarched -enargite -enarm -enarme -enarthrodia -enarthrodial -enarthrosis -enate -enatic -enation -enbrave -encaenia -encage -encake -encalendar -encallow -encamp -encampment -encanker -encanthis -encapsulate -encapsulation -encapsule -encarditis -encarnadine -encarnalize -encarpium -encarpus -encase -encasement -encash -encashable -encashment -encasserole -encastage -encatarrhaphy -encauma -encaustes -encaustic -encaustically -encave -encefalon -encell -encenter -encephala -encephalalgia -encephalasthenia -encephalic -encephalin -encephalitic -encephalitis -encephalocele -encephalocoele -encephalodialysis -encephalogram -encephalograph -encephalography -encephaloid -encephalolith -encephalology -encephaloma -encephalomalacia -encephalomalacosis -encephalomalaxis -encephalomeningitis -encephalomeningocele -encephalomere -encephalomeric -encephalometer -encephalometric -encephalomyelitis -encephalomyelopathy -encephalon -encephalonarcosis -encephalopathia -encephalopathic -encephalopathy -encephalophyma -encephalopsychesis -encephalopyosis -encephalorrhagia -encephalosclerosis -encephaloscope -encephaloscopy -encephalosepsis -encephalospinal -encephalothlipsis -encephalotome -encephalotomy -encephalous -enchain -enchainment -enchair -enchalice -enchannel -enchant -enchanter -enchanting -enchantingly -enchantingness -enchantment -enchantress -encharge -encharnel -enchase -enchaser -enchasten -enchequer -enchest -enchilada -enchiridion -enchondroma -enchondromatous -enchondrosis -enchorial -enchurch -enchylema -enchylematous -enchymatous -enchytrae -enchytraeid -encina -encinal -encincture -encinder -encinillo -encipher -encircle -encirclement -encircler -encist -encitadel -enclaret -enclasp -enclave -enclavement -enclisis -enclitic -enclitical -enclitically -encloak -encloister -enclose -encloser -enclosure -enclothe -encloud -encoach -encode -encoffin -encoignure -encoil -encolden -encollar -encolor -encolpion -encolumn -encomendero -encomia -encomiast -encomiastic -encomiastical -encomiastically -encomic -encomienda -encomiologic -encomium -encommon -encompass -encompasser -encompassment -encoop -encorbelment -encore -encoronal -encoronate -encoronet -encounter -encounterable -encounterer -encourage -encouragement -encourager -encouraging -encouragingly -encowl -encraal -encradle -encranial -encratic -encraty -encreel -encrimson -encrinal -encrinic -encrinidae -encrinital -encrinite -encrinitic -encrinitical -encrinoid -encrisp -encroach -encroacher -encroachingly -encroachment -encrotchet -encrown -encrownment -encrust -encrustment -encrypt -encryption -encuirassed -encumber -encumberer -encumberingly -encumberment -encumbrance -encumbrancer -encup -encurl -encurtain -encushion -encyclic -encyclical -encyclopedia -encyclopediac -encyclopediacal -encyclopedial -encyclopedian -encyclopediast -encyclopedic -encyclopedically -encyclopedism -encyclopedist -encyclopedize -encyrtid -encyst -encystation -encystment -end -endable -endamage -endamageable -endamagement -endamask -endameba -endamebic -endamoebiasis -endamoebic -endanger -endangerer -endangerment -endangium -endaortic -endaortitis -endarch -endarchy -endarterial -endarteritis -endarterium -endaspidean -endaze -endboard -endbrain -endear -endearance -endeared -endearedly -endearedness -endearing -endearingly -endearingness -endearment -endeavor -endeavorer -ended -endeictic -endellionite -endemial -endemic -endemically -endemicity -endemiological -endemiology -endemism -endenizen -ender -endere -endermatic -endermic -endermically -enderon -enderonic -endevil -endew -endgate -endiadem -endiaper -ending -endite -endive -endless -endlessly -endlessness -endlichite -endlong -endmatcher -endmost -endoabdominal -endoangiitis -endoaortitis -endoappendicitis -endoarteritis -endoauscultation -endobatholithic -endobiotic -endoblast -endoblastic -endobronchial -endobronchially -endobronchitis -endocannibalism -endocardiac -endocardial -endocarditic -endocarditis -endocardium -endocarp -endocarpal -endocarpic -endocarpoid -endocellular -endocentric -endoceratite -endoceratitic -endocervical -endocervicitis -endochondral -endochorion -endochorionic -endochrome -endochylous -endoclinal -endocline -endocoelar -endocoele -endocoeliac -endocolitis -endocolpitis -endocondensation -endocone -endoconidium -endocorpuscular -endocortex -endocranial -endocranium -endocrinal -endocrine -endocrinic -endocrinism -endocrinological -endocrinologist -endocrinology -endocrinopathic -endocrinopathy -endocrinotherapy -endocrinous -endocritic -endocycle -endocyclic -endocyemate -endocyst -endocystitis -endoderm -endodermal -endodermic -endodermis -endodontia -endodontic -endodontist -endodynamomorphic -endoenteritis -endoenzyme -endoesophagitis -endofaradism -endogalvanism -endogamic -endogamous -endogamy -endogastric -endogastrically -endogastritis -endogen -endogenesis -endogenetic -endogenic -endogenous -endogenously -endogeny -endoglobular -endognath -endognathal -endognathion -endogonidium -endointoxication -endokaryogamy -endolabyrinthitis -endolaryngeal -endolemma -endolumbar -endolymph -endolymphangial -endolymphatic -endolymphic -endolysin -endomastoiditis -endome -endomesoderm -endometrial -endometritis -endometrium -endometry -endomitosis -endomitotic -endomixis -endomorph -endomorphic -endomorphism -endomorphy -endomysial -endomysium -endoneurial -endoneurium -endonuclear -endonucleolus -endoparasite -endoparasitic -endopathic -endopelvic -endopericarditis -endoperidial -endoperidium -endoperitonitis -endophagous -endophagy -endophasia -endophasic -endophlebitis -endophragm -endophragmal -endophyllous -endophytal -endophyte -endophytic -endophytically -endophytous -endoplasm -endoplasma -endoplasmic -endoplast -endoplastron -endoplastular -endoplastule -endopleura -endopleural -endopleurite -endopleuritic -endopod -endopodite -endopoditic -endoproct -endoproctous -endopsychic -endopterygote -endopterygotic -endopterygotism -endopterygotous -endorachis -endoral -endore -endorhinitis -endorsable -endorsation -endorse -endorsed -endorsee -endorsement -endorser -endorsingly -endosalpingitis -endosarc -endosarcode -endosarcous -endosclerite -endoscope -endoscopic -endoscopy -endosecretory -endosepsis -endosiphon -endosiphonal -endosiphonate -endosiphuncle -endoskeletal -endoskeleton -endosmometer -endosmometric -endosmosic -endosmosis -endosmotic -endosmotically -endosome -endosperm -endospermic -endospore -endosporium -endosporous -endoss -endosteal -endosteally -endosteitis -endosteoma -endosternite -endosternum -endosteum -endostitis -endostoma -endostome -endostosis -endostracal -endostracum -endostylar -endostyle -endostylic -endotheca -endothecal -endothecate -endothecial -endothecium -endothelia -endothelial -endothelioblastoma -endotheliocyte -endothelioid -endotheliolysin -endotheliolytic -endothelioma -endotheliomyoma -endotheliomyxoma -endotheliotoxin -endothelium -endothermal -endothermic -endothermous -endothermy -endothoracic -endothorax -endothys -endotoxic -endotoxin -endotoxoid -endotracheitis -endotrachelitis -endotrophic -endotys -endovaccination -endovasculitis -endovenous -endow -endower -endowment -endozoa -endpiece -endue -enduement -endungeon -endura -endurability -endurable -endurableness -endurably -endurance -endurant -endure -endurer -enduring -enduringly -enduringness -endways -endwise -endyma -endymal -endysis -eneclann -enema -enemy -enemylike -enemyship -enepidermic -energeia -energesis -energetic -energetical -energetically -energeticalness -energeticist -energetics -energetistic -energic -energical -energid -energism -energist -energize -energizer -energumen -energumenon -energy -enervate -enervation -enervative -enervator -eneuch -eneugh -enface -enfacement -enfamous -enfasten -enfatico -enfeature -enfeeble -enfeeblement -enfeebler -enfelon -enfeoff -enfeoffment -enfester -enfetter -enfever -enfigure -enfilade -enfilading -enfile -enfiled -enflagellate -enflagellation -enflesh -enfleurage -enflower -enfoil -enfold -enfolden -enfolder -enfoldment -enfonced -enforce -enforceability -enforceable -enforced -enforcedly -enforcement -enforcer -enforcibility -enforcible -enforcingly -enfork -enfoul -enframe -enframement -enfranchisable -enfranchise -enfranchisement -enfranchiser -enfree -enfrenzy -enfuddle -enfurrow -engage -engaged -engagedly -engagedness -engagement -engager -engaging -engagingly -engagingness -engaol -engarb -engarble -engarland -engarment -engarrison -engastrimyth -engastrimythic -engaud -engaze -engem -engender -engenderer -engenderment -engerminate -enghosted -engild -engine -engineer -engineering -engineership -enginehouse -engineless -enginelike -engineman -enginery -enginous -engird -engirdle -engirt -engjateigur -englacial -englacially -englad -engladden -englobe -englobement -engloom -englory -englut -englyn -engnessang -engobe -engold -engolden -engore -engorge -engorgement -engouled -engrace -engraff -engraft -engraftation -engrafter -engraftment -engrail -engrailed -engrailment -engrain -engrained -engrainedly -engrainer -engram -engramma -engrammatic -engrammic -engrandize -engrandizement -engraphia -engraphic -engraphically -engraphy -engrapple -engrasp -engrave -engraved -engravement -engraver -engraving -engreen -engrieve -engroove -engross -engrossed -engrossedly -engrosser -engrossing -engrossingly -engrossingness -engrossment -enguard -engulf -engulfment -engyscope -engysseismology -enhallow -enhalo -enhamper -enhance -enhanced -enhancement -enhancer -enhancive -enharmonic -enharmonical -enharmonically -enhat -enhaunt -enhearse -enheart -enhearten -enhedge -enhelm -enhemospore -enherit -enheritage -enheritance -enhorror -enhunger -enhusk -enhydrite -enhydritic -enhydros -enhydrous -enhypostasia -enhypostasis -enhypostatic -enhypostatize -eniac -enigma -enigmatic -enigmatical -enigmatically -enigmaticalness -enigmatist -enigmatization -enigmatize -enigmatographer -enigmatography -enigmatology -enisle -enjail -enjamb -enjambed -enjambment -enjelly -enjeopard -enjeopardy -enjewel -enjoin -enjoinder -enjoiner -enjoinment -enjoy -enjoyable -enjoyableness -enjoyably -enjoyer -enjoying -enjoyingly -enjoyment -enkerchief -enkernel -enkindle -enkindler -enkraal -enlace -enlacement -enlard -enlarge -enlargeable -enlargeableness -enlarged -enlargedly -enlargedness -enlargement -enlarger -enlarging -enlargingly -enlaurel -enleaf -enleague -enlevement -enlief -enlife -enlight -enlighten -enlightened -enlightenedly -enlightenedness -enlightener -enlightening -enlighteningly -enlightenment -enlink -enlinkment -enlist -enlisted -enlister -enlistment -enliven -enlivener -enlivening -enliveningly -enlivenment -enlock -enlodge -enlodgement -enmarble -enmask -enmass -enmesh -enmeshment -enmist -enmity -enmoss -enmuffle -enneacontahedral -enneacontahedron -ennead -enneadianome -enneadic -enneagon -enneagynous -enneahedral -enneahedria -enneahedron -enneapetalous -enneaphyllous -enneasemic -enneasepalous -enneaspermous -enneastyle -enneastylos -enneasyllabic -enneateric -enneatic -enneatical -ennerve -enniche -ennoble -ennoblement -ennobler -ennobling -ennoblingly -ennoic -ennomic -ennui -enocyte -enodal -enodally -enoil -enol -enolate -enolic -enolizable -enolization -enolize -enomania -enomaniac -enomotarch -enomoty -enophthalmos -enophthalmus -enoplan -enoptromancy -enorganic -enorm -enormity -enormous -enormously -enormousness -enostosis -enough -enounce -enouncement -enow -enphytotic -enplane -enquicken -enquire -enquirer -enquiry -enrace -enrage -enraged -enragedly -enragement -enrange -enrank -enrapt -enrapture -enrapturer -enravish -enravishingly -enravishment -enray -enregiment -enregister -enregistration -enregistry -enrib -enrich -enricher -enriching -enrichingly -enrichment -enring -enrive -enrobe -enrobement -enrober -enrockment -enrol -enroll -enrolled -enrollee -enroller -enrollment -enrolment -enroot -enrough -enruin -enrut -ens -ensaffron -ensaint -ensample -ensand -ensandal -ensanguine -ensate -enscene -ensconce -enscroll -ensculpture -ense -enseam -enseat -enseem -ensellure -ensemble -ensepulcher -ensepulchre -enseraph -enserf -ensete -enshade -enshadow -enshawl -ensheathe -enshell -enshelter -enshield -enshrine -enshrinement -enshroud -ensiform -ensign -ensigncy -ensignhood -ensignment -ensignry -ensignship -ensilage -ensilate -ensilation -ensile -ensilist -ensilver -ensisternum -ensky -enslave -enslavedness -enslavement -enslaver -ensmall -ensnare -ensnarement -ensnarer -ensnaring -ensnaringly -ensnarl -ensnow -ensorcelize -ensorcell -ensoul -enspell -ensphere -enspirit -enstamp -enstar -enstate -enstatite -enstatitic -enstatolite -ensteel -enstool -enstore -enstrengthen -ensuable -ensuance -ensuant -ensue -ensuer -ensuingly -ensulphur -ensure -ensurer -enswathe -enswathement -ensweep -entablature -entablatured -entablement -entach -entad -entail -entailable -entailer -entailment -ental -entame -entamoebiasis -entamoebic -entangle -entangled -entangledly -entangledness -entanglement -entangler -entangling -entanglingly -entapophysial -entapophysis -entarthrotic -entasia -entasis -entelam -entelechy -entellus -entelodont -entempest -entemple -entente -entepicondylar -enter -enterable -enteraden -enteradenographic -enteradenography -enteradenological -enteradenology -enteral -enteralgia -enterate -enterauxe -enterclose -enterectomy -enterer -entergogenic -enteria -enteric -entericoid -entering -enteritidis -enteritis -entermete -enteroanastomosis -enterobiliary -enterocele -enterocentesis -enterochirurgia -enterochlorophyll -enterocholecystostomy -enterocinesia -enterocinetic -enterocleisis -enteroclisis -enteroclysis -enterocoele -enterocoelic -enterocoelous -enterocolitis -enterocolostomy -enterocrinin -enterocyst -enterocystoma -enterodynia -enteroepiplocele -enterogastritis -enterogastrone -enterogenous -enterogram -enterograph -enterography -enterohelcosis -enterohemorrhage -enterohepatitis -enterohydrocele -enteroid -enterointestinal -enteroischiocele -enterokinase -enterokinesia -enterokinetic -enterolith -enterolithiasis -enterology -enteromegalia -enteromegaly -enteromere -enteromesenteric -enteromycosis -enteromyiasis -enteron -enteroneuritis -enteroparalysis -enteroparesis -enteropathy -enteropexia -enteropexy -enterophthisis -enteroplasty -enteroplegia -enteropneust -enteropneustan -enteroptosis -enteroptotic -enterorrhagia -enterorrhaphy -enterorrhea -enteroscope -enterosepsis -enterospasm -enterostasis -enterostenosis -enterostomy -enterosyphilis -enterotome -enterotomy -enterotoxemia -enterotoxication -enterozoa -enterozoan -enterozoic -enterprise -enterpriseless -enterpriser -enterprising -enterprisingly -enterritoriality -entertain -entertainable -entertainer -entertaining -entertainingly -entertainingness -entertainment -enthalpy -entheal -enthelmintha -enthelminthes -enthelminthic -enthetic -enthral -enthraldom -enthrall -enthralldom -enthraller -enthralling -enthrallingly -enthrallment -enthralment -enthrone -enthronement -enthronization -enthronize -enthuse -enthusiasm -enthusiast -enthusiastic -enthusiastical -enthusiastically -enthusiastly -enthymematic -enthymematical -enthymeme -entia -entice -enticeable -enticeful -enticement -enticer -enticing -enticingly -enticingness -entifical -entification -entify -entincture -entire -entirely -entireness -entirety -entiris -entitative -entitatively -entitle -entitlement -entity -entoblast -entoblastic -entobranchiate -entobronchium -entocalcaneal -entocarotid -entocele -entocnemial -entocoele -entocoelic -entocondylar -entocondyle -entocondyloid -entocone -entoconid -entocornea -entocranial -entocuneiform -entocuniform -entocyemate -entocyst -entoderm -entodermal -entodermic -entogastric -entogenous -entoglossal -entohyal -entoil -entoilment -entomb -entombment -entomere -entomeric -entomic -entomical -entomion -entomogenous -entomoid -entomologic -entomological -entomologically -entomologist -entomologize -entomology -entomophagan -entomophagous -entomophilous -entomophily -entomophthoraceous -entomophthorous -entomophytous -entomostracan -entomostracous -entomotaxy -entomotomist -entomotomy -entone -entonement -entoolitic -entoparasite -entoparasitic -entoperipheral -entophytal -entophyte -entophytic -entophytically -entophytous -entopic -entopical -entoplasm -entoplastic -entoplastral -entoplastron -entopopliteal -entoproctous -entopterygoid -entoptic -entoptical -entoptically -entoptics -entoptoscope -entoptoscopic -entoptoscopy -entoretina -entorganism -entosarc -entosclerite -entosphenal -entosphenoid -entosphere -entosternal -entosternite -entosternum -entothorax -entotic -entotympanic -entourage -entozoa -entozoal -entozoan -entozoarian -entozoic -entozoological -entozoologically -entozoologist -entozoology -entozoon -entracte -entrail -entrails -entrain -entrainer -entrainment -entrammel -entrance -entrancedly -entrancement -entranceway -entrancing -entrancingly -entrant -entrap -entrapment -entrapper -entrappingly -entreasure -entreat -entreating -entreatingly -entreatment -entreaty -entree -entremets -entrench -entrenchment -entrepas -entrepot -entrepreneur -entrepreneurial -entrepreneurship -entresol -entrochite -entrochus -entropion -entropionize -entropium -entropy -entrough -entrust -entrustment -entry -entryman -entryway -enturret -entwine -entwinement -entwist -enucleate -enucleation -enucleator -enumerable -enumerate -enumeration -enumerative -enumerator -enunciability -enunciable -enunciate -enunciation -enunciative -enunciatively -enunciator -enunciatory -enure -enuresis -enuretic -enurny -envapor -envapour -envassal -envassalage -envault -enveil -envelop -envelope -enveloper -envelopment -envenom -envenomation -enverdure -envermeil -enviable -enviableness -enviably -envied -envier -envineyard -envious -enviously -enviousness -environ -environage -environal -environic -environment -environmental -environmentalism -environmentalist -environmentally -environs -envisage -envisagement -envision -envolume -envoy -envoyship -envy -envying -envyingly -enwallow -enwiden -enwind -enwisen -enwoman -enwomb -enwood -enworthed -enwound -enwrap -enwrapment -enwreathe -enwrite -enwrought -enzone -enzootic -enzooty -enzym -enzymatic -enzyme -enzymic -enzymically -enzymologist -enzymology -enzymolysis -enzymolytic -enzymosis -enzymotic -eoan -eolation -eolith -eolithic -eon -eonism -eophyte -eophytic -eophyton -eorhyolite -eosate -eoside -eosin -eosinate -eosinic -eosinoblast -eosinophile -eosinophilia -eosinophilic -eosinophilous -eosphorite -eozoon -eozoonal -epacmaic -epacme -epacrid -epacridaceous -epact -epactal -epagoge -epagogic -epagomenae -epagomenal -epagomenic -epagomenous -epaleaceous -epalpate -epanadiplosis -epanalepsis -epanaleptic -epanaphora -epanaphoral -epanastrophe -epanisognathism -epanisognathous -epanodos -epanody -epanorthosis -epanorthotic -epanthous -epapillate -epappose -eparch -eparchate -eparchial -eparchy -eparcuale -eparterial -epaule -epaulement -epaulet -epauleted -epauletted -epauliere -epaxial -epaxially -epedaphic -epee -epeeist -epeiric -epeirid -epeirogenesis -epeirogenetic -epeirogenic -epeirogeny -epeisodion -epembryonic -epencephal -epencephalic -epencephalon -ependyma -ependymal -ependyme -ependymitis -ependymoma -ependytes -epenthesis -epenthesize -epenthetic -epephragmal -epepophysial -epepophysis -epergne -eperotesis -epexegesis -epexegetic -epexegetical -epexegetically -epha -ephah -epharmonic -epharmony -ephebe -ephebeion -ephebeum -ephebic -ephebos -ephebus -ephectic -ephedrine -ephelcystic -ephelis -ephemera -ephemerae -ephemeral -ephemerality -ephemerally -ephemeralness -ephemeran -ephemerid -ephemerides -ephemeris -ephemerist -ephemeromorph -ephemeromorphic -ephemeron -ephemerous -ephetae -ephete -ephetic -ephialtes -ephidrosis -ephippial -ephippium -ephod -ephor -ephoral -ephoralty -ephorate -ephoric -ephorship -ephorus -ephphatha -ephthianure -ephydriad -ephydrid -ephymnium -ephyra -ephyrula -epibasal -epibatholithic -epibenthic -epibenthos -epiblast -epiblastema -epiblastic -epiblema -epibole -epibolic -epibolism -epiboly -epiboulangerite -epibranchial -epic -epical -epically -epicalyx -epicanthic -epicanthus -epicardia -epicardiac -epicardial -epicardium -epicarid -epicaridan -epicarp -epicede -epicedial -epicedian -epicedium -epicele -epicene -epicenism -epicenity -epicenter -epicentral -epicentrum -epicerebral -epicheirema -epichil -epichile -epichilium -epichindrotic -epichirema -epichondrosis -epichordal -epichorial -epichoric -epichorion -epichoristic -epicism -epicist -epiclastic -epicleidian -epicleidium -epiclesis -epiclidal -epiclinal -epicly -epicnemial -epicoelar -epicoele -epicoelia -epicoeliac -epicoelian -epicoeloma -epicoelous -epicolic -epicondylar -epicondyle -epicondylian -epicondylic -epicontinental -epicoracohumeral -epicoracoid -epicoracoidal -epicormic -epicorolline -epicortical -epicostal -epicotyl -epicotyleal -epicotyledonary -epicranial -epicranium -epicranius -epicrisis -epicritic -epicrystalline -epicure -epicurish -epicurishly -epicycle -epicyclic -epicyclical -epicycloid -epicycloidal -epicyemate -epicyesis -epicystotomy -epicyte -epideictic -epideictical -epideistic -epidemic -epidemical -epidemically -epidemicalness -epidemicity -epidemiographist -epidemiography -epidemiological -epidemiologist -epidemiology -epidemy -epidendral -epidendric -epiderm -epiderma -epidermal -epidermatic -epidermatoid -epidermatous -epidermic -epidermical -epidermically -epidermidalization -epidermis -epidermization -epidermoid -epidermoidal -epidermolysis -epidermomycosis -epidermophytosis -epidermose -epidermous -epidesmine -epidialogue -epidiascope -epidiascopic -epidictic -epidictical -epididymal -epididymectomy -epididymis -epididymite -epididymitis -epididymodeferentectomy -epididymodeferential -epididymovasostomy -epidiorite -epidiorthosis -epidosite -epidote -epidotic -epidotiferous -epidotization -epidural -epidymides -epifascial -epifocal -epifolliculitis -epigamic -epigaster -epigastraeum -epigastral -epigastrial -epigastric -epigastrical -epigastriocele -epigastrium -epigastrocele -epigeal -epigean -epigeic -epigene -epigenesis -epigenesist -epigenetic -epigenetically -epigenic -epigenist -epigenous -epigeous -epiglottal -epiglottic -epiglottidean -epiglottiditis -epiglottis -epiglottitis -epignathous -epigonal -epigonation -epigone -epigonic -epigonium -epigonos -epigonous -epigram -epigrammatic -epigrammatical -epigrammatically -epigrammatism -epigrammatist -epigrammatize -epigrammatizer -epigraph -epigrapher -epigraphic -epigraphical -epigraphically -epigraphist -epigraphy -epiguanine -epigyne -epigynous -epigynum -epigyny -epihyal -epihydric -epihydrinic -epikeia -epiklesis -epilabrum -epilamellar -epilaryngeal -epilate -epilation -epilatory -epilegomenon -epilemma -epilemmal -epilepsy -epileptic -epileptically -epileptiform -epileptogenic -epileptogenous -epileptoid -epileptologist -epileptology -epilimnion -epilobe -epilogation -epilogic -epilogical -epilogist -epilogistic -epilogize -epilogue -epimacus -epimandibular -epimanikia -epimer -epimeral -epimere -epimeric -epimeride -epimerite -epimeritic -epimeron -epimerum -epimorphic -epimorphosis -epimysium -epimyth -epinaos -epinastic -epinastically -epinasty -epineolithic -epinephrine -epinette -epineural -epineurial -epineurium -epinglette -epinicial -epinician -epinicion -epinine -epiopticon -epiotic -epipaleolithic -epiparasite -epiparodos -epipastic -epiperipheral -epipetalous -epiphanous -epipharyngeal -epipharynx -epiphenomenal -epiphenomenalism -epiphenomenalist -epiphenomenon -epiphloedal -epiphloedic -epiphloeum -epiphonema -epiphora -epiphragm -epiphylline -epiphyllous -epiphysary -epiphyseal -epiphyseolysis -epiphysial -epiphysis -epiphysitis -epiphytal -epiphyte -epiphytic -epiphytical -epiphytically -epiphytism -epiphytology -epiphytotic -epiphytous -epipial -epiplankton -epiplanktonic -epiplasm -epiplasmic -epiplastral -epiplastron -epiplectic -epipleura -epipleural -epiplexis -epiploce -epiplocele -epiploic -epiploitis -epiploon -epiplopexy -epipodial -epipodiale -epipodite -epipoditic -epipodium -epipolic -epipolism -epipolize -epiprecoracoid -epipteric -epipterous -epipterygoid -epipubic -epipubis -epirhizous -epirogenic -epirogeny -epirotulian -epirrhema -epirrhematic -epirrheme -episarcine -episcenium -episclera -episcleral -episcleritis -episcopable -episcopacy -episcopal -episcopalian -episcopalism -episcopality -episcopally -episcopate -episcopature -episcope -episcopicide -episcopization -episcopize -episcopolatry -episcotister -episematic -episepalous -episiocele -episiohematoma -episioplasty -episiorrhagia -episiorrhaphy -episiostenosis -episiotomy -episkeletal -episkotister -episodal -episode -episodial -episodic -episodical -episodically -epispadiac -epispadias -epispastic -episperm -epispermic -epispinal -episplenitis -episporangium -epispore -episporium -epistapedial -epistasis -epistatic -epistaxis -epistemic -epistemolog -epistemological -epistemologically -epistemologist -epistemology -epistemonic -epistemonical -epistemophilia -epistemophiliac -epistemophilic -episternal -episternalia -episternite -episternum -epistilbite -epistlar -epistle -epistler -epistolarian -epistolarily -epistolary -epistolatory -epistoler -epistolet -epistolic -epistolical -epistolist -epistolizable -epistolization -epistolize -epistolizer -epistolographer -epistolographic -epistolographist -epistolography -epistoma -epistomal -epistome -epistomian -epistroma -epistrophe -epistropheal -epistropheus -epistrophic -epistrophy -epistylar -epistyle -episyllogism -episynaloephe -episynthetic -episyntheton -epitactic -epitaph -epitapher -epitaphial -epitaphian -epitaphic -epitaphical -epitaphist -epitaphize -epitaphless -epitasis -epitela -epitendineum -epitenon -epithalamia -epithalamial -epithalamiast -epithalamic -epithalamion -epithalamium -epithalamize -epithalamus -epithalamy -epithalline -epitheca -epithecal -epithecate -epithecium -epithelia -epithelial -epithelioblastoma -epithelioceptor -epitheliogenetic -epithelioglandular -epithelioid -epitheliolysin -epitheliolysis -epitheliolytic -epithelioma -epitheliomatous -epitheliomuscular -epitheliosis -epitheliotoxin -epithelium -epithelization -epithelize -epitheloid -epithem -epithesis -epithet -epithetic -epithetical -epithetically -epithetician -epithetize -epitheton -epithumetic -epithyme -epithymetic -epithymetical -epitimesis -epitoke -epitomator -epitomatory -epitome -epitomic -epitomical -epitomically -epitomist -epitomization -epitomize -epitomizer -epitonic -epitonion -epitoxoid -epitrachelion -epitrichial -epitrichium -epitrite -epitritic -epitrochlea -epitrochlear -epitrochoid -epitrochoidal -epitrope -epitrophic -epitrophy -epituberculosis -epituberculous -epitympanic -epitympanum -epityphlitis -epityphlon -epiural -epivalve -epixylous -epizeuxis -epizoa -epizoal -epizoan -epizoarian -epizoic -epizoicide -epizoon -epizootic -epizootiology -epoch -epocha -epochal -epochally -epochism -epochist -epode -epodic -epollicate -eponychium -eponym -eponymic -eponymism -eponymist -eponymize -eponymous -eponymus -eponymy -epoophoron -epopee -epopoean -epopoeia -epopoeist -epopt -epoptes -epoptic -epoptist -epornitic -epornitically -epos -epruinose -epsilon -epsomite -epulary -epulation -epulis -epulo -epuloid -epulosis -epulotic -epupillate -epural -epurate -epuration -epyllion -equability -equable -equableness -equably -equaeval -equal -equalable -equaling -equalist -equalitarian -equalitarianism -equality -equalization -equalize -equalizer -equalizing -equalling -equally -equalness -equangular -equanimity -equanimous -equanimously -equanimousness -equant -equatable -equate -equation -equational -equationally -equationism -equationist -equator -equatorial -equatorially -equatorward -equatorwards -equerry -equerryship -equestrial -equestrian -equestrianism -equestrianize -equestrianship -equestrienne -equianchorate -equiangle -equiangular -equiangularity -equianharmonic -equiarticulate -equiatomic -equiaxed -equiaxial -equibalance -equibiradiate -equicellular -equichangeable -equicohesive -equiconvex -equicostate -equicrural -equicurve -equid -equidense -equidensity -equidiagonal -equidifferent -equidimensional -equidistance -equidistant -equidistantial -equidistantly -equidistribution -equidiurnal -equidivision -equidominant -equidurable -equielliptical -equiexcellency -equiform -equiformal -equiformity -equiglacial -equigranular -equijacent -equilateral -equilaterally -equilibrant -equilibrate -equilibration -equilibrative -equilibrator -equilibratory -equilibria -equilibrial -equilibriate -equilibrio -equilibrious -equilibrist -equilibristat -equilibristic -equilibrity -equilibrium -equilibrize -equilobate -equilobed -equilocation -equilucent -equimodal -equimolar -equimolecular -equimomental -equimultiple -equinate -equine -equinecessary -equinely -equinia -equinity -equinoctial -equinoctially -equinovarus -equinox -equinumerally -equinus -equiomnipotent -equip -equipaga -equipage -equiparant -equiparate -equiparation -equipartile -equipartisan -equipartition -equiped -equipedal -equiperiodic -equipluve -equipment -equipoise -equipollence -equipollency -equipollent -equipollently -equipollentness -equiponderance -equiponderancy -equiponderant -equiponderate -equiponderation -equipostile -equipotent -equipotential -equipotentiality -equipper -equiprobabilism -equiprobabilist -equiprobability -equiproducing -equiproportional -equiproportionality -equiradial -equiradiate -equiradical -equirotal -equisegmented -equisetaceous -equisetic -equisided -equisignal -equisized -equison -equisonance -equisonant -equispaced -equispatial -equisufficiency -equisurface -equitable -equitableness -equitably -equitangential -equitant -equitation -equitative -equitemporal -equitemporaneous -equites -equitist -equitriangular -equity -equivalence -equivalenced -equivalency -equivalent -equivalently -equivaliant -equivalue -equivaluer -equivalve -equivalved -equivalvular -equivelocity -equivocacy -equivocal -equivocality -equivocally -equivocalness -equivocate -equivocatingly -equivocation -equivocator -equivocatory -equivoluminal -equivoque -equivorous -equivote -equoid -equoidean -equuleus -er -era -erade -eradiate -eradiation -eradicable -eradicant -eradicate -eradication -eradicative -eradicator -eradicatory -eradiculose -eral -eranist -erasable -erase -erased -erasement -eraser -erasion -erasure -erbia -erbium -erd -erdvark -ere -erect -erectable -erecter -erectile -erectility -erecting -erection -erective -erectly -erectness -erectopatent -erector -erelong -eremacausis -eremic -eremital -eremite -eremiteship -eremitic -eremitical -eremitish -eremitism -eremochaetous -eremology -eremophyte -erenach -erenow -erepsin -erept -ereptase -ereptic -ereption -erethic -erethisia -erethism -erethismic -erethistic -erethitic -erewhile -erewhiles -erg -ergal -ergamine -ergasia -ergasterion -ergastic -ergastoplasm -ergastoplasmic -ergastulum -ergatandromorph -ergatandromorphic -ergatandrous -ergatandry -ergates -ergatocracy -ergatocrat -ergatogyne -ergatogynous -ergatogyny -ergatoid -ergatomorph -ergatomorphic -ergatomorphism -ergmeter -ergodic -ergogram -ergograph -ergographic -ergoism -ergology -ergomaniac -ergometer -ergometric -ergometrine -ergon -ergonovine -ergophile -ergophobia -ergophobiac -ergoplasm -ergostat -ergosterin -ergosterol -ergot -ergotamine -ergotaminine -ergoted -ergothioneine -ergotic -ergotin -ergotinine -ergotism -ergotist -ergotization -ergotize -ergotoxin -ergotoxine -ergusia -eria -eric -ericaceous -ericad -erical -ericetal -ericeticolous -ericetum -erichthus -erichtoid -ericineous -ericius -ericoid -ericolin -ericophyte -erigible -eriglossate -erika -erikite -erinaceous -erineum -erinite -erinose -eriocaulaceous -erioglaucine -eriometer -erionite -eriophyllous -eristic -eristical -eristically -erizo -erlking -ermelin -ermine -ermined -erminee -ermines -erminites -erminois -erne -erode -eroded -erodent -erodible -erogeneity -erogenesis -erogenetic -erogenic -erogenous -erogeny -eros -erose -erosely -erosible -erosion -erosional -erosionist -erosive -erostrate -eroteme -erotesis -erotetic -erotic -erotica -erotical -erotically -eroticism -eroticize -eroticomania -erotism -erotogenesis -erotogenetic -erotogenic -erotogenicity -erotomania -erotomaniac -erotopath -erotopathic -erotopathy -erpetologist -err -errability -errable -errableness -errabund -errancy -errand -errant -errantly -errantness -errantry -errata -erratic -erratical -erratically -erraticalness -erraticism -erraticness -erratum -errhine -erring -erringly -errite -erroneous -erroneously -erroneousness -error -errorful -errorist -errorless -ers -ersatz -erth -erthen -erthling -erthly -erubescence -erubescent -erubescite -eruc -eruca -erucic -eruciform -erucin -erucivorous -eruct -eructance -eructation -eructative -eruction -erudit -erudite -eruditely -eruditeness -eruditical -erudition -eruditional -eruditionist -erugate -erugation -erugatory -erumpent -erupt -eruption -eruptional -eruptive -eruptively -eruptiveness -eruptivity -ervenholder -eryhtrism -eryngo -erysipelas -erysipelatoid -erysipelatous -erysipeloid -erysipelous -erythema -erythematic -erythematous -erythemic -erythrasma -erythrean -erythremia -erythremomelalgia -erythrene -erythrin -erythrine -erythrismal -erythristic -erythrite -erythritic -erythritol -erythroblast -erythroblastic -erythroblastosis -erythrocarpous -erythrocatalysis -erythrochroic -erythrochroism -erythroclasis -erythroclastic -erythrocyte -erythrocytic -erythrocytoblast -erythrocytolysin -erythrocytolysis -erythrocytolytic -erythrocytometer -erythrocytorrhexis -erythrocytoschisis -erythrocytosis -erythrodegenerative -erythrodermia -erythrodextrin -erythrogenesis -erythrogenic -erythroglucin -erythrogonium -erythroid -erythrol -erythrolein -erythrolitmin -erythrolysin -erythrolysis -erythrolytic -erythromelalgia -erythron -erythroneocytosis -erythronium -erythropenia -erythrophage -erythrophagous -erythrophilous -erythrophleine -erythrophobia -erythrophore -erythrophyll -erythrophyllin -erythropia -erythroplastid -erythropoiesis -erythropoietic -erythropsia -erythropsin -erythrorrhexis -erythroscope -erythrose -erythrosiderite -erythrosin -erythrosinophile -erythrosis -erythroxylaceous -erythroxyline -erythrozincite -erythrozyme -erythrulose -es -esca -escadrille -escalade -escalader -escalado -escalan -escalate -escalator -escalin -escalloniaceous -escalop -escaloped -escambio -escambron -escapable -escapade -escapage -escape -escapee -escapeful -escapeless -escapement -escaper -escapingly -escapism -escapist -escarbuncle -escargatoire -escarole -escarp -escarpment -eschalot -eschar -eschara -escharine -escharoid -escharotic -eschatocol -eschatological -eschatologist -eschatology -escheat -escheatable -escheatage -escheatment -escheator -escheatorship -eschew -eschewal -eschewance -eschewer -eschynite -esclavage -escoba -escobadura -escobilla -escobita -escolar -esconson -escopette -escort -escortage -escortee -escortment -escribe -escritoire -escritorial -escrol -escropulo -escrow -escruage -escudo -esculent -esculetin -esculin -escutcheon -escutcheoned -escutellate -esdragol -esemplastic -esemplasy -eseptate -esere -eserine -esexual -eshin -esiphonal -esker -esmeraldite -esne -esoanhydride -esocataphoria -esociform -esocyclic -esodic -esoenteritis -esoethmoiditis -esogastritis -esonarthex -esoneural -esophagal -esophagalgia -esophageal -esophagean -esophagectasia -esophagectomy -esophagi -esophagism -esophagismus -esophagitis -esophago -esophagocele -esophagodynia -esophagogastroscopy -esophagogastrostomy -esophagomalacia -esophagometer -esophagomycosis -esophagopathy -esophagoplasty -esophagoplegia -esophagoplication -esophagoptosis -esophagorrhagia -esophagoscope -esophagoscopy -esophagospasm -esophagostenosis -esophagostomy -esophagotome -esophagotomy -esophagus -esophoria -esophoric -esoteric -esoterica -esoterical -esoterically -esotericism -esotericist -esoterics -esoterism -esoterist -esoterize -esotery -esothyropexy -esotrope -esotropia -esotropic -espacement -espadon -espalier -espantoon -esparcet -esparsette -esparto -espathate -espave -especial -especially -especialness -esperance -espial -espichellite -espier -espinal -espingole -espinillo -espino -espionage -esplanade -esplees -esponton -espousal -espouse -espousement -espouser -espringal -espundia -espy -esquamate -esquamulose -esquire -esquirearchy -esquiredom -esquireship -ess -essang -essay -essayer -essayette -essayical -essayish -essayism -essayist -essayistic -essayistical -essaylet -essed -essence -essency -essentia -essential -essentialism -essentialist -essentiality -essentialize -essentially -essentialness -essenwood -essexite -essling -essoin -essoinee -essoiner -essoinment -essonite -essorant -establish -establishable -established -establisher -establishment -establishmentarian -establishmentarianism -establishmentism -estacade -estadal -estadio -estado -estafette -estafetted -estamene -estamp -estampage -estampede -estampedero -estate -estatesman -esteem -esteemable -esteemer -ester -esterase -esterellite -esteriferous -esterification -esterify -esterization -esterize -esterlin -esterling -estevin -esthematology -estherian -esthesia -esthesio -esthesioblast -esthesiogen -esthesiogenic -esthesiogeny -esthesiography -esthesiology -esthesiometer -esthesiometric -esthesiometry -esthesioneurosis -esthesiophysiology -esthesis -esthetology -esthetophore -esthiomene -estimable -estimableness -estimably -estimate -estimatingly -estimation -estimative -estimator -estipulate -estivage -estival -estivate -estivation -estivator -estmark -estoc -estoile -estop -estoppage -estoppel -estovers -estrade -estradiol -estradiot -estragole -estrange -estrangedness -estrangement -estranger -estrapade -estray -estre -estreat -estrepe -estrepement -estriate -estriche -estrin -estriol -estrogen -estrogenic -estrone -estrous -estrual -estruate -estruation -estuarial -estuarine -estuary -estufa -estuous -estus -esugarization -esurience -esurient -esuriently -eta -etaballi -etacism -etacist -etalon -etamine -etch -etcher -etching -eternal -eternalism -eternalist -eternalization -eternalize -eternally -eternalness -eternity -eternization -eternize -etesian -ethal -ethaldehyde -ethanal -ethanamide -ethane -ethanedial -ethanediol -ethanedithiol -ethanethial -ethanethiol -ethanol -ethanolamine -ethanolysis -ethanoyl -ethel -ethene -ethenic -ethenoid -ethenoidal -ethenol -ethenyl -etheostomoid -ether -etherate -ethereal -etherealism -ethereality -etherealization -etherealize -ethereally -etherealness -etherean -ethered -ethereous -etheric -etherification -etheriform -etherify -etherin -etherion -etherism -etherization -etherize -etherizer -etherolate -etherous -ethic -ethical -ethicalism -ethicality -ethically -ethicalness -ethician -ethicism -ethicist -ethicize -ethicoaesthetic -ethicophysical -ethicopolitical -ethicoreligious -ethicosocial -ethics -ethid -ethide -ethidene -ethine -ethiodide -ethionic -ethiops -ethmofrontal -ethmoid -ethmoidal -ethmoiditis -ethmolachrymal -ethmolith -ethmomaxillary -ethmonasal -ethmopalatal -ethmopalatine -ethmophysal -ethmopresphenoidal -ethmosphenoid -ethmosphenoidal -ethmoturbinal -ethmoturbinate -ethmovomer -ethmovomerine -ethmyphitis -ethnal -ethnarch -ethnarchy -ethnic -ethnical -ethnically -ethnicism -ethnicist -ethnicize -ethnicon -ethnize -ethnobiological -ethnobiology -ethnobotanic -ethnobotanical -ethnobotanist -ethnobotany -ethnocentric -ethnocentrism -ethnocracy -ethnodicy -ethnoflora -ethnogenic -ethnogeny -ethnogeographer -ethnogeographic -ethnogeographical -ethnogeographically -ethnogeography -ethnographer -ethnographic -ethnographical -ethnographically -ethnographist -ethnography -ethnologer -ethnologic -ethnological -ethnologically -ethnologist -ethnology -ethnomaniac -ethnopsychic -ethnopsychological -ethnopsychology -ethnos -ethnotechnics -ethnotechnography -ethnozoological -ethnozoology -ethography -etholide -ethologic -ethological -ethology -ethonomic -ethonomics -ethopoeia -ethos -ethoxide -ethoxycaffeine -ethoxyl -ethrog -ethyl -ethylamide -ethylamine -ethylate -ethylation -ethylene -ethylenediamine -ethylenic -ethylenimine -ethylenoid -ethylhydrocupreine -ethylic -ethylidene -ethylidyne -ethylin -ethylmorphine -ethylsulphuric -ethyne -ethynyl -etiogenic -etiolate -etiolation -etiolin -etiolize -etiological -etiologically -etiologist -etiologue -etiology -etiophyllin -etioporphyrin -etiotropic -etiotropically -etiquette -etiquettical -etna -ettle -etua -etude -etui -etym -etymic -etymography -etymologer -etymologic -etymological -etymologically -etymologicon -etymologist -etymologization -etymologize -etymology -etymon -etymonic -etypic -etypical -etypically -eu -euangiotic -euaster -eubacterium -eucaine -eucairite -eucalypt -eucalypteol -eucalyptian -eucalyptic -eucalyptography -eucalyptol -eucalyptole -eucalyptus -eucatropine -eucephalous -eucharistial -eucharistic -eucharistical -eucharistically -eucharistize -euchlorhydria -euchloric -euchlorine -euchological -euchologion -euchology -euchre -euchred -euchroic -euchroite -euchromatic -euchromatin -euchrome -euchromosome -euchrone -euclase -eucolite -eucone -euconic -eucosmid -eucrasia -eucrasite -eucrasy -eucrite -eucryphiaceous -eucryptite -eucrystalline -euctical -eucyclic -eudaemon -eudaemonia -eudaemonic -eudaemonical -eudaemonics -eudaemonism -eudaemonist -eudaemonistic -eudaemonistical -eudaemonistically -eudaemonize -eudaemony -eudaimonia -eudaimonism -eudaimonist -eudiagnostic -eudialyte -eudiaphoresis -eudidymite -eudiometer -eudiometric -eudiometrical -eudiometrically -eudiometry -eudipleural -euge -eugenesic -eugenesis -eugenetic -eugenic -eugenical -eugenically -eugenicist -eugenics -eugenism -eugenist -eugenol -eugenolate -eugeny -euglenoid -euglobulin -eugranitic -euharmonic -euhedral -euhemerism -euhemerist -euhemeristic -euhemeristically -euhemerize -euhyostylic -euhyostyly -euktolite -eulachon -eulalia -eulamellibranch -eulogia -eulogic -eulogical -eulogically -eulogious -eulogism -eulogist -eulogistic -eulogistical -eulogistically -eulogium -eulogization -eulogize -eulogizer -eulogy -eulysite -eulytine -eulytite -eumenid -eumenorrhea -eumerism -eumeristic -eumerogenesis -eumerogenetic -eumeromorph -eumeromorphic -eumitosis -eumitotic -eumoiriety -eumoirous -eumorphous -eumycete -eumycetic -eunicid -eunomy -eunuch -eunuchal -eunuchism -eunuchize -eunuchoid -eunuchoidism -eunuchry -euomphalid -euonym -euonymin -euonymous -euonymy -euornithic -euosmite -euouae -eupad -eupathy -eupatoriaceous -eupatorin -eupatory -eupatrid -eupatridae -eupepsia -eupepsy -eupeptic -eupepticism -eupepticity -euphausiid -euphemian -euphemious -euphemiously -euphemism -euphemist -euphemistic -euphemistical -euphemistically -euphemize -euphemizer -euphemous -euphemy -euphon -euphone -euphonetic -euphonetics -euphonia -euphonic -euphonical -euphonically -euphonicalness -euphonious -euphoniously -euphoniousness -euphonism -euphonium -euphonize -euphonon -euphonous -euphony -euphonym -euphorbiaceous -euphorbium -euphoria -euphoric -euphory -euphrasy -euphroe -euphuism -euphuist -euphuistic -euphuistical -euphuistically -euphuize -eupione -eupittonic -euplastic -euploid -euploidy -eupnea -eupolyzoan -eupractic -eupraxia -eupsychics -eupyrchroite -eupyrene -eupyrion -eureka -eurhodine -eurhodol -euripus -eurite -eurobin -europium -euryalean -euryalidan -eurybathic -eurybenthic -eurycephalic -eurycephalous -eurygnathic -eurygnathism -eurygnathous -euryhaline -eurylaimoid -euryon -euryprognathous -euryprosopic -eurypterid -eurypteroid -eurypylous -euryscope -eurystomatous -eurythermal -eurythermic -eurythmic -eurythmical -eurythmics -eurythmy -eurytomid -euryzygous -eusol -eusporangiate -eustachium -eustatic -eustomatous -eustyle -eusuchian -eusynchite -eutannin -eutaxic -eutaxite -eutaxitic -eutaxy -eutechnic -eutechnics -eutectic -eutectoid -eutexia -euthanasia -euthanasy -euthenics -euthenist -eutherian -euthermic -euthycomic -euthyneural -euthyneurous -euthytatic -euthytropic -eutomous -eutony -eutrophic -eutrophy -eutropic -eutropous -euxanthate -euxanthic -euxanthone -euxenite -evacuant -evacuate -evacuation -evacuative -evacuator -evacue -evacuee -evadable -evade -evader -evadingly -evagation -evaginable -evaginate -evagination -evaluable -evaluate -evaluation -evaluative -evalue -evanesce -evanescence -evanescency -evanescent -evanescently -evanescible -evangel -evangelary -evangelian -evangeliarium -evangeliary -evangelical -evangelicalism -evangelicality -evangelically -evangelicalness -evangelican -evangelicism -evangelicity -evangelion -evangelism -evangelist -evangelistarion -evangelistarium -evangelistary -evangelistic -evangelistically -evangelistics -evangelistship -evangelium -evangelization -evangelize -evangelizer -evanish -evanishment -evanition -evansite -evaporability -evaporable -evaporate -evaporation -evaporative -evaporativity -evaporator -evaporimeter -evaporize -evaporometer -evase -evasible -evasion -evasional -evasive -evasively -evasiveness -eve -evechurr -evection -evectional -evejar -evelight -evelong -even -evenblush -evendown -evener -evenfall -evenforth -evenglow -evenhanded -evenhandedly -evenhandedness -evening -evenlight -evenlong -evenly -evenmete -evenminded -evenmindedness -evenness -evens -evensong -event -eventful -eventfully -eventfulness -eventide -eventime -eventless -eventlessly -eventlessness -eventognath -eventognathous -eventration -eventual -eventuality -eventualize -eventually -eventuate -eventuation -evenwise -evenworthy -eveque -ever -everbearer -everbearing -everbloomer -everblooming -everduring -everglade -evergreen -evergreenery -evergreenite -everlasting -everlastingly -everlastingness -everliving -evermore -evernioid -eversible -eversion -eversive -eversporting -evert -evertebral -evertebrate -evertile -evertor -everwhich -everwho -every -everybody -everyday -everydayness -everyhow -everylike -everyman -everyness -everyone -everything -everywhen -everywhence -everywhere -everywhereness -everywheres -everywhither -evestar -evetide -eveweed -evict -eviction -evictor -evidence -evidencive -evident -evidential -evidentially -evidentiary -evidently -evidentness -evil -evildoer -evilhearted -evilly -evilmouthed -evilness -evilproof -evilsayer -evilspeaker -evilspeaking -evilwishing -evince -evincement -evincible -evincibly -evincingly -evincive -evirate -eviration -eviscerate -evisceration -evisite -evitable -evitate -evitation -evittate -evocable -evocate -evocation -evocative -evocatively -evocator -evocatory -evocatrix -evoe -evoke -evoker -evolute -evolution -evolutional -evolutionally -evolutionary -evolutionism -evolutionist -evolutionize -evolutive -evolutoid -evolvable -evolve -evolvement -evolvent -evolver -evovae -evulgate -evulgation -evulse -evulsion -evzone -ewder -ewe -ewelease -ewer -ewerer -ewery -ewry -ex -exacerbate -exacerbation -exacerbescence -exacerbescent -exact -exactable -exacter -exacting -exactingly -exactingness -exaction -exactitude -exactive -exactiveness -exactly -exactment -exactness -exactor -exactress -exadversum -exaggerate -exaggerated -exaggeratedly -exaggerating -exaggeratingly -exaggeration -exaggerative -exaggeratively -exaggerativeness -exaggerator -exaggeratory -exagitate -exagitation -exairesis -exalate -exalbuminose -exalbuminous -exallotriote -exalt -exaltation -exaltative -exalted -exaltedly -exaltedness -exalter -exam -examen -examinability -examinable -examinant -examinate -examination -examinational -examinationism -examinationist -examinative -examinator -examinatorial -examinatory -examine -examinee -examiner -examinership -examining -examiningly -example -exampleless -exampleship -exanimate -exanimation -exanthem -exanthema -exanthematic -exanthematous -exappendiculate -exarate -exaration -exarch -exarchal -exarchate -exarchateship -exarchist -exarchy -exareolate -exarillate -exaristate -exarteritis -exarticulate -exarticulation -exasperate -exasperated -exasperatedly -exasperater -exasperating -exasperatingly -exasperation -exasperative -exaspidean -exaugurate -exauguration -excalate -excalation -excalcarate -excalceate -excalceation -excamb -excamber -excambion -excandescence -excandescency -excandescent -excantation -excarnate -excarnation -excathedral -excaudate -excavate -excavation -excavationist -excavator -excavatorial -excavatory -excave -excecate -excecation -excedent -exceed -exceeder -exceeding -exceedingly -exceedingness -excel -excelente -excellence -excellency -excellent -excellently -excelsin -excelsior -excelsitude -excentral -excentric -excentrical -excentricity -except -exceptant -excepting -exception -exceptionable -exceptionableness -exceptionably -exceptional -exceptionality -exceptionally -exceptionalness -exceptionary -exceptionless -exceptious -exceptiousness -exceptive -exceptively -exceptiveness -exceptor -excerebration -excerpt -excerptible -excerption -excerptive -excerptor -excess -excessive -excessively -excessiveness -excessman -exchange -exchangeability -exchangeable -exchangeably -exchanger -exchequer -excide -excipient -exciple -excipular -excipule -excipuliform -excipulum -excircle -excisable -excise -exciseman -excisemanship -excision -excisor -excitability -excitable -excitableness -excitancy -excitant -excitation -excitative -excitator -excitatory -excite -excited -excitedly -excitedness -excitement -exciter -exciting -excitingly -excitive -excitoglandular -excitometabolic -excitomotion -excitomotor -excitomotory -excitomuscular -excitonutrient -excitor -excitory -excitosecretory -excitovascular -exclaim -exclaimer -exclaiming -exclaimingly -exclamation -exclamational -exclamative -exclamatively -exclamatorily -exclamatory -exclave -exclosure -excludable -exclude -excluder -excluding -excludingly -exclusion -exclusionary -exclusioner -exclusionism -exclusionist -exclusive -exclusively -exclusiveness -exclusivism -exclusivist -exclusivity -exclusory -excogitable -excogitate -excogitation -excogitative -excogitator -excommunicable -excommunicant -excommunicate -excommunication -excommunicative -excommunicator -excommunicatory -exconjugant -excoriable -excoriate -excoriation -excoriator -excorticate -excortication -excrement -excremental -excrementary -excrementitial -excrementitious -excrementitiously -excrementitiousness -excrementive -excresce -excrescence -excrescency -excrescent -excrescential -excreta -excretal -excrete -excreter -excretes -excretion -excretionary -excretitious -excretive -excretory -excriminate -excruciable -excruciate -excruciating -excruciatingly -excruciation -excruciator -excubant -excudate -exculpable -exculpate -exculpation -exculpative -exculpatorily -exculpatory -excurrent -excurse -excursion -excursional -excursionary -excursioner -excursionism -excursionist -excursionize -excursive -excursively -excursiveness -excursory -excursus -excurvate -excurvated -excurvation -excurvature -excurved -excusability -excusable -excusableness -excusably -excusal -excusative -excusator -excusatory -excuse -excuseful -excusefully -excuseless -excuser -excusing -excusingly -excusive -excuss -excyst -excystation -excysted -excystment -exdelicto -exdie -exeat -execrable -execrableness -execrably -execrate -execration -execrative -execratively -execrator -execratory -executable -executancy -executant -execute -executed -executer -execution -executional -executioneering -executioner -executioneress -executionist -executive -executively -executiveness -executiveship -executor -executorial -executorship -executory -executress -executrices -executrix -executrixship -executry -exedent -exedra -exegeses -exegesis -exegesist -exegete -exegetic -exegetical -exegetically -exegetics -exegetist -exemplar -exemplaric -exemplarily -exemplariness -exemplarism -exemplarity -exemplary -exemplifiable -exemplification -exemplificational -exemplificative -exemplificator -exemplifier -exemplify -exempt -exemptible -exemptile -exemption -exemptionist -exemptive -exencephalia -exencephalic -exencephalous -exencephalus -exendospermic -exendospermous -exenterate -exenteration -exequatur -exequial -exequy -exercisable -exercise -exerciser -exercitant -exercitation -exercitor -exercitorial -exercitorian -exeresis -exergual -exergue -exert -exertion -exertionless -exertive -exes -exeunt -exfiguration -exfigure -exfiltration -exflagellate -exflagellation -exflect -exfodiate -exfodiation -exfoliate -exfoliation -exfoliative -exfoliatory -exgorgitation -exhalable -exhalant -exhalation -exhalatory -exhale -exhaust -exhausted -exhaustedly -exhaustedness -exhauster -exhaustibility -exhaustible -exhausting -exhaustingly -exhaustion -exhaustive -exhaustively -exhaustiveness -exhaustless -exhaustlessly -exhaustlessness -exheredate -exheredation -exhibit -exhibitable -exhibitant -exhibiter -exhibition -exhibitional -exhibitioner -exhibitionism -exhibitionist -exhibitionistic -exhibitionize -exhibitive -exhibitively -exhibitor -exhibitorial -exhibitorship -exhibitory -exhilarant -exhilarate -exhilarating -exhilaratingly -exhilaration -exhilarative -exhilarator -exhilaratory -exhort -exhortation -exhortative -exhortatively -exhortator -exhortatory -exhorter -exhortingly -exhumate -exhumation -exhumator -exhumatory -exhume -exhumer -exigence -exigency -exigent -exigenter -exigently -exigible -exiguity -exiguous -exiguously -exiguousness -exilarch -exilarchate -exile -exiledom -exilement -exiler -exilian -exilic -exility -eximious -eximiously -eximiousness -exinanite -exinanition -exindusiate -exinguinal -exist -existability -existence -existent -existential -existentialism -existentialist -existentialistic -existentialize -existentially -existently -exister -existibility -existible -existlessness -exit -exite -exition -exitus -exlex -exmeridian -exoarteritis -exoascaceous -exocannibalism -exocardia -exocardiac -exocardial -exocarp -exocataphoria -exoccipital -exocentric -exochorion -exoclinal -exocline -exocoelar -exocoele -exocoelic -exocoelom -exocolitis -exocone -exocrine -exoculate -exoculation -exocyclic -exode -exoderm -exodermis -exodic -exodist -exodontia -exodontist -exodos -exodromic -exodromy -exodus -exody -exoenzyme -exoenzymic -exoerythrocytic -exogamic -exogamous -exogamy -exogastric -exogastrically -exogastritis -exogen -exogenetic -exogenic -exogenous -exogenously -exogeny -exognathion -exognathite -exolemma -exometritis -exomion -exomis -exomologesis -exomorphic -exomorphism -exomphalos -exomphalous -exomphalus -exon -exonarthex -exoner -exonerate -exoneration -exonerative -exonerator -exoneural -exonship -exopathic -exoperidium -exophagous -exophagy -exophasia -exophasic -exophoria -exophoric -exophthalmic -exophthalmos -exoplasm -exopod -exopodite -exopoditic -exopterygotic -exopterygotism -exopterygotous -exorability -exorable -exorableness -exorbital -exorbitance -exorbitancy -exorbitant -exorbitantly -exorbitate -exorbitation -exorcisation -exorcise -exorcisement -exorciser -exorcism -exorcismal -exorcisory -exorcist -exorcistic -exorcistical -exordia -exordial -exordium -exordize -exorganic -exorhason -exormia -exornation -exosepsis -exoskeletal -exoskeleton -exosmic -exosmose -exosmosis -exosmotic -exosperm -exosporal -exospore -exosporium -exosporous -exostome -exostosed -exostosis -exostotic -exostra -exostracism -exostracize -exoteric -exoterical -exoterically -exotericism -exoterics -exotheca -exothecal -exothecate -exothecium -exothermal -exothermic -exothermous -exotic -exotically -exoticalness -exoticism -exoticist -exoticity -exoticness -exotism -exotospore -exotoxic -exotoxin -exotropia -exotropic -exotropism -expalpate -expand -expanded -expandedly -expandedness -expander -expanding -expandingly -expanse -expansibility -expansible -expansibleness -expansibly -expansile -expansion -expansional -expansionary -expansionism -expansionist -expansive -expansively -expansiveness -expansivity -expansometer -expansure -expatiate -expatiater -expatiatingly -expatiation -expatiative -expatiator -expatiatory -expatriate -expatriation -expect -expectable -expectance -expectancy -expectant -expectantly -expectation -expectative -expectedly -expecter -expectingly -expective -expectorant -expectorate -expectoration -expectorative -expectorator -expede -expediate -expedience -expediency -expedient -expediential -expedientially -expedientist -expediently -expeditate -expeditation -expedite -expedited -expeditely -expediteness -expediter -expedition -expeditionary -expeditionist -expeditious -expeditiously -expeditiousness -expel -expellable -expellant -expellee -expeller -expend -expendability -expendable -expender -expendible -expenditor -expenditrix -expenditure -expense -expenseful -expensefully -expensefulness -expenseless -expensilation -expensive -expensively -expensiveness -expenthesis -expergefacient -expergefaction -experience -experienceable -experienced -experienceless -experiencer -experiencible -experient -experiential -experientialism -experientialist -experientially -experiment -experimental -experimentalism -experimentalist -experimentalize -experimentally -experimentarian -experimentation -experimentative -experimentator -experimented -experimentee -experimenter -experimentist -experimentize -experimently -expert -expertism -expertize -expertly -expertness -expertship -expiable -expiate -expiation -expiational -expiatist -expiative -expiator -expiatoriness -expiatory -expilate -expilation -expilator -expirable -expirant -expirate -expiration -expirator -expiratory -expire -expiree -expirer -expiring -expiringly -expiry -expiscate -expiscation -expiscator -expiscatory -explain -explainable -explainer -explaining -explainingly -explanate -explanation -explanative -explanatively -explanator -explanatorily -explanatoriness -explanatory -explant -explantation -explement -explemental -expletive -expletively -expletiveness -expletory -explicable -explicableness -explicate -explication -explicative -explicatively -explicator -explicatory -explicit -explicitly -explicitness -explodable -explode -exploded -explodent -exploder -exploit -exploitable -exploitage -exploitation -exploitationist -exploitative -exploiter -exploitive -exploiture -explorable -exploration -explorational -explorative -exploratively -explorativeness -explorator -exploratory -explore -explorement -explorer -exploring -exploringly -explosibility -explosible -explosion -explosionist -explosive -explosively -explosiveness -expone -exponence -exponency -exponent -exponential -exponentially -exponentiation -exponible -export -exportability -exportable -exportation -exporter -exposal -expose -exposed -exposedness -exposer -exposit -exposition -expositional -expositionary -expositive -expositively -expositor -expositorial -expositorially -expositorily -expositoriness -expository -expositress -expostulate -expostulating -expostulatingly -expostulation -expostulative -expostulatively -expostulator -expostulatory -exposure -expound -expoundable -expounder -express -expressable -expressage -expressed -expresser -expressibility -expressible -expressibly -expression -expressionable -expressional -expressionful -expressionism -expressionist -expressionistic -expressionless -expressionlessly -expressionlessness -expressive -expressively -expressiveness -expressivism -expressivity -expressless -expressly -expressman -expressness -expressway -exprimable -exprobrate -exprobration -exprobratory -expromission -expromissor -expropriable -expropriate -expropriation -expropriator -expugn -expugnable -expuition -expulsatory -expulse -expulser -expulsion -expulsionist -expulsive -expulsory -expunction -expunge -expungeable -expungement -expunger -expurgate -expurgation -expurgative -expurgator -expurgatorial -expurgatory -expurge -exquisite -exquisitely -exquisiteness -exquisitism -exquisitively -exradio -exradius -exrupeal -exsanguinate -exsanguination -exsanguine -exsanguineous -exsanguinity -exsanguinous -exsanguious -exscind -exscissor -exscriptural -exsculptate -exscutellate -exsect -exsectile -exsection -exsector -exsequatur -exsert -exserted -exsertile -exsertion -exship -exsibilate -exsibilation -exsiccant -exsiccatae -exsiccate -exsiccation -exsiccative -exsiccator -exsiliency -exsomatic -exspuition -exsputory -exstipulate -exstrophy -exsuccous -exsuction -exsufflate -exsufflation -exsufflicate -exsurge -exsurgent -extant -extemporal -extemporally -extemporalness -extemporaneity -extemporaneous -extemporaneously -extemporaneousness -extemporarily -extemporariness -extemporary -extempore -extemporization -extemporize -extemporizer -extend -extended -extendedly -extendedness -extender -extendibility -extendible -extending -extense -extensibility -extensible -extensibleness -extensile -extensimeter -extension -extensional -extensionist -extensity -extensive -extensively -extensiveness -extensometer -extensor -extensory -extensum -extent -extenuate -extenuating -extenuatingly -extenuation -extenuative -extenuator -extenuatory -exter -exterior -exteriorate -exterioration -exteriority -exteriorization -exteriorize -exteriorly -exteriorness -exterminable -exterminate -extermination -exterminative -exterminator -exterminatory -exterminatress -exterminatrix -exterminist -extern -external -externalism -externalist -externalistic -externality -externalization -externalize -externally -externals -externate -externation -externe -externity -externization -externize -externomedian -externum -exteroceptist -exteroceptive -exteroceptor -exterraneous -exterrestrial -exterritorial -exterritoriality -exterritorialize -exterritorially -extima -extinct -extinction -extinctionist -extinctive -extinctor -extine -extinguish -extinguishable -extinguishant -extinguished -extinguisher -extinguishment -extipulate -extirpate -extirpation -extirpationist -extirpative -extirpator -extirpatory -extispex -extispicious -extispicy -extogenous -extol -extoll -extollation -extoller -extollingly -extollment -extolment -extoolitic -extorsive -extorsively -extort -extorter -extortion -extortionary -extortionate -extortionately -extortioner -extortionist -extortive -extra -extrabold -extrabranchial -extrabronchial -extrabuccal -extrabulbar -extrabureau -extraburghal -extracalendar -extracalicular -extracanonical -extracapsular -extracardial -extracarpal -extracathedral -extracellular -extracellularly -extracerebral -extracivic -extracivically -extraclassroom -extraclaustral -extracloacal -extracollegiate -extracolumella -extraconscious -extraconstellated -extraconstitutional -extracorporeal -extracorpuscular -extracosmic -extracosmical -extracostal -extracranial -extract -extractable -extractant -extracted -extractible -extractiform -extraction -extractive -extractor -extractorship -extracultural -extracurial -extracurricular -extracurriculum -extracutaneous -extracystic -extradecretal -extradialectal -extraditable -extradite -extradition -extradomestic -extrados -extradosed -extradotal -extraduction -extradural -extraembryonic -extraenteric -extraepiphyseal -extraequilibrium -extraessential -extraessentially -extrafascicular -extrafloral -extrafocal -extrafoliaceous -extraforaneous -extraformal -extragalactic -extragastric -extrait -extrajudicial -extrajudicially -extralateral -extralite -extrality -extramarginal -extramatrical -extramedullary -extramental -extrameridian -extrameridional -extrametaphysical -extrametrical -extrametropolitan -extramodal -extramolecular -extramorainal -extramorainic -extramoral -extramoralist -extramundane -extramural -extramurally -extramusical -extranational -extranatural -extranean -extraneity -extraneous -extraneously -extraneousness -extranidal -extranormal -extranuclear -extraocular -extraofficial -extraoral -extraorbital -extraorbitally -extraordinarily -extraordinariness -extraordinary -extraorganismal -extraovate -extraovular -extraparenchymal -extraparental -extraparietal -extraparliamentary -extraparochial -extraparochially -extrapatriarchal -extrapelvic -extraperineal -extraperiodic -extraperiosteal -extraperitoneal -extraphenomenal -extraphysical -extraphysiological -extrapituitary -extraplacental -extraplanetary -extrapleural -extrapoetical -extrapolar -extrapolate -extrapolation -extrapolative -extrapolator -extrapopular -extraprofessional -extraprostatic -extraprovincial -extrapulmonary -extrapyramidal -extraquiz -extrared -extraregarding -extraregular -extraregularly -extrarenal -extraretinal -extrarhythmical -extrasacerdotal -extrascholastic -extraschool -extrascientific -extrascriptural -extrascripturality -extrasensible -extrasensory -extrasensuous -extraserous -extrasocial -extrasolar -extrasomatic -extraspectral -extraspherical -extraspinal -extrastapedial -extrastate -extrasterile -extrastomachal -extrasyllabic -extrasyllogistic -extrasyphilitic -extrasystole -extrasystolic -extratabular -extratarsal -extratellurian -extratelluric -extratemporal -extratension -extratensive -extraterrene -extraterrestrial -extraterritorial -extraterritoriality -extraterritorially -extrathecal -extratheistic -extrathermodynamic -extrathoracic -extratorrid -extratracheal -extratribal -extratropical -extratubal -extratympanic -extrauterine -extravagance -extravagancy -extravagant -extravagantly -extravagantness -extravaganza -extravagate -extravaginal -extravasate -extravasation -extravascular -extraventricular -extraversion -extravert -extravillar -extraviolet -extravisceral -extrazodiacal -extreme -extremeless -extremely -extremeness -extremism -extremist -extremistic -extremital -extremity -extricable -extricably -extricate -extricated -extrication -extrinsic -extrinsical -extrinsicality -extrinsically -extrinsicalness -extrinsicate -extrinsication -extroitive -extropical -extrorsal -extrorse -extrorsely -extrospect -extrospection -extrospective -extroversion -extroversive -extrovert -extrovertish -extrude -extruder -extruding -extrusile -extrusion -extrusive -extrusory -extubate -extubation -extumescence -extund -extusion -exuberance -exuberancy -exuberant -exuberantly -exuberantness -exuberate -exuberation -exudate -exudation -exudative -exude -exudence -exulcerate -exulceration -exulcerative -exulceratory -exult -exultance -exultancy -exultant -exultantly -exultation -exultet -exultingly -exululate -exumbral -exumbrella -exumbrellar -exundance -exundancy -exundate -exundation -exuviability -exuviable -exuviae -exuvial -exuviate -exuviation -exzodiacal -ey -eyah -eyalet -eyas -eye -eyeball -eyebalm -eyebar -eyebeam -eyeberry -eyeblink -eyebolt -eyebree -eyebridled -eyebright -eyebrow -eyecup -eyed -eyedness -eyedot -eyedrop -eyeflap -eyeful -eyeglance -eyeglass -eyehole -eyelash -eyeless -eyelessness -eyelet -eyeleteer -eyeletter -eyelid -eyelight -eyelike -eyeline -eyemark -eyen -eyepiece -eyepit -eyepoint -eyer -eyereach -eyeroot -eyesalve -eyeseed -eyeservant -eyeserver -eyeservice -eyeshade -eyeshield -eyeshot -eyesight -eyesome -eyesore -eyespot -eyestalk -eyestone -eyestrain -eyestring -eyetooth -eyewaiter -eyewash -eyewater -eyewear -eyewink -eyewinker -eyewitness -eyewort -eyey -eying -eyn -eyne -eyot -eyoty -eyra -eyre -eyrie -eyrir -ezba -f -fa -fabaceous -fabella -fabes -fabiform -fable -fabled -fabledom -fableist -fableland -fablemaker -fablemonger -fablemongering -fabler -fabliau -fabling -fabric -fabricant -fabricate -fabrication -fabricative -fabricator -fabricatress -fabrikoid -fabular -fabulist -fabulosity -fabulous -fabulously -fabulousness -faburden -facadal -facade -face -faceable -facebread -facecloth -faced -faceless -facellite -facemaker -facemaking -faceman -facemark -facepiece -faceplate -facer -facet -facete -faceted -facetely -faceteness -facetiae -facetiation -facetious -facetiously -facetiousness -facewise -facework -facia -facial -facially -faciation -faciend -facient -facies -facile -facilely -facileness -facilitate -facilitation -facilitative -facilitator -facility -facing -facingly -facinorous -facinorousness -faciobrachial -faciocervical -faciolingual -facioplegia -facioscapulohumeral -fack -fackeltanz -fackings -fackins -facks -facsimile -facsimilist -facsimilize -fact -factable -factabling -factful -facticide -faction -factional -factionalism -factionary -factioneer -factionist -factionistism -factious -factiously -factiousness -factish -factitial -factitious -factitiously -factitive -factitively -factitude -factive -factor -factorability -factorable -factorage -factordom -factoress -factorial -factorially -factorist -factorization -factorize -factorship -factory -factoryship -factotum -factrix -factual -factuality -factually -factualness -factum -facture -facty -facula -facular -faculous -facultate -facultative -facultatively -facultied -facultize -faculty -facund -facy -fad -fadable -faddiness -faddish -faddishness -faddism -faddist -faddle -faddy -fade -fadeaway -faded -fadedly -fadedness -fadeless -faden -fader -fadge -fading -fadingly -fadingness -fadmonger -fadmongering -fadmongery -fadridden -fady -fae -faerie -faery -faeryland -faff -faffle -faffy -fag -fagaceous -fagald -fage -fager -fagger -faggery -fagging -faggingly -fagine -fagopyrism -fagopyrismus -fagot -fagoter -fagoting -fagottino -fagottist -fagoty -faham -fahlerz -fahlore -fahlunite -faience -fail -failing -failingly -failingness -faille -failure -fain -fainaigue -fainaiguer -faineance -faineancy -faineant -faineantism -fainly -fainness -fains -faint -fainter -faintful -faintheart -fainthearted -faintheartedly -faintheartedness -fainting -faintingly -faintish -faintishness -faintly -faintness -faints -fainty -faipule -fair -fairer -fairfieldite -fairgoer -fairgoing -fairgrass -fairground -fairily -fairing -fairish -fairishly -fairkeeper -fairlike -fairling -fairly -fairm -fairness -fairstead -fairtime -fairwater -fairway -fairy -fairydom -fairyfolk -fairyhood -fairyish -fairyism -fairyland -fairylike -fairyologist -fairyology -fairyship -faith -faithbreach -faithbreaker -faithful -faithfully -faithfulness -faithless -faithlessly -faithlessness -faithwise -faithworthiness -faithworthy -faitour -fake -fakement -faker -fakery -fakiness -fakir -fakirism -faky -falanaka -falbala -falcade -falcate -falcated -falcation -falcer -falces -falchion -falcial -falciform -falciparum -falcon -falconbill -falconelle -falconer -falconet -falconine -falconlike -falconoid -falconry -falcopern -falcula -falcular -falculate -faldage -falderal -faldfee -faldstool -fall -fallace -fallacious -fallaciously -fallaciousness -fallacy -fallage -fallation -fallaway -fallback -fallectomy -fallen -fallenness -faller -fallfish -fallibility -fallible -fallibleness -fallibly -falling -fallostomy -fallotomy -fallow -fallowist -fallowness -falltime -fallway -fally -falsary -false -falsehearted -falseheartedly -falseheartedness -falsehood -falsely -falsen -falseness -falser -falsettist -falsetto -falsework -falsidical -falsie -falsifiable -falsificate -falsification -falsificator -falsifier -falsify -falsism -faltboat -faltche -falter -falterer -faltering -falteringly -falutin -falx -fam -famatinite -famble -fame -fameflower -fameful -fameless -famelessly -famelessness -fameworthy -familia -familial -familiar -familiarism -familiarity -familiarization -familiarize -familiarizer -familiarizingly -familiarly -familiarness -familism -familist -familistery -familistic -familistical -family -familyish -famine -famish -famishment -famous -famously -famousness -famulary -famulus -fan -fana -fanal -fanam -fanatic -fanatical -fanatically -fanaticalness -fanaticism -fanaticize -fanback -fanbearer -fanciable -fancical -fancied -fancier -fanciful -fancifully -fancifulness -fancify -fanciless -fancy -fancymonger -fancysick -fancywork -fand -fandangle -fandango -fandom -fanega -fanegada -fanfarade -fanfare -fanfaron -fanfaronade -fanfaronading -fanflower -fanfoot -fang -fanged -fangle -fangled -fanglement -fangless -fanglet -fanglomerate -fangot -fangy -fanhouse -faniente -fanion -fanioned -fanlight -fanlike -fanmaker -fanmaking -fanman -fannel -fanner -fannier -fanning -fanon -fant -fantail -fantasia -fantasie -fantasied -fantasist -fantasque -fantassin -fantast -fantastic -fantastical -fantasticality -fantastically -fantasticalness -fantasticate -fantastication -fantasticism -fantasticly -fantasticness -fantastico -fantastry -fantasy -fantigue -fantoccini -fantocine -fantod -fantoddish -fanweed -fanwise -fanwork -fanwort -fanwright -faon -far -farad -faradaic -faraday -faradic -faradism -faradization -faradize -faradizer -faradmeter -faradocontractility -faradomuscular -faradonervous -faradopalpation -farandole -farasula -faraway -farawayness -farce -farcelike -farcer -farcetta -farcial -farcialize -farcical -farcicality -farcically -farcicalness -farcied -farcify -farcing -farcinoma -farcist -farctate -farcy -farde -fardel -fardelet -fardh -fardo -fare -farer -farewell -farfara -farfel -farfetched -farfetchedness -fargoing -fargood -farina -farinaceous -farinaceously -faring -farinometer -farinose -farinosely -farinulent -farish -farkleberry -farl -farleu -farm -farmable -farmage -farmer -farmeress -farmerette -farmerlike -farmership -farmery -farmhold -farmhouse -farmhousey -farming -farmost -farmplace -farmstead -farmsteading -farmtown -farmy -farmyard -farmyardy -farnesol -farness -faro -farolito -farraginous -farrago -farrand -farrandly -farrantly -farreate -farreation -farrier -farrierlike -farriery -farrisite -farrow -farruca -farsalah -farse -farseeing -farseeingness -farseer -farset -farsighted -farsightedly -farsightedness -farther -farthermost -farthest -farthing -farthingale -farthingless -farweltered -fasces -fascet -fascia -fascial -fasciate -fasciated -fasciately -fasciation -fascicle -fascicled -fascicular -fascicularly -fasciculate -fasciculated -fasciculately -fasciculation -fascicule -fasciculus -fascinate -fascinated -fascinatedly -fascinating -fascinatingly -fascination -fascinative -fascinator -fascinatress -fascine -fascinery -fasciodesis -fasciola -fasciolar -fasciole -fasciolet -fascioliasis -fascioloid -fascioplasty -fasciotomy -fascis -fascism -fascist -fascisticization -fascisticize -fascistization -fascistize -fash -fasher -fashery -fashion -fashionability -fashionable -fashionableness -fashionably -fashioned -fashioner -fashionist -fashionize -fashionless -fashionmonger -fashionmonging -fashious -fashiousness -fasibitikite -fasinite -fass -fassalite -fast -fasten -fastener -fastening -faster -fastgoing -fasthold -fastidiosity -fastidious -fastidiously -fastidiousness -fastidium -fastigate -fastigated -fastigiate -fastigium -fasting -fastingly -fastish -fastland -fastness -fastuous -fastuously -fastuousness -fastus -fat -fatal -fatalism -fatalist -fatalistic -fatalistically -fatality -fatalize -fatally -fatalness -fatbird -fatbrained -fate -fated -fateful -fatefully -fatefulness -fatelike -fathead -fatheaded -fatheadedness -fathearted -father -fathercraft -fathered -fatherhood -fatherland -fatherlandish -fatherless -fatherlessness -fatherlike -fatherliness -fatherling -fatherly -fathership -fathmur -fathom -fathomable -fathomage -fathomer -fathomless -fathomlessly -fathomlessness -fatidic -fatidical -fatidically -fatiferous -fatigability -fatigable -fatigableness -fatigue -fatigueless -fatiguesome -fatiguing -fatiguingly -fatiha -fatil -fatiloquent -fatiscence -fatiscent -fatless -fatling -fatly -fatness -fatsia -fattable -fatten -fattenable -fattener -fatter -fattily -fattiness -fattish -fattishness -fattrels -fatty -fatuism -fatuitous -fatuitousness -fatuity -fatuoid -fatuous -fatuously -fatuousness -fatwood -faucal -faucalize -fauces -faucet -fauchard -faucial -faucitis -faucre -faugh -faujasite -fauld -fault -faultage -faulter -faultfind -faultfinder -faultfinding -faultful -faultfully -faultily -faultiness -faulting -faultless -faultlessly -faultlessness -faultsman -faulty -faun -faunal -faunally -faunated -faunish -faunist -faunistic -faunistical -faunistically -faunlike -faunological -faunology -faunule -fause -faussebraie -faussebrayed -faust -fauterer -fautor -fautorship -fauve -favaginous -favella -favellidium -favelloid -faveolate -faveolus -faviform -favilla -favillous -favism -favissa -favn -favonian -favor -favorable -favorableness -favorably -favored -favoredly -favoredness -favorer -favoress -favoring -favoringly -favorite -favoritism -favorless -favose -favosely -favosite -favositoid -favous -favus -fawn -fawner -fawnery -fawning -fawningly -fawningness -fawnlike -fawnskin -fawny -fay -fayalite -fayles -faze -fazenda -fe -feaberry -feague -feak -feal -fealty -fear -fearable -feared -fearedly -fearedness -fearer -fearful -fearfully -fearfulness -fearingly -fearless -fearlessly -fearlessness -fearnought -fearsome -fearsomely -fearsomeness -feasance -feasibility -feasible -feasibleness -feasibly -feasor -feast -feasten -feaster -feastful -feastfully -feastless -feat -feather -featherback -featherbed -featherbedding -featherbird -featherbone -featherbrain -featherbrained -featherdom -feathered -featheredge -featheredged -featherer -featherfew -featherfoil -featherhead -featherheaded -featheriness -feathering -featherleaf -featherless -featherlessness -featherlet -featherlike -featherman -feathermonger -featherpate -featherpated -featherstitch -featherstitching -feathertop -featherway -featherweed -featherweight -featherwing -featherwise -featherwood -featherwork -featherworker -feathery -featliness -featly -featness -featous -featural -featurally -feature -featured -featureful -featureless -featureliness -featurely -featy -feaze -feazings -febricant -febricide -febricity -febricula -febrifacient -febriferous -febrific -febrifugal -febrifuge -febrile -febrility -februation -fecal -fecalith -fecaloid -feces -feck -feckful -feckfully -feckless -fecklessly -fecklessness -feckly -fecula -feculence -feculency -feculent -fecund -fecundate -fecundation -fecundative -fecundator -fecundatory -fecundify -fecundity -fecundize -fed -feddan -federacy -federal -federalism -federalist -federalization -federalize -federally -federalness -federate -federation -federationist -federatist -federative -federatively -federator -fee -feeable -feeble -feeblebrained -feeblehearted -feebleheartedly -feebleheartedness -feebleness -feebling -feeblish -feebly -feed -feedable -feedback -feedbin -feedboard -feedbox -feeder -feedhead -feeding -feedman -feedsman -feedstuff -feedway -feedy -feel -feelable -feeler -feeless -feeling -feelingful -feelingless -feelinglessly -feelingly -feelingness -feer -feere -feering -feetage -feetless -feeze -fefnicute -fegary -fei -feif -feigher -feign -feigned -feignedly -feignedness -feigner -feigning -feigningly -feil -feint -feis -feist -feisty -feldsher -feldspar -feldsparphyre -feldspathic -feldspathization -feldspathoid -felicide -felicific -felicitate -felicitation -felicitator -felicitous -felicitously -felicitousness -felicity -felid -feliform -feline -felinely -felineness -felinity -felinophile -felinophobe -fell -fellable -fellage -fellah -fellaheen -fellahin -fellatio -fellation -fellen -feller -fellic -felliducous -fellifluous -felling -fellingbird -fellinic -fellmonger -fellmongering -fellmongery -fellness -felloe -fellow -fellowcraft -fellowess -fellowheirship -fellowless -fellowlike -fellowship -fellside -fellsman -felly -feloid -felon -feloness -felonious -feloniously -feloniousness -felonry -felonsetter -felonsetting -felonweed -felonwood -felonwort -felony -fels -felsite -felsitic -felsobanyite -felsophyre -felsophyric -felsosphaerite -felstone -felt -felted -felter -felting -feltlike -feltmaker -feltmaking -feltmonger -feltness -feltwork -feltwort -felty -feltyfare -felucca -felwort -female -femalely -femaleness -femality -femalize -feme -femerell -femic -femicide -feminacy -feminal -feminality -feminate -femineity -feminie -feminility -feminin -feminine -femininely -feminineness -femininism -femininity -feminism -feminist -feministic -feministics -feminity -feminization -feminize -feminologist -feminology -feminophobe -femora -femoral -femorocaudal -femorocele -femorococcygeal -femorofibular -femoropopliteal -femororotulian -femorotibial -femur -fen -fenbank -fenberry -fence -fenceful -fenceless -fencelessness -fencelet -fenceplay -fencer -fenceress -fenchene -fenchone -fenchyl -fencible -fencing -fend -fendable -fender -fendering -fenderless -fendillate -fendillation -fendy -feneration -fenestella -fenestra -fenestral -fenestrate -fenestrated -fenestration -fenestrato -fenestrule -fenite -fenks -fenland -fenlander -fenman -fennec -fennel -fennelflower -fennig -fennish -fenny -fenouillet -fensive -fent -fenter -fenugreek -feod -feodal -feodality -feodary -feodatory -feoff -feoffee -feoffeeship -feoffment -feoffor -feower -feracious -feracity -feral -feralin -ferash -ferberite -ferdwit -feretory -feretrum -ferfathmur -ferfet -ferganite -fergusite -fergusonite -feria -ferial -feridgi -ferie -ferine -ferinely -ferineness -ferity -ferk -ferling -ferly -fermail -ferme -ferment -fermentability -fermentable -fermentarian -fermentation -fermentative -fermentatively -fermentativeness -fermentatory -fermenter -fermentescible -fermentitious -fermentive -fermentology -fermentor -fermentum -fermerer -fermery -fermila -fermorite -fern -fernandinite -fernbird -fernbrake -ferned -fernery -ferngale -ferngrower -fernland -fernleaf -fernless -fernlike -fernshaw -fernsick -ferntickle -ferntickled -fernwort -ferny -ferocious -ferociously -ferociousness -ferocity -feroher -ferrado -ferrament -ferrate -ferrated -ferrateen -ferratin -ferrean -ferreous -ferret -ferreter -ferreting -ferretto -ferrety -ferri -ferriage -ferric -ferrichloride -ferricyanate -ferricyanhydric -ferricyanic -ferricyanide -ferricyanogen -ferrier -ferriferous -ferrihydrocyanic -ferriprussiate -ferriprussic -ferrite -ferritization -ferritungstite -ferrivorous -ferroalloy -ferroaluminum -ferroboron -ferrocalcite -ferrocerium -ferrochrome -ferrochromium -ferroconcrete -ferroconcretor -ferrocyanate -ferrocyanhydric -ferrocyanic -ferrocyanide -ferrocyanogen -ferroglass -ferrogoslarite -ferrohydrocyanic -ferroinclave -ferromagnesian -ferromagnetic -ferromagnetism -ferromanganese -ferromolybdenum -ferronatrite -ferronickel -ferrophosphorus -ferroprint -ferroprussiate -ferroprussic -ferrosilicon -ferrotitanium -ferrotungsten -ferrotype -ferrotyper -ferrous -ferrovanadium -ferrozirconium -ferruginate -ferrugination -ferruginean -ferruginous -ferrule -ferruler -ferrum -ferruminate -ferrumination -ferry -ferryboat -ferryhouse -ferryman -ferryway -ferthumlungur -fertile -fertilely -fertileness -fertility -fertilizable -fertilization -fertilizational -fertilize -fertilizer -feru -ferula -ferulaceous -ferule -ferulic -fervanite -fervency -fervent -fervently -ferventness -fervescence -fervescent -fervid -fervidity -fervidly -fervidness -fervor -fervorless -fescenninity -fescue -fess -fessely -fesswise -fest -festal -festally -fester -festerment -festilogy -festinance -festinate -festinately -festination -festine -festival -festivally -festive -festively -festiveness -festivity -festivous -festology -festoon -festoonery -festoony -festuca -festucine -fet -fetal -fetalism -fetalization -fetation -fetch -fetched -fetcher -fetching -fetchingly -feteless -feterita -fetial -fetiales -fetichmonger -feticidal -feticide -fetid -fetidity -fetidly -fetidness -fetiferous -fetiparous -fetish -fetisheer -fetishic -fetishism -fetishist -fetishistic -fetishization -fetishize -fetishmonger -fetishry -fetlock -fetlocked -fetlow -fetography -fetometry -fetoplacental -fetor -fetter -fetterbush -fetterer -fetterless -fetterlock -fetticus -fettle -fettler -fettling -fetus -feu -feuage -feuar -feucht -feud -feudal -feudalism -feudalist -feudalistic -feudality -feudalizable -feudalization -feudalize -feudally -feudatorial -feudatory -feudee -feudist -feudovassalism -feued -feuille -feuilletonism -feuilletonist -feuilletonistic -feulamort -fever -feverberry -feverbush -fevercup -feveret -feverfew -fevergum -feverish -feverishly -feverishness -feverless -feverlike -feverous -feverously -feverroot -fevertrap -fevertwig -fevertwitch -feverweed -feverwort -few -fewness -fewsome -fewter -fewterer -fewtrils -fey -feyness -fez -fezzed -fezzy -fi -fiacre -fiance -fiancee -fianchetto -fiar -fiard -fiasco -fiat -fiatconfirmatio -fib -fibber -fibbery -fibdom -fiber -fiberboard -fibered -fiberize -fiberizer -fiberless -fiberware -fibration -fibreless -fibreware -fibriform -fibril -fibrilla -fibrillar -fibrillary -fibrillate -fibrillated -fibrillation -fibrilled -fibrilliferous -fibrilliform -fibrillose -fibrillous -fibrin -fibrinate -fibrination -fibrine -fibrinemia -fibrinoalbuminous -fibrinocellular -fibrinogen -fibrinogenetic -fibrinogenic -fibrinogenous -fibrinolysin -fibrinolysis -fibrinolytic -fibrinoplastic -fibrinoplastin -fibrinopurulent -fibrinose -fibrinosis -fibrinous -fibrinuria -fibroadenia -fibroadenoma -fibroadipose -fibroangioma -fibroareolar -fibroblast -fibroblastic -fibrobronchitis -fibrocalcareous -fibrocarcinoma -fibrocartilage -fibrocartilaginous -fibrocaseose -fibrocaseous -fibrocellular -fibrochondritis -fibrochondroma -fibrochondrosteal -fibrocrystalline -fibrocyst -fibrocystic -fibrocystoma -fibrocyte -fibroelastic -fibroenchondroma -fibrofatty -fibroferrite -fibroglia -fibroglioma -fibrohemorrhagic -fibroid -fibroin -fibrointestinal -fibroligamentous -fibrolipoma -fibrolipomatous -fibrolite -fibrolitic -fibroma -fibromata -fibromatoid -fibromatosis -fibromatous -fibromembrane -fibromembranous -fibromucous -fibromuscular -fibromyectomy -fibromyitis -fibromyoma -fibromyomatous -fibromyomectomy -fibromyositis -fibromyotomy -fibromyxoma -fibromyxosarcoma -fibroneuroma -fibronuclear -fibronucleated -fibropapilloma -fibropericarditis -fibroplastic -fibropolypus -fibropsammoma -fibropurulent -fibroreticulate -fibrosarcoma -fibrose -fibroserous -fibrosis -fibrositis -fibrotic -fibrotuberculosis -fibrous -fibrously -fibrousness -fibrovasal -fibrovascular -fibry -fibster -fibula -fibulae -fibular -fibulare -fibulocalcaneal -ficary -fice -ficelle -fiche -fichtelite -fichu -ficiform -fickle -ficklehearted -fickleness -ficklety -ficklewise -fickly -fico -ficoid -ficoides -fictation -fictile -fictileness -fictility -fiction -fictional -fictionalize -fictionally -fictionary -fictioneer -fictioner -fictionist -fictionistic -fictionization -fictionize -fictionmonger -fictious -fictitious -fictitiously -fictitiousness -fictive -fictively -fid -fidalgo -fidate -fidation -fiddle -fiddleback -fiddlebrained -fiddlecome -fiddledeedee -fiddlefaced -fiddlehead -fiddleheaded -fiddler -fiddlerfish -fiddlery -fiddlestick -fiddlestring -fiddlewood -fiddley -fiddling -fide -fideicommiss -fideicommissary -fideicommission -fideicommissioner -fideicommissor -fideicommissum -fideism -fideist -fidejussion -fidejussionary -fidejussor -fidejussory -fidelity -fidepromission -fidepromissor -fidfad -fidge -fidget -fidgeter -fidgetily -fidgetiness -fidgeting -fidgetingly -fidgety -fidicinal -fidicinales -fidicula -fiducia -fiducial -fiducially -fiduciarily -fiduciary -fiducinales -fie -fiedlerite -fiefdom -field -fieldball -fieldbird -fielded -fielder -fieldfare -fieldish -fieldman -fieldpiece -fieldsman -fieldward -fieldwards -fieldwork -fieldworker -fieldwort -fieldy -fiend -fiendful -fiendfully -fiendhead -fiendish -fiendishly -fiendishness -fiendism -fiendlike -fiendliness -fiendly -fiendship -fient -fierasferid -fierasferoid -fierce -fiercehearted -fiercely -fiercen -fierceness -fierding -fierily -fieriness -fiery -fiesta -fieulamort -fife -fifer -fifie -fifish -fifo -fifteen -fifteener -fifteenfold -fifteenth -fifteenthly -fifth -fifthly -fiftieth -fifty -fiftyfold -fig -figaro -figbird -figeater -figent -figged -figgery -figging -figgle -figgy -fight -fightable -fighter -fighteress -fighting -fightingly -fightwite -figless -figlike -figment -figmental -figpecker -figshell -figulate -figulated -figuline -figurability -figurable -figural -figurant -figurante -figurate -figurately -figuration -figurative -figuratively -figurativeness -figure -figured -figuredly -figurehead -figureheadless -figureheadship -figureless -figurer -figuresome -figurette -figurial -figurine -figurism -figurist -figurize -figury -figworm -figwort -fike -fikie -filace -filaceous -filacer -filament -filamentar -filamentary -filamented -filamentiferous -filamentoid -filamentose -filamentous -filamentule -filander -filanders -filao -filar -filaria -filarial -filarian -filariasis -filaricidal -filariform -filariid -filarious -filasse -filate -filator -filature -filbert -filch -filcher -filchery -filching -filchingly -file -filefish -filelike -filemaker -filemaking -filemot -filer -filesmith -filet -filial -filiality -filially -filialness -filiate -filiation -filibeg -filibranch -filibranchiate -filibuster -filibusterer -filibusterism -filibusterous -filical -filicauline -filicic -filicidal -filicide -filiciform -filicin -filicinean -filicite -filicologist -filicology -filiety -filiferous -filiform -filiformed -filigerous -filigree -filing -filings -filionymic -filiopietistic -filioque -filipendulous -filippo -filipuncture -filite -fill -fillable -filled -fillemot -filler -fillercap -fillet -filleter -filleting -filletlike -filletster -filleul -filling -fillingly -fillingness -fillip -fillipeen -fillister -fillmass -fillock -fillowite -filly -film -filmable -filmdom -filmet -filmgoer -filmgoing -filmic -filmiform -filmily -filminess -filmish -filmist -filmize -filmland -filmlike -filmogen -filmslide -filmstrip -filmy -filo -filoplumaceous -filoplume -filopodium -filose -filoselle -fils -filter -filterability -filterable -filterableness -filterer -filtering -filterman -filth -filthify -filthily -filthiness -filthless -filthy -filtrability -filtrable -filtratable -filtrate -filtration -fimble -fimbria -fimbrial -fimbriate -fimbriated -fimbriation -fimbriatum -fimbricate -fimbricated -fimbrilla -fimbrillate -fimbrilliferous -fimbrillose -fimbriodentate -fimetarious -fimicolous -fin -finable -finableness -finagle -finagler -final -finale -finalism -finalist -finality -finalize -finally -finance -financial -financialist -financially -financier -financiery -financist -finback -finch -finchbacked -finched -finchery -find -findability -findable -findal -finder -findfault -finding -findjan -fine -fineable -finebent -fineish -fineleaf -fineless -finely -finement -fineness -finer -finery -finespun -finesse -finesser -finestill -finestiller -finetop -finfish -finfoot -fingent -finger -fingerable -fingerberry -fingerbreadth -fingered -fingerer -fingerfish -fingerflower -fingerhold -fingerhook -fingering -fingerleaf -fingerless -fingerlet -fingerlike -fingerling -fingernail -fingerparted -fingerprint -fingerprinting -fingerroot -fingersmith -fingerspin -fingerstall -fingerstone -fingertip -fingerwise -fingerwork -fingery -fingrigo -finial -finialed -finical -finicality -finically -finicalness -finicism -finick -finickily -finickiness -finicking -finickingly -finickingness -finific -finify -finikin -finiking -fining -finis -finish -finishable -finished -finisher -finishing -finite -finitely -finiteness -finitesimal -finitive -finitude -finity -finjan -fink -finkel -finland -finless -finlet -finlike -finnac -finned -finner -finnesko -finnip -finny -finochio -fiord -fiorded -fiorin -fiorite -fip -fipenny -fipple -fique -fir -firca -fire -fireable -firearm -firearmed -fireback -fireball -firebird -fireblende -fireboard -fireboat -firebolt -firebolted -firebote -firebox -fireboy -firebrand -firebrat -firebreak -firebrick -firebug -fireburn -firecoat -firecracker -firecrest -fired -firedamp -firedog -firedrake -firefall -firefang -firefanged -fireflaught -fireflirt -fireflower -firefly -fireguard -firehouse -fireless -firelight -firelike -fireling -firelit -firelock -fireman -firemanship -firemaster -fireplace -fireplug -firepower -fireproof -fireproofing -fireproofness -firer -fireroom -firesafe -firesafeness -firesafety -fireshaft -fireshine -fireside -firesider -firesideship -firespout -firestone -firestopping -firetail -firetop -firetrap -firewarden -firewater -fireweed -firewood -firework -fireworkless -fireworky -fireworm -firing -firk -firker -firkin -firlot -firm -firmament -firmamental -firman -firmance -firmer -firmhearted -firmisternal -firmisternial -firmisternous -firmly -firmness -firn -firring -firry -first -firstcomer -firsthand -firstling -firstly -firstness -firstship -firth -fisc -fiscal -fiscalify -fiscalism -fiscalization -fiscalize -fiscally -fischerite -fise -fisetin -fish -fishable -fishback -fishbed -fishberry -fishbolt -fishbone -fisheater -fished -fisher -fisherboat -fisherboy -fisheress -fisherfolk -fishergirl -fisherman -fisherpeople -fisherwoman -fishery -fishet -fisheye -fishfall -fishful -fishgarth -fishgig -fishhood -fishhook -fishhooks -fishhouse -fishify -fishily -fishiness -fishing -fishingly -fishless -fishlet -fishlike -fishline -fishling -fishman -fishmonger -fishmouth -fishplate -fishpond -fishpool -fishpot -fishpotter -fishpound -fishskin -fishtail -fishway -fishweed -fishweir -fishwife -fishwoman -fishwood -fishworker -fishworks -fishworm -fishy -fishyard -fisnoga -fissate -fissicostate -fissidactyl -fissidentaceous -fissile -fissileness -fissilingual -fissility -fission -fissionable -fissipalmate -fissipalmation -fissiparation -fissiparism -fissiparity -fissiparous -fissiparously -fissiparousness -fissiped -fissipedal -fissipedate -fissipedial -fissirostral -fissirostrate -fissive -fissural -fissuration -fissure -fissureless -fissuriform -fissury -fist -fisted -fister -fistful -fistiana -fistic -fistical -fisticuff -fisticuffer -fisticuffery -fistify -fistiness -fisting -fistlike -fistmele -fistnote -fistuca -fistula -fistular -fistularioid -fistulate -fistulated -fistulatome -fistulatous -fistule -fistuliform -fistulize -fistulose -fistulous -fistwise -fisty -fit -fitch -fitched -fitchee -fitcher -fitchery -fitchet -fitchew -fitful -fitfully -fitfulness -fitly -fitment -fitness -fitout -fitroot -fittable -fittage -fitted -fittedness -fitten -fitter -fitters -fittily -fittiness -fitting -fittingly -fittingness -fitty -fittyfied -fittyways -fittywise -fitweed -five -fivebar -fivefold -fivefoldness -fiveling -fivepence -fivepenny -fivepins -fiver -fives -fivescore -fivesome -fivestones -fix -fixable -fixage -fixate -fixatif -fixation -fixative -fixator -fixature -fixed -fixedly -fixedness -fixer -fixidity -fixing -fixity -fixture -fixtureless -fixure -fizelyite -fizgig -fizz -fizzer -fizzle -fizzy -fjarding -fjeld -fjerding -flabbergast -flabbergastation -flabbily -flabbiness -flabby -flabellarium -flabellate -flabellation -flabellifoliate -flabelliform -flabellinerved -flabellum -flabrum -flaccid -flaccidity -flaccidly -flaccidness -flacherie -flack -flacked -flacker -flacket -flacourtiaceous -flaff -flaffer -flag -flagboat -flagellant -flagellantism -flagellar -flagellariaceous -flagellate -flagellated -flagellation -flagellative -flagellator -flagellatory -flagelliferous -flagelliform -flagellist -flagellosis -flagellula -flagellum -flageolet -flagfall -flagger -flaggery -flaggily -flagginess -flagging -flaggingly -flaggish -flaggy -flagitate -flagitation -flagitious -flagitiously -flagitiousness -flagleaf -flagless -flaglet -flaglike -flagmaker -flagmaking -flagman -flagon -flagonet -flagonless -flagpole -flagrance -flagrancy -flagrant -flagrantly -flagrantness -flagroot -flagship -flagstaff -flagstick -flagstone -flagworm -flail -flaillike -flair -flaith -flaithship -flajolotite -flak -flakage -flake -flakeless -flakelet -flaker -flakily -flakiness -flaky -flam -flamant -flamb -flambeau -flambeaux -flamberg -flamboyance -flamboyancy -flamboyant -flamboyantism -flamboyantize -flamboyantly -flamboyer -flame -flamed -flameflower -flameless -flamelet -flamelike -flamen -flamenco -flamenship -flameproof -flamer -flamfew -flamineous -flaming -flamingly -flamingo -flaminica -flaminical -flammability -flammable -flammeous -flammiferous -flammulated -flammulation -flammule -flamy -flan -flancard -flanch -flanched -flanconade -flandan -flandowser -flane -flange -flangeless -flanger -flangeway -flank -flankard -flanked -flanker -flanking -flankwise -flanky -flannel -flannelbush -flanneled -flannelette -flannelflower -flannelleaf -flannelly -flannelmouth -flannelmouthed -flannels -flanque -flap -flapcake -flapdock -flapdoodle -flapdragon -flapjack -flapmouthed -flapper -flapperdom -flapperhood -flapperish -flapperism -flare -flareback -flareboard -flareless -flaring -flaringly -flary -flaser -flash -flashboard -flasher -flashet -flashily -flashiness -flashing -flashingly -flashlight -flashlike -flashly -flashness -flashover -flashpan -flashproof -flashtester -flashy -flask -flasker -flasket -flasklet -flasque -flat -flatboat -flatbottom -flatcap -flatcar -flatdom -flated -flatfish -flatfoot -flathat -flathead -flatiron -flatland -flatlet -flatling -flatly -flatman -flatness -flatnose -flatten -flattener -flattening -flatter -flatterable -flattercap -flatterdock -flatterer -flattering -flatteringly -flatteringness -flattery -flattie -flatting -flattish -flattop -flatulence -flatulency -flatulent -flatulently -flatulentness -flatus -flatware -flatway -flatways -flatweed -flatwise -flatwoods -flatwork -flatworm -flaught -flaughter -flaunt -flaunter -flauntily -flauntiness -flaunting -flauntingly -flaunty -flautino -flautist -flavanilin -flavaniline -flavanthrene -flavanthrone -flavedo -flavescence -flavescent -flavic -flavicant -flavid -flavin -flavine -flavo -flavone -flavoprotein -flavopurpurin -flavor -flavored -flavorer -flavorful -flavoring -flavorless -flavorous -flavorsome -flavory -flavour -flaw -flawed -flawflower -flawful -flawless -flawlessly -flawlessness -flawn -flawy -flax -flaxboard -flaxbush -flaxdrop -flaxen -flaxlike -flaxman -flaxseed -flaxtail -flaxweed -flaxwench -flaxwife -flaxwoman -flaxwort -flaxy -flay -flayer -flayflint -flea -fleabane -fleabite -fleadock -fleam -fleaseed -fleaweed -fleawood -fleawort -fleay -flebile -fleche -flechette -fleck -flecken -flecker -fleckiness -fleckled -fleckless -flecklessly -flecky -flecnodal -flecnode -flection -flectional -flectionless -flector -fled -fledge -fledgeless -fledgling -fledgy -flee -fleece -fleeceable -fleeced -fleeceflower -fleeceless -fleecelike -fleecer -fleech -fleechment -fleecily -fleeciness -fleecy -fleer -fleerer -fleering -fleeringly -fleet -fleeter -fleetful -fleeting -fleetingly -fleetingness -fleetings -fleetly -fleetness -fleetwing -flemish -flench -flense -flenser -flerry -flesh -fleshbrush -fleshed -fleshen -flesher -fleshful -fleshhood -fleshhook -fleshiness -fleshing -fleshings -fleshless -fleshlike -fleshlily -fleshliness -fleshly -fleshment -fleshmonger -fleshpot -fleshy -flet -fletch -fletcher -flether -fleuret -fleurettee -fleuronnee -fleury -flew -flewed -flewit -flews -flex -flexanimous -flexed -flexibility -flexible -flexibleness -flexibly -flexile -flexility -flexion -flexionless -flexor -flexuose -flexuosity -flexuous -flexuously -flexuousness -flexural -flexure -flexured -fley -fleyedly -fleyedness -fleyland -fleysome -flibbertigibbet -flicflac -flick -flicker -flickering -flickeringly -flickerproof -flickertail -flickery -flicky -flidder -flier -fligger -flight -flighted -flighter -flightful -flightily -flightiness -flighting -flightless -flightshot -flighty -flimflam -flimflammer -flimflammery -flimmer -flimp -flimsily -flimsiness -flimsy -flinch -flincher -flinching -flinchingly -flinder -flindosa -flindosy -fling -flinger -flingy -flinkite -flint -flinter -flinthearted -flintify -flintily -flintiness -flintless -flintlike -flintlock -flintwood -flintwork -flintworker -flinty -flioma -flip -flipe -flipjack -flippancy -flippant -flippantly -flippantness -flipper -flipperling -flippery -flirt -flirtable -flirtation -flirtational -flirtationless -flirtatious -flirtatiously -flirtatiousness -flirter -flirtigig -flirting -flirtingly -flirtish -flirtishness -flirtling -flirty -flisk -flisky -flit -flitch -flitchen -flite -flitfold -fliting -flitter -flitterbat -flittermouse -flittern -flitting -flittingly -flitwite -flivver -flix -flixweed -float -floatability -floatable -floatage -floatation -floatative -floatboard -floater -floatiness -floating -floatingly -floative -floatless -floatmaker -floatman -floatplane -floatsman -floatstone -floaty -flob -flobby -floc -floccillation -floccipend -floccose -floccosely -flocculable -flocculant -floccular -flocculate -flocculation -flocculator -floccule -flocculence -flocculency -flocculent -flocculently -flocculose -flocculus -floccus -flock -flocker -flocking -flockless -flocklike -flockman -flockmaster -flockowner -flockwise -flocky -flocoon -flodge -floe -floeberg -floey -flog -floggable -flogger -flogging -floggingly -flogmaster -flogster -flokite -flong -flood -floodable -floodage -floodboard -floodcock -flooded -flooder -floodgate -flooding -floodless -floodlet -floodlight -floodlighting -floodlike -floodmark -floodometer -floodproof -floodtime -floodwater -floodway -floodwood -floody -floor -floorage -floorcloth -floorer -floorhead -flooring -floorless -floorman -floorwalker -floorward -floorway -floorwise -floozy -flop -flophouse -flopover -flopper -floppers -floppily -floppiness -floppy -flopwing -flora -floral -floralize -florally -floramor -floran -florate -floreal -floreate -florence -florent -florentium -flores -florescence -florescent -floressence -floret -floreted -floretum -floriate -floriated -floriation -florican -floricin -floricultural -floriculturally -floriculture -floriculturist -florid -floridean -florideous -floridity -floridly -floridness -floriferous -floriferously -floriferousness -florification -floriform -florigen -florigenic -florigraphy -florikan -floriken -florilegium -florimania -florimanist -florin -floriparous -floripondio -floriscope -florist -floristic -floristically -floristics -floristry -florisugent -florivorous -floroon -floroscope -florula -florulent -flory -floscular -floscularian -floscule -flosculose -flosculous -flosh -floss -flosser -flossflower -flossification -flossing -flossy -flot -flota -flotage -flotant -flotation -flotative -flotilla -flotorial -flotsam -flounce -flouncey -flouncing -flounder -floundering -flounderingly -flour -flourish -flourishable -flourisher -flourishing -flourishingly -flourishment -flourishy -flourlike -floury -flouse -flout -flouter -flouting -floutingly -flow -flowable -flowage -flower -flowerage -flowered -flowerer -floweret -flowerful -flowerily -floweriness -flowering -flowerist -flowerless -flowerlessness -flowerlet -flowerlike -flowerpecker -flowerpot -flowerwork -flowery -flowing -flowingly -flowingness -flowmanostat -flowmeter -flown -flowoff -flu -fluate -fluavil -flub -flubdub -flubdubbery -flucan -fluctiferous -fluctigerous -fluctisonant -fluctisonous -fluctuability -fluctuable -fluctuant -fluctuate -fluctuation -fluctuosity -fluctuous -flue -flued -flueless -fluellen -fluellite -flueman -fluency -fluent -fluently -fluentness -fluer -fluework -fluey -fluff -fluffer -fluffily -fluffiness -fluffy -flugelman -fluible -fluid -fluidacetextract -fluidal -fluidally -fluidextract -fluidglycerate -fluidible -fluidic -fluidification -fluidifier -fluidify -fluidimeter -fluidism -fluidist -fluidity -fluidization -fluidize -fluidly -fluidness -fluidram -fluigram -fluitant -fluke -fluked -flukeless -flukeworm -flukewort -flukily -flukiness -fluking -fluky -flumdiddle -flume -flumerin -fluminose -flummadiddle -flummer -flummery -flummox -flummydiddle -flump -flung -flunk -flunker -flunkeydom -flunkeyhood -flunkeyish -flunkeyize -flunky -flunkydom -flunkyhood -flunkyish -flunkyism -flunkyistic -flunkyite -flunkyize -fluoaluminate -fluoaluminic -fluoarsenate -fluoborate -fluoboric -fluoborid -fluoboride -fluoborite -fluobromide -fluocarbonate -fluocerine -fluocerite -fluochloride -fluohydric -fluophosphate -fluor -fluoran -fluoranthene -fluorapatite -fluorate -fluorbenzene -fluorene -fluorenyl -fluoresage -fluoresce -fluorescein -fluorescence -fluorescent -fluorescigenic -fluorescigenous -fluorescin -fluorhydric -fluoric -fluoridate -fluoridation -fluoride -fluoridization -fluoridize -fluorimeter -fluorinate -fluorination -fluorindine -fluorine -fluorite -fluormeter -fluorobenzene -fluoroborate -fluoroform -fluoroformol -fluorogen -fluorogenic -fluorography -fluoroid -fluorometer -fluoroscope -fluoroscopic -fluoroscopy -fluorosis -fluorotype -fluorspar -fluoryl -fluosilicate -fluosilicic -fluotantalate -fluotantalic -fluotitanate -fluotitanic -fluozirconic -flurn -flurr -flurried -flurriedly -flurriment -flurry -flush -flushboard -flusher -flusherman -flushgate -flushing -flushingly -flushness -flushy -flusk -flusker -fluster -flusterate -flusteration -flusterer -flusterment -flustery -flustrine -flustroid -flustrum -flute -flutebird -fluted -flutelike -flutemouth -fluter -flutework -flutina -fluting -flutist -flutter -flutterable -flutteration -flutterer -fluttering -flutteringly -flutterless -flutterment -fluttersome -fluttery -fluty -fluvial -fluvialist -fluviatic -fluviatile -fluvicoline -fluvioglacial -fluviograph -fluviolacustrine -fluviology -fluviomarine -fluviometer -fluviose -fluvioterrestrial -fluviovolcanic -flux -fluxation -fluxer -fluxibility -fluxible -fluxibleness -fluxibly -fluxile -fluxility -fluxion -fluxional -fluxionally -fluxionary -fluxionist -fluxmeter -fluxroot -fluxweed -fly -flyable -flyaway -flyback -flyball -flybane -flybelt -flyblow -flyblown -flyboat -flyboy -flycatcher -flyeater -flyer -flyflap -flyflapper -flyflower -flying -flyingly -flyleaf -flyless -flyman -flyness -flypaper -flype -flyproof -flyspeck -flytail -flytier -flytrap -flyway -flyweight -flywheel -flywinch -flywort -foal -foalfoot -foalhood -foaly -foam -foambow -foamer -foamflower -foamily -foaminess -foaming -foamingly -foamless -foamlike -foamy -fob -focal -focalization -focalize -focally -focaloid -foci -focimeter -focimetry -focoids -focometer -focometry -focsle -focus -focusable -focuser -focusless -fod -fodda -fodder -fodderer -foddering -fodderless -foder -fodge -fodgel -fodient -foe -foehn -foehnlike -foeish -foeless -foelike -foeman -foemanship -foenngreek -foeship -foetalization -fog -fogbound -fogbow -fogdog -fogdom -fogeater -fogey -fogfruit -foggage -fogged -fogger -foggily -fogginess -foggish -foggy -foghorn -fogle -fogless -fogman -fogo -fogon -fogou -fogproof -fogram -fogramite -fogramity -fogscoffer -fogus -fogy -fogydom -fogyish -fogyism -fohat -foible -foil -foilable -foiler -foiling -foilsman -foining -foiningly -foison -foisonless -foist -foister -foistiness -foisty -foiter -fold -foldable -foldage -foldboat -foldcourse -folded -foldedly -folden -folder -folding -foldless -foldskirt -foldure -foldwards -foldy -fole -folgerite -folia -foliaceous -foliaceousness -foliage -foliaged -foliageous -folial -foliar -foliary -foliate -foliated -foliation -foliature -folie -foliicolous -foliiferous -foliiform -folio -foliobranch -foliobranchiate -foliocellosis -foliolate -foliole -folioliferous -foliolose -foliose -foliosity -foliot -folious -foliously -folium -folk -folkcraft -folkfree -folkland -folklore -folkloric -folklorish -folklorism -folklorist -folkloristic -folkmoot -folkmooter -folkmot -folkmote -folkmoter -folkright -folksiness -folksy -folkway -folky -folles -folletage -follicle -follicular -folliculate -folliculated -follicule -folliculin -folliculitis -folliculose -folliculosis -folliculous -folliful -follis -follow -followable -follower -followership -following -followingly -folly -follyproof -foment -fomentation -fomenter -fomes -fomites -fondak -fondant -fondish -fondle -fondler -fondlesome -fondlike -fondling -fondlingly -fondly -fondness -fondu -fondue -fonduk -fonly -fonnish -fono -fons -font -fontal -fontally -fontanel -fontange -fonted -fontful -fonticulus -fontinal -fontinalaceous -fontlet -foo -food -fooder -foodful -foodless -foodlessness -foodstuff -foody -foofaraw -fool -fooldom -foolery -fooless -foolfish -foolhardihood -foolhardily -foolhardiness -foolhardiship -foolhardy -fooling -foolish -foolishly -foolishness -foollike -foolocracy -foolproof -foolproofness -foolscap -foolship -fooner -fooster -foosterer -foot -footage -footback -football -footballer -footballist -footband -footblower -footboard -footboy -footbreadth -footbridge -footcloth -footed -footeite -footer -footfall -footfarer -footfault -footfolk -footful -footganger -footgear -footgeld -foothalt -foothill -foothold -foothook -foothot -footing -footingly -footings -footle -footler -footless -footlicker -footlight -footlights -footling -footlining -footlock -footmaker -footman -footmanhood -footmanry -footmanship -footmark -footnote -footnoted -footpace -footpad -footpaddery -footpath -footpick -footplate -footprint -footrail -footrest -footrill -footroom -footrope -foots -footscald -footslog -footslogger -footsore -footsoreness -footstalk -footstall -footstep -footstick -footstock -footstone -footstool -footwalk -footwall -footway -footwear -footwork -footworn -footy -fooyoung -foozle -foozler -fop -fopling -foppery -foppish -foppishly -foppishness -foppy -fopship -for -fora -forage -foragement -forager -foralite -foramen -foraminated -foramination -foraminifer -foraminiferal -foraminiferan -foraminiferous -foraminose -foraminous -foraminulate -foraminule -foraminulose -foraminulous -forane -foraneen -foraneous -forasmuch -foray -forayer -forb -forbade -forbar -forbathe -forbear -forbearable -forbearance -forbearant -forbearantly -forbearer -forbearing -forbearingly -forbearingness -forbesite -forbid -forbiddable -forbiddal -forbiddance -forbidden -forbiddenly -forbiddenness -forbidder -forbidding -forbiddingly -forbiddingness -forbit -forbled -forblow -forbore -forborne -forbow -forby -force -forceable -forced -forcedly -forcedness -forceful -forcefully -forcefulness -forceless -forcemeat -forcement -forceps -forcepslike -forcer -forchase -forche -forcibility -forcible -forcibleness -forcibly -forcing -forcingly -forcipate -forcipated -forcipes -forcipiform -forcipressure -forcipulate -forcleave -forconceit -ford -fordable -fordableness -fordays -fording -fordless -fordo -fordone -fordwine -fordy -fore -foreaccounting -foreaccustom -foreacquaint -foreact -foreadapt -foreadmonish -foreadvertise -foreadvice -foreadvise -foreallege -foreallot -foreannounce -foreannouncement -foreanswer -foreappoint -foreappointment -forearm -foreassign -foreassurance -forebackwardly -forebay -forebear -forebemoan -forebemoaned -forebespeak -forebitt -forebitten -forebitter -forebless -foreboard -forebode -forebodement -foreboder -foreboding -forebodingly -forebodingness -forebody -foreboot -forebowels -forebowline -forebrace -forebrain -forebreast -forebridge -foreburton -forebush -forecar -forecarriage -forecast -forecaster -forecasting -forecastingly -forecastle -forecastlehead -forecastleman -forecatching -forecatharping -forechamber -forechase -forechoice -forechoose -forechurch -forecited -foreclaw -foreclosable -foreclose -foreclosure -forecome -forecomingness -forecommend -foreconceive -foreconclude -forecondemn -foreconscious -foreconsent -foreconsider -forecontrive -forecool -forecooler -forecounsel -forecount -forecourse -forecourt -forecover -forecovert -foredate -foredawn -foreday -foredeck -foredeclare -foredecree -foredeep -foredefeated -foredefine -foredenounce -foredescribe -foredeserved -foredesign -foredesignment -foredesk -foredestine -foredestiny -foredetermination -foredetermine -foredevised -foredevote -forediscern -foredispose -foredivine -foredone -foredoom -foredoomer -foredoor -foreface -forefather -forefatherly -forefault -forefeel -forefeeling -forefeelingly -forefelt -forefield -forefigure -forefin -forefinger -forefit -foreflank -foreflap -foreflipper -forefoot -forefront -foregallery -foregame -foreganger -foregate -foregift -foregirth -foreglance -foregleam -foreglimpse -foreglow -forego -foregoer -foregoing -foregone -foregoneness -foreground -foreguess -foreguidance -forehalf -forehall -forehammer -forehand -forehanded -forehandedness -forehandsel -forehard -forehatch -forehatchway -forehead -foreheaded -forehear -forehearth -foreheater -forehill -forehinting -forehold -forehood -forehoof -forehook -foreign -foreigneering -foreigner -foreignership -foreignism -foreignization -foreignize -foreignly -foreignness -foreimagination -foreimagine -foreimpressed -foreimpression -foreinclined -foreinstruct -foreintend -foreiron -forejudge -forejudgment -forekeel -foreking -foreknee -foreknow -foreknowable -foreknower -foreknowing -foreknowingly -foreknowledge -forel -forelady -foreland -forelay -foreleech -foreleg -forelimb -forelive -forellenstein -forelock -forelook -foreloop -forelooper -foreloper -foremade -foreman -foremanship -foremarch -foremark -foremartyr -foremast -foremasthand -foremastman -foremean -foremeant -foremelt -foremention -forementioned -foremessenger -foremilk -foremisgiving -foremistress -foremost -foremostly -foremother -forename -forenamed -forenews -forenight -forenoon -forenote -forenoted -forenotice -forenotion -forensal -forensic -forensical -forensicality -forensically -foreordain -foreordainment -foreorder -foreordinate -foreordination -foreorlop -forepad -forepale -foreparents -forepart -forepassed -forepast -forepaw -forepayment -forepeak -foreperiod -forepiece -foreplace -foreplan -foreplanting -forepole -foreporch -forepossessed -forepost -forepredicament -forepreparation -foreprepare -forepretended -foreproduct -foreproffer -forepromise -forepromised -foreprovided -foreprovision -forepurpose -forequarter -forequoted -foreran -forerank -forereach -forereaching -foreread -forereading -forerecited -forereckon -forerehearsed -foreremembered -forereport -forerequest -forerevelation -forerib -forerigging -foreright -foreroom -foreroyal -forerun -forerunner -forerunnership -forerunnings -foresaddle -foresaid -foresail -foresay -forescene -forescent -foreschool -foreschooling -forescript -foreseason -foreseat -foresee -foreseeability -foreseeable -foreseeingly -foreseer -foreseize -foresend -foresense -foresentence -foreset -foresettle -foresettled -foreshadow -foreshadower -foreshaft -foreshank -foreshape -foresheet -foreshift -foreship -foreshock -foreshoe -foreshop -foreshore -foreshorten -foreshortening -foreshot -foreshoulder -foreshow -foreshower -foreshroud -foreside -foresight -foresighted -foresightedness -foresightful -foresightless -foresign -foresignify -foresin -foresing -foresinger -foreskin -foreskirt -foresleeve -foresound -forespeak -forespecified -forespeed -forespencer -forest -forestaff -forestage -forestair -forestal -forestall -forestaller -forestallment -forestarling -forestate -forestation -forestay -forestaysail -forestcraft -forested -foresteep -forestem -forestep -forester -forestership -forestful -forestial -forestick -forestine -forestish -forestless -forestlike -forestology -forestral -forestress -forestry -forestside -forestudy -forestwards -foresty -foresummer -foresummon -foresweat -foretack -foretackle -foretalk -foretalking -foretaste -foretaster -foretell -foretellable -foreteller -forethink -forethinker -forethought -forethoughted -forethoughtful -forethoughtfully -forethoughtfulness -forethoughtless -forethrift -foretime -foretimed -foretoken -foretold -foretop -foretopman -foretrace -foretrysail -foreturn -foretype -foretypified -foreuse -foreutter -forevalue -forever -forevermore -foreview -forevision -forevouch -forevouched -forevow -forewarm -forewarmer -forewarn -forewarner -forewarning -forewarningly -forewaters -foreween -foreweep -foreweigh -forewing -forewinning -forewisdom -forewish -forewoman -forewonted -foreword -foreworld -foreworn -forewritten -forewrought -foreyard -foreyear -forfairn -forfar -forfare -forfars -forfault -forfaulture -forfeit -forfeiter -forfeits -forfeiture -forfend -forficate -forficated -forfication -forficiform -forficulate -forfouchten -forfoughen -forfoughten -forgainst -forgather -forge -forgeability -forgeable -forged -forgedly -forgeful -forgeman -forger -forgery -forget -forgetful -forgetfully -forgetfulness -forgetive -forgetness -forgettable -forgetter -forgetting -forgettingly -forgie -forging -forgivable -forgivableness -forgivably -forgive -forgiveless -forgiveness -forgiver -forgiving -forgivingly -forgivingness -forgo -forgoer -forgot -forgotten -forgottenness -forgrow -forgrown -forhoo -forhooy -forhow -forinsec -forint -forisfamiliate -forisfamiliation -forjesket -forjudge -forjudger -fork -forkable -forkbeard -forked -forkedly -forkedness -forker -forkful -forkhead -forkiness -forkless -forklike -forkman -forksmith -forktail -forkwise -forky -forleft -forlet -forlorn -forlornity -forlornly -forlornness -form -formability -formable -formably -formagen -formagenic -formal -formalazine -formaldehyde -formaldehydesulphoxylate -formaldehydesulphoxylic -formaldoxime -formalesque -formalism -formalist -formalistic -formalith -formality -formalization -formalize -formalizer -formally -formalness -formamide -formamidine -formamido -formamidoxime -formanilide -formant -format -formate -formation -formational -formative -formatively -formativeness -formature -formazyl -forme -formed -formedon -formee -formel -formene -formenic -former -formeret -formerly -formerness -formful -formiate -formic -formican -formicarian -formicarioid -formicarium -formicaroid -formicary -formicate -formication -formicative -formicicide -formicid -formicide -formicine -formicivorous -formidability -formidable -formidableness -formidably -formin -forminate -forming -formless -formlessly -formlessness -formolite -formonitrile -formose -formoxime -formula -formulable -formulae -formulaic -formular -formularism -formularist -formularistic -formularization -formularize -formulary -formulate -formulation -formulator -formulatory -formule -formulism -formulist -formulistic -formulization -formulize -formulizer -formwork -formy -formyl -formylal -formylate -formylation -fornacic -fornaxid -fornenst -fornent -fornical -fornicate -fornicated -fornication -fornicator -fornicatress -fornicatrix -forniciform -forninst -fornix -forpet -forpine -forpit -forprise -forrad -forrard -forride -forrit -forritsome -forrue -forsake -forsaken -forsakenly -forsakenness -forsaker -forset -forslow -forsooth -forspeak -forspend -forspread -forsterite -forswear -forswearer -forsworn -forswornness -fort -fortalice -forte -fortescue -fortescure -forth -forthbring -forthbringer -forthcome -forthcomer -forthcoming -forthcomingness -forthcut -forthfare -forthfigured -forthgaze -forthgo -forthgoing -forthink -forthputting -forthright -forthrightly -forthrightness -forthrights -forthtell -forthteller -forthwith -forthy -forties -fortieth -fortifiable -fortification -fortifier -fortify -fortifying -fortifyingly -fortin -fortis -fortissimo -fortitude -fortitudinous -fortlet -fortnight -fortnightly -fortravail -fortread -fortress -fortuitism -fortuitist -fortuitous -fortuitously -fortuitousness -fortuity -fortunate -fortunately -fortunateness -fortune -fortuned -fortuneless -fortunetell -fortuneteller -fortunetelling -fortunite -forty -fortyfold -forum -forumize -forwander -forward -forwardal -forwardation -forwarder -forwarding -forwardly -forwardness -forwards -forwean -forweend -forwent -forwoden -forworden -fosh -fosie -fossa -fossage -fossane -fossarian -fosse -fossed -fossette -fossick -fossicker -fossiform -fossil -fossilage -fossilated -fossilation -fossildom -fossiled -fossiliferous -fossilification -fossilify -fossilism -fossilist -fossilizable -fossilization -fossilize -fossillike -fossilogist -fossilogy -fossilological -fossilologist -fossilology -fossor -fossorial -fossorious -fossula -fossulate -fossule -fossulet -fostell -foster -fosterable -fosterage -fosterer -fosterhood -fostering -fosteringly -fosterite -fosterland -fosterling -fostership -fostress -fot -fotch -fother -fotmal -fotui -fou -foud -foudroyant -fouette -fougade -fougasse -fought -foughten -foughty -foujdar -foujdary -foul -foulage -foulard -fouler -fouling -foulish -foully -foulmouthed -foulmouthedly -foulmouthedness -foulness -foulsome -foumart -foun -found -foundation -foundational -foundationally -foundationary -foundationed -foundationer -foundationless -foundationlessness -founder -founderous -foundership -foundery -founding -foundling -foundress -foundry -foundryman -fount -fountain -fountained -fountaineer -fountainhead -fountainless -fountainlet -fountainous -fountainously -fountainwise -fountful -fouquieriaceous -four -fourble -fourche -fourchee -fourcher -fourchette -fourchite -fourer -fourflusher -fourfold -fourling -fourpence -fourpenny -fourpounder -fourre -fourrier -fourscore -foursome -foursquare -foursquarely -foursquareness -fourstrand -fourteen -fourteener -fourteenfold -fourteenth -fourteenthly -fourth -fourther -fourthly -foussa -foute -fouter -fouth -fovea -foveal -foveate -foveated -foveation -foveiform -foveola -foveolarious -foveolate -foveolated -foveole -foveolet -fow -fowk -fowl -fowler -fowlerite -fowlery -fowlfoot -fowling -fox -foxbane -foxberry -foxchop -foxer -foxery -foxfeet -foxfinger -foxfish -foxglove -foxhole -foxhound -foxily -foxiness -foxing -foxish -foxlike -foxproof -foxship -foxskin -foxtail -foxtailed -foxtongue -foxwood -foxy -foy -foyaite -foyaitic -foyboat -foyer -foziness -fozy -fra -frab -frabbit -frabjous -frabjously -frabous -fracas -fracedinous -frache -frack -fractable -fractabling -fracted -fractile -fraction -fractional -fractionalism -fractionalize -fractionally -fractionary -fractionate -fractionating -fractionation -fractionator -fractionization -fractionize -fractionlet -fractious -fractiously -fractiousness -fractocumulus -fractonimbus -fractostratus -fractuosity -fracturable -fractural -fracture -fractureproof -frae -fraghan -fragile -fragilely -fragileness -fragility -fragment -fragmental -fragmentally -fragmentarily -fragmentariness -fragmentary -fragmentation -fragmented -fragmentist -fragmentitious -fragmentize -fragrance -fragrancy -fragrant -fragrantly -fragrantness -fraid -fraik -frail -frailejon -frailish -frailly -frailness -frailty -fraise -fraiser -framable -framableness -frambesia -frame -framea -frameable -frameableness -framed -frameless -framer -framesmith -framework -framing -frammit -frampler -frampold -franc -franchisal -franchise -franchisement -franchiser -francisc -francisca -francium -franco -francolin -francolite -frangent -frangibility -frangible -frangibleness -frangipane -frangipani -frangula -frangulic -frangulin -frangulinic -frank -frankability -frankable -frankalmoign -frankeniaceous -franker -frankfurter -frankhearted -frankheartedly -frankheartedness -frankincense -frankincensed -franking -franklandite -franklin -franklinite -frankly -frankmarriage -frankness -frankpledge -frantic -frantically -franticly -franticness -franzy -frap -frappe -frapping -frasco -frase -frasier -frass -frat -fratch -fratched -fratcheous -fratcher -fratchety -fratchy -frater -fraternal -fraternalism -fraternalist -fraternality -fraternally -fraternate -fraternation -fraternism -fraternity -fraternization -fraternize -fraternizer -fratery -fratority -fratricidal -fratricide -fratry -fraud -fraudful -fraudfully -fraudless -fraudlessly -fraudlessness -fraudproof -fraudulence -fraudulency -fraudulent -fraudulently -fraudulentness -fraughan -fraught -frawn -fraxetin -fraxin -fraxinella -fray -frayed -frayedly -frayedness -fraying -frayn -frayproof -fraze -frazer -frazil -frazzle -frazzling -freak -freakdom -freakery -freakful -freakily -freakiness -freakish -freakishly -freakishness -freaky -fream -freath -freck -frecken -freckened -frecket -freckle -freckled -freckledness -freckleproof -freckling -frecklish -freckly -frederik -fredricite -free -freeboard -freeboot -freebooter -freebootery -freebooting -freeborn -freed -freedman -freedom -freedwoman -freehand -freehanded -freehandedly -freehandedness -freehearted -freeheartedly -freeheartedness -freehold -freeholder -freeholdership -freeholding -freeing -freeish -freelage -freeloving -freelovism -freely -freeman -freemanship -freemartin -freemason -freemasonic -freemasonical -freemasonism -freemasonry -freeness -freer -freesilverism -freesilverite -freestanding -freestone -freet -freethinker -freethinking -freetrader -freety -freeward -freeway -freewheel -freewheeler -freewheeling -freewill -freewoman -freezable -freeze -freezer -freezing -freezingly -freibergite -freieslebenite -freight -freightage -freighter -freightless -freightment -freir -freit -freity -fremd -fremdly -fremdness -fremescence -fremescent -fremitus -frenal -frenate -frenched -frenchification -frenchify -frenching -frenetic -frenetical -frenetically -frenular -frenulum -frenum -frenzelite -frenzied -frenziedly -frenzy -frequence -frequency -frequent -frequentable -frequentage -frequentation -frequentative -frequenter -frequently -frequentness -frescade -fresco -frescoer -frescoist -fresh -freshen -freshener -freshet -freshhearted -freshish -freshly -freshman -freshmanhood -freshmanic -freshmanship -freshness -freshwoman -fresnel -fresno -fret -fretful -fretfully -fretfulness -fretless -fretsome -frett -frettage -frettation -frette -fretted -fretter -fretting -frettingly -fretty -fretum -fretways -fretwise -fretwork -fretworked -freyalite -friability -friable -friableness -friand -friandise -friar -friarbird -friarhood -friarling -friarly -friary -frib -fribble -fribbleism -fribbler -fribblery -fribbling -fribblish -fribby -fricandeau -fricandel -fricassee -frication -fricative -fricatrice -friction -frictionable -frictional -frictionally -frictionize -frictionless -frictionlessly -frictionproof -fridstool -fried -friedcake -friedelite -friedrichsdor -friend -friended -friendless -friendlessness -friendlike -friendlily -friendliness -friendliwise -friendly -friendship -frier -frieseite -frieze -friezer -friezy -frig -frigate -frigatoon -friggle -fright -frightable -frighten -frightenable -frightened -frightenedly -frightenedness -frightener -frightening -frighteningly -frighter -frightful -frightfully -frightfulness -frightless -frightment -frighty -frigid -frigidarium -frigidity -frigidly -frigidness -frigiferous -frigolabile -frigoric -frigorific -frigorifical -frigorify -frigorimeter -frigostable -frigotherapy -frijol -frijolillo -frijolito -frike -frill -frillback -frilled -friller -frillery -frillily -frilliness -frilling -frilly -frim -fringe -fringed -fringeflower -fringeless -fringelet -fringent -fringepod -fringillaceous -fringilliform -fringilline -fringilloid -fringing -fringy -fripperer -frippery -frisca -frisette -frisk -frisker -frisket -friskful -friskily -friskiness -frisking -friskingly -frisky -frisolee -frison -frist -frisure -frit -frith -frithborh -frithbot -frithles -frithsoken -frithstool -frithwork -fritillary -fritt -fritter -fritterer -frivol -frivoler -frivolism -frivolist -frivolity -frivolize -frivolous -frivolously -frivolousness -frixion -friz -frize -frizer -frizz -frizzer -frizzily -frizziness -frizzing -frizzle -frizzler -frizzly -frizzy -fro -frock -frocking -frockless -frocklike -frockmaker -froe -frog -frogbit -frogeater -frogeye -frogface -frogfish -frogflower -frogfoot -frogged -froggery -frogginess -frogging -froggish -froggy -froghood -froghopper -frogland -frogleaf -frogleg -froglet -froglike -frogling -frogman -frogmouth -frognose -frogskin -frogstool -frogtongue -frogwort -froise -frolic -frolicful -frolicker -frolicky -frolicly -frolicness -frolicsome -frolicsomely -frolicsomeness -from -fromward -fromwards -frond -frondage -fronded -frondent -frondesce -frondescence -frondescent -frondiferous -frondiform -frondigerous -frondivorous -frondlet -frondose -frondosely -frondous -front -frontad -frontage -frontager -frontal -frontalis -frontality -frontally -frontbencher -fronted -fronter -frontier -frontierlike -frontierman -frontiersman -fronting -frontingly -frontispiece -frontless -frontlessly -frontlessness -frontlet -frontoauricular -frontoethmoid -frontogenesis -frontolysis -frontomallar -frontomaxillary -frontomental -frontonasal -frontooccipital -frontoorbital -frontoparietal -frontopontine -frontosphenoidal -frontosquamosal -frontotemporal -frontozygomatic -frontpiece -frontsman -frontstall -frontward -frontways -frontwise -froom -frore -frory -frosh -frost -frostation -frostbird -frostbite -frostbow -frosted -froster -frostfish -frostflower -frostily -frostiness -frosting -frostless -frostlike -frostproof -frostproofing -frostroot -frostweed -frostwork -frostwort -frosty -frot -froth -frother -frothily -frothiness -frothing -frothless -frothsome -frothy -frotton -froufrou -frough -froughy -frounce -frounceless -frow -froward -frowardly -frowardness -frower -frowl -frown -frowner -frownful -frowning -frowningly -frownless -frowny -frowst -frowstily -frowstiness -frowsty -frowy -frowze -frowzily -frowziness -frowzled -frowzly -frowzy -froze -frozen -frozenhearted -frozenly -frozenness -fruchtschiefer -fructed -fructescence -fructescent -fructicultural -fructiculture -fructiferous -fructiferously -fructification -fructificative -fructifier -fructiform -fructify -fructiparous -fructivorous -fructose -fructoside -fructuary -fructuosity -fructuous -fructuously -fructuousness -frugal -frugalism -frugalist -frugality -frugally -frugalness -fruggan -frugivorous -fruit -fruitade -fruitage -fruitarian -fruitarianism -fruitcake -fruited -fruiter -fruiterer -fruiteress -fruitery -fruitful -fruitfullness -fruitfully -fruitgrower -fruitgrowing -fruitiness -fruiting -fruition -fruitist -fruitive -fruitless -fruitlessly -fruitlessness -fruitlet -fruitling -fruitstalk -fruittime -fruitwise -fruitwoman -fruitwood -fruitworm -fruity -frumentaceous -frumentarious -frumentation -frumenty -frump -frumpery -frumpily -frumpiness -frumpish -frumpishly -frumpishness -frumple -frumpy -frush -frustrate -frustrately -frustrater -frustration -frustrative -frustratory -frustule -frustulent -frustulose -frustum -frutescence -frutescent -fruticetum -fruticose -fruticous -fruticulose -frutify -fry -fryer -fu -fub -fubby -fubsy -fucaceous -fucate -fucation -fucatious -fuchsin -fuchsine -fuchsinophil -fuchsinophilous -fuchsite -fuchsone -fuci -fucinita -fuciphagous -fucoid -fucoidal -fucosan -fucose -fucous -fucoxanthin -fucus -fud -fuddle -fuddler -fuder -fudge -fudger -fudgy -fuel -fueler -fuelizer -fuerte -fuff -fuffy -fugacious -fugaciously -fugaciousness -fugacity -fugal -fugally -fuggy -fugient -fugitate -fugitation -fugitive -fugitively -fugitiveness -fugitivism -fugitivity -fugle -fugleman -fuglemanship -fugler -fugu -fugue -fuguist -fuidhir -fuirdays -fuji -fulciform -fulcral -fulcrate -fulcrum -fulcrumage -fulfill -fulfiller -fulfillment -fulgent -fulgently -fulgentness -fulgid -fulgide -fulgidity -fulgor -fulgorid -fulgorous -fulgural -fulgurant -fulgurantly -fulgurata -fulgurate -fulgurating -fulguration -fulgurator -fulgurite -fulgurous -fulham -fulicine -fuliginosity -fuliginous -fuliginously -fuliginousness -fuliguline -fulk -full -fullam -fullback -fuller -fullering -fullery -fullface -fullhearted -fulling -fullish -fullmouth -fullmouthed -fullmouthedly -fullness -fullom -fully -fulmar -fulmicotton -fulminancy -fulminant -fulminate -fulminating -fulmination -fulminator -fulminatory -fulmine -fulmineous -fulminic -fulminous -fulminurate -fulminuric -fulsome -fulsomely -fulsomeness -fulth -fulvene -fulvescent -fulvid -fulvidness -fulvous -fulwa -fulyie -fulzie -fum -fumacious -fumado -fumage -fumagine -fumarate -fumariaceous -fumaric -fumarine -fumarium -fumaroid -fumaroidal -fumarole -fumarolic -fumaryl -fumatorium -fumatory -fumble -fumbler -fumbling -fume -fumeless -fumer -fumeroot -fumet -fumette -fumewort -fumiduct -fumiferous -fumigant -fumigate -fumigation -fumigator -fumigatorium -fumigatory -fumily -fuminess -fuming -fumingly -fumistery -fumitory -fumose -fumosity -fumous -fumously -fumy -fun -funambulate -funambulation -funambulator -funambulatory -funambulic -funambulism -funambulist -funambulo -funariaceous -function -functional -functionalism -functionalist -functionality -functionalize -functionally -functionarism -functionary -functionate -functionation -functionize -functionless -fund -fundable -fundal -fundament -fundamental -fundamentalism -fundamentalist -fundamentality -fundamentally -fundamentalness -fundatorial -fundatrix -funded -funder -fundholder -fundi -fundic -fundiform -funditor -fundless -fundmonger -fundmongering -funds -funduline -fundungi -fundus -funebrial -funeral -funeralize -funerary -funereal -funereally -funest -fungaceous -fungal -fungate -fungation -fungi -fungian -fungibility -fungible -fungic -fungicidal -fungicide -fungicolous -fungiferous -fungiform -fungilliform -fungin -fungistatic -fungivorous -fungo -fungoid -fungoidal -fungological -fungologist -fungology -fungose -fungosity -fungous -fungus -fungused -funguslike -fungusy -funicle -funicular -funiculate -funicule -funiculitis -funiculus -funiform -funipendulous -funis -funk -funker -funkiness -funky -funmaker -funmaking -funnel -funneled -funnelform -funnellike -funnelwise -funnily -funniment -funniness -funny -funnyman -funori -funt -fur -furacious -furaciousness -furacity -fural -furaldehyde -furan -furanoid -furazan -furazane -furbelow -furbish -furbishable -furbisher -furbishment -furca -furcal -furcate -furcately -furcation -furcellate -furciferine -furciferous -furciform -furcula -furcular -furculum -furdel -furfur -furfuraceous -furfuraceously -furfural -furfuralcohol -furfuraldehyde -furfuramide -furfuran -furfuration -furfurine -furfuroid -furfurole -furfurous -furfuryl -furfurylidene -furiant -furibund -furied -furify -furil -furilic -furiosa -furiosity -furioso -furious -furiously -furiousness -furison -furl -furlable -furler -furless -furlong -furlough -furnace -furnacelike -furnaceman -furnacer -furnacite -furnage -furner -furnish -furnishable -furnished -furnisher -furnishing -furnishment -furniture -furnitureless -furodiazole -furoic -furoid -furoin -furole -furomethyl -furomonazole -furor -furore -furphy -furred -furrier -furriered -furriery -furrily -furriness -furring -furrow -furrower -furrowless -furrowlike -furrowy -furry -furstone -further -furtherance -furtherer -furtherest -furtherly -furthermore -furthermost -furthersome -furthest -furtive -furtively -furtiveness -furuncle -furuncular -furunculoid -furunculosis -furunculous -fury -furyl -furze -furzechat -furzed -furzeling -furzery -furzetop -furzy -fusain -fusarial -fusariose -fusariosis -fusarole -fusate -fusc -fuscescent -fuscin -fuscohyaline -fuscous -fuse -fuseboard -fused -fusee -fuselage -fuseplug -fusht -fusibility -fusible -fusibleness -fusibly -fusiform -fusil -fusilier -fusillade -fusilly -fusinist -fusion -fusional -fusionism -fusionist -fusionless -fusoid -fuss -fusser -fussification -fussify -fussily -fussiness -fussock -fussy -fust -fustanella -fustee -fusteric -fustet -fustian -fustianish -fustianist -fustianize -fustic -fustigate -fustigation -fustigator -fustigatory -fustilugs -fustily -fustin -fustiness -fustle -fusty -fusuma -fusure -fut -futchel -fute -futhorc -futile -futilely -futileness -futilitarian -futilitarianism -futility -futilize -futtermassel -futtock -futural -future -futureless -futureness -futuric -futurism -futurist -futuristic -futurition -futurity -futurize -futwa -fuye -fuze -fuzz -fuzzball -fuzzily -fuzziness -fuzzy -fyke -fylfot -fyrd -g -ga -gab -gabardine -gabbard -gabber -gabble -gabblement -gabbler -gabbro -gabbroic -gabbroid -gabbroitic -gabby -gabelle -gabelled -gabelleman -gabeller -gaberdine -gaberlunzie -gabgab -gabi -gabion -gabionade -gabionage -gabioned -gablatores -gable -gableboard -gablelike -gablet -gablewise -gablock -gaby -gad -gadabout -gadbee -gadbush -gadded -gadder -gaddi -gadding -gaddingly -gaddish -gaddishness -gade -gadfly -gadge -gadger -gadget -gadid -gadinine -gadling -gadman -gadoid -gadolinia -gadolinic -gadolinite -gadolinium -gadroon -gadroonage -gadsman -gaduin -gadwall -gaen -gaet -gaff -gaffe -gaffer -gaffle -gaffsman -gag -gagate -gage -gageable -gagee -gageite -gagelike -gager -gagership -gagger -gaggery -gaggle -gaggler -gagman -gagor -gagroot -gagtooth -gahnite -gaiassa -gaiety -gaily -gain -gainable -gainage -gainbirth -gaincall -gaincome -gaine -gainer -gainful -gainfully -gainfulness -gaining -gainless -gainlessness -gainliness -gainly -gains -gainsay -gainsayer -gainset -gainsome -gainspeaker -gainspeaking -gainst -gainstrive -gainturn -gaintwist -gainyield -gair -gairfish -gaisling -gait -gaited -gaiter -gaiterless -gaiting -gaize -gaj -gal -gala -galactagogue -galactagoguic -galactan -galactase -galactemia -galacthidrosis -galactic -galactidrosis -galactite -galactocele -galactodendron -galactodensimeter -galactogenetic -galactohemia -galactoid -galactolipide -galactolipin -galactolysis -galactolytic -galactoma -galactometer -galactometry -galactonic -galactopathy -galactophagist -galactophagous -galactophlebitis -galactophlysis -galactophore -galactophoritis -galactophorous -galactophthysis -galactophygous -galactopoiesis -galactopoietic -galactopyra -galactorrhea -galactorrhoea -galactoscope -galactose -galactoside -galactosis -galactostasis -galactosuria -galactotherapy -galactotrophy -galacturia -galagala -galah -galanas -galanga -galangin -galant -galantine -galany -galapago -galatea -galatotrophic -galaxian -galaxy -galban -galbanum -galbulus -gale -galea -galeage -galeate -galeated -galee -galeeny -galegine -galeid -galeiform -galempung -galena -galenic -galenical -galenite -galenobismutite -galenoid -galeoid -galeproof -galera -galericulate -galerum -galerus -galet -galewort -galey -galgal -gali -galilee -galimatias -galingale -galiongee -galiot -galipidine -galipine -galipoidin -galipoidine -galipoipin -galipot -gall -galla -gallacetophenone -gallah -gallanilide -gallant -gallantize -gallantly -gallantness -gallantry -gallate -gallature -gallberry -gallbush -galleass -galled -gallein -galleon -galler -gallerian -galleried -gallery -gallerylike -gallet -galley -galleylike -galleyman -galleyworm -gallflower -gallfly -galliambic -galliambus -galliard -galliardise -galliardly -galliardness -gallic -gallicola -gallicole -gallicolous -galliferous -gallification -galliform -galligaskin -gallimaufry -gallinacean -gallinaceous -gallinazo -galline -galling -gallingly -gallingness -gallinipper -gallinule -gallinuline -gallipot -gallisin -gallium -gallivant -gallivanter -gallivat -gallivorous -galliwasp -gallnut -gallocyanin -gallocyanine -galloflavine -galloglass -gallon -gallonage -galloner -galloon -gallooned -gallop -gallopade -galloper -galloping -galloptious -gallotannate -gallotannic -gallotannin -gallous -galloway -gallowglass -gallows -gallowsmaker -gallowsness -gallowsward -gallstone -galluses -gallweed -gallwort -gally -gallybagger -gallybeggar -gallycrow -galoot -galop -galore -galosh -galp -galravage -galravitch -galt -galuchat -galumph -galumptious -galuth -galvanic -galvanical -galvanically -galvanism -galvanist -galvanization -galvanize -galvanized -galvanizer -galvanocauterization -galvanocautery -galvanocontractility -galvanofaradization -galvanoglyph -galvanoglyphy -galvanograph -galvanographic -galvanography -galvanologist -galvanology -galvanolysis -galvanomagnet -galvanomagnetic -galvanomagnetism -galvanometer -galvanometric -galvanometrical -galvanometrically -galvanometry -galvanoplastic -galvanoplastical -galvanoplastically -galvanoplastics -galvanoplasty -galvanopsychic -galvanopuncture -galvanoscope -galvanoscopic -galvanoscopy -galvanosurgery -galvanotactic -galvanotaxis -galvanotherapy -galvanothermometer -galvanothermy -galvanotonic -galvanotropic -galvanotropism -galvayne -galvayning -galyac -galyak -galziekte -gam -gamahe -gamashes -gamasid -gamb -gamba -gambade -gambado -gambang -gambeer -gambeson -gambet -gambette -gambia -gambier -gambist -gambit -gamble -gambler -gamblesome -gamblesomeness -gambling -gambodic -gamboge -gambogian -gambogic -gamboised -gambol -gambrel -gambreled -gambroon -gamdeboo -game -gamebag -gameball -gamecock -gamecraft -gameful -gamekeeper -gamekeeping -gamelang -gameless -gamelike -gamelotte -gamely -gamene -gameness -gamesome -gamesomely -gamesomeness -gamester -gamestress -gametal -gametange -gametangium -gamete -gametic -gametically -gametocyst -gametocyte -gametogenesis -gametogenic -gametogenous -gametogeny -gametogonium -gametogony -gametoid -gametophagia -gametophore -gametophyll -gametophyte -gametophytic -gamic -gamily -gamin -gaminesque -gaminess -gaming -gaminish -gamma -gammacism -gammacismus -gammadion -gammarid -gammarine -gammaroid -gammation -gammelost -gammer -gammerel -gammerstang -gammick -gammock -gammon -gammoner -gammoning -gammy -gamobium -gamodesmic -gamodesmy -gamogenesis -gamogenetic -gamogenetical -gamogenetically -gamogony -gamomania -gamont -gamopetalous -gamophagia -gamophagy -gamophyllous -gamori -gamosepalous -gamostele -gamostelic -gamostely -gamotropic -gamotropism -gamp -gamphrel -gamut -gamy -gan -ganam -ganancial -ganch -gander -ganderess -gandergoose -gandermooner -ganderteeth -gandul -gandum -gandurah -gane -ganef -gang -ganga -gangan -gangava -gangboard -gangdom -gange -ganger -ganggang -ganging -gangism -gangland -ganglander -ganglia -gangliac -ganglial -gangliar -gangliasthenia -gangliate -gangliated -gangliectomy -gangliform -gangliitis -gangling -ganglioblast -gangliocyte -ganglioform -ganglioid -ganglioma -ganglion -ganglionary -ganglionate -ganglionectomy -ganglioneural -ganglioneure -ganglioneuroma -ganglioneuron -ganglionic -ganglionitis -ganglionless -ganglioplexus -gangly -gangman -gangmaster -gangplank -gangrel -gangrene -gangrenescent -gangrenous -gangsman -gangster -gangsterism -gangtide -gangue -gangway -gangwayman -ganister -ganja -ganner -gannet -ganocephalan -ganocephalous -ganodont -ganoid -ganoidal -ganoidean -ganoidian -ganoin -ganomalite -ganophyllite -ganosis -gansel -gansey -gansy -gant -ganta -gantang -gantlet -gantline -ganton -gantries -gantry -gantryman -gantsl -ganza -ganzie -gaol -gaolbird -gaoler -gap -gapa -gape -gaper -gapes -gapeseed -gapeworm -gaping -gapingly -gapingstock -gapo -gappy -gapy -gar -gara -garabato -garad -garage -garageman -garance -garancine -garapata -garava -garavance -garawi -garb -garbage -garbardine -garbel -garbell -garbill -garble -garbleable -garbler -garbless -garbling -garboard -garboil -garbure -garce -gardant -gardeen -garden -gardenable -gardencraft -gardened -gardener -gardenership -gardenesque -gardenful -gardenhood -gardenin -gardening -gardenize -gardenless -gardenlike -gardenly -gardenmaker -gardenmaking -gardenwards -gardenwise -gardeny -garderobe -gardevin -gardy -gardyloo -gare -garefowl -gareh -garetta -garewaite -garfish -garganey -garget -gargety -gargle -gargol -gargoyle -gargoyled -gargoyley -gargoylish -gargoylishly -gargoylism -garial -gariba -garibaldi -garish -garishly -garishness -garland -garlandage -garlandless -garlandlike -garlandry -garlandwise -garle -garlic -garlicky -garliclike -garlicmonger -garlicwort -garment -garmentless -garmentmaker -garmenture -garmentworker -garn -garnel -garner -garnerage -garnet -garnetberry -garneter -garnetiferous -garnets -garnett -garnetter -garnetwork -garnetz -garnice -garniec -garnierite -garnish -garnishable -garnished -garnishee -garnisheement -garnisher -garnishment -garnishry -garniture -garoo -garookuh -garrafa -garran -garret -garreted -garreteer -garretmaster -garrison -garrot -garrote -garroter -garruline -garrulity -garrulous -garrulously -garrulousness -garrupa -garse -garsil -garston -garten -garter -gartered -gartering -garterless -garth -garthman -garum -garvanzo -garvey -garvock -gas -gasbag -gascoigny -gasconade -gasconader -gascromh -gaseity -gaselier -gaseosity -gaseous -gaseousness -gasfiring -gash -gashes -gashful -gashliness -gashly -gasholder -gashouse -gashy -gasifiable -gasification -gasifier -gasiform -gasify -gasket -gaskin -gasking -gaskins -gasless -gaslight -gaslighted -gaslighting -gaslit -gaslock -gasmaker -gasman -gasogenic -gasoliery -gasoline -gasolineless -gasoliner -gasometer -gasometric -gasometrical -gasometry -gasp -gasparillo -gasper -gaspereau -gaspergou -gaspiness -gasping -gaspingly -gasproof -gaspy -gasser -gassiness -gassing -gassy -gast -gastaldite -gastaldo -gaster -gasteralgia -gasteromycete -gasteromycetous -gasteropod -gasterosteid -gasterosteiform -gasterosteoid -gasterotheca -gasterothecal -gasterotrichan -gasterozooid -gastight -gastightness -gastradenitis -gastraea -gastraead -gastraeal -gastraeum -gastral -gastralgia -gastralgic -gastralgy -gastraneuria -gastrasthenia -gastratrophia -gastrectasia -gastrectasis -gastrectomy -gastrelcosis -gastric -gastricism -gastrilegous -gastriloquial -gastriloquism -gastriloquist -gastriloquous -gastriloquy -gastrin -gastritic -gastritis -gastroadenitis -gastroadynamic -gastroalbuminorrhea -gastroanastomosis -gastroarthritis -gastroatonia -gastroatrophia -gastroblennorrhea -gastrocatarrhal -gastrocele -gastrocentrous -gastrocnemial -gastrocnemian -gastrocnemius -gastrocoel -gastrocolic -gastrocoloptosis -gastrocolostomy -gastrocolotomy -gastrocolpotomy -gastrocystic -gastrocystis -gastrodialysis -gastrodiaphanoscopy -gastrodidymus -gastrodisk -gastroduodenal -gastroduodenitis -gastroduodenoscopy -gastroduodenotomy -gastrodynia -gastroelytrotomy -gastroenteralgia -gastroenteric -gastroenteritic -gastroenteritis -gastroenteroanastomosis -gastroenterocolitis -gastroenterocolostomy -gastroenterological -gastroenterologist -gastroenterology -gastroenteroptosis -gastroenterostomy -gastroenterotomy -gastroepiploic -gastroesophageal -gastroesophagostomy -gastrogastrotomy -gastrogenital -gastrograph -gastrohelcosis -gastrohepatic -gastrohepatitis -gastrohydrorrhea -gastrohyperneuria -gastrohypertonic -gastrohysterectomy -gastrohysteropexy -gastrohysterorrhaphy -gastrohysterotomy -gastroid -gastrointestinal -gastrojejunal -gastrojejunostomy -gastrolater -gastrolatrous -gastrolienal -gastrolith -gastrologer -gastrological -gastrologist -gastrology -gastrolysis -gastrolytic -gastromalacia -gastromancy -gastromelus -gastromenia -gastromyces -gastromycosis -gastromyxorrhea -gastronephritis -gastronome -gastronomer -gastronomic -gastronomical -gastronomically -gastronomist -gastronomy -gastronosus -gastropancreatic -gastropancreatitis -gastroparalysis -gastroparesis -gastroparietal -gastropathic -gastropathy -gastroperiodynia -gastropexy -gastrophile -gastrophilism -gastrophilist -gastrophilite -gastrophrenic -gastrophthisis -gastroplasty -gastroplenic -gastropleuritis -gastroplication -gastropneumatic -gastropneumonic -gastropod -gastropodan -gastropodous -gastropore -gastroptosia -gastroptosis -gastropulmonary -gastropulmonic -gastropyloric -gastrorrhagia -gastrorrhaphy -gastrorrhea -gastroschisis -gastroscope -gastroscopic -gastroscopy -gastrosoph -gastrosopher -gastrosophy -gastrospasm -gastrosplenic -gastrostaxis -gastrostegal -gastrostege -gastrostenosis -gastrostomize -gastrostomy -gastrosuccorrhea -gastrotheca -gastrothecal -gastrotome -gastrotomic -gastrotomy -gastrotrichan -gastrotubotomy -gastrotympanites -gastrovascular -gastroxynsis -gastrozooid -gastrula -gastrular -gastrulate -gastrulation -gasworker -gasworks -gat -gata -gatch -gatchwork -gate -gateado -gateage -gated -gatehouse -gatekeeper -gateless -gatelike -gatemaker -gateman -gatepost -gater -gatetender -gateward -gatewards -gateway -gatewayman -gatewise -gatewoman -gateworks -gatewright -gather -gatherable -gatherer -gathering -gating -gator -gatter -gatteridge -gau -gaub -gauby -gauche -gauchely -gaucheness -gaucherie -gaud -gaudery -gaudful -gaudily -gaudiness -gaudless -gaudsman -gaudy -gaufer -gauffer -gauffered -gauffre -gaufre -gaufrette -gauge -gaugeable -gauger -gaugership -gauging -gaulding -gauleiter -gaulin -gault -gaulter -gaultherase -gaultherin -gaum -gaumish -gaumless -gaumlike -gaumy -gaun -gaunt -gaunted -gauntlet -gauntleted -gauntly -gauntness -gauntry -gaunty -gaup -gaupus -gaur -gaus -gauss -gaussage -gaussbergite -gauster -gausterer -gaut -gauteite -gauze -gauzelike -gauzewing -gauzily -gauziness -gauzy -gavall -gave -gavel -gaveler -gavelkind -gavelkinder -gavelman -gavelock -gavial -gavialoid -gavotte -gavyuti -gaw -gawby -gawcie -gawk -gawkhammer -gawkihood -gawkily -gawkiness -gawkish -gawkishly -gawkishness -gawky -gawm -gawn -gawney -gawsie -gay -gayal -gayatri -gaybine -gaycat -gaydiang -gayish -gaylussite -gayment -gayness -gaysome -gaywings -gayyou -gaz -gazabo -gazangabin -gaze -gazebo -gazee -gazehound -gazel -gazeless -gazelle -gazelline -gazement -gazer -gazettal -gazette -gazetteer -gazetteerage -gazetteerish -gazetteership -gazi -gazing -gazingly -gazingstock -gazogene -gazon -gazophylacium -gazy -gazzetta -ge -geadephagous -geal -gean -geanticlinal -geanticline -gear -gearbox -geared -gearing -gearksutite -gearless -gearman -gearset -gearshift -gearwheel -gease -geason -geat -gebang -gebanga -gebbie -gebur -geck -gecko -geckoid -geckotian -geckotid -geckotoid -ged -gedackt -gedanite -gedder -gedeckt -gedecktwork -gedrite -gee -geebong -geebung -geejee -geek -geelbec -geeldikkop -geelhout -geepound -geerah -geest -geet -geezer -gegg -geggee -gegger -geggery -gehlenite -geikielite -gein -geira -geisha -geison -geisotherm -geisothermal -geissospermin -geissospermine -geitjie -geitonogamous -geitonogamy -gekkonid -gekkonoid -gel -gelable -gelada -gelandejump -gelandelaufer -gelandesprung -gelastic -gelatification -gelatigenous -gelatin -gelatinate -gelatination -gelatined -gelatiniferous -gelatiniform -gelatinify -gelatinigerous -gelatinity -gelatinizability -gelatinizable -gelatinization -gelatinize -gelatinizer -gelatinobromide -gelatinochloride -gelatinoid -gelatinotype -gelatinous -gelatinously -gelatinousness -gelation -gelatose -geld -geldability -geldable -geldant -gelder -gelding -gelechiid -gelid -gelidity -gelidly -gelidness -gelignite -gelilah -gelinotte -gell -gelly -gelogenic -gelong -geloscopy -gelose -gelosin -gelotherapy -gelotometer -gelotoscopy -gelototherapy -gelsemic -gelsemine -gelseminic -gelseminine -gelt -gem -gematria -gematrical -gemauve -gemel -gemeled -gemellione -gemellus -geminate -geminated -geminately -gemination -geminative -geminiflorous -geminiform -geminous -gemitorial -gemless -gemlike -gemma -gemmaceous -gemmae -gemmate -gemmation -gemmative -gemmeous -gemmer -gemmiferous -gemmiferousness -gemmification -gemmiform -gemmily -gemminess -gemmipara -gemmipares -gemmiparity -gemmiparous -gemmiparously -gemmoid -gemmology -gemmula -gemmulation -gemmule -gemmuliferous -gemmy -gemot -gemsbok -gemsbuck -gemshorn -gemul -gemuti -gemwork -gen -gena -genal -genapp -genapper -genarch -genarcha -genarchaship -genarchship -gendarme -gendarmery -gender -genderer -genderless -gene -genealogic -genealogical -genealogically -genealogist -genealogize -genealogizer -genealogy -genear -geneat -genecologic -genecological -genecologically -genecologist -genecology -geneki -genep -genera -generability -generable -generableness -general -generalate -generalcy -generale -generalia -generalific -generalism -generalissima -generalissimo -generalist -generalistic -generality -generalizable -generalization -generalize -generalized -generalizer -generall -generally -generalness -generalship -generalty -generant -generate -generating -generation -generational -generationism -generative -generatively -generativeness -generator -generatrix -generic -generical -generically -genericalness -generification -generosity -generous -generously -generousness -geneserine -genesial -genesic -genesiology -genesis -genesiurgic -genet -genethliac -genethliacal -genethliacally -genethliacon -genethliacs -genethlialogic -genethlialogical -genethlialogy -genethlic -genetic -genetical -genetically -geneticism -geneticist -genetics -genetmoil -genetous -genetrix -geneva -genevoise -genial -geniality -genialize -genially -genialness -genian -genic -genicular -geniculate -geniculated -geniculately -geniculation -geniculum -genie -genii -genin -genioglossal -genioglossi -genioglossus -geniohyoglossal -geniohyoglossus -geniohyoid -geniolatry -genion -genioplasty -genip -genipa -genipap -genipapada -genisaro -genista -genistein -genital -genitalia -genitals -genitival -genitivally -genitive -genitocrural -genitofemoral -genitor -genitorial -genitory -genitourinary -geniture -genius -genizah -genizero -genoblast -genoblastic -genocidal -genocide -genoese -genom -genome -genomic -genonema -genos -genotype -genotypic -genotypical -genotypically -genovino -genre -genro -gens -genson -gent -genteel -genteelish -genteelism -genteelize -genteelly -genteelness -gentes -genthite -gentian -gentianaceous -gentianella -gentianic -gentianin -gentianose -gentianwort -gentile -gentiledom -gentilesse -gentilic -gentilism -gentilitial -gentilitian -gentilitious -gentility -gentilization -gentilize -gentiobiose -gentiopicrin -gentisein -gentisic -gentisin -gentle -gentlefolk -gentlehearted -gentleheartedly -gentleheartedness -gentlehood -gentleman -gentlemanhood -gentlemanism -gentlemanize -gentlemanlike -gentlemanlikeness -gentlemanliness -gentlemanly -gentlemanship -gentlemens -gentlemouthed -gentleness -gentlepeople -gentleship -gentlewoman -gentlewomanhood -gentlewomanish -gentlewomanlike -gentlewomanliness -gentlewomanly -gently -gentman -gentrice -gentry -genty -genu -genua -genual -genuclast -genuflect -genuflection -genuflector -genuflectory -genuflex -genuflexuous -genuine -genuinely -genuineness -genus -genyantrum -genyoplasty -genys -geo -geoaesthesia -geoagronomic -geobiologic -geobiology -geobiont -geobios -geoblast -geobotanic -geobotanical -geobotanist -geobotany -geocarpic -geocentric -geocentrical -geocentrically -geocentricism -geocerite -geochemical -geochemist -geochemistry -geochronic -geochronology -geochrony -geocoronium -geocratic -geocronite -geocyclic -geodaesia -geodal -geode -geodesic -geodesical -geodesist -geodesy -geodete -geodetic -geodetical -geodetically -geodetician -geodetics -geodiatropism -geodic -geodiferous -geodist -geoduck -geodynamic -geodynamical -geodynamics -geoethnic -geoffroyin -geoffroyine -geoform -geogenesis -geogenetic -geogenic -geogenous -geogeny -geoglyphic -geognosis -geognosist -geognost -geognostic -geognostical -geognostically -geognosy -geogonic -geogonical -geogony -geographer -geographic -geographical -geographically -geographics -geographism -geographize -geography -geohydrologist -geohydrology -geoid -geoidal -geoisotherm -geolatry -geologer -geologian -geologic -geological -geologically -geologician -geologist -geologize -geology -geomagnetic -geomagnetician -geomagnetics -geomagnetist -geomalic -geomalism -geomaly -geomance -geomancer -geomancy -geomant -geomantic -geomantical -geomantically -geometer -geometric -geometrical -geometrically -geometrician -geometricize -geometrid -geometriform -geometrine -geometrize -geometroid -geometry -geomoroi -geomorphic -geomorphist -geomorphogenic -geomorphogenist -geomorphogeny -geomorphological -geomorphology -geomorphy -geomyid -geonavigation -geonegative -geonoma -geonyctinastic -geonyctitropic -geoparallelotropic -geophagia -geophagism -geophagist -geophagous -geophagy -geophilid -geophilous -geophone -geophysical -geophysicist -geophysics -geophyte -geophytic -geoplagiotropism -geopolar -geopolitic -geopolitical -geopolitically -geopolitician -geopolitics -geoponic -geoponical -geoponics -geopony -geopositive -georama -georgiadesite -georgic -geoscopic -geoscopy -geoselenic -geosid -geoside -geosphere -geostatic -geostatics -geostrategic -geostrategist -geostrategy -geostrophic -geosynclinal -geosyncline -geotactic -geotactically -geotaxis -geotaxy -geotechnic -geotechnics -geotectology -geotectonic -geotectonics -geotherm -geothermal -geothermic -geothermometer -geotic -geotical -geotilla -geotonic -geotonus -geotropic -geotropically -geotropism -geotropy -geoty -gephyrean -gephyrocercal -gephyrocercy -ger -gerah -geraniaceous -geranial -geranic -geraniol -geranium -geranomorph -geranomorphic -geranyl -gerardia -gerastian -gerate -gerated -geratic -geratologic -geratologous -geratology -geraty -gerb -gerbe -gerbil -gercrow -gereagle -gerefa -gerenda -gerendum -gerent -gerenuk -gerfalcon -gerhardtite -geriatric -geriatrician -geriatrics -gerim -gerip -germ -germal -german -germander -germane -germanely -germaneness -germanic -germanious -germanite -germanity -germanium -germanization -germanize -germanous -germanyl -germarium -germen -germfree -germicidal -germicide -germifuge -germigenous -germin -germina -germinability -germinable -germinal -germinally -germinance -germinancy -germinant -germinate -germination -germinative -germinatively -germinator -germing -germinogony -germiparity -germless -germlike -germling -germon -germproof -germule -germy -gernitz -gerocomia -gerocomical -gerocomy -geromorphism -geront -gerontal -gerontes -gerontic -gerontine -gerontism -geronto -gerontocracy -gerontocrat -gerontocratic -gerontogeous -gerontology -gerontophilia -gerontoxon -gerrhosaurid -gerrymander -gerrymanderer -gers -gersdorffite -gersum -gerund -gerundial -gerundially -gerundival -gerundive -gerundively -gerusia -gervao -gerygone -geryonid -gesith -gesithcund -gesithcundman -gesneraceous -gesneria -gesneriaceous -gesning -gessamine -gesso -gest -gestalter -gestaltist -gestant -gestate -gestation -gestational -gestative -gestatorial -gestatorium -gestatory -geste -gested -gesten -gestening -gestic -gestical -gesticulacious -gesticulant -gesticular -gesticularious -gesticulate -gesticulation -gesticulative -gesticulatively -gesticulator -gesticulatory -gestion -gestning -gestural -gesture -gestureless -gesturer -get -geta -getah -getaway -gether -gethsemane -gethsemanic -getling -getpenny -gettable -getter -getting -getup -geum -gewgaw -gewgawed -gewgawish -gewgawry -gewgawy -gey -geyan -geyerite -geyser -geyseral -geyseric -geyserine -geyserish -geyserite -gez -ghafir -ghaist -ghalva -gharial -gharnao -gharry -ghastily -ghastlily -ghastliness -ghastly -ghat -ghatti -ghatwal -ghatwazi -ghazi -ghazism -ghebeta -ghee -gheleem -gherkin -ghetchoo -ghetti -ghetto -ghettoization -ghettoize -ghizite -ghoom -ghost -ghostcraft -ghostdom -ghoster -ghostess -ghostfish -ghostflower -ghosthood -ghostified -ghostily -ghostish -ghostism -ghostland -ghostless -ghostlet -ghostlify -ghostlike -ghostlily -ghostliness -ghostly -ghostmonger -ghostology -ghostship -ghostweed -ghostwrite -ghosty -ghoul -ghoulery -ghoulish -ghoulishly -ghoulishness -ghrush -ghurry -giant -giantesque -giantess -gianthood -giantish -giantism -giantize -giantkind -giantlike -giantly -giantry -giantship -giardia -giardiasis -giarra -giarre -gib -gibaro -gibbals -gibbed -gibber -gibbergunyah -gibberish -gibberose -gibberosity -gibbet -gibbetwise -gibblegabble -gibblegabbler -gibbles -gibbon -gibbose -gibbosity -gibbous -gibbously -gibbousness -gibbsite -gibbus -gibby -gibe -gibel -gibelite -giber -gibing -gibingly -gibleh -giblet -giblets -gibstaff -gibus -gid -giddap -giddea -giddify -giddily -giddiness -giddy -giddyberry -giddybrain -giddyhead -giddyish -gidgee -gie -gied -gien -gieseckite -gif -giffgaff -gift -gifted -giftedly -giftedness -giftie -giftless -giftling -giftware -gig -gigantean -gigantesque -gigantic -gigantical -gigantically -giganticidal -giganticide -giganticness -gigantism -gigantize -gigantoblast -gigantocyte -gigantolite -gigantological -gigantology -gigantomachy -gigantostracan -gigantostracous -gigartinaceous -gigback -gigelira -gigeria -gigerium -gigful -gigger -giggish -giggit -giggle -giggledom -gigglement -giggler -gigglesome -giggling -gigglingly -gigglish -giggly -giglet -gigliato -giglot -gigman -gigmaness -gigmanhood -gigmania -gigmanic -gigmanically -gigmanism -gigmanity -gignate -gignitive -gigolo -gigot -gigsman -gigster -gigtree -gigunu -gilbert -gilbertage -gilbertite -gild -gildable -gilded -gilden -gilder -gilding -gilguy -gilia -gilim -gill -gillaroo -gillbird -gilled -giller -gillflirt -gillhooter -gillie -gilliflirt -gilling -gilliver -gillotage -gillotype -gillstoup -gilly -gillyflower -gillygaupus -gilo -gilpy -gilravage -gilravager -gilse -gilsonite -gilt -giltcup -gilthead -gilttail -gim -gimbal -gimbaled -gimbaljawed -gimberjawed -gimble -gimcrack -gimcrackery -gimcrackiness -gimcracky -gimel -gimlet -gimleteyed -gimlety -gimmal -gimmer -gimmerpet -gimmick -gimp -gimped -gimper -gimping -gin -ging -ginger -gingerade -gingerberry -gingerbread -gingerbready -gingerin -gingerleaf -gingerline -gingerliness -gingerly -gingerness -gingernut -gingerol -gingerous -gingerroot -gingersnap -gingerspice -gingerwork -gingerwort -gingery -gingham -ginghamed -gingili -gingiva -gingivae -gingival -gingivalgia -gingivectomy -gingivitis -gingivoglossitis -gingivolabial -ginglyform -ginglymoarthrodia -ginglymoarthrodial -ginglymodian -ginglymoid -ginglymoidal -ginglymostomoid -ginglymus -ginglyni -ginhouse -gink -ginkgo -ginkgoaceous -ginned -ginner -ginners -ginnery -ginney -ginning -ginnle -ginny -ginseng -ginward -gio -giobertite -giornata -giornatate -gip -gipon -gipper -gipser -gipsire -gipsyweed -giraffe -giraffesque -giraffine -giraffoid -girandola -girandole -girasol -girasole -girba -gird -girder -girderage -girderless -girding -girdingly -girdle -girdlecake -girdlelike -girdler -girdlestead -girdling -girdlingly -girl -girleen -girlery -girlfully -girlhood -girlie -girliness -girling -girlish -girlishly -girlishness -girlism -girllike -girly -girn -girny -giro -giroflore -girouette -girouettism -girr -girse -girsh -girsle -girt -girth -girtline -gisarme -gish -gisla -gisler -gismondine -gismondite -gist -git -gitaligenin -gitalin -gith -gitonin -gitoxigenin -gitoxin -gittern -gittith -giustina -give -giveable -giveaway -given -givenness -giver -givey -giving -gizz -gizzard -gizzen -gizzern -glabella -glabellae -glabellar -glabellous -glabellum -glabrate -glabrescent -glabrous -glace -glaceed -glaceing -glaciable -glacial -glacialism -glacialist -glacialize -glacially -glaciaria -glaciarium -glaciate -glaciation -glacier -glaciered -glacieret -glacierist -glacification -glacioaqueous -glaciolacustrine -glaciological -glaciologist -glaciology -glaciomarine -glaciometer -glacionatant -glacis -glack -glad -gladden -gladdener -gladdon -gladdy -glade -gladelike -gladeye -gladful -gladfully -gladfulness -gladhearted -gladiate -gladiator -gladiatorial -gladiatorism -gladiatorship -gladiatrix -gladify -gladii -gladiola -gladiolar -gladiole -gladioli -gladiolus -gladius -gladkaite -gladless -gladly -gladness -gladsome -gladsomely -gladsomeness -glady -glaga -glaieul -glaik -glaiket -glaiketness -glair -glaireous -glairiness -glairy -glaister -glaive -glaived -glaked -glaky -glam -glamberry -glamorize -glamorous -glamorously -glamour -glamoury -glance -glancer -glancing -glancingly -gland -glandaceous -glandarious -glandered -glanderous -glanders -glandes -glandiferous -glandiform -glandless -glandlike -glandular -glandularly -glandule -glanduliferous -glanduliform -glanduligerous -glandulose -glandulosity -glandulous -glandulousness -glans -glar -glare -glareless -glareole -glareous -glareproof -glareworm -glarily -glariness -glaring -glaringly -glaringness -glarry -glary -glaserite -glashan -glass -glassen -glasser -glasses -glassfish -glassful -glasshouse -glassie -glassily -glassine -glassiness -glassless -glasslike -glassmaker -glassmaking -glassman -glassophone -glassrope -glassteel -glassware -glassweed -glasswork -glassworker -glassworking -glassworks -glasswort -glassy -glauberite -glaucescence -glaucescent -glaucin -glaucine -glaucochroite -glaucodot -glaucolite -glaucoma -glaucomatous -glauconiferous -glauconite -glauconitic -glauconitization -glaucophane -glaucophanite -glaucophanization -glaucophanize -glaucophyllous -glaucosuria -glaucous -glaucously -glaum -glaumrie -glaur -glaury -glaver -glaze -glazed -glazen -glazer -glazework -glazier -glaziery -glazily -glaziness -glazing -glazy -gleam -gleamily -gleaminess -gleaming -gleamingly -gleamless -gleamy -glean -gleanable -gleaner -gleaning -gleary -gleba -glebal -glebe -glebeless -glebous -glede -gledy -glee -gleed -gleeful -gleefully -gleefulness -gleeishly -gleek -gleemaiden -gleeman -gleesome -gleesomely -gleesomeness -gleet -gleety -gleewoman -gleg -glegly -glegness -glen -glenohumeral -glenoid -glenoidal -glent -glessite -gleyde -glia -gliadin -glial -glib -glibbery -glibly -glibness -glidder -gliddery -glide -glideless -glideness -glider -gliderport -glidewort -gliding -glidingly -gliff -gliffing -glime -glimmer -glimmering -glimmeringly -glimmerite -glimmerous -glimmery -glimpse -glimpser -glink -glint -glioma -gliomatous -gliosa -gliosis -gliriform -glirine -glisk -glisky -glissade -glissader -glissando -glissette -glisten -glistening -glisteningly -glister -glisteringly -glitter -glitterance -glittering -glitteringly -glittersome -glittery -gloam -gloaming -gloat -gloater -gloating -gloatingly -global -globally -globate -globated -globe -globed -globefish -globeflower -globeholder -globelet -globiferous -globigerine -globin -globoid -globose -globosely -globoseness -globosite -globosity -globosphaerite -globous -globously -globousness -globular -globulariaceous -globularity -globularly -globularness -globule -globulet -globulicidal -globulicide -globuliferous -globuliform -globulimeter -globulin -globulinuria -globulite -globulitic -globuloid -globulolysis -globulose -globulous -globulousness -globulysis -globy -glochid -glochideous -glochidia -glochidial -glochidian -glochidiate -glochidium -glochis -glockenspiel -gloea -gloeal -gloeocapsoid -gloeosporiose -glom -glome -glomerate -glomeration -glomeroporphyritic -glomerular -glomerulate -glomerule -glomerulitis -glomerulonephritis -glomerulose -glomerulus -glommox -glomus -glonoin -glonoine -gloom -gloomful -gloomfully -gloomily -gloominess -glooming -gloomingly -gloomless -gloomth -gloomy -glop -gloppen -glor -glore -gloriation -gloriette -glorifiable -glorification -glorifier -glorify -gloriole -gloriosity -glorious -gloriously -gloriousness -glory -gloryful -glorying -gloryingly -gloryless -gloss -glossa -glossagra -glossal -glossalgia -glossalgy -glossanthrax -glossarial -glossarially -glossarian -glossarist -glossarize -glossary -glossate -glossator -glossatorial -glossectomy -glossed -glosser -glossic -glossily -glossiness -glossing -glossingly -glossist -glossitic -glossitis -glossless -glossmeter -glossocarcinoma -glossocele -glossocoma -glossocomon -glossodynamometer -glossodynia -glossoepiglottic -glossoepiglottidean -glossograph -glossographer -glossographical -glossography -glossohyal -glossoid -glossokinesthetic -glossolabial -glossolabiolaryngeal -glossolabiopharyngeal -glossolalia -glossolalist -glossolaly -glossolaryngeal -glossological -glossologist -glossology -glossolysis -glossoncus -glossopalatine -glossopalatinus -glossopathy -glossopetra -glossophagine -glossopharyngeal -glossopharyngeus -glossophorous -glossophytia -glossoplasty -glossoplegia -glossopode -glossopodium -glossoptosis -glossopyrosis -glossorrhaphy -glossoscopia -glossoscopy -glossospasm -glossosteresis -glossotomy -glossotype -glossy -glost -glottal -glottalite -glottalize -glottic -glottid -glottidean -glottis -glottiscope -glottogonic -glottogonist -glottogony -glottologic -glottological -glottologist -glottology -glout -glove -gloveless -glovelike -glovemaker -glovemaking -glover -gloveress -glovey -gloving -glow -glower -glowerer -glowering -gloweringly -glowfly -glowing -glowingly -glowworm -gloy -gloze -glozing -glozingly -glub -glucase -glucemia -glucid -glucide -glucidic -glucina -glucine -glucinic -glucinium -glucinum -gluck -glucofrangulin -glucokinin -glucolipid -glucolipide -glucolipin -glucolipine -glucolysis -glucosaemia -glucosamine -glucosan -glucosane -glucosazone -glucose -glucosemia -glucosic -glucosid -glucosidal -glucosidase -glucoside -glucosidic -glucosidically -glucosin -glucosine -glucosone -glucosuria -glucuronic -glue -glued -gluemaker -gluemaking -gluepot -gluer -gluey -glueyness -glug -gluish -gluishness -glum -gluma -glumaceous -glumal -glume -glumiferous -glumly -glummy -glumness -glumose -glumosity -glump -glumpily -glumpiness -glumpish -glumpy -glunch -glusid -gluside -glut -glutamic -glutamine -glutaminic -glutaric -glutathione -glutch -gluteal -glutelin -gluten -glutenin -glutenous -gluteofemoral -gluteoinguinal -gluteoperineal -gluteus -glutin -glutinate -glutination -glutinative -glutinize -glutinose -glutinosity -glutinous -glutinously -glutinousness -glutition -glutoid -glutose -glutter -gluttery -glutting -gluttingly -glutton -gluttoness -gluttonish -gluttonism -gluttonize -gluttonous -gluttonously -gluttonousness -gluttony -glyceraldehyde -glycerate -glyceric -glyceride -glycerin -glycerinate -glycerination -glycerine -glycerinize -glycerite -glycerize -glycerizin -glycerizine -glycerogel -glycerogelatin -glycerol -glycerolate -glycerole -glycerolize -glycerophosphate -glycerophosphoric -glycerose -glyceroxide -glyceryl -glycid -glycide -glycidic -glycidol -glycine -glycinin -glycocholate -glycocholic -glycocin -glycocoll -glycogelatin -glycogen -glycogenesis -glycogenetic -glycogenic -glycogenize -glycogenolysis -glycogenous -glycogeny -glycohaemia -glycohemia -glycol -glycolaldehyde -glycolate -glycolic -glycolide -glycolipid -glycolipide -glycolipin -glycolipine -glycoluric -glycoluril -glycolyl -glycolylurea -glycolysis -glycolytic -glycolytically -glyconic -glyconin -glycoproteid -glycoprotein -glycosaemia -glycose -glycosemia -glycosin -glycosine -glycosuria -glycosuric -glycuresis -glycuronic -glycyl -glycyphyllin -glycyrrhizin -glyoxal -glyoxalase -glyoxalic -glyoxalin -glyoxaline -glyoxim -glyoxime -glyoxyl -glyoxylic -glyph -glyphic -glyphograph -glyphographer -glyphographic -glyphography -glyptic -glyptical -glyptician -glyptodont -glyptodontoid -glyptograph -glyptographer -glyptographic -glyptography -glyptolith -glyptological -glyptologist -glyptology -glyptotheca -glyster -gmelinite -gnabble -gnaphalioid -gnar -gnarl -gnarled -gnarliness -gnarly -gnash -gnashingly -gnat -gnatcatcher -gnatflower -gnathal -gnathalgia -gnathic -gnathidium -gnathion -gnathism -gnathite -gnathitis -gnathobase -gnathobasic -gnathometer -gnathonic -gnathonical -gnathonically -gnathonism -gnathonize -gnathophorous -gnathoplasty -gnathopod -gnathopodite -gnathopodous -gnathostegite -gnathostomatous -gnathostome -gnathostomous -gnathotheca -gnatling -gnatproof -gnatsnap -gnatsnapper -gnatter -gnatty -gnatworm -gnaw -gnawable -gnawer -gnawing -gnawingly -gnawn -gneiss -gneissic -gneissitic -gneissoid -gneissose -gneissy -gnetaceous -gnocchetti -gnome -gnomed -gnomesque -gnomic -gnomical -gnomically -gnomide -gnomish -gnomist -gnomologic -gnomological -gnomologist -gnomology -gnomon -gnomonic -gnomonical -gnomonics -gnomonological -gnomonologically -gnomonology -gnosiological -gnosiology -gnosis -gnostic -gnostical -gnostically -gnosticity -gnosticize -gnosticizer -gnostology -gnu -go -goa -goad -goadsman -goadster -goaf -goal -goalage -goalee -goalie -goalkeeper -goalkeeping -goalless -goalmouth -goanna -goat -goatbeard -goatbrush -goatbush -goatee -goateed -goatfish -goatherd -goatherdess -goatish -goatishly -goatishness -goatland -goatlike -goatling -goatly -goatroot -goatsbane -goatsbeard -goatsfoot -goatskin -goatstone -goatsucker -goatweed -goaty -goave -gob -goback -goban -gobang -gobbe -gobber -gobbet -gobbin -gobbing -gobble -gobbledygook -gobbler -gobby -gobelin -gobernadora -gobi -gobiesocid -gobiesociform -gobiid -gobiiform -gobioid -goblet -gobleted -gobletful -goblin -gobline -goblinesque -goblinish -goblinism -goblinize -goblinry -gobmouthed -gobo -gobonated -gobony -gobstick -goburra -goby -gobylike -gocart -god -godchild -goddard -goddaughter -godded -goddess -goddesshood -goddessship -goddikin -goddize -gode -godet -godfather -godfatherhood -godfathership -godhead -godhood -godkin -godless -godlessly -godlessness -godlet -godlike -godlikeness -godlily -godliness -godling -godly -godmaker -godmaking -godmamma -godmother -godmotherhood -godmothership -godown -godpapa -godparent -godsend -godship -godson -godsonship -godwit -goeduck -goel -goelism -goer -goes -goetia -goetic -goetical -goety -goff -goffer -goffered -gofferer -goffering -goffle -gog -gogga -goggan -goggle -goggled -goggler -gogglers -goggly -goglet -gogo -goi -goiabada -going -goitcho -goiter -goitered -goitral -goitrogen -goitrogenic -goitrous -gol -gola -golach -goladar -golandaas -golandause -gold -goldbeater -goldbeating -goldbrick -goldbricker -goldbug -goldcrest -goldcup -golden -goldenback -goldeneye -goldenfleece -goldenhair -goldenknop -goldenlocks -goldenly -goldenmouthed -goldenness -goldenpert -goldenrod -goldenseal -goldentop -goldenwing -golder -goldfielder -goldfinch -goldfinny -goldfish -goldflower -goldhammer -goldhead -goldie -goldilocks -goldin -goldish -goldless -goldlike -goldseed -goldsinny -goldsmith -goldsmithery -goldsmithing -goldspink -goldstone -goldtail -goldtit -goldwater -goldweed -goldwork -goldworker -goldy -golee -golem -golf -golfdom -golfer -goli -goliard -goliardery -goliardic -goliath -goliathize -golkakra -golland -gollar -golliwogg -golly -goloe -golpe -gomari -gomart -gomashta -gomavel -gombay -gombeen -gombeenism -gombroon -gomer -gomeral -gomlah -gommelin -gomphodont -gomphosis -gomuti -gon -gonad -gonadal -gonadial -gonadic -gonadotropic -gonadotropin -gonaduct -gonagra -gonakie -gonal -gonalgia -gonangial -gonangium -gonapod -gonapophysal -gonapophysial -gonapophysis -gonarthritis -gondang -gondite -gondola -gondolet -gondolier -gone -goneness -goneoclinic -gonepoiesis -gonepoietic -goner -gonesome -gonfalcon -gonfalonier -gonfalonierate -gonfaloniership -gonfanon -gong -gongman -gongoristic -gonia -goniac -gonial -goniale -goniatite -goniatitic -goniatitid -goniatitoid -gonid -gonidangium -gonidia -gonidial -gonidic -gonidiferous -gonidiogenous -gonidioid -gonidiophore -gonidiose -gonidiospore -gonidium -gonimic -gonimium -gonimolobe -gonimous -goniocraniometry -goniometer -goniometric -goniometrical -goniometrically -goniometry -gonion -goniostat -goniotropous -gonitis -gonium -gonnardite -gonne -gonoblast -gonoblastic -gonoblastidial -gonoblastidium -gonocalycine -gonocalyx -gonocheme -gonochorism -gonochorismal -gonochorismus -gonochoristic -gonococcal -gonococcic -gonococcoid -gonococcus -gonocoel -gonocyte -gonoecium -gonomere -gonomery -gonophore -gonophoric -gonophorous -gonoplasm -gonopoietic -gonorrhea -gonorrheal -gonorrheic -gonosomal -gonosome -gonosphere -gonostyle -gonotheca -gonothecal -gonotokont -gonotome -gonotype -gonozooid -gony -gonyalgia -gonydeal -gonydial -gonyocele -gonyoncus -gonys -gonystylaceous -gonytheca -goo -goober -good -goodeniaceous -goodhearted -goodheartedly -goodheartedness -gooding -goodish -goodishness -goodlihead -goodlike -goodliness -goodly -goodman -goodmanship -goodness -goods -goodsome -goodwife -goodwill -goodwillit -goodwilly -goody -goodyear -goodyish -goodyism -goodyness -goodyship -goof -goofer -goofily -goofiness -goofy -googly -googol -googolplex -googul -gook -gool -goolah -gools -gooma -goon -goondie -goonie -goosander -goose -goosebeak -gooseberry -goosebill -goosebird -goosebone -gooseboy -goosecap -goosefish -gooseflower -goosefoot -goosegirl -goosegog -gooseherd -goosehouse -gooselike -goosemouth -gooseneck -goosenecked -gooserumped -goosery -goosetongue -gooseweed -goosewing -goosewinged -goosish -goosishly -goosishness -goosy -gopher -gopherberry -gopherroot -gopherwood -gopura -gor -gora -goracco -goral -goran -gorb -gorbal -gorbellied -gorbelly -gorbet -gorble -gorblimy -gorce -gorcock -gorcrow -gordiacean -gordiaceous -gordolobo -gordunite -gore -gorer -gorevan -gorfly -gorge -gorgeable -gorged -gorgedly -gorgelet -gorgeous -gorgeously -gorgeousness -gorger -gorgerin -gorget -gorgeted -gorglin -gorgonacean -gorgonaceous -gorgonesque -gorgoneum -gorgoniacean -gorgoniaceous -gorgonian -gorgonin -gorgonize -gorgonlike -gorhen -goric -gorilla -gorillaship -gorillian -gorilline -gorilloid -gorily -goriness -goring -gorlin -gorlois -gormandize -gormandizer -gormaw -gormed -gorra -gorraf -gorry -gorse -gorsebird -gorsechat -gorsedd -gorsehatch -gorsy -gory -gos -gosain -goschen -gosh -goshawk -goshenite -goslarite -goslet -gosling -gosmore -gospel -gospeler -gospelist -gospelize -gospellike -gospelly -gospelmonger -gospelwards -gospodar -gosport -gossamer -gossamered -gossamery -gossampine -gossan -gossaniferous -gossard -gossip -gossipdom -gossipee -gossiper -gossiphood -gossipiness -gossiping -gossipingly -gossipmonger -gossipred -gossipry -gossipy -gossoon -gossy -gossypine -gossypol -gossypose -got -gotch -gote -gothite -gotra -gotraja -gotten -gouaree -gouge -gouger -goujon -goulash -goumi -goup -gourami -gourd -gourde -gourdful -gourdhead -gourdiness -gourdlike -gourdworm -gourdy -gourmand -gourmander -gourmanderie -gourmandism -gourmet -gourmetism -gourounut -goustrous -gousty -gout -goutify -goutily -goutiness -goutish -goutte -goutweed -goutwort -gouty -gove -govern -governability -governable -governableness -governably -governail -governance -governess -governessdom -governesshood -governessy -governing -governingly -government -governmental -governmentalism -governmentalist -governmentalize -governmentally -governmentish -governor -governorate -governorship -gowan -gowdnie -gowf -gowfer -gowiddie -gowk -gowked -gowkedly -gowkedness -gowkit -gowl -gown -gownlet -gownsman -gowpen -goy -goyazite -goyim -goyin -goyle -gozell -gozzard -gra -grab -grabbable -grabber -grabble -grabbler -grabbling -grabbots -graben -grabhook -grabouche -grace -graceful -gracefully -gracefulness -graceless -gracelessly -gracelessness -gracelike -gracer -gracilariid -gracile -gracileness -gracilescent -gracilis -gracility -graciosity -gracioso -gracious -graciously -graciousness -grackle -grad -gradable -gradal -gradate -gradation -gradational -gradationally -gradationately -gradative -gradatively -gradatory -graddan -grade -graded -gradefinder -gradely -grader -gradgrind -gradient -gradienter -gradin -gradine -grading -gradiometer -gradiometric -gradometer -gradual -gradualism -gradualist -gradualistic -graduality -gradually -gradualness -graduand -graduate -graduated -graduateship -graduatical -graduating -graduation -graduator -gradus -graff -graffage -graffer -graffito -grafship -graft -graftage -graftdom -grafted -grafter -grafting -graftonite -graftproof -graham -grahamite -grail -grailer -grailing -grain -grainage -grained -grainedness -grainer -grainering -grainery -grainfield -graininess -graining -grainland -grainless -grainman -grainsick -grainsickness -grainsman -grainways -grainy -graip -graisse -graith -grallatorial -grallatory -grallic -gralline -gralloch -gram -grama -gramarye -gramashes -grame -gramenite -gramicidin -graminaceous -gramineal -gramineous -gramineousness -graminicolous -graminiferous -graminifolious -graminiform -graminin -graminivore -graminivorous -graminological -graminology -graminous -grammalogue -grammar -grammarian -grammarianism -grammarless -grammatic -grammatical -grammatically -grammaticalness -grammaticaster -grammaticism -grammaticize -grammatics -grammatist -grammatistical -grammatite -grammatolator -grammatolatry -gramme -gramoches -gramophone -gramophonic -gramophonical -gramophonically -gramophonist -gramp -grampa -grampus -granada -granadilla -granadillo -granage -granary -granate -granatum -granch -grand -grandam -grandame -grandaunt -grandchild -granddad -granddaddy -granddaughter -granddaughterly -grandee -grandeeism -grandeeship -grandesque -grandeur -grandeval -grandfather -grandfatherhood -grandfatherish -grandfatherless -grandfatherly -grandfathership -grandfer -grandfilial -grandiloquence -grandiloquent -grandiloquently -grandiloquous -grandiose -grandiosely -grandiosity -grandisonant -grandisonous -grandly -grandma -grandmaternal -grandmother -grandmotherhood -grandmotherism -grandmotherliness -grandmotherly -grandnephew -grandness -grandniece -grandpa -grandparent -grandparentage -grandparental -grandpaternal -grandsire -grandson -grandsonship -grandstand -grandstander -granduncle -grane -grange -granger -grangerism -grangerite -grangerization -grangerize -grangerizer -graniform -granilla -granite -granitelike -graniteware -granitic -granitical -graniticoline -granitiferous -granitification -granitiform -granitite -granitization -granitize -granitoid -granivore -granivorous -granjeno -grank -grannom -granny -grannybush -grano -granoblastic -granodiorite -granogabbro -granolite -granolith -granolithic -granomerite -granophyre -granophyric -granose -granospherite -grant -grantable -grantedly -grantee -granter -grantor -granula -granular -granularity -granularly -granulary -granulate -granulated -granulater -granulation -granulative -granulator -granule -granulet -granuliferous -granuliform -granulite -granulitic -granulitis -granulitization -granulitize -granulize -granuloadipose -granulocyte -granuloma -granulomatous -granulometric -granulosa -granulose -granulous -granza -granzita -grape -graped -grapeflower -grapefruit -grapeful -grapeless -grapelet -grapelike -grapenuts -graperoot -grapery -grapeshot -grapeskin -grapestalk -grapestone -grapevine -grapewise -grapewort -graph -graphalloy -graphic -graphical -graphically -graphicalness -graphicly -graphicness -graphics -graphiological -graphiologist -graphiology -graphite -graphiter -graphitic -graphitization -graphitize -graphitoid -graphitoidal -graphologic -graphological -graphologist -graphology -graphomania -graphomaniac -graphometer -graphometric -graphometrical -graphometry -graphomotor -graphophone -graphophonic -graphorrhea -graphoscope -graphospasm -graphostatic -graphostatical -graphostatics -graphotype -graphotypic -graphy -graping -grapnel -grappa -grapple -grappler -grappling -grapsoid -graptolite -graptolitic -graptomancy -grapy -grasp -graspable -grasper -grasping -graspingly -graspingness -graspless -grass -grassant -grassation -grassbird -grasschat -grasscut -grasscutter -grassed -grasser -grasset -grassflat -grassflower -grasshop -grasshopper -grasshopperdom -grasshopperish -grasshouse -grassiness -grassing -grassland -grassless -grasslike -grassman -grassnut -grassplot -grassquit -grasswards -grassweed -grasswidowhood -grasswork -grassworm -grassy -grat -grate -grateful -gratefully -gratefulness -grateless -grateman -grater -gratewise -grather -graticulate -graticulation -graticule -gratification -gratified -gratifiedly -gratifier -gratify -gratifying -gratifyingly -gratility -gratillity -gratinate -grating -gratiolin -gratiosolin -gratis -gratitude -gratten -grattoir -gratuitant -gratuitous -gratuitously -gratuitousness -gratuity -gratulant -gratulate -gratulation -gratulatorily -gratulatory -graupel -gravamen -gravamina -grave -graveclod -gravecloth -graveclothes -graved -gravedigger -gravegarth -gravel -graveless -gravelike -graveling -gravelish -gravelliness -gravelly -gravelroot -gravelstone -gravelweed -gravely -gravemaker -gravemaking -graveman -gravemaster -graven -graveness -graveolence -graveolency -graveolent -graver -graveship -graveside -gravestead -gravestone -graveward -gravewards -graveyard -gravic -gravicembalo -gravid -gravidity -gravidly -gravidness -gravigrade -gravimeter -gravimetric -gravimetrical -gravimetrically -gravimetry -graving -gravitate -gravitater -gravitation -gravitational -gravitationally -gravitative -gravitometer -gravity -gravure -gravy -grawls -gray -grayback -graybeard -graycoat -grayfish -grayfly -grayhead -grayish -graylag -grayling -grayly -graymalkin -graymill -grayness -graypate -graywacke -grayware -graywether -grazable -graze -grazeable -grazer -grazier -grazierdom -graziery -grazing -grazingly -grease -greasebush -greasehorn -greaseless -greaselessness -greaseproof -greaseproofness -greaser -greasewood -greasily -greasiness -greasy -great -greatcoat -greatcoated -greaten -greater -greathead -greatheart -greathearted -greatheartedness -greatish -greatly -greatmouthed -greatness -greave -greaved -greaves -grebe -grece -gree -greed -greedily -greediness -greedless -greedsome -greedy -greedygut -greedyguts -green -greenable -greenage -greenalite -greenback -greenbark -greenbone -greenbrier -greencoat -greener -greenery -greeney -greenfinch -greenfish -greengage -greengill -greengrocer -greengrocery -greenhead -greenheaded -greenheart -greenhearted -greenhew -greenhide -greenhood -greenhorn -greenhornism -greenhouse -greening -greenish -greenishness -greenkeeper -greenkeeping -greenlandite -greenleek -greenless -greenlet -greenling -greenly -greenness -greenockite -greenovite -greenroom -greensand -greensauce -greenshank -greensick -greensickness -greenside -greenstone -greenstuff -greensward -greenswarded -greentail -greenth -greenuk -greenweed -greenwing -greenwithe -greenwood -greenwort -greeny -greenyard -greet -greeter -greeting -greetingless -greetingly -greffier -greffotome -gregal -gregale -gregaloid -gregarian -gregarianism -gregarine -gregarinidal -gregariniform -gregarinosis -gregarinous -gregarious -gregariously -gregariousness -gregaritic -grege -greggle -grego -greige -grein -greisen -gremial -gremlin -grenade -grenadier -grenadierial -grenadierly -grenadiership -grenadin -grenadine -gressorial -gressorious -greund -grew -grewhound -grey -greyhound -greyly -greyness -gribble -grice -grid -griddle -griddlecake -griddler -gride -gridelin -gridiron -griece -grieced -grief -griefful -grieffully -griefless -grieflessness -grieshoch -grievance -grieve -grieved -grievedly -griever -grieveship -grieving -grievingly -grievous -grievously -grievousness -griff -griffade -griffado -griffaun -griffe -griffin -griffinage -griffinesque -griffinhood -griffinish -griffinism -griffithite -griffon -griffonage -griffonne -grift -grifter -grig -griggles -grignet -grigri -grihastha -grihyasutra -grike -grill -grillade -grillage -grille -grilled -griller -grillroom -grillwork -grilse -grim -grimace -grimacer -grimacier -grimacing -grimacingly -grimalkin -grime -grimful -grimgribber -grimily -griminess -grimliness -grimly -grimme -grimmiaceous -grimmish -grimness -grimp -grimy -grin -grinagog -grinch -grind -grindable -grinder -grinderman -grindery -grinding -grindingly -grindle -grindstone -gringo -gringolee -gringophobia -grinner -grinning -grinningly -grinny -grintern -grip -gripe -gripeful -griper -gripgrass -griphite -griping -gripingly -gripless -gripman -gripment -grippal -grippe -gripper -grippiness -gripping -grippingly -grippingness -gripple -grippleness -grippotoxin -grippy -gripsack -gripy -griquaite -gris -grisaille -grisard -griseous -grisette -grisettish -grisgris -griskin -grisliness -grisly -grison -grisounite -grisoutine -grissens -grissons -grist -gristbite -grister -gristle -gristliness -gristly -gristmill -gristmiller -gristmilling -gristy -grit -grith -grithbreach -grithman -gritless -gritrock -grits -gritstone -gritten -gritter -grittily -grittiness -grittle -gritty -grivet -grivna -grizzle -grizzled -grizzler -grizzly -grizzlyman -groan -groaner -groanful -groaning -groaningly -groat -groats -groatsworth -grobian -grobianism -grocer -grocerdom -groceress -grocerly -grocerwise -grocery -groceryman -groff -grog -groggery -groggily -grogginess -groggy -grogram -grogshop -groin -groined -groinery -groining -gromatic -gromatics -grommet -gromwell -groom -groomer -groomish -groomishly -groomlet -groomling -groomsman -groomy -groop -groose -groot -grooty -groove -grooveless -groovelike -groover -grooverhead -grooviness -grooving -groovy -grope -groper -groping -gropingly -gropple -grorudite -gros -grosbeak -groschen -groser -groset -grosgrain -grosgrained -gross -grossart -grossen -grosser -grossification -grossify -grossly -grossness -grosso -grossulaceous -grossular -grossularia -grossulariaceous -grossularious -grossularite -grosz -groszy -grot -grotesque -grotesquely -grotesqueness -grotesquerie -grothine -grothite -grottesco -grotto -grottoed -grottolike -grottowork -grouch -grouchily -grouchiness -grouchingly -grouchy -grouf -grough -ground -groundable -groundably -groundage -groundberry -groundbird -grounded -groundedly -groundedness -groundenell -grounder -groundflower -grounding -groundless -groundlessly -groundlessness -groundliness -groundling -groundly -groundman -groundmass -groundneedle -groundnut -groundplot -grounds -groundsel -groundsill -groundsman -groundward -groundwood -groundwork -groundy -group -groupage -groupageness -grouped -grouper -grouping -groupist -grouplet -groupment -groupwise -grouse -grouseberry -grouseless -grouser -grouseward -grousewards -grousy -grout -grouter -grouthead -grouts -grouty -grouze -grove -groved -grovel -groveler -groveless -groveling -grovelingly -grovelings -grovy -grow -growable -growan -growed -grower -growing -growingly -growingupness -growl -growler -growlery -growling -growlingly -growly -grown -grownup -growse -growsome -growth -growthful -growthiness -growthless -growthy -grozart -grozet -grr -grub -grubbed -grubber -grubbery -grubbily -grubbiness -grubby -grubhood -grubless -grubroot -grubs -grubstake -grubstaker -grubstreet -grubworm -grudge -grudgeful -grudgefully -grudgekin -grudgeless -grudger -grudgery -grudging -grudgingly -grudgingness -grudgment -grue -gruel -grueler -grueling -gruelly -gruesome -gruesomely -gruesomeness -gruff -gruffily -gruffiness -gruffish -gruffly -gruffness -gruffs -gruffy -grufted -grugru -gruiform -gruine -grum -grumble -grumbler -grumblesome -grumbling -grumblingly -grumbly -grume -grumly -grummel -grummels -grummet -grummeter -grumness -grumose -grumous -grumousness -grump -grumph -grumphie -grumphy -grumpily -grumpiness -grumpish -grumpy -grun -grundy -grunerite -gruneritization -grunion -grunt -grunter -grunting -gruntingly -gruntle -gruntled -gruntling -grush -grushie -gruss -grutch -grutten -gryde -grylli -gryllid -gryllos -gryllus -grypanian -gryposis -grysbok -guaba -guacacoa -guachamaca -guacharo -guachipilin -guacimo -guacin -guaco -guaconize -guadalcazarite -guaiac -guaiacol -guaiacolize -guaiaconic -guaiacum -guaiaretic -guaiasanol -guaiol -guaka -guama -guan -guana -guanabana -guanabano -guanaco -guanajuatite -guanamine -guanase -guanay -guaneide -guango -guanidine -guanidopropionic -guaniferous -guanine -guanize -guano -guanophore -guanosine -guanyl -guanylic -guao -guapena -guapilla -guapinol -guar -guara -guarabu -guaracha -guaraguao -guarana -guarani -guaranine -guarantee -guaranteeship -guarantor -guarantorship -guaranty -guarapucu -guard -guardable -guardant -guarded -guardedly -guardedness -guardeen -guarder -guardfish -guardful -guardfully -guardhouse -guardian -guardiancy -guardianess -guardianless -guardianly -guardianship -guarding -guardingly -guardless -guardlike -guardo -guardrail -guardroom -guardship -guardsman -guardstone -guariba -guarinite -guarneri -guarri -guasa -guatambu -guativere -guava -guavaberry -guavina -guayaba -guayabi -guayabo -guayacan -guayroto -guayule -guaza -gubbertush -gubbo -gubernacula -gubernacular -gubernaculum -gubernative -gubernator -gubernatorial -gubernatrix -guberniya -gucki -gud -gudame -guddle -gude -gudebrother -gudefather -gudemother -gudesake -gudesakes -gudesire -gudewife -gudge -gudgeon -gudget -gudok -gue -guebucu -guejarite -guemal -guenepe -guenon -guepard -guerdon -guerdonable -guerdoner -guerdonless -guereza -guernsey -guernseyed -guerrilla -guerrillaism -guerrillaship -guess -guessable -guesser -guessing -guessingly -guesswork -guessworker -guest -guestchamber -guesten -guester -guesthouse -guesting -guestive -guestless -guestling -guestmaster -guestship -guestwise -gufa -guff -guffaw -guffer -guffin -guffy -gugal -guggle -gugglet -guglet -guglia -guglio -gugu -guhr -guib -guiba -guidable -guidage -guidance -guide -guideboard -guidebook -guidebookish -guidecraft -guideless -guideline -guidepost -guider -guideress -guidership -guideship -guideway -guidman -guidon -guidwilly -guige -guignol -guijo -guild -guilder -guildhall -guildic -guildry -guildship -guildsman -guile -guileful -guilefully -guilefulness -guileless -guilelessly -guilelessness -guilery -guillemet -guillemot -guillevat -guilloche -guillochee -guillotinade -guillotine -guillotinement -guillotiner -guillotinism -guillotinist -guilt -guiltily -guiltiness -guiltless -guiltlessly -guiltlessness -guiltsick -guilty -guily -guimbard -guimpe -guinea -guipure -guisard -guise -guiser -guising -guitar -guitarfish -guitarist -guitermanite -guitguit -gul -gula -gulae -gulaman -gulancha -gular -gularis -gulch -gulden -guldengroschen -gule -gules -gulf -gulflike -gulfside -gulfwards -gulfweed -gulfy -gulgul -gulinula -gulinulae -gulinular -gulix -gull -gullery -gullet -gulleting -gullibility -gullible -gullibly -gullion -gullish -gullishly -gullishness -gully -gullyhole -gulonic -gulose -gulosity -gulp -gulper -gulpin -gulping -gulpingly -gulpy -gulravage -gulsach -gum -gumbo -gumboil -gumbotil -gumby -gumchewer -gumdigger -gumdigging -gumdrop -gumfield -gumflower -gumihan -gumless -gumlike -gumly -gumma -gummage -gummaker -gummaking -gummata -gummatous -gummed -gummer -gummiferous -gumminess -gumming -gummite -gummose -gummosis -gummosity -gummous -gummy -gump -gumphion -gumption -gumptionless -gumptious -gumpus -gumshoe -gumweed -gumwood -gun -guna -gunate -gunation -gunbearer -gunboat -gunbright -gunbuilder -guncotton -gundi -gundy -gunebo -gunfire -gunflint -gunge -gunhouse -gunite -gunj -gunk -gunl -gunless -gunlock -gunmaker -gunmaking -gunman -gunmanship -gunnage -gunne -gunnel -gunner -gunneress -gunnership -gunnery -gunnies -gunning -gunnung -gunny -gunocracy -gunong -gunpaper -gunplay -gunpowder -gunpowderous -gunpowdery -gunpower -gunrack -gunreach -gunrunner -gunrunning -gunsel -gunshop -gunshot -gunsman -gunsmith -gunsmithery -gunsmithing -gunster -gunstick -gunstock -gunstocker -gunstocking -gunstone -gunter -gunwale -gunyah -gunyang -gunyeh -gup -guppy -guptavidya -gur -gurdfish -gurdle -gurdwara -gurge -gurgeon -gurgeons -gurges -gurgitation -gurgle -gurglet -gurgling -gurglingly -gurgly -gurgoyle -gurgulation -gurjun -gurk -gurl -gurly -gurnard -gurnet -gurnetty -gurniad -gurr -gurrah -gurry -gurt -guru -guruship -gush -gusher -gushet -gushily -gushiness -gushing -gushingly -gushingness -gushy -gusla -gusle -guss -gusset -gussie -gust -gustable -gustation -gustative -gustativeness -gustatory -gustful -gustfully -gustfulness -gustily -gustiness -gustless -gusto -gustoish -gusty -gut -gutless -gutlike -gutling -gutt -gutta -guttable -guttate -guttated -guttatim -guttation -gutte -gutter -gutterblood -guttering -gutterlike -gutterling -gutterman -guttersnipe -guttersnipish -gutterspout -gutterwise -guttery -gutti -guttide -guttie -guttiferal -guttiferous -guttiform -guttiness -guttle -guttler -guttula -guttulae -guttular -guttulate -guttule -guttural -gutturalism -gutturality -gutturalization -gutturalize -gutturally -gutturalness -gutturize -gutturonasal -gutturopalatal -gutturopalatine -gutturotetany -guttus -gutty -gutweed -gutwise -gutwort -guvacine -guvacoline -guy -guydom -guyer -guytrash -guz -guze -guzmania -guzzle -guzzledom -guzzler -gwag -gweduc -gweed -gweeon -gwely -gwine -gwyniad -gyascutus -gyle -gym -gymel -gymkhana -gymnanthous -gymnasia -gymnasial -gymnasiarch -gymnasiarchy -gymnasiast -gymnasic -gymnasium -gymnast -gymnastic -gymnastically -gymnastics -gymnemic -gymnetrous -gymnic -gymnical -gymnics -gymnite -gymnoblastic -gymnocarpic -gymnocarpous -gymnoceratous -gymnocidium -gymnodiniaceous -gymnodont -gymnogen -gymnogenous -gymnoglossate -gymnogynous -gymnolaematous -gymnopaedic -gymnophiona -gymnoplast -gymnorhinal -gymnosoph -gymnosophist -gymnosophy -gymnosperm -gymnospermal -gymnospermic -gymnospermism -gymnospermy -gymnospore -gymnosporous -gymnostomous -gymnotid -gymnotokous -gymnure -gymnurine -gympie -gyn -gynaecea -gynaeceum -gynaecocoenic -gynander -gynandrarchic -gynandrarchy -gynandria -gynandrian -gynandrism -gynandroid -gynandromorph -gynandromorphic -gynandromorphism -gynandromorphous -gynandromorphy -gynandrophore -gynandrosporous -gynandrous -gynandry -gynantherous -gynarchic -gynarchy -gyne -gynecic -gynecidal -gynecide -gynecocentric -gynecocracy -gynecocrat -gynecocratic -gynecocratical -gynecoid -gynecolatry -gynecologic -gynecological -gynecologist -gynecology -gynecomania -gynecomastia -gynecomastism -gynecomasty -gynecomazia -gynecomorphous -gyneconitis -gynecopathic -gynecopathy -gynecophore -gynecophoric -gynecophorous -gynecotelic -gynecratic -gyneocracy -gyneolater -gyneolatry -gynephobia -gynethusia -gyniatrics -gyniatry -gynic -gynics -gynobase -gynobaseous -gynobasic -gynocardia -gynocardic -gynocracy -gynocratic -gynodioecious -gynodioeciously -gynodioecism -gynoecia -gynoecium -gynogenesis -gynomonecious -gynomonoeciously -gynomonoecism -gynophagite -gynophore -gynophoric -gynosporangium -gynospore -gynostegia -gynostegium -gynostemium -gyp -gype -gypper -gyps -gypseian -gypseous -gypsiferous -gypsine -gypsiologist -gypsite -gypsography -gypsologist -gypsology -gypsophila -gypsophilous -gypsophily -gypsoplast -gypsous -gypster -gypsum -gypsy -gypsydom -gypsyesque -gypsyfy -gypsyhead -gypsyhood -gypsyish -gypsyism -gypsylike -gypsyry -gypsyweed -gypsywise -gypsywort -gyral -gyrally -gyrant -gyrate -gyration -gyrational -gyrator -gyratory -gyre -gyrencephalate -gyrencephalic -gyrencephalous -gyrene -gyrfalcon -gyri -gyric -gyrinid -gyro -gyrocar -gyroceracone -gyroceran -gyrochrome -gyrocompass -gyrogonite -gyrograph -gyroidal -gyroidally -gyrolite -gyrolith -gyroma -gyromagnetic -gyromancy -gyromele -gyrometer -gyron -gyronny -gyrophoric -gyropigeon -gyroplane -gyroscope -gyroscopic -gyroscopically -gyroscopics -gyrose -gyrostabilizer -gyrostat -gyrostatic -gyrostatically -gyrostatics -gyrous -gyrovagi -gyrovagues -gyrowheel -gyrus -gyte -gytling -gyve -h -ha -haab -haaf -habanera -habble -habdalah -habeas -habena -habenal -habenar -habendum -habenula -habenular -haberdash -haberdasher -haberdasheress -haberdashery -haberdine -habergeon -habilable -habilatory -habile -habiliment -habilimentation -habilimented -habilitate -habilitation -habilitator -hability -habille -habit -habitability -habitable -habitableness -habitably -habitacle -habitacule -habitally -habitan -habitance -habitancy -habitant -habitat -habitate -habitation -habitational -habitative -habited -habitual -habituality -habitualize -habitually -habitualness -habituate -habituation -habitude -habitudinal -habitue -habitus -habnab -haboob -habronemiasis -habronemic -habu -habutai -habutaye -hache -hachure -hacienda -hack -hackamatak -hackamore -hackbarrow -hackberry -hackbolt -hackbush -hackbut -hackbuteer -hacked -hackee -hacker -hackery -hackin -hacking -hackingly -hackle -hackleback -hackler -hacklog -hackly -hackmack -hackman -hackmatack -hackney -hackneyed -hackneyer -hackneyism -hackneyman -hacksaw -hacksilber -hackster -hackthorn -hacktree -hackwood -hacky -had -hadbot -hadden -haddie -haddo -haddock -haddocker -hade -hadentomoid -hading -hadj -hadji -hadland -hadrome -hadromycosis -hadrosaur -haec -haecceity -haem -haemaspectroscope -haematherm -haemathermal -haemathermous -haematinon -haematinum -haematite -haematobranchiate -haematocryal -haematophiline -haematorrhachis -haematosepsis -haematothermal -haematoxylic -haematoxylin -haemoconcentration -haemodilution -haemodoraceous -haemoglobin -haemogram -haemonchiasis -haemonchosis -haemony -haemophile -haemorrhage -haemorrhagia -haemorrhagic -haemorrhoid -haemorrhoidal -haemosporid -haemosporidian -haemuloid -haeremai -haet -haff -haffet -haffkinize -haffle -hafiz -hafnium -hafnyl -haft -hafter -hag -hagberry -hagboat -hagborn -hagbush -hagdon -hageen -hagfish -haggada -haggaday -haggadic -haggadical -haggadist -haggadistic -haggard -haggardly -haggardness -hagged -hagger -haggis -haggish -haggishly -haggishness -haggister -haggle -haggler -haggly -haggy -hagi -hagia -hagiarchy -hagiocracy -hagiographal -hagiographer -hagiographic -hagiographical -hagiographist -hagiography -hagiolater -hagiolatrous -hagiolatry -hagiologic -hagiological -hagiologist -hagiology -hagiophobia -hagioscope -hagioscopic -haglet -haglike -haglin -hagride -hagrope -hagseed -hagship -hagstone -hagtaper -hagweed -hagworm -hah -haidingerite -haik -haikai -haikal -haikwan -hail -hailer -hailproof -hailse -hailshot -hailstone -hailstorm -hailweed -haily -hain -hainberry -haine -hair -hairband -hairbeard -hairbird -hairbrain -hairbreadth -hairbrush -haircloth -haircut -haircutter -haircutting -hairdo -hairdress -hairdresser -hairdressing -haire -haired -hairen -hairhoof -hairhound -hairif -hairiness -hairlace -hairless -hairlessness -hairlet -hairline -hairlock -hairmeal -hairmonger -hairpin -hairsplitter -hairsplitting -hairspring -hairstone -hairstreak -hairtail -hairup -hairweed -hairwood -hairwork -hairworm -hairy -haje -hajib -hajilij -hak -hakam -hakdar -hake -hakeem -hakenkreuz -hakim -hako -haku -hala -halakah -halakic -halakist -halakistic -halal -halalcor -halation -halazone -halberd -halberdier -halberdman -halberdsman -halbert -halch -halcyon -halcyonian -halcyonic -halcyonine -hale -halebi -haleness -haler -halerz -halesome -half -halfback -halfbeak -halfer -halfheaded -halfhearted -halfheartedly -halfheartedness -halfling -halfman -halfness -halfpace -halfpaced -halfpenny -halfpennyworth -halfway -halfwise -halibios -halibiotic -halibiu -halibut -halibuter -halichondrine -halichondroid -halide -halidom -halieutic -halieutically -halieutics -halimous -halinous -haliographer -haliography -haliotoid -haliplankton -haliplid -halisteresis -halisteretic -halite -halitosis -halituosity -halituous -halitus -hall -hallabaloo -hallage -hallah -hallan -hallanshaker -hallebardier -hallecret -halleflinta -halleflintoid -hallel -hallelujah -hallelujatic -hallex -halliblash -halling -hallman -hallmark -hallmarked -hallmarker -hallmoot -halloo -hallopodous -hallow -hallowed -hallowedly -hallowedness -hallower -halloysite -hallucal -hallucinate -hallucination -hallucinational -hallucinative -hallucinator -hallucinatory -hallucined -hallucinosis -hallux -hallway -halma -halmalille -halmawise -halo -halobios -halobiotic -halochromism -halochromy -haloesque -halogen -halogenate -halogenation -halogenoid -halogenous -halohydrin -haloid -halolike -halolimnic -halomancy -halometer -halomorphic -halophile -halophilism -halophilous -halophyte -halophytic -halophytism -haloragidaceous -haloscope -halotrichite -haloxene -hals -halse -halsen -halsfang -halt -halter -halterbreak -halteres -halterproof -halting -haltingly -haltingness -haltless -halucket -halukkah -halurgist -halurgy -halutz -halvaner -halvans -halve -halved -halvelings -halver -halves -halyard -ham -hamacratic -hamadryad -hamal -hamald -hamamelidaceous -hamamelidin -hamamelin -hamartiologist -hamartiology -hamartite -hamate -hamated -hamatum -hambergite -hamble -hambroline -hamburger -hame -hameil -hamel -hamesucken -hamewith -hamfat -hamfatter -hami -hamiform -hamingja -hamirostrate -hamlah -hamlet -hamleted -hamleteer -hamletization -hamletize -hamlinite -hammada -hammam -hammer -hammerable -hammerbird -hammercloth -hammerdress -hammerer -hammerfish -hammerhead -hammerheaded -hammering -hammeringly -hammerkop -hammerless -hammerlike -hammerman -hammersmith -hammerstone -hammertoe -hammerwise -hammerwork -hammerwort -hammochrysos -hammock -hammy -hamose -hamous -hamper -hamperedly -hamperedness -hamperer -hamperman -hamrongite -hamsa -hamshackle -hamster -hamstring -hamular -hamulate -hamule -hamulose -hamulus -hamus -hamza -han -hanaper -hanaster -hanbury -hance -hanced -hanch -hancockite -hand -handbag -handball -handballer -handbank -handbanker -handbarrow -handbill -handblow -handbolt -handbook -handbow -handbreadth -handcar -handcart -handclap -handclasp -handcloth -handcraft -handcraftman -handcraftsman -handcuff -handed -handedness -hander -handersome -handfast -handfasting -handfastly -handfastness -handflower -handful -handgrasp -handgravure -handgrip -handgriping -handgun -handhaving -handhold -handhole -handicap -handicapped -handicapper -handicraft -handicraftship -handicraftsman -handicraftsmanship -handicraftswoman -handicuff -handily -handiness -handistroke -handiwork -handkercher -handkerchief -handkerchiefful -handlaid -handle -handleable -handled -handleless -handler -handless -handlike -handling -handmade -handmaid -handmaiden -handmaidenly -handout -handpost -handprint -handrail -handrailing -handreader -handreading -handsale -handsaw -handsbreadth -handscrape -handsel -handseller -handset -handshake -handshaker -handshaking -handsmooth -handsome -handsomeish -handsomely -handsomeness -handspade -handspike -handspoke -handspring -handstaff -handstand -handstone -handstroke -handwear -handwheel -handwhile -handwork -handworkman -handwrist -handwrite -handwriting -handy -handyblow -handybook -handygrip -hangability -hangable -hangalai -hangar -hangbird -hangby -hangdog -hange -hangee -hanger -hangfire -hangie -hanging -hangingly -hangkang -hangle -hangman -hangmanship -hangment -hangnail -hangnest -hangout -hangul -hangwoman -hangworm -hangworthy -hanif -hanifism -hanifite -hanifiya -hank -hanker -hankerer -hankering -hankeringly -hankie -hankle -hanksite -hanky -hanna -hannayite -hansa -hanse -hansel -hansgrave -hansom -hant -hantle -hao -haole -haoma -haori -hap -hapalote -hapaxanthous -haphazard -haphazardly -haphazardness -haphtarah -hapless -haplessly -haplessness -haplite -haplocaulescent -haplochlamydeous -haplodont -haplodonty -haplography -haploid -haploidic -haploidy -haplolaly -haplologic -haplology -haploma -haplomid -haplomous -haplont -haploperistomic -haploperistomous -haplopetalous -haplophase -haplophyte -haploscope -haploscopic -haplosis -haplostemonous -haplotype -haply -happen -happening -happenstance -happier -happiest -happify -happiless -happily -happiness -happing -happy -hapten -haptene -haptenic -haptere -hapteron -haptic -haptics -haptometer -haptophor -haptophoric -haptophorous -haptotropic -haptotropically -haptotropism -hapu -hapuku -haqueton -harakeke -harangue -harangueful -haranguer -harass -harassable -harassedly -harasser -harassingly -harassment -haratch -harbergage -harbi -harbinge -harbinger -harbingership -harbingery -harbor -harborage -harborer -harborless -harborous -harborside -harborward -hard -hardanger -hardback -hardbake -hardbeam -hardberry -harden -hardenable -hardener -hardening -hardenite -harder -hardfern -hardfist -hardfisted -hardfistedness -hardhack -hardhanded -hardhandedness -hardhead -hardheaded -hardheadedly -hardheadedness -hardhearted -hardheartedly -hardheartedness -hardihood -hardily -hardim -hardiment -hardiness -hardish -hardishrew -hardly -hardmouth -hardmouthed -hardness -hardock -hardpan -hardship -hardstand -hardstanding -hardtack -hardtail -hardware -hardwareman -hardwood -hardy -hardystonite -hare -harebell -harebottle -harebrain -harebrained -harebrainedly -harebrainedness -harebur -harefoot -harefooted -harehearted -harehound -harelike -harelip -harelipped -harem -haremism -haremlik -harengiform -harfang -haricot -harigalds -hariolate -hariolation -hariolize -harish -hark -harka -harl -harlequin -harlequina -harlequinade -harlequinery -harlequinesque -harlequinic -harlequinism -harlequinize -harling -harlock -harlot -harlotry -harm -harmal -harmala -harmaline -harman -harmattan -harmel -harmer -harmful -harmfully -harmfulness -harmine -harminic -harmless -harmlessly -harmlessness -harmonia -harmoniacal -harmonial -harmonic -harmonica -harmonical -harmonically -harmonicalness -harmonichord -harmonici -harmonicism -harmonicon -harmonics -harmonious -harmoniously -harmoniousness -harmoniphon -harmoniphone -harmonist -harmonistic -harmonistically -harmonium -harmonizable -harmonization -harmonize -harmonizer -harmonogram -harmonograph -harmonometer -harmony -harmost -harmotome -harmotomic -harmproof -harn -harness -harnesser -harnessry -harnpan -harp -harpago -harpagon -harper -harperess -harpier -harpings -harpist -harpless -harplike -harpoon -harpooner -harpress -harpsichord -harpsichordist -harpula -harpwaytuning -harpwise -harpylike -harquebus -harquebusade -harquebusier -harr -harrateen -harridan -harrier -harrisite -harrow -harrower -harrowing -harrowingly -harrowingness -harrowment -harry -harsh -harshen -harshish -harshly -harshness -harshweed -harstigite -hart -hartal -hartberry -hartebeest -hartin -hartite -hartshorn -hartstongue -harttite -haruspex -haruspical -haruspicate -haruspication -haruspice -haruspices -haruspicy -harvest -harvestbug -harvester -harvestless -harvestman -harvestry -harvesttime -harzburgite -hasan -hasenpfeffer -hash -hashab -hasher -hashish -hashy -hask -haskness -hasky -haslet -haslock -hasp -hassar -hassel -hassle -hassock -hassocky -hasta -hastate -hastately -hastati -hastatolanceolate -hastatosagittate -haste -hasteful -hastefully -hasteless -hastelessness -hasten -hastener -hasteproof -haster -hastilude -hastily -hastiness -hastings -hastingsite -hastish -hastler -hasty -hat -hatable -hatband -hatbox -hatbrim -hatbrush -hatch -hatchability -hatchable -hatchel -hatcheler -hatcher -hatchery -hatcheryman -hatchet -hatchetback -hatchetfish -hatchetlike -hatchetman -hatchettine -hatchettolite -hatchety -hatchgate -hatching -hatchling -hatchman -hatchment -hatchminder -hatchway -hatchwayman -hate -hateable -hateful -hatefully -hatefulness -hateless -hatelessness -hater -hatful -hath -hatherlite -hathi -hatless -hatlessness -hatlike -hatmaker -hatmaking -hatpin -hatrack -hatrail -hatred -hatress -hatstand -hatt -hatted -hatter -hattery -hatting -hattock -hatty -hau -hauberget -hauberk -hauchecornite -hauerite -haugh -haughland -haught -haughtily -haughtiness -haughtly -haughtness -haughtonite -haughty -haul -haulabout -haulage -haulageway -haulback -hauld -hauler -haulier -haulm -haulmy -haulster -haunch -haunched -hauncher -haunching -haunchless -haunchy -haunt -haunter -hauntingly -haunty -hauriant -haurient -hause -hausen -hausmannite -hausse -haustellate -haustellated -haustellous -haustellum -haustement -haustorial -haustorium -haustral -haustrum -hautboy -hautboyist -hauteur -hauynite -hauynophyre -havage -have -haveable -haveage -havel -haveless -havelock -haven -havenage -havener -havenership -havenet -havenful -havenless -havent -havenward -haver -havercake -haverel -haverer -havergrass -havermeal -havers -haversack -haversine -havier -havildar -havingness -havoc -havocker -haw -hawaiite -hawbuck -hawcubite -hawer -hawfinch -hawk -hawkbill -hawkbit -hawked -hawker -hawkery -hawkie -hawking -hawkish -hawklike -hawknut -hawkweed -hawkwise -hawky -hawm -hawok -hawse -hawsehole -hawseman -hawsepiece -hawsepipe -hawser -hawserwise -hawthorn -hawthorned -hawthorny -hay -haya -hayband -haybird -haybote -haycap -haycart -haycock -haydenite -hayey -hayfield -hayfork -haygrower -haylift -hayloft -haymaker -haymaking -haymarket -haymow -hayrack -hayrake -hayraker -hayrick -hayseed -haysel -haystack -haysuck -haytime -hayward -hayweed -haywire -hayz -hazard -hazardable -hazarder -hazardful -hazardize -hazardless -hazardous -hazardously -hazardousness -hazardry -haze -hazel -hazeled -hazeless -hazelly -hazelnut -hazelwood -hazelwort -hazen -hazer -hazily -haziness -hazing -hazle -haznadar -hazy -hazzan -he -head -headache -headachy -headband -headbander -headboard -headborough -headcap -headchair -headcheese -headchute -headcloth -headdress -headed -headender -header -headfirst -headforemost -headframe -headful -headgear -headily -headiness -heading -headkerchief -headland -headledge -headless -headlessness -headlight -headlighting -headlike -headline -headliner -headlock -headlong -headlongly -headlongs -headlongwise -headman -headmark -headmaster -headmasterly -headmastership -headmistress -headmistressship -headmold -headmost -headnote -headpenny -headphone -headpiece -headplate -headpost -headquarter -headquarters -headrace -headrail -headreach -headrent -headrest -headright -headring -headroom -headrope -headsail -headset -headshake -headship -headsill -headskin -headsman -headspring -headstall -headstand -headstick -headstock -headstone -headstream -headstrong -headstrongly -headstrongness -headwaiter -headwall -headward -headwark -headwater -headway -headwear -headwork -headworker -headworking -heady -heaf -heal -healable -heald -healder -healer -healful -healing -healingly -healless -healsome -healsomeness -health -healthcraft -healthful -healthfully -healthfulness -healthguard -healthily -healthiness -healthless -healthlessness -healthsome -healthsomely -healthsomeness -healthward -healthy -heap -heaper -heaps -heapstead -heapy -hear -hearable -hearer -hearing -hearingless -hearken -hearkener -hearsay -hearse -hearsecloth -hearselike -hearst -heart -heartache -heartaching -heartbeat -heartbird -heartblood -heartbreak -heartbreaker -heartbreaking -heartbreakingly -heartbroken -heartbrokenly -heartbrokenness -heartburn -heartburning -heartdeep -heartease -hearted -heartedly -heartedness -hearten -heartener -heartening -hearteningly -heartfelt -heartful -heartfully -heartfulness -heartgrief -hearth -hearthless -hearthman -hearthpenny -hearthrug -hearthstead -hearthstone -hearthward -hearthwarming -heartikin -heartily -heartiness -hearting -heartland -heartleaf -heartless -heartlessly -heartlessness -heartlet -heartling -heartly -heartnut -heartpea -heartquake -heartroot -hearts -heartscald -heartsease -heartseed -heartsette -heartsick -heartsickening -heartsickness -heartsome -heartsomely -heartsomeness -heartsore -heartstring -heartthrob -heartward -heartwater -heartweed -heartwise -heartwood -heartwort -hearty -heat -heatable -heatdrop -heatedly -heater -heaterman -heatful -heath -heathberry -heathbird -heathen -heathendom -heatheness -heathenesse -heathenhood -heathenish -heathenishly -heathenishness -heathenism -heathenize -heathenness -heathenry -heathenship -heather -heathered -heatheriness -heathery -heathless -heathlike -heathwort -heathy -heating -heatingly -heatless -heatlike -heatmaker -heatmaking -heatproof -heatronic -heatsman -heatstroke -heaume -heaumer -heautarit -heautomorphism -heautophany -heave -heaveless -heaven -heavenful -heavenhood -heavenish -heavenishly -heavenize -heavenless -heavenlike -heavenliness -heavenly -heavens -heavenward -heavenwardly -heavenwardness -heavenwards -heaver -heavies -heavily -heaviness -heaving -heavisome -heavity -heavy -heavyback -heavyhanded -heavyhandedness -heavyheaded -heavyhearted -heavyheartedness -heavyweight -hebamic -hebdomad -hebdomadal -hebdomadally -hebdomadary -hebdomader -hebdomarian -hebdomary -hebeanthous -hebecarpous -hebecladous -hebegynous -hebenon -hebeosteotomy -hebepetalous -hebephrenia -hebephrenic -hebetate -hebetation -hebetative -hebete -hebetic -hebetomy -hebetude -hebetudinous -hebronite -hecastotheism -hecatomb -hecatomped -hecatompedon -hecatonstylon -hecatontarchy -hecatontome -hecatophyllous -hech -heck -heckelphone -heckimal -heckle -heckler -hectare -hecte -hectic -hectical -hectically -hecticly -hecticness -hectocotyl -hectocotyle -hectocotyliferous -hectocotylization -hectocotylize -hectocotylus -hectogram -hectograph -hectographic -hectography -hectoliter -hectometer -hector -hectoringly -hectorism -hectorly -hectorship -hectostere -hectowatt -heddle -heddlemaker -heddler -hedebo -hedenbergite -heder -hederaceous -hederaceously -hederated -hederic -hederiferous -hederiform -hederigerent -hederin -hederose -hedge -hedgeberry -hedgeborn -hedgebote -hedgebreaker -hedgehog -hedgehoggy -hedgehop -hedgehopper -hedgeless -hedgemaker -hedgemaking -hedger -hedgerow -hedgesmith -hedgeweed -hedgewise -hedgewood -hedging -hedgingly -hedgy -hedonic -hedonical -hedonically -hedonics -hedonism -hedonist -hedonistic -hedonistically -hedonology -hedriophthalmous -hedrocele -hedrumite -hedyphane -heed -heeder -heedful -heedfully -heedfulness -heedily -heediness -heedless -heedlessly -heedlessness -heedy -heehaw -heel -heelball -heelband -heelcap -heeled -heeler -heelgrip -heelless -heelmaker -heelmaking -heelpath -heelpiece -heelplate -heelpost -heelprint -heelstrap -heeltap -heeltree -heemraad -heer -heeze -heezie -heezy -heft -hefter -heftily -heftiness -hefty -hegari -hegemon -hegemonic -hegemonical -hegemonist -hegemonizer -hegemony -hegira -hegumen -hegumene -hei -heiau -heifer -heiferhood -heigh -heighday -height -heighten -heightener -heii -heimin -heinous -heinously -heinousness -heintzite -heir -heirdom -heiress -heiressdom -heiresshood -heirless -heirloom -heirship -heirskip -heitiki -hekteus -helbeh -helcoid -helcology -helcoplasty -helcosis -helcotic -heldentenor -helder -hele -helenin -helenioid -helepole -heliacal -heliacally -heliaean -helianthaceous -helianthic -helianthin -heliast -heliastic -heliazophyte -helical -helically -heliced -helices -helichryse -helichrysum -heliciform -helicin -helicine -helicitic -helicline -helicograph -helicogyrate -helicogyre -helicoid -helicoidal -helicoidally -helicometry -helicon -heliconist -helicoprotein -helicopter -helicorubin -helicotrema -helictite -helide -heling -helio -heliocentric -heliocentrical -heliocentrically -heliocentricism -heliocentricity -heliochrome -heliochromic -heliochromoscope -heliochromotype -heliochromy -helioculture -heliodon -heliodor -helioelectric -helioengraving -heliofugal -heliogram -heliograph -heliographer -heliographic -heliographical -heliographically -heliography -heliogravure -helioid -heliolater -heliolatrous -heliolatry -heliolite -heliolithic -heliologist -heliology -heliometer -heliometric -heliometrical -heliometrically -heliometry -heliomicrometer -heliophilia -heliophiliac -heliophilous -heliophobe -heliophobia -heliophobic -heliophobous -heliophotography -heliophyllite -heliophyte -heliopticon -helioscope -helioscopic -helioscopy -heliosis -heliostat -heliostatic -heliotactic -heliotaxis -heliotherapy -heliothermometer -heliotrope -heliotroper -heliotropian -heliotropic -heliotropical -heliotropically -heliotropine -heliotropism -heliotropy -heliotype -heliotypic -heliotypically -heliotypography -heliotypy -heliozoan -heliozoic -heliport -helispheric -helispherical -helium -helix -helizitic -hell -hellandite -hellanodic -hellbender -hellborn -hellbox -hellbred -hellbroth -hellcat -helldog -helleboraceous -helleboraster -hellebore -helleborein -helleboric -helleborin -helleborism -heller -helleri -hellgrammite -hellhag -hellhole -hellhound -hellicat -hellier -hellion -hellish -hellishly -hellishness -hellkite -hellness -hello -hellroot -hellship -helluo -hellward -hellweed -helly -helm -helmage -helmed -helmet -helmeted -helmetlike -helmetmaker -helmetmaking -helminth -helminthagogic -helminthagogue -helminthiasis -helminthic -helminthism -helminthite -helminthoid -helminthologic -helminthological -helminthologist -helminthology -helminthosporiose -helminthosporoid -helminthous -helmless -helmsman -helmsmanship -helobious -heloderm -helodermatoid -helodermatous -helodes -heloe -heloma -helonin -helosis -helotage -helotism -helotize -helotomy -helotry -help -helpable -helper -helpful -helpfully -helpfulness -helping -helpingly -helpless -helplessly -helplessness -helply -helpmate -helpmeet -helpsome -helpworthy -helsingkite -helve -helvell -helvellaceous -helvellic -helver -helvite -hem -hemabarometer -hemachate -hemachrome -hemachrosis -hemacite -hemad -hemadrometer -hemadrometry -hemadromograph -hemadromometer -hemadynameter -hemadynamic -hemadynamics -hemadynamometer -hemafibrite -hemagglutinate -hemagglutination -hemagglutinative -hemagglutinin -hemagogic -hemagogue -hemal -hemalbumen -hemamoeba -hemangioma -hemangiomatosis -hemangiosarcoma -hemaphein -hemapod -hemapodous -hemapoiesis -hemapoietic -hemapophyseal -hemapophysial -hemapophysis -hemarthrosis -hemase -hemaspectroscope -hemastatics -hematachometer -hematachometry -hematal -hematein -hematemesis -hematemetic -hematencephalon -hematherapy -hematherm -hemathermal -hemathermous -hemathidrosis -hematic -hematid -hematidrosis -hematimeter -hematin -hematinic -hematinometer -hematinometric -hematinuria -hematite -hematitic -hematobic -hematobious -hematobium -hematoblast -hematobranchiate -hematocatharsis -hematocathartic -hematocele -hematochezia -hematochrome -hematochyluria -hematoclasia -hematoclasis -hematocolpus -hematocrit -hematocryal -hematocrystallin -hematocyanin -hematocyst -hematocystis -hematocyte -hematocytoblast -hematocytogenesis -hematocytometer -hematocytotripsis -hematocytozoon -hematocyturia -hematodynamics -hematodynamometer -hematodystrophy -hematogen -hematogenesis -hematogenetic -hematogenic -hematogenous -hematoglobulin -hematography -hematohidrosis -hematoid -hematoidin -hematolin -hematolite -hematological -hematologist -hematology -hematolymphangioma -hematolysis -hematolytic -hematoma -hematomancy -hematometer -hematometra -hematometry -hematomphalocele -hematomyelia -hematomyelitis -hematonephrosis -hematonic -hematopathology -hematopericardium -hematopexis -hematophobia -hematophyte -hematoplast -hematoplastic -hematopoiesis -hematopoietic -hematoporphyrin -hematoporphyrinuria -hematorrhachis -hematorrhea -hematosalpinx -hematoscope -hematoscopy -hematose -hematosepsis -hematosin -hematosis -hematospectrophotometer -hematospectroscope -hematospermatocele -hematospermia -hematostibiite -hematotherapy -hematothermal -hematothorax -hematoxic -hematozoal -hematozoan -hematozoic -hematozoon -hematozymosis -hematozymotic -hematuresis -hematuria -hematuric -hemautogram -hemautograph -hemautographic -hemautography -heme -hemellitene -hemellitic -hemelytral -hemelytron -hemen -hemera -hemeralope -hemeralopia -hemeralopic -hemerologium -hemerology -hemerythrin -hemiablepsia -hemiacetal -hemiachromatopsia -hemiageusia -hemiageustia -hemialbumin -hemialbumose -hemialbumosuria -hemialgia -hemiamaurosis -hemiamb -hemiamblyopia -hemiamyosthenia -hemianacusia -hemianalgesia -hemianatropous -hemianesthesia -hemianopia -hemianopic -hemianopsia -hemianoptic -hemianosmia -hemiapraxia -hemiasynergia -hemiataxia -hemiataxy -hemiathetosis -hemiatrophy -hemiazygous -hemibasidium -hemibathybian -hemibenthic -hemibenthonic -hemibranch -hemibranchiate -hemic -hemicanities -hemicardia -hemicardiac -hemicarp -hemicatalepsy -hemicataleptic -hemicellulose -hemicentrum -hemicephalous -hemicerebrum -hemichordate -hemichorea -hemichromatopsia -hemicircle -hemicircular -hemiclastic -hemicollin -hemicrane -hemicrania -hemicranic -hemicrany -hemicrystalline -hemicycle -hemicyclic -hemicyclium -hemicylindrical -hemidactylous -hemidemisemiquaver -hemidiapente -hemidiaphoresis -hemiditone -hemidomatic -hemidome -hemidrachm -hemidysergia -hemidysesthesia -hemidystrophy -hemiekton -hemielliptic -hemiepilepsy -hemifacial -hemiform -hemigastrectomy -hemigeusia -hemiglossal -hemiglossitis -hemiglyph -hemignathous -hemihdry -hemihedral -hemihedrally -hemihedric -hemihedrism -hemihedron -hemiholohedral -hemihydrate -hemihydrated -hemihydrosis -hemihypalgesia -hemihyperesthesia -hemihyperidrosis -hemihypertonia -hemihypertrophy -hemihypesthesia -hemihypoesthesia -hemihypotonia -hemikaryon -hemikaryotic -hemilaminectomy -hemilaryngectomy -hemilethargy -hemiligulate -hemilingual -hemimellitene -hemimellitic -hemimelus -hemimetabole -hemimetabolic -hemimetabolism -hemimetabolous -hemimetaboly -hemimetamorphic -hemimetamorphosis -hemimetamorphous -hemimorph -hemimorphic -hemimorphism -hemimorphite -hemimorphy -hemin -hemina -hemine -heminee -hemineurasthenia -hemiobol -hemiolia -hemiolic -hemionus -hemiope -hemiopia -hemiopic -hemiorthotype -hemiparalysis -hemiparanesthesia -hemiparaplegia -hemiparasite -hemiparasitic -hemiparasitism -hemiparesis -hemiparesthesia -hemiparetic -hemipenis -hemipeptone -hemiphrase -hemipic -hemipinnate -hemiplane -hemiplankton -hemiplegia -hemiplegic -hemiplegy -hemipodan -hemipode -hemiprism -hemiprismatic -hemiprotein -hemipter -hemipteral -hemipteran -hemipteroid -hemipterological -hemipterology -hemipteron -hemipterous -hemipyramid -hemiquinonoid -hemiramph -hemiramphine -hemisaprophyte -hemisaprophytic -hemiscotosis -hemisect -hemisection -hemispasm -hemispheral -hemisphere -hemisphered -hemispherical -hemispherically -hemispheroid -hemispheroidal -hemispherule -hemistater -hemistich -hemistichal -hemistrumectomy -hemisymmetrical -hemisymmetry -hemisystole -hemiterata -hemiteratic -hemiteratics -hemiteria -hemiterpene -hemitery -hemithyroidectomy -hemitone -hemitremor -hemitrichous -hemitriglyph -hemitropal -hemitrope -hemitropic -hemitropism -hemitropous -hemitropy -hemitype -hemitypic -hemivagotony -heml -hemlock -hemmel -hemmer -hemoalkalimeter -hemoblast -hemochromatosis -hemochrome -hemochromogen -hemochromometer -hemochromometry -hemoclasia -hemoclasis -hemoclastic -hemocoel -hemocoele -hemocoelic -hemocoelom -hemoconcentration -hemoconia -hemoconiosis -hemocry -hemocrystallin -hemoculture -hemocyanin -hemocyte -hemocytoblast -hemocytogenesis -hemocytolysis -hemocytometer -hemocytotripsis -hemocytozoon -hemocyturia -hemodiagnosis -hemodilution -hemodrometer -hemodrometry -hemodromograph -hemodromometer -hemodynameter -hemodynamic -hemodynamics -hemodystrophy -hemoerythrin -hemoflagellate -hemofuscin -hemogastric -hemogenesis -hemogenetic -hemogenic -hemogenous -hemoglobic -hemoglobin -hemoglobinemia -hemoglobiniferous -hemoglobinocholia -hemoglobinometer -hemoglobinophilic -hemoglobinous -hemoglobinuria -hemoglobinuric -hemoglobulin -hemogram -hemogregarine -hemoid -hemokonia -hemokoniosis -hemol -hemoleucocyte -hemoleucocytic -hemologist -hemology -hemolymph -hemolymphatic -hemolysin -hemolysis -hemolytic -hemolyze -hemomanometer -hemometer -hemometry -hemonephrosis -hemopathology -hemopathy -hemopericardium -hemoperitoneum -hemopexis -hemophage -hemophagia -hemophagocyte -hemophagocytosis -hemophagous -hemophagy -hemophile -hemophilia -hemophiliac -hemophilic -hemophobia -hemophthalmia -hemophthisis -hemopiezometer -hemoplasmodium -hemoplastic -hemopneumothorax -hemopod -hemopoiesis -hemopoietic -hemoproctia -hemoptoe -hemoptysis -hemopyrrole -hemorrhage -hemorrhagic -hemorrhagin -hemorrhea -hemorrhodin -hemorrhoid -hemorrhoidal -hemorrhoidectomy -hemosalpinx -hemoscope -hemoscopy -hemosiderin -hemosiderosis -hemospasia -hemospastic -hemospermia -hemosporid -hemosporidian -hemostasia -hemostasis -hemostat -hemostatic -hemotachometer -hemotherapeutics -hemotherapy -hemothorax -hemotoxic -hemotoxin -hemotrophe -hemotropic -hemozoon -hemp -hempbush -hempen -hemplike -hempseed -hempstring -hempweed -hempwort -hempy -hemstitch -hemstitcher -hen -henad -henbane -henbill -henbit -hence -henceforth -henceforward -henceforwards -henchboy -henchman -henchmanship -hencoop -hencote -hend -hendecacolic -hendecagon -hendecagonal -hendecahedron -hendecane -hendecasemic -hendecasyllabic -hendecasyllable -hendecatoic -hendecoic -hendecyl -hendiadys -hendly -hendness -heneicosane -henequen -henfish -henhearted -henhouse -henhussy -henism -henlike -henmoldy -henna -hennery -hennin -hennish -henny -henogeny -henotheism -henotheist -henotheistic -henotic -henpeck -henpen -henroost -henry -hent -henter -hentriacontane -henware -henwife -henwise -henwoodite -henyard -heortological -heortologion -heortology -hep -hepar -heparin -heparinize -hepatalgia -hepatatrophia -hepatatrophy -hepatauxe -hepatectomy -hepatic -hepatica -hepatical -hepaticoduodenostomy -hepaticoenterostomy -hepaticogastrostomy -hepaticologist -hepaticology -hepaticopulmonary -hepaticostomy -hepaticotomy -hepatite -hepatitis -hepatization -hepatize -hepatocele -hepatocirrhosis -hepatocolic -hepatocystic -hepatoduodenal -hepatoduodenostomy -hepatodynia -hepatodysentery -hepatoenteric -hepatoflavin -hepatogastric -hepatogenic -hepatogenous -hepatography -hepatoid -hepatolenticular -hepatolith -hepatolithiasis -hepatolithic -hepatological -hepatologist -hepatology -hepatolysis -hepatolytic -hepatoma -hepatomalacia -hepatomegalia -hepatomegaly -hepatomelanosis -hepatonephric -hepatopathy -hepatoperitonitis -hepatopexia -hepatopexy -hepatophlebitis -hepatophlebotomy -hepatophyma -hepatopneumonic -hepatoportal -hepatoptosia -hepatoptosis -hepatopulmonary -hepatorenal -hepatorrhagia -hepatorrhaphy -hepatorrhea -hepatorrhexis -hepatorrhoea -hepatoscopy -hepatostomy -hepatotherapy -hepatotomy -hepatotoxemia -hepatoumbilical -hepcat -hephthemimer -hephthemimeral -hepialid -heppen -hepper -heptacapsular -heptace -heptachord -heptachronous -heptacolic -heptacosane -heptad -heptadecane -heptadecyl -heptaglot -heptagon -heptagonal -heptagynous -heptahedral -heptahedrical -heptahedron -heptahexahedral -heptahydrate -heptahydrated -heptahydric -heptahydroxy -heptal -heptameride -heptamerous -heptameter -heptamethylene -heptametrical -heptanaphthene -heptandrous -heptane -heptangular -heptanoic -heptanone -heptapetalous -heptaphyllous -heptaploid -heptaploidy -heptapodic -heptapody -heptarch -heptarchal -heptarchic -heptarchical -heptarchist -heptarchy -heptasemic -heptasepalous -heptaspermous -heptastich -heptastrophic -heptastylar -heptastyle -heptasulphide -heptasyllabic -heptatomic -heptatonic -heptavalent -heptene -hepteris -heptine -heptite -heptitol -heptoic -heptorite -heptose -heptoxide -heptyl -heptylene -heptylic -heptyne -her -herald -heraldess -heraldic -heraldical -heraldically -heraldist -heraldize -heraldress -heraldry -heraldship -herapathite -herb -herbaceous -herbaceously -herbage -herbaged -herbager -herbagious -herbal -herbalism -herbalist -herbalize -herbane -herbaria -herbarial -herbarian -herbarism -herbarist -herbarium -herbarize -herbary -herbescent -herbicidal -herbicide -herbicolous -herbiferous -herbish -herbist -herbivore -herbivority -herbivorous -herbless -herblet -herblike -herbman -herborist -herborization -herborize -herborizer -herbose -herbosity -herbous -herbwife -herbwoman -herby -hercogamous -hercogamy -hercynite -herd -herdbook -herdboy -herder -herderite -herdic -herding -herdship -herdsman -herdswoman -herdwick -here -hereabout -hereadays -hereafter -hereafterward -hereamong -hereat -hereaway -hereaways -herebefore -hereby -heredipetous -heredipety -hereditability -hereditable -hereditably -hereditament -hereditarian -hereditarianism -hereditarily -hereditariness -hereditarist -hereditary -hereditation -hereditative -hereditism -hereditist -hereditivity -heredity -heredium -heredofamilial -heredolues -heredoluetic -heredosyphilis -heredosyphilitic -heredosyphilogy -heredotuberculosis -herefrom -heregeld -herein -hereinabove -hereinafter -hereinbefore -hereinto -herem -hereness -hereniging -hereof -hereon -hereright -heresiarch -heresimach -heresiographer -heresiography -heresiologer -heresiologist -heresiology -heresy -heresyphobia -heresyproof -heretic -heretical -heretically -hereticalness -hereticate -heretication -hereticator -hereticide -hereticize -hereto -heretoch -heretofore -heretoforetime -heretoga -heretrix -hereunder -hereunto -hereupon -hereward -herewith -herewithal -herile -heriot -heriotable -herisson -heritability -heritable -heritably -heritage -heritance -heritor -heritress -heritrix -herl -herling -herma -hermaean -hermaic -hermaphrodite -hermaphroditic -hermaphroditical -hermaphroditically -hermaphroditish -hermaphroditism -hermaphroditize -hermeneut -hermeneutic -hermeneutical -hermeneutically -hermeneutics -hermeneutist -hermetic -hermetical -hermetically -hermeticism -hermidin -hermit -hermitage -hermitary -hermitess -hermitic -hermitical -hermitically -hermitish -hermitism -hermitize -hermitry -hermitship -hermodact -hermodactyl -hermoglyphic -hermoglyphist -hermokopid -hern -hernandiaceous -hernanesell -hernani -hernant -herne -hernia -hernial -herniarin -herniary -herniate -herniated -herniation -hernioenterotomy -hernioid -herniology -herniopuncture -herniorrhaphy -herniotome -herniotomist -herniotomy -hero -heroarchy -herodian -herodionine -heroess -herohead -herohood -heroic -heroical -heroically -heroicalness -heroicity -heroicly -heroicness -heroicomic -heroicomical -heroid -heroify -heroin -heroine -heroineship -heroinism -heroinize -heroism -heroistic -heroization -heroize -herolike -heromonger -heron -heroner -heronite -heronry -heroogony -heroologist -heroology -heroship -herotheism -herpes -herpestine -herpetic -herpetiform -herpetism -herpetography -herpetoid -herpetologic -herpetological -herpetologically -herpetologist -herpetology -herpetomonad -herpetophobia -herpetotomist -herpetotomy -herpolhode -herrengrundite -herring -herringbone -herringer -hers -herschelite -herse -hersed -herself -hership -hersir -hertz -hertzian -hesitance -hesitancy -hesitant -hesitantly -hesitate -hesitater -hesitating -hesitatingly -hesitatingness -hesitation -hesitative -hesitatively -hesitatory -hesperid -hesperidate -hesperidene -hesperideous -hesperidin -hesperidium -hesperiid -hesperinon -hesperitin -hesperornithid -hesperornithoid -hessite -hessonite -hest -hestern -hesternal -hesthogenous -hesychastic -het -hetaera -hetaeria -hetaeric -hetaerism -hetaerist -hetaeristic -hetaerocracy -hetaerolite -hetaery -heteradenia -heteradenic -heterakid -heterandrous -heterandry -heteratomic -heterauxesis -heteraxial -heteric -heterically -hetericism -hetericist -heterism -heterization -heterize -hetero -heteroagglutinin -heteroalbumose -heteroauxin -heteroblastic -heteroblastically -heteroblasty -heterocarpism -heterocarpous -heterocaseose -heterocellular -heterocentric -heterocephalous -heterocerc -heterocercal -heterocercality -heterocercy -heterocerous -heterochiral -heterochlamydeous -heterochromatic -heterochromatin -heterochromatism -heterochromatization -heterochromatized -heterochrome -heterochromia -heterochromic -heterochromosome -heterochromous -heterochromy -heterochronic -heterochronism -heterochronistic -heterochronous -heterochrony -heterochrosis -heterochthon -heterochthonous -heterocline -heteroclinous -heteroclital -heteroclite -heteroclitica -heteroclitous -heterocoelous -heterocycle -heterocyclic -heterocyst -heterocystous -heterodactyl -heterodactylous -heterodont -heterodontism -heterodontoid -heterodox -heterodoxal -heterodoxical -heterodoxly -heterodoxness -heterodoxy -heterodromous -heterodromy -heterodyne -heteroecious -heteroeciously -heteroeciousness -heteroecism -heteroecismal -heteroecy -heteroepic -heteroepy -heteroerotic -heteroerotism -heterofermentative -heterofertilization -heterogalactic -heterogamete -heterogametic -heterogametism -heterogamety -heterogamic -heterogamous -heterogamy -heterogangliate -heterogen -heterogene -heterogeneal -heterogenean -heterogeneity -heterogeneous -heterogeneously -heterogeneousness -heterogenesis -heterogenetic -heterogenic -heterogenicity -heterogenist -heterogenous -heterogeny -heteroglobulose -heterognath -heterogone -heterogonism -heterogonous -heterogonously -heterogony -heterograft -heterographic -heterographical -heterography -heterogynal -heterogynous -heteroicous -heteroimmune -heteroinfection -heteroinoculable -heteroinoculation -heterointoxication -heterokaryon -heterokaryosis -heterokaryotic -heterokinesis -heterokinetic -heterokontan -heterolalia -heterolateral -heterolecithal -heterolith -heterolobous -heterologic -heterological -heterologically -heterologous -heterology -heterolysin -heterolysis -heterolytic -heteromallous -heteromastigate -heteromastigote -heteromeral -heteromeric -heteromerous -heterometabole -heterometabolic -heterometabolism -heterometabolous -heterometaboly -heterometric -heteromorphic -heteromorphism -heteromorphite -heteromorphosis -heteromorphous -heteromorphy -heteromyarian -heteronereid -heteronereis -heteronomous -heteronomously -heteronomy -heteronuclear -heteronym -heteronymic -heteronymous -heteronymously -heteronymy -heteroousia -heteroousian -heteroousious -heteropathic -heteropathy -heteropelmous -heteropetalous -heterophagous -heterophasia -heterophemism -heterophemist -heterophemistic -heterophemize -heterophemy -heterophile -heterophoria -heterophoric -heterophylesis -heterophyletic -heterophyllous -heterophylly -heterophyly -heterophyte -heterophytic -heteroplasia -heteroplasm -heteroplastic -heteroplasty -heteroploid -heteroploidy -heteropod -heteropodal -heteropodous -heteropolar -heteropolarity -heteropoly -heteroproteide -heteroproteose -heteropter -heteropterous -heteroptics -heteropycnosis -heteroscope -heteroscopy -heterosexual -heterosexuality -heteroside -heterosis -heterosomatous -heterosome -heterosomous -heterosporic -heterosporous -heterospory -heterostatic -heterostemonous -heterostracan -heterostrophic -heterostrophous -heterostrophy -heterostyled -heterostylism -heterostylous -heterostyly -heterosuggestion -heterosyllabic -heterotactic -heterotactous -heterotaxia -heterotaxic -heterotaxis -heterotaxy -heterotelic -heterothallic -heterothallism -heterothermal -heterothermic -heterotic -heterotopia -heterotopic -heterotopism -heterotopous -heterotopy -heterotransplant -heterotransplantation -heterotrich -heterotrichosis -heterotrichous -heterotropal -heterotroph -heterotrophic -heterotrophy -heterotropia -heterotropic -heterotropous -heterotype -heterotypic -heterotypical -heteroxanthine -heteroxenous -heterozetesis -heterozygosis -heterozygosity -heterozygote -heterozygotic -heterozygous -heterozygousness -hething -hetman -hetmanate -hetmanship -hetter -hetterly -heuau -heugh -heulandite -heumite -heuretic -heuristic -heuristically -hevi -hew -hewable -hewel -hewer -hewettite -hewhall -hewn -hewt -hex -hexa -hexabasic -hexabiose -hexabromide -hexacanth -hexacanthous -hexacapsular -hexacarbon -hexace -hexachloride -hexachlorocyclohexane -hexachloroethane -hexachord -hexachronous -hexacid -hexacolic -hexacorallan -hexacosane -hexacosihedroid -hexact -hexactinal -hexactine -hexactinellid -hexactinellidan -hexactinelline -hexactinian -hexacyclic -hexad -hexadactyle -hexadactylic -hexadactylism -hexadactylous -hexadactyly -hexadecahedroid -hexadecane -hexadecanoic -hexadecene -hexadecyl -hexadic -hexadiene -hexadiyne -hexafoil -hexaglot -hexagon -hexagonal -hexagonally -hexagonial -hexagonical -hexagonous -hexagram -hexagrammoid -hexagyn -hexagynian -hexagynous -hexahedral -hexahedron -hexahydrate -hexahydrated -hexahydric -hexahydride -hexahydrite -hexahydrobenzene -hexahydroxy -hexakisoctahedron -hexakistetrahedron -hexameral -hexameric -hexamerism -hexameron -hexamerous -hexameter -hexamethylenamine -hexamethylene -hexamethylenetetramine -hexametral -hexametric -hexametrical -hexametrist -hexametrize -hexametrographer -hexamitiasis -hexammine -hexammino -hexanaphthene -hexandric -hexandrous -hexandry -hexane -hexanedione -hexangular -hexangularly -hexanitrate -hexanitrodiphenylamine -hexapartite -hexaped -hexapetaloid -hexapetaloideous -hexapetalous -hexaphyllous -hexapla -hexaplar -hexaplarian -hexaplaric -hexaploid -hexaploidy -hexapod -hexapodal -hexapodan -hexapodous -hexapody -hexapterous -hexaradial -hexarch -hexarchy -hexaseme -hexasemic -hexasepalous -hexaspermous -hexastemonous -hexaster -hexastich -hexastichic -hexastichon -hexastichous -hexastichy -hexastigm -hexastylar -hexastyle -hexastylos -hexasulphide -hexasyllabic -hexatetrahedron -hexathlon -hexatomic -hexatriacontane -hexatriose -hexavalent -hexecontane -hexenbesen -hexene -hexer -hexerei -hexeris -hexestrol -hexicological -hexicology -hexine -hexiological -hexiology -hexis -hexitol -hexoctahedral -hexoctahedron -hexode -hexoestrol -hexogen -hexoic -hexokinase -hexone -hexonic -hexosamine -hexosaminic -hexosan -hexose -hexosediphosphoric -hexosemonophosphoric -hexosephosphatase -hexosephosphoric -hexoylene -hexpartite -hexyl -hexylene -hexylic -hexylresorcinol -hexyne -hey -heyday -hi -hia -hiant -hiatal -hiate -hiation -hiatus -hibbin -hibernacle -hibernacular -hibernaculum -hibernal -hibernate -hibernation -hibernator -hic -hicatee -hiccup -hick -hickey -hickory -hickwall -hidable -hidage -hidalgism -hidalgo -hidalgoism -hidated -hidation -hidden -hiddenite -hiddenly -hiddenmost -hiddenness -hide -hideaway -hidebind -hidebound -hideboundness -hided -hideland -hideless -hideling -hideosity -hideous -hideously -hideousness -hider -hidling -hidlings -hidradenitis -hidrocystoma -hidromancy -hidropoiesis -hidrosis -hidrotic -hie -hieder -hielaman -hield -hielmite -hiemal -hiemation -hieracosphinx -hierapicra -hierarch -hierarchal -hierarchic -hierarchical -hierarchically -hierarchism -hierarchist -hierarchize -hierarchy -hieratic -hieratical -hieratically -hieraticism -hieratite -hierocracy -hierocratic -hierocratical -hierodule -hierodulic -hierogamy -hieroglyph -hieroglypher -hieroglyphic -hieroglyphical -hieroglyphically -hieroglyphist -hieroglyphize -hieroglyphology -hieroglyphy -hierogram -hierogrammat -hierogrammate -hierogrammateus -hierogrammatic -hierogrammatical -hierogrammatist -hierograph -hierographer -hierographic -hierographical -hierography -hierolatry -hierologic -hierological -hierologist -hierology -hieromachy -hieromancy -hieromnemon -hieromonach -hieron -hieropathic -hierophancy -hierophant -hierophantes -hierophantic -hierophantically -hierophanticly -hieros -hieroscopy -hierurgical -hierurgy -hifalutin -higdon -higgaion -higginsite -higgle -higglehaggle -higgler -higglery -high -highball -highbelia -highbinder -highborn -highboy -highbred -higher -highermost -highest -highfalutin -highfaluting -highfalutinism -highflying -highhanded -highhandedly -highhandedness -highhearted -highheartedly -highheartedness -highish -highjack -highjacker -highland -highlander -highlandish -highlight -highliving -highly -highman -highmoor -highmost -highness -highroad -hight -hightoby -hightop -highway -highwayman -higuero -hijack -hike -hiker -hilarious -hilariously -hilariousness -hilarity -hilasmic -hilch -hilding -hiliferous -hill -hillberry -hillbilly -hillculture -hillebrandite -hiller -hillet -hilliness -hillman -hillock -hillocked -hillocky -hillsale -hillsalesman -hillside -hillsman -hilltop -hilltrot -hillward -hillwoman -hilly -hilsa -hilt -hiltless -hilum -hilus -him -himation -himp -himself -himward -himwards -hin -hinau -hinch -hind -hindberry -hindbrain -hindcast -hinddeck -hinder -hinderance -hinderer -hinderest -hinderful -hinderfully -hinderingly -hinderlands -hinderlings -hinderlins -hinderly -hinderment -hindermost -hindersome -hindhand -hindhead -hindmost -hindquarter -hindrance -hindsaddle -hindsight -hindward -hing -hinge -hingecorner -hingeflower -hingeless -hingelike -hinger -hingeways -hingle -hinney -hinnible -hinny -hinoid -hinoideous -hinoki -hinsdalite -hint -hintedly -hinter -hinterland -hintingly -hintproof -hintzeite -hiodont -hiortdahlite -hip -hipbone -hipe -hiper -hiphalt -hipless -hipmold -hippalectryon -hipparch -hipped -hippen -hippian -hippiater -hippiatric -hippiatrical -hippiatrics -hippiatrist -hippiatry -hippic -hipping -hippish -hipple -hippo -hippoboscid -hippocamp -hippocampal -hippocampi -hippocampine -hippocampus -hippocastanaceous -hippocaust -hippocentaur -hippocentauric -hippocerf -hippocoprosterol -hippocras -hippocrateaceous -hippocrepian -hippocrepiform -hippodamous -hippodrome -hippodromic -hippodromist -hippogastronomy -hippogriff -hippogriffin -hippoid -hippolite -hippolith -hippological -hippologist -hippology -hippomachy -hippomancy -hippomanes -hippomelanin -hippometer -hippometric -hippometry -hipponosological -hipponosology -hippopathological -hippopathology -hippophagi -hippophagism -hippophagist -hippophagistical -hippophagous -hippophagy -hippophile -hippophobia -hippopod -hippopotami -hippopotamian -hippopotamic -hippopotamine -hippopotamoid -hippopotamus -hippotigrine -hippotomical -hippotomist -hippotomy -hippotragine -hippurate -hippuric -hippurid -hippurite -hippuritic -hippuritoid -hippus -hippy -hipshot -hipwort -hirable -hiragana -hircarra -hircine -hircinous -hircocerf -hircocervus -hircosity -hire -hired -hireless -hireling -hireman -hirer -hirmologion -hirmos -hiro -hirondelle -hirple -hirrient -hirse -hirsel -hirsle -hirsute -hirsuteness -hirsuties -hirsutism -hirsutulous -hirtellous -hirudine -hirudinean -hirudiniculture -hirudinize -hirudinoid -hirundine -hirundinous -his -hish -hisingerite -hisn -hispanidad -hispid -hispidity -hispidulate -hispidulous -hiss -hisser -hissing -hissingly -hissproof -hist -histaminase -histamine -histaminic -histidine -histie -histiocyte -histiocytic -histioid -histiology -histoblast -histochemic -histochemical -histochemistry -histoclastic -histocyte -histodiagnosis -histodialysis -histodialytic -histogen -histogenesis -histogenetic -histogenetically -histogenic -histogenous -histogeny -histogram -histographer -histographic -histographical -histography -histoid -histologic -histological -histologically -histologist -histology -histolysis -histolytic -histometabasis -histomorphological -histomorphologically -histomorphology -histon -histonal -histone -histonomy -histopathologic -histopathological -histopathologist -histopathology -histophyly -histophysiological -histophysiology -histoplasmin -histoplasmosis -historial -historian -historiated -historic -historical -historically -historicalness -historician -historicism -historicity -historicize -historicocabbalistical -historicocritical -historicocultural -historicodogmatic -historicogeographical -historicophilosophica -historicophysical -historicopolitical -historicoprophetic -historicoreligious -historics -historicus -historied -historier -historiette -historify -historiograph -historiographer -historiographership -historiographic -historiographical -historiographically -historiography -historiological -historiology -historiometric -historiometry -historionomer -historious -historism -historize -history -histotherapist -histotherapy -histotome -histotomy -histotrophic -histotrophy -histotropic -histozoic -histozyme -histrio -histrion -histrionic -histrionical -histrionically -histrionicism -histrionism -hit -hitch -hitcher -hitchhike -hitchhiker -hitchily -hitchiness -hitchproof -hitchy -hithe -hither -hithermost -hitherto -hitherward -hitless -hittable -hitter -hive -hiveless -hiver -hives -hiveward -hizz -ho -hoar -hoard -hoarder -hoarding -hoardward -hoarfrost -hoarhead -hoarheaded -hoarhound -hoarily -hoariness -hoarish -hoarness -hoarse -hoarsely -hoarsen -hoarseness -hoarstone -hoarwort -hoary -hoaryheaded -hoast -hoastman -hoatzin -hoax -hoaxee -hoaxer -hoaxproof -hob -hobber -hobbet -hobbil -hobble -hobblebush -hobbledehoy -hobbledehoydom -hobbledehoyhood -hobbledehoyish -hobbledehoyishness -hobbledehoyism -hobbledygee -hobbler -hobbling -hobblingly -hobbly -hobby -hobbyhorse -hobbyhorsical -hobbyhorsically -hobbyism -hobbyist -hobbyless -hobgoblin -hoblike -hobnail -hobnailed -hobnailer -hobnob -hobo -hoboism -hobthrush -hocco -hock -hockelty -hocker -hocket -hockey -hockshin -hocky -hocus -hod -hodden -hodder -hoddle -hoddy -hodening -hodful -hodgepodge -hodgkinsonite -hodiernal -hodman -hodmandod -hodograph -hodometer -hodometrical -hoe -hoecake -hoedown -hoeful -hoer -hoernesite -hog -hoga -hogan -hogback -hogbush -hogfish -hogframe -hogged -hogger -hoggerel -hoggery -hogget -hoggie -hoggin -hoggish -hoggishly -hoggishness -hoggism -hoggy -hogherd -hoghide -hoghood -hoglike -hogling -hogmace -hogmanay -hognose -hognut -hogpen -hogreeve -hogrophyte -hogshead -hogship -hogshouther -hogskin -hogsty -hogward -hogwash -hogweed -hogwort -hogyard -hoi -hoick -hoin -hoise -hoist -hoistaway -hoister -hoisting -hoistman -hoistway -hoit -hoju -hokey -hokeypokey -hokum -holagogue -holarctic -holard -holarthritic -holarthritis -holaspidean -holcad -holcodont -hold -holdable -holdall -holdback -holden -holdenite -holder -holdership -holdfast -holdfastness -holding -holdingly -holdout -holdover -holdsman -holdup -hole -holeable -holectypoid -holeless -holeman -holeproof -holer -holethnic -holethnos -holewort -holey -holia -holiday -holidayer -holidayism -holidaymaker -holidaymaking -holily -holiness -holing -holinight -holism -holistic -holistically -holl -holla -hollaite -hollandaise -hollandite -holler -hollin -holliper -hollo -hollock -hollong -hollow -hollower -hollowfaced -hollowfoot -hollowhearted -hollowheartedness -hollowly -hollowness -holluschick -holly -hollyhock -holm -holmberry -holmgang -holmia -holmic -holmium -holmos -holobaptist -holobenthic -holoblastic -holoblastically -holobranch -holocaine -holocarpic -holocarpous -holocaust -holocaustal -holocaustic -holocentrid -holocentroid -holocephalan -holocephalian -holocephalous -holochoanitic -holochoanoid -holochoanoidal -holochordate -holochroal -holoclastic -holocrine -holocryptic -holocrystalline -holodactylic -holodedron -hologamous -hologamy -hologastrula -hologastrular -holognathous -hologonidium -holograph -holographic -holographical -holohedral -holohedric -holohedrism -holohemihedral -holohyaline -holomastigote -holometabole -holometabolian -holometabolic -holometabolism -holometabolous -holometaboly -holometer -holomorph -holomorphic -holomorphism -holomorphosis -holomorphy -holomyarian -holoparasite -holoparasitic -holophane -holophotal -holophote -holophotometer -holophrase -holophrasis -holophrasm -holophrastic -holophyte -holophytic -holoplankton -holoplanktonic -holoplexia -holopneustic -holoproteide -holoptic -holoptychian -holoptychiid -holoquinoid -holoquinoidal -holoquinonic -holoquinonoid -holorhinal -holosaprophyte -holosaprophytic -holosericeous -holoside -holosiderite -holosiphonate -holosomatous -holospondaic -holostean -holosteous -holosteric -holostomate -holostomatous -holostome -holostomous -holostylic -holosymmetric -holosymmetrical -holosymmetry -holosystematic -holosystolic -holothecal -holothoracic -holothurian -holothurioid -holotonia -holotonic -holotony -holotrich -holotrichal -holotrichous -holotype -holour -holozoic -holster -holstered -holt -holy -holyday -holyokeite -holystone -holytide -homage -homageable -homager -homalogonatous -homalographic -homaloid -homaloidal -homalosternal -homarine -homaroid -homatomic -homaxial -homaxonial -homaxonic -home -homebody -homeborn -homebound -homebred -homecomer -homecraft -homecroft -homecrofter -homecrofting -homefarer -homefelt -homegoer -homekeeper -homekeeping -homeland -homelander -homeless -homelessly -homelessness -homelet -homelike -homelikeness -homelily -homeliness -homeling -homely -homelyn -homemade -homemaker -homemaking -homeoblastic -homeochromatic -homeochromatism -homeochronous -homeocrystalline -homeogenic -homeogenous -homeoid -homeoidal -homeoidality -homeokinesis -homeokinetic -homeomerous -homeomorph -homeomorphic -homeomorphism -homeomorphous -homeomorphy -homeopath -homeopathic -homeopathically -homeopathician -homeopathicity -homeopathist -homeopathy -homeophony -homeoplasia -homeoplastic -homeoplasy -homeopolar -homeosis -homeostasis -homeostatic -homeotic -homeotransplant -homeotransplantation -homeotype -homeotypic -homeotypical -homeowner -homeozoic -homer -homeseeker -homesick -homesickly -homesickness -homesite -homesome -homespun -homestall -homestead -homesteader -homester -homestretch -homeward -homewardly -homework -homeworker -homewort -homey -homeyness -homicidal -homicidally -homicide -homicidious -homiculture -homilete -homiletic -homiletical -homiletically -homiletics -homiliarium -homiliary -homilist -homilite -homilize -homily -hominal -hominess -hominid -hominiform -hominify -hominine -hominisection -hominivorous -hominoid -hominy -homish -homishness -homo -homoanisaldehyde -homoanisic -homoarecoline -homobaric -homoblastic -homoblasty -homocarpous -homocategoric -homocentric -homocentrical -homocentrically -homocerc -homocercal -homocercality -homocercy -homocerebrin -homochiral -homochlamydeous -homochromatic -homochromatism -homochrome -homochromic -homochromosome -homochromous -homochromy -homochronous -homoclinal -homocline -homocoelous -homocreosol -homocyclic -homodermic -homodermy -homodont -homodontism -homodox -homodoxian -homodromal -homodrome -homodromous -homodromy -homodynamic -homodynamous -homodynamy -homodyne -homoecious -homoeoarchy -homoeoblastic -homoeochromatic -homoeochronous -homoeocrystalline -homoeogenic -homoeogenous -homoeography -homoeokinesis -homoeomerae -homoeomeria -homoeomerian -homoeomerianism -homoeomeric -homoeomerical -homoeomerous -homoeomery -homoeomorph -homoeomorphic -homoeomorphism -homoeomorphous -homoeomorphy -homoeopath -homoeopathic -homoeopathically -homoeopathician -homoeopathicity -homoeopathist -homoeopathy -homoeophony -homoeophyllous -homoeoplasia -homoeoplastic -homoeoplasy -homoeopolar -homoeosis -homoeotel -homoeoteleutic -homoeoteleuton -homoeotic -homoeotopy -homoeotype -homoeotypic -homoeotypical -homoeozoic -homoerotic -homoerotism -homofermentative -homogametic -homogamic -homogamous -homogamy -homogangliate -homogen -homogenate -homogene -homogeneal -homogenealness -homogeneate -homogeneity -homogeneization -homogeneize -homogeneous -homogeneously -homogeneousness -homogenesis -homogenetic -homogenetical -homogenic -homogenization -homogenize -homogenizer -homogenous -homogentisic -homogeny -homoglot -homogone -homogonous -homogonously -homogony -homograft -homograph -homographic -homography -homohedral -homoiotherm -homoiothermal -homoiothermic -homoiothermism -homoiothermous -homoiousia -homoiousian -homoiousious -homolateral -homolecithal -homolegalis -homologate -homologation -homologic -homological -homologically -homologist -homologize -homologizer -homologon -homologoumena -homologous -homolographic -homolography -homologue -homology -homolosine -homolysin -homolysis -homomallous -homomeral -homomerous -homometrical -homometrically -homomorph -homomorphic -homomorphism -homomorphosis -homomorphous -homomorphy -homonomous -homonomy -homonuclear -homonym -homonymic -homonymous -homonymously -homonymy -homoousia -homoousious -homopathy -homoperiodic -homopetalous -homophene -homophenous -homophone -homophonic -homophonous -homophony -homophthalic -homophylic -homophyllous -homophyly -homopiperonyl -homoplasis -homoplasmic -homoplasmy -homoplast -homoplastic -homoplasy -homopolar -homopolarity -homopolic -homopter -homopteran -homopteron -homopterous -homorganic -homoseismal -homosexual -homosexualism -homosexualist -homosexuality -homosporous -homospory -homostyled -homostylic -homostylism -homostylous -homostyly -homosystemic -homotactic -homotatic -homotaxeous -homotaxia -homotaxial -homotaxially -homotaxic -homotaxis -homotaxy -homothallic -homothallism -homothetic -homothety -homotonic -homotonous -homotonously -homotony -homotopic -homotransplant -homotransplantation -homotropal -homotropous -homotypal -homotype -homotypic -homotypical -homotypy -homovanillic -homovanillin -homoveratric -homoveratrole -homozygosis -homozygosity -homozygote -homozygous -homozygousness -homrai -homuncle -homuncular -homunculus -homy -honda -hondo -hone -honest -honestly -honestness -honestone -honesty -honewort -honey -honeybee -honeyberry -honeybind -honeyblob -honeybloom -honeycomb -honeycombed -honeydew -honeydewed -honeydrop -honeyed -honeyedly -honeyedness -honeyfall -honeyflower -honeyfogle -honeyful -honeyhearted -honeyless -honeylike -honeylipped -honeymoon -honeymooner -honeymoonlight -honeymoonshine -honeymoonstruck -honeymoony -honeymouthed -honeypod -honeypot -honeystone -honeysuck -honeysucker -honeysuckle -honeysuckled -honeysweet -honeyware -honeywood -honeywort -hong -honied -honily -honk -honker -honor -honorability -honorable -honorableness -honorableship -honorably -honorance -honoraria -honorarily -honorarium -honorary -honoree -honorer -honoress -honorific -honorifically -honorless -honorous -honorsman -honorworthy -hontish -hontous -hooch -hoochinoo -hood -hoodcap -hooded -hoodedness -hoodful -hoodie -hoodless -hoodlike -hoodlum -hoodlumish -hoodlumism -hoodlumize -hoodman -hoodmold -hoodoo -hoodsheaf -hoodshy -hoodshyness -hoodwink -hoodwinkable -hoodwinker -hoodwise -hoodwort -hooey -hoof -hoofbeat -hoofbound -hoofed -hoofer -hoofiness -hoofish -hoofless -hooflet -hooflike -hoofmark -hoofprint -hoofrot -hoofs -hoofworm -hoofy -hook -hookah -hookaroon -hooked -hookedness -hookedwise -hooker -hookerman -hookers -hookheal -hookish -hookless -hooklet -hooklike -hookmaker -hookmaking -hookman -hooknose -hooksmith -hooktip -hookum -hookup -hookweed -hookwise -hookworm -hookwormer -hookwormy -hooky -hooligan -hooliganism -hooliganize -hoolock -hooly -hoon -hoonoomaun -hoop -hooped -hooper -hooping -hoopla -hoople -hoopless -hooplike -hoopmaker -hoopman -hoopoe -hoopstick -hoopwood -hoose -hoosegow -hoosh -hoot -hootay -hooter -hootingly -hoove -hooven -hoovey -hop -hopbine -hopbush -hopcrease -hope -hoped -hopeful -hopefully -hopefulness -hopeite -hopeless -hopelessly -hopelessness -hoper -hopi -hopingly -hoplite -hoplitic -hoplitodromos -hoplology -hoplomachic -hoplomachist -hoplomachos -hoplomachy -hoplonemertean -hoplonemertine -hopoff -hopped -hopper -hopperburn -hopperdozer -hopperette -hoppergrass -hopperings -hopperman -hoppers -hoppestere -hoppet -hoppingly -hoppity -hopple -hoppy -hopscotch -hopscotcher -hoptoad -hopvine -hopyard -hora -horal -horary -horbachite -hordarian -hordary -horde -hordeaceous -hordeiform -hordein -hordenine -horehound -horismology -horizometer -horizon -horizonless -horizontal -horizontalism -horizontality -horizontalization -horizontalize -horizontally -horizontalness -horizontic -horizontical -horizontically -horizonward -horme -hormic -hormigo -hormion -hormist -hormogon -hormogonium -hormogonous -hormonal -hormone -hormonic -hormonize -hormonogenesis -hormonogenic -hormonology -hormonopoiesis -hormonopoietic -hormos -horn -hornbeam -hornbill -hornblende -hornblendic -hornblendite -hornblendophyre -hornblower -hornbook -horned -hornedness -horner -hornerah -hornet -hornety -hornfair -hornfels -hornfish -hornful -horngeld -hornify -hornily -horniness -horning -hornish -hornist -hornito -hornless -hornlessness -hornlet -hornlike -hornotine -hornpipe -hornplant -hornsman -hornstay -hornstone -hornswoggle -horntail -hornthumb -horntip -hornwood -hornwork -hornworm -hornwort -horny -hornyhanded -hornyhead -horograph -horographer -horography -horokaka -horologe -horologer -horologic -horological -horologically -horologiography -horologist -horologium -horologue -horology -horometrical -horometry -horopito -horopter -horopteric -horoptery -horoscopal -horoscope -horoscoper -horoscopic -horoscopical -horoscopist -horoscopy -horrendous -horrendously -horrent -horrescent -horreum -horribility -horrible -horribleness -horribly -horrid -horridity -horridly -horridness -horrific -horrifically -horrification -horrify -horripilant -horripilate -horripilation -horrisonant -horror -horrorful -horrorish -horrorist -horrorize -horrormonger -horrormongering -horrorous -horrorsome -horse -horseback -horsebacker -horseboy -horsebreaker -horsecar -horsecloth -horsecraft -horsedom -horsefair -horsefettler -horsefight -horsefish -horseflesh -horsefly -horsefoot -horsegate -horsehair -horsehaired -horsehead -horseherd -horsehide -horsehood -horsehoof -horsejockey -horsekeeper -horselaugh -horselaugher -horselaughter -horseleech -horseless -horselike -horseload -horseman -horsemanship -horsemastership -horsemint -horsemonger -horseplay -horseplayful -horsepond -horsepower -horsepox -horser -horseshoe -horseshoer -horsetail -horsetongue -horsetree -horseway -horseweed -horsewhip -horsewhipper -horsewoman -horsewomanship -horsewood -horsfordite -horsify -horsily -horsiness -horsing -horst -horsy -horsyism -hortation -hortative -hortatively -hortator -hortatorily -hortatory -hortensial -hortensian -horticultural -horticulturally -horticulture -horticulturist -hortite -hortonolite -hortulan -hory -hosanna -hose -hosed -hosel -hoseless -hoselike -hoseman -hosier -hosiery -hosiomartyr -hospice -hospitable -hospitableness -hospitably -hospitage -hospital -hospitalary -hospitaler -hospitalism -hospitality -hospitalization -hospitalize -hospitant -hospitate -hospitation -hospitator -hospitious -hospitium -hospitize -hospodar -hospodariat -hospodariate -host -hostage -hostager -hostageship -hostel -hosteler -hostelry -hoster -hostess -hostie -hostile -hostilely -hostileness -hostility -hostilize -hosting -hostler -hostlership -hostlerwife -hostless -hostly -hostry -hostship -hot -hotbed -hotblood -hotbox -hotbrained -hotch -hotchpot -hotchpotch -hotchpotchly -hotel -hoteldom -hotelhood -hotelier -hotelization -hotelize -hotelkeeper -hotelless -hotelward -hotfoot -hothead -hotheaded -hotheadedly -hotheadedness -hothearted -hotheartedly -hotheartedness -hothouse -hoti -hotly -hotmouthed -hotness -hotspur -hotspurred -hotter -hottery -hottish -houbara -hough -houghband -hougher -houghite -houghmagandy -hounce -hound -hounder -houndfish -hounding -houndish -houndlike -houndman -houndsbane -houndsberry -houndshark -houndy -houppelande -hour -hourful -hourglass -houri -hourless -hourly -housage -housal -house -houseball -houseboat -houseboating -housebote -housebound -houseboy -housebreak -housebreaker -housebreaking -housebroke -housebroken -housebug -housebuilder -housebuilding -housecarl -housecoat -housecraft -housefast -housefather -housefly -houseful -housefurnishings -household -householder -householdership -householding -householdry -housekeep -housekeeper -housekeeperlike -housekeeperly -housekeeping -housel -houseleek -houseless -houselessness -houselet -houseline -houseling -housemaid -housemaidenly -housemaiding -housemaidy -houseman -housemaster -housemastership -housemate -housemating -houseminder -housemistress -housemother -housemotherly -houseowner -houser -houseridden -houseroom -housesmith -housetop -houseward -housewares -housewarm -housewarmer -housewarming -housewear -housewife -housewifeliness -housewifely -housewifery -housewifeship -housewifish -housewive -housework -housewright -housing -housty -housy -houtou -houvari -hove -hovedance -hovel -hoveler -hoven -hover -hoverer -hovering -hoveringly -hoverly -how -howadji -howardite -howbeit -howdah -howder -howdie -howdy -howe -howel -however -howff -howish -howitzer -howk -howkit -howl -howler -howlet -howling -howlingly -howlite -howso -howsoever -howsomever -hox -hoy -hoyden -hoydenhood -hoydenish -hoydenism -hoyle -hoyman -huaca -huaco -huajillo -huamuchil -huantajayite -huaracho -huarizo -hub -hubb -hubba -hubber -hubble -hubbly -hubbub -hubbuboo -hubby -hubmaker -hubmaking -hubnerite -hubristic -hubshi -huccatoon -huchen -hucho -huck -huckaback -huckle -huckleback -hucklebacked -huckleberry -hucklebone -huckmuck -huckster -hucksterage -hucksterer -hucksteress -hucksterize -huckstery -hud -huddle -huddledom -huddlement -huddler -huddling -huddlingly -huddock -huddroun -huddup -hudsonite -hue -hued -hueful -hueless -huelessness -huer -huff -huffier -huffily -huffiness -huffingly -huffish -huffishly -huffishness -huffle -huffler -huffy -hug -huge -hugelite -hugely -hugeness -hugeous -hugeously -hugeousness -huggable -hugger -huggermugger -huggermuggery -hugging -huggingly -huggle -hugsome -huh -huia -huipil -huisache -huiscoyol -huitain -huke -hula -huldee -hulk -hulkage -hulking -hulky -hull -hullabaloo -huller -hullock -hulloo -hulotheism -hulsite -hulster -hulu -hulver -hulverhead -hulverheaded -hum -human -humane -humanely -humaneness -humanhood -humanics -humanification -humaniform -humaniformian -humanify -humanish -humanism -humanist -humanistic -humanistical -humanistically -humanitarian -humanitarianism -humanitarianist -humanitarianize -humanitary -humanitian -humanity -humanitymonger -humanization -humanize -humanizer -humankind -humanlike -humanly -humanness -humanoid -humate -humble -humblebee -humblehearted -humblemouthed -humbleness -humbler -humblie -humblingly -humbly -humbo -humboldtilite -humboldtine -humboldtite -humbug -humbugability -humbugable -humbugger -humbuggery -humbuggism -humbuzz -humdinger -humdrum -humdrumminess -humdrummish -humdrummishness -humdudgeon -humect -humectant -humectate -humectation -humective -humeral -humeri -humeroabdominal -humerocubital -humerodigital -humerodorsal -humerometacarpal -humeroradial -humeroscapular -humeroulnar -humerus -humet -humetty -humhum -humic -humicubation -humid -humidate -humidification -humidifier -humidify -humidistat -humidity -humidityproof -humidly -humidness -humidor -humific -humification -humifuse -humify -humiliant -humiliate -humiliating -humiliatingly -humiliation -humiliative -humiliator -humiliatory -humilific -humilitude -humility -humin -humistratous -humite -humlie -hummel -hummeler -hummer -hummie -humming -hummingbird -hummock -hummocky -humor -humoral -humoralism -humoralist -humoralistic -humoresque -humoresquely -humorful -humorific -humorism -humorist -humoristic -humoristical -humorize -humorless -humorlessness -humorology -humorous -humorously -humorousness -humorproof -humorsome -humorsomely -humorsomeness -humourful -humous -hump -humpback -humpbacked -humped -humph -humpiness -humpless -humpty -humpy -humstrum -humulene -humulone -humus -humuslike -hunch -hunchback -hunchbacked -hunchet -hunchy -hundi -hundred -hundredal -hundredary -hundreder -hundredfold -hundredman -hundredpenny -hundredth -hundredweight -hundredwork -hung -hungarite -hunger -hungerer -hungeringly -hungerless -hungerly -hungerproof -hungerweed -hungrify -hungrily -hungriness -hungry -hunh -hunk -hunker -hunkerous -hunkerousness -hunkers -hunkies -hunks -hunky -hunt -huntable -huntedly -hunterlike -huntilite -hunting -huntress -huntsman -huntsmanship -huntswoman -hup -hupaithric -hura -hurcheon -hurdies -hurdis -hurdle -hurdleman -hurdler -hurdlewise -hurds -hure -hureaulite -hureek -hurgila -hurkle -hurl -hurlbarrow -hurled -hurler -hurley -hurleyhouse -hurling -hurlock -hurly -huron -hurr -hurrah -hurricane -hurricanize -hurricano -hurried -hurriedly -hurriedness -hurrier -hurrisome -hurrock -hurroo -hurroosh -hurry -hurryingly -hurryproof -hursinghar -hurst -hurt -hurtable -hurted -hurter -hurtful -hurtfully -hurtfulness -hurting -hurtingest -hurtle -hurtleberry -hurtless -hurtlessly -hurtlessness -hurtlingly -hurtsome -hurty -husband -husbandable -husbandage -husbander -husbandfield -husbandhood -husbandland -husbandless -husbandlike -husbandliness -husbandly -husbandman -husbandress -husbandry -husbandship -huse -hush -hushable -hushaby -hushcloth -hushedly -husheen -hushel -husher -hushful -hushfully -hushing -hushingly -hushion -husho -husk -huskanaw -husked -huskened -husker -huskershredder -huskily -huskiness -husking -huskroot -huskwort -husky -huso -huspil -huss -hussar -hussy -hussydom -hussyness -husting -hustle -hustlecap -hustlement -hustler -hut -hutch -hutcher -hutchet -hutchinsonite -huthold -hutholder -hutia -hutkeeper -hutlet -hutment -huttoning -huttonweed -hutukhtu -huvelyk -huzoor -huzz -huzza -huzzard -hyacinth -hyacinthian -hyacinthine -hyaena -hyaenodont -hyaenodontoid -hyalescence -hyalescent -hyaline -hyalinization -hyalinize -hyalinocrystalline -hyalinosis -hyalite -hyalitis -hyaloandesite -hyalobasalt -hyalocrystalline -hyalodacite -hyalogen -hyalograph -hyalographer -hyalography -hyaloid -hyaloiditis -hyaloliparite -hyalolith -hyalomelan -hyalomucoid -hyalophagia -hyalophane -hyalophyre -hyalopilitic -hyaloplasm -hyaloplasma -hyaloplasmic -hyalopsite -hyalopterous -hyalosiderite -hyalotekite -hyalotype -hyaluronic -hyaluronidase -hybodont -hybosis -hybrid -hybridal -hybridation -hybridism -hybridist -hybridity -hybridizable -hybridization -hybridize -hybridizer -hybridous -hydantoate -hydantoic -hydantoin -hydathode -hydatid -hydatidiform -hydatidinous -hydatidocele -hydatiform -hydatigenous -hydatogenesis -hydatogenic -hydatogenous -hydatoid -hydatomorphic -hydatomorphism -hydatopneumatic -hydatopneumatolytic -hydatopyrogenic -hydatoscopy -hydnaceous -hydnocarpate -hydnocarpic -hydnoid -hydnoraceous -hydracetin -hydrachnid -hydracid -hydracoral -hydracrylate -hydracrylic -hydractinian -hydradephagan -hydradephagous -hydragogue -hydragogy -hydramine -hydramnion -hydramnios -hydrangeaceous -hydrant -hydranth -hydrarch -hydrargillite -hydrargyrate -hydrargyria -hydrargyriasis -hydrargyric -hydrargyrism -hydrargyrosis -hydrargyrum -hydrarthrosis -hydrarthrus -hydrastine -hydrate -hydrated -hydration -hydrator -hydratropic -hydraucone -hydraulic -hydraulically -hydraulician -hydraulicity -hydraulicked -hydraulicon -hydraulics -hydraulist -hydraulus -hydrazide -hydrazidine -hydrazimethylene -hydrazine -hydrazino -hydrazo -hydrazoate -hydrazobenzene -hydrazoic -hydrazone -hydrazyl -hydremia -hydremic -hydrencephalocele -hydrencephaloid -hydrencephalus -hydria -hydriatric -hydriatrist -hydriatry -hydric -hydrically -hydride -hydriform -hydrindene -hydriodate -hydriodic -hydriodide -hydriotaphia -hydro -hydroa -hydroadipsia -hydroaeric -hydroalcoholic -hydroaromatic -hydroatmospheric -hydroaviation -hydrobarometer -hydrobenzoin -hydrobilirubin -hydrobiological -hydrobiologist -hydrobiology -hydrobiosis -hydrobiplane -hydrobomb -hydroboracite -hydroborofluoric -hydrobranchiate -hydrobromate -hydrobromic -hydrobromide -hydrocarbide -hydrocarbon -hydrocarbonaceous -hydrocarbonate -hydrocarbonic -hydrocarbonous -hydrocarbostyril -hydrocardia -hydrocaryaceous -hydrocatalysis -hydrocauline -hydrocaulus -hydrocele -hydrocellulose -hydrocephalic -hydrocephalocele -hydrocephaloid -hydrocephalous -hydrocephalus -hydrocephaly -hydroceramic -hydrocerussite -hydrocharidaceous -hydrocharitaceous -hydrochemical -hydrochemistry -hydrochlorate -hydrochlorauric -hydrochloric -hydrochloride -hydrochlorplatinic -hydrochlorplatinous -hydrocholecystis -hydrocinchonine -hydrocinnamic -hydrocirsocele -hydrocladium -hydroclastic -hydroclimate -hydrocobalticyanic -hydrocoele -hydrocollidine -hydroconion -hydrocoralline -hydrocorisan -hydrocotarnine -hydrocoumaric -hydrocupreine -hydrocyanate -hydrocyanic -hydrocyanide -hydrocycle -hydrocyclic -hydrocyclist -hydrocyst -hydrocystic -hydrodrome -hydrodromican -hydrodynamic -hydrodynamical -hydrodynamics -hydrodynamometer -hydroeconomics -hydroelectric -hydroelectricity -hydroelectrization -hydroergotinine -hydroextract -hydroextractor -hydroferricyanic -hydroferrocyanate -hydroferrocyanic -hydrofluate -hydrofluoboric -hydrofluoric -hydrofluorid -hydrofluoride -hydrofluosilicate -hydrofluosilicic -hydrofluozirconic -hydrofoil -hydroforming -hydrofranklinite -hydrofuge -hydrogalvanic -hydrogel -hydrogen -hydrogenase -hydrogenate -hydrogenation -hydrogenator -hydrogenic -hydrogenide -hydrogenium -hydrogenization -hydrogenize -hydrogenolysis -hydrogenous -hydrogeological -hydrogeology -hydroglider -hydrognosy -hydrogode -hydrograph -hydrographer -hydrographic -hydrographical -hydrographically -hydrography -hydrogymnastics -hydrohalide -hydrohematite -hydrohemothorax -hydroid -hydroidean -hydroiodic -hydrokinetic -hydrokinetical -hydrokinetics -hydrol -hydrolase -hydrolatry -hydrolize -hydrologic -hydrological -hydrologically -hydrologist -hydrology -hydrolysis -hydrolyst -hydrolyte -hydrolytic -hydrolyzable -hydrolyzate -hydrolyzation -hydrolyze -hydromagnesite -hydromancer -hydromancy -hydromania -hydromaniac -hydromantic -hydromantical -hydromantically -hydrome -hydromechanical -hydromechanics -hydromedusa -hydromedusan -hydromedusoid -hydromel -hydromeningitis -hydromeningocele -hydrometallurgical -hydrometallurgically -hydrometallurgy -hydrometamorphism -hydrometeor -hydrometeorological -hydrometeorology -hydrometer -hydrometra -hydrometric -hydrometrical -hydrometrid -hydrometry -hydromica -hydromicaceous -hydromonoplane -hydromorph -hydromorphic -hydromorphous -hydromorphy -hydromotor -hydromyelia -hydromyelocele -hydromyoma -hydrone -hydronegative -hydronephelite -hydronephrosis -hydronephrotic -hydronitric -hydronitroprussic -hydronitrous -hydronium -hydroparacoumaric -hydropath -hydropathic -hydropathical -hydropathist -hydropathy -hydropericarditis -hydropericardium -hydroperiod -hydroperitoneum -hydroperitonitis -hydroperoxide -hydrophane -hydrophanous -hydrophid -hydrophil -hydrophile -hydrophilic -hydrophilid -hydrophilism -hydrophilite -hydrophiloid -hydrophilous -hydrophily -hydrophobe -hydrophobia -hydrophobic -hydrophobical -hydrophobist -hydrophobophobia -hydrophobous -hydrophoby -hydrophoid -hydrophone -hydrophoran -hydrophore -hydrophoria -hydrophorous -hydrophthalmia -hydrophthalmos -hydrophthalmus -hydrophylacium -hydrophyll -hydrophyllaceous -hydrophylliaceous -hydrophyllium -hydrophysometra -hydrophyte -hydrophytic -hydrophytism -hydrophyton -hydrophytous -hydropic -hydropical -hydropically -hydropigenous -hydroplane -hydroplanula -hydroplatinocyanic -hydroplutonic -hydropneumatic -hydropneumatosis -hydropneumopericardium -hydropneumothorax -hydropolyp -hydroponic -hydroponicist -hydroponics -hydroponist -hydropositive -hydropot -hydropropulsion -hydrops -hydropsy -hydroptic -hydropult -hydropultic -hydroquinine -hydroquinol -hydroquinoline -hydroquinone -hydrorachis -hydrorhiza -hydrorhizal -hydrorrhachis -hydrorrhachitis -hydrorrhea -hydrorrhoea -hydrorubber -hydrosalpinx -hydrosalt -hydrosarcocele -hydroscope -hydroscopic -hydroscopical -hydroscopicity -hydroscopist -hydroselenic -hydroselenide -hydroselenuret -hydroseparation -hydrosilicate -hydrosilicon -hydrosol -hydrosomal -hydrosomatous -hydrosome -hydrosorbic -hydrosphere -hydrospire -hydrospiric -hydrostat -hydrostatic -hydrostatical -hydrostatically -hydrostatician -hydrostatics -hydrostome -hydrosulphate -hydrosulphide -hydrosulphite -hydrosulphocyanic -hydrosulphurated -hydrosulphuret -hydrosulphureted -hydrosulphuric -hydrosulphurous -hydrosulphuryl -hydrotachymeter -hydrotactic -hydrotalcite -hydrotasimeter -hydrotaxis -hydrotechnic -hydrotechnical -hydrotechnologist -hydrotechny -hydroterpene -hydrotheca -hydrothecal -hydrotherapeutic -hydrotherapeutics -hydrotherapy -hydrothermal -hydrothoracic -hydrothorax -hydrotic -hydrotical -hydrotimeter -hydrotimetric -hydrotimetry -hydrotomy -hydrotropic -hydrotropism -hydroturbine -hydrotype -hydrous -hydrovane -hydroxamic -hydroxamino -hydroxide -hydroximic -hydroxy -hydroxyacetic -hydroxyanthraquinone -hydroxybutyricacid -hydroxyketone -hydroxyl -hydroxylactone -hydroxylamine -hydroxylate -hydroxylation -hydroxylic -hydroxylization -hydroxylize -hydrozincite -hydrozoal -hydrozoan -hydrozoic -hydrozoon -hydrula -hydurilate -hydurilic -hyena -hyenadog -hyenanchin -hyenic -hyeniform -hyenine -hyenoid -hyetal -hyetograph -hyetographic -hyetographical -hyetographically -hyetography -hyetological -hyetology -hyetometer -hyetometrograph -hygeiolatry -hygeist -hygeistic -hygeology -hygiantic -hygiantics -hygiastic -hygiastics -hygieist -hygienal -hygiene -hygienic -hygienical -hygienically -hygienics -hygienist -hygienization -hygienize -hygiologist -hygiology -hygric -hygrine -hygroblepharic -hygrodeik -hygroexpansivity -hygrograph -hygrology -hygroma -hygromatous -hygrometer -hygrometric -hygrometrical -hygrometrically -hygrometry -hygrophaneity -hygrophanous -hygrophilous -hygrophobia -hygrophthalmic -hygrophyte -hygrophytic -hygroplasm -hygroplasma -hygroscope -hygroscopic -hygroscopical -hygroscopically -hygroscopicity -hygroscopy -hygrostat -hygrostatics -hygrostomia -hygrothermal -hygrothermograph -hying -hyke -hylactic -hylactism -hylarchic -hylarchical -hyle -hyleg -hylegiacal -hylic -hylicism -hylicist -hylism -hylist -hylobatian -hylobatic -hylobatine -hylogenesis -hylogeny -hyloid -hylology -hylomorphic -hylomorphical -hylomorphism -hylomorphist -hylomorphous -hylopathism -hylopathist -hylopathy -hylophagous -hylotheism -hylotheist -hylotheistic -hylotheistical -hylotomous -hylozoic -hylozoism -hylozoist -hylozoistic -hylozoistically -hymen -hymenal -hymeneal -hymeneally -hymeneals -hymenean -hymenial -hymenic -hymenicolar -hymeniferous -hymeniophore -hymenium -hymenogeny -hymenoid -hymenomycetal -hymenomycete -hymenomycetoid -hymenomycetous -hymenophore -hymenophorum -hymenophyllaceous -hymenopter -hymenopteran -hymenopterist -hymenopterological -hymenopterologist -hymenopterology -hymenopteron -hymenopterous -hymenotomy -hymn -hymnal -hymnarium -hymnary -hymnbook -hymner -hymnic -hymnist -hymnless -hymnlike -hymnode -hymnodical -hymnodist -hymnody -hymnographer -hymnography -hymnologic -hymnological -hymnologically -hymnologist -hymnology -hymnwise -hynde -hyne -hyobranchial -hyocholalic -hyocholic -hyoepiglottic -hyoepiglottidean -hyoglossal -hyoglossus -hyoglycocholic -hyoid -hyoidal -hyoidan -hyoideal -hyoidean -hyoides -hyolithid -hyolithoid -hyomandibula -hyomandibular -hyomental -hyoplastral -hyoplastron -hyoscapular -hyoscine -hyoscyamine -hyosternal -hyosternum -hyostylic -hyostyly -hyothere -hyothyreoid -hyothyroid -hyp -hypabyssal -hypaethral -hypaethron -hypaethros -hypaethrum -hypalgesia -hypalgia -hypalgic -hypallactic -hypallage -hypanthial -hypanthium -hypantrum -hypapophysial -hypapophysis -hyparterial -hypaspist -hypate -hypaton -hypautomorphic -hypaxial -hyper -hyperabelian -hyperabsorption -hyperaccurate -hyperacid -hyperacidaminuria -hyperacidity -hyperacoustics -hyperaction -hyperactive -hyperactivity -hyperacuity -hyperacusia -hyperacusis -hyperacute -hyperacuteness -hyperadenosis -hyperadiposis -hyperadiposity -hyperadrenalemia -hyperaeolism -hyperalbuminosis -hyperalgebra -hyperalgesia -hyperalgesic -hyperalgesis -hyperalgetic -hyperalimentation -hyperalkalinity -hyperaltruism -hyperaminoacidemia -hyperanabolic -hyperanarchy -hyperangelical -hyperaphia -hyperaphic -hyperapophyseal -hyperapophysial -hyperapophysis -hyperarchaeological -hyperarchepiscopal -hyperazotemia -hyperbarbarous -hyperbatic -hyperbatically -hyperbaton -hyperbola -hyperbolaeon -hyperbole -hyperbolic -hyperbolically -hyperbolicly -hyperbolism -hyperbolize -hyperboloid -hyperboloidal -hyperboreal -hyperborean -hyperbrachycephal -hyperbrachycephalic -hyperbrachycephaly -hyperbrachycranial -hyperbrachyskelic -hyperbranchia -hyperbrutal -hyperbulia -hypercalcemia -hypercarbamidemia -hypercarbureted -hypercarburetted -hypercarnal -hypercatalectic -hypercatalexis -hypercatharsis -hypercathartic -hypercathexis -hypercenosis -hyperchamaerrhine -hyperchlorhydria -hyperchloric -hypercholesterinemia -hypercholesterolemia -hypercholia -hypercivilization -hypercivilized -hyperclassical -hyperclimax -hypercoagulability -hypercoagulable -hypercomplex -hypercomposite -hyperconcentration -hypercone -hyperconfident -hyperconformist -hyperconscientious -hyperconscientiousness -hyperconscious -hyperconsciousness -hyperconservatism -hyperconstitutional -hypercoracoid -hypercorrect -hypercorrection -hypercorrectness -hypercosmic -hypercreaturely -hypercritic -hypercritical -hypercritically -hypercriticism -hypercriticize -hypercryalgesia -hypercube -hypercyanotic -hypercycle -hypercylinder -hyperdactyl -hyperdactylia -hyperdactyly -hyperdeify -hyperdelicacy -hyperdelicate -hyperdemocracy -hyperdemocratic -hyperdeterminant -hyperdiabolical -hyperdialectism -hyperdiapason -hyperdiapente -hyperdiastole -hyperdiatessaron -hyperdiazeuxis -hyperdicrotic -hyperdicrotism -hyperdicrotous -hyperdimensional -hyperdimensionality -hyperdissyllable -hyperdistention -hyperditone -hyperdivision -hyperdolichocephal -hyperdolichocephalic -hyperdolichocephaly -hyperdolichocranial -hyperdoricism -hyperdulia -hyperdulic -hyperdulical -hyperelegant -hyperelliptic -hyperemesis -hyperemetic -hyperemia -hyperemic -hyperemotivity -hyperemphasize -hyperenthusiasm -hypereosinophilia -hyperephidrosis -hyperequatorial -hypererethism -hyperessence -hyperesthesia -hyperesthetic -hyperethical -hypereuryprosopic -hypereutectic -hypereutectoid -hyperexaltation -hyperexcitability -hyperexcitable -hyperexcitement -hyperexcursive -hyperexophoria -hyperextend -hyperextension -hyperfastidious -hyperfederalist -hyperfine -hyperflexion -hyperfocal -hyperfunction -hyperfunctional -hyperfunctioning -hypergalactia -hypergamous -hypergamy -hypergenesis -hypergenetic -hypergeometric -hypergeometrical -hypergeometry -hypergeusia -hypergeustia -hyperglycemia -hyperglycemic -hyperglycorrhachia -hyperglycosuria -hypergoddess -hypergol -hypergolic -hypergrammatical -hyperhedonia -hyperhemoglobinemia -hyperhilarious -hyperhypocrisy -hypericaceous -hypericin -hypericism -hypericum -hyperidealistic -hyperideation -hyperimmune -hyperimmunity -hyperimmunization -hyperimmunize -hyperingenuity -hyperinosis -hyperinotic -hyperinsulinization -hyperinsulinize -hyperintellectual -hyperintelligence -hyperinvolution -hyperirritability -hyperirritable -hyperisotonic -hyperite -hyperkeratosis -hyperkinesia -hyperkinesis -hyperkinetic -hyperlactation -hyperleptoprosopic -hyperleucocytosis -hyperlipemia -hyperlipoidemia -hyperlithuria -hyperlogical -hyperlustrous -hypermagical -hypermakroskelic -hypermedication -hypermenorrhea -hypermetabolism -hypermetamorphic -hypermetamorphism -hypermetamorphosis -hypermetamorphotic -hypermetaphorical -hypermetaphysical -hypermetaplasia -hypermeter -hypermetric -hypermetrical -hypermetron -hypermetrope -hypermetropia -hypermetropic -hypermetropical -hypermetropy -hypermiraculous -hypermixolydian -hypermnesia -hypermnesic -hypermnesis -hypermnestic -hypermodest -hypermonosyllable -hypermoral -hypermorph -hypermorphism -hypermorphosis -hypermotile -hypermotility -hypermyotonia -hypermyotrophy -hypermyriorama -hypermystical -hypernatural -hypernephroma -hyperneuria -hyperneurotic -hypernic -hypernitrogenous -hypernomian -hypernomic -hypernormal -hypernote -hypernutrition -hyperoartian -hyperobtrusive -hyperodontogeny -hyperoon -hyperope -hyperopia -hyperopic -hyperorganic -hyperorthognathic -hyperorthognathous -hyperorthognathy -hyperosmia -hyperosmic -hyperostosis -hyperostotic -hyperothodox -hyperothodoxy -hyperotretan -hyperotretous -hyperoxidation -hyperoxide -hyperoxygenate -hyperoxygenation -hyperoxygenize -hyperpanegyric -hyperparasite -hyperparasitic -hyperparasitism -hyperparasitize -hyperparoxysm -hyperpathetic -hyperpatriotic -hyperpencil -hyperpepsinia -hyperper -hyperperistalsis -hyperperistaltic -hyperpersonal -hyperphalangeal -hyperphalangism -hyperpharyngeal -hyperphenomena -hyperphoria -hyperphoric -hyperphosphorescence -hyperphysical -hyperphysically -hyperphysics -hyperpiesia -hyperpiesis -hyperpietic -hyperpietist -hyperpigmentation -hyperpigmented -hyperpinealism -hyperpituitarism -hyperplagiarism -hyperplane -hyperplasia -hyperplasic -hyperplastic -hyperplatyrrhine -hyperploid -hyperploidy -hyperpnea -hyperpnoea -hyperpolysyllabic -hyperpredator -hyperprism -hyperproduction -hyperprognathous -hyperprophetical -hyperprosexia -hyperpulmonary -hyperpure -hyperpurist -hyperpyramid -hyperpyretic -hyperpyrexia -hyperpyrexial -hyperquadric -hyperrational -hyperreactive -hyperrealize -hyperresonance -hyperresonant -hyperreverential -hyperrhythmical -hyperridiculous -hyperritualism -hypersacerdotal -hypersaintly -hypersalivation -hypersceptical -hyperscholastic -hyperscrupulosity -hypersecretion -hypersensibility -hypersensitive -hypersensitiveness -hypersensitivity -hypersensitization -hypersensitize -hypersensual -hypersensualism -hypersensuous -hypersentimental -hypersolid -hypersomnia -hypersonic -hypersophisticated -hyperspace -hyperspatial -hyperspeculative -hypersphere -hyperspherical -hyperspiritualizing -hypersplenia -hypersplenism -hypersthene -hypersthenia -hypersthenic -hypersthenite -hyperstoic -hyperstrophic -hypersubtlety -hypersuggestibility -hypersuperlative -hypersurface -hypersusceptibility -hypersusceptible -hypersystole -hypersystolic -hypertechnical -hypertelic -hypertely -hypertense -hypertensin -hypertension -hypertensive -hyperterrestrial -hypertetrahedron -hyperthermal -hyperthermalgesia -hyperthermesthesia -hyperthermia -hyperthermic -hyperthermy -hyperthesis -hyperthetic -hyperthetical -hyperthyreosis -hyperthyroid -hyperthyroidism -hyperthyroidization -hyperthyroidize -hypertonia -hypertonic -hypertonicity -hypertonus -hypertorrid -hypertoxic -hypertoxicity -hypertragical -hypertragically -hypertranscendent -hypertrichosis -hypertridimensional -hypertrophic -hypertrophied -hypertrophous -hypertrophy -hypertropia -hypertropical -hypertype -hypertypic -hypertypical -hyperurbanism -hyperuresis -hypervascular -hypervascularity -hypervenosity -hyperventilate -hyperventilation -hypervigilant -hyperviscosity -hypervitalization -hypervitalize -hypervitaminosis -hypervolume -hyperwrought -hypesthesia -hypesthesic -hypethral -hypha -hyphaeresis -hyphal -hyphedonia -hyphema -hyphen -hyphenate -hyphenated -hyphenation -hyphenic -hyphenism -hyphenization -hyphenize -hypho -hyphodrome -hyphomycete -hyphomycetic -hyphomycetous -hyphomycosis -hypidiomorphic -hypidiomorphically -hypinosis -hypinotic -hypnaceous -hypnagogic -hypnesthesis -hypnesthetic -hypnoanalysis -hypnobate -hypnocyst -hypnody -hypnoetic -hypnogenesis -hypnogenetic -hypnoid -hypnoidal -hypnoidization -hypnoidize -hypnologic -hypnological -hypnologist -hypnology -hypnone -hypnophobia -hypnophobic -hypnophoby -hypnopompic -hypnoses -hypnosis -hypnosperm -hypnosporangium -hypnospore -hypnosporic -hypnotherapy -hypnotic -hypnotically -hypnotism -hypnotist -hypnotistic -hypnotizability -hypnotizable -hypnotization -hypnotize -hypnotizer -hypnotoid -hypnotoxin -hypo -hypoacid -hypoacidity -hypoactive -hypoactivity -hypoadenia -hypoadrenia -hypoaeolian -hypoalimentation -hypoalkaline -hypoalkalinity -hypoaminoacidemia -hypoantimonate -hypoazoturia -hypobasal -hypobatholithic -hypobenthonic -hypobenthos -hypoblast -hypoblastic -hypobole -hypobranchial -hypobranchiate -hypobromite -hypobromous -hypobulia -hypobulic -hypocalcemia -hypocarp -hypocarpium -hypocarpogean -hypocatharsis -hypocathartic -hypocathexis -hypocaust -hypocentrum -hypocephalus -hypochil -hypochilium -hypochlorhydria -hypochlorhydric -hypochloric -hypochlorite -hypochlorous -hypochloruria -hypochnose -hypochondria -hypochondriac -hypochondriacal -hypochondriacally -hypochondriacism -hypochondrial -hypochondriasis -hypochondriast -hypochondrium -hypochondry -hypochordal -hypochromia -hypochrosis -hypochylia -hypocist -hypocleidian -hypocleidium -hypocoelom -hypocondylar -hypocone -hypoconid -hypoconule -hypoconulid -hypocoracoid -hypocorism -hypocoristic -hypocoristical -hypocoristically -hypocotyl -hypocotyleal -hypocotyledonary -hypocotyledonous -hypocotylous -hypocrater -hypocrateriform -hypocraterimorphous -hypocreaceous -hypocrisis -hypocrisy -hypocrital -hypocrite -hypocritic -hypocritical -hypocritically -hypocrize -hypocrystalline -hypocycloid -hypocycloidal -hypocystotomy -hypocytosis -hypodactylum -hypoderm -hypoderma -hypodermal -hypodermatic -hypodermatically -hypodermatoclysis -hypodermatomy -hypodermic -hypodermically -hypodermis -hypodermoclysis -hypodermosis -hypodermous -hypodiapason -hypodiapente -hypodiastole -hypodiatessaron -hypodiazeuxis -hypodicrotic -hypodicrotous -hypoditone -hypodorian -hypodynamia -hypodynamic -hypoeliminator -hypoendocrinism -hypoeosinophilia -hypoeutectic -hypoeutectoid -hypofunction -hypogastric -hypogastrium -hypogastrocele -hypogeal -hypogean -hypogee -hypogeic -hypogeiody -hypogene -hypogenesis -hypogenetic -hypogenic -hypogenous -hypogeocarpous -hypogeous -hypogeum -hypogeusia -hypoglobulia -hypoglossal -hypoglossitis -hypoglossus -hypoglottis -hypoglycemia -hypoglycemic -hypognathism -hypognathous -hypogonation -hypogynic -hypogynium -hypogynous -hypogyny -hypohalous -hypohemia -hypohidrosis -hypohyal -hypohyaline -hypoid -hypoiodite -hypoiodous -hypoionian -hypoischium -hypoisotonic -hypokeimenometry -hypokinesia -hypokinesis -hypokinetic -hypokoristikon -hypolemniscus -hypoleptically -hypoleucocytosis -hypolimnion -hypolocrian -hypolydian -hypomania -hypomanic -hypomelancholia -hypomeral -hypomere -hypomeron -hypometropia -hypomixolydian -hypomnematic -hypomnesis -hypomochlion -hypomorph -hypomotility -hypomyotonia -hyponastic -hyponastically -hyponasty -hyponeuria -hyponitric -hyponitrite -hyponitrous -hyponoetic -hyponoia -hyponome -hyponomic -hyponychial -hyponychium -hyponym -hyponymic -hyponymous -hypopepsia -hypopepsinia -hypopepsy -hypopetalous -hypopetaly -hypophalangism -hypophamin -hypophamine -hypophare -hypopharyngeal -hypopharynx -hypophloeodal -hypophloeodic -hypophloeous -hypophonic -hypophonous -hypophora -hypophoria -hypophosphate -hypophosphite -hypophosphoric -hypophosphorous -hypophrenia -hypophrenic -hypophrenosis -hypophrygian -hypophyge -hypophyll -hypophyllium -hypophyllous -hypophyllum -hypophyse -hypophyseal -hypophysectomize -hypophysectomy -hypophyseoprivic -hypophyseoprivous -hypophysial -hypophysical -hypophysics -hypophysis -hypopial -hypopinealism -hypopituitarism -hypoplankton -hypoplanktonic -hypoplasia -hypoplastic -hypoplastral -hypoplastron -hypoplasty -hypoplasy -hypoploid -hypoploidy -hypopodium -hypopraxia -hypoprosexia -hypopselaphesia -hypopteral -hypopteron -hypoptilar -hypoptilum -hypoptosis -hypoptyalism -hypopus -hypopygial -hypopygidium -hypopygium -hypopyon -hyporadial -hyporadiolus -hyporadius -hyporchema -hyporchematic -hyporcheme -hyporchesis -hyporhachidian -hyporhachis -hyporhined -hyporit -hyporrhythmic -hyposcenium -hyposcleral -hyposcope -hyposecretion -hyposensitization -hyposensitize -hyposkeletal -hyposmia -hypospadiac -hypospadias -hyposphene -hypospray -hypostase -hypostasis -hypostasization -hypostasize -hypostasy -hypostatic -hypostatical -hypostatically -hypostatization -hypostatize -hyposternal -hyposternum -hyposthenia -hyposthenic -hyposthenuria -hypostigma -hypostilbite -hypostoma -hypostomatic -hypostomatous -hypostome -hypostomial -hypostomous -hypostrophe -hypostyle -hypostypsis -hypostyptic -hyposulphite -hyposulphurous -hyposuprarenalism -hyposyllogistic -hyposynaphe -hyposynergia -hyposystole -hypotactic -hypotarsal -hypotarsus -hypotaxia -hypotaxic -hypotaxis -hypotension -hypotensive -hypotensor -hypotenusal -hypotenuse -hypothalamic -hypothalamus -hypothalline -hypothallus -hypothec -hypotheca -hypothecal -hypothecary -hypothecate -hypothecation -hypothecative -hypothecator -hypothecatory -hypothecial -hypothecium -hypothenal -hypothenar -hypothermal -hypothermia -hypothermic -hypothermy -hypotheses -hypothesis -hypothesist -hypothesize -hypothesizer -hypothetic -hypothetical -hypothetically -hypothetics -hypothetist -hypothetize -hypothetizer -hypothyreosis -hypothyroid -hypothyroidism -hypotonia -hypotonic -hypotonicity -hypotonus -hypotony -hypotoxic -hypotoxicity -hypotrachelium -hypotrich -hypotrichosis -hypotrichous -hypotrochanteric -hypotrochoid -hypotrochoidal -hypotrophic -hypotrophy -hypotympanic -hypotypic -hypotypical -hypotyposis -hypovalve -hypovanadate -hypovanadic -hypovanadious -hypovanadous -hypovitaminosis -hypoxanthic -hypoxanthine -hypozeugma -hypozeuxis -hypozoan -hypozoic -hyppish -hypsibrachycephalic -hypsibrachycephalism -hypsibrachycephaly -hypsicephalic -hypsicephaly -hypsidolichocephalic -hypsidolichocephalism -hypsidolichocephaly -hypsiliform -hypsiloid -hypsilophodont -hypsilophodontid -hypsilophodontoid -hypsistenocephalic -hypsistenocephalism -hypsistenocephaly -hypsobathymetric -hypsocephalous -hypsochrome -hypsochromic -hypsochromy -hypsodont -hypsodontism -hypsodonty -hypsographic -hypsographical -hypsography -hypsoisotherm -hypsometer -hypsometric -hypsometrical -hypsometrically -hypsometrist -hypsometry -hypsophobia -hypsophonous -hypsophyll -hypsophyllar -hypsophyllary -hypsophyllous -hypsophyllum -hypsothermometer -hypural -hyraces -hyraceum -hyracid -hyraciform -hyracodont -hyracodontid -hyracodontoid -hyracoid -hyracoidean -hyracothere -hyracotherian -hyrax -hyson -hyssop -hystazarin -hysteralgia -hysteralgic -hysteranthous -hysterectomy -hysterelcosis -hysteresial -hysteresis -hysteretic -hysteretically -hysteria -hysteriac -hysteric -hysterical -hysterically -hystericky -hysterics -hysteriform -hysterioid -hysterocatalepsy -hysterocele -hysterocleisis -hysterocrystalline -hysterocystic -hysterodynia -hysterogen -hysterogenetic -hysterogenic -hysterogenous -hysterogeny -hysteroid -hysterolaparotomy -hysterolith -hysterolithiasis -hysterology -hysterolysis -hysteromania -hysterometer -hysterometry -hysteromorphous -hysteromyoma -hysteromyomectomy -hysteron -hysteroneurasthenia -hysteropathy -hysteropexia -hysteropexy -hysterophore -hysterophytal -hysterophyte -hysteroproterize -hysteroptosia -hysteroptosis -hysterorrhaphy -hysterorrhexis -hysteroscope -hysterosis -hysterotome -hysterotomy -hysterotraumatism -hystriciasis -hystricid -hystricine -hystricism -hystricismus -hystricoid -hystricomorph -hystricomorphic -hystricomorphous -i -iamatology -iamb -iambelegus -iambi -iambic -iambically -iambist -iambize -iambographer -iambus -ianthine -ianthinite -iao -iatraliptic -iatraliptics -iatric -iatrical -iatrochemic -iatrochemical -iatrochemist -iatrochemistry -iatrological -iatrology -iatromathematical -iatromathematician -iatromathematics -iatromechanical -iatromechanist -iatrophysical -iatrophysicist -iatrophysics -iatrotechnics -iba -iberite -ibex -ibices -ibid -ibidine -ibis -ibisbill -ibolium -ibota -icacinaceous -icaco -ice -iceberg -iceblink -iceboat -icebone -icebound -icebox -icebreaker -icecap -icecraft -iced -icefall -icefish -icehouse -iceland -iceleaf -iceless -icelike -iceman -icequake -iceroot -icework -ich -ichneumon -ichneumoned -ichneumonid -ichneumonidan -ichneumoniform -ichneumonized -ichneumonoid -ichneumonology -ichneumous -ichneutic -ichnite -ichnographic -ichnographical -ichnographically -ichnography -ichnolite -ichnolithology -ichnolitic -ichnological -ichnology -ichnomancy -icho -ichoglan -ichor -ichorous -ichorrhea -ichorrhemia -ichthulin -ichthulinic -ichthus -ichthyal -ichthyic -ichthyism -ichthyismus -ichthyization -ichthyized -ichthyobatrachian -ichthyocephalous -ichthyocol -ichthyocolla -ichthyocoprolite -ichthyodian -ichthyodont -ichthyodorulite -ichthyofauna -ichthyoform -ichthyographer -ichthyographia -ichthyographic -ichthyography -ichthyoid -ichthyoidal -ichthyolatrous -ichthyolatry -ichthyolite -ichthyolitic -ichthyologic -ichthyological -ichthyologically -ichthyologist -ichthyology -ichthyomancy -ichthyomantic -ichthyomorphic -ichthyomorphous -ichthyonomy -ichthyopaleontology -ichthyophagan -ichthyophagi -ichthyophagian -ichthyophagist -ichthyophagize -ichthyophagous -ichthyophagy -ichthyophile -ichthyophobia -ichthyophthalmite -ichthyophthiriasis -ichthyopolism -ichthyopolist -ichthyopsid -ichthyopsidan -ichthyopterygian -ichthyopterygium -ichthyornithic -ichthyornithoid -ichthyosaur -ichthyosaurian -ichthyosaurid -ichthyosauroid -ichthyosis -ichthyosism -ichthyotic -ichthyotomist -ichthyotomous -ichthyotomy -ichthyotoxin -ichthyotoxism -ichthytaxidermy -ichu -icica -icicle -icicled -icily -iciness -icing -icon -iconic -iconical -iconism -iconoclasm -iconoclast -iconoclastic -iconoclastically -iconoclasticism -iconodule -iconodulic -iconodulist -iconoduly -iconograph -iconographer -iconographic -iconographical -iconographist -iconography -iconolater -iconolatrous -iconolatry -iconological -iconologist -iconology -iconomachal -iconomachist -iconomachy -iconomania -iconomatic -iconomatically -iconomaticism -iconomatography -iconometer -iconometric -iconometrical -iconometrically -iconometry -iconophile -iconophilism -iconophilist -iconophily -iconoplast -iconoscope -iconostas -iconostasion -iconostasis -iconotype -icosahedral -icosasemic -icosian -icositetrahedron -icosteid -icosteine -icotype -icteric -icterical -icterine -icteritious -icterode -icterogenetic -icterogenic -icterogenous -icterohematuria -icteroid -icterus -ictic -ictuate -ictus -icy -id -idalia -idant -iddat -ide -idea -ideaed -ideaful -ideagenous -ideal -idealess -idealism -idealist -idealistic -idealistical -idealistically -ideality -idealization -idealize -idealizer -idealless -ideally -idealness -ideamonger -ideate -ideation -ideational -ideationally -ideative -ideist -idempotent -identic -identical -identicalism -identically -identicalness -identifiable -identifiableness -identification -identifier -identify -identism -identity -ideogenetic -ideogenical -ideogenous -ideogeny -ideoglyph -ideogram -ideogrammic -ideograph -ideographic -ideographical -ideographically -ideography -ideolatry -ideologic -ideological -ideologically -ideologist -ideologize -ideologue -ideology -ideomotion -ideomotor -ideophone -ideophonetics -ideophonous -ideoplastia -ideoplastic -ideoplastics -ideoplasty -ideopraxist -ides -idgah -idiasm -idic -idiobiology -idioblast -idioblastic -idiochromatic -idiochromatin -idiochromosome -idiocrasis -idiocrasy -idiocratic -idiocratical -idiocy -idiocyclophanous -idioelectric -idioelectrical -idiogenesis -idiogenetic -idiogenous -idioglossia -idioglottic -idiograph -idiographic -idiographical -idiohypnotism -idiolalia -idiolatry -idiologism -idiolysin -idiom -idiomatic -idiomatical -idiomatically -idiomaticalness -idiomelon -idiometer -idiomography -idiomology -idiomorphic -idiomorphically -idiomorphism -idiomorphous -idiomuscular -idiopathetic -idiopathic -idiopathical -idiopathically -idiopathy -idiophanism -idiophanous -idiophonic -idioplasm -idioplasmatic -idioplasmic -idiopsychological -idiopsychology -idioreflex -idiorepulsive -idioretinal -idiorrhythmic -idiosome -idiospasm -idiospastic -idiostatic -idiosyncrasy -idiosyncratic -idiosyncratical -idiosyncratically -idiot -idiotcy -idiothalamous -idiothermous -idiothermy -idiotic -idiotical -idiotically -idioticalness -idioticon -idiotish -idiotism -idiotize -idiotropian -idiotry -idiotype -idiotypic -idite -iditol -idle -idleful -idleheaded -idlehood -idleman -idlement -idleness -idler -idleset -idleship -idlety -idlish -idly -idocrase -idol -idola -idolaster -idolater -idolatress -idolatric -idolatrize -idolatrizer -idolatrous -idolatrously -idolatrousness -idolatry -idolify -idolism -idolist -idolistic -idolization -idolize -idolizer -idoloclast -idoloclastic -idolodulia -idolographical -idololatrical -idololatry -idolomancy -idolomania -idolothyte -idolothytic -idolous -idolum -idoneal -idoneity -idoneous -idoneousness -idorgan -idosaccharic -idose -idrialin -idrialine -idrialite -idryl -idyl -idyler -idylism -idylist -idylize -idyllian -idyllic -idyllical -idyllically -idyllicism -ie -if -ife -iffy -igelstromite -igloo -ignatia -ignavia -igneoaqueous -igneous -ignescent -ignicolist -igniferous -igniferousness -igniform -ignifuge -ignify -ignigenous -ignipotent -ignipuncture -ignitability -ignite -igniter -ignitibility -ignitible -ignition -ignitive -ignitor -ignitron -ignivomous -ignivomousness -ignobility -ignoble -ignobleness -ignoblesse -ignobly -ignominious -ignominiously -ignominiousness -ignominy -ignorable -ignoramus -ignorance -ignorant -ignorantism -ignorantist -ignorantly -ignorantness -ignoration -ignore -ignorement -ignorer -ignote -iguana -iguanian -iguanid -iguaniform -iguanodont -iguanodontoid -iguanoid -ihi -ihleite -ihram -iiwi -ijma -ijolite -ijussite -ikat -ikey -ikeyness -ikona -ikra -ileac -ileectomy -ileitis -ileocaecal -ileocaecum -ileocolic -ileocolitis -ileocolostomy -ileocolotomy -ileon -ileosigmoidostomy -ileostomy -ileotomy -ilesite -ileum -ileus -ilex -ilia -iliac -iliacus -iliahi -ilial -iliau -ilicaceous -ilicic -ilicin -ilima -iliocaudal -iliocaudalis -iliococcygeal -iliococcygeus -iliococcygian -iliocostal -iliocostalis -iliodorsal -iliofemoral -iliohypogastric -ilioinguinal -ilioischiac -ilioischiatic -iliolumbar -iliopectineal -iliopelvic -ilioperoneal -iliopsoas -iliopsoatic -iliopubic -iliosacral -iliosciatic -ilioscrotal -iliospinal -iliotibial -iliotrochanteric -ilium -ilk -ilka -ilkane -ill -illaborate -illachrymable -illachrymableness -illapsable -illapse -illapsive -illaqueate -illaqueation -illation -illative -illatively -illaudable -illaudably -illaudation -illaudatory -illecebrous -illeck -illegal -illegality -illegalize -illegally -illegalness -illegibility -illegible -illegibleness -illegibly -illegitimacy -illegitimate -illegitimately -illegitimateness -illegitimation -illegitimatize -illeism -illeist -illess -illfare -illguide -illiberal -illiberalism -illiberality -illiberalize -illiberally -illiberalness -illicit -illicitly -illicitness -illimitability -illimitable -illimitableness -illimitably -illimitate -illimitation -illimited -illimitedly -illimitedness -illinition -illinium -illipene -illiquation -illiquid -illiquidity -illiquidly -illish -illision -illiteracy -illiteral -illiterate -illiterately -illiterateness -illiterature -illium -illness -illocal -illocality -illocally -illogic -illogical -illogicality -illogically -illogicalness -illogician -illogicity -illoricate -illoricated -illoyal -illoyalty -illth -illucidate -illucidation -illucidative -illude -illudedly -illuder -illume -illumer -illuminability -illuminable -illuminance -illuminant -illuminate -illuminated -illuminati -illuminating -illuminatingly -illumination -illuminational -illuminatism -illuminatist -illuminative -illuminato -illuminator -illuminatory -illuminatus -illumine -illuminee -illuminer -illuminist -illuminometer -illuminous -illupi -illure -illurement -illusible -illusion -illusionable -illusional -illusionary -illusioned -illusionism -illusionist -illusionistic -illusive -illusively -illusiveness -illusor -illusorily -illusoriness -illusory -illustrable -illustratable -illustrate -illustration -illustrational -illustrative -illustratively -illustrator -illustratory -illustratress -illustre -illustricity -illustrious -illustriously -illustriousness -illutate -illutation -illuvial -illuviate -illuviation -illy -ilmenite -ilmenitite -ilmenorutile -ilot -ilvaite -ilysioid -image -imageable -imageless -imager -imagerial -imagerially -imagery -imaginability -imaginable -imaginableness -imaginably -imaginal -imaginant -imaginarily -imaginariness -imaginary -imaginate -imagination -imaginational -imaginationalism -imaginative -imaginatively -imaginativeness -imaginator -imagine -imaginer -imagines -imaginist -imaginous -imagism -imagist -imagistic -imago -imam -imamah -imamate -imambarah -imamic -imamship -imaret -imbalance -imban -imband -imbannered -imbarge -imbark -imbarn -imbased -imbastardize -imbat -imbauba -imbe -imbecile -imbecilely -imbecilic -imbecilitate -imbecility -imbed -imbellious -imber -imbibe -imbiber -imbibition -imbibitional -imbibitory -imbirussu -imbitter -imbitterment -imbolish -imbondo -imbonity -imbordure -imborsation -imbosom -imbower -imbreathe -imbreviate -imbrex -imbricate -imbricated -imbricately -imbrication -imbricative -imbroglio -imbrue -imbruement -imbrute -imbrutement -imbue -imbuement -imburse -imbursement -imi -imidazole -imidazolyl -imide -imidic -imidogen -iminazole -imine -imino -iminohydrin -imitability -imitable -imitableness -imitancy -imitant -imitate -imitatee -imitation -imitational -imitationist -imitative -imitatively -imitativeness -imitator -imitatorship -imitatress -imitatrix -immaculacy -immaculance -immaculate -immaculately -immaculateness -immalleable -immanacle -immanation -immane -immanely -immanence -immanency -immaneness -immanent -immanental -immanentism -immanentist -immanently -immanifest -immanifestness -immanity -immantle -immarble -immarcescible -immarcescibly -immarcibleness -immarginate -immask -immatchable -immaterial -immaterialism -immaterialist -immateriality -immaterialize -immaterially -immaterialness -immaterials -immateriate -immatriculate -immatriculation -immature -immatured -immaturely -immatureness -immaturity -immeability -immeasurability -immeasurable -immeasurableness -immeasurably -immeasured -immechanical -immechanically -immediacy -immedial -immediate -immediately -immediateness -immediatism -immediatist -immedicable -immedicableness -immedicably -immelodious -immember -immemorable -immemorial -immemorially -immense -immensely -immenseness -immensity -immensive -immensurability -immensurable -immensurableness -immensurate -immerd -immerge -immergence -immergent -immerit -immerited -immeritorious -immeritoriously -immeritous -immerse -immersement -immersible -immersion -immersionism -immersionist -immersive -immethodic -immethodical -immethodically -immethodicalness -immethodize -immetrical -immetrically -immetricalness -immew -immi -immigrant -immigrate -immigration -immigrator -immigratory -imminence -imminency -imminent -imminently -imminentness -immingle -imminution -immiscibility -immiscible -immiscibly -immission -immit -immitigability -immitigable -immitigably -immix -immixable -immixture -immobile -immobility -immobilization -immobilize -immoderacy -immoderate -immoderately -immoderateness -immoderation -immodest -immodestly -immodesty -immodulated -immolate -immolation -immolator -immoment -immomentous -immonastered -immoral -immoralism -immoralist -immorality -immoralize -immorally -immorigerous -immorigerousness -immortability -immortable -immortal -immortalism -immortalist -immortality -immortalizable -immortalization -immortalize -immortalizer -immortally -immortalness -immortalship -immortelle -immortification -immortified -immotile -immotioned -immotive -immound -immovability -immovable -immovableness -immovably -immund -immundity -immune -immunist -immunity -immunization -immunize -immunochemistry -immunogen -immunogenetic -immunogenetics -immunogenic -immunogenically -immunogenicity -immunologic -immunological -immunologically -immunologist -immunology -immunoreaction -immunotoxin -immuration -immure -immurement -immusical -immusically -immutability -immutable -immutableness -immutably -immutation -immute -immutilate -immutual -imonium -imp -impacability -impacable -impack -impackment -impact -impacted -impaction -impactionize -impactment -impactual -impages -impaint -impair -impairable -impairer -impairment -impala -impalace -impalatable -impale -impalement -impaler -impall -impalm -impalpability -impalpable -impalpably -impalsy -impaludism -impanate -impanation -impanator -impane -impanel -impanelment -impapase -impapyrate -impar -imparadise -imparalleled -imparasitic -impardonable -impardonably -imparidigitate -imparipinnate -imparisyllabic -imparity -impark -imparkation -imparl -imparlance -imparsonee -impart -impartable -impartance -impartation -imparter -impartial -impartialism -impartialist -impartiality -impartially -impartialness -impartibilibly -impartibility -impartible -impartibly -imparticipable -impartite -impartive -impartivity -impartment -impassability -impassable -impassableness -impassably -impasse -impassibilibly -impassibility -impassible -impassibleness -impassion -impassionable -impassionate -impassionately -impassioned -impassionedly -impassionedness -impassionment -impassive -impassively -impassiveness -impassivity -impastation -impaste -impasto -impasture -impaternate -impatible -impatience -impatiency -impatient -impatientaceous -impatiently -impatientness -impatronize -impave -impavid -impavidity -impavidly -impawn -impayable -impeach -impeachability -impeachable -impeacher -impeachment -impearl -impeccability -impeccable -impeccably -impeccance -impeccancy -impeccant -impectinate -impecuniary -impecuniosity -impecunious -impecuniously -impecuniousness -impedance -impede -impeder -impedibility -impedible -impedient -impediment -impedimenta -impedimental -impedimentary -impeding -impedingly -impedite -impedition -impeditive -impedometer -impeevish -impel -impellent -impeller -impen -impend -impendence -impendency -impendent -impending -impenetrability -impenetrable -impenetrableness -impenetrably -impenetrate -impenetration -impenetrative -impenitence -impenitent -impenitently -impenitentness -impenitible -impenitibleness -impennate -impent -imperance -imperant -imperate -imperation -imperatival -imperative -imperatively -imperativeness -imperator -imperatorial -imperatorially -imperatorian -imperatorious -imperatorship -imperatory -imperatrix -imperceivable -imperceivableness -imperceivably -imperceived -imperceiverant -imperceptibility -imperceptible -imperceptibleness -imperceptibly -imperception -imperceptive -imperceptiveness -imperceptivity -impercipience -impercipient -imperence -imperent -imperfect -imperfected -imperfectibility -imperfectible -imperfection -imperfectious -imperfective -imperfectly -imperfectness -imperforable -imperforate -imperforated -imperforation -imperformable -imperia -imperial -imperialin -imperialine -imperialism -imperialist -imperialistic -imperialistically -imperiality -imperialization -imperialize -imperially -imperialness -imperialty -imperil -imperilment -imperious -imperiously -imperiousness -imperish -imperishability -imperishable -imperishableness -imperishably -imperite -imperium -impermanence -impermanency -impermanent -impermanently -impermeability -impermeabilization -impermeabilize -impermeable -impermeableness -impermeably -impermeated -impermeator -impermissible -impermutable -imperscriptible -imperscrutable -impersonable -impersonal -impersonality -impersonalization -impersonalize -impersonally -impersonate -impersonation -impersonative -impersonator -impersonatress -impersonatrix -impersonification -impersonify -impersonization -impersonize -imperspicuity -imperspicuous -imperspirability -imperspirable -impersuadable -impersuadableness -impersuasibility -impersuasible -impersuasibleness -impersuasibly -impertinacy -impertinence -impertinency -impertinent -impertinently -impertinentness -impertransible -imperturbability -imperturbable -imperturbableness -imperturbably -imperturbation -imperturbed -imperverse -impervertible -impervestigable -imperviability -imperviable -imperviableness -impervial -impervious -imperviously -imperviousness -impest -impestation -impester -impeticos -impetiginous -impetigo -impetition -impetrate -impetration -impetrative -impetrator -impetratory -impetre -impetulant -impetulantly -impetuosity -impetuous -impetuously -impetuousness -impetus -imphee -impi -impicture -impierceable -impiety -impignorate -impignoration -impinge -impingement -impingence -impingent -impinger -impinguate -impious -impiously -impiousness -impish -impishly -impishness -impiteous -impitiably -implacability -implacable -implacableness -implacably -implacement -implacental -implacentate -implant -implantation -implanter -implastic -implasticity -implate -implausibility -implausible -implausibleness -implausibly -impleach -implead -impleadable -impleader -impledge -implement -implemental -implementation -implementiferous -implete -impletion -impletive -implex -impliable -implial -implicant -implicate -implicately -implicateness -implication -implicational -implicative -implicatively -implicatory -implicit -implicitly -implicitness -impliedly -impliedness -impling -implode -implodent -implorable -imploration -implorator -imploratory -implore -implorer -imploring -imploringly -imploringness -implosion -implosive -implosively -implume -implumed -implunge -impluvium -imply -impocket -impofo -impoison -impoisoner -impolarizable -impolicy -impolished -impolite -impolitely -impoliteness -impolitic -impolitical -impolitically -impoliticalness -impoliticly -impoliticness -impollute -imponderabilia -imponderability -imponderable -imponderableness -imponderably -imponderous -impone -imponent -impoor -impopular -impopularly -imporosity -imporous -import -importability -importable -importableness -importably -importance -importancy -important -importantly -importation -importer -importless -importment -importraiture -importray -importunacy -importunance -importunate -importunately -importunateness -importunator -importune -importunely -importunement -importuner -importunity -imposable -imposableness -imposal -impose -imposement -imposer -imposing -imposingly -imposingness -imposition -impositional -impositive -impossibilification -impossibilism -impossibilist -impossibilitate -impossibility -impossible -impossibleness -impossibly -impost -imposter -imposterous -impostor -impostorism -impostorship -impostress -impostrix -impostrous -impostumate -impostumation -impostume -imposture -imposturism -imposturous -imposure -impot -impotable -impotence -impotency -impotent -impotently -impotentness -impound -impoundable -impoundage -impounder -impoundment -impoverish -impoverisher -impoverishment -impracticability -impracticable -impracticableness -impracticably -impractical -impracticality -impracticalness -imprecant -imprecate -imprecation -imprecator -imprecatorily -imprecatory -imprecise -imprecisely -imprecision -impredicability -impredicable -impreg -impregn -impregnability -impregnable -impregnableness -impregnably -impregnant -impregnate -impregnation -impregnative -impregnator -impregnatory -imprejudice -impremeditate -impreparation -impresa -impresario -imprescience -imprescribable -imprescriptibility -imprescriptible -imprescriptibly -imprese -impress -impressable -impressedly -impresser -impressibility -impressible -impressibleness -impressibly -impression -impressionability -impressionable -impressionableness -impressionably -impressional -impressionalist -impressionality -impressionally -impressionary -impressionism -impressionist -impressionistic -impressionistically -impressionless -impressive -impressively -impressiveness -impressment -impressor -impressure -imprest -imprestable -impreventability -impreventable -imprevisibility -imprevisible -imprevision -imprimatur -imprime -imprimitive -imprimitivity -imprint -imprinter -imprison -imprisonable -imprisoner -imprisonment -improbability -improbabilize -improbable -improbableness -improbably -improbation -improbative -improbatory -improbity -improcreant -improcurability -improcurable -improducible -improficience -improficiency -improgressive -improgressively -improgressiveness -improlificical -impromptitude -impromptu -impromptuary -impromptuist -improof -improper -improperation -improperly -improperness -impropriate -impropriation -impropriator -impropriatrix -impropriety -improvability -improvable -improvableness -improvably -improve -improvement -improver -improvership -improvidence -improvident -improvidentially -improvidently -improving -improvingly -improvisate -improvisation -improvisational -improvisator -improvisatorial -improvisatorially -improvisatorize -improvisatory -improvise -improvisedly -improviser -improvision -improviso -improvisor -imprudence -imprudency -imprudent -imprudential -imprudently -imprudentness -impship -impuberal -impuberate -impuberty -impubic -impudence -impudency -impudent -impudently -impudentness -impudicity -impugn -impugnability -impugnable -impugnation -impugner -impugnment -impuissance -impuissant -impulse -impulsion -impulsive -impulsively -impulsiveness -impulsivity -impulsory -impunctate -impunctual -impunctuality -impunely -impunible -impunibly -impunity -impure -impurely -impureness -impuritan -impuritanism -impurity -imputability -imputable -imputableness -imputably -imputation -imputative -imputatively -imputativeness -impute -imputedly -imputer -imputrescence -imputrescibility -imputrescible -imputrid -impy -imshi -imsonic -imu -in -inability -inabordable -inabstinence -inaccentuated -inaccentuation -inacceptable -inaccessibility -inaccessible -inaccessibleness -inaccessibly -inaccordance -inaccordancy -inaccordant -inaccordantly -inaccuracy -inaccurate -inaccurately -inaccurateness -inachid -inachoid -inacquaintance -inacquiescent -inactinic -inaction -inactionist -inactivate -inactivation -inactive -inactively -inactiveness -inactivity -inactuate -inactuation -inadaptability -inadaptable -inadaptation -inadaptive -inadept -inadequacy -inadequate -inadequately -inadequateness -inadequation -inadequative -inadequatively -inadherent -inadhesion -inadhesive -inadjustability -inadjustable -inadmissibility -inadmissible -inadmissibly -inadventurous -inadvertence -inadvertency -inadvertent -inadvertently -inadvisability -inadvisable -inadvisableness -inadvisedly -inaesthetic -inaffability -inaffable -inaffectation -inagglutinability -inagglutinable -inaggressive -inagile -inaidable -inaja -inalacrity -inalienability -inalienable -inalienableness -inalienably -inalimental -inalterability -inalterable -inalterableness -inalterably -inamissibility -inamissible -inamissibleness -inamorata -inamorate -inamoration -inamorato -inamovability -inamovable -inane -inanely -inanga -inangulate -inanimadvertence -inanimate -inanimated -inanimately -inanimateness -inanimation -inanition -inanity -inantherate -inapathy -inapostate -inapparent -inappealable -inappeasable -inappellability -inappellable -inappendiculate -inapperceptible -inappertinent -inappetence -inappetency -inappetent -inappetible -inapplicability -inapplicable -inapplicableness -inapplicably -inapplication -inapposite -inappositely -inappositeness -inappreciable -inappreciably -inappreciation -inappreciative -inappreciatively -inappreciativeness -inapprehensible -inapprehension -inapprehensive -inapprehensiveness -inapproachability -inapproachable -inapproachably -inappropriable -inappropriableness -inappropriate -inappropriately -inappropriateness -inapt -inaptitude -inaptly -inaptness -inaqueous -inarable -inarch -inarculum -inarguable -inarguably -inarm -inarticulacy -inarticulate -inarticulated -inarticulately -inarticulateness -inarticulation -inartificial -inartificiality -inartificially -inartificialness -inartistic -inartistical -inartisticality -inartistically -inasmuch -inassimilable -inassimilation -inassuageable -inattackable -inattention -inattentive -inattentively -inattentiveness -inaudibility -inaudible -inaudibleness -inaudibly -inaugur -inaugural -inaugurate -inauguration -inaugurative -inaugurator -inauguratory -inaugurer -inaurate -inauration -inauspicious -inauspiciously -inauspiciousness -inauthentic -inauthenticity -inauthoritative -inauthoritativeness -inaxon -inbe -inbeaming -inbearing -inbeing -inbending -inbent -inbirth -inblow -inblowing -inblown -inboard -inbond -inborn -inbound -inbread -inbreak -inbreaking -inbreathe -inbreather -inbred -inbreed -inbring -inbringer -inbuilt -inburning -inburnt -inburst -inby -incalculability -incalculable -incalculableness -incalculably -incalescence -incalescency -incalescent -incaliculate -incalver -incalving -incameration -incandent -incandesce -incandescence -incandescency -incandescent -incandescently -incanous -incantation -incantational -incantator -incantatory -incanton -incapability -incapable -incapableness -incapably -incapacious -incapaciousness -incapacitate -incapacitation -incapacity -incapsulate -incapsulation -incaptivate -incarcerate -incarceration -incarcerator -incardinate -incardination -incarmined -incarn -incarnadine -incarnant -incarnate -incarnation -incarnational -incarnationist -incarnative -incase -incasement -incast -incatenate -incatenation -incaution -incautious -incautiously -incautiousness -incavate -incavated -incavation -incavern -incedingly -incelebrity -incendiarism -incendiary -incendivity -incensation -incense -incenseless -incensement -incensory -incensurable -incensurably -incenter -incentive -incentively -incentor -incept -inception -inceptive -inceptively -inceptor -inceration -incertitude -incessable -incessably -incessancy -incessant -incessantly -incessantness -incest -incestuous -incestuously -incestuousness -inch -inched -inchmeal -inchoacy -inchoant -inchoate -inchoately -inchoateness -inchoation -inchoative -inchpin -inchworm -incide -incidence -incident -incidental -incidentalist -incidentally -incidentalness -incidentless -incidently -incinerable -incinerate -incineration -incinerator -incipience -incipient -incipiently -incircumscription -incircumspect -incircumspection -incircumspectly -incircumspectness -incisal -incise -incisely -incisiform -incision -incisive -incisively -incisiveness -incisor -incisorial -incisory -incisure -incitability -incitable -incitant -incitation -incite -incitement -inciter -incitingly -incitive -incitress -incivic -incivility -incivilization -incivism -inclemency -inclement -inclemently -inclementness -inclinable -inclinableness -inclination -inclinational -inclinator -inclinatorily -inclinatorium -inclinatory -incline -incliner -inclinograph -inclinometer -inclip -inclose -inclosure -includable -include -included -includedness -includer -inclusa -incluse -inclusion -inclusionist -inclusive -inclusively -inclusiveness -inclusory -incoagulable -incoalescence -incoercible -incog -incogent -incogitability -incogitable -incogitancy -incogitant -incogitantly -incogitative -incognita -incognitive -incognito -incognizability -incognizable -incognizance -incognizant -incognoscent -incognoscibility -incognoscible -incoherence -incoherency -incoherent -incoherentific -incoherently -incoherentness -incohering -incohesion -incohesive -incoincidence -incoincident -incombustibility -incombustible -incombustibleness -incombustibly -incombustion -income -incomeless -incomer -incoming -incommensurability -incommensurable -incommensurableness -incommensurably -incommensurate -incommensurately -incommensurateness -incommiscibility -incommiscible -incommodate -incommodation -incommode -incommodement -incommodious -incommodiously -incommodiousness -incommodity -incommunicability -incommunicable -incommunicableness -incommunicably -incommunicado -incommunicative -incommunicatively -incommunicativeness -incommutability -incommutable -incommutableness -incommutably -incompact -incompactly -incompactness -incomparability -incomparable -incomparableness -incomparably -incompassionate -incompassionately -incompassionateness -incompatibility -incompatible -incompatibleness -incompatibly -incompendious -incompensated -incompensation -incompetence -incompetency -incompetent -incompetently -incompetentness -incompletability -incompletable -incompletableness -incomplete -incompleted -incompletely -incompleteness -incompletion -incomplex -incompliance -incompliancy -incompliant -incompliantly -incomplicate -incomplying -incomposed -incomposedly -incomposedness -incomposite -incompossibility -incompossible -incomprehended -incomprehending -incomprehendingly -incomprehensibility -incomprehensible -incomprehensibleness -incomprehensibly -incomprehension -incomprehensive -incomprehensively -incomprehensiveness -incompressibility -incompressible -incompressibleness -incompressibly -incomputable -inconcealable -inconceivability -inconceivable -inconceivableness -inconceivably -inconcinnate -inconcinnately -inconcinnity -inconcinnous -inconcludent -inconcluding -inconclusion -inconclusive -inconclusively -inconclusiveness -inconcrete -inconcurrent -inconcurring -incondensability -incondensable -incondensibility -incondensible -incondite -inconditionate -inconditioned -inconducive -inconfirm -inconformable -inconformably -inconformity -inconfused -inconfusedly -inconfusion -inconfutable -inconfutably -incongealable -incongealableness -incongenerous -incongenial -incongeniality -inconglomerate -incongruence -incongruent -incongruently -incongruity -incongruous -incongruously -incongruousness -inconjoinable -inconnected -inconnectedness -inconnu -inconscience -inconscient -inconsciently -inconscious -inconsciously -inconsecutive -inconsecutively -inconsecutiveness -inconsequence -inconsequent -inconsequential -inconsequentiality -inconsequentially -inconsequently -inconsequentness -inconsiderable -inconsiderableness -inconsiderably -inconsiderate -inconsiderately -inconsiderateness -inconsideration -inconsidered -inconsistence -inconsistency -inconsistent -inconsistently -inconsistentness -inconsolability -inconsolable -inconsolableness -inconsolably -inconsolate -inconsolately -inconsonance -inconsonant -inconsonantly -inconspicuous -inconspicuously -inconspicuousness -inconstancy -inconstant -inconstantly -inconstantness -inconstruable -inconsultable -inconsumable -inconsumably -inconsumed -incontaminable -incontaminate -incontaminateness -incontemptible -incontestability -incontestable -incontestableness -incontestably -incontinence -incontinency -incontinent -incontinently -incontinuity -incontinuous -incontracted -incontractile -incontraction -incontrollable -incontrollably -incontrolled -incontrovertibility -incontrovertible -incontrovertibleness -incontrovertibly -inconvenience -inconveniency -inconvenient -inconveniently -inconvenientness -inconversable -inconversant -inconversibility -inconvertibility -inconvertible -inconvertibleness -inconvertibly -inconvinced -inconvincedly -inconvincibility -inconvincible -inconvincibly -incopresentability -incopresentable -incoronate -incoronated -incoronation -incorporable -incorporate -incorporated -incorporatedness -incorporation -incorporative -incorporator -incorporeal -incorporealism -incorporealist -incorporeality -incorporealize -incorporeally -incorporeity -incorporeous -incorpse -incorrect -incorrection -incorrectly -incorrectness -incorrespondence -incorrespondency -incorrespondent -incorresponding -incorrigibility -incorrigible -incorrigibleness -incorrigibly -incorrodable -incorrodible -incorrosive -incorrupt -incorrupted -incorruptibility -incorruptible -incorruptibleness -incorruptibly -incorruption -incorruptly -incorruptness -incourteous -incourteously -incrash -incrassate -incrassated -incrassation -incrassative -increasable -increasableness -increase -increasedly -increaseful -increasement -increaser -increasing -increasingly -increate -increately -increative -incredibility -incredible -incredibleness -incredibly -increditable -incredited -incredulity -incredulous -incredulously -incredulousness -increep -incremate -incremation -increment -incremental -incrementation -increpate -increpation -increscence -increscent -increst -incretion -incretionary -incretory -incriminate -incrimination -incriminator -incriminatory -incross -incrossbred -incrossing -incrotchet -incruent -incruental -incruentous -incrust -incrustant -incrustate -incrustation -incrustator -incrustive -incrustment -incrystal -incrystallizable -incubate -incubation -incubational -incubative -incubator -incubatorium -incubatory -incubi -incubous -incubus -incudal -incudate -incudectomy -incudes -incudomalleal -incudostapedial -inculcate -inculcation -inculcative -inculcator -inculcatory -inculpability -inculpable -inculpableness -inculpably -inculpate -inculpation -inculpative -inculpatory -incult -incultivation -inculture -incumbence -incumbency -incumbent -incumbentess -incumbently -incumber -incumberment -incumbrance -incumbrancer -incunable -incunabula -incunabular -incunabulist -incunabulum -incuneation -incur -incurability -incurable -incurableness -incurably -incuriosity -incurious -incuriously -incuriousness -incurrable -incurrence -incurrent -incurse -incursion -incursionist -incursive -incurvate -incurvation -incurvature -incurve -incus -incuse -incut -incutting -indaba -indaconitine -indagate -indagation -indagative -indagator -indagatory -indamine -indan -indane -indanthrene -indart -indazin -indazine -indazol -indazole -inde -indebt -indebted -indebtedness -indebtment -indecence -indecency -indecent -indecently -indecentness -indeciduate -indeciduous -indecipherability -indecipherable -indecipherableness -indecipherably -indecision -indecisive -indecisively -indecisiveness -indeclinable -indeclinableness -indeclinably -indecomponible -indecomposable -indecomposableness -indecorous -indecorously -indecorousness -indecorum -indeed -indeedy -indefaceable -indefatigability -indefatigable -indefatigableness -indefatigably -indefeasibility -indefeasible -indefeasibleness -indefeasibly -indefeatable -indefectibility -indefectible -indefectibly -indefective -indefensibility -indefensible -indefensibleness -indefensibly -indefensive -indeficiency -indeficient -indeficiently -indefinable -indefinableness -indefinably -indefinite -indefinitely -indefiniteness -indefinitive -indefinitively -indefinitiveness -indefinitude -indefinity -indeflectible -indefluent -indeformable -indehiscence -indehiscent -indelectable -indelegability -indelegable -indeliberate -indeliberately -indeliberateness -indeliberation -indelibility -indelible -indelibleness -indelibly -indelicacy -indelicate -indelicately -indelicateness -indemnification -indemnificator -indemnificatory -indemnifier -indemnify -indemnitee -indemnitor -indemnity -indemnization -indemoniate -indemonstrability -indemonstrable -indemonstrableness -indemonstrably -indene -indent -indentation -indented -indentedly -indentee -indenter -indention -indentment -indentor -indenture -indentured -indentureship -indentwise -independable -independence -independency -independent -independentism -independently -indeposable -indeprehensible -indeprivability -indeprivable -inderivative -indescribability -indescribable -indescribableness -indescribably -indescript -indescriptive -indesert -indesignate -indesirable -indestructibility -indestructible -indestructibleness -indestructibly -indetectable -indeterminable -indeterminableness -indeterminably -indeterminacy -indeterminate -indeterminately -indeterminateness -indetermination -indeterminative -indetermined -indeterminism -indeterminist -indeterministic -indevirginate -indevoted -indevotion -indevotional -indevout -indevoutly -indevoutness -index -indexed -indexer -indexical -indexically -indexing -indexless -indexlessness -indexterity -indiadem -indianaite -indianite -indianization -indianize -indic -indicable -indican -indicant -indicanuria -indicate -indication -indicative -indicatively -indicator -indicatory -indicatrix -indices -indicia -indicial -indicible -indicium -indicolite -indict -indictable -indictably -indictee -indicter -indiction -indictional -indictive -indictment -indictor -indiferous -indifference -indifferency -indifferent -indifferential -indifferentism -indifferentist -indifferentistic -indifferently -indigena -indigenal -indigenate -indigence -indigency -indigene -indigeneity -indigenist -indigenity -indigenous -indigenously -indigenousness -indigent -indigently -indigested -indigestedness -indigestibility -indigestible -indigestibleness -indigestibly -indigestion -indigestive -indigitamenta -indigitate -indigitation -indign -indignance -indignancy -indignant -indignantly -indignation -indignatory -indignify -indignity -indignly -indigo -indigoberry -indigoferous -indigoid -indigotic -indigotin -indigotindisulphonic -indiguria -indimensible -indimensional -indiminishable -indimple -indirect -indirected -indirection -indirectly -indirectness -indirubin -indiscernibility -indiscernible -indiscernibleness -indiscernibly -indiscerptibility -indiscerptible -indiscerptibleness -indiscerptibly -indisciplinable -indiscipline -indisciplined -indiscoverable -indiscoverably -indiscovered -indiscreet -indiscreetly -indiscreetness -indiscrete -indiscretely -indiscretion -indiscretionary -indiscriminate -indiscriminated -indiscriminately -indiscriminateness -indiscriminating -indiscriminatingly -indiscrimination -indiscriminative -indiscriminatively -indiscriminatory -indiscussable -indiscussible -indispellable -indispensability -indispensable -indispensableness -indispensably -indispose -indisposed -indisposedness -indisposition -indisputability -indisputable -indisputableness -indisputably -indissipable -indissociable -indissolubility -indissoluble -indissolubleness -indissolubly -indissolute -indissolvability -indissolvable -indissolvableness -indissolvably -indissuadable -indissuadably -indistinct -indistinction -indistinctive -indistinctively -indistinctiveness -indistinctly -indistinctness -indistinguishability -indistinguishable -indistinguishableness -indistinguishably -indistinguished -indistortable -indistributable -indisturbable -indisturbance -indisturbed -indite -inditement -inditer -indium -indivertible -indivertibly -individable -individua -individual -individualism -individualist -individualistic -individualistically -individuality -individualization -individualize -individualizer -individualizingly -individually -individuate -individuation -individuative -individuator -individuity -individuum -indivinable -indivisibility -indivisible -indivisibleness -indivisibly -indivision -indocibility -indocible -indocibleness -indocile -indocility -indoctrinate -indoctrination -indoctrinator -indoctrine -indoctrinization -indoctrinize -indogen -indogenide -indole -indolence -indolent -indolently -indoles -indoline -indoloid -indolyl -indomitability -indomitable -indomitableness -indomitably -indoor -indoors -indophenin -indophenol -indorsation -indorse -indoxyl -indoxylic -indoxylsulphuric -indraft -indraught -indrawal -indrawing -indrawn -indri -indubious -indubiously -indubitable -indubitableness -indubitably -indubitatively -induce -induced -inducedly -inducement -inducer -induciae -inducible -inducive -induct -inductance -inductee -inducteous -inductile -inductility -induction -inductional -inductionally -inductionless -inductive -inductively -inductiveness -inductivity -inductometer -inductophone -inductor -inductorium -inductory -inductoscope -indue -induement -indulge -indulgeable -indulgement -indulgence -indulgenced -indulgency -indulgent -indulgential -indulgentially -indulgently -indulgentness -indulger -indulging -indulgingly -induline -indult -indulto -indument -indumentum -induna -induplicate -induplication -induplicative -indurable -indurate -induration -indurative -indurite -indusial -indusiate -indusiated -indusiform -indusioid -indusium -industrial -industrialism -industrialist -industrialization -industrialize -industrially -industrialness -industrious -industriously -industriousness -industrochemical -industry -induviae -induvial -induviate -indwell -indweller -indy -indyl -indylic -inearth -inebriacy -inebriant -inebriate -inebriation -inebriative -inebriety -inebrious -ineconomic -ineconomy -inedibility -inedible -inedited -ineducabilian -ineducability -ineducable -ineducation -ineffability -ineffable -ineffableness -ineffably -ineffaceability -ineffaceable -ineffaceably -ineffectible -ineffectibly -ineffective -ineffectively -ineffectiveness -ineffectual -ineffectuality -ineffectually -ineffectualness -ineffervescence -ineffervescent -ineffervescibility -ineffervescible -inefficacious -inefficaciously -inefficaciousness -inefficacity -inefficacy -inefficience -inefficiency -inefficient -inefficiently -ineffulgent -inelaborate -inelaborated -inelaborately -inelastic -inelasticate -inelasticity -inelegance -inelegancy -inelegant -inelegantly -ineligibility -ineligible -ineligibleness -ineligibly -ineliminable -ineloquence -ineloquent -ineloquently -ineluctability -ineluctable -ineluctably -ineludible -ineludibly -inembryonate -inemendable -inemotivity -inemulous -inenarrable -inenergetic -inenubilable -inenucleable -inept -ineptitude -ineptly -ineptness -inequable -inequal -inequalitarian -inequality -inequally -inequalness -inequation -inequiaxial -inequicostate -inequidistant -inequigranular -inequilateral -inequilibrium -inequilobate -inequilobed -inequipotential -inequipotentiality -inequitable -inequitableness -inequitably -inequity -inequivalent -inequivalve -inequivalvular -ineradicable -ineradicableness -ineradicably -inerasable -inerasableness -inerasably -inerasible -inerm -inermous -inerrability -inerrable -inerrableness -inerrably -inerrancy -inerrant -inerrantly -inerratic -inerring -inerringly -inerroneous -inert -inertance -inertia -inertial -inertion -inertly -inertness -inerubescent -inerudite -ineruditely -inerudition -inescapable -inescapableness -inescapably -inesculent -inescutcheon -inesite -inessential -inessentiality -inestimability -inestimable -inestimableness -inestimably -inestivation -inethical -ineunt -ineuphonious -inevadible -inevadibly -inevaporable -inevasible -inevidence -inevident -inevitability -inevitable -inevitableness -inevitably -inexact -inexacting -inexactitude -inexactly -inexactness -inexcellence -inexcitability -inexcitable -inexclusive -inexclusively -inexcommunicable -inexcusability -inexcusable -inexcusableness -inexcusably -inexecutable -inexecution -inexertion -inexhausted -inexhaustedly -inexhaustibility -inexhaustible -inexhaustibleness -inexhaustibly -inexhaustive -inexhaustively -inexigible -inexist -inexistence -inexistency -inexistent -inexorability -inexorable -inexorableness -inexorably -inexpansible -inexpansive -inexpectancy -inexpectant -inexpectation -inexpected -inexpectedly -inexpectedness -inexpedience -inexpediency -inexpedient -inexpediently -inexpensive -inexpensively -inexpensiveness -inexperience -inexperienced -inexpert -inexpertly -inexpertness -inexpiable -inexpiableness -inexpiably -inexpiate -inexplainable -inexplicability -inexplicable -inexplicableness -inexplicables -inexplicably -inexplicit -inexplicitly -inexplicitness -inexplorable -inexplosive -inexportable -inexposable -inexposure -inexpress -inexpressibility -inexpressible -inexpressibleness -inexpressibles -inexpressibly -inexpressive -inexpressively -inexpressiveness -inexpugnability -inexpugnable -inexpugnableness -inexpugnably -inexpungeable -inexpungible -inextant -inextended -inextensibility -inextensible -inextensile -inextension -inextensional -inextensive -inexterminable -inextinct -inextinguishable -inextinguishably -inextirpable -inextirpableness -inextricability -inextricable -inextricableness -inextricably -inface -infall -infallibilism -infallibilist -infallibility -infallible -infallibleness -infallibly -infalling -infalsificable -infame -infamiliar -infamiliarity -infamize -infamonize -infamous -infamously -infamousness -infamy -infancy -infand -infandous -infang -infanglement -infangthief -infant -infanta -infantado -infante -infanthood -infanticidal -infanticide -infantile -infantilism -infantility -infantine -infantlike -infantry -infantryman -infarct -infarctate -infarcted -infarction -infare -infatuate -infatuatedly -infatuation -infatuator -infaust -infeasibility -infeasible -infeasibleness -infect -infectant -infected -infectedness -infecter -infectible -infection -infectionist -infectious -infectiously -infectiousness -infective -infectiveness -infectivity -infector -infectress -infectuous -infecund -infecundity -infeed -infeft -infeftment -infelicific -infelicitous -infelicitously -infelicitousness -infelicity -infelonious -infelt -infeminine -infer -inferable -inference -inferent -inferential -inferentialism -inferentialist -inferentially -inferior -inferiorism -inferiority -inferiorize -inferiorly -infern -infernal -infernalism -infernality -infernalize -infernally -infernalry -infernalship -inferno -inferoanterior -inferobranchiate -inferofrontal -inferolateral -inferomedian -inferoposterior -inferrer -inferribility -inferrible -inferringly -infertile -infertilely -infertileness -infertility -infest -infestant -infestation -infester -infestive -infestivity -infestment -infeudation -infibulate -infibulation -inficete -infidel -infidelic -infidelical -infidelism -infidelistic -infidelity -infidelize -infidelly -infield -infielder -infieldsman -infighter -infighting -infill -infilling -infilm -infilter -infiltrate -infiltration -infiltrative -infinitant -infinitarily -infinitary -infinitate -infinitation -infinite -infinitely -infiniteness -infinitesimal -infinitesimalism -infinitesimality -infinitesimally -infinitesimalness -infiniteth -infinitieth -infinitival -infinitivally -infinitive -infinitively -infinitize -infinitude -infinituple -infinity -infirm -infirmarer -infirmaress -infirmarian -infirmary -infirmate -infirmation -infirmative -infirmity -infirmly -infirmness -infissile -infit -infitter -infix -infixion -inflame -inflamed -inflamedly -inflamedness -inflamer -inflaming -inflamingly -inflammability -inflammable -inflammableness -inflammably -inflammation -inflammative -inflammatorily -inflammatory -inflatable -inflate -inflated -inflatedly -inflatedness -inflater -inflatile -inflatingly -inflation -inflationary -inflationism -inflationist -inflative -inflatus -inflect -inflected -inflectedness -inflection -inflectional -inflectionally -inflectionless -inflective -inflector -inflex -inflexed -inflexibility -inflexible -inflexibleness -inflexibly -inflexive -inflict -inflictable -inflicter -infliction -inflictive -inflood -inflorescence -inflorescent -inflow -inflowering -influence -influenceable -influencer -influencive -influent -influential -influentiality -influentially -influenza -influenzal -influenzic -influx -influxable -influxible -influxibly -influxion -influxionism -infold -infolder -infolding -infoldment -infoliate -inform -informable -informal -informality -informalize -informally -informant -information -informational -informative -informatively -informatory -informed -informedly -informer -informidable -informingly -informity -infortiate -infortitude -infortunate -infortunately -infortunateness -infortune -infra -infrabasal -infrabestial -infrabranchial -infrabuccal -infracanthal -infracaudal -infracelestial -infracentral -infracephalic -infraclavicle -infraclavicular -infraclusion -infraconscious -infracortical -infracostal -infracostalis -infracotyloid -infract -infractible -infraction -infractor -infradentary -infradiaphragmatic -infragenual -infraglacial -infraglenoid -infraglottic -infragrant -infragular -infrahuman -infrahyoid -infralabial -infralapsarian -infralapsarianism -infralinear -infralittoral -inframammary -inframammillary -inframandibular -inframarginal -inframaxillary -inframedian -inframercurial -inframercurian -inframolecular -inframontane -inframundane -infranatural -infranaturalism -infrangibility -infrangible -infrangibleness -infrangibly -infranodal -infranuclear -infraoccipital -infraocclusion -infraocular -infraoral -infraorbital -infraordinary -infrapapillary -infrapatellar -infraperipherial -infrapose -infraposition -infraprotein -infrapubian -infraradular -infrared -infrarenal -infrarenally -infrarimal -infrascapular -infrascapularis -infrascientific -infraspinal -infraspinate -infraspinatus -infraspinous -infrastapedial -infrasternal -infrastigmatal -infrastipular -infrastructure -infrasutral -infratemporal -infraterrene -infraterritorial -infrathoracic -infratonsillar -infratracheal -infratrochanteric -infratrochlear -infratubal -infraturbinal -infravaginal -infraventral -infrequency -infrequent -infrequently -infrigidate -infrigidation -infrigidative -infringe -infringement -infringer -infringible -infructiferous -infructuose -infructuosity -infructuous -infructuously -infrugal -infrustrable -infrustrably -infula -infumate -infumated -infumation -infundibular -infundibulate -infundibuliform -infundibulum -infuriate -infuriately -infuriatingly -infuriation -infuscate -infuscation -infuse -infusedly -infuser -infusibility -infusible -infusibleness -infusile -infusion -infusionism -infusionist -infusive -infusorial -infusorian -infusoriform -infusorioid -infusorium -infusory -ing -ingallantry -ingate -ingather -ingatherer -ingathering -ingeldable -ingeminate -ingemination -ingenerability -ingenerable -ingenerably -ingenerate -ingenerately -ingeneration -ingenerative -ingeniosity -ingenious -ingeniously -ingeniousness -ingenit -ingenue -ingenuity -ingenuous -ingenuously -ingenuousness -ingerminate -ingest -ingesta -ingestible -ingestion -ingestive -ingiver -ingiving -ingle -inglenook -ingleside -inglobate -inglobe -inglorious -ingloriously -ingloriousness -inglutition -ingluvial -ingluvies -ingluviitis -ingoing -ingot -ingotman -ingraft -ingrain -ingrained -ingrainedly -ingrainedness -ingrammaticism -ingrandize -ingrate -ingrateful -ingratefully -ingratefulness -ingrately -ingratiate -ingratiating -ingratiatingly -ingratiation -ingratiatory -ingratitude -ingravescent -ingravidate -ingravidation -ingredient -ingress -ingression -ingressive -ingressiveness -ingross -ingrow -ingrown -ingrownness -ingrowth -inguen -inguinal -inguinoabdominal -inguinocrural -inguinocutaneous -inguinodynia -inguinolabial -inguinoscrotal -ingulf -ingulfment -ingurgitate -ingurgitation -inhabit -inhabitability -inhabitable -inhabitancy -inhabitant -inhabitation -inhabitative -inhabitativeness -inhabited -inhabitedness -inhabiter -inhabitiveness -inhabitress -inhalant -inhalation -inhalator -inhale -inhalement -inhalent -inhaler -inharmonic -inharmonical -inharmonious -inharmoniously -inharmoniousness -inharmony -inhaul -inhauler -inhaust -inhaustion -inhearse -inheaven -inhere -inherence -inherency -inherent -inherently -inherit -inheritability -inheritable -inheritableness -inheritably -inheritage -inheritance -inheritor -inheritress -inheritrice -inheritrix -inhesion -inhiate -inhibit -inhibitable -inhibiter -inhibition -inhibitionist -inhibitive -inhibitor -inhibitory -inhomogeneity -inhomogeneous -inhomogeneously -inhospitable -inhospitableness -inhospitably -inhospitality -inhuman -inhumane -inhumanely -inhumanism -inhumanity -inhumanize -inhumanly -inhumanness -inhumate -inhumation -inhumationist -inhume -inhumer -inhumorous -inhumorously -inial -inidoneity -inidoneous -inimicable -inimical -inimicality -inimically -inimicalness -inimitability -inimitable -inimitableness -inimitably -iniome -iniomous -inion -iniquitable -iniquitably -iniquitous -iniquitously -iniquitousness -iniquity -inirritability -inirritable -inirritant -inirritative -inissuable -initial -initialer -initialist -initialize -initially -initiant -initiary -initiate -initiation -initiative -initiatively -initiator -initiatorily -initiatory -initiatress -initiatrix -initis -initive -inject -injectable -injection -injector -injelly -injudicial -injudicially -injudicious -injudiciously -injudiciousness -injunct -injunction -injunctive -injunctively -injurable -injure -injured -injuredly -injuredness -injurer -injurious -injuriously -injuriousness -injury -injustice -ink -inkberry -inkbush -inken -inker -inket -inkfish -inkholder -inkhorn -inkhornism -inkhornist -inkhornize -inkhornizer -inkindle -inkiness -inkish -inkle -inkless -inklike -inkling -inkmaker -inkmaking -inknot -inkosi -inkpot -inkroot -inks -inkshed -inkslinger -inkslinging -inkstain -inkstand -inkstandish -inkstone -inkweed -inkwell -inkwood -inkwriter -inky -inlagation -inlaid -inlaik -inlake -inland -inlander -inlandish -inlaut -inlaw -inlawry -inlay -inlayer -inlaying -inleague -inleak -inleakage -inlet -inlier -inlook -inlooker -inly -inlying -inmate -inmeats -inmixture -inmost -inn -innascibility -innascible -innate -innately -innateness -innatism -innative -innatural -innaturality -innaturally -inneity -inner -innerly -innermore -innermost -innermostly -innerness -innervate -innervation -innervational -innerve -inness -innest -innet -innholder -inning -inninmorite -innkeeper -innless -innocence -innocency -innocent -innocently -innocentness -innocuity -innocuous -innocuously -innocuousness -innominable -innominables -innominata -innominate -innominatum -innovant -innovate -innovation -innovational -innovationist -innovative -innovator -innovatory -innoxious -innoxiously -innoxiousness -innuendo -innumerability -innumerable -innumerableness -innumerably -innumerous -innutrient -innutrition -innutritious -innutritive -innyard -inobedience -inobedient -inobediently -inoblast -inobnoxious -inobscurable -inobservable -inobservance -inobservancy -inobservant -inobservantly -inobservantness -inobservation -inobtainable -inobtrusive -inobtrusively -inobtrusiveness -inobvious -inoccupation -inochondritis -inochondroma -inoculability -inoculable -inoculant -inocular -inoculate -inoculation -inoculative -inoculator -inoculum -inocystoma -inocyte -inodorous -inodorously -inodorousness -inoepithelioma -inoffending -inoffensive -inoffensively -inoffensiveness -inofficial -inofficially -inofficiosity -inofficious -inofficiously -inofficiousness -inogen -inogenesis -inogenic -inogenous -inoglia -inohymenitic -inolith -inoma -inominous -inomyoma -inomyositis -inomyxoma -inone -inoneuroma -inoperable -inoperative -inoperativeness -inopercular -inoperculate -inopinable -inopinate -inopinately -inopine -inopportune -inopportunely -inopportuneness -inopportunism -inopportunist -inopportunity -inoppressive -inoppugnable -inopulent -inorb -inorderly -inordinacy -inordinary -inordinate -inordinately -inordinateness -inorganic -inorganical -inorganically -inorganizable -inorganization -inorganized -inoriginate -inornate -inosclerosis -inoscopy -inosculate -inosculation -inosic -inosin -inosinic -inosite -inositol -inostensible -inostensibly -inotropic -inower -inoxidability -inoxidable -inoxidizable -inoxidize -inparabola -inpardonable -inpatient -inpayment -inpensioner -inphase -inpolygon -inpolyhedron -inport -inpour -inpush -input -inquaintance -inquartation -inquest -inquestual -inquiet -inquietation -inquietly -inquietness -inquietude -inquiline -inquilinism -inquilinity -inquilinous -inquinate -inquination -inquirable -inquirant -inquiration -inquire -inquirendo -inquirent -inquirer -inquiring -inquiringly -inquiry -inquisite -inquisition -inquisitional -inquisitionist -inquisitive -inquisitively -inquisitiveness -inquisitor -inquisitorial -inquisitorially -inquisitorialness -inquisitorious -inquisitorship -inquisitory -inquisitress -inquisitrix -inquisiturient -inradius -inreality -inrigged -inrigger -inrighted -inring -inro -inroad -inroader -inroll -inrooted -inrub -inrun -inrunning -inruption -inrush -insack -insagacity -insalivate -insalivation -insalubrious -insalubrity -insalutary -insalvability -insalvable -insane -insanely -insaneness -insanify -insanitariness -insanitary -insanitation -insanity -insapiency -insapient -insatiability -insatiable -insatiableness -insatiably -insatiate -insatiated -insatiately -insatiateness -insatiety -insatisfaction -insatisfactorily -insaturable -inscenation -inscibile -inscience -inscient -inscribable -inscribableness -inscribe -inscriber -inscript -inscriptible -inscription -inscriptional -inscriptioned -inscriptionist -inscriptionless -inscriptive -inscriptively -inscriptured -inscroll -inscrutability -inscrutable -inscrutableness -inscrutables -inscrutably -insculp -insculpture -insea -inseam -insect -insectan -insectarium -insectary -insectean -insected -insecticidal -insecticide -insectiferous -insectiform -insectifuge -insectile -insectine -insection -insectival -insectivore -insectivorous -insectlike -insectmonger -insectologer -insectologist -insectology -insectproof -insecure -insecurely -insecureness -insecurity -insee -inseer -inselberg -inseminate -insemination -insenescible -insensate -insensately -insensateness -insense -insensibility -insensibilization -insensibilize -insensibilizer -insensible -insensibleness -insensibly -insensitive -insensitiveness -insensitivity -insensuous -insentience -insentiency -insentient -inseparability -inseparable -inseparableness -inseparably -inseparate -inseparately -insequent -insert -insertable -inserted -inserter -insertion -insertional -insertive -inserviceable -insessor -insessorial -inset -insetter -inseverable -inseverably -inshave -insheathe -inshell -inshining -inship -inshoe -inshoot -inshore -inside -insider -insidiosity -insidious -insidiously -insidiousness -insight -insightful -insigne -insignia -insignificance -insignificancy -insignificant -insignificantly -insimplicity -insincere -insincerely -insincerity -insinking -insinuant -insinuate -insinuating -insinuatingly -insinuation -insinuative -insinuatively -insinuativeness -insinuator -insinuatory -insinuendo -insipid -insipidity -insipidly -insipidness -insipience -insipient -insipiently -insist -insistence -insistency -insistent -insistently -insister -insistingly -insistive -insititious -insnare -insnarement -insnarer -insobriety -insociability -insociable -insociableness -insociably -insocial -insocially -insofar -insolate -insolation -insole -insolence -insolency -insolent -insolently -insolentness -insolid -insolidity -insolubility -insoluble -insolubleness -insolubly -insolvability -insolvable -insolvably -insolvence -insolvency -insolvent -insomnia -insomniac -insomnious -insomnolence -insomnolency -insomnolent -insomuch -insonorous -insooth -insorb -insorbent -insouciance -insouciant -insouciantly -insoul -inspan -inspeak -inspect -inspectability -inspectable -inspectingly -inspection -inspectional -inspectioneer -inspective -inspector -inspectoral -inspectorate -inspectorial -inspectorship -inspectress -inspectrix -inspheration -insphere -inspirability -inspirable -inspirant -inspiration -inspirational -inspirationalism -inspirationally -inspirationist -inspirative -inspirator -inspiratory -inspiratrix -inspire -inspired -inspiredly -inspirer -inspiring -inspiringly -inspirit -inspiriter -inspiriting -inspiritingly -inspiritment -inspirometer -inspissant -inspissate -inspissation -inspissator -inspissosis -inspoke -inspoken -inspreith -instability -instable -install -installant -installation -installer -installment -instance -instancy -instanding -instant -instantaneity -instantaneous -instantaneously -instantaneousness -instanter -instantial -instantly -instantness -instar -instate -instatement -instaurate -instauration -instaurator -instead -instealing -insteam -insteep -instellation -instep -instigant -instigate -instigatingly -instigation -instigative -instigator -instigatrix -instill -instillation -instillator -instillatory -instiller -instillment -instinct -instinctive -instinctively -instinctivist -instinctivity -instinctual -instipulate -institor -institorial -institorian -institory -institute -instituter -institution -institutional -institutionalism -institutionalist -institutionality -institutionalization -institutionalize -institutionally -institutionary -institutionize -institutive -institutively -institutor -institutress -institutrix -instonement -instratified -instreaming -instrengthen -instressed -instroke -instruct -instructed -instructedly -instructedness -instructer -instructible -instruction -instructional -instructionary -instructive -instructively -instructiveness -instructor -instructorship -instructress -instrument -instrumental -instrumentalism -instrumentalist -instrumentality -instrumentalize -instrumentally -instrumentary -instrumentate -instrumentation -instrumentative -instrumentist -instrumentman -insuavity -insubduable -insubjection -insubmergible -insubmersible -insubmission -insubmissive -insubordinate -insubordinately -insubordinateness -insubordination -insubstantial -insubstantiality -insubstantiate -insubstantiation -insubvertible -insuccess -insuccessful -insucken -insuetude -insufferable -insufferableness -insufferably -insufficience -insufficiency -insufficient -insufficiently -insufflate -insufflation -insufflator -insula -insulance -insulant -insular -insularism -insularity -insularize -insularly -insulary -insulate -insulated -insulating -insulation -insulator -insulin -insulize -insulse -insulsity -insult -insultable -insultant -insultation -insulter -insulting -insultingly -insultproof -insunk -insuperability -insuperable -insuperableness -insuperably -insupportable -insupportableness -insupportably -insupposable -insuppressible -insuppressibly -insuppressive -insurability -insurable -insurance -insurant -insure -insured -insurer -insurge -insurgence -insurgency -insurgent -insurgentism -insurgescence -insurmountability -insurmountable -insurmountableness -insurmountably -insurpassable -insurrect -insurrection -insurrectional -insurrectionally -insurrectionary -insurrectionism -insurrectionist -insurrectionize -insurrectory -insusceptibility -insusceptible -insusceptibly -insusceptive -inswamp -inswarming -insweeping -inswell -inswept -inswing -inswinger -intabulate -intact -intactile -intactly -intactness -intagliated -intagliation -intaglio -intagliotype -intake -intaker -intangibility -intangible -intangibleness -intangibly -intarissable -intarsia -intarsiate -intarsist -intastable -intaxable -intechnicality -integer -integrability -integrable -integral -integrality -integralization -integralize -integrally -integrand -integrant -integraph -integrate -integration -integrative -integrator -integrifolious -integrious -integriously -integripalliate -integrity -integrodifferential -integropallial -integropalliate -integument -integumental -integumentary -integumentation -inteind -intellect -intellectation -intellected -intellectible -intellection -intellective -intellectively -intellectual -intellectualism -intellectualist -intellectualistic -intellectualistically -intellectuality -intellectualization -intellectualize -intellectualizer -intellectually -intellectualness -intelligence -intelligenced -intelligencer -intelligency -intelligent -intelligential -intelligently -intelligentsia -intelligibility -intelligible -intelligibleness -intelligibly -intelligize -intemerate -intemerately -intemerateness -intemeration -intemperable -intemperably -intemperament -intemperance -intemperate -intemperately -intemperateness -intemperature -intempestive -intempestively -intempestivity -intemporal -intemporally -intenability -intenable -intenancy -intend -intendance -intendancy -intendant -intendantism -intendantship -intended -intendedly -intendedness -intendence -intender -intendible -intending -intendingly -intendit -intendment -intenerate -inteneration -intenible -intensate -intensation -intensative -intense -intensely -intenseness -intensification -intensifier -intensify -intension -intensional -intensionally -intensitive -intensity -intensive -intensively -intensiveness -intent -intention -intentional -intentionalism -intentionality -intentionally -intentioned -intentionless -intentive -intentively -intentiveness -intently -intentness -inter -interabsorption -interacademic -interaccessory -interaccuse -interacinar -interacinous -interact -interaction -interactional -interactionism -interactionist -interactive -interactivity -interadaptation -interadditive -interadventual -interaffiliation -interagency -interagent -interagglutinate -interagglutination -interagree -interagreement -interalar -interallied -interally -interalveolar -interambulacral -interambulacrum -interamnian -interangular -interanimate -interannular -interantagonism -interantennal -interantennary -interapophyseal -interapplication -interarboration -interarch -interarcualis -interarmy -interarticular -interartistic -interarytenoid -interassociation -interassure -interasteroidal -interastral -interatomic -interatrial -interattrition -interaulic -interaural -interauricular -interavailability -interavailable -interaxal -interaxial -interaxillary -interaxis -interbalance -interbanded -interbank -interbedded -interbelligerent -interblend -interbody -interbonding -interborough -interbourse -interbrachial -interbrain -interbranch -interbranchial -interbreath -interbreed -interbrigade -interbring -interbronchial -intercadence -intercadent -intercalare -intercalarily -intercalarium -intercalary -intercalate -intercalation -intercalative -intercalatory -intercale -intercalm -intercanal -intercanalicular -intercapillary -intercardinal -intercarotid -intercarpal -intercarpellary -intercarrier -intercartilaginous -intercaste -intercatenated -intercausative -intercavernous -intercede -interceder -intercellular -intercensal -intercentral -intercentrum -intercept -intercepter -intercepting -interception -interceptive -interceptor -interceptress -intercerebral -intercession -intercessional -intercessionary -intercessionment -intercessive -intercessor -intercessorial -intercessory -interchaff -interchange -interchangeability -interchangeable -interchangeableness -interchangeably -interchanger -interchapter -intercharge -interchase -intercheck -interchoke -interchondral -interchurch -interciliary -intercilium -intercircle -intercirculate -intercirculation -intercision -intercitizenship -intercity -intercivic -intercivilization -interclash -interclasp -interclass -interclavicle -interclavicular -interclerical -intercloud -interclub -intercoastal -intercoccygeal -intercoccygean -intercohesion -intercollege -intercollegian -intercollegiate -intercolline -intercolonial -intercolonially -intercolonization -intercolumn -intercolumnal -intercolumnar -intercolumniation -intercom -intercombat -intercombination -intercombine -intercome -intercommission -intercommon -intercommonable -intercommonage -intercommoner -intercommunal -intercommune -intercommuner -intercommunicability -intercommunicable -intercommunicate -intercommunication -intercommunicative -intercommunicator -intercommunion -intercommunity -intercompany -intercomparable -intercompare -intercomparison -intercomplexity -intercomplimentary -interconal -interconciliary -intercondenser -intercondylar -intercondylic -intercondyloid -interconfessional -interconfound -interconnect -interconnection -intercontinental -intercontorted -intercontradiction -intercontradictory -interconversion -interconvertibility -interconvertible -interconvertibly -intercooler -intercooling -intercoracoid -intercorporate -intercorpuscular -intercorrelate -intercorrelation -intercortical -intercosmic -intercosmically -intercostal -intercostally -intercostobrachial -intercostohumeral -intercotylar -intercounty -intercourse -intercoxal -intercranial -intercreate -intercrescence -intercrinal -intercrop -intercross -intercrural -intercrust -intercrystalline -intercrystallization -intercrystallize -intercultural -interculture -intercurl -intercurrence -intercurrent -intercurrently -intercursation -intercuspidal -intercutaneous -intercystic -interdash -interdebate -interdenominational -interdental -interdentally -interdentil -interdepartmental -interdepartmentally -interdepend -interdependable -interdependence -interdependency -interdependent -interdependently -interderivative -interdespise -interdestructive -interdestructiveness -interdetermination -interdetermine -interdevour -interdict -interdiction -interdictive -interdictor -interdictory -interdictum -interdifferentiation -interdiffuse -interdiffusion -interdiffusive -interdiffusiveness -interdigital -interdigitate -interdigitation -interdine -interdiscal -interdispensation -interdistinguish -interdistrict -interdivision -interdome -interdorsal -interdrink -intereat -interelectrode -interelectrodic -interempire -interenjoy -interentangle -interentanglement -interepidemic -interepimeral -interepithelial -interequinoctial -interessee -interest -interested -interestedly -interestedness -interester -interesting -interestingly -interestingness -interestless -interestuarine -interface -interfacial -interfactional -interfamily -interfascicular -interfault -interfector -interfederation -interfemoral -interfenestral -interfenestration -interferant -interfere -interference -interferent -interferential -interferer -interfering -interferingly -interferingness -interferometer -interferometry -interferric -interfertile -interfertility -interfibrillar -interfibrillary -interfibrous -interfilamentar -interfilamentary -interfilamentous -interfilar -interfiltrate -interfinger -interflange -interflashing -interflow -interfluence -interfluent -interfluminal -interfluous -interfluve -interfluvial -interflux -interfold -interfoliaceous -interfoliar -interfoliate -interfollicular -interforce -interfraternal -interfraternity -interfret -interfretted -interfriction -interfrontal -interfruitful -interfulgent -interfuse -interfusion -interganglionic -intergenerant -intergenerating -intergeneration -intergential -intergesture -intergilt -interglacial -interglandular -interglobular -interglyph -intergossip -intergovernmental -intergradation -intergrade -intergradient -intergraft -intergranular -intergrapple -intergrave -intergroupal -intergrow -intergrown -intergrowth -intergular -intergyral -interhabitation -interhemal -interhemispheric -interhostile -interhuman -interhyal -interhybridize -interim -interimist -interimistic -interimistical -interimistically -interimperial -interincorporation -interindependence -interindicate -interindividual -interinfluence -interinhibition -interinhibitive -interinsert -interinsular -interinsurance -interinsurer -interinvolve -interionic -interior -interiority -interiorize -interiorly -interiorness -interirrigation -interisland -interjacence -interjacency -interjacent -interjaculate -interjaculatory -interjangle -interjealousy -interject -interjection -interjectional -interjectionalize -interjectionally -interjectionary -interjectionize -interjectiveness -interjector -interjectorily -interjectory -interjectural -interjoin -interjoist -interjudgment -interjunction -interkinesis -interkinetic -interknit -interknot -interknow -interknowledge -interlaboratory -interlace -interlaced -interlacedly -interlacement -interlacery -interlacustrine -interlaid -interlake -interlamellar -interlamellation -interlaminar -interlaminate -interlamination -interlanguage -interlap -interlapse -interlard -interlardation -interlardment -interlatitudinal -interlaudation -interlay -interleaf -interleague -interleave -interleaver -interlibel -interlibrary -interlie -interligamentary -interligamentous -interlight -interlimitation -interline -interlineal -interlineally -interlinear -interlinearily -interlinearly -interlineary -interlineate -interlineation -interlinement -interliner -interlingual -interlinguist -interlinguistic -interlining -interlink -interloan -interlobar -interlobate -interlobular -interlocal -interlocally -interlocate -interlocation -interlock -interlocker -interlocular -interloculus -interlocution -interlocutive -interlocutor -interlocutorily -interlocutory -interlocutress -interlocutrice -interlocutrix -interloop -interlope -interloper -interlot -interlucation -interlucent -interlude -interluder -interludial -interlunar -interlunation -interlying -intermalleolar -intermammary -intermammillary -intermandibular -intermanorial -intermarginal -intermarine -intermarriage -intermarriageable -intermarry -intermason -intermastoid -intermat -intermatch -intermaxilla -intermaxillar -intermaxillary -intermaze -intermeasurable -intermeasure -intermeddle -intermeddlement -intermeddler -intermeddlesome -intermeddlesomeness -intermeddling -intermeddlingly -intermediacy -intermediae -intermedial -intermediary -intermediate -intermediately -intermediateness -intermediation -intermediator -intermediatory -intermedium -intermedius -intermeet -intermelt -intermembral -intermembranous -intermeningeal -intermenstrual -intermenstruum -interment -intermental -intermention -intermercurial -intermesenterial -intermesenteric -intermesh -intermessage -intermessenger -intermetacarpal -intermetallic -intermetameric -intermetatarsal -intermew -intermewed -intermewer -intermezzo -intermigration -interminability -interminable -interminableness -interminably -interminant -interminate -intermine -intermingle -intermingledom -interminglement -interminister -interministerial -interministerium -intermission -intermissive -intermit -intermitted -intermittedly -intermittence -intermittency -intermittent -intermittently -intermitter -intermitting -intermittingly -intermix -intermixedly -intermixtly -intermixture -intermobility -intermodification -intermodillion -intermodulation -intermolar -intermolecular -intermomentary -intermontane -intermorainic -intermotion -intermountain -intermundane -intermundial -intermundian -intermundium -intermunicipal -intermunicipality -intermural -intermuscular -intermutation -intermutual -intermutually -intermutule -intern -internal -internality -internalization -internalize -internally -internalness -internals -internarial -internasal -internation -international -internationalism -internationalist -internationality -internationalization -internationalize -internationally -interneciary -internecinal -internecine -internecion -internecive -internee -internetted -interneural -interneuronic -internidal -internist -internment -internobasal -internodal -internode -internodial -internodian -internodium -internodular -internship -internuclear -internuncial -internunciary -internunciatory -internuncio -internuncioship -internuncius -internuptial -interobjective -interoceanic -interoceptive -interoceptor -interocular -interoffice -interolivary -interopercle -interopercular -interoperculum -interoptic -interorbital -interorbitally -interoscillate -interosculant -interosculate -interosculation -interosseal -interosseous -interownership -interpage -interpalatine -interpalpebral -interpapillary -interparenchymal -interparental -interparenthetical -interparenthetically -interparietal -interparietale -interparliament -interparliamentary -interparoxysmal -interparty -interpause -interpave -interpeal -interpectoral -interpeduncular -interpel -interpellant -interpellate -interpellation -interpellator -interpenetrable -interpenetrant -interpenetrate -interpenetration -interpenetrative -interpenetratively -interpermeate -interpersonal -interpervade -interpetaloid -interpetiolar -interpetiolary -interphalangeal -interphase -interphone -interpiece -interpilaster -interpilastering -interplacental -interplait -interplanetary -interplant -interplanting -interplay -interplea -interplead -interpleader -interpledge -interpleural -interplical -interplicate -interplication -interplight -interpoint -interpolable -interpolar -interpolary -interpolate -interpolater -interpolation -interpolative -interpolatively -interpolator -interpole -interpolitical -interpolity -interpollinate -interpolymer -interpone -interportal -interposable -interposal -interpose -interposer -interposing -interposingly -interposition -interposure -interpour -interprater -interpressure -interpret -interpretability -interpretable -interpretableness -interpretably -interpretament -interpretation -interpretational -interpretative -interpretatively -interpreter -interpretership -interpretive -interpretively -interpretorial -interpretress -interprismatic -interproduce -interprofessional -interproglottidal -interproportional -interprotoplasmic -interprovincial -interproximal -interproximate -interpterygoid -interpubic -interpulmonary -interpunct -interpunction -interpunctuate -interpunctuation -interpupillary -interquarrel -interquarter -interrace -interracial -interracialism -interradial -interradially -interradiate -interradiation -interradium -interradius -interrailway -interramal -interramicorn -interramification -interreceive -interreflection -interregal -interregimental -interregional -interregna -interregnal -interregnum -interreign -interrelate -interrelated -interrelatedly -interrelatedness -interrelation -interrelationship -interreligious -interrenal -interrenalism -interrepellent -interrepulsion -interrer -interresponsibility -interresponsible -interreticular -interreticulation -interrex -interrhyme -interright -interriven -interroad -interrogability -interrogable -interrogant -interrogate -interrogatedness -interrogatee -interrogatingly -interrogation -interrogational -interrogative -interrogatively -interrogator -interrogatorily -interrogatory -interrogatrix -interrogee -interroom -interrule -interrun -interrupt -interrupted -interruptedly -interruptedness -interrupter -interruptible -interrupting -interruptingly -interruption -interruptive -interruptively -interruptor -interruptory -intersale -intersalute -interscapilium -interscapular -interscapulum -interscene -interscholastic -interschool -interscience -interscribe -interscription -interseaboard -interseamed -intersect -intersectant -intersection -intersectional -intersegmental -interseminal -intersentimental -interseptal -intersertal -intersesamoid -intersession -intersessional -interset -intersex -intersexual -intersexualism -intersexuality -intershade -intershifting -intershock -intershoot -intershop -intersidereal -intersituate -intersocial -intersocietal -intersociety -intersole -intersolubility -intersoluble -intersomnial -intersomnious -intersonant -intersow -interspace -interspatial -interspatially -interspeaker -interspecial -interspecific -interspersal -intersperse -interspersedly -interspersion -interspheral -intersphere -interspicular -interspinal -interspinalis -interspinous -interspiral -interspiration -intersporal -intersprinkle -intersqueeze -interstadial -interstage -interstaminal -interstapedial -interstate -interstation -interstellar -interstellary -intersterile -intersterility -intersternal -interstice -intersticed -interstimulate -interstimulation -interstitial -interstitially -interstitious -interstratification -interstratify -interstreak -interstream -interstreet -interstrial -interstriation -interstrive -intersubjective -intersubsistence -intersubstitution -intersuperciliary -intersusceptation -intersystem -intersystematical -intertalk -intertangle -intertanglement -intertarsal -interteam -intertentacular -intertergal -interterminal -interterritorial -intertessellation -intertexture -interthing -interthreaded -interthronging -intertidal -intertie -intertill -intertillage -intertinge -intertissued -intertone -intertongue -intertonic -intertouch -intertown -intertrabecular -intertrace -intertrade -intertrading -intertraffic -intertragian -intertransformability -intertransformable -intertransmissible -intertransmission -intertranspicuous -intertransversal -intertransversalis -intertransversary -intertransverse -intertrappean -intertribal -intertriginous -intertriglyph -intertrigo -intertrinitarian -intertrochanteric -intertropic -intertropical -intertropics -intertrude -intertuberal -intertubercular -intertubular -intertwin -intertwine -intertwinement -intertwining -intertwiningly -intertwist -intertwistingly -interungular -interungulate -interunion -interuniversity -interurban -interureteric -intervaginal -interval -intervale -intervalley -intervallic -intervallum -intervalvular -intervarietal -intervary -intervascular -intervein -interveinal -intervenant -intervene -intervener -intervenience -interveniency -intervenient -intervenium -intervention -interventional -interventionism -interventionist -interventive -interventor -interventral -interventralia -interventricular -intervenular -interverbal -interversion -intervert -intervertebra -intervertebral -intervertebrally -intervesicular -interview -interviewable -interviewee -interviewer -intervillous -intervisibility -intervisible -intervisit -intervisitation -intervital -intervocal -intervocalic -intervolute -intervolution -intervolve -interwar -interweave -interweavement -interweaver -interweaving -interweavingly -interwed -interweld -interwhiff -interwhile -interwhistle -interwind -interwish -interword -interwork -interworks -interworld -interworry -interwound -interwove -interwoven -interwovenly -interwrap -interwreathe -interwrought -interxylary -interzonal -interzone -interzooecial -interzygapophysial -intestable -intestacy -intestate -intestation -intestinal -intestinally -intestine -intestineness -intestiniform -intestinovesical -intext -intextine -intexture -inthrall -inthrallment -inthrong -inthronistic -inthronization -inthronize -inthrow -inthrust -intil -intima -intimacy -intimal -intimate -intimately -intimateness -intimater -intimation -intimidate -intimidation -intimidator -intimidatory -intimidity -intimity -intinction -intine -intitule -into -intoed -intolerability -intolerable -intolerableness -intolerably -intolerance -intolerancy -intolerant -intolerantly -intolerantness -intolerated -intolerating -intoleration -intonable -intonate -intonation -intonator -intone -intonement -intoner -intoothed -intorsion -intort -intortillage -intown -intoxation -intoxicable -intoxicant -intoxicate -intoxicated -intoxicatedly -intoxicatedness -intoxicating -intoxicatingly -intoxication -intoxicative -intoxicator -intrabiontic -intrabranchial -intrabred -intrabronchial -intrabuccal -intracalicular -intracanalicular -intracanonical -intracapsular -intracardiac -intracardial -intracarpal -intracarpellary -intracartilaginous -intracellular -intracellularly -intracephalic -intracerebellar -intracerebral -intracerebrally -intracervical -intrachordal -intracistern -intracity -intraclitelline -intracloacal -intracoastal -intracoelomic -intracolic -intracollegiate -intracommunication -intracompany -intracontinental -intracorporeal -intracorpuscular -intracortical -intracosmic -intracosmical -intracosmically -intracostal -intracranial -intracranially -intractability -intractable -intractableness -intractably -intractile -intracutaneous -intracystic -intrada -intradepartmental -intradermal -intradermally -intradermic -intradermically -intradermo -intradistrict -intradivisional -intrados -intraduodenal -intradural -intraecclesiastical -intraepiphyseal -intraepithelial -intrafactory -intrafascicular -intrafissural -intrafistular -intrafoliaceous -intraformational -intrafusal -intragastric -intragemmal -intraglacial -intraglandular -intraglobular -intragroup -intragroupal -intragyral -intrahepatic -intrahyoid -intraimperial -intrait -intrajugular -intralamellar -intralaryngeal -intralaryngeally -intraleukocytic -intraligamentary -intraligamentous -intralingual -intralobar -intralobular -intralocular -intralogical -intralumbar -intramammary -intramarginal -intramastoid -intramatrical -intramatrically -intramedullary -intramembranous -intrameningeal -intramental -intrametropolitan -intramolecular -intramontane -intramorainic -intramundane -intramural -intramuralism -intramuscular -intramuscularly -intramyocardial -intranarial -intranasal -intranatal -intranational -intraneous -intraneural -intranidal -intranquil -intranquillity -intranscalency -intranscalent -intransferable -intransformable -intransfusible -intransgressible -intransient -intransigency -intransigent -intransigentism -intransigentist -intransigently -intransitable -intransitive -intransitively -intransitiveness -intransitivity -intranslatable -intransmissible -intransmutability -intransmutable -intransparency -intransparent -intrant -intranuclear -intraoctave -intraocular -intraoral -intraorbital -intraorganization -intraossal -intraosseous -intraosteal -intraovarian -intrapair -intraparenchymatous -intraparietal -intraparochial -intraparty -intrapelvic -intrapericardiac -intrapericardial -intraperineal -intraperiosteal -intraperitoneal -intraperitoneally -intrapetiolar -intraphilosophic -intrapial -intraplacental -intraplant -intrapleural -intrapolar -intrapontine -intraprostatic -intraprotoplasmic -intrapsychic -intrapsychical -intrapsychically -intrapulmonary -intrapyretic -intrarachidian -intrarectal -intrarelation -intrarenal -intraretinal -intrarhachidian -intraschool -intrascrotal -intrasegmental -intraselection -intrasellar -intraseminal -intraseptal -intraserous -intrashop -intraspecific -intraspinal -intrastate -intrastromal -intrasusception -intrasynovial -intratarsal -intratelluric -intraterritorial -intratesticular -intrathecal -intrathoracic -intrathyroid -intratomic -intratonsillar -intratrabecular -intratracheal -intratracheally -intratropical -intratubal -intratubular -intratympanic -intravaginal -intravalvular -intravasation -intravascular -intravenous -intravenously -intraventricular -intraverbal -intraversable -intravertebral -intravertebrally -intravesical -intravital -intravitelline -intravitreous -intraxylary -intreat -intrench -intrenchant -intrencher -intrenchment -intrepid -intrepidity -intrepidly -intrepidness -intricacy -intricate -intricately -intricateness -intrication -intrigant -intrigue -intrigueproof -intriguer -intriguery -intriguess -intriguing -intriguingly -intrine -intrinse -intrinsic -intrinsical -intrinsicality -intrinsically -intrinsicalness -introactive -introceptive -introconversion -introconvertibility -introconvertible -introdden -introduce -introducee -introducement -introducer -introducible -introduction -introductive -introductively -introductor -introductorily -introductoriness -introductory -introductress -introflex -introflexion -introgression -introgressive -introinflection -introit -introitus -introject -introjection -introjective -intromissibility -intromissible -intromission -intromissive -intromit -intromittence -intromittent -intromitter -intropression -intropulsive -introreception -introrsal -introrse -introrsely -introsensible -introsentient -introspect -introspectable -introspection -introspectional -introspectionism -introspectionist -introspective -introspectively -introspectiveness -introspectivism -introspectivist -introspector -introsuction -introsuscept -introsusception -introthoracic -introtraction -introvenient -introverse -introversibility -introversible -introversion -introversive -introversively -introvert -introverted -introvertive -introvision -introvolution -intrudance -intrude -intruder -intruding -intrudingly -intrudress -intruse -intrusion -intrusional -intrusionism -intrusionist -intrusive -intrusively -intrusiveness -intrust -intubate -intubation -intubationist -intubator -intube -intue -intuent -intuicity -intuit -intuitable -intuition -intuitional -intuitionalism -intuitionalist -intuitionally -intuitionism -intuitionist -intuitionistic -intuitionless -intuitive -intuitively -intuitiveness -intuitivism -intuitivist -intumesce -intumescence -intumescent -inturbidate -inturn -inturned -inturning -intussuscept -intussusception -intussusceptive -intwist -inula -inulaceous -inulase -inulin -inuloid -inumbrate -inumbration -inunct -inunction -inunctum -inunctuosity -inunctuous -inundable -inundant -inundate -inundation -inundator -inundatory -inunderstandable -inurbane -inurbanely -inurbaneness -inurbanity -inure -inured -inuredness -inurement -inurn -inusitate -inusitateness -inusitation -inustion -inutile -inutilely -inutility -inutilized -inutterable -invaccinate -invaccination -invadable -invade -invader -invaginable -invaginate -invagination -invalescence -invalid -invalidate -invalidation -invalidator -invalidcy -invalidhood -invalidish -invalidism -invalidity -invalidly -invalidness -invalidship -invalorous -invaluable -invaluableness -invaluably -invalued -invariability -invariable -invariableness -invariably -invariance -invariancy -invariant -invariantive -invariantively -invariantly -invaried -invasion -invasionist -invasive -invecked -invected -invection -invective -invectively -invectiveness -invectivist -invector -inveigh -inveigher -inveigle -inveiglement -inveigler -inveil -invein -invendibility -invendible -invendibleness -invenient -invent -inventable -inventary -inventer -inventful -inventibility -inventible -inventibleness -invention -inventional -inventionless -inventive -inventively -inventiveness -inventor -inventoriable -inventorial -inventorially -inventory -inventress -inventurous -inveracious -inveracity -inverisimilitude -inverity -inverminate -invermination -invernacular -inversable -inversatile -inverse -inversed -inversedly -inversely -inversion -inversionist -inversive -invert -invertase -invertebracy -invertebral -invertebrate -invertebrated -inverted -invertedly -invertend -inverter -invertibility -invertible -invertile -invertin -invertive -invertor -invest -investable -investible -investigable -investigatable -investigate -investigating -investigatingly -investigation -investigational -investigative -investigator -investigatorial -investigatory -investitive -investitor -investiture -investment -investor -inveteracy -inveterate -inveterately -inveterateness -inviability -invictive -invidious -invidiously -invidiousness -invigilance -invigilancy -invigilation -invigilator -invigor -invigorant -invigorate -invigorating -invigoratingly -invigoratingness -invigoration -invigorative -invigoratively -invigorator -invinate -invination -invincibility -invincible -invincibleness -invincibly -inviolability -inviolable -inviolableness -inviolably -inviolacy -inviolate -inviolated -inviolately -inviolateness -invirile -invirility -invirtuate -inviscate -inviscation -inviscid -inviscidity -invised -invisibility -invisible -invisibleness -invisibly -invitable -invital -invitant -invitation -invitational -invitatory -invite -invitee -invitement -inviter -invitiate -inviting -invitingly -invitingness -invitress -invitrifiable -invivid -invocable -invocant -invocate -invocation -invocative -invocator -invocatory -invoice -invoke -invoker -involatile -involatility -involucel -involucellate -involucellated -involucral -involucrate -involucre -involucred -involucriform -involucrum -involuntarily -involuntariness -involuntary -involute -involuted -involutedly -involutely -involution -involutional -involutionary -involutorial -involutory -involve -involved -involvedly -involvedness -involvement -involvent -involver -invulnerability -invulnerable -invulnerableness -invulnerably -invultuation -inwale -inwall -inwandering -inward -inwardly -inwardness -inwards -inweave -inwedged -inweed -inweight -inwick -inwind -inwit -inwith -inwood -inwork -inworn -inwound -inwoven -inwrap -inwrapment -inwreathe -inwrit -inwrought -inyoite -inyoke -io -iodate -iodation -iodhydrate -iodhydric -iodhydrin -iodic -iodide -iodiferous -iodinate -iodination -iodine -iodinium -iodinophil -iodinophilic -iodinophilous -iodism -iodite -iodization -iodize -iodizer -iodo -iodobehenate -iodobenzene -iodobromite -iodocasein -iodochloride -iodochromate -iodocresol -iododerma -iodoethane -iodoform -iodogallicin -iodohydrate -iodohydric -iodohydrin -iodol -iodomercurate -iodomercuriate -iodomethane -iodometric -iodometrical -iodometry -iodonium -iodopsin -iodoso -iodosobenzene -iodospongin -iodotannic -iodotherapy -iodothyrin -iodous -iodoxy -iodoxybenzene -iodyrite -iolite -ion -ionic -ionium -ionizable -ionization -ionize -ionizer -ionogen -ionogenic -ionone -ionosphere -ionospheric -iontophoresis -iota -iotacism -iotacismus -iotacist -iotization -iotize -ipecac -ipecacuanha -ipecacuanhic -ipid -ipil -ipomea -ipomoein -ipseand -ipsedixitish -ipsedixitism -ipsedixitist -ipseity -ipsilateral -iracund -iracundity -iracundulous -irade -irascent -irascibility -irascible -irascibleness -irascibly -irate -irately -ire -ireful -irefully -irefulness -ireless -irenarch -irene -irenic -irenical -irenically -irenicism -irenicist -irenicon -irenics -irenicum -irian -irid -iridaceous -iridadenosis -iridal -iridalgia -iridate -iridauxesis -iridectome -iridectomize -iridectomy -iridectropium -iridemia -iridencleisis -iridentropium -irideous -irideremia -irides -iridesce -iridescence -iridescency -iridescent -iridescently -iridial -iridian -iridiate -iridic -iridical -iridin -iridine -iridiocyte -iridiophore -iridioplatinum -iridious -iridite -iridium -iridization -iridize -iridoavulsion -iridocapsulitis -iridocele -iridoceratitic -iridochoroiditis -iridocoloboma -iridoconstrictor -iridocyclitis -iridocyte -iridodesis -iridodiagnosis -iridodialysis -iridodonesis -iridokinesia -iridomalacia -iridomotor -iridoncus -iridoparalysis -iridophore -iridoplegia -iridoptosis -iridopupillary -iridorhexis -iridosclerotomy -iridosmine -iridosmium -iridotasis -iridotome -iridotomy -iris -irisated -irisation -iriscope -irised -irisin -irislike -irisroot -iritic -iritis -irk -irksome -irksomely -irksomeness -irok -iroko -iron -ironback -ironbark -ironbound -ironbush -ironclad -irone -ironer -ironfisted -ironflower -ironhanded -ironhandedly -ironhandedness -ironhard -ironhead -ironheaded -ironhearted -ironheartedly -ironheartedness -ironical -ironically -ironicalness -ironice -ironish -ironism -ironist -ironize -ironless -ironlike -ironly -ironmaker -ironmaking -ironman -ironmaster -ironmonger -ironmongering -ironmongery -ironness -ironshod -ironshot -ironside -ironsided -ironsides -ironsmith -ironstone -ironware -ironweed -ironwood -ironwork -ironworked -ironworker -ironworking -ironworks -ironwort -irony -irradiance -irradiancy -irradiant -irradiate -irradiated -irradiatingly -irradiation -irradiative -irradiator -irradicable -irradicate -irrarefiable -irrationability -irrationable -irrationably -irrational -irrationalism -irrationalist -irrationalistic -irrationality -irrationalize -irrationally -irrationalness -irreality -irrealizable -irrebuttable -irreceptive -irreceptivity -irreciprocal -irreciprocity -irreclaimability -irreclaimable -irreclaimableness -irreclaimably -irreclaimed -irrecognition -irrecognizability -irrecognizable -irrecognizably -irrecognizant -irrecollection -irreconcilability -irreconcilable -irreconcilableness -irreconcilably -irreconcile -irreconcilement -irreconciliability -irreconciliable -irreconciliableness -irreconciliably -irreconciliation -irrecordable -irrecoverable -irrecoverableness -irrecoverably -irrecusable -irrecusably -irredeemability -irredeemable -irredeemableness -irredeemably -irredeemed -irredenta -irredential -irredressibility -irredressible -irredressibly -irreducibility -irreducible -irreducibleness -irreducibly -irreductibility -irreductible -irreduction -irreferable -irreflection -irreflective -irreflectively -irreflectiveness -irreflexive -irreformability -irreformable -irrefragability -irrefragable -irrefragableness -irrefragably -irrefrangibility -irrefrangible -irrefrangibleness -irrefrangibly -irrefusable -irrefutability -irrefutable -irrefutableness -irrefutably -irregardless -irregeneracy -irregenerate -irregeneration -irregular -irregularism -irregularist -irregularity -irregularize -irregularly -irregularness -irregulate -irregulated -irregulation -irrelate -irrelated -irrelation -irrelative -irrelatively -irrelativeness -irrelevance -irrelevancy -irrelevant -irrelevantly -irreliability -irrelievable -irreligion -irreligionism -irreligionist -irreligionize -irreligiosity -irreligious -irreligiously -irreligiousness -irreluctant -irremeable -irremeably -irremediable -irremediableness -irremediably -irrememberable -irremissibility -irremissible -irremissibleness -irremissibly -irremission -irremissive -irremovability -irremovable -irremovableness -irremovably -irremunerable -irrenderable -irrenewable -irrenunciable -irrepair -irrepairable -irreparability -irreparable -irreparableness -irreparably -irrepassable -irrepealability -irrepealable -irrepealableness -irrepealably -irrepentance -irrepentant -irrepentantly -irreplaceable -irreplaceably -irrepleviable -irreplevisable -irreportable -irreprehensible -irreprehensibleness -irreprehensibly -irrepresentable -irrepresentableness -irrepressibility -irrepressible -irrepressibleness -irrepressibly -irrepressive -irreproachability -irreproachable -irreproachableness -irreproachably -irreproducible -irreproductive -irreprovable -irreprovableness -irreprovably -irreptitious -irrepublican -irresilient -irresistance -irresistibility -irresistible -irresistibleness -irresistibly -irresoluble -irresolubleness -irresolute -irresolutely -irresoluteness -irresolution -irresolvability -irresolvable -irresolvableness -irresolved -irresolvedly -irresonance -irresonant -irrespectability -irrespectable -irrespectful -irrespective -irrespectively -irrespirable -irrespondence -irresponsibility -irresponsible -irresponsibleness -irresponsibly -irresponsive -irresponsiveness -irrestrainable -irrestrainably -irrestrictive -irresultive -irresuscitable -irresuscitably -irretention -irretentive -irretentiveness -irreticence -irreticent -irretraceable -irretraceably -irretractable -irretractile -irretrievability -irretrievable -irretrievableness -irretrievably -irrevealable -irrevealably -irreverence -irreverend -irreverendly -irreverent -irreverential -irreverentialism -irreverentially -irreverently -irreversibility -irreversible -irreversibleness -irreversibly -irrevertible -irreviewable -irrevisable -irrevocability -irrevocable -irrevocableness -irrevocably -irrevoluble -irrigable -irrigably -irrigant -irrigate -irrigation -irrigational -irrigationist -irrigative -irrigator -irrigatorial -irrigatory -irriguous -irriguousness -irrision -irrisor -irrisory -irritability -irritable -irritableness -irritably -irritament -irritancy -irritant -irritate -irritatedly -irritating -irritatingly -irritation -irritative -irritativeness -irritator -irritatory -irritomotile -irritomotility -irrorate -irrotational -irrotationally -irrubrical -irrupt -irruptible -irruption -irruptive -irruptively -is -isabelina -isabelita -isabnormal -isaconitine -isacoustic -isadelphous -isagoge -isagogic -isagogical -isagogically -isagogics -isagon -isallobar -isallotherm -isamine -isandrous -isanemone -isanomal -isanomalous -isanthous -isapostolic -isarioid -isatate -isatic -isatide -isatin -isatinic -isatogen -isatogenic -isazoxy -isba -ischemia -ischemic -ischiac -ischiadic -ischiadicus -ischial -ischialgia -ischialgic -ischiatic -ischidrosis -ischioanal -ischiobulbar -ischiocapsular -ischiocaudal -ischiocavernosus -ischiocavernous -ischiocele -ischiocerite -ischiococcygeal -ischiofemoral -ischiofibular -ischioiliac -ischioneuralgia -ischioperineal -ischiopodite -ischiopubic -ischiopubis -ischiorectal -ischiorrhogic -ischiosacral -ischiotibial -ischiovaginal -ischiovertebral -ischium -ischocholia -ischuretic -ischuria -ischury -isenergic -isentropic -isepiptesial -isepiptesis -iserine -iserite -isethionate -isethionic -ishpingo -ishshakku -isidiiferous -isidioid -isidiophorous -isidiose -isidium -isidoid -isindazole -isinglass -island -islander -islandhood -islandic -islandish -islandless -islandlike -islandman -islandress -islandry -islandy -islay -isle -isleless -islesman -islet -isleted -isleward -islot -ism -ismal -ismatic -ismatical -ismaticalness -ismdom -ismy -iso -isoabnormal -isoagglutination -isoagglutinative -isoagglutinin -isoagglutinogen -isoalantolactone -isoallyl -isoamarine -isoamide -isoamyl -isoamylamine -isoamylene -isoamylethyl -isoamylidene -isoantibody -isoantigen -isoapiole -isoasparagine -isoaurore -isobar -isobarbaloin -isobarbituric -isobare -isobaric -isobarism -isobarometric -isobase -isobath -isobathic -isobathytherm -isobathythermal -isobathythermic -isobenzofuran -isobilateral -isobilianic -isobiogenetic -isoborneol -isobornyl -isobront -isobronton -isobutane -isobutyl -isobutylene -isobutyraldehyde -isobutyrate -isobutyric -isobutyryl -isocamphor -isocamphoric -isocaproic -isocarbostyril -isocarpic -isocarpous -isocellular -isocephalic -isocephalism -isocephalous -isocephaly -isocercal -isocercy -isochasm -isochasmic -isocheim -isocheimal -isocheimenal -isocheimic -isocheimonal -isochlor -isochlorophyll -isochlorophyllin -isocholanic -isocholesterin -isocholesterol -isochor -isochoric -isochromatic -isochronal -isochronally -isochrone -isochronic -isochronical -isochronism -isochronize -isochronon -isochronous -isochronously -isochroous -isocinchomeronic -isocinchonine -isocitric -isoclasite -isoclimatic -isoclinal -isocline -isoclinic -isocodeine -isocola -isocolic -isocolon -isocoria -isocorybulbin -isocorybulbine -isocorydine -isocoumarin -isocracy -isocrat -isocratic -isocreosol -isocrotonic -isocrymal -isocryme -isocrymic -isocyanate -isocyanic -isocyanide -isocyanine -isocyano -isocyanogen -isocyanurate -isocyanuric -isocyclic -isocymene -isocytic -isodactylism -isodactylous -isodiabatic -isodialuric -isodiametric -isodiametrical -isodiazo -isodiazotate -isodimorphic -isodimorphism -isodimorphous -isodomic -isodomous -isodomum -isodont -isodontous -isodrome -isodulcite -isodurene -isodynamia -isodynamic -isodynamical -isoelectric -isoelectrically -isoelectronic -isoelemicin -isoemodin -isoenergetic -isoerucic -isoeugenol -isoflavone -isoflor -isogamete -isogametic -isogametism -isogamic -isogamous -isogamy -isogen -isogenesis -isogenetic -isogenic -isogenotype -isogenotypic -isogenous -isogeny -isogeotherm -isogeothermal -isogeothermic -isogloss -isoglossal -isognathism -isognathous -isogon -isogonal -isogonality -isogonally -isogonic -isogoniostat -isogonism -isograft -isogram -isograph -isographic -isographical -isographically -isography -isogynous -isohaline -isohalsine -isohel -isohemopyrrole -isoheptane -isohesperidin -isohexyl -isohydric -isohydrocyanic -isohydrosorbic -isohyet -isohyetal -isoimmune -isoimmunity -isoimmunization -isoimmunize -isoindazole -isoindigotin -isoindole -isoionone -isokeraunic -isokeraunographic -isokeraunophonic -isokontan -isokurtic -isolability -isolable -isolapachol -isolate -isolated -isolatedly -isolating -isolation -isolationism -isolationist -isolative -isolecithal -isoleucine -isolichenin -isolinolenic -isologous -isologue -isology -isolysin -isolysis -isomagnetic -isomaltose -isomastigate -isomelamine -isomenthone -isomer -isomere -isomeric -isomerical -isomerically -isomeride -isomerism -isomerization -isomerize -isomeromorphism -isomerous -isomery -isometric -isometrical -isometrically -isometrograph -isometropia -isometry -isomorph -isomorphic -isomorphism -isomorphous -isomyarian -isoneph -isonephelic -isonergic -isonicotinic -isonitramine -isonitrile -isonitroso -isonomic -isonomous -isonomy -isonuclear -isonym -isonymic -isonymy -isooleic -isoosmosis -isopachous -isopag -isoparaffin -isopectic -isopelletierin -isopelletierine -isopentane -isoperimeter -isoperimetric -isoperimetrical -isoperimetry -isopetalous -isophanal -isophane -isophasal -isophene -isophenomenal -isophoria -isophorone -isophthalic -isophthalyl -isophyllous -isophylly -isopicramic -isopiestic -isopiestically -isopilocarpine -isoplere -isopleth -isopleural -isopleuran -isopleurous -isopod -isopodan -isopodiform -isopodimorphous -isopodous -isopogonous -isopolite -isopolitical -isopolity -isopoly -isoprene -isopropenyl -isopropyl -isopropylacetic -isopropylamine -isopsephic -isopsephism -isopterous -isoptic -isopulegone -isopurpurin -isopycnic -isopyre -isopyromucic -isopyrrole -isoquercitrin -isoquinine -isoquinoline -isorcinol -isorhamnose -isorhodeose -isorithm -isorosindone -isorrhythmic -isorropic -isosaccharic -isosaccharin -isoscele -isosceles -isoscope -isoseismal -isoseismic -isoseismical -isoseist -isoserine -isosmotic -isospondylous -isospore -isosporic -isosporous -isospory -isostasist -isostasy -isostatic -isostatical -isostatically -isostemonous -isostemony -isostere -isosteric -isosterism -isostrychnine -isosuccinic -isosulphide -isosulphocyanate -isosulphocyanic -isosultam -isotac -isoteles -isotely -isotheral -isothere -isotherm -isothermal -isothermally -isothermic -isothermical -isothermobath -isothermobathic -isothermous -isotherombrose -isothiocyanates -isothiocyanic -isothiocyano -isothujone -isotimal -isotome -isotomous -isotonia -isotonic -isotonicity -isotony -isotope -isotopic -isotopism -isotopy -isotrehalose -isotrimorphic -isotrimorphism -isotrimorphous -isotron -isotrope -isotropic -isotropism -isotropous -isotropy -isotype -isotypic -isotypical -isovalerate -isovalerianate -isovalerianic -isovaleric -isovalerone -isovaline -isovanillic -isovoluminal -isoxanthine -isoxazine -isoxazole -isoxime -isoxylene -isoyohimbine -isozooid -ispaghul -ispravnik -issanguila -issei -issite -issuable -issuably -issuance -issuant -issue -issueless -issuer -issuing -ist -isthmi -isthmial -isthmian -isthmiate -isthmic -isthmoid -isthmus -istiophorid -istle -istoke -isuret -isuretine -isuroid -it -itabirite -itacism -itacist -itacistic -itacolumite -itaconate -itaconic -italicization -italicize -italics -italite -itamalate -itamalic -itatartaric -itatartrate -itch -itchiness -itching -itchingly -itchless -itchproof -itchreed -itchweed -itchy -itcze -item -iteming -itemization -itemize -itemizer -itemy -iter -iterable -iterance -iterancy -iterant -iterate -iteration -iterative -iteratively -iterativeness -ithagine -ither -ithomiid -ithyphallic -ithyphyllous -itineracy -itinerancy -itinerant -itinerantly -itinerarian -itinerary -itinerate -itineration -itmo -itonidid -itoubou -its -itself -iturite -itzebu -iva -ivied -ivin -ivoried -ivorine -ivoriness -ivorist -ivory -ivorylike -ivorytype -ivorywood -ivy -ivybells -ivyberry -ivyflower -ivylike -ivyweed -ivywood -ivywort -iwa -iwaiwa -iwis -ixodian -ixodic -ixodid -iyo -izar -izard -izle -izote -iztle -izzard -j -jab -jabbed -jabber -jabberer -jabbering -jabberingly -jabberment -jabberwockian -jabbing -jabbingly -jabble -jabers -jabia -jabiru -jaborandi -jaborine -jabot -jaboticaba -jabul -jacal -jacamar -jacameropine -jacami -jacamin -jacana -jacare -jacate -jacchus -jacent -jacinth -jacinthe -jack -jackal -jackanapes -jackanapish -jackaroo -jackass -jackassery -jackassification -jackassism -jackassness -jackbird -jackbox -jackboy -jackdaw -jackeen -jacker -jacket -jacketed -jacketing -jacketless -jacketwise -jackety -jackfish -jackhammer -jackknife -jackleg -jackman -jacko -jackpudding -jackpuddinghood -jackrod -jacksaw -jackscrew -jackshaft -jackshay -jacksnipe -jackstay -jackstone -jackstraw -jacktan -jackweed -jackwood -jacobaea -jacobaean -jacobsite -jacobus -jacoby -jaconet -jactance -jactancy -jactant -jactation -jactitate -jactitation -jacu -jacuaru -jaculate -jaculation -jaculative -jaculator -jaculatorial -jaculatory -jaculiferous -jacutinga -jadder -jade -jaded -jadedly -jadedness -jadeite -jadery -jadesheen -jadeship -jadestone -jadish -jadishly -jadishness -jady -jaeger -jag -jagat -jager -jagged -jaggedly -jaggedness -jagger -jaggery -jaggy -jagir -jagirdar -jagla -jagless -jagong -jagrata -jagua -jaguar -jaguarete -jail -jailage -jailbird -jaildom -jailer -jaileress -jailering -jailership -jailhouse -jailish -jailkeeper -jaillike -jailmate -jailward -jailyard -jajman -jake -jakes -jako -jalap -jalapa -jalapin -jalkar -jalloped -jalopy -jalouse -jalousie -jalousied -jalpaite -jam -jama -jaman -jamb -jambalaya -jambeau -jambo -jambolan -jambone -jambool -jamboree -jambosa -jambstone -jamdani -jamesonite -jami -jamlike -jammedness -jammer -jammy -jampan -jampani -jamrosade -jamwood -janapa -janapan -jane -jangada -jangkar -jangle -jangler -jangly -janiceps -janissary -janitor -janitorial -janitorship -janitress -janitrix -jank -janker -jann -jannock -jantu -janua -jaob -jap -japaconine -japaconitine -japan -japanned -japanner -japannery -jape -japer -japery -japing -japingly -japish -japishly -japishness -japonica -japygoid -jaquima -jar -jara -jaragua -jararaca -jararacussu -jarbird -jarble -jarbot -jardiniere -jarfly -jarful -jarg -jargon -jargonal -jargoneer -jargonelle -jargoner -jargonesque -jargonic -jargonish -jargonist -jargonistic -jargonium -jargonization -jargonize -jarkman -jarl -jarldom -jarless -jarlship -jarnut -jarool -jarosite -jarra -jarrah -jarring -jarringly -jarringness -jarry -jarvey -jasey -jaseyed -jasmine -jasmined -jasminewood -jasmone -jaspachate -jaspagate -jasper -jasperated -jaspered -jasperize -jasperoid -jaspery -jaspidean -jaspideous -jaspilite -jaspis -jaspoid -jasponyx -jaspopal -jass -jassid -jassoid -jatamansi -jateorhizine -jatha -jati -jato -jatrophic -jatrorrhizine -jaudie -jauk -jaun -jaunce -jaunder -jaundice -jaundiceroot -jaunt -jauntie -jauntily -jauntiness -jauntingly -jaunty -jaup -javali -javelin -javelina -javeline -javelineer -javer -jaw -jawab -jawbation -jawbone -jawbreaker -jawbreaking -jawbreakingly -jawed -jawfall -jawfallen -jawfish -jawfoot -jawfooted -jawless -jawsmith -jawy -jay -jayhawk -jayhawker -jaypie -jaywalk -jaywalker -jazerant -jazz -jazzer -jazzily -jazziness -jazzy -jealous -jealously -jealousness -jealousy -jean -jeans -jecoral -jecorin -jecorize -jed -jedcock -jedding -jeddock -jeel -jeep -jeer -jeerer -jeering -jeeringly -jeerproof -jeery -jeewhillijers -jeewhillikens -jeff -jefferisite -jeffersonite -jehu -jehup -jejunal -jejunator -jejune -jejunely -jejuneness -jejunitis -jejunity -jejunoduodenal -jejunoileitis -jejunostomy -jejunotomy -jejunum -jelab -jelerang -jelick -jell -jellica -jellico -jellied -jelliedness -jellification -jellify -jellily -jelloid -jelly -jellydom -jellyfish -jellyleaf -jellylike -jelutong -jemadar -jemmily -jemminess -jemmy -jenkin -jenna -jennerization -jennerize -jennet -jenneting -jennier -jenny -jentacular -jeofail -jeopard -jeoparder -jeopardize -jeopardous -jeopardously -jeopardousness -jeopardy -jequirity -jerboa -jereed -jeremejevite -jeremiad -jerez -jerib -jerk -jerker -jerkily -jerkin -jerkined -jerkiness -jerkingly -jerkish -jerksome -jerkwater -jerky -jerl -jerm -jermonal -jerque -jerquer -jerry -jerryism -jersey -jerseyed -jert -jervia -jervina -jervine -jess -jessakeed -jessamine -jessamy -jessant -jessed -jessur -jest -jestbook -jestee -jester -jestful -jesting -jestingly -jestingstock -jestmonger -jestproof -jestwise -jestword -jet -jetbead -jete -jetsam -jettage -jetted -jetter -jettied -jettiness -jettingly -jettison -jetton -jetty -jettyhead -jettywise -jetware -jewbird -jewbush -jewel -jeweler -jewelhouse -jeweling -jewelless -jewellike -jewelry -jewelsmith -jewelweed -jewely -jewfish -jezail -jezekite -jeziah -jharal -jheel -jhool -jhow -jib -jibbah -jibber -jibbings -jibby -jibe -jibhead -jibi -jibman -jiboa -jibstay -jicama -jicara -jiff -jiffle -jiffy -jig -jigamaree -jigger -jiggerer -jiggerman -jiggers -jigget -jiggety -jigginess -jiggish -jiggle -jiggly -jiggumbob -jiggy -jiglike -jigman -jihad -jikungu -jillet -jillflirt -jilt -jiltee -jilter -jiltish -jimbang -jimberjaw -jimberjawed -jimjam -jimmy -jimp -jimply -jimpness -jimpricute -jimsedge -jina -jincamas -jing -jingal -jingbang -jingle -jingled -jinglejangle -jingler -jinglet -jingling -jinglingly -jingly -jingo -jingodom -jingoish -jingoism -jingoist -jingoistic -jinja -jinjili -jink -jinker -jinket -jinkle -jinks -jinn -jinnestan -jinni -jinniwink -jinniyeh -jinny -jinriki -jinrikiman -jinrikisha -jinshang -jinx -jipijapa -jipper -jiqui -jirble -jirga -jirkinet -jiti -jitneur -jitneuse -jitney -jitneyman -jitro -jitter -jitterbug -jitters -jittery -jiva -jive -jixie -jo -joaquinite -job -jobade -jobarbe -jobation -jobber -jobbernowl -jobbernowlism -jobbery -jobbet -jobbing -jobbish -jobble -jobholder -jobless -joblessness -jobman -jobmaster -jobmistress -jobmonger -jobo -jobsmith -joch -jock -jocker -jockey -jockeydom -jockeyish -jockeyism -jockeylike -jockeyship -jocko -jockteleg -jocoque -jocose -jocosely -jocoseness -jocoseriosity -jocoserious -jocosity -jocote -jocu -jocular -jocularity -jocularly -jocularness -joculator -jocum -jocuma -jocund -jocundity -jocundly -jocundness -jodel -jodelr -jodhpurs -joe -joebush -joewood -joey -jog -jogger -joggle -joggler -jogglety -jogglework -joggly -jogtrottism -johannes -johannite -johnin -johnnycake -johnnydom -johnstrupite -join -joinable -joinant -joinder -joiner -joinery -joining -joiningly -joint -jointage -jointed -jointedly -jointedness -jointer -jointing -jointist -jointless -jointly -jointress -jointure -jointureless -jointuress -jointweed -jointworm -jointy -joist -joisting -joistless -jojoba -joke -jokeless -jokelet -jokeproof -joker -jokesmith -jokesome -jokesomeness -jokester -jokingly -jokish -jokist -jokul -joky -joll -jolleyman -jollier -jollification -jollify -jollily -jolliness -jollity -jollop -jolloped -jolly -jollytail -jolt -jolter -jolterhead -jolterheaded -jolterheadedness -jolthead -joltiness -jolting -joltingly -joltless -joltproof -jolty -jonglery -jongleur -jonque -jonquil -jonquille -jonvalization -jonvalize -jookerie -joola -joom -jordan -jordanite -joree -jorum -josefite -joseite -josephinite -josh -josher -joshi -josie -joskin -joss -jossakeed -josser -jostle -jostlement -jostler -jot -jota -jotation -jotisi -jotter -jotting -jotty -joubarb -joug -jough -jouk -joukerypawkery -joule -joulean -joulemeter -jounce -journal -journalese -journalish -journalism -journalist -journalistic -journalistically -journalization -journalize -journalizer -journey -journeycake -journeyer -journeying -journeyman -journeywoman -journeywork -journeyworker -jours -joust -jouster -jovial -jovialist -jovialistic -joviality -jovialize -jovially -jovialness -jovialty -jovilabe -jow -jowar -jowari -jowel -jower -jowery -jowl -jowler -jowlish -jowlop -jowly -jowpy -jowser -jowter -joy -joyance -joyancy -joyant -joyful -joyfully -joyfulness -joyhop -joyleaf -joyless -joylessly -joylessness -joylet -joyous -joyously -joyousness -joyproof -joysome -joyweed -juba -jubate -jubbah -jubbe -jube -juberous -jubilance -jubilancy -jubilant -jubilantly -jubilarian -jubilate -jubilatio -jubilation -jubilatory -jubilean -jubilee -jubilist -jubilization -jubilize -jubilus -juck -juckies -jucundity -jud -judcock -judex -judge -judgeable -judgelike -judger -judgeship -judgingly -judgmatic -judgmatical -judgmatically -judgment -judicable -judicate -judication -judicative -judicator -judicatorial -judicatory -judicature -judices -judiciable -judicial -judiciality -judicialize -judicially -judicialness -judiciarily -judiciary -judicious -judiciously -judiciousness -judo -jufti -jug -jugal -jugale -jugate -jugated -jugation -juger -jugerum -jugful -jugger -juggernaut -juggins -juggle -jugglement -juggler -jugglery -juggling -jugglingly -juglandaceous -juglandin -juglone -jugular -jugulary -jugulate -jugulum -jugum -juice -juiceful -juiceless -juicily -juiciness -juicy -jujitsu -juju -jujube -jujuism -jujuist -juke -jukebox -julep -julid -julidan -julienite -julienne -julio -juloid -juloidian -julole -julolidin -julolidine -julolin -juloline -jumart -jumba -jumble -jumblement -jumbler -jumblingly -jumbly -jumbo -jumboesque -jumboism -jumbuck -jumby -jumelle -jument -jumentous -jumfru -jumillite -jumma -jump -jumpable -jumper -jumperism -jumpiness -jumpingly -jumpness -jumprock -jumpseed -jumpsome -jumpy -juncaceous -juncaginaceous -juncagineous -junciform -juncite -juncous -junction -junctional -junctive -juncture -june -junectomy -jungermanniaceous -jungle -jungled -jungleside -junglewards -junglewood -jungli -jungly -juniata -junior -juniorate -juniority -juniorship -juniper -junk -junkboard -junker -junkerdom -junkerish -junkerism -junket -junketer -junketing -junking -junkman -junt -junta -junto -jupati -jupe -jupon -jural -jurally -jurament -juramentado -juramental -juramentally -juramentum -jurant -jurara -jurat -juration -jurative -jurator -juratorial -juratory -jure -jurel -juridic -juridical -juridically -juring -jurisconsult -jurisdiction -jurisdictional -jurisdictionalism -jurisdictionally -jurisdictive -jurisprudence -jurisprudent -jurisprudential -jurisprudentialist -jurisprudentially -jurist -juristic -juristical -juristically -juror -jurupaite -jury -juryless -juryman -jurywoman -jusquaboutisme -jusquaboutist -jussel -jussion -jussive -jussory -just -justen -justice -justicehood -justiceless -justicelike -justicer -justiceship -justiceweed -justiciability -justiciable -justicial -justiciar -justiciarship -justiciary -justiciaryship -justicies -justifiability -justifiable -justifiableness -justifiably -justification -justificative -justificator -justificatory -justifier -justify -justifying -justifyingly -justly -justment -justness -justo -jut -jute -jutka -jutting -juttingly -jutty -juvenal -juvenate -juvenescence -juvenescent -juvenile -juvenilely -juvenileness -juvenilify -juvenilism -juvenility -juvenilize -juventude -juvia -juvite -juxtalittoral -juxtamarine -juxtapose -juxtaposit -juxtaposition -juxtapositional -juxtapositive -juxtapyloric -juxtaspinal -juxtaterrestrial -juxtatropical -jyngine -jynx -k -ka -kabaragoya -kabaya -kabel -kaberu -kabiet -kabuki -kachin -kadaya -kadein -kadikane -kadischi -kados -kaempferol -kaferita -kaffir -kaffiyeh -kafir -kafirin -kafiz -kafta -kago -kagu -kaha -kahar -kahau -kahikatea -kahili -kahu -kahuna -kai -kaid -kaik -kaikara -kaikawaka -kail -kailyard -kailyarder -kailyardism -kainga -kainite -kainsi -kainyn -kairine -kairoline -kaiser -kaiserdom -kaiserism -kaisership -kaitaka -kaiwhiria -kaiwi -kajawah -kajugaru -kaka -kakapo -kakar -kakarali -kakariki -kakawahie -kaki -kakidrosis -kakistocracy -kakkak -kakke -kakortokite -kala -kaladana -kalamalo -kalamansanai -kalashnikov -kalasie -kale -kaleidophon -kaleidophone -kaleidoscope -kaleidoscopic -kaleidoscopical -kaleidoscopically -kalema -kalends -kalewife -kaleyard -kali -kalian -kaliborite -kalidium -kaliform -kaligenous -kalinite -kaliophilite -kalipaya -kalium -kallah -kallege -kallilite -kallitype -kalo -kalogeros -kalokagathia -kalon -kalong -kalpis -kalsomine -kalsominer -kalumpang -kalumpit -kalymmaukion -kalymmocyte -kamachile -kamacite -kamahi -kamala -kamaloka -kamansi -kamao -kamarezite -kamarupa -kamarupic -kamas -kamassi -kambal -kamboh -kame -kameeldoorn -kameelthorn -kamelaukion -kamerad -kamias -kamichi -kamik -kamikaze -kammalan -kammererite -kamperite -kampong -kamptomorph -kan -kana -kanae -kanagi -kanap -kanara -kanari -kanat -kanchil -kande -kandol -kaneh -kanephore -kanephoros -kang -kanga -kangani -kangaroo -kangarooer -kankie -kannume -kanoon -kans -kantele -kanteletar -kanten -kaoliang -kaolin -kaolinate -kaolinic -kaolinite -kaolinization -kaolinize -kapa -kapai -kapeika -kapok -kapp -kappa -kappe -kappland -kapur -kaput -karagan -karaka -karakul -karamu -karaoke -karate -karaya -karbi -karch -kareao -kareeta -karela -karite -karma -karmic -karmouth -karo -kaross -karou -karree -karri -karroo -karrusel -karsha -karst -karstenite -karstic -kartel -kartometer -kartos -karwar -karyaster -karyenchyma -karyochrome -karyochylema -karyogamic -karyogamy -karyokinesis -karyokinetic -karyologic -karyological -karyologically -karyology -karyolymph -karyolysis -karyolytic -karyomere -karyomerite -karyomicrosome -karyomitoic -karyomitome -karyomiton -karyomitosis -karyomitotic -karyon -karyoplasm -karyoplasma -karyoplasmatic -karyoplasmic -karyopyknosis -karyorrhexis -karyoschisis -karyosome -karyotin -karyotype -kasa -kasbah -kasbeke -kascamiol -kasher -kashga -kashi -kashima -kashruth -kasida -kasm -kasolite -kassabah -kassu -kastura -kat -katabasis -katabatic -katabella -katabolic -katabolically -katabolism -katabolite -katabolize -katabothron -katachromasis -katacrotic -katacrotism -katagenesis -katagenetic -katakana -katakinesis -katakinetic -katakinetomer -katakinetomeric -katakiribori -katalase -katalysis -katalyst -katalytic -katalyze -katamorphism -kataphoresis -kataphoretic -kataphoric -kataphrenia -kataplasia -kataplectic -kataplexy -katar -katastate -katastatic -katathermometer -katatonia -katatonic -katatype -katchung -katcina -kath -katha -kathal -katharometer -katharsis -kathartic -kathemoglobin -kathenotheism -kathodic -katipo -katmon -katogle -katsup -katuka -katun -katurai -katydid -kauri -kava -kavaic -kavass -kawaka -kawika -kay -kayak -kayaker -kayles -kayo -kazi -kazoo -kea -keach -keacorn -keawe -keb -kebab -kebbie -kebbuck -kechel -keck -keckle -keckling -kecksy -kecky -ked -keddah -kedge -kedger -kedgeree -kedlock -keech -keek -keeker -keel -keelage -keelbill -keelblock -keelboat -keelboatman -keeled -keeler -keelfat -keelhale -keelhaul -keelie -keeling -keelivine -keelless -keelman -keelrake -keelson -keen -keena -keened -keener -keenly -keenness -keep -keepable -keeper -keeperess -keepering -keeperless -keepership -keeping -keepsake -keepsaky -keepworthy -keerogue -keeshond -keest -keet -keeve -kef -keffel -kefir -kefiric -keg -kegler -kehaya -kehillah -kehoeite -keilhauite -keita -keitloa -kekotene -kekuna -kelchin -keld -kele -kelebe -kelectome -keleh -kelek -kelep -kelk -kell -kella -kellion -kellupweed -kelly -keloid -keloidal -kelp -kelper -kelpfish -kelpie -kelpware -kelpwort -kelpy -kelt -kelter -kelty -kelvin -kelyphite -kemb -kemp -kemperyman -kempite -kemple -kempster -kempt -kempy -ken -kenaf -kenareh -kench -kend -kendir -kendyr -kenlore -kenmark -kennebecker -kennebunker -kennel -kennelly -kennelman -kenner -kenning -kenningwort -kenno -keno -kenogenesis -kenogenetic -kenogenetically -kenogeny -kenosis -kenotic -kenoticism -kenoticist -kenotism -kenotist -kenotoxin -kenotron -kensington -kenspac -kenspeck -kenspeckle -kent -kentallenite -kentledge -kentrogon -kentrolite -kenyte -kep -kepi -kept -keracele -keralite -kerana -keraphyllocele -keraphyllous -kerasin -kerasine -kerat -keratalgia -keratectasia -keratectomy -keratin -keratinization -keratinize -keratinoid -keratinose -keratinous -keratitis -keratoangioma -keratocele -keratocentesis -keratoconjunctivitis -keratoconus -keratocricoid -keratode -keratodermia -keratogenic -keratogenous -keratoglobus -keratoglossus -keratohelcosis -keratohyal -keratoid -keratoiritis -keratoleukoma -keratolysis -keratolytic -keratoma -keratomalacia -keratome -keratometer -keratometry -keratomycosis -keratoncus -keratonosus -keratonyxis -keratophyre -keratoplastic -keratoplasty -keratorrhexis -keratoscope -keratoscopy -keratose -keratosis -keratotome -keratotomy -keratto -keraulophon -keraulophone -keraunion -keraunograph -keraunographic -keraunography -keraunophone -keraunophonic -keraunoscopia -keraunoscopy -kerbstone -kerchief -kerchiefed -kerchoo -kerchug -kerchunk -kerectomy -kerel -kerf -kerflap -kerflop -kerflummox -kermes -kermesic -kermesite -kermis -kern -kernel -kerneled -kernelless -kernelly -kerner -kernetty -kernish -kernite -kernos -kerogen -kerosene -kerplunk -kerrie -kerrikerri -kerril -kerrite -kerry -kersantite -kersey -kerseymere -kerslam -kerslosh -kersmash -kerugma -kerwham -kerygma -kerygmatic -kerykeion -kerystic -kerystics -kesslerman -kestrel -ket -keta -ketal -ketapang -ketazine -ketch -ketchcraft -ketchup -ketembilla -keten -ketene -ketimide -ketimine -ketipate -ketipic -keto -ketogen -ketogenesis -ketogenic -ketoheptose -ketohexose -ketoketene -ketol -ketole -ketolysis -ketolytic -ketone -ketonemia -ketonic -ketonimid -ketonimide -ketonimin -ketonimine -ketonization -ketonize -ketonuria -ketose -ketoside -ketosis -ketosuccinic -ketoxime -kette -ketting -kettle -kettlecase -kettledrum -kettledrummer -kettleful -kettlemaker -kettlemaking -kettler -ketty -ketuba -ketupa -ketyl -keup -keurboom -kevalin -kevel -kevelhead -kevutzah -keweenawite -kewpie -kex -kexy -key -keyage -keyboard -keyed -keyhole -keyless -keylet -keylock -keynote -keynoter -keyseater -keyserlick -keysmith -keystone -keystoned -keyway -khaddar -khadi -khagiarite -khahoon -khaiki -khair -khaja -khajur -khakanship -khaki -khakied -khalifa -khalsa -khamsin -khan -khanate -khanda -khandait -khanjar -khanjee -khankah -khansamah -khanum -khar -kharaj -kharouba -kharroubah -kharua -khass -khat -khatib -khatri -khediva -khedival -khedivate -khedive -khediviah -khedivial -khediviate -khepesh -khet -khidmatgar -khilat -khir -khirka -khoja -khoka -khot -khu -khubber -khula -khuskhus -khutbah -khutuktu -khvat -kiack -kiaki -kialee -kiang -kiaugh -kibber -kibble -kibbler -kibblerman -kibe -kibei -kibitka -kibitz -kibitzer -kiblah -kibosh -kiby -kick -kickable -kickback -kickee -kicker -kicking -kickish -kickless -kickoff -kickout -kickseys -kickshaw -kickup -kidder -kiddier -kiddish -kiddush -kiddushin -kiddy -kidhood -kidlet -kidling -kidnap -kidnapee -kidnaper -kidney -kidneyroot -kidneywort -kidskin -kidsman -kiefekil -kiekie -kiel -kier -kieselguhr -kieserite -kiestless -kieye -kikar -kikawaeo -kike -kiki -kiku -kikuel -kikumon -kil -kiladja -kilah -kilampere -kilan -kilbrickenite -kildee -kilderkin -kileh -kilerg -kiley -kilhig -kiliare -kilim -kill -killable -killadar -killas -killcalf -killcrop -killcu -killdeer -killeekillee -killeen -killer -killick -killifish -killing -killingly -killingness -killinite -killogie -killweed -killwort -killy -kiln -kilneye -kilnhole -kilnman -kilnrib -kilo -kiloampere -kilobar -kilocalorie -kilocycle -kilodyne -kilogauss -kilogram -kilojoule -kiloliter -kilolumen -kilometer -kilometrage -kilometric -kilometrical -kiloparsec -kilostere -kiloton -kilovar -kilovolt -kilowatt -kilp -kilt -kilter -kiltie -kilting -kim -kimbang -kimberlin -kimberlite -kimigayo -kimnel -kimono -kimonoed -kin -kina -kinaesthesia -kinaesthesis -kinah -kinase -kinbote -kinch -kinchin -kinchinmort -kincob -kind -kindergarten -kindergartener -kindergartening -kindergartner -kindheart -kindhearted -kindheartedly -kindheartedness -kindle -kindler -kindlesome -kindlily -kindliness -kindling -kindly -kindness -kindred -kindredless -kindredly -kindredness -kindredship -kinematic -kinematical -kinematically -kinematics -kinematograph -kinemometer -kineplasty -kinepox -kinesalgia -kinescope -kinesiatric -kinesiatrics -kinesic -kinesics -kinesimeter -kinesiologic -kinesiological -kinesiology -kinesiometer -kinesis -kinesitherapy -kinesodic -kinesthesia -kinesthesis -kinesthetic -kinetic -kinetical -kinetically -kinetics -kinetochore -kinetogenesis -kinetogenetic -kinetogenetically -kinetogenic -kinetogram -kinetograph -kinetographer -kinetographic -kinetography -kinetomer -kinetomeric -kinetonema -kinetonucleus -kinetophone -kinetophonograph -kinetoplast -kinetoscope -kinetoscopic -king -kingbird -kingbolt -kingcob -kingcraft -kingcup -kingdom -kingdomed -kingdomful -kingdomless -kingdomship -kingfish -kingfisher -kinghead -kinghood -kinghunter -kingless -kinglessness -kinglet -kinglihood -kinglike -kinglily -kingliness -kingling -kingly -kingmaker -kingmaking -kingpiece -kingpin -kingrow -kingship -kingsman -kingweed -kingwood -kink -kinkable -kinkaider -kinkajou -kinkcough -kinkhab -kinkhost -kinkily -kinkiness -kinkle -kinkled -kinkly -kinksbush -kinky -kinless -kinnikinnick -kino -kinofluous -kinology -kinoplasm -kinoplasmic -kinospore -kinotannic -kinsfolk -kinship -kinsman -kinsmanly -kinsmanship -kinspeople -kinswoman -kintar -kioea -kiosk -kiotome -kip -kipage -kipe -kippeen -kipper -kipperer -kippy -kipsey -kipskin -kiri -kirimon -kirk -kirker -kirkify -kirking -kirkinhead -kirklike -kirkman -kirktown -kirkward -kirkyard -kirmew -kirn -kirombo -kirsch -kirtle -kirtled -kirve -kirver -kischen -kish -kishen -kishon -kishy -kiskatom -kismet -kismetic -kisra -kiss -kissability -kissable -kissableness -kissage -kissar -kisser -kissing -kissingly -kissproof -kisswise -kissy -kist -kistful -kiswa -kit -kitab -kitabis -kitar -kitcat -kitchen -kitchendom -kitchener -kitchenette -kitchenful -kitchenless -kitchenmaid -kitchenman -kitchenry -kitchenward -kitchenwards -kitchenware -kitchenwife -kitcheny -kite -kiteflier -kiteflying -kith -kithe -kithless -kitish -kitling -kittel -kitten -kittendom -kittenhearted -kittenhood -kittenish -kittenishly -kittenishness -kittenless -kittenship -kitter -kittereen -kitthoge -kittiwake -kittle -kittlepins -kittles -kittlish -kittly -kittock -kittul -kitty -kittysol -kiva -kiver -kivikivi -kivu -kiwi -kiwikiwi -kiyas -kiyi -kjeldahlization -kjeldahlize -klafter -klaftern -klam -klaprotholite -klavern -klaxon -kleeneboc -klendusic -klendusity -klendusive -klepht -klephtic -klephtism -kleptic -kleptistic -kleptomania -kleptomaniac -kleptomanist -kleptophobia -klicket -klip -klipbok -klipdachs -klipdas -klipfish -klippe -klippen -klipspringer -klister -klockmannite -klom -klootchman -klop -klops -klosh -klystron -kmet -knab -knabble -knack -knackebrod -knacker -knackery -knacky -knag -knagged -knaggy -knap -knapbottle -knape -knappan -knapper -knappish -knappishly -knapsack -knapsacked -knapsacking -knapweed -knar -knark -knarred -knarry -knave -knavery -knaveship -knavess -knavish -knavishly -knavishness -knawel -knead -kneadability -kneadable -kneader -kneading -kneadingly -knebelite -knee -kneebrush -kneecap -kneed -kneehole -kneel -kneeler -kneelet -kneeling -kneelingly -kneepad -kneepan -kneepiece -kneestone -knell -knelt -knet -knew -knez -knezi -kniaz -kniazi -knick -knicker -knickerbockered -knickerbockers -knickered -knickers -knickknack -knickknackatory -knickknacked -knickknackery -knickknacket -knickknackish -knickknacky -knickpoint -knife -knifeboard -knifeful -knifeless -knifelike -knifeman -knifeproof -knifer -knifesmith -knifeway -knight -knightage -knightess -knighthead -knighthood -knightless -knightlihood -knightlike -knightliness -knightling -knightly -knightship -knightswort -knit -knitback -knitch -knitted -knitter -knitting -knittle -knitwear -knitweed -knitwork -knived -knivey -knob -knobbed -knobber -knobbiness -knobble -knobbler -knobbly -knobby -knobkerrie -knoblike -knobstick -knobstone -knobular -knobweed -knobwood -knock -knockabout -knockdown -knockemdown -knocker -knocking -knockless -knockoff -knockout -knockstone -knockup -knoll -knoller -knolly -knop -knopite -knopped -knopper -knoppy -knopweed -knorhaan -knosp -knosped -knot -knotberry -knotgrass -knothole -knothorn -knotless -knotlike -knotroot -knotted -knotter -knottily -knottiness -knotting -knotty -knotweed -knotwork -knotwort -knout -know -knowability -knowable -knowableness -knowe -knower -knowing -knowingly -knowingness -knowledge -knowledgeable -knowledgeableness -knowledgeably -knowledged -knowledgeless -knowledgement -knowledging -known -knowperts -knoxvillite -knub -knubbly -knubby -knublet -knuckle -knucklebone -knuckled -knuckler -knuckling -knuckly -knuclesome -knur -knurl -knurled -knurling -knurly -knut -knutty -knyaz -knyazi -ko -koa -koae -koala -koali -kob -koban -kobellite -kobi -kobird -kobold -kobong -kobu -kochliarion -koda -kodak -kodaker -kodakist -kodakry -kodro -kodurite -koeberliniaceous -koechlinite -koel -koenenite -koff -koft -koftgar -koftgari -koggelmannetje -kohemp -kohl -kohlrabi -kohua -koi -koil -koila -koilanaglyphic -koilon -koimesis -koine -koinon -koinonia -kojang -kokako -kokam -kokan -kokerboom -kokil -kokio -koklas -koklass -koko -kokoon -kokoromiko -kokowai -kokra -koksaghyz -koku -kokum -kokumin -kokumingun -kola -kolach -kolea -koleroga -kolhoz -kolinski -kolinsky -kolkhos -kolkhoz -kollast -kollaster -koller -kollergang -kolo -kolobion -kolobus -kolokolo -kolsun -koltunna -koltunnor -komatik -kombu -kominuter -kommetje -kommos -komondor -kompeni -kon -kona -konak -kongoni -kongsbergite -kongu -konimeter -koninckite -konini -koniology -koniscope -konjak -konstantin -kontakion -kooka -kookaburra -kookeree -kookery -kookri -koolah -kooletah -kooliman -koolokamba -koombar -koomkie -kootcha -kop -kopeck -koph -kopi -koppa -koppen -koppite -kor -kora -koradji -korait -korakan -korari -kore -korec -koreci -korero -kori -korimako -korin -kornerupine -kornskeppa -kornskeppur -korntonde -korntonder -korntunna -korntunnur -koromika -koromiko -korona -korova -korrel -korrigum -korumburra -koruna -korymboi -korymbos -korzec -kos -kosher -kosin -kosmokrator -kosong -kosotoxin -koswite -kotal -koto -kotschubeite -kottigite -kotuku -kotukutuku -kotwal -kotwalee -kotyle -kotylos -kou -koulan -kouza -kovil -kowhai -kowtow -koyan -kozo -kra -kraal -kraft -kragerite -krageroite -krait -kraken -krakowiak -kral -krama -krameriaceous -kran -krantzite -kras -krasis -kratogen -kratogenic -kraurite -kraurosis -kraurotic -krausen -krausite -kraut -kreis -kreistle -kreittonite -krelos -kremersite -kremlin -krems -kreng -krennerite -kreplech -kreutzer -kriegspiel -krieker -krimmer -krina -krisuvigite -kritarchy -kritrima -krobyloi -krobylos -krocket -krohnkite -krome -kromeski -kromogram -kromskop -krona -krone -kronen -kroner -kronor -kronur -kroon -krosa -krouchka -kroushka -krummhorn -kryokonite -krypsis -kryptic -krypticism -kryptocyanine -kryptol -kryptomere -krypton -kuan -kuba -kubba -kubuklion -kuchen -kudize -kudos -kudu -kudzu -kuei -kuge -kugel -kuichua -kukoline -kukri -kuku -kukui -kukupa -kula -kulack -kulah -kulaite -kulak -kulakism -kulang -kulimit -kulkarni -kullaite -kulm -kulmet -kumbi -kumhar -kumiss -kummel -kumquat -kumrah -kunai -kung -kunk -kunkur -kunzite -kupfernickel -kupfferite -kuphar -kupper -kurbash -kurchicine -kurchine -kurgan -kurmburra -kurrajong -kurtosis -kuruma -kurumaya -kurung -kurus -kurvey -kurveyor -kusa -kusam -kusha -kusimansel -kuskite -kuskos -kuskus -kusti -kusum -kutcha -kuttab -kuttar -kuttaur -kuvasz -kvass -kvint -kvinter -kwamme -kwan -kwarta -kwarterka -kwazoku -kyack -kyah -kyar -kyat -kyaung -kyl -kyle -kylite -kylix -kymation -kymatology -kymbalon -kymogram -kymograph -kymographic -kynurenic -kynurine -kyphoscoliosis -kyphoscoliotic -kyphosis -kyphotic -kyrine -kyschtymite -kyte -l -la -laager -laang -lab -labara -labarum -labba -labber -labdacism -labdacismus -labdanum -labefact -labefactation -labefaction -labefy -label -labeler -labella -labellate -labeller -labelloid -labellum -labia -labial -labialism -labialismus -labiality -labialization -labialize -labially -labiate -labiated -labidophorous -labiella -labile -lability -labilization -labilize -labioalveolar -labiocervical -labiodental -labioglossal -labioglossolaryngeal -labioglossopharyngeal -labiograph -labioguttural -labiolingual -labiomancy -labiomental -labionasal -labiopalatal -labiopalatalize -labiopalatine -labiopharyngeal -labioplasty -labiose -labiotenaculum -labiovelar -labioversion -labis -labium -lablab -labor -laborability -laborable -laborage -laborant -laboratorial -laboratorian -laboratory -labordom -labored -laboredly -laboredness -laborer -laboress -laborhood -laboring -laboringly -laborious -laboriously -laboriousness -laborism -laborist -laborite -laborless -laborous -laborously -laborousness -laborsaving -laborsome -laborsomely -laborsomeness -laboulbeniaceous -labour -labra -labradorite -labradoritic -labral -labret -labretifery -labroid -labrosaurid -labrosauroid -labrose -labrum -labrusca -labrys -labyrinth -labyrinthal -labyrinthally -labyrinthian -labyrinthibranch -labyrinthibranchiate -labyrinthic -labyrinthical -labyrinthically -labyrinthiform -labyrinthine -labyrinthitis -labyrinthodont -labyrinthodontian -labyrinthodontid -labyrinthodontoid -lac -lacca -laccaic -laccainic -laccase -laccol -laccolith -laccolithic -laccolitic -lace -lacebark -laced -laceflower -laceleaf -laceless -lacelike -lacemaker -lacemaking -laceman -lacepiece -lacepod -lacer -lacerability -lacerable -lacerant -lacerate -lacerated -lacerately -laceration -lacerative -lacertian -lacertiform -lacertilian -lacertiloid -lacertine -lacertoid -lacertose -lacery -lacet -lacewing -lacewoman -lacewood -lacework -laceworker -laceybark -lache -laches -lachryma -lachrymae -lachrymaeform -lachrymal -lachrymally -lachrymalness -lachrymary -lachrymation -lachrymator -lachrymatory -lachrymiform -lachrymist -lachrymogenic -lachrymonasal -lachrymosal -lachrymose -lachrymosely -lachrymosity -lachrymous -lachsa -lacily -laciness -lacing -lacinia -laciniate -laciniated -laciniation -laciniform -laciniola -laciniolate -laciniose -lacinula -lacinulate -lacinulose -lacis -lack -lackadaisical -lackadaisicality -lackadaisically -lackadaisicalness -lackadaisy -lackaday -lacker -lackey -lackeydom -lackeyed -lackeyism -lackeyship -lackland -lackluster -lacklusterness -lacklustrous -lacksense -lackwit -lackwittedly -lackwittedness -lacmoid -lacmus -laconic -laconica -laconically -laconicalness -laconicism -laconicum -laconism -laconize -laconizer -lacquer -lacquerer -lacquering -lacquerist -lacroixite -lacrosse -lacrosser -lacrym -lactagogue -lactalbumin -lactam -lactamide -lactant -lactarene -lactarious -lactarium -lactary -lactase -lactate -lactation -lactational -lacteal -lactean -lactenin -lacteous -lactesce -lactescence -lactescency -lactescent -lactic -lacticinia -lactid -lactide -lactiferous -lactiferousness -lactific -lactifical -lactification -lactiflorous -lactifluous -lactiform -lactifuge -lactify -lactigenic -lactigenous -lactigerous -lactim -lactimide -lactinate -lactivorous -lacto -lactobacilli -lactobacillus -lactobutyrometer -lactocele -lactochrome -lactocitrate -lactodensimeter -lactoflavin -lactoglobulin -lactoid -lactol -lactometer -lactone -lactonic -lactonization -lactonize -lactophosphate -lactoproteid -lactoprotein -lactoscope -lactose -lactoside -lactosuria -lactothermometer -lactotoxin -lactovegetarian -lactucarium -lactucerin -lactucin -lactucol -lactucon -lactyl -lacuna -lacunae -lacunal -lacunar -lacunaria -lacunary -lacune -lacunose -lacunosity -lacunule -lacunulose -lacuscular -lacustral -lacustrian -lacustrine -lacwork -lacy -lad -ladakin -ladanigerous -ladanum -ladder -laddered -laddering -ladderlike -ladderway -ladderwise -laddery -laddess -laddie -laddikie -laddish -laddock -lade -lademan -laden -lader -ladhood -ladies -ladify -lading -ladkin -ladle -ladleful -ladler -ladlewood -ladrone -ladronism -ladronize -lady -ladybird -ladybug -ladyclock -ladydom -ladyfinger -ladyfish -ladyfly -ladyfy -ladyhood -ladyish -ladyism -ladykin -ladykind -ladyless -ladylike -ladylikely -ladylikeness -ladyling -ladylintywhite -ladylove -ladyly -ladyship -laemodipod -laemodipodan -laemodipodiform -laemodipodous -laemoparalysis -laemostenosis -laeotropic -laeotropism -laet -laeti -laetic -laevoduction -laevogyrate -laevogyre -laevogyrous -laevolactic -laevorotation -laevorotatory -laevotartaric -laevoversion -lafayette -lag -lagan -lagarto -lagen -lagena -lagend -lageniform -lager -lagetto -laggar -laggard -laggardism -laggardly -laggardness -lagged -laggen -lagger -laggin -lagging -laglast -lagna -lagniappe -lagomorph -lagomorphic -lagomorphous -lagonite -lagoon -lagoonal -lagoonside -lagophthalmos -lagopode -lagopodous -lagopous -lagostoma -lagwort -lai -laic -laical -laicality -laically -laich -laicism -laicity -laicization -laicize -laicizer -laid -laigh -lain -laine -laiose -lair -lairage -laird -lairdess -lairdie -lairdly -lairdocracy -lairdship -lairless -lairman -lairstone -lairy -laitance -laity -lak -lakarpite -lakatoi -lake -lakeland -lakelander -lakeless -lakelet -lakelike -lakemanship -laker -lakeside -lakeward -lakeweed -lakie -laking -lakish -lakishness -lakism -lakist -laky -lalang -lall -lallation -lalling -lalo -laloneurosis -lalopathy -lalophobia -laloplegia -lam -lama -lamaic -lamantin -lamany -lamasary -lamasery -lamastery -lamb -lamba -lambale -lambaste -lambda -lambdacism -lambdoid -lambdoidal -lambeau -lambency -lambent -lambently -lamber -lambert -lambhood -lambie -lambiness -lambish -lambkill -lambkin -lambliasis -lamblike -lambling -lambly -lamboys -lambrequin -lambsdown -lambskin -lambsuccory -lamby -lame -lamedh -lameduck -lamel -lamella -lamellar -lamellarly -lamellary -lamellate -lamellated -lamellately -lamellation -lamellibranch -lamellibranchiate -lamellicorn -lamellicornate -lamellicornous -lamelliferous -lamelliform -lamellirostral -lamellirostrate -lamelloid -lamellose -lamellosity -lamellule -lamely -lameness -lament -lamentable -lamentableness -lamentably -lamentation -lamentational -lamentatory -lamented -lamentedly -lamenter -lamentful -lamenting -lamentingly -lamentive -lamentory -lamester -lamestery -lameter -lametta -lamia -lamiaceous -lamiger -lamiid -lamin -lamina -laminability -laminable -laminae -laminar -laminariaceous -laminarian -laminarin -laminarioid -laminarite -laminary -laminate -laminated -lamination -laminboard -laminectomy -laminiferous -laminiform -laminiplantar -laminiplantation -laminitis -laminose -laminous -lamish -lamiter -lammas -lammer -lammergeier -lammock -lammy -lamnectomy -lamnid -lamnoid -lamp -lampad -lampadary -lampadedromy -lampadephore -lampadephoria -lampadite -lampas -lampatia -lampblack -lamper -lampern -lampers -lampflower -lampfly -lampful -lamphole -lamping -lampion -lampist -lampistry -lampless -lamplet -lamplight -lamplighted -lamplighter -lamplit -lampmaker -lampmaking -lampman -lampoon -lampooner -lampoonery -lampoonist -lamppost -lamprey -lamprophony -lamprophyre -lamprophyric -lamprotype -lampstand -lampwick -lampyrid -lampyrine -lamziekte -lan -lanameter -lanarkite -lanas -lanate -lanated -lanaz -lance -lanced -lancegay -lancelet -lancelike -lancely -lanceman -lanceolar -lanceolate -lanceolated -lanceolately -lanceolation -lancepesade -lancepod -lanceproof -lancer -lances -lancet -lanceted -lanceteer -lancewood -lancha -lanciers -lanciferous -lanciform -lancinate -lancination -land -landamman -landau -landaulet -landaulette -landblink -landbook -landdrost -landed -lander -landesite -landfall -landfast -landflood -landgafol -landgravate -landgrave -landgraveship -landgravess -landgraviate -landgravine -landholder -landholdership -landholding -landimere -landing -landlady -landladydom -landladyhood -landladyish -landladyship -landless -landlessness -landlike -landline -landlock -landlocked -landlook -landlooker -landloper -landlord -landlordism -landlordly -landlordry -landlordship -landlouper -landlouping -landlubber -landlubberish -landlubberly -landlubbing -landman -landmark -landmil -landmonger -landocracy -landocrat -landolphia -landowner -landownership -landowning -landplane -landraker -landreeve -landright -landsale -landscape -landscapist -landshard -landship -landsick -landside -landskip -landslide -landslip -landsman -landspout -landspringy -landstorm -landwaiter -landward -landwash -landways -landwhin -landwire -landwrack -lane -lanete -laneway -laney -langaha -langarai -langbanite -langbeinite -langca -langi -langite -langlauf -langlaufer -langle -langoon -langooty -langrage -langsat -langsettle -langspiel -langsyne -language -languaged -languageless -langued -languescent -languet -languid -languidly -languidness -languish -languisher -languishing -languishingly -languishment -languor -languorous -languorously -langur -laniariform -laniary -laniate -laniferous -lanific -laniflorous -laniform -lanigerous -laniiform -lanioid -lanista -lank -lanket -lankily -lankiness -lankish -lankly -lankness -lanky -lanner -lanneret -lanolin -lanose -lanosity -lansat -lansdowne -lanseh -lansfordite -lansknecht -lanson -lansquenet -lant -lantaca -lanterloo -lantern -lanternflower -lanternist -lanternleaf -lanternman -lanthana -lanthanide -lanthanite -lanthanum -lanthopine -lantum -lanuginose -lanuginous -lanuginousness -lanugo -lanum -lanx -lanyard -lap -lapacho -lapachol -lapactic -laparectomy -laparocele -laparocholecystotomy -laparocolectomy -laparocolostomy -laparocolotomy -laparocolpohysterotomy -laparocolpotomy -laparocystectomy -laparocystotomy -laparoelytrotomy -laparoenterostomy -laparoenterotomy -laparogastroscopy -laparogastrotomy -laparohepatotomy -laparohysterectomy -laparohysteropexy -laparohysterotomy -laparoileotomy -laparomyitis -laparomyomectomy -laparomyomotomy -laparonephrectomy -laparonephrotomy -laparorrhaphy -laparosalpingectomy -laparosalpingotomy -laparoscopy -laparosplenectomy -laparosplenotomy -laparostict -laparothoracoscopy -laparotome -laparotomist -laparotomize -laparotomy -laparotrachelotomy -lapboard -lapcock -lapel -lapeler -lapelled -lapful -lapicide -lapidarian -lapidarist -lapidary -lapidate -lapidation -lapidator -lapideon -lapideous -lapidescent -lapidicolous -lapidific -lapidification -lapidify -lapidist -lapidity -lapidose -lapilliform -lapillo -lapillus -lapon -lappaceous -lappage -lapped -lapper -lappet -lappeted -lapping -lapsability -lapsable -lapsation -lapse -lapsed -lapser -lapsi -lapsing -lapsingly -lapstone -lapstreak -lapstreaked -lapstreaker -laputically -lapwing -lapwork -laquear -laquearian -laqueus -lar -larboard -larbolins -larbowlines -larcener -larcenic -larcenish -larcenist -larcenous -larcenously -larceny -larch -larchen -lard -lardacein -lardaceous -larder -larderellite -larderer -larderful -larderlike -lardiform -lardite -lardizabalaceous -lardon -lardworm -lardy -lareabell -large -largebrained -largehanded -largehearted -largeheartedness -largely -largemouth -largemouthed -largen -largeness -largess -larghetto -largifical -largish -largition -largitional -largo -lari -lariat -larick -larid -laridine -larigo -larigot -lariid -larin -larine -larithmics -larixin -lark -larker -larkiness -larking -larkingly -larkish -larkishness -larklike -larkling -larksome -larkspur -larky -larmier -larmoyant -larnax -laroid -larrigan -larrikin -larrikinalian -larrikiness -larrikinism -larriman -larrup -larry -larsenite -larva -larvae -larval -larvarium -larvate -larve -larvicidal -larvicide -larvicolous -larviform -larvigerous -larvikite -larviparous -larviposit -larviposition -larvivorous -larvule -laryngal -laryngalgia -laryngeal -laryngeally -laryngean -laryngeating -laryngectomy -laryngemphraxis -laryngendoscope -larynges -laryngic -laryngismal -laryngismus -laryngitic -laryngitis -laryngocele -laryngocentesis -laryngofission -laryngofissure -laryngograph -laryngography -laryngological -laryngologist -laryngology -laryngometry -laryngoparalysis -laryngopathy -laryngopharyngeal -laryngopharyngitis -laryngophony -laryngophthisis -laryngoplasty -laryngoplegia -laryngorrhagia -laryngorrhea -laryngoscleroma -laryngoscope -laryngoscopic -laryngoscopical -laryngoscopist -laryngoscopy -laryngospasm -laryngostasis -laryngostenosis -laryngostomy -laryngostroboscope -laryngotome -laryngotomy -laryngotracheal -laryngotracheitis -laryngotracheoscopy -laryngotracheotomy -laryngotyphoid -laryngovestibulitis -larynx -las -lasa -lasarwort -lascar -lascivious -lasciviously -lasciviousness -laser -laserwort -lash -lasher -lashingly -lashless -lashlite -lasianthous -lasiocampid -lasiocarpous -lask -lasket -laspring -lasque -lass -lasset -lassie -lassiehood -lassieish -lassitude -lasslorn -lasso -lassock -lassoer -last -lastage -laster -lasting -lastingly -lastingness -lastly -lastness -lastre -lastspring -lasty -lat -lata -latah -latch -latcher -latchet -latching -latchkey -latchless -latchman -latchstring -late -latebra -latebricole -latecomer -latecoming -lated -lateen -lateener -lately -laten -latence -latency -lateness -latensification -latent -latentize -latently -latentness -later -latera -laterad -lateral -lateralis -laterality -lateralization -lateralize -laterally -latericumbent -lateriflexion -laterifloral -lateriflorous -laterifolious -laterigrade -laterinerved -laterite -lateritic -lateritious -lateriversion -laterization -lateroabdominal -lateroanterior -laterocaudal -laterocervical -laterodeviation -laterodorsal -lateroduction -lateroflexion -lateromarginal -lateronuchal -lateroposition -lateroposterior -lateropulsion -laterostigmatal -laterostigmatic -laterotemporal -laterotorsion -lateroventral -lateroversion -latescence -latescent -latesome -latest -latewhile -latex -latexosis -lath -lathe -lathee -latheman -lathen -lather -latherability -latherable -lathereeve -latherer -latherin -latheron -latherwort -lathery -lathesman -lathhouse -lathing -lathwork -lathy -lathyric -lathyrism -latibulize -latices -laticiferous -laticlave -laticostate -latidentate -latifundian -latifundium -latigo -latinism -lation -latipennate -latiplantar -latirostral -latirostrous -latisept -latiseptal -latiseptate -latish -latisternal -latitancy -latitant -latitat -latite -latitude -latitudinal -latitudinally -latitudinarian -latitudinarianisn -latitudinary -latitudinous -latomy -latrant -latration -latreutic -latria -latrine -latro -latrobe -latrobite -latrocinium -latron -latten -lattener -latter -latterkin -latterly -lattermath -lattermost -latterness -lattice -latticed -latticewise -latticework -latticing -latticinio -latus -lauan -laubanite -laud -laudability -laudable -laudableness -laudably -laudanidine -laudanin -laudanine -laudanosine -laudanum -laudation -laudative -laudator -laudatorily -laudatory -lauder -laudification -laudist -laugh -laughable -laughableness -laughably -laughee -laugher -laughful -laughing -laughingly -laughingstock -laughsome -laughter -laughterful -laughterless -laughworthy -laughy -lauia -laumonite -laumontite -laun -launce -launch -launcher -launchful -launchways -laund -launder -launderability -launderable -launderer -laundry -laundrymaid -laundryman -laundryowner -laundrywoman -laur -laura -lauraceous -lauraldehyde -laurate -laurdalite -laureate -laureated -laureateship -laureation -laurel -laureled -laurellike -laurelship -laurelwood -laureole -lauric -laurin -laurinoxylon -laurionite -laurite -laurone -laurotetanine -laurustine -laurustinus -laurvikite -lauryl -lautarite -lautitious -lava -lavable -lavabo -lavacre -lavage -lavaliere -lavalike -lavanga -lavant -lavaret -lavatic -lavation -lavational -lavatorial -lavatory -lave -laveer -lavement -lavender -lavenite -laver -laverock -laverwort -lavialite -lavic -lavish -lavisher -lavishing -lavishingly -lavishly -lavishment -lavishness -lavolta -lavrovite -law -lawbook -lawbreaker -lawbreaking -lawcraft -lawful -lawfully -lawfulness -lawgiver -lawgiving -lawing -lawish -lawk -lawlants -lawless -lawlessly -lawlessness -lawlike -lawmaker -lawmaking -lawman -lawmonger -lawn -lawned -lawner -lawnlet -lawnlike -lawny -lawproof -lawrencite -lawrightman -lawsonite -lawsuit -lawsuiting -lawter -lawyer -lawyeress -lawyerism -lawyerlike -lawyerling -lawyerly -lawyership -lawyery -lawzy -lax -laxate -laxation -laxative -laxatively -laxativeness -laxiflorous -laxifoliate -laxifolious -laxism -laxist -laxity -laxly -laxness -lay -layaway -layback -layboy -layer -layerage -layered -layery -layette -laying -layland -layman -laymanship -layne -layoff -layout -layover -layship -laystall -laystow -laywoman -lazar -lazaret -lazaretto -lazarlike -lazarly -lazarole -laze -lazily -laziness -lazule -lazuli -lazuline -lazulite -lazulitic -lazurite -lazy -lazybird -lazybones -lazyboots -lazyhood -lazyish -lazylegs -lazyship -lazzarone -lazzaroni -lea -leach -leacher -leachman -leachy -lead -leadable -leadableness -leadage -leadback -leaded -leaden -leadenhearted -leadenheartedness -leadenly -leadenness -leadenpated -leader -leaderess -leaderette -leaderless -leadership -leadhillite -leadin -leadiness -leading -leadingly -leadless -leadman -leadoff -leadout -leadproof -leadsman -leadstone -leadway -leadwood -leadwork -leadwort -leady -leaf -leafage -leafboy -leafcup -leafdom -leafed -leafen -leafer -leafery -leafgirl -leafit -leafless -leaflessness -leaflet -leafleteer -leaflike -leafstalk -leafwork -leafy -league -leaguelong -leaguer -leak -leakage -leakance -leaker -leakiness -leakless -leakproof -leaky -leal -lealand -leally -lealness -lealty -leam -leamer -lean -leaner -leaning -leanish -leanly -leanness -leant -leap -leapable -leaper -leapfrog -leapfrogger -leapfrogging -leaping -leapingly -leapt -lear -learn -learnable -learned -learnedly -learnedness -learner -learnership -learning -learnt -leasable -lease -leasehold -leaseholder -leaseholding -leaseless -leasemonger -leaser -leash -leashless -leasing -leasow -least -leastways -leastwise -leat -leath -leather -leatherback -leatherbark -leatherboard -leatherbush -leathercoat -leathercraft -leatherer -leatherfish -leatherflower -leatherhead -leatherine -leatheriness -leathering -leatherize -leatherjacket -leatherleaf -leatherlike -leathermaker -leathermaking -leathern -leatherneck -leatherroot -leatherside -leatherware -leatherwing -leatherwood -leatherwork -leatherworker -leatherworking -leathery -leathwake -leatman -leave -leaved -leaveless -leavelooker -leaven -leavening -leavenish -leavenless -leavenous -leaver -leaverwood -leaves -leaving -leavy -leawill -leban -lebbek -lebensraum -lebrancho -lecama -lecaniid -lecanine -lecanomancer -lecanomancy -lecanomantic -lecanoraceous -lecanorine -lecanoroid -lecanoscopic -lecanoscopy -lech -lecher -lecherous -lecherously -lecherousness -lechery -lechriodont -lechuguilla -lechwe -lecideaceous -lecideiform -lecideine -lecidioid -lecithal -lecithalbumin -lecithality -lecithin -lecithinase -lecithoblast -lecithoprotein -leck -lecker -lecontite -lecotropal -lectern -lection -lectionary -lectisternium -lector -lectorate -lectorial -lectorship -lectotype -lectress -lectrice -lectual -lecture -lecturee -lectureproof -lecturer -lectureship -lecturess -lecturette -lecyth -lecythid -lecythidaceous -lecythoid -lecythus -led -lede -leden -lederite -ledge -ledged -ledgeless -ledger -ledgerdom -ledging -ledgment -ledgy -ledol -lee -leeangle -leeboard -leech -leecheater -leecher -leechery -leeches -leechkin -leechlike -leechwort -leed -leefang -leeftail -leek -leekish -leeky -leep -leepit -leer -leerily -leeringly -leerish -leerness -leeroway -leery -lees -leet -leetman -leewan -leeward -leewardly -leewardmost -leewardness -leeway -leewill -left -leftish -leftism -leftist -leftments -leftmost -leftness -leftover -leftward -leftwardly -leftwards -leg -legacy -legal -legalese -legalism -legalist -legalistic -legalistically -legality -legalization -legalize -legally -legalness -legantine -legatary -legate -legatee -legateship -legatine -legation -legationary -legative -legato -legator -legatorial -legend -legenda -legendarian -legendary -legendic -legendist -legendless -legendry -leger -legerdemain -legerdemainist -legerity -leges -legged -legger -legginess -legging -legginged -leggy -leghorn -legibility -legible -legibleness -legibly -legific -legion -legionary -legioned -legioner -legionnaire -legionry -legislate -legislation -legislational -legislativ -legislative -legislatively -legislator -legislatorial -legislatorially -legislatorship -legislatress -legislature -legist -legit -legitim -legitimacy -legitimate -legitimately -legitimateness -legitimation -legitimatist -legitimatize -legitimism -legitimist -legitimistic -legitimity -legitimization -legitimize -leglen -legless -leglessness -leglet -leglike -legman -legoa -legpiece -legpull -legpuller -legpulling -legrope -legua -leguan -leguleian -leguleious -legume -legumelin -legumen -legumin -leguminiform -leguminose -leguminous -lehr -lehrbachite -lehrman -lehua -lei -leighton -leimtype -leiocephalous -leiocome -leiodermatous -leiodermia -leiomyofibroma -leiomyoma -leiomyomatous -leiomyosarcoma -leiophyllous -leiotrichine -leiotrichous -leiotrichy -leiotropic -leishmaniasis -leister -leisterer -leisurable -leisurably -leisure -leisured -leisureful -leisureless -leisureliness -leisurely -leisureness -leitmotiv -leitneriaceous -lek -lekach -lekane -lekha -leman -lemel -lemma -lemmata -lemming -lemmitis -lemmoblastic -lemmocyte -lemnaceous -lemnad -lemniscate -lemniscatic -lemniscus -lemography -lemology -lemon -lemonade -lemonish -lemonlike -lemonweed -lemonwood -lemony -lempira -lemur -lemures -lemurian -lemurid -lemuriform -lemurine -lemuroid -lenad -lenard -lench -lend -lendable -lendee -lender -lene -length -lengthen -lengthener -lengther -lengthful -lengthily -lengthiness -lengthsman -lengthsome -lengthsomeness -lengthways -lengthwise -lengthy -lenience -leniency -lenient -leniently -lenify -lenis -lenitic -lenitive -lenitively -lenitiveness -lenitude -lenity -lennilite -lennoaceous -lennow -leno -lens -lensed -lensless -lenslike -lent -lenth -lenthways -lentibulariaceous -lenticel -lenticellate -lenticle -lenticonus -lenticula -lenticular -lenticulare -lenticularis -lenticularly -lenticulate -lenticulated -lenticule -lenticulostriate -lenticulothalamic -lentiform -lentigerous -lentiginous -lentigo -lentil -lentisc -lentiscine -lentisco -lentiscus -lentisk -lentitude -lentitudinous -lento -lentoid -lentor -lentous -lenvoi -lenvoy -leoncito -leonhardite -leonine -leoninely -leonines -leonite -leontiasis -leontocephalous -leopard -leoparde -leopardess -leopardine -leopardite -leopardwood -leopoldite -leotard -lepa -lepadoid -lepargylic -leper -leperdom -lepered -lepidene -lepidine -lepidoblastic -lepidodendraceous -lepidodendrid -lepidodendroid -lepidoid -lepidolite -lepidomelane -lepidophyllous -lepidophyte -lepidophytic -lepidoporphyrin -lepidopter -lepidopteral -lepidopteran -lepidopterid -lepidopterist -lepidopterological -lepidopterologist -lepidopterology -lepidopteron -lepidopterous -lepidosaurian -lepidosirenoid -lepidosis -lepidosteoid -lepidote -lepidotic -lepismoid -lepocyte -leporid -leporide -leporiform -leporine -lepospondylous -lepothrix -lepra -lepralian -leprechaun -lepric -leproid -leprologic -leprologist -leprology -leproma -lepromatous -leprosarium -leprose -leprosery -leprosied -leprosis -leprosity -leprosy -leprous -leprously -leprousness -leptandrin -leptid -leptiform -leptinolite -leptite -leptocardian -leptocentric -leptocephalan -leptocephali -leptocephalia -leptocephalic -leptocephalid -leptocephaloid -leptocephalous -leptocephalus -leptocephaly -leptocercal -leptochlorite -leptochroa -leptochrous -leptoclase -leptodactyl -leptodactylous -leptodermatous -leptodermous -leptokurtic -leptomatic -leptome -leptomedusan -leptomeningeal -leptomeninges -leptomeningitis -leptomeninx -leptometer -leptomonad -lepton -leptonecrosis -leptonema -leptopellic -leptophyllous -leptoprosope -leptoprosopic -leptoprosopous -leptoprosopy -leptorrhin -leptorrhine -leptorrhinian -leptorrhinism -leptosome -leptosperm -leptospirosis -leptosporangiate -leptostracan -leptostracous -leptotene -leptus -leptynite -lernaeiform -lernaeoid -lerot -lerp -lerret -lesche -lesion -lesional -lesiy -leskeaceous -less -lessee -lesseeship -lessen -lessener -lesser -lessive -lessn -lessness -lesson -lessor -lest -lestiwarite -lestobiosis -lestobiotic -lestrad -let -letch -letchy -letdown -lete -lethal -lethality -lethalize -lethally -lethargic -lethargical -lethargically -lethargicalness -lethargize -lethargus -lethargy -lethiferous -lethologica -letoff -lettable -letten -letter -lettered -letterer -letteret -lettergram -letterhead -letterin -lettering -letterleaf -letterless -letterpress -letterspace -letterweight -letterwood -lettrin -lettsomite -lettuce -letup -leu -leucaemia -leucaemic -leucaethiop -leucaethiopic -leucaniline -leucanthous -leucaugite -leucaurin -leucemia -leucemic -leuch -leuchaemia -leuchemia -leuchtenbergite -leucine -leucism -leucite -leucitic -leucitis -leucitite -leucitohedron -leucitoid -leuco -leucobasalt -leucoblast -leucoblastic -leucocarpous -leucochalcite -leucocholic -leucocholy -leucochroic -leucocidic -leucocidin -leucocism -leucocrate -leucocratic -leucocyan -leucocytal -leucocyte -leucocythemia -leucocythemic -leucocytic -leucocytoblast -leucocytogenesis -leucocytoid -leucocytology -leucocytolysin -leucocytolysis -leucocytolytic -leucocytometer -leucocytopenia -leucocytopenic -leucocytoplania -leucocytopoiesis -leucocytosis -leucocytotherapy -leucocytotic -leucoderma -leucodermatous -leucodermic -leucoencephalitis -leucogenic -leucoid -leucoindigo -leucoindigotin -leucolytic -leucoma -leucomaine -leucomatous -leucomelanic -leucomelanous -leucon -leucopenia -leucopenic -leucophane -leucophanite -leucophoenicite -leucophore -leucophyllous -leucophyre -leucoplakia -leucoplakial -leucoplast -leucoplastid -leucopoiesis -leucopoietic -leucopyrite -leucoquinizarin -leucorrhea -leucorrheal -leucoryx -leucosis -leucospermous -leucosphenite -leucosphere -leucospheric -leucostasis -leucosyenite -leucotactic -leucotic -leucotome -leucotomy -leucotoxic -leucous -leucoxene -leucyl -leud -leuk -leukemia -leukemic -leukocidic -leukocidin -leukosis -leukotic -leuma -lev -levance -levant -levanter -levator -levee -level -leveler -levelheaded -levelheadedly -levelheadedness -leveling -levelish -levelism -levelly -levelman -levelness -lever -leverage -leverer -leveret -leverman -levers -leverwood -leviable -leviathan -levier -levigable -levigate -levigation -levigator -levin -levining -levir -levirate -leviratical -leviration -levitant -levitate -levitation -levitational -levitative -levitator -levity -levo -levoduction -levogyrate -levogyre -levogyrous -levolactic -levolimonene -levorotation -levorotatory -levotartaric -levoversion -levulic -levulin -levulinic -levulose -levulosuria -levy -levyist -levynite -lew -lewd -lewdly -lewdness -lewis -lewisite -lewisson -lewth -lexia -lexical -lexicalic -lexicality -lexicographer -lexicographian -lexicographic -lexicographical -lexicographically -lexicographist -lexicography -lexicologic -lexicological -lexicologist -lexicology -lexicon -lexiconist -lexiconize -lexigraphic -lexigraphical -lexigraphically -lexigraphy -lexiphanic -lexiphanicism -ley -leyland -leysing -lherzite -lherzolite -li -liability -liable -liableness -liaison -liana -liang -liar -liard -libament -libaniferous -libanophorous -libanotophorous -libant -libate -libation -libationary -libationer -libatory -libber -libbet -libbra -libel -libelant -libelee -libeler -libelist -libellary -libellate -libellulid -libelluloid -libelous -libelously -liber -liberal -liberalism -liberalist -liberalistic -liberality -liberalization -liberalize -liberalizer -liberally -liberalness -liberate -liberation -liberationism -liberationist -liberative -liberator -liberatory -liberatress -liberomotor -libertarian -libertarianism -liberticidal -liberticide -libertinage -libertine -libertinism -liberty -libertyless -libethenite -libidibi -libidinal -libidinally -libidinosity -libidinous -libidinously -libidinousness -libido -libken -libra -libral -librarian -librarianess -librarianship -librarious -librarius -library -libraryless -librate -libration -libratory -libretti -librettist -libretto -libriform -libroplast -licareol -licca -licensable -license -licensed -licensee -licenseless -licenser -licensor -licensure -licentiate -licentiateship -licentiation -licentious -licentiously -licentiousness -lich -licham -lichanos -lichen -lichenaceous -lichened -licheniasis -lichenic -lichenicolous -licheniform -lichenin -lichenism -lichenist -lichenivorous -lichenization -lichenize -lichenlike -lichenographer -lichenographic -lichenographical -lichenographist -lichenography -lichenoid -lichenologic -lichenological -lichenologist -lichenology -lichenose -licheny -lichi -licit -licitation -licitly -licitness -lick -licker -lickerish -lickerishly -lickerishness -licking -lickpenny -lickspit -lickspittle -lickspittling -licorice -licorn -licorne -lictor -lictorian -lid -lidded -lidder -lidflower -lidgate -lidless -lie -liebenerite -liebigite -lied -lief -liege -liegedom -liegeful -liegefully -liegeless -liegely -liegeman -lieger -lien -lienal -lienculus -lienee -lienic -lienitis -lienocele -lienogastric -lienointestinal -lienomalacia -lienomedullary -lienomyelogenous -lienopancreatic -lienor -lienorenal -lienotoxin -lienteria -lienteric -lientery -lieproof -lieprooflier -lieproofliest -lier -lierne -lierre -liesh -liespfund -lieu -lieue -lieutenancy -lieutenant -lieutenantry -lieutenantship -lieve -lievrite -life -lifeblood -lifeboat -lifeboatman -lifeday -lifedrop -lifeful -lifefully -lifefulness -lifeguard -lifehold -lifeholder -lifeless -lifelessly -lifelessness -lifelet -lifelike -lifelikeness -lifeline -lifelong -lifer -liferent -liferenter -liferentrix -liferoot -lifesaver -lifesaving -lifesome -lifesomely -lifesomeness -lifespring -lifetime -lifeward -lifework -lifey -lifo -lift -liftable -lifter -lifting -liftless -liftman -ligable -ligament -ligamental -ligamentary -ligamentous -ligamentously -ligamentum -ligas -ligate -ligation -ligator -ligature -ligeance -ligger -light -lightable -lightboat -lightbrained -lighten -lightener -lightening -lighter -lighterage -lighterful -lighterman -lightface -lightful -lightfulness -lighthead -lightheaded -lightheadedly -lightheadedness -lighthearted -lightheartedly -lightheartedness -lighthouse -lighthouseman -lighting -lightish -lightkeeper -lightless -lightlessness -lightly -lightman -lightmanship -lightmouthed -lightness -lightning -lightninglike -lightningproof -lightproof -lightroom -lightscot -lightship -lightsman -lightsome -lightsomely -lightsomeness -lighttight -lightwards -lightweight -lightwood -lightwort -lignaloes -lignatile -ligne -ligneous -lignescent -lignicole -lignicoline -lignicolous -ligniferous -lignification -ligniform -lignify -lignin -ligninsulphonate -ligniperdous -lignite -lignitic -lignitiferous -lignitize -lignivorous -lignocellulose -lignoceric -lignography -lignone -lignose -lignosity -lignosulphite -lignosulphonate -lignum -ligroine -ligula -ligular -ligulate -ligulated -ligule -liguliflorous -liguliform -ligulin -liguloid -ligure -ligurite -ligurition -ligustrin -liin -lija -likability -likable -likableness -like -likelihead -likelihood -likeliness -likely -liken -likeness -liker -likesome -likeways -likewise -likin -liking -liknon -lilac -lilaceous -lilacin -lilacky -lilacthroat -lilactide -lile -liliaceous -lilied -liliform -lill -lillianite -lillibullero -lilt -liltingly -liltingness -lily -lilyfy -lilyhanded -lilylike -lilywood -lilywort -lim -limacel -limaceous -limaciform -limacine -limacinid -limacoid -limacon -limaille -liman -limation -limb -limbal -limbat -limbate -limbation -limbeck -limbed -limber -limberham -limberly -limberness -limbers -limbic -limbie -limbiferous -limbless -limbmeal -limbo -limboinfantum -limbous -limburgite -limbus -limby -lime -limeade -limeberry -limebush -limehouse -limekiln -limeless -limelight -limelighter -limelike -limeman -limen -limequat -limer -limes -limestone -limetta -limettin -limewash -limewater -limewort -limey -limicoline -limicolous -liminal -liminary -liminess -liming -limit -limitable -limitableness -limital -limitarian -limitary -limitate -limitation -limitative -limitatively -limited -limitedly -limitedness -limiter -limiting -limitive -limitless -limitlessly -limitlessness -limitrophe -limivorous -limma -limmer -limmock -limmu -limn -limnanth -limnanthaceous -limner -limnery -limnetic -limniad -limnimeter -limnimetric -limnite -limnobiologic -limnobiological -limnobiologically -limnobiology -limnobios -limnograph -limnologic -limnological -limnologically -limnologist -limnology -limnometer -limnophile -limnophilid -limnophilous -limnoplankton -limnorioid -limoid -limonene -limoniad -limonin -limonite -limonitic -limonitization -limonium -limose -limous -limousine -limp -limper -limpet -limphault -limpid -limpidity -limpidly -limpidness -limpily -limpin -limpiness -limping -limpingly -limpingness -limpish -limpkin -limply -limpness -limpsy -limpwort -limpy -limsy -limu -limulid -limuloid -limurite -limy -lin -lina -linable -linaceous -linaga -linage -linaloa -linalol -linalool -linamarin -linarite -linch -linchbolt -linchet -linchpin -linchpinned -lincloth -linctus -lindackerite -lindane -linden -linder -lindo -lindoite -line -linea -lineage -lineaged -lineal -lineality -lineally -lineament -lineamental -lineamentation -lineameter -linear -linearifolius -linearity -linearization -linearize -linearly -lineate -lineated -lineation -lineature -linecut -lined -lineiform -lineless -linelet -lineman -linen -linenette -linenize -linenizer -linenman -lineocircular -lineograph -lineolate -lineolated -liner -linesman -linewalker -linework -ling -linga -lingberry -lingbird -linge -lingel -lingenberry -linger -lingerer -lingerie -lingo -lingonberry -lingtow -lingtowman -lingua -linguacious -linguaciousness -linguadental -linguaeform -lingual -linguale -linguality -lingualize -lingually -linguanasal -linguatuline -linguatuloid -linguet -linguidental -linguiform -linguipotence -linguist -linguister -linguistic -linguistical -linguistically -linguistician -linguistics -linguistry -lingula -lingulate -lingulated -lingulid -linguliferous -linguliform -linguloid -linguodental -linguodistal -linguogingival -linguopalatal -linguopapillitis -linguoversion -lingwort -lingy -linha -linhay -linie -liniment -linin -lininess -lining -linitis -liniya -linja -linje -link -linkable -linkage -linkboy -linked -linkedness -linker -linking -linkman -links -linksmith -linkwork -linky -linn -linnaeite -linnet -lino -linolate -linoleic -linolein -linolenate -linolenic -linolenin -linoleum -linolic -linolin -linometer -linon -linotype -linotyper -linotypist -linous -linoxin -linoxyn -linpin -linseed -linsey -linstock -lint -lintel -linteled -linteling -linten -linter -lintern -lintie -lintless -lintonite -lintseed -lintwhite -linty -linwood -liny -liodermia -liomyofibroma -liomyoma -lion -lioncel -lionel -lionesque -lioness -lionet -lionheart -lionhearted -lionheartedness -lionhood -lionism -lionizable -lionization -lionize -lionizer -lionlike -lionly -lionproof -lionship -liotrichine -lip -lipa -lipacidemia -lipaciduria -liparian -liparid -liparite -liparocele -liparoid -liparomphalus -liparous -lipase -lipectomy -lipemia -lipide -lipin -lipless -liplet -liplike -lipoblast -lipoblastoma -lipocaic -lipocardiac -lipocele -lipoceratous -lipocere -lipochondroma -lipochrome -lipochromogen -lipoclasis -lipoclastic -lipocyte -lipodystrophia -lipodystrophy -lipoferous -lipofibroma -lipogenesis -lipogenetic -lipogenic -lipogenous -lipogram -lipogrammatic -lipogrammatism -lipogrammatist -lipography -lipohemia -lipoid -lipoidal -lipoidemia -lipoidic -lipolysis -lipolytic -lipoma -lipomata -lipomatosis -lipomatous -lipometabolic -lipometabolism -lipomorph -lipomyoma -lipomyxoma -lipopexia -lipophagic -lipophore -lipopod -lipoprotein -liposarcoma -liposis -liposome -lipostomy -lipothymial -lipothymic -lipothymy -lipotrophic -lipotrophy -lipotropic -lipotropy -lipotype -lipovaccine -lipoxenous -lipoxeny -lipped -lippen -lipper -lipperings -lippiness -lipping -lippitude -lippitudo -lippy -lipsanographer -lipsanotheca -lipstick -lipuria -lipwork -liquable -liquamen -liquate -liquation -liquefacient -liquefaction -liquefactive -liquefiable -liquefier -liquefy -liquesce -liquescence -liquescency -liquescent -liqueur -liquid -liquidable -liquidamber -liquidate -liquidation -liquidator -liquidatorship -liquidity -liquidize -liquidizer -liquidless -liquidly -liquidness -liquidogenic -liquidogenous -liquidy -liquiform -liquor -liquorer -liquorish -liquorishly -liquorishness -liquorist -liquorless -lira -lirate -liration -lire -lirella -lirellate -lirelliform -lirelline -lirellous -liripipe -liroconite -lis -lisere -lish -lisk -lisle -lisp -lisper -lispingly -lispund -liss -lissamphibian -lissencephalic -lissencephalous -lissoflagellate -lissom -lissome -lissomely -lissomeness -lissotrichan -lissotrichous -lissotrichy -list -listable -listed -listedness -listel -listen -listener -listening -lister -listerellosis -listing -listless -listlessly -listlessness -listred -listwork -lit -litaneutical -litany -litanywise -litas -litation -litch -litchi -lite -liter -literacy -literaily -literal -literalism -literalist -literalistic -literality -literalization -literalize -literalizer -literally -literalminded -literalmindedness -literalness -literarian -literariness -literary -literaryism -literate -literati -literation -literatist -literato -literator -literature -literatus -literose -literosity -lith -lithagogue -lithangiuria -lithanthrax -litharge -lithe -lithectasy -lithectomy -lithely -lithemia -lithemic -litheness -lithesome -lithesomeness -lithi -lithia -lithiasis -lithiastic -lithiate -lithic -lithifaction -lithification -lithify -lithite -lithium -litho -lithobiid -lithobioid -lithocenosis -lithochemistry -lithochromatic -lithochromatics -lithochromatographic -lithochromatography -lithochromography -lithochromy -lithoclase -lithoclast -lithoclastic -lithoclasty -lithoculture -lithocyst -lithocystotomy -lithodesma -lithodialysis -lithodid -lithodomous -lithofracteur -lithofractor -lithogenesis -lithogenetic -lithogenous -lithogeny -lithoglyph -lithoglypher -lithoglyphic -lithoglyptic -lithoglyptics -lithograph -lithographer -lithographic -lithographical -lithographically -lithographize -lithography -lithogravure -lithoid -lithoidite -litholabe -litholapaxy -litholatrous -litholatry -lithologic -lithological -lithologically -lithologist -lithology -litholysis -litholyte -litholytic -lithomancy -lithomarge -lithometer -lithonephria -lithonephritis -lithonephrotomy -lithontriptic -lithontriptist -lithontriptor -lithopedion -lithopedium -lithophagous -lithophane -lithophanic -lithophany -lithophilous -lithophone -lithophotography -lithophotogravure -lithophthisis -lithophyl -lithophyllous -lithophysa -lithophysal -lithophyte -lithophytic -lithophytous -lithopone -lithoprint -lithoscope -lithosian -lithosiid -lithosis -lithosol -lithosperm -lithospermon -lithospermous -lithosphere -lithotint -lithotome -lithotomic -lithotomical -lithotomist -lithotomize -lithotomous -lithotomy -lithotony -lithotresis -lithotripsy -lithotriptor -lithotrite -lithotritic -lithotritist -lithotrity -lithotype -lithotypic -lithotypy -lithous -lithoxyl -lithsman -lithuresis -lithuria -lithy -liticontestation -litigable -litigant -litigate -litigation -litigationist -litigator -litigatory -litigiosity -litigious -litigiously -litigiousness -litiscontest -litiscontestation -litiscontestational -litmus -litorinoid -litotes -litra -litster -litten -litter -litterateur -litterer -littermate -littery -little -littleleaf -littleneck -littleness -littlewale -littling -littlish -littoral -littress -lituiform -lituite -lituoline -lituoloid -liturate -liturgical -liturgically -liturgician -liturgics -liturgiological -liturgiologist -liturgiology -liturgism -liturgist -liturgistic -liturgistical -liturgize -liturgy -litus -lituus -litz -livability -livable -livableness -live -liveborn -lived -livedo -livelihood -livelily -liveliness -livelong -lively -liven -liveness -liver -liverance -liverberry -livered -liverhearted -liverheartedness -liveried -liverish -liverishness -liverleaf -liverless -liverwort -liverwurst -livery -liverydom -liveryless -liveryman -livestock -livid -lividity -lividly -lividness -livier -living -livingless -livingly -livingness -livingstoneite -livor -livre -liwan -lixive -lixivial -lixiviate -lixiviation -lixiviator -lixivious -lixivium -lizard -lizardtail -llama -llano -llautu -llyn -lo -loa -loach -load -loadage -loaded -loaden -loader -loading -loadless -loadpenny -loadsome -loadstone -loaf -loafer -loaferdom -loaferish -loafing -loafingly -loaflet -loaghtan -loam -loamily -loaminess -loaming -loamless -loamy -loan -loanable -loaner -loanin -loanmonger -loanword -loasaceous -loath -loathe -loather -loathful -loathfully -loathfulness -loathing -loathingly -loathliness -loathly -loathness -loathsome -loathsomely -loathsomeness -loave -lob -lobal -lobar -lobate -lobated -lobately -lobation -lobber -lobbish -lobby -lobbyer -lobbyism -lobbyist -lobbyman -lobcock -lobe -lobectomy -lobed -lobefoot -lobefooted -lobeless -lobelet -lobeliaceous -lobelin -lobeline -lobellated -lobfig -lobiform -lobigerous -lobing -lobiped -loblolly -lobo -lobola -lobopodium -lobose -lobotomy -lobscourse -lobscouse -lobscouser -lobster -lobstering -lobsterish -lobsterlike -lobsterproof -lobtail -lobular -lobularly -lobulate -lobulated -lobulation -lobule -lobulette -lobulose -lobulous -lobworm -loca -locable -local -locale -localism -localist -localistic -locality -localizable -localization -localize -localizer -locally -localness -locanda -locate -location -locational -locative -locator -locellate -locellus -loch -lochage -lochan -lochetic -lochia -lochial -lochiocolpos -lochiocyte -lochiometra -lochiometritis -lochiopyra -lochiorrhagia -lochiorrhea -lochioschesis -lochometritis -lochoperitonitis -lochopyra -lochus -lochy -loci -lociation -lock -lockable -lockage -lockbox -locked -locker -lockerman -locket -lockful -lockhole -locking -lockjaw -lockless -locklet -lockmaker -lockmaking -lockman -lockout -lockpin -lockram -locksman -locksmith -locksmithery -locksmithing -lockspit -lockup -lockwork -locky -loco -locodescriptive -locofoco -locoism -locomobile -locomobility -locomote -locomotility -locomotion -locomotive -locomotively -locomotiveman -locomotiveness -locomotivity -locomotor -locomotory -locomutation -locoweed -loculament -loculamentose -loculamentous -locular -loculate -loculated -loculation -locule -loculicidal -loculicidally -loculose -loculus -locum -locus -locust -locusta -locustal -locustberry -locustelle -locustid -locusting -locustlike -locution -locutor -locutorship -locutory -lod -lode -lodemanage -lodesman -lodestar -lodestone -lodestuff -lodge -lodgeable -lodged -lodgeful -lodgeman -lodgepole -lodger -lodgerdom -lodging -lodginghouse -lodgings -lodgment -lodicule -loess -loessal -loessial -loessic -loessland -loessoid -lof -lofstelle -loft -lofter -loftily -loftiness -lofting -loftless -loftman -loftsman -lofty -log -loganberry -loganiaceous -loganin -logaoedic -logarithm -logarithmal -logarithmetic -logarithmetical -logarithmetically -logarithmic -logarithmical -logarithmically -logarithmomancy -logbook -logcock -loge -logeion -logeum -loggat -logged -logger -loggerhead -loggerheaded -loggia -loggin -logging -loggish -loghead -logheaded -logia -logic -logical -logicalist -logicality -logicalization -logicalize -logically -logicalness -logicaster -logician -logicism -logicist -logicity -logicize -logicless -logie -login -logion -logistic -logistical -logistician -logistics -logium -loglet -loglike -logman -logocracy -logodaedaly -logogogue -logogram -logogrammatic -logograph -logographer -logographic -logographical -logographically -logography -logogriph -logogriphic -logoi -logolatry -logology -logomach -logomacher -logomachic -logomachical -logomachist -logomachize -logomachy -logomancy -logomania -logomaniac -logometer -logometric -logometrical -logometrically -logopedia -logopedics -logorrhea -logos -logothete -logotype -logotypy -logroll -logroller -logrolling -logway -logwise -logwood -logwork -logy -lohan -lohoch -loimic -loimography -loimology -loin -loincloth -loined -loir -loiter -loiterer -loiteringly -loiteringness -loka -lokao -lokaose -lokapala -loke -loket -lokiec -loll -loller -lollingite -lollingly -lollipop -lollop -lollopy -lolly -loma -lomastome -lomatine -lomatinous -lombard -lomboy -loment -lomentaceous -lomentariaceous -lomentum -lomita -lommock -lone -lonelihood -lonelily -loneliness -lonely -loneness -lonesome -lonesomely -lonesomeness -long -longa -longan -longanimity -longanimous -longbeak -longbeard -longboat -longbow -longcloth -longe -longear -longer -longeval -longevity -longevous -longfelt -longfin -longful -longhair -longhand -longhead -longheaded -longheadedly -longheadedness -longhorn -longicaudal -longicaudate -longicone -longicorn -longilateral -longilingual -longiloquence -longimanous -longimetric -longimetry -longing -longingly -longingness -longinquity -longipennate -longipennine -longirostral -longirostrate -longirostrine -longisection -longish -longitude -longitudinal -longitudinally -longjaw -longleaf -longlegs -longly -longmouthed -longness -longs -longshanks -longshore -longshoreman -longsome -longsomely -longsomeness -longspun -longspur -longtail -longue -longulite -longway -longways -longwise -longwool -longwork -longwort -lonquhard -lontar -loo -looby -lood -loof -loofah -loofie -loofness -look -looker -looking -lookout -lookum -loom -loomer -loomery -looming -loon -loonery -looney -loony -loop -looper -loopful -loophole -looping -loopist -looplet -looplike -loopy -loose -loosely -loosemouthed -loosen -loosener -looseness -looser -loosestrife -loosing -loosish -loot -lootable -looten -looter -lootie -lootiewallah -lootsman -lop -lope -loper -lophiid -lophine -lophiodont -lophiodontoid -lophiostomate -lophiostomous -lophobranch -lophobranchiate -lophocalthrops -lophocercal -lophodont -lophophoral -lophophore -lophophorine -lophophytosis -lophosteon -lophotriaene -lophotrichic -lophotrichous -lopolith -loppard -lopper -loppet -lopping -loppy -lopseed -lopsided -lopsidedly -lopsidedness -lopstick -loquacious -loquaciously -loquaciousness -loquacity -loquat -loquence -loquent -loquently -lora -loral -loran -lorandite -loranskite -loranthaceous -lorarius -lorate -lorcha -lord -lording -lordkin -lordless -lordlet -lordlike -lordlily -lordliness -lordling -lordly -lordolatry -lordosis -lordotic -lordship -lordwood -lordy -lore -loreal -lored -loreless -lorenzenite -lorettoite -lorgnette -lori -loric -lorica -loricarian -loricarioid -loricate -lorication -loricoid -lorikeet -lorilet -lorimer -loriot -loris -lormery -lorn -lornness -loro -lorriker -lorry -lors -lorum -lory -losable -losableness -lose -losel -loselism -losenger -loser -losh -losing -loss -lossenite -lossless -lossproof -lost -lostling -lostness -lot -lota -lotase -lote -lotebush -lotic -lotiform -lotion -lotment -lotophagous -lotophagously -lotrite -lots -lotter -lottery -lotto -lotus -lotusin -lotuslike -louch -louchettes -loud -louden -loudering -loudish -loudly -loudmouthed -loudness -louey -lough -lougheen -louisine -louk -loukoum -loulu -lounder -lounderer -lounge -lounger -lounging -loungingly -loungy -loup -loupe -lour -lourdy -louse -louseberry -lousewort -lousily -lousiness -louster -lousy -lout -louter -louther -loutish -loutishly -loutishness -loutrophoros -louty -louvar -louver -louvered -louvering -louverwork -lovability -lovable -lovableness -lovably -lovage -love -lovebird -loveflower -loveful -lovelass -loveless -lovelessly -lovelessness -lovelihead -lovelily -loveliness -loveling -lovelock -lovelorn -lovelornness -lovely -loveman -lovemate -lovemonger -loveproof -lover -loverdom -lovered -loverhood -lovering -loverless -loverliness -loverly -lovership -loverwise -lovesick -lovesickness -lovesome -lovesomely -lovesomeness -loveworth -loveworthy -loving -lovingly -lovingness -low -lowa -lowan -lowbell -lowborn -lowboy -lowbred -lowdah -lowder -loweite -lower -lowerable -lowerclassman -lowerer -lowering -loweringly -loweringness -lowermost -lowery -lowigite -lowish -lowishly -lowishness -lowland -lowlander -lowlily -lowliness -lowly -lowmen -lowmost -lown -lowness -lownly -lowth -lowwood -lowy -lox -loxia -loxic -loxoclase -loxocosm -loxodograph -loxodont -loxodontous -loxodrome -loxodromic -loxodromical -loxodromically -loxodromics -loxodromism -loxolophodont -loxophthalmus -loxotic -loxotomy -loy -loyal -loyalism -loyalist -loyalize -loyally -loyalness -loyalty -lozenge -lozenged -lozenger -lozengeways -lozengewise -lozengy -lubber -lubbercock -lubberlike -lubberliness -lubberly -lube -lubra -lubric -lubricant -lubricate -lubrication -lubricational -lubricative -lubricator -lubricatory -lubricious -lubricity -lubricous -lubrifaction -lubrification -lubrify -lubritorian -lubritorium -lucanid -lucarne -lucban -luce -lucence -lucency -lucent -lucently -lucern -lucernal -lucernarian -lucerne -lucet -lucible -lucid -lucida -lucidity -lucidly -lucidness -lucifee -luciferase -luciferin -luciferoid -luciferous -luciferously -luciferousness -lucific -luciform -lucifugal -lucifugous -lucigen -lucimeter -lucinoid -lucivee -luck -lucken -luckful -luckie -luckily -luckiness -luckless -lucklessly -lucklessness -lucky -lucration -lucrative -lucratively -lucrativeness -lucre -lucriferous -lucriferousness -lucrific -lucrify -luctation -luctiferous -luctiferousness -lucubrate -lucubration -lucubrator -lucubratory -lucule -luculent -luculently -lucullite -lucumia -lucumony -lucy -ludden -ludefisk -ludibrious -ludibry -ludicropathetic -ludicroserious -ludicrosity -ludicrosplenetic -ludicrous -ludicrously -ludicrousness -ludification -ludlamite -ludo -ludwigite -lue -lues -luetic -luetically -lufberry -lufbery -luff -lug -luge -luger -luggage -luggageless -luggar -lugged -lugger -luggie -lugmark -lugsail -lugsome -lugubriosity -lugubrious -lugubriously -lugubriousness -lugworm -luhinga -luigino -lujaurite -luke -lukely -lukeness -lukewarm -lukewarmish -lukewarmly -lukewarmness -lukewarmth -lulab -lull -lullaby -luller -lulliloo -lullingly -lulu -lum -lumachel -lumbaginous -lumbago -lumbang -lumbar -lumbarization -lumbayao -lumber -lumberdar -lumberdom -lumberer -lumbering -lumberingly -lumberingness -lumberjack -lumberless -lumberly -lumberman -lumbersome -lumberyard -lumbocolostomy -lumbocolotomy -lumbocostal -lumbodorsal -lumbodynia -lumbosacral -lumbovertebral -lumbrical -lumbricalis -lumbriciform -lumbricine -lumbricoid -lumbricosis -lumbrous -lumen -luminaire -luminal -luminance -luminant -luminarious -luminarism -luminarist -luminary -luminate -lumination -luminative -luminator -lumine -luminesce -luminescence -luminescent -luminiferous -luminificent -luminism -luminist -luminologist -luminometer -luminosity -luminous -luminously -luminousness -lummox -lummy -lump -lumper -lumpet -lumpfish -lumpily -lumpiness -lumping -lumpingly -lumpish -lumpishly -lumpishness -lumpkin -lumpman -lumpsucker -lumpy -luna -lunacy -lunambulism -lunar -lunare -lunarian -lunarist -lunarium -lunary -lunate -lunatellus -lunately -lunatic -lunatically -lunation -lunatize -lunatum -lunch -luncheon -luncheoner -luncheonette -luncheonless -luncher -lunchroom -lundress -lundyfoot -lune -lunes -lunette -lung -lunge -lunged -lungeous -lunger -lungfish -lungflower -lungful -lungi -lungie -lungis -lungless -lungmotor -lungsick -lungworm -lungwort -lungy -lunicurrent -luniform -lunisolar -lunistice -lunistitial -lunitidal -lunkhead -lunn -lunoid -lunt -lunula -lunular -lunulate -lunulated -lunule -lunulet -lunulite -lupanarian -lupanine -lupe -lupeol -lupeose -lupetidine -lupicide -lupiform -lupinaster -lupine -lupinin -lupinine -lupinosis -lupinous -lupis -lupoid -lupous -lupulic -lupulin -lupuline -lupulinic -lupulinous -lupulinum -lupulus -lupus -lupuserythematosus -lura -lural -lurch -lurcher -lurchingfully -lurchingly -lurchline -lurdan -lurdanism -lure -lureful -lurement -lurer -luresome -lurg -lurgworm -lurid -luridity -luridly -luridness -luringly -lurk -lurker -lurkingly -lurkingness -lurky -lurrier -lurry -luscious -lusciously -lusciousness -lush -lushburg -lusher -lushly -lushness -lushy -lusk -lusky -lusory -lust -luster -lusterer -lusterless -lusterware -lustful -lustfully -lustfulness -lustihead -lustily -lustiness -lustless -lustra -lustral -lustrant -lustrate -lustration -lustrative -lustratory -lustreless -lustrical -lustrification -lustrify -lustrine -lustring -lustrous -lustrously -lustrousness -lustrum -lusty -lut -lutaceous -lutanist -lutany -lutation -lute -luteal -lutecia -lutecium -lutein -luteinization -luteinize -lutelet -lutemaker -lutemaking -luteo -luteocobaltic -luteofulvous -luteofuscescent -luteofuscous -luteolin -luteolous -luteoma -luteorufescent -luteous -luteovirescent -luter -lutescent -lutestring -lutetium -luteway -lutfisk -luthern -luthier -lutianid -lutianoid -lutidine -lutidinic -luting -lutist -lutose -lutrin -lutrine -lutulence -lutulent -lux -luxate -luxation -luxe -luxulianite -luxuriance -luxuriancy -luxuriant -luxuriantly -luxuriantness -luxuriate -luxuriation -luxurious -luxuriously -luxuriousness -luxurist -luxury -luxus -ly -lyam -lyard -lycaenid -lycanthrope -lycanthropia -lycanthropic -lycanthropist -lycanthropize -lycanthropous -lycanthropy -lyceal -lyceum -lychnomancy -lychnoscope -lychnoscopic -lycid -lycodoid -lycopene -lycoperdaceous -lycoperdoid -lycoperdon -lycopin -lycopod -lycopode -lycopodiaceous -lycorine -lycosid -lyctid -lyddite -lydite -lye -lyencephalous -lyery -lygaeid -lying -lyingly -lymantriid -lymhpangiophlebitis -lymnaean -lymnaeid -lymph -lymphad -lymphadenectasia -lymphadenectasis -lymphadenia -lymphadenitis -lymphadenoid -lymphadenoma -lymphadenopathy -lymphadenosis -lymphaemia -lymphagogue -lymphangeitis -lymphangial -lymphangiectasis -lymphangiectatic -lymphangiectodes -lymphangiitis -lymphangioendothelioma -lymphangiofibroma -lymphangiology -lymphangioma -lymphangiomatous -lymphangioplasty -lymphangiosarcoma -lymphangiotomy -lymphangitic -lymphangitis -lymphatic -lymphatical -lymphation -lymphatism -lymphatitis -lymphatolysin -lymphatolysis -lymphatolytic -lymphectasia -lymphedema -lymphemia -lymphenteritis -lymphoblast -lymphoblastic -lymphoblastoma -lymphoblastosis -lymphocele -lymphocyst -lymphocystosis -lymphocyte -lymphocythemia -lymphocytic -lymphocytoma -lymphocytomatosis -lymphocytosis -lymphocytotic -lymphocytotoxin -lymphodermia -lymphoduct -lymphogenic -lymphogenous -lymphoglandula -lymphogranuloma -lymphoid -lymphoidectomy -lymphology -lymphoma -lymphomatosis -lymphomatous -lymphomonocyte -lymphomyxoma -lymphopathy -lymphopenia -lymphopenial -lymphopoiesis -lymphopoietic -lymphoprotease -lymphorrhage -lymphorrhagia -lymphorrhagic -lymphorrhea -lymphosarcoma -lymphosarcomatosis -lymphosarcomatous -lymphosporidiosis -lymphostasis -lymphotaxis -lymphotome -lymphotomy -lymphotoxemia -lymphotoxin -lymphotrophic -lymphotrophy -lymphous -lymphuria -lymphy -lyncean -lynch -lynchable -lyncher -lyncine -lynnhaven -lynx -lyomerous -lyonetiid -lyonnaise -lyophile -lyophilization -lyophilize -lyophobe -lyopomatous -lyotrope -lypemania -lypothymia -lyra -lyrate -lyrated -lyrately -lyraway -lyre -lyrebird -lyreflower -lyreman -lyretail -lyric -lyrical -lyrically -lyricalness -lyrichord -lyricism -lyricist -lyricize -lyriform -lyrism -lyrist -lys -lysate -lyse -lysidine -lysigenic -lysigenous -lysigenously -lysimeter -lysin -lysine -lysis -lysogen -lysogenesis -lysogenetic -lysogenic -lysozyme -lyssa -lyssic -lyssophobia -lyterian -lythraceous -lytic -lytta -lyxose -m -ma -maam -maamselle -mabi -mabolo -mac -macaasim -macabre -macabresque -macaco -macadam -macadamite -macadamization -macadamize -macadamizer -macan -macana -macao -macaque -macarism -macarize -macaroni -macaronic -macaronical -macaronically -macaronicism -macaronism -macaroon -macaw -maccaboy -macco -maccoboy -mace -macedoine -macehead -maceman -macer -macerate -macerater -maceration -machairodont -machan -machar -machete -machi -machiavellist -machicolate -machicolation -machicoulis -machila -machin -machinability -machinable -machinal -machinate -machination -machinator -machine -machineful -machineless -machinelike -machinely -machineman -machinemonger -machiner -machinery -machinification -machinify -machinism -machinist -machinization -machinize -machinoclast -machinofacture -machinotechnique -machinule -machopolyp -machree -macies -macilence -macilency -macilent -mack -mackenboy -mackerel -mackereler -mackereling -mackins -mackintosh -mackintoshite -mackle -macklike -macle -macled -maclurin -maco -maconite -macracanthrorhynchiasis -macradenous -macrame -macrander -macrandrous -macrauchene -macraucheniid -macraucheniiform -macrauchenioid -macrencephalic -macrencephalous -macro -macroanalysis -macroanalyst -macroanalytical -macrobacterium -macrobian -macrobiosis -macrobiote -macrobiotic -macrobiotics -macroblast -macrobrachia -macrocarpous -macrocephalia -macrocephalic -macrocephalism -macrocephalous -macrocephalus -macrocephaly -macrochaeta -macrocheilia -macrochemical -macrochemically -macrochemistry -macrochiran -macrochiria -macrochiropteran -macrocladous -macroclimate -macroclimatic -macrococcus -macrocoly -macroconidial -macroconidium -macroconjugant -macrocornea -macrocosm -macrocosmic -macrocosmical -macrocosmology -macrocosmos -macrocrystalline -macrocyst -macrocyte -macrocythemia -macrocytic -macrocytosis -macrodactyl -macrodactylia -macrodactylic -macrodactylism -macrodactylous -macrodactyly -macrodiagonal -macrodomatic -macrodome -macrodont -macrodontia -macrodontism -macroelement -macroergate -macroevolution -macrofarad -macrogamete -macrogametocyte -macrogamy -macrogastria -macroglossate -macroglossia -macrognathic -macrognathism -macrognathous -macrogonidium -macrograph -macrographic -macrography -macrolepidoptera -macrolepidopterous -macrology -macromandibular -macromania -macromastia -macromazia -macromelia -macromeral -macromere -macromeric -macromerite -macromeritic -macromesentery -macrometer -macromethod -macromolecule -macromyelon -macromyelonal -macron -macronuclear -macronucleus -macronutrient -macropetalous -macrophage -macrophagocyte -macrophagus -macrophotograph -macrophotography -macrophyllous -macrophysics -macropia -macropinacoid -macropinacoidal -macroplankton -macroplasia -macroplastia -macropleural -macropodia -macropodine -macropodous -macroprism -macroprosopia -macropsia -macropteran -macropterous -macropyramid -macroreaction -macrorhinia -macroscelia -macroscian -macroscopic -macroscopical -macroscopically -macroseism -macroseismic -macroseismograph -macrosepalous -macroseptum -macrosmatic -macrosomatia -macrosomatous -macrosomia -macrosplanchnic -macrosporange -macrosporangium -macrospore -macrosporic -macrosporophore -macrosporophyl -macrosporophyll -macrostomatous -macrostomia -macrostructural -macrostructure -macrostylospore -macrostylous -macrosymbiont -macrothere -macrotherioid -macrotherm -macrotia -macrotin -macrotome -macrotone -macrotous -macrourid -macrozoogonidium -macrozoospore -macrural -macruran -macruroid -macrurous -mactation -mactroid -macuca -macula -macular -maculate -maculated -maculation -macule -maculicole -maculicolous -maculiferous -maculocerebral -maculopapular -maculose -macuta -mad -madam -madame -madapollam -madarosis -madarotic -madbrain -madbrained -madcap -madden -maddening -maddeningly -maddeningness -madder -madderish -madderwort -madding -maddingly -maddish -maddle -made -madefaction -madefy -madeline -madescent -madhouse -madhuca -madid -madidans -madisterium -madling -madly -madman -madnep -madness -mado -madoqua -madrague -madrasah -madreperl -madreporacean -madreporarian -madrepore -madreporian -madreporic -madreporiform -madreporite -madreporitic -madrier -madrigal -madrigaler -madrigaletto -madrigalian -madrigalist -madrona -madship -madstone -maduro -madweed -madwoman -madwort -mae -maeandrine -maeandriniform -maeandrinoid -maeandroid -maegbote -maenad -maenadic -maenadism -maenaite -maestri -maestro -maffia -maffick -mafficker -maffle -mafflin -mafic -mafoo -mafura -mag -magadis -magadize -magani -magas -magazinable -magazinage -magazine -magazinelet -magaziner -magazinette -magazinish -magazinism -magazinist -magaziny -mage -magenta -magged -maggle -maggot -maggotiness -maggotpie -maggoty -magi -magic -magical -magicalize -magically -magicdom -magician -magicianship -magicked -magicking -magiric -magirics -magirist -magiristic -magirological -magirologist -magirology -magister -magisterial -magisteriality -magisterially -magisterialness -magistery -magistracy -magistral -magistrality -magistrally -magistrand -magistrant -magistrate -magistrateship -magistratic -magistratical -magistratically -magistrative -magistrature -magma -magmatic -magnanimity -magnanimous -magnanimously -magnanimousness -magnascope -magnascopic -magnate -magnecrystallic -magnelectric -magneoptic -magnes -magnesia -magnesial -magnesian -magnesic -magnesioferrite -magnesite -magnesium -magnet -magneta -magnetic -magnetical -magnetically -magneticalness -magnetician -magnetics -magnetiferous -magnetification -magnetify -magnetimeter -magnetism -magnetist -magnetite -magnetitic -magnetizability -magnetizable -magnetization -magnetize -magnetizer -magneto -magnetobell -magnetochemical -magnetochemistry -magnetod -magnetodynamo -magnetoelectric -magnetoelectrical -magnetoelectricity -magnetogenerator -magnetogram -magnetograph -magnetographic -magnetoid -magnetomachine -magnetometer -magnetometric -magnetometrical -magnetometrically -magnetometry -magnetomotive -magnetomotor -magneton -magnetooptic -magnetooptical -magnetooptics -magnetophone -magnetophonograph -magnetoplumbite -magnetoprinter -magnetoscope -magnetostriction -magnetotelegraph -magnetotelephone -magnetotherapy -magnetotransmitter -magnetron -magnicaudate -magnicaudatous -magnifiable -magnific -magnifical -magnifically -magnification -magnificative -magnifice -magnificence -magnificent -magnificently -magnificentness -magnifico -magnifier -magnify -magniloquence -magniloquent -magniloquently -magniloquy -magnipotence -magnipotent -magnirostrate -magnisonant -magnitude -magnitudinous -magnochromite -magnoferrite -magnolia -magnoliaceous -magnum -magot -magpie -magpied -magpieish -magsman -maguari -maguey -maha -mahaleb -mahalla -mahant -mahar -maharaja -maharajrana -maharana -maharanee -maharani -maharao -maharawal -maharawat -mahatma -mahatmaism -mahmal -mahmudi -mahoe -mahoganize -mahogany -mahoitre -maholi -maholtine -mahone -mahout -mahseer -mahua -mahuang -maid -maidan -maiden -maidenhair -maidenhead -maidenhood -maidenish -maidenism -maidenlike -maidenliness -maidenly -maidenship -maidenweed -maidhood -maidish -maidism -maidkin -maidlike -maidling -maidservant -maidy -maiefic -maieutic -maieutical -maieutics -maigre -maiid -mail -mailable -mailbag -mailbox -mailclad -mailed -mailer -mailguard -mailie -maillechort -mailless -mailman -mailplane -maim -maimed -maimedly -maimedness -maimer -maimon -main -mainferre -mainlander -mainly -mainmast -mainmortable -mainour -mainpast -mainpernable -mainpernor -mainpin -mainport -mainpost -mainprise -mains -mainsail -mainsheet -mainspring -mainstay -maint -maintain -maintainable -maintainableness -maintainer -maintainment -maintainor -maintenance -maintop -maintopman -maioid -maioidean -mairatour -maire -maisonette -maitlandite -maize -maizebird -maizenic -maizer -majagua -majestic -majestical -majestically -majesticalness -majesticness -majestious -majesty -majestyship -majo -majolica -majolist -majoon -major -majorate -majoration -majorette -majority -majorize -majorship -majuscular -majuscule -makable -make -makebate -makedom -makefast -maker -makeress -makership -makeshift -makeshiftiness -makeshiftness -makeshifty -makeweight -makhzan -maki -makimono -making -makluk -mako -makroskelic -makuk -mal -mala -malaanonang -malabathrum -malacanthid -malacanthine -malaccident -malaceous -malachite -malacia -malacoderm -malacodermatous -malacodermous -malacoid -malacolite -malacological -malacologist -malacology -malacon -malacophilous -malacophonous -malacophyllous -malacopod -malacopodous -malacopterygian -malacopterygious -malacostracan -malacostracology -malacostracous -malactic -maladaptation -maladdress -maladive -maladjust -maladjusted -maladjustive -maladjustment -maladminister -maladministration -maladministrator -maladroit -maladroitly -maladroitness -maladventure -malady -malagma -malaguena -malahack -malaise -malakin -malalignment -malambo -malandered -malanders -malandrous -malanga -malapaho -malapert -malapertly -malapertness -malapi -malapplication -malappointment -malappropriate -malappropriation -malaprop -malapropian -malapropish -malapropism -malapropoism -malapropos -malar -malaria -malarial -malariaproof -malarin -malarioid -malariologist -malariology -malarious -malarkey -malaroma -malarrangement -malasapsap -malassimilation -malassociation -malate -malati -malattress -malax -malaxable -malaxage -malaxate -malaxation -malaxator -malaxerman -malbehavior -malbrouck -malchite -malconceived -malconduct -malconformation -malconstruction -malcontent -malcontented -malcontentedly -malcontentedness -malcontentism -malcontently -malcontentment -malconvenance -malcreated -malcultivation -maldeveloped -maldevelopment -maldigestion -maldirection -maldistribution -maldonite -malduck -male -malease -maleate -maledicent -maledict -malediction -maledictive -maledictory -maleducation -malefaction -malefactor -malefactory -malefactress -malefical -malefically -maleficence -maleficent -maleficial -maleficiate -maleficiation -maleic -maleinoid -malella -maleness -malengine -maleo -maleruption -malesherbiaceous -malevolence -malevolency -malevolent -malevolently -malexecution -malfeasance -malfeasant -malfed -malformation -malformed -malfortune -malfunction -malgovernment -malgrace -malguzar -malguzari -malhonest -malhygiene -mali -malic -malice -maliceful -maliceproof -malicho -malicious -maliciously -maliciousness -malicorium -malidentification -maliferous -maliform -malign -malignance -malignancy -malignant -malignantly -malignation -maligner -malignify -malignity -malignly -malignment -malik -malikadna -malikala -malikana -maline -malines -malinfluence -malinger -malingerer -malingery -malinowskite -malinstitution -malinstruction -malintent -malism -malison -malist -malistic -malkin -mall -malladrite -mallangong -mallard -mallardite -malleability -malleabilization -malleable -malleableize -malleableized -malleableness -malleablize -malleal -mallear -malleate -malleation -mallee -malleiferous -malleiform -mallein -malleinization -malleinize -mallemaroking -mallemuck -malleoincudal -malleolable -malleolar -malleolus -mallet -malleus -mallophagan -mallophagous -malloseismic -mallow -mallowwort -mallum -mallus -malm -malmignatte -malmsey -malmstone -malmy -malnourished -malnourishment -malnutrite -malnutrition -malo -malobservance -malobservation -maloccluded -malocclusion -malodor -malodorant -malodorous -malodorously -malodorousness -malojilla -malonate -malonic -malonyl -malonylurea -maloperation -malorganization -malorganized -malouah -malpais -malpighiaceous -malplaced -malpoise -malposed -malposition -malpractice -malpractioner -malpraxis -malpresentation -malproportion -malproportioned -malpropriety -malpublication -malreasoning -malrotation -malshapen -malt -maltable -maltase -malter -maltha -malthouse -maltiness -malting -maltman -maltobiose -maltodextrin -maltodextrine -maltolte -maltose -maltreat -maltreatment -maltreator -maltster -malturned -maltworm -malty -malunion -malurine -malvaceous -malvasia -malvasian -malversation -malverse -malvoisie -malvolition -mamba -mambo -mameliere -mamelonation -mameluco -mamlatdar -mamma -mammal -mammalgia -mammalian -mammaliferous -mammality -mammalogical -mammalogist -mammalogy -mammary -mammate -mammectomy -mammee -mammer -mammiferous -mammiform -mammilla -mammillaplasty -mammillar -mammillary -mammillate -mammillated -mammillation -mammilliform -mammilloid -mammitis -mammock -mammogen -mammogenic -mammogenically -mammon -mammondom -mammoniacal -mammonish -mammonism -mammonist -mammonistic -mammonite -mammonitish -mammonization -mammonize -mammonolatry -mammoth -mammothrept -mammula -mammular -mammy -mamo -man -mana -manacle -manage -manageability -manageable -manageableness -manageably -managee -manageless -management -managemental -manager -managerdom -manageress -managerial -managerially -managership -managery -manaism -manakin -manal -manas -manatee -manatine -manatoid -manavel -manavelins -manbird -manbot -manche -manchet -manchineel -mancinism -mancipable -mancipant -mancipate -mancipation -mancipative -mancipatory -mancipee -mancipium -manciple -mancipleship -mancipular -mancono -mancus -mand -mandala -mandament -mandamus -mandant -mandarah -mandarin -mandarinate -mandarindom -mandariness -mandarinic -mandarinism -mandarinize -mandarinship -mandatary -mandate -mandatee -mandation -mandative -mandator -mandatorily -mandatory -mandatum -mandelate -mandelic -mandible -mandibula -mandibular -mandibulary -mandibulate -mandibulated -mandibuliform -mandibulohyoid -mandibulomaxillary -mandibulopharyngeal -mandibulosuspensorial -mandil -mandilion -mandola -mandolin -mandolinist -mandolute -mandom -mandora -mandore -mandra -mandragora -mandrake -mandrel -mandriarch -mandrill -mandrin -mandruka -mandua -manducable -manducate -manducation -manducatory -mandyas -mane -maned -manege -manei -maneless -manent -manerial -manes -manesheet -maness -maneuver -maneuverability -maneuverable -maneuverer -maneuvrability -maneuvrable -maney -manful -manfully -manfulness -mang -manga -mangabeira -mangabey -mangal -manganapatite -manganate -manganblende -manganbrucite -manganeisen -manganese -manganesian -manganetic -manganhedenbergite -manganic -manganiferous -manganite -manganium -manganize -manganocalcite -manganocolumbite -manganophyllite -manganosiderite -manganosite -manganostibiite -manganotantalite -manganous -manganpectolite -mange -mangeao -mangel -mangelin -manger -mangerite -mangi -mangily -manginess -mangle -mangleman -mangler -mangling -manglingly -mango -mangona -mangonel -mangonism -mangonization -mangonize -mangosteen -mangrass -mangrate -mangrove -mangue -mangy -manhandle -manhead -manhole -manhood -mani -mania -maniable -maniac -maniacal -maniacally -manic -manicate -manichord -manicole -manicure -manicurist -manid -manienie -manifest -manifestable -manifestant -manifestation -manifestational -manifestationist -manifestative -manifestatively -manifested -manifestedness -manifester -manifestive -manifestly -manifestness -manifesto -manifold -manifolder -manifoldly -manifoldness -manifoldwise -maniform -manify -manikin -manikinism -manila -manilla -manille -manioc -maniple -manipulable -manipular -manipulatable -manipulate -manipulation -manipulative -manipulatively -manipulator -manipulatory -manism -manist -manistic -manito -manitrunk -maniu -manjak -mank -mankeeper -mankin -mankind -manless -manlessly -manlessness -manlet -manlihood -manlike -manlikely -manlikeness -manlily -manliness -manling -manly -manna -mannan -mannequin -manner -mannerable -mannered -mannerhood -mannering -mannerism -mannerist -manneristic -manneristical -manneristically -mannerize -mannerless -mannerlessness -mannerliness -mannerly -manners -mannersome -manness -mannide -mannie -manniferous -mannify -mannikinism -manning -mannish -mannishly -mannishness -mannite -mannitic -mannitol -mannitose -mannoheptite -mannoheptitol -mannoheptose -mannoketoheptose -mannonic -mannosan -mannose -manny -mano -manoc -manograph -manometer -manometric -manometrical -manometry -manomin -manor -manorial -manorialism -manorialize -manorship -manoscope -manostat -manostatic -manque -manred -manrent -manroot -manrope -mansard -mansarded -manscape -manse -manservant -manship -mansion -mansional -mansionary -mansioned -mansioneer -mansionry -manslaughter -manslaughterer -manslaughtering -manslaughterous -manslayer -manslaying -manso -mansonry -manstealer -manstealing -manstopper -manstopping -mansuete -mansuetely -mansuetude -mant -manta -mantal -manteau -mantel -mantelet -manteline -mantelletta -mantellone -mantelpiece -mantelshelf -manteltree -manter -mantes -mantevil -mantic -manticism -manticore -mantid -mantilla -mantis -mantispid -mantissa -mantistic -mantle -mantled -mantlet -mantling -manto -mantoid -mantologist -mantology -mantra -mantrap -mantua -mantuamaker -mantuamaking -manual -manualii -manualism -manualist -manualiter -manually -manuao -manubrial -manubriated -manubrium -manucaption -manucaptor -manucapture -manucode -manucodiata -manuduce -manuduction -manuductor -manuductory -manufactory -manufacturable -manufactural -manufacture -manufacturer -manufacturess -manuka -manul -manuma -manumea -manumisable -manumission -manumissive -manumit -manumitter -manumotive -manurable -manurage -manurance -manure -manureless -manurer -manurial -manurially -manus -manuscript -manuscriptal -manuscription -manuscriptural -manusina -manustupration -manutagi -manward -manwards -manway -manweed -manwise -many -manyberry -manyfold -manyness -manyplies -manyroot -manyways -manywhere -manywise -manzana -manzanilla -manzanillo -manzanita -manzil -mao -maomao -map -mapach -mapau -maphrian -mapland -maple -maplebush -mapo -mappable -mapper -mappist -mappy -mapwise -maquahuitl -maquette -maqui -maquis -mar -marabotin -marabou -marabuto -maraca -maracan -maracock -marae -marajuana -marakapas -maral -maranatha -marang -marantaceous -marantic -marara -mararie -marasca -maraschino -marasmic -marasmoid -marasmous -marasmus -marathon -marathoner -marattiaceous -maraud -marauder -maravedi -marbelize -marble -marbled -marblehead -marbleheader -marblehearted -marbleization -marbleize -marbleizer -marblelike -marbleness -marbler -marbles -marblewood -marbling -marblish -marbly -marbrinus -marc -marcantant -marcasite -marcasitic -marcasitical -marcel -marceline -marcella -marceller -marcello -marcescence -marcescent -marcgraviaceous -march -marchantiaceous -marcher -marchetto -marchioness -marchite -marchland -marchman -marchpane -marcid -marco -marconi -marconigram -marconigraph -marconigraphy -marcor -marcottage -mardy -mare -mareblob -marechal -marekanite -maremma -maremmatic -maremmese -marengo -marennin -marfire -margarate -margaric -margarin -margarine -margarita -margaritaceous -margarite -margaritiferous -margaritomancy -margarodid -margarodite -margarosanite -margay -marge -margeline -margent -margin -marginal -marginalia -marginality -marginalize -marginally -marginate -marginated -margination -margined -marginelliform -marginiform -margining -marginirostral -marginoplasty -margosa -margravate -margrave -margravely -margravial -margraviate -margravine -marguerite -marhala -maria -marialite -maricolous -marid -mariengroschen -marigenous -marigold -marigram -marigraph -marigraphic -marijuana -marikina -marimba -marimonda -marina -marinade -marinate -marinated -marine -mariner -marinheiro -marinist -marinorama -mariola -marionette -mariposite -maris -marish -marishness -maritage -marital -maritality -maritally -mariticidal -mariticide -maritime -maritorious -mariupolite -marjoram -mark -marka -markdown -marked -markedly -markedness -marker -market -marketability -marketable -marketableness -marketably -marketeer -marketer -marketing -marketman -marketstead -marketwise -markfieldite -markhor -marking -markka -markless -markman -markmoot -markshot -marksman -marksmanly -marksmanship -markswoman -markup -markweed -markworthy -marl -marlaceous -marlberry -marled -marler -marli -marlin -marline -marlinespike -marlite -marlitic -marllike -marlock -marlpit -marly -marm -marmalade -marmalady -marmarization -marmarize -marmarosis -marmatite -marmelos -marmennill -marmit -marmite -marmolite -marmoraceous -marmorate -marmorated -marmoration -marmoreal -marmoreally -marmorean -marmoric -marmose -marmoset -marmot -maro -marocain -marok -maroon -marooner -maroquin -marplot -marplotry -marque -marquee -marquess -marquetry -marquis -marquisal -marquisate -marquisdom -marquise -marquisette -marquisina -marquisotte -marquisship -marquito -marranism -marranize -marrano -marree -marrer -marriable -marriage -marriageability -marriageable -marriageableness -marriageproof -married -marrier -marron -marrot -marrow -marrowbone -marrowed -marrowfat -marrowish -marrowless -marrowlike -marrowsky -marrowskyer -marrowy -marry -marryer -marrying -marrymuffe -marseilles -marsh -marshal -marshalate -marshalcy -marshaler -marshaless -marshalman -marshalment -marshalship -marshberry -marshbuck -marshfire -marshflower -marshiness -marshite -marshland -marshlander -marshlike -marshlocks -marshman -marshwort -marshy -marsileaceous -marsipobranch -marsipobranchiate -marsoon -marsupial -marsupialian -marsupialization -marsupialize -marsupian -marsupiate -marsupium -mart -martagon -martel -marteline -martellate -martellato -marten -martensite -martensitic -martext -martial -martialism -martiality -martialization -martialize -martially -martialness -martin -martinet -martineta -martinetish -martinetishness -martinetism -martinetship -martingale -martinico -martinoe -martite -martlet -martyniaceous -martyr -martyrdom -martyress -martyrium -martyrization -martyrize -martyrizer -martyrlike -martyrly -martyrolatry -martyrologic -martyrological -martyrologist -martyrologistic -martyrologium -martyrology -martyrship -martyry -maru -marvel -marvelment -marvelous -marvelously -marvelousness -marvelry -marver -mary -marybud -marysole -marzipan -mas -masa -masaridid -mascagnine -mascagnite -mascally -mascara -mascaron -mascled -mascleless -mascot -mascotism -mascotry -mascularity -masculate -masculation -masculine -masculinely -masculineness -masculinism -masculinist -masculinity -masculinization -masculinize -masculist -masculofeminine -masculonucleus -masculy -masdeu -mash -masha -mashal -mashallah -mashelton -masher -mashie -mashing -mashman -mashru -mashy -masjid -mask -masked -maskelynite -masker -maskette -maskflower -masklike -maskoid -maslin -masochism -masochist -masochistic -mason -masoned -masoner -masonic -masonite -masonry -masonwork -masooka -masoola -masque -masquer -masquerade -masquerader -mass -massa -massacre -massacrer -massage -massager -massageuse -massagist -massaranduba -massasauga -masse -massebah -massecuite -massedly -massedness -massel -masser -masseter -masseteric -masseur -masseuse -massicot -massier -massiest -massif -massily -massiness -massive -massively -massiveness -massivity -masskanne -massless -masslike -massotherapy -massoy -massula -massy -mast -mastaba -mastadenitis -mastadenoma -mastage -mastalgia -mastatrophia -mastatrophy -mastauxe -mastax -mastectomy -masted -master -masterable -masterate -masterdom -masterer -masterful -masterfully -masterfulness -masterhood -masterless -masterlessness -masterlike -masterlily -masterliness -masterling -masterly -masterman -mastermind -masterous -masterpiece -masterproof -mastership -masterwork -masterwort -mastery -mastful -masthead -masthelcosis -mastic -masticability -masticable -masticate -mastication -masticator -masticatory -mastiche -masticic -masticurous -mastiff -mastigate -mastigium -mastigobranchia -mastigobranchial -mastigophoran -mastigophoric -mastigophorous -mastigopod -mastigopodous -mastigote -mastigure -masting -mastitis -mastless -mastlike -mastman -mastocarcinoma -mastoccipital -mastochondroma -mastochondrosis -mastodon -mastodonsaurian -mastodont -mastodontic -mastodontine -mastodontoid -mastodynia -mastoid -mastoidal -mastoidale -mastoideal -mastoidean -mastoidectomy -mastoideocentesis -mastoideosquamous -mastoiditis -mastoidohumeral -mastoidohumeralis -mastoidotomy -mastological -mastologist -mastology -mastomenia -mastoncus -mastooccipital -mastoparietal -mastopathy -mastopexy -mastoplastia -mastorrhagia -mastoscirrhus -mastosquamose -mastotomy -mastotympanic -masturbate -masturbation -masturbational -masturbator -masturbatory -mastwood -masty -masu -masurium -mat -matachin -matachina -mataco -matadero -matador -mataeological -mataeologue -mataeology -matagory -matagouri -matai -matajuelo -matalan -matamata -matamoro -matanza -matapan -matapi -matara -matax -matboard -match -matchable -matchableness -matchably -matchboard -matchboarding -matchbook -matchbox -matchcloth -matchcoat -matcher -matching -matchless -matchlessly -matchlessness -matchlock -matchmaker -matchmaking -matchmark -matchsafe -matchstick -matchwood -matchy -mate -mategriffon -matehood -mateless -matelessness -matelote -mately -mater -materfamilias -material -materialism -materialist -materialistic -materialistical -materialistically -materiality -materialization -materialize -materializee -materializer -materially -materialman -materialness -materiate -materiation -materiel -maternal -maternality -maternalize -maternally -maternalness -maternity -maternology -mateship -matey -matezite -matfelon -matgrass -math -mathematic -mathematical -mathematically -mathematicals -mathematician -mathematicize -mathematics -mathematize -mathemeg -mathes -mathesis -mathetic -matico -matildite -matin -matinal -matinee -mating -matins -matipo -matka -matless -matlockite -matlow -matmaker -matmaking -matra -matral -matranee -matrass -matreed -matriarch -matriarchal -matriarchalism -matriarchate -matriarchic -matriarchist -matriarchy -matric -matrical -matrices -matricidal -matricide -matricula -matriculable -matriculant -matricular -matriculate -matriculation -matriculator -matriculatory -matriheritage -matriherital -matrilineal -matrilineally -matrilinear -matrilinearism -matriliny -matrilocal -matrimonial -matrimonially -matrimonious -matrimoniously -matrimony -matriotism -matripotestal -matris -matrix -matroclinic -matroclinous -matrocliny -matron -matronage -matronal -matronhood -matronism -matronize -matronlike -matronliness -matronly -matronship -matronymic -matross -matsu -matsuri -matta -mattamore -mattaro -mattboard -matte -matted -mattedly -mattedness -matter -matterate -matterative -matterful -matterfulness -matterless -mattery -matti -matting -mattock -mattoid -mattoir -mattress -mattulla -maturable -maturate -maturation -maturative -mature -maturely -maturement -matureness -maturer -maturescence -maturescent -maturing -maturish -maturity -matutinal -matutinally -matutinary -matutine -matutinely -matweed -maty -matzo -matzoon -matzos -matzoth -mau -maucherite -maud -maudle -maudlin -maudlinism -maudlinize -maudlinly -maudlinwort -mauger -maugh -maul -mauler -mauley -mauling -maulstick -maumet -maumetry -maun -maund -maunder -maunderer -maundful -maundy -maunge -mausolea -mausoleal -mausolean -mausoleum -mauther -mauve -mauveine -mauvette -mauvine -maux -maverick -mavis -mavournin -mavrodaphne -maw -mawbound -mawk -mawkish -mawkishly -mawkishness -mawky -mawp -maxilla -maxillar -maxillary -maxilliferous -maxilliform -maxilliped -maxillipedary -maxillodental -maxillofacial -maxillojugal -maxillolabial -maxillomandibular -maxillopalatal -maxillopalatine -maxillopharyngeal -maxillopremaxillary -maxilloturbinal -maxillozygomatic -maxim -maxima -maximal -maximally -maximate -maximation -maximed -maximist -maximistic -maximite -maximization -maximize -maximizer -maximum -maximus -maxixe -maxwell -may -maya -mayacaceous -maybe -maybush -maycock -mayday -mayfish -mayhap -mayhappen -mayhem -maynt -mayonnaise -mayor -mayoral -mayoralty -mayoress -mayorship -maypop -maysin -mayten -mayweed -maza -mazalgia -mazame -mazapilite -mazard -mazarine -maze -mazed -mazedly -mazedness -mazeful -mazement -mazer -mazic -mazily -maziness -mazocacothesis -mazodynia -mazolysis -mazolytic -mazopathia -mazopathic -mazopexy -mazuca -mazuma -mazurka -mazut -mazy -mazzard -mbalolo -mbori -me -meable -meaching -mead -meader -meadow -meadowbur -meadowed -meadower -meadowing -meadowink -meadowland -meadowless -meadowsweet -meadowwort -meadowy -meadsman -meager -meagerly -meagerness -meagre -meak -meal -mealable -mealberry -mealer -mealies -mealily -mealiness -mealless -mealman -mealmonger -mealmouth -mealmouthed -mealproof -mealtime -mealy -mealymouth -mealymouthed -mealymouthedly -mealymouthedness -mealywing -mean -meander -meanderingly -meandrine -meandriniform -meandrite -meandrous -meaned -meaner -meaning -meaningful -meaningfully -meaningless -meaninglessly -meaninglessness -meaningly -meaningness -meanish -meanly -meanness -meant -meantone -meanwhile -mease -measle -measled -measledness -measles -measlesproof -measly -measondue -measurability -measurable -measurableness -measurably -measuration -measure -measured -measuredly -measuredness -measureless -measurelessly -measurelessness -measurely -measurement -measurer -measuring -meat -meatal -meatbird -meatcutter -meated -meathook -meatily -meatiness -meatless -meatman -meatometer -meatorrhaphy -meatoscope -meatoscopy -meatotome -meatotomy -meatus -meatworks -meaty -mecate -mechanal -mechanality -mechanalize -mechanic -mechanical -mechanicalism -mechanicalist -mechanicality -mechanicalization -mechanicalize -mechanically -mechanicalness -mechanician -mechanicochemical -mechanicocorpuscular -mechanicointellectual -mechanicotherapy -mechanics -mechanism -mechanist -mechanistic -mechanistically -mechanization -mechanize -mechanizer -mechanolater -mechanology -mechanomorphic -mechanomorphism -mechanotherapeutic -mechanotherapeutics -mechanotherapist -mechanotherapy -mechoacan -meckelectomy -mecodont -mecometer -mecometry -mecon -meconic -meconidium -meconin -meconioid -meconium -meconology -meconophagism -meconophagist -mecopteran -mecopteron -mecopterous -medal -medaled -medalet -medalist -medalize -medallary -medallic -medallically -medallion -medallionist -meddle -meddlecome -meddlement -meddler -meddlesome -meddlesomely -meddlesomeness -meddling -meddlingly -media -mediacid -mediacy -mediad -mediaevalize -mediaevally -medial -medialization -medialize -medialkaline -medially -median -medianic -medianimic -medianimity -medianism -medianity -medianly -mediant -mediastinal -mediastine -mediastinitis -mediastinotomy -mediastinum -mediate -mediately -mediateness -mediating -mediatingly -mediation -mediative -mediatization -mediatize -mediator -mediatorial -mediatorialism -mediatorially -mediatorship -mediatory -mediatress -mediatrice -mediatrix -medic -medicable -medical -medically -medicament -medicamental -medicamentally -medicamentary -medicamentation -medicamentous -medicaster -medicate -medication -medicative -medicator -medicatory -medicinable -medicinableness -medicinal -medicinally -medicinalness -medicine -medicinelike -medicinemonger -mediciner -medico -medicobotanical -medicochirurgic -medicochirurgical -medicodental -medicolegal -medicolegally -medicomania -medicomechanic -medicomechanical -medicomoral -medicophysical -medicopsychological -medicopsychology -medicostatistic -medicosurgical -medicotopographic -medicozoologic -mediety -medieval -medievalism -medievalist -medievalistic -medievalize -medievally -medifixed -mediglacial -medimn -medimno -medimnos -medimnus -medino -medio -medioanterior -mediocarpal -medioccipital -mediocre -mediocrist -mediocrity -mediocubital -mediodepressed -mediodigital -mediodorsal -mediodorsally -mediofrontal -mediolateral -mediopalatal -mediopalatine -mediopassive -mediopectoral -medioperforate -mediopontine -medioposterior -mediosilicic -mediostapedial -mediotarsal -medioventral -medisance -medisect -medisection -meditant -meditate -meditating -meditatingly -meditation -meditationist -meditatist -meditative -meditatively -meditativeness -meditator -mediterranean -mediterraneous -medithorax -meditullium -medium -mediumism -mediumistic -mediumization -mediumize -mediumship -medius -medjidie -medlar -medley -medregal -medrick -medrinaque -medulla -medullar -medullary -medullate -medullated -medullation -medullispinal -medullitis -medullization -medullose -medusal -medusalike -medusan -medusiferous -medusiform -medusoid -meebos -meece -meed -meedless -meek -meeken -meekhearted -meekheartedness -meekling -meekly -meekness -meered -meerkat -meerschaum -meese -meet -meetable -meeten -meeter -meeterly -meethelp -meethelper -meeting -meetinger -meetinghouse -meetly -meetness -megabar -megacephalia -megacephalic -megacephaly -megacerine -megacerotine -megachilid -megachiropteran -megachiropterous -megacolon -megacosm -megacoulomb -megacycle -megadont -megadynamics -megadyne -megaerg -megafarad -megafog -megagamete -megagametophyte -megajoule -megakaryocyte -megaleme -megalerg -megalesthete -megalethoscope -megalith -megalithic -megaloblast -megaloblastic -megalocardia -megalocarpous -megalocephalia -megalocephalic -megalocephalous -megalocephaly -megalochirous -megalocornea -megalocyte -megalocytosis -megalodactylia -megalodactylism -megalodactylous -megalodont -megalodontia -megaloenteron -megalogastria -megaloglossia -megalograph -megalography -megalohepatia -megalokaryocyte -megalomania -megalomaniac -megalomaniacal -megalomelia -megalopa -megalopenis -megalophonic -megalophonous -megalophthalmus -megalopia -megalopic -megalopine -megaloplastocyte -megalopolis -megalopolitan -megalopolitanism -megalopore -megalops -megalopsia -megalosaur -megalosaurian -megalosauroid -megaloscope -megaloscopy -megalosphere -megalospheric -megalosplenia -megalosyndactyly -megaloureter -megamastictoral -megamere -megameter -megampere -meganucleus -megaparsec -megaphone -megaphonic -megaphotographic -megaphotography -megaphyllous -megapod -megapode -megaprosopous -megapterine -megaron -megasclere -megascleric -megasclerous -megasclerum -megascope -megascopic -megascopical -megascopically -megaseism -megaseismic -megaseme -megasporange -megasporangium -megaspore -megasporic -megasporophyll -megasynthetic -megathere -megatherian -megatherine -megatherioid -megatherm -megathermic -megatheroid -megaton -megatype -megatypy -megavolt -megawatt -megaweber -megazooid -megazoospore -megerg -megilp -megmho -megohm -megohmit -megohmmeter -megophthalmus -megotalc -megrim -megrimish -mehalla -mehari -meharist -mehmandar -mehtar -mehtarship -meile -mein -meinie -meio -meiobar -meionite -meiophylly -meiosis -meiotaxy -meiotic -meith -meizoseismal -meizoseismic -mejorana -mekometer -mel -mela -melaconite -melada -meladiorite -melagabbro -melagra -melagranite -melalgia -melam -melamed -melamine -melampodium -melampyritol -melanagogal -melanagogue -melancholia -melancholiac -melancholic -melancholically -melancholily -melancholiness -melancholious -melancholiously -melancholiousness -melancholish -melancholist -melancholize -melancholomaniac -melancholy -melancholyish -melanconiaceous -melanemia -melanemic -melange -melanger -melangeur -melanian -melanic -melaniferous -melanilin -melaniline -melanin -melanism -melanistic -melanite -melanitic -melanize -melano -melanoblast -melanocarcinoma -melanocerite -melanochroite -melanochroous -melanocomous -melanocrate -melanocratic -melanocyte -melanoderma -melanodermia -melanodermic -melanogen -melanoid -melanoidin -melanoma -melanopathia -melanopathy -melanophore -melanoplakia -melanorrhagia -melanorrhea -melanosarcoma -melanosarcomatosis -melanoscope -melanose -melanosed -melanosis -melanosity -melanospermous -melanotekite -melanotic -melanotrichous -melanous -melanterite -melanthaceous -melanure -melanuresis -melanuria -melanuric -melaphyre -melasma -melasmic -melassigenic -melastomaceous -melastomad -melatope -melaxuma -melch -meld -melder -meldometer -meldrop -mele -meleagrine -melebiose -melee -melena -melene -melenic -melezitase -melezitose -meliaceous -melianthaceous -meliatin -melibiose -melic -melicera -meliceric -meliceris -melicerous -melichrous -melicitose -melicraton -melilite -melilitite -melilot -meline -melinite -meliorability -meliorable -meliorant -meliorate -meliorater -melioration -meliorative -meliorator -meliorism -meliorist -melioristic -meliority -meliphagan -meliphagidan -meliphagous -meliphanite -meliponine -melisma -melismatic -melismatics -melissyl -melissylic -melitemia -melithemia -melitis -melitose -melitriose -melittologist -melittology -melituria -melituric -mell -mellaginous -mellate -mellay -melleous -meller -melliferous -mellificate -mellification -mellifluence -mellifluent -mellifluently -mellifluous -mellifluously -mellifluousness -mellimide -mellisonant -mellisugent -mellit -mellitate -mellite -mellitic -mellivorous -mellon -mellonides -mellophone -mellow -mellowly -mellowness -mellowy -mellsman -melocoton -melodeon -melodia -melodial -melodially -melodic -melodica -melodically -melodicon -melodics -melodiograph -melodion -melodious -melodiously -melodiousness -melodism -melodist -melodize -melodizer -melodram -melodrama -melodramatic -melodramatical -melodramatically -melodramaticism -melodramatics -melodramatist -melodramatize -melodrame -melody -melodyless -meloe -melogram -melograph -melographic -meloid -melologue -melolonthidan -melolonthine -melomane -melomania -melomaniac -melomanic -melon -meloncus -melongena -melongrower -melonist -melonite -melonlike -melonmonger -melonry -melophone -melophonic -melophonist -melopiano -meloplast -meloplastic -meloplasty -melopoeia -melopoeic -melos -melosa -melotragedy -melotragic -melotrope -melt -meltability -meltable -meltage -melted -meltedness -melteigite -melter -melters -melting -meltingly -meltingness -melton -mem -member -membered -memberless -membership -membracid -membracine -membral -membrally -membrana -membranaceous -membranaceously -membranate -membrane -membraned -membraneless -membranelike -membranelle -membraneous -membraniferous -membraniform -membranin -membranocalcareous -membranocartilaginous -membranocoriaceous -membranocorneous -membranogenic -membranoid -membranology -membranonervous -membranosis -membranous -membranously -membranula -membranule -membretto -memento -meminna -memo -memoir -memoirism -memoirist -memorabilia -memorability -memorable -memorableness -memorably -memoranda -memorandist -memorandize -memorandum -memorative -memoria -memorial -memorialist -memorialization -memorialize -memorializer -memorially -memoried -memorious -memorist -memorizable -memorization -memorize -memorizer -memory -memoryless -men -menaccanite -menaccanitic -menace -menaceable -menaceful -menacement -menacer -menacing -menacingly -menacme -menadione -menage -menagerie -menagerist -menald -menarche -mend -mendable -mendacious -mendaciously -mendaciousness -mendacity -mendee -mendelyeevite -mender -mendicancy -mendicant -mendicate -mendication -mendicity -mending -mendipite -mendole -mendozite -mends -meneghinite -menfolk -meng -menhaden -menhir -menial -menialism -meniality -menially -menilite -meningeal -meninges -meningic -meningina -meningism -meningitic -meningitis -meningocele -meningocephalitis -meningocerebritis -meningococcal -meningococcemia -meningococcic -meningococcus -meningocortical -meningoencephalitis -meningoencephalocele -meningomalacia -meningomyclitic -meningomyelitis -meningomyelocele -meningomyelorrhaphy -meningorachidian -meningoradicular -meningorhachidian -meningorrhagia -meningorrhea -meningorrhoea -meningosis -meningospinal -meningotyphoid -meninting -meninx -meniscal -meniscate -menisciform -meniscitis -meniscoid -meniscoidal -meniscus -menisperm -menispermaceous -menispermine -menkind -mennom -menognath -menognathous -menologium -menology -menometastasis -menopausal -menopause -menopausic -menophania -menoplania -menorhynchous -menorrhagia -menorrhagic -menorrhagy -menorrhea -menorrheic -menorrhoea -menorrhoeic -menoschesis -menoschetic -menosepsis -menostasia -menostasis -menostatic -menostaxis -menotyphlic -menoxenia -mensa -mensal -mensalize -mense -menseful -menseless -menses -mensk -menstrual -menstruant -menstruate -menstruation -menstruous -menstruousness -menstruum -mensual -mensurability -mensurable -mensurableness -mensurably -mensural -mensuralist -mensurate -mensuration -mensurational -mensurative -mentagra -mental -mentalis -mentalism -mentalist -mentalistic -mentality -mentalization -mentalize -mentally -mentary -mentation -menthaceous -menthadiene -menthane -menthene -menthenol -menthenone -menthol -mentholated -menthone -menthyl -menticide -menticultural -menticulture -mentiferous -mentiform -mentigerous -mentimeter -mentimutation -mention -mentionability -mentionable -mentionless -mentoanterior -mentobregmatic -mentocondylial -mentohyoid -mentolabial -mentomeckelian -mentonniere -mentoposterior -mentor -mentorial -mentorism -mentorship -mentum -menu -meny -menyie -menzie -mephitic -mephitical -mephitine -mephitis -mephitism -meralgia -meraline -merbaby -mercal -mercantile -mercantilely -mercantilism -mercantilist -mercantilistic -mercantility -mercaptal -mercaptan -mercaptides -mercaptids -mercapto -mercaptol -mercaptole -mercatorial -mercenarily -mercenariness -mercenary -mercer -merceress -mercerization -mercerize -mercerizer -mercership -mercery -merch -merchandisable -merchandise -merchandiser -merchant -merchantable -merchantableness -merchanter -merchanthood -merchantish -merchantlike -merchantly -merchantman -merchantry -merchantship -merchet -merciful -mercifully -mercifulness -merciless -mercilessly -mercilessness -merciment -mercurate -mercuration -mercurial -mercurialism -mercuriality -mercurialization -mercurialize -mercurially -mercurialness -mercuriamines -mercuriammonium -mercuriate -mercuric -mercuride -mercurification -mercurify -mercurization -mercurize -mercurophen -mercurous -mercy -mercyproof -merdivorous -mere -merel -merely -merenchyma -merenchymatous -meresman -merestone -meretricious -meretriciously -meretriciousness -meretrix -merfold -merfolk -merganser -merge -mergence -merger -mergh -meriah -mericarp -merice -meridian -meridional -meridionality -meridionally -meril -meringue -meringued -meriquinoid -meriquinoidal -meriquinone -meriquinonic -meriquinonoid -merism -merismatic -merismoid -merist -meristele -meristelic -meristem -meristematic -meristematically -meristic -meristically -meristogenous -merit -meritable -merited -meritedly -meriter -meritful -meritless -meritmonger -meritmongering -meritmongery -meritorious -meritoriously -meritoriousness -merk -merkhet -merkin -merl -merle -merlette -merlin -merlon -mermaid -mermaiden -merman -mermithaner -mermithergate -mermithization -mermithized -mermithogyne -mermother -mero -meroblastic -meroblastically -merocele -merocelic -merocerite -meroceritic -merocrystalline -merocyte -merogamy -merogastrula -merogenesis -merogenetic -merogenic -merognathite -merogonic -merogony -merohedral -merohedric -merohedrism -meroistic -meromorphic -meromyarian -merop -meropia -meropidan -meroplankton -meroplanktonic -meropodite -meropoditic -merorganization -merorganize -meros -merosomal -merosomatous -merosome -merosthenic -merostomatous -merostome -merostomous -merosymmetrical -merosymmetry -merosystematic -merotomize -merotomy -merotropism -merotropy -meroxene -merozoite -merpeople -merribauks -merribush -merriless -merrily -merriment -merriness -merrow -merry -merrymake -merrymaker -merrymaking -merryman -merrymeeting -merrythought -merrytrotter -merrywing -merse -meruline -merulioid -merveileux -merwinite -merwoman -merycism -merycismus -mesa -mesabite -mesaconate -mesaconic -mesad -mesadenia -mesail -mesal -mesalike -mesally -mesameboid -mesange -mesaortitis -mesaraic -mesaraical -mesarch -mesarteritic -mesarteritis -mesaticephal -mesaticephali -mesaticephalic -mesaticephalism -mesaticephalous -mesaticephaly -mesatipellic -mesatipelvic -mesatiskelic -mesaxonic -mescal -mescaline -mescalism -mesdames -mese -mesectoderm -mesem -mesembryo -mesembryonic -mesencephalic -mesencephalon -mesenchyma -mesenchymal -mesenchymatal -mesenchymatic -mesenchymatous -mesenchyme -mesendoderm -mesenna -mesenterial -mesenteric -mesenterical -mesenterically -mesenteriform -mesenteriolum -mesenteritic -mesenteritis -mesenteron -mesenteronic -mesentery -mesentoderm -mesepimeral -mesepimeron -mesepisternal -mesepisternum -mesepithelial -mesepithelium -mesethmoid -mesethmoidal -mesh -meshed -meshrabiyeh -meshwork -meshy -mesiad -mesial -mesially -mesian -mesic -mesically -mesilla -mesiobuccal -mesiocervical -mesioclusion -mesiodistal -mesiodistally -mesiogingival -mesioincisal -mesiolabial -mesiolingual -mesion -mesioocclusal -mesiopulpal -mesioversion -mesitite -mesityl -mesitylene -mesitylenic -mesmerian -mesmeric -mesmerical -mesmerically -mesmerism -mesmerist -mesmerite -mesmerizability -mesmerizable -mesmerization -mesmerize -mesmerizee -mesmerizer -mesmeromania -mesmeromaniac -mesnality -mesnalty -mesne -meso -mesoappendicitis -mesoappendix -mesoarial -mesoarium -mesobar -mesobenthos -mesoblast -mesoblastema -mesoblastemic -mesoblastic -mesobranchial -mesobregmate -mesocaecal -mesocaecum -mesocardia -mesocardium -mesocarp -mesocentrous -mesocephal -mesocephalic -mesocephalism -mesocephalon -mesocephalous -mesocephaly -mesochilium -mesochondrium -mesochroic -mesocoele -mesocoelian -mesocoelic -mesocolic -mesocolon -mesocoracoid -mesocranial -mesocratic -mesocuneiform -mesode -mesoderm -mesodermal -mesodermic -mesodic -mesodisilicic -mesodont -mesofurca -mesofurcal -mesogaster -mesogastral -mesogastric -mesogastrium -mesogloea -mesogloeal -mesognathic -mesognathion -mesognathism -mesognathous -mesognathy -mesogyrate -mesohepar -mesokurtic -mesolabe -mesole -mesolecithal -mesolimnion -mesolite -mesolithic -mesologic -mesological -mesology -mesomere -mesomeric -mesomerism -mesometral -mesometric -mesometrium -mesomorph -mesomorphic -mesomorphous -mesomorphy -mesomyodian -mesomyodous -meson -mesonasal -mesonephric -mesonephridium -mesonephritic -mesonephros -mesonic -mesonotal -mesonotum -mesoparapteral -mesoparapteron -mesopectus -mesoperiodic -mesopetalum -mesophile -mesophilic -mesophilous -mesophragm -mesophragma -mesophragmal -mesophryon -mesophyll -mesophyllous -mesophyllum -mesophyte -mesophytic -mesophytism -mesopic -mesoplankton -mesoplanktonic -mesoplast -mesoplastic -mesoplastral -mesoplastron -mesopleural -mesopleuron -mesoplodont -mesopodial -mesopodiale -mesopodium -mesopotamia -mesopotamic -mesoprescutal -mesoprescutum -mesoprosopic -mesopterygial -mesopterygium -mesopterygoid -mesorchial -mesorchium -mesorectal -mesorectum -mesorrhin -mesorrhinal -mesorrhinian -mesorrhinism -mesorrhinium -mesorrhiny -mesosalpinx -mesosaur -mesoscapula -mesoscapular -mesoscutal -mesoscutellar -mesoscutellum -mesoscutum -mesoseismal -mesoseme -mesosiderite -mesosigmoid -mesoskelic -mesosoma -mesosomatic -mesosome -mesosperm -mesospore -mesosporic -mesosporium -mesostasis -mesosternal -mesosternebra -mesosternebral -mesosternum -mesostethium -mesostomid -mesostyle -mesostylous -mesosuchian -mesotarsal -mesotartaric -mesothelial -mesothelium -mesotherm -mesothermal -mesothesis -mesothet -mesothetic -mesothetical -mesothoracic -mesothoracotheca -mesothorax -mesothorium -mesotonic -mesotroch -mesotrocha -mesotrochal -mesotrochous -mesotron -mesotropic -mesotympanic -mesotype -mesovarian -mesovarium -mesoventral -mesoventrally -mesoxalate -mesoxalic -mesoxalyl -mesozoan -mespil -mesquite -mess -message -messagery -messaline -messan -messe -messelite -messenger -messengership -messer -messet -messianically -messieurs -messily -messin -messiness -messing -messman -messmate -messor -messroom -messrs -messtin -messuage -messy -mestee -mester -mestiza -mestizo -mestome -mesymnion -met -meta -metabasis -metabasite -metabatic -metabiological -metabiology -metabiosis -metabiotic -metabiotically -metabismuthic -metabisulphite -metabletic -metabola -metabole -metabolian -metabolic -metabolism -metabolite -metabolizable -metabolize -metabolon -metabolous -metaboly -metaborate -metaboric -metabranchial -metabrushite -metabular -metacarpal -metacarpale -metacarpophalangeal -metacarpus -metacenter -metacentral -metacentric -metacentricity -metachemic -metachemistry -metachlamydeous -metachromasis -metachromatic -metachromatin -metachromatinic -metachromatism -metachrome -metachronism -metachrosis -metacinnabarite -metacism -metacismus -metaclase -metacneme -metacoele -metacoelia -metaconal -metacone -metaconid -metaconule -metacoracoid -metacrasis -metacresol -metacromial -metacromion -metacryst -metacyclic -metacymene -metad -metadiabase -metadiazine -metadiorite -metadiscoidal -metadromous -metafluidal -metaformaldehyde -metafulminuric -metagalactic -metagalaxy -metagaster -metagastric -metagastrula -metage -metagelatin -metagenesis -metagenetic -metagenetically -metagenic -metageometer -metageometrical -metageometry -metagnath -metagnathism -metagnathous -metagnomy -metagnostic -metagnosticism -metagram -metagrammatism -metagrammatize -metagraphic -metagraphy -metahewettite -metahydroxide -metaigneous -metainfective -metakinesis -metakinetic -metal -metalammonium -metalanguage -metalbumin -metalcraft -metaldehyde -metalepsis -metaleptic -metaleptical -metaleptically -metaler -metaline -metalined -metaling -metalinguistic -metalinguistics -metalism -metalist -metalization -metalize -metallary -metalleity -metallic -metallical -metallically -metallicity -metallicize -metallicly -metallics -metallide -metallifacture -metalliferous -metallification -metalliform -metallify -metallik -metalline -metallism -metallization -metallize -metallochrome -metallochromy -metallogenetic -metallogenic -metallogeny -metallograph -metallographer -metallographic -metallographical -metallographist -metallography -metalloid -metalloidal -metallometer -metallophone -metalloplastic -metallorganic -metallotherapeutic -metallotherapy -metallurgic -metallurgical -metallurgically -metallurgist -metallurgy -metalmonger -metalogic -metalogical -metaloph -metalorganic -metaloscope -metaloscopy -metaluminate -metaluminic -metalware -metalwork -metalworker -metalworking -metalworks -metamathematical -metamathematics -metamer -metameral -metamere -metameric -metamerically -metameride -metamerism -metamerization -metamerized -metamerous -metamery -metamorphic -metamorphism -metamorphize -metamorphopsia -metamorphopsy -metamorphosable -metamorphose -metamorphoser -metamorphoses -metamorphosian -metamorphosic -metamorphosical -metamorphosis -metamorphostical -metamorphotic -metamorphous -metamorphy -metanalysis -metanauplius -metanephric -metanephritic -metanephron -metanephros -metanepionic -metanilic -metanitroaniline -metanomen -metanotal -metanotum -metantimonate -metantimonic -metantimonious -metantimonite -metantimonous -metanym -metaorganism -metaparapteral -metaparapteron -metapectic -metapectus -metapepsis -metapeptone -metaperiodic -metaphase -metaphenomenal -metaphenomenon -metaphenylene -metaphenylenediamin -metaphenylenediamine -metaphloem -metaphonical -metaphonize -metaphony -metaphor -metaphoric -metaphorical -metaphorically -metaphoricalness -metaphorist -metaphorize -metaphosphate -metaphosphoric -metaphosphorous -metaphragm -metaphragmal -metaphrase -metaphrasis -metaphrast -metaphrastic -metaphrastical -metaphrastically -metaphyseal -metaphysic -metaphysical -metaphysically -metaphysician -metaphysicianism -metaphysicist -metaphysicize -metaphysicous -metaphysics -metaphysis -metaphyte -metaphytic -metaphyton -metaplasia -metaplasis -metaplasm -metaplasmic -metaplast -metaplastic -metapleural -metapleure -metapleuron -metaplumbate -metaplumbic -metapneumonic -metapneustic -metapodial -metapodiale -metapodium -metapolitic -metapolitical -metapolitician -metapolitics -metapophyseal -metapophysial -metapophysis -metapore -metapostscutellar -metapostscutellum -metaprescutal -metaprescutum -metaprotein -metapsychic -metapsychical -metapsychics -metapsychism -metapsychist -metapsychological -metapsychology -metapsychosis -metapterygial -metapterygium -metapterygoid -metarabic -metarhyolite -metarossite -metarsenic -metarsenious -metarsenite -metasaccharinic -metascutal -metascutellar -metascutellum -metascutum -metasedimentary -metasilicate -metasilicic -metasoma -metasomal -metasomasis -metasomatic -metasomatism -metasomatosis -metasome -metasperm -metaspermic -metaspermous -metastability -metastable -metastannate -metastannic -metastasis -metastasize -metastatic -metastatical -metastatically -metasternal -metasternum -metasthenic -metastibnite -metastigmate -metastoma -metastome -metastrophe -metastrophic -metastyle -metatantalic -metatarsal -metatarsale -metatarse -metatarsophalangeal -metatarsus -metatatic -metatatically -metataxic -metate -metathalamus -metatheology -metatherian -metatheses -metathesis -metathetic -metathetical -metathetically -metathoracic -metathorax -metatitanate -metatitanic -metatoluic -metatoluidine -metatracheal -metatrophic -metatungstic -metatype -metatypic -metavanadate -metavanadic -metavauxite -metavoltine -metaxenia -metaxite -metaxylem -metaxylene -metayer -metazoal -metazoan -metazoea -metazoic -metazoon -mete -metel -metempiric -metempirical -metempirically -metempiricism -metempiricist -metempirics -metempsychic -metempsychosal -metempsychose -metempsychoses -metempsychosical -metempsychosis -metempsychosize -metemptosis -metencephalic -metencephalon -metensarcosis -metensomatosis -metenteron -metenteronic -meteogram -meteograph -meteor -meteorgraph -meteoric -meteorical -meteorically -meteorism -meteorist -meteoristic -meteorital -meteorite -meteoritic -meteoritics -meteorization -meteorize -meteorlike -meteorogram -meteorograph -meteorographic -meteorography -meteoroid -meteoroidal -meteorolite -meteorolitic -meteorologic -meteorological -meteorologically -meteorologist -meteorology -meteorometer -meteoroscope -meteoroscopy -meteorous -metepencephalic -metepencephalon -metepimeral -metepimeron -metepisternal -metepisternum -meter -meterage -metergram -meterless -meterman -metership -metestick -metewand -meteyard -methacrylate -methacrylic -methadone -methanal -methanate -methane -methanoic -methanolysis -methanometer -metheglin -methemoglobin -methemoglobinemia -methemoglobinuria -methenamine -methene -methenyl -mether -methid -methide -methine -methinks -methiodide -methionic -methionine -methobromide -method -methodaster -methodeutic -methodic -methodical -methodically -methodicalness -methodics -methodism -methodist -methodization -methodize -methodizer -methodless -methodological -methodologically -methodologist -methodology -methought -methoxide -methoxychlor -methoxyl -methronic -methyl -methylacetanilide -methylal -methylamine -methylaniline -methylanthracene -methylate -methylation -methylator -methylcholanthrene -methylene -methylenimine -methylenitan -methylethylacetic -methylglycine -methylglycocoll -methylglyoxal -methylic -methylmalonic -methylnaphthalene -methylol -methylolurea -methylosis -methylotic -methylpentose -methylpentoses -methylpropane -methylsulfanol -metic -meticulosity -meticulous -meticulously -meticulousness -metier -metis -metochous -metochy -metoestrous -metoestrum -metonym -metonymic -metonymical -metonymically -metonymous -metonymously -metonymy -metope -metopic -metopion -metopism -metopomancy -metopon -metoposcopic -metoposcopical -metoposcopist -metoposcopy -metosteal -metosteon -metoxazine -metoxenous -metoxeny -metra -metralgia -metranate -metranemia -metratonia -metrectasia -metrectatic -metrectomy -metrectopia -metrectopic -metrectopy -metreless -metreship -metreta -metrete -metretes -metria -metric -metrical -metrically -metrician -metricism -metricist -metricize -metrics -metrification -metrifier -metrify -metriocephalic -metrist -metritis -metrocampsis -metrocarat -metrocarcinoma -metrocele -metroclyst -metrocolpocele -metrocracy -metrocratic -metrocystosis -metrodynia -metrofibroma -metrological -metrologist -metrologue -metrology -metrolymphangitis -metromalacia -metromalacoma -metromalacosis -metromania -metromaniac -metromaniacal -metrometer -metroneuria -metronome -metronomic -metronomical -metronomically -metronymic -metronymy -metroparalysis -metropathia -metropathic -metropathy -metroperitonitis -metrophlebitis -metrophotography -metropole -metropolis -metropolitan -metropolitanate -metropolitancy -metropolitanism -metropolitanize -metropolitanship -metropolite -metropolitic -metropolitical -metropolitically -metroptosia -metroptosis -metroradioscope -metrorrhagia -metrorrhagic -metrorrhea -metrorrhexis -metrorthosis -metrosalpingitis -metrosalpinx -metroscirrhus -metroscope -metroscopy -metrostaxis -metrostenosis -metrosteresis -metrostyle -metrosynizesis -metrotherapist -metrotherapy -metrotome -metrotomy -mettar -mettle -mettled -mettlesome -mettlesomely -mettlesomeness -metusia -metze -meuse -meute -mew -meward -mewer -mewl -mewler -meyerhofferite -mezcal -mezereon -mezereum -mezuzah -mezzanine -mezzo -mezzograph -mezzotint -mezzotinter -mezzotinto -mho -mhometer -mi -miamia -mian -miaow -miaower -miargyrite -miarolitic -mias -miaskite -miasm -miasma -miasmal -miasmata -miasmatic -miasmatical -miasmatically -miasmatize -miasmatology -miasmatous -miasmic -miasmology -miasmous -miaul -miauler -mib -mica -micaceous -micacious -micacite -micasization -micasize -micate -mication -mice -micellar -micelle -miche -micher -michigan -miching -micht -mick -mickle -mico -miconcave -micramock -micranatomy -micrander -micrandrous -micraner -micranthropos -micrencephalia -micrencephalic -micrencephalous -micrencephalus -micrencephaly -micrergate -micresthete -micrify -micro -microammeter -microampere -microanalysis -microanalyst -microanalytical -microangstrom -microapparatus -microbal -microbalance -microbar -microbarograph -microbattery -microbe -microbeless -microbeproof -microbial -microbian -microbic -microbicidal -microbicide -microbiologic -microbiological -microbiologically -microbiologist -microbiology -microbion -microbiosis -microbiota -microbiotic -microbious -microbism -microbium -microblast -microblepharia -microblepharism -microblephary -microbrachia -microbrachius -microburet -microburette -microburner -microcaltrop -microcardia -microcardius -microcarpous -microcellular -microcentrosome -microcentrum -microcephal -microcephalia -microcephalic -microcephalism -microcephalous -microcephalus -microcephaly -microceratous -microchaeta -microcharacter -microcheilia -microcheiria -microchemic -microchemical -microchemically -microchemistry -microchiria -microchiropteran -microchiropterous -microchromosome -microchronometer -microcinema -microcinematograph -microcinematographic -microcinematography -microclastic -microclimate -microclimatic -microclimatologic -microclimatological -microclimatology -microcline -microcnemia -microcoat -micrococcal -microcoleoptera -microcolon -microcolorimeter -microcolorimetric -microcolorimetrically -microcolorimetry -microcolumnar -microcombustion -microconidial -microconidium -microconjugant -microconstituent -microcopy -microcoria -microcosm -microcosmal -microcosmian -microcosmic -microcosmical -microcosmography -microcosmology -microcosmos -microcosmus -microcoulomb -microcranous -microcrith -microcryptocrystalline -microcrystal -microcrystalline -microcrystallogeny -microcrystallography -microcrystalloscopy -microcurie -microcyst -microcyte -microcythemia -microcytosis -microdactylia -microdactylism -microdactylous -microdentism -microdentous -microdetection -microdetector -microdetermination -microdiactine -microdissection -microdistillation -microdont -microdontism -microdontous -microdose -microdrawing -microdrive -microelectrode -microelectrolysis -microelectroscope -microelement -microerg -microestimation -microeutaxitic -microevolution -microexamination -microfarad -microfauna -microfelsite -microfelsitic -microfilaria -microfilm -microflora -microfluidal -microfoliation -microfossil -microfungus -microfurnace -microgalvanometer -microgamete -microgametocyte -microgametophyte -microgamy -microgastria -microgastrine -microgeological -microgeologist -microgeology -microgilbert -microglia -microglossia -micrognathia -micrognathic -micrognathous -microgonidial -microgonidium -microgram -microgramme -microgranite -microgranitic -microgranitoid -microgranular -microgranulitic -micrograph -micrographer -micrographic -micrographical -micrographically -micrographist -micrography -micrograver -microgravimetric -microgroove -microgyne -microgyria -microhenry -microhepatia -microhistochemical -microhistology -microhm -microhmmeter -microhymenopteron -microinjection -microjoule -microlepidopter -microlepidoptera -microlepidopteran -microlepidopterist -microlepidopteron -microlepidopterous -microleukoblast -microlevel -microlite -microliter -microlith -microlithic -microlitic -micrologic -micrological -micrologically -micrologist -micrologue -micrology -microlux -micromania -micromaniac -micromanipulation -micromanipulator -micromanometer -micromazia -micromeasurement -micromechanics -micromelia -micromelic -micromelus -micromembrane -micromeral -micromere -micromeric -micromerism -micromeritic -micromeritics -micromesentery -micrometallographer -micrometallography -micrometallurgy -micrometer -micromethod -micrometrical -micrometrically -micrometry -micromicrofarad -micromicron -micromil -micromillimeter -micromineralogical -micromineralogy -micromorph -micromotion -micromotoscope -micromyelia -micromyeloblast -micron -micronization -micronize -micronometer -micronuclear -micronucleus -micronutrient -microorganic -microorganism -microorganismal -micropaleontology -micropantograph -microparasite -microparasitic -micropathological -micropathologist -micropathology -micropegmatite -micropegmatitic -micropenis -microperthite -microperthitic -micropetalous -micropetrography -micropetrologist -micropetrology -microphage -microphagocyte -microphagous -microphagy -microphakia -microphallus -microphone -microphonic -microphonics -microphonograph -microphot -microphotograph -microphotographic -microphotography -microphotometer -microphotoscope -microphthalmia -microphthalmic -microphthalmos -microphthalmus -microphyllous -microphysical -microphysics -microphysiography -microphytal -microphyte -microphytic -microphytology -micropia -micropin -micropipette -microplakite -microplankton -microplastocyte -microplastometer -micropodal -micropodia -micropoecilitic -micropoicilitic -micropoikilitic -micropolariscope -micropolarization -micropore -microporosity -microporous -microporphyritic -microprint -microprojector -micropsia -micropsy -micropterism -micropterous -micropterygid -micropterygious -micropylar -micropyle -micropyrometer -microradiometer -microreaction -microrefractometer -microrhabdus -microrheometer -microrheometric -microrheometrical -microsaurian -microsclere -microsclerous -microsclerum -microscopal -microscope -microscopial -microscopic -microscopical -microscopically -microscopics -microscopist -microscopize -microscopy -microsecond -microsection -microseism -microseismic -microseismical -microseismograph -microseismology -microseismometer -microseismometrograph -microseismometry -microseme -microseptum -microsmatic -microsmatism -microsoma -microsomatous -microsome -microsomia -microsommite -microspecies -microspectroscope -microspectroscopic -microspectroscopy -microspermous -microsphaeric -microsphere -microspheric -microspherulitic -microsplanchnic -microsplenia -microsplenic -microsporange -microsporangium -microspore -microsporiasis -microsporic -microsporidian -microsporophore -microsporophyll -microsporosis -microsporous -microstat -microsthene -microsthenic -microstomatous -microstome -microstomia -microstomous -microstructural -microstructure -microstylospore -microstylous -microsublimation -microtasimeter -microtechnic -microtechnique -microtelephone -microtelephonic -microtheos -microtherm -microthermic -microthorax -microtia -microtine -microtitration -microtome -microtomic -microtomical -microtomist -microtomy -microtone -microtypal -microtype -microtypical -microvolt -microvolume -microvolumetric -microwatt -microwave -microweber -microzoa -microzoal -microzoan -microzoaria -microzoarian -microzoary -microzoic -microzone -microzooid -microzoology -microzoon -microzoospore -microzyma -microzyme -microzymian -micrurgic -micrurgical -micrurgist -micrurgy -miction -micturate -micturition -mid -midafternoon -midautumn -midaxillary -midbrain -midday -midden -middenstead -middle -middlebreaker -middlebuster -middleman -middlemanism -middlemanship -middlemost -middler -middlesplitter -middlewards -middleway -middleweight -middlewoman -middling -middlingish -middlingly -middlingness -middlings -middorsal -middy -mide -midevening -midewiwin -midfacial -midforenoon -midfrontal -midge -midget -midgety -midgy -midheaven -midiron -midland -midlandward -midlatitude -midleg -midlenting -midmain -midmandibular -midmonth -midmonthly -midmorn -midmorning -midmost -midnight -midnightly -midnoon -midparent -midparentage -midparental -midpit -midrange -midrash -midrashic -midrib -midribbed -midriff -mids -midseason -midsentence -midship -midshipman -midshipmanship -midshipmite -midships -midspace -midst -midstory -midstout -midstream -midstreet -midstroke -midstyled -midsummer -midsummerish -midsummery -midtap -midvein -midverse -midward -midwatch -midway -midweek -midweekly -midwestward -midwife -midwifery -midwinter -midwinterly -midwintry -midwise -midyear -mien -miersite -miff -miffiness -miffy -mig -might -mightily -mightiness -mightless -mightnt -mighty -mightyhearted -mightyship -miglio -migmatite -migniardise -mignon -mignonette -mignonne -mignonness -migraine -migrainoid -migrainous -migrant -migrate -migration -migrational -migrationist -migrative -migrator -migratorial -migratory -miharaite -mihrab -mijakite -mijl -mikado -mikadoate -mikadoism -mike -mikie -mil -mila -milady -milammeter -milarite -milch -milcher -milchy -mild -milden -milder -mildew -mildewer -mildewy -mildhearted -mildheartedness -mildish -mildly -mildness -mile -mileage -milepost -miler -milesima -milestone -mileway -milfoil -milha -miliaceous -miliarensis -miliaria -miliarium -miliary -milieu -milioliform -milioline -miliolite -miliolitic -militancy -militant -militantly -militantness -militarily -militariness -militarism -militarist -militaristic -militaristically -militarization -militarize -military -militaryism -militaryment -militaster -militate -militation -militia -militiaman -militiate -milium -milk -milkbush -milken -milker -milkeress -milkfish -milkgrass -milkhouse -milkily -milkiness -milking -milkless -milklike -milkmaid -milkman -milkness -milkshed -milkshop -milksick -milksop -milksopism -milksoppery -milksopping -milksoppish -milksoppy -milkstone -milkweed -milkwood -milkwort -milky -mill -milla -millable -millage -millboard -millclapper -millcourse -milldam -mille -milled -millefiori -milleflorous -millefoliate -millenarian -millenarianism -millenarist -millenary -millennia -millennial -millennialism -millennialist -millennially -millennian -millenniarism -millenniary -millennium -millepede -millepore -milleporiform -milleporine -milleporite -milleporous -millepunctate -miller -milleress -millering -millerite -millerole -millesimal -millesimally -millet -millfeed -millful -millhouse -milliad -milliammeter -milliamp -milliampere -milliamperemeter -milliangstrom -milliard -milliardaire -milliare -milliarium -milliary -millibar -millicron -millicurie -millieme -milliequivalent -millifarad -millifold -milliform -milligal -milligrade -milligram -milligramage -millihenry -millilambert -millile -milliliter -millilux -millimeter -millimicron -millimolar -millimole -millincost -milline -milliner -millinerial -millinering -millinery -milling -millinormal -millinormality -millioctave -millioersted -million -millionaire -millionairedom -millionairess -millionairish -millionairism -millionary -millioned -millioner -millionfold -millionism -millionist -millionize -millionocracy -millions -millionth -milliphot -millipoise -millisecond -millistere -millithrum -millivolt -millivoltmeter -millman -millocracy -millocrat -millocratism -millosevichite -millowner -millpond -millpool -millpost -millrace -millrynd -millsite -millstock -millstone -millstream -milltail -millward -millwork -millworker -millwright -millwrighting -milner -milo -milord -milpa -milreis -milsey -milsie -milt -milter -miltlike -miltsick -miltwaste -milty -milvine -milvinous -milzbrand -mim -mima -mimbar -mimble -mime -mimeo -mimeograph -mimeographic -mimeographically -mimeographist -mimer -mimesis -mimester -mimetene -mimetesite -mimetic -mimetical -mimetically -mimetism -mimetite -mimiambi -mimiambic -mimiambics -mimic -mimical -mimically -mimicism -mimicker -mimicry -mimine -miminypiminy -mimly -mimmation -mimmest -mimmock -mimmocking -mimmocky -mimmood -mimmoud -mimmouthed -mimmouthedness -mimodrama -mimographer -mimography -mimologist -mimosaceous -mimosis -mimosite -mimotype -mimotypic -mimp -mimsey -min -mina -minable -minacious -minaciously -minaciousness -minacity -minar -minaret -minareted -minargent -minasragrite -minatorial -minatorially -minatorily -minatory -minaway -mince -mincemeat -mincer -minchery -minchiate -mincing -mincingly -mincingness -mind -minded -minder -mindful -mindfully -mindfulness -minding -mindless -mindlessly -mindlessness -mindsight -mine -mineowner -miner -mineragraphic -mineragraphy -mineraiogic -mineral -mineralizable -mineralization -mineralize -mineralizer -mineralogical -mineralogically -mineralogist -mineralogize -mineralogy -minerval -minery -mines -minette -mineworker -ming -minge -mingelen -mingle -mingleable -mingledly -minglement -mingler -minglingly -minguetite -mingwort -mingy -minhag -minhah -miniaceous -miniate -miniator -miniature -miniaturist -minibus -minicam -minicamera -minienize -minification -minify -minikin -minikinly -minim -minima -minimacid -minimal -minimalism -minimalkaline -minimally -minimetric -minimifidian -minimifidianism -minimism -minimistic -minimitude -minimization -minimize -minimizer -minimum -minimus -minimuscular -mining -minion -minionette -minionism -minionly -minionship -minish -minisher -minishment -minister -ministeriable -ministerial -ministerialism -ministerialist -ministeriality -ministerially -ministerialness -ministerium -ministership -ministrable -ministrant -ministration -ministrative -ministrator -ministrer -ministress -ministry -ministryship -minitant -minium -miniver -minivet -mink -minkery -minkish -minnesinger -minnesong -minnie -minniebush -minning -minnow -minny -mino -minoize -minometer -minor -minorage -minorate -minoration -minoress -minority -minorship -minot -minsitive -minster -minsteryard -minstrel -minstreless -minstrelship -minstrelsy -mint -mintage -mintbush -minter -mintmaker -mintmaking -mintman -mintmaster -minty -minuend -minuet -minuetic -minuetish -minus -minuscular -minuscule -minutary -minutation -minute -minutely -minuteman -minuteness -minuter -minuthesis -minutia -minutiae -minutial -minutiose -minutiously -minutissimic -minverite -minx -minxish -minxishly -minxishness -minxship -miny -minyan -miocardia -miolithic -mioplasmia -miothermic -miqra -miquelet -mir -mirabiliary -mirabilite -mirach -miracidial -miracidium -miracle -miraclemonger -miraclemongering -miraclist -miraculist -miraculize -miraculosity -miraculous -miraculously -miraculousness -mirador -mirage -miragy -mirandous -mirate -mirbane -mird -mirdaha -mire -mirepoix -mirid -mirific -miriness -mirish -mirk -mirkiness -mirksome -mirliton -miro -mirror -mirrored -mirrorize -mirrorlike -mirrorscope -mirrory -mirth -mirthful -mirthfully -mirthfulness -mirthless -mirthlessly -mirthlessness -mirthsome -mirthsomeness -miry -miryachit -mirza -misaccent -misaccentuation -misachievement -misacknowledge -misact -misadapt -misadaptation -misadd -misaddress -misadjust -misadmeasurement -misadministration -misadvantage -misadventure -misadventurer -misadventurous -misadventurously -misadvertence -misadvice -misadvise -misadvised -misadvisedly -misadvisedness -misaffected -misaffection -misaffirm -misagent -misaim -misalienate -misalignment -misallegation -misallege -misalliance -misallotment -misallowance -misally -misalphabetize -misalter -misanalyze -misandry -misanswer -misanthrope -misanthropia -misanthropic -misanthropical -misanthropically -misanthropism -misanthropist -misanthropize -misanthropy -misapparel -misappear -misappearance -misappellation -misapplication -misapplier -misapply -misappoint -misappointment -misappraise -misappraisement -misappreciate -misappreciation -misappreciative -misapprehend -misapprehendingly -misapprehensible -misapprehension -misapprehensive -misapprehensively -misapprehensiveness -misappropriate -misappropriately -misappropriation -misarchism -misarchist -misarrange -misarrangement -misarray -misascribe -misascription -misasperse -misassay -misassent -misassert -misassign -misassociate -misassociation -misatone -misattend -misattribute -misattribution -misaunter -misauthorization -misauthorize -misaward -misbandage -misbaptize -misbecome -misbecoming -misbecomingly -misbecomingness -misbefitting -misbeget -misbegin -misbegotten -misbehave -misbehavior -misbeholden -misbelief -misbelieve -misbeliever -misbelievingly -misbelove -misbeseem -misbestow -misbestowal -misbetide -misbias -misbill -misbind -misbirth -misbode -misborn -misbrand -misbuild -misbusy -miscalculate -miscalculation -miscalculator -miscall -miscaller -miscanonize -miscarriage -miscarriageable -miscarry -miscast -miscasualty -misceability -miscegenate -miscegenation -miscegenationist -miscegenator -miscegenetic -miscegine -miscellanarian -miscellanea -miscellaneity -miscellaneous -miscellaneously -miscellaneousness -miscellanist -miscellany -mischallenge -mischance -mischanceful -mischancy -mischaracterization -mischaracterize -mischarge -mischief -mischiefful -mischieve -mischievous -mischievously -mischievousness -mischio -mischoice -mischoose -mischristen -miscibility -miscible -miscipher -misclaim -misclaiming -misclass -misclassification -misclassify -miscognizant -miscoin -miscoinage -miscollocation -miscolor -miscoloration -miscommand -miscommit -miscommunicate -miscompare -miscomplacence -miscomplain -miscomplaint -miscompose -miscomprehend -miscomprehension -miscomputation -miscompute -misconceive -misconceiver -misconception -misconclusion -miscondition -misconduct -misconfer -misconfidence -misconfident -misconfiguration -misconjecture -misconjugate -misconjugation -misconjunction -misconsecrate -misconsequence -misconstitutional -misconstruable -misconstruct -misconstruction -misconstructive -misconstrue -misconstruer -miscontinuance -misconvenient -misconvey -miscook -miscookery -miscorrect -miscorrection -miscounsel -miscount -miscovet -miscreancy -miscreant -miscreate -miscreation -miscreative -miscreator -miscredited -miscredulity -miscreed -miscript -miscrop -miscue -miscultivated -misculture -miscurvature -miscut -misdate -misdateful -misdaub -misdeal -misdealer -misdecide -misdecision -misdeclaration -misdeclare -misdeed -misdeem -misdeemful -misdefine -misdeformed -misdeliver -misdelivery -misdemean -misdemeanant -misdemeanist -misdemeanor -misdentition -misderivation -misderive -misdescribe -misdescriber -misdescription -misdescriptive -misdesire -misdetermine -misdevise -misdevoted -misdevotion -misdiet -misdirect -misdirection -misdispose -misdisposition -misdistinguish -misdistribute -misdistribution -misdivide -misdivision -misdo -misdoer -misdoing -misdoubt -misdower -misdraw -misdread -misdrive -mise -misease -misecclesiastic -misedit -miseducate -miseducation -miseducative -miseffect -misemphasis -misemphasize -misemploy -misemployment -misencourage -misendeavor -misenforce -misengrave -misenite -misenjoy -misenroll -misentitle -misenunciation -miser -miserabilism -miserabilist -miserabilistic -miserability -miserable -miserableness -miserably -miserdom -miserected -miserhood -misericord -miserism -miserliness -miserly -misery -misesteem -misestimate -misestimation -misexample -misexecute -misexecution -misexpectation -misexpend -misexpenditure -misexplain -misexplanation -misexplication -misexposition -misexpound -misexpress -misexpression -misexpressive -misfaith -misfare -misfashion -misfather -misfault -misfeasance -misfeasor -misfeature -misfield -misfigure -misfile -misfire -misfit -misfond -misform -misformation -misfortunate -misfortunately -misfortune -misfortuned -misfortuner -misframe -misgauge -misgesture -misgive -misgiving -misgivingly -misgo -misgotten -misgovern -misgovernance -misgovernment -misgovernor -misgracious -misgraft -misgrave -misground -misgrow -misgrown -misgrowth -misguess -misguggle -misguidance -misguide -misguided -misguidedly -misguidedness -misguider -misguiding -misguidingly -mishandle -mishap -mishappen -mishmash -mishmee -misidentification -misidentify -misimagination -misimagine -misimpression -misimprove -misimprovement -misimputation -misimpute -misincensed -misincite -misinclination -misincline -misinfer -misinference -misinflame -misinform -misinformant -misinformation -misinformer -misingenuity -misinspired -misinstruct -misinstruction -misinstructive -misintelligence -misintelligible -misintend -misintention -misinter -misinterment -misinterpret -misinterpretable -misinterpretation -misinterpreter -misintimation -misjoin -misjoinder -misjudge -misjudgement -misjudger -misjudgingly -misjudgment -miskeep -misken -miskenning -miskill -miskindle -misknow -misknowledge -misky -mislabel -mislabor -mislanguage -mislay -mislayer -mislead -misleadable -misleader -misleading -misleadingly -misleadingness -mislear -misleared -mislearn -misled -mislest -mislight -mislike -misliken -mislikeness -misliker -mislikingly -mislippen -mislive -mislocate -mislocation -mislodge -mismade -mismake -mismanage -mismanageable -mismanagement -mismanager -mismarriage -mismarry -mismatch -mismatchment -mismate -mismeasure -mismeasurement -mismenstruation -misminded -mismingle -mismotion -mismove -misname -misnarrate -misnatured -misnavigation -misnomed -misnomer -misnumber -misnurture -misnutrition -misobedience -misobey -misobservance -misobserve -misocapnic -misocapnist -misocatholic -misoccupy -misogallic -misogamic -misogamist -misogamy -misogyne -misogynic -misogynical -misogynism -misogynist -misogynistic -misogynistical -misogynous -misogyny -misohellene -misologist -misology -misomath -misoneism -misoneist -misoneistic -misopaterist -misopedia -misopedism -misopedist -misopinion -misopolemical -misorder -misordination -misorganization -misorganize -misoscopist -misosophist -misosophy -misotheism -misotheist -misotheistic -misotramontanism -misotyranny -misoxene -misoxeny -mispage -mispagination -mispaint -misparse -mispart -mispassion -mispatch -mispay -misperceive -misperception -misperform -misperformance -mispersuade -misperuse -misphrase -mispick -mispickel -misplace -misplacement -misplant -misplay -misplead -mispleading -misplease -mispoint -mispoise -mispolicy -misposition -mispossessed -mispractice -mispraise -misprejudiced -misprincipled -misprint -misprisal -misprision -misprize -misprizer -misproceeding -misproduce -misprofess -misprofessor -mispronounce -mispronouncement -mispronunciation -misproportion -misproposal -mispropose -misproud -misprovide -misprovidence -misprovoke -mispunctuate -mispunctuation -mispurchase -mispursuit -misput -misqualify -misquality -misquotation -misquote -misquoter -misraise -misrate -misread -misreader -misrealize -misreason -misreceive -misrecital -misrecite -misreckon -misrecognition -misrecognize -misrecollect -misrefer -misreference -misreflect -misreform -misregulate -misrehearsal -misrehearse -misrelate -misrelation -misreliance -misremember -misremembrance -misrender -misrepeat -misreport -misreporter -misreposed -misrepresent -misrepresentation -misrepresentative -misrepresenter -misreprint -misrepute -misresemblance -misresolved -misresult -misreward -misrhyme -misrhymer -misrule -miss -missable -missal -missay -missayer -misseem -missel -missemblance -missentence -misserve -misservice -misset -misshape -misshapen -misshapenly -misshapenness -misshood -missible -missile -missileproof -missiness -missing -missingly -mission -missional -missionarize -missionary -missionaryship -missioner -missionize -missionizer -missis -missish -missishness -missive -missmark -missment -missourite -misspeak -misspeech -misspell -misspelling -misspend -misspender -misstate -misstatement -misstater -misstay -misstep -missuade -missuggestion -missummation -missuppose -missy -missyish -missyllabication -missyllabify -mist -mistakable -mistakableness -mistakably -mistake -mistakeful -mistaken -mistakenly -mistakenness -mistakeproof -mistaker -mistaking -mistakingly -mistassini -mistaught -mistbow -misteach -misteacher -misted -mistell -mistempered -mistend -mistendency -mister -misterm -mistetch -mistfall -mistflower -mistful -misthink -misthought -misthread -misthrift -misthrive -misthrow -mistic -mistide -mistify -mistigris -mistily -mistime -mistiness -mistitle -mistle -mistless -mistletoe -mistone -mistonusk -mistook -mistouch -mistradition -mistrain -mistral -mistranscribe -mistranscript -mistranscription -mistranslate -mistranslation -mistreat -mistreatment -mistress -mistressdom -mistresshood -mistressless -mistressly -mistrial -mistrist -mistrust -mistruster -mistrustful -mistrustfully -mistrustfulness -mistrusting -mistrustingly -mistrustless -mistry -mistryst -misturn -mistutor -misty -mistyish -misunderstand -misunderstandable -misunderstander -misunderstanding -misunderstandingly -misunderstood -misunderstoodness -misura -misusage -misuse -misuseful -misusement -misuser -misusurped -misvaluation -misvalue -misventure -misventurous -misvouch -miswed -miswisdom -miswish -misword -misworship -misworshiper -misworshipper -miswrite -misyoke -miszealous -mitapsis -mitchboard -mite -miteproof -miter -mitered -miterer -miterflower -miterwort -mithridate -mithridatic -mithridatism -mithridatize -miticidal -miticide -mitigable -mitigant -mitigate -mitigatedly -mitigation -mitigative -mitigator -mitigatory -mitis -mitochondria -mitochondrial -mitogenetic -mitome -mitosis -mitosome -mitotic -mitotically -mitra -mitrailleuse -mitral -mitrate -mitre -mitrer -mitriform -mitsumata -mitt -mittelhand -mitten -mittened -mittimus -mitty -mity -miurus -mix -mixable -mixableness -mixblood -mixed -mixedly -mixedness -mixen -mixer -mixeress -mixhill -mixible -mixite -mixobarbaric -mixochromosome -mixolydian -mixoploid -mixoploidy -mixotrophic -mixtiform -mixtilineal -mixtilion -mixtion -mixture -mixy -mizmaze -mizzen -mizzenmast -mizzenmastman -mizzentopman -mizzle -mizzler -mizzly -mizzonite -mizzy -mlechchha -mneme -mnemic -mnemonic -mnemonical -mnemonicalist -mnemonically -mnemonicon -mnemonics -mnemonism -mnemonist -mnemonization -mnemonize -mnemotechnic -mnemotechnical -mnemotechnics -mnemotechnist -mnemotechny -mnesic -mnestic -mniaceous -mnioid -mo -moan -moanful -moanfully -moanification -moaning -moaningly -moanless -moat -mob -mobable -mobbable -mobber -mobbish -mobbishly -mobbishness -mobbism -mobbist -mobby -mobcap -mobed -mobile -mobilianer -mobiliary -mobility -mobilizable -mobilization -mobilize -mobilometer -moble -moblike -mobocracy -mobocrat -mobocratic -mobocratical -mobolatry -mobproof -mobship -mobsman -mobster -moccasin -mocha -mochras -mock -mockable -mockado -mockbird -mocker -mockernut -mockery -mockful -mockfully -mockground -mockingbird -mockingstock -mocmain -mocomoco -mocuck -modal -modalism -modalist -modalistic -modality -modalize -modally -mode -model -modeler -modeless -modelessness -modeling -modelist -modeller -modelmaker -modelmaking -modena -moderant -moderantism -moderantist -moderate -moderately -moderateness -moderation -moderationist -moderatism -moderatist -moderato -moderator -moderatorship -moderatrix -modern -moderner -modernicide -modernish -modernism -modernist -modernistic -modernity -modernizable -modernization -modernize -modernizer -modernly -modernness -modest -modestly -modestness -modesty -modiation -modicity -modicum -modifiability -modifiable -modifiableness -modifiably -modificability -modificable -modification -modificationist -modificative -modificator -modificatory -modifier -modify -modillion -modiolar -modiolus -modish -modishly -modishness -modist -modiste -modistry -modius -modulability -modulant -modular -modulate -modulation -modulative -modulator -modulatory -module -modulo -modulus -modumite -moellon -moerithere -moeritherian -mofette -moff -mofussil -mofussilite -mog -mogador -mogadore -mogdad -moggan -moggy -mogigraphia -mogigraphic -mogigraphy -mogilalia -mogilalism -mogiphonia -mogitocia -mogo -mogographia -moguey -mogulship -moha -mohabat -mohair -mohar -mohawkite -mohel -mohnseed -moho -mohr -mohur -moider -moidore -moieter -moiety -moil -moiler -moiles -moiley -moiling -moilingly -moilsome -moineau -moio -moire -moirette -moise -moissanite -moist -moisten -moistener -moistful -moistify -moistish -moistishness -moistless -moistly -moistness -moisture -moistureless -moistureproof -moisty -moit -moity -mojarra -mojo -mokaddam -moke -moki -mokihana -moko -moksha -mokum -moky -mola -molal -molality -molar -molariform -molarimeter -molarity -molary -molasses -molassied -molassy -molave -mold -moldability -moldable -moldableness -moldavite -moldboard -molder -moldery -moldiness -molding -moldmade -moldproof -moldwarp -moldy -mole -molecast -molecula -molecular -molecularist -molecularity -molecularly -molecule -molehead -moleheap -molehill -molehillish -molehilly -moleism -molelike -molendinar -molendinary -molengraaffite -moleproof -moler -moleskin -molest -molestation -molester -molestful -molestfully -molimen -moliminous -molinary -moline -molka -molland -molle -mollescence -mollescent -molleton -mollichop -mollicrush -mollie -mollienisia -mollient -molliently -mollifiable -mollification -mollifiedly -mollifier -mollify -mollifying -mollifyingly -mollifyingness -molligrant -molligrubs -mollipilose -mollisiose -mollities -mollitious -mollitude -molluscan -molluscivorous -molluscoid -molluscoidal -molluscoidan -molluscoidean -molluscous -molluscousness -molluscum -mollusk -molly -mollycoddle -mollycoddler -mollycoddling -mollycosset -mollycot -mollyhawk -molman -moloid -moloker -molompi -molosse -molossic -molossine -molossoid -molossus -molpe -molrooken -molt -molten -moltenly -molter -moly -molybdate -molybdena -molybdenic -molybdeniferous -molybdenite -molybdenous -molybdenum -molybdic -molybdite -molybdocardialgia -molybdocolic -molybdodyspepsia -molybdomancy -molybdomenite -molybdonosus -molybdoparesis -molybdophyllite -molybdosis -molybdous -molysite -mombin -momble -mome -moment -momenta -momental -momentally -momentaneall -momentaneity -momentaneous -momentaneously -momentaneousness -momentarily -momentariness -momentary -momently -momentous -momentously -momentousness -momentum -momiology -momism -momme -mommet -mommy -momo -mon -mona -monacanthid -monacanthine -monacanthous -monachal -monachate -monachism -monachist -monachization -monachize -monactin -monactine -monactinellid -monactinellidan -monad -monadelph -monadelphian -monadelphous -monadic -monadical -monadically -monadiform -monadigerous -monadism -monadistic -monadnock -monadology -monaene -monal -monamniotic -monander -monandrian -monandric -monandrous -monandry -monanthous -monapsal -monarch -monarchal -monarchally -monarchess -monarchial -monarchian -monarchianism -monarchianist -monarchianistic -monarchic -monarchical -monarchically -monarchism -monarchist -monarchistic -monarchize -monarchizer -monarchlike -monarchomachic -monarchomachist -monarchy -monarthritis -monarticular -monas -monascidian -monase -monaster -monasterial -monasterially -monastery -monastic -monastical -monastically -monasticism -monasticize -monatomic -monatomicity -monatomism -monaulos -monaural -monaxial -monaxile -monaxon -monaxonial -monaxonic -monazine -monazite -monchiquite -mone -monel -monembryary -monembryonic -monembryony -monepic -monepiscopacy -monepiscopal -moner -moneral -moneran -monergic -monergism -monergist -monergistic -moneric -moneron -monerozoan -monerozoic -monerula -monesia -monetarily -monetary -monetite -monetization -monetize -money -moneyage -moneybag -moneybags -moneyed -moneyer -moneyflower -moneygrub -moneygrubber -moneygrubbing -moneylender -moneylending -moneyless -moneymonger -moneymongering -moneysaving -moneywise -moneywort -mong -mongcorn -monger -mongering -mongery -mongler -mongoose -mongrel -mongreldom -mongrelish -mongrelism -mongrelity -mongrelization -mongrelize -mongrelly -mongrelness -mongst -monheimite -monial -moniker -monilated -monilethrix -moniliaceous -monilicorn -moniliform -moniliformly -monilioid -moniment -monimiaceous -monimolite -monimostylic -monism -monist -monistic -monistical -monistically -monition -monitive -monitor -monitorial -monitorially -monitorish -monitorship -monitory -monitress -monitrix -monk -monkbird -monkcraft -monkdom -monkery -monkess -monkey -monkeyboard -monkeyface -monkeyfy -monkeyhood -monkeyish -monkeyishly -monkeyishness -monkeylike -monkeynut -monkeypod -monkeypot -monkeyry -monkeyshine -monkeytail -monkfish -monkflower -monkhood -monkish -monkishly -monkishness -monkism -monklike -monkliness -monkly -monkmonger -monkship -monkshood -monmouthite -monny -mono -monoacetate -monoacetin -monoacid -monoacidic -monoamide -monoamine -monoamino -monoammonium -monoazo -monobacillary -monobase -monobasic -monobasicity -monoblastic -monoblepsia -monoblepsis -monobloc -monobranchiate -monobromacetone -monobromated -monobromide -monobrominated -monobromination -monobromized -monobromoacetanilide -monobromoacetone -monobutyrin -monocalcium -monocarbide -monocarbonate -monocarbonic -monocarboxylic -monocardian -monocarp -monocarpal -monocarpellary -monocarpian -monocarpic -monocarpous -monocellular -monocentric -monocentrid -monocentroid -monocephalous -monocercous -monoceros -monocerous -monochasial -monochasium -monochlamydeous -monochlor -monochloracetic -monochloranthracene -monochlorbenzene -monochloride -monochlorinated -monochlorination -monochloro -monochloroacetic -monochlorobenzene -monochloromethane -monochoanitic -monochord -monochordist -monochordize -monochroic -monochromasy -monochromat -monochromate -monochromatic -monochromatically -monochromatism -monochromator -monochrome -monochromic -monochromical -monochromically -monochromist -monochromous -monochromy -monochronic -monochronous -monociliated -monocle -monocled -monocleid -monoclinal -monoclinally -monocline -monoclinian -monoclinic -monoclinism -monoclinometric -monoclinous -monocoelian -monocoelic -monocondylar -monocondylian -monocondylic -monocondylous -monocormic -monocot -monocotyledon -monocotyledonous -monocracy -monocrat -monocratic -monocrotic -monocrotism -monocular -monocularity -monocularly -monoculate -monocule -monoculist -monoculous -monocultural -monoculture -monoculus -monocyanogen -monocycle -monocyclic -monocystic -monocyte -monocytic -monocytopoiesis -monodactyl -monodactylate -monodactyle -monodactylism -monodactylous -monodactyly -monodelph -monodelphian -monodelphic -monodelphous -monodermic -monodic -monodically -monodimetric -monodist -monodize -monodomous -monodont -monodontal -monodram -monodrama -monodramatic -monodramatist -monodromic -monodromy -monody -monodynamic -monodynamism -monoecian -monoecious -monoeciously -monoeciousness -monoecism -monoeidic -monoestrous -monoethanolamine -monoethylamine -monofilament -monofilm -monoflagellate -monoformin -monogamian -monogamic -monogamist -monogamistic -monogamous -monogamously -monogamousness -monogamy -monoganglionic -monogastric -monogene -monogeneity -monogeneous -monogenesis -monogenesist -monogenesy -monogenetic -monogenic -monogenism -monogenist -monogenistic -monogenous -monogeny -monoglot -monoglycerid -monoglyceride -monogoneutic -monogonoporic -monogonoporous -monogony -monogram -monogrammatic -monogrammatical -monogrammed -monogrammic -monograph -monographer -monographic -monographical -monographically -monographist -monography -monograptid -monogynic -monogynious -monogynist -monogynoecial -monogynous -monogyny -monohybrid -monohydrate -monohydrated -monohydric -monohydrogen -monohydroxy -monoicous -monoid -monoketone -monolater -monolatrist -monolatrous -monolatry -monolayer -monoline -monolingual -monolinguist -monoliteral -monolith -monolithal -monolithic -monolobular -monolocular -monologian -monologic -monological -monologist -monologize -monologue -monologuist -monology -monomachist -monomachy -monomania -monomaniac -monomaniacal -monomastigate -monomeniscous -monomer -monomeric -monomerous -monometallic -monometallism -monometallist -monometer -monomethyl -monomethylated -monomethylic -monometric -monometrical -monomial -monomict -monomineral -monomineralic -monomolecular -monomolybdate -monomorphic -monomorphism -monomorphous -monomyarian -mononaphthalene -mononch -mononeural -mononitrate -mononitrated -mononitration -mononitride -mononitrobenzene -mononomial -mononomian -monont -mononuclear -mononucleated -mononucleosis -mononychous -mononym -mononymic -mononymization -mononymize -mononymy -monoousian -monoousious -monoparental -monoparesis -monoparesthesia -monopathic -monopathy -monopectinate -monopersonal -monopersulfuric -monopersulphuric -monopetalous -monophagism -monophagous -monophagy -monophase -monophasia -monophasic -monophobia -monophone -monophonic -monophonous -monophony -monophotal -monophote -monophthalmic -monophthalmus -monophthong -monophthongal -monophthongization -monophthongize -monophyletic -monophyleticism -monophylite -monophyllous -monophyodont -monophyodontism -monopitch -monoplacula -monoplacular -monoplaculate -monoplane -monoplanist -monoplasmatic -monoplast -monoplastic -monoplegia -monoplegic -monopneumonian -monopneumonous -monopode -monopodial -monopodially -monopodic -monopodium -monopodous -monopody -monopolar -monopolaric -monopolarity -monopole -monopolism -monopolist -monopolistic -monopolistically -monopolitical -monopolizable -monopolization -monopolize -monopolizer -monopolous -monopoly -monopolylogist -monopolylogue -monopotassium -monoprionid -monoprionidian -monopsonistic -monopsony -monopsychism -monopteral -monopteroid -monopteron -monopteros -monopterous -monoptic -monoptical -monoptote -monoptotic -monopylean -monopyrenous -monorail -monorailroad -monorailway -monorchid -monorchidism -monorchis -monorchism -monorganic -monorhinal -monorhine -monorhyme -monorhymed -monorhythmic -monosaccharide -monosaccharose -monoschemic -monoscope -monose -monosemic -monosepalous -monoservice -monosilane -monosilicate -monosilicic -monosiphonic -monosiphonous -monosodium -monosomatic -monosomatous -monosome -monosomic -monosperm -monospermal -monospermic -monospermous -monospermy -monospherical -monospondylic -monosporangium -monospore -monospored -monosporiferous -monosporous -monostele -monostelic -monostelous -monostely -monostich -monostichous -monostomatous -monostome -monostomous -monostromatic -monostrophe -monostrophic -monostrophics -monostylous -monosubstituted -monosubstitution -monosulfone -monosulfonic -monosulphide -monosulphone -monosulphonic -monosyllabic -monosyllabical -monosyllabically -monosyllabism -monosyllabize -monosyllable -monosymmetric -monosymmetrical -monosymmetrically -monosymmetry -monosynthetic -monotelephone -monotelephonic -monotellurite -monothalamian -monothalamous -monothecal -monotheism -monotheist -monotheistic -monotheistical -monotheistically -monothelious -monothetic -monotic -monotint -monotocardiac -monotocardian -monotocous -monotomous -monotone -monotonic -monotonical -monotonically -monotonist -monotonize -monotonous -monotonously -monotonousness -monotony -monotremal -monotremate -monotrematous -monotreme -monotremous -monotrichous -monotriglyph -monotriglyphic -monotrochal -monotrochian -monotrochous -monotropaceous -monotrophic -monotropic -monotropy -monotypal -monotype -monotypic -monotypical -monotypous -monoureide -monovalence -monovalency -monovalent -monovariant -monoverticillate -monovoltine -monovular -monoxenous -monoxide -monoxime -monoxyle -monoxylic -monoxylon -monoxylous -monozoan -monozoic -monozygotic -monrolite -monseigneur -monsieur -monsieurship -monsignor -monsignorial -monsoon -monsoonal -monsoonish -monsoonishly -monster -monsterhood -monsterlike -monstership -monstrance -monstrate -monstration -monstrator -monstricide -monstriferous -monstrification -monstrify -monstrosity -monstrous -monstrously -monstrousness -montage -montana -montane -montanic -montanin -montanite -montant -montbretia -monte -montebrasite -monteith -montem -montgolfier -month -monthly -monthon -monticellite -monticle -monticoline -monticulate -monticule -monticuliporidean -monticuliporoid -monticulose -monticulous -monticulus -montiform -montigeneous -montilla -montjoy -montmartrite -montmorilonite -monton -montroydite -monture -monument -monumental -monumentalism -monumentality -monumentalization -monumentalize -monumentally -monumentary -monumentless -monumentlike -monzodiorite -monzogabbro -monzonite -monzonitic -moo -mooch -moocha -moocher -moochulka -mood -mooder -moodily -moodiness -moodish -moodishly -moodishness -moodle -moody -mooing -mool -moolet -moolings -mools -moolum -moon -moonack -moonbeam -moonbill -moonblink -mooncalf -mooncreeper -moondown -moondrop -mooned -mooner -moonery -mooneye -moonface -moonfaced -moonfall -moonfish -moonflower -moonglade -moonglow -moonhead -moonily -mooniness -mooning -moonish -moonite -moonja -moonjah -moonless -moonlet -moonlight -moonlighted -moonlighter -moonlighting -moonlighty -moonlike -moonlikeness -moonlit -moonlitten -moonman -moonpath -moonpenny -moonproof -moonraker -moonraking -moonrise -moonsail -moonscape -moonseed -moonset -moonshade -moonshine -moonshiner -moonshining -moonshiny -moonsick -moonsickness -moonstone -moontide -moonwalker -moonwalking -moonward -moonwards -moonway -moonwort -moony -moop -moor -moorage -moorball -moorband -moorberry -moorbird -moorburn -moorburner -moorburning -moorflower -moorfowl -mooring -moorish -moorishly -moorishness -moorland -moorlander -moorman -moorn -moorpan -moors -moorsman -moorstone -moortetter -moorup -moorwort -moory -moosa -moose -mooseberry -moosebird -moosebush -moosecall -mooseflower -moosehood -moosemise -moosetongue -moosewob -moosewood -moosey -moost -moot -mootable -mooter -mooth -mooting -mootman -mootstead -mootworthy -mop -mopane -mopboard -mope -moper -moph -mophead -mopheaded -moping -mopingly -mopish -mopishly -mopishness -mopla -mopper -moppet -moppy -mopstick -mopsy -mopus -moquette -mor -mora -moraceous -morainal -moraine -morainic -moral -morale -moralism -moralist -moralistic -moralistically -morality -moralization -moralize -moralizer -moralizingly -moralless -morally -moralness -morals -morass -morassic -morassweed -morassy -morat -morate -moration -moratoria -moratorium -moratory -moravite -moray -morbid -morbidity -morbidize -morbidly -morbidness -morbiferal -morbiferous -morbific -morbifical -morbifically -morbify -morbility -morbillary -morbilli -morbilliform -morbillous -morcellate -morcellated -morcellation -mordacious -mordaciously -mordacity -mordancy -mordant -mordantly -mordellid -mordelloid -mordenite -mordent -mordicate -mordication -mordicative -mordore -more -moreen -morefold -moreish -morel -morella -morello -morencite -moreness -morenita -morenosite -moreover -morepork -mores -morfrey -morg -morga -morgan -morganatic -morganatical -morganatically -morganic -morganite -morganize -morgay -morgen -morgengift -morgenstern -morglay -morgue -moribund -moribundity -moribundly -moric -moriche -moriform -morigerate -morigeration -morigerous -morigerously -morigerousness -morillon -morin -morindin -morindone -morinel -moringaceous -moringad -moringuid -moringuoid -morion -morkin -morlop -mormaor -mormaordom -mormaorship -mormo -mormon -mormyr -mormyre -mormyrian -mormyrid -mormyroid -morn -morne -morned -morning -morningless -morningly -mornings -morningtide -morningward -mornless -mornlike -morntime -mornward -moro -moroc -morocco -morocota -morological -morologically -morologist -morology -moromancy -moron -moroncy -morong -moronic -moronism -moronity -moronry -morosaurian -morosauroid -morose -morosely -moroseness -morosis -morosity -moroxite -morph -morphallaxis -morphea -morpheme -morphemic -morphemics -morphetic -morphew -morphia -morphiate -morphic -morphically -morphinate -morphine -morphinic -morphinism -morphinist -morphinization -morphinize -morphinomania -morphinomaniac -morphiomania -morphiomaniac -morphogenesis -morphogenetic -morphogenic -morphogeny -morphographer -morphographic -morphographical -morphographist -morphography -morpholine -morphologic -morphological -morphologically -morphologist -morphology -morphometrical -morphometry -morphon -morphonomic -morphonomy -morphophonemic -morphophonemically -morphophonemics -morphophyly -morphoplasm -morphoplasmic -morphosis -morphotic -morphotropic -morphotropism -morphotropy -morphous -morrhuate -morrhuine -morricer -morris -morrow -morrowing -morrowless -morrowmass -morrowspeech -morrowtide -morsal -morse -morsel -morselization -morselize -morsing -morsure -mort -mortacious -mortal -mortalism -mortalist -mortality -mortalize -mortally -mortalness -mortalwise -mortar -mortarboard -mortarize -mortarless -mortarlike -mortarware -mortary -mortbell -mortcloth -mortersheen -mortgage -mortgageable -mortgagee -mortgagor -morth -morthwyrtha -mortician -mortier -mortiferous -mortiferously -mortiferousness -mortific -mortification -mortified -mortifiedly -mortifiedness -mortifier -mortify -mortifying -mortifyingly -mortise -mortiser -mortling -mortmain -mortmainer -mortuarian -mortuary -mortuous -morula -morular -morulation -morule -moruloid -morvin -morwong -mosaic -mosaical -mosaically -mosaicism -mosaicist -mosaist -mosandrite -mosasaur -mosasaurian -mosasaurid -mosasauroid -moschate -moschatel -moschatelline -moschiferous -moschine -mosesite -mosette -mosey -moskeneer -mosker -moslings -mosque -mosquelet -mosquish -mosquital -mosquito -mosquitobill -mosquitocidal -mosquitocide -mosquitoey -mosquitoish -mosquitoproof -moss -mossback -mossberry -mossbunker -mossed -mosser -mossery -mossful -mosshead -mossiness -mossless -mosslike -mosstrooper -mosstroopery -mosstrooping -mosswort -mossy -mossyback -most -moste -mostlike -mostlings -mostly -mostness -mot -motacillid -motacilline -motatorious -motatory -mote -moted -motel -moteless -moter -motet -motettist -motey -moth -mothed -mother -motherdom -mothered -motherer -mothergate -motherhood -motheriness -mothering -motherkin -motherland -motherless -motherlessness -motherlike -motherliness -motherling -motherly -mothership -mothersome -motherward -motherwise -motherwort -mothery -mothless -mothlike -mothproof -mothworm -mothy -motif -motific -motile -motility -motion -motionable -motional -motionless -motionlessly -motionlessness -motitation -motivate -motivation -motivational -motive -motiveless -motivelessly -motivelessness -motiveness -motivity -motley -motleyness -motmot -motofacient -motograph -motographic -motomagnetic -motoneuron -motophone -motor -motorable -motorboat -motorboatman -motorbus -motorcab -motorcade -motorcar -motorcycle -motorcyclist -motordom -motordrome -motored -motorial -motoric -motoring -motorism -motorist -motorium -motorization -motorize -motorless -motorman -motorneer -motorphobe -motorphobia -motorphobiac -motorway -motory -motricity -mott -motte -mottle -mottled -mottledness -mottlement -mottler -mottling -motto -mottoed -mottoless -mottolike -mottramite -motyka -mou -moucharaby -mouchardism -mouche -mouchrabieh -moud -moudie -moudieman -moudy -mouflon -mouillation -mouille -mouillure -moujik -moul -mould -moulded -moule -moulin -moulinage -moulinet -moulleen -moulrush -mouls -moulter -mouly -mound -moundiness -moundlet -moundwork -moundy -mount -mountable -mountably -mountain -mountained -mountaineer -mountainet -mountainette -mountainless -mountainlike -mountainous -mountainously -mountainousness -mountainside -mountaintop -mountainward -mountainwards -mountainy -mountant -mountebank -mountebankery -mountebankish -mountebankism -mountebankly -mounted -mounter -mounting -mountingly -mountlet -mounture -moup -mourn -mourner -mourneress -mournful -mournfully -mournfulness -mourning -mourningly -mournival -mournsome -mouse -mousebane -mousebird -mousefish -mousehawk -mousehole -mousehound -mousekin -mouselet -mouselike -mouseproof -mouser -mousery -mouseship -mousetail -mousetrap -mouseweb -mousey -mousily -mousiness -mousing -mousingly -mousle -mousmee -mousquetaire -mousse -moustoc -mousy -mout -moutan -mouth -mouthable -mouthbreeder -mouthed -mouther -mouthful -mouthily -mouthiness -mouthing -mouthingly -mouthishly -mouthless -mouthlike -mouthpiece -mouthroot -mouthwash -mouthwise -mouthy -mouton -moutonnee -mouzah -mouzouna -movability -movable -movableness -movably -movant -move -moveability -moveableness -moveably -moveless -movelessly -movelessness -movement -mover -movie -moviedom -movieize -movieland -moving -movingly -movingness -mow -mowable -mowana -mowburn -mowburnt -mowch -mowcht -mower -mowha -mowie -mowing -mowland -mown -mowra -mowrah -mowse -mowstead -mowt -mowth -moxa -moxieberry -moy -moyen -moyenless -moyenne -moyite -moyle -moyo -mozambique -mozemize -mozing -mozzetta -mpret -mu -muang -mubarat -mucago -mucaro -mucedin -mucedinaceous -mucedine -mucedinous -much -muchfold -muchly -muchness -mucic -mucid -mucidness -muciferous -mucific -muciform -mucigen -mucigenous -mucilage -mucilaginous -mucilaginously -mucilaginousness -mucin -mucinogen -mucinoid -mucinous -muciparous -mucivore -mucivorous -muck -muckender -mucker -muckerish -muckerism -mucket -muckiness -muckite -muckle -muckluck -muckman -muckment -muckmidden -muckna -muckrake -muckraker -mucksweat -mucksy -muckthrift -muckweed -muckworm -mucky -mucluc -mucocele -mucocellulose -mucocellulosic -mucocutaneous -mucodermal -mucofibrous -mucoflocculent -mucoid -mucomembranous -muconic -mucoprotein -mucopurulent -mucopus -mucor -mucoraceous -mucorine -mucorioid -mucormycosis -mucorrhea -mucosa -mucosal -mucosanguineous -mucose -mucoserous -mucosity -mucosocalcareous -mucosogranular -mucosopurulent -mucososaccharine -mucous -mucousness -mucro -mucronate -mucronately -mucronation -mucrones -mucroniferous -mucroniform -mucronulate -mucronulatous -muculent -mucus -mucusin -mud -mudar -mudbank -mudcap -mudd -mudde -mudden -muddify -muddily -muddiness -mudding -muddish -muddle -muddlebrained -muddledom -muddlehead -muddleheaded -muddleheadedness -muddlement -muddleproof -muddler -muddlesome -muddlingly -muddy -muddybrained -muddybreast -muddyheaded -mudee -mudfish -mudflow -mudguard -mudhead -mudhole -mudhopper -mudir -mudiria -mudland -mudlark -mudlarker -mudless -mudproof -mudra -mudsill -mudskipper -mudslinger -mudslinging -mudspate -mudstain -mudstone -mudsucker -mudtrack -mudweed -mudwort -muermo -muezzin -muff -muffed -muffet -muffetee -muffin -muffineer -muffish -muffishness -muffle -muffled -muffleman -muffler -mufflin -muffy -mufti -mufty -mug -muga -mugearite -mugful -mugg -mugger -mugget -muggily -mugginess -muggins -muggish -muggles -muggy -mughouse -mugience -mugiency -mugient -mugiliform -mugiloid -mugweed -mugwort -mugwump -mugwumpery -mugwumpian -mugwumpism -muhammadi -muid -muir -muirburn -muircock -muirfowl -muishond -muist -mujtahid -mukluk -muktar -muktatma -mukti -mulaprakriti -mulatta -mulatto -mulattoism -mulattress -mulberry -mulch -mulcher -mulct -mulctable -mulctary -mulctation -mulctative -mulctatory -mulctuary -mulder -mule -muleback -mulefoot -mulefooted -muleman -muleta -muleteer -muletress -muletta -mulewort -muley -mulga -muliebral -muliebria -muliebrile -muliebrity -muliebrous -mulier -mulierine -mulierose -mulierosity -mulish -mulishly -mulishness -mulism -mulita -mulk -mull -mulla -mullah -mullar -mullein -mullenize -muller -mullet -mulletry -mullets -mulley -mullid -mulligan -mulligatawny -mulligrubs -mullion -mullite -mullock -mullocker -mullocky -mulloid -mulloway -mulmul -mulse -mulsify -mult -multangular -multangularly -multangularness -multangulous -multangulum -multanimous -multarticulate -multeity -multiangular -multiareolate -multiarticular -multiarticulate -multiarticulated -multiaxial -multiblade -multibladed -multibranched -multibranchiate -multibreak -multicamerate -multicapitate -multicapsular -multicarinate -multicarinated -multicellular -multicentral -multicentric -multicharge -multichord -multichrome -multiciliate -multiciliated -multicipital -multicircuit -multicoccous -multicoil -multicolor -multicolored -multicolorous -multicomponent -multiconductor -multiconstant -multicore -multicorneal -multicostate -multicourse -multicrystalline -multicuspid -multicuspidate -multicycle -multicylinder -multicylindered -multidentate -multidenticulate -multidenticulated -multidigitate -multidimensional -multidirectional -multidisperse -multiengine -multiengined -multiexhaust -multifaced -multifaceted -multifactorial -multifamilial -multifarious -multifariously -multifariousness -multiferous -multifetation -multifibered -multifid -multifidly -multifidous -multifidus -multifilament -multifistular -multiflagellate -multiflagellated -multiflash -multiflorous -multiflow -multiflue -multifocal -multifoil -multifoiled -multifold -multifoliate -multifoliolate -multiform -multiformed -multiformity -multifurcate -multiganglionic -multigap -multigranulate -multigranulated -multigraph -multigrapher -multiguttulate -multigyrate -multihead -multihearth -multihued -multijet -multijugate -multijugous -multilaciniate -multilamellar -multilamellate -multilamellous -multilaminar -multilaminate -multilaminated -multilateral -multilaterally -multilighted -multilineal -multilinear -multilingual -multilinguist -multilirate -multiliteral -multilobar -multilobate -multilobe -multilobed -multilobular -multilobulate -multilobulated -multilocation -multilocular -multiloculate -multiloculated -multiloquence -multiloquent -multiloquious -multiloquous -multiloquy -multimacular -multimammate -multimarble -multimascular -multimedial -multimetalic -multimetallism -multimetallist -multimillion -multimillionaire -multimodal -multimodality -multimolecular -multimotor -multimotored -multinational -multinervate -multinervose -multinodal -multinodate -multinodous -multinodular -multinomial -multinominal -multinominous -multinuclear -multinucleate -multinucleated -multinucleolar -multinucleolate -multinucleolated -multiovular -multiovulate -multipara -multiparient -multiparity -multiparous -multipartisan -multipartite -multiped -multiperforate -multiperforated -multipersonal -multiphase -multiphaser -multiphotography -multipinnate -multiplane -multiple -multiplepoinding -multiplet -multiplex -multipliable -multipliableness -multiplicability -multiplicable -multiplicand -multiplicate -multiplication -multiplicational -multiplicative -multiplicatively -multiplicator -multiplicity -multiplier -multiply -multiplying -multipointed -multipolar -multipole -multiported -multipotent -multipresence -multipresent -multiradial -multiradiate -multiradiated -multiradicate -multiradicular -multiramified -multiramose -multiramous -multirate -multireflex -multirooted -multirotation -multirotatory -multisaccate -multisacculate -multisacculated -multiscience -multiseated -multisect -multisector -multisegmental -multisegmentate -multisegmented -multisensual -multiseptate -multiserial -multiserially -multiseriate -multishot -multisiliquous -multisonous -multispeed -multispermous -multispicular -multispiculate -multispindle -multispinous -multispiral -multispired -multistage -multistaminate -multistoried -multistory -multistratified -multistratous -multistriate -multisulcate -multisulcated -multisyllabic -multisyllability -multisyllable -multitarian -multitentaculate -multitheism -multithreaded -multititular -multitoed -multitoned -multitube -multituberculate -multituberculated -multituberculism -multituberculy -multitubular -multitude -multitudinal -multitudinary -multitudinism -multitudinist -multitudinistic -multitudinosity -multitudinous -multitudinously -multitudinousness -multiturn -multivagant -multivalence -multivalency -multivalent -multivalve -multivalved -multivalvular -multivane -multivariant -multivarious -multiversant -multiverse -multivibrator -multivincular -multivious -multivocal -multivocalness -multivoiced -multivolent -multivoltine -multivolumed -multivorous -multocular -multum -multungulate -multure -multurer -mum -mumble -mumblebee -mumblement -mumbler -mumbling -mumblingly -mummer -mummery -mummichog -mummick -mummied -mummification -mummiform -mummify -mumming -mummy -mummydom -mummyhood -mummylike -mumness -mump -mumper -mumphead -mumpish -mumpishly -mumpishness -mumps -mumpsimus -mumruffin -mun -munch -muncheel -muncher -munchet -mund -mundane -mundanely -mundaneness -mundanism -mundanity -mundatory -mundic -mundificant -mundification -mundifier -mundify -mundil -mundivagant -mundle -mung -munga -munge -mungey -mungo -mungofa -munguba -mungy -municipal -municipalism -municipalist -municipality -municipalization -municipalize -municipalizer -municipally -municipium -munific -munificence -munificency -munificent -munificently -munificentness -muniment -munition -munitionary -munitioneer -munitioner -munitions -munity -munj -munjeet -munjistin -munnion -munshi -munt -muntin -muntjac -mura -muraenoid -murage -mural -muraled -muralist -murally -murasakite -murchy -murder -murderer -murderess -murdering -murderingly -murderish -murderment -murderous -murderously -murderousness -murdrum -mure -murenger -murex -murexan -murexide -murga -murgavi -murgeon -muriate -muriated -muriatic -muricate -muricid -muriciform -muricine -muricoid -muriculate -murid -muridism -muriform -muriformly -murine -murinus -muriti -murium -murk -murkily -murkiness -murkish -murkly -murkness -murksome -murky -murlin -murly -murmur -murmuration -murmurator -murmurer -murmuring -murmuringly -murmurish -murmurless -murmurlessly -murmurous -murmurously -muromontite -murphy -murra -murrain -murre -murrelet -murrey -murrhine -murrina -murrnong -murshid -murumuru -muruxi -murva -murza -musaceous -musal -musang -musar -muscade -muscadel -muscadine -muscardine -muscariform -muscarine -muscat -muscatel -muscatorium -muscicapine -muscicide -muscicole -muscicoline -muscicolous -muscid -musciform -muscle -muscled -muscleless -musclelike -muscling -muscly -muscoid -muscologic -muscological -muscologist -muscology -muscone -muscose -muscoseness -muscosity -muscot -muscovadite -muscovado -muscovite -muscovitization -muscovitize -muscovy -muscular -muscularity -muscularize -muscularly -musculation -musculature -muscule -musculin -musculoarterial -musculocellular -musculocutaneous -musculodermic -musculoelastic -musculofibrous -musculointestinal -musculoligamentous -musculomembranous -musculopallial -musculophrenic -musculospinal -musculospiral -musculotegumentary -musculotendinous -muse -mused -museful -musefully -museist -museless -muselike -museographist -museography -museologist -museology -muser -musery -musette -museum -museumize -mush -musha -mushaa -mushed -musher -mushhead -mushheaded -mushheadedness -mushily -mushiness -mushla -mushmelon -mushrebiyeh -mushroom -mushroomer -mushroomic -mushroomlike -mushroomy -mushru -mushy -music -musical -musicale -musicality -musicalization -musicalize -musically -musicalness -musicate -musician -musiciana -musicianer -musicianly -musicianship -musicker -musicless -musiclike -musicmonger -musico -musicoartistic -musicodramatic -musicofanatic -musicographer -musicography -musicological -musicologist -musicologue -musicology -musicomania -musicomechanical -musicophilosophical -musicophobia -musicophysical -musicopoetic -musicotherapy -musicproof -musie -musily -musimon -musing -musingly -musk -muskat -muskeg -muskeggy -muskellunge -musket -musketade -musketeer -musketlike -musketoon -musketproof -musketry -muskflower -muskie -muskiness -muskish -musklike -muskmelon -muskrat -muskroot -muskwood -musky -muslin -muslined -muslinet -musnud -musophagine -musquash -musquashroot -musquashweed -musquaspen -musquaw -musrol -muss -mussable -mussably -mussal -mussalchee -mussel -musseled -musseler -mussily -mussiness -mussitate -mussitation -mussuk -mussurana -mussy -must -mustache -mustached -mustachial -mustachio -mustachioed -mustafina -mustang -mustanger -mustard -mustarder -mustee -mustelid -musteline -mustelinous -musteloid -muster -musterable -musterdevillers -musterer -mustermaster -mustify -mustily -mustiness -mustnt -musty -muta -mutability -mutable -mutableness -mutably -mutafacient -mutage -mutagenic -mutant -mutarotate -mutarotation -mutase -mutate -mutation -mutational -mutationally -mutationism -mutationist -mutative -mutatory -mutawalli -mutch -mute -mutedly -mutely -muteness -mutesarif -mutescence -mutessarifat -muth -muthmannite -muthmassel -mutic -muticous -mutilate -mutilation -mutilative -mutilator -mutilatory -mutillid -mutilous -mutineer -mutinous -mutinously -mutinousness -mutiny -mutism -mutist -mutistic -mutive -mutivity -mutoscope -mutoscopic -mutsje -mutsuddy -mutt -mutter -mutterer -muttering -mutteringly -mutton -muttonbird -muttonchop -muttonfish -muttonhead -muttonheaded -muttonhood -muttonmonger -muttonwood -muttony -mutual -mutualism -mutualist -mutualistic -mutuality -mutualization -mutualize -mutually -mutualness -mutuary -mutuatitious -mutulary -mutule -mutuum -mux -muyusa -muzhik -muzz -muzzily -muzziness -muzzle -muzzler -muzzlewood -muzzy -my -myal -myalgia -myalgic -myalism -myall -myarian -myasthenia -myasthenic -myatonia -myatonic -myatony -myatrophy -mycele -mycelia -mycelial -mycelian -mycelioid -mycelium -myceloid -mycetism -mycetocyte -mycetogenesis -mycetogenetic -mycetogenic -mycetogenous -mycetoid -mycetological -mycetology -mycetoma -mycetomatous -mycetophagous -mycetophilid -mycetous -mycetozoan -mycetozoon -mycocecidium -mycocyte -mycoderm -mycoderma -mycodermatoid -mycodermatous -mycodermic -mycodermitis -mycodesmoid -mycodomatium -mycogastritis -mycohaemia -mycohemia -mycoid -mycologic -mycological -mycologically -mycologist -mycologize -mycology -mycomycete -mycomycetous -mycomyringitis -mycophagist -mycophagous -mycophagy -mycophyte -mycoplasm -mycoplasmic -mycoprotein -mycorhiza -mycorhizal -mycorrhizal -mycose -mycosin -mycosis -mycosozin -mycosterol -mycosymbiosis -mycotic -mycotrophic -mycteric -mycterism -myctophid -mydaleine -mydatoxine -mydine -mydriasine -mydriasis -mydriatic -mydriatine -myectomize -myectomy -myectopia -myectopy -myelalgia -myelapoplexy -myelasthenia -myelatrophy -myelauxe -myelemia -myelencephalic -myelencephalon -myelencephalous -myelic -myelin -myelinate -myelinated -myelination -myelinic -myelinization -myelinogenesis -myelinogenetic -myelinogeny -myelitic -myelitis -myeloblast -myeloblastic -myelobrachium -myelocele -myelocerebellar -myelocoele -myelocyst -myelocystic -myelocystocele -myelocyte -myelocythaemia -myelocythemia -myelocytic -myelocytosis -myelodiastasis -myeloencephalitis -myeloganglitis -myelogenesis -myelogenetic -myelogenous -myelogonium -myeloic -myeloid -myelolymphangioma -myelolymphocyte -myeloma -myelomalacia -myelomatoid -myelomatosis -myelomenia -myelomeningitis -myelomeningocele -myelomere -myelon -myelonal -myeloneuritis -myelonic -myeloparalysis -myelopathic -myelopathy -myelopetal -myelophthisis -myeloplast -myeloplastic -myeloplax -myeloplegia -myelopoiesis -myelopoietic -myelorrhagia -myelorrhaphy -myelosarcoma -myelosclerosis -myelospasm -myelospongium -myelosyphilis -myelosyphilosis -myelosyringosis -myelotherapy -myelozoan -myentasis -myenteric -myenteron -myesthesia -mygale -mygalid -mygaloid -myiasis -myiferous -myiodesopsia -myiosis -myitis -mykiss -myliobatid -myliobatine -myliobatoid -mylodont -mylohyoid -mylohyoidean -mylonite -mylonitic -mymarid -myna -mynpacht -mynpachtbrief -myoalbumin -myoalbumose -myoatrophy -myoblast -myoblastic -myocardiac -myocardial -myocardiogram -myocardiograph -myocarditic -myocarditis -myocardium -myocele -myocellulitis -myoclonic -myoclonus -myocoele -myocoelom -myocolpitis -myocomma -myocyte -myodegeneration -myodiastasis -myodynamia -myodynamic -myodynamics -myodynamiometer -myodynamometer -myoedema -myoelectric -myoendocarditis -myoepicardial -myoepithelial -myofibril -myofibroma -myogen -myogenesis -myogenetic -myogenic -myogenous -myoglobin -myoglobulin -myogram -myograph -myographer -myographic -myographical -myographist -myography -myohematin -myoid -myoidema -myokinesis -myolemma -myolipoma -myoliposis -myologic -myological -myologist -myology -myolysis -myoma -myomalacia -myomancy -myomantic -myomatous -myomectomy -myomelanosis -myomere -myometritis -myometrium -myomohysterectomy -myomorph -myomorphic -myomotomy -myoneme -myoneural -myoneuralgia -myoneurasthenia -myoneure -myoneuroma -myoneurosis -myonosus -myopachynsis -myoparalysis -myoparesis -myopathia -myopathic -myopathy -myope -myoperitonitis -myophan -myophore -myophorous -myophysical -myophysics -myopia -myopic -myopical -myopically -myoplasm -myoplastic -myoplasty -myopolar -myoporaceous -myoporad -myoproteid -myoprotein -myoproteose -myops -myopy -myorrhaphy -myorrhexis -myosalpingitis -myosarcoma -myosarcomatous -myosclerosis -myoscope -myoseptum -myosin -myosinogen -myosinose -myosis -myositic -myositis -myosote -myospasm -myospasmia -myosuture -myosynizesis -myotacismus -myotasis -myotenotomy -myothermic -myotic -myotome -myotomic -myotomy -myotonia -myotonic -myotonus -myotony -myotrophy -myowun -myoxine -myrabalanus -myrabolam -myrcene -myrcia -myriacanthous -myriacoulomb -myriad -myriaded -myriadfold -myriadly -myriadth -myriagram -myriagramme -myrialiter -myrialitre -myriameter -myriametre -myriapod -myriapodan -myriapodous -myriarch -myriarchy -myriare -myrica -myricaceous -myricetin -myricin -myricyl -myricylic -myringa -myringectomy -myringitis -myringodectomy -myringodermatitis -myringomycosis -myringoplasty -myringotome -myringotomy -myriological -myriologist -myriologue -myriophyllite -myriophyllous -myriopodous -myriorama -myrioscope -myriosporous -myriotheism -myriotrichiaceous -myristate -myristic -myristica -myristicaceous -myristicivorous -myristin -myristone -myrmecobine -myrmecochorous -myrmecochory -myrmecoid -myrmecoidy -myrmecological -myrmecologist -myrmecology -myrmecophagine -myrmecophagoid -myrmecophagous -myrmecophile -myrmecophilism -myrmecophilous -myrmecophily -myrmecophobic -myrmecophyte -myrmecophytic -myrmekite -myrmicid -myrmicine -myrmicoid -myrmotherine -myrobalan -myron -myronate -myronic -myrosin -myrosinase -myrothamnaceous -myrrh -myrrhed -myrrhic -myrrhine -myrrhol -myrrhophore -myrrhy -myrsinaceous -myrsinad -myrtaceous -myrtal -myrtiform -myrtle -myrtleberry -myrtlelike -myrtol -mysel -myself -mysell -mysid -mysidean -mysogynism -mysoid -mysophobia -mysosophist -mysost -myst -mystacial -mystagogic -mystagogical -mystagogically -mystagogue -mystagogy -mystax -mysterial -mysteriarch -mysteriosophic -mysteriosophy -mysterious -mysteriously -mysteriousness -mysterize -mystery -mystes -mystic -mystical -mysticality -mystically -mysticalness -mysticete -mysticetous -mysticism -mysticity -mysticize -mysticly -mystific -mystifically -mystification -mystificator -mystificatory -mystifiedly -mystifier -mystify -mystifyingly -mytacism -myth -mythical -mythicalism -mythicality -mythically -mythicalness -mythicism -mythicist -mythicize -mythicizer -mythification -mythify -mythism -mythist -mythize -mythland -mythmaker -mythmaking -mythoclast -mythoclastic -mythogenesis -mythogonic -mythogony -mythographer -mythographist -mythography -mythogreen -mythoheroic -mythohistoric -mythologema -mythologer -mythological -mythologically -mythologist -mythologize -mythologizer -mythologue -mythology -mythomania -mythomaniac -mythometer -mythonomy -mythopastoral -mythopoeic -mythopoeism -mythopoeist -mythopoem -mythopoesis -mythopoesy -mythopoet -mythopoetic -mythopoetize -mythopoetry -mythos -mythus -mytilacean -mytilaceous -mytilid -mytiliform -mytiloid -mytilotoxine -myxa -myxadenitis -myxadenoma -myxaemia -myxamoeba -myxangitis -myxasthenia -myxedema -myxedematoid -myxedematous -myxedemic -myxemia -myxinoid -myxo -myxobacteriaceous -myxoblastoma -myxochondroma -myxochondrosarcoma -myxocystoma -myxocyte -myxoenchondroma -myxofibroma -myxofibrosarcoma -myxoflagellate -myxogaster -myxogastric -myxogastrous -myxoglioma -myxoid -myxoinoma -myxolipoma -myxoma -myxomatosis -myxomatous -myxomycete -myxomycetous -myxomyoma -myxoneuroma -myxopapilloma -myxophycean -myxopod -myxopodan -myxopodium -myxopodous -myxopoiesis -myxorrhea -myxosarcoma -myxospongian -myxospore -myxosporidian -myxosporous -myxotheca -myzodendraceous -myzont -myzostomatous -myzostome -myzostomid -myzostomidan -myzostomous -n -na -naa -naam -nab -nabak -nabber -nabk -nabla -nable -nabob -nabobery -nabobess -nabobical -nabobish -nabobishly -nabobism -nabobry -nabobship -nabs -nacarat -nacarine -nace -nacelle -nach -nachani -nacket -nacre -nacred -nacreous -nacrine -nacrite -nacrous -nacry -nadder -nadir -nadiral -nadorite -nae -naebody -naegate -naegates -nael -naemorhedine -naether -naething -nag -naga -nagaika -nagana -nagara -nagatelite -nagger -naggin -nagging -naggingly -naggingness -naggish -naggle -naggly -naggy -naght -nagkassar -nagmaal -nagman -nagnag -nagnail -nagor -nagsman -nagster -nagual -nagualism -nagualist -nagyagite -naiad -naiadaceous -naiant -naid -naif -naifly -naig -naigie -naik -nail -nailbin -nailbrush -nailer -naileress -nailery -nailhead -nailing -nailless -naillike -nailprint -nailproof -nailrod -nailshop -nailsick -nailsmith -nailwort -naily -nain -nainsel -nainsook -naio -naipkin -nairy -nais -naish -naissance -naissant -naither -naive -naively -naiveness -naivete -naivety -nak -nake -naked -nakedish -nakedize -nakedly -nakedness -nakedweed -nakedwood -naker -nakhlite -nakhod -nakhoda -nako -nakong -nakoo -nallah -nam -namability -namable -namaqua -namaycush -namaz -namazlik -namda -name -nameability -nameable -nameboard -nameless -namelessly -namelessness -nameling -namely -namer -namesake -naming -nammad -nan -nana -nanawood -nancy -nandi -nandine -nandow -nandu -nane -nanes -nanga -nanism -nanization -nankeen -nankin -nannander -nannandrium -nannandrous -nannoplankton -nanny -nannyberry -nannybush -nanocephalia -nanocephalic -nanocephalism -nanocephalous -nanocephalus -nanocephaly -nanoid -nanomelia -nanomelous -nanomelus -nanosoma -nanosomia -nanosomus -nanpie -nant -nantle -nantokite -naological -naology -naometry -naos -nap -napa -napal -napalm -nape -napead -napecrest -napellus -naperer -napery -naphtha -naphthacene -naphthalate -naphthalene -naphthaleneacetic -naphthalenesulphonic -naphthalenic -naphthalenoid -naphthalic -naphthalidine -naphthalin -naphthaline -naphthalization -naphthalize -naphthalol -naphthamine -naphthanthracene -naphthene -naphthenic -naphthinduline -naphthionate -naphtho -naphthoic -naphthol -naphtholate -naphtholize -naphtholsulphonate -naphtholsulphonic -naphthoquinone -naphthoresorcinol -naphthosalol -naphthous -naphthoxide -naphthyl -naphthylamine -naphthylaminesulphonic -naphthylene -naphthylic -naphtol -napiform -napkin -napkining -napless -naplessness -napoleon -napoleonite -napoo -nappe -napped -napper -nappiness -napping -nappishness -nappy -naprapath -naprapathy -napron -napthionic -napu -nar -narceine -narcism -narcissi -narcissism -narcissist -narcissistic -narcist -narcistic -narcoanalysis -narcoanesthesia -narcohypnia -narcohypnosis -narcolepsy -narcoleptic -narcoma -narcomania -narcomaniac -narcomaniacal -narcomatous -narcomedusan -narcose -narcosis -narcostimulant -narcosynthesis -narcotherapy -narcotia -narcotic -narcotical -narcotically -narcoticalness -narcoticism -narcoticness -narcotina -narcotine -narcotinic -narcotism -narcotist -narcotization -narcotize -narcous -nard -nardine -nardoo -nares -narghile -nargil -narial -naric -narica -naricorn -nariform -narine -naringenin -naringin -nark -narky -narr -narra -narras -narratable -narrate -narrater -narration -narrational -narrative -narratively -narrator -narratory -narratress -narratrix -narrawood -narrow -narrower -narrowhearted -narrowheartedness -narrowingness -narrowish -narrowly -narrowness -narrowy -narsarsukite -narsinga -narthecal -narthex -narwhal -narwhalian -nary -nasab -nasal -nasalis -nasalism -nasality -nasalization -nasalize -nasally -nasalward -nasalwards -nasard -nascence -nascency -nascent -nasch -naseberry -nasethmoid -nash -nashgab -nashgob -nasi -nasial -nasicorn -nasicornous -nasiform -nasilabial -nasillate -nasillation -nasioalveolar -nasiobregmatic -nasioinial -nasiomental -nasion -nasitis -nasoalveola -nasoantral -nasobasilar -nasobronchial -nasobuccal -nasoccipital -nasociliary -nasoethmoidal -nasofrontal -nasolabial -nasolachrymal -nasological -nasologist -nasology -nasomalar -nasomaxillary -nasonite -nasoorbital -nasopalatal -nasopalatine -nasopharyngeal -nasopharyngitis -nasopharynx -nasoprognathic -nasoprognathism -nasorostral -nasoscope -nasoseptal -nasosinuitis -nasosinusitis -nasosubnasal -nasoturbinal -nasrol -nassellarian -nassology -nast -nastaliq -nastic -nastika -nastily -nastiness -nasturtion -nasturtium -nasty -nasus -nasute -nasuteness -nasutiform -nasutus -nat -natability -nataka -natal -natality -nataloin -natals -natant -natantly -natation -natational -natator -natatorial -natatorious -natatorium -natatory -natch -natchbone -natchnee -nates -nathe -nather -nathless -naticiform -naticine -naticoid -natiform -natimortality -nation -national -nationalism -nationalist -nationalistic -nationalistically -nationality -nationalization -nationalize -nationalizer -nationally -nationalness -nationalty -nationhood -nationless -nationwide -native -natively -nativeness -nativism -nativist -nativistic -nativity -natr -natricine -natrium -natrochalcite -natrojarosite -natrolite -natron -natter -nattered -natteredness -natterjack -nattily -nattiness -nattle -natty -natuary -natural -naturalesque -naturalism -naturalist -naturalistic -naturalistically -naturality -naturalization -naturalize -naturalizer -naturally -naturalness -nature -naturecraft -naturelike -naturing -naturism -naturist -naturistic -naturistically -naturize -naturopath -naturopathic -naturopathist -naturopathy -naucrar -naucrary -naufragous -nauger -naught -naughtily -naughtiness -naughty -naujaite -naumachia -naumachy -naumannite -naumk -naumkeag -naumkeager -naunt -nauntle -naupathia -nauplial -naupliiform -nauplioid -nauplius -nauropometer -nauscopy -nausea -nauseant -nauseaproof -nauseate -nauseatingly -nauseation -nauseous -nauseously -nauseousness -naut -nautch -nauther -nautic -nautical -nauticality -nautically -nautics -nautiform -nautilacean -nautilicone -nautiliform -nautilite -nautiloid -nautiloidean -nautilus -naval -navalese -navalism -navalist -navalistic -navalistically -navally -navar -navarch -navarchy -nave -navel -naveled -navellike -navelwort -navet -navette -navew -navicella -navicert -navicula -naviculaeform -navicular -naviculare -naviculoid -naviform -navigability -navigable -navigableness -navigably -navigant -navigate -navigation -navigational -navigator -navigerous -navipendular -navipendulum -navite -navvy -navy -naw -nawab -nawabship -nawt -nay -nayaur -naysay -naysayer -nayward -nayword -naze -nazim -nazir -ne -nea -neal -neallotype -neanic -neanthropic -neap -neaped -nearable -nearabout -nearabouts -nearaivays -nearaway -nearby -nearest -nearish -nearly -nearmost -nearness -nearsighted -nearsightedly -nearsightedness -nearthrosis -neat -neaten -neath -neatherd -neatherdess -neathmost -neatify -neatly -neatness -neb -neback -nebalian -nebalioid -nebbed -nebbuck -nebbuk -nebby -nebel -nebelist -nebenkern -nebris -nebula -nebulae -nebular -nebularization -nebularize -nebulated -nebulation -nebule -nebulescent -nebuliferous -nebulite -nebulium -nebulization -nebulize -nebulizer -nebulose -nebulosity -nebulous -nebulously -nebulousness -necessar -necessarian -necessarianism -necessarily -necessariness -necessary -necessism -necessist -necessitarian -necessitarianism -necessitate -necessitatedly -necessitatingly -necessitation -necessitative -necessitous -necessitously -necessitousness -necessitude -necessity -neck -neckar -neckatee -neckband -neckcloth -necked -necker -neckercher -neckerchief -neckful -neckguard -necking -neckinger -necklace -necklaced -necklaceweed -neckless -necklet -necklike -neckline -neckmold -neckpiece -neckstock -necktie -necktieless -neckward -neckwear -neckweed -neckyoke -necrectomy -necremia -necrobacillary -necrobacillosis -necrobiosis -necrobiotic -necrogenic -necrogenous -necrographer -necrolatry -necrologic -necrological -necrologically -necrologist -necrologue -necrology -necromancer -necromancing -necromancy -necromantic -necromantically -necromorphous -necronite -necropathy -necrophagan -necrophagous -necrophile -necrophilia -necrophilic -necrophilism -necrophilistic -necrophilous -necrophily -necrophobia -necrophobic -necropoleis -necropoles -necropolis -necropolitan -necropsy -necroscopic -necroscopical -necroscopy -necrose -necrosis -necrotic -necrotization -necrotize -necrotomic -necrotomist -necrotomy -necrotype -necrotypic -nectar -nectareal -nectarean -nectared -nectareous -nectareously -nectareousness -nectarial -nectarian -nectaried -nectariferous -nectarine -nectarious -nectarium -nectarivorous -nectarize -nectarlike -nectarous -nectary -nectiferous -nectocalycine -nectocalyx -nectophore -nectopod -nectriaceous -nedder -neddy -nee -neebor -neebour -need -needer -needfire -needful -needfully -needfulness -needgates -needham -needily -neediness -needing -needle -needlebill -needlebook -needlebush -needlecase -needled -needlefish -needleful -needlelike -needlemaker -needlemaking -needleman -needlemonger -needleproof -needler -needles -needless -needlessly -needlessness -needlestone -needlewoman -needlewood -needlework -needleworked -needleworker -needling -needly -needments -needs -needsome -needy -neeger -neeld -neele -neelghan -neem -neencephalic -neencephalon -neep -neepour -neer -neese -neet -neetup -neeze -nef -nefandous -nefandousness -nefarious -nefariously -nefariousness -nefast -neffy -neftgil -negate -negatedness -negation -negationalist -negationist -negative -negatively -negativeness -negativer -negativism -negativist -negativistic -negativity -negator -negatory -negatron -neger -neginoth -neglect -neglectable -neglectedly -neglectedness -neglecter -neglectful -neglectfully -neglectfulness -neglectingly -neglection -neglective -neglectively -neglector -neglectproof -negligee -negligence -negligency -negligent -negligently -negligibility -negligible -negligibleness -negligibly -negotiability -negotiable -negotiant -negotiate -negotiation -negotiator -negotiatory -negotiatress -negotiatrix -negrillo -negrine -negro -negrodom -negrohead -negrohood -negroish -negrolike -negus -nehiloth -nei -neif -neigh -neighbor -neighbored -neighborer -neighboress -neighborhood -neighboring -neighborless -neighborlike -neighborliness -neighborly -neighborship -neighborstained -neighbourless -neighbourlike -neighbourship -neigher -neiper -neist -neither -nekton -nektonic -nelson -nelsonite -nelumbian -nema -nemaline -nemalite -nematelminth -nemathece -nemathecial -nemathecium -nemathelminth -nematic -nematoblast -nematoblastic -nematoceran -nematocerous -nematocide -nematocyst -nematocystic -nematode -nematodiasis -nematogene -nematogenic -nematogenous -nematognath -nematognathous -nematogone -nematogonous -nematoid -nematoidean -nematologist -nematology -nematophyton -nematozooid -nemertean -nemertine -nemertinean -nemertoid -nemeses -nemesic -nemoceran -nemocerous -nemophilist -nemophilous -nemophily -nemoral -nemoricole -nenta -nenuphar -neo -neoacademic -neoanthropic -neoarsphenamine -neoblastic -neobotanist -neobotany -neocerotic -neoclassic -neoclassicism -neoclassicist -neocosmic -neocracy -neocriticism -neocyanine -neocyte -neocytosis -neodamode -neodidymium -neodymium -neofetal -neofetus -neoformation -neoformative -neogamous -neogamy -neogenesis -neogenetic -neognathic -neognathous -neogrammarian -neogrammatical -neographic -neohexane -neoholmia -neoholmium -neoimpressionism -neoimpressionist -neolalia -neolater -neolatry -neolith -neolithic -neologian -neologianism -neologic -neological -neologically -neologism -neologist -neologistic -neologistical -neologization -neologize -neology -neomedievalism -neomenia -neomenian -neomiracle -neomodal -neomorph -neomorphic -neomorphism -neon -neonatal -neonate -neonatus -neonomian -neonomianism -neontology -neonychium -neopagan -neopaganism -neopaganize -neopallial -neopallium -neoparaffin -neophilism -neophilological -neophilologist -neophobia -neophobic -neophrastic -neophyte -neophytic -neophytish -neophytism -neoplasia -neoplasm -neoplasma -neoplasmata -neoplastic -neoplasticism -neoplasty -neoprene -neorama -neorealism -neornithic -neossin -neossology -neossoptile -neostriatum -neostyle -neoteinia -neoteinic -neotenia -neotenic -neoteny -neoteric -neoterically -neoterism -neoterist -neoteristic -neoterize -neothalamus -neotype -neovitalism -neovolcanic -neoytterbium -neoza -nep -nepenthaceous -nepenthe -nepenthean -nepenthes -neper -nephalism -nephalist -nephele -nepheligenous -nepheline -nephelinic -nephelinite -nephelinitic -nephelinitoid -nephelite -nephelognosy -nepheloid -nephelometer -nephelometric -nephelometrical -nephelometrically -nephelometry -nephelorometer -nepheloscope -nephesh -nephew -nephewship -nephogram -nephograph -nephological -nephologist -nephology -nephoscope -nephradenoma -nephralgia -nephralgic -nephrapostasis -nephratonia -nephrauxe -nephrectasia -nephrectasis -nephrectomize -nephrectomy -nephrelcosis -nephremia -nephremphraxis -nephria -nephric -nephridia -nephridial -nephridiopore -nephridium -nephrism -nephrite -nephritic -nephritical -nephritis -nephroabdominal -nephrocardiac -nephrocele -nephrocoele -nephrocolic -nephrocolopexy -nephrocoloptosis -nephrocystitis -nephrocystosis -nephrocyte -nephrodinic -nephroerysipelas -nephrogastric -nephrogenetic -nephrogenic -nephrogenous -nephrogonaduct -nephrohydrosis -nephrohypertrophy -nephroid -nephrolith -nephrolithic -nephrolithotomy -nephrologist -nephrology -nephrolysin -nephrolysis -nephrolytic -nephromalacia -nephromegaly -nephromere -nephron -nephroncus -nephroparalysis -nephropathic -nephropathy -nephropexy -nephrophthisis -nephropore -nephroptosia -nephroptosis -nephropyelitis -nephropyeloplasty -nephropyosis -nephrorrhagia -nephrorrhaphy -nephros -nephrosclerosis -nephrosis -nephrostoma -nephrostome -nephrostomial -nephrostomous -nephrostomy -nephrotome -nephrotomize -nephrotomy -nephrotoxic -nephrotoxicity -nephrotoxin -nephrotuberculosis -nephrotyphoid -nephrotyphus -nephrozymosis -nepionic -nepman -nepotal -nepote -nepotic -nepotious -nepotism -nepotist -nepotistical -nepouite -neptunism -neptunist -neptunium -nereidiform -nereite -nerine -neritic -neritoid -nerterology -nerval -nervate -nervation -nervature -nerve -nerveless -nervelessly -nervelessness -nervelet -nerveproof -nerver -nerveroot -nervid -nerviduct -nervily -nervimotion -nervimotor -nervimuscular -nervine -nerviness -nerving -nervish -nervism -nervomuscular -nervosanguineous -nervose -nervosism -nervosity -nervous -nervously -nervousness -nervular -nervule -nervulet -nervulose -nervuration -nervure -nervy -nescience -nescient -nese -nesh -neshly -neshness -nesiote -nesquehonite -ness -nesslerization -nesslerize -nest -nestable -nestage -nester -nestful -nestiatria -nestitherapy -nestle -nestler -nestlike -nestling -nestorine -nesty -net -netball -netbraider -netbush -netcha -nete -neter -netful -neth -netheist -nether -nethermore -nethermost -netherstock -netherstone -netherward -netherwards -neti -netleaf -netlike -netmaker -netmaking -netman -netmonger -netop -netsman -netsuke -nettable -netted -netter -netting -nettle -nettlebed -nettlebird -nettlefire -nettlefish -nettlefoot -nettlelike -nettlemonger -nettler -nettlesome -nettlewort -nettling -nettly -netty -netwise -network -neugroschen -neuma -neumatic -neumatize -neume -neumic -neurad -neuradynamia -neural -neurale -neuralgia -neuralgiac -neuralgic -neuralgiform -neuralgy -neuralist -neurapophyseal -neurapophysial -neurapophysis -neurarthropathy -neurasthenia -neurasthenic -neurasthenical -neurasthenically -neurataxia -neurataxy -neuration -neuratrophia -neuratrophic -neuratrophy -neuraxial -neuraxis -neuraxon -neuraxone -neurectasia -neurectasis -neurectasy -neurectome -neurectomic -neurectomy -neurectopia -neurectopy -neurenteric -neurepithelium -neurergic -neurexairesis -neurhypnology -neurhypnotist -neuriatry -neuric -neurilema -neurilematic -neurilemma -neurilemmal -neurilemmatic -neurilemmatous -neurilemmitis -neurility -neurin -neurine -neurinoma -neurism -neurite -neuritic -neuritis -neuroanatomical -neuroanatomy -neurobiotactic -neurobiotaxis -neuroblast -neuroblastic -neuroblastoma -neurocanal -neurocardiac -neurocele -neurocentral -neurocentrum -neurochemistry -neurochitin -neurochondrite -neurochord -neurochorioretinitis -neurocirculatory -neurocity -neuroclonic -neurocoele -neurocoelian -neurocyte -neurocytoma -neurodegenerative -neurodendrite -neurodendron -neurodermatitis -neurodermatosis -neurodermitis -neurodiagnosis -neurodynamic -neurodynia -neuroepidermal -neuroepithelial -neuroepithelium -neurofibril -neurofibrilla -neurofibrillae -neurofibrillar -neurofibroma -neurofibromatosis -neurofil -neuroganglion -neurogastralgia -neurogastric -neurogenesis -neurogenetic -neurogenic -neurogenous -neuroglandular -neuroglia -neurogliac -neuroglial -neurogliar -neuroglic -neuroglioma -neurogliosis -neurogram -neurogrammic -neurographic -neurography -neurohistology -neurohumor -neurohumoral -neurohypnology -neurohypnotic -neurohypnotism -neurohypophysis -neuroid -neurokeratin -neurokyme -neurological -neurologist -neurologize -neurology -neurolymph -neurolysis -neurolytic -neuroma -neuromalacia -neuromalakia -neuromast -neuromastic -neuromatosis -neuromatous -neuromere -neuromerism -neuromerous -neuromimesis -neuromimetic -neuromotor -neuromuscular -neuromusculature -neuromyelitis -neuromyic -neuron -neuronal -neurone -neuronic -neuronism -neuronist -neuronophagia -neuronophagy -neuronym -neuronymy -neuroparalysis -neuroparalytic -neuropath -neuropathic -neuropathical -neuropathically -neuropathist -neuropathological -neuropathologist -neuropathology -neuropathy -neurophagy -neurophil -neurophile -neurophilic -neurophysiological -neurophysiology -neuropile -neuroplasm -neuroplasmic -neuroplasty -neuroplexus -neuropodial -neuropodium -neuropodous -neuropore -neuropsychiatric -neuropsychiatrist -neuropsychiatry -neuropsychic -neuropsychological -neuropsychologist -neuropsychology -neuropsychopathic -neuropsychopathy -neuropsychosis -neuropter -neuropteran -neuropterist -neuropteroid -neuropterological -neuropterology -neuropteron -neuropterous -neuroretinitis -neurorrhaphy -neurorthopteran -neurorthopterous -neurosal -neurosarcoma -neurosclerosis -neuroses -neurosis -neuroskeletal -neuroskeleton -neurosome -neurospasm -neurospongium -neurosthenia -neurosurgeon -neurosurgery -neurosurgical -neurosuture -neurosynapse -neurosyphilis -neurotendinous -neurotension -neurotherapeutics -neurotherapist -neurotherapy -neurothlipsis -neurotic -neurotically -neuroticism -neuroticize -neurotization -neurotome -neurotomical -neurotomist -neurotomize -neurotomy -neurotonic -neurotoxia -neurotoxic -neurotoxin -neurotripsy -neurotrophic -neurotrophy -neurotropic -neurotropism -neurovaccination -neurovaccine -neurovascular -neurovisceral -neurula -neurypnological -neurypnologist -neurypnology -neuter -neuterdom -neuterlike -neuterly -neuterness -neutral -neutralism -neutralist -neutrality -neutralization -neutralize -neutralizer -neutrally -neutralness -neutrino -neutroceptive -neutroceptor -neutroclusion -neutrologistic -neutron -neutropassive -neutrophile -neutrophilia -neutrophilic -neutrophilous -nevadite -neve -nevel -never -neverland -nevermore -nevertheless -nevo -nevoid -nevoy -nevus -nevyanskite -new -newberyite -newcal -newcome -newcomer -newel -newelty -newfangle -newfangled -newfangledism -newfangledly -newfangledness -newfanglement -newing -newings -newish -newlandite -newly -newlywed -newmarket -newness -news -newsbill -newsboard -newsboat -newsboy -newscast -newscaster -newscasting -newsful -newsiness -newsless -newslessness -newsletter -newsman -newsmonger -newsmongering -newsmongery -newspaper -newspaperdom -newspaperese -newspaperish -newspaperized -newspaperman -newspaperwoman -newspapery -newsprint -newsreader -newsreel -newsroom -newssheet -newsstand -newsteller -newsworthiness -newsworthy -newsy -newt -newtake -newton -newtonite -nexal -next -nextly -nextness -nexum -nexus -neyanda -ngai -ngaio -ngapi -ni -niacin -niata -nib -nibbana -nibbed -nibber -nibble -nibbler -nibblingly -nibby -niblick -niblike -nibong -nibs -nibsome -niccolic -niccoliferous -niccolite -niccolous -nice -niceish -niceling -nicely -niceness -nicesome -nicetish -nicety -niche -nichelino -nicher -nick -nickel -nickelage -nickelic -nickeliferous -nickeline -nickeling -nickelization -nickelize -nickellike -nickelodeon -nickelous -nickeltype -nicker -nickerpecker -nickey -nicking -nickle -nickname -nicknameable -nicknamee -nicknameless -nicknamer -nickstick -nicky -nicolayite -nicolo -nicotia -nicotian -nicotianin -nicotic -nicotinamide -nicotine -nicotinean -nicotined -nicotineless -nicotinian -nicotinic -nicotinism -nicotinize -nicotism -nicotize -nictate -nictation -nictitant -nictitate -nictitation -nid -nidal -nidamental -nidana -nidation -nidatory -niddering -niddick -niddle -nide -nidge -nidget -nidgety -nidi -nidicolous -nidificant -nidificate -nidification -nidificational -nidifugous -nidify -niding -nidologist -nidology -nidor -nidorosity -nidorous -nidorulent -nidulant -nidulariaceous -nidulate -nidulation -nidulus -nidus -niece -nieceless -nieceship -niellated -nielled -niellist -niello -niepa -nieve -nieveta -nievling -nife -nifesima -niffer -nific -nifle -nifling -nifty -nig -niggard -niggardize -niggardliness -niggardling -niggardly -niggardness -nigger -niggerdom -niggerfish -niggergoose -niggerhead -niggerish -niggerism -niggerling -niggertoe -niggerweed -niggery -niggle -niggler -niggling -nigglingly -niggly -nigh -nighly -nighness -night -nightcap -nightcapped -nightcaps -nightchurr -nightdress -nighted -nightfall -nightfish -nightflit -nightfowl -nightgown -nighthawk -nightie -nightingale -nightingalize -nightjar -nightless -nightlessness -nightlike -nightlong -nightly -nightman -nightmare -nightmarish -nightmarishly -nightmary -nights -nightshade -nightshine -nightshirt -nightstock -nightstool -nighttide -nighttime -nightwalker -nightwalking -nightward -nightwards -nightwear -nightwork -nightworker -nignay -nignye -nigori -nigranilin -nigraniline -nigre -nigrescence -nigrescent -nigresceous -nigrescite -nigrification -nigrified -nigrify -nigrine -nigrities -nigritude -nigritudinous -nigrosine -nigrous -nigua -nihilianism -nihilianistic -nihilification -nihilify -nihilism -nihilist -nihilistic -nihilitic -nihility -nikau -nikethamide -niklesite -nil -nilgai -nilpotent -nim -nimb -nimbated -nimbed -nimbi -nimbiferous -nimbification -nimble -nimblebrained -nimbleness -nimbly -nimbose -nimbosity -nimbus -nimbused -nimiety -niminy -nimious -nimmer -nimshi -nincom -nincompoop -nincompoopery -nincompoophood -nincompoopish -nine -ninebark -ninefold -nineholes -ninepegs -ninepence -ninepenny -ninepin -ninepins -ninescore -nineted -nineteen -nineteenfold -nineteenth -nineteenthly -ninetieth -ninety -ninetyfold -ninetyish -ninetyknot -ninny -ninnyhammer -ninnyish -ninnyism -ninnyship -ninnywatch -ninon -ninth -ninthly -nintu -ninut -niobate -niobic -niobite -niobium -niobous -niog -niota -nip -nipa -nipcheese -niphablepsia -niphotyphlosis -nipper -nipperkin -nippers -nippily -nippiness -nipping -nippingly -nippitate -nipple -nippleless -nipplewort -nipponium -nippy -nipter -nirles -nirmanakaya -nirvana -nirvanic -nisei -nishiki -nisnas -nispero -nisse -nisus -nit -nitch -nitchevo -nitency -nitently -niter -niterbush -nitered -nither -nithing -nitid -nitidous -nitidulid -nito -niton -nitramine -nitramino -nitranilic -nitraniline -nitrate -nitratine -nitration -nitrator -nitriary -nitric -nitridation -nitride -nitriding -nitridization -nitridize -nitrifaction -nitriferous -nitrifiable -nitrification -nitrifier -nitrify -nitrile -nitrite -nitro -nitroalizarin -nitroamine -nitroaniline -nitrobacteria -nitrobarite -nitrobenzene -nitrobenzol -nitrobenzole -nitrocalcite -nitrocellulose -nitrocellulosic -nitrochloroform -nitrocotton -nitroform -nitrogelatin -nitrogen -nitrogenate -nitrogenation -nitrogenic -nitrogenization -nitrogenize -nitrogenous -nitroglycerin -nitrohydrochloric -nitrolamine -nitrolic -nitrolime -nitromagnesite -nitrometer -nitrometric -nitromuriate -nitromuriatic -nitronaphthalene -nitroparaffin -nitrophenol -nitrophilous -nitrophyte -nitrophytic -nitroprussiate -nitroprussic -nitroprusside -nitrosamine -nitrosate -nitrosification -nitrosify -nitrosite -nitrosobacteria -nitrosochloride -nitrososulphuric -nitrostarch -nitrosulphate -nitrosulphonic -nitrosulphuric -nitrosyl -nitrosylsulphuric -nitrotoluene -nitrous -nitroxyl -nitryl -nitter -nitty -nitwit -nival -nivation -nivellate -nivellation -nivellator -nivellization -nivenite -niveous -nivicolous -nivosity -nix -nixie -niyoga -nizam -nizamate -nizamut -nizy -njave -no -noa -nob -nobber -nobbily -nobble -nobbler -nobbut -nobby -nobiliary -nobilify -nobilitate -nobilitation -nobility -noble -noblehearted -nobleheartedly -nobleheartedness -nobleman -noblemanly -nobleness -noblesse -noblewoman -nobley -nobly -nobody -nobodyness -nobs -nocake -nocardiosis -nocent -nocerite -nociassociation -nociceptive -nociceptor -nociperception -nociperceptive -nock -nocket -nocktat -noctambulant -noctambulation -noctambule -noctambulism -noctambulist -noctambulistic -noctambulous -noctidial -noctidiurnal -noctiferous -noctiflorous -noctiluca -noctilucal -noctilucan -noctilucence -noctilucent -noctilucin -noctilucine -noctilucous -noctiluminous -noctipotent -noctivagant -noctivagation -noctivagous -noctograph -noctovision -noctuid -noctuiform -noctule -nocturia -nocturn -nocturnal -nocturnally -nocturne -nocuity -nocuous -nocuously -nocuousness -nod -nodal -nodality -nodated -nodder -nodding -noddingly -noddle -noddy -node -noded -nodi -nodiak -nodical -nodicorn -nodiferous -nodiflorous -nodiform -nodosarian -nodosariform -nodosarine -nodose -nodosity -nodous -nodular -nodulate -nodulated -nodulation -nodule -noduled -nodulize -nodulose -nodulous -nodulus -nodus -noegenesis -noegenetic -noel -noematachograph -noematachometer -noematachometic -noetic -noetics -nog -nogada -nogal -noggen -noggin -nogging -noghead -nogheaded -nohow -noibwood -noil -noilage -noiler -noily -noint -nointment -noir -noise -noiseful -noisefully -noiseless -noiselessly -noiselessness -noisemaker -noisemaking -noiseproof -noisette -noisily -noisiness -noisome -noisomely -noisomeness -noisy -nokta -nolition -noll -nolle -nolleity -nollepros -nolo -noma -nomad -nomadian -nomadic -nomadical -nomadically -nomadism -nomadization -nomadize -nomancy -nomarch -nomarchy -nomarthral -nombril -nome -nomenclate -nomenclative -nomenclator -nomenclatorial -nomenclatorship -nomenclatory -nomenclatural -nomenclature -nomenclaturist -nomial -nomic -nomina -nominable -nominal -nominalism -nominalist -nominalistic -nominality -nominally -nominate -nominated -nominately -nomination -nominatival -nominative -nominatively -nominator -nominatrix -nominature -nominee -nomineeism -nominy -nomism -nomisma -nomismata -nomistic -nomocanon -nomocracy -nomogenist -nomogenous -nomogeny -nomogram -nomograph -nomographer -nomographic -nomographical -nomographically -nomography -nomological -nomologist -nomology -nomopelmous -nomophylax -nomophyllous -nomos -nomotheism -nomothete -nomothetes -nomothetic -nomothetical -non -nonabandonment -nonabdication -nonabiding -nonability -nonabjuration -nonabjurer -nonabolition -nonabridgment -nonabsentation -nonabsolute -nonabsolution -nonabsorbable -nonabsorbent -nonabsorptive -nonabstainer -nonabstaining -nonabstemious -nonabstention -nonabstract -nonacademic -nonacceding -nonacceleration -nonaccent -nonacceptance -nonacceptant -nonacceptation -nonaccess -nonaccession -nonaccessory -nonaccidental -nonaccompaniment -nonaccompanying -nonaccomplishment -nonaccredited -nonaccretion -nonachievement -nonacid -nonacknowledgment -nonacosane -nonacoustic -nonacquaintance -nonacquiescence -nonacquiescent -nonacquisitive -nonacquittal -nonact -nonactinic -nonaction -nonactionable -nonactive -nonactuality -nonaculeate -nonacute -nonadditive -nonadecane -nonadherence -nonadherent -nonadhesion -nonadhesive -nonadjacent -nonadjectival -nonadjournment -nonadjustable -nonadjustive -nonadjustment -nonadministrative -nonadmiring -nonadmission -nonadmitted -nonadoption -nonadornment -nonadult -nonadvancement -nonadvantageous -nonadventitious -nonadventurous -nonadverbial -nonadvertence -nonadvertency -nonadvocate -nonaerating -nonaerobiotic -nonaesthetic -nonaffection -nonaffiliated -nonaffirmation -nonage -nonagenarian -nonagency -nonagent -nonagesimal -nonagglutinative -nonagglutinator -nonaggression -nonaggressive -nonagon -nonagrarian -nonagreement -nonagricultural -nonahydrate -nonaid -nonair -nonalarmist -nonalcohol -nonalcoholic -nonalgebraic -nonalienating -nonalienation -nonalignment -nonalkaloidal -nonallegation -nonallegorical -nonalliterated -nonalliterative -nonallotment -nonalluvial -nonalphabetic -nonaltruistic -nonaluminous -nonamalgamable -nonamendable -nonamino -nonamotion -nonamphibious -nonamputation -nonanalogy -nonanalytical -nonanalyzable -nonanalyzed -nonanaphoric -nonanaphthene -nonanatomical -nonancestral -nonane -nonanesthetized -nonangelic -nonangling -nonanimal -nonannexation -nonannouncement -nonannuitant -nonannulment -nonanoic -nonanonymity -nonanswer -nonantagonistic -nonanticipative -nonantigenic -nonapologetic -nonapostatizing -nonapostolic -nonapparent -nonappealable -nonappearance -nonappearer -nonappearing -nonappellate -nonappendicular -nonapplication -nonapply -nonappointment -nonapportionable -nonapposable -nonappraisal -nonappreciation -nonapprehension -nonappropriation -nonapproval -nonaqueous -nonarbitrable -nonarcing -nonargentiferous -nonaristocratic -nonarithmetical -nonarmament -nonarmigerous -nonaromatic -nonarraignment -nonarrival -nonarsenical -nonarterial -nonartesian -nonarticulated -nonarticulation -nonartistic -nonary -nonascendancy -nonascertainable -nonascertaining -nonascetic -nonascription -nonaseptic -nonaspersion -nonasphalt -nonaspirate -nonaspiring -nonassault -nonassent -nonassentation -nonassented -nonassenting -nonassertion -nonassertive -nonassessable -nonassessment -nonassignable -nonassignment -nonassimilable -nonassimilating -nonassimilation -nonassistance -nonassistive -nonassociable -nonassortment -nonassurance -nonasthmatic -nonastronomical -nonathletic -nonatmospheric -nonatonement -nonattached -nonattachment -nonattainment -nonattendance -nonattendant -nonattention -nonattestation -nonattribution -nonattributive -nonaugmentative -nonauricular -nonauriferous -nonauthentication -nonauthoritative -nonautomatic -nonautomotive -nonavoidance -nonaxiomatic -nonazotized -nonbachelor -nonbacterial -nonbailable -nonballoting -nonbanishment -nonbankable -nonbarbarous -nonbaronial -nonbase -nonbasement -nonbasic -nonbasing -nonbathing -nonbearded -nonbearing -nonbeing -nonbeliever -nonbelieving -nonbelligerent -nonbending -nonbenevolent -nonbetrayal -nonbeverage -nonbilabiate -nonbilious -nonbinomial -nonbiological -nonbitter -nonbituminous -nonblack -nonblameless -nonbleeding -nonblended -nonblockaded -nonblocking -nonblooded -nonblooming -nonbodily -nonbookish -nonborrower -nonbotanical -nonbourgeois -nonbranded -nonbreakable -nonbreeder -nonbreeding -nonbroodiness -nonbroody -nonbrowsing -nonbudding -nonbulbous -nonbulkhead -nonbureaucratic -nonburgage -nonburgess -nonburnable -nonburning -nonbursting -nonbusiness -nonbuying -noncabinet -noncaffeine -noncaking -noncalcareous -noncalcified -noncallability -noncallable -noncancellable -noncannibalistic -noncanonical -noncanonization -noncanvassing -noncapillarity -noncapillary -noncapital -noncapitalist -noncapitalistic -noncapitulation -noncapsizable -noncapture -noncarbonate -noncareer -noncarnivorous -noncarrier -noncartelized -noncaste -noncastigation -noncataloguer -noncatarrhal -noncatechizable -noncategorical -noncathedral -noncatholicity -noncausality -noncausation -nonce -noncelebration -noncelestial -noncellular -noncellulosic -noncensored -noncensorious -noncensus -noncentral -noncereal -noncerebral -nonceremonial -noncertain -noncertainty -noncertified -nonchafing -nonchalance -nonchalant -nonchalantly -nonchalantness -nonchalky -nonchallenger -nonchampion -nonchangeable -nonchanging -noncharacteristic -nonchargeable -nonchastisement -nonchastity -nonchemical -nonchemist -nonchivalrous -nonchokable -nonchokebore -nonchronological -nonchurch -nonchurched -nonchurchgoer -nonciliate -noncircuit -noncircuital -noncircular -noncirculation -noncitation -noncitizen -noncivilized -nonclaim -nonclaimable -nonclassable -nonclassical -nonclassifiable -nonclassification -nonclastic -nonclearance -noncleistogamic -nonclergyable -nonclerical -nonclimbable -nonclinical -nonclose -nonclosure -nonclotting -noncoagulability -noncoagulable -noncoagulation -noncoalescing -noncock -noncoercion -noncoercive -noncognate -noncognition -noncognitive -noncognizable -noncognizance -noncoherent -noncohesion -noncohesive -noncoinage -noncoincidence -noncoincident -noncoincidental -noncoking -noncollaboration -noncollaborative -noncollapsible -noncollectable -noncollection -noncollegiate -noncollinear -noncolloid -noncollusion -noncollusive -noncolonial -noncoloring -noncom -noncombat -noncombatant -noncombination -noncombining -noncombustible -noncombustion -noncome -noncoming -noncommemoration -noncommencement -noncommendable -noncommensurable -noncommercial -noncommissioned -noncommittal -noncommittalism -noncommittally -noncommittalness -noncommonable -noncommorancy -noncommunal -noncommunicable -noncommunicant -noncommunicating -noncommunication -noncommunion -noncommunist -noncommunistic -noncommutative -noncompearance -noncompensating -noncompensation -noncompetency -noncompetent -noncompeting -noncompetitive -noncompetitively -noncomplaisance -noncompletion -noncompliance -noncomplicity -noncomplying -noncomposite -noncompoundable -noncompounder -noncomprehension -noncompressible -noncompression -noncompulsion -noncomputation -noncon -nonconcealment -nonconceiving -nonconcentration -nonconception -nonconcern -nonconcession -nonconciliating -nonconcludency -nonconcludent -nonconcluding -nonconclusion -nonconcordant -nonconcur -nonconcurrence -nonconcurrency -nonconcurrent -noncondensable -noncondensation -noncondensible -noncondensing -noncondimental -nonconditioned -noncondonation -nonconducive -nonconductibility -nonconductible -nonconducting -nonconduction -nonconductive -nonconductor -nonconfederate -nonconferrable -nonconfession -nonconficient -nonconfident -nonconfidential -nonconfinement -nonconfirmation -nonconfirmative -nonconfiscable -nonconfiscation -nonconfitent -nonconflicting -nonconform -nonconformable -nonconformably -nonconformance -nonconformer -nonconforming -nonconformism -nonconformist -nonconformistical -nonconformistically -nonconformitant -nonconformity -nonconfutation -noncongealing -noncongenital -noncongestion -noncongratulatory -noncongruent -nonconjectural -nonconjugal -nonconjugate -nonconjunction -nonconnection -nonconnective -nonconnivance -nonconnotative -nonconnubial -nonconscientious -nonconscious -nonconscription -nonconsecration -nonconsecutive -nonconsent -nonconsenting -nonconsequence -nonconsequent -nonconservation -nonconservative -nonconserving -nonconsideration -nonconsignment -nonconsistorial -nonconsoling -nonconsonant -nonconsorting -nonconspirator -nonconspiring -nonconstituent -nonconstitutional -nonconstraint -nonconstruable -nonconstruction -nonconstructive -nonconsular -nonconsultative -nonconsumable -nonconsumption -noncontact -noncontagion -noncontagionist -noncontagious -noncontagiousness -noncontamination -noncontemplative -noncontending -noncontent -noncontention -noncontentious -noncontentiously -nonconterminous -noncontiguity -noncontiguous -noncontinental -noncontingent -noncontinuance -noncontinuation -noncontinuous -noncontraband -noncontraction -noncontradiction -noncontradictory -noncontributing -noncontribution -noncontributor -noncontributory -noncontrivance -noncontrolled -noncontrolling -noncontroversial -nonconvective -nonconvenable -nonconventional -nonconvergent -nonconversable -nonconversant -nonconversational -nonconversion -nonconvertible -nonconveyance -nonconviction -nonconvivial -noncoplanar -noncopying -noncoring -noncorporate -noncorporeality -noncorpuscular -noncorrection -noncorrective -noncorrelation -noncorrespondence -noncorrespondent -noncorresponding -noncorroboration -noncorroborative -noncorrodible -noncorroding -noncorrosive -noncorruption -noncortical -noncosmic -noncosmopolitism -noncostraight -noncottager -noncotyledonous -noncounty -noncranking -noncreation -noncreative -noncredence -noncredent -noncredibility -noncredible -noncreditor -noncreeping -noncrenate -noncretaceous -noncriminal -noncriminality -noncrinoid -noncritical -noncrucial -noncruciform -noncrusading -noncrushability -noncrushable -noncrustaceous -noncrystalline -noncrystallizable -noncrystallized -noncrystallizing -nonculmination -nonculpable -noncultivated -noncultivation -nonculture -noncumulative -noncurantist -noncurling -noncurrency -noncurrent -noncursive -noncurtailment -noncuspidate -noncustomary -noncutting -noncyclic -noncyclical -nonda -nondamageable -nondamnation -nondancer -nondangerous -nondatival -nondealer -nondebtor -nondecadence -nondecadent -nondecalcified -nondecane -nondecasyllabic -nondecatoic -nondecaying -nondeceivable -nondeception -nondeceptive -nondeciduate -nondeciduous -nondecision -nondeclarant -nondeclaration -nondeclarer -nondecomposition -nondecoration -nondedication -nondeduction -nondefalcation -nondefamatory -nondefaulting -nondefection -nondefendant -nondefense -nondefensive -nondeference -nondeferential -nondefiance -nondefilement -nondefining -nondefinition -nondefinitive -nondeforestation -nondegenerate -nondegeneration -nondegerming -nondegradation -nondegreased -nondehiscent -nondeist -nondelegable -nondelegate -nondelegation -nondeleterious -nondeliberate -nondeliberation -nondelineation -nondeliquescent -nondelirious -nondeliverance -nondelivery -nondemand -nondemise -nondemobilization -nondemocratic -nondemonstration -nondendroid -nondenial -nondenominational -nondenominationalism -nondense -nondenumerable -nondenunciation -nondepartmental -nondeparture -nondependence -nondependent -nondepletion -nondeportation -nondeported -nondeposition -nondepositor -nondepravity -nondepreciating -nondepressed -nondepression -nondeprivable -nonderivable -nonderivative -nonderogatory -nondescript -nondesecration -nondesignate -nondesigned -nondesire -nondesirous -nondesisting -nondespotic -nondesquamative -nondestructive -nondesulphurized -nondetachable -nondetailed -nondetention -nondetermination -nondeterminist -nondeterrent -nondetest -nondetonating -nondetrimental -nondevelopable -nondevelopment -nondeviation -nondevotional -nondexterous -nondiabetic -nondiabolic -nondiagnosis -nondiagonal -nondiagrammatic -nondialectal -nondialectical -nondialyzing -nondiametral -nondiastatic -nondiathermanous -nondiazotizable -nondichogamous -nondichogamy -nondichotomous -nondictation -nondictatorial -nondictionary -nondidactic -nondieting -nondifferentation -nondifferentiable -nondiffractive -nondiffusing -nondigestion -nondilatable -nondilution -nondiocesan -nondiphtheritic -nondiphthongal -nondiplomatic -nondipterous -nondirection -nondirectional -nondisagreement -nondisappearing -nondisarmament -nondisbursed -nondiscernment -nondischarging -nondisciplinary -nondisclaim -nondisclosure -nondiscontinuance -nondiscordant -nondiscountable -nondiscovery -nondiscretionary -nondiscrimination -nondiscriminatory -nondiscussion -nondisestablishment -nondisfigurement -nondisfranchised -nondisingenuous -nondisintegration -nondisinterested -nondisjunct -nondisjunction -nondisjunctional -nondisjunctive -nondismemberment -nondismissal -nondisparaging -nondisparate -nondispensation -nondispersal -nondispersion -nondisposal -nondisqualifying -nondissenting -nondissolution -nondistant -nondistinctive -nondistortion -nondistribution -nondistributive -nondisturbance -nondivergence -nondivergent -nondiversification -nondivinity -nondivisible -nondivisiblity -nondivision -nondivisional -nondivorce -nondo -nondoctrinal -nondocumentary -nondogmatic -nondoing -nondomestic -nondomesticated -nondominant -nondonation -nondramatic -nondrinking -nondropsical -nondrying -nonduality -nondumping -nonduplication -nondutiable -nondynastic -nondyspeptic -none -nonearning -noneastern -noneatable -nonecclesiastical -nonechoic -noneclectic -noneclipsing -nonecompense -noneconomic -nonedible -noneditor -noneditorial -noneducable -noneducation -noneducational -noneffective -noneffervescent -noneffete -nonefficacious -nonefficacy -nonefficiency -nonefficient -noneffusion -nonego -nonegoistical -nonejection -nonelastic -nonelasticity -nonelect -nonelection -nonelective -nonelector -nonelectric -nonelectrical -nonelectrification -nonelectrified -nonelectrized -nonelectrocution -nonelectrolyte -noneleemosynary -nonelemental -nonelementary -nonelimination -nonelopement -nonemanating -nonemancipation -nonembarkation -nonembellishment -nonembezzlement -nonembryonic -nonemendation -nonemergent -nonemigration -nonemission -nonemotional -nonemphatic -nonemphatical -nonempirical -nonemploying -nonemployment -nonemulative -nonenactment -nonenclosure -nonencroachment -nonencyclopedic -nonendemic -nonendorsement -nonenduring -nonene -nonenemy -nonenergic -nonenforceability -nonenforceable -nonenforcement -nonengagement -nonengineering -nonenrolled -nonent -nonentailed -nonenteric -nonentertainment -nonentitative -nonentitive -nonentitize -nonentity -nonentityism -nonentomological -nonentrant -nonentres -nonentry -nonenumerated -nonenunciation -nonenvious -nonenzymic -nonephemeral -nonepic -nonepicurean -nonepileptic -nonepiscopal -nonepiscopalian -nonepithelial -nonepochal -nonequal -nonequation -nonequatorial -nonequestrian -nonequilateral -nonequilibrium -nonequivalent -nonequivocating -nonerasure -nonerecting -nonerection -nonerotic -nonerroneous -nonerudite -noneruption -nones -nonescape -nonespionage -nonespousal -nonessential -nonesthetic -nonesuch -nonet -noneternal -noneternity -nonetheless -nonethereal -nonethical -nonethnological -nonethyl -noneugenic -noneuphonious -nonevacuation -nonevanescent -nonevangelical -nonevaporation -nonevasion -nonevasive -noneviction -nonevident -nonevidential -nonevil -nonevolutionary -nonevolutionist -nonevolving -nonexaction -nonexaggeration -nonexamination -nonexcavation -nonexcepted -nonexcerptible -nonexcessive -nonexchangeability -nonexchangeable -nonexciting -nonexclamatory -nonexclusion -nonexclusive -nonexcommunicable -nonexculpation -nonexcusable -nonexecution -nonexecutive -nonexemplary -nonexemplificatior -nonexempt -nonexercise -nonexertion -nonexhibition -nonexistence -nonexistent -nonexistential -nonexisting -nonexoneration -nonexotic -nonexpansion -nonexpansive -nonexpansively -nonexpectation -nonexpendable -nonexperience -nonexperienced -nonexperimental -nonexpert -nonexpiation -nonexpiry -nonexploitation -nonexplosive -nonexportable -nonexportation -nonexposure -nonexpulsion -nonextant -nonextempore -nonextended -nonextensile -nonextension -nonextensional -nonextensive -nonextenuatory -nonexteriority -nonextermination -nonexternal -nonexternality -nonextinction -nonextortion -nonextracted -nonextraction -nonextraditable -nonextradition -nonextraneous -nonextreme -nonextrication -nonextrinsic -nonexuding -nonexultation -nonfabulous -nonfacetious -nonfacial -nonfacility -nonfacing -nonfact -nonfactious -nonfactory -nonfactual -nonfacultative -nonfaculty -nonfaddist -nonfading -nonfailure -nonfalse -nonfamily -nonfamous -nonfanatical -nonfanciful -nonfarm -nonfastidious -nonfat -nonfatal -nonfatalistic -nonfatty -nonfavorite -nonfeasance -nonfeasor -nonfeatured -nonfebrile -nonfederal -nonfederated -nonfeldspathic -nonfelonious -nonfelony -nonfenestrated -nonfermentability -nonfermentable -nonfermentation -nonfermentative -nonferrous -nonfertile -nonfertility -nonfestive -nonfeudal -nonfibrous -nonfiction -nonfictional -nonfiduciary -nonfighter -nonfigurative -nonfilamentous -nonfimbriate -nonfinancial -nonfinding -nonfinishing -nonfinite -nonfireproof -nonfiscal -nonfisherman -nonfissile -nonfixation -nonflaky -nonflammable -nonfloatation -nonfloating -nonfloriferous -nonflowering -nonflowing -nonfluctuating -nonfluid -nonfluorescent -nonflying -nonfocal -nonfood -nonforeclosure -nonforeign -nonforeknowledge -nonforest -nonforested -nonforfeitable -nonforfeiting -nonforfeiture -nonform -nonformal -nonformation -nonformulation -nonfortification -nonfortuitous -nonfossiliferous -nonfouling -nonfrat -nonfraternity -nonfrauder -nonfraudulent -nonfreedom -nonfreeman -nonfreezable -nonfreeze -nonfreezing -nonfricative -nonfriction -nonfrosted -nonfruition -nonfrustration -nonfulfillment -nonfunctional -nonfundable -nonfundamental -nonfungible -nonfuroid -nonfusion -nonfuturition -nonfuturity -nongalactic -nongalvanized -nonganglionic -nongas -nongaseous -nongassy -nongelatinizing -nongelatinous -nongenealogical -nongenerative -nongenetic -nongentile -nongeographical -nongeological -nongeometrical -nongermination -nongerundial -nongildsman -nongipsy -nonglacial -nonglandered -nonglandular -nonglare -nonglucose -nonglucosidal -nonglucosidic -nongod -nongold -nongolfer -nongospel -nongovernmental -nongraduate -nongraduated -nongraduation -nongrain -nongranular -nongraphitic -nongrass -nongratuitous -nongravitation -nongravity -nongray -nongreasy -nongreen -nongregarious -nongremial -nongrey -nongrooming -nonguarantee -nonguard -nonguttural -nongymnast -nongypsy -nonhabitable -nonhabitual -nonhalation -nonhallucination -nonhandicap -nonhardenable -nonharmonic -nonharmonious -nonhazardous -nonheading -nonhearer -nonheathen -nonhedonistic -nonhepatic -nonhereditarily -nonhereditary -nonheritable -nonheritor -nonhero -nonhieratic -nonhistoric -nonhistorical -nonhomaloidal -nonhomogeneity -nonhomogeneous -nonhomogenous -nonhostile -nonhouseholder -nonhousekeeping -nonhuman -nonhumanist -nonhumorous -nonhumus -nonhunting -nonhydrogenous -nonhydrolyzable -nonhygrometric -nonhygroscopic -nonhypostatic -nonic -noniconoclastic -nonideal -nonidealist -nonidentical -nonidentity -nonidiomatic -nonidolatrous -nonidyllic -nonignitible -nonignominious -nonignorant -nonillion -nonillionth -nonillumination -nonillustration -nonimaginary -nonimbricating -nonimitative -nonimmateriality -nonimmersion -nonimmigrant -nonimmigration -nonimmune -nonimmunity -nonimmunized -nonimpact -nonimpairment -nonimpartment -nonimpatience -nonimpeachment -nonimperative -nonimperial -nonimplement -nonimportation -nonimporting -nonimposition -nonimpregnated -nonimpressionist -nonimprovement -nonimputation -nonincandescent -nonincarnated -nonincitement -noninclination -noninclusion -noninclusive -nonincrease -nonincreasing -nonincrusting -nonindependent -nonindictable -nonindictment -nonindividual -nonindividualistic -noninductive -noninductively -noninductivity -nonindurated -nonindustrial -noninfallibilist -noninfallible -noninfantry -noninfected -noninfection -noninfectious -noninfinite -noninfinitely -noninflammability -noninflammable -noninflammatory -noninflectional -noninfluence -noninformative -noninfraction -noninhabitant -noninheritable -noninherited -noninitial -noninjurious -noninjury -noninoculation -noninquiring -noninsect -noninsertion -noninstitution -noninstruction -noninstructional -noninstructress -noninstrumental -noninsurance -nonintegrable -nonintegrity -nonintellectual -nonintelligence -nonintelligent -nonintent -nonintention -noninterchangeability -noninterchangeable -nonintercourse -noninterference -noninterferer -noninterfering -nonintermittent -noninternational -noninterpolation -noninterposition -noninterrupted -nonintersecting -nonintersector -nonintervention -noninterventionalist -noninterventionist -nonintoxicant -nonintoxicating -nonintrospective -nonintrospectively -nonintrusion -nonintrusionism -nonintrusionist -nonintuitive -noninverted -noninvidious -noninvincibility -noniodized -nonion -nonionized -nonionizing -nonirate -nonirradiated -nonirrational -nonirreparable -nonirrevocable -nonirrigable -nonirrigated -nonirrigating -nonirrigation -nonirritable -nonirritant -nonirritating -nonisobaric -nonisotropic -nonissuable -nonius -nonjoinder -nonjudicial -nonjurable -nonjurant -nonjuress -nonjuring -nonjurist -nonjuristic -nonjuror -nonjurorism -nonjury -nonjurying -nonknowledge -nonkosher -nonlabeling -nonlactescent -nonlaminated -nonlanguage -nonlaying -nonleaded -nonleaking -nonlegal -nonlegato -nonlegume -nonlepidopterous -nonleprous -nonlevel -nonlevulose -nonliability -nonliable -nonliberation -nonlicensed -nonlicentiate -nonlicet -nonlicking -nonlife -nonlimitation -nonlimiting -nonlinear -nonlipoidal -nonliquefying -nonliquid -nonliquidating -nonliquidation -nonlister -nonlisting -nonliterary -nonlitigious -nonliturgical -nonliving -nonlixiviated -nonlocal -nonlocalized -nonlogical -nonlosable -nonloser -nonlover -nonloving -nonloxodromic -nonluminescent -nonluminosity -nonluminous -nonluster -nonlustrous -nonly -nonmagnetic -nonmagnetizable -nonmaintenance -nonmajority -nonmalarious -nonmalicious -nonmalignant -nonmalleable -nonmammalian -nonmandatory -nonmanifest -nonmanifestation -nonmanila -nonmannite -nonmanual -nonmanufacture -nonmanufactured -nonmanufacturing -nonmarine -nonmarital -nonmaritime -nonmarket -nonmarriage -nonmarriageable -nonmarrying -nonmartial -nonmastery -nonmaterial -nonmaterialistic -nonmateriality -nonmaternal -nonmathematical -nonmathematician -nonmatrimonial -nonmatter -nonmechanical -nonmechanistic -nonmedical -nonmedicinal -nonmedullated -nonmelodious -nonmember -nonmembership -nonmenial -nonmental -nonmercantile -nonmetal -nonmetallic -nonmetalliferous -nonmetallurgical -nonmetamorphic -nonmetaphysical -nonmeteoric -nonmeteorological -nonmetric -nonmetrical -nonmetropolitan -nonmicrobic -nonmicroscopical -nonmigratory -nonmilitant -nonmilitary -nonmillionaire -nonmimetic -nonmineral -nonmineralogical -nonminimal -nonministerial -nonministration -nonmiraculous -nonmischievous -nonmiscible -nonmissionary -nonmobile -nonmodal -nonmodern -nonmolar -nonmolecular -nonmomentary -nonmonarchical -nonmonarchist -nonmonastic -nonmonist -nonmonogamous -nonmonotheistic -nonmorainic -nonmoral -nonmorality -nonmortal -nonmotile -nonmotoring -nonmotorist -nonmountainous -nonmucilaginous -nonmucous -nonmulched -nonmultiple -nonmunicipal -nonmuscular -nonmusical -nonmussable -nonmutationally -nonmutative -nonmutual -nonmystical -nonmythical -nonmythological -nonnant -nonnarcotic -nonnasal -nonnat -nonnational -nonnative -nonnatural -nonnaturalism -nonnaturalistic -nonnaturality -nonnaturalness -nonnautical -nonnaval -nonnavigable -nonnavigation -nonnebular -nonnecessary -nonnecessity -nonnegligible -nonnegotiable -nonnegotiation -nonnephritic -nonnervous -nonnescience -nonnescient -nonneutral -nonneutrality -nonnitrogenized -nonnitrogenous -nonnoble -nonnomination -nonnotification -nonnotional -nonnucleated -nonnumeral -nonnutrient -nonnutritious -nonnutritive -nonobedience -nonobedient -nonobjection -nonobjective -nonobligatory -nonobservable -nonobservance -nonobservant -nonobservation -nonobstetrical -nonobstructive -nonobvious -nonoccidental -nonocculting -nonoccupant -nonoccupation -nonoccupational -nonoccurrence -nonodorous -nonoecumenic -nonoffender -nonoffensive -nonofficeholding -nonofficial -nonofficially -nonofficinal -nonoic -nonoily -nonolfactory -nonomad -nononerous -nonopacity -nonopening -nonoperating -nonoperative -nonopposition -nonoppressive -nonoptical -nonoptimistic -nonoptional -nonorchestral -nonordination -nonorganic -nonorganization -nonoriental -nonoriginal -nonornamental -nonorthodox -nonorthographical -nonoscine -nonostentation -nonoutlawry -nonoutrage -nonoverhead -nonoverlapping -nonowner -nonoxidating -nonoxidizable -nonoxidizing -nonoxygenated -nonoxygenous -nonpacific -nonpacification -nonpacifist -nonpagan -nonpaid -nonpainter -nonpalatal -nonpapal -nonpapist -nonpar -nonparallel -nonparalytic -nonparasitic -nonparasitism -nonpareil -nonparent -nonparental -nonpariello -nonparishioner -nonparliamentary -nonparlor -nonparochial -nonparous -nonpartial -nonpartiality -nonparticipant -nonparticipating -nonparticipation -nonpartisan -nonpartisanship -nonpartner -nonparty -nonpassenger -nonpasserine -nonpastoral -nonpatentable -nonpatented -nonpaternal -nonpathogenic -nonpause -nonpaying -nonpayment -nonpeak -nonpeaked -nonpearlitic -nonpecuniary -nonpedestrian -nonpedigree -nonpelagic -nonpeltast -nonpenal -nonpenalized -nonpending -nonpensionable -nonpensioner -nonperception -nonperceptual -nonperfection -nonperforated -nonperforating -nonperformance -nonperformer -nonperforming -nonperiodic -nonperiodical -nonperishable -nonperishing -nonperjury -nonpermanent -nonpermeability -nonpermeable -nonpermissible -nonpermission -nonperpendicular -nonperpetual -nonperpetuity -nonpersecution -nonperseverance -nonpersistence -nonpersistent -nonperson -nonpersonal -nonpersonification -nonpertinent -nonperversive -nonphagocytic -nonpharmaceutical -nonphenolic -nonphenomenal -nonphilanthropic -nonphilological -nonphilosophical -nonphilosophy -nonphonetic -nonphosphatic -nonphosphorized -nonphotobiotic -nonphysical -nonphysiological -nonpickable -nonpigmented -nonplacental -nonplacet -nonplanar -nonplane -nonplanetary -nonplantowning -nonplastic -nonplate -nonplausible -nonpleading -nonplus -nonplusation -nonplushed -nonplutocratic -nonpoet -nonpoetic -nonpoisonous -nonpolar -nonpolarizable -nonpolarizing -nonpolitical -nonponderosity -nonponderous -nonpopery -nonpopular -nonpopularity -nonporous -nonporphyritic -nonport -nonportability -nonportable -nonportrayal -nonpositive -nonpossession -nonposthumous -nonpostponement -nonpotential -nonpower -nonpractical -nonpractice -nonpraedial -nonpreaching -nonprecious -nonprecipitation -nonpredatory -nonpredestination -nonpredicative -nonpredictable -nonpreference -nonpreferential -nonpreformed -nonpregnant -nonprehensile -nonprejudicial -nonprelatical -nonpremium -nonpreparation -nonprepayment -nonprepositional -nonpresbyter -nonprescribed -nonprescriptive -nonpresence -nonpresentation -nonpreservation -nonpresidential -nonpress -nonpressure -nonprevalence -nonprevalent -nonpriestly -nonprimitive -nonprincipiate -nonprincipled -nonprobable -nonprocreation -nonprocurement -nonproducer -nonproducing -nonproduction -nonproductive -nonproductively -nonproductiveness -nonprofane -nonprofessed -nonprofession -nonprofessional -nonprofessionalism -nonprofessorial -nonproficience -nonproficiency -nonproficient -nonprofit -nonprofiteering -nonprognostication -nonprogressive -nonprohibitable -nonprohibition -nonprohibitive -nonprojection -nonprojective -nonprojectively -nonproletarian -nonproliferous -nonprolific -nonprolongation -nonpromiscuous -nonpromissory -nonpromotion -nonpromulgation -nonpronunciation -nonpropagandistic -nonpropagation -nonprophetic -nonpropitiation -nonproportional -nonproprietary -nonproprietor -nonprorogation -nonproscriptive -nonprosecution -nonprospect -nonprotection -nonprotective -nonproteid -nonprotein -nonprotestation -nonprotractile -nonprotractility -nonproven -nonprovided -nonprovidential -nonprovocation -nonpsychic -nonpsychological -nonpublic -nonpublication -nonpublicity -nonpueblo -nonpulmonary -nonpulsating -nonpumpable -nonpunctual -nonpunctuation -nonpuncturable -nonpunishable -nonpunishing -nonpunishment -nonpurchase -nonpurchaser -nonpurgative -nonpurification -nonpurposive -nonpursuit -nonpurulent -nonpurveyance -nonputrescent -nonputrescible -nonputting -nonpyogenic -nonpyritiferous -nonqualification -nonquality -nonquota -nonracial -nonradiable -nonradiating -nonradical -nonrailroader -nonranging -nonratability -nonratable -nonrated -nonratifying -nonrational -nonrationalist -nonrationalized -nonrayed -nonreaction -nonreactive -nonreactor -nonreader -nonreading -nonrealistic -nonreality -nonrealization -nonreasonable -nonreasoner -nonrebel -nonrebellious -nonreceipt -nonreceiving -nonrecent -nonreception -nonrecess -nonrecipient -nonreciprocal -nonreciprocating -nonreciprocity -nonrecital -nonreclamation -nonrecluse -nonrecognition -nonrecognized -nonrecoil -nonrecollection -nonrecommendation -nonreconciliation -nonrecourse -nonrecoverable -nonrecovery -nonrectangular -nonrectified -nonrecuperation -nonrecurrent -nonrecurring -nonredemption -nonredressing -nonreducing -nonreference -nonrefillable -nonreflector -nonreformation -nonrefraction -nonrefrigerant -nonrefueling -nonrefutation -nonregardance -nonregarding -nonregenerating -nonregenerative -nonregent -nonregimented -nonregistered -nonregistrability -nonregistrable -nonregistration -nonregression -nonregulation -nonrehabilitation -nonreigning -nonreimbursement -nonreinforcement -nonreinstatement -nonrejection -nonrejoinder -nonrelapsed -nonrelation -nonrelative -nonrelaxation -nonrelease -nonreliance -nonreligion -nonreligious -nonreligiousness -nonrelinquishment -nonremanie -nonremedy -nonremembrance -nonremission -nonremonstrance -nonremuneration -nonremunerative -nonrendition -nonrenewable -nonrenewal -nonrenouncing -nonrenunciation -nonrepair -nonreparation -nonrepayable -nonrepealing -nonrepeat -nonrepeater -nonrepentance -nonrepetition -nonreplacement -nonreplicate -nonreportable -nonreprehensible -nonrepresentation -nonrepresentational -nonrepresentationalism -nonrepresentative -nonrepression -nonreprisal -nonreproduction -nonreproductive -nonrepublican -nonrepudiation -nonrequirement -nonrequisition -nonrequital -nonrescue -nonresemblance -nonreservation -nonreserve -nonresidence -nonresidency -nonresident -nonresidental -nonresidenter -nonresidential -nonresidentiary -nonresidentor -nonresidual -nonresignation -nonresinifiable -nonresistance -nonresistant -nonresisting -nonresistive -nonresolvability -nonresolvable -nonresonant -nonrespectable -nonrespirable -nonresponsibility -nonrestitution -nonrestraint -nonrestricted -nonrestriction -nonrestrictive -nonresumption -nonresurrection -nonresuscitation -nonretaliation -nonretention -nonretentive -nonreticence -nonretinal -nonretirement -nonretiring -nonretraceable -nonretractation -nonretractile -nonretraction -nonretrenchment -nonretroactive -nonreturn -nonreturnable -nonrevaluation -nonrevealing -nonrevelation -nonrevenge -nonrevenue -nonreverse -nonreversed -nonreversible -nonreversing -nonreversion -nonrevertible -nonreviewable -nonrevision -nonrevival -nonrevocation -nonrevolting -nonrevolutionary -nonrevolving -nonrhetorical -nonrhymed -nonrhyming -nonrhythmic -nonriding -nonrigid -nonrioter -nonriparian -nonritualistic -nonrival -nonromantic -nonrotatable -nonrotating -nonrotative -nonround -nonroutine -nonroyal -nonroyalist -nonrubber -nonruminant -nonrun -nonrupture -nonrural -nonrustable -nonsabbatic -nonsaccharine -nonsacerdotal -nonsacramental -nonsacred -nonsacrifice -nonsacrificial -nonsailor -nonsalable -nonsalaried -nonsale -nonsaline -nonsalutary -nonsalutation -nonsalvation -nonsanctification -nonsanction -nonsanctity -nonsane -nonsanguine -nonsanity -nonsaponifiable -nonsatisfaction -nonsaturated -nonsaturation -nonsaving -nonsawing -nonscalding -nonscaling -nonscandalous -nonschematized -nonschismatic -nonscholastic -nonscience -nonscientific -nonscientist -nonscoring -nonscraping -nonscriptural -nonscripturalist -nonscrutiny -nonseasonal -nonsecession -nonseclusion -nonsecrecy -nonsecret -nonsecretarial -nonsecretion -nonsecretive -nonsecretory -nonsectarian -nonsectional -nonsectorial -nonsecular -nonsecurity -nonsedentary -nonseditious -nonsegmented -nonsegregation -nonseizure -nonselected -nonselection -nonselective -nonself -nonselfregarding -nonselling -nonsenatorial -nonsense -nonsensible -nonsensical -nonsensicality -nonsensically -nonsensicalness -nonsensification -nonsensify -nonsensitive -nonsensitiveness -nonsensitized -nonsensorial -nonsensuous -nonsentence -nonsentient -nonseparation -nonseptate -nonseptic -nonsequacious -nonsequaciousness -nonsequestration -nonserial -nonserif -nonserious -nonserous -nonserviential -nonservile -nonsetter -nonsetting -nonsettlement -nonsexual -nonsexually -nonshaft -nonsharing -nonshatter -nonshedder -nonshipper -nonshipping -nonshredding -nonshrinkable -nonshrinking -nonsiccative -nonsidereal -nonsignatory -nonsignature -nonsignificance -nonsignificant -nonsignification -nonsignificative -nonsilicated -nonsiliceous -nonsilver -nonsimplification -nonsine -nonsinging -nonsingular -nonsinkable -nonsinusoidal -nonsiphonage -nonsister -nonsitter -nonsitting -nonskeptical -nonskid -nonskidding -nonskipping -nonslaveholding -nonslip -nonslippery -nonslipping -nonsludging -nonsmoker -nonsmoking -nonsmutting -nonsocial -nonsocialist -nonsocialistic -nonsociety -nonsociological -nonsolar -nonsoldier -nonsolicitation -nonsolid -nonsolidified -nonsolution -nonsolvency -nonsolvent -nonsonant -nonsovereign -nonspalling -nonsparing -nonsparking -nonspeaker -nonspeaking -nonspecial -nonspecialist -nonspecialized -nonspecie -nonspecific -nonspecification -nonspecificity -nonspecified -nonspectacular -nonspectral -nonspeculation -nonspeculative -nonspherical -nonspill -nonspillable -nonspinning -nonspinose -nonspiny -nonspiral -nonspirit -nonspiritual -nonspirituous -nonspontaneous -nonspored -nonsporeformer -nonsporeforming -nonsporting -nonspottable -nonsprouting -nonstainable -nonstaining -nonstampable -nonstandard -nonstandardized -nonstanzaic -nonstaple -nonstarch -nonstarter -nonstarting -nonstatement -nonstatic -nonstationary -nonstatistical -nonstatutory -nonstellar -nonsticky -nonstimulant -nonstipulation -nonstock -nonstooping -nonstop -nonstrategic -nonstress -nonstretchable -nonstretchy -nonstriated -nonstriker -nonstriking -nonstriped -nonstructural -nonstudent -nonstudious -nonstylized -nonsubject -nonsubjective -nonsubmission -nonsubmissive -nonsubordination -nonsubscriber -nonsubscribing -nonsubscription -nonsubsiding -nonsubsidy -nonsubsistence -nonsubstantial -nonsubstantialism -nonsubstantialist -nonsubstantiality -nonsubstantiation -nonsubstantive -nonsubstitution -nonsubtraction -nonsuccess -nonsuccessful -nonsuccession -nonsuccessive -nonsuccour -nonsuction -nonsuctorial -nonsufferance -nonsuffrage -nonsugar -nonsuggestion -nonsuit -nonsulphurous -nonsummons -nonsupplication -nonsupport -nonsupporter -nonsupporting -nonsuppositional -nonsuppressed -nonsuppression -nonsuppurative -nonsurface -nonsurgical -nonsurrender -nonsurvival -nonsurvivor -nonsuspect -nonsustaining -nonsustenance -nonswearer -nonswearing -nonsweating -nonswimmer -nonswimming -nonsyllabic -nonsyllabicness -nonsyllogistic -nonsyllogizing -nonsymbiotic -nonsymbiotically -nonsymbolic -nonsymmetrical -nonsympathetic -nonsympathizer -nonsympathy -nonsymphonic -nonsymptomatic -nonsynchronous -nonsyndicate -nonsynodic -nonsynonymous -nonsyntactic -nonsyntactical -nonsynthesized -nonsyntonic -nonsystematic -nontabular -nontactical -nontan -nontangential -nontannic -nontannin -nontariff -nontarnishable -nontarnishing -nontautomeric -nontautomerizable -nontax -nontaxability -nontaxable -nontaxonomic -nonteachable -nonteacher -nonteaching -nontechnical -nontechnological -nonteetotaler -nontelegraphic -nonteleological -nontelephonic -nontemporal -nontemporizing -nontenant -nontenure -nontenurial -nonterm -nonterminating -nonterrestrial -nonterritorial -nonterritoriality -nontestamentary -nontextual -nontheatrical -nontheistic -nonthematic -nontheological -nontheosophical -nontherapeutic -nonthinker -nonthinking -nonthoracic -nonthoroughfare -nonthreaded -nontidal -nontillable -nontimbered -nontitaniferous -nontitular -nontolerated -nontopographical -nontourist -nontoxic -nontraction -nontrade -nontrader -nontrading -nontraditional -nontragic -nontrailing -nontransferability -nontransferable -nontransgression -nontransient -nontransitional -nontranslocation -nontransmission -nontransparency -nontransparent -nontransportation -nontransposing -nontransposition -nontraveler -nontraveling -nontreasonable -nontreated -nontreatment -nontreaty -nontrespass -nontrial -nontribal -nontribesman -nontributary -nontrier -nontrigonometrical -nontronite -nontropical -nontrunked -nontruth -nontuberculous -nontuned -nonturbinated -nontutorial -nontyphoidal -nontypical -nontypicalness -nontypographical -nontyrannical -nonubiquitous -nonulcerous -nonultrafilterable -nonumbilical -nonumbilicate -nonumbrellaed -nonunanimous -nonuncial -nonundergraduate -nonunderstandable -nonunderstanding -nonunderstandingly -nonunderstood -nonundulatory -nonuniform -nonuniformist -nonuniformitarian -nonuniformity -nonuniformly -nonunion -nonunionism -nonunionist -nonunique -nonunison -nonunited -nonuniversal -nonuniversity -nonupholstered -nonuple -nonuplet -nonupright -nonurban -nonurgent -nonusage -nonuse -nonuser -nonusing -nonusurping -nonuterine -nonutile -nonutilitarian -nonutility -nonutilized -nonutterance -nonvacant -nonvaccination -nonvacuous -nonvaginal -nonvalent -nonvalidity -nonvaluation -nonvalve -nonvanishing -nonvariable -nonvariant -nonvariation -nonvascular -nonvassal -nonvegetative -nonvenereal -nonvenomous -nonvenous -nonventilation -nonverbal -nonverdict -nonverminous -nonvernacular -nonvertebral -nonvertical -nonvertically -nonvesicular -nonvesting -nonvesture -nonveteran -nonveterinary -nonviable -nonvibratile -nonvibration -nonvibrator -nonvibratory -nonvicarious -nonvictory -nonvillager -nonvillainous -nonvindication -nonvinous -nonvintage -nonviolation -nonviolence -nonvirginal -nonvirile -nonvirtue -nonvirtuous -nonvirulent -nonviruliferous -nonvisaed -nonvisceral -nonviscid -nonviscous -nonvisional -nonvisitation -nonvisiting -nonvisual -nonvisualized -nonvital -nonvitreous -nonvitrified -nonviviparous -nonvocal -nonvocalic -nonvocational -nonvolant -nonvolatile -nonvolatilized -nonvolcanic -nonvolition -nonvoluntary -nonvortical -nonvortically -nonvoter -nonvoting -nonvulcanizable -nonvulvar -nonwalking -nonwar -nonwasting -nonwatertight -nonweakness -nonwestern -nonwetted -nonwhite -nonwinged -nonwoody -nonworker -nonworking -nonworship -nonwrinkleable -nonya -nonyielding -nonyl -nonylene -nonylenic -nonylic -nonzealous -nonzero -nonzodiacal -nonzonal -nonzonate -nonzoological -noodle -noodledom -noodleism -nook -nooked -nookery -nooking -nooklet -nooklike -nooky -noological -noologist -noology -noometry -noon -noonday -noonflower -nooning -noonlight -noonlit -noonstead -noontide -noontime -noonwards -noop -nooscopic -noose -nooser -nopal -nopalry -nope -nopinene -nor -norard -norate -noration -norbergite -norcamphane -nordcaper -nordenskioldine -nordmarkite -noreast -noreaster -norelin -norgine -nori -noria -norie -norimon -norite -norland -norlander -norlandism -norleucine -norm -norma -normal -normalcy -normalism -normalist -normality -normalization -normalize -normalizer -normally -normalness -normated -normative -normatively -normativeness -normless -normoblast -normoblastic -normocyte -normocytic -normotensive -nornicotine -nornorwest -noropianic -norpinic -norsel -norseler -north -northbound -northeast -northeaster -northeasterly -northeastern -northeasternmost -northeastward -northeastwardly -northeastwards -norther -northerliness -northerly -northern -northerner -northernize -northernly -northernmost -northernness -northest -northfieldite -northing -northland -northlander -northlight -northmost -northness -northupite -northward -northwardly -northwards -northwest -northwester -northwesterly -northwestern -northwestward -northwestwardly -northwestwards -norward -norwards -norwest -norwester -norwestward -nosarian -nose -nosean -noseanite -noseband -nosebanded -nosebleed -nosebone -noseburn -nosed -nosegay -nosegaylike -noseherb -nosehole -noseless -noselessly -noselessness -noselike -noselite -nosepiece -nosepinch -noser -nosesmart -nosethirl -nosetiology -nosewards -nosewheel -nosewise -nosey -nosine -nosing -nosism -nosocomial -nosocomium -nosogenesis -nosogenetic -nosogenic -nosogeny -nosogeography -nosographer -nosographic -nosographical -nosographically -nosography -nosohaemia -nosohemia -nosological -nosologically -nosologist -nosology -nosomania -nosomycosis -nosonomy -nosophobia -nosophyte -nosopoetic -nosopoietic -nosotaxy -nosotrophy -nostalgia -nostalgic -nostalgically -nostalgy -nostic -nostocaceous -nostochine -nostologic -nostology -nostomania -nostrificate -nostrification -nostril -nostriled -nostrility -nostrilsome -nostrum -nostrummonger -nostrummongership -nostrummongery -nosy -not -notabilia -notability -notable -notableness -notably -notacanthid -notacanthoid -notacanthous -notaeal -notaeum -notal -notalgia -notalgic -notan -notandum -notanencephalia -notarial -notarially -notariate -notarikon -notarize -notary -notaryship -notate -notation -notational -notative -notator -notch -notchboard -notched -notchel -notcher -notchful -notching -notchweed -notchwing -notchy -note -notebook -notecase -noted -notedly -notedness -notehead -noteholder -notekin -noteless -notelessly -notelessness -notelet -notencephalocele -notencephalus -noter -notewise -noteworthily -noteworthiness -noteworthy -notharctid -nother -nothing -nothingarian -nothingarianism -nothingism -nothingist -nothingize -nothingless -nothingly -nothingness -nothingology -nothosaur -nothosaurian -nothous -notice -noticeability -noticeable -noticeably -noticer -notidanian -notidanid -notidanidan -notidanoid -notifiable -notification -notified -notifier -notify -notifyee -notion -notionable -notional -notionalist -notionality -notionally -notionalness -notionary -notionate -notioned -notionist -notionless -notitia -notocentrous -notocentrum -notochord -notochordal -notodontian -notodontid -notodontoid -notommatid -notonectal -notonectid -notopodial -notopodium -notopterid -notopteroid -notorhizal -notoriety -notorious -notoriously -notoriousness -nototribe -notour -notourly -notself -notum -notungulate -notwithstanding -nougat -nougatine -nought -noumeaite -noumeite -noumenal -noumenalism -noumenalist -noumenality -noumenalize -noumenally -noumenism -noumenon -noun -nounal -nounally -nounize -nounless -noup -nourice -nourish -nourishable -nourisher -nourishing -nourishingly -nourishment -nouriture -nous -nouther -nova -novaculite -novalia -novantique -novarsenobenzene -novate -novation -novative -novator -novatory -novatrix -novcic -novel -novelcraft -noveldom -novelese -novelesque -novelet -novelette -noveletter -novelettish -novelettist -noveletty -novelish -novelism -novelist -novelistic -novelistically -novelization -novelize -novella -novelless -novellike -novelly -novelmongering -novelness -novelry -novelty -novelwright -novem -novemarticulate -novemcostate -novemdigitate -novemfid -novemlobate -novemnervate -novemperfoliate -novena -novenary -novendial -novene -novennial -novercal -novice -novicehood -novicelike -noviceship -noviciate -novilunar -novitial -novitiate -novitiateship -novitiation -novity -novodamus -now -nowaday -nowadays -nowanights -noway -noways -nowed -nowel -nowhat -nowhen -nowhence -nowhere -nowhereness -nowheres -nowhit -nowhither -nowise -nowness -nowt -nowy -noxa -noxal -noxally -noxious -noxiously -noxiousness -noy -noyade -noyau -nozzle -nozzler -nth -nu -nuance -nub -nubbin -nubble -nubbling -nubbly -nubby -nubecula -nubia -nubiferous -nubiform -nubigenous -nubilate -nubilation -nubile -nubility -nubilous -nucal -nucament -nucamentaceous -nucellar -nucellus -nucha -nuchal -nuchalgia -nuciculture -nuciferous -nuciform -nucin -nucivorous -nucleal -nuclear -nucleary -nuclease -nucleate -nucleation -nucleator -nuclei -nucleiferous -nucleiform -nuclein -nucleinase -nucleoalbumin -nucleoalbuminuria -nucleofugal -nucleohistone -nucleohyaloplasm -nucleohyaloplasma -nucleoid -nucleoidioplasma -nucleolar -nucleolated -nucleole -nucleoli -nucleolinus -nucleolocentrosome -nucleoloid -nucleolus -nucleolysis -nucleomicrosome -nucleon -nucleone -nucleonics -nucleopetal -nucleoplasm -nucleoplasmatic -nucleoplasmic -nucleoprotein -nucleoside -nucleotide -nucleus -nuclide -nuclidic -nuculanium -nucule -nuculid -nuculiform -nuculoid -nudate -nudation -nuddle -nude -nudely -nudeness -nudge -nudger -nudibranch -nudibranchian -nudibranchiate -nudicaudate -nudicaul -nudifier -nudiflorous -nudiped -nudish -nudism -nudist -nuditarian -nudity -nugacious -nugaciousness -nugacity -nugator -nugatoriness -nugatory -nuggar -nugget -nuggety -nugify -nugilogue -nuisance -nuisancer -nuke -nul -null -nullable -nullah -nullibicity -nullibility -nullibiquitous -nullibist -nullification -nullificationist -nullificator -nullifidian -nullifier -nullify -nullipara -nulliparity -nulliparous -nullipennate -nulliplex -nullipore -nulliporous -nullism -nullisome -nullisomic -nullity -nulliverse -nullo -numb -number -numberable -numberer -numberful -numberless -numberous -numbersome -numbfish -numbing -numbingly -numble -numbles -numbly -numbness -numda -numdah -numen -numerable -numerableness -numerably -numeral -numerant -numerary -numerate -numeration -numerative -numerator -numerical -numerically -numericalness -numerist -numero -numerology -numerose -numerosity -numerous -numerously -numerousness -numinism -numinous -numinously -numismatic -numismatical -numismatically -numismatician -numismatics -numismatist -numismatography -numismatologist -numismatology -nummary -nummi -nummiform -nummular -nummulary -nummulated -nummulation -nummuline -nummulite -nummulitic -nummulitoid -nummuloidal -nummus -numskull -numskulled -numskulledness -numskullery -numskullism -numud -nun -nunatak -nunbird -nunch -nuncheon -nunciate -nunciative -nunciatory -nunciature -nuncio -nuncioship -nuncle -nuncupate -nuncupation -nuncupative -nuncupatively -nundinal -nundination -nundine -nunhood -nunky -nunlet -nunlike -nunnari -nunnated -nunnation -nunnery -nunni -nunnify -nunnish -nunnishness -nunship -nuptial -nuptiality -nuptialize -nuptially -nuptials -nuque -nuraghe -nurhag -nurly -nursable -nurse -nursedom -nursegirl -nursehound -nursekeeper -nursekin -nurselet -nurselike -nursemaid -nurser -nursery -nurserydom -nurseryful -nurserymaid -nurseryman -nursetender -nursing -nursingly -nursle -nursling -nursy -nurturable -nurtural -nurture -nurtureless -nurturer -nurtureship -nusfiah -nut -nutant -nutarian -nutate -nutation -nutational -nutbreaker -nutcake -nutcrack -nutcracker -nutcrackers -nutcrackery -nutgall -nuthatch -nuthook -nutjobber -nutlet -nutlike -nutmeg -nutmegged -nutmeggy -nutpecker -nutpick -nutramin -nutria -nutrice -nutricial -nutricism -nutrient -nutrify -nutriment -nutrimental -nutritial -nutrition -nutritional -nutritionally -nutritionist -nutritious -nutritiously -nutritiousness -nutritive -nutritively -nutritiveness -nutritory -nutseed -nutshell -nuttalliasis -nuttalliosis -nutted -nutter -nuttery -nuttily -nuttiness -nutting -nuttish -nuttishness -nutty -nuzzer -nuzzerana -nuzzle -nyanza -nychthemer -nychthemeral -nychthemeron -nyctaginaceous -nyctalope -nyctalopia -nyctalopic -nyctalopy -nycteribiid -nycterine -nyctinastic -nyctinasty -nyctipelagic -nyctipithecine -nyctitropic -nyctitropism -nyctophobia -nycturia -nye -nylast -nylon -nymil -nymph -nympha -nymphae -nymphaeaceous -nymphaeum -nymphal -nymphalid -nymphaline -nympheal -nymphean -nymphet -nymphic -nymphical -nymphid -nymphine -nymphiparous -nymphish -nymphitis -nymphlike -nymphlin -nymphly -nympholepsia -nympholepsy -nympholept -nympholeptic -nymphomania -nymphomaniac -nymphomaniacal -nymphosis -nymphotomy -nymphwise -nystagmic -nystagmus -nyxis -o -oadal -oaf -oafdom -oafish -oafishly -oafishness -oak -oakberry -oaken -oakenshaw -oaklet -oaklike -oakling -oaktongue -oakum -oakweb -oakwood -oaky -oam -oar -oarage -oarcock -oared -oarfish -oarhole -oarial -oarialgia -oaric -oariocele -oariopathic -oariopathy -oariotomy -oaritic -oaritis -oarium -oarless -oarlike -oarlock -oarlop -oarman -oarsman -oarsmanship -oarswoman -oarweed -oary -oasal -oasean -oases -oasis -oasitic -oast -oasthouse -oat -oatbin -oatcake -oatear -oaten -oatenmeal -oatfowl -oath -oathay -oathed -oathful -oathlet -oathworthy -oatland -oatlike -oatmeal -oatseed -oaty -obambulate -obambulation -obambulatory -oban -obbligato -obclavate -obclude -obcompressed -obconical -obcordate -obcordiform -obcuneate -obdeltoid -obdiplostemonous -obdiplostemony -obdormition -obduction -obduracy -obdurate -obdurately -obdurateness -obduration -obe -obeah -obeahism -obeche -obedience -obediency -obedient -obediential -obedientially -obedientialness -obedientiar -obedientiary -obediently -obeisance -obeisant -obeisantly -obeism -obelia -obeliac -obelial -obelion -obeliscal -obeliscar -obelisk -obeliskoid -obelism -obelize -obelus -obese -obesely -obeseness -obesity -obex -obey -obeyable -obeyer -obeyingly -obfuscable -obfuscate -obfuscation -obfuscator -obfuscity -obfuscous -obi -obispo -obit -obitual -obituarian -obituarily -obituarist -obituarize -obituary -object -objectable -objectation -objectative -objectee -objecthood -objectification -objectify -objection -objectionability -objectionable -objectionableness -objectionably -objectional -objectioner -objectionist -objectival -objectivate -objectivation -objective -objectively -objectiveness -objectivism -objectivist -objectivistic -objectivity -objectivize -objectization -objectize -objectless -objectlessly -objectlessness -objector -objicient -objuration -objure -objurgate -objurgation -objurgative -objurgatively -objurgator -objurgatorily -objurgatory -objurgatrix -oblanceolate -oblate -oblately -oblateness -oblation -oblational -oblationary -oblatory -oblectate -oblectation -obley -obligable -obligancy -obligant -obligate -obligation -obligational -obligative -obligativeness -obligator -obligatorily -obligatoriness -obligatory -obligatum -oblige -obliged -obligedly -obligedness -obligee -obligement -obliger -obliging -obligingly -obligingness -obligistic -obligor -obliquangular -obliquate -obliquation -oblique -obliquely -obliqueness -obliquitous -obliquity -obliquus -obliterable -obliterate -obliteration -obliterative -obliterator -oblivescence -oblivial -obliviality -oblivion -oblivionate -oblivionist -oblivionize -oblivious -obliviously -obliviousness -obliviscence -obliviscible -oblocutor -oblong -oblongatal -oblongated -oblongish -oblongitude -oblongitudinal -oblongly -oblongness -obloquial -obloquious -obloquy -obmutescence -obmutescent -obnebulate -obnounce -obnoxiety -obnoxious -obnoxiously -obnoxiousness -obnubilate -obnubilation -obnunciation -oboe -oboist -obol -obolary -obole -obolet -obolus -obomegoid -oboval -obovate -obovoid -obpyramidal -obpyriform -obreption -obreptitious -obreptitiously -obrogate -obrogation -obrotund -obscene -obscenely -obsceneness -obscenity -obscurancy -obscurant -obscurantic -obscurantism -obscurantist -obscuration -obscurative -obscure -obscuredly -obscurely -obscurement -obscureness -obscurer -obscurism -obscurist -obscurity -obsecrate -obsecration -obsecrationary -obsecratory -obsede -obsequence -obsequent -obsequial -obsequience -obsequiosity -obsequious -obsequiously -obsequiousness -obsequity -obsequium -obsequy -observability -observable -observableness -observably -observance -observancy -observandum -observant -observantly -observantness -observation -observational -observationalism -observationally -observative -observatorial -observatory -observe -observedly -observer -observership -observing -observingly -obsess -obsessingly -obsession -obsessional -obsessionist -obsessive -obsessor -obsidian -obsidianite -obsidional -obsidionary -obsidious -obsignate -obsignation -obsignatory -obsolesce -obsolescence -obsolescent -obsolescently -obsolete -obsoletely -obsoleteness -obsoletion -obsoletism -obstacle -obstetric -obstetrical -obstetrically -obstetricate -obstetrication -obstetrician -obstetrics -obstetricy -obstetrist -obstetrix -obstinacious -obstinacy -obstinance -obstinate -obstinately -obstinateness -obstination -obstinative -obstipation -obstreperate -obstreperosity -obstreperous -obstreperously -obstreperousness -obstriction -obstringe -obstruct -obstructant -obstructedly -obstructer -obstructingly -obstruction -obstructionism -obstructionist -obstructive -obstructively -obstructiveness -obstructivism -obstructivity -obstructor -obstruent -obstupefy -obtain -obtainable -obtainal -obtainance -obtainer -obtainment -obtect -obtected -obtemper -obtemperate -obtenebrate -obtenebration -obtention -obtest -obtestation -obtriangular -obtrude -obtruder -obtruncate -obtruncation -obtruncator -obtrusion -obtrusionist -obtrusive -obtrusively -obtrusiveness -obtund -obtundent -obtunder -obtundity -obturate -obturation -obturator -obturatory -obturbinate -obtusangular -obtuse -obtusely -obtuseness -obtusifid -obtusifolious -obtusilingual -obtusilobous -obtusion -obtusipennate -obtusirostrate -obtusish -obtusity -obumbrant -obumbrate -obumbration -obvallate -obvelation -obvention -obverse -obversely -obversion -obvert -obvertend -obviable -obviate -obviation -obviative -obviator -obvious -obviously -obviousness -obvolute -obvoluted -obvolution -obvolutive -obvolve -obvolvent -ocarina -occamy -occasion -occasionable -occasional -occasionalism -occasionalist -occasionalistic -occasionality -occasionally -occasionalness -occasionary -occasioner -occasionless -occasive -occident -occidental -occidentality -occidentally -occiduous -occipital -occipitalis -occipitally -occipitoanterior -occipitoatlantal -occipitoatloid -occipitoaxial -occipitoaxoid -occipitobasilar -occipitobregmatic -occipitocalcarine -occipitocervical -occipitofacial -occipitofrontal -occipitofrontalis -occipitohyoid -occipitoiliac -occipitomastoid -occipitomental -occipitonasal -occipitonuchal -occipitootic -occipitoparietal -occipitoposterior -occipitoscapular -occipitosphenoid -occipitosphenoidal -occipitotemporal -occipitothalamic -occiput -occitone -occlude -occludent -occlusal -occluse -occlusion -occlusive -occlusiveness -occlusocervical -occlusocervically -occlusogingival -occlusometer -occlusor -occult -occultate -occultation -occulter -occulting -occultism -occultist -occultly -occultness -occupable -occupance -occupancy -occupant -occupation -occupational -occupationalist -occupationally -occupationless -occupative -occupiable -occupier -occupy -occur -occurrence -occurrent -occursive -ocean -oceaned -oceanet -oceanful -oceanic -oceanity -oceanographer -oceanographic -oceanographical -oceanographically -oceanographist -oceanography -oceanology -oceanophyte -oceanside -oceanward -oceanwards -oceanways -oceanwise -ocellar -ocellary -ocellate -ocellated -ocellation -ocelli -ocellicyst -ocellicystic -ocelliferous -ocelliform -ocelligerous -ocellus -oceloid -ocelot -och -ochava -ochavo -ocher -ocherish -ocherous -ochery -ochidore -ochlesis -ochlesitic -ochletic -ochlocracy -ochlocrat -ochlocratic -ochlocratical -ochlocratically -ochlophobia -ochlophobist -ochnaceous -ochone -ochraceous -ochrea -ochreate -ochreous -ochro -ochrocarpous -ochroid -ochroleucous -ochrolite -ochronosis -ochronosus -ochronotic -ochrous -ocht -ock -oclock -ocote -ocotillo -ocque -ocracy -ocrea -ocreaceous -ocreate -ocreated -octachloride -octachord -octachordal -octachronous -octacolic -octactinal -octactine -octactinian -octad -octadecahydrate -octadecane -octadecanoic -octadecyl -octadic -octadrachm -octaemeron -octaeteric -octaeterid -octagon -octagonal -octagonally -octahedral -octahedric -octahedrical -octahedrite -octahedroid -octahedron -octahedrous -octahydrate -octahydrated -octakishexahedron -octamerism -octamerous -octameter -octan -octanaphthene -octandrian -octandrious -octane -octangle -octangular -octangularness -octant -octantal -octapla -octaploid -octaploidic -octaploidy -octapodic -octapody -octarch -octarchy -octarius -octarticulate -octary -octasemic -octastich -octastichon -octastrophic -octastyle -octastylos -octateuch -octaval -octavalent -octavarium -octave -octavic -octavina -octavo -octenary -octene -octennial -octennially -octet -octic -octillion -octillionth -octine -octingentenary -octoad -octoalloy -octoate -octobass -octobrachiate -octocentenary -octocentennial -octochord -octocorallan -octocoralline -octocotyloid -octodactyl -octodactyle -octodactylous -octodecimal -octodecimo -octodentate -octodianome -octodont -octoechos -octofid -octofoil -octofoiled -octogamy -octogenarian -octogenarianism -octogenary -octogild -octoglot -octogynian -octogynious -octogynous -octoic -octoid -octolateral -octolocular -octomeral -octomerous -octometer -octonal -octonare -octonarian -octonarius -octonary -octonematous -octonion -octonocular -octoon -octopartite -octopean -octoped -octopede -octopetalous -octophthalmous -octophyllous -octopi -octopine -octoploid -octoploidic -octoploidy -octopod -octopodan -octopodes -octopodous -octopolar -octopus -octoradial -octoradiate -octoradiated -octoreme -octoroon -octose -octosepalous -octospermous -octospore -octosporous -octostichous -octosyllabic -octosyllable -octovalent -octoyl -octroi -octroy -octuor -octuple -octuplet -octuplex -octuplicate -octuplication -octuply -octyl -octylene -octyne -ocuby -ocular -ocularist -ocularly -oculary -oculate -oculated -oculauditory -oculiferous -oculiform -oculigerous -oculinid -oculinoid -oculist -oculistic -oculocephalic -oculofacial -oculofrontal -oculomotor -oculomotory -oculonasal -oculopalpebral -oculopupillary -oculospinal -oculozygomatic -oculus -ocydrome -ocydromine -ocypodan -ocypodian -ocypodoid -od -oda -odacoid -odal -odalborn -odalisk -odalisque -odaller -odalman -odalwoman -odd -oddish -oddity -oddlegs -oddly -oddman -oddment -oddments -oddness -odds -oddsman -ode -odel -odelet -odeon -odeum -odic -odically -odinite -odiometer -odious -odiously -odiousness -odist -odium -odiumproof -odograph -odology -odometer -odometrical -odometry -odontagra -odontalgia -odontalgic -odontatrophia -odontatrophy -odontexesis -odontiasis -odontic -odontist -odontitis -odontoblast -odontoblastic -odontocele -odontocete -odontocetous -odontochirurgic -odontoclasis -odontoclast -odontodynia -odontogen -odontogenesis -odontogenic -odontogeny -odontoglossal -odontoglossate -odontognathic -odontognathous -odontograph -odontographic -odontography -odontohyperesthesia -odontoid -odontolcate -odontolcous -odontolite -odontolith -odontological -odontologist -odontology -odontoloxia -odontoma -odontomous -odontonecrosis -odontoneuralgia -odontonosology -odontopathy -odontophoral -odontophore -odontophorine -odontophorous -odontoplast -odontoplerosis -odontorhynchous -odontornithic -odontorrhagia -odontorthosis -odontoschism -odontoscope -odontosis -odontostomatous -odontostomous -odontotechny -odontotherapia -odontotherapy -odontotomy -odontotripsis -odontotrypy -odoom -odophone -odor -odorant -odorate -odorator -odored -odorful -odoriferant -odoriferosity -odoriferous -odoriferously -odoriferousness -odorific -odorimeter -odorimetry -odoriphore -odorivector -odorize -odorless -odorometer -odorosity -odorous -odorously -odorousness -odorproof -odso -odum -odyl -odylic -odylism -odylist -odylization -odylize -oe -oecist -oecodomic -oecodomical -oecoparasite -oecoparasitism -oecophobia -oecumenian -oecumenic -oecumenical -oecumenicalism -oecumenicity -oecus -oedemerid -oedicnemine -oedogoniaceous -oenanthaldehyde -oenanthate -oenanthic -oenanthol -oenanthole -oenanthyl -oenanthylate -oenanthylic -oenin -oenochoe -oenocyte -oenocytic -oenolin -oenological -oenologist -oenology -oenomancy -oenomel -oenometer -oenophilist -oenophobist -oenopoetic -oenotheraceous -oer -oersted -oes -oesophageal -oesophagi -oesophagismus -oesophagostomiasis -oesophagus -oestradiol -oestrian -oestriasis -oestrid -oestrin -oestriol -oestroid -oestrous -oestrual -oestruate -oestruation -oestrum -oestrus -of -off -offal -offaling -offbeat -offcast -offcome -offcut -offend -offendable -offendant -offended -offendedly -offendedness -offender -offendible -offendress -offense -offenseful -offenseless -offenselessly -offenseproof -offensible -offensive -offensively -offensiveness -offer -offerable -offeree -offerer -offering -offeror -offertorial -offertory -offgoing -offgrade -offhand -offhanded -offhandedly -offhandedness -office -officeholder -officeless -officer -officerage -officeress -officerhood -officerial -officerism -officerless -officership -official -officialdom -officialese -officialism -officiality -officialization -officialize -officially -officialty -officiant -officiary -officiate -officiation -officiator -officinal -officinally -officious -officiously -officiousness -offing -offish -offishly -offishness -offlet -offlook -offprint -offsaddle -offscape -offscour -offscourer -offscouring -offscum -offset -offshoot -offshore -offsider -offspring -offtake -offtype -offuscate -offuscation -offward -offwards -oflete -oft -often -oftenness -oftens -oftentime -oftentimes -ofter -oftest -oftly -oftness -ofttime -ofttimes -oftwhiles -ogaire -ogam -ogamic -ogdoad -ogdoas -ogee -ogeed -ogganition -ogham -oghamic -ogival -ogive -ogived -ogle -ogler -ogmic -ogre -ogreish -ogreishly -ogreism -ogress -ogrish -ogrism -ogtiern -ogum -oh -ohelo -ohia -ohm -ohmage -ohmic -ohmmeter -oho -ohoy -oidioid -oidiomycosis -oidiomycotic -oii -oikology -oikoplast -oil -oilberry -oilbird -oilcan -oilcloth -oilcoat -oilcup -oildom -oiled -oiler -oilery -oilfish -oilhole -oilily -oiliness -oilless -oillessness -oillet -oillike -oilman -oilmonger -oilmongery -oilometer -oilpaper -oilproof -oilproofing -oilseed -oilskin -oilskinned -oilstock -oilstone -oilstove -oiltight -oiltightness -oilway -oily -oilyish -oime -oinochoe -oinology -oinomancy -oinomania -oinomel -oint -ointment -oisin -oisivity -oitava -oiticica -oka -okapi -okee -okenite -oket -oki -okia -okoniosis -okonite -okra -okrug -okshoofd -okthabah -okupukupu -olacaceous -olam -olamic -old -olden -older -oldermost -oldfangled -oldfangledness -oldhamite -oldhearted -oldish -oldland -oldness -oldster -oldwife -oleaceous -oleaginous -oleaginousness -oleana -oleander -oleandrin -olease -oleaster -oleate -olecranal -olecranarthritis -olecranial -olecranian -olecranoid -olecranon -olefiant -olefin -olefine -olefinic -oleic -oleiferous -olein -olena -olenellidian -olenid -olenidian -olent -oleo -oleocalcareous -oleocellosis -oleocyst -oleoduct -oleograph -oleographer -oleographic -oleography -oleomargaric -oleomargarine -oleometer -oleoptene -oleorefractometer -oleoresin -oleoresinous -oleosaccharum -oleose -oleosity -oleostearate -oleostearin -oleothorax -oleous -oleraceous -olericultural -olericulturally -olericulture -olethreutid -olfact -olfactible -olfaction -olfactive -olfactology -olfactometer -olfactometric -olfactometry -olfactor -olfactorily -olfactory -olfacty -oliban -olibanum -olid -oligacanthous -oligaemia -oligandrous -oliganthous -oligarch -oligarchal -oligarchic -oligarchical -oligarchically -oligarchism -oligarchist -oligarchize -oligarchy -oligemia -oligidria -oligist -oligistic -oligistical -oligocarpous -oligochaete -oligochaetous -oligochete -oligocholia -oligochrome -oligochromemia -oligochronometer -oligochylia -oligoclase -oligoclasite -oligocystic -oligocythemia -oligocythemic -oligodactylia -oligodendroglia -oligodendroglioma -oligodipsia -oligodontous -oligodynamic -oligogalactia -oligohemia -oligohydramnios -oligolactia -oligomenorrhea -oligomerous -oligomery -oligometochia -oligometochic -oligomyodian -oligomyoid -oligonephric -oligonephrous -oligonite -oligopepsia -oligopetalous -oligophagous -oligophosphaturia -oligophrenia -oligophrenic -oligophyllous -oligoplasmia -oligopnea -oligopolistic -oligopoly -oligoprothesy -oligoprothetic -oligopsonistic -oligopsony -oligopsychia -oligopyrene -oligorhizous -oligosepalous -oligosialia -oligosideric -oligosiderite -oligosite -oligospermia -oligospermous -oligostemonous -oligosyllabic -oligosyllable -oligosynthetic -oligotokous -oligotrichia -oligotrophic -oligotrophy -oligotropic -oliguresis -oliguretic -oliguria -oliniaceous -olio -oliphant -oliprance -olitory -oliva -olivaceous -olivary -olive -olived -oliveness -olivenite -oliverman -oliversmith -olivescent -olivet -olivewood -oliviferous -oliviform -olivil -olivile -olivilin -olivine -olivinefels -olivinic -olivinite -olivinitic -olla -ollamh -ollapod -ollenite -ollock -olm -ological -ologist -ologistic -ology -olomao -olona -oloroso -olpe -oltonde -oltunna -olycook -olykoek -om -omadhaun -omagra -omalgia -omao -omarthritis -omasitis -omasum -omber -ombrette -ombrifuge -ombrograph -ombrological -ombrology -ombrometer -ombrophile -ombrophilic -ombrophilous -ombrophily -ombrophobe -ombrophobous -ombrophoby -ombrophyte -ombudsman -ombudsmanship -omega -omegoid -omelet -omelette -omen -omened -omenology -omental -omentectomy -omentitis -omentocele -omentofixation -omentopexy -omentoplasty -omentorrhaphy -omentosplenopexy -omentotomy -omentulum -omentum -omer -omicron -omina -ominous -ominously -ominousness -omissible -omission -omissive -omissively -omit -omitis -omittable -omitter -omlah -ommateal -ommateum -ommatidial -ommatidium -ommatophore -ommatophorous -omneity -omniactive -omniactuality -omniana -omniarch -omnibenevolence -omnibenevolent -omnibus -omnibusman -omnicausality -omnicompetence -omnicompetent -omnicorporeal -omnicredulity -omnicredulous -omnidenominational -omnierudite -omniessence -omnifacial -omnifarious -omnifariously -omnifariousness -omniferous -omnific -omnificent -omnifidel -omniform -omniformal -omniformity -omnify -omnigenous -omnigerent -omnigraph -omnihuman -omnihumanity -omnilegent -omnilingual -omniloquent -omnilucent -omnimental -omnimeter -omnimode -omnimodous -omninescience -omninescient -omniparent -omniparient -omniparity -omniparous -omnipatient -omnipercipience -omnipercipiency -omnipercipient -omniperfect -omnipotence -omnipotency -omnipotent -omnipotentiality -omnipotently -omnipregnant -omnipresence -omnipresent -omnipresently -omniprevalence -omniprevalent -omniproduction -omniprudent -omnirange -omniregency -omnirepresentative -omnirepresentativeness -omnirevealing -omniscience -omnisciency -omniscient -omnisciently -omniscope -omniscribent -omniscriptive -omnisentience -omnisentient -omnisignificance -omnisignificant -omnispective -omnist -omnisufficiency -omnisufficient -omnitemporal -omnitenent -omnitolerant -omnitonal -omnitonality -omnitonic -omnitude -omnium -omnivagant -omnivalence -omnivalent -omnivalous -omnivarious -omnividence -omnivident -omnivision -omnivolent -omnivoracious -omnivoracity -omnivorant -omnivore -omnivorous -omnivorously -omnivorousness -omodynia -omohyoid -omoideum -omophagia -omophagist -omophagous -omophagy -omophorion -omoplate -omoplatoscopy -omostegite -omosternal -omosternum -omphacine -omphacite -omphalectomy -omphalic -omphalism -omphalitis -omphalocele -omphalode -omphalodium -omphalogenous -omphaloid -omphaloma -omphalomesaraic -omphalomesenteric -omphaloncus -omphalopagus -omphalophlebitis -omphalopsychic -omphalopsychite -omphalorrhagia -omphalorrhea -omphalorrhexis -omphalos -omphalosite -omphaloskepsis -omphalospinous -omphalotomy -omphalotripsy -omphalus -on -ona -onager -onagra -onagraceous -onanism -onanist -onanistic -onca -once -oncetta -onchocerciasis -onchocercosis -oncia -oncin -oncograph -oncography -oncologic -oncological -oncology -oncome -oncometer -oncometric -oncometry -oncoming -oncosimeter -oncosis -oncosphere -oncost -oncostman -oncotomy -ondagram -ondagraph -ondameter -ondascope -ondatra -ondine -ondogram -ondograph -ondometer -ondoscope -ondy -one -oneanother -oneberry -onefold -onefoldness -onegite -onehearted -onehow -oneiric -oneirocrit -oneirocritic -oneirocritical -oneirocritically -oneirocriticism -oneirocritics -oneirodynia -oneirologist -oneirology -oneiromancer -oneiromancy -oneiroscopic -oneiroscopist -oneiroscopy -oneirotic -oneism -onement -oneness -oner -onerary -onerative -onerosity -onerous -onerously -onerousness -onery -oneself -onesigned -onetime -onewhere -oneyer -onfall -onflemed -onflow -onflowing -ongaro -ongoing -onhanger -onicolo -oniomania -oniomaniac -onion -onionet -onionized -onionlike -onionpeel -onionskin -oniony -onirotic -onisciform -oniscoid -oniscoidean -onium -onkilonite -onkos -onlay -onlepy -onliest -onliness -onlook -onlooker -onlooking -only -onmarch -onocentaur -onofrite -onolatry -onomancy -onomantia -onomastic -onomasticon -onomatologist -onomatology -onomatomania -onomatope -onomatoplasm -onomatopoeia -onomatopoeial -onomatopoeian -onomatopoeic -onomatopoeical -onomatopoeically -onomatopoesis -onomatopoesy -onomatopoetic -onomatopoetically -onomatopy -onomatous -onomomancy -onrush -onrushing -ons -onset -onsetter -onshore -onside -onsight -onslaught -onstand -onstanding -onstead -onsweep -onsweeping -ontal -onto -ontocycle -ontocyclic -ontogenal -ontogenesis -ontogenetic -ontogenetical -ontogenetically -ontogenic -ontogenically -ontogenist -ontogeny -ontography -ontologic -ontological -ontologically -ontologism -ontologist -ontologistic -ontologize -ontology -ontosophy -onus -onwaiting -onward -onwardly -onwardness -onwards -onycha -onychatrophia -onychauxis -onychia -onychin -onychitis -onychium -onychogryposis -onychoid -onycholysis -onychomalacia -onychomancy -onychomycosis -onychonosus -onychopathic -onychopathology -onychopathy -onychophagist -onychophagy -onychophoran -onychophorous -onychophyma -onychoptosis -onychorrhexis -onychoschizia -onychosis -onychotrophy -onym -onymal -onymancy -onymatic -onymity -onymize -onymous -onymy -onyx -onyxis -onyxitis -onza -ooangium -ooblast -ooblastic -oocyesis -oocyst -oocystaceous -oocystic -oocyte -oodles -ooecial -ooecium -oofbird -ooftish -oofy -oogamete -oogamous -oogamy -oogenesis -oogenetic -oogeny -ooglea -oogone -oogonial -oogoniophore -oogonium -oograph -ooid -ooidal -ookinesis -ookinete -ookinetic -oolak -oolemma -oolite -oolitic -oolly -oologic -oological -oologically -oologist -oologize -oology -oolong -oomancy -oomantia -oometer -oometric -oometry -oomycete -oomycetous -oons -oont -oopak -oophoralgia -oophorauxe -oophore -oophorectomy -oophoreocele -oophorhysterectomy -oophoric -oophoridium -oophoritis -oophoroepilepsy -oophoroma -oophoromalacia -oophoromania -oophoron -oophoropexy -oophororrhaphy -oophorosalpingectomy -oophorostomy -oophorotomy -oophyte -oophytic -ooplasm -ooplasmic -ooplast -oopod -oopodal -ooporphyrin -oorali -oord -ooscope -ooscopy -oosperm -oosphere -oosporange -oosporangium -oospore -oosporic -oosporiferous -oosporous -oostegite -oostegitic -ootheca -oothecal -ootid -ootocoid -ootocoidean -ootocous -ootype -ooze -oozily -ooziness -oozooid -oozy -opacate -opacification -opacifier -opacify -opacite -opacity -opacous -opacousness -opah -opal -opaled -opalesce -opalescence -opalescent -opalesque -opaline -opalinid -opalinine -opalish -opalize -opaloid -opaque -opaquely -opaqueness -opdalite -ope -opeidoscope -opelet -open -openable -openband -openbeak -openbill -opencast -opener -openhanded -openhandedly -openhandedness -openhead -openhearted -openheartedly -openheartedness -opening -openly -openmouthed -openmouthedly -openmouthedness -openness -openside -openwork -opera -operability -operabily -operable -operae -operagoer -operalogue -operameter -operance -operancy -operand -operant -operatable -operate -operatee -operatic -operatical -operatically -operating -operation -operational -operationalism -operationalist -operationism -operationist -operative -operatively -operativeness -operativity -operatize -operator -operatory -operatrix -opercle -opercled -opercula -opercular -operculate -operculated -operculiferous -operculiform -operculigenous -operculigerous -operculum -operetta -operette -operettist -operose -operosely -operoseness -operosity -ophelimity -ophiasis -ophic -ophicalcite -ophicephaloid -ophichthyoid -ophicleide -ophicleidean -ophicleidist -ophidian -ophidioid -ophidiophobia -ophidious -ophidologist -ophidology -ophioglossaceous -ophiography -ophioid -ophiolater -ophiolatrous -ophiolatry -ophiolite -ophiolitic -ophiologic -ophiological -ophiologist -ophiology -ophiomancy -ophiomorph -ophiomorphic -ophiomorphous -ophionid -ophionine -ophiophagous -ophiophilism -ophiophilist -ophiophobe -ophiophobia -ophiophoby -ophiopluteus -ophiostaphyle -ophiouride -ophite -ophitic -ophiuran -ophiurid -ophiuroid -ophiuroidean -ophryon -ophthalaiater -ophthalmagra -ophthalmalgia -ophthalmalgic -ophthalmatrophia -ophthalmectomy -ophthalmencephalon -ophthalmetrical -ophthalmia -ophthalmiac -ophthalmiatrics -ophthalmic -ophthalmious -ophthalmist -ophthalmite -ophthalmitic -ophthalmitis -ophthalmoblennorrhea -ophthalmocarcinoma -ophthalmocele -ophthalmocopia -ophthalmodiagnosis -ophthalmodiastimeter -ophthalmodynamometer -ophthalmodynia -ophthalmography -ophthalmoleucoscope -ophthalmolith -ophthalmologic -ophthalmological -ophthalmologist -ophthalmology -ophthalmomalacia -ophthalmometer -ophthalmometric -ophthalmometry -ophthalmomycosis -ophthalmomyositis -ophthalmomyotomy -ophthalmoneuritis -ophthalmopathy -ophthalmophlebotomy -ophthalmophore -ophthalmophorous -ophthalmophthisis -ophthalmoplasty -ophthalmoplegia -ophthalmoplegic -ophthalmopod -ophthalmoptosis -ophthalmorrhagia -ophthalmorrhea -ophthalmorrhexis -ophthalmoscope -ophthalmoscopic -ophthalmoscopical -ophthalmoscopist -ophthalmoscopy -ophthalmostasis -ophthalmostat -ophthalmostatometer -ophthalmothermometer -ophthalmotomy -ophthalmotonometer -ophthalmotonometry -ophthalmotrope -ophthalmotropometer -ophthalmy -opianic -opianyl -opiate -opiateproof -opiatic -opificer -opiism -opiliaceous -opilionine -opinability -opinable -opinably -opinant -opination -opinative -opinatively -opinator -opine -opiner -opiniaster -opiniastre -opiniastrety -opiniastrous -opiniater -opiniative -opiniatively -opiniativeness -opiniatreness -opiniatrety -opinion -opinionable -opinionaire -opinional -opinionate -opinionated -opinionatedly -opinionatedness -opinionately -opinionative -opinionatively -opinionativeness -opinioned -opinionedness -opinionist -opiomania -opiomaniac -opiophagism -opiophagy -opiparous -opisometer -opisthenar -opisthion -opisthobranch -opisthobranchiate -opisthocoelian -opisthocoelous -opisthocome -opisthocomine -opisthocomous -opisthodetic -opisthodome -opisthodomos -opisthodomus -opisthodont -opisthogastric -opisthoglossal -opisthoglossate -opisthoglyph -opisthoglyphic -opisthoglyphous -opisthognathism -opisthognathous -opisthograph -opisthographal -opisthographic -opisthographical -opisthography -opisthogyrate -opisthogyrous -opisthoparian -opisthophagic -opisthoporeia -opisthorchiasis -opisthosomal -opisthotic -opisthotonic -opisthotonoid -opisthotonos -opisthotonus -opium -opiumism -opobalsam -opodeldoc -opodidymus -opodymus -opopanax -opossum -opotherapy -oppidan -oppilate -oppilation -oppilative -opponency -opponent -opportune -opportuneless -opportunely -opportuneness -opportunism -opportunist -opportunistic -opportunistically -opportunity -opposability -opposable -oppose -opposed -opposeless -opposer -opposing -opposingly -opposit -opposite -oppositely -oppositeness -oppositiflorous -oppositifolious -opposition -oppositional -oppositionary -oppositionism -oppositionist -oppositionless -oppositious -oppositipetalous -oppositipinnate -oppositipolar -oppositisepalous -oppositive -oppositively -oppositiveness -opposure -oppress -oppressed -oppressible -oppression -oppressionist -oppressive -oppressively -oppressiveness -oppressor -opprobriate -opprobrious -opprobriously -opprobriousness -opprobrium -opprobry -oppugn -oppugnacy -oppugnance -oppugnancy -oppugnant -oppugnate -oppugnation -oppugner -opsigamy -opsimath -opsimathy -opsiometer -opsisform -opsistype -opsonic -opsoniferous -opsonification -opsonify -opsonin -opsonist -opsonium -opsonization -opsonize -opsonogen -opsonoid -opsonology -opsonometry -opsonophilia -opsonophilic -opsonophoric -opsonotherapy -opsy -opt -optable -optableness -optably -optant -optate -optation -optative -optatively -opthalmophorium -opthalmoplegy -opthalmothermometer -optic -optical -optically -optician -opticist -opticity -opticochemical -opticociliary -opticon -opticopapillary -opticopupillary -optics -optigraph -optimacy -optimal -optimate -optimates -optime -optimism -optimist -optimistic -optimistical -optimistically -optimity -optimization -optimize -optimum -option -optional -optionality -optionalize -optionally -optionary -optionee -optionor -optive -optoblast -optogram -optography -optological -optologist -optology -optomeninx -optometer -optometrical -optometrist -optometry -optophone -optotechnics -optotype -opulence -opulency -opulent -opulently -opulus -opuntioid -opus -opuscular -opuscule -opusculum -oquassa -or -ora -orabassu -orach -oracle -oracular -oracularity -oracularly -oracularness -oraculate -oraculous -oraculously -oraculousness -oraculum -orad -orage -oragious -oral -oraler -oralism -oralist -orality -oralization -oralize -orally -oralogist -oralogy -orang -orange -orangeade -orangebird -orangeleaf -orangeman -oranger -orangeroot -orangery -orangewoman -orangewood -orangey -orangism -orangist -orangite -orangize -orangutan -orant -orarian -orarion -orarium -orary -orate -oration -orational -orationer -orator -oratorial -oratorially -oratorian -oratoric -oratorical -oratorically -oratorio -oratorize -oratorlike -oratorship -oratory -oratress -oratrix -orb -orbed -orbic -orbical -orbicle -orbicular -orbicularis -orbicularity -orbicularly -orbicularness -orbiculate -orbiculated -orbiculately -orbiculation -orbiculatocordate -orbiculatoelliptical -orbific -orbit -orbital -orbitale -orbitar -orbitary -orbite -orbitelar -orbitelarian -orbitele -orbitelous -orbitofrontal -orbitolite -orbitomalar -orbitomaxillary -orbitonasal -orbitopalpebral -orbitosphenoid -orbitosphenoidal -orbitostat -orbitotomy -orbitozygomatic -orbless -orblet -orby -orc -orcanet -orcein -orchamus -orchard -orcharding -orchardist -orchardman -orchat -orchel -orchella -orchesis -orchesography -orchester -orchestian -orchestic -orchestiid -orchestra -orchestral -orchestraless -orchestrally -orchestrate -orchestrater -orchestration -orchestrator -orchestre -orchestric -orchestrina -orchestrion -orchialgia -orchic -orchichorea -orchid -orchidacean -orchidaceous -orchidalgia -orchidectomy -orchideous -orchideously -orchidist -orchiditis -orchidocele -orchidocelioplasty -orchidologist -orchidology -orchidomania -orchidopexy -orchidoplasty -orchidoptosis -orchidorrhaphy -orchidotherapy -orchidotomy -orchiectomy -orchiencephaloma -orchiepididymitis -orchil -orchilla -orchilytic -orchiocatabasis -orchiocele -orchiodynia -orchiomyeloma -orchioncus -orchioneuralgia -orchiopexy -orchioplasty -orchiorrhaphy -orchioscheocele -orchioscirrhus -orchiotomy -orchitic -orchitis -orchotomy -orcin -orcinol -ordain -ordainable -ordainer -ordainment -ordanchite -ordeal -order -orderable -ordered -orderedness -orderer -orderless -orderliness -orderly -ordinable -ordinal -ordinally -ordinance -ordinand -ordinant -ordinar -ordinarily -ordinariness -ordinarius -ordinary -ordinaryship -ordinate -ordinately -ordination -ordinative -ordinatomaculate -ordinator -ordinee -ordines -ordnance -ordonnance -ordonnant -ordosite -ordu -ordure -ordurous -ore -oread -orecchion -orectic -orective -oreillet -orellin -oreman -orenda -orendite -oreodont -oreodontine -oreodontoid -oreophasine -oreotragine -oreweed -orewood -orexis -orf -orfgild -organ -organal -organbird -organdy -organella -organelle -organer -organette -organic -organical -organically -organicalness -organicism -organicismal -organicist -organicistic -organicity -organific -organing -organism -organismal -organismic -organist -organistic -organistrum -organistship -organity -organizability -organizable -organization -organizational -organizationally -organizationist -organizatory -organize -organized -organizer -organless -organoantimony -organoarsenic -organobismuth -organoboron -organochordium -organogel -organogen -organogenesis -organogenetic -organogenic -organogenist -organogeny -organogold -organographic -organographical -organographist -organography -organoid -organoiron -organolead -organoleptic -organolithium -organologic -organological -organologist -organology -organomagnesium -organomercury -organometallic -organon -organonomic -organonomy -organonym -organonymal -organonymic -organonymy -organopathy -organophil -organophile -organophilic -organophone -organophonic -organophyly -organoplastic -organoscopy -organosilicon -organosilver -organosodium -organosol -organotherapy -organotin -organotrophic -organotropic -organotropically -organotropism -organotropy -organozinc -organry -organule -organum -organzine -orgasm -orgasmic -orgastic -orgeat -orgia -orgiac -orgiacs -orgiasm -orgiast -orgiastic -orgiastical -orgic -orgue -orguinette -orgulous -orgulously -orgy -orgyia -oribi -orichalceous -orichalch -orichalcum -oriconic -oricycle -oriel -oriency -orient -oriental -orientalism -orientalist -orientality -orientalization -orientalize -orientally -orientate -orientation -orientative -orientator -orientite -orientization -orientize -oriently -orientness -orifacial -orifice -orificial -oriflamb -oriflamme -oriform -origan -origanized -origin -originable -original -originalist -originality -originally -originalness -originant -originarily -originary -originate -origination -originative -originatively -originator -originatress -originist -orignal -orihon -orihyperbola -orillion -orillon -orinasal -orinasality -oriole -orismologic -orismological -orismology -orison -orisphere -oristic -orle -orlean -orlet -orleways -orlewise -orlo -orlop -ormer -ormolu -orna -ornament -ornamental -ornamentalism -ornamentalist -ornamentality -ornamentalize -ornamentally -ornamentary -ornamentation -ornamenter -ornamentist -ornate -ornately -ornateness -ornation -ornature -orneriness -ornery -ornis -orniscopic -orniscopist -orniscopy -ornithic -ornithichnite -ornithine -ornithischian -ornithivorous -ornithobiographical -ornithobiography -ornithocephalic -ornithocephalous -ornithocoprolite -ornithocopros -ornithodelph -ornithodelphian -ornithodelphic -ornithodelphous -ornithogeographic -ornithogeographical -ornithography -ornithoid -ornitholite -ornitholitic -ornithologic -ornithological -ornithologically -ornithologist -ornithology -ornithomancy -ornithomantia -ornithomantic -ornithomantist -ornithomorph -ornithomorphic -ornithomyzous -ornithon -ornithophile -ornithophilist -ornithophilite -ornithophilous -ornithophily -ornithopod -ornithopter -ornithorhynchous -ornithosaur -ornithosaurian -ornithoscelidan -ornithoscopic -ornithoscopist -ornithoscopy -ornithosis -ornithotomical -ornithotomist -ornithotomy -ornithotrophy -ornithuric -ornithurous -ornoite -oroanal -orobanchaceous -orobancheous -orobathymetric -orocratic -orodiagnosis -orogen -orogenesis -orogenesy -orogenetic -orogenic -orogeny -orograph -orographic -orographical -orographically -orography -oroheliograph -orohydrographic -orohydrographical -orohydrography -oroide -orolingual -orological -orologist -orology -orometer -orometric -orometry -oronasal -oronoco -oropharyngeal -oropharynx -orotherapy -orotund -orotundity -orphan -orphancy -orphandom -orphange -orphanhood -orphanism -orphanize -orphanry -orphanship -orpharion -orpheon -orpheonist -orpheum -orphrey -orphreyed -orpiment -orpine -orrery -orrhoid -orrhology -orrhotherapy -orris -orrisroot -orseille -orseilline -orsel -orselle -orseller -orsellic -orsellinate -orsellinic -ort -ortalid -ortalidian -ortet -orthal -orthantimonic -orthian -orthic -orthicon -orthid -orthite -orthitic -ortho -orthoarsenite -orthoaxis -orthobenzoquinone -orthobiosis -orthoborate -orthobrachycephalic -orthocarbonic -orthocarpous -orthocenter -orthocentric -orthocephalic -orthocephalous -orthocephaly -orthoceracone -orthoceratite -orthoceratitic -orthoceratoid -orthochlorite -orthochromatic -orthochromatize -orthoclase -orthoclasite -orthoclastic -orthocoumaric -orthocresol -orthocymene -orthodiaene -orthodiagonal -orthodiagram -orthodiagraph -orthodiagraphic -orthodiagraphy -orthodiazin -orthodiazine -orthodolichocephalic -orthodomatic -orthodome -orthodontia -orthodontic -orthodontics -orthodontist -orthodox -orthodoxal -orthodoxality -orthodoxally -orthodoxian -orthodoxical -orthodoxically -orthodoxism -orthodoxist -orthodoxly -orthodoxness -orthodoxy -orthodromic -orthodromics -orthodromy -orthoepic -orthoepical -orthoepically -orthoepist -orthoepistic -orthoepy -orthoformic -orthogamous -orthogamy -orthogenesis -orthogenetic -orthogenic -orthognathic -orthognathism -orthognathous -orthognathus -orthognathy -orthogneiss -orthogonal -orthogonality -orthogonally -orthogonial -orthograde -orthogranite -orthograph -orthographer -orthographic -orthographical -orthographically -orthographist -orthographize -orthography -orthohydrogen -orthologer -orthologian -orthological -orthology -orthometopic -orthometric -orthometry -orthonitroaniline -orthopath -orthopathic -orthopathically -orthopathy -orthopedia -orthopedic -orthopedical -orthopedically -orthopedics -orthopedist -orthopedy -orthophenylene -orthophonic -orthophony -orthophoria -orthophoric -orthophosphate -orthophosphoric -orthophyre -orthophyric -orthopinacoid -orthopinacoidal -orthoplastic -orthoplasy -orthoplumbate -orthopnea -orthopneic -orthopod -orthopraxis -orthopraxy -orthoprism -orthopsychiatric -orthopsychiatrical -orthopsychiatrist -orthopsychiatry -orthopter -orthopteral -orthopteran -orthopterist -orthopteroid -orthopterological -orthopterologist -orthopterology -orthopteron -orthopterous -orthoptic -orthopyramid -orthopyroxene -orthoquinone -orthorhombic -orthorrhaphous -orthorrhaphy -orthoscope -orthoscopic -orthose -orthosemidin -orthosemidine -orthosilicate -orthosilicic -orthosis -orthosite -orthosomatic -orthospermous -orthostatic -orthostichous -orthostichy -orthostyle -orthosubstituted -orthosymmetric -orthosymmetrical -orthosymmetrically -orthosymmetry -orthotactic -orthotectic -orthotic -orthotolidin -orthotolidine -orthotoluic -orthotoluidin -orthotoluidine -orthotomic -orthotomous -orthotone -orthotonesis -orthotonic -orthotonus -orthotropal -orthotropic -orthotropism -orthotropous -orthotropy -orthotype -orthotypous -orthovanadate -orthovanadic -orthoveratraldehyde -orthoveratric -orthoxazin -orthoxazine -orthoxylene -orthron -ortiga -ortive -ortolan -ortstein -ortygan -ortygine -orvietan -orvietite -ory -oryctics -oryctognostic -oryctognostical -oryctognostically -oryctognosy -oryssid -oryzenin -oryzivorous -os -osamin -osamine -osazone -oscella -oscheal -oscheitis -oscheocarcinoma -oscheocele -oscheolith -oscheoma -oscheoncus -oscheoplasty -oscillance -oscillancy -oscillant -oscillariaceous -oscillate -oscillating -oscillation -oscillative -oscillatively -oscillator -oscillatoriaceous -oscillatorian -oscillatory -oscillogram -oscillograph -oscillographic -oscillography -oscillometer -oscillometric -oscillometry -oscilloscope -oscin -oscine -oscinian -oscinine -oscitance -oscitancy -oscitant -oscitantly -oscitate -oscitation -oscnode -osculable -osculant -oscular -oscularity -osculate -osculation -osculatory -osculatrix -oscule -osculiferous -osculum -oscurrantist -ose -osela -oshac -oside -osier -osiered -osierlike -osiery -osmate -osmatic -osmatism -osmazomatic -osmazomatous -osmazome -osmesis -osmeterium -osmetic -osmic -osmidrosis -osmin -osmina -osmious -osmiridium -osmium -osmodysphoria -osmogene -osmograph -osmolagnia -osmology -osmometer -osmometric -osmometry -osmondite -osmophore -osmoregulation -osmoscope -osmose -osmosis -osmotactic -osmotaxis -osmotherapy -osmotic -osmotically -osmous -osmund -osmundaceous -osmundine -osoberry -osone -osophy -osotriazine -osotriazole -osphradial -osphradium -osphresiolagnia -osphresiologic -osphresiologist -osphresiology -osphresiometer -osphresiometry -osphresiophilia -osphresis -osphretic -osphyalgia -osphyalgic -osphyarthritis -osphyitis -osphyocele -osphyomelitis -osprey -ossal -ossarium -ossature -osse -ossein -osselet -ossements -osseoalbuminoid -osseoaponeurotic -osseocartilaginous -osseofibrous -osseomucoid -osseous -osseously -ossicle -ossicular -ossiculate -ossicule -ossiculectomy -ossiculotomy -ossiculum -ossiferous -ossific -ossification -ossified -ossifier -ossifluence -ossifluent -ossiform -ossifrage -ossifrangent -ossify -ossivorous -ossuarium -ossuary -ossypite -ostalgia -ostariophysan -ostariophysial -ostariophysous -ostarthritis -osteal -ostealgia -osteanabrosis -osteanagenesis -ostearthritis -ostearthrotomy -ostectomy -osteectomy -osteectopia -osteectopy -ostein -osteitic -osteitis -ostemia -ostempyesis -ostensibility -ostensible -ostensibly -ostension -ostensive -ostensively -ostensorium -ostensory -ostent -ostentate -ostentation -ostentatious -ostentatiously -ostentatiousness -ostentive -ostentous -osteoaneurysm -osteoarthritis -osteoarthropathy -osteoarthrotomy -osteoblast -osteoblastic -osteoblastoma -osteocachetic -osteocarcinoma -osteocartilaginous -osteocele -osteocephaloma -osteochondritis -osteochondrofibroma -osteochondroma -osteochondromatous -osteochondropathy -osteochondrophyte -osteochondrosarcoma -osteochondrous -osteoclasia -osteoclasis -osteoclast -osteoclastic -osteoclasty -osteocolla -osteocomma -osteocranium -osteocystoma -osteodentin -osteodentinal -osteodentine -osteoderm -osteodermal -osteodermatous -osteodermia -osteodermis -osteodiastasis -osteodynia -osteodystrophy -osteoencephaloma -osteoenchondroma -osteoepiphysis -osteofibroma -osteofibrous -osteogangrene -osteogen -osteogenesis -osteogenetic -osteogenic -osteogenist -osteogenous -osteogeny -osteoglossid -osteoglossoid -osteographer -osteography -osteohalisteresis -osteoid -osteolite -osteologer -osteologic -osteological -osteologically -osteologist -osteology -osteolysis -osteolytic -osteoma -osteomalacia -osteomalacial -osteomalacic -osteomancy -osteomanty -osteomatoid -osteomere -osteometric -osteometrical -osteometry -osteomyelitis -osteoncus -osteonecrosis -osteoneuralgia -osteopaedion -osteopath -osteopathic -osteopathically -osteopathist -osteopathy -osteopedion -osteoperiosteal -osteoperiostitis -osteopetrosis -osteophage -osteophagia -osteophlebitis -osteophone -osteophony -osteophore -osteophyma -osteophyte -osteophytic -osteoplaque -osteoplast -osteoplastic -osteoplasty -osteoporosis -osteoporotic -osteorrhaphy -osteosarcoma -osteosarcomatous -osteosclerosis -osteoscope -osteosis -osteosteatoma -osteostixis -osteostomatous -osteostomous -osteostracan -osteosuture -osteosynovitis -osteosynthesis -osteothrombosis -osteotome -osteotomist -osteotomy -osteotribe -osteotrite -osteotrophic -osteotrophy -ostial -ostiary -ostiate -ostiolar -ostiolate -ostiole -ostitis -ostium -ostleress -ostmark -ostosis -ostracean -ostraceous -ostracine -ostracioid -ostracism -ostracizable -ostracization -ostracize -ostracizer -ostracod -ostracode -ostracoderm -ostracodous -ostracoid -ostracon -ostracophore -ostracophorous -ostracum -ostraite -ostreaceous -ostreger -ostreicultural -ostreiculture -ostreiculturist -ostreiform -ostreodynamometer -ostreoid -ostreophage -ostreophagist -ostreophagous -ostrich -ostrichlike -otacoustic -otacousticon -otalgia -otalgic -otalgy -otarian -otariine -otarine -otarioid -otary -otate -otectomy -otelcosis -othelcosis -othematoma -othemorrhea -otheoscope -other -otherdom -otherest -othergates -otherguess -otherhow -otherism -otherist -otherness -othersome -othertime -otherwards -otherwhence -otherwhere -otherwhereness -otherwheres -otherwhile -otherwhiles -otherwhither -otherwise -otherwiseness -otherworld -otherworldliness -otherworldly -otherworldness -othmany -othygroma -otiant -otiatric -otiatrics -otiatry -otic -oticodinia -otidiform -otidine -otidium -otiorhynchid -otiose -otiosely -otioseness -otiosity -otitic -otitis -otkon -otoantritis -otoblennorrhea -otocariasis -otocephalic -otocephaly -otocerebritis -otocleisis -otoconial -otoconite -otoconium -otocrane -otocranial -otocranic -otocranium -otocyst -otocystic -otodynia -otodynic -otoencephalitis -otogenic -otogenous -otographical -otography -otohemineurasthenia -otolaryngologic -otolaryngologist -otolaryngology -otolite -otolith -otolitic -otological -otologist -otology -otomassage -otomucormycosis -otomyces -otomycosis -otonecrectomy -otoneuralgia -otoneurasthenia -otopathic -otopathy -otopharyngeal -otophone -otopiesis -otoplastic -otoplasty -otopolypus -otopyorrhea -otopyosis -otorhinolaryngologic -otorhinolaryngologist -otorhinolaryngology -otorrhagia -otorrhea -otorrhoea -otosalpinx -otosclerosis -otoscope -otoscopic -otoscopy -otosis -otosphenal -otosteal -otosteon -ototomy -ottajanite -ottar -ottavarima -otter -otterer -otterhound -ottinger -ottingkar -otto -ottrelife -oturia -ouabain -ouabaio -ouabe -ouachitite -ouakari -ouananiche -oubliette -ouch -oudenarde -oudenodont -ouenite -ouf -ough -ought -oughtness -oughtnt -ouistiti -oukia -oulap -ounce -ounds -ouphe -ouphish -our -ourie -ouroub -ours -ourself -ourselves -oust -ouster -out -outact -outadmiral -outage -outambush -outarde -outargue -outask -outawe -outbabble -outback -outbacker -outbake -outbalance -outban -outbanter -outbar -outbargain -outbark -outbawl -outbeam -outbear -outbearing -outbeg -outbeggar -outbelch -outbellow -outbent -outbetter -outbid -outbidder -outbirth -outblacken -outblaze -outbleat -outbleed -outbless -outbloom -outblossom -outblot -outblow -outblowing -outblown -outbluff -outblunder -outblush -outbluster -outboard -outboast -outbolting -outbond -outbook -outborn -outborough -outbound -outboundaries -outbounds -outbow -outbowed -outbowl -outbox -outbrag -outbranch -outbranching -outbrave -outbray -outbrazen -outbreak -outbreaker -outbreaking -outbreath -outbreathe -outbreather -outbred -outbreed -outbreeding -outbribe -outbridge -outbring -outbrother -outbud -outbuild -outbuilding -outbulge -outbulk -outbully -outburn -outburst -outbustle -outbuy -outbuzz -outby -outcant -outcaper -outcarol -outcarry -outcase -outcast -outcaste -outcasting -outcastness -outcavil -outchamber -outcharm -outchase -outchatter -outcheat -outchide -outcity -outclamor -outclass -outclerk -outclimb -outcome -outcomer -outcoming -outcompass -outcomplete -outcompliment -outcorner -outcountry -outcourt -outcrawl -outcricket -outcrier -outcrop -outcropper -outcross -outcrossing -outcrow -outcrowd -outcry -outcull -outcure -outcurse -outcurve -outcut -outdaciousness -outdance -outdare -outdate -outdated -outdazzle -outdevil -outdispatch -outdistance -outdistrict -outdo -outdodge -outdoer -outdoor -outdoorness -outdoors -outdoorsman -outdraft -outdragon -outdraw -outdream -outdress -outdrink -outdrive -outdure -outdwell -outdweller -outdwelling -outeat -outecho -outed -outedge -outen -outer -outerly -outermost -outerness -outerwear -outeye -outeyed -outfable -outface -outfall -outfame -outfangthief -outfast -outfawn -outfeast -outfeat -outfeeding -outfence -outferret -outfiction -outfield -outfielder -outfieldsman -outfight -outfighter -outfighting -outfigure -outfish -outfit -outfitter -outflame -outflank -outflanker -outflanking -outflare -outflash -outflatter -outfling -outfloat -outflourish -outflow -outflue -outflung -outflunky -outflush -outflux -outfly -outfold -outfool -outfoot -outform -outfort -outfreeman -outfront -outfroth -outfrown -outgabble -outgain -outgallop -outgamble -outgame -outgang -outgarment -outgarth -outgas -outgate -outgauge -outgaze -outgeneral -outgive -outgiving -outglad -outglare -outgleam -outglitter -outgloom -outglow -outgnaw -outgo -outgoer -outgoing -outgoingness -outgone -outgreen -outgrin -outground -outgrow -outgrowing -outgrowth -outguard -outguess -outgun -outgush -outhammer -outhasten -outhaul -outhauler -outhear -outheart -outhector -outheel -outher -outhire -outhiss -outhit -outhold -outhorror -outhouse -outhousing -outhowl -outhue -outhumor -outhunt -outhurl -outhut -outhymn -outhyperbolize -outimage -outing -outinvent -outish -outissue -outjazz -outjest -outjet -outjetting -outjinx -outjockey -outjourney -outjuggle -outjump -outjut -outkeeper -outkick -outkill -outking -outkiss -outkitchen -outknave -outknee -outlabor -outlaid -outlance -outland -outlander -outlandish -outlandishlike -outlandishly -outlandishness -outlash -outlast -outlaugh -outlaunch -outlaw -outlawry -outlay -outlean -outleap -outlearn -outlegend -outlength -outlengthen -outler -outlet -outlie -outlier -outlighten -outlimb -outlimn -outline -outlinear -outlined -outlineless -outliner -outlinger -outlip -outlipped -outlive -outliver -outlodging -outlook -outlooker -outlord -outlove -outlung -outluster -outly -outlying -outmagic -outmalaprop -outman -outmaneuver -outmantle -outmarch -outmarriage -outmarry -outmaster -outmatch -outmate -outmeasure -outmerchant -outmiracle -outmode -outmoded -outmost -outmount -outmouth -outmove -outname -outness -outnight -outnoise -outnook -outnumber -outoffice -outoven -outpace -outpage -outpaint -outparagon -outparamour -outparish -outpart -outpass -outpassion -outpath -outpatient -outpay -outpayment -outpeal -outpeep -outpeer -outpension -outpensioner -outpeople -outperform -outpick -outpicket -outpipe -outpitch -outpity -outplace -outplan -outplay -outplayed -outplease -outplod -outplot -outpocketing -outpoint -outpoise -outpoison -outpoll -outpomp -outpop -outpopulate -outporch -outport -outporter -outportion -outpost -outpouching -outpour -outpourer -outpouring -outpractice -outpraise -outpray -outpreach -outpreen -outprice -outprodigy -outproduce -outpromise -outpry -outpull -outpupil -outpurl -outpurse -outpush -output -outputter -outquaff -outquarters -outqueen -outquestion -outquibble -outquote -outrace -outrage -outrageous -outrageously -outrageousness -outrageproof -outrager -outraging -outrail -outrance -outrange -outrank -outrant -outrap -outrate -outraught -outrave -outray -outre -outreach -outread -outreason -outreckon -outredden -outrede -outreign -outrelief -outremer -outreness -outrhyme -outrick -outride -outrider -outriding -outrig -outrigger -outriggered -outriggerless -outrigging -outright -outrightly -outrightness -outring -outrival -outroar -outrogue -outroll -outromance -outrooper -outroot -outrove -outrow -outroyal -outrun -outrunner -outrush -outsail -outsaint -outsally -outsatisfy -outsavor -outsay -outscent -outscold -outscore -outscorn -outscour -outscouring -outscream -outsea -outseam -outsearch -outsee -outseek -outsell -outsentry -outsert -outservant -outset -outsetting -outsettlement -outsettler -outshadow -outshake -outshame -outshape -outsharp -outsharpen -outsheathe -outshift -outshine -outshiner -outshoot -outshot -outshoulder -outshout -outshove -outshow -outshower -outshriek -outshrill -outshut -outside -outsided -outsidedness -outsideness -outsider -outsift -outsigh -outsight -outsin -outsing -outsit -outsize -outsized -outskill -outskip -outskirmish -outskirmisher -outskirt -outskirter -outslander -outslang -outsleep -outslide -outslink -outsmart -outsmell -outsmile -outsnatch -outsnore -outsoar -outsole -outsoler -outsonnet -outsophisticate -outsound -outspan -outsparkle -outspeak -outspeaker -outspeech -outspeed -outspell -outspend -outspent -outspill -outspin -outspirit -outspit -outsplendor -outspoken -outspokenly -outspokenness -outsport -outspout -outspread -outspring -outsprint -outspue -outspurn -outspurt -outstagger -outstair -outstand -outstander -outstanding -outstandingly -outstandingness -outstare -outstart -outstarter -outstartle -outstate -outstation -outstatistic -outstature -outstay -outsteal -outsteam -outstep -outsting -outstink -outstood -outstorm -outstrain -outstream -outstreet -outstretch -outstretcher -outstride -outstrike -outstrip -outstrive -outstroke -outstrut -outstudent -outstudy -outstunt -outsubtle -outsuck -outsucken -outsuffer -outsuitor -outsulk -outsum -outsuperstition -outswagger -outswarm -outswear -outsweep -outsweeping -outsweeten -outswell -outswift -outswim -outswindle -outswing -outswirl -outtaken -outtalent -outtalk -outtask -outtaste -outtear -outtease -outtell -outthieve -outthink -outthreaten -outthrob -outthrough -outthrow -outthrust -outthruster -outthunder -outthwack -outtinkle -outtire -outtoil -outtongue -outtop -outtower -outtrade -outtrail -outtravel -outtrick -outtrot -outtrump -outturn -outturned -outtyrannize -outusure -outvalue -outvanish -outvaunt -outvelvet -outvenom -outvictor -outvie -outvier -outvigil -outvillage -outvillain -outvociferate -outvoice -outvote -outvoter -outvoyage -outwait -outwake -outwale -outwalk -outwall -outwallop -outwander -outwar -outwarble -outward -outwardly -outwardmost -outwardness -outwards -outwash -outwaste -outwatch -outwater -outwave -outwealth -outweapon -outwear -outweary -outweave -outweed -outweep -outweigh -outweight -outwell -outwent -outwhirl -outwick -outwile -outwill -outwind -outwindow -outwing -outwish -outwit -outwith -outwittal -outwitter -outwoe -outwoman -outwood -outword -outwore -outwork -outworker -outworld -outworn -outworth -outwrangle -outwrench -outwrest -outwrestle -outwriggle -outwring -outwrite -outwrought -outyard -outyell -outyelp -outyield -outzany -ouzel -ova -oval -ovalbumin -ovalescent -ovaliform -ovalish -ovalization -ovalize -ovally -ovalness -ovaloid -ovalwise -ovant -ovarial -ovarian -ovarin -ovarioabdominal -ovariocele -ovariocentesis -ovariocyesis -ovariodysneuria -ovariohysterectomy -ovariole -ovariolumbar -ovariorrhexis -ovariosalpingectomy -ovariosteresis -ovariostomy -ovariotomist -ovariotomize -ovariotomy -ovariotubal -ovarious -ovaritis -ovarium -ovary -ovate -ovateconical -ovated -ovately -ovation -ovational -ovationary -ovatoacuminate -ovatoconical -ovatocordate -ovatocylindraceous -ovatodeltoid -ovatoellipsoidal -ovatoglobose -ovatolanceolate -ovatooblong -ovatoorbicular -ovatopyriform -ovatoquadrangular -ovatorotundate -ovatoserrate -ovatotriangular -oven -ovenbird -ovenful -ovenlike -ovenly -ovenman -ovenpeel -ovenstone -ovenware -ovenwise -over -overability -overable -overabound -overabsorb -overabstain -overabstemious -overabstemiousness -overabundance -overabundant -overabundantly -overabuse -overaccentuate -overaccumulate -overaccumulation -overaccuracy -overaccurate -overaccurately -overact -overaction -overactive -overactiveness -overactivity -overacute -overaddiction -overadvance -overadvice -overaffect -overaffirmation -overafflict -overaffliction -overage -overageness -overaggravate -overaggravation -overagitate -overagonize -overall -overalled -overalls -overambitioned -overambitious -overambling -overanalyze -overangelic -overannotate -overanswer -overanxiety -overanxious -overanxiously -overappareled -overappraisal -overappraise -overapprehended -overapprehension -overapprehensive -overapt -overarch -overargue -overarm -overartificial -overartificiality -overassail -overassert -overassertion -overassertive -overassertively -overassertiveness -overassess -overassessment -overassumption -overattached -overattachment -overattention -overattentive -overattentively -overawe -overawful -overawn -overawning -overbake -overbalance -overballast -overbalm -overbanded -overbandy -overbank -overbanked -overbark -overbarren -overbarrenness -overbase -overbaseness -overbashful -overbashfully -overbashfulness -overbattle -overbear -overbearance -overbearer -overbearing -overbearingly -overbearingness -overbeat -overbeating -overbeetling -overbelief -overbend -overbepatched -overberg -overbet -overbias -overbid -overbig -overbigness -overbillow -overbit -overbite -overbitten -overbitter -overbitterly -overbitterness -overblack -overblame -overblaze -overbleach -overblessed -overblessedness -overblind -overblindly -overblithe -overbloom -overblouse -overblow -overblowing -overblown -overboard -overboast -overboastful -overbodice -overboding -overbody -overboil -overbold -overboldly -overboldness -overbook -overbookish -overbooming -overborne -overborrow -overbought -overbound -overbounteous -overbounteously -overbounteousness -overbow -overbowed -overbowl -overbrace -overbragging -overbrained -overbranch -overbrave -overbravely -overbravery -overbray -overbreak -overbreathe -overbred -overbreed -overbribe -overbridge -overbright -overbrightly -overbrightness -overbrilliancy -overbrilliant -overbrilliantly -overbrim -overbrimmingly -overbroaden -overbroil -overbrood -overbrow -overbrown -overbrowse -overbrush -overbrutal -overbrutality -overbrutalize -overbrutally -overbubbling -overbuild -overbuilt -overbulk -overbulky -overbumptious -overburden -overburdeningly -overburdensome -overburn -overburned -overburningly -overburnt -overburst -overburthen -overbusily -overbusiness -overbusy -overbuy -overby -overcall -overcanny -overcanopy -overcap -overcapable -overcapably -overcapacity -overcape -overcapitalization -overcapitalize -overcaptious -overcaptiously -overcaptiousness -overcard -overcare -overcareful -overcarefully -overcareless -overcarelessly -overcarelessness -overcaring -overcarking -overcarry -overcast -overcasting -overcasual -overcasually -overcatch -overcaution -overcautious -overcautiously -overcautiousness -overcentralization -overcentralize -overcertification -overcertify -overchafe -overchannel -overchant -overcharge -overchargement -overcharger -overcharitable -overcharitably -overcharity -overchase -overcheap -overcheaply -overcheapness -overcheck -overcherish -overchidden -overchief -overchildish -overchildishness -overchill -overchlorinate -overchoke -overchrome -overchurch -overcirculate -overcircumspect -overcircumspection -overcivil -overcivility -overcivilization -overcivilize -overclaim -overclamor -overclasp -overclean -overcleanly -overcleanness -overcleave -overclever -overcleverness -overclimb -overcloak -overclog -overclose -overclosely -overcloseness -overclothe -overclothes -overcloud -overcloy -overcluster -overcoached -overcoat -overcoated -overcoating -overcoil -overcold -overcoldly -overcollar -overcolor -overcomable -overcome -overcomer -overcomingly -overcommand -overcommend -overcommon -overcommonly -overcommonness -overcompensate -overcompensation -overcompensatory -overcompetition -overcompetitive -overcomplacency -overcomplacent -overcomplacently -overcomplete -overcomplex -overcomplexity -overcompliant -overcompound -overconcentrate -overconcentration -overconcern -overconcerned -overcondensation -overcondense -overconfidence -overconfident -overconfidently -overconfute -overconquer -overconscientious -overconscious -overconsciously -overconsciousness -overconservatism -overconservative -overconservatively -overconsiderate -overconsiderately -overconsideration -overconsume -overconsumption -overcontented -overcontentedly -overcontentment -overcontract -overcontraction -overcontribute -overcontribution -overcook -overcool -overcoolly -overcopious -overcopiously -overcopiousness -overcorned -overcorrect -overcorrection -overcorrupt -overcorruption -overcorruptly -overcostly -overcount -overcourteous -overcourtesy -overcover -overcovetous -overcovetousness -overcow -overcoy -overcoyness -overcram -overcredit -overcredulity -overcredulous -overcredulously -overcreed -overcreep -overcritical -overcritically -overcriticalness -overcriticism -overcriticize -overcrop -overcross -overcrow -overcrowd -overcrowded -overcrowdedly -overcrowdedness -overcrown -overcrust -overcry -overcull -overcultivate -overcultivation -overculture -overcultured -overcumber -overcunning -overcunningly -overcunningness -overcup -overcured -overcurious -overcuriously -overcuriousness -overcurl -overcurrency -overcurrent -overcurtain -overcustom -overcut -overcutter -overcutting -overdaintily -overdaintiness -overdainty -overdamn -overdance -overdangle -overdare -overdaringly -overdarken -overdash -overdazed -overdazzle -overdeal -overdear -overdearly -overdearness -overdeck -overdecorate -overdecoration -overdecorative -overdeeming -overdeep -overdeepen -overdeeply -overdeliberate -overdeliberation -overdelicacy -overdelicate -overdelicately -overdelicious -overdeliciously -overdelighted -overdelightedly -overdemand -overdemocracy -overdepress -overdepressive -overdescant -overdesire -overdesirous -overdesirousness -overdestructive -overdestructively -overdestructiveness -overdetermination -overdetermined -overdevelop -overdevelopment -overdevoted -overdevotedly -overdevotion -overdiffuse -overdiffusely -overdiffuseness -overdigest -overdignified -overdignifiedly -overdignifiedness -overdignify -overdignity -overdiligence -overdiligent -overdiligently -overdilute -overdilution -overdischarge -overdiscipline -overdiscount -overdiscourage -overdiscouragement -overdistance -overdistant -overdistantly -overdistantness -overdistempered -overdistention -overdiverse -overdiversely -overdiversification -overdiversify -overdiversity -overdo -overdoctrinize -overdoer -overdogmatic -overdogmatically -overdogmatism -overdome -overdominate -overdone -overdoor -overdosage -overdose -overdoubt -overdoze -overdraft -overdrain -overdrainage -overdramatic -overdramatically -overdrape -overdrapery -overdraw -overdrawer -overdream -overdrench -overdress -overdrifted -overdrink -overdrip -overdrive -overdriven -overdroop -overdrowsed -overdry -overdubbed -overdue -overdunged -overdure -overdust -overdye -overeager -overeagerly -overeagerness -overearnest -overearnestly -overearnestness -overeasily -overeasiness -overeasy -overeat -overeaten -overedge -overedit -overeducate -overeducated -overeducation -overeducative -overeffort -overegg -overelaborate -overelaborately -overelaboration -overelate -overelegance -overelegancy -overelegant -overelegantly -overelliptical -overembellish -overembellishment -overembroider -overemotional -overemotionality -overemotionalize -overemphasis -overemphasize -overemphatic -overemphatically -overemphaticness -overempired -overemptiness -overempty -overenter -overenthusiasm -overenthusiastic -overentreat -overentry -overequal -overestimate -overestimation -overexcelling -overexcitability -overexcitable -overexcitably -overexcite -overexcitement -overexercise -overexert -overexerted -overexertedly -overexertedness -overexertion -overexpand -overexpansion -overexpansive -overexpect -overexpectant -overexpectantly -overexpenditure -overexpert -overexplain -overexplanation -overexpose -overexposure -overexpress -overexquisite -overexquisitely -overextend -overextension -overextensive -overextreme -overexuberant -overeye -overeyebrowed -overface -overfacile -overfacilely -overfacility -overfactious -overfactiousness -overfag -overfagged -overfaint -overfaith -overfaithful -overfaithfully -overfall -overfamed -overfamiliar -overfamiliarity -overfamiliarly -overfamous -overfanciful -overfancy -overfar -overfast -overfastidious -overfastidiously -overfastidiousness -overfasting -overfat -overfatigue -overfatten -overfavor -overfavorable -overfavorably -overfear -overfearful -overfearfully -overfearfulness -overfeast -overfeatured -overfed -overfee -overfeed -overfeel -overfellowlike -overfellowly -overfelon -overfeminine -overfeminize -overfertile -overfertility -overfestoon -overfew -overfierce -overfierceness -overfile -overfill -overfilm -overfine -overfinished -overfish -overfit -overfix -overflatten -overfleece -overfleshed -overflexion -overfling -overfloat -overflog -overflood -overflorid -overfloridness -overflourish -overflow -overflowable -overflower -overflowing -overflowingly -overflowingness -overflown -overfluency -overfluent -overfluently -overflush -overflutter -overfly -overfold -overfond -overfondle -overfondly -overfondness -overfoolish -overfoolishly -overfoolishness -overfoot -overforce -overforged -overformed -overforward -overforwardly -overforwardness -overfought -overfoul -overfoully -overfrail -overfrailty -overfranchised -overfrank -overfrankly -overfrankness -overfraught -overfree -overfreedom -overfreely -overfreight -overfrequency -overfrequent -overfrequently -overfret -overfrieze -overfrighted -overfrighten -overfroth -overfrown -overfrozen -overfruited -overfruitful -overfull -overfullness -overfunctioning -overfurnish -overgaiter -overgalled -overgamble -overgang -overgarment -overgarrison -overgaze -overgeneral -overgeneralize -overgenerally -overgenerosity -overgenerous -overgenerously -overgenial -overgeniality -overgentle -overgently -overget -overgifted -overgild -overgilted -overgird -overgirded -overgirdle -overglad -overgladly -overglance -overglass -overglaze -overglide -overglint -overgloom -overgloominess -overgloomy -overglorious -overgloss -overglut -overgo -overgoad -overgod -overgodliness -overgodly -overgood -overgorge -overgovern -overgovernment -overgown -overgrace -overgracious -overgrade -overgrain -overgrainer -overgrasping -overgrateful -overgratefully -overgratification -overgratify -overgratitude -overgraze -overgreasiness -overgreasy -overgreat -overgreatly -overgreatness -overgreed -overgreedily -overgreediness -overgreedy -overgrieve -overgrievous -overgrind -overgross -overgrossly -overgrossness -overground -overgrow -overgrown -overgrowth -overguilty -overgun -overhair -overhalf -overhand -overhanded -overhandicap -overhandle -overhang -overhappy -overharass -overhard -overharden -overhardness -overhardy -overharsh -overharshly -overharshness -overhaste -overhasten -overhastily -overhastiness -overhasty -overhate -overhatted -overhaughty -overhaul -overhauler -overhead -overheadiness -overheadman -overheady -overheap -overhear -overhearer -overheartily -overhearty -overheat -overheatedly -overheave -overheaviness -overheavy -overheight -overheighten -overheinous -overheld -overhelp -overhelpful -overhigh -overhighly -overhill -overhit -overholiness -overhollow -overholy -overhomeliness -overhomely -overhonest -overhonestly -overhonesty -overhonor -overhorse -overhot -overhotly -overhour -overhouse -overhover -overhuge -overhuman -overhumanity -overhumanize -overhung -overhunt -overhurl -overhurriedly -overhurry -overhusk -overhysterical -overidealism -overidealistic -overidle -overidly -overillustrate -overillustration -overimaginative -overimaginativeness -overimitate -overimitation -overimitative -overimitatively -overimport -overimportation -overimpress -overimpressible -overinclinable -overinclination -overinclined -overincrust -overincurious -overindividualism -overindividualistic -overindulge -overindulgence -overindulgent -overindulgently -overindustrialization -overindustrialize -overinflate -overinflation -overinflative -overinfluence -overinfluential -overinform -overink -overinsist -overinsistence -overinsistent -overinsistently -overinsolence -overinsolent -overinsolently -overinstruct -overinstruction -overinsurance -overinsure -overintellectual -overintellectuality -overintense -overintensely -overintensification -overintensity -overinterest -overinterested -overinterestedness -overinventoried -overinvest -overinvestment -overiodize -overirrigate -overirrigation -overissue -overitching -overjacket -overjade -overjaded -overjawed -overjealous -overjealously -overjealousness -overjob -overjocular -overjoy -overjoyful -overjoyfully -overjoyous -overjudge -overjudging -overjudgment -overjudicious -overjump -overjust -overjutting -overkeen -overkeenness -overkeep -overkick -overkind -overkindly -overkindness -overking -overknavery -overknee -overknow -overknowing -overlabor -overlace -overlactation -overlade -overlaid -overlain -overland -overlander -overlanguaged -overlap -overlard -overlarge -overlargely -overlargeness -overlascivious -overlast -overlate -overlaudation -overlaudatory -overlaugh -overlaunch -overlave -overlavish -overlavishly -overlax -overlaxative -overlaxly -overlaxness -overlay -overlayer -overlead -overleaf -overlean -overleap -overlearn -overlearned -overlearnedly -overlearnedness -overleather -overleave -overleaven -overleer -overleg -overlegislation -overleisured -overlength -overlettered -overlewd -overlewdly -overlewdness -overliberal -overliberality -overliberally -overlicentious -overlick -overlie -overlier -overlift -overlight -overlighted -overlightheaded -overlightly -overlightsome -overliking -overline -overling -overlinger -overlinked -overlip -overlipping -overlisted -overlisten -overliterary -overlittle -overlive -overliveliness -overlively -overliver -overload -overloath -overlock -overlocker -overlofty -overlogical -overlogically -overlong -overlook -overlooker -overloose -overlord -overlordship -overloud -overloup -overlove -overlover -overlow -overlowness -overloyal -overloyally -overloyalty -overlubricatio -overluscious -overlush -overlustiness -overlusty -overluxuriance -overluxuriant -overluxurious -overly -overlying -overmagnify -overmagnitude -overmajority -overmalapert -overman -overmantel -overmantle -overmany -overmarch -overmark -overmarking -overmarl -overmask -overmast -overmaster -overmasterful -overmasterfully -overmasterfulness -overmastering -overmasteringly -overmatch -overmatter -overmature -overmaturity -overmean -overmeanly -overmeanness -overmeasure -overmeddle -overmeek -overmeekly -overmeekness -overmellow -overmellowness -overmelodied -overmelt -overmerciful -overmercifulness -overmerit -overmerrily -overmerry -overmettled -overmickle -overmighty -overmild -overmill -overminute -overminutely -overminuteness -overmix -overmoccasin -overmodest -overmodestly -overmodesty -overmodulation -overmoist -overmoisten -overmoisture -overmortgage -overmoss -overmost -overmotor -overmount -overmounts -overmourn -overmournful -overmournfully -overmuch -overmuchness -overmultiplication -overmultiply -overmultitude -overname -overnarrow -overnarrowly -overnationalization -overnear -overneat -overneatness -overneglect -overnegligence -overnegligent -overnervous -overnervously -overnervousness -overnet -overnew -overnice -overnicely -overniceness -overnicety -overnigh -overnight -overnimble -overnipping -overnoise -overnotable -overnourish -overnoveled -overnumber -overnumerous -overnumerousness -overnurse -overobedience -overobedient -overobediently -overobese -overobjectify -overoblige -overobsequious -overobsequiously -overobsequiousness -overoffend -overoffensive -overofficered -overofficious -overorder -overornamented -overpained -overpainful -overpainfully -overpainfulness -overpaint -overpamper -overpart -overparted -overpartial -overpartiality -overpartially -overparticular -overparticularly -overpass -overpassionate -overpassionately -overpassionateness -overpast -overpatient -overpatriotic -overpay -overpayment -overpeer -overpending -overpensive -overpensiveness -overpeople -overpepper -overperemptory -overpersuade -overpersuasion -overpert -overpessimism -overpessimistic -overpet -overphysic -overpick -overpicture -overpinching -overpitch -overpitched -overpiteous -overplace -overplaced -overplacement -overplain -overplant -overplausible -overplay -overplease -overplenitude -overplenteous -overplenteously -overplentiful -overplenty -overplot -overplow -overplumb -overplume -overplump -overplumpness -overplus -overply -overpointed -overpoise -overpole -overpolemical -overpolish -overpolitic -overponderous -overpopular -overpopularity -overpopularly -overpopulate -overpopulation -overpopulous -overpopulousness -overpositive -overpossess -overpot -overpotent -overpotential -overpour -overpower -overpowerful -overpowering -overpoweringly -overpoweringness -overpraise -overpray -overpreach -overprecise -overpreciseness -overpreface -overpregnant -overpreoccupation -overpreoccupy -overpress -overpressure -overpresumption -overpresumptuous -overprice -overprick -overprint -overprize -overprizer -overprocrastination -overproduce -overproduction -overproductive -overproficient -overprolific -overprolix -overprominence -overprominent -overprominently -overpromise -overprompt -overpromptly -overpromptness -overprone -overproneness -overpronounced -overproof -overproportion -overproportionate -overproportionated -overproportionately -overproportioned -overprosperity -overprosperous -overprotect -overprotract -overprotraction -overproud -overproudly -overprove -overprovender -overprovide -overprovident -overprovidently -overprovision -overprovocation -overprovoke -overprune -overpublic -overpublicity -overpuff -overpuissant -overpunish -overpunishment -overpurchase -overquantity -overquarter -overquell -overquick -overquickly -overquiet -overquietly -overquietness -overrace -overrack -overrake -overrange -overrank -overrankness -overrapture -overrapturize -overrash -overrashly -overrashness -overrate -overrational -overrationalize -overravish -overreach -overreacher -overreaching -overreachingly -overreachingness -overread -overreader -overreadily -overreadiness -overready -overrealism -overrealistic -overreckon -overrecord -overrefine -overrefined -overrefinement -overreflection -overreflective -overregister -overregistration -overregular -overregularity -overregularly -overregulate -overregulation -overrelax -overreliance -overreliant -overreligion -overreligious -overremiss -overremissly -overremissness -overrennet -overrent -overreplete -overrepletion -overrepresent -overrepresentation -overrepresentative -overreserved -overresolute -overresolutely -overrestore -overrestrain -overretention -overreward -overrich -overriches -overrichness -override -overrife -overrigged -overright -overrighteous -overrighteously -overrighteousness -overrigid -overrigidity -overrigidly -overrigorous -overrigorously -overrim -overriot -overripe -overripely -overripen -overripeness -overrise -overroast -overroll -overroof -overrooted -overrough -overroughly -overroughness -overroyal -overrude -overrudely -overrudeness -overruff -overrule -overruler -overruling -overrulingly -overrun -overrunner -overrunning -overrunningly -overrush -overrusset -overrust -oversad -oversadly -oversadness -oversaid -oversail -oversale -oversaliva -oversalt -oversalty -oversand -oversanded -oversanguine -oversanguinely -oversapless -oversated -oversatisfy -oversaturate -oversaturation -oversauce -oversauciness -oversaucy -oversave -overscare -overscatter -overscented -oversceptical -overscepticism -overscore -overscour -overscratch -overscrawl -overscream -overscribble -overscrub -overscruple -overscrupulosity -overscrupulous -overscrupulously -overscrupulousness -overscurf -overscutched -oversea -overseal -overseam -overseamer -oversearch -overseas -overseason -overseasoned -overseated -oversecure -oversecurely -oversecurity -oversee -overseed -overseen -overseer -overseerism -overseership -overseethe -oversell -oversend -oversensible -oversensibly -oversensitive -oversensitively -oversensitiveness -oversententious -oversentimental -oversentimentalism -oversentimentalize -oversentimentally -overserious -overseriously -overseriousness -overservice -overservile -overservility -overset -oversetter -oversettle -oversettled -oversevere -overseverely -overseverity -oversew -overshade -overshadow -overshadower -overshadowing -overshadowingly -overshadowment -overshake -oversharp -oversharpness -overshave -oversheet -overshelving -overshepherd -overshine -overshirt -overshoe -overshoot -overshort -overshorten -overshortly -overshot -overshoulder -overshowered -overshrink -overshroud -oversick -overside -oversight -oversilence -oversilent -oversilver -oversimple -oversimplicity -oversimplification -oversimplify -oversimply -oversize -oversized -overskim -overskip -overskipper -overskirt -overslack -overslander -overslaugh -overslavish -overslavishly -oversleep -oversleeve -overslide -overslight -overslip -overslope -overslow -overslowly -overslowness -overslur -oversmall -oversman -oversmite -oversmitten -oversmoke -oversmooth -oversmoothly -oversmoothness -oversnow -oversoak -oversoar -oversock -oversoft -oversoftly -oversoftness -oversold -oversolemn -oversolemnity -oversolemnly -oversolicitous -oversolicitously -oversolicitousness -oversoon -oversoothing -oversophisticated -oversophistication -oversorrow -oversorrowed -oversot -oversoul -oversound -oversour -oversourly -oversourness -oversow -overspacious -overspaciousness -overspan -overspangled -oversparing -oversparingly -oversparingness -oversparred -overspatter -overspeak -overspecialization -overspecialize -overspeculate -overspeculation -overspeculative -overspeech -overspeed -overspeedily -overspeedy -overspend -overspill -overspin -oversplash -overspread -overspring -oversprinkle -oversprung -overspun -oversqueak -oversqueamish -oversqueamishness -overstaff -overstaid -overstain -overstale -overstalled -overstand -overstaring -overstate -overstately -overstatement -overstay -overstayal -oversteadfast -oversteadfastness -oversteady -overstep -overstiff -overstiffness -overstifle -overstimulate -overstimulation -overstimulative -overstir -overstitch -overstock -overstoop -overstoping -overstore -overstory -overstout -overstoutly -overstowage -overstowed -overstrain -overstrait -overstraiten -overstraitly -overstraitness -overstream -overstrength -overstress -overstretch -overstrew -overstrict -overstrictly -overstrictness -overstride -overstrident -overstridently -overstrike -overstring -overstriving -overstrong -overstrongly -overstrung -overstud -overstudied -overstudious -overstudiously -overstudiousness -overstudy -overstuff -oversublime -oversubscribe -oversubscriber -oversubscription -oversubtile -oversubtle -oversubtlety -oversubtly -oversufficiency -oversufficient -oversufficiently -oversuperstitious -oversupply -oversure -oversurety -oversurge -oversurviving -oversusceptibility -oversusceptible -oversuspicious -oversuspiciously -overswarm -overswarth -oversway -oversweated -oversweep -oversweet -oversweeten -oversweetly -oversweetness -overswell -overswift -overswim -overswimmer -overswing -overswinging -overswirling -oversystematic -oversystematically -oversystematize -overt -overtakable -overtake -overtaker -overtalk -overtalkative -overtalkativeness -overtalker -overtame -overtamely -overtameness -overtapped -overtare -overtariff -overtarry -overtart -overtask -overtax -overtaxation -overteach -overtechnical -overtechnicality -overtedious -overtediously -overteem -overtell -overtempt -overtenacious -overtender -overtenderly -overtenderness -overtense -overtensely -overtenseness -overtension -overterrible -overtest -overthick -overthin -overthink -overthought -overthoughtful -overthriftily -overthriftiness -overthrifty -overthrong -overthrow -overthrowable -overthrowal -overthrower -overthrust -overthwart -overthwartly -overthwartness -overthwartways -overthwartwise -overtide -overtight -overtightly -overtill -overtimbered -overtime -overtimer -overtimorous -overtimorously -overtimorousness -overtinseled -overtint -overtip -overtipple -overtire -overtiredness -overtitle -overtly -overtness -overtoe -overtoil -overtoise -overtone -overtongued -overtop -overtopple -overtorture -overtower -overtrace -overtrack -overtrade -overtrader -overtrailed -overtrain -overtrample -overtravel -overtread -overtreatment -overtrick -overtrim -overtrouble -overtrue -overtrump -overtrust -overtrustful -overtruthful -overtruthfully -overtumble -overture -overturn -overturnable -overturner -overtutor -overtwine -overtwist -overtype -overuberous -overunionized -overunsuitable -overurbanization -overurge -overuse -overusual -overusually -overvaliant -overvaluable -overvaluation -overvalue -overvariety -overvault -overvehemence -overvehement -overveil -overventilate -overventilation -overventuresome -overventurous -overview -overvoltage -overvote -overwade -overwages -overwake -overwalk -overwander -overward -overwash -overwasted -overwatch -overwatcher -overwater -overwave -overway -overwealth -overwealthy -overweaponed -overwear -overweary -overweather -overweave -overweb -overween -overweener -overweening -overweeningly -overweeningness -overweep -overweigh -overweight -overweightage -overwell -overwelt -overwet -overwetness -overwheel -overwhelm -overwhelmer -overwhelming -overwhelmingly -overwhelmingness -overwhipped -overwhirl -overwhisper -overwide -overwild -overwilily -overwilling -overwillingly -overwily -overwin -overwind -overwing -overwinter -overwiped -overwisdom -overwise -overwisely -overwithered -overwoman -overwomanize -overwomanly -overwood -overwooded -overwoody -overword -overwork -overworld -overworn -overworry -overworship -overwound -overwove -overwoven -overwrap -overwrest -overwrested -overwrestle -overwrite -overwroth -overwrought -overyear -overyoung -overyouthful -overzeal -overzealous -overzealously -overzealousness -ovest -ovey -ovibovine -ovicapsular -ovicapsule -ovicell -ovicellular -ovicidal -ovicide -ovicular -oviculated -oviculum -ovicyst -ovicystic -oviducal -oviduct -oviductal -oviferous -ovification -oviform -ovigenesis -ovigenetic -ovigenic -ovigenous -ovigerm -ovigerous -ovile -ovine -ovinia -ovipara -oviparal -oviparity -oviparous -oviparously -oviparousness -oviposit -oviposition -ovipositor -ovisac -oviscapt -ovism -ovispermary -ovispermiduct -ovist -ovistic -ovivorous -ovocyte -ovoelliptic -ovoflavin -ovogenesis -ovogenetic -ovogenous -ovogonium -ovoid -ovoidal -ovolemma -ovolo -ovological -ovologist -ovology -ovolytic -ovomucoid -ovoplasm -ovoplasmic -ovopyriform -ovorhomboid -ovorhomboidal -ovotesticular -ovotestis -ovovitellin -ovoviviparism -ovoviviparity -ovoviviparous -ovoviviparously -ovoviviparousness -ovular -ovularian -ovulary -ovulate -ovulation -ovule -ovuliferous -ovuligerous -ovulist -ovum -ow -owd -owe -owelty -ower -owerance -owerby -owercome -owergang -owerloup -owertaen -owerword -owght -owing -owk -owl -owldom -owler -owlery -owlet -owlhead -owling -owlish -owlishly -owlishness -owlism -owllight -owllike -owly -own -owner -ownerless -ownership -ownhood -ownness -ownself -ownwayish -owregane -owrehip -owrelay -owse -owsen -owser -owtchah -owyheeite -ox -oxacid -oxadiazole -oxalacetic -oxalaldehyde -oxalamid -oxalamide -oxalan -oxalate -oxaldehyde -oxalemia -oxalic -oxalidaceous -oxalite -oxalodiacetic -oxalonitril -oxalonitrile -oxaluramid -oxaluramide -oxalurate -oxaluria -oxaluric -oxalyl -oxalylurea -oxamate -oxamethane -oxamic -oxamid -oxamide -oxamidine -oxammite -oxan -oxanate -oxane -oxanic -oxanilate -oxanilic -oxanilide -oxazine -oxazole -oxbane -oxberry -oxbird -oxbiter -oxblood -oxbow -oxboy -oxbrake -oxcart -oxcheek -oxdiacetic -oxdiazole -oxea -oxeate -oxen -oxeote -oxer -oxetone -oxeye -oxfly -oxgang -oxgoad -oxharrow -oxhead -oxheal -oxheart -oxhide -oxhoft -oxhorn -oxhouse -oxhuvud -oxidability -oxidable -oxidant -oxidase -oxidate -oxidation -oxidational -oxidative -oxidator -oxide -oxidic -oxidimetric -oxidimetry -oxidizability -oxidizable -oxidization -oxidize -oxidizement -oxidizer -oxidizing -oxidoreductase -oxidoreduction -oxidulated -oximate -oximation -oxime -oxland -oxlike -oxlip -oxman -oxmanship -oxoindoline -oxonic -oxonium -oxozone -oxozonide -oxpecker -oxphony -oxreim -oxshoe -oxskin -oxtail -oxter -oxtongue -oxwort -oxy -oxyacanthine -oxyacanthous -oxyacetylene -oxyacid -oxyaldehyde -oxyamine -oxyanthracene -oxyanthraquinone -oxyaphia -oxyaster -oxybaphon -oxybenzaldehyde -oxybenzene -oxybenzoic -oxybenzyl -oxyberberine -oxyblepsia -oxybromide -oxybutyria -oxybutyric -oxycalcium -oxycalorimeter -oxycamphor -oxycaproic -oxycarbonate -oxycellulose -oxycephalic -oxycephalism -oxycephalous -oxycephaly -oxychlorate -oxychloric -oxychloride -oxycholesterol -oxychromatic -oxychromatin -oxychromatinic -oxycinnamic -oxycobaltammine -oxycopaivic -oxycoumarin -oxycrate -oxycyanide -oxydactyl -oxydiact -oxyesthesia -oxyether -oxyethyl -oxyfatty -oxyfluoride -oxygas -oxygen -oxygenant -oxygenate -oxygenation -oxygenator -oxygenerator -oxygenic -oxygenicity -oxygenium -oxygenizable -oxygenize -oxygenizement -oxygenizer -oxygenous -oxygeusia -oxygnathous -oxyhalide -oxyhaloid -oxyhematin -oxyhemocyanin -oxyhemoglobin -oxyhexactine -oxyhexaster -oxyhydrate -oxyhydric -oxyhydrogen -oxyiodide -oxyketone -oxyl -oxyluciferin -oxyluminescence -oxyluminescent -oxymandelic -oxymel -oxymethylene -oxymoron -oxymuriate -oxymuriatic -oxynaphthoic -oxynaphtoquinone -oxynarcotine -oxyneurin -oxyneurine -oxynitrate -oxyntic -oxyophitic -oxyopia -oxyosphresia -oxypetalous -oxyphenol -oxyphenyl -oxyphile -oxyphilic -oxyphilous -oxyphonia -oxyphosphate -oxyphthalic -oxyphyllous -oxyphyte -oxypicric -oxyproline -oxypropionic -oxypurine -oxypycnos -oxyquinaseptol -oxyquinoline -oxyquinone -oxyrhine -oxyrhinous -oxyrhynch -oxyrhynchous -oxyrhynchus -oxyrrhynchid -oxysalicylic -oxysalt -oxystearic -oxystomatous -oxystome -oxysulphate -oxysulphide -oxyterpene -oxytocia -oxytocic -oxytocin -oxytocous -oxytoluene -oxytoluic -oxytone -oxytonesis -oxytonical -oxytonize -oxytylotate -oxytylote -oxyuriasis -oxyuricide -oxyurous -oxywelding -oyapock -oyer -oyster -oysterage -oysterbird -oystered -oysterer -oysterfish -oystergreen -oysterhood -oysterhouse -oystering -oysterish -oysterishness -oysterlike -oysterling -oysterman -oysterous -oysterroot -oysterseed -oystershell -oysterwife -oysterwoman -ozarkite -ozena -ozobrome -ozocerite -ozokerit -ozokerite -ozonate -ozonation -ozonator -ozone -ozoned -ozonic -ozonide -ozoniferous -ozonification -ozonify -ozonization -ozonize -ozonizer -ozonometer -ozonometry -ozonoscope -ozonoscopic -ozonous -ozophen -ozophene -ozostomia -ozotype -p -pa -paal -paar -paauw -pabble -pablo -pabouch -pabular -pabulary -pabulation -pabulatory -pabulous -pabulum -pac -paca -pacable -pacate -pacation -pacative -pacay -pacaya -pace -paceboard -paced -pacemaker -pacemaking -pacer -pachak -pachisi -pachnolite -pachometer -pachyacria -pachyaemia -pachyblepharon -pachycarpous -pachycephal -pachycephalia -pachycephalic -pachycephalous -pachycephaly -pachychilia -pachycholia -pachychymia -pachycladous -pachydactyl -pachydactylous -pachydactyly -pachyderm -pachyderma -pachydermal -pachydermatocele -pachydermatoid -pachydermatosis -pachydermatous -pachydermatously -pachydermia -pachydermial -pachydermic -pachydermoid -pachydermous -pachyemia -pachyglossal -pachyglossate -pachyglossia -pachyglossous -pachyhaemia -pachyhaemic -pachyhaemous -pachyhematous -pachyhemia -pachyhymenia -pachyhymenic -pachylosis -pachymenia -pachymenic -pachymeningitic -pachymeningitis -pachymeninx -pachymeter -pachynathous -pachynema -pachynsis -pachyntic -pachyodont -pachyotia -pachyotous -pachyperitonitis -pachyphyllous -pachypleuritic -pachypod -pachypodous -pachypterous -pachyrhynchous -pachysalpingitis -pachysaurian -pachysomia -pachysomous -pachystichous -pachytene -pachytrichous -pachyvaginitis -pacifiable -pacific -pacifical -pacifically -pacificate -pacification -pacificator -pacificatory -pacificism -pacificist -pacificity -pacifier -pacifism -pacifist -pacifistic -pacifistically -pacify -pacifyingly -pack -packable -package -packbuilder -packcloth -packer -packery -packet -packhouse -packless -packly -packmaker -packmaking -packman -packmanship -packness -packsack -packsaddle -packstaff -packthread -packwall -packwaller -packware -packway -paco -pacouryuva -pact -paction -pactional -pactionally -pad -padcloth -padder -padding -paddle -paddlecock -paddled -paddlefish -paddlelike -paddler -paddlewood -paddling -paddock -paddockride -paddockstone -paddockstool -paddy -paddybird -paddymelon -paddywatch -paddywhack -padella -padfoot -padge -padishah -padle -padlike -padlock -padmasana -padmelon -padnag -padpiece -padre -padroadist -padroado -padronism -padstone -padtree -paduasoy -paean -paeanism -paeanize -paedarchy -paedatrophia -paedatrophy -paediatry -paedogenesis -paedogenetic -paedometer -paedometrical -paedomorphic -paedomorphism -paedonymic -paedonymy -paedopsychologist -paedotribe -paedotrophic -paedotrophist -paedotrophy -paegel -paegle -paenula -paeon -paeonic -paetrick -paga -pagan -pagandom -paganic -paganical -paganically -paganish -paganishly -paganism -paganist -paganistic -paganity -paganization -paganize -paganizer -paganly -paganry -pagatpat -page -pageant -pageanted -pageanteer -pageantic -pageantry -pagedom -pageful -pagehood -pageless -pagelike -pager -pageship -pagina -paginal -paginary -paginate -pagination -pagiopod -pagoda -pagodalike -pagodite -pagoscope -pagrus -pagurian -pagurid -pagurine -paguroid -pagus -pah -paha -pahi -pahlavi -pahmi -paho -pahoehoe -pahutan -paideutic -paideutics -paidological -paidologist -paidology -paidonosology -paigle -paik -pail -pailful -paillasse -paillette -pailletted -pailou -paimaneh -pain -pained -painful -painfully -painfulness -paining -painingly -painkiller -painless -painlessly -painlessness -painproof -painstaker -painstaking -painstakingly -painstakingness -painsworthy -paint -paintability -paintable -paintableness -paintably -paintbox -paintbrush -painted -paintedness -painter -painterish -painterlike -painterly -paintership -paintiness -painting -paintingness -paintless -paintpot -paintproof -paintress -paintrix -paintroot -painty -paip -pair -paired -pairedness -pairer -pairment -pairwise -pais -paisa -paisanite -paiwari -pajahuello -pajama -pajamaed -pajock -pakchoi -pakeha -paktong -pal -palace -palaced -palacelike -palaceous -palaceward -palacewards -paladin -palaeanthropic -palaeechinoid -palaeechinoidean -palaeentomology -palaeethnologic -palaeethnological -palaeethnologist -palaeethnology -palaeichthyan -palaeichthyic -palaemonid -palaemonoid -palaeoalchemical -palaeoanthropic -palaeoanthropography -palaeoanthropology -palaeoatavism -palaeoatavistic -palaeobiogeography -palaeobiologist -palaeobiology -palaeobotanic -palaeobotanical -palaeobotanically -palaeobotanist -palaeobotany -palaeoceanography -palaeochorology -palaeoclimatic -palaeoclimatology -palaeocosmic -palaeocosmology -palaeocrystal -palaeocrystallic -palaeocrystalline -palaeocrystic -palaeocyclic -palaeodendrologic -palaeodendrological -palaeodendrologically -palaeodendrologist -palaeodendrology -palaeodictyopteran -palaeodictyopteron -palaeodictyopterous -palaeoencephalon -palaeoeremology -palaeoethnic -palaeoethnologic -palaeoethnological -palaeoethnologist -palaeoethnology -palaeofauna -palaeogene -palaeogenesis -palaeogenetic -palaeogeographic -palaeogeography -palaeoglaciology -palaeoglyph -palaeognathic -palaeognathous -palaeograph -palaeographer -palaeographic -palaeographical -palaeographically -palaeographist -palaeography -palaeoherpetologist -palaeoherpetology -palaeohistology -palaeohydrography -palaeolatry -palaeolimnology -palaeolith -palaeolithic -palaeolithical -palaeolithist -palaeolithoid -palaeolithy -palaeological -palaeologist -palaeology -palaeometallic -palaeometeorological -palaeometeorology -palaeonemertean -palaeonemertine -palaeoniscid -palaeoniscoid -palaeontographic -palaeontographical -palaeontography -palaeopathology -palaeopedology -palaeophile -palaeophilist -palaeophysiography -palaeophysiology -palaeophytic -palaeophytological -palaeophytologist -palaeophytology -palaeoplain -palaeopotamology -palaeopsychic -palaeopsychological -palaeopsychology -palaeoptychology -palaeornithine -palaeornithological -palaeornithology -palaeosaur -palaeosophy -palaeostracan -palaeostriatal -palaeostriatum -palaeostylic -palaeostyly -palaeotechnic -palaeothalamus -palaeothere -palaeotherian -palaeotheriodont -palaeotherioid -palaeotheroid -palaeotype -palaeotypic -palaeotypical -palaeotypically -palaeotypographical -palaeotypographist -palaeotypography -palaeovolcanic -palaeozoological -palaeozoologist -palaeozoology -palaestra -palaestral -palaestrian -palaestric -palaestrics -palaetiological -palaetiologist -palaetiology -palafitte -palagonite -palagonitic -palaiotype -palaite -palama -palamate -palame -palamedean -palampore -palander -palanka -palankeen -palanquin -palapalai -palar -palas -palatability -palatable -palatableness -palatably -palatal -palatalism -palatality -palatalization -palatalize -palate -palated -palateful -palatefulness -palateless -palatelike -palatial -palatially -palatialness -palatian -palatic -palatinal -palatinate -palatine -palatineship -palatinite -palation -palatist -palatitis -palative -palatization -palatize -palatoalveolar -palatodental -palatoglossal -palatoglossus -palatognathous -palatogram -palatograph -palatography -palatomaxillary -palatometer -palatonasal -palatopharyngeal -palatopharyngeus -palatoplasty -palatoplegia -palatopterygoid -palatoquadrate -palatorrhaphy -palatoschisis -palaver -palaverer -palaverist -palaverment -palaverous -palay -palazzi -palberry -palch -pale -palea -paleaceous -paleanthropic -paleate -palebelly -palebuck -palechinoid -paled -paledness -paleencephalon -paleentomology -paleethnographer -paleethnologic -paleethnological -paleethnologist -paleethnology -paleface -palehearted -paleichthyologic -paleichthyologist -paleichthyology -paleiform -palely -paleness -paleoalchemical -paleoandesite -paleoanthropic -paleoanthropography -paleoanthropological -paleoanthropologist -paleoanthropology -paleoatavism -paleoatavistic -paleobiogeography -paleobiologist -paleobiology -paleobotanic -paleobotanical -paleobotanically -paleobotanist -paleobotany -paleoceanography -paleochorology -paleoclimatic -paleoclimatologist -paleoclimatology -paleocosmic -paleocosmology -paleocrystal -paleocrystallic -paleocrystalline -paleocrystic -paleocyclic -paleodendrologic -paleodendrological -paleodendrologically -paleodendrologist -paleodendrology -paleoecologist -paleoecology -paleoencephalon -paleoeremology -paleoethnic -paleoethnography -paleoethnologic -paleoethnological -paleoethnologist -paleoethnology -paleofauna -paleogenesis -paleogenetic -paleogeographic -paleogeography -paleoglaciology -paleoglyph -paleograph -paleographer -paleographic -paleographical -paleographically -paleographist -paleography -paleoherpetologist -paleoherpetology -paleohistology -paleohydrography -paleoichthyology -paleokinetic -paleola -paleolate -paleolatry -paleolimnology -paleolith -paleolithic -paleolithical -paleolithist -paleolithoid -paleolithy -paleological -paleologist -paleology -paleomammalogy -paleometallic -paleometeorological -paleometeorology -paleontographic -paleontographical -paleontography -paleontologic -paleontological -paleontologically -paleontologist -paleontology -paleopathology -paleopedology -paleophysiography -paleophysiology -paleophytic -paleophytological -paleophytologist -paleophytology -paleopicrite -paleoplain -paleopotamoloy -paleopsychic -paleopsychological -paleopsychology -paleornithological -paleornithology -paleostriatal -paleostriatum -paleostylic -paleostyly -paleotechnic -paleothalamus -paleothermal -paleothermic -paleovolcanic -paleoytterbium -paleozoological -paleozoologist -paleozoology -paler -palestra -palestral -palestrian -palestric -palet -paletiology -paletot -palette -paletz -palewise -palfrey -palfreyed -palgat -pali -palification -paliform -paligorskite -palikar -palikarism -palikinesia -palila -palilalia -palillogia -palilogetic -palilogy -palimbacchic -palimbacchius -palimpsest -palimpsestic -palinal -palindrome -palindromic -palindromical -palindromically -palindromist -paling -palingenesia -palingenesian -palingenesis -palingenesist -palingenesy -palingenetic -palingenetically -palingenic -palingenist -palingeny -palinode -palinodial -palinodic -palinodist -palinody -palinurid -palinuroid -paliphrasia -palirrhea -palisade -palisading -palisado -palisander -palisfy -palish -palistrophia -palkee -pall -palla -palladammine -palladia -palladic -palladiferous -palladinize -palladion -palladious -palladium -palladiumize -palladize -palladodiammine -palladosammine -palladous -pallae -pallah -pallall -pallanesthesia -pallasite -pallbearer -palled -pallescence -pallescent -pallesthesia -pallet -palleting -palletize -pallette -pallholder -palli -pallial -palliard -palliasse -palliata -palliate -palliation -palliative -palliatively -palliator -palliatory -pallid -pallidiflorous -pallidipalpate -palliditarsate -pallidity -pallidiventrate -pallidly -pallidness -palliness -palliobranchiate -palliocardiac -pallioessexite -pallion -palliopedal -palliostratus -pallium -pallograph -pallographic -pallometric -pallone -pallor -pallwise -pally -palm -palma -palmaceous -palmad -palmanesthesia -palmar -palmarian -palmary -palmate -palmated -palmately -palmatifid -palmatiform -palmatilobate -palmatilobed -palmation -palmatiparted -palmatipartite -palmatisect -palmatisected -palmature -palmcrist -palmed -palmellaceous -palmelloid -palmer -palmerite -palmery -palmesthesia -palmette -palmetto -palmetum -palmful -palmicolous -palmiferous -palmification -palmiform -palmigrade -palmilobate -palmilobated -palmilobed -palminervate -palminerved -palmiped -palmipes -palmist -palmister -palmistry -palmitate -palmite -palmitic -palmitin -palmitinic -palmito -palmitoleic -palmitone -palmiveined -palmivorous -palmlike -palmo -palmodic -palmoscopy -palmospasmus -palmula -palmus -palmwise -palmwood -palmy -palmyra -palolo -palombino -palometa -palomino -palosapis -palouser -paloverde -palp -palpability -palpable -palpableness -palpably -palpacle -palpal -palpate -palpation -palpatory -palpebra -palpebral -palpebrate -palpebration -palpebritis -palped -palpi -palpicorn -palpifer -palpiferous -palpiform -palpiger -palpigerous -palpitant -palpitate -palpitatingly -palpitation -palpless -palpocil -palpon -palpulus -palpus -palsgrave -palsgravine -palsied -palsification -palstave -palster -palsy -palsylike -palsywort -palt -palter -palterer -palterly -paltrily -paltriness -paltry -paludal -paludament -paludamentum -paludial -paludian -paludic -paludicole -paludicoline -paludicolous -paludiferous -paludinal -paludine -paludinous -paludism -paludose -paludous -paludrin -paludrine -palule -palulus -palus -palustral -palustrian -palustrine -paly -palynology -pam -pambanmanche -pament -pameroon -pamment -pampas -pampean -pamper -pampered -pamperedly -pamperedness -pamperer -pamperize -pampero -pamphagous -pampharmacon -pamphlet -pamphletage -pamphletary -pamphleteer -pamphleter -pamphletful -pamphletic -pamphletical -pamphletize -pamphletwise -pamphysical -pamphysicism -pampilion -pampiniform -pampinocele -pamplegia -pampootee -pampootie -pampre -pamprodactyl -pamprodactylism -pamprodactylous -pampsychism -pampsychist -pan -panace -panacea -panacean -panaceist -panache -panached -panachure -panada -panade -panagiarion -panama -panapospory -panarchic -panarchy -panaris -panaritium -panarteritis -panarthritis -panary -panatela -panatrophy -panautomorphic -panax -panbabylonian -panbabylonism -pancake -pancarditis -panchama -panchayat -pancheon -panchion -panchromatic -panchromatism -panchromatization -panchromatize -panchway -panclastic -panconciliatory -pancosmic -pancosmism -pancosmist -pancratian -pancratiast -pancratiastic -pancratic -pancratical -pancratically -pancration -pancratism -pancratist -pancratium -pancreas -pancreatalgia -pancreatectomize -pancreatectomy -pancreatemphraxis -pancreathelcosis -pancreatic -pancreaticoduodenal -pancreaticoduodenostomy -pancreaticogastrostomy -pancreaticosplenic -pancreatin -pancreatism -pancreatitic -pancreatitis -pancreatization -pancreatize -pancreatoduodenectomy -pancreatoenterostomy -pancreatogenic -pancreatogenous -pancreatoid -pancreatolipase -pancreatolith -pancreatomy -pancreatoncus -pancreatopathy -pancreatorrhagia -pancreatotomy -pancreectomy -pancreozymin -pancyclopedic -pand -panda -pandal -pandan -pandanaceous -pandaram -pandaric -pandation -pandect -pandemia -pandemian -pandemic -pandemicity -pandemoniac -pandemonic -pandemonism -pandemonium -pandemy -pandenominational -pander -panderage -panderer -panderess -panderism -panderize -panderly -pandermite -panderous -pandership -pandestruction -pandiabolism -pandiculation -pandita -pandle -pandlewhew -pandora -pandour -pandowdy -pandrop -pandura -pandurate -pandurated -panduriform -pandy -pane -panecclesiastical -paned -panegoism -panegoist -panegyric -panegyrical -panegyrically -panegyricize -panegyricon -panegyricum -panegyris -panegyrist -panegyrize -panegyrizer -panegyry -paneity -panel -panela -panelation -paneler -paneless -paneling -panelist -panellation -panelling -panelwise -panelwork -panentheism -panesthesia -panesthetic -paneulogism -panfil -panfish -panful -pang -pangamic -pangamous -pangamously -pangamy -pangane -pangen -pangene -pangenesis -pangenetic -pangenetically -pangenic -pangful -pangi -pangless -panglessly -panglima -pangolin -pangrammatist -panhandle -panhandler -panharmonic -panharmonicon -panhead -panheaded -panhidrosis -panhuman -panhygrous -panhyperemia -panhysterectomy -panic -panical -panically -panicful -panichthyophagous -panicked -panicky -panicle -panicled -paniclike -panicmonger -panicmongering -paniconograph -paniconographic -paniconography -paniculate -paniculated -paniculately -paniculitis -panidiomorphic -panidrosis -panification -panimmunity -panisc -panisca -paniscus -panisic -panivorous -panjandrum -pank -pankin -pankration -panleucopenia -panlogical -panlogism -panlogistical -panman -panmelodicon -panmelodion -panmerism -panmeristic -panmixia -panmixy -panmnesia -panmug -panmyelophthisis -pannade -pannage -pannam -pannationalism -panne -pannel -panner -pannery -panneuritic -panneuritis -pannicle -pannicular -pannier -panniered -pannierman -pannikin -panning -pannose -pannosely -pannum -pannus -pannuscorium -panocha -panoche -panococo -panoistic -panomphaic -panomphean -panomphic -panophobia -panophthalmia -panophthalmitis -panoplied -panoplist -panoply -panoptic -panoptical -panopticon -panoram -panorama -panoramic -panoramical -panoramically -panoramist -panornithic -panorpian -panorpid -panosteitis -panostitis -panotitis -panotype -panouchi -panpathy -panpharmacon -panphenomenalism -panphobia -panplegia -panpneumatism -panpolism -panpsychic -panpsychism -panpsychist -panpsychistic -panscientist -pansciolism -pansciolist -pansclerosis -pansclerotic -panse -pansexism -pansexual -pansexualism -pansexualist -pansexuality -pansexualize -panshard -panside -pansideman -pansied -pansinuitis -pansinusitis -pansmith -pansophic -pansophical -pansophically -pansophism -pansophist -pansophy -panspermatism -panspermatist -panspermia -panspermic -panspermism -panspermist -panspermy -pansphygmograph -panstereorama -pansy -pansylike -pant -pantachromatic -pantacosm -pantagamy -pantagogue -pantagraph -pantagraphic -pantagraphical -pantagruelion -pantaleon -pantaletless -pantalets -pantaletted -pantalgia -pantalon -pantaloon -pantalooned -pantaloonery -pantaloons -pantameter -pantamorph -pantamorphia -pantamorphic -pantanemone -pantanencephalia -pantanencephalic -pantaphobia -pantarbe -pantarchy -pantas -pantascope -pantascopic -pantatrophia -pantatrophy -pantatype -pantechnic -pantechnicon -pantelegraph -pantelegraphy -panteleologism -pantelephone -pantelephonic -pantellerite -panter -panterer -pantheic -pantheism -pantheist -pantheistic -pantheistical -pantheistically -panthelematism -panthelism -pantheologist -pantheology -pantheon -pantheonic -pantheonization -pantheonize -panther -pantheress -pantherine -pantherish -pantherlike -pantherwood -pantheum -pantie -panties -pantile -pantiled -pantiling -panting -pantingly -pantisocracy -pantisocrat -pantisocratic -pantisocratical -pantisocratist -pantle -pantler -panto -pantochrome -pantochromic -pantochromism -pantochronometer -pantod -pantoffle -pantofle -pantoganglitis -pantogelastic -pantoglossical -pantoglot -pantoglottism -pantograph -pantographer -pantographic -pantographical -pantographically -pantography -pantoiatrical -pantologic -pantological -pantologist -pantology -pantomancer -pantometer -pantometric -pantometrical -pantometry -pantomime -pantomimic -pantomimical -pantomimically -pantomimicry -pantomimish -pantomimist -pantomimus -pantomnesia -pantomnesic -pantomorph -pantomorphia -pantomorphic -panton -pantoon -pantopelagian -pantophagic -pantophagist -pantophagous -pantophagy -pantophile -pantophobia -pantophobic -pantophobous -pantoplethora -pantopod -pantopragmatic -pantopterous -pantoscope -pantoscopic -pantosophy -pantostomate -pantostomatous -pantostome -pantotactic -pantothenate -pantothenic -pantotherian -pantotype -pantoum -pantropic -pantropical -pantry -pantryman -pantrywoman -pants -pantun -panty -pantywaist -panung -panurgic -panurgy -panyar -panzoism -panzootia -panzootic -panzooty -paolo -paon -pap -papa -papability -papable -papabot -papacy -papagallo -papain -papal -papalism -papalist -papalistic -papalization -papalize -papalizer -papally -papalty -papane -papaphobia -papaphobist -papaprelatical -papaprelatist -paparchical -paparchy -papaship -papaveraceous -papaverine -papaverous -papaw -papaya -papayaceous -papayotin -papboat -pape -papelonne -paper -paperback -paperbark -paperboard -papered -paperer -paperful -paperiness -papering -paperlike -papermaker -papermaking -papermouth -papern -papershell -paperweight -papery -papess -papeterie -papey -papicolar -papicolist -papilionaceous -papilionid -papilionine -papilionoid -papilla -papillae -papillar -papillary -papillate -papillated -papillectomy -papilledema -papilliferous -papilliform -papillitis -papilloadenocystoma -papillocarcinoma -papilloedema -papilloma -papillomatosis -papillomatous -papillon -papilloretinitis -papillosarcoma -papillose -papillosity -papillote -papillous -papillulate -papillule -papion -papish -papisher -papism -papist -papistic -papistical -papistically -papistlike -papistly -papistry -papize -papless -papmeat -papolater -papolatrous -papolatry -papoose -papooseroot -pappescent -pappi -pappiferous -pappiform -pappose -pappox -pappus -pappy -papreg -paprica -paprika -papula -papular -papulate -papulated -papulation -papule -papuliferous -papuloerythematous -papulopustular -papulopustule -papulose -papulosquamous -papulous -papulovesicular -papyr -papyraceous -papyral -papyrean -papyri -papyrian -papyrin -papyrine -papyritious -papyrocracy -papyrograph -papyrographer -papyrographic -papyrography -papyrological -papyrologist -papyrology -papyrophobia -papyroplastics -papyrotamia -papyrotint -papyrotype -papyrus -paquet -par -para -paraaminobenzoic -parabanate -parabanic -parabaptism -parabaptization -parabasal -parabasic -parabasis -parabema -parabematic -parabenzoquinone -parabiosis -parabiotic -parablast -parablastic -parable -parablepsia -parablepsis -parablepsy -parableptic -parabola -parabolanus -parabolic -parabolical -parabolicalism -parabolically -parabolicness -paraboliform -parabolist -parabolization -parabolize -parabolizer -paraboloid -paraboloidal -parabomb -parabotulism -parabranchia -parabranchial -parabranchiate -parabulia -parabulic -paracanthosis -paracarmine -paracasein -paracaseinate -paracentesis -paracentral -paracentric -paracentrical -paracephalus -paracerebellar -paracetaldehyde -parachaplain -paracholia -parachor -parachordal -parachrea -parachroia -parachroma -parachromatism -parachromatophorous -parachromatopsia -parachromatosis -parachrome -parachromoparous -parachromophoric -parachromophorous -parachronism -parachronistic -parachrose -parachute -parachutic -parachutism -parachutist -paraclete -paracmasis -paracme -paracoele -paracoelian -paracolitis -paracolon -paracolpitis -paracolpium -paracondyloid -paracone -paraconic -paraconid -paraconscious -paracorolla -paracotoin -paracoumaric -paracresol -paracusia -paracusic -paracyanogen -paracyesis -paracymene -paracystic -paracystitis -paracystium -parade -paradeful -paradeless -paradelike -paradenitis -paradental -paradentitis -paradentium -parader -paraderm -paradiastole -paradiazine -paradichlorbenzene -paradichlorbenzol -paradichlorobenzene -paradichlorobenzol -paradidymal -paradidymis -paradigm -paradigmatic -paradigmatical -paradigmatically -paradigmatize -parading -paradingly -paradiplomatic -paradisaic -paradisaically -paradisal -paradise -paradisean -paradisiac -paradisiacal -paradisiacally -paradisial -paradisian -paradisic -paradisical -parado -paradoctor -parados -paradoses -paradox -paradoxal -paradoxer -paradoxial -paradoxic -paradoxical -paradoxicalism -paradoxicality -paradoxically -paradoxicalness -paradoxician -paradoxidian -paradoxism -paradoxist -paradoxographer -paradoxographical -paradoxology -paradoxure -paradoxurine -paradoxy -paradromic -paraenesis -paraenesize -paraenetic -paraenetical -paraengineer -paraffin -paraffine -paraffiner -paraffinic -paraffinize -paraffinoid -paraffiny -paraffle -parafle -parafloccular -paraflocculus -paraform -paraformaldehyde -parafunction -paragammacism -paraganglion -paragaster -paragastral -paragastric -paragastrula -paragastrular -parage -paragenesia -paragenesis -paragenetic -paragenic -paragerontic -parageusia -parageusic -parageusis -paragglutination -paraglenal -paraglobin -paraglobulin -paraglossa -paraglossal -paraglossate -paraglossia -paraglycogen -paragnath -paragnathism -paragnathous -paragnathus -paragneiss -paragnosia -paragoge -paragogic -paragogical -paragogically -paragogize -paragon -paragonimiasis -paragonite -paragonitic -paragonless -paragram -paragrammatist -paragraph -paragrapher -paragraphia -paragraphic -paragraphical -paragraphically -paragraphism -paragraphist -paragraphistical -paragraphize -parah -paraheliotropic -paraheliotropism -parahematin -parahemoglobin -parahepatic -parahopeite -parahormone -parahydrogen -paraiba -parakeet -parakeratosis -parakilya -parakinesia -parakinetic -paralactate -paralalia -paralambdacism -paralambdacismus -paralaurionite -paraldehyde -parale -paralectotype -paraleipsis -paralepsis -paralexia -paralexic -paralgesia -paralgesic -paralinin -paralipomena -paralipsis -paralitical -parallactic -parallactical -parallactically -parallax -parallel -parallelable -parallelepiped -parallelepipedal -parallelepipedic -parallelepipedon -parallelepipedonal -paralleler -parallelinervate -parallelinerved -parallelinervous -parallelism -parallelist -parallelistic -parallelith -parallelization -parallelize -parallelizer -parallelless -parallelly -parallelodrome -parallelodromous -parallelogram -parallelogrammatic -parallelogrammatical -parallelogrammic -parallelogrammical -parallelograph -parallelometer -parallelopiped -parallelopipedon -parallelotropic -parallelotropism -parallelwise -parallepipedous -paralogia -paralogical -paralogician -paralogism -paralogist -paralogistic -paralogize -paralogy -paraluminite -paralyses -paralysis -paralytic -paralytical -paralytically -paralyzant -paralyzation -paralyze -paralyzedly -paralyzer -paralyzingly -param -paramagnet -paramagnetic -paramagnetism -paramandelic -paramarine -paramastigate -paramastitis -paramastoid -paramatta -paramedian -paramelaconite -paramenia -parament -paramere -parameric -parameron -paramese -paramesial -parameter -parametric -parametrical -parametritic -parametritis -parametrium -paramide -paramilitary -paramimia -paramine -paramiographer -paramitome -paramnesia -paramo -paramorph -paramorphia -paramorphic -paramorphine -paramorphism -paramorphosis -paramorphous -paramount -paramountcy -paramountly -paramountness -paramountship -paramour -paramuthetic -paramyelin -paramylum -paramyoclonus -paramyosinogen -paramyotone -paramyotonia -paranasal -paranatellon -parandrus -paranema -paranematic -paranephric -paranephritic -paranephritis -paranephros -paranepionic -paranete -parang -paranitraniline -paranitrosophenol -paranoia -paranoiac -paranoid -paranoidal -paranoidism -paranomia -paranormal -paranosic -paranthelion -paranthracene -paranuclear -paranucleate -paranucleic -paranuclein -paranucleinic -paranucleus -paranymph -paranymphal -parao -paraoperation -paraparesis -paraparetic -parapathia -parapathy -parapegm -parapegma -paraperiodic -parapet -parapetalous -parapeted -parapetless -paraph -paraphasia -paraphasic -paraphemia -paraphenetidine -paraphenylene -paraphenylenediamine -parapherna -paraphernal -paraphernalia -paraphernalian -paraphia -paraphilia -paraphimosis -paraphonia -paraphonic -paraphototropism -paraphrasable -paraphrase -paraphraser -paraphrasia -paraphrasian -paraphrasis -paraphrasist -paraphrast -paraphraster -paraphrastic -paraphrastical -paraphrastically -paraphrenia -paraphrenic -paraphrenitis -paraphyllium -paraphysate -paraphysical -paraphysiferous -paraphysis -paraplasis -paraplasm -paraplasmic -paraplastic -paraplastin -paraplectic -paraplegia -paraplegic -paraplegy -parapleuritis -parapleurum -parapod -parapodial -parapodium -parapophysial -parapophysis -parapraxia -parapraxis -paraproctitis -paraproctium -paraprostatitis -parapsidal -parapsidan -parapsis -parapsychical -parapsychism -parapsychological -parapsychology -parapsychosis -parapteral -parapteron -parapterum -paraquadrate -paraquinone -pararectal -pararek -parareka -pararhotacism -pararosaniline -pararosolic -pararthria -parasaboteur -parasalpingitis -parasang -parascene -parascenium -parasceve -paraschematic -parasecretion -paraselene -paraselenic -parasemidin -parasemidine -parasexuality -parashah -parasigmatism -parasigmatismus -parasital -parasitary -parasite -parasitelike -parasitemia -parasitic -parasitical -parasitically -parasiticalness -parasiticidal -parasiticide -parasitism -parasitize -parasitogenic -parasitoid -parasitoidism -parasitological -parasitologist -parasitology -parasitophobia -parasitosis -parasitotrope -parasitotropic -parasitotropism -parasitotropy -paraskenion -parasol -parasoled -parasolette -paraspecific -parasphenoid -parasphenoidal -paraspotter -paraspy -parastas -parastatic -parastemon -parastemonal -parasternal -parasternum -parastichy -parastyle -parasubphonate -parasubstituted -parasuchian -parasympathetic -parasympathomimetic -parasynapsis -parasynaptic -parasynaptist -parasyndesis -parasynesis -parasynetic -parasynovitis -parasynthesis -parasynthetic -parasyntheton -parasyphilis -parasyphilitic -parasyphilosis -parasystole -paratactic -paratactical -paratactically -paratartaric -parataxis -parate -paraterminal -paratherian -parathesis -parathetic -parathion -parathormone -parathymic -parathyroid -parathyroidal -parathyroidectomize -parathyroidectomy -parathyroprival -parathyroprivia -parathyroprivic -paratitla -paratitles -paratoloid -paratoluic -paratoluidine -paratomial -paratomium -paratonic -paratonically -paratorium -paratory -paratracheal -paratragedia -paratragoedia -paratransversan -paratrichosis -paratrimma -paratriptic -paratroop -paratrooper -paratrophic -paratrophy -paratuberculin -paratuberculosis -paratuberculous -paratungstate -paratungstic -paratype -paratyphlitis -paratyphoid -paratypic -paratypical -paratypically -paravaginitis -paravail -paravane -paravauxite -paravent -paravertebral -paravesical -paraxial -paraxially -paraxon -paraxonic -paraxylene -parazoan -parazonium -parbake -parboil -parbuckle -parcel -parceling -parcellary -parcellate -parcellation -parcelling -parcellization -parcellize -parcelment -parcelwise -parcenary -parcener -parcenership -parch -parchable -parchedly -parchedness -parcheesi -parchemin -parcher -parchesi -parching -parchingly -parchisi -parchment -parchmenter -parchmentize -parchmentlike -parchmenty -parchy -parcidentate -parciloquy -parclose -parcook -pard -pardalote -pardao -parded -pardesi -pardine -pardner -pardnomastic -pardo -pardon -pardonable -pardonableness -pardonably -pardonee -pardoner -pardoning -pardonless -pardonmonger -pare -paregoric -pareiasaurian -parel -parelectronomic -parelectronomy -parella -paren -parencephalic -parencephalon -parenchym -parenchyma -parenchymal -parenchymatic -parenchymatitis -parenchymatous -parenchymatously -parenchyme -parenchymous -parent -parentage -parental -parentalism -parentality -parentally -parentdom -parentela -parentelic -parenteral -parenterally -parentheses -parenthesis -parenthesize -parenthetic -parenthetical -parentheticality -parenthetically -parentheticalness -parenthood -parenticide -parentless -parentlike -parentship -parepididymal -parepididymis -parepigastric -parer -parerethesis -parergal -parergic -parergon -paresis -paresthesia -paresthesis -paresthetic -parethmoid -paretic -paretically -pareunia -parfait -parfilage -parfleche -parfocal -pargana -pargasite -parge -pargeboard -parget -pargeter -pargeting -pargo -parhelia -parheliacal -parhelic -parhelion -parhomologous -parhomology -parhypate -pari -pariah -pariahdom -pariahism -pariahship -parial -parian -paridigitate -paridrosis -paries -parietal -parietary -parietes -parietofrontal -parietojugal -parietomastoid -parietoquadrate -parietosphenoid -parietosphenoidal -parietosplanchnic -parietosquamosal -parietotemporal -parietovaginal -parietovisceral -parify -parigenin -pariglin -parilla -parillin -parimutuel -parine -paring -paripinnate -parish -parished -parishen -parishional -parishionally -parishionate -parishioner -parishionership -parisis -parisology -parison -parisonic -paristhmic -paristhmion -parisyllabic -parisyllabical -parity -parivincular -park -parka -parkee -parker -parkin -parking -parkish -parklike -parkward -parkway -parky -parlamento -parlance -parlando -parlatory -parlay -parle -parley -parleyer -parliament -parliamental -parliamentarian -parliamentarianism -parliamentarily -parliamentariness -parliamentarism -parliamentarization -parliamentarize -parliamentary -parliamenteer -parliamenteering -parliamenter -parling -parlish -parlor -parlorish -parlormaid -parlous -parlously -parlousness -parly -parma -parmacety -parmak -parmeliaceous -parmelioid -parnas -parnassiaceous -parnel -parnorpine -paroarion -paroarium -paroccipital -paroch -parochial -parochialic -parochialism -parochialist -parochiality -parochialization -parochialize -parochially -parochialness -parochin -parochine -parochiner -parode -parodiable -parodial -parodic -parodical -parodinia -parodist -parodistic -parodistically -parodize -parodontitis -parodos -parody -parodyproof -paroecious -paroeciously -paroeciousness -paroecism -paroecy -paroemia -paroemiac -paroemiographer -paroemiography -paroemiologist -paroemiology -paroicous -parol -parolable -parole -parolee -parolfactory -paroli -parolist -paromoeon -paromologetic -paromologia -paromology -paromphalocele -paromphalocelic -paronomasia -paronomasial -paronomasian -paronomasiastic -paronomastical -paronomastically -paronychia -paronychial -paronychium -paronym -paronymic -paronymization -paronymize -paronymous -paronymy -paroophoric -paroophoritis -paroophoron -paropsis -paroptesis -paroptic -parorchid -parorchis -parorexia -parosmia -parosmic -parosteal -parosteitis -parosteosis -parostosis -parostotic -parotic -parotid -parotidean -parotidectomy -parotiditis -parotis -parotitic -parotitis -parotoid -parous -parousia -parousiamania -parovarian -parovariotomy -parovarium -paroxazine -paroxysm -paroxysmal -paroxysmalist -paroxysmally -paroxysmic -paroxysmist -paroxytone -paroxytonic -paroxytonize -parpal -parquet -parquetage -parquetry -parr -parrel -parrhesia -parrhesiastic -parriable -parricidal -parricidally -parricide -parricided -parricidial -parricidism -parrier -parrock -parrot -parroter -parrothood -parrotism -parrotize -parrotlet -parrotlike -parrotry -parrotwise -parroty -parry -parsable -parse -parsec -parser -parsettensite -parsimonious -parsimoniously -parsimoniousness -parsimony -parsley -parsleylike -parsleywort -parsnip -parson -parsonage -parsonarchy -parsondom -parsoned -parsonese -parsoness -parsonet -parsonhood -parsonic -parsonical -parsonically -parsoning -parsonish -parsonity -parsonize -parsonlike -parsonly -parsonolatry -parsonology -parsonry -parsonship -parsonsite -parsony -part -partakable -partake -partaker -partan -partanfull -partanhanded -parted -partedness -parter -parterre -parterred -partheniad -parthenian -parthenic -parthenocarpelly -parthenocarpic -parthenocarpical -parthenocarpically -parthenocarpous -parthenocarpy -parthenogenesis -parthenogenetic -parthenogenetically -parthenogenic -parthenogenitive -parthenogenous -parthenogeny -parthenogonidium -parthenology -parthenoparous -parthenosperm -parthenospore -partial -partialism -partialist -partialistic -partiality -partialize -partially -partialness -partiary -partible -particate -participability -participable -participance -participancy -participant -participantly -participate -participatingly -participation -participative -participatively -participator -participatory -participatress -participial -participiality -participialize -participially -participle -particle -particled -particular -particularism -particularist -particularistic -particularistically -particularity -particularization -particularize -particularly -particularness -particulate -partigen -partile -partimembered -partimen -partinium -partisan -partisanism -partisanize -partisanship -partite -partition -partitional -partitionary -partitioned -partitioner -partitioning -partitionist -partitionment -partitive -partitively -partitura -partiversal -partivity -partless -partlet -partly -partner -partnerless -partnership -parto -partook -partridge -partridgeberry -partridgelike -partridgewood -partridging -partschinite -parture -parturiate -parturience -parturiency -parturient -parturifacient -parturition -parturitive -party -partyism -partyist -partykin -partyless -partymonger -partyship -parulis -parumbilical -parure -paruria -parvanimity -parvenu -parvenudom -parvenuism -parvicellular -parviflorous -parvifoliate -parvifolious -parvipotent -parvirostrate -parvis -parviscient -parvitude -parvolin -parvoline -parvule -paryphodrome -pasan -pasang -paschal -paschalist -paschite -pascoite -pascuage -pascual -pascuous -pasgarde -pash -pasha -pashadom -pashalik -pashaship -pashm -pashmina -pasi -pasigraphic -pasigraphical -pasigraphy -pasilaly -pasmo -pasqueflower -pasquil -pasquilant -pasquiler -pasquilic -pasquin -pasquinade -pasquinader -pass -passable -passableness -passably -passade -passado -passage -passageable -passageway -passalid -passant -passback -passbook -passe -passee -passegarde -passement -passementerie -passen -passenger -passer -passeriform -passerine -passewa -passibility -passible -passibleness -passifloraceous -passimeter -passing -passingly -passingness -passion -passional -passionary -passionate -passionately -passionateness -passionative -passioned -passionflower -passionful -passionfully -passionfulness -passionist -passionless -passionlessly -passionlessness -passionlike -passionometer -passionproof -passionwise -passionwort -passir -passival -passivate -passivation -passive -passively -passiveness -passivism -passivist -passivity -passkey -passless -passman -passo -passometer -passout -passover -passoverish -passpenny -passport -passportless -passulate -passulation -passus -passway -passwoman -password -passworts -passymeasure -past -paste -pasteboard -pasteboardy -pasted -pastedness -pastedown -pastel -pastelist -paster -pasterer -pastern -pasterned -pasteur -pasteurellosis -pasteurism -pasteurization -pasteurize -pasteurizer -pastiche -pasticheur -pastil -pastile -pastille -pastime -pastimer -pastiness -pasting -pastness -pastophor -pastophorion -pastophorium -pastophorus -pastor -pastorage -pastoral -pastorale -pastoralism -pastoralist -pastorality -pastoralize -pastorally -pastoralness -pastorate -pastoress -pastorhood -pastorium -pastorize -pastorless -pastorlike -pastorling -pastorly -pastorship -pastose -pastosity -pastrami -pastry -pastryman -pasturability -pasturable -pasturage -pastural -pasture -pastureless -pasturer -pasturewise -pasty -pasul -pat -pata -pataca -patacao -pataco -patagial -patagiate -patagium -patagon -pataka -patamar -patao -patapat -pataque -patas -patashte -patavinity -patball -patballer -patch -patchable -patcher -patchery -patchily -patchiness -patchleaf -patchless -patchouli -patchwise -patchword -patchwork -patchworky -patchy -pate -patefaction -patefy -patel -patella -patellar -patellaroid -patellate -patellidan -patelliform -patelline -patellofemoral -patelloid -patellula -patellulate -paten -patency -patener -patent -patentability -patentable -patentably -patentee -patently -patentor -pater -patera -patercove -paterfamiliar -paterfamiliarly -paterfamilias -pateriform -paterissa -paternal -paternalism -paternalist -paternalistic -paternalistically -paternality -paternalize -paternally -paternity -paternoster -paternosterer -patesi -patesiate -path -pathbreaker -pathed -pathema -pathematic -pathematically -pathematology -pathetic -pathetical -pathetically -patheticalness -patheticate -patheticly -patheticness -pathetism -pathetist -pathetize -pathfarer -pathfinder -pathfinding -pathic -pathicism -pathless -pathlessness -pathlet -pathoanatomical -pathoanatomy -pathobiological -pathobiologist -pathobiology -pathochemistry -pathodontia -pathogen -pathogene -pathogenesis -pathogenesy -pathogenetic -pathogenic -pathogenicity -pathogenous -pathogeny -pathogerm -pathogermic -pathognomic -pathognomical -pathognomonic -pathognomonical -pathognomy -pathognostic -pathographical -pathography -pathologic -pathological -pathologically -pathologicoanatomic -pathologicoanatomical -pathologicoclinical -pathologicohistological -pathologicopsychological -pathologist -pathology -patholysis -patholytic -pathomania -pathometabolism -pathomimesis -pathomimicry -pathoneurosis -pathonomia -pathonomy -pathophobia -pathophoresis -pathophoric -pathophorous -pathoplastic -pathoplastically -pathopoeia -pathopoiesis -pathopoietic -pathopsychology -pathopsychosis -pathoradiography -pathos -pathosocial -pathway -pathwayed -pathy -patible -patibulary -patibulate -patience -patiency -patient -patientless -patiently -patientness -patina -patinate -patination -patine -patined -patinize -patinous -patio -patisserie -patly -patness -patnidar -pato -patois -patola -patonce -patria -patrial -patriarch -patriarchal -patriarchalism -patriarchally -patriarchate -patriarchdom -patriarched -patriarchess -patriarchic -patriarchical -patriarchically -patriarchism -patriarchist -patriarchship -patriarchy -patrice -patrician -patricianhood -patricianism -patricianly -patricianship -patriciate -patricidal -patricide -patrico -patrilineal -patrilineally -patrilinear -patriliny -patrilocal -patrimonial -patrimonially -patrimony -patrin -patriolatry -patriot -patrioteer -patriotess -patriotic -patriotical -patriotically -patriotics -patriotism -patriotly -patriotship -patrist -patristic -patristical -patristically -patristicalness -patristicism -patristics -patrix -patrizate -patrization -patrocinium -patroclinic -patroclinous -patrocliny -patrogenesis -patrol -patroller -patrollotism -patrolman -patrologic -patrological -patrologist -patrology -patron -patronage -patronal -patronate -patrondom -patroness -patronessship -patronite -patronizable -patronization -patronize -patronizer -patronizing -patronizingly -patronless -patronly -patronomatology -patronship -patronym -patronymic -patronymically -patronymy -patroon -patroonry -patroonship -patruity -patta -pattable -patte -pattee -patten -pattened -pattener -patter -patterer -patterist -pattern -patternable -patterned -patterner -patterning -patternize -patternless -patternlike -patternmaker -patternmaking -patternwise -patterny -pattu -patty -pattypan -patu -patulent -patulous -patulously -patulousness -patwari -paty -pau -pauciarticulate -pauciarticulated -paucidentate -pauciflorous -paucifoliate -paucifolious -paucify -paucijugate -paucilocular -pauciloquent -pauciloquently -pauciloquy -paucinervate -paucipinnate -pauciplicate -pauciradiate -pauciradiated -paucispiral -paucispirated -paucity -paughty -paukpan -paular -pauldron -paulie -paulin -paulopast -paulopost -paulospore -paunch -paunched -paunchful -paunchily -paunchiness -paunchy -paup -pauper -pauperage -pauperate -pauperdom -pauperess -pauperism -pauperitic -pauperization -pauperize -pauperizer -paurometabolic -paurometabolism -paurometabolous -paurometaboly -pauropod -pauropodous -pausably -pausal -pausation -pause -pauseful -pausefully -pauseless -pauselessly -pausement -pauser -pausingly -paussid -paut -pauxi -pavage -pavan -pavane -pave -pavement -pavemental -paver -pavestone -pavid -pavidity -pavier -pavilion -paving -pavior -paviour -pavis -pavisade -pavisado -paviser -pavisor -pavonated -pavonazzetto -pavonazzo -pavonian -pavonine -pavonize -pavy -paw -pawdite -pawer -pawing -pawk -pawkery -pawkily -pawkiness -pawkrie -pawky -pawl -pawn -pawnable -pawnage -pawnbroker -pawnbrokerage -pawnbrokeress -pawnbrokering -pawnbrokery -pawnbroking -pawnee -pawner -pawnie -pawnor -pawnshop -pawpaw -pax -paxilla -paxillar -paxillary -paxillate -paxilliferous -paxilliform -paxillose -paxillus -paxiuba -paxwax -pay -payability -payable -payableness -payably -payday -payed -payee -payeny -payer -paying -paymaster -paymastership -payment -paymistress -paynim -paynimhood -paynimry -payoff -payong -payor -payroll -paysagist -pea -peaberry -peace -peaceable -peaceableness -peaceably -peacebreaker -peacebreaking -peaceful -peacefully -peacefulness -peaceless -peacelessness -peacelike -peacemaker -peacemaking -peaceman -peacemonger -peacemongering -peacetime -peach -peachberry -peachblossom -peachblow -peachen -peacher -peachery -peachick -peachify -peachiness -peachlet -peachlike -peachwood -peachwort -peachy -peacoat -peacock -peacockery -peacockish -peacockishly -peacockishness -peacockism -peacocklike -peacockly -peacockwise -peacocky -peacod -peafowl -peag -peage -peahen -peai -peaiism -peak -peaked -peakedly -peakedness -peaker -peakily -peakiness -peaking -peakish -peakishly -peakishness -peakless -peaklike -peakward -peaky -peakyish -peal -pealike -pean -peanut -pear -pearceite -pearl -pearlberry -pearled -pearler -pearlet -pearlfish -pearlfruit -pearlike -pearlin -pearliness -pearling -pearlish -pearlite -pearlitic -pearlsides -pearlstone -pearlweed -pearlwort -pearly -pearmain -pearmonger -peart -pearten -peartly -peartness -pearwood -peasant -peasantess -peasanthood -peasantism -peasantize -peasantlike -peasantly -peasantry -peasantship -peasecod -peaselike -peasen -peashooter -peason -peastake -peastaking -peastick -peasticking -peastone -peasy -peat -peatery -peathouse -peatman -peatship -peatstack -peatwood -peaty -peavey -peavy -peba -pebble -pebbled -pebblehearted -pebblestone -pebbleware -pebbly -pebrine -pebrinous -pecan -peccability -peccable -peccadillo -peccancy -peccant -peccantly -peccantness -peccary -peccation -peccavi -pech -pecht -pecite -peck -pecked -pecker -peckerwood -pecket -peckful -peckhamite -peckiness -peckish -peckishly -peckishness -peckle -peckled -peckly -pecky -pecopteroid -pectase -pectate -pecten -pectic -pectin -pectinacean -pectinaceous -pectinal -pectinase -pectinate -pectinated -pectinately -pectination -pectinatodenticulate -pectinatofimbricate -pectinatopinnate -pectineal -pectineus -pectinibranch -pectinibranchian -pectinibranchiate -pectinic -pectinid -pectiniferous -pectiniform -pectinirostrate -pectinite -pectinogen -pectinoid -pectinose -pectinous -pectizable -pectization -pectize -pectocellulose -pectolite -pectora -pectoral -pectoralgia -pectoralis -pectoralist -pectorally -pectoriloquial -pectoriloquism -pectoriloquous -pectoriloquy -pectosase -pectose -pectosic -pectosinase -pectous -pectunculate -pectus -peculate -peculation -peculator -peculiar -peculiarism -peculiarity -peculiarize -peculiarly -peculiarness -peculiarsome -peculium -pecuniarily -pecuniary -pecuniosity -pecunious -ped -peda -pedage -pedagog -pedagogal -pedagogic -pedagogical -pedagogically -pedagogics -pedagogism -pedagogist -pedagogue -pedagoguery -pedagoguish -pedagoguism -pedagogy -pedal -pedaler -pedalfer -pedalferic -pedaliaceous -pedalian -pedalier -pedalism -pedalist -pedaliter -pedality -pedanalysis -pedant -pedantesque -pedantess -pedanthood -pedantic -pedantical -pedantically -pedanticalness -pedanticism -pedanticly -pedanticness -pedantism -pedantize -pedantocracy -pedantocrat -pedantocratic -pedantry -pedary -pedate -pedated -pedately -pedatifid -pedatiform -pedatilobate -pedatilobed -pedatinerved -pedatipartite -pedatisect -pedatisected -pedatrophia -pedder -peddle -peddler -peddleress -peddlerism -peddlery -peddling -peddlingly -pedee -pedelion -pederast -pederastic -pederastically -pederasty -pedes -pedesis -pedestal -pedestrial -pedestrially -pedestrian -pedestrianate -pedestrianism -pedestrianize -pedetentous -pediadontia -pediadontic -pediadontist -pedialgia -pediatric -pediatrician -pediatrics -pediatrist -pediatry -pedicab -pedicel -pediceled -pedicellar -pedicellaria -pedicellate -pedicellated -pedicellation -pedicelled -pedicelliform -pedicellus -pedicle -pedicular -pediculate -pediculated -pedicule -pediculicidal -pediculicide -pediculid -pediculine -pediculofrontal -pediculoid -pediculoparietal -pediculophobia -pediculosis -pediculous -pedicure -pedicurism -pedicurist -pediferous -pediform -pedigerous -pedigraic -pedigree -pedigreeless -pediluvium -pedimanous -pediment -pedimental -pedimented -pedimentum -pedion -pedionomite -pedipalp -pedipalpal -pedipalpate -pedipalpous -pedipalpus -pedipulate -pedipulation -pedipulator -pedlar -pedlary -pedobaptism -pedobaptist -pedocal -pedocalcic -pedodontia -pedodontic -pedodontist -pedodontology -pedograph -pedological -pedologist -pedologistical -pedologistically -pedology -pedometer -pedometric -pedometrical -pedometrically -pedometrician -pedometrist -pedomorphic -pedomorphism -pedomotive -pedomotor -pedophilia -pedophilic -pedotribe -pedotrophic -pedotrophist -pedotrophy -pedrail -pedregal -pedrero -pedro -pedule -pedum -peduncle -peduncled -peduncular -pedunculate -pedunculated -pedunculation -pedunculus -pee -peed -peek -peekaboo -peel -peelable -peele -peeled -peeledness -peeler -peelhouse -peeling -peelman -peen -peenge -peeoy -peep -peeper -peepeye -peephole -peepy -peer -peerage -peerdom -peeress -peerhood -peerie -peeringly -peerless -peerlessly -peerlessness -peerling -peerly -peership -peery -peesash -peesoreh -peesweep -peetweet -peeve -peeved -peevedly -peevedness -peever -peevish -peevishly -peevishness -peewee -peg -pega -pegall -peganite -pegasid -pegasoid -pegboard -pegbox -pegged -pegger -pegging -peggle -peggy -pegless -peglet -peglike -pegman -pegmatite -pegmatitic -pegmatization -pegmatize -pegmatoid -pegmatophyre -pegology -pegomancy -pegwood -peho -peignoir -peine -peirameter -peirastic -peirastically -peisage -peise -peiser -peixere -pejorate -pejoration -pejorationist -pejorative -pejoratively -pejorism -pejorist -pejority -pekan -pekin -pekoe -peladic -pelage -pelagial -pelagian -pelagic -pelamyd -pelanos -pelargic -pelargomorph -pelargomorphic -pelargonate -pelargonic -pelargonidin -pelargonin -pelargonium -pelean -pelecan -pelecypod -pelecypodous -pelelith -pelerine -pelf -pelican -pelicanry -pelick -pelicometer -pelike -peliom -pelioma -peliosis -pelisse -pelite -pelitic -pell -pellage -pellagra -pellagragenic -pellagrin -pellagrose -pellagrous -pellar -pellard -pellas -pellate -pellation -peller -pellet -pelleted -pelletierine -pelletlike -pellety -pellicle -pellicula -pellicular -pellicularia -pelliculate -pellicule -pellile -pellitory -pellmell -pellock -pellotine -pellucent -pellucid -pellucidity -pellucidly -pellucidness -pelmatic -pelmatogram -pelmatozoan -pelmatozoic -pelmet -pelobatid -pelobatoid -pelodytid -pelodytoid -pelomedusid -pelomedusoid -pelon -peloria -pelorian -peloriate -peloric -pelorism -pelorization -pelorize -pelorus -pelota -pelotherapy -peloton -pelt -pelta -peltast -peltate -peltated -peltately -peltatifid -peltation -peltatodigitate -pelter -pelterer -peltiferous -peltifolious -peltiform -peltigerine -peltigerous -peltinerved -pelting -peltingly -peltless -peltmonger -peltry -pelu -peludo -pelveoperitonitis -pelves -pelvic -pelviform -pelvigraph -pelvigraphy -pelvimeter -pelvimetry -pelviolithotomy -pelvioperitonitis -pelvioplasty -pelvioradiography -pelvioscopy -pelviotomy -pelviperitonitis -pelvirectal -pelvis -pelvisacral -pelvisternal -pelvisternum -pelycogram -pelycography -pelycology -pelycometer -pelycometry -pelycosaur -pelycosaurian -pembina -pemican -pemmican -pemmicanization -pemmicanize -pemphigoid -pemphigous -pemphigus -pen -penacute -penaeaceous -penal -penalist -penality -penalizable -penalization -penalize -penally -penalty -penance -penanceless -penang -penannular -penates -penbard -pencatite -pence -pencel -penceless -penchant -penchute -pencil -penciled -penciler -penciliform -penciling -pencilled -penciller -pencillike -pencilling -pencilry -pencilwood -pencraft -pend -penda -pendant -pendanted -pendanting -pendantlike -pendecagon -pendeloque -pendency -pendent -pendentive -pendently -pendicle -pendicler -pending -pendle -pendom -pendragon -pendragonish -pendragonship -pendulant -pendular -pendulate -pendulation -pendule -penduline -pendulosity -pendulous -pendulously -pendulousness -pendulum -pendulumlike -penelopine -peneplain -peneplanation -peneplane -peneseismic -penetrability -penetrable -penetrableness -penetrably -penetral -penetralia -penetralian -penetrance -penetrancy -penetrant -penetrate -penetrating -penetratingly -penetratingness -penetration -penetrative -penetratively -penetrativeness -penetrativity -penetrator -penetrology -penetrometer -penfieldite -penfold -penful -penghulu -pengo -penguin -penguinery -penhead -penholder -penial -penicillate -penicillated -penicillately -penicillation -penicilliform -penicillin -penide -penile -peninsula -peninsular -peninsularism -peninsularity -peninsulate -penintime -peninvariant -penis -penistone -penitence -penitencer -penitent -penitential -penitentially -penitentiary -penitentiaryship -penitently -penk -penkeeper -penknife -penlike -penmaker -penmaking -penman -penmanship -penmaster -penna -pennaceous -pennae -pennage -pennant -pennate -pennated -pennatifid -pennatilobate -pennatipartite -pennatisect -pennatisected -pennatulacean -pennatulaceous -pennatularian -pennatulid -pennatuloid -penneech -penneeck -penner -pennet -penni -pennia -pennied -penniferous -penniform -pennigerous -penniless -pennilessly -pennilessness -pennill -penninervate -penninerved -penning -penninite -pennipotent -penniveined -pennon -pennoned -pennopluma -pennoplume -pennorth -penny -pennybird -pennycress -pennyearth -pennyflower -pennyhole -pennyleaf -pennyrot -pennyroyal -pennysiller -pennystone -pennyweight -pennywinkle -pennywort -pennyworth -penologic -penological -penologist -penology -penorcon -penrack -penroseite -penscript -penseful -pensefulness -penship -pensile -pensileness -pensility -pension -pensionable -pensionably -pensionary -pensioner -pensionership -pensionless -pensive -pensived -pensively -pensiveness -penster -penstick -penstock -pensum -pensy -pent -penta -pentabasic -pentabromide -pentacapsular -pentacarbon -pentacarbonyl -pentacarpellary -pentace -pentacetate -pentachenium -pentachloride -pentachord -pentachromic -pentacid -pentacle -pentacoccous -pentacontane -pentacosane -pentacrinite -pentacrinoid -pentacron -pentacrostic -pentactinal -pentactine -pentacular -pentacyanic -pentacyclic -pentad -pentadactyl -pentadactylate -pentadactyle -pentadactylism -pentadactyloid -pentadecagon -pentadecahydrate -pentadecahydrated -pentadecane -pentadecatoic -pentadecoic -pentadecyl -pentadecylic -pentadelphous -pentadicity -pentadiene -pentadodecahedron -pentadrachm -pentadrachma -pentaerythrite -pentaerythritol -pentafid -pentafluoride -pentagamist -pentaglossal -pentaglot -pentaglottical -pentagon -pentagonal -pentagonally -pentagonohedron -pentagonoid -pentagram -pentagrammatic -pentagyn -pentagynian -pentagynous -pentahalide -pentahedral -pentahedrical -pentahedroid -pentahedron -pentahedrous -pentahexahedral -pentahexahedron -pentahydrate -pentahydrated -pentahydric -pentahydroxy -pentail -pentaiodide -pentalobate -pentalogue -pentalogy -pentalpha -pentameral -pentameran -pentamerid -pentamerism -pentameroid -pentamerous -pentameter -pentamethylene -pentamethylenediamine -pentametrist -pentametrize -pentander -pentandrian -pentandrous -pentane -pentanedione -pentangle -pentangular -pentanitrate -pentanoic -pentanolide -pentanone -pentapetalous -pentaphylacaceous -pentaphyllous -pentaploid -pentaploidic -pentaploidy -pentapody -pentapolis -pentapolitan -pentapterous -pentaptote -pentaptych -pentaquine -pentarch -pentarchical -pentarchy -pentasepalous -pentasilicate -pentaspermous -pentaspheric -pentaspherical -pentastich -pentastichous -pentastichy -pentastome -pentastomoid -pentastomous -pentastyle -pentastylos -pentasulphide -pentasyllabic -pentasyllabism -pentasyllable -pentateuchal -pentathionate -pentathionic -pentathlete -pentathlon -pentathlos -pentatomic -pentatomid -pentatone -pentatonic -pentatriacontane -pentavalence -pentavalency -pentavalent -penteconter -pentecontoglossal -pentecostal -pentecostalism -pentecostalist -pentecostarion -pentecoster -pentecostys -pentene -penteteric -penthemimer -penthemimeral -penthemimeris -penthiophen -penthiophene -penthouse -penthouselike -penthrit -penthrite -pentimento -pentine -pentiodide -pentit -pentite -pentitol -pentlandite -pentobarbital -pentode -pentoic -pentol -pentosan -pentosane -pentose -pentoside -pentosuria -pentoxide -pentremital -pentremite -pentrit -pentrite -pentrough -pentstock -penttail -pentyl -pentylene -pentylic -pentylidene -pentyne -penuchi -penult -penultima -penultimate -penultimatum -penumbra -penumbrae -penumbral -penumbrous -penurious -penuriously -penuriousness -penury -penwiper -penwoman -penwomanship -penworker -penwright -peon -peonage -peonism -peony -people -peopledom -peoplehood -peopleize -peopleless -peopler -peoplet -peoplish -peotomy -pep -peperine -peperino -pepful -pepinella -pepino -peplos -peplosed -peplum -peplus -pepo -peponida -peponium -pepper -pepperbox -peppercorn -peppercornish -peppercorny -pepperer -peppergrass -pepperidge -pepperily -pepperiness -pepperish -pepperishly -peppermint -pepperoni -pepperproof -pepperroot -pepperweed -pepperwood -pepperwort -peppery -peppily -peppin -peppiness -peppy -pepsin -pepsinate -pepsinhydrochloric -pepsiniferous -pepsinogen -pepsinogenic -pepsinogenous -pepsis -peptic -peptical -pepticity -peptidase -peptide -peptizable -peptization -peptize -peptizer -peptogaster -peptogenic -peptogenous -peptogeny -peptohydrochloric -peptolysis -peptolytic -peptonaemia -peptonate -peptone -peptonemia -peptonic -peptonization -peptonize -peptonizer -peptonoid -peptonuria -peptotoxine -per -peracephalus -peracetate -peracetic -peracid -peracidite -peract -peracute -peradventure -peragrate -peragration -peramble -perambulant -perambulate -perambulation -perambulator -perambulatory -perameline -perameloid -perbend -perborate -perborax -perbromide -percale -percaline -percarbide -percarbonate -percarbonic -perceivability -perceivable -perceivableness -perceivably -perceivance -perceivancy -perceive -perceivedly -perceivedness -perceiver -perceiving -perceivingness -percent -percentable -percentably -percentage -percentaged -percental -percentile -percentual -percept -perceptibility -perceptible -perceptibleness -perceptibly -perception -perceptional -perceptionalism -perceptionism -perceptive -perceptively -perceptiveness -perceptivity -perceptual -perceptually -percesocine -perch -percha -perchable -perchance -percher -perchlorate -perchlorethane -perchlorethylene -perchloric -perchloride -perchlorinate -perchlorination -perchloroethane -perchloroethylene -perchromate -perchromic -percid -perciform -percipience -percipiency -percipient -perclose -percnosome -percoct -percoid -percoidean -percolable -percolate -percolation -percolative -percolator -percomorph -percomorphous -percompound -percontation -percontatorial -percribrate -percribration -percrystallization -perculsion -perculsive -percur -percurration -percurrent -percursory -percuss -percussion -percussional -percussioner -percussionist -percussionize -percussive -percussively -percussiveness -percussor -percutaneous -percutaneously -percutient -percylite -perdicine -perdition -perditionable -perdricide -perdu -perduellion -perdurability -perdurable -perdurableness -perdurably -perdurance -perdurant -perdure -perduring -perduringly -peregrin -peregrina -peregrinate -peregrination -peregrinator -peregrinatory -peregrine -peregrinity -peregrinoid -pereion -pereiopod -pereira -pereirine -peremptorily -peremptoriness -peremptory -perendinant -perendinate -perendination -perendure -perennate -perennation -perennial -perenniality -perennialize -perennially -perennibranch -perennibranchiate -perequitate -peres -perezone -perfect -perfectation -perfected -perfectedly -perfecter -perfecti -perfectibilian -perfectibilism -perfectibilist -perfectibilitarian -perfectibility -perfectible -perfecting -perfection -perfectionate -perfectionation -perfectionator -perfectioner -perfectionism -perfectionist -perfectionistic -perfectionize -perfectionizement -perfectionizer -perfectionment -perfectism -perfectist -perfective -perfectively -perfectiveness -perfectivity -perfectivize -perfectly -perfectness -perfecto -perfector -perfectuation -perfervent -perfervid -perfervidity -perfervidly -perfervidness -perfervor -perfervour -perfidious -perfidiously -perfidiousness -perfidy -perfilograph -perflate -perflation -perfluent -perfoliate -perfoliation -perforable -perforant -perforate -perforated -perforation -perforationproof -perforative -perforator -perforatorium -perforatory -perforce -perforcedly -perform -performable -performance -performant -performative -performer -perfrication -perfumatory -perfume -perfumed -perfumeless -perfumer -perfumeress -perfumery -perfumy -perfunctionary -perfunctorily -perfunctoriness -perfunctorious -perfunctoriously -perfunctorize -perfunctory -perfuncturate -perfusate -perfuse -perfusion -perfusive -pergameneous -pergamentaceous -pergamyn -pergola -perhalide -perhalogen -perhaps -perhazard -perhorresce -perhydroanthracene -perhydrogenate -perhydrogenation -perhydrogenize -peri -periacinal -periacinous -periactus -periadenitis -periamygdalitis -perianal -periangiocholitis -periangioma -periangitis -perianth -perianthial -perianthium -periaortic -periaortitis -periapical -periappendicitis -periappendicular -periapt -periareum -periarterial -periarteritis -periarthric -periarthritis -periarticular -periaster -periastral -periastron -periastrum -periatrial -periauricular -periaxial -periaxillary -periaxonal -periblast -periblastic -periblastula -periblem -peribolos -peribolus -peribranchial -peribronchial -peribronchiolar -peribronchiolitis -peribronchitis -peribulbar -peribursal -pericaecal -pericaecitis -pericanalicular -pericapsular -pericardia -pericardiac -pericardiacophrenic -pericardial -pericardicentesis -pericardiectomy -pericardiocentesis -pericardiolysis -pericardiomediastinitis -pericardiophrenic -pericardiopleural -pericardiorrhaphy -pericardiosymphysis -pericardiotomy -pericarditic -pericarditis -pericardium -pericardotomy -pericarp -pericarpial -pericarpic -pericarpium -pericarpoidal -pericecal -pericecitis -pericellular -pericemental -pericementitis -pericementoclasia -pericementum -pericenter -pericentral -pericentric -pericephalic -pericerebral -perichaete -perichaetial -perichaetium -perichete -pericholangitis -pericholecystitis -perichondral -perichondrial -perichondritis -perichondrium -perichord -perichordal -perichoresis -perichorioidal -perichoroidal -perichylous -pericladium -periclase -periclasia -periclasite -periclaustral -periclinal -periclinally -pericline -periclinium -periclitate -periclitation -pericolitis -pericolpitis -periconchal -periconchitis -pericopal -pericope -pericopic -pericorneal -pericowperitis -pericoxitis -pericranial -pericranitis -pericranium -pericristate -periculant -pericycle -pericycloid -pericyclone -pericyclonic -pericystic -pericystitis -pericystium -pericytial -peridendritic -peridental -peridentium -peridentoclasia -periderm -peridermal -peridermic -peridesm -peridesmic -peridesmitis -peridesmium -peridial -peridiastole -peridiastolic -perididymis -perididymitis -peridiiform -peridiniaceous -peridinial -peridinian -peridinid -peridiole -peridiolum -peridium -peridot -peridotic -peridotite -peridotitic -periductal -periegesis -periegetic -perielesis -periencephalitis -perienteric -perienteritis -perienteron -periependymal -periesophageal -periesophagitis -perifistular -perifoliary -perifollicular -perifolliculitis -perigangliitis -periganglionic -perigastric -perigastritis -perigastrula -perigastrular -perigastrulation -perigeal -perigee -perigemmal -perigenesis -perigenital -perigeum -periglandular -perigloea -periglottic -periglottis -perignathic -perigon -perigonadial -perigonal -perigone -perigonial -perigonium -perigraph -perigraphic -perigynial -perigynium -perigynous -perigyny -perihelial -perihelian -perihelion -perihelium -perihepatic -perihepatitis -perihermenial -perihernial -perihysteric -perijejunitis -perijove -perikaryon -perikronion -peril -perilabyrinth -perilabyrinthitis -perilaryngeal -perilaryngitis -perilenticular -periligamentous -perilless -perilobar -perilous -perilously -perilousness -perilsome -perilymph -perilymphangial -perilymphangitis -perilymphatic -perimartium -perimastitis -perimedullary -perimeningitis -perimeter -perimeterless -perimetral -perimetric -perimetrical -perimetrically -perimetritic -perimetritis -perimetrium -perimetry -perimorph -perimorphic -perimorphism -perimorphous -perimyelitis -perimysial -perimysium -perine -perineal -perineocele -perineoplastic -perineoplasty -perineorrhaphy -perineoscrotal -perineostomy -perineosynthesis -perineotomy -perineovaginal -perineovulvar -perinephral -perinephrial -perinephric -perinephritic -perinephritis -perinephrium -perineptunium -perineum -perineural -perineurial -perineuritis -perineurium -perinium -perinuclear -periocular -period -periodate -periodic -periodical -periodicalism -periodicalist -periodicalize -periodically -periodicalness -periodicity -periodide -periodize -periodogram -periodograph -periodology -periodontal -periodontia -periodontic -periodontist -periodontitis -periodontium -periodontoclasia -periodontologist -periodontology -periodontum -periodoscope -perioeci -perioecians -perioecic -perioecid -perioecus -perioesophageal -perioikoi -periomphalic -perionychia -perionychium -perionyx -perionyxis -perioophoritis -periophthalmic -periophthalmitis -periople -perioplic -perioptic -perioptometry -perioral -periorbit -periorbita -periorbital -periorchitis -periost -periostea -periosteal -periosteitis -periosteoalveolar -periosteoma -periosteomedullitis -periosteomyelitis -periosteophyte -periosteorrhaphy -periosteotome -periosteotomy -periosteous -periosteum -periostitic -periostitis -periostoma -periostosis -periostotomy -periostracal -periostracum -periotic -periovular -peripachymeningitis -peripancreatic -peripancreatitis -peripapillary -peripatetic -peripatetical -peripatetically -peripateticate -peripatize -peripatoid -peripenial -peripericarditis -peripetalous -peripetasma -peripeteia -peripetia -peripety -periphacitis -peripharyngeal -peripherad -peripheral -peripherally -peripherial -peripheric -peripherical -peripherically -peripherocentral -peripheroceptor -peripheromittor -peripheroneural -peripherophose -periphery -periphlebitic -periphlebitis -periphractic -periphrase -periphrases -periphrasis -periphrastic -periphrastical -periphrastically -periphraxy -periphyllum -periphyse -periphysis -periplasm -periplast -periplastic -periplegmatic -peripleural -peripleuritis -periplus -peripneumonia -peripneumonic -peripneumony -peripneustic -peripolar -peripolygonal -periportal -periproct -periproctal -periproctitis -periproctous -periprostatic -periprostatitis -peripteral -peripterous -periptery -peripylephlebitis -peripyloric -perique -perirectal -perirectitis -perirenal -perisalpingitis -perisarc -perisarcal -perisarcous -perisaturnium -periscian -periscians -periscii -perisclerotic -periscopal -periscope -periscopic -periscopical -periscopism -perish -perishability -perishable -perishableness -perishably -perished -perishing -perishingly -perishless -perishment -perisigmoiditis -perisinuitis -perisinuous -perisinusitis -perisoma -perisomal -perisomatic -perisome -perisomial -perisperm -perispermal -perispermatitis -perispermic -perisphere -perispheric -perispherical -perisphinctean -perisphinctoid -perisplanchnic -perisplanchnitis -perisplenetic -perisplenic -perisplenitis -perispome -perispomenon -perispondylic -perispondylitis -perispore -perisporiaceous -perissad -perissodactyl -perissodactylate -perissodactyle -perissodactylic -perissodactylism -perissodactylous -perissologic -perissological -perissology -perissosyllabic -peristalith -peristalsis -peristaltic -peristaltically -peristaphyline -peristaphylitis -peristele -peristerite -peristeromorph -peristeromorphic -peristeromorphous -peristeronic -peristerophily -peristeropod -peristeropodan -peristeropode -peristeropodous -peristethium -peristole -peristoma -peristomal -peristomatic -peristome -peristomial -peristomium -peristrephic -peristrephical -peristrumitis -peristrumous -peristylar -peristyle -peristylium -peristylos -peristylum -perisynovial -perisystole -perisystolic -perit -perite -peritectic -peritendineum -peritenon -perithece -perithecial -perithecium -perithelial -perithelioma -perithelium -perithoracic -perithyreoiditis -perithyroiditis -peritomize -peritomous -peritomy -peritoneal -peritonealgia -peritoneally -peritoneocentesis -peritoneoclysis -peritoneomuscular -peritoneopathy -peritoneopericardial -peritoneopexy -peritoneoplasty -peritoneoscope -peritoneoscopy -peritoneotomy -peritoneum -peritonism -peritonital -peritonitic -peritonitis -peritonsillar -peritonsillitis -peritracheal -peritrema -peritrematous -peritreme -peritrich -peritrichan -peritrichic -peritrichous -peritrichously -peritroch -peritrochal -peritrochanteric -peritrochium -peritrochoid -peritropal -peritrophic -peritropous -perityphlic -perityphlitic -perityphlitis -periumbilical -periungual -periuranium -periureteric -periureteritis -periurethral -periurethritis -periuterine -periuvular -perivaginal -perivaginitis -perivascular -perivasculitis -perivenous -perivertebral -perivesical -perivisceral -perivisceritis -perivitellin -perivitelline -periwig -periwigpated -periwinkle -periwinkled -periwinkler -perizonium -perjink -perjinkety -perjinkities -perjinkly -perjure -perjured -perjuredly -perjuredness -perjurer -perjuress -perjurious -perjuriously -perjuriousness -perjurous -perjury -perjurymonger -perjurymongering -perk -perkily -perkin -perkiness -perking -perkingly -perkish -perknite -perky -perlaceous -perle -perlection -perlid -perligenous -perlingual -perlingually -perlite -perlitic -perloir -perlustrate -perlustration -perlustrator -perm -permafrost -permalloy -permanence -permanency -permanent -permanently -permanentness -permanganate -permanganic -permansive -permeability -permeable -permeableness -permeably -permeameter -permeance -permeant -permeate -permeation -permeative -permeator -permillage -permirific -permissibility -permissible -permissibleness -permissibly -permission -permissioned -permissive -permissively -permissiveness -permissory -permit -permittable -permitted -permittedly -permittee -permitter -permittivity -permixture -permonosulphuric -permoralize -permutability -permutable -permutableness -permutably -permutate -permutation -permutational -permutationist -permutator -permutatorial -permutatory -permute -permuter -pern -pernancy -pernasal -pernavigate -pernicious -perniciously -perniciousness -pernicketiness -pernickety -pernine -pernitrate -pernitric -pernoctation -pernor -pernyi -peroba -perobrachius -perocephalus -perochirus -perodactylus -peromelous -peromelus -peronate -peroneal -peroneocalcaneal -peroneotarsal -peroneotibial -peronial -peronium -peronosporaceous -peropod -peropodous -peropus -peroral -perorally -perorate -peroration -perorational -perorative -perorator -peroratorical -peroratorically -peroratory -perosis -perosmate -perosmic -perosomus -perotic -perovskite -peroxidase -peroxidate -peroxidation -peroxide -peroxidic -peroxidize -peroxidizement -peroxy -peroxyl -perozonid -perozonide -perpend -perpendicular -perpendicularity -perpendicularly -perpera -perperfect -perpetrable -perpetrate -perpetration -perpetrator -perpetratress -perpetratrix -perpetuable -perpetual -perpetualism -perpetualist -perpetuality -perpetually -perpetualness -perpetuana -perpetuance -perpetuant -perpetuate -perpetuation -perpetuator -perpetuity -perplantar -perplex -perplexable -perplexed -perplexedly -perplexedness -perplexer -perplexing -perplexingly -perplexity -perplexment -perplication -perquadrat -perquest -perquisite -perquisition -perquisitor -perradial -perradially -perradiate -perradius -perridiculous -perrier -perron -perruche -perrukery -perruthenate -perruthenic -perry -perryman -persalt -perscent -perscribe -perscrutate -perscrutation -perscrutator -perse -persecute -persecutee -persecuting -persecutingly -persecution -persecutional -persecutive -persecutiveness -persecutor -persecutory -persecutress -persecutrix -perseite -perseitol -perseity -persentiscency -perseverance -perseverant -perseverate -perseveration -persevere -persevering -perseveringly -persicary -persico -persicot -persienne -persiennes -persiflage -persiflate -persilicic -persimmon -persis -persist -persistence -persistency -persistent -persistently -persister -persisting -persistingly -persistive -persistively -persistiveness -persnickety -person -persona -personable -personableness -personably -personage -personal -personalia -personalism -personalist -personalistic -personality -personalization -personalize -personally -personalness -personalty -personate -personately -personating -personation -personative -personator -personed -personeity -personifiable -personifiant -personification -personificative -personificator -personifier -personify -personization -personize -personnel -personship -perspection -perspective -perspectived -perspectiveless -perspectively -perspectivity -perspectograph -perspectometer -perspicacious -perspicaciously -perspicaciousness -perspicacity -perspicuity -perspicuous -perspicuously -perspicuousness -perspirability -perspirable -perspirant -perspirate -perspiration -perspirative -perspiratory -perspire -perspiringly -perspiry -perstringe -perstringement -persuadability -persuadable -persuadableness -persuadably -persuade -persuaded -persuadedly -persuadedness -persuader -persuadingly -persuasibility -persuasible -persuasibleness -persuasibly -persuasion -persuasive -persuasively -persuasiveness -persuasory -persulphate -persulphide -persulphocyanate -persulphocyanic -persulphuric -persymmetric -persymmetrical -pert -pertain -pertaining -pertainment -perten -perthiocyanate -perthiocyanic -perthiotophyre -perthite -perthitic -perthitically -perthosite -pertinacious -pertinaciously -pertinaciousness -pertinacity -pertinence -pertinency -pertinent -pertinently -pertinentness -pertish -pertly -pertness -perturb -perturbability -perturbable -perturbance -perturbancy -perturbant -perturbate -perturbation -perturbational -perturbatious -perturbative -perturbator -perturbatory -perturbatress -perturbatrix -perturbed -perturbedly -perturbedness -perturber -perturbing -perturbingly -perturbment -pertuse -pertused -pertusion -pertussal -pertussis -perty -peruke -perukeless -perukier -perukiership -perula -perulate -perule -perusable -perusal -peruse -peruser -pervade -pervadence -pervader -pervading -pervadingly -pervadingness -pervagate -pervagation -pervalvar -pervasion -pervasive -pervasively -pervasiveness -perverse -perversely -perverseness -perversion -perversity -perversive -pervert -perverted -pervertedly -pervertedness -perverter -pervertibility -pervertible -pervertibly -pervertive -perviability -perviable -pervicacious -pervicaciously -pervicaciousness -pervicacity -pervigilium -pervious -perviously -perviousness -pervulgate -pervulgation -perwitsky -pes -pesa -pesade -pesage -peseta -peshkar -peshkash -peshwa -peshwaship -peskily -peskiness -pesky -peso -pess -pessary -pessimal -pessimism -pessimist -pessimistic -pessimistically -pessimize -pessimum -pessomancy -pessoner -pessular -pessulus -pest -peste -pester -pesterer -pesteringly -pesterment -pesterous -pestersome -pestful -pesthole -pesthouse -pesticidal -pesticide -pestiduct -pestiferous -pestiferously -pestiferousness -pestifugous -pestify -pestilence -pestilenceweed -pestilencewort -pestilent -pestilential -pestilentially -pestilentialness -pestilently -pestle -pestological -pestologist -pestology -pestproof -pet -petal -petalage -petaled -petaliferous -petaliform -petaline -petalism -petalite -petalled -petalless -petallike -petalocerous -petalodic -petalodont -petalodontid -petalodontoid -petalody -petaloid -petaloidal -petaloideous -petalomania -petalon -petalous -petalwise -petaly -petard -petardeer -petardier -petary -petasos -petasus -petaurine -petaurist -petchary -petcock -pete -peteca -petechiae -petechial -petechiate -peteman -peter -peterman -peternet -petersham -peterwort -petful -petiolar -petiolary -petiolate -petiolated -petiole -petioled -petiolular -petiolulate -petiolule -petiolus -petit -petite -petiteness -petitgrain -petition -petitionable -petitional -petitionarily -petitionary -petitionee -petitioner -petitionist -petitionproof -petitor -petitory -petkin -petling -peto -petrary -petre -petrean -petreity -petrel -petrescence -petrescent -petricolous -petrie -petrifaction -petrifactive -petrifiable -petrific -petrificant -petrificate -petrification -petrified -petrifier -petrify -petrissage -petrochemical -petrochemistry -petrogenesis -petrogenic -petrogeny -petroglyph -petroglyphic -petroglyphy -petrograph -petrographer -petrographic -petrographical -petrographically -petrography -petrohyoid -petrol -petrolage -petrolatum -petrolean -petrolene -petroleous -petroleum -petrolic -petroliferous -petrolific -petrolist -petrolithic -petrolization -petrolize -petrologic -petrological -petrologically -petromastoid -petromyzont -petromyzontoid -petronel -petronella -petropharyngeal -petrophilous -petrosa -petrosal -petrosilex -petrosiliceous -petrosilicious -petrosphenoid -petrosphenoidal -petrosphere -petrosquamosal -petrosquamous -petrostearin -petrostearine -petrosum -petrotympanic -petrous -petroxolin -pettable -petted -pettedly -pettedness -petter -pettichaps -petticoat -petticoated -petticoaterie -petticoatery -petticoatism -petticoatless -petticoaty -pettifog -pettifogger -pettifoggery -pettifogging -pettifogulize -pettifogulizer -pettily -pettiness -pettingly -pettish -pettitoes -pettle -petty -pettyfog -petulance -petulancy -petulant -petulantly -petune -petuntse -petwood -petzite -peucites -peuhl -pew -pewage -pewdom -pewee -pewfellow -pewful -pewholder -pewing -pewit -pewless -pewmate -pewter -pewterer -pewterwort -pewtery -pewy -peyote -peyotl -peyton -peytrel -pezantic -pezizaceous -pezizaeform -peziziform -pezizoid -pezograph -pfeffernuss -pfennig -pfui -pfund -phacelite -phacella -phacitis -phacoanaphylaxis -phacocele -phacochere -phacocherine -phacochoere -phacochoerid -phacochoerine -phacochoeroid -phacocyst -phacocystectomy -phacocystitis -phacoglaucoma -phacoid -phacoidal -phacoidoscope -phacolite -phacolith -phacolysis -phacomalacia -phacometer -phacopid -phacosclerosis -phacoscope -phacotherapy -phaeism -phaenantherous -phaenanthery -phaenogam -phaenogamian -phaenogamic -phaenogamous -phaenogenesis -phaenogenetic -phaenological -phaenology -phaenomenal -phaenomenism -phaenomenon -phaenozygous -phaeochrous -phaeodarian -phaeophore -phaeophycean -phaeophyceous -phaeophyll -phaeophytin -phaeoplast -phaeospore -phaeosporous -phaeton -phage -phagedena -phagedenic -phagedenical -phagedenous -phagocytable -phagocytal -phagocyte -phagocyter -phagocytic -phagocytism -phagocytize -phagocytoblast -phagocytolysis -phagocytolytic -phagocytose -phagocytosis -phagodynamometer -phagolysis -phagolytic -phagomania -phainolion -phalacrocoracine -phalacrosis -phalaenopsid -phalangal -phalange -phalangeal -phalangean -phalanger -phalangerine -phalanges -phalangette -phalangian -phalangic -phalangid -phalangidan -phalangidean -phalangiform -phalangigrade -phalangigrady -phalangiid -phalangist -phalangistine -phalangite -phalangitic -phalangitis -phalangologist -phalangology -phalansterial -phalansterian -phalansterianism -phalansteric -phalansterism -phalansterist -phalanstery -phalanx -phalanxed -phalarica -phalarope -phalera -phalerate -phalerated -phallaceous -phallalgia -phallaneurysm -phallephoric -phallic -phallical -phallicism -phallicist -phallin -phallism -phallist -phallitis -phallocrypsis -phallodynia -phalloid -phalloncus -phalloplasty -phallorrhagia -phallus -phanatron -phaneric -phanerite -phanerocephalous -phanerocodonic -phanerocryst -phanerocrystalline -phanerogam -phanerogamian -phanerogamic -phanerogamous -phanerogamy -phanerogenetic -phanerogenic -phaneroglossal -phaneroglossate -phaneromania -phaneromere -phaneromerous -phaneroscope -phanerosis -phanerozoic -phanerozonate -phanic -phano -phansigar -phantascope -phantasia -phantasist -phantasize -phantasm -phantasma -phantasmagoria -phantasmagorial -phantasmagorially -phantasmagorian -phantasmagoric -phantasmagorical -phantasmagorist -phantasmagory -phantasmal -phantasmalian -phantasmality -phantasmally -phantasmascope -phantasmata -phantasmatic -phantasmatical -phantasmatically -phantasmatography -phantasmic -phantasmical -phantasmically -phantasmogenesis -phantasmogenetic -phantasmograph -phantasmological -phantasmology -phantast -phantasy -phantom -phantomatic -phantomic -phantomical -phantomically -phantomize -phantomizer -phantomland -phantomlike -phantomnation -phantomry -phantomship -phantomy -phantoplex -phantoscope -phare -pharisaical -pharisaically -pharisaicalness -pharisee -pharmacal -pharmaceutic -pharmaceutical -pharmaceutically -pharmaceutics -pharmaceutist -pharmacic -pharmacist -pharmacite -pharmacodiagnosis -pharmacodynamic -pharmacodynamical -pharmacodynamics -pharmacoendocrinology -pharmacognosia -pharmacognosis -pharmacognosist -pharmacognostical -pharmacognostically -pharmacognostics -pharmacognosy -pharmacography -pharmacolite -pharmacologia -pharmacologic -pharmacological -pharmacologically -pharmacologist -pharmacology -pharmacomania -pharmacomaniac -pharmacomaniacal -pharmacometer -pharmacopedia -pharmacopedic -pharmacopedics -pharmacopeia -pharmacopeial -pharmacopeian -pharmacophobia -pharmacopoeia -pharmacopoeial -pharmacopoeian -pharmacopoeist -pharmacopolist -pharmacoposia -pharmacopsychology -pharmacosiderite -pharmacotherapy -pharmacy -pharmakos -pharmic -pharmuthi -pharology -pharos -pharyngal -pharyngalgia -pharyngalgic -pharyngeal -pharyngectomy -pharyngemphraxis -pharynges -pharyngic -pharyngismus -pharyngitic -pharyngitis -pharyngoamygdalitis -pharyngobranch -pharyngobranchial -pharyngobranchiate -pharyngocele -pharyngoceratosis -pharyngodynia -pharyngoepiglottic -pharyngoepiglottidean -pharyngoesophageal -pharyngoglossal -pharyngoglossus -pharyngognath -pharyngognathous -pharyngographic -pharyngography -pharyngokeratosis -pharyngolaryngeal -pharyngolaryngitis -pharyngolith -pharyngological -pharyngology -pharyngomaxillary -pharyngomycosis -pharyngonasal -pharyngopalatine -pharyngopalatinus -pharyngoparalysis -pharyngopathy -pharyngoplasty -pharyngoplegia -pharyngoplegic -pharyngoplegy -pharyngopleural -pharyngopneustal -pharyngorhinitis -pharyngorhinoscopy -pharyngoscleroma -pharyngoscope -pharyngoscopy -pharyngospasm -pharyngotherapy -pharyngotomy -pharyngotonsillitis -pharyngotyphoid -pharyngoxerosis -pharynogotome -pharynx -phascaceous -phascolome -phase -phaseal -phaseless -phaselin -phasemeter -phasemy -phaseolin -phaseolous -phaseolunatin -phaseometer -phases -phasianic -phasianid -phasianine -phasianoid -phasic -phasis -phasm -phasma -phasmatid -phasmatoid -phasmatrope -phasmid -phasmoid -phasogeneous -phasotropy -pheal -pheasant -pheasantry -pheasantwood -phellandrene -phellem -phelloderm -phellodermal -phellogen -phellogenetic -phellogenic -phellonic -phelloplastic -phelloplastics -phelonion -phemic -phenacaine -phenacetin -phenaceturic -phenacite -phenacyl -phenakism -phenakistoscope -phenanthrene -phenanthridine -phenanthridone -phenanthrol -phenanthroline -phenarsine -phenate -phenazine -phenazone -phene -phenegol -phenene -phenethyl -phenetidine -phenetole -phengite -phengitical -phenic -phenicate -phenicious -phenicopter -phenin -phenmiazine -phenobarbital -phenocoll -phenocopy -phenocryst -phenocrystalline -phenogenesis -phenogenetic -phenol -phenolate -phenolic -phenolization -phenolize -phenological -phenologically -phenologist -phenology -phenoloid -phenolphthalein -phenolsulphonate -phenolsulphonephthalein -phenolsulphonic -phenomena -phenomenal -phenomenalism -phenomenalist -phenomenalistic -phenomenalistically -phenomenality -phenomenalization -phenomenalize -phenomenally -phenomenic -phenomenical -phenomenism -phenomenist -phenomenistic -phenomenize -phenomenological -phenomenologically -phenomenology -phenomenon -phenoplast -phenoplastic -phenoquinone -phenosafranine -phenosal -phenospermic -phenospermy -phenothiazine -phenotype -phenotypic -phenotypical -phenotypically -phenoxazine -phenoxid -phenoxide -phenozygous -phenyl -phenylacetaldehyde -phenylacetamide -phenylacetic -phenylalanine -phenylamide -phenylamine -phenylate -phenylation -phenylboric -phenylcarbamic -phenylcarbimide -phenylene -phenylenediamine -phenylethylene -phenylglycine -phenylglycolic -phenylglyoxylic -phenylhydrazine -phenylhydrazone -phenylic -phenylmethane -pheon -pheophyl -pheophyll -pheophytin -pheretrer -phew -phi -phial -phiale -phialful -phialide -phialine -phiallike -phialophore -phialospore -philadelphite -philadelphy -philalethist -philamot -philander -philanderer -philanthid -philanthrope -philanthropian -philanthropic -philanthropical -philanthropically -philanthropinism -philanthropinist -philanthropism -philanthropist -philanthropistic -philanthropize -philanthropy -philantomba -philarchaist -philaristocracy -philatelic -philatelical -philatelically -philatelism -philatelist -philatelistic -philately -philathletic -philematology -philharmonic -philhellene -philhellenic -philhellenism -philhellenist -philhippic -philhymnic -philiater -philippicize -philippize -philippizer -philippus -philliloo -phillipsine -phillipsite -phillyrin -philobiblian -philobiblic -philobiblical -philobiblist -philobotanic -philobotanist -philobrutish -philocalic -philocalist -philocaly -philocathartic -philocatholic -philocomal -philocubist -philocynic -philocynical -philocynicism -philocyny -philodemic -philodespot -philodestructiveness -philodox -philodoxer -philodoxical -philodramatic -philodramatist -philofelist -philofelon -philogarlic -philogastric -philogeant -philogenitive -philogenitiveness -philograph -philographic -philogynaecic -philogynist -philogynous -philogyny -philohellenian -philokleptic -philoleucosis -philologaster -philologastry -philologer -philologian -philologic -philological -philologically -philologist -philologistic -philologize -philologue -philology -philomath -philomathematic -philomathematical -philomathic -philomathical -philomathy -philomel -philomelanist -philomuse -philomusical -philomystic -philonatural -philoneism -philonium -philonoist -philopagan -philopater -philopatrian -philopena -philophilosophos -philopig -philoplutonic -philopoet -philopogon -philopolemic -philopolemical -philopornist -philoprogeneity -philoprogenitive -philoprogenitiveness -philopterid -philopublican -philoradical -philorchidaceous -philornithic -philorthodox -philosoph -philosophaster -philosophastering -philosophastry -philosophedom -philosopheme -philosopher -philosopheress -philosophership -philosophic -philosophical -philosophically -philosophicalness -philosophicide -philosophicohistorical -philosophicojuristic -philosophicolegal -philosophicoreligious -philosophicotheological -philosophism -philosophist -philosophister -philosophistic -philosophistical -philosophization -philosophize -philosophizer -philosophling -philosophobia -philosophocracy -philosophuncule -philosophunculist -philosophy -philotadpole -philotechnic -philotechnical -philotechnist -philothaumaturgic -philotheism -philotheist -philotheistic -philotheosophical -philotherian -philotherianism -philoxygenous -philozoic -philozoist -philozoonist -philter -philterer -philterproof -philtra -philtrum -philydraceous -phimosed -phimosis -phimotic -phit -phiz -phizes -phizog -phlebalgia -phlebangioma -phlebarteriectasia -phlebarteriodialysis -phlebectasia -phlebectasis -phlebectasy -phlebectomy -phlebectopia -phlebectopy -phlebemphraxis -phlebenteric -phlebenterism -phlebitic -phlebitis -phlebogram -phlebograph -phlebographical -phlebography -phleboid -phleboidal -phlebolite -phlebolith -phlebolithiasis -phlebolithic -phlebolitic -phlebological -phlebology -phlebometritis -phlebopexy -phleboplasty -phleborrhage -phleborrhagia -phleborrhaphy -phleborrhexis -phlebosclerosis -phlebosclerotic -phlebostasia -phlebostasis -phlebostenosis -phlebostrepsis -phlebothrombosis -phlebotome -phlebotomic -phlebotomical -phlebotomically -phlebotomist -phlebotomization -phlebotomize -phlebotomus -phlebotomy -phlegm -phlegma -phlegmagogue -phlegmasia -phlegmatic -phlegmatical -phlegmatically -phlegmaticalness -phlegmaticly -phlegmaticness -phlegmatism -phlegmatist -phlegmatous -phlegmless -phlegmon -phlegmonic -phlegmonoid -phlegmonous -phlegmy -phlobaphene -phlobatannin -phloem -phloeophagous -phloeoterma -phlogisma -phlogistian -phlogistic -phlogistical -phlogisticate -phlogistication -phlogiston -phlogistonism -phlogistonist -phlogogenetic -phlogogenic -phlogogenous -phlogopite -phlogosed -phloretic -phloroglucic -phloroglucin -phlorone -phloxin -pho -phobiac -phobic -phobism -phobist -phobophobia -phoby -phoca -phocacean -phocaceous -phocaenine -phocal -phocenate -phocenic -phocenin -phocid -phociform -phocine -phocodont -phocodontic -phocoid -phocomelia -phocomelous -phocomelus -phoebe -phoenicaceous -phoenicean -phoenicite -phoenicochroite -phoenicopteroid -phoenicopterous -phoenicurous -phoenigm -phoenix -phoenixity -phoenixlike -phoh -pholad -pholadian -pholadid -pholadoid -pholcid -pholcoid -pholido -pholidolite -pholidosis -pholidote -phon -phonal -phonasthenia -phonate -phonation -phonatory -phonautogram -phonautograph -phonautographic -phonautographically -phone -phoneidoscope -phoneidoscopic -phoneme -phonemic -phonemics -phonendoscope -phonesis -phonestheme -phonetic -phonetical -phonetically -phonetician -phoneticism -phoneticist -phoneticization -phoneticize -phoneticogrammatical -phoneticohieroglyphic -phonetics -phonetism -phonetist -phonetization -phonetize -phoniatrics -phoniatry -phonic -phonics -phonikon -phonism -phono -phonocamptic -phonocinematograph -phonodeik -phonodynamograph -phonoglyph -phonogram -phonogramic -phonogramically -phonogrammatic -phonogrammatical -phonogrammic -phonogrammically -phonograph -phonographer -phonographic -phonographical -phonographically -phonographist -phonography -phonolite -phonolitic -phonologer -phonologic -phonological -phonologically -phonologist -phonology -phonometer -phonometric -phonometry -phonomimic -phonomotor -phonopathy -phonophile -phonophobia -phonophone -phonophore -phonophoric -phonophorous -phonophote -phonophotography -phonophotoscope -phonophotoscopic -phonoplex -phonoscope -phonotelemeter -phonotype -phonotyper -phonotypic -phonotypical -phonotypically -phonotypist -phonotypy -phony -phoo -phoranthium -phoresis -phoresy -phoria -phorid -phorminx -phorology -phorometer -phorometric -phorometry -phorone -phoronic -phoronid -phoronomia -phoronomic -phoronomically -phoronomics -phoronomy -phoroscope -phorozooid -phos -phose -phosgene -phosgenic -phosgenite -phosis -phosphagen -phospham -phosphamic -phosphamide -phosphamidic -phosphammonium -phosphatase -phosphate -phosphated -phosphatemia -phosphatese -phosphatic -phosphatide -phosphation -phosphatization -phosphatize -phosphaturia -phosphaturic -phosphene -phosphenyl -phosphide -phosphinate -phosphine -phosphinic -phosphite -phospho -phosphoaminolipide -phosphocarnic -phosphocreatine -phosphoferrite -phosphoglycerate -phosphoglyceric -phosphoglycoprotein -phospholipide -phospholipin -phosphomolybdate -phosphomolybdic -phosphonate -phosphonic -phosphonium -phosphophyllite -phosphoprotein -phosphor -phosphorate -phosphore -phosphoreal -phosphorent -phosphoreous -phosphoresce -phosphorescence -phosphorescent -phosphorescently -phosphoreted -phosphorhidrosis -phosphori -phosphoric -phosphorical -phosphoriferous -phosphorism -phosphorite -phosphoritic -phosphorize -phosphorogen -phosphorogenic -phosphorograph -phosphorographic -phosphorography -phosphoroscope -phosphorous -phosphoruria -phosphorus -phosphoryl -phosphorylase -phosphorylation -phosphosilicate -phosphotartaric -phosphotungstate -phosphotungstic -phosphowolframic -phosphuranylite -phosphuret -phosphuria -phosphyl -phossy -phot -photaesthesia -photaesthesis -photaesthetic -photal -photalgia -photechy -photelectrograph -photeolic -photerythrous -photesthesis -photic -photics -photism -photistic -photo -photoactinic -photoactivate -photoactivation -photoactive -photoactivity -photoaesthetic -photoalbum -photoalgraphy -photoanamorphosis -photoaquatint -photobathic -photobiotic -photobromide -photocampsis -photocatalysis -photocatalyst -photocatalytic -photocatalyzer -photocell -photocellulose -photoceptor -photoceramic -photoceramics -photoceramist -photochemic -photochemical -photochemically -photochemigraphy -photochemist -photochemistry -photochloride -photochlorination -photochromascope -photochromatic -photochrome -photochromic -photochromography -photochromolithograph -photochromoscope -photochromotype -photochromotypy -photochromy -photochronograph -photochronographic -photochronographical -photochronographically -photochronography -photocollograph -photocollographic -photocollography -photocollotype -photocombustion -photocompose -photocomposition -photoconductivity -photocopier -photocopy -photocrayon -photocurrent -photodecomposition -photodensitometer -photodermatic -photodermatism -photodisintegration -photodissociation -photodrama -photodramatic -photodramatics -photodramatist -photodramaturgic -photodramaturgy -photodrome -photodromy -photodynamic -photodynamical -photodynamically -photodynamics -photodysphoria -photoelastic -photoelasticity -photoelectric -photoelectrical -photoelectrically -photoelectricity -photoelectron -photoelectrotype -photoemission -photoemissive -photoengrave -photoengraver -photoengraving -photoepinastic -photoepinastically -photoepinasty -photoesthesis -photoesthetic -photoetch -photoetcher -photoetching -photofilm -photofinish -photofinisher -photofinishing -photofloodlamp -photogalvanograph -photogalvanographic -photogalvanography -photogastroscope -photogelatin -photogen -photogene -photogenetic -photogenic -photogenically -photogenous -photoglyph -photoglyphic -photoglyphography -photoglyphy -photoglyptic -photoglyptography -photogram -photogrammeter -photogrammetric -photogrammetrical -photogrammetry -photograph -photographable -photographee -photographer -photographeress -photographess -photographic -photographical -photographically -photographist -photographize -photographometer -photography -photogravure -photogravurist -photogyric -photohalide -photoheliograph -photoheliographic -photoheliography -photoheliometer -photohyponastic -photohyponastically -photohyponasty -photoimpression -photoinactivation -photoinduction -photoinhibition -photointaglio -photoionization -photoisomeric -photoisomerization -photokinesis -photokinetic -photolith -photolitho -photolithograph -photolithographer -photolithographic -photolithography -photologic -photological -photologist -photology -photoluminescence -photoluminescent -photolysis -photolyte -photolytic -photoma -photomacrograph -photomagnetic -photomagnetism -photomap -photomapper -photomechanical -photomechanically -photometeor -photometer -photometric -photometrical -photometrically -photometrician -photometrist -photometrograph -photometry -photomezzotype -photomicrogram -photomicrograph -photomicrographer -photomicrographic -photomicrography -photomicroscope -photomicroscopic -photomicroscopy -photomontage -photomorphosis -photomural -photon -photonastic -photonasty -photonegative -photonephograph -photonephoscope -photoneutron -photonosus -photooxidation -photooxidative -photopathic -photopathy -photoperceptive -photoperimeter -photoperiod -photoperiodic -photoperiodism -photophane -photophile -photophilic -photophilous -photophily -photophobe -photophobia -photophobic -photophobous -photophone -photophonic -photophony -photophore -photophoresis -photophosphorescent -photophygous -photophysical -photophysicist -photopia -photopic -photopile -photopitometer -photoplay -photoplayer -photoplaywright -photopography -photopolarigraph -photopolymerization -photopositive -photoprint -photoprinter -photoprinting -photoprocess -photoptometer -photoradio -photoradiogram -photoreception -photoreceptive -photoreceptor -photoregression -photorelief -photoresistance -photosalt -photosantonic -photoscope -photoscopic -photoscopy -photosculptural -photosculpture -photosensitive -photosensitiveness -photosensitivity -photosensitization -photosensitize -photosensitizer -photosensory -photospectroheliograph -photospectroscope -photospectroscopic -photospectroscopical -photospectroscopy -photosphere -photospheric -photostability -photostable -photostat -photostationary -photostereograph -photosurveying -photosyntax -photosynthate -photosynthesis -photosynthesize -photosynthetic -photosynthetically -photosynthometer -phototachometer -phototachometric -phototachometrical -phototachometry -phototactic -phototactically -phototactism -phototaxis -phototaxy -phototechnic -phototelegraph -phototelegraphic -phototelegraphically -phototelegraphy -phototelephone -phototelephony -phototelescope -phototelescopic -phototheodolite -phototherapeutic -phototherapeutics -phototherapic -phototherapist -phototherapy -photothermic -phototonic -phototonus -phototopographic -phototopographical -phototopography -phototrichromatic -phototrope -phototrophic -phototrophy -phototropic -phototropically -phototropism -phototropy -phototube -phototype -phototypic -phototypically -phototypist -phototypographic -phototypography -phototypy -photovisual -photovitrotype -photovoltaic -photoxylography -photozinco -photozincograph -photozincographic -photozincography -photozincotype -photozincotypy -photuria -phragma -phragmocone -phragmoconic -phragmocyttarous -phragmoid -phragmosis -phrasable -phrasal -phrasally -phrase -phraseable -phraseless -phrasemaker -phrasemaking -phraseman -phrasemonger -phrasemongering -phrasemongery -phraseogram -phraseograph -phraseographic -phraseography -phraseological -phraseologically -phraseologist -phraseology -phraser -phrasify -phrasiness -phrasing -phrasy -phrator -phratral -phratria -phratriac -phratrial -phratry -phreatic -phreatophyte -phrenesia -phrenesiac -phrenesis -phrenetic -phrenetically -phreneticness -phrenic -phrenicectomy -phrenicocolic -phrenicocostal -phrenicogastric -phrenicoglottic -phrenicohepatic -phrenicolienal -phrenicopericardiac -phrenicosplenic -phrenicotomy -phrenics -phrenitic -phrenitis -phrenocardia -phrenocardiac -phrenocolic -phrenocostal -phrenodynia -phrenogastric -phrenoglottic -phrenogram -phrenograph -phrenography -phrenohepatic -phrenologer -phrenologic -phrenological -phrenologically -phrenologist -phrenologize -phrenology -phrenomagnetism -phrenomesmerism -phrenopathia -phrenopathic -phrenopathy -phrenopericardiac -phrenoplegia -phrenoplegy -phrenosin -phrenosinic -phrenospasm -phrenosplenic -phronesis -phrontisterion -phrontisterium -phrontistery -phryganeid -phryganeoid -phrygium -phrymaceous -phrynid -phrynin -phrynoid -phthalacene -phthalan -phthalanilic -phthalate -phthalazin -phthalazine -phthalein -phthaleinometer -phthalic -phthalid -phthalide -phthalimide -phthalin -phthalocyanine -phthalyl -phthanite -phthinoid -phthiocol -phthiriasis -phthirophagous -phthisic -phthisical -phthisicky -phthisiogenesis -phthisiogenetic -phthisiogenic -phthisiologist -phthisiology -phthisiophobia -phthisiotherapeutic -phthisiotherapy -phthisipneumonia -phthisipneumony -phthisis -phthongal -phthongometer -phthor -phthoric -phu -phugoid -phulkari -phulwa -phulwara -phut -phycite -phycitol -phycochromaceae -phycochromaceous -phycochrome -phycochromophyceous -phycocyanin -phycocyanogen -phycoerythrin -phycography -phycological -phycologist -phycology -phycomycete -phycomycetous -phycophaein -phycoxanthin -phycoxanthine -phygogalactic -phyla -phylacobiosis -phylacobiotic -phylacteric -phylacterical -phylacteried -phylacterize -phylactery -phylactic -phylactocarp -phylactocarpal -phylactolaematous -phylarch -phylarchic -phylarchical -phylarchy -phyle -phylephebic -phylesis -phyletic -phyletically -phyletism -phylic -phyllade -phyllary -phylliform -phyllin -phylline -phyllite -phyllitic -phyllobranchia -phyllobranchial -phyllobranchiate -phyllocarid -phyllocaridan -phyllocerate -phylloclad -phylloclade -phyllocladioid -phyllocladium -phyllocladous -phyllocyanic -phyllocyanin -phyllocyst -phyllocystic -phyllode -phyllodial -phyllodination -phyllodineous -phyllodiniation -phyllodinous -phyllodium -phyllody -phylloerythrin -phyllogenetic -phyllogenous -phylloid -phylloidal -phylloideous -phyllomancy -phyllomania -phyllome -phyllomic -phyllomorph -phyllomorphic -phyllomorphosis -phyllomorphy -phyllophagous -phyllophore -phyllophorous -phyllophyllin -phyllophyte -phyllopod -phyllopodan -phyllopode -phyllopodiform -phyllopodium -phyllopodous -phylloporphyrin -phylloptosis -phyllopyrrole -phyllorhine -phyllorhinine -phylloscopine -phyllosiphonic -phyllosoma -phyllosome -phyllospondylous -phyllostomatoid -phyllostomatous -phyllostome -phyllostomine -phyllostomous -phyllotactic -phyllotactical -phyllotaxis -phyllotaxy -phyllous -phylloxanthin -phylloxeran -phylloxeric -phyllozooid -phylogenetic -phylogenetical -phylogenetically -phylogenic -phylogenist -phylogeny -phylogerontic -phylogerontism -phylography -phylology -phylon -phyloneanic -phylonepionic -phylum -phyma -phymata -phymatic -phymatid -phymatoid -phymatorhysin -phymatosis -physagogue -physalian -physalite -physcioid -physeterine -physeteroid -physharmonica -physianthropy -physiatric -physiatrical -physiatrics -physic -physical -physicalism -physicalist -physicalistic -physicalistically -physicality -physically -physicalness -physician -physicianary -physiciancy -physicianed -physicianer -physicianess -physicianless -physicianly -physicianship -physicism -physicist -physicked -physicker -physicking -physicky -physicoastronomical -physicobiological -physicochemic -physicochemical -physicochemically -physicochemist -physicochemistry -physicogeographical -physicologic -physicological -physicomathematical -physicomathematics -physicomechanical -physicomedical -physicomental -physicomorph -physicomorphic -physicomorphism -physicooptics -physicophilosophical -physicophilosophy -physicophysiological -physicopsychical -physicosocial -physicotheological -physicotheologist -physicotheology -physicotherapeutic -physicotherapeutics -physicotherapy -physics -physiform -physiochemical -physiochemically -physiocracy -physiocrat -physiocratic -physiocratism -physiocratist -physiogenesis -physiogenetic -physiogenic -physiogeny -physiognomic -physiognomical -physiognomically -physiognomics -physiognomist -physiognomize -physiognomonic -physiognomonical -physiognomy -physiogony -physiographer -physiographic -physiographical -physiographically -physiography -physiolater -physiolatrous -physiolatry -physiologer -physiologian -physiological -physiologically -physiologicoanatomic -physiologist -physiologize -physiologue -physiologus -physiology -physiopathological -physiophilist -physiophilosopher -physiophilosophical -physiophilosophy -physiopsychic -physiopsychical -physiopsychological -physiopsychology -physiosociological -physiosophic -physiosophy -physiotherapeutic -physiotherapeutical -physiotherapeutics -physiotherapist -physiotherapy -physiotype -physiotypy -physique -physiqued -physitheism -physitheistic -physitism -physiurgic -physiurgy -physocarpous -physocele -physoclist -physoclistic -physoclistous -physogastric -physogastrism -physogastry -physometra -physonectous -physophoran -physophore -physophorous -physopod -physopodan -physostigmine -physostomatous -physostome -physostomous -phytalbumose -phytase -phytic -phytiferous -phytiform -phytin -phytivorous -phytobacteriology -phytobezoar -phytobiological -phytobiology -phytochemical -phytochemistry -phytochlorin -phytocidal -phytodynamics -phytoecological -phytoecologist -phytoecology -phytogamy -phytogenesis -phytogenetic -phytogenetical -phytogenetically -phytogenic -phytogenous -phytogeny -phytogeographer -phytogeographic -phytogeographical -phytogeographically -phytogeography -phytoglobulin -phytograph -phytographer -phytographic -phytographical -phytographist -phytography -phytohormone -phytoid -phytol -phytolaccaceous -phytolatrous -phytolatry -phytolithological -phytolithologist -phytolithology -phytologic -phytological -phytologically -phytologist -phytology -phytoma -phytome -phytomer -phytometer -phytometric -phytometry -phytomonad -phytomorphic -phytomorphology -phytomorphosis -phyton -phytonic -phytonomy -phytooecology -phytopaleontologic -phytopaleontological -phytopaleontologist -phytopaleontology -phytoparasite -phytopathogen -phytopathogenic -phytopathologic -phytopathological -phytopathologist -phytopathology -phytophagan -phytophagic -phytophagous -phytophagy -phytopharmacologic -phytopharmacology -phytophenological -phytophenology -phytophil -phytophilous -phytophylogenetic -phytophylogenic -phytophylogeny -phytophysiological -phytophysiology -phytoplankton -phytopsyche -phytoptid -phytoptose -phytoptosis -phytorhodin -phytosaur -phytosaurian -phytoserologic -phytoserological -phytoserologically -phytoserology -phytosis -phytosociologic -phytosociological -phytosociologically -phytosociologist -phytosociology -phytosterin -phytosterol -phytostrote -phytosynthesis -phytotaxonomy -phytotechny -phytoteratologic -phytoteratological -phytoteratologist -phytoteratology -phytotomist -phytotomy -phytotopographical -phytotopography -phytotoxic -phytotoxin -phytovitellin -phytozoan -phytozoon -phytyl -pi -pia -piaba -piacaba -piacle -piacular -piacularity -piacularly -piacularness -piaculum -piaffe -piaffer -pial -pialyn -pian -pianette -pianic -pianino -pianism -pianissimo -pianist -pianiste -pianistic -pianistically -piannet -piano -pianoforte -pianofortist -pianograph -pianola -pianolist -pianologue -piarhemia -piarhemic -piassava -piaster -piastre -piation -piazine -piazza -piazzaed -piazzaless -piazzalike -piazzian -pibcorn -piblokto -pibroch -pic -pica -picador -picadura -pical -picamar -picara -picarel -picaresque -picarian -picaro -picaroon -picary -picayune -picayunish -picayunishly -picayunishness -piccadill -piccadilly -piccalilli -piccolo -piccoloist -pice -picene -piceoferruginous -piceotestaceous -piceous -piceworth -pichi -pichiciago -pichuric -pichurim -piciform -picine -pick -pickaback -pickable -pickableness -pickage -pickaninny -pickaroon -pickaway -pickax -picked -pickedly -pickedness -pickee -pickeer -picker -pickerel -pickerelweed -pickering -pickeringite -pickery -picket -picketboat -picketeer -picketer -pickfork -pickietar -pickings -pickle -picklelike -pickleman -pickler -pickleweed -pickleworm -picklock -pickman -pickmaw -picknick -picknicker -pickover -pickpocket -pickpocketism -pickpocketry -pickpole -pickpurse -pickshaft -picksman -picksmith -picksome -picksomeness -pickthank -pickthankly -pickthankness -pickthatch -picktooth -pickup -pickwick -pickwork -picky -picnic -picnicker -picnickery -picnickish -picnicky -pico -picofarad -picoid -picoline -picolinic -picot -picotah -picotee -picotite -picqueter -picra -picramic -picrasmin -picrate -picrated -picric -picrite -picrocarmine -picroerythrin -picrol -picrolite -picromerite -picropodophyllin -picrorhiza -picrorhizin -picrotin -picrotoxic -picrotoxin -picrotoxinin -picryl -pict -pictarnie -pictogram -pictograph -pictographic -pictographically -pictography -pictoradiogram -pictorial -pictorialism -pictorialist -pictorialization -pictorialize -pictorially -pictorialness -pictoric -pictorical -pictorically -picturability -picturable -picturableness -picturably -pictural -picture -picturecraft -pictured -picturedom -picturedrome -pictureful -pictureless -picturelike -picturely -picturemaker -picturemaking -picturer -picturesque -picturesquely -picturesqueness -picturesquish -picturization -picturize -pictury -picucule -picuda -picudilla -picudo -picul -piculet -piculule -pidan -piddle -piddler -piddling -piddock -pidgin -pidjajap -pie -piebald -piebaldism -piebaldly -piebaldness -piece -pieceable -pieceless -piecemaker -piecemeal -piecemealwise -piecen -piecener -piecer -piecette -piecewise -piecework -pieceworker -piecing -piecrust -pied -piedfort -piedly -piedmont -piedmontal -piedmontite -piedness -piehouse -pieless -pielet -pielum -piemag -pieman -piemarker -pien -pienanny -piend -piepan -pieplant -piepoudre -piepowder -pieprint -pier -pierage -pierce -pierceable -pierced -piercel -pierceless -piercent -piercer -piercing -piercingly -piercingness -pierdrop -pierhead -pierid -pieridine -pierine -pierless -pierlike -pierrot -pierrotic -pieshop -piet -pietas -pietic -pietism -pietist -pietistic -pietistical -pietistically -pietose -piety -piewife -piewipe -piewoman -piezo -piezochemical -piezochemistry -piezocrystallization -piezoelectric -piezoelectrically -piezoelectricity -piezometer -piezometric -piezometrical -piezometry -piff -piffle -piffler -pifine -pig -pigbelly -pigdan -pigdom -pigeon -pigeonable -pigeonberry -pigeoneer -pigeoner -pigeonfoot -pigeongram -pigeonhearted -pigeonhole -pigeonholer -pigeonman -pigeonry -pigeontail -pigeonweed -pigeonwing -pigeonwood -pigface -pigfish -pigflower -pigfoot -pigful -piggery -piggin -pigging -piggish -piggishly -piggishness -piggle -piggy -pighead -pigheaded -pigheadedly -pigheadedness -pigherd -pightle -pigless -piglet -pigling -piglinghood -pigly -pigmaker -pigmaking -pigman -pigment -pigmental -pigmentally -pigmentary -pigmentation -pigmentize -pigmentolysis -pigmentophage -pigmentose -pignolia -pignon -pignorate -pignoration -pignoratitious -pignorative -pignus -pignut -pigpen -pigritude -pigroot -pigsconce -pigskin -pigsney -pigstick -pigsticker -pigsty -pigtail -pigwash -pigweed -pigwidgeon -pigyard -piitis -pik -pika -pike -piked -pikel -pikelet -pikeman -pikemonger -piker -pikestaff -piketail -pikey -piki -piking -pikle -piky -pilage -pilandite -pilapil -pilar -pilary -pilaster -pilastered -pilastering -pilastrade -pilastraded -pilastric -pilau -pilaued -pilch -pilchard -pilcher -pilcorn -pilcrow -pile -pileata -pileate -pileated -piled -pileiform -pileolated -pileolus -pileorhiza -pileorhize -pileous -piler -piles -pileus -pileweed -pilework -pileworm -pilewort -pilfer -pilferage -pilferer -pilfering -pilferingly -pilferment -pilgarlic -pilgarlicky -pilger -pilgrim -pilgrimage -pilgrimager -pilgrimatic -pilgrimatical -pilgrimdom -pilgrimer -pilgrimess -pilgrimism -pilgrimize -pilgrimlike -pilgrimwise -pili -pilidium -pilifer -piliferous -piliform -piligan -piliganine -piligerous -pilikai -pililloo -pilimiction -pilin -piline -piling -pilipilula -pilkins -pill -pillage -pillageable -pillagee -pillager -pillar -pillared -pillaret -pillaring -pillarist -pillarize -pillarlet -pillarlike -pillarwise -pillary -pillas -pillbox -pilled -pilledness -pillet -pilleus -pillion -pilliver -pilliwinks -pillmaker -pillmaking -pillmonger -pillorization -pillorize -pillory -pillow -pillowcase -pillowing -pillowless -pillowmade -pillowwork -pillowy -pillworm -pillwort -pilm -pilmy -pilocarpidine -pilocarpine -pilocystic -piloerection -pilomotor -pilon -pilonidal -pilori -pilose -pilosebaceous -pilosine -pilosis -pilosism -pilosity -pilot -pilotage -pilotaxitic -pilotee -pilothouse -piloting -pilotism -pilotless -pilotman -pilotry -pilotship -pilotweed -pilous -pilpul -pilpulist -pilpulistic -piltock -pilula -pilular -pilule -pilulist -pilulous -pilum -pilus -pilwillet -pily -pimaric -pimelate -pimelic -pimelite -pimelitis -pimento -pimenton -pimgenet -pimienta -pimiento -pimlico -pimola -pimp -pimperlimpimp -pimpernel -pimpery -pimping -pimpish -pimple -pimpleback -pimpled -pimpleproof -pimpliness -pimplo -pimploe -pimplous -pimply -pimpship -pin -pina -pinaceous -pinaces -pinachrome -pinacle -pinacocytal -pinacocyte -pinacoid -pinacoidal -pinacol -pinacolate -pinacolic -pinacolin -pinacone -pinacoteca -pinaculum -pinafore -pinakiolite -pinakoidal -pinakotheke -pinang -pinaster -pinatype -pinaverdol -pinax -pinball -pinbefore -pinbone -pinbush -pincase -pincement -pincer -pincerlike -pincers -pincerweed -pinch -pinchable -pinchback -pinchbeck -pinchbelly -pinchcock -pinchcommons -pinchcrust -pinche -pinched -pinchedly -pinchedness -pinchem -pincher -pinchfist -pinchfisted -pinchgut -pinching -pinchingly -pinchpenny -pincoffin -pincpinc -pincushion -pincushiony -pind -pinda -pindarical -pindarically -pinder -pindling -pindy -pine -pineal -pinealism -pinealoma -pineapple -pined -pinedrops -pineland -pinene -piner -pinery -pinesap -pinetum -pineweed -pinewoods -piney -pinfall -pinfeather -pinfeathered -pinfeatherer -pinfeathery -pinfish -pinfold -ping -pingle -pingler -pingue -pinguecula -pinguedinous -pinguefaction -pinguefy -pinguescence -pinguescent -pinguicula -pinguiculaceous -pinguid -pinguidity -pinguiferous -pinguin -pinguinitescent -pinguite -pinguitude -pinguitudinous -pinhead -pinheaded -pinheadedness -pinhold -pinhole -pinhook -pinic -pinicoline -pinicolous -piniferous -piniform -pining -piningly -pinion -pinioned -pinionless -pinionlike -pinipicrin -pinitannic -pinite -pinitol -pinivorous -pinjane -pinjra -pink -pinkberry -pinked -pinkeen -pinken -pinker -pinkeye -pinkfish -pinkie -pinkify -pinkily -pinkiness -pinking -pinkish -pinkishness -pinkly -pinkness -pinkroot -pinksome -pinkweed -pinkwood -pinkwort -pinky -pinless -pinlock -pinmaker -pinna -pinnace -pinnacle -pinnaclet -pinnae -pinnaglobin -pinnal -pinnate -pinnated -pinnatedly -pinnately -pinnatifid -pinnatifidly -pinnatilobate -pinnatilobed -pinnation -pinnatipartite -pinnatiped -pinnatisect -pinnatisected -pinnatodentate -pinnatopectinate -pinnatulate -pinned -pinnel -pinner -pinnet -pinniferous -pinniform -pinnigerous -pinnigrade -pinninervate -pinninerved -pinning -pinningly -pinniped -pinnipedian -pinnisect -pinnisected -pinnitarsal -pinnitentaculate -pinniwinkis -pinnock -pinnoite -pinnotere -pinnothere -pinnotherian -pinnula -pinnular -pinnulate -pinnulated -pinnule -pinnulet -pinny -pino -pinochle -pinocytosis -pinole -pinoleum -pinolia -pinolin -pinon -pinonic -pinpillow -pinpoint -pinprick -pinproof -pinrail -pinrowed -pinscher -pinsons -pint -pinta -pintadera -pintado -pintadoite -pintail -pintano -pinte -pintle -pinto -pintura -pinulus -pinweed -pinwing -pinwork -pinworm -piny -pinyl -pinyon -pioneer -pioneerdom -pioneership -pionnotes -pioscope -pioted -piotine -piotty -pioury -pious -piously -piousness -pip -pipa -pipage -pipal -pipe -pipeage -pipecoline -pipecolinic -piped -pipefish -pipeful -pipelayer -pipeless -pipelike -pipeline -pipeman -pipemouth -piper -piperaceous -piperate -piperazin -piperazine -piperic -piperide -piperideine -piperidge -piperidide -piperidine -piperine -piperitious -piperitone -piperly -piperno -piperoid -piperonal -piperonyl -pipery -piperylene -pipestapple -pipestem -pipestone -pipet -pipette -pipewalker -pipewood -pipework -pipewort -pipi -piping -pipingly -pipingness -pipiri -pipistrel -pipistrelle -pipit -pipkin -pipkinet -pipless -pipped -pipper -pippin -pippiner -pippinface -pippy -piprine -piproid -pipsissewa -pipunculid -pipy -piquable -piquance -piquancy -piquant -piquantly -piquantness -pique -piquet -piquia -piqure -pir -piracy -piragua -piranha -pirate -piratelike -piratery -piratess -piratical -piratically -piratism -piratize -piraty -pirijiri -piripiri -piririgua -pirl -pirn -pirner -pirnie -pirny -pirogue -pirol -piroplasm -piroplasmosis -pirouette -pirouetter -pirouettist -pirr -pirraura -pirrmaw -pirssonite -pisaca -pisachee -pisang -pisanite -pisay -piscary -piscation -piscatology -piscator -piscatorial -piscatorialist -piscatorially -piscatorian -piscatorious -piscatory -piscian -piscicapture -piscicapturist -piscicolous -piscicultural -pisciculturally -pisciculture -pisciculturist -piscifauna -pisciferous -pisciform -piscina -piscinal -piscine -piscinity -piscivorous -pisco -pise -pish -pishaug -pishogue -pishu -pisiform -pisk -pisky -pismire -pismirism -piso -pisolite -pisolitic -piss -pissabed -pissant -pist -pistache -pistachio -pistacite -pistareen -pistic -pistil -pistillaceous -pistillar -pistillary -pistillate -pistillid -pistilliferous -pistilliform -pistilligerous -pistilline -pistillode -pistillody -pistilloid -pistilogy -pistle -pistol -pistole -pistoleer -pistolet -pistolgram -pistolgraph -pistollike -pistolography -pistology -pistolproof -pistolwise -piston -pistonhead -pistonlike -pistrix -pit -pita -pitahaya -pitanga -pitangua -pitapat -pitapatation -pitarah -pitau -pitaya -pitayita -pitch -pitchable -pitchblende -pitcher -pitchered -pitcherful -pitcherlike -pitcherman -pitchfork -pitchhole -pitchi -pitchiness -pitching -pitchlike -pitchman -pitchometer -pitchout -pitchpike -pitchpole -pitchpoll -pitchstone -pitchwork -pitchy -piteous -piteously -piteousness -pitfall -pith -pithecan -pithecanthrope -pithecanthropic -pithecanthropid -pithecanthropoid -pithecian -pitheciine -pithecism -pithecoid -pithecological -pithecometric -pithecomorphic -pithecomorphism -pithful -pithily -pithiness -pithless -pithlessly -pithole -pithos -pithsome -pithwork -pithy -pitiability -pitiable -pitiableness -pitiably -pitiedly -pitiedness -pitier -pitiful -pitifully -pitifulness -pitikins -pitiless -pitilessly -pitilessness -pitless -pitlike -pitmaker -pitmaking -pitman -pitmark -pitmirk -pitometer -pitpan -pitpit -pitside -pittacal -pittance -pittancer -pitted -pitter -pitticite -pittine -pitting -pittite -pittoid -pittosporaceous -pittospore -pituital -pituitary -pituite -pituitous -pituitousness -pituri -pitwood -pitwork -pitwright -pity -pitying -pityingly -pityocampa -pityproof -pityriasic -pityriasis -pityroid -piuri -piuricapsular -pivalic -pivot -pivotal -pivotally -pivoter -pix -pixie -pixilated -pixilation -pixy -pize -pizza -pizzeria -pizzicato -pizzle -placability -placable -placableness -placably -placard -placardeer -placarder -placate -placater -placation -placative -placatively -placatory -placcate -place -placeable -placebo -placeful -placeless -placelessly -placemaker -placemaking -placeman -placemanship -placement -placemonger -placemongering -placenta -placental -placentalian -placentary -placentate -placentation -placentiferous -placentiform -placentigerous -placentitis -placentoid -placentoma -placer -placet -placewoman -placid -placidity -placidly -placidness -placitum -plack -placket -plackless -placochromatic -placode -placoderm -placodermal -placodermatous -placodermoid -placodont -placoganoid -placoganoidean -placoid -placoidal -placoidean -placophoran -placoplast -placula -placuntitis -placuntoma -pladaroma -pladarosis -plaga -plagal -plagate -plage -plagiaplite -plagiarical -plagiarism -plagiarist -plagiaristic -plagiaristically -plagiarization -plagiarize -plagiarizer -plagiary -plagihedral -plagiocephalic -plagiocephalism -plagiocephaly -plagioclase -plagioclasite -plagioclastic -plagioclinal -plagiodont -plagiograph -plagioliparite -plagionite -plagiopatagium -plagiophyre -plagiostomatous -plagiostome -plagiostomous -plagiotropic -plagiotropically -plagiotropism -plagiotropous -plagium -plagose -plagosity -plague -plagued -plagueful -plagueless -plagueproof -plaguer -plaguesome -plaguesomeness -plaguily -plaguy -plaice -plaid -plaided -plaidie -plaiding -plaidman -plaidy -plain -plainback -plainbacks -plainer -plainful -plainhearted -plainish -plainly -plainness -plainscraft -plainsfolk -plainsman -plainsoled -plainstones -plainswoman -plaint -plaintail -plaintiff -plaintiffship -plaintile -plaintive -plaintively -plaintiveness -plaintless -plainward -plaister -plait -plaited -plaiter -plaiting -plaitless -plaitwork -plak -plakat -plan -planable -planaea -planar -planarian -planaridan -planariform -planarioid -planarity -planate -planation -planch -plancheite -plancher -planchet -planchette -planching -planchment -plancier -plandok -plane -planeness -planer -planet -planeta -planetable -planetabler -planetal -planetaria -planetarian -planetarily -planetarium -planetary -planeted -planetesimal -planeticose -planeting -planetist -planetkin -planetless -planetlike -planetogeny -planetography -planetoid -planetoidal -planetologic -planetologist -planetology -planetule -planform -planful -planfully -planfulness -plang -plangency -plangent -plangently -plangor -plangorous -planicaudate -planicipital -planidorsate -planifolious -planiform -planigraph -planilla -planimetric -planimetrical -planimetry -planineter -planipennate -planipennine -planipetalous -planiphyllous -planirostral -planirostrate -planiscope -planiscopic -planish -planisher -planispheral -planisphere -planispheric -planispherical -planispiral -planity -plank -plankage -plankbuilt -planker -planking -plankless -planklike -planksheer -plankter -planktologist -planktology -plankton -planktonic -planktont -plankways -plankwise -planky -planless -planlessly -planlessness -planner -planoblast -planoblastic -planoconical -planocylindric -planoferrite -planogamete -planograph -planographic -planographist -planography -planohorizontal -planolindrical -planometer -planometry -planomiller -planoorbicular -planorbiform -planorbine -planorboid -planorotund -planosol -planosome -planospiral -planospore -planosubulate -plant -planta -plantable -plantad -plantage -plantaginaceous -plantagineous -plantain -plantal -plantar -plantaris -plantarium -plantation -plantationlike -plantdom -planter -planterdom -planterly -plantership -plantigrade -plantigrady -planting -plantivorous -plantless -plantlet -plantlike -plantling -plantocracy -plantsman -plantula -plantular -plantule -planula -planulan -planular -planulate -planuliform -planuloid -planuria -planury -planxty -plap -plappert -plaque -plaquette -plash -plasher -plashet -plashingly -plashment -plashy -plasm -plasma -plasmagene -plasmapheresis -plasmase -plasmatic -plasmatical -plasmation -plasmatoparous -plasmatorrhexis -plasmic -plasmocyte -plasmocytoma -plasmode -plasmodesm -plasmodesma -plasmodesmal -plasmodesmic -plasmodesmus -plasmodia -plasmodial -plasmodiate -plasmodic -plasmodiocarp -plasmodiocarpous -plasmodium -plasmogen -plasmolysis -plasmolytic -plasmolytically -plasmolyzability -plasmolyzable -plasmolyze -plasmoma -plasmophagous -plasmophagy -plasmoptysis -plasmosoma -plasmosome -plasmotomy -plasome -plass -plasson -plastein -plaster -plasterbill -plasterboard -plasterer -plasteriness -plastering -plasterlike -plasterwise -plasterwork -plastery -plastic -plastically -plasticimeter -plasticine -plasticism -plasticity -plasticization -plasticize -plasticizer -plasticly -plastics -plastid -plastidium -plastidome -plastidular -plastidule -plastify -plastin -plastinoid -plastisol -plastochondria -plastochron -plastochrone -plastodynamia -plastodynamic -plastogamic -plastogamy -plastogene -plastomere -plastometer -plastosome -plastotype -plastral -plastron -plastrum -plat -plataleiform -plataleine -platan -platanaceous -platane -platanist -platano -platband -platch -plate -platea -plateasm -plateau -plateaux -plated -plateful -plateholder -plateiasmus -platelayer -plateless -platelet -platelike -platemaker -platemaking -plateman -platen -plater -platerer -plateresque -platery -plateway -platework -plateworker -platform -platformally -platformed -platformer -platformish -platformism -platformist -platformistic -platformless -platformy -platic -platicly -platilla -platina -platinamine -platinammine -platinate -plating -platinic -platinichloric -platinichloride -platiniferous -platiniridium -platinite -platinization -platinize -platinochloric -platinochloride -platinocyanic -platinocyanide -platinoid -platinotype -platinous -platinum -platinumsmith -platitude -platitudinal -platitudinarian -platitudinarianism -platitudinism -platitudinist -platitudinization -platitudinize -platitudinizer -platitudinous -platitudinously -platitudinousness -platode -platoid -platonesque -platoon -platopic -platosamine -platosammine -platted -platten -platter -platterface -platterful -platting -plattnerite -platty -platurous -platy -platybasic -platybrachycephalic -platybrachycephalous -platybregmatic -platycarpous -platycelian -platycelous -platycephalic -platycephalism -platycephaloid -platycephalous -platycephaly -platycercine -platycheiria -platycnemia -platycnemic -platycoria -platycrania -platycranial -platycyrtean -platydactyl -platydactyle -platydactylous -platydolichocephalic -platydolichocephalous -platyfish -platyglossal -platyglossate -platyglossia -platyhelminth -platyhelminthic -platyhieric -platykurtic -platylobate -platymeria -platymeric -platymery -platymesaticephalic -platymesocephalic -platymeter -platymyoid -platynite -platynotal -platyodont -platyope -platyopia -platyopic -platypellic -platypetalous -platyphyllous -platypod -platypodia -platypodous -platypus -platypygous -platyrhynchous -platyrrhin -platyrrhine -platyrrhinian -platyrrhinic -platyrrhinism -platyrrhiny -platysma -platysmamyoides -platysomid -platystaphyline -platystencephalia -platystencephalic -platystencephalism -platystencephaly -platysternal -platystomous -platytrope -platytropy -plaud -plaudation -plaudit -plaudite -plauditor -plauditory -plauenite -plausibility -plausible -plausibleness -plausibly -plausive -plaustral -play -playa -playability -playable -playback -playbill -playbook -playbox -playboy -playboyism -playbroker -playcraft -playcraftsman -playday -playdown -player -playerdom -playeress -playfellow -playfellowship -playfield -playfolk -playful -playfully -playfulness -playgoer -playgoing -playground -playhouse -playingly -playless -playlet -playlike -playmaker -playmaking -playman -playmare -playmate -playmonger -playmongering -playock -playpen -playreader -playroom -playscript -playsome -playsomely -playsomeness -playstead -plaything -playtime -playward -playwoman -playwork -playwright -playwrightess -playwrighting -playwrightry -playwriter -playwriting -plaza -plazolite -plea -pleach -pleached -pleacher -plead -pleadable -pleadableness -pleader -pleading -pleadingly -pleadingness -pleaproof -pleasable -pleasableness -pleasance -pleasant -pleasantable -pleasantish -pleasantly -pleasantness -pleasantry -pleasantsome -please -pleasedly -pleasedness -pleaseman -pleaser -pleaship -pleasing -pleasingly -pleasingness -pleasurability -pleasurable -pleasurableness -pleasurably -pleasure -pleasureful -pleasurehood -pleasureless -pleasurelessly -pleasureman -pleasurement -pleasuremonger -pleasureproof -pleasurer -pleasuring -pleasurist -pleasurous -pleat -pleater -pleatless -pleb -plebe -plebeian -plebeiance -plebeianize -plebeianly -plebeianness -plebeity -plebianism -plebicolar -plebicolist -plebificate -plebification -plebify -plebiscitarian -plebiscitarism -plebiscitary -plebiscite -plebiscitic -plebiscitum -plebs -pleck -plecopteran -plecopterid -plecopterous -plecotine -plectognath -plectognathic -plectognathous -plectopter -plectopteran -plectopterous -plectospondyl -plectospondylous -plectre -plectridial -plectridium -plectron -plectrum -pled -pledge -pledgeable -pledgee -pledgeless -pledgeor -pledger -pledgeshop -pledget -pledgor -plegaphonia -plegometer -pleiobar -pleiochromia -pleiochromic -pleiomastia -pleiomazia -pleiomerous -pleiomery -pleion -pleionian -pleiophyllous -pleiophylly -pleiotaxis -pleiotropic -pleiotropically -pleiotropism -pleistoseist -plemochoe -plemyrameter -plenarily -plenariness -plenarium -plenarty -plenary -plenicorn -pleniloquence -plenilunal -plenilunar -plenilunary -plenilune -plenipo -plenipotence -plenipotent -plenipotential -plenipotentiality -plenipotentiarily -plenipotentiarize -plenipotentiary -plenipotentiaryship -plenish -plenishing -plenishment -plenism -plenist -plenitide -plenitude -plenitudinous -plenshing -plenteous -plenteously -plenteousness -plentiful -plentifully -plentifulness -plentify -plenty -plenum -pleny -pleochroic -pleochroism -pleochroitic -pleochromatic -pleochromatism -pleochroous -pleocrystalline -pleodont -pleomastia -pleomastic -pleomazia -pleometrosis -pleometrotic -pleomorph -pleomorphic -pleomorphism -pleomorphist -pleomorphous -pleomorphy -pleon -pleonal -pleonasm -pleonast -pleonaste -pleonastic -pleonastical -pleonastically -pleonectic -pleonexia -pleonic -pleophyletic -pleopod -pleopodite -plerergate -plerocercoid -pleroma -pleromatic -plerome -pleromorph -plerophoric -plerophory -plerosis -plerotic -plesiobiosis -plesiobiotic -plesiomorphic -plesiomorphism -plesiomorphous -plesiosaur -plesiosaurian -plesiosauroid -plesiotype -plessigraph -plessimeter -plessimetric -plessimetry -plessor -plethodontid -plethora -plethoretic -plethoretical -plethoric -plethorical -plethorically -plethorous -plethory -plethysmograph -plethysmographic -plethysmographically -plethysmography -pleura -pleuracanthoid -pleural -pleuralgia -pleuralgic -pleurapophysial -pleurapophysis -pleurectomy -pleurenchyma -pleurenchymatous -pleuric -pleuriseptate -pleurisy -pleurite -pleuritic -pleuritical -pleuritically -pleuritis -pleurobranch -pleurobranchia -pleurobranchial -pleurobranchiate -pleurobronchitis -pleurocapsaceous -pleurocarp -pleurocarpous -pleurocele -pleurocentesis -pleurocentral -pleurocentrum -pleurocerebral -pleuroceroid -pleurococcaceous -pleurodiran -pleurodire -pleurodirous -pleurodiscous -pleurodont -pleurodynia -pleurodynic -pleurogenic -pleurogenous -pleurohepatitis -pleuroid -pleurolith -pleurolysis -pleuron -pleuronectid -pleuronectoid -pleuropedal -pleuropericardial -pleuropericarditis -pleuroperitonaeal -pleuroperitoneal -pleuroperitoneum -pleuropneumonia -pleuropneumonic -pleuropodium -pleuropterygian -pleuropulmonary -pleurorrhea -pleurospasm -pleurosteal -pleurostict -pleurothotonic -pleurothotonus -pleurotomarioid -pleurotomine -pleurotomoid -pleurotomy -pleurotonic -pleurotonus -pleurotribal -pleurotribe -pleurotropous -pleurotyphoid -pleurovisceral -pleurum -pleuston -pleustonic -plew -plex -plexal -plexicose -plexiform -pleximeter -pleximetric -pleximetry -plexodont -plexometer -plexor -plexure -plexus -pliability -pliable -pliableness -pliably -pliancy -pliant -pliantly -pliantness -plica -plicable -plical -plicate -plicated -plicately -plicateness -plicater -plicatile -plication -plicative -plicatocontorted -plicatocristate -plicatolacunose -plicatolobate -plicatopapillose -plicator -plicatoundulate -plicatulate -plicature -pliciferous -pliciform -plied -plier -plies -pliers -plight -plighted -plighter -plim -plimsoll -plinth -plinther -plinthiform -plinthless -plinthlike -pliosaur -pliosaurian -pliothermic -pliskie -plisky -ploat -ploce -ploceiform -plock -plod -plodder -plodderly -plodding -ploddingly -ploddingness -plodge -ploimate -plomb -plook -plop -ploration -ploratory -plosion -plosive -plot -plote -plotful -plotless -plotlessness -plotproof -plottage -plotted -plotter -plottery -plotting -plottingly -plotty -plough -ploughmanship -ploughtail -plouk -plouked -plouky -plounce -plousiocracy -plout -plouter -plover -ploverlike -plovery -plow -plowable -plowbote -plowboy -plower -plowfish -plowfoot -plowgang -plowgate -plowgraith -plowhead -plowing -plowjogger -plowland -plowlight -plowline -plowmaker -plowman -plowmanship -plowmell -plowpoint -plowshare -plowshoe -plowstaff -plowstilt -plowtail -plowwise -plowwoman -plowwright -ploy -ployment -pluck -pluckage -plucked -pluckedness -plucker -pluckily -pluckiness -pluckless -plucklessness -plucky -plud -pluff -pluffer -pluffy -plug -plugboard -plugdrawer -pluggable -plugged -plugger -plugging -pluggingly -pluggy -plughole -plugless -pluglike -plugman -plugtray -plugtree -plum -pluma -plumaceous -plumach -plumade -plumage -plumaged -plumagery -plumasite -plumate -plumatellid -plumatelloid -plumb -plumbable -plumbage -plumbaginaceous -plumbagine -plumbaginous -plumbago -plumbate -plumbean -plumbeous -plumber -plumbership -plumbery -plumbet -plumbic -plumbiferous -plumbing -plumbism -plumbisolvent -plumbite -plumbless -plumbness -plumbog -plumbojarosite -plumboniobate -plumbosolvency -plumbosolvent -plumbous -plumbum -plumcot -plumdamas -plumdamis -plume -plumed -plumeless -plumelet -plumelike -plumemaker -plumemaking -plumeopicean -plumeous -plumer -plumery -plumet -plumette -plumicorn -plumier -plumieride -plumification -plumiform -plumiformly -plumify -plumigerous -pluminess -plumiped -plumipede -plumist -plumless -plumlet -plumlike -plummer -plummet -plummeted -plummetless -plummy -plumose -plumosely -plumoseness -plumosity -plumous -plump -plumpen -plumper -plumping -plumpish -plumply -plumpness -plumps -plumpy -plumula -plumulaceous -plumular -plumularian -plumulate -plumule -plumuliform -plumulose -plumy -plunder -plunderable -plunderage -plunderbund -plunderer -plunderess -plundering -plunderingly -plunderless -plunderous -plunderproof -plunge -plunger -plunging -plungingly -plunk -plunther -plup -plupatriotic -pluperfect -pluperfectly -pluperfectness -plural -pluralism -pluralist -pluralistic -pluralistically -plurality -pluralization -pluralize -pluralizer -plurally -plurative -plurennial -pluriaxial -pluricarinate -pluricarpellary -pluricellular -pluricentral -pluricipital -pluricuspid -pluricuspidate -pluridentate -pluries -plurifacial -plurifetation -plurification -pluriflagellate -pluriflorous -plurifoliate -plurifoliolate -plurify -pluriglandular -pluriguttulate -plurilateral -plurilingual -plurilingualism -plurilingualist -plurilocular -plurimammate -plurinominal -plurinucleate -pluripara -pluriparity -pluriparous -pluripartite -pluripetalous -pluripotence -pluripotent -pluripresence -pluriseptate -pluriserial -pluriseriate -pluriseriated -plurisetose -plurispiral -plurisporous -plurisyllabic -plurisyllable -plurivalent -plurivalve -plurivorous -plurivory -plus -plush -plushed -plushette -plushily -plushiness -plushlike -plushy -plusquamperfect -plussage -plutarchy -pluteal -plutean -pluteiform -pluteus -plutocracy -plutocrat -plutocratic -plutocratical -plutocratically -plutolatry -plutological -plutologist -plutology -plutomania -plutonian -plutonic -plutonism -plutonist -plutonite -plutonium -plutonometamorphism -plutonomic -plutonomist -plutonomy -pluvial -pluvialiform -pluvialine -pluvian -pluvine -pluviograph -pluviographic -pluviographical -pluviography -pluviometer -pluviometric -pluviometrical -pluviometrically -pluviometry -pluvioscope -pluviose -pluviosity -pluvious -ply -plyer -plying -plyingly -plywood -pneodynamics -pneograph -pneomanometer -pneometer -pneometry -pneophore -pneoscope -pneuma -pneumarthrosis -pneumathaemia -pneumatic -pneumatical -pneumatically -pneumaticity -pneumatics -pneumatism -pneumatist -pneumatize -pneumatized -pneumatocardia -pneumatocele -pneumatochemical -pneumatochemistry -pneumatocyst -pneumatocystic -pneumatode -pneumatogenic -pneumatogenous -pneumatogram -pneumatograph -pneumatographer -pneumatographic -pneumatography -pneumatolitic -pneumatologic -pneumatological -pneumatologist -pneumatology -pneumatolysis -pneumatolytic -pneumatometer -pneumatometry -pneumatomorphic -pneumatonomy -pneumatophany -pneumatophilosophy -pneumatophobia -pneumatophonic -pneumatophony -pneumatophore -pneumatophorous -pneumatorrhachis -pneumatoscope -pneumatosic -pneumatosis -pneumatotactic -pneumatotherapeutics -pneumatotherapy -pneumaturia -pneumectomy -pneumobacillus -pneumocele -pneumocentesis -pneumochirurgia -pneumococcal -pneumococcemia -pneumococcic -pneumococcous -pneumococcus -pneumoconiosis -pneumoderma -pneumodynamic -pneumodynamics -pneumoencephalitis -pneumoenteritis -pneumogastric -pneumogram -pneumograph -pneumographic -pneumography -pneumohemothorax -pneumohydropericardium -pneumohydrothorax -pneumolith -pneumolithiasis -pneumological -pneumology -pneumolysis -pneumomalacia -pneumomassage -pneumomycosis -pneumonalgia -pneumonectasia -pneumonectomy -pneumonedema -pneumonia -pneumonic -pneumonitic -pneumonitis -pneumonocace -pneumonocarcinoma -pneumonocele -pneumonocentesis -pneumonocirrhosis -pneumonoconiosis -pneumonodynia -pneumonoenteritis -pneumonoerysipelas -pneumonographic -pneumonography -pneumonokoniosis -pneumonolith -pneumonolithiasis -pneumonolysis -pneumonomelanosis -pneumonometer -pneumonomycosis -pneumonoparesis -pneumonopathy -pneumonopexy -pneumonophorous -pneumonophthisis -pneumonopleuritis -pneumonorrhagia -pneumonorrhaphy -pneumonosis -pneumonotherapy -pneumonotomy -pneumony -pneumopericardium -pneumoperitoneum -pneumoperitonitis -pneumopexy -pneumopleuritis -pneumopyothorax -pneumorrachis -pneumorrhachis -pneumorrhagia -pneumotactic -pneumotherapeutics -pneumotherapy -pneumothorax -pneumotomy -pneumotoxin -pneumotropic -pneumotropism -pneumotyphoid -pneumotyphus -pneumoventriculography -po -poaceous -poach -poachable -poacher -poachiness -poachy -poalike -pob -pobby -poblacion -pobs -pochade -pochard -pochay -poche -pochette -pocilliform -pock -pocket -pocketable -pocketableness -pocketbook -pocketed -pocketer -pocketful -pocketing -pocketknife -pocketless -pocketlike -pockety -pockhouse -pockily -pockiness -pockmanteau -pockmantie -pockmark -pockweed -pockwood -pocky -poco -pococurante -pococuranteism -pococurantic -pococurantish -pococurantism -pococurantist -pocosin -poculary -poculation -poculent -poculiform -pod -podagra -podagral -podagric -podagrical -podagrous -podal -podalgia -podalic -podargine -podargue -podarthral -podarthritis -podarthrum -podatus -podaxonial -podded -podder -poddidge -poddish -poddle -poddy -podelcoma -podeon -podesta -podesterate -podetiiform -podetium -podex -podge -podger -podgily -podginess -podgy -podial -podiatrist -podiatry -podical -podices -podilegous -podite -poditic -poditti -podium -podler -podley -podlike -podobranch -podobranchia -podobranchial -podobranchiate -podocarp -podocarpous -podocephalous -pododerm -pododynia -podogyn -podogyne -podogynium -podolite -podology -podomancy -podomere -podometer -podometry -podophthalmate -podophthalmatous -podophthalmian -podophthalmic -podophthalmite -podophthalmitic -podophthalmous -podophyllic -podophyllin -podophyllotoxin -podophyllous -podophyllum -podoscaph -podoscapher -podoscopy -podosomatous -podosperm -podostemaceous -podostemad -podostemonaceous -podostomatous -podotheca -podothecal -podsol -podsolic -podsolization -podsolize -poduran -podurid -podware -podzol -podzolic -podzolization -podzolize -poe -poecilitic -poecilocyttarous -poecilogonous -poecilogony -poecilomere -poecilonym -poecilonymic -poecilonymy -poecilopod -poecilopodous -poem -poematic -poemet -poemlet -poephagous -poesie -poesiless -poesis -poesy -poet -poetaster -poetastering -poetasterism -poetastery -poetastress -poetastric -poetastrical -poetastry -poetcraft -poetdom -poetesque -poetess -poethood -poetic -poetical -poeticality -poetically -poeticalness -poeticism -poeticize -poeticness -poetics -poeticule -poetito -poetization -poetize -poetizer -poetless -poetlike -poetling -poetly -poetomachia -poetress -poetry -poetryless -poetship -poetwise -pogamoggan -pogge -poggy -pogoniasis -pogoniate -pogonion -pogonip -pogoniris -pogonite -pogonological -pogonologist -pogonology -pogonotomy -pogonotrophy -pogrom -pogromist -pogromize -pogy -poh -poha -pohickory -pohna -pohutukawa -poi -poietic -poignance -poignancy -poignant -poignantly -poignet -poikilitic -poikiloblast -poikiloblastic -poikilocyte -poikilocythemia -poikilocytosis -poikilotherm -poikilothermic -poikilothermism -poil -poilu -poimenic -poimenics -poind -poindable -poinder -poinding -point -pointable -pointage -pointed -pointedly -pointedness -pointel -pointer -pointful -pointfully -pointfulness -pointillism -pointillist -pointing -pointingly -pointless -pointlessly -pointlessness -pointlet -pointleted -pointmaker -pointman -pointment -pointrel -pointsman -pointswoman -pointways -pointwise -pointy -poisable -poise -poised -poiser -poison -poisonable -poisonful -poisonfully -poisoning -poisonless -poisonlessness -poisonmaker -poisonous -poisonously -poisonousness -poisonproof -poisonweed -poisonwood -poitrail -poitrel -poivrade -pokable -poke -pokeberry -poked -pokeful -pokeloken -pokeout -poker -pokerish -pokerishly -pokerishness -pokeroot -pokeweed -pokey -pokily -pokiness -poking -pokomoo -pokunt -poky -pol -polacca -polack -polacre -polar -polaric -polarigraphic -polarimeter -polarimetric -polarimetry -polariscope -polariscopic -polariscopically -polariscopist -polariscopy -polaristic -polaristrobometer -polarity -polarizability -polarizable -polarization -polarize -polarizer -polarly -polarogram -polarograph -polarographic -polarographically -polarography -polarward -polaxis -poldavis -poldavy -polder -polderboy -polderman -pole -polearm -poleax -poleaxe -poleaxer -poleburn -polecat -polehead -poleless -poleman -polemarch -polemic -polemical -polemically -polemician -polemicist -polemics -polemist -polemize -polemoniaceous -polemoscope -polenta -poler -polesetter -polesman -polestar -poleward -polewards -poley -poliad -poliadic -polianite -police -policed -policedom -policeless -policeman -policemanish -policemanism -policemanlike -policemanship -policewoman -policial -policize -policizer -policlinic -policy -policyholder -poliencephalitis -poliencephalomyelitis -poligar -poligarship -poligraphical -polio -polioencephalitis -polioencephalomyelitis -poliomyelitis -poliomyelopathy -polioneuromere -poliorcetic -poliorcetics -poliosis -polis -polish -polishable -polished -polishedly -polishedness -polisher -polishment -polisman -polissoir -politarch -politarchic -polite -politeful -politely -politeness -politesse -politic -political -politicalism -politicalize -politically -politicaster -politician -politicious -politicist -politicize -politicizer -politicly -politico -politicomania -politicophobia -politics -politied -politist -politize -polity -politzerization -politzerize -polk -polka -poll -pollable -pollack -polladz -pollage -pollakiuria -pollam -pollan -pollarchy -pollard -pollbook -polled -pollen -pollened -polleniferous -pollenigerous -pollenite -pollenivorous -pollenless -pollenlike -pollenproof -pollent -poller -polleten -pollex -pollical -pollicar -pollicate -pollicitation -pollinar -pollinarium -pollinate -pollination -pollinator -pollinctor -pollincture -polling -pollinia -pollinic -pollinical -polliniferous -pollinigerous -pollinium -pollinivorous -pollinization -pollinize -pollinizer -pollinodial -pollinodium -pollinoid -pollinose -pollinosis -polliwig -polliwog -pollock -polloi -pollster -pollucite -pollutant -pollute -polluted -pollutedly -pollutedness -polluter -polluting -pollutingly -pollution -pollux -pollywog -polo -poloconic -polocyte -poloist -polonaise -polonium -polony -polos -polska -polt -poltergeist -poltfoot -poltfooted -poltina -poltinnik -poltophagic -poltophagist -poltophagy -poltroon -poltroonery -poltroonish -poltroonishly -poltroonism -poluphloisboic -poluphloisboiotatotic -poluphloisboiotic -polverine -poly -polyacanthus -polyacid -polyacoustic -polyacoustics -polyact -polyactinal -polyactine -polyad -polyadelph -polyadelphian -polyadelphous -polyadenia -polyadenitis -polyadenoma -polyadenous -polyadic -polyaffectioned -polyalcohol -polyamide -polyamylose -polyandria -polyandrian -polyandrianism -polyandric -polyandrious -polyandrism -polyandrist -polyandrium -polyandrous -polyandry -polyangular -polyantha -polyanthous -polyanthus -polyanthy -polyarch -polyarchal -polyarchical -polyarchist -polyarchy -polyarteritis -polyarthric -polyarthritic -polyarthritis -polyarthrous -polyarticular -polyatomic -polyatomicity -polyautographic -polyautography -polyaxial -polyaxon -polyaxone -polyaxonic -polybasic -polybasicity -polybasite -polyblast -polyborine -polybranch -polybranchian -polybranchiate -polybromid -polybromide -polybunous -polybuny -polybuttoned -polycarboxylic -polycarpellary -polycarpic -polycarpous -polycarpy -polycellular -polycentral -polycentric -polycephalic -polycephalous -polycephaly -polychaete -polychaetous -polychasial -polychasium -polychloride -polychoerany -polychord -polychotomous -polychotomy -polychrest -polychrestic -polychrestical -polychresty -polychroic -polychroism -polychromasia -polychromate -polychromatic -polychromatism -polychromatist -polychromatize -polychromatophil -polychromatophile -polychromatophilia -polychromatophilic -polychrome -polychromia -polychromic -polychromism -polychromize -polychromous -polychromy -polychronious -polyciliate -polycitral -polyclad -polycladine -polycladose -polycladous -polyclady -polyclinic -polyclona -polycoccous -polyconic -polycormic -polycotyl -polycotyledon -polycotyledonary -polycotyledonous -polycotyledony -polycotylous -polycotyly -polycracy -polycrase -polycratic -polycrotic -polycrotism -polycrystalline -polyctenid -polycttarian -polycyanide -polycyclic -polycycly -polycyesis -polycystic -polycythemia -polycythemic -polydactyl -polydactyle -polydactylism -polydactylous -polydactyly -polydaemoniac -polydaemonism -polydaemonist -polydaemonistic -polydemic -polydenominational -polydental -polydermous -polydermy -polydigital -polydimensional -polydipsia -polydisperse -polydomous -polydymite -polydynamic -polyeidic -polyeidism -polyembryonate -polyembryonic -polyembryony -polyemia -polyemic -polyenzymatic -polyergic -polyester -polyesthesia -polyesthetic -polyethnic -polyethylene -polyfenestral -polyflorous -polyfoil -polyfold -polygalaceous -polygalic -polygam -polygamian -polygamic -polygamical -polygamically -polygamist -polygamistic -polygamize -polygamodioecious -polygamous -polygamously -polygamy -polyganglionic -polygastric -polygene -polygenesic -polygenesis -polygenesist -polygenetic -polygenetically -polygenic -polygenism -polygenist -polygenistic -polygenous -polygeny -polyglandular -polyglobulia -polyglobulism -polyglossary -polyglot -polyglotry -polyglottal -polyglottally -polyglotted -polyglotter -polyglottery -polyglottic -polyglottically -polyglottism -polyglottist -polyglottonic -polyglottous -polyglotwise -polyglycerol -polygon -polygonaceous -polygonal -polygonally -polygoneutic -polygoneutism -polygonic -polygonically -polygonoid -polygonous -polygony -polygram -polygrammatic -polygraph -polygrapher -polygraphic -polygraphy -polygroove -polygrooved -polygyn -polygynaiky -polygynian -polygynic -polygynious -polygynist -polygynoecial -polygynous -polygyny -polygyral -polygyria -polyhaemia -polyhaemic -polyhalide -polyhalite -polyhalogen -polyharmonic -polyharmony -polyhedral -polyhedric -polyhedrical -polyhedroid -polyhedron -polyhedrosis -polyhedrous -polyhemia -polyhidrosis -polyhistor -polyhistorian -polyhistoric -polyhistory -polyhybrid -polyhydric -polyhydroxy -polyideic -polyideism -polyidrosis -polyiodide -polykaryocyte -polylaminated -polylemma -polylepidous -polylinguist -polylith -polylithic -polylobular -polylogy -polyloquent -polymagnet -polymastia -polymastic -polymastigate -polymastigous -polymastism -polymastodont -polymasty -polymath -polymathic -polymathist -polymathy -polymazia -polymelia -polymelian -polymely -polymer -polymere -polymeria -polymeric -polymeride -polymerism -polymerization -polymerize -polymerous -polymetallism -polymetameric -polymeter -polymethylene -polymetochia -polymetochic -polymicrian -polymicrobial -polymicrobic -polymicroscope -polymignite -polymixiid -polymnite -polymolecular -polymolybdate -polymorph -polymorphean -polymorphic -polymorphism -polymorphistic -polymorphonuclear -polymorphonucleate -polymorphosis -polymorphous -polymorphy -polymyarian -polymyodian -polymyodous -polymyoid -polymyositis -polymythic -polymythy -polynaphthene -polynemid -polynemoid -polynesic -polyneural -polyneuric -polyneuritic -polyneuritis -polyneuropathy -polynodal -polynoid -polynome -polynomial -polynomialism -polynomialist -polynomic -polynucleal -polynuclear -polynucleate -polynucleated -polynucleolar -polynucleosis -polyodont -polyodontal -polyodontia -polyodontoid -polyoecious -polyoeciously -polyoeciousness -polyoecism -polyoecy -polyoicous -polyommatous -polyonomous -polyonomy -polyonychia -polyonym -polyonymal -polyonymic -polyonymist -polyonymous -polyonymy -polyophthalmic -polyopia -polyopic -polyopsia -polyopsy -polyorama -polyorchidism -polyorchism -polyorganic -polyose -polyoxide -polyoxymethylene -polyp -polypage -polypaged -polypapilloma -polyparasitic -polyparasitism -polyparesis -polyparia -polyparian -polyparium -polyparous -polypary -polypean -polyped -polypeptide -polypetal -polypetalous -polyphage -polyphagia -polyphagian -polyphagic -polyphagist -polyphagous -polyphagy -polyphalangism -polypharmacal -polypharmacist -polypharmacon -polypharmacy -polypharmic -polyphasal -polyphase -polyphaser -polyphemian -polyphemic -polyphemous -polyphenol -polyphloesboean -polyphloisboioism -polyphloisboism -polyphobia -polyphobic -polyphone -polyphoned -polyphonia -polyphonic -polyphonical -polyphonism -polyphonist -polyphonium -polyphonous -polyphony -polyphore -polyphosphoric -polyphotal -polyphote -polyphylesis -polyphyletic -polyphyletically -polyphylety -polyphylline -polyphyllous -polyphylly -polyphylogeny -polyphyly -polyphyodont -polypi -polypian -polypide -polypidom -polypiferous -polypigerous -polypinnate -polypite -polyplacophoran -polyplacophore -polyplacophorous -polyplastic -polyplegia -polyplegic -polyploid -polyploidic -polyploidy -polypnoea -polypnoeic -polypod -polypodia -polypodiaceous -polypodous -polypody -polypoid -polypoidal -polypomorphic -polyporaceous -polypore -polyporite -polyporoid -polyporous -polypose -polyposis -polypotome -polypous -polypragmacy -polypragmatic -polypragmatical -polypragmatically -polypragmatism -polypragmatist -polypragmaty -polypragmist -polypragmon -polypragmonic -polypragmonist -polyprene -polyprism -polyprismatic -polyprothetic -polyprotodont -polypseudonymous -polypsychic -polypsychical -polypsychism -polypterid -polypteroid -polyptote -polyptoton -polyptych -polypus -polyrhizal -polyrhizous -polyrhythmic -polyrhythmical -polysaccharide -polysaccharose -polysalicylide -polysarcia -polysarcous -polyschematic -polyschematist -polyscope -polyscopic -polysemant -polysemantic -polysemeia -polysemia -polysemous -polysemy -polysensuous -polysensuousness -polysepalous -polyseptate -polyserositis -polysided -polysidedness -polysilicate -polysilicic -polysiphonic -polysiphonous -polysomatic -polysomatous -polysomaty -polysomia -polysomic -polysomitic -polysomous -polysomy -polyspast -polyspaston -polyspermal -polyspermatous -polyspermia -polyspermic -polyspermous -polyspermy -polyspondylic -polyspondylous -polyspondyly -polysporangium -polyspore -polyspored -polysporic -polysporous -polystachyous -polystaurion -polystele -polystelic -polystemonous -polystichoid -polystichous -polystomatous -polystome -polystomium -polystylar -polystyle -polystylous -polystyrene -polysulphide -polysulphuration -polysulphurization -polysyllabic -polysyllabical -polysyllabically -polysyllabicism -polysyllabicity -polysyllabism -polysyllable -polysyllogism -polysyllogistic -polysymmetrical -polysymmetrically -polysymmetry -polysyndetic -polysyndetically -polysyndeton -polysynthesis -polysynthesism -polysynthetic -polysynthetical -polysynthetically -polysyntheticism -polysynthetism -polysynthetize -polytechnic -polytechnical -polytechnics -polytechnist -polyterpene -polythalamian -polythalamic -polythalamous -polythecial -polytheism -polytheist -polytheistic -polytheistical -polytheistically -polytheize -polythelia -polythelism -polythely -polythene -polythionic -polytitanic -polytocous -polytokous -polytoky -polytomous -polytomy -polytonal -polytonalism -polytonality -polytone -polytonic -polytony -polytope -polytopic -polytopical -polytrichaceous -polytrichia -polytrichous -polytrochal -polytrochous -polytrope -polytrophic -polytropic -polytungstate -polytungstic -polytype -polytypic -polytypical -polytypy -polyuresis -polyuria -polyuric -polyvalence -polyvalent -polyvinyl -polyvinylidene -polyvirulent -polyvoltine -polyzoal -polyzoan -polyzoarial -polyzoarium -polyzoary -polyzoic -polyzoism -polyzonal -polyzooid -polyzoon -polzenite -pom -pomace -pomacentrid -pomacentroid -pomaceous -pomade -pomander -pomane -pomarine -pomarium -pomate -pomato -pomatomid -pomatorhine -pomatum -pombe -pombo -pome -pomegranate -pomelo -pomeridian -pomerium -pomewater -pomey -pomfret -pomiculture -pomiculturist -pomiferous -pomiform -pomivorous -pomme -pommee -pommel -pommeled -pommeler -pommet -pommey -pommy -pomological -pomologically -pomologist -pomology -pomonal -pomonic -pomp -pompa -pompadour -pompal -pompano -pompelmous -pompey -pompholix -pompholygous -pompholyx -pomphus -pompier -pompilid -pompiloid -pompion -pompist -pompless -pompoleon -pompon -pomposity -pompous -pompously -pompousness -pompster -pomster -pon -ponce -ponceau -poncelet -poncho -ponchoed -pond -pondage -pondbush -ponder -ponderability -ponderable -ponderableness -ponderal -ponderance -ponderancy -ponderant -ponderary -ponderate -ponderation -ponderative -ponderer -pondering -ponderingly -ponderling -ponderment -ponderomotive -ponderosapine -ponderosity -ponderous -ponderously -ponderousness -pondfish -pondful -pondgrass -pondlet -pondman -pondok -pondokkie -pondside -pondus -pondweed -pondwort -pondy -pone -ponent -ponerid -ponerine -poneroid -ponerology -poney -pong -ponga -pongee -poniard -ponica -ponier -ponja -pont -pontage -pontal -pontederiaceous -pontee -pontes -pontianak -pontic -ponticello -ponticular -ponticulus -pontifex -pontiff -pontific -pontifical -pontificalia -pontificalibus -pontificality -pontifically -pontificate -pontification -pontifices -pontificial -pontificially -pontificious -pontify -pontil -pontile -pontin -pontine -pontist -pontlevis -ponto -pontocerebellar -ponton -pontonier -pontoon -pontooneer -pontooner -pontooning -pontvolant -pony -ponzite -pooa -pooch -pooder -poodle -poodledom -poodleish -poodleship -poof -poogye -pooh -poohpoohist -pook -pooka -pookaun -pookoo -pool -pooler -pooli -poolroom -poolroot -poolside -poolwort -pooly -poon -poonac -poonga -poonghie -poop -pooped -poophyte -poophytic -poor -poorhouse -poorish -poorliness -poorling -poorly -poorlyish -poormaster -poorness -poorweed -poorwill -poot -pop -popadam -popal -popcorn -popdock -pope -popedom -popeholy -popehood -popeism -popeler -popeless -popelike -popeline -popely -popery -popeship -popess -popeye -popeyed -popglove -popgun -popgunner -popgunnery -popify -popinac -popinjay -popish -popishly -popishness -popjoy -poplar -poplared -poplin -poplinette -popliteal -popliteus -poplolly -popomastic -popover -poppa -poppability -poppable -poppean -poppel -popper -poppet -poppethead -poppied -poppin -popple -popply -poppy -poppycock -poppycockish -poppyfish -poppyhead -poppylike -poppywort -popshop -populace -popular -popularism -popularity -popularization -popularize -popularizer -popularly -popularness -populate -population -populational -populationist -populationistic -populationless -populator -populicide -populin -populous -populously -populousness -popweed -poral -porbeagle -porcate -porcated -porcelain -porcelainization -porcelainize -porcelainlike -porcelainous -porcelaneous -porcelanic -porcelanite -porcelanous -porcellanian -porcellanid -porcellanize -porch -porched -porching -porchless -porchlike -porcine -porcupine -porcupinish -pore -pored -porelike -porencephalia -porencephalic -porencephalitis -porencephalon -porencephalous -porencephalus -porencephaly -porer -porge -porger -porgy -poricidal -poriferal -poriferan -poriferous -poriform -porimania -poriness -poring -poringly -poriomanic -porism -porismatic -porismatical -porismatically -poristic -poristical -porite -poritoid -pork -porkburger -porker -porkery -porket -porkfish -porkish -porkless -porkling -porkman -porkpie -porkwood -porky -pornerastic -pornocracy -pornocrat -pornograph -pornographer -pornographic -pornographically -pornographist -pornography -pornological -porodine -porodite -porogam -porogamic -porogamous -porogamy -porokaiwhiria -porokeratosis -poroma -porometer -porophyllous -poroplastic -poroporo -pororoca -poros -poroscope -poroscopic -poroscopy -porose -poroseness -porosimeter -porosis -porosity -porotic -porotype -porous -porously -porousness -porpentine -porphine -porphyraceous -porphyratin -porphyria -porphyrian -porphyrin -porphyrine -porphyrinuria -porphyrion -porphyrite -porphyritic -porphyroblast -porphyroblastic -porphyrogene -porphyrogenite -porphyrogenitic -porphyrogenitism -porphyrogeniture -porphyrogenitus -porphyroid -porphyrophore -porphyrous -porphyry -porpitoid -porpoise -porpoiselike -porporate -porr -porraceous -porrect -porrection -porrectus -porret -porridge -porridgelike -porridgy -porriginous -porrigo -porringer -porriwiggle -porry -port -porta -portability -portable -portableness -portably -portage -portague -portahepatis -portail -portal -portaled -portalled -portalless -portamento -portance -portass -portatile -portative -portcrayon -portcullis -porteacid -ported -porteligature -portend -portendance -portendment -portension -portent -portention -portentosity -portentous -portentously -portentousness -porteous -porter -porterage -porteress -porterhouse -porterlike -porterly -portership -portfire -portfolio -portglaive -portglave -portgrave -porthole -porthook -porthors -porthouse -portia -portico -porticoed -portiere -portiered -portifory -portify -portio -portiomollis -portion -portionable -portional -portionally -portioner -portionist -portionize -portionless -portitor -portlast -portless -portlet -portligature -portlily -portliness -portly -portman -portmanmote -portmanteau -portmanteaux -portmantle -portmantologism -portment -portmoot -porto -portoise -portolan -portolano -portrait -portraitist -portraitlike -portraiture -portray -portrayable -portrayal -portrayer -portrayist -portrayment -portreeve -portreeveship -portress -portside -portsider -portsman -portuary -portugais -portulacaceous -portulan -portunian -portway -porty -porule -porulose -porulous -porus -porwigle -pory -posadaship -posca -pose -posement -poser -poseur -posey -posh -posing -posingly -posit -position -positional -positioned -positioner -positionless -positival -positive -positively -positiveness -positivism -positivist -positivistic -positivistically -positivity -positivize -positor -positron -positum -positure -posnet -posole -posologic -posological -posologist -posology -pospolite -poss -posse -posseman -possess -possessable -possessed -possessedly -possessedness -possessing -possessingly -possessingness -possession -possessional -possessionalism -possessionalist -possessionary -possessionate -possessioned -possessioner -possessionist -possessionless -possessionlessness -possessival -possessive -possessively -possessiveness -possessor -possessoress -possessorial -possessoriness -possessorship -possessory -posset -possibilism -possibilist -possibilitate -possibility -possible -possibleness -possibly -possum -possumwood -post -postabdomen -postabdominal -postable -postabortal -postacetabular -postadjunct -postage -postal -postallantoic -postally -postalveolar -postament -postamniotic -postanal -postanesthetic -postantennal -postaortic -postapoplectic -postappendicular -postarterial -postarthritic -postarticular -postarytenoid -postaspirate -postaspirated -postasthmatic -postatrial -postauditory -postauricular -postaxiad -postaxial -postaxially -postaxillary -postbag -postbaptismal -postbox -postboy -postbrachial -postbrachium -postbranchial -postbreakfast -postbronchial -postbuccal -postbulbar -postbursal -postcaecal -postcalcaneal -postcalcarine -postcanonical -postcardiac -postcardinal -postcarnate -postcarotid -postcart -postcartilaginous -postcatarrhal -postcava -postcaval -postcecal -postcenal -postcentral -postcentrum -postcephalic -postcerebellar -postcerebral -postcesarean -postcibal -postclassic -postclassical -postclassicism -postclavicle -postclavicula -postclavicular -postclimax -postclitellian -postclival -postcolon -postcolonial -postcolumellar -postcomitial -postcommissural -postcommissure -postcommunicant -postconceptive -postcondylar -postconfinement -postconnubial -postconsonantal -postcontact -postcontract -postconvalescent -postconvulsive -postcordial -postcornu -postcosmic -postcostal -postcoxal -postcritical -postcrural -postcubital -postdate -postdental -postdepressive -postdetermined -postdevelopmental -postdiagnostic -postdiaphragmatic -postdiastolic -postdicrotic -postdigestive -postdigital -postdiluvial -postdiluvian -postdiphtheric -postdiphtheritic -postdisapproved -postdisseizin -postdisseizor -postdoctoral -postdoctorate -postdural -postdysenteric -posted -posteen -postelection -postelementary -postembryonal -postembryonic -postemporal -postencephalitic -postencephalon -postenteral -postentry -postepileptic -poster -posterette -posteriad -posterial -posterior -posterioric -posteriorically -posterioristic -posterioristically -posteriority -posteriorly -posteriormost -posteriors -posteriorums -posterish -posterishness -posterist -posterity -posterize -postern -posteroclusion -posterodorsad -posterodorsal -posterodorsally -posteroexternal -posteroinferior -posterointernal -posterolateral -posteromedial -posteromedian -posteromesial -posteroparietal -posterosuperior -posterotemporal -posteroterminal -posteroventral -posteruptive -postesophageal -posteternity -postethmoid -postexilian -postexilic -postexist -postexistence -postexistency -postexistent -postface -postfact -postfebrile -postfemoral -postfetal -postfix -postfixal -postfixation -postfixed -postfixial -postflection -postflexion -postform -postfoveal -postfrontal -postfurca -postfurcal -postganglionic -postgangrenal -postgastric -postgeminum -postgenial -postgeniture -postglacial -postglenoid -postglenoidal -postgonorrheic -postgracile -postgraduate -postgrippal -posthabit -posthaste -posthemiplegic -posthemorrhagic -posthepatic -posthetomist -posthetomy -posthexaplaric -posthippocampal -posthitis -postholder -posthole -posthouse -posthumeral -posthumous -posthumously -posthumousness -posthumus -posthyoid -posthypnotic -posthypnotically -posthypophyseal -posthypophysis -posthysterical -postic -postical -postically -posticous -posticteric -posticum -postil -postilion -postilioned -postillate -postillation -postillator -postimpressionism -postimpressionist -postimpressionistic -postinfective -postinfluenzal -posting -postingly -postintestinal -postique -postischial -postjacent -postjugular -postlabial -postlachrymal -postlaryngeal -postlegitimation -postlenticular -postless -postlike -postliminary -postliminiary -postliminious -postliminium -postliminous -postliminy -postloitic -postloral -postlude -postludium -postluetic -postmalarial -postmamillary -postmammary -postman -postmandibular -postmaniacal -postmarital -postmark -postmarriage -postmaster -postmasterlike -postmastership -postmastoid -postmaturity -postmaxillary -postmaximal -postmeatal -postmedia -postmedial -postmedian -postmediastinal -postmediastinum -postmedullary -postmeiotic -postmeningeal -postmenstrual -postmental -postmeridian -postmeridional -postmesenteric -postmillenarian -postmillenarianism -postmillennial -postmillennialism -postmillennialist -postmillennian -postmineral -postmistress -postmortal -postmortuary -postmundane -postmuscular -postmutative -postmycotic -postmyxedematous -postnarial -postnaris -postnasal -postnatal -postnate -postnati -postnecrotic -postnephritic -postneural -postneuralgic -postneuritic -postneurotic -postnodular -postnominal -postnotum -postnuptial -postnuptially -postobituary -postocular -postolivary -postomental -postoperative -postoptic -postoral -postorbital -postordination -postorgastic -postosseous -postotic -postpagan -postpaid -postpalatal -postpalatine -postpalpebral -postpaludal -postparalytic -postparietal -postparotid -postparotitic -postparoxysmal -postparturient -postpatellar -postpathological -postpericardial -postpharyngeal -postphlogistic -postphragma -postphrenic -postphthisic -postpituitary -postplace -postplegic -postpneumonic -postponable -postpone -postponement -postponence -postponer -postpontile -postpose -postposited -postposition -postpositional -postpositive -postpositively -postprandial -postprandially -postpredicament -postprophesy -postprostate -postpubertal -postpubescent -postpubic -postpubis -postpuerperal -postpulmonary -postpupillary -postpycnotic -postpyloric -postpyramidal -postpyretic -postrachitic -postramus -postrectal -postreduction -postremogeniture -postremote -postrenal -postresurrection -postresurrectional -postretinal -postrheumatic -postrhinal -postrider -postrorse -postrostral -postrubeolar -postsaccular -postsacral -postscalenus -postscapula -postscapular -postscapularis -postscarlatinal -postscenium -postscorbutic -postscribe -postscript -postscriptum -postscutellar -postscutellum -postseason -postsigmoid -postsign -postspasmodic -postsphenoid -postsphenoidal -postsphygmic -postspinous -postsplenial -postsplenic -poststernal -poststertorous -postsuppurative -postsurgical -postsynaptic -postsynsacral -postsyphilitic -postsystolic -posttabetic -posttarsal -posttetanic -postthalamic -postthoracic -postthyroidal -posttibial -posttonic -posttoxic -posttracheal -posttrapezoid -posttraumatic -posttreaty -posttubercular -posttussive -posttympanic -posttyphoid -postulancy -postulant -postulantship -postulata -postulate -postulation -postulational -postulator -postulatory -postulatum -postulnar -postumbilical -postumbonal -postural -posture -posturer -postureteric -posturist -posturize -postuterine -postvaccinal -postvaricellar -postvarioloid -postvelar -postvenereal -postvenous -postverbal -postvertebral -postvesical -postvide -postvocalic -postwar -postward -postwise -postwoman -postxyphoid -postyard -postzygapophysial -postzygapophysis -posy -pot -potability -potable -potableness -potagerie -potagery -potamic -potamogetonaceous -potamological -potamologist -potamology -potamometer -potamophilous -potamoplankton -potash -potashery -potass -potassa -potassamide -potassic -potassiferous -potassium -potate -potation -potative -potato -potatoes -potator -potatory -potbank -potbellied -potbelly -potboil -potboiler -potboy -potboydom -potch -potcher -potcherman -potcrook -potdar -pote -potecary -poteen -potence -potency -potent -potentacy -potentate -potential -potentiality -potentialization -potentialize -potentially -potentialness -potentiate -potentiation -potentiometer -potentiometric -potentize -potently -potentness -poter -potestal -potestas -potestate -potestative -poteye -potful -potgirl -potgun -pothanger -pothead -pothecary -potheen -pother -potherb -potherment -pothery -pothole -pothook -pothookery -pothouse -pothousey -pothunt -pothunter -pothunting -poticary -potichomania -potichomanist -potifer -potion -potlatch -potleg -potlicker -potlid -potlike -potluck -potmaker -potmaking -potman -potomania -potomato -potometer -potong -potoo -potoroo -potpie -potpourri -potrack -potsherd -potshoot -potshooter -potstick -potstone -pott -pottage -pottagy -pottah -potted -potter -potterer -potteress -potteringly -pottery -potting -pottinger -pottle -pottled -potto -potty -potwaller -potwalling -potware -potwhisky -potwork -potwort -pouce -poucer -poucey -pouch -pouched -pouchful -pouchless -pouchlike -pouchy -poudrette -pouf -poulaine -poulard -poulardize -poulp -poulpe -poult -poulter -poulterer -poulteress -poultice -poulticewise -poultry -poultrydom -poultryist -poultryless -poultrylike -poultryman -poultryproof -pounamu -pounce -pounced -pouncer -pouncet -pouncing -pouncingly -pound -poundage -poundal -poundcake -pounder -pounding -poundkeeper -poundless -poundlike -poundman -poundmaster -poundmeal -poundstone -poundworth -pour -pourer -pourie -pouring -pouringly -pourparler -pourparley -pourpiece -pourpoint -pourpointer -pouser -poussette -pout -pouter -poutful -pouting -poutingly -pouty -poverish -poverishment -poverty -povertyweed -pow -powder -powderable -powdered -powderer -powderiness -powdering -powderization -powderize -powderizer -powderlike -powderman -powdery -powdike -powdry -powellite -power -powerboat -powered -powerful -powerfully -powerfulness -powerhouse -powerless -powerlessly -powerlessness -powermonger -powitch -powldoody -pownie -powsoddy -powsowdy -powwow -powwower -powwowism -pox -poxy -poy -poyou -pozzolanic -pozzuolana -pozzuolanic -praam -prabble -prabhu -practic -practicability -practicable -practicableness -practicably -practical -practicalism -practicalist -practicality -practicalization -practicalize -practicalizer -practically -practicalness -practicant -practice -practiced -practicedness -practicer -practician -practicianism -practicum -practitional -practitioner -practitionery -prad -pradhana -praeabdomen -praeacetabular -praeanal -praecava -praecipe -praecipuum -praecoces -praecocial -praecognitum -praecoracoid -praecordia -praecordial -praecordium -praecornu -praecox -praecuneus -praedial -praedialist -praediality -praeesophageal -praefect -praefectorial -praefectus -praefervid -praefloration -praefoliation -praehallux -praelabrum -praelection -praelector -praelectorship -praelectress -praeludium -praemaxilla -praemolar -praemunire -praenarial -praeneural -praenomen -praenomina -praenominal -praeoperculum -praepositor -praepostor -praepostorial -praepubis -praepuce -praescutum -praesertim -praesidium -praesphenoid -praesternal -praesternum -praestomium -praesystolic -praetaxation -praetexta -praetor -praetorial -praetorian -praetorianism -praetorium -praetorship -praezygapophysis -pragmatic -pragmatica -pragmatical -pragmaticality -pragmatically -pragmaticalness -pragmaticism -pragmatics -pragmatism -pragmatist -pragmatistic -pragmatize -pragmatizer -prairie -prairiecraft -prairied -prairiedom -prairielike -prairieweed -prairillon -praisable -praisableness -praisably -praise -praiseful -praisefully -praisefulness -praiseless -praiseproof -praiser -praiseworthy -praising -praisingly -praisworthily -praisworthiness -prajna -prakriti -praline -pralltriller -pram -prana -prance -pranceful -prancer -prancing -prancingly -prancy -prandial -prandially -prank -pranked -pranker -prankful -prankfulness -pranking -prankingly -prankish -prankishly -prankishness -prankle -pranksome -pranksomeness -prankster -pranky -prase -praseocobaltic -praseodidymium -praseodymia -praseodymium -praseolite -prasine -prasinous -prasoid -prasophagous -prasophagy -prastha -prat -pratal -prate -prateful -pratement -pratensian -prater -pratey -pratfall -pratiloma -pratincole -pratincoline -pratincolous -prating -pratingly -pratique -pratiyasamutpada -prattfall -prattle -prattlement -prattler -prattling -prattlingly -prattly -prau -pravity -prawn -prawner -prawny -praxinoscope -praxiology -praxis -pray -praya -prayer -prayerful -prayerfully -prayerfulness -prayerless -prayerlessly -prayerlessness -prayermaker -prayermaking -prayerwise -prayful -praying -prayingly -prayingwise -preabdomen -preabsorb -preabsorbent -preabstract -preabundance -preabundant -preabundantly -preaccept -preacceptance -preaccess -preaccessible -preaccidental -preaccidentally -preaccommodate -preaccommodating -preaccommodatingly -preaccommodation -preaccomplish -preaccomplishment -preaccord -preaccordance -preaccount -preaccounting -preaccredit -preaccumulate -preaccumulation -preaccusation -preaccuse -preaccustom -preaccustomed -preacetabular -preach -preachable -preacher -preacherdom -preacheress -preacherize -preacherless -preacherling -preachership -preachieved -preachification -preachify -preachily -preachiness -preaching -preachingly -preachman -preachment -preachy -preacid -preacidity -preacidly -preacidness -preacknowledge -preacknowledgment -preacquaint -preacquaintance -preacquire -preacquired -preacquit -preacquittal -preact -preaction -preactive -preactively -preactivity -preacute -preacutely -preacuteness -preadamic -preadamite -preadamitic -preadamitical -preadamitism -preadapt -preadaptable -preadaptation -preaddition -preadditional -preaddress -preadequacy -preadequate -preadequately -preadhere -preadherence -preadherent -preadjectival -preadjective -preadjourn -preadjournment -preadjunct -preadjust -preadjustable -preadjustment -preadministration -preadministrative -preadministrator -preadmire -preadmirer -preadmission -preadmit -preadmonish -preadmonition -preadolescent -preadopt -preadoption -preadoration -preadore -preadorn -preadornment -preadult -preadulthood -preadvance -preadvancement -preadventure -preadvertency -preadvertent -preadvertise -preadvertisement -preadvice -preadvisable -preadvise -preadviser -preadvisory -preadvocacy -preadvocate -preaestival -preaffect -preaffection -preaffidavit -preaffiliate -preaffiliation -preaffirm -preaffirmation -preaffirmative -preafflict -preaffliction -preafternoon -preaged -preaggravate -preaggravation -preaggression -preaggressive -preagitate -preagitation -preagonal -preagony -preagree -preagreement -preagricultural -preagriculture -prealarm -prealcohol -prealcoholic -prealgebra -prealgebraic -prealkalic -preallable -preallably -preallegation -preallege -prealliance -preallied -preallot -preallotment -preallow -preallowable -preallowably -preallowance -preallude -preallusion -preally -prealphabet -prealphabetical -prealtar -prealteration -prealveolar -preamalgamation -preambassadorial -preambition -preambitious -preamble -preambled -preambling -preambular -preambulary -preambulate -preambulation -preambulatory -preanal -preanaphoral -preanesthetic -preanimism -preannex -preannounce -preannouncement -preannouncer -preantepenult -preantepenultimate -preanterior -preanticipate -preantiquity -preantiseptic -preaortic -preappearance -preapperception -preapplication -preappoint -preappointment -preapprehension -preapprise -preapprobation -preapproval -preapprove -preaptitude -prearm -prearrange -prearrangement -prearrest -prearrestment -prearticulate -preartistic -preascertain -preascertainment -preascitic -preaseptic -preassigned -preassume -preassurance -preassure -preataxic -preattachment -preattune -preaudience -preauditory -preaver -preavowal -preaxiad -preaxial -preaxially -prebachelor -prebacillary -prebake -prebalance -preballot -preballoting -prebankruptcy -prebaptismal -prebaptize -prebarbaric -prebarbarous -prebargain -prebasal -prebasilar -prebeleve -prebelief -prebeliever -prebelieving -prebellum -prebeloved -prebend -prebendal -prebendary -prebendaryship -prebendate -prebenediction -prebeneficiary -prebenefit -prebeset -prebestow -prebestowal -prebetray -prebetrayal -prebetrothal -prebid -prebidding -prebill -prebless -preblessing -preblockade -preblooming -preboast -preboding -preboil -preborn -preborrowing -preboyhood -prebrachial -prebrachium -prebreathe -prebridal -prebroadcasting -prebromidic -prebronchial -prebronze -prebrute -prebuccal -prebudget -prebudgetary -prebullying -preburlesque -preburn -precalculable -precalculate -precalculation -precampaign -precancel -precancellation -precancerous -precandidacy -precandidature -precanning -precanonical -precant -precantation -precanvass -precapillary -precapitalist -precapitalistic -precaptivity -precapture -precarcinomatous -precardiac -precaria -precarious -precariously -precariousness -precarium -precarnival -precartilage -precartilaginous -precary -precast -precation -precative -precatively -precatory -precaudal -precausation -precaution -precautional -precautionary -precautious -precautiously -precautiousness -precava -precaval -precedable -precede -precedence -precedency -precedent -precedentable -precedentary -precedented -precedential -precedentless -precedently -preceder -preceding -precelebrant -precelebrate -precelebration -precensure -precensus -precent -precentor -precentorial -precentorship -precentory -precentral -precentress -precentrix -precentrum -precept -preception -preceptist -preceptive -preceptively -preceptor -preceptoral -preceptorate -preceptorial -preceptorially -preceptorship -preceptory -preceptress -preceptual -preceptually -preceramic -precerebellar -precerebral -precerebroid -preceremonial -preceremony -precertification -precertify -preces -precess -precession -precessional -prechallenge -prechampioned -prechampionship -precharge -prechart -precheck -prechemical -precherish -prechildhood -prechill -prechloric -prechloroform -prechoice -prechoose -prechordal -prechoroid -preciation -precinct -precinction -precinctive -preciosity -precious -preciously -preciousness -precipe -precipice -precipiced -precipitability -precipitable -precipitance -precipitancy -precipitant -precipitantly -precipitantness -precipitate -precipitated -precipitatedly -precipitately -precipitation -precipitative -precipitator -precipitin -precipitinogen -precipitinogenic -precipitous -precipitously -precipitousness -precirculate -precirculation -precis -precise -precisely -preciseness -precisian -precisianism -precisianist -precision -precisional -precisioner -precisionism -precisionist -precisionize -precisive -precitation -precite -precited -precivilization -preclaim -preclaimant -preclaimer -preclassic -preclassical -preclassification -preclassified -preclassify -preclean -precleaner -precleaning -preclerical -preclimax -preclinical -preclival -precloacal -preclose -preclosure -preclothe -precludable -preclude -preclusion -preclusive -preclusively -precoagulation -precoccygeal -precocial -precocious -precociously -precociousness -precocity -precogitate -precogitation -precognition -precognitive -precognizable -precognizant -precognize -precognosce -precoil -precoiler -precoincidence -precoincident -precoincidently -precollapsable -precollapse -precollect -precollectable -precollection -precollector -precollege -precollegiate -precollude -precollusion -precollusive -precolor -precolorable -precoloration -precoloring -precombat -precombatant -precombination -precombine -precombustion -precommand -precommend -precomment -precommercial -precommissural -precommissure -precommit -precommune -precommunicate -precommunication -precommunion -precompare -precomparison -precompass -precompel -precompensate -precompensation -precompilation -precompile -precompiler -precompleteness -precompletion -precompliance -precompliant -precomplicate -precomplication -precompose -precomposition -precompound -precompounding -precompoundly -precomprehend -precomprehension -precomprehensive -precompress -precompulsion -precomradeship -preconceal -preconcealment -preconcede -preconceivable -preconceive -preconceived -preconcentrate -preconcentrated -preconcentratedly -preconcentration -preconcept -preconception -preconceptional -preconceptual -preconcern -preconcernment -preconcert -preconcerted -preconcertedly -preconcertedness -preconcertion -preconcertive -preconcession -preconcessive -preconclude -preconclusion -preconcur -preconcurrence -preconcurrent -preconcurrently -precondemn -precondemnation -precondensation -precondense -precondition -preconditioned -preconduct -preconduction -preconductor -precondylar -precondyloid -preconfer -preconference -preconfess -preconfession -preconfide -preconfiguration -preconfigure -preconfine -preconfinedly -preconfinemnt -preconfirm -preconfirmation -preconflict -preconform -preconformity -preconfound -preconfuse -preconfusedly -preconfusion -precongenial -precongested -precongestion -precongestive -precongratulate -precongratulation -precongressional -preconizance -preconization -preconize -preconizer -preconjecture -preconnection -preconnective -preconnubial -preconquer -preconquest -preconquestal -preconquestual -preconscious -preconsciously -preconsciousness -preconsecrate -preconsecration -preconsent -preconsider -preconsideration -preconsign -preconsolation -preconsole -preconsolidate -preconsolidated -preconsolidation -preconsonantal -preconspiracy -preconspirator -preconspire -preconstituent -preconstitute -preconstruct -preconstruction -preconsult -preconsultation -preconsultor -preconsume -preconsumer -preconsumption -precontact -precontain -precontained -precontemn -precontemplate -precontemplation -precontemporaneous -precontemporary -precontend -precontent -precontention -precontently -precontentment -precontest -precontinental -precontract -precontractive -precontractual -precontribute -precontribution -precontributive -precontrivance -precontrive -precontrol -precontrolled -precontroversial -precontroversy -preconvention -preconversation -preconversational -preconversion -preconvert -preconvey -preconveyal -preconveyance -preconvict -preconviction -preconvince -precook -precooker -precool -precooler -precooling -precopy -precoracoid -precordia -precordial -precordiality -precordially -precordium -precorneal -precornu -precoronation -precorrect -precorrection -precorrectly -precorrectness -precorrespond -precorrespondence -precorrespondent -precorridor -precorrupt -precorruption -precorruptive -precorruptly -precoruptness -precosmic -precosmical -precostal -precounsel -precounsellor -precourse -precover -precovering -precox -precreate -precreation -precreative -precredit -precreditor -precreed -precritical -precriticism -precriticize -precrucial -precrural -precrystalline -precultivate -precultivation -precultural -preculturally -preculture -precuneal -precuneate -precuneus -precure -precurrent -precurricular -precurriculum -precursal -precurse -precursive -precursor -precursory -precurtain -precut -precyclone -precyclonic -precynical -precyst -precystic -predable -predacean -predaceous -predaceousness -predacity -predamage -predamn -predamnation -predark -predarkness -predata -predate -predation -predatism -predative -predator -predatorily -predatoriness -predatory -predawn -preday -predaylight -predaytime -predazzite -predealer -predealing -predeath -predeathly -predebate -predebater -predebit -predebtor -predecay -predecease -predeceaser -predeceive -predeceiver -predeception -predecession -predecessor -predecessorship -predecide -predecision -predecisive -predeclaration -predeclare -predeclination -predecline -predecree -prededicate -prededuct -prededuction -predefault -predefeat -predefect -predefective -predefence -predefend -predefense -predefiance -predeficiency -predeficient -predefine -predefinite -predefinition -predefray -predefrayal -predefy -predegeneracy -predegenerate -predegree -predeication -predelay -predelegate -predelegation -predeliberate -predeliberately -predeliberation -predelineate -predelineation -predelinquency -predelinquent -predelinquently -predeliver -predelivery -predella -predelude -predelusion -predemand -predemocracy -predemocratic -predemonstrate -predemonstration -predemonstrative -predenial -predental -predentary -predentate -predeny -predepart -predepartmental -predeparture -predependable -predependence -predependent -predeplete -predepletion -predeposit -predepository -predepreciate -predepreciation -predepression -predeprivation -predeprive -prederivation -prederive -predescend -predescent -predescribe -predescription -predesert -predeserter -predesertion -predeserve -predeserving -predesign -predesignate -predesignation -predesignatory -predesirous -predesolate -predesolation -predespair -predesperate -predespicable -predespise -predespond -predespondency -predespondent -predestinable -predestinarian -predestinarianism -predestinate -predestinately -predestination -predestinational -predestinationism -predestinationist -predestinative -predestinator -predestine -predestiny -predestitute -predestitution -predestroy -predestruction -predetach -predetachment -predetail -predetain -predetainer -predetect -predetention -predeterminability -predeterminable -predeterminant -predeterminate -predeterminately -predetermination -predeterminative -predetermine -predeterminer -predeterminism -predeterministic -predetest -predetestation -predetrimental -predevelop -predevelopment -predevise -predevote -predevotion -predevour -prediagnosis -prediagnostic -predial -prediastolic -prediatory -predicability -predicable -predicableness -predicably -predicament -predicamental -predicamentally -predicant -predicate -predication -predicational -predicative -predicatively -predicator -predicatory -predicrotic -predict -predictability -predictable -predictably -predictate -predictation -prediction -predictional -predictive -predictively -predictiveness -predictor -predictory -prediet -predietary -predifferent -predifficulty -predigest -predigestion -predikant -predilect -predilected -predilection -prediligent -prediligently -prediluvial -prediluvian -prediminish -prediminishment -prediminution -predine -predinner -prediphtheritic -prediploma -prediplomacy -prediplomatic -predirect -predirection -predirector -predisability -predisable -predisadvantage -predisadvantageous -predisadvantageously -predisagree -predisagreeable -predisagreement -predisappointment -predisaster -predisastrous -prediscern -prediscernment -predischarge -prediscipline -predisclose -predisclosure -prediscontent -prediscontented -prediscontentment -prediscontinuance -prediscontinuation -prediscontinue -prediscount -prediscountable -prediscourage -prediscouragement -prediscourse -prediscover -prediscoverer -prediscovery -prediscreet -prediscretion -prediscretionary -prediscriminate -prediscrimination -prediscriminator -prediscuss -prediscussion -predisgrace -predisguise -predisgust -predislike -predismiss -predismissal -predismissory -predisorder -predisordered -predisorderly -predispatch -predispatcher -predisperse -predispersion -predisplace -predisplacement -predisplay -predisponency -predisponent -predisposable -predisposal -predispose -predisposed -predisposedly -predisposedness -predisposition -predispositional -predisputant -predisputation -predispute -predisregard -predisrupt -predisruption -predissatisfaction -predissolution -predissolve -predissuade -predistinct -predistinction -predistinguish -predistress -predistribute -predistribution -predistributor -predistrict -predistrust -predistrustful -predisturb -predisturbance -prediversion -predivert -predivide -predividend -predivider -predivinable -predivinity -predivision -predivorce -predivorcement -predoctorate -predocumentary -predomestic -predominance -predominancy -predominant -predominantly -predominate -predominately -predominatingly -predomination -predominator -predonate -predonation -predonor -predoom -predorsal -predoubt -predoubter -predoubtful -predraft -predrainage -predramatic -predraw -predrawer -predread -predreadnought -predrill -predriller -predrive -predriver -predry -preduplicate -preduplication -predusk -predwell -predynamite -predynastic -preen -preener -preeze -prefab -prefabricate -prefabrication -prefabricator -preface -prefaceable -prefacer -prefacial -prefacist -prefactor -prefactory -prefamiliar -prefamiliarity -prefamiliarly -prefamous -prefashion -prefatial -prefator -prefatorial -prefatorially -prefatorily -prefatory -prefavor -prefavorable -prefavorably -prefavorite -prefearful -prefearfully -prefeast -prefect -prefectly -prefectoral -prefectorial -prefectorially -prefectorian -prefectship -prefectual -prefectural -prefecture -prefecundation -prefecundatory -prefederal -prefelic -prefer -preferability -preferable -preferableness -preferably -preferee -preference -preferent -preferential -preferentialism -preferentialist -preferentially -preferment -prefermentation -preferred -preferredly -preferredness -preferrer -preferrous -prefertile -prefertility -prefertilization -prefertilize -prefervid -prefestival -prefeudal -prefeudalic -prefeudalism -prefiction -prefictional -prefigurate -prefiguration -prefigurative -prefiguratively -prefigurativeness -prefigure -prefigurement -prefiller -prefilter -prefinal -prefinance -prefinancial -prefine -prefinish -prefix -prefixable -prefixal -prefixally -prefixation -prefixed -prefixedly -prefixion -prefixture -preflagellate -preflatter -preflattery -preflavor -preflavoring -preflection -preflexion -preflight -preflood -prefloration -preflowering -prefoliation -prefool -preforbidden -preforceps -preforgive -preforgiveness -preforgotten -preform -preformant -preformation -preformationary -preformationism -preformationist -preformative -preformed -preformism -preformist -preformistic -preformulate -preformulation -prefortunate -prefortunately -prefortune -prefoundation -prefounder -prefragrance -prefragrant -prefrankness -prefraternal -prefraternally -prefraud -prefreeze -prefreshman -prefriendly -prefriendship -prefright -prefrighten -prefrontal -prefulfill -prefulfillment -prefulgence -prefulgency -prefulgent -prefunction -prefunctional -prefuneral -prefungoidal -prefurlough -prefurnish -pregain -pregainer -pregalvanize -preganglionic -pregather -pregathering -pregeminum -pregenerate -pregeneration -pregenerosity -pregenerous -pregenerously -pregenial -pregeniculatum -pregeniculum -pregenital -pregeological -pregirlhood -preglacial -pregladden -pregladness -preglenoid -preglenoidal -preglobulin -pregnability -pregnable -pregnance -pregnancy -pregnant -pregnantly -pregnantness -pregolden -pregolfing -pregracile -pregracious -pregrade -pregraduation -pregranite -pregranitic -pregratification -pregratify -pregreet -pregreeting -pregrievance -pregrowth -preguarantee -preguarantor -preguard -preguess -preguidance -preguide -preguilt -preguiltiness -preguilty -pregust -pregustant -pregustation -pregustator -pregustic -prehallux -prehalter -prehandicap -prehandle -prehaps -preharden -preharmonious -preharmoniousness -preharmony -preharsh -preharshness -preharvest -prehatred -prehaunt -prehaunted -prehaustorium -prehazard -prehazardous -preheal -prehearing -preheat -preheated -preheater -prehemiplegic -prehend -prehensible -prehensile -prehensility -prehension -prehensive -prehensiveness -prehensor -prehensorial -prehensory -prehepatic -prehepaticus -preheroic -prehesitancy -prehesitate -prehesitation -prehexameral -prehistorian -prehistoric -prehistorical -prehistorically -prehistorics -prehistory -prehnite -prehnitic -preholder -preholding -preholiday -prehorizon -prehorror -prehostile -prehostility -prehuman -prehumiliate -prehumiliation -prehumor -prehunger -prehydration -prehypophysis -preidea -preidentification -preidentify -preignition -preilluminate -preillumination -preillustrate -preillustration -preimage -preimaginary -preimagination -preimagine -preimbibe -preimbue -preimitate -preimitation -preimitative -preimmigration -preimpair -preimpairment -preimpart -preimperial -preimport -preimportance -preimportant -preimportantly -preimportation -preimposal -preimpose -preimposition -preimpress -preimpression -preimpressive -preimprove -preimprovement -preinaugural -preinaugurate -preincarnate -preincentive -preinclination -preincline -preinclude -preinclusion -preincorporate -preincorporation -preincrease -preindebted -preindebtedness -preindemnification -preindemnify -preindemnity -preindependence -preindependent -preindependently -preindesignate -preindicant -preindicate -preindication -preindispose -preindisposition -preinduce -preinducement -preinduction -preinductive -preindulge -preindulgence -preindulgent -preindustrial -preindustry -preinfect -preinfection -preinfer -preinference -preinflection -preinflectional -preinflict -preinfluence -preinform -preinformation -preinhabit -preinhabitant -preinhabitation -preinhere -preinherit -preinheritance -preinitial -preinitiate -preinitiation -preinjure -preinjurious -preinjury -preinquisition -preinscribe -preinscription -preinsert -preinsertion -preinsinuate -preinsinuating -preinsinuatingly -preinsinuation -preinsinuative -preinspect -preinspection -preinspector -preinspire -preinstall -preinstallation -preinstill -preinstillation -preinstruct -preinstruction -preinstructional -preinstructive -preinsula -preinsular -preinsulate -preinsulation -preinsult -preinsurance -preinsure -preintellectual -preintelligence -preintelligent -preintelligently -preintend -preintention -preintercede -preintercession -preinterchange -preintercourse -preinterest -preinterfere -preinterference -preinterpret -preinterpretation -preinterpretative -preinterview -preintone -preinvent -preinvention -preinventive -preinventory -preinvest -preinvestigate -preinvestigation -preinvestigator -preinvestment -preinvitation -preinvite -preinvocation -preinvolve -preinvolvement -preiotization -preiotize -preirrigation -preirrigational -preissuance -preissue -prejacent -prejournalistic -prejudge -prejudgement -prejudger -prejudgment -prejudication -prejudicative -prejudicator -prejudice -prejudiced -prejudicedly -prejudiceless -prejudiciable -prejudicial -prejudicially -prejudicialness -prejudicious -prejudiciously -prejunior -prejurisdiction -prejustification -prejustify -prejuvenile -prekindergarten -prekindle -preknit -preknow -preknowledge -prelabel -prelabial -prelabor -prelabrum -prelachrymal -prelacrimal -prelacteal -prelacy -prelanguage -prelapsarian -prelate -prelatehood -prelateship -prelatess -prelatial -prelatic -prelatical -prelatically -prelaticalness -prelation -prelatish -prelatism -prelatist -prelatize -prelatry -prelature -prelaunch -prelaunching -prelawful -prelawfully -prelawfulness -prelease -prelect -prelection -prelector -prelectorship -prelectress -prelecture -prelegacy -prelegal -prelegate -prelegatee -prelegend -prelegendary -prelegislative -preliability -preliable -prelibation -preliberal -preliberality -preliberally -preliberate -preliberation -prelicense -prelim -preliminarily -preliminary -prelimit -prelimitate -prelimitation -prelingual -prelinguistic -prelinpinpin -preliquidate -preliquidation -preliteral -preliterally -preliteralness -preliterary -preliterate -preliterature -prelithic -prelitigation -preloan -prelocalization -prelocate -prelogic -prelogical -preloral -preloreal -preloss -prelude -preluder -preludial -preludious -preludiously -preludium -preludize -prelumbar -prelusion -prelusive -prelusively -prelusorily -prelusory -preluxurious -premachine -premadness -premaintain -premaintenance -premake -premaker -premaking -premandibular -premanhood -premaniacal -premanifest -premanifestation -premankind -premanufacture -premanufacturer -premanufacturing -premarital -premarriage -premarry -premastery -prematch -premate -prematerial -prematernity -prematrimonial -prematuration -premature -prematurely -prematureness -prematurity -premaxilla -premaxillary -premeasure -premeasurement -premechanical -premedia -premedial -premedian -premedic -premedical -premedicate -premedication -premedieval -premedievalism -premeditate -premeditatedly -premeditatedness -premeditatingly -premeditation -premeditative -premeditator -premegalithic -prememorandum -premenace -premenstrual -premention -premeridian -premerit -premetallic -premethodical -premial -premiant -premiate -premidnight -premidsummer -premier -premieral -premiere -premieress -premierjus -premiership -premilitary -premillenarian -premillenarianism -premillennial -premillennialism -premillennialist -premillennialize -premillennially -premillennian -preminister -preministry -premious -premisal -premise -premisory -premisrepresent -premisrepresentation -premiss -premium -premix -premixer -premixture -premodel -premodern -premodification -premodify -premolar -premold -premolder -premolding -premonarchial -premonetary -premonish -premonishment -premonition -premonitive -premonitor -premonitorily -premonitory -premonopolize -premonopoly -premonumental -premoral -premorality -premorally -premorbid -premorbidly -premorbidness -premorning -premorse -premortal -premortification -premortify -premortuary -premosaic -premotion -premourn -premove -premovement -premover -premuddle -premultiplication -premultiplier -premultiply -premundane -premunicipal -premunition -premunitory -premusical -premuster -premutative -premutiny -premycotic -premyelocyte -premythical -prename -prenares -prenarial -prenaris -prenasal -prenatal -prenatalist -prenatally -prenational -prenative -prenatural -prenaval -prender -prendre -prenebular -prenecessitate -preneglect -preneglectful -prenegligence -prenegligent -prenegotiate -prenegotiation -preneolithic -prenephritic -preneural -preneuralgic -prenight -prenoble -prenodal -prenominal -prenominate -prenomination -prenominical -prenotation -prenotice -prenotification -prenotify -prenotion -prentice -prenticeship -prenumber -prenumbering -prenuncial -prenuptial -prenursery -preobedience -preobedient -preobject -preobjection -preobjective -preobligate -preobligation -preoblige -preobservance -preobservation -preobservational -preobserve -preobstruct -preobstruction -preobtain -preobtainable -preobtrude -preobtrusion -preobtrusive -preobviate -preobvious -preobviously -preobviousness -preoccasioned -preoccipital -preocclusion -preoccultation -preoccupancy -preoccupant -preoccupate -preoccupation -preoccupative -preoccupied -preoccupiedly -preoccupiedness -preoccupier -preoccupy -preoccur -preoccurrence -preoceanic -preocular -preodorous -preoffend -preoffense -preoffensive -preoffensively -preoffensiveness -preoffer -preoffering -preofficial -preofficially -preominate -preomission -preomit -preopen -preopening -preoperate -preoperation -preoperative -preoperatively -preoperator -preopercle -preopercular -preoperculum -preopinion -preopinionated -preoppose -preopposition -preoppress -preoppression -preoppressor -preoptic -preoptimistic -preoption -preoral -preorally -preorbital -preordain -preorder -preordination -preorganic -preorganization -preorganize -preoriginal -preoriginally -preornamental -preoutfit -preoutline -preoverthrow -prep -prepainful -prepalatal -prepalatine -prepaleolithic -prepanic -preparable -preparation -preparationist -preparative -preparatively -preparator -preparatorily -preparatory -prepardon -prepare -prepared -preparedly -preparedness -preparement -preparental -preparer -preparietal -preparingly -preparliamentary -preparoccipital -preparoxysmal -prepartake -preparticipation -prepartisan -prepartition -prepartnership -prepatellar -prepatent -prepatriotic -prepave -prepavement -prepay -prepayable -prepayment -prepeduncle -prepenetrate -prepenetration -prepenial -prepense -prepensely -prepeople -preperceive -preperception -preperceptive -preperitoneal -prepersuade -prepersuasion -prepersuasive -preperusal -preperuse -prepetition -prephragma -prephthisical -prepigmental -prepink -prepious -prepituitary -preplace -preplacement -preplacental -preplan -preplant -prepledge -preplot -prepoetic -prepoetical -prepoison -prepolice -prepolish -prepolitic -prepolitical -prepolitically -prepollence -prepollency -prepollent -prepollex -preponder -preponderance -preponderancy -preponderant -preponderantly -preponderate -preponderately -preponderating -preponderatingly -preponderation -preponderous -preponderously -prepontile -prepontine -preportray -preportrayal -prepose -preposition -prepositional -prepositionally -prepositive -prepositively -prepositor -prepositorial -prepositure -prepossess -prepossessed -prepossessing -prepossessingly -prepossessingness -prepossession -prepossessionary -prepossessor -preposterous -preposterously -preposterousness -prepostorship -prepotence -prepotency -prepotent -prepotential -prepotently -prepractical -prepractice -preprandial -prepreference -prepreparation -preprice -preprimary -preprimer -preprimitive -preprint -preprofess -preprofessional -preprohibition -prepromise -prepromote -prepromotion -prepronounce -prepronouncement -preprophetic -preprostatic -preprove -preprovide -preprovision -preprovocation -preprovoke -preprudent -preprudently -prepsychological -prepsychology -prepuberal -prepubertal -prepuberty -prepubescent -prepubic -prepubis -prepublication -prepublish -prepuce -prepunctual -prepunish -prepunishment -prepupa -prepupal -prepurchase -prepurchaser -prepurpose -preputial -preputium -prepyloric -prepyramidal -prequalification -prequalify -prequarantine -prequestion -prequotation -prequote -preracing -preradio -prerailroad -prerailroadite -prerailway -preramus -prerational -prereadiness -preready -prerealization -prerealize -prerebellion -prereceipt -prereceive -prereceiver -prerecital -prerecite -prereckon -prereckoning -prerecognition -prerecognize -prerecommend -prerecommendation -prereconcile -prereconcilement -prereconciliation -prerectal -preredeem -preredemption -prereduction -prerefer -prereference -prerefine -prerefinement -prereform -prereformation -prereformatory -prerefusal -prerefuse -preregal -preregister -preregistration -preregulate -preregulation -prereject -prerejection -prerejoice -prerelate -prerelation -prerelationship -prerelease -prereligious -prereluctation -preremit -preremittance -preremorse -preremote -preremoval -preremove -preremunerate -preremuneration -prerenal -prerent -prerental -prereport -prerepresent -prerepresentation -prereption -prerepublican -prerequest -prerequire -prerequirement -prerequisite -prerequisition -preresemblance -preresemble -preresolve -preresort -prerespectability -prerespectable -prerespiration -prerespire -preresponsibility -preresponsible -prerestoration -prerestrain -prerestraint -prerestrict -prerestriction -prereturn -prereveal -prerevelation -prerevenge -prereversal -prereverse -prereview -prerevise -prerevision -prerevival -prerevolutionary -prerheumatic -prerich -prerighteous -prerighteously -prerighteousness -prerogatival -prerogative -prerogatived -prerogatively -prerogativity -prerolandic -preromantic -preromanticism -preroute -preroutine -preroyal -preroyally -preroyalty -prerupt -preruption -presacral -presacrifice -presacrificial -presage -presageful -presagefully -presager -presagient -presaging -presagingly -presalvation -presanctification -presanctified -presanctify -presanguine -presanitary -presartorial -presatisfaction -presatisfactory -presatisfy -presavage -presavagery -presay -presbyacousia -presbyacusia -presbycousis -presbycusis -presbyope -presbyophrenia -presbyophrenic -presbyopia -presbyopic -presbyopy -presbyte -presbyter -presbyteral -presbyterate -presbyterated -presbyteress -presbyteria -presbyterial -presbyterially -presbyterium -presbytership -presbytery -presbytia -presbytic -presbytism -prescapula -prescapular -prescapularis -prescholastic -preschool -prescience -prescient -prescientific -presciently -prescind -prescindent -prescission -prescored -prescout -prescribable -prescribe -prescriber -prescript -prescriptibility -prescriptible -prescription -prescriptionist -prescriptive -prescriptively -prescriptiveness -prescriptorial -prescrive -prescutal -prescutum -preseal -presearch -preseason -preseasonal -presecular -presecure -presee -preselect -presell -preseminal -preseminary -presence -presenced -presenceless -presenile -presenility -presensation -presension -present -presentability -presentable -presentableness -presentably -presental -presentation -presentational -presentationism -presentationist -presentative -presentatively -presentee -presentence -presenter -presential -presentiality -presentially -presentialness -presentient -presentiment -presentimental -presentist -presentive -presentively -presentiveness -presently -presentment -presentness -presentor -preseparate -preseparation -preseparator -preservability -preservable -preserval -preservation -preservationist -preservative -preservatize -preservatory -preserve -preserver -preserveress -preses -presession -preset -presettle -presettlement -presexual -preshadow -preshape -preshare -presharpen -preshelter -preship -preshipment -preshortage -preshorten -preshow -preside -presidence -presidencia -presidency -president -presidente -presidentess -presidential -presidentially -presidentiary -presidentship -presider -presidial -presidially -presidiary -presidio -presidium -presift -presign -presignal -presignificance -presignificancy -presignificant -presignification -presignificative -presignificator -presignify -presimian -preslavery -presmooth -presocial -presocialism -presocialist -presolar -presolicit -presolicitation -presolution -presolve -presophomore -presound -prespecialist -prespecialize -prespecific -prespecifically -prespecification -prespecify -prespeculate -prespeculation -presphenoid -presphenoidal -presphygmic -prespinal -prespinous -prespiracular -presplendor -presplenomegalic -prespoil -prespontaneity -prespontaneous -prespontaneously -prespread -presprinkle -prespur -press -pressable -pressboard -pressdom -pressel -presser -pressfat -pressful -pressgang -pressible -pressing -pressingly -pressingness -pression -pressive -pressman -pressmanship -pressmark -pressor -presspack -pressroom -pressurage -pressural -pressure -pressureless -pressureproof -pressurize -pressurizer -presswoman -presswork -pressworker -prest -prestabilism -prestability -prestable -prestamp -prestandard -prestandardization -prestandardize -prestant -prestate -prestation -prestatistical -presteam -presteel -prester -presternal -presternum -prestidigital -prestidigitate -prestidigitation -prestidigitator -prestidigitatorial -prestige -prestigiate -prestigiation -prestigiator -prestigious -prestigiously -prestigiousness -prestimulate -prestimulation -prestimulus -prestissimo -presto -prestock -prestomial -prestomium -prestorage -prestore -prestraighten -prestrain -prestrengthen -prestress -prestretch -prestricken -prestruggle -prestubborn -prestudious -prestudiously -prestudiousness -prestudy -presubdue -presubiculum -presubject -presubjection -presubmission -presubmit -presubordinate -presubordination -presubscribe -presubscriber -presubscription -presubsist -presubsistence -presubsistent -presubstantial -presubstitute -presubstitution -presuccess -presuccessful -presuccessfully -presuffer -presuffering -presufficiency -presufficient -presufficiently -presuffrage -presuggest -presuggestion -presuggestive -presuitability -presuitable -presuitably -presumable -presumably -presume -presumedly -presumer -presuming -presumption -presumptious -presumptiously -presumptive -presumptively -presumptuous -presumptuously -presumptuousness -presuperficial -presuperficiality -presuperficially -presuperfluity -presuperfluous -presuperfluously -presuperintendence -presuperintendency -presupervise -presupervision -presupervisor -presupplemental -presupplementary -presupplicate -presupplication -presupply -presupport -presupposal -presuppose -presupposition -presuppositionless -presuppress -presuppression -presuppurative -presupremacy -presupreme -presurgery -presurgical -presurmise -presurprisal -presurprise -presurrender -presurround -presurvey -presusceptibility -presusceptible -presuspect -presuspend -presuspension -presuspicion -presuspicious -presuspiciously -presuspiciousness -presustain -presutural -preswallow -presylvian -presympathize -presympathy -presymphonic -presymphony -presymphysial -presymptom -presymptomatic -presynapsis -presynaptic -presystematic -presystematically -presystole -presystolic -pretabulate -pretabulation -pretan -pretangible -pretangibly -pretannage -pretardily -pretardiness -pretardy -pretariff -pretaste -preteach -pretechnical -pretechnically -pretelegraph -pretelegraphic -pretelephone -pretelephonic -pretell -pretemperate -pretemperately -pretemporal -pretend -pretendant -pretended -pretendedly -pretender -pretendership -pretendingly -pretendingness -pretense -pretenseful -pretenseless -pretension -pretensional -pretensionless -pretensive -pretensively -pretensiveness -pretentative -pretentious -pretentiously -pretentiousness -pretercanine -preterchristian -preterconventional -preterdetermined -preterdeterminedly -preterdiplomatic -preterdiplomatically -preterequine -preteressential -pretergress -pretergression -preterhuman -preterience -preterient -preterintentional -preterist -preterit -preteriteness -preterition -preteritive -preteritness -preterlabent -preterlegal -preterlethal -preterminal -pretermission -pretermit -pretermitter -preternative -preternatural -preternaturalism -preternaturalist -preternaturality -preternaturally -preternaturalness -preternormal -preternotorious -preternuptial -preterpluperfect -preterpolitical -preterrational -preterregular -preterrestrial -preterritorial -preterroyal -preterscriptural -preterseasonable -pretersensual -pretervection -pretest -pretestify -pretestimony -pretext -pretexted -pretextuous -pretheological -prethoracic -prethoughtful -prethoughtfully -prethoughtfulness -prethreaten -prethrill -prethrust -pretibial -pretimeliness -pretimely -pretincture -pretire -pretoken -pretone -pretonic -pretorial -pretorship -pretorsional -pretorture -pretournament -pretrace -pretracheal -pretraditional -pretrain -pretraining -pretransact -pretransaction -pretranscribe -pretranscription -pretranslate -pretranslation -pretransmission -pretransmit -pretransport -pretransportation -pretravel -pretreat -pretreatment -pretreaty -pretrematic -pretribal -pretry -prettification -prettifier -prettify -prettikin -prettily -prettiness -pretty -prettyface -prettyish -prettyism -pretubercular -pretuberculous -pretympanic -pretyphoid -pretypify -pretypographical -pretyrannical -pretyranny -pretzel -preultimate -preultimately -preumbonal -preunderstand -preundertake -preunion -preunite -preutilizable -preutilization -preutilize -prevacate -prevacation -prevaccinate -prevaccination -prevail -prevailance -prevailer -prevailingly -prevailingness -prevailment -prevalence -prevalency -prevalent -prevalently -prevalentness -prevalescence -prevalescent -prevalid -prevalidity -prevalidly -prevaluation -prevalue -prevariation -prevaricate -prevarication -prevaricator -prevaricatory -prevascular -prevegetation -prevelar -prevenance -prevenancy -prevene -prevenience -prevenient -preveniently -prevent -preventability -preventable -preventative -preventer -preventible -preventingly -prevention -preventionism -preventionist -preventive -preventively -preventiveness -preventorium -preventure -preverb -preverbal -preverification -preverify -prevernal -preversion -prevertebral -prevesical -preveto -previctorious -previde -previdence -preview -previgilance -previgilant -previgilantly -previolate -previolation -previous -previously -previousness -previse -previsibility -previsible -previsibly -prevision -previsional -previsit -previsitor -previsive -previsor -prevocal -prevocalic -prevocally -prevocational -prevogue -prevoid -prevoidance -prevolitional -prevolunteer -prevomer -prevotal -prevote -prevoyance -prevoyant -prevue -prewar -prewarn -prewarrant -prewash -preweigh -prewelcome -prewhip -prewilling -prewillingly -prewillingness -prewire -prewireless -prewitness -prewonder -prewonderment -preworldliness -preworldly -preworship -preworthily -preworthiness -preworthy -prewound -prewrap -prexy -prey -preyer -preyful -preyingly -preyouthful -prezonal -prezone -prezygapophysial -prezygapophysis -prezygomatic -priacanthid -priacanthine -priapism -priapulid -priapuloid -price -priceable -priceably -priced -priceite -priceless -pricelessness -pricer -prich -prick -prickant -pricked -pricker -pricket -prickfoot -pricking -prickingly -prickish -prickle -prickleback -prickled -pricklefish -prickless -prickliness -prickling -pricklingly -pricklouse -prickly -pricklyback -prickmadam -prickmedainty -prickproof -pricks -prickseam -prickshot -prickspur -pricktimber -prickwood -pricky -pride -prideful -pridefully -pridefulness -prideless -pridelessly -prideling -prideweed -pridian -priding -pridingly -pridy -pried -prier -priest -priestal -priestcap -priestcraft -priestdom -priesteen -priestery -priestess -priestfish -priesthood -priestianity -priestish -priestism -priestless -priestlet -priestlike -priestliness -priestling -priestly -priestship -priestshire -prig -prigdom -prigger -priggery -priggess -priggish -priggishly -priggishness -priggism -prighood -prigman -prill -prillion -prim -prima -primacy -primage -primal -primality -primar -primarian -primaried -primarily -primariness -primary -primatal -primate -primateship -primatial -primatic -primatical -primavera -primaveral -prime -primegilt -primely -primeness -primer -primero -primerole -primeval -primevalism -primevally -primeverose -primevity -primevous -primevrin -primigene -primigenial -primigenian -primigenious -primigenous -primigravida -primine -priming -primipara -primiparity -primiparous -primipilar -primitiae -primitial -primitias -primitive -primitively -primitivism -primitivist -primitivistic -primitivity -primly -primness -primogenetrix -primogenial -primogenital -primogenitary -primogenitive -primogenitor -primogeniture -primogenitureship -primogenous -primoprime -primoprimitive -primordality -primordia -primordial -primordialism -primordially -primordiate -primordium -primosity -primost -primp -primrose -primrosed -primrosetide -primrosetime -primrosy -primsie -primula -primulaceous -primulaverin -primulaveroside -primulic -primuline -primus -primwort -primy -prince -princeage -princecraft -princedom -princehood -princekin -princeless -princelet -princelike -princeliness -princeling -princely -princeps -princeship -princess -princessdom -princesse -princesslike -princessly -princewood -princified -princify -principal -principality -principally -principalness -principalship -principate -principes -principia -principiant -principiate -principiation -principium -principle -principulus -princock -princox -prine -pringle -prink -prinker -prinkle -prinky -print -printability -printable -printableness -printed -printer -printerdom -printerlike -printery -printing -printless -printline -printscript -printworks -priodont -prion -prionid -prionine -prionodesmacean -prionodesmaceous -prionodesmatic -prionodont -prionopine -prior -prioracy -prioral -priorate -prioress -prioristic -prioristically -priorite -priority -priorly -priorship -priory -prisable -prisage -prisal -priscan -prism -prismal -prismatic -prismatical -prismatically -prismatization -prismatize -prismatoid -prismatoidal -prismed -prismoid -prismoidal -prismy -prisometer -prison -prisonable -prisondom -prisoner -prisonful -prisonlike -prisonment -prisonous -priss -prissily -prissiness -prissy -pristane -pristine -pritch -pritchel -prithee -prius -privacity -privacy -privant -private -privateer -privateersman -privately -privateness -privation -privative -privatively -privativeness -privet -privilege -privileged -privileger -privily -priviness -privity -privy -prizable -prize -prizeable -prizeholder -prizeman -prizer -prizery -prizetaker -prizeworthy -pro -proa -proabolitionist -proabsolutism -proabsolutist -proabstinence -proacademic -proacceptance -proacquisition -proacquittal -proaction -proactor -proaddition -proadjournment -proadministration -proadmission -proadoption -proadvertising -proaesthetic -proaggressionist -proagitation -proagrarian -proagreement -proagricultural -proagule -proairesis -proairplane -proal -proalcoholism -proalien -proalliance -proallotment -proalteration -proamateur -proambient -proamendment -proamnion -proamniotic -proamusement -proanaphora -proanaphoral -proanarchic -proangiosperm -proangiospermic -proangiospermous -proanimistic -proannexation -proannexationist -proantarctic -proanthropos -proapostolic -proappointment -proapportionment -proappreciation -proappropriation -proapproval -proaquatic -proarbitration -proarbitrationist -proarchery -proarctic -proaristocratic -proarmy -proassessment -proassociation -proatheist -proatheistic -proathletic -proatlas -proattack -proattendance -proauction -proaudience -proaulion -proauthor -proauthority -proautomobile -proavian -proaviation -proaward -prob -probabiliorism -probabiliorist -probabilism -probabilist -probabilistic -probability -probabilize -probabl -probable -probableness -probably -probachelor -probal -proballoon -probang -probanishment -probankruptcy -probant -probargaining -probaseball -probasketball -probate -probathing -probatical -probation -probational -probationary -probationer -probationerhood -probationership -probationism -probationist -probationship -probative -probatively -probator -probatory -probattle -probattleship -probe -probeable -probeer -prober -probetting -probiology -probituminous -probity -problem -problematic -problematical -problematically -problematist -problematize -problemdom -problemist -problemistic -problemize -problemwise -problockade -probonding -probonus -proborrowing -proboscidal -proboscidate -proboscidean -proboscideous -proboscides -proboscidial -proboscidian -proboscidiferous -proboscidiform -probosciform -probosciformed -proboscis -proboscislike -probouleutic -proboulevard -probowling -proboxing -proboycott -probrick -probridge -probroadcasting -probudget -probudgeting -probuilding -probusiness -probuying -procacious -procaciously -procacity -procaine -procambial -procambium -procanal -procancellation -procapital -procapitalism -procapitalist -procarnival -procarp -procarpium -procarrier -procatalectic -procatalepsis -procatarctic -procatarxis -procathedral -procedendo -procedural -procedure -proceed -proceeder -proceeding -proceeds -proceleusmatic -procellarian -procellarid -procellariine -procellas -procello -procellose -procellous -procensorship -procensure -procentralization -procephalic -procercoid -procereal -procerebral -procerebrum -proceremonial -proceremonialism -proceremonialist -proceres -procerite -proceritic -procerity -procerus -process -processal -procession -processional -processionalist -processionally -processionary -processioner -processionist -processionize -processionwise -processive -processor -processual -procharity -prochein -prochemical -prochlorite -prochondral -prochoos -prochordal -prochorion -prochorionic -prochromosome -prochronic -prochronism -prochronize -prochurch -prochurchian -procidence -procident -procidentia -procivic -procivilian -procivism -proclaim -proclaimable -proclaimant -proclaimer -proclaiming -proclaimingly -proclamation -proclamator -proclamatory -proclassic -proclassical -proclergy -proclerical -proclericalism -procline -proclisis -proclitic -proclive -proclivitous -proclivity -proclivous -proclivousness -procnemial -procoelia -procoelian -procoelous -procoercive -procollectivistic -procollegiate -procombat -procombination -procomedy -procommemoration -procomment -procommercial -procommission -procommittee -procommunal -procommunism -procommunist -procommutation -procompensation -procompetition -procompromise -procompulsion -proconcentration -proconcession -proconciliation -procondemnation -proconfederationist -proconference -proconfession -proconfessionist -proconfiscation -proconformity -proconquest -proconscription -proconscriptive -proconservation -proconservationist -proconsolidation -proconstitutional -proconstitutionalism -proconsul -proconsular -proconsulary -proconsulate -proconsulship -proconsultation -procontinuation -proconvention -proconventional -proconviction -procoracoid -procoracoidal -procorporation -procosmetic -procosmopolitan -procotton -procourt -procrastinate -procrastinating -procrastinatingly -procrastination -procrastinative -procrastinatively -procrastinator -procrastinatory -procreant -procreate -procreation -procreative -procreativeness -procreator -procreatory -procreatress -procreatrix -procremation -procritic -procritique -procrypsis -procryptic -procryptically -proctal -proctalgia -proctalgy -proctatresia -proctatresy -proctectasia -proctectomy -procteurynter -proctitis -proctocele -proctoclysis -proctocolitis -proctocolonoscopy -proctocystoplasty -proctocystotomy -proctodaeal -proctodaeum -proctodynia -proctoelytroplastic -proctologic -proctological -proctologist -proctology -proctoparalysis -proctoplastic -proctoplasty -proctoplegia -proctopolypus -proctoptoma -proctoptosis -proctor -proctorage -proctoral -proctorial -proctorially -proctorical -proctorization -proctorize -proctorling -proctorrhagia -proctorrhaphy -proctorrhea -proctorship -proctoscope -proctoscopic -proctoscopy -proctosigmoidectomy -proctosigmoiditis -proctospasm -proctostenosis -proctostomy -proctotome -proctotomy -proctotresia -proctotrypid -proctotrypoid -proctovalvotomy -procumbent -procurable -procuracy -procural -procurance -procurate -procuration -procurative -procurator -procuratorate -procuratorial -procuratorship -procuratory -procuratrix -procure -procurement -procurer -procuress -procurrent -procursive -procurvation -procurved -procyoniform -procyonine -proczarist -prod -prodatary -prodder -proddle -prodecoration -prodefault -prodefiance -prodelay -prodelision -prodemocratic -prodenominational -prodentine -prodeportation -prodespotic -prodespotism -prodialogue -prodigal -prodigalish -prodigalism -prodigality -prodigalize -prodigally -prodigiosity -prodigious -prodigiously -prodigiousness -prodigus -prodigy -prodisarmament -prodisplay -prodissoconch -prodissolution -prodistribution -prodition -proditorious -proditoriously -prodivision -prodivorce -prodproof -prodramatic -prodroma -prodromal -prodromatic -prodromatically -prodrome -prodromic -prodromous -prodromus -producal -produce -produceable -produceableness -produced -producent -producer -producership -producibility -producible -producibleness -product -producted -productibility -productible -productid -productile -production -productional -productionist -productive -productively -productiveness -productivity -productoid -productor -productory -productress -proecclesiastical -proeconomy -proeducation -proeducational -proegumenal -proelectric -proelectrical -proelectrification -proelectrocution -proelimination -proem -proembryo -proembryonic -proemial -proemium -proemployee -proemptosis -proenforcement -proenlargement -proenzym -proenzyme -proepimeron -proepiscopist -proepisternum -proequality -proethical -proethnic -proethnically -proetid -proevolution -proevolutionist -proexamination -proexecutive -proexemption -proexercise -proexperiment -proexpert -proexporting -proexposure -proextension -proextravagance -prof -profaculty -profanable -profanableness -profanably -profanation -profanatory -profanchise -profane -profanely -profanement -profaneness -profaner -profanism -profanity -profanize -profarmer -profection -profectional -profectitious -profederation -profeminism -profeminist -proferment -profert -profess -professable -professed -professedly -profession -professional -professionalism -professionalist -professionality -professionalization -professionalize -professionally -professionist -professionize -professionless -professive -professively -professor -professorate -professordom -professoress -professorial -professorialism -professorially -professoriate -professorlike -professorling -professorship -professory -proffer -profferer -proficience -proficiency -proficient -proficiently -proficientness -profiction -proficuous -proficuously -profile -profiler -profilist -profilograph -profit -profitability -profitable -profitableness -profitably -profiteer -profiteering -profiter -profiting -profitless -profitlessly -profitlessness -profitmonger -profitmongering -profitproof -proflated -proflavine -profligacy -profligate -profligately -profligateness -profligation -proflogger -profluence -profluent -profluvious -profluvium -proforeign -profound -profoundly -profoundness -profraternity -profugate -profulgent -profunda -profundity -profuse -profusely -profuseness -profusion -profusive -profusively -profusiveness -prog -progambling -progamete -progamic -proganosaur -progenerate -progeneration -progenerative -progenital -progenitive -progenitiveness -progenitor -progenitorial -progenitorship -progenitress -progenitrix -progeniture -progenity -progeny -progeotropic -progeotropism -progeria -progermination -progestational -progesterone -progestin -progger -proglottic -proglottid -proglottidean -proglottis -prognathi -prognathic -prognathism -prognathous -prognathy -progne -prognose -prognosis -prognostic -prognosticable -prognostically -prognosticate -prognostication -prognosticative -prognosticator -prognosticatory -progoneate -progospel -progovernment -program -programist -programistic -programma -programmar -programmatic -programmatically -programmatist -programmer -progrede -progrediency -progredient -progress -progresser -progression -progressional -progressionally -progressionary -progressionism -progressionist -progressism -progressist -progressive -progressively -progressiveness -progressivism -progressivist -progressivity -progressor -proguardian -progymnosperm -progymnospermic -progymnospermous -progypsy -prohaste -prohibit -prohibiter -prohibition -prohibitionary -prohibitionism -prohibitionist -prohibitive -prohibitively -prohibitiveness -prohibitor -prohibitorily -prohibitory -proholiday -prohostility -prohuman -prohumanistic -prohydrotropic -prohydrotropism -proidealistic -proimmunity -proinclusion -proincrease -proindemnity -proindustrial -proinjunction -proinnovationist -proinquiry -proinsurance -prointervention -proinvestment -proirrigation -projacient -project -projectable -projectedly -projectile -projecting -projectingly -projection -projectional -projectionist -projective -projectively -projectivity -projector -projectress -projectrix -projecture -projicience -projicient -projiciently -projournalistic -projudicial -proke -prokeimenon -proker -prokindergarten -proklausis -prolabium -prolabor -prolacrosse -prolactin -prolamin -prolan -prolapse -prolapsus -prolarva -prolarval -prolate -prolately -prolateness -prolation -prolative -prolatively -proleague -proleaguer -prolectite -proleg -prolegate -prolegislative -prolegomena -prolegomenal -prolegomenary -prolegomenist -prolegomenon -prolegomenous -proleniency -prolepsis -proleptic -proleptical -proleptically -proleptics -proletairism -proletarian -proletarianism -proletarianization -proletarianize -proletarianly -proletarianness -proletariat -proletariatism -proletarization -proletarize -proletary -proletcult -proleucocyte -proleukocyte -prolicense -prolicidal -prolicide -proliferant -proliferate -proliferation -proliferative -proliferous -proliferously -prolific -prolificacy -prolifical -prolifically -prolificalness -prolificate -prolification -prolificity -prolificly -prolificness -prolificy -prolify -proligerous -proline -proliquor -proliterary -proliturgical -proliturgist -prolix -prolixity -prolixly -prolixness -prolocution -prolocutor -prolocutorship -prolocutress -prolocutrix -prologist -prologize -prologizer -prologos -prologue -prologuelike -prologuer -prologuist -prologuize -prologuizer -prologus -prolong -prolongable -prolongableness -prolongably -prolongate -prolongation -prolonge -prolonger -prolongment -prolusion -prolusionize -prolusory -prolyl -promachinery -promachos -promagisterial -promagistracy -promagistrate -promajority -promammal -promammalian -promarriage -promatrimonial -promatrimonialist -promaximum -promemorial -promenade -promenader -promenaderess -promercantile -promercy -promerger -promeristem -promerit -promeritor -promethium -promic -promilitarism -promilitarist -promilitary -prominence -prominency -prominent -prominently -prominimum -proministry -prominority -promisable -promiscuity -promiscuous -promiscuously -promiscuousness -promise -promisee -promiseful -promiseless -promisemonger -promiseproof -promiser -promising -promisingly -promisingness -promisor -promissionary -promissive -promissor -promissorily -promissory -promitosis -promittor -promnesia -promoderation -promoderationist -promodernist -promodernistic -promonarchic -promonarchical -promonarchicalness -promonarchist -promonopolist -promonopoly -promontoried -promontory -promoral -promorph -promorphological -promorphologically -promorphologist -promorphology -promotable -promote -promotement -promoter -promotion -promotional -promotive -promotiveness -promotor -promotorial -promotress -promotrix -promovable -promovent -prompt -promptbook -prompter -promptitude -promptive -promptly -promptness -promptress -promptuary -prompture -promulgate -promulgation -promulgator -promulge -promulger -promuscidate -promuscis -promycelial -promycelium -promythic -pronaos -pronate -pronation -pronational -pronationalism -pronationalist -pronationalistic -pronative -pronatoflexor -pronator -pronaval -pronavy -prone -pronegotiation -pronegro -pronegroism -pronely -proneness -pronephric -pronephridiostome -pronephron -pronephros -proneur -prong -prongbuck -pronged -pronger -pronghorn -pronglike -pronic -pronograde -pronominal -pronominalize -pronominally -pronomination -pronotal -pronotum -pronoun -pronounal -pronounce -pronounceable -pronounced -pronouncedly -pronouncement -pronounceness -pronouncer -pronpl -pronto -pronuba -pronubial -pronuclear -pronucleus -pronumber -pronunciability -pronunciable -pronuncial -pronunciamento -pronunciation -pronunciative -pronunciator -pronunciatory -pronymph -pronymphal -proo -prooemiac -prooemion -prooemium -proof -proofer -proofful -proofing -proofless -prooflessly -proofness -proofread -proofreader -proofreading -proofroom -proofy -prop -propadiene -propaedeutic -propaedeutical -propaedeutics -propagability -propagable -propagableness -propagand -propaganda -propagandic -propagandism -propagandist -propagandistic -propagandistically -propagandize -propagate -propagation -propagational -propagative -propagator -propagatory -propagatress -propago -propagulum -propale -propalinal -propane -propanedicarboxylic -propanol -propanone -propapist -proparasceve -propargyl -propargylic -proparian -proparliamental -proparoxytone -proparoxytonic -proparticipation -propatagial -propatagian -propatagium -propatriotic -propatriotism -propatronage -propayment -propellable -propellant -propellent -propeller -propelment -propend -propendent -propene -propenoic -propense -propensely -propenseness -propension -propensitude -propensity -propenyl -propenylic -proper -properispome -properispomenon -properitoneal -properly -properness -propertied -property -propertyless -propertyship -propessimism -propessimist -prophase -prophasis -prophecy -prophecymonger -prophesiable -prophesier -prophesy -prophet -prophetess -prophethood -prophetic -prophetical -propheticality -prophetically -propheticalness -propheticism -propheticly -prophetism -prophetize -prophetless -prophetlike -prophetry -prophetship -prophilosophical -prophloem -prophoric -prophototropic -prophototropism -prophylactic -prophylactical -prophylactically -prophylaxis -prophylaxy -prophyll -prophyllum -propination -propine -propinoic -propinquant -propinque -propinquity -propinquous -propiolaldehyde -propiolate -propiolic -propionate -propione -propionic -propionitril -propionitrile -propionyl -propitiable -propitial -propitiate -propitiatingly -propitiation -propitiative -propitiator -propitiatorily -propitiatory -propitious -propitiously -propitiousness -proplasm -proplasma -proplastic -propless -propleural -propleuron -proplex -proplexus -propodeal -propodeon -propodeum -propodial -propodiale -propodite -propoditic -propodium -propolis -propolitical -propolization -propolize -propone -proponement -proponent -proponer -propons -propooling -propopery -proportion -proportionability -proportionable -proportionableness -proportionably -proportional -proportionalism -proportionality -proportionally -proportionate -proportionately -proportionateness -proportioned -proportioner -proportionless -proportionment -proposable -proposal -proposant -propose -proposer -proposition -propositional -propositionally -propositionize -propositus -propound -propounder -propoundment -propoxy -proppage -propper -propraetor -propraetorial -propraetorian -proprecedent -propriation -proprietage -proprietarian -proprietariat -proprietarily -proprietary -proprietor -proprietorial -proprietorially -proprietorship -proprietory -proprietous -proprietress -proprietrix -propriety -proprioception -proprioceptive -proprioceptor -propriospinal -proprium -proprivilege -proproctor -proprofit -proprovincial -proprovost -props -propterygial -propterygium -proptosed -proptosis -propublication -propublicity -propugnacled -propugnaculum -propugnation -propugnator -propugner -propulsation -propulsatory -propulsion -propulsity -propulsive -propulsor -propulsory -propunishment -propupa -propupal -propurchase -propwood -propygidium -propyl -propylacetic -propylaeum -propylamine -propylation -propylene -propylic -propylidene -propylite -propylitic -propylitization -propylon -propyne -propynoic -proquaestor -proracing -prorailroad -prorata -proratable -prorate -proration -prore -proreader -prorealism -prorealist -prorealistic -proreality -prorean -prorebate -prorebel -prorecall -proreciprocation -prorecognition -proreconciliation -prorector -prorectorate -proredemption -proreduction -proreferendum -proreform -proreformist -proregent -prorelease -proreptilian -proreption -prorepublican -proresearch -proreservationist -proresignation -prorestoration -prorestriction -prorevision -prorevisionist -prorevolution -prorevolutionary -prorevolutionist -prorhinal -proritual -proritualistic -prorogate -prorogation -prorogator -prorogue -proroguer -proromance -proromantic -proromanticism -proroyal -proroyalty -prorrhesis -prorsad -prorsal -proruption -prosabbath -prosabbatical -prosacral -prosaic -prosaical -prosaically -prosaicalness -prosaicism -prosaicness -prosaism -prosaist -prosar -prosateur -proscapula -proscapular -proscenium -proscholastic -proschool -proscientific -proscolecine -proscolex -proscribable -proscribe -proscriber -proscript -proscription -proscriptional -proscriptionist -proscriptive -proscriptively -proscriptiveness -proscutellar -proscutellum -proscynemata -prose -prosecrecy -prosecretin -prosect -prosection -prosector -prosectorial -prosectorium -prosectorship -prosecutable -prosecute -prosecution -prosecutor -prosecutrix -proselenic -proselike -proselyte -proselyter -proselytical -proselytingly -proselytism -proselytist -proselytistic -proselytization -proselytize -proselytizer -proseman -proseminar -proseminary -proseminate -prosemination -prosencephalic -prosencephalon -prosenchyma -prosenchymatous -proseneschal -proser -prosethmoid -proseucha -proseuche -prosification -prosifier -prosify -prosiliency -prosilient -prosiliently -prosilverite -prosily -prosimian -prosiness -prosing -prosingly -prosiphon -prosiphonal -prosiphonate -prosish -prosist -proslambanomenos -proslave -proslaver -proslavery -proslaveryism -prosneusis -proso -prosobranch -prosobranchiate -prosocele -prosodal -prosode -prosodemic -prosodetic -prosodiac -prosodiacal -prosodiacally -prosodial -prosodially -prosodian -prosodic -prosodical -prosodically -prosodion -prosodist -prosodus -prosody -prosogaster -prosogyrate -prosogyrous -prosoma -prosomal -prosomatic -prosonomasia -prosopalgia -prosopalgic -prosopantritis -prosopectasia -prosophist -prosopic -prosopically -prosopite -prosoplasia -prosopography -prosopon -prosoponeuralgia -prosopoplegia -prosopoplegic -prosopopoeia -prosopopoeial -prosoposchisis -prosopospasm -prosopotocia -prosopyl -prosopyle -prosorus -prospect -prospection -prospective -prospectively -prospectiveness -prospectless -prospector -prospectus -prospectusless -prospeculation -prosper -prosperation -prosperity -prosperous -prosperously -prosperousness -prospicience -prosporangium -prosport -pross -prossy -prostatauxe -prostate -prostatectomy -prostatelcosis -prostatic -prostaticovesical -prostatism -prostatitic -prostatitis -prostatocystitis -prostatocystotomy -prostatodynia -prostatolith -prostatomegaly -prostatometer -prostatomyomectomy -prostatorrhea -prostatorrhoea -prostatotomy -prostatovesical -prostatovesiculectomy -prostatovesiculitis -prostemmate -prostemmatic -prosternal -prosternate -prosternum -prostheca -prosthenic -prosthesis -prosthetic -prosthetically -prosthetics -prosthetist -prosthion -prosthionic -prosthodontia -prosthodontist -prostitute -prostitutely -prostitution -prostitutor -prostomial -prostomiate -prostomium -prostrate -prostration -prostrative -prostrator -prostrike -prostyle -prostylos -prosubmission -prosubscription -prosubstantive -prosubstitution -prosuffrage -prosupervision -prosupport -prosurgical -prosurrender -prosy -prosyllogism -prosyndicalism -prosyndicalist -protactic -protactinium -protagon -protagonism -protagonist -protalbumose -protamine -protandric -protandrism -protandrous -protandrously -protandry -protanomal -protanomalous -protanope -protanopia -protanopic -protargentum -protargin -protariff -protarsal -protarsus -protasis -protaspis -protatic -protatically -protax -protaxation -protaxial -protaxis -prote -protea -proteaceous -protead -protean -proteanly -proteanwise -protease -protechnical -protect -protectant -protectible -protecting -protectingly -protectingness -protection -protectional -protectionate -protectionism -protectionist -protectionize -protectionship -protective -protectively -protectiveness -protector -protectoral -protectorate -protectorial -protectorian -protectorless -protectorship -protectory -protectress -protectrix -protege -protegee -protegulum -proteic -proteide -proteidean -proteidogenous -proteiform -protein -proteinaceous -proteinase -proteinic -proteinochromogen -proteinous -proteinuria -protelytropteran -protelytropteron -protelytropterous -protemperance -protempirical -protemporaneous -protend -protension -protensity -protensive -protensively -proteoclastic -proteogenous -proteolysis -proteolytic -proteopectic -proteopexic -proteopexis -proteopexy -proteosaurid -proteose -proteosomal -proteosome -proteosuria -protephemeroid -proterandrous -proterandrousness -proterandry -proteranthous -proterobase -proteroglyph -proteroglyphic -proteroglyphous -proterogynous -proterogyny -proterothesis -proterotype -protervity -protest -protestable -protestancy -protestant -protestantism -protestation -protestator -protestatory -protester -protestingly -protestive -protestor -protetrarch -protevangel -protevangelion -protevangelium -protext -prothalamia -prothalamion -prothalamium -prothallia -prothallial -prothallic -prothalline -prothallium -prothalloid -prothallus -protheatrical -protheca -prothesis -prothetic -prothetical -prothetically -prothonotarial -prothonotariat -prothonotary -prothonotaryship -prothoracic -prothorax -prothrift -prothrombin -prothrombogen -prothyl -prothysteron -protide -protiodide -protist -protistan -protistic -protistological -protistologist -protistology -protiston -protium -proto -protoactinium -protoalbumose -protoamphibian -protoanthropic -protoapostate -protoarchitect -protobacco -protobasidiomycetous -protobasidium -protobishop -protoblast -protoblastic -protoblattoid -protobranchiate -protocalcium -protocanonical -protocaseose -protocatechualdehyde -protocatechuic -protocercal -protocerebral -protocerebrum -protochemist -protochemistry -protochloride -protochlorophyll -protochordate -protochromium -protochronicler -protocitizen -protoclastic -protocneme -protococcaceous -protococcal -protococcoid -protocol -protocolar -protocolary -protocoleopteran -protocoleopteron -protocoleopterous -protocolist -protocolization -protocolize -protoconch -protoconchal -protocone -protoconid -protoconule -protoconulid -protocopper -protocorm -protodeacon -protoderm -protodevil -protodonatan -protodonate -protodont -protodramatic -protodynastic -protoelastose -protoepiphyte -protoforaminifer -protoforester -protogaster -protogelatose -protogenal -protogenes -protogenesis -protogenetic -protogenic -protogenist -protogine -protoglobulose -protogod -protogonous -protogospel -protograph -protogynous -protogyny -protohematoblast -protohemipteran -protohemipteron -protohemipterous -protoheresiarch -protohistorian -protohistoric -protohistory -protohomo -protohuman -protohydrogen -protohymenopteran -protohymenopteron -protohymenopterous -protoiron -protoleration -protoleucocyte -protoleukocyte -protolithic -protoliturgic -protolog -protologist -protoloph -protoma -protomagister -protomagnate -protomagnesium -protomala -protomalal -protomalar -protomammal -protomammalian -protomanganese -protomartyr -protome -protomeristem -protomerite -protomeritic -protometal -protometallic -protometaphrast -protomonostelic -protomorph -protomorphic -protomyosinose -proton -protone -protonegroid -protonema -protonemal -protonematal -protonematoid -protoneme -protonephridial -protonephridium -protonephros -protoneuron -protoneurone -protonic -protonickel -protonitrate -protonotater -protonym -protonymph -protonymphal -protopapas -protopappas -protoparent -protopathia -protopathic -protopathy -protopatriarchal -protopatrician -protopattern -protopectin -protopectinase -protopepsia -protoperlarian -protophilosophic -protophloem -protophyll -protophyte -protophytic -protopin -protopine -protoplasm -protoplasma -protoplasmal -protoplasmatic -protoplasmic -protoplast -protoplastic -protopod -protopodial -protopodite -protopoditic -protopoetic -protopope -protoporphyrin -protopragmatic -protopresbyter -protopresbytery -protoprism -protoproteose -protoprotestant -protopteran -protopteridophyte -protopterous -protopyramid -protore -protorebel -protoreligious -protoreptilian -protorosaur -protorosaurian -protorosauroid -protorthopteran -protorthopteron -protorthopterous -protosalt -protosaurian -protoscientific -protosilicate -protosilicon -protosinner -protosiphonaceous -protosocial -protosolution -protospasm -protospore -protostele -protostelic -protostome -protostrontium -protosulphate -protosulphide -protosyntonose -prototaxites -prototheca -protothecal -prototheme -protothere -prototherian -prototitanium -prototraitor -prototroch -prototrochal -prototrophic -prototypal -prototype -prototypic -prototypical -prototypically -prototypographer -prototyrant -protovanadium -protoveratrine -protovertebra -protovertebral -protovestiary -protovillain -protovum -protoxide -protoxylem -protozoacidal -protozoacide -protozoal -protozoan -protozoea -protozoean -protozoiasis -protozoic -protozoological -protozoologist -protozoology -protozoon -protozoonal -protracheate -protract -protracted -protractedly -protractedness -protracter -protractible -protractile -protractility -protraction -protractive -protractor -protrade -protradition -protraditional -protragedy -protragical -protragie -protransfer -protranslation -protransubstantiation -protravel -protreasurer -protreaty -protreptic -protreptical -protriaene -protropical -protrudable -protrude -protrudent -protrusible -protrusile -protrusion -protrusive -protrusively -protrusiveness -protuberance -protuberancy -protuberant -protuberantial -protuberantly -protuberantness -protuberate -protuberosity -protuberous -proturan -protutor -protutory -protyl -protyle -protype -proudful -proudhearted -proudish -proudishly -proudling -proudly -proudness -prouniformity -prounion -prounionist -prouniversity -proustite -provability -provable -provableness -provably -provaccinist -provand -provant -provascular -prove -provect -provection -proved -proveditor -provedly -provedor -provedore -proven -provenance -provender -provenience -provenient -provenly -proventricular -proventricule -proventriculus -prover -proverb -proverbial -proverbialism -proverbialist -proverbialize -proverbially -proverbic -proverbiologist -proverbiology -proverbize -proverblike -provicar -provicariate -providable -providance -provide -provided -providence -provident -providential -providentialism -providentially -providently -providentness -provider -providing -providore -providoring -province -provincial -provincialate -provincialism -provincialist -provinciality -provincialization -provincialize -provincially -provincialship -provinciate -provinculum -provine -proving -provingly -provision -provisional -provisionality -provisionally -provisionalness -provisionary -provisioner -provisioneress -provisionless -provisionment -provisive -proviso -provisor -provisorily -provisorship -provisory -provitamin -provivisection -provivisectionist -provocant -provocation -provocational -provocative -provocatively -provocativeness -provocator -provocatory -provokable -provoke -provokee -provoker -provoking -provokingly -provokingness -provolunteering -provost -provostal -provostess -provostorial -provostry -provostship -prow -prowar -prowarden -prowaterpower -prowed -prowersite -prowess -prowessed -prowessful -prowl -prowler -prowling -prowlingly -proxenet -proxenete -proxenetism -proxenos -proxenus -proxeny -proxically -proximad -proximal -proximally -proximate -proximately -proximateness -proximation -proximity -proximo -proximobuccal -proximolabial -proximolingual -proxy -proxyship -proxysm -prozone -prozoning -prozygapophysis -prozymite -prude -prudelike -prudely -prudence -prudent -prudential -prudentialism -prudentialist -prudentiality -prudentially -prudentialness -prudently -prudery -prudish -prudishly -prudishness -prudist -prudity -pruh -pruinate -pruinescence -pruinose -pruinous -prulaurasin -prunable -prunableness -prunably -prunase -prunasin -prune -prunell -prunella -prunelle -prunello -pruner -prunetin -prunetol -pruniferous -pruniform -pruning -prunitrin -prunt -prunted -prurience -pruriency -prurient -pruriently -pruriginous -prurigo -pruriousness -pruritic -pruritus -prusiano -prussiate -prussic -prut -prutah -pry -pryer -prying -pryingly -pryingness -pryler -pryproof -pryse -prytaneum -prytanis -prytanize -prytany -psalis -psalm -psalmic -psalmist -psalmister -psalmistry -psalmless -psalmodial -psalmodic -psalmodical -psalmodist -psalmodize -psalmody -psalmograph -psalmographer -psalmography -psalmy -psaloid -psalter -psalterial -psalterian -psalterion -psalterist -psalterium -psaltery -psaltes -psaltress -psammite -psammitic -psammocarcinoma -psammocharid -psammogenous -psammolithic -psammologist -psammology -psammoma -psammophile -psammophilous -psammophyte -psammophytic -psammosarcoma -psammotherapy -psammous -pschent -psellism -psellismus -psephism -psephisma -psephite -psephitic -psephomancy -pseudaconine -pseudaconitine -pseudacusis -pseudalveolar -pseudambulacral -pseudambulacrum -pseudamoeboid -pseudamphora -pseudandry -pseudangina -pseudankylosis -pseudaphia -pseudaposematic -pseudaposporous -pseudapospory -pseudapostle -pseudarachnidan -pseudarthrosis -pseudataxic -pseudatoll -pseudaxine -pseudaxis -pseudelephant -pseudelminth -pseudelytron -pseudembryo -pseudembryonic -pseudencephalic -pseudencephalus -pseudepigraph -pseudepigrapha -pseudepigraphal -pseudepigraphic -pseudepigraphical -pseudepigraphous -pseudepigraphy -pseudepiploic -pseudepiploon -pseudepiscopacy -pseudepiscopy -pseudepisematic -pseudesthesia -pseudhalteres -pseudhemal -pseudimaginal -pseudimago -pseudisodomum -pseudo -pseudoacaccia -pseudoacademic -pseudoacademical -pseudoaccidental -pseudoacid -pseudoaconitine -pseudoacromegaly -pseudoadiabatic -pseudoaesthetic -pseudoaffectionate -pseudoalkaloid -pseudoalum -pseudoalveolar -pseudoamateurish -pseudoamatory -pseudoanaphylactic -pseudoanaphylaxis -pseudoanatomic -pseudoanatomical -pseudoancestral -pseudoanemia -pseudoanemic -pseudoangelic -pseudoangina -pseudoankylosis -pseudoanthorine -pseudoanthropoid -pseudoanthropological -pseudoanthropology -pseudoantique -pseudoapologetic -pseudoapoplectic -pseudoapoplexy -pseudoappendicitis -pseudoaquatic -pseudoarchaic -pseudoarchaism -pseudoarchaist -pseudoaristocratic -pseudoarthrosis -pseudoarticulation -pseudoartistic -pseudoascetic -pseudoastringent -pseudoasymmetrical -pseudoasymmetry -pseudoataxia -pseudobacterium -pseudobasidium -pseudobenevolent -pseudobenthonic -pseudobenthos -pseudobinary -pseudobiological -pseudoblepsia -pseudoblepsis -pseudobrachial -pseudobrachium -pseudobranch -pseudobranchia -pseudobranchial -pseudobranchiate -pseudobrookite -pseudobrotherly -pseudobulb -pseudobulbar -pseudobulbil -pseudobulbous -pseudobutylene -pseudocandid -pseudocapitulum -pseudocarbamide -pseudocarcinoid -pseudocarp -pseudocarpous -pseudocartilaginous -pseudocele -pseudocelian -pseudocelic -pseudocellus -pseudocentric -pseudocentrous -pseudocentrum -pseudoceratitic -pseudocercaria -pseudoceryl -pseudocharitable -pseudochemical -pseudochina -pseudochromesthesia -pseudochromia -pseudochromosome -pseudochronism -pseudochronologist -pseudochrysalis -pseudochrysolite -pseudochylous -pseudocirrhosis -pseudoclassic -pseudoclassical -pseudoclassicism -pseudoclerical -pseudococtate -pseudocollegiate -pseudocolumella -pseudocolumellar -pseudocommissure -pseudocommisural -pseudocompetitive -pseudoconcha -pseudoconclude -pseudocone -pseudoconglomerate -pseudoconglomeration -pseudoconhydrine -pseudoconjugation -pseudoconservative -pseudocorneous -pseudocortex -pseudocosta -pseudocotyledon -pseudocotyledonal -pseudocritical -pseudocroup -pseudocrystalline -pseudocubic -pseudocultivated -pseudocultural -pseudocumene -pseudocumenyl -pseudocumidine -pseudocumyl -pseudocyclosis -pseudocyesis -pseudocyst -pseudodeltidium -pseudodementia -pseudodemocratic -pseudoderm -pseudodermic -pseudodiagnosis -pseudodiastolic -pseudodiphtheria -pseudodiphtheritic -pseudodipteral -pseudodipterally -pseudodipteros -pseudodont -pseudodox -pseudodoxal -pseudodoxy -pseudodramatic -pseudodysentery -pseudoedema -pseudoelectoral -pseudoembryo -pseudoembryonic -pseudoemotional -pseudoencephalitic -pseudoenthusiastic -pseudoephedrine -pseudoepiscopal -pseudoequalitarian -pseudoerotic -pseudoeroticism -pseudoerysipelas -pseudoerysipelatous -pseudoerythrin -pseudoethical -pseudoetymological -pseudoeugenics -pseudoevangelical -pseudofamous -pseudofarcy -pseudofeminine -pseudofever -pseudofeverish -pseudofilaria -pseudofilarian -pseudofinal -pseudofluctuation -pseudofluorescence -pseudofoliaceous -pseudoform -pseudofossil -pseudogalena -pseudoganglion -pseudogaseous -pseudogaster -pseudogastrula -pseudogeneral -pseudogeneric -pseudogenerous -pseudogenteel -pseudogenus -pseudogeometry -pseudogermanic -pseudogeusia -pseudogeustia -pseudoglanders -pseudoglioma -pseudoglobulin -pseudoglottis -pseudograph -pseudographeme -pseudographer -pseudographia -pseudographize -pseudography -pseudograsserie -pseudogyne -pseudogynous -pseudogyny -pseudogyrate -pseudohallucination -pseudohallucinatory -pseudohalogen -pseudohemal -pseudohermaphrodite -pseudohermaphroditic -pseudohermaphroditism -pseudoheroic -pseudohexagonal -pseudohistoric -pseudohistorical -pseudoholoptic -pseudohuman -pseudohydrophobia -pseudohyoscyamine -pseudohypertrophic -pseudohypertrophy -pseudoidentical -pseudoimpartial -pseudoindependent -pseudoinfluenza -pseudoinsane -pseudoinsoluble -pseudoisatin -pseudoism -pseudoisomer -pseudoisomeric -pseudoisomerism -pseudoisotropy -pseudojervine -pseudolabial -pseudolabium -pseudolalia -pseudolamellibranchiate -pseudolaminated -pseudolateral -pseudolatry -pseudolegal -pseudolegendary -pseudoleucite -pseudoleucocyte -pseudoleukemia -pseudoleukemic -pseudoliberal -pseudolichen -pseudolinguistic -pseudoliterary -pseudolobar -pseudological -pseudologically -pseudologist -pseudologue -pseudology -pseudolunule -pseudomalachite -pseudomalaria -pseudomancy -pseudomania -pseudomaniac -pseudomantic -pseudomantist -pseudomasculine -pseudomedical -pseudomedieval -pseudomelanosis -pseudomembrane -pseudomembranous -pseudomeningitis -pseudomenstruation -pseudomer -pseudomeric -pseudomerism -pseudomery -pseudometallic -pseudometameric -pseudometamerism -pseudomica -pseudomilitarist -pseudomilitaristic -pseudomilitary -pseudoministerial -pseudomiraculous -pseudomitotic -pseudomnesia -pseudomodern -pseudomodest -pseudomonastic -pseudomonoclinic -pseudomonocotyledonous -pseudomonocyclic -pseudomonotropy -pseudomoral -pseudomorph -pseudomorphia -pseudomorphic -pseudomorphine -pseudomorphism -pseudomorphose -pseudomorphosis -pseudomorphous -pseudomorula -pseudomorular -pseudomucin -pseudomucoid -pseudomultilocular -pseudomultiseptate -pseudomythical -pseudonarcotic -pseudonational -pseudonavicella -pseudonavicellar -pseudonavicula -pseudonavicular -pseudoneuropter -pseudoneuropteran -pseudoneuropterous -pseudonitrole -pseudonitrosite -pseudonuclein -pseudonucleolus -pseudonychium -pseudonym -pseudonymal -pseudonymic -pseudonymity -pseudonymous -pseudonymously -pseudonymousness -pseudonymuncle -pseudonymuncule -pseudopapaverine -pseudoparalysis -pseudoparalytic -pseudoparaplegia -pseudoparasitic -pseudoparasitism -pseudoparenchyma -pseudoparenchymatous -pseudoparenchyme -pseudoparesis -pseudoparthenogenesis -pseudopatriotic -pseudopediform -pseudopelletierine -pseudopercular -pseudoperculate -pseudoperculum -pseudoperianth -pseudoperidium -pseudoperiodic -pseudoperipteral -pseudopermanent -pseudoperoxide -pseudoperspective -pseudophallic -pseudophellandrene -pseudophenanthrene -pseudophenanthroline -pseudophenocryst -pseudophilanthropic -pseudophilosophical -pseudopionnotes -pseudopious -pseudoplasm -pseudoplasma -pseudoplasmodium -pseudopneumonia -pseudopod -pseudopodal -pseudopodia -pseudopodial -pseudopodian -pseudopodiospore -pseudopodium -pseudopoetic -pseudopoetical -pseudopolitic -pseudopolitical -pseudopopular -pseudopore -pseudoporphyritic -pseudopregnancy -pseudopregnant -pseudopriestly -pseudoprimitive -pseudoprimitivism -pseudoprincely -pseudoproboscis -pseudoprofessional -pseudoprofessorial -pseudoprophetic -pseudoprophetical -pseudoprosperous -pseudopsia -pseudopsychological -pseudoptics -pseudoptosis -pseudopupa -pseudopupal -pseudopurpurin -pseudopyriform -pseudoquinol -pseudorabies -pseudoracemic -pseudoracemism -pseudoramose -pseudoramulus -pseudorealistic -pseudoreduction -pseudoreformed -pseudoregal -pseudoreligious -pseudoreminiscence -pseudorganic -pseudorheumatic -pseudorhombohedral -pseudoromantic -pseudorunic -pseudosacred -pseudosacrilegious -pseudosalt -pseudosatirical -pseudoscarlatina -pseudoscholarly -pseudoscholastic -pseudoscientific -pseudoscinine -pseudosclerosis -pseudoscope -pseudoscopic -pseudoscopically -pseudoscopy -pseudoscorpion -pseudoscutum -pseudosematic -pseudosensational -pseudoseptate -pseudoservile -pseudosessile -pseudosiphonal -pseudosiphuncal -pseudoskeletal -pseudoskeleton -pseudoskink -pseudosmia -pseudosocial -pseudosocialistic -pseudosolution -pseudosoph -pseudosopher -pseudosophical -pseudosophist -pseudosophy -pseudospectral -pseudosperm -pseudospermic -pseudospermium -pseudospermous -pseudosphere -pseudospherical -pseudospiracle -pseudospiritual -pseudosporangium -pseudospore -pseudosquamate -pseudostalactite -pseudostalactitical -pseudostalagmite -pseudostalagmitical -pseudostereoscope -pseudostereoscopic -pseudostereoscopism -pseudostigma -pseudostigmatic -pseudostoma -pseudostomatous -pseudostomous -pseudostratum -pseudosubtle -pseudosuchian -pseudosweating -pseudosyllogism -pseudosymmetric -pseudosymmetrical -pseudosymmetry -pseudosymptomatic -pseudosyphilis -pseudosyphilitic -pseudotabes -pseudotachylite -pseudotetanus -pseudotetragonal -pseudotetrameral -pseudotetramerous -pseudotrachea -pseudotracheal -pseudotribal -pseudotributary -pseudotrimeral -pseudotrimerous -pseudotropine -pseudotubercular -pseudotuberculosis -pseudotuberculous -pseudoturbinal -pseudotyphoid -pseudoval -pseudovarian -pseudovary -pseudovelar -pseudovelum -pseudoventricle -pseudoviaduct -pseudoviperine -pseudoviscosity -pseudoviscous -pseudovolcanic -pseudovolcano -pseudovum -pseudowhorl -pseudoxanthine -pseudoyohimbine -pseudozealot -pseudozoea -pseudozoogloeal -psha -pshaw -psi -psilanthropic -psilanthropism -psilanthropist -psilanthropy -psiloceran -psiloceratan -psiloceratid -psiloi -psilology -psilomelane -psilomelanic -psilophyte -psilosis -psilosopher -psilosophy -psilotaceous -psilothrum -psilotic -psithurism -psittaceous -psittaceously -psittacine -psittacinite -psittacism -psittacistic -psittacomorphic -psittacosis -psoadic -psoas -psoatic -psocid -psocine -psoitis -psomophagic -psomophagist -psomophagy -psora -psoriasic -psoriasiform -psoriasis -psoriatic -psoriatiform -psoric -psoroid -psorophthalmia -psorophthalmic -psoroptic -psorosis -psorosperm -psorospermial -psorospermiasis -psorospermic -psorospermiform -psorospermosis -psorous -pssimistical -pst -psych -psychagogic -psychagogos -psychagogue -psychagogy -psychal -psychalgia -psychanalysis -psychanalysist -psychanalytic -psychasthenia -psychasthenic -psyche -psycheometry -psychesthesia -psychesthetic -psychiasis -psychiater -psychiatria -psychiatric -psychiatrical -psychiatrically -psychiatrist -psychiatrize -psychiatry -psychic -psychical -psychically -psychicism -psychicist -psychics -psychid -psychism -psychist -psychoanalysis -psychoanalyst -psychoanalytic -psychoanalytical -psychoanalytically -psychoanalyze -psychoanalyzer -psychoautomatic -psychobiochemistry -psychobiologic -psychobiological -psychobiology -psychobiotic -psychocatharsis -psychoclinic -psychoclinical -psychoclinicist -psychodiagnostics -psychodispositional -psychodrama -psychodynamic -psychodynamics -psychoeducational -psychoepilepsy -psychoethical -psychofugal -psychogalvanic -psychogalvanometer -psychogenesis -psychogenetic -psychogenetical -psychogenetically -psychogenetics -psychogenic -psychogeny -psychognosis -psychognostic -psychognosy -psychogonic -psychogonical -psychogony -psychogram -psychograph -psychographer -psychographic -psychographist -psychography -psychoid -psychokinesia -psychokinesis -psychokinetic -psychokyme -psycholepsy -psycholeptic -psychologer -psychologian -psychologic -psychological -psychologically -psychologics -psychologism -psychologist -psychologize -psychologue -psychology -psychomachy -psychomancy -psychomantic -psychometer -psychometric -psychometrical -psychometrically -psychometrician -psychometrics -psychometrist -psychometrize -psychometry -psychomonism -psychomoral -psychomorphic -psychomorphism -psychomotility -psychomotor -psychon -psychoneural -psychoneurological -psychoneurosis -psychoneurotic -psychonomic -psychonomics -psychonomy -psychony -psychoorganic -psychopannychian -psychopannychism -psychopannychist -psychopannychistic -psychopannychy -psychopanychite -psychopath -psychopathia -psychopathic -psychopathist -psychopathologic -psychopathological -psychopathologist -psychopathy -psychopetal -psychophobia -psychophysic -psychophysical -psychophysically -psychophysicist -psychophysics -psychophysiologic -psychophysiological -psychophysiologically -psychophysiologist -psychophysiology -psychoplasm -psychopomp -psychopompos -psychorealism -psychorealist -psychorealistic -psychoreflex -psychorhythm -psychorhythmia -psychorhythmic -psychorhythmical -psychorhythmically -psychorrhagic -psychorrhagy -psychosarcous -psychosensorial -psychosensory -psychoses -psychosexual -psychosexuality -psychosexually -psychosis -psychosocial -psychosomatic -psychosomatics -psychosome -psychosophy -psychostasy -psychostatic -psychostatical -psychostatically -psychostatics -psychosurgeon -psychosurgery -psychosynthesis -psychosynthetic -psychotaxis -psychotechnical -psychotechnician -psychotechnics -psychotechnological -psychotechnology -psychotheism -psychotherapeutic -psychotherapeutical -psychotherapeutics -psychotherapeutist -psychotherapist -psychotherapy -psychotic -psychotrine -psychovital -psychroesthesia -psychrograph -psychrometer -psychrometric -psychrometrical -psychrometry -psychrophile -psychrophilic -psychrophobia -psychrophore -psychrophyte -psychurgy -psykter -psylla -psyllid -psyllium -ptarmic -ptarmical -ptarmigan -ptenoglossate -pteranodont -pteraspid -ptereal -pterergate -pteric -pterideous -pteridium -pteridography -pteridoid -pteridological -pteridologist -pteridology -pteridophilism -pteridophilist -pteridophilistic -pteridophyte -pteridophytic -pteridophytous -pteridosperm -pteridospermaphytic -pteridospermous -pterion -pterobranchiate -pterocarpous -pteroclomorphic -pterodactyl -pterodactylian -pterodactylic -pterodactylid -pterodactyloid -pterodactylous -pterographer -pterographic -pterographical -pterography -pteroid -pteroma -pteromalid -pteropaedes -pteropaedic -pteropegal -pteropegous -pteropegum -pterophorid -pteropid -pteropine -pteropod -pteropodal -pteropodan -pteropodial -pteropodium -pteropodous -pterosaur -pterosaurian -pterospermous -pterostigma -pterostigmal -pterostigmatic -pterostigmatical -pterotheca -pterothorax -pterotic -pteroylglutamic -pterygial -pterygiophore -pterygium -pterygobranchiate -pterygode -pterygodum -pterygoid -pterygoidal -pterygoidean -pterygomalar -pterygomandibular -pterygomaxillary -pterygopalatal -pterygopalatine -pterygopharyngeal -pterygopharyngean -pterygophore -pterygopodium -pterygoquadrate -pterygosphenoid -pterygospinous -pterygostaphyline -pterygote -pterygotous -pterygotrabecular -pteryla -pterylographic -pterylographical -pterylography -pterylological -pterylology -pterylosis -ptilinal -ptilinum -ptilopaedes -ptilopaedic -ptilosis -ptinid -ptinoid -ptisan -ptochocracy -ptochogony -ptochology -ptomain -ptomaine -ptomainic -ptomatropine -ptosis -ptotic -ptyalagogic -ptyalagogue -ptyalectasis -ptyalin -ptyalism -ptyalize -ptyalocele -ptyalogenic -ptyalolith -ptyalolithiasis -ptyalorrhea -ptychoparid -ptychopariid -ptychopterygial -ptychopterygium -ptysmagogue -ptyxis -pu -pua -puan -pub -pubal -pubble -puberal -pubertal -pubertic -puberty -puberulent -puberulous -pubes -pubescence -pubescency -pubescent -pubian -pubic -pubigerous -pubiotomy -pubis -public -publican -publicanism -publication -publichearted -publicheartedness -publicism -publicist -publicity -publicize -publicly -publicness -publish -publishable -publisher -publisheress -publishership -publishment -pubococcygeal -pubofemoral -puboiliac -puboischiac -puboischial -puboischiatic -puboprostatic -puborectalis -pubotibial -pubourethral -pubovesical -pucciniaceous -puccinoid -puccoon -puce -pucelage -pucellas -pucelle -pucherite -puchero -puck -pucka -puckball -pucker -puckerbush -puckerel -puckerer -puckermouth -puckery -puckfist -puckish -puckishly -puckishness -puckle -pucklike -puckling -puckneedle -puckrel -puckster -pud -puddee -puddening -pudder -pudding -puddingberry -puddinghead -puddingheaded -puddinghouse -puddinglike -puddingwife -puddingy -puddle -puddled -puddlelike -puddler -puddling -puddly -puddock -puddy -pudency -pudenda -pudendal -pudendous -pudendum -pudent -pudge -pudgily -pudginess -pudgy -pudiano -pudibund -pudibundity -pudic -pudical -pudicitia -pudicity -pudsey -pudsy -pudu -pueblito -pueblo -puebloization -puebloize -puerer -puericulture -puerile -puerilely -puerileness -puerilism -puerility -puerman -puerpera -puerperal -puerperalism -puerperant -puerperium -puerperous -puerpery -puff -puffback -puffball -puffbird -puffed -puffer -puffery -puffily -puffin -puffiness -puffinet -puffing -puffingly -pufflet -puffwig -puffy -pug -pugged -pugger -puggi -pugginess -pugging -puggish -puggle -puggree -puggy -pugh -pugil -pugilant -pugilism -pugilist -pugilistic -pugilistical -pugilistically -puglianite -pugman -pugmill -pugmiller -pugnacious -pugnaciously -pugnaciousness -pugnacity -puisne -puissance -puissant -puissantly -puissantness -puist -puistie -puja -puka -pukatea -pukateine -puke -pukeko -puker -pukeweed -pukish -pukishness -pukras -puku -puky -pul -pulahan -pulahanism -pulasan -pulaskite -pulchrify -pulchritude -pulchritudinous -pule -pulegol -pulegone -puler -pulghere -puli -pulicarious -pulicat -pulicene -pulicid -pulicidal -pulicide -pulicine -pulicoid -pulicose -pulicosity -pulicous -puling -pulingly -pulish -pulk -pulka -pull -pullable -pullback -pullboat -pulldevil -pulldoo -pulldown -pulldrive -pullen -puller -pullery -pullet -pulley -pulleyless -pulli -pullorum -pullulant -pullulate -pullulation -pullus -pulmobranchia -pulmobranchial -pulmobranchiate -pulmocardiac -pulmocutaneous -pulmogastric -pulmometer -pulmometry -pulmonal -pulmonar -pulmonarian -pulmonary -pulmonate -pulmonated -pulmonectomy -pulmonic -pulmonifer -pulmoniferous -pulmonitis -pulmotracheal -pulmotracheary -pulmotracheate -pulp -pulpaceous -pulpal -pulpalgia -pulpamenta -pulpboard -pulpectomy -pulpefaction -pulper -pulpifier -pulpify -pulpily -pulpiness -pulpit -pulpital -pulpitarian -pulpiteer -pulpiter -pulpitful -pulpitic -pulpitical -pulpitically -pulpitis -pulpitish -pulpitism -pulpitize -pulpitless -pulpitly -pulpitolatry -pulpitry -pulpless -pulplike -pulpotomy -pulpous -pulpousness -pulpstone -pulpwood -pulpy -pulque -pulsant -pulsatance -pulsate -pulsatile -pulsatility -pulsation -pulsational -pulsative -pulsatively -pulsator -pulsatory -pulse -pulseless -pulselessly -pulselessness -pulselike -pulsellum -pulsidge -pulsific -pulsimeter -pulsion -pulsive -pulsojet -pulsometer -pultaceous -pulton -pulu -pulveraceous -pulverant -pulverate -pulveration -pulvereous -pulverin -pulverizable -pulverizate -pulverization -pulverizator -pulverize -pulverizer -pulverous -pulverulence -pulverulent -pulverulently -pulvic -pulvil -pulvillar -pulvilliform -pulvillus -pulvinar -pulvinarian -pulvinate -pulvinated -pulvinately -pulvination -pulvinic -pulviniform -pulvino -pulvinule -pulvinulus -pulvinus -pulviplume -pulwar -puly -puma -pumicate -pumice -pumiced -pumiceous -pumicer -pumiciform -pumicose -pummel -pummice -pump -pumpable -pumpage -pumpellyite -pumper -pumpernickel -pumpkin -pumpkinification -pumpkinify -pumpkinish -pumpkinity -pumple -pumpless -pumplike -pumpman -pumpsman -pumpwright -pun -puna -punaise -punalua -punaluan -punatoo -punch -punchable -punchboard -puncheon -puncher -punchinello -punching -punchless -punchlike -punchproof -punchy -punct -punctal -punctate -punctated -punctation -punctator -puncticular -puncticulate -puncticulose -punctiform -punctiliar -punctilio -punctiliomonger -punctiliosity -punctilious -punctiliously -punctiliousness -punctist -punctographic -punctual -punctualist -punctuality -punctually -punctualness -punctuate -punctuation -punctuational -punctuationist -punctuative -punctuator -punctuist -punctulate -punctulated -punctulation -punctule -punctulum -punctum -puncturation -puncture -punctured -punctureless -punctureproof -puncturer -pundigrion -pundit -pundita -punditic -punditically -punditry -pundonor -pundum -puneca -pung -punga -pungapung -pungar -pungence -pungency -pungent -pungently -punger -pungey -pungi -pungle -pungled -punicaceous -puniceous -punicial -punicin -punicine -punily -puniness -punish -punishability -punishable -punishableness -punishably -punisher -punishment -punishmentproof -punition -punitional -punitionally -punitive -punitively -punitiveness -punitory -punjum -punk -punkah -punketto -punkie -punkwood -punky -punless -punlet -punnable -punnage -punner -punnet -punnic -punnical -punnigram -punningly -punnology -punproof -punster -punstress -punt -punta -puntabout -puntal -puntel -punter -punti -puntil -puntist -punto -puntout -puntsman -punty -puny -punyish -punyism -pup -pupa -pupahood -pupal -puparial -puparium -pupate -pupation -pupelo -pupiferous -pupiform -pupigenous -pupigerous -pupil -pupilability -pupilage -pupilar -pupilate -pupildom -pupiled -pupilize -pupillarity -pupillary -pupilless -pupillometer -pupillometry -pupilloscope -pupilloscoptic -pupilloscopy -pupiparous -pupivore -pupivorous -pupoid -puppet -puppetdom -puppeteer -puppethood -puppetish -puppetism -puppetize -puppetlike -puppetly -puppetman -puppetmaster -puppetry -puppify -puppily -puppy -puppydom -puppyfish -puppyfoot -puppyhood -puppyish -puppyism -puppylike -puppysnatch -pupulo -pupunha -pur -purana -puranic -puraque -purblind -purblindly -purblindness -purchasability -purchasable -purchase -purchaser -purchasery -purdah -purdy -pure -pureblood -purebred -pured -puree -purehearted -purely -pureness -purer -purfle -purfled -purfler -purfling -purfly -purga -purgation -purgative -purgatively -purgatorial -purgatorian -purgatory -purge -purgeable -purger -purgery -purging -purificant -purification -purificative -purificator -purificatory -purifier -puriform -purify -purine -puriri -purism -purist -puristic -puristical -puritandom -puritanic -puritanical -puritanically -puritanicalness -puritanism -puritanlike -puritano -purity -purl -purler -purlhouse -purlicue -purlieu -purlieuman -purlin -purlman -purloin -purloiner -purohepatitis -purolymph -puromucous -purpart -purparty -purple -purplelip -purplely -purpleness -purplescent -purplewood -purplewort -purplish -purplishness -purply -purport -purportless -purpose -purposedly -purposeful -purposefully -purposefulness -purposeless -purposelessly -purposelessness -purposelike -purposely -purposer -purposive -purposively -purposiveness -purposivism -purposivist -purposivistic -purpresture -purpura -purpuraceous -purpurate -purpure -purpureal -purpurean -purpureous -purpurescent -purpuric -purpuriferous -purpuriform -purpurigenous -purpurin -purpurine -purpuriparous -purpurite -purpurize -purpurogallin -purpurogenous -purpuroid -purpuroxanthin -purr -purre -purree -purreic -purrel -purrer -purring -purringly -purrone -purry -purse -pursed -purseful -purseless -purselike -purser -pursership -pursily -pursiness -purslane -purslet -pursley -pursuable -pursual -pursuance -pursuant -pursuantly -pursue -pursuer -pursuit -pursuitmeter -pursuivant -pursy -purtenance -purulence -purulency -purulent -purulently -puruloid -purusha -purushartha -purvey -purveyable -purveyal -purveyance -purveyancer -purveyor -purveyoress -purview -purvoe -purwannah -pus -push -pushball -pushcart -pusher -pushful -pushfully -pushfulness -pushing -pushingly -pushingness -pushmobile -pushover -pushpin -pushwainling -pusillanimity -pusillanimous -pusillanimously -pusillanimousness -puss -pusscat -pussley -pusslike -pussy -pussycat -pussyfoot -pussyfooted -pussyfooter -pussyfooting -pussyfootism -pussytoe -pustulant -pustular -pustulate -pustulated -pustulation -pustulatous -pustule -pustuled -pustulelike -pustuliform -pustulose -pustulous -put -putage -putamen -putaminous -putanism -putation -putationary -putative -putatively -putback -putchen -putcher -puteal -putelee -puther -puthery -putid -putidly -putidness -putlog -putois -putredinal -putredinous -putrefacient -putrefactible -putrefaction -putrefactive -putrefactiveness -putrefiable -putrefier -putrefy -putresce -putrescence -putrescency -putrescent -putrescibility -putrescible -putrescine -putricide -putrid -putridity -putridly -putridness -putrifacted -putriform -putrilage -putrilaginous -putrilaginously -putschism -putschist -putt -puttee -putter -putterer -putteringly -puttier -puttock -putty -puttyblower -puttyhead -puttyhearted -puttylike -puttyroot -puttywork -puture -puxy -puzzle -puzzleation -puzzled -puzzledly -puzzledness -puzzledom -puzzlehead -puzzleheaded -puzzleheadedly -puzzleheadedness -puzzleman -puzzlement -puzzlepate -puzzlepated -puzzlepatedness -puzzler -puzzling -puzzlingly -puzzlingness -pya -pyal -pyarthrosis -pyche -pycnia -pycnial -pycnid -pycnidia -pycnidial -pycnidiophore -pycnidiospore -pycnidium -pycniospore -pycnite -pycnium -pycnoconidium -pycnodont -pycnodontoid -pycnogonid -pycnogonidium -pycnogonoid -pycnometer -pycnometochia -pycnometochic -pycnomorphic -pycnomorphous -pycnonotine -pycnosis -pycnospore -pycnosporic -pycnostyle -pycnotic -pyelectasis -pyelic -pyelitic -pyelitis -pyelocystitis -pyelogram -pyelograph -pyelographic -pyelography -pyelolithotomy -pyelometry -pyelonephritic -pyelonephritis -pyelonephrosis -pyeloplasty -pyeloscopy -pyelotomy -pyeloureterogram -pyemesis -pyemia -pyemic -pygal -pygalgia -pygarg -pygargus -pygidial -pygidid -pygidium -pygmaean -pygmoid -pygmy -pygmydom -pygmyhood -pygmyish -pygmyism -pygmyship -pygmyweed -pygobranchiate -pygofer -pygopagus -pygopod -pygopodine -pygopodous -pygostyle -pygostyled -pygostylous -pyic -pyin -pyjama -pyjamaed -pyke -pyknatom -pyknic -pyknotic -pyla -pylagore -pylangial -pylangium -pylar -pylephlebitic -pylephlebitis -pylethrombophlebitis -pylethrombosis -pylic -pylon -pyloralgia -pylorectomy -pyloric -pyloristenosis -pyloritis -pylorocleisis -pylorodilator -pylorogastrectomy -pyloroplasty -pyloroptosis -pyloroschesis -pyloroscirrhus -pyloroscopy -pylorospasm -pylorostenosis -pylorostomy -pylorus -pyobacillosis -pyocele -pyoctanin -pyocyanase -pyocyanin -pyocyst -pyocyte -pyodermatitis -pyodermatosis -pyodermia -pyodermic -pyogenesis -pyogenetic -pyogenic -pyogenin -pyogenous -pyohemothorax -pyoid -pyolabyrinthitis -pyolymph -pyometra -pyometritis -pyonephritis -pyonephrosis -pyonephrotic -pyopericarditis -pyopericardium -pyoperitoneum -pyoperitonitis -pyophagia -pyophthalmia -pyophylactic -pyoplania -pyopneumocholecystitis -pyopneumocyst -pyopneumopericardium -pyopneumoperitoneum -pyopneumoperitonitis -pyopneumothorax -pyopoiesis -pyopoietic -pyoptysis -pyorrhea -pyorrheal -pyorrheic -pyosalpingitis -pyosalpinx -pyosepticemia -pyosepticemic -pyosis -pyospermia -pyotherapy -pyothorax -pyotoxinemia -pyoureter -pyovesiculosis -pyoxanthose -pyr -pyracanth -pyracene -pyral -pyralid -pyralidan -pyralidid -pyralidiform -pyralis -pyraloid -pyramid -pyramidaire -pyramidal -pyramidale -pyramidalis -pyramidally -pyramidate -pyramidellid -pyramider -pyramides -pyramidia -pyramidic -pyramidical -pyramidically -pyramidicalness -pyramidion -pyramidize -pyramidlike -pyramidoattenuate -pyramidoidal -pyramidologist -pyramidoprismatic -pyramidwise -pyramoidal -pyran -pyranometer -pyranyl -pyrargyrite -pyrazine -pyrazole -pyrazoline -pyrazolone -pyrazolyl -pyre -pyrectic -pyrena -pyrene -pyrenematous -pyrenic -pyrenin -pyrenocarp -pyrenocarpic -pyrenocarpous -pyrenodean -pyrenodeine -pyrenodeous -pyrenoid -pyrenolichen -pyrenomycete -pyrenomycetous -pyrethrin -pyrethrum -pyretic -pyreticosis -pyretogenesis -pyretogenetic -pyretogenic -pyretogenous -pyretography -pyretology -pyretolysis -pyretotherapy -pyrewinkes -pyrex -pyrexia -pyrexial -pyrexic -pyrexical -pyrgeometer -pyrgocephalic -pyrgocephaly -pyrgoidal -pyrgologist -pyrgom -pyrheliometer -pyrheliometric -pyrheliometry -pyrheliophor -pyribole -pyridazine -pyridic -pyridine -pyridinium -pyridinize -pyridone -pyridoxine -pyridyl -pyriform -pyriformis -pyrimidine -pyrimidyl -pyritaceous -pyrite -pyrites -pyritic -pyritical -pyritiferous -pyritization -pyritize -pyritohedral -pyritohedron -pyritoid -pyritology -pyritous -pyro -pyroacetic -pyroacid -pyroantimonate -pyroantimonic -pyroarsenate -pyroarsenic -pyroarsenious -pyroarsenite -pyrobelonite -pyrobituminous -pyroborate -pyroboric -pyrocatechin -pyrocatechinol -pyrocatechol -pyrocatechuic -pyrocellulose -pyrochemical -pyrochemically -pyrochlore -pyrochromate -pyrochromic -pyrocinchonic -pyrocitric -pyroclastic -pyrocoll -pyrocollodion -pyrocomenic -pyrocondensation -pyroconductivity -pyrocotton -pyrocrystalline -pyroelectric -pyroelectricity -pyrogallate -pyrogallic -pyrogallol -pyrogen -pyrogenation -pyrogenesia -pyrogenesis -pyrogenetic -pyrogenetically -pyrogenic -pyrogenous -pyroglutamic -pyrognomic -pyrognostic -pyrognostics -pyrograph -pyrographer -pyrographic -pyrography -pyrogravure -pyroguaiacin -pyroheliometer -pyroid -pyrolaceous -pyrolater -pyrolatry -pyroligneous -pyrolignic -pyrolignite -pyrolignous -pyrolite -pyrollogical -pyrologist -pyrology -pyrolusite -pyrolysis -pyrolytic -pyrolyze -pyromachy -pyromagnetic -pyromancer -pyromancy -pyromania -pyromaniac -pyromaniacal -pyromantic -pyromeconic -pyromellitic -pyrometallurgy -pyrometamorphic -pyrometamorphism -pyrometer -pyrometric -pyrometrical -pyrometrically -pyrometry -pyromorphism -pyromorphite -pyromorphous -pyromotor -pyromucate -pyromucic -pyromucyl -pyronaphtha -pyrone -pyronine -pyronomics -pyronyxis -pyrope -pyropen -pyrophanite -pyrophanous -pyrophile -pyrophilous -pyrophobia -pyrophone -pyrophoric -pyrophorous -pyrophorus -pyrophosphate -pyrophosphoric -pyrophosphorous -pyrophotograph -pyrophotography -pyrophotometer -pyrophyllite -pyrophysalite -pyropuncture -pyropus -pyroracemate -pyroracemic -pyroscope -pyroscopy -pyrosis -pyrosmalite -pyrosome -pyrosomoid -pyrosphere -pyrostat -pyrostereotype -pyrostilpnite -pyrosulphate -pyrosulphite -pyrosulphuric -pyrosulphuryl -pyrotantalate -pyrotartaric -pyrotartrate -pyrotechnian -pyrotechnic -pyrotechnical -pyrotechnically -pyrotechnician -pyrotechnics -pyrotechnist -pyrotechny -pyroterebic -pyrotheology -pyrotic -pyrotoxin -pyrotritaric -pyrotritartric -pyrouric -pyrovanadate -pyrovanadic -pyroxanthin -pyroxene -pyroxenic -pyroxenite -pyroxmangite -pyroxonium -pyroxyle -pyroxylene -pyroxylic -pyroxylin -pyrrhic -pyrrhichian -pyrrhichius -pyrrhicist -pyrrhotine -pyrrhotism -pyrrhotist -pyrrhotite -pyrrhous -pyrrodiazole -pyrrol -pyrrole -pyrrolic -pyrrolidine -pyrrolidone -pyrrolidyl -pyrroline -pyrrolylene -pyrrophyllin -pyrroporphyrin -pyrrotriazole -pyrroyl -pyrryl -pyrrylene -pyruline -pyruloid -pyruvaldehyde -pyruvate -pyruvic -pyruvil -pyruvyl -pyrylium -pythogenesis -pythogenetic -pythogenic -pythogenous -python -pythoness -pythonic -pythonical -pythonid -pythoniform -pythonine -pythonism -pythonist -pythonize -pythonoid -pythonomorph -pythonomorphic -pythonomorphous -pyuria -pyvuril -pyx -pyxidate -pyxides -pyxidium -pyxie -pyxis -q -qasida -qere -qeri -qintar -qoph -qua -quab -quabird -quachil -quack -quackery -quackhood -quackish -quackishly -quackishness -quackism -quackle -quacksalver -quackster -quacky -quad -quadded -quaddle -quadmeter -quadra -quadrable -quadragenarian -quadragenarious -quadragesimal -quadragintesimal -quadral -quadrangle -quadrangled -quadrangular -quadrangularly -quadrangularness -quadrangulate -quadrans -quadrant -quadrantal -quadrantes -quadrantile -quadrantlike -quadrantly -quadrat -quadrate -quadrated -quadrateness -quadratic -quadratical -quadratically -quadratics -quadratiferous -quadratojugal -quadratomandibular -quadratosquamosal -quadratrix -quadratum -quadrature -quadratus -quadrauricular -quadrennia -quadrennial -quadrennially -quadrennium -quadriad -quadrialate -quadriannulate -quadriarticulate -quadriarticulated -quadribasic -quadric -quadricapsular -quadricapsulate -quadricarinate -quadricellular -quadricentennial -quadriceps -quadrichord -quadriciliate -quadricinium -quadricipital -quadricone -quadricorn -quadricornous -quadricostate -quadricotyledonous -quadricovariant -quadricrescentic -quadricrescentoid -quadricuspid -quadricuspidal -quadricuspidate -quadricycle -quadricycler -quadricyclist -quadridentate -quadridentated -quadriderivative -quadridigitate -quadriennial -quadriennium -quadrienniumutile -quadrifarious -quadrifariously -quadrifid -quadrifilar -quadrifocal -quadrifoil -quadrifoliate -quadrifoliolate -quadrifolious -quadrifolium -quadriform -quadrifrons -quadrifrontal -quadrifurcate -quadrifurcated -quadrifurcation -quadriga -quadrigabled -quadrigamist -quadrigate -quadrigatus -quadrigeminal -quadrigeminate -quadrigeminous -quadrigeminum -quadrigenarious -quadriglandular -quadrihybrid -quadrijugal -quadrijugate -quadrijugous -quadrilaminar -quadrilaminate -quadrilateral -quadrilaterally -quadrilateralness -quadrilingual -quadriliteral -quadrille -quadrilled -quadrillion -quadrillionth -quadrilobate -quadrilobed -quadrilocular -quadriloculate -quadrilogue -quadrilogy -quadrimembral -quadrimetallic -quadrimolecular -quadrimum -quadrinodal -quadrinomial -quadrinomical -quadrinominal -quadrinucleate -quadrioxalate -quadriparous -quadripartite -quadripartitely -quadripartition -quadripennate -quadriphosphate -quadriphyllous -quadripinnate -quadriplanar -quadriplegia -quadriplicate -quadriplicated -quadripolar -quadripole -quadriportico -quadriporticus -quadripulmonary -quadriquadric -quadriradiate -quadrireme -quadrisect -quadrisection -quadriseptate -quadriserial -quadrisetose -quadrispiral -quadristearate -quadrisulcate -quadrisulcated -quadrisulphide -quadrisyllabic -quadrisyllabical -quadrisyllable -quadrisyllabous -quadriternate -quadritubercular -quadrituberculate -quadriurate -quadrivalence -quadrivalency -quadrivalent -quadrivalently -quadrivalve -quadrivalvular -quadrivial -quadrivious -quadrivium -quadrivoltine -quadroon -quadrual -quadrum -quadrumanal -quadrumane -quadrumanous -quadruped -quadrupedal -quadrupedan -quadrupedant -quadrupedantic -quadrupedantical -quadrupedate -quadrupedation -quadrupedism -quadrupedous -quadruplane -quadruplator -quadruple -quadrupleness -quadruplet -quadruplex -quadruplicate -quadruplication -quadruplicature -quadruplicity -quadruply -quadrupole -quaedam -quaesitum -quaestor -quaestorial -quaestorian -quaestorship -quaestuary -quaff -quaffer -quaffingly -quag -quagga -quagginess -quaggle -quaggy -quagmire -quagmiry -quahog -quail -quailberry -quailery -quailhead -quaillike -quaily -quaint -quaintance -quaintise -quaintish -quaintly -quaintness -quake -quakeful -quakeproof -quaker -quakerbird -quaketail -quakiness -quaking -quakingly -quaky -quale -qualifiable -qualification -qualificative -qualificator -qualificatory -qualified -qualifiedly -qualifiedness -qualifier -qualify -qualifyingly -qualimeter -qualitative -qualitatively -qualitied -quality -qualityless -qualityship -qualm -qualminess -qualmish -qualmishly -qualmishness -qualmproof -qualmy -qualmyish -qualtagh -quan -quandary -quandong -quandy -quannet -quant -quanta -quantic -quantical -quantifiable -quantifiably -quantification -quantifier -quantify -quantimeter -quantitate -quantitative -quantitatively -quantitativeness -quantitied -quantitive -quantitively -quantity -quantivalence -quantivalency -quantivalent -quantization -quantize -quantometer -quantulum -quantum -quaquaversal -quaquaversally -quar -quarantinable -quarantine -quarantiner -quaranty -quardeel -quare -quarenden -quarender -quarentene -quark -quarl -quarle -quarred -quarrel -quarreled -quarreler -quarreling -quarrelingly -quarrelproof -quarrelsome -quarrelsomely -quarrelsomeness -quarriable -quarried -quarrier -quarry -quarryable -quarrying -quarryman -quarrystone -quart -quartan -quartane -quartation -quartenylic -quarter -quarterage -quarterback -quarterdeckish -quartered -quarterer -quartering -quarterization -quarterland -quarterly -quarterman -quartermaster -quartermasterlike -quartermastership -quartern -quarterpace -quarters -quartersaw -quartersawed -quarterspace -quarterstaff -quarterstetch -quartet -quartette -quartetto -quartful -quartic -quartile -quartine -quartiparous -quarto -quartodecimanism -quartole -quartz -quartzic -quartziferous -quartzite -quartzitic -quartzless -quartzoid -quartzose -quartzous -quartzy -quash -quashey -quashy -quasi -quasijudicial -quasky -quassation -quassative -quassiin -quassin -quat -quata -quatch -quatercentenary -quatern -quaternal -quaternarian -quaternarius -quaternary -quaternate -quaternion -quaternionic -quaternionist -quaternitarian -quaternity -quaters -quatertenses -quatorzain -quatorze -quatrain -quatral -quatrayle -quatre -quatrefeuille -quatrefoil -quatrefoiled -quatrefoliated -quatrible -quatrin -quatrino -quatrocentism -quatrocentist -quatrocento -quattie -quattrini -quatuor -quatuorvirate -quauk -quave -quaver -quaverer -quavering -quaveringly -quaverous -quavery -quaverymavery -quaw -quawk -quay -quayage -quayful -quaylike -quayman -quayside -quaysider -qubba -queach -queachy -queak -queal -quean -queanish -queasily -queasiness -queasom -queasy -quebrachamine -quebrachine -quebrachitol -quebracho -quebradilla -quedful -queechy -queen -queencake -queencraft -queencup -queendom -queenfish -queenhood -queening -queenite -queenless -queenlet -queenlike -queenliness -queenly -queenright -queenroot -queensberry -queenship -queenweed -queenwood -queer -queerer -queerish -queerishness -queerity -queerly -queerness -queersome -queery -queest -queesting -queet -queeve -quegh -quei -queintise -quelch -quell -queller -quemado -queme -quemeful -quemefully -quemely -quench -quenchable -quenchableness -quencher -quenchless -quenchlessly -quenchlessness -quenelle -quenselite -quercetagetin -quercetic -quercetin -quercetum -quercic -quercimeritrin -quercin -quercine -quercinic -quercitannic -quercitannin -quercite -quercitin -quercitol -quercitrin -quercitron -quercivorous -querent -querier -queriman -querimonious -querimoniously -querimoniousness -querimony -querist -querken -querl -quern -quernal -quernstone -querulent -querulential -querulist -querulity -querulosity -querulous -querulously -querulousness -query -querying -queryingly -queryist -quesited -quesitive -quest -quester -questeur -questful -questingly -question -questionability -questionable -questionableness -questionably -questionary -questionee -questioner -questioningly -questionist -questionless -questionlessly -questionnaire -questionous -questionwise -questman -questor -questorial -questorship -quet -quetch -quetenite -quetzal -queue -quey -quiapo -quib -quibble -quibbleproof -quibbler -quibblingly -quiblet -quica -quick -quickbeam -quickborn -quicken -quickenance -quickenbeam -quickener -quickfoot -quickhatch -quickhearted -quickie -quicklime -quickly -quickness -quicksand -quicksandy -quickset -quicksilver -quicksilvering -quicksilverish -quicksilverishness -quicksilvery -quickstep -quickthorn -quickwork -quid -quiddative -quidder -quiddit -quidditative -quidditatively -quiddity -quiddle -quiddler -quidnunc -quiesce -quiescence -quiescency -quiescent -quiescently -quiet -quietable -quieten -quietener -quieter -quieting -quietism -quietist -quietistic -quietive -quietlike -quietly -quietness -quietsome -quietude -quietus -quiff -quiffing -quiinaceous -quila -quiles -quilkin -quill -quillai -quillaic -quillaja -quillback -quilled -quiller -quillet -quilleted -quillfish -quilling -quilltail -quillwork -quillwort -quilly -quilt -quilted -quilter -quilting -quin -quina -quinacrine -quinaldic -quinaldine -quinaldinic -quinaldinium -quinaldyl -quinamicine -quinamidine -quinamine -quinanisole -quinaquina -quinarian -quinarius -quinary -quinate -quinatoxine -quinazoline -quinazolyl -quince -quincentenary -quincentennial -quincewort -quinch -quincubital -quincubitalism -quincuncial -quincuncially -quincunx -quincunxial -quindecad -quindecagon -quindecangle -quindecasyllabic -quindecemvir -quindecemvirate -quindecennial -quindecim -quindecima -quindecylic -quindene -quinetum -quingentenary -quinhydrone -quinia -quinible -quinic -quinicine -quinidia -quinidine -quinin -quinina -quinine -quininiazation -quininic -quininism -quininize -quiniretin -quinisext -quinisextine -quinism -quinite -quinitol -quinizarin -quinize -quink -quinnat -quinnet -quinoa -quinocarbonium -quinoform -quinogen -quinoid -quinoidal -quinoidation -quinoidine -quinol -quinoline -quinolinic -quinolinium -quinolinyl -quinologist -quinology -quinolyl -quinometry -quinone -quinonediimine -quinonic -quinonimine -quinonization -quinonize -quinonoid -quinonyl -quinopyrin -quinotannic -quinotoxine -quinova -quinovatannic -quinovate -quinovic -quinovin -quinovose -quinoxaline -quinoxalyl -quinoyl -quinquagenarian -quinquagenary -quinquagesimal -quinquarticular -quinquecapsular -quinquecostate -quinquedentate -quinquedentated -quinquefarious -quinquefid -quinquefoliate -quinquefoliated -quinquefoliolate -quinquegrade -quinquejugous -quinquelateral -quinqueliteral -quinquelobate -quinquelobated -quinquelobed -quinquelocular -quinqueloculine -quinquenary -quinquenerval -quinquenerved -quinquennalia -quinquennia -quinquenniad -quinquennial -quinquennialist -quinquennially -quinquennium -quinquepartite -quinquepedal -quinquepedalian -quinquepetaloid -quinquepunctal -quinquepunctate -quinqueradial -quinqueradiate -quinquereme -quinquertium -quinquesect -quinquesection -quinqueseptate -quinqueserial -quinqueseriate -quinquesyllabic -quinquesyllable -quinquetubercular -quinquetuberculate -quinquevalence -quinquevalency -quinquevalent -quinquevalve -quinquevalvous -quinquevalvular -quinqueverbal -quinqueverbial -quinquevir -quinquevirate -quinquiliteral -quinquina -quinquino -quinse -quinsied -quinsy -quinsyberry -quinsywort -quint -quintad -quintadena -quintadene -quintain -quintal -quintan -quintant -quintary -quintato -quinte -quintelement -quintennial -quinternion -quinteron -quinteroon -quintessence -quintessential -quintessentiality -quintessentially -quintessentiate -quintet -quintette -quintetto -quintic -quintile -quintillion -quintillionth -quintin -quintiped -quinto -quintocubital -quintocubitalism -quintole -quinton -quintroon -quintuple -quintuplet -quintuplicate -quintuplication -quintuplinerved -quintupliribbed -quintus -quinuclidine -quinyl -quinze -quinzieme -quip -quipful -quipo -quipper -quippish -quippishness -quippy -quipsome -quipsomeness -quipster -quipu -quira -quire -quirewise -quirinca -quiritarian -quiritary -quirk -quirkiness -quirkish -quirksey -quirksome -quirky -quirl -quirquincho -quirt -quis -quisby -quiscos -quisle -quisling -quisqueite -quisquilian -quisquiliary -quisquilious -quisquous -quisutsch -quit -quitch -quitclaim -quite -quitrent -quits -quittable -quittance -quitted -quitter -quittor -quiver -quivered -quiverer -quiverful -quivering -quiveringly -quiverish -quiverleaf -quivery -quixotic -quixotical -quixotically -quixotism -quixotize -quixotry -quiz -quizzability -quizzable -quizzacious -quizzatorial -quizzee -quizzer -quizzery -quizzical -quizzicality -quizzically -quizzicalness -quizzification -quizzify -quizziness -quizzingly -quizzish -quizzism -quizzity -quizzy -quo -quod -quoddies -quoddity -quodlibet -quodlibetal -quodlibetarian -quodlibetary -quodlibetic -quodlibetical -quodlibetically -quoilers -quoin -quoined -quoining -quoit -quoiter -quoitlike -quoits -quondam -quondamly -quondamship -quoniam -quop -quorum -quot -quota -quotability -quotable -quotableness -quotably -quotation -quotational -quotationally -quotationist -quotative -quote -quotee -quoteless -quotennial -quoter -quoteworthy -quoth -quotha -quotidian -quotidianly -quotidianness -quotient -quotiety -quotingly -quotity -quotlibet -quotum -r -ra -raad -raash -rab -raband -rabanna -rabat -rabatine -rabatte -rabattement -rabbanist -rabbanite -rabbet -rabbeting -rabbi -rabbin -rabbinate -rabbindom -rabbinic -rabbinical -rabbinically -rabbinism -rabbinist -rabbinistic -rabbinistical -rabbinite -rabbinize -rabbinship -rabbiship -rabbit -rabbitberry -rabbiter -rabbithearted -rabbitlike -rabbitmouth -rabbitproof -rabbitroot -rabbitry -rabbitskin -rabbitweed -rabbitwise -rabbitwood -rabbity -rabble -rabblelike -rabblement -rabbleproof -rabbler -rabblesome -rabboni -rabbonim -rabic -rabid -rabidity -rabidly -rabidness -rabies -rabietic -rabific -rabiform -rabigenic -rabinet -rabirubia -rabitic -rabulistic -rabulous -raccoon -raccoonberry -raccroc -race -raceabout -racebrood -racecourse -racegoer -racegoing -racelike -racemate -racemation -raceme -racemed -racemic -racemiferous -racemiform -racemism -racemization -racemize -racemocarbonate -racemocarbonic -racemomethylate -racemose -racemosely -racemous -racemously -racemule -racemulose -racer -raceway -rach -rache -rachial -rachialgia -rachialgic -rachianalgesia -rachianesthesia -rachicentesis -rachides -rachidial -rachidian -rachiform -rachiglossate -rachigraph -rachilla -rachiocentesis -rachiococainize -rachiocyphosis -rachiodont -rachiodynia -rachiometer -rachiomyelitis -rachioparalysis -rachioplegia -rachioscoliosis -rachiotome -rachiotomy -rachipagus -rachis -rachischisis -rachitic -rachitis -rachitism -rachitogenic -rachitome -rachitomous -rachitomy -racial -racialism -racialist -raciality -racialization -racialize -racially -racily -raciness -racing -racinglike -racism -racist -rack -rackabones -rackan -rackboard -racker -racket -racketeer -racketeering -racketer -racketing -racketlike -racketproof -racketry -rackett -rackettail -rackety -rackful -racking -rackingly -rackle -rackless -rackmaster -rackproof -rackrentable -rackway -rackwork -racloir -racon -raconteur -racoon -racy -rad -rada -radar -radarman -radarscope -raddle -raddleman -raddlings -radectomy -radiability -radiable -radial -radiale -radialia -radiality -radialization -radialize -radially -radian -radiance -radiancy -radiant -radiantly -radiate -radiated -radiately -radiateness -radiatics -radiatiform -radiation -radiational -radiative -radiatopatent -radiatoporose -radiatoporous -radiator -radiatory -radiatostriate -radiatosulcate -radiature -radical -radicalism -radicality -radicalization -radicalize -radically -radicalness -radicand -radicant -radicate -radicated -radicating -radication -radicel -radices -radicicola -radicicolous -radiciferous -radiciflorous -radiciform -radicivorous -radicle -radicolous -radicose -radicular -radicule -radiculectomy -radiculitis -radiculose -radiectomy -radiescent -radiferous -radii -radio -radioacoustics -radioactinium -radioactivate -radioactive -radioactively -radioactivity -radioamplifier -radioanaphylaxis -radioautograph -radioautographic -radioautography -radiobicipital -radiobroadcast -radiobroadcaster -radiobroadcasting -radiobserver -radiocarbon -radiocarpal -radiocast -radiocaster -radiochemical -radiochemistry -radiocinematograph -radioconductor -radiode -radiodermatitis -radiodetector -radiodiagnosis -radiodigital -radiodontia -radiodontic -radiodontist -radiodynamic -radiodynamics -radioelement -radiogenic -radiogoniometer -radiogoniometric -radiogoniometry -radiogram -radiograph -radiographer -radiographic -radiographical -radiographically -radiography -radiohumeral -radioisotope -radiolarian -radiolead -radiolite -radiolitic -radiolocation -radiolocator -radiologic -radiological -radiologist -radiology -radiolucency -radiolucent -radioluminescence -radioluminescent -radioman -radiomedial -radiometallography -radiometeorograph -radiometer -radiometric -radiometrically -radiometry -radiomicrometer -radiomovies -radiomuscular -radionecrosis -radioneuritis -radionics -radiopacity -radiopalmar -radiopaque -radiopelvimetry -radiophare -radiophone -radiophonic -radiophony -radiophosphorus -radiophotograph -radiophotography -radiopraxis -radioscope -radioscopic -radioscopical -radioscopy -radiosensibility -radiosensitive -radiosensitivity -radiosonde -radiosonic -radiostereoscopy -radiosurgery -radiosurgical -radiosymmetrical -radiotechnology -radiotelegram -radiotelegraph -radiotelegraphic -radiotelegraphy -radiotelephone -radiotelephonic -radiotelephony -radioteria -radiothallium -radiotherapeutic -radiotherapeutics -radiotherapeutist -radiotherapist -radiotherapy -radiothermy -radiothorium -radiotoxemia -radiotransparency -radiotransparent -radiotrician -radiotropic -radiotropism -radiovision -radish -radishlike -radium -radiumization -radiumize -radiumlike -radiumproof -radiumtherapy -radius -radix -radknight -radman -radome -radon -radsimir -radula -radulate -raduliferous -raduliform -raff -raffe -raffee -raffery -raffia -raffinase -raffinate -raffing -raffinose -raffish -raffishly -raffishness -raffle -raffler -rafflesia -rafflesiaceous -raft -raftage -rafter -raftiness -raftlike -raftman -raftsman -rafty -rag -raga -ragabash -ragabrash -ragamuffin -ragamuffinism -ragamuffinly -rage -rageful -ragefully -rageless -rageous -rageously -rageousness -rageproof -rager -ragesome -ragfish -ragged -raggedly -raggedness -raggedy -raggee -ragger -raggery -raggety -raggil -raggily -ragging -raggle -raggled -raggy -raghouse -raging -ragingly -raglan -raglanite -raglet -raglin -ragman -ragout -ragpicker -ragseller -ragshag -ragsorter -ragstone -ragtag -ragtime -ragtimer -ragtimey -ragule -raguly -ragweed -ragwort -rah -rahdar -rahdaree -raia -raid -raider -raidproof -raiiform -rail -railage -railbird -railer -railhead -railing -railingly -raillery -railless -raillike -railly -railman -railroad -railroadana -railroader -railroadiana -railroading -railroadish -railroadship -railway -railwaydom -railwayless -raiment -raimentless -rain -rainband -rainbird -rainbound -rainbow -rainbowlike -rainbowweed -rainbowy -rainburst -raincoat -raindrop -rainer -rainfall -rainfowl -rainful -rainily -raininess -rainless -rainlessness -rainlight -rainproof -rainproofer -rainspout -rainstorm -raintight -rainwash -rainworm -rainy -raioid -rais -raisable -raise -raised -raiseman -raiser -raisin -raising -raisiny -raj -raja -rajah -rajaship -rajbansi -rakan -rake -rakeage -rakeful -rakehell -rakehellish -rakehelly -raker -rakery -rakesteel -rakestele -rakh -raki -rakily -raking -rakish -rakishly -rakishness -rakit -rakshasa -raku -rallentando -ralliance -rallier -ralliform -ralline -rally -ralph -ralstonite -ram -ramada -ramage -ramal -ramanas -ramarama -ramass -ramate -rambeh -ramberge -ramble -rambler -rambling -ramblingly -ramblingness -rambong -rambooze -rambunctious -rambutan -ramdohrite -rame -rameal -ramed -ramekin -ramellose -rament -ramentaceous -ramental -ramentiferous -ramentum -rameous -ramequin -ramet -ramex -ramfeezled -ramgunshoch -ramhead -ramhood -rami -ramicorn -ramie -ramiferous -ramificate -ramification -ramified -ramiflorous -ramiform -ramify -ramigerous -ramiparous -ramisection -ramisectomy -ramlike -ramline -rammack -rammel -rammelsbergite -rammer -rammerman -rammish -rammishly -rammishness -rammy -ramose -ramosely -ramosity -ramosopalmate -ramosopinnate -ramososubdivided -ramous -ramp -rampacious -rampaciously -rampage -rampageous -rampageously -rampageousness -rampager -rampagious -rampancy -rampant -rampantly -rampart -ramped -ramper -rampick -rampike -ramping -rampingly -rampion -rampire -rampler -ramplor -rampsman -ramrace -ramrod -ramroddy -ramscallion -ramsch -ramshackle -ramshackled -ramshackleness -ramshackly -ramson -ramstam -ramtil -ramular -ramule -ramuliferous -ramulose -ramulous -ramulus -ramus -ramuscule -ran -rana -ranal -ranarian -ranarium -rance -rancel -rancellor -rancelman -rancer -rancescent -ranch -ranche -rancher -rancheria -ranchero -ranchless -ranchman -rancho -ranchwoman -rancid -rancidification -rancidify -rancidity -rancidly -rancidness -rancor -rancorous -rancorously -rancorousness -rancorproof -rand -randan -randannite -randem -rander -randing -randir -randle -random -randomish -randomization -randomize -randomly -randomness -randomwise -randy -rane -rang -rangatira -range -ranged -rangeless -rangeman -ranger -rangership -rangework -rangey -rangiferine -ranginess -ranging -rangle -rangler -rangy -rani -ranid -raniferous -raniform -ranine -raninian -ranivorous -rank -ranked -ranker -rankish -rankle -rankless -ranklingly -rankly -rankness -ranksman -rankwise -rann -rannel -rannigal -ranny -ransack -ransacker -ransackle -ransel -ranselman -ransom -ransomable -ransomer -ransomfree -ransomless -ranstead -rant -rantan -rantankerous -rantepole -ranter -ranting -rantingly -rantipole -rantock -ranty -ranula -ranular -ranunculaceous -ranunculi -rap -rapaceus -rapacious -rapaciously -rapaciousness -rapacity -rapakivi -rapateaceous -rape -rapeful -raper -rapeseed -raphania -raphany -raphe -raphide -raphides -raphidiferous -raphidiid -raphis -rapic -rapid -rapidity -rapidly -rapidness -rapier -rapiered -rapillo -rapine -rapiner -raping -rapinic -rapist -raploch -rappage -rapparee -rappe -rappel -rapper -rapping -rappist -rapport -rapscallion -rapscallionism -rapscallionly -rapscallionry -rapt -raptatorial -raptatory -raptly -raptness -raptor -raptorial -raptorious -raptril -rapture -raptured -raptureless -rapturist -rapturize -rapturous -rapturously -rapturousness -raptury -raptus -rare -rarebit -rarefaction -rarefactional -rarefactive -rarefiable -rarefication -rarefier -rarefy -rarely -rareness -rareripe -rariconstant -rarish -rarity -ras -rasa -rasamala -rasant -rascacio -rascal -rascaldom -rascaless -rascalion -rascalism -rascality -rascalize -rascallike -rascallion -rascally -rascalry -rascalship -rasceta -rascette -rase -rasen -raser -rasgado -rash -rasher -rashful -rashing -rashlike -rashly -rashness -rasion -rasorial -rasp -raspatorium -raspatory -raspberriade -raspberry -raspberrylike -rasped -rasper -rasping -raspingly -raspingness -raspings -raspish -raspite -raspy -rasse -rassle -raster -rastik -rastle -rasure -rat -rata -ratability -ratable -ratableness -ratably -ratafee -ratafia -ratal -ratanhia -rataplan -ratbite -ratcatcher -ratcatching -ratch -ratchel -ratchelly -ratcher -ratchet -ratchetlike -ratchety -ratching -ratchment -rate -rated -ratel -rateless -ratement -ratepayer -ratepaying -rater -ratfish -rath -rathe -rathed -rathely -ratheness -rather -ratherest -ratheripe -ratherish -ratherly -rathest -rathite -rathole -rathskeller -raticidal -raticide -ratification -ratificationist -ratifier -ratify -ratihabition -ratine -rating -ratio -ratiocinant -ratiocinate -ratiocination -ratiocinative -ratiocinator -ratiocinatory -ratiometer -ration -rationable -rationably -rational -rationale -rationalism -rationalist -rationalistic -rationalistical -rationalistically -rationalisticism -rationality -rationalizable -rationalization -rationalize -rationalizer -rationally -rationalness -rationate -rationless -rationment -ratite -ratitous -ratlike -ratline -ratliner -ratoon -ratooner -ratproof -ratsbane -ratskeller -rattage -rattail -rattan -ratteen -ratten -rattener -ratter -rattery -ratti -rattinet -rattish -rattle -rattlebag -rattlebones -rattlebox -rattlebrain -rattlebrained -rattlebush -rattled -rattlehead -rattleheaded -rattlejack -rattlemouse -rattlenut -rattlepate -rattlepated -rattlepod -rattleproof -rattler -rattleran -rattleroot -rattlertree -rattles -rattleskull -rattleskulled -rattlesnake -rattlesome -rattletrap -rattleweed -rattlewort -rattling -rattlingly -rattlingness -rattly -ratton -rattoner -rattrap -ratty -ratwa -ratwood -raucid -raucidity -raucity -raucous -raucously -raucousness -raught -raugrave -rauk -raukle -rauli -raun -raunge -raupo -rauque -ravage -ravagement -ravager -rave -ravehook -raveinelike -ravel -raveler -ravelin -raveling -ravelly -ravelment -ravelproof -raven -ravendom -ravenduck -ravener -ravenhood -ravening -ravenish -ravenlike -ravenous -ravenously -ravenousness -ravenry -ravens -ravensara -ravenstone -ravenwise -raver -ravigote -ravin -ravinate -ravine -ravined -ravinement -raviney -raving -ravingly -ravioli -ravish -ravishedly -ravisher -ravishing -ravishingly -ravishment -ravison -ravissant -raw -rawboned -rawbones -rawhead -rawhide -rawhider -rawish -rawishness -rawness -rax -ray -raya -rayage -rayed -rayful -rayless -raylessness -raylet -rayon -rayonnance -rayonnant -raze -razee -razer -razoo -razor -razorable -razorback -razorbill -razoredge -razorless -razormaker -razormaking -razorman -razorstrop -razz -razzia -razzly -re -rea -reaal -reabandon -reabolish -reabolition -reabridge -reabsence -reabsent -reabsolve -reabsorb -reabsorption -reabuse -reacceptance -reaccess -reaccession -reacclimatization -reacclimatize -reaccommodate -reaccompany -reaccomplish -reaccomplishment -reaccord -reaccost -reaccount -reaccredit -reaccrue -reaccumulate -reaccumulation -reaccusation -reaccuse -reaccustom -reacetylation -reach -reachable -reacher -reachieve -reachievement -reaching -reachless -reachy -reacidification -reacidify -reacknowledge -reacknowledgment -reacquaint -reacquaintance -reacquire -reacquisition -react -reactance -reactant -reaction -reactional -reactionally -reactionariness -reactionarism -reactionarist -reactionary -reactionaryism -reactionism -reactionist -reactivate -reactivation -reactive -reactively -reactiveness -reactivity -reactological -reactology -reactor -reactualization -reactualize -reactuate -read -readability -readable -readableness -readably -readapt -readaptability -readaptable -readaptation -readaptive -readaptiveness -readd -readdition -readdress -reader -readerdom -readership -readhere -readhesion -readily -readiness -reading -readingdom -readjourn -readjournment -readjudicate -readjust -readjustable -readjuster -readjustment -readmeasurement -readminister -readmiration -readmire -readmission -readmit -readmittance -readopt -readoption -readorn -readvance -readvancement -readvent -readventure -readvertency -readvertise -readvertisement -readvise -readvocate -ready -reaeration -reaffect -reaffection -reaffiliate -reaffiliation -reaffirm -reaffirmance -reaffirmation -reaffirmer -reafflict -reafford -reafforest -reafforestation -reaffusion -reagency -reagent -reaggravate -reaggravation -reaggregate -reaggregation -reaggressive -reagin -reagitate -reagitation -reagree -reagreement -reak -real -realarm -reales -realest -realgar -realienate -realienation -realign -realignment -realism -realist -realistic -realistically -realisticize -reality -realive -realizability -realizable -realizableness -realizably -realization -realize -realizer -realizing -realizingly -reallegation -reallege -reallegorize -realliance -reallocate -reallocation -reallot -reallotment -reallow -reallowance -reallude -reallusion -really -realm -realmless -realmlet -realness -realter -realteration -realtor -realty -ream -reamage -reamalgamate -reamalgamation -reamass -reambitious -reamend -reamendment -reamer -reamerer -reaminess -reamputation -reamuse -reamy -reanalysis -reanalyze -reanchor -reanimalize -reanimate -reanimation -reanneal -reannex -reannexation -reannotate -reannounce -reannouncement -reannoy -reannoyance -reanoint -reanswer -reanvil -reanxiety -reap -reapable -reapdole -reaper -reapologize -reapology -reapparel -reapparition -reappeal -reappear -reappearance -reappease -reapplaud -reapplause -reappliance -reapplicant -reapplication -reapplier -reapply -reappoint -reappointment -reapportion -reapportionment -reapposition -reappraisal -reappraise -reappraisement -reappreciate -reappreciation -reapprehend -reapprehension -reapproach -reapprobation -reappropriate -reappropriation -reapproval -reapprove -rear -rearbitrate -rearbitration -rearer -reargue -reargument -rearhorse -rearisal -rearise -rearling -rearm -rearmament -rearmost -rearousal -rearouse -rearrange -rearrangeable -rearrangement -rearranger -rearray -rearrest -rearrival -rearrive -rearward -rearwardly -rearwardness -rearwards -reascend -reascendancy -reascendant -reascendency -reascendent -reascension -reascensional -reascent -reascertain -reascertainment -reashlar -reasiness -reask -reason -reasonability -reasonable -reasonableness -reasonably -reasoned -reasonedly -reasoner -reasoning -reasoningly -reasonless -reasonlessly -reasonlessness -reasonproof -reaspire -reassail -reassault -reassay -reassemblage -reassemble -reassembly -reassent -reassert -reassertion -reassertor -reassess -reassessment -reasseverate -reassign -reassignation -reassignment -reassimilate -reassimilation -reassist -reassistance -reassociate -reassociation -reassort -reassortment -reassume -reassumption -reassurance -reassure -reassured -reassuredly -reassurement -reassurer -reassuring -reassuringly -reastiness -reastonish -reastonishment -reastray -reasty -reasy -reattach -reattachment -reattack -reattain -reattainment -reattempt -reattend -reattendance -reattention -reattentive -reattest -reattire -reattract -reattraction -reattribute -reattribution -reatus -reaudit -reauthenticate -reauthentication -reauthorization -reauthorize -reavail -reavailable -reave -reaver -reavoid -reavoidance -reavouch -reavow -reawait -reawake -reawaken -reawakening -reawakenment -reaward -reaware -reb -rebab -reback -rebag -rebait -rebake -rebalance -rebale -reballast -reballot -reban -rebandage -rebanish -rebanishment -rebankrupt -rebankruptcy -rebaptism -rebaptismal -rebaptization -rebaptize -rebaptizer -rebar -rebarbarization -rebarbarize -rebarbative -rebargain -rebase -rebasis -rebatable -rebate -rebateable -rebatement -rebater -rebathe -rebato -rebawl -rebeamer -rebear -rebeat -rebeautify -rebec -rebeck -rebecome -rebed -rebeg -rebeget -rebeggar -rebegin -rebeginner -rebeginning -rebeguile -rebehold -rebel -rebeldom -rebelief -rebelieve -rebeller -rebellike -rebellion -rebellious -rebelliously -rebelliousness -rebellow -rebelly -rebelong -rebelove -rebelproof -rebemire -rebend -rebenediction -rebenefit -rebeset -rebesiege -rebestow -rebestowal -rebetake -rebetray -rebewail -rebia -rebias -rebid -rebill -rebillet -rebilling -rebind -rebirth -rebite -reblade -reblame -reblast -rebleach -reblend -rebless -reblock -rebloom -reblossom -reblot -reblow -reblue -rebluff -reblunder -reboant -reboantic -reboard -reboast -rebob -reboil -reboiler -reboise -reboisement -rebold -rebolt -rebone -rebook -rebop -rebore -reborn -reborrow -rebottle -rebounce -rebound -reboundable -rebounder -reboundingness -rebourbonize -rebox -rebrace -rebraid -rebranch -rebrand -rebrandish -rebreathe -rebreed -rebrew -rebribe -rebrick -rebridge -rebring -rebringer -rebroach -rebroadcast -rebronze -rebrown -rebrush -rebrutalize -rebubble -rebuckle -rebud -rebudget -rebuff -rebuffable -rebuffably -rebuffet -rebuffproof -rebuild -rebuilder -rebuilt -rebukable -rebuke -rebukeable -rebukeful -rebukefully -rebukefulness -rebukeproof -rebuker -rebukingly -rebulk -rebunch -rebundle -rebunker -rebuoy -rebuoyage -reburden -reburgeon -reburial -reburn -reburnish -reburst -rebury -rebus -rebush -rebusy -rebut -rebute -rebutment -rebuttable -rebuttal -rebutter -rebutton -rebuy -recable -recadency -recage -recalcination -recalcine -recalcitrance -recalcitrant -recalcitrate -recalcitration -recalculate -recalculation -recalesce -recalescence -recalescent -recalibrate -recalibration -recalk -recall -recallable -recallist -recallment -recampaign -recancel -recancellation -recandescence -recandidacy -recant -recantation -recanter -recantingly -recanvas -recap -recapacitate -recapitalization -recapitalize -recapitulate -recapitulation -recapitulationist -recapitulative -recapitulator -recapitulatory -recappable -recapper -recaption -recaptivate -recaptivation -recaptor -recapture -recapturer -recarbon -recarbonate -recarbonation -recarbonization -recarbonize -recarbonizer -recarburization -recarburize -recarburizer -recarnify -recarpet -recarriage -recarrier -recarry -recart -recarve -recase -recash -recasket -recast -recaster -recasting -recatalogue -recatch -recaulescence -recausticize -recce -recco -reccy -recede -recedence -recedent -receder -receipt -receiptable -receiptless -receiptor -receipts -receivability -receivable -receivables -receivablness -receival -receive -received -receivedness -receiver -receivership -recelebrate -recelebration -recement -recementation -recency -recense -recension -recensionist -recensor -recensure -recensus -recent -recenter -recently -recentness -recentralization -recentralize -recentre -recept -receptacle -receptacular -receptaculite -receptaculitid -receptaculitoid -receptaculum -receptant -receptibility -receptible -reception -receptionism -receptionist -receptitious -receptive -receptively -receptiveness -receptivity -receptor -receptoral -receptorial -receptual -receptually -recercelee -recertificate -recertify -recess -recesser -recession -recessional -recessionary -recessive -recessively -recessiveness -recesslike -recessor -rechafe -rechain -rechal -rechallenge -rechamber -rechange -rechant -rechaos -rechar -recharge -recharter -rechase -rechaser -rechasten -rechaw -recheat -recheck -recheer -recherche -rechew -rechip -rechisel -rechoose -rechristen -rechuck -rechurn -recidivation -recidive -recidivism -recidivist -recidivistic -recidivity -recidivous -recipe -recipiangle -recipience -recipiency -recipiend -recipiendary -recipient -recipiomotor -reciprocable -reciprocal -reciprocality -reciprocalize -reciprocally -reciprocalness -reciprocate -reciprocation -reciprocative -reciprocator -reciprocatory -reciprocitarian -reciprocity -recircle -recirculate -recirculation -recision -recission -recissory -recitable -recital -recitalist -recitatif -recitation -recitationalism -recitationist -recitative -recitatively -recitativical -recitativo -recite -recitement -reciter -recivilization -recivilize -reck -reckla -reckless -recklessly -recklessness -reckling -reckon -reckonable -reckoner -reckoning -reclaim -reclaimable -reclaimableness -reclaimably -reclaimant -reclaimer -reclaimless -reclaimment -reclama -reclamation -reclang -reclasp -reclass -reclassification -reclassify -reclean -recleaner -recleanse -reclear -reclearance -reclimb -reclinable -reclinate -reclinated -reclination -recline -recliner -reclose -reclothe -reclothing -recluse -reclusely -recluseness -reclusery -reclusion -reclusive -reclusiveness -reclusory -recoach -recoagulation -recoal -recoast -recoat -recock -recoct -recoction -recode -recodification -recodify -recogitate -recogitation -recognition -recognitive -recognitor -recognitory -recognizability -recognizable -recognizably -recognizance -recognizant -recognize -recognizedly -recognizee -recognizer -recognizingly -recognizor -recognosce -recohabitation -recoil -recoiler -recoilingly -recoilment -recoin -recoinage -recoiner -recoke -recollapse -recollate -recollation -recollectable -recollected -recollectedly -recollectedness -recollectible -recollection -recollective -recollectively -recollectiveness -recolonization -recolonize -recolor -recomb -recombination -recombine -recomember -recomfort -recommand -recommence -recommencement -recommencer -recommend -recommendability -recommendable -recommendableness -recommendably -recommendation -recommendatory -recommendee -recommender -recommission -recommit -recommitment -recommittal -recommunicate -recommunion -recompact -recompare -recomparison -recompass -recompel -recompensable -recompensate -recompensation -recompense -recompenser -recompensive -recompete -recompetition -recompetitor -recompilation -recompile -recompilement -recomplain -recomplaint -recomplete -recompletion -recompliance -recomplicate -recomplication -recomply -recompose -recomposer -recomposition -recompound -recomprehend -recomprehension -recompress -recompression -recomputation -recompute -recon -reconceal -reconcealment -reconcede -reconceive -reconcentrate -reconcentration -reconception -reconcert -reconcession -reconcilability -reconcilable -reconcilableness -reconcilably -reconcile -reconcilee -reconcileless -reconcilement -reconciler -reconciliability -reconciliable -reconciliate -reconciliation -reconciliative -reconciliator -reconciliatory -reconciling -reconcilingly -reconclude -reconclusion -reconcoct -reconcrete -reconcur -recondemn -recondemnation -recondensation -recondense -recondite -reconditely -reconditeness -recondition -recondole -reconduct -reconduction -reconfer -reconfess -reconfide -reconfine -reconfinement -reconfirm -reconfirmation -reconfiscate -reconfiscation -reconform -reconfound -reconfront -reconfuse -reconfusion -recongeal -recongelation -recongest -recongestion -recongratulate -recongratulation -reconjoin -reconjunction -reconnaissance -reconnect -reconnection -reconnoissance -reconnoiter -reconnoiterer -reconnoiteringly -reconnoitre -reconnoitrer -reconnoitringly -reconquer -reconqueror -reconquest -reconsecrate -reconsecration -reconsent -reconsider -reconsideration -reconsign -reconsignment -reconsole -reconsolidate -reconsolidation -reconstituent -reconstitute -reconstitution -reconstruct -reconstructed -reconstruction -reconstructional -reconstructionary -reconstructionist -reconstructive -reconstructiveness -reconstructor -reconstrue -reconsult -reconsultation -recontact -recontemplate -recontemplation -recontend -recontest -recontinuance -recontinue -recontract -recontraction -recontrast -recontribute -recontribution -recontrivance -recontrive -recontrol -reconvalesce -reconvalescence -reconvalescent -reconvene -reconvention -reconventional -reconverge -reconverse -reconversion -reconvert -reconvertible -reconvey -reconveyance -reconvict -reconviction -reconvince -reconvoke -recook -recool -recooper -recopper -recopy -recopyright -record -recordable -recordant -recordation -recordative -recordatively -recordatory -recordedly -recorder -recordership -recording -recordist -recordless -recork -recorporification -recorporify -recorrect -recorrection -recorrupt -recorruption -recostume -recounsel -recount -recountable -recountal -recountenance -recounter -recountless -recoup -recoupable -recouper -recouple -recoupment -recourse -recover -recoverability -recoverable -recoverableness -recoverance -recoveree -recoverer -recoveringly -recoverless -recoveror -recovery -recramp -recrank -recrate -recreance -recreancy -recreant -recreantly -recreantness -recrease -recreate -recreation -recreational -recreationist -recreative -recreatively -recreativeness -recreator -recreatory -recredit -recrement -recremental -recrementitial -recrementitious -recrescence -recrew -recriminate -recrimination -recriminative -recriminator -recriminatory -recriticize -recroon -recrop -recross -recrowd -recrown -recrucify -recrudency -recrudesce -recrudescence -recrudescency -recrudescent -recruit -recruitable -recruitage -recruital -recruitee -recruiter -recruithood -recruiting -recruitment -recruity -recrush -recrusher -recrystallization -recrystallize -rect -recta -rectal -rectalgia -rectally -rectangle -rectangled -rectangular -rectangularity -rectangularly -rectangularness -rectangulate -rectangulometer -rectectomy -recti -rectifiable -rectification -rectificative -rectificator -rectificatory -rectified -rectifier -rectify -rectigrade -rectilineal -rectilineally -rectilinear -rectilinearism -rectilinearity -rectilinearly -rectilinearness -rectilineation -rectinerved -rection -rectipetality -rectirostral -rectischiac -rectiserial -rectitic -rectitis -rectitude -rectitudinous -recto -rectoabdominal -rectocele -rectoclysis -rectococcygeal -rectococcygeus -rectocolitic -rectocolonic -rectocystotomy -rectogenital -rectopexy -rectoplasty -rector -rectoral -rectorate -rectoress -rectorial -rectorrhaphy -rectorship -rectory -rectoscope -rectoscopy -rectosigmoid -rectostenosis -rectostomy -rectotome -rectotomy -rectovaginal -rectovesical -rectress -rectricial -rectrix -rectum -rectus -recubant -recubate -recultivate -recultivation -recumbence -recumbency -recumbent -recumbently -recuperability -recuperance -recuperate -recuperation -recuperative -recuperativeness -recuperator -recuperatory -recur -recure -recureful -recureless -recurl -recurrence -recurrency -recurrent -recurrently -recurrer -recurring -recurringly -recurse -recursion -recursive -recurtain -recurvant -recurvate -recurvation -recurvature -recurve -recurvirostral -recurvopatent -recurvoternate -recurvous -recusance -recusancy -recusant -recusation -recusative -recusator -recuse -recushion -recussion -recut -recycle -red -redact -redaction -redactional -redactor -redactorial -redamage -redamnation -redan -redare -redargue -redargution -redargutive -redargutory -redarken -redarn -redart -redate -redaub -redawn -redback -redbait -redbeard -redbelly -redberry -redbill -redbird -redbone -redbreast -redbrush -redbuck -redbud -redcap -redcoat -redd -redden -reddendo -reddendum -reddening -redder -redding -reddingite -reddish -reddishness -reddition -reddleman -reddock -reddsman -reddy -rede -redeal -redebate -redebit -redeceive -redecide -redecimate -redecision -redeck -redeclaration -redeclare -redecline -redecorate -redecoration -redecrease -redecussate -rededicate -rededication -rededicatory -rededuct -rededuction -redeed -redeem -redeemability -redeemable -redeemableness -redeemably -redeemer -redeemeress -redeemership -redeemless -redefault -redefeat -redefecate -redefer -redefiance -redefine -redefinition -redeflect -redefy -redeify -redelay -redelegate -redelegation -redeliberate -redeliberation -redeliver -redeliverance -redeliverer -redelivery -redemand -redemandable -redemise -redemolish -redemonstrate -redemonstration -redemptible -redemption -redemptional -redemptioner -redemptionless -redemptive -redemptively -redemptor -redemptorial -redemptory -redemptress -redemptrice -redenigrate -redeny -redepend -redeploy -redeployment -redeposit -redeposition -redepreciate -redepreciation -redeprive -rederivation -redescend -redescent -redescribe -redescription -redesertion -redeserve -redesign -redesignate -redesignation -redesire -redesirous -redesman -redespise -redetect -redetention -redetermination -redetermine -redevelop -redeveloper -redevelopment -redevise -redevote -redevotion -redeye -redfin -redfinch -redfish -redfoot -redhead -redheaded -redheadedly -redheadedness -redhearted -redhibition -redhibitory -redhoop -redia -redictate -redictation -redient -redifferentiate -redifferentiation -redig -redigest -redigestion -rediminish -redingote -redintegrate -redintegration -redintegrative -redintegrator -redip -redipper -redirect -redirection -redisable -redisappear -redisburse -redisbursement -redischarge -rediscipline -rediscount -rediscourage -rediscover -rediscoverer -rediscovery -rediscuss -rediscussion -redisembark -redismiss -redispatch -redispel -redisperse -redisplay -redispose -redisposition -redispute -redissect -redissection -redisseise -redisseisin -redisseisor -redisseize -redisseizin -redisseizor -redissoluble -redissolution -redissolvable -redissolve -redistend -redistill -redistillation -redistiller -redistinguish -redistrain -redistrainer -redistribute -redistributer -redistribution -redistributive -redistributor -redistributory -redistrict -redisturb -redive -rediversion -redivert -redivertible -redivide -redivision -redivive -redivivous -redivivus -redivorce -redivorcement -redivulge -redivulgence -redjacket -redknees -redleg -redlegs -redly -redmouth -redness -redo -redock -redocket -redolence -redolency -redolent -redolently -redominate -redondilla -redoom -redouble -redoublement -redoubler -redoubling -redoubt -redoubtable -redoubtableness -redoubtably -redoubted -redound -redowa -redox -redpoll -redraft -redrag -redrape -redraw -redrawer -redream -redredge -redress -redressable -redressal -redresser -redressible -redressive -redressless -redressment -redressor -redrill -redrive -redroot -redry -redsear -redshank -redshirt -redskin -redstart -redstreak -redtab -redtail -redthroat -redtop -redub -redubber -reduce -reduceable -reduceableness -reduced -reducement -reducent -reducer -reducibility -reducible -reducibleness -reducibly -reducing -reduct -reductant -reductase -reductibility -reduction -reductional -reductionism -reductionist -reductionistic -reductive -reductively -reductor -reductorial -redue -redundance -redundancy -redundant -redundantly -reduplicate -reduplication -reduplicative -reduplicatively -reduplicatory -reduplicature -reduviid -reduvioid -redux -redward -redware -redweed -redwing -redwithe -redwood -redye -ree -reechy -reed -reedbird -reedbuck -reedbush -reeded -reeden -reeder -reediemadeasy -reedily -reediness -reeding -reedish -reedition -reedless -reedlike -reedling -reedmaker -reedmaking -reedman -reedplot -reedwork -reedy -reef -reefable -reefer -reefing -reefy -reek -reeker -reekingly -reeky -reel -reelable -reeled -reeler -reelingly -reelrall -reem -reeming -reemish -reen -reenge -reeper -reese -reeshle -reesk -reesle -reest -reester -reestle -reesty -reet -reetam -reetle -reeve -reeveland -reeveship -ref -reface -refacilitate -refall -refallow -refan -refascinate -refascination -refashion -refashioner -refashionment -refasten -refathered -refavor -refect -refection -refectionary -refectioner -refective -refectorarian -refectorary -refectorer -refectorial -refectorian -refectory -refederate -refeed -refeel -refeign -refel -refence -refer -referable -referee -reference -referenda -referendal -referendary -referendaryship -referendum -referent -referential -referentially -referently -referment -referral -referrer -referrible -referribleness -refertilization -refertilize -refetch -refight -refigure -refill -refillable -refilm -refilter -refinable -refinage -refinance -refind -refine -refined -refinedly -refinedness -refinement -refiner -refinery -refinger -refining -refiningly -refinish -refire -refit -refitment -refix -refixation -refixture -reflag -reflagellate -reflame -reflash -reflate -reflation -reflationism -reflect -reflectance -reflected -reflectedly -reflectedness -reflectent -reflecter -reflectibility -reflectible -reflecting -reflectingly -reflection -reflectional -reflectionist -reflectionless -reflective -reflectively -reflectiveness -reflectivity -reflectometer -reflectometry -reflector -reflectoscope -refledge -reflee -reflex -reflexed -reflexibility -reflexible -reflexism -reflexive -reflexively -reflexiveness -reflexivity -reflexly -reflexness -reflexogenous -reflexological -reflexologist -reflexology -refling -refloat -refloatation -reflog -reflood -refloor -reflorescence -reflorescent -reflourish -reflourishment -reflow -reflower -refluctuation -refluence -refluency -refluent -reflush -reflux -refluxed -refly -refocillate -refocillation -refocus -refold -refoment -refont -refool -refoot -reforbid -reforce -reford -reforecast -reforest -reforestation -reforestization -reforestize -reforestment -reforfeit -reforfeiture -reforge -reforger -reforget -reforgive -reform -reformability -reformable -reformableness -reformado -reformandum -reformation -reformational -reformationary -reformationist -reformative -reformatively -reformatness -reformatory -reformed -reformedly -reformer -reformeress -reformingly -reformism -reformist -reformistic -reformproof -reformulate -reformulation -reforsake -refortification -refortify -reforward -refound -refoundation -refounder -refract -refractable -refracted -refractedly -refractedness -refractile -refractility -refracting -refraction -refractional -refractionate -refractionist -refractive -refractively -refractiveness -refractivity -refractometer -refractometric -refractometry -refractor -refractorily -refractoriness -refractory -refracture -refragability -refragable -refragableness -refrain -refrainer -refrainment -reframe -refrangent -refrangibility -refrangible -refrangibleness -refreeze -refrenation -refrenzy -refresh -refreshant -refreshen -refreshener -refresher -refreshful -refreshfully -refreshing -refreshingly -refreshingness -refreshment -refrigerant -refrigerate -refrigerating -refrigeration -refrigerative -refrigerator -refrigeratory -refrighten -refringence -refringency -refringent -refront -refrustrate -reft -refuel -refueling -refuge -refugee -refugeeism -refugeeship -refulge -refulgence -refulgency -refulgent -refulgently -refulgentness -refunction -refund -refunder -refundment -refurbish -refurbishment -refurl -refurnish -refurnishment -refusable -refusal -refuse -refuser -refusing -refusingly -refusion -refusive -refutability -refutable -refutably -refutal -refutation -refutative -refutatory -refute -refuter -reg -regain -regainable -regainer -regainment -regal -regale -regalement -regaler -regalia -regalian -regalism -regalist -regality -regalize -regallop -regally -regalness -regalvanization -regalvanize -regard -regardable -regardance -regardancy -regardant -regarder -regardful -regardfully -regardfulness -regarding -regardless -regardlessly -regardlessness -regarment -regarnish -regarrison -regather -regatta -regauge -regelate -regelation -regency -regeneracy -regenerance -regenerant -regenerate -regenerateness -regeneration -regenerative -regeneratively -regenerator -regeneratory -regeneratress -regeneratrix -regenesis -regent -regental -regentess -regentship -regerminate -regermination -reges -reget -regia -regicidal -regicide -regicidism -regift -regifuge -regild -regill -regime -regimen -regimenal -regiment -regimental -regimentaled -regimentalled -regimentally -regimentals -regimentary -regimentation -regiminal -regin -reginal -region -regional -regionalism -regionalist -regionalistic -regionalization -regionalize -regionally -regionary -regioned -register -registered -registerer -registership -registrability -registrable -registral -registrant -registrar -registrarship -registrary -registrate -registration -registrational -registrationist -registrator -registrer -registry -regive -regladden -reglair -reglaze -regle -reglement -reglementary -reglementation -reglementist -reglet -reglorified -regloss -reglove -reglow -reglue -regma -regmacarp -regnal -regnancy -regnant -regnerable -regolith -regorge -regovern -regradation -regrade -regraduate -regraduation -regraft -regrant -regrasp -regrass -regrate -regrater -regratification -regratify -regrating -regratingly -regrator -regratress -regravel -regrede -regreen -regreet -regress -regression -regressionist -regressive -regressively -regressiveness -regressivity -regressor -regret -regretful -regretfully -regretfulness -regretless -regrettable -regrettableness -regrettably -regretter -regrettingly -regrind -regrinder -regrip -regroup -regroupment -regrow -regrowth -reguarantee -reguard -reguardant -reguide -regula -regulable -regular -regularity -regularization -regularize -regularizer -regularly -regularness -regulatable -regulate -regulated -regulation -regulationist -regulative -regulatively -regulator -regulatorship -regulatory -regulatress -regulatris -reguli -reguline -regulize -regulus -regur -regurge -regurgitant -regurgitate -regurgitation -regush -reh -rehabilitate -rehabilitation -rehabilitative -rehair -rehale -rehallow -rehammer -rehandicap -rehandle -rehandler -rehandling -rehang -rehappen -reharden -reharm -reharmonize -reharness -reharrow -reharvest -rehash -rehaul -rehazard -rehead -reheal -reheap -rehear -rehearing -rehearsal -rehearse -rehearser -rehearten -reheat -reheater -rehedge -reheel -reheighten -rehoe -rehoist -rehollow -rehonor -rehonour -rehood -rehook -rehoop -rehouse -rehumanize -rehumble -rehumiliate -rehumiliation -rehung -rehybridize -rehydrate -rehydration -rehypothecate -rehypothecation -rehypothecator -reichsgulden -reichsmark -reichspfennig -reichstaler -reidentification -reidentify -reif -reification -reify -reign -reignite -reignition -reignore -reillume -reilluminate -reillumination -reillumine -reillustrate -reillustration -reim -reimage -reimagination -reimagine -reimbark -reimbarkation -reimbibe -reimbody -reimbursable -reimburse -reimbursement -reimburser -reimbush -reimbushment -reimkennar -reimmerge -reimmerse -reimmersion -reimmigrant -reimmigration -reimpact -reimpark -reimpart -reimpatriate -reimpatriation -reimpel -reimplant -reimplantation -reimply -reimport -reimportation -reimportune -reimpose -reimposition -reimposure -reimpregnate -reimpress -reimpression -reimprint -reimprison -reimprisonment -reimprove -reimprovement -reimpulse -rein -reina -reinability -reinaugurate -reinauguration -reincapable -reincarnadine -reincarnate -reincarnation -reincarnationism -reincarnationist -reincense -reincentive -reincidence -reincidency -reincite -reinclination -reincline -reinclude -reinclusion -reincorporate -reincorporation -reincrease -reincrudate -reincrudation -reinculcate -reincur -reindebted -reindebtedness -reindeer -reindependence -reindicate -reindication -reindict -reindictment -reindifferent -reindorse -reinduce -reinducement -reindue -reindulge -reindulgence -reinette -reinfect -reinfection -reinfectious -reinfer -reinfest -reinfestation -reinflame -reinflate -reinflation -reinflict -reinfliction -reinfluence -reinforce -reinforcement -reinforcer -reinform -reinfuse -reinfusion -reingraft -reingratiate -reingress -reinhabit -reinhabitation -reinherit -reinitiate -reinitiation -reinject -reinjure -reinless -reinoculate -reinoculation -reinquire -reinquiry -reins -reinsane -reinsanity -reinscribe -reinsert -reinsertion -reinsist -reinsman -reinspect -reinspection -reinspector -reinsphere -reinspiration -reinspire -reinspirit -reinstall -reinstallation -reinstallment -reinstalment -reinstate -reinstatement -reinstation -reinstator -reinstauration -reinstil -reinstill -reinstitute -reinstitution -reinstruct -reinstruction -reinsult -reinsurance -reinsure -reinsurer -reintegrate -reintegration -reintend -reinter -reintercede -reintercession -reinterchange -reinterest -reinterfere -reinterference -reinterment -reinterpret -reinterpretation -reinterrogate -reinterrogation -reinterrupt -reinterruption -reintervene -reintervention -reinterview -reinthrone -reintimate -reintimation -reintitule -reintrench -reintroduce -reintroduction -reintrude -reintrusion -reintuition -reintuitive -reinvade -reinvasion -reinvent -reinvention -reinventor -reinversion -reinvert -reinvest -reinvestigate -reinvestigation -reinvestiture -reinvestment -reinvigorate -reinvigoration -reinvitation -reinvite -reinvoice -reinvolve -reirrigate -reirrigation -reis -reisolation -reissuable -reissue -reissuement -reissuer -reit -reitbok -reitbuck -reitemize -reiter -reiterable -reiterance -reiterant -reiterate -reiterated -reiteratedly -reiteratedness -reiteration -reiterative -reiteratively -reiver -rejail -reject -rejectable -rejectableness -rejectage -rejectamenta -rejecter -rejectingly -rejection -rejective -rejectment -rejector -rejerk -rejoice -rejoiceful -rejoicement -rejoicer -rejoicing -rejoicingly -rejoin -rejoinder -rejolt -rejourney -rejudge -rejumble -rejunction -rejustification -rejustify -rejuvenant -rejuvenate -rejuvenation -rejuvenative -rejuvenator -rejuvenesce -rejuvenescence -rejuvenescent -rejuvenize -rekick -rekill -rekindle -rekindlement -rekindler -reking -rekiss -reknit -reknow -rel -relabel -relace -relacquer -relade -reladen -relais -relament -relamp -reland -relap -relapper -relapsable -relapse -relapseproof -relapser -relapsing -relast -relaster -relata -relatability -relatable -relatch -relate -related -relatedness -relater -relatinization -relation -relational -relationality -relationally -relationary -relationism -relationist -relationless -relationship -relatival -relative -relatively -relativeness -relativism -relativist -relativistic -relativity -relativization -relativize -relator -relatrix -relatum -relaunch -relax -relaxable -relaxant -relaxation -relaxative -relaxatory -relaxed -relaxedly -relaxedness -relaxer -relay -relayman -relbun -relead -releap -relearn -releasable -release -releasee -releasement -releaser -releasor -releather -relection -relegable -relegate -relegation -relend -relent -relenting -relentingly -relentless -relentlessly -relentlessness -relentment -relessee -relessor -relet -reletter -relevance -relevancy -relevant -relevantly -relevate -relevation -relevator -relevel -relevy -reliability -reliable -reliableness -reliably -reliance -reliant -reliantly -reliberate -relic -relicary -relicense -relick -reliclike -relicmonger -relict -relicted -reliction -relief -reliefless -relier -relievable -relieve -relieved -relievedly -reliever -relieving -relievingly -relievo -relift -religate -religation -relight -relightable -relighten -relightener -relighter -religion -religionary -religionate -religioner -religionism -religionist -religionistic -religionize -religionless -religiose -religiosity -religious -religiously -religiousness -relime -relimit -relimitation -reline -reliner -relink -relinquent -relinquish -relinquisher -relinquishment -reliquaire -reliquary -reliquefy -reliquiae -reliquian -reliquidate -reliquidation -reliquism -relish -relishable -relisher -relishing -relishingly -relishsome -relishy -relist -relisten -relitigate -relive -reload -reloan -relocable -relocate -relocation -relocator -relock -relodge -relook -relose -relost -relot -relove -relower -relucent -reluct -reluctance -reluctancy -reluctant -reluctantly -reluctate -reluctation -reluctivity -relume -relumine -rely -remade -remagnetization -remagnetize -remagnification -remagnify -remail -remain -remainder -remainderman -remaindership -remainer -remains -remaintain -remaintenance -remake -remaker -reman -remanage -remanagement -remanation -remancipate -remancipation -remand -remandment -remanence -remanency -remanent -remanet -remanipulate -remanipulation -remantle -remanufacture -remanure -remap -remarch -remargin -remark -remarkability -remarkable -remarkableness -remarkably -remarkedly -remarker -remarket -remarque -remarriage -remarry -remarshal -remask -remass -remast -remasticate -remastication -rematch -rematerialize -remble -remeant -remeasure -remeasurement -remede -remediable -remediableness -remediably -remedial -remedially -remediation -remediless -remedilessly -remedilessness -remeditate -remeditation -remedy -remeet -remelt -remember -rememberability -rememberable -rememberably -rememberer -remembrance -remembrancer -remembrancership -rememorize -remenace -remend -remerge -remetal -remex -remica -remicate -remication -remicle -remiform -remigate -remigation -remiges -remigial -remigrant -remigrate -remigration -remilitarization -remilitarize -remill -remimic -remind -remindal -reminder -remindful -remindingly -remineralization -remineralize -remingle -reminisce -reminiscence -reminiscenceful -reminiscencer -reminiscency -reminiscent -reminiscential -reminiscentially -reminiscently -reminiscer -reminiscitory -remint -remiped -remirror -remise -remisrepresent -remisrepresentation -remiss -remissful -remissibility -remissible -remissibleness -remission -remissive -remissively -remissiveness -remissly -remissness -remissory -remisunderstand -remit -remitment -remittable -remittal -remittance -remittancer -remittee -remittence -remittency -remittent -remittently -remitter -remittitur -remittor -remix -remixture -remnant -remnantal -remobilization -remobilize -remock -remodel -remodeler -remodeller -remodelment -remodification -remodify -remolade -remold -remollient -remonetization -remonetize -remonstrance -remonstrant -remonstrantly -remonstrate -remonstrating -remonstratingly -remonstration -remonstrative -remonstratively -remonstrator -remonstratory -remontado -remontant -remontoir -remop -remora -remord -remorse -remorseful -remorsefully -remorsefulness -remorseless -remorselessly -remorselessness -remorseproof -remortgage -remote -remotely -remoteness -remotion -remotive -remould -remount -removability -removable -removableness -removably -removal -remove -removed -removedly -removedness -removement -remover -removing -remultiplication -remultiply -remunerability -remunerable -remunerably -remunerate -remuneration -remunerative -remuneratively -remunerativeness -remunerator -remuneratory -remurmur -remuster -remutation -renable -renably -renail -renaissance -renal -rename -renascence -renascency -renascent -renascible -renascibleness -renature -renavigate -renavigation -rencontre -rencounter -renculus -rend -render -renderable -renderer -rendering -renderset -rendezvous -rendibility -rendible -rendition -rendlewood -rendrock -rendzina -reneague -renecessitate -reneg -renegade -renegadism -renegado -renegation -renege -reneger -reneglect -renegotiable -renegotiate -renegotiation -renegotiations -renegue -renerve -renes -renet -renew -renewability -renewable -renewably -renewal -renewedly -renewedness -renewer -renewment -renicardiac -renickel -renidification -renidify -reniform -renin -renipericardial -reniportal -renipuncture -renish -renishly -renitence -renitency -renitent -renk -renky -renne -rennet -renneting -rennin -renniogen -renocutaneous -renogastric -renography -renointestinal -renominate -renomination -renopericardial -renopulmonary -renormalize -renotation -renotice -renotification -renotify -renounce -renounceable -renouncement -renouncer -renourish -renovate -renovater -renovatingly -renovation -renovative -renovator -renovatory -renovize -renown -renowned -renownedly -renownedness -renowner -renownful -renownless -rensselaerite -rent -rentability -rentable -rentage -rental -rentaler -rentaller -rented -rentee -renter -rentless -rentrant -rentrayeuse -renumber -renumerate -renumeration -renunciable -renunciance -renunciant -renunciate -renunciation -renunciative -renunciator -renunciatory -renunculus -renverse -renvoi -renvoy -reobject -reobjectivization -reobjectivize -reobligate -reobligation -reoblige -reobscure -reobservation -reobserve -reobtain -reobtainable -reobtainment -reoccasion -reoccupation -reoccupy -reoccur -reoccurrence -reoffend -reoffense -reoffer -reoffset -reoil -reometer -reomission -reomit -reopen -reoperate -reoperation -reoppose -reopposition -reoppress -reoppression -reorchestrate -reordain -reorder -reordinate -reordination -reorganization -reorganizationist -reorganize -reorganizer -reorient -reorientation -reornament -reoutfit -reoutline -reoutput -reoutrage -reovercharge -reoverflow -reovertake -reoverwork -reown -reoxidation -reoxidize -reoxygenate -reoxygenize -rep -repace -repacification -repacify -repack -repackage -repacker -repaganization -repaganize -repaganizer -repage -repaint -repair -repairable -repairableness -repairer -repairman -repale -repand -repandly -repandodentate -repandodenticulate -repandolobate -repandous -repandousness -repanel -repaper -reparability -reparable -reparably -reparagraph -reparate -reparation -reparative -reparatory -repark -repartable -repartake -repartee -reparticipate -reparticipation -repartition -repartitionable -repass -repassable -repassage -repasser -repast -repaste -repasture -repatch -repatency -repatent -repatriable -repatriate -repatriation -repatronize -repattern -repave -repavement -repawn -repay -repayable -repayal -repaying -repayment -repeal -repealability -repealable -repealableness -repealer -repealist -repealless -repeat -repeatability -repeatable -repeatal -repeated -repeatedly -repeater -repeg -repel -repellance -repellant -repellence -repellency -repellent -repellently -repeller -repelling -repellingly -repellingness -repen -repenetrate -repension -repent -repentable -repentance -repentant -repentantly -repenter -repentingly -repeople -reperceive -repercept -reperception -repercolation -repercuss -repercussion -repercussive -repercussively -repercussiveness -repercutient -reperform -reperformance -reperfume -reperible -repermission -repermit -reperplex -repersonalization -repersonalize -repersuade -repersuasion -repertoire -repertorial -repertorily -repertorium -repertory -reperusal -reperuse -repetend -repetition -repetitional -repetitionary -repetitious -repetitiously -repetitiousness -repetitive -repetitively -repetitiveness -repetitory -repetticoat -repew -rephase -rephonate -rephosphorization -rephosphorize -rephotograph -rephrase -repic -repick -repicture -repiece -repile -repin -repine -repineful -repinement -repiner -repiningly -repipe -repique -repitch -repkie -replace -replaceability -replaceable -replacement -replacer -replait -replan -replane -replant -replantable -replantation -replanter -replaster -replate -replay -replead -repleader -repleat -repledge -repledger -replenish -replenisher -replenishingly -replenishment -replete -repletely -repleteness -repletion -repletive -repletively -repletory -repleviable -replevin -replevisable -replevisor -replevy -repliant -replica -replicate -replicated -replicatile -replication -replicative -replicatively -replicatory -replier -replight -replod -replot -replotment -replotter -replough -replow -replum -replume -replunder -replunge -reply -replyingly -repocket -repoint -repolish -repoll -repollute -repolon -repolymerization -repolymerize -reponder -repone -repope -repopulate -repopulation -report -reportable -reportage -reportedly -reporter -reporteress -reporterism -reportership -reportingly -reportion -reportorial -reportorially -reposal -repose -reposed -reposedly -reposedness -reposeful -reposefully -reposefulness -reposer -reposit -repositary -reposition -repositor -repository -repossess -repossession -repossessor -repost -repostpone -repot -repound -repour -repowder -repp -repped -repractice -repray -repreach -reprecipitate -reprecipitation -repredict -reprefer -reprehend -reprehendable -reprehendatory -reprehender -reprehensibility -reprehensible -reprehensibleness -reprehensibly -reprehension -reprehensive -reprehensively -reprehensory -repreparation -reprepare -represcribe -represent -representability -representable -representamen -representant -representation -representational -representationalism -representationalist -representationary -representationism -representationist -representative -representatively -representativeness -representativeship -representativity -representer -representment -represide -repress -repressed -repressedly -represser -repressible -repressibly -repression -repressionary -repressionist -repressive -repressively -repressiveness -repressment -repressor -repressory -repressure -reprice -reprieval -reprieve -repriever -reprimand -reprimander -reprimanding -reprimandingly -reprime -reprimer -reprint -reprinter -reprisal -reprisalist -reprise -repristinate -repristination -reprivatization -reprivatize -reprivilege -reproach -reproachable -reproachableness -reproachably -reproacher -reproachful -reproachfully -reproachfulness -reproachingly -reproachless -reproachlessness -reprobacy -reprobance -reprobate -reprobateness -reprobater -reprobation -reprobationary -reprobationer -reprobative -reprobatively -reprobator -reprobatory -reproceed -reprocess -reproclaim -reproclamation -reprocurable -reprocure -reproduce -reproduceable -reproducer -reproducibility -reproducible -reproduction -reproductionist -reproductive -reproductively -reproductiveness -reproductivity -reproductory -reprofane -reprofess -reprohibit -repromise -repromulgate -repromulgation -repronounce -repronunciation -reproof -reproofless -repropagate -repropitiate -repropitiation -reproportion -reproposal -repropose -reprosecute -reprosecution -reprosper -reprotect -reprotection -reprotest -reprovable -reprovableness -reprovably -reproval -reprove -reprover -reprovide -reprovingly -reprovision -reprovocation -reprovoke -reprune -reps -reptant -reptatorial -reptatory -reptile -reptiledom -reptilelike -reptilferous -reptilian -reptiliary -reptiliform -reptilious -reptiliousness -reptilism -reptility -reptilivorous -reptiloid -republic -republican -republicanism -republicanization -republicanize -republicanizer -republication -republish -republisher -republishment -repuddle -repudiable -repudiate -repudiation -repudiationist -repudiative -repudiator -repudiatory -repuff -repugn -repugnable -repugnance -repugnancy -repugnant -repugnantly -repugnantness -repugnate -repugnatorial -repugner -repullulate -repullulation -repullulative -repullulescent -repulpit -repulse -repulseless -repulseproof -repulser -repulsion -repulsive -repulsively -repulsiveness -repulsory -repulverize -repump -repunish -repunishment -repurchase -repurchaser -repurge -repurification -repurify -repurple -repurpose -repursue -repursuit -reputability -reputable -reputableness -reputably -reputation -reputationless -reputative -reputatively -repute -reputed -reputedly -reputeless -requalification -requalify -requarantine -requeen -requench -request -requester -requestion -requiem -requiescence -requin -requirable -require -requirement -requirer -requisite -requisitely -requisiteness -requisition -requisitionary -requisitioner -requisitionist -requisitor -requisitorial -requisitory -requit -requitable -requital -requitative -requite -requiteful -requitement -requiter -requiz -requotation -requote -rerack -reracker -reradiation -rerail -reraise -rerake -rerank -rerate -reread -rereader -rerebrace -reredos -reree -rereel -rereeve -rerefief -reregister -reregistration -reregulate -reregulation -rereign -reremouse -rerent -rerental -reresupper -rerig -rering -rerise -rerival -rerivet -rerob -rerobe -reroll -reroof -reroot -rerope -reroute -rerow -reroyalize -rerub -rerummage -rerun -resaca -resack -resacrifice -resaddle -resail -resalable -resale -resalt -resalutation -resalute -resalvage -resample -resanctify -resanction -resatisfaction -resatisfy -resaw -resawer -resawyer -resay -resazurin -rescan -reschedule -rescind -rescindable -rescinder -rescindment -rescissible -rescission -rescissory -rescore -rescramble -rescratch -rescribe -rescript -rescription -rescriptive -rescriptively -rescrub -rescuable -rescue -rescueless -rescuer -reseal -reseam -research -researcher -researchful -researchist -reseat -resecrete -resecretion -resect -resection -resectional -reseda -resedaceous -resee -reseed -reseek -resegment -resegmentation -reseise -reseiser -reseize -reseizer -reseizure -reselect -reselection -reself -resell -reseller -resemblable -resemblance -resemblant -resemble -resembler -resemblingly -reseminate -resend -resene -resensation -resensitization -resensitize -resent -resentationally -resentence -resenter -resentful -resentfullness -resentfully -resentience -resentingly -resentless -resentment -resepulcher -resequent -resequester -resequestration -reserene -reservable -reserval -reservation -reservationist -reservatory -reserve -reserved -reservedly -reservedness -reservee -reserveful -reserveless -reserver -reservery -reservice -reservist -reservoir -reservor -reset -resettable -resetter -resettle -resettlement -resever -resew -resex -resh -reshake -reshape -reshare -resharpen -reshave -reshear -reshearer -resheathe -reshelve -reshift -reshine -reshingle -reship -reshipment -reshipper -reshoe -reshoot -reshoulder -reshovel -reshower -reshrine -reshuffle -reshun -reshunt -reshut -reshuttle -resiccate -reside -residence -residencer -residency -resident -residental -residenter -residential -residentiality -residentially -residentiary -residentiaryship -residentship -resider -residua -residual -residuary -residuation -residue -residuent -residuous -residuum -resift -resigh -resign -resignal -resignatary -resignation -resignationism -resigned -resignedly -resignedness -resignee -resigner -resignful -resignment -resile -resilement -resilial -resiliate -resilience -resiliency -resilient -resilifer -resiliometer -resilition -resilium -resilver -resin -resina -resinaceous -resinate -resinbush -resiner -resinfiable -resing -resinic -resiniferous -resinification -resinifluous -resiniform -resinify -resinize -resink -resinlike -resinoelectric -resinoextractive -resinogenous -resinoid -resinol -resinolic -resinophore -resinosis -resinous -resinously -resinousness -resinovitreous -resiny -resipiscence -resipiscent -resist -resistability -resistable -resistableness -resistance -resistant -resistantly -resister -resistful -resistibility -resistible -resistibleness -resistibly -resisting -resistingly -resistive -resistively -resistiveness -resistivity -resistless -resistlessly -resistlessness -resistor -resitting -resize -resizer -resketch -reskin -reslash -reslate -reslay -reslide -reslot -resmell -resmelt -resmile -resmooth -resnap -resnatch -resnatron -resnub -resoak -resoap -resoften -resoil -resojourn -resolder -resole -resolemnize -resolicit -resolidification -resolidify -resolubility -resoluble -resolubleness -resolute -resolutely -resoluteness -resolution -resolutioner -resolutionist -resolutory -resolvability -resolvable -resolvableness -resolvancy -resolve -resolved -resolvedly -resolvedness -resolvent -resolver -resolvible -resonance -resonancy -resonant -resonantly -resonate -resonator -resonatory -resoothe -resorb -resorbence -resorbent -resorcin -resorcine -resorcinism -resorcinol -resorcinolphthalein -resorcinum -resorcylic -resorption -resorptive -resort -resorter -resorufin -resought -resound -resounder -resounding -resoundingly -resource -resourceful -resourcefully -resourcefulness -resourceless -resourcelessness -resoutive -resow -resp -respace -respade -respan -respangle -resparkle -respeak -respect -respectability -respectabilize -respectable -respectableness -respectably -respectant -respecter -respectful -respectfully -respectfulness -respecting -respective -respectively -respectiveness -respectless -respectlessly -respectlessness -respectworthy -respell -respersive -respin -respirability -respirable -respirableness -respiration -respirational -respirative -respirator -respiratored -respiratorium -respiratory -respire -respirit -respirometer -respite -respiteless -resplend -resplendence -resplendency -resplendent -resplendently -resplice -resplit -respoke -respond -responde -respondence -respondency -respondent -respondentia -responder -responsal -responsary -response -responseless -responser -responsibility -responsible -responsibleness -responsibly -responsion -responsive -responsively -responsiveness -responsivity -responsorial -responsory -respot -respray -respread -respring -resprout -respue -resquare -resqueak -ressaidar -ressala -ressaldar -ressaut -rest -restable -restack -restaff -restain -restainable -restake -restamp -restandardization -restandardize -restant -restart -restate -restatement -restaur -restaurant -restaurate -restaurateur -restauration -restbalk -resteal -resteel -resteep -restem -restep -rester -resterilize -restes -restful -restfully -restfulness -restharrow -resthouse -restiaceous -restiad -restibrachium -restiff -restiffen -restiffener -restiffness -restifle -restiform -restigmatize -restimulate -restimulation -resting -restingly -restionaceous -restipulate -restipulation -restipulatory -restir -restis -restitch -restitute -restitution -restitutionism -restitutionist -restitutive -restitutor -restitutory -restive -restively -restiveness -restless -restlessly -restlessness -restock -restopper -restorable -restorableness -restoral -restoration -restorationer -restorationism -restorationist -restorative -restoratively -restorativeness -restorator -restoratory -restore -restorer -restow -restowal -restproof -restraighten -restrain -restrainability -restrained -restrainedly -restrainedness -restrainer -restraining -restrainingly -restraint -restraintful -restrap -restratification -restream -restrengthen -restress -restretch -restrict -restricted -restrictedly -restrictedness -restriction -restrictionary -restrictionist -restrictive -restrictively -restrictiveness -restrike -restring -restringe -restringency -restringent -restrip -restrive -restroke -restudy -restuff -restward -restwards -resty -restyle -resubject -resubjection -resubjugate -resublimation -resublime -resubmerge -resubmission -resubmit -resubordinate -resubscribe -resubscriber -resubscription -resubstitute -resubstitution -resucceed -resuck -resudation -resue -resuffer -resufferance -resuggest -resuggestion -resuing -resuit -result -resultance -resultancy -resultant -resultantly -resultative -resultful -resultfully -resulting -resultingly -resultive -resultless -resultlessly -resultlessness -resumability -resumable -resume -resumer -resummon -resummons -resumption -resumptive -resumptively -resun -resup -resuperheat -resupervise -resupinate -resupinated -resupination -resupine -resupply -resupport -resuppose -resupposition -resuppress -resuppression -resurface -resurge -resurgence -resurgency -resurgent -resurprise -resurrect -resurrectible -resurrection -resurrectional -resurrectionary -resurrectioner -resurrectioning -resurrectionism -resurrectionist -resurrectionize -resurrective -resurrector -resurrender -resurround -resurvey -resuscitable -resuscitant -resuscitate -resuscitation -resuscitative -resuscitator -resuspect -resuspend -resuspension -reswage -reswallow -resward -reswarm -reswear -resweat -resweep -reswell -reswill -reswim -resyllabification -resymbolization -resymbolize -resynthesis -resynthesize -ret -retable -retack -retackle -retag -retail -retailer -retailment -retailor -retain -retainability -retainable -retainableness -retainal -retainder -retainer -retainership -retaining -retake -retaker -retaliate -retaliation -retaliationist -retaliative -retaliator -retaliatory -retalk -retama -retame -retan -retanner -retape -retard -retardance -retardant -retardate -retardation -retardative -retardatory -retarded -retardence -retardent -retarder -retarding -retardingly -retardive -retardment -retardure -retare -retariff -retaste -retation -retattle -retax -retaxation -retch -reteach -retecious -retelegraph -retelephone -retell -retelling -retem -retemper -retempt -retemptation -retenant -retender -retene -retent -retention -retentionist -retentive -retentively -retentiveness -retentivity -retentor -retepore -retest -retexture -rethank -rethatch -rethaw -rethe -retheness -rethicken -rethink -rethrash -rethread -rethreaten -rethresh -rethresher -rethrill -rethrive -rethrone -rethrow -rethrust -rethunder -retia -retial -retiarian -retiarius -retiary -reticella -reticello -reticence -reticency -reticent -reticently -reticket -reticle -reticula -reticular -reticularian -reticularly -reticulary -reticulate -reticulated -reticulately -reticulation -reticulatocoalescent -reticulatogranulate -reticulatoramose -reticulatovenose -reticule -reticuled -reticulin -reticulitis -reticulocyte -reticulocytosis -reticuloramose -reticulose -reticulovenose -reticulum -retie -retier -retiform -retighten -retile -retill -retimber -retime -retin -retina -retinacular -retinaculate -retinaculum -retinal -retinalite -retinasphalt -retinasphaltum -retincture -retinene -retinerved -retinian -retinispora -retinite -retinitis -retinize -retinker -retinoblastoma -retinochorioid -retinochorioidal -retinochorioiditis -retinoid -retinol -retinopapilitis -retinophoral -retinophore -retinoscope -retinoscopic -retinoscopically -retinoscopist -retinoscopy -retinue -retinula -retinular -retinule -retip -retiracied -retiracy -retirade -retiral -retire -retired -retiredly -retiredness -retirement -retirer -retiring -retiringly -retiringness -retistene -retoast -retold -retolerate -retoleration -retomb -retonation -retook -retool -retooth -retoother -retort -retortable -retorted -retorter -retortion -retortive -retorture -retoss -retotal -retouch -retoucher -retouching -retouchment -retour -retourable -retrace -retraceable -retracement -retrack -retract -retractability -retractable -retractation -retracted -retractibility -retractible -retractile -retractility -retraction -retractive -retractively -retractiveness -retractor -retrad -retrade -retradition -retrahent -retrain -retral -retrally -retramp -retrample -retranquilize -retranscribe -retranscription -retransfer -retransference -retransfigure -retransform -retransformation -retransfuse -retransit -retranslate -retranslation -retransmission -retransmissive -retransmit -retransmute -retransplant -retransport -retransportation -retravel -retraverse -retraxit -retread -retreat -retreatal -retreatant -retreater -retreatful -retreating -retreatingness -retreative -retreatment -retree -retrench -retrenchable -retrencher -retrenchment -retrial -retribute -retribution -retributive -retributively -retributor -retributory -retricked -retrievability -retrievable -retrievableness -retrievably -retrieval -retrieve -retrieveless -retrievement -retriever -retrieverish -retrim -retrimmer -retrip -retroact -retroaction -retroactive -retroactively -retroactivity -retroalveolar -retroauricular -retrobronchial -retrobuccal -retrobulbar -retrocaecal -retrocardiac -retrocecal -retrocede -retrocedence -retrocedent -retrocervical -retrocession -retrocessional -retrocessionist -retrocessive -retrochoir -retroclavicular -retroclusion -retrocognition -retrocognitive -retrocolic -retroconsciousness -retrocopulant -retrocopulation -retrocostal -retrocouple -retrocoupler -retrocurved -retrodate -retrodeviation -retrodisplacement -retroduction -retrodural -retroesophageal -retroflected -retroflection -retroflex -retroflexed -retroflexion -retroflux -retroform -retrofract -retrofracted -retrofrontal -retrogastric -retrogenerative -retrogradation -retrogradatory -retrograde -retrogradely -retrogradient -retrogradingly -retrogradism -retrogradist -retrogress -retrogression -retrogressionist -retrogressive -retrogressively -retrohepatic -retroinfection -retroinsular -retroiridian -retroject -retrojection -retrojugular -retrolabyrinthine -retrolaryngeal -retrolingual -retrolocation -retromammary -retromammillary -retromandibular -retromastoid -retromaxillary -retromigration -retromingent -retromingently -retromorphosed -retromorphosis -retronasal -retroperitoneal -retroperitoneally -retropharyngeal -retropharyngitis -retroplacental -retroplexed -retroposed -retroposition -retropresbyteral -retropubic -retropulmonary -retropulsion -retropulsive -retroreception -retrorectal -retroreflective -retrorenal -retrorse -retrorsely -retroserrate -retroserrulate -retrospect -retrospection -retrospective -retrospectively -retrospectiveness -retrospectivity -retrosplenic -retrostalsis -retrostaltic -retrosternal -retrosusception -retrot -retrotarsal -retrotemporal -retrothyroid -retrotracheal -retrotransfer -retrotransference -retrotympanic -retrousse -retrovaccinate -retrovaccination -retrovaccine -retroverse -retroversion -retrovert -retrovision -retroxiphoid -retrude -retrue -retrusible -retrusion -retrust -retry -retted -retter -rettery -retting -rettory -retube -retuck -retumble -retumescence -retune -returban -returf -returfer -return -returnability -returnable -returned -returner -returnless -returnlessly -retuse -retwine -retwist -retying -retype -retzian -reundercut -reundergo -reundertake -reundulate -reundulation -reune -reunfold -reunification -reunify -reunion -reunionism -reunionist -reunionistic -reunitable -reunite -reunitedly -reuniter -reunition -reunitive -reunpack -reuphold -reupholster -reuplift -reurge -reuse -reutilization -reutilize -reutter -reutterance -rev -revacate -revaccinate -revaccination -revalenta -revalescence -revalescent -revalidate -revalidation -revalorization -revalorize -revaluate -revaluation -revalue -revamp -revamper -revampment -revaporization -revaporize -revarnish -revary -reve -reveal -revealability -revealable -revealableness -revealed -revealedly -revealer -revealing -revealingly -revealingness -revealment -revegetate -revegetation -revehent -reveil -reveille -revel -revelability -revelant -revelation -revelational -revelationer -revelationist -revelationize -revelative -revelator -revelatory -reveler -revellent -revelly -revelment -revelrout -revelry -revenant -revend -revender -revendicate -revendication -reveneer -revenge -revengeable -revengeful -revengefully -revengefulness -revengeless -revengement -revenger -revengingly -revent -reventilate -reventure -revenual -revenue -revenued -revenuer -rever -reverable -reverb -reverbatory -reverberant -reverberate -reverberation -reverberative -reverberator -reverberatory -reverbrate -reverdure -revere -revered -reverence -reverencer -reverend -reverendly -reverendship -reverent -reverential -reverentiality -reverentially -reverentialness -reverently -reverentness -reverer -reverie -reverification -reverify -reverist -revers -reversability -reversable -reversal -reverse -reversed -reversedly -reverseful -reverseless -reversely -reversement -reverser -reverseways -reversewise -reversi -reversibility -reversible -reversibleness -reversibly -reversification -reversifier -reversify -reversing -reversingly -reversion -reversionable -reversional -reversionally -reversionary -reversioner -reversionist -reversis -reversist -reversive -reverso -revert -revertal -reverter -revertibility -revertible -revertive -revertively -revery -revest -revestiary -revestry -revet -revete -revetement -revetment -revibrate -revibration -revibrational -revictorious -revictory -revictual -revictualment -revie -review -reviewability -reviewable -reviewage -reviewal -reviewer -revieweress -reviewish -reviewless -revigorate -revigoration -revile -revilement -reviler -reviling -revilingly -revindicate -revindication -reviolate -reviolation -revirescence -revirescent -revisable -revisableness -revisal -revise -revisee -reviser -revisership -revisible -revision -revisional -revisionary -revisionism -revisionist -revisit -revisitant -revisitation -revisor -revisory -revisualization -revisualize -revitalization -revitalize -revitalizer -revivability -revivable -revivably -revival -revivalism -revivalist -revivalistic -revivalize -revivatory -revive -revivement -reviver -revivification -revivifier -revivify -reviving -revivingly -reviviscence -reviviscency -reviviscent -reviviscible -revivor -revocability -revocable -revocableness -revocably -revocation -revocative -revocatory -revoice -revokable -revoke -revokement -revoker -revokingly -revolant -revolatilize -revolt -revolter -revolting -revoltingly -revoltress -revolubility -revoluble -revolubly -revolunteer -revolute -revoluted -revolution -revolutional -revolutionally -revolutionarily -revolutionariness -revolutionary -revolutioneering -revolutioner -revolutionism -revolutionist -revolutionize -revolutionizement -revolutionizer -revolvable -revolvably -revolve -revolvement -revolvency -revolver -revolving -revolvingly -revomit -revote -revue -revuette -revuist -revulsed -revulsion -revulsionary -revulsive -revulsively -rewade -rewager -rewake -rewaken -rewall -rewallow -reward -rewardable -rewardableness -rewardably -rewardedly -rewarder -rewardful -rewardfulness -rewarding -rewardingly -rewardless -rewardproof -rewarehouse -rewarm -rewarn -rewash -rewater -rewave -rewax -rewaybill -rewayle -reweaken -rewear -reweave -rewed -reweigh -reweigher -reweight -rewelcome -reweld -rewend -rewet -rewhelp -rewhirl -rewhisper -rewhiten -rewiden -rewin -rewind -rewinder -rewirable -rewire -rewish -rewithdraw -rewithdrawal -rewood -reword -rework -reworked -rewound -rewove -rewoven -rewrap -rewrite -rewriter -rex -rexen -reyield -reyoke -reyouth -rezbanyite -rhabdite -rhabditiform -rhabdium -rhabdocoelan -rhabdocoele -rhabdocoelidan -rhabdocoelous -rhabdoid -rhabdoidal -rhabdolith -rhabdom -rhabdomal -rhabdomancer -rhabdomancy -rhabdomantic -rhabdomantist -rhabdomyoma -rhabdomyosarcoma -rhabdomysarcoma -rhabdophane -rhabdophanite -rhabdophoran -rhabdopod -rhabdos -rhabdosome -rhabdosophy -rhabdosphere -rhabdus -rhagades -rhagadiform -rhagiocrin -rhagionid -rhagite -rhagon -rhagonate -rhagose -rhamn -rhamnaceous -rhamnal -rhamnetin -rhamninase -rhamninose -rhamnite -rhamnitol -rhamnohexite -rhamnohexitol -rhamnohexose -rhamnonic -rhamnose -rhamnoside -rhamphoid -rhamphotheca -rhapontic -rhaponticin -rhapontin -rhapsode -rhapsodic -rhapsodical -rhapsodically -rhapsodie -rhapsodism -rhapsodist -rhapsodistic -rhapsodize -rhapsodomancy -rhapsody -rhason -rhasophore -rhatania -rhatany -rhe -rhea -rheadine -rhebok -rhebosis -rheeboc -rheebok -rheen -rhegmatype -rhegmatypy -rheic -rhein -rheinic -rhema -rhematic -rhematology -rheme -rhenium -rheobase -rheocrat -rheologist -rheology -rheometer -rheometric -rheometry -rheophile -rheophore -rheophoric -rheoplankton -rheoscope -rheoscopic -rheostat -rheostatic -rheostatics -rheotactic -rheotan -rheotaxis -rheotome -rheotrope -rheotropic -rheotropism -rhesian -rhesus -rhetor -rhetoric -rhetorical -rhetorically -rhetoricalness -rhetoricals -rhetorician -rhetorize -rheum -rheumarthritis -rheumatalgia -rheumatic -rheumatical -rheumatically -rheumaticky -rheumatism -rheumatismal -rheumatismoid -rheumative -rheumatiz -rheumatize -rheumatoid -rheumatoidal -rheumatoidally -rheumed -rheumic -rheumily -rheuminess -rheumy -rhexis -rhigolene -rhigosis -rhigotic -rhinal -rhinalgia -rhinarium -rhincospasm -rhine -rhinencephalic -rhinencephalon -rhinencephalous -rhinenchysis -rhinestone -rhineurynter -rhinion -rhinitis -rhino -rhinobyon -rhinocaul -rhinocele -rhinocelian -rhinocerial -rhinocerian -rhinocerine -rhinoceroid -rhinoceros -rhinoceroslike -rhinocerotic -rhinocerotiform -rhinocerotine -rhinocerotoid -rhinochiloplasty -rhinodynia -rhinogenous -rhinolalia -rhinolaryngology -rhinolaryngoscope -rhinolite -rhinolith -rhinolithic -rhinological -rhinologist -rhinology -rhinolophid -rhinolophine -rhinopharyngeal -rhinopharyngitis -rhinopharynx -rhinophonia -rhinophore -rhinophyma -rhinoplastic -rhinoplasty -rhinopolypus -rhinorrhagia -rhinorrhea -rhinorrheal -rhinoscleroma -rhinoscope -rhinoscopic -rhinoscopy -rhinosporidiosis -rhinotheca -rhinothecal -rhipidate -rhipidion -rhipidistian -rhipidium -rhipidoglossal -rhipidoglossate -rhipidopterous -rhipiphorid -rhipipteran -rhipipterous -rhizanthous -rhizautoicous -rhizine -rhizinous -rhizocarp -rhizocarpean -rhizocarpian -rhizocarpic -rhizocarpous -rhizocaul -rhizocaulus -rhizocephalan -rhizocephalous -rhizocorm -rhizoctoniose -rhizodermis -rhizoflagellate -rhizogen -rhizogenetic -rhizogenic -rhizogenous -rhizoid -rhizoidal -rhizoma -rhizomatic -rhizomatous -rhizome -rhizomelic -rhizomic -rhizomorph -rhizomorphic -rhizomorphoid -rhizomorphous -rhizoneure -rhizophagous -rhizophilous -rhizophoraceous -rhizophore -rhizophorous -rhizophyte -rhizoplast -rhizopod -rhizopodal -rhizopodan -rhizopodist -rhizopodous -rhizosphere -rhizostomatous -rhizostome -rhizostomous -rhizotaxis -rhizotaxy -rhizote -rhizotic -rhizotomi -rhizotomy -rho -rhodaline -rhodamine -rhodanate -rhodanic -rhodanine -rhodanthe -rhodeose -rhodeswood -rhodic -rhoding -rhodinol -rhodite -rhodium -rhodizite -rhodizonic -rhodochrosite -rhodocyte -rhododendron -rhodolite -rhodomelaceous -rhodonite -rhodophane -rhodophyceous -rhodophyll -rhodoplast -rhodopsin -rhodorhiza -rhodosperm -rhodospermin -rhodospermous -rhodymeniaceous -rhomb -rhombencephalon -rhombenporphyr -rhombic -rhombical -rhombiform -rhomboclase -rhomboganoid -rhombogene -rhombogenic -rhombogenous -rhombohedra -rhombohedral -rhombohedrally -rhombohedric -rhombohedron -rhomboid -rhomboidal -rhomboidally -rhomboideus -rhomboidly -rhomboquadratic -rhomborectangular -rhombos -rhombovate -rhombus -rhonchal -rhonchial -rhonchus -rhopalic -rhopalism -rhopalium -rhopaloceral -rhopalocerous -rhotacism -rhotacismus -rhotacistic -rhotacize -rhubarb -rhubarby -rhumb -rhumba -rhumbatron -rhyacolite -rhyme -rhymeless -rhymelet -rhymemaker -rhymemaking -rhymeproof -rhymer -rhymery -rhymester -rhymewise -rhymic -rhymist -rhymy -rhynchocephalian -rhynchocephalic -rhynchocephalous -rhynchocoelan -rhynchocoelic -rhynchocoelous -rhyncholite -rhynchonelloid -rhynchophoran -rhynchophore -rhynchophorous -rhynchotal -rhynchote -rhynchotous -rhynconellid -rhyobasalt -rhyodacite -rhyolite -rhyolitic -rhyotaxitic -rhyparographer -rhyparographic -rhyparographist -rhyparography -rhypography -rhyptic -rhyptical -rhysimeter -rhythm -rhythmal -rhythmic -rhythmical -rhythmicality -rhythmically -rhythmicity -rhythmicize -rhythmics -rhythmist -rhythmizable -rhythmization -rhythmize -rhythmless -rhythmometer -rhythmopoeia -rhythmproof -rhytidome -rhytidosis -rhyton -ria -rial -riancy -riant -riantly -riata -rib -ribald -ribaldish -ribaldly -ribaldrous -ribaldry -riband -ribandlike -ribandmaker -ribandry -ribat -ribaudequin -ribaudred -ribband -ribbandry -ribbed -ribber -ribbet -ribbidge -ribbing -ribble -ribbon -ribbonback -ribboner -ribbonfish -ribbonlike -ribbonmaker -ribbonry -ribbonweed -ribbonwood -ribbony -ribby -ribe -ribless -riblet -riblike -riboflavin -ribonic -ribonuclease -ribonucleic -ribose -ribroast -ribroaster -ribroasting -ribskin -ribspare -ribwork -ribwort -ricciaceous -rice -ricebird -riceland -ricer -ricey -rich -richdom -richellite -richen -riches -richesse -richling -richly -richness -richt -richterite -richweed -ricin -ricine -ricinelaidic -ricinelaidinic -ricinic -ricinine -ricininic -ricinium -ricinoleate -ricinoleic -ricinolein -ricinolic -ricinus -rick -rickardite -ricker -ricketily -ricketiness -ricketish -rickets -rickettsial -rickettsialpox -rickety -rickey -rickle -rickmatic -rickrack -ricksha -rickshaw -rickstaddle -rickstand -rickstick -rickyard -ricochet -ricolettaite -ricrac -rictal -rictus -rid -ridable -ridableness -ridably -riddam -riddance -riddel -ridden -ridder -ridding -riddle -riddlemeree -riddler -riddling -riddlingly -riddlings -ride -rideable -rideau -riden -rident -rider -ridered -rideress -riderless -ridge -ridgeband -ridgeboard -ridgebone -ridged -ridgel -ridgelet -ridgelike -ridgeling -ridgepiece -ridgeplate -ridgepole -ridgepoled -ridger -ridgerope -ridgetree -ridgeway -ridgewise -ridgil -ridging -ridgingly -ridgling -ridgy -ridibund -ridicule -ridiculer -ridiculize -ridiculosity -ridiculous -ridiculously -ridiculousness -riding -ridingman -ridotto -rie -riebeckite -riem -riempie -rier -rife -rifely -rifeness -riff -riffle -riffler -riffraff -rifle -riflebird -rifledom -rifleman -riflemanship -rifleproof -rifler -riflery -rifleshot -rifling -rift -rifter -riftless -rifty -rig -rigadoon -rigamajig -rigamarole -rigation -rigbane -rigescence -rigescent -riggald -rigger -rigging -riggish -riggite -riggot -right -rightabout -righten -righteous -righteously -righteousness -righter -rightful -rightfully -rightfulness -rightheaded -righthearted -rightist -rightle -rightless -rightlessness -rightly -rightmost -rightness -righto -rightship -rightward -rightwardly -rightwards -righty -rigid -rigidify -rigidist -rigidity -rigidly -rigidness -rigidulous -rigling -rigmaree -rigmarole -rigmarolery -rigmarolic -rigmarolish -rigmarolishly -rignum -rigol -rigolette -rigor -rigorism -rigorist -rigoristic -rigorous -rigorously -rigorousness -rigsby -rigsdaler -rigwiddie -rigwiddy -rikisha -rikk -riksha -rikshaw -rilawa -rile -riley -rill -rillet -rillett -rillette -rillock -rillstone -rilly -rim -rima -rimal -rimate -rimbase -rime -rimeless -rimer -rimester -rimfire -rimiform -rimland -rimless -rimmaker -rimmaking -rimmed -rimmer -rimose -rimosely -rimosity -rimous -rimpi -rimple -rimption -rimrock -rimu -rimula -rimulose -rimy -rinceau -rinch -rincon -rind -rinded -rinderpest -rindle -rindless -rindy -rine -ring -ringable -ringbark -ringbarker -ringbill -ringbird -ringbolt -ringbone -ringboned -ringcraft -ringdove -ringe -ringed -ringent -ringer -ringeye -ringgiver -ringgiving -ringgoer -ringhals -ringhead -ringiness -ringing -ringingly -ringingness -ringite -ringle -ringlead -ringleader -ringleaderless -ringleadership -ringless -ringlet -ringleted -ringlety -ringlike -ringmaker -ringmaking -ringman -ringmaster -ringneck -ringsail -ringside -ringsider -ringster -ringtail -ringtaw -ringtime -ringtoss -ringwalk -ringwall -ringwise -ringworm -ringy -rink -rinka -rinker -rinkite -rinncefada -rinneite -rinner -rinsable -rinse -rinser -rinsing -rinthereout -rintherout -rio -riot -rioter -rioting -riotingly -riotist -riotistic -riotocracy -riotous -riotously -riotousness -riotproof -riotry -rip -ripa -ripal -riparial -riparian -riparious -ripcord -ripe -ripelike -ripely -ripen -ripener -ripeness -ripening -ripeningly -riper -ripgut -ripicolous -ripidolite -ripienist -ripieno -ripier -ripost -riposte -rippable -ripper -ripperman -rippet -rippier -ripping -rippingly -rippingness -rippit -ripple -rippleless -rippler -ripplet -rippling -ripplingly -ripply -rippon -riprap -riprapping -ripsack -ripsaw -ripsnorter -ripsnorting -ripup -riroriro -risala -risberm -rise -risen -riser -rishi -rishtadar -risibility -risible -risibleness -risibles -risibly -rising -risk -risker -riskful -riskfulness -riskily -riskiness -riskish -riskless -riskproof -risky -risorial -risorius -risp -risper -risque -risquee -rissel -risser -rissle -rissoid -rist -ristori -rit -rita -ritardando -rite -riteless -ritelessness -ritling -ritornel -ritornelle -ritornello -rittingerite -ritual -ritualism -ritualist -ritualistic -ritualistically -rituality -ritualize -ritualless -ritually -ritzy -riva -rivage -rival -rivalable -rivaless -rivalism -rivality -rivalize -rivalless -rivalrous -rivalry -rivalship -rive -rivel -rivell -riven -river -riverain -riverbank -riverbush -riverdamp -rivered -riverhead -riverhood -riverine -riverish -riverless -riverlet -riverlike -riverling -riverly -riverman -riverscape -riverside -riversider -riverward -riverwards -riverwash -riverway -riverweed -riverwise -rivery -rivet -riveter -rivethead -riveting -rivetless -rivetlike -riving -rivingly -rivose -rivulariaceous -rivulation -rivulet -rivulose -rix -rixatrix -rixy -riyal -riziform -rizzar -rizzle -rizzom -rizzomed -rizzonite -roach -roachback -road -roadability -roadable -roadbed -roadblock -roadbook -roadcraft -roaded -roader -roadfellow -roadhead -roadhouse -roading -roadite -roadless -roadlessness -roadlike -roadman -roadmaster -roadside -roadsider -roadsman -roadstead -roadster -roadstone -roadtrack -roadway -roadweed -roadwise -roadworthiness -roadworthy -roam -roamage -roamer -roaming -roamingly -roan -roanoke -roar -roarer -roaring -roaringly -roast -roastable -roaster -roasting -roastingly -rob -robalito -robalo -roband -robber -robberproof -robbery -robbin -robbing -robe -robeless -rober -roberd -robin -robinet -robing -robinin -robinoside -roble -robomb -roborant -roborate -roboration -roborative -roborean -roboreous -robot -robotesque -robotian -robotism -robotistic -robotization -robotize -robotlike -robotry -robur -roburite -robust -robustful -robustfully -robustfulness -robustic -robusticity -robustious -robustiously -robustiousness -robustity -robustly -robustness -roc -rocambole -roccellic -roccellin -roccelline -rochelime -rocher -rochet -rocheted -rock -rockable -rockably -rockaby -rockabye -rockallite -rockaway -rockbell -rockberry -rockbird -rockborn -rockbrush -rockcist -rockcraft -rockelay -rocker -rockery -rocket -rocketeer -rocketer -rocketlike -rocketor -rocketry -rockety -rockfall -rockfish -rockfoil -rockhair -rockhearted -rockiness -rocking -rockingly -rockish -rocklay -rockless -rocklet -rocklike -rockling -rockman -rockrose -rockshaft -rockslide -rockstaff -rocktree -rockward -rockwards -rockweed -rockwood -rockwork -rocky -rococo -rocta -rod -rodd -roddikin -roddin -rodding -rode -rodent -rodential -rodentially -rodentian -rodenticidal -rodenticide -rodentproof -rodeo -rodge -rodham -roding -rodingite -rodknight -rodless -rodlet -rodlike -rodmaker -rodman -rodney -rodomont -rodomontade -rodomontadist -rodomontador -rodsman -rodster -rodwood -roe -roeblingite -roebuck -roed -roelike -roentgen -roentgenism -roentgenization -roentgenize -roentgenogram -roentgenograph -roentgenographic -roentgenographically -roentgenography -roentgenologic -roentgenological -roentgenologically -roentgenologist -roentgenology -roentgenometer -roentgenometry -roentgenoscope -roentgenoscopic -roentgenoscopy -roentgenotherapy -roentgentherapy -roer -roestone -roey -rog -rogan -rogation -rogative -rogatory -roger -rogersite -roggle -rogue -roguedom -rogueling -roguery -rogueship -roguing -roguish -roguishly -roguishness -rohan -rohob -rohun -rohuna -roi -roid -roil -roily -roister -roisterer -roistering -roisteringly -roisterly -roisterous -roisterously -roit -roka -roke -rokeage -rokee -rokelay -roker -rokey -roky -role -roleo -roll -rollable -rollback -rolled -rollejee -roller -rollerer -rollermaker -rollermaking -rollerman -rollerskater -rollerskating -rolley -rolleyway -rolleywayman -rolliche -rollichie -rollick -rollicker -rollicking -rollickingly -rollickingness -rollicksome -rollicksomeness -rollicky -rolling -rollingly -rollix -rollmop -rollock -rollway -roloway -romaika -romaine -romal -romance -romancealist -romancean -romanceful -romanceish -romanceishness -romanceless -romancelet -romancelike -romancemonger -romanceproof -romancer -romanceress -romancical -romancing -romancist -romancy -romanium -romantic -romantical -romanticalism -romanticality -romantically -romanticalness -romanticism -romanticist -romanticistic -romanticity -romanticize -romanticly -romanticness -romantism -romantist -romanza -romaunt -rombos -rombowline -romeite -romerillo -romero -rommack -romp -romper -romping -rompingly -rompish -rompishly -rompishness -rompu -rompy -roncador -roncet -ronco -rond -rondache -rondacher -rondawel -ronde -rondeau -rondel -rondelet -rondelier -rondelle -rondellier -rondino -rondle -rondo -rondoletto -rondure -rone -rongeur -ronquil -rontgen -ronyon -rood -roodebok -roodle -roodstone -roof -roofage -roofer -roofing -roofless -rooflet -rooflike -roofman -rooftree -roofward -roofwise -roofy -rooibok -rooinek -rook -rooker -rookeried -rookery -rookie -rookish -rooklet -rooklike -rooky -rool -room -roomage -roomed -roomer -roomful -roomie -roomily -roominess -roomkeeper -roomless -roomlet -roommate -roomstead -roomth -roomthily -roomthiness -roomthy -roomward -roomy -roon -roorback -roosa -roost -roosted -rooster -roosterfish -roosterhood -roosterless -roosters -roostership -root -rootage -rootcap -rooted -rootedly -rootedness -rooter -rootery -rootfast -rootfastness -roothold -rootiness -rootle -rootless -rootlessness -rootlet -rootlike -rootling -rootstalk -rootstock -rootwalt -rootward -rootwise -rootworm -rooty -roove -ropable -rope -ropeable -ropeband -ropebark -ropedance -ropedancer -ropedancing -ropelayer -ropelaying -ropelike -ropemaker -ropemaking -ropeman -roper -roperipe -ropery -ropes -ropesmith -ropetrick -ropewalk -ropewalker -ropeway -ropework -ropily -ropiness -roping -ropish -ropishness -ropp -ropy -roque -roquelaure -roquer -roquet -roquette -roquist -roral -roratorio -roric -roriferous -rorifluent -roritorious -rorqual -rorty -rorulent -rory -rosacean -rosaceous -rosal -rosanilin -rosaniline -rosarian -rosario -rosarium -rosaruby -rosary -rosated -roscherite -roscid -roscoelite -rose -roseal -roseate -roseately -rosebay -rosebud -rosebush -rosed -rosedrop -rosefish -rosehead -rosehill -rosehiller -roseine -rosel -roseless -roselet -roselike -roselite -rosella -rosellate -roselle -rosemary -rosenbuschite -roseola -roseolar -roseoliform -roseolous -roseous -roseroot -rosery -roset -rosetan -rosetangle -rosetime -rosette -rosetted -rosetty -rosetum -rosety -roseways -rosewise -rosewood -rosewort -rosied -rosier -rosieresite -rosilla -rosillo -rosily -rosin -rosinate -rosinduline -rosiness -rosinous -rosinweed -rosinwood -rosiny -rosland -rosmarine -rosoli -rosolic -rosolio -rosolite -rosorial -ross -rosser -rossite -rostel -rostellar -rostellarian -rostellate -rostelliform -rostellum -roster -rostra -rostral -rostrally -rostrate -rostrated -rostriferous -rostriform -rostroantennary -rostrobranchial -rostrocarinate -rostrocaudal -rostroid -rostrolateral -rostrular -rostrulate -rostrulum -rostrum -rosular -rosulate -rosy -rot -rota -rotacism -rotal -rotalian -rotaliform -rotaliiform -rotaman -rotameter -rotan -rotang -rotarianize -rotary -rotascope -rotatable -rotate -rotated -rotating -rotation -rotational -rotative -rotatively -rotativism -rotatodentate -rotatoplane -rotator -rotatorian -rotatory -rotch -rote -rotella -rotenone -roter -rotge -rotgut -rother -rothermuck -rotifer -rotiferal -rotiferan -rotiferous -rotiform -rotisserie -roto -rotograph -rotogravure -rotor -rotorcraft -rotproof -rottan -rotten -rottenish -rottenly -rottenness -rottenstone -rotter -rotting -rottle -rottlera -rottlerin -rottock -rottolo -rotula -rotulad -rotular -rotulet -rotulian -rotuliform -rotulus -rotund -rotunda -rotundate -rotundifoliate -rotundifolious -rotundiform -rotundify -rotundity -rotundly -rotundness -rotundo -rotundotetragonal -roub -roucou -roud -roue -rouelle -rouge -rougeau -rougeberry -rougelike -rougemontite -rougeot -rough -roughage -roughcast -roughcaster -roughdraft -roughdraw -roughdress -roughdry -roughen -roughener -rougher -roughet -roughhearted -roughheartedness -roughhew -roughhewer -roughhewn -roughhouse -roughhouser -roughhousing -roughhousy -roughie -roughing -roughings -roughish -roughishly -roughishness -roughleg -roughly -roughness -roughometer -roughride -roughrider -roughroot -roughscuff -roughsetter -roughshod -roughslant -roughsome -roughstring -roughstuff -roughtail -roughtailed -roughwork -roughwrought -roughy -rougy -rouille -rouky -roulade -rouleau -roulette -roun -rounce -rounceval -rouncy -round -roundabout -roundaboutly -roundaboutness -rounded -roundedly -roundedness -roundel -roundelay -roundeleer -rounder -roundfish -roundhead -roundheaded -roundheadedness -roundhouse -rounding -roundish -roundishness -roundlet -roundline -roundly -roundmouthed -roundness -roundnose -roundnosed -roundridge -roundseam -roundsman -roundtail -roundtop -roundtree -roundup -roundwise -roundwood -roundworm -roundy -roup -rouper -roupet -roupily -roupingwife -roupit -roupy -rouse -rouseabout -rousedness -rousement -rouser -rousing -rousingly -roussette -roust -roustabout -rouster -rousting -rout -route -router -routh -routhercock -routhie -routhiness -routhy -routinary -routine -routineer -routinely -routing -routinish -routinism -routinist -routinization -routinize -routivarite -routous -routously -rouvillite -rove -rover -rovet -rovetto -roving -rovingly -rovingness -row -rowable -rowan -rowanberry -rowboat -rowdily -rowdiness -rowdy -rowdydow -rowdydowdy -rowdyish -rowdyishly -rowdyishness -rowdyism -rowdyproof -rowed -rowel -rowelhead -rowen -rower -rowet -rowiness -rowing -rowlandite -rowlet -rowlock -rowport -rowty -rowy -rox -roxy -royal -royale -royalet -royalism -royalist -royalization -royalize -royally -royalty -royet -royetness -royetous -royetously -royt -rozum -ruach -ruana -rub -rubasse -rubato -rubbed -rubber -rubberer -rubberize -rubberless -rubberneck -rubbernecker -rubbernose -rubbers -rubberstone -rubberwise -rubbery -rubbing -rubbingstone -rubbish -rubbishing -rubbishingly -rubbishly -rubbishry -rubbishy -rubble -rubbler -rubblestone -rubblework -rubbly -rubdown -rubedinous -rubedity -rubefacient -rubefaction -rubelet -rubella -rubelle -rubellite -rubellosis -rubeola -rubeolar -rubeoloid -ruberythric -ruberythrinic -rubescence -rubescent -rubiaceous -rubianic -rubiate -rubiator -rubican -rubicelle -rubiconed -rubicund -rubicundity -rubidic -rubidine -rubidium -rubied -rubific -rubification -rubificative -rubify -rubiginous -rubijervine -rubine -rubineous -rubious -ruble -rublis -rubor -rubric -rubrica -rubrical -rubricality -rubrically -rubricate -rubrication -rubricator -rubrician -rubricism -rubricist -rubricity -rubricize -rubricose -rubrific -rubrification -rubrify -rubrisher -rubrospinal -rubstone -ruby -rubylike -rubytail -rubythroat -rubywise -rucervine -ruche -ruching -ruck -rucker -ruckle -ruckling -rucksack -rucksey -ruckus -rucky -ructation -ruction -rud -rudas -rudd -rudder -rudderhead -rudderhole -rudderless -rudderlike -rudderpost -rudderstock -ruddied -ruddily -ruddiness -ruddle -ruddleman -ruddock -ruddy -ruddyish -rude -rudely -rudeness -rudented -rudenture -ruderal -rudesby -rudge -rudiment -rudimental -rudimentarily -rudimentariness -rudimentary -rudimentation -rudish -rudistan -rudistid -rudity -rue -rueful -ruefully -ruefulness -ruelike -ruelle -ruen -ruer -ruesome -ruesomeness -ruewort -rufescence -rufescent -ruff -ruffable -ruffed -ruffer -ruffian -ruffianage -ruffiandom -ruffianhood -ruffianish -ruffianism -ruffianize -ruffianlike -ruffianly -ruffiano -ruffin -ruffle -ruffled -ruffleless -rufflement -ruffler -rufflike -ruffliness -ruffling -ruffly -ruficarpous -ruficaudate -ruficoccin -ruficornate -rufigallic -rufoferruginous -rufofulvous -rufofuscous -rufopiceous -rufotestaceous -rufous -rufter -rufulous -rufus -rug -ruga -rugate -rugged -ruggedly -ruggedness -rugging -ruggle -ruggy -rugheaded -ruglike -rugmaker -rugmaking -rugosa -rugose -rugosely -rugosity -rugous -rugulose -ruin -ruinable -ruinate -ruination -ruinatious -ruinator -ruined -ruiner -ruing -ruiniform -ruinlike -ruinous -ruinously -ruinousness -ruinproof -rukh -rulable -rule -ruledom -ruleless -rulemonger -ruler -rulership -ruling -rulingly -rull -ruller -rullion -rum -rumal -rumbelow -rumble -rumblegarie -rumblegumption -rumblement -rumbler -rumbling -rumblingly -rumbly -rumbo -rumbooze -rumbowline -rumbowling -rumbullion -rumbumptious -rumbustical -rumbustious -rumbustiousness -rumchunder -rumen -rumenitis -rumenocentesis -rumenotomy -rumfustian -rumgumption -rumgumptious -ruminal -ruminant -ruminantly -ruminate -ruminating -ruminatingly -rumination -ruminative -ruminatively -ruminator -rumkin -rumless -rumly -rummage -rummager -rummagy -rummer -rummily -rumminess -rummish -rummy -rumness -rumney -rumor -rumorer -rumormonger -rumorous -rumorproof -rumourmonger -rump -rumpad -rumpadder -rumpade -rumple -rumpless -rumply -rumpscuttle -rumpuncheon -rumpus -rumrunner -rumrunning -rumshop -rumswizzle -rumtytoo -run -runabout -runagate -runaround -runaway -runback -runboard -runby -runch -runchweed -runcinate -rundale -rundle -rundlet -rune -runecraft -runed -runefolk -runeless -runelike -runer -runesmith -runestaff -runeword -runfish -rung -runghead -rungless -runholder -runic -runically -runiform -runite -runkeeper -runkle -runkly -runless -runlet -runman -runnable -runnel -runner -runnet -running -runningly -runny -runoff -runologist -runology -runout -runover -runproof -runrig -runround -runt -runted -runtee -runtiness -runtish -runtishly -runtishness -runty -runway -rupa -rupee -rupestral -rupestrian -rupestrine -rupia -rupiah -rupial -rupicaprine -rupicoline -rupicolous -rupie -rupitic -ruptile -ruption -ruptive -ruptuary -rupturable -rupture -ruptured -rupturewort -rural -ruralism -ruralist -ruralite -rurality -ruralization -ruralize -rurally -ruralness -rurban -ruridecanal -rurigenous -ruru -ruse -rush -rushbush -rushed -rushen -rusher -rushiness -rushing -rushingly -rushingness -rushland -rushlight -rushlighted -rushlike -rushlit -rushy -rusine -rusk -ruskin -rusky -rusma -rusot -ruspone -russel -russet -russeting -russetish -russetlike -russety -russia -russud -rust -rustable -rustful -rustic -rustical -rustically -rusticalness -rusticate -rustication -rusticator -rusticial -rusticism -rusticity -rusticize -rusticly -rusticness -rusticoat -rustily -rustiness -rustle -rustler -rustless -rustling -rustlingly -rustlingness -rustly -rustproof -rustre -rustred -rusty -rustyback -rustyish -ruswut -rut -rutabaga -rutaceous -rutaecarpine -rutate -rutch -rutelian -ruth -ruthenate -ruthenic -ruthenious -ruthenium -ruthenous -ruther -rutherford -rutherfordine -rutherfordite -ruthful -ruthfully -ruthfulness -ruthless -ruthlessly -ruthlessness -rutic -rutidosis -rutilant -rutilated -rutile -rutilous -rutin -rutinose -ruttee -rutter -ruttiness -ruttish -ruttishly -ruttishness -rutty -rutyl -rutylene -ruvid -rux -rvulsant -ryal -ryania -rybat -ryder -rye -ryen -ryme -rynchosporous -rynd -rynt -ryot -ryotwar -ryotwari -rype -rypeck -rytidosis -s -sa -saa -sab -sabadilla -sabadine -sabadinine -sabaigrass -sabalo -sabanut -sabbat -sabbath -sabbatia -sabbatic -sabbatical -sabbatine -sabbatism -sabbaton -sabbitha -sabdariffa -sabe -sabeca -sabella -sabellan -sabellarian -sabellid -sabelloid -saber -saberbill -sabered -saberleg -saberlike -saberproof -sabertooth -saberwing -sabiaceous -sabicu -sabina -sabine -sabino -sable -sablefish -sableness -sably -sabora -saboraim -sabot -sabotage -saboted -saboteur -sabotine -sabra -sabretache -sabromin -sabuline -sabulite -sabulose -sabulosity -sabulous -sabulum -saburra -saburral -saburration -sabutan -sabzi -sac -sacalait -sacaline -sacaton -sacatra -sacbrood -saccade -saccadic -saccate -saccated -saccharamide -saccharase -saccharate -saccharated -saccharephidrosis -saccharic -saccharide -sacchariferous -saccharification -saccharifier -saccharify -saccharilla -saccharimeter -saccharimetric -saccharimetrical -saccharimetry -saccharin -saccharinate -saccharinated -saccharine -saccharineish -saccharinely -saccharinic -saccharinity -saccharization -saccharize -saccharobacillus -saccharobiose -saccharobutyric -saccharoceptive -saccharoceptor -saccharochemotropic -saccharocolloid -saccharofarinaceous -saccharogalactorrhea -saccharogenic -saccharohumic -saccharoid -saccharoidal -saccharolactonic -saccharolytic -saccharometabolic -saccharometabolism -saccharometer -saccharometric -saccharometry -saccharomucilaginous -saccharomyces -saccharomycetaceous -saccharomycete -saccharomycetic -saccharomycosis -saccharon -saccharonate -saccharone -saccharonic -saccharophylly -saccharorrhea -saccharoscope -saccharose -saccharostarchy -saccharosuria -saccharotriose -saccharous -saccharulmic -saccharulmin -saccharum -saccharuria -sacciferous -sacciform -saccobranchiate -saccoderm -saccolabium -saccomyian -saccomyid -saccomyine -saccomyoid -saccomyoidean -saccos -saccular -sacculate -sacculated -sacculation -saccule -sacculoutricular -sacculus -saccus -sacellum -sacerdocy -sacerdotage -sacerdotal -sacerdotalism -sacerdotalist -sacerdotalize -sacerdotally -sacerdotical -sacerdotism -sachamaker -sachem -sachemdom -sachemic -sachemship -sachet -sack -sackage -sackamaker -sackbag -sackbut -sackcloth -sackclothed -sackdoudle -sacked -sacken -sacker -sackful -sacking -sackless -sacklike -sackmaker -sackmaking -sackman -sacktime -saclike -saco -sacope -sacque -sacra -sacrad -sacral -sacralgia -sacralization -sacrament -sacramental -sacramentalism -sacramentalist -sacramentality -sacramentally -sacramentalness -sacramentarian -sacramentarianism -sacramentarist -sacramentary -sacramenter -sacramentism -sacramentize -sacramentum -sacraria -sacrarial -sacrarium -sacrectomy -sacred -sacredly -sacredness -sacrificable -sacrificant -sacrification -sacrificator -sacrificatory -sacrificature -sacrifice -sacrificer -sacrificial -sacrificially -sacrificing -sacrilege -sacrileger -sacrilegious -sacrilegiously -sacrilegiousness -sacrilegist -sacrilumbal -sacrilumbalis -sacring -sacrist -sacristan -sacristy -sacro -sacrocaudal -sacrococcygeal -sacrococcygean -sacrococcygeus -sacrococcyx -sacrocostal -sacrocotyloid -sacrocotyloidean -sacrocoxalgia -sacrocoxitis -sacrodorsal -sacrodynia -sacrofemoral -sacroiliac -sacroinguinal -sacroischiac -sacroischiadic -sacroischiatic -sacrolumbal -sacrolumbalis -sacrolumbar -sacropectineal -sacroperineal -sacropictorial -sacroposterior -sacropubic -sacrorectal -sacrosanct -sacrosanctity -sacrosanctness -sacrosciatic -sacrosecular -sacrospinal -sacrospinalis -sacrospinous -sacrotomy -sacrotuberous -sacrovertebral -sacrum -sad -sadden -saddening -saddeningly -saddik -saddirham -saddish -saddle -saddleback -saddlebag -saddlebow -saddlecloth -saddled -saddleleaf -saddleless -saddlelike -saddlenose -saddler -saddlery -saddlesick -saddlesore -saddlesoreness -saddlestead -saddletree -saddlewise -saddling -sade -sadh -sadhe -sadhearted -sadhu -sadic -sadiron -sadism -sadist -sadistic -sadistically -sadly -sadness -sado -sadomasochism -sadr -saecula -saeculum -saernaite -saeter -saeume -safari -safe -safeblower -safeblowing -safebreaker -safebreaking -safecracking -safeguard -safeguarder -safehold -safekeeper -safekeeping -safelight -safely -safemaker -safemaking -safen -safener -safeness -safety -saffian -safflor -safflorite -safflow -safflower -saffron -saffroned -saffrontree -saffronwood -saffrony -safranin -safranine -safranophile -safrole -saft -sag -saga -sagaciate -sagacious -sagaciously -sagaciousness -sagacity -sagaie -sagaman -sagamite -sagamore -sagapenum -sagathy -sage -sagebrush -sagebrusher -sagebush -sageleaf -sagely -sagene -sageness -sagenite -sagenitic -sagerose -sageship -sagewood -sagger -sagging -saggon -saggy -saghavart -saginate -sagination -saging -sagitta -sagittal -sagittally -sagittarius -sagittary -sagittate -sagittiferous -sagittiform -sagittocyst -sagittoid -sagless -sago -sagoin -sagolike -saguaro -sagum -saguran -sagvandite -sagwire -sagy -sah -sahh -sahib -sahme -sahoukar -sahukar -sai -saic -said -saiga -sail -sailable -sailage -sailboat -sailcloth -sailed -sailer -sailfish -sailflying -sailing -sailingly -sailless -sailmaker -sailmaking -sailor -sailoring -sailorizing -sailorless -sailorlike -sailorly -sailorman -sailorproof -sailplane -sailship -sailsman -saily -saim -saimiri -saimy -sain -saint -saintdom -sainted -saintess -sainthood -saintish -saintism -saintless -saintlike -saintlily -saintliness -saintling -saintly -saintologist -saintology -saintship -saip -sair -sairly -sairve -sairy -saithe -saj -sajou -sake -sakeber -sakeen -saker -sakeret -saki -sakieh -sakulya -sal -salaam -salaamlike -salability -salable -salableness -salably -salaceta -salacious -salaciously -salaciousness -salacity -salacot -salad -salading -salago -salagrama -salal -salamandarin -salamander -salamanderlike -salamandrian -salamandriform -salamandrine -salamandroid -salambao -salamo -salampore -salangane -salangid -salar -salariat -salaried -salary -salaryless -salat -salay -sale -salegoer -salele -salema -salenixon -salep -saleratus -saleroom -salesclerk -saleslady -salesman -salesmanship -salespeople -salesperson -salesroom -saleswoman -salework -saleyard -salfern -salic -salicaceous -salicetum -salicin -salicional -salicorn -salicyl -salicylal -salicylaldehyde -salicylamide -salicylanilide -salicylase -salicylate -salicylic -salicylide -salicylidene -salicylism -salicylize -salicylous -salicyluric -salicylyl -salience -salient -salientian -saliently -saliferous -salifiable -salification -salify -saligenin -saligot -salimeter -salimetry -salina -salination -saline -salinelle -salineness -saliniferous -salinification -saliniform -salinity -salinize -salinometer -salinometry -salinosulphureous -salinoterreous -salite -salited -saliva -salival -salivant -salivary -salivate -salivation -salivator -salivatory -salivous -salix -salle -sallee -salleeman -sallenders -sallet -sallier -salloo -sallow -sallowish -sallowness -sallowy -sally -sallyman -sallywood -salma -salmagundi -salmiac -salmine -salmis -salmon -salmonberry -salmonella -salmonellae -salmonellosis -salmonet -salmonid -salmoniform -salmonlike -salmonoid -salmonsite -salmwood -salnatron -salol -salometer -salometry -salomon -salon -saloon -saloonist -saloonkeeper -saloop -salopian -salp -salpa -salpacean -salpian -salpicon -salpiform -salpiglossis -salpingectomy -salpingemphraxis -salpinges -salpingian -salpingion -salpingitic -salpingitis -salpingocatheterism -salpingocele -salpingocyesis -salpingomalleus -salpingonasal -salpingopalatal -salpingopalatine -salpingoperitonitis -salpingopexy -salpingopharyngeal -salpingopharyngeus -salpingopterygoid -salpingorrhaphy -salpingoscope -salpingostaphyline -salpingostenochoria -salpingostomatomy -salpingostomy -salpingotomy -salpinx -salpoid -salse -salsifis -salsify -salsilla -salsolaceous -salsuginous -salt -salta -saltant -saltarella -saltarello -saltary -saltate -saltation -saltativeness -saltator -saltatorial -saltatorian -saltatoric -saltatorious -saltatory -saltbush -saltcat -saltcatch -saltcellar -salted -saltee -salten -salter -saltern -saltery -saltfat -saltfoot -salthouse -saltier -saltierra -saltierwise -saltigrade -saltimbanco -saltimbank -saltimbankery -saltine -saltiness -salting -saltish -saltishly -saltishness -saltless -saltlessness -saltly -saltmaker -saltmaking -saltman -saltmouth -saltness -saltometer -saltorel -saltpan -saltpeter -saltpetrous -saltpond -saltspoon -saltspoonful -saltsprinkler -saltus -saltweed -saltwife -saltworker -saltworks -saltwort -salty -salubrify -salubrious -salubriously -salubriousness -salubrity -saluki -salung -salutarily -salutariness -salutary -salutation -salutational -salutationless -salutatious -salutatorian -salutatorily -salutatorium -salutatory -salute -saluter -salutiferous -salutiferously -salvability -salvable -salvableness -salvably -salvadora -salvadoraceous -salvage -salvageable -salvagee -salvageproof -salvager -salvaging -salvarsan -salvatella -salvation -salvational -salvationism -salvationist -salvatory -salve -salveline -salver -salverform -salvianin -salvific -salvifical -salvifically -salviniaceous -salviol -salvo -salvor -salvy -salzfelle -sam -samadh -samadhi -samaj -saman -samara -samaria -samariform -samarium -samaroid -samarra -samarskite -samba -sambal -sambaqui -sambar -sambhogakaya -sambo -sambuk -sambuke -sambunigrin -same -samekh -samel -sameliness -samely -samen -sameness -samesome -samh -samhita -samiel -samiresite -samiri -samisen -samite -samkara -samlet -sammel -sammer -sammier -sammy -samogonka -samothere -samovar -samp -sampaguita -sampaloc -sampan -samphire -sampi -sample -sampleman -sampler -samplery -sampling -samsara -samshu -samskara -samson -samsonite -samurai -san -sanability -sanable -sanableness -sanai -sanative -sanativeness -sanatoria -sanatorium -sanatory -sanbenito -sancho -sanct -sancta -sanctanimity -sanctifiable -sanctifiableness -sanctifiably -sanctificate -sanctification -sanctified -sanctifiedly -sanctifier -sanctify -sanctifyingly -sanctilogy -sanctiloquent -sanctimonial -sanctimonious -sanctimoniously -sanctimoniousness -sanctimony -sanction -sanctionable -sanctionary -sanctionative -sanctioner -sanctionist -sanctionless -sanctionment -sanctitude -sanctity -sanctologist -sanctorium -sanctuaried -sanctuarize -sanctuary -sanctum -sancyite -sand -sandak -sandal -sandaled -sandaliform -sandaling -sandalwood -sandalwort -sandan -sandarac -sandaracin -sandastros -sandbag -sandbagger -sandbank -sandbin -sandblast -sandboard -sandbox -sandboy -sandbur -sandclub -sandculture -sanded -sander -sanderling -sanders -sandfish -sandflower -sandglass -sandheat -sandhi -sandiferous -sandiness -sanding -sandiver -sandix -sandlapper -sandless -sandlike -sandling -sandman -sandnatter -sandnecker -sandpaper -sandpaperer -sandpeep -sandpiper -sandproof -sandrock -sandspit -sandspur -sandstay -sandstone -sandstorm -sandust -sandweed -sandweld -sandwich -sandwood -sandworm -sandwort -sandy -sandyish -sane -sanely -saneness -sang -sanga -sangar -sangaree -sangei -sanger -sangerbund -sangerfest -sangha -sanglant -sangley -sangreeroot -sangrel -sangsue -sanguicolous -sanguifacient -sanguiferous -sanguification -sanguifier -sanguifluous -sanguimotor -sanguimotory -sanguinaceous -sanguinarily -sanguinariness -sanguinary -sanguine -sanguineless -sanguinely -sanguineness -sanguineobilious -sanguineophlegmatic -sanguineous -sanguineousness -sanguineovascular -sanguinicolous -sanguiniferous -sanguinification -sanguinism -sanguinity -sanguinivorous -sanguinocholeric -sanguinolency -sanguinolent -sanguinopoietic -sanguinous -sanguisuge -sanguisugent -sanguisugous -sanguivorous -sanicle -sanidine -sanidinic -sanidinite -sanies -sanification -sanify -sanious -sanipractic -sanitarian -sanitarily -sanitarist -sanitarium -sanitary -sanitate -sanitation -sanitationist -sanitist -sanitize -sanity -sanjak -sanjakate -sanjakbeg -sanjakship -sank -sankha -sannaite -sannup -sannyasi -sannyasin -sanopurulent -sanoserous -sans -sansei -sanshach -sansi -sant -santal -santalaceous -santalic -santalin -santalol -santalwood -santapee -santene -santimi -santims -santir -santon -santonica -santonin -santoninic -santorinite -sanukite -sao -sap -sapa -sapajou -sapan -sapanwood -sapbush -sapek -sapful -saphead -sapheaded -sapheadedness -saphena -saphenal -saphenous -saphie -sapid -sapidity -sapidless -sapidness -sapience -sapiency -sapient -sapiential -sapientially -sapientize -sapiently -sapin -sapinda -sapindaceous -sapindaship -sapiutan -saple -sapless -saplessness -sapling -saplinghood -sapo -sapodilla -sapogenin -saponaceous -saponaceousness -saponacity -saponarin -saponary -saponifiable -saponification -saponifier -saponify -saponin -saponite -sapophoric -sapor -saporific -saporosity -saporous -sapota -sapotaceous -sapote -sapotilha -sapotilla -sapotoxin -sappanwood -sappare -sapper -sapphic -sapphire -sapphireberry -sapphired -sapphirewing -sapphiric -sapphirine -sappiness -sapping -sapples -sappy -sapremia -sapremic -saprine -saprocoll -saprodil -saprodontia -saprogenic -saprogenous -saprolegniaceous -saprolegnious -saprolite -saprolitic -sapropel -sapropelic -sapropelite -saprophagan -saprophagous -saprophile -saprophilous -saprophyte -saprophytic -saprophytically -saprophytism -saprostomous -saprozoic -sapsago -sapskull -sapsuck -sapsucker -sapucaia -sapucainha -sapwood -sapwort -sar -saraad -sarabacan -saraband -saraf -sarangi -sarangousty -sarawakite -sarbacane -sarbican -sarcasm -sarcasmproof -sarcast -sarcastic -sarcastical -sarcastically -sarcasticalness -sarcasticness -sarcelle -sarcenet -sarcilis -sarcine -sarcitis -sarcle -sarcler -sarcoadenoma -sarcoblast -sarcocarcinoma -sarcocarp -sarcocele -sarcocollin -sarcocyst -sarcocystidean -sarcocystidian -sarcocystoid -sarcocyte -sarcode -sarcoderm -sarcodic -sarcodictyum -sarcodous -sarcoenchondroma -sarcogenic -sarcogenous -sarcoglia -sarcoid -sarcolactic -sarcolemma -sarcolemmic -sarcolemmous -sarcoline -sarcolite -sarcologic -sarcological -sarcologist -sarcology -sarcolysis -sarcolyte -sarcolytic -sarcoma -sarcomatoid -sarcomatosis -sarcomatous -sarcomere -sarcophagal -sarcophagi -sarcophagic -sarcophagid -sarcophagine -sarcophagize -sarcophagous -sarcophagus -sarcophagy -sarcophile -sarcophilous -sarcoplasm -sarcoplasma -sarcoplasmatic -sarcoplasmic -sarcoplast -sarcoplastic -sarcopoietic -sarcoptic -sarcoptid -sarcosepsis -sarcosepta -sarcoseptum -sarcosine -sarcosis -sarcosoma -sarcosperm -sarcosporid -sarcosporidial -sarcosporidian -sarcosporidiosis -sarcostosis -sarcostyle -sarcotheca -sarcotherapeutics -sarcotherapy -sarcotic -sarcous -sard -sardachate -sardel -sardine -sardinewise -sardius -sardonic -sardonical -sardonically -sardonicism -sardonyx -sare -sargasso -sargassum -sargo -sargus -sari -sarif -sarigue -sarinda -sarip -sark -sarkar -sarkful -sarkical -sarkine -sarking -sarkinite -sarkit -sarkless -sarlak -sarlyk -sarmatier -sarment -sarmenta -sarmentaceous -sarmentiferous -sarmentose -sarmentous -sarmentum -sarna -sarod -saron -sarong -saronic -saronide -saros -sarothrum -sarpler -sarpo -sarra -sarracenia -sarraceniaceous -sarracenial -sarraf -sarrazin -sarrusophone -sarrusophonist -sarsa -sarsaparilla -sarsaparillin -sarsen -sarsenet -sart -sartage -sartain -sartor -sartoriad -sartorial -sartorially -sartorian -sartorite -sartorius -sarus -sarwan -sasa -sasan -sasani -sasanqua -sash -sashay -sashery -sashing -sashless -sasin -sasine -saskatoon -sassaby -sassafac -sassafrack -sassafras -sassolite -sassy -sassywood -sat -satable -satan -satang -satanic -satanical -satanically -satanicalness -satanist -satanize -satara -satchel -satcheled -sate -sateen -sateenwood -sateless -satelles -satellitarian -satellite -satellited -satellitesimal -satellitian -satellitic -satellitious -satellitium -satellitoid -satellitory -satelloid -satiability -satiable -satiableness -satiably -satiate -satiation -satient -satiety -satin -satinbush -satine -satined -satinette -satinfin -satinflower -satinite -satinity -satinize -satinleaf -satinlike -satinpod -satinwood -satiny -satire -satireproof -satiric -satirical -satirically -satiricalness -satirist -satirizable -satirize -satirizer -satisdation -satisdiction -satisfaction -satisfactional -satisfactionist -satisfactionless -satisfactive -satisfactorily -satisfactoriness -satisfactorious -satisfactory -satisfiable -satisfice -satisfied -satisfiedly -satisfiedness -satisfier -satisfy -satisfying -satisfyingly -satisfyingness -satispassion -satlijk -satrap -satrapal -satrapess -satrapic -satrapical -satrapy -satron -sattle -sattva -satura -saturability -saturable -saturant -saturate -saturated -saturater -saturation -saturator -saturnalia -saturnalian -saturnian -saturniid -saturnine -saturninely -saturnineness -saturninity -saturnism -saturnity -saturnize -satyagrahi -satyashodak -satyr -satyresque -satyress -satyriasis -satyric -satyrine -satyrion -satyrism -satyrlike -satyromaniac -sauce -sauceboat -saucebox -saucedish -sauceless -sauceline -saucemaker -saucemaking -sauceman -saucepan -sauceplate -saucer -saucerful -saucerleaf -saucerless -saucerlike -saucily -sauciness -saucy -sauerkraut -sauf -sauger -saugh -saughen -sauld -saulie -sault -saulter -saum -saumon -saumont -sauna -saunders -saunderswood -saunter -saunterer -sauntering -saunteringly -sauqui -saur -saurel -saurian -sauriasis -sauriosis -saurischian -saurodont -saurognathism -saurognathous -saurophagous -sauropod -sauropodous -sauropsid -sauropsidan -sauropsidian -sauropterygian -saurornithic -saururaceous -saururan -saururous -saury -sausage -sausagelike -sausinger -saussurite -saussuritic -saussuritization -saussuritize -saut -saute -sauterelle -sauterne -sauternes -sauteur -sauty -sauve -sauvegarde -savable -savableness -savacu -savage -savagedom -savagely -savageness -savagerous -savagery -savagess -savagism -savagize -savanilla -savanna -savant -savarin -savation -save -saved -saveloy -saver -savin -saving -savingly -savingness -savior -savioress -saviorhood -saviorship -savola -savor -savored -savorer -savorily -savoriness -savoringly -savorless -savorous -savorsome -savory -savour -savoy -savoyed -savoying -savssat -savvy -saw -sawah -sawali -sawarra -sawback -sawbelly -sawbill -sawbones -sawbuck -sawbwa -sawder -sawdust -sawdustish -sawdustlike -sawdusty -sawed -sawer -sawfish -sawfly -sawhorse -sawing -sawish -sawlike -sawmaker -sawmaking -sawman -sawmill -sawmiller -sawmilling -sawmon -sawmont -sawn -sawney -sawsetter -sawsharper -sawsmith -sawt -sawway -sawworker -sawwort -sawyer -sax -saxatile -saxboard -saxcornet -saxhorn -saxicavous -saxicole -saxicoline -saxicolous -saxifragaceous -saxifragant -saxifrage -saxifragous -saxifrax -saxigenous -saxonite -saxophone -saxophonist -saxotromba -saxpence -saxten -saxtie -saxtuba -say -saya -sayability -sayable -sayableness -sayer -sayette -sayid -saying -sazen -sblood -sbodikins -scab -scabbard -scabbardless -scabbed -scabbedness -scabbery -scabbily -scabbiness -scabble -scabbler -scabbling -scabby -scabellum -scaberulous -scabid -scabies -scabietic -scabinus -scabiosity -scabious -scabish -scabland -scabrate -scabrescent -scabrid -scabridity -scabridulous -scabrities -scabriusculose -scabriusculous -scabrosely -scabrous -scabrously -scabrousness -scabwort -scacchic -scacchite -scad -scaddle -scads -scaff -scaffer -scaffery -scaffie -scaffle -scaffold -scaffoldage -scaffolder -scaffolding -scaglia -scagliola -scagliolist -scala -scalable -scalableness -scalably -scalage -scalar -scalare -scalarian -scalariform -scalarwise -scalation -scalawag -scalawaggery -scalawaggy -scald -scaldberry -scalded -scalder -scaldfish -scaldic -scalding -scaldweed -scaldy -scale -scaleback -scalebark -scaleboard -scaled -scaledrake -scalefish -scaleful -scaleless -scalelet -scalelike -scaleman -scalena -scalene -scalenohedral -scalenohedron -scalenon -scalenous -scalenum -scalenus -scalepan -scaleproof -scaler -scales -scalesman -scalesmith -scaletail -scalewing -scalewise -scalework -scalewort -scaliger -scaliness -scaling -scall -scalled -scallion -scallola -scallom -scallop -scalloper -scalloping -scallopwise -scalma -scaloni -scalp -scalpeen -scalpel -scalpellar -scalpellic -scalpellum -scalpellus -scalper -scalping -scalpless -scalpriform -scalprum -scalpture -scalt -scaly -scalytail -scam -scamander -scamble -scambler -scambling -scamell -scamler -scamles -scammoniate -scammonin -scammony -scammonyroot -scamp -scampavia -scamper -scamperer -scamphood -scamping -scampingly -scampish -scampishly -scampishness -scampsman -scan -scandal -scandalization -scandalize -scandalizer -scandalmonger -scandalmongering -scandalmongery -scandalmonging -scandalous -scandalously -scandalousness -scandalproof -scandaroon -scandent -scandia -scandic -scandicus -scandium -scanmag -scannable -scanner -scanning -scanningly -scansion -scansionist -scansorial -scansorious -scant -scanties -scantily -scantiness -scantity -scantle -scantling -scantlinged -scantly -scantness -scanty -scap -scape -scapegallows -scapegoat -scapegoatism -scapegrace -scapel -scapeless -scapement -scapethrift -scapha -scaphion -scaphism -scaphite -scaphitoid -scaphocephalic -scaphocephalism -scaphocephalous -scaphocephalus -scaphocephaly -scaphocerite -scaphoceritic -scaphognathite -scaphognathitic -scaphoid -scapholunar -scaphopod -scaphopodous -scapiform -scapigerous -scapoid -scapolite -scapolitization -scapose -scapple -scappler -scapula -scapulalgia -scapular -scapulare -scapulary -scapulated -scapulectomy -scapulet -scapulimancy -scapuloaxillary -scapulobrachial -scapuloclavicular -scapulocoracoid -scapulodynia -scapulohumeral -scapulopexy -scapuloradial -scapulospinal -scapulothoracic -scapuloulnar -scapulovertebral -scapus -scar -scarab -scarabaean -scarabaei -scarabaeid -scarabaeidoid -scarabaeiform -scarabaeoid -scarabaeus -scarabee -scaraboid -scaramouch -scarce -scarcelins -scarcely -scarcement -scarcen -scarceness -scarcity -scare -scarebabe -scarecrow -scarecrowish -scarecrowy -scareful -scarehead -scaremonger -scaremongering -scareproof -scarer -scaresome -scarf -scarface -scarfed -scarfer -scarflike -scarfpin -scarfskin -scarfwise -scarfy -scarid -scarification -scarificator -scarifier -scarify -scarily -scariose -scarious -scarlatina -scarlatinal -scarlatiniform -scarlatinoid -scarlatinous -scarless -scarlet -scarletberry -scarletseed -scarlety -scarman -scarn -scaroid -scarp -scarpines -scarping -scarpment -scarproof -scarred -scarrer -scarring -scarry -scart -scarth -scarus -scarved -scary -scase -scasely -scat -scatch -scathe -scatheful -scatheless -scathelessly -scathing -scathingly -scatland -scatologia -scatologic -scatological -scatology -scatomancy -scatophagid -scatophagoid -scatophagous -scatophagy -scatoscopy -scatter -scatterable -scatteration -scatteraway -scatterbrain -scatterbrained -scatterbrains -scattered -scatteredly -scatteredness -scatterer -scattergood -scattering -scatteringly -scatterling -scattermouch -scattery -scatty -scatula -scaturient -scaul -scaum -scaup -scauper -scaur -scaurie -scaut -scavage -scavel -scavenage -scavenge -scavenger -scavengerism -scavengership -scavengery -scavenging -scaw -scawd -scawl -scazon -scazontic -sceat -scelalgia -scelerat -scelidosaur -scelidosaurian -scelidosauroid -sceloncus -scelotyrbe -scena -scenario -scenarioist -scenarioization -scenarioize -scenarist -scenarization -scenarize -scenary -scend -scene -scenecraft -sceneful -sceneman -scenery -sceneshifter -scenewright -scenic -scenical -scenically -scenist -scenite -scenograph -scenographer -scenographic -scenographical -scenographically -scenography -scent -scented -scenter -scentful -scenting -scentless -scentlessness -scentproof -scentwood -scepsis -scepter -scepterdom -sceptered -scepterless -sceptic -sceptral -sceptropherous -sceptrosophy -sceptry -scerne -sceuophorion -sceuophylacium -sceuophylax -schaapsteker -schairerite -schalmei -schalmey -schalstein -schanz -schapbachite -schappe -schapped -schapping -scharf -schatchen -schediasm -schediastic -schedular -schedulate -schedule -schedulize -scheelite -scheffel -schefferite -schelling -schelly -scheltopusik -schema -schemata -schematic -schematically -schematism -schematist -schematization -schematize -schematizer -schematogram -schematograph -schematologetically -schematomancy -schematonics -scheme -schemeful -schemeless -schemer -schemery -scheming -schemingly -schemist -schemy -schene -schepel -schepen -scherm -scherzando -scherzi -scherzo -schesis -scheuchzeriaceous -schiavone -schiffli -schiller -schillerfels -schillerization -schillerize -schilling -schimmel -schindylesis -schindyletic -schipperke -schism -schisma -schismatic -schismatical -schismatically -schismaticalness -schismatism -schismatist -schismatize -schismic -schismless -schist -schistaceous -schistic -schistocelia -schistocephalus -schistocoelia -schistocormia -schistocormus -schistocyte -schistocytosis -schistoglossia -schistoid -schistomelia -schistomelus -schistoprosopia -schistoprosopus -schistorrhachis -schistoscope -schistose -schistosity -schistosome -schistosomia -schistosomiasis -schistosomus -schistosternia -schistothorax -schistous -schistus -schizaeaceous -schizanthus -schizaxon -schizocarp -schizocarpic -schizocarpous -schizochroal -schizocoele -schizocoelic -schizocoelous -schizocyte -schizocytosis -schizodinic -schizogamy -schizogenesis -schizogenetic -schizogenetically -schizogenic -schizogenous -schizogenously -schizognath -schizognathism -schizognathous -schizogonic -schizogony -schizogregarine -schizoid -schizoidism -schizolaenaceous -schizolite -schizolysigenous -schizomycete -schizomycetic -schizomycetous -schizomycosis -schizonemertean -schizonemertine -schizont -schizopelmous -schizophasia -schizophrene -schizophrenia -schizophreniac -schizophrenic -schizophyte -schizophytic -schizopod -schizopodal -schizopodous -schizorhinal -schizospore -schizostele -schizostelic -schizostely -schizothecal -schizothoracic -schizothyme -schizothymia -schizothymic -schizotrichia -schiztic -schlemiel -schlemihl -schlenter -schlieren -schlieric -schloop -schmaltz -schmelz -schmelze -schnabel -schnapper -schnapps -schnauzer -schneider -schnitzel -schnorchel -schnorkel -schnorrer -scho -schochat -schochet -schoenobatic -schoenobatist -schoenus -schola -scholae -scholaptitude -scholar -scholarch -scholardom -scholarian -scholarism -scholarless -scholarlike -scholarliness -scholarly -scholarship -scholasm -scholastic -scholastical -scholastically -scholasticate -scholasticism -scholasticly -scholia -scholiast -scholiastic -scholion -scholium -schone -schonfelsite -school -schoolable -schoolbag -schoolbook -schoolbookish -schoolboy -schoolboydom -schoolboyhood -schoolboyish -schoolboyishly -schoolboyishness -schoolboyism -schoolbutter -schoolcraft -schooldame -schooldom -schooled -schoolery -schoolfellow -schoolfellowship -schoolful -schoolgirl -schoolgirlhood -schoolgirlish -schoolgirlishly -schoolgirlishness -schoolgirlism -schoolgirly -schoolgoing -schoolhouse -schooling -schoolingly -schoolish -schoolkeeper -schoolkeeping -schoolless -schoollike -schoolmaam -schoolmaamish -schoolmaid -schoolman -schoolmaster -schoolmasterhood -schoolmastering -schoolmasterish -schoolmasterishly -schoolmasterishness -schoolmasterism -schoolmasterly -schoolmastership -schoolmastery -schoolmate -schoolmiss -schoolmistress -schoolmistressy -schoolroom -schoolteacher -schoolteacherish -schoolteacherly -schoolteachery -schoolteaching -schooltide -schooltime -schoolward -schoolwork -schoolyard -schoon -schooner -schoppen -schorenbergite -schorl -schorlaceous -schorlomite -schorlous -schorly -schottische -schottish -schout -schraubthaler -schreiner -schreinerize -schriesheimite -schtoff -schuh -schuhe -schuit -schule -schultenite -schungite -schuss -schute -schwa -schwabacher -schwarz -schweizer -schweizerkase -sciaenid -sciaeniform -sciaenoid -scialytic -sciamachy -sciapod -sciapodous -sciarid -sciatheric -sciatherical -sciatherically -sciatic -sciatica -sciatical -sciatically -sciaticky -scibile -science -scienced -scient -sciential -scientician -scientific -scientifical -scientifically -scientificalness -scientificogeographical -scientificohistorical -scientificophilosophical -scientificopoetic -scientificoreligious -scientificoromantic -scientintically -scientism -scientist -scientistic -scientistically -scientize -scientolism -scilicet -scillain -scillipicrin -scillitin -scillitoxin -scimitar -scimitared -scimitarpod -scincid -scincidoid -scinciform -scincoid -scincoidian -scind -sciniph -scintilla -scintillant -scintillantly -scintillate -scintillating -scintillatingly -scintillation -scintillator -scintillescent -scintillize -scintillometer -scintilloscope -scintillose -scintillously -scintle -scintler -scintling -sciograph -sciographic -sciography -sciolism -sciolist -sciolistic -sciolous -sciomachiology -sciomachy -sciomancy -sciomantic -scion -sciophilous -sciophyte -scioptic -sciopticon -scioptics -scioptric -sciosophist -sciosophy -scioterical -scioterique -sciotheism -sciotheric -sciotherical -sciotherically -scious -scirenga -scirrhi -scirrhogastria -scirrhoid -scirrhoma -scirrhosis -scirrhous -scirrhus -scirrosity -scirtopod -scirtopodous -scissel -scissible -scissile -scission -scissiparity -scissor -scissorbill -scissorbird -scissorer -scissoring -scissorium -scissorlike -scissorlikeness -scissors -scissorsbird -scissorsmith -scissorstail -scissortail -scissorwise -scissura -scissure -scissurellid -sciurid -sciurine -sciuroid -sciuromorph -sciuromorphic -sclaff -sclate -sclater -sclaw -scler -sclera -scleral -scleranth -scleratogenous -sclere -sclerectasia -sclerectomy -scleredema -sclereid -sclerema -sclerencephalia -sclerenchyma -sclerenchymatous -sclerenchyme -sclererythrin -scleretinite -scleriasis -sclerification -sclerify -sclerite -scleritic -scleritis -sclerized -sclerobase -sclerobasic -scleroblast -scleroblastema -scleroblastemic -scleroblastic -sclerocauly -sclerochorioiditis -sclerochoroiditis -scleroconjunctival -scleroconjunctivitis -sclerocornea -sclerocorneal -sclerodactylia -sclerodactyly -scleroderm -scleroderma -sclerodermatitis -sclerodermatous -sclerodermia -sclerodermic -sclerodermite -sclerodermitic -sclerodermitis -sclerodermous -sclerogen -sclerogenoid -sclerogenous -scleroid -scleroiritis -sclerokeratitis -sclerokeratoiritis -scleroma -scleromata -scleromeninx -scleromere -sclerometer -sclerometric -scleronychia -scleronyxis -sclerophthalmia -sclerophyll -sclerophyllous -sclerophylly -scleroprotein -sclerosal -sclerosarcoma -scleroscope -sclerose -sclerosed -scleroseptum -sclerosis -scleroskeletal -scleroskeleton -sclerostenosis -sclerostomiasis -sclerotal -sclerote -sclerotia -sclerotial -sclerotic -sclerotica -sclerotical -scleroticectomy -scleroticochorioiditis -scleroticochoroiditis -scleroticonyxis -scleroticotomy -sclerotinial -sclerotiniose -sclerotioid -sclerotitic -sclerotitis -sclerotium -sclerotized -sclerotoid -sclerotome -sclerotomic -sclerotomy -sclerous -scleroxanthin -sclerozone -scliff -sclim -sclimb -scoad -scob -scobby -scobicular -scobiform -scobs -scoff -scoffer -scoffery -scoffing -scoffingly -scoffingstock -scofflaw -scog -scoggan -scogger -scoggin -scogginism -scogginist -scoinson -scoke -scolb -scold -scoldable -scoldenore -scolder -scolding -scoldingly -scoleces -scoleciasis -scolecid -scoleciform -scolecite -scolecoid -scolecology -scolecophagous -scolecospore -scoleryng -scolex -scolia -scolices -scoliid -scoliograptic -scoliokyposis -scoliometer -scolion -scoliorachitic -scoliosis -scoliotic -scoliotone -scolite -scollop -scolog -scolopaceous -scolopacine -scolopendra -scolopendrelloid -scolopendrid -scolopendriform -scolopendrine -scolopendroid -scolophore -scolopophore -scolytid -scolytoid -scomberoid -scombrid -scombriform -scombrine -scombroid -scombroidean -scombrone -sconce -sconcer -sconcheon -sconcible -scone -scoon -scoop -scooped -scooper -scoopful -scooping -scoopingly -scoot -scooter -scopa -scoparin -scoparius -scopate -scope -scopeless -scopelid -scopeliform -scopelism -scopeloid -scopet -scopic -scopiferous -scopiform -scopiformly -scopine -scopiped -scopola -scopolamine -scopoleine -scopoletin -scopoline -scopperil -scops -scoptical -scoptically -scoptophilia -scoptophiliac -scoptophilic -scoptophobia -scopula -scopularian -scopulate -scopuliferous -scopuliform -scopuliped -scopulite -scopulous -scopulousness -scorbute -scorbutic -scorbutical -scorbutically -scorbutize -scorbutus -scorch -scorched -scorcher -scorching -scorchingly -scorchingness -scorchproof -score -scoreboard -scorebook -scored -scorekeeper -scorekeeping -scoreless -scorer -scoria -scoriac -scoriaceous -scoriae -scorification -scorifier -scoriform -scorify -scoring -scorious -scorn -scorned -scorner -scornful -scornfully -scornfulness -scorningly -scornproof -scorny -scorodite -scorpaenid -scorpaenoid -scorpene -scorper -scorpioid -scorpioidal -scorpion -scorpionic -scorpionid -scorpionweed -scorpionwort -scorse -scortation -scortatory -scot -scotale -scotch -scotcher -scotching -scotchman -scote -scoter -scoterythrous -scotia -scotino -scotodinia -scotogram -scotograph -scotographic -scotography -scotoma -scotomata -scotomatic -scotomatical -scotomatous -scotomia -scotomic -scotomy -scotophobia -scotopia -scotopic -scotoscope -scotosis -scouch -scouk -scoundrel -scoundreldom -scoundrelish -scoundrelism -scoundrelly -scoundrelship -scoup -scour -scourage -scoured -scourer -scouress -scourfish -scourge -scourger -scourging -scourgingly -scouriness -scouring -scourings -scourway -scourweed -scourwort -scoury -scouse -scout -scoutcraft -scoutdom -scouter -scouth -scouther -scouthood -scouting -scoutingly -scoutish -scoutmaster -scoutwatch -scove -scovel -scovillite -scovy -scow -scowbank -scowbanker -scowder -scowl -scowler -scowlful -scowling -scowlingly -scowlproof -scowman -scrab -scrabble -scrabbled -scrabbler -scrabe -scrae -scraffle -scrag -scragged -scraggedly -scraggedness -scragger -scraggily -scragginess -scragging -scraggled -scraggling -scraggly -scraggy -scraily -scram -scramasax -scramble -scramblement -scrambler -scrambling -scramblingly -scrambly -scrampum -scran -scranch -scrank -scranky -scrannel -scranning -scranny -scrap -scrapable -scrapbook -scrape -scrapeage -scraped -scrapepenny -scraper -scrapie -scraping -scrapingly -scrapler -scraplet -scrapling -scrapman -scrapmonger -scrappage -scrapped -scrapper -scrappet -scrappily -scrappiness -scrapping -scrappingly -scrapple -scrappler -scrappy -scrapworks -scrapy -scrat -scratch -scratchable -scratchably -scratchback -scratchboard -scratchbrush -scratchcard -scratchcarding -scratchcat -scratcher -scratches -scratchification -scratchiness -scratching -scratchingly -scratchless -scratchlike -scratchman -scratchproof -scratchweed -scratchwork -scratchy -scrath -scratter -scrattle -scrattling -scrauch -scrauchle -scraunch -scraw -scrawk -scrawl -scrawler -scrawliness -scrawly -scrawm -scrawnily -scrawniness -scrawny -scray -scraze -screak -screaking -screaky -scream -screamer -screaminess -screaming -screamingly -screamproof -screamy -scree -screech -screechbird -screecher -screechily -screechiness -screeching -screechingly -screechy -screed -screek -screel -screeman -screen -screenable -screenage -screencraft -screendom -screened -screener -screening -screenless -screenlike -screenman -screenplay -screensman -screenwise -screenwork -screenwriter -screeny -screet -screeve -screeved -screever -screich -screigh -screve -screver -screw -screwable -screwage -screwball -screwbarrel -screwdrive -screwdriver -screwed -screwer -screwhead -screwiness -screwing -screwish -screwless -screwlike -screwman -screwmatics -screwship -screwsman -screwstem -screwstock -screwwise -screwworm -screwy -scribable -scribacious -scribaciousness -scribal -scribatious -scribatiousness -scribblage -scribblative -scribblatory -scribble -scribbleable -scribbled -scribbledom -scribbleism -scribblemania -scribblement -scribbleomania -scribbler -scribbling -scribblingly -scribbly -scribe -scriber -scribeship -scribing -scribism -scribophilous -scride -scrieve -scriever -scriggle -scriggler -scriggly -scrike -scrim -scrime -scrimer -scrimmage -scrimmager -scrimp -scrimped -scrimpily -scrimpiness -scrimpingly -scrimply -scrimpness -scrimption -scrimpy -scrimshander -scrimshandy -scrimshank -scrimshanker -scrimshaw -scrimshon -scrimshorn -scrin -scrinch -scrine -scringe -scriniary -scrip -scripee -scripless -scrippage -script -scription -scriptitious -scriptitiously -scriptitory -scriptive -scriptor -scriptorial -scriptorium -scriptory -scriptural -scripturalism -scripturalist -scripturality -scripturalize -scripturally -scripturalness -scripture -scriptured -scripturiency -scripturient -scripturism -scripula -scripulum -scritch -scritoire -scrivaille -scrive -scrivello -scriven -scrivener -scrivenership -scrivenery -scrivening -scrivenly -scriver -scrob -scrobble -scrobe -scrobicula -scrobicular -scrobiculate -scrobiculated -scrobicule -scrobiculus -scrobis -scrod -scrodgill -scroff -scrofula -scrofularoot -scrofulaweed -scrofulide -scrofulism -scrofulitic -scrofuloderm -scrofuloderma -scrofulorachitic -scrofulosis -scrofulotuberculous -scrofulous -scrofulously -scrofulousness -scrog -scroggy -scrolar -scroll -scrolled -scrollery -scrollhead -scrollwise -scrollwork -scrolly -scronach -scroo -scrooch -scrooge -scroop -scrophulariaceous -scrota -scrotal -scrotectomy -scrotiform -scrotitis -scrotocele -scrotofemoral -scrotum -scrouge -scrouger -scrounge -scrounger -scrounging -scrout -scrow -scroyle -scrub -scrubbable -scrubbed -scrubber -scrubbery -scrubbily -scrubbiness -scrubbird -scrubbly -scrubboard -scrubby -scrubgrass -scrubland -scrubwood -scruf -scruff -scruffle -scruffman -scruffy -scruft -scrum -scrummage -scrummager -scrump -scrumple -scrumption -scrumptious -scrumptiously -scrumptiousness -scrunch -scrunchy -scrunge -scrunger -scrunt -scruple -scrupleless -scrupler -scruplesome -scruplesomeness -scrupula -scrupular -scrupuli -scrupulist -scrupulosity -scrupulous -scrupulously -scrupulousness -scrupulum -scrupulus -scrush -scrutability -scrutable -scrutate -scrutation -scrutator -scrutatory -scrutinant -scrutinate -scrutineer -scrutinization -scrutinize -scrutinizer -scrutinizingly -scrutinous -scrutinously -scrutiny -scruto -scrutoire -scruze -scry -scryer -scud -scuddaler -scuddawn -scudder -scuddick -scuddle -scuddy -scudi -scudler -scudo -scuff -scuffed -scuffer -scuffle -scuffler -scufflingly -scuffly -scuffy -scuft -scufter -scug -scuggery -sculch -sculduddery -scull -sculler -scullery -scullful -scullion -scullionish -scullionize -scullionship -scullog -sculp -sculper -sculpin -sculpt -sculptile -sculptitory -sculptograph -sculptography -sculptor -sculptress -sculptural -sculpturally -sculpturation -sculpture -sculptured -sculpturer -sculpturesque -sculpturesquely -sculpturesqueness -sculpturing -sculsh -scum -scumber -scumble -scumbling -scumboard -scumfish -scumless -scumlike -scummed -scummer -scumming -scummy -scumproof -scun -scuncheon -scunder -scunner -scup -scupful -scuppaug -scupper -scuppernong -scuppet -scuppler -scur -scurdy -scurf -scurfer -scurfily -scurfiness -scurflike -scurfy -scurrier -scurrile -scurrilist -scurrility -scurrilize -scurrilous -scurrilously -scurrilousness -scurry -scurvied -scurvily -scurviness -scurvish -scurvy -scurvyweed -scusation -scuse -scut -scuta -scutage -scutal -scutate -scutated -scutatiform -scutation -scutch -scutcheon -scutcheoned -scutcheonless -scutcheonlike -scutcheonwise -scutcher -scutching -scute -scutel -scutella -scutellae -scutellar -scutellarin -scutellate -scutellated -scutellation -scutellerid -scutelliform -scutelligerous -scutelliplantar -scutelliplantation -scutellum -scutibranch -scutibranchian -scutibranchiate -scutifer -scutiferous -scutiform -scutiger -scutigeral -scutigerous -scutiped -scutter -scuttle -scuttlebutt -scuttleful -scuttleman -scuttler -scuttling -scuttock -scutty -scutula -scutular -scutulate -scutulated -scutulum -scutum -scybala -scybalous -scybalum -scye -scyelite -scyllarian -scyllaroid -scyllioid -scylliorhinoid -scyllite -scyllitol -scypha -scyphae -scyphate -scyphi -scyphiferous -scyphiform -scyphiphorous -scyphistoma -scyphistomae -scyphistomoid -scyphistomous -scyphoi -scyphomancy -scyphomedusan -scyphomedusoid -scyphophore -scyphophorous -scyphopolyp -scyphose -scyphostoma -scyphozoan -scyphula -scyphulus -scyphus -scyt -scytale -scythe -scytheless -scythelike -scytheman -scythesmith -scythestone -scythework -scytitis -scytoblastema -scytodepsic -scytonemataceous -scytonematoid -scytonematous -scytopetalaceous -sdeath -sdrucciola -se -sea -seabeach -seabeard -seaberry -seaboard -seaborderer -seabound -seacannie -seacatch -seacoast -seaconny -seacraft -seacrafty -seacunny -seadog -seadrome -seafardinger -seafare -seafarer -seafaring -seaflood -seaflower -seafolk -seafowl -seagirt -seagoer -seagoing -seah -seahound -seak -seal -sealable -sealant -sealch -sealed -sealer -sealery -sealess -sealet -sealette -sealflower -sealike -sealine -sealing -sealless -seallike -sealskin -sealwort -seam -seaman -seamancraft -seamanite -seamanlike -seamanly -seamanship -seamark -seambiter -seamed -seamer -seaminess -seaming -seamless -seamlessly -seamlessness -seamlet -seamlike -seamost -seamrend -seamrog -seamster -seamstress -seamy -seance -seapiece -seaplane -seaport -seaquake -sear -searce -searcer -search -searchable -searchableness -searchant -searcher -searcheress -searcherlike -searchership -searchful -searching -searchingly -searchingness -searchless -searchlight -searchment -searcloth -seared -searedness -searer -searing -searlesite -searness -seary -seascape -seascapist -seascout -seascouting -seashine -seashore -seasick -seasickness -seaside -seasider -season -seasonable -seasonableness -seasonably -seasonal -seasonality -seasonally -seasonalness -seasoned -seasonedly -seasoner -seasoning -seasoninglike -seasonless -seastrand -seastroke -seat -seatang -seated -seater -seathe -seating -seatless -seatrain -seatron -seatsman -seatwork -seave -seavy -seawant -seaward -seawardly -seaware -seaway -seaweed -seaweedy -seawife -seawoman -seaworn -seaworthiness -seaworthy -seax -sebacate -sebaceous -sebacic -sebait -sebastianite -sebate -sebesten -sebiferous -sebific -sebilla -sebiparous -sebkha -sebolith -seborrhagia -seborrhea -seborrheal -seborrheic -seborrhoic -sebum -sebundy -sec -secability -secable -secalin -secaline -secalose -secancy -secant -secantly -secateur -secede -seceder -secern -secernent -secernment -secesh -secesher -secession -secessional -secessionalist -secessioner -secessionism -secessionist -sech -seck -seclude -secluded -secludedly -secludedness -secluding -secluse -seclusion -seclusionist -seclusive -seclusively -seclusiveness -secodont -secohm -secohmmeter -second -secondar -secondarily -secondariness -secondary -seconde -seconder -secondhand -secondhanded -secondhandedly -secondhandedness -secondly -secondment -secondness -secos -secpar -secque -secre -secrecy -secret -secreta -secretage -secretagogue -secretarial -secretarian -secretariat -secretariate -secretary -secretaryship -secrete -secretin -secretion -secretional -secretionary -secretitious -secretive -secretively -secretiveness -secretly -secretmonger -secretness -secreto -secretomotor -secretor -secretory -secretum -sect -sectarial -sectarian -sectarianism -sectarianize -sectarianly -sectarism -sectarist -sectary -sectator -sectile -sectility -section -sectional -sectionalism -sectionalist -sectionality -sectionalization -sectionalize -sectionally -sectionary -sectionist -sectionize -sectioplanography -sectism -sectist -sectiuncle -sective -sector -sectoral -sectored -sectorial -sectroid -sectwise -secular -secularism -secularist -secularistic -secularity -secularization -secularize -secularizer -secularly -secularness -secund -secundate -secundation -secundiflorous -secundigravida -secundine -secundipara -secundiparity -secundiparous -secundly -secundogeniture -secundoprimary -secundus -securable -securance -secure -securely -securement -secureness -securer -securicornate -securifer -securiferous -securiform -securigerous -securitan -security -sedan -sedanier -sedate -sedately -sedateness -sedation -sedative -sedent -sedentarily -sedentariness -sedentary -sedentation -sederunt -sedge -sedged -sedgelike -sedging -sedgy -sedigitate -sedigitated -sedile -sedilia -sediment -sedimental -sedimentarily -sedimentary -sedimentate -sedimentation -sedimentous -sedimetric -sedimetrical -sedition -seditionary -seditionist -seditious -seditiously -seditiousness -sedjadeh -seduce -seduceable -seducee -seducement -seducer -seducible -seducing -seducingly -seducive -seduct -seduction -seductionist -seductive -seductively -seductiveness -seductress -sedulity -sedulous -sedulously -sedulousness -sedum -see -seeable -seeableness -seecatch -seech -seed -seedage -seedbed -seedbird -seedbox -seedcake -seedcase -seedeater -seeded -seeder -seedful -seedgall -seedily -seediness -seedkin -seedless -seedlessness -seedlet -seedlike -seedling -seedlip -seedman -seedness -seedsman -seedstalk -seedtime -seedy -seege -seeing -seeingly -seeingness -seek -seeker -seeking -seel -seelful -seely -seem -seemable -seemably -seemer -seeming -seemingly -seemingness -seemless -seemlihead -seemlily -seemliness -seemly -seen -seenie -seep -seepage -seeped -seepweed -seepy -seer -seerband -seercraft -seeress -seerfish -seerhand -seerhood -seerlike -seerpaw -seership -seersucker -seesaw -seesawiness -seesee -seethe -seething -seethingly -seetulputty -seg -seggar -seggard -segged -seggrom -segment -segmental -segmentally -segmentary -segmentate -segmentation -segmented -sego -segol -segolate -segreant -segregable -segregant -segregate -segregateness -segregation -segregational -segregationist -segregative -segregator -seiche -seidel -seigneur -seigneurage -seigneuress -seigneurial -seigneury -seignior -seigniorage -seignioral -seignioralty -seigniorial -seigniority -seigniorship -seigniory -seignorage -seignoral -seignorial -seignorize -seignory -seilenoi -seilenos -seine -seiner -seirospore -seirosporic -seise -seism -seismal -seismatical -seismetic -seismic -seismically -seismicity -seismism -seismochronograph -seismogram -seismograph -seismographer -seismographic -seismographical -seismography -seismologic -seismological -seismologically -seismologist -seismologue -seismology -seismometer -seismometric -seismometrical -seismometrograph -seismometry -seismomicrophone -seismoscope -seismoscopic -seismotectonic -seismotherapy -seismotic -seit -seity -seizable -seize -seizer -seizin -seizing -seizor -seizure -sejant -sejoin -sejoined -sejugate -sejugous -sejunct -sejunctive -sejunctively -sejunctly -sekos -selachian -selachoid -selachostomous -seladang -selaginellaceous -selagite -selah -selamin -selamlik -selbergite -seldom -seldomcy -seldomer -seldomly -seldomness -seldor -seldseen -sele -select -selectable -selected -selectedly -selectee -selection -selectionism -selectionist -selective -selectively -selectiveness -selectivity -selectly -selectman -selectness -selector -selenate -selenian -seleniate -selenic -selenide -seleniferous -selenigenous -selenion -selenious -selenite -selenitic -selenitical -selenitiferous -selenitish -selenium -seleniuret -selenobismuthite -selenocentric -selenodont -selenodonty -selenograph -selenographer -selenographic -selenographical -selenographically -selenographist -selenography -selenolatry -selenological -selenologist -selenology -selenomancy -selenoscope -selenosis -selenotropic -selenotropism -selenotropy -selensilver -selensulphur -self -selfcide -selfdom -selfful -selffulness -selfheal -selfhood -selfish -selfishly -selfishness -selfism -selfist -selfless -selflessly -selflessness -selfly -selfness -selfpreservatory -selfsame -selfsameness -selfward -selfwards -selictar -seligmannite -selihoth -selion -sell -sella -sellable -sellably -sellaite -sellar -sellate -sellenders -seller -sellie -selliform -selling -sellout -selly -selsoviet -selsyn -selt -seltzogene -selva -selvage -selvaged -selvagee -selvedge -selzogene -semanteme -semantic -semantical -semantically -semantician -semanticist -semantics -semantological -semantology -semantron -semaphore -semaphoric -semaphorical -semaphorically -semaphorist -semarum -semasiological -semasiologically -semasiologist -semasiology -semateme -sematic -sematographic -sematography -sematology -sematrope -semball -semblable -semblably -semblance -semblant -semblative -semble -seme -semeed -semeia -semeiography -semeiologic -semeiological -semeiologist -semeiology -semeion -semeiotic -semeiotical -semeiotics -semelfactive -semelincident -semen -semence -semese -semester -semestral -semestrial -semi -semiabstracted -semiaccomplishment -semiacid -semiacidified -semiacquaintance -semiadherent -semiadjectively -semiadnate -semiaerial -semiaffectionate -semiagricultural -semialbinism -semialcoholic -semialien -semiallegiance -semialpine -semialuminous -semiamplexicaul -semiamplitude -semianarchist -semianatomical -semianatropal -semianatropous -semiangle -semiangular -semianimal -semianimate -semianimated -semiannealed -semiannual -semiannually -semiannular -semianthracite -semiantiministerial -semiantique -semiape -semiaperiodic -semiaperture -semiappressed -semiaquatic -semiarborescent -semiarc -semiarch -semiarchitectural -semiarid -semiaridity -semiarticulate -semiasphaltic -semiatheist -semiattached -semiautomatic -semiautomatically -semiautonomous -semiaxis -semibacchanalian -semibachelor -semibald -semibalked -semiball -semiballoon -semiband -semibarbarian -semibarbarianism -semibarbaric -semibarbarism -semibarbarous -semibaronial -semibarren -semibase -semibasement -semibastion -semibay -semibeam -semibejan -semibelted -semibifid -semibituminous -semibleached -semiblind -semiblunt -semibody -semiboiled -semibolshevist -semibolshevized -semibouffant -semibourgeois -semibreve -semibull -semiburrowing -semic -semicadence -semicalcareous -semicalcined -semicallipygian -semicanal -semicanalis -semicannibalic -semicantilever -semicarbazide -semicarbazone -semicarbonate -semicarbonize -semicardinal -semicartilaginous -semicastrate -semicastration -semicatholicism -semicaudate -semicelestial -semicell -semicellulose -semicentenarian -semicentenary -semicentennial -semicentury -semichannel -semichaotic -semichemical -semicheviot -semichevron -semichiffon -semichivalrous -semichoric -semichorus -semichrome -semicircle -semicircled -semicircular -semicircularity -semicircularly -semicircularness -semicircumference -semicircumferentor -semicircumvolution -semicirque -semicitizen -semicivilization -semicivilized -semiclassic -semiclassical -semiclause -semicleric -semiclerical -semiclimber -semiclimbing -semiclose -semiclosed -semiclosure -semicoagulated -semicoke -semicollapsible -semicollar -semicollegiate -semicolloid -semicolloquial -semicolon -semicolonial -semicolumn -semicolumnar -semicoma -semicomatose -semicombined -semicombust -semicomic -semicomical -semicommercial -semicompact -semicompacted -semicomplete -semicomplicated -semiconceal -semiconcrete -semiconducting -semiconductor -semicone -semiconfident -semiconfinement -semiconfluent -semiconformist -semiconformity -semiconic -semiconical -semiconnate -semiconnection -semiconoidal -semiconscious -semiconsciously -semiconsciousness -semiconservative -semiconsonant -semiconsonantal -semiconspicuous -semicontinent -semicontinuum -semicontraction -semicontradiction -semiconvergence -semiconvergent -semiconversion -semiconvert -semicordate -semicordated -semicoriaceous -semicorneous -semicoronate -semicoronated -semicoronet -semicostal -semicostiferous -semicotton -semicotyle -semicounterarch -semicountry -semicrepe -semicrescentic -semicretin -semicretinism -semicriminal -semicroma -semicrome -semicrustaceous -semicrystallinc -semicubical -semicubit -semicup -semicupium -semicupola -semicured -semicurl -semicursive -semicurvilinear -semicyclic -semicycloid -semicylinder -semicylindric -semicylindrical -semicynical -semidaily -semidangerous -semidark -semidarkness -semidead -semideaf -semidecay -semidecussation -semidefinite -semideific -semideification -semideistical -semideity -semidelight -semidelirious -semideltaic -semidemented -semidenatured -semidependence -semidependent -semideponent -semidesert -semidestructive -semidetached -semidetachment -semideveloped -semidiagrammatic -semidiameter -semidiapason -semidiapente -semidiaphaneity -semidiaphanous -semidiatessaron -semidifference -semidigested -semidigitigrade -semidigression -semidilapidation -semidine -semidirect -semidisabled -semidisk -semiditone -semidiurnal -semidivided -semidivine -semidocumentary -semidodecagon -semidole -semidome -semidomed -semidomestic -semidomesticated -semidomestication -semidomical -semidormant -semidouble -semidrachm -semidramatic -semidress -semidressy -semidried -semidry -semidrying -semiductile -semidull -semiduplex -semiduration -semieducated -semieffigy -semiegg -semiegret -semielastic -semielision -semiellipse -semiellipsis -semiellipsoidal -semielliptic -semielliptical -semienclosed -semiengaged -semiequitant -semierect -semieremitical -semiessay -semiexecutive -semiexpanded -semiexplanation -semiexposed -semiexternal -semiextinct -semiextinction -semifable -semifabulous -semifailure -semifamine -semifascia -semifasciated -semifashion -semifast -semifatalistic -semiferal -semiferous -semifeudal -semifeudalism -semifib -semifiction -semifictional -semifigurative -semifigure -semifinal -semifinalist -semifine -semifinish -semifinished -semifiscal -semifistular -semifit -semifitting -semifixed -semiflashproof -semiflex -semiflexed -semiflexible -semiflexion -semiflexure -semiflint -semifloating -semifloret -semifloscular -semifloscule -semiflosculose -semiflosculous -semifluctuant -semifluctuating -semifluid -semifluidic -semifluidity -semifoaming -semiforbidding -semiforeign -semiform -semiformal -semiformed -semifossil -semifossilized -semifrantic -semifriable -semifrontier -semifuddle -semifunctional -semifused -semifusion -semify -semigala -semigelatinous -semigentleman -semigenuflection -semigirder -semiglaze -semiglazed -semiglobe -semiglobose -semiglobular -semiglobularly -semiglorious -semiglutin -semigod -semigovernmental -semigrainy -semigranitic -semigranulate -semigravel -semigroove -semihand -semihard -semiharden -semihardy -semihastate -semihepatization -semiherbaceous -semiheterocercal -semihexagon -semihexagonal -semihiant -semihiatus -semihibernation -semihigh -semihistorical -semihobo -semihonor -semihoral -semihorny -semihostile -semihot -semihuman -semihumanitarian -semihumanized -semihumbug -semihumorous -semihumorously -semihyaline -semihydrate -semihydrobenzoinic -semihyperbola -semihyperbolic -semihyperbolical -semijealousy -semijubilee -semijudicial -semijuridical -semilanceolate -semilatent -semilatus -semileafless -semilegendary -semilegislative -semilens -semilenticular -semilethal -semiliberal -semilichen -semiligneous -semilimber -semilined -semiliquid -semiliquidity -semiliterate -semilocular -semilogarithmic -semilogical -semilong -semilooper -semiloose -semiloyalty -semilucent -semilunar -semilunare -semilunary -semilunate -semilunation -semilune -semiluxation -semiluxury -semimachine -semimade -semimadman -semimagical -semimagnetic -semimajor -semimalignant -semimanufacture -semimanufactured -semimarine -semimarking -semimathematical -semimature -semimechanical -semimedicinal -semimember -semimembranosus -semimembranous -semimenstrual -semimercerized -semimessianic -semimetal -semimetallic -semimetamorphosis -semimicrochemical -semimild -semimilitary -semimill -semimineral -semimineralized -semiminim -semiminor -semimolecule -semimonastic -semimonitor -semimonopoly -semimonster -semimonthly -semimoron -semimucous -semimute -semimystic -semimystical -semimythical -seminaked -seminal -seminality -seminally -seminaphthalidine -seminaphthylamine -seminar -seminarcosis -seminarial -seminarian -seminarianism -seminarist -seminaristic -seminarize -seminary -seminasal -seminase -seminatant -seminate -semination -seminationalization -seminative -seminebulous -seminecessary -seminegro -seminervous -seminiferal -seminiferous -seminific -seminifical -seminification -seminist -seminium -seminivorous -seminocturnal -seminoma -seminomad -seminomadic -seminomata -seminonconformist -seminonflammable -seminonsensical -seminormal -seminose -seminovel -seminovelty -seminude -seminudity -seminule -seminuliferous -seminuria -seminvariant -seminvariantive -semioblivion -semioblivious -semiobscurity -semioccasional -semioccasionally -semiocclusive -semioctagonal -semiofficial -semiofficially -semiography -semiopacity -semiopacous -semiopal -semiopalescent -semiopaque -semiopened -semiorb -semiorbicular -semiorbicularis -semiorbiculate -semiordinate -semiorganized -semioriental -semioscillation -semiosseous -semiostracism -semiotic -semiotician -semioval -semiovaloid -semiovate -semioviparous -semiovoid -semiovoidal -semioxidated -semioxidized -semioxygenated -semioxygenized -semipagan -semipalmate -semipalmated -semipalmation -semipanic -semipapal -semipapist -semiparallel -semiparalysis -semiparameter -semiparasitic -semiparasitism -semipaste -semipastoral -semipasty -semipause -semipeace -semipectinate -semipectinated -semipectoral -semiped -semipedal -semipellucid -semipellucidity -semipendent -semipenniform -semiperfect -semiperimeter -semiperimetry -semiperiphery -semipermanent -semipermeability -semipermeable -semiperoid -semiperspicuous -semipertinent -semipervious -semipetaloid -semipetrified -semiphase -semiphilologist -semiphilosophic -semiphilosophical -semiphlogisticated -semiphonotypy -semiphosphorescent -semipinacolic -semipinacolin -semipinnate -semipiscine -semiplantigrade -semiplastic -semiplumaceous -semiplume -semipolar -semipolitical -semipolitician -semipoor -semipopish -semipopular -semiporcelain -semiporous -semiporphyritic -semiportable -semipostal -semipractical -semiprecious -semipreservation -semiprimigenous -semiprivacy -semiprivate -semipro -semiprofane -semiprofessional -semiprofessionalized -semipronation -semiprone -semipronominal -semiproof -semiproselyte -semiprosthetic -semiprostrate -semiprotectorate -semiproven -semipublic -semipupa -semipurulent -semiputrid -semipyramidal -semipyramidical -semipyritic -semiquadrangle -semiquadrantly -semiquadrate -semiquantitative -semiquantitatively -semiquartile -semiquaver -semiquietism -semiquietist -semiquinquefid -semiquintile -semiquote -semiradial -semiradiate -semirapacious -semirare -semirattlesnake -semiraw -semirebellion -semirecondite -semirecumbent -semirefined -semireflex -semiregular -semirelief -semireligious -semireniform -semirepublican -semiresinous -semiresolute -semirespectability -semirespectable -semireticulate -semiretirement -semiretractile -semireverberatory -semirevolute -semirevolution -semirevolutionist -semirhythm -semiriddle -semirigid -semiring -semiroll -semirotary -semirotating -semirotative -semirotatory -semirotund -semirotunda -semiround -semiroyal -semiruin -semirural -semirustic -semis -semisacerdotal -semisacred -semisagittate -semisaint -semisaline -semisaltire -semisaprophyte -semisaprophytic -semisarcodic -semisatiric -semisaturation -semisavage -semisavagedom -semisavagery -semiscenic -semischolastic -semiscientific -semiseafaring -semisecondary -semisecrecy -semisecret -semisection -semisedentary -semisegment -semisensuous -semisentient -semisentimental -semiseparatist -semiseptate -semiserf -semiserious -semiseriously -semiseriousness -semiservile -semisevere -semiseverely -semiseverity -semisextile -semishady -semishaft -semisheer -semishirker -semishrub -semishrubby -semisightseeing -semisilica -semisimious -semisimple -semisingle -semisixth -semiskilled -semislave -semismelting -semismile -semisocial -semisocialism -semisociative -semisocinian -semisoft -semisolemn -semisolemnity -semisolemnly -semisolid -semisolute -semisomnambulistic -semisomnolence -semisomnous -semisopor -semisovereignty -semispan -semispeculation -semisphere -semispheric -semispherical -semispheroidal -semispinalis -semispiral -semispiritous -semispontaneity -semispontaneous -semispontaneously -semispontaneousness -semisport -semisporting -semisquare -semistagnation -semistaminate -semistarvation -semistarved -semistate -semisteel -semistiff -semistill -semistock -semistory -semistratified -semistriate -semistriated -semistuporous -semisubterranean -semisuburban -semisuccess -semisuccessful -semisuccessfully -semisucculent -semisupernatural -semisupinated -semisupination -semisupine -semisuspension -semisymmetric -semita -semitact -semitae -semitailored -semital -semitandem -semitangent -semitaur -semitechnical -semiteetotal -semitelic -semitendinosus -semitendinous -semiterete -semiterrestrial -semitertian -semitesseral -semitessular -semitheological -semithoroughfare -semitime -semitonal -semitonally -semitone -semitonic -semitonically -semitontine -semitorpid -semitour -semitrailer -semitrained -semitransept -semitranslucent -semitransparency -semitransparent -semitransverse -semitreasonable -semitrimmed -semitropic -semitropical -semitropics -semitruth -semituberous -semitubular -semiuncial -semiundressed -semiuniversalist -semiupright -semiurban -semiurn -semivalvate -semivault -semivector -semivegetable -semivertebral -semiverticillate -semivibration -semivirtue -semiviscid -semivital -semivitreous -semivitrification -semivitrified -semivocal -semivocalic -semivolatile -semivolcanic -semivoluntary -semivowel -semivulcanized -semiwaking -semiwarfare -semiweekly -semiwild -semiwoody -semiyearly -semmet -semmit -semnopithecine -semola -semolella -semolina -semological -semology -semostomeous -semostomous -semperannual -sempergreen -semperidentical -semperjuvenescent -sempervirent -sempervirid -sempitern -sempiternal -sempiternally -sempiternity -sempiternize -sempiternous -sempstrywork -semsem -semuncia -semuncial -sen -senaite -senam -senarian -senarius -senarmontite -senary -senate -senator -senatorial -senatorially -senatorian -senatorship -senatory -senatress -senatrices -senatrix -sence -sencion -send -sendable -sendal -sendee -sender -sending -senecioid -senecionine -senectitude -senectude -senectuous -senega -senegin -senesce -senescence -senescent -seneschal -seneschally -seneschalship -seneschalsy -seneschalty -sengreen -senicide -senile -senilely -senilism -senility -senilize -senior -seniority -seniorship -senna -sennegrass -sennet -sennight -sennit -sennite -senocular -sensa -sensable -sensal -sensate -sensation -sensational -sensationalism -sensationalist -sensationalistic -sensationalize -sensationally -sensationary -sensationish -sensationism -sensationist -sensationistic -sensationless -sensatorial -sensatory -sense -sensed -senseful -senseless -senselessly -senselessness -sensibilia -sensibilisin -sensibilitist -sensibilitous -sensibility -sensibilium -sensibilization -sensibilize -sensible -sensibleness -sensibly -sensical -sensifacient -sensiferous -sensific -sensificatory -sensifics -sensify -sensigenous -sensile -sensilia -sensilla -sensillum -sension -sensism -sensist -sensistic -sensitive -sensitively -sensitiveness -sensitivity -sensitization -sensitize -sensitizer -sensitometer -sensitometric -sensitometry -sensitory -sensive -sensize -senso -sensomobile -sensomobility -sensomotor -sensoparalysis -sensor -sensoria -sensorial -sensoriglandular -sensorimotor -sensorimuscular -sensorium -sensorivascular -sensorivasomotor -sensorivolitional -sensory -sensual -sensualism -sensualist -sensualistic -sensuality -sensualization -sensualize -sensually -sensualness -sensuism -sensuist -sensum -sensuosity -sensuous -sensuously -sensuousness -sensyne -sent -sentence -sentencer -sentential -sententially -sententiarian -sententiarist -sententiary -sententiosity -sententious -sententiously -sententiousness -sentience -sentiendum -sentient -sentiently -sentiment -sentimental -sentimentalism -sentimentalist -sentimentality -sentimentalization -sentimentalize -sentimentalizer -sentimentally -sentimenter -sentimentless -sentinel -sentinellike -sentinelship -sentinelwise -sentisection -sentition -sentry -sepad -sepal -sepaled -sepaline -sepalled -sepalody -sepaloid -separability -separable -separableness -separably -separata -separate -separatedly -separately -separateness -separates -separatical -separating -separation -separationism -separationist -separatism -separatist -separatistic -separative -separatively -separativeness -separator -separatory -separatress -separatrix -separatum -sephen -sephiric -sephirothic -sepia -sepiaceous -sepialike -sepian -sepiarian -sepiary -sepic -sepicolous -sepiment -sepioid -sepiolite -sepion -sepiost -sepiostaire -sepium -sepone -sepoy -seppuku -seps -sepsine -sepsis -sept -septa -septal -septan -septane -septangle -septangled -septangular -septangularness -septarian -septariate -septarium -septate -septated -septation -septatoarticulate -septavalent -septave -septcentenary -septectomy -septemdecenary -septemfid -septemfluous -septemfoliate -septemfoliolate -septemia -septempartite -septemplicate -septemvious -septemvir -septemvirate -septemviri -septenar -septenarian -septenarius -septenary -septenate -septendecennial -septendecimal -septennary -septennate -septenniad -septennial -septennialist -septenniality -septennially -septennium -septenous -septentrional -septentrionality -septentrionally -septentrionate -septentrionic -septerium -septet -septfoil -septic -septical -septically -septicemia -septicemic -septicidal -septicidally -septicity -septicization -septicolored -septicopyemia -septicopyemic -septier -septifarious -septiferous -septifluous -septifolious -septiform -septifragal -septifragally -septilateral -septile -septillion -septillionth -septimal -septimanal -septimanarian -septime -septimetritis -septimole -septinsular -septipartite -septisyllabic -septisyllable -septivalent -septleva -septocosta -septocylindrical -septodiarrhea -septogerm -septoic -septole -septomarginal -septomaxillary -septonasal -septotomy -septship -septuagenarian -septuagenarianism -septuagenary -septuagesima -septuagint -septulate -septulum -septum -septuncial -septuor -septuple -septuplet -septuplicate -septuplication -sepulcher -sepulchral -sepulchralize -sepulchrally -sepulchrous -sepultural -sepulture -sequa -sequacious -sequaciously -sequaciousness -sequacity -sequel -sequela -sequelae -sequelant -sequence -sequencer -sequency -sequent -sequential -sequentiality -sequentially -sequently -sequest -sequester -sequestered -sequesterment -sequestra -sequestrable -sequestral -sequestrate -sequestration -sequestrator -sequestratrices -sequestratrix -sequestrectomy -sequestrotomy -sequestrum -sequin -sequitur -ser -sera -serab -seragli -seraglio -serai -serail -seral -seralbumin -seralbuminous -serang -serape -seraph -seraphic -seraphical -seraphically -seraphicalness -seraphicism -seraphicness -seraphim -seraphina -seraphine -seraphism -seraphlike -seraphtide -serasker -seraskerate -seraskier -seraskierat -serau -seraw -sercial -serdab -sere -sereh -serenade -serenader -serenata -serenate -serendibite -serendipity -serendite -serene -serenely -sereneness -serenify -serenissime -serenissimi -serenissimo -serenity -serenize -sereward -serf -serfage -serfdom -serfhood -serfish -serfishly -serfishness -serfism -serflike -serfship -serge -sergeancy -sergeant -sergeantcy -sergeantess -sergeantry -sergeantship -sergeanty -sergedesoy -serger -sergette -serging -serglobulin -serial -serialist -seriality -serialization -serialize -serially -seriary -seriate -seriately -seriatim -seriation -sericate -sericated -sericea -sericeotomentose -sericeous -sericicultural -sericiculture -sericiculturist -sericin -sericipary -sericite -sericitic -sericitization -sericteria -sericterium -serictery -sericultural -sericulture -sericulturist -seriema -series -serif -serific -serigraph -serigrapher -serigraphy -serimeter -serin -serine -serinette -seringa -seringal -seringhi -serio -seriocomedy -seriocomic -seriocomical -seriocomically -seriogrotesque -serioline -serioludicrous -seriopantomimic -serioridiculous -seriosity -serious -seriously -seriousness -seripositor -serjeant -serment -sermo -sermocination -sermocinatrix -sermon -sermoneer -sermoner -sermonesque -sermonet -sermonettino -sermonic -sermonically -sermonics -sermonish -sermonism -sermonist -sermonize -sermonizer -sermonless -sermonoid -sermonolatry -sermonology -sermonproof -sermonwise -sermuncle -sernamby -sero -seroalbumin -seroalbuminuria -seroanaphylaxis -serobiological -serocolitis -serocyst -serocystic -serodermatosis -serodermitis -serodiagnosis -serodiagnostic -seroenteritis -seroenzyme -serofibrinous -serofibrous -serofluid -serogelatinous -serohemorrhagic -serohepatitis -seroimmunity -serolactescent -serolemma -serolin -serolipase -serologic -serological -serologically -serologist -serology -seromaniac -seromembranous -seromucous -seromuscular -seron -seronegative -seronegativity -seroon -seroot -seroperitoneum -serophthisis -serophysiology -seroplastic -seropneumothorax -seropositive -seroprevention -seroprognosis -seroprophylaxis -seroprotease -seropuriform -seropurulent -seropus -seroreaction -serosa -serosanguineous -serosanguinolent -seroscopy -serositis -serosity -serosynovial -serosynovitis -serotherapeutic -serotherapeutics -serotherapist -serotherapy -serotina -serotinal -serotine -serotinous -serotoxin -serous -serousness -serovaccine -serow -serozyme -serpedinous -serpent -serpentaria -serpentarium -serpentary -serpentcleide -serpenteau -serpentess -serpenticidal -serpenticide -serpentiferous -serpentiform -serpentina -serpentine -serpentinely -serpentinic -serpentiningly -serpentinization -serpentinize -serpentinoid -serpentinous -serpentivorous -serpentize -serpentlike -serpently -serpentoid -serpentry -serpentwood -serphid -serphoid -serpierite -serpiginous -serpiginously -serpigo -serpivolant -serpolet -serpula -serpulae -serpulan -serpulid -serpulidan -serpuline -serpulite -serpulitic -serpuloid -serra -serradella -serrage -serran -serrana -serranid -serrano -serranoid -serrate -serrated -serratic -serratiform -serratile -serration -serratirostral -serratocrenate -serratodentate -serratodenticulate -serratoglandulous -serratospinose -serrature -serricorn -serried -serriedly -serriedness -serriferous -serriform -serriped -serrirostrate -serrulate -serrulated -serrulation -serry -sert -serta -sertularian -sertularioid -sertule -sertulum -sertum -serum -serumal -serut -servable -servage -serval -servaline -servant -servantcy -servantdom -servantess -servantless -servantlike -servantry -servantship -servation -serve -servente -serventism -server -servery -servet -service -serviceability -serviceable -serviceableness -serviceably -serviceberry -serviceless -servicelessness -serviceman -servidor -servient -serviential -serviette -servile -servilely -servileness -servilism -servility -servilize -serving -servingman -servist -servitor -servitorial -servitorship -servitress -servitrix -servitude -serviture -servo -servomechanism -servomotor -servulate -serwamby -sesame -sesamoid -sesamoidal -sesamoiditis -sescuple -sesma -sesqui -sesquialter -sesquialtera -sesquialteral -sesquialteran -sesquialterous -sesquibasic -sesquicarbonate -sesquicentennial -sesquichloride -sesquiduplicate -sesquihydrate -sesquihydrated -sesquinona -sesquinonal -sesquioctava -sesquioctaval -sesquioxide -sesquipedal -sesquipedalian -sesquipedalianism -sesquipedality -sesquiplicate -sesquiquadrate -sesquiquarta -sesquiquartal -sesquiquartile -sesquiquinta -sesquiquintal -sesquiquintile -sesquisalt -sesquiseptimal -sesquisextal -sesquisilicate -sesquisquare -sesquisulphate -sesquisulphide -sesquisulphuret -sesquiterpene -sesquitertia -sesquitertial -sesquitertian -sesquitertianal -sess -sessile -sessility -session -sessional -sessionary -sessions -sesterce -sestertium -sestet -sesti -sestiad -sestina -sestine -sestole -sestuor -set -seta -setaceous -setaceously -setae -setal -setarious -setback -setbolt -setdown -setfast -seth -sethead -setier -setiferous -setiform -setigerous -setiparous -setirostral -setline -setness -setoff -seton -setophagine -setose -setous -setout -setover -setscrew -setsman -sett -settable -settaine -settee -setter -settergrass -setterwort -setting -settle -settleable -settled -settledly -settledness -settlement -settler -settlerdom -settling -settlings -settlor -settsman -setula -setule -setuliform -setulose -setulous -setup -setwall -setwise -setwork -seugh -seven -sevenbark -sevener -sevenfold -sevenfolded -sevenfoldness -sevennight -sevenpence -sevenpenny -sevenscore -seventeen -seventeenfold -seventeenth -seventeenthly -seventh -seventhly -seventieth -seventy -seventyfold -sever -severable -several -severalfold -severality -severalize -severally -severalness -severalth -severalty -severance -severation -severe -severedly -severely -severeness -severer -severingly -severish -severity -severization -severize -severy -sew -sewable -sewage -sewan -sewed -sewellel -sewen -sewer -sewerage -sewered -sewerless -sewerlike -sewerman -sewery -sewing -sewless -sewn -sewround -sex -sexadecimal -sexagenarian -sexagenarianism -sexagenary -sexagesimal -sexagesimally -sexagesimals -sexagonal -sexangle -sexangled -sexangular -sexangularly -sexannulate -sexarticulate -sexcentenary -sexcuspidate -sexdigital -sexdigitate -sexdigitated -sexdigitism -sexed -sexenary -sexennial -sexennially -sexennium -sexern -sexfarious -sexfid -sexfoil -sexhood -sexifid -sexillion -sexiped -sexipolar -sexisyllabic -sexisyllable -sexitubercular -sexivalence -sexivalency -sexivalent -sexless -sexlessly -sexlessness -sexlike -sexlocular -sexly -sexological -sexologist -sexology -sexpartite -sexradiate -sext -sextactic -sextain -sextan -sextans -sextant -sextantal -sextar -sextarii -sextarius -sextary -sextennial -sextern -sextet -sextic -sextile -sextillion -sextillionth -sextipara -sextipartite -sextipartition -sextiply -sextipolar -sexto -sextodecimo -sextole -sextolet -sexton -sextoness -sextonship -sextry -sextubercular -sextuberculate -sextula -sextulary -sextumvirate -sextuple -sextuplet -sextuplex -sextuplicate -sextuply -sexual -sexuale -sexualism -sexualist -sexuality -sexualization -sexualize -sexually -sexuous -sexupara -sexuparous -sexy -sey -seybertite -sfoot -sgraffiato -sgraffito -sh -sha -shaatnez -shab -shabash -shabbed -shabbify -shabbily -shabbiness -shabble -shabby -shabbyish -shabrack -shabunder -shachle -shachly -shack -shackanite -shackatory -shackbolt -shackland -shackle -shacklebone -shackledom -shackler -shacklewise -shackling -shackly -shacky -shad -shadbelly -shadberry -shadbird -shadbush -shadchan -shaddock -shade -shaded -shadeful -shadeless -shadelessness -shader -shadetail -shadflower -shadily -shadine -shadiness -shading -shadkan -shadoof -shadow -shadowable -shadowbox -shadowboxing -shadowed -shadower -shadowfoot -shadowgram -shadowgraph -shadowgraphic -shadowgraphist -shadowgraphy -shadowily -shadowiness -shadowing -shadowishly -shadowist -shadowland -shadowless -shadowlessness -shadowlike -shadowly -shadowy -shadrach -shady -shaffle -shaft -shafted -shafter -shaftfoot -shafting -shaftless -shaftlike -shaftman -shaftment -shaftsman -shaftway -shafty -shag -shaganappi -shagbag -shagbark -shagged -shaggedness -shaggily -shagginess -shaggy -shaglet -shaglike -shagpate -shagrag -shagreen -shagreened -shagroon -shagtail -shah -shaharith -shahdom -shahi -shahin -shahzada -shaikh -shaitan -shakable -shake -shakeable -shakebly -shakedown -shakefork -shaken -shakenly -shakeout -shakeproof -shaker -shakerag -shakers -shakescene -shakha -shakily -shakiness -shaking -shakingly -shako -shaksheer -shakti -shaku -shaky -shale -shalelike -shaleman -shall -shallal -shallon -shalloon -shallop -shallopy -shallot -shallow -shallowbrained -shallowhearted -shallowish -shallowist -shallowly -shallowness -shallowpate -shallowpated -shallows -shallowy -shallu -shalom -shalt -shalwar -shaly -sham -shama -shamable -shamableness -shamably -shamal -shamalo -shaman -shamaness -shamanic -shamanism -shamanist -shamanistic -shamanize -shamateur -shamba -shamble -shambling -shamblingly -shambrier -shame -shameable -shamed -shameface -shamefaced -shamefacedly -shamefacedness -shamefast -shamefastly -shamefastness -shameful -shamefully -shamefulness -shameless -shamelessly -shamelessness -shameproof -shamer -shamesick -shameworthy -shamianah -shamir -shammed -shammer -shammick -shamming -shammish -shammock -shammocking -shammocky -shammy -shampoo -shampooer -shamrock -shamroot -shamsheer -shan -shanachas -shanachie -shandry -shandrydan -shandy -shandygaff -shangan -shanghai -shanghaier -shank -shanked -shanker -shankings -shankpiece -shanksman -shanna -shanny -shansa -shant -shanty -shantylike -shantyman -shantytown -shap -shapable -shape -shaped -shapeful -shapeless -shapelessly -shapelessness -shapeliness -shapely -shapen -shaper -shapeshifter -shapesmith -shaping -shapingly -shapometer -shaps -shapy -sharable -shard -sharded -shardy -share -shareable -sharebone -sharebroker -sharecrop -sharecropper -shareholder -shareholdership -shareman -sharepenny -sharer -shareship -sharesman -sharewort -shargar -shark -sharkful -sharkish -sharklet -sharklike -sharkship -sharkskin -sharky -sharn -sharnbud -sharny -sharp -sharpen -sharpener -sharper -sharpie -sharpish -sharply -sharpness -sharps -sharpsaw -sharpshin -sharpshod -sharpshooter -sharpshooting -sharptail -sharpware -sharpy -sharrag -sharry -shastaite -shaster -shastra -shastraik -shastri -shastrik -shat -shatan -shathmont -shatter -shatterbrain -shatterbrained -shatterer -shatterheaded -shattering -shatteringly -shatterment -shatterpated -shatterproof -shatterwit -shattery -shattuckite -shauchle -shaugh -shaul -shaup -shauri -shauwe -shavable -shave -shaveable -shaved -shavee -shaveling -shaven -shaver -shavery -shavester -shavetail -shaveweed -shaving -shavings -shaw -shawl -shawled -shawling -shawlless -shawllike -shawlwise -shawm -shawneewood -shawny -shawy -shay -she -shea -sheading -sheaf -sheafage -sheaflike -sheafripe -sheafy -sheal -shealing -shear -shearbill -sheard -shearer -sheargrass -shearhog -shearing -shearless -shearling -shearman -shearmouse -shears -shearsman -sheartail -shearwater -shearwaters -sheat -sheatfish -sheath -sheathbill -sheathe -sheathed -sheather -sheathery -sheathing -sheathless -sheathlike -sheathy -sheave -sheaved -sheaveless -sheaveman -shebang -shebeen -shebeener -shed -shedded -shedder -shedding -sheder -shedhand -shedlike -shedman -shedwise -shee -sheely -sheen -sheenful -sheenless -sheenly -sheeny -sheep -sheepback -sheepberry -sheepbine -sheepbiter -sheepbiting -sheepcote -sheepcrook -sheepfaced -sheepfacedly -sheepfacedness -sheepfold -sheepfoot -sheepgate -sheephead -sheepheaded -sheephearted -sheepherder -sheepherding -sheephook -sheephouse -sheepify -sheepish -sheepishly -sheepishness -sheepkeeper -sheepkeeping -sheepkill -sheepless -sheeplet -sheeplike -sheepling -sheepman -sheepmaster -sheepmonger -sheepnose -sheepnut -sheeppen -sheepshank -sheepshead -sheepsheadism -sheepshear -sheepshearer -sheepshearing -sheepshed -sheepskin -sheepsplit -sheepsteal -sheepstealer -sheepstealing -sheepwalk -sheepwalker -sheepweed -sheepy -sheer -sheered -sheering -sheerly -sheerness -sheet -sheetage -sheeted -sheeter -sheetflood -sheetful -sheeting -sheetless -sheetlet -sheetlike -sheetling -sheetways -sheetwise -sheetwork -sheetwriting -sheety -shehitah -sheik -sheikdom -sheikhlike -sheikhly -sheiklike -sheikly -shekel -shela -sheld -sheldapple -shelder -sheldfowl -sheldrake -shelduck -shelf -shelfback -shelffellow -shelfful -shelflist -shelfmate -shelfpiece -shelfroom -shelfworn -shelfy -shell -shellac -shellacker -shellacking -shellapple -shellback -shellblow -shellblowing -shellbound -shellburst -shellcracker -shelleater -shelled -sheller -shellfire -shellfish -shellfishery -shellflower -shellful -shellhead -shelliness -shelling -shellman -shellmonger -shellproof -shellshake -shellum -shellwork -shellworker -shelly -shellycoat -shelta -shelter -shelterage -sheltered -shelterer -shelteringly -shelterless -shelterlessness -shelterwood -sheltery -sheltron -shelty -shelve -shelver -shelving -shelvingly -shelvingness -shelvy -sheminith -shenanigan -shend -sheng -sheolic -shepherd -shepherdage -shepherddom -shepherdess -shepherdhood -shepherdish -shepherdism -shepherdize -shepherdless -shepherdlike -shepherdling -shepherdly -shepherdry -sheppeck -sheppey -shepstare -sher -sherardize -sherardizer -sherbacha -sherbet -sherbetlee -sherbetzide -sheriat -sherif -sherifa -sherifate -sheriff -sheriffalty -sheriffdom -sheriffess -sheriffhood -sheriffry -sheriffship -sheriffwick -sherifi -sherifian -sherify -sheristadar -sherlock -sherry -sherryvallies -sheth -sheugh -sheva -shevel -sheveled -shevri -shewa -shewbread -shewel -sheyle -shi -shibah -shibar -shibboleth -shibbolethic -shibuichi -shice -shicer -shicker -shickered -shide -shied -shiel -shield -shieldable -shieldboard -shielddrake -shielded -shielder -shieldflower -shielding -shieldless -shieldlessly -shieldlessness -shieldlike -shieldling -shieldmaker -shieldmay -shieldtail -shieling -shier -shies -shiest -shift -shiftable -shiftage -shifter -shiftful -shiftfulness -shiftily -shiftiness -shifting -shiftingly -shiftingness -shiftless -shiftlessly -shiftlessness -shifty -shiggaion -shigram -shih -shikar -shikara -shikargah -shikari -shikasta -shikimi -shikimic -shikimole -shikimotoxin -shikken -shiko -shikra -shilf -shilfa -shill -shilla -shillaber -shillelagh -shillet -shillety -shillhouse -shillibeer -shilling -shillingless -shillingsworth -shilloo -shilpit -shim -shimal -shimmer -shimmering -shimmeringly -shimmery -shimmy -shimose -shimper -shin -shinaniging -shinarump -shinbone -shindig -shindle -shindy -shine -shineless -shiner -shingle -shingled -shingler -shingles -shinglewise -shinglewood -shingling -shingly -shinily -shininess -shining -shiningly -shiningness -shinleaf -shinner -shinnery -shinning -shinny -shinplaster -shintiyan -shinty -shinwood -shiny -shinza -ship -shipboard -shipbound -shipboy -shipbreaking -shipbroken -shipbuilder -shipbuilding -shipcraft -shipentine -shipful -shipkeeper -shiplap -shipless -shiplessly -shiplet -shipload -shipman -shipmanship -shipmast -shipmaster -shipmate -shipmatish -shipment -shipowner -shipowning -shippable -shippage -shipped -shipper -shipping -shipplane -shippo -shippon -shippy -shipshape -shipshapely -shipside -shipsmith -shipward -shipwards -shipway -shipwork -shipworm -shipwreck -shipwrecky -shipwright -shipwrightery -shipwrightry -shipyard -shirakashi -shirallee -shire -shirehouse -shireman -shirewick -shirk -shirker -shirky -shirl -shirlcock -shirpit -shirr -shirring -shirt -shirtband -shirtiness -shirting -shirtless -shirtlessness -shirtlike -shirtmaker -shirtmaking -shirtman -shirttail -shirtwaist -shirty -shish -shisham -shisn -shita -shitepoke -shither -shittah -shittim -shittimwood -shiv -shivaree -shive -shiver -shivereens -shiverer -shivering -shiveringly -shiverproof -shiversome -shiverweed -shivery -shivey -shivoo -shivy -shivzoku -sho -shoad -shoader -shoal -shoalbrain -shoaler -shoaliness -shoalness -shoalwise -shoaly -shoat -shock -shockability -shockable -shockedness -shocker -shockheaded -shocking -shockingly -shockingness -shocklike -shockproof -shod -shodden -shoddily -shoddiness -shoddy -shoddydom -shoddyism -shoddyite -shoddylike -shoddyward -shoddywards -shode -shoder -shoe -shoebill -shoebinder -shoebindery -shoebinding -shoebird -shoeblack -shoeboy -shoebrush -shoecraft -shoeflower -shoehorn -shoeing -shoeingsmith -shoelace -shoeless -shoemaker -shoemaking -shoeman -shoepack -shoer -shoescraper -shoeshine -shoeshop -shoesmith -shoestring -shoewoman -shoful -shog -shogaol -shoggie -shoggle -shoggly -shogi -shogun -shogunal -shogunate -shohet -shoji -shola -shole -shone -shoneen -shonkinite -shoo -shood -shoofa -shoofly -shooi -shook -shool -shooldarry -shooler -shoop -shoopiltie -shoor -shoot -shootable -shootboard -shootee -shooter -shoother -shooting -shootist -shootman -shop -shopboard -shopbook -shopboy -shopbreaker -shopbreaking -shopfolk -shopful -shopgirl -shopgirlish -shophar -shopkeeper -shopkeeperess -shopkeeperish -shopkeeperism -shopkeepery -shopkeeping -shopland -shoplet -shoplifter -shoplifting -shoplike -shopmaid -shopman -shopmark -shopmate -shopocracy -shopocrat -shoppe -shopper -shopping -shoppish -shoppishness -shoppy -shopster -shoptalk -shopwalker -shopwear -shopwife -shopwindow -shopwoman -shopwork -shopworker -shopworn -shoq -shor -shoran -shore -shoreberry -shorebush -shored -shoregoing -shoreland -shoreless -shoreman -shorer -shoreside -shoresman -shoreward -shorewards -shoreweed -shoreyer -shoring -shorling -shorn -short -shortage -shortbread -shortcake -shortchange -shortchanger -shortclothes -shortcoat -shortcomer -shortcoming -shorten -shortener -shortening -shorter -shortfall -shorthand -shorthanded -shorthandedness -shorthander -shorthead -shorthorn -shortish -shortly -shortness -shorts -shortschat -shortsighted -shortsightedly -shortsightedness -shortsome -shortstaff -shortstop -shorttail -shoshonite -shot -shotbush -shote -shotgun -shotless -shotlike -shotmaker -shotman -shotproof -shotsman -shotstar -shott -shotted -shotten -shotter -shotty -shou -should -shoulder -shouldered -shoulderer -shoulderette -shouldering -shouldna -shouldnt -shoupeltin -shout -shouter -shouting -shoutingly -shoval -shove -shovegroat -shovel -shovelard -shovelbill -shovelboard -shovelfish -shovelful -shovelhead -shovelmaker -shovelman -shovelnose -shovelweed -shover -show -showable -showance -showbird -showboard -showboat -showboater -showboating -showcase -showdom -showdown -shower -showerer -showerful -showeriness -showerless -showerlike -showerproof -showery -showily -showiness -showing -showish -showless -showman -showmanism -showmanry -showmanship -shown -showpiece -showroom -showup -showworthy -showy -showyard -shoya -shrab -shraddha -shradh -shraf -shrag -shram -shrank -shrap -shrapnel -shrave -shravey -shreadhead -shred -shredcock -shredder -shredding -shreddy -shredless -shredlike -shree -shreeve -shrend -shrew -shrewd -shrewdish -shrewdly -shrewdness -shrewdom -shrewdy -shrewish -shrewishly -shrewishness -shrewlike -shrewly -shrewmouse -shrewstruck -shriek -shrieker -shriekery -shriekily -shriekiness -shriekingly -shriekproof -shrieky -shrieval -shrievalty -shrift -shrike -shrill -shrilling -shrillish -shrillness -shrilly -shrimp -shrimper -shrimpfish -shrimpi -shrimpish -shrimpishness -shrimplike -shrimpy -shrinal -shrine -shrineless -shrinelet -shrinelike -shrink -shrinkable -shrinkage -shrinkageproof -shrinker -shrinkhead -shrinking -shrinkingly -shrinkproof -shrinky -shrip -shrite -shrive -shrivel -shriven -shriver -shriving -shroff -shrog -shroud -shrouded -shrouding -shroudless -shroudlike -shroudy -shrove -shrover -shrub -shrubbed -shrubbery -shrubbiness -shrubbish -shrubby -shrubland -shrubless -shrublet -shrublike -shrubwood -shruff -shrug -shruggingly -shrunk -shrunken -shrups -shtreimel -shuba -shubunkin -shuck -shucker -shucking -shuckins -shuckpen -shucks -shudder -shudderful -shudderiness -shudderingly -shuddersome -shuddery -shuff -shuffle -shuffleboard -shufflecap -shuffler -shufflewing -shuffling -shufflingly -shug -shul -shuler -shulwaurs -shumac -shun -shune -shunless -shunnable -shunner -shunt -shunter -shunting -shure -shurf -shush -shusher -shut -shutdown -shutness -shutoff -shutout -shuttance -shutten -shutter -shuttering -shutterless -shutterwise -shutting -shuttle -shuttlecock -shuttleheaded -shuttlelike -shuttlewise -shwanpan -shy -shydepoke -shyer -shyish -shyly -shyness -shyster -si -siak -sial -sialaden -sialadenitis -sialadenoncus -sialagogic -sialagogue -sialagoguic -sialemesis -sialic -sialid -sialidan -sialoangitis -sialogenous -sialoid -sialolith -sialolithiasis -sialology -sialorrhea -sialoschesis -sialosemeiology -sialosis -sialostenosis -sialosyrinx -sialozemia -siamang -sib -sibbed -sibbens -sibber -sibboleth -sibby -siberite -sibilance -sibilancy -sibilant -sibilantly -sibilate -sibilatingly -sibilator -sibilatory -sibilous -sibilus -sibling -sibness -sibrede -sibship -sibyl -sibylesque -sibylic -sibylism -sibylla -sibylline -sibyllist -sic -sicarian -sicarious -sicarius -sicca -siccaneous -siccant -siccate -siccation -siccative -siccimeter -siccity -sice -sicilian -siciliana -sicilica -sicilicum -sicilienne -sicinnian -sick -sickbed -sicken -sickener -sickening -sickeningly -sicker -sickerly -sickerness -sickhearted -sickish -sickishly -sickishness -sickle -sicklebill -sickled -sicklelike -sickleman -sicklemia -sicklemic -sicklepod -sickler -sicklerite -sickless -sickleweed -sicklewise -sicklewort -sicklied -sicklily -sickliness -sickling -sickly -sickness -sicknessproof -sickroom -sicsac -sicula -sicular -sidder -siddur -side -sideage -sidearm -sideboard -sidebone -sidebones -sideburns -sidecar -sidecarist -sidecheck -sided -sidedness -sideflash -sidehead -sidehill -sidekicker -sidelang -sideless -sideline -sideling -sidelings -sidelingwise -sidelong -sidenote -sidepiece -sider -sideral -sideration -siderealize -sidereally -siderean -siderin -siderism -siderite -sideritic -siderognost -siderographic -siderographical -siderographist -siderography -siderolite -siderology -sideromagnetic -sideromancy -sideromelane -sideronatrite -sideronym -sideroscope -siderose -siderosis -siderostat -siderostatic -siderotechny -siderous -sidership -siderurgical -siderurgy -sides -sidesaddle -sideshake -sideslip -sidesman -sidesplitter -sidesplitting -sidesplittingly -sidesway -sideswipe -sideswiper -sidetrack -sidewalk -sideward -sidewards -sideway -sideways -sidewinder -sidewipe -sidewiper -sidewise -sidhe -sidi -siding -sidle -sidler -sidling -sidlingly -sidth -sidy -sie -siege -siegeable -siegecraft -siegenite -sieger -siegework -sienna -sier -siering -sierozem -sierra -sierran -siesta -siestaland -sieve -sieveful -sievelike -siever -sievings -sievy -sifac -sifaka -sife -siffilate -siffle -sifflement -sifflet -sifflot -sift -siftage -sifted -sifter -sifting -sig -sigatoka -sigger -sigh -sigher -sighful -sighfully -sighing -sighingly -sighingness -sighless -sighlike -sight -sightable -sighted -sighten -sightening -sighter -sightful -sightfulness -sighthole -sighting -sightless -sightlessly -sightlessness -sightlily -sightliness -sightly -sightproof -sightworthiness -sightworthy -sighty -sigil -sigilative -sigillariaceous -sigillarian -sigillarid -sigillarioid -sigillarist -sigillaroid -sigillary -sigillate -sigillated -sigillation -sigillistic -sigillographer -sigillographical -sigillography -sigillum -sigla -siglarian -siglos -sigma -sigmaspire -sigmate -sigmatic -sigmation -sigmatism -sigmodont -sigmoid -sigmoidal -sigmoidally -sigmoidectomy -sigmoiditis -sigmoidopexy -sigmoidoproctostomy -sigmoidorectostomy -sigmoidoscope -sigmoidoscopy -sigmoidostomy -sign -signable -signal -signalee -signaler -signalese -signaletic -signaletics -signalism -signalist -signality -signalize -signally -signalman -signalment -signary -signatary -signate -signation -signator -signatory -signatural -signature -signatureless -signaturist -signboard -signee -signer -signet -signetwise -signifer -signifiable -significal -significance -significancy -significant -significantly -significantness -significate -signification -significatist -significative -significatively -significativeness -significator -significatory -significatrix -significature -significavit -significian -significs -signifier -signify -signior -signiorship -signist -signless -signlike -signman -signorial -signorship -signory -signpost -signum -signwriter -sika -sikar -sikatch -sike -sikerly -sikerness -siket -sikhara -sikhra -sil -silage -silaginoid -silane -silbergroschen -silcrete -sile -silen -silenaceous -silence -silenced -silencer -silency -sileni -silenic -silent -silential -silentiary -silentious -silentish -silently -silentness -silenus -silesia -silex -silexite -silhouette -silhouettist -silhouettograph -silica -silicam -silicane -silicate -silication -silicatization -silicean -siliceocalcareous -siliceofelspathic -siliceofluoric -siliceous -silicic -silicicalcareous -silicicolous -silicide -silicidize -siliciferous -silicification -silicifluoric -silicifluoride -silicify -siliciophite -silicious -silicium -siliciuretted -silicize -silicle -silico -silicoacetic -silicoalkaline -silicoaluminate -silicoarsenide -silicocalcareous -silicochloroform -silicocyanide -silicoethane -silicoferruginous -silicoflagellate -silicofluoric -silicofluoride -silicohydrocarbon -silicomagnesian -silicomanganese -silicomethane -silicon -silicone -siliconize -silicononane -silicopropane -silicosis -silicotalcose -silicotic -silicotitanate -silicotungstate -silicotungstic -silicula -silicular -silicule -siliculose -siliculous -silicyl -siliqua -siliquaceous -siliquae -silique -siliquiferous -siliquiform -siliquose -siliquous -silk -silkalene -silkaline -silked -silken -silker -silkflower -silkgrower -silkie -silkily -silkiness -silklike -silkman -silkness -silksman -silktail -silkweed -silkwoman -silkwood -silkwork -silkworks -silkworm -silky -sill -sillabub -silladar -sillandar -sillar -siller -sillibouk -sillikin -sillily -sillimanite -silliness -sillock -sillograph -sillographer -sillographist -sillometer -sillon -silly -sillyhood -sillyhow -sillyish -sillyism -sillyton -silo -siloist -silphid -silphium -silt -siltage -siltation -silting -siltlike -silty -silundum -silurid -siluroid -silva -silvan -silvanity -silvanry -silvendy -silver -silverback -silverbeater -silverbelly -silverberry -silverbill -silverboom -silverbush -silvered -silverer -silvereye -silverfin -silverfish -silverhead -silverily -silveriness -silvering -silverish -silverite -silverize -silverizer -silverleaf -silverless -silverlike -silverling -silverly -silvern -silverness -silverpoint -silverrod -silverside -silversides -silverskin -silversmith -silversmithing -silverspot -silvertail -silvertip -silvertop -silvervine -silverware -silverweed -silverwing -silverwood -silverwork -silverworker -silvery -silvical -silvicolous -silvics -silvicultural -silviculturally -silviculture -silviculturist -silyl -sima -simal -simar -simaroubaceous -simball -simbil -simblin -simblot -sime -simiad -simial -simian -simianity -simiesque -similar -similarity -similarize -similarly -similative -simile -similimum -similiter -similitive -similitude -similitudinize -simility -similize -similor -simioid -simious -simiousness -simity -simkin -simlin -simling -simmer -simmeringly -simmon -simnel -simnelwise -simoleon -simoniac -simoniacal -simoniacally -simonious -simonism -simonist -simony -simool -simoom -simoon -simous -simp -simpai -simper -simperer -simperingly -simple -simplehearted -simpleheartedly -simpleheartedness -simpleness -simpler -simpleton -simpletonian -simpletonianism -simpletonic -simpletonish -simpletonism -simplex -simplexed -simplexity -simplicident -simplicidentate -simplicist -simplicitarian -simplicity -simplicize -simplification -simplificative -simplificator -simplified -simplifiedly -simplifier -simplify -simplism -simplist -simplistic -simply -simsim -simson -simulacra -simulacral -simulacre -simulacrize -simulacrum -simulance -simulant -simular -simulate -simulation -simulative -simulatively -simulator -simulatory -simulcast -simuler -simuliid -simulioid -simultaneity -simultaneous -simultaneously -simultaneousness -sin -sina -sinaite -sinal -sinalbin -sinamay -sinamine -sinapate -sinapic -sinapine -sinapinic -sinapis -sinapism -sinapize -sinapoline -sinarchism -sinarchist -sinarquism -sinarquist -sinarquista -sinawa -sincaline -since -sincere -sincerely -sincereness -sincerity -sincipital -sinciput -sind -sinder -sindle -sindoc -sindon -sindry -sine -sinecural -sinecure -sinecureship -sinecurism -sinecurist -sinew -sinewed -sinewiness -sinewless -sinewous -sinewy -sinfonia -sinfonie -sinfonietta -sinful -sinfully -sinfulness -sing -singability -singable -singableness -singally -singarip -singe -singed -singeing -singeingly -singer -singey -singh -singillatim -singing -singingly -singkamas -single -singlebar -singled -singlehanded -singlehandedly -singlehandedness -singlehearted -singleheartedly -singleheartedness -singlehood -singleness -singler -singles -singlestick -singlesticker -singlet -singleton -singletree -singlings -singly -singsong -singsongy -singspiel -singstress -singular -singularism -singularist -singularity -singularization -singularize -singularly -singularness -singult -singultous -singultus -sinh -sinigrin -sinigrinase -sinigrosid -sinigroside -sinister -sinisterly -sinisterness -sinisterwise -sinistrad -sinistral -sinistrality -sinistrally -sinistration -sinistrin -sinistrocerebral -sinistrocular -sinistrodextral -sinistrogyrate -sinistrogyration -sinistrogyric -sinistromanual -sinistrorsal -sinistrorsally -sinistrorse -sinistrous -sinistrously -sinistruous -sink -sinkable -sinkage -sinker -sinkerless -sinkfield -sinkhead -sinkhole -sinking -sinkless -sinklike -sinkroom -sinkstone -sinky -sinless -sinlessly -sinlessness -sinlike -sinnable -sinnableness -sinnen -sinner -sinneress -sinnership -sinnet -sinningly -sinningness -sinoatrial -sinoauricular -sinoidal -sinomenine -sinopia -sinopite -sinople -sinproof -sinsion -sinsring -sinsyne -sinter -sintoc -sinuate -sinuated -sinuatedentate -sinuately -sinuation -sinuatocontorted -sinuatodentate -sinuatodentated -sinuatopinnatifid -sinuatoserrated -sinuatoundulate -sinuatrial -sinuauricular -sinuitis -sinuose -sinuosely -sinuosity -sinuous -sinuously -sinuousness -sinupallial -sinupalliate -sinus -sinusal -sinusitis -sinuslike -sinusoid -sinusoidal -sinusoidally -sinuventricular -sinward -siol -sion -sip -sipage -sipe -siper -siphoid -siphon -siphonaceous -siphonage -siphonal -siphonapterous -siphonariid -siphonate -siphoneous -siphonet -siphonia -siphonial -siphonic -siphoniferous -siphoniform -siphonium -siphonless -siphonlike -siphonobranchiate -siphonogam -siphonogamic -siphonogamous -siphonogamy -siphonoglyph -siphonoglyphe -siphonognathid -siphonognathous -siphonophoran -siphonophore -siphonophorous -siphonoplax -siphonopore -siphonorhinal -siphonorhine -siphonosome -siphonostele -siphonostelic -siphonostely -siphonostomatous -siphonostome -siphonostomous -siphonozooid -siphonula -siphorhinal -siphorhinian -siphosome -siphuncle -siphuncled -siphuncular -siphunculate -siphunculated -sipid -sipidity -siping -sipling -sipper -sippet -sippingly -sippio -sipunculacean -sipunculid -sipunculoid -sipylite -sir -sircar -sirdar -sirdarship -sire -sireless -siren -sirene -sirenian -sirenic -sirenical -sirenically -sirening -sirenize -sirenlike -sirenoid -sireny -sireship -siress -sirgang -sirian -siriasis -siricid -sirih -siriometer -siris -sirkeer -sirki -sirky -sirloin -sirloiny -siroc -sirocco -siroccoish -siroccoishly -sirpea -sirple -sirpoon -sirrah -sirree -sirship -siruaballi -siruelas -sirup -siruped -siruper -sirupy -sis -sisal -siscowet -sise -sisel -siserara -siserary -siserskite -sish -sisham -sisi -siskin -sismotherapy -siss -sissification -sissify -sissiness -sissoo -sissy -sissyish -sissyism -sist -sister -sisterhood -sisterin -sistering -sisterize -sisterless -sisterlike -sisterliness -sisterly -sistern -sistle -sistomensin -sistrum -sisyrinchium -sit -sitao -sitar -sitatunga -sitch -site -sitfast -sith -sithcund -sithe -sithement -sithence -sithens -sitient -sitio -sitiology -sitiomania -sitiophobia -sitology -sitomania -sitophobia -sitophobic -sitosterin -sitosterol -sitotoxism -sittee -sitten -sitter -sittine -sitting -sittringy -situal -situate -situated -situation -situational -situla -situlae -situs -siva -sivathere -sivatherioid -siver -sivvens -siwash -six -sixain -sixer -sixfoil -sixfold -sixhaend -sixhynde -sixpence -sixpenny -sixpennyworth -sixscore -sixsome -sixte -sixteen -sixteener -sixteenfold -sixteenmo -sixteenth -sixteenthly -sixth -sixthet -sixthly -sixtieth -sixty -sixtyfold -sixtypenny -sizable -sizableness -sizably -sizal -sizar -sizarship -size -sizeable -sizeableness -sized -sizeman -sizer -sizes -siziness -sizing -sizy -sizygia -sizygium -sizz -sizzard -sizzing -sizzle -sizzling -sizzlingly -sjambok -skaddle -skaff -skaffie -skag -skaillie -skainsmate -skair -skaitbird -skal -skalawag -skaldship -skance -skandhas -skart -skasely -skat -skate -skateable -skater -skatikas -skatiku -skating -skatist -skatole -skatosine -skatoxyl -skaw -skean -skeanockle -skedaddle -skedaddler -skedge -skedgewith -skedlock -skee -skeed -skeeg -skeel -skeeling -skeely -skeen -skeenyie -skeer -skeered -skeery -skeesicks -skeet -skeeter -skeezix -skeg -skegger -skeif -skeigh -skeily -skein -skeiner -skeipp -skel -skelder -skelderdrake -skeldrake -skeletal -skeletin -skeletogenous -skeletogeny -skeletomuscular -skeleton -skeletonian -skeletonic -skeletonization -skeletonize -skeletonizer -skeletonless -skeletonweed -skeletony -skelf -skelgoose -skelic -skell -skellat -skeller -skelloch -skellum -skelly -skelp -skelper -skelpin -skelping -skelter -skemmel -skemp -sken -skene -skeo -skeough -skep -skepful -skeppist -skeppund -skeptic -skeptical -skeptically -skepticalness -skepticism -skepticize -sker -skere -skerret -skerrick -skerry -sketch -sketchability -sketchable -sketchbook -sketchee -sketcher -sketchily -sketchiness -sketching -sketchingly -sketchist -sketchlike -sketchy -skete -sketiotai -skeuomorph -skeuomorphic -skevish -skew -skewback -skewbacked -skewbald -skewed -skewer -skewerer -skewerwood -skewings -skewl -skewly -skewness -skewwhiff -skewwise -skewy -skey -skeyting -ski -skiagram -skiagraph -skiagrapher -skiagraphic -skiagraphical -skiagraphically -skiagraphy -skiameter -skiametry -skiapod -skiapodous -skiascope -skiascopy -skibby -skibslast -skice -skid -skidded -skidder -skidding -skiddingly -skiddoo -skiddy -skidpan -skidproof -skidway -skied -skieppe -skiepper -skier -skies -skiff -skiffless -skiffling -skift -skiing -skijore -skijorer -skijoring -skil -skilder -skildfel -skilfish -skill -skillagalee -skilled -skillenton -skillessness -skillet -skillful -skillfully -skillfulness -skilligalee -skilling -skillion -skilly -skilpot -skilts -skim -skimback -skime -skimmed -skimmer -skimmerton -skimming -skimmingly -skimmington -skimmity -skimp -skimpily -skimpiness -skimpingly -skimpy -skin -skinbound -skinch -skinflint -skinflintily -skinflintiness -skinflinty -skinful -skink -skinker -skinking -skinkle -skinless -skinlike -skinned -skinner -skinnery -skinniness -skinning -skinny -skintight -skinworm -skiogram -skiograph -skiophyte -skip -skipbrain -skipjack -skipjackly -skipkennel -skipman -skippable -skippel -skipper -skippered -skippership -skippery -skippet -skipping -skippingly -skipple -skippund -skippy -skiptail -skirl -skirlcock -skirling -skirmish -skirmisher -skirmishing -skirmishingly -skirp -skirr -skirreh -skirret -skirt -skirtboard -skirted -skirter -skirting -skirtingly -skirtless -skirtlike -skirty -skirwhit -skirwort -skit -skite -skiter -skither -skitter -skittish -skittishly -skittishness -skittle -skittled -skittler -skittles -skitty -skittyboot -skiv -skive -skiver -skiverwood -skiving -skivvies -sklate -sklater -sklent -skleropelite -sklinter -skoal -skogbolite -skokiaan -skomerite -skoo -skookum -skoptsy -skout -skraeling -skraigh -skrike -skrimshander -skrupul -skua -skulduggery -skulk -skulker -skulking -skulkingly -skull -skullbanker -skullcap -skulled -skullery -skullfish -skullful -skully -skulp -skun -skunk -skunkbill -skunkbush -skunkdom -skunkery -skunkhead -skunkish -skunklet -skunktop -skunkweed -skunky -skuse -skutterudite -sky -skybal -skycraft -skyey -skyful -skyish -skylark -skylarker -skyless -skylight -skylike -skylook -skyman -skyphoi -skyphos -skyplast -skyre -skyrgaliard -skyrocket -skyrockety -skysail -skyscape -skyscraper -skyscraping -skyshine -skyugle -skyward -skywards -skyway -skywrite -skywriter -skywriting -sla -slab -slabbed -slabber -slabberer -slabbery -slabbiness -slabbing -slabby -slabman -slabness -slabstone -slack -slackage -slacked -slacken -slackener -slacker -slackerism -slacking -slackingly -slackly -slackness -slad -sladang -slade -slae -slag -slaggability -slaggable -slagger -slagging -slaggy -slagless -slaglessness -slagman -slain -slainte -slaister -slaistery -slait -slake -slakeable -slakeless -slaker -slaking -slaky -slam -slammakin -slammerkin -slammock -slammocking -slammocky -slamp -slampamp -slampant -slander -slanderer -slanderful -slanderfully -slandering -slanderingly -slanderous -slanderously -slanderousness -slanderproof -slane -slang -slangily -slanginess -slangish -slangishly -slangism -slangkop -slangous -slangster -slanguage -slangular -slangy -slank -slant -slantindicular -slantindicularly -slanting -slantingly -slantingways -slantly -slantways -slantwise -slap -slapdash -slapdashery -slape -slaphappy -slapjack -slapper -slapping -slapstick -slapsticky -slare -slart -slarth -slash -slashed -slasher -slashing -slashingly -slashy -slat -slatch -slate -slateful -slatelike -slatemaker -slatemaking -slater -slateworks -slateyard -slath -slather -slatify -slatiness -slating -slatish -slatted -slatter -slattern -slatternish -slatternliness -slatternly -slatternness -slattery -slatting -slaty -slaughter -slaughterer -slaughterhouse -slaughteringly -slaughterman -slaughterous -slaughterously -slaughteryard -slaum -slave -slaveborn -slaved -slaveholder -slaveholding -slaveland -slaveless -slavelet -slavelike -slaveling -slavemonger -slaveowner -slaveownership -slavepen -slaver -slaverer -slavering -slaveringly -slavery -slavey -slavikite -slaving -slavish -slavishly -slavishness -slavocracy -slavocrat -slavocratic -slaw -slay -slayable -slayer -slaying -sleathy -sleave -sleaved -sleaziness -sleazy -sleck -sled -sledded -sledder -sledding -sledful -sledge -sledgeless -sledgemeter -sledger -sledging -sledlike -slee -sleech -sleechy -sleek -sleeken -sleeker -sleeking -sleekit -sleekly -sleekness -sleeky -sleep -sleeper -sleepered -sleepful -sleepfulness -sleepify -sleepily -sleepiness -sleeping -sleepingly -sleepland -sleepless -sleeplessly -sleeplessness -sleeplike -sleepmarken -sleepproof -sleepry -sleepwaker -sleepwaking -sleepwalk -sleepwalker -sleepwalking -sleepward -sleepwort -sleepy -sleepyhead -sleer -sleet -sleetiness -sleeting -sleetproof -sleety -sleeve -sleeveband -sleeveboard -sleeved -sleeveen -sleevefish -sleeveful -sleeveless -sleevelessness -sleevelet -sleevelike -sleever -sleigh -sleigher -sleighing -sleight -sleightful -sleighty -slendang -slender -slenderish -slenderize -slenderly -slenderness -slent -slepez -slept -slete -sleuth -sleuthdog -sleuthful -sleuthhound -sleuthlike -slew -slewed -slewer -slewing -sley -sleyer -slice -sliceable -sliced -slicer -slich -slicht -slicing -slicingly -slick -slicken -slickens -slickenside -slicker -slickered -slickery -slicking -slickly -slickness -slid -slidable -slidableness -slidably -slidage -slidden -slidder -sliddery -slide -slideable -slideableness -slideably -slided -slidehead -slideman -slideproof -slider -slideway -sliding -slidingly -slidingness -slidometer -slifter -slight -slighted -slighter -slightily -slightiness -slighting -slightingly -slightish -slightly -slightness -slighty -slim -slime -slimeman -slimer -slimily -sliminess -slimish -slimishness -slimly -slimmish -slimness -slimpsy -slimsy -slimy -sline -sling -slingball -slinge -slinger -slinging -slingshot -slingsman -slingstone -slink -slinker -slinkily -slinkiness -slinking -slinkingly -slinkskin -slinkweed -slinky -slip -slipback -slipband -slipboard -slipbody -slipcase -slipcoach -slipcoat -slipe -slipgibbet -sliphorn -sliphouse -slipknot -slipless -slipman -slipover -slippage -slipped -slipper -slippered -slipperflower -slipperily -slipperiness -slipperlike -slipperweed -slipperwort -slippery -slipperyback -slipperyroot -slippiness -slipping -slippingly -slipproof -slippy -slipshod -slipshoddiness -slipshoddy -slipshodness -slipshoe -slipslap -slipslop -slipsloppish -slipsloppism -slipsole -slipstep -slipstring -sliptopped -slipway -slirt -slish -slit -slitch -slite -slither -slithering -slitheroo -slithers -slithery -slithy -slitless -slitlike -slitshell -slitted -slitter -slitting -slitty -slitwise -slive -sliver -sliverer -sliverlike -sliverproof -slivery -sliving -slivovitz -sloan -slob -slobber -slobberchops -slobberer -slobbers -slobbery -slobby -slock -slocken -slod -slodder -slodge -slodger -sloe -sloeberry -sloebush -sloetree -slog -slogan -sloganeer -sloganize -slogger -slogging -slogwood -sloka -sloke -slommock -slon -slone -slonk -sloo -sloom -sloomy -sloop -sloopman -sloosh -slop -slopdash -slope -sloped -slopely -slopeness -sloper -slopeways -slopewise -sloping -slopingly -slopingness -slopmaker -slopmaking -sloppage -slopped -sloppery -sloppily -sloppiness -slopping -sloppy -slops -slopseller -slopselling -slopshop -slopstone -slopwork -slopworker -slopy -slorp -slosh -slosher -sloshily -sloshiness -sloshy -slot -slote -sloted -sloth -slothful -slothfully -slothfulness -slothound -slotted -slotter -slottery -slotting -slotwise -slouch -sloucher -slouchily -slouchiness -slouching -slouchingly -slouchy -slough -sloughiness -sloughy -slour -sloush -sloven -slovenlike -slovenliness -slovenly -slovenwood -slow -slowbellied -slowbelly -slowdown -slowgoing -slowheaded -slowhearted -slowheartedness -slowhound -slowish -slowly -slowmouthed -slowpoke -slowrie -slows -slowworm -sloyd -slub -slubber -slubberdegullion -slubberer -slubbering -slubberingly -slubberly -slubbery -slubbing -slubby -slud -sludder -sluddery -sludge -sludged -sludger -sludgy -slue -sluer -slug -slugabed -sluggard -sluggarding -sluggardize -sluggardliness -sluggardly -sluggardness -sluggardry -slugged -slugger -slugging -sluggingly -sluggish -sluggishly -sluggishness -sluggy -sluglike -slugwood -sluice -sluicelike -sluicer -sluiceway -sluicing -sluicy -sluig -sluit -slum -slumber -slumberer -slumberful -slumbering -slumberingly -slumberland -slumberless -slumberous -slumberously -slumberousness -slumberproof -slumbersome -slumbery -slumbrous -slumdom -slumgullion -slumgum -slumland -slummage -slummer -slumminess -slumming -slummock -slummocky -slummy -slump -slumpproof -slumproof -slumpwork -slumpy -slumward -slumwise -slung -slungbody -slunge -slunk -slunken -slur -slurbow -slurp -slurry -slush -slusher -slushily -slushiness -slushy -slut -slutch -slutchy -sluther -sluthood -slutter -sluttery -sluttikin -sluttish -sluttishly -sluttishness -slutty -sly -slyboots -slyish -slyly -slyness -slype -sma -smachrie -smack -smackee -smacker -smackful -smacking -smackingly -smacksman -smaik -small -smallage -smallclothes -smallcoal -smallen -smaller -smallhearted -smallholder -smalling -smallish -smallmouth -smallmouthed -smallness -smallpox -smalls -smallsword -smalltime -smallware -smally -smalm -smalt -smalter -smaltine -smaltite -smalts -smaragd -smaragdine -smaragdite -smaragdus -smarm -smarmy -smart -smarten -smarting -smartingly -smartish -smartism -smartless -smartly -smartness -smartweed -smarty -smash -smashable -smashage -smashboard -smasher -smashery -smashing -smashingly -smashment -smashup -smatter -smatterer -smattering -smatteringly -smattery -smaze -smear -smearcase -smeared -smearer -smeariness -smearless -smeary -smectic -smectis -smectite -smeddum -smee -smeech -smeek -smeeky -smeer -smeeth -smegma -smell -smellable -smellage -smelled -smeller -smellful -smellfungi -smellfungus -smelliness -smelling -smellproof -smellsome -smelly -smelt -smelter -smelterman -smeltery -smeltman -smeth -smethe -smeuse -smew -smich -smicker -smicket -smiddie -smiddum -smidge -smidgen -smifligate -smifligation -smiggins -smilacaceous -smilaceous -smilacin -smilax -smile -smileable -smileage -smileful -smilefulness -smileless -smilelessly -smilelessness -smilemaker -smilemaking -smileproof -smiler -smilet -smiling -smilingly -smilingness -smily -sminthurid -smirch -smircher -smirchless -smirchy -smiris -smirk -smirker -smirking -smirkingly -smirkish -smirkle -smirkly -smirky -smirtle -smit -smitch -smite -smiter -smith -smitham -smithcraft -smither -smithereens -smithery -smithing -smithite -smithsonite -smithwork -smithy -smithydander -smiting -smitten -smitting -smock -smocker -smockface -smocking -smockless -smocklike -smog -smokables -smoke -smokeable -smokebox -smokebush -smoked -smokefarthings -smokehouse -smokejack -smokeless -smokelessly -smokelessness -smokelike -smokeproof -smoker -smokery -smokestack -smokestone -smoketight -smokewood -smokily -smokiness -smoking -smokish -smoky -smokyseeming -smolder -smolderingness -smolt -smooch -smoochy -smoodge -smoodger -smook -smoorich -smoot -smooth -smoothable -smoothback -smoothbore -smoothbored -smoothcoat -smoothen -smoother -smoothification -smoothify -smoothing -smoothingly -smoothish -smoothly -smoothmouthed -smoothness -smoothpate -smopple -smore -smorgasbord -smote -smother -smotherable -smotheration -smothered -smotherer -smotheriness -smothering -smotheringly -smothery -smotter -smouch -smoucher -smous -smouse -smouser -smout -smriti -smudge -smudged -smudgedly -smudgeless -smudgeproof -smudger -smudgily -smudginess -smudgy -smug -smuggery -smuggish -smuggishly -smuggishness -smuggle -smuggleable -smuggler -smugglery -smuggling -smugism -smugly -smugness -smuisty -smur -smurr -smurry -smuse -smush -smut -smutch -smutchin -smutchless -smutchy -smutproof -smutted -smutter -smuttily -smuttiness -smutty -smyth -smytrie -snab -snabbie -snabble -snack -snackle -snackman -snaff -snaffle -snaffles -snafu -snag -snagbush -snagged -snagger -snaggled -snaggletooth -snaggy -snagrel -snail -snaileater -snailery -snailfish -snailflower -snailish -snailishly -snaillike -snails -snaily -snaith -snake -snakebark -snakeberry -snakebird -snakebite -snakefish -snakeflower -snakehead -snakeholing -snakeleaf -snakeless -snakelet -snakelike -snakeling -snakemouth -snakeneck -snakeology -snakephobia -snakepiece -snakepipe -snakeproof -snaker -snakeroot -snakery -snakeship -snakeskin -snakestone -snakeweed -snakewise -snakewood -snakeworm -snakewort -snakily -snakiness -snaking -snakish -snaky -snap -snapback -snapbag -snapberry -snapdragon -snape -snaper -snaphead -snapholder -snapjack -snapless -snappable -snapped -snapper -snappily -snappiness -snapping -snappingly -snappish -snappishly -snappishness -snapps -snappy -snaps -snapsack -snapshot -snapshotter -snapweed -snapwood -snapwort -snapy -snare -snareless -snarer -snaringly -snark -snarl -snarler -snarleyyow -snarlingly -snarlish -snarly -snary -snaste -snatch -snatchable -snatched -snatcher -snatchily -snatching -snatchingly -snatchproof -snatchy -snath -snathe -snavel -snavvle -snaw -snead -sneak -sneaker -sneakiness -sneaking -sneakingly -sneakingness -sneakish -sneakishly -sneakishness -sneaksby -sneaksman -sneaky -sneap -sneath -sneathe -sneb -sneck -sneckdraw -sneckdrawing -sneckdrawn -snecker -snecket -sned -snee -sneer -sneerer -sneerful -sneerfulness -sneering -sneeringly -sneerless -sneery -sneesh -sneeshing -sneest -sneesty -sneeze -sneezeless -sneezeproof -sneezer -sneezeweed -sneezewood -sneezewort -sneezing -sneezy -snell -snelly -snerp -snew -snib -snibble -snibbled -snibbler -snibel -snicher -snick -snickdraw -snickdrawing -snicker -snickering -snickeringly -snickersnee -snicket -snickey -snickle -sniddle -snide -snideness -sniff -sniffer -sniffily -sniffiness -sniffing -sniffingly -sniffish -sniffishness -sniffle -sniffler -sniffly -sniffy -snift -snifter -snifty -snig -snigger -sniggerer -sniggering -sniggle -sniggler -sniggoringly -snip -snipe -snipebill -snipefish -snipelike -sniper -sniperscope -sniping -snipish -snipjack -snipnose -snipocracy -snipper -snippersnapper -snipperty -snippet -snippetiness -snippety -snippiness -snipping -snippish -snippy -snipsnapsnorum -sniptious -snipy -snirl -snirt -snirtle -snitch -snitcher -snite -snithe -snithy -snittle -snivel -sniveled -sniveler -sniveling -snively -snivy -snob -snobber -snobbery -snobbess -snobbing -snobbish -snobbishly -snobbishness -snobbism -snobby -snobdom -snobling -snobocracy -snobocrat -snobographer -snobography -snobologist -snobonomer -snobscat -snocher -snock -snocker -snod -snodly -snoek -snoeking -snog -snoga -snoke -snood -snooded -snooding -snook -snooker -snookered -snoop -snooper -snooperscope -snoopy -snoose -snoot -snootily -snootiness -snooty -snoove -snooze -snoozer -snooziness -snoozle -snoozy -snop -snore -snoreless -snorer -snoring -snoringly -snork -snorkel -snorker -snort -snorter -snorting -snortingly -snortle -snorty -snot -snotter -snottily -snottiness -snotty -snouch -snout -snouted -snouter -snoutish -snoutless -snoutlike -snouty -snow -snowball -snowbank -snowbell -snowberg -snowberry -snowbird -snowblink -snowbound -snowbreak -snowbush -snowcap -snowcraft -snowdrift -snowdrop -snowfall -snowflake -snowflight -snowflower -snowfowl -snowhammer -snowhouse -snowie -snowily -snowiness -snowish -snowk -snowl -snowland -snowless -snowlike -snowmanship -snowmobile -snowplow -snowproof -snowscape -snowshade -snowshed -snowshine -snowshoe -snowshoed -snowshoeing -snowshoer -snowslide -snowslip -snowstorm -snowsuit -snowworm -snowy -snozzle -snub -snubbable -snubbed -snubbee -snubber -snubbiness -snubbing -snubbingly -snubbish -snubbishly -snubbishness -snubby -snubproof -snuck -snudge -snuff -snuffbox -snuffboxer -snuffcolored -snuffer -snuffers -snuffiness -snuffing -snuffingly -snuffish -snuffle -snuffler -snuffles -snuffless -snuffliness -snuffling -snufflingly -snuffly -snuffman -snuffy -snug -snugger -snuggery -snuggish -snuggle -snugify -snugly -snugness -snum -snup -snupper -snur -snurl -snurly -snurp -snurt -snuzzle -sny -snying -so -soak -soakage -soakaway -soaked -soaken -soaker -soaking -soakingly -soakman -soaky -soally -soam -soap -soapbark -soapberry -soapbox -soapboxer -soapbubbly -soapbush -soaper -soapery -soapfish -soapily -soapiness -soaplees -soapless -soaplike -soapmaker -soapmaking -soapmonger -soaprock -soaproot -soapstone -soapsud -soapsuddy -soapsuds -soapsudsy -soapweed -soapwood -soapwort -soapy -soar -soarability -soarable -soarer -soaring -soaringly -soary -sob -sobber -sobbing -sobbingly -sobby -sobeit -sober -soberer -sobering -soberingly -soberize -soberlike -soberly -soberness -sobersault -sobersided -sobersides -soberwise -sobful -soboles -soboliferous -sobproof -sobralite -sobrevest -sobriety -sobriquet -sobriquetical -soc -socage -socager -soccer -soccerist -soccerite -soce -socht -sociability -sociable -sociableness -sociably -social -socialism -socialist -socialistic -socialite -sociality -socializable -socialization -socialize -socializer -socially -socialness -sociation -sociative -societal -societally -societarian -societarianism -societary -societified -societism -societist -societologist -societology -society -societyish -societyless -socii -sociobiological -sociocentric -sociocracy -sociocrat -sociocratic -sociocultural -sociodrama -sociodramatic -socioeconomic -socioeducational -sociogenesis -sociogenetic -sociogeny -sociography -sociolatry -sociolegal -sociologian -sociologic -sociological -sociologically -sociologism -sociologist -sociologistic -sociologize -sociologizer -sociologizing -sociology -sociomedical -sociometric -sociometry -socionomic -socionomics -socionomy -sociophagous -sociopolitical -socioreligious -socioromantic -sociostatic -sociotechnical -socius -sock -sockdolager -socker -socket -socketful -socketless -sockeye -sockless -socklessness -sockmaker -sockmaking -socky -socle -socman -socmanry -soco -sod -soda -sodaclase -sodaic -sodaless -sodalist -sodalite -sodalithite -sodality -sodamide -sodbuster -sodded -sodden -soddenly -soddenness -sodding -soddite -soddy -sodic -sodio -sodioaluminic -sodioaurous -sodiocitrate -sodiohydric -sodioplatinic -sodiosalicylate -sodiotartrate -sodium -sodless -sodoku -sodomic -sodomitess -sodomitic -sodomitical -sodomitically -sodomy -sodwork -sody -soe -soekoe -soever -sofa -sofane -sofar -soffit -soft -softa -softball -softbrained -soften -softener -softening -softhead -softheaded -softhearted -softheartedly -softheartedness -softhorn -softish -softling -softly -softner -softness -softship -softtack -softwood -softy -sog -soger -soget -soggarth -soggendalite -soggily -sogginess -sogging -soggy -soh -soho -soiesette -soil -soilage -soiled -soiling -soilless -soilproof -soilure -soily -soiree -soixantine -soja -sojourn -sojourner -sojourney -sojournment -sok -soka -soke -sokeman -sokemanemot -sokemanry -soken -sol -sola -solace -solaceful -solacement -solaceproof -solacer -solacious -solaciously -solaciousness -solan -solanaceous -solanal -solander -solaneine -solaneous -solanidine -solanine -solanum -solar -solarism -solarist -solaristic -solaristically -solaristics -solarium -solarization -solarize -solarometer -solate -solatia -solation -solatium -solay -sold -soldado -soldan -soldanel -soldanelle -soldanrie -solder -solderer -soldering -solderless -soldi -soldier -soldierbird -soldierbush -soldierdom -soldieress -soldierfish -soldierhearted -soldierhood -soldiering -soldierize -soldierlike -soldierliness -soldierly -soldierproof -soldiership -soldierwise -soldierwood -soldiery -soldo -sole -solea -soleas -solecism -solecist -solecistic -solecistical -solecistically -solecize -solecizer -soleiform -soleil -soleless -solely -solemn -solemncholy -solemnify -solemnitude -solemnity -solemnization -solemnize -solemnizer -solemnly -solemnness -solen -solenacean -solenaceous -soleness -solenette -solenial -solenite -solenitis -solenium -solenoconch -solenocyte -solenodont -solenogaster -solenoglyph -solenoglyphic -solenoid -solenoidal -solenoidally -solenostele -solenostelic -solenostomid -solenostomoid -solenostomous -solent -solentine -solepiece -soleplate -soleprint -soler -soles -soleus -soleyn -solfataric -solfeggio -solferino -soli -soliative -solicit -solicitant -solicitation -solicitationism -solicited -solicitee -soliciter -soliciting -solicitor -solicitorship -solicitous -solicitously -solicitousness -solicitress -solicitrix -solicitude -solicitudinous -solid -solidago -solidaric -solidarily -solidarism -solidarist -solidaristic -solidarity -solidarize -solidary -solidate -solidi -solidifiability -solidifiable -solidifiableness -solidification -solidifier -solidiform -solidify -solidish -solidism -solidist -solidistic -solidity -solidly -solidness -solidum -solidungular -solidungulate -solidus -solifidian -solifidianism -solifluction -solifluctional -soliform -solifuge -solifugean -solifugid -solifugous -soliloquacious -soliloquist -soliloquium -soliloquize -soliloquizer -soliloquizing -soliloquizingly -soliloquy -solilunar -solio -soliped -solipedal -solipedous -solipsism -solipsismal -solipsist -solipsistic -solist -solitaire -solitarian -solitarily -solitariness -solitary -soliterraneous -solitidal -solitude -solitudinarian -solitudinize -solitudinous -solivagant -solivagous -sollar -solleret -solmizate -solmization -solo -solod -solodi -solodization -solodize -soloecophanes -soloist -solon -solonchak -solonetz -solonetzic -solonetzicity -solonist -soloth -solotink -solotnik -solpugid -solstice -solsticion -solstitia -solstitial -solstitially -solstitium -solubility -solubilization -solubilize -soluble -solubleness -solubly -solum -solute -solution -solutional -solutioner -solutionist -solutize -solutizer -solvability -solvable -solvableness -solvate -solvation -solve -solvement -solvency -solvend -solvent -solvently -solventproof -solver -solvolysis -solvolytic -solvolyze -solvsbergite -soma -somacule -somal -somaplasm -somasthenia -somata -somatasthenia -somatic -somatical -somatically -somaticosplanchnic -somaticovisceral -somatics -somatism -somatist -somatization -somatochrome -somatocyst -somatocystic -somatoderm -somatogenetic -somatogenic -somatognosis -somatognostic -somatologic -somatological -somatologically -somatologist -somatology -somatome -somatomic -somatophyte -somatophytic -somatoplasm -somatopleural -somatopleure -somatopleuric -somatopsychic -somatosplanchnic -somatotonia -somatotonic -somatotropic -somatotropically -somatotropism -somatotype -somatotyper -somatotypy -somatous -somber -somberish -somberly -somberness -sombre -sombrerite -sombrero -sombreroed -sombrous -sombrously -sombrousness -some -somebody -someday -somedeal -somegate -somehow -someone -somepart -someplace -somers -somersault -somerset -somervillite -somesthesia -somesthesis -somesthetic -something -somethingness -sometime -sometimes -someway -someways -somewhat -somewhatly -somewhatness -somewhen -somewhence -somewhere -somewheres -somewhile -somewhiles -somewhither -somewhy -somewise -somital -somite -somitic -somma -sommaite -sommelier -somnambulance -somnambulancy -somnambulant -somnambular -somnambulary -somnambulate -somnambulation -somnambulator -somnambule -somnambulency -somnambulic -somnambulically -somnambulism -somnambulist -somnambulistic -somnambulize -somnambulous -somnial -somniative -somnifacient -somniferous -somniferously -somnific -somnifuge -somnify -somniloquacious -somniloquence -somniloquent -somniloquism -somniloquist -somniloquize -somniloquous -somniloquy -somnipathist -somnipathy -somnivolency -somnivolent -somnolence -somnolency -somnolent -somnolently -somnolescence -somnolescent -somnolism -somnolize -somnopathy -somnorific -somnus -sompay -sompne -sompner -son -sonable -sonance -sonancy -sonant -sonantal -sonantic -sonantina -sonantized -sonar -sonata -sonatina -sonation -sond -sondation -sondeli -sonderclass -soneri -song -songbird -songbook -songcraft -songfest -songful -songfully -songfulness -songish -songland -songle -songless -songlessly -songlessness -songlet -songlike -songman -songster -songstress -songworthy -songwright -songy -sonhood -sonic -soniferous -sonification -soniou -sonk -sonless -sonlike -sonlikeness -sonly -sonneratiaceous -sonnet -sonnetary -sonneteer -sonneteeress -sonnetic -sonneting -sonnetish -sonnetist -sonnetize -sonnetlike -sonnetwise -sonnikins -sonny -sonobuoy -sonometer -sonorant -sonorescence -sonorescent -sonoric -sonoriferous -sonoriferously -sonorific -sonority -sonorophone -sonorosity -sonorous -sonorously -sonorousness -sons -sonship -sonsy -sontag -soodle -soodly -sook -sooky -sool -sooloos -soon -sooner -soonish -soonly -soorawn -soord -soorkee -soot -sooter -sooterkin -sooth -soothe -soother -sootherer -soothful -soothing -soothingly -soothingness -soothless -soothsay -soothsayer -soothsayership -soothsaying -sootily -sootiness -sootless -sootlike -sootproof -sooty -sootylike -sop -sope -soph -sophia -sophic -sophical -sophically -sophiologic -sophiology -sophism -sophister -sophistic -sophistical -sophistically -sophisticalness -sophisticant -sophisticate -sophisticated -sophistication -sophisticative -sophisticator -sophisticism -sophistress -sophistry -sophomore -sophomoric -sophomorical -sophomorically -sophoria -sophronize -sophy -sopite -sopition -sopor -soporiferous -soporiferously -soporiferousness -soporific -soporifical -soporifically -soporose -sopper -soppiness -sopping -soppy -soprani -sopranino -sopranist -soprano -sora -sorage -soral -sorb -sorbate -sorbefacient -sorbent -sorbic -sorbile -sorbin -sorbinose -sorbite -sorbitic -sorbitize -sorbitol -sorbose -sorboside -sorbus -sorcer -sorcerer -sorceress -sorcering -sorcerous -sorcerously -sorcery -sorchin -sorda -sordawalite -sordellina -sordes -sordid -sordidity -sordidly -sordidness -sordine -sordino -sordor -sore -soredia -soredial -sorediate -sorediferous -sorediform -soredioid -soredium -soree -sorefalcon -sorefoot -sorehawk -sorehead -soreheaded -soreheadedly -soreheadedness -sorehearted -sorehon -sorely -sorema -soreness -sorgho -sorghum -sorgo -sori -soricid -soricident -soricine -soricoid -soriferous -sorite -sorites -soritical -sorn -sornare -sornari -sorner -sorning -soroban -sororal -sororate -sororial -sororially -sororicidal -sororicide -sorority -sororize -sorose -sorosis -sorosphere -sorption -sorra -sorrel -sorrento -sorrily -sorriness -sorroa -sorrow -sorrower -sorrowful -sorrowfully -sorrowfulness -sorrowing -sorrowingly -sorrowless -sorrowproof -sorrowy -sorry -sorryhearted -sorryish -sort -sortable -sortably -sortal -sortation -sorted -sorter -sortie -sortilege -sortileger -sortilegic -sortilegious -sortilegus -sortilegy -sortiment -sortition -sortly -sorty -sorus -sorva -sory -sosh -soshed -soso -sosoish -soss -sossle -sostenuto -sot -soterial -soteriologic -soteriological -soteriology -sotie -sotnia -sotnik -sotol -sots -sottage -sotted -sotter -sottish -sottishly -sottishness -sou -souari -soubise -soubrette -soubrettish -soucar -souchet -souchong -souchy -soud -soudagur -souffle -souffleed -sough -sougher -soughing -sought -soul -soulack -soulcake -souled -soulful -soulfully -soulfulness -soulical -soulish -soulless -soullessly -soullessness -soullike -soulsaving -soulward -souly -soum -soumansite -soumarque -sound -soundable -soundage -soundboard -sounder -soundful -soundheaded -soundheadedness -soundhearted -soundheartednes -sounding -soundingly -soundingness -soundless -soundlessly -soundlessness -soundly -soundness -soundproof -soundproofing -soup -soupbone -soupcon -souper -souple -soupless -souplike -soupspoon -soupy -sour -sourbelly -sourberry -sourbread -sourbush -sourcake -source -sourceful -sourcefulness -sourceless -sourcrout -sourdeline -sourdine -soured -souredness -souren -sourer -sourhearted -souring -sourish -sourishly -sourishness -sourjack -sourling -sourly -sourness -sourock -soursop -sourtop -sourweed -sourwood -soury -sousaphone -sousaphonist -souse -souser -souslik -soutane -souter -souterrain -south -southard -southbound -southeast -southeaster -southeasterly -southeastern -southeasternmost -southeastward -southeastwardly -southeastwards -souther -southerland -southerliness -southerly -southermost -southern -southerner -southernism -southernize -southernliness -southernly -southernmost -southernness -southernwood -southing -southland -southlander -southmost -southness -southpaw -southron -southward -southwardly -southwards -southwest -southwester -southwesterly -southwestern -southwesternmost -southwestward -southwestwardly -souvenir -souverain -souwester -sov -sovereign -sovereigness -sovereignly -sovereignness -sovereignship -sovereignty -soviet -sovietdom -sovietic -sovietism -sovietist -sovietization -sovietize -sovite -sovkhose -sovkhoz -sovran -sovranty -sow -sowable -sowan -sowans -sowar -sowarry -sowback -sowbacked -sowbane -sowbelly -sowbread -sowdones -sowel -sowens -sower -sowfoot -sowing -sowins -sowl -sowle -sowlike -sowlth -sown -sowse -sowt -sowte -soy -soya -soybean -sozin -sozolic -sozzle -sozzly -spa -space -spaceband -spaced -spaceful -spaceless -spacer -spacesaving -spaceship -spaciness -spacing -spaciosity -spaciotemporal -spacious -spaciously -spaciousness -spack -spacy -spad -spade -spadebone -spaded -spadefish -spadefoot -spadeful -spadelike -spademan -spader -spadesman -spadewise -spadework -spadger -spadiceous -spadices -spadicifloral -spadiciflorous -spadiciform -spadicose -spadilla -spadille -spading -spadix -spadone -spadonic -spadonism -spadrone -spadroon -spae -spaebook -spaecraft -spaedom -spaeman -spaer -spaewife -spaewoman -spaework -spaewright -spaghetti -spagyric -spagyrical -spagyrically -spagyrist -spahi -spaid -spaik -spairge -spak -spalacine -spald -spalder -spalding -spale -spall -spallation -spaller -spalling -spalpeen -spalt -span -spancel -spandle -spandrel -spandy -spane -spanemia -spanemy -spang -spanghew -spangle -spangled -spangler -spanglet -spangly -spangolite -spaniel -spaniellike -spanielship -spaning -spanipelagic -spank -spanker -spankily -spanking -spankingly -spanky -spanless -spann -spannel -spanner -spannerman -spanopnoea -spanpiece -spantoon -spanule -spanworm -spar -sparable -sparada -sparadrap -sparagrass -sparagus -sparassodont -sparaxis -sparch -spare -spareable -spareless -sparely -spareness -sparer -sparerib -sparesome -sparganium -sparganosis -sparganum -sparge -sparger -spargosis -sparhawk -sparid -sparing -sparingly -sparingness -spark -sparkback -sparked -sparker -sparkiness -sparking -sparkish -sparkishly -sparkishness -sparkle -sparkleberry -sparkler -sparkless -sparklessly -sparklet -sparklike -sparkliness -sparkling -sparklingly -sparklingness -sparkly -sparkproof -sparks -sparky -sparlike -sparling -sparm -sparoid -sparpiece -sparred -sparrer -sparring -sparringly -sparrow -sparrowbill -sparrowcide -sparrowdom -sparrowgrass -sparrowish -sparrowless -sparrowlike -sparrowtail -sparrowtongue -sparrowwort -sparrowy -sparry -sparse -sparsedly -sparsely -sparsile -sparsioplast -sparsity -spart -spartacist -sparteine -sparterie -sparth -spartle -sparver -spary -spasm -spasmatic -spasmatical -spasmatomancy -spasmed -spasmic -spasmodic -spasmodical -spasmodically -spasmodicalness -spasmodism -spasmodist -spasmolytic -spasmophilia -spasmophilic -spasmotin -spasmotoxin -spasmous -spastic -spastically -spasticity -spat -spatalamancy -spatangoid -spatangoidean -spatchcock -spate -spatha -spathaceous -spathal -spathe -spathed -spatheful -spathic -spathilae -spathilla -spathose -spathous -spathulate -spatial -spatiality -spatialization -spatialize -spatially -spatiate -spatiation -spatilomancy -spatiotemporal -spatling -spatted -spatter -spatterdashed -spatterdasher -spatterdock -spattering -spatteringly -spatterproof -spatterwork -spatting -spattle -spattlehoe -spatula -spatulamancy -spatular -spatulate -spatulation -spatule -spatuliform -spatulose -spave -spaver -spavie -spavied -spaviet -spavin -spavindy -spavined -spawn -spawneater -spawner -spawning -spawny -spay -spayad -spayard -spaying -speak -speakable -speakableness -speakably -speaker -speakeress -speakership -speakhouse -speakies -speaking -speakingly -speakingness -speakless -speaklessly -speal -spealbone -spean -spear -spearcast -spearer -spearfish -spearflower -spearhead -spearing -spearman -spearmanship -spearmint -spearproof -spearsman -spearwood -spearwort -speary -spec -specchie -spece -special -specialism -specialist -specialistic -speciality -specialization -specialize -specialized -specializer -specially -specialness -specialty -speciation -specie -species -speciestaler -specifiable -specific -specifical -specificality -specifically -specificalness -specificate -specification -specificative -specificatively -specificity -specificize -specificly -specificness -specifier -specifist -specify -specillum -specimen -specimenize -speciology -speciosity -specious -speciously -speciousness -speck -specked -speckedness -speckfall -speckiness -specking -speckle -specklebelly -specklebreast -speckled -speckledbill -speckledness -speckless -specklessly -specklessness -speckling -speckly -speckproof -specks -specksioneer -specky -specs -spectacle -spectacled -spectacleless -spectaclelike -spectaclemaker -spectaclemaking -spectacles -spectacular -spectacularism -spectacularity -spectacularly -spectator -spectatordom -spectatorial -spectatorship -spectatory -spectatress -spectatrix -specter -spectered -specterlike -spectra -spectral -spectralism -spectrality -spectrally -spectralness -spectrobolograph -spectrobolographic -spectrobolometer -spectrobolometric -spectrochemical -spectrochemistry -spectrocolorimetry -spectrocomparator -spectroelectric -spectrogram -spectrograph -spectrographic -spectrographically -spectrography -spectroheliogram -spectroheliograph -spectroheliographic -spectrohelioscope -spectrological -spectrologically -spectrology -spectrometer -spectrometric -spectrometry -spectromicroscope -spectromicroscopical -spectrophobia -spectrophone -spectrophonic -spectrophotoelectric -spectrophotograph -spectrophotography -spectrophotometer -spectrophotometric -spectrophotometry -spectropolarimeter -spectropolariscope -spectropyrheliometer -spectropyrometer -spectroradiometer -spectroradiometric -spectroradiometry -spectroscope -spectroscopic -spectroscopically -spectroscopist -spectroscopy -spectrotelescope -spectrous -spectrum -spectry -specula -specular -specularly -speculate -speculation -speculatist -speculative -speculatively -speculativeness -speculativism -speculator -speculatory -speculatrices -speculatrix -speculist -speculum -specus -sped -speech -speechcraft -speecher -speechful -speechfulness -speechification -speechifier -speechify -speeching -speechless -speechlessly -speechlessness -speechlore -speechmaker -speechmaking -speechment -speed -speedaway -speedboat -speedboating -speedboatman -speeder -speedful -speedfully -speedfulness -speedily -speediness -speeding -speedingly -speedless -speedometer -speedster -speedway -speedwell -speedy -speel -speelken -speelless -speen -speer -speering -speerity -speiskobalt -speiss -spekboom -spelaean -spelder -spelding -speldring -speleological -speleologist -speleology -spelk -spell -spellable -spellbind -spellbinder -spellbinding -spellbound -spellcraft -spelldown -speller -spellful -spelling -spellingdown -spellingly -spellmonger -spellproof -spellword -spellwork -spelt -spelter -spelterman -speltoid -speltz -speluncar -speluncean -spelunk -spelunker -spence -spencer -spencerite -spend -spendable -spender -spendful -spendible -spending -spendless -spendthrift -spendthrifty -spense -spent -speos -sperable -sperate -sperity -sperket -sperling -sperm -sperma -spermaceti -spermacetilike -spermaduct -spermalist -spermaphyte -spermaphytic -spermarium -spermary -spermashion -spermatangium -spermatheca -spermathecal -spermatic -spermatically -spermatid -spermatiferous -spermatin -spermatiogenous -spermation -spermatiophore -spermatism -spermatist -spermatitis -spermatium -spermatize -spermatoblast -spermatoblastic -spermatocele -spermatocyst -spermatocystic -spermatocystitis -spermatocytal -spermatocyte -spermatogemma -spermatogenesis -spermatogenetic -spermatogenic -spermatogenous -spermatogeny -spermatogonial -spermatogonium -spermatoid -spermatolysis -spermatolytic -spermatophoral -spermatophore -spermatophorous -spermatophyte -spermatophytic -spermatoplasm -spermatoplasmic -spermatoplast -spermatorrhea -spermatospore -spermatotheca -spermatova -spermatovum -spermatoxin -spermatozoa -spermatozoal -spermatozoan -spermatozoic -spermatozoid -spermatozoon -spermaturia -spermic -spermidine -spermiducal -spermiduct -spermigerous -spermine -spermiogenesis -spermism -spermist -spermoblast -spermoblastic -spermocarp -spermocenter -spermoderm -spermoduct -spermogenesis -spermogenous -spermogone -spermogoniferous -spermogonium -spermogonous -spermologer -spermological -spermologist -spermology -spermolysis -spermolytic -spermophile -spermophiline -spermophore -spermophorium -spermophyte -spermophytic -spermosphere -spermotheca -spermotoxin -spermous -spermoviduct -spermy -speronara -speronaro -sperone -sperrylite -spessartite -spet -spetch -spetrophoby -speuchan -spew -spewer -spewiness -spewing -spewy -spex -sphacel -sphacelariaceous -sphacelate -sphacelated -sphacelation -sphacelia -sphacelial -sphacelism -sphaceloderma -sphacelotoxin -sphacelous -sphacelus -sphaeraphides -sphaerenchyma -sphaeriaceous -sphaeridia -sphaeridial -sphaeridium -sphaeristerium -sphaerite -sphaeroblast -sphaerocobaltite -sphaerococcaceous -sphaerolite -sphaerolitic -sphaerosiderite -sphaerosome -sphaerospore -sphagion -sphagnaceous -sphagnicolous -sphagnologist -sphagnology -sphagnous -sphagnum -sphalerite -sphecid -spheges -sphegid -sphendone -sphene -sphenethmoid -sphenethmoidal -sphenic -sphenion -spheniscine -spheniscomorph -spheniscomorphic -sphenobasilar -sphenobasilic -sphenocephalia -sphenocephalic -sphenocephalous -sphenocephaly -sphenodon -sphenodont -sphenoethmoid -sphenoethmoidal -sphenofrontal -sphenogram -sphenographic -sphenographist -sphenography -sphenoid -sphenoidal -sphenoiditis -sphenolith -sphenomalar -sphenomandibular -sphenomaxillary -sphenopalatine -sphenoparietal -sphenopetrosal -sphenophyllaceous -sphenosquamosal -sphenotemporal -sphenotic -sphenotribe -sphenotripsy -sphenoturbinal -sphenovomerine -sphenozygomatic -spherable -spheral -spherality -spheraster -spheration -sphere -sphereless -spheric -spherical -sphericality -spherically -sphericalness -sphericist -sphericity -sphericle -sphericocylindrical -sphericotetrahedral -sphericotriangular -spherics -spheriform -spherify -spheroconic -spherocrystal -spherograph -spheroidal -spheroidally -spheroidic -spheroidical -spheroidically -spheroidicity -spheroidism -spheroidity -spheroidize -spheromere -spherometer -spheroquartic -spherula -spherular -spherulate -spherule -spherulite -spherulitic -spherulitize -sphery -spheterize -sphexide -sphincter -sphincteral -sphincteralgia -sphincterate -sphincterectomy -sphincterial -sphincteric -sphincterismus -sphincteroscope -sphincteroscopy -sphincterotomy -sphindid -sphingal -sphinges -sphingid -sphingiform -sphingine -sphingoid -sphingometer -sphingomyelin -sphingosine -sphinx -sphinxian -sphinxianness -sphinxlike -sphragide -sphragistic -sphragistics -sphygmia -sphygmic -sphygmochronograph -sphygmodic -sphygmogram -sphygmograph -sphygmographic -sphygmography -sphygmoid -sphygmology -sphygmomanometer -sphygmomanometric -sphygmomanometry -sphygmometer -sphygmometric -sphygmophone -sphygmophonic -sphygmoscope -sphygmus -sphyraenid -sphyraenoid -spica -spical -spicant -spicate -spicated -spiccato -spice -spiceable -spiceberry -spicebush -spicecake -spiced -spiceful -spicehouse -spiceland -spiceless -spicelike -spicer -spicery -spicewood -spiciferous -spiciform -spicigerous -spicilege -spicily -spiciness -spicing -spick -spicket -spickle -spicknel -spicose -spicosity -spicous -spicousness -spicula -spiculae -spicular -spiculate -spiculated -spiculation -spicule -spiculiferous -spiculiform -spiculigenous -spiculigerous -spiculofiber -spiculose -spiculous -spiculum -spiculumamoris -spicy -spider -spidered -spiderflower -spiderish -spiderless -spiderlike -spiderling -spiderly -spiderweb -spiderwork -spiderwort -spidery -spidger -spied -spiegel -spiegeleisen -spiel -spieler -spier -spiff -spiffed -spiffily -spiffiness -spiffing -spiffy -spiflicate -spiflicated -spiflication -spig -spiggoty -spignet -spigot -spike -spikebill -spiked -spikedness -spikefish -spikehorn -spikelet -spikelike -spikenard -spiker -spiketail -spiketop -spikeweed -spikewise -spikily -spikiness -spiking -spiky -spile -spilehole -spiler -spileworm -spilikin -spiling -spilite -spilitic -spill -spillage -spiller -spillet -spillproof -spillway -spilly -spiloma -spilosite -spilt -spilth -spilus -spin -spina -spinacene -spinaceous -spinach -spinachlike -spinae -spinage -spinal -spinales -spinalis -spinally -spinate -spinder -spindlage -spindle -spindleage -spindled -spindleful -spindlehead -spindlelegs -spindlelike -spindler -spindleshanks -spindletail -spindlewise -spindlewood -spindleworm -spindliness -spindling -spindly -spindrift -spine -spinebill -spinebone -spined -spinel -spineless -spinelessly -spinelessness -spinelet -spinelike -spinescence -spinescent -spinet -spinetail -spingel -spinibulbar -spinicarpous -spinicerebellar -spinidentate -spiniferous -spinifex -spiniform -spinifugal -spinigerous -spinigrade -spininess -spinipetal -spinitis -spinituberculate -spink -spinnable -spinnaker -spinner -spinneret -spinnerular -spinnerule -spinnery -spinney -spinning -spinningly -spinobulbar -spinocarpous -spinocerebellar -spinogalvanization -spinoglenoid -spinoid -spinomuscular -spinoneural -spinoperipheral -spinose -spinosely -spinoseness -spinosity -spinosodentate -spinosodenticulate -spinosotubercular -spinosotuberculate -spinosympathetic -spinotectal -spinothalamic -spinotuberculous -spinous -spinousness -spinster -spinsterdom -spinsterhood -spinsterial -spinsterish -spinsterishly -spinsterism -spinsterlike -spinsterly -spinsterous -spinstership -spinstress -spintext -spinthariscope -spinthariscopic -spintherism -spinulate -spinulation -spinule -spinulescent -spinuliferous -spinuliform -spinulose -spinulosely -spinulosociliate -spinulosodentate -spinulosodenticulate -spinulosogranulate -spinulososerrate -spinulous -spiny -spionid -spiracle -spiracula -spiracular -spiraculate -spiraculiferous -spiraculiform -spiraculum -spiral -spirale -spiraled -spiraliform -spiralism -spirality -spiralization -spiralize -spirally -spiraloid -spiraltail -spiralwise -spiran -spirant -spiranthic -spiranthy -spirantic -spirantize -spiraster -spirate -spirated -spiration -spire -spirea -spired -spiregrass -spireless -spirelet -spireme -spirepole -spireward -spirewise -spiricle -spiriferid -spiriferoid -spiriferous -spiriform -spirignath -spirignathous -spirilla -spirillaceous -spirillar -spirillolysis -spirillosis -spirillotropic -spirillotropism -spirillum -spiring -spirit -spiritally -spiritdom -spirited -spiritedly -spiritedness -spiriter -spiritful -spiritfully -spiritfulness -spirithood -spiriting -spiritism -spiritist -spiritistic -spiritize -spiritland -spiritleaf -spiritless -spiritlessly -spiritlessness -spiritlike -spiritmonger -spiritous -spiritrompe -spiritsome -spiritual -spiritualism -spiritualist -spiritualistic -spiritualistically -spirituality -spiritualization -spiritualize -spiritualizer -spiritually -spiritualness -spiritualship -spiritualty -spirituosity -spirituous -spirituously -spirituousness -spiritus -spiritweed -spirity -spirivalve -spirket -spirketing -spirling -spiro -spirobranchiate -spirochaetal -spirochetal -spirochete -spirochetemia -spirochetic -spirocheticidal -spirocheticide -spirochetosis -spirochetotic -spirogram -spirograph -spirographidin -spirographin -spiroid -spiroloculine -spirometer -spirometric -spirometrical -spirometry -spiropentane -spiroscope -spirous -spirt -spirulate -spiry -spise -spissated -spissitude -spit -spital -spitball -spitballer -spitbox -spitchcock -spite -spiteful -spitefully -spitefulness -spiteless -spiteproof -spitfire -spitful -spithamai -spithame -spitish -spitpoison -spitscocked -spitstick -spitted -spitten -spitter -spitting -spittle -spittlefork -spittlestaff -spittoon -spitz -spitzkop -spiv -spivery -spizzerinctum -splachnaceous -splachnoid -splacknuck -splairge -splanchnapophysial -splanchnapophysis -splanchnectopia -splanchnemphraxis -splanchnesthesia -splanchnesthetic -splanchnic -splanchnoblast -splanchnocoele -splanchnoderm -splanchnodiastasis -splanchnodynia -splanchnographer -splanchnographical -splanchnography -splanchnolith -splanchnological -splanchnologist -splanchnology -splanchnomegalia -splanchnomegaly -splanchnopathy -splanchnopleural -splanchnopleure -splanchnopleuric -splanchnoptosia -splanchnoptosis -splanchnosclerosis -splanchnoscopy -splanchnoskeletal -splanchnoskeleton -splanchnosomatic -splanchnotomical -splanchnotomy -splanchnotribe -splash -splashboard -splashed -splasher -splashiness -splashing -splashingly -splashproof -splashy -splat -splatch -splatcher -splatchy -splathering -splatter -splatterdash -splatterdock -splatterer -splatterfaced -splatterwork -splay -splayed -splayer -splayfoot -splayfooted -splaymouth -splaymouthed -spleen -spleenful -spleenfully -spleenish -spleenishly -spleenishness -spleenless -spleenwort -spleeny -spleet -spleetnew -splenadenoma -splenalgia -splenalgic -splenalgy -splenatrophia -splenatrophy -splenauxe -splenculus -splendacious -splendaciously -splendaciousness -splendent -splendently -splender -splendescent -splendid -splendidly -splendidness -splendiferous -splendiferously -splendiferousness -splendor -splendorous -splendorproof -splendourproof -splenectama -splenectasis -splenectomist -splenectomize -splenectomy -splenectopia -splenectopy -splenelcosis -splenemia -splenemphraxis -spleneolus -splenepatitis -splenetic -splenetical -splenetically -splenetive -splenial -splenic -splenical -splenicterus -splenification -spleniform -splenitis -splenitive -splenium -splenius -splenization -splenoblast -splenocele -splenoceratosis -splenocleisis -splenocolic -splenocyte -splenodiagnosis -splenodynia -splenography -splenohemia -splenoid -splenolaparotomy -splenology -splenolymph -splenolymphatic -splenolysin -splenolysis -splenoma -splenomalacia -splenomedullary -splenomegalia -splenomegalic -splenomegaly -splenomyelogenous -splenoncus -splenonephric -splenopancreatic -splenoparectama -splenoparectasis -splenopathy -splenopexia -splenopexis -splenopexy -splenophrenic -splenopneumonia -splenoptosia -splenoptosis -splenorrhagia -splenorrhaphy -splenotomy -splenotoxin -splenotyphoid -splenulus -splenunculus -splet -spleuchan -splice -spliceable -splicer -splicing -splinder -spline -splineway -splint -splintage -splinter -splinterd -splinterless -splinternew -splinterproof -splintery -splintwood -splinty -split -splitbeak -splitfinger -splitfruit -splitmouth -splitnew -splitsaw -splittail -splitten -splitter -splitting -splitworm -splodge -splodgy -splore -splosh -splotch -splotchily -splotchiness -splotchy -splother -splunge -splurge -splurgily -splurgy -splurt -spluther -splutter -splutterer -spoach -spode -spodiosite -spodium -spodogenic -spodogenous -spodomancy -spodomantic -spodumene -spoffish -spoffle -spoffy -spogel -spoil -spoilable -spoilage -spoilation -spoiled -spoiler -spoilfive -spoilful -spoiling -spoilless -spoilment -spoilsman -spoilsmonger -spoilsport -spoilt -spoke -spokeless -spoken -spokeshave -spokesman -spokesmanship -spokester -spokeswoman -spokeswomanship -spokewise -spoky -spole -spolia -spoliarium -spoliary -spoliate -spoliation -spoliator -spoliatory -spolium -spondaic -spondaical -spondaize -spondean -spondee -spondiac -spondulics -spondyl -spondylalgia -spondylarthritis -spondylarthrocace -spondylexarthrosis -spondylic -spondylid -spondylioid -spondylitic -spondylitis -spondylium -spondylizema -spondylocace -spondylodiagnosis -spondylodidymia -spondylodymus -spondyloid -spondylolisthesis -spondylolisthetic -spondylopathy -spondylopyosis -spondyloschisis -spondylosis -spondylosyndesis -spondylotherapeutics -spondylotherapist -spondylotherapy -spondylotomy -spondylous -spondylus -spong -sponge -spongecake -sponged -spongeful -spongeless -spongelet -spongelike -spongeous -spongeproof -sponger -spongewood -spongian -spongicolous -spongiculture -spongiferous -spongiform -spongillid -spongilline -spongily -spongin -sponginblast -sponginblastic -sponginess -sponging -spongingly -spongioblast -spongioblastoma -spongiocyte -spongiolin -spongiopilin -spongioplasm -spongioplasmic -spongiose -spongiosity -spongiousness -spongiozoon -spongoblast -spongoblastic -spongoid -spongology -spongophore -spongy -sponsal -sponsalia -sponsibility -sponsible -sponsing -sponsion -sponsional -sponson -sponsor -sponsorial -sponsorship -sponspeck -spontaneity -spontaneous -spontaneously -spontaneousness -spontoon -spoof -spoofer -spoofery -spoofish -spook -spookdom -spookery -spookily -spookiness -spookish -spookism -spookist -spookological -spookologist -spookology -spooky -spool -spooler -spoolful -spoollike -spoolwood -spoom -spoon -spoonbill -spoondrift -spooner -spoonerism -spooneyism -spooneyly -spooneyness -spoonflower -spoonful -spoonhutch -spoonily -spooniness -spooning -spoonism -spoonless -spoonlike -spoonmaker -spoonmaking -spoonways -spoonwood -spoony -spoonyism -spoor -spoorer -spoot -spor -sporabola -sporaceous -sporades -sporadial -sporadic -sporadical -sporadically -sporadicalness -sporadicity -sporadism -sporadosiderite -sporal -sporange -sporangia -sporangial -sporangidium -sporangiferous -sporangiform -sporangioid -sporangiola -sporangiole -sporangiolum -sporangiophore -sporangiospore -sporangite -sporangium -sporation -spore -spored -sporeformer -sporeforming -sporeling -sporicide -sporid -sporidesm -sporidia -sporidial -sporidiferous -sporidiole -sporidiolum -sporidium -sporiferous -sporification -sporiparity -sporiparous -sporoblast -sporocarp -sporocarpium -sporocyst -sporocystic -sporocystid -sporocyte -sporodochia -sporodochium -sporoduct -sporogenesis -sporogenic -sporogenous -sporogeny -sporogone -sporogonial -sporogonic -sporogonium -sporogony -sporoid -sporologist -sporomycosis -sporont -sporophore -sporophoric -sporophorous -sporophydium -sporophyll -sporophyllary -sporophyllum -sporophyte -sporophytic -sporoplasm -sporosac -sporostegium -sporostrote -sporotrichosis -sporotrichotic -sporous -sporozoal -sporozoan -sporozoic -sporozoite -sporozoon -sporran -sport -sportability -sportable -sportance -sporter -sportful -sportfully -sportfulness -sportily -sportiness -sporting -sportingly -sportive -sportively -sportiveness -sportless -sportling -sportly -sports -sportsman -sportsmanlike -sportsmanliness -sportsmanly -sportsmanship -sportsome -sportswear -sportswoman -sportswomanly -sportswomanship -sportula -sportulae -sporty -sporular -sporulate -sporulation -sporule -sporuliferous -sporuloid -sposh -sposhy -spot -spotless -spotlessly -spotlessness -spotlight -spotlighter -spotlike -spotrump -spotsman -spottable -spotted -spottedly -spottedness -spotteldy -spotter -spottily -spottiness -spotting -spottle -spotty -spoucher -spousage -spousal -spousally -spouse -spousehood -spouseless -spousy -spout -spouter -spoutiness -spouting -spoutless -spoutlike -spoutman -spouty -sprachle -sprack -sprackish -sprackle -sprackly -sprackness -sprad -spraddle -sprag -spragger -spraggly -spraich -sprain -spraint -spraints -sprang -sprangle -sprangly -sprank -sprat -spratter -spratty -sprauchle -sprawl -sprawler -sprawling -sprawlingly -sprawly -spray -sprayboard -sprayer -sprayey -sprayful -sprayfully -sprayless -spraylike -sprayproof -spread -spreadation -spreadboard -spreaded -spreader -spreadhead -spreading -spreadingly -spreadingness -spreadover -spready -spreaghery -spreath -spreckle -spree -spreeuw -spreng -sprent -spret -sprew -sprewl -spridhogue -spried -sprier -spriest -sprig -sprigged -sprigger -spriggy -sprightful -sprightfully -sprightfulness -sprightlily -sprightliness -sprightly -sprighty -spriglet -sprigtail -spring -springal -springald -springboard -springbok -springbuck -springe -springer -springerle -springfinger -springfish -springful -springhaas -springhalt -springhead -springhouse -springily -springiness -springing -springingly -springle -springless -springlet -springlike -springly -springmaker -springmaking -springtail -springtide -springtime -springtrap -springwood -springworm -springwort -springwurzel -springy -sprink -sprinkle -sprinkled -sprinkleproof -sprinkler -sprinklered -sprinkling -sprint -sprinter -sprit -sprite -spritehood -spritsail -sprittail -sprittie -spritty -sproat -sprocket -sprod -sprogue -sproil -sprong -sprose -sprottle -sprout -sproutage -sprouter -sproutful -sprouting -sproutland -sproutling -sprowsy -spruce -sprucely -spruceness -sprucery -sprucification -sprucify -sprue -spruer -sprug -spruiker -spruit -sprung -sprunny -sprunt -spruntly -spry -spryly -spryness -spud -spudder -spuddle -spuddy -spuffle -spug -spuilyie -spuilzie -spuke -spume -spumescence -spumescent -spumiferous -spumification -spumiform -spumone -spumose -spumous -spumy -spun -spung -spunk -spunkie -spunkily -spunkiness -spunkless -spunky -spunny -spur -spurflower -spurgall -spurge -spurgewort -spuriae -spuriosity -spurious -spuriously -spuriousness -spurl -spurless -spurlet -spurlike -spurling -spurmaker -spurmoney -spurn -spurner -spurnpoint -spurnwater -spurproof -spurred -spurrer -spurrial -spurrier -spurrings -spurrite -spurry -spurt -spurter -spurtive -spurtively -spurtle -spurway -spurwing -spurwinged -spurwort -sput -sputa -sputative -sputter -sputterer -sputtering -sputteringly -sputtery -sputum -sputumary -sputumose -sputumous -spy -spyboat -spydom -spyer -spyfault -spyglass -spyhole -spyism -spyproof -spyship -spytower -squab -squabash -squabasher -squabbed -squabbish -squabble -squabbler -squabbling -squabblingly -squabbly -squabby -squacco -squad -squaddy -squadrate -squadrism -squadron -squadrone -squadroned -squail -squailer -squalene -squalid -squalidity -squalidly -squalidness -squaliform -squall -squaller -squallery -squallish -squally -squalm -squalodont -squaloid -squalor -squam -squama -squamaceous -squamae -squamate -squamated -squamatine -squamation -squamatogranulous -squamatotuberculate -squame -squamella -squamellate -squamelliferous -squamelliform -squameous -squamiferous -squamiform -squamify -squamigerous -squamipennate -squamipinnate -squamocellular -squamoepithelial -squamoid -squamomastoid -squamoparietal -squamopetrosal -squamosa -squamosal -squamose -squamosely -squamoseness -squamosis -squamosity -squamosodentated -squamosoimbricated -squamosomaxillary -squamosoparietal -squamosoradiate -squamosotemporal -squamosozygomatic -squamosphenoid -squamosphenoidal -squamotemporal -squamous -squamously -squamousness -squamozygomatic -squamula -squamulae -squamulate -squamulation -squamule -squamuliform -squamulose -squander -squanderer -squanderingly -squandermania -squandermaniac -squantum -squarable -square -squareage -squarecap -squared -squaredly -squareface -squareflipper -squarehead -squarelike -squarely -squareman -squaremouth -squareness -squarer -squaretail -squarewise -squaring -squarish -squarishly -squark -squarrose -squarrosely -squarrous -squarrulose -squarson -squarsonry -squary -squash -squashberry -squasher -squashily -squashiness -squashy -squat -squatarole -squatina -squatinid -squatinoid -squatly -squatment -squatmore -squatness -squattage -squatted -squatter -squatterarchy -squatterdom -squatterproof -squattily -squattiness -squatting -squattingly -squattish -squattocracy -squattocratic -squatty -squatwise -squaw -squawberry -squawbush -squawdom -squawfish -squawflower -squawk -squawker -squawkie -squawking -squawkingly -squawky -squawroot -squawweed -squdge -squdgy -squeak -squeaker -squeakery -squeakily -squeakiness -squeaking -squeakingly -squeaklet -squeakproof -squeaky -squeakyish -squeal -squeald -squealer -squealing -squeam -squeamish -squeamishly -squeamishness -squeamous -squeamy -squeege -squeegee -squeezability -squeezable -squeezableness -squeezably -squeeze -squeezeman -squeezer -squeezing -squeezingly -squeezy -squelch -squelcher -squelchily -squelchiness -squelching -squelchingly -squelchingness -squelchy -squench -squencher -squeteague -squib -squibber -squibbery -squibbish -squiblet -squibling -squid -squiddle -squidge -squidgereen -squidgy -squiffed -squiffer -squiffy -squiggle -squiggly -squilgee -squilgeer -squilla -squillagee -squillery -squillian -squillid -squilloid -squimmidge -squin -squinance -squinancy -squinch -squinny -squinsy -squint -squinted -squinter -squinting -squintingly -squintingness -squintly -squintness -squinty -squirage -squiralty -squire -squirearch -squirearchal -squirearchical -squirearchy -squiredom -squireen -squirehood -squireless -squirelet -squirelike -squireling -squirely -squireocracy -squireship -squiress -squiret -squirewise -squirish -squirism -squirk -squirm -squirminess -squirming -squirmingly -squirmy -squirr -squirrel -squirrelfish -squirrelian -squirreline -squirrelish -squirrellike -squirrelproof -squirreltail -squirt -squirter -squirtiness -squirting -squirtingly -squirtish -squirty -squish -squishy -squit -squitch -squitchy -squitter -squoze -squush -squushy -sraddha -sramana -sri -sruti -ssu -st -staab -stab -stabber -stabbing -stabbingly -stabile -stabilify -stabilist -stabilitate -stability -stabilization -stabilizator -stabilize -stabilizer -stable -stableboy -stableful -stablekeeper -stablelike -stableman -stableness -stabler -stablestand -stableward -stablewards -stabling -stablishment -stably -staboy -stabproof -stabulate -stabulation -stabwort -staccato -stacher -stachydrin -stachydrine -stachyose -stachys -stachyuraceous -stack -stackage -stackencloud -stacker -stackfreed -stackful -stackgarth -stackhousiaceous -stackless -stackman -stackstand -stackyard -stacte -stactometer -stadda -staddle -staddling -stade -stadholder -stadholderate -stadholdership -stadhouse -stadia -stadic -stadimeter -stadiometer -stadion -stadium -stafette -staff -staffed -staffelite -staffer -staffless -staffman -stag -stagbush -stage -stageability -stageable -stageableness -stageably -stagecoach -stagecoaching -stagecraft -staged -stagedom -stagehand -stagehouse -stageland -stagelike -stageman -stager -stagery -stagese -stagewise -stageworthy -stagewright -staggard -staggart -staggarth -stagger -staggerbush -staggerer -staggering -staggeringly -staggers -staggerweed -staggerwort -staggery -staggie -staggy -staghead -staghorn -staghound -staghunt -staghunter -staghunting -stagiary -stagily -staginess -staging -staglike -stagmometer -stagnance -stagnancy -stagnant -stagnantly -stagnantness -stagnate -stagnation -stagnatory -stagnature -stagnicolous -stagnize -stagnum -stagskin -stagworm -stagy -staia -staid -staidly -staidness -stain -stainability -stainable -stainableness -stainably -stainer -stainful -stainierite -staining -stainless -stainlessly -stainlessness -stainproof -staio -stair -stairbeak -stairbuilder -stairbuilding -staircase -staired -stairhead -stairless -stairlike -stairstep -stairway -stairwise -stairwork -stairy -staith -staithman -staiver -stake -stakehead -stakeholder -stakemaster -staker -stakerope -stalactic -stalactical -stalactiform -stalactital -stalactite -stalactited -stalactitic -stalactitical -stalactitically -stalactitiform -stalactitious -stalagma -stalagmite -stalagmitic -stalagmitical -stalagmitically -stalagmometer -stalagmometric -stalagmometry -stale -stalely -stalemate -staleness -staling -stalk -stalkable -stalked -stalker -stalkily -stalkiness -stalking -stalkingly -stalkless -stalklet -stalklike -stalko -stalky -stall -stallage -stallar -stallboard -stallenger -staller -stallership -stalling -stallion -stallionize -stallman -stallment -stalwart -stalwartism -stalwartize -stalwartly -stalwartness -stam -stambha -stambouline -stamen -stamened -stamin -stamina -staminal -staminate -stamineal -stamineous -staminiferous -staminigerous -staminode -staminodium -staminody -stammel -stammer -stammerer -stammering -stammeringly -stammeringness -stammerwort -stamnos -stamp -stampable -stampage -stampedable -stampede -stampeder -stampedingly -stampee -stamper -stampery -stamphead -stamping -stample -stampless -stampman -stampsman -stampweed -stance -stanch -stanchable -stanchel -stancheled -stancher -stanchion -stanchless -stanchly -stanchness -stand -standage -standard -standardbred -standardizable -standardization -standardize -standardized -standardizer -standardwise -standee -standel -standelwelks -standelwort -stander -standergrass -standerwort -standfast -standing -standish -standoff -standoffish -standoffishness -standout -standpat -standpatism -standpatter -standpipe -standpoint -standpost -standstill -stane -stanechat -stang -stanhope -stanine -stanjen -stank -stankie -stannane -stannary -stannate -stannator -stannel -stanner -stannery -stannic -stannide -stanniferous -stannite -stanno -stannotype -stannous -stannoxyl -stannum -stannyl -stanza -stanzaed -stanzaic -stanzaical -stanzaically -stanze -stap -stapedectomy -stapedial -stapediform -stapediovestibular -stapedius -stapelia -stapes -staphisagria -staphyle -staphyleaceous -staphylectomy -staphyledema -staphylematoma -staphylic -staphyline -staphylinic -staphylinid -staphylinideous -staphylion -staphylitis -staphyloangina -staphylococcal -staphylococci -staphylococcic -staphylococcus -staphylodermatitis -staphylodialysis -staphyloedema -staphylohemia -staphylolysin -staphyloma -staphylomatic -staphylomatous -staphylomycosis -staphyloncus -staphyloplastic -staphyloplasty -staphyloptosia -staphyloptosis -staphyloraphic -staphylorrhaphic -staphylorrhaphy -staphyloschisis -staphylosis -staphylotome -staphylotomy -staphylotoxin -staple -stapled -stapler -staplewise -stapling -star -starblind -starbloom -starboard -starbolins -starbright -starch -starchboard -starched -starchedly -starchedness -starcher -starchflower -starchily -starchiness -starchless -starchlike -starchly -starchmaker -starchmaking -starchman -starchness -starchroot -starchworks -starchwort -starchy -starcraft -stardom -stare -staree -starer -starets -starfish -starflower -starfruit -starful -stargaze -stargazer -stargazing -staring -staringly -stark -starken -starkly -starkness -starky -starless -starlessly -starlessness -starlet -starlight -starlighted -starlights -starlike -starling -starlit -starlite -starlitten -starmonger -starn -starnel -starnie -starnose -starost -starosta -starosty -starred -starrily -starriness -starring -starringly -starry -starshake -starshine -starship -starshoot -starshot -starstone -starstroke -start -starter -startful -startfulness -starthroat -starting -startingly -startish -startle -startler -startling -startlingly -startlingness -startlish -startlishness -startly -startor -starty -starvation -starve -starveacre -starved -starvedly -starveling -starver -starvy -starward -starwise -starworm -starwort -stary -stases -stash -stashie -stasidion -stasimetric -stasimon -stasimorphy -stasiphobia -stasis -stassfurtite -statable -statal -statant -statcoulomb -state -statecraft -stated -statedly -stateful -statefully -statefulness -statehood -stateless -statelet -statelich -statelily -stateliness -stately -statement -statemonger -statequake -stater -stateroom -statesboy -stateside -statesider -statesman -statesmanese -statesmanlike -statesmanly -statesmanship -statesmonger -stateswoman -stateway -statfarad -stathmoi -stathmos -static -statical -statically -staticproof -statics -station -stational -stationarily -stationariness -stationary -stationer -stationery -stationman -stationmaster -statiscope -statism -statist -statistic -statistical -statistically -statistician -statisticize -statistics -statistology -stative -statoblast -statocracy -statocyst -statolatry -statolith -statolithic -statometer -stator -statoreceptor -statorhab -statoscope -statospore -statuarism -statuarist -statuary -statue -statuecraft -statued -statueless -statuelike -statuesque -statuesquely -statuesqueness -statuette -stature -statured -status -statutable -statutableness -statutably -statutary -statute -statutorily -statutory -statvolt -staucher -stauk -staumer -staun -staunch -staunchable -staunchly -staunchness -staup -stauracin -stauraxonia -stauraxonial -staurion -staurolatry -staurolite -staurolitic -staurology -stauromedusan -stauropegial -stauropegion -stauroscope -stauroscopic -stauroscopically -staurotide -stauter -stave -staveable -staveless -staver -stavers -staverwort -stavesacre -stavewise -stavewood -staving -stavrite -staw -stawn -staxis -stay -stayable -stayed -stayer -staylace -stayless -staylessness -staymaker -staymaking -staynil -stays -staysail -stayship -stchi -stead -steadfast -steadfastly -steadfastness -steadier -steadily -steadiment -steadiness -steading -steadman -steady -steadying -steadyingly -steadyish -steak -steal -stealability -stealable -stealage -stealed -stealer -stealing -stealingly -stealth -stealthful -stealthfully -stealthily -stealthiness -stealthless -stealthlike -stealthwise -stealthy -stealy -steam -steamboat -steamboating -steamboatman -steamcar -steamer -steamerful -steamerless -steamerload -steamily -steaminess -steaming -steamless -steamlike -steampipe -steamproof -steamship -steamtight -steamtightness -steamy -stean -steaning -steapsin -stearate -stearic -steariform -stearin -stearolactone -stearone -stearoptene -stearrhea -stearyl -steatin -steatite -steatitic -steatocele -steatogenous -steatolysis -steatolytic -steatoma -steatomatous -steatopathic -steatopyga -steatopygia -steatopygic -steatopygous -steatorrhea -steatosis -stech -stechados -steckling -steddle -steed -steedless -steedlike -steek -steekkan -steekkannen -steel -steeler -steelhead -steelhearted -steelification -steelify -steeliness -steeling -steelless -steellike -steelmaker -steelmaking -steelproof -steelware -steelwork -steelworker -steelworks -steely -steelyard -steen -steenboc -steenbock -steenbok -steenkirk -steenstrupine -steenth -steep -steepdown -steepen -steeper -steepgrass -steepish -steeple -steeplebush -steeplechase -steeplechaser -steeplechasing -steepled -steepleless -steeplelike -steepletop -steeply -steepness -steepweed -steepwort -steepy -steer -steerability -steerable -steerage -steerageway -steerer -steering -steeringly -steerling -steerman -steermanship -steersman -steerswoman -steeve -steevely -steever -steeving -steg -steganogram -steganographical -steganographist -steganography -steganophthalmate -steganophthalmatous -steganopod -steganopodan -steganopodous -stegnosis -stegnotic -stegocarpous -stegocephalian -stegocephalous -stegodont -stegodontine -stegosaur -stegosaurian -stegosauroid -steid -steigh -stein -steinbok -steinful -steinkirk -stekan -stela -stelae -stelai -stelar -stele -stell -stella -stellar -stellary -stellate -stellated -stellately -stellature -stelleridean -stellerine -stelliferous -stellification -stelliform -stellify -stelling -stellionate -stelliscript -stellite -stellular -stellularly -stellulate -stelography -stem -stema -stemhead -stemless -stemlet -stemlike -stemma -stemmata -stemmatiform -stemmatous -stemmed -stemmer -stemmery -stemming -stemmy -stemonaceous -stemple -stempost -stemson -stemwards -stemware -sten -stenar -stench -stenchel -stenchful -stenching -stenchion -stenchy -stencil -stenciler -stencilmaker -stencilmaking -stend -steng -stengah -stenion -steno -stenobathic -stenobenthic -stenobragmatic -stenobregma -stenocardia -stenocardiac -stenocephalia -stenocephalic -stenocephalous -stenocephaly -stenochoria -stenochrome -stenochromy -stenocoriasis -stenocranial -stenocrotaphia -stenog -stenogastric -stenogastry -stenograph -stenographer -stenographic -stenographical -stenographically -stenographist -stenography -stenohaline -stenometer -stenopaic -stenopetalous -stenophile -stenophyllous -stenorhyncous -stenosed -stenosepalous -stenosis -stenosphere -stenostomatous -stenostomia -stenotelegraphy -stenothermal -stenothorax -stenotic -stenotype -stenotypic -stenotypist -stenotypy -stent -stenter -stenterer -stenton -stentorian -stentorianly -stentorine -stentorious -stentoriously -stentoriousness -stentoronic -stentorophonic -stentrel -step -stepaunt -stepbairn -stepbrother -stepbrotherhood -stepchild -stepdame -stepdaughter -stepfather -stepfatherhood -stepfatherly -stepgrandchild -stepgrandfather -stepgrandmother -stepgrandson -stephane -stephanial -stephanic -stephanion -stephanite -stephanome -stephanos -stephanotis -stepladder -stepless -steplike -stepminnie -stepmother -stepmotherhood -stepmotherless -stepmotherliness -stepmotherly -stepnephew -stepniece -stepparent -steppe -stepped -steppeland -stepper -stepping -steppingstone -steprelation -steprelationship -stepsire -stepsister -stepson -stepstone -stept -stepuncle -stepway -stepwise -steradian -stercobilin -stercolin -stercophagic -stercophagous -stercoraceous -stercoral -stercorarious -stercorary -stercorate -stercoration -stercorean -stercoremia -stercoreous -stercoricolous -stercorite -stercorol -stercorous -stercovorous -sterculiaceous -sterculiad -stere -stereagnosis -sterelminthic -sterelminthous -stereo -stereobate -stereobatic -stereoblastula -stereocamera -stereocampimeter -stereochemic -stereochemical -stereochemically -stereochemistry -stereochromatic -stereochromatically -stereochrome -stereochromic -stereochromically -stereochromy -stereocomparagraph -stereocomparator -stereoelectric -stereofluoroscopic -stereofluoroscopy -stereogastrula -stereognosis -stereognostic -stereogoniometer -stereogram -stereograph -stereographer -stereographic -stereographical -stereographically -stereography -stereoisomer -stereoisomeric -stereoisomerical -stereoisomeride -stereoisomerism -stereomatrix -stereome -stereomer -stereomeric -stereomerical -stereomerism -stereometer -stereometric -stereometrical -stereometrically -stereometry -stereomicrometer -stereomonoscope -stereoneural -stereophantascope -stereophonic -stereophony -stereophotogrammetry -stereophotograph -stereophotographic -stereophotography -stereophotomicrograph -stereophotomicrography -stereophysics -stereopicture -stereoplanigraph -stereoplanula -stereoplasm -stereoplasma -stereoplasmic -stereopsis -stereoptician -stereopticon -stereoradiograph -stereoradiography -stereornithic -stereoroentgenogram -stereoroentgenography -stereoscope -stereoscopic -stereoscopically -stereoscopism -stereoscopist -stereoscopy -stereospondylous -stereostatic -stereostatics -stereotactic -stereotactically -stereotaxis -stereotelemeter -stereotelescope -stereotomic -stereotomical -stereotomist -stereotomy -stereotropic -stereotropism -stereotypable -stereotype -stereotyped -stereotyper -stereotypery -stereotypic -stereotypical -stereotyping -stereotypist -stereotypographer -stereotypography -stereotypy -sterhydraulic -steri -steric -sterically -sterics -steride -sterigma -sterigmata -sterigmatic -sterile -sterilely -sterileness -sterilisable -sterility -sterilizability -sterilizable -sterilization -sterilize -sterilizer -sterin -sterk -sterlet -sterling -sterlingly -sterlingness -stern -sterna -sternad -sternage -sternal -sternalis -sternbergite -sterncastle -sterneber -sternebra -sternebrae -sternebral -sterned -sternforemost -sternite -sternitic -sternly -sternman -sternmost -sternness -sternoclavicular -sternocleidomastoid -sternoclidomastoid -sternocoracoid -sternocostal -sternofacial -sternofacialis -sternoglossal -sternohumeral -sternohyoid -sternohyoidean -sternomancy -sternomastoid -sternomaxillary -sternonuchal -sternopericardiac -sternopericardial -sternoscapular -sternothere -sternothyroid -sternotracheal -sternotribe -sternovertebral -sternoxiphoid -sternpost -sternson -sternum -sternutation -sternutative -sternutator -sternutatory -sternward -sternway -sternways -sternworks -stero -steroid -sterol -sterrinck -stert -stertor -stertorious -stertoriously -stertoriousness -stertorous -stertorously -stertorousness -sterve -stet -stetch -stetharteritis -stethogoniometer -stethograph -stethographic -stethokyrtograph -stethometer -stethometric -stethometry -stethoparalysis -stethophone -stethophonometer -stethoscope -stethoscopic -stethoscopical -stethoscopically -stethoscopist -stethoscopy -stethospasm -stevedorage -stevedore -stevedoring -stevel -steven -stevia -stew -stewable -steward -stewardess -stewardly -stewardry -stewardship -stewartry -stewarty -stewed -stewpan -stewpond -stewpot -stewy -stey -sthenia -sthenic -sthenochire -stib -stibbler -stibblerig -stibethyl -stibial -stibialism -stibiate -stibiated -stibic -stibiconite -stibine -stibious -stibium -stibnite -stibonium -sticcado -stich -sticharion -sticheron -stichic -stichically -stichid -stichidium -stichomancy -stichometric -stichometrical -stichometrically -stichometry -stichomythic -stichomythy -stick -stickability -stickable -stickadore -stickadove -stickage -stickball -sticked -sticker -stickers -stickfast -stickful -stickily -stickiness -sticking -stickit -stickle -stickleaf -stickleback -stickler -stickless -sticklike -stickling -stickly -stickpin -sticks -stickseed -sticksmanship -sticktail -sticktight -stickum -stickwater -stickweed -stickwork -sticky -stictiform -stid -stiddy -stife -stiff -stiffen -stiffener -stiffening -stiffhearted -stiffish -stiffleg -stifflike -stiffly -stiffneck -stiffness -stiffrump -stifftail -stifle -stifledly -stifler -stifling -stiflingly -stigma -stigmai -stigmal -stigmaria -stigmarian -stigmarioid -stigmasterol -stigmata -stigmatal -stigmatic -stigmatical -stigmatically -stigmaticalness -stigmatiferous -stigmatiform -stigmatism -stigmatist -stigmatization -stigmatize -stigmatizer -stigmatoid -stigmatose -stigme -stigmeology -stigmonose -stigonomancy -stilbene -stilbestrol -stilbite -stilboestrol -stile -stileman -stilet -stiletto -stilettolike -still -stillage -stillatitious -stillatory -stillbirth -stillborn -stiller -stillhouse -stillicide -stillicidium -stilliform -stilling -stillion -stillish -stillman -stillness -stillroom -stillstand -stilly -stilpnomelane -stilpnosiderite -stilt -stiltbird -stilted -stilter -stiltify -stiltiness -stiltish -stiltlike -stilty -stim -stime -stimpart -stimpert -stimulability -stimulable -stimulance -stimulancy -stimulant -stimulate -stimulatingly -stimulation -stimulative -stimulator -stimulatory -stimulatress -stimulatrix -stimuli -stimulogenous -stimulus -stimy -stine -sting -stingaree -stingareeing -stingbull -stinge -stinger -stingfish -stingily -stinginess -stinging -stingingly -stingingness -stingless -stingo -stingproof -stingray -stingtail -stingy -stink -stinkard -stinkardly -stinkball -stinkberry -stinkbird -stinkbug -stinkbush -stinkdamp -stinker -stinkhorn -stinking -stinkingly -stinkingness -stinkpot -stinkstone -stinkweed -stinkwood -stinkwort -stint -stinted -stintedly -stintedness -stinter -stintingly -stintless -stinty -stion -stionic -stipe -stiped -stipel -stipellate -stipend -stipendial -stipendiarian -stipendiary -stipendiate -stipendium -stipendless -stipes -stipiform -stipitate -stipitiform -stipiture -stippen -stipple -stippled -stippler -stippling -stipply -stipula -stipulable -stipulaceous -stipulae -stipular -stipulary -stipulate -stipulation -stipulator -stipulatory -stipule -stipuled -stipuliferous -stipuliform -stir -stirabout -stirk -stirless -stirlessly -stirlessness -stirp -stirpicultural -stirpiculture -stirpiculturist -stirps -stirra -stirrable -stirrage -stirrer -stirring -stirringly -stirrup -stirrupless -stirruplike -stirrupwise -stitch -stitchbird -stitchdown -stitcher -stitchery -stitching -stitchlike -stitchwhile -stitchwork -stitchwort -stite -stith -stithy -stive -stiver -stivy -stoa -stoach -stoat -stoater -stob -stocah -stoccado -stoccata -stochastic -stochastical -stochastically -stock -stockade -stockannet -stockbow -stockbreeder -stockbreeding -stockbroker -stockbrokerage -stockbroking -stockcar -stocker -stockfather -stockfish -stockholder -stockholding -stockhouse -stockily -stockiness -stockinet -stocking -stockinger -stockingless -stockish -stockishly -stockishness -stockjobber -stockjobbery -stockjobbing -stockjudging -stockkeeper -stockkeeping -stockless -stocklike -stockmaker -stockmaking -stockman -stockowner -stockpile -stockpot -stockproof -stockrider -stockriding -stocks -stockstone -stocktaker -stocktaking -stockwork -stockwright -stocky -stockyard -stod -stodge -stodger -stodgery -stodgily -stodginess -stodgy -stoechas -stoep -stof -stoff -stog -stoga -stogie -stogy -stoic -stoical -stoically -stoicalness -stoicharion -stoichiological -stoichiology -stoichiometric -stoichiometrical -stoichiometrically -stoichiometry -stoicism -stoke -stokehold -stokehole -stoker -stokerless -stokesite -stola -stolae -stole -stoled -stolelike -stolen -stolenly -stolenness -stolenwise -stolewise -stolid -stolidity -stolidly -stolidness -stolist -stolkjaerre -stollen -stolon -stolonate -stoloniferous -stoloniferously -stolonlike -stolzite -stoma -stomacace -stomach -stomachable -stomachal -stomacher -stomachful -stomachfully -stomachfulness -stomachic -stomachically -stomachicness -stomaching -stomachless -stomachlessness -stomachy -stomapod -stomapodiform -stomapodous -stomata -stomatal -stomatalgia -stomate -stomatic -stomatiferous -stomatitic -stomatitis -stomatocace -stomatodaeal -stomatodaeum -stomatode -stomatodeum -stomatodynia -stomatogastric -stomatograph -stomatography -stomatolalia -stomatologic -stomatological -stomatologist -stomatology -stomatomalacia -stomatomenia -stomatomy -stomatomycosis -stomatonecrosis -stomatopathy -stomatophorous -stomatoplastic -stomatoplasty -stomatopod -stomatopodous -stomatorrhagia -stomatoscope -stomatoscopy -stomatose -stomatosepsis -stomatotomy -stomatotyphus -stomatous -stomenorrhagia -stomium -stomodaea -stomodaeal -stomodaeum -stomoxys -stomp -stomper -stonable -stond -stone -stoneable -stonebird -stonebiter -stoneboat -stonebow -stonebrash -stonebreak -stonebrood -stonecast -stonechat -stonecraft -stonecrop -stonecutter -stoned -stonedamp -stonefish -stonegale -stonegall -stonehand -stonehatch -stonehead -stonehearted -stonelayer -stonelaying -stoneless -stonelessness -stonelike -stoneman -stonemason -stonemasonry -stonen -stonepecker -stoner -stoneroot -stoneseed -stoneshot -stonesmatch -stonesmich -stonesmitch -stonesmith -stonewall -stonewaller -stonewally -stoneware -stoneweed -stonewise -stonewood -stonework -stoneworker -stonewort -stoneyard -stong -stonied -stonifiable -stonify -stonily -stoniness -stoning -stonish -stonishment -stonker -stony -stonyhearted -stonyheartedly -stonyheartedness -stood -stooded -stooden -stoof -stooge -stook -stooker -stookie -stool -stoolball -stoollike -stoon -stoond -stoop -stooper -stoopgallant -stooping -stoopingly -stoory -stoot -stoothing -stop -stopa -stopback -stopblock -stopboard -stopcock -stope -stoper -stopgap -stophound -stoping -stopless -stoplessness -stopover -stoppability -stoppable -stoppableness -stoppably -stoppage -stopped -stopper -stopperless -stoppeur -stopping -stoppit -stopple -stopwater -stopwork -storable -storage -storax -store -storeen -storehouse -storehouseman -storekeep -storekeeper -storekeeping -storeman -storer -storeroom -storeship -storesman -storge -storiate -storiation -storied -storier -storiette -storify -storiological -storiologist -storiology -stork -storken -storkish -storklike -storkling -storkwise -storm -stormable -stormbird -stormbound -stormcock -stormer -stormful -stormfully -stormfulness -stormily -storminess -storming -stormingly -stormish -stormless -stormlessness -stormlike -stormproof -stormward -stormwind -stormwise -stormy -story -storybook -storyless -storymaker -storymonger -storyteller -storytelling -storywise -storywork -stosh -stoss -stosston -stot -stotinka -stotter -stotterel -stoun -stound -stoundmeal -stoup -stoupful -stour -stouring -stourliness -stourness -stoury -stoush -stout -stouten -stouth -stouthearted -stoutheartedly -stoutheartedness -stoutish -stoutly -stoutness -stoutwood -stouty -stove -stovebrush -stoveful -stovehouse -stoveless -stovemaker -stovemaking -stoveman -stoven -stovepipe -stover -stovewood -stow -stowable -stowage -stowaway -stowbord -stowbordman -stowce -stowdown -stower -stowing -stownlins -stowwood -stra -strabism -strabismal -strabismally -strabismic -strabismical -strabismometer -strabismometry -strabismus -strabometer -strabometry -strabotome -strabotomy -strack -strackling -stract -strad -stradametrical -straddle -straddleback -straddlebug -straddler -straddleways -straddlewise -straddling -straddlingly -strade -stradine -stradiot -stradl -stradld -stradlings -strae -strafe -strafer -strag -straggle -straggler -straggling -stragglingly -straggly -stragular -stragulum -straight -straightabout -straightaway -straightedge -straighten -straightener -straightforward -straightforwardly -straightforwardness -straightforwards -straighthead -straightish -straightly -straightness -straighttail -straightup -straightwards -straightway -straightways -straightwise -straik -strain -strainable -strainableness -strainably -strained -strainedly -strainedness -strainer -strainerman -straining -strainingly -strainless -strainlessly -strainproof -strainslip -straint -strait -straiten -straitlacedness -straitlacing -straitly -straitness -straitsman -straitwork -strake -straked -straky -stram -stramash -stramazon -stramineous -stramineously -strammel -strammer -stramonium -stramony -stramp -strand -strandage -strander -stranding -strandless -strandward -strang -strange -strangeling -strangely -strangeness -stranger -strangerdom -strangerhood -strangerlike -strangership -strangerwise -strangle -strangleable -stranglement -strangler -strangles -strangletare -strangleweed -strangling -stranglingly -strangulable -strangulate -strangulation -strangulative -strangulatory -strangullion -strangurious -strangury -stranner -strany -strap -straphang -straphanger -straphead -strapless -straplike -strappable -strappado -strappan -strapped -strapper -strapping -strapple -strapwork -strapwort -strass -strata -stratagem -stratagematic -stratagematical -stratagematically -stratagematist -stratagemical -stratagemically -stratal -stratameter -stratege -strategetic -strategetics -strategi -strategian -strategic -strategical -strategically -strategics -strategist -strategize -strategos -strategy -strath -strathspey -strati -stratic -straticulate -straticulation -stratification -stratified -stratiform -stratify -stratigrapher -stratigraphic -stratigraphical -stratigraphically -stratigraphist -stratigraphy -stratlin -stratochamber -stratocracy -stratocrat -stratocratic -stratographic -stratographical -stratographically -stratography -stratonic -stratopedarch -stratoplane -stratose -stratosphere -stratospheric -stratospherical -stratotrainer -stratous -stratum -stratus -straucht -strauchten -stravage -strave -straw -strawberry -strawberrylike -strawbill -strawboard -strawbreadth -strawen -strawer -strawflower -strawfork -strawless -strawlike -strawman -strawmote -strawsmall -strawsmear -strawstack -strawstacker -strawwalker -strawwork -strawworm -strawy -strawyard -stray -strayaway -strayer -strayling -stre -streahte -streak -streaked -streakedly -streakedness -streaker -streakily -streakiness -streaklike -streakwise -streaky -stream -streamer -streamful -streamhead -streaminess -streaming -streamingly -streamless -streamlet -streamlike -streamline -streamlined -streamliner -streamling -streamside -streamward -streamway -streamwort -streamy -streck -streckly -stree -streek -streel -streeler -streen -streep -street -streetage -streetcar -streetful -streetless -streetlet -streetlike -streets -streetside -streetwalker -streetwalking -streetward -streetway -streetwise -streite -streke -strelitzi -streltzi -stremma -stremmatograph -streng -strengite -strength -strengthen -strengthener -strengthening -strengtheningly -strengthful -strengthfulness -strengthily -strengthless -strengthlessly -strengthlessness -strengthy -strent -strenth -strenuity -strenuosity -strenuous -strenuously -strenuousness -strepen -strepent -strepera -streperous -strephonade -strephosymbolia -strepitant -strepitantly -strepitation -strepitous -strepor -strepsiceros -strepsinema -strepsipteral -strepsipteran -strepsipteron -strepsipterous -strepsis -strepsitene -streptaster -streptobacilli -streptobacillus -streptococcal -streptococci -streptococcic -streptococcus -streptolysin -streptomycin -streptoneural -streptoneurous -streptosepticemia -streptothricial -streptothricin -streptothricosis -streptotrichal -streptotrichosis -stress -stresser -stressful -stressfully -stressless -stresslessness -stret -stretch -stretchable -stretchberry -stretcher -stretcherman -stretchiness -stretchneck -stretchproof -stretchy -stretman -strette -stretti -stretto -strew -strewage -strewer -strewment -strewn -strey -streyne -stria -striae -strial -striatal -striate -striated -striation -striatum -striature -strich -striche -strick -stricken -strickenly -strickenness -stricker -strickle -strickler -strickless -strict -striction -strictish -strictly -strictness -stricture -strictured -strid -stridden -striddle -stride -strideleg -stridelegs -stridence -stridency -strident -stridently -strider -strideways -stridhan -stridhana -stridhanum -stridingly -stridling -stridlins -stridor -stridulant -stridulate -stridulation -stridulator -stridulatory -stridulent -stridulous -stridulously -stridulousness -strife -strifeful -strifeless -strifemaker -strifemaking -strifemonger -strifeproof -striffen -strig -striga -strigae -strigal -strigate -striggle -stright -strigil -strigilate -strigilation -strigilator -strigiles -strigilis -strigillose -strigilous -strigine -strigose -strigous -strigovite -strigulose -strike -strikeboat -strikebreaker -strikebreaking -strikeless -striker -striking -strikingly -strikingness -strind -string -stringboard -stringcourse -stringed -stringency -stringene -stringent -stringently -stringentness -stringer -stringful -stringhalt -stringhalted -stringhaltedness -stringiness -stringing -stringless -stringlike -stringmaker -stringmaking -stringman -stringpiece -stringsman -stringways -stringwood -stringy -stringybark -strinkle -striola -striolae -striolate -striolated -striolet -strip -stripe -striped -stripeless -striper -striplet -stripling -strippage -stripped -stripper -stripping -strippit -strippler -stript -stripy -strit -strive -strived -striven -striver -striving -strivingly -strix -stroam -strobic -strobila -strobilaceous -strobilae -strobilate -strobilation -strobile -strobili -strobiliferous -strobiliform -strobiline -strobilization -strobiloid -strobilus -stroboscope -stroboscopic -stroboscopical -stroboscopy -strobotron -strockle -stroddle -strode -stroil -stroke -stroker -strokesman -stroking -stroky -strold -stroll -strolld -stroller -strom -stroma -stromal -stromata -stromateoid -stromatic -stromatiform -stromatology -stromatoporoid -stromatous -stromb -strombiform -strombite -stromboid -strombolian -strombuliferous -strombuliform -strome -stromeyerite -stromming -strone -strong -strongback -strongbark -strongbox -strongbrained -strongfully -stronghand -stronghead -strongheadedly -strongheadedness -stronghearted -stronghold -strongish -stronglike -strongly -strongness -strongylate -strongyle -strongyliasis -strongylid -strongylidosis -strongyloid -strongyloidosis -strongylon -strongylosis -strontia -strontian -strontianiferous -strontianite -strontic -strontion -strontitic -strontium -strook -strooken -stroot -strop -strophaic -strophanhin -strophe -strophic -strophical -strophically -strophiolate -strophiolated -strophiole -strophoid -strophomenid -strophomenoid -strophosis -strophotaxis -strophulus -stropper -stroppings -stroth -stroud -strouding -strounge -stroup -strouthiocamel -strouthiocamelian -strouthocamelian -strove -strow -strowd -strown -stroy -stroyer -stroygood -strub -strubbly -struck -strucken -structural -structuralism -structuralist -structuralization -structuralize -structurally -structuration -structure -structured -structureless -structurely -structurist -strudel -strue -struggle -struggler -struggling -strugglingly -strum -struma -strumae -strumatic -strumaticness -strumectomy -strumiferous -strumiform -strumiprivic -strumiprivous -strumitis -strummer -strumose -strumous -strumousness -strumpet -strumpetlike -strumpetry -strumstrum -strumulose -strung -strunt -strut -struth -struthian -struthiform -struthioid -struthioniform -struthious -struthonine -strutter -strutting -struttingly -struv -struvite -strych -strychnia -strychnic -strychnin -strychnine -strychninic -strychninism -strychninization -strychninize -strychnize -strychnol -stub -stubachite -stubb -stubbed -stubbedness -stubber -stubbiness -stubble -stubbleberry -stubbled -stubbleward -stubbly -stubborn -stubbornhearted -stubbornly -stubbornness -stubboy -stubby -stubchen -stuber -stuboy -stubrunner -stucco -stuccoer -stuccowork -stuccoworker -stuccoyer -stuck -stuckling -stucturelessness -stud -studbook -studder -studdie -studding -studdle -stude -student -studenthood -studentless -studentlike -studentry -studentship -studerite -studfish -studflower -studhorse -studia -studiable -studied -studiedly -studiedness -studier -studio -studious -studiously -studiousness -studium -studwork -study -stue -stuff -stuffed -stuffender -stuffer -stuffgownsman -stuffily -stuffiness -stuffing -stuffy -stug -stuggy -stuiver -stull -stuller -stulm -stultification -stultifier -stultify -stultiloquence -stultiloquently -stultiloquious -stultioquy -stultloquent -stum -stumble -stumbler -stumbling -stumblingly -stumbly -stumer -stummer -stummy -stump -stumpage -stumper -stumpily -stumpiness -stumpish -stumpless -stumplike -stumpling -stumpnose -stumpwise -stumpy -stun -stung -stunk -stunkard -stunner -stunning -stunningly -stunpoll -stunsail -stunsle -stunt -stunted -stuntedly -stuntedness -stunter -stuntiness -stuntness -stunty -stupa -stupe -stupefacient -stupefaction -stupefactive -stupefactiveness -stupefied -stupefiedness -stupefier -stupefy -stupend -stupendly -stupendous -stupendously -stupendousness -stupent -stupeous -stupex -stupid -stupidhead -stupidish -stupidity -stupidly -stupidness -stupor -stuporific -stuporose -stuporous -stupose -stupp -stuprate -stupration -stuprum -stupulose -sturdied -sturdily -sturdiness -sturdy -sturdyhearted -sturgeon -sturine -sturionine -sturk -sturniform -sturnine -sturnoid -sturt -sturtan -sturtin -sturtion -sturtite -stuss -stut -stutter -stutterer -stuttering -stutteringly -sty -styan -styca -styceric -stycerin -stycerinol -stychomythia -styful -styfziekte -stylar -stylate -style -stylebook -styledom -styleless -stylelessness -stylelike -styler -stylet -stylewort -stylidiaceous -styliferous -styliform -styline -styling -stylish -stylishly -stylishness -stylist -stylistic -stylistical -stylistically -stylistics -stylite -stylitic -stylitism -stylization -stylize -stylizer -stylo -styloauricularis -stylobate -styloglossal -styloglossus -stylogonidium -stylograph -stylographic -stylographical -stylographically -stylography -stylohyal -stylohyoid -stylohyoidean -stylohyoideus -styloid -stylolite -stylolitic -stylomandibular -stylomastoid -stylomaxillary -stylometer -stylommatophorous -stylomyloid -stylopharyngeal -stylopharyngeus -stylopid -stylopization -stylopized -stylopod -stylopodium -stylops -stylospore -stylosporous -stylostegium -stylotypite -stylus -stymie -styphnate -styphnic -stypsis -styptic -styptical -stypticalness -stypticity -stypticness -styracaceous -styracin -styrax -styrene -styrogallol -styrol -styrolene -styrone -styryl -styrylic -stythe -styward -suability -suable -suably -suade -suaharo -suant -suantly -suasible -suasion -suasionist -suasive -suasively -suasiveness -suasory -suavastika -suave -suavely -suaveness -suaveolent -suavify -suaviloquence -suaviloquent -suavity -sub -subabbot -subabdominal -subability -subabsolute -subacademic -subaccount -subacetate -subacid -subacidity -subacidly -subacidness -subacidulous -subacrid -subacrodrome -subacromial -subact -subacuminate -subacute -subacutely -subadditive -subadjacent -subadjutor -subadministrate -subadministration -subadministrator -subadult -subaduncate -subaerate -subaeration -subaerial -subaerially -subaetheric -subaffluent -subage -subagency -subagent -subaggregate -subah -subahdar -subahdary -subahship -subaid -subalary -subalate -subalgebra -subalkaline -suballiance -subalmoner -subalpine -subaltern -subalternant -subalternate -subalternately -subalternating -subalternation -subalternity -subanal -subandean -subangled -subangular -subangulate -subangulated -subanniversary -subantarctic -subantichrist -subantique -subapical -subaponeurotic -subapostolic -subapparent -subappearance -subappressed -subapprobation -subapterous -subaquatic -subaquean -subaqueous -subarachnoid -subarachnoidal -subarachnoidean -subarboraceous -subarboreal -subarborescent -subarch -subarchesporial -subarchitect -subarctic -subarcuate -subarcuated -subarcuation -subarea -subareolar -subareolet -subarmor -subarouse -subarrhation -subartesian -subarticle -subarytenoid -subascending -subassemblage -subassembly -subassociation -subastragalar -subastragaloid -subastral -subastringent -subatom -subatomic -subattenuate -subattenuated -subattorney -subaud -subaudible -subaudition -subauditionist -subauditor -subauditur -subaural -subauricular -subautomatic -subaverage -subaxillar -subaxillary -subbailie -subbailiff -subbailiwick -subballast -subband -subbank -subbasal -subbasaltic -subbase -subbasement -subbass -subbeadle -subbeau -subbias -subbifid -subbing -subbituminous -subbookkeeper -subboreal -subbourdon -subbrachycephalic -subbrachycephaly -subbrachyskelic -subbranch -subbranched -subbranchial -subbreed -subbrigade -subbrigadier -subbroker -subbromid -subbromide -subbronchial -subbureau -subcaecal -subcalcareous -subcalcarine -subcaliber -subcallosal -subcampanulate -subcancellate -subcandid -subcantor -subcapsular -subcaptain -subcaption -subcarbide -subcarbonate -subcarbureted -subcarburetted -subcardinal -subcarinate -subcartilaginous -subcase -subcash -subcashier -subcasino -subcast -subcaste -subcategory -subcaudal -subcaudate -subcaulescent -subcause -subcavate -subcavity -subcelestial -subcell -subcellar -subcenter -subcentral -subcentrally -subchairman -subchamberer -subchancel -subchanter -subchapter -subchaser -subchela -subchelate -subcheliform -subchief -subchloride -subchondral -subchordal -subchorioid -subchorioidal -subchorionic -subchoroid -subchoroidal -subcinctorium -subcineritious -subcingulum -subcircuit -subcircular -subcision -subcity -subclaim -subclan -subclass -subclassify -subclause -subclavate -subclavia -subclavian -subclavicular -subclavioaxillary -subclaviojugular -subclavius -subclerk -subclimate -subclimax -subclinical -subclover -subcoastal -subcollateral -subcollector -subcollegiate -subcolumnar -subcommander -subcommendation -subcommended -subcommissary -subcommissaryship -subcommission -subcommissioner -subcommit -subcommittee -subcompany -subcompensate -subcompensation -subcompressed -subconcave -subconcession -subconcessionaire -subconchoidal -subconference -subconformable -subconical -subconjunctival -subconjunctively -subconnate -subconnect -subconnivent -subconscience -subconscious -subconsciously -subconsciousness -subconservator -subconsideration -subconstable -subconstellation -subconsul -subcontained -subcontest -subcontiguous -subcontinent -subcontinental -subcontinual -subcontinued -subcontinuous -subcontract -subcontracted -subcontractor -subcontraoctave -subcontrariety -subcontrarily -subcontrary -subcontrol -subconvex -subconvolute -subcool -subcoracoid -subcordate -subcordiform -subcoriaceous -subcorneous -subcorporation -subcortex -subcortical -subcortically -subcorymbose -subcosta -subcostal -subcostalis -subcouncil -subcranial -subcreative -subcreek -subcrenate -subcrepitant -subcrepitation -subcrescentic -subcrest -subcriminal -subcrossing -subcrureal -subcrureus -subcrust -subcrustaceous -subcrustal -subcrystalline -subcubical -subcuboidal -subcultrate -subcultural -subculture -subcurate -subcurator -subcuratorship -subcurrent -subcutaneous -subcutaneously -subcutaneousness -subcuticular -subcutis -subcyaneous -subcyanide -subcylindric -subcylindrical -subdatary -subdate -subdeacon -subdeaconate -subdeaconess -subdeaconry -subdeaconship -subdealer -subdean -subdeanery -subdeb -subdebutante -subdecanal -subdecimal -subdecuple -subdeducible -subdefinition -subdelegate -subdelegation -subdelirium -subdeltaic -subdeltoid -subdeltoidal -subdemonstrate -subdemonstration -subdenomination -subdentate -subdentated -subdented -subdenticulate -subdepartment -subdeposit -subdepository -subdepot -subdepressed -subdeputy -subderivative -subdermal -subdeterminant -subdevil -subdiaconal -subdiaconate -subdial -subdialect -subdialectal -subdialectally -subdiapason -subdiapente -subdiaphragmatic -subdichotomize -subdichotomous -subdichotomously -subdichotomy -subdie -subdilated -subdirector -subdiscoidal -subdisjunctive -subdistich -subdistichous -subdistinction -subdistinguish -subdistinguished -subdistrict -subdititious -subdititiously -subdivecious -subdiversify -subdividable -subdivide -subdivider -subdividing -subdividingly -subdivine -subdivisible -subdivision -subdivisional -subdivisive -subdoctor -subdolent -subdolichocephalic -subdolichocephaly -subdolous -subdolously -subdolousness -subdominant -subdorsal -subdorsally -subdouble -subdrain -subdrainage -subdrill -subdruid -subduable -subduableness -subduably -subdual -subduce -subduct -subduction -subdue -subdued -subduedly -subduedness -subduement -subduer -subduing -subduingly -subduple -subduplicate -subdural -subdurally -subecho -subectodermal -subedit -subeditor -subeditorial -subeditorship -subeffective -subelection -subelectron -subelement -subelementary -subelliptic -subelliptical -subelongate -subemarginate -subencephalon -subencephaltic -subendocardial -subendorse -subendorsement -subendothelial -subendymal -subenfeoff -subengineer -subentire -subentitle -subentry -subepidermal -subepiglottic -subepithelial -subepoch -subequal -subequality -subequally -subequatorial -subequilateral -subequivalve -suber -suberane -suberate -suberect -subereous -suberic -suberiferous -suberification -suberiform -suberin -suberinization -suberinize -suberization -suberize -suberone -suberose -suberous -subescheator -subesophageal -subessential -subetheric -subexaminer -subexcitation -subexcite -subexecutor -subexternal -subface -subfacies -subfactor -subfactorial -subfactory -subfalcate -subfalcial -subfalciform -subfamily -subfascial -subfastigiate -subfebrile -subferryman -subfestive -subfeu -subfeudation -subfeudatory -subfibrous -subfief -subfigure -subfissure -subfix -subflavor -subflexuose -subfloor -subflooring -subflora -subflush -subfluvial -subfocal -subfoliar -subforeman -subform -subformation -subfossil -subfossorial -subfoundation -subfraction -subframe -subfreshman -subfrontal -subfulgent -subfumigation -subfumose -subfunctional -subfusc -subfuscous -subfusiform -subfusk -subgalea -subgallate -subganger -subgape -subgelatinous -subgeneric -subgenerical -subgenerically -subgeniculate -subgenital -subgens -subgenual -subgenus -subgeometric -subget -subgit -subglabrous -subglacial -subglacially -subglenoid -subglobose -subglobosely -subglobular -subglobulose -subglossal -subglossitis -subglottic -subglumaceous -subgod -subgoverness -subgovernor -subgrade -subgranular -subgrin -subgroup -subgular -subgwely -subgyre -subgyrus -subhalid -subhalide -subhall -subharmonic -subhastation -subhatchery -subhead -subheading -subheadquarters -subheadwaiter -subhealth -subhedral -subhemispherical -subhepatic -subherd -subhero -subhexagonal -subhirsute -subhooked -subhorizontal -subhornblendic -subhouse -subhuman -subhumid -subhyaline -subhyaloid -subhymenial -subhymenium -subhyoid -subhyoidean -subhypothesis -subhysteria -subicle -subicteric -subicular -subiculum -subidar -subidea -subideal -subimaginal -subimago -subimbricate -subimbricated -subimposed -subimpressed -subincandescent -subincident -subincise -subincision -subincomplete -subindex -subindicate -subindication -subindicative -subindices -subindividual -subinduce -subinfer -subinfeud -subinfeudate -subinfeudation -subinfeudatory -subinflammation -subinflammatory -subinform -subingression -subinguinal -subinitial -subinoculate -subinoculation -subinsert -subinsertion -subinspector -subinspectorship -subintegumental -subintellection -subintelligential -subintelligitur -subintent -subintention -subintercessor -subinternal -subinterval -subintestinal -subintroduce -subintroduction -subintroductory -subinvoluted -subinvolution -subiodide -subirrigate -subirrigation -subitane -subitaneous -subitem -subjacency -subjacent -subjacently -subjack -subject -subjectability -subjectable -subjectdom -subjected -subjectedly -subjectedness -subjecthood -subjectibility -subjectible -subjectification -subjectify -subjectile -subjection -subjectional -subjectist -subjective -subjectively -subjectiveness -subjectivism -subjectivist -subjectivistic -subjectivistically -subjectivity -subjectivize -subjectivoidealistic -subjectless -subjectlike -subjectness -subjectship -subjee -subjicible -subjoin -subjoinder -subjoint -subjudge -subjudiciary -subjugable -subjugal -subjugate -subjugation -subjugator -subjugular -subjunct -subjunction -subjunctive -subjunctively -subjunior -subking -subkingdom -sublabial -sublaciniate -sublacustrine -sublanate -sublanceolate -sublanguage -sublapsarian -sublapsarianism -sublapsary -sublaryngeal -sublate -sublateral -sublation -sublative -subleader -sublease -sublecturer -sublegislation -sublegislature -sublenticular -sublessee -sublessor -sublet -sublethal -sublettable -subletter -sublevaminous -sublevate -sublevation -sublevel -sublibrarian -sublicense -sublicensee -sublid -sublieutenancy -sublieutenant -subligation -sublighted -sublimable -sublimableness -sublimant -sublimate -sublimation -sublimational -sublimationist -sublimator -sublimatory -sublime -sublimed -sublimely -sublimeness -sublimer -subliminal -subliminally -sublimish -sublimitation -sublimity -sublimize -sublinear -sublineation -sublingua -sublinguae -sublingual -sublinguate -sublittoral -sublobular -sublong -subloral -subloreal -sublot -sublumbar -sublunar -sublunary -sublunate -sublustrous -subluxate -subluxation -submaid -submain -submakroskelic -submammary -subman -submanager -submania -submanic -submanor -submarginal -submarginally -submarginate -submargined -submarine -submariner -submarinism -submarinist -submarshal -submaster -submaxilla -submaxillary -submaximal -submeaning -submedial -submedian -submediant -submediation -submediocre -submeeting -submember -submembranaceous -submembranous -submeningeal -submental -submentum -submerge -submerged -submergement -submergence -submergibility -submergible -submerse -submersed -submersibility -submersible -submersion -submetallic -submeter -submetering -submicron -submicroscopic -submicroscopically -submiliary -submind -subminimal -subminister -submiss -submissible -submission -submissionist -submissive -submissively -submissiveness -submissly -submissness -submit -submittal -submittance -submitter -submittingly -submolecule -submonition -submontagne -submontane -submontanely -submontaneous -submorphous -submortgage -submotive -submountain -submucosa -submucosal -submucous -submucronate -submultiple -submundane -submuriate -submuscular -subnarcotic -subnasal -subnascent -subnatural -subnect -subnervian -subness -subneural -subnex -subnitrate -subnitrated -subniveal -subnivean -subnormal -subnormality -subnotation -subnote -subnotochordal -subnubilar -subnucleus -subnude -subnumber -subnuvolar -suboblique -subobscure -subobscurely -subobtuse -suboccipital -subocean -suboceanic -suboctave -suboctile -suboctuple -subocular -suboesophageal -suboffice -subofficer -subofficial -subolive -subopaque -subopercle -subopercular -suboperculum -subopposite -suboptic -suboptimal -suboptimum -suboral -suborbicular -suborbiculate -suborbiculated -suborbital -suborbitar -suborbitary -subordain -suborder -subordinacy -subordinal -subordinary -subordinate -subordinately -subordinateness -subordinating -subordinatingly -subordination -subordinationism -subordinationist -subordinative -suborganic -suborn -subornation -subornative -suborner -suboval -subovate -subovated -suboverseer -subovoid -suboxidation -suboxide -subpackage -subpagoda -subpallial -subpalmate -subpanel -subparagraph -subparallel -subpart -subpartition -subpartitioned -subpartitionment -subparty -subpass -subpassage -subpastor -subpatron -subpattern -subpavement -subpectinate -subpectoral -subpeduncle -subpeduncular -subpedunculate -subpellucid -subpeltate -subpeltated -subpentagonal -subpentangular -subpericardial -subperiod -subperiosteal -subperiosteally -subperitoneal -subperitoneally -subpermanent -subpermanently -subperpendicular -subpetiolar -subpetiolate -subpharyngeal -subphosphate -subphratry -subphrenic -subphylar -subphylum -subpial -subpilose -subpimp -subpiston -subplacenta -subplant -subplantigrade -subplat -subpleural -subplinth -subplot -subplow -subpodophyllous -subpoena -subpoenal -subpolar -subpolygonal -subpool -subpopular -subpopulation -subporphyritic -subport -subpostmaster -subpostmastership -subpostscript -subpotency -subpotent -subpreceptor -subpreceptorial -subpredicate -subpredication -subprefect -subprefectorial -subprefecture -subprehensile -subpress -subprimary -subprincipal -subprior -subprioress -subproblem -subproctor -subproduct -subprofessional -subprofessor -subprofessoriate -subprofitable -subproportional -subprotector -subprovince -subprovincial -subpubescent -subpubic -subpulmonary -subpulverizer -subpunch -subpunctuation -subpurchaser -subpurlin -subputation -subpyramidal -subpyriform -subquadrangular -subquadrate -subquality -subquestion -subquinquefid -subquintuple -subrace -subradial -subradiance -subradiate -subradical -subradius -subradular -subrailway -subrameal -subramose -subramous -subrange -subrational -subreader -subreason -subrebellion -subrectangular -subrector -subreference -subregent -subregion -subregional -subregular -subreguli -subregulus -subrelation -subreligion -subreniform -subrent -subrepand -subrepent -subreport -subreptary -subreption -subreptitious -subreputable -subresin -subretinal -subrhombic -subrhomboid -subrhomboidal -subrictal -subrident -subridently -subrigid -subrision -subrisive -subrisory -subrogate -subrogation -subroot -subrostral -subround -subrule -subruler -subsacral -subsale -subsaline -subsalt -subsample -subsartorial -subsatiric -subsatirical -subsaturated -subsaturation -subscapular -subscapularis -subscapulary -subschedule -subscheme -subschool -subscience -subscleral -subsclerotic -subscribable -subscribe -subscriber -subscribership -subscript -subscription -subscriptionist -subscriptive -subscriptively -subscripture -subscrive -subscriver -subsea -subsecive -subsecretarial -subsecretary -subsect -subsection -subsecurity -subsecute -subsecutive -subsegment -subsemifusa -subsemitone -subsensation -subsensible -subsensual -subsensuous -subsept -subseptuple -subsequence -subsequency -subsequent -subsequential -subsequentially -subsequently -subsequentness -subseries -subserosa -subserous -subserrate -subserve -subserviate -subservience -subserviency -subservient -subserviently -subservientness -subsessile -subset -subsewer -subsextuple -subshaft -subsheriff -subshire -subshrub -subshrubby -subside -subsidence -subsidency -subsident -subsider -subsidiarie -subsidiarily -subsidiariness -subsidiary -subsiding -subsidist -subsidizable -subsidization -subsidize -subsidizer -subsidy -subsilicate -subsilicic -subsill -subsimilation -subsimious -subsimple -subsinuous -subsist -subsistence -subsistency -subsistent -subsistential -subsistingly -subsizar -subsizarship -subsmile -subsneer -subsocial -subsoil -subsoiler -subsolar -subsolid -subsonic -subsorter -subsovereign -subspace -subspatulate -subspecialist -subspecialize -subspecialty -subspecies -subspecific -subspecifically -subsphenoidal -subsphere -subspherical -subspherically -subspinous -subspiral -subspontaneous -subsquadron -substage -substalagmite -substalagmitic -substance -substanceless -substanch -substandard -substandardize -substant -substantiability -substantial -substantialia -substantialism -substantialist -substantiality -substantialize -substantially -substantialness -substantiate -substantiation -substantiative -substantiator -substantify -substantious -substantival -substantivally -substantive -substantively -substantiveness -substantivity -substantivize -substantize -substation -substernal -substituent -substitutable -substitute -substituted -substituter -substituting -substitutingly -substitution -substitutional -substitutionally -substitutionary -substitutive -substitutively -substock -substoreroom -substory -substract -substraction -substratal -substrate -substrati -substrative -substrator -substratose -substratosphere -substratospheric -substratum -substriate -substruct -substruction -substructional -substructural -substructure -substylar -substyle -subsulfid -subsulfide -subsulphate -subsulphid -subsulphide -subsult -subsultive -subsultorily -subsultorious -subsultory -subsultus -subsumable -subsume -subsumption -subsumptive -subsuperficial -subsurety -subsurface -subsyndicate -subsynod -subsynodical -subsystem -subtack -subtacksman -subtangent -subtarget -subtartarean -subtectal -subtegminal -subtegulaneous -subtemperate -subtenancy -subtenant -subtend -subtense -subtenure -subtepid -subteraqueous -subterbrutish -subtercelestial -subterconscious -subtercutaneous -subterethereal -subterfluent -subterfluous -subterfuge -subterhuman -subterjacent -subtermarine -subterminal -subternatural -subterpose -subterposition -subterrane -subterraneal -subterranean -subterraneanize -subterraneanly -subterraneous -subterraneously -subterraneousness -subterranity -subterraqueous -subterrene -subterrestrial -subterritorial -subterritory -subtersensual -subtersensuous -subtersuperlative -subtersurface -subtertian -subtext -subthalamic -subthalamus -subthoracic -subthrill -subtile -subtilely -subtileness -subtilin -subtilism -subtilist -subtility -subtilization -subtilize -subtilizer -subtill -subtillage -subtilty -subtitle -subtitular -subtle -subtleness -subtlety -subtlist -subtly -subtone -subtonic -subtorrid -subtotal -subtotem -subtower -subtract -subtracter -subtraction -subtractive -subtrahend -subtranslucent -subtransparent -subtransverse -subtrapezoidal -subtread -subtreasurer -subtreasurership -subtreasury -subtrench -subtriangular -subtriangulate -subtribal -subtribe -subtribual -subtrifid -subtrigonal -subtrihedral -subtriplicate -subtriplicated -subtriquetrous -subtrist -subtrochanteric -subtrochlear -subtropic -subtropical -subtropics -subtrousers -subtrude -subtruncate -subtrunk -subtuberant -subtunic -subtunnel -subturbary -subturriculate -subturriculated -subtutor -subtwined -subtype -subtypical -subulate -subulated -subulicorn -subuliform -subultimate -subumbellate -subumbonal -subumbral -subumbrella -subumbrellar -subuncinate -subunequal -subungual -subunguial -subungulate -subunit -subuniverse -suburb -suburban -suburbandom -suburbanhood -suburbanism -suburbanite -suburbanity -suburbanization -suburbanize -suburbanly -suburbed -suburbia -suburbican -suburbicarian -suburbicary -suburethral -subursine -subvaginal -subvaluation -subvarietal -subvariety -subvassal -subvassalage -subvein -subvendee -subvene -subvention -subventionary -subventioned -subventionize -subventitious -subventive -subventral -subventricose -subvermiform -subversal -subverse -subversed -subversion -subversionary -subversive -subversivism -subvert -subvertebral -subverter -subvertible -subvertical -subverticillate -subvesicular -subvestment -subvicar -subvicarship -subvillain -subvirate -subvirile -subvisible -subvitalized -subvitreous -subvocal -subvola -subwarden -subwater -subway -subwealthy -subweight -subwink -subworker -subworkman -subzonal -subzone -subzygomatic -succade -succedanea -succedaneous -succedaneum -succedent -succeed -succeedable -succeeder -succeeding -succeedingly -succent -succentor -succenturiate -succenturiation -success -successful -successfully -successfulness -succession -successional -successionally -successionist -successionless -successive -successively -successiveness -successivity -successless -successlessly -successlessness -successor -successoral -successorship -successory -succi -succin -succinamate -succinamic -succinamide -succinanil -succinate -succinct -succinctly -succinctness -succinctorium -succinctory -succincture -succinic -succiniferous -succinimide -succinite -succinoresinol -succinosulphuric -succinous -succinyl -succise -succivorous -succor -succorable -succorer -succorful -succorless -succorrhea -succory -succotash -succourful -succourless -succous -succub -succuba -succubae -succube -succubine -succubous -succubus -succula -succulence -succulency -succulent -succulently -succulentness -succulous -succumb -succumbence -succumbency -succumbent -succumber -succursal -succuss -succussation -succussatory -succussion -succussive -such -suchlike -suchness -suchwise -sucivilized -suck -suckable -suckabob -suckage -suckauhock -sucken -suckener -sucker -suckerel -suckerfish -suckerlike -suckfish -suckhole -sucking -suckle -suckler -suckless -suckling -suckstone -suclat -sucramine -sucrate -sucre -sucroacid -sucrose -suction -suctional -suctorial -suctorian -suctorious -sucupira -sucuri -sucuriu -sucuruju -sud -sudadero -sudamen -sudamina -sudaminal -sudarium -sudary -sudate -sudation -sudatorium -sudatory -sudburite -sudd -sudden -suddenly -suddenness -suddenty -sudder -suddle -suddy -sudiform -sudoral -sudoresis -sudoric -sudoriferous -sudoriferousness -sudorific -sudoriparous -sudorous -suds -sudsman -sudsy -sue -suede -suer -suet -suety -suff -suffect -suffection -suffer -sufferable -sufferableness -sufferably -sufferance -sufferer -suffering -sufferingly -suffete -suffice -sufficeable -sufficer -sufficiency -sufficient -sufficiently -sufficientness -sufficing -sufficingly -sufficingness -suffiction -suffix -suffixal -suffixation -suffixion -suffixment -sufflaminate -sufflamination -sufflate -sufflation -sufflue -suffocate -suffocating -suffocatingly -suffocation -suffocative -suffragan -suffraganal -suffraganate -suffragancy -suffraganeous -suffragatory -suffrage -suffragette -suffragettism -suffragial -suffragism -suffragist -suffragistic -suffragistically -suffragitis -suffrago -suffrutescent -suffrutex -suffruticose -suffruticous -suffruticulose -suffumigate -suffumigation -suffusable -suffuse -suffused -suffusedly -suffusion -suffusive -sugamo -sugan -sugar -sugarberry -sugarbird -sugarbush -sugared -sugarelly -sugarer -sugarhouse -sugariness -sugarless -sugarlike -sugarplum -sugarsweet -sugarworks -sugary -sugent -sugescent -suggest -suggestable -suggestedness -suggester -suggestibility -suggestible -suggestibleness -suggestibly -suggesting -suggestingly -suggestion -suggestionability -suggestionable -suggestionism -suggestionist -suggestionize -suggestive -suggestively -suggestiveness -suggestivity -suggestment -suggestress -suggestum -suggillate -suggillation -sugh -sugi -suguaro -suhuaro -suicidal -suicidalism -suicidally -suicidalwise -suicide -suicidical -suicidism -suicidist -suid -suidian -suiform -suilline -suimate -suine -suing -suingly -suint -suisimilar -suist -suit -suitability -suitable -suitableness -suitably -suitcase -suite -suithold -suiting -suitor -suitoress -suitorship -suity -suji -sukiyaki -sukkenye -sulbasutra -sulcal -sulcalization -sulcalize -sulcar -sulcate -sulcated -sulcation -sulcatoareolate -sulcatocostate -sulcatorimose -sulciform -sulcomarginal -sulcular -sulculate -sulculus -sulcus -suld -sulea -sulfa -sulfacid -sulfadiazine -sulfaguanidine -sulfamate -sulfamerazin -sulfamerazine -sulfamethazine -sulfamethylthiazole -sulfamic -sulfamidate -sulfamide -sulfamidic -sulfamine -sulfaminic -sulfamyl -sulfanilamide -sulfanilic -sulfanilylguanidine -sulfantimonide -sulfapyrazine -sulfapyridine -sulfaquinoxaline -sulfarsenide -sulfarsenite -sulfarseniuret -sulfarsphenamine -sulfatase -sulfathiazole -sulfatic -sulfatize -sulfato -sulfazide -sulfhydrate -sulfhydric -sulfhydryl -sulfindigotate -sulfindigotic -sulfindylic -sulfion -sulfionide -sulfoacid -sulfoamide -sulfobenzide -sulfobenzoate -sulfobenzoic -sulfobismuthite -sulfoborite -sulfocarbamide -sulfocarbimide -sulfocarbolate -sulfocarbolic -sulfochloride -sulfocyan -sulfocyanide -sulfofication -sulfogermanate -sulfohalite -sulfohydrate -sulfoindigotate -sulfoleic -sulfolysis -sulfomethylic -sulfonamic -sulfonamide -sulfonate -sulfonation -sulfonator -sulfonephthalein -sulfonethylmethane -sulfonic -sulfonium -sulfonmethane -sulfonyl -sulfophthalein -sulfopurpurate -sulfopurpuric -sulforicinate -sulforicinic -sulforicinoleate -sulforicinoleic -sulfoselenide -sulfosilicide -sulfostannide -sulfotelluride -sulfourea -sulfovinate -sulfovinic -sulfowolframic -sulfoxide -sulfoxism -sulfoxylate -sulfoxylic -sulfurage -sulfuran -sulfurate -sulfuration -sulfurator -sulfurea -sulfureous -sulfureously -sulfureousness -sulfuret -sulfuric -sulfurization -sulfurize -sulfurosyl -sulfurous -sulfury -sulfuryl -sulk -sulka -sulker -sulkily -sulkiness -sulky -sulkylike -sull -sulla -sullage -sullen -sullenhearted -sullenly -sullenness -sulliable -sullow -sully -sulpha -sulphacid -sulphaldehyde -sulphamate -sulphamic -sulphamidate -sulphamide -sulphamidic -sulphamine -sulphaminic -sulphamino -sulphammonium -sulphamyl -sulphanilate -sulphanilic -sulphantimonate -sulphantimonial -sulphantimonic -sulphantimonide -sulphantimonious -sulphantimonite -sulpharsenate -sulpharseniate -sulpharsenic -sulpharsenide -sulpharsenious -sulpharsenite -sulpharseniuret -sulpharsphenamine -sulphatase -sulphate -sulphated -sulphatic -sulphation -sulphatization -sulphatize -sulphato -sulphatoacetic -sulphatocarbonic -sulphazide -sulphazotize -sulphbismuthite -sulphethylate -sulphethylic -sulphhemoglobin -sulphichthyolate -sulphidation -sulphide -sulphidic -sulphidize -sulphimide -sulphinate -sulphindigotate -sulphine -sulphinic -sulphinide -sulphinyl -sulphitation -sulphite -sulphitic -sulphmethemoglobin -sulpho -sulphoacetic -sulphoamid -sulphoamide -sulphoantimonate -sulphoantimonic -sulphoantimonious -sulphoantimonite -sulphoarsenic -sulphoarsenious -sulphoarsenite -sulphoazotize -sulphobenzide -sulphobenzoate -sulphobenzoic -sulphobismuthite -sulphoborite -sulphobutyric -sulphocarbamic -sulphocarbamide -sulphocarbanilide -sulphocarbimide -sulphocarbolate -sulphocarbolic -sulphocarbonate -sulphocarbonic -sulphochloride -sulphochromic -sulphocinnamic -sulphocyan -sulphocyanate -sulphocyanic -sulphocyanide -sulphocyanogen -sulphodichloramine -sulphofication -sulphofy -sulphogallic -sulphogel -sulphogermanate -sulphogermanic -sulphohalite -sulphohaloid -sulphohydrate -sulphoichthyolate -sulphoichthyolic -sulphoindigotate -sulphoindigotic -sulpholeate -sulpholeic -sulpholipin -sulpholysis -sulphonal -sulphonalism -sulphonamic -sulphonamide -sulphonamido -sulphonamine -sulphonaphthoic -sulphonate -sulphonated -sulphonation -sulphonator -sulphoncyanine -sulphone -sulphonephthalein -sulphonethylmethane -sulphonic -sulphonium -sulphonmethane -sulphonphthalein -sulphonyl -sulphoparaldehyde -sulphophosphate -sulphophosphite -sulphophosphoric -sulphophosphorous -sulphophthalein -sulphophthalic -sulphopropionic -sulphoproteid -sulphopupuric -sulphopurpurate -sulphoricinate -sulphoricinic -sulphoricinoleate -sulphoricinoleic -sulphosalicylic -sulphoselenide -sulphoselenium -sulphosilicide -sulphosol -sulphostannate -sulphostannic -sulphostannide -sulphostannite -sulphostannous -sulphosuccinic -sulphosulphurous -sulphotannic -sulphotelluride -sulphoterephthalic -sulphothionyl -sulphotoluic -sulphotungstate -sulphotungstic -sulphourea -sulphovanadate -sulphovinate -sulphovinic -sulphowolframic -sulphoxide -sulphoxism -sulphoxylate -sulphoxylic -sulphoxyphosphate -sulphozincate -sulphur -sulphurage -sulphuran -sulphurate -sulphuration -sulphurator -sulphurea -sulphurean -sulphureity -sulphureonitrous -sulphureosaline -sulphureosuffused -sulphureous -sulphureously -sulphureousness -sulphureovirescent -sulphuret -sulphureted -sulphuric -sulphuriferous -sulphurity -sulphurization -sulphurize -sulphurless -sulphurlike -sulphurosyl -sulphurous -sulphurously -sulphurousness -sulphurproof -sulphurweed -sulphurwort -sulphury -sulphuryl -sulphydrate -sulphydric -sulphydryl -sultam -sultan -sultana -sultanaship -sultanate -sultane -sultanesque -sultaness -sultanian -sultanic -sultanin -sultanism -sultanist -sultanize -sultanlike -sultanry -sultanship -sultone -sultrily -sultriness -sultry -sulung -sulvanite -sulvasutra -sum -sumac -sumatra -sumbul -sumbulic -sumless -sumlessness -summability -summable -summage -summand -summar -summarily -summariness -summarist -summarization -summarize -summarizer -summary -summate -summation -summational -summative -summatory -summed -summer -summerbird -summercastle -summerer -summerhead -summeriness -summering -summerings -summerish -summerite -summerize -summerland -summerlay -summerless -summerlike -summerliness -summerling -summerly -summerproof -summertide -summertime -summertree -summerward -summerwood -summery -summist -summit -summital -summitless -summity -summon -summonable -summoner -summoningly -summons -summula -summulist -summut -sumner -sump -sumpage -sumper -sumph -sumphish -sumphishly -sumphishness -sumphy -sumpit -sumpitan -sumple -sumpman -sumpsimus -sumpter -sumption -sumptuary -sumptuosity -sumptuous -sumptuously -sumptuousness -sun -sunbeam -sunbeamed -sunbeamy -sunberry -sunbird -sunblink -sunbonnet -sunbonneted -sunbow -sunbreak -sunburn -sunburned -sunburnedness -sunburnproof -sunburnt -sunburntness -sunburst -suncherchor -suncup -sundae -sundang -sundari -sundek -sunder -sunderable -sunderance -sunderer -sunderment -sunderwise -sundew -sundial -sundik -sundog -sundown -sundowner -sundowning -sundra -sundri -sundries -sundriesman -sundrily -sundriness -sundrops -sundry -sundryman -sune -sunfall -sunfast -sunfish -sunfisher -sunfishery -sunflower -sung -sungha -sunglade -sunglass -sunglo -sunglow -sunk -sunken -sunket -sunkland -sunlamp -sunland -sunless -sunlessly -sunlessness -sunlet -sunlight -sunlighted -sunlike -sunlit -sunn -sunnily -sunniness -sunnud -sunny -sunnyhearted -sunnyheartedness -sunproof -sunquake -sunray -sunrise -sunrising -sunroom -sunscald -sunset -sunsetting -sunsetty -sunshade -sunshine -sunshineless -sunshining -sunshiny -sunsmit -sunsmitten -sunspot -sunspotted -sunspottedness -sunspottery -sunspotty -sunsquall -sunstone -sunstricken -sunstroke -sunt -sunup -sunward -sunwards -sunway -sunways -sunweed -sunwise -sunyie -suovetaurilia -sup -supa -supari -supawn -supe -supellex -super -superabduction -superabhor -superability -superable -superableness -superably -superabnormal -superabominable -superabomination -superabound -superabstract -superabsurd -superabundance -superabundancy -superabundant -superabundantly -superaccession -superaccessory -superaccommodating -superaccomplished -superaccrue -superaccumulate -superaccumulation -superaccurate -superacetate -superachievement -superacid -superacidulated -superacknowledgment -superacquisition -superacromial -superactive -superactivity -superacute -superadaptable -superadd -superaddition -superadditional -superadequate -superadequately -superadjacent -superadministration -superadmirable -superadmiration -superadorn -superadornment -superaerial -superaesthetical -superaffiliation -superaffiuence -superagency -superaggravation -superagitation -superagrarian -superalbal -superalbuminosis -superalimentation -superalkaline -superalkalinity -superallowance -superaltar -superaltern -superambitious -superambulacral -superanal -superangelic -superangelical -superanimal -superannuate -superannuation -superannuitant -superannuity -superapology -superappreciation -superaqueous -superarbiter -superarbitrary -superarctic -superarduous -superarrogant -superarseniate -superartificial -superartificially -superaspiration -superassertion -superassociate -superassume -superastonish -superastonishment -superattachment -superattainable -superattendant -superattraction -superattractive -superauditor -superaural -superaverage -superavit -superaward -superaxillary -superazotation -superb -superbelief -superbeloved -superbenefit -superbenevolent -superbenign -superbias -superbious -superbity -superblessed -superblunder -superbly -superbness -superbold -superborrow -superbrain -superbrave -superbrute -superbuild -superbungalow -superbusy -supercabinet -supercalender -supercallosal -supercandid -supercanine -supercanonical -supercanonization -supercanopy -supercapable -supercaption -supercarbonate -supercarbonization -supercarbonize -supercarbureted -supercargo -supercargoship -supercarpal -supercatastrophe -supercatholic -supercausal -supercaution -supercelestial -supercensure -supercentral -supercentrifuge -supercerebellar -supercerebral -superceremonious -supercharge -supercharged -supercharger -superchemical -superchivalrous -superciliary -superciliosity -supercilious -superciliously -superciliousness -supercilium -supercivil -supercivilization -supercivilized -superclaim -superclass -superclassified -supercloth -supercoincidence -supercolossal -supercolumnar -supercolumniation -supercombination -supercombing -supercommendation -supercommentary -supercommentator -supercommercial -supercompetition -supercomplete -supercomplex -supercomprehension -supercompression -superconception -superconductive -superconductivity -superconductor -superconfident -superconfirmation -superconformable -superconformist -superconformity -superconfusion -supercongestion -superconscious -superconsciousness -superconsecrated -superconsequency -superconservative -superconstitutional -supercontest -supercontribution -supercontrol -supercool -supercordial -supercorporation -supercow -supercredit -supercrescence -supercrescent -supercrime -supercritic -supercritical -supercrowned -supercrust -supercube -supercultivated -supercurious -supercycle -supercynical -superdainty -superdanger -superdebt -superdeclamatory -superdecoration -superdeficit -superdeity -superdejection -superdelegate -superdelicate -superdemand -superdemocratic -superdemonic -superdemonstration -superdensity -superdeposit -superdesirous -superdevelopment -superdevilish -superdevotion -superdiabolical -superdiabolically -superdicrotic -superdifficult -superdiplomacy -superdirection -superdiscount -superdistention -superdistribution -superdividend -superdivine -superdivision -superdoctor -superdominant -superdomineering -superdonation -superdose -superdramatist -superdreadnought -superdubious -superduplication -superdural -superdying -superearthly -supereconomy -superedification -superedify -supereducation -supereffective -supereffluence -supereffluently -superego -superelaborate -superelastic -superelated -superelegance -superelementary -superelevated -superelevation -supereligible -supereloquent -supereminence -supereminency -supereminent -supereminently -superemphasis -superemphasize -superendorse -superendorsement -superendow -superenergetic -superenforcement -superengrave -superenrollment -superepic -superepoch -superequivalent -supererogant -supererogantly -supererogate -supererogation -supererogative -supererogator -supererogatorily -supererogatory -superespecial -superessential -superessentially -superestablish -superestablishment -supereternity -superether -superethical -superethmoidal -superevangelical -superevident -superexacting -superexalt -superexaltation -superexaminer -superexceed -superexceeding -superexcellence -superexcellency -superexcellent -superexcellently -superexceptional -superexcitation -superexcited -superexcitement -superexcrescence -superexert -superexertion -superexiguity -superexist -superexistent -superexpand -superexpansion -superexpectation -superexpenditure -superexplicit -superexport -superexpressive -superexquisite -superexquisitely -superexquisiteness -superextend -superextension -superextol -superextreme -superfamily -superfantastic -superfarm -superfat -superfecundation -superfecundity -superfee -superfeminine -superfervent -superfetate -superfetation -superfeudation -superfibrination -superficial -superficialism -superficialist -superficiality -superficialize -superficially -superficialness -superficiary -superficies -superfidel -superfinance -superfine -superfinical -superfinish -superfinite -superfissure -superfit -superfix -superfleet -superflexion -superfluent -superfluid -superfluitance -superfluity -superfluous -superfluously -superfluousness -superflux -superfoliaceous -superfoliation -superfolly -superformal -superformation -superformidable -superfortunate -superfriendly -superfrontal -superfructified -superfulfill -superfulfillment -superfunction -superfunctional -superfuse -superfusibility -superfusible -superfusion -supergaiety -supergallant -supergene -supergeneric -supergenerosity -supergenerous -supergenual -supergiant -superglacial -superglorious -superglottal -supergoddess -supergoodness -supergovern -supergovernment -supergraduate -supergrant -supergratification -supergratify -supergravitate -supergravitation -superguarantee -supergun -superhandsome -superhearty -superheat -superheater -superheresy -superhero -superheroic -superhet -superheterodyne -superhighway -superhirudine -superhistoric -superhistorical -superhive -superhuman -superhumanity -superhumanize -superhumanly -superhumanness -superhumeral -superhypocrite -superideal -superignorant -superillustrate -superillustration -superimpend -superimpending -superimpersonal -superimply -superimportant -superimposable -superimpose -superimposed -superimposition -superimposure -superimpregnated -superimpregnation -superimprobable -superimproved -superincentive -superinclination -superinclusive -superincomprehensible -superincrease -superincumbence -superincumbency -superincumbent -superincumbently -superindependent -superindiction -superindifference -superindifferent -superindignant -superindividual -superindividualism -superindividualist -superinduce -superinducement -superinduct -superinduction -superindulgence -superindulgent -superindustrious -superindustry -superinenarrable -superinfection -superinfer -superinference -superinfeudation -superinfinite -superinfinitely -superinfirmity -superinfluence -superinformal -superinfuse -superinfusion -superingenious -superingenuity -superinitiative -superinjustice -superinnocent -superinquisitive -superinsaniated -superinscription -superinsist -superinsistence -superinsistent -superinstitute -superinstitution -superintellectual -superintend -superintendence -superintendency -superintendent -superintendential -superintendentship -superintender -superintense -superintolerable -superinundation -superior -superioress -superiority -superiorly -superiorness -superiorship -superirritability -superius -superjacent -superjudicial -superjurisdiction -superjustification -superknowledge -superlabial -superlaborious -superlactation -superlapsarian -superlaryngeal -superlation -superlative -superlatively -superlativeness -superlenient -superlie -superlikelihood -superline -superlocal -superlogical -superloyal -superlucky -superlunary -superlunatical -superluxurious -supermagnificent -supermagnificently -supermalate -superman -supermanhood -supermanifest -supermanism -supermanliness -supermanly -supermannish -supermarginal -supermarine -supermarket -supermarvelous -supermasculine -supermaterial -supermathematical -supermaxilla -supermaxillary -supermechanical -supermedial -supermedicine -supermediocre -supermental -supermentality -supermetropolitan -supermilitary -supermishap -supermixture -supermodest -supermoisten -supermolten -supermoral -supermorose -supermunicipal -supermuscan -supermystery -supernacular -supernaculum -supernal -supernalize -supernally -supernatant -supernatation -supernation -supernational -supernationalism -supernatural -supernaturaldom -supernaturalism -supernaturalist -supernaturality -supernaturalize -supernaturally -supernaturalness -supernature -supernecessity -supernegligent -supernormal -supernormally -supernormalness -supernotable -supernova -supernumeral -supernumerariness -supernumerary -supernumeraryship -supernumerous -supernutrition -superoanterior -superobedience -superobedient -superobese -superobject -superobjection -superobjectionable -superobligation -superobstinate -superoccipital -superoctave -superocular -superodorsal -superoexternal -superoffensive -superofficious -superofficiousness -superofrontal -superointernal -superolateral -superomedial -superoposterior -superopposition -superoptimal -superoptimist -superoratorical -superorbital -superordain -superorder -superordinal -superordinary -superordinate -superordination -superorganic -superorganism -superorganization -superorganize -superornament -superornamental -superosculate -superoutput -superoxalate -superoxide -superoxygenate -superoxygenation -superparamount -superparasite -superparasitic -superparasitism -superparliamentary -superpassage -superpatient -superpatriotic -superpatriotism -superperfect -superperfection -superperson -superpersonal -superpersonalism -superpetrosal -superphlogisticate -superphlogistication -superphosphate -superphysical -superpigmentation -superpious -superplausible -superplease -superplus -superpolite -superpolitic -superponderance -superponderancy -superponderant -superpopulation -superposable -superpose -superposed -superposition -superpositive -superpower -superpowered -superpraise -superprecarious -superprecise -superprelatical -superpreparation -superprinting -superprobability -superproduce -superproduction -superproportion -superprosperous -superpublicity -superpure -superpurgation -superquadrupetal -superqualify -superquote -superradical -superrational -superrationally -superreaction -superrealism -superrealist -superrefine -superrefined -superrefinement -superreflection -superreform -superreformation -superregal -superregeneration -superregenerative -superregistration -superregulation -superreliance -superremuneration -superrenal -superrequirement -superrespectable -superresponsible -superrestriction -superreward -superrheumatized -superrighteous -superromantic -superroyal -supersacerdotal -supersacral -supersacred -supersacrifice -supersafe -supersagacious -supersaint -supersaintly -supersalesman -supersaliency -supersalient -supersalt -supersanction -supersanguine -supersanity -supersarcastic -supersatisfaction -supersatisfy -supersaturate -supersaturation -superscandal -superscholarly -superscientific -superscribe -superscript -superscription -superscrive -superseaman -supersecret -supersecretion -supersecular -supersecure -supersedable -supersede -supersedeas -supersedence -superseder -supersedure -superselect -superseminate -supersemination -superseminator -supersensible -supersensibly -supersensitive -supersensitiveness -supersensitization -supersensory -supersensual -supersensualism -supersensualist -supersensualistic -supersensuality -supersensually -supersensuous -supersensuousness -supersentimental -superseptal -superseptuaginarian -superseraphical -superserious -superservice -superserviceable -superserviceableness -superserviceably -supersesquitertial -supersession -supersessive -supersevere -supershipment -supersignificant -supersilent -supersimplicity -supersimplify -supersincerity -supersingular -supersistent -supersize -supersmart -supersocial -supersoil -supersolar -supersolemn -supersolemness -supersolemnity -supersolemnly -supersolicit -supersolicitation -supersolid -supersonant -supersonic -supersovereign -supersovereignty -superspecialize -superspecies -superspecification -supersphenoid -supersphenoidal -superspinous -superspiritual -superspirituality -supersquamosal -superstage -superstamp -superstandard -superstate -superstatesman -superstimulate -superstimulation -superstition -superstitionist -superstitionless -superstitious -superstitiously -superstitiousness -superstoical -superstrain -superstrata -superstratum -superstrenuous -superstrict -superstrong -superstruct -superstruction -superstructor -superstructory -superstructural -superstructure -superstuff -superstylish -supersublimated -supersuborder -supersubsist -supersubstantial -supersubstantiality -supersubstantiate -supersubtilized -supersubtle -supersufficiency -supersufficient -supersulcus -supersulphate -supersulphuret -supersulphureted -supersulphurize -supersuperabundance -supersuperabundant -supersuperabundantly -supersuperb -supersuperior -supersupremacy -supersupreme -supersurprise -supersuspicious -supersweet -supersympathy -supersyndicate -supersystem -supertare -supertartrate -supertax -supertaxation -supertemporal -supertempt -supertemptation -supertension -superterranean -superterraneous -superterrene -superterrestrial -superthankful -superthorough -superthyroidism -supertoleration -supertonic -supertotal -supertower -supertragic -supertragical -supertrain -supertramp -supertranscendent -supertranscendently -supertreason -supertrivial -supertuchun -supertunic -supertutelary -superugly -superultrafrostified -superunfit -superunit -superunity -superuniversal -superuniverse -superurgent -supervalue -supervast -supervene -supervenience -supervenient -supervenosity -supervention -supervestment -supervexation -supervictorious -supervigilant -supervigorous -supervirulent -supervisal -supervisance -supervise -supervision -supervisionary -supervisive -supervisor -supervisorial -supervisorship -supervisory -supervisual -supervisure -supervital -supervive -supervolition -supervoluminous -supervolute -superwager -superwealthy -superweening -superwise -superwoman -superworldly -superwrought -superyacht -superzealous -supinate -supination -supinator -supine -supinely -supineness -suppedaneum -supper -suppering -supperless -suppertime -supperwards -supping -supplace -supplant -supplantation -supplanter -supplantment -supple -supplejack -supplely -supplement -supplemental -supplementally -supplementarily -supplementary -supplementation -supplementer -suppleness -suppletion -suppletive -suppletively -suppletorily -suppletory -suppliable -supplial -suppliance -suppliancy -suppliant -suppliantly -suppliantness -supplicancy -supplicant -supplicantly -supplicat -supplicate -supplicating -supplicatingly -supplication -supplicationer -supplicative -supplicator -supplicatory -supplicavit -supplice -supplier -suppling -supply -support -supportability -supportable -supportableness -supportably -supportance -supporter -supportful -supporting -supportingly -supportive -supportless -supportlessly -supportress -supposable -supposableness -supposably -supposal -suppose -supposed -supposedly -supposer -supposing -supposition -suppositional -suppositionally -suppositionary -suppositionless -suppositious -supposititious -supposititiously -supposititiousness -suppositive -suppositively -suppository -suppositum -suppost -suppress -suppressal -suppressed -suppressedly -suppresser -suppressible -suppression -suppressionist -suppressive -suppressively -suppressor -supprise -suppurant -suppurate -suppuration -suppurative -suppuratory -suprabasidorsal -suprabranchial -suprabuccal -supracaecal -supracargo -supracaudal -supracensorious -supracentenarian -suprachorioid -suprachorioidal -suprachorioidea -suprachoroid -suprachoroidal -suprachoroidea -supraciliary -supraclavicle -supraclavicular -supraclusion -supracommissure -supraconduction -supraconductor -supracondylar -supracondyloid -supraconscious -supraconsciousness -supracoralline -supracostal -supracoxal -supracranial -supracretaceous -supradecompound -supradental -supradorsal -supradural -suprafeminine -suprafine -suprafoliaceous -suprafoliar -supraglacial -supraglenoid -supraglottic -supragovernmental -suprahepatic -suprahistorical -suprahuman -suprahumanity -suprahyoid -suprailiac -suprailium -supraintellectual -suprainterdorsal -suprajural -supralabial -supralapsarian -supralapsarianism -supralateral -supralegal -supraliminal -supraliminally -supralineal -supralinear -supralocal -supralocally -supraloral -supralunar -supralunary -supramammary -supramarginal -supramarine -supramastoid -supramaxilla -supramaxillary -supramaximal -suprameatal -supramechanical -supramedial -supramental -supramolecular -supramoral -supramortal -supramundane -supranasal -supranational -supranatural -supranaturalism -supranaturalist -supranaturalistic -supranature -supranervian -supraneural -supranormal -supranuclear -supraoccipital -supraocclusion -supraocular -supraoesophagal -supraoesophageal -supraoptimal -supraoptional -supraoral -supraorbital -supraorbitar -supraordinary -supraordinate -supraordination -suprapapillary -suprapedal -suprapharyngeal -supraposition -supraprotest -suprapubian -suprapubic -suprapygal -supraquantivalence -supraquantivalent -suprarational -suprarationalism -suprarationality -suprarenal -suprarenalectomize -suprarenalectomy -suprarenalin -suprarenine -suprarimal -suprasaturate -suprascapula -suprascapular -suprascapulary -suprascript -suprasegmental -suprasensible -suprasensitive -suprasensual -suprasensuous -supraseptal -suprasolar -suprasoriferous -suprasphanoidal -supraspinal -supraspinate -supraspinatus -supraspinous -suprasquamosal -suprastandard -suprastapedial -suprastate -suprasternal -suprastigmal -suprasubtle -supratemporal -supraterraneous -supraterrestrial -suprathoracic -supratonsillar -supratrochlear -supratropical -supratympanic -supravaginal -supraventricular -supraversion -supravital -supraworld -supremacy -suprematism -supreme -supremely -supremeness -supremity -sur -sura -suraddition -surah -surahi -sural -suralimentation -suranal -surangular -surat -surbase -surbased -surbasement -surbate -surbater -surbed -surcease -surcharge -surcharger -surcingle -surcoat -surcrue -surculi -surculigerous -surculose -surculous -surculus -surd -surdation -surdeline -surdent -surdimutism -surdity -surdomute -sure -surely -sureness -sures -surette -surety -suretyship -surexcitation -surf -surface -surfaced -surfacedly -surfaceless -surfacely -surfaceman -surfacer -surfacing -surfactant -surfacy -surfbird -surfboard -surfboarding -surfboat -surfboatman -surfeit -surfeiter -surfer -surficial -surfle -surflike -surfman -surfmanship -surfrappe -surfuse -surfusion -surfy -surge -surgeful -surgeless -surgent -surgeon -surgeoncy -surgeoness -surgeonfish -surgeonless -surgeonship -surgeproof -surgerize -surgery -surgical -surgically -surginess -surging -surgy -suricate -suriga -surinamine -surlily -surliness -surly -surma -surmark -surmaster -surmisable -surmisal -surmisant -surmise -surmised -surmisedly -surmiser -surmount -surmountable -surmountableness -surmountal -surmounted -surmounter -surmullet -surname -surnamer -surnap -surnay -surnominal -surpass -surpassable -surpasser -surpassing -surpassingly -surpassingness -surpeopled -surplice -surpliced -surplicewise -surplician -surplus -surplusage -surpreciation -surprint -surprisable -surprisal -surprise -surprisedly -surprisement -surpriseproof -surpriser -surprising -surprisingly -surprisingness -surquedry -surquidry -surquidy -surra -surrealism -surrealist -surrealistic -surrealistically -surrebound -surrebut -surrebuttal -surrebutter -surrection -surrejoin -surrejoinder -surrenal -surrender -surrenderee -surrenderer -surrenderor -surreption -surreptitious -surreptitiously -surreptitiousness -surreverence -surreverently -surrey -surrogacy -surrogate -surrogateship -surrogation -surrosion -surround -surrounded -surroundedly -surrounder -surrounding -surroundings -sursaturation -sursolid -sursumduction -sursumvergence -sursumversion -surtax -surtout -surturbrand -surveillance -surveillant -survey -surveyable -surveyage -surveyal -surveyance -surveying -surveyor -surveyorship -survigrous -survivability -survivable -survival -survivalism -survivalist -survivance -survivancy -survive -surviver -surviving -survivor -survivoress -survivorship -susannite -suscept -susceptance -susceptibility -susceptible -susceptibleness -susceptibly -susception -susceptive -susceptiveness -susceptivity -susceptor -suscitate -suscitation -susi -suslik -susotoxin -suspect -suspectable -suspected -suspectedness -suspecter -suspectful -suspectfulness -suspectible -suspectless -suspector -suspend -suspended -suspender -suspenderless -suspenders -suspendibility -suspendible -suspensation -suspense -suspenseful -suspensely -suspensibility -suspensible -suspension -suspensive -suspensively -suspensiveness -suspensoid -suspensor -suspensorial -suspensorium -suspensory -suspercollate -suspicion -suspicionable -suspicional -suspicionful -suspicionless -suspicious -suspiciously -suspiciousness -suspiration -suspiratious -suspirative -suspire -suspirious -sussexite -sussultatory -sussultorial -sustain -sustainable -sustained -sustainer -sustaining -sustainingly -sustainment -sustanedly -sustenance -sustenanceless -sustentacula -sustentacular -sustentaculum -sustentation -sustentational -sustentative -sustentator -sustention -sustentive -sustentor -susu -susurr -susurrant -susurrate -susurration -susurringly -susurrous -susurrus -suterbery -suther -sutile -sutler -sutlerage -sutleress -sutlership -sutlery -sutor -sutorial -sutorian -sutorious -sutra -suttee -sutteeism -sutten -suttin -suttle -sutural -suturally -suturation -suture -suum -suwarro -suwe -suz -suzerain -suzeraine -suzerainship -suzerainty -svarabhakti -svarabhaktic -svelte -sviatonosite -swa -swab -swabber -swabberly -swabble -swack -swacken -swacking -swad -swaddle -swaddlebill -swaddler -swaddling -swaddy -swag -swagbellied -swagbelly -swage -swager -swagger -swaggerer -swaggering -swaggeringly -swaggie -swaggy -swaglike -swagman -swagsman -swaimous -swain -swainish -swainishness -swainship -swainsona -swaird -swale -swaler -swaling -swalingly -swallet -swallo -swallow -swallowable -swallower -swallowlike -swallowling -swallowpipe -swallowtail -swallowwort -swam -swami -swamp -swampable -swampberry -swamper -swampish -swampishness -swampland -swampside -swampweed -swampwood -swampy -swan -swandown -swanflower -swang -swangy -swanherd -swanhood -swanimote -swank -swanker -swankily -swankiness -swanking -swanky -swanlike -swanmark -swanmarker -swanmarking -swanneck -swannecked -swanner -swannery -swannish -swanny -swanskin -swanweed -swanwort -swap -swape -swapper -swapping -swaraj -swarajism -swarajist -swarbie -sward -swardy -sware -swarf -swarfer -swarm -swarmer -swarming -swarmy -swarry -swart -swartback -swarth -swarthily -swarthiness -swarthness -swarthy -swartish -swartly -swartness -swartrutter -swartrutting -swarty -swarve -swash -swashbuckle -swashbuckler -swashbucklerdom -swashbucklering -swashbucklery -swashbuckling -swasher -swashing -swashway -swashwork -swashy -swastika -swastikaed -swat -swatch -swatcher -swatchway -swath -swathable -swathband -swathe -swatheable -swather -swathy -swatter -swattle -swaver -sway -swayable -swayed -swayer -swayful -swaying -swayingly -swayless -sweal -sweamish -swear -swearer -swearingly -swearword -sweat -sweatband -sweatbox -sweated -sweater -sweatful -sweath -sweatily -sweatiness -sweating -sweatless -sweatproof -sweatshop -sweatweed -sweaty -swedge -sweeny -sweep -sweepable -sweepage -sweepback -sweepboard -sweepdom -sweeper -sweeperess -sweepforward -sweeping -sweepingly -sweepingness -sweepings -sweepstake -sweepwasher -sweepwashings -sweepy -sweer -sweered -sweet -sweetberry -sweetbread -sweetbrier -sweetbriery -sweeten -sweetener -sweetening -sweetfish -sweetful -sweetheart -sweetheartdom -sweethearted -sweetheartedness -sweethearting -sweetheartship -sweetie -sweeting -sweetish -sweetishly -sweetishness -sweetleaf -sweetless -sweetlike -sweetling -sweetly -sweetmaker -sweetmeat -sweetmouthed -sweetness -sweetroot -sweetshop -sweetsome -sweetsop -sweetwater -sweetweed -sweetwood -sweetwort -sweety -swego -swelchie -swell -swellage -swelldom -swelldoodle -swelled -sweller -swellfish -swelling -swellish -swellishness -swellmobsman -swellness -swelltoad -swelly -swelp -swelt -swelter -sweltering -swelteringly -swelth -sweltry -swelty -swep -swept -swerd -swerve -swerveless -swerver -swervily -swick -swidge -swift -swiften -swifter -swiftfoot -swiftlet -swiftlike -swiftness -swifty -swig -swigger -swiggle -swile -swill -swillbowl -swiller -swilltub -swim -swimmable -swimmer -swimmeret -swimmily -swimminess -swimming -swimmingly -swimmingness -swimmist -swimmy -swimsuit -swimy -swindle -swindleable -swindledom -swindler -swindlership -swindlery -swindling -swindlingly -swine -swinebread -swinecote -swinehead -swineherd -swineherdship -swinehood -swinehull -swinelike -swinely -swinepipe -swinery -swinestone -swinesty -swiney -swing -swingable -swingback -swingdevil -swingdingle -swinge -swingeing -swinger -swinging -swingingly -swingle -swinglebar -swingletail -swingletree -swingstock -swingtree -swingy -swinish -swinishly -swinishness -swink -swinney -swipe -swiper -swipes -swiple -swipper -swipy -swird -swire -swirl -swirlingly -swirly -swirring -swish -swisher -swishing -swishingly -swishy -swiss -swissing -switch -switchback -switchbacker -switchboard -switched -switchel -switcher -switchgear -switching -switchkeeper -switchlike -switchman -switchy -switchyard -swith -swithe -swithen -swither -swivel -swiveled -swiveleye -swiveleyed -swivellike -swivet -swivetty -swiz -swizzle -swizzler -swob -swollen -swollenly -swollenness -swom -swonken -swoon -swooned -swooning -swooningly -swoony -swoop -swooper -swoosh -sword -swordbill -swordcraft -swordfish -swordfisherman -swordfishery -swordfishing -swordick -swording -swordless -swordlet -swordlike -swordmaker -swordmaking -swordman -swordmanship -swordplay -swordplayer -swordproof -swordsman -swordsmanship -swordsmith -swordster -swordstick -swordswoman -swordtail -swordweed -swore -sworn -swosh -swot -swotter -swounds -swow -swum -swung -swungen -swure -syagush -sybarism -sybarist -sybaritism -sybotic -sybotism -sycamine -sycamore -syce -sycee -sychnocarpous -sycock -sycoma -sycomancy -syconarian -syconate -syconid -syconium -syconoid -syconus -sycophancy -sycophant -sycophantic -sycophantical -sycophantically -sycophantish -sycophantishly -sycophantism -sycophantize -sycophantry -sycosiform -sycosis -sye -syenite -syenitic -syenodiorite -syenogabbro -sylid -syllab -syllabarium -syllabary -syllabatim -syllabation -syllabe -syllabi -syllabic -syllabical -syllabically -syllabicate -syllabication -syllabicness -syllabification -syllabify -syllabism -syllabize -syllable -syllabled -syllabus -syllepsis -sylleptic -sylleptical -sylleptically -syllidian -sylloge -syllogism -syllogist -syllogistic -syllogistical -syllogistically -syllogistics -syllogization -syllogize -syllogizer -sylph -sylphic -sylphid -sylphidine -sylphish -sylphize -sylphlike -sylphy -sylva -sylvae -sylvage -sylvan -sylvanesque -sylvanite -sylvanitic -sylvanity -sylvanize -sylvanly -sylvanry -sylvate -sylvatic -sylvester -sylvestral -sylvestrene -sylvestrian -sylvic -sylvicoline -sylviine -sylvine -sylvinite -sylvite -symbasic -symbasical -symbasically -symbasis -symbiogenesis -symbiogenetic -symbiogenetically -symbion -symbiont -symbiontic -symbionticism -symbiosis -symbiot -symbiote -symbiotic -symbiotically -symbiotics -symbiotism -symbiotrophic -symblepharon -symbol -symbolaeography -symbolater -symbolatrous -symbolatry -symbolic -symbolical -symbolically -symbolicalness -symbolicly -symbolics -symbolism -symbolist -symbolistic -symbolistical -symbolistically -symbolization -symbolize -symbolizer -symbolofideism -symbological -symbologist -symbolography -symbology -symbololatry -symbolology -symbolry -symbouleutic -symbranch -symbranchiate -symbranchoid -symbranchous -symmachy -symmedian -symmelia -symmelian -symmelus -symmetalism -symmetral -symmetric -symmetrical -symmetricality -symmetrically -symmetricalness -symmetrist -symmetrization -symmetrize -symmetroid -symmetrophobia -symmetry -symmorphic -symmorphism -sympalmograph -sympathectomize -sympathectomy -sympathetectomy -sympathetic -sympathetical -sympathetically -sympatheticism -sympatheticity -sympatheticness -sympatheticotonia -sympatheticotonic -sympathetoblast -sympathicoblast -sympathicotonia -sympathicotonic -sympathicotripsy -sympathism -sympathist -sympathize -sympathizer -sympathizing -sympathizingly -sympathoblast -sympatholysis -sympatholytic -sympathomimetic -sympathy -sympatric -sympatry -sympetalous -symphenomena -symphenomenal -symphile -symphilic -symphilism -symphilous -symphily -symphogenous -symphonetic -symphonia -symphonic -symphonically -symphonion -symphonious -symphoniously -symphonist -symphonize -symphonous -symphony -symphoricarpous -symphrase -symphronistic -symphyantherous -symphycarpous -symphylan -symphyllous -symphylous -symphynote -symphyogenesis -symphyogenetic -symphyostemonous -symphyseal -symphyseotomy -symphysial -symphysian -symphysic -symphysion -symphysiotomy -symphysis -symphysodactylia -symphysotomy -symphysy -symphytic -symphytically -symphytism -symphytize -sympiesometer -symplasm -symplectic -symplesite -symplocaceous -symploce -sympode -sympodia -sympodial -sympodially -sympodium -sympolity -symposia -symposiac -symposiacal -symposial -symposiarch -symposiast -symposiastic -symposion -symposium -symptom -symptomatic -symptomatical -symptomatically -symptomatics -symptomatize -symptomatography -symptomatological -symptomatologically -symptomatology -symptomical -symptomize -symptomless -symptosis -symtomology -synacme -synacmic -synacmy -synactic -synadelphite -synaeresis -synagogal -synagogian -synagogical -synagogism -synagogist -synagogue -synalgia -synalgic -synallactic -synallagmatic -synaloepha -synanastomosis -synange -synangia -synangial -synangic -synangium -synanthema -synantherological -synantherologist -synantherology -synantherous -synanthesis -synanthetic -synanthic -synanthous -synanthrose -synanthy -synaphea -synaposematic -synapse -synapses -synapsidan -synapsis -synaptai -synaptase -synapte -synaptene -synapterous -synaptic -synaptical -synaptically -synapticula -synapticulae -synapticular -synapticulate -synapticulum -synaptychus -synarchical -synarchism -synarchy -synarmogoid -synarquism -synartesis -synartete -synartetic -synarthrodia -synarthrodial -synarthrodially -synarthrosis -synascidian -synastry -synaxar -synaxarion -synaxarist -synaxarium -synaxary -synaxis -sync -syncarp -syncarpia -syncarpium -syncarpous -syncarpy -syncategorematic -syncategorematical -syncategorematically -syncategoreme -syncephalic -syncephalus -syncerebral -syncerebrum -synch -synchitic -synchondoses -synchondrosial -synchondrosially -synchondrosis -synchondrotomy -synchoresis -synchro -synchroflash -synchromesh -synchronal -synchrone -synchronic -synchronical -synchronically -synchronism -synchronistic -synchronistical -synchronistically -synchronizable -synchronization -synchronize -synchronized -synchronizer -synchronograph -synchronological -synchronology -synchronous -synchronously -synchronousness -synchrony -synchroscope -synchrotron -synchysis -syncladous -synclastic -synclinal -synclinally -syncline -synclinical -synclinore -synclinorial -synclinorian -synclinorium -synclitic -syncliticism -synclitism -syncoelom -syncopal -syncopate -syncopated -syncopation -syncopator -syncope -syncopic -syncopism -syncopist -syncopize -syncotyledonous -syncracy -syncraniate -syncranterian -syncranteric -syncrasy -syncretic -syncretical -syncreticism -syncretion -syncretism -syncretist -syncretistic -syncretistical -syncretize -syncrisis -syncryptic -syncytia -syncytial -syncytioma -syncytiomata -syncytium -syndactyl -syndactylia -syndactylic -syndactylism -syndactylous -syndactyly -syndectomy -synderesis -syndesis -syndesmectopia -syndesmitis -syndesmography -syndesmology -syndesmoma -syndesmoplasty -syndesmorrhaphy -syndesmosis -syndesmotic -syndesmotomy -syndetic -syndetical -syndetically -syndic -syndical -syndicalism -syndicalist -syndicalistic -syndicalize -syndicate -syndicateer -syndication -syndicator -syndicship -syndoc -syndrome -syndromic -syndyasmian -syne -synecdoche -synecdochic -synecdochical -synecdochically -synecdochism -synechia -synechiological -synechiology -synechological -synechology -synechotomy -synechthran -synechthry -synecology -synecphonesis -synectic -synecticity -synedral -synedria -synedrial -synedrian -synedrion -synedrium -synedrous -syneidesis -synema -synemmenon -synenergistic -synenergistical -synenergistically -synentognath -synentognathous -syneresis -synergastic -synergetic -synergia -synergic -synergically -synergid -synergidae -synergidal -synergism -synergist -synergistic -synergistical -synergistically -synergize -synergy -synerize -synesis -synesthesia -synesthetic -synethnic -syngamic -syngamous -syngamy -syngenesian -syngenesious -syngenesis -syngenetic -syngenic -syngenism -syngenite -syngnathid -syngnathoid -syngnathous -syngraph -synizesis -synkaryon -synkatathesis -synkinesia -synkinesis -synkinetic -synneurosis -synneusis -synochoid -synochus -synocreate -synod -synodal -synodalian -synodalist -synodally -synodical -synodically -synodist -synodite -synodontid -synodontoid -synodsman -synoecete -synoeciosis -synoecious -synoeciously -synoeciousness -synoecism -synoecize -synoecy -synoicous -synomosy -synonym -synonymatic -synonymic -synonymical -synonymicon -synonymics -synonymist -synonymity -synonymize -synonymous -synonymously -synonymousness -synonymy -synophthalmus -synopses -synopsis -synopsize -synopsy -synoptic -synoptical -synoptically -synoptist -synorchidism -synorchism -synorthographic -synosteology -synosteosis -synostose -synostosis -synostotic -synostotical -synostotically -synousiacs -synovectomy -synovia -synovial -synovially -synoviparous -synovitic -synovitis -synpelmous -synrhabdosome -synsacral -synsacrum -synsepalous -synspermous -synsporous -syntactic -syntactical -syntactically -syntactician -syntactics -syntagma -syntan -syntasis -syntax -syntaxis -syntaxist -syntechnic -syntectic -syntelome -syntenosis -synteresis -syntexis -syntheme -synthermal -syntheses -synthesis -synthesism -synthesist -synthesization -synthesize -synthesizer -synthete -synthetic -synthetical -synthetically -syntheticism -synthetism -synthetist -synthetization -synthetize -synthetizer -synthol -synthroni -synthronoi -synthronos -synthronus -syntomia -syntomy -syntone -syntonic -syntonical -syntonically -syntonin -syntonization -syntonize -syntonizer -syntonolydian -syntonous -syntony -syntripsis -syntrope -syntrophic -syntropic -syntropical -syntropy -syntype -syntypic -syntypicism -synusia -synusiast -syodicon -sypher -syphilide -syphilidography -syphilidologist -syphiliphobia -syphilis -syphilitic -syphilitically -syphilization -syphilize -syphiloderm -syphilodermatous -syphilogenesis -syphilogeny -syphilographer -syphilography -syphiloid -syphilologist -syphilology -syphiloma -syphilomatous -syphilophobe -syphilophobia -syphilophobic -syphilopsychosis -syphilosis -syphilous -syre -syringa -syringadenous -syringe -syringeal -syringeful -syringes -syringin -syringitis -syringium -syringocoele -syringomyelia -syringomyelic -syringotome -syringotomy -syrinx -syrma -syrphian -syrphid -syrt -syrtic -syrup -syruped -syruper -syruplike -syrupy -syssarcosis -syssel -sysselman -syssiderite -syssitia -syssition -systaltic -systasis -systatic -system -systematic -systematical -systematicality -systematically -systematician -systematicness -systematics -systematism -systematist -systematization -systematize -systematizer -systematology -systemed -systemic -systemically -systemist -systemizable -systemization -systemize -systemizer -systemless -systemproof -systemwise -systilius -systolated -systole -systolic -systyle -systylous -syzygetic -syzygetically -syzygial -syzygium -syzygy -szaibelyite -szlachta -szopelka -t -ta -taa -taar -tab -tabacin -tabacosis -tabacum -tabanid -tabaniform -tabanuco -tabard -tabarded -tabaret -tabasheer -tabashir -tabaxir -tabbarea -tabber -tabbinet -tabby -tabefaction -tabefy -tabella -tabellion -taberdar -taberna -tabernacle -tabernacler -tabernacular -tabernariae -tabes -tabescence -tabescent -tabet -tabetic -tabetiform -tabetless -tabic -tabid -tabidly -tabidness -tabific -tabifical -tabinet -tabitude -tabla -tablature -table -tableau -tableaux -tablecloth -tableclothwise -tableclothy -tabled -tablefellow -tablefellowship -tableful -tableity -tableland -tableless -tablelike -tablemaid -tablemaker -tablemaking -tableman -tablemate -tabler -tables -tablespoon -tablespoonful -tablet -tabletary -tableware -tablewise -tabling -tablinum -tabloid -tabog -taboo -tabooism -tabooist -taboot -taboparalysis -taboparesis -taboparetic -tabophobia -tabor -taborer -taboret -taborin -tabour -tabourer -tabouret -tabret -tabu -tabula -tabulable -tabular -tabulare -tabularium -tabularization -tabularize -tabularly -tabulary -tabulate -tabulated -tabulation -tabulator -tabulatory -tabule -tabuliform -tabut -tacahout -tacamahac -taccaceous -taccada -tach -tache -tacheless -tacheography -tacheometer -tacheometric -tacheometry -tacheture -tachhydrite -tachibana -tachinarian -tachinid -tachiol -tachistoscope -tachistoscopic -tachogram -tachograph -tachometer -tachometry -tachoscope -tachycardia -tachycardiac -tachygen -tachygenesis -tachygenetic -tachygenic -tachyglossal -tachyglossate -tachygraph -tachygrapher -tachygraphic -tachygraphical -tachygraphically -tachygraphist -tachygraphometer -tachygraphometry -tachygraphy -tachyhydrite -tachyiatry -tachylalia -tachylite -tachylyte -tachylytic -tachymeter -tachymetric -tachymetry -tachyphagia -tachyphasia -tachyphemia -tachyphrasia -tachyphrenia -tachypnea -tachyscope -tachyseism -tachysterol -tachysystole -tachythanatous -tachytomy -tachytype -tacit -tacitly -tacitness -taciturn -taciturnist -taciturnity -taciturnly -tack -tacker -tacket -tackety -tackey -tackiness -tacking -tackingly -tackle -tackled -tackleless -tackleman -tackler -tackless -tackling -tackproof -tacksman -tacky -taclocus -tacmahack -tacnode -taconite -tacso -tact -tactable -tactful -tactfully -tactfulness -tactic -tactical -tactically -tactician -tactics -tactile -tactilist -tactility -tactilogical -tactinvariant -taction -tactite -tactive -tactless -tactlessly -tactlessness -tactometer -tactor -tactosol -tactual -tactualist -tactuality -tactually -tactus -tacuacine -tad -tade -tadpole -tadpoledom -tadpolehood -tadpolelike -tadpolism -tae -tael -taen -taenia -taeniacidal -taeniacide -taeniafuge -taenial -taenian -taeniasis -taeniate -taenicide -taenidium -taeniform -taenifuge -taeniiform -taeniobranchiate -taenioglossate -taenioid -taeniosome -taeniosomous -taenite -taennin -taffarel -tafferel -taffeta -taffety -taffle -taffrail -taffy -taffylike -taffymaker -taffymaking -taffywise -tafia -tafinagh -taft -tafwiz -tag -tagasaste -tagatose -tagboard -tagetol -tagetone -tagged -tagger -taggle -taggy -tagilite -taglet -taglike -taglock -tagrag -tagraggery -tagsore -tagtail -tagua -taguan -tagwerk -taha -taheen -tahil -tahin -tahkhana -tahr -tahseeldar -tahsil -tahsildar -tahua -tai -taiaha -taich -taiga -taigle -taiglesome -taihoa -taikhana -tail -tailage -tailband -tailboard -tailed -tailender -tailer -tailet -tailfirst -tailflower -tailforemost -tailge -tailhead -tailing -tailings -taille -tailless -taillessly -taillessness -taillie -taillight -taillike -tailor -tailorage -tailorbird -tailorcraft -tailordom -tailoress -tailorhood -tailoring -tailorism -tailorization -tailorize -tailorless -tailorlike -tailorly -tailorman -tailorship -tailorwise -tailory -tailpiece -tailpin -tailpipe -tailrace -tailsman -tailstock -tailward -tailwards -tailwise -taily -tailzee -tailzie -taimen -taimyrite -tain -taint -taintable -taintless -taintlessly -taintlessness -taintment -taintor -taintproof -tainture -taintworm -taipan -taipo -tairge -tairger -tairn -taisch -taise -taissle -taistrel -taistril -tait -taiver -taivers -taivert -taj -takable -takamaka -takar -take -takedown -takedownable -takeful -taken -taker -takin -taking -takingly -takingness -takings -takosis -takt -taky -takyr -tal -tala -talabon -talahib -talaje -talak -talalgia -talanton -talao -talapoin -talar -talari -talaria -talaric -talayot -talbot -talbotype -talc -talcer -talcky -talclike -talcochlorite -talcoid -talcomicaceous -talcose -talcous -talcum -tald -tale -talebearer -talebearing -talebook -talecarrier -talecarrying -taled -taleful -talemaster -talemonger -talemongering -talent -talented -talentless -talepyet -taler -tales -talesman -taleteller -taletelling -tali -taliage -taliation -taliera -taligrade -talion -talionic -talipat -taliped -talipedic -talipes -talipomanus -talipot -talis -talisay -talisman -talismanic -talismanical -talismanically -talismanist -talite -talitol -talk -talkability -talkable -talkathon -talkative -talkatively -talkativeness -talker -talkfest -talkful -talkie -talkiness -talking -talkworthy -talky -tall -tallage -tallageability -tallageable -tallboy -tallegalane -taller -tallero -talles -tallet -talliable -talliage -talliar -talliate -tallier -tallis -tallish -tallit -tallith -tallness -talloel -tallote -tallow -tallowberry -tallower -tallowiness -tallowing -tallowish -tallowlike -tallowmaker -tallowmaking -tallowman -tallowroot -tallowweed -tallowwood -tallowy -tallwood -tally -tallyho -tallyman -tallymanship -tallywag -tallywalka -tallywoman -talma -talmouse -talocalcaneal -talocalcanean -talocrural -talofibular -talon -talonavicular -taloned -talonic -talonid -taloscaphoid -talose -talotibial -talpacoti -talpatate -talpetate -talpicide -talpid -talpiform -talpify -talpine -talpoid -talthib -taluk -taluka -talukdar -talukdari -talus -taluto -talwar -talwood -tam -tamability -tamable -tamableness -tamably -tamacoare -tamale -tamandu -tamandua -tamanoas -tamanoir -tamanowus -tamanu -tamara -tamarack -tamaraite -tamarao -tamaricaceous -tamarin -tamarind -tamarisk -tamas -tamasha -tambac -tambaroora -tamber -tambo -tamboo -tambookie -tambor -tambour -tamboura -tambourer -tambouret -tambourgi -tambourin -tambourinade -tambourine -tambourist -tambreet -tamburan -tamburello -tame -tamehearted -tameheartedness -tamein -tameless -tamelessly -tamelessness -tamely -tameness -tamer -tamidine -tamis -tamise -tamlung -tammie -tammock -tammy -tamp -tampala -tampan -tampang -tamper -tamperer -tamperproof -tampin -tamping -tampion -tampioned -tampon -tamponade -tamponage -tamponment -tampoon -tan -tana -tanacetin -tanacetone -tanacetyl -tanach -tanager -tanagrine -tanagroid -tanaist -tanak -tanan -tanbark -tanbur -tancel -tanchoir -tandan -tandem -tandemer -tandemist -tandemize -tandemwise -tandle -tandour -tane -tanekaha -tang -tanga -tangalung -tangantangan -tanged -tangeite -tangelo -tangence -tangency -tangent -tangental -tangentally -tangential -tangentiality -tangentially -tangently -tanger -tangfish -tangham -tanghan -tanghin -tanghinin -tangi -tangibile -tangibility -tangible -tangibleness -tangibly -tangie -tangilin -tangka -tanglad -tangle -tangleberry -tanglefish -tanglefoot -tanglement -tangleproof -tangler -tangleroot -tanglesome -tangless -tanglewrack -tangling -tanglingly -tangly -tango -tangoreceptor -tangram -tangs -tangue -tanguile -tangum -tangun -tangy -tanh -tanha -tanhouse -tania -tanica -tanier -tanist -tanistic -tanistry -tanistship -tanjib -tanjong -tank -tanka -tankage -tankah -tankard -tanked -tanker -tankerabogus -tankert -tankette -tankful -tankle -tankless -tanklike -tankmaker -tankmaking -tankman -tankodrome -tankroom -tankwise -tanling -tannable -tannage -tannaic -tannaim -tannaitic -tannalbin -tannase -tannate -tanned -tanner -tannery -tannic -tannide -tanniferous -tannin -tannined -tanning -tanninlike -tannocaffeic -tannogallate -tannogallic -tannogelatin -tannogen -tannoid -tannometer -tannyl -tanoa -tanproof -tanquam -tanquen -tanrec -tanstuff -tansy -tantadlin -tantafflin -tantalate -tantalic -tantaliferous -tantalifluoride -tantalite -tantalization -tantalize -tantalizer -tantalizingly -tantalizingness -tantalofluoride -tantalum -tantamount -tantara -tantarabobus -tantarara -tanti -tantivy -tantle -tantra -tantric -tantrik -tantrism -tantrist -tantrum -tantum -tanwood -tanworks -tanyard -tanystomatous -tanystome -tanzeb -tanzib -tanzy -tao -taotai -taoyin -tap -tapa -tapacolo -tapaculo -tapadera -tapadero -tapalo -tapamaker -tapamaking -tapas -tapasvi -tape -tapeinocephalic -tapeinocephalism -tapeinocephaly -tapeless -tapelike -tapeline -tapemaker -tapemaking -tapeman -tapen -taper -taperbearer -tapered -taperer -tapering -taperingly -taperly -tapermaker -tapermaking -taperness -taperwise -tapesium -tapestring -tapestry -tapestrylike -tapet -tapetal -tapete -tapeti -tapetless -tapetum -tapework -tapeworm -taphephobia -taphole -taphouse -tapia -tapinceophalism -tapinocephalic -tapinocephaly -tapinophobia -tapinophoby -tapinosis -tapioca -tapir -tapiridian -tapirine -tapiroid -tapis -tapism -tapist -taplash -taplet -tapmost -tapnet -tapoa -tapoun -tappa -tappable -tappableness -tappall -tappaul -tappen -tapper -tapperer -tappet -tappietoorie -tapping -tappoon -taproom -taproot -taprooted -taps -tapster -tapsterlike -tapsterly -tapstress -tapu -tapul -taqua -tar -tara -tarabooka -taraf -tarafdar -tarage -tarairi -tarakihi -taramellite -tarand -tarantara -tarantass -tarantella -tarantism -tarantist -tarantula -tarantular -tarantulary -tarantulated -tarantulid -tarantulism -tarantulite -tarantulous -tarapatch -taraph -tarapin -tarassis -tarata -taratah -taratantara -taratantarize -tarau -taraxacerin -taraxacin -tarbadillo -tarbet -tarboard -tarbogan -tarboggin -tarboosh -tarbooshed -tarboy -tarbrush -tarbush -tarbuttite -tardigrade -tardigradous -tardily -tardiness -tarditude -tardive -tardle -tardy -tare -tarea -tarefa -tarefitch -tarentala -tarente -tarentism -tarentola -tarepatch -tarfa -tarflower -targe -targeman -targer -target -targeted -targeteer -targetlike -targetman -tarhood -tari -tarie -tariff -tariffable -tariffication -tariffism -tariffist -tariffite -tariffize -tariffless -tarin -tariric -taririnic -tarish -tarkashi -tarkeean -tarkhan -tarlatan -tarlataned -tarletan -tarlike -tarltonize -tarmac -tarman -tarmined -tarn -tarnal -tarnally -tarnation -tarnish -tarnishable -tarnisher -tarnishment -tarnishproof -tarnlike -tarnside -taro -taroc -tarocco -tarok -taropatch -tarot -tarp -tarpan -tarpaulin -tarpaulinmaker -tarpon -tarpot -tarpum -tarr -tarrack -tarradiddle -tarradiddler -tarragon -tarragona -tarras -tarrass -tarred -tarrer -tarri -tarriance -tarrie -tarrier -tarrify -tarrily -tarriness -tarrish -tarrock -tarrow -tarry -tarrying -tarryingly -tarryingness -tars -tarsadenitis -tarsal -tarsale -tarsalgia -tarse -tarsectomy -tarsectopia -tarsi -tarsia -tarsier -tarsioid -tarsitis -tarsochiloplasty -tarsoclasis -tarsomalacia -tarsome -tarsometatarsal -tarsometatarsus -tarsonemid -tarsophalangeal -tarsophyma -tarsoplasia -tarsoplasty -tarsoptosis -tarsorrhaphy -tarsotarsal -tarsotibal -tarsotomy -tarsus -tart -tartago -tartan -tartana -tartane -tartar -tartarated -tartareous -tartaret -tartaric -tartarish -tartarization -tartarize -tartarly -tartarous -tartarproof -tartarum -tartemorion -tarten -tartish -tartishly -tartle -tartlet -tartly -tartness -tartramate -tartramic -tartramide -tartrate -tartrated -tartratoferric -tartrazine -tartrazinic -tartro -tartronate -tartronic -tartronyl -tartronylurea -tartrous -tartryl -tartrylic -tartufery -tartufian -tartufish -tartufishly -tartufism -tartwoman -tarve -tarweed -tarwhine -tarwood -tarworks -taryard -tasajo -tascal -tasco -taseometer -tash -tasheriff -tashie -tashlik -tashreef -tashrif -tasimeter -tasimetric -tasimetry -task -taskage -tasker -taskit -taskless -tasklike -taskmaster -taskmastership -taskmistress -tasksetter -tasksetting -taskwork -taslet -tasmanite -tass -tassago -tassah -tassal -tassard -tasse -tassel -tasseler -tasselet -tasselfish -tassellus -tasselmaker -tasselmaking -tassely -tasser -tasset -tassie -tassoo -tastable -tastableness -tastably -taste -tasteable -tasteableness -tasteably -tasted -tasteful -tastefully -tastefulness -tastekin -tasteless -tastelessly -tastelessness -tasten -taster -tastily -tastiness -tasting -tastingly -tasty -tasu -tat -tataupa -tatbeb -tatchy -tate -tater -tath -tatie -tatinek -tatler -tatou -tatouay -tatpurusha -tatsman -tatta -tatter -tatterdemalion -tatterdemalionism -tatterdemalionry -tattered -tatteredly -tatteredness -tatterly -tatterwallop -tattery -tatther -tattied -tatting -tattle -tattlement -tattler -tattlery -tattletale -tattling -tattlingly -tattoo -tattooage -tattooer -tattooing -tattooist -tattooment -tattva -tatty -tatu -tatukira -tau -taught -taula -taum -taun -taunt -taunter -taunting -tauntingly -tauntingness -tauntress -taupe -taupo -taupou -taur -tauranga -taurean -taurian -tauric -tauricide -tauricornous -tauriferous -tauriform -taurine -taurite -taurobolium -tauroboly -taurocephalous -taurocholate -taurocholic -taurocol -taurocolla -taurodont -tauroesque -taurokathapsia -taurolatry -tauromachian -tauromachic -tauromachy -tauromorphic -tauromorphous -taurophile -taurophobe -tauryl -taut -tautaug -tauted -tautegorical -tautegory -tauten -tautirite -tautit -tautly -tautness -tautochrone -tautochronism -tautochronous -tautog -tautologic -tautological -tautologically -tautologicalness -tautologism -tautologist -tautologize -tautologizer -tautologous -tautologously -tautology -tautomer -tautomeral -tautomeric -tautomerism -tautomerizable -tautomerization -tautomerize -tautomery -tautometer -tautometric -tautometrical -tautomorphous -tautonym -tautonymic -tautonymy -tautoousian -tautoousious -tautophonic -tautophonical -tautophony -tautopodic -tautopody -tautosyllabic -tautotype -tautourea -tautousian -tautousious -tautozonal -tautozonality -tav -tave -tavell -taver -tavern -taverner -tavernize -tavernless -tavernlike -tavernly -tavernous -tavernry -tavernwards -tavers -tavert -tavistockite -tavola -tavolatite -taw -tawa -tawdered -tawdrily -tawdriness -tawdry -tawer -tawery -tawie -tawite -tawkee -tawkin -tawn -tawney -tawnily -tawniness -tawnle -tawny -tawpi -tawpie -taws -tawse -tawtie -tax -taxability -taxable -taxableness -taxably -taxaceous -taxameter -taxaspidean -taxation -taxational -taxative -taxatively -taxator -taxeater -taxeating -taxed -taxeme -taxemic -taxeopod -taxeopodous -taxeopody -taxer -taxgatherer -taxgathering -taxi -taxiable -taxiarch -taxiauto -taxibus -taxicab -taxidermal -taxidermic -taxidermist -taxidermize -taxidermy -taximan -taximeter -taximetered -taxine -taxing -taxingly -taxinomic -taxinomist -taxinomy -taxiplane -taxis -taxite -taxitic -taxless -taxlessly -taxlessness -taxman -taxodont -taxology -taxometer -taxon -taxonomer -taxonomic -taxonomical -taxonomically -taxonomist -taxonomy -taxor -taxpaid -taxpayer -taxpaying -taxwax -taxy -tay -tayer -tayir -taylorite -tayra -taysaam -tazia -tch -tchai -tcharik -tchast -tche -tcheirek -tchervonets -tchervonetz -tchick -tchu -tck -te -tea -teaberry -teaboard -teabox -teaboy -teacake -teacart -teach -teachability -teachable -teachableness -teachably -teache -teacher -teacherage -teacherdom -teacheress -teacherhood -teacherless -teacherlike -teacherly -teachership -teachery -teaching -teachingly -teachless -teachment -teachy -teacup -teacupful -tead -teadish -teaer -teaey -teagardeny -teagle -teahouse -teaish -teaism -teak -teakettle -teakwood -teal -tealeafy -tealery -tealess -teallite -team -teamaker -teamaking -teaman -teameo -teamer -teaming -teamland -teamless -teamman -teammate -teamsman -teamster -teamwise -teamwork -tean -teanal -teap -teapot -teapotful -teapottykin -teapoy -tear -tearable -tearableness -tearably -tearage -tearcat -teardown -teardrop -tearer -tearful -tearfully -tearfulness -tearing -tearless -tearlessly -tearlessness -tearlet -tearlike -tearoom -tearpit -tearproof -tearstain -teart -tearthroat -tearthumb -teary -teasable -teasableness -teasably -tease -teaseable -teaseableness -teaseably -teasehole -teasel -teaseler -teaseller -teasellike -teaselwort -teasement -teaser -teashop -teasiness -teasing -teasingly -teasler -teaspoon -teaspoonful -teasy -teat -teataster -teated -teatfish -teathe -teather -teatime -teatlike -teatling -teatman -teaty -teave -teaware -teaze -teazer -tebbet -tec -teca -tecali -tech -techily -techiness -technetium -technic -technica -technical -technicalism -technicalist -technicality -technicalize -technically -technicalness -technician -technicism -technicist -technicological -technicology -technicon -technics -techniphone -technique -techniquer -technism -technist -technocausis -technochemical -technochemistry -technocracy -technocrat -technocratic -technographer -technographic -technographical -technographically -technography -technolithic -technologic -technological -technologically -technologist -technologue -technology -technonomic -technonomy -technopsychology -techous -techy -teck -tecnoctonia -tecnology -tecomin -tecon -tectal -tectibranch -tectibranchian -tectibranchiate -tectiform -tectocephalic -tectocephaly -tectological -tectology -tectonic -tectonics -tectorial -tectorium -tectosphere -tectospinal -tectospondylic -tectospondylous -tectrices -tectricial -tectum -tecum -tecuma -ted -tedder -tedescan -tedge -tediosity -tedious -tediously -tediousness -tediousome -tedisome -tedium -tee -teedle -teel -teem -teemer -teemful -teemfulness -teeming -teemingly -teemingness -teemless -teems -teen -teenage -teenet -teens -teensy -teenty -teeny -teer -teerer -teest -teet -teetaller -teetan -teeter -teeterboard -teeterer -teetertail -teeth -teethache -teethbrush -teethe -teethful -teethily -teething -teethless -teethlike -teethridge -teethy -teeting -teetotal -teetotaler -teetotalism -teetotalist -teetotally -teetotum -teetotumism -teetotumize -teetotumwise -teety -teevee -teewhaap -teff -teg -tegmen -tegmental -tegmentum -tegmina -tegminal -tegua -teguexin -tegula -tegular -tegularly -tegulated -tegumen -tegument -tegumental -tegumentary -tegumentum -tegurium -tehseel -tehseeldar -tehsil -tehsildar -teicher -teiglech -teil -teind -teindable -teinder -teinland -teinoscope -teioid -tejon -teju -tekiah -tekke -tekken -teknonymous -teknonymy -tektite -tekya -telacoustic -telakucha -telamon -telang -telangiectasia -telangiectasis -telangiectasy -telangiectatic -telangiosis -telar -telarian -telary -telautogram -telautograph -telautographic -telautographist -telautography -telautomatic -telautomatically -telautomatics -tele -teleanemograph -teleangiectasia -telebarograph -telebarometer -telecast -telecaster -telechemic -telechirograph -telecinematography -telecode -telecommunication -telecryptograph -telectroscope -teledendrion -teledendrite -teledendron -teledu -telega -telegenic -telegnosis -telegnostic -telegonic -telegonous -telegony -telegram -telegrammatic -telegrammic -telegraph -telegraphee -telegrapheme -telegrapher -telegraphese -telegraphic -telegraphical -telegraphically -telegraphist -telegraphone -telegraphophone -telegraphoscope -telegraphy -telehydrobarometer -teleianthous -teleiosis -telekinematography -telekinesis -telekinetic -telelectric -telelectrograph -telelectroscope -telemanometer -telemark -telemechanic -telemechanics -telemechanism -telemetacarpal -telemeteorograph -telemeteorographic -telemeteorography -telemeter -telemetric -telemetrical -telemetrist -telemetrograph -telemetrographic -telemetrography -telemetry -telemotor -telencephal -telencephalic -telencephalon -telenergic -telenergy -teleneurite -teleneuron -telengiscope -teleobjective -teleocephalous -teleodesmacean -teleodesmaceous -teleodont -teleologic -teleological -teleologically -teleologism -teleologist -teleology -teleometer -teleophobia -teleophore -teleophyte -teleoptile -teleorganic -teleoroentgenogram -teleoroentgenography -teleosaur -teleosaurian -teleost -teleostean -teleosteous -teleostomate -teleostome -teleostomian -teleostomous -teleotemporal -teleotrocha -teleozoic -teleozoon -telepathic -telepathically -telepathist -telepathize -telepathy -telepheme -telephone -telephoner -telephonic -telephonical -telephonically -telephonist -telephonograph -telephonographic -telephony -telephote -telephoto -telephotograph -telephotographic -telephotography -telepicture -teleplasm -teleplasmic -teleplastic -telepost -teleprinter -teleradiophone -teleran -telergic -telergical -telergically -telergy -telescope -telescopic -telescopical -telescopically -telescopiform -telescopist -telescopy -telescriptor -teleseism -teleseismic -teleseismology -teleseme -telesia -telesis -telesmeter -telesomatic -telespectroscope -telestereograph -telestereography -telestereoscope -telesterion -telesthesia -telesthetic -telestial -telestic -telestich -teletactile -teletactor -teletape -teletherapy -telethermogram -telethermograph -telethermometer -telethermometry -telethon -teletopometer -teletranscription -teletype -teletyper -teletypesetter -teletypewriter -teletyping -teleuto -teleutoform -teleutosorus -teleutospore -teleutosporic -teleutosporiferous -teleview -televiewer -televise -television -televisional -televisionary -televisor -televisual -televocal -televox -telewriter -telfairic -telfer -telferage -telford -telfordize -telharmonic -telharmonium -telharmony -teli -telial -telic -telical -telically -teliferous -teliosorus -teliospore -teliosporic -teliosporiferous -teliostage -telium -tell -tellable -tellach -tellee -teller -tellership -telligraph -tellinacean -tellinaceous -telling -tellingly -tellinoid -tellsome -tellt -telltale -telltalely -telltruth -tellural -tellurate -telluret -tellureted -tellurethyl -telluretted -tellurhydric -tellurian -telluric -telluride -telluriferous -tellurion -tellurism -tellurist -tellurite -tellurium -tellurize -telluronium -tellurous -telmatological -telmatology -teloblast -teloblastic -telocentric -telodendrion -telodendron -telodynamic -telokinesis -telolecithal -telolemma -telome -telomic -telomitic -telonism -telophase -telophragma -telopsis -teloptic -telosynapsis -telosynaptic -telosynaptist -teloteropathic -teloteropathically -teloteropathy -telotrematous -telotroch -telotrocha -telotrochal -telotrochous -telotrophic -telotype -telpath -telpher -telpherage -telpherman -telpherway -telson -telsonic -telt -telurgy -telyn -temacha -temalacatl -teman -tembe -temblor -temenos -temerarious -temerariously -temerariousness -temeritous -temerity -temerous -temerously -temerousness -temiak -temin -temnospondylous -temp -temper -tempera -temperability -temperable -temperably -temperality -temperament -temperamental -temperamentalist -temperamentally -temperamented -temperance -temperate -temperately -temperateness -temperative -temperature -tempered -temperedly -temperedness -temperer -temperish -temperless -tempersome -tempery -tempest -tempestical -tempestive -tempestively -tempestivity -tempestuous -tempestuously -tempestuousness -tempesty -tempi -templar -templardom -templarism -templarlike -templarlikeness -templary -template -templater -temple -templed -templeful -templeless -templelike -templet -templeward -templize -tempo -tempora -temporal -temporale -temporalism -temporalist -temporality -temporalize -temporally -temporalness -temporalty -temporaneous -temporaneously -temporaneousness -temporarily -temporariness -temporary -temporator -temporization -temporizer -temporizing -temporizingly -temporoalar -temporoauricular -temporocentral -temporocerebellar -temporofacial -temporofrontal -temporohyoid -temporomalar -temporomandibular -temporomastoid -temporomaxillary -temporooccipital -temporoparietal -temporopontine -temporosphenoid -temporosphenoidal -temporozygomatic -tempre -temprely -tempt -temptability -temptable -temptableness -temptation -temptational -temptationless -temptatious -temptatory -tempter -tempting -temptingly -temptingness -temptress -temse -temser -temulence -temulency -temulent -temulentive -temulently -ten -tenability -tenable -tenableness -tenably -tenace -tenacious -tenaciously -tenaciousness -tenacity -tenaculum -tenai -tenaille -tenaillon -tenancy -tenant -tenantable -tenantableness -tenanter -tenantism -tenantless -tenantlike -tenantry -tenantship -tench -tenchweed -tend -tendance -tendant -tendence -tendency -tendent -tendential -tendentious -tendentiously -tendentiousness -tender -tenderability -tenderable -tenderably -tenderee -tenderer -tenderfoot -tenderfootish -tenderful -tenderfully -tenderheart -tenderhearted -tenderheartedly -tenderheartedness -tenderish -tenderize -tenderling -tenderloin -tenderly -tenderness -tenderometer -tendersome -tendinal -tending -tendingly -tendinitis -tendinous -tendinousness -tendomucoid -tendon -tendonous -tendoplasty -tendosynovitis -tendotome -tendotomy -tendour -tendovaginal -tendovaginitis -tendresse -tendril -tendriled -tendriliferous -tendrillar -tendrilly -tendrilous -tendron -tenebra -tenebricose -tenebrific -tenebrificate -tenebrionid -tenebrious -tenebriously -tenebrity -tenebrose -tenebrosity -tenebrous -tenebrously -tenebrousness -tenectomy -tenement -tenemental -tenementary -tenementer -tenementization -tenementize -tenendas -tenendum -tenent -teneral -tenesmic -tenesmus -tenet -tenfold -tenfoldness -teng -tengere -tengerite -tengu -teniacidal -teniacide -tenible -tenio -tenline -tenmantale -tennantite -tenne -tenner -tennis -tennisdom -tennisy -tenodesis -tenodynia -tenography -tenology -tenomyoplasty -tenomyotomy -tenon -tenonectomy -tenoner -tenonitis -tenonostosis -tenontagra -tenontitis -tenontodynia -tenontography -tenontolemmitis -tenontology -tenontomyoplasty -tenontomyotomy -tenontophyma -tenontoplasty -tenontothecitis -tenontotomy -tenophony -tenophyte -tenoplastic -tenoplasty -tenor -tenorist -tenorister -tenorite -tenorless -tenoroon -tenorrhaphy -tenositis -tenostosis -tenosuture -tenotome -tenotomist -tenotomize -tenotomy -tenovaginitis -tenpence -tenpenny -tenpin -tenrec -tense -tenseless -tenselessness -tensely -tenseness -tensibility -tensible -tensibleness -tensibly -tensify -tensile -tensilely -tensileness -tensility -tensimeter -tensiometer -tension -tensional -tensionless -tensity -tensive -tenson -tensor -tent -tentability -tentable -tentacle -tentacled -tentaclelike -tentacula -tentacular -tentaculate -tentaculated -tentaculite -tentaculocyst -tentaculoid -tentaculum -tentage -tentamen -tentation -tentative -tentatively -tentativeness -tented -tenter -tenterbelly -tenterer -tenterhook -tentful -tenth -tenthly -tenthmeter -tenthredinid -tenthredinoid -tentiform -tentigo -tentillum -tention -tentless -tentlet -tentlike -tentmaker -tentmaking -tentmate -tentorial -tentorium -tenture -tentwards -tentwise -tentwork -tentwort -tenty -tenuate -tenues -tenuicostate -tenuifasciate -tenuiflorous -tenuifolious -tenuious -tenuiroster -tenuirostral -tenuirostrate -tenuis -tenuistriate -tenuity -tenuous -tenuously -tenuousness -tenure -tenurial -tenurially -teocalli -teopan -teosinte -tepache -tepal -tepee -tepefaction -tepefy -tepetate -tephillin -tephramancy -tephrite -tephritic -tephroite -tephromalacia -tephromyelitic -tephrosis -tepid -tepidarium -tepidity -tepidly -tepidness -tepomporize -teponaztli -tepor -tequila -tera -teraglin -terakihi -teramorphous -terap -teraphim -teras -teratical -teratism -teratoblastoma -teratogenesis -teratogenetic -teratogenic -teratogenous -teratogeny -teratoid -teratological -teratologist -teratology -teratoma -teratomatous -teratoscopy -teratosis -terbia -terbic -terbium -tercel -tercelet -tercentenarian -tercentenarize -tercentenary -tercentennial -tercer -terceron -tercet -terchloride -tercia -tercine -tercio -terdiurnal -terebate -terebella -terebellid -terebelloid -terebellum -terebene -terebenic -terebenthene -terebic -terebilic -terebinic -terebinth -terebinthial -terebinthian -terebinthic -terebinthina -terebinthinate -terebinthine -terebinthinous -terebra -terebral -terebrant -terebrate -terebration -terebratular -terebratulid -terebratuliform -terebratuline -terebratulite -terebratuloid -teredo -terek -terephthalate -terephthalic -terete -teretial -tereticaudate -teretifolious -teretipronator -teretiscapular -teretiscapularis -teretish -tereu -terfez -tergal -tergant -tergeminate -tergeminous -tergiferous -tergite -tergitic -tergiversant -tergiversate -tergiversation -tergiversator -tergiversatory -tergiverse -tergolateral -tergum -terlinguaite -term -terma -termagancy -termagant -termagantish -termagantism -termagantly -termage -termatic -termen -termer -termillenary -termin -terminability -terminable -terminableness -terminably -terminal -terminalization -terminalized -terminally -terminant -terminate -termination -terminational -terminative -terminatively -terminator -terminatory -termine -terminer -termini -terminine -terminism -terminist -terministic -terminize -termino -terminological -terminologically -terminologist -terminology -terminus -termital -termitarium -termitary -termite -termitic -termitid -termitophagous -termitophile -termitophilous -termless -termlessly -termlessness -termly -termolecular -termon -termor -termtime -tern -terna -ternal -ternar -ternariant -ternarious -ternary -ternate -ternately -ternatipinnate -ternatisect -ternatopinnate -terne -terneplate -ternery -ternion -ternize -ternlet -teroxide -terp -terpadiene -terpane -terpene -terpeneless -terphenyl -terpilene -terpin -terpine -terpinene -terpineol -terpinol -terpinolene -terpodion -terpsichoreal -terpsichoreally -terpsichorean -terrace -terraceous -terracer -terracette -terracewards -terracewise -terracework -terraciform -terracing -terraculture -terraefilial -terraefilian -terrage -terrain -terral -terramara -terramare -terrane -terranean -terraneous -terrapin -terraquean -terraqueous -terraqueousness -terrar -terrarium -terrazzo -terrella -terremotive -terrene -terrenely -terreneness -terreplein -terrestrial -terrestrialism -terrestriality -terrestrialize -terrestrially -terrestrialness -terrestricity -terrestrious -terret -terreted -terribility -terrible -terribleness -terribly -terricole -terricoline -terricolous -terrier -terrierlike -terrific -terrifical -terrifically -terrification -terrificly -terrificness -terrifiedly -terrifier -terrify -terrifying -terrifyingly -terrigenous -terrine -territelarian -territorial -territorialism -territorialist -territoriality -territorialization -territorialize -territorially -territorian -territoried -territory -terron -terror -terrorful -terrorific -terrorism -terrorist -terroristic -terroristical -terrorization -terrorize -terrorizer -terrorless -terrorproof -terrorsome -terry -terse -tersely -terseness -tersion -tersulphate -tersulphide -tersulphuret -tertenant -tertia -tertial -tertian -tertiana -tertianship -tertiarian -tertiary -tertiate -tertius -terton -tertrinal -teruncius -terutero -tervalence -tervalency -tervalent -tervariant -tervee -terzetto -terzina -terzo -tesack -tesarovitch -teschenite -teschermacherite -teskere -teskeria -tessara -tessarace -tessaraconter -tessaradecad -tessaraglot -tessaraphthong -tessarescaedecahedron -tessel -tessella -tessellar -tessellate -tessellated -tessellation -tessera -tesseract -tesseradecade -tesseraic -tesseral -tesserarian -tesserate -tesserated -tesseratomic -tesseratomy -tessular -test -testa -testable -testacean -testaceography -testaceology -testaceous -testaceousness -testacy -testament -testamental -testamentally -testamentalness -testamentarily -testamentary -testamentate -testamentation -testamentum -testamur -testar -testata -testate -testation -testator -testatorship -testatory -testatrices -testatrix -testatum -teste -tested -testee -tester -testes -testibrachial -testibrachium -testicardinate -testicardine -testicle -testicond -testicular -testiculate -testiculated -testiere -testificate -testification -testificator -testificatory -testifier -testify -testily -testimonial -testimonialist -testimonialization -testimonialize -testimonializer -testimonium -testimony -testiness -testing -testingly -testis -teston -testone -testoon -testor -testosterone -testril -testudinal -testudinarious -testudinate -testudinated -testudineal -testudineous -testudinous -testudo -testy -tetanic -tetanical -tetanically -tetaniform -tetanigenous -tetanilla -tetanine -tetanism -tetanization -tetanize -tetanoid -tetanolysin -tetanomotor -tetanospasmin -tetanotoxin -tetanus -tetany -tetarcone -tetarconid -tetard -tetartemorion -tetartocone -tetartoconid -tetartohedral -tetartohedrally -tetartohedrism -tetartohedron -tetartoid -tetartosymmetry -tetch -tetchy -tete -tetel -teterrimous -teth -tethelin -tether -tetherball -tethery -tethydan -tetra -tetraamylose -tetrabasic -tetrabasicity -tetrabelodont -tetrabiblos -tetraborate -tetraboric -tetrabrach -tetrabranch -tetrabranchiate -tetrabromid -tetrabromide -tetrabromo -tetrabromoethane -tetracadactylity -tetracarboxylate -tetracarboxylic -tetracarpellary -tetraceratous -tetracerous -tetrachical -tetrachlorid -tetrachloride -tetrachloro -tetrachloroethane -tetrachloroethylene -tetrachloromethane -tetrachord -tetrachordal -tetrachordon -tetrachoric -tetrachotomous -tetrachromatic -tetrachromic -tetrachronous -tetracid -tetracoccous -tetracoccus -tetracolic -tetracolon -tetracoral -tetracoralline -tetracosane -tetract -tetractinal -tetractine -tetractinellid -tetractinellidan -tetractinelline -tetractinose -tetracyclic -tetrad -tetradactyl -tetradactylous -tetradactyly -tetradarchy -tetradecane -tetradecanoic -tetradecapod -tetradecapodan -tetradecapodous -tetradecyl -tetradiapason -tetradic -tetradrachma -tetradrachmal -tetradrachmon -tetradymite -tetradynamian -tetradynamious -tetradynamous -tetraedron -tetraedrum -tetraethylsilane -tetrafluoride -tetrafolious -tetragamy -tetragenous -tetraglot -tetraglottic -tetragon -tetragonal -tetragonally -tetragonalness -tetragonidium -tetragonous -tetragonus -tetragram -tetragrammatic -tetragrammatonic -tetragyn -tetragynian -tetragynous -tetrahedral -tetrahedrally -tetrahedric -tetrahedrite -tetrahedroid -tetrahedron -tetrahexahedral -tetrahexahedron -tetrahydrate -tetrahydrated -tetrahydric -tetrahydride -tetrahydro -tetrahydroxy -tetraiodid -tetraiodide -tetraiodo -tetraiodophenolphthalein -tetrakaidecahedron -tetraketone -tetrakisazo -tetrakishexahedron -tetralemma -tetralogic -tetralogue -tetralogy -tetralophodont -tetramastia -tetramastigote -tetrameral -tetrameralian -tetrameric -tetramerism -tetramerous -tetrameter -tetramethyl -tetramethylammonium -tetramethylene -tetramethylium -tetramin -tetramine -tetrammine -tetramorph -tetramorphic -tetramorphism -tetramorphous -tetrander -tetrandrian -tetrandrous -tetrane -tetranitrate -tetranitro -tetranitroaniline -tetranuclear -tetraodont -tetraonid -tetraonine -tetrapartite -tetrapetalous -tetraphalangeate -tetrapharmacal -tetrapharmacon -tetraphenol -tetraphony -tetraphosphate -tetraphyllous -tetrapla -tetraplegia -tetrapleuron -tetraploid -tetraploidic -tetraploidy -tetraplous -tetrapneumonian -tetrapneumonous -tetrapod -tetrapodic -tetrapody -tetrapolar -tetrapolis -tetrapolitan -tetrapous -tetraprostyle -tetrapteran -tetrapteron -tetrapterous -tetraptote -tetraptych -tetrapylon -tetrapyramid -tetrapyrenous -tetraquetrous -tetrarch -tetrarchate -tetrarchic -tetrarchy -tetrasaccharide -tetrasalicylide -tetraselenodont -tetraseme -tetrasemic -tetrasepalous -tetraskelion -tetrasome -tetrasomic -tetrasomy -tetraspermal -tetraspermatous -tetraspermous -tetraspheric -tetrasporange -tetrasporangiate -tetrasporangium -tetraspore -tetrasporic -tetrasporiferous -tetrasporous -tetraster -tetrastich -tetrastichal -tetrastichic -tetrastichous -tetrastoon -tetrastyle -tetrastylic -tetrastylos -tetrastylous -tetrasubstituted -tetrasubstitution -tetrasulphide -tetrasyllabic -tetrasyllable -tetrasymmetry -tetrathecal -tetratheism -tetratheite -tetrathionates -tetrathionic -tetratomic -tetratone -tetravalence -tetravalency -tetravalent -tetraxial -tetraxon -tetraxonian -tetraxonid -tetrazane -tetrazene -tetrazin -tetrazine -tetrazo -tetrazole -tetrazolium -tetrazolyl -tetrazone -tetrazotization -tetrazotize -tetrazyl -tetremimeral -tetrevangelium -tetric -tetrical -tetricity -tetricous -tetrigid -tetriodide -tetrobol -tetrobolon -tetrode -tetrodont -tetrole -tetrolic -tetronic -tetronymal -tetrose -tetroxalate -tetroxide -tetrsyllabical -tetryl -tetrylene -tetter -tetterish -tetterous -tetterwort -tettery -tettigoniid -tettix -teucrin -teufit -teuk -teviss -tew -tewel -tewer -tewit -tewly -tewsome -texguino -text -textarian -textbook -textbookless -textiferous -textile -textilist -textlet -textman -textorial -textrine -textual -textualism -textualist -textuality -textually -textuarist -textuary -textural -texturally -texture -textureless -tez -tezkere -th -tha -thack -thacker -thackless -thakur -thakurate -thalamencephalic -thalamencephalon -thalami -thalamic -thalamifloral -thalamiflorous -thalamite -thalamium -thalamocele -thalamocoele -thalamocortical -thalamocrural -thalamolenticular -thalamomammillary -thalamopeduncular -thalamotegmental -thalamotomy -thalamus -thalassal -thalassian -thalassic -thalassinid -thalassinidian -thalassinoid -thalassiophyte -thalassiophytous -thalasso -thalassocracy -thalassocrat -thalassographer -thalassographic -thalassographical -thalassography -thalassometer -thalassophilous -thalassophobia -thalassotherapy -thalattology -thalenite -thaler -thaliacean -thalli -thallic -thalliferous -thalliform -thalline -thallious -thallium -thallochlore -thallodal -thallogen -thallogenic -thallogenous -thalloid -thallome -thallophyte -thallophytic -thallose -thallous -thallus -thalposis -thalpotic -thalthan -thameng -thamnium -thamnophile -thamnophiline -thamuria -than -thana -thanadar -thanage -thanan -thanatism -thanatist -thanatobiologic -thanatognomonic -thanatographer -thanatography -thanatoid -thanatological -thanatologist -thanatology -thanatomantic -thanatometer -thanatophidia -thanatophidian -thanatophobe -thanatophobia -thanatophobiac -thanatophoby -thanatopsis -thanatosis -thanatotic -thanatousia -thane -thanedom -thanehood -thaneland -thaneship -thank -thankee -thanker -thankful -thankfully -thankfulness -thankless -thanklessly -thanklessness -thanks -thanksgiver -thanksgiving -thankworthily -thankworthiness -thankworthy -thapes -thapsia -thar -tharf -tharfcake -tharginyah -tharm -that -thatch -thatcher -thatching -thatchless -thatchwood -thatchwork -thatchy -thatn -thatness -thats -thaught -thaumasite -thaumatogeny -thaumatography -thaumatolatry -thaumatology -thaumatrope -thaumatropical -thaumaturge -thaumaturgia -thaumaturgic -thaumaturgical -thaumaturgics -thaumaturgism -thaumaturgist -thaumaturgy -thaumoscopic -thave -thaw -thawer -thawless -thawn -thawy -the -theaceous -theah -theandric -theanthropic -theanthropical -theanthropism -theanthropist -theanthropology -theanthropophagy -theanthropos -theanthroposophy -theanthropy -thearchic -thearchy -theasum -theat -theater -theatergoer -theatergoing -theaterless -theaterlike -theaterward -theaterwards -theaterwise -theatral -theatric -theatricable -theatrical -theatricalism -theatricality -theatricalization -theatricalize -theatrically -theatricalness -theatricals -theatrician -theatricism -theatricize -theatrics -theatrize -theatrocracy -theatrograph -theatromania -theatromaniac -theatron -theatrophile -theatrophobia -theatrophone -theatrophonic -theatropolis -theatroscope -theatry -theave -theb -thebaine -thebaism -theca -thecae -thecal -thecaphore -thecasporal -thecaspore -thecaspored -thecasporous -thecate -thecia -thecitis -thecium -thecla -theclan -thecodont -thecoglossate -thecoid -thecosomatous -thee -theek -theeker -theelin -theelol -theer -theet -theetsee -theezan -theft -theftbote -theftdom -theftless -theftproof -theftuous -theftuously -thegether -thegidder -thegither -thegn -thegndom -thegnhood -thegnland -thegnlike -thegnly -thegnship -thegnworthy -theiform -theine -theinism -their -theirn -theirs -theirselves -theirsens -theism -theist -theistic -theistical -theistically -thelalgia -thelemite -theligonaceous -thelitis -thelium -theloncus -thelorrhagia -thelphusian -thelyblast -thelyblastic -thelyotokous -thelyotoky -thelyplasty -thelytocia -thelytoky -thelytonic -them -thema -themata -thematic -thematical -thematically -thematist -theme -themeless -themelet -themer -themis -themsel -themselves -then -thenabouts -thenadays -thenal -thenar -thenardite -thence -thenceafter -thenceforth -thenceforward -thenceforwards -thencefrom -thenceward -thenness -theoanthropomorphic -theoanthropomorphism -theoastrological -theobromic -theobromine -theocentric -theocentricism -theocentrism -theochristic -theocollectivism -theocollectivist -theocracy -theocrasia -theocrasical -theocrasy -theocrat -theocratic -theocratical -theocratically -theocratist -theodemocracy -theodicaea -theodicean -theodicy -theodidact -theodolite -theodolitic -theodrama -theody -theogamy -theogeological -theognostic -theogonal -theogonic -theogonism -theogonist -theogony -theohuman -theokrasia -theoktonic -theoktony -theolatrous -theolatry -theolepsy -theoleptic -theologal -theologaster -theologastric -theologate -theologeion -theologer -theologi -theologian -theologic -theological -theologically -theologician -theologicoastronomical -theologicoethical -theologicohistorical -theologicometaphysical -theologicomilitary -theologicomoral -theologiconatural -theologicopolitical -theologics -theologism -theologist -theologium -theologization -theologize -theologizer -theologoumena -theologoumenon -theologue -theologus -theology -theomachia -theomachist -theomachy -theomammomist -theomancy -theomania -theomaniac -theomantic -theomastix -theomicrist -theomisanthropist -theomorphic -theomorphism -theomorphize -theomythologer -theomythology -theonomy -theopantism -theopathetic -theopathic -theopathy -theophagic -theophagite -theophagous -theophagy -theophania -theophanic -theophanism -theophanous -theophany -theophilanthrope -theophilanthropic -theophilanthropism -theophilanthropist -theophilanthropy -theophile -theophilist -theophilosophic -theophobia -theophoric -theophorous -theophrastaceous -theophylline -theophysical -theopneust -theopneusted -theopneustia -theopneustic -theopneusty -theopolitician -theopolitics -theopolity -theopsychism -theorbist -theorbo -theorem -theorematic -theorematical -theorematically -theorematist -theoremic -theoretic -theoretical -theoreticalism -theoretically -theoretician -theoreticopractical -theoretics -theoria -theoriai -theoric -theorical -theorically -theorician -theoricon -theorics -theorism -theorist -theorization -theorize -theorizer -theorum -theory -theoryless -theorymonger -theosoph -theosopheme -theosophic -theosophical -theosophically -theosophism -theosophist -theosophistic -theosophistical -theosophize -theosophy -theotechnic -theotechnist -theotechny -theoteleological -theoteleology -theotherapy -theow -theowdom -theowman -theralite -therapeusis -therapeutic -therapeutical -therapeutically -therapeutics -therapeutism -therapeutist -theraphose -theraphosid -theraphosoid -therapist -therapsid -therapy -therblig -there -thereabouts -thereabove -thereacross -thereafter -thereafterward -thereagainst -thereamong -thereamongst -thereanent -thereanents -therearound -thereas -thereat -thereaway -thereaways -therebeside -therebesides -therebetween -thereby -thereckly -therefor -therefore -therefrom -therehence -therein -thereinafter -thereinbefore -thereinto -therence -thereness -thereof -thereoid -thereologist -thereology -thereon -thereout -thereover -thereright -theres -therese -therethrough -theretill -thereto -theretofore -theretoward -thereunder -thereuntil -thereunto -thereup -thereupon -therevid -therewhile -therewith -therewithal -therewithin -theriac -theriaca -theriacal -therial -therianthropic -therianthropism -theriatrics -theridiid -theriodic -theriodont -theriolatry -theriomancy -theriomaniac -theriomimicry -theriomorph -theriomorphic -theriomorphism -theriomorphosis -theriomorphous -theriotheism -theriotrophical -theriozoic -therm -thermacogenesis -thermae -thermal -thermalgesia -thermality -thermally -thermanalgesia -thermanesthesia -thermantic -thermantidote -thermatologic -thermatologist -thermatology -thermesthesia -thermesthesiometer -thermetograph -thermetrograph -thermic -thermically -thermion -thermionic -thermionically -thermionics -thermistor -thermit -thermite -thermo -thermoammeter -thermoanalgesia -thermoanesthesia -thermobarograph -thermobarometer -thermobattery -thermocautery -thermochemic -thermochemical -thermochemically -thermochemist -thermochemistry -thermochroic -thermochrosy -thermocline -thermocouple -thermocurrent -thermodiffusion -thermoduric -thermodynamic -thermodynamical -thermodynamically -thermodynamician -thermodynamicist -thermodynamics -thermodynamist -thermoelectric -thermoelectrical -thermoelectrically -thermoelectricity -thermoelectrometer -thermoelectromotive -thermoelement -thermoesthesia -thermoexcitory -thermogalvanometer -thermogen -thermogenerator -thermogenesis -thermogenetic -thermogenic -thermogenous -thermogeny -thermogeographical -thermogeography -thermogram -thermograph -thermography -thermohyperesthesia -thermojunction -thermokinematics -thermolabile -thermolability -thermological -thermology -thermoluminescence -thermoluminescent -thermolysis -thermolytic -thermolyze -thermomagnetic -thermomagnetism -thermometamorphic -thermometamorphism -thermometer -thermometerize -thermometric -thermometrical -thermometrically -thermometrograph -thermometry -thermomotive -thermomotor -thermomultiplier -thermonastic -thermonasty -thermonatrite -thermoneurosis -thermoneutrality -thermonous -thermonuclear -thermopair -thermopalpation -thermopenetration -thermoperiod -thermoperiodic -thermoperiodicity -thermoperiodism -thermophile -thermophilic -thermophilous -thermophobous -thermophone -thermophore -thermophosphor -thermophosphorescence -thermopile -thermoplastic -thermoplasticity -thermoplegia -thermopleion -thermopolymerization -thermopolypnea -thermopolypneic -thermoradiotherapy -thermoreduction -thermoregulation -thermoregulator -thermoresistance -thermoresistant -thermos -thermoscope -thermoscopic -thermoscopical -thermoscopically -thermosetting -thermosiphon -thermostability -thermostable -thermostat -thermostatic -thermostatically -thermostatics -thermostimulation -thermosynthesis -thermosystaltic -thermosystaltism -thermotactic -thermotank -thermotaxic -thermotaxis -thermotelephone -thermotensile -thermotension -thermotherapeutics -thermotherapy -thermotic -thermotical -thermotically -thermotics -thermotropic -thermotropism -thermotropy -thermotype -thermotypic -thermotypy -thermovoltaic -therodont -theroid -therolatry -therologic -therological -therologist -therology -theromorph -theromorphia -theromorphic -theromorphism -theromorphological -theromorphology -theromorphous -theropod -theropodous -thersitean -thersitical -thesauri -thesaurus -these -theses -thesial -thesicle -thesis -thesmothetae -thesmothete -thesmothetes -thesocyte -thestreen -theta -thetch -thetic -thetical -thetically -thetics -thetin -thetine -theurgic -theurgical -theurgically -theurgist -theurgy -thevetin -thew -thewed -thewless -thewness -thewy -they -theyll -theyre -thiacetic -thiadiazole -thialdine -thiamide -thiamin -thiamine -thianthrene -thiasi -thiasine -thiasite -thiasoi -thiasos -thiasote -thiasus -thiazine -thiazole -thiazoline -thick -thickbrained -thicken -thickener -thickening -thicket -thicketed -thicketful -thickety -thickhead -thickheaded -thickheadedly -thickheadedness -thickish -thickleaf -thicklips -thickly -thickneck -thickness -thicknessing -thickset -thickskin -thickskull -thickskulled -thickwind -thickwit -thief -thiefcraft -thiefdom -thiefland -thiefmaker -thiefmaking -thiefproof -thieftaker -thiefwise -thienone -thienyl -thievable -thieve -thieveless -thiever -thievery -thieving -thievingly -thievish -thievishly -thievishness -thig -thigger -thigging -thigh -thighbone -thighed -thight -thightness -thigmonegative -thigmopositive -thigmotactic -thigmotactically -thigmotaxis -thigmotropic -thigmotropically -thigmotropism -thilk -thill -thiller -thilly -thimber -thimble -thimbleberry -thimbled -thimbleflower -thimbleful -thimblelike -thimblemaker -thimblemaking -thimbleman -thimblerig -thimblerigger -thimbleriggery -thimblerigging -thimbleweed -thin -thinbrained -thine -thing -thingal -thingamabob -thinghood -thinginess -thingish -thingless -thinglet -thinglike -thinglikeness -thingliness -thingly -thingman -thingness -thingstead -thingum -thingumajig -thingumbob -thingummy -thingy -think -thinkable -thinkableness -thinkably -thinker -thinkful -thinking -thinkingly -thinkingpart -thinkling -thinly -thinner -thinness -thinning -thinnish -thinolite -thio -thioacetal -thioacetic -thioalcohol -thioaldehyde -thioamide -thioantimonate -thioantimoniate -thioantimonious -thioantimonite -thioarsenate -thioarseniate -thioarsenic -thioarsenious -thioarsenite -thiobacteria -thiobismuthite -thiocarbamic -thiocarbamide -thiocarbamyl -thiocarbanilide -thiocarbimide -thiocarbonate -thiocarbonic -thiocarbonyl -thiochloride -thiochrome -thiocresol -thiocyanate -thiocyanation -thiocyanic -thiocyanide -thiocyano -thiocyanogen -thiodiazole -thiodiphenylamine -thiofuran -thiofurane -thiofurfuran -thiofurfurane -thiogycolic -thiohydrate -thiohydrolysis -thiohydrolyze -thioindigo -thioketone -thiol -thiolacetic -thiolactic -thiolic -thionamic -thionaphthene -thionate -thionation -thioneine -thionic -thionine -thionitrite -thionium -thionobenzoic -thionthiolic -thionurate -thionyl -thionylamine -thiophen -thiophene -thiophenic -thiophenol -thiophosgene -thiophosphate -thiophosphite -thiophosphoric -thiophosphoryl -thiophthene -thiopyran -thioresorcinol -thiosinamine -thiostannate -thiostannic -thiostannite -thiostannous -thiosulphate -thiosulphonic -thiosulphuric -thiotolene -thiotungstate -thiotungstic -thiouracil -thiourea -thiourethan -thiourethane -thioxene -thiozone -thiozonide -thir -third -thirdborough -thirdings -thirdling -thirdly -thirdness -thirdsman -thirl -thirlage -thirling -thirst -thirster -thirstful -thirstily -thirstiness -thirsting -thirstingly -thirstland -thirstle -thirstless -thirstlessness -thirstproof -thirsty -thirt -thirteen -thirteener -thirteenfold -thirteenth -thirteenthly -thirtieth -thirty -thirtyfold -thirtyish -this -thishow -thislike -thisn -thisness -thissen -thistle -thistlebird -thistled -thistledown -thistlelike -thistleproof -thistlery -thistlish -thistly -thiswise -thither -thitherto -thitherward -thitsiol -thiuram -thivel -thixle -thixolabile -thixotropic -thixotropy -thlipsis -tho -thob -thocht -thof -thoft -thoftfellow -thoke -thokish -thole -tholeiite -tholepin -tholi -tholoi -tholos -tholus -thomasing -thomisid -thomsenolite -thomsonite -thon -thonder -thone -thong -thonged -thongman -thongy -thoo -thooid -thoom -thoracalgia -thoracaorta -thoracectomy -thoracentesis -thoraces -thoracic -thoracical -thoracicoabdominal -thoracicoacromial -thoracicohumeral -thoracicolumbar -thoraciform -thoracispinal -thoracoabdominal -thoracoacromial -thoracobronchotomy -thoracoceloschisis -thoracocentesis -thoracocyllosis -thoracocyrtosis -thoracodelphus -thoracodidymus -thoracodorsal -thoracodynia -thoracogastroschisis -thoracograph -thoracohumeral -thoracolumbar -thoracolysis -thoracomelus -thoracometer -thoracometry -thoracomyodynia -thoracopagus -thoracoplasty -thoracoschisis -thoracoscope -thoracoscopy -thoracostenosis -thoracostomy -thoracostracan -thoracostracous -thoracotomy -thoral -thorascope -thorax -thore -thoria -thorianite -thoriate -thoric -thoriferous -thorina -thorite -thorium -thorn -thornback -thornbill -thornbush -thorned -thornen -thornhead -thornily -thorniness -thornless -thornlessness -thornlet -thornlike -thornproof -thornstone -thorntail -thorny -thoro -thorocopagous -thorogummite -thoron -thorough -thoroughbred -thoroughbredness -thoroughfare -thoroughfarer -thoroughfaresome -thoroughfoot -thoroughgoing -thoroughgoingly -thoroughgoingness -thoroughgrowth -thoroughly -thoroughness -thoroughpaced -thoroughpin -thoroughsped -thoroughstem -thoroughstitch -thoroughstitched -thoroughwax -thoroughwort -thorp -thort -thorter -thortveitite -those -thou -though -thought -thoughted -thoughten -thoughtful -thoughtfully -thoughtfulness -thoughtkin -thoughtless -thoughtlessly -thoughtlessness -thoughtlet -thoughtness -thoughtsick -thoughty -thousand -thousandfold -thousandfoldly -thousandth -thousandweight -thouse -thow -thowel -thowless -thowt -thrack -thraep -thrail -thrain -thrall -thrallborn -thralldom -thram -thrammle -thrang -thrangity -thranite -thranitic -thrap -thrapple -thrash -thrashel -thrasher -thrasherman -thrashing -thrasonic -thrasonical -thrasonically -thrast -thrave -thraver -thraw -thrawcrook -thrawn -thrawneen -thread -threadbare -threadbareness -threadbarity -threaded -threaden -threader -threadfin -threadfish -threadflower -threadfoot -threadiness -threadle -threadless -threadlet -threadlike -threadmaker -threadmaking -threadway -threadweed -threadworm -thready -threap -threaper -threat -threaten -threatenable -threatener -threatening -threateningly -threatful -threatfully -threatless -threatproof -three -threefold -threefolded -threefoldedness -threefoldly -threefoldness -threeling -threeness -threepence -threepenny -threepennyworth -threescore -threesome -thremmatology -threne -threnetic -threnetical -threnode -threnodial -threnodian -threnodic -threnodical -threnodist -threnody -threnos -threonin -threonine -threose -threpsology -threptic -thresh -threshel -thresher -thresherman -threshingtime -threshold -threw -thribble -thrice -thricecock -thridacium -thrift -thriftbox -thriftily -thriftiness -thriftless -thriftlessly -thriftlessness -thriftlike -thrifty -thrill -thriller -thrillful -thrillfully -thrilling -thrillingly -thrillingness -thrillproof -thrillsome -thrilly -thrimble -thrimp -thring -thrinter -thrioboly -thrip -thripel -thripple -thrips -thrive -thriveless -thriven -thriver -thriving -thrivingly -thrivingness -thro -throat -throatal -throatband -throated -throatful -throatily -throatiness -throating -throatlash -throatlatch -throatless -throatlet -throatroot -throatstrap -throatwort -throaty -throb -throbber -throbbingly -throbless -throck -throdden -throddy -throe -thrombase -thrombin -thromboangiitis -thromboarteritis -thrombocyst -thrombocyte -thrombocytopenia -thrombogen -thrombogenic -thromboid -thrombokinase -thrombolymphangitis -thrombopenia -thrombophlebitis -thromboplastic -thromboplastin -thrombose -thrombosis -thrombostasis -thrombotic -thrombus -thronal -throne -thronedom -throneless -thronelet -thronelike -throneward -throng -thronger -throngful -throngingly -thronize -thropple -throstle -throstlelike -throttle -throttler -throttling -throttlingly -throu -throuch -throucht -through -throughbear -throughbred -throughcome -throughgang -throughganging -throughgoing -throughgrow -throughknow -throughout -throughput -throve -throw -throwaway -throwback -throwdown -thrower -throwing -thrown -throwoff -throwout -throwster -throwwort -thrum -thrummer -thrummers -thrummy -thrumwort -thrush -thrushel -thrushlike -thrushy -thrust -thruster -thrustful -thrustfulness -thrusting -thrustings -thrutch -thrutchings -thruv -thrymsa -thud -thudding -thuddingly -thug -thugdom -thuggee -thuggeeism -thuggery -thuggess -thuggish -thuggism -thujene -thujin -thujone -thujyl -thulia -thulir -thulite -thulium -thulr -thuluth -thumb -thumbbird -thumbed -thumber -thumbkin -thumble -thumbless -thumblike -thumbmark -thumbnail -thumbpiece -thumbprint -thumbrope -thumbscrew -thumbstall -thumbstring -thumbtack -thumby -thumlungur -thump -thumper -thumping -thumpingly -thunbergilene -thunder -thunderation -thunderball -thunderbearer -thunderbearing -thunderbird -thunderblast -thunderbolt -thunderburst -thunderclap -thundercloud -thundercrack -thunderer -thunderfish -thunderflower -thunderful -thunderhead -thunderheaded -thundering -thunderingly -thunderless -thunderlike -thunderous -thunderously -thunderousness -thunderpeal -thunderplump -thunderproof -thundershower -thundersmite -thundersquall -thunderstick -thunderstone -thunderstorm -thunderstrike -thunderstroke -thunderstruck -thunderwood -thunderworm -thunderwort -thundery -thundrous -thundrously -thung -thunge -thuoc -thurible -thuribuler -thuribulum -thurifer -thuriferous -thurificate -thurificati -thurification -thurify -thuringite -thurl -thurm -thurmus -thurrock -thurse -thurt -thus -thusgate -thusly -thusness -thuswise -thutter -thwack -thwacker -thwacking -thwackingly -thwackstave -thwaite -thwart -thwartedly -thwarteous -thwarter -thwarting -thwartingly -thwartly -thwartman -thwartness -thwartover -thwartsaw -thwartship -thwartships -thwartways -thwartwise -thwite -thwittle -thy -thyine -thylacine -thylacitis -thymacetin -thymate -thyme -thymectomize -thymectomy -thymegol -thymelaeaceous -thymelcosis -thymele -thymelic -thymelical -thymelici -thymene -thymetic -thymic -thymicolymphatic -thymine -thymiosis -thymitis -thymocyte -thymogenic -thymol -thymolate -thymolize -thymolphthalein -thymolsulphonephthalein -thymoma -thymonucleic -thymopathy -thymoprivic -thymoprivous -thymopsyche -thymoquinone -thymotactic -thymotic -thymus -thymy -thymyl -thymylic -thynnid -thyratron -thyreoadenitis -thyreoantitoxin -thyreoarytenoid -thyreoarytenoideus -thyreocervical -thyreocolloid -thyreoepiglottic -thyreogenic -thyreogenous -thyreoglobulin -thyreoglossal -thyreohyal -thyreohyoid -thyreoid -thyreoidal -thyreoideal -thyreoidean -thyreoidectomy -thyreoiditis -thyreoitis -thyreolingual -thyreoprotein -thyreosis -thyreotomy -thyreotoxicosis -thyreotropic -thyridial -thyridium -thyrisiferous -thyroadenitis -thyroantitoxin -thyroarytenoid -thyroarytenoideus -thyrocardiac -thyrocele -thyrocervical -thyrocolloid -thyrocricoid -thyroepiglottic -thyroepiglottidean -thyrogenic -thyroglobulin -thyroglossal -thyrohyal -thyrohyoid -thyrohyoidean -thyroid -thyroidal -thyroidea -thyroideal -thyroidean -thyroidectomize -thyroidectomy -thyroidism -thyroiditis -thyroidization -thyroidless -thyroidotomy -thyroiodin -thyrolingual -thyronine -thyroparathyroidectomize -thyroparathyroidectomy -thyroprival -thyroprivia -thyroprivic -thyroprivous -thyroprotein -thyrostracan -thyrotherapy -thyrotomy -thyrotoxic -thyrotoxicosis -thyrotropic -thyroxine -thyrse -thyrsiflorous -thyrsiform -thyrsoid -thyrsoidal -thyrsus -thysanopter -thysanopteran -thysanopteron -thysanopterous -thysanouran -thysanourous -thysanuran -thysanurian -thysanuriform -thysanurous -thysel -thyself -thysen -ti -tiang -tiao -tiar -tiara -tiaralike -tiarella -tib -tibby -tibet -tibey -tibia -tibiad -tibiae -tibial -tibiale -tibicinist -tibiocalcanean -tibiofemoral -tibiofibula -tibiofibular -tibiometatarsal -tibionavicular -tibiopopliteal -tibioscaphoid -tibiotarsal -tibiotarsus -tibourbou -tiburon -tic -tical -ticca -tice -ticement -ticer -tichodrome -tichorrhine -tick -tickbean -tickbird -tickeater -ticked -ticken -ticker -ticket -ticketer -ticketing -ticketless -ticketmonger -tickey -tickicide -tickie -ticking -tickle -tickleback -ticklebrain -tickled -ticklely -ticklenburg -tickleness -tickleproof -tickler -ticklesome -tickless -tickleweed -tickling -ticklingly -ticklish -ticklishly -ticklishness -tickly -tickney -tickproof -tickseed -tickseeded -ticktack -ticktacker -ticktacktoe -ticktick -ticktock -tickweed -ticky -ticul -tid -tidal -tidally -tidbit -tiddle -tiddledywinks -tiddler -tiddley -tiddling -tiddlywink -tiddlywinking -tiddy -tide -tided -tideful -tidehead -tideland -tideless -tidelessness -tidelike -tidely -tidemaker -tidemaking -tidemark -tiderace -tidesman -tidesurveyor -tidewaiter -tidewaitership -tideward -tidewater -tideway -tidiable -tidily -tidiness -tiding -tidingless -tidings -tidley -tidological -tidology -tidy -tidyism -tidytips -tie -tieback -tied -tiemaker -tiemaking -tiemannite -tien -tiepin -tier -tierce -tierced -tierceron -tiered -tierer -tierlike -tiersman -tietick -tiewig -tiewigged -tiff -tiffany -tiffanyite -tiffie -tiffin -tiffish -tiffle -tiffy -tifinagh -tift -tifter -tig -tige -tigella -tigellate -tigelle -tigellum -tigellus -tiger -tigerbird -tigereye -tigerflower -tigerfoot -tigerhearted -tigerhood -tigerish -tigerishly -tigerishness -tigerism -tigerkin -tigerlike -tigerling -tigerly -tigernut -tigerproof -tigerwood -tigery -tigger -tight -tighten -tightener -tightfisted -tightish -tightly -tightness -tightrope -tights -tightwad -tightwire -tiglaldehyde -tiglic -tiglinic -tignum -tigress -tigresslike -tigrine -tigroid -tigrolysis -tigrolytic -tigtag -tikitiki -tikka -tikker -tiklin -tikolosh -tikor -tikur -til -tilaite -tilaka -tilasite -tilbury -tilde -tile -tiled -tilefish -tilelike -tilemaker -tilemaking -tiler -tileroot -tilery -tileseed -tilestone -tileways -tilework -tileworks -tilewright -tileyard -tiliaceous -tilikum -tiling -till -tillable -tillage -tiller -tillering -tillerless -tillerman -tilletiaceous -tilley -tillite -tillodont -tillot -tillotter -tilly -tilmus -tilpah -tilt -tiltable -tiltboard -tilter -tilth -tilting -tiltlike -tiltmaker -tiltmaking -tiltup -tilty -tiltyard -tilyer -timable -timaliine -timaline -timar -timarau -timawa -timazite -timbal -timbale -timbang -timbe -timber -timbered -timberer -timberhead -timbering -timberjack -timberland -timberless -timberlike -timberling -timberman -timbermonger -timbern -timbersome -timbertuned -timberwood -timberwork -timberwright -timbery -timberyard -timbo -timbre -timbrel -timbreled -timbreler -timbrologist -timbrology -timbromania -timbromaniac -timbromanist -timbrophilic -timbrophilism -timbrophilist -timbrophily -time -timeable -timecard -timed -timeful -timefully -timefulness -timekeep -timekeeper -timekeepership -timeless -timelessly -timelessness -timeliine -timelily -timeliness -timeling -timely -timenoguy -timeous -timeously -timepiece -timepleaser -timeproof -timer -times -timesaver -timesaving -timeserver -timeserving -timeservingness -timetable -timetaker -timetaking -timeward -timework -timeworker -timeworn -timid -timidity -timidly -timidness -timing -timish -timist -timocracy -timocratic -timocratical -timon -timoneer -timor -timorous -timorously -timorousness -timothy -timpani -timpanist -timpano -tin -tinamine -tinamou -tinampipi -tincal -tinchel -tinchill -tinclad -tinct -tinction -tinctorial -tinctorially -tinctorious -tinctumutation -tincture -tind -tindal -tindalo -tinder -tinderbox -tindered -tinderish -tinderlike -tinderous -tindery -tine -tinea -tineal -tinean -tined -tinegrass -tineid -tineine -tineman -tineoid -tinetare -tinety -tineweed -tinful -ting -tinge -tinged -tinger -tingi -tingibility -tingible -tingid -tingitid -tinglass -tingle -tingler -tingletangle -tingling -tinglingly -tinglish -tingly -tingtang -tinguaite -tinguaitic -tinguy -tinhorn -tinhouse -tinily -tininess -tining -tink -tinker -tinkerbird -tinkerdom -tinkerer -tinkerlike -tinkerly -tinkershire -tinkershue -tinkerwise -tinkle -tinkler -tinklerman -tinkling -tinklingly -tinkly -tinlet -tinlike -tinman -tinned -tinner -tinnery -tinnet -tinnified -tinnily -tinniness -tinning -tinnitus -tinnock -tinny -tinosa -tinsel -tinsellike -tinselly -tinselmaker -tinselmaking -tinselry -tinselweaver -tinselwork -tinsman -tinsmith -tinsmithing -tinsmithy -tinstone -tinstuff -tint -tinta -tintage -tintamarre -tintarron -tinted -tinter -tintie -tintiness -tinting -tintingly -tintinnabula -tintinnabulant -tintinnabular -tintinnabulary -tintinnabulate -tintinnabulation -tintinnabulatory -tintinnabulism -tintinnabulist -tintinnabulous -tintinnabulum -tintist -tintless -tintometer -tintometric -tintometry -tinty -tintype -tintyper -tinwald -tinware -tinwoman -tinwork -tinworker -tinworking -tiny -tinzenite -tip -tipburn -tipcart -tipcat -tipe -tipful -tiphead -tipiti -tiple -tipless -tiplet -tipman -tipmost -tiponi -tippable -tipped -tippee -tipper -tippet -tipping -tipple -tippleman -tippler -tipply -tipproof -tippy -tipsification -tipsifier -tipsify -tipsily -tipsiness -tipstaff -tipster -tipstock -tipsy -tiptail -tipteerer -tiptilt -tiptoe -tiptoeing -tiptoeingly -tiptop -tiptopness -tiptopper -tiptoppish -tiptoppishness -tiptopsome -tipulid -tipuloid -tipup -tirade -tiralee -tire -tired -tiredly -tiredness -tiredom -tirehouse -tireless -tirelessly -tirelessness -tiremaid -tiremaker -tiremaking -tireman -tirer -tireroom -tiresmith -tiresome -tiresomely -tiresomeness -tiresomeweed -tirewoman -tiriba -tiring -tiringly -tirl -tirma -tirocinium -tirr -tirralirra -tirret -tirrivee -tirrlie -tirrwirr -tirthankara -tirve -tirwit -tisane -tisar -tissual -tissue -tissued -tissueless -tissuelike -tissuey -tisswood -tiswin -tit -titanate -titanaugite -titania -titanic -titaniferous -titanifluoride -titanite -titanitic -titanium -titano -titanocolumbate -titanocyanide -titanofluoride -titanomagnetite -titanoniobate -titanosaur -titanosilicate -titanothere -titanous -titanyl -titar -titbit -titbitty -tite -titer -titeration -titfish -tithable -tithal -tithe -tithebook -titheless -tithemonger -tithepayer -tither -titheright -tithing -tithingman -tithingpenny -tithonic -tithonicity -tithonographic -tithonometer -titi -titian -titien -titilate -titillability -titillant -titillater -titillating -titillatingly -titillation -titillative -titillator -titillatory -titivate -titivation -titivator -titlark -title -titleboard -titled -titledom -titleholder -titleless -titleproof -titler -titleship -titlike -titling -titlist -titmal -titman -titmouse -titoki -titrable -titratable -titrate -titration -titre -titrimetric -titrimetry -titter -titterel -titterer -tittering -titteringly -tittery -tittie -tittle -tittlebat -tittler -tittup -tittupy -titty -tittymouse -titubancy -titubant -titubantly -titubate -titubation -titular -titularity -titularly -titulary -titulation -titule -titulus -tiver -tivoli -tivy -tiza -tizeur -tizzy -tjanting -tji -tjosite -tlaco -tmema -tmesis -to -toa -toad -toadback -toadeat -toadeater -toader -toadery -toadess -toadfish -toadflax -toadflower -toadhead -toadier -toadish -toadless -toadlet -toadlike -toadlikeness -toadling -toadpipe -toadroot -toadship -toadstone -toadstool -toadstoollike -toadwise -toady -toadyish -toadyism -toadyship -toast -toastable -toastee -toaster -toastiness -toastmaster -toastmastery -toastmistress -toasty -toat -toatoa -tobacco -tobaccofied -tobaccoism -tobaccoite -tobaccoless -tobaccolike -tobaccoman -tobacconalian -tobacconist -tobacconistical -tobacconize -tobaccophil -tobaccoroot -tobaccoweed -tobaccowood -tobaccoy -tobe -tobine -tobira -toboggan -tobogganeer -tobogganer -tobogganist -toby -tobyman -tocalote -toccata -tocher -tocherless -tock -toco -tocodynamometer -tocogenetic -tocogony -tocokinin -tocological -tocologist -tocology -tocome -tocometer -tocopherol -tocororo -tocsin -tocusso -tod -today -todayish -todder -toddick -toddite -toddle -toddlekins -toddler -toddy -toddyize -toddyman -tode -tody -toe -toeboard -toecap -toecapped -toed -toeless -toelike -toellite -toenail -toeplate -toernebohmite -toetoe -toff -toffee -toffeeman -toffing -toffish -toffy -toffyman -toft -tofter -toftman -toftstead -tofu -tog -toga -togaed -togalike -togata -togate -togated -togawise -together -togetherhood -togetheriness -togetherness -toggel -toggery -toggle -toggler -togless -togs -togt -togue -toher -toheroa -toho -tohubohu -tohunga -toi -toil -toiled -toiler -toilet -toileted -toiletry -toilette -toiletted -toiletware -toilful -toilfully -toilinet -toiling -toilingly -toilless -toillessness -toilsome -toilsomely -toilsomeness -toilworn -toise -toit -toitish -toity -tokay -toke -token -tokened -tokenless -toko -tokology -tokonoma -tokopat -tol -tolamine -tolan -tolane -tolbooth -told -toldo -tole -tolerability -tolerable -tolerableness -tolerablish -tolerably -tolerance -tolerancy -tolerant -tolerantism -tolerantly -tolerate -toleration -tolerationism -tolerationist -tolerative -tolerator -tolerism -tolfraedic -tolguacha -tolidine -tolite -toll -tollable -tollage -tollbooth -toller -tollery -tollgate -tollgatherer -tollhouse -tolliker -tolling -tollkeeper -tollman -tollmaster -tollpenny -tolltaker -tolly -tolpatch -tolpatchery -tolsester -tolsey -tolt -tolter -tolu -tolualdehyde -toluate -toluene -toluic -toluide -toluidide -toluidine -toluidino -toluido -tolunitrile -toluol -toluquinaldine -tolusafranine -toluyl -toluylene -toluylenediamine -toluylic -tolyl -tolylene -tolylenediamine -tolypeutine -tomahawk -tomahawker -tomalley -toman -tomatillo -tomato -tomb -tombac -tombal -tombe -tombic -tombless -tomblet -tomblike -tombola -tombolo -tomboy -tomboyful -tomboyish -tomboyishly -tomboyishness -tomboyism -tombstone -tomcat -tomcod -tome -tomeful -tomelet -toment -tomentose -tomentous -tomentulose -tomentum -tomfool -tomfoolery -tomfoolish -tomfoolishness -tomial -tomin -tomish -tomium -tomjohn -tomkin -tommy -tommybag -tommycod -tommyrot -tomnoddy -tomnoup -tomogram -tomographic -tomography -tomorn -tomorrow -tomorrower -tomorrowing -tomorrowness -tomosis -tompiper -tompon -tomtate -tomtit -ton -tonal -tonalamatl -tonalist -tonalite -tonalitive -tonality -tonally -tonant -tonation -tondino -tone -toned -toneless -tonelessly -tonelessness -toneme -toneproof -toner -tonetic -tonetically -tonetician -tonetics -tong -tonga -tonger -tongkang -tongman -tongs -tongsman -tongue -tonguecraft -tongued -tonguedoughty -tonguefence -tonguefencer -tongueflower -tongueful -tongueless -tonguelet -tonguelike -tongueman -tonguemanship -tongueplay -tongueproof -tonguer -tongueshot -tonguesman -tonguesore -tonguester -tonguetip -tonguey -tonguiness -tonguing -tonic -tonically -tonicity -tonicize -tonicobalsamic -tonicoclonic -tonicostimulant -tonify -tonight -tonish -tonishly -tonishness -tonite -tonitrocirrus -tonitruant -tonitruone -tonitruous -tonjon -tonk -tonkin -tonlet -tonnage -tonneau -tonneaued -tonner -tonnish -tonnishly -tonnishness -tonoclonic -tonogram -tonograph -tonological -tonology -tonometer -tonometric -tonometry -tonophant -tonoplast -tonoscope -tonotactic -tonotaxis -tonous -tonsbergite -tonsil -tonsilectomy -tonsilitic -tonsillar -tonsillary -tonsillectome -tonsillectomic -tonsillectomize -tonsillectomy -tonsillith -tonsillitic -tonsillitis -tonsillolith -tonsillotome -tonsillotomy -tonsilomycosis -tonsor -tonsorial -tonsurate -tonsure -tonsured -tontine -tontiner -tonus -tony -tonyhoop -too -toodle -toodleloodle -took -tooken -tool -toolbox -toolbuilder -toolbuilding -tooler -toolhead -toolholder -toolholding -tooling -toolless -toolmaker -toolmaking -toolman -toolmark -toolmarking -toolplate -toolroom -toolsetter -toolslide -toolsmith -toolstock -toolstone -toom -toomly -toon -toonwood -toop -toorie -toorock -tooroo -toosh -toot -tooter -tooth -toothache -toothaching -toothachy -toothbill -toothbrush -toothbrushy -toothchiseled -toothcomb -toothcup -toothdrawer -toothdrawing -toothed -toother -toothflower -toothful -toothill -toothing -toothless -toothlessly -toothlessness -toothlet -toothleted -toothlike -toothpick -toothplate -toothproof -toothsome -toothsomely -toothsomeness -toothstick -toothwash -toothwork -toothwort -toothy -tootle -tootler -tootlish -tootsy -toozle -toozoo -top -topalgia -toparch -toparchia -toparchical -toparchy -topass -topaz -topazfels -topazine -topazite -topazolite -topazy -topcap -topcast -topchrome -topcoat -topcoating -tope -topectomy -topee -topeewallah -topeng -topepo -toper -toperdom -topesthesia -topflight -topfull -topgallant -toph -tophaceous -tophaike -tophetic -tophetize -tophus -tophyperidrosis -topi -topia -topiarian -topiarist -topiarius -topiary -topic -topical -topicality -topically -topinambou -topknot -topknotted -topless -toplighted -toplike -topline -toploftical -toploftily -toploftiness -toplofty -topmaker -topmaking -topman -topmast -topmost -topmostly -topnotch -topnotcher -topo -topoalgia -topochemical -topognosia -topognosis -topograph -topographer -topographic -topographical -topographically -topographics -topographist -topographize -topographometric -topography -topolatry -topologic -topological -topologist -topology -toponarcosis -toponym -toponymal -toponymic -toponymical -toponymics -toponymist -toponymy -topophobia -topophone -topotactic -topotaxis -topotype -topotypic -topotypical -topped -topper -toppiece -topping -toppingly -toppingness -topple -toppler -topply -toppy -toprail -toprope -tops -topsail -topsailite -topside -topsl -topsman -topsoil -topstone -topswarm -topsyturn -toptail -topwise -toque -tor -tora -torah -toral -toran -torbanite -torbanitic -torbernite -torc -torcel -torch -torchbearer -torchbearing -torcher -torchless -torchlight -torchlighted -torchlike -torchman -torchon -torchweed -torchwood -torchwort -torcular -torculus -tordrillite -tore -toreador -tored -torero -toreumatography -toreumatology -toreutic -toreutics -torfaceous -torfel -torgoch -toric -torii -torma -tormen -torment -tormenta -tormentable -tormentation -tormentative -tormented -tormentedly -tormentful -tormentil -tormentilla -tormenting -tormentingly -tormentingness -tormentive -tormentor -tormentous -tormentress -tormentry -tormentum -tormina -torminal -torminous -tormodont -torn -tornachile -tornade -tornadic -tornado -tornadoesque -tornadoproof -tornal -tornaria -tornarian -tornese -torney -tornillo -tornote -tornus -toro -toroid -toroidal -torolillo -tororokombu -torose -torosity -torotoro -torous -torpedineer -torpedinous -torpedo -torpedoer -torpedoist -torpedolike -torpedoplane -torpedoproof -torpent -torpescence -torpescent -torpid -torpidity -torpidly -torpidness -torpify -torpitude -torpor -torporific -torporize -torquate -torquated -torque -torqued -torques -torrefaction -torrefication -torrefy -torrent -torrentful -torrentfulness -torrential -torrentiality -torrentially -torrentine -torrentless -torrentlike -torrentuous -torrentwise -torrid -torridity -torridly -torridness -torsade -torse -torsel -torsibility -torsigraph -torsile -torsimeter -torsiogram -torsiograph -torsiometer -torsion -torsional -torsionally -torsioning -torsionless -torsive -torsk -torso -torsoclusion -torsometer -torsoocclusion -tort -torta -torteau -torticollar -torticollis -torticone -tortile -tortility -tortilla -tortille -tortious -tortiously -tortive -tortoise -tortoiselike -tortrices -tortricid -tortricine -tortricoid -tortula -tortulaceous -tortulous -tortuose -tortuosity -tortuous -tortuously -tortuousness -torturable -torturableness -torture -tortured -torturedly -tortureproof -torturer -torturesome -torturing -torturingly -torturous -torturously -toru -torula -torulaceous -torulaform -toruliform -torulin -toruloid -torulose -torulosis -torulous -torulus -torus -torve -torvid -torvity -torvous -tory -toryhillite -toryweed -tosaphist -tosaphoth -toscanite -tosh -toshakhana -tosher -toshery -toshly -toshnail -toshy -tosily -toss -tosser -tossicated -tossily -tossing -tossingly -tossment -tosspot -tossup -tossy -tost -tosticate -tostication -toston -tosy -tot -total -totalitarian -totalitarianism -totality -totalization -totalizator -totalize -totalizer -totally -totalness -totanine -totaquin -totaquina -totaquine -totara -totchka -tote -toteload -totem -totemic -totemically -totemism -totemist -totemistic -totemite -totemization -totemy -toter -tother -totient -totipalmate -totipalmation -totipotence -totipotency -totipotent -totipotential -totipotentiality -totitive -toto -totora -totquot -totter -totterer -tottergrass -tottering -totteringly -totterish -tottery -totting -tottle -tottlish -totty -tottyhead -totuava -totum -toty -totyman -tou -toucan -toucanet -touch -touchable -touchableness -touchback -touchbell -touchbox -touchdown -touched -touchedness -toucher -touchhole -touchily -touchiness -touching -touchingly -touchingness -touchless -touchline -touchous -touchpan -touchpiece -touchstone -touchwood -touchy -toug -tough -toughen -toughener -toughhead -toughhearted -toughish -toughly -toughness -tought -tould -toumnah -toup -toupee -toupeed -toupet -tour -touraco -tourbillion -tourer -tourette -touring -tourism -tourist -touristdom -touristic -touristproof -touristry -touristship -touristy -tourize -tourmaline -tourmalinic -tourmaliniferous -tourmalinization -tourmalinize -tourmalite -tourn -tournament -tournamental -tournant -tournasin -tournay -tournee -tourney -tourneyer -tourniquet -tourte -tousche -touse -touser -tousle -tously -tousy -tout -touter -tovar -tovariaceous -tovarish -tow -towable -towage -towai -towan -toward -towardliness -towardly -towardness -towards -towboat -towcock -towd -towel -towelette -toweling -towelry -tower -towered -towering -toweringly -towerless -towerlet -towerlike -towerman -towerproof -towerwise -towerwork -towerwort -towery -towght -towhead -towheaded -towhee -towing -towkay -towlike -towline -towmast -town -towned -townee -towner -townet -townfaring -townfolk -townful -towngate -townhood -townify -towniness -townish -townishly -townishness -townist -townland -townless -townlet -townlike -townling -townly -townman -townsboy -townscape -townsfellow -townsfolk -township -townside -townsite -townsman -townspeople -townswoman -townward -townwards -townwear -towny -towpath -towrope -towser -towy -tox -toxa -toxalbumic -toxalbumin -toxalbumose -toxamin -toxanemia -toxaphene -toxcatl -toxemia -toxemic -toxic -toxicaemia -toxical -toxically -toxicant -toxicarol -toxication -toxicemia -toxicity -toxicodendrol -toxicoderma -toxicodermatitis -toxicodermatosis -toxicodermia -toxicodermitis -toxicogenic -toxicognath -toxicohaemia -toxicohemia -toxicoid -toxicologic -toxicological -toxicologically -toxicologist -toxicology -toxicomania -toxicopathic -toxicopathy -toxicophagous -toxicophagy -toxicophidia -toxicophobia -toxicosis -toxicotraumatic -toxicum -toxidermic -toxidermitis -toxifer -toxiferous -toxigenic -toxihaemia -toxihemia -toxiinfection -toxiinfectious -toxin -toxinemia -toxinfection -toxinfectious -toxinosis -toxiphobia -toxiphobiac -toxiphoric -toxitabellae -toxity -toxodont -toxogenesis -toxoglossate -toxoid -toxology -toxolysis -toxon -toxone -toxonosis -toxophil -toxophile -toxophilism -toxophilite -toxophilitic -toxophilitism -toxophilous -toxophily -toxophoric -toxophorous -toxoplasmosis -toxosis -toxosozin -toxotae -toy -toydom -toyer -toyful -toyfulness -toyhouse -toying -toyingly -toyish -toyishly -toyishness -toyland -toyless -toylike -toymaker -toymaking -toyman -toyon -toyshop -toysome -toytown -toywoman -toywort -toze -tozee -tozer -tra -trabacolo -trabal -trabant -trabascolo -trabea -trabeae -trabeatae -trabeated -trabeation -trabecula -trabecular -trabecularism -trabeculate -trabeculated -trabeculation -trabecule -trabuch -trabucho -trace -traceability -traceable -traceableness -traceably -traceless -tracelessly -tracer -traceried -tracery -trachea -tracheaectasy -tracheal -trachealgia -trachealis -trachean -trachearian -tracheary -tracheate -tracheation -tracheid -tracheidal -tracheitis -trachelagra -trachelate -trachelectomopexia -trachelectomy -trachelismus -trachelitis -trachelium -tracheloacromialis -trachelobregmatic -tracheloclavicular -trachelocyllosis -trachelodynia -trachelology -trachelomastoid -trachelopexia -tracheloplasty -trachelorrhaphy -tracheloscapular -trachelotomy -trachenchyma -tracheobronchial -tracheobronchitis -tracheocele -tracheochromatic -tracheoesophageal -tracheofissure -tracheolar -tracheolaryngeal -tracheolaryngotomy -tracheole -tracheolingual -tracheopathia -tracheopathy -tracheopharyngeal -tracheophone -tracheophonesis -tracheophonine -tracheophony -tracheoplasty -tracheopyosis -tracheorrhagia -tracheoschisis -tracheoscopic -tracheoscopist -tracheoscopy -tracheostenosis -tracheostomy -tracheotome -tracheotomist -tracheotomize -tracheotomy -trachinoid -trachitis -trachle -trachodont -trachodontid -trachomatous -trachomedusan -trachyandesite -trachybasalt -trachycarpous -trachychromatic -trachydolerite -trachyglossate -trachyline -trachymedusan -trachyphonia -trachyphonous -trachypteroid -trachyspermous -trachyte -trachytic -trachytoid -tracing -tracingly -track -trackable -trackage -trackbarrow -tracked -tracker -trackhound -trackingscout -tracklayer -tracklaying -trackless -tracklessly -tracklessness -trackman -trackmanship -trackmaster -trackscout -trackshifter -tracksick -trackside -trackwalker -trackway -trackwork -tract -tractability -tractable -tractableness -tractably -tractarian -tractarianize -tractate -tractator -tractatule -tractellate -tractellum -tractiferous -tractile -tractility -traction -tractional -tractioneering -tractlet -tractor -tractoration -tractorism -tractorist -tractorization -tractorize -tractory -tractrix -tradable -tradal -trade -tradecraft -tradeful -tradeless -trademaster -trader -tradership -tradesfolk -tradesman -tradesmanlike -tradesmanship -tradesmanwise -tradespeople -tradesperson -tradeswoman -tradiment -trading -tradite -tradition -traditional -traditionalism -traditionalist -traditionalistic -traditionality -traditionalize -traditionally -traditionarily -traditionary -traditionate -traditionately -traditioner -traditionism -traditionist -traditionitis -traditionize -traditionless -traditionmonger -traditious -traditive -traditor -traditores -traditorship -traduce -traducement -traducent -traducer -traducian -traducianism -traducianist -traducianistic -traducible -traducing -traducingly -traduction -traductionist -trady -traffic -trafficability -trafficable -trafficableness -trafficless -trafficway -trafflicker -trafflike -trag -tragacanth -tragacantha -tragacanthin -tragal -tragedial -tragedian -tragedianess -tragedical -tragedienne -tragedietta -tragedist -tragedization -tragedize -tragedy -tragelaph -tragelaphine -tragi -tragic -tragical -tragicality -tragically -tragicalness -tragicaster -tragicize -tragicly -tragicness -tragicofarcical -tragicoheroicomic -tragicolored -tragicomedian -tragicomedy -tragicomic -tragicomical -tragicomicality -tragicomically -tragicomipastoral -tragicoromantic -tragicose -tragopan -traguline -traguloid -tragus -trah -traheen -traik -trail -trailer -trailery -trailiness -trailing -trailingly -trailless -trailmaker -trailmaking -trailman -trailside -trailsman -traily -train -trainable -trainage -trainagraph -trainband -trainbearer -trainbolt -trainboy -trained -trainee -trainer -trainful -training -trainless -trainload -trainman -trainmaster -trainsick -trainster -traintime -trainway -trainy -traipse -trait -traitless -traitor -traitorhood -traitorism -traitorize -traitorlike -traitorling -traitorous -traitorously -traitorousness -traitorship -traitorwise -traitress -traject -trajectile -trajection -trajectitious -trajectory -trajet -tralatician -tralaticiary -tralatition -tralatitious -tralatitiously -tralira -tram -trama -tramal -tramcar -trame -tramful -tramless -tramline -tramman -trammel -trammeled -trammeler -trammelhead -trammeling -trammelingly -trammelled -trammellingly -trammer -tramming -trammon -tramontane -tramp -trampage -trampdom -tramper -trampess -tramphood -trampish -trampishly -trampism -trample -trampler -tramplike -trampolin -trampoline -trampoose -trampot -tramroad -tramsmith -tramway -tramwayman -tramyard -trance -tranced -trancedly -tranceful -trancelike -tranchefer -tranchet -trancoidal -traneen -trank -tranka -tranker -trankum -tranky -tranquil -tranquility -tranquilization -tranquilize -tranquilizer -tranquilizing -tranquilizingly -tranquillity -tranquillization -tranquillize -tranquilly -tranquilness -transaccidentation -transact -transaction -transactional -transactionally -transactioneer -transactor -transalpine -transalpinely -transalpiner -transamination -transanimate -transanimation -transannular -transapical -transappalachian -transaquatic -transarctic -transatlantic -transatlantically -transatlantican -transatlanticism -transaudient -transbaikal -transbaikalian -transbay -transboard -transborder -transcalency -transcalent -transcalescency -transcalescent -transceiver -transcend -transcendence -transcendency -transcendent -transcendental -transcendentalism -transcendentalist -transcendentalistic -transcendentality -transcendentalize -transcendentally -transcendently -transcendentness -transcendible -transcending -transcendingly -transcendingness -transcension -transchannel -transcolor -transcoloration -transconductance -transcondylar -transcondyloid -transconscious -transcontinental -transcorporate -transcorporeal -transcortical -transcreate -transcribable -transcribble -transcribbler -transcribe -transcriber -transcript -transcription -transcriptional -transcriptionally -transcriptitious -transcriptive -transcriptively -transcriptural -transcrystalline -transcurrent -transcurrently -transcurvation -transdermic -transdesert -transdialect -transdiaphragmatic -transdiurnal -transducer -transduction -transect -transection -transelement -transelementate -transelementation -transempirical -transenna -transept -transeptal -transeptally -transequatorial -transessentiate -transeunt -transexperiential -transfashion -transfeature -transfer -transferability -transferable -transferableness -transferably -transferal -transferee -transference -transferent -transferential -transferography -transferor -transferotype -transferred -transferrer -transferribility -transferring -transferror -transferrotype -transfigurate -transfiguration -transfigurative -transfigure -transfigurement -transfiltration -transfinite -transfix -transfixation -transfixion -transfixture -transfluent -transfluvial -transflux -transforation -transform -transformability -transformable -transformance -transformation -transformationist -transformative -transformator -transformer -transforming -transformingly -transformism -transformist -transformistic -transfrontal -transfrontier -transfuge -transfugitive -transfuse -transfuser -transfusible -transfusion -transfusionist -transfusive -transfusively -transgredient -transgress -transgressible -transgressing -transgressingly -transgression -transgressional -transgressive -transgressively -transgressor -transhape -transhuman -transhumanate -transhumanation -transhumance -transhumanize -transhumant -transience -transiency -transient -transiently -transientness -transigence -transigent -transiliac -transilience -transiliency -transilient -transilluminate -transillumination -transilluminator -transimpression -transincorporation -transindividual -transinsular -transire -transischiac -transisthmian -transistor -transit -transitable -transiter -transition -transitional -transitionally -transitionalness -transitionary -transitionist -transitival -transitive -transitively -transitiveness -transitivism -transitivity -transitman -transitorily -transitoriness -transitory -transitus -translade -translatable -translatableness -translate -translater -translation -translational -translationally -translative -translator -translatorese -translatorial -translatorship -translatory -translatress -translatrix -translay -transleithan -transletter -translinguate -transliterate -transliteration -transliterator -translocalization -translocate -translocation -translocatory -translucence -translucency -translucent -translucently -translucid -transmarginal -transmarine -transmaterial -transmateriation -transmedial -transmedian -transmental -transmentation -transmeridional -transmethylation -transmigrant -transmigrate -transmigration -transmigrationism -transmigrationist -transmigrative -transmigratively -transmigrator -transmigratory -transmissibility -transmissible -transmission -transmissional -transmissionist -transmissive -transmissively -transmissiveness -transmissivity -transmissometer -transmissory -transmit -transmittable -transmittal -transmittance -transmittancy -transmittant -transmitter -transmittible -transmogrification -transmogrifier -transmogrify -transmold -transmontane -transmorphism -transmundane -transmural -transmuscle -transmutability -transmutable -transmutableness -transmutably -transmutation -transmutational -transmutationist -transmutative -transmutatory -transmute -transmuter -transmuting -transmutive -transmutual -transnatation -transnational -transnatural -transnaturation -transnature -transnihilation -transnormal -transocean -transoceanic -transocular -transom -transomed -transonic -transorbital -transpacific -transpadane -transpalatine -transpalmar -transpanamic -transparence -transparency -transparent -transparentize -transparently -transparentness -transparietal -transparish -transpeciate -transpeciation -transpeer -transpenetrable -transpeninsular -transperitoneal -transperitoneally -transpersonal -transphenomenal -transphysical -transpicuity -transpicuous -transpicuously -transpierce -transpirability -transpirable -transpiration -transpirative -transpiratory -transpire -transpirometer -transplace -transplant -transplantability -transplantable -transplantar -transplantation -transplantee -transplanter -transplendency -transplendent -transplendently -transpleural -transpleurally -transpolar -transponibility -transponible -transpontine -transport -transportability -transportable -transportableness -transportal -transportance -transportation -transportational -transportationist -transportative -transported -transportedly -transportedness -transportee -transporter -transporting -transportingly -transportive -transportment -transposability -transposable -transposableness -transposal -transpose -transposer -transposition -transpositional -transpositive -transpositively -transpositor -transpository -transpour -transprint -transprocess -transprose -transproser -transpulmonary -transpyloric -transradiable -transrational -transreal -transrectification -transrhenane -transrhodanian -transriverine -transsegmental -transsensual -transseptal -transsepulchral -transshape -transshift -transship -transshipment -transsolid -transstellar -transsubjective -transtemporal -transthalamic -transthoracic -transubstantial -transubstantially -transubstantiate -transubstantiation -transubstantiationalist -transubstantiationite -transubstantiative -transubstantiatively -transubstantiatory -transudate -transudation -transudative -transudatory -transude -transumpt -transumption -transumptive -transuranian -transuranic -transuranium -transuterine -transvaal -transvaluate -transvaluation -transvalue -transvasate -transvasation -transvase -transvectant -transvection -transvenom -transverbate -transverbation -transverberate -transverberation -transversal -transversale -transversalis -transversality -transversally -transversan -transversary -transverse -transversely -transverseness -transverser -transversion -transversive -transversocubital -transversomedial -transversospinal -transversovertical -transversum -transversus -transvert -transverter -transvest -transvestism -transvestite -transvestitism -transvolation -transwritten -trant -tranter -trantlum -trap -trapaceous -trapball -trapes -trapezate -trapeze -trapezia -trapezial -trapezian -trapeziform -trapezing -trapeziometacarpal -trapezist -trapezium -trapezius -trapezohedral -trapezohedron -trapezoid -trapezoidal -trapezoidiform -trapfall -traphole -trapiferous -traplight -traplike -trapmaker -trapmaking -trappean -trapped -trapper -trapperlike -trappiness -trapping -trappingly -trappist -trappoid -trappose -trappous -trappy -traprock -traps -trapshoot -trapshooter -trapshooting -trapstick -trapunto -trasformism -trash -trashery -trashify -trashily -trashiness -traship -trashless -trashrack -trashy -trass -trasy -traulism -trauma -traumasthenia -traumatic -traumatically -traumaticin -traumaticine -traumatism -traumatize -traumatology -traumatonesis -traumatopnea -traumatopyra -traumatosis -traumatotactic -traumatotaxis -traumatropic -traumatropism -travail -travale -travally -travated -trave -travel -travelability -travelable -traveldom -traveled -traveler -traveleress -travelerlike -traveling -travellability -travellable -travelled -traveller -travelogue -traveloguer -traveltime -traversable -traversal -traversary -traverse -traversed -traversely -traverser -traversewise -traversework -traversing -traversion -travertin -travertine -travestier -travestiment -travesty -travis -travois -travoy -trawl -trawlboat -trawler -trawlerman -trawlnet -tray -trayful -traylike -treacher -treacherous -treacherously -treacherousness -treachery -treacle -treaclelike -treaclewort -treacliness -treacly -tread -treadboard -treader -treading -treadle -treadler -treadmill -treadwheel -treason -treasonable -treasonableness -treasonably -treasonful -treasonish -treasonist -treasonless -treasonmonger -treasonous -treasonously -treasonproof -treasurable -treasure -treasureless -treasurer -treasurership -treasuress -treasurous -treasury -treasuryship -treat -treatable -treatableness -treatably -treatee -treater -treating -treatise -treatiser -treatment -treator -treaty -treatyist -treatyite -treatyless -treble -trebleness -trebletree -trebly -trebuchet -trecentist -trechmannite -treckschuyt -treddle -tredecile -tredille -tree -treebeard -treebine -treed -treefish -treeful -treehair -treehood -treeify -treeiness -treeless -treelessness -treelet -treelike -treeling -treemaker -treemaking -treeman -treen -treenail -treescape -treeship -treespeeler -treetop -treeward -treewards -treey -tref -trefgordd -trefle -trefoil -trefoiled -trefoillike -trefoilwise -tregadyne -tregerg -tregohm -trehala -trehalase -trehalose -treillage -trek -trekker -trekometer -trekpath -trellis -trellised -trellislike -trelliswork -tremandraceous -trematode -trematoid -tremble -tremblement -trembler -trembling -tremblingly -tremblingness -tremblor -trembly -tremellaceous -tremelliform -tremelline -tremellineous -tremelloid -tremellose -tremendous -tremendously -tremendousness -tremetol -tremie -tremolando -tremolant -tremolist -tremolite -tremolitic -tremolo -tremor -tremorless -tremorlessly -tremulant -tremulate -tremulation -tremulous -tremulously -tremulousness -trenail -trench -trenchancy -trenchant -trenchantly -trenchantness -trenchboard -trenched -trencher -trencherless -trencherlike -trenchermaker -trenchermaking -trencherman -trencherside -trencherwise -trencherwoman -trenchful -trenchlet -trenchlike -trenchmaster -trenchmore -trenchward -trenchwise -trenchwork -trend -trendle -trental -trentepohliaceous -trepan -trepanation -trepang -trepanize -trepanner -trepanning -trepanningly -trephination -trephine -trephiner -trephocyte -trephone -trepid -trepidancy -trepidant -trepidate -trepidation -trepidatory -trepidity -trepidly -trepidness -treponematous -treponemiasis -treponemiatic -treponemicidal -treponemicide -trepostomatous -tresaiel -trespass -trespassage -trespasser -trespassory -tress -tressed -tressful -tressilate -tressilation -tressless -tresslet -tresslike -tresson -tressour -tressure -tressured -tressy -trest -trestle -trestletree -trestlewise -trestlework -trestling -tret -trevally -trevet -trews -trewsman -trey -tri -triable -triableness -triace -triacetamide -triacetate -triacetonamine -triachenium -triacid -triacontaeterid -triacontane -triaconter -triact -triactinal -triactine -triad -triadelphous -triadic -triadical -triadically -triadism -triadist -triaene -triaenose -triage -triagonal -triakisicosahedral -triakisicosahedron -triakisoctahedral -triakisoctahedrid -triakisoctahedron -triakistetrahedral -triakistetrahedron -trial -trialate -trialism -trialist -triality -trialogue -triamid -triamide -triamine -triamino -triammonium -triamylose -triander -triandrian -triandrous -triangle -triangled -triangler -triangleways -trianglewise -trianglework -triangular -triangularity -triangularly -triangulate -triangulately -triangulation -triangulator -trianguloid -triangulopyramidal -triangulotriangular -triannual -triannulate -triantelope -trianthous -triapsal -triapsidal -triarch -triarchate -triarchy -triarctic -triarcuated -triareal -triarii -triarticulate -triaster -triatic -triatomic -triatomicity -triaxial -triaxon -triaxonian -triazane -triazin -triazine -triazo -triazoic -triazole -triazolic -tribade -tribadism -tribady -tribal -tribalism -tribalist -tribally -tribarred -tribase -tribasic -tribasicity -tribasilar -tribble -tribe -tribeless -tribelet -tribelike -tribesfolk -tribeship -tribesman -tribesmanship -tribespeople -tribeswoman -triblastic -triblet -triboelectric -triboelectricity -tribofluorescence -tribofluorescent -triboluminescence -triboluminescent -tribometer -tribophosphorescence -tribophosphorescent -tribophosphoroscope -triborough -tribrac -tribrach -tribrachial -tribrachic -tribracteate -tribracteolate -tribromacetic -tribromide -tribromoethanol -tribromophenol -tribromphenate -tribromphenol -tribual -tribually -tribular -tribulate -tribulation -tribuloid -tribuna -tribunal -tribunate -tribune -tribuneship -tribunitial -tribunitian -tribunitiary -tribunitive -tributable -tributarily -tributariness -tributary -tribute -tributer -tributist -tributorian -tributyrin -trica -tricae -tricalcic -tricalcium -tricapsular -tricar -tricarballylic -tricarbimide -tricarbon -tricarboxylic -tricarinate -tricarinated -tricarpellary -tricarpellate -tricarpous -tricaudal -tricaudate -trice -tricellular -tricenarious -tricenarium -tricenary -tricennial -tricentenarian -tricentenary -tricentennial -tricentral -tricephal -tricephalic -tricephalous -tricephalus -triceps -triceria -tricerion -tricerium -trichatrophia -trichauxis -trichechine -trichechodont -trichevron -trichi -trichia -trichiasis -trichina -trichinae -trichinal -trichiniasis -trichiniferous -trichinization -trichinize -trichinoid -trichinopoly -trichinoscope -trichinoscopy -trichinosed -trichinosis -trichinotic -trichinous -trichite -trichitic -trichitis -trichiurid -trichiuroid -trichloride -trichlormethane -trichloro -trichloroacetic -trichloroethylene -trichloromethane -trichloromethyl -trichobacteria -trichobezoar -trichoblast -trichobranchia -trichobranchiate -trichocarpous -trichocephaliasis -trichoclasia -trichoclasis -trichocyst -trichocystic -trichode -trichoepithelioma -trichogen -trichogenous -trichoglossia -trichoglossine -trichogyne -trichogynial -trichogynic -trichoid -trichological -trichologist -trichology -trichoma -trichomaphyte -trichomatose -trichomatosis -trichomatous -trichome -trichomic -trichomonad -trichomoniasis -trichomycosis -trichonosus -trichopathic -trichopathy -trichophore -trichophoric -trichophyllous -trichophyte -trichophytia -trichophytic -trichophytosis -trichopore -trichopter -trichoptera -trichopteran -trichopteron -trichopterous -trichopterygid -trichord -trichorrhea -trichorrhexic -trichorrhexis -trichoschisis -trichosis -trichosporange -trichosporangial -trichosporangium -trichostasis -trichostrongyle -trichostrongylid -trichothallic -trichotillomania -trichotomic -trichotomism -trichotomist -trichotomize -trichotomous -trichotomously -trichotomy -trichroic -trichroism -trichromat -trichromate -trichromatic -trichromatism -trichromatist -trichrome -trichromic -trichronous -trichuriasis -trichy -tricinium -tricipital -tricircular -trick -tricker -trickery -trickful -trickily -trickiness -tricking -trickingly -trickish -trickishly -trickishness -trickle -trickless -tricklet -tricklike -trickling -tricklingly -trickly -trickment -trickproof -tricksical -tricksily -tricksiness -tricksome -trickster -trickstering -trickstress -tricksy -tricktrack -tricky -triclad -triclinate -triclinia -triclinial -tricliniarch -tricliniary -triclinic -triclinium -triclinohedric -tricoccose -tricoccous -tricolette -tricolic -tricolon -tricolor -tricolored -tricolumnar -tricompound -triconch -triconodont -triconodontid -triconodontoid -triconodonty -triconsonantal -triconsonantalism -tricophorous -tricorn -tricornered -tricornute -tricorporal -tricorporate -tricoryphean -tricosane -tricosanone -tricostate -tricosyl -tricosylic -tricot -tricotine -tricotyledonous -tricresol -tricrotic -tricrotism -tricrotous -tricrural -tricurvate -tricuspal -tricuspid -tricuspidal -tricuspidate -tricuspidated -tricussate -tricyanide -tricycle -tricyclene -tricycler -tricyclic -tricyclist -tridactyl -tridactylous -tridaily -triddler -tridecane -tridecene -tridecilateral -tridecoic -tridecyl -tridecylene -tridecylic -trident -tridental -tridentate -tridentated -tridentiferous -tridepside -tridermic -tridiametral -tridiapason -tridigitate -tridimensional -tridimensionality -tridimensioned -tridiurnal -tridominium -tridrachm -triduan -triduum -tridymite -tridynamous -tried -triedly -trielaidin -triene -triennial -trienniality -triennially -triennium -triens -triental -triequal -trier -trierarch -trierarchal -trierarchic -trierarchy -trierucin -trieteric -trieterics -triethanolamine -triethyl -triethylamine -triethylstibine -trifa -trifacial -trifarious -trifasciated -triferous -trifid -trifilar -trifistulary -triflagellate -trifle -trifledom -trifler -triflet -trifling -triflingly -triflingness -trifloral -triflorate -triflorous -trifluoride -trifocal -trifoil -trifold -trifoliate -trifoliated -trifoliolate -trifoliosis -trifolium -trifoly -triforial -triforium -triform -triformed -triformin -triformity -triformous -trifoveolate -trifuran -trifurcal -trifurcate -trifurcation -trig -trigamist -trigamous -trigamy -trigeminal -trigeminous -trigeneric -trigesimal -trigger -triggered -triggerfish -triggerless -trigintal -trigintennial -triglandular -triglid -triglochid -triglochin -triglot -trigly -triglyceride -triglyceryl -triglyph -triglyphal -triglyphed -triglyphic -triglyphical -trigness -trigon -trigonal -trigonally -trigone -trigonelline -trigoneutic -trigoneutism -trigoniacean -trigoniaceous -trigonic -trigonid -trigonite -trigonitis -trigonocephalic -trigonocephalous -trigonocephaly -trigonocerous -trigonododecahedron -trigonodont -trigonoid -trigonometer -trigonometric -trigonometrical -trigonometrician -trigonometry -trigonon -trigonotype -trigonous -trigonum -trigram -trigrammatic -trigrammatism -trigrammic -trigraph -trigraphic -triguttulate -trigyn -trigynian -trigynous -trihalide -trihedral -trihedron -trihemeral -trihemimer -trihemimeral -trihemimeris -trihemiobol -trihemiobolion -trihemitetartemorion -trihoral -trihourly -trihybrid -trihydrate -trihydrated -trihydric -trihydride -trihydrol -trihydroxy -trihypostatic -trijugate -trijugous -trijunction -trikaya -trike -triker -trikeria -trikerion -triketo -triketone -trikir -trilabe -trilabiate -trilamellar -trilamellated -trilaminar -trilaminate -trilarcenous -trilateral -trilaterality -trilaterally -trilateralness -trilaurin -trilby -trilemma -trilinear -trilineate -trilineated -trilingual -trilinguar -trilinolate -trilinoleate -trilinolenate -trilinolenin -trilit -trilite -triliteral -triliteralism -triliterality -triliterally -triliteralness -trilith -trilithic -trilithon -trill -trillachan -trillet -trilli -trilliaceous -trillibub -trilliin -trilling -trillion -trillionaire -trillionize -trillionth -trillium -trillo -trilobate -trilobated -trilobation -trilobe -trilobed -trilobite -trilobitic -trilocular -triloculate -trilogic -trilogical -trilogist -trilogy -trilophodont -triluminar -triluminous -trim -trimacer -trimacular -trimargarate -trimargarin -trimastigate -trimellitic -trimembral -trimensual -trimer -trimercuric -trimeric -trimeride -trimerite -trimerization -trimerous -trimesic -trimesinic -trimesitic -trimesitinic -trimester -trimestral -trimestrial -trimesyl -trimetalism -trimetallic -trimeter -trimethoxy -trimethyl -trimethylacetic -trimethylamine -trimethylbenzene -trimethylene -trimethylmethane -trimethylstibine -trimetric -trimetrical -trimetrogon -trimly -trimmer -trimming -trimmingly -trimness -trimodal -trimodality -trimolecular -trimonthly -trimoric -trimorph -trimorphic -trimorphism -trimorphous -trimotor -trimotored -trimstone -trimtram -trimuscular -trimyristate -trimyristin -trin -trinal -trinality -trinalize -trinary -trinational -trindle -trine -trinely -trinervate -trinerve -trinerved -trineural -tringine -tringle -tringoid -trinidado -trinitarian -trinitrate -trinitration -trinitride -trinitrin -trinitro -trinitrocarbolic -trinitrocellulose -trinitrocresol -trinitroglycerin -trinitromethane -trinitrophenol -trinitroresorcin -trinitrotoluene -trinitroxylene -trinitroxylol -trinity -trinityhood -trink -trinkerman -trinket -trinketer -trinketry -trinkety -trinkle -trinklement -trinklet -trinkums -trinoctial -trinodal -trinode -trinodine -trinol -trinomial -trinomialism -trinomialist -trinomiality -trinomially -trinopticon -trintle -trinucleate -trio -triobol -triobolon -trioctile -triocular -triode -triodia -triodion -triodontoid -trioecious -trioeciously -trioecism -triolcous -triole -trioleate -triolefin -trioleic -triolein -triolet -triology -trionychoid -trionychoidean -trionym -trionymal -trioperculate -trior -triorchis -triorchism -triorthogonal -triose -triovulate -trioxazine -trioxide -trioxymethylene -triozonide -trip -tripal -tripaleolate -tripalmitate -tripalmitin -tripara -tripart -triparted -tripartedly -tripartible -tripartient -tripartite -tripartitely -tripartition -tripaschal -tripe -tripedal -tripel -tripelike -tripeman -tripemonger -tripennate -tripenny -tripeptide -tripersonal -tripersonalism -tripersonalist -tripersonality -tripersonally -tripery -tripeshop -tripestone -tripetaloid -tripetalous -tripewife -tripewoman -triphammer -triphane -triphase -triphaser -triphasic -triphenyl -triphenylamine -triphenylated -triphenylcarbinol -triphenylmethane -triphenylmethyl -triphenylphosphine -triphibian -triphibious -triphony -triphthong -triphyletic -triphyline -triphylite -triphyllous -tripinnate -tripinnated -tripinnately -tripinnatifid -tripinnatisect -triplane -triplasian -triplasic -triple -tripleback -triplefold -triplegia -tripleness -triplet -tripletail -tripletree -triplewise -triplex -triplexity -triplicate -triplication -triplicative -triplicature -triplicity -triplicostate -tripliform -triplinerved -tripling -triplite -triploblastic -triplocaulescent -triplocaulous -triploid -triploidic -triploidite -triploidy -triplopia -triplopy -triplum -triplumbic -triply -tripmadam -tripod -tripodal -tripodial -tripodian -tripodic -tripodical -tripody -tripointed -tripolar -tripoli -tripoline -tripolite -tripos -tripotassium -trippant -tripper -trippet -tripping -trippingly -trippingness -trippist -tripple -trippler -tripsill -tripsis -tripsome -tripsomely -triptane -tripterous -triptote -triptych -triptyque -tripudial -tripudiant -tripudiary -tripudiate -tripudiation -tripudist -tripudium -tripunctal -tripunctate -tripy -tripylaean -tripylarian -tripyrenous -triquadrantal -triquetra -triquetral -triquetric -triquetrous -triquetrously -triquetrum -triquinate -triquinoyl -triradial -triradially -triradiate -triradiated -triradiately -triradiation -trirectangular -triregnum -trireme -trirhombohedral -trirhomboidal -triricinolein -trisaccharide -trisaccharose -trisacramentarian -trisalt -trisazo -trisceptral -trisect -trisected -trisection -trisector -trisectrix -triseme -trisemic -trisensory -trisepalous -triseptate -triserial -triserially -triseriate -triseriatim -trisetose -trishna -trisilane -trisilicane -trisilicate -trisilicic -trisinuate -trisinuated -triskele -triskelion -trismegist -trismegistic -trismic -trismus -trisoctahedral -trisoctahedron -trisodium -trisome -trisomic -trisomy -trisonant -trispast -trispaston -trispermous -trispinose -trisplanchnic -trisporic -trisporous -trisquare -trist -tristachyous -tristate -tristearate -tristearin -tristeness -tristetrahedron -tristeza -tristful -tristfully -tristfulness -tristich -tristichic -tristichous -tristigmatic -tristigmatose -tristiloquy -tristisonous -tristylous -trisubstituted -trisubstitution -trisul -trisula -trisulcate -trisulcated -trisulphate -trisulphide -trisulphone -trisulphonic -trisulphoxide -trisylabic -trisyllabical -trisyllabically -trisyllabism -trisyllabity -trisyllable -tritactic -tritagonist -tritangent -tritangential -tritanope -tritanopia -tritanopic -tritaph -trite -tritely -tritemorion -tritencephalon -triteness -triternate -triternately -triterpene -tritetartemorion -tritheism -tritheist -tritheistic -tritheistical -tritheite -tritheocracy -trithing -trithioaldehyde -trithiocarbonate -trithiocarbonic -trithionate -trithionic -tritical -triticality -tritically -triticalness -triticeous -triticeum -triticin -triticism -triticoid -triticum -tritish -tritium -tritocerebral -tritocerebrum -tritocone -tritoconid -tritolo -tritomite -triton -tritonal -tritonality -tritone -tritonoid -tritonous -tritonymph -tritonymphal -tritopatores -tritopine -tritor -tritoral -tritorium -tritoxide -tritozooid -tritriacontane -trittichan -tritubercular -trituberculism -trituberculy -triturable -tritural -triturate -trituration -triturator -triturature -triturium -trityl -triumph -triumphal -triumphance -triumphancy -triumphant -triumphantly -triumphator -triumpher -triumphing -triumphwise -triumvir -triumviral -triumvirate -triumviri -triumvirship -triunal -triune -triungulin -triunification -triunion -triunitarian -triunity -triunsaturated -triurid -trivalence -trivalency -trivalent -trivalerin -trivalve -trivalvular -trivant -trivantly -trivariant -triverbal -triverbial -trivet -trivetwise -trivia -trivial -trivialism -trivialist -triviality -trivialize -trivially -trivialness -trivirga -trivirgate -trivium -trivoltine -trivvet -triweekly -trizoic -trizomal -trizonal -trizone -troat -troca -trocaical -trocar -trochaic -trochaicality -trochal -trochalopod -trochalopodous -trochanter -trochanteric -trochanterion -trochantin -trochantinian -trochart -trochate -troche -trocheameter -trochee -trocheeize -trochelminth -trochi -trochid -trochiferous -trochiform -trochili -trochilic -trochilics -trochilidae -trochilidine -trochilidist -trochiline -trochilopodous -trochilus -troching -trochiscation -trochiscus -trochite -trochitic -trochlea -trochlear -trochleariform -trochlearis -trochleary -trochleate -trochleiform -trochocephalia -trochocephalic -trochocephalus -trochocephaly -trochodendraceous -trochoid -trochoidal -trochoidally -trochoides -trochometer -trochophore -trochosphere -trochospherical -trochozoic -trochozoon -trochus -trock -troco -troctolite -trod -trodden -trode -troegerite -troft -trog -trogger -troggin -troglodytal -troglodyte -troglodytic -troglodytical -troglodytish -troglodytism -trogon -trogonoid -trogs -trogue -troika -troilite -troke -troker -troll -trolldom -trolleite -troller -trolley -trolleyer -trolleyful -trolleyman -trollflower -trollimog -trolling -trollman -trollol -trollop -trollopish -trollops -trollopy -trolly -tromba -trombe -trombiculid -trombidiasis -trombone -trombonist -trombony -trommel -tromometer -tromometric -tromometrical -tromometry -tromp -trompe -trompil -trompillo -tromple -tron -trona -tronador -tronage -tronc -trondhjemite -trone -troner -troolie -troop -trooper -trooperess -troopfowl -troopship -troopwise -troostite -troostitic -troot -tropacocaine -tropaeolaceae -tropaeolaceous -tropaeolin -tropaion -tropal -troparia -troparion -tropary -tropate -trope -tropeic -tropeine -troper -tropesis -trophaea -trophaeum -trophal -trophallactic -trophallaxis -trophectoderm -trophedema -trophema -trophesial -trophesy -trophi -trophic -trophical -trophically -trophicity -trophied -trophism -trophobiont -trophobiosis -trophobiotic -trophoblast -trophoblastic -trophochromatin -trophocyte -trophoderm -trophodisc -trophodynamic -trophodynamics -trophogenesis -trophogenic -trophogeny -trophology -trophonema -trophoneurosis -trophoneurotic -trophonucleus -trophopathy -trophophore -trophophorous -trophophyte -trophoplasm -trophoplasmatic -trophoplasmic -trophoplast -trophosomal -trophosome -trophosperm -trophosphere -trophospongia -trophospongial -trophospongium -trophospore -trophotaxis -trophotherapy -trophothylax -trophotropic -trophotropism -trophozoite -trophozooid -trophy -trophyless -trophywort -tropic -tropical -tropicality -tropicalization -tropicalize -tropically -tropicopolitan -tropidine -tropine -tropism -tropismatic -tropist -tropistic -tropocaine -tropologic -tropological -tropologically -tropologize -tropology -tropometer -tropopause -tropophil -tropophilous -tropophyte -tropophytic -troposphere -tropostereoscope -tropoyl -troptometer -tropyl -trostera -trot -trotcozy -troth -trothful -trothless -trothlike -trothplight -trotlet -trotline -trotol -trotter -trottie -trottles -trottoir -trottoired -trotty -trotyl -troubadour -troubadourish -troubadourism -troubadourist -trouble -troubledly -troubledness -troublemaker -troublemaking -troublement -troubleproof -troubler -troublesome -troublesomely -troublesomeness -troubling -troublingly -troublous -troublously -troublousness -troubly -trough -troughful -troughing -troughlike -troughster -troughway -troughwise -troughy -trounce -trouncer -troupand -troupe -trouper -troupial -trouse -trouser -trouserdom -trousered -trouserettes -trouserian -trousering -trouserless -trousers -trousseau -trousseaux -trout -troutbird -trouter -troutflower -troutful -troutiness -troutless -troutlet -troutlike -trouty -trouvere -trouveur -trove -troveless -trover -trow -trowel -trowelbeak -troweler -trowelful -trowelman -trowing -trowlesworthite -trowman -trowth -troy -truancy -truandise -truant -truantcy -truantism -truantlike -truantly -truantness -truantry -truantship -trub -trubu -truce -trucebreaker -trucebreaking -truceless -trucemaker -trucemaking -trucial -trucidation -truck -truckage -trucker -truckful -trucking -truckle -truckler -trucklike -truckling -trucklingly -truckload -truckman -truckmaster -trucks -truckster -truckway -truculence -truculency -truculent -truculental -truculently -truculentness -truddo -trudellite -trudge -trudgen -trudger -true -trueborn -truebred -truehearted -trueheartedly -trueheartedness -truelike -truelove -trueness -truepenny -truer -truff -truffle -truffled -trufflelike -truffler -trufflesque -trug -truish -truism -truismatic -truistic -truistical -trull -truller -trullization -trullo -truly -trumbash -trummel -trump -trumper -trumperiness -trumpery -trumpet -trumpetbush -trumpeter -trumpeting -trumpetless -trumpetlike -trumpetry -trumpetweed -trumpetwood -trumpety -trumph -trumpie -trumpless -trumplike -trun -truncage -truncal -truncate -truncated -truncately -truncation -truncator -truncatorotund -truncatosinuate -truncature -trunch -trunched -truncheon -truncheoned -truncher -trunchman -trundle -trundlehead -trundler -trundleshot -trundletail -trundling -trunk -trunkback -trunked -trunkfish -trunkful -trunking -trunkless -trunkmaker -trunknose -trunkway -trunkwork -trunnel -trunnion -trunnioned -trunnionless -trush -trusion -truss -trussed -trussell -trusser -trussing -trussmaker -trussmaking -trusswork -trust -trustability -trustable -trustableness -trustably -trustee -trusteeism -trusteeship -trusten -truster -trustful -trustfully -trustfulness -trustification -trustify -trustihood -trustily -trustiness -trusting -trustingly -trustingness -trustle -trustless -trustlessly -trustlessness -trustman -trustmonger -trustwoman -trustworthily -trustworthiness -trustworthy -trusty -truth -truthable -truthful -truthfully -truthfulness -truthify -truthiness -truthless -truthlessly -truthlessness -truthlike -truthlikeness -truthsman -truthteller -truthtelling -truthy -truttaceous -truvat -truxillic -truxilline -try -trygon -tryhouse -trying -tryingly -tryingness -tryma -tryout -tryp -trypa -trypan -trypaneid -trypanocidal -trypanocide -trypanolysin -trypanolysis -trypanolytic -trypanosoma -trypanosomacidal -trypanosomacide -trypanosomal -trypanosomatic -trypanosomatosis -trypanosomatous -trypanosome -trypanosomiasis -trypanosomic -trypetid -trypiate -trypograph -trypographic -trypsin -trypsinize -trypsinogen -tryptase -tryptic -tryptogen -tryptone -tryptonize -tryptophan -trysail -tryst -tryster -trysting -tryt -tryworks -tsadik -tsamba -tsantsa -tsar -tsardom -tsarevitch -tsarina -tsaritza -tsarship -tsatlee -tscharik -tscheffkinite -tsere -tsessebe -tsetse -tsia -tsine -tsingtauite -tsiology -tst -tsuba -tsubo -tsumebite -tsun -tsunami -tsungtu -tu -tua -tuan -tuarn -tuart -tuatara -tuatera -tuath -tub -tuba -tubae -tubage -tubal -tubaphone -tubar -tubate -tubatoxin -tubba -tubbable -tubbal -tubbeck -tubber -tubbie -tubbiness -tubbing -tubbish -tubboe -tubby -tube -tubeflower -tubeform -tubeful -tubehead -tubehearted -tubeless -tubelet -tubelike -tubemaker -tubemaking -tubeman -tuber -tuberaceous -tuberation -tubercle -tubercled -tuberclelike -tubercula -tubercular -tuberculariaceous -tubercularization -tubercularize -tubercularly -tubercularness -tuberculate -tuberculated -tuberculatedly -tuberculately -tuberculation -tuberculatogibbous -tuberculatonodose -tuberculatoradiate -tuberculatospinous -tubercule -tuberculed -tuberculid -tuberculide -tuberculiferous -tuberculiform -tuberculin -tuberculinic -tuberculinization -tuberculinize -tuberculization -tuberculize -tuberculocele -tuberculocidin -tuberculoderma -tuberculoid -tuberculoma -tuberculomania -tuberculomata -tuberculophobia -tuberculoprotein -tuberculose -tuberculosectorial -tuberculosed -tuberculosis -tuberculotherapist -tuberculotherapy -tuberculotoxin -tuberculotrophic -tuberculous -tuberculously -tuberculousness -tuberculum -tuberiferous -tuberiform -tuberin -tuberization -tuberize -tuberless -tuberoid -tuberose -tuberosity -tuberous -tuberously -tuberousness -tubesmith -tubework -tubeworks -tubfish -tubful -tubicen -tubicinate -tubicination -tubicolar -tubicolous -tubicorn -tubicornous -tubifacient -tubifer -tubiferous -tubiflorous -tubiform -tubig -tubik -tubilingual -tubinarial -tubinarine -tubing -tubiparous -tubipore -tubiporid -tubiporoid -tubiporous -tublet -tublike -tubmaker -tubmaking -tubman -tuboabdominal -tubocurarine -tubolabellate -tuboligamentous -tuboovarial -tuboovarian -tuboperitoneal -tuborrhea -tubotympanal -tubovaginal -tubular -tubularia -tubularian -tubularidan -tubularity -tubularly -tubulate -tubulated -tubulation -tubulator -tubulature -tubule -tubulet -tubuli -tubulibranch -tubulibranchian -tubulibranchiate -tubulidentate -tubuliferan -tubuliferous -tubulifloral -tubuliflorous -tubuliform -tubulipore -tubuliporid -tubuliporoid -tubulization -tubulodermoid -tubuloracemose -tubulosaccular -tubulose -tubulostriato -tubulous -tubulously -tubulousness -tubulure -tubulus -tubwoman -tucandera -tuchit -tuchun -tuchunate -tuchunism -tuchunize -tuck -tuckahoe -tucker -tuckermanity -tucket -tucking -tuckner -tuckshop -tucktoo -tucky -tucum -tucuma -tucuman -tudel -tue -tueiron -tufa -tufaceous -tufalike -tufan -tuff -tuffaceous -tuffet -tuffing -tuft -tuftaffeta -tufted -tufter -tufthunter -tufthunting -tuftily -tufting -tuftlet -tufty -tug -tugboat -tugboatman -tugger -tuggery -tugging -tuggingly -tughra -tugless -tuglike -tugman -tugrik -tugui -tugurium -tui -tuik -tuille -tuillette -tuilyie -tuism -tuition -tuitional -tuitionary -tuitive -tuke -tukra -tula -tulare -tularemia -tulasi -tulchan -tulchin -tule -tuliac -tulip -tulipflower -tulipiferous -tulipist -tuliplike -tulipomania -tulipomaniac -tulipwood -tulipy -tulisan -tulle -tullibee -tulsi -tulwar -tum -tumasha -tumatakuru -tumatukuru -tumbak -tumbester -tumble -tumblebug -tumbled -tumbledung -tumbler -tumblerful -tumblerlike -tumblerwise -tumbleweed -tumblification -tumbling -tumblingly -tumbly -tumbrel -tume -tumefacient -tumefaction -tumefy -tumescence -tumescent -tumid -tumidity -tumidly -tumidness -tummals -tummel -tummer -tummock -tummy -tumor -tumored -tumorlike -tumorous -tump -tumpline -tumtum -tumular -tumulary -tumulate -tumulation -tumuli -tumulose -tumulosity -tumulous -tumult -tumultuarily -tumultuariness -tumultuary -tumultuate -tumultuation -tumultuous -tumultuously -tumultuousness -tumulus -tun -tuna -tunable -tunableness -tunably -tunbellied -tunbelly -tunca -tund -tundagslatta -tunder -tundish -tundra -tundun -tune -tuned -tuneful -tunefully -tunefulness -tuneless -tunelessly -tunelessness -tunemaker -tunemaking -tuner -tunesome -tunester -tunful -tung -tungate -tungo -tungstate -tungsten -tungstenic -tungsteniferous -tungstenite -tungstic -tungstite -tungstosilicate -tungstosilicic -tunhoof -tunic -tunicary -tunicate -tunicated -tunicin -tunicked -tunicle -tunicless -tuniness -tuning -tunish -tunist -tunk -tunket -tunlike -tunmoot -tunna -tunnel -tunneled -tunneler -tunneling -tunnelist -tunnelite -tunnellike -tunnelly -tunnelmaker -tunnelmaking -tunnelman -tunnelway -tunner -tunnery -tunnland -tunnor -tunny -tuno -tunu -tuny -tup -tupakihi -tupanship -tupara -tupek -tupelo -tupik -tupman -tuppence -tuppenny -tupuna -tuque -tur -turacin -turanose -turb -turban -turbaned -turbanesque -turbanette -turbanless -turbanlike -turbantop -turbanwise -turbary -turbeh -turbellarian -turbellariform -turbescency -turbid -turbidimeter -turbidimetric -turbidimetry -turbidity -turbidly -turbidness -turbinaceous -turbinage -turbinal -turbinate -turbinated -turbination -turbinatoconcave -turbinatocylindrical -turbinatoglobose -turbinatostipitate -turbine -turbinectomy -turbined -turbinelike -turbinelloid -turbiner -turbines -turbiniform -turbinoid -turbinotome -turbinotomy -turbit -turbith -turbitteen -turbo -turboalternator -turboblower -turbocompressor -turbodynamo -turboexciter -turbofan -turbogenerator -turbomachine -turbomotor -turbopump -turbosupercharge -turbosupercharger -turbot -turbotlike -turboventilator -turbulence -turbulency -turbulent -turbulently -turbulentness -turco -turcopole -turcopolier -turd -turdiform -turdine -turdoid -tureen -tureenful -turf -turfage -turfdom -turfed -turfen -turfiness -turfing -turfite -turfless -turflike -turfman -turfwise -turfy -turgency -turgent -turgently -turgesce -turgescence -turgescency -turgescent -turgescible -turgid -turgidity -turgidly -turgidness -turgite -turgoid -turgor -turgy -turicata -turio -turion -turioniferous -turjaite -turjite -turk -turken -turkey -turkeyback -turkeyberry -turkeybush -turkeyfoot -turkeylike -turkis -turkle -turlough -turm -turma -turment -turmeric -turmit -turmoil -turmoiler -turn -turnable -turnabout -turnagain -turnaround -turnaway -turnback -turnbout -turnbuckle -turncap -turncoat -turncoatism -turncock -turndown -turndun -turned -turnel -turner -turneraceous -turnerite -turnery -turney -turngate -turnhall -turnicine -turnicomorphic -turning -turningness -turnip -turniplike -turnipweed -turnipwise -turnipwood -turnipy -turnix -turnkey -turnoff -turnout -turnover -turnpike -turnpiker -turnpin -turnplate -turnplow -turnrow -turns -turnscrew -turnsheet -turnskin -turnsole -turnspit -turnstile -turnstone -turntable -turntail -turnup -turnwrest -turnwrist -turp -turpantineweed -turpentine -turpentineweed -turpentinic -turpeth -turpethin -turpid -turpidly -turpitude -turps -turquoise -turquoiseberry -turquoiselike -turr -turret -turreted -turrethead -turretlike -turrical -turricle -turricula -turriculae -turricular -turriculate -turriferous -turriform -turrigerous -turrilite -turriliticone -turritella -turritellid -turritelloid -turse -tursio -turtle -turtleback -turtlebloom -turtledom -turtledove -turtlehead -turtleize -turtlelike -turtler -turtlet -turtling -turtosa -tururi -turus -turwar -tusche -tush -tushed -tusher -tushery -tusk -tuskar -tusked -tusker -tuskish -tuskless -tusklike -tuskwise -tusky -tussah -tussal -tusser -tussicular -tussis -tussive -tussle -tussock -tussocked -tussocker -tussocky -tussore -tussur -tut -tutania -tutball -tute -tutee -tutela -tutelage -tutelar -tutelary -tutenag -tuth -tutin -tutiorism -tutiorist -tutly -tutman -tutor -tutorage -tutorer -tutoress -tutorhood -tutorial -tutorially -tutoriate -tutorism -tutorization -tutorize -tutorless -tutorly -tutorship -tutory -tutoyer -tutress -tutrice -tutrix -tuts -tutsan -tutster -tutti -tuttiman -tutty -tutu -tutulus -tutwork -tutworker -tutworkman -tuwi -tux -tuxedo -tuyere -tuza -tuzzle -twa -twaddle -twaddledom -twaddleize -twaddlement -twaddlemonger -twaddler -twaddlesome -twaddling -twaddlingly -twaddly -twaddy -twae -twaesome -twafauld -twagger -twain -twaite -twal -twale -twalpenny -twalpennyworth -twalt -twang -twanger -twanginess -twangle -twangler -twangy -twank -twanker -twanking -twankingly -twankle -twanky -twant -twarly -twas -twasome -twat -twatchel -twatterlight -twattle -twattler -twattling -tway -twayblade -twazzy -tweag -tweak -tweaker -tweaky -twee -tweed -tweeded -tweedle -tweedledee -tweedledum -tweedy -tweeg -tweel -tween -tweenlight -tweeny -tweesh -tweesht -tweest -tweet -tweeter -tweeze -tweezer -tweezers -tweil -twelfhynde -twelfhyndeman -twelfth -twelfthly -twelve -twelvefold -twelvehynde -twelvehyndeman -twelvemo -twelvemonth -twelvepence -twelvepenny -twelvescore -twentieth -twentiethly -twenty -twentyfold -twentymo -twere -twerp -twibil -twibilled -twice -twicer -twicet -twichild -twick -twiddle -twiddler -twiddling -twiddly -twifoil -twifold -twifoldly -twig -twigful -twigged -twiggen -twigger -twiggy -twigless -twiglet -twiglike -twigsome -twigwithy -twilight -twilightless -twilightlike -twilighty -twilit -twill -twilled -twiller -twilling -twilly -twilt -twin -twinable -twinberry -twinborn -twindle -twine -twineable -twinebush -twineless -twinelike -twinemaker -twinemaking -twiner -twinflower -twinfold -twinge -twingle -twinhood -twiningly -twinism -twink -twinkle -twinkledum -twinkleproof -twinkler -twinkles -twinkless -twinkling -twinklingly -twinkly -twinleaf -twinlike -twinling -twinly -twinned -twinner -twinness -twinning -twinship -twinsomeness -twinter -twiny -twire -twirk -twirl -twirler -twirligig -twirly -twiscar -twisel -twist -twistable -twisted -twistedly -twistened -twister -twisterer -twistical -twistification -twistily -twistiness -twisting -twistingly -twistiways -twistiwise -twistle -twistless -twisty -twit -twitch -twitchel -twitcheling -twitcher -twitchet -twitchety -twitchfire -twitchily -twitchiness -twitchingly -twitchy -twite -twitlark -twitten -twitter -twitteration -twitterboned -twitterer -twittering -twitteringly -twitterly -twittery -twittingly -twitty -twixt -twixtbrain -twizzened -twizzle -two -twodecker -twofold -twofoldly -twofoldness -twoling -twoness -twopence -twopenny -twosome -twyblade -twyhynde -tychism -tychite -tychoparthenogenesis -tychopotamic -tycoon -tycoonate -tyddyn -tydie -tye -tyee -tyg -tying -tyke -tyken -tykhana -tyking -tylarus -tyleberry -tylion -tyloma -tylopod -tylopodous -tylose -tylosis -tylosteresis -tylostylar -tylostyle -tylostylote -tylostylus -tylotate -tylote -tylotic -tylotoxea -tylotoxeate -tylotus -tylus -tymbalon -tymp -tympan -tympana -tympanal -tympanectomy -tympani -tympanic -tympanichord -tympanichordal -tympanicity -tympaniform -tympaning -tympanism -tympanist -tympanites -tympanitic -tympanitis -tympanocervical -tympanohyal -tympanomalleal -tympanomandibular -tympanomastoid -tympanomaxillary -tympanon -tympanoperiotic -tympanosis -tympanosquamosal -tympanostapedial -tympanotemporal -tympanotomy -tympanum -tympany -tynd -tyndallmeter -typal -typarchical -type -typecast -typeholder -typer -typescript -typeset -typesetter -typesetting -typewrite -typewriter -typewriting -typhaceous -typhemia -typhia -typhic -typhinia -typhization -typhlatonia -typhlatony -typhlectasis -typhlectomy -typhlenteritis -typhlitic -typhlitis -typhloalbuminuria -typhlocele -typhloempyema -typhloenteritis -typhlohepatitis -typhlolexia -typhlolithiasis -typhlology -typhlomegaly -typhlon -typhlopexia -typhlopexy -typhlophile -typhlopid -typhloptosis -typhlosis -typhlosolar -typhlosole -typhlostenosis -typhlostomy -typhlotomy -typhobacillosis -typhoemia -typhogenic -typhoid -typhoidal -typhoidin -typhoidlike -typholysin -typhomalaria -typhomalarial -typhomania -typhonia -typhonic -typhoon -typhoonish -typhopneumonia -typhose -typhosepsis -typhosis -typhotoxine -typhous -typhus -typic -typica -typical -typicality -typically -typicalness -typicon -typicum -typification -typifier -typify -typist -typo -typobar -typocosmy -typographer -typographia -typographic -typographical -typographically -typographist -typography -typolithographic -typolithography -typologic -typological -typologically -typologist -typology -typomania -typometry -typonym -typonymal -typonymic -typonymous -typophile -typorama -typoscript -typotelegraph -typotelegraphy -typothere -typothetae -typp -typtological -typtologist -typtology -typy -tyramine -tyranness -tyrannial -tyrannic -tyrannical -tyrannically -tyrannicalness -tyrannicidal -tyrannicide -tyrannicly -tyrannine -tyrannism -tyrannize -tyrannizer -tyrannizing -tyrannizingly -tyrannoid -tyrannophobia -tyrannosaur -tyrannous -tyrannously -tyrannousness -tyranny -tyrant -tyrantcraft -tyrantlike -tyrantship -tyre -tyremesis -tyriasis -tyro -tyrocidin -tyrocidine -tyroglyphid -tyrolite -tyrology -tyroma -tyromancy -tyromatous -tyrone -tyronic -tyronism -tyrosinase -tyrosine -tyrosinuria -tyrosyl -tyrotoxicon -tyrotoxine -tysonite -tyste -tyt -tzaritza -tzolkin -tzontle -u -uang -uayeb -uberant -uberous -uberously -uberousness -uberty -ubi -ubication -ubiety -ubiquarian -ubiquious -ubiquit -ubiquitarian -ubiquitariness -ubiquitary -ubiquitous -ubiquitously -ubiquitousness -ubiquity -ubussu -uckia -udal -udaler -udaller -udalman -udasi -udder -uddered -udderful -udderless -udderlike -udell -udo -udometer -udometric -udometry -udomograph -ug -ugh -uglification -uglifier -uglify -uglily -ugliness -uglisome -ugly -ugsome -ugsomely -ugsomeness -uhlan -uhllo -uhtensang -uhtsong -uily -uinal -uintaite -uintathere -uintjie -uitspan -uji -ukase -uke -ukiyoye -ukulele -ula -ulatrophia -ulcer -ulcerable -ulcerate -ulceration -ulcerative -ulcered -ulceromembranous -ulcerous -ulcerously -ulcerousness -ulcery -ulcuscle -ulcuscule -ule -ulema -ulemorrhagia -ulerythema -uletic -ulex -ulexine -ulexite -uliginose -uliginous -ulitis -ull -ulla -ullage -ullaged -ullagone -uller -ulling -ullmannite -ulluco -ulmaceous -ulmic -ulmin -ulminic -ulmo -ulmous -ulna -ulnad -ulnae -ulnar -ulnare -ulnaria -ulnocarpal -ulnocondylar -ulnometacarpal -ulnoradial -uloborid -ulocarcinoma -uloid -uloncus -ulorrhagia -ulorrhagy -ulorrhea -ulotrichaceous -ulotrichan -ulotrichous -ulotrichy -ulrichite -ulster -ulstered -ulsterette -ulstering -ulterior -ulteriorly -ultima -ultimacy -ultimata -ultimate -ultimately -ultimateness -ultimation -ultimatum -ultimity -ultimo -ultimobranchial -ultimogenitary -ultimogeniture -ultimum -ultra -ultrabasic -ultrabasite -ultrabelieving -ultrabenevolent -ultrabrachycephalic -ultrabrachycephaly -ultrabrilliant -ultracentenarian -ultracentenarianism -ultracentralizer -ultracentrifuge -ultraceremonious -ultrachurchism -ultracivil -ultracomplex -ultraconcomitant -ultracondenser -ultraconfident -ultraconscientious -ultraconservatism -ultraconservative -ultracordial -ultracosmopolitan -ultracredulous -ultracrepidarian -ultracrepidarianism -ultracrepidate -ultracritical -ultradandyism -ultradeclamatory -ultrademocratic -ultradespotic -ultradignified -ultradiscipline -ultradolichocephalic -ultradolichocephaly -ultradolichocranial -ultraeducationist -ultraeligible -ultraelliptic -ultraemphasis -ultraenergetic -ultraenforcement -ultraenthusiasm -ultraenthusiastic -ultraepiscopal -ultraevangelical -ultraexcessive -ultraexclusive -ultraexpeditious -ultrafantastic -ultrafashionable -ultrafastidious -ultrafederalist -ultrafeudal -ultrafidian -ultrafidianism -ultrafilter -ultrafilterability -ultrafilterable -ultrafiltrate -ultrafiltration -ultraformal -ultrafrivolous -ultragallant -ultragaseous -ultragenteel -ultragood -ultragrave -ultraheroic -ultrahonorable -ultrahuman -ultraimperialism -ultraimperialist -ultraimpersonal -ultrainclusive -ultraindifferent -ultraindulgent -ultraingenious -ultrainsistent -ultraintimate -ultrainvolved -ultraism -ultraist -ultraistic -ultralaborious -ultralegality -ultralenient -ultraliberal -ultraliberalism -ultralogical -ultraloyal -ultraluxurious -ultramarine -ultramaternal -ultramaximal -ultramelancholy -ultramicrochemical -ultramicrochemist -ultramicrochemistry -ultramicrometer -ultramicron -ultramicroscope -ultramicroscopic -ultramicroscopical -ultramicroscopy -ultraminute -ultramoderate -ultramodern -ultramodernism -ultramodernist -ultramodernistic -ultramodest -ultramontane -ultramontanism -ultramontanist -ultramorose -ultramulish -ultramundane -ultranational -ultranationalism -ultranationalist -ultranatural -ultranegligent -ultranice -ultranonsensical -ultraobscure -ultraobstinate -ultraofficious -ultraoptimistic -ultraornate -ultraorthodox -ultraorthodoxy -ultraoutrageous -ultrapapist -ultraparallel -ultraperfect -ultrapersuasive -ultraphotomicrograph -ultrapious -ultraplanetary -ultraplausible -ultrapopish -ultraproud -ultraprudent -ultraradical -ultraradicalism -ultrarapid -ultrareactionary -ultrared -ultrarefined -ultrarefinement -ultrareligious -ultraremuneration -ultrarepublican -ultrarevolutionary -ultrarevolutionist -ultraritualism -ultraromantic -ultraroyalism -ultraroyalist -ultrasanguine -ultrascholastic -ultraselect -ultraservile -ultrasevere -ultrashrewd -ultrasimian -ultrasolemn -ultrasonic -ultrasonics -ultraspartan -ultraspecialization -ultraspiritualism -ultrasplendid -ultrastandardization -ultrastellar -ultrasterile -ultrastrenuous -ultrastrict -ultrasubtle -ultrasystematic -ultratechnical -ultratense -ultraterrene -ultraterrestrial -ultratotal -ultratrivial -ultratropical -ultraugly -ultrauncommon -ultraurgent -ultravicious -ultraviolent -ultraviolet -ultravirtuous -ultravirus -ultravisible -ultrawealthy -ultrawise -ultrayoung -ultrazealous -ultrazodiacal -ultroneous -ultroneously -ultroneousness -ulu -ulua -uluhi -ululant -ululate -ululation -ululative -ululatory -ululu -ulvaceous -um -umangite -umbeclad -umbel -umbeled -umbella -umbellar -umbellate -umbellated -umbellately -umbellet -umbellic -umbellifer -umbelliferone -umbelliferous -umbelliflorous -umbelliform -umbelloid -umbellulate -umbellule -umbelluliferous -umbelwort -umber -umbethink -umbilectomy -umbilic -umbilical -umbilically -umbilicar -umbilicate -umbilicated -umbilication -umbilici -umbiliciform -umbilicus -umbiliform -umbilroot -umble -umbo -umbolateral -umbonal -umbonate -umbonated -umbonation -umbone -umbones -umbonial -umbonic -umbonulate -umbonule -umbra -umbracious -umbraciousness -umbraculate -umbraculiferous -umbraculiform -umbraculum -umbrae -umbrage -umbrageous -umbrageously -umbrageousness -umbral -umbrally -umbratile -umbrel -umbrella -umbrellaed -umbrellaless -umbrellalike -umbrellawise -umbrellawort -umbrette -umbriferous -umbriferously -umbriferousness -umbril -umbrine -umbrose -umbrosity -umbrous -ume -umiak -umiri -umlaut -ump -umph -umpirage -umpire -umpirer -umpireship -umpiress -umpirism -umpteen -umpteenth -umptekite -umptieth -umpty -umquhile -umu -un -unabandoned -unabased -unabasedly -unabashable -unabashed -unabashedly -unabatable -unabated -unabatedly -unabating -unabatingly -unabbreviated -unabetted -unabettedness -unabhorred -unabiding -unabidingly -unabidingness -unability -unabject -unabjured -unable -unableness -unably -unabolishable -unabolished -unabraded -unabrased -unabridgable -unabridged -unabrogated -unabrupt -unabsent -unabsolute -unabsolvable -unabsolved -unabsolvedness -unabsorb -unabsorbable -unabsorbed -unabsorbent -unabstract -unabsurd -unabundance -unabundant -unabundantly -unabused -unacademic -unacademical -unaccelerated -unaccent -unaccented -unaccentuated -unaccept -unacceptability -unacceptable -unacceptableness -unacceptably -unacceptance -unacceptant -unaccepted -unaccessibility -unaccessible -unaccessibleness -unaccessibly -unaccessional -unaccessory -unaccidental -unaccidentally -unaccidented -unacclimated -unacclimation -unacclimatization -unacclimatized -unaccommodable -unaccommodated -unaccommodatedness -unaccommodating -unaccommodatingly -unaccommodatingness -unaccompanable -unaccompanied -unaccompanying -unaccomplishable -unaccomplished -unaccomplishedness -unaccord -unaccordable -unaccordance -unaccordant -unaccorded -unaccording -unaccordingly -unaccostable -unaccosted -unaccountability -unaccountable -unaccountableness -unaccountably -unaccounted -unaccoutered -unaccoutred -unaccreditated -unaccredited -unaccrued -unaccumulable -unaccumulate -unaccumulated -unaccumulation -unaccuracy -unaccurate -unaccurately -unaccurateness -unaccursed -unaccusable -unaccusably -unaccuse -unaccusing -unaccustom -unaccustomed -unaccustomedly -unaccustomedness -unachievable -unachieved -unaching -unacidulated -unacknowledged -unacknowledgedness -unacknowledging -unacknowledgment -unacoustic -unacquaint -unacquaintable -unacquaintance -unacquainted -unacquaintedly -unacquaintedness -unacquiescent -unacquirable -unacquirableness -unacquirably -unacquired -unacquit -unacquittable -unacquitted -unacquittedness -unact -unactability -unactable -unacted -unacting -unactinic -unaction -unactivated -unactive -unactively -unactiveness -unactivity -unactorlike -unactual -unactuality -unactually -unactuated -unacute -unacutely -unadapt -unadaptability -unadaptable -unadaptableness -unadaptably -unadapted -unadaptedly -unadaptedness -unadaptive -unadd -unaddable -unadded -unaddicted -unaddictedness -unadditional -unaddress -unaddressed -unadequate -unadequately -unadequateness -unadherence -unadherent -unadherently -unadhesive -unadjacent -unadjacently -unadjectived -unadjourned -unadjournment -unadjudged -unadjust -unadjustably -unadjusted -unadjustment -unadministered -unadmirable -unadmire -unadmired -unadmiring -unadmissible -unadmissibly -unadmission -unadmittable -unadmittableness -unadmittably -unadmitted -unadmittedly -unadmitting -unadmonished -unadopt -unadoptable -unadoptably -unadopted -unadoption -unadorable -unadoration -unadored -unadoring -unadorn -unadornable -unadorned -unadornedly -unadornedness -unadornment -unadult -unadulterate -unadulterated -unadulteratedly -unadulteratedness -unadulterately -unadulterous -unadulterously -unadvanced -unadvancedly -unadvancedness -unadvancement -unadvancing -unadvantaged -unadvantageous -unadventured -unadventuring -unadventurous -unadventurously -unadverse -unadversely -unadverseness -unadvertency -unadvertised -unadvertisement -unadvertising -unadvisability -unadvisable -unadvisableness -unadvisably -unadvised -unadvisedly -unadvisedness -unadvocated -unaerated -unaesthetic -unaesthetical -unafeard -unafeared -unaffable -unaffably -unaffected -unaffectedly -unaffectedness -unaffecting -unaffectionate -unaffectionately -unaffectioned -unaffianced -unaffied -unaffiliated -unaffiliation -unaffirmation -unaffirmed -unaffixed -unafflicted -unafflictedly -unafflicting -unaffliction -unaffordable -unafforded -unaffranchised -unaffrighted -unaffrightedly -unaffronted -unafire -unafloat -unaflow -unafraid -unaged -unaggravated -unaggravating -unaggregated -unaggression -unaggressive -unaggressively -unaggressiveness -unaghast -unagile -unagility -unaging -unagitated -unagitatedly -unagitatedness -unagitation -unagonize -unagrarian -unagreeable -unagreeableness -unagreeably -unagreed -unagreeing -unagreement -unagricultural -unaidable -unaided -unaidedly -unaiding -unailing -unaimed -unaiming -unaired -unaisled -unakin -unakite -unal -unalarm -unalarmed -unalarming -unalcoholized -unaldermanly -unalert -unalertly -unalertness -unalgebraical -unalienable -unalienableness -unalienably -unalienated -unalignable -unaligned -unalike -unalimentary -unalist -unalive -unallayable -unallayably -unallayed -unalleged -unallegorical -unalleviably -unalleviated -unalleviation -unalliable -unallied -unalliedly -unalliedness -unallotment -unallotted -unallow -unallowable -unallowed -unallowedly -unallowing -unalloyed -unallurable -unallured -unalluring -unalluringly -unalmsed -unalone -unaloud -unalphabeted -unalphabetic -unalphabetical -unalterability -unalterable -unalterableness -unalterably -unalteration -unaltered -unaltering -unalternated -unamalgamable -unamalgamated -unamalgamating -unamassed -unamazed -unamazedly -unambiguity -unambiguous -unambiguously -unambiguousness -unambition -unambitious -unambitiously -unambitiousness -unambrosial -unambush -unamenability -unamenable -unamenableness -unamenably -unamend -unamendable -unamended -unamendedly -unamending -unamendment -unamerced -unamiability -unamiable -unamiableness -unamiably -unamicable -unamicably -unamiss -unamo -unamortization -unamortized -unample -unamplifiable -unamplified -unamply -unamputated -unamusable -unamusably -unamused -unamusement -unamusing -unamusingly -unamusive -unanalogical -unanalogous -unanalogously -unanalogousness -unanalytic -unanalytical -unanalyzable -unanalyzed -unanalyzing -unanatomizable -unanatomized -unancestored -unancestried -unanchor -unanchored -unanchylosed -unancient -unaneled -unangelic -unangelical -unangrily -unangry -unangular -unanimalized -unanimate -unanimated -unanimatedly -unanimatedness -unanimately -unanimism -unanimist -unanimistic -unanimistically -unanimity -unanimous -unanimously -unanimousness -unannealed -unannex -unannexed -unannexedly -unannexedness -unannihilable -unannihilated -unannotated -unannounced -unannoyed -unannoying -unannullable -unannulled -unanointed -unanswerability -unanswerable -unanswerableness -unanswerably -unanswered -unanswering -unantagonistic -unantagonizable -unantagonized -unantagonizing -unanticipated -unanticipating -unanticipatingly -unanticipation -unanticipative -unantiquated -unantiquatedness -unantique -unantiquity -unanxiety -unanxious -unanxiously -unanxiousness -unapart -unapocryphal -unapologetic -unapologizing -unapostatized -unapostolic -unapostolical -unapostolically -unapostrophized -unappalled -unappareled -unapparent -unapparently -unapparentness -unappealable -unappealableness -unappealably -unappealed -unappealing -unappeasable -unappeasableness -unappeasably -unappeased -unappeasedly -unappeasedness -unappendaged -unapperceived -unappertaining -unappetizing -unapplauded -unapplauding -unapplausive -unappliable -unappliableness -unappliably -unapplianced -unapplicable -unapplicableness -unapplicably -unapplied -unapplying -unappoint -unappointable -unappointableness -unappointed -unapportioned -unapposite -unappositely -unappraised -unappreciable -unappreciableness -unappreciably -unappreciated -unappreciating -unappreciation -unappreciative -unappreciatively -unappreciativeness -unapprehendable -unapprehendableness -unapprehendably -unapprehended -unapprehending -unapprehensible -unapprehensibleness -unapprehension -unapprehensive -unapprehensively -unapprehensiveness -unapprenticed -unapprised -unapprisedly -unapprisedness -unapproachability -unapproachable -unapproachableness -unapproached -unapproaching -unapprobation -unappropriable -unappropriate -unappropriated -unappropriately -unappropriateness -unappropriation -unapprovable -unapprovableness -unapprovably -unapproved -unapproving -unapprovingly -unapproximate -unapproximately -unaproned -unapropos -unapt -unaptitude -unaptly -unaptness -unarbitrarily -unarbitrariness -unarbitrary -unarbitrated -unarch -unarchdeacon -unarched -unarchitectural -unarduous -unarguable -unarguableness -unarguably -unargued -unarguing -unargumentative -unargumentatively -unarisen -unarising -unaristocratic -unaristocratically -unarithmetical -unarithmetically -unark -unarm -unarmed -unarmedly -unarmedness -unarmored -unarmorial -unaromatized -unarousable -unaroused -unarousing -unarraignable -unarraigned -unarranged -unarray -unarrayed -unarrestable -unarrested -unarresting -unarrival -unarrived -unarriving -unarrogance -unarrogant -unarrogating -unarted -unartful -unartfully -unartfulness -unarticled -unarticulate -unarticulated -unartificial -unartificiality -unartificially -unartistic -unartistical -unartistically -unartistlike -unary -unascendable -unascendableness -unascended -unascertainable -unascertainableness -unascertainably -unascertained -unashamed -unashamedly -unashamedness -unasinous -unaskable -unasked -unasking -unasleep -unaspersed -unasphalted -unaspirated -unaspiring -unaspiringly -unaspiringness -unassailable -unassailableness -unassailably -unassailed -unassailing -unassassinated -unassaultable -unassaulted -unassayed -unassaying -unassembled -unassented -unassenting -unasserted -unassertive -unassertiveness -unassessable -unassessableness -unassessed -unassibilated -unassiduous -unassignable -unassignably -unassigned -unassimilable -unassimilated -unassimilating -unassimilative -unassisted -unassisting -unassociable -unassociably -unassociated -unassociative -unassociativeness -unassoiled -unassorted -unassuageable -unassuaged -unassuaging -unassuetude -unassumable -unassumed -unassuming -unassumingly -unassumingness -unassured -unassuredly -unassuredness -unassuring -unasterisk -unastonish -unastonished -unastonishment -unastray -unathirst -unathletically -unatmospheric -unatonable -unatoned -unatoning -unattach -unattachable -unattached -unattackable -unattackableness -unattackably -unattacked -unattainability -unattainable -unattainableness -unattainably -unattained -unattaining -unattainment -unattaint -unattainted -unattaintedly -unattempered -unattemptable -unattempted -unattempting -unattendance -unattendant -unattended -unattentive -unattenuated -unattested -unattestedness -unattire -unattired -unattractable -unattractableness -unattracted -unattracting -unattractive -unattractively -unattractiveness -unattributable -unattributed -unattuned -unau -unauctioned -unaudible -unaudibleness -unaudibly -unaudienced -unaudited -unaugmentable -unaugmented -unauspicious -unauspiciously -unauspiciousness -unaustere -unauthentic -unauthentical -unauthentically -unauthenticated -unauthenticity -unauthorish -unauthoritative -unauthoritatively -unauthoritativeness -unauthoritied -unauthoritiveness -unauthorizable -unauthorize -unauthorized -unauthorizedly -unauthorizedness -unautomatic -unautumnal -unavailability -unavailable -unavailableness -unavailably -unavailed -unavailful -unavailing -unavailingly -unavengeable -unavenged -unavenging -unavenued -unaveraged -unaverred -unaverted -unavertible -unavertibleness -unavertibly -unavian -unavoidable -unavoidableness -unavoidably -unavoidal -unavoided -unavoiding -unavouchable -unavouchableness -unavouchably -unavouched -unavowable -unavowableness -unavowably -unavowed -unavowedly -unawakable -unawakableness -unawake -unawaked -unawakened -unawakenedness -unawakening -unawaking -unawardable -unawardableness -unawardably -unawarded -unaware -unawared -unawaredly -unawareness -unawares -unaway -unawed -unawful -unawfully -unawkward -unawned -unaxled -unazotized -unbackboarded -unbacked -unbackward -unbadged -unbaffled -unbaffling -unbag -unbagged -unbailable -unbailableness -unbailed -unbain -unbait -unbaited -unbaized -unbaked -unbalance -unbalanceable -unbalanceably -unbalanced -unbalancement -unbalancing -unbalconied -unbale -unbalked -unballast -unballasted -unballoted -unbandage -unbandaged -unbanded -unbanished -unbank -unbankable -unbankableness -unbankably -unbanked -unbankrupt -unbannered -unbaptize -unbaptized -unbar -unbarb -unbarbarize -unbarbarous -unbarbed -unbarbered -unbare -unbargained -unbark -unbarking -unbaronet -unbarrable -unbarred -unbarrel -unbarreled -unbarren -unbarrenness -unbarricade -unbarricaded -unbarricadoed -unbase -unbased -unbasedness -unbashful -unbashfully -unbashfulness -unbasket -unbastardized -unbaste -unbasted -unbastilled -unbastinadoed -unbated -unbathed -unbating -unbatted -unbatten -unbatterable -unbattered -unbattling -unbay -unbe -unbeached -unbeaconed -unbeaded -unbear -unbearable -unbearableness -unbearably -unbeard -unbearded -unbearing -unbeast -unbeatable -unbeatableness -unbeatably -unbeaten -unbeaued -unbeauteous -unbeauteously -unbeauteousness -unbeautified -unbeautiful -unbeautifully -unbeautifulness -unbeautify -unbeavered -unbeclogged -unbeclouded -unbecome -unbecoming -unbecomingly -unbecomingness -unbed -unbedabbled -unbedaggled -unbedashed -unbedaubed -unbedded -unbedecked -unbedewed -unbedimmed -unbedinned -unbedizened -unbedraggled -unbefit -unbefitting -unbefittingly -unbefittingness -unbefool -unbefriend -unbefriended -unbefringed -unbeget -unbeggar -unbegged -unbegilt -unbeginning -unbeginningly -unbeginningness -unbegirded -unbegirt -unbegot -unbegotten -unbegottenly -unbegottenness -unbegreased -unbegrimed -unbegrudged -unbeguile -unbeguiled -unbeguileful -unbegun -unbehaving -unbeheaded -unbeheld -unbeholdable -unbeholden -unbeholdenness -unbeholding -unbehoveful -unbehoving -unbeing -unbejuggled -unbeknown -unbeknownst -unbelied -unbelief -unbeliefful -unbelieffulness -unbelievability -unbelievable -unbelievableness -unbelievably -unbelieve -unbelieved -unbeliever -unbelieving -unbelievingly -unbelievingness -unbell -unbellicose -unbelligerent -unbelonging -unbeloved -unbelt -unbemoaned -unbemourned -unbench -unbend -unbendable -unbendableness -unbendably -unbended -unbending -unbendingly -unbendingness -unbendsome -unbeneficed -unbeneficent -unbeneficial -unbenefitable -unbenefited -unbenefiting -unbenetted -unbenevolence -unbenevolent -unbenevolently -unbenight -unbenighted -unbenign -unbenignant -unbenignantly -unbenignity -unbenignly -unbent -unbenumb -unbenumbed -unbequeathable -unbequeathed -unbereaved -unbereft -unberouged -unberth -unberufen -unbeseem -unbeseeming -unbeseemingly -unbeseemingness -unbeseemly -unbeset -unbesieged -unbesmeared -unbesmirched -unbesmutted -unbesot -unbesought -unbespeak -unbespoke -unbespoken -unbesprinkled -unbestarred -unbestowed -unbet -unbeteared -unbethink -unbethought -unbetide -unbetoken -unbetray -unbetrayed -unbetraying -unbetrothed -unbetterable -unbettered -unbeveled -unbewailed -unbewailing -unbewilder -unbewildered -unbewilled -unbewitch -unbewitched -unbewitching -unbewrayed -unbewritten -unbias -unbiasable -unbiased -unbiasedly -unbiasedness -unbibulous -unbickered -unbickering -unbid -unbidable -unbiddable -unbidden -unbigged -unbigoted -unbilled -unbillet -unbilleted -unbind -unbindable -unbinding -unbiographical -unbiological -unbirdlike -unbirdlimed -unbirdly -unbirthday -unbishop -unbishoply -unbit -unbiting -unbitt -unbitted -unbitten -unbitter -unblacked -unblackened -unblade -unblamable -unblamableness -unblamably -unblamed -unblaming -unblanched -unblanketed -unblasphemed -unblasted -unblazoned -unbleached -unbleaching -unbled -unbleeding -unblemishable -unblemished -unblemishedness -unblemishing -unblenched -unblenching -unblenchingly -unblendable -unblended -unblent -unbless -unblessed -unblessedness -unblest -unblighted -unblightedly -unblightedness -unblind -unblindfold -unblinking -unblinkingly -unbliss -unblissful -unblistered -unblithe -unblithely -unblock -unblockaded -unblocked -unblooded -unbloodied -unbloodily -unbloodiness -unbloody -unbloom -unbloomed -unblooming -unblossomed -unblossoming -unblotted -unbloused -unblown -unblued -unbluestockingish -unbluffed -unbluffing -unblunder -unblundered -unblundering -unblunted -unblurred -unblush -unblushing -unblushingly -unblushingness -unboarded -unboasted -unboastful -unboastfully -unboasting -unboat -unbodied -unbodiliness -unbodily -unboding -unbodkined -unbody -unbodylike -unbog -unboggy -unbohemianize -unboiled -unboisterous -unbokel -unbold -unbolden -unboldly -unboldness -unbolled -unbolster -unbolstered -unbolt -unbolted -unbombast -unbondable -unbondableness -unbonded -unbone -unboned -unbonnet -unbonneted -unbonny -unbooked -unbookish -unbooklearned -unboot -unbooted -unboraxed -unborder -unbordered -unbored -unboring -unborn -unborne -unborough -unborrowed -unborrowing -unbosom -unbosomer -unbossed -unbotanical -unbothered -unbothering -unbottle -unbottom -unbottomed -unbought -unbound -unboundable -unboundableness -unboundably -unbounded -unboundedly -unboundedness -unboundless -unbounteous -unbountiful -unbountifully -unbountifulness -unbow -unbowable -unbowdlerized -unbowed -unbowel -unboweled -unbowered -unbowing -unbowingness -unbowled -unbowsome -unbox -unboxed -unboy -unboyish -unboylike -unbrace -unbraced -unbracedness -unbracelet -unbraceleted -unbracing -unbragged -unbragging -unbraid -unbraided -unbrailed -unbrained -unbran -unbranched -unbranching -unbrand -unbranded -unbrandied -unbrave -unbraved -unbravely -unbraze -unbreachable -unbreached -unbreaded -unbreakable -unbreakableness -unbreakably -unbreakfasted -unbreaking -unbreast -unbreath -unbreathable -unbreathableness -unbreathed -unbreathing -unbred -unbreech -unbreeched -unbreezy -unbrent -unbrewed -unbribable -unbribableness -unbribably -unbribed -unbribing -unbrick -unbridegroomlike -unbridgeable -unbridged -unbridle -unbridled -unbridledly -unbridledness -unbridling -unbrief -unbriefed -unbriefly -unbright -unbrightened -unbrilliant -unbrimming -unbrined -unbrittle -unbroached -unbroad -unbroadcasted -unbroidered -unbroiled -unbroke -unbroken -unbrokenly -unbrokenness -unbronzed -unbrooch -unbrooded -unbrookable -unbrookably -unbrothered -unbrotherlike -unbrotherliness -unbrotherly -unbrought -unbrown -unbrowned -unbruised -unbrushed -unbrutalize -unbrutalized -unbrute -unbrutelike -unbrutify -unbrutize -unbuckle -unbuckramed -unbud -unbudded -unbudgeability -unbudgeable -unbudgeableness -unbudgeably -unbudged -unbudgeted -unbudging -unbuffed -unbuffered -unbuffeted -unbuild -unbuilded -unbuilt -unbulky -unbulled -unbulletined -unbumped -unbumptious -unbunched -unbundle -unbundled -unbung -unbungling -unbuoyant -unbuoyed -unburden -unburdened -unburdenment -unburdensome -unburdensomeness -unburgessed -unburiable -unburial -unburied -unburlesqued -unburly -unburn -unburnable -unburned -unburning -unburnished -unburnt -unburrow -unburrowed -unburst -unburstable -unburstableness -unburthen -unbury -unbush -unbusied -unbusily -unbusiness -unbusinesslike -unbusk -unbuskin -unbuskined -unbustling -unbusy -unbutchered -unbutcherlike -unbuttered -unbutton -unbuttoned -unbuttonment -unbuttressed -unbuxom -unbuxomly -unbuxomness -unbuyable -unbuyableness -unbuying -unca -uncabined -uncabled -uncadenced -uncage -uncaged -uncake -uncalcareous -uncalcified -uncalcined -uncalculable -uncalculableness -uncalculably -uncalculated -uncalculating -uncalculatingly -uncalendered -uncalk -uncalked -uncall -uncalled -uncallow -uncallower -uncalm -uncalmed -uncalmly -uncalumniated -uncambered -uncamerated -uncamouflaged -uncanceled -uncancellable -uncancelled -uncandid -uncandidly -uncandidness -uncandied -uncandor -uncaned -uncankered -uncanned -uncannily -uncanniness -uncanny -uncanonic -uncanonical -uncanonically -uncanonicalness -uncanonize -uncanonized -uncanopied -uncantoned -uncantonized -uncanvassably -uncanvassed -uncap -uncapable -uncapableness -uncapably -uncapacious -uncapacitate -uncaparisoned -uncapitalized -uncapped -uncapper -uncapsizable -uncapsized -uncaptained -uncaptioned -uncaptious -uncaptiously -uncaptivate -uncaptivated -uncaptivating -uncaptived -uncapturable -uncaptured -uncarbonated -uncarboned -uncarbureted -uncarded -uncardinal -uncardinally -uncareful -uncarefully -uncarefulness -uncaressed -uncargoed -uncaricatured -uncaring -uncarnate -uncarnivorous -uncaroled -uncarpentered -uncarpeted -uncarriageable -uncarried -uncart -uncarted -uncartooned -uncarved -uncase -uncased -uncasemated -uncask -uncasked -uncasketed -uncasque -uncassock -uncast -uncaste -uncastigated -uncastle -uncastled -uncastrated -uncasual -uncatalogued -uncatchable -uncate -uncatechised -uncatechisedness -uncatechized -uncatechizedness -uncategorized -uncathedraled -uncatholcity -uncatholic -uncatholical -uncatholicalness -uncatholicize -uncatholicly -uncaucusable -uncaught -uncausatively -uncaused -uncauterized -uncautious -uncautiously -uncautiousness -uncavalier -uncavalierly -uncave -unceasable -unceased -unceasing -unceasingly -unceasingness -unceded -unceiled -unceilinged -uncelebrated -uncelebrating -uncelestial -uncelestialized -uncellar -uncement -uncemented -uncementing -uncensorable -uncensored -uncensorious -uncensoriously -uncensoriousness -uncensurable -uncensured -uncensuring -uncenter -uncentered -uncentral -uncentrality -uncentrally -uncentred -uncentury -uncereclothed -unceremented -unceremonial -unceremonious -unceremoniously -unceremoniousness -uncertain -uncertainly -uncertainness -uncertainty -uncertifiable -uncertifiableness -uncertificated -uncertified -uncertifying -uncertitude -uncessant -uncessantly -uncessantness -unchafed -unchain -unchainable -unchained -unchair -unchaired -unchalked -unchallengeable -unchallengeableness -unchallengeably -unchallenged -unchallenging -unchambered -unchamfered -unchampioned -unchance -unchancellor -unchancy -unchange -unchangeability -unchangeable -unchangeableness -unchangeably -unchanged -unchangedness -unchangeful -unchangefulness -unchanging -unchangingly -unchangingness -unchanneled -unchannelled -unchanted -unchaperoned -unchaplain -unchapleted -unchapter -unchaptered -uncharacter -uncharactered -uncharacteristic -uncharacteristically -uncharacterized -uncharge -unchargeable -uncharged -uncharging -uncharily -unchariness -unchariot -uncharitable -uncharitableness -uncharitably -uncharity -uncharm -uncharmable -uncharmed -uncharming -uncharnel -uncharred -uncharted -unchartered -unchary -unchased -unchaste -unchastely -unchastened -unchasteness -unchastisable -unchastised -unchastising -unchastity -unchatteled -unchauffeured -unchawed -uncheat -uncheated -uncheating -uncheck -uncheckable -unchecked -uncheckered -uncheerable -uncheered -uncheerful -uncheerfully -uncheerfulness -uncheerily -uncheeriness -uncheering -uncheery -unchemical -unchemically -uncherished -uncherishing -unchested -unchevroned -unchewable -unchewableness -unchewed -unchid -unchidden -unchided -unchiding -unchidingly -unchild -unchildish -unchildishly -unchildishness -unchildlike -unchilled -unchiming -unchinked -unchipped -unchiseled -unchiselled -unchivalric -unchivalrous -unchivalrously -unchivalrousness -unchivalry -unchloridized -unchoicely -unchokable -unchoked -uncholeric -unchoosable -unchopped -unchoral -unchorded -unchosen -unchrisom -unchristen -unchristened -unchristian -unchristianity -unchristianize -unchristianized -unchristianlike -unchristianly -unchristianness -unchronicled -unchronological -unchronologically -unchurch -unchurched -unchurchlike -unchurchly -unchurn -unci -uncia -uncial -uncialize -uncially -uncicatrized -unciferous -unciform -unciliated -uncinal -uncinariasis -uncinariatic -uncinate -uncinated -uncinatum -uncinch -uncinct -uncinctured -uncini -uncinus -uncipher -uncircular -uncircularized -uncirculated -uncircumcised -uncircumcisedness -uncircumcision -uncircumlocutory -uncircumscribable -uncircumscribed -uncircumscribedness -uncircumscript -uncircumscriptible -uncircumscription -uncircumspect -uncircumspection -uncircumspectly -uncircumspectness -uncircumstanced -uncircumstantial -uncirostrate -uncite -uncited -uncitied -uncitizen -uncitizenlike -uncitizenly -uncity -uncivic -uncivil -uncivilish -uncivility -uncivilizable -uncivilization -uncivilize -uncivilized -uncivilizedly -uncivilizedness -uncivilly -uncivilness -unclad -unclaimed -unclaiming -unclamorous -unclamp -unclamped -unclarified -unclarifying -unclarity -unclashing -unclasp -unclasped -unclassable -unclassableness -unclassably -unclassed -unclassible -unclassical -unclassically -unclassifiable -unclassifiableness -unclassification -unclassified -unclassify -unclassifying -unclawed -unclay -unclayed -uncle -unclead -unclean -uncleanable -uncleaned -uncleanlily -uncleanliness -uncleanly -uncleanness -uncleansable -uncleanse -uncleansed -uncleansedness -unclear -uncleared -unclearing -uncleavable -uncleave -uncledom -uncleft -unclehood -unclement -unclemently -unclementness -unclench -unclergy -unclergyable -unclerical -unclericalize -unclerically -unclericalness -unclerklike -unclerkly -uncleship -unclever -uncleverly -uncleverness -unclew -unclick -uncliented -unclify -unclimaxed -unclimb -unclimbable -unclimbableness -unclimbably -unclimbed -unclimbing -unclinch -uncling -unclinical -unclip -unclipped -unclipper -uncloak -uncloakable -uncloaked -unclog -unclogged -uncloister -uncloistered -uncloistral -unclosable -unclose -unclosed -uncloseted -unclothe -unclothed -unclothedly -unclothedness -unclotted -uncloud -unclouded -uncloudedly -uncloudedness -uncloudy -unclout -uncloven -uncloyable -uncloyed -uncloying -unclub -unclubbable -unclubby -unclustered -unclustering -unclutch -unclutchable -unclutched -unclutter -uncluttered -unco -uncoach -uncoachable -uncoachableness -uncoached -uncoacted -uncoagulable -uncoagulated -uncoagulating -uncoat -uncoated -uncoatedness -uncoaxable -uncoaxed -uncoaxing -uncock -uncocked -uncockneyfy -uncocted -uncodded -uncoddled -uncoded -uncodified -uncoerced -uncoffer -uncoffin -uncoffined -uncoffle -uncogent -uncogged -uncogitable -uncognizable -uncognizant -uncognized -uncognoscibility -uncognoscible -uncoguidism -uncoherent -uncoherently -uncoherentness -uncohesive -uncoif -uncoifed -uncoil -uncoiled -uncoin -uncoined -uncoked -uncoking -uncollapsed -uncollapsible -uncollar -uncollared -uncollated -uncollatedness -uncollected -uncollectedly -uncollectedness -uncollectible -uncollectibleness -uncollectibly -uncolleged -uncollegian -uncollegiate -uncolloquial -uncolloquially -uncolonellike -uncolonial -uncolonize -uncolonized -uncolorable -uncolorably -uncolored -uncoloredly -uncoloredness -uncoloured -uncolouredly -uncolouredness -uncolt -uncoly -uncombable -uncombatable -uncombated -uncombed -uncombinable -uncombinableness -uncombinably -uncombine -uncombined -uncombining -uncombiningness -uncombustible -uncome -uncomelily -uncomeliness -uncomely -uncomfort -uncomfortable -uncomfortableness -uncomfortably -uncomforted -uncomforting -uncomfy -uncomic -uncommanded -uncommandedness -uncommanderlike -uncommemorated -uncommenced -uncommendable -uncommendableness -uncommendably -uncommended -uncommensurability -uncommensurable -uncommensurableness -uncommensurate -uncommented -uncommenting -uncommerciable -uncommercial -uncommercially -uncommercialness -uncommingled -uncomminuted -uncommiserated -uncommiserating -uncommissioned -uncommitted -uncommitting -uncommixed -uncommodious -uncommodiously -uncommodiousness -uncommon -uncommonable -uncommonly -uncommonness -uncommonplace -uncommunicable -uncommunicableness -uncommunicably -uncommunicated -uncommunicating -uncommunicative -uncommunicatively -uncommunicativeness -uncommutable -uncommutative -uncommuted -uncompact -uncompacted -uncompahgrite -uncompaniable -uncompanied -uncompanioned -uncomparable -uncomparably -uncompared -uncompass -uncompassable -uncompassed -uncompassion -uncompassionate -uncompassionated -uncompassionately -uncompassionateness -uncompassionating -uncompassioned -uncompatible -uncompatibly -uncompellable -uncompelled -uncompelling -uncompensable -uncompensated -uncompetent -uncompetitive -uncompiled -uncomplacent -uncomplained -uncomplaining -uncomplainingly -uncomplainingness -uncomplaint -uncomplaisance -uncomplaisant -uncomplaisantly -uncomplemental -uncompletable -uncomplete -uncompleted -uncompletely -uncompleteness -uncomplex -uncompliability -uncompliable -uncompliableness -uncompliance -uncompliant -uncomplicated -uncomplimentary -uncomplimented -uncomplimenting -uncomplying -uncomposable -uncomposeable -uncomposed -uncompoundable -uncompounded -uncompoundedly -uncompoundedness -uncompounding -uncomprehended -uncomprehending -uncomprehendingly -uncomprehendingness -uncomprehensible -uncomprehension -uncomprehensive -uncomprehensively -uncomprehensiveness -uncompressed -uncompressible -uncomprised -uncomprising -uncomprisingly -uncompromised -uncompromising -uncompromisingly -uncompromisingness -uncompulsive -uncompulsory -uncomputable -uncomputableness -uncomputably -uncomputed -uncomraded -unconcatenated -unconcatenating -unconcealable -unconcealableness -unconcealably -unconcealed -unconcealing -unconcealingly -unconcealment -unconceded -unconceited -unconceivable -unconceivableness -unconceivably -unconceived -unconceiving -unconcern -unconcerned -unconcernedly -unconcernedness -unconcerning -unconcernment -unconcertable -unconcerted -unconcertedly -unconcertedness -unconcessible -unconciliable -unconciliated -unconciliatedness -unconciliating -unconciliatory -unconcludable -unconcluded -unconcluding -unconcludingness -unconclusive -unconclusively -unconclusiveness -unconcocted -unconcordant -unconcrete -unconcreted -unconcurrent -unconcurring -uncondemnable -uncondemned -uncondensable -uncondensableness -uncondensed -uncondensing -uncondescending -uncondescension -uncondition -unconditional -unconditionality -unconditionally -unconditionalness -unconditionate -unconditionated -unconditionately -unconditioned -unconditionedly -unconditionedness -uncondoled -uncondoling -unconducing -unconducive -unconduciveness -unconducted -unconductive -unconductiveness -unconfected -unconfederated -unconferred -unconfess -unconfessed -unconfessing -unconfided -unconfidence -unconfident -unconfidential -unconfidentialness -unconfidently -unconfiding -unconfinable -unconfine -unconfined -unconfinedly -unconfinedness -unconfinement -unconfining -unconfirm -unconfirmative -unconfirmed -unconfirming -unconfiscable -unconfiscated -unconflicting -unconflictingly -unconflictingness -unconformability -unconformable -unconformableness -unconformably -unconformed -unconformedly -unconforming -unconformist -unconformity -unconfound -unconfounded -unconfoundedly -unconfrontable -unconfronted -unconfusable -unconfusably -unconfused -unconfusedly -unconfutable -unconfuted -unconfuting -uncongeal -uncongealable -uncongealed -uncongenial -uncongeniality -uncongenially -uncongested -unconglobated -unconglomerated -unconglutinated -uncongratulate -uncongratulated -uncongratulating -uncongregated -uncongregational -uncongressional -uncongruous -unconjecturable -unconjectured -unconjoined -unconjugal -unconjugated -unconjunctive -unconjured -unconnected -unconnectedly -unconnectedness -unconned -unconnived -unconniving -unconquerable -unconquerableness -unconquerably -unconquered -unconscienced -unconscient -unconscientious -unconscientiously -unconscientiousness -unconscionable -unconscionableness -unconscionably -unconscious -unconsciously -unconsciousness -unconsecrate -unconsecrated -unconsecratedly -unconsecratedness -unconsecration -unconsecutive -unconsent -unconsentaneous -unconsented -unconsenting -unconsequential -unconsequentially -unconsequentialness -unconservable -unconservative -unconserved -unconserving -unconsiderable -unconsiderate -unconsiderately -unconsiderateness -unconsidered -unconsideredly -unconsideredness -unconsidering -unconsideringly -unconsignable -unconsigned -unconsistent -unconsociable -unconsociated -unconsolable -unconsolably -unconsolatory -unconsoled -unconsolidated -unconsolidating -unconsolidation -unconsoling -unconsonancy -unconsonant -unconsonantly -unconsonous -unconspicuous -unconspicuously -unconspicuousness -unconspired -unconspiring -unconspiringly -unconspiringness -unconstancy -unconstant -unconstantly -unconstantness -unconstellated -unconstipated -unconstituted -unconstitutional -unconstitutionalism -unconstitutionality -unconstitutionally -unconstrainable -unconstrained -unconstrainedly -unconstrainedness -unconstraining -unconstraint -unconstricted -unconstruable -unconstructed -unconstructive -unconstructural -unconstrued -unconsular -unconsult -unconsultable -unconsulted -unconsulting -unconsumable -unconsumed -unconsuming -unconsummate -unconsummated -unconsumptive -uncontagious -uncontainable -uncontainableness -uncontainably -uncontained -uncontaminable -uncontaminate -uncontaminated -uncontemned -uncontemnedly -uncontemplated -uncontemporaneous -uncontemporary -uncontemptuous -uncontended -uncontending -uncontent -uncontentable -uncontented -uncontentedly -uncontentedness -uncontenting -uncontentingness -uncontentious -uncontentiously -uncontentiousness -uncontestable -uncontestableness -uncontestably -uncontested -uncontestedly -uncontestedness -uncontinence -uncontinent -uncontinental -uncontinented -uncontinently -uncontinual -uncontinued -uncontinuous -uncontorted -uncontract -uncontracted -uncontractedness -uncontractile -uncontradictable -uncontradictableness -uncontradictably -uncontradicted -uncontradictedly -uncontradictious -uncontradictory -uncontrastable -uncontrasted -uncontrasting -uncontributed -uncontributing -uncontributory -uncontrite -uncontrived -uncontriving -uncontrol -uncontrollability -uncontrollable -uncontrollableness -uncontrollably -uncontrolled -uncontrolledly -uncontrolledness -uncontrolling -uncontroversial -uncontroversially -uncontrovertable -uncontrovertableness -uncontrovertably -uncontroverted -uncontrovertedly -uncontrovertible -uncontrovertibleness -uncontrovertibly -unconvenable -unconvened -unconvenience -unconvenient -unconveniently -unconventional -unconventionalism -unconventionality -unconventionalize -unconventionally -unconventioned -unconversable -unconversableness -unconversably -unconversant -unconversational -unconversion -unconvert -unconverted -unconvertedly -unconvertedness -unconvertibility -unconvertible -unconveyable -unconveyed -unconvicted -unconvicting -unconvince -unconvinced -unconvincedly -unconvincedness -unconvincibility -unconvincible -unconvincing -unconvincingly -unconvincingness -unconvoluted -unconvoyed -unconvulsed -uncookable -uncooked -uncooled -uncoop -uncooped -uncoopered -uncooping -uncope -uncopiable -uncopied -uncopious -uncopyrighted -uncoquettish -uncoquettishly -uncord -uncorded -uncordial -uncordiality -uncordially -uncording -uncore -uncored -uncork -uncorked -uncorker -uncorking -uncorned -uncorner -uncoronated -uncoroneted -uncorporal -uncorpulent -uncorrect -uncorrectable -uncorrected -uncorrectible -uncorrectly -uncorrectness -uncorrelated -uncorrespondency -uncorrespondent -uncorresponding -uncorrigible -uncorrigibleness -uncorrigibly -uncorroborated -uncorroded -uncorrugated -uncorrupt -uncorrupted -uncorruptedly -uncorruptedness -uncorruptibility -uncorruptible -uncorruptibleness -uncorruptibly -uncorrupting -uncorruption -uncorruptive -uncorruptly -uncorruptness -uncorseted -uncosseted -uncost -uncostliness -uncostly -uncostumed -uncottoned -uncouch -uncouched -uncouching -uncounselable -uncounseled -uncounsellable -uncounselled -uncountable -uncountableness -uncountably -uncounted -uncountenanced -uncounteracted -uncounterbalanced -uncounterfeit -uncounterfeited -uncountermandable -uncountermanded -uncountervailed -uncountess -uncountrified -uncouple -uncoupled -uncoupler -uncourageous -uncoursed -uncourted -uncourteous -uncourteously -uncourteousness -uncourtierlike -uncourting -uncourtlike -uncourtliness -uncourtly -uncous -uncousinly -uncouth -uncouthie -uncouthly -uncouthness -uncouthsome -uncovenant -uncovenanted -uncover -uncoverable -uncovered -uncoveredly -uncoveted -uncoveting -uncovetingly -uncovetous -uncowed -uncowl -uncoy -uncracked -uncradled -uncraftily -uncraftiness -uncrafty -uncram -uncramp -uncramped -uncrampedness -uncranked -uncrannied -uncrated -uncravatted -uncraven -uncraving -uncravingly -uncrazed -uncream -uncreased -uncreatability -uncreatable -uncreatableness -uncreate -uncreated -uncreatedness -uncreating -uncreation -uncreative -uncreativeness -uncreaturely -uncredentialed -uncredentialled -uncredibility -uncredible -uncredibly -uncreditable -uncreditableness -uncreditably -uncredited -uncrediting -uncredulous -uncreeping -uncreosoted -uncrest -uncrested -uncrevassed -uncrib -uncried -uncrime -uncriminal -uncriminally -uncrinkle -uncrinkled -uncrinkling -uncrippled -uncrisp -uncritical -uncritically -uncriticisable -uncriticised -uncriticising -uncriticisingly -uncriticism -uncriticizable -uncriticized -uncriticizing -uncriticizingly -uncrochety -uncrook -uncrooked -uncrooking -uncropped -uncropt -uncross -uncrossable -uncrossableness -uncrossed -uncrossexaminable -uncrossexamined -uncrossly -uncrowded -uncrown -uncrowned -uncrowning -uncrucified -uncrudded -uncrude -uncruel -uncrumbled -uncrumple -uncrumpling -uncrushable -uncrushed -uncrusted -uncrying -uncrystaled -uncrystalled -uncrystalline -uncrystallizability -uncrystallizable -uncrystallized -unction -unctional -unctioneer -unctionless -unctious -unctiousness -unctorium -unctuose -unctuosity -unctuous -unctuously -unctuousness -uncubbed -uncubic -uncuckold -uncuckolded -uncudgelled -uncuffed -uncular -unculled -uncultivability -uncultivable -uncultivate -uncultivated -uncultivation -unculturable -unculture -uncultured -uncumber -uncumbered -uncumbrous -uncunning -uncunningly -uncunningness -uncupped -uncurable -uncurableness -uncurably -uncurb -uncurbable -uncurbed -uncurbedly -uncurbing -uncurd -uncurdled -uncurdling -uncured -uncurious -uncuriously -uncurl -uncurled -uncurling -uncurrent -uncurrently -uncurrentness -uncurricularized -uncurried -uncurse -uncursed -uncursing -uncurst -uncurtailed -uncurtain -uncurtained -uncus -uncushioned -uncusped -uncustomable -uncustomarily -uncustomariness -uncustomary -uncustomed -uncut -uncuth -uncuticulate -uncuttable -uncynical -uncynically -uncypress -undabbled -undaggled -undaily -undaintiness -undainty -undallying -undam -undamageable -undamaged -undamaging -undamasked -undammed -undamming -undamn -undamped -undancing -undandiacal -undandled -undangered -undangerous -undangerousness -undared -undaring -undark -undarken -undarkened -undarned -undashed -undatable -undate -undateable -undated -undatedness -undaub -undaubed -undaughter -undaughterliness -undaughterly -undauntable -undaunted -undauntedly -undauntedness -undaunting -undawned -undawning -undazed -undazing -undazzle -undazzled -undazzling -unde -undead -undeadened -undeaf -undealable -undealt -undean -undear -undebarred -undebased -undebatable -undebated -undebating -undebauched -undebilitated -undebilitating -undecagon -undecanaphthene -undecane -undecatoic -undecayable -undecayableness -undecayed -undecayedness -undecaying -undeceased -undeceitful -undeceivable -undeceivableness -undeceivably -undeceive -undeceived -undeceiver -undeceiving -undecency -undecennary -undecennial -undecent -undecently -undeception -undeceptious -undeceptitious -undeceptive -undecidable -undecide -undecided -undecidedly -undecidedness -undeciding -undecimal -undeciman -undecimole -undecipher -undecipherability -undecipherable -undecipherably -undeciphered -undecision -undecisive -undecisively -undecisiveness -undeck -undecked -undeclaimed -undeclaiming -undeclamatory -undeclarable -undeclare -undeclared -undeclinable -undeclinableness -undeclinably -undeclined -undeclining -undecocted -undecoic -undecolic -undecomposable -undecomposed -undecompounded -undecorated -undecorative -undecorous -undecorously -undecorousness -undecorticated -undecoyed -undecreased -undecreasing -undecree -undecreed -undecried -undecyl -undecylenic -undecylic -undedicate -undedicated -undeducible -undeducted -undeeded -undeemed -undeemous -undeemously -undeep -undefaceable -undefaced -undefalcated -undefamed -undefaming -undefatigable -undefaulted -undefaulting -undefeasible -undefeat -undefeatable -undefeated -undefeatedly -undefeatedness -undefecated -undefectible -undefective -undefectiveness -undefendable -undefendableness -undefendably -undefended -undefending -undefense -undefensed -undefensible -undeferential -undeferentially -undeferred -undefiant -undeficient -undefied -undefilable -undefiled -undefiledly -undefiledness -undefinable -undefinableness -undefinably -undefine -undefined -undefinedly -undefinedness -undeflected -undeflowered -undeformed -undeformedness -undefrauded -undefrayed -undeft -undegeneracy -undegenerate -undegenerated -undegenerating -undegraded -undegrading -undeification -undeified -undeify -undeistical -undejected -undelated -undelayable -undelayed -undelayedly -undelaying -undelayingly -undelectable -undelectably -undelegated -undeleted -undeliberate -undeliberated -undeliberately -undeliberateness -undeliberating -undeliberatingly -undeliberative -undeliberativeness -undelible -undelicious -undelight -undelighted -undelightful -undelightfully -undelightfulness -undelighting -undelightsome -undelimited -undelineated -undeliverable -undeliverableness -undelivered -undelivery -undeludable -undelude -undeluded -undeluding -undeluged -undelusive -undelusively -undelve -undelved -undelylene -undemagnetizable -undemanded -undemised -undemocratic -undemocratically -undemocratize -undemolishable -undemolished -undemonstrable -undemonstrably -undemonstratable -undemonstrated -undemonstrative -undemonstratively -undemonstrativeness -undemure -undemurring -unden -undeniable -undeniableness -undeniably -undenied -undeniedly -undenizened -undenominated -undenominational -undenominationalism -undenominationalist -undenominationalize -undenominationally -undenoted -undenounced -undenuded -undepartableness -undepartably -undeparted -undeparting -undependable -undependableness -undependably -undependent -undepending -undephlegmated -undepicted -undepleted -undeplored -undeported -undeposable -undeposed -undeposited -undepraved -undepravedness -undeprecated -undepreciated -undepressed -undepressible -undepressing -undeprivable -undeprived -undepurated -undeputed -under -underabyss -underaccident -underaccommodated -underact -underacted -underacting -underaction -underactor -underadjustment -underadmiral -underadventurer -underage -underagency -underagent -underagitation -underaid -underaim -underair -underalderman -underanged -underarch -underargue -underarm -underaverage -underback -underbailiff -underbake -underbalance -underballast -underbank -underbarber -underbarring -underbasal -underbeadle -underbeak -underbeam -underbear -underbearer -underbearing -underbeat -underbeaten -underbed -underbelly -underbeveling -underbid -underbidder -underbill -underbillow -underbishop -underbishopric -underbit -underbite -underbitted -underbitten -underboard -underboated -underbodice -underbody -underboil -underboom -underborn -underborne -underbottom -underbough -underbought -underbound -underbowed -underbowser -underbox -underboy -underbrace -underbraced -underbranch -underbreath -underbreathing -underbred -underbreeding -underbrew -underbridge -underbrigadier -underbright -underbrim -underbrush -underbubble -underbud -underbuild -underbuilder -underbuilding -underbuoy -underburn -underburned -underburnt -underbursar -underbury -underbush -underbutler -underbuy -undercanopy -undercanvass -undercap -undercapitaled -undercapitalization -undercapitalize -undercaptain -undercarder -undercarriage -undercarry -undercarter -undercarve -undercarved -undercase -undercasing -undercast -undercause -underceiling -undercellar -undercellarer -underchamber -underchamberlain -underchancellor -underchanter -underchap -undercharge -undercharged -underchief -underchime -underchin -underchord -underchurched -undercircle -undercitizen -underclad -underclass -underclassman -underclay -underclearer -underclerk -underclerkship -undercliff -underclift -undercloak -undercloth -underclothe -underclothed -underclothes -underclothing -underclub -underclutch -undercoachman -undercoat -undercoated -undercoater -undercoating -undercollector -undercolor -undercolored -undercoloring -undercommander -undercomment -undercompounded -underconcerned -undercondition -underconsciousness -underconstable -underconsume -underconsumption -undercook -undercool -undercooper -undercorrect -undercountenance -undercourse -undercourtier -undercover -undercovering -undercovert -undercrawl -undercreep -undercrest -undercrier -undercroft -undercrop -undercrust -undercry -undercrypt -undercup -undercurl -undercurrent -undercurve -undercut -undercutter -undercutting -underdauber -underdeacon -underdead -underdebauchee -underdeck -underdepth -underdevelop -underdevelopment -underdevil -underdialogue -underdig -underdip -underdish -underdistinction -underdistributor -underditch -underdive -underdo -underdoctor -underdoer -underdog -underdoing -underdone -underdose -underdot -underdown -underdraft -underdrag -underdrain -underdrainage -underdrainer -underdraught -underdraw -underdrawers -underdrawn -underdress -underdressed -underdrift -underdrive -underdriven -underdrudgery -underdrumming -underdry -underdunged -underearth -undereat -undereaten -underedge -undereducated -underemployment -underengraver -underenter -underer -underescheator -underestimate -underestimation -underexcited -underexercise -underexpose -underexposure -undereye -underface -underfaction -underfactor -underfaculty -underfalconer -underfall -underfarmer -underfeathering -underfeature -underfed -underfeed -underfeeder -underfeeling -underfeet -underfellow -underfiend -underfill -underfilling -underfinance -underfind -underfire -underfitting -underflame -underflannel -underfleece -underflood -underfloor -underflooring -underflow -underfold -underfolded -underfong -underfoot -underfootage -underfootman -underforebody -underform -underfortify -underframe -underframework -underframing -underfreight -underfrequency -underfringe -underfrock -underfur -underfurnish -underfurnisher -underfurrow -undergabble -undergamekeeper -undergaoler -undergarb -undergardener -undergarment -undergarnish -undergauge -undergear -undergeneral -undergentleman -undergird -undergirder -undergirding -undergirdle -undergirth -underglaze -undergloom -underglow -undergnaw -undergo -undergod -undergoer -undergoing -undergore -undergoverness -undergovernment -undergovernor -undergown -undergrad -undergrade -undergraduate -undergraduatedom -undergraduateness -undergraduateship -undergraduatish -undergraduette -undergraining -undergrass -undergreen -undergrieve -undergroan -underground -undergrounder -undergroundling -undergrove -undergrow -undergrowl -undergrown -undergrowth -undergrub -underguard -underguardian -undergunner -underhabit -underhammer -underhand -underhanded -underhandedly -underhandedness -underhang -underhanging -underhangman -underhatch -underhead -underheat -underheaven -underhelp -underhew -underhid -underhill -underhint -underhistory -underhive -underhold -underhole -underhonest -underhorse -underhorsed -underhousemaid -underhum -underhung -underided -underinstrument -underisive -underissue -underivable -underivative -underived -underivedly -underivedness -underjacket -underjailer -underjanitor -underjaw -underjawed -underjobbing -underjudge -underjungle -underkeel -underkeeper -underkind -underking -underkingdom -underlaborer -underlaid -underlain -underland -underlanguaged -underlap -underlapper -underlash -underlaundress -underlawyer -underlay -underlayer -underlaying -underleaf -underlease -underleather -underlegate -underlessee -underlet -underletter -underlevel -underlever -underlid -underlie -underlier -underlieutenant -underlife -underlift -underlight -underliking -underlimbed -underlimit -underline -underlineation -underlineman -underlinement -underlinen -underliner -underling -underlining -underlip -underlive -underload -underlock -underlodging -underloft -underlook -underlooker -underlout -underlunged -underly -underlye -underlying -undermade -undermaid -undermaker -underman -undermanager -undermanned -undermanning -undermark -undermarshal -undermarshalman -undermasted -undermaster -undermatch -undermatched -undermate -undermath -undermeal -undermeaning -undermeasure -undermediator -undermelody -undermentioned -undermiller -undermimic -underminable -undermine -underminer -undermining -underminingly -underminister -underministry -undermist -undermoated -undermoney -undermoral -undermost -undermotion -undermount -undermountain -undermusic -undermuslin -undern -undername -undernatural -underneath -underness -underniceness -undernote -undernoted -undernourish -undernourished -undernourishment -undernsong -underntide -underntime -undernurse -undernutrition -underoccupied -underofficer -underofficered -underofficial -underogating -underogatory -underopinion -underorb -underorganization -underorseman -underoverlooker -underoxidize -underpacking -underpaid -underpain -underpainting -underpan -underpants -underparticipation -underpartner -underpass -underpassion -underpay -underpayment -underpeep -underpeer -underpen -underpeopled -underpetticoat -underpetticoated -underpick -underpier -underpilaster -underpile -underpin -underpinner -underpinning -underpitch -underpitched -underplain -underplan -underplant -underplate -underplay -underplot -underplotter -underply -underpoint -underpole -underpopulate -underpopulation -underporch -underporter -underpose -underpossessor -underpot -underpower -underpraise -underprefect -underprentice -underpresence -underpresser -underpressure -underprice -underpriest -underprincipal -underprint -underprior -underprivileged -underprize -underproduce -underproduction -underproductive -underproficient -underprompt -underprompter -underproof -underprop -underproportion -underproportioned -underproposition -underpropped -underpropper -underpropping -underprospect -underpry -underpuke -underqualified -underqueen -underquote -underranger -underrate -underratement -underrating -underreach -underread -underreader -underrealize -underrealm -underream -underreamer -underreceiver -underreckon -underrecompense -underregion -underregistration -underrent -underrented -underrenting -underrepresent -underrepresentation -underrespected -underriddle -underriding -underrigged -underring -underripe -underripened -underriver -underroarer -underroast -underrobe -underrogue -underroll -underroller -underroof -underroom -underroot -underrooted -underrower -underrule -underruler -underrun -underrunning -undersacristan -undersailed -undersally -undersap -undersatisfaction -undersaturate -undersaturation -undersavior -undersaw -undersawyer -underscale -underscheme -underschool -underscoop -underscore -underscribe -underscript -underscrub -underscrupulous -undersea -underseam -underseaman -undersearch -underseas -underseated -undersecretary -undersecretaryship -undersect -undersee -underseeded -underseedman -undersell -underseller -underselling -undersense -undersequence -underservant -underserve -underservice -underset -undersetter -undersetting -undersettle -undersettler -undersettling -undersexton -undershapen -undersharp -undersheathing -undershepherd -undersheriff -undersheriffry -undersheriffship -undersheriffwick -undershield -undershine -undershining -undershire -undershirt -undershoe -undershoot -undershore -undershorten -undershot -undershrievalty -undershrieve -undershrievery -undershrub -undershrubbiness -undershrubby -undershunter -undershut -underside -undersight -undersighted -undersign -undersignalman -undersigner -undersill -undersinging -undersitter -undersize -undersized -underskin -underskirt -undersky -undersleep -undersleeve -underslip -underslope -undersluice -underslung -undersneer -undersociety -undersoil -undersole -undersomething -undersong -undersorcerer -undersort -undersoul -undersound -undersovereign -undersow -underspar -undersparred -underspecies -underspecified -underspend -undersphere -underspin -underspinner -undersplice -underspore -underspread -underspring -undersprout -underspurleather -undersquare -understaff -understage -understain -understairs -understamp -understand -understandability -understandable -understandableness -understandably -understander -understanding -understandingly -understandingness -understate -understatement -understay -understeer -understem -understep -understeward -understewardship -understimulus -understock -understocking -understood -understory -understrain -understrap -understrapper -understrapping -understratum -understream -understress -understrew -understride -understriding -understrife -understrike -understring -understroke -understrung -understudy -understuff -understuffing -undersuck -undersuggestion -undersuit -undersupply -undersupport -undersurface -underswain -underswamp -undersward -underswearer -undersweat -undersweep -underswell -undertakable -undertake -undertakement -undertaker -undertakerish -undertakerlike -undertakerly -undertakery -undertaking -undertakingly -undertalk -undertapster -undertaxed -underteacher -underteamed -underteller -undertenancy -undertenant -undertenter -undertenure -underterrestrial -undertest -underthane -underthaw -underthief -underthing -underthink -underthirst -underthought -underthroating -underthrob -underthrust -undertide -undertided -undertie -undertime -undertimed -undertint -undertitle -undertone -undertoned -undertook -undertow -undertrader -undertrained -undertread -undertreasurer -undertreat -undertribe -undertrick -undertrodden -undertruck -undertrump -undertruss -undertub -undertune -undertunic -underturf -underturn -underturnkey -undertutor -undertwig -undertype -undertyrant -underusher -undervaluation -undervalue -undervaluement -undervaluer -undervaluing -undervaluinglike -undervaluingly -undervalve -undervassal -undervaulted -undervaulting -undervegetation -underventilation -underverse -undervest -undervicar -underviewer -undervillain -undervinedresser -undervitalized -undervocabularied -undervoice -undervoltage -underwage -underwaist -underwaistcoat -underwalk -underward -underwarden -underwarmth -underwarp -underwash -underwatch -underwatcher -underwater -underwave -underway -underweapon -underwear -underweft -underweigh -underweight -underweighted -underwent -underwheel -underwhistle -underwind -underwing -underwit -underwitch -underwitted -underwood -underwooded -underwork -underworker -underworking -underworkman -underworld -underwrap -underwrite -underwriter -underwriting -underwrought -underyield -underyoke -underzeal -underzealot -undescendable -undescended -undescendible -undescribable -undescribably -undescribed -undescried -undescript -undescriptive -undescrying -undesert -undeserted -undeserting -undeserve -undeserved -undeservedly -undeservedness -undeserver -undeserving -undeservingly -undeservingness -undesign -undesignated -undesigned -undesignedly -undesignedness -undesigning -undesigningly -undesigningness -undesirability -undesirable -undesirableness -undesirably -undesire -undesired -undesiredly -undesiring -undesirous -undesirously -undesirousness -undesisting -undespaired -undespairing -undespairingly -undespatched -undespised -undespising -undespoiled -undespondent -undespondently -undesponding -undespotic -undestined -undestroyable -undestroyed -undestructible -undestructive -undetachable -undetached -undetailed -undetainable -undetained -undetectable -undetected -undetectible -undeteriorated -undeteriorating -undeterminable -undeterminate -undetermination -undetermined -undetermining -undeterred -undeterring -undetested -undetesting -undethronable -undethroned -undetracting -undetractingly -undetrimental -undevelopable -undeveloped -undeveloping -undeviated -undeviating -undeviatingly -undevil -undevious -undeviously -undevisable -undevised -undevoted -undevotion -undevotional -undevoured -undevout -undevoutly -undevoutness -undewed -undewy -undexterous -undexterously -undextrous -undextrously -undiademed -undiagnosable -undiagnosed -undialed -undialyzed -undiametric -undiamonded -undiapered -undiaphanous -undiatonic -undichotomous -undictated -undid -undidactic -undies -undieted -undifferenced -undifferent -undifferential -undifferentiated -undifficult -undiffident -undiffracted -undiffused -undiffusible -undiffusive -undig -undigenous -undigest -undigestable -undigested -undigestible -undigesting -undigestion -undigged -undight -undighted -undigitated -undignified -undignifiedly -undignifiedness -undignify -undiked -undilapidated -undilatable -undilated -undilatory -undiligent -undiligently -undilute -undiluted -undilution -undiluvial -undim -undimensioned -undimerous -undimidiate -undiminishable -undiminishableness -undiminishably -undiminished -undiminishing -undiminutive -undimmed -undimpled -undine -undined -undinted -undiocesed -undiphthongize -undiplomaed -undiplomatic -undipped -undirect -undirected -undirectional -undirectly -undirectness -undirk -undisabled -undisadvantageous -undisagreeable -undisappearing -undisappointable -undisappointed -undisappointing -undisarmed -undisastrous -undisbanded -undisbarred -undisburdened -undisbursed -undiscardable -undiscarded -undiscerned -undiscernedly -undiscernible -undiscernibleness -undiscernibly -undiscerning -undiscerningly -undischargeable -undischarged -undiscipled -undisciplinable -undiscipline -undisciplined -undisciplinedness -undisclaimed -undisclosed -undiscolored -undiscomfitable -undiscomfited -undiscomposed -undisconcerted -undisconnected -undiscontinued -undiscordant -undiscording -undiscounted -undiscourageable -undiscouraged -undiscouraging -undiscoursed -undiscoverable -undiscoverableness -undiscoverably -undiscovered -undiscreditable -undiscredited -undiscreet -undiscreetly -undiscreetness -undiscretion -undiscriminated -undiscriminating -undiscriminatingly -undiscriminatingness -undiscriminative -undiscursive -undiscussable -undiscussed -undisdained -undisdaining -undiseased -undisestablished -undisfigured -undisfranchised -undisfulfilled -undisgorged -undisgraced -undisguisable -undisguise -undisguised -undisguisedly -undisguisedness -undisgusted -undisheartened -undished -undisheveled -undishonored -undisillusioned -undisinfected -undisinheritable -undisinherited -undisintegrated -undisinterested -undisjoined -undisjointed -undisliked -undislocated -undislodgeable -undislodged -undismantled -undismay -undismayable -undismayed -undismayedly -undismembered -undismissed -undismounted -undisobedient -undisobeyed -undisobliging -undisordered -undisorderly -undisorganized -undisowned -undisowning -undisparaged -undisparity -undispassionate -undispatchable -undispatched -undispatching -undispellable -undispelled -undispensable -undispensed -undispensing -undispersed -undispersing -undisplaced -undisplanted -undisplay -undisplayable -undisplayed -undisplaying -undispleased -undispose -undisposed -undisposedness -undisprivacied -undisprovable -undisproved -undisproving -undisputable -undisputableness -undisputably -undisputatious -undisputatiously -undisputed -undisputedly -undisputedness -undisputing -undisqualifiable -undisqualified -undisquieted -undisreputable -undisrobed -undisrupted -undissected -undissembled -undissembledness -undissembling -undissemblingly -undisseminated -undissenting -undissevered -undissimulated -undissipated -undissociated -undissoluble -undissolute -undissolvable -undissolved -undissolving -undissonant -undissuadable -undissuadably -undissuade -undistanced -undistant -undistantly -undistasted -undistasteful -undistempered -undistend -undistended -undistilled -undistinct -undistinctive -undistinctly -undistinctness -undistinguish -undistinguishable -undistinguishableness -undistinguishably -undistinguished -undistinguishing -undistinguishingly -undistorted -undistorting -undistracted -undistractedly -undistractedness -undistracting -undistractingly -undistrained -undistraught -undistress -undistressed -undistributed -undistrusted -undistrustful -undisturbable -undisturbance -undisturbed -undisturbedly -undisturbedness -undisturbing -undisturbingly -unditched -undithyrambic -undittoed -undiuretic -undiurnal -undivable -undivergent -undiverging -undiverse -undiversified -undiverted -undivertible -undivertibly -undiverting -undivested -undivestedly -undividable -undividableness -undividably -undivided -undividedly -undividedness -undividing -undivinable -undivined -undivinelike -undivinely -undivining -undivisible -undivisive -undivorceable -undivorced -undivorcedness -undivorcing -undivulged -undivulging -undizened -undizzied -undo -undoable -undock -undocked -undoctor -undoctored -undoctrinal -undoctrined -undocumentary -undocumented -undocumentedness -undodged -undoer -undoffed -undog -undogmatic -undogmatical -undoing -undoingness -undolled -undolorous -undomed -undomestic -undomesticate -undomesticated -undomestication -undomicilable -undomiciled -undominated -undomineering -undominical -undominoed -undon -undonated -undonating -undone -undoneness -undonkey -undonnish -undoomed -undoped -undormant -undose -undosed -undoting -undotted -undouble -undoubled -undoubtable -undoubtableness -undoubtably -undoubted -undoubtedly -undoubtedness -undoubtful -undoubtfully -undoubtfulness -undoubting -undoubtingly -undoubtingness -undouched -undoughty -undovelike -undoweled -undowered -undowned -undowny -undrab -undraftable -undrafted -undrag -undragoned -undragooned -undrainable -undrained -undramatic -undramatical -undramatically -undramatizable -undramatized -undrape -undraped -undraperied -undraw -undrawable -undrawn -undreaded -undreadful -undreadfully -undreading -undreamed -undreaming -undreamlike -undreamt -undreamy -undredged -undreggy -undrenched -undress -undressed -undried -undrillable -undrilled -undrinkable -undrinkableness -undrinkably -undrinking -undripping -undrivable -undrivableness -undriven -undronelike -undrooping -undropped -undropsical -undrossy -undrowned -undrubbed -undrugged -undrunk -undrunken -undry -undryable -undrying -undualize -undub -undubbed -undubitable -undubitably -unducal -unduchess -undue -unduelling -undueness -undug -unduke -undulant -undular -undularly -undulatance -undulate -undulated -undulately -undulating -undulatingly -undulation -undulationist -undulative -undulatory -undull -undulled -undullness -unduloid -undulose -undulous -unduly -undumped -unduncelike -undunged -undupable -unduped -unduplicability -unduplicable -unduplicity -undurable -undurableness -undurably -undust -undusted -unduteous -undutiable -undutiful -undutifully -undutifulness -unduty -undwarfed -undwelt -undwindling -undy -undye -undyeable -undyed -undying -undyingly -undyingness -uneager -uneagerly -uneagerness -uneagled -unearly -unearned -unearnest -unearth -unearthed -unearthliness -unearthly -unease -uneaseful -uneasefulness -uneasily -uneasiness -uneastern -uneasy -uneatable -uneatableness -uneaten -uneath -uneating -unebbed -unebbing -unebriate -uneccentric -unecclesiastical -unechoed -unechoing -uneclectic -uneclipsed -uneconomic -uneconomical -uneconomically -uneconomicalness -uneconomizing -unecstatic -unedge -unedged -unedible -unedibleness -unedibly -unedified -unedifying -uneditable -unedited -uneducable -uneducableness -uneducably -uneducate -uneducated -uneducatedly -uneducatedness -uneducative -uneduced -uneffaceable -uneffaceably -uneffaced -uneffected -uneffectible -uneffective -uneffectless -uneffectual -uneffectually -uneffectualness -uneffectuated -uneffeminate -uneffeminated -uneffervescent -uneffete -unefficacious -unefficient -uneffigiated -uneffused -uneffusing -uneffusive -unegoist -unegoistical -unegoistically -unegregious -unejaculated -unejected -unelaborate -unelaborated -unelaborately -unelaborateness -unelapsed -unelastic -unelasticity -unelated -unelating -unelbowed -unelderly -unelect -unelectable -unelected -unelective -unelectric -unelectrical -unelectrified -unelectrify -unelectrifying -unelectrized -unelectronic -uneleemosynary -unelegant -unelegantly -unelegantness -unelemental -unelementary -unelevated -unelicited -unelided -unelidible -uneligibility -uneligible -uneligibly -uneliminated -unelongated -uneloped -uneloping -uneloquent -uneloquently -unelucidated -unelucidating -uneluded -unelusive -unemaciated -unemancipable -unemancipated -unemasculated -unembalmed -unembanked -unembarrassed -unembarrassedly -unembarrassedness -unembarrassing -unembarrassment -unembased -unembattled -unembayed -unembellished -unembezzled -unembittered -unemblazoned -unembodied -unembodiment -unembossed -unembowelled -unembowered -unembraceable -unembraced -unembroidered -unembroiled -unembryonic -unemendable -unemended -unemerged -unemerging -unemigrating -uneminent -uneminently -unemitted -unemolumentary -unemolumented -unemotional -unemotionalism -unemotionally -unemotionalness -unemotioned -unempaneled -unemphatic -unemphatical -unemphatically -unempirical -unempirically -unemploy -unemployability -unemployable -unemployableness -unemployably -unemployed -unemployment -unempoisoned -unempowered -unempt -unemptiable -unemptied -unempty -unemulative -unemulous -unemulsified -unenabled -unenacted -unenameled -unenamored -unencamped -unenchafed -unenchant -unenchanted -unencircled -unenclosed -unencompassed -unencored -unencounterable -unencountered -unencouraged -unencouraging -unencroached -unencroaching -unencumber -unencumbered -unencumberedly -unencumberedness -unencumbering -unencysted -unendable -unendamaged -unendangered -unendeared -unendeavored -unended -unending -unendingly -unendingness -unendorsable -unendorsed -unendowed -unendowing -unendued -unendurability -unendurable -unendurably -unendured -unenduring -unenduringly -unenergetic -unenergized -unenervated -unenfeebled -unenfiladed -unenforceable -unenforced -unenforcedly -unenforcedness -unenforcibility -unenfranchised -unengaged -unengaging -unengendered -unengineered -unenglish -unengraved -unengraven -unengrossed -unenhanced -unenjoined -unenjoyable -unenjoyed -unenjoying -unenjoyingly -unenkindled -unenlarged -unenlightened -unenlightening -unenlisted -unenlivened -unenlivening -unennobled -unennobling -unenounced -unenquired -unenquiring -unenraged -unenraptured -unenrichable -unenrichableness -unenriched -unenriching -unenrobed -unenrolled -unenshrined -unenslave -unenslaved -unensnared -unensouled -unensured -unentailed -unentangle -unentangleable -unentangled -unentanglement -unentangler -unenterable -unentered -unentering -unenterprise -unenterprised -unenterprising -unenterprisingly -unenterprisingness -unentertainable -unentertained -unentertaining -unentertainingly -unentertainingness -unenthralled -unenthralling -unenthroned -unenthusiasm -unenthusiastic -unenthusiastically -unenticed -unenticing -unentire -unentitled -unentombed -unentomological -unentrance -unentranced -unentrapped -unentreated -unentreating -unentrenched -unentwined -unenumerable -unenumerated -unenveloped -unenvenomed -unenviable -unenviably -unenvied -unenviedly -unenvious -unenviously -unenvironed -unenvying -unenwoven -unepauleted -unephemeral -unepic -unepicurean -unepigrammatic -unepilogued -unepiscopal -unepiscopally -unepistolary -unepitaphed -unepithelial -unepitomized -unequable -unequableness -unequably -unequal -unequalable -unequaled -unequality -unequalize -unequalized -unequally -unequalness -unequated -unequatorial -unequestrian -unequiangular -unequiaxed -unequilateral -unequilibrated -unequine -unequipped -unequitable -unequitableness -unequitably -unequivalent -unequivalve -unequivalved -unequivocal -unequivocally -unequivocalness -uneradicable -uneradicated -unerasable -unerased -unerasing -unerect -unerected -unermined -uneroded -unerrable -unerrableness -unerrably -unerrancy -unerrant -unerratic -unerring -unerringly -unerringness -unerroneous -unerroneously -unerudite -unerupted -uneruptive -unescaladed -unescalloped -unescapable -unescapableness -unescapably -unescaped -unescheated -uneschewable -uneschewably -uneschewed -unescorted -unescutcheoned -unesoteric -unespied -unespousable -unespoused -unessayed -unessence -unessential -unessentially -unessentialness -unestablish -unestablishable -unestablished -unestablishment -unesteemed -unestimable -unestimableness -unestimably -unestimated -unestopped -unestranged -unetched -uneternal -uneternized -unethereal -unethic -unethical -unethically -unethicalness -unethnological -unethylated -unetymological -unetymologizable -uneucharistical -uneugenic -uneulogized -uneuphemistical -uneuphonic -uneuphonious -uneuphoniously -uneuphoniousness -unevacuated -unevadable -unevaded -unevaluated -unevanescent -unevangelic -unevangelical -unevangelized -unevaporate -unevaporated -unevasive -uneven -unevenly -unevenness -uneventful -uneventfully -uneventfulness -uneverted -unevicted -unevidenced -unevident -unevidential -unevil -unevinced -unevirated -uneviscerated -unevitable -unevitably -unevokable -unevoked -unevolutionary -unevolved -unexacerbated -unexact -unexacted -unexactedly -unexacting -unexactingly -unexactly -unexactness -unexaggerable -unexaggerated -unexaggerating -unexalted -unexaminable -unexamined -unexamining -unexampled -unexampledness -unexasperated -unexasperating -unexcavated -unexceedable -unexceeded -unexcelled -unexcellent -unexcelling -unexceptable -unexcepted -unexcepting -unexceptionability -unexceptionable -unexceptionableness -unexceptionably -unexceptional -unexceptionally -unexceptionalness -unexceptive -unexcerpted -unexcessive -unexchangeable -unexchangeableness -unexchanged -unexcised -unexcitability -unexcitable -unexcited -unexciting -unexclaiming -unexcludable -unexcluded -unexcluding -unexclusive -unexclusively -unexclusiveness -unexcogitable -unexcogitated -unexcommunicated -unexcoriated -unexcorticated -unexcrescent -unexcreted -unexcruciating -unexculpable -unexculpably -unexculpated -unexcursive -unexcusable -unexcusableness -unexcusably -unexcused -unexcusedly -unexcusedness -unexcusing -unexecrated -unexecutable -unexecuted -unexecuting -unexecutorial -unexemplary -unexemplifiable -unexemplified -unexempt -unexempted -unexemptible -unexempting -unexercisable -unexercise -unexercised -unexerted -unexhalable -unexhaled -unexhausted -unexhaustedly -unexhaustedness -unexhaustible -unexhaustibleness -unexhaustibly -unexhaustion -unexhaustive -unexhaustiveness -unexhibitable -unexhibitableness -unexhibited -unexhilarated -unexhilarating -unexhorted -unexhumed -unexigent -unexilable -unexiled -unexistence -unexistent -unexisting -unexonerable -unexonerated -unexorable -unexorableness -unexorbitant -unexorcisable -unexorcisably -unexorcised -unexotic -unexpandable -unexpanded -unexpanding -unexpansive -unexpectable -unexpectant -unexpected -unexpectedly -unexpectedness -unexpecting -unexpectingly -unexpectorated -unexpedient -unexpeditated -unexpedited -unexpeditious -unexpelled -unexpendable -unexpended -unexpensive -unexpensively -unexpensiveness -unexperience -unexperienced -unexperiencedness -unexperient -unexperiential -unexperimental -unexperimented -unexpert -unexpertly -unexpertness -unexpiable -unexpiated -unexpired -unexpiring -unexplainable -unexplainableness -unexplainably -unexplained -unexplainedly -unexplainedness -unexplaining -unexplanatory -unexplicable -unexplicableness -unexplicably -unexplicated -unexplicit -unexplicitly -unexplicitness -unexploded -unexploitation -unexploited -unexplorable -unexplorative -unexplored -unexplosive -unexportable -unexported -unexporting -unexposable -unexposed -unexpostulating -unexpoundable -unexpounded -unexpress -unexpressable -unexpressableness -unexpressably -unexpressed -unexpressedly -unexpressible -unexpressibleness -unexpressibly -unexpressive -unexpressively -unexpressiveness -unexpressly -unexpropriable -unexpropriated -unexpugnable -unexpunged -unexpurgated -unexpurgatedly -unexpurgatedness -unextended -unextendedly -unextendedness -unextendible -unextensible -unextenuable -unextenuated -unextenuating -unexterminable -unexterminated -unexternal -unexternality -unexterritoriality -unextinct -unextinctness -unextinguishable -unextinguishableness -unextinguishably -unextinguished -unextirpated -unextolled -unextortable -unextorted -unextractable -unextracted -unextradited -unextraneous -unextraordinary -unextravagance -unextravagant -unextravagating -unextravasated -unextreme -unextricable -unextricated -unextrinsic -unextruded -unexuberant -unexuded -unexultant -uneye -uneyeable -uneyed -unfabled -unfabling -unfabricated -unfabulous -unfacaded -unface -unfaceable -unfaced -unfaceted -unfacetious -unfacile -unfacilitated -unfact -unfactional -unfactious -unfactitious -unfactorable -unfactored -unfactual -unfadable -unfaded -unfading -unfadingly -unfadingness -unfagged -unfagoted -unfailable -unfailableness -unfailably -unfailed -unfailing -unfailingly -unfailingness -unfain -unfaint -unfainting -unfaintly -unfair -unfairly -unfairminded -unfairness -unfairylike -unfaith -unfaithful -unfaithfully -unfaithfulness -unfaked -unfallacious -unfallaciously -unfallen -unfallenness -unfallible -unfallibleness -unfallibly -unfalling -unfallowed -unfalse -unfalsifiable -unfalsified -unfalsifiedness -unfalsity -unfaltering -unfalteringly -unfamed -unfamiliar -unfamiliarity -unfamiliarized -unfamiliarly -unfanatical -unfanciable -unfancied -unfanciful -unfancy -unfanged -unfanned -unfantastic -unfantastical -unfantastically -unfar -unfarced -unfarcical -unfarewelled -unfarmed -unfarming -unfarrowed -unfarsighted -unfasciated -unfascinate -unfascinated -unfascinating -unfashion -unfashionable -unfashionableness -unfashionably -unfashioned -unfast -unfasten -unfastenable -unfastened -unfastener -unfastidious -unfastidiously -unfastidiousness -unfasting -unfather -unfathered -unfatherlike -unfatherliness -unfatherly -unfathomability -unfathomable -unfathomableness -unfathomably -unfathomed -unfatigue -unfatigueable -unfatigued -unfatiguing -unfattable -unfatted -unfatten -unfauceted -unfaultfinding -unfaulty -unfavorable -unfavorableness -unfavorably -unfavored -unfavoring -unfavorite -unfawning -unfealty -unfeared -unfearful -unfearfully -unfearing -unfearingly -unfeary -unfeasable -unfeasableness -unfeasably -unfeasibility -unfeasible -unfeasibleness -unfeasibly -unfeasted -unfeather -unfeathered -unfeatured -unfecund -unfecundated -unfed -unfederal -unfederated -unfeeble -unfeed -unfeedable -unfeeding -unfeeing -unfeelable -unfeeling -unfeelingly -unfeelingness -unfeignable -unfeignableness -unfeignably -unfeigned -unfeignedly -unfeignedness -unfeigning -unfeigningly -unfeigningness -unfele -unfelicitated -unfelicitating -unfelicitous -unfelicitously -unfelicitousness -unfeline -unfellable -unfelled -unfellied -unfellow -unfellowed -unfellowlike -unfellowly -unfellowshiped -unfelon -unfelonious -unfeloniously -unfelony -unfelt -unfelted -unfemale -unfeminine -unfemininely -unfeminineness -unfemininity -unfeminist -unfeminize -unfence -unfenced -unfendered -unfenestrated -unfeoffed -unfermentable -unfermentableness -unfermentably -unfermented -unfermenting -unfernlike -unferocious -unferreted -unferried -unfertile -unfertileness -unfertility -unfertilizable -unfertilized -unfervent -unfervid -unfester -unfestered -unfestival -unfestive -unfestively -unfestooned -unfetchable -unfetched -unfeted -unfetter -unfettered -unfettled -unfeudal -unfeudalize -unfeudalized -unfeued -unfevered -unfeverish -unfew -unfibbed -unfibbing -unfiber -unfibered -unfibrous -unfickle -unfictitious -unfidelity -unfidgeting -unfielded -unfiend -unfiendlike -unfierce -unfiery -unfight -unfightable -unfighting -unfigurable -unfigurative -unfigured -unfilamentous -unfilched -unfile -unfiled -unfilial -unfilially -unfilialness -unfill -unfillable -unfilled -unfilleted -unfilling -unfilm -unfilmed -unfiltered -unfiltrated -unfinable -unfinancial -unfine -unfined -unfinessed -unfingered -unfinical -unfinish -unfinishable -unfinished -unfinishedly -unfinishedness -unfinite -unfired -unfireproof -unfiring -unfirm -unfirmamented -unfirmly -unfirmness -unfiscal -unfishable -unfished -unfishing -unfishlike -unfissile -unfistulous -unfit -unfitly -unfitness -unfittable -unfitted -unfittedness -unfitten -unfitting -unfittingly -unfittingness -unfitty -unfix -unfixable -unfixated -unfixed -unfixedness -unfixing -unfixity -unflag -unflagged -unflagging -unflaggingly -unflaggingness -unflagitious -unflagrant -unflaky -unflamboyant -unflaming -unflanged -unflank -unflanked -unflapping -unflashing -unflat -unflated -unflattened -unflatterable -unflattered -unflattering -unflatteringly -unflaunted -unflavored -unflawed -unflayed -unflead -unflecked -unfledge -unfledged -unfledgedness -unfleece -unfleeced -unfleeing -unfleeting -unflesh -unfleshed -unfleshliness -unfleshly -unfleshy -unfletched -unflexed -unflexible -unflexibleness -unflexibly -unflickering -unflickeringly -unflighty -unflinching -unflinchingly -unflinchingness -unflintify -unflippant -unflirtatious -unflitched -unfloatable -unfloating -unflock -unfloggable -unflogged -unflooded -unfloor -unfloored -unflorid -unflossy -unflounced -unfloured -unflourished -unflourishing -unflouted -unflower -unflowered -unflowing -unflown -unfluctuating -unfluent -unfluid -unfluked -unflunked -unfluorescent -unflurried -unflush -unflushed -unflustered -unfluted -unflutterable -unfluttered -unfluttering -unfluvial -unfluxile -unflying -unfoaled -unfoaming -unfocused -unfoggy -unfoilable -unfoiled -unfoisted -unfold -unfoldable -unfolded -unfolder -unfolding -unfoldment -unfoldure -unfoliaged -unfoliated -unfollowable -unfollowed -unfollowing -unfomented -unfond -unfondled -unfondness -unfoodful -unfool -unfoolable -unfooled -unfooling -unfoolish -unfooted -unfootsore -unfoppish -unforaged -unforbade -unforbearance -unforbearing -unforbid -unforbidden -unforbiddenly -unforbiddenness -unforbidding -unforceable -unforced -unforcedly -unforcedness -unforceful -unforcible -unforcibleness -unforcibly -unfordable -unfordableness -unforded -unforeboded -unforeboding -unforecasted -unforegone -unforeign -unforeknowable -unforeknown -unforensic -unforeordained -unforesee -unforeseeable -unforeseeableness -unforeseeably -unforeseeing -unforeseeingly -unforeseen -unforeseenly -unforeseenness -unforeshortened -unforest -unforestallable -unforestalled -unforested -unforetellable -unforethought -unforethoughtful -unforetold -unforewarned -unforewarnedness -unforfeit -unforfeitable -unforfeited -unforgeability -unforgeable -unforged -unforget -unforgetful -unforgettable -unforgettableness -unforgettably -unforgetting -unforgettingly -unforgivable -unforgivableness -unforgivably -unforgiven -unforgiveness -unforgiver -unforgiving -unforgivingly -unforgivingness -unforgone -unforgot -unforgotten -unfork -unforked -unforkedness -unforlorn -unform -unformal -unformality -unformalized -unformally -unformalness -unformative -unformed -unformidable -unformulable -unformularizable -unformularize -unformulated -unformulistic -unforsaken -unforsaking -unforsook -unforsworn -unforthright -unfortifiable -unfortified -unfortify -unfortuitous -unfortunate -unfortunately -unfortunateness -unfortune -unforward -unforwarded -unfossiliferous -unfossilized -unfostered -unfought -unfoughten -unfoul -unfoulable -unfouled -unfound -unfounded -unfoundedly -unfoundedness -unfoundered -unfountained -unfowllike -unfoxy -unfractured -unfragrance -unfragrant -unfragrantly -unfrail -unframable -unframableness -unframably -unframe -unframed -unfranchised -unfrank -unfrankable -unfranked -unfrankly -unfrankness -unfraternal -unfraternizing -unfraudulent -unfraught -unfrayed -unfreckled -unfree -unfreed -unfreedom -unfreehold -unfreely -unfreeman -unfreeness -unfreezable -unfreeze -unfreezing -unfreighted -unfrenchified -unfrenzied -unfrequency -unfrequent -unfrequented -unfrequentedness -unfrequently -unfrequentness -unfret -unfretful -unfretting -unfriable -unfriarlike -unfricative -unfrictioned -unfried -unfriend -unfriended -unfriendedness -unfriending -unfriendlike -unfriendlily -unfriendliness -unfriendly -unfriendship -unfrighted -unfrightenable -unfrightened -unfrightenedness -unfrightful -unfrigid -unfrill -unfrilled -unfringe -unfringed -unfrisky -unfrivolous -unfrizz -unfrizzled -unfrizzy -unfrock -unfrocked -unfroglike -unfrolicsome -unfronted -unfrost -unfrosted -unfrosty -unfrounced -unfroward -unfrowardly -unfrowning -unfroze -unfrozen -unfructed -unfructified -unfructify -unfructuous -unfructuously -unfrugal -unfrugally -unfrugalness -unfruitful -unfruitfully -unfruitfulness -unfruity -unfrustrable -unfrustrably -unfrustratable -unfrustrated -unfrutuosity -unfuddled -unfueled -unfulfill -unfulfillable -unfulfilled -unfulfilling -unfulfillment -unfull -unfulled -unfully -unfulminated -unfulsome -unfumbled -unfumbling -unfumed -unfumigated -unfunctional -unfundamental -unfunded -unfunnily -unfunniness -unfunny -unfur -unfurbelowed -unfurbished -unfurcate -unfurious -unfurl -unfurlable -unfurnish -unfurnished -unfurnishedness -unfurnitured -unfurred -unfurrow -unfurrowable -unfurrowed -unfurthersome -unfused -unfusible -unfusibleness -unfusibly -unfussed -unfussing -unfussy -unfutile -unfuturistic -ungabled -ungag -ungaged -ungagged -ungain -ungainable -ungained -ungainful -ungainfully -ungainfulness -ungaining -ungainlike -ungainliness -ungainly -ungainness -ungainsaid -ungainsayable -ungainsayably -ungainsaying -ungainsome -ungainsomely -ungaite -ungallant -ungallantly -ungallantness -ungalling -ungalvanized -ungamboling -ungamelike -unganged -ungangrened -ungarbed -ungarbled -ungardened -ungargled -ungarland -ungarlanded -ungarment -ungarmented -ungarnered -ungarnish -ungarnished -ungaro -ungarrisoned -ungarter -ungartered -ungashed -ungassed -ungastric -ungathered -ungaudy -ungauged -ungauntlet -ungauntleted -ungazetted -ungazing -ungear -ungeared -ungelatinizable -ungelatinized -ungelded -ungelt -ungeminated -ungenerable -ungeneral -ungeneraled -ungeneralized -ungenerate -ungenerated -ungenerative -ungeneric -ungenerical -ungenerosity -ungenerous -ungenerously -ungenerousness -ungenial -ungeniality -ungenially -ungenialness -ungenitured -ungenius -ungenteel -ungenteelly -ungenteelness -ungentile -ungentility -ungentilize -ungentle -ungentled -ungentleman -ungentlemanize -ungentlemanlike -ungentlemanlikeness -ungentlemanliness -ungentlemanly -ungentleness -ungentlewomanlike -ungently -ungenuine -ungenuinely -ungenuineness -ungeodetical -ungeographic -ungeographical -ungeographically -ungeological -ungeometric -ungeometrical -ungeometrically -ungeometricalness -ungerminated -ungerminating -ungermlike -ungerontic -ungesting -ungesturing -unget -ungettable -unghostlike -unghostly -ungiant -ungibbet -ungiddy -ungifted -ungiftedness -ungild -ungilded -ungill -ungilt -ungingled -unginned -ungird -ungirded -ungirdle -ungirdled -ungirlish -ungirt -ungirth -ungirthed -ungive -ungiveable -ungiven -ungiving -ungka -unglaciated -unglad -ungladden -ungladdened -ungladly -ungladness -ungladsome -unglamorous -unglandular -unglassed -unglaze -unglazed -ungleaned -unglee -ungleeful -unglimpsed -unglistening -unglittering -ungloating -unglobe -unglobular -ungloom -ungloomed -ungloomy -unglorified -unglorify -unglorifying -unglorious -ungloriously -ungloriousness -unglory -unglosed -ungloss -unglossaried -unglossed -unglossily -unglossiness -unglossy -unglove -ungloved -unglowing -unglozed -unglue -unglued -unglutinate -unglutted -ungluttonous -ungnarred -ungnaw -ungnawn -ungnostic -ungoaded -ungoatlike -ungod -ungoddess -ungodlike -ungodlily -ungodliness -ungodly -ungodmothered -ungold -ungolden -ungone -ungood -ungoodliness -ungoodly -ungored -ungorge -ungorged -ungorgeous -ungospel -ungospelized -ungospelled -ungospellike -ungossiping -ungot -ungothic -ungotten -ungouged -ungouty -ungovernable -ungovernableness -ungovernably -ungoverned -ungovernedness -ungoverning -ungown -ungowned -ungrace -ungraced -ungraceful -ungracefully -ungracefulness -ungracious -ungraciously -ungraciousness -ungradated -ungraded -ungradual -ungradually -ungraduated -ungraduating -ungraft -ungrafted -ungrain -ungrainable -ungrained -ungrammar -ungrammared -ungrammatic -ungrammatical -ungrammatically -ungrammaticalness -ungrammaticism -ungrand -ungrantable -ungranted -ungranulated -ungraphic -ungraphitized -ungrapple -ungrappled -ungrappler -ungrasp -ungraspable -ungrasped -ungrasping -ungrassed -ungrassy -ungrated -ungrateful -ungratefully -ungratefulness -ungratifiable -ungratified -ungratifying -ungrating -ungrave -ungraved -ungraveled -ungravelly -ungravely -ungraven -ungrayed -ungrazed -ungreased -ungreat -ungreatly -ungreatness -ungreeable -ungreedy -ungreen -ungreenable -ungreened -ungreeted -ungregarious -ungrieve -ungrieved -ungrieving -ungrilled -ungrimed -ungrindable -ungrip -ungripe -ungrizzled -ungroaning -ungroined -ungroomed -ungrooved -ungropeable -ungross -ungrotesque -unground -ungroundable -ungroundably -ungrounded -ungroundedly -ungroundedness -ungroupable -ungrouped -ungrow -ungrowing -ungrown -ungrubbed -ungrudged -ungrudging -ungrudgingly -ungrudgingness -ungruesome -ungruff -ungrumbling -ungual -unguaranteed -unguard -unguardable -unguarded -unguardedly -unguardedness -ungueal -unguent -unguentaria -unguentarium -unguentary -unguentiferous -unguentous -unguentum -unguerdoned -ungues -unguessable -unguessableness -unguessed -unguical -unguicorn -unguicular -unguiculate -unguiculated -unguidable -unguidableness -unguidably -unguided -unguidedly -unguiferous -unguiform -unguiled -unguileful -unguilefully -unguilefulness -unguillotined -unguiltily -unguiltiness -unguilty -unguinal -unguinous -unguirostral -unguis -ungula -ungulae -ungular -ungulate -ungulated -unguled -unguligrade -ungull -ungulous -ungulp -ungum -ungummed -ungushing -ungutted -unguttural -unguyed -unguzzled -ungymnastic -ungypsylike -ungyve -ungyved -unhabit -unhabitable -unhabitableness -unhabited -unhabitual -unhabitually -unhabituate -unhabituated -unhacked -unhackled -unhackneyed -unhackneyedness -unhad -unhaft -unhafted -unhaggled -unhaggling -unhailable -unhailed -unhair -unhaired -unhairer -unhairily -unhairiness -unhairing -unhairy -unhallooed -unhallow -unhallowed -unhallowedness -unhaloed -unhalsed -unhalted -unhalter -unhaltered -unhalting -unhalved -unhammered -unhamper -unhampered -unhand -unhandcuff -unhandcuffed -unhandicapped -unhandily -unhandiness -unhandled -unhandseled -unhandsome -unhandsomely -unhandsomeness -unhandy -unhang -unhanged -unhap -unhappen -unhappily -unhappiness -unhappy -unharangued -unharassed -unharbor -unharbored -unhard -unharden -unhardenable -unhardened -unhardihood -unhardily -unhardiness -unhardness -unhardy -unharked -unharmable -unharmed -unharmful -unharmfully -unharming -unharmonic -unharmonical -unharmonious -unharmoniously -unharmoniousness -unharmonize -unharmonized -unharmony -unharness -unharnessed -unharped -unharried -unharrowed -unharsh -unharvested -unhashed -unhasp -unhasped -unhaste -unhasted -unhastened -unhastily -unhastiness -unhasting -unhasty -unhat -unhatchability -unhatchable -unhatched -unhatcheled -unhate -unhated -unhateful -unhating -unhatingly -unhatted -unhauled -unhaunt -unhaunted -unhave -unhawked -unhayed -unhazarded -unhazarding -unhazardous -unhazardousness -unhazed -unhead -unheaded -unheader -unheady -unheal -unhealable -unhealableness -unhealably -unhealed -unhealing -unhealth -unhealthful -unhealthfully -unhealthfulness -unhealthily -unhealthiness -unhealthsome -unhealthsomeness -unhealthy -unheaped -unhearable -unheard -unhearing -unhearsed -unheart -unhearten -unheartsome -unhearty -unheatable -unheated -unheathen -unheaved -unheaven -unheavenly -unheavily -unheaviness -unheavy -unhectored -unhedge -unhedged -unheed -unheeded -unheededly -unheedful -unheedfully -unheedfulness -unheeding -unheedingly -unheedy -unheeled -unheelpieced -unhefted -unheightened -unheired -unheld -unhele -unheler -unhelm -unhelmed -unhelmet -unhelmeted -unhelpable -unhelpableness -unhelped -unhelpful -unhelpfully -unhelpfulness -unhelping -unhelved -unhemmed -unheppen -unheralded -unheraldic -unherd -unherded -unhereditary -unheretical -unheritable -unhermetic -unhero -unheroic -unheroical -unheroically -unheroism -unheroize -unherolike -unhesitant -unhesitating -unhesitatingly -unhesitatingness -unheuristic -unhewable -unhewed -unhewn -unhex -unhid -unhidable -unhidableness -unhidably -unhidated -unhidden -unhide -unhidebound -unhideous -unhieratic -unhigh -unhilarious -unhinderable -unhinderably -unhindered -unhindering -unhinge -unhingement -unhinted -unhipped -unhired -unhissed -unhistoric -unhistorical -unhistorically -unhistory -unhistrionic -unhit -unhitch -unhitched -unhittable -unhive -unhoard -unhoarded -unhoarding -unhoary -unhoaxed -unhobble -unhocked -unhoed -unhogged -unhoist -unhoisted -unhold -unholiday -unholily -unholiness -unhollow -unhollowed -unholy -unhome -unhomelike -unhomelikeness -unhomeliness -unhomely -unhomish -unhomogeneity -unhomogeneous -unhomogeneously -unhomologous -unhoned -unhonest -unhonestly -unhoneyed -unhonied -unhonorable -unhonorably -unhonored -unhonoured -unhood -unhooded -unhoodwink -unhoodwinked -unhoofed -unhook -unhooked -unhoop -unhooped -unhooper -unhooted -unhoped -unhopedly -unhopedness -unhopeful -unhopefully -unhopefulness -unhoping -unhopingly -unhopped -unhoppled -unhorizoned -unhorizontal -unhorned -unhorny -unhoroscopic -unhorse -unhose -unhosed -unhospitable -unhospitableness -unhospitably -unhostile -unhostilely -unhostileness -unhostility -unhot -unhoundlike -unhouse -unhoused -unhouseled -unhouselike -unhousewifely -unhuddle -unhugged -unhull -unhulled -unhuman -unhumanize -unhumanized -unhumanly -unhumanness -unhumble -unhumbled -unhumbledness -unhumbleness -unhumbly -unhumbugged -unhumid -unhumiliated -unhumored -unhumorous -unhumorously -unhumorousness -unhumoured -unhung -unhuntable -unhunted -unhurdled -unhurled -unhurried -unhurriedly -unhurriedness -unhurrying -unhurryingly -unhurt -unhurted -unhurtful -unhurtfully -unhurtfulness -unhurting -unhusbanded -unhusbandly -unhushable -unhushed -unhushing -unhusk -unhusked -unhustled -unhustling -unhutched -unhuzzaed -unhydraulic -unhydrolyzed -unhygienic -unhygienically -unhygrometric -unhymeneal -unhymned -unhyphenated -unhyphened -unhypnotic -unhypnotizable -unhypnotize -unhypocritical -unhypocritically -unhypothecated -unhypothetical -unhysterical -uniambic -uniambically -uniangulate -uniarticular -uniarticulate -uniat -uniate -uniauriculate -uniauriculated -uniaxal -uniaxally -uniaxial -uniaxially -unibasal -unibivalent -unible -unibracteate -unibracteolate -unibranchiate -unicalcarate -unicameral -unicameralism -unicameralist -unicamerate -unicapsular -unicarinate -unicarinated -unice -uniced -unicell -unicellate -unicelled -unicellular -unicellularity -unicentral -unichord -uniciliate -unicism -unicist -unicity -uniclinal -unicolor -unicolorate -unicolored -unicolorous -uniconstant -unicorn -unicorneal -unicornic -unicornlike -unicornous -unicornuted -unicostate -unicotyledonous -unicum -unicursal -unicursality -unicursally -unicuspid -unicuspidate -unicycle -unicyclist -unidactyl -unidactyle -unidactylous -unideaed -unideal -unidealism -unidealist -unidealistic -unidealized -unidentate -unidentated -unidenticulate -unidentifiable -unidentifiableness -unidentifiably -unidentified -unidentifiedly -unidentifying -unideographic -unidextral -unidextrality -unidigitate -unidimensional -unidiomatic -unidiomatically -unidirect -unidirected -unidirection -unidirectional -unidle -unidleness -unidly -unidolatrous -unidolized -unidyllic -unie -uniembryonate -uniequivalent -uniface -unifaced -unifacial -unifactorial -unifarious -unifiable -unific -unification -unificationist -unificator -unified -unifiedly -unifiedness -unifier -unifilar -uniflagellate -unifloral -uniflorate -uniflorous -uniflow -uniflowered -unifocal -unifoliar -unifoliate -unifoliolate -uniform -uniformal -uniformalization -uniformalize -uniformally -uniformation -uniformed -uniformist -uniformitarian -uniformitarianism -uniformity -uniformization -uniformize -uniformless -uniformly -uniformness -unify -unigenesis -unigenetic -unigenist -unigenistic -unigenital -unigeniture -unigenous -uniglandular -uniglobular -unignitable -unignited -unignitible -unignominious -unignorant -unignored -unigravida -uniguttulate -unijugate -unijugous -unilabiate -unilabiated -unilamellar -unilamellate -unilaminar -unilaminate -unilateral -unilateralism -unilateralist -unilaterality -unilateralization -unilateralize -unilaterally -unilinear -unilingual -unilingualism -uniliteral -unilludedly -unillumed -unilluminated -unilluminating -unillumination -unillumined -unillusioned -unillusory -unillustrated -unillustrative -unillustrious -unilobal -unilobar -unilobate -unilobe -unilobed -unilobular -unilocular -unilocularity -uniloculate -unimacular -unimaged -unimaginable -unimaginableness -unimaginably -unimaginary -unimaginative -unimaginatively -unimaginativeness -unimagine -unimagined -unimanual -unimbanked -unimbellished -unimbezzled -unimbibed -unimbibing -unimbittered -unimbodied -unimboldened -unimbordered -unimbosomed -unimbowed -unimbowered -unimbroiled -unimbrowned -unimbrued -unimbued -unimedial -unimitable -unimitableness -unimitably -unimitated -unimitating -unimitative -unimmaculate -unimmanent -unimmediate -unimmerged -unimmergible -unimmersed -unimmigrating -unimmolated -unimmortal -unimmortalize -unimmortalized -unimmovable -unimmured -unimodal -unimodality -unimodular -unimolecular -unimolecularity -unimpair -unimpairable -unimpaired -unimpartable -unimparted -unimpartial -unimpassionate -unimpassioned -unimpassionedly -unimpassionedness -unimpatient -unimpawned -unimpeachability -unimpeachable -unimpeachableness -unimpeachably -unimpeached -unimpearled -unimped -unimpeded -unimpededly -unimpedible -unimpedness -unimpelled -unimpenetrable -unimperative -unimperial -unimperialistic -unimperious -unimpertinent -unimpinging -unimplanted -unimplicable -unimplicate -unimplicated -unimplicit -unimplicitly -unimplied -unimplorable -unimplored -unimpoisoned -unimportance -unimportant -unimportantly -unimported -unimporting -unimportunate -unimportunately -unimportuned -unimposed -unimposedly -unimposing -unimpostrous -unimpounded -unimpoverished -unimpowered -unimprecated -unimpregnable -unimpregnate -unimpregnated -unimpressed -unimpressibility -unimpressible -unimpressibleness -unimpressibly -unimpressionability -unimpressionable -unimpressive -unimpressively -unimpressiveness -unimprinted -unimprison -unimprisonable -unimprisoned -unimpropriated -unimprovable -unimprovableness -unimprovably -unimproved -unimprovedly -unimprovedness -unimprovement -unimproving -unimprovised -unimpugnable -unimpugned -unimpulsive -unimpurpled -unimputable -unimputed -unimucronate -unimultiplex -unimuscular -uninaugurated -unincantoned -unincarcerated -unincarnate -unincarnated -unincensed -uninchoative -unincidental -unincised -unincisive -unincited -uninclinable -uninclined -uninclining -uninclosed -uninclosedness -unincludable -unincluded -uninclusive -uninclusiveness -uninconvenienced -unincorporate -unincorporated -unincorporatedly -unincorporatedness -unincreasable -unincreased -unincreasing -unincubated -uninculcated -unincumbered -unindebted -unindebtedly -unindebtedness -unindemnified -unindentable -unindented -unindentured -unindexed -unindicable -unindicated -unindicative -unindictable -unindicted -unindifference -unindifferency -unindifferent -unindifferently -unindigent -unindignant -unindividual -unindividualize -unindividualized -unindividuated -unindorsed -uninduced -uninductive -unindulged -unindulgent -unindulgently -unindurated -unindustrial -unindustrialized -unindustrious -unindustriously -unindwellable -uninebriated -uninebriating -uninervate -uninerved -uninfallibility -uninfallible -uninfatuated -uninfectable -uninfected -uninfectious -uninfectiousness -uninfeft -uninferred -uninfested -uninfiltrated -uninfinite -uninfiniteness -uninfixed -uninflamed -uninflammability -uninflammable -uninflated -uninflected -uninflectedness -uninflicted -uninfluenceable -uninfluenced -uninfluencing -uninfluencive -uninfluential -uninfluentiality -uninfolded -uninformed -uninforming -uninfracted -uninfringeable -uninfringed -uninfringible -uninfuriated -uninfused -uningenious -uningeniously -uningeniousness -uningenuity -uningenuous -uningenuously -uningenuousness -uningested -uningrafted -uningrained -uninhabitability -uninhabitable -uninhabitableness -uninhabitably -uninhabited -uninhabitedness -uninhaled -uninheritability -uninheritable -uninherited -uninhibited -uninhibitive -uninhumed -uninimical -uniniquitous -uninitialed -uninitialled -uninitiate -uninitiated -uninitiatedness -uninitiation -uninjectable -uninjected -uninjurable -uninjured -uninjuredness -uninjuring -uninjurious -uninjuriously -uninjuriousness -uninked -uninlaid -uninn -uninnate -uninnocence -uninnocent -uninnocently -uninnocuous -uninnovating -uninoculable -uninoculated -uninodal -uninominal -uninquired -uninquiring -uninquisitive -uninquisitively -uninquisitiveness -uninquisitorial -uninsane -uninsatiable -uninscribed -uninserted -uninshrined -uninsinuated -uninsistent -uninsolvent -uninspected -uninspirable -uninspired -uninspiring -uninspiringly -uninspirited -uninspissated -uninstalled -uninstanced -uninstated -uninstigated -uninstilled -uninstituted -uninstructed -uninstructedly -uninstructedness -uninstructible -uninstructing -uninstructive -uninstructively -uninstructiveness -uninstrumental -uninsular -uninsulate -uninsulated -uninsultable -uninsulted -uninsulting -uninsurability -uninsurable -uninsured -unintegrated -unintellective -unintellectual -unintellectualism -unintellectuality -unintellectually -unintelligence -unintelligent -unintelligently -unintelligentsia -unintelligibility -unintelligible -unintelligibleness -unintelligibly -unintended -unintendedly -unintensive -unintent -unintentional -unintentionality -unintentionally -unintentionalness -unintently -unintentness -unintercalated -unintercepted -uninterchangeable -uninterdicted -uninterested -uninterestedly -uninterestedness -uninteresting -uninterestingly -uninterestingness -uninterferedwith -uninterjected -uninterlaced -uninterlarded -uninterleave -uninterleaved -uninterlined -uninterlinked -uninterlocked -unintermarrying -unintermediate -unintermingled -unintermission -unintermissive -unintermitted -unintermittedly -unintermittedness -unintermittent -unintermitting -unintermittingly -unintermittingness -unintermixed -uninternational -uninterpleaded -uninterpolated -uninterposed -uninterposing -uninterpretable -uninterpreted -uninterred -uninterrogable -uninterrogated -uninterrupted -uninterruptedly -uninterruptedness -uninterruptible -uninterruptibleness -uninterrupting -uninterruption -unintersected -uninterspersed -unintervening -uninterviewed -unintervolved -uninterwoven -uninthroned -unintimate -unintimated -unintimidated -unintitled -unintombed -unintoned -unintoxicated -unintoxicatedness -unintoxicating -unintrenchable -unintrenched -unintricate -unintrigued -unintriguing -unintroduced -unintroducible -unintroitive -unintromitted -unintrospective -unintruded -unintruding -unintrusive -unintrusively -unintrusted -unintuitive -unintwined -uninuclear -uninucleate -uninucleated -uninundated -uninured -uninurned -uninvadable -uninvaded -uninvaginated -uninvalidated -uninveighing -uninveigled -uninvented -uninventful -uninventibleness -uninventive -uninventively -uninventiveness -uninverted -uninvested -uninvestigable -uninvestigated -uninvestigating -uninvestigative -uninvidious -uninvidiously -uninvigorated -uninvincible -uninvite -uninvited -uninvitedly -uninviting -uninvoiced -uninvoked -uninvolved -uninweaved -uninwoven -uninwrapped -uninwreathed -unio -uniocular -unioid -union -unioned -unionic -unionid -unioniform -unionism -unionist -unionistic -unionization -unionize -unionoid -unioval -uniovular -uniovulate -unipara -uniparental -uniparient -uniparous -unipartite -uniped -unipeltate -uniperiodic -unipersonal -unipersonalist -unipersonality -unipetalous -uniphase -uniphaser -uniphonous -uniplanar -uniplicate -unipod -unipolar -unipolarity -uniporous -unipotence -unipotent -unipotential -unipulse -uniquantic -unique -uniquely -uniqueness -uniquity -uniradial -uniradiate -uniradiated -uniradical -uniramose -uniramous -unirascible -unireme -unirenic -unirhyme -uniridescent -unironed -unironical -unirradiated -unirrigated -unirritable -unirritant -unirritated -unirritatedly -unirritating -unisepalous -uniseptate -uniserial -uniserially -uniseriate -uniseriately -uniserrate -uniserrulate -unisexed -unisexual -unisexuality -unisexually -unisilicate -unisoil -unisolable -unisolate -unisolated -unisomeric -unisometrical -unisomorphic -unison -unisonal -unisonally -unisonance -unisonant -unisonous -unisotropic -unisparker -unispiculate -unispinose -unispiral -unissuable -unissued -unistylist -unisulcate -unit -unitage -unital -unitalicized -unitarian -unitarily -unitariness -unitarism -unitarist -unitary -unite -uniteability -uniteable -uniteably -united -unitedly -unitedness -unitemized -unitentacular -uniter -uniting -unitingly -unition -unitism -unitistic -unitive -unitively -unitiveness -unitize -unitooth -unitrivalent -unitrope -unituberculate -unitude -unity -uniunguiculate -uniungulate -univalence -univalency -univalent -univalvate -univalve -univalvular -univariant -univerbal -universal -universalia -universalism -universalist -universalistic -universality -universalization -universalize -universalizer -universally -universalness -universanimous -universe -universeful -universitarian -universitarianism -universitary -universitize -university -universityless -universitylike -universityship -universological -universologist -universology -univied -univocability -univocacy -univocal -univocalized -univocally -univocity -univoltine -univorous -unjacketed -unjaded -unjagged -unjailed -unjam -unjapanned -unjarred -unjarring -unjaundiced -unjaunty -unjealous -unjealoused -unjellied -unjesting -unjesuited -unjesuitical -unjesuitically -unjewel -unjeweled -unjewelled -unjilted -unjocose -unjocund -unjogged -unjogging -unjoin -unjoinable -unjoint -unjointed -unjointedness -unjointured -unjoking -unjokingly -unjolly -unjolted -unjostled -unjournalized -unjovial -unjovially -unjoyed -unjoyful -unjoyfully -unjoyfulness -unjoyous -unjoyously -unjoyousness -unjudgable -unjudge -unjudged -unjudgelike -unjudging -unjudicable -unjudicial -unjudicially -unjudicious -unjudiciously -unjudiciousness -unjuggled -unjuiced -unjuicy -unjumbled -unjumpable -unjust -unjustice -unjusticiable -unjustifiable -unjustifiableness -unjustifiably -unjustified -unjustifiedly -unjustifiedness -unjustify -unjustled -unjustly -unjustness -unjuvenile -unkaiserlike -unkamed -unked -unkeeled -unkembed -unkempt -unkemptly -unkemptness -unken -unkenned -unkennedness -unkennel -unkenneled -unkenning -unkensome -unkept -unkerchiefed -unket -unkey -unkeyed -unkicked -unkid -unkill -unkillability -unkillable -unkilled -unkilling -unkilned -unkin -unkind -unkindhearted -unkindled -unkindledness -unkindlily -unkindliness -unkindling -unkindly -unkindness -unkindred -unkindredly -unking -unkingdom -unkinged -unkinger -unkinglike -unkingly -unkink -unkinlike -unkirk -unkiss -unkissed -unkist -unknave -unkneaded -unkneeling -unknelled -unknew -unknight -unknighted -unknightlike -unknit -unknittable -unknitted -unknitting -unknocked -unknocking -unknot -unknotted -unknotty -unknow -unknowability -unknowable -unknowableness -unknowably -unknowing -unknowingly -unknowingness -unknowledgeable -unknown -unknownly -unknownness -unknownst -unkodaked -unkoshered -unlabeled -unlabialize -unlabiate -unlaborable -unlabored -unlaboring -unlaborious -unlaboriously -unlaboriousness -unlace -unlaced -unlacerated -unlackeyed -unlacquered -unlade -unladen -unladled -unladyfied -unladylike -unlagging -unlaid -unlame -unlamed -unlamented -unlampooned -unlanced -unland -unlanded -unlandmarked -unlanguaged -unlanguid -unlanguishing -unlanterned -unlap -unlapped -unlapsed -unlapsing -unlarded -unlarge -unlash -unlashed -unlasher -unlassoed -unlasting -unlatch -unlath -unlathed -unlathered -unlatinized -unlatticed -unlaudable -unlaudableness -unlaudably -unlauded -unlaugh -unlaughing -unlaunched -unlaundered -unlaureled -unlaved -unlaving -unlavish -unlavished -unlaw -unlawed -unlawful -unlawfully -unlawfulness -unlawlearned -unlawlike -unlawly -unlawyered -unlawyerlike -unlay -unlayable -unleached -unlead -unleaded -unleaderly -unleaf -unleafed -unleagued -unleaguer -unleakable -unleaky -unleal -unlean -unleared -unlearn -unlearnability -unlearnable -unlearnableness -unlearned -unlearnedly -unlearnedness -unlearning -unlearnt -unleasable -unleased -unleash -unleashed -unleathered -unleave -unleaved -unleavenable -unleavened -unlectured -unled -unleft -unlegacied -unlegal -unlegalized -unlegally -unlegalness -unlegate -unlegislative -unleisured -unleisuredness -unleisurely -unlenient -unlensed -unlent -unless -unlessened -unlessoned -unlet -unlettable -unletted -unlettered -unletteredly -unletteredness -unlettering -unletterlike -unlevel -unleveled -unlevelly -unlevelness -unlevied -unlevigated -unlexicographical -unliability -unliable -unlibeled -unliberal -unliberalized -unliberated -unlibidinous -unlicensed -unlicentiated -unlicentious -unlichened -unlickable -unlicked -unlid -unlidded -unlie -unlifelike -unliftable -unlifted -unlifting -unligable -unligatured -unlight -unlighted -unlightedly -unlightedness -unlightened -unlignified -unlikable -unlikableness -unlikably -unlike -unlikeable -unlikeableness -unlikeably -unliked -unlikelihood -unlikeliness -unlikely -unliken -unlikeness -unliking -unlimb -unlimber -unlime -unlimed -unlimitable -unlimitableness -unlimitably -unlimited -unlimitedly -unlimitedness -unlimitless -unlimned -unlimp -unline -unlineal -unlined -unlingering -unlink -unlinked -unlionlike -unliquefiable -unliquefied -unliquid -unliquidatable -unliquidated -unliquidating -unliquidation -unliquored -unlisping -unlist -unlisted -unlistened -unlistening -unlisty -unlit -unliteral -unliterally -unliteralness -unliterary -unliterate -unlitigated -unlitten -unlittered -unliturgical -unliturgize -unlivable -unlivableness -unlivably -unlive -unliveable -unliveableness -unliveably -unliveliness -unlively -unliveried -unlivery -unliving -unlizardlike -unload -unloaded -unloaden -unloader -unloafing -unloanably -unloaned -unloaning -unloath -unloathed -unloathful -unloathly -unloathsome -unlobed -unlocal -unlocalizable -unlocalize -unlocalized -unlocally -unlocated -unlock -unlockable -unlocked -unlocker -unlocking -unlocomotive -unlodge -unlodged -unlofty -unlogged -unlogic -unlogical -unlogically -unlogicalness -unlonely -unlook -unlooked -unloop -unlooped -unloosable -unloosably -unloose -unloosen -unloosening -unloosing -unlooted -unlopped -unloquacious -unlord -unlorded -unlordly -unlosable -unlosableness -unlost -unlotted -unlousy -unlovable -unlovableness -unlovably -unlove -unloveable -unloveableness -unloveably -unloved -unlovelily -unloveliness -unlovely -unloverlike -unloverly -unloving -unlovingly -unlovingness -unlowered -unlowly -unloyal -unloyally -unloyalty -unlubricated -unlucent -unlucid -unluck -unluckful -unluckily -unluckiness -unlucky -unlucrative -unludicrous -unluffed -unlugged -unlugubrious -unluminous -unlumped -unlunar -unlured -unlust -unlustily -unlustiness -unlustrous -unlusty -unlute -unluted -unluxated -unluxuriant -unluxurious -unlycanthropize -unlying -unlyrical -unlyrically -unmacadamized -unmacerated -unmachinable -unmackly -unmad -unmadded -unmaddened -unmade -unmagic -unmagical -unmagisterial -unmagistratelike -unmagnanimous -unmagnetic -unmagnetical -unmagnetized -unmagnified -unmagnify -unmaid -unmaidenlike -unmaidenliness -unmaidenly -unmail -unmailable -unmailableness -unmailed -unmaimable -unmaimed -unmaintainable -unmaintained -unmajestic -unmakable -unmake -unmaker -unmalevolent -unmalicious -unmalignant -unmaligned -unmalleability -unmalleable -unmalleableness -unmalled -unmaltable -unmalted -unmammalian -unmammonized -unman -unmanacle -unmanacled -unmanageable -unmanageableness -unmanageably -unmanaged -unmancipated -unmandated -unmanducated -unmaned -unmaneged -unmanful -unmanfully -unmangled -unmaniable -unmaniac -unmaniacal -unmanicured -unmanifest -unmanifested -unmanipulatable -unmanipulated -unmanlike -unmanlily -unmanliness -unmanly -unmanned -unmanner -unmannered -unmanneredly -unmannerliness -unmannerly -unmannish -unmanored -unmantle -unmantled -unmanufacturable -unmanufactured -unmanumissible -unmanumitted -unmanurable -unmanured -unmappable -unmapped -unmarbled -unmarch -unmarching -unmarginal -unmarginated -unmarine -unmaritime -unmarkable -unmarked -unmarketable -unmarketed -unmarled -unmarred -unmarriable -unmarriageability -unmarriageable -unmarried -unmarring -unmarry -unmarrying -unmarshaled -unmartial -unmartyr -unmartyred -unmarvelous -unmasculine -unmashed -unmask -unmasked -unmasker -unmasking -unmasquerade -unmassacred -unmassed -unmast -unmaster -unmasterable -unmastered -unmasterful -unmasticable -unmasticated -unmatchable -unmatchableness -unmatchably -unmatched -unmatchedness -unmate -unmated -unmaterial -unmaterialistic -unmateriate -unmaternal -unmathematical -unmathematically -unmating -unmatriculated -unmatrimonial -unmatronlike -unmatted -unmature -unmatured -unmaturely -unmatureness -unmaturing -unmaturity -unmauled -unmaze -unmeaning -unmeaningly -unmeaningness -unmeant -unmeasurable -unmeasurableness -unmeasurably -unmeasured -unmeasuredly -unmeasuredness -unmeated -unmechanic -unmechanical -unmechanically -unmechanistic -unmechanize -unmechanized -unmedaled -unmedalled -unmeddle -unmeddled -unmeddlesome -unmeddling -unmeddlingly -unmeddlingness -unmediaeval -unmediated -unmediatized -unmedicable -unmedical -unmedicated -unmedicative -unmedicinable -unmedicinal -unmeditated -unmeditative -unmediumistic -unmedullated -unmeek -unmeekly -unmeekness -unmeet -unmeetable -unmeetly -unmeetness -unmelancholy -unmeliorated -unmellow -unmellowed -unmelodic -unmelodious -unmelodiously -unmelodiousness -unmelodized -unmelodramatic -unmeltable -unmeltableness -unmeltably -unmelted -unmeltedness -unmelting -unmember -unmemoired -unmemorable -unmemorialized -unmemoried -unmemorized -unmenaced -unmenacing -unmendable -unmendableness -unmendably -unmendacious -unmended -unmenial -unmenseful -unmenstruating -unmensurable -unmental -unmentionability -unmentionable -unmentionableness -unmentionables -unmentionably -unmentioned -unmercantile -unmercenariness -unmercenary -unmercerized -unmerchantable -unmerchantlike -unmerchantly -unmerciful -unmercifully -unmercifulness -unmercurial -unmeretricious -unmerge -unmerged -unmeridional -unmerited -unmeritedly -unmeritedness -unmeriting -unmeritorious -unmeritoriously -unmeritoriousness -unmerry -unmesh -unmesmeric -unmesmerize -unmesmerized -unmet -unmetaled -unmetalized -unmetalled -unmetallic -unmetallurgical -unmetamorphosed -unmetaphorical -unmetaphysic -unmetaphysical -unmeted -unmeteorological -unmetered -unmethodical -unmethodically -unmethodicalness -unmethodized -unmethodizing -unmethylated -unmeticulous -unmetric -unmetrical -unmetrically -unmetricalness -unmetropolitan -unmettle -unmew -unmewed -unmicaceous -unmicrobic -unmicroscopic -unmidwifed -unmighty -unmigrating -unmildewed -unmilitant -unmilitarily -unmilitariness -unmilitaristic -unmilitarized -unmilitary -unmilked -unmilled -unmillinered -unmilted -unmimicked -unminable -unminced -unmincing -unmind -unminded -unmindful -unmindfully -unmindfulness -unminding -unmined -unmineralized -unmingle -unmingleable -unmingled -unmingling -unminimized -unminished -unminister -unministered -unministerial -unministerially -unminted -unminuted -unmiracled -unmiraculous -unmiraculously -unmired -unmirrored -unmirthful -unmirthfully -unmirthfulness -unmiry -unmisanthropic -unmiscarrying -unmischievous -unmiscible -unmisconceivable -unmiserly -unmisgiving -unmisgivingly -unmisguided -unmisinterpretable -unmisled -unmissable -unmissed -unmissionary -unmissionized -unmist -unmistakable -unmistakableness -unmistakably -unmistakedly -unmistaken -unmistakingly -unmistressed -unmistrusted -unmistrustful -unmistrusting -unmisunderstandable -unmisunderstanding -unmisunderstood -unmiter -unmitigable -unmitigated -unmitigatedly -unmitigatedness -unmitigative -unmittened -unmix -unmixable -unmixableness -unmixed -unmixedly -unmixedness -unmoaned -unmoated -unmobbed -unmobilized -unmocked -unmocking -unmockingly -unmodel -unmodeled -unmodelled -unmoderate -unmoderately -unmoderateness -unmoderating -unmodern -unmodernity -unmodernize -unmodernized -unmodest -unmodifiable -unmodifiableness -unmodifiably -unmodified -unmodifiedness -unmodish -unmodulated -unmoiled -unmoist -unmoisten -unmold -unmoldable -unmolded -unmoldered -unmoldering -unmoldy -unmolested -unmolestedly -unmolesting -unmollifiable -unmollifiably -unmollified -unmollifying -unmolten -unmomentary -unmomentous -unmomentously -unmonarch -unmonarchical -unmonastic -unmonetary -unmoneyed -unmonistic -unmonitored -unmonkish -unmonkly -unmonopolize -unmonopolized -unmonopolizing -unmonotonous -unmonumented -unmoor -unmoored -unmooted -unmopped -unmoral -unmoralist -unmorality -unmoralize -unmoralized -unmoralizing -unmorally -unmoralness -unmorbid -unmordanted -unmoribund -unmorose -unmorphological -unmortal -unmortared -unmortgage -unmortgageable -unmortgaged -unmortified -unmortifiedly -unmortifiedness -unmortise -unmortised -unmossed -unmothered -unmotherly -unmotionable -unmotivated -unmotivatedly -unmotivatedness -unmotived -unmotorized -unmottled -unmounded -unmount -unmountable -unmountainous -unmounted -unmounting -unmourned -unmournful -unmourning -unmouthable -unmouthed -unmouthpieced -unmovability -unmovable -unmovableness -unmovably -unmoved -unmovedly -unmoving -unmovingly -unmovingness -unmowed -unmown -unmucilaged -unmudded -unmuddied -unmuddle -unmuddled -unmuddy -unmuffle -unmuffled -unmulcted -unmulish -unmulled -unmullioned -unmultipliable -unmultiplied -unmultipliedly -unmultiply -unmummied -unmummify -unmunched -unmundane -unmundified -unmunicipalized -unmunificent -unmunitioned -unmurmured -unmurmuring -unmurmuringly -unmurmurous -unmuscled -unmuscular -unmusical -unmusicality -unmusically -unmusicalness -unmusicianly -unmusked -unmussed -unmusted -unmusterable -unmustered -unmutated -unmutation -unmuted -unmutilated -unmutinous -unmuttered -unmutual -unmutualized -unmuzzle -unmuzzled -unmuzzling -unmyelinated -unmysterious -unmysteriously -unmystery -unmystical -unmysticize -unmystified -unmythical -unnabbed -unnagged -unnagging -unnail -unnailed -unnaked -unnamability -unnamable -unnamableness -unnamably -unname -unnameability -unnameable -unnameableness -unnameably -unnamed -unnapkined -unnapped -unnarcotic -unnarrated -unnarrow -unnation -unnational -unnationalized -unnative -unnatural -unnaturalism -unnaturalist -unnaturalistic -unnaturality -unnaturalizable -unnaturalize -unnaturalized -unnaturally -unnaturalness -unnature -unnautical -unnavigability -unnavigable -unnavigableness -unnavigably -unnavigated -unneaped -unnearable -unneared -unnearly -unnearness -unneat -unneatly -unneatness -unnebulous -unnecessarily -unnecessariness -unnecessary -unnecessitated -unnecessitating -unnecessity -unneeded -unneedful -unneedfully -unneedfulness -unneedy -unnefarious -unnegated -unneglected -unnegligent -unnegotiable -unnegotiableness -unnegotiably -unnegotiated -unnegro -unneighbored -unneighborlike -unneighborliness -unneighborly -unnephritic -unnerve -unnerved -unnervous -unnest -unnestle -unnestled -unneth -unnethe -unnethes -unnethis -unnetted -unnettled -unneurotic -unneutral -unneutralized -unneutrally -unnew -unnewly -unnewness -unnibbed -unnibbied -unnice -unnicely -unniceness -unniched -unnicked -unnickeled -unnickelled -unnicknamed -unniggard -unniggardly -unnigh -unnimbed -unnimble -unnimbleness -unnimbly -unnipped -unnitrogenized -unnobilitated -unnobility -unnoble -unnobleness -unnobly -unnoised -unnomadic -unnominated -unnonsensical -unnoosed -unnormal -unnorthern -unnose -unnosed -unnotable -unnotched -unnoted -unnoteworthy -unnoticeable -unnoticeableness -unnoticeably -unnoticed -unnoticing -unnotified -unnotify -unnoting -unnourishable -unnourished -unnourishing -unnovel -unnovercal -unnucleated -unnullified -unnumberable -unnumberableness -unnumberably -unnumbered -unnumberedness -unnumerical -unnumerous -unnurtured -unnutritious -unnutritive -unnuzzled -unnymphlike -unoared -unobdurate -unobedience -unobedient -unobediently -unobese -unobeyed -unobeying -unobjected -unobjectionable -unobjectionableness -unobjectionably -unobjectional -unobjective -unobligated -unobligatory -unobliged -unobliging -unobligingly -unobligingness -unobliterable -unobliterated -unoblivious -unobnoxious -unobscene -unobscure -unobscured -unobsequious -unobsequiously -unobsequiousness -unobservable -unobservance -unobservant -unobservantly -unobservantness -unobserved -unobservedly -unobserving -unobservingly -unobsessed -unobsolete -unobstinate -unobstruct -unobstructed -unobstructedly -unobstructedness -unobstructive -unobstruent -unobtainable -unobtainableness -unobtainably -unobtained -unobtruded -unobtruding -unobtrusive -unobtrusively -unobtrusiveness -unobtunded -unobumbrated -unobverted -unobviated -unobvious -unoccasional -unoccasioned -unoccidental -unoccluded -unoccupancy -unoccupation -unoccupied -unoccupiedly -unoccupiedness -unoccurring -unoceanic -unocular -unode -unodious -unodoriferous -unoecumenic -unoecumenical -unoffendable -unoffended -unoffendedly -unoffender -unoffending -unoffendingly -unoffensive -unoffensively -unoffensiveness -unoffered -unofficed -unofficered -unofficerlike -unofficial -unofficialdom -unofficially -unofficialness -unofficiating -unofficinal -unofficious -unofficiously -unofficiousness -unoffset -unoften -unogled -unoil -unoiled -unoiling -unoily -unold -unomened -unominous -unomitted -unomnipotent -unomniscient -unonerous -unontological -unopaque -unoped -unopen -unopenable -unopened -unopening -unopenly -unopenness -unoperably -unoperated -unoperatic -unoperating -unoperative -unoperculate -unoperculated -unopined -unopinionated -unoppignorated -unopportune -unopportunely -unopportuneness -unopposable -unopposed -unopposedly -unopposedness -unopposite -unoppressed -unoppressive -unoppressively -unoppressiveness -unopprobrious -unoppugned -unopulence -unopulent -unoratorial -unoratorical -unorbed -unorbital -unorchestrated -unordain -unordainable -unordained -unorder -unorderable -unordered -unorderly -unordinarily -unordinariness -unordinary -unordinate -unordinately -unordinateness -unordnanced -unorganic -unorganical -unorganically -unorganicalness -unorganizable -unorganized -unorganizedly -unorganizedness -unoriental -unorientalness -unoriented -unoriginal -unoriginality -unoriginally -unoriginalness -unoriginate -unoriginated -unoriginatedness -unoriginately -unoriginateness -unorigination -unoriginative -unoriginatively -unoriginativeness -unorn -unornamental -unornamentally -unornamentalness -unornamented -unornate -unornithological -unornly -unorphaned -unorthodox -unorthodoxically -unorthodoxly -unorthodoxness -unorthodoxy -unorthographical -unorthographically -unoscillating -unosculated -unossified -unostensible -unostentation -unostentatious -unostentatiously -unostentatiousness -unoutgrown -unoutlawed -unoutraged -unoutspeakable -unoutspoken -unoutworn -unoverclouded -unovercome -unoverdone -unoverdrawn -unoverflowing -unoverhauled -unoverleaped -unoverlooked -unoverpaid -unoverpowered -unoverruled -unovert -unovertaken -unoverthrown -unovervalued -unoverwhelmed -unowed -unowing -unown -unowned -unoxidable -unoxidated -unoxidizable -unoxidized -unoxygenated -unoxygenized -unpacable -unpaced -unpacifiable -unpacific -unpacified -unpacifiedly -unpacifiedness -unpacifist -unpack -unpacked -unpacker -unpadded -unpadlocked -unpagan -unpaganize -unpaged -unpaginal -unpaid -unpained -unpainful -unpaining -unpainstaking -unpaint -unpaintability -unpaintable -unpaintableness -unpaintably -unpainted -unpaintedly -unpaintedness -unpaired -unpalatability -unpalatable -unpalatableness -unpalatably -unpalatal -unpalatial -unpale -unpaled -unpalisaded -unpalisadoed -unpalled -unpalliable -unpalliated -unpalpable -unpalped -unpalpitating -unpalsied -unpampered -unpanegyrized -unpanel -unpaneled -unpanelled -unpanged -unpanniered -unpanoplied -unpantheistic -unpanting -unpapal -unpapaverous -unpaper -unpapered -unparaded -unparadise -unparadox -unparagoned -unparagonized -unparagraphed -unparallel -unparallelable -unparalleled -unparalleledly -unparalleledness -unparallelness -unparalyzed -unparaphrased -unparasitical -unparcel -unparceled -unparceling -unparcelled -unparcelling -unparch -unparched -unparching -unpardon -unpardonable -unpardonableness -unpardonably -unpardoned -unpardonedness -unpardoning -unpared -unparented -unparfit -unpargeted -unpark -unparked -unparking -unparliamentary -unparliamented -unparodied -unparrel -unparriable -unparried -unparroted -unparrying -unparsed -unparsimonious -unparsonic -unparsonical -unpartable -unpartableness -unpartably -unpartaken -unpartaking -unparted -unpartial -unpartiality -unpartially -unpartialness -unparticipant -unparticipated -unparticipating -unparticipative -unparticular -unparticularized -unparticularizing -unpartisan -unpartitioned -unpartizan -unpartnered -unpartook -unparty -unpass -unpassable -unpassableness -unpassably -unpassed -unpassing -unpassionate -unpassionately -unpassionateness -unpassioned -unpassive -unpaste -unpasted -unpasteurized -unpasting -unpastor -unpastoral -unpastured -unpatched -unpatent -unpatentable -unpatented -unpaternal -unpathed -unpathetic -unpathwayed -unpatient -unpatiently -unpatientness -unpatriarchal -unpatrician -unpatriotic -unpatriotically -unpatriotism -unpatristic -unpatrolled -unpatronizable -unpatronized -unpatronizing -unpatted -unpatterned -unpaunch -unpaunched -unpauperized -unpausing -unpausingly -unpave -unpaved -unpavilioned -unpaving -unpawed -unpawn -unpawned -unpayable -unpayableness -unpayably -unpaying -unpayment -unpeace -unpeaceable -unpeaceableness -unpeaceably -unpeaceful -unpeacefully -unpeacefulness -unpealed -unpearled -unpebbled -unpeccable -unpecked -unpecuniarily -unpedagogical -unpedantic -unpeddled -unpedestal -unpedigreed -unpeel -unpeelable -unpeelableness -unpeeled -unpeerable -unpeered -unpeg -unpejorative -unpelagic -unpelted -unpen -unpenal -unpenalized -unpenanced -unpenciled -unpencilled -unpenetrable -unpenetrated -unpenetrating -unpenitent -unpenitently -unpenitentness -unpenned -unpennied -unpennoned -unpensionable -unpensionableness -unpensioned -unpensioning -unpent -unpenurious -unpeople -unpeopled -unpeopling -unperceived -unperceivedly -unperceptible -unperceptibly -unperceptive -unperch -unperched -unpercipient -unpercolated -unpercussed -unperfect -unperfected -unperfectedly -unperfectedness -unperfectly -unperfectness -unperfidious -unperflated -unperforate -unperforated -unperformable -unperformance -unperformed -unperforming -unperfumed -unperilous -unperiodic -unperiodical -unperiphrased -unperishable -unperishableness -unperishably -unperished -unperishing -unperjured -unpermanency -unpermanent -unpermanently -unpermeable -unpermeated -unpermissible -unpermissive -unpermitted -unpermitting -unpermixed -unpernicious -unperpendicular -unperpetrated -unperpetuated -unperplex -unperplexed -unperplexing -unpersecuted -unpersecutive -unperseverance -unpersevering -unperseveringly -unperseveringness -unpersonable -unpersonableness -unpersonal -unpersonality -unpersonified -unpersonify -unperspicuous -unperspirable -unperspiring -unpersuadable -unpersuadableness -unpersuadably -unpersuaded -unpersuadedness -unpersuasibleness -unpersuasion -unpersuasive -unpersuasively -unpersuasiveness -unpertaining -unpertinent -unpertinently -unperturbed -unperturbedly -unperturbedness -unperuked -unperused -unpervaded -unperverse -unpervert -unperverted -unpervious -unpessimistic -unpestered -unpestilential -unpetal -unpetitioned -unpetrified -unpetrify -unpetticoated -unpetulant -unpharasaic -unpharasaical -unphased -unphenomenal -unphilanthropic -unphilanthropically -unphilological -unphilosophic -unphilosophically -unphilosophicalness -unphilosophize -unphilosophized -unphilosophy -unphlegmatic -unphonetic -unphoneticness -unphonographed -unphosphatized -unphotographed -unphrasable -unphrasableness -unphrased -unphrenological -unphysical -unphysically -unphysicianlike -unphysicked -unphysiological -unpicaresque -unpick -unpickable -unpicked -unpicketed -unpickled -unpictorial -unpictorially -unpicturability -unpicturable -unpictured -unpicturesque -unpicturesquely -unpicturesqueness -unpiece -unpieced -unpierceable -unpierced -unpiercing -unpiety -unpigmented -unpile -unpiled -unpilfered -unpilgrimlike -unpillaged -unpillared -unpilled -unpilloried -unpillowed -unpiloted -unpimpled -unpin -unpinched -unpining -unpinion -unpinioned -unpinked -unpinned -unpious -unpiped -unpiqued -unpirated -unpitched -unpiteous -unpiteously -unpiteousness -unpitiable -unpitiably -unpitied -unpitiedly -unpitiedness -unpitiful -unpitifully -unpitifulness -unpitted -unpitying -unpityingly -unpityingness -unplacable -unplacably -unplacated -unplace -unplaced -unplacid -unplagiarized -unplagued -unplaid -unplain -unplained -unplainly -unplainness -unplait -unplaited -unplan -unplaned -unplanished -unplank -unplanked -unplanned -unplannedly -unplannedness -unplant -unplantable -unplanted -unplantlike -unplashed -unplaster -unplastered -unplastic -unplat -unplated -unplatted -unplausible -unplausibleness -unplausibly -unplayable -unplayed -unplayful -unplaying -unpleached -unpleadable -unpleaded -unpleading -unpleasable -unpleasant -unpleasantish -unpleasantly -unpleasantness -unpleasantry -unpleased -unpleasing -unpleasingly -unpleasingness -unpleasurable -unpleasurably -unpleasure -unpleat -unpleated -unplebeian -unpledged -unplenished -unplenteous -unplentiful -unplentifulness -unpliable -unpliableness -unpliably -unpliancy -unpliant -unpliantly -unplied -unplighted -unplodding -unplotted -unplotting -unplough -unploughed -unplow -unplowed -unplucked -unplug -unplugged -unplugging -unplumb -unplumbed -unplume -unplumed -unplummeted -unplump -unplundered -unplunge -unplunged -unplutocratic -unplutocratically -unpoached -unpocket -unpocketed -unpodded -unpoetic -unpoetically -unpoeticalness -unpoeticized -unpoetize -unpoetized -unpoignard -unpointed -unpointing -unpoise -unpoised -unpoison -unpoisonable -unpoisoned -unpoisonous -unpolarizable -unpolarized -unpoled -unpolemical -unpolemically -unpoliced -unpolicied -unpolish -unpolishable -unpolished -unpolishedness -unpolite -unpolitely -unpoliteness -unpolitic -unpolitical -unpolitically -unpoliticly -unpollarded -unpolled -unpollutable -unpolluted -unpollutedly -unpolluting -unpolymerized -unpompous -unpondered -unpontifical -unpooled -unpope -unpopular -unpopularity -unpopularize -unpopularly -unpopularness -unpopulate -unpopulated -unpopulous -unpopulousness -unporous -unportable -unportended -unportentous -unportioned -unportly -unportmanteaued -unportraited -unportrayable -unportrayed -unportuous -unposed -unposing -unpositive -unpossessable -unpossessed -unpossessedness -unpossessing -unpossibility -unpossible -unpossibleness -unpossibly -unposted -unpostered -unposthumous -unpostmarked -unpostponable -unpostponed -unpostulated -unpot -unpotted -unpouched -unpoulticed -unpounced -unpounded -unpoured -unpowdered -unpower -unpowerful -unpowerfulness -unpracticability -unpracticable -unpracticableness -unpracticably -unpractical -unpracticality -unpractically -unpracticalness -unpractice -unpracticed -unpragmatical -unpraisable -unpraise -unpraised -unpraiseful -unpraiseworthy -unpranked -unpray -unprayable -unprayed -unprayerful -unpraying -unpreach -unpreached -unpreaching -unprecarious -unprecautioned -unpreceded -unprecedented -unprecedentedly -unprecedentedness -unprecedential -unprecedently -unprecious -unprecipitate -unprecipitated -unprecise -unprecisely -unpreciseness -unprecluded -unprecludible -unprecocious -unpredacious -unpredestinated -unpredestined -unpredicable -unpredicated -unpredict -unpredictable -unpredictableness -unpredictably -unpredicted -unpredictedness -unpredicting -unpredisposed -unpredisposing -unpreened -unprefaced -unpreferable -unpreferred -unprefigured -unprefined -unprefixed -unpregnant -unprejudged -unprejudicated -unprejudice -unprejudiced -unprejudicedly -unprejudicedness -unprejudiciable -unprejudicial -unprejudicially -unprejudicialness -unprelatic -unprelatical -unpreluded -unpremature -unpremeditate -unpremeditated -unpremeditatedly -unpremeditatedness -unpremeditately -unpremeditation -unpremonished -unpremonstrated -unprenominated -unprenticed -unpreoccupied -unpreordained -unpreparation -unprepare -unprepared -unpreparedly -unpreparedness -unpreparing -unpreponderated -unpreponderating -unprepossessedly -unprepossessing -unprepossessingly -unprepossessingness -unpreposterous -unpresaged -unpresageful -unpresaging -unpresbyterated -unprescient -unprescinded -unprescribed -unpresentability -unpresentable -unpresentableness -unpresentably -unpresented -unpreservable -unpreserved -unpresidential -unpresiding -unpressed -unpresumable -unpresumed -unpresuming -unpresumingness -unpresumptuous -unpresumptuously -unpresupposed -unpretended -unpretending -unpretendingly -unpretendingness -unpretentious -unpretentiously -unpretentiousness -unpretermitted -unpreternatural -unprettiness -unpretty -unprevailing -unprevalent -unprevaricating -unpreventable -unpreventableness -unpreventably -unprevented -unpreventible -unpreventive -unpriceably -unpriced -unpricked -unprickled -unprickly -unpriest -unpriestlike -unpriestly -unpriggish -unprim -unprime -unprimed -unprimitive -unprimmed -unprince -unprincelike -unprinceliness -unprincely -unprincess -unprincipal -unprinciple -unprincipled -unprincipledly -unprincipledness -unprint -unprintable -unprintableness -unprintably -unprinted -unpriority -unprismatic -unprison -unprisonable -unprisoned -unprivate -unprivileged -unprizable -unprized -unprobated -unprobationary -unprobed -unprobity -unproblematic -unproblematical -unprocessed -unproclaimed -unprocrastinated -unprocreant -unprocreated -unproctored -unprocurable -unprocurableness -unprocure -unprocured -unproded -unproduceable -unproduceableness -unproduceably -unproduced -unproducedness -unproducible -unproducibleness -unproducibly -unproductive -unproductively -unproductiveness -unproductivity -unprofanable -unprofane -unprofaned -unprofessed -unprofessing -unprofessional -unprofessionalism -unprofessionally -unprofessorial -unproffered -unproficiency -unproficient -unproficiently -unprofit -unprofitable -unprofitableness -unprofitably -unprofited -unprofiteering -unprofiting -unprofound -unprofuse -unprofusely -unprofuseness -unprognosticated -unprogressed -unprogressive -unprogressively -unprogressiveness -unprohibited -unprohibitedness -unprohibitive -unprojected -unprojecting -unproliferous -unprolific -unprolix -unprologued -unprolonged -unpromiscuous -unpromise -unpromised -unpromising -unpromisingly -unpromisingness -unpromotable -unpromoted -unprompted -unpromptly -unpromulgated -unpronounce -unpronounceable -unpronounced -unpronouncing -unproofread -unprop -unpropagated -unpropelled -unpropense -unproper -unproperly -unproperness -unpropertied -unprophesiable -unprophesied -unprophetic -unprophetical -unprophetically -unprophetlike -unpropitiable -unpropitiated -unpropitiatedness -unpropitiatory -unpropitious -unpropitiously -unpropitiousness -unproportion -unproportionable -unproportionableness -unproportionably -unproportional -unproportionality -unproportionally -unproportionate -unproportionately -unproportionateness -unproportioned -unproportionedly -unproportionedness -unproposed -unproposing -unpropounded -unpropped -unpropriety -unprorogued -unprosaic -unproscribable -unproscribed -unprosecutable -unprosecuted -unprosecuting -unproselyte -unproselyted -unprosodic -unprospected -unprospective -unprosperably -unprospered -unprosperity -unprosperous -unprosperously -unprosperousness -unprostitute -unprostituted -unprostrated -unprotectable -unprotected -unprotectedly -unprotectedness -unprotective -unprotestant -unprotestantize -unprotested -unprotesting -unprotruded -unprotruding -unprotrusive -unproud -unprovability -unprovable -unprovableness -unprovably -unproved -unprovedness -unproven -unproverbial -unprovidable -unprovide -unprovided -unprovidedly -unprovidedness -unprovidenced -unprovident -unprovidential -unprovidently -unprovincial -unproving -unprovision -unprovisioned -unprovocative -unprovokable -unprovoke -unprovoked -unprovokedly -unprovokedness -unprovoking -unproximity -unprudence -unprudent -unprudently -unpruned -unprying -unpsychic -unpsychological -unpublic -unpublicity -unpublishable -unpublishableness -unpublishably -unpublished -unpucker -unpuckered -unpuddled -unpuffed -unpuffing -unpugilistic -unpugnacious -unpulled -unpulleyed -unpulped -unpulverable -unpulverize -unpulverized -unpulvinate -unpulvinated -unpumicated -unpummeled -unpummelled -unpumpable -unpumped -unpunched -unpunctated -unpunctilious -unpunctual -unpunctuality -unpunctually -unpunctuated -unpunctuating -unpunishable -unpunishably -unpunished -unpunishedly -unpunishedness -unpunishing -unpunishingly -unpurchasable -unpurchased -unpure -unpurely -unpureness -unpurgeable -unpurged -unpurifiable -unpurified -unpurifying -unpuritan -unpurled -unpurloined -unpurpled -unpurported -unpurposed -unpurposelike -unpurposely -unpurposing -unpurse -unpursed -unpursuable -unpursued -unpursuing -unpurveyed -unpushed -unput -unputrefiable -unputrefied -unputrid -unputtied -unpuzzle -unquadded -unquaffed -unquailed -unquailing -unquailingly -unquakerlike -unquakerly -unquaking -unqualifiable -unqualification -unqualified -unqualifiedly -unqualifiedness -unqualify -unqualifying -unqualifyingly -unqualitied -unquality -unquantified -unquantitative -unquarantined -unquarreled -unquarreling -unquarrelled -unquarrelling -unquarrelsome -unquarried -unquartered -unquashed -unquayed -unqueen -unqueened -unqueening -unqueenlike -unqueenly -unquellable -unquelled -unquenchable -unquenchableness -unquenchably -unquenched -unqueried -unquested -unquestionability -unquestionable -unquestionableness -unquestionably -unquestionate -unquestioned -unquestionedly -unquestionedness -unquestioning -unquestioningly -unquestioningness -unquibbled -unquibbling -unquick -unquickened -unquickly -unquicksilvered -unquiescence -unquiescent -unquiescently -unquiet -unquietable -unquieted -unquieting -unquietly -unquietness -unquietude -unquilleted -unquilted -unquit -unquittable -unquitted -unquivered -unquivering -unquizzable -unquizzed -unquotable -unquote -unquoted -unrabbeted -unrabbinical -unraced -unrack -unracked -unracking -unradiated -unradical -unradicalize -unraffled -unraftered -unraided -unrailed -unrailroaded -unrailwayed -unrainy -unraised -unrake -unraked -unraking -unrallied -unram -unrambling -unramified -unrammed -unramped -unranched -unrancid -unrancored -unrandom -unrank -unranked -unransacked -unransomable -unransomed -unrapacious -unraped -unraptured -unrare -unrarefied -unrash -unrasped -unratable -unrated -unratified -unrational -unrattled -unravaged -unravel -unravelable -unraveled -unraveler -unraveling -unravellable -unravelled -unraveller -unravelling -unravelment -unraving -unravished -unravishing -unray -unrayed -unrazed -unrazored -unreachable -unreachably -unreached -unreactive -unread -unreadability -unreadable -unreadableness -unreadably -unreadily -unreadiness -unready -unreal -unrealism -unrealist -unrealistic -unreality -unrealizable -unrealize -unrealized -unrealizing -unreally -unrealmed -unrealness -unreaped -unreared -unreason -unreasonability -unreasonable -unreasonableness -unreasonably -unreasoned -unreasoning -unreasoningly -unreassuring -unreassuringly -unreave -unreaving -unrebated -unrebel -unrebellious -unrebuffable -unrebuffably -unrebuilt -unrebukable -unrebukably -unrebuked -unrebuttable -unrebuttableness -unrebutted -unrecallable -unrecallably -unrecalled -unrecalling -unrecantable -unrecanted -unrecaptured -unreceding -unreceipted -unreceivable -unreceived -unreceiving -unrecent -unreceptant -unreceptive -unreceptivity -unreciprocal -unreciprocated -unrecited -unrecked -unrecking -unreckingness -unreckon -unreckonable -unreckoned -unreclaimable -unreclaimably -unreclaimed -unreclaimedness -unreclaiming -unreclined -unreclining -unrecognition -unrecognizable -unrecognizableness -unrecognizably -unrecognized -unrecognizing -unrecognizingly -unrecoined -unrecollected -unrecommendable -unrecompensable -unrecompensed -unreconcilable -unreconcilableness -unreconcilably -unreconciled -unrecondite -unreconnoitered -unreconsidered -unreconstructed -unrecordable -unrecorded -unrecordedness -unrecording -unrecountable -unrecounted -unrecoverable -unrecoverableness -unrecoverably -unrecovered -unrecreant -unrecreated -unrecreating -unrecriminative -unrecruitable -unrecruited -unrectangular -unrectifiable -unrectifiably -unrectified -unrecumbent -unrecuperated -unrecurrent -unrecurring -unrecusant -unred -unredacted -unredeemable -unredeemableness -unredeemably -unredeemed -unredeemedly -unredeemedness -unredeeming -unredressable -unredressed -unreduceable -unreduced -unreducible -unreducibleness -unreducibly -unreduct -unreefed -unreel -unreelable -unreeled -unreeling -unreeve -unreeving -unreferenced -unreferred -unrefilled -unrefine -unrefined -unrefinedly -unrefinedness -unrefinement -unrefining -unrefitted -unreflected -unreflecting -unreflectingly -unreflectingness -unreflective -unreflectively -unreformable -unreformed -unreformedness -unreforming -unrefracted -unrefracting -unrefrainable -unrefrained -unrefraining -unrefreshed -unrefreshful -unrefreshing -unrefreshingly -unrefrigerated -unrefulgent -unrefunded -unrefunding -unrefusable -unrefusably -unrefused -unrefusing -unrefusingly -unrefutable -unrefuted -unrefuting -unregainable -unregained -unregal -unregaled -unregality -unregally -unregard -unregardable -unregardant -unregarded -unregardedly -unregardful -unregeneracy -unregenerate -unregenerately -unregenerateness -unregenerating -unregeneration -unregimented -unregistered -unregressive -unregretful -unregretfully -unregretfulness -unregrettable -unregretted -unregretting -unregular -unregulated -unregulative -unregurgitated -unrehabilitated -unrehearsable -unrehearsed -unrehearsing -unreigning -unreimbodied -unrein -unreined -unreinstated -unreiterable -unreiterated -unrejectable -unrejoiced -unrejoicing -unrejuvenated -unrelapsing -unrelated -unrelatedness -unrelating -unrelational -unrelative -unrelatively -unrelaxable -unrelaxed -unrelaxing -unrelaxingly -unreleasable -unreleased -unreleasing -unrelegated -unrelentance -unrelented -unrelenting -unrelentingly -unrelentingness -unrelentor -unrelevant -unreliability -unreliable -unreliableness -unreliably -unreliance -unrelievable -unrelievableness -unrelieved -unrelievedly -unreligion -unreligioned -unreligious -unreligiously -unreligiousness -unrelinquishable -unrelinquishably -unrelinquished -unrelinquishing -unrelishable -unrelished -unrelishing -unreluctant -unreluctantly -unremaining -unremanded -unremarkable -unremarked -unremarried -unremediable -unremedied -unremember -unrememberable -unremembered -unremembering -unremembrance -unreminded -unremissible -unremittable -unremitted -unremittedly -unremittent -unremittently -unremitting -unremittingly -unremittingness -unremonstrant -unremonstrated -unremonstrating -unremorseful -unremorsefully -unremote -unremotely -unremounted -unremovable -unremovableness -unremovably -unremoved -unremunerated -unremunerating -unremunerative -unremuneratively -unremunerativeness -unrenderable -unrendered -unrenewable -unrenewed -unrenounceable -unrenounced -unrenouncing -unrenovated -unrenowned -unrenownedly -unrenownedness -unrent -unrentable -unrented -unreorganized -unrepaid -unrepair -unrepairable -unrepaired -unrepartable -unreparted -unrepealability -unrepealable -unrepealableness -unrepealably -unrepealed -unrepeatable -unrepeated -unrepellable -unrepelled -unrepellent -unrepent -unrepentable -unrepentance -unrepentant -unrepentantly -unrepentantness -unrepented -unrepenting -unrepentingly -unrepentingness -unrepetitive -unrepined -unrepining -unrepiningly -unrepiqued -unreplaceable -unreplaced -unreplenished -unrepleviable -unreplevined -unrepliable -unrepliably -unreplied -unreplying -unreportable -unreported -unreportedly -unreportedness -unrepose -unreposed -unreposeful -unreposefulness -unreposing -unrepossessed -unreprehended -unrepresentable -unrepresentation -unrepresentative -unrepresented -unrepresentedness -unrepressed -unrepressible -unreprievable -unreprievably -unreprieved -unreprimanded -unreprinted -unreproachable -unreproachableness -unreproachably -unreproached -unreproachful -unreproachfully -unreproaching -unreproachingly -unreprobated -unreproducible -unreprovable -unreprovableness -unreprovably -unreproved -unreprovedly -unreprovedness -unreproving -unrepublican -unrepudiable -unrepudiated -unrepugnant -unrepulsable -unrepulsed -unrepulsing -unrepulsive -unreputable -unreputed -unrequalified -unrequested -unrequickened -unrequired -unrequisite -unrequitable -unrequital -unrequited -unrequitedly -unrequitedness -unrequitement -unrequiter -unrequiting -unrescinded -unrescued -unresemblant -unresembling -unresented -unresentful -unresenting -unreserve -unreserved -unreservedly -unreservedness -unresifted -unresigned -unresistable -unresistably -unresistance -unresistant -unresistantly -unresisted -unresistedly -unresistedness -unresistible -unresistibleness -unresistibly -unresisting -unresistingly -unresistingness -unresolute -unresolvable -unresolve -unresolved -unresolvedly -unresolvedness -unresolving -unresonant -unresounded -unresounding -unresourceful -unresourcefulness -unrespect -unrespectability -unrespectable -unrespected -unrespectful -unrespectfully -unrespectfulness -unrespective -unrespectively -unrespectiveness -unrespirable -unrespired -unrespited -unresplendent -unresponding -unresponsible -unresponsibleness -unresponsive -unresponsively -unresponsiveness -unrest -unrestable -unrested -unrestful -unrestfully -unrestfulness -unresting -unrestingly -unrestingness -unrestorable -unrestored -unrestrainable -unrestrainably -unrestrained -unrestrainedly -unrestrainedness -unrestraint -unrestrictable -unrestricted -unrestrictedly -unrestrictedness -unrestrictive -unresty -unresultive -unresumed -unresumptive -unretainable -unretained -unretaliated -unretaliating -unretardable -unretarded -unretentive -unreticent -unretinued -unretired -unretiring -unretorted -unretouched -unretractable -unretracted -unretreating -unretrenchable -unretrenched -unretrievable -unretrieved -unretrievingly -unretted -unreturnable -unreturnably -unreturned -unreturning -unreturningly -unrevealable -unrevealed -unrevealedness -unrevealing -unrevealingly -unrevelationize -unrevenged -unrevengeful -unrevengefulness -unrevenging -unrevengingly -unrevenue -unrevenued -unreverberated -unrevered -unreverence -unreverenced -unreverend -unreverendly -unreverent -unreverential -unreverently -unreverentness -unreversable -unreversed -unreversible -unreverted -unrevertible -unreverting -unrevested -unrevetted -unreviewable -unreviewed -unreviled -unrevised -unrevivable -unrevived -unrevocable -unrevocableness -unrevocably -unrevoked -unrevolted -unrevolting -unrevolutionary -unrevolutionized -unrevolved -unrevolving -unrewardable -unrewarded -unrewardedly -unrewarding -unreworded -unrhetorical -unrhetorically -unrhetoricalness -unrhyme -unrhymed -unrhythmic -unrhythmical -unrhythmically -unribbed -unribboned -unrich -unriched -unricht -unricked -unrid -unridable -unridableness -unridably -unridden -unriddle -unriddleable -unriddled -unriddler -unriddling -unride -unridely -unridered -unridged -unridiculed -unridiculous -unrife -unriffled -unrifled -unrifted -unrig -unrigged -unrigging -unright -unrightable -unrighted -unrighteous -unrighteously -unrighteousness -unrightful -unrightfully -unrightfulness -unrightly -unrightwise -unrigid -unrigorous -unrimpled -unrind -unring -unringable -unringed -unringing -unrinsed -unrioted -unrioting -unriotous -unrip -unripe -unriped -unripely -unripened -unripeness -unripening -unrippable -unripped -unripping -unrippled -unrippling -unripplingly -unrisen -unrising -unriskable -unrisked -unrisky -unritual -unritualistic -unrivalable -unrivaled -unrivaledly -unrivaledness -unrived -unriven -unrivet -unriveted -unriveting -unroaded -unroadworthy -unroaming -unroast -unroasted -unrobbed -unrobe -unrobed -unrobust -unrocked -unrococo -unrodded -unroiled -unroll -unrollable -unrolled -unroller -unrolling -unrollment -unromantic -unromantical -unromantically -unromanticalness -unromanticized -unroof -unroofed -unroofing -unroomy -unroost -unroosted -unroosting -unroot -unrooted -unrooting -unrope -unroped -unrosed -unrosined -unrostrated -unrotated -unrotating -unroted -unrotted -unrotten -unrotund -unrouged -unrough -unroughened -unround -unrounded -unrounding -unrousable -unroused -unroutable -unrouted -unrove -unroved -unroving -unrow -unrowed -unroweled -unroyal -unroyalist -unroyalized -unroyally -unroyalness -unrubbed -unrubbish -unrubified -unrubrical -unrubricated -unruddered -unruddled -unrueful -unruffable -unruffed -unruffle -unruffled -unruffling -unrugged -unruinable -unruinated -unruined -unrulable -unrulableness -unrule -unruled -unruledly -unruledness -unruleful -unrulily -unruliness -unruly -unruminated -unruminating -unruminatingly -unrummaged -unrumored -unrumple -unrumpled -unrun -unrung -unruptured -unrural -unrushed -unrust -unrusted -unrustic -unrusticated -unrustling -unruth -unsabbatical -unsabered -unsabled -unsabred -unsaccharic -unsacerdotal -unsacerdotally -unsack -unsacked -unsacramental -unsacramentally -unsacramentarian -unsacred -unsacredly -unsacrificeable -unsacrificeably -unsacrificed -unsacrificial -unsacrificing -unsacrilegious -unsad -unsadden -unsaddened -unsaddle -unsaddled -unsaddling -unsafe -unsafeguarded -unsafely -unsafeness -unsafety -unsagacious -unsage -unsagging -unsaid -unsailable -unsailed -unsailorlike -unsaint -unsainted -unsaintlike -unsaintly -unsalability -unsalable -unsalableness -unsalably -unsalaried -unsalesmanlike -unsaline -unsalivated -unsallying -unsalmonlike -unsalt -unsaltable -unsaltatory -unsalted -unsalubrious -unsalutary -unsaluted -unsaluting -unsalvability -unsalvable -unsalvableness -unsalvaged -unsalved -unsampled -unsanctification -unsanctified -unsanctifiedly -unsanctifiedness -unsanctify -unsanctifying -unsanctimonious -unsanctimoniously -unsanctimoniousness -unsanction -unsanctionable -unsanctioned -unsanctioning -unsanctitude -unsanctity -unsanctuaried -unsandaled -unsanded -unsane -unsanguinary -unsanguine -unsanguinely -unsanguineness -unsanguineous -unsanguineously -unsanitariness -unsanitary -unsanitated -unsanitation -unsanity -unsaponifiable -unsaponified -unsapped -unsappy -unsarcastic -unsardonic -unsartorial -unsash -unsashed -unsatable -unsatanic -unsated -unsatedly -unsatedness -unsatiability -unsatiable -unsatiableness -unsatiably -unsatiate -unsatiated -unsatiating -unsatin -unsatire -unsatirical -unsatirically -unsatirize -unsatirized -unsatisfaction -unsatisfactorily -unsatisfactoriness -unsatisfactory -unsatisfiable -unsatisfiableness -unsatisfiably -unsatisfied -unsatisfiedly -unsatisfiedness -unsatisfying -unsatisfyingly -unsatisfyingness -unsaturable -unsaturated -unsaturatedly -unsaturatedness -unsaturation -unsatyrlike -unsauced -unsaurian -unsavable -unsaveable -unsaved -unsaving -unsavored -unsavoredly -unsavoredness -unsavorily -unsavoriness -unsavory -unsawed -unsawn -unsay -unsayability -unsayable -unscabbard -unscabbarded -unscabbed -unscaffolded -unscalable -unscalableness -unscalably -unscale -unscaled -unscaledness -unscalloped -unscaly -unscamped -unscandalize -unscandalized -unscandalous -unscannable -unscanned -unscanted -unscanty -unscarb -unscarce -unscared -unscarfed -unscarified -unscarred -unscathed -unscathedly -unscathedness -unscattered -unscavengered -unscenic -unscent -unscented -unscepter -unsceptered -unsceptical -unsceptre -unsceptred -unscheduled -unschematic -unschematized -unscholar -unscholarlike -unscholarly -unscholastic -unschool -unschooled -unschooledly -unschooledness -unscienced -unscientific -unscientifical -unscientifically -unscintillating -unscioned -unscissored -unscoffed -unscoffing -unscolded -unsconced -unscooped -unscorched -unscored -unscorified -unscoring -unscorned -unscornful -unscornfully -unscornfulness -unscotch -unscotched -unscottify -unscoured -unscourged -unscowling -unscramble -unscrambling -unscraped -unscratchable -unscratched -unscratching -unscratchingly -unscrawled -unscreen -unscreenable -unscreenably -unscreened -unscrew -unscrewable -unscrewed -unscrewing -unscribal -unscribbled -unscribed -unscrimped -unscriptural -unscripturally -unscripturalness -unscrubbed -unscrupled -unscrupulosity -unscrupulous -unscrupulously -unscrupulousness -unscrutable -unscrutinized -unscrutinizing -unscrutinizingly -unsculptural -unsculptured -unscummed -unscutcheoned -unseafaring -unseal -unsealable -unsealed -unsealer -unsealing -unseam -unseamanlike -unseamanship -unseamed -unseaming -unsearchable -unsearchableness -unsearchably -unsearched -unsearcherlike -unsearching -unseared -unseason -unseasonable -unseasonableness -unseasonably -unseasoned -unseat -unseated -unseaworthiness -unseaworthy -unseceding -unsecluded -unseclusive -unseconded -unsecrecy -unsecret -unsecretarylike -unsecreted -unsecreting -unsecretly -unsecretness -unsectarian -unsectarianism -unsectarianize -unsectional -unsecular -unsecularize -unsecularized -unsecure -unsecured -unsecuredly -unsecuredness -unsecurely -unsecureness -unsecurity -unsedate -unsedentary -unseditious -unseduce -unseduced -unseducible -unseductive -unsedulous -unsee -unseeable -unseeded -unseeing -unseeingly -unseeking -unseeming -unseemingly -unseemlily -unseemliness -unseemly -unseen -unseethed -unsegmented -unsegregable -unsegregated -unsegregatedness -unseignorial -unseismic -unseizable -unseized -unseldom -unselect -unselected -unselecting -unselective -unself -unselfish -unselfishly -unselfishness -unselflike -unselfness -unselling -unsenatorial -unsenescent -unsensational -unsense -unsensed -unsensibility -unsensible -unsensibleness -unsensibly -unsensitive -unsensitize -unsensitized -unsensory -unsensual -unsensualize -unsensualized -unsensually -unsensuous -unsensuousness -unsent -unsentenced -unsententious -unsentient -unsentimental -unsentimentalist -unsentimentality -unsentimentalize -unsentimentally -unsentineled -unsentinelled -unseparable -unseparableness -unseparably -unseparate -unseparated -unseptate -unseptated -unsepulcher -unsepulchered -unsepulchral -unsepulchre -unsepulchred -unsepultured -unsequenced -unsequential -unsequestered -unseraphical -unserenaded -unserene -unserflike -unserious -unseriousness -unserrated -unserried -unservable -unserved -unserviceability -unserviceable -unserviceableness -unserviceably -unservicelike -unservile -unsesquipedalian -unset -unsetting -unsettle -unsettleable -unsettled -unsettledness -unsettlement -unsettling -unseverable -unseverableness -unsevere -unsevered -unseveredly -unseveredness -unsew -unsewed -unsewered -unsewing -unsewn -unsex -unsexed -unsexing -unsexlike -unsexual -unshackle -unshackled -unshackling -unshade -unshaded -unshadow -unshadowable -unshadowed -unshady -unshafted -unshakable -unshakably -unshakeable -unshakeably -unshaken -unshakenly -unshakenness -unshaking -unshakingness -unshaled -unshamable -unshamableness -unshamably -unshameable -unshameableness -unshameably -unshamed -unshamefaced -unshamefacedness -unshameful -unshamefully -unshamefulness -unshammed -unshanked -unshapable -unshape -unshapeable -unshaped -unshapedness -unshapeliness -unshapely -unshapen -unshapenly -unshapenness -unsharable -unshared -unsharedness -unsharing -unsharp -unsharped -unsharpen -unsharpened -unsharpening -unsharping -unshattered -unshavable -unshaveable -unshaved -unshavedly -unshavedness -unshaven -unshavenly -unshavenness -unshawl -unsheaf -unsheared -unsheathe -unsheathed -unsheathing -unshed -unsheet -unsheeted -unsheeting -unshell -unshelled -unshelling -unshelterable -unsheltered -unsheltering -unshelve -unshepherded -unshepherding -unsheriff -unshewed -unshieldable -unshielded -unshielding -unshiftable -unshifted -unshiftiness -unshifting -unshifty -unshimmering -unshingled -unshining -unship -unshiplike -unshipment -unshipped -unshipping -unshipshape -unshipwrecked -unshirking -unshirted -unshivered -unshivering -unshockable -unshocked -unshod -unshodden -unshoe -unshoed -unshoeing -unshop -unshore -unshored -unshorn -unshort -unshortened -unshot -unshotted -unshoulder -unshouted -unshouting -unshoved -unshoveled -unshowable -unshowed -unshowmanlike -unshown -unshowy -unshredded -unshrew -unshrewd -unshrewish -unshrill -unshrine -unshrined -unshrinement -unshrink -unshrinkability -unshrinkable -unshrinking -unshrinkingly -unshrived -unshriveled -unshrivelled -unshriven -unshroud -unshrouded -unshrubbed -unshrugging -unshrunk -unshrunken -unshuddering -unshuffle -unshuffled -unshunnable -unshunned -unshunted -unshut -unshutter -unshuttered -unshy -unshyly -unshyness -unsibilant -unsiccated -unsick -unsickened -unsicker -unsickerly -unsickerness -unsickled -unsickly -unsided -unsiding -unsiege -unsifted -unsighing -unsight -unsightable -unsighted -unsighting -unsightliness -unsightly -unsigmatic -unsignable -unsignaled -unsignalized -unsignalled -unsignatured -unsigned -unsigneted -unsignificancy -unsignificant -unsignificantly -unsignificative -unsignified -unsignifying -unsilenceable -unsilenceably -unsilenced -unsilent -unsilentious -unsilently -unsilicified -unsilly -unsilvered -unsimilar -unsimilarity -unsimilarly -unsimple -unsimplicity -unsimplified -unsimplify -unsimulated -unsimultaneous -unsin -unsincere -unsincerely -unsincereness -unsincerity -unsinew -unsinewed -unsinewing -unsinewy -unsinful -unsinfully -unsinfulness -unsing -unsingability -unsingable -unsingableness -unsinged -unsingle -unsingled -unsingleness -unsingular -unsinister -unsinkability -unsinkable -unsinking -unsinnable -unsinning -unsinningness -unsiphon -unsipped -unsister -unsistered -unsisterliness -unsisterly -unsizable -unsizableness -unsizeable -unsizeableness -unsized -unskaithd -unskeptical -unsketchable -unsketched -unskewed -unskewered -unskilful -unskilfully -unskilled -unskilledly -unskilledness -unskillful -unskillfully -unskillfulness -unskimmed -unskin -unskinned -unskirted -unslack -unslacked -unslackened -unslackening -unslacking -unslagged -unslain -unslakable -unslakeable -unslaked -unslammed -unslandered -unslanderous -unslapped -unslashed -unslate -unslated -unslating -unslaughtered -unslave -unslayable -unsleaved -unsleek -unsleepably -unsleeping -unsleepingly -unsleepy -unsleeve -unsleeved -unslender -unslept -unsliced -unsliding -unslighted -unsling -unslip -unslipped -unslippery -unslipping -unslit -unslockened -unsloped -unslopped -unslot -unslothful -unslothfully -unslothfulness -unslotted -unsloughed -unsloughing -unslow -unsluggish -unsluice -unsluiced -unslumbering -unslumberous -unslumbrous -unslung -unslurred -unsly -unsmacked -unsmart -unsmartly -unsmartness -unsmeared -unsmelled -unsmelling -unsmelted -unsmiled -unsmiling -unsmilingly -unsmilingness -unsmirched -unsmirking -unsmitten -unsmokable -unsmokeable -unsmoked -unsmokified -unsmoking -unsmoky -unsmooth -unsmoothed -unsmoothly -unsmoothness -unsmote -unsmotherable -unsmothered -unsmudged -unsmuggled -unsmutched -unsmutted -unsmutty -unsnaffled -unsnagged -unsnaggled -unsnaky -unsnap -unsnapped -unsnare -unsnared -unsnarl -unsnatch -unsnatched -unsneck -unsneering -unsnib -unsnipped -unsnobbish -unsnoring -unsnouted -unsnow -unsnubbable -unsnubbed -unsnuffed -unsoaked -unsoaped -unsoarable -unsober -unsoberly -unsoberness -unsobriety -unsociability -unsociable -unsociableness -unsociably -unsocial -unsocialism -unsocialistic -unsociality -unsocializable -unsocialized -unsocially -unsocialness -unsociological -unsocket -unsodden -unsoft -unsoftened -unsoftening -unsoggy -unsoil -unsoiled -unsoiledness -unsolaced -unsolacing -unsolar -unsold -unsolder -unsoldered -unsoldering -unsoldier -unsoldiered -unsoldierlike -unsoldierly -unsole -unsoled -unsolemn -unsolemness -unsolemnize -unsolemnized -unsolemnly -unsolicitated -unsolicited -unsolicitedly -unsolicitous -unsolicitously -unsolicitousness -unsolid -unsolidarity -unsolidifiable -unsolidified -unsolidity -unsolidly -unsolidness -unsolitary -unsolubility -unsoluble -unsolvable -unsolvableness -unsolvably -unsolved -unsomatic -unsomber -unsombre -unsome -unson -unsonable -unsonant -unsonlike -unsonneted -unsonorous -unsonsy -unsoothable -unsoothed -unsoothfast -unsoothing -unsooty -unsophistical -unsophistically -unsophisticate -unsophisticated -unsophisticatedly -unsophisticatedness -unsophistication -unsophomoric -unsordid -unsore -unsorrowed -unsorrowing -unsorry -unsort -unsortable -unsorted -unsorting -unsotted -unsought -unsoul -unsoulful -unsoulfully -unsoulish -unsound -unsoundable -unsoundableness -unsounded -unsounding -unsoundly -unsoundness -unsour -unsoured -unsoused -unsovereign -unsowed -unsown -unspaced -unspacious -unspaded -unspan -unspangled -unspanked -unspanned -unspar -unsparable -unspared -unsparing -unsparingly -unsparingness -unsparkling -unsparred -unsparse -unspatial -unspatiality -unspattered -unspawned -unspayed -unspeak -unspeakability -unspeakable -unspeakableness -unspeakably -unspeaking -unspeared -unspecialized -unspecializing -unspecific -unspecified -unspecifiedly -unspecious -unspecked -unspeckled -unspectacled -unspectacular -unspectacularly -unspecterlike -unspectrelike -unspeculating -unspeculative -unspeculatively -unsped -unspeed -unspeedy -unspeered -unspell -unspellable -unspelled -unspelt -unspendable -unspending -unspent -unspewed -unsphere -unsphered -unsphering -unspiable -unspiced -unspicy -unspied -unspike -unspillable -unspin -unspinsterlike -unspinsterlikeness -unspiral -unspired -unspirit -unspirited -unspiritedly -unspiriting -unspiritual -unspirituality -unspiritualize -unspiritualized -unspiritually -unspiritualness -unspissated -unspit -unspited -unspiteful -unspitted -unsplashed -unsplattered -unsplayed -unspleened -unspleenish -unspleenishly -unsplendid -unspliced -unsplinted -unsplintered -unsplit -unspoil -unspoilable -unspoilableness -unspoilably -unspoiled -unspoken -unspokenly -unsponged -unspongy -unsponsored -unspontaneous -unspontaneously -unspookish -unsported -unsportful -unsporting -unsportive -unsportsmanlike -unsportsmanly -unspot -unspotlighted -unspottable -unspotted -unspottedly -unspottedness -unspoused -unspouselike -unspouted -unsprained -unsprayed -unspread -unsprightliness -unsprightly -unspring -unspringing -unspringlike -unsprinkled -unsprinklered -unsprouted -unsproutful -unsprouting -unspruced -unsprung -unspun -unspurned -unspurred -unspying -unsquandered -unsquarable -unsquare -unsquared -unsquashed -unsqueamish -unsqueezable -unsqueezed -unsquelched -unsquinting -unsquire -unsquired -unsquirelike -unsquirted -unstabbed -unstability -unstable -unstabled -unstableness -unstablished -unstably -unstack -unstacked -unstacker -unstaffed -unstaged -unstaggered -unstaggering -unstagnating -unstagy -unstaid -unstaidly -unstaidness -unstain -unstainable -unstainableness -unstained -unstainedly -unstainedness -unstaled -unstalked -unstalled -unstammering -unstamped -unstampeded -unstanch -unstanchable -unstandard -unstandardized -unstanzaic -unstar -unstarch -unstarched -unstarlike -unstarred -unstarted -unstarting -unstartled -unstarved -unstatable -unstate -unstateable -unstated -unstately -unstatesmanlike -unstatic -unstating -unstation -unstationary -unstationed -unstatistic -unstatistical -unstatued -unstatuesque -unstatutable -unstatutably -unstaunch -unstaunchable -unstaunched -unstavable -unstaveable -unstaved -unstayable -unstayed -unstayedness -unstaying -unsteadfast -unsteadfastly -unsteadfastness -unsteadied -unsteadily -unsteadiness -unsteady -unsteadying -unstealthy -unsteamed -unsteaming -unsteck -unstecked -unsteel -unsteeled -unsteep -unsteeped -unsteepled -unsteered -unstemmable -unstemmed -unstentorian -unstep -unstercorated -unstereotyped -unsterile -unsterilized -unstern -unstethoscoped -unstewardlike -unstewed -unstick -unsticking -unstickingness -unsticky -unstiffen -unstiffened -unstifled -unstigmatized -unstill -unstilled -unstillness -unstilted -unstimulated -unstimulating -unsting -unstinged -unstinging -unstinted -unstintedly -unstinting -unstintingly -unstippled -unstipulated -unstirrable -unstirred -unstirring -unstitch -unstitched -unstitching -unstock -unstocked -unstocking -unstockinged -unstoic -unstoical -unstoically -unstoicize -unstoked -unstoken -unstolen -unstonable -unstone -unstoned -unstoniness -unstony -unstooping -unstop -unstoppable -unstopped -unstopper -unstoppered -unstopple -unstore -unstored -unstoried -unstormed -unstormy -unstout -unstoved -unstow -unstowed -unstraddled -unstrafed -unstraight -unstraightened -unstraightforward -unstraightness -unstrain -unstrained -unstraitened -unstrand -unstranded -unstrange -unstrangered -unstrangled -unstrangulable -unstrap -unstrapped -unstrategic -unstrategically -unstratified -unstraying -unstreaked -unstrength -unstrengthen -unstrengthened -unstrenuous -unstressed -unstressedly -unstressedness -unstretch -unstretched -unstrewed -unstrewn -unstriated -unstricken -unstrictured -unstridulous -unstrike -unstriking -unstring -unstringed -unstringing -unstrip -unstriped -unstripped -unstriving -unstroked -unstrong -unstructural -unstruggling -unstrung -unstubbed -unstubborn -unstuccoed -unstuck -unstudded -unstudied -unstudious -unstuff -unstuffed -unstuffing -unstultified -unstumbling -unstung -unstunned -unstunted -unstupefied -unstupid -unstuttered -unstuttering -unsty -unstyled -unstylish -unstylishly -unstylishness -unsubdivided -unsubduable -unsubduableness -unsubduably -unsubducted -unsubdued -unsubduedly -unsubduedness -unsubject -unsubjectable -unsubjected -unsubjectedness -unsubjection -unsubjective -unsubjectlike -unsubjugate -unsubjugated -unsublimable -unsublimated -unsublimed -unsubmerged -unsubmergible -unsubmerging -unsubmission -unsubmissive -unsubmissively -unsubmissiveness -unsubmitted -unsubmitting -unsubordinate -unsubordinated -unsuborned -unsubpoenaed -unsubscribed -unsubscribing -unsubservient -unsubsided -unsubsidiary -unsubsiding -unsubsidized -unsubstanced -unsubstantial -unsubstantiality -unsubstantialize -unsubstantially -unsubstantialness -unsubstantiate -unsubstantiated -unsubstantiation -unsubstituted -unsubtle -unsubtleness -unsubtlety -unsubtly -unsubtracted -unsubventioned -unsubventionized -unsubversive -unsubvertable -unsubverted -unsubvertive -unsucceedable -unsucceeded -unsucceeding -unsuccess -unsuccessful -unsuccessfully -unsuccessfulness -unsuccessive -unsuccessively -unsuccessiveness -unsuccinct -unsuccorable -unsuccored -unsucculent -unsuccumbing -unsucked -unsuckled -unsued -unsufferable -unsufferableness -unsufferably -unsuffered -unsuffering -unsufficed -unsufficience -unsufficiency -unsufficient -unsufficiently -unsufficing -unsufficingness -unsufflated -unsuffocate -unsuffocated -unsuffocative -unsuffused -unsugared -unsugary -unsuggested -unsuggestedness -unsuggestive -unsuggestiveness -unsuit -unsuitability -unsuitable -unsuitableness -unsuitably -unsuited -unsuiting -unsulky -unsullen -unsulliable -unsullied -unsulliedly -unsulliedness -unsulphonated -unsulphureous -unsulphurized -unsultry -unsummable -unsummarized -unsummed -unsummered -unsummerlike -unsummerly -unsummonable -unsummoned -unsumptuary -unsumptuous -unsun -unsunburned -unsundered -unsung -unsunk -unsunken -unsunned -unsunny -unsuperable -unsuperannuated -unsupercilious -unsuperficial -unsuperfluous -unsuperior -unsuperlative -unsupernatural -unsupernaturalize -unsupernaturalized -unsuperscribed -unsuperseded -unsuperstitious -unsupervised -unsupervisedly -unsupped -unsupplantable -unsupplanted -unsupple -unsuppled -unsupplemented -unsuppliable -unsupplicated -unsupplied -unsupportable -unsupportableness -unsupportably -unsupported -unsupportedly -unsupportedness -unsupporting -unsupposable -unsupposed -unsuppressed -unsuppressible -unsuppressibly -unsuppurated -unsuppurative -unsupreme -unsurcharge -unsurcharged -unsure -unsurfaced -unsurfeited -unsurfeiting -unsurgical -unsurging -unsurmised -unsurmising -unsurmountable -unsurmountableness -unsurmountably -unsurmounted -unsurnamed -unsurpassable -unsurpassableness -unsurpassably -unsurpassed -unsurplice -unsurpliced -unsurprised -unsurprising -unsurrendered -unsurrendering -unsurrounded -unsurveyable -unsurveyed -unsurvived -unsurviving -unsusceptibility -unsusceptible -unsusceptibleness -unsusceptibly -unsusceptive -unsuspectable -unsuspectably -unsuspected -unsuspectedly -unsuspectedness -unsuspectful -unsuspectfulness -unsuspectible -unsuspecting -unsuspectingly -unsuspectingness -unsuspective -unsuspended -unsuspicion -unsuspicious -unsuspiciously -unsuspiciousness -unsustainable -unsustained -unsustaining -unsutured -unswabbed -unswaddle -unswaddled -unswaddling -unswallowable -unswallowed -unswanlike -unswapped -unswarming -unswathable -unswathe -unswathed -unswathing -unswayable -unswayed -unswayedness -unswaying -unswear -unswearing -unsweat -unsweated -unsweating -unsweepable -unsweet -unsweeten -unsweetened -unsweetenedness -unsweetly -unsweetness -unswell -unswelled -unswelling -unsweltered -unswept -unswervable -unswerved -unswerving -unswervingly -unswilled -unswing -unswingled -unswitched -unswivel -unswollen -unswooning -unsworn -unswung -unsyllabic -unsyllabled -unsyllogistical -unsymbolic -unsymbolical -unsymbolically -unsymbolicalness -unsymbolized -unsymmetrical -unsymmetrically -unsymmetricalness -unsymmetrized -unsymmetry -unsympathetic -unsympathetically -unsympathizability -unsympathizable -unsympathized -unsympathizing -unsympathizingly -unsympathy -unsymphonious -unsymptomatic -unsynchronized -unsynchronous -unsyncopated -unsyndicated -unsynonymous -unsyntactical -unsynthetic -unsyringed -unsystematic -unsystematical -unsystematically -unsystematized -unsystematizedly -unsystematizing -unsystemizable -untabernacled -untabled -untabulated -untack -untacked -untacking -untackle -untackled -untactful -untactfully -untactfulness -untagged -untailed -untailorlike -untailorly -untaint -untaintable -untainted -untaintedly -untaintedness -untainting -untakable -untakableness -untakeable -untakeableness -untaken -untaking -untalented -untalkative -untalked -untalking -untall -untallied -untallowed -untamable -untamableness -untame -untamed -untamedly -untamedness -untamely -untameness -untampered -untangential -untangibility -untangible -untangibleness -untangibly -untangle -untangled -untangling -untanned -untantalized -untantalizing -untap -untaped -untapered -untapering -untapestried -untappable -untapped -untar -untarnishable -untarnished -untarred -untarried -untarrying -untartarized -untasked -untasseled -untastable -untaste -untasteable -untasted -untasteful -untastefully -untastefulness -untasting -untasty -untattered -untattooed -untaught -untaughtness -untaunted -untaut -untautological -untawdry -untawed -untax -untaxable -untaxed -untaxing -unteach -unteachable -unteachableness -unteachably -unteacherlike -unteaching -unteam -unteamed -unteaming -untearable -unteased -unteasled -untechnical -untechnicalize -untechnically -untedded -untedious -unteem -unteeming -unteethed -untelegraphed -untell -untellable -untellably -untelling -untemper -untemperamental -untemperate -untemperately -untemperateness -untempered -untempering -untempested -untempestuous -untempled -untemporal -untemporary -untemporizing -untemptability -untemptable -untemptably -untempted -untemptible -untemptibly -untempting -untemptingly -untemptingness -untenability -untenable -untenableness -untenably -untenacious -untenacity -untenant -untenantable -untenantableness -untenanted -untended -untender -untendered -untenderly -untenderness -untenible -untenibleness -untenibly -untense -untent -untentaculate -untented -untentered -untenty -unterminable -unterminableness -unterminably -unterminated -unterminating -unterraced -unterrestrial -unterrible -unterribly -unterrifiable -unterrific -unterrified -unterrifying -unterrorized -untessellated -untestable -untestamentary -untested -untestifying -untether -untethered -untethering -untewed -untextual -unthank -unthanked -unthankful -unthankfully -unthankfulness -unthanking -unthatch -unthatched -unthaw -unthawed -unthawing -untheatric -untheatrical -untheatrically -untheistic -unthematic -untheological -untheologically -untheologize -untheoretic -untheoretical -untheorizable -untherapeutical -unthick -unthicken -unthickened -unthievish -unthink -unthinkability -unthinkable -unthinkableness -unthinkably -unthinker -unthinking -unthinkingly -unthinkingness -unthinned -unthinning -unthirsting -unthirsty -unthistle -untholeable -untholeably -unthorn -unthorny -unthorough -unthought -unthoughted -unthoughtedly -unthoughtful -unthoughtfully -unthoughtfulness -unthoughtlike -unthrall -unthralled -unthrashed -unthread -unthreadable -unthreaded -unthreading -unthreatened -unthreatening -unthreshed -unthrid -unthridden -unthrift -unthriftihood -unthriftily -unthriftiness -unthriftlike -unthrifty -unthrilled -unthrilling -unthriven -unthriving -unthrivingly -unthrivingness -unthrob -unthrone -unthroned -unthronged -unthroning -unthrottled -unthrowable -unthrown -unthrushlike -unthrust -unthumbed -unthumped -unthundered -unthwacked -unthwarted -untiaraed -unticketed -untickled -untidal -untidily -untidiness -untidy -untie -untied -untight -untighten -untightness -until -untile -untiled -untill -untillable -untilled -untilling -untilt -untilted -untilting -untimbered -untimed -untimedness -untimeliness -untimely -untimeous -untimeously -untimesome -untimorous -untin -untinct -untinctured -untine -untinged -untinkered -untinned -untinseled -untinted -untippable -untipped -untippled -untipt -untirability -untirable -untire -untired -untiredly -untiring -untiringly -untissued -untithability -untithable -untithed -untitled -untittering -untitular -unto -untoadying -untoasted -untogaed -untoggle -untoggler -untoiled -untoileted -untoiling -untold -untolerable -untolerableness -untolerably -untolerated -untomb -untombed -untonality -untone -untoned -untongued -untonsured -untooled -untooth -untoothed -untoothsome -untoothsomeness -untop -untopographical -untopped -untopping -untormented -untorn -untorpedoed -untorpid -untorrid -untortuous -untorture -untortured -untossed -untotaled -untotalled -untottering -untouch -untouchability -untouchable -untouchableness -untouchably -untouched -untouchedness -untouching -untough -untoured -untouristed -untoward -untowardliness -untowardly -untowardness -untowered -untown -untownlike -untrace -untraceable -untraceableness -untraceably -untraced -untraceried -untracked -untractability -untractable -untractableness -untractably -untractarian -untractible -untractibleness -untradeable -untraded -untradesmanlike -untrading -untraditional -untraduced -untraffickable -untrafficked -untragic -untragical -untrailed -untrain -untrainable -untrained -untrainedly -untrainedness -untraitored -untraitorous -untrammed -untrammeled -untrammeledness -untramped -untrampled -untrance -untranquil -untranquilized -untranquillize -untranquillized -untransacted -untranscended -untranscendental -untranscribable -untranscribed -untransferable -untransferred -untransfigured -untransfixed -untransformable -untransformed -untransforming -untransfused -untransfusible -untransgressed -untransient -untransitable -untransitive -untransitory -untranslatability -untranslatable -untranslatableness -untranslatably -untranslated -untransmigrated -untransmissible -untransmitted -untransmutable -untransmuted -untransparent -untranspassable -untranspired -untranspiring -untransplanted -untransportable -untransported -untransposed -untransubstantiated -untrappable -untrapped -untrashed -untravelable -untraveled -untraveling -untravellable -untravelling -untraversable -untraversed -untravestied -untreacherous -untread -untreadable -untreading -untreasonable -untreasure -untreasured -untreatable -untreatableness -untreatably -untreated -untreed -untrekked -untrellised -untrembling -untremblingly -untremendous -untremulous -untrenched -untrepanned -untrespassed -untrespassing -untress -untressed -untriable -untribal -untributary -untriced -untrickable -untricked -untried -untrifling -untrig -untrigonometrical -untrill -untrim -untrimmable -untrimmed -untrimmedness -untrinitarian -untripe -untrippable -untripped -untripping -untrite -untriturated -untriumphable -untriumphant -untriumphed -untrochaic -untrod -untrodden -untroddenness -untrolled -untrophied -untropical -untrotted -untroublable -untrouble -untroubled -untroubledly -untroubledness -untroublesome -untroublesomeness -untrounced -untrowed -untruant -untruck -untruckled -untruckling -untrue -untrueness -untruism -untruly -untrumped -untrumpeted -untrumping -untrundled -untrunked -untruss -untrussed -untrusser -untrussing -untrust -untrustably -untrusted -untrustful -untrustiness -untrusting -untrustworthily -untrustworthiness -untrustworthy -untrusty -untruth -untruther -untruthful -untruthfully -untruthfulness -untrying -untubbed -untuck -untucked -untuckered -untucking -untufted -untugged -untumbled -untumefied -untumid -untumultuous -untunable -untunableness -untunably -untune -untuneable -untuneableness -untuneably -untuned -untuneful -untunefully -untunefulness -untuning -untunneled -untupped -unturbaned -unturbid -unturbulent -unturf -unturfed -unturgid -unturn -unturnable -unturned -unturning -unturpentined -unturreted -untusked -untutelar -untutored -untutoredly -untutoredness -untwilled -untwinable -untwine -untwineable -untwined -untwining -untwinkling -untwinned -untwirl -untwirled -untwirling -untwist -untwisted -untwister -untwisting -untwitched -untying -untypical -untypically -untyrannic -untyrannical -untyrantlike -untz -unubiquitous -unugly -unulcerated -unultra -unumpired -ununanimity -ununanimous -ununanimously -ununderstandable -ununderstandably -ununderstanding -ununderstood -unundertaken -unundulatory -ununifiable -ununified -ununiform -ununiformed -ununiformity -ununiformly -ununiformness -ununitable -ununitableness -ununitably -ununited -ununiting -ununiversity -ununiversitylike -unupbraiding -unupbraidingly -unupholstered -unupright -unuprightly -unuprightness -unupset -unupsettable -unurban -unurbane -unurged -unurgent -unurging -unurn -unurned -unusable -unusableness -unusably -unuse -unused -unusedness -unuseful -unusefully -unusefulness -unushered -unusual -unusuality -unusually -unusualness -unusurious -unusurped -unusurping -unutilizable -unutterability -unutterable -unutterableness -unutterably -unuttered -unuxorial -unuxorious -unvacant -unvaccinated -unvacillating -unvailable -unvain -unvaleted -unvaletudinary -unvaliant -unvalid -unvalidated -unvalidating -unvalidity -unvalidly -unvalidness -unvalorous -unvaluable -unvaluableness -unvaluably -unvalue -unvalued -unvamped -unvanishing -unvanquishable -unvanquished -unvantaged -unvaporized -unvariable -unvariableness -unvariably -unvariant -unvaried -unvariedly -unvariegated -unvarnished -unvarnishedly -unvarnishedness -unvarying -unvaryingly -unvaryingness -unvascular -unvassal -unvatted -unvaulted -unvaulting -unvaunted -unvaunting -unvauntingly -unveering -unveil -unveiled -unveiledly -unveiledness -unveiler -unveiling -unveilment -unveined -unvelvety -unvendable -unvendableness -unvended -unvendible -unvendibleness -unveneered -unvenerable -unvenerated -unvenereal -unvenged -unveniable -unvenial -unvenom -unvenomed -unvenomous -unventable -unvented -unventilated -unventured -unventurous -unvenued -unveracious -unveracity -unverbalized -unverdant -unverdured -unveridical -unverifiable -unverifiableness -unverifiably -unverified -unverifiedness -unveritable -unverity -unvermiculated -unverminous -unvernicular -unversatile -unversed -unversedly -unversedness -unversified -unvertical -unvessel -unvesseled -unvest -unvested -unvetoed -unvexed -unviable -unvibrated -unvibrating -unvicar -unvicarious -unvicariously -unvicious -unvictimized -unvictorious -unvictualed -unvictualled -unviewable -unviewed -unvigilant -unvigorous -unvigorously -unvilified -unvillaged -unvindicated -unvindictive -unvindictively -unvindictiveness -unvinous -unvintaged -unviolable -unviolated -unviolenced -unviolent -unviolined -unvirgin -unvirginal -unvirginlike -unvirile -unvirility -unvirtue -unvirtuous -unvirtuously -unvirtuousness -unvirulent -unvisible -unvisibleness -unvisibly -unvision -unvisionary -unvisioned -unvisitable -unvisited -unvisor -unvisored -unvisualized -unvital -unvitalized -unvitalness -unvitiated -unvitiatedly -unvitiatedness -unvitrescibility -unvitrescible -unvitrifiable -unvitrified -unvitriolized -unvituperated -unvivacious -unvivid -unvivified -unvizard -unvizarded -unvocal -unvocalized -unvociferous -unvoice -unvoiced -unvoiceful -unvoicing -unvoidable -unvoided -unvolatile -unvolatilize -unvolatilized -unvolcanic -unvolitioned -unvoluminous -unvoluntarily -unvoluntariness -unvoluntary -unvolunteering -unvoluptuous -unvomited -unvoracious -unvote -unvoted -unvoting -unvouched -unvouchedly -unvouchedness -unvouchsafed -unvowed -unvoweled -unvoyageable -unvoyaging -unvulcanized -unvulgar -unvulgarize -unvulgarized -unvulgarly -unvulnerable -unwadable -unwadded -unwadeable -unwaded -unwading -unwafted -unwaged -unwagered -unwaggable -unwaggably -unwagged -unwailed -unwailing -unwainscoted -unwaited -unwaiting -unwaked -unwakeful -unwakefulness -unwakened -unwakening -unwaking -unwalkable -unwalked -unwalking -unwall -unwalled -unwallet -unwallowed -unwan -unwandered -unwandering -unwaning -unwanted -unwanton -unwarbled -unware -unwarely -unwareness -unwarily -unwariness -unwarlike -unwarlikeness -unwarm -unwarmable -unwarmed -unwarming -unwarn -unwarned -unwarnedly -unwarnedness -unwarnished -unwarp -unwarpable -unwarped -unwarping -unwarrant -unwarrantability -unwarrantable -unwarrantableness -unwarrantably -unwarranted -unwarrantedly -unwarrantedness -unwary -unwashable -unwashed -unwashedness -unwassailing -unwastable -unwasted -unwasteful -unwastefully -unwasting -unwastingly -unwatchable -unwatched -unwatchful -unwatchfully -unwatchfulness -unwatching -unwater -unwatered -unwaterlike -unwatermarked -unwatery -unwattled -unwaved -unwaverable -unwavered -unwavering -unwaveringly -unwaving -unwax -unwaxed -unwayed -unwayward -unweaken -unweakened -unweal -unwealsomeness -unwealthy -unweaned -unweapon -unweaponed -unwearable -unweariability -unweariable -unweariableness -unweariably -unwearied -unweariedly -unweariedness -unwearily -unweariness -unwearing -unwearisome -unwearisomeness -unweary -unwearying -unwearyingly -unweathered -unweatherly -unweatherwise -unweave -unweaving -unweb -unwebbed -unwebbing -unwed -unwedded -unweddedly -unweddedness -unwedge -unwedgeable -unwedged -unweeded -unweel -unweelness -unweened -unweeping -unweeting -unweetingly -unweft -unweighable -unweighed -unweighing -unweight -unweighted -unweighty -unwelcome -unwelcomed -unwelcomely -unwelcomeness -unweld -unweldable -unwelded -unwell -unwellness -unwelted -unwept -unwestern -unwesternized -unwet -unwettable -unwetted -unwheedled -unwheel -unwheeled -unwhelmed -unwhelped -unwhetted -unwhig -unwhiglike -unwhimsical -unwhining -unwhip -unwhipped -unwhirled -unwhisked -unwhiskered -unwhisperable -unwhispered -unwhispering -unwhistled -unwhite -unwhited -unwhitened -unwhitewashed -unwholesome -unwholesomely -unwholesomeness -unwidened -unwidowed -unwield -unwieldable -unwieldily -unwieldiness -unwieldly -unwieldy -unwifed -unwifelike -unwifely -unwig -unwigged -unwild -unwilily -unwiliness -unwill -unwilled -unwillful -unwillfully -unwillfulness -unwilling -unwillingly -unwillingness -unwilted -unwilting -unwily -unwincing -unwincingly -unwind -unwindable -unwinding -unwindingly -unwindowed -unwindy -unwingable -unwinged -unwinking -unwinkingly -unwinnable -unwinning -unwinnowed -unwinsome -unwinter -unwintry -unwiped -unwire -unwired -unwisdom -unwise -unwisely -unwiseness -unwish -unwished -unwishful -unwishing -unwist -unwistful -unwitch -unwitched -unwithdrawable -unwithdrawing -unwithdrawn -unwitherable -unwithered -unwithering -unwithheld -unwithholden -unwithholding -unwithstanding -unwithstood -unwitless -unwitnessed -unwitted -unwittily -unwitting -unwittingly -unwittingness -unwitty -unwive -unwived -unwoeful -unwoful -unwoman -unwomanish -unwomanize -unwomanized -unwomanlike -unwomanliness -unwomanly -unwomb -unwon -unwonder -unwonderful -unwondering -unwonted -unwontedly -unwontedness -unwooded -unwooed -unwoof -unwooly -unwordable -unwordably -unwordily -unwordy -unwork -unworkability -unworkable -unworkableness -unworkably -unworked -unworkedness -unworker -unworking -unworkmanlike -unworkmanly -unworld -unworldliness -unworldly -unwormed -unwormy -unworn -unworried -unworriedly -unworriedness -unworshiped -unworshipful -unworshiping -unworshipped -unworshipping -unworth -unworthily -unworthiness -unworthy -unwotting -unwound -unwoundable -unwoundableness -unwounded -unwoven -unwrangling -unwrap -unwrapped -unwrapper -unwrapping -unwrathful -unwrathfully -unwreaked -unwreathe -unwreathed -unwreathing -unwrecked -unwrench -unwrenched -unwrested -unwrestedly -unwresting -unwrestled -unwretched -unwriggled -unwrinkle -unwrinkleable -unwrinkled -unwrit -unwritable -unwrite -unwriting -unwritten -unwronged -unwrongful -unwrought -unwrung -unyachtsmanlike -unyeaned -unyearned -unyearning -unyielded -unyielding -unyieldingly -unyieldingness -unyoke -unyoked -unyoking -unyoung -unyouthful -unyouthfully -unze -unzealous -unzealously -unzealousness -unzen -unzephyrlike -unzone -unzoned -up -upaisle -upaithric -upalley -upalong -upanishadic -upapurana -uparch -uparching -uparise -uparm -uparna -upas -upattic -upavenue -upbank -upbar -upbay -upbear -upbearer -upbeat -upbelch -upbelt -upbend -upbid -upbind -upblacken -upblast -upblaze -upblow -upboil -upbolster -upbolt -upboost -upborne -upbotch -upboulevard -upbound -upbrace -upbraid -upbraider -upbraiding -upbraidingly -upbray -upbreak -upbred -upbreed -upbreeze -upbrighten -upbrim -upbring -upbristle -upbroken -upbrook -upbrought -upbrow -upbubble -upbuild -upbuilder -upbulging -upbuoy -upbuoyance -upburn -upburst -upbuy -upcall -upcanal -upcanyon -upcarry -upcast -upcatch -upcaught -upchamber -upchannel -upchariot -upchimney -upchoke -upchuck -upcity -upclimb -upclose -upcloser -upcoast -upcock -upcoil -upcolumn -upcome -upcoming -upconjure -upcountry -upcourse -upcover -upcrane -upcrawl -upcreek -upcreep -upcrop -upcrowd -upcry -upcurl -upcurrent -upcurve -upcushion -upcut -updart -update -updeck -updelve -updive -updo -updome -updraft -updrag -updraw -updrink -updry -upeat -upend -upeygan -upfeed -upfield -upfill -upfingered -upflame -upflare -upflash -upflee -upflicker -upfling -upfloat -upflood -upflow -upflower -upflung -upfly -upfold -upfollow -upframe -upfurl -upgale -upgang -upgape -upgather -upgaze -upget -upgird -upgirt -upgive -upglean -upglide -upgo -upgorge -upgrade -upgrave -upgrow -upgrowth -upgully -upgush -uphand -uphang -upharbor -upharrow -uphasp -upheal -upheap -uphearted -upheaval -upheavalist -upheave -upheaven -upheld -uphelm -uphelya -upher -uphill -uphillward -uphoard -uphoist -uphold -upholden -upholder -upholster -upholstered -upholsterer -upholsteress -upholsterous -upholstery -upholsterydom -upholstress -uphung -uphurl -upisland -upjerk -upjet -upkeep -upkindle -upknell -upknit -upla -upladder -uplaid -uplake -upland -uplander -uplandish -uplane -uplay -uplead -upleap -upleg -uplick -uplift -upliftable -uplifted -upliftedly -upliftedness -uplifter -uplifting -upliftingly -upliftingness -upliftitis -upliftment -uplight -uplimb -uplimber -upline -uplock -uplong -uplook -uplooker -uploom -uploop -uplying -upmaking -upmast -upmix -upmost -upmount -upmountain -upmove -upness -upo -upon -uppard -uppent -upper -upperch -uppercut -upperer -upperest -upperhandism -uppermore -uppermost -uppers -uppertendom -uppile -upping -uppish -uppishly -uppishness -uppity -upplough -upplow -uppluck -uppoint -uppoise -uppop -uppour -uppowoc -upprick -upprop -uppuff -uppull -uppush -upquiver -upraisal -upraise -upraiser -upreach -uprear -uprein -uprend -uprender -uprest -uprestore -uprid -upridge -upright -uprighteous -uprighteously -uprighteousness -uprighting -uprightish -uprightly -uprightness -uprights -uprip -uprisal -uprise -uprisement -uprisen -upriser -uprising -uprist -uprive -upriver -uproad -uproar -uproariness -uproarious -uproariously -uproariousness -uproom -uproot -uprootal -uprooter -uprose -uprouse -uproute -uprun -uprush -upsaddle -upscale -upscrew -upscuddle -upseal -upseek -upseize -upsend -upset -upsetment -upsettable -upsettal -upsetted -upsetter -upsetting -upsettingly -upsey -upshaft -upshear -upsheath -upshoot -upshore -upshot -upshoulder -upshove -upshut -upside -upsides -upsighted -upsiloid -upsilon -upsilonism -upsit -upsitten -upsitting -upslant -upslip -upslope -upsmite -upsnatch -upsoak -upsoar -upsolve -upspeak -upspear -upspeed -upspew -upspin -upspire -upsplash -upspout -upspread -upspring -upsprinkle -upsprout -upspurt -upstaff -upstage -upstair -upstairs -upstamp -upstand -upstander -upstanding -upstare -upstart -upstartism -upstartle -upstartness -upstate -upstater -upstaunch -upstay -upsteal -upsteam -upstem -upstep -upstick -upstir -upstraight -upstream -upstreamward -upstreet -upstretch -upstrike -upstrive -upstroke -upstruggle -upsuck -upsun -upsup -upsurge -upsurgence -upswallow -upswarm -upsway -upsweep -upswell -upswing -uptable -uptake -uptaker -uptear -uptemper -uptend -upthrow -upthrust -upthunder -uptide -uptie -uptill -uptilt -uptorn -uptoss -uptower -uptown -uptowner -uptrace -uptrack -uptrail -uptrain -uptree -uptrend -uptrill -uptrunk -uptruss -uptube -uptuck -upturn -uptwined -uptwist -upupoid -upvalley -upvomit -upwaft -upwall -upward -upwardly -upwardness -upwards -upwarp -upwax -upway -upways -upwell -upwent -upwheel -upwhelm -upwhir -upwhirl -upwind -upwith -upwork -upwound -upwrap -upwreathe -upwrench -upwring -upwrought -upyard -upyoke -ur -ura -urachal -urachovesical -urachus -uracil -uraemic -uraeus -ural -urali -uraline -uralite -uralitic -uralitization -uralitize -uralium -uramido -uramil -uramilic -uramino -uran -uranalysis -uranate -uranic -uranidine -uraniferous -uraniid -uranin -uranine -uraninite -uranion -uraniscochasma -uraniscoplasty -uraniscoraphy -uraniscorrhaphy -uranism -uranist -uranite -uranitic -uranium -uranocircite -uranographer -uranographic -uranographical -uranographist -uranography -uranolatry -uranolite -uranological -uranology -uranometria -uranometrical -uranometry -uranophane -uranophotography -uranoplastic -uranoplasty -uranoplegia -uranorrhaphia -uranorrhaphy -uranoschisis -uranoschism -uranoscope -uranoscopia -uranoscopic -uranoscopy -uranospathite -uranosphaerite -uranospinite -uranostaphyloplasty -uranostaphylorrhaphy -uranotantalite -uranothallite -uranothorite -uranotil -uranous -uranyl -uranylic -urao -urare -urari -urase -urataemia -urate -uratemia -uratic -uratoma -uratosis -uraturia -urazine -urazole -urbacity -urbainite -urban -urbane -urbanely -urbaneness -urbanism -urbanist -urbanite -urbanity -urbanization -urbanize -urbarial -urbian -urbic -urbicolous -urbification -urbify -urbinate -urceiform -urceolar -urceolate -urceole -urceoli -urceolus -urceus -urchin -urchiness -urchinlike -urchinly -urd -urde -urdee -ure -urea -ureal -ureameter -ureametry -urease -urechitin -urechitoxin -uredema -uredine -uredineal -uredineous -uredinia -uredinial -urediniospore -urediniosporic -uredinium -uredinoid -uredinologist -uredinology -uredinous -uredo -uredosorus -uredospore -uredosporic -uredosporiferous -uredosporous -uredostage -ureic -ureid -ureide -ureido -uremia -uremic -urent -ureometer -ureometry -ureosecretory -uresis -uretal -ureter -ureteral -ureteralgia -uretercystoscope -ureterectasia -ureterectasis -ureterectomy -ureteric -ureteritis -ureterocele -ureterocervical -ureterocolostomy -ureterocystanastomosis -ureterocystoscope -ureterocystostomy -ureterodialysis -ureteroenteric -ureteroenterostomy -ureterogenital -ureterogram -ureterograph -ureterography -ureterointestinal -ureterolith -ureterolithiasis -ureterolithic -ureterolithotomy -ureterolysis -ureteronephrectomy -ureterophlegma -ureteroplasty -ureteroproctostomy -ureteropyelitis -ureteropyelogram -ureteropyelography -ureteropyelonephritis -ureteropyelostomy -ureteropyosis -ureteroradiography -ureterorectostomy -ureterorrhagia -ureterorrhaphy -ureterosalpingostomy -ureterosigmoidostomy -ureterostegnosis -ureterostenoma -ureterostenosis -ureterostoma -ureterostomy -ureterotomy -ureterouteral -ureterovaginal -ureterovesical -urethan -urethane -urethra -urethrae -urethragraph -urethral -urethralgia -urethrameter -urethrascope -urethratome -urethratresia -urethrectomy -urethremphraxis -urethreurynter -urethrism -urethritic -urethritis -urethroblennorrhea -urethrobulbar -urethrocele -urethrocystitis -urethrogenital -urethrogram -urethrograph -urethrometer -urethropenile -urethroperineal -urethrophyma -urethroplastic -urethroplasty -urethroprostatic -urethrorectal -urethrorrhagia -urethrorrhaphy -urethrorrhea -urethrorrhoea -urethroscope -urethroscopic -urethroscopical -urethroscopy -urethrosexual -urethrospasm -urethrostaxis -urethrostenosis -urethrostomy -urethrotome -urethrotomic -urethrotomy -urethrovaginal -urethrovesical -urethylan -uretic -ureylene -urf -urfirnis -urge -urgence -urgency -urgent -urgently -urgentness -urger -urging -urgingly -urheen -urial -uric -uricacidemia -uricaciduria -uricaemia -uricaemic -uricemia -uricemic -uricolysis -uricolytic -uridrosis -urinaemia -urinal -urinalist -urinalysis -urinant -urinarium -urinary -urinate -urination -urinative -urinator -urine -urinemia -uriniferous -uriniparous -urinocryoscopy -urinogenital -urinogenitary -urinogenous -urinologist -urinology -urinomancy -urinometer -urinometric -urinometry -urinoscopic -urinoscopist -urinoscopy -urinose -urinosexual -urinous -urinousness -urite -urlar -urled -urling -urluch -urman -urn -urna -urnae -urnal -urnflower -urnful -urning -urningism -urnism -urnlike -urnmaker -uroacidimeter -uroazotometer -urobenzoic -urobilin -urobilinemia -urobilinogen -urobilinogenuria -urobilinuria -urocanic -urocele -urocerid -urochloralic -urochord -urochordal -urochordate -urochrome -urochromogen -urocyanogen -urocyst -urocystic -urocystitis -urodaeum -urodelan -urodele -urodelous -urodialysis -urodynia -uroedema -uroerythrin -urofuscohematin -urogaster -urogastric -urogenic -urogenital -urogenitary -urogenous -uroglaucin -urogram -urography -urogravimeter -urohematin -urohyal -urolagnia -uroleucic -uroleucinic -urolith -urolithiasis -urolithic -urolithology -urologic -urological -urologist -urology -urolutein -urolytic -uromancy -uromantia -uromantist -uromelanin -uromelus -uromere -uromeric -urometer -uronephrosis -uronic -uronology -uropatagium -urophanic -urophanous -urophein -urophthisis -uroplania -uropod -uropodal -uropodous -uropoetic -uropoiesis -uropoietic -uroporphyrin -uropsile -uroptysis -uropygial -uropygium -uropyloric -urorosein -urorrhagia -urorrhea -urorubin -urosaccharometry -urosacral -uroschesis -uroscopic -uroscopist -uroscopy -urosepsis -uroseptic -urosis -urosomatic -urosome -urosomite -urosomitic -urostea -urostealith -urostegal -urostege -urostegite -urosteon -urosternite -urosthene -urosthenic -urostylar -urostyle -urotoxia -urotoxic -urotoxicity -urotoxin -urotoxy -uroxanate -uroxanic -uroxanthin -uroxin -urradhus -urrhodin -urrhodinic -ursal -ursicidal -ursicide -ursiform -ursigram -ursine -ursoid -ursolic -urson -ursone -ursuk -urtica -urticaceous -urticant -urticaria -urticarial -urticarious -urticate -urticating -urtication -urticose -urtite -urubu -urucu -urucuri -uruisg -urunday -urus -urushi -urushic -urushinic -urushiol -urushiye -urva -us -usability -usable -usableness -usage -usager -usance -usar -usara -usaron -usation -use -used -usedly -usedness -usednt -usee -useful -usefullish -usefully -usefulness -usehold -useless -uselessly -uselessness -usent -user -ush -ushabti -ushabtiu -usher -usherance -usherdom -usherer -usheress -usherette -usherian -usherism -usherless -ushership -usings -usitate -usitative -usnea -usneaceous -usneoid -usnic -usninic -usque -usquebaugh -usself -ussels -usselven -ussingite -ust -uster -ustilaginaceous -ustilagineous -ustion -ustorious -ustulate -ustulation -usual -usualism -usually -usualness -usuary -usucapient -usucapion -usucapionary -usucapt -usucaptable -usucaption -usucaptor -usufruct -usufructuary -usure -usurer -usurerlike -usuress -usurious -usuriously -usuriousness -usurp -usurpation -usurpative -usurpatively -usurpatory -usurpature -usurpedly -usurper -usurpership -usurping -usurpingly -usurpment -usurpor -usurpress -usury -usward -uswards -ut -uta -utahite -utai -utas -utch -utchy -utees -utensil -uteralgia -uterectomy -uteri -uterine -uteritis -uteroabdominal -uterocele -uterocervical -uterocystotomy -uterofixation -uterogestation -uterogram -uterography -uterointestinal -uterolith -uterology -uteromania -uterometer -uteroovarian -uteroparietal -uteropelvic -uteroperitoneal -uteropexia -uteropexy -uteroplacental -uteroplasty -uterosacral -uterosclerosis -uteroscope -uterotomy -uterotonic -uterotubal -uterovaginal -uteroventral -uterovesical -uterus -utfangenethef -utfangethef -utfangthef -utfangthief -utick -utile -utilitarian -utilitarianism -utilitarianist -utilitarianize -utilitarianly -utility -utilizable -utilization -utilize -utilizer -utinam -utmost -utmostness -utopia -utopian -utopianism -utopianist -utopianizer -utopiast -utopism -utopist -utopistic -utopographer -utraquist -utraquistic -utricle -utricul -utricular -utriculate -utriculiferous -utriculiform -utriculitis -utriculoid -utriculoplastic -utriculoplasty -utriculosaccular -utriculose -utriculus -utriform -utrubi -utrum -utsuk -utter -utterability -utterable -utterableness -utterance -utterancy -utterer -utterless -utterly -uttermost -utterness -utu -utum -uturuncu -uva -uval -uvalha -uvanite -uvarovite -uvate -uvea -uveal -uveitic -uveitis -uveous -uvic -uvid -uviol -uvitic -uvitinic -uvito -uvitonic -uvrou -uvula -uvulae -uvular -uvularly -uvulitis -uvuloptosis -uvulotome -uvulotomy -uvver -uxorial -uxoriality -uxorially -uxoricidal -uxoricide -uxorious -uxoriously -uxoriousness -uzan -uzara -uzarin -uzaron -v -vaagmer -vaalite -vacabond -vacancy -vacant -vacanthearted -vacantheartedness -vacantly -vacantness -vacantry -vacatable -vacate -vacation -vacational -vacationer -vacationist -vacationless -vacatur -vaccary -vaccenic -vaccicide -vaccigenous -vaccina -vaccinable -vaccinal -vaccinate -vaccination -vaccinationist -vaccinator -vaccinatory -vaccine -vaccinee -vaccinella -vaccinia -vacciniaceous -vaccinial -vaccinifer -vacciniform -vacciniola -vaccinist -vaccinium -vaccinization -vaccinogenic -vaccinogenous -vaccinoid -vaccinophobia -vaccinotherapy -vache -vachette -vacillancy -vacillant -vacillate -vacillating -vacillatingly -vacillation -vacillator -vacillatory -vacoa -vacona -vacoua -vacouf -vacual -vacuate -vacuation -vacuefy -vacuist -vacuity -vacuolar -vacuolary -vacuolate -vacuolated -vacuolation -vacuole -vacuolization -vacuome -vacuometer -vacuous -vacuously -vacuousness -vacuum -vacuuma -vacuumize -vade -vadimonium -vadimony -vadium -vadose -vady -vag -vagabond -vagabondage -vagabondager -vagabondia -vagabondish -vagabondism -vagabondismus -vagabondize -vagabondizer -vagabondry -vagal -vagarian -vagarious -vagariously -vagarish -vagarisome -vagarist -vagaristic -vagarity -vagary -vagas -vage -vagiform -vagile -vagina -vaginal -vaginalectomy -vaginaless -vaginalitis -vaginant -vaginate -vaginated -vaginectomy -vaginervose -vaginicoline -vaginicolous -vaginiferous -vaginipennate -vaginismus -vaginitis -vaginoabdominal -vaginocele -vaginodynia -vaginofixation -vaginolabial -vaginometer -vaginomycosis -vaginoperineal -vaginoperitoneal -vaginopexy -vaginoplasty -vaginoscope -vaginoscopy -vaginotome -vaginotomy -vaginovesical -vaginovulvar -vaginula -vaginulate -vaginule -vagitus -vagoaccessorius -vagodepressor -vagoglossopharyngeal -vagogram -vagolysis -vagosympathetic -vagotomize -vagotomy -vagotonia -vagotonic -vagotropic -vagotropism -vagrance -vagrancy -vagrant -vagrantism -vagrantize -vagrantlike -vagrantly -vagrantness -vagrate -vagrom -vague -vaguely -vagueness -vaguish -vaguity -vagulous -vagus -vahine -vail -vailable -vain -vainful -vainglorious -vaingloriously -vaingloriousness -vainglory -vainly -vainness -vair -vairagi -vaire -vairy -vaivode -vajra -vajrasana -vakass -vakia -vakil -vakkaliga -valance -valanced -valanche -valbellite -vale -valediction -valedictorian -valedictorily -valedictory -valence -valencianite -valency -valent -valentine -valentinite -valeral -valeraldehyde -valeramide -valerate -valerian -valerianaceous -valerianate -valeric -valerin -valerolactone -valerone -valeryl -valerylene -valet -valeta -valetage -valetdom -valethood -valetism -valetry -valetudinarian -valetudinarianism -valetudinariness -valetudinarist -valetudinarium -valetudinary -valeur -valeward -valgoid -valgus -valhall -vali -valiance -valiancy -valiant -valiantly -valiantness -valid -validate -validation -validatory -validification -validity -validly -validness -valine -valise -valiseful -valiship -vall -vallancy -vallar -vallary -vallate -vallated -vallation -vallecula -vallecular -valleculate -vallevarite -valley -valleyful -valleyite -valleylet -valleylike -valleyward -valleywise -vallicula -vallicular -vallidom -vallis -vallisneriaceous -vallum -valonia -valoniaceous -valor -valorization -valorize -valorous -valorously -valorousness -valse -valsoid -valuable -valuableness -valuably -valuate -valuation -valuational -valuator -value -valued -valueless -valuelessness -valuer -valuta -valva -valval -valvate -valve -valved -valveless -valvelet -valvelike -valveman -valviferous -valviform -valvotomy -valvula -valvular -valvulate -valvule -valvulitis -valvulotome -valvulotomy -valyl -valylene -vambrace -vambraced -vamfont -vammazsa -vamoose -vamp -vamped -vamper -vamphorn -vampire -vampireproof -vampiric -vampirish -vampirism -vampirize -vamplate -vampproof -van -vanadate -vanadiate -vanadic -vanadiferous -vanadinite -vanadium -vanadosilicate -vanadous -vanadyl -vanaprastha -vancourier -vandalish -vandalism -vandalistic -vandalization -vandalize -vandalroot -vane -vaned -vaneless -vanelike -vanessian -vanfoss -vang -vangee -vangeli -vanglo -vanguard -vanilla -vanillal -vanillaldehyde -vanillate -vanille -vanillery -vanillic -vanillin -vanillinic -vanillism -vanilloes -vanillon -vanilloyl -vanillyl -vanish -vanisher -vanishing -vanishingly -vanishment -vanitarianism -vanitied -vanity -vanjarrah -vanman -vanmost -vanner -vannerman -vannet -vanquish -vanquishable -vanquisher -vanquishment -vansire -vantage -vantageless -vantbrace -vantbrass -vanward -vapid -vapidism -vapidity -vapidly -vapidness -vapocauterization -vapographic -vapography -vapor -vaporability -vaporable -vaporarium -vaporary -vaporate -vapored -vaporer -vaporescence -vaporescent -vaporiferous -vaporiferousness -vaporific -vaporiform -vaporimeter -vaporing -vaporingly -vaporish -vaporishness -vaporium -vaporizable -vaporization -vaporize -vaporizer -vaporless -vaporlike -vaporograph -vaporographic -vaporose -vaporoseness -vaporosity -vaporous -vaporously -vaporousness -vaportight -vapory -vapulary -vapulate -vapulation -vapulatory -vara -varahan -varan -varanid -vardapet -vardy -vare -varec -vareheaded -vareuse -vargueno -vari -variability -variable -variableness -variably -variance -variancy -variant -variate -variation -variational -variationist -variatious -variative -variatively -variator -varical -varicated -varication -varicella -varicellar -varicellate -varicellation -varicelliform -varicelloid -varicellous -varices -variciform -varicoblepharon -varicocele -varicoid -varicolored -varicolorous -varicose -varicosed -varicoseness -varicosis -varicosity -varicotomy -varicula -varied -variedly -variegate -variegated -variegation -variegator -varier -varietal -varietally -varietism -varietist -variety -variform -variformed -variformity -variformly -varigradation -variocoupler -variola -variolar -variolate -variolation -variole -variolic -varioliform -variolite -variolitic -variolitization -variolization -varioloid -variolous -variolovaccine -variolovaccinia -variometer -variorum -variotinted -various -variously -variousness -variscite -varisse -varix -varlet -varletaille -varletess -varletry -varletto -varment -varna -varnashrama -varnish -varnished -varnisher -varnishing -varnishlike -varnishment -varnishy -varnpliktige -varnsingite -varsha -varsity -varsoviana -varus -varve -varved -vary -varyingly -vas -vasa -vasal -vascular -vascularity -vascularization -vascularize -vascularly -vasculated -vasculature -vasculiferous -vasculiform -vasculitis -vasculogenesis -vasculolymphatic -vasculomotor -vasculose -vasculum -vase -vasectomize -vasectomy -vaseful -vaselet -vaselike -vasemaker -vasemaking -vasewise -vasework -vashegyite -vasicentric -vasicine -vasifactive -vasiferous -vasiform -vasoconstricting -vasoconstriction -vasoconstrictive -vasoconstrictor -vasocorona -vasodentinal -vasodentine -vasodilatation -vasodilatin -vasodilating -vasodilation -vasodilator -vasoepididymostomy -vasofactive -vasoformative -vasoganglion -vasohypertonic -vasohypotonic -vasoinhibitor -vasoinhibitory -vasoligation -vasoligature -vasomotion -vasomotor -vasomotorial -vasomotoric -vasomotory -vasoneurosis -vasoparesis -vasopressor -vasopuncture -vasoreflex -vasorrhaphy -vasosection -vasospasm -vasospastic -vasostimulant -vasostomy -vasotomy -vasotonic -vasotribe -vasotripsy -vasotrophic -vasovesiculectomy -vasquine -vassal -vassalage -vassaldom -vassaless -vassalic -vassalism -vassality -vassalize -vassalless -vassalry -vassalship -vast -vastate -vastation -vastidity -vastily -vastiness -vastitude -vastity -vastly -vastness -vasty -vasu -vat -vatful -vatic -vatically -vaticanal -vaticanic -vaticanical -vaticide -vaticinal -vaticinant -vaticinate -vaticination -vaticinator -vaticinatory -vaticinatress -vaticinatrix -vatmaker -vatmaking -vatman -vatter -vau -vaucheriaceous -vaudeville -vaudevillian -vaudevillist -vaudy -vaugnerite -vault -vaulted -vaultedly -vaulter -vaulting -vaultlike -vaulty -vaunt -vauntage -vaunted -vaunter -vauntery -vauntful -vauntiness -vaunting -vauntingly -vauntmure -vaunty -vauquelinite -vauxite -vavasor -vavasory -vaward -veal -vealer -vealiness -veallike -vealskin -vealy -vectigal -vection -vectis -vectograph -vectographic -vector -vectorial -vectorially -vecture -vedana -vedette -vedika -vedro -veduis -vee -veen -veep -veer -veerable -veeringly -veery -vegasite -vegeculture -vegetability -vegetable -vegetablelike -vegetablewise -vegetablize -vegetably -vegetal -vegetalcule -vegetality -vegetant -vegetarian -vegetarianism -vegetate -vegetation -vegetational -vegetationless -vegetative -vegetatively -vegetativeness -vegete -vegeteness -vegetism -vegetive -vegetivorous -vegetoalkali -vegetoalkaline -vegetoalkaloid -vegetoanimal -vegetobituminous -vegetocarbonaceous -vegetomineral -vehemence -vehemency -vehement -vehemently -vehicle -vehicular -vehicularly -vehiculary -vehiculate -vehiculation -vehiculatory -vei -veigle -veil -veiled -veiledly -veiledness -veiler -veiling -veilless -veillike -veilmaker -veilmaking -veily -vein -veinage -veinal -veinbanding -veined -veiner -veinery -veininess -veining -veinless -veinlet -veinous -veinstone -veinstuff -veinule -veinulet -veinwise -veinwork -veiny -vejoces -vela -velal -velamen -velamentous -velamentum -velar -velardenite -velaric -velarium -velarize -velary -velate -velated -velation -velatura -veldcraft -veldman -veldschoen -veldt -veldtschoen -velellidous -velic -veliferous -veliform -veliger -veligerous -velitation -vell -vellala -velleda -velleity -vellicate -vellication -vellicative -vellinch -vellon -vellosine -velloziaceous -vellum -vellumy -velo -velociman -velocimeter -velocious -velociously -velocipedal -velocipede -velocipedean -velocipedic -velocitous -velocity -velodrome -velometer -velours -veloutine -velte -velum -velumen -velure -velutinous -velveret -velvet -velvetbreast -velveted -velveteen -velveteened -velvetiness -velveting -velvetleaf -velvetlike -velvetry -velvetseed -velvetweed -velvetwork -velvety -venada -venal -venality -venalization -venalize -venally -venalness -venanzite -venatic -venatical -venatically -venation -venational -venator -venatorial -venatorious -venatory -vencola -vend -vendace -vendee -vender -vendetta -vendettist -vendibility -vendible -vendibleness -vendibly -vendicate -vending -venditate -venditation -vendition -venditor -vendor -vendue -veneer -veneerer -veneering -venefical -veneficious -veneficness -veneficous -venenate -venenation -venene -veneniferous -venenific -venenosalivary -venenous -venenousness -venepuncture -venerability -venerable -venerableness -venerably -veneracean -veneraceous -veneral -venerance -venerant -venerate -veneration -venerational -venerative -veneratively -venerativeness -venerator -venereal -venerealness -venereologist -venereology -venerer -venerial -veneriform -venery -venesect -venesection -venesector -venesia -venezolano -vengeable -vengeance -vengeant -vengeful -vengefully -vengefulness -vengeously -venger -venial -veniality -venially -venialness -venie -venin -veniplex -venipuncture -venireman -venison -venisonivorous -venisonlike -venisuture -vennel -venner -venoatrial -venoauricular -venom -venomed -venomer -venomization -venomize -venomly -venomness -venomosalivary -venomous -venomously -venomousness -venomproof -venomsome -venomy -venosal -venosclerosis -venose -venosinal -venosity -venostasis -venous -venously -venousness -vent -ventage -ventail -venter -venthole -ventiduct -ventifact -ventil -ventilable -ventilagin -ventilate -ventilating -ventilation -ventilative -ventilator -ventilatory -ventless -ventometer -ventose -ventoseness -ventosity -ventpiece -ventrad -ventral -ventrally -ventralmost -ventralward -ventric -ventricle -ventricolumna -ventricolumnar -ventricornu -ventricornual -ventricose -ventricoseness -ventricosity -ventricous -ventricular -ventricularis -ventriculite -ventriculitic -ventriculogram -ventriculography -ventriculoscopy -ventriculose -ventriculous -ventriculus -ventricumbent -ventriduct -ventrifixation -ventrilateral -ventrilocution -ventriloqual -ventriloqually -ventriloque -ventriloquial -ventriloquially -ventriloquism -ventriloquist -ventriloquistic -ventriloquize -ventriloquous -ventriloquously -ventriloquy -ventrimesal -ventrimeson -ventrine -ventripotency -ventripotent -ventripotential -ventripyramid -ventroaxial -ventroaxillary -ventrocaudal -ventrocystorrhaphy -ventrodorsad -ventrodorsal -ventrodorsally -ventrofixation -ventrohysteropexy -ventroinguinal -ventrolateral -ventrolaterally -ventromedial -ventromedian -ventromesal -ventromesial -ventromyel -ventroposterior -ventroptosia -ventroptosis -ventroscopy -ventrose -ventrosity -ventrosuspension -ventrotomy -venture -venturer -venturesome -venturesomely -venturesomeness -venturine -venturous -venturously -venturousness -venue -venula -venular -venule -venulose -venust -venville -vera -veracious -veraciously -veraciousness -veracity -veranda -verandaed -verascope -veratral -veratralbine -veratraldehyde -veratrate -veratria -veratric -veratridine -veratrine -veratrinize -veratrize -veratroidine -veratrole -veratroyl -veratryl -veratrylidene -verb -verbal -verbalism -verbalist -verbality -verbalization -verbalize -verbalizer -verbally -verbarian -verbarium -verbasco -verbascose -verbate -verbatim -verbena -verbenaceous -verbenalike -verbenalin -verbenate -verbene -verbenone -verberate -verberation -verberative -verbiage -verbicide -verbiculture -verbid -verbification -verbify -verbigerate -verbigeration -verbigerative -verbile -verbless -verbolatry -verbomania -verbomaniac -verbomotor -verbose -verbosely -verboseness -verbosity -verbous -verby -verchok -verd -verdancy -verdant -verdantly -verdantness -verdea -verdelho -verderer -verderership -verdet -verdict -verdigris -verdigrisy -verdin -verditer -verdoy -verdugoship -verdun -verdure -verdured -verdureless -verdurous -verdurousness -verecund -verecundity -verecundness -verek -veretilliform -veretillum -verge -vergeboard -vergence -vergency -vergent -vergentness -verger -vergeress -vergerism -vergerless -vergership -vergery -vergi -vergiform -verglas -vergobret -veri -veridic -veridical -veridicality -veridically -veridicalness -veridicous -veridity -verifiability -verifiable -verifiableness -verifiably -verificate -verification -verificative -verificatory -verifier -verify -verily -verine -verisimilar -verisimilarly -verisimilitude -verisimilitudinous -verisimility -verism -verist -veristic -veritability -veritable -veritableness -veritably -verite -veritism -veritist -veritistic -verity -verjuice -vermeil -vermeologist -vermeology -vermetid -vermetidae -vermian -vermicelli -vermicidal -vermicide -vermicious -vermicle -vermicular -vermicularly -vermiculate -vermiculated -vermiculation -vermicule -vermiculite -vermiculose -vermiculosity -vermiculous -vermiform -vermiformis -vermiformity -vermiformous -vermifugal -vermifuge -vermifugous -vermigerous -vermigrade -vermilinguial -vermilion -vermilionette -vermilionize -vermin -verminal -verminate -vermination -verminer -verminicidal -verminicide -verminiferous -verminlike -verminly -verminosis -verminous -verminously -verminousness -verminproof -verminy -vermiparous -vermiparousness -vermis -vermivorous -vermivorousness -vermix -vermorel -vermouth -vernacle -vernacular -vernacularism -vernacularist -vernacularity -vernacularization -vernacularize -vernacularly -vernacularness -vernaculate -vernal -vernality -vernalization -vernalize -vernally -vernant -vernation -vernicose -vernier -vernile -vernility -vernin -vernine -vernition -vernoniaceous -vernonin -veronalism -verre -verrel -verriculate -verriculated -verricule -verruca -verrucano -verrucariaceous -verrucarioid -verrucated -verruciferous -verruciform -verrucose -verrucoseness -verrucosis -verrucosity -verrucous -verruculose -verruga -versability -versable -versableness -versal -versant -versate -versatile -versatilely -versatileness -versatility -versation -versative -verse -versecraft -versed -verseless -verselet -versemaker -versemaking -verseman -versemanship -versemonger -versemongering -versemongery -verser -versesmith -verset -versette -verseward -versewright -versicle -versicler -versicolor -versicolorate -versicolored -versicolorous -versicular -versicule -versifiable -versifiaster -versification -versificator -versificatory -versificatrix -versifier -versiform -versify -versiloquy -versine -version -versional -versioner -versionist -versionize -versipel -verso -versor -verst -versta -versual -versus -vert -vertebra -vertebrae -vertebral -vertebraless -vertebrally -vertebrarium -vertebrarterial -vertebrate -vertebrated -vertebration -vertebre -vertebrectomy -vertebriform -vertebroarterial -vertebrobasilar -vertebrochondral -vertebrocostal -vertebrodymus -vertebrofemoral -vertebroiliac -vertebromammary -vertebrosacral -vertebrosternal -vertex -vertibility -vertible -vertibleness -vertical -verticalism -verticality -vertically -verticalness -vertices -verticil -verticillary -verticillaster -verticillastrate -verticillate -verticillated -verticillately -verticillation -verticilliaceous -verticilliose -verticillus -verticity -verticomental -verticordious -vertiginate -vertigines -vertiginous -vertigo -vertilinear -vertimeter -veruled -verumontanum -vervain -vervainlike -verve -vervecine -vervel -verveled -vervelle -vervenia -vervet -very -vesania -vesanic -vesbite -vesicae -vesical -vesicant -vesicate -vesication -vesicatory -vesicle -vesicoabdominal -vesicocavernous -vesicocele -vesicocervical -vesicoclysis -vesicofixation -vesicointestinal -vesicoprostatic -vesicopubic -vesicorectal -vesicosigmoid -vesicospinal -vesicotomy -vesicovaginal -vesicular -vesicularly -vesiculary -vesiculase -vesiculate -vesiculation -vesicule -vesiculectomy -vesiculiferous -vesiculiform -vesiculigerous -vesiculitis -vesiculobronchial -vesiculocavernous -vesiculopustular -vesiculose -vesiculotomy -vesiculotubular -vesiculotympanic -vesiculotympanitic -vesiculous -vesiculus -vesicupapular -veskit -vespacide -vespal -vesper -vesperal -vesperian -vespering -vespers -vespertide -vespertilian -vespertilio -vespertilionid -vespertilionine -vespertinal -vespertine -vespery -vespiary -vespid -vespiform -vespine -vespoid -vessel -vesseled -vesselful -vessignon -vest -vestal -vestalia -vestalship -vestee -vester -vestiarian -vestiarium -vestiary -vestibula -vestibular -vestibulary -vestibulate -vestibule -vestibuled -vestibulospinal -vestibulum -vestige -vestigial -vestigially -vestigiary -vestigium -vestiment -vestimental -vestimentary -vesting -vestiture -vestlet -vestment -vestmental -vestmented -vestral -vestralization -vestrical -vestrification -vestrify -vestry -vestrydom -vestryhood -vestryish -vestryism -vestryize -vestryman -vestrymanly -vestrymanship -vestuary -vestural -vesture -vesturer -vesuvian -vesuvianite -vesuviate -vesuvite -vesuvius -veszelyite -vet -veta -vetanda -vetch -vetchling -vetchy -veteran -veterancy -veteraness -veteranize -veterinarian -veterinarianism -veterinary -vetitive -vetivene -vetivenol -vetiver -vetiveria -vetivert -vetkousie -veto -vetoer -vetoism -vetoist -vetoistic -vetoistical -vetust -vetusty -veuglaire -veuve -vex -vexable -vexation -vexatious -vexatiously -vexatiousness -vexatory -vexed -vexedly -vexedness -vexer -vexful -vexil -vexillar -vexillarious -vexillary -vexillate -vexillation -vexillum -vexingly -vexingness -vext -via -viability -viable -viaduct -viaggiatory -viagram -viagraph -viajaca -vial -vialful -vialmaker -vialmaking -vialogue -viameter -viand -viander -viatic -viatica -viatical -viaticum -viatometer -viator -viatorial -viatorially -vibetoite -vibex -vibgyor -vibix -vibracular -vibracularium -vibraculoid -vibraculum -vibrance -vibrancy -vibrant -vibrantly -vibraphone -vibrate -vibratile -vibratility -vibrating -vibratingly -vibration -vibrational -vibrationless -vibratiuncle -vibratiunculation -vibrative -vibrato -vibrator -vibratory -vibrioid -vibrion -vibrionic -vibrissa -vibrissae -vibrissal -vibrograph -vibromassage -vibrometer -vibromotive -vibronic -vibrophone -vibroscope -vibroscopic -vibrotherapeutics -viburnic -viburnin -vicar -vicarage -vicarate -vicaress -vicarial -vicarian -vicarianism -vicariate -vicariateship -vicarious -vicariously -vicariousness -vicarly -vicarship -vice -vicecomes -vicecomital -vicegeral -vicegerency -vicegerent -vicegerentship -viceless -vicelike -vicenary -vicennial -viceregal -viceregally -vicereine -viceroy -viceroyal -viceroyalty -viceroydom -viceroyship -vicety -viceversally -vichyssoise -vicianin -vicianose -vicilin -vicinage -vicinal -vicine -vicinity -viciosity -vicious -viciously -viciousness -vicissitous -vicissitude -vicissitudinary -vicissitudinous -vicissitudinousness -vicoite -vicontiel -victim -victimhood -victimizable -victimization -victimize -victimizer -victless -victor -victordom -victorfish -victoriate -victoriatus -victorine -victorious -victoriously -victoriousness -victorium -victory -victoryless -victress -victrix -victrola -victual -victualage -victualer -victualing -victuallership -victualless -victualry -victuals -vicuna -viddui -videndum -video -videogenic -vidette -vidonia -vidry -viduage -vidual -vidually -viduate -viduated -viduation -viduine -viduity -viduous -vidya -vie -vielle -vier -vierling -viertel -viertelein -view -viewable -viewably -viewer -viewiness -viewless -viewlessly -viewly -viewpoint -viewsome -viewster -viewworthy -viewy -vifda -viga -vigentennial -vigesimal -vigesimation -vigia -vigil -vigilance -vigilancy -vigilant -vigilante -vigilantism -vigilantly -vigilantness -vigilate -vigilation -vigintiangular -vigneron -vignette -vignetter -vignettist -vignin -vigonia -vigor -vigorist -vigorless -vigorous -vigorously -vigorousness -vihara -vihuela -vijao -viking -vikingism -vikinglike -vikingship -vila -vilayet -vile -vilehearted -vilely -vileness -vilicate -vilification -vilifier -vilify -vilifyingly -vilipend -vilipender -vilipenditory -vility -vill -villa -villadom -villaette -village -villageful -villagehood -villageless -villagelet -villagelike -villageous -villager -villageress -villagery -villaget -villageward -villagey -villagism -villain -villainage -villaindom -villainess -villainist -villainous -villainously -villainousness -villainproof -villainy -villakin -villaless -villalike -villanage -villanella -villanelle -villanette -villanous -villanously -villar -villate -villatic -ville -villein -villeinage -villeiness -villeinhold -villenage -villiaumite -villiferous -villiform -villiplacental -villitis -villoid -villose -villosity -villous -villously -villus -vim -vimana -vimen -vimful -viminal -vimineous -vina -vinaceous -vinaconic -vinage -vinagron -vinaigrette -vinaigretted -vinaigrier -vinaigrous -vinal -vinasse -vinata -vincent -vincetoxin -vincibility -vincible -vincibleness -vincibly -vincular -vinculate -vinculation -vinculum -vindemial -vindemiate -vindemiation -vindemiatory -vindex -vindhyan -vindicability -vindicable -vindicableness -vindicably -vindicate -vindication -vindicative -vindicatively -vindicativeness -vindicator -vindicatorily -vindicatorship -vindicatory -vindicatress -vindictive -vindictively -vindictiveness -vindictivolence -vindresser -vine -vinea -vineal -vineatic -vined -vinegar -vinegarer -vinegarette -vinegarish -vinegarist -vinegarroon -vinegarweed -vinegary -vinegerone -vinegrower -vineity -vineland -vineless -vinelet -vinelike -viner -vinery -vinestalk -vinewise -vineyard -vineyarding -vineyardist -vingerhoed -vinhatico -vinic -vinicultural -viniculture -viniculturist -vinifera -viniferous -vinification -vinificator -vinny -vino -vinoacetous -vinolence -vinolent -vinologist -vinology -vinometer -vinomethylic -vinose -vinosity -vinosulphureous -vinous -vinously -vinousness -vinquish -vint -vinta -vintage -vintager -vintaging -vintem -vintener -vintlite -vintner -vintneress -vintnership -vintnery -vintress -vintry -viny -vinyl -vinylbenzene -vinylene -vinylic -vinylidene -viol -viola -violability -violable -violableness -violably -violacean -violaceous -violaceously -violal -violanin -violaquercitrin -violate -violater -violation -violational -violative -violator -violatory -violature -violence -violent -violently -violentness -violer -violescent -violet -violetish -violetlike -violette -violetwise -violety -violin -violina -violine -violinette -violinist -violinistic -violinlike -violinmaker -violinmaking -violist -violmaker -violmaking -violon -violoncellist -violoncello -violone -violotta -violuric -viosterol -viper -viperan -viperess -viperfish -viperian -viperid -viperiform -viperine -viperish -viperishly -viperlike -viperling -viperoid -viperous -viperously -viperousness -vipery -vipolitic -vipresident -viqueen -viragin -viraginian -viraginity -viraginous -virago -viragoish -viragolike -viragoship -viral -vire -virelay -viremia -viremic -virent -vireo -vireonine -virescence -virescent -virga -virgal -virgate -virgated -virgater -virgation -virgilia -virgin -virginal -virginalist -virginality -virginally -virgineous -virginhead -virginitis -virginity -virginityship -virginium -virginlike -virginly -virginship -virgula -virgular -virgularian -virgulate -virgule -virgultum -virial -viricide -virid -viridene -viridescence -viridescent -viridian -viridigenous -viridine -viridite -viridity -virific -virify -virile -virilely -virileness -virilescence -virilescent -virilify -viriliously -virilism -virilist -virility -viripotent -viritrate -virl -virole -viroled -virological -virologist -virology -viron -virose -virosis -virous -virtu -virtual -virtualism -virtualist -virtuality -virtualize -virtually -virtue -virtued -virtuefy -virtuelessness -virtueproof -virtuless -virtuosa -virtuose -virtuosi -virtuosic -virtuosity -virtuoso -virtuosoship -virtuous -virtuouslike -virtuously -virtuousness -virucidal -virucide -viruela -virulence -virulency -virulent -virulented -virulently -virulentness -viruliferous -virus -viruscidal -viruscide -virusemic -vis -visa -visage -visaged -visagraph -visarga -viscacha -viscera -visceral -visceralgia -viscerally -viscerate -visceration -visceripericardial -visceroinhibitory -visceromotor -visceroparietal -visceroperitioneal -visceropleural -visceroptosis -visceroptotic -viscerosensory -visceroskeletal -viscerosomatic -viscerotomy -viscerotonia -viscerotonic -viscerotrophic -viscerotropic -viscerous -viscid -viscidity -viscidize -viscidly -viscidness -viscidulous -viscin -viscoidal -viscolize -viscometer -viscometrical -viscometrically -viscometry -viscontal -viscoscope -viscose -viscosimeter -viscosimetry -viscosity -viscount -viscountcy -viscountess -viscountship -viscounty -viscous -viscously -viscousness -viscus -vise -viseman -visibility -visibilize -visible -visibleness -visibly -visie -visile -vision -visional -visionally -visionarily -visionariness -visionary -visioned -visioner -visionic -visionist -visionize -visionless -visionlike -visionmonger -visionproof -visit -visita -visitable -visitant -visitation -visitational -visitative -visitator -visitatorial -visite -visitee -visiter -visiting -visitment -visitor -visitoress -visitorial -visitorship -visitress -visitrix -visive -visne -vison -visor -visorless -visorlike -vista -vistaed -vistal -vistaless -vistamente -visto -visual -visualist -visuality -visualization -visualize -visualizer -visually -visuoauditory -visuokinesthetic -visuometer -visuopsychic -visuosensory -vita -vital -vitalic -vitalism -vitalist -vitalistic -vitalistically -vitality -vitalization -vitalize -vitalizer -vitalizing -vitalizingly -vitally -vitalness -vitals -vitamer -vitameric -vitamin -vitaminic -vitaminize -vitaminology -vitapath -vitapathy -vitaphone -vitascope -vitascopic -vitasti -vitativeness -vitellarian -vitellarium -vitellary -vitellicle -vitelliferous -vitelligenous -vitelligerous -vitellin -vitelline -vitellogene -vitellogenous -vitellose -vitellus -viterbite -vitiable -vitiate -vitiated -vitiation -vitiator -viticetum -viticulose -viticultural -viticulture -viticulturer -viticulturist -vitiferous -vitiliginous -vitiligo -vitiligoidea -vitiosity -vitium -vitochemic -vitochemical -vitrage -vitrail -vitrailed -vitrailist -vitrain -vitraux -vitreal -vitrean -vitrella -vitremyte -vitreodentinal -vitreodentine -vitreoelectric -vitreosity -vitreous -vitreouslike -vitreously -vitreousness -vitrescence -vitrescency -vitrescent -vitrescibility -vitrescible -vitreum -vitric -vitrics -vitrifaction -vitrifacture -vitrifiability -vitrifiable -vitrification -vitriform -vitrify -vitrine -vitrinoid -vitriol -vitriolate -vitriolation -vitriolic -vitrioline -vitriolizable -vitriolization -vitriolize -vitriolizer -vitrite -vitrobasalt -vitrophyre -vitrophyric -vitrotype -vitrous -vitta -vittate -vitular -vituline -vituperable -vituperate -vituperation -vituperative -vituperatively -vituperator -vituperatory -vituperious -viuva -viva -vivacious -vivaciously -vivaciousness -vivacity -vivandiere -vivarium -vivary -vivax -vive -vively -vivency -viver -viverriform -viverrine -vivers -vives -vivianite -vivicremation -vivid -vividialysis -vividiffusion -vividissection -vividity -vividly -vividness -vivific -vivificate -vivification -vivificative -vivificator -vivifier -vivify -viviparism -viviparity -viviparous -viviparously -viviparousness -vivipary -viviperfuse -vivisect -vivisection -vivisectional -vivisectionally -vivisectionist -vivisective -vivisector -vivisectorium -vivisepulture -vixen -vixenish -vixenishly -vixenishness -vixenlike -vixenly -vizard -vizarded -vizardless -vizardlike -vizardmonger -vizier -vizierate -viziercraft -vizierial -viziership -vizircraft -vlei -voar -vocability -vocable -vocably -vocabular -vocabularian -vocabularied -vocabulary -vocabulation -vocabulist -vocal -vocalic -vocalion -vocalise -vocalism -vocalist -vocalistic -vocality -vocalization -vocalize -vocalizer -vocaller -vocally -vocalness -vocate -vocation -vocational -vocationalism -vocationalization -vocationalize -vocationally -vocative -vocatively -vochysiaceous -vocicultural -vociferance -vociferant -vociferate -vociferation -vociferative -vociferator -vociferize -vociferosity -vociferous -vociferously -vociferousness -vocification -vocimotor -vocular -vocule -vodka -voe -voet -voeten -vog -vogesite -voglite -vogue -voguey -voguish -voice -voiced -voiceful -voicefulness -voiceless -voicelessly -voicelessness -voicelet -voicelike -voicer -voicing -void -voidable -voidableness -voidance -voided -voidee -voider -voiding -voidless -voidly -voidness -voile -voiturette -voivode -voivodeship -vol -volable -volage -volant -volantly -volar -volata -volatic -volatile -volatilely -volatileness -volatility -volatilizable -volatilization -volatilize -volatilizer -volation -volational -volborthite -volcan -volcanian -volcanic -volcanically -volcanicity -volcanism -volcanist -volcanite -volcanity -volcanization -volcanize -volcano -volcanoism -volcanological -volcanologist -volcanologize -volcanology -vole -volemitol -volency -volent -volently -volery -volet -volhynite -volipresence -volipresent -volitant -volitate -volitation -volitational -volitiency -volitient -volition -volitional -volitionalist -volitionality -volitionally -volitionary -volitionate -volitionless -volitive -volitorial -volley -volleyball -volleyer -volleying -volleyingly -volost -volplane -volplanist -volsella -volsellum -volt -voltaelectric -voltaelectricity -voltaelectrometer -voltaelectrometric -voltage -voltagraphy -voltaic -voltaism -voltaite -voltameter -voltametric -voltammeter -voltaplast -voltatype -voltinism -voltivity -voltize -voltmeter -voltzite -volubilate -volubility -voluble -volubleness -volubly -volucrine -volume -volumed -volumenometer -volumenometry -volumescope -volumeter -volumetric -volumetrical -volumetrically -volumetry -volumette -voluminal -voluminosity -voluminous -voluminously -voluminousness -volumist -volumometer -volumometrical -volumometry -voluntariate -voluntarily -voluntariness -voluntarism -voluntarist -voluntaristic -voluntarity -voluntary -voluntaryism -voluntaryist -voluntative -volunteer -volunteerism -volunteerly -volunteership -volupt -voluptary -voluptas -voluptuarian -voluptuary -voluptuate -voluptuosity -voluptuous -voluptuously -voluptuousness -volupty -voluta -volutate -volutation -volute -voluted -volutiform -volutin -volution -volutoid -volva -volvate -volvelle -volvent -volvocaceous -volvulus -vomer -vomerine -vomerobasilar -vomeronasal -vomeropalatine -vomica -vomicine -vomit -vomitable -vomiter -vomiting -vomitingly -vomition -vomitive -vomitiveness -vomito -vomitory -vomiture -vomiturition -vomitus -vomitwort -vondsira -vonsenite -voodoo -voodooism -voodooist -voodooistic -voracious -voraciously -voraciousness -voracity -voraginous -vorago -vorant -vorhand -vorlooper -vorondreo -vorpal -vortex -vortical -vortically -vorticel -vorticellid -vortices -vorticial -vorticiform -vorticism -vorticist -vorticity -vorticose -vorticosely -vorticular -vorticularly -vortiginous -vota -votable -votal -votally -votaress -votarist -votary -votation -vote -voteen -voteless -voter -voting -votive -votively -votiveness -votometer -votress -vouch -vouchable -vouchee -voucher -voucheress -vouchment -vouchsafe -vouchsafement -vouge -voussoir -vow -vowed -vowel -vowelish -vowelism -vowelist -vowelization -vowelize -vowelless -vowellessness -vowellike -vowely -vower -vowess -vowless -vowmaker -vowmaking -voyage -voyageable -voyager -voyance -voyeur -voyeurism -vraic -vraicker -vraicking -vrbaite -vriddhi -vrother -vug -vuggy -vulcanicity -vulcanism -vulcanist -vulcanite -vulcanizable -vulcanizate -vulcanization -vulcanize -vulcanizer -vulcanological -vulcanologist -vulcanology -vulgar -vulgare -vulgarian -vulgarish -vulgarism -vulgarist -vulgarity -vulgarization -vulgarize -vulgarizer -vulgarlike -vulgarly -vulgarness -vulgarwise -vulgate -vulgus -vuln -vulnerability -vulnerable -vulnerableness -vulnerably -vulnerary -vulnerate -vulneration -vulnerative -vulnerose -vulnific -vulnose -vulpecular -vulpic -vulpicidal -vulpicide -vulpicidism -vulpine -vulpinism -vulpinite -vulsella -vulsellum -vulsinite -vulture -vulturelike -vulturewise -vulturine -vulturish -vulturism -vulturn -vulturous -vulva -vulval -vulvar -vulvate -vulviform -vulvitis -vulvocrural -vulvouterine -vulvovaginal -vulvovaginitis -vum -vying -vyingly -w -wa -waag -waapa -waar -wab -wabber -wabble -wabbly -wabby -wabe -wabeno -wabster -wacago -wace -wachna -wack -wacke -wacken -wacker -wackiness -wacky -wad -waddent -wadder -wadding -waddler -waddlesome -waddling -waddlingly -waddly -waddy -waddywood -wade -wadeable -wader -wadi -wading -wadingly -wadlike -wadmaker -wadmaking -wadmal -wadmeal -wadna -wadset -wadsetter -wae -waeg -waer -waesome -waesuck -wafer -waferer -waferish -wafermaker -wafermaking -waferwoman -waferwork -wafery -waff -waffle -wafflike -waffly -waft -waftage -wafter -wafture -wafty -wag -waganging -wagaun -wagbeard -wage -waged -wagedom -wageless -wagelessness -wagenboom -wager -wagerer -wagering -wages -wagesman -wagework -wageworker -wageworking -waggable -waggably -waggel -wagger -waggery -waggie -waggish -waggishly -waggishness -waggle -waggling -wagglingly -waggly -waggy -waglike -wagling -wagnerite -wagon -wagonable -wagonage -wagoner -wagoness -wagonette -wagonful -wagonload -wagonmaker -wagonmaking -wagonman -wagonry -wagonsmith -wagonway -wagonwayman -wagonwork -wagonwright -wagsome -wagtail -wagwag -wagwants -wagwit -wah -wahahe -wahine -wahoo -wahpekute -waiata -waif -waik -waikly -waikness -wail -wailer -wailful -wailfully -wailingly -wailsome -waily -wain -wainage -wainbote -wainer -wainful -wainman -wainrope -wainscot -wainscoting -wainwright -waipiro -wairch -waird -wairepo -wairsh -waise -waist -waistband -waistcloth -waistcoat -waistcoated -waistcoateer -waistcoathole -waistcoating -waistcoatless -waisted -waister -waisting -waistless -waistline -wait -waiter -waiterage -waiterdom -waiterhood -waitering -waiterlike -waitership -waiting -waitingly -waitress -waivatua -waive -waiver -waivery -waivod -waiwode -wajang -waka -wakan -wake -wakeel -wakeful -wakefully -wakefulness -wakeless -waken -wakener -wakening -waker -wakes -waketime -wakf -wakif -wakiki -waking -wakingly -wakiup -wakken -wakon -wakonda -waky -walahee -waldflute -waldgrave -waldgravine -waldhorn -waldmeister -wale -waled -walepiece -waler -walewort -wali -waling -walk -walkable -walkaway -walker -walking -walkist -walkmill -walkmiller -walkout -walkover -walkrife -walkside -walksman -walkway -walkyrie -wall -wallaba -wallaby -wallah -wallaroo -wallbird -wallboard -walled -waller -wallet -walletful -walleye -walleyed -wallflower -wallful -wallhick -walling -wallise -wallless -wallman -walloon -wallop -walloper -walloping -wallow -wallower -wallowish -wallowishly -wallowishness -wallpaper -wallpapering -wallpiece -wallwise -wallwork -wallwort -wally -walnut -walpurgite -walrus -walsh -walt -walter -walth -waltz -waltzer -waltzlike -walycoat -wamara -wambais -wamble -wambliness -wambling -wamblingly -wambly -wame -wamefou -wamel -wammikin -wamp -wampee -wample -wampum -wampumpeag -wampus -wamus -wan -wanchancy -wand -wander -wanderable -wanderer -wandering -wanderingly -wanderingness -wanderlust -wanderluster -wanderlustful -wanderoo -wandery -wanderyear -wandflower -wandle -wandlike -wandoo -wandsman -wandy -wane -waned -waneless -wang -wanga -wangala -wangan -wangateur -wanghee -wangle -wangler -wangrace -wangtooth -wanhope -wanhorn -wanigan -waning -wankapin -wankle -wankliness -wankly -wanle -wanly -wanner -wanness -wannish -wanny -wanrufe -wansonsy -want -wantage -wanter -wantful -wanthill -wanthrift -wanting -wantingly -wantingness -wantless -wantlessness -wanton -wantoner -wantonlike -wantonly -wantonness -wantwit -wanty -wanwordy -wanworth -wany -wap -wapacut -wapatoo -wapentake -wapiti -wapp -wappenschaw -wappenschawing -wapper -wapping -war -warabi -waratah -warble -warbled -warblelike -warbler -warblerlike -warblet -warbling -warblingly -warbly -warch -warcraft -ward -wardable -wardage -wardapet -warday -warded -warden -wardency -wardenry -wardenship -warder -warderer -wardership -wardholding -warding -wardite -wardless -wardlike -wardmaid -wardman -wardmote -wardress -wardrobe -wardrober -wardroom -wardship -wardsmaid -wardsman -wardswoman -wardwite -wardwoman -ware -warehou -warehouse -warehouseage -warehoused -warehouseful -warehouseman -warehouser -wareless -waremaker -waremaking -wareman -wareroom -warf -warfare -warfarer -warfaring -warful -warily -wariness -waringin -warish -warison -wark -warkamoowee -warl -warless -warlessly -warlike -warlikely -warlikeness -warlock -warluck -warly -warm -warmable -warman -warmed -warmedly -warmer -warmful -warmhearted -warmheartedly -warmheartedness -warmhouse -warming -warmish -warmly -warmness -warmonger -warmongering -warmouth -warmth -warmthless -warmus -warn -warnel -warner -warning -warningly -warningproof -warnish -warnoth -warnt -warp -warpable -warpage -warped -warper -warping -warplane -warple -warplike -warproof -warpwise -warragal -warrambool -warran -warrand -warrandice -warrant -warrantable -warrantableness -warrantably -warranted -warrantee -warranter -warrantise -warrantless -warrantor -warranty -warratau -warree -warren -warrener -warrenlike -warrer -warrin -warrior -warrioress -warriorhood -warriorism -warriorlike -warriorship -warriorwise -warrok -warsaw -warse -warsel -warship -warsle -warsler -warst -wart -warted -wartern -wartflower -warth -wartime -wartless -wartlet -wartlike -wartproof -wartweed -wartwort -warty -wartyback -warve -warwards -warwickite -warwolf -warworn -wary -was -wasabi -wase -wasel -wash -washability -washable -washableness -washaway -washbasin -washbasket -washboard -washbowl -washbrew -washcloth -washday -washdish -washdown -washed -washen -washer -washerless -washerman -washerwife -washerwoman -washery -washeryman -washhand -washhouse -washin -washiness -washing -washland -washmaid -washman -washoff -washout -washpot -washproof -washrag -washroad -washroom -washshed -washstand -washtail -washtray -washtrough -washtub -washway -washwoman -washwork -washy -wasnt -wasp -waspen -wasphood -waspily -waspish -waspishly -waspishness -wasplike -waspling -waspnesting -waspy -wassail -wassailer -wassailous -wassailry -wassie -wast -wastable -wastage -waste -wastebasket -wasteboard -wasted -wasteful -wastefully -wastefulness -wastel -wasteland -wastelbread -wasteless -wasteman -wastement -wasteness -wastepaper -wasteproof -waster -wasterful -wasterfully -wasterfulness -wastethrift -wasteword -wasteyard -wasting -wastingly -wastingness -wastland -wastrel -wastrife -wasty -wat -watap -watch -watchable -watchboat -watchcase -watchcry -watchdog -watched -watcher -watchfree -watchful -watchfully -watchfulness -watchglassful -watchhouse -watching -watchingly -watchkeeper -watchless -watchlessness -watchmaker -watchmaking -watchman -watchmanly -watchmanship -watchmate -watchment -watchout -watchtower -watchwise -watchwoman -watchword -watchwork -water -waterage -waterbailage -waterbelly -waterboard -waterbok -waterbosh -waterbrain -waterchat -watercup -waterdoe -waterdrop -watered -waterer -waterfall -waterfinder -waterflood -waterfowl -waterfront -waterhead -waterhorse -waterie -waterily -wateriness -watering -wateringly -wateringman -waterish -waterishly -waterishness -waterleave -waterless -waterlessly -waterlessness -waterlike -waterline -waterlog -waterlogged -waterloggedness -waterlogger -waterlogging -waterman -watermanship -watermark -watermaster -watermelon -watermonger -waterphone -waterpot -waterproof -waterproofer -waterproofing -waterproofness -waterquake -waterscape -watershed -watershoot -waterside -watersider -waterskin -watersmeet -waterspout -waterstead -watertight -watertightal -watertightness -waterward -waterwards -waterway -waterweed -waterwise -waterwoman -waterwood -waterwork -waterworker -waterworm -waterworn -waterwort -watery -wath -wathstead -watt -wattage -wattape -wattle -wattlebird -wattled -wattless -wattlework -wattling -wattman -wattmeter -wauble -wauch -wauchle -waucht -wauf -waugh -waughy -wauken -waukit -waukrife -waul -waumle -wauner -wauns -waup -waur -wauregan -wauve -wavable -wavably -wave -waved -waveless -wavelessly -wavelessness -wavelet -wavelike -wavellite -wavemark -wavement -wavemeter -waveproof -waver -waverable -waverer -wavering -waveringly -waveringness -waverous -wavery -waveson -waveward -wavewise -wavey -wavicle -wavily -waviness -waving -wavingly -wavy -waw -wawa -wawah -wawaskeesh -wax -waxberry -waxbill -waxbird -waxbush -waxchandler -waxchandlery -waxen -waxer -waxflower -waxhearted -waxily -waxiness -waxing -waxingly -waxlike -waxmaker -waxmaking -waxman -waxweed -waxwing -waxwork -waxworker -waxworking -waxy -way -wayaka -wayang -wayback -wayberry -waybill -waybird -waybook -waybread -waybung -wayfare -wayfarer -wayfaring -wayfaringly -wayfellow -waygang -waygate -waygoing -waygone -waygoose -wayhouse -waying -waylaid -waylaidlessness -waylay -waylayer -wayleave -wayless -waymaker -wayman -waymark -waymate -waypost -ways -wayside -waysider -waysliding -waythorn -wayward -waywarden -waywardly -waywardness -waywiser -waywode -waywodeship -wayworn -waywort -wayzgoose -we -weak -weakbrained -weaken -weakener -weakening -weakfish -weakhanded -weakhearted -weakheartedly -weakheartedness -weakish -weakishly -weakishness -weakliness -weakling -weakly -weakmouthed -weakness -weaky -weal -weald -wealdsman -wealth -wealthily -wealthiness -wealthless -wealthmaker -wealthmaking -wealthmonger -wealthy -weam -wean -weanable -weanedness -weanel -weaner -weanling -weanyer -weapon -weaponed -weaponeer -weaponless -weaponmaker -weaponmaking -weaponproof -weaponry -weaponshaw -weaponshow -weaponshowing -weaponsmith -weaponsmithy -wear -wearability -wearable -wearer -weariable -weariableness -wearied -weariedly -weariedness -wearier -weariful -wearifully -wearifulness -weariless -wearilessly -wearily -weariness -wearing -wearingly -wearish -wearishly -wearishness -wearisome -wearisomely -wearisomeness -wearproof -weary -wearying -wearyingly -weasand -weasel -weaselfish -weasellike -weaselly -weaselship -weaselskin -weaselsnout -weaselwise -weaser -weason -weather -weatherboard -weatherboarding -weatherbreak -weathercock -weathercockish -weathercockism -weathercocky -weathered -weatherer -weatherfish -weatherglass -weathergleam -weatherhead -weatherheaded -weathering -weatherliness -weatherly -weathermaker -weathermaking -weatherman -weathermost -weatherology -weatherproof -weatherproofed -weatherproofing -weatherproofness -weatherward -weatherworn -weathery -weavable -weave -weaveable -weaved -weavement -weaver -weaverbird -weaveress -weaving -weazen -weazened -weazeny -web -webbed -webber -webbing -webby -weber -webeye -webfoot -webfooter -webless -weblike -webmaker -webmaking -webster -websterite -webwork -webworm -wecht -wed -wedana -wedbed -wedbedrip -wedded -weddedly -weddedness -wedder -wedding -weddinger -wede -wedge -wedgeable -wedgebill -wedged -wedgelike -wedger -wedgewise -wedging -wedgy -wedlock -wedset -wee -weeble -weed -weeda -weedable -weedage -weeded -weeder -weedery -weedful -weedhook -weediness -weedingtime -weedish -weedless -weedlike -weedling -weedow -weedproof -weedy -week -weekday -weekend -weekender -weekly -weekwam -weel -weelfard -weelfaured -weemen -ween -weendigo -weeness -weening -weenong -weeny -weep -weepable -weeper -weepered -weepful -weeping -weepingly -weeps -weepy -weesh -weeshy -weet -weetbird -weetless -weever -weevil -weeviled -weevillike -weevilproof -weevily -weewow -weeze -weft -weftage -wefted -wefty -wegenerian -wegotism -wehrlite -weibyeite -weichselwood -weigelite -weigh -weighable -weighage -weighbar -weighbauk -weighbridge -weighbridgeman -weighed -weigher -weighership -weighhouse -weighin -weighing -weighman -weighment -weighshaft -weight -weightchaser -weighted -weightedly -weightedness -weightily -weightiness -weighting -weightless -weightlessly -weightlessness -weightometer -weighty -weinbergerite -weinschenkite -weir -weirangle -weird -weirdful -weirdish -weirdless -weirdlessness -weirdlike -weirdliness -weirdly -weirdness -weirdsome -weirdward -weirdwoman -weiring -weisbachite -weiselbergite -weism -weissite -wejack -weka -wekau -wekeen -weki -welcome -welcomeless -welcomely -welcomeness -welcomer -welcoming -welcomingly -weld -weldability -weldable -welder -welding -weldless -weldment -weldor -welfare -welfaring -welk -welkin -welkinlike -well -wellat -wellaway -wellborn -wellcurb -wellhead -wellhole -welling -wellington -wellish -wellmaker -wellmaking -wellman -wellnear -wellness -wellring -wellside -wellsite -wellspring -wellstead -wellstrand -welly -wellyard -wels -welsh -welsher -welsium -welt -welted -welter -welterweight -welting -wem -wemless -wen -wench -wencher -wenchless -wenchlike -wend -wende -wene -wennebergite -wennish -wenny -went -wentletrap -wenzel -wept -wer -were -werebear -werecalf -werefolk -werefox -werehyena -werejaguar -wereleopard -werent -weretiger -werewolf -werewolfish -werewolfism -werf -wergil -weri -wernerite -werowance -wert -wervel -wese -weskit -wesselton -west -westaway -westbound -weste -wester -westering -westerliness -westerly -westermost -western -westerner -westernism -westernization -westernize -westernly -westernmost -westerwards -westfalite -westing -westland -westlandways -westmost -westness -westward -westwardly -westwardmost -westwards -westy -wet -weta -wetback -wetbird -wetched -wetchet -wether -wetherhog -wetherteg -wetly -wetness -wettability -wettable -wetted -wetter -wetting -wettish -weve -wevet -wey -wha -whabby -whack -whacker -whacking -whacky -whafabout -whale -whaleback -whalebacker -whalebird -whaleboat -whalebone -whaleboned -whaledom -whalehead -whalelike -whaleman -whaler -whaleroad -whalery -whaleship -whaling -whalish -whally -whalm -whalp -whaly -wham -whamble -whame -whammle -whamp -whampee -whample -whan -whand -whang -whangable -whangam -whangdoodle -whangee -whanghee -whank -whap -whappet -whapuka -whapukee -whapuku -whar -whare -whareer -wharf -wharfage -wharfhead -wharfholder -wharfing -wharfinger -wharfland -wharfless -wharfman -wharfmaster -wharfrae -wharfside -wharl -wharp -wharry -whart -wharve -whase -whasle -what -whata -whatabouts -whatever -whatkin -whatlike -whatna -whatness -whatnot -whatreck -whats -whatso -whatsoeer -whatsoever -whatsomever -whatten -whau -whauk -whaup -whaur -whauve -wheal -whealworm -whealy -wheam -wheat -wheatbird -wheatear -wheateared -wheaten -wheatgrower -wheatland -wheatless -wheatlike -wheatstalk -wheatworm -wheaty -whedder -whee -wheedle -wheedler -wheedlesome -wheedling -wheedlingly -wheel -wheelage -wheelband -wheelbarrow -wheelbarrowful -wheelbird -wheelbox -wheeldom -wheeled -wheeler -wheelery -wheelhouse -wheeling -wheelingly -wheelless -wheellike -wheelmaker -wheelmaking -wheelman -wheelrace -wheelroad -wheelsman -wheelsmith -wheelspin -wheelswarf -wheelway -wheelwise -wheelwork -wheelwright -wheelwrighting -wheely -wheem -wheen -wheencat -wheenge -wheep -wheeple -wheer -wheerikins -wheesht -wheetle -wheeze -wheezer -wheezily -wheeziness -wheezingly -wheezle -wheezy -wheft -whein -whekau -wheki -whelk -whelked -whelker -whelklike -whelky -whelm -whelp -whelphood -whelpish -whelpless -whelpling -whelve -whemmel -when -whenabouts -whenas -whence -whenceeer -whenceforth -whenceforward -whencesoeer -whencesoever -whencever -wheneer -whenever -whenness -whenso -whensoever -whensomever -where -whereabout -whereabouts -whereafter -whereanent -whereas -whereat -whereaway -whereby -whereer -wherefor -wherefore -wherefrom -wherein -whereinsoever -whereinto -whereness -whereof -whereon -whereout -whereover -whereso -wheresoeer -wheresoever -wheresomever -wherethrough -wheretill -whereto -wheretoever -wheretosoever -whereunder -whereuntil -whereunto -whereup -whereupon -wherever -wherewith -wherewithal -wherret -wherrit -wherry -wherryman -whet -whether -whetile -whetrock -whetstone -whetter -whew -whewellite -whewer -whewl -whewt -whey -wheybeard -wheyey -wheyeyness -wheyface -wheyfaced -wheyish -wheyishness -wheylike -wheyness -whiba -which -whichever -whichsoever -whichway -whichways -whick -whicken -whicker -whid -whidah -whidder -whiff -whiffenpoof -whiffer -whiffet -whiffle -whiffler -whifflery -whiffletree -whiffling -whifflingly -whiffy -whift -whig -whiggamore -whigmaleerie -whigship -whikerby -while -whileen -whilere -whiles -whilie -whilk -whill -whillaballoo -whillaloo -whillilew -whilly -whillywha -whilock -whilom -whils -whilst -whilter -whim -whimberry -whimble -whimbrel -whimling -whimmy -whimper -whimperer -whimpering -whimperingly -whimsey -whimsic -whimsical -whimsicality -whimsically -whimsicalness -whimsied -whimstone -whimwham -whin -whinberry -whinchacker -whinchat -whincheck -whincow -whindle -whine -whiner -whinestone -whing -whinge -whinger -whininess -whiningly -whinnel -whinner -whinnock -whinny -whinstone -whiny -whinyard -whip -whipbelly -whipbird -whipcat -whipcord -whipcordy -whipcrack -whipcracker -whipcraft -whipgraft -whipjack -whipking -whiplash -whiplike -whipmaker -whipmaking -whipman -whipmanship -whipmaster -whippa -whippable -whipparee -whipped -whipper -whippersnapper -whippertail -whippet -whippeter -whippiness -whipping -whippingly -whippletree -whippoorwill -whippost -whippowill -whippy -whipsaw -whipsawyer -whipship -whipsocket -whipstaff -whipstalk -whipstall -whipster -whipstick -whipstitch -whipstock -whipt -whiptail -whiptree -whipwise -whipworm -whir -whirken -whirl -whirlabout -whirlblast -whirlbone -whirlbrain -whirled -whirler -whirley -whirlgig -whirlicane -whirligig -whirlimagig -whirling -whirlingly -whirlmagee -whirlpool -whirlpuff -whirlwig -whirlwind -whirlwindish -whirlwindy -whirly -whirlygigum -whirret -whirrey -whirroo -whirry -whirtle -whish -whisk -whisker -whiskerage -whiskerando -whiskerandoed -whiskered -whiskerer -whiskerette -whiskerless -whiskerlike -whiskery -whiskey -whiskful -whiskied -whiskified -whisking -whiskingly -whisky -whiskyfied -whiskylike -whisp -whisper -whisperable -whisperation -whispered -whisperer -whisperhood -whispering -whisperingly -whisperingness -whisperless -whisperous -whisperously -whisperproof -whispery -whissle -whist -whister -whisterpoop -whistle -whistlebelly -whistlefish -whistlelike -whistler -whistlerism -whistlewing -whistlewood -whistlike -whistling -whistlingly -whistly -whistness -whit -white -whiteback -whitebait -whitebark -whitebeard -whitebelly -whitebill -whitebird -whiteblaze -whiteblow -whitebottle -whitecap -whitecapper -whitecoat -whitecomb -whitecorn -whitecup -whited -whiteface -whitefish -whitefisher -whitefishery -whitefoot -whitefootism -whitehanded -whitehass -whitehawse -whitehead -whiteheart -whitehearted -whitelike -whitely -whiten -whitener -whiteness -whitening -whitenose -whitepot -whiteroot -whiterump -whites -whitesark -whiteseam -whiteshank -whiteside -whitesmith -whitestone -whitetail -whitethorn -whitethroat -whitetip -whitetop -whitevein -whitewall -whitewards -whiteware -whitewash -whitewasher -whiteweed -whitewing -whitewood -whiteworm -whitewort -whitfinch -whither -whitherso -whithersoever -whitherto -whitherward -whiting -whitish -whitishness -whitleather -whitling -whitlow -whitlowwort -whitneyite -whitrack -whits -whitster -whittaw -whitten -whittener -whitter -whitterick -whittle -whittler -whittling -whittret -whittrick -whity -whiz -whizgig -whizzer -whizzerman -whizziness -whizzing -whizzingly -whizzle -who -whoa -whodunit -whoever -whole -wholehearted -wholeheartedly -wholeheartedness -wholeness -wholesale -wholesalely -wholesaleness -wholesaler -wholesome -wholesomely -wholesomeness -wholewise -wholly -whom -whomble -whomever -whomso -whomsoever -whone -whoo -whoof -whoop -whoopee -whooper -whooping -whoopingly -whooplike -whoops -whoosh -whop -whopper -whopping -whorage -whore -whoredom -whorelike -whoremaster -whoremasterly -whoremastery -whoremonger -whoremonging -whoreship -whoreson -whorish -whorishly -whorishness -whorl -whorled -whorlflower -whorly -whorlywort -whort -whortle -whortleberry -whose -whosen -whosesoever -whosever -whosomever -whosumdever -whud -whuff -whuffle -whulk -whulter -whummle -whun -whunstane -whup -whush -whuskie -whussle -whute -whuther -whutter -whuttering -whuz -why -whyever -whyfor -whyness -whyo -wi -wice -wicht -wichtisite -wichtje -wick -wickawee -wicked -wickedish -wickedlike -wickedly -wickedness -wicken -wicker -wickerby -wickerware -wickerwork -wickerworked -wickerworker -wicket -wicketkeep -wicketkeeper -wicketkeeping -wicketwork -wicking -wickiup -wickless -wickup -wicky -wicopy -wid -widbin -widdendream -widder -widdershins -widdifow -widdle -widdy -wide -widegab -widehearted -widely -widemouthed -widen -widener -wideness -widespread -widespreadedly -widespreadly -widespreadness -widewhere -widework -widgeon -widish -widow -widowed -widower -widowered -widowerhood -widowership -widowery -widowhood -widowish -widowlike -widowly -widowman -widowy -width -widthless -widthway -widthways -widthwise -widu -wield -wieldable -wielder -wieldiness -wieldy -wiener -wienerwurst -wienie -wierangle -wiesenboden -wife -wifecarl -wifedom -wifehood -wifeism -wifekin -wifeless -wifelessness -wifelet -wifelike -wifeling -wifelkin -wifely -wifeship -wifeward -wifie -wifiekie -wifish -wifock -wig -wigan -wigdom -wigful -wigged -wiggen -wigger -wiggery -wigging -wiggish -wiggishness -wiggism -wiggle -wiggler -wiggly -wiggy -wight -wightly -wightness -wigless -wiglet -wiglike -wigmaker -wigmaking -wigtail -wigwag -wigwagger -wigwam -wiikite -wild -wildbore -wildcat -wildcatter -wildcatting -wildebeest -wilded -wilder -wilderedly -wildering -wilderment -wilderness -wildfire -wildfowl -wildgrave -wilding -wildish -wildishly -wildishness -wildlife -wildlike -wildling -wildly -wildness -wildsome -wildwind -wile -wileful -wileless -wileproof -wilga -wilgers -wilily -wiliness -wilk -wilkeite -wilkin -will -willable -willawa -willed -willedness -willemite -willer -willet -willey -willeyer -willful -willfully -willfulness -williamsite -willie -willier -willies -willing -willinghearted -willinghood -willingly -willingness -williwaw -willmaker -willmaking -willness -willock -willow -willowbiter -willowed -willower -willowish -willowlike -willowware -willowweed -willowworm -willowwort -willowy -willy -willyard -willyart -willyer -wilsome -wilsomely -wilsomeness -wilt -wilter -wiltproof -wily -wim -wimberry -wimble -wimblelike -wimbrel -wime -wimick -wimple -wimpleless -wimplelike -win -winberry -wince -wincer -wincey -winch -wincher -winchman -wincing -wincingly -wind -windable -windage -windbag -windbagged -windbaggery -windball -windberry -windbibber -windbore -windbracing -windbreak -windbreaker -windbroach -windclothes -windcuffer -winddog -winded -windedly -windedness -winder -windermost -windfall -windfallen -windfanner -windfirm -windfish -windflaw -windflower -windgall -windgalled -windhole -windhover -windigo -windily -windiness -winding -windingly -windingness -windjammer -windjamming -windlass -windlasser -windle -windles -windless -windlessly -windlessness -windlestrae -windlestraw -windlike -windlin -windling -windmill -windmilly -windock -windore -window -windowful -windowless -windowlessness -windowlet -windowlight -windowlike -windowmaker -windowmaking -windowman -windowpane -windowpeeper -windowshut -windowward -windowwards -windowwise -windowy -windpipe -windplayer -windproof -windring -windroad -windroot -windrow -windrower -windscreen -windshield -windshock -windsorite -windstorm -windsucker -windtight -windup -windward -windwardly -windwardmost -windwardness -windwards -windway -windwayward -windwaywardly -windy -wine -wineball -wineberry -winebibber -winebibbery -winebibbing -wineconner -wined -wineglass -wineglassful -winegrower -winegrowing -winehouse -wineless -winelike -winemay -winepot -winer -winery -wineshop -wineskin -winesop -winetaster -winetree -winevat -winful -wing -wingable -wingbeat -wingcut -winged -wingedly -wingedness -winger -wingfish -winghanded -wingle -wingless -winglessness -winglet -winglike -wingman -wingmanship -wingpiece -wingpost -wingseed -wingspread -wingstem -wingy -winish -wink -winkel -winkelman -winker -winkered -winking -winkingly -winkle -winklehawk -winklehole -winklet -winly -winna -winnable -winnard -winnel -winnelstrae -winner -winning -winningly -winningness -winnings -winninish -winnle -winnonish -winnow -winnower -winnowing -winnowingly -winrace -winrow -winsome -winsomely -winsomeness -wint -winter -winterage -winterberry -winterbloom -winterbourne -winterdykes -wintered -winterer -winterfeed -wintergreen -winterhain -wintering -winterish -winterishly -winterishness -winterization -winterize -winterkill -winterkilling -winterless -winterlike -winterliness -winterling -winterly -winterproof -wintersome -wintertide -wintertime -winterward -winterwards -winterweed -wintle -wintrify -wintrily -wintriness -wintrish -wintrous -wintry -winy -winze -winzeman -wipe -wiper -wippen -wips -wir -wirable -wirble -wird -wire -wirebar -wirebird -wired -wiredancer -wiredancing -wiredraw -wiredrawer -wiredrawn -wirehair -wireless -wirelessly -wirelessness -wirelike -wiremaker -wiremaking -wireman -wiremonger -wirepull -wirepuller -wirepulling -wirer -wiresmith -wirespun -wiretail -wireway -wireweed -wirework -wireworker -wireworking -wireworks -wireworm -wirily -wiriness -wiring -wirl -wirling -wirr -wirra -wirrah -wirrasthru -wiry -wis -wisdom -wisdomful -wisdomless -wisdomproof -wisdomship -wise -wiseacre -wiseacred -wiseacredness -wiseacredom -wiseacreish -wiseacreishness -wiseacreism -wisecrack -wisecracker -wisecrackery -wisehead -wisehearted -wiseheartedly -wiseheimer -wiselike -wiseling -wisely -wiseman -wisen -wiseness -wisenheimer -wisent -wiser -wiseweed -wisewoman -wish -wisha -wishable -wishbone -wished -wishedly -wisher -wishful -wishfully -wishfulness -wishing -wishingly -wishless -wishly -wishmay -wishness -wisht -wishtonwish -wisket -wiskinky -wisp -wispish -wisplike -wispy -wiss -wisse -wissel -wist -wistaria -wiste -wistened -wisteria -wistful -wistfully -wistfulness -wistit -wistiti -wistless -wistlessness -wistonwish -wit -witan -witch -witchbells -witchcraft -witched -witchedly -witchen -witchering -witchery -witchet -witchetty -witchhood -witching -witchingly -witchleaf -witchlike -witchman -witchmonger -witchuck -witchweed -witchwife -witchwoman -witchwood -witchwork -witchy -witcraft -wite -witeless -witenagemot -witepenny -witess -witful -with -withal -withamite -withdraught -withdraw -withdrawable -withdrawal -withdrawer -withdrawing -withdrawingness -withdrawment -withdrawn -withdrawnness -withe -withen -wither -witherband -withered -witheredly -witheredness -witherer -withergloom -withering -witheringly -witherite -witherly -withernam -withers -withershins -withertip -witherwards -witherweight -withery -withewood -withheld -withhold -withholdable -withholdal -withholder -withholdment -within -withindoors -withinside -withinsides -withinward -withinwards -withness -witholden -without -withoutdoors -withouten -withoutforth -withoutside -withoutwards -withsave -withstand -withstander -withstandingness -withstay -withstood -withstrain -withvine -withwind -withy -withypot -withywind -witjar -witless -witlessly -witlessness -witlet -witling -witloof -witmonger -witness -witnessable -witnessdom -witnesser -witney -witneyer -witship -wittal -wittawer -witteboom -witted -witter -wittering -witticaster -wittichenite -witticism -witticize -wittified -wittily -wittiness -witting -wittingly -wittol -wittolly -witty -witwall -witzchoura -wive -wiver -wivern -wiz -wizard -wizardess -wizardism -wizardlike -wizardly -wizardry -wizardship -wizen -wizened -wizenedness -wizier -wizzen -wloka -wo -woad -woader -woadman -woadwaxen -woady -woak -woald -woan -wob -wobbegong -wobble -wobbler -wobbliness -wobbling -wobblingly -wobbly -wobster -wocheinite -wod -woddie -wode -wodge -wodgy -woe -woebegone -woebegoneness -woebegonish -woeful -woefully -woefulness -woehlerite -woesome -woevine -woeworn -woffler -woft -wog -wogiet -woibe -wokas -woke -wokowi -wold -woldlike -woldsman -woldy -wolf -wolfachite -wolfberry -wolfdom -wolfen -wolfer -wolfhood -wolfhound -wolfish -wolfishly -wolfishness -wolfkin -wolfless -wolflike -wolfling -wolfram -wolframate -wolframic -wolframine -wolframinium -wolframite -wolfsbane -wolfsbergite -wolfskin -wolfward -wolfwards -wollastonite -wollomai -wollop -wolter -wolve -wolveboon -wolver -wolverine -woman -womanbody -womandom -womanfolk -womanfully -womanhead -womanhearted -womanhood -womanhouse -womanish -womanishly -womanishness -womanism -womanist -womanity -womanization -womanize -womanizer -womankind -womanless -womanlike -womanliness -womanly -womanmuckle -womanness -womanpost -womanproof -womanship -womanways -womanwise -womb -wombat -wombed -womble -wombstone -womby -womenfolk -womenfolks -womenkind -womera -wommerala -won -wonder -wonderberry -wonderbright -wondercraft -wonderer -wonderful -wonderfully -wonderfulness -wondering -wonderingly -wonderland -wonderlandish -wonderless -wonderment -wondermonger -wondermongering -wondersmith -wondersome -wonderstrong -wonderwell -wonderwork -wonderworthy -wondrous -wondrously -wondrousness -wone -wonegan -wong -wonga -wongen -wongshy -wongsky -woning -wonky -wonna -wonned -wonner -wonning -wonnot -wont -wonted -wontedly -wontedness -wonting -woo -wooable -wood -woodagate -woodbark -woodbin -woodbind -woodbine -woodbined -woodbound -woodburytype -woodbush -woodchat -woodchuck -woodcock -woodcockize -woodcracker -woodcraft -woodcrafter -woodcraftiness -woodcraftsman -woodcrafty -woodcut -woodcutter -woodcutting -wooded -wooden -woodendite -woodenhead -woodenheaded -woodenheadedness -woodenly -woodenness -woodenware -woodenweary -woodeny -woodfish -woodgeld -woodgrub -woodhack -woodhacker -woodhole -woodhorse -woodhouse -woodhung -woodine -woodiness -wooding -woodish -woodjobber -woodkern -woodknacker -woodland -woodlander -woodless -woodlessness -woodlet -woodlike -woodlocked -woodly -woodman -woodmancraft -woodmanship -woodmonger -woodmote -woodness -woodpeck -woodpecker -woodpenny -woodpile -woodprint -woodranger -woodreeve -woodrick -woodrock -woodroof -woodrow -woodrowel -woodruff -woodsere -woodshed -woodshop -woodside -woodsilver -woodskin -woodsman -woodspite -woodstone -woodsy -woodwall -woodward -woodwardship -woodware -woodwax -woodwaxen -woodwise -woodwork -woodworker -woodworking -woodworm -woodwose -woodwright -woody -woodyard -wooer -woof -woofed -woofell -woofer -woofy -woohoo -wooing -wooingly -wool -woold -woolder -woolding -wooled -woolen -woolenet -woolenization -woolenize -wooler -woolert -woolfell -woolgatherer -woolgathering -woolgrower -woolgrowing -woolhead -wooliness -woollike -woolly -woollyhead -woollyish -woolman -woolpack -woolpress -woolsack -woolsey -woolshearer -woolshearing -woolshears -woolshed -woolskin -woolsorter -woolsorting -woolsower -woolstock -woolulose -woolwasher -woolweed -woolwheel -woolwinder -woolwork -woolworker -woolworking -woom -woomer -woomerang -woon -woons -woorali -woorari -woosh -wootz -woozle -woozy -wop -woppish -wops -worble -worcester -word -wordable -wordably -wordage -wordbook -wordbuilding -wordcraft -wordcraftsman -worded -worder -wordily -wordiness -wording -wordish -wordishly -wordishness -wordle -wordless -wordlessly -wordlessness -wordlike -wordlorist -wordmaker -wordmaking -wordman -wordmanship -wordmonger -wordmongering -wordmongery -wordplay -wordsman -wordsmanship -wordsmith -wordspite -wordster -wordy -wore -work -workability -workable -workableness -workaday -workaway -workbag -workbasket -workbench -workbook -workbox -workbrittle -workday -worked -worker -workfellow -workfolk -workfolks -workgirl -workhand -workhouse -workhoused -working -workingly -workingman -workingwoman -workless -worklessness -workloom -workman -workmanlike -workmanlikeness -workmanliness -workmanly -workmanship -workmaster -workmistress -workout -workpan -workpeople -workpiece -workplace -workroom -works -workship -workshop -worksome -workstand -worktable -worktime -workways -workwise -workwoman -workwomanlike -workwomanly -worky -workyard -world -worlded -worldful -worldish -worldless -worldlet -worldlike -worldlily -worldliness -worldling -worldly -worldmaker -worldmaking -worldproof -worldquake -worldward -worldwards -worldway -worldy -worm -wormed -wormer -wormhole -wormholed -wormhood -wormil -worming -wormless -wormlike -wormling -wormproof -wormroot -wormseed -wormship -wormweed -wormwood -wormy -worn -wornil -wornness -worral -worriable -worricow -worried -worriedly -worriedness -worrier -worriless -worriment -worrisome -worrisomely -worrisomeness -worrit -worriter -worry -worrying -worryingly -worryproof -worrywart -worse -worsement -worsen -worseness -worsening -worser -worserment -worset -worship -worshipability -worshipable -worshiper -worshipful -worshipfully -worshipfulness -worshipingly -worshipless -worshipworth -worshipworthy -worst -worsted -wort -worth -worthful -worthfulness -worthiest -worthily -worthiness -worthless -worthlessly -worthlessness -worthship -worthward -worthy -wosbird -wot -wote -wots -wottest -wotteth -woubit -wouch -wouf -wough -would -wouldest -wouldnt -wouldst -wound -woundability -woundable -woundableness -wounded -woundedly -wounder -woundily -wounding -woundingly -woundless -wounds -woundwort -woundworth -woundy -wourali -wourari -wournil -wove -woven -wow -wowser -wowserdom -wowserian -wowserish -wowserism -wowsery -wowt -woy -wrack -wracker -wrackful -wraggle -wrainbolt -wrainstaff -wrainstave -wraith -wraithe -wraithlike -wraithy -wraitly -wramp -wran -wrang -wrangle -wrangler -wranglership -wranglesome -wranglingly -wrannock -wranny -wrap -wrappage -wrapped -wrapper -wrapperer -wrappering -wrapping -wraprascal -wrasse -wrastle -wrastler -wrath -wrathful -wrathfully -wrathfulness -wrathily -wrathiness -wrathlike -wrathy -wraw -wrawl -wrawler -wraxle -wreak -wreakful -wreakless -wreat -wreath -wreathage -wreathe -wreathed -wreathen -wreather -wreathingly -wreathless -wreathlet -wreathlike -wreathmaker -wreathmaking -wreathwise -wreathwork -wreathwort -wreathy -wreck -wreckage -wrecker -wreckfish -wreckful -wrecking -wrecky -wren -wrench -wrenched -wrencher -wrenchingly -wrenlet -wrenlike -wrentail -wrest -wrestable -wrester -wresting -wrestingly -wrestle -wrestler -wrestlerlike -wrestling -wretch -wretched -wretchedly -wretchedness -wretchless -wretchlessly -wretchlessness -wretchock -wricht -wrick -wride -wried -wrier -wriest -wrig -wriggle -wriggler -wrigglesome -wrigglingly -wriggly -wright -wrightine -wring -wringbolt -wringer -wringman -wringstaff -wrinkle -wrinkleable -wrinkled -wrinkledness -wrinkledy -wrinkleful -wrinkleless -wrinkleproof -wrinklet -wrinkly -wrist -wristband -wristbone -wristed -wrister -wristfall -wristikin -wristlet -wristlock -wristwork -writ -writability -writable -writation -writative -write -writeable -writee -writer -writeress -writerling -writership -writh -writhe -writhed -writhedly -writhedness -writhen -writheneck -writher -writhing -writhingly -writhy -writing -writinger -writmaker -writmaking -writproof -written -writter -wrive -wrizzled -wro -wrocht -wroke -wroken -wrong -wrongdoer -wrongdoing -wronged -wronger -wrongful -wrongfully -wrongfulness -wronghead -wrongheaded -wrongheadedly -wrongheadedness -wronghearted -wrongheartedly -wrongheartedness -wrongish -wrongless -wronglessly -wrongly -wrongness -wrongous -wrongously -wrongousness -wrongwise -wrossle -wrote -wroth -wrothful -wrothfully -wrothily -wrothiness -wrothly -wrothsome -wrothy -wrought -wrox -wrung -wrungness -wry -wrybill -wryly -wrymouth -wryneck -wryness -wrytail -wud -wuddie -wudge -wudu -wugg -wulfenite -wulk -wull -wullawins -wullcat -wulliwa -wumble -wumman -wummel -wun -wungee -wunna -wunner -wunsome -wup -wur -wurley -wurmal -wurrus -wurset -wurtzilite -wurtzite -wurzel -wush -wusp -wuss -wusser -wust -wut -wuther -wuzu -wuzzer -wuzzle -wuzzy -wy -wyde -wye -wyke -wyle -wyliecoat -wymote -wyn -wynd -wyne -wynkernel -wynn -wyomingite -wype -wyson -wyss -wyve -wyver -x -xanthaline -xanthamic -xanthamide -xanthane -xanthate -xanthation -xanthein -xanthelasma -xanthelasmic -xanthelasmoidea -xanthene -xanthic -xanthide -xanthin -xanthine -xanthinuria -xanthione -xanthite -xanthiuria -xanthocarpous -xanthochroia -xanthochroid -xanthochroism -xanthochromia -xanthochromic -xanthochroous -xanthocobaltic -xanthocone -xanthoconite -xanthocreatinine -xanthocyanopsia -xanthocyanopsy -xanthocyanopy -xanthoderm -xanthoderma -xanthodont -xanthodontous -xanthogen -xanthogenamic -xanthogenamide -xanthogenate -xanthogenic -xantholeucophore -xanthoma -xanthomata -xanthomatosis -xanthomatous -xanthomelanous -xanthometer -xanthomyeloma -xanthone -xanthophane -xanthophore -xanthophose -xanthophyll -xanthophyllite -xanthophyllous -xanthopia -xanthopicrin -xanthopicrite -xanthoproteic -xanthoprotein -xanthoproteinic -xanthopsia -xanthopsin -xanthopsydracia -xanthopterin -xanthopurpurin -xanthorhamnin -xanthorrhoea -xanthosiderite -xanthosis -xanthospermous -xanthotic -xanthous -xanthoxenite -xanthoxylin -xanthuria -xanthydrol -xanthyl -xarque -xebec -xenacanthine -xenagogue -xenagogy -xenarthral -xenarthrous -xenelasia -xenelasy -xenia -xenial -xenian -xenium -xenobiosis -xenoblast -xenocryst -xenodochium -xenogamous -xenogamy -xenogenesis -xenogenetic -xenogenic -xenogenous -xenogeny -xenolite -xenolith -xenolithic -xenomania -xenomaniac -xenomorphic -xenomorphosis -xenon -xenoparasite -xenoparasitism -xenopeltid -xenophile -xenophilism -xenophobe -xenophobia -xenophobian -xenophobism -xenophoby -xenophoran -xenophthalmia -xenophya -xenopodid -xenopodoid -xenopteran -xenopterygian -xenosaurid -xenosauroid -xenotime -xenyl -xenylamine -xerafin -xeransis -xeranthemum -xerantic -xerarch -xerasia -xeric -xerically -xeriff -xerocline -xeroderma -xerodermatic -xerodermatous -xerodermia -xerodermic -xerogel -xerography -xeroma -xeromata -xeromenia -xeromorph -xeromorphic -xeromorphous -xeromorphy -xeromyron -xeromyrum -xeronate -xeronic -xerophagia -xerophagy -xerophil -xerophile -xerophilous -xerophily -xerophobous -xerophthalmia -xerophthalmos -xerophthalmy -xerophyte -xerophytic -xerophytically -xerophytism -xeroprinting -xerosis -xerostoma -xerostomia -xerotes -xerotherm -xerotic -xerotocia -xerotripsis -xi -xiphias -xiphihumeralis -xiphiid -xiphiiform -xiphioid -xiphiplastra -xiphiplastral -xiphiplastron -xiphisterna -xiphisternal -xiphisternum -xiphisuran -xiphocostal -xiphodynia -xiphoid -xiphoidal -xiphoidian -xiphopagic -xiphopagous -xiphopagus -xiphophyllous -xiphosterna -xiphosternum -xiphosuran -xiphosure -xiphosurous -xiphuous -xiphydriid -xoana -xoanon -xurel -xyla -xylan -xylate -xylem -xylene -xylenol -xylenyl -xyletic -xylic -xylidic -xylidine -xylindein -xylinid -xylite -xylitol -xylitone -xylobalsamum -xylocarp -xylocarpous -xylocopid -xylogen -xyloglyphy -xylograph -xylographer -xylographic -xylographical -xylographically -xylography -xyloid -xyloidin -xylol -xylology -xyloma -xylomancy -xylometer -xylon -xylonic -xylonitrile -xylophagan -xylophage -xylophagid -xylophagous -xylophilous -xylophone -xylophonic -xylophonist -xyloplastic -xylopyrography -xyloquinone -xylorcin -xylorcinol -xylose -xyloside -xylostroma -xylostromata -xylostromatoid -xylotile -xylotomist -xylotomous -xylotomy -xylotypographic -xylotypography -xyloyl -xylyl -xylylene -xylylic -xyphoid -xyrid -xyridaceous -xyst -xyster -xysti -xystos -xystum -xystus -y -ya -yaba -yabber -yabbi -yabble -yabby -yabu -yacal -yacca -yachan -yacht -yachtdom -yachter -yachting -yachtist -yachtman -yachtmanship -yachtsman -yachtsmanlike -yachtsmanship -yachtswoman -yachty -yad -yade -yaff -yaffingale -yaffle -yagger -yaghourt -yagi -yagourundi -yagua -yaguarundi -yaguaza -yah -yahan -yahoo -yair -yaird -yaje -yajeine -yajenine -yajnopavita -yak -yakalo -yakamik -yakattalo -yakin -yakka -yakman -yalb -yale -yali -yalla -yallaer -yallow -yam -yamamai -yamanai -yamaskite -yamen -yamilke -yammadji -yammer -yamp -yampa -yamph -yamshik -yamstchik -yan -yancopin -yander -yang -yangtao -yank -yanking -yanky -yaoort -yaourti -yap -yapa -yaply -yapness -yapok -yapp -yapped -yapper -yappiness -yapping -yappingly -yappish -yappy -yapster -yar -yarak -yaray -yarb -yard -yardage -yardang -yardarm -yarder -yardful -yarding -yardkeep -yardland -yardman -yardmaster -yardsman -yardstick -yardwand -yare -yareta -yark -yarke -yarl -yarly -yarm -yarn -yarnen -yarner -yarnwindle -yarpha -yarr -yarraman -yarran -yarringle -yarrow -yarth -yarthen -yarwhelp -yarwhip -yas -yashiro -yashmak -yat -yataghan -yatalite -yate -yati -yatter -yaud -yauld -yaupon -yautia -yava -yaw -yawl -yawler -yawlsman -yawmeter -yawn -yawner -yawney -yawnful -yawnfully -yawnily -yawniness -yawning -yawningly -yawnproof -yawnups -yawny -yawp -yawper -yawroot -yaws -yawweed -yawy -yaxche -yaya -ycie -yday -ye -yea -yeah -yealing -yean -yeanling -year -yeara -yearbird -yearbook -yeard -yearday -yearful -yearling -yearlong -yearly -yearn -yearnful -yearnfully -yearnfulness -yearning -yearnling -yearock -yearth -yeast -yeastily -yeastiness -yeasting -yeastlike -yeasty -yeat -yeather -yed -yede -yee -yeel -yeelaman -yees -yegg -yeggman -yeguita -yeld -yeldrin -yeldrock -yelk -yell -yeller -yelling -yelloch -yellow -yellowammer -yellowback -yellowbelly -yellowberry -yellowbill -yellowbird -yellowcrown -yellowcup -yellowfin -yellowfish -yellowhammer -yellowhead -yellowing -yellowish -yellowishness -yellowlegs -yellowly -yellowness -yellowroot -yellowrump -yellows -yellowseed -yellowshank -yellowshanks -yellowshins -yellowtail -yellowthorn -yellowthroat -yellowtop -yellowware -yellowweed -yellowwood -yellowwort -yellowy -yelm -yelmer -yelp -yelper -yelt -yen -yender -yeni -yenite -yentnite -yeo -yeoman -yeomaness -yeomanette -yeomanhood -yeomanlike -yeomanly -yeomanry -yeomanwise -yeorling -yeowoman -yep -yer -yerb -yerba -yercum -yerd -yere -yerga -yerk -yern -yerth -yes -yese -yeso -yesso -yest -yester -yesterday -yestereve -yestereven -yesterevening -yestermorn -yestermorning -yestern -yesternight -yesternoon -yesterweek -yesteryear -yestreen -yesty -yet -yeta -yetapa -yeth -yether -yetlin -yeuk -yeukieness -yeuky -yeven -yew -yex -yez -yezzy -ygapo -yield -yieldable -yieldableness -yieldance -yielden -yielder -yielding -yieldingly -yieldingness -yieldy -yigh -yill -yilt -yin -yince -yinst -yip -yird -yirk -yirm -yirmilik -yirn -yirr -yirth -yis -yite -ym -yn -ynambu -yo -yobi -yocco -yochel -yock -yockel -yodel -yodeler -yodelist -yodh -yoe -yoga -yogasana -yogh -yoghurt -yogi -yogin -yogism -yogist -yogoite -yohimbe -yohimbi -yohimbine -yohimbinization -yohimbinize -yoi -yoick -yoicks -yojan -yojana -yok -yoke -yokeable -yokeableness -yokeage -yokefellow -yokel -yokeldom -yokeless -yokelish -yokelism -yokelry -yokemate -yokemating -yoker -yokewise -yokewood -yoking -yoky -yolden -yoldring -yolk -yolked -yolkiness -yolkless -yolky -yom -yomer -yon -yoncopin -yond -yonder -yonner -yonside -yont -yook -yoop -yor -yore -yoretime -york -yorker -yot -yotacism -yotacize -yote -you -youd -youden -youdendrift -youdith -youff -youl -young -youngberry -younger -younghearted -youngish -younglet -youngling -youngly -youngness -youngster -youngun -younker -youp -your -yourn -yours -yoursel -yourself -yourselves -youse -youth -youthen -youthful -youthfullity -youthfully -youthfulness -youthhead -youthheid -youthhood -youthily -youthless -youthlessness -youthlike -youthlikeness -youthsome -youthtide -youthwort -youthy -youve -youward -youwards -youze -yoven -yow -yowie -yowl -yowler -yowley -yowlring -yowt -yox -yoy -yperite -ypsiliform -ypsiloid -yr -ytterbia -ytterbic -ytterbium -yttria -yttrialite -yttric -yttriferous -yttrious -yttrium -yttrocerite -yttrocolumbite -yttrocrasite -yttrofluorite -yttrogummite -yttrotantalite -yuan -yuca -yucca -yuck -yuckel -yucker -yuckle -yucky -yuft -yugada -yuh -yukkel -yulan -yule -yuleblock -yuletide -yummy -yungan -yurt -yurta -yus -yusdrum -yutu -yuzlik -yuzluk -z -za -zabaglione -zabeta -zabra -zabti -zabtie -zac -zacate -zacaton -zachun -zad -zadruga -zaffar -zaffer -zafree -zag -zagged -zaibatsu -zain -zak -zakkeu -zalambdodont -zaman -zamang -zamarra -zamarro -zambo -zamboorak -zamindar -zamindari -zamorin -zamouse -zander -zandmole -zanella -zant -zante -zantewood -zanthoxylum -zantiote -zany -zanyish -zanyism -zanyship -zanze -zapas -zapatero -zaphara -zaphrentid -zaphrentoid -zapota -zaptiah -zaptieh -zapupe -zaqqum -zar -zarabanda -zaratite -zareba -zarf -zarnich -zarp -zarzuela -zat -zati -zattare -zax -zayat -zayin -zeal -zealful -zealless -zeallessness -zealot -zealotic -zealotical -zealotism -zealotist -zealotry -zealous -zealously -zealousness -zealousy -zealproof -zebra -zebraic -zebralike -zebrass -zebrawood -zebrine -zebrinny -zebroid -zebrula -zebrule -zebu -zebub -zeburro -zecchini -zecchino -zechin -zed -zedoary -zee -zeed -zehner -zein -zeism -zeist -zel -zelator -zelatrice -zelatrix -zemeism -zemi -zemimdari -zemindar -zemmi -zemni -zemstroist -zemstvo -zenana -zendician -zendik -zendikite -zenick -zenith -zenithal -zenithward -zenithwards -zenocentric -zenographic -zenographical -zenography -zenu -zeolite -zeolitic -zeolitization -zeolitize -zeoscope -zepharovichite -zephyr -zephyrean -zephyrless -zephyrlike -zephyrous -zephyrus -zephyry -zeppelin -zequin -zer -zerda -zermahbub -zero -zeroaxial -zeroize -zerumbet -zest -zestful -zestfully -zestfulness -zesty -zeta -zetacism -zetetic -zeuctocoelomatic -zeuctocoelomic -zeuglodon -zeuglodont -zeuglodontoid -zeugma -zeugmatic -zeugmatically -zeunerite -zeuzerian -ziamet -ziara -ziarat -zibeline -zibet -zibethone -zibetone -zibetum -ziega -zieger -zietrisikite -ziffs -zig -ziganka -ziggurat -zigzag -zigzagged -zigzaggedly -zigzaggedness -zigzagger -zigzaggery -zigzaggy -zigzagwise -zihar -zikurat -zillah -zimarra -zimb -zimbabwe -zimbalon -zimbaloon -zimbi -zimentwater -zimme -zimmi -zimmis -zimocca -zinc -zincate -zincic -zincide -zinciferous -zincification -zincify -zincing -zincite -zincize -zincke -zincky -zinco -zincograph -zincographer -zincographic -zincographical -zincography -zincotype -zincous -zincum -zincuret -zinfandel -zing -zingaresca -zingel -zingerone -zingiberaceous -zingiberene -zingiberol -zingiberone -zink -zinkenite -zinnwaldite -zinsang -zinyamunga -zinziberaceous -zip -ziphian -ziphioid -zipper -zipping -zippingly -zippy -zira -zirai -zircite -zircofluoride -zircon -zirconate -zirconia -zirconian -zirconic -zirconiferous -zirconifluoride -zirconium -zirconofluoride -zirconoid -zirconyl -zirkelite -zither -zitherist -zizz -zloty -zo -zoa -zoacum -zoanthacean -zoantharian -zoanthid -zoanthodeme -zoanthodemic -zoanthoid -zoanthropy -zoarcidae -zoaria -zoarial -zoarium -zobo -zobtenite -zocco -zoccolo -zodiac -zodiacal -zodiophilous -zoea -zoeaform -zoeal -zoeform -zoehemera -zoehemerae -zoetic -zoetrope -zoetropic -zogan -zogo -zoiatria -zoiatrics -zoic -zoid -zoidiophilous -zoidogamous -zoisite -zoisitization -zoism -zoist -zoistic -zokor -zoll -zolle -zollpfund -zolotink -zolotnik -zombi -zombie -zombiism -zomotherapeutic -zomotherapy -zonal -zonality -zonally -zonar -zonary -zonate -zonated -zonation -zone -zoned -zoneless -zonelet -zonelike -zonesthesia -zonic -zoniferous -zoning -zonite -zonitid -zonochlorite -zonociliate -zonoid -zonolimnetic -zonoplacental -zonoskeleton -zonular -zonule -zonulet -zonure -zonurid -zonuroid -zoo -zoobenthos -zooblast -zoocarp -zoocecidium -zoochemical -zoochemistry -zoochemy -zoochore -zoocoenocyte -zoocultural -zooculture -zoocurrent -zoocyst -zoocystic -zoocytial -zoocytium -zoodendria -zoodendrium -zoodynamic -zoodynamics -zooecia -zooecial -zooecium -zooerastia -zooerythrin -zoofulvin -zoogamete -zoogamous -zoogamy -zoogene -zoogenesis -zoogenic -zoogenous -zoogeny -zoogeographer -zoogeographic -zoogeographical -zoogeographically -zoogeography -zoogeological -zoogeologist -zoogeology -zoogloea -zoogloeal -zoogloeic -zoogonic -zoogonidium -zoogonous -zoogony -zoograft -zoografting -zoographer -zoographic -zoographical -zoographically -zoographist -zoography -zooid -zooidal -zooidiophilous -zooks -zoolater -zoolatria -zoolatrous -zoolatry -zoolite -zoolith -zoolithic -zoolitic -zoologer -zoologic -zoological -zoologically -zoologicoarchaeologist -zoologicobotanical -zoologist -zoologize -zoology -zoom -zoomagnetic -zoomagnetism -zoomancy -zoomania -zoomantic -zoomantist -zoomechanical -zoomechanics -zoomelanin -zoometric -zoometry -zoomimetic -zoomimic -zoomorph -zoomorphic -zoomorphism -zoomorphize -zoomorphy -zoon -zoonal -zoonerythrin -zoonic -zoonist -zoonite -zoonitic -zoonomia -zoonomic -zoonomical -zoonomist -zoonomy -zoonosis -zoonosologist -zoonosology -zoonotic -zoons -zoonule -zoopaleontology -zoopantheon -zooparasite -zooparasitic -zoopathological -zoopathologist -zoopathology -zoopathy -zooperal -zooperist -zoopery -zoophagan -zoophagous -zoopharmacological -zoopharmacy -zoophile -zoophilia -zoophilic -zoophilism -zoophilist -zoophilite -zoophilitic -zoophilous -zoophily -zoophobia -zoophobous -zoophoric -zoophorus -zoophysical -zoophysics -zoophysiology -zoophytal -zoophyte -zoophytic -zoophytical -zoophytish -zoophytography -zoophytoid -zoophytological -zoophytologist -zoophytology -zooplankton -zooplanktonic -zooplastic -zooplasty -zoopraxiscope -zoopsia -zoopsychological -zoopsychologist -zoopsychology -zooscopic -zooscopy -zoosis -zoosmosis -zoosperm -zoospermatic -zoospermia -zoospermium -zoosphere -zoosporange -zoosporangia -zoosporangial -zoosporangiophore -zoosporangium -zoospore -zoosporic -zoosporiferous -zoosporocyst -zoosporous -zootaxy -zootechnic -zootechnics -zootechny -zooter -zoothecia -zoothecial -zoothecium -zootheism -zootheist -zootheistic -zootherapy -zoothome -zootic -zootomic -zootomical -zootomically -zootomist -zootomy -zoototemism -zootoxin -zootrophic -zootrophy -zootype -zootypic -zooxanthella -zooxanthellae -zooxanthin -zoozoo -zopilote -zorgite -zoril -zorilla -zorillo -zorrillo -zorro -zoster -zosteriform -zounds -zowie -zuccarino -zucchetto -zucchini -zudda -zugtierlast -zugtierlaster -zuisin -zumatic -zumbooruk -zunyite -zupanate -zuurveldt -zuza -zwanziger -zwieback -zwitter -zwitterion -zwitterionic -zyga -zygadenine -zygaenid -zygal -zygantra -zygantrum -zygapophyseal -zygapophysis -zygion -zygite -zygnemataceous -zygobranch -zygobranchiate -zygodactyl -zygodactylic -zygodactylism -zygodactylous -zygodont -zygolabialis -zygoma -zygomata -zygomatic -zygomaticoauricular -zygomaticoauricularis -zygomaticofacial -zygomaticofrontal -zygomaticomaxillary -zygomaticoorbital -zygomaticosphenoid -zygomaticotemporal -zygomaticum -zygomaticus -zygomaxillare -zygomaxillary -zygomorphic -zygomorphism -zygomorphous -zygomycete -zygomycetous -zygon -zygoneure -zygophore -zygophoric -zygophyceous -zygophyllaceous -zygophyte -zygopleural -zygopteran -zygopterid -zygopteron -zygopterous -zygose -zygosis -zygosperm -zygosphenal -zygosphene -zygosphere -zygosporange -zygosporangium -zygospore -zygosporic -zygosporophore -zygostyle -zygotactic -zygotaxis -zygote -zygotene -zygotic -zygotoblast -zygotoid -zygotomere -zygous -zygozoospore -zymase -zyme -zymic -zymin -zymite -zymogen -zymogene -zymogenesis -zymogenic -zymogenous -zymoid -zymologic -zymological -zymologist -zymology -zymolyis -zymolysis -zymolytic -zymome -zymometer -zymomin -zymophore -zymophoric -zymophosphate -zymophyte -zymoplastic -zymoscope -zymosimeter -zymosis -zymosterol -zymosthenic -zymotechnic -zymotechnical -zymotechnics -zymotechny -zymotic -zymotically -zymotize -zymotoxic -zymurgy -zythem -zythum diff --git a/docs6/src/data/fe-example-3.mlr b/docs6/src/data/fe-example-3.mlr deleted file mode 100644 index 1ba3f9e48..000000000 --- a/docs6/src/data/fe-example-3.mlr +++ /dev/null @@ -1,4 +0,0 @@ -func f(a, b) { - return sqrt(a**2 + b**2) -} -$xy = f($x, $y) diff --git a/docs6/src/data/fe-example-4.mlr b/docs6/src/data/fe-example-4.mlr deleted file mode 100644 index 7d668474d..000000000 --- a/docs6/src/data/fe-example-4.mlr +++ /dev/null @@ -1,3 +0,0 @@ -func f(a, b) { - return sqrt(a**2 + b**2) -} diff --git a/docs6/src/data/feature-count.mlr b/docs6/src/data/feature-count.mlr deleted file mode 100644 index 4a4a97691..000000000 --- a/docs6/src/data/feature-count.mlr +++ /dev/null @@ -1,13 +0,0 @@ -for (key in $*) { - @key_counts[key] += 1; -} -@record_count += 1; - -end { - for (key in @key_counts) { - @key_fraction[key] = @key_counts[key] / @record_count - } - emit @record_count; - emit @key_counts, "key"; - emit @key_fraction,"key" -} diff --git a/docs6/src/data/features.json b/docs6/src/data/features.json deleted file mode 100644 index a4b21e916..000000000 --- a/docs6/src/data/features.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "qoh": 29874, "rate": 1.68, "latency": 0.02 } -{ "name": "alice", "uid": 572 } -{ "qoh": 1227, "rate": 1.01, "latency": 0.07 } -{ "qoh": 13458, "rate": 1.72, "latency": 0.04 } -{ "qoh": 56782, "rate": 1.64 } -{ "qoh": 23512, "rate": 1.71, "latency": 0.03 } -{ "qoh": 9876, "rate": 1.89, "latency": 0.08 } -{ "name": "bill", "uid": 684 } -{ "name": "chuck", "uid2": 908 } -{ "name": "dottie", "uid": 440 } -{ "qoh": 0, "rate": 0.40, "latency": 0.01 } -{ "qoh": 5438, "rate": 1.56, "latency": 0.17 } diff --git a/docs6/src/data/fibo-cached.sh b/docs6/src/data/fibo-cached.sh deleted file mode 100644 index a6ae172bb..000000000 --- a/docs6/src/data/fibo-cached.sh +++ /dev/null @@ -1,18 +0,0 @@ -mlr --ofmt '%.9lf' --opprint seqgen --start 1 --stop 28 then put ' - func f(n) { - @fcount += 1; # count number of calls to the function - if (is_present(@fcache[n])) { # cache hit - return @fcache[n] - } else { # cache miss - num rv = 1; - if (n >= 2) { - rv = f(n-1) + f(n-2) # recurse - } - @fcache[n] = rv; - return rv - } - } - @fcount = 0; - $o = f($i); - $fcount = @fcount; -' then put '$seconds=systime()' then step -a delta -f seconds then cut -x -f seconds diff --git a/docs6/src/data/filter-multiline-example.txt b/docs6/src/data/filter-multiline-example.txt deleted file mode 100644 index 2a3421ec0..000000000 --- a/docs6/src/data/filter-multiline-example.txt +++ /dev/null @@ -1,5 +0,0 @@ -mlr --opprint filter ' - ($x > 0.5 && $y < 0.5) - || - ($x < 0.5 && $y > 0.5) -' then stats2 -a corr -f x,y data/medium diff --git a/docs6/src/data/flins.json b/docs6/src/data/flins.json deleted file mode 100644 index 1578256a3..000000000 --- a/docs6/src/data/flins.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "county": "Seminole", "tiv_2011": 22890.55, "tiv_2012": 20848.71, "line": "Residential" } -{ "county": "Miami Dade", "tiv_2011": 1158674.85, "tiv_2012": 1076001.08, "line": "Residential" } -{ "county": "Palm Beach", "tiv_2011": 1174081.5, "tiv_2012": 1856589.17, "line": "Residential" } -{ "county": "Miami Dade", "tiv_2011": 2850980.31, "tiv_2012": 2650932.72, "line": "Commercial" } -{ "county": "Highlands", "tiv_2011": 23006.41, "tiv_2012": 19757.91, "line": "Residential" } -{ "county": "Highlands", "tiv_2011": 49155.16, "tiv_2012": 47362.96, "line": "Residential" } -{ "county": "Duval", "tiv_2011": 1731888.18, "tiv_2012": 2785551.63, "line": "Residential" } -{ "county": "St. Johns", "tiv_2011": 29589.12, "tiv_2012": 35207.53, "line": "Residential" } diff --git a/docs6/src/data/for-oosvar-example-0a.txt b/docs6/src/data/for-oosvar-example-0a.txt deleted file mode 100644 index 06f960894..000000000 --- a/docs6/src/data/for-oosvar-example-0a.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parentheses are optional for single key: -for (k1, v in @a["b"]["c"]) { ... } -for ((k1), v in @a["b"]["c"]) { ... } -# Parentheses are required for multiple keys: -for ((k1, k2), v in @a["b"]["c"]) { ... } # Loop over subhashmap of a variable -for ((k1, k2, k3), v in @a["b"]["c"]) { ... } # Ditto -for ((k1, k2, k3), v in @a { ... } # Loop over variable starting from basename -for ((k1, k2, k3), v in @* { ... } # Loop over all variables (k1 is bound to basename) diff --git a/docs6/src/data/for-srec-example.tbl b/docs6/src/data/for-srec-example.tbl deleted file mode 100644 index 64791c613..000000000 --- a/docs6/src/data/for-srec-example.tbl +++ /dev/null @@ -1,4 +0,0 @@ -label1 label2 f1 f2 f3 -blue green 100 240 350 -red green 120 11 195 -yellow blue 140 0 240 diff --git a/docs6/src/data/fraction-example.csv b/docs6/src/data/fraction-example.csv deleted file mode 100644 index 21afdf043..000000000 --- a/docs6/src/data/fraction-example.csv +++ /dev/null @@ -1,12 +0,0 @@ -u=female,v=red,n=2458 -u=female,v=green,n=192 -u=female,v=blue,n=337 -u=female,v=purple,n=468 -u=female,v=yellow,n=3 -u=female,v=orange,n=17 -u=male,v=red,n=143 -u=male,v=green,n=227 -u=male,v=blue,n=2034 -u=male,v=purple,n=12 -u=male,v=yellow,n=1192 -u=male,v=orange,n=448 diff --git a/docs6/src/data/headerless.csv b/docs6/src/data/headerless.csv deleted file mode 100644 index 03b32576e..000000000 --- a/docs6/src/data/headerless.csv +++ /dev/null @@ -1,4 +0,0 @@ -John,23,present -Fred,34,present -Alice,56,missing -Carol,45,present diff --git a/docs6/src/data/het-bool.csv b/docs6/src/data/het-bool.csv deleted file mode 100644 index cc094b90f..000000000 --- a/docs6/src/data/het-bool.csv +++ /dev/null @@ -1,5 +0,0 @@ -name,reachable -barney,false -betty,true -fred,true -wilma,1 diff --git a/docs6/src/data/het.csv b/docs6/src/data/het.csv deleted file mode 100644 index f48f8f295..000000000 --- a/docs6/src/data/het.csv +++ /dev/null @@ -1,14 +0,0 @@ -resource,loadsec,ok -/path/to/file,0.45,true - -record_count,resource -100,/path/to/file - -resource,loadsec,ok -/path/to/second/file,0.32,true - -record_count,resource -150,/path/to/second/file - -resource,loadsec,ok -/some/other/path,0.97,false diff --git a/docs6/src/data/het.dkvp b/docs6/src/data/het.dkvp deleted file mode 100644 index 68274011d..000000000 --- a/docs6/src/data/het.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -resource=/path/to/file,loadsec=0.45,ok=true -record_count=100,resource=/path/to/file -resource=/path/to/second/file,loadsec=0.32,ok=true -record_count=150,resource=/path/to/second/file -resource=/some/other/path,loadsec=0.97,ok=false diff --git a/docs6/src/data/hosts.csv b/docs6/src/data/hosts.csv deleted file mode 100644 index e91243782..000000000 --- a/docs6/src/data/hosts.csv +++ /dev/null @@ -1,4 +0,0 @@ -host,status -xy01.east.acme.org,up -ab02.west.acme.org,down -ac91.west.acme.org,up diff --git a/docs6/src/data/inout.csv b/docs6/src/data/inout.csv deleted file mode 100644 index 6e4f71c4f..000000000 --- a/docs6/src/data/inout.csv +++ /dev/null @@ -1,4 +0,0 @@ -a_in,a_out,b_in,b_out -436,490,446,195 -526,320,963,780 -220,888,705,831 diff --git a/docs6/src/data/join-left-example.csv b/docs6/src/data/join-left-example.csv deleted file mode 100644 index 26588e65c..000000000 --- a/docs6/src/data/join-left-example.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,name -100,alice -200,bob -300,carol -400,david -500,edgar diff --git a/docs6/src/data/join-right-example.csv b/docs6/src/data/join-right-example.csv deleted file mode 100644 index c425328c9..000000000 --- a/docs6/src/data/join-right-example.csv +++ /dev/null @@ -1,21 +0,0 @@ -status,idcode -present,400 -present,100 -missing,200 -present,100 -present,200 -missing,100 -missing,200 -present,300 -missing,600 -present,400 -present,400 -present,300 -present,100 -missing,400 -present,200 -present,200 -present,200 -present,200 -present,400 -present,300 diff --git a/docs6/src/data/join-u-left.csv b/docs6/src/data/join-u-left.csv deleted file mode 100644 index 0435ecae0..000000000 --- a/docs6/src/data/join-u-left.csv +++ /dev/null @@ -1,4 +0,0 @@ -hostname,ipaddr -nadir.east.our.org,10.3.1.18 -zenith.west.our.org,10.3.1.27 -apoapsis.east.our.org,10.4.5.94 diff --git a/docs6/src/data/join-u-right.csv b/docs6/src/data/join-u-right.csv deleted file mode 100644 index 595823ac0..000000000 --- a/docs6/src/data/join-u-right.csv +++ /dev/null @@ -1,10 +0,0 @@ -ipaddr,timestamp,bytes -10.3.1.27,1448762579,4568 -10.3.1.18,1448762578,8729 -10.4.5.94,1448762579,17445 -10.3.1.27,1448762589,12 -10.3.1.18,1448762588,44558 -10.4.5.94,1448762589,8899 -10.3.1.27,1448762599,0 -10.3.1.18,1448762598,73425 -10.4.5.94,1448762599,12200 diff --git a/docs6/src/data/json-example-2.json b/docs6/src/data/json-example-2.json deleted file mode 100644 index 1af468a05..000000000 --- a/docs6/src/data/json-example-2.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "flag": 1, - "i": 11, - "attributes": { - "color": "yellow", - "shape": "triangle" - }, - "values": { - "u": 0.632170, - "v": 0.988721, - "w": 0.436498, - "x": 5.798188 - } -} -{ - "flag": 1, - "i": 15, - "attributes": { - "color": "red", - "shape": "square" - }, - "values": { - "u": 0.219668, - "v": 0.001257, - "w": 0.792778, - "x": 2.944117 - } -} -{ - "flag": 1, - "i": 16, - "attributes": { - "color": "red", - "shape": "circle" - }, - "values": { - "u": 0.209017, - "v": 0.290052, - "w": 0.138103, - "x": 5.065034 - } -} -{ - "flag": 0, - "i": 48, - "attributes": { - "color": "red", - "shape": "square" - }, - "values": { - "u": 0.956274, - "v": 0.746720, - "w": 0.775542, - "x": 7.117831 - } -} -{ - "flag": 0, - "i": 51, - "attributes": { - "color": "purple", - "shape": "triangle" - }, - "values": { - "u": 0.435535, - "v": 0.859129, - "w": 0.812290, - "x": 5.753095 - } -} -{ - "flag": 0, - "i": 64, - "attributes": { - "color": "red", - "shape": "square" - }, - "values": { - "u": 0.201551, - "v": 0.953110, - "w": 0.771991, - "x": 5.612050 - } -} -{ - "flag": 0, - "i": 65, - "attributes": { - "color": "purple", - "shape": "triangle" - }, - "values": { - "u": 0.684281, - "v": 0.582372, - "w": 0.801405, - "x": 5.805148 - } -} -{ - "flag": 1, - "i": 73, - "attributes": { - "color": "yellow", - "shape": "circle" - }, - "values": { - "u": 0.603365, - "v": 0.423708, - "w": 0.639785, - "x": 7.006414 - } -} -{ - "flag": 1, - "i": 87, - "attributes": { - "color": "yellow", - "shape": "circle" - }, - "values": { - "u": 0.285656, - "v": 0.833516, - "w": 0.635058, - "x": 6.350036 - } -} -{ - "flag": 0, - "i": 91, - "attributes": { - "color": "purple", - "shape": "square" - }, - "values": { - "u": 0.259926, - "v": 0.824322, - "w": 0.723735, - "x": 6.854221 - } -} diff --git a/docs6/src/data/json-example-3.json b/docs6/src/data/json-example-3.json deleted file mode 100644 index 311f3963b..000000000 --- a/docs6/src/data/json-example-3.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "orange", - "values": [12.2, 13.8, 17.2] -} -{ - "label": "purple", - "values": [27.0, 32.4] -} diff --git a/docs6/src/data/label-example.txt b/docs6/src/data/label-example.txt deleted file mode 100644 index 50f5466a5..000000000 --- a/docs6/src/data/label-example.txt +++ /dev/null @@ -1,11 +0,0 @@ -% grep -v '^#' /etc/passwd | mlr --nidx --fs : --opprint label name,password,uid,gid,gecos,home_dir,shell | head -name password uid gid gecos home_dir shell -nobody * -2 -2 Unprivileged User /var/empty /usr/bin/false -root * 0 0 System Administrator /var/root /bin/sh -daemon * 1 1 System Services /var/root /usr/bin/false -_uucp * 4 4 Unix to Unix Copy Protocol /var/spool/uucp /usr/sbin/uucico -_taskgated * 13 13 Task Gate Daemon /var/empty /usr/bin/false -_networkd * 24 24 Network Services /var/networkd /usr/bin/false -_installassistant * 25 25 Install Assistant /var/empty /usr/bin/false -_lp * 26 26 Printing Services /var/spool/cups /usr/bin/false -_postfix * 27 27 Postfix Mail Server /var/spool/postfix /usr/bin/false diff --git a/docs6/src/data/linreg-example.jpg b/docs6/src/data/linreg-example.jpg deleted file mode 100644 index 2579fbc28..000000000 Binary files a/docs6/src/data/linreg-example.jpg and /dev/null differ diff --git a/docs6/src/data/linreg-example.txt b/docs6/src/data/linreg-example.txt deleted file mode 100644 index b7ac713e3..000000000 --- a/docs6/src/data/linreg-example.txt +++ /dev/null @@ -1,22 +0,0 @@ - -# Prepare input data: -mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' data/medium > data/medium-squares - -# Do a linear regression and examine coefficients: -mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares -x_y_pca_m=1.014419 -x_y_pca_b=0.000308 -x_y_pca_quality=0.861354 - -# Option 1 to apply the regression coefficients and produce a linear fit: -# Set x_y_pca_m and x_y_pca_b as shell variables: -eval $(mlr --ofs newline stats2 -a linreg-pca -f x,y data/medium-squares) -# In addition to x and y, make a new yfit which is the line fit, then plot -# using your favorite tool: -mlr --onidx put '$yfit='$x_y_pca_m'*$x+'$x_y_pca_b then cut -x -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - -# Option 2 to apply the regression coefficients and produce a linear fit: use --fit option -mlr --onidx stats2 -a linreg-pca --fit -f x,y then cut -f a,b,i data/medium-squares \ - | pgr -p -title 'linreg-pca example' -xmin 0 -xmax 1 -ymin 0 -ymax 1 - diff --git a/docs6/src/data/maxrows.tsv b/docs6/src/data/maxrows.tsv deleted file mode 100644 index d31985647..000000000 --- a/docs6/src/data/maxrows.tsv +++ /dev/null @@ -1,32 +0,0 @@ -a b n score -purple red 5 0.743231 -blue purple 2 0.093710 -red purple 2 0.802103 -purple red 5 0.389055 -red purple 2 0.880457 -orange red 2 0.540349 -purple purple 1 0.634451 -orange purple 5 0.257223 -orange purple 5 0.693499 -red red 4 0.981355 -blue purple 5 0.157052 -purple purple 1 0.441784 -red purple 1 0.124912 -orange blue 1 0.921944 -blue purple 4 0.490909 -purple red 5 0.454779 -green purple 4 0.198278 -orange blue 5 0.705700 -red red 3 0.940705 -purple red 5 0.072936 -orange blue 3 0.389463 -orange purple 2 0.664985 -blue purple 1 0.371813 -red purple 4 0.984571 -green purple 5 0.203577 -green purple 3 0.900873 -purple purple 0 0.965677 -blue purple 2 0.208785 -purple purple 1 0.455077 -red purple 4 0.477187 -blue red 4 0.007487 diff --git a/docs6/src/data/medium b/docs6/src/data/medium deleted file mode 100644 index bd2df22df..000000000 --- a/docs6/src/data/medium +++ /dev/null @@ -1,10000 +0,0 @@ -a=pan,b=pan,i=1,x=0.3467901443380824,y=0.7268028627434533 -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=pan,i=6,x=0.5271261600918548,y=0.49322128674835697 -a=eks,b=zee,i=7,x=0.6117840605678454,y=0.1878849191181694 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=hat,b=wye,i=9,x=0.03144187646093577,y=0.7495507603507059 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=11,x=0.7930488423451967,y=0.6505816637259333 -a=zee,b=pan,i=12,x=0.3676141320555616,y=0.23614420670296965 -a=eks,b=pan,i=13,x=0.4915175580479536,y=0.7709126592971468 -a=eks,b=zee,i=14,x=0.5207382318405251,y=0.34141681118811673 -a=eks,b=pan,i=15,x=0.07155556372719507,y=0.3596137145616235 -a=pan,b=pan,i=16,x=0.5736853980681922,y=0.7554169353781729 -a=zee,b=eks,i=17,x=0.29081949506712723,y=0.054478717073354166 -a=hat,b=zee,i=18,x=0.05727869223575699,y=0.13343527626645157 -a=zee,b=pan,i=19,x=0.43144132839222604,y=0.8442204830496998 -a=eks,b=wye,i=20,x=0.38245149780530685,y=0.4730652428100751 -a=hat,b=eks,i=21,x=0.0023058336158985338,y=0.16665492414949412 -a=zee,b=wye,i=22,x=0.9270813051677103,y=0.5523236165919244 -a=wye,b=pan,i=23,x=0.7975862089313748,y=0.8430307846116346 -a=wye,b=hat,i=24,x=0.7286126830627567,y=0.19441962592638418 -a=pan,b=eks,i=25,x=0.291444729043585,y=0.2680100577363237 -a=eks,b=eks,i=26,x=0.7433678407354926,y=0.8295062256195103 -a=wye,b=wye,i=27,x=0.9439687243972539,y=0.9305553444632164 -a=hat,b=hat,i=28,x=0.5811879718711469,y=0.3934172489640808 -a=eks,b=eks,i=29,x=0.05713488327208227,y=0.45012758797367913 -a=zee,b=pan,i=30,x=0.7514525581952406,y=0.5869901584461873 -a=eks,b=pan,i=31,x=0.5701563454882129,y=0.822178550628332 -a=wye,b=wye,i=32,x=0.5112738997714514,y=0.33107563648490446 -a=hat,b=pan,i=33,x=0.09303747345405,y=0.18404048980291832 -a=hat,b=wye,i=34,x=0.49061881414751796,y=0.4721354893261027 -a=zee,b=zee,i=35,x=0.12565828887119346,y=0.1936186210637818 -a=pan,b=hat,i=36,x=0.9436794292675323,y=0.9111218711707734 -a=wye,b=pan,i=37,x=0.056537252420374995,y=0.5450112991603523 -a=pan,b=zee,i=38,x=0.508250895522605,y=0.12919877119684198 -a=hat,b=pan,i=39,x=0.4591095934684415,y=0.6526252088703994 -a=pan,b=hat,i=40,x=0.30302850095892986,y=0.2884018711352886 -a=pan,b=hat,i=41,x=0.08143769954761992,y=0.030906489980379925 -a=eks,b=eks,i=42,x=0.4614430092810964,y=0.552479841087209 -a=zee,b=eks,i=43,x=0.8456728393970536,y=0.8501991168644704 -a=pan,b=zee,i=44,x=0.8980511441946196,y=0.6728135588610029 -a=pan,b=eks,i=45,x=0.6247151870956413,y=0.8275695927895051 -a=pan,b=wye,i=46,x=0.08834857197997548,y=0.4444202016249801 -a=eks,b=zee,i=47,x=0.4544511154182116,y=0.22787905378091933 -a=hat,b=zee,i=48,x=0.4355461545206776,y=0.8758429593971929 -a=wye,b=wye,i=49,x=0.21920222273431333,y=0.18979580426582043 -a=wye,b=hat,i=50,x=0.4942114498754957,y=0.35138166631352374 -a=hat,b=pan,i=51,x=0.744071908772339,y=0.9166693426799131 -a=hat,b=pan,i=52,x=0.4302467414632086,y=0.9811029877493174 -a=eks,b=eks,i=53,x=0.9985342548358704,y=0.9590495928336531 -a=zee,b=eks,i=54,x=0.9314828033134765,y=0.8687851184407838 -a=hat,b=wye,i=55,x=0.07268958233806955,y=0.49851026308988333 -a=pan,b=zee,i=56,x=0.06982762802945175,y=0.033405940208281026 -a=wye,b=pan,i=57,x=0.7302705254635534,y=0.7851652600343977 -a=eks,b=zee,i=58,x=0.4767244077783851,y=0.6343726024100323 -a=hat,b=hat,i=59,x=0.23821881669710454,y=0.2495882683265671 -a=eks,b=eks,i=60,x=0.9940192460481878,y=0.23460275425446875 -a=hat,b=wye,i=61,x=0.5661361038240923,y=0.30297884091448213 -a=zee,b=eks,i=62,x=0.6925670766279615,y=0.6309283897492339 -a=wye,b=wye,i=63,x=0.3034237022482048,y=0.4570355951663545 -a=eks,b=zee,i=64,x=0.7150944451661773,y=0.44407448850132425 -a=pan,b=hat,i=65,x=0.9374806227235818,y=0.5142245475995557 -a=hat,b=hat,i=66,x=0.8467681996061774,y=0.7322484476601094 -a=zee,b=hat,i=67,x=0.2584112989773649,y=0.4004276976232398 -a=hat,b=wye,i=68,x=0.3362076167096233,y=0.10257516543234868 -a=wye,b=wye,i=69,x=0.5045822356009134,y=0.37117047177904894 -a=wye,b=wye,i=70,x=0.03459890490173678,y=0.6153285711977126 -a=pan,b=hat,i=71,x=0.7573370490708291,y=0.07373145387947322 -a=eks,b=wye,i=72,x=0.5981608655833305,y=0.6748831518079305 -a=pan,b=zee,i=73,x=0.8832262928532921,y=0.41423111475143115 -a=eks,b=eks,i=74,x=0.47929526118952226,y=0.04122489928296569 -a=wye,b=hat,i=75,x=0.5852781359846899,y=0.2530983414392004 -a=zee,b=eks,i=76,x=0.48749884261245857,y=0.4733893888865026 -a=hat,b=zee,i=77,x=0.49083602889086597,y=0.9060845389367156 -a=pan,b=eks,i=78,x=0.8066566257701527,y=0.5756861577587412 -a=hat,b=eks,i=79,x=0.36764688836079906,y=0.3891921555248843 -a=zee,b=zee,i=80,x=0.8318990957979263,y=0.9881725534495532 -a=hat,b=wye,i=81,x=0.17534099646455403,y=0.2603138043676684 -a=pan,b=eks,i=82,x=0.16030863176622356,y=0.3818559883741389 -a=eks,b=eks,i=83,x=0.12617292637489663,y=0.2322389628774958 -a=hat,b=wye,i=84,x=0.6438639100413308,y=0.7352455517915716 -a=wye,b=wye,i=85,x=0.4632506196324333,y=0.47736149585488863 -a=wye,b=hat,i=86,x=0.040744707036128314,y=0.03301111174849969 -a=wye,b=hat,i=87,x=0.6505610031501867,y=0.8780409741829391 -a=hat,b=eks,i=88,x=0.4467819157449152,y=0.25053527761538363 -a=zee,b=zee,i=89,x=0.8495466480863977,y=0.32621281477326824 -a=wye,b=hat,i=90,x=0.47950389571017593,y=0.42674583688195655 -a=pan,b=pan,i=91,x=0.9831553489472493,y=0.8956966539093748 -a=pan,b=eks,i=92,x=0.558471394524429,y=0.18097017277790595 -a=wye,b=hat,i=93,x=0.5870769045363674,y=0.9424742244710793 -a=zee,b=hat,i=94,x=0.9025271534348577,y=0.45924993374839684 -a=wye,b=wye,i=95,x=0.49658345077223354,y=0.9177517032161158 -a=wye,b=hat,i=96,x=0.6981858011144773,y=0.7500496060047478 -a=zee,b=wye,i=97,x=0.9848235494485748,y=0.022289257742961754 -a=pan,b=wye,i=98,x=0.7858397459820843,y=0.17868083683024716 -a=zee,b=zee,i=99,x=0.9317555381388605,y=0.7821791090489817 -a=wye,b=zee,i=100,x=0.45744184842338,y=0.8682791684654946 -a=pan,b=hat,i=101,x=0.8551893009031044,y=0.5817332905396572 -a=hat,b=zee,i=102,x=0.6981668049063121,y=0.7047537152787725 -a=zee,b=hat,i=103,x=0.4414561871794942,y=0.9469598103198476 -a=eks,b=hat,i=104,x=0.2120601199719776,y=0.5815731915374246 -a=hat,b=pan,i=105,x=0.18287006336938183,y=0.7049942001890025 -a=pan,b=hat,i=106,x=0.29173443059817517,y=0.7752097526541691 -a=pan,b=pan,i=107,x=0.04969073649124267,y=0.3496530999805786 -a=wye,b=eks,i=108,x=0.7225927195065096,y=0.4187910102687944 -a=hat,b=zee,i=109,x=0.6352241884717337,y=0.5627539222500982 -a=hat,b=eks,i=110,x=0.23052618333925456,y=0.6381223147292577 -a=pan,b=hat,i=111,x=0.9154288048749503,y=0.6519249542119475 -a=eks,b=hat,i=112,x=0.04982284101245715,y=0.7642422832858892 -a=wye,b=zee,i=113,x=0.3320543853278368,y=0.30390890533333614 -a=wye,b=wye,i=114,x=0.5448671671522891,y=0.4560013210405327 -a=zee,b=eks,i=115,x=0.6020602802269807,y=0.49151403260985893 -a=eks,b=eks,i=116,x=0.6525970433533309,y=0.6038254664200311 -a=wye,b=hat,i=117,x=0.5151714700146957,y=0.07461822977630961 -a=hat,b=zee,i=118,x=0.869072185421898,y=0.24935951674957813 -a=eks,b=eks,i=119,x=0.7271030983543114,y=0.49297558822358944 -a=wye,b=hat,i=120,x=0.7615397120903524,y=0.9797450222382247 -a=pan,b=pan,i=121,x=0.613826139364826,y=0.9594055166987485 -a=eks,b=wye,i=122,x=0.38075252326113784,y=0.015438488067683442 -a=wye,b=wye,i=123,x=0.5795446579685392,y=0.35893969199526243 -a=eks,b=zee,i=124,x=0.5720422015264689,y=0.5847353398497057 -a=eks,b=zee,i=125,x=0.20393191361301366,y=0.5417271858177272 -a=pan,b=zee,i=126,x=0.1495175173899136,y=0.37751439353621485 -a=eks,b=wye,i=127,x=0.0766455676519866,y=0.8562543633218965 -a=zee,b=hat,i=128,x=0.4962404023217607,y=0.3377314781015287 -a=eks,b=hat,i=129,x=0.17009251828726202,y=0.517544397009653 -a=eks,b=zee,i=130,x=0.8191166461936853,y=0.6036827248166735 -a=zee,b=zee,i=131,x=0.8820504927451462,y=0.17262406561122967 -a=eks,b=wye,i=132,x=0.6634725445660961,y=0.3836479034081546 -a=hat,b=hat,i=133,x=0.10275440550496173,y=0.24475094001022435 -a=eks,b=wye,i=134,x=0.224629215365013,y=0.6849916283018126 -a=hat,b=hat,i=135,x=0.6950203918361871,y=0.6680826428134803 -a=pan,b=pan,i=136,x=0.10793035048973287,y=0.26815648351708954 -a=eks,b=hat,i=137,x=0.7869909808709532,y=0.3001475489161951 -a=hat,b=eks,i=138,x=0.9349507622807055,y=0.1692665561677016 -a=eks,b=zee,i=139,x=0.11179490410324633,y=0.603721160232944 -a=wye,b=zee,i=140,x=0.21454586218739624,y=0.5492253214081585 -a=pan,b=hat,i=141,x=0.2240396548356538,y=0.2500739139538637 -a=zee,b=eks,i=142,x=0.7814387149488571,y=0.5062129648989182 -a=pan,b=eks,i=143,x=0.7772439867698123,y=0.970133177930633 -a=eks,b=wye,i=144,x=0.5300792274901561,y=0.3329098127249156 -a=hat,b=zee,i=145,x=0.9039391234331099,y=0.17366986802981454 -a=hat,b=wye,i=146,x=0.7557462730554149,y=0.8354966950279341 -a=wye,b=wye,i=147,x=0.19573082452335644,y=0.16675321752165628 -a=hat,b=eks,i=148,x=0.6206402300915382,y=0.821425348018401 -a=pan,b=pan,i=149,x=0.2983431833827429,y=0.49328391364637114 -a=zee,b=wye,i=150,x=0.6465476525020952,y=0.010839998639479487 -a=pan,b=wye,i=151,x=0.7628297388566211,y=0.25945524901441286 -a=eks,b=zee,i=152,x=0.39677449578160984,y=0.01242383070673192 -a=pan,b=eks,i=153,x=0.3403054358911233,y=0.20856161342555235 -a=wye,b=wye,i=154,x=0.7473556150405872,y=0.5878222144661077 -a=pan,b=wye,i=155,x=0.8308266904064261,y=0.6160102482290218 -a=hat,b=zee,i=156,x=0.06969918779892115,y=0.12332013609343595 -a=zee,b=zee,i=157,x=0.08770785920874291,y=0.1694018877034732 -a=hat,b=wye,i=158,x=0.5750041834429883,y=0.8988889437381339 -a=zee,b=hat,i=159,x=0.3949341964723728,y=0.21461635038581106 -a=wye,b=hat,i=160,x=0.7700798652245849,y=0.07882734380346257 -a=hat,b=zee,i=161,x=0.241833257737751,y=0.2595728278064434 -a=zee,b=zee,i=162,x=0.30865469474514673,y=0.04807979540420082 -a=hat,b=eks,i=163,x=0.1276067871735147,y=0.60275669734591 -a=eks,b=hat,i=164,x=0.24635677428468206,y=0.026325305117816278 -a=wye,b=wye,i=165,x=0.8845921239269926,y=0.31637090814582536 -a=wye,b=hat,i=166,x=0.44829526779246864,y=0.9231413532216132 -a=eks,b=wye,i=167,x=0.4655842156857275,y=0.37721410941530287 -a=wye,b=hat,i=168,x=0.7006512384825274,y=0.47994014933998974 -a=pan,b=eks,i=169,x=0.772606170256783,y=0.2822045789726282 -a=hat,b=zee,i=170,x=0.12938897709124275,y=0.8919705275016901 -a=wye,b=wye,i=171,x=0.06972810304721344,y=0.9401580287060083 -a=pan,b=pan,i=172,x=0.5464624353474236,y=0.4315049479416151 -a=wye,b=pan,i=173,x=0.15061916413672838,y=0.399506367745217 -a=hat,b=eks,i=174,x=0.2254130292138935,y=0.6999307939959456 -a=zee,b=pan,i=175,x=0.3493963468867093,y=0.2448706490036231 -a=hat,b=hat,i=176,x=0.5951138587106596,y=0.851049910114082 -a=hat,b=wye,i=177,x=0.39004663496677305,y=0.2404193708137553 -a=hat,b=eks,i=178,x=0.7778109990978507,y=0.4353416180768024 -a=pan,b=pan,i=179,x=0.5158487973995551,y=0.3857173070225889 -a=hat,b=wye,i=180,x=0.0983048320526585,y=0.3605050602699248 -a=hat,b=eks,i=181,x=0.06881556874834038,y=0.02776354780439838 -a=eks,b=zee,i=182,x=0.8795883767333226,y=0.7913268326625821 -a=pan,b=pan,i=183,x=0.6986560980027141,y=0.10540771793654646 -a=zee,b=wye,i=184,x=0.3918665170311699,y=0.8726348045234303 -a=eks,b=pan,i=185,x=0.49921597322068556,y=0.7926600920736209 -a=zee,b=wye,i=186,x=0.4488271641509629,y=0.6778168337109446 -a=wye,b=eks,i=187,x=0.1765361867584282,y=0.7166382775023783 -a=eks,b=wye,i=188,x=0.7195019639137887,y=0.6101293217348989 -a=pan,b=eks,i=189,x=0.48651849518653256,y=0.3310583783958194 -a=zee,b=hat,i=190,x=0.9187417496732211,y=0.01357822326345659 -a=wye,b=hat,i=191,x=0.6036920337427446,y=0.10361603649711493 -a=pan,b=wye,i=192,x=0.7721928274839366,y=0.730996300378133 -a=eks,b=hat,i=193,x=0.8250294635521217,y=0.014592155431475518 -a=eks,b=eks,i=194,x=0.6636241298839136,y=0.5259126321800084 -a=pan,b=hat,i=195,x=0.6642514282295026,y=0.9448672883012781 -a=eks,b=pan,i=196,x=0.36476881994778887,y=0.7206833750684084 -a=wye,b=wye,i=197,x=0.07466320732554754,y=0.1470636187800869 -a=eks,b=hat,i=198,x=0.04736012928828348,y=0.09632719090688924 -a=zee,b=hat,i=199,x=0.07495669138561056,y=0.0033556400316512303 -a=eks,b=pan,i=200,x=0.25160946724271127,y=0.3153026554896944 -a=wye,b=eks,i=201,x=0.43178278951820004,y=0.6395054755372058 -a=wye,b=eks,i=202,x=0.8067281849918618,y=0.45331926346459483 -a=zee,b=zee,i=203,x=0.9685128952631964,y=0.10935985453746455 -a=wye,b=eks,i=204,x=0.0866873459163141,y=0.08597589292509311 -a=pan,b=hat,i=205,x=0.2896936796389531,y=0.9186383587296384 -a=hat,b=wye,i=206,x=0.9712065807938725,y=0.8814161529894458 -a=wye,b=zee,i=207,x=0.23493288178707172,y=0.9202087940900824 -a=wye,b=eks,i=208,x=0.638370131847482,y=0.6031891659074958 -a=hat,b=eks,i=209,x=0.08722321261724375,y=0.1699175655988554 -a=eks,b=hat,i=210,x=0.4371757785089875,y=0.6860038700835268 -a=wye,b=pan,i=211,x=0.20888984269730204,y=0.947777347490174 -a=hat,b=zee,i=212,x=0.7028540974957029,y=0.2764448806144022 -a=pan,b=zee,i=213,x=0.910694728148218,y=0.538005658230806 -a=wye,b=zee,i=214,x=0.3552257616717024,y=0.7272883402124964 -a=pan,b=zee,i=215,x=0.8250379925053151,y=0.7418087278106543 -a=zee,b=zee,i=216,x=0.8378134809357036,y=0.016812447916020323 -a=pan,b=eks,i=217,x=0.22619506065989436,y=0.6341340791970084 -a=pan,b=zee,i=218,x=0.9817869716469648,y=0.49201333191352814 -a=pan,b=wye,i=219,x=0.8177491896372755,y=0.4265728829799966 -a=wye,b=eks,i=220,x=0.9707941416650918,y=0.5446983207141396 -a=hat,b=eks,i=221,x=0.9623773206695981,y=0.7961697529692682 -a=hat,b=wye,i=222,x=0.19310273682362344,y=0.7734873966667793 -a=wye,b=eks,i=223,x=0.7008326115259359,y=0.8171891486894675 -a=eks,b=pan,i=224,x=0.7439085948665143,y=0.02788543310463787 -a=eks,b=zee,i=225,x=0.2567945604892924,y=0.24424154648770224 -a=pan,b=hat,i=226,x=0.6257005988135916,y=0.042000423208434334 -a=zee,b=wye,i=227,x=0.5324819986117966,y=0.43906785967359585 -a=hat,b=zee,i=228,x=0.6353440745576056,y=0.8565317288607986 -a=wye,b=hat,i=229,x=0.5097848345332788,y=0.8249641724859278 -a=eks,b=hat,i=230,x=0.23668880559764938,y=0.9795999884306217 -a=zee,b=wye,i=231,x=0.4952269526615126,y=0.998055015071858 -a=eks,b=wye,i=232,x=0.5507351778417637,y=0.7118263982857057 -a=hat,b=hat,i=233,x=0.2131489206395062,y=0.08647965840929162 -a=wye,b=pan,i=234,x=0.4686994090286404,y=0.7301121378084597 -a=wye,b=hat,i=235,x=0.37176718775770257,y=0.8655732826697372 -a=eks,b=hat,i=236,x=0.06364189456177682,y=0.4949298511378918 -a=pan,b=zee,i=237,x=0.4520047694204633,y=0.7431070780984742 -a=pan,b=pan,i=238,x=0.1802663344712152,y=0.40747996818620213 -a=zee,b=pan,i=239,x=0.7069459453313341,y=0.24901349035427478 -a=wye,b=eks,i=240,x=0.11369718773090787,y=0.4362931656865052 -a=pan,b=hat,i=241,x=0.5298443076284122,y=0.7286240415109126 -a=hat,b=hat,i=242,x=0.17197294875303992,y=0.42960373892313586 -a=hat,b=wye,i=243,x=0.40008739772830226,y=0.3431833719273334 -a=wye,b=eks,i=244,x=0.047932173034763714,y=0.15974685050052528 -a=hat,b=hat,i=245,x=0.6047108965207437,y=0.00023825870459259768 -a=eks,b=hat,i=246,x=0.5031823192345856,y=0.1530255494090368 -a=hat,b=hat,i=247,x=0.13552744935597638,y=0.7642516336910976 -a=hat,b=wye,i=248,x=0.8794750860292233,y=0.9633187985176084 -a=eks,b=pan,i=249,x=0.7650242839504571,y=0.13484454578382632 -a=zee,b=wye,i=250,x=0.18225031260376368,y=0.42639010352161133 -a=eks,b=eks,i=251,x=0.6366142860676015,y=0.7279525837465141 -a=eks,b=pan,i=252,x=0.7489029711796827,y=0.6216975230273389 -a=zee,b=pan,i=253,x=0.2896285025325088,y=0.4107984626977105 -a=wye,b=pan,i=254,x=0.40783269275640843,y=0.07873948964651878 -a=pan,b=pan,i=255,x=0.4310139640663371,y=0.133668391263563 -a=pan,b=zee,i=256,x=0.715203591010661,y=0.3049124395637157 -a=pan,b=eks,i=257,x=0.08448448051072821,y=0.8143297719717848 -a=pan,b=wye,i=258,x=0.21573850217727963,y=0.7972074125763187 -a=zee,b=wye,i=259,x=0.6485993255572561,y=0.9239849074696734 -a=pan,b=hat,i=260,x=0.7786431758578792,y=0.9906513397624532 -a=pan,b=hat,i=261,x=0.9547041198642143,y=0.46035613392656816 -a=eks,b=wye,i=262,x=0.20205307067280354,y=0.8159138156555881 -a=pan,b=pan,i=263,x=0.735966834511216,y=0.8642501328542477 -a=pan,b=pan,i=264,x=0.0365319279313181,y=0.01547685459691761 -a=hat,b=zee,i=265,x=0.594302803640343,y=0.26329631667022746 -a=zee,b=zee,i=266,x=0.8645462287461376,y=0.3192124287902842 -a=pan,b=hat,i=267,x=0.8759426552130376,y=0.8128071892594659 -a=wye,b=zee,i=268,x=0.334247707070338,y=0.07108295911604934 -a=zee,b=pan,i=269,x=0.8962601880511555,y=0.42772238076912505 -a=zee,b=wye,i=270,x=0.9840112531079188,y=0.03199538649369371 -a=pan,b=zee,i=271,x=0.38241767385691083,y=0.47652036205919546 -a=zee,b=eks,i=272,x=0.5076219094472946,y=0.8598422972471865 -a=wye,b=eks,i=273,x=0.4666963378862372,y=0.8511149275440506 -a=eks,b=pan,i=274,x=0.5094754996388772,y=0.8630831763542761 -a=pan,b=pan,i=275,x=0.0702163840810267,y=0.49744457340186665 -a=zee,b=eks,i=276,x=0.7494501132627315,y=0.831480047566556 -a=hat,b=eks,i=277,x=0.9160765564583604,y=0.9665017202156387 -a=eks,b=wye,i=278,x=0.3405469715018894,y=0.39395981360241694 -a=hat,b=wye,i=279,x=0.7709353111571556,y=0.0741458017139579 -a=hat,b=zee,i=280,x=0.30432388754514095,y=0.9094986664334528 -a=pan,b=wye,i=281,x=0.2807837856477664,y=0.5185246955685402 -a=pan,b=wye,i=282,x=0.5934682340749541,y=0.33551685400674336 -a=wye,b=eks,i=283,x=0.3857770915059473,y=0.2520288213780115 -a=eks,b=hat,i=284,x=0.2823409534969953,y=0.6424410943891458 -a=hat,b=hat,i=285,x=0.5231416402386272,y=0.8268208737366626 -a=pan,b=pan,i=286,x=0.7741141348990104,y=0.22151996054945777 -a=zee,b=zee,i=287,x=0.6530502437373199,y=0.28290337083561623 -a=hat,b=wye,i=288,x=0.41079993080494803,y=0.6788656658934381 -a=wye,b=zee,i=289,x=0.6118394231953472,y=0.2017219713934819 -a=wye,b=zee,i=290,x=0.3867610140403043,y=0.5119527530254661 -a=eks,b=wye,i=291,x=0.2544198663482523,y=0.9572070479148829 -a=hat,b=wye,i=292,x=0.7857064933058493,y=0.5074038206162027 -a=wye,b=wye,i=293,x=0.48768027264524494,y=0.858140960943469 -a=hat,b=zee,i=294,x=0.3704436769585995,y=0.3120229742987346 -a=eks,b=zee,i=295,x=0.4706744506967422,y=0.5788534321133716 -a=zee,b=hat,i=296,x=0.014194623144548224,y=0.5791381505013093 -a=eks,b=wye,i=297,x=0.15536712579543976,y=0.24068588834787485 -a=pan,b=wye,i=298,x=0.2554134483434475,y=0.5924810928892916 -a=zee,b=eks,i=299,x=0.8277425415026218,y=0.27844715446692714 -a=pan,b=hat,i=300,x=0.7146992829593928,y=0.5429822061061883 -a=zee,b=eks,i=301,x=0.30731567290334727,y=0.5306701215524663 -a=zee,b=pan,i=302,x=0.7544266351625367,y=0.36462424597130505 -a=pan,b=pan,i=303,x=0.9181020134419905,y=0.081593490099233 -a=eks,b=eks,i=304,x=0.7883980268101866,y=0.23415186590563442 -a=wye,b=pan,i=305,x=0.5103104415224277,y=0.6005096012353242 -a=hat,b=zee,i=306,x=0.9883564018988095,y=0.42316915798436483 -a=wye,b=eks,i=307,x=0.6064616942445623,y=0.565814763986132 -a=hat,b=eks,i=308,x=0.40085643331635357,y=0.09395240921387538 -a=pan,b=pan,i=309,x=0.5155063246540209,y=0.1492080054471291 -a=zee,b=pan,i=310,x=0.5166885866040305,y=0.05595794333763471 -a=eks,b=eks,i=311,x=0.09369987234653387,y=0.06802932452953492 -a=wye,b=zee,i=312,x=0.07612086875946633,y=0.27326136662066614 -a=zee,b=eks,i=313,x=0.25858901604075357,y=0.8923698739553502 -a=zee,b=pan,i=314,x=0.906390102311296,y=0.454409013999299 -a=hat,b=zee,i=315,x=0.34523405773089744,y=0.4354275687352226 -a=zee,b=hat,i=316,x=0.13504220690406277,y=0.3795391182446578 -a=eks,b=pan,i=317,x=0.46957588924343485,y=0.3400251823752689 -a=wye,b=hat,i=318,x=0.18637343210075064,y=0.45983893886751714 -a=pan,b=zee,i=319,x=0.16606734288775093,y=0.21473289889901537 -a=zee,b=pan,i=320,x=0.8307425029665492,y=0.9687981266665243 -a=zee,b=zee,i=321,x=0.6999788077300872,y=0.526382289897085 -a=hat,b=eks,i=322,x=0.9979624896088678,y=0.38870780074027156 -a=wye,b=zee,i=323,x=0.7167871674039571,y=0.8146661281584913 -a=wye,b=wye,i=324,x=0.22862799493809793,y=0.45776956542633673 -a=hat,b=hat,i=325,x=0.8502045677344342,y=0.06531154070205691 -a=wye,b=pan,i=326,x=0.5817376394212832,y=0.2811644998873859 -a=zee,b=zee,i=327,x=0.1254581943608959,y=0.01871101782750706 -a=eks,b=pan,i=328,x=0.28146620713469994,y=0.45414955407945334 -a=pan,b=eks,i=329,x=0.03763317797683374,y=0.2401750869051401 -a=pan,b=pan,i=330,x=0.27222804399530887,y=0.8283442325329333 -a=wye,b=hat,i=331,x=0.862986205564722,y=0.021211611355487214 -a=wye,b=hat,i=332,x=0.5529572417601349,y=0.10365182374492421 -a=eks,b=hat,i=333,x=0.0677128764291699,y=0.13888954761924865 -a=hat,b=hat,i=334,x=0.8122872254151258,y=0.9343598605592562 -a=wye,b=wye,i=335,x=0.3136448355146325,y=0.3030034178002945 -a=wye,b=eks,i=336,x=0.3723857599541325,y=0.12311828419230408 -a=wye,b=eks,i=337,x=0.8517094711110174,y=0.7107950535254092 -a=hat,b=wye,i=338,x=0.29886440908142087,y=0.44199727275540557 -a=eks,b=zee,i=339,x=0.4583899635695151,y=0.06228530919187403 -a=wye,b=eks,i=340,x=0.23528308849163693,y=0.3882734087125834 -a=zee,b=eks,i=341,x=0.6862997171756073,y=0.15490090302333992 -a=pan,b=eks,i=342,x=0.23702739214960689,y=0.13214761320752622 -a=pan,b=wye,i=343,x=0.2724033449540535,y=0.45196387793887527 -a=eks,b=hat,i=344,x=0.6604478311777118,y=0.8554572649437313 -a=wye,b=wye,i=345,x=0.11573898528830462,y=0.7254541105786084 -a=eks,b=eks,i=346,x=0.4314505110520016,y=0.35990136288181707 -a=eks,b=wye,i=347,x=0.013154121167666677,y=0.8417854982925147 -a=pan,b=hat,i=348,x=0.14077282669103053,y=0.6589658883444618 -a=wye,b=wye,i=349,x=0.4473451552346923,y=0.560474868919231 -a=pan,b=eks,i=350,x=0.7749620340665812,y=0.6934753745173732 -a=hat,b=hat,i=351,x=0.12676653838858187,y=0.7306420663956253 -a=eks,b=eks,i=352,x=0.8908223033829336,y=0.756634722087033 -a=wye,b=wye,i=353,x=0.3561234723336817,y=0.25848510016885773 -a=wye,b=zee,i=354,x=0.07167250764974309,y=0.04755739805455228 -a=eks,b=pan,i=355,x=0.6260379271888249,y=0.9999648102177897 -a=wye,b=eks,i=356,x=0.9105767596182323,y=0.6275830055247574 -a=hat,b=pan,i=357,x=0.584955714773423,y=0.2694061184561868 -a=pan,b=eks,i=358,x=0.7793042404385853,y=0.3575901643950514 -a=wye,b=pan,i=359,x=0.46013788462671257,y=0.07923543496739904 -a=hat,b=pan,i=360,x=0.8209514688962976,y=0.322642334738109 -a=eks,b=zee,i=361,x=0.43390275775283316,y=0.6995243187004873 -a=eks,b=hat,i=362,x=0.9858910807074641,y=0.6063471357443468 -a=zee,b=eks,i=363,x=0.0603319537288447,y=0.903548344851872 -a=hat,b=pan,i=364,x=0.22048203347659634,y=0.9648789798257121 -a=eks,b=zee,i=365,x=0.2429839206497697,y=0.5838305480202817 -a=wye,b=wye,i=366,x=0.8697917247196751,y=0.11967963730609776 -a=wye,b=wye,i=367,x=0.09106459676772116,y=0.7044423738663792 -a=pan,b=eks,i=368,x=0.3244982645940453,y=0.8587867062845185 -a=hat,b=zee,i=369,x=0.18008064179308536,y=0.31358866392662854 -a=hat,b=zee,i=370,x=0.7032327626709055,y=0.4844486606638011 -a=hat,b=wye,i=371,x=0.48451798820346725,y=0.08468945923087656 -a=zee,b=hat,i=372,x=0.8713237021766693,y=0.18775438815480894 -a=wye,b=hat,i=373,x=0.9062681519121573,y=0.6942343130437282 -a=pan,b=hat,i=374,x=0.8711355253639088,y=0.21056604953749913 -a=hat,b=zee,i=375,x=0.5411012705685904,y=0.49472395657244717 -a=wye,b=pan,i=376,x=0.9148906431225965,y=0.6865707031323998 -a=pan,b=zee,i=377,x=0.0873375214879103,y=0.9512779365638556 -a=pan,b=zee,i=378,x=0.30162069682241655,y=0.59487547378256 -a=hat,b=wye,i=379,x=0.723368325539696,y=0.9239506513259356 -a=wye,b=hat,i=380,x=0.3284426805925267,y=0.8338493039051695 -a=pan,b=wye,i=381,x=0.5162110464238533,y=0.028931464336820256 -a=pan,b=wye,i=382,x=0.10290553602186514,y=0.15037258795056763 -a=wye,b=wye,i=383,x=0.5865652699352844,y=0.14421401993609984 -a=pan,b=zee,i=384,x=0.5491251090567257,y=0.9145935172366898 -a=hat,b=eks,i=385,x=0.8339951693283406,y=0.3033056717379309 -a=hat,b=wye,i=386,x=0.7028181061111627,y=0.3480791920548796 -a=eks,b=wye,i=387,x=0.5486856774729921,y=0.46054237397329445 -a=wye,b=eks,i=388,x=0.5468979682673912,y=0.5716892746572024 -a=wye,b=pan,i=389,x=0.8711354046280742,y=0.7000550458179466 -a=pan,b=zee,i=390,x=0.32965901763834493,y=0.4764401595448211 -a=pan,b=wye,i=391,x=0.8693210254564347,y=0.39042419999368405 -a=hat,b=eks,i=392,x=0.2668797007178766,y=0.9538969507044115 -a=zee,b=eks,i=393,x=0.6953842859899757,y=0.9546625350220701 -a=eks,b=hat,i=394,x=0.48773327214873685,y=0.6690593283014772 -a=wye,b=eks,i=395,x=0.5496441289397975,y=0.9130998398573059 -a=pan,b=eks,i=396,x=0.12088261778903142,y=0.2915014516366682 -a=pan,b=pan,i=397,x=0.6527193676882986,y=0.5140617542371629 -a=pan,b=pan,i=398,x=0.7206692031862747,y=0.4350967619148699 -a=eks,b=eks,i=399,x=0.010510711223853386,y=0.08397157710064007 -a=wye,b=zee,i=400,x=0.3788030627053418,y=0.7831833396943373 -a=eks,b=pan,i=401,x=0.08749968996168989,y=0.3703456609602497 -a=eks,b=wye,i=402,x=0.9870844142664434,y=0.07570772729385356 -a=zee,b=hat,i=403,x=0.8371422088541587,y=0.9376680469763548 -a=eks,b=wye,i=404,x=0.9276329844702215,y=0.30151980049765137 -a=wye,b=wye,i=405,x=0.5955452707872064,y=0.5663276615611866 -a=hat,b=wye,i=406,x=0.3016062899704931,y=0.1481359817881971 -a=hat,b=pan,i=407,x=0.3557842656104653,y=0.8619332107179143 -a=zee,b=hat,i=408,x=0.13829592936600588,y=0.4643427499672679 -a=zee,b=zee,i=409,x=0.3885779964636952,y=0.8355517296208552 -a=pan,b=pan,i=410,x=0.3369457823719886,y=0.6595559599218499 -a=hat,b=pan,i=411,x=0.130208615128796,y=0.8157820943662931 -a=zee,b=hat,i=412,x=0.5684534581822444,y=0.7576411674301173 -a=wye,b=wye,i=413,x=0.1924325306941328,y=0.7584253339041852 -a=pan,b=zee,i=414,x=0.09069900090430805,y=0.8557236931723043 -a=hat,b=pan,i=415,x=0.9713015252603615,y=0.4287777397307879 -a=wye,b=pan,i=416,x=0.8898988612865336,y=0.8930372261944983 -a=wye,b=eks,i=417,x=0.9035749108061284,y=0.11475796206309319 -a=zee,b=zee,i=418,x=0.36259161480392366,y=0.03106838412360613 -a=zee,b=eks,i=419,x=0.9669197256156522,y=0.9525495700296412 -a=zee,b=hat,i=420,x=0.2472176643017414,y=0.4766709326963189 -a=hat,b=pan,i=421,x=0.5484055610018505,y=0.7401624563813598 -a=wye,b=eks,i=422,x=0.9843960933372673,y=0.8274060260108933 -a=pan,b=pan,i=423,x=0.08736573145179394,y=0.47080422361654306 -a=pan,b=hat,i=424,x=0.41967399152692275,y=0.11281967088191636 -a=eks,b=zee,i=425,x=0.1541100762311376,y=0.2899666127124777 -a=wye,b=wye,i=426,x=0.8189862069673424,y=0.04342559105332089 -a=pan,b=wye,i=427,x=0.42286545073700454,y=0.4861336428493519 -a=pan,b=pan,i=428,x=0.8513998866661314,y=0.18344030684570167 -a=eks,b=zee,i=429,x=0.10194433521396717,y=0.20006319684657992 -a=eks,b=wye,i=430,x=0.5857626187839062,y=0.5321382987939495 -a=zee,b=eks,i=431,x=0.8583324116859721,y=0.994808666622831 -a=eks,b=eks,i=432,x=0.7853965492176864,y=0.9164907493679918 -a=wye,b=hat,i=433,x=0.1717036971229997,y=0.820252389423276 -a=pan,b=zee,i=434,x=0.3719511404416881,y=0.9187328704871145 -a=hat,b=hat,i=435,x=0.02744685418877102,y=0.6376228704372093 -a=eks,b=eks,i=436,x=0.6933382044724179,y=0.6338292052517879 -a=wye,b=pan,i=437,x=0.37712852260119445,y=0.2533800875229283 -a=zee,b=hat,i=438,x=0.3425559514322971,y=0.7292109440844495 -a=zee,b=wye,i=439,x=0.6058194548394703,y=0.1349506589946292 -a=wye,b=wye,i=440,x=0.33549631716864114,y=0.5044355487644854 -a=zee,b=pan,i=441,x=0.6917806418576951,y=0.3830829559702531 -a=pan,b=eks,i=442,x=0.3051229752913909,y=0.3927572304818523 -a=hat,b=eks,i=443,x=0.35262831982100495,y=0.5903148558170942 -a=wye,b=hat,i=444,x=0.009596883381098431,y=0.7627826236742389 -a=hat,b=pan,i=445,x=0.693707602798371,y=0.9355332457358334 -a=eks,b=eks,i=446,x=0.32733245362496055,y=0.5235444779640992 -a=zee,b=eks,i=447,x=0.31894704216497904,y=0.8410708131567204 -a=hat,b=eks,i=448,x=0.18956024307293828,y=0.7651866504059165 -a=zee,b=wye,i=449,x=0.8505833795792004,y=0.9244534714701724 -a=eks,b=wye,i=450,x=0.6844926010909408,y=0.614368249300009 -a=hat,b=pan,i=451,x=0.6296608646086276,y=0.4470390043301713 -a=pan,b=pan,i=452,x=0.5045572974857859,y=0.4793103881363998 -a=hat,b=wye,i=453,x=4.509679127584487e-05,y=0.22031599198733764 -a=wye,b=wye,i=454,x=0.2443606067405415,y=0.6398645261834082 -a=wye,b=wye,i=455,x=0.804633328675182,y=0.48300382684775944 -a=eks,b=zee,i=456,x=0.410350850017583,y=0.9892210383992472 -a=wye,b=hat,i=457,x=0.0933236073619339,y=0.9291691566694624 -a=zee,b=zee,i=458,x=0.4844711931621539,y=0.27495542782645344 -a=eks,b=eks,i=459,x=0.3611062645335037,y=0.40226115300495247 -a=pan,b=eks,i=460,x=0.8223780119629852,y=0.9126194557839794 -a=hat,b=eks,i=461,x=0.3252432769092649,y=0.658382796137213 -a=zee,b=wye,i=462,x=0.5396036185572467,y=0.25336124010413796 -a=hat,b=wye,i=463,x=0.5222301823622756,y=0.38087060395976524 -a=pan,b=hat,i=464,x=0.7246049387606904,y=0.45691838399060136 -a=hat,b=pan,i=465,x=0.9995625801977208,y=0.23491153961213218 -a=hat,b=wye,i=466,x=0.4276402941162851,y=0.029924580250603294 -a=wye,b=hat,i=467,x=0.8502632858410699,y=0.22370398176509754 -a=wye,b=zee,i=468,x=0.6372967659876994,y=0.024138253192505066 -a=eks,b=eks,i=469,x=0.12954404025896205,y=0.13771358880489826 -a=pan,b=eks,i=470,x=0.6368746235564642,y=0.31586391338281394 -a=eks,b=hat,i=471,x=0.7738089394551085,y=0.4919427799587256 -a=zee,b=hat,i=472,x=0.5201558372951883,y=0.5500922568519445 -a=pan,b=zee,i=473,x=0.28235480114669276,y=0.01789197833877909 -a=hat,b=zee,i=474,x=0.9737504172221616,y=0.5620581498765591 -a=wye,b=wye,i=475,x=0.39240247578786536,y=0.7480836274059417 -a=wye,b=pan,i=476,x=0.7337177223414596,y=0.33451199751230254 -a=eks,b=eks,i=477,x=0.034584510761659026,y=0.43469127809305075 -a=pan,b=wye,i=478,x=0.9492235640609361,y=0.3382725473893562 -a=eks,b=hat,i=479,x=0.935311382854882,y=0.5581569700476232 -a=pan,b=eks,i=480,x=0.6265973838424406,y=0.7055055050235215 -a=hat,b=pan,i=481,x=0.0821695972704326,y=0.35414544375322354 -a=wye,b=zee,i=482,x=0.4898198409702952,y=0.9025273479460141 -a=wye,b=hat,i=483,x=0.2316003856711063,y=0.43956136357576003 -a=eks,b=eks,i=484,x=0.6641863677348001,y=0.6447460873709984 -a=wye,b=wye,i=485,x=0.2617661797012584,y=0.42266716043415287 -a=wye,b=hat,i=486,x=0.30133537944217137,y=0.10221649013386602 -a=eks,b=hat,i=487,x=0.06223193198721644,y=0.9204160326915265 -a=hat,b=pan,i=488,x=0.9232269980553737,y=0.6301846340531019 -a=zee,b=eks,i=489,x=0.47256613643793366,y=0.043043925407927786 -a=wye,b=eks,i=490,x=0.05509649068009248,y=0.7725681545197371 -a=wye,b=pan,i=491,x=0.2513964759410543,y=0.029649890186790206 -a=eks,b=zee,i=492,x=0.24404562827103082,y=0.21765361298784158 -a=hat,b=eks,i=493,x=0.1664695548518379,y=0.24789421681152946 -a=pan,b=eks,i=494,x=0.3713429019328153,y=0.6705235456747188 -a=zee,b=eks,i=495,x=0.9946822846385448,y=0.4850476812126694 -a=wye,b=wye,i=496,x=0.9274092551834339,y=0.2541879419841372 -a=wye,b=wye,i=497,x=0.7021621810855977,y=0.533290838271892 -a=eks,b=eks,i=498,x=0.7227433480694091,y=0.6862413971745326 -a=zee,b=zee,i=499,x=0.36612213225774104,y=0.6372766826351961 -a=zee,b=pan,i=500,x=0.9372377490487999,y=0.5618667924767166 -a=eks,b=pan,i=501,x=0.040475122297163324,y=0.16567765824398517 -a=hat,b=wye,i=502,x=0.6077314844130164,y=0.768942559474086 -a=pan,b=pan,i=503,x=0.0738664869271265,y=0.25330608830961776 -a=pan,b=hat,i=504,x=0.25531331734422,y=0.7865269588902073 -a=eks,b=wye,i=505,x=0.910806292687196,y=0.9026141937080411 -a=hat,b=pan,i=506,x=0.15630232440709246,y=0.9158685116698817 -a=eks,b=hat,i=507,x=0.5820790015257209,y=0.07776020965028863 -a=pan,b=wye,i=508,x=0.9048575733678795,y=0.2624876849034098 -a=pan,b=pan,i=509,x=0.30214111076722505,y=0.004555052573727347 -a=eks,b=eks,i=510,x=0.2716828558768003,y=0.8096330043733283 -a=wye,b=pan,i=511,x=0.16150441052668496,y=0.9285095431973928 -a=zee,b=pan,i=512,x=0.19477333058846336,y=0.2603817709639791 -a=eks,b=eks,i=513,x=0.31922688479267713,y=0.834593837944139 -a=hat,b=zee,i=514,x=0.3540200248392754,y=0.2390584570033465 -a=pan,b=hat,i=515,x=0.20952222920525165,y=0.7943223745285899 -a=wye,b=hat,i=516,x=0.3140651518806169,y=0.8926293957852705 -a=hat,b=zee,i=517,x=0.49137770000060343,y=0.35141387324505546 -a=eks,b=zee,i=518,x=0.2568385171206745,y=0.5364889783697552 -a=hat,b=pan,i=519,x=0.10212966989515981,y=0.16533265211820058 -a=pan,b=pan,i=520,x=0.012153536247427765,y=0.5649175470315574 -a=zee,b=hat,i=521,x=0.3838787804586675,y=0.8057523001988509 -a=eks,b=pan,i=522,x=0.28735731367601225,y=0.01067207233763956 -a=zee,b=wye,i=523,x=0.34414490686076227,y=0.26451700279951407 -a=zee,b=eks,i=524,x=0.07661268800300436,y=0.336140096726808 -a=zee,b=zee,i=525,x=0.2340021990274821,y=0.19565171550317406 -a=eks,b=pan,i=526,x=0.9916766172123481,y=0.4941629586579006 -a=wye,b=pan,i=527,x=0.23490598090770587,y=0.04525601514058908 -a=eks,b=hat,i=528,x=0.558596725535886,y=0.18453457803026696 -a=pan,b=wye,i=529,x=0.25303243992392954,y=0.24620118020872683 -a=zee,b=zee,i=530,x=0.8324822558401548,y=0.6988570770856138 -a=zee,b=hat,i=531,x=0.008609039703687982,y=0.5468838181663499 -a=wye,b=pan,i=532,x=0.6825242751147447,y=0.4637231032445399 -a=pan,b=zee,i=533,x=0.7751095714402214,y=0.5255361584302058 -a=eks,b=zee,i=534,x=0.45468067939968737,y=0.6307288279730315 -a=eks,b=zee,i=535,x=0.918189166469818,y=0.9631682259880161 -a=zee,b=eks,i=536,x=0.9772047656933902,y=0.27024499862207607 -a=hat,b=wye,i=537,x=0.05229927642142651,y=0.556739261699473 -a=eks,b=eks,i=538,x=0.6478937309967303,y=0.8641203708540487 -a=hat,b=pan,i=539,x=0.7269218850428996,y=0.48514423955986363 -a=hat,b=pan,i=540,x=0.7444966092534115,y=0.8005631784590818 -a=wye,b=eks,i=541,x=0.31793693438539106,y=0.5338521836000718 -a=pan,b=zee,i=542,x=0.45523794139189355,y=0.7625878689224138 -a=wye,b=zee,i=543,x=0.7175140108300609,y=0.47463314228548703 -a=pan,b=eks,i=544,x=0.3070977911148097,y=0.8601511205546479 -a=eks,b=pan,i=545,x=0.6594595904219487,y=0.9953938324572855 -a=pan,b=pan,i=546,x=0.6157989578235565,y=0.5516616028345289 -a=eks,b=hat,i=547,x=0.9313805274362773,y=0.08303742296566352 -a=zee,b=zee,i=548,x=0.9236546276965072,y=0.7185917789599708 -a=zee,b=hat,i=549,x=0.10683412342384302,y=0.3609954494938745 -a=zee,b=zee,i=550,x=0.442695858154603,y=0.2279810907065235 -a=hat,b=hat,i=551,x=0.010195105734865595,y=0.8966350444752939 -a=hat,b=hat,i=552,x=0.23961750012587524,y=0.7097949558865199 -a=hat,b=wye,i=553,x=0.6455436846500622,y=0.18485559566207277 -a=zee,b=eks,i=554,x=0.06517756796746732,y=0.8796685374823151 -a=zee,b=zee,i=555,x=0.42969241921044865,y=0.5290835130803165 -a=hat,b=pan,i=556,x=0.6486062750649167,y=0.7897824130903452 -a=zee,b=pan,i=557,x=0.1878359832100659,y=0.36569848741631705 -a=wye,b=wye,i=558,x=0.44297135060478476,y=0.5083526674553874 -a=eks,b=hat,i=559,x=0.27722769169135486,y=0.6987550099842482 -a=eks,b=zee,i=560,x=0.24564874858670038,y=0.8997800191444999 -a=pan,b=wye,i=561,x=0.23019585224736527,y=0.33146344086760515 -a=wye,b=zee,i=562,x=0.9090864712373032,y=0.6795157215425431 -a=eks,b=pan,i=563,x=0.595802702383979,y=0.168651831473682 -a=hat,b=zee,i=564,x=0.7039566464970486,y=0.11164900949647594 -a=zee,b=eks,i=565,x=0.5452772873196364,y=0.39972630770376316 -a=wye,b=hat,i=566,x=0.5358639536626888,y=0.7343387003323596 -a=pan,b=zee,i=567,x=0.36579393243898306,y=0.7559831353974735 -a=eks,b=pan,i=568,x=0.9357934717739306,y=0.5799507923614251 -a=wye,b=wye,i=569,x=0.7665973069675542,y=0.7195592313665612 -a=pan,b=hat,i=570,x=0.38210149896595413,y=0.6304766007845428 -a=hat,b=zee,i=571,x=0.26634229030281786,y=0.973201156636735 -a=wye,b=pan,i=572,x=0.21135242286079792,y=0.8934489624895702 -a=eks,b=zee,i=573,x=0.9268019021927346,y=0.17379821868719336 -a=pan,b=pan,i=574,x=0.5760503711916657,y=0.25841636920363253 -a=pan,b=wye,i=575,x=0.21812558940117743,y=0.3918449054425934 -a=hat,b=wye,i=576,x=0.9187805829729324,y=0.7265918618789776 -a=eks,b=eks,i=577,x=0.6757641755808136,y=0.8438941757795644 -a=eks,b=pan,i=578,x=0.08138468100156837,y=0.7679042873713715 -a=zee,b=pan,i=579,x=0.8628900762701416,y=0.49668430223471005 -a=pan,b=wye,i=580,x=0.7375265988223096,y=0.28754696324486384 -a=zee,b=zee,i=581,x=0.03169831018517821,y=0.26542940289146955 -a=hat,b=eks,i=582,x=0.15837738839177617,y=0.04767102936713474 -a=hat,b=eks,i=583,x=0.9124356938988999,y=0.43270325299399315 -a=eks,b=hat,i=584,x=0.21498015726965602,y=0.7651057421754358 -a=hat,b=zee,i=585,x=0.6805895701299852,y=0.9163445111607751 -a=eks,b=wye,i=586,x=0.7911985256947109,y=0.29846866889111534 -a=zee,b=pan,i=587,x=0.8338045555120547,y=0.18127234053022412 -a=eks,b=pan,i=588,x=0.2983121220479472,y=0.7836442261015891 -a=pan,b=wye,i=589,x=0.8045092117185423,y=0.9810352594851226 -a=eks,b=hat,i=590,x=0.17485208172241573,y=0.10386578574214755 -a=wye,b=zee,i=591,x=0.7581719018917179,y=0.16248881933435744 -a=hat,b=wye,i=592,x=0.25971796023192173,y=0.17042472633318229 -a=zee,b=hat,i=593,x=0.05696407643477175,y=0.6739629581626518 -a=zee,b=eks,i=594,x=0.7405522732897065,y=0.31187891301120196 -a=zee,b=eks,i=595,x=0.1915646079106995,y=0.9366091103378753 -a=zee,b=eks,i=596,x=0.9553146355738393,y=0.47618665485485456 -a=wye,b=pan,i=597,x=0.9041321135345515,y=0.7679179807567709 -a=hat,b=wye,i=598,x=0.3095910881025504,y=0.8653973492352675 -a=wye,b=hat,i=599,x=0.9310931043540538,y=0.9627637520286313 -a=eks,b=zee,i=600,x=0.10930837103642799,y=0.734892377459777 -a=wye,b=pan,i=601,x=0.10514810449108858,y=0.5812271144341119 -a=pan,b=zee,i=602,x=0.9884538231531689,y=0.9826428169828403 -a=zee,b=hat,i=603,x=0.04308972133597455,y=0.5287126434418946 -a=hat,b=pan,i=604,x=0.43188828562650494,y=0.050660555822547026 -a=pan,b=zee,i=605,x=0.2529032876659366,y=0.3388959543441078 -a=eks,b=eks,i=606,x=0.35689384699612214,y=0.4336296598478725 -a=zee,b=zee,i=607,x=0.06487858333497942,y=0.9820515846728632 -a=hat,b=wye,i=608,x=0.3631005984856752,y=0.17908512378632557 -a=zee,b=eks,i=609,x=0.0885240972512874,y=0.11687754329610434 -a=eks,b=wye,i=610,x=0.976870279166798,y=0.979024408220298 -a=hat,b=eks,i=611,x=0.22058278727333458,y=0.23176980505367228 -a=pan,b=pan,i=612,x=0.5001009219306088,y=0.844066356281099 -a=zee,b=zee,i=613,x=0.30995155197043656,y=0.7020213088533442 -a=pan,b=eks,i=614,x=0.3108839226386939,y=0.3561979428678962 -a=wye,b=eks,i=615,x=0.30764905368295004,y=0.3507626708329916 -a=wye,b=hat,i=616,x=0.7717383349877469,y=0.1875503990617584 -a=wye,b=eks,i=617,x=0.2660764665919485,y=0.145799475554256 -a=eks,b=eks,i=618,x=0.697318049680538,y=0.8904258470184732 -a=pan,b=hat,i=619,x=0.503320378593238,y=0.03835628235587274 -a=eks,b=pan,i=620,x=0.9358015206061678,y=0.07000472867831498 -a=wye,b=pan,i=621,x=0.9195273303281286,y=0.29958433313761934 -a=hat,b=eks,i=622,x=0.6369034391881591,y=0.40912695001571486 -a=zee,b=hat,i=623,x=0.3258804550058424,y=0.78858008240255 -a=zee,b=hat,i=624,x=0.04964230770489264,y=0.579602188490132 -a=pan,b=pan,i=625,x=0.6915515843242978,y=0.6178010854014475 -a=pan,b=eks,i=626,x=0.41509674152822296,y=0.9607620788899446 -a=hat,b=wye,i=627,x=0.9225950318933018,y=0.46973980998460607 -a=wye,b=wye,i=628,x=0.6670242157242242,y=0.32410876974705904 -a=wye,b=wye,i=629,x=0.0503400168303868,y=0.10527602332963393 -a=wye,b=pan,i=630,x=0.6992730519827314,y=0.21425077312475782 -a=pan,b=pan,i=631,x=0.782561530337917,y=0.3007736131403983 -a=hat,b=wye,i=632,x=0.5674934046837635,y=0.8372958944262796 -a=eks,b=wye,i=633,x=0.9138839617434728,y=0.031060548633509377 -a=zee,b=hat,i=634,x=0.7745019360438186,y=0.3417641107496465 -a=pan,b=wye,i=635,x=0.00861695712771493,y=0.5441803604064096 -a=hat,b=zee,i=636,x=0.20399264976283815,y=0.7450909531960087 -a=eks,b=wye,i=637,x=0.10597293490004256,y=0.20904153809081627 -a=zee,b=zee,i=638,x=0.6998724502294686,y=0.15842755789229168 -a=wye,b=pan,i=639,x=0.6297328922259222,y=0.24669534343310429 -a=pan,b=wye,i=640,x=0.5760120638145232,y=0.6662486414541403 -a=zee,b=wye,i=641,x=0.903530980816814,y=0.08429459129055339 -a=pan,b=zee,i=642,x=0.6222272826627048,y=0.18325502513152692 -a=wye,b=zee,i=643,x=0.8440287778509163,y=0.08413199380954395 -a=hat,b=zee,i=644,x=0.9789858624275163,y=0.6867108424306388 -a=eks,b=pan,i=645,x=0.28589757090653023,y=0.2874816869622683 -a=pan,b=zee,i=646,x=0.03971681746631206,y=0.11488578458241061 -a=pan,b=zee,i=647,x=0.9002505665510399,y=0.3919843474342828 -a=pan,b=hat,i=648,x=0.6975350070264588,y=0.5434923294790459 -a=wye,b=pan,i=649,x=0.017833700431765576,y=0.28497950273429307 -a=wye,b=pan,i=650,x=0.8995516713685614,y=0.9709755173196244 -a=eks,b=eks,i=651,x=0.23479328023133328,y=0.517141351688706 -a=zee,b=pan,i=652,x=0.774338764727154,y=0.7866779831902309 -a=pan,b=zee,i=653,x=0.598251646829306,y=0.798568072477333 -a=pan,b=zee,i=654,x=0.5450721032047166,y=0.32230118106744865 -a=hat,b=hat,i=655,x=0.43895262867533247,y=0.869617554872027 -a=eks,b=zee,i=656,x=0.7342238031294267,y=0.6344399868216409 -a=eks,b=eks,i=657,x=0.9526997294869483,y=0.6231118783065456 -a=hat,b=pan,i=658,x=0.625646089688133,y=0.11860595050930467 -a=eks,b=zee,i=659,x=0.5013803781985338,y=0.20397067203535713 -a=zee,b=pan,i=660,x=0.3829079054237686,y=0.46767052095812467 -a=eks,b=eks,i=661,x=0.16124263574065234,y=0.7861689392233051 -a=hat,b=eks,i=662,x=0.8455895630959102,y=0.3950043508928123 -a=pan,b=wye,i=663,x=0.4853719483437431,y=0.9100750401717121 -a=zee,b=pan,i=664,x=0.3334670290589219,y=0.6393920946436594 -a=eks,b=eks,i=665,x=0.5054850171460168,y=0.413768182196923 -a=wye,b=hat,i=666,x=0.45353783164970474,y=0.530754898058723 -a=eks,b=eks,i=667,x=0.656573731471621,y=0.902119091388546 -a=wye,b=pan,i=668,x=0.04920210066939823,y=0.23851670466645347 -a=hat,b=hat,i=669,x=0.6845954830331666,y=0.48983710746829556 -a=eks,b=zee,i=670,x=0.36532897274847353,y=0.9866431832953275 -a=pan,b=hat,i=671,x=0.6547944885588621,y=0.07142328653562735 -a=wye,b=wye,i=672,x=0.7648029293390511,y=0.6650048997400388 -a=pan,b=zee,i=673,x=0.8850456267920793,y=0.37595832006593455 -a=wye,b=wye,i=674,x=0.07426167294984953,y=0.8983728711808775 -a=zee,b=zee,i=675,x=0.14647630359578723,y=0.2444767037770159 -a=wye,b=hat,i=676,x=0.6451848990883488,y=0.5038417150477158 -a=zee,b=eks,i=677,x=0.4431725573720502,y=0.6602447847445098 -a=hat,b=hat,i=678,x=0.2580287161696614,y=0.7294988098275678 -a=wye,b=eks,i=679,x=0.36159847148560065,y=0.7499182579533756 -a=eks,b=eks,i=680,x=0.0338572036055631,y=0.9757808949108091 -a=eks,b=zee,i=681,x=0.8149561431006924,y=0.21088097822222962 -a=wye,b=zee,i=682,x=0.7810987533825186,y=0.9667043995307188 -a=eks,b=zee,i=683,x=0.587160737176585,y=0.03329448136151336 -a=hat,b=eks,i=684,x=0.3749971755428878,y=0.21431876719781595 -a=eks,b=hat,i=685,x=0.6737904998208634,y=0.019679445031305476 -a=hat,b=eks,i=686,x=0.21050937771050438,y=0.41045403895167065 -a=zee,b=wye,i=687,x=0.8487067932198148,y=0.11727125464987997 -a=wye,b=eks,i=688,x=0.9002872154674284,y=0.42471026747794716 -a=pan,b=eks,i=689,x=0.10444316592264569,y=0.8885602119427745 -a=zee,b=wye,i=690,x=0.14854213084769508,y=0.9731706277100254 -a=eks,b=zee,i=691,x=0.7240287030381926,y=0.79896437710086 -a=hat,b=hat,i=692,x=0.14117333894379847,y=0.3225535116195155 -a=zee,b=eks,i=693,x=0.27068880582424437,y=0.044369525310762326 -a=eks,b=wye,i=694,x=0.1076349089443529,y=0.6101508286985079 -a=zee,b=zee,i=695,x=0.9140507860836669,y=0.19365517291844658 -a=hat,b=zee,i=696,x=0.16963322576469086,y=0.09487337662478568 -a=hat,b=eks,i=697,x=0.8909103010365073,y=0.5323201554130181 -a=hat,b=hat,i=698,x=0.07422312178663493,y=0.8831561730391124 -a=pan,b=hat,i=699,x=0.44595497600145795,y=0.6267440405997144 -a=eks,b=eks,i=700,x=0.09447912510249834,y=0.5957817269862618 -a=eks,b=pan,i=701,x=0.8004210061445566,y=0.03952440744830843 -a=pan,b=zee,i=702,x=0.8107677028439462,y=0.32429410872359143 -a=zee,b=hat,i=703,x=0.2248043259303365,y=0.33203303056970623 -a=wye,b=pan,i=704,x=0.595716356245294,y=0.004929607103288602 -a=pan,b=eks,i=705,x=0.7388154708435315,y=0.797179757859978 -a=pan,b=wye,i=706,x=0.5008032407057831,y=0.9591889291114695 -a=pan,b=eks,i=707,x=0.9759907833320285,y=0.8936617707540555 -a=pan,b=zee,i=708,x=0.7148877429133659,y=0.0667177678154226 -a=hat,b=zee,i=709,x=0.5664816823643944,y=0.8967488777240636 -a=wye,b=zee,i=710,x=0.8443019828048438,y=0.7860920608434899 -a=hat,b=eks,i=711,x=0.6493317768253313,y=0.6921590557236297 -a=eks,b=hat,i=712,x=0.7026564244799071,y=0.2532401255958231 -a=hat,b=hat,i=713,x=0.34800467364944343,y=0.512231318502013 -a=pan,b=wye,i=714,x=0.1707903602306352,y=0.1624539753347971 -a=eks,b=hat,i=715,x=0.3702687648873617,y=0.5532443902814762 -a=pan,b=hat,i=716,x=0.3526679330017216,y=0.9879415167199294 -a=wye,b=hat,i=717,x=0.9126869246167464,y=0.8539144029222125 -a=wye,b=eks,i=718,x=0.6170824308099435,y=0.42167938160852547 -a=wye,b=zee,i=719,x=0.8648654985592689,y=0.744990377385103 -a=wye,b=eks,i=720,x=0.0737982261184581,y=0.215040061968929 -a=zee,b=eks,i=721,x=0.6857948820947404,y=0.24824277122401872 -a=hat,b=pan,i=722,x=0.9288228199909815,y=0.2781250242506387 -a=eks,b=hat,i=723,x=0.5223004827368406,y=0.7436988563433049 -a=pan,b=zee,i=724,x=0.161391991386723,y=0.4896835486539596 -a=zee,b=zee,i=725,x=0.6421372014622713,y=0.9769320758361035 -a=hat,b=hat,i=726,x=0.6769964245482417,y=0.6143975572853417 -a=hat,b=pan,i=727,x=0.07418538306763378,y=0.647862004010661 -a=zee,b=pan,i=728,x=0.40960942207244977,y=0.4243129116901595 -a=zee,b=hat,i=729,x=0.8560108659093649,y=0.11506232971202268 -a=wye,b=wye,i=730,x=0.5648923679634816,y=0.23257155122856343 -a=wye,b=hat,i=731,x=0.9839746222616559,y=0.2446478089699543 -a=eks,b=zee,i=732,x=0.07883081296682193,y=0.6660416108034422 -a=wye,b=zee,i=733,x=0.842462695985326,y=0.966657486505284 -a=pan,b=wye,i=734,x=0.01934339909570837,y=0.05189496476807132 -a=eks,b=wye,i=735,x=0.9417156459424341,y=0.9870712135656121 -a=hat,b=hat,i=736,x=0.2947986604568096,y=0.9512796485274094 -a=wye,b=pan,i=737,x=0.16300656842731953,y=0.3545653890588314 -a=eks,b=zee,i=738,x=0.8977243371620829,y=0.5262722450488325 -a=hat,b=zee,i=739,x=0.5948040912191594,y=0.3056178698423182 -a=hat,b=wye,i=740,x=0.6686093454184745,y=0.6740449093675628 -a=zee,b=pan,i=741,x=0.9598570146790528,y=0.6398488862754813 -a=pan,b=wye,i=742,x=0.8257519339015849,y=0.693194093940406 -a=eks,b=hat,i=743,x=0.04434098258715646,y=0.3266898058988358 -a=zee,b=wye,i=744,x=0.7524245915453669,y=0.5461439986683315 -a=pan,b=pan,i=745,x=0.6719897687291242,y=0.7565622573163691 -a=eks,b=pan,i=746,x=0.916062376572181,y=0.886967557372127 -a=eks,b=pan,i=747,x=0.40506409795178244,y=0.6998873497812762 -a=pan,b=wye,i=748,x=0.5826370817680807,y=0.08078351188422772 -a=pan,b=eks,i=749,x=0.8465950965363382,y=0.416842562059375 -a=wye,b=pan,i=750,x=0.6658476587001316,y=0.5556451189688414 -a=eks,b=eks,i=751,x=0.3242951995611114,y=0.5680663477563322 -a=wye,b=wye,i=752,x=0.13191473062692816,y=0.19377767709093607 -a=zee,b=eks,i=753,x=0.5186702283396277,y=0.5344580097568402 -a=pan,b=eks,i=754,x=0.023312954423954868,y=0.13646462067848675 -a=eks,b=eks,i=755,x=0.22961935180882087,y=0.16011525129191817 -a=pan,b=zee,i=756,x=0.09666705485436378,y=0.3548198552440588 -a=wye,b=wye,i=757,x=0.19425165484936957,y=0.9581201227608445 -a=eks,b=wye,i=758,x=0.5362262223046377,y=0.5049539834712841 -a=wye,b=zee,i=759,x=0.5321536977324647,y=0.369621860654502 -a=hat,b=zee,i=760,x=0.7941529932304345,y=0.2064198694392868 -a=wye,b=hat,i=761,x=0.38624241523517244,y=0.7325501625853548 -a=zee,b=pan,i=762,x=0.9385694344762825,y=0.49700272359344677 -a=eks,b=pan,i=763,x=0.3501489521153939,y=0.6398058286945986 -a=wye,b=pan,i=764,x=0.16567218737817557,y=0.7953657761380494 -a=eks,b=hat,i=765,x=0.324248802737786,y=0.8599723260499864 -a=eks,b=eks,i=766,x=0.22335745734469326,y=0.21867582342847736 -a=wye,b=wye,i=767,x=0.8255592677399582,y=0.2538516298356094 -a=eks,b=hat,i=768,x=0.15841238344171704,y=0.574922286058442 -a=eks,b=eks,i=769,x=0.18506419568907773,y=0.4760883565274585 -a=hat,b=zee,i=770,x=0.18690741307246328,y=0.6711988977493772 -a=hat,b=eks,i=771,x=0.9178219022568258,y=0.43350695723226085 -a=wye,b=zee,i=772,x=0.23583751371437855,y=0.12279242944303292 -a=hat,b=eks,i=773,x=0.26528801262285184,y=0.4010080804811049 -a=eks,b=eks,i=774,x=0.6386491500093009,y=0.24632366540539852 -a=hat,b=eks,i=775,x=0.03827924004922145,y=0.9441328448191567 -a=wye,b=eks,i=776,x=0.9585382111164209,y=0.6306113838967866 -a=zee,b=wye,i=777,x=0.7623811038765134,y=0.6139534724314861 -a=wye,b=hat,i=778,x=0.19955726522431594,y=0.5077217624640397 -a=zee,b=zee,i=779,x=0.3411759787401816,y=0.2865091416991973 -a=hat,b=zee,i=780,x=0.5811342153834129,y=0.4772695688880223 -a=hat,b=pan,i=781,x=0.1192837713483601,y=0.40681848859583813 -a=hat,b=wye,i=782,x=0.721843867108292,y=0.44923817786818343 -a=wye,b=wye,i=783,x=0.3438923976161088,y=0.5649145034717639 -a=eks,b=eks,i=784,x=0.6165630308304775,y=0.3304084333387801 -a=zee,b=eks,i=785,x=0.6562657631329122,y=0.8258194011693597 -a=hat,b=hat,i=786,x=0.3439593168095797,y=0.8518997303215115 -a=eks,b=zee,i=787,x=0.0654097106697118,y=0.4660389375188869 -a=pan,b=eks,i=788,x=0.2217685316094703,y=0.16649100910012216 -a=eks,b=hat,i=789,x=0.4717662995603106,y=0.44972566215644705 -a=eks,b=hat,i=790,x=0.47887299708709874,y=0.7841667814595291 -a=wye,b=wye,i=791,x=0.00519908348997844,y=0.3991391178091711 -a=hat,b=hat,i=792,x=0.5475862720333128,y=0.9675473146380916 -a=zee,b=wye,i=793,x=0.9545515061227288,y=0.8875064703498067 -a=wye,b=hat,i=794,x=0.16854110528640676,y=0.23899152324736783 -a=eks,b=hat,i=795,x=0.9414011524374403,y=0.38624947508331575 -a=eks,b=eks,i=796,x=0.44475337389030567,y=0.3562483351552209 -a=hat,b=zee,i=797,x=0.3458790979025249,y=0.10530555367157357 -a=wye,b=hat,i=798,x=0.894955252691444,y=0.9020401281837919 -a=zee,b=hat,i=799,x=0.6678020932140406,y=0.7272829012287039 -a=pan,b=wye,i=800,x=0.6728857720452479,y=0.9063282177143175 -a=pan,b=hat,i=801,x=0.6232260305196619,y=0.3246940048519549 -a=hat,b=wye,i=802,x=0.6939811641375604,y=0.9772213376028769 -a=wye,b=eks,i=803,x=0.735398041020814,y=0.43528061054041123 -a=pan,b=wye,i=804,x=0.7553025953132643,y=0.12826679900502957 -a=eks,b=eks,i=805,x=0.7970666568024275,y=0.7141982352996962 -a=hat,b=hat,i=806,x=0.6283301745043451,y=0.2958341149885232 -a=hat,b=pan,i=807,x=0.6054239018991081,y=0.44535311447129966 -a=zee,b=pan,i=808,x=0.068327326345054,y=0.9193569789768139 -a=wye,b=wye,i=809,x=0.779445087567334,y=0.6995188082196249 -a=pan,b=eks,i=810,x=0.6751597242266821,y=0.5514064392004425 -a=pan,b=eks,i=811,x=0.5542215714866076,y=0.14391751751745208 -a=hat,b=zee,i=812,x=0.5623829182379033,y=0.0721774446182929 -a=eks,b=wye,i=813,x=0.027045543431586827,y=0.5270107047302233 -a=pan,b=pan,i=814,x=0.7042024611472535,y=0.5509286378129169 -a=pan,b=eks,i=815,x=0.05860005161315873,y=0.0005735237078376976 -a=eks,b=zee,i=816,x=0.11392244176975941,y=0.08027592413428164 -a=hat,b=hat,i=817,x=0.2182634028675824,y=0.031522781055713156 -a=hat,b=pan,i=818,x=0.5333781740115907,y=0.4837112511279462 -a=zee,b=hat,i=819,x=0.062483279659384605,y=0.8930370625962232 -a=eks,b=hat,i=820,x=0.6028476657314659,y=0.6800202871943302 -a=pan,b=hat,i=821,x=0.11959405115201827,y=0.9706185345930702 -a=eks,b=hat,i=822,x=0.2180916247267669,y=0.20200687440786602 -a=hat,b=zee,i=823,x=0.4553739759143408,y=0.04377256284181141 -a=eks,b=pan,i=824,x=0.14058200329018555,y=0.7690462771050751 -a=wye,b=pan,i=825,x=0.6611884797250076,y=0.9588317557532128 -a=zee,b=pan,i=826,x=0.2407553754423183,y=0.14438176167139094 -a=zee,b=pan,i=827,x=0.5280509086050722,y=0.35353193017246765 -a=pan,b=eks,i=828,x=0.9994029107062516,y=0.20066601756099478 -a=pan,b=pan,i=829,x=0.9031593450788309,y=0.3797948680956209 -a=eks,b=pan,i=830,x=0.36350612065623267,y=0.2886476639992571 -a=eks,b=zee,i=831,x=0.692611920160873,y=0.26262694975977385 -a=hat,b=wye,i=832,x=0.7659227499835054,y=0.6521346139410953 -a=pan,b=zee,i=833,x=0.8267760334483312,y=0.8318269743977437 -a=eks,b=eks,i=834,x=0.7372846052959475,y=0.386390580949861 -a=zee,b=pan,i=835,x=0.9167189417830722,y=0.07204465286089479 -a=zee,b=wye,i=836,x=0.5756190775565698,y=0.7938251688467333 -a=wye,b=wye,i=837,x=0.2328642613637898,y=0.46278413120375006 -a=eks,b=eks,i=838,x=0.7797750429004653,y=0.29884322034130906 -a=pan,b=eks,i=839,x=0.8726738283401857,y=0.04628087648432999 -a=zee,b=hat,i=840,x=0.6677673890093077,y=0.6533094635586054 -a=hat,b=pan,i=841,x=0.4486203012761554,y=0.3566552462496445 -a=eks,b=hat,i=842,x=0.4549321247838193,y=0.07592100983285954 -a=wye,b=wye,i=843,x=0.255982822267825,y=0.3803102296515556 -a=eks,b=hat,i=844,x=0.3446014862942576,y=0.7572793591602713 -a=wye,b=eks,i=845,x=0.6203491211980909,y=0.15025452711014609 -a=eks,b=zee,i=846,x=0.9460265533905371,y=0.45198587094481946 -a=hat,b=wye,i=847,x=0.49389611860028626,y=0.07353689220151671 -a=zee,b=pan,i=848,x=0.7169514982586007,y=0.9408480112735236 -a=wye,b=wye,i=849,x=0.6446224014740414,y=0.11523766674998448 -a=pan,b=eks,i=850,x=0.7274412652107003,y=0.6621932392565703 -a=wye,b=pan,i=851,x=0.3263942251497617,y=0.9932583238060141 -a=wye,b=eks,i=852,x=0.664738707605857,y=0.7223078050122264 -a=eks,b=hat,i=853,x=0.1880170274631281,y=0.10968535421904191 -a=hat,b=eks,i=854,x=0.6939278762348635,y=0.5313359369168281 -a=hat,b=hat,i=855,x=0.7112683657239158,y=0.6136040745504255 -a=zee,b=eks,i=856,x=0.5439786015377756,y=0.9686655026402698 -a=zee,b=zee,i=857,x=0.10264607530788517,y=0.3331005309508399 -a=eks,b=zee,i=858,x=0.484034536497318,y=0.5074658760998881 -a=wye,b=hat,i=859,x=0.8335422363466695,y=0.3120932232687599 -a=wye,b=zee,i=860,x=0.5661718614546278,y=0.008186918681462707 -a=hat,b=pan,i=861,x=0.9969936112759107,y=0.21269969787446608 -a=pan,b=wye,i=862,x=0.30274837710060487,y=0.015353477159141038 -a=wye,b=pan,i=863,x=0.23680176335245073,y=0.23457864754397195 -a=zee,b=zee,i=864,x=0.809561039932752,y=0.6017320599557826 -a=wye,b=zee,i=865,x=0.7815565737026456,y=0.8572095724845105 -a=eks,b=hat,i=866,x=0.5917695655140688,y=0.560162197865116 -a=hat,b=zee,i=867,x=0.722695048982041,y=0.8684988555802282 -a=wye,b=hat,i=868,x=0.21734964563610804,y=0.8045525190525901 -a=wye,b=hat,i=869,x=0.226340504641239,y=0.6618680946496492 -a=eks,b=wye,i=870,x=0.03466858500680492,y=0.5621939039921067 -a=pan,b=wye,i=871,x=0.6789169629628927,y=0.5193967453982994 -a=pan,b=pan,i=872,x=0.7564798789126915,y=0.7115590422599338 -a=wye,b=hat,i=873,x=0.45127322199816233,y=0.7742566444517696 -a=eks,b=wye,i=874,x=0.5403377945244225,y=0.16069845073082 -a=pan,b=hat,i=875,x=0.1859774664492485,y=0.3619489833924334 -a=wye,b=wye,i=876,x=0.4835086084877356,y=0.4540385079562712 -a=wye,b=pan,i=877,x=0.27907367543536465,y=0.12385159649360233 -a=hat,b=zee,i=878,x=0.3102237192022368,y=0.9669823901049626 -a=eks,b=hat,i=879,x=0.6888483812825917,y=0.5505783461131407 -a=hat,b=pan,i=880,x=0.9443559576513696,y=0.776626094540373 -a=eks,b=pan,i=881,x=0.6733492820398447,y=0.11891510514178161 -a=pan,b=pan,i=882,x=0.439665640988951,y=0.4549660840547012 -a=pan,b=hat,i=883,x=0.5540100503192463,y=0.8429668921287791 -a=pan,b=zee,i=884,x=0.9569511624197534,y=0.009698935906691575 -a=zee,b=wye,i=885,x=0.4317067888424335,y=0.7251769880284373 -a=eks,b=wye,i=886,x=0.3652904236362593,y=0.20906833314831175 -a=pan,b=pan,i=887,x=0.6949995284041934,y=0.8053235553778822 -a=pan,b=zee,i=888,x=0.7370727975606584,y=0.4485080316317849 -a=wye,b=wye,i=889,x=0.9080280619248189,y=0.9139513254924729 -a=pan,b=hat,i=890,x=0.680338712677067,y=0.010994432325418524 -a=hat,b=eks,i=891,x=0.6355325141001417,y=0.07695298953416263 -a=eks,b=wye,i=892,x=0.1376969209844151,y=0.834454990298031 -a=eks,b=zee,i=893,x=0.9355755568148436,y=0.25640673765414823 -a=zee,b=hat,i=894,x=0.06918579614388565,y=0.8717142673159294 -a=pan,b=zee,i=895,x=0.9990440068491747,y=0.20478744699359197 -a=eks,b=pan,i=896,x=0.18020508273454894,y=0.18233459061350799 -a=zee,b=pan,i=897,x=0.16948195877360084,y=0.4673040380612351 -a=pan,b=zee,i=898,x=0.048671024346735314,y=0.4634456617937973 -a=eks,b=wye,i=899,x=0.6376504261357228,y=0.4968859553621585 -a=wye,b=zee,i=900,x=0.0634446641763643,y=0.47070339237478154 -a=hat,b=pan,i=901,x=0.3948962420926134,y=0.2858499628646297 -a=zee,b=hat,i=902,x=0.792376744926382,y=0.7540301970987514 -a=pan,b=zee,i=903,x=0.5150758332324689,y=0.8265689553462827 -a=zee,b=pan,i=904,x=0.6774926045379539,y=0.2790431227538289 -a=pan,b=wye,i=905,x=0.46948597026992234,y=0.6282160374404341 -a=wye,b=zee,i=906,x=0.5370940115523006,y=0.1284825381186716 -a=eks,b=wye,i=907,x=0.5764461281567995,y=0.6560112583406935 -a=zee,b=hat,i=908,x=0.2293422544193603,y=0.5310403236033165 -a=hat,b=pan,i=909,x=0.2565065893296261,y=0.3546175861833417 -a=hat,b=zee,i=910,x=0.026474784279227448,y=0.7004167503216063 -a=pan,b=eks,i=911,x=0.06608607463859384,y=0.07128733055849312 -a=wye,b=eks,i=912,x=0.3364968005146698,y=0.5787883063495668 -a=hat,b=wye,i=913,x=0.5696196789270859,y=0.5118141918287126 -a=eks,b=zee,i=914,x=0.8582285128247622,y=0.7604153187806654 -a=wye,b=eks,i=915,x=0.5460355036287519,y=0.8958184949801713 -a=hat,b=pan,i=916,x=0.2607796424126346,y=0.2105454483785194 -a=wye,b=hat,i=917,x=0.3846528045634492,y=0.3124085567677639 -a=hat,b=eks,i=918,x=0.5027707430075526,y=0.4544234955959021 -a=eks,b=pan,i=919,x=0.7703238268018578,y=0.11858518036609156 -a=wye,b=eks,i=920,x=0.6878423136601669,y=0.10216851974973384 -a=eks,b=zee,i=921,x=0.012096720577898457,y=0.6297080697429681 -a=pan,b=eks,i=922,x=0.2886175127593028,y=0.828634782804935 -a=wye,b=pan,i=923,x=0.9626100389715443,y=0.3905150319464591 -a=hat,b=pan,i=924,x=0.3002347573504318,y=0.7414891858002532 -a=pan,b=zee,i=925,x=0.3447367209775769,y=0.8487811195467444 -a=zee,b=hat,i=926,x=0.3969942807955067,y=0.7524046203617899 -a=zee,b=zee,i=927,x=0.7610101430574051,y=0.4964453780226331 -a=hat,b=pan,i=928,x=0.9769401114714371,y=0.19866082639978944 -a=hat,b=zee,i=929,x=0.9119484815981432,y=0.9002090722192556 -a=eks,b=hat,i=930,x=0.28511500317711636,y=0.728558620027423 -a=pan,b=hat,i=931,x=0.15134527475607873,y=0.348369087467138 -a=zee,b=eks,i=932,x=0.7361189289061444,y=0.3847525716179372 -a=wye,b=zee,i=933,x=0.3661453331509762,y=0.004152078250187152 -a=wye,b=wye,i=934,x=0.447099608509545,y=0.17594771830007339 -a=wye,b=zee,i=935,x=0.3196703223884384,y=0.8888974787225958 -a=zee,b=zee,i=936,x=0.562838339421027,y=0.007778020871679225 -a=zee,b=eks,i=937,x=0.02003336919176857,y=0.26669570512199325 -a=eks,b=wye,i=938,x=0.3043257328168447,y=0.2906418445735329 -a=zee,b=zee,i=939,x=0.8978345983120852,y=0.030447079101845298 -a=eks,b=zee,i=940,x=0.5585422926486657,y=0.4978694410328127 -a=hat,b=wye,i=941,x=0.5621962178745717,y=0.26772849156914025 -a=hat,b=zee,i=942,x=0.6242711478551904,y=0.09401579423266704 -a=eks,b=eks,i=943,x=0.27194272184638746,y=0.9612750351440212 -a=hat,b=wye,i=944,x=0.8822781716699086,y=0.6067074807238132 -a=zee,b=wye,i=945,x=0.7825493610673169,y=0.32373164668188725 -a=wye,b=zee,i=946,x=0.1013010312091508,y=0.8534111346417461 -a=zee,b=wye,i=947,x=0.8584260523164629,y=0.23498149964077852 -a=zee,b=pan,i=948,x=0.7984764587459684,y=0.6810243958256237 -a=wye,b=hat,i=949,x=0.23478741222352084,y=0.37065868020096504 -a=hat,b=wye,i=950,x=0.09950476962568644,y=0.08527686061721151 -a=wye,b=zee,i=951,x=0.032452509100876825,y=0.13213830932576387 -a=pan,b=pan,i=952,x=0.20155399565096999,y=0.26323541426295427 -a=zee,b=hat,i=953,x=0.7258512915506337,y=0.7130469035339413 -a=wye,b=zee,i=954,x=0.5189900736412828,y=0.9806684784703058 -a=pan,b=zee,i=955,x=0.6876410065228761,y=0.049081361078488706 -a=eks,b=wye,i=956,x=0.8483404387366377,y=0.6963230727503091 -a=hat,b=eks,i=957,x=0.7658922923332185,y=0.42890062704958776 -a=hat,b=wye,i=958,x=0.5889300471089299,y=0.09950882081879164 -a=zee,b=hat,i=959,x=0.5401768517178055,y=0.576926299555725 -a=zee,b=pan,i=960,x=0.14284356858511216,y=0.7464892897966853 -a=zee,b=hat,i=961,x=0.6778089684859776,y=0.0814354668691658 -a=eks,b=wye,i=962,x=0.49553623626743193,y=0.9650390956306768 -a=pan,b=eks,i=963,x=0.022898529014032887,y=0.8442755412229669 -a=eks,b=pan,i=964,x=0.11974210479568592,y=0.1727873170586557 -a=pan,b=eks,i=965,x=0.43364055944870217,y=0.9883467323590831 -a=hat,b=eks,i=966,x=0.3126841836488823,y=0.8616419739774406 -a=wye,b=zee,i=967,x=0.8957509371936184,y=0.6646859799560008 -a=wye,b=pan,i=968,x=0.6531533778557712,y=0.8078705982263845 -a=pan,b=pan,i=969,x=0.9309046826091119,y=0.16276567995818791 -a=wye,b=eks,i=970,x=0.0003669282805145446,y=0.7009817497170139 -a=pan,b=pan,i=971,x=0.48986271798634495,y=0.9495185819962723 -a=zee,b=eks,i=972,x=0.25911127762915553,y=0.6423261731196327 -a=pan,b=wye,i=973,x=0.31594050674870533,y=0.3202147086921625 -a=wye,b=pan,i=974,x=0.10722011957438404,y=0.8335217073851289 -a=wye,b=eks,i=975,x=0.22837011741983626,y=0.8508657508706551 -a=hat,b=pan,i=976,x=0.2213905763595585,y=0.9144918892479273 -a=wye,b=hat,i=977,x=0.8403881011140902,y=0.15373049137990247 -a=wye,b=pan,i=978,x=0.2223195417593009,y=0.9927065687777529 -a=pan,b=eks,i=979,x=0.3047140631616194,y=0.012239402814423261 -a=pan,b=hat,i=980,x=0.08006366208466742,y=0.46683918475842656 -a=zee,b=pan,i=981,x=0.1460023204833616,y=0.6268639860761865 -a=zee,b=wye,i=982,x=0.37341981725134477,y=0.043362859112128116 -a=pan,b=eks,i=983,x=0.23455765897855474,y=0.5826786823171225 -a=eks,b=zee,i=984,x=0.1229552360203735,y=0.4375490388704373 -a=eks,b=hat,i=985,x=0.011903992841803879,y=0.20158842970916258 -a=zee,b=pan,i=986,x=0.36309769750156073,y=0.41372304201591836 -a=zee,b=pan,i=987,x=0.2675153812056569,y=0.31944778253720596 -a=zee,b=eks,i=988,x=0.4159116125988659,y=0.0527646250644187 -a=zee,b=wye,i=989,x=0.8290703900542629,y=0.0029342637852388664 -a=hat,b=hat,i=990,x=0.6968268719895765,y=0.7388049214848422 -a=zee,b=eks,i=991,x=0.04205521417416125,y=0.7400694180318313 -a=wye,b=hat,i=992,x=0.1082025069192426,y=0.382293188133744 -a=pan,b=hat,i=993,x=0.9655911362500376,y=0.6528068171940502 -a=pan,b=hat,i=994,x=0.06296083376713069,y=0.924782731671716 -a=zee,b=hat,i=995,x=0.19931174025957066,y=0.6628915066032653 -a=pan,b=pan,i=996,x=0.3896870360326876,y=0.7398938519226621 -a=wye,b=pan,i=997,x=0.6473214345392985,y=0.1580211199769581 -a=wye,b=wye,i=998,x=0.7054609891598416,y=0.11530820363956795 -a=eks,b=wye,i=999,x=0.7530797661303167,y=0.7943533279150342 -a=hat,b=hat,i=1000,x=0.27862167380000924,y=0.8957145512576364 -a=pan,b=eks,i=1001,x=0.5972691205647312,y=0.4313550003841107 -a=zee,b=wye,i=1002,x=0.27589217856931847,y=0.4784417775011829 -a=pan,b=wye,i=1003,x=0.6022804421463093,y=0.15258107959053602 -a=wye,b=hat,i=1004,x=0.7556173435575428,y=0.5360056181198413 -a=wye,b=zee,i=1005,x=0.35533936034338987,y=0.5883076566864401 -a=pan,b=hat,i=1006,x=0.4446033039150368,y=0.9979731391657491 -a=zee,b=wye,i=1007,x=0.6726350502133611,y=0.9779321628810685 -a=hat,b=eks,i=1008,x=0.19927285497348735,y=0.22487729305731685 -a=eks,b=zee,i=1009,x=0.6292400672017409,y=0.344666919378786 -a=hat,b=eks,i=1010,x=0.32802933242359655,y=0.2955845001645365 -a=pan,b=eks,i=1011,x=0.7217042904394803,y=0.2232569692246722 -a=pan,b=zee,i=1012,x=0.5003888723420944,y=0.03004905415183634 -a=hat,b=zee,i=1013,x=0.6449280930394627,y=0.012641120692678642 -a=pan,b=zee,i=1014,x=0.2224977060602883,y=0.1335049252959022 -a=eks,b=eks,i=1015,x=0.5441091824904251,y=0.27206919115344796 -a=wye,b=zee,i=1016,x=0.17366739952321908,y=0.937706710544049 -a=pan,b=zee,i=1017,x=0.787790582328257,y=0.844311491671081 -a=pan,b=eks,i=1018,x=0.015795494747047223,y=0.8254990704093889 -a=pan,b=zee,i=1019,x=0.23762521364858846,y=0.8673593962442501 -a=eks,b=pan,i=1020,x=0.902360533880021,y=0.7028811168584178 -a=zee,b=wye,i=1021,x=0.008857541583488837,y=0.21509348675167894 -a=eks,b=wye,i=1022,x=0.33588773148782947,y=0.40718964301240856 -a=zee,b=eks,i=1023,x=0.21227584421525614,y=0.7891727565371357 -a=zee,b=eks,i=1024,x=0.38754385741774056,y=0.42814516635986044 -a=pan,b=eks,i=1025,x=0.19841453521545604,y=0.08811826842406556 -a=eks,b=zee,i=1026,x=0.2741615196854501,y=0.5767980610310797 -a=eks,b=zee,i=1027,x=0.7911574513154387,y=0.7553091091067402 -a=eks,b=wye,i=1028,x=0.31990228399247944,y=0.9227512605727171 -a=wye,b=eks,i=1029,x=0.2129672492537904,y=0.455409159116715 -a=pan,b=pan,i=1030,x=0.5408386772361381,y=0.7160509492545313 -a=hat,b=zee,i=1031,x=0.48469619278770393,y=0.6097136149080437 -a=zee,b=pan,i=1032,x=0.8214019848831586,y=0.6593835512799063 -a=eks,b=wye,i=1033,x=0.9319773759232135,y=0.8773892832568154 -a=eks,b=hat,i=1034,x=0.21608546142882312,y=0.30554114451483116 -a=hat,b=hat,i=1035,x=0.09020906616714786,y=0.10290991425754714 -a=wye,b=zee,i=1036,x=0.3531778666649932,y=0.2809207717510849 -a=hat,b=eks,i=1037,x=0.0945175541677894,y=0.3745112769716772 -a=zee,b=pan,i=1038,x=0.5692057342171193,y=0.9606327704233413 -a=zee,b=hat,i=1039,x=0.3081554551270379,y=0.4385650169051888 -a=wye,b=hat,i=1040,x=0.5455490636956486,y=0.2139309079198488 -a=pan,b=wye,i=1041,x=0.1485239533830236,y=0.1776854474981574 -a=pan,b=pan,i=1042,x=0.15706603838853506,y=0.7751554210841053 -a=pan,b=eks,i=1043,x=0.9037009385297075,y=0.6127765961736429 -a=hat,b=eks,i=1044,x=0.1317980665424846,y=0.5354311378322799 -a=pan,b=zee,i=1045,x=0.18824317733657336,y=0.5079230664372042 -a=pan,b=wye,i=1046,x=0.6487563188200542,y=0.017743851244559794 -a=wye,b=pan,i=1047,x=0.9924515398966479,y=0.8295830268367035 -a=hat,b=hat,i=1048,x=0.866877027845022,y=0.3657752233481316 -a=eks,b=eks,i=1049,x=0.5783739636973764,y=0.4270609054347013 -a=zee,b=zee,i=1050,x=0.7931385685414742,y=0.7121487657433946 -a=pan,b=eks,i=1051,x=0.07958271178407761,y=0.7510868078663989 -a=hat,b=hat,i=1052,x=0.967055767380358,y=0.2710585230744418 -a=wye,b=pan,i=1053,x=0.7709670432157318,y=0.18501678400499033 -a=wye,b=zee,i=1054,x=0.08626749693608815,y=0.25205147479956 -a=eks,b=eks,i=1055,x=0.7570291652540911,y=0.5426597756349021 -a=wye,b=eks,i=1056,x=0.17697196127444081,y=0.48721255903838334 -a=wye,b=pan,i=1057,x=0.34801756734906164,y=0.5214181842054965 -a=pan,b=hat,i=1058,x=0.8522482352165042,y=0.7495559067319948 -a=hat,b=pan,i=1059,x=0.2746468542015157,y=0.06589726142698449 -a=zee,b=eks,i=1060,x=0.18748360833449518,y=0.7624096925483054 -a=hat,b=hat,i=1061,x=0.7349337283030247,y=0.8809097022915752 -a=zee,b=hat,i=1062,x=0.8802861735497903,y=0.6464219752541935 -a=zee,b=hat,i=1063,x=0.4065008342810489,y=0.886323765340433 -a=eks,b=hat,i=1064,x=0.4424079924279726,y=0.9148635648447586 -a=hat,b=hat,i=1065,x=0.010130482768756055,y=0.9048046422071615 -a=pan,b=zee,i=1066,x=0.0174503828855882,y=0.3772767215216971 -a=pan,b=hat,i=1067,x=0.5324513907264202,y=0.7766825690772374 -a=pan,b=zee,i=1068,x=0.9292735422372311,y=0.7845794722193757 -a=wye,b=hat,i=1069,x=0.10796407185484191,y=0.026926570164813146 -a=pan,b=eks,i=1070,x=0.48689932881768716,y=0.8580079152498714 -a=eks,b=hat,i=1071,x=0.15020029058361362,y=0.45627529973691716 -a=hat,b=pan,i=1072,x=0.44604654951505474,y=0.8038155982865464 -a=eks,b=zee,i=1073,x=0.09738725055678144,y=0.08505208961455624 -a=hat,b=hat,i=1074,x=0.3236826909608632,y=0.49627141594209967 -a=eks,b=zee,i=1075,x=0.7153896932288586,y=0.9778494726905622 -a=zee,b=hat,i=1076,x=0.7057228729875391,y=0.3212868771712061 -a=pan,b=zee,i=1077,x=0.5856627674432751,y=0.9241757857209006 -a=eks,b=eks,i=1078,x=0.35578945733022505,y=0.45528814372216575 -a=pan,b=zee,i=1079,x=0.028491257749501564,y=0.7125221088820232 -a=wye,b=wye,i=1080,x=0.016813529366139446,y=0.30619226711821357 -a=pan,b=hat,i=1081,x=0.9328542327992406,y=0.9238747036441417 -a=eks,b=hat,i=1082,x=0.818988631617168,y=0.6912196193544532 -a=hat,b=wye,i=1083,x=0.8665578508008973,y=0.22211673759850004 -a=hat,b=zee,i=1084,x=0.41406718708821955,y=0.02723245214010661 -a=zee,b=eks,i=1085,x=0.13035161260495198,y=0.5640103641360239 -a=eks,b=hat,i=1086,x=0.03139277667157425,y=0.5383540545781755 -a=eks,b=zee,i=1087,x=0.041919682544647396,y=0.43365253130183956 -a=pan,b=zee,i=1088,x=0.8344662624969731,y=0.05039883331049 -a=wye,b=pan,i=1089,x=0.10459506042932876,y=0.7767794982555558 -a=zee,b=hat,i=1090,x=0.05459959955270677,y=0.6641081427852065 -a=eks,b=wye,i=1091,x=0.9741063795340834,y=0.5869419824678774 -a=zee,b=zee,i=1092,x=0.913252015241433,y=0.41317703347248136 -a=wye,b=pan,i=1093,x=0.060917243371145124,y=0.0729984416375653 -a=hat,b=eks,i=1094,x=0.06571775207401842,y=0.6161858340132806 -a=eks,b=wye,i=1095,x=0.9703612589022951,y=0.02299184173282698 -a=pan,b=wye,i=1096,x=0.3123275732448444,y=0.9046978224447048 -a=pan,b=eks,i=1097,x=0.36433855475903487,y=0.28640575782602984 -a=pan,b=zee,i=1098,x=0.9388863703832938,y=0.9481045761632589 -a=wye,b=eks,i=1099,x=0.1801852674259774,y=0.8001313396984383 -a=pan,b=wye,i=1100,x=0.9449163664787465,y=0.21041416481960495 -a=zee,b=pan,i=1101,x=0.9851142251459588,y=0.833308434948654 -a=hat,b=zee,i=1102,x=0.6058843659959886,y=0.914771957616851 -a=hat,b=hat,i=1103,x=0.09907505801136207,y=0.9886361549898667 -a=wye,b=zee,i=1104,x=0.6026401587598063,y=0.9232948941188992 -a=hat,b=zee,i=1105,x=0.7049227417732974,y=0.0462839144297168 -a=pan,b=eks,i=1106,x=0.5485375288525932,y=0.41787054723627115 -a=wye,b=zee,i=1107,x=0.2172040459296869,y=0.04347447260250059 -a=zee,b=wye,i=1108,x=0.17849311848568739,y=0.15336908789618675 -a=pan,b=zee,i=1109,x=0.9209948537835644,y=0.9617211607571948 -a=zee,b=zee,i=1110,x=0.5617606152508641,y=0.12922472841055488 -a=hat,b=zee,i=1111,x=0.5096259842809261,y=0.9716058274135191 -a=eks,b=pan,i=1112,x=0.4601480008274824,y=0.6621941381779669 -a=wye,b=hat,i=1113,x=0.04619109705664248,y=0.07731183378456241 -a=eks,b=zee,i=1114,x=0.6225031791605239,y=0.724470067269006 -a=hat,b=zee,i=1115,x=0.4384136215828739,y=0.8991776975784843 -a=pan,b=pan,i=1116,x=0.3318167439135842,y=0.07638995864053721 -a=hat,b=pan,i=1117,x=0.08389296153750614,y=0.616903034571171 -a=eks,b=eks,i=1118,x=0.42321284015690686,y=0.18075244176916405 -a=hat,b=zee,i=1119,x=0.9947060390455312,y=0.9155106367235321 -a=hat,b=pan,i=1120,x=0.322426480645594,y=0.8107856936608234 -a=eks,b=eks,i=1121,x=0.011345137277951278,y=0.30150866101509777 -a=hat,b=hat,i=1122,x=0.2386256214986372,y=0.5024389651151668 -a=hat,b=wye,i=1123,x=0.7175177574035164,y=0.49060053901509204 -a=pan,b=eks,i=1124,x=0.08353595333636898,y=0.5861415970535602 -a=eks,b=hat,i=1125,x=0.30127828892745145,y=0.6471608610675756 -a=wye,b=wye,i=1126,x=0.8391082612863554,y=0.8564234939160587 -a=hat,b=pan,i=1127,x=0.832626957843269,y=0.6240442951248336 -a=hat,b=hat,i=1128,x=0.8806935192862494,y=0.7838162296913623 -a=pan,b=zee,i=1129,x=0.3315347253194,y=0.008089402263374845 -a=zee,b=wye,i=1130,x=0.01851853736108866,y=0.17184568517491516 -a=wye,b=zee,i=1131,x=0.8126126224772602,y=0.9995009548069009 -a=hat,b=zee,i=1132,x=0.4073244488743951,y=0.5406132572557787 -a=zee,b=zee,i=1133,x=0.8240890643910131,y=0.13624992612749198 -a=wye,b=eks,i=1134,x=0.7808769789539313,y=0.8783411417393904 -a=zee,b=eks,i=1135,x=0.6515492928760739,y=0.03540134679084295 -a=hat,b=pan,i=1136,x=0.5009194590736257,y=0.37469060025761247 -a=zee,b=hat,i=1137,x=0.925731020213508,y=0.12357673418366155 -a=pan,b=zee,i=1138,x=0.7159872385785992,y=0.04528852253706328 -a=hat,b=zee,i=1139,x=0.6331768836278109,y=0.1369717170583027 -a=zee,b=eks,i=1140,x=0.048571653758132216,y=0.3492112898081101 -a=hat,b=hat,i=1141,x=0.612461401988446,y=0.14847850688380781 -a=eks,b=eks,i=1142,x=0.027183982557207553,y=0.588477870478424 -a=zee,b=pan,i=1143,x=0.9927901703526475,y=0.12700602926571025 -a=hat,b=zee,i=1144,x=0.007391695879485738,y=0.9756749119225023 -a=hat,b=eks,i=1145,x=0.8273428505388051,y=0.9831021972218925 -a=pan,b=hat,i=1146,x=0.8460372878397171,y=0.3239568575223264 -a=wye,b=zee,i=1147,x=0.011254496718364537,y=0.2947614358547457 -a=wye,b=eks,i=1148,x=0.510274781147883,y=0.6342886591607202 -a=eks,b=hat,i=1149,x=0.08103428766976473,y=0.530747032666464 -a=hat,b=hat,i=1150,x=0.4058826696970118,y=0.4216435681134768 -a=pan,b=pan,i=1151,x=0.6861388937798399,y=0.33890003075281316 -a=eks,b=zee,i=1152,x=0.5857634146388722,y=0.042952777230192085 -a=pan,b=hat,i=1153,x=0.6757867606577086,y=0.7740341802587707 -a=hat,b=eks,i=1154,x=0.48734948309736814,y=0.03392833831821873 -a=hat,b=pan,i=1155,x=0.15696039673828777,y=0.29845938463448995 -a=eks,b=eks,i=1156,x=0.7220504220155584,y=0.3069530341008503 -a=zee,b=hat,i=1157,x=0.8122264673038031,y=0.8517729655458225 -a=zee,b=zee,i=1158,x=0.8088760687957014,y=0.21112197613175976 -a=zee,b=wye,i=1159,x=0.46769194201594133,y=0.4329746427091592 -a=wye,b=hat,i=1160,x=0.7263377504273455,y=0.17415133160693874 -a=wye,b=eks,i=1161,x=0.6442949189199954,y=0.1494819214827784 -a=eks,b=wye,i=1162,x=0.9629901424599551,y=0.7303763539966592 -a=hat,b=pan,i=1163,x=0.1540633521892789,y=0.30579559836649084 -a=pan,b=pan,i=1164,x=0.0565757314681804,y=0.8372880556318811 -a=hat,b=pan,i=1165,x=0.6211654981395032,y=0.8227816494549414 -a=eks,b=eks,i=1166,x=0.43746753562542595,y=0.4554692262381064 -a=zee,b=hat,i=1167,x=0.3367047133504143,y=0.8141824349803665 -a=eks,b=pan,i=1168,x=0.8136679912512943,y=0.597540308230969 -a=zee,b=wye,i=1169,x=0.5770899885002667,y=0.28863298687378613 -a=eks,b=hat,i=1170,x=0.38648551728927116,y=0.444170386297162 -a=wye,b=zee,i=1171,x=0.6468403370363878,y=0.9265036001050484 -a=wye,b=hat,i=1172,x=0.24417531360698597,y=0.4885016640644757 -a=eks,b=pan,i=1173,x=0.14021562324171288,y=0.8343881176338883 -a=hat,b=wye,i=1174,x=0.8826971260268877,y=0.5204304309651815 -a=wye,b=hat,i=1175,x=0.07253012277298443,y=0.23424850735777059 -a=hat,b=eks,i=1176,x=0.006644223863763399,y=0.0816917135559706 -a=wye,b=eks,i=1177,x=0.9032818287668923,y=0.3192995339899316 -a=eks,b=zee,i=1178,x=0.6806297878854731,y=0.5818723196551134 -a=pan,b=pan,i=1179,x=0.8705072785671686,y=0.6988727124241529 -a=zee,b=eks,i=1180,x=0.9994378171787394,y=0.13347602700579186 -a=hat,b=hat,i=1181,x=0.9918698253530575,y=0.1452498294514708 -a=hat,b=eks,i=1182,x=0.7176916554404814,y=0.11479832193407902 -a=wye,b=eks,i=1183,x=0.6661595747080763,y=0.38719941985040585 -a=zee,b=zee,i=1184,x=0.12344811253503452,y=0.7278140023096202 -a=hat,b=eks,i=1185,x=0.8923180879132536,y=0.05433793092315187 -a=hat,b=pan,i=1186,x=0.18605162703349232,y=0.08984973385947226 -a=pan,b=wye,i=1187,x=0.002298959425301561,y=0.8456888165062316 -a=hat,b=hat,i=1188,x=0.12094979737180311,y=0.6069817211275821 -a=pan,b=hat,i=1189,x=0.36260151632409887,y=0.5849544530123062 -a=hat,b=wye,i=1190,x=0.6833808585344113,y=0.09408333641094069 -a=hat,b=pan,i=1191,x=0.6073887594007545,y=0.582980066141568 -a=zee,b=zee,i=1192,x=0.20794006469650417,y=0.8379074082927926 -a=pan,b=wye,i=1193,x=0.022245524512133796,y=0.6352302232122171 -a=eks,b=hat,i=1194,x=0.9006853879899086,y=0.05583549785972808 -a=pan,b=pan,i=1195,x=0.16832227022787238,y=0.13828673042487394 -a=hat,b=eks,i=1196,x=0.3928690398294634,y=0.6037073958974022 -a=pan,b=hat,i=1197,x=0.3580350006103836,y=0.814312590748317 -a=zee,b=zee,i=1198,x=0.7027548035545187,y=0.5696437156771905 -a=hat,b=wye,i=1199,x=0.5089871727765719,y=0.22764827796274545 -a=zee,b=wye,i=1200,x=0.6577969186215513,y=0.13335841083829625 -a=zee,b=hat,i=1201,x=0.8874397146268569,y=0.3285624695821543 -a=eks,b=eks,i=1202,x=0.8354259959835246,y=0.05671746191419269 -a=hat,b=eks,i=1203,x=0.13371374012873294,y=0.255811175503322 -a=zee,b=zee,i=1204,x=0.7698393537978214,y=0.15023057683572805 -a=pan,b=eks,i=1205,x=0.7829882013835832,y=0.8062997039846184 -a=wye,b=hat,i=1206,x=0.8250443883729883,y=0.40002163110909417 -a=wye,b=eks,i=1207,x=0.2912587148785738,y=0.8031779767496858 -a=zee,b=hat,i=1208,x=0.6858599554715019,y=0.18452417758198125 -a=wye,b=wye,i=1209,x=0.7107203114111836,y=0.00017993344165900815 -a=pan,b=zee,i=1210,x=0.3363044695544226,y=0.6283867129304496 -a=hat,b=eks,i=1211,x=0.8188718956849538,y=0.8967648753839026 -a=pan,b=wye,i=1212,x=0.664842209320305,y=0.5067617041720663 -a=hat,b=eks,i=1213,x=0.99973332327313,y=0.34548764769191365 -a=pan,b=pan,i=1214,x=0.7158445324765502,y=0.7170272500849562 -a=zee,b=eks,i=1215,x=0.17023806172245382,y=0.11112961156527701 -a=pan,b=eks,i=1216,x=0.032830805279464026,y=0.858300617398515 -a=pan,b=pan,i=1217,x=0.058339498506774445,y=0.3299590477816785 -a=pan,b=wye,i=1218,x=0.2981850301136384,y=0.275715699110609 -a=wye,b=hat,i=1219,x=0.9269469541827934,y=0.433885024903532 -a=wye,b=pan,i=1220,x=0.5590392185080515,y=0.3532795367709467 -a=zee,b=pan,i=1221,x=0.1120496540408027,y=0.052474214794520524 -a=wye,b=wye,i=1222,x=0.32857456764622284,y=0.9839624955444709 -a=eks,b=hat,i=1223,x=0.07964593404126263,y=0.5223768981550353 -a=zee,b=hat,i=1224,x=0.6087209788431407,y=0.009657060823042296 -a=pan,b=hat,i=1225,x=0.2062334403825843,y=0.9229745059225746 -a=wye,b=zee,i=1226,x=0.17708548635341936,y=0.9990248955111103 -a=zee,b=wye,i=1227,x=0.35351274012969736,y=0.4041475707851616 -a=eks,b=eks,i=1228,x=0.5030002251433316,y=0.8127865742005792 -a=hat,b=eks,i=1229,x=0.6208757978424075,y=0.5685317001125881 -a=hat,b=wye,i=1230,x=0.4033883868841214,y=0.21662083975598512 -a=eks,b=hat,i=1231,x=0.8372211910010664,y=0.05104830485393308 -a=zee,b=zee,i=1232,x=0.6255227701030528,y=0.7068037158292888 -a=zee,b=hat,i=1233,x=0.16099869622122553,y=0.03145480439751913 -a=wye,b=eks,i=1234,x=0.29236003818241163,y=0.0038729096629406268 -a=zee,b=eks,i=1235,x=0.4597704185565915,y=0.9921180702735245 -a=eks,b=wye,i=1236,x=0.25200335314789113,y=0.18668063103395705 -a=pan,b=hat,i=1237,x=0.7976885073930762,y=0.5851390530977472 -a=eks,b=zee,i=1238,x=0.09123558516113806,y=0.7444584317010036 -a=eks,b=wye,i=1239,x=0.28018636325329804,y=0.9609284482216048 -a=eks,b=zee,i=1240,x=0.31745479549254885,y=0.19433880518244362 -a=wye,b=wye,i=1241,x=0.02167407035426938,y=0.8517578603799361 -a=zee,b=zee,i=1242,x=0.6106259696599957,y=0.022315745293787215 -a=pan,b=zee,i=1243,x=0.6589609168139929,y=0.6454105665267801 -a=wye,b=eks,i=1244,x=0.2787899466812519,y=0.06055887677281169 -a=zee,b=pan,i=1245,x=0.2470406639222188,y=0.5853815139856057 -a=hat,b=pan,i=1246,x=0.45904971489441826,y=0.5163058230383074 -a=eks,b=wye,i=1247,x=0.9834930996078813,y=0.4959362914616142 -a=pan,b=hat,i=1248,x=0.1525604218696871,y=0.07482470280574516 -a=hat,b=hat,i=1249,x=0.7002367713266386,y=0.6487527612372115 -a=zee,b=hat,i=1250,x=0.9701426957388892,y=0.7845500860373503 -a=pan,b=hat,i=1251,x=0.5290805139059341,y=0.7100071242645416 -a=hat,b=hat,i=1252,x=0.09930445608258032,y=0.5660530272938328 -a=zee,b=eks,i=1253,x=0.5423655422122198,y=0.859227213109029 -a=zee,b=pan,i=1254,x=0.21221332375586466,y=0.26582553763793293 -a=zee,b=eks,i=1255,x=0.5793553556065434,y=0.563660887083747 -a=pan,b=pan,i=1256,x=0.10769070223113286,y=0.7797941844365985 -a=wye,b=wye,i=1257,x=0.23334157949355694,y=0.48533573180276546 -a=pan,b=wye,i=1258,x=0.2995600681122321,y=0.7432427054977825 -a=zee,b=wye,i=1259,x=0.18343409452228054,y=0.018648673229345936 -a=wye,b=eks,i=1260,x=0.7451552312920868,y=0.7083570752878636 -a=zee,b=zee,i=1261,x=0.5511811148393049,y=0.1182107616782363 -a=eks,b=pan,i=1262,x=0.6119687598964016,y=0.8309635765979287 -a=hat,b=zee,i=1263,x=0.990205350112817,y=0.9130137981522629 -a=wye,b=eks,i=1264,x=0.2728580162726342,y=0.34083170474058677 -a=wye,b=hat,i=1265,x=0.03629556392023969,y=0.14427174473473803 -a=zee,b=eks,i=1266,x=0.042350338334240956,y=0.1289699792266037 -a=eks,b=wye,i=1267,x=0.6455892671517784,y=0.2737715815072643 -a=pan,b=eks,i=1268,x=0.49258185461644277,y=0.6767874718351204 -a=hat,b=zee,i=1269,x=0.23099691497930386,y=0.010607810026782571 -a=wye,b=wye,i=1270,x=0.7995556109605628,y=0.16274406637511674 -a=hat,b=zee,i=1271,x=0.6536639656492141,y=0.4372415589868961 -a=hat,b=eks,i=1272,x=0.9299854741714102,y=0.1361271855956554 -a=wye,b=pan,i=1273,x=0.3500305547201491,y=0.19911752000719163 -a=zee,b=pan,i=1274,x=0.8415267085560889,y=0.04046540168663748 -a=wye,b=zee,i=1275,x=0.45988125966489024,y=0.44169640932292065 -a=zee,b=eks,i=1276,x=0.5025321996588512,y=0.23509973545961738 -a=zee,b=hat,i=1277,x=0.4881304294165376,y=0.5108673128747018 -a=hat,b=zee,i=1278,x=0.34542108789754955,y=0.6393029254293789 -a=hat,b=hat,i=1279,x=0.652274017608231,y=0.2139035554469655 -a=hat,b=eks,i=1280,x=0.46886095371359493,y=0.40718264857353603 -a=wye,b=eks,i=1281,x=0.23006798520906935,y=0.08383446031686925 -a=wye,b=zee,i=1282,x=0.19157221596770568,y=0.8125166888087554 -a=hat,b=eks,i=1283,x=0.5054724357500647,y=0.7470906139600201 -a=hat,b=zee,i=1284,x=0.1351519159722092,y=0.4498407585837816 -a=eks,b=wye,i=1285,x=0.9928332865840428,y=0.6970272102748626 -a=zee,b=pan,i=1286,x=0.5903100219747524,y=0.3978181484200255 -a=zee,b=zee,i=1287,x=0.9279289993969526,y=0.2801555418399182 -a=zee,b=eks,i=1288,x=0.9628830236233576,y=0.9651783931494015 -a=hat,b=eks,i=1289,x=0.18315393370531752,y=0.1945534839637214 -a=zee,b=hat,i=1290,x=0.24224308391281513,y=0.5569008521094203 -a=eks,b=zee,i=1291,x=0.9018025573968887,y=0.8449305240236747 -a=eks,b=eks,i=1292,x=0.7608771883116217,y=0.7517241556722504 -a=wye,b=hat,i=1293,x=0.15064377804093187,y=0.4793850890733947 -a=eks,b=eks,i=1294,x=0.9835365178053855,y=0.4991321788048013 -a=eks,b=wye,i=1295,x=0.6604229543170217,y=0.28382403297933256 -a=pan,b=zee,i=1296,x=0.4653477162195633,y=0.8951405958621811 -a=zee,b=zee,i=1297,x=0.27094318332243583,y=0.7304405621024768 -a=zee,b=wye,i=1298,x=0.779174519106144,y=0.8363414405399494 -a=wye,b=pan,i=1299,x=0.412255986899035,y=0.6866252838817691 -a=zee,b=zee,i=1300,x=0.005776325077187949,y=0.8475053706800095 -a=zee,b=hat,i=1301,x=0.7301684966378752,y=0.2613687718642025 -a=wye,b=wye,i=1302,x=0.18017602702804525,y=0.2080647082488024 -a=eks,b=eks,i=1303,x=0.2453496160424028,y=0.8111166316808313 -a=eks,b=pan,i=1304,x=0.8469416170979848,y=0.9095929671389578 -a=hat,b=wye,i=1305,x=0.1011787110939425,y=0.17876379874526727 -a=hat,b=pan,i=1306,x=0.354306631649279,y=0.14650574878242473 -a=pan,b=wye,i=1307,x=0.7179146053664565,y=0.0912103605838348 -a=eks,b=eks,i=1308,x=0.38852974503903526,y=0.9366885248501026 -a=hat,b=wye,i=1309,x=0.44974216883963103,y=0.90399629076228 -a=wye,b=hat,i=1310,x=0.5674008146861433,y=0.24793347465919724 -a=pan,b=eks,i=1311,x=0.4468521405894835,y=0.8073232684030767 -a=eks,b=wye,i=1312,x=0.7048361671767605,y=0.2809802874043469 -a=hat,b=zee,i=1313,x=0.6080368706120283,y=0.7923296244615721 -a=pan,b=hat,i=1314,x=0.978539901340635,y=0.4361858063106284 -a=zee,b=wye,i=1315,x=0.49174797358568,y=0.21477329503908604 -a=hat,b=zee,i=1316,x=0.8447890636321257,y=0.5448553401794702 -a=zee,b=pan,i=1317,x=0.234827977442866,y=0.36535789013854214 -a=pan,b=wye,i=1318,x=0.28563288006029197,y=0.8722097325921051 -a=pan,b=eks,i=1319,x=0.1574949973988704,y=0.737864320805229 -a=hat,b=eks,i=1320,x=0.49021876898019556,y=0.9850723155763529 -a=hat,b=hat,i=1321,x=0.10849276460754553,y=0.7096856014411096 -a=eks,b=pan,i=1322,x=0.7704102390506976,y=0.2939166316548699 -a=hat,b=pan,i=1323,x=0.785186354961605,y=0.5187554224402933 -a=hat,b=wye,i=1324,x=0.4653747699218791,y=0.07316638818680055 -a=zee,b=pan,i=1325,x=0.0726981243268019,y=0.9334085397103126 -a=wye,b=eks,i=1326,x=0.5019035191475638,y=0.9808444985066099 -a=zee,b=zee,i=1327,x=0.7577704935146902,y=0.07319296743342829 -a=eks,b=wye,i=1328,x=0.027884294519191055,y=0.9742594194746489 -a=hat,b=wye,i=1329,x=0.30934341709858726,y=0.7358665625064501 -a=zee,b=wye,i=1330,x=0.20196851520666603,y=0.4686296388879383 -a=wye,b=hat,i=1331,x=0.9886209096293992,y=0.35033943519876 -a=pan,b=eks,i=1332,x=0.9437028531431318,y=0.8092545870987017 -a=zee,b=pan,i=1333,x=0.025047095442164324,y=0.6492043063154611 -a=pan,b=hat,i=1334,x=0.8484332941587861,y=0.24802424949042978 -a=zee,b=zee,i=1335,x=0.5987101585948386,y=0.7670719549466084 -a=wye,b=wye,i=1336,x=0.5875375382759155,y=0.12052683112565199 -a=eks,b=eks,i=1337,x=0.5316127857819793,y=0.19131458191720963 -a=pan,b=pan,i=1338,x=0.08200277948024282,y=0.6794187346086508 -a=eks,b=wye,i=1339,x=0.5575467999942988,y=0.7816590387896203 -a=eks,b=zee,i=1340,x=0.1329029001223042,y=0.7468954697559254 -a=pan,b=zee,i=1341,x=0.8491462615453724,y=0.7667214357631618 -a=zee,b=wye,i=1342,x=0.016857231484302737,y=0.7189825771028026 -a=hat,b=zee,i=1343,x=0.0204145133471626,y=0.9850483398706436 -a=pan,b=eks,i=1344,x=0.14343578380352173,y=0.3534760283313706 -a=zee,b=zee,i=1345,x=0.3068266605225908,y=0.1872593613407797 -a=eks,b=hat,i=1346,x=0.75151508070612,y=0.2636098408590172 -a=eks,b=pan,i=1347,x=0.6927435409900552,y=0.8895994295177906 -a=eks,b=pan,i=1348,x=0.6801900016838289,y=0.81285575413888 -a=wye,b=pan,i=1349,x=0.5495196174214054,y=0.024059334079716832 -a=wye,b=hat,i=1350,x=0.7464955639967092,y=0.635601451124977 -a=wye,b=hat,i=1351,x=0.1945383266452364,y=0.6098906438896057 -a=hat,b=zee,i=1352,x=0.2313757351431155,y=0.9047115591444801 -a=zee,b=zee,i=1353,x=0.09798837394769866,y=0.4857389187941127 -a=pan,b=wye,i=1354,x=0.020855652150608917,y=0.7979437738522005 -a=pan,b=zee,i=1355,x=0.4204132169844832,y=0.016976719720622646 -a=pan,b=eks,i=1356,x=0.3722527646196434,y=0.9516382491937279 -a=hat,b=wye,i=1357,x=0.6527272744396904,y=0.5760550769108022 -a=wye,b=zee,i=1358,x=0.40135887170615936,y=0.49587544313347875 -a=eks,b=zee,i=1359,x=0.5832103840317804,y=0.4551385962898433 -a=wye,b=pan,i=1360,x=0.13086231928141434,y=0.010866288916755895 -a=eks,b=pan,i=1361,x=0.9224505345587571,y=0.09488253298885452 -a=pan,b=pan,i=1362,x=0.21757550606480047,y=0.3250911878972238 -a=zee,b=wye,i=1363,x=0.12002019129987074,y=0.330458068115164 -a=hat,b=zee,i=1364,x=0.11093600453342645,y=0.46812386024583597 -a=pan,b=wye,i=1365,x=0.2446315231324211,y=0.734485128500915 -a=pan,b=eks,i=1366,x=0.44912372133198186,y=0.13603083622218803 -a=hat,b=wye,i=1367,x=0.4410716319202098,y=0.5052447169227966 -a=pan,b=hat,i=1368,x=0.5290826491768821,y=0.7868317670838846 -a=hat,b=hat,i=1369,x=0.9003291714409005,y=0.6548894347969356 -a=pan,b=zee,i=1370,x=0.20647577118202198,y=0.6570041239170981 -a=hat,b=zee,i=1371,x=0.46970274230450093,y=0.9041951983476588 -a=eks,b=pan,i=1372,x=0.6125178186376162,y=0.40366807591765197 -a=eks,b=zee,i=1373,x=0.7520637884030741,y=0.7184683086802719 -a=pan,b=pan,i=1374,x=0.9344059163223443,y=0.3777271392017554 -a=wye,b=wye,i=1375,x=0.12707467974137798,y=0.951904259345876 -a=hat,b=zee,i=1376,x=0.3256794711244385,y=0.38645249736136067 -a=eks,b=hat,i=1377,x=0.179526538530434,y=0.20081807319252887 -a=wye,b=zee,i=1378,x=0.2516305024121336,y=0.6994126099643698 -a=pan,b=zee,i=1379,x=0.6583708842508542,y=0.12745947685299774 -a=zee,b=hat,i=1380,x=0.85880207513692,y=0.5362089929386346 -a=eks,b=eks,i=1381,x=0.7480180475780296,y=0.9104247466520813 -a=pan,b=pan,i=1382,x=0.5734287289517749,y=0.8325676507978588 -a=wye,b=pan,i=1383,x=0.7445746522867436,y=0.977610514961822 -a=hat,b=pan,i=1384,x=0.18929691453341568,y=0.09316356559826999 -a=hat,b=eks,i=1385,x=0.8173647642606612,y=0.685818179101868 -a=hat,b=wye,i=1386,x=0.7472200309764511,y=0.040129476799068864 -a=eks,b=hat,i=1387,x=0.6336667717285401,y=0.7885877398020724 -a=eks,b=eks,i=1388,x=0.6391264035893477,y=0.885429385188037 -a=zee,b=hat,i=1389,x=0.2737321526786327,y=0.40630528382661724 -a=wye,b=eks,i=1390,x=0.8747667631201688,y=0.44871788319272277 -a=eks,b=wye,i=1391,x=0.4921330479506649,y=0.23072265405056214 -a=hat,b=wye,i=1392,x=0.03644384893663821,y=0.8601480046083115 -a=zee,b=zee,i=1393,x=0.568247504526133,y=0.7756896840334044 -a=eks,b=wye,i=1394,x=0.2879212011081145,y=0.2954751331645483 -a=pan,b=zee,i=1395,x=0.6235312578229149,y=0.9190115143142508 -a=eks,b=hat,i=1396,x=0.3925348585643007,y=0.6541017210621741 -a=wye,b=wye,i=1397,x=0.1908719616976211,y=0.49066946794315214 -a=pan,b=wye,i=1398,x=0.44636597753534346,y=0.1332459124221107 -a=hat,b=wye,i=1399,x=0.15627409090669087,y=0.6666239928392401 -a=pan,b=pan,i=1400,x=0.7498043663610715,y=0.9134287398239703 -a=pan,b=zee,i=1401,x=0.1954474110318004,y=0.7423530907643979 -a=zee,b=zee,i=1402,x=0.014212868410986568,y=0.725003340165483 -a=hat,b=eks,i=1403,x=0.7141565502820018,y=0.8983828801012884 -a=eks,b=wye,i=1404,x=0.014080795466545282,y=0.18026639861936977 -a=zee,b=pan,i=1405,x=0.6715143596794965,y=0.921403075922691 -a=zee,b=zee,i=1406,x=0.542929251925297,y=0.5096745932177545 -a=hat,b=hat,i=1407,x=0.925464277899458,y=0.8114581401124622 -a=hat,b=eks,i=1408,x=0.8155145601390111,y=0.4662651057032756 -a=hat,b=pan,i=1409,x=0.7360283636432529,y=0.530485536184739 -a=wye,b=eks,i=1410,x=0.18097124504277107,y=0.7796289744650133 -a=zee,b=zee,i=1411,x=0.036610885557006756,y=0.9383609949487812 -a=zee,b=zee,i=1412,x=0.3608642872844662,y=0.47981840619533633 -a=zee,b=eks,i=1413,x=0.5222789053544413,y=0.2735382327354091 -a=pan,b=pan,i=1414,x=0.41821681358517837,y=0.09261463379853807 -a=eks,b=pan,i=1415,x=0.36407936516918227,y=0.412995532484439 -a=zee,b=eks,i=1416,x=0.8037535280997706,y=0.9967016304554022 -a=zee,b=wye,i=1417,x=0.03656836512418926,y=0.24047847966373825 -a=hat,b=zee,i=1418,x=0.9966705327199551,y=0.24331478490278557 -a=eks,b=zee,i=1419,x=0.0019272339003844063,y=0.4494856127708353 -a=wye,b=zee,i=1420,x=0.26078653509711935,y=0.8205856479809418 -a=eks,b=zee,i=1421,x=0.3781190702325734,y=0.7756276321642843 -a=eks,b=eks,i=1422,x=0.8685238966563206,y=0.4749950592532425 -a=hat,b=wye,i=1423,x=0.015363751269120707,y=0.7156073118022606 -a=eks,b=hat,i=1424,x=0.816131333846752,y=0.6719670303804344 -a=pan,b=hat,i=1425,x=0.7608261327843064,y=0.8033020578141182 -a=wye,b=pan,i=1426,x=0.15941112007072045,y=0.5893140312689553 -a=hat,b=wye,i=1427,x=0.37742125258201054,y=0.21248345631269194 -a=pan,b=eks,i=1428,x=0.2179834817521752,y=0.6045604185833173 -a=wye,b=hat,i=1429,x=0.6945031453929469,y=0.4781622710344138 -a=hat,b=hat,i=1430,x=0.2249233470581683,y=0.2783168994644075 -a=hat,b=pan,i=1431,x=0.4641755096893504,y=0.9173237513729213 -a=pan,b=zee,i=1432,x=0.7027031224037956,y=0.3317909620850288 -a=zee,b=hat,i=1433,x=0.7968305326329156,y=0.02115891484339094 -a=eks,b=hat,i=1434,x=0.824832015791001,y=0.15206099206432044 -a=pan,b=wye,i=1435,x=0.9895511842399779,y=0.24672707930718718 -a=zee,b=wye,i=1436,x=0.03443424698915787,y=0.7036923651780208 -a=eks,b=eks,i=1437,x=0.7077146987434991,y=0.4772318639588453 -a=wye,b=zee,i=1438,x=0.280848551545003,y=0.581684502725692 -a=wye,b=pan,i=1439,x=0.29634793935457593,y=0.15883447307684273 -a=hat,b=wye,i=1440,x=0.9552968869720926,y=0.7549130979076563 -a=eks,b=wye,i=1441,x=0.782665993384691,y=0.6769028671991114 -a=wye,b=wye,i=1442,x=0.1111822347810345,y=0.4098271097617635 -a=wye,b=pan,i=1443,x=0.9004115661167051,y=0.8953351280072975 -a=eks,b=eks,i=1444,x=0.7825483490155876,y=0.1911154945653185 -a=wye,b=hat,i=1445,x=0.5126253689092004,y=0.9851511494903027 -a=zee,b=hat,i=1446,x=0.5683263846018851,y=0.36460301344654333 -a=hat,b=wye,i=1447,x=0.0058754901082536115,y=0.774777974548495 -a=eks,b=hat,i=1448,x=0.3708973278245986,y=0.8180561446210824 -a=pan,b=zee,i=1449,x=0.7342563560822476,y=0.5866440660526566 -a=wye,b=zee,i=1450,x=0.057991219063554644,y=0.5720271334501862 -a=zee,b=pan,i=1451,x=0.7266623210900269,y=0.5529202681153802 -a=pan,b=zee,i=1452,x=0.6045149915326044,y=0.43879278090859253 -a=wye,b=pan,i=1453,x=0.7396355861845729,y=0.07902637119446942 -a=hat,b=pan,i=1454,x=0.6796123362492761,y=0.07338367835669557 -a=wye,b=hat,i=1455,x=0.6393700516557285,y=0.3786022905745211 -a=pan,b=zee,i=1456,x=0.6285804221646021,y=0.9875061625049019 -a=wye,b=wye,i=1457,x=0.020604286592247223,y=0.9051047892954668 -a=wye,b=eks,i=1458,x=0.9288057779036796,y=0.08184955257646931 -a=eks,b=hat,i=1459,x=0.37211255193051374,y=0.7275732107413054 -a=hat,b=eks,i=1460,x=0.8976672611360175,y=0.11158201921723399 -a=pan,b=pan,i=1461,x=0.8953302483551178,y=0.3176124805910262 -a=zee,b=eks,i=1462,x=0.11393628149045654,y=0.14776897927457688 -a=zee,b=wye,i=1463,x=0.9485009664381004,y=0.6876104431895068 -a=pan,b=eks,i=1464,x=0.5034433003230543,y=0.9194125130762513 -a=pan,b=zee,i=1465,x=0.18563268428375257,y=0.09241285966004353 -a=zee,b=eks,i=1466,x=0.9809617365136725,y=0.41584412119368963 -a=eks,b=eks,i=1467,x=0.5966766034558736,y=0.5918168248126415 -a=zee,b=wye,i=1468,x=0.8524700641554818,y=0.9423215024482277 -a=hat,b=hat,i=1469,x=0.30981599429404116,y=0.8121609570712267 -a=eks,b=wye,i=1470,x=0.3172972103854893,y=0.5803204798913618 -a=hat,b=eks,i=1471,x=0.33123267379248844,y=0.816316950700786 -a=pan,b=pan,i=1472,x=0.13616411059500877,y=0.29064871767206657 -a=eks,b=pan,i=1473,x=0.2072400514044095,y=0.6358868351183312 -a=eks,b=wye,i=1474,x=0.4211179162576446,y=0.21058536437655107 -a=pan,b=eks,i=1475,x=0.4704809160051703,y=0.8307787116985389 -a=zee,b=pan,i=1476,x=0.13639522899731849,y=0.23338840020951146 -a=pan,b=zee,i=1477,x=0.2723828998857428,y=0.9470378753636345 -a=wye,b=hat,i=1478,x=0.9181407667919723,y=0.542065887413139 -a=eks,b=pan,i=1479,x=0.36997774655144844,y=0.9163407928935801 -a=hat,b=eks,i=1480,x=0.4110600513034226,y=0.762934868654504 -a=eks,b=hat,i=1481,x=0.07888272339471736,y=0.9970129572140034 -a=pan,b=wye,i=1482,x=0.18636069480197193,y=0.9912578166928323 -a=hat,b=eks,i=1483,x=0.14507297992678936,y=0.005565478369193744 -a=wye,b=eks,i=1484,x=0.12541139811813662,y=0.7168687280478707 -a=pan,b=pan,i=1485,x=0.39466783430726504,y=0.982498465405116 -a=wye,b=pan,i=1486,x=0.42338989462787613,y=0.21044104481161763 -a=hat,b=pan,i=1487,x=0.15371916098016003,y=0.6216331795342438 -a=wye,b=hat,i=1488,x=0.24032388275558492,y=0.8561385404203309 -a=pan,b=zee,i=1489,x=0.9254041583361616,y=0.8626755735608904 -a=wye,b=wye,i=1490,x=0.6717355270144156,y=0.12382812446245695 -a=hat,b=zee,i=1491,x=0.8374077645159174,y=0.2868130167653046 -a=zee,b=hat,i=1492,x=0.31566626553195365,y=0.18969237480034762 -a=pan,b=hat,i=1493,x=0.7443466050859169,y=0.5883736148067066 -a=pan,b=zee,i=1494,x=0.489472189755636,y=0.2436710488233178 -a=pan,b=hat,i=1495,x=0.31071524278241913,y=0.3032733210952677 -a=wye,b=zee,i=1496,x=0.6743178734293219,y=0.018796476267587625 -a=eks,b=zee,i=1497,x=0.13194664583383386,y=0.13915515391288613 -a=wye,b=pan,i=1498,x=0.40290420886277534,y=0.45645851051725006 -a=zee,b=pan,i=1499,x=0.7372530102597384,y=0.28172203934687556 -a=zee,b=wye,i=1500,x=0.8051155053673082,y=0.628483371578552 -a=hat,b=pan,i=1501,x=0.8675575754177055,y=0.5525846951861648 -a=pan,b=zee,i=1502,x=0.8765052305323637,y=0.3446134001019854 -a=wye,b=pan,i=1503,x=0.5396577054171726,y=0.6580836727630581 -a=eks,b=wye,i=1504,x=0.3351263725136986,y=0.16701945030517473 -a=zee,b=wye,i=1505,x=0.502492235570156,y=0.27616039273844517 -a=hat,b=wye,i=1506,x=0.11505114122495796,y=0.344787577171222 -a=wye,b=hat,i=1507,x=0.84331982245662,y=0.5563459493044525 -a=eks,b=wye,i=1508,x=0.19701887217577851,y=0.5005677125700215 -a=hat,b=eks,i=1509,x=0.6569568959744496,y=0.37010077528594765 -a=wye,b=pan,i=1510,x=0.7194905750125422,y=0.37415889411709513 -a=zee,b=hat,i=1511,x=0.9889028039860764,y=0.25079970858002243 -a=zee,b=hat,i=1512,x=0.40679341185508744,y=0.5138676082375969 -a=eks,b=hat,i=1513,x=0.10774228377040074,y=0.15410741897104152 -a=eks,b=eks,i=1514,x=0.4621589895594861,y=0.9572796836020941 -a=eks,b=eks,i=1515,x=0.37334324705844235,y=0.5146787371775148 -a=pan,b=eks,i=1516,x=0.322276672926436,y=0.4473633411895408 -a=eks,b=eks,i=1517,x=0.9166592846030838,y=0.9746072560912218 -a=zee,b=zee,i=1518,x=0.6805021595118457,y=0.0973567941307375 -a=eks,b=zee,i=1519,x=0.008458305921919762,y=0.13018614842795018 -a=wye,b=pan,i=1520,x=0.6365490008145669,y=0.717108948902972 -a=zee,b=eks,i=1521,x=0.8128775978881801,y=0.8496069709075166 -a=zee,b=eks,i=1522,x=0.7549485896689099,y=0.8158698570741542 -a=wye,b=wye,i=1523,x=0.005603558151104915,y=0.7322907338442813 -a=eks,b=wye,i=1524,x=0.2173598291514076,y=0.8332636657137272 -a=eks,b=hat,i=1525,x=0.9893289065716524,y=0.4815313236058858 -a=wye,b=eks,i=1526,x=0.5993045597268822,y=0.8066671481799782 -a=pan,b=hat,i=1527,x=0.28028817426492336,y=0.9622494242847022 -a=zee,b=hat,i=1528,x=0.1807703534747297,y=0.5647917504765553 -a=pan,b=zee,i=1529,x=0.6659896188082082,y=0.08073793623287506 -a=wye,b=zee,i=1530,x=0.0001874794831505655,y=0.316767027644979 -a=pan,b=zee,i=1531,x=0.8883596657541506,y=0.5839060771184763 -a=eks,b=hat,i=1532,x=0.901005316986836,y=0.8140237382706386 -a=zee,b=hat,i=1533,x=0.9413660325436318,y=0.06622163813109339 -a=hat,b=eks,i=1534,x=0.03906160456377494,y=0.1079795640773159 -a=pan,b=hat,i=1535,x=0.9317916001293041,y=0.3898775157821377 -a=wye,b=hat,i=1536,x=0.015674157771976116,y=0.69356849237495 -a=pan,b=pan,i=1537,x=0.24487835477169373,y=0.5533586202131611 -a=pan,b=pan,i=1538,x=0.7004457835988849,y=0.9254536373090144 -a=zee,b=zee,i=1539,x=0.08095025737185801,y=0.42649957909211544 -a=zee,b=hat,i=1540,x=0.5503724625066438,y=0.8550739169017145 -a=pan,b=wye,i=1541,x=0.45409966242017596,y=0.6097069133161814 -a=wye,b=wye,i=1542,x=0.8929002429586355,y=0.32554836024869227 -a=pan,b=hat,i=1543,x=0.5949367118079497,y=0.8559890968130015 -a=wye,b=zee,i=1544,x=0.9409798267255335,y=0.018548163160445608 -a=pan,b=eks,i=1545,x=0.7534669087213052,y=0.23450536691315327 -a=pan,b=eks,i=1546,x=0.2200107807755327,y=0.4056585225829311 -a=pan,b=hat,i=1547,x=0.6431981362856164,y=0.20869397212585072 -a=hat,b=zee,i=1548,x=0.7802297233261388,y=0.7951833869084849 -a=wye,b=eks,i=1549,x=0.0689521292391374,y=0.7883769928657323 -a=wye,b=wye,i=1550,x=0.08609382344969774,y=0.39902582557569544 -a=zee,b=zee,i=1551,x=0.8470067873893261,y=0.16901402355720452 -a=wye,b=eks,i=1552,x=0.7411482258747379,y=0.5326218258597286 -a=eks,b=wye,i=1553,x=0.9069733522359251,y=0.30710040658612636 -a=zee,b=eks,i=1554,x=0.27856650294803487,y=0.3773512841270542 -a=pan,b=pan,i=1555,x=0.5341857564145447,y=0.33670626249057545 -a=zee,b=pan,i=1556,x=0.810331031324778,y=0.8529873485281747 -a=pan,b=eks,i=1557,x=0.8809860667113874,y=0.6544680775174134 -a=zee,b=zee,i=1558,x=0.5835792774028313,y=0.7084079588663174 -a=wye,b=zee,i=1559,x=0.44436564072900075,y=0.5752434865340957 -a=hat,b=zee,i=1560,x=0.05594331248193807,y=0.6221392828715202 -a=pan,b=zee,i=1561,x=0.705850527727704,y=0.9592589404430422 -a=hat,b=hat,i=1562,x=0.31193139935992087,y=0.16547553772610035 -a=wye,b=pan,i=1563,x=0.619202510644987,y=0.43091955100529267 -a=zee,b=eks,i=1564,x=0.3001925600592342,y=0.8376369289625749 -a=zee,b=pan,i=1565,x=0.012156208135737478,y=0.3456043711066239 -a=zee,b=wye,i=1566,x=0.8568468043920444,y=0.4407063036969697 -a=zee,b=wye,i=1567,x=0.9107751651007914,y=0.4338277282451076 -a=zee,b=hat,i=1568,x=0.7354460222177639,y=0.9579628704250065 -a=pan,b=pan,i=1569,x=0.28206876750655996,y=0.6360639371724323 -a=zee,b=eks,i=1570,x=0.8221229536271197,y=0.11834502495832944 -a=pan,b=wye,i=1571,x=0.6137258407313767,y=0.9758738290281926 -a=pan,b=pan,i=1572,x=0.21906870698568925,y=0.09712236243897499 -a=pan,b=eks,i=1573,x=0.3161549490930624,y=0.6465981924405851 -a=zee,b=hat,i=1574,x=0.392507481283901,y=0.8101156318295134 -a=eks,b=eks,i=1575,x=0.7966043024311776,y=0.2593981756391409 -a=zee,b=zee,i=1576,x=0.8002836252017393,y=0.8669638365198293 -a=wye,b=hat,i=1577,x=0.0784765489757262,y=0.2919577999135742 -a=wye,b=wye,i=1578,x=0.8007027846918099,y=0.16134496938130005 -a=wye,b=zee,i=1579,x=0.8737327971880199,y=0.7021864790253274 -a=zee,b=wye,i=1580,x=0.5926703370632916,y=0.6204701558848567 -a=eks,b=zee,i=1581,x=0.3258371500409273,y=0.4813220118624293 -a=wye,b=wye,i=1582,x=0.45519672674498746,y=0.6149833786028758 -a=pan,b=wye,i=1583,x=0.7445036133271608,y=0.3559946225162539 -a=eks,b=pan,i=1584,x=0.21680886346713335,y=0.8184061883186948 -a=wye,b=wye,i=1585,x=0.031589920237896196,y=0.5767882347019143 -a=pan,b=wye,i=1586,x=0.6737421455744065,y=0.8440144488545762 -a=wye,b=eks,i=1587,x=0.2445786639209251,y=0.4387287649518946 -a=hat,b=pan,i=1588,x=0.5212487539988067,y=0.2199522299331076 -a=hat,b=zee,i=1589,x=0.6381249665841564,y=0.6622471527137181 -a=zee,b=zee,i=1590,x=0.49197726385941254,y=0.2851074772091239 -a=pan,b=wye,i=1591,x=0.27721780314806643,y=0.42224771091002244 -a=pan,b=wye,i=1592,x=0.945365956010478,y=0.09306257348741964 -a=wye,b=wye,i=1593,x=0.12456537324161354,y=0.709614178322504 -a=hat,b=wye,i=1594,x=0.1981221992299298,y=0.6757943828554006 -a=pan,b=pan,i=1595,x=0.5198729892603339,y=0.8135669258519346 -a=eks,b=wye,i=1596,x=0.8578168450376926,y=0.8632162279300964 -a=eks,b=hat,i=1597,x=0.3540018556898594,y=0.7991052287555176 -a=eks,b=wye,i=1598,x=0.9276333581678391,y=0.06549902318059164 -a=wye,b=zee,i=1599,x=0.4561658314107403,y=0.6365134752538643 -a=pan,b=pan,i=1600,x=0.9022636603358615,y=0.2162188539106099 -a=zee,b=hat,i=1601,x=0.21917535804489907,y=0.49754205213030844 -a=wye,b=pan,i=1602,x=0.8342980736735198,y=0.6640472095662565 -a=zee,b=wye,i=1603,x=0.8557749370240072,y=0.05159217506855951 -a=eks,b=pan,i=1604,x=0.6578249784146099,y=0.08991421995527515 -a=pan,b=hat,i=1605,x=0.7597487093068874,y=0.8484514239165745 -a=pan,b=eks,i=1606,x=0.6945970040541443,y=0.2660407416106616 -a=wye,b=hat,i=1607,x=0.9316005854017254,y=0.061544811707459846 -a=pan,b=pan,i=1608,x=0.1076571003288127,y=0.7762663913386769 -a=hat,b=hat,i=1609,x=0.6237995866155571,y=0.07849520372537022 -a=wye,b=eks,i=1610,x=0.09062598480760276,y=0.3361854985819238 -a=pan,b=pan,i=1611,x=0.007836662246717752,y=0.5697242748348913 -a=eks,b=pan,i=1612,x=0.34051658433735943,y=0.28757859267810415 -a=hat,b=zee,i=1613,x=0.6572715559476069,y=0.39371095173028303 -a=wye,b=pan,i=1614,x=0.8905869590474236,y=0.047907908875908234 -a=eks,b=wye,i=1615,x=0.05539774482352222,y=0.030230875132911672 -a=hat,b=pan,i=1616,x=0.31269372542106866,y=0.5929050080918079 -a=eks,b=eks,i=1617,x=0.5259315994925159,y=0.3120388126285063 -a=zee,b=eks,i=1618,x=0.41825022828100444,y=0.010066997525972399 -a=hat,b=pan,i=1619,x=0.9529901310801209,y=0.24566804188484748 -a=eks,b=hat,i=1620,x=0.1861273836070172,y=0.2869387265308132 -a=wye,b=eks,i=1621,x=0.4197448738879491,y=0.057355525921190864 -a=eks,b=eks,i=1622,x=0.5188894343183612,y=0.14708356201436057 -a=pan,b=hat,i=1623,x=0.6787950657750607,y=0.06224754425761503 -a=eks,b=zee,i=1624,x=0.9376797227474318,y=0.45224464425072863 -a=wye,b=zee,i=1625,x=0.7652458613408694,y=0.959285581308301 -a=wye,b=hat,i=1626,x=0.3525357465470107,y=0.7113074877138676 -a=eks,b=eks,i=1627,x=0.6651612159386544,y=0.09641171687890637 -a=pan,b=hat,i=1628,x=0.6018119249348337,y=0.2647753300105741 -a=hat,b=zee,i=1629,x=0.41083118021802867,y=0.019106148002514645 -a=hat,b=wye,i=1630,x=0.4217815192818861,y=0.6702955396816114 -a=wye,b=hat,i=1631,x=0.7242804590797115,y=0.9448679681099966 -a=wye,b=wye,i=1632,x=0.11624568451306994,y=0.8905809281772715 -a=pan,b=wye,i=1633,x=0.38538324135826085,y=0.9883618907956973 -a=hat,b=pan,i=1634,x=0.5776207387085575,y=0.2528561924267074 -a=wye,b=pan,i=1635,x=0.8895974823179132,y=0.9200024991202054 -a=wye,b=wye,i=1636,x=0.9393356532728606,y=0.6298264999340702 -a=wye,b=eks,i=1637,x=0.9073542081519019,y=0.6848431646656846 -a=hat,b=wye,i=1638,x=0.41413865923623305,y=0.9996509466622345 -a=hat,b=pan,i=1639,x=0.4583916991957001,y=0.6357936726110696 -a=eks,b=wye,i=1640,x=0.7198824080298333,y=0.7037862057023272 -a=zee,b=hat,i=1641,x=0.17301970050562698,y=0.7988297836126249 -a=hat,b=zee,i=1642,x=0.08350260061450743,y=0.7500700943710352 -a=pan,b=eks,i=1643,x=0.4445332045218795,y=0.5668553575161199 -a=hat,b=zee,i=1644,x=0.958532242547598,y=0.2998060164234553 -a=pan,b=pan,i=1645,x=0.8386173577817879,y=0.7579883039951569 -a=zee,b=hat,i=1646,x=0.4223193298481345,y=0.8728331174039174 -a=wye,b=zee,i=1647,x=0.3542223974517451,y=0.4616303281316404 -a=zee,b=pan,i=1648,x=0.1732057619535785,y=0.21331253786975357 -a=hat,b=wye,i=1649,x=0.7928655951515221,y=0.29258856907772846 -a=zee,b=wye,i=1650,x=0.8310778499617896,y=0.8744033167682863 -a=pan,b=wye,i=1651,x=0.22292538964605568,y=0.8685911019201707 -a=eks,b=zee,i=1652,x=0.5205479143101123,y=0.2930255040077785 -a=wye,b=wye,i=1653,x=0.6034173789737551,y=0.7826811363427305 -a=hat,b=zee,i=1654,x=0.1272383433369223,y=0.7739737595522014 -a=zee,b=eks,i=1655,x=0.31813723998346144,y=0.2538852441364856 -a=wye,b=hat,i=1656,x=0.18836020025377764,y=0.20683034404839462 -a=pan,b=hat,i=1657,x=0.6185887927483923,y=0.10371843594601571 -a=wye,b=zee,i=1658,x=0.42244696220990907,y=0.25272710810302346 -a=wye,b=hat,i=1659,x=0.29012052922811093,y=0.41591681426338967 -a=wye,b=hat,i=1660,x=0.4268085841844734,y=0.3388035517120921 -a=eks,b=hat,i=1661,x=0.13934499347961038,y=0.03663996929413327 -a=pan,b=hat,i=1662,x=0.012677030530496736,y=0.510781054167575 -a=zee,b=eks,i=1663,x=0.40503031227105424,y=0.6047965215819301 -a=wye,b=pan,i=1664,x=0.6399761240712305,y=0.09533593475272217 -a=wye,b=eks,i=1665,x=0.8939474493355103,y=0.9223252135239184 -a=pan,b=eks,i=1666,x=0.16666185875740613,y=0.5177501799126248 -a=pan,b=wye,i=1667,x=0.7253392873302943,y=0.09162119951978043 -a=eks,b=eks,i=1668,x=0.513508182615633,y=0.1685023831639888 -a=wye,b=hat,i=1669,x=0.4710950479501834,y=0.03651025725804602 -a=hat,b=eks,i=1670,x=0.6003116669898597,y=0.7981557111587316 -a=pan,b=pan,i=1671,x=0.8116187328458756,y=0.8072718271616067 -a=pan,b=wye,i=1672,x=0.7034003424147444,y=0.6847351199705963 -a=wye,b=hat,i=1673,x=0.5949143416873871,y=0.8102803139285161 -a=hat,b=wye,i=1674,x=0.5855903947052084,y=0.4648428630367838 -a=hat,b=pan,i=1675,x=0.3455272053677292,y=0.6971667108454541 -a=wye,b=wye,i=1676,x=0.29137127774161453,y=0.3509788972831772 -a=zee,b=hat,i=1677,x=0.051223624824948355,y=0.48806061670524303 -a=pan,b=zee,i=1678,x=0.22830360777714898,y=0.040523234104181904 -a=zee,b=zee,i=1679,x=0.2004874019427556,y=0.2692182176272302 -a=pan,b=wye,i=1680,x=0.7590576123107873,y=0.17200150784460888 -a=hat,b=pan,i=1681,x=0.8474039861745504,y=0.5929326488850256 -a=pan,b=zee,i=1682,x=0.6678126441832403,y=0.7581822567177666 -a=eks,b=eks,i=1683,x=0.1656742241132675,y=0.25898444627641315 -a=eks,b=eks,i=1684,x=0.08681268181886848,y=0.14340546739344362 -a=pan,b=pan,i=1685,x=0.96441969603388,y=0.3414555586796736 -a=zee,b=wye,i=1686,x=0.3371665714902127,y=0.9792785331415429 -a=pan,b=eks,i=1687,x=0.663918740679759,y=0.7797473286438443 -a=eks,b=wye,i=1688,x=0.26502140138042296,y=0.8841653957891482 -a=hat,b=eks,i=1689,x=0.49022956784197735,y=0.4412363150159613 -a=pan,b=pan,i=1690,x=0.4323862798117054,y=0.9572877683405837 -a=wye,b=hat,i=1691,x=0.19346871577634817,y=0.3548449217449817 -a=eks,b=zee,i=1692,x=0.2220528759711472,y=0.2854499747333922 -a=wye,b=pan,i=1693,x=0.6318004848086037,y=0.8235151199361017 -a=hat,b=hat,i=1694,x=0.22300051255024678,y=0.23627303242311026 -a=pan,b=eks,i=1695,x=0.606816508396926,y=0.4747964191601073 -a=pan,b=eks,i=1696,x=0.5409026908587434,y=0.8707138792965543 -a=zee,b=eks,i=1697,x=0.8215348448990311,y=0.5963587804425763 -a=eks,b=hat,i=1698,x=0.4552430260978796,y=0.7656888582137643 -a=eks,b=eks,i=1699,x=0.5528124536495131,y=0.03385319757100913 -a=wye,b=pan,i=1700,x=0.5921927876548824,y=0.13717891760982504 -a=wye,b=wye,i=1701,x=0.3521072429813412,y=0.9393268458767366 -a=eks,b=eks,i=1702,x=0.615481896967935,y=0.4253334980050465 -a=hat,b=eks,i=1703,x=0.04267213782959711,y=0.6683763263616654 -a=zee,b=wye,i=1704,x=0.417590320872979,y=0.7481853946231414 -a=eks,b=wye,i=1705,x=0.4519026086752629,y=0.721298569465698 -a=eks,b=wye,i=1706,x=0.867732327367188,y=0.7815034918779579 -a=eks,b=pan,i=1707,x=0.21735365651407101,y=0.6786702647895654 -a=eks,b=wye,i=1708,x=0.7426314107643154,y=0.39737817100828876 -a=hat,b=wye,i=1709,x=0.7255615455173713,y=0.7788950854100821 -a=pan,b=hat,i=1710,x=0.08892696718996207,y=0.9572747456151248 -a=eks,b=hat,i=1711,x=0.8331359499607889,y=0.8880694168170389 -a=pan,b=zee,i=1712,x=0.07987647709173995,y=0.13417502683990923 -a=eks,b=wye,i=1713,x=0.43055194021989684,y=0.12038634859450736 -a=eks,b=eks,i=1714,x=0.5087128193007605,y=0.9531328272635052 -a=wye,b=zee,i=1715,x=0.5007673042035596,y=0.0839554814172323 -a=zee,b=wye,i=1716,x=0.9367542179955354,y=0.8831199104153296 -a=zee,b=zee,i=1717,x=0.8370665182431167,y=0.46590727343637683 -a=zee,b=hat,i=1718,x=0.6417213786646256,y=0.12267793340629607 -a=hat,b=pan,i=1719,x=0.48165651092697337,y=0.9550338464219692 -a=pan,b=pan,i=1720,x=0.26837378206040097,y=0.3273738090239059 -a=zee,b=eks,i=1721,x=0.3013268284235642,y=0.9999170047266996 -a=eks,b=pan,i=1722,x=0.7488627212441221,y=0.7589673147670182 -a=pan,b=zee,i=1723,x=0.22059597690872113,y=0.4590031168653098 -a=zee,b=wye,i=1724,x=0.11085385425683147,y=0.18276048166565262 -a=eks,b=eks,i=1725,x=0.8016828955823794,y=0.5017037375277129 -a=eks,b=wye,i=1726,x=0.9929352438598067,y=0.836317286740252 -a=hat,b=pan,i=1727,x=0.015544541266721779,y=0.4301942866494898 -a=wye,b=hat,i=1728,x=0.24080891134309446,y=0.5995840846866549 -a=hat,b=pan,i=1729,x=0.006810750830322787,y=0.855871006710109 -a=wye,b=zee,i=1730,x=0.17481728816675346,y=0.4661820645212398 -a=wye,b=zee,i=1731,x=0.255264888272124,y=0.9481051880482031 -a=eks,b=wye,i=1732,x=0.9141703983722962,y=0.7783272768366281 -a=pan,b=wye,i=1733,x=0.4811498350363058,y=0.31752434003930774 -a=wye,b=hat,i=1734,x=0.33815529285945034,y=0.8025791463907084 -a=wye,b=eks,i=1735,x=0.4660052329093146,y=0.6822728002131543 -a=eks,b=pan,i=1736,x=0.42070034175427795,y=0.8250949093967167 -a=hat,b=hat,i=1737,x=0.8848216308084669,y=0.49372633356388596 -a=wye,b=wye,i=1738,x=0.41919127534471545,y=0.6972253946537716 -a=pan,b=hat,i=1739,x=0.7458644297757762,y=0.06863960925170765 -a=zee,b=hat,i=1740,x=0.5467481093982075,y=0.20576784027619854 -a=hat,b=hat,i=1741,x=0.6667341296371178,y=0.5083249671499618 -a=zee,b=zee,i=1742,x=0.5570445537603863,y=0.9969595288070264 -a=hat,b=pan,i=1743,x=0.3878736075798501,y=0.09689320155996384 -a=hat,b=wye,i=1744,x=0.47545940383287155,y=0.035171107409935454 -a=wye,b=pan,i=1745,x=0.05202061770868127,y=0.6566730002228411 -a=zee,b=hat,i=1746,x=0.058673442891371996,y=0.28933038921745524 -a=wye,b=hat,i=1747,x=0.14150517117852657,y=0.536530005390096 -a=eks,b=wye,i=1748,x=0.3689045321575106,y=0.43375960646000566 -a=wye,b=eks,i=1749,x=0.08070562415535032,y=0.7601097373668262 -a=zee,b=pan,i=1750,x=0.42748309274481444,y=0.40582328846411353 -a=eks,b=pan,i=1751,x=0.5101125068297688,y=0.17416701133200285 -a=eks,b=hat,i=1752,x=0.6822739323301563,y=0.934728306935636 -a=zee,b=wye,i=1753,x=0.5815603591837878,y=0.42946603160181884 -a=eks,b=zee,i=1754,x=0.4411659420836479,y=0.658970404212564 -a=pan,b=eks,i=1755,x=0.16413727843701775,y=0.9186399984720109 -a=hat,b=hat,i=1756,x=0.6677910628012946,y=0.7992076156627536 -a=pan,b=pan,i=1757,x=0.018771917494669887,y=0.07627637321631209 -a=eks,b=eks,i=1758,x=0.3849737318613389,y=0.10314796719548613 -a=eks,b=hat,i=1759,x=0.004605943802663104,y=0.13706408448625906 -a=pan,b=hat,i=1760,x=0.16534300738225027,y=0.6267714211033921 -a=zee,b=zee,i=1761,x=0.9779052389253532,y=0.5003086801528233 -a=wye,b=hat,i=1762,x=0.04507239441313149,y=0.7716812127623998 -a=hat,b=hat,i=1763,x=0.6315164191885015,y=0.4375276804518171 -a=hat,b=pan,i=1764,x=0.02195532641775666,y=0.2526330533315183 -a=hat,b=eks,i=1765,x=0.2835946220779688,y=0.29118113110322497 -a=hat,b=zee,i=1766,x=0.382493150516817,y=0.8520221210763981 -a=zee,b=wye,i=1767,x=0.3657210401100467,y=0.6620479513955376 -a=eks,b=zee,i=1768,x=0.7033634045957338,y=0.47107520132096625 -a=zee,b=pan,i=1769,x=0.7412198854939575,y=0.34206923036029935 -a=eks,b=wye,i=1770,x=0.7022926949673525,y=0.8178450530445518 -a=wye,b=zee,i=1771,x=0.8754670655329418,y=0.17333696566959766 -a=hat,b=eks,i=1772,x=0.585792241890598,y=0.7443360574921659 -a=zee,b=zee,i=1773,x=0.6522535015576731,y=0.21757325076071798 -a=pan,b=pan,i=1774,x=0.09695201653405716,y=0.8252978168426179 -a=zee,b=zee,i=1775,x=0.977214551248574,y=0.4647124207647422 -a=pan,b=hat,i=1776,x=0.9052349202388439,y=0.23607383279010508 -a=pan,b=pan,i=1777,x=0.8770213930313705,y=0.2649679554558544 -a=eks,b=pan,i=1778,x=0.5825936705834729,y=0.5453162110699705 -a=eks,b=hat,i=1779,x=0.5006571233548579,y=0.1243780561189558 -a=pan,b=zee,i=1780,x=0.1846415746915494,y=0.04736023830541203 -a=wye,b=pan,i=1781,x=0.578399885263909,y=0.04308726031144994 -a=pan,b=eks,i=1782,x=0.9210030244758979,y=0.7773896236831834 -a=wye,b=zee,i=1783,x=0.9426077714915372,y=0.2538200528298715 -a=wye,b=wye,i=1784,x=0.8612436216521431,y=0.8048330008328066 -a=hat,b=wye,i=1785,x=0.9754832792942771,y=0.28923936562916985 -a=pan,b=zee,i=1786,x=0.2494860009657509,y=0.17194280903044357 -a=eks,b=eks,i=1787,x=0.368000320083405,y=0.4886055420500375 -a=pan,b=wye,i=1788,x=0.26250246334689176,y=0.04787633922145995 -a=pan,b=wye,i=1789,x=0.7301945417230211,y=0.226509032748324 -a=hat,b=zee,i=1790,x=0.37729036546983097,y=0.27703668720411234 -a=hat,b=pan,i=1791,x=0.05762772701528418,y=0.8943100353103193 -a=pan,b=zee,i=1792,x=0.8322225569737312,y=0.7917170874641617 -a=wye,b=zee,i=1793,x=0.31884392088021907,y=0.48529327738748296 -a=wye,b=wye,i=1794,x=0.2263305044828683,y=0.937998380780705 -a=hat,b=zee,i=1795,x=0.16118129356442434,y=0.16950272509494824 -a=zee,b=eks,i=1796,x=0.4942226187236075,y=0.14210516571467535 -a=hat,b=zee,i=1797,x=0.7287749063387707,y=0.9927587108357429 -a=pan,b=hat,i=1798,x=0.6828185492461075,y=0.4502861054322417 -a=hat,b=zee,i=1799,x=0.9355569291824988,y=0.20314844189673253 -a=zee,b=pan,i=1800,x=0.72307448294554,y=0.6376778174182595 -a=pan,b=eks,i=1801,x=0.8102218415617043,y=0.6044303313247449 -a=zee,b=pan,i=1802,x=0.357073805593369,y=0.8319647967908266 -a=eks,b=wye,i=1803,x=0.5196592664144227,y=0.7156673976778524 -a=eks,b=wye,i=1804,x=0.29264863959299714,y=0.708791737405034 -a=zee,b=eks,i=1805,x=0.8443555032696601,y=0.064863387129513 -a=zee,b=hat,i=1806,x=0.6164118793332103,y=0.1255925909310226 -a=wye,b=hat,i=1807,x=0.14657249890035728,y=0.5230067969283422 -a=hat,b=wye,i=1808,x=0.2287730659373145,y=0.20360891960927452 -a=eks,b=zee,i=1809,x=0.5828879813451391,y=0.8871296430025095 -a=wye,b=hat,i=1810,x=0.10808902686015609,y=0.003095657967865484 -a=zee,b=wye,i=1811,x=0.879138779526544,y=0.8158846610141476 -a=zee,b=wye,i=1812,x=0.8726848944578037,y=0.06260871597344408 -a=eks,b=pan,i=1813,x=0.7037266550933726,y=0.35602278298025203 -a=hat,b=pan,i=1814,x=0.9644298322610328,y=0.4993991438913755 -a=eks,b=pan,i=1815,x=0.5418348248161854,y=0.9355389520025802 -a=hat,b=hat,i=1816,x=0.09792806194299297,y=0.14176660544329966 -a=pan,b=pan,i=1817,x=0.5655519977509864,y=0.5975680493813812 -a=zee,b=wye,i=1818,x=0.8214459119942229,y=0.29965361128737544 -a=pan,b=wye,i=1819,x=0.18318519888267681,y=0.43197282065530884 -a=hat,b=pan,i=1820,x=0.020838363795188775,y=0.8508185143390146 -a=pan,b=pan,i=1821,x=0.38294698779651215,y=0.8341489509213522 -a=hat,b=wye,i=1822,x=0.522603809398008,y=0.6634567147948507 -a=zee,b=hat,i=1823,x=0.5191794392445693,y=0.5255931403873793 -a=eks,b=pan,i=1824,x=0.44104659188971895,y=0.6594737117599939 -a=wye,b=pan,i=1825,x=0.5392802909916755,y=0.8897079123047565 -a=wye,b=pan,i=1826,x=0.8957889050713344,y=0.7119911089910552 -a=hat,b=hat,i=1827,x=0.7124428569925854,y=0.5480761759295041 -a=zee,b=hat,i=1828,x=0.05786804641448351,y=0.4254319991402028 -a=pan,b=wye,i=1829,x=0.4687534933888111,y=0.706582639979992 -a=zee,b=hat,i=1830,x=0.2721305750226911,y=0.005377285991549963 -a=pan,b=hat,i=1831,x=0.18303692231105184,y=0.21025826705763861 -a=eks,b=pan,i=1832,x=0.2038945772719637,y=0.5357417117465196 -a=hat,b=eks,i=1833,x=0.014590280685686796,y=0.7002596722333126 -a=wye,b=wye,i=1834,x=0.949816635928921,y=0.1930644264586816 -a=eks,b=wye,i=1835,x=0.9900052984177767,y=0.8879825093814294 -a=wye,b=pan,i=1836,x=0.3181487584311439,y=0.5523667763399458 -a=hat,b=eks,i=1837,x=0.9591593624436306,y=0.6113919452246622 -a=hat,b=zee,i=1838,x=0.559343676070325,y=0.890209332873675 -a=pan,b=hat,i=1839,x=0.5368391085129115,y=0.8180683703610315 -a=pan,b=eks,i=1840,x=0.80438348711484,y=0.2022566057940537 -a=wye,b=hat,i=1841,x=0.5532887348403182,y=0.24429939746293128 -a=pan,b=hat,i=1842,x=0.9898704891265324,y=0.7317672838087951 -a=zee,b=hat,i=1843,x=0.5087737269682078,y=0.0806841886079015 -a=zee,b=eks,i=1844,x=0.09986788038161976,y=0.9714739666784168 -a=hat,b=eks,i=1845,x=0.09049828109166225,y=0.1947578588027301 -a=eks,b=zee,i=1846,x=0.74504290778088,y=0.46929232899960105 -a=zee,b=wye,i=1847,x=0.5102908546678789,y=0.8622466590956885 -a=eks,b=wye,i=1848,x=0.9737508284191876,y=0.6060569185675129 -a=pan,b=pan,i=1849,x=0.4022620876038918,y=0.7846557844677974 -a=eks,b=zee,i=1850,x=0.31039634454352627,y=0.5252329961384006 -a=eks,b=eks,i=1851,x=0.7390412177790203,y=0.769519937153525 -a=hat,b=wye,i=1852,x=0.6238871121990431,y=0.41186598086229964 -a=zee,b=wye,i=1853,x=0.8447601423313442,y=0.8520011644241022 -a=zee,b=zee,i=1854,x=0.2962334576293918,y=0.926132945738903 -a=pan,b=hat,i=1855,x=0.8401351548600108,y=0.6504879006085633 -a=hat,b=zee,i=1856,x=0.07606845988104194,y=0.00034299355854428004 -a=wye,b=zee,i=1857,x=0.4582107832207104,y=0.2944016633400677 -a=eks,b=wye,i=1858,x=0.9930106907313097,y=0.7391793267018062 -a=hat,b=pan,i=1859,x=0.42255637553704006,y=0.02707473931820803 -a=zee,b=hat,i=1860,x=0.24049082129786625,y=0.987975708111131 -a=zee,b=pan,i=1861,x=0.47821784409887513,y=0.8783256619433235 -a=eks,b=hat,i=1862,x=0.8127278660333865,y=0.8191943473539423 -a=pan,b=pan,i=1863,x=0.8302838683545155,y=0.24734279452032182 -a=hat,b=zee,i=1864,x=0.826660555911501,y=0.2651509088000916 -a=eks,b=zee,i=1865,x=0.38057266246696253,y=0.03213839928081663 -a=eks,b=hat,i=1866,x=0.8031652473986357,y=0.5958264736432561 -a=wye,b=wye,i=1867,x=0.15951611637472107,y=0.4077662801256805 -a=eks,b=zee,i=1868,x=0.6732934218406293,y=0.7505416061385557 -a=eks,b=zee,i=1869,x=0.633163245609033,y=0.8429419490648784 -a=wye,b=pan,i=1870,x=0.10163096579388076,y=0.13758281047223042 -a=hat,b=wye,i=1871,x=0.08107553652444954,y=0.2640692772059776 -a=eks,b=eks,i=1872,x=0.42414648489598794,y=0.6065273117846864 -a=wye,b=hat,i=1873,x=0.6051325007195336,y=0.0842051888808607 -a=zee,b=eks,i=1874,x=0.4161594343684122,y=0.5842158524042167 -a=wye,b=zee,i=1875,x=0.9548486055254091,y=0.3424491192867498 -a=pan,b=eks,i=1876,x=0.6468659335884865,y=0.710835697336098 -a=hat,b=zee,i=1877,x=0.9303319011279677,y=0.7113730786626118 -a=zee,b=pan,i=1878,x=0.14398708400857807,y=0.7966487889999802 -a=pan,b=zee,i=1879,x=0.527406345229876,y=0.47062036425973675 -a=hat,b=eks,i=1880,x=0.8853889990767594,y=0.29294894207487143 -a=pan,b=zee,i=1881,x=0.40105266769707004,y=0.7644044149977851 -a=pan,b=zee,i=1882,x=0.9327815865652367,y=0.3602677495267469 -a=pan,b=zee,i=1883,x=0.34429591718844843,y=0.05689015367587591 -a=wye,b=hat,i=1884,x=0.708143215528541,y=0.3560504482521065 -a=zee,b=wye,i=1885,x=0.11851805777842395,y=0.23782759573809764 -a=eks,b=wye,i=1886,x=0.33449907630162523,y=0.9409666461544096 -a=hat,b=hat,i=1887,x=0.9314693861337467,y=0.13863337436919843 -a=zee,b=eks,i=1888,x=0.3519272451539994,y=0.5053162657228568 -a=eks,b=zee,i=1889,x=0.8736600260492586,y=0.19107483910062717 -a=hat,b=eks,i=1890,x=0.4174883365897032,y=0.6879531497535479 -a=zee,b=hat,i=1891,x=0.5382838856043256,y=0.8806888516912734 -a=zee,b=eks,i=1892,x=0.8124856255009596,y=0.9417530148525823 -a=hat,b=zee,i=1893,x=0.6120649825518716,y=0.8578129408524632 -a=wye,b=wye,i=1894,x=0.4169983470765677,y=0.31293410227278906 -a=hat,b=wye,i=1895,x=0.10961101368157089,y=0.32892883700517095 -a=hat,b=wye,i=1896,x=0.9132730441559633,y=0.7487099837821863 -a=hat,b=hat,i=1897,x=0.7675505245773306,y=0.8461420935545583 -a=pan,b=eks,i=1898,x=0.3252151127693067,y=0.9364118111641275 -a=wye,b=hat,i=1899,x=0.1709902864944267,y=0.48516354025753305 -a=hat,b=pan,i=1900,x=0.6087321537907773,y=0.7970729316915601 -a=pan,b=eks,i=1901,x=0.24652370926788014,y=0.5636927917895729 -a=hat,b=zee,i=1902,x=0.1264928014486475,y=0.6961063811057807 -a=wye,b=eks,i=1903,x=0.31804488869587366,y=0.14285299153786624 -a=eks,b=zee,i=1904,x=0.33758768803317096,y=0.5523041691821023 -a=hat,b=wye,i=1905,x=0.7783001976331004,y=0.4281025219221022 -a=hat,b=wye,i=1906,x=0.2507442607453316,y=0.9002257467281997 -a=eks,b=eks,i=1907,x=0.9438758492662777,y=0.7214758965332612 -a=wye,b=zee,i=1908,x=0.32738813438706793,y=0.7623152593994879 -a=eks,b=hat,i=1909,x=0.7314442344747841,y=0.030358065216463115 -a=hat,b=wye,i=1910,x=0.7380789095291242,y=0.9502552254648776 -a=pan,b=pan,i=1911,x=0.3011591867627148,y=0.6774130244502444 -a=wye,b=wye,i=1912,x=0.7175207335721732,y=0.5163511962741214 -a=hat,b=pan,i=1913,x=0.010071221635602146,y=0.5065324934192511 -a=eks,b=pan,i=1914,x=0.30367239205139296,y=0.7075141985416662 -a=hat,b=pan,i=1915,x=0.6426932948416931,y=0.5081694432335289 -a=wye,b=hat,i=1916,x=0.47018235692725985,y=0.8010843037704246 -a=zee,b=wye,i=1917,x=0.529838527546025,y=0.975044822917303 -a=hat,b=eks,i=1918,x=0.019159081788694077,y=0.5386166416064818 -a=eks,b=zee,i=1919,x=0.45717869373411757,y=0.8830819174369392 -a=eks,b=wye,i=1920,x=0.6319288641477111,y=0.47412119650722184 -a=eks,b=wye,i=1921,x=0.9456983171768308,y=0.8913471052406744 -a=wye,b=pan,i=1922,x=0.6733026865976656,y=0.5941565401265938 -a=zee,b=zee,i=1923,x=0.15497719261601373,y=0.9824185888787137 -a=zee,b=wye,i=1924,x=0.14261091973981976,y=0.03891416444006246 -a=pan,b=pan,i=1925,x=0.051704291514689915,y=0.30096139627683915 -a=eks,b=pan,i=1926,x=0.08149680519340818,y=0.371502322922598 -a=eks,b=pan,i=1927,x=0.26745370041393246,y=0.7180946178205809 -a=hat,b=pan,i=1928,x=0.03866554054364113,y=0.7467583161789872 -a=pan,b=wye,i=1929,x=0.715219843779286,y=0.7347318985161266 -a=hat,b=eks,i=1930,x=0.18556549546801415,y=0.8376753664837346 -a=eks,b=eks,i=1931,x=0.6283884556872956,y=0.714926049974028 -a=pan,b=wye,i=1932,x=0.08318436818892117,y=0.43049862856264764 -a=wye,b=zee,i=1933,x=0.9047633922940572,y=0.7844909689207981 -a=eks,b=hat,i=1934,x=0.2175670413228329,y=0.8617365456033637 -a=wye,b=wye,i=1935,x=0.7550429521371519,y=0.786133808170408 -a=wye,b=hat,i=1936,x=0.3345630973104814,y=0.2823268521687281 -a=pan,b=wye,i=1937,x=0.9521970743863757,y=0.5949587882541866 -a=zee,b=hat,i=1938,x=0.18206318284329825,y=0.0011400311959023357 -a=wye,b=zee,i=1939,x=0.1903296792451994,y=0.9350080777637384 -a=wye,b=hat,i=1940,x=0.37178768301191467,y=0.8451055253202524 -a=pan,b=eks,i=1941,x=0.8294899690053994,y=0.7564416563177322 -a=hat,b=hat,i=1942,x=0.44482696874869365,y=0.5961297980178011 -a=pan,b=eks,i=1943,x=0.9719276019842854,y=0.640150164953268 -a=eks,b=wye,i=1944,x=0.09816590063186759,y=0.8960419732965261 -a=wye,b=wye,i=1945,x=0.8188272907846742,y=0.22236697182142784 -a=pan,b=pan,i=1946,x=0.9840946983738358,y=0.24604842054457776 -a=wye,b=eks,i=1947,x=0.5609426547261931,y=0.1519761843166667 -a=zee,b=zee,i=1948,x=0.8526284266294675,y=0.7580336598194982 -a=wye,b=eks,i=1949,x=0.04793743314382193,y=0.511362467180759 -a=eks,b=hat,i=1950,x=0.5205580283603881,y=0.09466218875496657 -a=eks,b=hat,i=1951,x=0.9392053569680634,y=0.9768144646610879 -a=pan,b=hat,i=1952,x=0.491307664252547,y=0.8646927260623539 -a=zee,b=eks,i=1953,x=0.6668788836391065,y=0.7090525532474364 -a=zee,b=zee,i=1954,x=0.7595127799385754,y=0.6001574207956651 -a=pan,b=pan,i=1955,x=0.3407552952250241,y=0.8020102136226014 -a=pan,b=hat,i=1956,x=0.08503694234411441,y=0.7387665239824308 -a=pan,b=zee,i=1957,x=0.9854793880226635,y=0.7095712814074717 -a=wye,b=pan,i=1958,x=0.6114481880293695,y=0.22917077844582012 -a=wye,b=zee,i=1959,x=0.5016850781819963,y=0.42040146896727615 -a=eks,b=pan,i=1960,x=0.7325260743545391,y=0.35098817238458924 -a=wye,b=wye,i=1961,x=0.29833631790760273,y=0.4831530650838167 -a=hat,b=eks,i=1962,x=0.36631759989103085,y=0.29865431150806365 -a=hat,b=eks,i=1963,x=0.23176876123591383,y=0.5612909158675198 -a=wye,b=pan,i=1964,x=0.7334272338627286,y=0.650447648017669 -a=pan,b=pan,i=1965,x=0.9367163916661853,y=0.9638919891814807 -a=zee,b=hat,i=1966,x=0.7301180056013357,y=0.38279312633041496 -a=wye,b=eks,i=1967,x=0.3271166838493157,y=0.8030348688816051 -a=pan,b=eks,i=1968,x=0.7530954976867642,y=0.5048913343158832 -a=wye,b=zee,i=1969,x=0.6270200861888447,y=0.24983293440736842 -a=eks,b=zee,i=1970,x=0.12406730011560674,y=0.5862034791938755 -a=hat,b=wye,i=1971,x=0.4654113772986844,y=0.03490618297713166 -a=hat,b=wye,i=1972,x=0.5837244835312924,y=0.78564800693725 -a=wye,b=hat,i=1973,x=0.5256418800394103,y=0.5657320340909927 -a=hat,b=zee,i=1974,x=0.9946797442560897,y=0.17991015295150847 -a=eks,b=eks,i=1975,x=0.5611515257329109,y=0.45353155787641375 -a=wye,b=eks,i=1976,x=0.90900092404583,y=0.9088347779743747 -a=wye,b=zee,i=1977,x=0.2485784939054746,y=0.5715538711284616 -a=eks,b=eks,i=1978,x=0.43223859004330245,y=0.25096305614713244 -a=wye,b=pan,i=1979,x=0.044824962223491194,y=0.26304195982115053 -a=hat,b=zee,i=1980,x=0.8574700507192768,y=0.03240481571430498 -a=hat,b=pan,i=1981,x=0.7205280959278643,y=0.9765256304646956 -a=pan,b=eks,i=1982,x=0.11118021831380087,y=0.1736432452425345 -a=eks,b=zee,i=1983,x=0.3665362715223871,y=0.8769601803237262 -a=wye,b=zee,i=1984,x=0.5159131102473629,y=0.3138392498746069 -a=hat,b=wye,i=1985,x=0.6785523977842361,y=0.9088522942899968 -a=hat,b=eks,i=1986,x=0.8391540456864279,y=0.13395352775796587 -a=wye,b=eks,i=1987,x=0.33553215256369306,y=0.8998597387125332 -a=hat,b=zee,i=1988,x=0.3273336625347204,y=0.5235087574026606 -a=pan,b=eks,i=1989,x=0.8846030796068061,y=0.1229509863981878 -a=hat,b=eks,i=1990,x=0.972524874310568,y=0.7588379528101111 -a=zee,b=pan,i=1991,x=0.4266265409041532,y=0.46661051389718977 -a=eks,b=zee,i=1992,x=0.18951913536280773,y=0.3044420239454556 -a=hat,b=pan,i=1993,x=0.6524602479494983,y=0.2683536424804953 -a=hat,b=pan,i=1994,x=0.3458198938210745,y=0.15708271475158309 -a=pan,b=hat,i=1995,x=0.2451140421214234,y=0.21125136662021793 -a=wye,b=eks,i=1996,x=0.7260863327463748,y=0.8391383362988085 -a=zee,b=wye,i=1997,x=0.3390776046149281,y=0.2943389939229085 -a=eks,b=pan,i=1998,x=0.24597512351551498,y=0.5579233145456394 -a=eks,b=zee,i=1999,x=0.6180255159787116,y=0.7640028449996572 -a=pan,b=wye,i=2000,x=0.8323911295033875,y=0.05968766127057723 -a=wye,b=hat,i=2001,x=0.15924096642007157,y=0.24059632344634185 -a=pan,b=zee,i=2002,x=0.5349190357320186,y=0.508630259684438 -a=pan,b=wye,i=2003,x=0.3562571816102539,y=0.9351982273289634 -a=hat,b=pan,i=2004,x=0.5792914584913227,y=0.9721311150467201 -a=hat,b=pan,i=2005,x=0.6721200696331198,y=0.5074220436659838 -a=zee,b=pan,i=2006,x=0.36314674395500735,y=0.05966789024528896 -a=eks,b=zee,i=2007,x=0.5198150674035192,y=0.5307294576536602 -a=wye,b=wye,i=2008,x=0.8038374651958967,y=0.863525245703629 -a=hat,b=eks,i=2009,x=0.8954319835423661,y=0.6074686757262493 -a=hat,b=hat,i=2010,x=0.14682904757610016,y=0.5836897852849614 -a=hat,b=wye,i=2011,x=0.5554922764125422,y=0.044893468168582085 -a=wye,b=hat,i=2012,x=0.3272476785644499,y=0.2852380145740261 -a=zee,b=pan,i=2013,x=0.5272911037027838,y=0.9007193862227653 -a=pan,b=zee,i=2014,x=0.8942547964450125,y=0.7308860097948163 -a=wye,b=pan,i=2015,x=0.7429848323935544,y=0.6564456028979551 -a=wye,b=pan,i=2016,x=0.8976852390968387,y=0.3715619777706992 -a=eks,b=eks,i=2017,x=0.5870221936023131,y=0.5886336776923361 -a=pan,b=eks,i=2018,x=0.7548510407648094,y=0.259810938746426 -a=wye,b=hat,i=2019,x=0.43322808613233055,y=0.0385758517767808 -a=zee,b=eks,i=2020,x=0.6430370762426636,y=0.6948330772772741 -a=pan,b=zee,i=2021,x=0.4140878244124503,y=0.398400762850186 -a=eks,b=pan,i=2022,x=0.3500684495606733,y=0.14698881032642608 -a=eks,b=zee,i=2023,x=0.8926094968763351,y=0.6086053558590667 -a=wye,b=hat,i=2024,x=0.020600223126170603,y=0.20728018182250796 -a=hat,b=wye,i=2025,x=0.0007025729724531304,y=0.6265023865043876 -a=zee,b=wye,i=2026,x=0.8573260145899378,y=0.9080875650609371 -a=eks,b=zee,i=2027,x=0.22981492296559103,y=0.10600637415066061 -a=zee,b=zee,i=2028,x=0.6842296172237651,y=0.896024172825087 -a=pan,b=wye,i=2029,x=0.5829130314173805,y=0.3189845366520674 -a=pan,b=wye,i=2030,x=0.14984955320446725,y=0.8011645466128109 -a=wye,b=zee,i=2031,x=0.14619362934789815,y=0.04433757197092214 -a=pan,b=hat,i=2032,x=0.5611491467878738,y=0.630949265472906 -a=hat,b=wye,i=2033,x=0.005567301262607405,y=0.6290855880213555 -a=zee,b=pan,i=2034,x=0.40924963766916733,y=0.922632813755277 -a=eks,b=hat,i=2035,x=0.33767734812921923,y=0.5658087617423716 -a=zee,b=eks,i=2036,x=0.25944332814164905,y=0.11267646149361388 -a=eks,b=hat,i=2037,x=0.4613748353843449,y=0.5072335485279396 -a=zee,b=zee,i=2038,x=0.3797322702325565,y=0.9465025393896492 -a=hat,b=hat,i=2039,x=0.8389132941448142,y=0.9200224995580027 -a=pan,b=pan,i=2040,x=0.7463150208227146,y=0.34885266263688197 -a=wye,b=hat,i=2041,x=0.6563952046485523,y=0.7555478004412313 -a=zee,b=hat,i=2042,x=0.2743477126375994,y=0.3824464564910681 -a=hat,b=hat,i=2043,x=0.8811861962295147,y=0.5191315240489268 -a=zee,b=eks,i=2044,x=0.3599144261574607,y=0.24553060035029017 -a=pan,b=eks,i=2045,x=0.9781655353605474,y=0.2730587268790037 -a=wye,b=hat,i=2046,x=0.7333941298571239,y=0.5739371545354796 -a=hat,b=eks,i=2047,x=0.06042270034486685,y=0.46301889302926746 -a=pan,b=hat,i=2048,x=0.10911169262757925,y=0.007073831794458529 -a=pan,b=pan,i=2049,x=0.8624169299220058,y=0.9006582996702346 -a=eks,b=eks,i=2050,x=0.040691774802510294,y=0.8066732453567129 -a=eks,b=hat,i=2051,x=0.40407704836251557,y=0.26395123641005147 -a=zee,b=hat,i=2052,x=0.009808918561178714,y=0.2302545994571994 -a=wye,b=eks,i=2053,x=0.7633729697198686,y=0.8187837109642871 -a=wye,b=hat,i=2054,x=0.10710381581294204,y=0.3286506389479086 -a=hat,b=eks,i=2055,x=0.9832237471284704,y=0.23991238481161792 -a=zee,b=pan,i=2056,x=0.6210754046594348,y=0.49331354774956016 -a=pan,b=zee,i=2057,x=0.28231501416039284,y=0.12643281231603754 -a=wye,b=hat,i=2058,x=0.045046526806835296,y=0.681451721478501 -a=eks,b=pan,i=2059,x=0.9331162879465084,y=0.14664803314097596 -a=zee,b=wye,i=2060,x=0.7720929751822915,y=0.330085050859654 -a=zee,b=zee,i=2061,x=0.14974934709461651,y=0.697616433647398 -a=wye,b=eks,i=2062,x=0.945982672513977,y=0.36668794201328303 -a=eks,b=zee,i=2063,x=0.10743808879213779,y=0.6963841526487657 -a=zee,b=pan,i=2064,x=0.5676519201496846,y=0.24351963361710904 -a=wye,b=eks,i=2065,x=0.606169952184269,y=0.9495081658090401 -a=hat,b=pan,i=2066,x=0.5362186062455647,y=0.18683078751407345 -a=eks,b=eks,i=2067,x=0.23118685760407975,y=0.4886672632279645 -a=wye,b=wye,i=2068,x=0.0181286937053855,y=0.4027507216590225 -a=wye,b=zee,i=2069,x=0.8920322140255575,y=0.2821329353409344 -a=zee,b=wye,i=2070,x=0.2845370086876513,y=0.4200729779675041 -a=eks,b=wye,i=2071,x=0.6616434446154568,y=0.028717804930202817 -a=pan,b=zee,i=2072,x=0.13789801706952376,y=0.6865579908342762 -a=hat,b=pan,i=2073,x=0.14024645801145608,y=0.2232995634066972 -a=eks,b=hat,i=2074,x=0.8416373289721065,y=0.009957706782034892 -a=pan,b=eks,i=2075,x=0.2730024769669228,y=0.6092063716892284 -a=wye,b=hat,i=2076,x=0.6679556713229464,y=0.23886590929858575 -a=wye,b=pan,i=2077,x=0.6772238022128941,y=0.35715527067676667 -a=wye,b=wye,i=2078,x=0.0007441043225671073,y=0.9342244226449593 -a=eks,b=pan,i=2079,x=0.00844716490372166,y=0.7042488450623287 -a=zee,b=hat,i=2080,x=0.9840706098598035,y=0.7011152185727909 -a=zee,b=wye,i=2081,x=0.3382103536180968,y=0.04576622304303102 -a=wye,b=hat,i=2082,x=0.0855328407000916,y=0.7955310778574013 -a=wye,b=wye,i=2083,x=0.654630167298159,y=0.9490657525005854 -a=hat,b=pan,i=2084,x=0.9418973198231615,y=0.8869025666330164 -a=eks,b=eks,i=2085,x=0.38148259830551734,y=0.8664658521060588 -a=hat,b=zee,i=2086,x=0.9687249489223216,y=0.9138672864469205 -a=pan,b=zee,i=2087,x=0.4582214393900814,y=0.8311346736169871 -a=hat,b=wye,i=2088,x=0.3324758019863273,y=0.4703648792781622 -a=hat,b=hat,i=2089,x=0.9166551411558639,y=0.0986178333688883 -a=zee,b=zee,i=2090,x=0.5043939613961448,y=0.9818791944950958 -a=eks,b=wye,i=2091,x=0.1351492269897414,y=0.9388421670767862 -a=pan,b=eks,i=2092,x=0.6581611437110156,y=0.2936463974495629 -a=eks,b=wye,i=2093,x=0.5685533529741125,y=0.8133350683940237 -a=wye,b=pan,i=2094,x=0.07847412023993783,y=0.3613060871668645 -a=wye,b=wye,i=2095,x=0.20230852407018185,y=0.2291747261210969 -a=eks,b=eks,i=2096,x=0.43638629510919924,y=0.2881257309332079 -a=hat,b=eks,i=2097,x=0.26844813288649483,y=0.39273900559861075 -a=hat,b=eks,i=2098,x=0.9966377977643898,y=0.5245550930114457 -a=hat,b=pan,i=2099,x=0.03219741593758807,y=0.8801777270031927 -a=eks,b=pan,i=2100,x=0.8264573211830318,y=0.3323904264186872 -a=hat,b=wye,i=2101,x=0.5557805350665251,y=0.5952937921640231 -a=zee,b=wye,i=2102,x=0.749445246206683,y=0.9220669751971446 -a=pan,b=eks,i=2103,x=0.48622365678958046,y=0.5824051664305276 -a=wye,b=zee,i=2104,x=0.24393506694975353,y=0.8625197120864077 -a=pan,b=zee,i=2105,x=0.42667111990222584,y=0.4200738107939501 -a=pan,b=eks,i=2106,x=0.6899381403750706,y=0.5175558265399449 -a=pan,b=wye,i=2107,x=0.046210916618416364,y=0.25213670524015686 -a=zee,b=zee,i=2108,x=0.7086278430636463,y=0.7267047227599615 -a=pan,b=zee,i=2109,x=0.8286002064140777,y=0.7422535714385249 -a=wye,b=eks,i=2110,x=0.9082291930295346,y=0.47111153171260134 -a=hat,b=wye,i=2111,x=0.5188526237698469,y=0.10386838578674262 -a=zee,b=pan,i=2112,x=0.02494942612055806,y=0.6771165590440439 -a=pan,b=zee,i=2113,x=0.0793213913259122,y=0.046201894636212604 -a=eks,b=wye,i=2114,x=0.339791829917532,y=0.6311099033330176 -a=hat,b=eks,i=2115,x=0.09151886587216429,y=0.7423362419494414 -a=zee,b=zee,i=2116,x=0.4003379315212102,y=0.0193682083394614 -a=pan,b=hat,i=2117,x=0.3429130580701697,y=0.6027060638473042 -a=pan,b=zee,i=2118,x=0.9627595397700258,y=0.13997934081700658 -a=hat,b=hat,i=2119,x=0.8206707686267524,y=0.7611213033730956 -a=zee,b=wye,i=2120,x=0.5559252019928892,y=0.7174146654070022 -a=hat,b=wye,i=2121,x=0.9803985810617651,y=0.8394646120202436 -a=zee,b=hat,i=2122,x=0.08631486480591943,y=0.5785230915820572 -a=pan,b=wye,i=2123,x=0.9115498197515648,y=0.9169354954307747 -a=hat,b=hat,i=2124,x=0.7798071504849725,y=0.19792727612064476 -a=wye,b=pan,i=2125,x=0.8561718307822236,y=0.1291568082386848 -a=hat,b=wye,i=2126,x=0.2863145718712009,y=0.5710669434512489 -a=wye,b=eks,i=2127,x=0.06803650937651173,y=0.3577026589688229 -a=wye,b=hat,i=2128,x=0.9111033241507589,y=0.10783082272199751 -a=zee,b=eks,i=2129,x=0.28267518376958845,y=0.17688870699173864 -a=hat,b=pan,i=2130,x=0.19116926141337387,y=0.27875749703114405 -a=hat,b=hat,i=2131,x=0.3254603712033679,y=0.9274447308988584 -a=eks,b=wye,i=2132,x=0.11768724156109422,y=0.8908179117578706 -a=wye,b=pan,i=2133,x=0.6516558397748747,y=0.774009470971533 -a=hat,b=eks,i=2134,x=0.9053305484140348,y=0.37780854020278265 -a=pan,b=pan,i=2135,x=0.7849642445184846,y=0.2074226048103197 -a=zee,b=wye,i=2136,x=0.2843358696868167,y=0.17750391830130807 -a=pan,b=hat,i=2137,x=0.6831781526100863,y=0.005628299955970917 -a=zee,b=wye,i=2138,x=0.29832744224162844,y=0.33074245583419115 -a=zee,b=wye,i=2139,x=0.4116759409721965,y=0.16673308079819182 -a=zee,b=wye,i=2140,x=0.3063387912982882,y=0.3715575632516237 -a=pan,b=hat,i=2141,x=0.41506057628652626,y=0.013486526190589099 -a=zee,b=wye,i=2142,x=0.517904841622836,y=0.53285652127 -a=hat,b=pan,i=2143,x=0.9156355367699018,y=0.8823700552229912 -a=pan,b=hat,i=2144,x=0.6484157591768972,y=0.18545458215405763 -a=eks,b=eks,i=2145,x=0.2511948002161768,y=0.6576693696214415 -a=eks,b=zee,i=2146,x=0.4990209540685181,y=0.1364915882864166 -a=eks,b=wye,i=2147,x=0.15240384791463035,y=0.4599246782338706 -a=zee,b=pan,i=2148,x=0.8912158164832823,y=0.0715866507974654 -a=zee,b=eks,i=2149,x=0.7025420244699133,y=0.987609520343113 -a=wye,b=pan,i=2150,x=0.3436366777295877,y=0.3694637710717039 -a=hat,b=zee,i=2151,x=0.9616090415643731,y=0.8945473597755025 -a=zee,b=hat,i=2152,x=0.480760014274322,y=0.09273697945051707 -a=eks,b=hat,i=2153,x=0.17176533143479,y=0.9370337444082136 -a=zee,b=pan,i=2154,x=0.1391723805955094,y=0.9355089025836978 -a=hat,b=zee,i=2155,x=0.005175137015667519,y=0.6082400770560145 -a=eks,b=wye,i=2156,x=0.5266959602940757,y=0.2966790787127306 -a=wye,b=pan,i=2157,x=0.40990967259698485,y=0.46693754055942116 -a=hat,b=hat,i=2158,x=0.36568864609540286,y=0.482086719899368 -a=zee,b=wye,i=2159,x=0.46324422760937845,y=0.18957042856735318 -a=pan,b=eks,i=2160,x=0.0032731741464655517,y=0.24265930126172286 -a=wye,b=eks,i=2161,x=0.17517848527969948,y=0.08180586013473534 -a=pan,b=pan,i=2162,x=0.4403551635970905,y=0.22942697632655906 -a=wye,b=pan,i=2163,x=0.09273957715469416,y=0.6132959825744481 -a=pan,b=zee,i=2164,x=0.19524512170581543,y=0.5460739296935951 -a=hat,b=hat,i=2165,x=0.46165958964019504,y=0.6029962831405496 -a=wye,b=zee,i=2166,x=0.8944862196737927,y=0.34807401159779683 -a=zee,b=hat,i=2167,x=0.42312576374129274,y=0.10048800632229682 -a=wye,b=hat,i=2168,x=0.6568978924854212,y=0.5101756478889046 -a=eks,b=zee,i=2169,x=0.05684290839594597,y=0.6167859837759624 -a=wye,b=eks,i=2170,x=0.4198547582787967,y=0.2376285818765217 -a=eks,b=eks,i=2171,x=0.6714359981321629,y=0.37149274278995337 -a=pan,b=wye,i=2172,x=0.2057396940089804,y=0.8420562089794659 -a=wye,b=hat,i=2173,x=0.4502790891675549,y=0.8635812727509119 -a=pan,b=eks,i=2174,x=0.8915519585149145,y=0.297092301064787 -a=wye,b=eks,i=2175,x=0.6684886052688896,y=0.23351427152549686 -a=eks,b=eks,i=2176,x=0.018008652733587316,y=0.9614835324200763 -a=eks,b=pan,i=2177,x=0.7183922577315158,y=0.48505114281853134 -a=zee,b=wye,i=2178,x=0.8235592349921356,y=0.21457612748044042 -a=hat,b=wye,i=2179,x=0.8080588257410165,y=0.8760901920518874 -a=pan,b=eks,i=2180,x=0.6055815021312241,y=0.8480036770514022 -a=zee,b=pan,i=2181,x=0.5449270457570026,y=0.7992463596093999 -a=zee,b=hat,i=2182,x=0.3727527045897696,y=0.8534533340738414 -a=eks,b=pan,i=2183,x=0.8003361363186678,y=0.8955368869223884 -a=wye,b=wye,i=2184,x=0.009903387473833902,y=0.717874178791943 -a=eks,b=eks,i=2185,x=0.33802204835640726,y=0.30007036518314967 -a=hat,b=zee,i=2186,x=0.7146865245671944,y=0.4887379966859555 -a=pan,b=eks,i=2187,x=0.09332217805283527,y=0.2731125734848725 -a=eks,b=zee,i=2188,x=0.358076509887842,y=0.6122466113672775 -a=zee,b=eks,i=2189,x=0.984738578757059,y=0.892051880694554 -a=hat,b=wye,i=2190,x=0.9791796147633219,y=0.30772131333366337 -a=zee,b=eks,i=2191,x=0.8618827816008505,y=0.3898158650484316 -a=eks,b=wye,i=2192,x=0.08897197433077497,y=0.5341085853768164 -a=zee,b=hat,i=2193,x=0.44938360138176914,y=0.04690228110148875 -a=wye,b=wye,i=2194,x=0.2622599637682992,y=0.33190780821668475 -a=zee,b=pan,i=2195,x=0.2456231364010899,y=0.8439355736973392 -a=zee,b=zee,i=2196,x=0.7874461922758034,y=0.3195592889082516 -a=hat,b=wye,i=2197,x=0.3540930552112632,y=0.4554803152418352 -a=hat,b=eks,i=2198,x=0.12965400774700986,y=0.4139588865738947 -a=hat,b=eks,i=2199,x=0.6553924554328745,y=0.4899538937166197 -a=pan,b=zee,i=2200,x=0.4507994878036382,y=0.9785717062046653 -a=pan,b=pan,i=2201,x=0.9526982671410141,y=0.3425963974364795 -a=hat,b=wye,i=2202,x=0.4709189260548132,y=0.33410477791419135 -a=wye,b=pan,i=2203,x=0.8491557372816053,y=0.5530531109549706 -a=hat,b=wye,i=2204,x=0.7973426670893504,y=0.38438739471274264 -a=wye,b=zee,i=2205,x=0.2774377944743893,y=0.45205678592354026 -a=zee,b=eks,i=2206,x=0.4133477502781451,y=0.555969888477931 -a=pan,b=eks,i=2207,x=0.9193964373230882,y=0.4625301712579941 -a=hat,b=eks,i=2208,x=0.9772889351986918,y=0.3249537135963736 -a=wye,b=eks,i=2209,x=0.7841059777895694,y=0.6947456883865291 -a=hat,b=eks,i=2210,x=0.46786259691563536,y=0.31576530398682046 -a=pan,b=hat,i=2211,x=0.3000341492694927,y=0.9961655477923976 -a=wye,b=zee,i=2212,x=0.2800829848930697,y=0.8599095044857418 -a=wye,b=eks,i=2213,x=0.7099477247456799,y=0.1413865209495151 -a=hat,b=zee,i=2214,x=0.2971188903315465,y=0.44965916160853636 -a=zee,b=pan,i=2215,x=0.06251445207257622,y=0.13216970387427485 -a=hat,b=wye,i=2216,x=0.3382952859935743,y=0.4400906767156443 -a=zee,b=wye,i=2217,x=0.49170781106474626,y=0.1402042893515265 -a=zee,b=hat,i=2218,x=0.2583991751219392,y=0.36652517821181607 -a=pan,b=zee,i=2219,x=0.14927136365683047,y=0.18664967620347506 -a=eks,b=wye,i=2220,x=0.5726690878517332,y=0.9834177283918458 -a=hat,b=eks,i=2221,x=0.7726531947838272,y=0.15165188282492126 -a=zee,b=eks,i=2222,x=0.813180106527479,y=0.621185672504634 -a=eks,b=hat,i=2223,x=0.289329024465074,y=0.36110779604692067 -a=hat,b=pan,i=2224,x=0.27094205048996056,y=0.6489628299416983 -a=hat,b=hat,i=2225,x=0.013545905550584214,y=0.8494572427931795 -a=eks,b=wye,i=2226,x=0.3454244478858154,y=0.29090367914645576 -a=zee,b=wye,i=2227,x=0.39971822303581617,y=0.17475090292312834 -a=eks,b=zee,i=2228,x=0.9408003473361174,y=0.9376913825387122 -a=hat,b=wye,i=2229,x=0.4494538288870511,y=0.13090866722624483 -a=pan,b=wye,i=2230,x=0.8809697124067445,y=0.39092344601998064 -a=wye,b=hat,i=2231,x=0.900794437962015,y=0.8967390597734215 -a=hat,b=hat,i=2232,x=0.15713550210076666,y=0.7206735582912116 -a=zee,b=wye,i=2233,x=0.9004219588711274,y=0.7577516737491493 -a=eks,b=eks,i=2234,x=0.27871867532288996,y=0.2911552878960423 -a=eks,b=wye,i=2235,x=0.5013653314603624,y=0.8333248001496258 -a=zee,b=zee,i=2236,x=0.30501285370800013,y=0.5849535705099613 -a=hat,b=zee,i=2237,x=0.45674559029260486,y=0.8728724386781094 -a=pan,b=pan,i=2238,x=0.02847848077848736,y=0.9207996601523926 -a=pan,b=zee,i=2239,x=0.010173755043218158,y=0.22123822336488064 -a=wye,b=wye,i=2240,x=0.5930605475370612,y=0.3433603733657331 -a=hat,b=wye,i=2241,x=0.5014017541132575,y=0.7090960181653438 -a=wye,b=hat,i=2242,x=0.9458244074853481,y=0.7456393313493013 -a=zee,b=pan,i=2243,x=0.29001787500073173,y=0.045527725574051714 -a=hat,b=hat,i=2244,x=0.9708832254888226,y=0.15752383437958462 -a=hat,b=eks,i=2245,x=0.4770264537232787,y=0.6736468654550781 -a=wye,b=hat,i=2246,x=0.7714374257659208,y=0.5425954287320883 -a=pan,b=pan,i=2247,x=0.8014273299143657,y=0.7288163705942878 -a=pan,b=pan,i=2248,x=0.954246012713997,y=0.8279688125072744 -a=eks,b=eks,i=2249,x=0.3345668023105298,y=0.31811620191709955 -a=wye,b=hat,i=2250,x=0.5431274222493861,y=0.1566355934693281 -a=eks,b=hat,i=2251,x=0.8946184447856771,y=0.8281124954281727 -a=zee,b=wye,i=2252,x=0.5655358148358,y=0.9169255629455827 -a=eks,b=wye,i=2253,x=0.6383105313881284,y=0.1027304181651264 -a=wye,b=zee,i=2254,x=0.8612725048242387,y=0.056706665236205156 -a=hat,b=zee,i=2255,x=0.4883498572156204,y=0.0770621976268544 -a=wye,b=hat,i=2256,x=0.10604947211581683,y=0.8870919841683852 -a=hat,b=hat,i=2257,x=0.6942446034273736,y=0.6246228939328669 -a=eks,b=eks,i=2258,x=0.6930800244883837,y=0.17611165906867554 -a=pan,b=hat,i=2259,x=0.22286725838973298,y=0.6076445332790815 -a=zee,b=zee,i=2260,x=0.8359749877662224,y=0.08101114122788078 -a=hat,b=eks,i=2261,x=0.9105620468307024,y=0.3593642950046009 -a=zee,b=zee,i=2262,x=0.7490208516776408,y=0.7277121821219803 -a=zee,b=hat,i=2263,x=0.012838825936875464,y=0.5223435911532996 -a=hat,b=pan,i=2264,x=0.37286192432196275,y=0.8365432517009491 -a=zee,b=pan,i=2265,x=0.946352430931429,y=0.27693938121291084 -a=pan,b=eks,i=2266,x=0.5631724274367673,y=0.0642506263060727 -a=hat,b=zee,i=2267,x=0.7578871147776249,y=0.14754564446673257 -a=hat,b=wye,i=2268,x=0.17474153753114763,y=0.9634949103419465 -a=pan,b=eks,i=2269,x=0.5541880960714733,y=0.9158224391454514 -a=eks,b=eks,i=2270,x=0.5090886478757912,y=0.7656587962141506 -a=pan,b=hat,i=2271,x=0.16768184769644479,y=0.8215102227732646 -a=zee,b=hat,i=2272,x=0.14140036239733678,y=0.8390759674518355 -a=eks,b=hat,i=2273,x=0.8127008522217432,y=0.9949059480342844 -a=eks,b=wye,i=2274,x=0.9075350776906357,y=0.024516079984659767 -a=eks,b=wye,i=2275,x=0.5212081176523184,y=0.8177991905419402 -a=eks,b=eks,i=2276,x=0.5329538624469671,y=0.0018158942180759308 -a=pan,b=wye,i=2277,x=0.8553908959608967,y=0.021430068067535557 -a=wye,b=eks,i=2278,x=0.17901836368365676,y=0.14044395537918564 -a=hat,b=eks,i=2279,x=0.012280680223469398,y=0.277342303022595 -a=wye,b=zee,i=2280,x=0.4217562022758986,y=0.051936162685817355 -a=zee,b=pan,i=2281,x=0.1383792519119802,y=0.47235511628254045 -a=eks,b=hat,i=2282,x=0.7011958061953378,y=0.91083574253739 -a=zee,b=eks,i=2283,x=0.36444369039046853,y=0.8130301163410548 -a=hat,b=pan,i=2284,x=0.00437293898208746,y=0.5682527005859528 -a=pan,b=pan,i=2285,x=0.7982165489798513,y=0.46696290935411433 -a=wye,b=wye,i=2286,x=0.777938701974155,y=0.7615824205677968 -a=zee,b=eks,i=2287,x=0.0007106109478662859,y=0.8643696111639223 -a=pan,b=zee,i=2288,x=0.5745888818383479,y=0.8421462451069522 -a=pan,b=zee,i=2289,x=0.042515149065466495,y=0.3428290162671168 -a=zee,b=eks,i=2290,x=0.14418296982644663,y=0.3545011820617253 -a=hat,b=zee,i=2291,x=0.20256672348423999,y=0.7387630204148321 -a=pan,b=wye,i=2292,x=0.27678771174110695,y=0.35760728439380474 -a=wye,b=wye,i=2293,x=0.7466090205883998,y=0.26526277458892455 -a=wye,b=pan,i=2294,x=0.08185339484509935,y=0.528639660976175 -a=wye,b=eks,i=2295,x=0.08642901521217838,y=0.7537214070316656 -a=eks,b=pan,i=2296,x=0.8896433327303079,y=0.37296324484846344 -a=hat,b=hat,i=2297,x=0.4483608002905408,y=0.9685358655584886 -a=hat,b=wye,i=2298,x=0.04470660416233252,y=0.5097725516351974 -a=pan,b=zee,i=2299,x=0.9075871262764453,y=0.2516247032796314 -a=zee,b=pan,i=2300,x=0.9291273399024345,y=0.9606720070997913 -a=wye,b=pan,i=2301,x=0.21033222836103416,y=0.992833477876893 -a=eks,b=zee,i=2302,x=0.17194913992026895,y=0.7921934271129547 -a=eks,b=hat,i=2303,x=0.99161495045373,y=0.41941465442597237 -a=zee,b=hat,i=2304,x=0.1127642829456843,y=0.29881658214862383 -a=pan,b=zee,i=2305,x=0.11496965057148123,y=0.19753250624952667 -a=hat,b=pan,i=2306,x=0.3342389415345628,y=0.985240345385304 -a=zee,b=wye,i=2307,x=0.6678594262004072,y=0.2626625984540243 -a=zee,b=pan,i=2308,x=0.9899815839130719,y=0.49399198581194637 -a=zee,b=wye,i=2309,x=0.12120595243094534,y=0.3417676704542142 -a=wye,b=wye,i=2310,x=0.6528439645535314,y=0.626705481063678 -a=zee,b=zee,i=2311,x=0.965416713125537,y=0.675622189665188 -a=pan,b=zee,i=2312,x=0.38832123076906144,y=0.8770818996569462 -a=zee,b=pan,i=2313,x=0.4308881860064431,y=0.298139087353108 -a=zee,b=hat,i=2314,x=0.9107705033446805,y=0.05369007195738784 -a=wye,b=eks,i=2315,x=0.1958584059822993,y=0.6458957990948471 -a=eks,b=eks,i=2316,x=0.1898131609601975,y=0.2576221943783219 -a=pan,b=hat,i=2317,x=0.37219247017788026,y=0.9659877761503816 -a=eks,b=hat,i=2318,x=0.6179437679435674,y=0.6255315742679604 -a=hat,b=eks,i=2319,x=0.5617665438640009,y=0.03790286141600696 -a=eks,b=hat,i=2320,x=0.43513392007253626,y=0.953280068715905 -a=eks,b=hat,i=2321,x=0.9006870009567153,y=0.8537806242130159 -a=zee,b=zee,i=2322,x=0.39299000984576493,y=0.48675520394221294 -a=zee,b=zee,i=2323,x=0.6924646229067376,y=0.961728591715515 -a=eks,b=zee,i=2324,x=0.3656731818815381,y=0.4348170464549541 -a=zee,b=eks,i=2325,x=0.9310044743908388,y=0.5915717923626269 -a=wye,b=hat,i=2326,x=0.5390947464654677,y=0.9171443353099715 -a=hat,b=pan,i=2327,x=0.13236042343196264,y=0.7018827248938442 -a=eks,b=zee,i=2328,x=0.9233414160859896,y=0.9426916138193271 -a=eks,b=wye,i=2329,x=0.32236596243200943,y=0.12349447265840763 -a=pan,b=hat,i=2330,x=0.26562360950781083,y=0.6143914548179807 -a=pan,b=eks,i=2331,x=0.7795985947092806,y=0.9791969083425154 -a=wye,b=eks,i=2332,x=0.8888447587498162,y=0.9274917692848156 -a=zee,b=eks,i=2333,x=0.0339047026172683,y=0.9899797336099346 -a=eks,b=hat,i=2334,x=0.4706495392838296,y=0.5339895561589622 -a=eks,b=pan,i=2335,x=0.43389388336403034,y=0.6527555471857784 -a=zee,b=wye,i=2336,x=0.2132138095588999,y=0.3350510820375012 -a=eks,b=zee,i=2337,x=0.18310611841718727,y=0.27611093961149813 -a=zee,b=wye,i=2338,x=0.5849778358487363,y=0.4472676087156583 -a=pan,b=pan,i=2339,x=0.7632065771231693,y=0.9533148007319427 -a=zee,b=zee,i=2340,x=0.7979106986767058,y=0.34142212009441275 -a=eks,b=eks,i=2341,x=0.1689642670369339,y=0.08666058738902227 -a=pan,b=zee,i=2342,x=0.7289455213274276,y=0.04597102157281818 -a=zee,b=zee,i=2343,x=0.6910588757833684,y=0.2853388537359345 -a=wye,b=eks,i=2344,x=0.46559621387184413,y=0.6453632272888741 -a=eks,b=eks,i=2345,x=0.7240818295178657,y=0.7697201439211158 -a=zee,b=pan,i=2346,x=0.2106452223867551,y=0.8198492988109947 -a=wye,b=pan,i=2347,x=0.9345794244994885,y=0.5611924241664724 -a=pan,b=hat,i=2348,x=0.5703090995325857,y=0.5762676020746584 -a=hat,b=zee,i=2349,x=0.2589915838302729,y=0.04497637706481694 -a=wye,b=pan,i=2350,x=0.8998392369608815,y=0.03747679005136095 -a=pan,b=pan,i=2351,x=0.6724810273079015,y=0.3212043712768039 -a=zee,b=pan,i=2352,x=0.19948276246295482,y=0.27886956486778547 -a=hat,b=eks,i=2353,x=0.19721696160232083,y=0.1902097573367555 -a=zee,b=wye,i=2354,x=0.3060499042971171,y=0.6230526367576228 -a=pan,b=zee,i=2355,x=0.4132334507678017,y=0.0958935038625609 -a=pan,b=pan,i=2356,x=0.49220586447091974,y=0.3637263342876337 -a=pan,b=hat,i=2357,x=0.6035016232976687,y=0.2654296683236047 -a=hat,b=hat,i=2358,x=0.5472833606897747,y=0.11508965130492199 -a=zee,b=pan,i=2359,x=0.3123116477611221,y=0.5313965363528594 -a=zee,b=eks,i=2360,x=0.7646045437647716,y=0.4374368628092571 -a=wye,b=pan,i=2361,x=0.8368170215826418,y=0.1513261409766582 -a=hat,b=hat,i=2362,x=0.7586788480149922,y=0.6167614911809044 -a=eks,b=zee,i=2363,x=0.2829560793295287,y=0.31877554125357643 -a=wye,b=wye,i=2364,x=0.8255236580889759,y=0.30884248417286686 -a=eks,b=wye,i=2365,x=0.10694687582616103,y=0.12549118259779624 -a=zee,b=hat,i=2366,x=0.8434948128398014,y=0.7566711862078771 -a=eks,b=hat,i=2367,x=0.11100450503347647,y=0.26231820024625485 -a=wye,b=zee,i=2368,x=0.7948774475212161,y=0.10865250917846037 -a=hat,b=wye,i=2369,x=0.03135249091794745,y=0.3202037119775658 -a=wye,b=zee,i=2370,x=0.5078848120383039,y=0.5495294084638471 -a=eks,b=zee,i=2371,x=0.6296689722217776,y=0.8808041685758371 -a=hat,b=wye,i=2372,x=0.36694062952440554,y=0.03285188729261823 -a=wye,b=zee,i=2373,x=0.5980535785869657,y=0.36584311596027363 -a=pan,b=zee,i=2374,x=0.8057531144421612,y=0.1103465158096888 -a=eks,b=hat,i=2375,x=0.39566127922010763,y=0.926370579143245 -a=pan,b=eks,i=2376,x=0.7036015015427707,y=0.8896688757860348 -a=hat,b=wye,i=2377,x=0.3840916366205712,y=0.6117763705069971 -a=wye,b=hat,i=2378,x=0.4244587912309,y=0.5147488063855301 -a=pan,b=eks,i=2379,x=0.0126919318388804,y=0.05364265512252031 -a=hat,b=zee,i=2380,x=0.12629846495196628,y=0.00017118893583800698 -a=eks,b=hat,i=2381,x=0.551443915184712,y=0.4189803949942186 -a=zee,b=hat,i=2382,x=0.9419188430791652,y=0.5943076078356421 -a=hat,b=pan,i=2383,x=0.3305527530124114,y=0.9744246737507011 -a=wye,b=wye,i=2384,x=0.11982738948595928,y=0.5927050811984642 -a=hat,b=wye,i=2385,x=0.6993064388052053,y=0.33556275655578294 -a=zee,b=pan,i=2386,x=0.4400144230398596,y=0.40718760512261376 -a=wye,b=zee,i=2387,x=0.6500939509690578,y=0.45169252354648837 -a=wye,b=eks,i=2388,x=0.6542816745109832,y=0.013759212456254444 -a=wye,b=eks,i=2389,x=0.6332584135319546,y=0.13251231094237437 -a=eks,b=wye,i=2390,x=0.6331896102608988,y=0.9589307439412602 -a=wye,b=zee,i=2391,x=0.6731897745167693,y=0.4283772233112926 -a=eks,b=zee,i=2392,x=0.7923894749706849,y=0.8917271151038314 -a=eks,b=eks,i=2393,x=0.9746844751820227,y=0.4893807704691421 -a=wye,b=pan,i=2394,x=0.2920699646605315,y=0.7387920697224446 -a=eks,b=wye,i=2395,x=0.27334460412686323,y=0.9029783332632627 -a=hat,b=hat,i=2396,x=0.07185787494215012,y=0.8691631482259681 -a=eks,b=eks,i=2397,x=0.768257729490193,y=0.31910490090314103 -a=pan,b=wye,i=2398,x=0.6626457206760483,y=0.6952332207508496 -a=pan,b=hat,i=2399,x=0.034841768970897746,y=0.5723693878842167 -a=pan,b=hat,i=2400,x=0.15181645902125407,y=0.7998239378911912 -a=eks,b=zee,i=2401,x=0.07479813220400944,y=0.6026675734691738 -a=hat,b=hat,i=2402,x=0.7741341758574097,y=0.24407851593657948 -a=zee,b=wye,i=2403,x=0.4652916798345421,y=0.5826939451920669 -a=eks,b=wye,i=2404,x=0.5546642401893631,y=0.5985846330820938 -a=pan,b=pan,i=2405,x=0.2358853113430821,y=0.024003950417810227 -a=wye,b=eks,i=2406,x=0.28179350936795733,y=0.5023264174705517 -a=hat,b=eks,i=2407,x=0.2457970370438457,y=0.811421289170773 -a=hat,b=hat,i=2408,x=0.6751131270509296,y=0.48856361143986005 -a=eks,b=zee,i=2409,x=0.59847879634121,y=0.7916259405367129 -a=pan,b=zee,i=2410,x=0.04515829439395114,y=0.24330613797458922 -a=zee,b=hat,i=2411,x=0.22712092810863416,y=0.8127998680800427 -a=zee,b=zee,i=2412,x=0.21505489058022198,y=0.8006638202348123 -a=eks,b=hat,i=2413,x=0.13598286981810193,y=0.86160038906847 -a=pan,b=pan,i=2414,x=0.8144512562961078,y=0.9177829414099823 -a=hat,b=hat,i=2415,x=0.6600221567552329,y=0.0584486480823484 -a=wye,b=wye,i=2416,x=0.7428129016480294,y=0.14965046440370033 -a=eks,b=hat,i=2417,x=0.6492293161864587,y=0.9521947928976578 -a=hat,b=pan,i=2418,x=0.9704055340867738,y=0.5799798105012466 -a=eks,b=zee,i=2419,x=0.09047960361588969,y=0.48999371435226136 -a=pan,b=pan,i=2420,x=0.9333731806896786,y=0.6043241512179962 -a=hat,b=hat,i=2421,x=0.21707010100448243,y=0.5150327861442825 -a=eks,b=pan,i=2422,x=0.00863696577870754,y=0.11509725431793605 -a=zee,b=wye,i=2423,x=0.4653066475033094,y=0.21997612033850344 -a=hat,b=wye,i=2424,x=0.9062179939941751,y=0.2875912231476856 -a=zee,b=wye,i=2425,x=0.398155311000022,y=0.0933499833149607 -a=pan,b=eks,i=2426,x=0.6379726091040971,y=0.5194384530463447 -a=wye,b=eks,i=2427,x=0.539037074058747,y=0.7531525516774173 -a=pan,b=hat,i=2428,x=0.7520504631719865,y=0.34660951591602773 -a=pan,b=wye,i=2429,x=0.8020766995566793,y=0.7689029735366432 -a=zee,b=zee,i=2430,x=0.6271482513925272,y=0.4944204099323506 -a=hat,b=wye,i=2431,x=0.3036891373264764,y=0.9909449455648611 -a=zee,b=wye,i=2432,x=0.30385506685705554,y=0.17382245218515768 -a=zee,b=pan,i=2433,x=0.6754312777622205,y=0.07005068705650719 -a=pan,b=eks,i=2434,x=0.013657995328708816,y=0.45586613889144767 -a=zee,b=wye,i=2435,x=0.9416754660578306,y=0.6579056008950284 -a=zee,b=wye,i=2436,x=0.090487272126626,y=0.6726267738306646 -a=wye,b=wye,i=2437,x=0.8441032403303297,y=0.7236974901617537 -a=pan,b=pan,i=2438,x=0.9785415873749357,y=0.14648707376766656 -a=hat,b=zee,i=2439,x=0.7318268760763208,y=0.7357122474543071 -a=pan,b=hat,i=2440,x=0.4546313043075274,y=0.9868446327538511 -a=eks,b=zee,i=2441,x=0.7384348801280877,y=0.4331993419540827 -a=zee,b=zee,i=2442,x=0.3563884899582277,y=0.8944727395958034 -a=pan,b=zee,i=2443,x=0.5467338009669124,y=0.3737101047888789 -a=zee,b=wye,i=2444,x=0.6743475636626085,y=0.5841642214951493 -a=pan,b=zee,i=2445,x=0.150471438909343,y=0.03999544722112036 -a=pan,b=zee,i=2446,x=0.8427836793414677,y=0.177257809167512 -a=zee,b=hat,i=2447,x=0.9165212208454823,y=0.6343832698422787 -a=wye,b=hat,i=2448,x=0.8350423281884237,y=0.2422590088973925 -a=wye,b=pan,i=2449,x=0.5042681244213146,y=0.908306481649806 -a=pan,b=hat,i=2450,x=0.3717927109546766,y=0.7872600125241359 -a=wye,b=zee,i=2451,x=0.23883689209402614,y=0.4489097810835715 -a=hat,b=wye,i=2452,x=0.7256914244489449,y=0.07408098995861301 -a=hat,b=wye,i=2453,x=0.4787447016730605,y=0.027781641677141033 -a=wye,b=hat,i=2454,x=0.782215232098275,y=0.17908166243221946 -a=zee,b=zee,i=2455,x=0.15793062293407878,y=0.9604346209844584 -a=zee,b=eks,i=2456,x=0.09865545345297155,y=0.8348979205972645 -a=pan,b=pan,i=2457,x=0.3927934924087789,y=0.06769141197493256 -a=zee,b=pan,i=2458,x=0.02903168922821775,y=0.9416706505805262 -a=wye,b=pan,i=2459,x=0.0074179863852393835,y=0.13412770282159325 -a=wye,b=wye,i=2460,x=0.8546039006462764,y=0.5794887921093801 -a=pan,b=pan,i=2461,x=0.39765418222695004,y=0.607893298841388 -a=wye,b=wye,i=2462,x=0.9445996918832312,y=0.4706780924111563 -a=pan,b=zee,i=2463,x=0.9563932642460863,y=0.31484480296442896 -a=hat,b=hat,i=2464,x=0.6604485499983388,y=0.6145786977176719 -a=zee,b=zee,i=2465,x=0.3505544906675998,y=0.1954960429503897 -a=pan,b=pan,i=2466,x=0.7769548783450912,y=0.8220089791630163 -a=eks,b=eks,i=2467,x=0.9350039614092526,y=0.8756536110782422 -a=zee,b=pan,i=2468,x=0.7178372288982118,y=0.4062989111358041 -a=zee,b=wye,i=2469,x=0.9204186818975437,y=0.4747739907393056 -a=hat,b=zee,i=2470,x=0.910842331244497,y=0.8937381551221251 -a=pan,b=wye,i=2471,x=0.36510756117868337,y=0.16172467779589483 -a=zee,b=zee,i=2472,x=0.08880173246131728,y=0.7982278670793287 -a=wye,b=wye,i=2473,x=0.07909826171256307,y=0.855556979661628 -a=pan,b=eks,i=2474,x=0.7828499578474473,y=0.9442071626420061 -a=wye,b=wye,i=2475,x=0.06324401276925695,y=0.5950858034074182 -a=pan,b=zee,i=2476,x=0.2262395290029181,y=0.49451050699405674 -a=wye,b=eks,i=2477,x=0.6306465815187388,y=0.46790600889102485 -a=wye,b=hat,i=2478,x=0.4614473986661236,y=0.4721517855532317 -a=eks,b=eks,i=2479,x=0.3091965203151934,y=0.9145596089559873 -a=hat,b=wye,i=2480,x=0.014430995239748112,y=0.35346467775779145 -a=eks,b=hat,i=2481,x=0.8284728324140498,y=0.2977503297359205 -a=hat,b=zee,i=2482,x=0.15810752007547613,y=0.10215153278169598 -a=hat,b=eks,i=2483,x=0.5002024621775637,y=0.9187983113959539 -a=zee,b=hat,i=2484,x=0.04124901160673633,y=0.1095855587112885 -a=wye,b=pan,i=2485,x=0.7244385390670799,y=0.17205034306117317 -a=eks,b=hat,i=2486,x=0.4923487745128049,y=0.28889637616320174 -a=wye,b=pan,i=2487,x=0.3300250547987864,y=0.22540259142646224 -a=eks,b=zee,i=2488,x=0.0023333167684839173,y=0.24088326731558385 -a=zee,b=pan,i=2489,x=0.5050787967691673,y=0.96990681663883 -a=pan,b=pan,i=2490,x=0.853399144959847,y=0.3768453915244885 -a=pan,b=eks,i=2491,x=0.11150304854042947,y=0.33331036327124963 -a=wye,b=eks,i=2492,x=0.9214469071128305,y=0.28676404710502656 -a=hat,b=zee,i=2493,x=0.8773662066308794,y=0.17323941800052478 -a=pan,b=pan,i=2494,x=0.3207059888232746,y=0.8664631709525704 -a=eks,b=hat,i=2495,x=0.910628314565378,y=0.4258002135216937 -a=hat,b=zee,i=2496,x=0.1577724924590801,y=0.4739307550526024 -a=hat,b=wye,i=2497,x=0.8872744210629263,y=0.14605498570574493 -a=wye,b=hat,i=2498,x=0.23359521101241776,y=0.5844213774291599 -a=zee,b=zee,i=2499,x=0.8613769284558995,y=0.9685505021744841 -a=eks,b=pan,i=2500,x=0.8597477426689076,y=0.17079339571919316 -a=eks,b=zee,i=2501,x=0.9988110946859143,y=0.8013707404671317 -a=zee,b=eks,i=2502,x=0.08631339989521669,y=0.7626498621504472 -a=wye,b=pan,i=2503,x=0.6021619570218234,y=0.7998420154096526 -a=zee,b=pan,i=2504,x=0.8178599713104803,y=0.18283102556915032 -a=pan,b=hat,i=2505,x=0.7319860671662751,y=0.11573142291632155 -a=hat,b=eks,i=2506,x=0.38864742500184934,y=0.9549915162000734 -a=zee,b=eks,i=2507,x=0.06006684599594547,y=0.32800136057911744 -a=eks,b=eks,i=2508,x=0.2459351356992232,y=0.6992300046304194 -a=hat,b=pan,i=2509,x=0.9399094021245685,y=0.9766927628695118 -a=eks,b=eks,i=2510,x=0.6122854089898786,y=0.11735880955927658 -a=hat,b=pan,i=2511,x=0.3658401332558662,y=0.8058278063627171 -a=pan,b=eks,i=2512,x=0.9712759091673199,y=0.35741783697299145 -a=wye,b=pan,i=2513,x=0.9941884027342468,y=0.7427222275160807 -a=hat,b=wye,i=2514,x=0.759666601296956,y=0.5029288106582336 -a=hat,b=hat,i=2515,x=0.41858436455494885,y=0.7397180761147025 -a=wye,b=zee,i=2516,x=0.22158162509494428,y=0.1717438346245811 -a=wye,b=hat,i=2517,x=0.25809778439746667,y=0.8942638085822656 -a=eks,b=hat,i=2518,x=0.8156500849184675,y=0.08381965183304241 -a=hat,b=zee,i=2519,x=0.023141000554160573,y=0.159821225039678 -a=eks,b=hat,i=2520,x=0.38461965648830476,y=0.8779474089328696 -a=wye,b=pan,i=2521,x=0.6746733937181614,y=0.12172129656898323 -a=pan,b=zee,i=2522,x=0.3836823470783707,y=0.2530933368188705 -a=pan,b=eks,i=2523,x=0.2467086564140698,y=0.9098280255547708 -a=hat,b=pan,i=2524,x=0.5483698024028446,y=0.80652225685914 -a=zee,b=pan,i=2525,x=0.9332167021929317,y=0.8274407370101524 -a=pan,b=pan,i=2526,x=0.22953431238745692,y=0.07163851427849766 -a=wye,b=hat,i=2527,x=0.021510700973820462,y=0.7950798338977892 -a=eks,b=eks,i=2528,x=0.7481860062358446,y=0.6037295548285344 -a=eks,b=pan,i=2529,x=0.3393051290797555,y=0.025397429828768137 -a=zee,b=zee,i=2530,x=0.6149438991743728,y=0.7634078131671355 -a=wye,b=zee,i=2531,x=0.6511465358134351,y=0.0536653751892201 -a=wye,b=wye,i=2532,x=0.0054964576725233805,y=0.28953245784366877 -a=wye,b=hat,i=2533,x=0.15518569216470812,y=0.5686747295053566 -a=zee,b=wye,i=2534,x=0.12207545315374224,y=0.9746444335548179 -a=zee,b=eks,i=2535,x=0.5565415302093949,y=0.10288505903505452 -a=wye,b=wye,i=2536,x=0.43315262752486194,y=0.27205902504143986 -a=pan,b=hat,i=2537,x=0.3113077953556219,y=0.8505260803244152 -a=eks,b=eks,i=2538,x=0.38906239415188226,y=0.2685051550780454 -a=zee,b=hat,i=2539,x=0.6345180823665123,y=0.714272732680164 -a=zee,b=pan,i=2540,x=0.7633387673070651,y=0.16850854825088746 -a=wye,b=eks,i=2541,x=0.9200450459897079,y=0.5203187898658775 -a=hat,b=pan,i=2542,x=0.416076924166804,y=0.4567226915609339 -a=zee,b=eks,i=2543,x=0.8882507111625345,y=0.6834591517880225 -a=hat,b=zee,i=2544,x=0.6234518321227132,y=0.568093714839173 -a=pan,b=zee,i=2545,x=0.04811425968953953,y=0.5966158652406183 -a=zee,b=zee,i=2546,x=0.5921140592243828,y=0.3199967249370237 -a=pan,b=hat,i=2547,x=0.24011644563078283,y=0.12009590313568308 -a=zee,b=hat,i=2548,x=0.4304009679094255,y=0.3235635213023209 -a=eks,b=zee,i=2549,x=0.7611031921737661,y=0.689829708430865 -a=zee,b=hat,i=2550,x=0.9107046316959098,y=0.9267025956859704 -a=zee,b=zee,i=2551,x=0.5534453229003656,y=0.19470214949450948 -a=pan,b=zee,i=2552,x=0.7099889805872556,y=0.2612275639524275 -a=pan,b=hat,i=2553,x=0.8260887056078599,y=0.6576752537408973 -a=pan,b=pan,i=2554,x=0.4479850467242381,y=0.605644729638017 -a=wye,b=pan,i=2555,x=0.8635009458180566,y=0.057986705329265864 -a=eks,b=pan,i=2556,x=0.680151798371677,y=0.9721202344719171 -a=zee,b=pan,i=2557,x=0.3624846239071149,y=0.38096311190739685 -a=eks,b=eks,i=2558,x=0.39585447743449853,y=0.9090232688363228 -a=pan,b=eks,i=2559,x=0.41182608064067716,y=0.4651557950827221 -a=zee,b=hat,i=2560,x=0.8207042664095232,y=0.972493490219255 -a=eks,b=eks,i=2561,x=0.9568943633067363,y=0.9942427604342767 -a=pan,b=wye,i=2562,x=0.7844571232021518,y=0.25212822563492654 -a=eks,b=eks,i=2563,x=0.7448606140977615,y=0.7677875733269816 -a=eks,b=eks,i=2564,x=0.6984324028424346,y=0.6867698395582814 -a=wye,b=eks,i=2565,x=0.3850930672708389,y=0.6142341088294833 -a=pan,b=pan,i=2566,x=0.027948166482267056,y=0.10155712046334942 -a=zee,b=pan,i=2567,x=0.6373779619859908,y=0.8254690568634606 -a=hat,b=zee,i=2568,x=0.5351681178046073,y=0.8555068797919759 -a=eks,b=eks,i=2569,x=0.6837390714119882,y=0.2555760527745451 -a=zee,b=wye,i=2570,x=0.7332356879541984,y=0.7095236956282258 -a=wye,b=zee,i=2571,x=0.6045866476300921,y=0.9472308056954024 -a=zee,b=wye,i=2572,x=0.5192819052899776,y=0.18543077448215517 -a=pan,b=eks,i=2573,x=0.6173980620064918,y=0.7399111725286391 -a=wye,b=hat,i=2574,x=0.12423956865216534,y=0.989639508760292 -a=eks,b=hat,i=2575,x=0.33031955019827075,y=0.7108284566198849 -a=hat,b=eks,i=2576,x=0.8598307222093972,y=0.677493082731475 -a=pan,b=zee,i=2577,x=0.2591109015365989,y=0.9393069496539326 -a=zee,b=eks,i=2578,x=0.11420274089804072,y=0.6781907800368309 -a=hat,b=wye,i=2579,x=0.470168322914005,y=0.3245499585879692 -a=hat,b=wye,i=2580,x=0.7501598293607254,y=0.4721867436018571 -a=eks,b=hat,i=2581,x=0.625746894720574,y=0.33737938119664646 -a=pan,b=eks,i=2582,x=0.4136169698568053,y=0.3221257100507432 -a=zee,b=wye,i=2583,x=0.815721986649748,y=0.45027193508163077 -a=pan,b=zee,i=2584,x=0.32285180303468286,y=0.5767328321662406 -a=pan,b=pan,i=2585,x=0.3671198622625018,y=0.04290161860716368 -a=hat,b=eks,i=2586,x=0.7548839524754403,y=0.3140601750346328 -a=pan,b=wye,i=2587,x=0.149414261676316,y=0.8817567568143645 -a=pan,b=eks,i=2588,x=0.13689661134333897,y=0.5584038012783021 -a=hat,b=pan,i=2589,x=0.9259610701768484,y=0.7567071664063917 -a=zee,b=wye,i=2590,x=0.35176292753881166,y=0.7374790902726833 -a=hat,b=hat,i=2591,x=0.09004868118257148,y=0.6922893442005552 -a=hat,b=pan,i=2592,x=0.18016216606425406,y=0.2099121503498219 -a=pan,b=hat,i=2593,x=0.6510610556921332,y=0.10742569633195376 -a=eks,b=zee,i=2594,x=0.07159878226683902,y=0.20989783292032282 -a=hat,b=hat,i=2595,x=0.9678207161209708,y=0.992049177363607 -a=eks,b=hat,i=2596,x=0.18014846649609306,y=0.5629283001780467 -a=hat,b=pan,i=2597,x=0.6191641186208192,y=0.91398214172482 -a=eks,b=hat,i=2598,x=0.012851434303710274,y=0.14814227972741656 -a=hat,b=zee,i=2599,x=0.9048118287143257,y=0.8847594382115711 -a=zee,b=wye,i=2600,x=0.5561307219276355,y=0.15276515927874457 -a=zee,b=eks,i=2601,x=0.19257014095901703,y=0.7774457342825621 -a=wye,b=eks,i=2602,x=0.9514647938068078,y=0.10795242094349111 -a=hat,b=wye,i=2603,x=0.31179190517346567,y=0.01609407680873831 -a=wye,b=wye,i=2604,x=0.47775304052473055,y=0.38671047718640983 -a=eks,b=pan,i=2605,x=0.2344602349071444,y=0.8645430924168496 -a=eks,b=zee,i=2606,x=0.1439484898344945,y=0.9439005895698022 -a=eks,b=eks,i=2607,x=0.8629787970160852,y=0.8183015089362451 -a=pan,b=zee,i=2608,x=0.880820846632719,y=0.4542838900435503 -a=wye,b=eks,i=2609,x=0.5124204798290518,y=0.4054974158118896 -a=wye,b=hat,i=2610,x=0.14713673147626471,y=0.193770427584398 -a=zee,b=wye,i=2611,x=0.9269147206987636,y=0.3354668582497363 -a=pan,b=wye,i=2612,x=0.48759095161412014,y=0.9486718920730824 -a=pan,b=pan,i=2613,x=0.9093120035098351,y=0.993257702527396 -a=hat,b=wye,i=2614,x=0.7781647480152264,y=0.993772240196278 -a=hat,b=hat,i=2615,x=0.275311283835037,y=0.741356597630266 -a=eks,b=eks,i=2616,x=0.8400827662084357,y=0.904384801897908 -a=pan,b=pan,i=2617,x=0.44875309896113624,y=0.20709074311528453 -a=wye,b=zee,i=2618,x=0.7355696569603329,y=0.27564344454988243 -a=hat,b=wye,i=2619,x=0.19051153642139496,y=0.46651684239833613 -a=pan,b=zee,i=2620,x=0.5592572385681548,y=0.672039894065432 -a=wye,b=wye,i=2621,x=0.9091768138788122,y=0.07363030569876483 -a=hat,b=eks,i=2622,x=0.21855190429616178,y=0.306255719577206 -a=hat,b=zee,i=2623,x=0.5579915433786629,y=0.9351922009068756 -a=hat,b=wye,i=2624,x=0.16649980465987524,y=0.9174497541816296 -a=eks,b=eks,i=2625,x=0.9025640383772568,y=0.4657693509889542 -a=wye,b=zee,i=2626,x=0.21020261586647726,y=0.2011091555698421 -a=hat,b=eks,i=2627,x=0.037644003067944465,y=0.9166549903188604 -a=eks,b=eks,i=2628,x=0.5037459860860201,y=0.20718835826701032 -a=eks,b=eks,i=2629,x=0.7314957198821074,y=0.0818653656966235 -a=hat,b=zee,i=2630,x=0.9194151240931991,y=0.07423066472063256 -a=hat,b=hat,i=2631,x=0.8669833462776865,y=0.024944214178881152 -a=hat,b=hat,i=2632,x=0.40619921403492654,y=0.6776699682132551 -a=hat,b=zee,i=2633,x=0.11167516897133345,y=0.1968557916169683 -a=wye,b=zee,i=2634,x=0.12637912495756354,y=0.932738782222326 -a=zee,b=wye,i=2635,x=0.6187681447031627,y=0.274704452983646 -a=pan,b=wye,i=2636,x=0.6460342181062689,y=0.7795324745240246 -a=zee,b=zee,i=2637,x=0.19576834398868515,y=0.679453943382103 -a=wye,b=eks,i=2638,x=0.36177627776550847,y=0.8386225553120263 -a=eks,b=eks,i=2639,x=0.12492716932261638,y=0.21510868197623745 -a=eks,b=wye,i=2640,x=0.885996241979663,y=0.059743642576263634 -a=eks,b=wye,i=2641,x=0.7008702235836195,y=0.39708447632667465 -a=hat,b=eks,i=2642,x=0.19929727396144037,y=0.5393711342556087 -a=wye,b=eks,i=2643,x=0.7038379533640264,y=0.2415724804873508 -a=eks,b=pan,i=2644,x=0.1021121482244629,y=0.676614797112832 -a=wye,b=zee,i=2645,x=0.22135649292487047,y=0.3353372961478748 -a=hat,b=wye,i=2646,x=0.8302037270628269,y=0.29829682191098783 -a=zee,b=hat,i=2647,x=0.7129222271572655,y=0.3569951209382327 -a=wye,b=wye,i=2648,x=0.5590007902215932,y=0.44142931845984645 -a=zee,b=eks,i=2649,x=0.8676857104115077,y=0.6062661030015066 -a=zee,b=pan,i=2650,x=0.9849457970315111,y=0.0914154862759321 -a=zee,b=zee,i=2651,x=0.08318080628977687,y=0.08723840975656705 -a=hat,b=pan,i=2652,x=0.3556516386966647,y=0.6019467128167675 -a=hat,b=wye,i=2653,x=0.279635601734451,y=0.4522275293507577 -a=pan,b=zee,i=2654,x=0.2553738664507069,y=0.8359675139928466 -a=pan,b=eks,i=2655,x=0.20861278160790098,y=0.09276404710956598 -a=eks,b=eks,i=2656,x=0.714144646455272,y=0.3211201665161757 -a=eks,b=eks,i=2657,x=0.9118213055286543,y=0.2304692673683172 -a=wye,b=eks,i=2658,x=0.8878589425876583,y=0.16500927178713598 -a=pan,b=eks,i=2659,x=0.39231354538410634,y=0.19261788337249341 -a=zee,b=hat,i=2660,x=0.5125720965755153,y=0.3101033226433013 -a=zee,b=wye,i=2661,x=0.9409834902940938,y=0.06519737249713942 -a=zee,b=zee,i=2662,x=0.8522522520922186,y=0.0821437591034958 -a=zee,b=wye,i=2663,x=0.7126684401510096,y=0.8051899200649238 -a=eks,b=wye,i=2664,x=0.151141097038609,y=0.671754932411165 -a=zee,b=eks,i=2665,x=0.9622613991461785,y=0.19912987672139137 -a=pan,b=zee,i=2666,x=0.9074679274351196,y=0.8957847934010839 -a=hat,b=pan,i=2667,x=0.9240389772763548,y=0.5231982813953002 -a=pan,b=eks,i=2668,x=0.3525652118913354,y=0.49330814134258383 -a=hat,b=wye,i=2669,x=0.14565423862972182,y=0.18195721833206513 -a=wye,b=hat,i=2670,x=0.5314631858298513,y=0.9247384504550191 -a=eks,b=pan,i=2671,x=0.2191775509938665,y=0.16221454397918067 -a=zee,b=wye,i=2672,x=0.2957478300120929,y=0.9566416400315985 -a=hat,b=eks,i=2673,x=0.5317253402583432,y=0.47720559893968584 -a=hat,b=wye,i=2674,x=0.5685867476642044,y=0.9536560186396535 -a=eks,b=zee,i=2675,x=0.7116584351173386,y=0.8813675632259913 -a=zee,b=zee,i=2676,x=0.6369443311903168,y=0.20245472621871452 -a=wye,b=hat,i=2677,x=0.03828177316116377,y=0.694988753462705 -a=wye,b=hat,i=2678,x=0.44478934074526144,y=0.6593596173323781 -a=zee,b=wye,i=2679,x=0.4234179513345332,y=0.9156320336038198 -a=zee,b=zee,i=2680,x=0.28695958426961987,y=0.35447908228108094 -a=zee,b=zee,i=2681,x=0.5753537491643719,y=0.8698920433502088 -a=hat,b=eks,i=2682,x=0.7144081950600689,y=0.8253921612815761 -a=pan,b=pan,i=2683,x=0.9474694135785586,y=0.5331573468403473 -a=pan,b=eks,i=2684,x=0.3066978542374318,y=0.9327810898395875 -a=wye,b=pan,i=2685,x=0.5059670030001199,y=0.5002012382517893 -a=wye,b=wye,i=2686,x=0.5187856380368512,y=0.8665210971116168 -a=zee,b=pan,i=2687,x=0.5064156313100883,y=0.5164969637045003 -a=pan,b=wye,i=2688,x=0.9170439177596071,y=0.7855194635003687 -a=zee,b=hat,i=2689,x=0.7018760912024224,y=0.9018580557735235 -a=zee,b=eks,i=2690,x=0.9007898309642012,y=0.45508381746621207 -a=zee,b=zee,i=2691,x=0.5231651296128275,y=0.09791858989165081 -a=wye,b=eks,i=2692,x=0.2877718302322071,y=0.7350128229993341 -a=pan,b=zee,i=2693,x=0.6621261710619304,y=0.765604369363381 -a=wye,b=wye,i=2694,x=0.5113378128718417,y=0.7447015937237151 -a=hat,b=eks,i=2695,x=0.20486591930659304,y=0.08546083685115857 -a=eks,b=hat,i=2696,x=0.04425126652191069,y=0.9193247377962478 -a=pan,b=hat,i=2697,x=0.4397272166348868,y=0.5119020678265614 -a=pan,b=wye,i=2698,x=0.24786027932789856,y=0.25028548790543437 -a=hat,b=hat,i=2699,x=0.18362126379498567,y=0.3583685237385621 -a=wye,b=zee,i=2700,x=0.08296135187962883,y=0.9476795899696359 -a=wye,b=eks,i=2701,x=0.2631227677304565,y=0.8380786611056333 -a=wye,b=hat,i=2702,x=0.6107721059185136,y=0.29607498743239313 -a=eks,b=wye,i=2703,x=0.385921871325144,y=0.72206084966027 -a=eks,b=eks,i=2704,x=0.7289032202296384,y=0.943448586243151 -a=pan,b=zee,i=2705,x=0.2681131456172976,y=0.03881677277584117 -a=eks,b=eks,i=2706,x=0.042331033396890594,y=0.5816340794859904 -a=zee,b=eks,i=2707,x=0.09716550757790055,y=0.7946966787875323 -a=eks,b=wye,i=2708,x=0.6794836901391871,y=0.05370583587162048 -a=hat,b=zee,i=2709,x=0.4719223070024049,y=0.8798667170009199 -a=pan,b=zee,i=2710,x=0.3235306005938401,y=0.3944479990658286 -a=zee,b=zee,i=2711,x=0.6152705208747911,y=0.1871405298405333 -a=eks,b=wye,i=2712,x=0.28680813614749745,y=0.9091560294185156 -a=wye,b=hat,i=2713,x=0.7816282897070512,y=0.8725529048814329 -a=wye,b=eks,i=2714,x=0.5337563133061932,y=0.8113476754885716 -a=wye,b=eks,i=2715,x=0.830862652732706,y=0.31332718593186215 -a=eks,b=wye,i=2716,x=0.632360024350908,y=0.3523899339535477 -a=hat,b=eks,i=2717,x=0.8517633647797415,y=0.6075520102742804 -a=hat,b=zee,i=2718,x=0.3739110752469652,y=0.7344229221023192 -a=pan,b=zee,i=2719,x=0.13091802232794136,y=0.4147418371197401 -a=zee,b=pan,i=2720,x=0.875012865695414,y=0.6301510344124231 -a=pan,b=pan,i=2721,x=0.7634027233725996,y=0.9537462437208611 -a=eks,b=eks,i=2722,x=0.7485292786111598,y=0.060074780780270065 -a=wye,b=zee,i=2723,x=0.4692411142423141,y=0.18086715737750947 -a=wye,b=zee,i=2724,x=0.3016910888319093,y=0.2815838391993606 -a=eks,b=pan,i=2725,x=0.09842524478857917,y=0.4039455571089149 -a=zee,b=hat,i=2726,x=0.673450582305474,y=0.2368758099721252 -a=zee,b=hat,i=2727,x=0.3699736290437986,y=0.9456050995886015 -a=zee,b=wye,i=2728,x=0.8748783567240713,y=0.9127365833223035 -a=pan,b=eks,i=2729,x=0.9890321807426645,y=0.6544105013007959 -a=eks,b=zee,i=2730,x=0.5913012155193706,y=0.5125849403012366 -a=pan,b=hat,i=2731,x=0.7319063656923598,y=0.3661739653385341 -a=pan,b=eks,i=2732,x=0.7776625957923161,y=0.7377246871264523 -a=zee,b=eks,i=2733,x=0.11325755544848148,y=0.32415018564505305 -a=eks,b=pan,i=2734,x=0.4544389365010312,y=0.36274017551484594 -a=zee,b=hat,i=2735,x=0.6753256152256654,y=0.7111448175040769 -a=zee,b=pan,i=2736,x=0.13316236671850434,y=0.49210023866083397 -a=wye,b=hat,i=2737,x=0.8250578484602521,y=0.44752314931586656 -a=hat,b=zee,i=2738,x=0.6324404521389477,y=0.5991554446942754 -a=hat,b=zee,i=2739,x=0.4523752260828632,y=0.4097560532434581 -a=pan,b=eks,i=2740,x=0.16601226995675156,y=0.18151654867600586 -a=zee,b=pan,i=2741,x=0.8311173071571613,y=0.40630856689489725 -a=hat,b=eks,i=2742,x=0.5093718066070119,y=0.9913946330960695 -a=hat,b=pan,i=2743,x=0.3698356457904749,y=0.912970532909554 -a=pan,b=hat,i=2744,x=0.5286755809647917,y=0.1651174363994401 -a=wye,b=pan,i=2745,x=0.028208712274286007,y=0.45797747909936903 -a=eks,b=pan,i=2746,x=0.1995882002967131,y=0.9988195280621234 -a=wye,b=eks,i=2747,x=0.801718741445332,y=0.8343436520177938 -a=zee,b=eks,i=2748,x=0.11153132519318998,y=0.17527565983385196 -a=wye,b=zee,i=2749,x=0.39908796305565186,y=0.8203196495353728 -a=hat,b=eks,i=2750,x=0.7691621480087831,y=0.04624795153739847 -a=wye,b=zee,i=2751,x=0.8233374811260633,y=0.28118965684997943 -a=wye,b=zee,i=2752,x=0.5421828769626178,y=0.6932556944834627 -a=zee,b=eks,i=2753,x=0.38158944973875963,y=0.9978357823939198 -a=hat,b=zee,i=2754,x=0.7970322675458169,y=0.9056375064474206 -a=eks,b=pan,i=2755,x=0.5550958032704141,y=0.42460295509180657 -a=wye,b=hat,i=2756,x=0.5906831195384066,y=0.8552080634179315 -a=eks,b=eks,i=2757,x=0.9555433089030078,y=0.1012177575954587 -a=eks,b=zee,i=2758,x=0.7664329663706339,y=0.15228215819457713 -a=hat,b=zee,i=2759,x=0.7270670926222843,y=0.029636297862852157 -a=pan,b=hat,i=2760,x=0.5529628324424195,y=0.672560428419093 -a=wye,b=hat,i=2761,x=0.9138967886693034,y=0.9213145915711659 -a=pan,b=wye,i=2762,x=0.17716806320819933,y=0.5447158699924802 -a=hat,b=hat,i=2763,x=0.022393825286782576,y=0.858016600540151 -a=hat,b=hat,i=2764,x=0.603392328507201,y=0.2363695702425591 -a=zee,b=hat,i=2765,x=0.6459575860068912,y=0.49490736001017566 -a=pan,b=zee,i=2766,x=0.830723134231425,y=0.665433991421394 -a=hat,b=pan,i=2767,x=0.3457100418361476,y=0.4664053612526614 -a=pan,b=hat,i=2768,x=0.051556933697434526,y=0.17976239369842706 -a=wye,b=zee,i=2769,x=0.9668199998927879,y=0.775654943293786 -a=hat,b=pan,i=2770,x=0.27594379871232555,y=0.07411463454718337 -a=pan,b=wye,i=2771,x=0.1174987458859269,y=0.005708083531397623 -a=pan,b=pan,i=2772,x=0.05392321788248433,y=0.8060831057224058 -a=eks,b=hat,i=2773,x=0.69291317851219,y=0.7469948294872729 -a=eks,b=hat,i=2774,x=0.9533669824863673,y=0.12771923797645246 -a=pan,b=pan,i=2775,x=0.7184184194719956,y=0.4904968081523946 -a=zee,b=wye,i=2776,x=0.7910444608980398,y=0.6491427094511163 -a=pan,b=pan,i=2777,x=0.7969059524383465,y=0.669103483462524 -a=eks,b=eks,i=2778,x=0.4044385597446536,y=0.8914365675089366 -a=hat,b=hat,i=2779,x=0.3474761482419263,y=0.8741149984223016 -a=wye,b=pan,i=2780,x=0.2907618155304045,y=0.6492086022779383 -a=eks,b=wye,i=2781,x=0.4061806402666983,y=0.36644038967272896 -a=hat,b=wye,i=2782,x=0.6917795282383538,y=0.9185836699082268 -a=pan,b=eks,i=2783,x=0.5239744947947007,y=0.100504836859581 -a=pan,b=hat,i=2784,x=0.18256579384445848,y=0.6843696194592838 -a=pan,b=wye,i=2785,x=0.621716134059889,y=0.5300633007674981 -a=pan,b=pan,i=2786,x=0.591903135564393,y=0.9817870263065608 -a=wye,b=hat,i=2787,x=0.8988078039296443,y=0.3324514276733742 -a=pan,b=hat,i=2788,x=0.17679205732662606,y=0.7527210010920257 -a=zee,b=wye,i=2789,x=0.053717462803680616,y=0.05452469526931114 -a=wye,b=wye,i=2790,x=0.7984829227541226,y=0.5087673080038057 -a=eks,b=wye,i=2791,x=0.25879893217096905,y=0.8220530299185523 -a=eks,b=hat,i=2792,x=0.574814951546933,y=0.838521058328272 -a=zee,b=hat,i=2793,x=0.016119118073299465,y=0.048486447355322926 -a=zee,b=eks,i=2794,x=0.650899632819198,y=0.32295818131218135 -a=eks,b=hat,i=2795,x=0.9828163659495991,y=0.7271574141684917 -a=eks,b=wye,i=2796,x=0.9795666089681072,y=0.6936068995013053 -a=wye,b=eks,i=2797,x=0.0955127453952278,y=0.3193873136743336 -a=hat,b=hat,i=2798,x=0.6770658307401128,y=0.9612492884585951 -a=wye,b=zee,i=2799,x=0.21161639516025754,y=0.5474527237981746 -a=wye,b=hat,i=2800,x=0.7093628384045736,y=0.345927559025347 -a=eks,b=zee,i=2801,x=0.7870199221618309,y=0.43806525264266394 -a=pan,b=pan,i=2802,x=0.8498273803284082,y=0.6695254936819108 -a=hat,b=pan,i=2803,x=0.9905728716452045,y=0.06817205087359623 -a=eks,b=zee,i=2804,x=0.6933897404058519,y=0.38922468118999143 -a=pan,b=hat,i=2805,x=0.7075088693645657,y=0.42506017139149 -a=eks,b=pan,i=2806,x=0.45982174205757165,y=0.21639041126785252 -a=eks,b=hat,i=2807,x=0.8031386749353514,y=0.0456999691548835 -a=eks,b=wye,i=2808,x=0.7600783211059084,y=0.007237947568672576 -a=pan,b=eks,i=2809,x=0.7165979106211948,y=0.39409630219954705 -a=eks,b=pan,i=2810,x=0.18551339605772543,y=0.380046863146443 -a=zee,b=zee,i=2811,x=0.5396926661842615,y=0.7423060132429089 -a=wye,b=hat,i=2812,x=0.4080552691530873,y=0.23715395574697773 -a=pan,b=pan,i=2813,x=0.17404926584053904,y=0.80645434088305 -a=wye,b=pan,i=2814,x=0.4232831301914316,y=0.003575690575454038 -a=wye,b=hat,i=2815,x=0.2753349005711472,y=0.2981607803589118 -a=wye,b=hat,i=2816,x=0.0548741999804403,y=0.8717529254849362 -a=pan,b=eks,i=2817,x=0.9437261643896192,y=0.6585456269208473 -a=pan,b=eks,i=2818,x=0.5445166922773753,y=0.38460962685588984 -a=wye,b=zee,i=2819,x=0.6749831740629705,y=0.7181822687947076 -a=zee,b=wye,i=2820,x=0.3580004431691963,y=0.6240683366699936 -a=pan,b=eks,i=2821,x=0.4716526277671149,y=0.9325757014700042 -a=wye,b=zee,i=2822,x=0.14098677511513125,y=0.5582313771144721 -a=pan,b=pan,i=2823,x=0.8970769946774317,y=0.8143443328628265 -a=wye,b=wye,i=2824,x=0.7341426123679048,y=0.6900466491014886 -a=hat,b=zee,i=2825,x=0.9719365537990282,y=0.24324139738802553 -a=wye,b=eks,i=2826,x=0.4233744319170222,y=0.8058439449826745 -a=hat,b=pan,i=2827,x=0.007693535697102405,y=0.358018000756796 -a=hat,b=wye,i=2828,x=0.41676624317270083,y=0.6624100442632929 -a=wye,b=pan,i=2829,x=0.8978699958731674,y=0.5078843103822455 -a=hat,b=hat,i=2830,x=0.21960808360173467,y=0.8264732984361639 -a=zee,b=pan,i=2831,x=0.9137972915067373,y=0.8146525548769581 -a=eks,b=pan,i=2832,x=0.4530789281841252,y=0.6341898004637524 -a=zee,b=zee,i=2833,x=0.6526333204333133,y=0.8962754703239799 -a=zee,b=hat,i=2834,x=0.6338906419145569,y=0.08004293967389409 -a=wye,b=wye,i=2835,x=0.7415127201223656,y=0.2613633462577486 -a=zee,b=hat,i=2836,x=0.846671334452858,y=0.24855668017395638 -a=hat,b=hat,i=2837,x=0.5655910185189842,y=0.9183250775072218 -a=hat,b=eks,i=2838,x=0.16902131337166026,y=0.7584866069936619 -a=hat,b=pan,i=2839,x=0.5193100111654236,y=0.20166854425847602 -a=pan,b=zee,i=2840,x=0.5303948386863744,y=0.9080864546926949 -a=zee,b=wye,i=2841,x=0.09731314104522193,y=0.31228305132515555 -a=pan,b=eks,i=2842,x=0.7549176932437908,y=0.8640405171715994 -a=wye,b=zee,i=2843,x=0.2777710660360485,y=0.5714718654538901 -a=eks,b=pan,i=2844,x=0.7384309958383901,y=0.36866931513449486 -a=pan,b=pan,i=2845,x=0.606181068721247,y=0.616002039068612 -a=hat,b=wye,i=2846,x=0.3265631003841204,y=0.374492300721745 -a=hat,b=zee,i=2847,x=0.7881568154651081,y=0.5559821919859138 -a=pan,b=zee,i=2848,x=0.9624756126657645,y=0.9574074942948696 -a=eks,b=zee,i=2849,x=0.12952438020370405,y=0.9270908752540581 -a=wye,b=hat,i=2850,x=0.05470860141262479,y=0.04658298467108257 -a=wye,b=wye,i=2851,x=0.0020446268545805113,y=0.009943917182808737 -a=wye,b=pan,i=2852,x=0.42940687832989866,y=0.1468318742685415 -a=wye,b=wye,i=2853,x=0.990161382728111,y=0.3499379688024109 -a=eks,b=pan,i=2854,x=0.6338735592995826,y=0.15761281386438764 -a=wye,b=eks,i=2855,x=0.9419146917622048,y=0.6060209650374142 -a=eks,b=pan,i=2856,x=0.7115880622754508,y=0.8964623782367054 -a=hat,b=hat,i=2857,x=0.08346734323720095,y=0.6474711871979782 -a=zee,b=wye,i=2858,x=0.2826186316140814,y=0.6695478005175661 -a=eks,b=pan,i=2859,x=0.02447776772167043,y=0.20688297772055575 -a=wye,b=eks,i=2860,x=0.5600033166985924,y=0.3484813313151226 -a=hat,b=eks,i=2861,x=0.9138579231935814,y=0.16832803063229773 -a=pan,b=pan,i=2862,x=0.09800893976590253,y=0.8457845208352374 -a=pan,b=hat,i=2863,x=0.1834990915331669,y=0.528761462797945 -a=zee,b=wye,i=2864,x=0.42109865017533243,y=0.9324216458693535 -a=pan,b=hat,i=2865,x=0.1829857546300825,y=0.7541272830946107 -a=eks,b=zee,i=2866,x=0.8934857222410671,y=0.6256367404608381 -a=wye,b=zee,i=2867,x=0.9489727374596107,y=0.8632434631696883 -a=eks,b=hat,i=2868,x=0.4247265114092217,y=0.9641274059396724 -a=hat,b=pan,i=2869,x=0.04903454618587899,y=0.48019476723366983 -a=wye,b=eks,i=2870,x=0.13588621486865515,y=0.46171851137675657 -a=eks,b=hat,i=2871,x=0.8766196552731117,y=0.3432628950600898 -a=eks,b=hat,i=2872,x=0.0824464474583485,y=0.41500058370516746 -a=wye,b=zee,i=2873,x=0.8623888758101239,y=0.47502811946398604 -a=zee,b=wye,i=2874,x=0.1681357784018227,y=0.8392880686727994 -a=hat,b=hat,i=2875,x=0.8882531275158145,y=0.30970406610040124 -a=wye,b=hat,i=2876,x=0.4100612516068668,y=0.5241347164240856 -a=zee,b=wye,i=2877,x=0.7488377252084604,y=0.4727904641808244 -a=pan,b=zee,i=2878,x=0.9718428999206795,y=0.32151486300776966 -a=wye,b=zee,i=2879,x=0.3368479146214749,y=0.319508849901748 -a=pan,b=eks,i=2880,x=0.6248138883456014,y=0.4323808730206413 -a=hat,b=wye,i=2881,x=0.8870137115236287,y=0.6557420558079095 -a=wye,b=pan,i=2882,x=0.20508256902105493,y=0.24625712578663705 -a=pan,b=eks,i=2883,x=0.17469445546060924,y=0.7502077456439166 -a=hat,b=eks,i=2884,x=0.01803842185770055,y=0.7123720723174057 -a=wye,b=zee,i=2885,x=0.4079982232706686,y=0.42382421978789164 -a=eks,b=pan,i=2886,x=0.5056322667148411,y=0.4290653381431411 -a=pan,b=wye,i=2887,x=0.6338351841317565,y=0.4907041096317738 -a=zee,b=hat,i=2888,x=0.9703529871646023,y=0.517811760850648 -a=wye,b=zee,i=2889,x=0.7686343850863733,y=0.5742253808106673 -a=eks,b=zee,i=2890,x=0.18685211627025788,y=0.2370568703128223 -a=wye,b=eks,i=2891,x=0.3968173236793585,y=0.04738783308138439 -a=hat,b=pan,i=2892,x=0.5956805463320682,y=0.3609140423721199 -a=eks,b=zee,i=2893,x=0.5531039940725316,y=0.7306512817266388 -a=pan,b=pan,i=2894,x=0.8634113930447151,y=0.042975650168931456 -a=zee,b=eks,i=2895,x=0.9753708467911276,y=0.615940530686146 -a=zee,b=wye,i=2896,x=0.7277583590103486,y=0.49504307091898514 -a=hat,b=zee,i=2897,x=0.5678455159032189,y=0.7910090421492175 -a=pan,b=zee,i=2898,x=0.23271930748884184,y=0.4088902304553087 -a=pan,b=pan,i=2899,x=0.15868622973775615,y=0.9693856805728462 -a=hat,b=wye,i=2900,x=0.9619050081633596,y=0.7954950376163313 -a=zee,b=zee,i=2901,x=0.9156042982679851,y=0.46085055630239913 -a=hat,b=pan,i=2902,x=0.2080952766035833,y=0.9323723777621576 -a=pan,b=eks,i=2903,x=0.34600684567011875,y=0.2803937160495198 -a=zee,b=eks,i=2904,x=0.5195992086409938,y=0.57773770500564 -a=pan,b=hat,i=2905,x=0.004044853443978869,y=0.5461411566611463 -a=zee,b=eks,i=2906,x=0.8608071169231579,y=0.9846761059035525 -a=eks,b=hat,i=2907,x=0.5503089823322713,y=0.7762987168630092 -a=hat,b=hat,i=2908,x=0.06422544393476348,y=0.04831803951278302 -a=eks,b=zee,i=2909,x=0.9735920834852287,y=0.6045980049718644 -a=pan,b=eks,i=2910,x=0.4552157780113615,y=0.45436268452495654 -a=eks,b=pan,i=2911,x=0.3540491877210178,y=0.14296150972097188 -a=zee,b=zee,i=2912,x=0.34907798271188584,y=0.6838642852489554 -a=eks,b=eks,i=2913,x=0.9528487416801219,y=0.9770139821982978 -a=zee,b=zee,i=2914,x=0.6713487756784149,y=0.6851459487246977 -a=eks,b=wye,i=2915,x=0.18003026071883055,y=0.7605790766570338 -a=eks,b=zee,i=2916,x=0.3111065625389652,y=0.4900633108457091 -a=wye,b=pan,i=2917,x=0.10226439038444546,y=0.32221570886934225 -a=eks,b=pan,i=2918,x=0.07324611102045919,y=0.5397221232035317 -a=pan,b=hat,i=2919,x=0.5539681113785856,y=0.22898580497204302 -a=hat,b=eks,i=2920,x=0.584814627427767,y=0.9854086527153794 -a=pan,b=wye,i=2921,x=0.8092163085387806,y=0.5552811725641776 -a=hat,b=eks,i=2922,x=0.38004354197524004,y=0.9564525660110145 -a=wye,b=zee,i=2923,x=0.5170783036546709,y=0.7221456579996477 -a=wye,b=zee,i=2924,x=0.6270174635047546,y=0.23008678243789993 -a=eks,b=eks,i=2925,x=0.7696289189244249,y=0.057396523424096735 -a=zee,b=pan,i=2926,x=0.5318019616386042,y=0.9627343736200256 -a=wye,b=wye,i=2927,x=0.2329842191757341,y=0.7858658681445121 -a=eks,b=zee,i=2928,x=0.6133201827668029,y=0.49769995246446974 -a=hat,b=wye,i=2929,x=0.3314067590262917,y=0.2089161550583003 -a=pan,b=hat,i=2930,x=0.0946626417566162,y=0.7642456152582329 -a=zee,b=wye,i=2931,x=0.4294178052742412,y=0.001833098567169067 -a=zee,b=eks,i=2932,x=0.27878008616849204,y=0.862578455284283 -a=hat,b=wye,i=2933,x=0.4977072740481646,y=0.6875844573519313 -a=hat,b=eks,i=2934,x=0.06412360974253373,y=0.22600333579859744 -a=pan,b=hat,i=2935,x=0.8626379833482911,y=0.9150292252328203 -a=zee,b=wye,i=2936,x=0.5768883618530124,y=0.918139479854031 -a=wye,b=pan,i=2937,x=0.5377017444604313,y=0.6977594925111669 -a=pan,b=hat,i=2938,x=0.2765222912827068,y=0.20398898222008643 -a=wye,b=pan,i=2939,x=0.15430209185442478,y=0.3054947262512059 -a=zee,b=zee,i=2940,x=0.33908084985171905,y=0.3559785704920787 -a=wye,b=eks,i=2941,x=0.888622878020096,y=0.9305395559526985 -a=pan,b=hat,i=2942,x=0.8426210638730054,y=0.4910437389080752 -a=eks,b=wye,i=2943,x=0.43116472402260675,y=0.5431912750926549 -a=pan,b=pan,i=2944,x=0.22818877662838155,y=0.08013191447933687 -a=hat,b=hat,i=2945,x=0.855770419141142,y=0.9504972075792718 -a=wye,b=wye,i=2946,x=0.7063288975843842,y=0.14617579736608532 -a=hat,b=pan,i=2947,x=0.4735373969736173,y=0.6728372575825865 -a=zee,b=eks,i=2948,x=0.027656885408126497,y=0.8228770381611789 -a=pan,b=zee,i=2949,x=0.9950626279412539,y=0.3439388785004105 -a=pan,b=eks,i=2950,x=0.3557454554545477,y=0.35596931491049777 -a=zee,b=pan,i=2951,x=0.45736186455134964,y=0.8552078753422031 -a=pan,b=pan,i=2952,x=0.6956146036887194,y=0.7094299324737594 -a=hat,b=eks,i=2953,x=0.6683768178930775,y=0.25260524697474684 -a=zee,b=zee,i=2954,x=0.7139612884395727,y=0.521259999124225 -a=hat,b=hat,i=2955,x=0.5751429586126809,y=0.17785127736470563 -a=pan,b=pan,i=2956,x=0.17229422895082336,y=0.24883239435188065 -a=pan,b=hat,i=2957,x=0.14582342165786877,y=0.4356307792657701 -a=zee,b=eks,i=2958,x=0.9798520574677635,y=0.42174871239678 -a=hat,b=eks,i=2959,x=0.8069448445065791,y=0.7001343626890119 -a=pan,b=hat,i=2960,x=0.3756435277345719,y=0.047826156911501605 -a=eks,b=pan,i=2961,x=0.8176993405474695,y=0.995125161400413 -a=pan,b=pan,i=2962,x=0.6998988727502398,y=0.4001842416106014 -a=eks,b=pan,i=2963,x=0.11173104822679536,y=0.6370518407136563 -a=hat,b=wye,i=2964,x=0.9298169180566062,y=0.09131710178593277 -a=pan,b=zee,i=2965,x=0.4596689215584,y=0.6112438501475592 -a=wye,b=eks,i=2966,x=0.2641518333282219,y=0.38955465518639776 -a=zee,b=zee,i=2967,x=0.42822201314164976,y=0.006074939297309734 -a=eks,b=eks,i=2968,x=0.20950457390651211,y=0.07888932379405189 -a=wye,b=zee,i=2969,x=0.289378401347387,y=0.7440165584936792 -a=zee,b=pan,i=2970,x=0.2731397114360453,y=0.8759259221000683 -a=hat,b=eks,i=2971,x=0.8266785429565111,y=0.897325116301253 -a=pan,b=hat,i=2972,x=0.7032052034018701,y=0.2009782870263226 -a=hat,b=wye,i=2973,x=0.19266544419630705,y=0.5730436792504735 -a=pan,b=wye,i=2974,x=0.20451527019757088,y=0.0206184692976914 -a=wye,b=pan,i=2975,x=0.51006790151616,y=0.586042056906746 -a=pan,b=zee,i=2976,x=0.8782971392557426,y=0.7428023579415594 -a=wye,b=hat,i=2977,x=0.9504447063856765,y=0.94067852216513 -a=zee,b=hat,i=2978,x=0.33851596868477396,y=0.8334798475916935 -a=wye,b=hat,i=2979,x=0.3014946499505823,y=0.3166621276039525 -a=zee,b=zee,i=2980,x=0.8838963894635692,y=0.8052149644100633 -a=wye,b=zee,i=2981,x=0.5154924055050366,y=0.7978166707046667 -a=wye,b=eks,i=2982,x=0.613351743297237,y=0.8395323005164117 -a=zee,b=eks,i=2983,x=0.48954358421735966,y=0.9354933367243893 -a=zee,b=eks,i=2984,x=0.6070104477111674,y=0.42140737208696954 -a=hat,b=eks,i=2985,x=0.4613625094242657,y=0.9834443486684832 -a=hat,b=hat,i=2986,x=0.012529011658969247,y=0.19751371734088574 -a=hat,b=hat,i=2987,x=0.6395639802554064,y=0.2647659207339501 -a=wye,b=eks,i=2988,x=0.8289886576552059,y=0.9130379115658384 -a=zee,b=eks,i=2989,x=0.6115566437731396,y=0.654382371446181 -a=eks,b=eks,i=2990,x=0.9192312982792387,y=0.933633690100049 -a=eks,b=hat,i=2991,x=0.17088819954927414,y=0.1940915669377936 -a=zee,b=eks,i=2992,x=0.7975067562633096,y=0.7188787477650647 -a=wye,b=hat,i=2993,x=0.7386984969630342,y=0.5918321915044837 -a=hat,b=pan,i=2994,x=0.6175875126511366,y=0.5310338441204902 -a=zee,b=wye,i=2995,x=0.1553956256476441,y=0.27030029752780416 -a=wye,b=pan,i=2996,x=0.7517640622761323,y=0.48287590582310524 -a=eks,b=pan,i=2997,x=0.7960098234515162,y=0.9293203088509989 -a=wye,b=wye,i=2998,x=0.2259174651286836,y=0.5554793712549178 -a=zee,b=pan,i=2999,x=0.19942029200045563,y=0.09337986668927678 -a=pan,b=hat,i=3000,x=0.7814546932332067,y=0.6000946585621107 -a=eks,b=eks,i=3001,x=0.5998159531946954,y=0.7729581156588532 -a=hat,b=wye,i=3002,x=0.8285272249030134,y=0.9302564445098462 -a=eks,b=zee,i=3003,x=0.32175750111047774,y=0.9174648845846595 -a=pan,b=hat,i=3004,x=0.6936167302032076,y=0.34099561246852717 -a=wye,b=hat,i=3005,x=0.05536700717456822,y=0.10240541011411275 -a=wye,b=pan,i=3006,x=0.4707778178190908,y=0.9739982771022873 -a=eks,b=eks,i=3007,x=0.33350360416191926,y=0.2321416996453538 -a=hat,b=wye,i=3008,x=0.793700582315604,y=0.7819730529107373 -a=wye,b=zee,i=3009,x=0.8588342479923059,y=0.6774442006552894 -a=wye,b=wye,i=3010,x=0.7683834748330075,y=0.8315497206524393 -a=wye,b=zee,i=3011,x=0.4808351970354847,y=0.4758472571744147 -a=pan,b=hat,i=3012,x=0.3219915061675801,y=0.5309453409773968 -a=zee,b=pan,i=3013,x=0.8669507229743478,y=0.9303002206266048 -a=zee,b=pan,i=3014,x=0.6036472794089942,y=0.5392590440608642 -a=zee,b=wye,i=3015,x=0.44076973462262803,y=0.22601425557115284 -a=eks,b=eks,i=3016,x=0.14517527208436098,y=0.4422293378481955 -a=eks,b=eks,i=3017,x=0.8306135722899411,y=0.10636363353069911 -a=hat,b=hat,i=3018,x=0.46054396234881867,y=0.3731307386931515 -a=hat,b=wye,i=3019,x=0.7451272273092002,y=0.9191708709874246 -a=eks,b=wye,i=3020,x=0.36662020525022576,y=0.562402663612683 -a=pan,b=eks,i=3021,x=0.6322320887182494,y=0.37724024424135094 -a=wye,b=pan,i=3022,x=0.7585013008000357,y=0.24891818506988306 -a=pan,b=eks,i=3023,x=0.7972083825965124,y=0.6785915910266607 -a=wye,b=pan,i=3024,x=0.2264089359117355,y=0.02834029309178865 -a=zee,b=wye,i=3025,x=0.20048730201468612,y=0.22503692249617124 -a=zee,b=wye,i=3026,x=0.620337023862303,y=0.8479919985880766 -a=eks,b=hat,i=3027,x=0.4902155165931996,y=0.34683593338631313 -a=zee,b=pan,i=3028,x=0.4877814673013795,y=0.6540470265442844 -a=zee,b=eks,i=3029,x=0.11413363994060732,y=0.18491037637118812 -a=pan,b=pan,i=3030,x=0.05555019543717121,y=0.25564439988112275 -a=zee,b=pan,i=3031,x=0.41930991083452396,y=0.9053752256549477 -a=wye,b=zee,i=3032,x=0.6829080864945356,y=0.2589038995740719 -a=zee,b=hat,i=3033,x=0.1945237174643939,y=0.04785693318973694 -a=eks,b=hat,i=3034,x=0.777291960919939,y=0.13986709661108743 -a=zee,b=zee,i=3035,x=0.22350085923447272,y=0.6932534345647985 -a=pan,b=eks,i=3036,x=0.6669439868955551,y=0.5083766717543267 -a=pan,b=zee,i=3037,x=0.4601123673241928,y=0.589035207964983 -a=zee,b=wye,i=3038,x=0.9846294915268529,y=0.7245527090730468 -a=wye,b=eks,i=3039,x=0.17248806811657325,y=0.3766117373894895 -a=zee,b=hat,i=3040,x=0.09621613036773924,y=0.09274768655857912 -a=eks,b=eks,i=3041,x=0.5351382501931934,y=0.12235949381541733 -a=pan,b=zee,i=3042,x=0.7822379718483918,y=0.3278369973742308 -a=hat,b=wye,i=3043,x=0.03791889192037379,y=0.3879285406506343 -a=wye,b=wye,i=3044,x=0.008609845384408454,y=0.6630442142382447 -a=eks,b=eks,i=3045,x=0.8779655290898389,y=0.9276702739930572 -a=hat,b=hat,i=3046,x=0.960016973419662,y=0.08732247689827766 -a=wye,b=zee,i=3047,x=0.8309049399070346,y=0.7082428624476516 -a=hat,b=pan,i=3048,x=0.3745994561931344,y=0.8417922239746083 -a=pan,b=zee,i=3049,x=0.5327270669677042,y=0.30368855674177586 -a=eks,b=wye,i=3050,x=0.8299993357777166,y=0.2238418279755512 -a=hat,b=zee,i=3051,x=0.35348860200536536,y=0.8211471760032776 -a=hat,b=hat,i=3052,x=0.022155682158138235,y=0.22804250396069936 -a=eks,b=wye,i=3053,x=0.40298772117416637,y=0.5310548635233784 -a=zee,b=hat,i=3054,x=0.8975586946419573,y=0.8371128774375303 -a=pan,b=wye,i=3055,x=0.11898366225879431,y=0.973067950910434 -a=zee,b=pan,i=3056,x=0.5580433239689949,y=0.2207032579590179 -a=hat,b=eks,i=3057,x=0.6216704870927365,y=0.5368073736943582 -a=hat,b=zee,i=3058,x=0.7143749715262198,y=0.8268686099704066 -a=pan,b=pan,i=3059,x=0.6284468013862667,y=0.9107779672871813 -a=pan,b=hat,i=3060,x=0.6279788132841725,y=0.7966531861283309 -a=hat,b=wye,i=3061,x=0.3399453078984599,y=0.9563683369526331 -a=eks,b=wye,i=3062,x=0.7538022280814409,y=0.4317566099915433 -a=pan,b=zee,i=3063,x=0.8834284343378148,y=0.8232921415981069 -a=pan,b=hat,i=3064,x=0.4713927103837089,y=0.9270600022151935 -a=wye,b=eks,i=3065,x=0.725831736511898,y=0.5497593420610962 -a=pan,b=eks,i=3066,x=0.3546378076377753,y=0.751660464737342 -a=pan,b=hat,i=3067,x=0.14912115137943105,y=0.8537419730854358 -a=hat,b=zee,i=3068,x=0.15034534971981672,y=0.5991052546814497 -a=hat,b=zee,i=3069,x=0.4210145115702397,y=0.6847329962869824 -a=zee,b=zee,i=3070,x=0.8140199067124364,y=0.40845696417778843 -a=wye,b=pan,i=3071,x=0.4419206171851453,y=0.15330946039593318 -a=zee,b=hat,i=3072,x=0.2169139656710095,y=0.024309947214042227 -a=zee,b=wye,i=3073,x=0.3204085048627119,y=0.5177596022884065 -a=hat,b=eks,i=3074,x=0.6550427877323648,y=0.571804931654245 -a=zee,b=hat,i=3075,x=0.09224547266943217,y=0.27630390686135065 -a=wye,b=hat,i=3076,x=0.142566387091713,y=0.27801610209718775 -a=zee,b=pan,i=3077,x=0.9828350031666842,y=0.2911042298547496 -a=eks,b=pan,i=3078,x=0.7520400964406814,y=0.06477631117085936 -a=eks,b=pan,i=3079,x=0.7876590569822286,y=0.08167315862021418 -a=wye,b=hat,i=3080,x=0.9121720715420508,y=0.27595593913920513 -a=hat,b=eks,i=3081,x=0.9256606535733007,y=0.6699893991173689 -a=pan,b=wye,i=3082,x=0.02986898401074356,y=0.02865740061148525 -a=hat,b=pan,i=3083,x=0.43255930345398574,y=0.16451673283391233 -a=zee,b=wye,i=3084,x=0.761217263172412,y=0.38734953067609035 -a=zee,b=pan,i=3085,x=0.9640093000659047,y=0.025667634889210977 -a=zee,b=zee,i=3086,x=0.6070527044301867,y=0.36774684626978793 -a=hat,b=eks,i=3087,x=0.8008471329449127,y=0.4950773666671012 -a=eks,b=eks,i=3088,x=0.42383094655044284,y=0.3113550671070515 -a=pan,b=zee,i=3089,x=0.505503302798009,y=0.3205385386369711 -a=eks,b=pan,i=3090,x=0.45506560432905374,y=0.48045443192943516 -a=pan,b=wye,i=3091,x=0.7238244246263034,y=0.2314305015321535 -a=pan,b=hat,i=3092,x=0.2820421299406517,y=0.6948986244320373 -a=eks,b=wye,i=3093,x=0.6296930505212618,y=0.28305081013586286 -a=eks,b=hat,i=3094,x=0.9895960932461209,y=0.48997629742606663 -a=zee,b=zee,i=3095,x=0.5250712031905327,y=0.25343374690524134 -a=pan,b=zee,i=3096,x=0.85788069900133,y=0.5286390892779154 -a=hat,b=hat,i=3097,x=0.8481737493253426,y=0.22795592498176165 -a=zee,b=hat,i=3098,x=0.8134078580345757,y=0.04760505233880952 -a=zee,b=eks,i=3099,x=0.13183545798325502,y=0.7832803595814398 -a=eks,b=hat,i=3100,x=0.07108443716756485,y=0.31816018481405606 -a=pan,b=hat,i=3101,x=0.4069137599331083,y=0.9819670340442527 -a=hat,b=zee,i=3102,x=0.3343254952473229,y=0.035494955233627556 -a=zee,b=eks,i=3103,x=0.23523417159414106,y=0.98949954046695 -a=hat,b=wye,i=3104,x=0.3204490612720853,y=0.0691818430184431 -a=wye,b=hat,i=3105,x=0.9472477355051101,y=0.6702789389942152 -a=eks,b=hat,i=3106,x=0.178408829993969,y=0.47163529118192904 -a=wye,b=pan,i=3107,x=0.2923687400336503,y=0.5988171487852212 -a=wye,b=wye,i=3108,x=0.0967008571691299,y=0.5910810037087718 -a=wye,b=hat,i=3109,x=0.183095401433091,y=0.5893121732700413 -a=wye,b=pan,i=3110,x=0.8967101456216812,y=0.8085016458992474 -a=eks,b=wye,i=3111,x=0.9706322412385915,y=0.1385826306820812 -a=zee,b=eks,i=3112,x=0.4493727221740449,y=0.16704994503241388 -a=pan,b=pan,i=3113,x=0.7927985055919656,y=0.9023056637507897 -a=hat,b=pan,i=3114,x=0.2690618409790604,y=0.9750006243924199 -a=eks,b=zee,i=3115,x=0.8122516823974709,y=0.034777149921719985 -a=zee,b=wye,i=3116,x=0.8411583744381673,y=0.3367223940453469 -a=eks,b=hat,i=3117,x=0.6278279883921511,y=0.6783776757536581 -a=wye,b=pan,i=3118,x=0.0780608220831499,y=0.34219170347854155 -a=pan,b=hat,i=3119,x=0.0773284361282679,y=0.8087620482239243 -a=pan,b=zee,i=3120,x=0.6479059739692804,y=0.4847407102135154 -a=hat,b=pan,i=3121,x=0.44037371230003286,y=0.6579475199919346 -a=zee,b=zee,i=3122,x=0.5294122704675105,y=0.6857110786673584 -a=zee,b=pan,i=3123,x=0.4772167563026266,y=0.8953319261849312 -a=eks,b=pan,i=3124,x=0.1911839922513059,y=0.16422636870934193 -a=eks,b=eks,i=3125,x=0.34087831336678864,y=0.5699628829691863 -a=zee,b=eks,i=3126,x=0.2514477009793492,y=0.2498314026061056 -a=pan,b=zee,i=3127,x=0.5132442039074944,y=0.07963430048086384 -a=wye,b=wye,i=3128,x=0.8001592917309861,y=0.2595871624611582 -a=zee,b=zee,i=3129,x=0.027975828338240083,y=0.46442407872411695 -a=eks,b=eks,i=3130,x=0.2455308797278265,y=0.13309025352554837 -a=hat,b=wye,i=3131,x=0.4803964481769877,y=0.5234608286996335 -a=pan,b=eks,i=3132,x=0.7271701616492765,y=0.5650626367615349 -a=pan,b=wye,i=3133,x=0.23651873567883164,y=0.3764128593161674 -a=hat,b=eks,i=3134,x=0.9970634534653143,y=0.8349282777208548 -a=zee,b=zee,i=3135,x=0.34594612609624187,y=0.22911649635660625 -a=eks,b=eks,i=3136,x=0.7717959001675492,y=0.8076412924980277 -a=eks,b=pan,i=3137,x=0.9536337598657055,y=0.010853472417537202 -a=hat,b=zee,i=3138,x=0.27317174947779554,y=0.646988499341493 -a=zee,b=wye,i=3139,x=0.5684780382451567,y=0.5720874081361975 -a=wye,b=zee,i=3140,x=0.366288776550753,y=0.04378768748862749 -a=eks,b=eks,i=3141,x=0.07079750623034164,y=0.6704842466344859 -a=wye,b=eks,i=3142,x=0.05521456504163247,y=0.9500745301432092 -a=pan,b=eks,i=3143,x=0.9750373739856155,y=0.26053373356331044 -a=pan,b=eks,i=3144,x=0.5530175425021646,y=0.8944089100243684 -a=zee,b=wye,i=3145,x=0.6844032050501776,y=0.7132658565772104 -a=pan,b=pan,i=3146,x=0.9710413684746768,y=0.47971725236580287 -a=hat,b=hat,i=3147,x=0.0053700807986794,y=0.9348161701107937 -a=hat,b=pan,i=3148,x=0.007135675731816615,y=0.26790355487815287 -a=wye,b=hat,i=3149,x=0.3564530503749801,y=0.8151097852673919 -a=eks,b=hat,i=3150,x=0.5356404368957323,y=0.5401388412379213 -a=eks,b=pan,i=3151,x=0.0677212385434749,y=0.4111467324640289 -a=hat,b=wye,i=3152,x=0.3304026703418458,y=0.06256059204934794 -a=zee,b=zee,i=3153,x=0.8571384195554904,y=0.07978949404055691 -a=pan,b=wye,i=3154,x=0.16108434266645066,y=0.4223970209540501 -a=hat,b=pan,i=3155,x=0.2149573485418389,y=0.8001616345217611 -a=eks,b=zee,i=3156,x=0.5903395185451377,y=0.6284941637547498 -a=eks,b=eks,i=3157,x=0.005620302559396273,y=0.5908603311050712 -a=hat,b=wye,i=3158,x=0.4946858056236574,y=0.6718815240562283 -a=hat,b=eks,i=3159,x=0.3772290185802739,y=0.7716546902601435 -a=pan,b=hat,i=3160,x=0.4338772208506313,y=0.9209566304134479 -a=zee,b=eks,i=3161,x=0.16149623520591205,y=0.8191827690376345 -a=pan,b=pan,i=3162,x=0.2443000912024087,y=0.8277963236917038 -a=pan,b=pan,i=3163,x=0.5737538909065584,y=0.3575809203203234 -a=eks,b=hat,i=3164,x=0.1678243487522464,y=0.1296504375686386 -a=pan,b=hat,i=3165,x=0.7163182383385346,y=0.1300805568939386 -a=wye,b=pan,i=3166,x=0.2735080310434773,y=0.6786442937707285 -a=pan,b=eks,i=3167,x=0.48168869036370665,y=0.8968310574568457 -a=zee,b=zee,i=3168,x=0.3961829207208839,y=0.2622983994021634 -a=eks,b=wye,i=3169,x=0.2536595801738487,y=0.08261588685057286 -a=zee,b=hat,i=3170,x=0.7316564704807246,y=0.30372246853485163 -a=zee,b=zee,i=3171,x=0.27819614904389,y=0.11787924109496262 -a=zee,b=wye,i=3172,x=0.9313276309501597,y=0.06784065184241639 -a=pan,b=zee,i=3173,x=0.9635998480283486,y=0.12292283146783456 -a=eks,b=wye,i=3174,x=0.2566078750567745,y=0.05360968786999365 -a=pan,b=eks,i=3175,x=0.9685323733434764,y=0.1278804691222305 -a=hat,b=pan,i=3176,x=0.776656326879061,y=0.4278875482927529 -a=wye,b=pan,i=3177,x=0.6848262739198221,y=0.5321892371672183 -a=wye,b=wye,i=3178,x=0.9845151630820034,y=0.6080801511979752 -a=pan,b=zee,i=3179,x=0.6442678944579725,y=0.32523273097572414 -a=hat,b=eks,i=3180,x=0.23662417282509318,y=0.6499193149885536 -a=zee,b=pan,i=3181,x=0.12870746190802307,y=0.21635539491335465 -a=eks,b=hat,i=3182,x=0.27201825487678566,y=0.9413561927236772 -a=pan,b=hat,i=3183,x=0.8541608865089346,y=0.4366080716736369 -a=hat,b=zee,i=3184,x=0.40026444936770444,y=0.8965715190797674 -a=hat,b=zee,i=3185,x=0.9325030093530197,y=0.040633192110803185 -a=wye,b=hat,i=3186,x=0.31825681489643076,y=0.3867222210818564 -a=pan,b=hat,i=3187,x=0.7581463326564405,y=0.18210426293229232 -a=eks,b=eks,i=3188,x=0.13550843210847796,y=0.20870138759868107 -a=pan,b=hat,i=3189,x=0.026314019590705673,y=0.18939923462316988 -a=pan,b=zee,i=3190,x=0.0946195302667141,y=0.9170310729203291 -a=wye,b=zee,i=3191,x=0.2541806115835422,y=0.7506597466069973 -a=pan,b=wye,i=3192,x=0.7448507872358296,y=0.9175983360847946 -a=pan,b=zee,i=3193,x=0.3376000211106229,y=0.7592946456540783 -a=wye,b=pan,i=3194,x=0.6242009188843649,y=0.1437894916755703 -a=wye,b=hat,i=3195,x=0.6601677176592059,y=0.014754580715863108 -a=hat,b=wye,i=3196,x=0.6843473825379831,y=0.7390543536399969 -a=hat,b=zee,i=3197,x=0.48954739752340115,y=0.7181499788655996 -a=zee,b=hat,i=3198,x=0.4197184822020955,y=0.9015807728046735 -a=wye,b=hat,i=3199,x=0.5950661155016866,y=0.7876820843797742 -a=hat,b=eks,i=3200,x=0.6465062834343134,y=0.5218982684290329 -a=zee,b=hat,i=3201,x=0.060837643441948086,y=0.06449850438005456 -a=hat,b=pan,i=3202,x=0.3172017484222194,y=0.05112537969570785 -a=pan,b=hat,i=3203,x=0.11472288877111181,y=0.278764852494509 -a=pan,b=zee,i=3204,x=0.9047148747559682,y=0.04965210128934949 -a=zee,b=pan,i=3205,x=0.6892430196905853,y=0.3657149811550592 -a=pan,b=pan,i=3206,x=0.6248657938226793,y=0.8681563350185779 -a=pan,b=eks,i=3207,x=0.6881257122613184,y=0.804141641741672 -a=hat,b=pan,i=3208,x=0.9922055997300119,y=0.9648120708367885 -a=hat,b=pan,i=3209,x=0.3619120930679631,y=0.9853160311413681 -a=eks,b=eks,i=3210,x=0.45293528719314957,y=0.17947685156612458 -a=hat,b=hat,i=3211,x=0.5613170559787437,y=0.5352246021671387 -a=zee,b=zee,i=3212,x=0.7964737415528816,y=0.5558173183901908 -a=wye,b=eks,i=3213,x=0.8883434034808566,y=0.4617422375169109 -a=hat,b=eks,i=3214,x=0.3321384410187088,y=0.7317250838743725 -a=pan,b=pan,i=3215,x=0.1413377562828586,y=0.44678231607159036 -a=eks,b=wye,i=3216,x=0.29373386203032203,y=0.4631723587487283 -a=eks,b=wye,i=3217,x=0.34111783868014145,y=0.5839315442691357 -a=eks,b=eks,i=3218,x=0.6880428093376797,y=0.9103207963454706 -a=hat,b=pan,i=3219,x=0.7474182668789385,y=0.5590391934991645 -a=eks,b=pan,i=3220,x=0.9532855829386742,y=0.8800478978800655 -a=zee,b=eks,i=3221,x=0.767029184744309,y=0.2596274975760916 -a=zee,b=zee,i=3222,x=0.5138831052561117,y=0.47989679105419414 -a=pan,b=eks,i=3223,x=0.009907068182697043,y=0.7478047711855503 -a=eks,b=wye,i=3224,x=0.8943590875125406,y=0.6208131688490002 -a=eks,b=hat,i=3225,x=0.4838255169683877,y=0.2140927440076752 -a=pan,b=hat,i=3226,x=0.35642723142223887,y=0.9711625405713799 -a=wye,b=pan,i=3227,x=0.7070990060513,y=0.5452513596675552 -a=eks,b=hat,i=3228,x=0.9463721381595557,y=0.5282145729291476 -a=pan,b=pan,i=3229,x=0.9242949068835605,y=0.6700494745496223 -a=hat,b=eks,i=3230,x=0.0584193890994712,y=0.4718114656898049 -a=wye,b=wye,i=3231,x=0.030244834940777232,y=0.6087749649541813 -a=hat,b=wye,i=3232,x=0.34678472033142016,y=0.4446414363995591 -a=pan,b=eks,i=3233,x=0.5471314567981557,y=0.2169784309597168 -a=pan,b=hat,i=3234,x=0.7648908069032151,y=0.03159384287802769 -a=zee,b=pan,i=3235,x=0.013980830949869794,y=0.2508908461970313 -a=hat,b=wye,i=3236,x=0.6969519489568067,y=0.6395027023616561 -a=zee,b=wye,i=3237,x=0.8234005688200698,y=0.3631748220150387 -a=zee,b=eks,i=3238,x=0.012602991921698004,y=0.22634995064837027 -a=hat,b=pan,i=3239,x=0.02254180433325681,y=0.7359441973013121 -a=pan,b=zee,i=3240,x=0.5877493357317612,y=0.548066125189975 -a=zee,b=pan,i=3241,x=0.30421967413326567,y=0.5234487663288749 -a=pan,b=wye,i=3242,x=0.9611019977003785,y=0.681330883403185 -a=zee,b=hat,i=3243,x=0.17998018908462488,y=0.2200339352675208 -a=hat,b=pan,i=3244,x=0.5444834083087221,y=0.5306965663976729 -a=pan,b=zee,i=3245,x=0.7759221188096915,y=0.6025062049702136 -a=eks,b=wye,i=3246,x=0.9681111792743258,y=0.45013761820073994 -a=zee,b=hat,i=3247,x=0.7005880770412263,y=0.9156129778807589 -a=hat,b=wye,i=3248,x=0.15641983171365736,y=0.5385071761397577 -a=eks,b=pan,i=3249,x=0.2874972552716878,y=0.25110619048650307 -a=pan,b=eks,i=3250,x=0.2829120767349058,y=0.09835801807841182 -a=zee,b=wye,i=3251,x=0.4637348926957112,y=0.542576911836454 -a=pan,b=hat,i=3252,x=0.9877179689365846,y=0.31240448781527486 -a=eks,b=wye,i=3253,x=0.4072943512790075,y=0.6799266447871808 -a=pan,b=pan,i=3254,x=0.350457431460238,y=0.4302184547620955 -a=hat,b=eks,i=3255,x=0.23726834440158573,y=0.5292284240941152 -a=pan,b=eks,i=3256,x=0.7135080861062042,y=0.5712799934745325 -a=zee,b=eks,i=3257,x=0.20289239990952312,y=0.362603885203753 -a=zee,b=zee,i=3258,x=0.8218885195808542,y=0.44721748770524405 -a=wye,b=hat,i=3259,x=0.08107176449903364,y=0.29319048909041645 -a=hat,b=zee,i=3260,x=0.8800473905727186,y=0.7552020057189927 -a=pan,b=wye,i=3261,x=0.41821226279651147,y=0.8850253360947092 -a=zee,b=hat,i=3262,x=0.32568444506228,y=0.6065878837570879 -a=hat,b=hat,i=3263,x=0.5430211603262051,y=0.022421059979423008 -a=eks,b=pan,i=3264,x=0.829909329738617,y=0.9788813279683912 -a=wye,b=pan,i=3265,x=0.4953326302591503,y=0.864833969133287 -a=pan,b=zee,i=3266,x=0.3412837479312676,y=0.8486794212655834 -a=eks,b=hat,i=3267,x=0.39932762162444313,y=0.953150614321362 -a=pan,b=pan,i=3268,x=0.001904789877841595,y=0.2107702989499245 -a=zee,b=pan,i=3269,x=0.5531033835416052,y=0.3659293527971088 -a=wye,b=hat,i=3270,x=0.3399739634399507,y=0.49965908692258354 -a=eks,b=hat,i=3271,x=0.11643573302292032,y=0.35717256575069845 -a=zee,b=eks,i=3272,x=0.8616836237809823,y=0.2555712577320536 -a=eks,b=hat,i=3273,x=0.8348848872325367,y=0.48966840491973995 -a=eks,b=pan,i=3274,x=0.25513593682652125,y=0.39337835968432966 -a=zee,b=pan,i=3275,x=0.3232344110781661,y=0.47637792160425796 -a=zee,b=pan,i=3276,x=0.5834425639683404,y=0.23108217202798198 -a=zee,b=zee,i=3277,x=0.9181379020242023,y=0.40705334764249457 -a=eks,b=pan,i=3278,x=0.5097190157077268,y=0.04899861849664533 -a=wye,b=hat,i=3279,x=0.9157221686398738,y=0.5671280092243552 -a=pan,b=eks,i=3280,x=0.9442806463291782,y=0.9335857464104109 -a=eks,b=hat,i=3281,x=0.5361984419807034,y=0.15587235520500609 -a=pan,b=zee,i=3282,x=0.86450976120493,y=0.8170786827110009 -a=hat,b=wye,i=3283,x=0.5057733411836555,y=0.04923731532668796 -a=pan,b=hat,i=3284,x=0.414038070322006,y=0.4761906775736686 -a=pan,b=hat,i=3285,x=0.48063067035883633,y=0.4966350007922782 -a=wye,b=pan,i=3286,x=0.7217297767808066,y=0.9865570013659641 -a=zee,b=wye,i=3287,x=0.049406279942573406,y=0.4381024486414813 -a=eks,b=eks,i=3288,x=0.8590013149268277,y=0.936500197803695 -a=eks,b=hat,i=3289,x=0.9568499040898423,y=0.3653704666883357 -a=zee,b=eks,i=3290,x=0.40120382485623196,y=0.21124233932924863 -a=eks,b=zee,i=3291,x=0.9770383012651398,y=0.2432263238178496 -a=wye,b=zee,i=3292,x=0.9521492688907935,y=0.6087321738215051 -a=hat,b=hat,i=3293,x=0.47067984267026386,y=0.2670742530232063 -a=pan,b=zee,i=3294,x=0.6918379159173412,y=0.31495560827632296 -a=eks,b=zee,i=3295,x=0.4372879409717054,y=0.6053789536304973 -a=eks,b=zee,i=3296,x=0.21986184005655396,y=0.3247997718602733 -a=hat,b=pan,i=3297,x=0.9729466791999957,y=0.5771820308689207 -a=pan,b=hat,i=3298,x=0.7522212873607641,y=0.17501638801193387 -a=wye,b=zee,i=3299,x=0.06852018338234533,y=0.5000015791152141 -a=wye,b=wye,i=3300,x=0.6831118314601023,y=0.5728211330223406 -a=eks,b=eks,i=3301,x=0.8886973140588106,y=0.7986263263709766 -a=hat,b=zee,i=3302,x=0.36319331709268987,y=0.87884157727253 -a=pan,b=pan,i=3303,x=0.0916484218320428,y=0.6140281532216169 -a=wye,b=hat,i=3304,x=0.4319885161986502,y=0.11333627655422829 -a=hat,b=pan,i=3305,x=0.20275914918267568,y=0.3188057450261915 -a=eks,b=pan,i=3306,x=0.7128512847755833,y=0.8374752272564904 -a=zee,b=hat,i=3307,x=0.12238507918350494,y=0.9886825082749487 -a=zee,b=zee,i=3308,x=0.24501938424108383,y=0.2620366749016796 -a=eks,b=eks,i=3309,x=0.6736625417797468,y=0.1759055405630674 -a=zee,b=wye,i=3310,x=0.7640238780203037,y=0.5545749802574607 -a=zee,b=hat,i=3311,x=0.7391015948965168,y=0.7783105639991896 -a=wye,b=pan,i=3312,x=0.9912133558674248,y=0.792510678216663 -a=zee,b=wye,i=3313,x=0.12157734657040631,y=0.5335120372360502 -a=pan,b=pan,i=3314,x=0.6554607159333067,y=0.9770255281674824 -a=pan,b=wye,i=3315,x=0.1108498180405314,y=0.9467953471924881 -a=eks,b=hat,i=3316,x=0.5888965480684432,y=0.045574928515849766 -a=hat,b=zee,i=3317,x=0.8991863104086707,y=0.8351323082787309 -a=wye,b=zee,i=3318,x=0.8368882450019627,y=0.9558667451117976 -a=pan,b=eks,i=3319,x=0.34803167097398835,y=0.6217481359344504 -a=hat,b=wye,i=3320,x=0.5049375453273435,y=0.07971841779344901 -a=eks,b=eks,i=3321,x=0.36879345677908304,y=0.7533458977670897 -a=pan,b=zee,i=3322,x=0.4071079549678054,y=0.5216483192298931 -a=zee,b=wye,i=3323,x=0.956745510209848,y=0.7277085431442248 -a=hat,b=eks,i=3324,x=0.6530059095611962,y=0.4110782521026085 -a=pan,b=pan,i=3325,x=0.3674804417277773,y=0.9040679087190475 -a=hat,b=eks,i=3326,x=0.07009249966420861,y=0.25922706016534536 -a=zee,b=eks,i=3327,x=0.14046308364385085,y=0.059686547583128746 -a=pan,b=hat,i=3328,x=0.9232634224803832,y=0.02622931272244866 -a=eks,b=hat,i=3329,x=0.5694104895719442,y=0.896791407570237 -a=eks,b=pan,i=3330,x=0.34148617036917717,y=0.868694856533039 -a=zee,b=hat,i=3331,x=0.5580004279189276,y=0.13162220092963606 -a=pan,b=wye,i=3332,x=0.32760226290506067,y=0.20546606340653295 -a=eks,b=pan,i=3333,x=0.4410927567165518,y=0.9434358777012175 -a=wye,b=pan,i=3334,x=0.3692628443912691,y=0.04456305695935858 -a=eks,b=wye,i=3335,x=0.2886377826496196,y=0.5510326222058004 -a=wye,b=pan,i=3336,x=0.0830596216722399,y=0.42130620217712367 -a=eks,b=eks,i=3337,x=0.8502898262908782,y=0.808554017252108 -a=wye,b=pan,i=3338,x=0.4258737140465607,y=0.20746386470004785 -a=zee,b=hat,i=3339,x=0.9958679007877833,y=0.03637803286845476 -a=eks,b=eks,i=3340,x=0.8772219678712854,y=0.6738364551822755 -a=zee,b=wye,i=3341,x=0.8674680931450676,y=0.08495173932166111 -a=hat,b=wye,i=3342,x=0.039731587832649184,y=0.7153198737893809 -a=zee,b=wye,i=3343,x=0.28331195090016237,y=0.3609364099093614 -a=wye,b=pan,i=3344,x=0.5916979456033509,y=0.4261672292650668 -a=zee,b=hat,i=3345,x=0.3236007641260298,y=0.31877697899629276 -a=zee,b=wye,i=3346,x=0.0631478998746885,y=0.6649602440405321 -a=wye,b=pan,i=3347,x=0.61444979062327,y=0.13673022117181688 -a=eks,b=eks,i=3348,x=0.38993896958048435,y=0.2335429118604364 -a=pan,b=wye,i=3349,x=0.376031512913815,y=0.4929792401226455 -a=wye,b=eks,i=3350,x=0.9327767394224131,y=0.7607839483352263 -a=eks,b=wye,i=3351,x=0.18464331650677035,y=0.6120397829138642 -a=hat,b=hat,i=3352,x=0.550190920585813,y=0.7696873798459735 -a=wye,b=eks,i=3353,x=0.5877052746857248,y=0.5545585412269964 -a=pan,b=zee,i=3354,x=0.2801717488802852,y=0.17038214633612547 -a=zee,b=wye,i=3355,x=0.024194919016248595,y=0.13545067511197206 -a=wye,b=eks,i=3356,x=0.6380780240701133,y=0.9408087514008974 -a=eks,b=pan,i=3357,x=0.6623105955866089,y=0.4258008296217072 -a=eks,b=wye,i=3358,x=0.4071377938114724,y=0.7108273628344846 -a=wye,b=hat,i=3359,x=0.6347502280299748,y=0.13907882326502974 -a=wye,b=zee,i=3360,x=0.8494626745217564,y=0.023483418292297054 -a=eks,b=eks,i=3361,x=0.6555829047838948,y=0.8920276297804856 -a=hat,b=zee,i=3362,x=0.9880826407125887,y=0.11010372754824016 -a=pan,b=wye,i=3363,x=0.6526207146787799,y=0.3813540848159578 -a=eks,b=zee,i=3364,x=0.28621636247260607,y=0.5342782090242255 -a=wye,b=pan,i=3365,x=0.5700040498735991,y=0.8850660888169822 -a=hat,b=eks,i=3366,x=0.4556207889124957,y=0.07128477762040519 -a=hat,b=pan,i=3367,x=0.18923164185093178,y=0.7138172870807187 -a=pan,b=zee,i=3368,x=0.7831951158978603,y=0.3315912232116869 -a=eks,b=wye,i=3369,x=0.3991655712684341,y=0.6297930225870115 -a=eks,b=pan,i=3370,x=0.9558238449527896,y=0.27697054714540026 -a=wye,b=eks,i=3371,x=0.794226121886924,y=0.42411771070954085 -a=pan,b=hat,i=3372,x=0.43937440052467935,y=0.4563691901909951 -a=wye,b=zee,i=3373,x=0.6530552443760023,y=0.15544449101184865 -a=eks,b=wye,i=3374,x=0.8269474339710359,y=0.12072235071637616 -a=zee,b=zee,i=3375,x=0.4367949309522303,y=0.013673838744716393 -a=zee,b=eks,i=3376,x=0.5377434458282238,y=0.23314241806418468 -a=pan,b=pan,i=3377,x=0.45145970444322747,y=0.8856960898087811 -a=hat,b=wye,i=3378,x=0.012877279074692716,y=0.6068979505584087 -a=zee,b=wye,i=3379,x=0.23678623178363256,y=0.05041356234716987 -a=pan,b=hat,i=3380,x=0.9872783151204066,y=0.48841231625195825 -a=zee,b=hat,i=3381,x=0.7373174186367665,y=0.7964198412222034 -a=hat,b=wye,i=3382,x=0.4115788506813578,y=0.5970142880431725 -a=zee,b=pan,i=3383,x=0.7218790645435766,y=0.45969503904769105 -a=zee,b=wye,i=3384,x=0.16492065527363664,y=0.9315720353082685 -a=zee,b=pan,i=3385,x=0.05670367935833176,y=0.2963435909908908 -a=zee,b=eks,i=3386,x=0.6420030353862732,y=0.23114095824311187 -a=eks,b=wye,i=3387,x=0.8708836596594736,y=0.18168328151330237 -a=eks,b=eks,i=3388,x=0.711689030667817,y=0.08741327203084581 -a=wye,b=zee,i=3389,x=0.40891337260400795,y=0.9839548655687227 -a=eks,b=eks,i=3390,x=0.4329319528885155,y=0.7161120212330097 -a=wye,b=wye,i=3391,x=0.9407214715817039,y=0.16134765993593336 -a=wye,b=eks,i=3392,x=0.764135299542596,y=0.46303754738896463 -a=wye,b=zee,i=3393,x=0.9822570907790836,y=0.7299006638143403 -a=hat,b=eks,i=3394,x=0.6851390329252532,y=0.9050274462052531 -a=pan,b=zee,i=3395,x=0.7512424175943134,y=0.4059836895379698 -a=eks,b=hat,i=3396,x=0.9607050331936833,y=0.7948112675657537 -a=wye,b=zee,i=3397,x=0.05596493072960251,y=0.9435195318051948 -a=hat,b=eks,i=3398,x=0.6053108138597539,y=0.5992354123506696 -a=pan,b=eks,i=3399,x=0.048684103098098785,y=0.1633725907413952 -a=wye,b=wye,i=3400,x=0.10069663909544047,y=0.9482094389350565 -a=zee,b=wye,i=3401,x=0.12603857687396403,y=0.9644862170094224 -a=pan,b=zee,i=3402,x=0.27741250695381336,y=0.8159372840391408 -a=pan,b=hat,i=3403,x=0.7370714816662562,y=0.8697953979508419 -a=pan,b=zee,i=3404,x=0.31468021565829374,y=0.4427420339087643 -a=hat,b=pan,i=3405,x=0.8863854452798668,y=0.033442919864234644 -a=hat,b=hat,i=3406,x=0.45429743426633307,y=0.18433478859999053 -a=eks,b=wye,i=3407,x=0.9617046721194548,y=0.9093815718950851 -a=pan,b=hat,i=3408,x=0.07330408010392908,y=0.4448942751848767 -a=zee,b=eks,i=3409,x=0.3364026277159641,y=0.9868364857498738 -a=hat,b=pan,i=3410,x=0.08445928966500227,y=0.0703789054946542 -a=wye,b=eks,i=3411,x=0.34156100908061116,y=0.8010566111511997 -a=pan,b=wye,i=3412,x=0.8423508832374376,y=0.6949323092381406 -a=wye,b=wye,i=3413,x=0.040886939254273114,y=0.47897154534037656 -a=zee,b=wye,i=3414,x=0.25217276547664036,y=0.036553945399371846 -a=zee,b=pan,i=3415,x=0.5599190631540909,y=0.924868567464608 -a=zee,b=zee,i=3416,x=0.48916626975610933,y=0.5220243096247617 -a=pan,b=zee,i=3417,x=0.2837666956657495,y=0.38177621330614264 -a=hat,b=pan,i=3418,x=0.9442741844519087,y=0.3017027866540207 -a=zee,b=hat,i=3419,x=0.06600809539932284,y=0.6981900505881413 -a=zee,b=wye,i=3420,x=0.23090328234417856,y=0.2832500437007679 -a=pan,b=zee,i=3421,x=0.9466805608495066,y=0.20786286772685625 -a=wye,b=wye,i=3422,x=0.9363152201437546,y=0.28852583041792845 -a=hat,b=hat,i=3423,x=0.0844657406732815,y=0.035913466762956925 -a=pan,b=wye,i=3424,x=0.8784967044400372,y=0.604737958747047 -a=hat,b=pan,i=3425,x=0.6609492899115649,y=0.5467085754935348 -a=zee,b=hat,i=3426,x=0.075752725904918,y=0.609127836669268 -a=pan,b=hat,i=3427,x=0.8416597040795218,y=0.8525979909355791 -a=wye,b=zee,i=3428,x=0.16948281534078558,y=0.5287767961751489 -a=eks,b=pan,i=3429,x=0.6884416724548735,y=0.37076683601683813 -a=wye,b=zee,i=3430,x=0.06722038251076656,y=0.9227889532742807 -a=eks,b=wye,i=3431,x=0.09226104972636995,y=0.7254707163058396 -a=eks,b=wye,i=3432,x=0.9890932308131895,y=0.23151574428068822 -a=zee,b=zee,i=3433,x=0.8595470542087552,y=0.8498636271417952 -a=wye,b=eks,i=3434,x=0.5407110734310688,y=0.05363800054311196 -a=zee,b=eks,i=3435,x=0.0439664086678202,y=0.9140005792113355 -a=zee,b=wye,i=3436,x=0.9752652636201881,y=0.47980923190874036 -a=pan,b=eks,i=3437,x=0.025261472762689308,y=0.12799888376709667 -a=zee,b=eks,i=3438,x=0.16021119119058125,y=0.7792702864503347 -a=zee,b=hat,i=3439,x=0.6820189455688497,y=0.10951500585648855 -a=wye,b=pan,i=3440,x=0.936544606740171,y=0.03446044548668015 -a=eks,b=pan,i=3441,x=0.2537650754015236,y=0.05620296178361983 -a=hat,b=wye,i=3442,x=0.6287605552712544,y=0.33295303984892444 -a=wye,b=zee,i=3443,x=0.21494998659532738,y=0.7690234752214624 -a=pan,b=wye,i=3444,x=0.6714922124805293,y=0.4749161688649426 -a=wye,b=eks,i=3445,x=0.0550862548275467,y=0.9962657146123411 -a=zee,b=eks,i=3446,x=0.2804194256928545,y=0.23979661671683972 -a=eks,b=pan,i=3447,x=0.8785960556284188,y=0.7011073928320367 -a=eks,b=eks,i=3448,x=0.5502631585453132,y=0.11319904721842211 -a=zee,b=pan,i=3449,x=0.524308758962708,y=0.6332502139032691 -a=pan,b=pan,i=3450,x=0.8213036158322992,y=0.6456770989043784 -a=pan,b=pan,i=3451,x=0.8025436057063862,y=0.7060797186033781 -a=pan,b=zee,i=3452,x=0.5760028039744347,y=0.6132903113537639 -a=eks,b=hat,i=3453,x=0.05717780028504649,y=0.07422864049114308 -a=eks,b=hat,i=3454,x=0.9110638506299676,y=0.9591332251303966 -a=zee,b=wye,i=3455,x=0.51833979114664,y=0.6939970837947521 -a=eks,b=pan,i=3456,x=0.4252463974393268,y=0.39275828072553476 -a=eks,b=wye,i=3457,x=0.9769460675156931,y=0.8198707026075209 -a=hat,b=eks,i=3458,x=0.30514346329289554,y=0.9833267802770143 -a=pan,b=pan,i=3459,x=0.014452973503922828,y=0.755728000485021 -a=zee,b=hat,i=3460,x=0.588470670827405,y=0.6174548562216325 -a=zee,b=wye,i=3461,x=0.1990979839956707,y=0.023566934582078036 -a=wye,b=eks,i=3462,x=0.7242013186291925,y=0.47306057653207245 -a=pan,b=wye,i=3463,x=0.06717794490486906,y=0.48623828005334757 -a=pan,b=eks,i=3464,x=0.8155896300126392,y=0.5894548806723218 -a=wye,b=eks,i=3465,x=0.9422913151044523,y=0.361126352245832 -a=zee,b=wye,i=3466,x=0.209141807598481,y=0.7545695892430896 -a=hat,b=eks,i=3467,x=0.9391826144539274,y=0.9934443990210938 -a=zee,b=wye,i=3468,x=0.2358251666384058,y=0.4863498031303115 -a=pan,b=pan,i=3469,x=0.4258863723941383,y=0.2095061249114658 -a=eks,b=hat,i=3470,x=0.47997276184744964,y=0.06659122141821061 -a=wye,b=pan,i=3471,x=0.2764533988832033,y=0.3208516601140218 -a=hat,b=wye,i=3472,x=0.4069308223369382,y=0.7259811106485108 -a=pan,b=eks,i=3473,x=0.244297825943407,y=0.31169012284386755 -a=wye,b=pan,i=3474,x=0.6738217687467104,y=0.2638420139509079 -a=zee,b=wye,i=3475,x=0.8997076621651254,y=0.35716661851825715 -a=zee,b=hat,i=3476,x=0.4788250437439896,y=0.5377374198573633 -a=pan,b=hat,i=3477,x=0.6611093704674268,y=0.6687601867132502 -a=eks,b=pan,i=3478,x=0.08557950916786583,y=0.37592412501843786 -a=zee,b=pan,i=3479,x=0.8231858428238995,y=0.28514406372275236 -a=wye,b=eks,i=3480,x=0.4670447991864045,y=0.46821183232819474 -a=eks,b=wye,i=3481,x=0.0018822508391512782,y=0.4734813045472098 -a=pan,b=zee,i=3482,x=0.21972014701783804,y=0.9122864135454931 -a=zee,b=hat,i=3483,x=0.2095348234287714,y=0.9927778389609139 -a=eks,b=pan,i=3484,x=0.10029139579593083,y=0.535016375595021 -a=hat,b=hat,i=3485,x=0.36431575992404175,y=0.9966126666610623 -a=hat,b=wye,i=3486,x=0.2849558278410832,y=0.3539958226346893 -a=zee,b=hat,i=3487,x=0.866561498905371,y=0.6749719599240999 -a=zee,b=pan,i=3488,x=0.05018208235181909,y=0.3964541287147757 -a=wye,b=eks,i=3489,x=0.8077315081411627,y=0.7479997434577657 -a=zee,b=zee,i=3490,x=0.10200642169348917,y=0.31165758001404054 -a=hat,b=wye,i=3491,x=0.12886564721513227,y=0.7037939176865968 -a=eks,b=hat,i=3492,x=0.43102073349691117,y=0.5993057473020176 -a=hat,b=pan,i=3493,x=0.555202486463376,y=0.36825782870554846 -a=hat,b=hat,i=3494,x=0.9044026544451589,y=0.37279264245660304 -a=zee,b=wye,i=3495,x=0.9934345872412148,y=0.8688371909960622 -a=zee,b=eks,i=3496,x=0.12474075821856478,y=0.7664439797094331 -a=eks,b=zee,i=3497,x=0.9892124342839178,y=0.9379196159380152 -a=eks,b=hat,i=3498,x=0.6909633362296115,y=0.5517990615632886 -a=pan,b=eks,i=3499,x=0.10345255049088942,y=0.02234404876115914 -a=eks,b=eks,i=3500,x=0.3991733155276741,y=0.8199397764785649 -a=hat,b=eks,i=3501,x=0.002293403878501854,y=0.4879144111797784 -a=zee,b=zee,i=3502,x=0.5345656776152677,y=0.9046658240543963 -a=zee,b=wye,i=3503,x=0.9917665563701388,y=0.7473226514963157 -a=wye,b=hat,i=3504,x=0.5918745558045386,y=0.2286796079695561 -a=pan,b=hat,i=3505,x=0.9587176731534732,y=0.12809903557671276 -a=pan,b=eks,i=3506,x=0.3942757672769698,y=0.3445410354016084 -a=wye,b=zee,i=3507,x=0.8698234232439451,y=0.6003476393534727 -a=eks,b=hat,i=3508,x=0.6230637620114838,y=0.424076726635791 -a=hat,b=zee,i=3509,x=0.9622867726071316,y=0.1432938077777307 -a=hat,b=wye,i=3510,x=0.3386148986151456,y=0.7431914358914263 -a=eks,b=pan,i=3511,x=0.3837436116647608,y=0.8533106760534216 -a=zee,b=eks,i=3512,x=0.7150929360997113,y=0.9600218860596139 -a=hat,b=eks,i=3513,x=0.33373578693097705,y=0.5234647971537469 -a=wye,b=wye,i=3514,x=0.5856301380406596,y=0.1275528964200492 -a=zee,b=wye,i=3515,x=0.37723354796784714,y=0.9997851122732699 -a=wye,b=hat,i=3516,x=0.44369718809353986,y=0.4894205500423119 -a=wye,b=eks,i=3517,x=0.322389903088264,y=0.05702987241410096 -a=pan,b=wye,i=3518,x=0.11882480113661997,y=0.3858296816561547 -a=wye,b=zee,i=3519,x=0.7202765028894381,y=0.12574040969710987 -a=zee,b=hat,i=3520,x=0.0928487341029709,y=0.3330386484000102 -a=pan,b=pan,i=3521,x=0.22867195583127464,y=0.33603525596818895 -a=pan,b=zee,i=3522,x=0.7242093277954511,y=0.831898967676118 -a=zee,b=eks,i=3523,x=0.42001209130403205,y=0.5036656584109297 -a=pan,b=eks,i=3524,x=0.30252752965606133,y=0.24419009734033026 -a=wye,b=hat,i=3525,x=0.9824695650800549,y=0.222603495436539 -a=zee,b=wye,i=3526,x=0.04315340497837039,y=0.38068506172393646 -a=hat,b=pan,i=3527,x=0.6632440400457205,y=0.1820945385520728 -a=zee,b=wye,i=3528,x=0.7076813404535067,y=0.027521703948078957 -a=wye,b=eks,i=3529,x=0.16368069077854164,y=0.29359040780910695 -a=zee,b=wye,i=3530,x=0.217015339519548,y=0.8474352672037695 -a=wye,b=hat,i=3531,x=0.598374987624828,y=0.6802372735701074 -a=hat,b=wye,i=3532,x=0.3438213922655702,y=0.28091154307295796 -a=wye,b=zee,i=3533,x=0.2380647747461756,y=0.9297096582745085 -a=pan,b=zee,i=3534,x=0.5808212068478656,y=0.9148727191488517 -a=pan,b=wye,i=3535,x=0.7265966050847938,y=0.21414009357018593 -a=hat,b=pan,i=3536,x=0.7017454439056625,y=0.2590514800523752 -a=hat,b=eks,i=3537,x=0.23900423399657456,y=0.2588795683734507 -a=wye,b=zee,i=3538,x=0.784669987647248,y=0.6504554048913334 -a=wye,b=zee,i=3539,x=0.26623848938137373,y=0.5547651697635625 -a=pan,b=eks,i=3540,x=0.6492339089502173,y=0.6963037893628019 -a=wye,b=hat,i=3541,x=0.4456255182136123,y=0.6615870162361136 -a=hat,b=eks,i=3542,x=0.20295072778526713,y=0.7574601201974366 -a=eks,b=wye,i=3543,x=0.9795917719021048,y=0.41272909038566297 -a=pan,b=eks,i=3544,x=0.660437682897796,y=0.9976869991284935 -a=wye,b=zee,i=3545,x=0.2910302714747729,y=0.3219344480841323 -a=zee,b=wye,i=3546,x=0.6680653445050417,y=0.864596002429439 -a=pan,b=zee,i=3547,x=0.7639660507096179,y=0.6193776992233352 -a=hat,b=wye,i=3548,x=0.2983669342833217,y=0.9026909166111313 -a=eks,b=eks,i=3549,x=0.1538517544982081,y=0.5455919445696917 -a=wye,b=zee,i=3550,x=0.15207698807295011,y=0.9519397932545018 -a=eks,b=hat,i=3551,x=0.4342338573806348,y=0.6933807304285913 -a=eks,b=pan,i=3552,x=0.965663991619718,y=0.5930384036340364 -a=pan,b=pan,i=3553,x=0.3101812940186591,y=0.2727128797499023 -a=eks,b=hat,i=3554,x=0.18260657532777225,y=0.5311854832790144 -a=hat,b=eks,i=3555,x=0.3893225708373611,y=0.5611190752491995 -a=zee,b=wye,i=3556,x=0.7278766469231946,y=0.21929031459492465 -a=zee,b=eks,i=3557,x=0.8571691661862111,y=0.5461980618981016 -a=pan,b=eks,i=3558,x=0.8344799261872303,y=0.3256634336181796 -a=pan,b=zee,i=3559,x=0.06279062797134494,y=0.9004664994169836 -a=eks,b=eks,i=3560,x=0.4525336606815864,y=0.7037155484173209 -a=pan,b=hat,i=3561,x=0.19425929127106012,y=0.24083853125540766 -a=wye,b=eks,i=3562,x=0.07556315455842999,y=0.7950176869999145 -a=eks,b=eks,i=3563,x=0.11705838779214672,y=0.8232973229982639 -a=eks,b=hat,i=3564,x=0.4273089616257022,y=0.8991684257803373 -a=wye,b=zee,i=3565,x=0.0168691413650478,y=0.18821185808166463 -a=eks,b=eks,i=3566,x=0.1825897444890373,y=0.8746110728517744 -a=zee,b=pan,i=3567,x=0.8121651250250981,y=0.686457266195396 -a=hat,b=pan,i=3568,x=0.18054803232549899,y=0.8898083043065161 -a=wye,b=hat,i=3569,x=0.8089924807824601,y=0.6633779430154854 -a=hat,b=hat,i=3570,x=0.23144140451317397,y=0.756629243011781 -a=wye,b=wye,i=3571,x=0.38887372145181665,y=0.20495538006007763 -a=eks,b=pan,i=3572,x=0.35534650094834996,y=0.47884355218030206 -a=zee,b=wye,i=3573,x=0.6566568341390783,y=0.6074553589369566 -a=eks,b=eks,i=3574,x=0.6035504498536483,y=0.4034395784600332 -a=wye,b=wye,i=3575,x=0.6697828249944248,y=0.7638274219999387 -a=pan,b=zee,i=3576,x=0.35707993266640137,y=0.5998235579404124 -a=hat,b=pan,i=3577,x=0.8477996338004375,y=0.10094293678130806 -a=eks,b=eks,i=3578,x=0.47993080744275407,y=0.7674479934775376 -a=pan,b=eks,i=3579,x=0.8628339613928006,y=0.8518114551427095 -a=eks,b=wye,i=3580,x=0.06010165714354565,y=0.944192401862212 -a=zee,b=pan,i=3581,x=0.6103322948705803,y=0.26797145325571314 -a=hat,b=zee,i=3582,x=0.8139735237051052,y=0.41109841413309234 -a=eks,b=wye,i=3583,x=0.27009503691464387,y=0.34604318820252766 -a=pan,b=eks,i=3584,x=0.29901280575806055,y=0.2606367826081081 -a=eks,b=eks,i=3585,x=0.9444152014675282,y=0.08541204554484039 -a=eks,b=hat,i=3586,x=0.9746502905906368,y=0.5008159057662351 -a=eks,b=eks,i=3587,x=0.3503288922335456,y=0.8393293676314583 -a=hat,b=hat,i=3588,x=0.5428335261613996,y=0.8746507311887247 -a=eks,b=hat,i=3589,x=0.04503314762859012,y=0.4498210841109198 -a=eks,b=hat,i=3590,x=0.21099486037176274,y=0.15918964285673298 -a=pan,b=zee,i=3591,x=0.9647151077978772,y=0.21127797222603706 -a=wye,b=hat,i=3592,x=0.794447944887749,y=0.04835321965805062 -a=hat,b=pan,i=3593,x=0.8800094797708875,y=0.26888925214636394 -a=pan,b=hat,i=3594,x=0.30914801544685455,y=0.38087457746812736 -a=eks,b=zee,i=3595,x=0.5231819036675817,y=0.40713616193177726 -a=zee,b=hat,i=3596,x=0.5397245337903605,y=0.22318277532785968 -a=eks,b=eks,i=3597,x=0.3001045399300144,y=0.684654835830757 -a=wye,b=wye,i=3598,x=0.7511038686147846,y=0.16271559707006 -a=pan,b=wye,i=3599,x=0.24928033876518263,y=0.5468336781217452 -a=zee,b=zee,i=3600,x=0.8913764206699744,y=0.10963338992957028 -a=zee,b=zee,i=3601,x=0.2744348997210646,y=0.31854494443399084 -a=wye,b=zee,i=3602,x=0.054351745514601424,y=0.6361866150927422 -a=zee,b=eks,i=3603,x=0.5229720340996624,y=0.057088462748232205 -a=wye,b=pan,i=3604,x=0.7144947248233644,y=0.6725505298381226 -a=wye,b=eks,i=3605,x=0.6414071793103325,y=0.5040707081922082 -a=pan,b=eks,i=3606,x=0.8517449653369746,y=0.2950457092186415 -a=wye,b=hat,i=3607,x=0.2865652516469479,y=0.10334063882665867 -a=wye,b=pan,i=3608,x=0.24799522500173943,y=0.029628860448197347 -a=zee,b=hat,i=3609,x=0.519616508395717,y=0.280205313320282 -a=eks,b=zee,i=3610,x=0.06251116908017895,y=0.23236755910808227 -a=eks,b=hat,i=3611,x=0.2146220845642176,y=0.1332540175691711 -a=hat,b=zee,i=3612,x=0.39065626156480215,y=0.09272883365156981 -a=pan,b=eks,i=3613,x=0.04243312520650444,y=0.12731535921213588 -a=zee,b=hat,i=3614,x=0.9992938250588376,y=0.7586006131131866 -a=pan,b=pan,i=3615,x=0.955045779277772,y=0.8579181695107918 -a=eks,b=wye,i=3616,x=0.14187634853420827,y=0.2180915198390927 -a=wye,b=wye,i=3617,x=0.7840113988617385,y=0.15653631848249716 -a=zee,b=zee,i=3618,x=0.015927778136068382,y=0.6135932738526103 -a=pan,b=pan,i=3619,x=0.19730522485789048,y=0.6132793786163574 -a=wye,b=hat,i=3620,x=0.6713095225608523,y=0.5954491704569804 -a=zee,b=pan,i=3621,x=0.4092160575415905,y=0.30771033889968114 -a=hat,b=pan,i=3622,x=0.8901185751582916,y=0.1870407451165942 -a=wye,b=hat,i=3623,x=0.5152268528423625,y=0.013485915142624427 -a=wye,b=hat,i=3624,x=0.13584832757741117,y=0.382341043184265 -a=wye,b=zee,i=3625,x=0.7390723547209095,y=0.6804645486376089 -a=pan,b=pan,i=3626,x=0.17323378929158628,y=0.22177151771660586 -a=hat,b=hat,i=3627,x=0.27427850969768897,y=0.39696397114401794 -a=hat,b=hat,i=3628,x=0.12300146024961678,y=0.7010677704464917 -a=zee,b=zee,i=3629,x=0.1203621553000902,y=0.03649730823892894 -a=eks,b=pan,i=3630,x=0.6432472290390947,y=0.6493064608702905 -a=wye,b=zee,i=3631,x=0.5501609784896981,y=0.5442209389820327 -a=hat,b=zee,i=3632,x=0.9887195745001507,y=0.8462799528384646 -a=zee,b=wye,i=3633,x=0.05961380658144755,y=0.41153390509403887 -a=wye,b=pan,i=3634,x=0.779500491235004,y=0.5677694423637825 -a=pan,b=pan,i=3635,x=0.8517678780538765,y=0.37570897363715816 -a=zee,b=zee,i=3636,x=0.3540502081666034,y=0.7557010012298948 -a=eks,b=pan,i=3637,x=0.5208357640093749,y=0.5659221306135821 -a=hat,b=pan,i=3638,x=0.7845171840273204,y=0.3502193918421451 -a=hat,b=pan,i=3639,x=0.31221536384885895,y=0.8777925678653494 -a=wye,b=wye,i=3640,x=0.3117811337270454,y=0.6199259533630647 -a=zee,b=wye,i=3641,x=0.34634768849647446,y=0.1722807458856409 -a=eks,b=zee,i=3642,x=0.04372051184301495,y=0.7131048031620709 -a=hat,b=eks,i=3643,x=0.39531406696346205,y=0.7072916873720192 -a=wye,b=hat,i=3644,x=0.5912661057148787,y=0.49271215252480305 -a=zee,b=pan,i=3645,x=0.3353629361519648,y=0.27452402896726324 -a=zee,b=wye,i=3646,x=0.4302250977906721,y=0.9570565709617685 -a=pan,b=eks,i=3647,x=0.8754763901824134,y=0.4440861211150172 -a=pan,b=pan,i=3648,x=0.9502862550981916,y=0.9040781097596586 -a=wye,b=pan,i=3649,x=0.07083776693984412,y=0.42161605810186464 -a=hat,b=wye,i=3650,x=0.027750870484755663,y=0.059142569848676385 -a=hat,b=zee,i=3651,x=0.7388454792523287,y=0.6889713924377876 -a=hat,b=hat,i=3652,x=0.12134854954936014,y=0.12339998428589616 -a=pan,b=pan,i=3653,x=0.42035180771481173,y=0.872087852987371 -a=pan,b=pan,i=3654,x=0.741537059135207,y=0.9230584052244919 -a=eks,b=hat,i=3655,x=0.1316863843779006,y=0.4213001572015598 -a=hat,b=eks,i=3656,x=0.14075093892206003,y=0.21208162198013836 -a=eks,b=wye,i=3657,x=0.8011409482794655,y=0.017450835880964632 -a=hat,b=eks,i=3658,x=0.8537796341502905,y=0.5982760622218769 -a=pan,b=hat,i=3659,x=0.09110243804094742,y=0.35916077607118146 -a=wye,b=zee,i=3660,x=0.9000633600969007,y=0.2868625781042997 -a=zee,b=hat,i=3661,x=0.32611268243475844,y=0.12873678851672 -a=hat,b=zee,i=3662,x=0.7673614981915601,y=0.7295742505814344 -a=zee,b=zee,i=3663,x=0.913522524093555,y=0.4340116921500242 -a=eks,b=eks,i=3664,x=0.28693486076576824,y=0.19397030458410913 -a=zee,b=zee,i=3665,x=0.3813728809412974,y=0.8915253351559728 -a=hat,b=wye,i=3666,x=0.7295635205285994,y=0.6119784896875866 -a=wye,b=pan,i=3667,x=0.41467178462553234,y=0.8608278645584995 -a=zee,b=eks,i=3668,x=0.5993837930923437,y=0.7509474480036791 -a=eks,b=eks,i=3669,x=0.9355633368933711,y=0.9694655041497229 -a=zee,b=pan,i=3670,x=0.4986606323353615,y=0.3252967314272578 -a=hat,b=zee,i=3671,x=0.9851663975549066,y=0.7574307817453141 -a=wye,b=eks,i=3672,x=0.8646473696955588,y=0.8313013386958765 -a=pan,b=wye,i=3673,x=0.2515908234672535,y=0.056725699540206675 -a=eks,b=eks,i=3674,x=0.3536670370401426,y=0.3355576484883924 -a=hat,b=eks,i=3675,x=0.0929703970918907,y=0.7140596291048347 -a=eks,b=pan,i=3676,x=0.8723087423163797,y=0.6109859185908899 -a=wye,b=pan,i=3677,x=0.3996143053161535,y=0.8616939694819011 -a=zee,b=pan,i=3678,x=0.8491710196926309,y=0.6558159307696828 -a=wye,b=pan,i=3679,x=0.20307168892773197,y=0.7086180793037447 -a=wye,b=zee,i=3680,x=0.7425818200196079,y=0.9810014583943923 -a=wye,b=wye,i=3681,x=0.02721573926299492,y=0.07804891308055895 -a=eks,b=zee,i=3682,x=0.39124881803949274,y=0.9059680205710228 -a=pan,b=eks,i=3683,x=0.11128670399371465,y=0.6228832493398745 -a=zee,b=eks,i=3684,x=0.5257462041656636,y=0.23566322936666084 -a=zee,b=eks,i=3685,x=0.7398298697417746,y=0.4194935104256209 -a=hat,b=pan,i=3686,x=0.9301169302245861,y=0.7982783216031746 -a=hat,b=hat,i=3687,x=0.24482997045240362,y=0.8750823381392218 -a=zee,b=hat,i=3688,x=0.5723630888086361,y=0.8172243896570902 -a=hat,b=wye,i=3689,x=0.8355718873799872,y=0.8007108863141698 -a=wye,b=hat,i=3690,x=0.3502150576320706,y=0.9931617687282244 -a=eks,b=pan,i=3691,x=0.1796260215186376,y=0.9607252375862692 -a=zee,b=hat,i=3692,x=0.573338911032452,y=0.5241388333942388 -a=hat,b=pan,i=3693,x=0.7781206646766762,y=0.5080484241731826 -a=hat,b=zee,i=3694,x=0.33067301800352,y=0.7754516395280142 -a=pan,b=eks,i=3695,x=0.4992904970087908,y=0.742643746741839 -a=eks,b=wye,i=3696,x=0.9448270882170847,y=0.4103666781094296 -a=wye,b=zee,i=3697,x=0.522725396720144,y=0.18925111602486566 -a=pan,b=eks,i=3698,x=0.02978537252653579,y=0.5654493110146563 -a=hat,b=hat,i=3699,x=0.2902217497914289,y=0.6770102706214468 -a=wye,b=wye,i=3700,x=0.9046703649949718,y=0.7600607720698596 -a=pan,b=hat,i=3701,x=0.7653688084959293,y=0.9589886741282106 -a=hat,b=zee,i=3702,x=0.31427641268831985,y=0.7319186674523148 -a=hat,b=eks,i=3703,x=0.04581508270551782,y=0.7555154492651157 -a=zee,b=eks,i=3704,x=0.6944927784356837,y=0.6778190994819128 -a=wye,b=wye,i=3705,x=0.40469824814249367,y=0.8841785778563369 -a=eks,b=zee,i=3706,x=0.28192270569849476,y=0.3669079489151894 -a=wye,b=hat,i=3707,x=0.32172668895407197,y=0.23641326221038772 -a=pan,b=zee,i=3708,x=0.9367338792831362,y=0.4695354410183338 -a=eks,b=wye,i=3709,x=0.5793435558579774,y=0.5284203604486059 -a=pan,b=zee,i=3710,x=0.8358876467213303,y=0.010883794663985147 -a=wye,b=hat,i=3711,x=0.7062248515236889,y=0.7592554719549557 -a=eks,b=hat,i=3712,x=0.20158466043698664,y=0.2506153993203297 -a=hat,b=zee,i=3713,x=0.5453918537789201,y=0.9591221613154766 -a=pan,b=wye,i=3714,x=0.7007443629312707,y=0.69979486340907 -a=hat,b=zee,i=3715,x=0.4982158038764617,y=0.1845463889797414 -a=pan,b=wye,i=3716,x=0.7794631862118141,y=0.38174400926867047 -a=wye,b=zee,i=3717,x=0.20372686286113306,y=0.48178229369817827 -a=pan,b=pan,i=3718,x=0.6978201901277095,y=0.029333538689990557 -a=eks,b=pan,i=3719,x=0.4534387451777433,y=0.22731879465386806 -a=hat,b=hat,i=3720,x=0.9601728250087456,y=0.25178938182476607 -a=eks,b=eks,i=3721,x=0.8929949309089861,y=0.2753211862235905 -a=pan,b=wye,i=3722,x=0.9375469687103644,y=0.3374245074403295 -a=wye,b=wye,i=3723,x=0.47515921315887333,y=0.9657952342754725 -a=wye,b=eks,i=3724,x=0.7362078619104057,y=0.10855543465047734 -a=zee,b=zee,i=3725,x=0.15221580400712498,y=0.5846857209085365 -a=hat,b=eks,i=3726,x=0.7864690866743678,y=0.023450973928021757 -a=hat,b=eks,i=3727,x=0.02778608789107495,y=0.19112025359038776 -a=eks,b=hat,i=3728,x=0.5830906923999751,y=0.1825999304288003 -a=pan,b=wye,i=3729,x=0.6339377797999709,y=0.7940228471998122 -a=hat,b=wye,i=3730,x=0.9186140626854419,y=0.4158937617414502 -a=hat,b=hat,i=3731,x=0.03433461671749849,y=0.37009846068918584 -a=wye,b=wye,i=3732,x=0.24997685932838876,y=0.7647954464137104 -a=wye,b=wye,i=3733,x=0.19073435311282794,y=0.705275429721041 -a=wye,b=pan,i=3734,x=0.5747797481156508,y=0.8274654836314349 -a=zee,b=hat,i=3735,x=0.20101546519059987,y=0.9017936214420659 -a=eks,b=eks,i=3736,x=0.8706261619141413,y=0.5428739515744351 -a=wye,b=pan,i=3737,x=0.5574876609423702,y=0.8504937121138577 -a=pan,b=wye,i=3738,x=0.5390690548412024,y=0.3716168991158759 -a=wye,b=hat,i=3739,x=0.971775360771065,y=0.3319565969194058 -a=zee,b=pan,i=3740,x=0.9333817720718712,y=0.4371222668297464 -a=zee,b=pan,i=3741,x=0.9571682809413955,y=0.6570144668674751 -a=pan,b=zee,i=3742,x=0.05182394212116692,y=0.8208128933987844 -a=eks,b=pan,i=3743,x=0.4905151151584467,y=0.320903002068355 -a=wye,b=zee,i=3744,x=0.7710752122842248,y=0.6182369915664692 -a=zee,b=pan,i=3745,x=0.0634219140814758,y=0.0909389524119274 -a=pan,b=hat,i=3746,x=0.016317522611819957,y=0.4500858677522094 -a=hat,b=hat,i=3747,x=0.2731453345797118,y=0.3612727190378229 -a=zee,b=zee,i=3748,x=0.7692098314967419,y=0.723183352513404 -a=pan,b=eks,i=3749,x=0.6600164034317578,y=0.22789566978678333 -a=zee,b=zee,i=3750,x=0.4584069341764643,y=0.6052673722009491 -a=pan,b=zee,i=3751,x=0.1376132992218041,y=0.5327305744083769 -a=hat,b=pan,i=3752,x=0.27781099183901203,y=0.24166942932110203 -a=eks,b=eks,i=3753,x=0.9130333710330752,y=0.9434343087469547 -a=pan,b=hat,i=3754,x=0.39530750680824867,y=0.285187450605236 -a=wye,b=zee,i=3755,x=0.5821904936762373,y=0.9440238426951152 -a=eks,b=eks,i=3756,x=0.3151274913498434,y=0.2613270252067468 -a=wye,b=zee,i=3757,x=0.27126594951001737,y=0.2696036535766695 -a=pan,b=zee,i=3758,x=0.1144851508437299,y=0.43717693060689256 -a=wye,b=wye,i=3759,x=0.8659325090962396,y=0.500920016668498 -a=wye,b=zee,i=3760,x=0.14033050146326476,y=0.7853558549084289 -a=pan,b=pan,i=3761,x=0.6277167190080807,y=0.820462327799342 -a=zee,b=zee,i=3762,x=0.40740521496915294,y=0.5027677314620422 -a=hat,b=eks,i=3763,x=0.702517766279011,y=0.5201760035681132 -a=hat,b=pan,i=3764,x=0.9684950471794708,y=0.9824729038297494 -a=pan,b=pan,i=3765,x=0.7505504157884441,y=0.5688693727587826 -a=hat,b=zee,i=3766,x=0.3053846255939139,y=0.29250711868083323 -a=pan,b=hat,i=3767,x=0.07270094398967542,y=0.819707679427309 -a=pan,b=wye,i=3768,x=0.39157640275144845,y=0.29940355516568284 -a=wye,b=hat,i=3769,x=0.2813634801023107,y=0.33793045381955156 -a=wye,b=zee,i=3770,x=0.3006731850375737,y=0.41117593228974025 -a=eks,b=zee,i=3771,x=0.8966388980866674,y=0.6767775863177413 -a=zee,b=eks,i=3772,x=0.09712051675224176,y=0.1992258338913524 -a=wye,b=hat,i=3773,x=0.05484010565512498,y=0.6891554266059904 -a=eks,b=eks,i=3774,x=0.10098411790939343,y=0.23016371716573425 -a=zee,b=hat,i=3775,x=0.7941735867493203,y=0.2594788677041825 -a=zee,b=zee,i=3776,x=0.9683966232439434,y=0.25528882348504156 -a=wye,b=eks,i=3777,x=0.5229176412769544,y=0.8857285221477562 -a=eks,b=pan,i=3778,x=0.5543756678908779,y=0.8979653327985948 -a=zee,b=eks,i=3779,x=0.692670964675647,y=0.43868001633055353 -a=eks,b=pan,i=3780,x=0.6536521341657655,y=0.6026553230815477 -a=hat,b=eks,i=3781,x=0.22056344697345842,y=0.16263581703146368 -a=hat,b=wye,i=3782,x=0.9802208332262505,y=0.42156225597643915 -a=hat,b=wye,i=3783,x=0.5246681466694276,y=0.3988002197517633 -a=wye,b=eks,i=3784,x=0.2896043360112557,y=0.03933436470492446 -a=pan,b=zee,i=3785,x=0.6699335151046618,y=0.1867082955540268 -a=zee,b=zee,i=3786,x=0.0022910915202805082,y=0.8679336791294139 -a=zee,b=hat,i=3787,x=0.11351579052401195,y=0.5365315180789991 -a=pan,b=wye,i=3788,x=0.41697687514270476,y=0.3863350720666795 -a=eks,b=pan,i=3789,x=0.2647880014677908,y=0.495992120309258 -a=pan,b=wye,i=3790,x=0.4871902945382671,y=0.22753844996371497 -a=zee,b=wye,i=3791,x=0.9587582682512387,y=0.9041552661112677 -a=pan,b=eks,i=3792,x=0.8303342159408211,y=0.7063245550219001 -a=pan,b=eks,i=3793,x=0.43293237945019947,y=0.26733489278694356 -a=zee,b=wye,i=3794,x=0.8976337510372844,y=0.8750629709298201 -a=hat,b=pan,i=3795,x=0.8432372103239337,y=0.9510111805966026 -a=eks,b=hat,i=3796,x=0.823953148854179,y=0.3020905534872981 -a=zee,b=wye,i=3797,x=0.6303527344509033,y=0.17531824895427106 -a=zee,b=pan,i=3798,x=0.9979923700274865,y=0.6588578150120853 -a=pan,b=zee,i=3799,x=0.03921193583035787,y=0.7303677603577615 -a=hat,b=eks,i=3800,x=0.6540911583411234,y=0.6156768180814669 -a=eks,b=zee,i=3801,x=0.41291944190449625,y=0.04630035513500563 -a=pan,b=eks,i=3802,x=0.21101198189616388,y=0.6878498019067313 -a=zee,b=pan,i=3803,x=0.6938862506507568,y=0.09123194788888433 -a=hat,b=zee,i=3804,x=0.13831455085494204,y=0.6878495274227865 -a=hat,b=hat,i=3805,x=0.9077137203924546,y=0.6604195772537097 -a=zee,b=pan,i=3806,x=0.4130639175002534,y=0.4140992672289935 -a=hat,b=zee,i=3807,x=0.5264705799180144,y=0.05933317807985761 -a=eks,b=pan,i=3808,x=0.18073645069225752,y=0.47471602068305085 -a=hat,b=eks,i=3809,x=0.07620205058855944,y=0.41909302154687966 -a=hat,b=zee,i=3810,x=0.9274217320420701,y=0.23200196179581423 -a=wye,b=wye,i=3811,x=0.9262768212215141,y=0.583254627467812 -a=eks,b=eks,i=3812,x=0.5738580742119982,y=0.22201053907217239 -a=hat,b=zee,i=3813,x=0.8381595697055793,y=0.8082122321715743 -a=hat,b=pan,i=3814,x=0.3227628236617065,y=0.09200255049758854 -a=zee,b=pan,i=3815,x=0.5420566318553253,y=0.24311173211623627 -a=pan,b=zee,i=3816,x=0.0679585117420517,y=0.9334969672578366 -a=wye,b=pan,i=3817,x=0.21834728153634142,y=0.009580087519049041 -a=wye,b=pan,i=3818,x=0.6892726476500824,y=0.328130518469796 -a=wye,b=zee,i=3819,x=0.6612561643616807,y=0.647643437411651 -a=zee,b=hat,i=3820,x=0.030987943391648676,y=0.6485266624267947 -a=pan,b=pan,i=3821,x=0.09753442464986295,y=0.3452736158284476 -a=eks,b=wye,i=3822,x=0.23064104633743454,y=0.6206626510995845 -a=hat,b=wye,i=3823,x=0.0660248906480213,y=0.4768167157060277 -a=zee,b=hat,i=3824,x=0.07286963812865666,y=0.9841111028377353 -a=wye,b=wye,i=3825,x=0.7412307338094147,y=0.8357569402941348 -a=pan,b=zee,i=3826,x=0.8700896084310135,y=0.7743947935823393 -a=wye,b=hat,i=3827,x=0.5505247366282321,y=0.4487041560677363 -a=hat,b=hat,i=3828,x=0.4439300237744592,y=0.3540302359317383 -a=zee,b=eks,i=3829,x=0.8461894479274499,y=0.1091063374403779 -a=wye,b=hat,i=3830,x=0.31602199194810077,y=0.23756301234064214 -a=eks,b=eks,i=3831,x=0.4588783903640905,y=0.822431348022218 -a=wye,b=pan,i=3832,x=0.3154044653633482,y=0.6954789197372386 -a=pan,b=eks,i=3833,x=0.9435147604130275,y=0.6343874692425551 -a=pan,b=hat,i=3834,x=0.7491688531360436,y=0.6632149460503455 -a=eks,b=zee,i=3835,x=0.7084199117993816,y=0.23836696302687854 -a=wye,b=pan,i=3836,x=0.5783001097508949,y=0.5326591809573153 -a=pan,b=zee,i=3837,x=0.007599613269725358,y=0.5985657848153627 -a=wye,b=eks,i=3838,x=0.16276307163297787,y=0.4480412721243018 -a=hat,b=pan,i=3839,x=0.04332885941703746,y=0.6974767645258779 -a=pan,b=hat,i=3840,x=0.6308501275600921,y=0.15448447296698842 -a=wye,b=wye,i=3841,x=0.7854392875246197,y=0.7264036810522736 -a=zee,b=wye,i=3842,x=0.9500031218945214,y=0.9557435110983296 -a=hat,b=eks,i=3843,x=0.8979324823898589,y=0.22043224466362787 -a=zee,b=eks,i=3844,x=0.5533769309499299,y=0.4231610222317168 -a=eks,b=hat,i=3845,x=0.956021508845704,y=0.05912536350688913 -a=pan,b=zee,i=3846,x=0.12083257325362673,y=0.6880217459012083 -a=eks,b=pan,i=3847,x=0.9538690048763792,y=0.018466194565513683 -a=wye,b=eks,i=3848,x=0.6500527955774431,y=0.023909990362617428 -a=wye,b=eks,i=3849,x=0.7149976391333995,y=0.9748913470930238 -a=zee,b=eks,i=3850,x=0.7036643435758647,y=0.29910186188725063 -a=eks,b=zee,i=3851,x=0.6884645549243478,y=0.6729540888918134 -a=wye,b=wye,i=3852,x=0.16575767054134194,y=0.3519742254585112 -a=zee,b=pan,i=3853,x=0.16807480611879477,y=0.6916258245977434 -a=zee,b=eks,i=3854,x=0.9118453703518822,y=0.4970364912618278 -a=eks,b=wye,i=3855,x=0.7041409587449016,y=0.21248706433820264 -a=pan,b=zee,i=3856,x=0.7166199842938143,y=0.5985908973683398 -a=eks,b=pan,i=3857,x=0.911885736627155,y=0.7775693985993537 -a=pan,b=pan,i=3858,x=0.2655493421352306,y=0.5008269003029236 -a=eks,b=eks,i=3859,x=0.23564525774209633,y=0.6200721762867689 -a=eks,b=pan,i=3860,x=0.16404594209083445,y=0.2945650928508321 -a=hat,b=zee,i=3861,x=0.5532707570794401,y=0.3218958838799141 -a=wye,b=eks,i=3862,x=0.845977895190702,y=0.2105916632815279 -a=pan,b=wye,i=3863,x=0.8914098448143842,y=0.941827688174933 -a=wye,b=pan,i=3864,x=0.40887317017480806,y=0.9211253311538701 -a=eks,b=pan,i=3865,x=0.6410821318604495,y=0.742344518102107 -a=eks,b=eks,i=3866,x=0.8820740686865273,y=0.6336399556322359 -a=zee,b=zee,i=3867,x=0.9124099806717596,y=0.10039063827592765 -a=pan,b=pan,i=3868,x=0.5708876065677694,y=0.6788408195369369 -a=pan,b=hat,i=3869,x=0.5531285064534339,y=0.014934021539296571 -a=hat,b=zee,i=3870,x=0.40688870301241575,y=0.4640784108862729 -a=eks,b=hat,i=3871,x=0.576479904048506,y=0.31414898223457755 -a=wye,b=wye,i=3872,x=0.47105100438757685,y=0.05894343228765331 -a=wye,b=hat,i=3873,x=0.08895748908550638,y=0.7503852698192701 -a=zee,b=wye,i=3874,x=0.36954687122878715,y=0.07524269626487912 -a=pan,b=zee,i=3875,x=0.8656993436002198,y=0.7910484890727197 -a=wye,b=wye,i=3876,x=0.03808754965335226,y=0.08658971281465833 -a=pan,b=zee,i=3877,x=0.09904785925240933,y=0.6676400108509978 -a=eks,b=eks,i=3878,x=0.0506506132923914,y=0.7242690651435119 -a=hat,b=eks,i=3879,x=0.03588331465146932,y=0.7484282721818893 -a=hat,b=hat,i=3880,x=0.4235813324669898,y=0.24387827945280804 -a=hat,b=hat,i=3881,x=0.7822034723161025,y=0.7478339704565765 -a=hat,b=eks,i=3882,x=0.011719496883464853,y=0.24640876061080674 -a=eks,b=hat,i=3883,x=0.4614594041430371,y=0.3205017019419516 -a=wye,b=wye,i=3884,x=0.9807726374776462,y=0.16883444992338326 -a=wye,b=zee,i=3885,x=0.31672532313467505,y=0.2365343741445356 -a=hat,b=pan,i=3886,x=0.18873324663018243,y=0.7292335881068795 -a=pan,b=hat,i=3887,x=0.030126862485056027,y=0.7407216218234761 -a=eks,b=wye,i=3888,x=0.21823480875880663,y=0.6891953143456548 -a=zee,b=wye,i=3889,x=0.039039225578129,y=0.043618607590064085 -a=wye,b=eks,i=3890,x=0.1974840445022984,y=0.43475405724957294 -a=pan,b=eks,i=3891,x=0.9382818311518488,y=0.9030005498802104 -a=pan,b=zee,i=3892,x=0.27112454369214156,y=0.8859937112495071 -a=eks,b=eks,i=3893,x=0.4046249389793575,y=0.21056190964042465 -a=wye,b=zee,i=3894,x=0.7443136068289423,y=0.8294047544954046 -a=hat,b=hat,i=3895,x=0.4564412341948818,y=0.7759614897360431 -a=hat,b=wye,i=3896,x=0.04335080026755522,y=0.9820438391823961 -a=hat,b=pan,i=3897,x=0.49376649897367464,y=0.13401013066245737 -a=eks,b=pan,i=3898,x=0.6998124732144403,y=0.3446237971866837 -a=eks,b=wye,i=3899,x=0.1432600644239883,y=0.7912100443742818 -a=pan,b=hat,i=3900,x=0.8799773683889426,y=0.5220746421238783 -a=wye,b=zee,i=3901,x=0.8739801518514984,y=0.13243512076702868 -a=zee,b=eks,i=3902,x=0.8645468539063139,y=0.9700412096469742 -a=hat,b=hat,i=3903,x=0.6603175490464367,y=0.7332253490191969 -a=wye,b=hat,i=3904,x=0.2808463214358832,y=0.6400325080698059 -a=hat,b=hat,i=3905,x=0.37058852723699554,y=0.10112929497538448 -a=hat,b=pan,i=3906,x=0.18587769312561342,y=0.5877405963198684 -a=hat,b=hat,i=3907,x=0.5156840561144312,y=0.48828123151684966 -a=hat,b=hat,i=3908,x=0.011436139295365133,y=0.698305213173947 -a=eks,b=zee,i=3909,x=0.8701294324647131,y=0.6010009857684786 -a=eks,b=pan,i=3910,x=0.7754775924406334,y=0.9607498923245504 -a=zee,b=zee,i=3911,x=0.10611443109176355,y=0.9500980959450185 -a=eks,b=hat,i=3912,x=0.40688370124160333,y=0.3725099736322035 -a=eks,b=pan,i=3913,x=0.7572616191019003,y=0.009426657564762575 -a=zee,b=pan,i=3914,x=0.568449276718281,y=0.44428728066132994 -a=hat,b=zee,i=3915,x=0.4715771685615844,y=0.679035167069352 -a=pan,b=hat,i=3916,x=0.10385472378813976,y=0.8696276556798485 -a=zee,b=eks,i=3917,x=0.4610838052133647,y=0.5166912532440093 -a=eks,b=wye,i=3918,x=0.3468839319991631,y=0.7460608153868107 -a=hat,b=hat,i=3919,x=0.20968623039533885,y=0.2249710535207634 -a=eks,b=wye,i=3920,x=0.06633524516092837,y=0.21897455790581 -a=zee,b=hat,i=3921,x=0.24462442594768674,y=0.7825101030749122 -a=eks,b=pan,i=3922,x=0.09303768776585819,y=0.9097350521192294 -a=pan,b=zee,i=3923,x=0.7828038174006502,y=0.40187653591870354 -a=eks,b=wye,i=3924,x=0.24552287892234603,y=0.8709339930853457 -a=wye,b=eks,i=3925,x=0.9444615936887226,y=0.5492757409492689 -a=pan,b=eks,i=3926,x=0.2577383831501502,y=0.42247048365748696 -a=hat,b=pan,i=3927,x=0.2961162902664337,y=0.5026763086626909 -a=hat,b=pan,i=3928,x=0.3294192690721903,y=0.0018064795955691215 -a=pan,b=wye,i=3929,x=0.5373694134669578,y=0.6408298650436733 -a=wye,b=zee,i=3930,x=0.3772473940400355,y=0.4855477755417952 -a=pan,b=hat,i=3931,x=0.8947844528349447,y=0.6976181039979583 -a=wye,b=eks,i=3932,x=0.902042488611117,y=0.8695780909283909 -a=zee,b=eks,i=3933,x=0.9377651072146025,y=0.49393343661090683 -a=wye,b=wye,i=3934,x=0.8890179128922202,y=0.036534071445648686 -a=eks,b=wye,i=3935,x=0.8719220728834155,y=0.626436829723036 -a=zee,b=zee,i=3936,x=0.2789666429898331,y=0.7718880254003965 -a=wye,b=zee,i=3937,x=0.8620266789446326,y=0.133104948798772 -a=wye,b=wye,i=3938,x=0.4264030481171944,y=0.2469737981294069 -a=zee,b=pan,i=3939,x=0.9776442331945898,y=0.4655162963934556 -a=pan,b=hat,i=3940,x=0.37339956142433084,y=0.23248823182301037 -a=eks,b=hat,i=3941,x=0.8182766432429959,y=0.2282730594932706 -a=eks,b=zee,i=3942,x=0.7678757943544514,y=0.9693217394374674 -a=wye,b=hat,i=3943,x=0.29550708533363845,y=0.16362618484177738 -a=zee,b=wye,i=3944,x=0.9305603171944418,y=0.2631848553023146 -a=zee,b=eks,i=3945,x=0.9502316772099553,y=0.19036371662120233 -a=wye,b=eks,i=3946,x=0.8350585462480241,y=0.7491629688087337 -a=wye,b=zee,i=3947,x=0.8226133287365867,y=0.2794421547836373 -a=wye,b=wye,i=3948,x=0.02572471641992602,y=0.6920862746683303 -a=wye,b=zee,i=3949,x=0.3676627709059406,y=0.3957927902894449 -a=zee,b=pan,i=3950,x=0.32474388588887126,y=0.02474711989630063 -a=pan,b=eks,i=3951,x=0.7409946857015619,y=0.19548589834215446 -a=hat,b=wye,i=3952,x=0.6350102710290926,y=0.2620857765590283 -a=zee,b=eks,i=3953,x=0.30922267009534077,y=0.3284230853853207 -a=hat,b=pan,i=3954,x=0.052368455214725995,y=0.4715978875853839 -a=eks,b=zee,i=3955,x=0.5312946172484967,y=0.12098565859835453 -a=zee,b=eks,i=3956,x=0.1849505395742288,y=0.6971047278578605 -a=pan,b=eks,i=3957,x=0.6165622172072422,y=0.37237191581951723 -a=hat,b=zee,i=3958,x=0.07310839831115146,y=0.32925431162438823 -a=pan,b=hat,i=3959,x=0.1292574457299427,y=0.3582879075778822 -a=pan,b=zee,i=3960,x=0.19211441013639674,y=0.11950330832710931 -a=wye,b=hat,i=3961,x=0.6511854877418017,y=0.4589218300880824 -a=eks,b=hat,i=3962,x=0.9657235616300794,y=0.05144636955135773 -a=hat,b=pan,i=3963,x=0.2775863198412192,y=0.7891255209818445 -a=wye,b=eks,i=3964,x=0.9210830069555165,y=0.5838970142942722 -a=zee,b=wye,i=3965,x=0.23984259901508576,y=0.26442599713920145 -a=hat,b=eks,i=3966,x=0.23733058400187923,y=0.7016365873249447 -a=zee,b=wye,i=3967,x=0.9985449436152721,y=0.7330838738578122 -a=eks,b=wye,i=3968,x=0.015400799144512867,y=0.6014606839935781 -a=zee,b=hat,i=3969,x=0.6861552175518395,y=0.46267309304633597 -a=wye,b=zee,i=3970,x=0.3424738374943377,y=0.6234959936497562 -a=hat,b=pan,i=3971,x=0.47236749903854525,y=0.49755810812875845 -a=pan,b=wye,i=3972,x=0.06499356218753538,y=0.5661193015342019 -a=pan,b=hat,i=3973,x=0.39627283237990996,y=0.6628720545942175 -a=hat,b=hat,i=3974,x=0.2255823178745917,y=0.3328848639919585 -a=zee,b=pan,i=3975,x=0.41021697311932137,y=0.5253220869630462 -a=eks,b=eks,i=3976,x=0.3872364913819858,y=0.12628018436476995 -a=zee,b=wye,i=3977,x=0.640238580570024,y=0.41378547967160495 -a=eks,b=zee,i=3978,x=0.10057250053848688,y=0.6832812035658576 -a=eks,b=wye,i=3979,x=0.05509300519176841,y=0.3449069313995392 -a=eks,b=wye,i=3980,x=0.17739908838951735,y=0.6189549035709109 -a=eks,b=pan,i=3981,x=0.798588528905017,y=0.7451168881460923 -a=wye,b=eks,i=3982,x=0.7480880614402182,y=0.8419207681331152 -a=wye,b=zee,i=3983,x=0.8362240426090267,y=0.77769018412775 -a=hat,b=wye,i=3984,x=0.020984581151031745,y=0.9379819495871566 -a=zee,b=eks,i=3985,x=0.05962271913450001,y=0.8797820678732818 -a=pan,b=zee,i=3986,x=0.4205297371360823,y=0.9963268123973551 -a=eks,b=hat,i=3987,x=0.3908629932350629,y=0.5854417332644798 -a=zee,b=zee,i=3988,x=0.7335921993524305,y=0.5879895671878599 -a=wye,b=zee,i=3989,x=0.2700024864980135,y=0.8437375152003208 -a=wye,b=pan,i=3990,x=0.2551633201471506,y=0.4633660311722343 -a=pan,b=zee,i=3991,x=0.07557797117002352,y=0.03446642347570361 -a=zee,b=eks,i=3992,x=0.7507600776739561,y=0.6732032182262292 -a=hat,b=zee,i=3993,x=0.08221997898229427,y=0.21489690844146592 -a=zee,b=eks,i=3994,x=0.2399390749091379,y=0.8600537400054703 -a=hat,b=eks,i=3995,x=0.6854597775410988,y=0.6047357220116547 -a=pan,b=hat,i=3996,x=0.4669100032261838,y=0.48298621327550606 -a=eks,b=hat,i=3997,x=0.8201134204882613,y=0.5748852394805374 -a=zee,b=eks,i=3998,x=0.39329877289726367,y=0.8779820074659457 -a=pan,b=pan,i=3999,x=0.1966197290195203,y=0.539503732197533 -a=pan,b=wye,i=4000,x=0.7030828102156571,y=0.12232197500884245 -a=wye,b=hat,i=4001,x=0.8174301789619988,y=0.9053657573378745 -a=eks,b=wye,i=4002,x=0.3850636313361996,y=0.552180695877821 -a=eks,b=hat,i=4003,x=0.6772262101934939,y=0.12567047648579976 -a=wye,b=pan,i=4004,x=0.7607827500015804,y=0.6235619294990873 -a=zee,b=zee,i=4005,x=0.6393382677423634,y=0.026928024799432126 -a=zee,b=hat,i=4006,x=0.48789661545234886,y=0.21227412408894908 -a=pan,b=wye,i=4007,x=0.5905532262814199,y=0.03346277389076979 -a=eks,b=hat,i=4008,x=0.890243383339597,y=0.7267223805200799 -a=hat,b=pan,i=4009,x=0.5706952995715363,y=0.9230695483570237 -a=zee,b=hat,i=4010,x=0.42440597576906447,y=0.0704425276034597 -a=hat,b=wye,i=4011,x=0.24251335510099137,y=0.23960695465439596 -a=zee,b=pan,i=4012,x=0.5455876516440495,y=0.4916025226658389 -a=eks,b=pan,i=4013,x=0.8704264127290353,y=0.5876599831119824 -a=hat,b=pan,i=4014,x=0.31319409877544535,y=0.37600379424562247 -a=pan,b=hat,i=4015,x=0.6791412275551999,y=0.8868908402993898 -a=pan,b=eks,i=4016,x=0.8587762124701115,y=0.7327173343378633 -a=zee,b=eks,i=4017,x=0.3047836325798219,y=0.7894212582792598 -a=hat,b=pan,i=4018,x=0.3048776737346697,y=0.13707959214248555 -a=zee,b=zee,i=4019,x=0.32116201777416775,y=0.6159942228124887 -a=hat,b=pan,i=4020,x=0.0435632469106455,y=0.8600282250289863 -a=zee,b=hat,i=4021,x=0.3130407621764443,y=0.2693181610377101 -a=wye,b=zee,i=4022,x=0.40301649786733384,y=0.9524000685947437 -a=pan,b=pan,i=4023,x=0.10367305449954967,y=0.022130374916290774 -a=pan,b=zee,i=4024,x=0.2180038149057033,y=0.2890891058720141 -a=hat,b=wye,i=4025,x=0.6365723951389777,y=0.7003325245087676 -a=zee,b=zee,i=4026,x=0.9441858479531559,y=0.3388368972590644 -a=wye,b=hat,i=4027,x=0.4037114359444258,y=0.90743641296412 -a=hat,b=eks,i=4028,x=0.20788010249626498,y=0.6884626872862553 -a=wye,b=pan,i=4029,x=0.3428961154684751,y=0.8868244204307322 -a=zee,b=eks,i=4030,x=0.3317839760740481,y=0.4161099049929635 -a=pan,b=eks,i=4031,x=0.09704619121471669,y=0.0779275379233505 -a=wye,b=wye,i=4032,x=0.2974124725329491,y=0.20863438296756043 -a=wye,b=pan,i=4033,x=0.44164928623031885,y=0.3935479870985933 -a=zee,b=pan,i=4034,x=0.407013802751526,y=0.7638222768155006 -a=hat,b=hat,i=4035,x=0.5832281654804606,y=0.30161246333228053 -a=hat,b=pan,i=4036,x=0.3630052335487458,y=0.1756001401202808 -a=pan,b=wye,i=4037,x=0.40101967210862355,y=0.21622386613658062 -a=zee,b=eks,i=4038,x=0.31593174924868916,y=0.30590560916984444 -a=pan,b=eks,i=4039,x=0.053167065399378544,y=0.9320171029412466 -a=hat,b=zee,i=4040,x=0.9955496827175224,y=0.48098153603493243 -a=wye,b=eks,i=4041,x=0.6663441339123051,y=0.8594459082303051 -a=pan,b=wye,i=4042,x=0.1587273385461524,y=0.6669257024952429 -a=eks,b=zee,i=4043,x=0.28076996721337844,y=0.7010179301082176 -a=zee,b=wye,i=4044,x=0.4445193542875734,y=0.10451265229731932 -a=eks,b=zee,i=4045,x=0.7400078317069471,y=0.6537027971576772 -a=zee,b=zee,i=4046,x=0.6525804691103836,y=0.2545220514360603 -a=wye,b=wye,i=4047,x=0.5414929203702645,y=0.4539331132426315 -a=pan,b=hat,i=4048,x=0.26401325806452103,y=0.5055541652981963 -a=zee,b=wye,i=4049,x=0.3865785757267529,y=0.3257613178120228 -a=zee,b=pan,i=4050,x=0.22133212632288612,y=0.46497223755296413 -a=wye,b=pan,i=4051,x=0.46330422466377885,y=0.0013216245762560641 -a=eks,b=eks,i=4052,x=0.26951508961424153,y=0.8159189781286144 -a=hat,b=zee,i=4053,x=0.8866052673521815,y=0.4046547094268781 -a=eks,b=pan,i=4054,x=0.740840958021636,y=0.4460391910997835 -a=hat,b=hat,i=4055,x=0.24697770493624438,y=0.612234746493852 -a=eks,b=eks,i=4056,x=0.8643394873777513,y=0.9659257127064651 -a=pan,b=pan,i=4057,x=0.3102888737344549,y=0.40268801525857945 -a=zee,b=pan,i=4058,x=0.9750004025056389,y=0.30221484127549403 -a=wye,b=eks,i=4059,x=0.5063318396525335,y=0.4417901089284284 -a=pan,b=zee,i=4060,x=0.008052078028936815,y=0.8144830537845575 -a=zee,b=zee,i=4061,x=0.5943115025128368,y=0.7926566656770357 -a=eks,b=eks,i=4062,x=0.9875301794451499,y=0.7335426236266079 -a=wye,b=zee,i=4063,x=0.8739281191211792,y=0.4835160480530071 -a=wye,b=wye,i=4064,x=0.054986884076116516,y=0.9109000045675829 -a=eks,b=pan,i=4065,x=0.9790714906563968,y=0.007030356364051138 -a=eks,b=eks,i=4066,x=0.9312192725082208,y=0.4963799110654653 -a=pan,b=pan,i=4067,x=0.5063639370311482,y=0.004264053556000236 -a=eks,b=wye,i=4068,x=0.1524845394038703,y=0.8431776270630555 -a=zee,b=wye,i=4069,x=0.969881192737605,y=0.7454405956242405 -a=hat,b=eks,i=4070,x=0.18629806750635058,y=0.20897903127133244 -a=hat,b=eks,i=4071,x=0.17058445050982152,y=0.6566712054825186 -a=wye,b=hat,i=4072,x=0.5889180149165333,y=0.24917849958971638 -a=pan,b=eks,i=4073,x=0.2657367745661936,y=0.2985150423046431 -a=wye,b=pan,i=4074,x=0.7170683734519407,y=0.6616939907637078 -a=hat,b=pan,i=4075,x=0.7741097521171826,y=0.5862044466287508 -a=pan,b=eks,i=4076,x=0.6711827040032985,y=0.1902299755507466 -a=hat,b=hat,i=4077,x=0.5011592202840128,y=0.4774266498958699 -a=wye,b=hat,i=4078,x=0.45606720248652644,y=0.8123287155978273 -a=zee,b=zee,i=4079,x=0.3760881437289524,y=0.8847359365393963 -a=eks,b=zee,i=4080,x=0.6036589730049234,y=0.5196679309887058 -a=eks,b=pan,i=4081,x=0.8636397669083807,y=0.39559043404091077 -a=hat,b=hat,i=4082,x=0.5572557445251078,y=0.624066652987969 -a=wye,b=wye,i=4083,x=0.8666445318722942,y=0.767288613574896 -a=eks,b=zee,i=4084,x=0.5618487213544217,y=0.30293876669064146 -a=wye,b=eks,i=4085,x=0.5272061090337726,y=0.9162627017806118 -a=eks,b=wye,i=4086,x=0.3119331822264977,y=0.4703087590730718 -a=wye,b=zee,i=4087,x=0.041369624776661396,y=0.1706574091421187 -a=pan,b=eks,i=4088,x=0.6090012823832082,y=0.812489654491081 -a=hat,b=pan,i=4089,x=0.6181818234320513,y=0.3456834903874286 -a=wye,b=zee,i=4090,x=0.08760748700129917,y=0.046823223997924046 -a=pan,b=pan,i=4091,x=0.9477496006595305,y=0.6877721274230629 -a=pan,b=eks,i=4092,x=0.05823591729943611,y=0.2271541631902052 -a=zee,b=wye,i=4093,x=0.5115949427264939,y=0.7463065447615764 -a=hat,b=hat,i=4094,x=0.8294711965470426,y=0.5100796086516896 -a=pan,b=wye,i=4095,x=0.002245348719915996,y=0.4758218988941505 -a=zee,b=eks,i=4096,x=0.6921498725707808,y=0.11138574708230264 -a=eks,b=zee,i=4097,x=0.5977012193299909,y=0.6349007809350186 -a=wye,b=pan,i=4098,x=0.9826450383900536,y=0.1400761078947168 -a=pan,b=wye,i=4099,x=0.8910882964590207,y=0.33701906973508144 -a=wye,b=pan,i=4100,x=0.4194005326767647,y=0.5452164572329079 -a=wye,b=wye,i=4101,x=0.9070001852862156,y=0.5366667269362855 -a=pan,b=zee,i=4102,x=0.936276054438326,y=0.40450742681553564 -a=wye,b=zee,i=4103,x=0.40338842748518,y=0.16714248436837198 -a=pan,b=eks,i=4104,x=0.4763532787659751,y=0.6087591109968019 -a=pan,b=wye,i=4105,x=0.16729489652734397,y=0.5307591339000314 -a=wye,b=hat,i=4106,x=0.6762148011530986,y=0.7998537880048552 -a=zee,b=wye,i=4107,x=0.1740567415346871,y=0.8534128359069896 -a=eks,b=zee,i=4108,x=0.3415946367341153,y=0.19830581897594968 -a=pan,b=hat,i=4109,x=0.06408072699727674,y=0.7782480536170286 -a=eks,b=pan,i=4110,x=0.7201591775410024,y=0.9280174950278048 -a=wye,b=hat,i=4111,x=0.27092702426036697,y=0.40264205326846036 -a=wye,b=eks,i=4112,x=0.21549872173717677,y=0.7712851660284064 -a=wye,b=eks,i=4113,x=0.9978834111387961,y=0.02729153021305819 -a=wye,b=hat,i=4114,x=0.5672845724991237,y=0.8126100904189216 -a=pan,b=eks,i=4115,x=0.14786482586108984,y=0.7088885498409112 -a=eks,b=zee,i=4116,x=0.5374530235586998,y=0.1554131021415981 -a=zee,b=wye,i=4117,x=0.973704237758867,y=0.2722193342177551 -a=eks,b=zee,i=4118,x=0.44761492415732196,y=0.8962682037215072 -a=wye,b=zee,i=4119,x=0.14069101423742136,y=0.3916394205657444 -a=eks,b=hat,i=4120,x=0.7278136147317754,y=0.992128682834371 -a=wye,b=eks,i=4121,x=0.3436640653132741,y=0.12875649374791853 -a=pan,b=wye,i=4122,x=0.5589346838220178,y=0.4914922406604886 -a=hat,b=zee,i=4123,x=0.11667168949423246,y=0.09343624851787202 -a=zee,b=zee,i=4124,x=0.3762744289665654,y=0.4657534810646099 -a=pan,b=zee,i=4125,x=0.8167559403831369,y=0.6726503484988995 -a=zee,b=hat,i=4126,x=0.16302778730181566,y=0.2748655824617119 -a=wye,b=wye,i=4127,x=0.7262693332963976,y=0.7800792471160094 -a=wye,b=pan,i=4128,x=0.343037394179604,y=0.8198518248958258 -a=zee,b=wye,i=4129,x=0.05680148699183385,y=0.6245423259174248 -a=eks,b=wye,i=4130,x=0.8598238868873511,y=0.012220950836815403 -a=pan,b=zee,i=4131,x=0.3675182883990802,y=0.8604415347784466 -a=wye,b=zee,i=4132,x=0.14673501967206204,y=0.2171503552857429 -a=wye,b=zee,i=4133,x=0.7389607262096376,y=0.036648057677968304 -a=pan,b=eks,i=4134,x=0.5678246594857959,y=0.8501122230105806 -a=eks,b=wye,i=4135,x=0.06467946568449268,y=0.8481570975546845 -a=zee,b=eks,i=4136,x=0.9750589992032552,y=0.8792931621208594 -a=pan,b=eks,i=4137,x=0.727677709722926,y=0.990782873469676 -a=hat,b=eks,i=4138,x=0.680011121560662,y=0.8738045887343792 -a=pan,b=eks,i=4139,x=0.8882078496509985,y=0.7037523368580344 -a=wye,b=wye,i=4140,x=0.4072330251968732,y=0.5912138499903089 -a=pan,b=pan,i=4141,x=0.7099916507740912,y=0.7023882125149881 -a=zee,b=hat,i=4142,x=0.59845620196533,y=0.7654415799243958 -a=wye,b=zee,i=4143,x=0.7319199702444085,y=0.3284383385587504 -a=pan,b=eks,i=4144,x=0.20066813487611335,y=0.14876626920283553 -a=eks,b=eks,i=4145,x=0.15065242524890976,y=0.12428817259719527 -a=eks,b=hat,i=4146,x=0.24650476137003852,y=0.24493489109337752 -a=pan,b=eks,i=4147,x=0.18018100232038436,y=0.6774654990004214 -a=pan,b=wye,i=4148,x=0.3413539884717429,y=0.42693818289018026 -a=pan,b=hat,i=4149,x=0.3302318191152641,y=0.76393329273942 -a=wye,b=wye,i=4150,x=0.18070207422954976,y=0.5101494095812327 -a=hat,b=wye,i=4151,x=0.9300760758556822,y=0.7773525646273065 -a=eks,b=eks,i=4152,x=0.1811147851470688,y=0.27238019374865363 -a=zee,b=zee,i=4153,x=0.5846722719463249,y=0.6311555286184487 -a=eks,b=wye,i=4154,x=0.14862179863191494,y=0.8693912096400257 -a=pan,b=zee,i=4155,x=0.09454282552502047,y=0.49923403772444375 -a=hat,b=eks,i=4156,x=0.15799120592162896,y=0.038371812406094774 -a=eks,b=zee,i=4157,x=0.4858235480097448,y=0.09279407391803784 -a=wye,b=pan,i=4158,x=0.1333970187468101,y=0.28784426376744954 -a=zee,b=wye,i=4159,x=0.16633086096833194,y=0.24966226951484904 -a=hat,b=wye,i=4160,x=0.8054114157818849,y=0.7345641356600717 -a=zee,b=wye,i=4161,x=0.0010540410989509086,y=0.4824535316499434 -a=hat,b=wye,i=4162,x=0.17183301057444123,y=0.5814481871152551 -a=hat,b=wye,i=4163,x=0.7378974454559613,y=0.14329858381160532 -a=eks,b=eks,i=4164,x=0.1814557125976639,y=0.16922072136830046 -a=hat,b=hat,i=4165,x=0.1667557442764379,y=0.4707835711078464 -a=eks,b=eks,i=4166,x=0.8001532760200558,y=0.4710414364372668 -a=zee,b=eks,i=4167,x=0.7619530390058822,y=0.930540767502347 -a=zee,b=pan,i=4168,x=0.599752942239787,y=0.2632005449641026 -a=wye,b=eks,i=4169,x=0.07899981174582527,y=0.8711975079555797 -a=wye,b=zee,i=4170,x=0.9950566917608218,y=0.8929860757345622 -a=zee,b=hat,i=4171,x=0.6164466931885032,y=0.046028336349777765 -a=pan,b=wye,i=4172,x=0.9552928088345413,y=0.4665974055074307 -a=hat,b=wye,i=4173,x=0.5631533277539057,y=0.18005042555248219 -a=zee,b=wye,i=4174,x=0.43302095958952536,y=0.9058926327335167 -a=eks,b=hat,i=4175,x=0.14893444050478133,y=0.6668089129536704 -a=pan,b=wye,i=4176,x=0.4341923489619599,y=0.7002062767529537 -a=wye,b=wye,i=4177,x=0.8269582967617823,y=0.3873323406990482 -a=wye,b=hat,i=4178,x=0.10338061245651997,y=0.6598406918574121 -a=wye,b=pan,i=4179,x=0.8403305474491944,y=0.5265486487825841 -a=pan,b=wye,i=4180,x=0.2142912364810604,y=0.5902490540194396 -a=hat,b=hat,i=4181,x=0.9215787418719625,y=0.87388922229494 -a=wye,b=eks,i=4182,x=0.34389709563449355,y=0.9265777131373166 -a=wye,b=hat,i=4183,x=0.7734961393992563,y=0.8972101418171253 -a=wye,b=eks,i=4184,x=0.26453922756144566,y=0.04144136482622762 -a=eks,b=eks,i=4185,x=0.6545545397873997,y=0.3003265405693454 -a=zee,b=pan,i=4186,x=0.09176822676571406,y=0.5263428400902627 -a=hat,b=eks,i=4187,x=0.9865778952946068,y=0.9315331182266391 -a=zee,b=zee,i=4188,x=0.5768573162811447,y=0.03374115506424635 -a=wye,b=eks,i=4189,x=0.8653650223373014,y=0.05928658347043925 -a=hat,b=hat,i=4190,x=0.9900519739227561,y=0.3950239124798106 -a=pan,b=eks,i=4191,x=0.637972872375815,y=0.17992343467853944 -a=zee,b=hat,i=4192,x=0.20233463129873608,y=0.8387699339680452 -a=pan,b=wye,i=4193,x=0.782060968571005,y=0.5226067196250769 -a=zee,b=hat,i=4194,x=0.6917599608609465,y=0.7645848884839161 -a=zee,b=wye,i=4195,x=0.05217934744029562,y=0.9588458237749052 -a=eks,b=zee,i=4196,x=0.9253885848590683,y=0.3616430584909154 -a=zee,b=wye,i=4197,x=0.04731297366084686,y=0.5416374414603988 -a=pan,b=pan,i=4198,x=0.2033916216857976,y=0.920262918619217 -a=hat,b=hat,i=4199,x=0.14718338407807485,y=0.8513271413790102 -a=eks,b=eks,i=4200,x=0.7461940655714095,y=0.22725935726388635 -a=hat,b=zee,i=4201,x=0.5742688863471991,y=0.20563261535996558 -a=pan,b=hat,i=4202,x=0.23693797784996196,y=0.7710519376518159 -a=wye,b=pan,i=4203,x=0.24740078542575394,y=0.031517413903408564 -a=eks,b=wye,i=4204,x=0.09707778409356904,y=0.4413369985080463 -a=zee,b=hat,i=4205,x=0.9035555263299718,y=0.39000800205677044 -a=eks,b=zee,i=4206,x=0.591250716216349,y=0.533942741704139 -a=wye,b=pan,i=4207,x=0.03750222722365337,y=0.7243329653363689 -a=eks,b=eks,i=4208,x=0.23584245665114634,y=0.13929514505423546 -a=hat,b=wye,i=4209,x=0.01599534158357141,y=0.888241457991452 -a=pan,b=pan,i=4210,x=0.7140111302670499,y=0.3769195273604298 -a=wye,b=eks,i=4211,x=0.5693885676546375,y=0.8180582438424654 -a=eks,b=pan,i=4212,x=0.7602507606210257,y=0.39631475864139476 -a=zee,b=zee,i=4213,x=0.6569921162319814,y=0.9398725266121587 -a=zee,b=eks,i=4214,x=0.6757239578204182,y=0.6370305085828928 -a=wye,b=pan,i=4215,x=0.24941440834260942,y=0.6514695259568407 -a=hat,b=wye,i=4216,x=0.11546817052646863,y=0.987858819464426 -a=pan,b=wye,i=4217,x=0.4097976618902073,y=0.141878119206427 -a=pan,b=pan,i=4218,x=0.37182041744304883,y=0.5321264950796094 -a=zee,b=zee,i=4219,x=0.6441844499665529,y=0.23588688400237645 -a=zee,b=pan,i=4220,x=0.30704268738508733,y=0.5886080352557902 -a=zee,b=zee,i=4221,x=0.2777713687698916,y=0.9525579988213925 -a=eks,b=wye,i=4222,x=0.2916049582954635,y=0.36479303527285845 -a=eks,b=eks,i=4223,x=0.18203746990797298,y=0.7219165981682398 -a=hat,b=zee,i=4224,x=0.5666319712329421,y=0.5421871427604233 -a=wye,b=eks,i=4225,x=0.4458349858817956,y=0.9706195326043711 -a=eks,b=zee,i=4226,x=0.16294492416963813,y=0.8362146915120445 -a=pan,b=hat,i=4227,x=0.7293597006505415,y=0.35215231788343837 -a=wye,b=pan,i=4228,x=0.0036540728637147746,y=0.9534351724118004 -a=pan,b=eks,i=4229,x=0.651806061031575,y=0.6877628315760286 -a=hat,b=zee,i=4230,x=0.3033701670401001,y=0.6978700190197445 -a=eks,b=hat,i=4231,x=0.9813730880370696,y=0.8073301729919906 -a=hat,b=hat,i=4232,x=0.4406941528960675,y=0.11038994093232624 -a=wye,b=pan,i=4233,x=0.6049346739736081,y=0.8481638285484625 -a=wye,b=pan,i=4234,x=0.03250269370708647,y=0.07284046091092433 -a=hat,b=eks,i=4235,x=0.8805603004827004,y=0.2757599334574219 -a=hat,b=eks,i=4236,x=0.35959828200975064,y=0.942305832708083 -a=zee,b=zee,i=4237,x=0.3542208694505635,y=0.9173262586874656 -a=wye,b=hat,i=4238,x=0.768952199858574,y=0.3860553554975482 -a=wye,b=zee,i=4239,x=0.15775845219755535,y=0.6337543088194983 -a=pan,b=hat,i=4240,x=0.7490446337745393,y=0.7787017014295363 -a=pan,b=wye,i=4241,x=0.39480526500730084,y=0.8301232751171009 -a=zee,b=hat,i=4242,x=0.34372514541539545,y=0.49770081510285935 -a=hat,b=eks,i=4243,x=0.38836962308546263,y=0.20018023403843987 -a=pan,b=wye,i=4244,x=0.7365286003534705,y=0.9834124894169503 -a=hat,b=zee,i=4245,x=0.8079109744541904,y=0.7703976742527068 -a=zee,b=wye,i=4246,x=0.4282487915196205,y=0.20203065558191458 -a=pan,b=eks,i=4247,x=0.9507204029429733,y=0.5630361304031504 -a=eks,b=wye,i=4248,x=0.5065699052598817,y=0.6709355384501077 -a=hat,b=zee,i=4249,x=0.09530331139521941,y=0.6141770440290856 -a=pan,b=wye,i=4250,x=0.574482871032033,y=0.24679198539791947 -a=zee,b=pan,i=4251,x=0.36882904197494304,y=0.20694570729434147 -a=zee,b=zee,i=4252,x=0.18869049168164287,y=0.2881249393129065 -a=pan,b=eks,i=4253,x=0.8529162429192656,y=0.6126252561626568 -a=eks,b=eks,i=4254,x=0.9121680240505416,y=0.24514174410079137 -a=hat,b=pan,i=4255,x=0.29284172836172306,y=0.7411592078657947 -a=zee,b=eks,i=4256,x=0.340648501185675,y=0.8624542687016871 -a=hat,b=pan,i=4257,x=0.5337295526676911,y=0.20956745825751122 -a=hat,b=eks,i=4258,x=0.23233951000696584,y=0.7359066130916937 -a=pan,b=hat,i=4259,x=0.5012993133229816,y=0.9840303477621715 -a=eks,b=pan,i=4260,x=0.0557110727165222,y=0.3692997658300152 -a=hat,b=hat,i=4261,x=0.7017095010065938,y=0.2235290487843009 -a=eks,b=eks,i=4262,x=0.45572766007890264,y=0.8865479382954524 -a=zee,b=wye,i=4263,x=0.5008782411049667,y=0.6537828452513129 -a=eks,b=wye,i=4264,x=0.17630798589531016,y=0.8870092132233037 -a=pan,b=wye,i=4265,x=0.4723205963134164,y=0.5883227580402909 -a=eks,b=zee,i=4266,x=0.7813498909756447,y=0.3554002183159217 -a=hat,b=eks,i=4267,x=0.6709709261548794,y=0.6826054557997793 -a=zee,b=pan,i=4268,x=0.5869984233644046,y=0.4215965891872716 -a=hat,b=wye,i=4269,x=0.23755705980379305,y=0.565717672067408 -a=wye,b=hat,i=4270,x=0.05437547367302842,y=0.3843634628840725 -a=wye,b=eks,i=4271,x=0.33499684404101904,y=0.7363519893989602 -a=eks,b=eks,i=4272,x=0.42076370727497103,y=0.347103929260111 -a=eks,b=hat,i=4273,x=0.20223347366198052,y=0.6349185327342544 -a=eks,b=eks,i=4274,x=0.7194619239494552,y=0.6726333368969638 -a=pan,b=hat,i=4275,x=0.15064209086091185,y=0.5650744857540827 -a=eks,b=wye,i=4276,x=0.03269653193879951,y=0.29083447280996944 -a=hat,b=wye,i=4277,x=0.9383386369025388,y=0.09737047596503401 -a=pan,b=wye,i=4278,x=0.6033940134557939,y=0.1524866624571496 -a=zee,b=hat,i=4279,x=0.919407700741633,y=0.6700497097456894 -a=eks,b=pan,i=4280,x=0.09769799852915939,y=0.3471066706498296 -a=hat,b=eks,i=4281,x=0.9148347334297323,y=0.3595323954523194 -a=wye,b=pan,i=4282,x=0.32493658600558517,y=0.7120462337991681 -a=pan,b=hat,i=4283,x=0.6050379829344159,y=0.018006169529162563 -a=hat,b=pan,i=4284,x=0.37191179153184073,y=0.832305267226861 -a=pan,b=zee,i=4285,x=0.2957451251158941,y=0.23349218064678878 -a=eks,b=eks,i=4286,x=0.8813752969569559,y=0.3063937411460197 -a=pan,b=eks,i=4287,x=0.22955891589246613,y=0.2437355707416211 -a=hat,b=zee,i=4288,x=0.2100291042828707,y=0.3046125296846791 -a=hat,b=zee,i=4289,x=0.6942460642160058,y=0.871648415206408 -a=wye,b=pan,i=4290,x=0.13303046989523815,y=0.45261676602514167 -a=wye,b=wye,i=4291,x=0.24091267860783117,y=0.432502161153847 -a=wye,b=zee,i=4292,x=0.6513153856124736,y=0.023025130979235975 -a=eks,b=eks,i=4293,x=0.772799624621821,y=0.13641136437762147 -a=hat,b=eks,i=4294,x=0.9391670129701266,y=0.15143599739807145 -a=zee,b=hat,i=4295,x=0.866742316822531,y=0.5669492043473316 -a=eks,b=wye,i=4296,x=0.11546282204080383,y=0.9128514066164883 -a=pan,b=hat,i=4297,x=0.020837302984029304,y=0.3069132274412595 -a=hat,b=hat,i=4298,x=0.006892430057588106,y=0.6798603206549415 -a=hat,b=wye,i=4299,x=0.6559693329859475,y=0.9101410668227939 -a=pan,b=pan,i=4300,x=0.14308736404653355,y=0.35525668832657153 -a=eks,b=hat,i=4301,x=0.04475741710473613,y=0.3360654229410476 -a=zee,b=eks,i=4302,x=0.300825418985067,y=0.5528561991382178 -a=zee,b=pan,i=4303,x=0.3269045708474553,y=0.9274904871303865 -a=eks,b=hat,i=4304,x=0.4580262055344778,y=0.9863999543980315 -a=zee,b=pan,i=4305,x=0.054247648849443775,y=0.03062117326702829 -a=zee,b=zee,i=4306,x=0.2506554143610683,y=0.5597570122349527 -a=hat,b=zee,i=4307,x=0.6572769759538587,y=0.7762188360555565 -a=zee,b=zee,i=4308,x=0.6244811945148983,y=0.6455417265947343 -a=pan,b=pan,i=4309,x=0.14825540740448062,y=0.7586294908793549 -a=wye,b=zee,i=4310,x=0.3157871729124738,y=0.3917102144253892 -a=eks,b=hat,i=4311,x=0.6708501828317742,y=0.004568949785298204 -a=pan,b=eks,i=4312,x=0.20998610203251922,y=0.7744934955144873 -a=zee,b=hat,i=4313,x=0.40564280799464325,y=0.33455931413035944 -a=hat,b=zee,i=4314,x=0.26557751620121417,y=0.030582294685487232 -a=wye,b=eks,i=4315,x=0.8346822718173391,y=0.9087526385931736 -a=zee,b=pan,i=4316,x=0.6650102486494331,y=0.47444093050485336 -a=eks,b=wye,i=4317,x=0.5533052426698345,y=0.9963296753932288 -a=hat,b=wye,i=4318,x=0.8500427306718407,y=0.3980491400101921 -a=eks,b=hat,i=4319,x=0.587710279503696,y=0.7637256058032382 -a=hat,b=eks,i=4320,x=0.225195776008963,y=0.34680409151838987 -a=eks,b=eks,i=4321,x=0.3743649517286406,y=0.371323975760271 -a=zee,b=wye,i=4322,x=0.08196046591615203,y=0.9354600035181082 -a=pan,b=zee,i=4323,x=0.1270141412555008,y=0.9359092028185755 -a=pan,b=wye,i=4324,x=0.8265091425517825,y=0.8730857418980851 -a=wye,b=hat,i=4325,x=0.18762256928648036,y=0.3496377335361346 -a=hat,b=zee,i=4326,x=0.5027579931171035,y=0.4533737960921881 -a=pan,b=zee,i=4327,x=0.8574481014982461,y=0.5295177741370016 -a=eks,b=hat,i=4328,x=0.04469772107287828,y=0.1558945876794342 -a=zee,b=wye,i=4329,x=0.040009010165471426,y=0.23762769464838596 -a=wye,b=eks,i=4330,x=0.7337424822041352,y=0.9253645788362634 -a=eks,b=pan,i=4331,x=0.39774327394939324,y=0.7598516907632268 -a=zee,b=eks,i=4332,x=0.6650861493530829,y=0.9532385654163494 -a=wye,b=zee,i=4333,x=0.623256894200598,y=0.9959963338862539 -a=hat,b=hat,i=4334,x=0.5194251677645445,y=0.6069457992071033 -a=eks,b=eks,i=4335,x=0.27590012941997233,y=0.4710389173795224 -a=eks,b=wye,i=4336,x=0.20559084127748029,y=0.07907344682124973 -a=zee,b=eks,i=4337,x=0.7274918229548967,y=0.4560003890137745 -a=eks,b=wye,i=4338,x=0.7956872034220226,y=0.5293505141201019 -a=eks,b=hat,i=4339,x=0.7870829513432012,y=0.43739349603781874 -a=zee,b=hat,i=4340,x=0.7603664092180368,y=0.9580821743227704 -a=hat,b=wye,i=4341,x=0.13255591202916173,y=0.6036817350896815 -a=hat,b=eks,i=4342,x=0.894832446069551,y=0.20041478240523392 -a=pan,b=zee,i=4343,x=0.25499861370064547,y=0.7429826617008429 -a=wye,b=wye,i=4344,x=0.052662357337272314,y=0.29674416350945576 -a=wye,b=eks,i=4345,x=0.32377948428256254,y=0.44346746414092775 -a=pan,b=wye,i=4346,x=0.981200940391299,y=0.3540023526814763 -a=zee,b=pan,i=4347,x=0.8084421949971258,y=0.30776403749247283 -a=wye,b=hat,i=4348,x=0.4821078789121165,y=0.4162262532349117 -a=wye,b=hat,i=4349,x=0.4367902393016294,y=0.05920613613537973 -a=eks,b=hat,i=4350,x=0.9339368174600853,y=0.7317847021280102 -a=zee,b=hat,i=4351,x=0.9429615758129121,y=0.5240015841208292 -a=hat,b=zee,i=4352,x=0.0664957669868742,y=8.818962627266114e-05 -a=pan,b=eks,i=4353,x=0.8282722812326957,y=0.23408835381449733 -a=zee,b=hat,i=4354,x=0.1538284653082913,y=0.6089810980954452 -a=zee,b=eks,i=4355,x=0.46866002588451194,y=0.9134518194404112 -a=pan,b=eks,i=4356,x=0.01315481017386444,y=0.44644705644627847 -a=wye,b=pan,i=4357,x=0.15872648196015937,y=0.4101120817770719 -a=eks,b=pan,i=4358,x=0.4048463543687769,y=0.8180080997048252 -a=eks,b=hat,i=4359,x=0.18749105355156304,y=0.031119717506070232 -a=wye,b=eks,i=4360,x=0.5994338059975802,y=0.7593584300322925 -a=zee,b=pan,i=4361,x=0.4041175236502057,y=0.563867680719028 -a=pan,b=pan,i=4362,x=0.4776831446864783,y=0.31255268452634855 -a=zee,b=zee,i=4363,x=0.737623707262791,y=0.07173859048743914 -a=eks,b=zee,i=4364,x=0.06851910387772064,y=0.6267119426769414 -a=pan,b=pan,i=4365,x=0.8056978268678051,y=0.6122184248222929 -a=wye,b=eks,i=4366,x=0.6130750784896909,y=0.3739723925301818 -a=zee,b=eks,i=4367,x=0.5479247041679578,y=0.8471361139630293 -a=hat,b=hat,i=4368,x=0.6173031043354198,y=0.7380826201700894 -a=hat,b=pan,i=4369,x=0.18322206558953436,y=0.3662885008446586 -a=zee,b=pan,i=4370,x=0.8569969483007317,y=0.731735360698434 -a=zee,b=zee,i=4371,x=0.20408101154886704,y=0.43495561327109344 -a=wye,b=eks,i=4372,x=0.3106731927957148,y=0.8646328772903458 -a=zee,b=pan,i=4373,x=0.39321439524831203,y=0.2914282319820135 -a=zee,b=hat,i=4374,x=0.683824883019394,y=0.585513739811086 -a=hat,b=hat,i=4375,x=0.9928427533843932,y=0.4919698293838758 -a=eks,b=zee,i=4376,x=0.8528651690503563,y=0.6839515405337084 -a=wye,b=zee,i=4377,x=0.6209381983202935,y=0.37443140551688425 -a=hat,b=eks,i=4378,x=0.05864089512370707,y=0.3851321842794584 -a=hat,b=eks,i=4379,x=0.385346641589309,y=0.49130997093061135 -a=wye,b=eks,i=4380,x=0.41688102647846714,y=0.4373087113569425 -a=wye,b=zee,i=4381,x=0.7486814244189324,y=0.45486094891390894 -a=wye,b=zee,i=4382,x=0.6423172315048185,y=0.43668923283070715 -a=eks,b=eks,i=4383,x=0.8187617783793841,y=0.9557936564036845 -a=pan,b=eks,i=4384,x=0.5100350554093268,y=0.8092077539642156 -a=hat,b=pan,i=4385,x=0.47426099560303103,y=0.6325566666019241 -a=pan,b=wye,i=4386,x=0.03535725248176258,y=0.21559585940453474 -a=eks,b=zee,i=4387,x=0.5578706674280356,y=0.5892456559407706 -a=zee,b=hat,i=4388,x=0.3301766575217969,y=0.3233192495545678 -a=hat,b=wye,i=4389,x=0.17144446980658334,y=0.17462284811463846 -a=wye,b=wye,i=4390,x=0.7204182651096341,y=0.09552085794825671 -a=zee,b=hat,i=4391,x=0.4346285785864693,y=0.9698660828641514 -a=wye,b=eks,i=4392,x=0.08391983953449689,y=0.4685350106442322 -a=pan,b=zee,i=4393,x=0.4995072530912873,y=0.7435874077135464 -a=eks,b=hat,i=4394,x=0.6446893978656929,y=0.742983523935812 -a=hat,b=eks,i=4395,x=0.05068057954766625,y=0.32284857142742274 -a=zee,b=wye,i=4396,x=0.031143786348458158,y=0.4250465603658179 -a=pan,b=zee,i=4397,x=0.47789346509127195,y=0.35190784679302956 -a=eks,b=zee,i=4398,x=0.18676354095379522,y=0.8523337248259436 -a=pan,b=zee,i=4399,x=0.4023182691161423,y=0.9889383169990947 -a=wye,b=hat,i=4400,x=0.06936764963814968,y=0.3043996463710237 -a=hat,b=hat,i=4401,x=0.1471442142546867,y=0.9419015090081274 -a=zee,b=zee,i=4402,x=0.05608507131691576,y=0.3577189025004591 -a=zee,b=zee,i=4403,x=0.6778157751992904,y=0.3796072620376758 -a=eks,b=wye,i=4404,x=0.20538620731982282,y=0.20907310428515913 -a=pan,b=hat,i=4405,x=0.770037239607531,y=0.8918149402479805 -a=zee,b=hat,i=4406,x=0.5633321574207005,y=0.23765572260844736 -a=pan,b=hat,i=4407,x=0.5936012356219856,y=0.9640723007408432 -a=hat,b=hat,i=4408,x=0.10549405386012722,y=0.5508069885788562 -a=eks,b=zee,i=4409,x=0.42871073222230527,y=0.7803087556052989 -a=pan,b=pan,i=4410,x=0.2570515021562684,y=0.18774521042902936 -a=pan,b=wye,i=4411,x=0.06223387369679134,y=0.9162029404566593 -a=wye,b=wye,i=4412,x=0.7213015230538632,y=0.6718375213896831 -a=zee,b=pan,i=4413,x=0.8367397203622533,y=0.7284961033977948 -a=eks,b=eks,i=4414,x=0.6694554317033412,y=0.9879307986798048 -a=eks,b=pan,i=4415,x=0.557526011305301,y=0.029599606830183034 -a=zee,b=eks,i=4416,x=0.362024615946302,y=0.01598375230508753 -a=hat,b=wye,i=4417,x=0.3577525385238439,y=0.8867789429771926 -a=pan,b=eks,i=4418,x=0.9353086997459791,y=0.840900748615823 -a=pan,b=eks,i=4419,x=0.33299408925849605,y=0.9684574693908093 -a=hat,b=hat,i=4420,x=0.9677858495817456,y=0.3852147823991926 -a=eks,b=pan,i=4421,x=0.09737990168391619,y=0.8610505154621456 -a=wye,b=zee,i=4422,x=0.18372838583640871,y=0.677719382536205 -a=zee,b=eks,i=4423,x=0.9639383645238275,y=0.6490468629834018 -a=zee,b=eks,i=4424,x=0.7312421688490892,y=0.8667063684553176 -a=pan,b=pan,i=4425,x=0.46845749017099236,y=0.11757543510403212 -a=zee,b=eks,i=4426,x=0.5623944023007167,y=0.7586419852976186 -a=eks,b=hat,i=4427,x=0.9350368655950849,y=0.9337007230580264 -a=pan,b=wye,i=4428,x=0.28446652374011305,y=0.9335853004150079 -a=zee,b=pan,i=4429,x=0.2435597397475192,y=0.9504689136369295 -a=eks,b=eks,i=4430,x=0.18612060795223095,y=0.5312429574676665 -a=wye,b=wye,i=4431,x=0.6855292088150996,y=0.5336035912975299 -a=hat,b=wye,i=4432,x=0.3714804665656307,y=0.5063602618918502 -a=eks,b=pan,i=4433,x=0.24252721996042959,y=0.28456246724868983 -a=wye,b=eks,i=4434,x=0.1632748286056276,y=0.6415721193438837 -a=zee,b=eks,i=4435,x=0.3774471419632248,y=0.29246801034228276 -a=wye,b=eks,i=4436,x=0.21438792699902287,y=0.1153507200959073 -a=eks,b=wye,i=4437,x=0.47860288810882523,y=0.25957684880561227 -a=pan,b=hat,i=4438,x=0.35637893830039535,y=0.566432274547929 -a=wye,b=hat,i=4439,x=0.8059627789626932,y=0.9269765317602825 -a=eks,b=wye,i=4440,x=0.5734217911203672,y=0.11837434570151262 -a=hat,b=wye,i=4441,x=0.9694639452414799,y=0.4236734467526825 -a=wye,b=eks,i=4442,x=0.5598645482568733,y=0.8346150307672233 -a=pan,b=hat,i=4443,x=0.7863543856807507,y=0.44923205034018343 -a=zee,b=pan,i=4444,x=0.06405328319447168,y=0.853068557145527 -a=hat,b=wye,i=4445,x=0.16426131233686758,y=0.9176538861190784 -a=hat,b=zee,i=4446,x=0.701715405648832,y=0.8559468613900958 -a=hat,b=pan,i=4447,x=0.13582612436147878,y=0.497058893619451 -a=hat,b=wye,i=4448,x=0.6624067185928518,y=0.7937707954447804 -a=zee,b=zee,i=4449,x=0.6191704067390206,y=0.43116585741152647 -a=pan,b=hat,i=4450,x=0.48601459169792693,y=0.9674848773976846 -a=pan,b=zee,i=4451,x=0.9254868696106908,y=0.9850750432504393 -a=hat,b=eks,i=4452,x=0.4276425759791995,y=0.9805685474387745 -a=pan,b=wye,i=4453,x=0.9879231882058336,y=0.05532023052523416 -a=wye,b=zee,i=4454,x=0.9975176429595021,y=0.3219020340649893 -a=zee,b=wye,i=4455,x=0.9045463102006963,y=0.848434465758308 -a=zee,b=hat,i=4456,x=0.08456763094566144,y=0.010673585995051305 -a=pan,b=hat,i=4457,x=0.0033725690276290576,y=0.9788940035931831 -a=hat,b=wye,i=4458,x=0.20520432149483148,y=0.5343150390458646 -a=wye,b=wye,i=4459,x=0.5647236635302233,y=0.3680663878959515 -a=pan,b=zee,i=4460,x=0.1592478815974211,y=0.4117697078037489 -a=pan,b=pan,i=4461,x=0.62386217954306,y=0.32217051912035644 -a=zee,b=zee,i=4462,x=0.18223498064407118,y=0.36892881666552835 -a=eks,b=wye,i=4463,x=0.6602307362128103,y=0.824908201375127 -a=eks,b=eks,i=4464,x=0.4730857339400537,y=0.9000760203605631 -a=zee,b=wye,i=4465,x=0.9363792956174969,y=0.8531230483001019 -a=eks,b=zee,i=4466,x=0.8051994741838333,y=0.5378817334878282 -a=wye,b=eks,i=4467,x=0.30400985135251946,y=0.7987746479150503 -a=pan,b=hat,i=4468,x=0.6433621739438674,y=0.6213575464612451 -a=eks,b=hat,i=4469,x=0.9576601311217493,y=0.653626721264175 -a=eks,b=eks,i=4470,x=0.98941560149702,y=0.36720018654175823 -a=wye,b=wye,i=4471,x=0.01614755296128778,y=0.6311179470884701 -a=wye,b=hat,i=4472,x=0.36611005710206224,y=0.8033266539816868 -a=hat,b=eks,i=4473,x=0.37497169859420076,y=0.979993946243979 -a=hat,b=wye,i=4474,x=0.9049733829008388,y=0.2530406481106403 -a=eks,b=eks,i=4475,x=0.7604785827914787,y=0.0635000262397527 -a=hat,b=zee,i=4476,x=0.09254183760409695,y=0.9759835344600776 -a=eks,b=hat,i=4477,x=0.09002534954722263,y=0.0791900913528687 -a=zee,b=wye,i=4478,x=0.7347401014901926,y=0.5874553765719767 -a=zee,b=eks,i=4479,x=0.18927674591359955,y=0.9166186983358086 -a=eks,b=zee,i=4480,x=0.06846268410645817,y=0.17937317736357228 -a=zee,b=pan,i=4481,x=0.9513688420096763,y=0.23610642422264838 -a=eks,b=zee,i=4482,x=0.5207774812238394,y=0.7322116837434511 -a=zee,b=wye,i=4483,x=0.6011563904137914,y=0.6359195042320677 -a=pan,b=pan,i=4484,x=0.5657005920846724,y=0.18970181926871021 -a=hat,b=eks,i=4485,x=0.14129738926071922,y=0.09762322511903287 -a=wye,b=wye,i=4486,x=0.587567750076066,y=0.6669838072984797 -a=eks,b=wye,i=4487,x=0.5516672019589355,y=0.7655831718008789 -a=hat,b=wye,i=4488,x=0.7926043240629409,y=0.5015162896194846 -a=wye,b=wye,i=4489,x=0.6948771123324418,y=0.5976836677553925 -a=hat,b=hat,i=4490,x=0.9101749423682922,y=0.9101168870690818 -a=pan,b=wye,i=4491,x=0.5070024474601975,y=0.7305420057451063 -a=hat,b=eks,i=4492,x=0.1759423893989127,y=0.3959141841599947 -a=eks,b=pan,i=4493,x=0.6837930443900314,y=0.6284806971996789 -a=pan,b=eks,i=4494,x=0.01334023940553175,y=0.8984813314174203 -a=wye,b=hat,i=4495,x=0.4602646789703714,y=0.12318800994516399 -a=wye,b=pan,i=4496,x=0.7594514407425375,y=0.6656599679572212 -a=zee,b=pan,i=4497,x=0.0776140160787101,y=0.02352743433085669 -a=wye,b=zee,i=4498,x=0.02184839096132485,y=0.3911325637076585 -a=wye,b=pan,i=4499,x=0.8747947010040115,y=0.9998479502810276 -a=pan,b=zee,i=4500,x=0.47622133460809657,y=0.12656764784587515 -a=zee,b=pan,i=4501,x=0.9880755588957435,y=0.780394078164109 -a=wye,b=pan,i=4502,x=0.5872223616487092,y=0.24413711463218768 -a=pan,b=wye,i=4503,x=0.3169372633496723,y=0.6300856859908801 -a=hat,b=eks,i=4504,x=0.7328180759655728,y=0.8128425968959323 -a=pan,b=hat,i=4505,x=0.4952953134840421,y=0.7414385634621263 -a=hat,b=wye,i=4506,x=0.6481956843803017,y=0.6728352515966057 -a=wye,b=zee,i=4507,x=0.5592247301828953,y=0.38151239977141804 -a=zee,b=eks,i=4508,x=0.6599555713404097,y=0.05617030765448339 -a=pan,b=pan,i=4509,x=0.728902215552813,y=0.27293683220270937 -a=hat,b=wye,i=4510,x=0.3413847510209549,y=0.9446873420872602 -a=wye,b=hat,i=4511,x=0.9311713164896562,y=0.5805780192421368 -a=hat,b=eks,i=4512,x=0.23786081178866836,y=0.36277905022985646 -a=hat,b=wye,i=4513,x=0.965484537526872,y=0.940488169982859 -a=wye,b=zee,i=4514,x=0.6337020189425001,y=0.24780419902689788 -a=eks,b=zee,i=4515,x=0.5658257878312276,y=0.07673202860335637 -a=pan,b=pan,i=4516,x=0.3492462945952187,y=0.2946268275283319 -a=pan,b=eks,i=4517,x=0.3809006676495632,y=0.9025992620313033 -a=hat,b=eks,i=4518,x=0.44713434909121097,y=0.16699429132092636 -a=hat,b=eks,i=4519,x=0.04008702328986802,y=0.6174480537157027 -a=wye,b=eks,i=4520,x=0.21810500990652393,y=0.23695212300002177 -a=wye,b=eks,i=4521,x=0.8007710094864122,y=0.4612346253522104 -a=hat,b=eks,i=4522,x=0.6458119971443835,y=0.21584168033920748 -a=wye,b=zee,i=4523,x=0.05279712720226515,y=0.027511378098411865 -a=zee,b=hat,i=4524,x=0.1957893855808428,y=0.2551266540561208 -a=zee,b=pan,i=4525,x=0.011543703995189447,y=0.22663954461488478 -a=pan,b=pan,i=4526,x=0.04880772479373874,y=0.07481795594892848 -a=pan,b=hat,i=4527,x=0.31836250428860824,y=0.32626988649341593 -a=pan,b=eks,i=4528,x=0.31647815243381505,y=0.9543304719705902 -a=eks,b=eks,i=4529,x=0.6724206236624584,y=0.407679006701397 -a=wye,b=hat,i=4530,x=0.01951408829488066,y=0.8016601846958178 -a=eks,b=zee,i=4531,x=0.34858797365915506,y=0.4282397998858426 -a=pan,b=eks,i=4532,x=0.8877015003398467,y=0.7747761049575923 -a=zee,b=hat,i=4533,x=0.20311049077197163,y=0.9056538940562936 -a=zee,b=eks,i=4534,x=0.042723672522825384,y=0.597559530943149 -a=zee,b=hat,i=4535,x=0.46136202746827326,y=0.42271339711114486 -a=eks,b=wye,i=4536,x=0.009469467689817823,y=0.5905509650490668 -a=hat,b=pan,i=4537,x=0.835149120257535,y=0.33196199258862646 -a=wye,b=pan,i=4538,x=0.7691954303113361,y=0.5906545288840418 -a=wye,b=eks,i=4539,x=0.666121467152889,y=0.7009152639751882 -a=pan,b=pan,i=4540,x=0.8705353878768347,y=0.569382489859167 -a=pan,b=hat,i=4541,x=0.4923885483714453,y=0.9049207586310641 -a=hat,b=wye,i=4542,x=0.27993688119753957,y=0.7737127207588408 -a=zee,b=pan,i=4543,x=0.06684443758496139,y=0.669147012692109 -a=wye,b=zee,i=4544,x=0.41011486047935275,y=0.7628128623557089 -a=zee,b=pan,i=4545,x=0.6170845342886218,y=0.16351912171251637 -a=pan,b=wye,i=4546,x=0.30897074727172746,y=0.07486636973164118 -a=eks,b=eks,i=4547,x=0.03524990401153394,y=0.904683107161618 -a=hat,b=zee,i=4548,x=0.6838256979656141,y=0.9575551645763191 -a=wye,b=eks,i=4549,x=0.9129619062625066,y=0.7815822557674902 -a=wye,b=zee,i=4550,x=0.4016549692069845,y=0.724711080886896 -a=zee,b=zee,i=4551,x=0.5217798806787498,y=0.060225688816844425 -a=hat,b=hat,i=4552,x=0.38397767907558444,y=0.6583775510562486 -a=pan,b=zee,i=4553,x=0.8167689053817359,y=0.28922410230760154 -a=wye,b=wye,i=4554,x=0.9638574684692321,y=0.29330354945805037 -a=zee,b=zee,i=4555,x=0.5750699152551632,y=0.06554938093659102 -a=wye,b=eks,i=4556,x=0.43879872159435107,y=0.5781692813513072 -a=wye,b=pan,i=4557,x=0.43671727561555884,y=0.8495155027864089 -a=zee,b=hat,i=4558,x=0.030771073498329193,y=0.22547664086558517 -a=pan,b=zee,i=4559,x=0.8853445527158975,y=0.9598699991813698 -a=pan,b=pan,i=4560,x=0.022873859395381335,y=0.16717654342761945 -a=zee,b=hat,i=4561,x=0.9373515354219202,y=0.2891538081093269 -a=wye,b=wye,i=4562,x=0.9962200957849251,y=0.7504411563669804 -a=hat,b=eks,i=4563,x=0.05502367054609869,y=0.6444826263272572 -a=zee,b=wye,i=4564,x=0.7531892953023888,y=0.662798570253206 -a=pan,b=wye,i=4565,x=0.2693404460591514,y=0.8267302541357341 -a=wye,b=pan,i=4566,x=0.8263810161941457,y=0.049441142990266584 -a=wye,b=eks,i=4567,x=0.0013320296153030986,y=0.3527351039106079 -a=pan,b=pan,i=4568,x=0.7262006271124115,y=0.2750926075667838 -a=pan,b=hat,i=4569,x=0.6676401567199843,y=0.15611308180709593 -a=hat,b=pan,i=4570,x=0.5538202729746985,y=0.4068149726511291 -a=pan,b=eks,i=4571,x=0.968095869026238,y=0.025471172108070594 -a=eks,b=hat,i=4572,x=0.4698777463924877,y=0.5590684721569192 -a=pan,b=pan,i=4573,x=0.8739437627285006,y=0.29509284815603065 -a=pan,b=pan,i=4574,x=0.8828597588783772,y=0.0029763172734756926 -a=zee,b=zee,i=4575,x=0.4923232521663191,y=0.31138573511811585 -a=pan,b=eks,i=4576,x=0.4634084033597302,y=0.7040687106187243 -a=pan,b=hat,i=4577,x=0.4415962788129276,y=0.8575497231199157 -a=pan,b=hat,i=4578,x=0.6072792806625152,y=0.45767228806970406 -a=hat,b=hat,i=4579,x=0.7716061175886524,y=0.5940949446227113 -a=wye,b=zee,i=4580,x=0.8815091817106934,y=0.19682219276482926 -a=zee,b=pan,i=4581,x=0.6615122130690573,y=0.743282484093763 -a=hat,b=zee,i=4582,x=0.7466772782921713,y=0.6024593387871963 -a=zee,b=zee,i=4583,x=0.7293308998803242,y=0.9194675588274827 -a=pan,b=wye,i=4584,x=0.9785223653345103,y=0.3599874182922952 -a=wye,b=wye,i=4585,x=0.49005088405256925,y=0.19667802308060156 -a=zee,b=eks,i=4586,x=0.07759080031155674,y=0.5800418301347179 -a=wye,b=pan,i=4587,x=0.028648375277809612,y=0.7340705243928477 -a=hat,b=zee,i=4588,x=0.15982614073843593,y=0.29678575429874954 -a=wye,b=zee,i=4589,x=0.7660330001010108,y=0.12214362772060794 -a=hat,b=zee,i=4590,x=0.5798093869980113,y=0.10378695075036093 -a=zee,b=wye,i=4591,x=0.3549198162177106,y=0.15971238689401845 -a=zee,b=zee,i=4592,x=0.3725968594942376,y=0.10170369746035934 -a=wye,b=eks,i=4593,x=0.7856019829313924,y=0.4108035864939361 -a=pan,b=eks,i=4594,x=0.9636076558747869,y=0.6429412934414747 -a=eks,b=zee,i=4595,x=0.6544038361180394,y=0.4941333402391265 -a=pan,b=eks,i=4596,x=0.6771264909006598,y=0.008696187477938766 -a=pan,b=zee,i=4597,x=0.5913051026982411,y=0.41009568634323257 -a=zee,b=hat,i=4598,x=0.8546218618730578,y=0.4453962412371504 -a=pan,b=hat,i=4599,x=0.31929533389085374,y=0.9456168170774322 -a=wye,b=wye,i=4600,x=0.9581114071286606,y=0.07673690685162327 -a=eks,b=eks,i=4601,x=0.17142456675630824,y=0.428244260538891 -a=pan,b=wye,i=4602,x=0.9706134171920786,y=0.2394012508489064 -a=pan,b=pan,i=4603,x=0.7077416345290591,y=0.3940789509138629 -a=wye,b=eks,i=4604,x=0.26884887570750515,y=0.0629227877462456 -a=wye,b=hat,i=4605,x=0.9967036371872702,y=0.9394080649718911 -a=wye,b=zee,i=4606,x=0.4136967828620527,y=0.9691879757554137 -a=wye,b=eks,i=4607,x=0.7882253618539071,y=0.040484731408140906 -a=wye,b=hat,i=4608,x=0.8502136933818653,y=0.22282199291281735 -a=hat,b=hat,i=4609,x=0.3806800313299039,y=0.7432483423888808 -a=eks,b=hat,i=4610,x=0.8546204254968556,y=0.544666096374198 -a=wye,b=zee,i=4611,x=0.9797738948452778,y=0.7539379828966757 -a=zee,b=zee,i=4612,x=0.5658890329943034,y=0.3209865549677199 -a=eks,b=eks,i=4613,x=0.036974707048940014,y=0.13498566781731325 -a=pan,b=zee,i=4614,x=0.4962373115799128,y=0.34690328340466625 -a=hat,b=eks,i=4615,x=0.03988943828313485,y=0.5198278894510299 -a=zee,b=wye,i=4616,x=0.3113084465595777,y=0.5849628571688789 -a=pan,b=wye,i=4617,x=0.6064318491662761,y=0.9709587074540149 -a=eks,b=eks,i=4618,x=0.6067298140262544,y=0.6856518510847851 -a=hat,b=eks,i=4619,x=0.5013319604077514,y=0.09625820792492479 -a=eks,b=eks,i=4620,x=0.9081698767653911,y=0.09914145966043864 -a=zee,b=eks,i=4621,x=0.30992740946284036,y=0.3114230762548156 -a=wye,b=wye,i=4622,x=0.9124025251398724,y=0.9456164182783081 -a=hat,b=pan,i=4623,x=0.8700806062428935,y=0.2702206397600061 -a=wye,b=pan,i=4624,x=0.5833679710036083,y=0.9019285736689665 -a=zee,b=pan,i=4625,x=0.8458203200231942,y=0.5450580672631699 -a=pan,b=pan,i=4626,x=0.8541837089895298,y=0.10662879193504415 -a=pan,b=pan,i=4627,x=0.6949946108264341,y=0.32599427511471524 -a=pan,b=hat,i=4628,x=0.8957043450158336,y=0.5673889892957554 -a=wye,b=hat,i=4629,x=0.8464282723870642,y=0.5202135613238874 -a=wye,b=hat,i=4630,x=0.613215207985136,y=0.3257127644270309 -a=zee,b=hat,i=4631,x=0.9018507034320511,y=0.7039556507979018 -a=pan,b=pan,i=4632,x=0.4889756359426054,y=0.3597265690523318 -a=hat,b=eks,i=4633,x=0.9578525826572483,y=0.14404380765797786 -a=pan,b=zee,i=4634,x=0.3044854324264554,y=0.7688031286868651 -a=eks,b=wye,i=4635,x=0.6963926992471413,y=0.3473111484128578 -a=zee,b=wye,i=4636,x=0.7694758941220707,y=0.18753300419759023 -a=eks,b=zee,i=4637,x=0.016930162668300386,y=0.916668923894452 -a=pan,b=eks,i=4638,x=0.1800152730244199,y=0.8740912343460313 -a=eks,b=eks,i=4639,x=0.36139046295982613,y=0.40696722185592216 -a=wye,b=wye,i=4640,x=0.03629701172915789,y=0.5927800218745649 -a=eks,b=wye,i=4641,x=0.8718989050597648,y=0.39307440967351814 -a=zee,b=hat,i=4642,x=0.3250137468458404,y=0.6558363341062954 -a=zee,b=hat,i=4643,x=0.4795723404826593,y=0.46439187383822056 -a=zee,b=hat,i=4644,x=0.5269030281828351,y=0.5294159733959858 -a=wye,b=zee,i=4645,x=0.09245439495290197,y=0.7686039676164822 -a=pan,b=hat,i=4646,x=0.831713886231876,y=0.2677496071207002 -a=eks,b=zee,i=4647,x=0.42422452591610793,y=0.2126460780549554 -a=eks,b=hat,i=4648,x=0.5207613338836535,y=0.48593533079307305 -a=hat,b=wye,i=4649,x=0.23701829308813094,y=0.8653571299757888 -a=wye,b=pan,i=4650,x=0.20994504688794036,y=0.6907804524857445 -a=eks,b=zee,i=4651,x=0.2453117436615031,y=0.6150127076085181 -a=zee,b=zee,i=4652,x=0.042537661080377376,y=0.8584990883333112 -a=hat,b=pan,i=4653,x=0.21286942433921574,y=0.8764916061320036 -a=pan,b=hat,i=4654,x=0.5285099685069632,y=0.5178008352128922 -a=hat,b=eks,i=4655,x=0.26641282472179073,y=0.5266452477752575 -a=eks,b=pan,i=4656,x=0.6818528635056993,y=0.337950728316578 -a=hat,b=wye,i=4657,x=0.14061995895280166,y=0.47199609775073736 -a=zee,b=zee,i=4658,x=0.6602472108733521,y=0.2687315624525114 -a=wye,b=zee,i=4659,x=0.2520902351101554,y=0.8428783239555871 -a=hat,b=eks,i=4660,x=0.30472363074700515,y=0.07217266625982621 -a=hat,b=wye,i=4661,x=0.2091333254634984,y=0.1548046270754979 -a=eks,b=pan,i=4662,x=0.11981801924487756,y=0.8469445222208282 -a=hat,b=hat,i=4663,x=0.3119827522367612,y=0.4259694252127655 -a=eks,b=hat,i=4664,x=0.3269411701545405,y=0.9376670988013223 -a=pan,b=zee,i=4665,x=0.054344923432058434,y=0.16217922759144587 -a=wye,b=zee,i=4666,x=0.4186702128599753,y=0.2835839275998192 -a=wye,b=zee,i=4667,x=0.0646217379660351,y=0.30530257092910784 -a=zee,b=eks,i=4668,x=0.07870649960682297,y=0.2515794150323323 -a=hat,b=hat,i=4669,x=0.5003476787456538,y=0.6310918883710445 -a=pan,b=hat,i=4670,x=0.6275111165777365,y=0.8054897414350336 -a=pan,b=pan,i=4671,x=0.1499838451712301,y=0.6223414752307141 -a=hat,b=wye,i=4672,x=0.4988884658239877,y=0.9906049192655605 -a=zee,b=eks,i=4673,x=0.984318771878163,y=0.7280796955832692 -a=zee,b=wye,i=4674,x=0.23054557107461504,y=0.19681174789488143 -a=wye,b=eks,i=4675,x=0.7334463313910938,y=0.28306119200330626 -a=eks,b=pan,i=4676,x=0.1423438599979604,y=0.35330918689671975 -a=wye,b=wye,i=4677,x=0.6577383987571024,y=0.15021996734596066 -a=hat,b=zee,i=4678,x=0.9082274952383252,y=0.7405877302837555 -a=eks,b=pan,i=4679,x=0.8074215267431348,y=0.5236668774007812 -a=wye,b=hat,i=4680,x=0.5108382071350746,y=0.47151957178400083 -a=hat,b=wye,i=4681,x=0.9809419297944051,y=0.23507029745163854 -a=eks,b=hat,i=4682,x=0.9342926038131985,y=0.7979695752949024 -a=eks,b=hat,i=4683,x=0.8736202694364024,y=0.38219743850966714 -a=zee,b=pan,i=4684,x=0.44163999038860213,y=0.38504226387550344 -a=pan,b=zee,i=4685,x=0.03027055342778162,y=0.08035681468258382 -a=zee,b=wye,i=4686,x=0.08118893501639246,y=0.27655291599781473 -a=wye,b=hat,i=4687,x=0.06385275336646346,y=0.35108434035108427 -a=pan,b=hat,i=4688,x=0.5644746928123485,y=0.35881287919613414 -a=wye,b=hat,i=4689,x=0.8811472299764586,y=0.603532565127673 -a=hat,b=wye,i=4690,x=0.2892596087785041,y=0.7179425188945073 -a=eks,b=wye,i=4691,x=0.4661213596465832,y=0.6018977897376697 -a=eks,b=wye,i=4692,x=0.6256084558730343,y=0.5912072106343357 -a=eks,b=wye,i=4693,x=0.43739401507823317,y=0.4449591712634142 -a=hat,b=pan,i=4694,x=0.22337135846397238,y=0.6406931174403291 -a=pan,b=wye,i=4695,x=0.39634806245632836,y=0.6355835294701532 -a=eks,b=hat,i=4696,x=0.008662277886696601,y=0.3721538653338412 -a=eks,b=zee,i=4697,x=0.7171113231602343,y=0.7425350749221431 -a=zee,b=zee,i=4698,x=0.9050833916740578,y=0.46132560825719815 -a=eks,b=pan,i=4699,x=0.3986676727991927,y=0.5705940358286782 -a=pan,b=hat,i=4700,x=0.9055844258025669,y=0.7437707529087395 -a=pan,b=zee,i=4701,x=0.8070216695328106,y=0.4694866303836862 -a=zee,b=zee,i=4702,x=0.7415668922687337,y=0.8797752247285192 -a=eks,b=wye,i=4703,x=0.7722596990678992,y=0.7367517235830364 -a=wye,b=pan,i=4704,x=0.9555278566799899,y=0.2423309359426713 -a=pan,b=eks,i=4705,x=0.9264663466646326,y=0.18799757892955882 -a=eks,b=hat,i=4706,x=0.6995046411916459,y=0.9587840493554082 -a=hat,b=wye,i=4707,x=0.7945060726118334,y=0.8708814355187628 -a=eks,b=hat,i=4708,x=0.1778567317636336,y=0.4554107042944405 -a=eks,b=hat,i=4709,x=0.8605269620945222,y=0.9282320361391482 -a=zee,b=pan,i=4710,x=0.7925893623491367,y=0.8373876174093722 -a=eks,b=pan,i=4711,x=0.6921652120265591,y=0.49820807295967395 -a=eks,b=hat,i=4712,x=0.8183219512899657,y=0.4748837712114852 -a=hat,b=zee,i=4713,x=0.3394230162235836,y=0.4370239027445896 -a=hat,b=hat,i=4714,x=0.8405345514548883,y=0.8644132717621533 -a=wye,b=zee,i=4715,x=0.8120809467339879,y=0.44574425551887853 -a=hat,b=pan,i=4716,x=0.012844309530080089,y=0.25779486121957473 -a=hat,b=eks,i=4717,x=0.7365074627250664,y=0.9439422879543493 -a=pan,b=pan,i=4718,x=0.23929472797530638,y=0.15699808756834377 -a=wye,b=hat,i=4719,x=0.9471866108884663,y=0.03869282767938487 -a=pan,b=wye,i=4720,x=0.8444868689691774,y=0.46503509886894867 -a=wye,b=eks,i=4721,x=0.9347768806843397,y=0.8839032510290749 -a=wye,b=wye,i=4722,x=0.3742418961489814,y=0.5186714928696796 -a=pan,b=wye,i=4723,x=0.7424435191645153,y=0.2988557048069972 -a=wye,b=eks,i=4724,x=0.2784537107571192,y=0.9729902650787269 -a=hat,b=wye,i=4725,x=0.07061996836486473,y=0.7738977079370831 -a=zee,b=wye,i=4726,x=0.8269425781542478,y=0.7279915540846144 -a=wye,b=pan,i=4727,x=0.9998228522652893,y=0.19388380502268276 -a=eks,b=pan,i=4728,x=0.0933124028124549,y=0.6002309994378867 -a=pan,b=zee,i=4729,x=0.18970289783165384,y=0.4228791314162068 -a=zee,b=hat,i=4730,x=0.19347150884164055,y=0.37509711156847003 -a=eks,b=zee,i=4731,x=0.8015159150372596,y=0.006137056655737272 -a=zee,b=wye,i=4732,x=0.9567066838864685,y=0.6222637241828745 -a=pan,b=eks,i=4733,x=0.2972122648067026,y=0.8561276270460755 -a=hat,b=eks,i=4734,x=0.4361140296691789,y=0.19415398432919728 -a=eks,b=zee,i=4735,x=0.028008275847919872,y=0.12986606641246612 -a=eks,b=pan,i=4736,x=0.3770691592676825,y=0.7987276999117943 -a=eks,b=hat,i=4737,x=0.6487232074787501,y=0.3406218786292676 -a=pan,b=pan,i=4738,x=0.10422609081686773,y=0.7198350875588949 -a=zee,b=pan,i=4739,x=0.7741427673583083,y=0.26198990214937334 -a=hat,b=wye,i=4740,x=0.1119893643732226,y=0.41788347372200485 -a=hat,b=eks,i=4741,x=0.7241531241241961,y=0.9089044568897544 -a=hat,b=wye,i=4742,x=0.8802453504639547,y=0.7366398321703834 -a=eks,b=pan,i=4743,x=0.2504490581104497,y=0.29547558676954633 -a=hat,b=wye,i=4744,x=0.4979148854618458,y=0.11700636396309227 -a=wye,b=zee,i=4745,x=0.9393988198376061,y=0.485008216753421 -a=eks,b=pan,i=4746,x=0.16989991264520043,y=0.018451772273192057 -a=pan,b=wye,i=4747,x=0.6742534054657287,y=0.2313198886390252 -a=zee,b=pan,i=4748,x=0.7418671304073968,y=0.8575401492075233 -a=wye,b=zee,i=4749,x=0.42654335022770995,y=0.5311170879512087 -a=zee,b=zee,i=4750,x=0.27987943738440046,y=0.6560072393556038 -a=hat,b=pan,i=4751,x=0.5858041848273323,y=0.6295306564064627 -a=zee,b=eks,i=4752,x=0.4429063010177615,y=0.6964425867324696 -a=zee,b=wye,i=4753,x=0.8545851137163856,y=0.9679476038287586 -a=zee,b=wye,i=4754,x=0.0024174510881032063,y=0.8687606547332845 -a=eks,b=hat,i=4755,x=0.7839088793029254,y=0.524722394465856 -a=pan,b=pan,i=4756,x=0.397023046047854,y=0.11000986851499284 -a=wye,b=eks,i=4757,x=0.21991834430842194,y=0.3045979240462181 -a=hat,b=hat,i=4758,x=0.3227532114958719,y=0.8948973181698502 -a=pan,b=wye,i=4759,x=0.26645602877267305,y=0.7437714335312278 -a=zee,b=wye,i=4760,x=0.022667005941863883,y=0.45092868070487113 -a=zee,b=zee,i=4761,x=0.5717912178641216,y=0.35870172894832364 -a=zee,b=hat,i=4762,x=0.9059466160415109,y=0.6087785388744085 -a=zee,b=pan,i=4763,x=0.9251602172892174,y=0.40701572328742064 -a=zee,b=wye,i=4764,x=0.31384490226563877,y=0.7399150124011242 -a=zee,b=zee,i=4765,x=0.9455569776929973,y=0.8604499298561917 -a=zee,b=eks,i=4766,x=0.37773136340995606,y=0.25694678545170857 -a=eks,b=eks,i=4767,x=0.7219583517207702,y=0.727638969023518 -a=zee,b=pan,i=4768,x=0.08069188699987828,y=0.976850177257017 -a=zee,b=wye,i=4769,x=0.9897615767481157,y=0.6975316151559802 -a=eks,b=hat,i=4770,x=0.23499057343433494,y=0.47659932458800036 -a=wye,b=hat,i=4771,x=0.1844047653981028,y=0.022663675164210306 -a=zee,b=wye,i=4772,x=0.09271907588361772,y=0.13142402431280997 -a=eks,b=eks,i=4773,x=0.4725220407504178,y=0.9526498802931831 -a=hat,b=pan,i=4774,x=0.3043981591451792,y=0.7226259220082152 -a=eks,b=eks,i=4775,x=0.1884342557611145,y=0.8408029444627654 -a=hat,b=hat,i=4776,x=0.2338057751520678,y=0.09800686529861335 -a=wye,b=eks,i=4777,x=0.7891590901274228,y=0.34487105920096073 -a=zee,b=pan,i=4778,x=0.3599347922656181,y=0.18218338698595427 -a=hat,b=hat,i=4779,x=0.5478941318063015,y=0.039942288716842134 -a=eks,b=pan,i=4780,x=0.5515560102138437,y=0.9790752715442088 -a=pan,b=zee,i=4781,x=0.9530344417320495,y=0.5854254757860599 -a=zee,b=eks,i=4782,x=0.2679740964392081,y=0.9539737990088547 -a=zee,b=hat,i=4783,x=0.8937130637825316,y=0.9482001237924185 -a=eks,b=zee,i=4784,x=0.535394341606814,y=0.9507496372757723 -a=hat,b=pan,i=4785,x=0.6905839897107999,y=0.7545488329990303 -a=hat,b=wye,i=4786,x=0.01916979841839017,y=0.2780999914884037 -a=hat,b=zee,i=4787,x=0.9707632375104736,y=0.823966840635361 -a=zee,b=eks,i=4788,x=0.2900344019459282,y=0.4551744845405584 -a=eks,b=zee,i=4789,x=0.581964402755552,y=0.6562137540702333 -a=eks,b=wye,i=4790,x=0.5159650104250221,y=0.6583847382580487 -a=pan,b=pan,i=4791,x=0.4314747391635376,y=0.11719605119566623 -a=eks,b=pan,i=4792,x=0.25200941717038683,y=0.5319239571062138 -a=pan,b=wye,i=4793,x=0.8596672453072937,y=0.7203822316562272 -a=zee,b=pan,i=4794,x=0.41119242720559135,y=0.16288056185655064 -a=eks,b=hat,i=4795,x=0.3563187687683087,y=0.9628268767119371 -a=hat,b=hat,i=4796,x=0.8166219529056433,y=0.38174138297770366 -a=hat,b=wye,i=4797,x=0.6239839123252174,y=0.5446595433698003 -a=pan,b=wye,i=4798,x=0.5914484609361321,y=0.5863799669381212 -a=zee,b=eks,i=4799,x=0.05246384333604992,y=0.7084334011458191 -a=hat,b=wye,i=4800,x=0.7975814555638998,y=0.6742547886299404 -a=eks,b=zee,i=4801,x=0.32122401484315466,y=0.17580532480506172 -a=hat,b=pan,i=4802,x=0.9532078757744794,y=0.11431895466047837 -a=eks,b=eks,i=4803,x=0.07646493070387805,y=0.43572994178375957 -a=pan,b=hat,i=4804,x=0.7521042104003381,y=0.40785444565501394 -a=hat,b=pan,i=4805,x=0.2078967635625505,y=0.39646961279273085 -a=wye,b=wye,i=4806,x=0.2900119081724013,y=0.7387990125329715 -a=zee,b=wye,i=4807,x=0.5734922188510542,y=0.9110138243945486 -a=wye,b=wye,i=4808,x=0.5888053656056721,y=0.6357658487621642 -a=hat,b=wye,i=4809,x=0.9209565722669064,y=0.6387306072748612 -a=eks,b=hat,i=4810,x=0.5922647221870971,y=0.8442189902394986 -a=wye,b=zee,i=4811,x=0.03606766464192224,y=0.6770940604237418 -a=wye,b=wye,i=4812,x=0.6090893281675697,y=0.647518662887554 -a=eks,b=hat,i=4813,x=0.5365520827981886,y=0.3202367220791762 -a=eks,b=eks,i=4814,x=0.1473763964352245,y=0.8033805314306441 -a=zee,b=eks,i=4815,x=0.23445194234627598,y=0.26893786383591456 -a=eks,b=wye,i=4816,x=0.1147712927157829,y=0.7402057160513233 -a=zee,b=zee,i=4817,x=0.23202362739606153,y=0.47886038007736564 -a=wye,b=wye,i=4818,x=0.7928418369663099,y=0.46501269022958036 -a=eks,b=zee,i=4819,x=0.712974515799127,y=0.542449640039289 -a=zee,b=wye,i=4820,x=0.3079653233324052,y=0.6574173411380181 -a=eks,b=pan,i=4821,x=0.09797648760110378,y=0.1605809921671595 -a=eks,b=pan,i=4822,x=0.7899521961417237,y=0.29314917908691485 -a=wye,b=hat,i=4823,x=0.581757236497391,y=0.9463973717007303 -a=hat,b=hat,i=4824,x=0.40413977500334364,y=0.08865258409882204 -a=wye,b=hat,i=4825,x=0.7001704003542419,y=0.7416812627335253 -a=zee,b=wye,i=4826,x=0.8846834351985541,y=0.9987381458494847 -a=wye,b=zee,i=4827,x=0.9763864041558291,y=0.6651833167661081 -a=eks,b=pan,i=4828,x=0.3701118364091578,y=0.929356390393571 -a=wye,b=hat,i=4829,x=0.5458229710063858,y=0.12382895782525949 -a=zee,b=hat,i=4830,x=0.5163276995322134,y=0.4142396117545545 -a=pan,b=pan,i=4831,x=0.6131916476098028,y=0.7258426490475796 -a=pan,b=pan,i=4832,x=0.6315103295350951,y=0.5044543655861339 -a=eks,b=zee,i=4833,x=0.9679369605057206,y=0.011684326982985715 -a=zee,b=wye,i=4834,x=0.34898673117720225,y=0.6580602623791368 -a=eks,b=wye,i=4835,x=0.4939841533621645,y=0.5809417229170144 -a=wye,b=pan,i=4836,x=0.569545208750187,y=0.7786619129324108 -a=zee,b=wye,i=4837,x=0.5226423611496498,y=0.9996700213544367 -a=eks,b=hat,i=4838,x=0.935982420664342,y=0.8799965660826473 -a=wye,b=wye,i=4839,x=0.6500461572660748,y=0.44309281124092303 -a=hat,b=zee,i=4840,x=0.4899151526577582,y=0.7548638962729715 -a=pan,b=wye,i=4841,x=0.9467012654543959,y=0.4850494160239309 -a=zee,b=pan,i=4842,x=0.30320721599497247,y=0.5095143023332701 -a=hat,b=hat,i=4843,x=0.17685636300959084,y=0.7787222148601067 -a=wye,b=zee,i=4844,x=0.626255827932442,y=0.4064381262515122 -a=pan,b=zee,i=4845,x=0.28060256724829724,y=0.1194472053493133 -a=hat,b=wye,i=4846,x=0.8368724870819061,y=0.28659871919539215 -a=hat,b=wye,i=4847,x=0.4904015837947624,y=0.7008487005892795 -a=pan,b=pan,i=4848,x=0.67625412710794,y=0.44913802116649393 -a=eks,b=zee,i=4849,x=0.8081214809760484,y=0.4375026041190979 -a=eks,b=eks,i=4850,x=0.2525590429487127,y=0.36945113778662786 -a=hat,b=eks,i=4851,x=0.5131509545709081,y=0.583688721156048 -a=zee,b=eks,i=4852,x=0.014141655432134415,y=0.5189268194067536 -a=wye,b=eks,i=4853,x=0.8412950512846047,y=0.25597362111669464 -a=eks,b=wye,i=4854,x=0.12400039159204757,y=0.5713605164804926 -a=wye,b=eks,i=4855,x=0.8743253482906079,y=0.7740900498864154 -a=eks,b=zee,i=4856,x=0.9765509957513644,y=0.06071911475075953 -a=pan,b=wye,i=4857,x=0.23806525172795734,y=0.2959143584631805 -a=pan,b=pan,i=4858,x=0.9189791410736298,y=0.7770463990190287 -a=pan,b=zee,i=4859,x=0.8322629927658091,y=0.34582111363584955 -a=zee,b=eks,i=4860,x=0.3338609486281813,y=0.3484284682131591 -a=zee,b=hat,i=4861,x=0.13328569444496707,y=0.4177841139240035 -a=zee,b=eks,i=4862,x=0.48622017397025397,y=0.07896067004609653 -a=zee,b=wye,i=4863,x=0.6240325596862799,y=0.2809015820805495 -a=wye,b=pan,i=4864,x=0.29934656970455364,y=0.401161898451611 -a=wye,b=hat,i=4865,x=0.33964644206576833,y=0.37831409639409463 -a=pan,b=hat,i=4866,x=0.3348192796730043,y=0.39422602502766824 -a=hat,b=zee,i=4867,x=0.8800967275591628,y=0.869121595376977 -a=pan,b=eks,i=4868,x=0.08813504131014349,y=0.8615201735498272 -a=hat,b=hat,i=4869,x=0.03137488493693985,y=0.6013253974236795 -a=zee,b=zee,i=4870,x=0.5723345813434529,y=0.5920424414132134 -a=wye,b=hat,i=4871,x=0.42866884650575776,y=0.8587406078406857 -a=wye,b=pan,i=4872,x=0.8048299563371534,y=0.09309848925430309 -a=wye,b=hat,i=4873,x=0.48343329104464405,y=0.684262350564715 -a=eks,b=pan,i=4874,x=0.9190574216192423,y=0.023243819371963403 -a=pan,b=zee,i=4875,x=0.6013577540137748,y=0.636284103659697 -a=hat,b=eks,i=4876,x=0.876674932281404,y=0.09417500045463179 -a=wye,b=hat,i=4877,x=0.3699653574585806,y=0.4481319838637625 -a=eks,b=zee,i=4878,x=0.8140883903787601,y=0.9675148391636573 -a=eks,b=eks,i=4879,x=0.8227355186912324,y=0.754836723664535 -a=hat,b=wye,i=4880,x=0.5107655326943182,y=0.429814017179746 -a=wye,b=wye,i=4881,x=0.8494740781256328,y=0.4865120606762955 -a=eks,b=wye,i=4882,x=0.5564517747676477,y=0.8364351449356273 -a=pan,b=hat,i=4883,x=0.8723128492154898,y=0.44043984808323666 -a=pan,b=hat,i=4884,x=0.9402178619522376,y=0.19405443014027346 -a=eks,b=eks,i=4885,x=0.8707313650863101,y=0.8057609437403466 -a=zee,b=hat,i=4886,x=0.7016030425978176,y=0.10558873487974474 -a=hat,b=zee,i=4887,x=0.19592751855539559,y=0.6245017403424943 -a=wye,b=pan,i=4888,x=0.24417888243946928,y=0.4591742086366801 -a=eks,b=wye,i=4889,x=0.9179229941131368,y=0.2037862299046369 -a=eks,b=wye,i=4890,x=0.04910880060108913,y=0.07316217290218352 -a=hat,b=eks,i=4891,x=0.2297927732533699,y=0.6559737139197993 -a=eks,b=wye,i=4892,x=0.630140714403855,y=0.4123205327848799 -a=eks,b=zee,i=4893,x=0.8863621874744464,y=0.35341030613050206 -a=wye,b=eks,i=4894,x=0.08956997835221292,y=0.15153433659257443 -a=wye,b=eks,i=4895,x=0.2302595629324965,y=0.2862207000255006 -a=eks,b=eks,i=4896,x=0.595542985856601,y=0.6247689899970194 -a=zee,b=eks,i=4897,x=0.7608028013428353,y=0.878174748817996 -a=pan,b=wye,i=4898,x=0.40450598472844423,y=0.9381773198691041 -a=eks,b=zee,i=4899,x=0.1567102404262226,y=0.2213311716892986 -a=hat,b=hat,i=4900,x=0.8901137791212611,y=0.6090349204378238 -a=eks,b=hat,i=4901,x=0.4107962861135135,y=0.6382257944674624 -a=zee,b=pan,i=4902,x=0.699059960351012,y=0.9885800960251768 -a=zee,b=pan,i=4903,x=0.8266877732317284,y=0.0677848179065984 -a=hat,b=wye,i=4904,x=0.30857036671389493,y=0.21668637382948186 -a=hat,b=pan,i=4905,x=0.6411579594900462,y=0.5351923498013205 -a=eks,b=pan,i=4906,x=0.6854190139070013,y=0.8299360694533708 -a=pan,b=hat,i=4907,x=0.5936171298524064,y=0.7041056598923683 -a=hat,b=eks,i=4908,x=0.8503470988840566,y=0.6331693431984986 -a=zee,b=eks,i=4909,x=0.9517994594813314,y=0.07539953012409928 -a=zee,b=eks,i=4910,x=0.4535445737616459,y=0.8218048881320029 -a=pan,b=wye,i=4911,x=0.4369913287175713,y=0.4720871164245992 -a=eks,b=hat,i=4912,x=0.9940947899133816,y=0.4687982909569981 -a=zee,b=wye,i=4913,x=0.7975684270658338,y=0.6973895935548693 -a=zee,b=hat,i=4914,x=0.8248078318753365,y=0.24648082781434477 -a=pan,b=hat,i=4915,x=0.5972128798923884,y=0.02932462768715416 -a=zee,b=wye,i=4916,x=0.6624686517748942,y=0.8016741542650369 -a=pan,b=pan,i=4917,x=0.24891816767946373,y=0.7798969646202224 -a=zee,b=zee,i=4918,x=0.641375026211945,y=0.8347424300045329 -a=wye,b=eks,i=4919,x=0.22099244372718618,y=0.4659468290849962 -a=eks,b=zee,i=4920,x=0.7311583488804345,y=0.07752342335337659 -a=hat,b=hat,i=4921,x=0.5785465847836638,y=0.6908978810578349 -a=pan,b=pan,i=4922,x=0.7647463305911298,y=0.28073564029507714 -a=pan,b=pan,i=4923,x=0.7385181536058433,y=0.361414367741285 -a=hat,b=pan,i=4924,x=0.40224441655955634,y=0.19530268026233755 -a=hat,b=hat,i=4925,x=0.653842164262253,y=0.6280602144296272 -a=eks,b=hat,i=4926,x=0.5370983012158481,y=0.8265755341115193 -a=pan,b=hat,i=4927,x=0.20003498013779974,y=0.33067633213900816 -a=hat,b=eks,i=4928,x=0.2616862784842936,y=0.8976330171178399 -a=zee,b=wye,i=4929,x=0.6597792701685063,y=0.5747306201637469 -a=wye,b=zee,i=4930,x=0.7005469670714589,y=0.8590565664901815 -a=eks,b=wye,i=4931,x=0.056783946256193096,y=0.13845635335075446 -a=zee,b=hat,i=4932,x=0.17914823686110226,y=0.3724424181901871 -a=wye,b=eks,i=4933,x=0.35047905702830917,y=0.03585739880658767 -a=wye,b=hat,i=4934,x=0.5052702257066015,y=0.26639197043310225 -a=hat,b=pan,i=4935,x=0.7192181204742805,y=0.3595231416956127 -a=pan,b=pan,i=4936,x=0.2268254080621852,y=0.4964858179117778 -a=zee,b=wye,i=4937,x=0.6231176411317095,y=0.25674942672821843 -a=pan,b=wye,i=4938,x=0.8307759374051367,y=0.19772109525743065 -a=pan,b=pan,i=4939,x=0.9918663359881192,y=0.3908108219044335 -a=eks,b=wye,i=4940,x=0.3939161722668897,y=0.9425714270572593 -a=pan,b=wye,i=4941,x=0.684790210390548,y=0.9744745064587994 -a=eks,b=zee,i=4942,x=0.7765052392233155,y=0.12663912158745527 -a=pan,b=pan,i=4943,x=0.27521613107535237,y=0.035785181333226945 -a=zee,b=pan,i=4944,x=0.5842395564913692,y=0.011897528078530284 -a=hat,b=pan,i=4945,x=0.28514048743680753,y=0.07363097335604496 -a=hat,b=wye,i=4946,x=0.4057436295571034,y=0.571241351522998 -a=pan,b=pan,i=4947,x=0.08892185709515954,y=0.824188422644117 -a=wye,b=hat,i=4948,x=0.31710176239516497,y=0.2704638711875881 -a=hat,b=hat,i=4949,x=0.7395993281771386,y=0.5735970605731027 -a=zee,b=wye,i=4950,x=0.9215266366214452,y=0.4500407010606755 -a=pan,b=zee,i=4951,x=0.9198627133436097,y=0.2906368510730867 -a=zee,b=eks,i=4952,x=0.3969923775629448,y=0.22024693929882533 -a=hat,b=eks,i=4953,x=0.5154408810016854,y=0.7038009086382059 -a=wye,b=hat,i=4954,x=0.7843273989738635,y=0.3830263696806163 -a=wye,b=hat,i=4955,x=0.8340489175824841,y=0.6288838568483295 -a=eks,b=zee,i=4956,x=0.7811008985162822,y=0.8018574276178609 -a=eks,b=pan,i=4957,x=0.19948892249539518,y=0.6412104115690623 -a=hat,b=pan,i=4958,x=0.32954001616237283,y=0.13809011794903436 -a=hat,b=wye,i=4959,x=0.3753128948010216,y=0.47542625730960586 -a=pan,b=zee,i=4960,x=0.775513146568018,y=0.10589570588100916 -a=hat,b=hat,i=4961,x=0.4416884389198312,y=0.9511653213275143 -a=zee,b=wye,i=4962,x=0.3532053262185273,y=0.5274524054522398 -a=pan,b=hat,i=4963,x=0.7498291735257391,y=0.2463257969663506 -a=eks,b=hat,i=4964,x=0.9386114992431355,y=0.39299390498123243 -a=zee,b=hat,i=4965,x=0.45139611357151777,y=0.38795035866424066 -a=wye,b=pan,i=4966,x=0.07045237248114167,y=0.8099864640689171 -a=wye,b=hat,i=4967,x=0.24118009132354112,y=0.1629785769528157 -a=hat,b=wye,i=4968,x=0.04728174638088167,y=0.24887900862466006 -a=zee,b=zee,i=4969,x=0.04313535474378283,y=0.9961893037121993 -a=wye,b=zee,i=4970,x=0.64845292806442,y=0.0783662989719438 -a=wye,b=hat,i=4971,x=0.1358347479828308,y=0.5733638726371927 -a=zee,b=pan,i=4972,x=0.8445417535581274,y=0.5401648117511082 -a=pan,b=wye,i=4973,x=0.8602817547452486,y=0.3630459570585407 -a=pan,b=zee,i=4974,x=0.7126917418857502,y=0.45078360189374256 -a=hat,b=hat,i=4975,x=0.8793776042522701,y=0.27141043268942633 -a=zee,b=zee,i=4976,x=0.05992605295674014,y=0.7074936036971408 -a=hat,b=wye,i=4977,x=0.346394513794262,y=0.29350246124167567 -a=pan,b=wye,i=4978,x=0.5095513696287198,y=0.6796749104642862 -a=wye,b=pan,i=4979,x=0.21965536908012684,y=0.9260144908739824 -a=eks,b=wye,i=4980,x=0.7947621013643159,y=0.3813039850148131 -a=eks,b=hat,i=4981,x=0.6239763460715818,y=0.5785443365814726 -a=wye,b=zee,i=4982,x=0.23421805243604576,y=0.8666355498558119 -a=hat,b=pan,i=4983,x=0.8485485930791395,y=0.4491405780816806 -a=zee,b=wye,i=4984,x=0.052468448246404065,y=0.7811213755089573 -a=wye,b=pan,i=4985,x=0.7439428126731077,y=0.9235490434329954 -a=zee,b=zee,i=4986,x=0.8301353367964757,y=0.8649908229299215 -a=hat,b=pan,i=4987,x=0.7155127400138539,y=0.725960059877104 -a=hat,b=zee,i=4988,x=0.18338886820824507,y=0.8754893547448714 -a=eks,b=zee,i=4989,x=0.018601982778751247,y=0.7913367608240889 -a=pan,b=zee,i=4990,x=0.6245117285311684,y=0.5893294863439663 -a=hat,b=eks,i=4991,x=0.8595121491036393,y=0.03409935768812744 -a=pan,b=eks,i=4992,x=0.30073741634815365,y=0.27875382911011104 -a=hat,b=zee,i=4993,x=0.5620368555651936,y=0.11559735452435582 -a=pan,b=zee,i=4994,x=0.46131994902690476,y=0.9908240648244072 -a=eks,b=eks,i=4995,x=0.13302596047508553,y=0.6892154279564321 -a=pan,b=pan,i=4996,x=0.13517161511402043,y=0.8982044069226925 -a=zee,b=hat,i=4997,x=0.5678552312876715,y=0.135724108125433 -a=pan,b=hat,i=4998,x=0.9535726959631937,y=0.8197092073820271 -a=hat,b=hat,i=4999,x=0.20718170417583293,y=0.15443490334276233 -a=eks,b=eks,i=5000,x=0.5474103987606213,y=0.8639022623566207 -a=zee,b=wye,i=5001,x=0.08843009472207297,y=0.14945328753720988 -a=wye,b=zee,i=5002,x=0.11843248048480792,y=0.10564749120283823 -a=pan,b=pan,i=5003,x=0.4789366550469353,y=0.22717511611934216 -a=eks,b=wye,i=5004,x=0.47636937977487326,y=0.2810082791040678 -a=pan,b=wye,i=5005,x=0.6626206294858628,y=0.9073394670955045 -a=zee,b=hat,i=5006,x=0.19063843659030766,y=0.9540528860502674 -a=pan,b=eks,i=5007,x=0.32167311196502024,y=0.9736668589456996 -a=wye,b=wye,i=5008,x=0.03995088246162504,y=0.8906248987030765 -a=zee,b=eks,i=5009,x=0.03028572303145005,y=0.9955507546832659 -a=zee,b=eks,i=5010,x=0.09758243590212268,y=0.9326749078724424 -a=wye,b=zee,i=5011,x=0.5166258594604775,y=0.31080741827085223 -a=hat,b=zee,i=5012,x=0.10474935534605045,y=0.8820142826206279 -a=eks,b=eks,i=5013,x=0.6206929828322025,y=0.31290830603904707 -a=eks,b=pan,i=5014,x=0.7386573050111648,y=0.9236218998819093 -a=wye,b=wye,i=5015,x=0.2541399902465252,y=0.9389113315138905 -a=pan,b=eks,i=5016,x=0.4869636506082311,y=0.9502946331199825 -a=zee,b=zee,i=5017,x=0.5038628336682738,y=0.6629947699756096 -a=pan,b=hat,i=5018,x=0.888380448419866,y=0.9524601673710467 -a=hat,b=pan,i=5019,x=0.33990101411005635,y=0.4348664315239562 -a=zee,b=wye,i=5020,x=0.3672167922652847,y=0.3368467808484725 -a=wye,b=zee,i=5021,x=0.07663456505244592,y=0.2631577836245168 -a=pan,b=hat,i=5022,x=0.060489795371573285,y=0.8285572517841496 -a=hat,b=wye,i=5023,x=0.7884614415246883,y=0.7586781551216389 -a=pan,b=hat,i=5024,x=0.20846872150137863,y=0.2990773668794384 -a=pan,b=eks,i=5025,x=0.588830614588479,y=0.21537813765089953 -a=eks,b=eks,i=5026,x=0.12876049793274924,y=0.15585641140542594 -a=eks,b=pan,i=5027,x=0.7572211331764787,y=0.2325134648801609 -a=eks,b=zee,i=5028,x=0.35386542107386076,y=0.37117012291309726 -a=eks,b=zee,i=5029,x=0.6649005742152306,y=0.968640074749029 -a=zee,b=zee,i=5030,x=0.5875090511863751,y=0.2797909799076582 -a=pan,b=eks,i=5031,x=0.6958326538393494,y=0.8708243653761277 -a=eks,b=hat,i=5032,x=0.2945439456101079,y=0.15728143751762003 -a=zee,b=pan,i=5033,x=0.974924650628186,y=0.9669570839581866 -a=zee,b=zee,i=5034,x=0.9203642855427807,y=0.5206651807226769 -a=eks,b=wye,i=5035,x=0.7880820779075502,y=0.7490003085045434 -a=pan,b=eks,i=5036,x=0.6669037309103186,y=0.7852898502819553 -a=eks,b=hat,i=5037,x=0.3861256788895815,y=0.9849326988419349 -a=zee,b=eks,i=5038,x=0.27646436821800646,y=0.966795943629766 -a=pan,b=hat,i=5039,x=0.05805817405705915,y=0.9932179958604398 -a=zee,b=wye,i=5040,x=0.8804560258917605,y=0.5859741175246163 -a=pan,b=wye,i=5041,x=0.8215150463068943,y=0.41746899820589767 -a=pan,b=zee,i=5042,x=0.5160594808754981,y=0.34038151643511527 -a=zee,b=pan,i=5043,x=0.4729643897380491,y=0.8082796095448785 -a=wye,b=eks,i=5044,x=0.944933980409295,y=0.7127158343146003 -a=eks,b=pan,i=5045,x=0.10534087226240663,y=0.7542791199133174 -a=zee,b=pan,i=5046,x=0.43365029209841155,y=0.7392132819618191 -a=eks,b=pan,i=5047,x=0.9240822180479168,y=0.4314552821051867 -a=pan,b=zee,i=5048,x=0.7380043154543273,y=0.6241669393170018 -a=hat,b=wye,i=5049,x=0.6158161626836199,y=0.23107643291636182 -a=zee,b=pan,i=5050,x=0.5149206518156693,y=0.443722826592738 -a=zee,b=zee,i=5051,x=0.10806215838843414,y=0.8316091936418926 -a=zee,b=eks,i=5052,x=0.13123538643662702,y=0.8993374561672973 -a=hat,b=hat,i=5053,x=0.023117725750200657,y=0.033915988824823384 -a=zee,b=pan,i=5054,x=0.32314928212370087,y=0.05688167384675946 -a=wye,b=wye,i=5055,x=0.3342612127307919,y=0.42233407978529247 -a=hat,b=pan,i=5056,x=0.9666322975798146,y=0.17947032558912945 -a=wye,b=pan,i=5057,x=0.6923954779265878,y=0.034012875290441835 -a=pan,b=hat,i=5058,x=0.3825906955163786,y=0.8103254262396773 -a=zee,b=zee,i=5059,x=0.11722281926454714,y=0.4784698788530096 -a=pan,b=wye,i=5060,x=0.3993713904293549,y=0.8630955008829282 -a=hat,b=hat,i=5061,x=0.8982925202936236,y=0.5153152768869278 -a=pan,b=wye,i=5062,x=0.6541733479114709,y=0.14435606729689698 -a=hat,b=eks,i=5063,x=0.7404726614057833,y=0.14934213540808206 -a=eks,b=hat,i=5064,x=0.11826065449979817,y=0.44361936119890544 -a=eks,b=pan,i=5065,x=0.16113803077069544,y=0.1931224993069398 -a=pan,b=zee,i=5066,x=0.160970845859988,y=0.3653498317855951 -a=wye,b=pan,i=5067,x=0.984014519910755,y=0.1085442049474844 -a=zee,b=zee,i=5068,x=0.513447706607767,y=0.9552034872186853 -a=zee,b=pan,i=5069,x=0.9699280626129259,y=0.054007659482251835 -a=zee,b=zee,i=5070,x=0.3974043085931761,y=0.04564461949638321 -a=zee,b=wye,i=5071,x=0.8135506068560597,y=0.9608362809012473 -a=hat,b=pan,i=5072,x=0.9182632141669294,y=0.43231306945460934 -a=eks,b=wye,i=5073,x=0.6147484385420419,y=0.5363878643299302 -a=pan,b=eks,i=5074,x=0.5845946846241253,y=0.6243144568720979 -a=pan,b=eks,i=5075,x=0.06225295939318909,y=0.47296164563217147 -a=eks,b=eks,i=5076,x=0.7982506064893715,y=0.35691237251141883 -a=wye,b=eks,i=5077,x=0.231763398457011,y=0.29533799083169177 -a=pan,b=pan,i=5078,x=0.7379292282342623,y=0.32576070412274116 -a=eks,b=wye,i=5079,x=0.4620414482111399,y=0.10454449264714505 -a=eks,b=pan,i=5080,x=0.4154239126338921,y=0.1558721394610474 -a=zee,b=pan,i=5081,x=0.38422127165844955,y=0.6011019199719426 -a=zee,b=eks,i=5082,x=0.12455848010524884,y=0.970273373226025 -a=wye,b=pan,i=5083,x=0.598195485668647,y=0.7711986200741965 -a=eks,b=hat,i=5084,x=0.5007295834146884,y=0.028607275454148873 -a=pan,b=eks,i=5085,x=0.6467927352142951,y=0.6809546997794357 -a=hat,b=wye,i=5086,x=0.5496362637078044,y=0.2720688549660476 -a=zee,b=zee,i=5087,x=0.10493923293046115,y=0.4813239698030355 -a=eks,b=eks,i=5088,x=0.8414465852290272,y=0.22833809125034366 -a=eks,b=wye,i=5089,x=0.27190062244408597,y=0.8657800314514896 -a=pan,b=pan,i=5090,x=0.6064110590077285,y=0.36771074250450764 -a=zee,b=eks,i=5091,x=0.6465716391447923,y=0.23897122778060764 -a=eks,b=pan,i=5092,x=0.14584747968792888,y=0.19250348835022613 -a=hat,b=wye,i=5093,x=0.06193876102851703,y=0.7031996658938712 -a=eks,b=hat,i=5094,x=0.490742515210689,y=0.8308001526807453 -a=pan,b=zee,i=5095,x=0.12743414057293911,y=0.3674063708637675 -a=zee,b=pan,i=5096,x=0.5190322323030374,y=0.3578341596299308 -a=eks,b=wye,i=5097,x=0.33724586909672605,y=0.2808209264792111 -a=zee,b=pan,i=5098,x=0.5191394718493332,y=0.6948029406893036 -a=pan,b=eks,i=5099,x=0.4686142873190169,y=0.47194949482921567 -a=wye,b=pan,i=5100,x=0.5289724539988195,y=0.45192202668859927 -a=eks,b=hat,i=5101,x=0.05611052621758694,y=0.14551172850676686 -a=hat,b=hat,i=5102,x=0.28592095486470515,y=0.5702639619125038 -a=hat,b=eks,i=5103,x=0.45909975903968236,y=0.8370518995297732 -a=zee,b=hat,i=5104,x=0.12383004586365431,y=0.25661110382216856 -a=zee,b=wye,i=5105,x=0.5972154159415002,y=0.03575292723673351 -a=pan,b=wye,i=5106,x=0.44560649854859324,y=0.44398213053605406 -a=pan,b=eks,i=5107,x=0.2991869218909077,y=0.4855377015585889 -a=pan,b=zee,i=5108,x=0.8696312098499749,y=0.9234420344814674 -a=eks,b=pan,i=5109,x=0.6347308371468083,y=0.1326692680255398 -a=eks,b=wye,i=5110,x=0.055715443104116136,y=0.4615507678180293 -a=wye,b=hat,i=5111,x=0.14260896559625547,y=0.2842155054761949 -a=eks,b=hat,i=5112,x=0.868450337333343,y=0.8706206691563101 -a=zee,b=wye,i=5113,x=0.8961064659188982,y=0.1944648523597512 -a=wye,b=eks,i=5114,x=0.44892526756143925,y=0.5497795546938405 -a=wye,b=pan,i=5115,x=0.4740055676174042,y=0.7911350546389597 -a=pan,b=hat,i=5116,x=0.8762799268435709,y=0.9446805166366606 -a=wye,b=zee,i=5117,x=0.7818146150023622,y=0.3854558191994354 -a=wye,b=pan,i=5118,x=0.49177947702902347,y=0.7423017808370791 -a=wye,b=pan,i=5119,x=0.4794067150556538,y=0.07923269424861734 -a=wye,b=wye,i=5120,x=0.7036317641291522,y=0.25076154186882316 -a=pan,b=pan,i=5121,x=0.8862196092737421,y=0.0033279610366836465 -a=pan,b=wye,i=5122,x=0.3687043552254645,y=0.8549560734268002 -a=zee,b=pan,i=5123,x=0.6515686983034052,y=0.5100953103470156 -a=hat,b=zee,i=5124,x=0.8484226442959659,y=0.3697927989244223 -a=zee,b=zee,i=5125,x=0.4116570693381614,y=0.8943311044914664 -a=eks,b=wye,i=5126,x=0.9547804139837082,y=0.47195131805052704 -a=eks,b=pan,i=5127,x=0.011993047445383431,y=0.7287085495775942 -a=wye,b=zee,i=5128,x=0.07513405469493029,y=0.9154830290251537 -a=zee,b=zee,i=5129,x=0.12609531649583638,y=0.44052343410884454 -a=hat,b=wye,i=5130,x=0.7684246903338762,y=0.23751976841777223 -a=hat,b=hat,i=5131,x=0.8922493612645849,y=0.2882212197666263 -a=zee,b=pan,i=5132,x=0.33080234532260044,y=0.3096178521788119 -a=hat,b=wye,i=5133,x=0.3942617617355668,y=0.8686679943940434 -a=zee,b=wye,i=5134,x=0.2827895360020647,y=0.2448957006369109 -a=pan,b=hat,i=5135,x=0.09957083263754218,y=0.5980806620300303 -a=wye,b=eks,i=5136,x=0.4056324583379335,y=0.08334576336977417 -a=hat,b=eks,i=5137,x=0.878238719282208,y=0.6491135241981707 -a=wye,b=hat,i=5138,x=0.06783170016557316,y=0.4197736525433723 -a=zee,b=hat,i=5139,x=0.301521500457932,y=0.7493817768168342 -a=hat,b=pan,i=5140,x=0.3051559696668491,y=0.06338171371155699 -a=hat,b=pan,i=5141,x=0.24126630734948107,y=0.3415400162111678 -a=zee,b=zee,i=5142,x=0.5053797938498257,y=0.6943665465448414 -a=pan,b=wye,i=5143,x=0.2455006451228895,y=0.2381483502091848 -a=eks,b=zee,i=5144,x=0.048487900564839426,y=0.7986829177323632 -a=zee,b=eks,i=5145,x=0.943348462297874,y=0.49699730029153877 -a=zee,b=wye,i=5146,x=0.31739948115727923,y=0.6000335929359446 -a=pan,b=eks,i=5147,x=0.20821590282748392,y=0.05180957502134165 -a=zee,b=wye,i=5148,x=0.6971578309400973,y=0.05130727558151871 -a=zee,b=zee,i=5149,x=0.01730237891149944,y=0.7994974955185655 -a=hat,b=hat,i=5150,x=0.5204676158996879,y=0.7837983020069176 -a=pan,b=wye,i=5151,x=0.46792698874985184,y=0.8655145758102156 -a=pan,b=eks,i=5152,x=0.7698104203177931,y=0.26202820594725107 -a=eks,b=zee,i=5153,x=0.5599128818778365,y=0.6217154146552438 -a=zee,b=zee,i=5154,x=0.9860645516631891,y=0.4316727707502638 -a=hat,b=hat,i=5155,x=0.6598214440228759,y=0.3829372068865968 -a=eks,b=wye,i=5156,x=0.8891940614044549,y=0.06487886134646581 -a=zee,b=pan,i=5157,x=0.7088889371664757,y=0.5291365868969226 -a=wye,b=wye,i=5158,x=0.03780907803981348,y=0.01743012834128732 -a=wye,b=hat,i=5159,x=0.541375591656728,y=0.19271971067809746 -a=zee,b=pan,i=5160,x=0.1291394701733155,y=0.3164888119812437 -a=eks,b=zee,i=5161,x=0.7070972450015776,y=0.8576144505983694 -a=pan,b=wye,i=5162,x=0.23503083628119015,y=0.3804966968759753 -a=pan,b=wye,i=5163,x=0.7745902001026395,y=0.05547251429169031 -a=zee,b=eks,i=5164,x=0.817955788881543,y=0.5354324301609987 -a=wye,b=wye,i=5165,x=0.8025727679132887,y=0.19141681065547878 -a=zee,b=hat,i=5166,x=0.7360375371224098,y=0.29561728150687583 -a=zee,b=hat,i=5167,x=0.01949832966304421,y=0.44975230900638874 -a=eks,b=hat,i=5168,x=0.7853520653542873,y=0.21913075886744116 -a=hat,b=wye,i=5169,x=0.10431463074876668,y=0.9319628819493798 -a=wye,b=pan,i=5170,x=0.2834142139187724,y=0.8015795778401339 -a=wye,b=wye,i=5171,x=0.8563300778556382,y=0.29021146719669166 -a=hat,b=eks,i=5172,x=0.8901432458076336,y=0.5906289428469621 -a=eks,b=wye,i=5173,x=0.23209666592661993,y=0.7954117026433107 -a=pan,b=wye,i=5174,x=0.7220313992623487,y=0.47674307211032296 -a=zee,b=eks,i=5175,x=0.007929525800474901,y=0.7115763725040718 -a=pan,b=hat,i=5176,x=0.13951096415676212,y=0.37397816099478665 -a=wye,b=pan,i=5177,x=0.32426760784210895,y=0.6275207008763184 -a=wye,b=hat,i=5178,x=0.8483367054488846,y=0.3438036340567002 -a=pan,b=wye,i=5179,x=0.5722581464790939,y=0.6082504729241017 -a=pan,b=wye,i=5180,x=0.4531005566059778,y=0.6317423583403005 -a=zee,b=eks,i=5181,x=0.8810030632200981,y=0.38442701936628154 -a=pan,b=zee,i=5182,x=0.5458504348562845,y=0.5606252991061377 -a=wye,b=hat,i=5183,x=0.7217910708545336,y=0.698686710480415 -a=hat,b=eks,i=5184,x=0.5362269296471793,y=0.05511158796442561 -a=pan,b=wye,i=5185,x=0.28943459067392874,y=0.9963452393967427 -a=eks,b=zee,i=5186,x=0.19471121838287642,y=0.8475932004442778 -a=wye,b=eks,i=5187,x=0.27341937394530447,y=0.5835195238055988 -a=pan,b=eks,i=5188,x=0.1098179895780228,y=0.691118264458782 -a=pan,b=wye,i=5189,x=0.5424445870456038,y=0.47980328960531937 -a=pan,b=zee,i=5190,x=0.958030425108842,y=0.9229656805294295 -a=pan,b=wye,i=5191,x=0.34032539138935425,y=0.4003903325198842 -a=hat,b=pan,i=5192,x=0.3435706571010647,y=0.06283363667654052 -a=zee,b=wye,i=5193,x=0.01565153403082964,y=0.559742349020455 -a=eks,b=eks,i=5194,x=0.9601222966912384,y=0.7746495793923044 -a=pan,b=hat,i=5195,x=0.5165119272913388,y=0.8970096684776827 -a=pan,b=hat,i=5196,x=0.5242448227650341,y=0.40727326602398184 -a=hat,b=eks,i=5197,x=0.5268012119318143,y=0.9704796636500256 -a=pan,b=pan,i=5198,x=0.5788360834761852,y=0.9163631840503775 -a=zee,b=pan,i=5199,x=0.863846165540519,y=0.7926861461485262 -a=wye,b=zee,i=5200,x=0.9308584180091819,y=0.1060885355033907 -a=hat,b=pan,i=5201,x=0.13550559685784802,y=0.23666447032870253 -a=hat,b=pan,i=5202,x=0.9333837848637749,y=0.7983610377673229 -a=pan,b=zee,i=5203,x=0.8164395473206716,y=0.9295267627751691 -a=hat,b=eks,i=5204,x=0.09343575555554806,y=0.30344155652002347 -a=zee,b=hat,i=5205,x=0.28240510221521764,y=0.2545255694003048 -a=zee,b=pan,i=5206,x=0.3994083205887524,y=0.07213558504539785 -a=pan,b=zee,i=5207,x=0.5698284352568362,y=0.5897809603851609 -a=zee,b=zee,i=5208,x=0.3216207044318503,y=0.038820482913941357 -a=pan,b=wye,i=5209,x=0.8306447997004499,y=0.8384123743007208 -a=eks,b=hat,i=5210,x=0.08770207583625389,y=0.7725018412751664 -a=wye,b=zee,i=5211,x=0.33912997635684583,y=0.8105461466866878 -a=zee,b=hat,i=5212,x=0.7610245335034946,y=0.23104051545907822 -a=zee,b=wye,i=5213,x=0.630076553798416,y=0.4732456051973126 -a=eks,b=wye,i=5214,x=0.6175594035658841,y=0.9608217208353017 -a=hat,b=eks,i=5215,x=0.28256241866196097,y=0.265704893607123 -a=hat,b=zee,i=5216,x=0.8249008956837504,y=0.7862378134305688 -a=hat,b=pan,i=5217,x=0.4700457200943312,y=0.005846894154671878 -a=eks,b=hat,i=5218,x=0.7091734686647354,y=0.9683424620144252 -a=eks,b=pan,i=5219,x=0.08321970448060567,y=0.9552244458317039 -a=zee,b=zee,i=5220,x=0.7678115603005319,y=0.17456048525769519 -a=hat,b=hat,i=5221,x=0.6804959880554192,y=0.5106473873198336 -a=hat,b=wye,i=5222,x=0.08046680632449676,y=0.5515390101660408 -a=hat,b=zee,i=5223,x=0.28029330967388233,y=0.7219566130837053 -a=zee,b=zee,i=5224,x=0.7555723920288009,y=0.3761074889073034 -a=pan,b=wye,i=5225,x=0.4049308387224845,y=0.7002764807468328 -a=hat,b=wye,i=5226,x=0.7522569018366815,y=0.18119883657776303 -a=pan,b=pan,i=5227,x=0.04907194450053376,y=0.24371127321212294 -a=eks,b=hat,i=5228,x=0.08589819615072136,y=0.1928776399714467 -a=eks,b=hat,i=5229,x=0.5280780018220216,y=0.850193621850258 -a=hat,b=pan,i=5230,x=0.3059897834653845,y=0.7239860853683812 -a=zee,b=wye,i=5231,x=0.24344354397416768,y=0.9681438520522745 -a=pan,b=hat,i=5232,x=0.1881342701340306,y=0.7919638741482248 -a=zee,b=hat,i=5233,x=0.7794106496174618,y=0.950428895380262 -a=eks,b=wye,i=5234,x=0.1964278841499737,y=0.9230114722930227 -a=hat,b=zee,i=5235,x=0.5349332160444686,y=0.7212892273015341 -a=zee,b=eks,i=5236,x=0.0096091347524081,y=0.05157241835503623 -a=pan,b=wye,i=5237,x=0.29264897203906315,y=0.2708942584778229 -a=wye,b=eks,i=5238,x=0.877475809945589,y=0.4753884279556253 -a=zee,b=hat,i=5239,x=0.10804287516531197,y=0.25028720143889427 -a=pan,b=zee,i=5240,x=0.038521217586762524,y=0.45833782252961597 -a=pan,b=hat,i=5241,x=0.6242964208021841,y=0.46876845876825834 -a=pan,b=pan,i=5242,x=0.03478916499976592,y=0.8872591850817888 -a=eks,b=eks,i=5243,x=0.3532736876730329,y=0.8100993157058493 -a=wye,b=eks,i=5244,x=0.4410158520384003,y=0.08878204317661487 -a=hat,b=wye,i=5245,x=0.30542326696649835,y=0.03254190401750867 -a=wye,b=wye,i=5246,x=0.2619681126430232,y=0.2649618519422796 -a=hat,b=eks,i=5247,x=0.45824524247081966,y=0.6844159528310743 -a=hat,b=eks,i=5248,x=0.3283595420804768,y=0.8574880365351013 -a=hat,b=zee,i=5249,x=0.7484157555119979,y=0.39553557685807894 -a=pan,b=pan,i=5250,x=0.7554789617512107,y=0.2317754776472134 -a=zee,b=hat,i=5251,x=0.6787637703297714,y=0.8107713369785818 -a=wye,b=hat,i=5252,x=0.04799306200946163,y=0.699111788491548 -a=pan,b=eks,i=5253,x=0.09939382730538704,y=0.9181166624382701 -a=eks,b=hat,i=5254,x=0.3788407507062852,y=0.6050730090302495 -a=zee,b=eks,i=5255,x=0.5847457461108924,y=0.8796125841387396 -a=hat,b=zee,i=5256,x=0.5958859328721237,y=0.5394313157526304 -a=eks,b=zee,i=5257,x=0.6145812801413588,y=0.8667435600565327 -a=hat,b=pan,i=5258,x=0.39378429867517395,y=0.66637394577698 -a=wye,b=eks,i=5259,x=0.9417378953261469,y=0.4145045232597019 -a=hat,b=pan,i=5260,x=0.1040138249574939,y=0.5711578035148099 -a=zee,b=wye,i=5261,x=0.2807184907727448,y=0.6881546576599258 -a=eks,b=zee,i=5262,x=0.6748387970430342,y=0.9842159808803176 -a=zee,b=eks,i=5263,x=0.5854346090243887,y=0.24780046831336067 -a=zee,b=zee,i=5264,x=0.6651087221905022,y=0.4694678243278747 -a=eks,b=eks,i=5265,x=0.178487009198119,y=0.3389965086336105 -a=hat,b=wye,i=5266,x=0.60584735950502,y=0.08711755746003325 -a=hat,b=pan,i=5267,x=0.14941018319657196,y=0.42913266234393854 -a=wye,b=wye,i=5268,x=0.44618372032109543,y=0.19531077190155655 -a=wye,b=pan,i=5269,x=0.8715465668907355,y=0.15578281828771234 -a=eks,b=zee,i=5270,x=0.272381988376838,y=0.749508925403637 -a=hat,b=zee,i=5271,x=0.8731584572028818,y=0.8587026343639556 -a=hat,b=wye,i=5272,x=0.7141686842916973,y=0.2536343098230014 -a=hat,b=pan,i=5273,x=0.6161173798530847,y=0.5170002336730243 -a=wye,b=wye,i=5274,x=0.9836997370643351,y=0.9073574715868198 -a=zee,b=zee,i=5275,x=0.9271419947755198,y=0.7499953605856078 -a=eks,b=zee,i=5276,x=0.4436574016008654,y=0.11521473164364193 -a=wye,b=zee,i=5277,x=0.41785833930772587,y=0.5581905438338015 -a=hat,b=zee,i=5278,x=0.6303081078068822,y=0.9708543000113369 -a=eks,b=hat,i=5279,x=0.7724785778741878,y=0.8749355527936072 -a=zee,b=pan,i=5280,x=0.019491215186811517,y=0.28573440717823495 -a=hat,b=hat,i=5281,x=0.8966308328410811,y=0.8932890927799828 -a=zee,b=eks,i=5282,x=0.20474699819177533,y=0.9563609260887708 -a=eks,b=hat,i=5283,x=0.8232222331296849,y=0.43288890410832115 -a=pan,b=pan,i=5284,x=0.06808879127275447,y=0.2961369332523437 -a=hat,b=pan,i=5285,x=0.07045589395497931,y=0.06411882838638927 -a=zee,b=pan,i=5286,x=0.5025476621481306,y=0.5455719768538321 -a=hat,b=eks,i=5287,x=0.6864003316225611,y=0.08724809130852695 -a=eks,b=wye,i=5288,x=0.9345047793469049,y=0.7545355491792637 -a=eks,b=zee,i=5289,x=0.09683817897484082,y=0.15042392025928608 -a=hat,b=zee,i=5290,x=0.2201144900883092,y=0.09304236894658524 -a=pan,b=zee,i=5291,x=0.6437086955209985,y=0.6412853324081308 -a=pan,b=pan,i=5292,x=0.7101999657039595,y=0.9654389825167757 -a=zee,b=pan,i=5293,x=0.44434019344510023,y=0.3616886405725528 -a=hat,b=hat,i=5294,x=0.4986619811254004,y=0.36527690926573364 -a=wye,b=zee,i=5295,x=0.6218618299228648,y=0.9324975302931531 -a=hat,b=wye,i=5296,x=0.3811141224627541,y=0.9228475537405691 -a=eks,b=eks,i=5297,x=0.450776715605552,y=0.31636578533096016 -a=pan,b=zee,i=5298,x=0.3086259636689451,y=0.06652636662046696 -a=zee,b=wye,i=5299,x=0.4581205277744118,y=0.8883132608926249 -a=hat,b=zee,i=5300,x=0.6065263542151584,y=0.8758808605345744 -a=eks,b=pan,i=5301,x=0.26907393999080953,y=0.633331389237707 -a=pan,b=hat,i=5302,x=0.2662060484446822,y=0.501911240454392 -a=wye,b=zee,i=5303,x=0.030537351078086195,y=0.20700838585535786 -a=wye,b=hat,i=5304,x=0.4745666526865788,y=0.3396776308478552 -a=eks,b=zee,i=5305,x=0.5607499175198385,y=0.21583087167043014 -a=eks,b=hat,i=5306,x=0.690451786737028,y=0.0861194392792598 -a=pan,b=zee,i=5307,x=0.06684973668910421,y=0.9544628284207586 -a=wye,b=zee,i=5308,x=0.7500932442964064,y=0.552958619063383 -a=pan,b=zee,i=5309,x=0.2335642300224079,y=0.31164052398797637 -a=pan,b=eks,i=5310,x=0.15387236958406036,y=0.43829110359848433 -a=wye,b=zee,i=5311,x=0.7866346249384528,y=0.03570506892329006 -a=hat,b=wye,i=5312,x=0.5514251601334069,y=0.4379220457409775 -a=eks,b=wye,i=5313,x=0.0355425881526662,y=0.16802137840026887 -a=eks,b=eks,i=5314,x=0.04767639014474101,y=0.7923199475995649 -a=hat,b=pan,i=5315,x=0.22846522556430016,y=0.8271404016977637 -a=wye,b=pan,i=5316,x=0.31445904414804127,y=0.235006707754 -a=zee,b=wye,i=5317,x=0.4335088190275804,y=0.5671270126055555 -a=hat,b=wye,i=5318,x=0.15817916140514576,y=0.6371355203785057 -a=zee,b=zee,i=5319,x=0.9627644186331633,y=0.46453264491285806 -a=pan,b=pan,i=5320,x=0.9101265684004383,y=0.8101420365566193 -a=pan,b=hat,i=5321,x=0.7404633039474602,y=0.9639884498668673 -a=zee,b=zee,i=5322,x=0.6420718148305066,y=0.37414212799368096 -a=wye,b=hat,i=5323,x=0.4830324590268663,y=0.0404568640233397 -a=hat,b=zee,i=5324,x=0.5028487276011456,y=0.020932159991859267 -a=zee,b=pan,i=5325,x=0.888291122851125,y=0.5111470794632866 -a=wye,b=pan,i=5326,x=0.07272409700902271,y=0.27564484500916986 -a=wye,b=pan,i=5327,x=0.0888998337471314,y=0.9919041685553374 -a=hat,b=pan,i=5328,x=0.3064216274886523,y=0.4890201595898237 -a=pan,b=wye,i=5329,x=0.3470931183432189,y=0.1997795824920121 -a=zee,b=zee,i=5330,x=0.13436961326496677,y=0.3095854896519281 -a=zee,b=pan,i=5331,x=0.8655317519954471,y=0.8104322805331614 -a=eks,b=wye,i=5332,x=0.01695205279543599,y=0.6253163249860758 -a=wye,b=wye,i=5333,x=0.41853514055951446,y=0.46414849053819973 -a=eks,b=wye,i=5334,x=0.9312528403346797,y=0.34690398003679423 -a=hat,b=wye,i=5335,x=0.8146576023607562,y=0.517623963255214 -a=wye,b=wye,i=5336,x=0.9644696679607304,y=0.17623585722771673 -a=hat,b=wye,i=5337,x=0.0491647681854408,y=0.9084359968915301 -a=wye,b=eks,i=5338,x=0.9183687166177615,y=0.6742918022088258 -a=eks,b=zee,i=5339,x=0.6913946457851302,y=0.5236074895779744 -a=wye,b=wye,i=5340,x=0.7574842345027994,y=0.35438559050849205 -a=pan,b=pan,i=5341,x=0.9609080490571219,y=0.764751472995584 -a=hat,b=hat,i=5342,x=0.9571224566918112,y=0.6488786174457046 -a=eks,b=zee,i=5343,x=0.1297439418853782,y=0.10986446330230937 -a=wye,b=pan,i=5344,x=0.2265442713227983,y=0.08671233554174995 -a=zee,b=eks,i=5345,x=0.6690807314571691,y=0.5220733222869928 -a=wye,b=zee,i=5346,x=0.42279438877482367,y=0.1357326426861194 -a=zee,b=eks,i=5347,x=0.566584546381942,y=0.14424580074370563 -a=eks,b=hat,i=5348,x=0.9402905188032046,y=0.6899005608656246 -a=wye,b=wye,i=5349,x=0.8220699059748584,y=0.08673018838619662 -a=eks,b=pan,i=5350,x=0.223912795614429,y=0.8705191204953174 -a=pan,b=zee,i=5351,x=0.17054432883772475,y=0.3754155013143816 -a=pan,b=hat,i=5352,x=0.577021048756712,y=0.8658764185620885 -a=eks,b=zee,i=5353,x=0.6047802080751319,y=0.16748745069598325 -a=zee,b=pan,i=5354,x=0.8138458432489908,y=0.887184873534984 -a=hat,b=zee,i=5355,x=0.4409314249173867,y=0.16661996267618873 -a=zee,b=wye,i=5356,x=0.9294777278187871,y=0.9218221729540071 -a=zee,b=zee,i=5357,x=0.7978605597846053,y=0.19629225024825436 -a=eks,b=eks,i=5358,x=0.020853766511345406,y=0.9622073813280082 -a=pan,b=wye,i=5359,x=0.30351132190401986,y=0.6285435222862336 -a=hat,b=eks,i=5360,x=0.20965717538739437,y=0.8407225718631762 -a=wye,b=eks,i=5361,x=0.8752567055200561,y=0.9860616183578573 -a=zee,b=pan,i=5362,x=0.7742820785303554,y=0.12159579314900681 -a=eks,b=pan,i=5363,x=0.045340262727698866,y=0.8347997035721408 -a=eks,b=eks,i=5364,x=0.27673456069026947,y=0.28606929907632006 -a=hat,b=eks,i=5365,x=0.1389831981773636,y=0.958748587909282 -a=hat,b=hat,i=5366,x=0.2805736404470527,y=0.39685097136131187 -a=eks,b=hat,i=5367,x=0.506031079714652,y=0.9912645565514333 -a=pan,b=zee,i=5368,x=0.6865182575714622,y=0.8704513374052988 -a=zee,b=wye,i=5369,x=0.8603176374144329,y=0.3346439571733928 -a=pan,b=eks,i=5370,x=0.9070851500395942,y=0.03151443822439248 -a=wye,b=zee,i=5371,x=0.26330651984082165,y=0.312969179382553 -a=zee,b=zee,i=5372,x=0.5395637542263729,y=0.876693303664991 -a=zee,b=hat,i=5373,x=0.34909843746802205,y=0.8568124167530461 -a=zee,b=zee,i=5374,x=0.3028178173036057,y=0.7391998484027293 -a=hat,b=zee,i=5375,x=0.5150486678896874,y=0.5093614114895396 -a=hat,b=zee,i=5376,x=0.26087420592676525,y=0.45387940157532647 -a=zee,b=eks,i=5377,x=0.11113050876158048,y=0.019064162496037707 -a=zee,b=hat,i=5378,x=0.7356184687449835,y=0.5091161605127379 -a=wye,b=wye,i=5379,x=0.09703125778637067,y=0.25691589979049356 -a=zee,b=eks,i=5380,x=0.3345104910149367,y=0.1516506429745581 -a=eks,b=hat,i=5381,x=0.5792199947921147,y=0.49613092724134833 -a=wye,b=eks,i=5382,x=0.6188424819758455,y=0.5722334124286547 -a=wye,b=pan,i=5383,x=0.4199976827116998,y=0.6380529017621875 -a=eks,b=zee,i=5384,x=0.7599800240198485,y=0.19856983882208867 -a=eks,b=hat,i=5385,x=0.06854514347417606,y=0.028515802052052952 -a=wye,b=zee,i=5386,x=0.31992003300785,y=0.9257458880403014 -a=wye,b=zee,i=5387,x=0.8545498814228611,y=0.06322205211700338 -a=eks,b=zee,i=5388,x=0.14459434374592373,y=0.42112443945304057 -a=pan,b=zee,i=5389,x=0.11816306719121206,y=0.17831615949339463 -a=zee,b=pan,i=5390,x=0.551475598918215,y=0.6565173979014076 -a=hat,b=pan,i=5391,x=0.4696624324268569,y=0.9440798879738231 -a=pan,b=hat,i=5392,x=0.2906675154826033,y=0.7331663429068216 -a=pan,b=hat,i=5393,x=0.2596796215047702,y=0.9407425847640128 -a=eks,b=wye,i=5394,x=0.6216628077513283,y=0.9763969655887303 -a=zee,b=wye,i=5395,x=0.8476101473277529,y=0.9881007277790081 -a=zee,b=zee,i=5396,x=0.8702478883993182,y=0.2813073047318746 -a=eks,b=hat,i=5397,x=0.9584988429207648,y=0.16350049486702678 -a=wye,b=eks,i=5398,x=0.36458407067281184,y=0.04100408848224302 -a=wye,b=wye,i=5399,x=0.733413532545851,y=0.6459898444733033 -a=pan,b=wye,i=5400,x=0.9665506125898256,y=0.5448152784578933 -a=zee,b=hat,i=5401,x=0.8543887956499512,y=0.7439702074332549 -a=pan,b=hat,i=5402,x=0.16703607056661052,y=0.678760520989282 -a=pan,b=pan,i=5403,x=0.8295505457000276,y=0.08557288192430035 -a=hat,b=eks,i=5404,x=0.24083859157948273,y=0.8456272874080909 -a=hat,b=hat,i=5405,x=0.7303478280030506,y=0.08240241730334918 -a=hat,b=hat,i=5406,x=0.16072785206888152,y=0.940229803599545 -a=eks,b=pan,i=5407,x=0.8649757853523717,y=0.49430262836010985 -a=hat,b=hat,i=5408,x=0.5776416796711862,y=0.38502333915273557 -a=hat,b=pan,i=5409,x=0.5633298053737792,y=0.7410429711654063 -a=eks,b=eks,i=5410,x=0.9778916491011578,y=0.2273478424516322 -a=pan,b=eks,i=5411,x=0.7262036914700832,y=0.9187345564266572 -a=zee,b=eks,i=5412,x=0.33286294808080064,y=0.3921681976941228 -a=wye,b=eks,i=5413,x=0.08772931753470603,y=0.48815297744510433 -a=eks,b=pan,i=5414,x=0.44377217382552636,y=0.13437156912545423 -a=eks,b=eks,i=5415,x=0.43246842646662487,y=0.9003920363683975 -a=eks,b=hat,i=5416,x=0.753762625636042,y=0.6313338577994543 -a=pan,b=hat,i=5417,x=0.20986095023321283,y=0.278888203103681 -a=zee,b=pan,i=5418,x=0.15332749400308754,y=0.8904428676045328 -a=hat,b=eks,i=5419,x=0.46399468430524804,y=0.0717886401624439 -a=zee,b=zee,i=5420,x=0.47725202464468663,y=0.9096066884668478 -a=wye,b=eks,i=5421,x=0.4608256396986088,y=0.18257443066884294 -a=hat,b=zee,i=5422,x=0.9062976974038087,y=0.825705654266679 -a=pan,b=eks,i=5423,x=0.829675619825074,y=0.30094578297716856 -a=zee,b=pan,i=5424,x=0.2627796756491889,y=0.05131765835402935 -a=pan,b=wye,i=5425,x=0.9750271883009257,y=0.10505350281212911 -a=wye,b=wye,i=5426,x=0.2694712165014862,y=0.617405875060473 -a=hat,b=eks,i=5427,x=0.06062699861257914,y=0.14515726494650738 -a=pan,b=wye,i=5428,x=0.9471818920457628,y=0.2665032520198297 -a=hat,b=eks,i=5429,x=0.3317119302689199,y=0.45073390665129454 -a=pan,b=hat,i=5430,x=0.16613227391144125,y=0.41913253603052736 -a=zee,b=eks,i=5431,x=0.5545698300075519,y=0.9624415304532793 -a=hat,b=hat,i=5432,x=0.9825886641650767,y=0.4606811454162322 -a=hat,b=zee,i=5433,x=0.7849062201991618,y=0.9640442210529644 -a=pan,b=wye,i=5434,x=0.027672040238877704,y=0.09364154641355082 -a=zee,b=hat,i=5435,x=0.4045108520910917,y=0.36431937644373535 -a=hat,b=zee,i=5436,x=0.9496952473063589,y=0.6756301296750051 -a=zee,b=hat,i=5437,x=0.5978983969671523,y=0.6276473499153709 -a=eks,b=hat,i=5438,x=0.38522029067066954,y=0.9206254386424841 -a=eks,b=hat,i=5439,x=0.38811572418657825,y=0.07594870509481821 -a=hat,b=pan,i=5440,x=0.3245042501769525,y=0.5860367509842646 -a=eks,b=hat,i=5441,x=0.5113055435442414,y=0.9478634662218888 -a=hat,b=hat,i=5442,x=0.649952463378999,y=0.40331287808319716 -a=zee,b=pan,i=5443,x=0.2660546525494476,y=0.036573786936417774 -a=hat,b=wye,i=5444,x=0.2933645151017673,y=0.8565796439445684 -a=hat,b=hat,i=5445,x=0.19274932648900556,y=0.6752612195498396 -a=zee,b=pan,i=5446,x=0.6843298638997956,y=0.18463787286549893 -a=eks,b=zee,i=5447,x=0.4465765938644741,y=0.6465428046837856 -a=wye,b=hat,i=5448,x=0.7104951786733581,y=0.007575728589058528 -a=hat,b=wye,i=5449,x=0.05598891388977545,y=0.22520895137141883 -a=hat,b=zee,i=5450,x=0.6973457907641605,y=0.3767547727152859 -a=eks,b=hat,i=5451,x=0.22980925307219058,y=0.09539340024354548 -a=pan,b=hat,i=5452,x=0.3157808212188198,y=0.6787208591042566 -a=zee,b=zee,i=5453,x=0.08674939853988706,y=0.0016458788929679669 -a=pan,b=hat,i=5454,x=0.45512276442779265,y=0.7647008695253613 -a=wye,b=hat,i=5455,x=0.9223519005619959,y=0.9896263386831655 -a=hat,b=zee,i=5456,x=0.2599314461144381,y=0.8810566831796974 -a=wye,b=eks,i=5457,x=0.3716116598539073,y=0.6158074210009791 -a=eks,b=zee,i=5458,x=0.04287045703879866,y=0.3387484748791293 -a=eks,b=eks,i=5459,x=0.964192450580381,y=0.0021921221413634395 -a=zee,b=hat,i=5460,x=0.16317765667465844,y=0.5350462588301713 -a=pan,b=pan,i=5461,x=0.6162574043540692,y=0.8321486837007045 -a=eks,b=pan,i=5462,x=0.1418039983669439,y=0.6211011915118961 -a=zee,b=hat,i=5463,x=0.5986397200652216,y=0.6968533019592756 -a=wye,b=eks,i=5464,x=0.8847165179059643,y=0.8396671337239269 -a=eks,b=pan,i=5465,x=0.64956961455677,y=0.42814835565709897 -a=wye,b=zee,i=5466,x=0.078362139340725,y=0.7041742329715265 -a=pan,b=pan,i=5467,x=0.7658242784400351,y=0.6658002824538031 -a=zee,b=wye,i=5468,x=0.7694464457122385,y=0.3630968380462761 -a=eks,b=wye,i=5469,x=0.5573393787208576,y=0.5674857974105666 -a=wye,b=wye,i=5470,x=0.9070377249974354,y=0.2288418409874835 -a=hat,b=hat,i=5471,x=0.9390885842014736,y=0.4885661765278554 -a=pan,b=hat,i=5472,x=0.15616642541017933,y=0.723291076738834 -a=hat,b=pan,i=5473,x=0.8339379553110595,y=0.27272554707575325 -a=zee,b=wye,i=5474,x=0.7147670868273149,y=0.5300588513631999 -a=hat,b=hat,i=5475,x=0.6079530363728716,y=0.7302013509128558 -a=eks,b=hat,i=5476,x=0.20009244252935454,y=0.3819915946964063 -a=eks,b=wye,i=5477,x=0.39259835612758154,y=0.30659538127782704 -a=hat,b=wye,i=5478,x=0.6770531656328236,y=0.6798247125178067 -a=wye,b=hat,i=5479,x=0.8464109156551775,y=0.5746477726666506 -a=zee,b=zee,i=5480,x=0.5016540167129663,y=0.8741956310027429 -a=wye,b=hat,i=5481,x=0.6695686221456726,y=0.689441485231751 -a=zee,b=zee,i=5482,x=0.6069552630891367,y=0.8327367055952278 -a=eks,b=eks,i=5483,x=0.7469659158360071,y=0.10223878164983224 -a=zee,b=pan,i=5484,x=0.9278433464500453,y=0.1755972033710903 -a=zee,b=pan,i=5485,x=0.5724120522769688,y=0.03415735625364058 -a=zee,b=wye,i=5486,x=0.3960740290371987,y=0.2157291640948238 -a=zee,b=wye,i=5487,x=0.4006137623075525,y=0.915996687470202 -a=wye,b=wye,i=5488,x=0.3501090213998701,y=0.1419133192803893 -a=eks,b=eks,i=5489,x=0.86861919099865,y=0.25681726556775375 -a=wye,b=hat,i=5490,x=0.0114773666847795,y=0.024645492270649272 -a=pan,b=eks,i=5491,x=0.37445278083566247,y=0.1319415773692295 -a=pan,b=eks,i=5492,x=0.24969695350122256,y=0.7787009090435869 -a=hat,b=wye,i=5493,x=0.1382138485389508,y=0.42533800225303686 -a=zee,b=pan,i=5494,x=0.8834013775449513,y=0.532739443419528 -a=hat,b=pan,i=5495,x=0.06870299529036838,y=0.16955231705247786 -a=pan,b=eks,i=5496,x=0.7348263636816107,y=0.8630644835981002 -a=pan,b=wye,i=5497,x=0.18130548510310573,y=0.012524267398086986 -a=zee,b=wye,i=5498,x=0.07850770050431843,y=0.6592896086014353 -a=eks,b=wye,i=5499,x=0.12579070445810636,y=0.027946488029312544 -a=zee,b=hat,i=5500,x=0.31461267260641923,y=0.0748646953586749 -a=eks,b=pan,i=5501,x=0.6387163017917407,y=0.9935696733123411 -a=zee,b=wye,i=5502,x=0.43904419266704897,y=0.4569132922221508 -a=eks,b=pan,i=5503,x=0.8033268068277595,y=0.18844163406954773 -a=zee,b=eks,i=5504,x=0.9596958577456198,y=0.04773563051124652 -a=hat,b=wye,i=5505,x=0.5520964703015074,y=0.48453868182721893 -a=wye,b=zee,i=5506,x=0.4087385270797551,y=0.8564815497838665 -a=eks,b=pan,i=5507,x=0.21391759502009422,y=0.3447041692322321 -a=hat,b=eks,i=5508,x=0.27910653275458874,y=0.5485292937357691 -a=hat,b=pan,i=5509,x=0.0989266416174771,y=0.6959930085614316 -a=pan,b=hat,i=5510,x=0.4611680765379149,y=0.7214873034272665 -a=eks,b=wye,i=5511,x=0.23798712129455957,y=0.7587550612183068 -a=eks,b=wye,i=5512,x=0.5807870919230165,y=0.9691165477002429 -a=pan,b=pan,i=5513,x=0.12503735272775673,y=0.4355589149955563 -a=pan,b=eks,i=5514,x=0.24662547688833314,y=0.3287438663802673 -a=zee,b=pan,i=5515,x=0.6313995187707404,y=0.833564271162547 -a=hat,b=zee,i=5516,x=0.33305390076062613,y=0.9170789339963947 -a=wye,b=eks,i=5517,x=0.8721055830589473,y=0.02704639391207897 -a=pan,b=pan,i=5518,x=0.14313525389664383,y=0.7459994619303395 -a=eks,b=zee,i=5519,x=0.7813269749608942,y=0.43515581235296563 -a=pan,b=pan,i=5520,x=0.12004377059603999,y=0.17842342731389704 -a=wye,b=wye,i=5521,x=0.4952080825177475,y=0.16871841358834394 -a=zee,b=pan,i=5522,x=0.36872049705368115,y=0.1990766711673171 -a=pan,b=wye,i=5523,x=0.742045965934904,y=0.9721895926892108 -a=eks,b=zee,i=5524,x=0.8701165441999673,y=0.5339961636745024 -a=wye,b=pan,i=5525,x=0.49890360517452514,y=0.024484853806581164 -a=pan,b=eks,i=5526,x=0.7026312260362405,y=0.8810518289214107 -a=wye,b=eks,i=5527,x=0.7997008739733962,y=0.18410432351101302 -a=hat,b=pan,i=5528,x=0.8212044358760883,y=0.11209149520678119 -a=pan,b=eks,i=5529,x=0.8511463764647872,y=0.14138132753417088 -a=hat,b=eks,i=5530,x=0.5258934621583872,y=0.720463955146462 -a=zee,b=eks,i=5531,x=0.35366192891288517,y=0.08693096089863839 -a=eks,b=pan,i=5532,x=0.02230190397042897,y=0.6075383296925656 -a=hat,b=zee,i=5533,x=0.958788084715825,y=0.20611877870477535 -a=pan,b=hat,i=5534,x=0.0019016743345633413,y=0.32222113968267996 -a=hat,b=wye,i=5535,x=0.4214775778712955,y=0.22796016352171378 -a=hat,b=hat,i=5536,x=0.7965347610723122,y=0.2771962774393667 -a=zee,b=eks,i=5537,x=0.5232208554018066,y=0.7842118697965217 -a=hat,b=eks,i=5538,x=0.4077121389029271,y=0.11707098355780121 -a=wye,b=wye,i=5539,x=0.743441288773323,y=0.6405109845442226 -a=hat,b=hat,i=5540,x=0.42899567587485843,y=0.23687426121264998 -a=pan,b=zee,i=5541,x=0.8254948808955715,y=0.4991271884600853 -a=zee,b=wye,i=5542,x=0.755488383171051,y=0.4137799115139683 -a=hat,b=eks,i=5543,x=0.48020817778428815,y=0.9225205496681843 -a=zee,b=eks,i=5544,x=0.6602401325197925,y=0.32279850833980206 -a=hat,b=wye,i=5545,x=0.858697605273768,y=0.8576653967219389 -a=pan,b=eks,i=5546,x=0.6631984443201948,y=0.3727938739078658 -a=eks,b=hat,i=5547,x=0.6895459625786122,y=0.22640122479226865 -a=eks,b=pan,i=5548,x=0.3627382468806156,y=0.0796990614162374 -a=zee,b=eks,i=5549,x=0.7292096702579594,y=0.9691771087568819 -a=eks,b=eks,i=5550,x=0.6327683854211364,y=0.6420822760549295 -a=zee,b=eks,i=5551,x=0.28298845518306814,y=0.8947425604116854 -a=pan,b=hat,i=5552,x=0.5841578438331838,y=0.1596820606396967 -a=hat,b=zee,i=5553,x=0.5166466940884901,y=0.5215576515640856 -a=pan,b=pan,i=5554,x=0.9579182517583037,y=0.18510227855201322 -a=wye,b=zee,i=5555,x=0.8156182188735165,y=0.7385240536968077 -a=pan,b=hat,i=5556,x=0.4092542192178087,y=0.8148464821295865 -a=wye,b=pan,i=5557,x=0.25358407312884057,y=0.9664484962083387 -a=hat,b=pan,i=5558,x=0.768872222650759,y=0.7571069129173444 -a=zee,b=hat,i=5559,x=0.02119490837909377,y=0.7608765429541047 -a=wye,b=eks,i=5560,x=0.5167434492366938,y=0.2556264017975728 -a=zee,b=zee,i=5561,x=0.19901052822038778,y=0.010162787621391778 -a=zee,b=zee,i=5562,x=0.010968218584134437,y=0.4064143237134189 -a=pan,b=hat,i=5563,x=0.5922101576133584,y=0.4027972800052315 -a=eks,b=wye,i=5564,x=0.49763688623866753,y=0.5883123179094881 -a=pan,b=wye,i=5565,x=0.7684392835456383,y=0.3749236173392554 -a=eks,b=zee,i=5566,x=0.8548967678474122,y=0.570131787889301 -a=zee,b=zee,i=5567,x=0.31067383496587675,y=0.6147427008783484 -a=eks,b=pan,i=5568,x=0.8429203216611878,y=0.1574744061469351 -a=zee,b=hat,i=5569,x=0.08829574118086814,y=0.5348102685441779 -a=pan,b=eks,i=5570,x=0.6920854194235941,y=0.6152462479121356 -a=pan,b=pan,i=5571,x=0.6728243500766502,y=0.4062647573271557 -a=wye,b=zee,i=5572,x=0.7192603411774698,y=0.4187864354572167 -a=pan,b=pan,i=5573,x=0.4439499129311816,y=0.452364734358081 -a=pan,b=eks,i=5574,x=0.20220091735345957,y=0.7994491452794874 -a=wye,b=wye,i=5575,x=0.21178209452449626,y=0.15235066856869428 -a=pan,b=hat,i=5576,x=0.2328237068625838,y=0.1466943672149028 -a=wye,b=eks,i=5577,x=0.1463637145507638,y=0.27512353058563355 -a=eks,b=eks,i=5578,x=0.7678172951406467,y=0.4330114463831388 -a=hat,b=wye,i=5579,x=0.7640191949316547,y=0.24039019030979936 -a=wye,b=hat,i=5580,x=0.302423176696171,y=0.8421273065109021 -a=wye,b=hat,i=5581,x=0.8901857920101928,y=0.29658407519577457 -a=wye,b=zee,i=5582,x=0.9976903742848702,y=0.45676971223633933 -a=eks,b=hat,i=5583,x=0.9279820319463397,y=0.2328972990196413 -a=hat,b=eks,i=5584,x=0.33098984262520037,y=0.558064177488057 -a=zee,b=wye,i=5585,x=0.8492581279138114,y=0.3377131419417513 -a=wye,b=hat,i=5586,x=0.3843644484125802,y=0.5395570591826665 -a=pan,b=wye,i=5587,x=0.2563692488210999,y=0.8648625544244997 -a=eks,b=pan,i=5588,x=0.47849756747842254,y=0.36440498978427904 -a=zee,b=zee,i=5589,x=0.16028903050640975,y=0.7637743011708871 -a=hat,b=eks,i=5590,x=0.3632486395529805,y=0.009397590758849828 -a=zee,b=hat,i=5591,x=0.30560662975374475,y=0.7718259824315155 -a=pan,b=pan,i=5592,x=0.39375784368183886,y=0.04590683905804471 -a=zee,b=wye,i=5593,x=0.6639341156412852,y=0.21782811751505382 -a=wye,b=eks,i=5594,x=0.748874819175722,y=0.5391318034694991 -a=wye,b=zee,i=5595,x=0.14037849467735208,y=0.17046690443866652 -a=zee,b=zee,i=5596,x=0.10182342354198881,y=0.5446008492963108 -a=zee,b=pan,i=5597,x=0.6907943477760979,y=0.4189830850027354 -a=eks,b=zee,i=5598,x=0.2962037835362923,y=0.36049737941380366 -a=wye,b=pan,i=5599,x=0.16480658469175224,y=0.8389670972825451 -a=zee,b=pan,i=5600,x=0.6488288447142824,y=0.8870043471299166 -a=wye,b=eks,i=5601,x=0.9541704944878237,y=0.06050893170404792 -a=hat,b=wye,i=5602,x=0.9634543762478623,y=0.2995192276364238 -a=pan,b=eks,i=5603,x=0.713998278452672,y=0.6065522135018214 -a=eks,b=pan,i=5604,x=0.9495183550398497,y=0.861843219886308 -a=zee,b=wye,i=5605,x=0.9500848655829623,y=0.45916889205740574 -a=pan,b=zee,i=5606,x=0.314494599736428,y=0.24386090680148387 -a=zee,b=wye,i=5607,x=0.7689855715450897,y=0.11045228604478441 -a=pan,b=pan,i=5608,x=0.2591280268253763,y=0.9062746985784103 -a=wye,b=eks,i=5609,x=0.038203945200321776,y=0.5754771176043 -a=wye,b=pan,i=5610,x=0.3513354907140842,y=0.23568099743397186 -a=eks,b=wye,i=5611,x=0.5581667554162788,y=0.533651422581368 -a=wye,b=pan,i=5612,x=0.6476139827218337,y=0.1625920960990147 -a=hat,b=hat,i=5613,x=0.43541285982294176,y=0.9781241021866268 -a=zee,b=hat,i=5614,x=0.07143295094027957,y=0.5146773830335898 -a=zee,b=hat,i=5615,x=0.3921043983626502,y=0.12859994269629937 -a=hat,b=hat,i=5616,x=0.12215970633938278,y=0.3357015949156391 -a=hat,b=pan,i=5617,x=0.1867388485013709,y=0.11120997350204453 -a=wye,b=eks,i=5618,x=0.6179065708118318,y=0.03936978657358048 -a=pan,b=eks,i=5619,x=0.23990263600951223,y=0.8386791333746637 -a=wye,b=zee,i=5620,x=0.8136012361181053,y=0.9246893690807032 -a=zee,b=eks,i=5621,x=0.6936065900415402,y=0.9835121994811427 -a=wye,b=hat,i=5622,x=0.46042861129071444,y=0.8690567617780255 -a=hat,b=hat,i=5623,x=0.7847006863046383,y=0.9540584320255103 -a=wye,b=zee,i=5624,x=0.6715918738207972,y=0.9248713771595384 -a=hat,b=wye,i=5625,x=0.3458684025425872,y=0.27012900303390197 -a=pan,b=eks,i=5626,x=0.5311033870913179,y=0.17537860987554665 -a=eks,b=zee,i=5627,x=0.8021710394665355,y=0.8677575901404581 -a=zee,b=zee,i=5628,x=0.22133674407714776,y=0.650517614686327 -a=eks,b=hat,i=5629,x=0.19299554543178998,y=0.926482748769109 -a=hat,b=pan,i=5630,x=0.6751229005765216,y=0.5680107534137527 -a=pan,b=hat,i=5631,x=0.6215515202465142,y=0.7335723775728186 -a=pan,b=wye,i=5632,x=0.8548923960863601,y=0.22525018696051402 -a=zee,b=hat,i=5633,x=0.8768635937091291,y=0.17829195183165314 -a=hat,b=zee,i=5634,x=0.6015751224700235,y=0.0644975490073253 -a=pan,b=hat,i=5635,x=0.7276807776942956,y=0.8500606585761793 -a=wye,b=eks,i=5636,x=0.4833228626835777,y=0.7378551070407615 -a=eks,b=pan,i=5637,x=0.19782280979787448,y=0.16113009983532756 -a=wye,b=eks,i=5638,x=0.6640345835133702,y=0.6498713803920758 -a=hat,b=hat,i=5639,x=0.20821268257622816,y=0.4305417007597995 -a=hat,b=hat,i=5640,x=0.5586511327847578,y=0.1326971674398928 -a=pan,b=eks,i=5641,x=0.7319972100987417,y=0.719616216404303 -a=pan,b=hat,i=5642,x=0.13804409751652513,y=0.9924728363763738 -a=zee,b=pan,i=5643,x=0.5223512543043243,y=0.4991596521110977 -a=eks,b=wye,i=5644,x=0.3698151588984483,y=0.17106212044489788 -a=eks,b=hat,i=5645,x=0.7963153151177051,y=0.8008422439449929 -a=pan,b=eks,i=5646,x=0.19219529269095814,y=0.20998226328210212 -a=zee,b=wye,i=5647,x=0.3429668212121526,y=0.8081062419069119 -a=eks,b=pan,i=5648,x=0.6185038317407525,y=0.13922536086565684 -a=pan,b=zee,i=5649,x=0.1882750077103732,y=0.051490445358029824 -a=pan,b=wye,i=5650,x=0.28997067788262,y=0.9817716356894414 -a=zee,b=pan,i=5651,x=0.7900065659824048,y=0.8799973980821687 -a=wye,b=hat,i=5652,x=0.6169368270983073,y=0.10348718268597767 -a=zee,b=wye,i=5653,x=0.17648668002767787,y=0.680848224860555 -a=pan,b=eks,i=5654,x=0.4277856265977521,y=0.46720306495008457 -a=pan,b=wye,i=5655,x=0.6238246026482904,y=0.5005719727517985 -a=hat,b=hat,i=5656,x=0.13794992086740376,y=0.8837838569509247 -a=pan,b=zee,i=5657,x=0.10798159915883232,y=0.14419721657117324 -a=wye,b=zee,i=5658,x=0.6608918667457152,y=0.9243582421976495 -a=eks,b=wye,i=5659,x=0.6991477488632273,y=0.757988136039786 -a=eks,b=eks,i=5660,x=0.6338110809908714,y=0.8899492379893515 -a=pan,b=zee,i=5661,x=0.5036749461847732,y=0.26738310174407787 -a=zee,b=hat,i=5662,x=0.8842361839832931,y=0.2166296985577939 -a=pan,b=eks,i=5663,x=0.7069322205111267,y=0.3613403478317495 -a=zee,b=zee,i=5664,x=0.9028085500044974,y=0.6560744841877679 -a=eks,b=pan,i=5665,x=0.42180175898330097,y=0.5602780165419919 -a=eks,b=wye,i=5666,x=0.11819158774260774,y=0.3269446466483843 -a=hat,b=pan,i=5667,x=0.4124388603109588,y=0.32891147928157505 -a=hat,b=hat,i=5668,x=0.28048754020684197,y=0.1586304642802714 -a=pan,b=pan,i=5669,x=0.355899451932013,y=0.6719277980511792 -a=wye,b=pan,i=5670,x=0.8835631178552948,y=0.030315290308040144 -a=pan,b=zee,i=5671,x=0.6000348059150206,y=0.29058998333691977 -a=eks,b=pan,i=5672,x=0.15818268756400555,y=0.06017126006059004 -a=hat,b=zee,i=5673,x=0.2279653016908878,y=0.9182355806226783 -a=eks,b=hat,i=5674,x=0.30002134346912324,y=0.5070589085102488 -a=hat,b=eks,i=5675,x=0.6776164025070541,y=0.8270479553259737 -a=hat,b=hat,i=5676,x=0.26316020747343927,y=0.4439406464012029 -a=hat,b=wye,i=5677,x=0.21137471648135742,y=0.5132924852429177 -a=wye,b=eks,i=5678,x=0.6936453571596785,y=0.5977687990521104 -a=zee,b=wye,i=5679,x=0.038384056804088296,y=0.39062169520305345 -a=wye,b=hat,i=5680,x=0.2396335274387169,y=0.5617745220517328 -a=hat,b=pan,i=5681,x=0.754469633162002,y=0.0837659053517874 -a=wye,b=wye,i=5682,x=0.13450523706607276,y=0.5466840856340288 -a=pan,b=hat,i=5683,x=0.3334514488024498,y=0.8403356176006205 -a=pan,b=eks,i=5684,x=0.5990374956703001,y=0.759556440814025 -a=eks,b=wye,i=5685,x=0.2272695825818456,y=0.06890003755302965 -a=hat,b=wye,i=5686,x=0.0781769662654741,y=0.610149228572904 -a=pan,b=eks,i=5687,x=0.20540821693039724,y=0.4583791378818265 -a=eks,b=eks,i=5688,x=0.2681427485140152,y=0.4723384743843706 -a=wye,b=zee,i=5689,x=0.06033196478297487,y=0.7884610426494236 -a=pan,b=pan,i=5690,x=0.15932061131003383,y=0.10750760915363755 -a=pan,b=wye,i=5691,x=0.6927406446662911,y=0.9484436166272129 -a=hat,b=hat,i=5692,x=0.5189985771163975,y=0.8788751540883317 -a=eks,b=eks,i=5693,x=0.2268536055075211,y=0.07181079334560747 -a=hat,b=zee,i=5694,x=0.9574100016777235,y=0.17039179071493438 -a=zee,b=pan,i=5695,x=0.9393222489267224,y=0.774430899802153 -a=zee,b=eks,i=5696,x=0.2640774691558284,y=0.8627504344994997 -a=pan,b=eks,i=5697,x=0.0327219679391374,y=0.09248968708796146 -a=hat,b=wye,i=5698,x=0.06810484760017288,y=0.6639875840703167 -a=zee,b=zee,i=5699,x=0.6656525429975034,y=0.2656212467516811 -a=pan,b=zee,i=5700,x=0.28090923774332355,y=0.8374951101696497 -a=wye,b=wye,i=5701,x=0.1179627885550506,y=0.9975425331219988 -a=eks,b=eks,i=5702,x=0.25289706880351914,y=0.2805563313790924 -a=hat,b=pan,i=5703,x=0.72917739071484,y=0.690903665960745 -a=zee,b=wye,i=5704,x=0.5782219259637615,y=0.6129742019787713 -a=hat,b=zee,i=5705,x=0.04579072787896754,y=0.15799336306835265 -a=hat,b=eks,i=5706,x=0.2189964629062231,y=0.6072901175002905 -a=zee,b=zee,i=5707,x=0.5807599756368977,y=0.28039036085635494 -a=hat,b=hat,i=5708,x=0.5348701164177605,y=0.871699930863178 -a=zee,b=pan,i=5709,x=0.6457903828308892,y=0.9224142093441036 -a=wye,b=zee,i=5710,x=0.7433946942246273,y=0.7685021078153906 -a=wye,b=zee,i=5711,x=0.243617265440373,y=0.9593069077433208 -a=hat,b=eks,i=5712,x=0.6655721179929885,y=0.6283331080904476 -a=eks,b=eks,i=5713,x=0.5690397938907296,y=0.9770357412029763 -a=wye,b=zee,i=5714,x=0.08482160064983257,y=0.03799417629580293 -a=eks,b=eks,i=5715,x=0.6755655231911353,y=0.4811405314521109 -a=eks,b=hat,i=5716,x=0.21238778822910676,y=0.3806052020082521 -a=eks,b=wye,i=5717,x=0.6979537966601973,y=0.42962472621589876 -a=zee,b=wye,i=5718,x=0.5593594936211146,y=0.16162369293678702 -a=wye,b=pan,i=5719,x=0.5431877225362253,y=0.8355498406808398 -a=eks,b=pan,i=5720,x=0.08305185712441976,y=0.051555598682940684 -a=zee,b=hat,i=5721,x=0.2195036864656421,y=0.0024237944219759333 -a=wye,b=zee,i=5722,x=0.10456345278337953,y=0.509746172766625 -a=eks,b=zee,i=5723,x=0.21507165298767472,y=0.3682335327240591 -a=hat,b=eks,i=5724,x=0.8143828554234033,y=0.24040241057094147 -a=eks,b=eks,i=5725,x=0.9447207896646325,y=0.5966728037991648 -a=wye,b=hat,i=5726,x=0.14625361456888575,y=0.5773510905462336 -a=wye,b=zee,i=5727,x=0.8249759724947993,y=0.8786053736989866 -a=wye,b=pan,i=5728,x=0.2648916398523009,y=0.36807949569468823 -a=wye,b=zee,i=5729,x=0.38861160385421634,y=0.008675492900147463 -a=eks,b=zee,i=5730,x=0.12149239438427939,y=0.4952581794297195 -a=hat,b=wye,i=5731,x=0.9834987933267317,y=0.9382393032643578 -a=hat,b=wye,i=5732,x=0.5015349091062511,y=0.6216857441435001 -a=eks,b=pan,i=5733,x=0.13872819430672179,y=0.13383706933234074 -a=hat,b=pan,i=5734,x=0.5107753291897712,y=0.1890771910893585 -a=zee,b=eks,i=5735,x=0.16433787761695273,y=0.9899324406741649 -a=pan,b=hat,i=5736,x=0.09547147433477066,y=0.8232711347746213 -a=eks,b=eks,i=5737,x=0.9827804718012476,y=0.8380939985179561 -a=wye,b=hat,i=5738,x=0.8055154582345196,y=0.6724553306516827 -a=hat,b=pan,i=5739,x=0.6476551335592238,y=0.2601855690050563 -a=eks,b=wye,i=5740,x=0.06533958654376182,y=0.08290954242914517 -a=eks,b=pan,i=5741,x=0.8637268770032811,y=0.5213399189681543 -a=hat,b=wye,i=5742,x=0.34236446310071245,y=0.9934982483299798 -a=hat,b=eks,i=5743,x=0.5295348501354114,y=0.7258797581771135 -a=hat,b=hat,i=5744,x=0.12378910131331311,y=0.40752356675537815 -a=eks,b=wye,i=5745,x=0.3665816980119626,y=0.6375063009827584 -a=hat,b=hat,i=5746,x=0.3584851213141641,y=0.7358326774690753 -a=hat,b=zee,i=5747,x=0.43583700578338747,y=0.672265347255106 -a=zee,b=pan,i=5748,x=0.7440532825684012,y=0.9785802799882344 -a=zee,b=hat,i=5749,x=0.21090673582102115,y=0.1689004632484875 -a=pan,b=pan,i=5750,x=0.8304494332695221,y=0.5545369624062666 -a=zee,b=pan,i=5751,x=0.5728551154691659,y=0.6693087997390269 -a=eks,b=wye,i=5752,x=0.4413629999732097,y=0.15979822952735956 -a=wye,b=eks,i=5753,x=0.7095091807055749,y=0.724643932584749 -a=zee,b=wye,i=5754,x=0.7672243199159505,y=0.2279066139221857 -a=zee,b=zee,i=5755,x=0.3010837648341733,y=0.025119103758309502 -a=pan,b=zee,i=5756,x=0.6193965896501459,y=0.8537626115609437 -a=wye,b=hat,i=5757,x=0.1224660035525037,y=0.9089730465198579 -a=wye,b=zee,i=5758,x=0.7467869025815791,y=0.7773472293348217 -a=eks,b=zee,i=5759,x=0.5808704155987169,y=0.7833615756850842 -a=hat,b=eks,i=5760,x=0.9162336115551181,y=0.823024870348188 -a=eks,b=pan,i=5761,x=0.8487786036617613,y=0.622984817551366 -a=wye,b=pan,i=5762,x=0.40655642829036065,y=0.4636508847184254 -a=eks,b=zee,i=5763,x=0.5976566500579671,y=0.43395514824679315 -a=zee,b=eks,i=5764,x=0.3648319525198409,y=0.8451336137273936 -a=eks,b=hat,i=5765,x=0.18805948712913445,y=0.22065247387702902 -a=hat,b=eks,i=5766,x=0.46718203983164364,y=0.5797529176785338 -a=wye,b=wye,i=5767,x=0.3576483350283548,y=0.7099943913835636 -a=zee,b=wye,i=5768,x=0.3112657659379815,y=0.7236135438320516 -a=pan,b=wye,i=5769,x=0.12034641162140858,y=0.7632931531006384 -a=wye,b=zee,i=5770,x=0.2844962427329081,y=0.46659983713341124 -a=pan,b=hat,i=5771,x=0.8904572608374995,y=0.8849293322073792 -a=wye,b=wye,i=5772,x=0.7038981127406301,y=0.494354667366391 -a=pan,b=eks,i=5773,x=0.5155930172001615,y=0.9788581972056736 -a=zee,b=eks,i=5774,x=0.28797189143581137,y=0.8675122476473998 -a=zee,b=pan,i=5775,x=0.03055433366810012,y=0.1704580136613072 -a=pan,b=eks,i=5776,x=0.7165945800863369,y=0.6653908462460456 -a=pan,b=eks,i=5777,x=0.8730284129862198,y=0.6933278671481614 -a=pan,b=zee,i=5778,x=0.18335757641115535,y=0.5465471193000622 -a=zee,b=hat,i=5779,x=0.10449109525989031,y=0.09472821919765906 -a=zee,b=wye,i=5780,x=0.4996898459570338,y=0.788832071937286 -a=hat,b=hat,i=5781,x=0.9223990594381151,y=0.9860563250941797 -a=pan,b=pan,i=5782,x=0.21543034149293305,y=0.7487921850342059 -a=hat,b=zee,i=5783,x=0.6163250225253557,y=0.7015824283135457 -a=zee,b=pan,i=5784,x=0.25355692244085803,y=0.5122385042700014 -a=hat,b=wye,i=5785,x=0.40569525676284146,y=0.22909456416866192 -a=wye,b=zee,i=5786,x=0.03516048679248873,y=0.8905801671138128 -a=wye,b=eks,i=5787,x=0.21927016627884677,y=0.5789606863931362 -a=pan,b=eks,i=5788,x=0.02515332637605694,y=0.5642073646656487 -a=hat,b=wye,i=5789,x=0.8879926912167789,y=0.288087517987045 -a=zee,b=zee,i=5790,x=0.8365237122409817,y=0.3161681746915882 -a=pan,b=pan,i=5791,x=0.9821624001072915,y=0.035862016352741 -a=hat,b=hat,i=5792,x=0.04225905159882992,y=0.11113794777514896 -a=wye,b=hat,i=5793,x=0.7433843634275165,y=0.5164678527321154 -a=eks,b=hat,i=5794,x=0.6887872847411916,y=0.485721605301096 -a=wye,b=zee,i=5795,x=0.6399305400537463,y=0.5169871749762857 -a=pan,b=eks,i=5796,x=0.10739150192981317,y=0.004460524149627276 -a=hat,b=hat,i=5797,x=0.5867728931987851,y=0.937578286245456 -a=eks,b=hat,i=5798,x=0.3908387810335817,y=0.34330528598151944 -a=wye,b=eks,i=5799,x=0.11663940947930529,y=0.2283382768880119 -a=hat,b=wye,i=5800,x=0.20766266556079938,y=0.06909200825337258 -a=zee,b=eks,i=5801,x=0.019645955696274475,y=0.9094238943256715 -a=hat,b=zee,i=5802,x=0.4647837023773008,y=0.30037328314118017 -a=wye,b=pan,i=5803,x=0.5646566533554874,y=0.15673400226423917 -a=eks,b=hat,i=5804,x=0.29845440226372855,y=0.24711215673748332 -a=zee,b=wye,i=5805,x=0.25960541840206386,y=0.22950027817819518 -a=wye,b=pan,i=5806,x=0.6653575136807429,y=0.9060998128185732 -a=pan,b=wye,i=5807,x=0.18771994519215784,y=0.26225112077131363 -a=wye,b=pan,i=5808,x=0.3666840512152372,y=0.15437085935635642 -a=zee,b=wye,i=5809,x=0.1494185162017646,y=0.7860811687162453 -a=wye,b=hat,i=5810,x=0.11952846412695983,y=0.8522219808940303 -a=hat,b=eks,i=5811,x=0.44094875130964795,y=0.7732717099587513 -a=eks,b=hat,i=5812,x=0.5559531679203801,y=0.026931495207055067 -a=hat,b=zee,i=5813,x=0.5451345812741655,y=0.4792657127863339 -a=eks,b=wye,i=5814,x=0.3619763137230263,y=0.3300717677846403 -a=eks,b=zee,i=5815,x=0.48687526629526545,y=0.8584389551214576 -a=pan,b=eks,i=5816,x=0.9160561949834121,y=0.5246537157918573 -a=pan,b=wye,i=5817,x=0.3309523992695672,y=0.8070632628360801 -a=pan,b=zee,i=5818,x=0.20345133041566366,y=0.5750982955524265 -a=zee,b=eks,i=5819,x=0.07183321376053509,y=0.9726675502317286 -a=wye,b=wye,i=5820,x=0.9675205269852082,y=0.8456558793367495 -a=hat,b=zee,i=5821,x=0.319976254021178,y=0.8734609010107423 -a=eks,b=eks,i=5822,x=0.6616970307501397,y=0.6091232839670194 -a=eks,b=pan,i=5823,x=0.5176519151206722,y=0.021797183751670723 -a=eks,b=zee,i=5824,x=0.008069601151581285,y=0.4982567352783567 -a=pan,b=hat,i=5825,x=0.5827800197345394,y=0.7803525569338927 -a=pan,b=pan,i=5826,x=0.2538325082222126,y=0.9476879457255432 -a=wye,b=eks,i=5827,x=0.9514763137560248,y=0.20882670554843952 -a=wye,b=zee,i=5828,x=0.9320615638508492,y=0.19881625022009897 -a=pan,b=hat,i=5829,x=0.9764966414862699,y=0.4156514128952272 -a=hat,b=pan,i=5830,x=0.3667779041985445,y=0.705757188907245 -a=eks,b=eks,i=5831,x=0.2131869859612514,y=0.051574404230206206 -a=hat,b=eks,i=5832,x=0.536815843763481,y=0.9725354850537404 -a=eks,b=wye,i=5833,x=0.06151529817648871,y=0.7067840865178908 -a=pan,b=hat,i=5834,x=0.40809909826591584,y=0.9348168564556171 -a=eks,b=eks,i=5835,x=0.565996045716497,y=0.4508098512548929 -a=eks,b=wye,i=5836,x=0.8956966597743651,y=0.8528472084728154 -a=eks,b=pan,i=5837,x=0.4574051555265334,y=0.8299651056659689 -a=pan,b=wye,i=5838,x=0.40192120844730816,y=0.01299427191690905 -a=wye,b=hat,i=5839,x=0.9215400303532923,y=0.45266271324432283 -a=pan,b=wye,i=5840,x=0.24154556129725246,y=0.5622236434363397 -a=zee,b=wye,i=5841,x=0.1727248222190798,y=0.6210983576320617 -a=wye,b=eks,i=5842,x=0.6216373633536472,y=0.9301770846288369 -a=eks,b=eks,i=5843,x=0.7492151915521785,y=0.39861528823986403 -a=zee,b=pan,i=5844,x=0.760328363920412,y=0.25716006527035284 -a=hat,b=eks,i=5845,x=0.43975939611821113,y=0.8916429935358784 -a=zee,b=zee,i=5846,x=0.162570991251604,y=0.26519462331398813 -a=wye,b=zee,i=5847,x=0.27955183683250895,y=0.593734945819627 -a=hat,b=hat,i=5848,x=0.9956327931315808,y=0.8873051757938238 -a=hat,b=pan,i=5849,x=0.7302167315792862,y=0.21263835483392501 -a=wye,b=pan,i=5850,x=0.9313090088228326,y=0.9743729163851863 -a=eks,b=zee,i=5851,x=0.22409910130745192,y=0.13300739204811318 -a=hat,b=pan,i=5852,x=0.9764589316784894,y=0.5367076815906018 -a=hat,b=hat,i=5853,x=0.9153388125321756,y=0.3586120018450708 -a=zee,b=eks,i=5854,x=0.13307347063070984,y=0.35231749332115525 -a=eks,b=zee,i=5855,x=0.9817510205071746,y=0.345441110032638 -a=hat,b=hat,i=5856,x=0.02372556298430306,y=0.7721928675615208 -a=eks,b=hat,i=5857,x=0.5417934009900822,y=0.13544385674063442 -a=eks,b=zee,i=5858,x=0.0460418994677978,y=0.5267262848816568 -a=eks,b=wye,i=5859,x=0.07297199386640929,y=0.027345228589134907 -a=eks,b=eks,i=5860,x=0.9833629242563793,y=0.9992250545586543 -a=eks,b=hat,i=5861,x=0.885544518143363,y=0.6319209563437962 -a=wye,b=eks,i=5862,x=0.5814001743292831,y=0.2775598540805262 -a=eks,b=wye,i=5863,x=0.46034553116676624,y=0.8419263560507274 -a=hat,b=pan,i=5864,x=0.8998046024201602,y=0.13280033695524907 -a=zee,b=zee,i=5865,x=0.7705835578927107,y=0.47218544336953905 -a=wye,b=wye,i=5866,x=0.0548129640505145,y=0.8443145744599417 -a=eks,b=zee,i=5867,x=0.9115822381629575,y=0.7866137441239371 -a=zee,b=zee,i=5868,x=0.6094609434293627,y=0.5377506393673299 -a=zee,b=wye,i=5869,x=0.018050024906604567,y=0.7925383948436677 -a=pan,b=wye,i=5870,x=0.7185567353405748,y=0.9625690376428901 -a=zee,b=zee,i=5871,x=0.028580144473957514,y=0.3101568871452759 -a=pan,b=pan,i=5872,x=0.3820471070600516,y=0.35563824254246 -a=hat,b=pan,i=5873,x=0.48211948675174343,y=0.2808314182510484 -a=zee,b=zee,i=5874,x=0.4244763123071966,y=0.27813346850123377 -a=hat,b=hat,i=5875,x=0.08023425641620874,y=0.3562943757988909 -a=eks,b=zee,i=5876,x=0.42409197009601207,y=0.2580874448511281 -a=zee,b=hat,i=5877,x=0.6106977731868735,y=0.8348351384198046 -a=hat,b=pan,i=5878,x=0.7267758858416487,y=0.6189509030501132 -a=eks,b=pan,i=5879,x=0.9304167092235895,y=0.7812522227544872 -a=pan,b=pan,i=5880,x=0.16403167139407027,y=0.9377394665165222 -a=zee,b=zee,i=5881,x=0.9728622687660967,y=0.15656315863552106 -a=wye,b=hat,i=5882,x=0.1079539981243911,y=0.27269401005584115 -a=pan,b=wye,i=5883,x=0.3575378506176421,y=0.6513985153042581 -a=pan,b=pan,i=5884,x=0.5893199011375699,y=0.9675602927187726 -a=zee,b=wye,i=5885,x=0.7855309055804873,y=0.8242084722200425 -a=pan,b=hat,i=5886,x=0.21719695401350458,y=0.30358017023038153 -a=hat,b=hat,i=5887,x=0.9478034096451651,y=0.408314973093156 -a=pan,b=hat,i=5888,x=0.6047201198005093,y=0.9181081561579384 -a=hat,b=hat,i=5889,x=0.585057883337934,y=0.8637135279822525 -a=wye,b=hat,i=5890,x=0.7193606570599776,y=0.13247216321287003 -a=eks,b=hat,i=5891,x=0.38491586194929694,y=0.1469109750984342 -a=zee,b=pan,i=5892,x=0.9813253864700262,y=0.35805907741021115 -a=pan,b=pan,i=5893,x=0.3991583932113212,y=0.9300651976220902 -a=eks,b=hat,i=5894,x=0.4664037391639634,y=0.665201311994492 -a=eks,b=zee,i=5895,x=0.34688995428502123,y=0.05521465426780947 -a=pan,b=hat,i=5896,x=0.9024771073805518,y=0.604435930128322 -a=wye,b=eks,i=5897,x=0.8964292531785713,y=0.4797408068859207 -a=zee,b=zee,i=5898,x=0.9638020677593624,y=0.9758009686628205 -a=pan,b=zee,i=5899,x=0.1740859761427278,y=0.6267077732379096 -a=wye,b=eks,i=5900,x=0.5229577213131821,y=0.18158149929552536 -a=pan,b=wye,i=5901,x=0.7384787869595655,y=0.41300809363121915 -a=pan,b=hat,i=5902,x=0.41567839319864996,y=0.6586070339163206 -a=pan,b=pan,i=5903,x=0.16296558429713726,y=0.6335579931374635 -a=wye,b=eks,i=5904,x=0.791240301793597,y=0.5905379287555277 -a=eks,b=eks,i=5905,x=0.8611318706939175,y=0.012613640405385818 -a=wye,b=pan,i=5906,x=0.25968317122777085,y=0.21946674504226305 -a=eks,b=pan,i=5907,x=0.20429202129242863,y=0.2739618927896226 -a=hat,b=zee,i=5908,x=0.5139620538238665,y=0.4911358765578846 -a=pan,b=hat,i=5909,x=0.2621296183552325,y=0.6724917830910391 -a=eks,b=hat,i=5910,x=0.42415855241583555,y=0.6705675010493037 -a=wye,b=pan,i=5911,x=0.865745658241438,y=0.58440580479703 -a=eks,b=hat,i=5912,x=0.8061623351763454,y=0.6282727719209886 -a=pan,b=zee,i=5913,x=0.07513903167347802,y=0.6097002489929698 -a=zee,b=hat,i=5914,x=0.6882661603529711,y=0.8887129009982704 -a=wye,b=wye,i=5915,x=0.25957436941921963,y=0.5267742816791648 -a=hat,b=zee,i=5916,x=0.5369361894430387,y=0.7602843160092176 -a=zee,b=eks,i=5917,x=0.7603685712259192,y=0.6343676597010043 -a=pan,b=hat,i=5918,x=0.366468458362766,y=0.03541459276961356 -a=hat,b=zee,i=5919,x=0.572831435062068,y=0.03791669059169456 -a=hat,b=eks,i=5920,x=0.22277164773544,y=0.6701548094942816 -a=eks,b=hat,i=5921,x=0.7220748068466161,y=0.9135263674287071 -a=hat,b=hat,i=5922,x=0.7007543076445784,y=0.5785000013877882 -a=zee,b=pan,i=5923,x=0.07333176505461592,y=0.6129972451763929 -a=eks,b=eks,i=5924,x=0.7977706056198149,y=0.3145761502534876 -a=pan,b=wye,i=5925,x=0.02234819330370974,y=0.24864881451646326 -a=eks,b=wye,i=5926,x=0.31862517237026744,y=0.6707830122783046 -a=zee,b=wye,i=5927,x=0.7736532335919073,y=0.06276902730360534 -a=zee,b=hat,i=5928,x=0.571180118057766,y=0.23249209976534324 -a=wye,b=wye,i=5929,x=0.765996158956063,y=0.7875000435827569 -a=eks,b=eks,i=5930,x=0.9258500136940602,y=0.14002804460000795 -a=zee,b=pan,i=5931,x=0.14870262574003812,y=0.25758171933702145 -a=hat,b=hat,i=5932,x=0.6061740180931977,y=0.0647099944297298 -a=zee,b=eks,i=5933,x=0.21312616005615392,y=0.1555687828207697 -a=wye,b=wye,i=5934,x=0.32174717605868364,y=0.5617674601864029 -a=zee,b=eks,i=5935,x=0.4278905571169318,y=0.7204350849259756 -a=wye,b=wye,i=5936,x=0.5169276990526274,y=0.34471540929660927 -a=hat,b=wye,i=5937,x=0.7939967856315264,y=0.9601200264326587 -a=pan,b=pan,i=5938,x=0.7447545239901884,y=0.8615464344679636 -a=wye,b=pan,i=5939,x=0.32618776050076514,y=0.04356428568705306 -a=zee,b=pan,i=5940,x=0.30848692760824414,y=0.4765563067775509 -a=zee,b=eks,i=5941,x=0.47731093944717395,y=0.20531029159472136 -a=zee,b=hat,i=5942,x=0.14569062187871828,y=0.29647189869590773 -a=zee,b=eks,i=5943,x=0.8514541851665678,y=0.47380190170636116 -a=wye,b=pan,i=5944,x=0.8579979653959152,y=0.020846772517364776 -a=pan,b=eks,i=5945,x=0.6760904036707333,y=0.038710653329522726 -a=wye,b=pan,i=5946,x=0.4654804137932894,y=0.034558917439536097 -a=zee,b=hat,i=5947,x=0.21695412923454904,y=0.43929843802398505 -a=hat,b=hat,i=5948,x=0.5757328621980413,y=0.6353025655596225 -a=wye,b=eks,i=5949,x=0.9623043477520935,y=0.11211455399205761 -a=pan,b=eks,i=5950,x=0.2489174544195356,y=0.9543858789744019 -a=wye,b=zee,i=5951,x=0.2551744295171663,y=0.6371014605832375 -a=wye,b=zee,i=5952,x=0.6661892172394466,y=0.25609424535345615 -a=zee,b=eks,i=5953,x=0.9664924377661902,y=0.5704525111862812 -a=zee,b=zee,i=5954,x=0.7314435770258082,y=0.5760633916387623 -a=wye,b=eks,i=5955,x=0.11730300164253482,y=0.2437668953328913 -a=hat,b=wye,i=5956,x=0.2856744287649412,y=0.5130003461790801 -a=pan,b=wye,i=5957,x=0.7991558243539277,y=0.04715962071161517 -a=wye,b=hat,i=5958,x=0.4484915030384218,y=0.0021936451209908503 -a=wye,b=eks,i=5959,x=0.4276118637683318,y=0.9781842697081753 -a=wye,b=zee,i=5960,x=0.5390282464497976,y=0.21779961652631485 -a=hat,b=zee,i=5961,x=0.3083082640562401,y=0.43599613823729055 -a=pan,b=eks,i=5962,x=0.15236030642851295,y=0.11800538936265059 -a=zee,b=wye,i=5963,x=0.7842417183077839,y=0.8263558103417791 -a=wye,b=pan,i=5964,x=0.42422897642936763,y=0.5598064063472771 -a=wye,b=hat,i=5965,x=0.7381633325773709,y=0.7044839805205219 -a=eks,b=zee,i=5966,x=0.8246457170881877,y=0.546058458654676 -a=pan,b=wye,i=5967,x=0.03056556054577575,y=0.5661151347932647 -a=wye,b=wye,i=5968,x=0.6210050577035034,y=0.6524576650195097 -a=hat,b=pan,i=5969,x=0.7090572782654315,y=0.5364015328854267 -a=eks,b=zee,i=5970,x=0.6509530715275128,y=0.5780440319964154 -a=pan,b=pan,i=5971,x=0.2887825352259904,y=0.15004456717790193 -a=wye,b=pan,i=5972,x=0.831991442447814,y=0.26469776729003514 -a=zee,b=wye,i=5973,x=0.20543699412375216,y=0.7115776392376905 -a=pan,b=wye,i=5974,x=0.2632680009756867,y=0.5045539888483129 -a=zee,b=hat,i=5975,x=0.34854624620098384,y=0.12823216693877193 -a=hat,b=zee,i=5976,x=0.12265984923829065,y=0.46184314823141537 -a=zee,b=eks,i=5977,x=0.9593214911106812,y=0.18841934020738382 -a=zee,b=pan,i=5978,x=0.29873353271383263,y=0.8224260506438726 -a=wye,b=zee,i=5979,x=0.3367480944275053,y=0.9086030526073715 -a=eks,b=hat,i=5980,x=0.6119122505853635,y=0.08152300908632903 -a=eks,b=eks,i=5981,x=0.04584617519803835,y=0.07778733739846255 -a=hat,b=hat,i=5982,x=0.12903186206218742,y=0.34208394676963483 -a=wye,b=eks,i=5983,x=0.20225412929960151,y=0.467369874775762 -a=eks,b=zee,i=5984,x=0.43322997404163954,y=0.5286653070293011 -a=zee,b=zee,i=5985,x=0.5011026241476996,y=0.805862929391608 -a=zee,b=eks,i=5986,x=0.8754701645608397,y=0.38365755627001585 -a=pan,b=eks,i=5987,x=0.4615059476811778,y=0.052616042635722726 -a=hat,b=wye,i=5988,x=0.6628427322104598,y=0.7830019543371667 -a=hat,b=wye,i=5989,x=0.9291945030562897,y=0.3850137859960868 -a=wye,b=pan,i=5990,x=0.17713926799897517,y=0.23695227873073954 -a=pan,b=eks,i=5991,x=0.7450679111488475,y=0.28865753240279957 -a=hat,b=wye,i=5992,x=0.608480151924532,y=0.2124705647477415 -a=wye,b=zee,i=5993,x=0.5294790360408727,y=0.8997422208092308 -a=wye,b=pan,i=5994,x=0.8452227401580423,y=0.17900534407423696 -a=pan,b=pan,i=5995,x=0.9106908084952221,y=0.4539070115302676 -a=zee,b=wye,i=5996,x=0.5373426059376083,y=0.4221246992022961 -a=pan,b=wye,i=5997,x=0.5531071589049933,y=0.08637347865871003 -a=zee,b=pan,i=5998,x=0.21694616431952807,y=0.39150665545149743 -a=zee,b=wye,i=5999,x=0.6413081783785531,y=0.1998976766972167 -a=eks,b=eks,i=6000,x=0.2792519668247778,y=0.5138064566303124 -a=hat,b=zee,i=6001,x=0.5185086838193509,y=0.7904042779588125 -a=eks,b=eks,i=6002,x=0.39573160678139196,y=0.4615703290236336 -a=zee,b=hat,i=6003,x=0.0715926003170353,y=0.6334247799868317 -a=pan,b=zee,i=6004,x=0.24114560678004815,y=0.9328567037965978 -a=hat,b=wye,i=6005,x=0.7983815573901718,y=0.7761184973619634 -a=hat,b=zee,i=6006,x=0.5384751396537175,y=0.3888207115072827 -a=wye,b=pan,i=6007,x=0.8053846290661436,y=0.8678997964852174 -a=pan,b=eks,i=6008,x=0.41565599952378685,y=0.9850186434544672 -a=wye,b=wye,i=6009,x=0.0929139240769814,y=0.5373260828931007 -a=zee,b=eks,i=6010,x=0.6485105788304564,y=0.4297840734143743 -a=hat,b=zee,i=6011,x=0.9000836207274523,y=0.21471020343061598 -a=eks,b=eks,i=6012,x=0.6658398998195909,y=0.13678166324566765 -a=hat,b=wye,i=6013,x=0.4176340542833341,y=0.9065866640956619 -a=zee,b=wye,i=6014,x=0.8507681738053369,y=0.11610028428937647 -a=eks,b=hat,i=6015,x=0.9615655580235888,y=0.3722658883094253 -a=pan,b=pan,i=6016,x=0.7515268934050028,y=0.6517374909352979 -a=pan,b=hat,i=6017,x=0.49152531929212073,y=0.7512315139958677 -a=eks,b=hat,i=6018,x=0.4684056585315659,y=0.337057411818393 -a=zee,b=hat,i=6019,x=0.46644646414956337,y=0.37632624811846627 -a=eks,b=zee,i=6020,x=0.8375544392876899,y=0.06208795125761901 -a=eks,b=wye,i=6021,x=0.853613881880828,y=0.42565283184216685 -a=wye,b=hat,i=6022,x=0.0008045774133644823,y=0.9649087112765938 -a=eks,b=wye,i=6023,x=0.728964866290429,y=0.20299302934138896 -a=wye,b=wye,i=6024,x=0.17509415050833677,y=0.6602044660320481 -a=pan,b=hat,i=6025,x=0.8660100438564455,y=0.43409555049096815 -a=hat,b=hat,i=6026,x=0.26534848529863153,y=0.15071960409960417 -a=hat,b=eks,i=6027,x=0.6918174742812051,y=0.18022893420812924 -a=pan,b=eks,i=6028,x=0.8921081985029767,y=0.918512738613517 -a=eks,b=hat,i=6029,x=0.5291325936429374,y=0.11343528410923331 -a=pan,b=eks,i=6030,x=0.6604483059910737,y=0.828006457014962 -a=hat,b=zee,i=6031,x=0.15437854915261007,y=0.503378274348622 -a=wye,b=pan,i=6032,x=0.18616681775349353,y=0.428462590403658 -a=wye,b=hat,i=6033,x=0.17782260468314637,y=0.3212752721293215 -a=zee,b=zee,i=6034,x=0.1872485063005922,y=0.11358951848324028 -a=wye,b=zee,i=6035,x=0.40200320956425806,y=0.5915516801877846 -a=wye,b=eks,i=6036,x=0.6743134456217715,y=0.03587684243454348 -a=hat,b=pan,i=6037,x=0.13535704558051898,y=0.08799048432237733 -a=eks,b=hat,i=6038,x=0.45829076005760183,y=0.9312783969989717 -a=pan,b=wye,i=6039,x=0.8260078705928582,y=0.015009473265236828 -a=pan,b=eks,i=6040,x=0.02209842222005065,y=0.2707759101194467 -a=pan,b=pan,i=6041,x=0.24065041069096327,y=0.096992272385374 -a=wye,b=wye,i=6042,x=0.1257432277214967,y=0.7056875982657411 -a=wye,b=zee,i=6043,x=0.19024789027868116,y=0.8414234848855409 -a=zee,b=wye,i=6044,x=0.5264647677402654,y=0.16668422327274046 -a=wye,b=wye,i=6045,x=0.43588050348095864,y=0.4231462786478698 -a=zee,b=eks,i=6046,x=0.35017939224895767,y=0.31215765738608925 -a=eks,b=wye,i=6047,x=0.5417973498575591,y=0.47047382812068883 -a=hat,b=wye,i=6048,x=0.7766726125727336,y=0.5675508167476694 -a=zee,b=wye,i=6049,x=0.9832175361809419,y=0.2682166583462263 -a=wye,b=zee,i=6050,x=0.6951984651252766,y=0.5425712622829648 -a=pan,b=wye,i=6051,x=0.9427895952822903,y=0.8719941425198732 -a=hat,b=hat,i=6052,x=0.5361976672567662,y=0.5331863539216497 -a=eks,b=wye,i=6053,x=0.7102521301167394,y=0.017628741065697007 -a=eks,b=hat,i=6054,x=0.7073320813195529,y=0.9382615280812954 -a=wye,b=wye,i=6055,x=0.9034120549999815,y=0.9428661865045129 -a=wye,b=zee,i=6056,x=0.9036169505703209,y=0.8702961297029511 -a=pan,b=zee,i=6057,x=0.351391651879459,y=0.22131930493166563 -a=hat,b=pan,i=6058,x=0.4633029443317498,y=0.9006978783785164 -a=pan,b=hat,i=6059,x=0.8954915180233931,y=0.5799236237902317 -a=wye,b=pan,i=6060,x=0.011291356990852042,y=0.7765350029774964 -a=wye,b=hat,i=6061,x=0.8964276551673388,y=0.09468753423212417 -a=eks,b=zee,i=6062,x=0.32542453183848197,y=0.5356755758750752 -a=pan,b=pan,i=6063,x=0.4553835211035392,y=0.421964673707642 -a=eks,b=eks,i=6064,x=0.9195082628714536,y=0.7843278824429687 -a=wye,b=eks,i=6065,x=0.43792520749353625,y=0.9395208618424521 -a=hat,b=zee,i=6066,x=0.6147064931036405,y=0.9150698526901345 -a=zee,b=eks,i=6067,x=0.22286944513587603,y=0.5667267901072823 -a=zee,b=pan,i=6068,x=0.1015880769763784,y=0.9719880080896737 -a=zee,b=hat,i=6069,x=0.8599055004647317,y=0.09826062758286946 -a=hat,b=pan,i=6070,x=0.6313496582432914,y=0.9900649342170824 -a=pan,b=pan,i=6071,x=0.8928836261132681,y=0.5415114404183805 -a=zee,b=wye,i=6072,x=0.7452277791699898,y=0.27999313704075457 -a=wye,b=wye,i=6073,x=0.018510579550919615,y=0.6478773625532628 -a=pan,b=hat,i=6074,x=0.14632992450201188,y=0.7026424321895863 -a=pan,b=eks,i=6075,x=0.8012118002371259,y=0.7203879849887644 -a=hat,b=wye,i=6076,x=0.8379974247825939,y=0.6503639424507504 -a=pan,b=zee,i=6077,x=0.5778438306895812,y=0.3635043725548298 -a=hat,b=eks,i=6078,x=0.6372234825627152,y=0.5775364684644685 -a=wye,b=hat,i=6079,x=0.788390001290666,y=0.08406257620709923 -a=eks,b=hat,i=6080,x=0.5842098929256355,y=0.9268385178778537 -a=eks,b=zee,i=6081,x=0.8045184557436604,y=0.3550708830410243 -a=wye,b=hat,i=6082,x=0.6940314918085063,y=0.9546919945201542 -a=zee,b=wye,i=6083,x=0.07677730138586769,y=0.27970074396540523 -a=hat,b=hat,i=6084,x=0.8231273607660942,y=0.7945531787758096 -a=pan,b=zee,i=6085,x=0.149414209891241,y=0.785222866060064 -a=hat,b=zee,i=6086,x=0.8656687722742876,y=0.3783605596273294 -a=pan,b=hat,i=6087,x=0.7452242982918568,y=0.933266614617221 -a=eks,b=eks,i=6088,x=0.9407795350577164,y=0.8986498240204077 -a=zee,b=wye,i=6089,x=0.20326626549933924,y=0.9955640843974876 -a=eks,b=pan,i=6090,x=0.838908851853637,y=0.9142053659359575 -a=pan,b=zee,i=6091,x=0.2805934812907199,y=0.4958691991853912 -a=hat,b=hat,i=6092,x=0.11050475306966923,y=0.6388348781021509 -a=zee,b=hat,i=6093,x=0.665308883447062,y=0.06804657653188073 -a=zee,b=wye,i=6094,x=0.38062861091901556,y=0.1551403595265176 -a=eks,b=zee,i=6095,x=0.6890247160219993,y=0.37496310117295584 -a=eks,b=hat,i=6096,x=0.42296496745953693,y=0.028270087708508695 -a=zee,b=pan,i=6097,x=0.16613072961880582,y=0.6781440562566766 -a=eks,b=wye,i=6098,x=0.004861307055076147,y=0.16556471646142745 -a=hat,b=wye,i=6099,x=0.45226025959304195,y=0.18641738624575777 -a=wye,b=eks,i=6100,x=0.6994211629442989,y=0.5162220389082391 -a=hat,b=eks,i=6101,x=0.21566053977410837,y=0.0009137416907488705 -a=zee,b=eks,i=6102,x=0.8280966067887752,y=0.694693806129609 -a=zee,b=pan,i=6103,x=0.6340964020751576,y=0.62642563404278 -a=eks,b=eks,i=6104,x=0.35610230144127086,y=0.6916343444424629 -a=pan,b=wye,i=6105,x=0.2907054181631238,y=0.6928671017273116 -a=zee,b=pan,i=6106,x=0.8553526569078405,y=0.9138200519516971 -a=hat,b=hat,i=6107,x=0.16347811679340452,y=0.6796304402643298 -a=pan,b=eks,i=6108,x=0.08545243832367033,y=0.26227816664595516 -a=pan,b=wye,i=6109,x=0.42064626396142935,y=0.03834575879901836 -a=hat,b=hat,i=6110,x=0.06431500264016754,y=0.8198549278735412 -a=pan,b=hat,i=6111,x=0.8176964039522118,y=0.27991537751096096 -a=wye,b=eks,i=6112,x=0.32643889115109914,y=0.057664918435550105 -a=eks,b=zee,i=6113,x=0.7830249162665363,y=0.9359267958767102 -a=zee,b=pan,i=6114,x=0.12372114799931111,y=0.006510213999872061 -a=eks,b=pan,i=6115,x=0.14468978749350747,y=0.9503328335027744 -a=pan,b=wye,i=6116,x=0.8796441138920073,y=0.7932277172417034 -a=zee,b=zee,i=6117,x=0.9246694666039478,y=0.18141663220397541 -a=wye,b=pan,i=6118,x=0.6353087660069283,y=0.5051898483269901 -a=pan,b=wye,i=6119,x=0.5863942231599231,y=0.001428085680191149 -a=wye,b=zee,i=6120,x=0.8391496713951982,y=0.8272270342812488 -a=pan,b=wye,i=6121,x=0.10848385354873591,y=0.4213783243233229 -a=eks,b=zee,i=6122,x=0.7851432595398691,y=0.8736148992334403 -a=pan,b=wye,i=6123,x=0.14384598748640032,y=0.32134746224637845 -a=hat,b=zee,i=6124,x=0.05088458565782927,y=0.9994183544894671 -a=hat,b=eks,i=6125,x=0.7256280642967333,y=0.8471794523838057 -a=eks,b=pan,i=6126,x=0.6585496392017636,y=0.4276868684164896 -a=wye,b=hat,i=6127,x=0.645442843855344,y=0.34584198249412534 -a=wye,b=hat,i=6128,x=0.5798880313425798,y=0.991140739248181 -a=zee,b=zee,i=6129,x=0.8451024180287646,y=0.4474449179206156 -a=pan,b=eks,i=6130,x=0.06722223792791904,y=0.14906728853790685 -a=eks,b=eks,i=6131,x=0.8733172145139986,y=0.754180892846082 -a=wye,b=wye,i=6132,x=0.21323342519040167,y=0.023037099194546995 -a=eks,b=hat,i=6133,x=0.2772309881804147,y=0.03618215388759871 -a=hat,b=wye,i=6134,x=0.3566779583699996,y=0.7569810016480044 -a=zee,b=zee,i=6135,x=0.4368219705298403,y=0.02593555893570043 -a=wye,b=hat,i=6136,x=0.13423307209566393,y=0.7786764748609936 -a=pan,b=wye,i=6137,x=0.26321994371190116,y=0.7448472659747205 -a=pan,b=eks,i=6138,x=0.09141195779591726,y=0.10884990452426058 -a=hat,b=eks,i=6139,x=0.8439060414873816,y=0.4078177506117555 -a=zee,b=eks,i=6140,x=0.6449410501908724,y=0.7328187261405557 -a=wye,b=wye,i=6141,x=0.31425705029105533,y=0.7492859328412478 -a=zee,b=zee,i=6142,x=0.657143123361377,y=0.37319179681546233 -a=pan,b=wye,i=6143,x=0.8303922450488143,y=0.04133052528317438 -a=pan,b=zee,i=6144,x=0.054269779082146474,y=0.7280169255714574 -a=pan,b=eks,i=6145,x=0.9449211141040083,y=0.18293190122317016 -a=zee,b=wye,i=6146,x=0.28919940890955353,y=0.7696928449638194 -a=wye,b=wye,i=6147,x=0.29949161102957667,y=0.5548662350346921 -a=zee,b=wye,i=6148,x=0.06803050982105852,y=0.6066130537591169 -a=eks,b=zee,i=6149,x=0.6534482020575438,y=0.2506945890953125 -a=eks,b=eks,i=6150,x=0.2543117769739106,y=0.2683840371177597 -a=wye,b=eks,i=6151,x=0.2875496688119247,y=0.44319198704607665 -a=wye,b=eks,i=6152,x=0.7099732953682635,y=0.5854903351687778 -a=wye,b=pan,i=6153,x=0.07854709434875495,y=0.3722757779564305 -a=pan,b=wye,i=6154,x=0.8844645043086019,y=0.0821083597407316 -a=zee,b=zee,i=6155,x=0.3642127687872748,y=0.5633536743710837 -a=wye,b=zee,i=6156,x=0.06825592495808563,y=0.1502278354043537 -a=hat,b=wye,i=6157,x=0.96483308459617,y=0.005464821632367056 -a=wye,b=wye,i=6158,x=0.5486690225111291,y=0.22135008972861803 -a=pan,b=wye,i=6159,x=0.962029830876355,y=0.39858158874481264 -a=hat,b=eks,i=6160,x=0.7011580850727354,y=0.6036204870691432 -a=eks,b=zee,i=6161,x=0.08747236952448512,y=0.6025426256044452 -a=hat,b=wye,i=6162,x=0.7456669839482689,y=0.1394569856909862 -a=hat,b=hat,i=6163,x=0.10827051081377403,y=0.16793651272516608 -a=wye,b=pan,i=6164,x=0.8979852141961816,y=0.13235901577397613 -a=zee,b=zee,i=6165,x=0.15629723258639028,y=0.8654019947072258 -a=pan,b=wye,i=6166,x=0.5836460911249829,y=0.5913706500552215 -a=pan,b=zee,i=6167,x=0.6207688091598478,y=0.47548687622711405 -a=eks,b=pan,i=6168,x=0.011142080206369753,y=0.11796822475814073 -a=wye,b=hat,i=6169,x=0.27571064540346324,y=0.849891289726519 -a=wye,b=hat,i=6170,x=0.05037038984895503,y=0.6127522806306696 -a=hat,b=eks,i=6171,x=0.6128807090186297,y=0.13380041255048647 -a=hat,b=zee,i=6172,x=0.4805916761138247,y=0.1482140011291747 -a=pan,b=zee,i=6173,x=0.07652496417334043,y=0.042388913077830326 -a=eks,b=eks,i=6174,x=0.43221049405771506,y=0.9702133355298461 -a=zee,b=hat,i=6175,x=0.22992120482659384,y=0.7893723418315517 -a=wye,b=wye,i=6176,x=0.8712880934289053,y=0.1426259097448438 -a=wye,b=pan,i=6177,x=0.03184609338086353,y=0.0814260689531977 -a=pan,b=eks,i=6178,x=0.18328780306168269,y=0.7969641159371771 -a=pan,b=hat,i=6179,x=0.44176808883841967,y=0.606631222409441 -a=pan,b=eks,i=6180,x=0.6707266041969419,y=0.8559378190156729 -a=eks,b=zee,i=6181,x=0.2802981253544844,y=0.3174939125127616 -a=hat,b=wye,i=6182,x=0.5963539674332015,y=0.8719750664328125 -a=hat,b=pan,i=6183,x=0.005703731409972823,y=0.13190978995990732 -a=wye,b=eks,i=6184,x=0.8185740040040715,y=0.29143129414848035 -a=hat,b=pan,i=6185,x=0.38534047699412566,y=0.653203878373999 -a=pan,b=eks,i=6186,x=0.8129419229181339,y=0.9565505011070674 -a=zee,b=eks,i=6187,x=0.9102216458464243,y=0.14788252816414793 -a=pan,b=pan,i=6188,x=0.3138266925669364,y=0.1423581267550319 -a=eks,b=zee,i=6189,x=0.1600695810764854,y=0.3703741621779819 -a=hat,b=zee,i=6190,x=0.855253088583113,y=0.4268359685582771 -a=pan,b=zee,i=6191,x=0.4936690941214801,y=0.8239585275348885 -a=zee,b=eks,i=6192,x=0.9698866358660461,y=0.45918790442353197 -a=zee,b=pan,i=6193,x=0.22555543203604156,y=0.354448421001617 -a=wye,b=zee,i=6194,x=0.567972797574568,y=0.48947921344717205 -a=pan,b=wye,i=6195,x=0.32782196923608053,y=0.5904659635589349 -a=hat,b=hat,i=6196,x=0.6643469112984154,y=0.21978754163260783 -a=hat,b=wye,i=6197,x=0.9175822141933855,y=0.8289821718204701 -a=pan,b=pan,i=6198,x=0.7387220064556718,y=0.634422986160881 -a=hat,b=hat,i=6199,x=0.27873509309298805,y=0.8518009401398621 -a=hat,b=pan,i=6200,x=0.9456083795785362,y=0.07976539092371093 -a=wye,b=zee,i=6201,x=0.3729199649979895,y=0.3737596699867053 -a=pan,b=eks,i=6202,x=0.47394220338381987,y=0.22208820414520292 -a=wye,b=wye,i=6203,x=0.43456592177296915,y=0.8898632264012567 -a=hat,b=hat,i=6204,x=0.01568433367414035,y=0.6760088307426864 -a=eks,b=pan,i=6205,x=0.9867459947802004,y=0.048081368596216145 -a=zee,b=eks,i=6206,x=0.4689131127096242,y=0.18743577113193155 -a=hat,b=pan,i=6207,x=0.35740607834132276,y=0.9046883371614931 -a=wye,b=pan,i=6208,x=0.38705607831183175,y=0.33125379993312465 -a=hat,b=pan,i=6209,x=0.1164284726722783,y=0.5077787588883211 -a=eks,b=pan,i=6210,x=0.11164707350592284,y=0.4366699296089537 -a=zee,b=hat,i=6211,x=0.1756835304978165,y=0.21235178828034162 -a=wye,b=wye,i=6212,x=0.4370538758875272,y=0.6712221542567061 -a=wye,b=zee,i=6213,x=0.223018528653398,y=0.07665796419452864 -a=wye,b=wye,i=6214,x=0.3196105142466139,y=0.5918579198886101 -a=hat,b=pan,i=6215,x=0.2642111043247998,y=0.7655889787356082 -a=eks,b=pan,i=6216,x=0.830827137944212,y=0.04852612916637178 -a=wye,b=eks,i=6217,x=0.8805402436632958,y=0.45841077395866314 -a=eks,b=pan,i=6218,x=0.413534591007817,y=0.23614970902594068 -a=zee,b=hat,i=6219,x=0.16354591153161113,y=0.9206152927733066 -a=eks,b=zee,i=6220,x=0.047918107206670224,y=0.11615158016485994 -a=wye,b=eks,i=6221,x=0.7465534540087728,y=0.9821197497223434 -a=eks,b=wye,i=6222,x=0.06680014273579682,y=0.18844745124665652 -a=eks,b=zee,i=6223,x=0.722803247048192,y=0.36350236589598184 -a=eks,b=hat,i=6224,x=0.4238158023951344,y=0.2511472296462649 -a=pan,b=pan,i=6225,x=0.9203832973582675,y=0.06804134828535513 -a=eks,b=hat,i=6226,x=0.02496410500180868,y=0.05574344857979974 -a=hat,b=hat,i=6227,x=0.38672001205322815,y=0.19823389210483422 -a=zee,b=wye,i=6228,x=0.82604777396307,y=0.4659557204008049 -a=hat,b=pan,i=6229,x=0.14688149819492824,y=0.09514280973942923 -a=zee,b=hat,i=6230,x=0.7075949539072733,y=0.4235760111709499 -a=zee,b=zee,i=6231,x=0.5376973727140149,y=0.2898522104137249 -a=hat,b=eks,i=6232,x=0.5875320141178829,y=0.2318829378753392 -a=wye,b=pan,i=6233,x=0.608930346989634,y=0.4394723390502957 -a=hat,b=pan,i=6234,x=0.3711000240622062,y=0.5630248688807553 -a=zee,b=hat,i=6235,x=0.6700739126174862,y=0.9940554433455402 -a=hat,b=hat,i=6236,x=0.4937178916169107,y=0.9804247824378383 -a=eks,b=zee,i=6237,x=0.9471147772457458,y=0.08993646421096724 -a=pan,b=zee,i=6238,x=0.8826315387759526,y=0.29842130130234024 -a=wye,b=pan,i=6239,x=0.8739810335218393,y=0.2932188268287632 -a=zee,b=zee,i=6240,x=0.7765733461710617,y=0.2833840343701606 -a=pan,b=eks,i=6241,x=0.8637612972836923,y=0.7179857913303808 -a=pan,b=wye,i=6242,x=0.7916044619336652,y=0.8298956143848671 -a=hat,b=wye,i=6243,x=0.03245716276075361,y=0.06220544584591636 -a=wye,b=hat,i=6244,x=0.12210504687225221,y=0.6815533723212936 -a=eks,b=zee,i=6245,x=0.46823867638384764,y=0.6642014993474107 -a=eks,b=hat,i=6246,x=0.29665539600807134,y=0.7003997740545368 -a=eks,b=hat,i=6247,x=0.3362821619192434,y=0.5279161806972573 -a=eks,b=zee,i=6248,x=0.5444822392275463,y=0.0876616329488289 -a=eks,b=hat,i=6249,x=0.20745998433546498,y=0.6115074760010532 -a=zee,b=wye,i=6250,x=0.1678104597445702,y=0.6488476640200247 -a=eks,b=hat,i=6251,x=0.7449272998418788,y=0.6080272372617547 -a=zee,b=pan,i=6252,x=0.5630148470870018,y=0.9374709146770936 -a=zee,b=eks,i=6253,x=0.3902801767495462,y=0.5732026335466424 -a=zee,b=eks,i=6254,x=0.16850436138589997,y=0.8738130855818549 -a=zee,b=zee,i=6255,x=0.9316229517968885,y=0.652503212541953 -a=zee,b=eks,i=6256,x=0.5901306196182216,y=0.0931368428666508 -a=hat,b=eks,i=6257,x=0.7050090746554877,y=0.8875603931761636 -a=eks,b=wye,i=6258,x=0.9454475219485642,y=0.5012059708954245 -a=zee,b=pan,i=6259,x=0.4266553967306278,y=0.4003433468882255 -a=wye,b=zee,i=6260,x=0.9923421841444514,y=0.8824722395488493 -a=hat,b=hat,i=6261,x=0.40702432370099206,y=0.7171214051987123 -a=hat,b=eks,i=6262,x=0.3350864667715827,y=0.014819836304338363 -a=wye,b=hat,i=6263,x=0.9268271428508724,y=0.8044165287448475 -a=eks,b=eks,i=6264,x=0.4779658182518448,y=0.8202291191900539 -a=pan,b=hat,i=6265,x=0.2970907219742721,y=0.1979486130274667 -a=hat,b=zee,i=6266,x=0.7137087061271212,y=0.013510967108152694 -a=eks,b=eks,i=6267,x=0.6051949380519777,y=0.7786588336276383 -a=eks,b=wye,i=6268,x=0.8158250525163169,y=0.4134056153971454 -a=eks,b=eks,i=6269,x=0.19963046420567765,y=0.7765565982643615 -a=hat,b=eks,i=6270,x=0.543219579817685,y=0.5740667894014433 -a=pan,b=eks,i=6271,x=0.46967904346855993,y=0.8165981152983919 -a=pan,b=hat,i=6272,x=0.866140011093518,y=0.3038034829369789 -a=zee,b=hat,i=6273,x=0.7504799514506184,y=0.5256684190391457 -a=eks,b=eks,i=6274,x=0.7402757803304741,y=0.8741323775731765 -a=zee,b=eks,i=6275,x=0.10740056926929464,y=0.24466182300866768 -a=pan,b=pan,i=6276,x=0.6952734267926836,y=0.3034126351184192 -a=hat,b=eks,i=6277,x=0.4555390450312061,y=0.29958791124739714 -a=pan,b=pan,i=6278,x=0.8010308117452736,y=0.10301620244633602 -a=pan,b=zee,i=6279,x=0.7313615800627254,y=0.1256082104913564 -a=pan,b=hat,i=6280,x=0.4855733066299236,y=0.8761128788327854 -a=hat,b=pan,i=6281,x=0.4484391085565852,y=0.4389498697416624 -a=pan,b=hat,i=6282,x=0.09083588457295921,y=0.7896685475022054 -a=zee,b=eks,i=6283,x=0.5390923448056928,y=0.5167672853818701 -a=wye,b=wye,i=6284,x=0.35204669568634417,y=0.4690592822602978 -a=pan,b=pan,i=6285,x=0.32173095582057487,y=0.21796469598272317 -a=zee,b=eks,i=6286,x=0.144962592956428,y=0.7722195658556293 -a=hat,b=wye,i=6287,x=0.2714129569031942,y=0.8615826556040387 -a=hat,b=zee,i=6288,x=0.07477462162312054,y=0.5791036060536199 -a=wye,b=zee,i=6289,x=0.7327389149804516,y=0.7332292873505851 -a=wye,b=hat,i=6290,x=0.21334531120997036,y=0.7835004731984553 -a=wye,b=pan,i=6291,x=0.72465968202963,y=0.8111622984322363 -a=wye,b=zee,i=6292,x=0.7179223482928053,y=0.7389960044426721 -a=wye,b=zee,i=6293,x=0.6388081928409085,y=0.34955396223940427 -a=pan,b=wye,i=6294,x=0.9468440956319596,y=0.4217394313328563 -a=pan,b=eks,i=6295,x=0.5390564367625461,y=0.044601959541880176 -a=pan,b=pan,i=6296,x=0.16446925567275705,y=0.2859671068853066 -a=zee,b=zee,i=6297,x=0.36656402569411484,y=0.7479751436902188 -a=zee,b=hat,i=6298,x=0.9752808469326072,y=0.5811620174961745 -a=zee,b=pan,i=6299,x=0.8830811226882286,y=0.2699573596370525 -a=pan,b=zee,i=6300,x=0.31023070105575734,y=0.11731145460396875 -a=zee,b=pan,i=6301,x=0.9479037050282592,y=0.396609639351287 -a=zee,b=zee,i=6302,x=0.24914699249882744,y=0.4481166721397105 -a=hat,b=zee,i=6303,x=0.8952025142838863,y=0.5374079020216094 -a=wye,b=eks,i=6304,x=0.7278787302021043,y=0.4613586504326308 -a=pan,b=zee,i=6305,x=0.1290986312271305,y=0.12638586813227837 -a=eks,b=hat,i=6306,x=0.12880877413554215,y=0.7937042890401891 -a=pan,b=hat,i=6307,x=0.5265554249602866,y=0.5324141264515088 -a=zee,b=eks,i=6308,x=0.6932899560091913,y=0.4224058829341274 -a=eks,b=eks,i=6309,x=0.6584180105748301,y=0.46624011433648027 -a=eks,b=eks,i=6310,x=0.4455507880824502,y=0.8273180891731959 -a=eks,b=hat,i=6311,x=0.9810589871426987,y=0.8707798683477451 -a=eks,b=pan,i=6312,x=0.20487685479037343,y=0.3809481389765218 -a=eks,b=zee,i=6313,x=0.8361568272178401,y=0.3358472395165475 -a=wye,b=zee,i=6314,x=0.463204899148721,y=0.8170995486225013 -a=eks,b=zee,i=6315,x=0.4236416770354665,y=0.6484535277551096 -a=zee,b=pan,i=6316,x=0.2909481028983725,y=0.6310311151465591 -a=eks,b=pan,i=6317,x=0.3794062074790783,y=0.4471294857197765 -a=zee,b=pan,i=6318,x=0.2692152520955172,y=0.22081394976202395 -a=zee,b=zee,i=6319,x=0.5181926783871064,y=0.1991481006591117 -a=hat,b=eks,i=6320,x=0.9361894740111099,y=0.11767606452557877 -a=pan,b=wye,i=6321,x=0.2769079772213442,y=0.7118580604878051 -a=wye,b=wye,i=6322,x=0.5167349179748397,y=0.9138123003320032 -a=hat,b=pan,i=6323,x=0.001915577829406656,y=0.5325392190044987 -a=zee,b=wye,i=6324,x=0.9515688609245834,y=0.6819481738668132 -a=wye,b=eks,i=6325,x=0.9593196183251438,y=0.8367522899279389 -a=zee,b=eks,i=6326,x=0.6840763322653561,y=0.48711604133900366 -a=zee,b=pan,i=6327,x=0.9887417195594495,y=0.8511851849030334 -a=zee,b=wye,i=6328,x=0.4752524014081069,y=0.5948633790977842 -a=pan,b=zee,i=6329,x=0.8670969736419382,y=0.22322204023719405 -a=hat,b=pan,i=6330,x=0.5128088389522093,y=0.8131565213796835 -a=wye,b=wye,i=6331,x=0.4909465554349871,y=0.8422488044877716 -a=eks,b=eks,i=6332,x=0.13395594485063067,y=0.8961331478845271 -a=hat,b=eks,i=6333,x=0.3615187221839192,y=0.4910814422431359 -a=wye,b=eks,i=6334,x=0.09211420131313564,y=0.423787234189663 -a=hat,b=zee,i=6335,x=0.4909870746929612,y=0.4355886224024228 -a=hat,b=zee,i=6336,x=0.45712566044414527,y=0.7396866168330615 -a=eks,b=hat,i=6337,x=0.579470745492393,y=0.8856435834505533 -a=wye,b=hat,i=6338,x=0.08580189556409401,y=0.18529503699085126 -a=zee,b=hat,i=6339,x=0.012498941021629406,y=0.8894278634707358 -a=wye,b=eks,i=6340,x=0.893469417305926,y=0.6681902139221949 -a=wye,b=wye,i=6341,x=0.7436478988526702,y=0.2699384378114361 -a=wye,b=pan,i=6342,x=0.494186739181505,y=0.7777818161245044 -a=zee,b=zee,i=6343,x=0.1034004605453186,y=0.39652659704684057 -a=zee,b=zee,i=6344,x=0.13448148210620792,y=0.6260474107034932 -a=pan,b=hat,i=6345,x=0.2613437423487872,y=0.9940438754118295 -a=wye,b=hat,i=6346,x=0.4029829128240823,y=0.11036697991316924 -a=zee,b=pan,i=6347,x=0.565275716092621,y=0.23420880259350974 -a=pan,b=eks,i=6348,x=0.5980140331893903,y=0.06910125165307579 -a=hat,b=pan,i=6349,x=0.8269557855792476,y=0.9027369919455107 -a=hat,b=zee,i=6350,x=0.5352885898361499,y=0.3388698770867209 -a=zee,b=wye,i=6351,x=0.9929432399676,y=0.7266233986268336 -a=hat,b=hat,i=6352,x=0.4603922787242829,y=0.8630173727305803 -a=zee,b=zee,i=6353,x=0.021330838330390844,y=0.3809296291373765 -a=pan,b=hat,i=6354,x=0.7002692145665447,y=0.5873523948555504 -a=eks,b=zee,i=6355,x=0.7096421804081511,y=0.8295306415940142 -a=eks,b=eks,i=6356,x=0.16187658808999894,y=0.8302220496819485 -a=zee,b=zee,i=6357,x=0.49409427660264216,y=0.4850204111936285 -a=zee,b=wye,i=6358,x=0.2708188103232835,y=0.9662266139049696 -a=hat,b=wye,i=6359,x=0.9607252863389836,y=0.5686827648028989 -a=pan,b=eks,i=6360,x=0.7560882445267275,y=0.8572550831102655 -a=zee,b=eks,i=6361,x=0.18272065148367533,y=0.739247187328454 -a=eks,b=zee,i=6362,x=0.3565928726289197,y=0.7787122695765799 -a=eks,b=hat,i=6363,x=0.2435075200137201,y=0.6410578487821268 -a=wye,b=hat,i=6364,x=0.914528515618754,y=0.9410825640734111 -a=hat,b=wye,i=6365,x=0.8343977017390618,y=0.4038557567547202 -a=eks,b=eks,i=6366,x=0.3386950606192106,y=0.06992633700519646 -a=wye,b=wye,i=6367,x=0.7504949488085239,y=0.786978752534252 -a=hat,b=zee,i=6368,x=0.5051737323297509,y=0.7652145340768823 -a=hat,b=wye,i=6369,x=0.7463935682542416,y=0.5295073352906969 -a=wye,b=pan,i=6370,x=0.49818710578255154,y=0.1690594948792461 -a=eks,b=wye,i=6371,x=0.49803548538778086,y=0.22335884494050284 -a=eks,b=hat,i=6372,x=0.4246224317545182,y=0.3262297869762637 -a=hat,b=pan,i=6373,x=0.0020932075053449184,y=0.9854117764909686 -a=wye,b=zee,i=6374,x=0.18643754020877645,y=0.3123085804500255 -a=hat,b=hat,i=6375,x=0.8001034675030699,y=0.9517591892658788 -a=pan,b=eks,i=6376,x=0.6252933549201062,y=0.555208264819299 -a=pan,b=pan,i=6377,x=0.1234059193898962,y=0.4282585828512744 -a=eks,b=pan,i=6378,x=0.110887922625855,y=0.6850395297332329 -a=hat,b=hat,i=6379,x=0.8361850070054325,y=0.19844462435428833 -a=pan,b=eks,i=6380,x=0.2714658186149983,y=0.8900328486062874 -a=hat,b=eks,i=6381,x=0.9299884067645247,y=0.9833998868880498 -a=zee,b=eks,i=6382,x=0.5086463065649875,y=0.7232680771660464 -a=eks,b=zee,i=6383,x=0.14567680811548367,y=0.7666281407205074 -a=pan,b=pan,i=6384,x=0.6344408306479109,y=0.06196040433120564 -a=eks,b=wye,i=6385,x=0.375259929118559,y=0.37681150088581805 -a=hat,b=pan,i=6386,x=0.09907032231055479,y=0.11845065981831315 -a=eks,b=wye,i=6387,x=0.5738630943778305,y=0.1629984838329911 -a=wye,b=wye,i=6388,x=0.023110383118460698,y=0.4068502633328007 -a=eks,b=wye,i=6389,x=0.06029233433804437,y=0.0069107595974849945 -a=eks,b=eks,i=6390,x=0.37636185226364116,y=0.33595097225386006 -a=wye,b=eks,i=6391,x=0.5269052228103134,y=0.06811348549954421 -a=eks,b=eks,i=6392,x=0.7225625151417873,y=0.24647861320372433 -a=pan,b=hat,i=6393,x=0.6164331222493035,y=0.799523761418903 -a=pan,b=eks,i=6394,x=0.9066239795995487,y=0.3810678910603539 -a=eks,b=eks,i=6395,x=0.013151988906827783,y=0.3911978077086571 -a=zee,b=pan,i=6396,x=0.05693046828037929,y=0.0830535181246761 -a=wye,b=pan,i=6397,x=0.09815785100601382,y=0.6838294083636631 -a=hat,b=wye,i=6398,x=0.8278262369190469,y=0.8063525578215112 -a=pan,b=pan,i=6399,x=0.10214678849235426,y=0.8695638422967837 -a=wye,b=zee,i=6400,x=0.30136696499099913,y=0.6753346559057617 -a=eks,b=pan,i=6401,x=0.3117980184170095,y=0.3896017834660054 -a=pan,b=zee,i=6402,x=0.9804741377964931,y=0.49631735811047895 -a=wye,b=pan,i=6403,x=0.374109581008899,y=0.9110444354943075 -a=zee,b=hat,i=6404,x=0.7164677134055616,y=0.9694565043354904 -a=pan,b=hat,i=6405,x=0.9759078114126464,y=0.7063179771371398 -a=pan,b=hat,i=6406,x=0.954175493846238,y=0.6691300320475423 -a=zee,b=hat,i=6407,x=0.04895042948869599,y=0.5565817121631146 -a=zee,b=zee,i=6408,x=0.31225714410247885,y=0.2676588944630799 -a=wye,b=zee,i=6409,x=0.7688696231859601,y=0.2251514431056416 -a=pan,b=eks,i=6410,x=0.0771175852385313,y=0.43719251713130314 -a=zee,b=pan,i=6411,x=0.6943439597980344,y=0.4529874687497758 -a=eks,b=pan,i=6412,x=0.028528724411183704,y=0.4117910378534779 -a=wye,b=wye,i=6413,x=0.6287761434833328,y=0.9307783735658955 -a=zee,b=pan,i=6414,x=0.16675267868516974,y=0.46567693999380766 -a=hat,b=hat,i=6415,x=0.8976720079433573,y=0.9828223660778185 -a=hat,b=pan,i=6416,x=0.047236756072866926,y=0.7378794124793239 -a=hat,b=pan,i=6417,x=0.5832411030367591,y=0.9477789434363258 -a=hat,b=hat,i=6418,x=0.3743966868977374,y=0.783174113073371 -a=hat,b=hat,i=6419,x=0.7816923607003607,y=0.26730270554894997 -a=zee,b=hat,i=6420,x=0.8712427179950256,y=0.7447570934180631 -a=wye,b=wye,i=6421,x=0.5648884056728719,y=0.5634331844443893 -a=hat,b=wye,i=6422,x=0.01694176656548152,y=0.07336362857726697 -a=wye,b=eks,i=6423,x=0.634648698039043,y=0.6818627870740478 -a=hat,b=wye,i=6424,x=0.2615797200021953,y=0.06268282068424968 -a=zee,b=hat,i=6425,x=0.4347562105046442,y=0.674781093628785 -a=hat,b=pan,i=6426,x=0.6291090221287023,y=0.7077446188899329 -a=zee,b=zee,i=6427,x=0.1266840835991615,y=0.4710457768189127 -a=hat,b=eks,i=6428,x=0.09464086229090107,y=0.47239885675212656 -a=wye,b=zee,i=6429,x=0.4663382505006868,y=0.8049521146793138 -a=zee,b=pan,i=6430,x=0.4694715777452184,y=0.8671762254103113 -a=eks,b=hat,i=6431,x=0.5070929456626403,y=0.4141949031576415 -a=zee,b=eks,i=6432,x=0.9977728531401571,y=0.5555230798468542 -a=eks,b=zee,i=6433,x=0.7714689740358521,y=0.4682319612714012 -a=wye,b=zee,i=6434,x=0.3396705468736063,y=0.7170093938098063 -a=eks,b=wye,i=6435,x=0.29949442818251637,y=0.2980558556550551 -a=hat,b=pan,i=6436,x=0.8917689813015088,y=0.984408429326343 -a=pan,b=eks,i=6437,x=0.07063477691831455,y=0.8731745285524414 -a=wye,b=eks,i=6438,x=0.9311531747307039,y=0.36017141690300103 -a=wye,b=eks,i=6439,x=0.27627014363793057,y=0.16739805033116262 -a=eks,b=eks,i=6440,x=0.54039073822999,y=0.7382909202030716 -a=pan,b=wye,i=6441,x=0.5364355943542373,y=0.8667607097366447 -a=zee,b=hat,i=6442,x=0.1019419739884182,y=0.8210522328943843 -a=zee,b=hat,i=6443,x=0.8392717810036734,y=0.4095062555606819 -a=zee,b=wye,i=6444,x=0.5115020732232286,y=0.5858898596014527 -a=eks,b=wye,i=6445,x=0.08215358744465884,y=0.4803964930713249 -a=pan,b=eks,i=6446,x=0.44656601416029373,y=0.025883415745221905 -a=eks,b=pan,i=6447,x=0.2131521138705983,y=0.44443595051013873 -a=hat,b=zee,i=6448,x=0.8877041378948662,y=0.37718161280744267 -a=hat,b=eks,i=6449,x=0.02954457910704722,y=0.18268010541285318 -a=wye,b=hat,i=6450,x=0.06540529634689618,y=0.6973248364919504 -a=hat,b=wye,i=6451,x=0.3603702418256457,y=0.945714519438643 -a=eks,b=zee,i=6452,x=0.06223787640046563,y=0.8925718669036773 -a=hat,b=hat,i=6453,x=0.6640804340662215,y=0.7894591475325365 -a=zee,b=hat,i=6454,x=0.3766538672292219,y=0.4455838705050216 -a=wye,b=pan,i=6455,x=0.23373281011403946,y=0.3153880547268789 -a=wye,b=pan,i=6456,x=0.03036849011680509,y=0.2750194685259788 -a=wye,b=eks,i=6457,x=0.7538211276818132,y=0.001441310514862515 -a=pan,b=hat,i=6458,x=0.09729717910412794,y=0.19414276392139473 -a=wye,b=hat,i=6459,x=0.5675430389740692,y=0.8272519001873508 -a=eks,b=wye,i=6460,x=0.5637263196436371,y=0.670195472057473 -a=wye,b=wye,i=6461,x=0.6778284989779373,y=0.0285879376093221 -a=hat,b=eks,i=6462,x=0.9921482859148919,y=0.5987898976105622 -a=wye,b=wye,i=6463,x=0.3211875999010735,y=0.7834800976581381 -a=eks,b=pan,i=6464,x=0.2544291614706208,y=0.6807274563683547 -a=wye,b=pan,i=6465,x=0.9167490958878957,y=0.9855848244933287 -a=pan,b=zee,i=6466,x=0.15059271173810918,y=0.44163751220849723 -a=zee,b=hat,i=6467,x=0.8143906454818576,y=0.05494909360709832 -a=pan,b=zee,i=6468,x=0.9487811607055657,y=0.47218047025346854 -a=eks,b=wye,i=6469,x=0.5901730276534817,y=0.8155922672887547 -a=hat,b=wye,i=6470,x=0.6390276410501727,y=0.7865739186729956 -a=hat,b=hat,i=6471,x=0.9494189095418566,y=0.3376440579707607 -a=wye,b=zee,i=6472,x=0.6214639311843375,y=0.5100489809959527 -a=wye,b=pan,i=6473,x=0.38012438275479565,y=0.990757480229546 -a=eks,b=eks,i=6474,x=0.21187331402552312,y=0.3570247389877106 -a=pan,b=wye,i=6475,x=0.1407760095778986,y=0.4114197966182903 -a=zee,b=eks,i=6476,x=0.9687676442631526,y=0.3778953089069811 -a=wye,b=hat,i=6477,x=0.4489569133156198,y=0.37328013990205033 -a=wye,b=wye,i=6478,x=0.42854180852415313,y=0.9807031803546391 -a=hat,b=zee,i=6479,x=0.702402839401389,y=0.7009502307426156 -a=eks,b=zee,i=6480,x=0.9676699721896564,y=0.22422126244502638 -a=hat,b=hat,i=6481,x=0.6708784819364922,y=0.8308286378718903 -a=hat,b=wye,i=6482,x=0.8345542484122913,y=0.2115567403921984 -a=eks,b=wye,i=6483,x=0.6489598152434705,y=0.725168237682496 -a=zee,b=wye,i=6484,x=0.12383076923326797,y=0.10227618505533276 -a=wye,b=wye,i=6485,x=0.6359239484918648,y=0.6087629645637064 -a=wye,b=wye,i=6486,x=0.26321351409255855,y=0.10213207378968225 -a=pan,b=eks,i=6487,x=0.4153808872409316,y=0.5380953444898547 -a=wye,b=zee,i=6488,x=0.4298876367578778,y=0.8740569087259292 -a=pan,b=eks,i=6489,x=0.7368633007515517,y=0.3235565157293787 -a=hat,b=eks,i=6490,x=0.1904681932728718,y=0.39823383688284875 -a=pan,b=hat,i=6491,x=0.40162401516303015,y=0.799676980010159 -a=zee,b=zee,i=6492,x=0.6594479172290615,y=0.14884894304112206 -a=hat,b=pan,i=6493,x=0.17669129422616314,y=0.17133013634096628 -a=wye,b=hat,i=6494,x=0.4038680680240342,y=0.9000810248451881 -a=pan,b=pan,i=6495,x=0.7458398054156802,y=0.15394809221770678 -a=hat,b=wye,i=6496,x=0.024616285726912657,y=0.5198835249687588 -a=eks,b=pan,i=6497,x=0.1184790227809902,y=0.7840803727709396 -a=zee,b=pan,i=6498,x=0.9228447198201761,y=0.09844115301637657 -a=zee,b=zee,i=6499,x=0.5093537663250951,y=0.5070363131757412 -a=wye,b=wye,i=6500,x=0.04793995870348999,y=0.7326376271762662 -a=wye,b=zee,i=6501,x=0.857769146584233,y=0.7284491562757176 -a=hat,b=wye,i=6502,x=0.13952314891314033,y=0.21138680405955823 -a=hat,b=zee,i=6503,x=0.0821042436799082,y=0.2380454193004119 -a=zee,b=pan,i=6504,x=0.22170850644080387,y=0.8591089479037638 -a=pan,b=pan,i=6505,x=0.6670057101772067,y=0.369664928277994 -a=wye,b=eks,i=6506,x=0.2228766869756198,y=0.23547292675257847 -a=hat,b=hat,i=6507,x=0.2037318613195901,y=0.8653218491418396 -a=zee,b=hat,i=6508,x=0.5293143753649202,y=0.3032899464869183 -a=wye,b=hat,i=6509,x=0.22689252452538788,y=0.01540955658171872 -a=zee,b=wye,i=6510,x=0.03761238359284913,y=0.04430693507101946 -a=pan,b=eks,i=6511,x=0.4156974178513727,y=0.6505604437223226 -a=zee,b=wye,i=6512,x=0.5717578999541683,y=0.583339576596991 -a=eks,b=wye,i=6513,x=0.2576348537935582,y=0.02891940447221053 -a=zee,b=wye,i=6514,x=0.7108561722879589,y=0.5343855601720103 -a=pan,b=wye,i=6515,x=0.20906185021483092,y=0.7346487645413573 -a=pan,b=pan,i=6516,x=0.16436389636346782,y=0.06142769237145096 -a=wye,b=hat,i=6517,x=0.9499786087950957,y=0.9169897551951627 -a=hat,b=wye,i=6518,x=0.11226676145430348,y=0.3389463928651728 -a=zee,b=zee,i=6519,x=0.2323137819710005,y=0.21425984944922594 -a=wye,b=eks,i=6520,x=0.7524818540927941,y=0.9710297784453114 -a=pan,b=wye,i=6521,x=0.4364322319855357,y=0.8466924609197165 -a=hat,b=wye,i=6522,x=0.9673009309832951,y=0.33015592019384987 -a=pan,b=zee,i=6523,x=0.5065662166353603,y=0.017151576997059825 -a=wye,b=pan,i=6524,x=0.4239737405316326,y=0.24586595155563684 -a=wye,b=eks,i=6525,x=0.666984074931497,y=0.5881526921363845 -a=zee,b=eks,i=6526,x=0.7035055465426836,y=0.9029683394431433 -a=hat,b=hat,i=6527,x=0.48083662190863985,y=0.6503200309394563 -a=eks,b=eks,i=6528,x=0.35544201168726874,y=0.26203559629802176 -a=eks,b=wye,i=6529,x=0.6483532909041725,y=0.27350007757294326 -a=hat,b=zee,i=6530,x=0.6725507341754717,y=0.8211175540313643 -a=pan,b=eks,i=6531,x=0.9263381279440988,y=0.7230758102834317 -a=zee,b=eks,i=6532,x=0.9504925230076702,y=0.3707214379298016 -a=pan,b=hat,i=6533,x=0.2968690724659714,y=0.5710523550663877 -a=hat,b=wye,i=6534,x=0.09447988348358638,y=0.21201328127649932 -a=hat,b=eks,i=6535,x=0.0022062240850495574,y=0.3458564847842249 -a=eks,b=eks,i=6536,x=0.08799574586608505,y=0.16463115926454674 -a=pan,b=pan,i=6537,x=0.15749262177445233,y=0.3950102135965362 -a=hat,b=hat,i=6538,x=0.4868613643303731,y=0.8080900505454058 -a=pan,b=eks,i=6539,x=0.7612094490147115,y=0.4401071622837852 -a=hat,b=zee,i=6540,x=0.42723999009924263,y=0.5155261035021511 -a=pan,b=hat,i=6541,x=0.0420481636052179,y=0.3896076829423738 -a=zee,b=pan,i=6542,x=0.6629759666763753,y=0.7114746505059143 -a=pan,b=pan,i=6543,x=0.8686279923185595,y=0.3493091545672151 -a=pan,b=hat,i=6544,x=0.48676766407802263,y=0.2518094002262543 -a=pan,b=eks,i=6545,x=0.8135981715168512,y=0.4300391107446847 -a=zee,b=hat,i=6546,x=0.18939671235009936,y=0.5074696127752749 -a=pan,b=wye,i=6547,x=0.7600528676641951,y=0.4426657030274146 -a=hat,b=zee,i=6548,x=0.9011359340858558,y=0.6061658741277544 -a=wye,b=wye,i=6549,x=0.2051254389063183,y=0.05111364491561332 -a=hat,b=zee,i=6550,x=0.38066561435480195,y=0.42936645455121314 -a=wye,b=pan,i=6551,x=0.018388994580471718,y=0.9954888468513496 -a=wye,b=wye,i=6552,x=0.6253051834446587,y=0.29559701533864535 -a=wye,b=eks,i=6553,x=0.33502063619497235,y=0.2610167700436856 -a=pan,b=hat,i=6554,x=0.7802269675523349,y=0.9534940914356625 -a=wye,b=hat,i=6555,x=0.005663846527729333,y=0.48584311997319796 -a=eks,b=hat,i=6556,x=0.14062017897722112,y=0.005932662015826984 -a=zee,b=pan,i=6557,x=0.3235867320680704,y=0.9056759816070373 -a=wye,b=eks,i=6558,x=0.8070546249299714,y=0.09046129583350693 -a=eks,b=hat,i=6559,x=0.9459853213004996,y=0.4362855250788259 -a=pan,b=wye,i=6560,x=0.0727664463558585,y=0.025570241966542673 -a=pan,b=zee,i=6561,x=0.6816547334568862,y=0.4142699086191578 -a=zee,b=hat,i=6562,x=0.516217374487157,y=0.6640919516818178 -a=hat,b=pan,i=6563,x=0.05685851331978431,y=0.6903540720393333 -a=eks,b=wye,i=6564,x=0.7790458055803663,y=0.6522738145614022 -a=hat,b=eks,i=6565,x=0.8990182808114324,y=0.971140059395297 -a=eks,b=zee,i=6566,x=0.5308026859083895,y=0.6453041296190671 -a=eks,b=hat,i=6567,x=0.4215632982227624,y=0.7633632892500558 -a=hat,b=hat,i=6568,x=0.6015424402169296,y=0.9136579408737084 -a=eks,b=zee,i=6569,x=0.07024602364065347,y=0.10258813515051479 -a=hat,b=zee,i=6570,x=0.3550675740695889,y=0.007910225883702049 -a=zee,b=pan,i=6571,x=0.1632710729418324,y=0.03017711376568888 -a=eks,b=pan,i=6572,x=0.9270875444507882,y=0.637374878466062 -a=hat,b=hat,i=6573,x=0.05509535512573205,y=0.8918234294509011 -a=wye,b=wye,i=6574,x=0.9555552809704153,y=0.41421382030170906 -a=pan,b=wye,i=6575,x=0.15402188087239954,y=0.8691716209727222 -a=pan,b=zee,i=6576,x=0.8777708761889912,y=0.5786474005042914 -a=pan,b=pan,i=6577,x=0.3993469483222466,y=0.3892398770682076 -a=hat,b=hat,i=6578,x=0.8463232011086974,y=0.18319003947637869 -a=wye,b=eks,i=6579,x=0.24777952654263558,y=0.27916343904186647 -a=eks,b=eks,i=6580,x=0.6495626911864495,y=0.9137400574083774 -a=eks,b=zee,i=6581,x=0.0552357804759368,y=0.27859129675614414 -a=eks,b=wye,i=6582,x=0.047528529169082234,y=0.06138863023310337 -a=zee,b=hat,i=6583,x=0.8563606600171147,y=0.015181563909825058 -a=wye,b=eks,i=6584,x=0.3654798126861838,y=0.8807563837162635 -a=eks,b=pan,i=6585,x=0.08337736967964804,y=0.03539849770256276 -a=pan,b=wye,i=6586,x=0.29250342016498887,y=0.3069941691864093 -a=wye,b=pan,i=6587,x=0.5020409286292801,y=0.009939761220784549 -a=pan,b=hat,i=6588,x=0.6710775244097316,y=0.29891597994587726 -a=eks,b=eks,i=6589,x=0.8981260130197878,y=0.341172072262118 -a=eks,b=hat,i=6590,x=0.036271533325818894,y=0.34617217226715424 -a=wye,b=pan,i=6591,x=0.42885075582120236,y=0.9638923170569789 -a=eks,b=zee,i=6592,x=0.9241230700230697,y=0.7087787442946673 -a=pan,b=eks,i=6593,x=0.5671688159882186,y=0.2525080171055939 -a=eks,b=eks,i=6594,x=0.09678454503956313,y=0.9394372732793339 -a=hat,b=wye,i=6595,x=0.2134794663649403,y=0.1743187405629919 -a=pan,b=zee,i=6596,x=0.7535951031670416,y=0.3524925624995391 -a=pan,b=wye,i=6597,x=0.7481435165529386,y=0.6957778649603638 -a=zee,b=hat,i=6598,x=0.6210617717475871,y=0.6190922851909458 -a=pan,b=zee,i=6599,x=0.18502780307376443,y=0.34510172711084 -a=eks,b=hat,i=6600,x=0.34120771327893296,y=0.5437219745072818 -a=zee,b=zee,i=6601,x=0.7435038730289294,y=0.06225845908254546 -a=zee,b=eks,i=6602,x=0.7661471810537874,y=0.11870848331729167 -a=zee,b=eks,i=6603,x=0.9777797463621237,y=0.09720023036402714 -a=pan,b=hat,i=6604,x=0.422595464517281,y=0.8343132654700024 -a=wye,b=hat,i=6605,x=0.10761057631214699,y=0.7430467022453479 -a=pan,b=zee,i=6606,x=0.8486989983659791,y=0.6465788461912306 -a=eks,b=hat,i=6607,x=0.7823679742941769,y=0.8209287515709784 -a=hat,b=eks,i=6608,x=0.7400121945607447,y=0.03882673241167289 -a=wye,b=hat,i=6609,x=0.12667845633514874,y=0.1111690903267013 -a=hat,b=zee,i=6610,x=0.9346894562923037,y=0.10587701420327944 -a=hat,b=wye,i=6611,x=0.6262544347274932,y=0.30525530738772355 -a=wye,b=hat,i=6612,x=0.8337403987989883,y=0.25060970159832463 -a=pan,b=zee,i=6613,x=0.8461001648282795,y=0.42374948718873573 -a=hat,b=wye,i=6614,x=0.7344391388034486,y=0.25789180389511723 -a=hat,b=zee,i=6615,x=0.78349042546449,y=0.44915494280220225 -a=zee,b=hat,i=6616,x=0.22594744492269403,y=0.16847954740221938 -a=hat,b=hat,i=6617,x=0.1680792215326481,y=0.7434162302269155 -a=pan,b=zee,i=6618,x=0.034862418341202295,y=0.7671853898444302 -a=wye,b=hat,i=6619,x=0.48364559195372436,y=0.5916684625577362 -a=zee,b=hat,i=6620,x=0.49520075702438326,y=0.1675286620908042 -a=pan,b=zee,i=6621,x=0.92531350722769,y=0.7331109839366486 -a=zee,b=wye,i=6622,x=0.28966831942694526,y=0.5726274862219165 -a=eks,b=pan,i=6623,x=0.8441127141759738,y=0.9967304913754049 -a=wye,b=hat,i=6624,x=0.5591280937962949,y=0.6627435675727004 -a=eks,b=wye,i=6625,x=0.5105119511152182,y=0.5062086629041608 -a=zee,b=hat,i=6626,x=0.9866848527389168,y=0.32213040281236427 -a=zee,b=pan,i=6627,x=0.021852600596809824,y=0.6287762047371142 -a=wye,b=zee,i=6628,x=0.34899619352678224,y=0.6762953600092646 -a=eks,b=wye,i=6629,x=0.042973374957347765,y=0.3504215411530547 -a=pan,b=hat,i=6630,x=0.5318569983484858,y=0.1981595013443107 -a=hat,b=zee,i=6631,x=0.3770252104819539,y=0.9521141704617042 -a=zee,b=hat,i=6632,x=0.251621124332819,y=0.8820641410404748 -a=hat,b=hat,i=6633,x=0.2959658325331481,y=0.13508551484281162 -a=wye,b=hat,i=6634,x=0.09078570109861495,y=0.496300237950696 -a=eks,b=pan,i=6635,x=0.1336818909314733,y=0.4638227719158149 -a=eks,b=wye,i=6636,x=0.07517679920524767,y=0.4915331134051061 -a=eks,b=wye,i=6637,x=0.3352816408227677,y=0.8140380433910319 -a=wye,b=zee,i=6638,x=0.591256877732877,y=0.5915874489265203 -a=zee,b=zee,i=6639,x=0.9221422139699282,y=0.47360413794657386 -a=eks,b=eks,i=6640,x=0.38457971591828066,y=0.7022912637900967 -a=eks,b=zee,i=6641,x=0.8781234363470478,y=0.8882819185534889 -a=hat,b=pan,i=6642,x=0.005715323745672962,y=0.2447512299512158 -a=eks,b=zee,i=6643,x=0.015710994394110722,y=0.33183466779705995 -a=wye,b=wye,i=6644,x=0.39250510547900563,y=0.08289629956063027 -a=eks,b=hat,i=6645,x=0.261494320247025,y=0.36299917636703616 -a=pan,b=pan,i=6646,x=0.24764166684766364,y=0.9615131721631346 -a=hat,b=zee,i=6647,x=0.07946351924617867,y=0.9130106536641815 -a=pan,b=wye,i=6648,x=0.23702724653048457,y=0.11584533450215717 -a=pan,b=hat,i=6649,x=0.6519700937726137,y=0.34886054594961424 -a=hat,b=wye,i=6650,x=0.4661494621587131,y=0.17426048946142003 -a=zee,b=eks,i=6651,x=0.47348695334894386,y=0.4301930194799014 -a=pan,b=zee,i=6652,x=0.4602949257627642,y=0.49975689849461613 -a=hat,b=eks,i=6653,x=0.8374977303853919,y=0.5694625331922527 -a=zee,b=eks,i=6654,x=0.5422936444892872,y=0.5852344409380648 -a=pan,b=hat,i=6655,x=0.6453370235827801,y=0.5399548634478539 -a=wye,b=hat,i=6656,x=0.796475923939686,y=0.010301259372155425 -a=pan,b=pan,i=6657,x=0.7793713291305154,y=0.43736432518686286 -a=zee,b=wye,i=6658,x=0.026272697033822512,y=0.8586650268622298 -a=pan,b=hat,i=6659,x=0.8340965806153038,y=0.9954916059691153 -a=wye,b=hat,i=6660,x=0.797154755771274,y=0.5736771633024341 -a=wye,b=zee,i=6661,x=0.8188492526845532,y=0.4439387096787365 -a=eks,b=zee,i=6662,x=0.692659935953495,y=0.014750331023098417 -a=pan,b=hat,i=6663,x=0.5189752727315453,y=0.27114682476438556 -a=wye,b=pan,i=6664,x=0.8410807442089315,y=0.5618783788762672 -a=zee,b=wye,i=6665,x=0.750023688775221,y=0.8540304746331103 -a=hat,b=hat,i=6666,x=0.6568757213906617,y=0.023741446240077235 -a=hat,b=zee,i=6667,x=0.5925080941699123,y=0.26022346139524233 -a=pan,b=zee,i=6668,x=0.5792938319765554,y=0.549059780249718 -a=pan,b=pan,i=6669,x=0.40578589985803115,y=0.991882019921512 -a=hat,b=pan,i=6670,x=0.5062335371686814,y=0.25014874809168464 -a=zee,b=pan,i=6671,x=0.8485250852135324,y=0.42291127183964006 -a=eks,b=zee,i=6672,x=0.8633240831439754,y=0.805776035676606 -a=eks,b=pan,i=6673,x=0.5844555116526361,y=0.9258656111924322 -a=eks,b=pan,i=6674,x=0.07876117692793061,y=0.6162828639866715 -a=eks,b=zee,i=6675,x=0.6002332633428729,y=0.02737805769773405 -a=zee,b=eks,i=6676,x=0.7361247716287402,y=0.4981984945475131 -a=eks,b=hat,i=6677,x=0.07057457921469279,y=0.27327598383734664 -a=wye,b=eks,i=6678,x=0.13317313653408192,y=0.833936738251508 -a=zee,b=pan,i=6679,x=0.36757640497694033,y=0.15666791431421667 -a=pan,b=wye,i=6680,x=0.7228498260423928,y=0.16029570100550605 -a=zee,b=wye,i=6681,x=0.23575638607482352,y=0.5267963423656761 -a=wye,b=wye,i=6682,x=0.05864862278509386,y=0.968278945419499 -a=hat,b=pan,i=6683,x=0.6654580371987767,y=0.9155359993727842 -a=eks,b=hat,i=6684,x=0.11258817875708949,y=0.5202664086593939 -a=wye,b=pan,i=6685,x=0.2633941946281759,y=0.611467934771218 -a=eks,b=eks,i=6686,x=0.8316637163146731,y=0.3179748046122216 -a=eks,b=hat,i=6687,x=0.4611093872251627,y=0.4933386211537618 -a=pan,b=pan,i=6688,x=0.13485289624642116,y=0.30288273557456213 -a=zee,b=zee,i=6689,x=0.9273055357466653,y=0.054449902661783844 -a=zee,b=hat,i=6690,x=0.5203670639579945,y=0.7962270767115127 -a=hat,b=wye,i=6691,x=0.6886657290157878,y=0.9480662991851704 -a=eks,b=hat,i=6692,x=0.09793478921203369,y=0.45646997283913904 -a=zee,b=hat,i=6693,x=0.6887185377427641,y=0.2725371105355715 -a=pan,b=wye,i=6694,x=0.08459665725133014,y=0.6480627030857502 -a=eks,b=wye,i=6695,x=0.9070253492729443,y=0.8359657479869284 -a=eks,b=pan,i=6696,x=0.5213061786374872,y=0.9436108956847651 -a=eks,b=wye,i=6697,x=0.38079548707281974,y=0.7146301348085543 -a=pan,b=pan,i=6698,x=0.24992815869516327,y=0.7828473032320792 -a=wye,b=eks,i=6699,x=0.4863235665190313,y=0.024761627522226104 -a=eks,b=wye,i=6700,x=0.11486299826891566,y=0.7732953412442202 -a=eks,b=pan,i=6701,x=0.11289143979118377,y=0.5154344501380237 -a=pan,b=pan,i=6702,x=0.09897861729160984,y=0.1632726180578581 -a=zee,b=pan,i=6703,x=0.6063357396844151,y=0.9440640953293378 -a=wye,b=zee,i=6704,x=0.9929065501226577,y=0.9563353213992627 -a=zee,b=zee,i=6705,x=0.6695263366217671,y=0.9094821746571289 -a=eks,b=hat,i=6706,x=0.6005219270357064,y=0.7674256844260718 -a=pan,b=pan,i=6707,x=0.7568092546831552,y=0.30011145741383816 -a=eks,b=wye,i=6708,x=0.3630047546497195,y=0.3731502489099452 -a=pan,b=wye,i=6709,x=0.6499789136488362,y=0.9975126213435949 -a=pan,b=eks,i=6710,x=0.9822306336820864,y=0.9518481162696052 -a=wye,b=wye,i=6711,x=0.6529313233924365,y=0.16117133810135675 -a=hat,b=eks,i=6712,x=0.0038597545092279306,y=0.04201771404673427 -a=hat,b=hat,i=6713,x=0.4327034173748717,y=0.40765932026954144 -a=pan,b=eks,i=6714,x=0.6768196355507363,y=0.4866501412692976 -a=pan,b=pan,i=6715,x=0.941886673981322,y=0.6955697200870666 -a=wye,b=eks,i=6716,x=0.7399610338026938,y=0.7410171019957901 -a=wye,b=eks,i=6717,x=0.867978110755599,y=0.5614068975084064 -a=eks,b=hat,i=6718,x=0.24524935543537574,y=0.6137124860108586 -a=zee,b=pan,i=6719,x=0.1581978243465465,y=0.8467816744572415 -a=eks,b=zee,i=6720,x=0.14299332956774857,y=0.3448281281418095 -a=zee,b=hat,i=6721,x=0.6375447951528392,y=0.9688821643544498 -a=zee,b=wye,i=6722,x=0.13464497699175937,y=0.5072303450060313 -a=wye,b=pan,i=6723,x=0.08857317290220112,y=0.22813936075330932 -a=wye,b=zee,i=6724,x=0.9180101472288132,y=0.4772553128152984 -a=eks,b=zee,i=6725,x=0.5257382125487153,y=0.28145993503907585 -a=hat,b=wye,i=6726,x=0.8681656798259132,y=0.5422446735924256 -a=hat,b=hat,i=6727,x=0.6760254739914621,y=0.38899478823906797 -a=wye,b=hat,i=6728,x=0.19864833682412852,y=0.07849170872015998 -a=wye,b=eks,i=6729,x=0.0725487679182576,y=0.6718016982732007 -a=zee,b=pan,i=6730,x=0.664189415821601,y=0.9231485351812634 -a=pan,b=eks,i=6731,x=0.3748183297884402,y=0.14651294307202578 -a=hat,b=eks,i=6732,x=0.19051425073038974,y=0.2534461176951027 -a=hat,b=pan,i=6733,x=0.420176119585988,y=0.5325617521489726 -a=pan,b=pan,i=6734,x=0.1580686510357059,y=0.5545289683879925 -a=pan,b=zee,i=6735,x=0.34376736360822124,y=0.8783403362652445 -a=wye,b=eks,i=6736,x=0.1720144618863838,y=0.07472067325986242 -a=wye,b=zee,i=6737,x=0.7735497202626829,y=0.39904858822422706 -a=zee,b=wye,i=6738,x=0.6916920100867227,y=0.15860111481046824 -a=pan,b=pan,i=6739,x=0.7724445003059343,y=0.10599738910890832 -a=hat,b=hat,i=6740,x=0.1638749831040246,y=0.33942864618967783 -a=hat,b=pan,i=6741,x=0.5132827171435942,y=0.30511383816187543 -a=eks,b=pan,i=6742,x=0.7821265240696961,y=0.5002704992494771 -a=zee,b=pan,i=6743,x=0.5963266420934059,y=0.29065786430330587 -a=pan,b=pan,i=6744,x=0.3890975093181427,y=0.13247688252534073 -a=eks,b=eks,i=6745,x=0.17791482999411534,y=0.49908183588985267 -a=eks,b=zee,i=6746,x=0.9727441527624078,y=0.1416421024960326 -a=zee,b=wye,i=6747,x=0.723551831416918,y=0.2807129773827569 -a=eks,b=hat,i=6748,x=0.5710553437496192,y=0.06737951674524745 -a=pan,b=wye,i=6749,x=0.9967283968435253,y=0.4586425241398737 -a=zee,b=eks,i=6750,x=0.411125321089135,y=0.47877014881710245 -a=wye,b=pan,i=6751,x=0.5228421813260895,y=0.9476995312395788 -a=eks,b=hat,i=6752,x=0.5272144612869077,y=0.5823689048097198 -a=pan,b=pan,i=6753,x=0.6092847281248764,y=0.08166906720980371 -a=pan,b=pan,i=6754,x=0.03127627780352893,y=0.7077713273089731 -a=wye,b=pan,i=6755,x=0.9394158998984187,y=0.4097422792388996 -a=eks,b=pan,i=6756,x=0.7136237306098985,y=0.44757595968820907 -a=eks,b=wye,i=6757,x=0.6668899487792558,y=0.6148196125913775 -a=wye,b=eks,i=6758,x=0.24918942240065567,y=0.1175614364985561 -a=hat,b=hat,i=6759,x=0.4409476763420297,y=0.37269928936748364 -a=wye,b=eks,i=6760,x=0.7875787294909694,y=0.039280684999618454 -a=eks,b=wye,i=6761,x=0.846782848681552,y=0.7680754064510079 -a=wye,b=eks,i=6762,x=0.6630016803214965,y=0.35559642495764865 -a=hat,b=zee,i=6763,x=0.8827431489428148,y=0.8101223666047421 -a=wye,b=eks,i=6764,x=0.8818772544000334,y=0.5852259091501919 -a=wye,b=wye,i=6765,x=0.6302491045216058,y=0.35058599080261854 -a=wye,b=zee,i=6766,x=0.8428810279931461,y=0.06453198742123845 -a=hat,b=eks,i=6767,x=0.41034801950126865,y=0.7814715051154284 -a=eks,b=hat,i=6768,x=0.807164432383456,y=0.10155228923520643 -a=wye,b=zee,i=6769,x=0.015938042152491505,y=0.2467410432381938 -a=zee,b=wye,i=6770,x=0.4647151786207453,y=0.09586765050852464 -a=zee,b=wye,i=6771,x=0.5282093689650457,y=0.45570775635349325 -a=pan,b=wye,i=6772,x=0.8587471775202551,y=0.07946050584311648 -a=wye,b=pan,i=6773,x=0.1251517157188331,y=0.14006157275798192 -a=wye,b=zee,i=6774,x=0.6171307886636815,y=0.23263807093903088 -a=zee,b=eks,i=6775,x=0.7107364083112168,y=0.747744177326698 -a=pan,b=eks,i=6776,x=0.7402366773916875,y=0.5425967566595283 -a=pan,b=pan,i=6777,x=0.8587338035081189,y=0.6815723862967287 -a=hat,b=eks,i=6778,x=0.7374724325083976,y=0.33507894275895755 -a=wye,b=eks,i=6779,x=0.051803530307045764,y=0.9635968624328757 -a=wye,b=wye,i=6780,x=0.7420078463856731,y=0.24580232345831476 -a=hat,b=pan,i=6781,x=0.31100740187371934,y=0.15295409834535245 -a=eks,b=eks,i=6782,x=0.47803669544518634,y=0.9519657570611978 -a=zee,b=eks,i=6783,x=0.09545968133365756,y=0.010784899546895543 -a=zee,b=wye,i=6784,x=0.609956046414881,y=0.6555640945124119 -a=pan,b=wye,i=6785,x=0.5316777127876826,y=0.6104961546467026 -a=pan,b=wye,i=6786,x=0.25974778249116803,y=0.08881791270926387 -a=eks,b=pan,i=6787,x=0.5461613458666269,y=0.40749063143865827 -a=wye,b=eks,i=6788,x=0.59700206673727,y=0.5092154392509416 -a=eks,b=hat,i=6789,x=0.11384620831197945,y=0.21498304087430675 -a=zee,b=eks,i=6790,x=0.3259643807042226,y=0.294440283499696 -a=hat,b=pan,i=6791,x=0.3918842930839752,y=0.4866508833195289 -a=pan,b=pan,i=6792,x=0.5301735918581785,y=0.8191767116079914 -a=zee,b=wye,i=6793,x=0.09304197140837533,y=0.41014621328207224 -a=zee,b=wye,i=6794,x=0.9068197358960509,y=0.08182204172224206 -a=eks,b=hat,i=6795,x=0.6802118298728432,y=0.3352065052212123 -a=eks,b=wye,i=6796,x=0.5909399906562114,y=0.5580035130979556 -a=eks,b=hat,i=6797,x=0.9632745089330987,y=0.7078513092089819 -a=eks,b=wye,i=6798,x=0.15363778133009276,y=0.6325423246809744 -a=zee,b=eks,i=6799,x=0.9004852465295646,y=0.9465220966082961 -a=wye,b=zee,i=6800,x=0.24904470404318169,y=0.4920531920025397 -a=zee,b=pan,i=6801,x=0.6403589395715946,y=0.11274127473071038 -a=zee,b=wye,i=6802,x=0.09957278874549647,y=0.715843577221054 -a=pan,b=wye,i=6803,x=0.22156558120148118,y=0.6572540721541829 -a=hat,b=zee,i=6804,x=0.7027731517392186,y=0.3606531856415711 -a=pan,b=hat,i=6805,x=0.8362059152851221,y=0.9472897492210541 -a=wye,b=wye,i=6806,x=0.46185714288118773,y=0.9932895877413421 -a=pan,b=eks,i=6807,x=0.5997233937030831,y=0.005793331189633544 -a=hat,b=zee,i=6808,x=0.8753345579411498,y=0.04597732362263285 -a=wye,b=wye,i=6809,x=0.8141741575210425,y=0.16783710466982837 -a=zee,b=pan,i=6810,x=0.15680318230138823,y=0.9869386425704416 -a=eks,b=wye,i=6811,x=0.7065407352836623,y=0.8368678138790903 -a=wye,b=wye,i=6812,x=0.4084090484238747,y=0.9288230265446697 -a=eks,b=eks,i=6813,x=0.22195791037233625,y=0.46000678721121724 -a=hat,b=zee,i=6814,x=0.06615677821987875,y=0.9808603644184125 -a=zee,b=zee,i=6815,x=0.5000818809944109,y=0.771946292891575 -a=wye,b=pan,i=6816,x=0.9209420415686578,y=0.13984027426134304 -a=hat,b=wye,i=6817,x=0.8610216667264953,y=0.5382429359595315 -a=wye,b=hat,i=6818,x=0.9490099609383663,y=0.06552721253446325 -a=eks,b=pan,i=6819,x=0.5703992590220686,y=0.8637215064086881 -a=hat,b=zee,i=6820,x=0.2416040451020256,y=0.9776127555858962 -a=zee,b=hat,i=6821,x=0.4912693762402818,y=0.5204860488656815 -a=hat,b=eks,i=6822,x=0.1966228532052421,y=0.975043572227354 -a=wye,b=zee,i=6823,x=0.5781208624185773,y=0.8409446241801248 -a=eks,b=hat,i=6824,x=0.43385175975083057,y=0.41792395879700195 -a=eks,b=eks,i=6825,x=0.24716919525264047,y=0.9659819670046521 -a=zee,b=pan,i=6826,x=0.8340499179886257,y=0.9535536917685269 -a=pan,b=pan,i=6827,x=0.7938211511368373,y=0.4559826830758338 -a=pan,b=hat,i=6828,x=0.3431841672353826,y=0.9731740314694275 -a=zee,b=hat,i=6829,x=0.41031480623763106,y=0.45880274972572666 -a=pan,b=pan,i=6830,x=0.1142681517107742,y=0.2829811068526855 -a=eks,b=wye,i=6831,x=0.6311471125678166,y=0.35079658233745936 -a=hat,b=pan,i=6832,x=0.7805431061337192,y=0.6499156385099167 -a=wye,b=hat,i=6833,x=0.5448291589816822,y=0.24233292928888261 -a=pan,b=wye,i=6834,x=0.1500861412508071,y=0.4288594929835393 -a=hat,b=zee,i=6835,x=0.3554971979233431,y=0.7003527906078075 -a=eks,b=eks,i=6836,x=0.8314643867997237,y=0.6792470433081391 -a=wye,b=eks,i=6837,x=0.1301888660610001,y=0.9808398029246085 -a=hat,b=wye,i=6838,x=0.7770652463104809,y=0.6687521390314989 -a=eks,b=hat,i=6839,x=0.6771345756994601,y=0.3254097306513094 -a=eks,b=zee,i=6840,x=0.6482286253811516,y=0.8094333984928788 -a=wye,b=pan,i=6841,x=0.2567333227180485,y=0.3632000329956243 -a=hat,b=pan,i=6842,x=0.5591318142449471,y=0.30371083367502205 -a=wye,b=eks,i=6843,x=0.22133780427833827,y=0.12550147451196636 -a=pan,b=zee,i=6844,x=0.6378228582954686,y=0.173029586655695 -a=wye,b=zee,i=6845,x=0.18295530986921293,y=0.5733022672604575 -a=wye,b=eks,i=6846,x=0.6423397517155203,y=0.8356059098780667 -a=wye,b=eks,i=6847,x=0.5654097817406883,y=0.4917356814957925 -a=pan,b=hat,i=6848,x=0.13005488453891356,y=0.36376504302138823 -a=pan,b=pan,i=6849,x=0.7292341394730394,y=0.9619604141937782 -a=wye,b=hat,i=6850,x=0.9700608965235021,y=0.3990830943961574 -a=hat,b=zee,i=6851,x=0.626771477414734,y=0.20044484931996054 -a=hat,b=hat,i=6852,x=0.12907922332721755,y=0.9897873547381626 -a=zee,b=hat,i=6853,x=0.16224652017611052,y=0.3566205026903966 -a=pan,b=pan,i=6854,x=0.7113055088893854,y=0.8848278821601264 -a=hat,b=zee,i=6855,x=0.03040686539549997,y=0.7759017452917722 -a=hat,b=pan,i=6856,x=0.6726315514891058,y=0.9389924558403268 -a=hat,b=zee,i=6857,x=0.1411606825265106,y=0.7112133367607912 -a=wye,b=wye,i=6858,x=0.3955235311928522,y=0.1986261607297174 -a=wye,b=pan,i=6859,x=0.3196180023166212,y=0.22620149742138462 -a=eks,b=wye,i=6860,x=0.7484529088599197,y=0.9458674650980478 -a=hat,b=eks,i=6861,x=0.5333359352881868,y=0.6705965726039589 -a=eks,b=pan,i=6862,x=0.03969161279974032,y=0.6429740057666072 -a=pan,b=wye,i=6863,x=0.8290379851119192,y=0.4133616397651474 -a=hat,b=eks,i=6864,x=0.5485065278651766,y=0.5820232711323319 -a=pan,b=zee,i=6865,x=0.9369018030633546,y=0.2730985696260336 -a=eks,b=wye,i=6866,x=0.7518803820253178,y=0.1629275612174501 -a=zee,b=wye,i=6867,x=0.9102230409548707,y=0.9019213473878609 -a=pan,b=zee,i=6868,x=0.4631144547528713,y=0.17716733576639176 -a=hat,b=eks,i=6869,x=0.2542372110197165,y=0.30416858126881696 -a=pan,b=wye,i=6870,x=0.4253800398968478,y=0.033574775026327885 -a=eks,b=eks,i=6871,x=0.5063694703652393,y=0.006032505525179865 -a=wye,b=eks,i=6872,x=0.38036352987366395,y=0.46731687201043415 -a=wye,b=eks,i=6873,x=0.9798362101131622,y=0.797643782226173 -a=eks,b=hat,i=6874,x=0.5227336833787608,y=0.9908448955682759 -a=eks,b=zee,i=6875,x=0.606422651768782,y=0.914840315532674 -a=pan,b=hat,i=6876,x=0.5129530277212709,y=0.7790386991794965 -a=hat,b=eks,i=6877,x=0.11459832283361682,y=0.767333306893435 -a=zee,b=pan,i=6878,x=0.31397281280064293,y=0.16291546501309395 -a=pan,b=zee,i=6879,x=0.5284562057774806,y=0.7918033883536163 -a=eks,b=wye,i=6880,x=0.5984387679261401,y=0.9753479770314387 -a=zee,b=hat,i=6881,x=0.5862597507571483,y=0.7707420703176064 -a=pan,b=eks,i=6882,x=0.5334986785639318,y=0.9783513827876675 -a=zee,b=wye,i=6883,x=0.7679069545156161,y=0.7810806767827133 -a=hat,b=pan,i=6884,x=0.25121382521102964,y=0.08373878679612079 -a=wye,b=hat,i=6885,x=0.05142094104336947,y=0.9978267954724354 -a=pan,b=zee,i=6886,x=0.27515151044558905,y=0.8898719178215098 -a=hat,b=wye,i=6887,x=0.3290836499787756,y=0.8942355162084987 -a=zee,b=pan,i=6888,x=0.7705250058516857,y=0.9061349225471161 -a=eks,b=pan,i=6889,x=0.8727519098818294,y=0.38422445867709476 -a=zee,b=hat,i=6890,x=0.07814285019815281,y=0.6524720493819127 -a=eks,b=eks,i=6891,x=0.553350512403786,y=0.21084722161813896 -a=zee,b=hat,i=6892,x=0.307754111293953,y=0.5638948621786333 -a=zee,b=zee,i=6893,x=0.8600709509023364,y=0.160849705704027 -a=zee,b=hat,i=6894,x=0.5702891448833654,y=0.4084412240884401 -a=zee,b=hat,i=6895,x=0.6946417768735003,y=0.41460355943617566 -a=zee,b=hat,i=6896,x=0.7359164967591003,y=0.8293086338798401 -a=wye,b=hat,i=6897,x=0.051569812567012985,y=0.7086891870318104 -a=wye,b=wye,i=6898,x=0.890610959944813,y=0.42067321781938505 -a=zee,b=zee,i=6899,x=0.5568256158466047,y=0.15682857405624617 -a=pan,b=pan,i=6900,x=0.46106520857783606,y=0.8984962995391143 -a=zee,b=zee,i=6901,x=0.15447805903030032,y=0.3708113295153489 -a=wye,b=hat,i=6902,x=0.2178563623721872,y=0.5234598648171618 -a=wye,b=eks,i=6903,x=0.22666531785803,y=0.6725621891005873 -a=hat,b=wye,i=6904,x=0.8610376333440763,y=0.7594915846085165 -a=zee,b=pan,i=6905,x=0.2561178270791922,y=0.11749615398320445 -a=hat,b=zee,i=6906,x=0.07026123437146103,y=0.8267280415036612 -a=wye,b=zee,i=6907,x=0.6367788848968293,y=0.6394774166453675 -a=wye,b=zee,i=6908,x=0.809527772497878,y=0.13573629343090665 -a=hat,b=hat,i=6909,x=0.2602273628092978,y=0.6319094113304579 -a=pan,b=wye,i=6910,x=0.25097439132798516,y=0.0005109887783484313 -a=zee,b=zee,i=6911,x=0.8474137462624203,y=0.25704106383367986 -a=zee,b=eks,i=6912,x=0.8996806626412216,y=0.8543839233593294 -a=pan,b=zee,i=6913,x=0.6587566128742129,y=0.5632886251369115 -a=eks,b=pan,i=6914,x=0.6621105804379062,y=0.9655406039971886 -a=eks,b=hat,i=6915,x=0.2111094032818116,y=0.5848242928084593 -a=zee,b=hat,i=6916,x=0.984302853476379,y=0.3318129327554279 -a=wye,b=eks,i=6917,x=0.4116075902695022,y=0.28661075899283883 -a=hat,b=zee,i=6918,x=0.9078126587488162,y=0.825042025154357 -a=hat,b=wye,i=6919,x=0.6271510270374615,y=0.2788131116617252 -a=eks,b=pan,i=6920,x=0.5871441514609353,y=0.8959550649206074 -a=zee,b=wye,i=6921,x=0.5169699337780084,y=0.8908217878266501 -a=hat,b=zee,i=6922,x=0.26862211703298666,y=0.7329656688559485 -a=wye,b=hat,i=6923,x=0.9326808746284245,y=0.1899255490512184 -a=hat,b=zee,i=6924,x=0.18898941655772628,y=0.41248127061100026 -a=eks,b=eks,i=6925,x=0.013945565190257692,y=0.5578850256771833 -a=eks,b=eks,i=6926,x=0.48658959418573866,y=0.12700817464144343 -a=pan,b=pan,i=6927,x=0.2148229483341345,y=0.142698457109815 -a=wye,b=wye,i=6928,x=0.9723961772197747,y=0.9337468605908721 -a=pan,b=hat,i=6929,x=0.39047545698773434,y=0.1014408675739632 -a=eks,b=zee,i=6930,x=0.5526320529536692,y=0.6589359191373861 -a=zee,b=pan,i=6931,x=0.9169134272880114,y=0.45914482802505263 -a=wye,b=eks,i=6932,x=0.335776156098611,y=0.5748799322742809 -a=pan,b=zee,i=6933,x=0.736088726276053,y=0.9511504821090352 -a=pan,b=hat,i=6934,x=0.0735762788752764,y=0.0008249210316072508 -a=hat,b=hat,i=6935,x=0.8448124844892154,y=0.7472136644468284 -a=wye,b=zee,i=6936,x=0.8005403193787164,y=0.00364938998415798 -a=eks,b=wye,i=6937,x=0.21622217154383783,y=0.693609603948259 -a=pan,b=eks,i=6938,x=0.3920264992178498,y=0.7658079570315041 -a=pan,b=pan,i=6939,x=0.9322271691157334,y=0.5636509019339512 -a=pan,b=wye,i=6940,x=0.7428995263807269,y=0.28179583615338055 -a=hat,b=eks,i=6941,x=0.7647380306778612,y=0.5588346481843296 -a=eks,b=zee,i=6942,x=0.43808251265668563,y=0.7626481299623035 -a=wye,b=pan,i=6943,x=0.9077501006486136,y=0.15938270549685063 -a=zee,b=hat,i=6944,x=0.30931352961195646,y=0.7930984054369467 -a=zee,b=zee,i=6945,x=0.7497323025761014,y=0.19551835687807828 -a=hat,b=eks,i=6946,x=0.06859192488355459,y=0.18197505910402123 -a=pan,b=eks,i=6947,x=0.6992727384765998,y=0.29778601894865464 -a=pan,b=hat,i=6948,x=0.6806028930853153,y=0.5337351071127955 -a=wye,b=hat,i=6949,x=0.8798782820732383,y=0.08851766994161492 -a=eks,b=wye,i=6950,x=0.5484166834064047,y=0.5444329351784222 -a=pan,b=hat,i=6951,x=0.26580629226731123,y=0.6717468181544698 -a=wye,b=hat,i=6952,x=0.3046906425663285,y=0.9311855954257118 -a=wye,b=hat,i=6953,x=0.0716884908750034,y=0.7032897899381292 -a=zee,b=pan,i=6954,x=0.19883557252817674,y=0.8081642410948915 -a=zee,b=wye,i=6955,x=0.2873302616631028,y=0.8940998424635924 -a=pan,b=wye,i=6956,x=0.05509311089172042,y=0.02187042391982985 -a=zee,b=wye,i=6957,x=0.6879906058837991,y=0.12542105731118525 -a=hat,b=wye,i=6958,x=0.18834573262459287,y=0.5850606930814083 -a=eks,b=pan,i=6959,x=0.11939644968502994,y=0.5520356552775578 -a=wye,b=pan,i=6960,x=0.3153717815038891,y=0.09047586220595472 -a=zee,b=wye,i=6961,x=0.6007313242961704,y=0.6613290251670858 -a=pan,b=zee,i=6962,x=0.7601533500363858,y=0.8925522323934668 -a=wye,b=pan,i=6963,x=0.48448541281210233,y=0.41562920864135944 -a=hat,b=eks,i=6964,x=0.4992605837600408,y=0.43605518279149746 -a=wye,b=hat,i=6965,x=0.45740161659615763,y=0.04534932831025773 -a=hat,b=pan,i=6966,x=0.7533879705727782,y=0.5865175721970042 -a=eks,b=wye,i=6967,x=0.9773513257418902,y=0.2380306718479056 -a=zee,b=zee,i=6968,x=0.6712412554088817,y=0.2720254276549653 -a=wye,b=wye,i=6969,x=0.31490517543879204,y=0.21016765203059373 -a=hat,b=zee,i=6970,x=0.797989047174311,y=0.2162177019841508 -a=hat,b=eks,i=6971,x=0.05477486899188533,y=0.5389943813219003 -a=wye,b=wye,i=6972,x=0.4404514385321253,y=0.7283283568308369 -a=eks,b=zee,i=6973,x=0.8858598587998294,y=0.6368695546608352 -a=zee,b=wye,i=6974,x=0.989576281733764,y=0.6583358951055004 -a=eks,b=pan,i=6975,x=0.1301868947541912,y=0.9369685664682424 -a=wye,b=wye,i=6976,x=0.3024970191010684,y=0.2093604064761977 -a=zee,b=pan,i=6977,x=0.7855530401666628,y=0.9857367912810565 -a=pan,b=hat,i=6978,x=0.9643587082677965,y=0.3525023561742381 -a=zee,b=hat,i=6979,x=0.236940011648326,y=0.43182187533436656 -a=zee,b=eks,i=6980,x=0.7036947557005062,y=0.8967163177168612 -a=zee,b=pan,i=6981,x=0.7258773601437264,y=0.43569247036733716 -a=pan,b=eks,i=6982,x=0.0009579203969094507,y=0.4374451455672883 -a=pan,b=eks,i=6983,x=0.414932981812524,y=0.43196390781557925 -a=eks,b=eks,i=6984,x=0.9329999431393118,y=0.17135830698518684 -a=pan,b=eks,i=6985,x=0.2597251524181662,y=0.17875541966558117 -a=wye,b=pan,i=6986,x=0.397846421602455,y=0.061580742680189204 -a=eks,b=hat,i=6987,x=0.10959780180161571,y=0.8943020336797796 -a=zee,b=zee,i=6988,x=0.9430266721644799,y=0.5094104013079503 -a=eks,b=hat,i=6989,x=0.3313418699976328,y=0.33567997892328394 -a=eks,b=zee,i=6990,x=0.5148133498496276,y=0.6918563081083983 -a=hat,b=wye,i=6991,x=0.25547073172247026,y=0.20184384726111237 -a=pan,b=pan,i=6992,x=0.03213631773319936,y=0.554769673785168 -a=wye,b=wye,i=6993,x=0.8254022878057393,y=0.633291096076743 -a=pan,b=eks,i=6994,x=0.3537340849132855,y=0.8841969050289067 -a=eks,b=pan,i=6995,x=0.09806828374128973,y=0.6430042633610615 -a=wye,b=zee,i=6996,x=0.5747272683926599,y=0.48989582464308623 -a=pan,b=zee,i=6997,x=0.7983517224073071,y=0.5557697277179173 -a=zee,b=zee,i=6998,x=0.7651332678935355,y=0.1986723127864063 -a=wye,b=wye,i=6999,x=0.31230656247460964,y=0.7709719364206021 -a=hat,b=wye,i=7000,x=0.44889249877909887,y=0.9296219735657666 -a=pan,b=hat,i=7001,x=0.1931728782354155,y=0.9434264276805716 -a=hat,b=wye,i=7002,x=0.41061585650926835,y=0.01643773647124569 -a=zee,b=wye,i=7003,x=0.5815308271025876,y=0.07558886006933907 -a=hat,b=hat,i=7004,x=0.5167987887837867,y=0.6125153714308963 -a=hat,b=zee,i=7005,x=0.17030551513160364,y=0.6743869951544157 -a=zee,b=eks,i=7006,x=0.9635379226473363,y=0.29850368521754844 -a=pan,b=eks,i=7007,x=0.20071792427547297,y=0.8474599823946072 -a=wye,b=wye,i=7008,x=0.8591581165484377,y=0.3991724887525355 -a=zee,b=pan,i=7009,x=0.3868986728643612,y=0.32414353523303663 -a=hat,b=eks,i=7010,x=0.6030024004661663,y=0.3056681212721363 -a=eks,b=pan,i=7011,x=0.08663635855557505,y=0.8292216812769441 -a=pan,b=wye,i=7012,x=0.718361521407771,y=0.5051204438264707 -a=pan,b=wye,i=7013,x=0.277094876326926,y=0.602002918971647 -a=wye,b=eks,i=7014,x=0.7012074385988786,y=0.5007374216681656 -a=zee,b=pan,i=7015,x=0.5613769792191474,y=0.2784096473095522 -a=zee,b=wye,i=7016,x=0.9594027753815709,y=0.21779948075500577 -a=eks,b=wye,i=7017,x=0.5420542017862827,y=0.36305123317879384 -a=zee,b=hat,i=7018,x=0.32805123696394034,y=0.5124093456505748 -a=wye,b=eks,i=7019,x=0.3036229968730817,y=0.23518690587775104 -a=zee,b=eks,i=7020,x=0.4316289204904483,y=0.08091854356676809 -a=hat,b=zee,i=7021,x=0.863877436043872,y=0.5856682390415403 -a=zee,b=hat,i=7022,x=0.2071927381626798,y=0.5309301582209865 -a=pan,b=eks,i=7023,x=0.29791421670042273,y=0.07470613128293369 -a=eks,b=wye,i=7024,x=0.8917532472992171,y=0.14489189839111738 -a=hat,b=pan,i=7025,x=0.37840242944286007,y=0.5252842371930347 -a=pan,b=zee,i=7026,x=0.5129987522412781,y=0.6196138088300045 -a=zee,b=wye,i=7027,x=0.23097612498471853,y=0.86560943277181 -a=zee,b=eks,i=7028,x=0.5584826667497241,y=0.7683156302547838 -a=hat,b=pan,i=7029,x=0.9655789508856257,y=0.5847058626759788 -a=zee,b=pan,i=7030,x=0.6277332467942169,y=0.6792611974173626 -a=pan,b=wye,i=7031,x=0.6131961433966792,y=0.687915924439632 -a=pan,b=hat,i=7032,x=0.9325179960861075,y=0.9058746805470116 -a=zee,b=wye,i=7033,x=0.08845711389601285,y=0.6556664190853554 -a=wye,b=wye,i=7034,x=0.6178564629606926,y=0.257518710051613 -a=pan,b=pan,i=7035,x=0.6283536854585481,y=0.2469987747711726 -a=wye,b=pan,i=7036,x=0.7418713116937065,y=0.21710781972748616 -a=pan,b=zee,i=7037,x=0.33589607439034086,y=0.020535990195571174 -a=zee,b=zee,i=7038,x=0.2760987429128404,y=0.4680732030302005 -a=hat,b=wye,i=7039,x=0.7395205341627435,y=0.7057475465708692 -a=eks,b=zee,i=7040,x=0.6082940902168954,y=0.48538987636118824 -a=wye,b=hat,i=7041,x=0.20266698834916153,y=0.5813828944396172 -a=pan,b=zee,i=7042,x=0.837647351501191,y=0.08974718944866877 -a=zee,b=eks,i=7043,x=0.9227470147480153,y=0.7805110973249272 -a=eks,b=hat,i=7044,x=0.9125698654022647,y=0.6003269419507505 -a=pan,b=pan,i=7045,x=0.9149867225420508,y=0.8482623017705537 -a=zee,b=eks,i=7046,x=0.27001776810888767,y=0.5884950099164382 -a=zee,b=hat,i=7047,x=0.3821711240746809,y=0.20003488070361253 -a=wye,b=zee,i=7048,x=0.20803556414051616,y=0.2099912026909062 -a=hat,b=wye,i=7049,x=0.670378278494791,y=0.7076636735945074 -a=hat,b=zee,i=7050,x=0.23723928107944892,y=0.14022716241391253 -a=hat,b=hat,i=7051,x=0.08564555647369987,y=0.8035765944470057 -a=pan,b=pan,i=7052,x=0.2551692350228507,y=0.30169763443298714 -a=hat,b=hat,i=7053,x=0.5800900713331231,y=0.1120629753999538 -a=wye,b=wye,i=7054,x=0.8075288799285653,y=0.40080406376291855 -a=pan,b=zee,i=7055,x=0.3237065988296146,y=0.16406274536872145 -a=hat,b=zee,i=7056,x=0.11778152617272919,y=0.6479030514858882 -a=zee,b=hat,i=7057,x=0.3051810429960812,y=0.7908669168132235 -a=eks,b=zee,i=7058,x=0.656344016455348,y=0.36896554924499647 -a=eks,b=hat,i=7059,x=0.920076220476711,y=0.5876972502303767 -a=hat,b=eks,i=7060,x=0.9346394642794167,y=0.6814288404781228 -a=eks,b=zee,i=7061,x=0.5738169055546608,y=0.21575746069772594 -a=pan,b=hat,i=7062,x=0.4847233858259188,y=0.7657727011149124 -a=pan,b=wye,i=7063,x=0.39952219916088616,y=0.40591491856978035 -a=hat,b=zee,i=7064,x=0.14067685725223567,y=0.3092246716986138 -a=eks,b=eks,i=7065,x=0.8605698057139388,y=0.32299577521005374 -a=wye,b=pan,i=7066,x=0.8824319081192505,y=0.35485300016641663 -a=eks,b=eks,i=7067,x=0.6109777816801221,y=0.24224058206368682 -a=pan,b=wye,i=7068,x=0.4549499403459556,y=0.49621131228697424 -a=eks,b=pan,i=7069,x=0.9886201663452385,y=0.9412530719900734 -a=wye,b=hat,i=7070,x=0.665041142898201,y=0.9595343437808125 -a=eks,b=eks,i=7071,x=0.8618148405551886,y=0.3478823253266865 -a=pan,b=zee,i=7072,x=0.2724259823227272,y=0.30192794453375993 -a=pan,b=wye,i=7073,x=0.6028342052246591,y=0.07993824024604124 -a=eks,b=eks,i=7074,x=0.8193690697522501,y=0.503433259768719 -a=hat,b=eks,i=7075,x=0.4081232497868382,y=0.44918917218867327 -a=pan,b=hat,i=7076,x=0.39435745153096624,y=0.2533507793160499 -a=zee,b=eks,i=7077,x=0.9030855046114618,y=0.7353402992136046 -a=zee,b=zee,i=7078,x=0.28428013807040586,y=0.3777563622186406 -a=zee,b=wye,i=7079,x=0.27996765719480765,y=0.873411216265053 -a=zee,b=wye,i=7080,x=0.4095476180955867,y=0.9089358780031519 -a=wye,b=pan,i=7081,x=0.5027581392155828,y=0.5918516944292527 -a=eks,b=wye,i=7082,x=0.17393135812804061,y=0.8723860687774272 -a=wye,b=pan,i=7083,x=0.6981142504634895,y=0.5779284385442213 -a=eks,b=hat,i=7084,x=0.2854516522673507,y=0.20310209686600733 -a=hat,b=zee,i=7085,x=0.010890023772322621,y=0.6157830695335651 -a=hat,b=zee,i=7086,x=0.9886292059134817,y=0.7404507111518657 -a=hat,b=pan,i=7087,x=0.8819873483332783,y=0.4236719882838914 -a=eks,b=zee,i=7088,x=0.6374047421710877,y=0.16806648423408932 -a=eks,b=zee,i=7089,x=0.2711607560909379,y=0.24024418535758385 -a=zee,b=pan,i=7090,x=0.23901675556827195,y=0.9642697268066455 -a=hat,b=eks,i=7091,x=0.7757377070780304,y=0.9407578395112463 -a=eks,b=pan,i=7092,x=0.260858501720898,y=0.6591425472718141 -a=pan,b=hat,i=7093,x=0.6397441933292296,y=0.9829200046878069 -a=eks,b=wye,i=7094,x=0.44868457406229934,y=0.8112443348137468 -a=eks,b=wye,i=7095,x=0.0906962202117284,y=0.591681350241042 -a=wye,b=pan,i=7096,x=0.07890849487936957,y=0.41485920875555027 -a=wye,b=zee,i=7097,x=0.8196751485720796,y=0.9182400853440643 -a=wye,b=pan,i=7098,x=0.06668588398001474,y=0.26172812514471555 -a=eks,b=hat,i=7099,x=0.22008401563656388,y=0.04305085018273014 -a=pan,b=pan,i=7100,x=0.9285737504002782,y=0.009817451138142141 -a=hat,b=eks,i=7101,x=0.981509594449636,y=0.3512738134950749 -a=hat,b=hat,i=7102,x=0.014273713288732837,y=0.7356741638793522 -a=wye,b=pan,i=7103,x=0.4829108252034583,y=0.6462618208312636 -a=eks,b=pan,i=7104,x=0.2936586449378221,y=0.5697398551523063 -a=zee,b=hat,i=7105,x=0.2980064088882294,y=0.3531576463065931 -a=zee,b=zee,i=7106,x=0.9884822924298222,y=0.9742451923102192 -a=pan,b=wye,i=7107,x=0.2998044704471554,y=0.2269111558178346 -a=wye,b=eks,i=7108,x=0.2586819630109063,y=0.7581262202061657 -a=eks,b=zee,i=7109,x=0.6665600019130787,y=0.5478452197045156 -a=zee,b=pan,i=7110,x=0.8179518622169052,y=0.44278658627392875 -a=pan,b=hat,i=7111,x=0.06963315314613838,y=0.11691071591581381 -a=wye,b=wye,i=7112,x=0.5792946910659483,y=0.7652424387264126 -a=eks,b=pan,i=7113,x=0.2918757972941147,y=0.09568558582017328 -a=eks,b=hat,i=7114,x=0.9289422804383715,y=0.0973877277219467 -a=zee,b=hat,i=7115,x=0.6512838863936804,y=0.2516748002564705 -a=zee,b=eks,i=7116,x=0.7404888117639189,y=0.7975704275356439 -a=zee,b=wye,i=7117,x=0.3032123219266547,y=0.408039844976006 -a=hat,b=eks,i=7118,x=0.34505031276366815,y=0.8337966400074031 -a=wye,b=hat,i=7119,x=0.6315033401415422,y=0.9740617533706384 -a=pan,b=wye,i=7120,x=0.5205183279285498,y=0.6711794774673148 -a=zee,b=eks,i=7121,x=0.6246582352065935,y=0.26995458439418407 -a=eks,b=eks,i=7122,x=0.7551924972639424,y=0.43086081813515076 -a=pan,b=wye,i=7123,x=0.1635996059631727,y=0.9577567705724599 -a=zee,b=wye,i=7124,x=0.5036489463705721,y=0.3876971054515429 -a=pan,b=zee,i=7125,x=0.2551365895416149,y=0.28047087188514475 -a=eks,b=pan,i=7126,x=0.7428006686642148,y=0.09900719636423816 -a=pan,b=hat,i=7127,x=0.30368095354356406,y=0.2597236612256202 -a=hat,b=hat,i=7128,x=0.6279447467606394,y=0.4225543625896867 -a=wye,b=wye,i=7129,x=0.5482218790981049,y=0.2894225177955031 -a=pan,b=pan,i=7130,x=0.5209682344960287,y=0.3459917950310737 -a=pan,b=zee,i=7131,x=0.19933196272377474,y=0.33283266063310113 -a=pan,b=wye,i=7132,x=0.5712931905065656,y=0.7126877408626767 -a=wye,b=hat,i=7133,x=0.8722812709831377,y=0.7402713360198966 -a=zee,b=zee,i=7134,x=0.8239370005383643,y=0.8999946232295659 -a=hat,b=hat,i=7135,x=0.7884238740570607,y=0.502745899378346 -a=zee,b=eks,i=7136,x=0.1151808584625903,y=0.09114185305034295 -a=hat,b=pan,i=7137,x=0.2542302739150816,y=0.10795409059370309 -a=hat,b=wye,i=7138,x=0.2410727132014231,y=0.4676445777847451 -a=hat,b=pan,i=7139,x=0.34808712588524904,y=0.8828628930362004 -a=zee,b=wye,i=7140,x=0.1974763738933888,y=0.05233731805135977 -a=hat,b=zee,i=7141,x=0.5122141330634649,y=0.9464876262232287 -a=pan,b=hat,i=7142,x=0.5253509732767064,y=0.8670318755725022 -a=wye,b=hat,i=7143,x=0.21543094473021618,y=0.04601417423771059 -a=zee,b=hat,i=7144,x=0.6991820521352337,y=0.729482196220355 -a=eks,b=pan,i=7145,x=0.5837334896130115,y=0.3007149582733508 -a=zee,b=pan,i=7146,x=0.9971541764709625,y=0.892947440752753 -a=pan,b=zee,i=7147,x=0.04585989364324272,y=0.09848374190945741 -a=zee,b=zee,i=7148,x=0.08359037777595768,y=0.18397726583989749 -a=zee,b=hat,i=7149,x=0.7990351121845923,y=0.883654825281865 -a=pan,b=eks,i=7150,x=0.06880418014853351,y=0.774850869582918 -a=hat,b=pan,i=7151,x=0.7525794901534716,y=0.2866308656913933 -a=hat,b=hat,i=7152,x=0.9710254927009822,y=0.2710815765754221 -a=wye,b=pan,i=7153,x=0.6258726536948953,y=0.7945230748164691 -a=wye,b=wye,i=7154,x=0.0785227436298842,y=0.5694736271045654 -a=zee,b=eks,i=7155,x=0.33789283812701887,y=0.4922604374749663 -a=pan,b=eks,i=7156,x=0.8443027153248559,y=0.6768057967242282 -a=zee,b=zee,i=7157,x=0.5562106087670207,y=0.03587821373906863 -a=pan,b=pan,i=7158,x=0.004511539489729266,y=0.7768848294530629 -a=eks,b=wye,i=7159,x=0.3902007098058078,y=0.1663592901985712 -a=wye,b=pan,i=7160,x=0.4066344147201285,y=0.9578296410706988 -a=hat,b=hat,i=7161,x=0.05527312148960439,y=0.40628388765166956 -a=pan,b=zee,i=7162,x=0.762250186313408,y=0.10837770076532993 -a=wye,b=wye,i=7163,x=0.4555929409217334,y=0.46397391790537257 -a=eks,b=pan,i=7164,x=0.5336092896068227,y=0.6717538742842986 -a=zee,b=hat,i=7165,x=0.8455323374846566,y=0.0849930980915663 -a=pan,b=zee,i=7166,x=0.4778764959737758,y=0.838605100252609 -a=zee,b=eks,i=7167,x=0.10058553136359771,y=0.8527719709495678 -a=pan,b=zee,i=7168,x=0.05484316817552892,y=0.17151702310481431 -a=hat,b=wye,i=7169,x=0.20795586378052433,y=0.7648155272308214 -a=eks,b=pan,i=7170,x=0.37156761781681846,y=0.8390576537440628 -a=pan,b=pan,i=7171,x=0.11014202080800839,y=0.7384835945172147 -a=pan,b=eks,i=7172,x=0.6981612913907711,y=0.05072492614651758 -a=hat,b=wye,i=7173,x=0.18576991003719212,y=0.32538288858474795 -a=wye,b=hat,i=7174,x=0.4517242075190575,y=0.7384551615771798 -a=hat,b=eks,i=7175,x=0.8596787945183175,y=0.9376543180536796 -a=wye,b=pan,i=7176,x=0.6724292506877466,y=0.8820892101229925 -a=eks,b=wye,i=7177,x=0.5749745903887773,y=0.4151184059091343 -a=wye,b=pan,i=7178,x=0.4069058311850614,y=0.8985915120635419 -a=pan,b=pan,i=7179,x=0.34025617153772425,y=0.7362436479716264 -a=zee,b=wye,i=7180,x=0.9735765701999921,y=0.3536158455578553 -a=pan,b=hat,i=7181,x=0.33202126409882426,y=0.6393977150538188 -a=wye,b=eks,i=7182,x=0.8209372270884935,y=0.22933427059194011 -a=pan,b=wye,i=7183,x=0.7589482772018452,y=0.34920417666135495 -a=pan,b=zee,i=7184,x=0.4443660624344251,y=0.6792046483658297 -a=eks,b=hat,i=7185,x=0.16457422522306786,y=0.3254688160534126 -a=pan,b=pan,i=7186,x=0.09026915761362286,y=0.023448958188875713 -a=hat,b=wye,i=7187,x=0.4560687123084549,y=0.4064263428720335 -a=wye,b=pan,i=7188,x=0.4956424303944521,y=0.2862948969999991 -a=zee,b=zee,i=7189,x=0.6872200803930903,y=0.33825858578605605 -a=wye,b=zee,i=7190,x=0.7091610020939861,y=0.11636512757451645 -a=wye,b=eks,i=7191,x=0.40387119430799534,y=0.2671989768915307 -a=hat,b=zee,i=7192,x=0.04140473031764258,y=0.12247713585949505 -a=wye,b=eks,i=7193,x=0.7904392489862636,y=0.3255246590384645 -a=pan,b=pan,i=7194,x=0.8605715825783998,y=0.30866294108908654 -a=eks,b=pan,i=7195,x=0.3063063420456562,y=0.8778236978497203 -a=pan,b=hat,i=7196,x=0.47951019710347087,y=0.7687346833879765 -a=pan,b=pan,i=7197,x=0.571144729887671,y=0.3556625598706247 -a=eks,b=eks,i=7198,x=0.21945638426831482,y=0.02350640610667476 -a=hat,b=wye,i=7199,x=0.5813406427006567,y=0.3332804684828835 -a=pan,b=zee,i=7200,x=0.905315344809699,y=0.1528899922373057 -a=wye,b=pan,i=7201,x=0.9400232704650787,y=0.6360498242547704 -a=wye,b=zee,i=7202,x=0.2595277149011631,y=0.8540466345462062 -a=zee,b=zee,i=7203,x=0.6196913167679251,y=0.7693669742661702 -a=pan,b=eks,i=7204,x=0.7025276205611544,y=0.5171960435307702 -a=eks,b=eks,i=7205,x=0.8476919005501825,y=0.33999828204602445 -a=hat,b=wye,i=7206,x=0.2484899687204748,y=0.8552754879346082 -a=eks,b=wye,i=7207,x=0.5111288494558484,y=0.31828385178170016 -a=wye,b=pan,i=7208,x=0.49730390768352073,y=0.040387788389040336 -a=wye,b=zee,i=7209,x=0.2990551204662385,y=0.24766816596397379 -a=wye,b=pan,i=7210,x=0.05433220416409046,y=0.7683173788573371 -a=hat,b=zee,i=7211,x=0.5479599732793081,y=0.7309237182718691 -a=hat,b=hat,i=7212,x=0.11334324090228143,y=0.4449813414016559 -a=hat,b=hat,i=7213,x=0.17855300168610388,y=0.5777528971707431 -a=eks,b=zee,i=7214,x=0.8432742398345661,y=0.19519802350924498 -a=zee,b=eks,i=7215,x=0.027726411224188063,y=0.6253184802891883 -a=wye,b=hat,i=7216,x=0.5252986145121908,y=0.9054934316514225 -a=hat,b=pan,i=7217,x=0.18576029964130547,y=0.9066585641073414 -a=hat,b=pan,i=7218,x=0.2996125766631278,y=0.4976607588511254 -a=zee,b=zee,i=7219,x=0.6269054706790941,y=0.7732047241313896 -a=zee,b=hat,i=7220,x=0.9218855933251531,y=0.9884286346489324 -a=zee,b=zee,i=7221,x=0.8961118412742498,y=0.5527678285308364 -a=pan,b=hat,i=7222,x=0.06750577252048573,y=0.45278767440580836 -a=pan,b=zee,i=7223,x=0.5422551743173196,y=0.48196997280820075 -a=eks,b=eks,i=7224,x=0.826281664166814,y=0.7784066577349854 -a=eks,b=pan,i=7225,x=0.21428073770333067,y=0.7357536006823585 -a=zee,b=hat,i=7226,x=0.3525785753907552,y=0.8580740440780245 -a=eks,b=eks,i=7227,x=0.5839736448682071,y=0.8252023673907429 -a=eks,b=hat,i=7228,x=0.9933636751222338,y=0.20481742503678568 -a=eks,b=pan,i=7229,x=0.04398478871595091,y=0.7794740728564747 -a=eks,b=pan,i=7230,x=0.6437767672345736,y=0.880694505581993 -a=hat,b=eks,i=7231,x=0.8525023870231172,y=0.8371410685258226 -a=eks,b=zee,i=7232,x=0.8665889356718274,y=0.727601457029631 -a=pan,b=pan,i=7233,x=0.16532133170819407,y=0.6129115845589822 -a=eks,b=eks,i=7234,x=0.24279014390270426,y=0.2483565874207584 -a=hat,b=pan,i=7235,x=0.8801345341211195,y=0.9358790870593957 -a=pan,b=wye,i=7236,x=0.27447738011116474,y=0.004545127562776141 -a=zee,b=zee,i=7237,x=0.4441192412902708,y=0.12641379815166043 -a=zee,b=wye,i=7238,x=0.08465889757356693,y=0.5167264969332714 -a=zee,b=hat,i=7239,x=0.37409052113954255,y=0.6558372047842991 -a=zee,b=wye,i=7240,x=0.08769157759149027,y=0.4682424277651016 -a=wye,b=pan,i=7241,x=0.16048892749077326,y=0.8088730543110708 -a=wye,b=hat,i=7242,x=0.7810183175877844,y=0.11112670210527198 -a=wye,b=pan,i=7243,x=0.23457496179942383,y=0.25480860225867064 -a=pan,b=wye,i=7244,x=0.33418676914584544,y=0.12547224222781395 -a=eks,b=hat,i=7245,x=0.15591846641848217,y=0.06738895282990076 -a=hat,b=wye,i=7246,x=0.4083519225238026,y=0.9205841027663143 -a=zee,b=hat,i=7247,x=0.995551497542232,y=0.20626255566312157 -a=wye,b=pan,i=7248,x=0.03722910071622887,y=0.666426594713559 -a=wye,b=eks,i=7249,x=0.3336400413872498,y=0.9930112481730917 -a=zee,b=zee,i=7250,x=0.4205283537525053,y=0.017542491951736294 -a=wye,b=zee,i=7251,x=0.03690845523228947,y=0.3207859173250125 -a=wye,b=eks,i=7252,x=0.5180151961590858,y=0.18663669340288258 -a=pan,b=wye,i=7253,x=0.09014357778603788,y=0.7770581018902949 -a=eks,b=hat,i=7254,x=0.08477920149342666,y=0.8536609969299198 -a=pan,b=hat,i=7255,x=0.005529616019901207,y=0.050405481126457485 -a=hat,b=zee,i=7256,x=0.19429528950321628,y=0.2713422241532205 -a=wye,b=zee,i=7257,x=0.030816159583946456,y=0.26057323500261886 -a=pan,b=pan,i=7258,x=0.4996723711675731,y=0.861409653660949 -a=hat,b=wye,i=7259,x=0.6482012699497162,y=0.25150090033880335 -a=wye,b=hat,i=7260,x=0.3722574884303841,y=0.9096204632963236 -a=eks,b=pan,i=7261,x=0.5956552210056466,y=0.6731134108078785 -a=eks,b=wye,i=7262,x=0.6111098139614397,y=0.15517709802904156 -a=wye,b=zee,i=7263,x=0.7738670394914589,y=0.7776575420356829 -a=zee,b=pan,i=7264,x=0.3693607630046949,y=0.5055013090983799 -a=eks,b=pan,i=7265,x=0.9551577221486072,y=0.29383627386535827 -a=pan,b=zee,i=7266,x=0.29284541534943886,y=0.302297804948473 -a=eks,b=wye,i=7267,x=0.7682692325496115,y=0.10545189803719768 -a=hat,b=zee,i=7268,x=0.5187716634369838,y=0.4578907340058458 -a=eks,b=wye,i=7269,x=0.34228005996384936,y=0.7962044127378957 -a=wye,b=pan,i=7270,x=0.6526947310324253,y=0.22517849223509379 -a=wye,b=eks,i=7271,x=0.3000326333821377,y=0.5981658390236453 -a=wye,b=zee,i=7272,x=0.3433404141399181,y=0.9542907816350394 -a=hat,b=wye,i=7273,x=0.14732182908248415,y=0.15766209607019577 -a=zee,b=hat,i=7274,x=0.12912926442853778,y=0.4373967289737535 -a=zee,b=pan,i=7275,x=0.8310286639738583,y=0.23874521098835433 -a=zee,b=hat,i=7276,x=0.5541611116464608,y=0.11389221370130065 -a=wye,b=pan,i=7277,x=0.7078871914506895,y=0.33655897282671654 -a=pan,b=wye,i=7278,x=0.8504546169336947,y=0.8944056123200194 -a=wye,b=eks,i=7279,x=0.27325948155789803,y=0.9780751132127382 -a=hat,b=wye,i=7280,x=0.8630577882216759,y=0.3401148862570683 -a=pan,b=pan,i=7281,x=0.8126567917280336,y=0.8074968827433902 -a=zee,b=eks,i=7282,x=0.7505245483102981,y=0.17388594473052665 -a=wye,b=wye,i=7283,x=0.7932471858732224,y=0.799314077275886 -a=zee,b=pan,i=7284,x=0.9156868185576506,y=0.8532083341105031 -a=pan,b=eks,i=7285,x=0.6782016255263672,y=0.6826685678107132 -a=zee,b=wye,i=7286,x=0.7477781751613256,y=0.47420402963502417 -a=zee,b=hat,i=7287,x=0.1793121692955475,y=0.15066781644968152 -a=hat,b=eks,i=7288,x=0.47506460337294665,y=0.6344735780644974 -a=pan,b=pan,i=7289,x=0.5648161072496519,y=0.5225373033056284 -a=zee,b=wye,i=7290,x=0.07866679545878696,y=0.8281670295675017 -a=zee,b=hat,i=7291,x=0.4416432361854393,y=0.4815754525534033 -a=pan,b=pan,i=7292,x=0.7818043909150125,y=0.8301584593837131 -a=eks,b=zee,i=7293,x=0.15209082772656235,y=0.8094992950290192 -a=wye,b=hat,i=7294,x=0.7071475331155577,y=0.463983028008944 -a=wye,b=zee,i=7295,x=0.9580523714631302,y=0.44770394756077214 -a=wye,b=hat,i=7296,x=0.06387677434814132,y=0.4016686557239688 -a=zee,b=wye,i=7297,x=0.9096641147013969,y=0.3198678677416569 -a=zee,b=wye,i=7298,x=0.3398026136728608,y=0.796415365588005 -a=wye,b=pan,i=7299,x=0.1271157644108325,y=0.8215802283737754 -a=zee,b=pan,i=7300,x=0.7996204817268934,y=0.16695600702508173 -a=eks,b=zee,i=7301,x=0.24231768726605574,y=0.36168589987653654 -a=pan,b=wye,i=7302,x=0.9493279693158848,y=0.9320553760871662 -a=pan,b=pan,i=7303,x=0.9626006756922457,y=0.3454344654908674 -a=zee,b=pan,i=7304,x=0.6353829183388288,y=0.7926738022346027 -a=pan,b=hat,i=7305,x=0.5874095716972196,y=0.7353421801026144 -a=eks,b=wye,i=7306,x=0.5141888431558487,y=0.25073225691473777 -a=wye,b=eks,i=7307,x=0.2143162664337741,y=0.8580034716749112 -a=hat,b=zee,i=7308,x=0.13221833833166552,y=0.9172258570287248 -a=wye,b=wye,i=7309,x=0.9524036783598119,y=0.012525060888625927 -a=hat,b=pan,i=7310,x=0.06459215228779991,y=0.7528579464907585 -a=pan,b=eks,i=7311,x=0.5502139795389652,y=0.49591789494048777 -a=wye,b=hat,i=7312,x=0.23122127585115393,y=0.34710066461942035 -a=hat,b=hat,i=7313,x=0.04440593404771587,y=0.37885696420400083 -a=pan,b=hat,i=7314,x=0.11943754790139005,y=0.36148458916104687 -a=hat,b=wye,i=7315,x=0.762849509523023,y=0.5445776666095938 -a=wye,b=hat,i=7316,x=0.49431226962351105,y=0.20765083254084993 -a=pan,b=eks,i=7317,x=0.9283829868445185,y=0.053320653955502006 -a=zee,b=wye,i=7318,x=0.9779192041341719,y=0.45913392788037144 -a=eks,b=wye,i=7319,x=0.7931636018175485,y=0.6139112136646976 -a=hat,b=hat,i=7320,x=0.39178985057319626,y=0.23236564180125518 -a=wye,b=wye,i=7321,x=0.35700901065371815,y=0.28320908292909874 -a=pan,b=eks,i=7322,x=0.23434957604819473,y=0.051931896713069414 -a=wye,b=wye,i=7323,x=0.7111896724396426,y=0.3207922792041831 -a=wye,b=zee,i=7324,x=0.46590974940880736,y=0.38852539050053736 -a=hat,b=zee,i=7325,x=0.923332148981879,y=0.24711153523263418 -a=hat,b=zee,i=7326,x=0.6477850327935991,y=0.166272703335551 -a=wye,b=wye,i=7327,x=0.017676716675338322,y=0.9778332141214291 -a=hat,b=hat,i=7328,x=0.5360492386373142,y=0.6804516078113585 -a=wye,b=eks,i=7329,x=0.5479278609035699,y=0.6395949329290961 -a=hat,b=pan,i=7330,x=0.30931842449078206,y=0.9848451565724043 -a=eks,b=hat,i=7331,x=0.788081413287463,y=0.8378548167327706 -a=eks,b=eks,i=7332,x=0.5489481141023792,y=0.1898445505274633 -a=wye,b=eks,i=7333,x=0.23109457565661884,y=0.175253032327905 -a=eks,b=eks,i=7334,x=0.5399986455657582,y=0.8158128369790969 -a=pan,b=wye,i=7335,x=0.2567672400806126,y=0.2775523933001237 -a=eks,b=zee,i=7336,x=0.29854063622113325,y=0.6880575576316322 -a=pan,b=pan,i=7337,x=0.03345300533476314,y=0.05011040908993403 -a=zee,b=hat,i=7338,x=0.7240024979256982,y=0.4923630478351134 -a=eks,b=wye,i=7339,x=0.7149884797875254,y=0.5780977956467382 -a=wye,b=hat,i=7340,x=0.3027659530127267,y=0.8901256310015528 -a=wye,b=wye,i=7341,x=0.9095596401410326,y=0.16616223702173794 -a=pan,b=eks,i=7342,x=0.32087613651983915,y=0.33882735674733244 -a=pan,b=hat,i=7343,x=0.9718021240386961,y=0.8360987881082459 -a=pan,b=zee,i=7344,x=0.7960579191229258,y=0.8642875358044435 -a=wye,b=zee,i=7345,x=0.97794870050786,y=0.3755010163868553 -a=hat,b=eks,i=7346,x=0.9392077077039757,y=0.869513883344899 -a=zee,b=pan,i=7347,x=0.5598151935312621,y=0.9371568081140333 -a=hat,b=pan,i=7348,x=0.5273520540957175,y=0.9743536695566267 -a=zee,b=pan,i=7349,x=0.9798614924191777,y=0.661939043406021 -a=wye,b=pan,i=7350,x=0.22127788655478875,y=0.8938285029323859 -a=pan,b=hat,i=7351,x=0.5233972953461609,y=0.1299030288348728 -a=wye,b=wye,i=7352,x=0.0924480571001528,y=0.30109533355539897 -a=pan,b=wye,i=7353,x=0.7001693740890388,y=0.7313365122301939 -a=zee,b=wye,i=7354,x=0.5619890666183939,y=0.23528736664694083 -a=zee,b=eks,i=7355,x=0.8301624729023548,y=0.0615273482256774 -a=pan,b=hat,i=7356,x=0.5045510100638597,y=0.23513093423261755 -a=zee,b=zee,i=7357,x=0.37772059495645105,y=0.04160047639165676 -a=eks,b=pan,i=7358,x=0.20000198658880186,y=0.2727601315820374 -a=zee,b=zee,i=7359,x=0.8789933703062237,y=0.787471191499597 -a=zee,b=hat,i=7360,x=0.9083001482768445,y=0.3841688843397407 -a=zee,b=hat,i=7361,x=0.03789515978860469,y=0.08906319847440858 -a=zee,b=pan,i=7362,x=0.37791224094768805,y=0.035794629838716285 -a=eks,b=eks,i=7363,x=0.1789979975700029,y=0.9323731265959059 -a=hat,b=eks,i=7364,x=0.7057751089174641,y=0.3218193615346736 -a=eks,b=wye,i=7365,x=0.4037294740938493,y=0.827514532289803 -a=zee,b=pan,i=7366,x=0.7326832606913403,y=0.988312668973181 -a=pan,b=wye,i=7367,x=0.050978150403878986,y=0.6397760763553187 -a=eks,b=hat,i=7368,x=0.38478100718255326,y=0.5987722480044325 -a=zee,b=wye,i=7369,x=0.12183474068456046,y=0.935692190729219 -a=zee,b=zee,i=7370,x=0.7741716706994631,y=0.8036145555008443 -a=zee,b=hat,i=7371,x=0.4507985912029725,y=0.3077642021954843 -a=pan,b=pan,i=7372,x=0.7704918547993125,y=0.9834514670413425 -a=eks,b=eks,i=7373,x=0.4293751563574991,y=0.321596575054345 -a=wye,b=zee,i=7374,x=0.551952261755126,y=0.5902774680877885 -a=pan,b=wye,i=7375,x=0.42955545463755385,y=0.9934718779427805 -a=eks,b=eks,i=7376,x=0.3445135978821475,y=0.6156808849126956 -a=pan,b=eks,i=7377,x=0.34789754809053564,y=0.6075272228064196 -a=hat,b=pan,i=7378,x=0.10026227651385622,y=0.04421109516628252 -a=hat,b=eks,i=7379,x=0.24988599675183953,y=0.5075999788186907 -a=hat,b=hat,i=7380,x=0.27192573832264333,y=0.8068429680053445 -a=pan,b=zee,i=7381,x=0.9697283975533304,y=0.28635495669422684 -a=hat,b=wye,i=7382,x=0.8019809972589643,y=0.005365368085154643 -a=pan,b=wye,i=7383,x=0.8494039628427111,y=0.8499184581272037 -a=pan,b=pan,i=7384,x=0.147877939581611,y=0.3802766658466368 -a=hat,b=wye,i=7385,x=0.6891675084646794,y=0.21966643420211807 -a=eks,b=wye,i=7386,x=0.06869104618996669,y=0.9055981024968931 -a=hat,b=pan,i=7387,x=0.04127341734955359,y=0.5872280653454409 -a=zee,b=pan,i=7388,x=0.29756214466232356,y=0.9313351005781804 -a=eks,b=pan,i=7389,x=0.2598351155486429,y=0.6198880821789519 -a=wye,b=eks,i=7390,x=0.6980368648478577,y=0.3472713980791412 -a=pan,b=eks,i=7391,x=0.4877630118621793,y=0.2703969185758941 -a=eks,b=zee,i=7392,x=0.47928188791181825,y=0.4019006064467472 -a=zee,b=pan,i=7393,x=0.32975449059840245,y=0.7244778074880798 -a=pan,b=zee,i=7394,x=0.7577687447939129,y=0.8939904227639627 -a=zee,b=wye,i=7395,x=0.5803000300289758,y=0.4776490273972346 -a=hat,b=eks,i=7396,x=0.15220840867031593,y=0.8065677095962809 -a=pan,b=eks,i=7397,x=0.7805268684800922,y=0.40839477314823913 -a=zee,b=eks,i=7398,x=0.6991548640255947,y=0.30943844921705455 -a=zee,b=eks,i=7399,x=0.9620019895205045,y=0.04121066152708375 -a=wye,b=pan,i=7400,x=0.6413551187597212,y=0.8585006139152228 -a=pan,b=zee,i=7401,x=0.7038547368085565,y=0.833002029439337 -a=wye,b=eks,i=7402,x=0.8512179412309284,y=0.11635538096923825 -a=eks,b=hat,i=7403,x=0.8360641078807856,y=0.9076959476149424 -a=wye,b=zee,i=7404,x=0.8798482207846597,y=0.980841539034285 -a=pan,b=eks,i=7405,x=0.6745743258945766,y=0.7867105500751859 -a=hat,b=hat,i=7406,x=0.563984894776307,y=0.22186356075852087 -a=zee,b=hat,i=7407,x=0.21870541414543287,y=0.5381352837603439 -a=hat,b=wye,i=7408,x=0.9529062878494667,y=0.7852866253859588 -a=eks,b=pan,i=7409,x=0.7981122558329,y=0.6186019487821701 -a=zee,b=eks,i=7410,x=0.28326065224069574,y=0.9300177238169315 -a=eks,b=wye,i=7411,x=0.9969817321900778,y=0.46830380409504446 -a=pan,b=wye,i=7412,x=0.6977929179546933,y=0.5888437383863911 -a=zee,b=zee,i=7413,x=0.5789877301693207,y=0.21648842981409888 -a=wye,b=hat,i=7414,x=0.8736572008864342,y=0.5573924644600762 -a=wye,b=wye,i=7415,x=0.30171840067278866,y=0.3419586030343307 -a=pan,b=wye,i=7416,x=0.2585223323598659,y=0.3463024564198399 -a=hat,b=eks,i=7417,x=0.3785664786635482,y=0.26018775063772737 -a=wye,b=eks,i=7418,x=0.006639005627157579,y=0.5729637583197084 -a=hat,b=hat,i=7419,x=0.2273259043408271,y=0.5563529993801493 -a=wye,b=pan,i=7420,x=0.637403401738078,y=0.8374737656276083 -a=zee,b=zee,i=7421,x=0.27260075448645904,y=0.40666948184724905 -a=wye,b=wye,i=7422,x=0.23158788759518745,y=0.2878292702486247 -a=wye,b=hat,i=7423,x=0.65748564141991,y=0.991048470406043 -a=hat,b=hat,i=7424,x=0.10089391588727137,y=0.7817715852844856 -a=zee,b=eks,i=7425,x=0.8261837120346296,y=0.06964125640579655 -a=pan,b=pan,i=7426,x=0.07638817370818407,y=0.556879044634861 -a=pan,b=pan,i=7427,x=0.26915621186308547,y=0.9818876276497374 -a=hat,b=hat,i=7428,x=0.39688244993813704,y=0.9331868149522005 -a=pan,b=hat,i=7429,x=0.9357825556156103,y=0.4134876666224273 -a=wye,b=eks,i=7430,x=0.6505309265233103,y=0.08052144928451366 -a=eks,b=hat,i=7431,x=0.42045666700455464,y=0.1678609743716658 -a=pan,b=wye,i=7432,x=0.7229621008200041,y=0.31447862305937724 -a=wye,b=pan,i=7433,x=0.1438112738288524,y=0.9525096683562059 -a=wye,b=zee,i=7434,x=0.1904070234884352,y=0.933784711872319 -a=wye,b=eks,i=7435,x=0.19859477051626107,y=0.9333014786736845 -a=zee,b=hat,i=7436,x=0.05768708104754017,y=0.6575915330429977 -a=wye,b=pan,i=7437,x=0.9282262872069705,y=0.6360386793524121 -a=pan,b=wye,i=7438,x=0.14231386871466345,y=0.4954949252707901 -a=hat,b=zee,i=7439,x=0.3598352944100318,y=0.24656543972679557 -a=eks,b=hat,i=7440,x=0.25828687688130847,y=0.842768437062058 -a=wye,b=wye,i=7441,x=0.48729002348282646,y=0.9161401465437051 -a=zee,b=wye,i=7442,x=0.6608160620662386,y=0.5974595563363765 -a=hat,b=wye,i=7443,x=0.25082061911407305,y=0.21021328972399989 -a=pan,b=zee,i=7444,x=0.3397136877438124,y=0.2183579843750636 -a=pan,b=wye,i=7445,x=0.08633640516764107,y=0.8061389023613882 -a=zee,b=wye,i=7446,x=0.48989555445269983,y=0.4667529417156665 -a=wye,b=pan,i=7447,x=0.12261193061376408,y=0.799087216626477 -a=pan,b=pan,i=7448,x=0.2640997209164132,y=0.21566634091032355 -a=wye,b=pan,i=7449,x=0.8358772139168086,y=0.5804404380403491 -a=hat,b=hat,i=7450,x=0.999952670371898,y=0.02385920300033073 -a=wye,b=eks,i=7451,x=0.8347006203497817,y=0.9777231624470996 -a=eks,b=eks,i=7452,x=0.9039050523436697,y=0.2854652762069536 -a=eks,b=pan,i=7453,x=0.16650506760957007,y=0.5597579813350784 -a=pan,b=hat,i=7454,x=0.5194182222148909,y=0.7430038847189214 -a=hat,b=eks,i=7455,x=0.5414111357368178,y=0.20940952316770656 -a=pan,b=zee,i=7456,x=0.9804921267993308,y=0.016246164251253248 -a=wye,b=zee,i=7457,x=0.33342706113360265,y=0.14501891527781052 -a=eks,b=eks,i=7458,x=0.5811068614884891,y=0.664734231079448 -a=pan,b=eks,i=7459,x=0.2226239493776776,y=0.5135994340181766 -a=pan,b=pan,i=7460,x=0.35138591198463265,y=0.21244588228015993 -a=hat,b=zee,i=7461,x=0.7384848550717226,y=0.24830667641463977 -a=pan,b=pan,i=7462,x=0.6618404094367076,y=0.8219415456549093 -a=wye,b=hat,i=7463,x=0.6072686833968383,y=0.7123986333317 -a=pan,b=pan,i=7464,x=0.20391564584771982,y=0.016010952251377497 -a=wye,b=pan,i=7465,x=0.7773724564001473,y=0.2347275530159466 -a=zee,b=hat,i=7466,x=0.46902698855775327,y=0.6551810919348852 -a=hat,b=wye,i=7467,x=0.9615308149819951,y=0.21971550212549507 -a=pan,b=wye,i=7468,x=0.5738436863958716,y=0.15248721298846157 -a=zee,b=wye,i=7469,x=0.07385275759024545,y=0.988298861201188 -a=pan,b=eks,i=7470,x=0.9940613416045865,y=0.07142955197723755 -a=pan,b=zee,i=7471,x=0.7206962235321295,y=0.4041386971591123 -a=wye,b=pan,i=7472,x=0.9988712528911804,y=0.10724690438707674 -a=eks,b=wye,i=7473,x=0.05762456751144174,y=0.28964111938628945 -a=zee,b=hat,i=7474,x=0.43396734243561297,y=0.14885801202307214 -a=eks,b=pan,i=7475,x=0.6722348646450019,y=0.7590858841092192 -a=wye,b=eks,i=7476,x=0.2793082894315966,y=0.6921191873971512 -a=wye,b=eks,i=7477,x=0.2981113055444685,y=0.3118479248083458 -a=eks,b=zee,i=7478,x=0.7409323823493578,y=0.7821738405034923 -a=eks,b=pan,i=7479,x=0.9488581319420917,y=0.5706834161873786 -a=eks,b=hat,i=7480,x=0.02963041418290202,y=0.31020752876337365 -a=zee,b=hat,i=7481,x=0.530165909368211,y=0.3499068052213301 -a=eks,b=hat,i=7482,x=0.5358070419986188,y=0.9271364146014381 -a=eks,b=hat,i=7483,x=0.641587995068053,y=0.39862033216100345 -a=pan,b=hat,i=7484,x=0.9277546187980327,y=0.6036400626061248 -a=zee,b=zee,i=7485,x=0.18250243629492235,y=0.5110714625281656 -a=hat,b=eks,i=7486,x=0.05432606225417025,y=0.846037438857557 -a=zee,b=wye,i=7487,x=0.06930153211010659,y=0.40332380041726024 -a=hat,b=zee,i=7488,x=0.9738235845036819,y=0.11750653625892593 -a=wye,b=zee,i=7489,x=0.586694906363601,y=0.485804661756557 -a=eks,b=wye,i=7490,x=0.19672144728622376,y=0.8795897188259745 -a=hat,b=pan,i=7491,x=0.6815182530961382,y=0.9995542599759397 -a=zee,b=zee,i=7492,x=0.9924139789261013,y=0.39715459387237506 -a=wye,b=zee,i=7493,x=0.30230649338335736,y=0.6455888156649094 -a=eks,b=eks,i=7494,x=0.6054081816351222,y=0.18385964263706056 -a=pan,b=eks,i=7495,x=0.153249592750631,y=0.93584890369611 -a=pan,b=hat,i=7496,x=0.6974292707231954,y=0.2143287930146287 -a=hat,b=wye,i=7497,x=0.01901911173549864,y=0.12188494912380243 -a=zee,b=wye,i=7498,x=0.9598078762930742,y=0.9526096866376772 -a=hat,b=wye,i=7499,x=0.636327994634104,y=0.5920454180111085 -a=eks,b=pan,i=7500,x=0.28545374834074233,y=0.23198097536923323 -a=zee,b=eks,i=7501,x=0.28446902555255327,y=0.7217441754314862 -a=wye,b=pan,i=7502,x=0.4908870880910682,y=0.8748956439477087 -a=zee,b=hat,i=7503,x=0.7352529827218478,y=0.629380067609114 -a=pan,b=wye,i=7504,x=0.8333715164315797,y=0.9451336949095434 -a=zee,b=pan,i=7505,x=0.564057939908022,y=0.5334065367359347 -a=eks,b=pan,i=7506,x=0.7892604620140382,y=0.4458012446463657 -a=hat,b=pan,i=7507,x=0.2115605362533587,y=0.17174864475858942 -a=wye,b=eks,i=7508,x=0.5483107008409311,y=0.887289998494882 -a=eks,b=pan,i=7509,x=0.7069484914746176,y=0.782150154038626 -a=wye,b=eks,i=7510,x=0.6248444849216757,y=0.6630576924648813 -a=zee,b=zee,i=7511,x=0.6377020664864278,y=0.03108546393426559 -a=pan,b=hat,i=7512,x=0.5379752912051612,y=0.224779054520575 -a=hat,b=wye,i=7513,x=0.5412688517812235,y=0.5262389205562669 -a=eks,b=pan,i=7514,x=0.6610230005876971,y=0.3614899634971477 -a=wye,b=hat,i=7515,x=0.9897486946692156,y=0.8560315264830626 -a=wye,b=zee,i=7516,x=0.8259254313902334,y=0.7412888906117227 -a=pan,b=pan,i=7517,x=0.7516545627381832,y=0.7262369325855629 -a=wye,b=eks,i=7518,x=0.11113013523732362,y=0.8868844523482303 -a=pan,b=zee,i=7519,x=0.8278328235609442,y=0.20410343800651054 -a=pan,b=zee,i=7520,x=0.9899477831046952,y=0.14660509070885575 -a=pan,b=eks,i=7521,x=0.8118281802749344,y=0.2234359726399897 -a=hat,b=pan,i=7522,x=0.24133540171495538,y=0.5588871341097482 -a=pan,b=hat,i=7523,x=0.7491239851649556,y=0.9869320105885282 -a=pan,b=zee,i=7524,x=0.8170930769042274,y=0.9831655236845562 -a=eks,b=hat,i=7525,x=0.8698194027224814,y=0.05435121618572081 -a=pan,b=hat,i=7526,x=0.6842184815608053,y=0.5413631696210732 -a=hat,b=eks,i=7527,x=0.9217058451870804,y=0.21666960274280356 -a=eks,b=zee,i=7528,x=0.6805617035261402,y=0.9357708602507883 -a=eks,b=hat,i=7529,x=0.31981099050142825,y=0.8903683820537329 -a=zee,b=wye,i=7530,x=0.7097075423244159,y=0.9664504052194537 -a=hat,b=zee,i=7531,x=0.2229334385915317,y=0.3284190225602506 -a=eks,b=wye,i=7532,x=0.5296457339778697,y=0.5356809514905594 -a=wye,b=pan,i=7533,x=0.7835022697060869,y=0.5470260523424321 -a=zee,b=wye,i=7534,x=0.1466838920302843,y=0.5483633847205762 -a=eks,b=eks,i=7535,x=0.09134795754962621,y=0.843889939620117 -a=zee,b=wye,i=7536,x=0.977198066335277,y=0.841156212711556 -a=zee,b=zee,i=7537,x=0.45067646463535815,y=0.4846053315615896 -a=wye,b=wye,i=7538,x=0.23718351292469453,y=0.9441763901099166 -a=eks,b=wye,i=7539,x=0.26816744152538996,y=0.6815708508524089 -a=pan,b=pan,i=7540,x=0.9220993601302719,y=0.7568665001928173 -a=eks,b=hat,i=7541,x=0.5161023046647734,y=0.038809351906244016 -a=pan,b=pan,i=7542,x=0.20122530941942418,y=0.7472458340839414 -a=hat,b=hat,i=7543,x=0.6227885940707738,y=0.6684149004769806 -a=wye,b=eks,i=7544,x=0.9740791622624008,y=0.07927202429603264 -a=wye,b=eks,i=7545,x=0.022518661429014375,y=0.2901112553388282 -a=wye,b=zee,i=7546,x=0.18448181492287075,y=0.9152350814320122 -a=hat,b=hat,i=7547,x=0.8215672815436097,y=0.5614013828250404 -a=hat,b=hat,i=7548,x=0.19269905065728477,y=0.011009649002469146 -a=eks,b=wye,i=7549,x=0.7325288469158541,y=0.565544676390673 -a=hat,b=eks,i=7550,x=0.2558306743415637,y=0.7422910597132735 -a=wye,b=hat,i=7551,x=0.3483947470200932,y=0.510297078100616 -a=wye,b=eks,i=7552,x=0.8469802002512098,y=0.815964077738481 -a=eks,b=pan,i=7553,x=0.5358909567117672,y=0.4100558446457958 -a=eks,b=wye,i=7554,x=0.7339079956532404,y=0.8285558028377102 -a=pan,b=zee,i=7555,x=0.30709526445187707,y=0.4817130705295929 -a=hat,b=zee,i=7556,x=0.8122054753287119,y=0.20604868440565904 -a=zee,b=zee,i=7557,x=0.7640201646131568,y=0.07069070372885133 -a=wye,b=hat,i=7558,x=0.6038851752558235,y=0.9009580077702348 -a=hat,b=pan,i=7559,x=0.5523119384745296,y=0.3127290290515127 -a=eks,b=hat,i=7560,x=0.10199887225407722,y=0.31764039641093744 -a=pan,b=eks,i=7561,x=0.41848341511646414,y=0.5635397789589572 -a=wye,b=pan,i=7562,x=0.11656719650390013,y=0.7876569096468866 -a=eks,b=hat,i=7563,x=0.026862386488812562,y=0.6617623406511374 -a=hat,b=wye,i=7564,x=0.8296346152245616,y=0.22172618374176756 -a=hat,b=eks,i=7565,x=0.17354141768396691,y=0.7068716816979178 -a=zee,b=zee,i=7566,x=0.04190996301140926,y=0.8085114623622482 -a=zee,b=pan,i=7567,x=0.4193214026807677,y=0.394167835232068 -a=eks,b=pan,i=7568,x=0.5271419780589164,y=0.1432057817925363 -a=zee,b=hat,i=7569,x=0.09822492892655521,y=0.05447501970715207 -a=zee,b=zee,i=7570,x=0.12789683952220732,y=0.25490189761435 -a=pan,b=eks,i=7571,x=0.22380898154758588,y=0.9433203311960137 -a=hat,b=pan,i=7572,x=0.445759638952951,y=0.6137807210496694 -a=wye,b=wye,i=7573,x=0.92008458670793,y=0.6955528667719472 -a=eks,b=pan,i=7574,x=0.14478437931649057,y=0.0941855027104701 -a=pan,b=pan,i=7575,x=0.9500548333140316,y=0.18833841450136246 -a=hat,b=wye,i=7576,x=0.6030949657537056,y=0.14875629679301372 -a=eks,b=zee,i=7577,x=0.14231014763644978,y=0.4717127637144344 -a=wye,b=eks,i=7578,x=0.06201408130259789,y=0.69048502266567 -a=hat,b=zee,i=7579,x=0.05435384851495728,y=0.9902847007425324 -a=pan,b=eks,i=7580,x=0.1600952140568258,y=0.4045418954164892 -a=wye,b=wye,i=7581,x=0.2175313107798721,y=0.3671212999414236 -a=pan,b=hat,i=7582,x=0.2569787233680674,y=0.2148575227188957 -a=pan,b=hat,i=7583,x=0.8536220104505021,y=0.2523759042998861 -a=zee,b=hat,i=7584,x=0.09065491442429796,y=0.5048830484306086 -a=wye,b=zee,i=7585,x=0.13751395044042258,y=0.034975186947673986 -a=hat,b=hat,i=7586,x=0.5889920011506182,y=0.8078788341273992 -a=zee,b=hat,i=7587,x=0.03280836042125246,y=0.41282684631580824 -a=zee,b=wye,i=7588,x=0.5288696811580935,y=0.48744579505300667 -a=zee,b=hat,i=7589,x=0.7770699494898016,y=0.7790651064661754 -a=pan,b=pan,i=7590,x=0.3953702626804989,y=0.8410161773270264 -a=pan,b=hat,i=7591,x=0.2245253698516796,y=0.7737639246478398 -a=zee,b=zee,i=7592,x=0.35146635664435344,y=0.4539874980554838 -a=wye,b=eks,i=7593,x=0.04430024252919407,y=0.1263254223270297 -a=zee,b=eks,i=7594,x=0.6200947126046739,y=0.24510543274951047 -a=pan,b=wye,i=7595,x=0.20918481361880603,y=0.6732663492566918 -a=eks,b=zee,i=7596,x=0.5712662107490064,y=0.6090688560627531 -a=wye,b=eks,i=7597,x=0.4310431117208252,y=0.08951460884563855 -a=wye,b=wye,i=7598,x=0.06633817142669896,y=0.5442252601992482 -a=pan,b=wye,i=7599,x=0.9608268596180474,y=0.9070684642079544 -a=eks,b=eks,i=7600,x=0.5242885778608762,y=0.7826689200927383 -a=wye,b=pan,i=7601,x=0.9208150605661285,y=0.5589433846274124 -a=eks,b=wye,i=7602,x=0.5833785073086928,y=0.04443501942703898 -a=eks,b=hat,i=7603,x=0.36191015100917356,y=0.710442357988238 -a=wye,b=wye,i=7604,x=0.9697192149941326,y=0.09592438977685924 -a=pan,b=hat,i=7605,x=0.3084442479608156,y=0.29052958365713977 -a=zee,b=pan,i=7606,x=0.39737589478806956,y=0.02851924706651765 -a=pan,b=wye,i=7607,x=0.2998113807261462,y=0.47793002819857533 -a=pan,b=wye,i=7608,x=0.7117542206974444,y=0.7970333994894653 -a=zee,b=pan,i=7609,x=0.39637889658629055,y=0.15152040674745126 -a=zee,b=eks,i=7610,x=0.3668009982476311,y=0.636238165533322 -a=wye,b=wye,i=7611,x=0.9172464082645518,y=0.21030281985055865 -a=zee,b=wye,i=7612,x=0.3473870036653739,y=0.03835525794322947 -a=eks,b=wye,i=7613,x=0.051620293140943185,y=0.3354589495771291 -a=hat,b=eks,i=7614,x=0.26171105103308545,y=0.7349252470172892 -a=pan,b=hat,i=7615,x=0.006420504177456654,y=0.8005473595004451 -a=zee,b=pan,i=7616,x=0.6250802601130294,y=0.350073441110904 -a=hat,b=wye,i=7617,x=0.3667157138284648,y=0.8788517472187893 -a=hat,b=eks,i=7618,x=0.23737869189758654,y=0.43340937762837506 -a=zee,b=hat,i=7619,x=0.0396492782791249,y=0.21046790711790042 -a=hat,b=wye,i=7620,x=0.8866095807323401,y=0.1303857423099647 -a=wye,b=zee,i=7621,x=0.17096221571163828,y=0.7965958396369065 -a=hat,b=zee,i=7622,x=0.03375086644321179,y=0.6603973570703182 -a=zee,b=wye,i=7623,x=0.8476652404295622,y=0.5532359995865707 -a=eks,b=wye,i=7624,x=0.4036466177426279,y=0.9323311367204503 -a=zee,b=wye,i=7625,x=0.6630299534680688,y=0.9316352338897794 -a=eks,b=zee,i=7626,x=0.9362983270638663,y=0.02530583139989606 -a=zee,b=hat,i=7627,x=0.3510535767246904,y=0.3060628840965116 -a=eks,b=eks,i=7628,x=0.6580765451729311,y=0.3478545363218032 -a=hat,b=hat,i=7629,x=0.6503893869201249,y=0.8748121320804191 -a=wye,b=pan,i=7630,x=0.4658141836395999,y=0.8966097764457495 -a=pan,b=pan,i=7631,x=0.27145158019948934,y=0.09516187714787117 -a=wye,b=zee,i=7632,x=0.734823995296927,y=0.7719486421533686 -a=pan,b=wye,i=7633,x=0.16036619135517816,y=0.6056119689930829 -a=eks,b=wye,i=7634,x=0.7109688223985979,y=0.7976941367774835 -a=zee,b=zee,i=7635,x=0.12557655765488285,y=0.11534164357950183 -a=pan,b=hat,i=7636,x=0.06705624100603413,y=0.6451188760762676 -a=pan,b=hat,i=7637,x=0.9106017109900336,y=0.8891547034705604 -a=zee,b=zee,i=7638,x=0.2748491611629733,y=0.80651606034967 -a=eks,b=hat,i=7639,x=0.771170174812707,y=0.7659520407198543 -a=eks,b=wye,i=7640,x=0.2743403725668617,y=0.29487651020724404 -a=pan,b=zee,i=7641,x=0.9381993656017179,y=0.6132694517353006 -a=zee,b=wye,i=7642,x=0.20250440741625753,y=0.5663711206888612 -a=eks,b=pan,i=7643,x=0.47586159706318876,y=0.4962125479739936 -a=wye,b=zee,i=7644,x=0.6513731813421505,y=0.9956216673837286 -a=hat,b=wye,i=7645,x=0.7915745853842925,y=0.34176706803861534 -a=hat,b=zee,i=7646,x=0.5142370614917985,y=0.37306603953034023 -a=zee,b=pan,i=7647,x=0.4270489725783423,y=0.5331035003317631 -a=zee,b=wye,i=7648,x=0.6798736010037264,y=0.9310702986321819 -a=wye,b=wye,i=7649,x=0.06713737802328557,y=0.6633680869367675 -a=wye,b=hat,i=7650,x=0.8930880818631942,y=0.05300924902758186 -a=eks,b=wye,i=7651,x=0.46360005487315714,y=0.5379475572098419 -a=wye,b=zee,i=7652,x=0.006772483197185153,y=0.8526037392488609 -a=wye,b=wye,i=7653,x=0.5261687377247655,y=0.9662557892207575 -a=hat,b=eks,i=7654,x=0.930363511771148,y=0.40431933522117625 -a=hat,b=zee,i=7655,x=0.7870611543157765,y=0.3879247735466407 -a=hat,b=eks,i=7656,x=0.5567810208255114,y=0.08177612908836551 -a=eks,b=pan,i=7657,x=0.9396222500433881,y=0.4873885569213413 -a=pan,b=wye,i=7658,x=0.3621794133271582,y=0.38650038828351596 -a=pan,b=wye,i=7659,x=0.6372574031531049,y=0.4008307542658702 -a=pan,b=pan,i=7660,x=0.5441433972504542,y=0.9469895242558711 -a=zee,b=hat,i=7661,x=0.9408442476780763,y=0.8023490934603362 -a=pan,b=pan,i=7662,x=0.7195689266210618,y=0.19413596115835852 -a=hat,b=eks,i=7663,x=0.511020096362885,y=0.37947905296566964 -a=wye,b=wye,i=7664,x=0.63099124038326,y=0.08422373938558314 -a=eks,b=hat,i=7665,x=0.34062598597350535,y=0.9340112462726258 -a=wye,b=hat,i=7666,x=0.567402800484997,y=0.03927156134016285 -a=zee,b=eks,i=7667,x=0.03246665173355623,y=0.4911639950418465 -a=pan,b=eks,i=7668,x=0.10428072545494949,y=0.705703566436069 -a=hat,b=hat,i=7669,x=0.9372199212901666,y=0.2848921895320988 -a=pan,b=wye,i=7670,x=0.4293848817589905,y=0.6839311106774395 -a=pan,b=hat,i=7671,x=0.5479425830973824,y=0.6792965466963522 -a=pan,b=wye,i=7672,x=0.8149257619922751,y=0.04756755305626292 -a=eks,b=pan,i=7673,x=0.8071000122718018,y=0.3069131904807898 -a=wye,b=wye,i=7674,x=0.8942818883713989,y=0.5212590944649815 -a=wye,b=eks,i=7675,x=0.5955058458574938,y=0.4676247967613243 -a=eks,b=pan,i=7676,x=0.44645752932549043,y=0.031497838025275615 -a=pan,b=eks,i=7677,x=0.5906841474792559,y=0.39720028182162814 -a=eks,b=hat,i=7678,x=0.07578434084199792,y=0.22918239952964947 -a=wye,b=hat,i=7679,x=0.9686531523418166,y=0.924678615947144 -a=wye,b=hat,i=7680,x=0.6280201487984101,y=0.536246349153707 -a=zee,b=pan,i=7681,x=0.14883118602285983,y=0.5148080394741317 -a=wye,b=hat,i=7682,x=0.24098953071009122,y=0.26190037231185814 -a=pan,b=pan,i=7683,x=0.6653528080679457,y=0.23663023500818714 -a=wye,b=pan,i=7684,x=0.8868188354900317,y=0.43208980346634795 -a=zee,b=pan,i=7685,x=0.09709731100349062,y=0.4690475302436993 -a=pan,b=eks,i=7686,x=0.18978586580625822,y=0.18115920896147264 -a=wye,b=zee,i=7687,x=0.3434686533925685,y=0.48726381835108046 -a=eks,b=wye,i=7688,x=0.6488879560928158,y=0.042222720585220475 -a=eks,b=hat,i=7689,x=0.17159448083555107,y=0.045442427612649494 -a=hat,b=zee,i=7690,x=0.7259375308340535,y=0.7674839756219988 -a=hat,b=hat,i=7691,x=0.8777344389987419,y=0.13098255040262852 -a=hat,b=eks,i=7692,x=0.8385522296255185,y=0.33460046618507555 -a=eks,b=hat,i=7693,x=0.8955356576888092,y=0.48158644758234315 -a=zee,b=wye,i=7694,x=0.3060398953875496,y=0.10472339189986246 -a=pan,b=zee,i=7695,x=0.3094975482418527,y=0.5858128371070169 -a=wye,b=hat,i=7696,x=0.4662656698623283,y=0.8544965801108738 -a=pan,b=zee,i=7697,x=0.6678143703378705,y=0.09581777907957223 -a=zee,b=zee,i=7698,x=0.17073541333474684,y=0.6197461253961557 -a=hat,b=pan,i=7699,x=0.28150223924025986,y=0.7949334007434804 -a=eks,b=pan,i=7700,x=0.7077775737786727,y=0.7272353949934527 -a=pan,b=pan,i=7701,x=0.43912855740961954,y=0.5952759302937142 -a=wye,b=pan,i=7702,x=0.6934052269305254,y=0.7343693194312434 -a=zee,b=wye,i=7703,x=0.0832141448099386,y=0.689610820157997 -a=eks,b=eks,i=7704,x=0.76786474676413,y=0.8734911204128757 -a=zee,b=eks,i=7705,x=0.9142550768210165,y=0.42338987508974 -a=hat,b=hat,i=7706,x=0.4389747985376733,y=0.5868957432180422 -a=pan,b=hat,i=7707,x=0.4742489895390498,y=0.6875201433051585 -a=eks,b=wye,i=7708,x=0.1593131070189654,y=0.21618160132947373 -a=eks,b=pan,i=7709,x=0.021236282778372417,y=0.3980616560952607 -a=pan,b=pan,i=7710,x=0.6454947652276057,y=0.5934369662779847 -a=pan,b=hat,i=7711,x=0.38583521508275165,y=0.5401757081161919 -a=pan,b=hat,i=7712,x=0.4196809161822014,y=0.26377711630821754 -a=zee,b=pan,i=7713,x=0.155281849590593,y=0.5244565614620743 -a=zee,b=eks,i=7714,x=0.6373285599346649,y=0.1336713798341309 -a=hat,b=hat,i=7715,x=0.6233765313325004,y=0.5758791846152675 -a=wye,b=pan,i=7716,x=0.06175476953603409,y=0.8534290829785786 -a=hat,b=wye,i=7717,x=0.2286520253814175,y=0.1192319014188804 -a=zee,b=hat,i=7718,x=0.267306560937963,y=0.6639413524240723 -a=wye,b=pan,i=7719,x=0.776170709486471,y=0.04166930319722717 -a=zee,b=wye,i=7720,x=0.9961164879374235,y=0.16594871214649265 -a=hat,b=hat,i=7721,x=0.6299836686087046,y=0.13572824583073617 -a=zee,b=wye,i=7722,x=0.3686941934605621,y=0.9443406667411673 -a=eks,b=pan,i=7723,x=0.3209098916589238,y=0.4109567715356973 -a=wye,b=hat,i=7724,x=0.6570505905515743,y=0.15899862539640153 -a=hat,b=wye,i=7725,x=0.1378541730969839,y=0.25911129591737747 -a=pan,b=pan,i=7726,x=0.43414990019558963,y=0.1556380176176868 -a=pan,b=wye,i=7727,x=0.8676654887349956,y=0.4278534479696323 -a=eks,b=zee,i=7728,x=0.5397828066703505,y=0.6535807927478277 -a=eks,b=hat,i=7729,x=0.02721562297052116,y=0.8792751973629769 -a=zee,b=zee,i=7730,x=0.17826971421632076,y=0.23305955441707682 -a=hat,b=eks,i=7731,x=0.6064367170765328,y=0.5843998077541726 -a=zee,b=zee,i=7732,x=0.306490201972222,y=0.8466305229690627 -a=hat,b=pan,i=7733,x=0.15752257838130168,y=0.025328573078963523 -a=zee,b=wye,i=7734,x=0.004805891882058155,y=0.7847915958995085 -a=hat,b=hat,i=7735,x=0.9286394794387348,y=0.9849690205615684 -a=wye,b=zee,i=7736,x=0.5283513685317409,y=0.8859340359150333 -a=wye,b=zee,i=7737,x=0.652833563987708,y=0.08525874301989911 -a=hat,b=hat,i=7738,x=0.5904289054724924,y=0.015759945451949697 -a=wye,b=eks,i=7739,x=0.20047031500415902,y=0.8454528005125532 -a=wye,b=eks,i=7740,x=0.7528542161787996,y=0.7648364405523831 -a=hat,b=wye,i=7741,x=0.9811094199766318,y=0.28309547772560684 -a=wye,b=hat,i=7742,x=0.9283700112189616,y=0.4397004799577646 -a=pan,b=hat,i=7743,x=0.26831057042317386,y=0.7077299528211933 -a=eks,b=hat,i=7744,x=0.9850127339517182,y=0.28247386637526417 -a=eks,b=eks,i=7745,x=0.3215874010779871,y=0.2780127707789244 -a=eks,b=eks,i=7746,x=0.35282776725789056,y=0.015349081732579983 -a=zee,b=eks,i=7747,x=0.4180982192655389,y=0.2733251523581718 -a=eks,b=hat,i=7748,x=0.27317227631391283,y=0.6152013002721723 -a=zee,b=pan,i=7749,x=0.408781801299804,y=0.717319277351812 -a=pan,b=zee,i=7750,x=0.27375467840491696,y=0.9485370229814897 -a=wye,b=wye,i=7751,x=0.9578808895640281,y=0.567472797993126 -a=eks,b=wye,i=7752,x=0.8308158486543955,y=0.7251988641133165 -a=wye,b=wye,i=7753,x=0.35648228848353636,y=0.825810007353184 -a=eks,b=hat,i=7754,x=0.5569680022127645,y=0.5333129600306122 -a=eks,b=pan,i=7755,x=0.3881304412114248,y=0.4050350844434646 -a=zee,b=pan,i=7756,x=0.2999624778639135,y=0.3422859654759408 -a=hat,b=eks,i=7757,x=0.005675684156441596,y=0.4710155431561027 -a=pan,b=zee,i=7758,x=0.36890917101981324,y=0.9763006270617745 -a=hat,b=pan,i=7759,x=0.2655863070154898,y=0.4394097550698016 -a=zee,b=pan,i=7760,x=0.09922636178391386,y=0.3133271646647967 -a=hat,b=pan,i=7761,x=0.5937279590019037,y=0.9494399455643315 -a=eks,b=pan,i=7762,x=0.9358045588817545,y=0.7330851249844436 -a=zee,b=wye,i=7763,x=0.5786653829827114,y=0.2618880168331781 -a=zee,b=pan,i=7764,x=0.48750871272402196,y=0.22236263541673462 -a=hat,b=hat,i=7765,x=0.8891522513963568,y=0.2668239844400174 -a=zee,b=pan,i=7766,x=0.30364046910111253,y=0.6891273587279694 -a=eks,b=eks,i=7767,x=0.53797481529119,y=0.9465659178026697 -a=eks,b=eks,i=7768,x=0.28912890940887614,y=0.7442458122620677 -a=wye,b=hat,i=7769,x=0.3705583652673885,y=0.059144918778647027 -a=pan,b=zee,i=7770,x=0.6956017564216889,y=0.66737949839894 -a=hat,b=eks,i=7771,x=0.756025188553685,y=0.8094953852781318 -a=pan,b=pan,i=7772,x=0.6990222040473527,y=0.033151103195916964 -a=hat,b=wye,i=7773,x=0.978940590729752,y=0.12080187423149347 -a=pan,b=eks,i=7774,x=0.8611049069366612,y=0.7289618171406003 -a=hat,b=pan,i=7775,x=0.24037840559946289,y=0.5476859366235767 -a=hat,b=hat,i=7776,x=0.8353731209463556,y=0.766113750196805 -a=wye,b=pan,i=7777,x=0.05858955413860256,y=0.12058424529655198 -a=zee,b=zee,i=7778,x=0.7416290206514613,y=0.3921085843199572 -a=wye,b=hat,i=7779,x=0.6525057028901559,y=0.827506650684489 -a=hat,b=hat,i=7780,x=0.35967618349426034,y=0.6155205527426165 -a=zee,b=wye,i=7781,x=0.8785183426416252,y=0.5929085468141393 -a=eks,b=pan,i=7782,x=0.9147117130322603,y=0.2625104340138019 -a=hat,b=pan,i=7783,x=0.2970040422341498,y=0.3987945132487777 -a=eks,b=pan,i=7784,x=0.5773221928392703,y=0.984120457296803 -a=eks,b=eks,i=7785,x=0.7533984992681583,y=0.34117949445154283 -a=pan,b=wye,i=7786,x=0.4922908537138324,y=0.8016564975759202 -a=hat,b=pan,i=7787,x=0.9606695287435937,y=0.2724371377986182 -a=zee,b=zee,i=7788,x=0.39665748675823,y=0.7990204115613213 -a=hat,b=hat,i=7789,x=0.9011093799553621,y=0.233507874232196 -a=hat,b=zee,i=7790,x=0.0071897888391820874,y=0.9914209553595086 -a=eks,b=eks,i=7791,x=0.41888693176987457,y=0.12945875791772954 -a=eks,b=pan,i=7792,x=0.1663832456913965,y=0.7815381913771416 -a=hat,b=zee,i=7793,x=0.958394958736606,y=0.8162724775424932 -a=pan,b=pan,i=7794,x=0.6756648486521578,y=0.3164832583304539 -a=pan,b=eks,i=7795,x=0.5007434672508728,y=0.45116398803311886 -a=wye,b=wye,i=7796,x=0.7618404269252146,y=0.7082734662093254 -a=hat,b=eks,i=7797,x=0.3339037394632195,y=0.33041712223471265 -a=pan,b=eks,i=7798,x=0.8964629088574175,y=0.6314628948974991 -a=pan,b=wye,i=7799,x=0.22115218679677484,y=0.8945303177931078 -a=zee,b=wye,i=7800,x=0.7914989655477432,y=0.43386605796501754 -a=eks,b=wye,i=7801,x=0.2768061453774291,y=0.11197920863328137 -a=zee,b=pan,i=7802,x=0.8246321893741126,y=0.9437960471953348 -a=zee,b=pan,i=7803,x=0.14679410267991433,y=0.7951490909241772 -a=eks,b=zee,i=7804,x=0.2527677515169743,y=0.6402837194288739 -a=hat,b=zee,i=7805,x=0.7220810582203347,y=0.7321859764651767 -a=hat,b=wye,i=7806,x=0.8114485139288578,y=0.10936244859497501 -a=zee,b=eks,i=7807,x=0.2431299964406336,y=0.6806744199778801 -a=hat,b=hat,i=7808,x=0.8890059022302841,y=0.22235264592897086 -a=wye,b=wye,i=7809,x=0.00751279921360315,y=0.10191418158652688 -a=wye,b=pan,i=7810,x=0.22896336477318813,y=0.3855317875005415 -a=pan,b=hat,i=7811,x=0.2803772001943151,y=0.06126665020709965 -a=pan,b=wye,i=7812,x=0.6626056412742908,y=0.8119248457418577 -a=zee,b=wye,i=7813,x=0.2839449326479042,y=0.21823946066739763 -a=hat,b=zee,i=7814,x=0.9824109871068729,y=0.24702350802138673 -a=wye,b=pan,i=7815,x=0.29912422376234227,y=0.031086896342097492 -a=wye,b=hat,i=7816,x=0.9864077710445651,y=0.7857310073202174 -a=zee,b=zee,i=7817,x=0.8037520801675582,y=0.23521748865500658 -a=zee,b=zee,i=7818,x=0.8547716274640922,y=0.19464566963124352 -a=wye,b=wye,i=7819,x=0.48778425728806885,y=0.5848857294076643 -a=zee,b=pan,i=7820,x=0.6449176000624874,y=0.6911176673897844 -a=zee,b=zee,i=7821,x=0.6652689102876012,y=0.8739835083180177 -a=zee,b=eks,i=7822,x=0.6987205194846695,y=0.5636198949945938 -a=pan,b=hat,i=7823,x=0.010016579560818473,y=0.8874400130011928 -a=zee,b=eks,i=7824,x=0.819077078113403,y=0.1908070440081936 -a=pan,b=hat,i=7825,x=0.1352980142489283,y=0.6116246247477668 -a=hat,b=zee,i=7826,x=0.45007045338969864,y=0.8838605924784972 -a=zee,b=zee,i=7827,x=0.5476130433221185,y=0.5402862105818173 -a=zee,b=hat,i=7828,x=0.9857371922518141,y=0.9407026776406513 -a=eks,b=eks,i=7829,x=0.6388976780469364,y=0.1723731781397092 -a=zee,b=zee,i=7830,x=0.00819682639104835,y=0.4240387399947815 -a=pan,b=eks,i=7831,x=0.7227922598778895,y=0.8810129413735137 -a=wye,b=eks,i=7832,x=0.44768287987315436,y=0.06097808844991881 -a=hat,b=zee,i=7833,x=0.38094799324344375,y=0.842105346910846 -a=hat,b=hat,i=7834,x=0.7048613327865254,y=0.1492452682364549 -a=pan,b=eks,i=7835,x=0.7503216413048331,y=0.22610681402742594 -a=wye,b=hat,i=7836,x=0.18033444340025684,y=0.5396596125945982 -a=zee,b=hat,i=7837,x=0.7596610024208577,y=0.13811213680042633 -a=zee,b=pan,i=7838,x=0.46989555714248354,y=0.5731236845422526 -a=eks,b=zee,i=7839,x=0.2378040998190729,y=0.8687389259046864 -a=eks,b=wye,i=7840,x=0.15083338360252196,y=0.4677170605064366 -a=eks,b=wye,i=7841,x=0.2390993050590302,y=0.4022350252704088 -a=wye,b=wye,i=7842,x=0.03868013977565554,y=0.36213469293451195 -a=hat,b=eks,i=7843,x=0.2326952229877629,y=0.07810622939834866 -a=eks,b=eks,i=7844,x=0.3464583830104778,y=0.24608203542200424 -a=zee,b=hat,i=7845,x=0.6258279281533773,y=0.519301606092353 -a=hat,b=hat,i=7846,x=0.7328028225195036,y=0.11369450919398072 -a=hat,b=wye,i=7847,x=0.5913920636618824,y=0.869313774493801 -a=pan,b=hat,i=7848,x=0.9911771508550357,y=0.4789157458695267 -a=zee,b=wye,i=7849,x=0.6838794391771024,y=0.7901996933834754 -a=zee,b=eks,i=7850,x=0.38221395674318315,y=0.4647687529098594 -a=pan,b=hat,i=7851,x=0.7174129864414264,y=0.6977644513609003 -a=wye,b=wye,i=7852,x=0.9237362599816926,y=0.8751578434058209 -a=eks,b=eks,i=7853,x=0.4518707326185428,y=0.6617696626513239 -a=hat,b=wye,i=7854,x=0.06764752166213406,y=0.2082339516770152 -a=zee,b=wye,i=7855,x=0.28326864641471117,y=0.7936013908655049 -a=wye,b=hat,i=7856,x=0.7543839227963806,y=0.7708302534568163 -a=pan,b=hat,i=7857,x=0.4184705412704066,y=0.40669972332461846 -a=wye,b=zee,i=7858,x=0.9223976078879647,y=0.5779020996216999 -a=zee,b=zee,i=7859,x=0.10768947209184598,y=0.3365441234115185 -a=hat,b=eks,i=7860,x=0.7452070101622097,y=0.17526957060226422 -a=zee,b=eks,i=7861,x=0.5097508654113272,y=0.21814047343538046 -a=hat,b=eks,i=7862,x=0.27105430205532133,y=0.7490102016231208 -a=hat,b=pan,i=7863,x=0.06726201643453855,y=0.35933180644142315 -a=pan,b=wye,i=7864,x=0.3103009370970985,y=0.8407327110613196 -a=eks,b=wye,i=7865,x=0.32234768937000546,y=0.02406247620613 -a=wye,b=hat,i=7866,x=0.6773974203264422,y=0.2145912727473317 -a=zee,b=hat,i=7867,x=0.7690926832290548,y=0.9300355345607946 -a=wye,b=hat,i=7868,x=0.9396022178120012,y=0.4338845485635848 -a=zee,b=hat,i=7869,x=0.9505475018937193,y=0.14630084195031035 -a=eks,b=pan,i=7870,x=0.31855769422540314,y=0.8895458854037835 -a=hat,b=eks,i=7871,x=0.5921983075931928,y=0.4229347949955703 -a=wye,b=wye,i=7872,x=0.5263396869727451,y=0.6135988456193723 -a=hat,b=hat,i=7873,x=0.8940280465724006,y=0.23131247213081552 -a=hat,b=wye,i=7874,x=0.09904413256911793,y=0.8854746496958716 -a=wye,b=wye,i=7875,x=0.5037904698265824,y=0.32995968281854504 -a=hat,b=eks,i=7876,x=0.5344512004977263,y=0.11225525657163704 -a=pan,b=wye,i=7877,x=0.9050244381025329,y=0.4700479323860336 -a=zee,b=wye,i=7878,x=0.5290284670419653,y=0.35507751760627737 -a=wye,b=pan,i=7879,x=0.3148924229301867,y=0.1872406546524351 -a=eks,b=wye,i=7880,x=0.03633390115689916,y=0.16903851260082725 -a=hat,b=pan,i=7881,x=0.8711990119730865,y=0.4293663097385956 -a=eks,b=eks,i=7882,x=0.8471544066093775,y=0.40223962006438685 -a=hat,b=wye,i=7883,x=0.24262458856564295,y=0.01835360943862996 -a=pan,b=eks,i=7884,x=0.6922724138336023,y=0.012397141051616933 -a=zee,b=hat,i=7885,x=0.3025111314280283,y=0.9069884084952201 -a=hat,b=zee,i=7886,x=0.794970017782755,y=0.6062492046952036 -a=wye,b=zee,i=7887,x=0.8726346787308475,y=0.3029668754826792 -a=hat,b=hat,i=7888,x=0.20756986827268153,y=0.6363026946616206 -a=zee,b=wye,i=7889,x=0.23271731636441206,y=0.548253711367059 -a=eks,b=eks,i=7890,x=0.5715742308742378,y=0.8192093346935977 -a=wye,b=eks,i=7891,x=0.6699323585736414,y=0.1435311317094633 -a=hat,b=eks,i=7892,x=0.42467396461692,y=0.7347899103390217 -a=hat,b=pan,i=7893,x=0.7439486973392055,y=0.17955726400681704 -a=eks,b=wye,i=7894,x=0.5608680829128325,y=0.9585598084195104 -a=wye,b=wye,i=7895,x=0.44727463294971703,y=0.7872043941311472 -a=eks,b=pan,i=7896,x=0.9913466570743009,y=0.6302035261111584 -a=hat,b=wye,i=7897,x=0.5421196020388044,y=0.8624723374301944 -a=eks,b=eks,i=7898,x=0.37298028446417475,y=0.8728404913054509 -a=eks,b=zee,i=7899,x=0.8332042684792176,y=0.07345290916251856 -a=zee,b=wye,i=7900,x=0.8094076175677304,y=0.14978155572080065 -a=wye,b=hat,i=7901,x=0.9355960796171349,y=0.18626647870004664 -a=zee,b=wye,i=7902,x=0.2637291967134705,y=0.5442660467355056 -a=zee,b=eks,i=7903,x=0.12158777831041234,y=0.9890244717689465 -a=eks,b=hat,i=7904,x=0.2705482127515829,y=0.01971442860313377 -a=zee,b=eks,i=7905,x=0.44670524308794834,y=0.5845415190296815 -a=zee,b=eks,i=7906,x=0.691867757886342,y=0.2848167176859655 -a=pan,b=zee,i=7907,x=0.33908058571920063,y=0.5335427401965982 -a=zee,b=hat,i=7908,x=0.3610060660850839,y=0.24288129482927623 -a=zee,b=wye,i=7909,x=0.9120826455472996,y=0.44475380738945147 -a=zee,b=zee,i=7910,x=0.567164847298404,y=0.399455541894602 -a=wye,b=eks,i=7911,x=0.691697756697526,y=0.877518858711515 -a=zee,b=pan,i=7912,x=0.31982431730922556,y=0.7058492177082524 -a=pan,b=zee,i=7913,x=0.7134779956631648,y=0.03877802504200312 -a=wye,b=hat,i=7914,x=0.4366613963535759,y=0.8447738266648783 -a=zee,b=pan,i=7915,x=0.6579171209676669,y=0.6482697150135545 -a=wye,b=eks,i=7916,x=0.2877295918648384,y=0.211059870769302 -a=pan,b=eks,i=7917,x=0.5275793853162087,y=0.8748428200227294 -a=eks,b=eks,i=7918,x=0.12458230242468837,y=0.24069602443528393 -a=zee,b=zee,i=7919,x=0.5222051770223615,y=0.1878235700153812 -a=zee,b=zee,i=7920,x=0.8985365345616582,y=0.6020907480091875 -a=hat,b=wye,i=7921,x=0.09671063835019511,y=0.4703227983629693 -a=hat,b=zee,i=7922,x=0.8879147106591082,y=0.19697818805308442 -a=eks,b=zee,i=7923,x=0.38870229665971356,y=0.5985607302963999 -a=eks,b=pan,i=7924,x=0.3713298410561683,y=0.296460093460874 -a=zee,b=eks,i=7925,x=0.5420534501009495,y=0.05866294852898357 -a=zee,b=eks,i=7926,x=0.47492169105504933,y=0.8587163655741379 -a=pan,b=zee,i=7927,x=0.7972209851115417,y=0.1287619061325339 -a=wye,b=pan,i=7928,x=0.4065863120979525,y=0.7016224626335005 -a=zee,b=zee,i=7929,x=0.25040361330370065,y=0.3462781056544345 -a=wye,b=eks,i=7930,x=0.5998999740666952,y=0.940489760974054 -a=eks,b=hat,i=7931,x=0.7426863429203551,y=0.5997919568409129 -a=eks,b=wye,i=7932,x=0.7539925055624301,y=0.9588704021223314 -a=eks,b=eks,i=7933,x=0.8496577484419044,y=0.8749858904217946 -a=zee,b=hat,i=7934,x=0.39625425573088036,y=0.7516162692981885 -a=zee,b=eks,i=7935,x=0.07413718973123662,y=0.9540488375627403 -a=hat,b=eks,i=7936,x=0.43057462793549084,y=0.83261804348024 -a=pan,b=pan,i=7937,x=0.7944834203394888,y=0.4910876849942255 -a=pan,b=hat,i=7938,x=0.7835615902262538,y=0.030503750805517593 -a=wye,b=zee,i=7939,x=0.20769387630166103,y=0.9857694928121757 -a=eks,b=pan,i=7940,x=0.18503477530273849,y=0.2613475073722671 -a=wye,b=hat,i=7941,x=0.4205902145088837,y=0.8454165597750689 -a=pan,b=wye,i=7942,x=0.14289054655956812,y=0.5590237538729541 -a=zee,b=hat,i=7943,x=0.007346899370313853,y=0.9435542424367808 -a=wye,b=pan,i=7944,x=0.6010756954347072,y=0.602663902557592 -a=wye,b=pan,i=7945,x=0.204176839139523,y=0.9444532348782411 -a=zee,b=pan,i=7946,x=0.22356842063761684,y=0.6173414017420112 -a=zee,b=eks,i=7947,x=0.025642761574512285,y=0.18768382301071385 -a=eks,b=wye,i=7948,x=0.6258015401993495,y=0.4655464102747875 -a=pan,b=zee,i=7949,x=0.2888268615751203,y=0.5754370603975112 -a=wye,b=pan,i=7950,x=0.13192831258970839,y=0.09974934678356573 -a=eks,b=pan,i=7951,x=0.573135783011619,y=0.5173979516422308 -a=wye,b=pan,i=7952,x=0.9672001578855394,y=0.5999113434317762 -a=hat,b=wye,i=7953,x=0.5332777170304573,y=0.8240541851977825 -a=pan,b=wye,i=7954,x=0.1279461268867662,y=0.3465018420126411 -a=pan,b=zee,i=7955,x=0.26370302153935266,y=0.709886854064376 -a=wye,b=wye,i=7956,x=0.08185493324300519,y=0.8430295223333161 -a=eks,b=eks,i=7957,x=0.990948668400743,y=0.1741418790774628 -a=wye,b=zee,i=7958,x=0.7645204491814582,y=0.853303854748976 -a=zee,b=pan,i=7959,x=0.15605455866939177,y=0.46323289916297505 -a=hat,b=zee,i=7960,x=0.16017925473869754,y=0.4529356695213568 -a=eks,b=pan,i=7961,x=0.6125869749454478,y=0.370095068843984 -a=wye,b=wye,i=7962,x=0.18404446909382244,y=0.26269521842771504 -a=eks,b=wye,i=7963,x=0.5558763888070763,y=0.185510369521809 -a=pan,b=pan,i=7964,x=0.282047967900814,y=0.22212917426772594 -a=eks,b=wye,i=7965,x=0.05872308143086857,y=0.38482704713824056 -a=pan,b=hat,i=7966,x=0.2501049463368379,y=0.39344676758297514 -a=wye,b=hat,i=7967,x=0.8987874844489919,y=0.49750601381227266 -a=pan,b=zee,i=7968,x=0.7089490867118664,y=0.45255811448776784 -a=eks,b=wye,i=7969,x=0.6608518009893678,y=0.22790991951466288 -a=eks,b=wye,i=7970,x=0.7564471093195367,y=0.588547367327297 -a=eks,b=wye,i=7971,x=0.3177159468656713,y=0.6507595896357143 -a=wye,b=zee,i=7972,x=0.6981615941048016,y=0.3554268056065458 -a=wye,b=pan,i=7973,x=0.018524216435056196,y=0.08446663540594712 -a=hat,b=zee,i=7974,x=0.24963209679900955,y=0.016049846424579184 -a=hat,b=wye,i=7975,x=0.048154096212748465,y=0.23172149127883657 -a=eks,b=pan,i=7976,x=0.406288377613479,y=0.6746918193025293 -a=wye,b=hat,i=7977,x=0.5283629678807258,y=0.8918455631655288 -a=pan,b=wye,i=7978,x=0.5186376529712587,y=0.8811576068202212 -a=hat,b=eks,i=7979,x=0.1757549377495632,y=0.7507650545931341 -a=zee,b=zee,i=7980,x=0.10892391322425843,y=0.050571608567332116 -a=hat,b=eks,i=7981,x=0.5740714306503298,y=0.34091415824926563 -a=hat,b=hat,i=7982,x=0.15020550177808045,y=0.9076080995933096 -a=pan,b=hat,i=7983,x=0.5450883311922072,y=0.44507084646454187 -a=eks,b=pan,i=7984,x=0.49794222352752093,y=0.19964088700431204 -a=eks,b=eks,i=7985,x=0.25908328241507117,y=0.41719268312114377 -a=wye,b=zee,i=7986,x=0.2712612087411137,y=0.4093087980161978 -a=eks,b=eks,i=7987,x=0.6808132597759162,y=0.10935069218341964 -a=wye,b=eks,i=7988,x=0.8262618950608377,y=0.09248423605386846 -a=zee,b=eks,i=7989,x=0.5671275966876752,y=0.6710467056302961 -a=zee,b=hat,i=7990,x=0.12246709018315027,y=0.9902823724804396 -a=hat,b=eks,i=7991,x=0.9093001304035243,y=0.6454294428509858 -a=pan,b=hat,i=7992,x=0.28055455032097176,y=0.7076435705928082 -a=zee,b=pan,i=7993,x=0.840708068980671,y=0.7676444206837281 -a=eks,b=pan,i=7994,x=0.13873019879879267,y=0.3541885725000481 -a=wye,b=wye,i=7995,x=0.5556276037973694,y=0.7103742139489323 -a=wye,b=hat,i=7996,x=0.7897718226462853,y=0.7866250828364114 -a=pan,b=zee,i=7997,x=0.42328017164614196,y=0.8968239987659891 -a=zee,b=pan,i=7998,x=0.6173947671381171,y=0.9099504940374747 -a=pan,b=eks,i=7999,x=0.1904021794562485,y=0.2442456072044632 -a=eks,b=hat,i=8000,x=0.494989535411282,y=0.9858490482421876 -a=pan,b=zee,i=8001,x=0.21740880422197573,y=0.009823495326658604 -a=wye,b=zee,i=8002,x=0.8483246353215173,y=0.748697867257607 -a=eks,b=wye,i=8003,x=0.07232519497816503,y=0.01460395395166092 -a=hat,b=hat,i=8004,x=0.38823106724151646,y=0.7637253093388771 -a=pan,b=eks,i=8005,x=0.8569860709125309,y=0.12024935239203738 -a=zee,b=zee,i=8006,x=0.4339798390608952,y=0.752225427449917 -a=hat,b=eks,i=8007,x=0.37719631868649617,y=0.39591507134214254 -a=hat,b=zee,i=8008,x=0.2500892579626076,y=0.6235655047728978 -a=zee,b=eks,i=8009,x=0.21398276966281848,y=0.6412152131738255 -a=hat,b=eks,i=8010,x=0.3187905796970636,y=0.3173506685081655 -a=pan,b=pan,i=8011,x=0.5376262182105622,y=0.4824151159482998 -a=zee,b=hat,i=8012,x=0.9967455860256934,y=0.846350626099811 -a=eks,b=zee,i=8013,x=0.6750010866052097,y=0.380258473116171 -a=pan,b=hat,i=8014,x=0.8682985870091493,y=0.13867025721075266 -a=zee,b=wye,i=8015,x=0.876659392160873,y=0.005960162771398214 -a=pan,b=wye,i=8016,x=0.17217503903346676,y=0.6363974355768541 -a=hat,b=zee,i=8017,x=0.8289275824108141,y=0.5824677757054623 -a=zee,b=hat,i=8018,x=0.47908711384726377,y=0.2078467393092358 -a=pan,b=hat,i=8019,x=0.03774190681630729,y=0.37562081779173295 -a=pan,b=pan,i=8020,x=0.25202925423609734,y=0.8758710479186967 -a=hat,b=zee,i=8021,x=0.6283764347998099,y=0.7038955747755151 -a=wye,b=eks,i=8022,x=0.9822305246922711,y=0.9025462559345021 -a=pan,b=hat,i=8023,x=0.17809600073620713,y=0.7136989224391156 -a=pan,b=hat,i=8024,x=0.7871049381240648,y=0.9157631088161338 -a=hat,b=zee,i=8025,x=0.8464024197077388,y=0.7505262168915832 -a=hat,b=hat,i=8026,x=0.27076546874115703,y=0.717232478948042 -a=eks,b=wye,i=8027,x=0.47677652985856545,y=0.742388612767014 -a=pan,b=wye,i=8028,x=0.03498607510109997,y=0.19549287051995312 -a=hat,b=zee,i=8029,x=0.8902222199776184,y=0.22597809584182216 -a=wye,b=pan,i=8030,x=0.8534063530727802,y=0.5216400536886638 -a=wye,b=pan,i=8031,x=0.399100924785613,y=0.8096553851806476 -a=zee,b=hat,i=8032,x=0.3470913703916284,y=0.4932013734514763 -a=hat,b=hat,i=8033,x=0.10816322348365748,y=0.6629283579053702 -a=zee,b=eks,i=8034,x=0.7893326165734248,y=0.0055174814334882916 -a=wye,b=pan,i=8035,x=0.17190090759613674,y=0.02144281885832955 -a=hat,b=eks,i=8036,x=0.4487638977131928,y=0.9316999919622478 -a=zee,b=zee,i=8037,x=0.7060201401255403,y=0.9669662969793548 -a=zee,b=wye,i=8038,x=0.1386368820895454,y=0.5056689278962295 -a=pan,b=eks,i=8039,x=0.09184144959885043,y=0.6340163134818283 -a=pan,b=zee,i=8040,x=0.7171534760409121,y=0.7328586414702059 -a=pan,b=eks,i=8041,x=0.3839508814613577,y=0.30631865487711984 -a=zee,b=wye,i=8042,x=0.3764616704796617,y=0.0013477620094425324 -a=hat,b=eks,i=8043,x=0.3534996104529119,y=0.7450885137370724 -a=hat,b=wye,i=8044,x=0.10170616112045472,y=0.5317124791229391 -a=hat,b=pan,i=8045,x=0.7300195962365097,y=0.3308540333941833 -a=eks,b=wye,i=8046,x=0.6051188687817523,y=0.9131734207686757 -a=eks,b=zee,i=8047,x=0.5374608283378429,y=0.31273904942423725 -a=zee,b=wye,i=8048,x=0.05640085976332132,y=0.0700003098785944 -a=wye,b=eks,i=8049,x=0.5114158496176794,y=0.12846145668110132 -a=eks,b=hat,i=8050,x=0.9874222186130187,y=0.8593466056433501 -a=eks,b=eks,i=8051,x=0.9761481708304064,y=0.15123613115180856 -a=pan,b=pan,i=8052,x=0.6493110423838093,y=0.5347940909170277 -a=pan,b=pan,i=8053,x=0.9130131367137716,y=0.20063251495257384 -a=wye,b=wye,i=8054,x=0.29645291860851164,y=0.2862439675971603 -a=wye,b=hat,i=8055,x=0.9283998083818392,y=0.9186794272646708 -a=zee,b=eks,i=8056,x=0.21742326077552165,y=0.21215545457837148 -a=hat,b=pan,i=8057,x=0.805271595399746,y=0.46020440997594847 -a=pan,b=zee,i=8058,x=0.2152394578214053,y=0.6196385518512275 -a=eks,b=pan,i=8059,x=0.39413913874172746,y=0.8509631752611558 -a=hat,b=wye,i=8060,x=0.6704371607062275,y=0.002101362140308649 -a=wye,b=eks,i=8061,x=0.38279862612807036,y=0.5895252762171836 -a=wye,b=hat,i=8062,x=0.9226631815117158,y=0.9902149324132298 -a=pan,b=eks,i=8063,x=0.4162908252496399,y=0.18879569170028876 -a=wye,b=eks,i=8064,x=0.520433239579577,y=0.4738497455813805 -a=wye,b=wye,i=8065,x=0.5952586854249843,y=0.050797298251500145 -a=eks,b=pan,i=8066,x=0.7550938758657687,y=0.03587749109184113 -a=pan,b=hat,i=8067,x=0.5198389196832879,y=0.2056652183357338 -a=zee,b=zee,i=8068,x=0.1526773413967627,y=0.492096177763767 -a=hat,b=zee,i=8069,x=0.6263854342684977,y=0.4917794632623357 -a=wye,b=wye,i=8070,x=0.19425905980457325,y=0.5136004485194701 -a=pan,b=eks,i=8071,x=0.15980232628622404,y=0.7963848087282333 -a=pan,b=hat,i=8072,x=0.8729803431362889,y=0.23389287840183937 -a=eks,b=pan,i=8073,x=0.8414137403991204,y=0.013708060374022835 -a=pan,b=pan,i=8074,x=0.47234873863850657,y=0.4467664305469584 -a=eks,b=zee,i=8075,x=0.8643916283489397,y=0.8421716629916459 -a=pan,b=wye,i=8076,x=0.36180082799458324,y=0.2681111063038798 -a=wye,b=zee,i=8077,x=0.291110312999184,y=0.3904237799736081 -a=pan,b=wye,i=8078,x=0.2285091327975376,y=0.08630172750559728 -a=hat,b=wye,i=8079,x=0.04336915531209018,y=0.7750227412335468 -a=zee,b=pan,i=8080,x=0.4953944041935031,y=0.13051323550656468 -a=eks,b=wye,i=8081,x=0.9893684193709726,y=0.009655042259111513 -a=wye,b=eks,i=8082,x=0.5505998662939379,y=0.4793977598693524 -a=eks,b=zee,i=8083,x=0.976642999884874,y=0.41575660829151373 -a=eks,b=hat,i=8084,x=0.6415360825871783,y=0.9093765294473956 -a=eks,b=wye,i=8085,x=0.19986686946961607,y=0.6001471405049741 -a=wye,b=pan,i=8086,x=0.7089561346111681,y=0.9346147842120147 -a=hat,b=wye,i=8087,x=0.6721158897399355,y=0.8662012495181518 -a=zee,b=pan,i=8088,x=0.2999863643844106,y=0.9736282819386414 -a=eks,b=hat,i=8089,x=0.780371764692202,y=0.13534345378955825 -a=hat,b=zee,i=8090,x=0.18588301944750896,y=0.9295096790100238 -a=wye,b=wye,i=8091,x=0.3136153634214588,y=0.9518615611124033 -a=wye,b=zee,i=8092,x=0.3727994612209693,y=0.12052581566020104 -a=eks,b=hat,i=8093,x=0.9315252187513533,y=0.561169216332415 -a=zee,b=pan,i=8094,x=0.6896842396279547,y=0.2659526826052142 -a=zee,b=eks,i=8095,x=0.013899464399908745,y=0.8010549230884639 -a=hat,b=wye,i=8096,x=0.9312335027031023,y=0.22775044082337215 -a=pan,b=pan,i=8097,x=0.2875217953665159,y=0.7352692976694222 -a=pan,b=eks,i=8098,x=0.02310988069794695,y=0.04436912792860748 -a=wye,b=eks,i=8099,x=0.9922978662257267,y=0.1009226522265646 -a=pan,b=wye,i=8100,x=0.6977704958793126,y=0.7057512041273386 -a=hat,b=zee,i=8101,x=0.8813156757676321,y=0.538439525268842 -a=pan,b=eks,i=8102,x=0.8253811424731291,y=0.8958384638924397 -a=wye,b=hat,i=8103,x=0.6382749094882392,y=0.7690601393055252 -a=zee,b=zee,i=8104,x=0.19443211144688854,y=0.39629790432524836 -a=zee,b=zee,i=8105,x=0.028359518501674397,y=0.31630049190233644 -a=eks,b=zee,i=8106,x=0.04927046404341662,y=0.8091340642622323 -a=pan,b=wye,i=8107,x=0.4038787839956157,y=0.8184040881437044 -a=eks,b=eks,i=8108,x=0.8869014997757403,y=0.6363003729185641 -a=eks,b=wye,i=8109,x=0.9098383165363556,y=0.06949042541302553 -a=eks,b=eks,i=8110,x=0.24771678765070493,y=0.9300163398042232 -a=eks,b=eks,i=8111,x=0.3084468757714339,y=0.9610528375033978 -a=eks,b=eks,i=8112,x=0.31000078368875394,y=0.36138146669138416 -a=wye,b=pan,i=8113,x=0.8110116541728041,y=0.36626731504545484 -a=wye,b=hat,i=8114,x=0.8838936751784368,y=0.16448491200443816 -a=eks,b=hat,i=8115,x=0.2092866675789835,y=0.6207159056705113 -a=wye,b=wye,i=8116,x=0.5430690309464962,y=0.3836390944257766 -a=hat,b=wye,i=8117,x=0.14958982301791146,y=0.8124903759523353 -a=eks,b=hat,i=8118,x=0.8557041552120278,y=0.5440118132291639 -a=hat,b=pan,i=8119,x=0.21486759901824792,y=0.3923954170049483 -a=pan,b=zee,i=8120,x=0.6592841558501972,y=0.8794810617469089 -a=eks,b=eks,i=8121,x=0.9178846401562378,y=0.7797206181214477 -a=wye,b=eks,i=8122,x=0.6079549297413829,y=0.16695883184694493 -a=eks,b=hat,i=8123,x=0.8786712780916176,y=0.5986968292379161 -a=eks,b=hat,i=8124,x=0.6050565349569751,y=0.17711761175975083 -a=zee,b=hat,i=8125,x=0.7071191860103717,y=0.5065338033789499 -a=wye,b=pan,i=8126,x=0.9928274286457106,y=0.611287542007201 -a=pan,b=pan,i=8127,x=0.7855300117843916,y=0.919185243159261 -a=wye,b=wye,i=8128,x=0.5451094693684497,y=0.6739488974426652 -a=eks,b=eks,i=8129,x=0.4483894040870827,y=0.04899785138545132 -a=wye,b=wye,i=8130,x=0.6304140421100901,y=0.8822571743603556 -a=pan,b=wye,i=8131,x=0.722244198415005,y=0.4334139656985445 -a=zee,b=eks,i=8132,x=0.9155857784701777,y=0.3496924391322812 -a=wye,b=eks,i=8133,x=0.968745042493151,y=0.20226923971903277 -a=pan,b=hat,i=8134,x=0.8128492182669791,y=0.392568386730878 -a=pan,b=wye,i=8135,x=0.45117859842393093,y=0.2608070414195329 -a=zee,b=zee,i=8136,x=0.6400905852932521,y=0.9035481906697407 -a=eks,b=hat,i=8137,x=0.039487665967159025,y=0.2642755984465909 -a=hat,b=hat,i=8138,x=0.9944665404962163,y=0.03601538456153819 -a=eks,b=eks,i=8139,x=0.5696036037683665,y=0.5215775669287221 -a=pan,b=pan,i=8140,x=0.24967169231618214,y=0.6896632292080579 -a=hat,b=hat,i=8141,x=0.06250971300811059,y=0.6284789386523464 -a=zee,b=wye,i=8142,x=0.6462280039869936,y=0.989075899835102 -a=pan,b=zee,i=8143,x=0.03802909555431522,y=0.0805330261761773 -a=pan,b=wye,i=8144,x=0.7168864018283236,y=0.9743458426619153 -a=eks,b=eks,i=8145,x=0.45913426278863745,y=0.7259328042437585 -a=hat,b=wye,i=8146,x=0.6466004179249605,y=0.6476130238612243 -a=wye,b=pan,i=8147,x=0.7564890511190168,y=0.3370280131510147 -a=hat,b=pan,i=8148,x=0.8171601926388993,y=0.12709291977727588 -a=eks,b=zee,i=8149,x=0.9838548523184443,y=0.6613857827470255 -a=eks,b=hat,i=8150,x=0.42800158894759266,y=0.13739447644695857 -a=wye,b=wye,i=8151,x=0.43651846968412356,y=0.716297573022078 -a=zee,b=eks,i=8152,x=0.6420074465872548,y=0.5270375969424234 -a=wye,b=hat,i=8153,x=0.07009589864190946,y=0.7822728799879559 -a=eks,b=wye,i=8154,x=0.00955231084174002,y=0.7545442970218491 -a=hat,b=pan,i=8155,x=0.6975376085727898,y=0.6899571370767156 -a=zee,b=zee,i=8156,x=0.6395251098634284,y=0.5644973057197734 -a=zee,b=pan,i=8157,x=0.39296205632043724,y=0.5511832594601693 -a=eks,b=wye,i=8158,x=0.8469059054134236,y=0.9101861362422637 -a=hat,b=zee,i=8159,x=0.11438608585479293,y=0.6137417386563446 -a=wye,b=pan,i=8160,x=0.6081825274202294,y=0.14769534194863843 -a=zee,b=wye,i=8161,x=0.7550762971732712,y=0.8530495051917243 -a=zee,b=hat,i=8162,x=0.5735901437760568,y=0.20486220503074404 -a=zee,b=hat,i=8163,x=0.13773260453775793,y=0.9660659918112889 -a=zee,b=eks,i=8164,x=0.3607826318282279,y=0.1255618535732741 -a=pan,b=wye,i=8165,x=0.7460078629419659,y=0.20509518109673885 -a=eks,b=wye,i=8166,x=0.2703585359160412,y=0.7519449563416004 -a=eks,b=wye,i=8167,x=0.6912089808005739,y=0.351675852657667 -a=eks,b=eks,i=8168,x=0.8121986201818601,y=0.4587202609317872 -a=eks,b=pan,i=8169,x=0.7194305802045211,y=0.9549210116328868 -a=pan,b=eks,i=8170,x=0.6998846923585399,y=0.49886417024119634 -a=wye,b=pan,i=8171,x=0.7170199430209871,y=0.4596547273774765 -a=zee,b=wye,i=8172,x=0.2188044470516215,y=0.9409262537024545 -a=pan,b=eks,i=8173,x=0.7415922617357986,y=0.0627371763205734 -a=pan,b=hat,i=8174,x=0.2520020123957777,y=0.5935359054834856 -a=pan,b=zee,i=8175,x=0.5756118666838461,y=0.6166940778091887 -a=hat,b=wye,i=8176,x=0.8316169809953903,y=0.7727468837518336 -a=wye,b=wye,i=8177,x=0.45262062218854693,y=0.6417926617217392 -a=zee,b=hat,i=8178,x=0.3414767323625455,y=0.8276355992219739 -a=hat,b=wye,i=8179,x=0.6913338216581719,y=0.8634446415532928 -a=zee,b=pan,i=8180,x=0.7018819862110542,y=0.30230351547636003 -a=hat,b=hat,i=8181,x=0.23955047854083944,y=0.27040254626774474 -a=eks,b=wye,i=8182,x=0.2922405169121165,y=0.6645061373641254 -a=zee,b=hat,i=8183,x=0.5126902650356464,y=0.8692712883907214 -a=wye,b=pan,i=8184,x=0.9824979545102979,y=0.011383619081017482 -a=eks,b=hat,i=8185,x=0.8449937251277326,y=0.6863834790266286 -a=wye,b=zee,i=8186,x=0.04497354678950516,y=0.5141925160548166 -a=hat,b=hat,i=8187,x=0.8262556263127695,y=0.21920924731404545 -a=zee,b=zee,i=8188,x=0.8188229466265301,y=0.7731986253520043 -a=zee,b=eks,i=8189,x=0.21859629681055648,y=0.04545680236762617 -a=wye,b=eks,i=8190,x=0.17387577778883723,y=0.3600963171444731 -a=zee,b=zee,i=8191,x=0.6027946184126483,y=0.7560104230688947 -a=wye,b=pan,i=8192,x=0.5268204744299162,y=0.7467950199333838 -a=pan,b=eks,i=8193,x=0.6279753535291541,y=0.1032502911892883 -a=eks,b=pan,i=8194,x=0.4677408184985905,y=0.6073881904140683 -a=zee,b=hat,i=8195,x=0.016890946717297295,y=0.9176976283367435 -a=eks,b=hat,i=8196,x=0.24986039875431232,y=0.6476803155115554 -a=pan,b=pan,i=8197,x=0.4524152227370508,y=0.2620560509511556 -a=pan,b=eks,i=8198,x=0.895911910015345,y=0.9918773365972562 -a=wye,b=hat,i=8199,x=0.7136636567819744,y=0.7470766277154778 -a=hat,b=pan,i=8200,x=0.4231374284492073,y=0.1546230087665409 -a=zee,b=zee,i=8201,x=0.7750292191321659,y=0.8295732493514495 -a=eks,b=wye,i=8202,x=0.36911480147216946,y=0.18354328249876783 -a=pan,b=zee,i=8203,x=0.11943983237768319,y=0.9064110889547424 -a=pan,b=eks,i=8204,x=0.6300000735055588,y=0.5097476114683049 -a=wye,b=zee,i=8205,x=0.6442554149020752,y=0.6779628314804215 -a=pan,b=zee,i=8206,x=0.7692427917331188,y=0.11292590381570122 -a=wye,b=pan,i=8207,x=0.39637091869319985,y=0.76304090412573 -a=pan,b=hat,i=8208,x=0.7495304237104456,y=0.7417705075817802 -a=wye,b=zee,i=8209,x=0.45586308498398453,y=0.9987194582307727 -a=hat,b=hat,i=8210,x=0.6476477827460192,y=0.15239181174134397 -a=hat,b=pan,i=8211,x=0.11189505956227741,y=0.4621617318098107 -a=zee,b=eks,i=8212,x=0.09903637464949222,y=0.11847710838278536 -a=zee,b=eks,i=8213,x=0.6131401826730208,y=0.5022261795262266 -a=pan,b=eks,i=8214,x=0.18560914156032815,y=0.5491754568832973 -a=hat,b=hat,i=8215,x=0.18871663617759393,y=0.7013352032606388 -a=zee,b=pan,i=8216,x=0.10912632587239346,y=0.23098909374573406 -a=eks,b=hat,i=8217,x=0.9215273193717863,y=0.14757043140565207 -a=eks,b=wye,i=8218,x=0.3534829912574341,y=0.5696087711664961 -a=hat,b=pan,i=8219,x=0.3322693803060234,y=0.0076976965775436 -a=hat,b=wye,i=8220,x=0.8522954785865527,y=0.0007129432355447163 -a=hat,b=hat,i=8221,x=0.046602995923670676,y=0.09042940585063108 -a=hat,b=pan,i=8222,x=0.0007290941902635684,y=0.9057125778564156 -a=zee,b=pan,i=8223,x=0.7575639565865209,y=0.29884828498056126 -a=eks,b=wye,i=8224,x=0.995186116661242,y=0.2471757939983208 -a=hat,b=zee,i=8225,x=0.3176890506590573,y=0.04443659691703017 -a=pan,b=pan,i=8226,x=0.46997531114555335,y=0.91414102033992 -a=pan,b=eks,i=8227,x=0.7045690818004235,y=0.016544250381158587 -a=pan,b=eks,i=8228,x=0.6859024128283686,y=0.43310740395134806 -a=wye,b=hat,i=8229,x=0.4802812953776502,y=0.28698445483944135 -a=zee,b=eks,i=8230,x=0.37256536791796446,y=0.22484134058612737 -a=hat,b=wye,i=8231,x=0.5993464309625437,y=0.09529154836393428 -a=hat,b=pan,i=8232,x=0.053356023845203326,y=0.20750162756833523 -a=pan,b=wye,i=8233,x=0.01730056600220997,y=0.4811950137685327 -a=wye,b=hat,i=8234,x=0.7002619408413644,y=0.29378327426642736 -a=hat,b=zee,i=8235,x=0.5760269820743364,y=0.9876933845887379 -a=pan,b=zee,i=8236,x=0.6939214180664733,y=0.01597187286439905 -a=pan,b=wye,i=8237,x=0.32216831192867235,y=0.4489268007125685 -a=zee,b=pan,i=8238,x=0.4974895037561218,y=0.6955723789507248 -a=zee,b=zee,i=8239,x=0.8722145698985853,y=0.5243287664361148 -a=hat,b=eks,i=8240,x=0.3119317638364195,y=0.03153083991370387 -a=hat,b=hat,i=8241,x=0.8231293488825948,y=0.44236728060318375 -a=pan,b=pan,i=8242,x=0.6284004646755453,y=0.5188512495739586 -a=eks,b=pan,i=8243,x=0.7790459369722915,y=0.38281709292600563 -a=zee,b=zee,i=8244,x=0.5648821749696828,y=0.8387452862417517 -a=zee,b=pan,i=8245,x=0.28860321455069415,y=0.5335162435192266 -a=pan,b=pan,i=8246,x=0.978767937767844,y=0.595121683896329 -a=pan,b=pan,i=8247,x=0.8877669245621814,y=0.993370582244656 -a=hat,b=pan,i=8248,x=0.3673861400753813,y=0.7147327203599682 -a=wye,b=wye,i=8249,x=0.12404890706154814,y=0.7443872152100742 -a=eks,b=zee,i=8250,x=0.5731463701870027,y=0.4981231530018835 -a=hat,b=wye,i=8251,x=0.2058939811865338,y=0.8011049893656047 -a=zee,b=pan,i=8252,x=0.5300215804178179,y=0.8809898315791685 -a=pan,b=pan,i=8253,x=0.14951845911545658,y=0.050337793147141485 -a=wye,b=wye,i=8254,x=0.25412836603193123,y=0.7648066786148572 -a=zee,b=zee,i=8255,x=0.2969343720495279,y=0.17875651030138728 -a=hat,b=hat,i=8256,x=0.6242185970220043,y=0.7024165856278344 -a=hat,b=eks,i=8257,x=0.26153012394521724,y=0.9173648797055972 -a=hat,b=wye,i=8258,x=0.8531277255736057,y=0.8769896764505173 -a=hat,b=zee,i=8259,x=0.80786266752403,y=0.6716375742716686 -a=wye,b=hat,i=8260,x=0.8282560647084989,y=0.20433611074471913 -a=zee,b=hat,i=8261,x=0.1113559979634432,y=0.7406405068913335 -a=zee,b=pan,i=8262,x=0.8457444769341051,y=0.878949052752884 -a=hat,b=hat,i=8263,x=0.021118246086347936,y=0.1691340461129066 -a=zee,b=wye,i=8264,x=0.9518459612960978,y=0.2793142544459978 -a=wye,b=hat,i=8265,x=0.07060877965846446,y=0.7105555726161993 -a=wye,b=pan,i=8266,x=0.239318068730919,y=0.9656322414777047 -a=wye,b=zee,i=8267,x=0.9407755844234869,y=0.243380428927656 -a=hat,b=zee,i=8268,x=0.36840212479306056,y=0.1937179362263023 -a=hat,b=eks,i=8269,x=0.11448405024977704,y=0.23838350078789672 -a=hat,b=eks,i=8270,x=0.8887588347134354,y=0.3965985425548265 -a=zee,b=zee,i=8271,x=0.6960229915393261,y=0.35933925756783236 -a=eks,b=wye,i=8272,x=0.6007652533828618,y=0.9021580447695768 -a=zee,b=wye,i=8273,x=0.5248356199666635,y=0.26596318599910873 -a=eks,b=wye,i=8274,x=0.12638772701100054,y=0.98169945968464 -a=eks,b=pan,i=8275,x=0.3873436846104391,y=0.143667378519436 -a=wye,b=zee,i=8276,x=0.9887489614515038,y=0.2317693120893085 -a=pan,b=hat,i=8277,x=0.07383920400137156,y=0.29779174578381706 -a=eks,b=wye,i=8278,x=0.46767848884631935,y=0.05594159328112347 -a=pan,b=zee,i=8279,x=0.0664546736505951,y=0.9617417667852406 -a=hat,b=zee,i=8280,x=0.3946923561479273,y=0.26022613248187254 -a=pan,b=zee,i=8281,x=0.1263835939366954,y=0.432802462221352 -a=zee,b=zee,i=8282,x=0.40991526751045837,y=0.4664079852923113 -a=hat,b=hat,i=8283,x=0.7155306719275212,y=0.06447259326334698 -a=eks,b=zee,i=8284,x=0.18920257463227763,y=0.036407632423777536 -a=hat,b=zee,i=8285,x=0.2926888932381453,y=0.7371130359478189 -a=eks,b=zee,i=8286,x=0.8003927399144655,y=0.417202355775281 -a=pan,b=wye,i=8287,x=0.6189613307505946,y=0.6990573098254149 -a=eks,b=wye,i=8288,x=0.4497557556254256,y=0.24756315944170548 -a=hat,b=wye,i=8289,x=0.565349257018066,y=0.9695790816330443 -a=wye,b=hat,i=8290,x=0.1961063995221537,y=0.8919123622039012 -a=pan,b=zee,i=8291,x=0.735310256094497,y=0.8766337081918637 -a=wye,b=pan,i=8292,x=0.11264565494014644,y=0.9526134134675315 -a=pan,b=zee,i=8293,x=0.42564320453866944,y=0.754899630271162 -a=wye,b=eks,i=8294,x=0.03212624806856701,y=0.6046010405280738 -a=hat,b=zee,i=8295,x=0.9314009276546747,y=0.3634004587734717 -a=pan,b=eks,i=8296,x=0.4120888305335959,y=0.750837757399676 -a=pan,b=eks,i=8297,x=0.9819888226687685,y=0.5660827409414791 -a=wye,b=zee,i=8298,x=0.8302599994058273,y=0.7781190613623368 -a=zee,b=pan,i=8299,x=0.7102421054905385,y=0.18545230561185977 -a=eks,b=eks,i=8300,x=0.3945447287695022,y=0.18429543577101226 -a=hat,b=wye,i=8301,x=0.5127430759316344,y=0.37361440070960017 -a=zee,b=pan,i=8302,x=0.6034067583933804,y=0.04121009695962874 -a=hat,b=pan,i=8303,x=0.46102687899911865,y=0.028654914603273074 -a=pan,b=wye,i=8304,x=0.2251798670287818,y=0.1196124323878246 -a=pan,b=pan,i=8305,x=0.5277320763446786,y=0.2381453397638834 -a=wye,b=wye,i=8306,x=0.46134525628997447,y=0.14969908222679185 -a=zee,b=wye,i=8307,x=0.4681491013126058,y=0.5960038288514199 -a=pan,b=hat,i=8308,x=0.49210482260143007,y=0.9993016708772244 -a=wye,b=zee,i=8309,x=0.8206434836667577,y=0.48326589462644276 -a=eks,b=hat,i=8310,x=0.9655430452589465,y=0.9245411060012981 -a=zee,b=zee,i=8311,x=0.1815329790070851,y=0.8035031242939596 -a=hat,b=pan,i=8312,x=0.547677016360058,y=0.9650817043634582 -a=pan,b=pan,i=8313,x=0.6126245890384583,y=0.2627563830782662 -a=pan,b=pan,i=8314,x=0.5494985537362173,y=0.4929560062893006 -a=hat,b=zee,i=8315,x=0.24017154445473743,y=0.8801615057175497 -a=eks,b=zee,i=8316,x=0.01845753106507053,y=0.07103606295934006 -a=eks,b=pan,i=8317,x=0.729335030923378,y=0.9595878811451796 -a=zee,b=wye,i=8318,x=0.3037988276042912,y=0.9939532896787204 -a=hat,b=hat,i=8319,x=0.31751994407032824,y=0.04431824787878602 -a=eks,b=wye,i=8320,x=0.32774406925223687,y=0.39755988935681663 -a=eks,b=pan,i=8321,x=0.2983894526754026,y=0.6350152253803334 -a=wye,b=zee,i=8322,x=0.21110663580942235,y=0.5844040682223098 -a=wye,b=hat,i=8323,x=0.27575135446576815,y=0.5943122394277006 -a=hat,b=zee,i=8324,x=0.03714831235343263,y=0.18937718204762566 -a=zee,b=hat,i=8325,x=0.6815362179515927,y=0.054322149908386796 -a=hat,b=wye,i=8326,x=0.28959963076391493,y=0.36439348847404984 -a=pan,b=eks,i=8327,x=0.4907923620285024,y=0.7411167930742034 -a=wye,b=hat,i=8328,x=0.5085798206640023,y=0.8237875259659011 -a=zee,b=pan,i=8329,x=0.16898862414886817,y=0.15560228332434112 -a=wye,b=eks,i=8330,x=0.29464103904562966,y=0.7341494813651416 -a=pan,b=wye,i=8331,x=0.7050741639259068,y=0.24486480402061384 -a=wye,b=pan,i=8332,x=0.7019265469630769,y=0.07151895734610458 -a=wye,b=hat,i=8333,x=0.3553335894794559,y=0.9167960838619573 -a=eks,b=hat,i=8334,x=0.5699916051880387,y=0.13240719214910757 -a=eks,b=wye,i=8335,x=0.22545133259971217,y=0.9891874451094091 -a=wye,b=pan,i=8336,x=0.751226927786043,y=0.4644307134498339 -a=wye,b=hat,i=8337,x=0.9324084470957861,y=0.30464033139638336 -a=pan,b=wye,i=8338,x=0.8320742055010252,y=0.3040383465855868 -a=zee,b=hat,i=8339,x=0.04629611790555632,y=0.6570852521967993 -a=zee,b=wye,i=8340,x=0.779538114438638,y=0.8910397798499486 -a=pan,b=pan,i=8341,x=0.6773754216149304,y=0.613857099295925 -a=wye,b=hat,i=8342,x=0.1458720698488648,y=0.4351692119049885 -a=wye,b=wye,i=8343,x=0.818540088896837,y=0.09911450492965423 -a=zee,b=hat,i=8344,x=0.1958836142058411,y=0.9176685083913124 -a=zee,b=eks,i=8345,x=0.5108081370139803,y=0.8369754291473595 -a=pan,b=zee,i=8346,x=0.028776659972544194,y=0.6948652507080405 -a=hat,b=wye,i=8347,x=0.5681600007983288,y=0.054076468737378036 -a=zee,b=wye,i=8348,x=0.803443835215121,y=0.5295807220048788 -a=eks,b=pan,i=8349,x=0.9755546767865578,y=0.8799835489524848 -a=eks,b=zee,i=8350,x=0.24384090338130648,y=0.6466628002800704 -a=eks,b=wye,i=8351,x=0.03641540536678134,y=0.08744451304860146 -a=zee,b=wye,i=8352,x=0.5212869356402663,y=0.28575619803116314 -a=hat,b=hat,i=8353,x=0.055663129013605483,y=0.3787786437258225 -a=eks,b=hat,i=8354,x=0.5157212090975359,y=0.8904310076101238 -a=pan,b=wye,i=8355,x=0.7949456612203025,y=0.03903053598722972 -a=hat,b=hat,i=8356,x=0.5915574129139735,y=0.5501666687575646 -a=zee,b=eks,i=8357,x=0.7920429015988977,y=0.11834165152142673 -a=pan,b=hat,i=8358,x=0.42334512731520135,y=0.6760099049563617 -a=hat,b=hat,i=8359,x=0.672862622018669,y=0.9813314150345762 -a=hat,b=zee,i=8360,x=0.621024648933727,y=0.20026822440380232 -a=pan,b=hat,i=8361,x=0.32174647083648733,y=0.5895462222915597 -a=hat,b=hat,i=8362,x=0.8239226232469129,y=0.5363672557332027 -a=zee,b=hat,i=8363,x=0.2786903002001039,y=0.9687065243326013 -a=eks,b=zee,i=8364,x=0.6109061549072763,y=0.9310832897288339 -a=pan,b=pan,i=8365,x=0.6603069810848408,y=0.8682978196165198 -a=pan,b=eks,i=8366,x=0.8584731893684808,y=0.018687872462489152 -a=zee,b=eks,i=8367,x=0.4049863490547647,y=0.4247029183107722 -a=wye,b=eks,i=8368,x=0.30480439273047766,y=0.48048174444338265 -a=zee,b=wye,i=8369,x=0.4648458105978611,y=0.21546080520985877 -a=hat,b=pan,i=8370,x=0.7696984054132116,y=0.7047713537963836 -a=eks,b=zee,i=8371,x=0.37597533966420293,y=0.08724777473553502 -a=zee,b=hat,i=8372,x=0.5295738751761022,y=0.49181407244012054 -a=zee,b=eks,i=8373,x=0.6150222878860193,y=0.5607136634592303 -a=pan,b=wye,i=8374,x=0.4528870946233897,y=0.07597161789124052 -a=pan,b=zee,i=8375,x=0.5301175183103385,y=0.8601180937794322 -a=hat,b=eks,i=8376,x=0.06489427108475243,y=0.40261315507492046 -a=eks,b=wye,i=8377,x=0.563425411256789,y=0.9184806642610032 -a=eks,b=wye,i=8378,x=0.49250711472543074,y=0.5894409813302941 -a=wye,b=wye,i=8379,x=0.3106946403141324,y=0.9203740586209803 -a=hat,b=pan,i=8380,x=0.46061124100732664,y=0.7117135535467465 -a=pan,b=pan,i=8381,x=0.9008707927717292,y=0.3595902617465878 -a=zee,b=wye,i=8382,x=0.7952836839227378,y=0.6833817456403316 -a=hat,b=hat,i=8383,x=0.3984261676380828,y=0.1738533271203584 -a=eks,b=wye,i=8384,x=0.11104863533882658,y=0.3751765500241939 -a=hat,b=pan,i=8385,x=0.49685402919308186,y=0.07834061857462182 -a=zee,b=pan,i=8386,x=0.7967208048423021,y=0.6030273368815906 -a=zee,b=pan,i=8387,x=0.1807569167154014,y=0.7798562786722997 -a=pan,b=zee,i=8388,x=0.019186371949722614,y=0.712217475239358 -a=pan,b=eks,i=8389,x=0.7546663778603894,y=0.19055481748967162 -a=eks,b=hat,i=8390,x=0.750192269695654,y=0.2196686846490249 -a=hat,b=eks,i=8391,x=0.989982527715026,y=0.7339778723038518 -a=hat,b=zee,i=8392,x=0.1535960092053097,y=0.48365184245511483 -a=wye,b=pan,i=8393,x=0.5371021532444956,y=0.5076931407974227 -a=zee,b=eks,i=8394,x=0.9938525452278908,y=0.9944136062432827 -a=hat,b=eks,i=8395,x=0.5759238042621931,y=0.47928472474217776 -a=wye,b=eks,i=8396,x=0.7599928088669528,y=0.44980430671729377 -a=hat,b=zee,i=8397,x=0.652668800860253,y=0.4288216397914163 -a=wye,b=pan,i=8398,x=0.46997259303660743,y=0.6215175533218944 -a=zee,b=pan,i=8399,x=0.9401027436536872,y=0.8241834377991233 -a=wye,b=pan,i=8400,x=0.09022482342468607,y=0.7117741343367263 -a=eks,b=hat,i=8401,x=0.21592490518329377,y=0.33061077431647556 -a=eks,b=hat,i=8402,x=0.9947356560721309,y=0.7409670678572535 -a=eks,b=zee,i=8403,x=0.17272225530114538,y=0.8080858181702887 -a=zee,b=eks,i=8404,x=0.3493565206043524,y=0.09054805425762869 -a=pan,b=wye,i=8405,x=0.4811201910981,y=0.18742552959849512 -a=eks,b=zee,i=8406,x=0.31784551409346495,y=0.7449149218097839 -a=pan,b=wye,i=8407,x=0.6830421268168155,y=0.23886758610551817 -a=zee,b=hat,i=8408,x=0.9200690263533268,y=0.844860872568536 -a=zee,b=pan,i=8409,x=0.9273895913936498,y=0.34564042630503233 -a=wye,b=eks,i=8410,x=0.8159771407795444,y=0.17344618297387282 -a=hat,b=zee,i=8411,x=0.17599234652950568,y=0.8329306332017614 -a=eks,b=wye,i=8412,x=0.30559437664735667,y=0.2954096578389033 -a=eks,b=hat,i=8413,x=0.4338584089312799,y=0.1949819510216354 -a=wye,b=eks,i=8414,x=0.522368921381192,y=0.6530064427565451 -a=wye,b=eks,i=8415,x=0.40077151734215266,y=0.2875570398483994 -a=zee,b=wye,i=8416,x=0.44384210652184575,y=0.34372338201033137 -a=hat,b=zee,i=8417,x=0.8269419111916478,y=0.5295548379993134 -a=pan,b=eks,i=8418,x=0.4380512868717956,y=0.75013896261849 -a=zee,b=zee,i=8419,x=0.0075621874159564895,y=0.6690403936644571 -a=pan,b=zee,i=8420,x=0.23857482485031023,y=0.7909075804228464 -a=zee,b=pan,i=8421,x=0.3657309162534651,y=0.6228123699358817 -a=eks,b=wye,i=8422,x=0.6050408267820816,y=0.6834071285687362 -a=pan,b=eks,i=8423,x=0.926919755552011,y=0.26857376981837733 -a=zee,b=pan,i=8424,x=0.8931825703051405,y=0.3852663649349296 -a=wye,b=hat,i=8425,x=0.7453660507413682,y=0.13411772302924097 -a=hat,b=zee,i=8426,x=0.15542783988635755,y=0.704049056631255 -a=zee,b=eks,i=8427,x=0.4741772361406499,y=0.4439154258100234 -a=wye,b=pan,i=8428,x=0.08174430747151484,y=0.6148589268621117 -a=zee,b=pan,i=8429,x=0.5376842505367805,y=0.3213151447208863 -a=pan,b=pan,i=8430,x=0.7934355146306612,y=0.2130128581792352 -a=pan,b=hat,i=8431,x=0.39291331641736893,y=0.8094069164458879 -a=wye,b=pan,i=8432,x=0.06348257739180108,y=0.5106796157018605 -a=hat,b=zee,i=8433,x=0.5390621535629033,y=0.2952379177915695 -a=zee,b=zee,i=8434,x=0.9547567491718741,y=0.12013342742496513 -a=hat,b=pan,i=8435,x=0.38866184034912554,y=0.059525983951048245 -a=pan,b=pan,i=8436,x=0.006149130517828727,y=0.5641604969336926 -a=hat,b=eks,i=8437,x=0.5253247675869896,y=0.5165646242633789 -a=hat,b=wye,i=8438,x=0.17892790253218238,y=0.7014261262330826 -a=eks,b=pan,i=8439,x=0.8952428124136508,y=0.9997604543675731 -a=hat,b=pan,i=8440,x=0.9697671337199946,y=0.4191895939702769 -a=zee,b=hat,i=8441,x=0.22626716374612477,y=0.3072575476209706 -a=zee,b=hat,i=8442,x=0.012897791583037166,y=0.45928268470148015 -a=eks,b=hat,i=8443,x=0.26800839200996895,y=0.6418100107433928 -a=pan,b=hat,i=8444,x=0.033038289736824766,y=0.05539460621434722 -a=pan,b=hat,i=8445,x=0.3310467747539301,y=0.028084005329851225 -a=hat,b=zee,i=8446,x=0.178210692330519,y=0.4596388855650022 -a=hat,b=wye,i=8447,x=0.44766765422608423,y=0.2937943605301816 -a=eks,b=wye,i=8448,x=0.9730885844448779,y=0.6233373493085322 -a=pan,b=hat,i=8449,x=0.020061713489634814,y=0.6882480566852568 -a=pan,b=wye,i=8450,x=0.2793484686069333,y=0.44070351370129646 -a=pan,b=zee,i=8451,x=0.6735785887971937,y=0.2100853452380218 -a=wye,b=wye,i=8452,x=0.47072648393194716,y=0.3041985693356054 -a=wye,b=pan,i=8453,x=0.8533811491024729,y=0.9678356263785118 -a=wye,b=eks,i=8454,x=0.586163122107279,y=0.18970011803086628 -a=pan,b=hat,i=8455,x=0.5906501253369019,y=0.6123184772904339 -a=zee,b=hat,i=8456,x=0.08188017117818536,y=0.5533473423116015 -a=hat,b=wye,i=8457,x=0.09332068743830269,y=0.20145292592178443 -a=eks,b=zee,i=8458,x=0.6797834696384837,y=0.10797028132301578 -a=zee,b=wye,i=8459,x=0.6609343823302558,y=0.42546615879700533 -a=zee,b=wye,i=8460,x=0.8953715335446936,y=0.11110049694702284 -a=eks,b=pan,i=8461,x=0.3064924756043348,y=0.844175432052883 -a=wye,b=zee,i=8462,x=0.8562111449628035,y=0.3207655114753235 -a=hat,b=pan,i=8463,x=0.278695825691301,y=0.1017956876584839 -a=zee,b=pan,i=8464,x=0.008481311112248147,y=0.7901219557747767 -a=wye,b=hat,i=8465,x=0.9233177773701866,y=0.4551415267122566 -a=hat,b=hat,i=8466,x=0.14139708059138034,y=0.10409871077285981 -a=wye,b=eks,i=8467,x=0.15399092408367587,y=0.8471702381741639 -a=wye,b=pan,i=8468,x=0.7612272119425962,y=0.4244931128555939 -a=pan,b=pan,i=8469,x=0.1347759881116134,y=0.2455909077182844 -a=zee,b=eks,i=8470,x=0.7123089216903319,y=0.12685439711002044 -a=zee,b=zee,i=8471,x=0.516240721628621,y=0.6586906452113941 -a=eks,b=hat,i=8472,x=0.6674728443046178,y=0.1746237628027798 -a=eks,b=hat,i=8473,x=0.09764518520867405,y=0.3404811785298787 -a=wye,b=hat,i=8474,x=0.022760068608759787,y=0.5809138462442031 -a=wye,b=wye,i=8475,x=0.9378861915703766,y=0.2850230950144711 -a=wye,b=hat,i=8476,x=0.8745714693022778,y=0.6067344417467008 -a=eks,b=hat,i=8477,x=0.9309461833265447,y=0.5563876226531717 -a=zee,b=eks,i=8478,x=0.26305562568234253,y=0.9564416471738901 -a=zee,b=zee,i=8479,x=0.267729670683009,y=0.8948780265074652 -a=wye,b=wye,i=8480,x=0.16146423266136367,y=0.06354282797551147 -a=pan,b=eks,i=8481,x=0.7416513487460877,y=0.3796824390692355 -a=pan,b=pan,i=8482,x=0.8910001828466121,y=0.7723030338995308 -a=eks,b=zee,i=8483,x=0.20374081828155488,y=0.4241287356182083 -a=eks,b=pan,i=8484,x=0.2661511616359886,y=0.5443269070761398 -a=pan,b=zee,i=8485,x=0.3471597707881957,y=0.5383222143237165 -a=wye,b=eks,i=8486,x=0.9422065000597399,y=0.9149504343179683 -a=zee,b=hat,i=8487,x=0.8443654519702793,y=0.40835643886431905 -a=hat,b=eks,i=8488,x=0.4452671926810047,y=0.11987318281596804 -a=eks,b=pan,i=8489,x=0.8711743497988805,y=0.05126471215006212 -a=eks,b=pan,i=8490,x=0.21893201804499796,y=0.841786373878745 -a=pan,b=zee,i=8491,x=0.14450135153044963,y=0.4964690028665373 -a=wye,b=zee,i=8492,x=0.30534075186128107,y=0.8304463953467625 -a=wye,b=pan,i=8493,x=0.19415677927998398,y=0.36967456189817616 -a=zee,b=wye,i=8494,x=0.6014391280905923,y=0.9035203941606601 -a=pan,b=wye,i=8495,x=0.9535261800524316,y=0.6741780286573957 -a=zee,b=hat,i=8496,x=0.621523130626718,y=0.4636815949354597 -a=hat,b=hat,i=8497,x=0.3932809847758547,y=0.32342585911847266 -a=zee,b=eks,i=8498,x=0.5874342193773027,y=0.07510933559358712 -a=hat,b=zee,i=8499,x=0.6960433804921428,y=0.9688422831160675 -a=hat,b=hat,i=8500,x=0.948682263253869,y=0.894330225437426 -a=hat,b=wye,i=8501,x=0.9251536771842801,y=0.5375948099135825 -a=eks,b=eks,i=8502,x=0.7145487756177015,y=0.48881971388046497 -a=wye,b=hat,i=8503,x=0.43025676669473123,y=0.7342583446741899 -a=zee,b=hat,i=8504,x=0.33240950818517156,y=0.08420305010182172 -a=pan,b=wye,i=8505,x=0.04933447605388053,y=0.43620839928024635 -a=zee,b=eks,i=8506,x=0.5644240816881203,y=0.30905524481111557 -a=zee,b=hat,i=8507,x=0.8799876950191433,y=0.8626007536651286 -a=eks,b=pan,i=8508,x=0.5903156727749356,y=0.08521525736448865 -a=hat,b=hat,i=8509,x=0.4819653658346117,y=0.47086103178508854 -a=eks,b=pan,i=8510,x=0.09221850268394138,y=0.5189296436201934 -a=wye,b=hat,i=8511,x=0.5399541727181182,y=0.8444405945197476 -a=hat,b=zee,i=8512,x=0.8829979498980527,y=0.22352194169557127 -a=eks,b=pan,i=8513,x=0.10151458816501346,y=0.1389357491074602 -a=wye,b=eks,i=8514,x=0.145836390847488,y=0.3255110732802976 -a=eks,b=zee,i=8515,x=0.5023980888022918,y=0.49053802703856897 -a=wye,b=pan,i=8516,x=0.4017850863763818,y=0.44971529290471857 -a=pan,b=hat,i=8517,x=0.9781793338882204,y=0.021166333309513008 -a=pan,b=zee,i=8518,x=0.7275818161813503,y=0.5297860907729676 -a=eks,b=eks,i=8519,x=0.20825394541995124,y=0.20861255119440336 -a=wye,b=pan,i=8520,x=0.8898604947131726,y=0.597970731230186 -a=eks,b=wye,i=8521,x=0.3648001678117977,y=0.19557380766743293 -a=pan,b=eks,i=8522,x=0.6966179778593448,y=0.6840334680719272 -a=hat,b=hat,i=8523,x=0.440001403027384,y=0.45225896734383286 -a=hat,b=wye,i=8524,x=0.859237452752394,y=0.1542124316389395 -a=wye,b=wye,i=8525,x=0.725596832315083,y=0.22913389637676507 -a=hat,b=eks,i=8526,x=0.6308328182217219,y=0.9629302966330678 -a=wye,b=wye,i=8527,x=0.8115562833033729,y=0.4166596968518107 -a=zee,b=pan,i=8528,x=0.1829199682476771,y=0.22085981047936964 -a=hat,b=wye,i=8529,x=0.8572334709695195,y=0.7640619187795664 -a=zee,b=wye,i=8530,x=0.7086732598851492,y=0.4127159537504168 -a=zee,b=wye,i=8531,x=0.32354124502667125,y=0.2318309195815882 -a=pan,b=hat,i=8532,x=0.9446099166208107,y=0.1614735751140206 -a=pan,b=wye,i=8533,x=0.4223281734144666,y=0.10945011806361638 -a=wye,b=zee,i=8534,x=0.27597556866373363,y=0.8816530467647844 -a=wye,b=hat,i=8535,x=0.7402933295244709,y=0.2866045341793103 -a=pan,b=eks,i=8536,x=0.23950266321443625,y=0.2173609684570218 -a=wye,b=eks,i=8537,x=0.8479922856732104,y=0.646967422694876 -a=pan,b=eks,i=8538,x=0.9430852556493492,y=0.8645812565386866 -a=wye,b=wye,i=8539,x=0.5424202389577869,y=0.7980364309577922 -a=zee,b=zee,i=8540,x=0.6480753391409477,y=0.5064183808137883 -a=eks,b=hat,i=8541,x=0.38813893407288325,y=0.12561215999003672 -a=zee,b=hat,i=8542,x=0.17586391865769935,y=0.610479743176282 -a=pan,b=zee,i=8543,x=0.7196826298375226,y=0.21171452421116865 -a=zee,b=eks,i=8544,x=0.042214602250652544,y=0.7797653758284612 -a=pan,b=pan,i=8545,x=0.6623908411097427,y=0.2713858225948562 -a=pan,b=eks,i=8546,x=0.8347245917805975,y=0.32344231920229216 -a=eks,b=zee,i=8547,x=0.17659256136803803,y=0.2734607705288187 -a=hat,b=wye,i=8548,x=0.06872905733725654,y=0.24606652109262273 -a=pan,b=pan,i=8549,x=0.45957314823744033,y=0.5826268929712483 -a=hat,b=zee,i=8550,x=0.5390972348460589,y=0.832817959583314 -a=zee,b=zee,i=8551,x=0.9479215142295764,y=0.31091453552453974 -a=pan,b=wye,i=8552,x=0.8946104855739115,y=0.2336514856632098 -a=eks,b=zee,i=8553,x=0.1756747767253124,y=0.40173864656676805 -a=eks,b=eks,i=8554,x=0.35767825814151055,y=0.6530934959898533 -a=eks,b=eks,i=8555,x=0.9294958471853418,y=0.44323868180332826 -a=hat,b=wye,i=8556,x=0.2055964313614329,y=0.7508496809797562 -a=zee,b=pan,i=8557,x=0.4734760023383495,y=0.24574081766297817 -a=pan,b=pan,i=8558,x=0.01915285502673958,y=0.0710080820684984 -a=wye,b=hat,i=8559,x=0.36628589114868737,y=0.7546365740130917 -a=pan,b=pan,i=8560,x=0.8369571665486479,y=0.6640166878609967 -a=pan,b=wye,i=8561,x=0.9827417467300459,y=0.47548149029733666 -a=eks,b=hat,i=8562,x=0.9263781942963408,y=0.13871044819580336 -a=pan,b=pan,i=8563,x=0.9901067426610356,y=0.22526379572530497 -a=zee,b=eks,i=8564,x=0.4638040598773725,y=0.34104108677898826 -a=wye,b=hat,i=8565,x=0.48113198136329016,y=0.3218458306963313 -a=zee,b=pan,i=8566,x=0.6161448715164534,y=0.48576149543063263 -a=pan,b=hat,i=8567,x=0.7401694289092702,y=0.8501949156927895 -a=wye,b=eks,i=8568,x=0.5607940018315913,y=0.6859095069187073 -a=hat,b=wye,i=8569,x=0.8193761557404394,y=0.6213974290333986 -a=hat,b=hat,i=8570,x=0.218909328728924,y=0.7083399518815072 -a=hat,b=pan,i=8571,x=0.3374929371344728,y=0.11008369139923513 -a=wye,b=zee,i=8572,x=0.5104050859274984,y=0.84636724693727 -a=wye,b=pan,i=8573,x=0.304284204335561,y=0.8057462093976527 -a=hat,b=pan,i=8574,x=0.1304164384473907,y=0.7795954672055522 -a=eks,b=hat,i=8575,x=0.411309283136459,y=0.3134260008884213 -a=hat,b=eks,i=8576,x=0.8094118504289595,y=0.3462825803661308 -a=eks,b=pan,i=8577,x=0.8378950242503957,y=0.3281587348968884 -a=wye,b=eks,i=8578,x=0.8671191631706497,y=0.848376644694914 -a=wye,b=hat,i=8579,x=0.3629850782784485,y=0.7894725040297135 -a=hat,b=pan,i=8580,x=0.20981130689562955,y=0.4981591059735274 -a=wye,b=zee,i=8581,x=0.9549730188079689,y=0.16399154830304508 -a=zee,b=wye,i=8582,x=0.48899851680494,y=0.05774193348030199 -a=hat,b=hat,i=8583,x=0.18626492222161328,y=0.7003807702816355 -a=wye,b=zee,i=8584,x=0.36453353655204557,y=0.784021739601697 -a=pan,b=zee,i=8585,x=0.8620613291960066,y=0.8283882429708938 -a=zee,b=wye,i=8586,x=0.6927422583943957,y=0.7194075668113131 -a=hat,b=pan,i=8587,x=0.0052693086009946155,y=0.6525496192910188 -a=eks,b=hat,i=8588,x=0.451596899385722,y=0.5139458108988265 -a=hat,b=zee,i=8589,x=0.2926550989813841,y=0.35398173553544887 -a=eks,b=wye,i=8590,x=0.9239196319519597,y=0.14591437779625882 -a=hat,b=pan,i=8591,x=0.7873294723300266,y=0.5332360898832793 -a=zee,b=pan,i=8592,x=0.6070860534520608,y=0.06388885983216774 -a=zee,b=zee,i=8593,x=0.2617818185031422,y=0.43707681521897646 -a=pan,b=hat,i=8594,x=0.6468386400257026,y=0.38978242152795606 -a=zee,b=eks,i=8595,x=0.42488684401408794,y=0.2974668150516677 -a=wye,b=wye,i=8596,x=0.8826796731081049,y=0.7850131924698824 -a=wye,b=eks,i=8597,x=0.006860697351333767,y=0.19549617714299017 -a=hat,b=zee,i=8598,x=0.07939885603933172,y=0.677412657910395 -a=wye,b=zee,i=8599,x=0.7184888188080124,y=0.8697536607671493 -a=hat,b=wye,i=8600,x=0.84790186953787,y=0.8684654646246722 -a=eks,b=pan,i=8601,x=0.8421109599018441,y=0.16320118728086785 -a=pan,b=pan,i=8602,x=0.26047864829581335,y=0.6808750509660122 -a=eks,b=pan,i=8603,x=0.31611152902489204,y=0.11267222283796785 -a=eks,b=wye,i=8604,x=0.06845978562369492,y=0.7238513464535802 -a=pan,b=zee,i=8605,x=0.6530000366736074,y=0.10675264632456327 -a=wye,b=wye,i=8606,x=0.06774372832796882,y=0.567171071395945 -a=pan,b=wye,i=8607,x=0.7672859830291083,y=0.9905418229463311 -a=wye,b=hat,i=8608,x=0.9486273082548317,y=0.49394451768421244 -a=zee,b=wye,i=8609,x=0.8594077389671471,y=0.39612060375973734 -a=eks,b=hat,i=8610,x=0.20455104503269428,y=0.8497404270304781 -a=eks,b=wye,i=8611,x=0.024981210157926648,y=0.4592839770075655 -a=wye,b=pan,i=8612,x=0.9729537123818344,y=0.31179500609148325 -a=pan,b=pan,i=8613,x=0.9509457095140577,y=0.47129012611509 -a=wye,b=hat,i=8614,x=0.9846913444886134,y=0.02710103368583705 -a=zee,b=wye,i=8615,x=0.3010264833529994,y=0.7455884610745039 -a=pan,b=zee,i=8616,x=0.6883510014246306,y=0.8824450569844674 -a=zee,b=eks,i=8617,x=0.4515091274400017,y=0.020225254455900066 -a=zee,b=hat,i=8618,x=0.8851862421614336,y=0.15621840171343437 -a=pan,b=hat,i=8619,x=0.2649678025213431,y=0.39936058228129934 -a=zee,b=pan,i=8620,x=0.7597636742317367,y=0.1317502476459378 -a=zee,b=zee,i=8621,x=0.13218842583668222,y=0.03127532132246047 -a=hat,b=eks,i=8622,x=0.49385289030098156,y=0.3427851043390181 -a=eks,b=zee,i=8623,x=0.18543631005824213,y=0.19588655519979803 -a=pan,b=zee,i=8624,x=0.10763314570414217,y=0.08213428508081799 -a=pan,b=eks,i=8625,x=0.6882597637249681,y=0.8142971025439197 -a=eks,b=hat,i=8626,x=0.6080795099100825,y=0.8728243765075873 -a=eks,b=eks,i=8627,x=0.770624339998738,y=0.07831235750300036 -a=hat,b=zee,i=8628,x=0.46540841676613476,y=0.10159896993531026 -a=zee,b=pan,i=8629,x=0.004614760806835205,y=0.9592385994725491 -a=wye,b=pan,i=8630,x=0.6807920836499873,y=0.8665298197163882 -a=pan,b=eks,i=8631,x=0.6858410458377651,y=0.7631951114896744 -a=eks,b=hat,i=8632,x=0.20944920807915668,y=0.17415067019098263 -a=zee,b=wye,i=8633,x=0.015521112321513986,y=0.870629718512366 -a=zee,b=pan,i=8634,x=0.3707685639916669,y=0.2775760739581703 -a=pan,b=zee,i=8635,x=0.6292193294154781,y=0.21469655787258057 -a=zee,b=zee,i=8636,x=0.6107700273929492,y=0.14811799805161463 -a=zee,b=eks,i=8637,x=0.6395976874259532,y=0.9961211959529084 -a=pan,b=wye,i=8638,x=0.8056202987173707,y=0.28960110672185313 -a=zee,b=eks,i=8639,x=0.2524229698549828,y=0.17611542817224723 -a=zee,b=zee,i=8640,x=0.08482390402218887,y=0.36890700689619493 -a=eks,b=pan,i=8641,x=0.46605482768215767,y=0.07140744226571838 -a=eks,b=hat,i=8642,x=0.10408804972672026,y=0.23204314849773244 -a=hat,b=zee,i=8643,x=0.3955443156971198,y=0.35524981169296355 -a=zee,b=hat,i=8644,x=0.7215420507798297,y=0.03391309500084805 -a=eks,b=pan,i=8645,x=0.9910156023068047,y=0.21643864467214002 -a=zee,b=wye,i=8646,x=0.6658298582773444,y=0.36894449402470386 -a=wye,b=wye,i=8647,x=0.8282095483187364,y=0.5670959372120373 -a=zee,b=hat,i=8648,x=0.0831367015182175,y=0.7424505172193498 -a=pan,b=hat,i=8649,x=0.8273775847857144,y=0.849837822420028 -a=hat,b=pan,i=8650,x=0.7798855565061036,y=0.6249390723014688 -a=pan,b=hat,i=8651,x=0.15776823313362787,y=0.6837656369090205 -a=pan,b=hat,i=8652,x=0.12499193321086843,y=0.8909115194708364 -a=zee,b=hat,i=8653,x=0.623624299660614,y=0.28437293457698065 -a=wye,b=hat,i=8654,x=0.4794478591209653,y=0.6149276606394762 -a=zee,b=hat,i=8655,x=0.9202280019494714,y=0.43438007188126115 -a=pan,b=wye,i=8656,x=0.5362020839763336,y=0.5898815059855541 -a=hat,b=pan,i=8657,x=0.4419120878855759,y=0.04387616479212919 -a=wye,b=pan,i=8658,x=0.37394689239227175,y=0.6932810199911174 -a=hat,b=eks,i=8659,x=0.09027772061731287,y=0.5938968603299669 -a=hat,b=eks,i=8660,x=0.44939114811664815,y=0.8033098658688053 -a=eks,b=hat,i=8661,x=0.9412054441857266,y=0.7031238908715453 -a=hat,b=wye,i=8662,x=0.026880033398767544,y=0.9570616615315023 -a=pan,b=zee,i=8663,x=0.16400229878818795,y=0.7569220441881562 -a=hat,b=eks,i=8664,x=0.737351462653292,y=0.008534196836191721 -a=zee,b=eks,i=8665,x=0.16620817209916572,y=0.4183421439519892 -a=eks,b=eks,i=8666,x=0.2605898276210701,y=0.9107791581080643 -a=pan,b=eks,i=8667,x=0.16483965969504477,y=0.008847013569707962 -a=hat,b=hat,i=8668,x=0.5758275186132803,y=0.4376894563403356 -a=wye,b=eks,i=8669,x=0.30935622306150556,y=0.5406996947409577 -a=hat,b=eks,i=8670,x=0.6115682118401596,y=0.709847191339046 -a=hat,b=pan,i=8671,x=0.5876224326167997,y=0.655751406127023 -a=pan,b=pan,i=8672,x=0.7383754184207463,y=0.4204832285810981 -a=wye,b=wye,i=8673,x=0.9992635865771493,y=0.4216138590799462 -a=zee,b=wye,i=8674,x=0.30144308355523053,y=0.985811453648491 -a=hat,b=eks,i=8675,x=0.7901168710228115,y=0.02854873755150633 -a=wye,b=zee,i=8676,x=0.458348366941119,y=0.0654065118924938 -a=pan,b=eks,i=8677,x=0.576018794663166,y=0.021732489132554877 -a=wye,b=zee,i=8678,x=0.051768914692817525,y=0.9811531769362358 -a=wye,b=eks,i=8679,x=0.8714866001900081,y=0.5074064697197682 -a=pan,b=zee,i=8680,x=0.8573300862564848,y=0.8110639386847459 -a=eks,b=wye,i=8681,x=0.9176784134359273,y=0.2764422061252122 -a=hat,b=eks,i=8682,x=0.8690529123645934,y=0.9535269156601301 -a=wye,b=zee,i=8683,x=0.6350123840910076,y=0.6382912385391265 -a=hat,b=eks,i=8684,x=0.6215103356564846,y=0.14887437241814006 -a=zee,b=wye,i=8685,x=0.584126263404004,y=0.7538247769853159 -a=wye,b=wye,i=8686,x=0.43551003027785373,y=0.3236501977657479 -a=wye,b=hat,i=8687,x=0.8880686097383739,y=0.6330150426943297 -a=wye,b=zee,i=8688,x=0.7635796389205769,y=0.2638125019378026 -a=zee,b=wye,i=8689,x=0.3761531727653552,y=0.9022543136929991 -a=wye,b=eks,i=8690,x=0.08913417768338172,y=0.9531306393247156 -a=eks,b=pan,i=8691,x=0.9943932359314775,y=0.9072697301052425 -a=eks,b=zee,i=8692,x=0.5457000332265722,y=0.4837579979584361 -a=zee,b=pan,i=8693,x=0.4765529256302863,y=0.7047109057288847 -a=eks,b=hat,i=8694,x=0.742421569895559,y=0.766958291324268 -a=zee,b=eks,i=8695,x=0.23665653193040737,y=0.2743956071876914 -a=wye,b=wye,i=8696,x=0.2888070230684594,y=0.9935631592216062 -a=hat,b=zee,i=8697,x=0.1507630405832039,y=0.8444262680025181 -a=zee,b=pan,i=8698,x=0.9647755452332127,y=0.3090467608406059 -a=wye,b=wye,i=8699,x=0.18194655224399203,y=0.9052438757034091 -a=pan,b=wye,i=8700,x=0.849446996637848,y=0.7731446643107283 -a=pan,b=pan,i=8701,x=0.6101087522261474,y=0.5619798733118421 -a=eks,b=eks,i=8702,x=0.2860963732537126,y=0.5616399941521609 -a=hat,b=hat,i=8703,x=0.5764546868259887,y=0.5585165186187631 -a=wye,b=hat,i=8704,x=0.5825019915262796,y=0.7509760878946939 -a=wye,b=hat,i=8705,x=0.2608869277824021,y=0.18054497056171448 -a=hat,b=hat,i=8706,x=0.44933047132208914,y=0.2870706030629274 -a=eks,b=eks,i=8707,x=0.5126396112669858,y=0.7451349937567859 -a=wye,b=hat,i=8708,x=0.9654821455735791,y=0.4030015908373886 -a=zee,b=hat,i=8709,x=0.12072257756980032,y=0.6331889132322128 -a=eks,b=eks,i=8710,x=0.23179579194118272,y=0.2720693323497807 -a=pan,b=hat,i=8711,x=0.2745931092811078,y=0.8275977373766176 -a=zee,b=zee,i=8712,x=0.16788282836102386,y=0.8552502071604215 -a=hat,b=eks,i=8713,x=0.17690637256217367,y=0.7529327963215693 -a=zee,b=zee,i=8714,x=0.871119409753738,y=0.8880243168317828 -a=pan,b=zee,i=8715,x=0.06440670061693166,y=0.7697496461773731 -a=pan,b=zee,i=8716,x=0.010723117383408809,y=0.3256007021073345 -a=pan,b=zee,i=8717,x=0.6961198318349152,y=0.46776215866881776 -a=zee,b=pan,i=8718,x=0.5501338319067216,y=0.4585993087188408 -a=pan,b=pan,i=8719,x=0.8266651999765658,y=0.7457257758170397 -a=wye,b=pan,i=8720,x=0.6983669783370258,y=0.18024570857490163 -a=zee,b=hat,i=8721,x=0.18186817750471462,y=0.28188928351608533 -a=eks,b=wye,i=8722,x=0.1796424637908317,y=0.08845716187743458 -a=wye,b=zee,i=8723,x=0.18784777106560657,y=0.8680814485784762 -a=wye,b=pan,i=8724,x=0.7535113517713046,y=0.06635813172501992 -a=wye,b=wye,i=8725,x=0.06677961979475944,y=0.8150664034109032 -a=pan,b=pan,i=8726,x=0.09110059809025017,y=0.634882036803602 -a=eks,b=eks,i=8727,x=0.07770263986306736,y=0.6339732062069904 -a=hat,b=zee,i=8728,x=0.1222023744265569,y=0.36047803182555027 -a=hat,b=wye,i=8729,x=0.38616984963682455,y=0.6665706605579002 -a=eks,b=wye,i=8730,x=0.03564554727285307,y=0.775754590350077 -a=wye,b=zee,i=8731,x=0.35713870378290125,y=0.1671267891620788 -a=hat,b=zee,i=8732,x=0.5996953011640668,y=0.62340072229723 -a=zee,b=hat,i=8733,x=0.2345433105033039,y=0.10071782641377514 -a=zee,b=hat,i=8734,x=0.301665687569308,y=0.3630510637781915 -a=hat,b=pan,i=8735,x=0.47526687158292913,y=0.22747265846322517 -a=pan,b=eks,i=8736,x=0.5793971065628433,y=0.6408359296127717 -a=wye,b=zee,i=8737,x=0.6210812266919626,y=0.8036316255685408 -a=pan,b=wye,i=8738,x=0.15856470090745411,y=0.07442697669748699 -a=hat,b=pan,i=8739,x=0.6747028428344869,y=0.05546525602545038 -a=zee,b=zee,i=8740,x=0.7182904394926175,y=0.7258491677192344 -a=wye,b=hat,i=8741,x=0.050796016954941514,y=0.2827688297213582 -a=pan,b=hat,i=8742,x=0.536032482315453,y=0.7201071015346874 -a=pan,b=hat,i=8743,x=0.23212794392337244,y=0.9962892434331647 -a=zee,b=hat,i=8744,x=0.15548275830576097,y=0.5597164039669866 -a=pan,b=zee,i=8745,x=0.053519007571192656,y=0.5880763072120166 -a=wye,b=hat,i=8746,x=0.4039984554038578,y=0.6360272605402368 -a=eks,b=zee,i=8747,x=0.12768838944842187,y=0.7694103697647696 -a=pan,b=pan,i=8748,x=0.0504766925956035,y=0.1711562295167237 -a=eks,b=eks,i=8749,x=0.43854684004790123,y=0.28682577788725483 -a=zee,b=zee,i=8750,x=0.37684822924899897,y=0.6896149386123666 -a=wye,b=hat,i=8751,x=0.06509359888339494,y=0.177636855552877 -a=eks,b=pan,i=8752,x=0.09242339085575646,y=0.32343297889748723 -a=wye,b=eks,i=8753,x=0.9973914329853147,y=0.9693279929688737 -a=hat,b=eks,i=8754,x=0.370565044079066,y=0.009819699195025788 -a=zee,b=pan,i=8755,x=0.8202332245450998,y=0.5597758930454603 -a=eks,b=hat,i=8756,x=0.272322951811926,y=0.145224793410337 -a=pan,b=eks,i=8757,x=0.10217035846864753,y=0.8463196056537164 -a=zee,b=zee,i=8758,x=0.9667659565271899,y=0.5623772828898473 -a=zee,b=hat,i=8759,x=0.03620010006756513,y=0.9300101887480641 -a=pan,b=hat,i=8760,x=0.7972381410312142,y=0.3059551797120732 -a=wye,b=wye,i=8761,x=0.6603209295504429,y=0.5459240190405134 -a=zee,b=hat,i=8762,x=0.8972125526805521,y=0.12801932204763655 -a=hat,b=eks,i=8763,x=0.08300923681882266,y=0.3326688755194035 -a=pan,b=hat,i=8764,x=0.19654713910488297,y=0.9815477858639055 -a=pan,b=wye,i=8765,x=0.7403998857752021,y=0.9560094148670492 -a=wye,b=zee,i=8766,x=0.9449147393082301,y=0.6732722707943484 -a=pan,b=hat,i=8767,x=0.994940403256145,y=0.6992814067153592 -a=pan,b=eks,i=8768,x=0.9628487500260046,y=0.2914751295622189 -a=zee,b=hat,i=8769,x=0.04870919701921694,y=0.9387243884055145 -a=pan,b=eks,i=8770,x=0.6298376152653163,y=0.5214339719227405 -a=pan,b=hat,i=8771,x=0.05539194558306315,y=0.6044013107155554 -a=wye,b=zee,i=8772,x=0.754483186364135,y=0.9567133222811894 -a=eks,b=zee,i=8773,x=0.7529293581975827,y=0.2684999525860745 -a=wye,b=eks,i=8774,x=0.3998473670297119,y=0.07393345230936454 -a=wye,b=zee,i=8775,x=0.15521659769175922,y=0.2873998987631695 -a=wye,b=zee,i=8776,x=0.5452491171201722,y=0.050076673250635584 -a=pan,b=eks,i=8777,x=0.5238633710326642,y=0.019941096658736224 -a=zee,b=wye,i=8778,x=0.7616404527480684,y=0.8158713089665471 -a=hat,b=wye,i=8779,x=0.600461848950472,y=0.5399884947809014 -a=eks,b=zee,i=8780,x=0.5925751420631895,y=0.6690795493308443 -a=pan,b=zee,i=8781,x=0.9383737724522293,y=0.7748193135876428 -a=pan,b=pan,i=8782,x=0.49034005500698785,y=0.80873396896634 -a=pan,b=hat,i=8783,x=0.5183921754082103,y=0.11862486021555674 -a=pan,b=zee,i=8784,x=0.8772019876864762,y=0.1521542632208297 -a=zee,b=hat,i=8785,x=0.6464009753631575,y=0.6923362770119578 -a=pan,b=hat,i=8786,x=0.16224717165693037,y=0.7476369567248122 -a=eks,b=pan,i=8787,x=0.9541941134181783,y=0.39739249865003967 -a=hat,b=zee,i=8788,x=0.2642687755038374,y=0.10859080810253674 -a=zee,b=wye,i=8789,x=0.789145574444134,y=0.24974632777903916 -a=wye,b=hat,i=8790,x=0.8223311948449997,y=0.5130414892803776 -a=eks,b=hat,i=8791,x=0.6818394894701235,y=0.7849388490947223 -a=eks,b=zee,i=8792,x=0.2729303223525674,y=0.8719161161689617 -a=wye,b=zee,i=8793,x=0.9343780609627443,y=0.05352320375085495 -a=pan,b=pan,i=8794,x=0.9586567458589967,y=0.919190837846641 -a=zee,b=eks,i=8795,x=0.27124185699244374,y=0.6001949173753478 -a=wye,b=wye,i=8796,x=0.534583514132678,y=0.7819265778012215 -a=pan,b=hat,i=8797,x=0.4497161697366787,y=0.026741184746243984 -a=zee,b=eks,i=8798,x=0.8167620532839222,y=0.8279530206710328 -a=wye,b=eks,i=8799,x=0.8471762978662517,y=0.6353417536536258 -a=zee,b=hat,i=8800,x=0.4068819800794493,y=0.6647858452666756 -a=hat,b=hat,i=8801,x=0.017219020782623162,y=0.1624665172562224 -a=zee,b=wye,i=8802,x=0.5608298870065771,y=0.5058672809947269 -a=eks,b=pan,i=8803,x=0.4433211231528589,y=0.2838323939048415 -a=hat,b=wye,i=8804,x=0.015128205072592937,y=0.9382969714739184 -a=wye,b=zee,i=8805,x=0.41033971377507983,y=0.8903811666103645 -a=wye,b=pan,i=8806,x=0.08327290658651032,y=0.2550251881973168 -a=pan,b=eks,i=8807,x=0.339222785155762,y=0.1751435242352425 -a=zee,b=zee,i=8808,x=0.4820472727787015,y=0.017092345316797486 -a=eks,b=pan,i=8809,x=0.8772675192449497,y=0.09405065417217506 -a=eks,b=zee,i=8810,x=0.4802724150878229,y=0.750654827698973 -a=wye,b=eks,i=8811,x=0.27073265506551913,y=0.4615910666569303 -a=eks,b=eks,i=8812,x=0.07160623229882901,y=0.12458111194427568 -a=pan,b=hat,i=8813,x=0.7877743286534948,y=0.8757926217967861 -a=wye,b=pan,i=8814,x=0.8234802661475596,y=0.47740951215608096 -a=zee,b=wye,i=8815,x=0.7068610202368742,y=0.7545170669582756 -a=eks,b=wye,i=8816,x=0.42511667279750365,y=0.7472491957445023 -a=hat,b=pan,i=8817,x=0.8982686805610952,y=0.41213109883329235 -a=eks,b=eks,i=8818,x=0.0006917972627396018,y=0.9154889032308835 -a=zee,b=hat,i=8819,x=0.8077899694017853,y=0.9694410429631465 -a=wye,b=wye,i=8820,x=0.5128274083278233,y=0.1925061634264612 -a=wye,b=hat,i=8821,x=0.48953047787044934,y=0.9309635789095997 -a=wye,b=wye,i=8822,x=0.5093848419146877,y=0.7499112900526392 -a=wye,b=zee,i=8823,x=0.7521935072400413,y=0.8768924705259773 -a=zee,b=wye,i=8824,x=0.17855149771491108,y=0.09366701006513045 -a=wye,b=wye,i=8825,x=0.9175145724829686,y=0.733177971733118 -a=wye,b=pan,i=8826,x=0.7781119220016439,y=0.5568374194244214 -a=pan,b=pan,i=8827,x=0.44994539245047094,y=0.010072546778717273 -a=zee,b=pan,i=8828,x=0.8974531793622843,y=0.6299514776398363 -a=zee,b=hat,i=8829,x=0.03029077173623984,y=0.8996371412607174 -a=pan,b=zee,i=8830,x=0.9250374016750887,y=0.21170234142774214 -a=hat,b=wye,i=8831,x=0.2886019989070704,y=0.8746854292394444 -a=eks,b=zee,i=8832,x=0.8201188808616761,y=0.7163833146418705 -a=hat,b=pan,i=8833,x=0.4781516414425546,y=0.6243657645336355 -a=eks,b=pan,i=8834,x=0.30019128687682395,y=0.6215357926899209 -a=zee,b=pan,i=8835,x=0.28411203290841713,y=0.880506908200805 -a=zee,b=hat,i=8836,x=0.12727398470205364,y=0.6861531204026988 -a=pan,b=pan,i=8837,x=0.6585419955018336,y=0.10473471849452742 -a=pan,b=hat,i=8838,x=0.4461825537060876,y=0.3925097922631463 -a=wye,b=pan,i=8839,x=0.4002040179552746,y=0.24694949779242004 -a=hat,b=hat,i=8840,x=0.2591704876662355,y=0.8145986246056769 -a=wye,b=pan,i=8841,x=0.38972915905002337,y=0.5603702988216951 -a=pan,b=eks,i=8842,x=0.9266082306477657,y=0.5285007006129709 -a=hat,b=hat,i=8843,x=0.37872486721691034,y=0.07532645476050148 -a=hat,b=hat,i=8844,x=0.0685259642260373,y=0.00776256940978215 -a=pan,b=wye,i=8845,x=0.24303613366881238,y=0.13056160975299724 -a=wye,b=eks,i=8846,x=0.9676348576302707,y=0.5106172718000012 -a=wye,b=pan,i=8847,x=0.19766194187411346,y=0.6722053323380418 -a=hat,b=eks,i=8848,x=0.18275312440508307,y=0.9764304146821695 -a=pan,b=zee,i=8849,x=0.6264364311275306,y=0.9563714459175713 -a=hat,b=eks,i=8850,x=0.8735595733663851,y=0.5106033973424751 -a=hat,b=wye,i=8851,x=0.8277257237676418,y=0.38220594008932074 -a=pan,b=eks,i=8852,x=0.5590462379202299,y=0.07402923834402797 -a=wye,b=wye,i=8853,x=0.6030890949494638,y=0.024154261693530632 -a=hat,b=wye,i=8854,x=0.9304995637638334,y=0.6319621895624278 -a=eks,b=zee,i=8855,x=0.3608005376988722,y=0.9009155444417519 -a=pan,b=hat,i=8856,x=0.31871112874254814,y=0.5214655695969946 -a=pan,b=eks,i=8857,x=0.31972354861237895,y=0.7327700228563248 -a=pan,b=zee,i=8858,x=0.7128306783608381,y=0.811303686462451 -a=pan,b=wye,i=8859,x=0.9081121983690633,y=0.5712022128090308 -a=eks,b=pan,i=8860,x=0.7438203192490614,y=0.28338323389587416 -a=wye,b=hat,i=8861,x=0.39486469148361836,y=0.49780490997274707 -a=wye,b=wye,i=8862,x=0.7736663364376681,y=0.5874621525618737 -a=zee,b=pan,i=8863,x=0.7598351732843991,y=0.16402301245225137 -a=eks,b=eks,i=8864,x=0.8345356283222535,y=0.7112462031216813 -a=zee,b=eks,i=8865,x=0.9403263935444554,y=0.07461363367845775 -a=zee,b=hat,i=8866,x=0.6732648337974786,y=0.9333019394438807 -a=hat,b=zee,i=8867,x=0.4989779025451857,y=0.9076709264537641 -a=hat,b=hat,i=8868,x=0.016222381142314224,y=0.02090746494690887 -a=wye,b=hat,i=8869,x=0.2676602361580831,y=0.8275937851537348 -a=wye,b=zee,i=8870,x=0.5771716563773662,y=0.3486638387791615 -a=wye,b=zee,i=8871,x=0.8326977668224673,y=0.042247928422714076 -a=eks,b=pan,i=8872,x=0.46276796521083263,y=0.937222119081556 -a=zee,b=wye,i=8873,x=0.12465164468565504,y=0.4217551436223611 -a=hat,b=wye,i=8874,x=0.8578330113744658,y=0.5967910955072325 -a=wye,b=pan,i=8875,x=0.9700008052690227,y=0.5495480079950836 -a=pan,b=hat,i=8876,x=0.14594726337052932,y=0.7756413451049061 -a=wye,b=eks,i=8877,x=0.21506616709063353,y=0.028566538362973737 -a=hat,b=zee,i=8878,x=0.8446285361381319,y=0.08785108055341062 -a=zee,b=pan,i=8879,x=0.8504405312776793,y=0.6033489024089217 -a=wye,b=wye,i=8880,x=0.47595916238031677,y=0.4288837512249194 -a=eks,b=zee,i=8881,x=0.45213579710907703,y=0.08748650555497739 -a=zee,b=eks,i=8882,x=0.1414462883645664,y=0.9081746803701161 -a=hat,b=eks,i=8883,x=0.7348243939209332,y=0.8605568412288824 -a=pan,b=hat,i=8884,x=0.7853971344779014,y=0.004051486898246415 -a=zee,b=wye,i=8885,x=0.41758576449425977,y=0.14627581317514182 -a=wye,b=hat,i=8886,x=0.9280339369715974,y=0.9297205006311496 -a=zee,b=hat,i=8887,x=0.7347475121162593,y=0.03993326351233917 -a=zee,b=zee,i=8888,x=0.8278911862966036,y=0.4003238193899692 -a=zee,b=zee,i=8889,x=0.06545001204265088,y=0.3004515856834621 -a=eks,b=zee,i=8890,x=0.27962535290039825,y=0.44335679461319166 -a=hat,b=hat,i=8891,x=0.019843222350497625,y=0.5313009507007954 -a=pan,b=eks,i=8892,x=0.3852530201110397,y=0.06941698785655903 -a=pan,b=eks,i=8893,x=0.2977417830889273,y=0.6332182300346895 -a=zee,b=eks,i=8894,x=0.1966531651167187,y=0.4688240979189081 -a=wye,b=hat,i=8895,x=0.22463107582925324,y=0.4161186278077874 -a=eks,b=zee,i=8896,x=0.22809184804735871,y=0.4707492036142362 -a=hat,b=eks,i=8897,x=0.4271783841263873,y=0.5474566889867322 -a=hat,b=zee,i=8898,x=0.45420946781919536,y=0.10354482418357991 -a=zee,b=pan,i=8899,x=0.1500424792671291,y=0.3904357922605537 -a=eks,b=hat,i=8900,x=0.4705695658454211,y=0.13058529889276693 -a=wye,b=eks,i=8901,x=0.7851072833003859,y=0.010949059596507271 -a=eks,b=pan,i=8902,x=0.36598892555347484,y=0.8692921887688625 -a=zee,b=eks,i=8903,x=0.4231582011204885,y=0.4821489267549405 -a=eks,b=wye,i=8904,x=0.27693517497385267,y=0.35861877550118093 -a=eks,b=hat,i=8905,x=0.2021072148174844,y=0.5782529159344267 -a=pan,b=eks,i=8906,x=0.6095360635614762,y=0.15147456052535202 -a=pan,b=eks,i=8907,x=0.730295298034919,y=0.2551125391698271 -a=zee,b=zee,i=8908,x=0.3638375152320661,y=0.5373463704499434 -a=pan,b=hat,i=8909,x=0.5579467202447957,y=0.1630566373150174 -a=hat,b=pan,i=8910,x=0.49610253645583846,y=0.21986829070394298 -a=eks,b=wye,i=8911,x=0.09558215825789063,y=0.018958306464913255 -a=zee,b=eks,i=8912,x=0.5946765644498425,y=0.4861950247721053 -a=zee,b=wye,i=8913,x=0.7753872326222572,y=0.130388837660953 -a=zee,b=hat,i=8914,x=0.8820731335941235,y=0.12986802677134568 -a=hat,b=zee,i=8915,x=0.4040203950712935,y=0.04965833346589221 -a=eks,b=wye,i=8916,x=0.46871698272105,y=0.3462467467139262 -a=wye,b=hat,i=8917,x=0.5720192464320304,y=0.0819820791306417 -a=wye,b=wye,i=8918,x=0.8054579412182167,y=0.3836759639818865 -a=eks,b=hat,i=8919,x=0.4742484069291977,y=0.2514827712591855 -a=pan,b=wye,i=8920,x=0.733610226156712,y=0.5651397506818968 -a=hat,b=zee,i=8921,x=0.5565613081265703,y=0.9540215346587051 -a=pan,b=pan,i=8922,x=0.270663413379612,y=0.4701176631611145 -a=pan,b=zee,i=8923,x=0.1853923248765008,y=0.0022929560982657415 -a=zee,b=pan,i=8924,x=0.7050433080915809,y=0.4961082324924917 -a=eks,b=wye,i=8925,x=0.5609329671328473,y=0.589599688677612 -a=pan,b=eks,i=8926,x=0.5899990569564478,y=0.9670305978679095 -a=eks,b=zee,i=8927,x=0.6589844496396701,y=0.07234525669075342 -a=hat,b=wye,i=8928,x=0.9559160182621979,y=0.2564401800691153 -a=zee,b=wye,i=8929,x=0.7910634287616417,y=0.5832583369417834 -a=pan,b=eks,i=8930,x=0.9200311370773863,y=0.8086516025019609 -a=zee,b=eks,i=8931,x=0.7726442152731748,y=0.3006011490460859 -a=pan,b=pan,i=8932,x=0.9200924471782158,y=0.30104452372640955 -a=zee,b=zee,i=8933,x=0.4454093296017202,y=0.3284583037994141 -a=wye,b=eks,i=8934,x=0.42726184573719983,y=0.9963781447633139 -a=zee,b=eks,i=8935,x=0.4486952558039746,y=0.4130427561178419 -a=hat,b=eks,i=8936,x=0.9755076232964625,y=0.6362818073430646 -a=zee,b=zee,i=8937,x=0.5683636673391735,y=0.329434458320802 -a=zee,b=hat,i=8938,x=0.35289211042725366,y=0.7543520598626876 -a=hat,b=pan,i=8939,x=0.8511623725969789,y=0.6164456458973154 -a=wye,b=wye,i=8940,x=0.9818963757219575,y=0.5755972292005318 -a=hat,b=hat,i=8941,x=0.7568298583150284,y=0.5846179373919896 -a=eks,b=hat,i=8942,x=0.601894549758784,y=0.13992074533051124 -a=eks,b=hat,i=8943,x=0.35887195487544743,y=0.6953516641971523 -a=zee,b=hat,i=8944,x=0.8805088303643233,y=0.08493946930957796 -a=eks,b=hat,i=8945,x=0.7539371156991909,y=0.4116992595762401 -a=wye,b=hat,i=8946,x=0.16141868331242304,y=0.9136362828702729 -a=eks,b=hat,i=8947,x=0.8483324196518135,y=0.6158053719777993 -a=eks,b=pan,i=8948,x=0.5318875109400665,y=0.8230182723036877 -a=zee,b=zee,i=8949,x=0.4716296186751222,y=0.8472833535757873 -a=zee,b=wye,i=8950,x=0.2790928413033852,y=0.0772468110330039 -a=wye,b=eks,i=8951,x=0.9027943823162313,y=0.6124436018843183 -a=pan,b=wye,i=8952,x=0.39603795348082305,y=0.7719031240961284 -a=eks,b=hat,i=8953,x=0.8716876316900987,y=0.20148989402965545 -a=zee,b=eks,i=8954,x=0.47758220480911473,y=0.2664181870815133 -a=hat,b=pan,i=8955,x=0.3375565375177234,y=0.19102233314969186 -a=hat,b=wye,i=8956,x=0.44049488264331627,y=0.5092306826033091 -a=eks,b=eks,i=8957,x=0.7047805468534891,y=0.5946651385930218 -a=pan,b=pan,i=8958,x=0.6519485361202326,y=0.7030912337766829 -a=hat,b=eks,i=8959,x=0.6713731052940981,y=0.6013560927295543 -a=hat,b=pan,i=8960,x=0.9417167187642326,y=0.8026299128777213 -a=zee,b=wye,i=8961,x=0.8154052031095614,y=0.6481399972215665 -a=pan,b=wye,i=8962,x=0.0914057435253639,y=0.10822318947000709 -a=pan,b=hat,i=8963,x=0.3046680167824908,y=0.09348404024830137 -a=zee,b=zee,i=8964,x=0.6189408278256606,y=0.8433159445563726 -a=eks,b=hat,i=8965,x=0.958051223919934,y=0.5081338063861043 -a=wye,b=eks,i=8966,x=0.8530691152394455,y=0.8692728927718893 -a=hat,b=eks,i=8967,x=0.8372819315874948,y=0.8861340588817578 -a=wye,b=zee,i=8968,x=0.9977506774202527,y=0.9679468301172027 -a=hat,b=pan,i=8969,x=0.45963913428927994,y=0.2847833031004139 -a=pan,b=eks,i=8970,x=0.34327965136688565,y=0.2691645574062619 -a=eks,b=hat,i=8971,x=0.24298535978329028,y=0.6326328755167427 -a=hat,b=zee,i=8972,x=0.5786862872644059,y=0.8671986650119898 -a=wye,b=hat,i=8973,x=0.7183329442429014,y=0.3363191065286383 -a=wye,b=pan,i=8974,x=0.551888889672068,y=0.3209850549321359 -a=pan,b=pan,i=8975,x=0.30697964139250933,y=0.08659671798153756 -a=zee,b=eks,i=8976,x=0.9556339095055809,y=0.021482277034970076 -a=eks,b=hat,i=8977,x=0.3585667547454152,y=0.7507818063628751 -a=eks,b=hat,i=8978,x=0.5232916500187303,y=0.8753848427459924 -a=hat,b=wye,i=8979,x=0.002400498001248641,y=0.5428314927562883 -a=wye,b=eks,i=8980,x=0.31030792190565804,y=0.851109380675088 -a=hat,b=eks,i=8981,x=0.8950141191932938,y=0.3343291380416574 -a=wye,b=zee,i=8982,x=0.007647040296205221,y=0.5252318459052353 -a=eks,b=hat,i=8983,x=0.6822585854384956,y=0.009453423471399658 -a=zee,b=pan,i=8984,x=0.6987813603715117,y=0.5232757984191948 -a=hat,b=wye,i=8985,x=0.932024395968463,y=0.9447580630208217 -a=zee,b=zee,i=8986,x=0.8552570190589601,y=0.08815519942713801 -a=wye,b=pan,i=8987,x=0.27750649660566373,y=0.76526956752658 -a=pan,b=hat,i=8988,x=0.5404886782798238,y=0.5374270296539031 -a=wye,b=hat,i=8989,x=0.9762152572727496,y=0.8712434910014083 -a=wye,b=hat,i=8990,x=0.2691586619417575,y=0.5122780764115732 -a=pan,b=eks,i=8991,x=0.5236344484593898,y=0.7020390430173928 -a=zee,b=zee,i=8992,x=0.285347240060405,y=0.2493240966526331 -a=zee,b=wye,i=8993,x=0.7119318558771737,y=0.8612125817012293 -a=pan,b=eks,i=8994,x=0.6358666072344865,y=0.930679583655016 -a=eks,b=pan,i=8995,x=0.43393822544853966,y=0.5656571369668376 -a=eks,b=zee,i=8996,x=0.014997169280220546,y=0.38924624193859947 -a=pan,b=eks,i=8997,x=0.006957705982631457,y=0.27329586967444996 -a=zee,b=wye,i=8998,x=0.45799438726799335,y=0.020705027471035087 -a=wye,b=wye,i=8999,x=0.18512302956813365,y=0.7121523046316812 -a=hat,b=eks,i=9000,x=0.33727508102114134,y=0.13582122939201124 -a=eks,b=eks,i=9001,x=0.517121854692058,y=0.308749201053908 -a=hat,b=zee,i=9002,x=0.07358032166019501,y=0.736123828569227 -a=zee,b=hat,i=9003,x=0.004824023551166401,y=0.759916663671451 -a=zee,b=eks,i=9004,x=0.4893113819292234,y=0.23390278210191928 -a=hat,b=eks,i=9005,x=0.45618459558425717,y=0.8962930076422373 -a=zee,b=hat,i=9006,x=0.6562108769673498,y=0.13991018518940446 -a=zee,b=zee,i=9007,x=0.3650427655416524,y=0.8531673941547171 -a=zee,b=wye,i=9008,x=0.8282941376563813,y=0.9889370827954176 -a=pan,b=pan,i=9009,x=0.3878236858466175,y=0.06714068514516147 -a=hat,b=hat,i=9010,x=0.2007850497817364,y=0.6400219844960209 -a=wye,b=wye,i=9011,x=0.6252481085403859,y=0.203071024510721 -a=wye,b=hat,i=9012,x=0.4675098280645633,y=0.9904823978688722 -a=zee,b=pan,i=9013,x=0.6305143660449302,y=0.710245374097503 -a=zee,b=wye,i=9014,x=0.16891869382531022,y=0.37574058303798785 -a=pan,b=wye,i=9015,x=0.3220094028213596,y=0.4839478151356543 -a=eks,b=eks,i=9016,x=0.5800740825749267,y=0.8910261945783475 -a=zee,b=hat,i=9017,x=0.9502641304019075,y=0.8396710982351069 -a=pan,b=eks,i=9018,x=0.4764608908539697,y=0.4728942258779697 -a=hat,b=wye,i=9019,x=0.272865007065651,y=0.41472685232133355 -a=eks,b=hat,i=9020,x=0.03877794357017561,y=0.8924528458892764 -a=eks,b=wye,i=9021,x=0.7714689461624145,y=0.7234215610234059 -a=eks,b=eks,i=9022,x=0.8213647586189171,y=0.8993719170687399 -a=zee,b=zee,i=9023,x=0.7890585709155626,y=0.5099043493783608 -a=zee,b=wye,i=9024,x=0.3645469383907922,y=0.7980710103585312 -a=eks,b=pan,i=9025,x=0.7614330300379404,y=0.039049698191956694 -a=hat,b=zee,i=9026,x=0.8364001741754985,y=0.8590079093968295 -a=pan,b=hat,i=9027,x=0.142586581614627,y=0.8402014883489196 -a=zee,b=wye,i=9028,x=0.5239151547368636,y=0.8242755070656802 -a=hat,b=eks,i=9029,x=0.8128575668904885,y=0.395268947973739 -a=zee,b=pan,i=9030,x=0.5793285227205369,y=0.8038160807198467 -a=zee,b=wye,i=9031,x=0.42904790956591343,y=0.292783754196035 -a=zee,b=eks,i=9032,x=0.6146666934752367,y=0.26568169357263305 -a=eks,b=eks,i=9033,x=0.6937567726575595,y=0.9601490785081487 -a=zee,b=wye,i=9034,x=0.7679588189607225,y=0.5157794038228849 -a=zee,b=eks,i=9035,x=0.8214778175820499,y=0.760903040561442 -a=hat,b=wye,i=9036,x=0.13026398297350839,y=0.8705769782903738 -a=pan,b=wye,i=9037,x=0.5665532246879906,y=0.7400695598140006 -a=wye,b=pan,i=9038,x=0.565327438099348,y=0.231520424905162 -a=hat,b=zee,i=9039,x=0.5300522543665926,y=0.23348061445665524 -a=wye,b=zee,i=9040,x=0.6003398441074326,y=0.39489635735776574 -a=wye,b=hat,i=9041,x=0.983147388463674,y=0.6432444380950916 -a=wye,b=zee,i=9042,x=0.555504813496403,y=0.005666564490671155 -a=eks,b=pan,i=9043,x=0.5141737191526409,y=0.23406402155139128 -a=pan,b=eks,i=9044,x=0.4915948295461785,y=0.5674330258517061 -a=pan,b=eks,i=9045,x=0.4125775873836637,y=0.9745899732717427 -a=zee,b=wye,i=9046,x=0.27009823817926015,y=0.5931288546151294 -a=hat,b=hat,i=9047,x=0.49305007094314124,y=0.3988521392673088 -a=zee,b=wye,i=9048,x=0.852593383706857,y=0.13271142657885082 -a=pan,b=wye,i=9049,x=0.10903067000808575,y=0.6457675593887455 -a=pan,b=eks,i=9050,x=0.9286228908161963,y=0.7128664838636729 -a=eks,b=zee,i=9051,x=0.7368149289050578,y=0.040114995641035156 -a=pan,b=eks,i=9052,x=0.9883016421626661,y=0.836414097002929 -a=eks,b=eks,i=9053,x=0.578258852447845,y=0.6483953013399163 -a=pan,b=eks,i=9054,x=0.4581912096837616,y=0.2396747725609628 -a=pan,b=zee,i=9055,x=0.3910891811342043,y=0.3060677650909158 -a=zee,b=eks,i=9056,x=0.1257667798355191,y=0.22523050330447225 -a=wye,b=wye,i=9057,x=0.8018497438432275,y=0.13069916829224115 -a=eks,b=zee,i=9058,x=0.46306509283004527,y=0.6479906691686209 -a=hat,b=zee,i=9059,x=0.8032276523393308,y=0.5895573796523289 -a=zee,b=wye,i=9060,x=0.9489845382435659,y=0.7186985210470157 -a=wye,b=eks,i=9061,x=0.5843515776382836,y=0.09689548652828073 -a=eks,b=zee,i=9062,x=0.29235718302362745,y=0.8058919599706711 -a=zee,b=eks,i=9063,x=0.3746671187448585,y=0.7104834374120668 -a=pan,b=pan,i=9064,x=0.957433552072592,y=0.612273185217601 -a=pan,b=pan,i=9065,x=0.9206660995409818,y=0.6388548120920611 -a=hat,b=eks,i=9066,x=0.7938077850540011,y=0.9840395711931128 -a=eks,b=eks,i=9067,x=0.7586156840742447,y=0.9657635310428576 -a=zee,b=wye,i=9068,x=0.03525325620506059,y=0.20286396861407563 -a=wye,b=wye,i=9069,x=0.9854601376745921,y=0.28297920890020123 -a=eks,b=zee,i=9070,x=0.7790422604287773,y=0.28267242056842967 -a=wye,b=pan,i=9071,x=0.9604400242139107,y=0.09079642708772462 -a=wye,b=pan,i=9072,x=0.5208132164872745,y=0.013972758368806626 -a=eks,b=eks,i=9073,x=0.2792153884168088,y=0.7248580986479927 -a=pan,b=wye,i=9074,x=0.9826230778886313,y=0.30895404125911885 -a=zee,b=pan,i=9075,x=0.3488738872635716,y=0.8235123319669855 -a=eks,b=pan,i=9076,x=0.9828706810264064,y=0.7255065121370968 -a=wye,b=pan,i=9077,x=0.285398788706721,y=0.4224009700612671 -a=hat,b=hat,i=9078,x=0.049288778502150965,y=0.996399226324633 -a=eks,b=wye,i=9079,x=0.2615316643364618,y=0.22800118037634576 -a=zee,b=zee,i=9080,x=0.4293043221770476,y=0.17146941589040998 -a=pan,b=zee,i=9081,x=0.00020390740306253097,y=0.858089025239552 -a=zee,b=wye,i=9082,x=0.2857614979340398,y=0.6179068250859443 -a=eks,b=zee,i=9083,x=0.23246167408482288,y=0.22121933132231686 -a=zee,b=hat,i=9084,x=0.3023274634670656,y=0.3919343366566008 -a=wye,b=zee,i=9085,x=0.48017021719327857,y=0.0007369823565522848 -a=eks,b=pan,i=9086,x=0.43284428230137006,y=0.6679282652138314 -a=wye,b=eks,i=9087,x=0.5126283529841884,y=0.414628158508178 -a=pan,b=hat,i=9088,x=0.10076670744312233,y=0.924513056086707 -a=eks,b=hat,i=9089,x=0.17655473424651258,y=0.027572342702157582 -a=zee,b=hat,i=9090,x=0.32515391353663414,y=0.24968345250419 -a=hat,b=hat,i=9091,x=0.40076821857198996,y=0.6602879383328565 -a=zee,b=zee,i=9092,x=0.26080219359430634,y=0.6103007265821453 -a=pan,b=hat,i=9093,x=0.2925006896788842,y=0.6480842668339396 -a=pan,b=pan,i=9094,x=0.9716001304365217,y=0.6469197673672618 -a=eks,b=eks,i=9095,x=0.5806604417079977,y=0.3031395509663418 -a=eks,b=eks,i=9096,x=0.3734935600143474,y=0.5772166478411038 -a=zee,b=zee,i=9097,x=0.9600502263246077,y=0.39644027119291114 -a=wye,b=hat,i=9098,x=0.2804902678845115,y=0.048162079204052355 -a=eks,b=zee,i=9099,x=0.43507793732310474,y=0.3953634078162601 -a=pan,b=eks,i=9100,x=0.4123076209388652,y=0.8034708206600174 -a=zee,b=eks,i=9101,x=0.39275338043203933,y=0.6958341586624519 -a=pan,b=hat,i=9102,x=0.28992810063257124,y=0.0936263604214349 -a=hat,b=hat,i=9103,x=0.05803247800352507,y=0.5686807585943757 -a=pan,b=wye,i=9104,x=0.27797911143024934,y=0.942706265472493 -a=hat,b=hat,i=9105,x=0.4895163425613803,y=0.033340055000638746 -a=pan,b=zee,i=9106,x=0.44873266752482066,y=0.15530029661112588 -a=pan,b=wye,i=9107,x=0.34313847787795904,y=0.2784766094254877 -a=hat,b=wye,i=9108,x=0.614870837142051,y=0.3488517641548976 -a=eks,b=hat,i=9109,x=0.9754089146191263,y=0.5077651396700906 -a=hat,b=zee,i=9110,x=0.6804708680166679,y=0.5357141089061417 -a=zee,b=zee,i=9111,x=0.0703606204232261,y=0.6245056563608682 -a=pan,b=wye,i=9112,x=0.3153235029768974,y=0.5484733757485007 -a=eks,b=wye,i=9113,x=0.49754317676073356,y=0.5477171066757857 -a=eks,b=wye,i=9114,x=0.9835650326182704,y=0.8742646308873757 -a=wye,b=zee,i=9115,x=0.10698858622424778,y=0.1221930347907727 -a=eks,b=pan,i=9116,x=0.8096317851752184,y=0.4495015727565027 -a=pan,b=eks,i=9117,x=0.03509835946106599,y=0.4760601952379325 -a=zee,b=hat,i=9118,x=0.6070026967820008,y=0.27123198811450044 -a=eks,b=hat,i=9119,x=0.4790316458227425,y=0.39259275204959654 -a=zee,b=eks,i=9120,x=0.8458192848056897,y=0.9572808268819287 -a=pan,b=pan,i=9121,x=0.9385839358069921,y=0.6047637384188489 -a=eks,b=pan,i=9122,x=0.45413891231860504,y=0.7591849964061139 -a=pan,b=zee,i=9123,x=0.026931116208210204,y=0.552290792057422 -a=wye,b=pan,i=9124,x=0.271590915264334,y=0.042888205379760125 -a=pan,b=wye,i=9125,x=0.004588040579576735,y=0.6300579166147449 -a=wye,b=wye,i=9126,x=0.5171856925914533,y=0.24961569992529742 -a=wye,b=pan,i=9127,x=0.8948475255545615,y=0.6574529698134108 -a=wye,b=hat,i=9128,x=0.3669933618796106,y=0.37512574289121725 -a=pan,b=hat,i=9129,x=0.6586229255026295,y=0.1784724547766009 -a=hat,b=zee,i=9130,x=0.27552193496369337,y=0.6578126148590314 -a=zee,b=pan,i=9131,x=0.6444063407232797,y=0.4063279946367009 -a=pan,b=wye,i=9132,x=0.6455902674388132,y=0.5382099179246037 -a=hat,b=pan,i=9133,x=0.9317711632235914,y=0.3230694970784014 -a=eks,b=hat,i=9134,x=0.16612397042168814,y=0.3555728981905678 -a=wye,b=zee,i=9135,x=0.7750442450200157,y=0.06656439748434029 -a=zee,b=pan,i=9136,x=0.5002884150544058,y=0.21659717683648372 -a=zee,b=hat,i=9137,x=0.0053168417053239825,y=0.23970890502186593 -a=hat,b=zee,i=9138,x=0.05408301987702224,y=0.8596429828563238 -a=zee,b=zee,i=9139,x=0.24544320815673137,y=0.677429657112386 -a=zee,b=pan,i=9140,x=0.5013642860004229,y=0.6650678922317501 -a=eks,b=hat,i=9141,x=0.39054802020070156,y=0.06891218601149551 -a=wye,b=hat,i=9142,x=0.29433621999949233,y=0.7751648810637005 -a=wye,b=hat,i=9143,x=0.4460302810053538,y=0.040278587711885305 -a=hat,b=eks,i=9144,x=0.30372533545667213,y=0.4297094831523881 -a=zee,b=eks,i=9145,x=0.00769664097559164,y=0.1446289205179656 -a=pan,b=wye,i=9146,x=0.9108896246536903,y=0.20685277919402034 -a=wye,b=pan,i=9147,x=0.8702610842064613,y=0.13016678459764375 -a=pan,b=wye,i=9148,x=0.7394828765293925,y=0.9475622732914554 -a=zee,b=pan,i=9149,x=0.22357262525185106,y=0.20550777850363977 -a=zee,b=pan,i=9150,x=0.7364509479059471,y=0.5273598026796336 -a=zee,b=eks,i=9151,x=0.3216536526700301,y=0.23861396443066107 -a=hat,b=wye,i=9152,x=0.629862943457729,y=0.2161824319117963 -a=zee,b=wye,i=9153,x=0.7713603997995606,y=0.8927934282961629 -a=eks,b=eks,i=9154,x=0.8033015390132335,y=0.7428789028852476 -a=hat,b=pan,i=9155,x=0.4469843980869507,y=0.18928924828611082 -a=wye,b=wye,i=9156,x=0.500390135135027,y=0.8848611838558533 -a=zee,b=hat,i=9157,x=0.6459716786543495,y=0.8783255778315494 -a=zee,b=pan,i=9158,x=0.829825296282736,y=0.9403424810846446 -a=hat,b=wye,i=9159,x=0.6553956343389391,y=0.1525879472674848 -a=zee,b=eks,i=9160,x=0.6080812576081395,y=0.3155419271117481 -a=wye,b=zee,i=9161,x=0.9794920335555851,y=0.5208178578405636 -a=hat,b=pan,i=9162,x=0.36011363532418106,y=0.3418468995076799 -a=pan,b=wye,i=9163,x=0.37797791224139665,y=0.39353695559343227 -a=hat,b=zee,i=9164,x=0.8838448430378912,y=0.7958865093747128 -a=zee,b=zee,i=9165,x=0.7783131261247423,y=0.7403476431916528 -a=eks,b=eks,i=9166,x=0.22004086657109556,y=0.19736319549096537 -a=hat,b=wye,i=9167,x=0.6758868789217809,y=0.24720804895114945 -a=wye,b=pan,i=9168,x=0.5370077637228887,y=0.6389653169963743 -a=pan,b=zee,i=9169,x=0.030815090059835182,y=0.017547992939040524 -a=wye,b=wye,i=9170,x=0.8353343256800804,y=0.3768654473939027 -a=hat,b=zee,i=9171,x=0.46003847353195026,y=0.4354345395691309 -a=hat,b=pan,i=9172,x=0.032538252982685534,y=0.988500077283618 -a=eks,b=wye,i=9173,x=0.034581992091101466,y=0.7801643183419578 -a=eks,b=zee,i=9174,x=0.6550305066967593,y=0.16344251291756706 -a=zee,b=wye,i=9175,x=0.19674254649951783,y=0.18304515051083692 -a=eks,b=pan,i=9176,x=0.21328957209812893,y=0.13489440510159378 -a=pan,b=eks,i=9177,x=0.005689888388995534,y=0.19304812808970884 -a=zee,b=pan,i=9178,x=0.9154191363169403,y=0.032732957728748735 -a=zee,b=zee,i=9179,x=0.9807519030460864,y=0.4665860553591783 -a=pan,b=pan,i=9180,x=0.6528911310033898,y=0.7987231494976602 -a=pan,b=hat,i=9181,x=0.6407905148282739,y=0.7653184860370159 -a=wye,b=pan,i=9182,x=0.9562838531255896,y=0.27319300978963235 -a=zee,b=eks,i=9183,x=0.8789109160607933,y=0.6764597514962247 -a=hat,b=wye,i=9184,x=0.0454922541303826,y=0.7789503923765669 -a=zee,b=hat,i=9185,x=0.9488182203633042,y=0.20055459864504688 -a=pan,b=zee,i=9186,x=0.8094929584839381,y=0.017753827357001706 -a=zee,b=eks,i=9187,x=0.9492829297817624,y=0.9675987602030636 -a=hat,b=wye,i=9188,x=0.5484371698132414,y=0.48898521397678274 -a=zee,b=hat,i=9189,x=0.698589129880174,y=0.4354385113427839 -a=pan,b=wye,i=9190,x=0.8371899774027962,y=0.7968937186611519 -a=wye,b=zee,i=9191,x=0.021517369039138368,y=0.1381446138482929 -a=eks,b=zee,i=9192,x=0.2695667438992312,y=0.28074171138048576 -a=wye,b=pan,i=9193,x=0.894511626988757,y=0.938591468790241 -a=wye,b=pan,i=9194,x=0.12628217214956572,y=0.6168175982380071 -a=pan,b=zee,i=9195,x=0.5535590246543304,y=0.2526444377074163 -a=hat,b=hat,i=9196,x=0.3980083533361548,y=0.12546876469790447 -a=wye,b=hat,i=9197,x=0.3508027024722644,y=0.8470842806054778 -a=pan,b=pan,i=9198,x=0.6918350451415268,y=0.7037194771160388 -a=pan,b=wye,i=9199,x=0.09935798556479436,y=0.8306198911393249 -a=eks,b=wye,i=9200,x=0.5817459757102148,y=0.7926589099732673 -a=wye,b=pan,i=9201,x=0.6973989669681704,y=0.029025785391803005 -a=hat,b=wye,i=9202,x=0.541438501860869,y=0.43313624277905893 -a=zee,b=eks,i=9203,x=0.03325991383215876,y=0.7053312999685288 -a=hat,b=pan,i=9204,x=0.972877655785142,y=0.2339442404736457 -a=wye,b=pan,i=9205,x=0.650403525932319,y=0.3896918481459313 -a=eks,b=zee,i=9206,x=0.38877534437698114,y=0.570145295749778 -a=eks,b=wye,i=9207,x=0.4768627348776039,y=0.8140053040358975 -a=wye,b=eks,i=9208,x=0.7602904558546134,y=0.40132374234963053 -a=hat,b=eks,i=9209,x=0.9001439023825403,y=0.03672742376278848 -a=pan,b=eks,i=9210,x=0.9435871837198925,y=0.17154456862061596 -a=pan,b=hat,i=9211,x=0.6420793762242888,y=0.686212047389247 -a=wye,b=zee,i=9212,x=0.5791530677301323,y=0.4958922872459267 -a=zee,b=pan,i=9213,x=0.5172383902917987,y=0.415686177469048 -a=zee,b=zee,i=9214,x=0.5228330684403698,y=0.9018872431686975 -a=eks,b=wye,i=9215,x=0.04381430874634051,y=0.6032242723440449 -a=wye,b=pan,i=9216,x=0.945612107018632,y=0.5963971999452331 -a=pan,b=hat,i=9217,x=0.5519808331424808,y=0.037818522708640945 -a=wye,b=pan,i=9218,x=0.45248627667931407,y=0.9107065056547308 -a=wye,b=pan,i=9219,x=0.9023383971006868,y=0.007488783487717088 -a=hat,b=wye,i=9220,x=0.7052123508658505,y=0.38765508481678934 -a=eks,b=zee,i=9221,x=0.41382740826608244,y=0.477677197129144 -a=hat,b=eks,i=9222,x=0.6481864881498441,y=0.5386696824239133 -a=wye,b=hat,i=9223,x=0.677511714967485,y=0.2245548025295082 -a=zee,b=eks,i=9224,x=0.23401414583819413,y=0.9738879243097983 -a=wye,b=pan,i=9225,x=0.8767378564000506,y=0.4275905594606648 -a=pan,b=zee,i=9226,x=0.4240169603576853,y=0.8296431435579869 -a=hat,b=pan,i=9227,x=0.946179027020023,y=0.5244012924468459 -a=pan,b=zee,i=9228,x=0.05618069066896114,y=0.7424835122028975 -a=zee,b=wye,i=9229,x=0.40650226274306367,y=0.9887079480722842 -a=pan,b=eks,i=9230,x=0.3504445487923017,y=0.0696878797080479 -a=wye,b=zee,i=9231,x=0.9610972939563219,y=0.9615810406623142 -a=eks,b=wye,i=9232,x=0.9834939198983763,y=0.902120163211437 -a=pan,b=eks,i=9233,x=0.8804184286373076,y=0.4945856574840146 -a=wye,b=wye,i=9234,x=0.07920533790072082,y=0.4210755544521094 -a=eks,b=hat,i=9235,x=0.48788423763049804,y=0.4836801731961293 -a=wye,b=eks,i=9236,x=0.9192818812102141,y=0.1515679068232202 -a=hat,b=hat,i=9237,x=0.7302582849873859,y=0.6347279985888814 -a=zee,b=eks,i=9238,x=0.7403878392403773,y=0.34071315515449585 -a=pan,b=pan,i=9239,x=0.8213696571357758,y=0.17138348492013578 -a=wye,b=hat,i=9240,x=0.8014369373980875,y=0.814100095516592 -a=pan,b=pan,i=9241,x=0.3913547136873715,y=0.54960018873529 -a=pan,b=zee,i=9242,x=0.9438072144493844,y=0.06767533471560916 -a=wye,b=zee,i=9243,x=0.5569913771099433,y=0.18691552708330927 -a=pan,b=wye,i=9244,x=0.2905201186571721,y=0.43425495374391 -a=pan,b=zee,i=9245,x=0.29006760780733076,y=0.9489792158642996 -a=wye,b=zee,i=9246,x=0.21902763341829212,y=0.7943599432988762 -a=wye,b=pan,i=9247,x=0.8348408249460723,y=0.45052677140725683 -a=zee,b=eks,i=9248,x=0.26940493140011434,y=0.9610522390775448 -a=eks,b=hat,i=9249,x=0.39091312069697004,y=0.3308378438144999 -a=hat,b=wye,i=9250,x=0.2762755403834666,y=0.9174844589095804 -a=zee,b=wye,i=9251,x=0.4183886566774483,y=0.9616112086487094 -a=hat,b=pan,i=9252,x=0.03920827797790982,y=0.7576567680032309 -a=zee,b=pan,i=9253,x=0.9673157002999003,y=0.7433452506349982 -a=wye,b=eks,i=9254,x=0.924508714560465,y=0.19996024545680346 -a=eks,b=pan,i=9255,x=0.4613513625777358,y=0.13932504620685293 -a=wye,b=hat,i=9256,x=0.961942362261845,y=0.9395596121676374 -a=zee,b=eks,i=9257,x=0.8279072561096625,y=0.8490761119202441 -a=wye,b=hat,i=9258,x=0.22113630994807887,y=0.04508156412906639 -a=wye,b=hat,i=9259,x=0.5343061739795472,y=0.3925155297434233 -a=hat,b=eks,i=9260,x=0.6027628673680535,y=0.29907777128173474 -a=eks,b=pan,i=9261,x=0.269529051685529,y=0.4796863618360836 -a=wye,b=wye,i=9262,x=0.09116905745671411,y=0.6431265280186941 -a=pan,b=wye,i=9263,x=0.18094504922785837,y=0.6552196736780825 -a=hat,b=zee,i=9264,x=0.023456730670551096,y=0.1975931324733875 -a=zee,b=pan,i=9265,x=0.007623684349103987,y=0.07551340520872629 -a=eks,b=eks,i=9266,x=0.17817560372002472,y=0.49956704475839064 -a=pan,b=pan,i=9267,x=0.04690229807589086,y=0.1929566014362788 -a=zee,b=eks,i=9268,x=0.3470560427863578,y=0.3275172947002548 -a=zee,b=hat,i=9269,x=0.5409419616161683,y=0.3958039424067026 -a=pan,b=pan,i=9270,x=0.1487528959524752,y=0.4469367832007153 -a=pan,b=wye,i=9271,x=0.24595184073704124,y=0.48817169012236983 -a=hat,b=eks,i=9272,x=0.8194471147409262,y=0.06810057179235018 -a=hat,b=zee,i=9273,x=0.4611616764401677,y=0.8051508540162687 -a=pan,b=hat,i=9274,x=0.5857275960463182,y=0.1154346418508585 -a=eks,b=wye,i=9275,x=0.09259540108550524,y=0.21275003504178946 -a=zee,b=pan,i=9276,x=0.684545528802376,y=0.5890511399726057 -a=eks,b=zee,i=9277,x=0.8931272247478754,y=0.9108980465393053 -a=wye,b=hat,i=9278,x=0.4908268342979165,y=0.1022036634900918 -a=hat,b=hat,i=9279,x=0.2967586295179133,y=0.28353991288502345 -a=eks,b=wye,i=9280,x=0.7214470432782933,y=0.3196837745294565 -a=zee,b=eks,i=9281,x=0.5357035342523082,y=0.4498861677161915 -a=hat,b=pan,i=9282,x=0.7019948002783253,y=0.631688166262754 -a=wye,b=eks,i=9283,x=0.3146560370204342,y=0.9598216687345593 -a=wye,b=wye,i=9284,x=0.6806389501871987,y=0.6623844311258401 -a=hat,b=hat,i=9285,x=0.4737832453554822,y=0.41355006089770063 -a=eks,b=wye,i=9286,x=0.9872826301151825,y=0.2639815365115553 -a=eks,b=zee,i=9287,x=0.8397334293185692,y=0.5061677209701542 -a=zee,b=hat,i=9288,x=0.21107288266906798,y=0.6423943950594364 -a=wye,b=hat,i=9289,x=0.9539770475173472,y=0.33368774127122824 -a=pan,b=zee,i=9290,x=0.3192448675700893,y=0.44823866938306645 -a=zee,b=wye,i=9291,x=0.9454063570448517,y=0.8966671326133628 -a=pan,b=wye,i=9292,x=0.23598454792188905,y=0.19161925423381865 -a=eks,b=wye,i=9293,x=0.7765814539440627,y=0.3128212435040012 -a=eks,b=pan,i=9294,x=0.6560425166942336,y=0.6540980604466382 -a=zee,b=hat,i=9295,x=0.6842327967828038,y=0.22627755842144792 -a=wye,b=wye,i=9296,x=0.4655851206978665,y=0.572270128810435 -a=hat,b=pan,i=9297,x=0.04780798739920045,y=0.884344079010386 -a=wye,b=zee,i=9298,x=0.6400110650985101,y=0.5918078681573676 -a=hat,b=pan,i=9299,x=0.7099587184174139,y=0.026383946823356652 -a=hat,b=pan,i=9300,x=0.8979895176793228,y=0.32530725941578 -a=pan,b=pan,i=9301,x=0.9138183195198948,y=0.7104753541099725 -a=hat,b=eks,i=9302,x=0.8146457149078221,y=0.49936330932918804 -a=pan,b=hat,i=9303,x=0.19068920109866783,y=0.5863544157356678 -a=hat,b=wye,i=9304,x=0.7296704964431727,y=0.7521653716034574 -a=eks,b=zee,i=9305,x=0.06306304065329327,y=0.0425317362399702 -a=hat,b=zee,i=9306,x=0.5892447648917019,y=0.26424215126062567 -a=zee,b=hat,i=9307,x=0.40286235516928426,y=0.8843324963600357 -a=pan,b=hat,i=9308,x=0.6041097470881792,y=0.6019432291571227 -a=hat,b=hat,i=9309,x=0.5418892395718498,y=0.3894965192603561 -a=zee,b=zee,i=9310,x=0.0489167780793065,y=0.1349420473135753 -a=zee,b=hat,i=9311,x=0.9072476732379934,y=0.9064380734997842 -a=zee,b=hat,i=9312,x=0.47773815390175445,y=0.7350455011720012 -a=wye,b=wye,i=9313,x=0.8777070865064334,y=0.688500944696727 -a=zee,b=eks,i=9314,x=0.23207083417195573,y=0.1459854668671191 -a=eks,b=hat,i=9315,x=0.5953234480197771,y=0.17617996349844 -a=hat,b=pan,i=9316,x=0.4588300778601382,y=0.6017358841802433 -a=eks,b=pan,i=9317,x=0.7067142230113493,y=0.8603219297899701 -a=eks,b=wye,i=9318,x=0.8917960222408765,y=0.13297569276200116 -a=zee,b=pan,i=9319,x=0.32868846620305514,y=0.23221497395763813 -a=eks,b=zee,i=9320,x=0.2336595066443039,y=0.5433625711598566 -a=wye,b=wye,i=9321,x=0.08724329840345546,y=0.526071263228722 -a=hat,b=eks,i=9322,x=0.4540531923441389,y=0.08529592575810008 -a=pan,b=eks,i=9323,x=0.015142033208188965,y=0.9025875096361236 -a=eks,b=pan,i=9324,x=0.2776566751941013,y=0.5186679560214653 -a=zee,b=pan,i=9325,x=0.21535440536922212,y=0.5985912955734372 -a=eks,b=zee,i=9326,x=0.9314022909750975,y=0.48900523853727407 -a=pan,b=wye,i=9327,x=0.6213414890218699,y=0.3534669210352892 -a=wye,b=wye,i=9328,x=0.5529670045133065,y=0.3657722177869842 -a=pan,b=pan,i=9329,x=0.709436743485784,y=0.864805283294307 -a=wye,b=hat,i=9330,x=0.7856558845965795,y=0.1735275218393233 -a=wye,b=pan,i=9331,x=0.15157491016759606,y=0.1781007458002013 -a=hat,b=pan,i=9332,x=0.469941809547738,y=0.17916634366371342 -a=zee,b=hat,i=9333,x=0.09066429132809939,y=0.11291661870669667 -a=eks,b=hat,i=9334,x=0.524982507717917,y=0.7739607975739912 -a=zee,b=zee,i=9335,x=0.012865744128303103,y=0.4199812901617862 -a=hat,b=wye,i=9336,x=0.3598356400708439,y=0.6497623418471714 -a=eks,b=wye,i=9337,x=0.967092843190403,y=0.7129610451088223 -a=zee,b=pan,i=9338,x=0.8766283655189672,y=0.8633718650644421 -a=eks,b=wye,i=9339,x=0.3555024023169856,y=0.8712144867378462 -a=pan,b=pan,i=9340,x=0.24667037823231752,y=0.930054068315833 -a=pan,b=eks,i=9341,x=0.9847985606188508,y=0.002920168705884074 -a=wye,b=zee,i=9342,x=0.6598872721679194,y=0.5841487864376177 -a=pan,b=hat,i=9343,x=0.11586150580933774,y=0.8232025034483835 -a=pan,b=eks,i=9344,x=0.23032551308519345,y=0.4668513513037823 -a=zee,b=zee,i=9345,x=0.20721325482748,y=0.034658616763860395 -a=pan,b=zee,i=9346,x=0.16804254918956518,y=0.41515674460320806 -a=wye,b=hat,i=9347,x=0.9555426542676889,y=0.3336472181106118 -a=zee,b=eks,i=9348,x=0.027241967830535785,y=0.6546273692203828 -a=zee,b=hat,i=9349,x=0.39077150740400146,y=0.35499431123174563 -a=pan,b=wye,i=9350,x=0.897415684005392,y=0.0054949420910770375 -a=pan,b=zee,i=9351,x=0.6475971487532642,y=0.2993123271198067 -a=zee,b=wye,i=9352,x=0.25522951350527867,y=0.48668317596678823 -a=hat,b=wye,i=9353,x=0.6279030165419767,y=0.14783115221664478 -a=pan,b=eks,i=9354,x=0.0010353989176113965,y=0.7228482030180055 -a=hat,b=eks,i=9355,x=0.7415812921258672,y=0.5371997970549264 -a=eks,b=zee,i=9356,x=0.3273618744303315,y=0.7034589444097167 -a=eks,b=eks,i=9357,x=0.7638755117313554,y=0.37304708043971646 -a=pan,b=zee,i=9358,x=0.7274485972079328,y=0.027395796712653575 -a=eks,b=pan,i=9359,x=0.726201179013375,y=0.8974974727334436 -a=wye,b=hat,i=9360,x=0.009237964269686039,y=0.6456624352507632 -a=wye,b=eks,i=9361,x=0.9893854310908603,y=0.6762929165737711 -a=pan,b=hat,i=9362,x=0.021355365998413367,y=0.8849112911074679 -a=hat,b=pan,i=9363,x=0.24144536935297445,y=0.2588538401367807 -a=pan,b=eks,i=9364,x=0.20906377399579568,y=0.26492309174424467 -a=hat,b=zee,i=9365,x=0.2716712677588158,y=0.7480148549966943 -a=zee,b=eks,i=9366,x=0.564783511562303,y=0.8736158892678358 -a=zee,b=zee,i=9367,x=0.5210119669704992,y=0.6601277179108643 -a=zee,b=hat,i=9368,x=0.09391533461405244,y=0.8033292481660601 -a=eks,b=pan,i=9369,x=0.47109046860253434,y=0.7533692481022667 -a=eks,b=wye,i=9370,x=0.45402522126988876,y=0.3506046491270858 -a=hat,b=wye,i=9371,x=0.3288376239355628,y=0.9711363417175689 -a=hat,b=zee,i=9372,x=0.04803081055457803,y=0.9237983355638324 -a=hat,b=eks,i=9373,x=0.13505404407952326,y=0.9843128058775863 -a=hat,b=zee,i=9374,x=0.1687355361920142,y=0.5136082981945438 -a=zee,b=wye,i=9375,x=0.5866436779364502,y=0.49139965761407123 -a=hat,b=eks,i=9376,x=0.7413691108319418,y=0.6875522126693252 -a=wye,b=eks,i=9377,x=0.8850578085185158,y=0.12984077539965466 -a=zee,b=pan,i=9378,x=0.07698056466866121,y=0.3418330456253533 -a=hat,b=hat,i=9379,x=0.6567829350592936,y=0.42166759832139167 -a=eks,b=pan,i=9380,x=0.2066941665945501,y=0.34630072002937273 -a=hat,b=hat,i=9381,x=0.3011098756670775,y=0.8241475200392532 -a=hat,b=eks,i=9382,x=0.1595168703472838,y=0.9632363240817852 -a=eks,b=eks,i=9383,x=0.316374240183787,y=0.894701260202343 -a=eks,b=eks,i=9384,x=0.6925067244014451,y=0.5943855874672127 -a=pan,b=hat,i=9385,x=0.8929259869658823,y=0.13255544013678944 -a=eks,b=hat,i=9386,x=0.9458375043305679,y=0.0711986701172268 -a=pan,b=eks,i=9387,x=0.42414161600219213,y=0.8727447652075521 -a=pan,b=zee,i=9388,x=0.16102926470006396,y=0.7076666589050068 -a=eks,b=wye,i=9389,x=0.38573189008702746,y=0.7862235218204946 -a=pan,b=eks,i=9390,x=0.009185746132245987,y=0.9615590214943641 -a=hat,b=eks,i=9391,x=0.6541239333254625,y=0.4465038993768474 -a=zee,b=pan,i=9392,x=0.7293619733667298,y=0.9075863768811903 -a=eks,b=zee,i=9393,x=0.5270647942493862,y=0.3208644368195749 -a=wye,b=wye,i=9394,x=0.10611623011471227,y=0.3957794249815757 -a=wye,b=pan,i=9395,x=0.04167582918996382,y=0.9345423545353554 -a=zee,b=pan,i=9396,x=0.6285537391072125,y=0.9531200799497426 -a=eks,b=wye,i=9397,x=0.22691889482992367,y=0.821434358932521 -a=pan,b=wye,i=9398,x=0.8650573724586973,y=0.5778302746561125 -a=wye,b=zee,i=9399,x=0.4320795547957027,y=0.23858094801157526 -a=hat,b=wye,i=9400,x=0.2940385536354171,y=0.23832353705367249 -a=zee,b=eks,i=9401,x=0.42923024441857793,y=0.17544011645116253 -a=hat,b=pan,i=9402,x=0.050855729288162066,y=0.7490381251654518 -a=zee,b=eks,i=9403,x=0.2945793937707598,y=0.7184571034764143 -a=eks,b=pan,i=9404,x=0.18971476661419018,y=0.8587967149525896 -a=hat,b=hat,i=9405,x=0.8781331270774858,y=0.22282398620968602 -a=zee,b=pan,i=9406,x=0.6365186667658354,y=0.8944728240200203 -a=eks,b=zee,i=9407,x=0.6393982916726031,y=0.42468859570082085 -a=pan,b=wye,i=9408,x=0.12426748935771803,y=0.0845763991164874 -a=hat,b=hat,i=9409,x=0.8968671619037487,y=0.17554843424501398 -a=hat,b=wye,i=9410,x=0.008668685325378456,y=0.5585204180254394 -a=hat,b=pan,i=9411,x=0.9186069486489989,y=0.8447036557059203 -a=zee,b=wye,i=9412,x=0.20193830450565098,y=0.5853957332725758 -a=pan,b=wye,i=9413,x=0.9095023537816819,y=0.03850690961125591 -a=hat,b=eks,i=9414,x=0.2255272659717531,y=0.35264234784519843 -a=zee,b=hat,i=9415,x=0.008811072137013154,y=0.035134463676480765 -a=eks,b=zee,i=9416,x=0.25375738274931314,y=0.2401418182493137 -a=hat,b=hat,i=9417,x=0.9120549045686616,y=0.8777751478548385 -a=eks,b=zee,i=9418,x=0.6260065420723087,y=0.5130847407197059 -a=wye,b=eks,i=9419,x=0.05078132617198228,y=0.6850739609021935 -a=wye,b=hat,i=9420,x=0.5546625744389891,y=0.592423843346026 -a=eks,b=pan,i=9421,x=0.3027881637101668,y=0.6808643872207955 -a=wye,b=wye,i=9422,x=0.37276454834771744,y=0.8714783706587489 -a=wye,b=pan,i=9423,x=0.7419375666814781,y=0.637584961040595 -a=zee,b=wye,i=9424,x=0.7703279734371525,y=0.06486561364647381 -a=hat,b=eks,i=9425,x=0.5549660221796285,y=0.025089141119986502 -a=hat,b=wye,i=9426,x=0.09307376603254536,y=0.9353448863380895 -a=zee,b=hat,i=9427,x=0.1030256845979749,y=0.7734068134003184 -a=zee,b=hat,i=9428,x=0.653199130802959,y=0.6335896172568141 -a=zee,b=hat,i=9429,x=0.532354384202152,y=0.6240035856800994 -a=zee,b=wye,i=9430,x=0.34274658023426774,y=0.30318681846915607 -a=zee,b=zee,i=9431,x=0.5467923659024335,y=0.7749657540239817 -a=zee,b=eks,i=9432,x=0.011838772084611482,y=0.1275339102058447 -a=pan,b=eks,i=9433,x=0.8206211659130856,y=0.3064654802677319 -a=wye,b=hat,i=9434,x=0.017191670800521974,y=0.7085199387051128 -a=eks,b=wye,i=9435,x=0.06360578109666282,y=0.46325468037532036 -a=hat,b=wye,i=9436,x=0.7601470639179305,y=0.659295809995321 -a=wye,b=eks,i=9437,x=0.9367938724373632,y=0.017440063316899512 -a=eks,b=wye,i=9438,x=0.08469295491745277,y=0.6859916432738016 -a=pan,b=pan,i=9439,x=0.8916122427540487,y=0.3044045541494258 -a=wye,b=zee,i=9440,x=0.5929171430130797,y=0.7244452361008757 -a=eks,b=pan,i=9441,x=0.6555419304461224,y=0.8327927199446215 -a=hat,b=zee,i=9442,x=0.3102917611279977,y=0.1420968126103015 -a=pan,b=wye,i=9443,x=0.5029377247494847,y=0.13904388591573225 -a=zee,b=pan,i=9444,x=0.09343968982332573,y=0.08259490069798114 -a=zee,b=zee,i=9445,x=0.7881482118621499,y=0.14841414165625988 -a=hat,b=wye,i=9446,x=0.17230938096585302,y=0.4547425422305543 -a=hat,b=wye,i=9447,x=0.9179072696408536,y=0.07438240520747308 -a=pan,b=zee,i=9448,x=0.1174681478790296,y=0.24900650669165836 -a=hat,b=wye,i=9449,x=0.47777327288439886,y=0.6489946706089305 -a=pan,b=wye,i=9450,x=0.012891972793683926,y=0.6683256849475698 -a=eks,b=eks,i=9451,x=0.3293644408777492,y=0.4858482434549475 -a=eks,b=hat,i=9452,x=0.06728855986596627,y=0.0225203259981267 -a=zee,b=wye,i=9453,x=0.6954345063830266,y=0.39093627278723897 -a=eks,b=eks,i=9454,x=0.6561623394687102,y=0.8733561225304062 -a=hat,b=hat,i=9455,x=0.7967671268259048,y=0.9988457558727984 -a=eks,b=hat,i=9456,x=0.3026733411299638,y=0.009039229737229593 -a=hat,b=zee,i=9457,x=0.048573658961714505,y=0.6212752707665637 -a=hat,b=eks,i=9458,x=0.3567374350316811,y=0.5763840507853728 -a=wye,b=hat,i=9459,x=0.6222194995601943,y=0.7094551547783764 -a=zee,b=zee,i=9460,x=0.20547852694177993,y=0.6209825112942681 -a=zee,b=zee,i=9461,x=0.9078512942646408,y=0.457893412939096 -a=zee,b=pan,i=9462,x=0.3728674304211519,y=0.12798138723542984 -a=eks,b=zee,i=9463,x=0.9866166648988529,y=0.17872754778259448 -a=eks,b=hat,i=9464,x=0.8408137777713087,y=0.7528260965110807 -a=eks,b=zee,i=9465,x=0.33674248998876777,y=0.10313732374119522 -a=zee,b=hat,i=9466,x=0.7785160988373221,y=0.9149400917302326 -a=pan,b=pan,i=9467,x=0.6408147454849812,y=0.8180389929482121 -a=eks,b=wye,i=9468,x=0.4450915490400188,y=0.8824862158939643 -a=hat,b=eks,i=9469,x=0.7744532386038095,y=0.8239793457702959 -a=eks,b=zee,i=9470,x=0.3380551755097342,y=0.9960822877834217 -a=pan,b=wye,i=9471,x=0.19841074697657957,y=0.585082594173758 -a=pan,b=wye,i=9472,x=0.24546532083386097,y=0.7604287018742679 -a=zee,b=wye,i=9473,x=0.7950056898263439,y=0.3564547166869826 -a=zee,b=hat,i=9474,x=0.647685209897895,y=0.8836053801968514 -a=hat,b=wye,i=9475,x=0.6632008131941411,y=0.4341909885612145 -a=wye,b=hat,i=9476,x=0.3069739795755916,y=0.8833844662300937 -a=zee,b=wye,i=9477,x=0.8339299679122139,y=0.3475658687207359 -a=pan,b=pan,i=9478,x=0.061365475952511406,y=0.818350624274383 -a=zee,b=pan,i=9479,x=0.52329697201472,y=0.43298303575134856 -a=wye,b=zee,i=9480,x=0.8749976408632957,y=0.6548646339660915 -a=wye,b=pan,i=9481,x=0.5642187826825651,y=0.34484130192623874 -a=zee,b=wye,i=9482,x=0.8624170951363191,y=0.39655837242080083 -a=wye,b=zee,i=9483,x=0.8152545316901858,y=0.805340784776813 -a=wye,b=pan,i=9484,x=0.6372765009756718,y=0.9390350932955009 -a=pan,b=hat,i=9485,x=0.9951942673622418,y=0.24029104242438515 -a=zee,b=pan,i=9486,x=0.5811802467756935,y=0.2889437683040591 -a=zee,b=pan,i=9487,x=0.4993989664425713,y=0.05807295824271008 -a=hat,b=eks,i=9488,x=0.2735790874645423,y=0.9082260037697276 -a=pan,b=eks,i=9489,x=0.6975989077779615,y=0.09410891805021981 -a=eks,b=wye,i=9490,x=0.3047068029924873,y=0.45677847562149443 -a=eks,b=hat,i=9491,x=0.8064028259566911,y=0.23750639868456547 -a=wye,b=pan,i=9492,x=0.8385671784002926,y=0.16511708685555704 -a=pan,b=zee,i=9493,x=0.14382267645371283,y=0.30310643623917777 -a=wye,b=zee,i=9494,x=0.1971697941455559,y=0.9572851470177893 -a=pan,b=zee,i=9495,x=0.7883366151370216,y=0.3948433476009946 -a=wye,b=eks,i=9496,x=0.6409095653823011,y=0.9562448788009965 -a=eks,b=pan,i=9497,x=0.5364899166331132,y=0.2068390306785195 -a=zee,b=zee,i=9498,x=0.8078967452757337,y=0.3300003462355645 -a=pan,b=hat,i=9499,x=0.6409505992060831,y=0.8924125083478576 -a=eks,b=eks,i=9500,x=0.7367548086654266,y=0.1195022439518929 -a=wye,b=hat,i=9501,x=0.7080642380603698,y=0.2215162974776509 -a=eks,b=pan,i=9502,x=0.16573428170345306,y=0.41898077136905765 -a=eks,b=wye,i=9503,x=0.36724763207097333,y=0.20835207321889548 -a=wye,b=zee,i=9504,x=0.39741592004944626,y=0.9293543997296885 -a=pan,b=wye,i=9505,x=0.9560872444441273,y=0.07372493247854506 -a=hat,b=zee,i=9506,x=0.8278984427570538,y=0.42279600093868386 -a=pan,b=zee,i=9507,x=0.7813724544334408,y=0.8453351473597829 -a=wye,b=wye,i=9508,x=0.7441125682394683,y=0.7008423538608134 -a=pan,b=wye,i=9509,x=0.9777133094457836,y=0.8770140891389367 -a=pan,b=zee,i=9510,x=0.5805152904440047,y=0.7292694938520734 -a=hat,b=zee,i=9511,x=0.6147425358709413,y=0.07609273803938887 -a=pan,b=eks,i=9512,x=0.8889876510183636,y=0.5398130117495377 -a=zee,b=hat,i=9513,x=0.9304009976201171,y=0.7707216462443467 -a=eks,b=wye,i=9514,x=0.30105501363454046,y=0.6134456172343001 -a=zee,b=zee,i=9515,x=0.49203474036972605,y=0.8884765700634494 -a=pan,b=zee,i=9516,x=0.19069582221512293,y=0.18374946422400285 -a=hat,b=zee,i=9517,x=0.7026133177880014,y=0.6466476553765019 -a=zee,b=zee,i=9518,x=0.9360532474806631,y=0.3150191945268458 -a=hat,b=hat,i=9519,x=0.7398790596655229,y=0.39271231521470007 -a=hat,b=wye,i=9520,x=0.4732400431646818,y=0.9988992430260081 -a=eks,b=wye,i=9521,x=0.5220677770619295,y=0.22799544453185772 -a=zee,b=zee,i=9522,x=0.42835064707125325,y=0.5919336704352758 -a=hat,b=wye,i=9523,x=0.9605618074441231,y=0.4152052252584968 -a=zee,b=eks,i=9524,x=0.9170688313846707,y=0.5069375781460218 -a=wye,b=pan,i=9525,x=0.3863168227783099,y=0.9070811441436243 -a=pan,b=pan,i=9526,x=0.2141091210993753,y=0.3444756388829696 -a=pan,b=pan,i=9527,x=0.8963731964519087,y=0.4182877370577519 -a=zee,b=wye,i=9528,x=0.8576581178453184,y=0.5844216436491058 -a=hat,b=pan,i=9529,x=0.15630461982613209,y=0.4213024290362597 -a=wye,b=pan,i=9530,x=0.9935514622913653,y=0.0905032997544325 -a=hat,b=hat,i=9531,x=0.6515604108858241,y=0.1838995493742861 -a=wye,b=eks,i=9532,x=0.7441241444485516,y=0.07237060435987241 -a=hat,b=zee,i=9533,x=0.14919839526856782,y=0.36262847729045855 -a=pan,b=zee,i=9534,x=0.028605382208390595,y=0.3310651782769932 -a=eks,b=eks,i=9535,x=0.2897105250506825,y=0.7327433725996669 -a=wye,b=pan,i=9536,x=0.3206273570986442,y=0.6278333197115907 -a=pan,b=pan,i=9537,x=0.6651951277546836,y=0.04848147036578743 -a=zee,b=hat,i=9538,x=0.6252849020303484,y=0.6594304208970674 -a=hat,b=pan,i=9539,x=0.19370943950685016,y=0.9984558689466796 -a=pan,b=hat,i=9540,x=0.9246863327027597,y=0.8632603228617942 -a=hat,b=eks,i=9541,x=0.4067481238813502,y=0.23429602829888707 -a=wye,b=pan,i=9542,x=0.021183317661808254,y=0.17173704813590862 -a=hat,b=wye,i=9543,x=0.5871893596056772,y=0.4980677307811977 -a=zee,b=hat,i=9544,x=0.8363252040733755,y=0.9066361832913213 -a=hat,b=wye,i=9545,x=0.8237931228490942,y=0.6154262745221335 -a=eks,b=pan,i=9546,x=0.40720117438767467,y=0.23973575256875324 -a=zee,b=hat,i=9547,x=0.262730021858643,y=0.9775392644170577 -a=eks,b=eks,i=9548,x=0.18870561616460124,y=0.39344511734853893 -a=hat,b=pan,i=9549,x=0.810156100508244,y=0.8042316538504537 -a=eks,b=pan,i=9550,x=0.15708603238162966,y=0.1775120949821959 -a=wye,b=pan,i=9551,x=0.27897262749013574,y=0.6810625461380688 -a=wye,b=hat,i=9552,x=0.7096131782065784,y=0.9809388281353744 -a=wye,b=zee,i=9553,x=0.7419668715219193,y=0.8915237603968896 -a=pan,b=hat,i=9554,x=0.3423989249268735,y=0.9243111067539105 -a=hat,b=zee,i=9555,x=0.24555292038029897,y=0.48675495523019463 -a=pan,b=wye,i=9556,x=0.24636402971605553,y=0.5875667064956803 -a=hat,b=hat,i=9557,x=0.0708280418080367,y=0.028042679168150064 -a=zee,b=pan,i=9558,x=0.6684221558470672,y=0.30650078371682876 -a=zee,b=hat,i=9559,x=0.43239927669791367,y=0.9087149456158999 -a=hat,b=eks,i=9560,x=0.4502257867908256,y=0.24215826461552248 -a=hat,b=pan,i=9561,x=0.3883496618282979,y=0.22856613973468343 -a=pan,b=zee,i=9562,x=0.38705906045142546,y=0.8201861527861242 -a=wye,b=hat,i=9563,x=0.7048435545008259,y=0.48292367120675417 -a=wye,b=wye,i=9564,x=0.31482422203360294,y=0.7773413323819734 -a=eks,b=wye,i=9565,x=0.9044412102611812,y=0.9981501201118028 -a=eks,b=pan,i=9566,x=0.8603999193559607,y=0.050257998909329804 -a=hat,b=pan,i=9567,x=0.3290021077530395,y=0.39186940599147513 -a=hat,b=hat,i=9568,x=0.5173577930271901,y=0.5140354310886103 -a=eks,b=wye,i=9569,x=0.7320928489540067,y=0.32241117771050576 -a=zee,b=pan,i=9570,x=0.6962209074556881,y=0.9192719817135738 -a=pan,b=hat,i=9571,x=0.888257035194179,y=0.2504282311488486 -a=eks,b=eks,i=9572,x=0.9118388496610922,y=0.4477922591240877 -a=eks,b=eks,i=9573,x=0.6740019306244561,y=0.08236636121482144 -a=wye,b=hat,i=9574,x=0.0519270658523715,y=0.5083523326544599 -a=eks,b=zee,i=9575,x=0.43349880702663446,y=0.2019764764745724 -a=eks,b=wye,i=9576,x=0.40205714986858077,y=0.4741982385845239 -a=pan,b=wye,i=9577,x=0.881168878098415,y=0.19056106338416623 -a=hat,b=pan,i=9578,x=0.7487655114338957,y=0.17555433868225578 -a=hat,b=hat,i=9579,x=0.8966618053662483,y=0.4330076918462582 -a=zee,b=pan,i=9580,x=0.7965009504831406,y=0.7113454506506395 -a=zee,b=hat,i=9581,x=0.2752580210770491,y=0.38383648901881584 -a=zee,b=zee,i=9582,x=0.05859657717284972,y=0.4628784062589941 -a=eks,b=wye,i=9583,x=0.8996740267247002,y=0.5650994189598781 -a=pan,b=eks,i=9584,x=0.02695408257021037,y=0.29013109754146693 -a=eks,b=pan,i=9585,x=0.4535709808960595,y=0.5806226415527737 -a=wye,b=zee,i=9586,x=0.5222675900946373,y=0.2730687743275988 -a=hat,b=wye,i=9587,x=0.8298282901710073,y=0.4244293086366463 -a=zee,b=pan,i=9588,x=0.6700466485802432,y=0.8589272032654192 -a=eks,b=zee,i=9589,x=0.9276643978084914,y=0.5258608330900789 -a=zee,b=wye,i=9590,x=0.8441314279623635,y=0.9332236415562302 -a=eks,b=hat,i=9591,x=0.4827772018239752,y=0.5265209579835296 -a=eks,b=zee,i=9592,x=0.26199786487068166,y=0.6277586753372824 -a=pan,b=zee,i=9593,x=0.5450234908021439,y=0.08615595529756348 -a=pan,b=zee,i=9594,x=0.23590110682049703,y=0.4376160303971274 -a=eks,b=eks,i=9595,x=0.28340752983264006,y=0.11403963974075082 -a=zee,b=eks,i=9596,x=0.35304408286489164,y=0.8124829013597039 -a=pan,b=eks,i=9597,x=0.12573249703948852,y=0.7661395734572027 -a=wye,b=wye,i=9598,x=0.5312315260758368,y=0.8829573415823095 -a=zee,b=zee,i=9599,x=0.5367647772694465,y=0.8214571633873584 -a=pan,b=eks,i=9600,x=0.014723374949171641,y=0.5395465432733608 -a=wye,b=hat,i=9601,x=0.07895223840580223,y=0.194977597106609 -a=pan,b=pan,i=9602,x=0.8253467012158633,y=0.1789489998930841 -a=wye,b=hat,i=9603,x=0.8921240644062436,y=0.4426730752788607 -a=zee,b=wye,i=9604,x=0.06643820319339155,y=0.53243917974831 -a=zee,b=eks,i=9605,x=0.20698996963521232,y=0.1727878106962335 -a=hat,b=wye,i=9606,x=0.8834303299307495,y=0.5688694060075045 -a=pan,b=wye,i=9607,x=0.7447919202299266,y=0.288491034452374 -a=wye,b=hat,i=9608,x=0.5353991342820382,y=0.17933052450743758 -a=wye,b=eks,i=9609,x=0.6154267547093157,y=0.6251702670753683 -a=wye,b=wye,i=9610,x=0.6498025682619308,y=0.7373575543454602 -a=pan,b=pan,i=9611,x=0.5949770409017805,y=0.12908671407875727 -a=pan,b=hat,i=9612,x=0.33776075209807155,y=0.9036967387336143 -a=wye,b=wye,i=9613,x=0.22534868678381625,y=0.2948136458395363 -a=zee,b=hat,i=9614,x=0.18625473663791048,y=0.9908832589746321 -a=wye,b=pan,i=9615,x=0.9704362849821679,y=0.7056997811176895 -a=wye,b=pan,i=9616,x=0.045274112402005295,y=0.927169630245143 -a=wye,b=eks,i=9617,x=0.47705336261321385,y=0.6750550500462088 -a=hat,b=hat,i=9618,x=0.12470215534695595,y=0.6384166019909083 -a=zee,b=eks,i=9619,x=0.2581941043200088,y=0.9649567414630514 -a=eks,b=pan,i=9620,x=0.9018226733942377,y=0.36177533283317176 -a=eks,b=wye,i=9621,x=0.9710728242015396,y=0.03785169422146961 -a=eks,b=hat,i=9622,x=0.3797960123033828,y=0.8885266797541085 -a=wye,b=wye,i=9623,x=0.8866788918745252,y=0.1725138886130947 -a=pan,b=wye,i=9624,x=0.7133865698466841,y=0.929260666330654 -a=zee,b=eks,i=9625,x=0.4926378355160854,y=0.7904306245961183 -a=hat,b=zee,i=9626,x=0.6958926586419276,y=0.9430927470576268 -a=eks,b=pan,i=9627,x=0.835956453698831,y=0.9007142296516358 -a=eks,b=eks,i=9628,x=0.6999306667567604,y=0.780471447448193 -a=pan,b=wye,i=9629,x=0.09405147784147772,y=0.11479025012357491 -a=pan,b=pan,i=9630,x=0.5521126309556411,y=0.9964281092981838 -a=pan,b=wye,i=9631,x=0.05531336390926278,y=0.03713539762104867 -a=pan,b=eks,i=9632,x=0.06596720074216122,y=0.5047584331504461 -a=pan,b=hat,i=9633,x=0.7402115896026022,y=0.8286389697202792 -a=pan,b=wye,i=9634,x=0.24820023272983005,y=0.23862519520811787 -a=hat,b=hat,i=9635,x=0.46092562373997625,y=0.6247131098820621 -a=pan,b=zee,i=9636,x=0.28131833297516473,y=0.8846710544611799 -a=pan,b=wye,i=9637,x=0.8663800328522322,y=0.9391569730896534 -a=pan,b=hat,i=9638,x=0.833781456495762,y=0.7668042837631657 -a=eks,b=pan,i=9639,x=0.382030344664966,y=0.7882388680685686 -a=hat,b=hat,i=9640,x=0.463917278383292,y=0.3511187165916906 -a=eks,b=wye,i=9641,x=0.529202227506829,y=0.8125205279022973 -a=pan,b=hat,i=9642,x=0.9841563799754587,y=0.7384543484249447 -a=eks,b=wye,i=9643,x=0.4320217008326096,y=0.9206705868869096 -a=zee,b=wye,i=9644,x=0.44428785284867134,y=0.5020097257793937 -a=hat,b=hat,i=9645,x=0.9504824754631439,y=0.09348851365055577 -a=wye,b=zee,i=9646,x=0.33420875392550375,y=0.5893334569374644 -a=eks,b=zee,i=9647,x=0.5673775461311286,y=0.12307074649995897 -a=hat,b=pan,i=9648,x=0.622994461222752,y=0.24151966026299154 -a=eks,b=eks,i=9649,x=0.5350085360772315,y=0.172869985141348 -a=pan,b=wye,i=9650,x=0.6754011861080255,y=0.05797717400310154 -a=hat,b=wye,i=9651,x=0.3235716165591942,y=0.6778947432413094 -a=zee,b=hat,i=9652,x=0.929634631262683,y=0.6531235392615523 -a=zee,b=zee,i=9653,x=0.0005486114815762555,y=0.7390531741942926 -a=wye,b=eks,i=9654,x=0.2797016068787569,y=0.2814263099253008 -a=pan,b=zee,i=9655,x=0.4057734719060324,y=0.15139105154457277 -a=eks,b=hat,i=9656,x=0.7989570844648637,y=0.18643578362186397 -a=zee,b=wye,i=9657,x=0.3194817450421683,y=0.16543264401690605 -a=pan,b=zee,i=9658,x=0.5277143419555844,y=0.564254772210993 -a=pan,b=pan,i=9659,x=0.2294759703953444,y=0.9048171749557317 -a=zee,b=pan,i=9660,x=0.7009420239615597,y=0.7800651878215885 -a=hat,b=eks,i=9661,x=0.953827560931939,y=0.185884517258452 -a=eks,b=hat,i=9662,x=0.39474659738679696,y=0.43059711110253074 -a=eks,b=wye,i=9663,x=0.4372348974243785,y=0.10476776917399111 -a=zee,b=zee,i=9664,x=0.7236352219650497,y=0.08403018416427377 -a=eks,b=hat,i=9665,x=0.05892665049965862,y=0.9092582016648947 -a=wye,b=hat,i=9666,x=0.060690152753413606,y=0.7684174554192018 -a=pan,b=zee,i=9667,x=0.4770802050437122,y=0.3612321845191586 -a=eks,b=eks,i=9668,x=0.9444367104990204,y=0.4453839788188664 -a=pan,b=pan,i=9669,x=0.1622773559553956,y=0.2408391953166471 -a=zee,b=hat,i=9670,x=0.8623108841707915,y=0.5103999923687886 -a=pan,b=eks,i=9671,x=0.6246995141336152,y=0.9570445916327326 -a=zee,b=hat,i=9672,x=0.1269462523668624,y=0.5944133371399858 -a=hat,b=eks,i=9673,x=0.4200506848108232,y=0.5676463512767541 -a=pan,b=wye,i=9674,x=0.5610478784857535,y=0.03318888871240755 -a=eks,b=zee,i=9675,x=0.20265536384504856,y=0.6923879412730425 -a=eks,b=eks,i=9676,x=0.3552193074991099,y=0.48796093863435663 -a=zee,b=zee,i=9677,x=0.7404662009786069,y=0.11704524348651668 -a=pan,b=eks,i=9678,x=0.808264671158733,y=0.7958171364354866 -a=eks,b=zee,i=9679,x=0.7801771579924318,y=0.8039168775444497 -a=zee,b=hat,i=9680,x=0.8361585788416193,y=0.5904904054602013 -a=pan,b=zee,i=9681,x=0.0881721087846773,y=0.6134254647769964 -a=zee,b=zee,i=9682,x=0.790057108611216,y=0.6026603017260809 -a=eks,b=eks,i=9683,x=0.591870649889634,y=0.03952287487189998 -a=hat,b=zee,i=9684,x=0.2251288541796853,y=0.0914353575236524 -a=hat,b=zee,i=9685,x=0.9783350755125275,y=0.6710234655696609 -a=eks,b=wye,i=9686,x=0.2325134660144058,y=0.44098000477056654 -a=eks,b=hat,i=9687,x=0.11435792053370386,y=0.3592405692612377 -a=eks,b=pan,i=9688,x=0.013751121997101046,y=0.21071503600234553 -a=eks,b=eks,i=9689,x=0.1983455661823349,y=0.3353712062497688 -a=pan,b=zee,i=9690,x=0.8642706624839454,y=0.5020203992558137 -a=zee,b=eks,i=9691,x=0.2257785909803941,y=0.7399889531061412 -a=pan,b=zee,i=9692,x=0.518772161497821,y=0.5305276254149733 -a=pan,b=wye,i=9693,x=0.5247714869016064,y=0.20906476377409644 -a=hat,b=pan,i=9694,x=0.11556338152672874,y=0.33174635478223324 -a=zee,b=eks,i=9695,x=0.7368043937171205,y=0.19022664969335668 -a=hat,b=eks,i=9696,x=0.45233728948031515,y=0.8621802693175313 -a=zee,b=hat,i=9697,x=0.609947885859063,y=0.5639255760997719 -a=pan,b=pan,i=9698,x=0.8228841939557919,y=0.31636476080699183 -a=pan,b=eks,i=9699,x=0.5797850274201329,y=0.8706915943068293 -a=wye,b=eks,i=9700,x=0.5883942014435751,y=0.4251422885431637 -a=pan,b=hat,i=9701,x=0.6223555273725319,y=0.23801172242502744 -a=hat,b=pan,i=9702,x=0.47371944906908836,y=0.8829841445810995 -a=eks,b=pan,i=9703,x=0.6629053709037614,y=0.2666968632816322 -a=hat,b=wye,i=9704,x=0.0020992599710109028,y=0.7828207905256124 -a=wye,b=eks,i=9705,x=0.8295502211195385,y=0.2601557950975687 -a=pan,b=pan,i=9706,x=0.49968159892099573,y=0.8538626308087385 -a=hat,b=zee,i=9707,x=0.452146182413364,y=0.6070096571093107 -a=hat,b=hat,i=9708,x=0.20800822198744873,y=0.6831793769522073 -a=pan,b=hat,i=9709,x=0.37466193491417743,y=0.9006405341772813 -a=pan,b=pan,i=9710,x=0.7926733788975334,y=0.08649107188287852 -a=eks,b=eks,i=9711,x=0.6600637787756933,y=0.8973761456806139 -a=eks,b=pan,i=9712,x=0.6042851641458743,y=0.5283912780602698 -a=pan,b=pan,i=9713,x=0.8335225275262462,y=0.6504888680594751 -a=hat,b=hat,i=9714,x=0.08407860919578702,y=0.6696777791854102 -a=eks,b=eks,i=9715,x=0.6688071850195556,y=0.8479172328203074 -a=eks,b=pan,i=9716,x=0.7699539494161064,y=0.26819674031242324 -a=zee,b=eks,i=9717,x=0.15919097637828838,y=0.1961372512286007 -a=pan,b=eks,i=9718,x=0.764067350428244,y=0.40784722026028675 -a=hat,b=zee,i=9719,x=0.43422195883532855,y=0.21527795148734652 -a=hat,b=wye,i=9720,x=0.18548878820596515,y=0.0823708416566078 -a=eks,b=hat,i=9721,x=0.3055689756821137,y=0.09846251941046569 -a=eks,b=eks,i=9722,x=0.7595314601613131,y=0.33493549394323163 -a=zee,b=eks,i=9723,x=0.6798345440149453,y=0.20549268600871629 -a=pan,b=zee,i=9724,x=0.5536779382214667,y=0.5953194186331342 -a=zee,b=hat,i=9725,x=0.07153658715465838,y=0.3044986057514285 -a=zee,b=eks,i=9726,x=0.7429014874999341,y=0.769520753307292 -a=zee,b=zee,i=9727,x=0.9994904324789629,y=0.9539638011649831 -a=hat,b=eks,i=9728,x=0.8039188324095456,y=0.3485837756125213 -a=zee,b=wye,i=9729,x=0.585248425583051,y=0.8575390870552795 -a=wye,b=zee,i=9730,x=0.21280831790997046,y=0.215168894307449 -a=pan,b=wye,i=9731,x=0.5632993384118764,y=0.039984476208001385 -a=wye,b=wye,i=9732,x=0.8690690369493996,y=0.4780287234110929 -a=pan,b=pan,i=9733,x=0.4805900786042281,y=0.16269527652434412 -a=zee,b=zee,i=9734,x=0.685896959785486,y=0.04306632327231985 -a=eks,b=hat,i=9735,x=0.9365415028222407,y=0.7049316644937267 -a=wye,b=hat,i=9736,x=0.8357032803599334,y=0.5980478941599903 -a=eks,b=wye,i=9737,x=0.9524795937075123,y=0.10018533556749787 -a=eks,b=zee,i=9738,x=0.9571796062292364,y=0.23794282932532718 -a=wye,b=zee,i=9739,x=0.9969978586906577,y=0.12087339658352203 -a=hat,b=hat,i=9740,x=0.6123513158512692,y=0.6254032566567909 -a=wye,b=hat,i=9741,x=0.3852066212224572,y=0.18704182599635633 -a=hat,b=pan,i=9742,x=0.3298562598570899,y=0.07896336383457148 -a=wye,b=eks,i=9743,x=0.9717135336552146,y=0.07632785790260654 -a=wye,b=pan,i=9744,x=0.22511319050031164,y=0.027172244080271968 -a=eks,b=wye,i=9745,x=0.8413814458463156,y=0.3006239950449451 -a=wye,b=eks,i=9746,x=0.8712637246437533,y=0.3533804932864615 -a=hat,b=zee,i=9747,x=0.7487247858158664,y=0.7159053727726352 -a=wye,b=zee,i=9748,x=0.5840196841699298,y=0.4370626364171394 -a=pan,b=zee,i=9749,x=0.34522090703048847,y=0.4157608834458977 -a=hat,b=zee,i=9750,x=0.7718731752355878,y=0.003718233758628786 -a=pan,b=pan,i=9751,x=0.9143236771785547,y=0.25370981239174295 -a=pan,b=pan,i=9752,x=0.49208279855492576,y=0.20454810028776949 -a=pan,b=hat,i=9753,x=0.9706978016906814,y=0.10150626192794265 -a=hat,b=eks,i=9754,x=0.5026259494302875,y=0.8456607478858248 -a=eks,b=zee,i=9755,x=0.5983063482292889,y=0.5332133759436987 -a=hat,b=zee,i=9756,x=0.7064136847926241,y=0.44538611409928863 -a=hat,b=eks,i=9757,x=0.008475751466850423,y=0.28105237534152183 -a=pan,b=zee,i=9758,x=0.17107174260903157,y=0.37907028999046954 -a=eks,b=hat,i=9759,x=0.017723241565128722,y=0.9328595930739089 -a=eks,b=pan,i=9760,x=0.12671066296153322,y=0.5377141169726312 -a=pan,b=pan,i=9761,x=0.5230226494775585,y=0.13327609324548828 -a=hat,b=eks,i=9762,x=0.7178138929211814,y=0.1071446592333627 -a=hat,b=eks,i=9763,x=0.5172215091010056,y=0.5656123978535788 -a=hat,b=zee,i=9764,x=0.7656352275177252,y=0.2648922718032728 -a=eks,b=hat,i=9765,x=0.48052681626037963,y=0.7749660798351525 -a=wye,b=wye,i=9766,x=0.259817607695608,y=0.9840660882388936 -a=zee,b=pan,i=9767,x=0.048130721334256,y=0.7454770180064983 -a=pan,b=eks,i=9768,x=0.20367798282554506,y=0.2900189560591435 -a=hat,b=pan,i=9769,x=0.25924528216321086,y=0.09380722776595263 -a=zee,b=eks,i=9770,x=0.6363426074022088,y=0.4319301718266042 -a=zee,b=zee,i=9771,x=0.3356843529120048,y=0.5926710392808378 -a=zee,b=wye,i=9772,x=0.5622225319493308,y=0.8404440554821954 -a=wye,b=eks,i=9773,x=0.13486296020405042,y=0.1370545330575903 -a=hat,b=hat,i=9774,x=0.35744829640564457,y=0.6788365316031054 -a=hat,b=wye,i=9775,x=0.24625364619227708,y=0.8195103714348378 -a=pan,b=pan,i=9776,x=0.5528717365202791,y=0.6963979512688395 -a=pan,b=pan,i=9777,x=0.2517658835424562,y=0.6092188620965916 -a=zee,b=hat,i=9778,x=0.01504264188606863,y=0.5413773331319965 -a=wye,b=hat,i=9779,x=0.5571763577936231,y=0.008720265560284046 -a=hat,b=eks,i=9780,x=0.09487662655788398,y=0.6514663782722071 -a=hat,b=zee,i=9781,x=0.04241382763446522,y=0.8022615952391015 -a=pan,b=wye,i=9782,x=0.6824468663215681,y=0.48194582894494864 -a=zee,b=zee,i=9783,x=0.9571941589309878,y=0.7438875241555649 -a=zee,b=zee,i=9784,x=0.40696198225113067,y=0.5926120348164292 -a=hat,b=hat,i=9785,x=0.32320628233550797,y=0.8120858769211963 -a=wye,b=eks,i=9786,x=0.36572120295268673,y=0.4315097648133279 -a=pan,b=pan,i=9787,x=0.536020466205729,y=0.36476940865976226 -a=pan,b=zee,i=9788,x=0.18548410059983933,y=0.6484359981774218 -a=pan,b=wye,i=9789,x=0.7500082437438368,y=0.6736777772258289 -a=hat,b=zee,i=9790,x=0.32608913911284954,y=0.06744557277974006 -a=eks,b=hat,i=9791,x=0.6359822783546621,y=0.6518259855994504 -a=zee,b=wye,i=9792,x=0.4220728880621055,y=0.17140084746735773 -a=wye,b=eks,i=9793,x=0.11689471664414974,y=0.1874183258828398 -a=wye,b=pan,i=9794,x=0.4771768380141904,y=0.47458700283464794 -a=zee,b=wye,i=9795,x=0.7547326233775347,y=0.2923139817159962 -a=pan,b=hat,i=9796,x=0.04688093205740962,y=0.50212295582611 -a=hat,b=eks,i=9797,x=0.4801061637157764,y=0.27686764370925665 -a=zee,b=pan,i=9798,x=0.2234307924316019,y=0.9911544429536859 -a=pan,b=wye,i=9799,x=0.9939181050884636,y=0.9933949713028724 -a=eks,b=wye,i=9800,x=0.3244253214963203,y=0.5909643779096942 -a=pan,b=eks,i=9801,x=0.40857906819081213,y=0.9965875678612408 -a=eks,b=zee,i=9802,x=0.03433864233340278,y=0.08512282774742341 -a=hat,b=eks,i=9803,x=0.2637466257688432,y=0.91230604083564 -a=wye,b=hat,i=9804,x=0.9290204990737289,y=0.39908048283039077 -a=pan,b=pan,i=9805,x=0.03871655125329254,y=0.6099093593302857 -a=hat,b=hat,i=9806,x=0.7581986258233882,y=0.6723938004232705 -a=hat,b=zee,i=9807,x=0.734026221575298,y=0.5060212582772865 -a=zee,b=zee,i=9808,x=0.8976695035586633,y=0.8107371161879025 -a=zee,b=eks,i=9809,x=0.9007397692300039,y=0.744200950461551 -a=zee,b=wye,i=9810,x=0.33878497822294384,y=0.19641652801433074 -a=wye,b=eks,i=9811,x=0.3684889443586322,y=0.03845017409345586 -a=eks,b=eks,i=9812,x=0.5467455763864191,y=0.2509547627082641 -a=zee,b=pan,i=9813,x=0.8206715556120792,y=0.8639781360005004 -a=hat,b=wye,i=9814,x=0.34212469593392425,y=0.20687141477181548 -a=hat,b=pan,i=9815,x=0.17753782684157615,y=0.0015438604368104292 -a=pan,b=hat,i=9816,x=0.24876592451844848,y=0.4470518528813471 -a=wye,b=wye,i=9817,x=0.7049827500065716,y=0.70700844125317 -a=zee,b=wye,i=9818,x=0.7922870761657094,y=0.1588053154611868 -a=hat,b=zee,i=9819,x=0.19261418898624927,y=0.050366139741013005 -a=hat,b=pan,i=9820,x=0.5447052480269977,y=0.8699888671698426 -a=eks,b=wye,i=9821,x=0.5189946092707575,y=0.6854994867317263 -a=eks,b=zee,i=9822,x=0.7728584654655655,y=0.8255138151084206 -a=wye,b=hat,i=9823,x=0.7885587074785081,y=0.8643021021880486 -a=wye,b=zee,i=9824,x=0.7856139049382169,y=0.18039878866135772 -a=wye,b=hat,i=9825,x=0.5289400839880876,y=0.015600624873499225 -a=eks,b=pan,i=9826,x=0.2030275078795114,y=0.7367196912046005 -a=wye,b=hat,i=9827,x=0.2296202003399993,y=0.10085387835757498 -a=eks,b=eks,i=9828,x=0.7116944851584103,y=0.4451057001626685 -a=pan,b=pan,i=9829,x=0.1561292001719159,y=0.16006739551266214 -a=zee,b=wye,i=9830,x=0.022447139657367665,y=0.7657756294873818 -a=pan,b=hat,i=9831,x=0.07903067560527932,y=0.06301267712877379 -a=hat,b=hat,i=9832,x=0.6422615702526209,y=0.8249323364395087 -a=zee,b=hat,i=9833,x=0.10035889696290079,y=0.003028321603898987 -a=hat,b=zee,i=9834,x=0.2640449383149195,y=0.37076593348410314 -a=eks,b=wye,i=9835,x=0.5874685326990423,y=0.9287556289542644 -a=wye,b=pan,i=9836,x=0.8763125291386116,y=0.5144780339183038 -a=zee,b=eks,i=9837,x=0.65481575495434,y=0.7500209738973791 -a=eks,b=pan,i=9838,x=0.6496315038661542,y=0.6072257440552286 -a=eks,b=wye,i=9839,x=0.9533298751342247,y=0.023940678831367967 -a=zee,b=wye,i=9840,x=0.2852685772877177,y=0.691521855604441 -a=eks,b=hat,i=9841,x=0.09722173469836548,y=0.36827480828558046 -a=zee,b=wye,i=9842,x=0.9106754203674021,y=0.44421367548499935 -a=zee,b=zee,i=9843,x=0.43260196585756017,y=0.7253288611322654 -a=wye,b=pan,i=9844,x=0.12361870847069467,y=0.8005113079266706 -a=hat,b=pan,i=9845,x=0.75413528558763,y=0.25353880305437526 -a=hat,b=eks,i=9846,x=0.39360425072719285,y=0.9727010611978959 -a=eks,b=eks,i=9847,x=0.36408179966880305,y=0.005301040380198518 -a=zee,b=hat,i=9848,x=0.7494017826915185,y=0.5716008160658336 -a=pan,b=pan,i=9849,x=0.07314118820090576,y=0.6728814876086208 -a=pan,b=pan,i=9850,x=0.03810488399365641,y=0.6301648369861882 -a=pan,b=pan,i=9851,x=0.001361386759249128,y=0.25792849048845146 -a=zee,b=pan,i=9852,x=0.293496771264693,y=0.5611287273924571 -a=wye,b=hat,i=9853,x=0.18556020761414638,y=0.5317691684291805 -a=hat,b=zee,i=9854,x=0.5972939543247376,y=0.4330238320114945 -a=wye,b=pan,i=9855,x=0.6182578764501776,y=0.7655458252282237 -a=pan,b=hat,i=9856,x=0.8102716531871033,y=0.8313089740346422 -a=zee,b=pan,i=9857,x=0.466306200678794,y=0.10723178210789208 -a=eks,b=eks,i=9858,x=0.3843542033136572,y=0.943645502584351 -a=pan,b=eks,i=9859,x=0.25317568143298785,y=0.546876245709709 -a=pan,b=pan,i=9860,x=0.5805216264198891,y=0.7328584964292528 -a=zee,b=hat,i=9861,x=0.2178144713563437,y=0.7034064666412133 -a=pan,b=eks,i=9862,x=0.5507783340308107,y=0.8117197523869161 -a=hat,b=hat,i=9863,x=0.29207020272823003,y=0.3025947324662317 -a=eks,b=wye,i=9864,x=0.11439725902216524,y=0.07940989075873717 -a=eks,b=zee,i=9865,x=0.007673493448299595,y=0.7065454787031791 -a=eks,b=hat,i=9866,x=0.4975899292735726,y=0.004921317195285879 -a=zee,b=eks,i=9867,x=0.02662315353765099,y=0.34265021760387904 -a=pan,b=pan,i=9868,x=0.4854194107628803,y=0.3198466348114496 -a=hat,b=zee,i=9869,x=0.9595189622375838,y=0.501564353037085 -a=zee,b=wye,i=9870,x=0.5215850818114982,y=0.4286413152070583 -a=zee,b=hat,i=9871,x=0.6250842276723021,y=0.6957696470514947 -a=eks,b=eks,i=9872,x=0.2737032476182002,y=0.9151070142618852 -a=hat,b=wye,i=9873,x=0.6217399084607139,y=0.1324645008753036 -a=hat,b=eks,i=9874,x=0.2999314090059486,y=0.6837336951519206 -a=hat,b=zee,i=9875,x=0.748712308729834,y=0.7138449723779594 -a=zee,b=wye,i=9876,x=0.8136200511878549,y=0.8072663619726874 -a=eks,b=zee,i=9877,x=0.4863731414322163,y=0.1035362785381897 -a=pan,b=eks,i=9878,x=0.18800091230044202,y=0.6362766839502966 -a=zee,b=wye,i=9879,x=0.20901422499230626,y=0.4434307845301825 -a=wye,b=eks,i=9880,x=0.7843765179845881,y=0.9652357480134778 -a=zee,b=wye,i=9881,x=0.7862677717692486,y=0.5179978676865895 -a=pan,b=pan,i=9882,x=0.7627902949547447,y=0.19790202442128657 -a=zee,b=zee,i=9883,x=0.9799742729336977,y=0.28992926827299315 -a=zee,b=eks,i=9884,x=0.05789237193201191,y=0.5580049129122333 -a=pan,b=zee,i=9885,x=0.8352546612543933,y=0.29808563018476386 -a=eks,b=zee,i=9886,x=0.6612732451934941,y=0.8821040941341458 -a=zee,b=wye,i=9887,x=0.03800555126962368,y=0.5564528314361259 -a=wye,b=wye,i=9888,x=0.15173705344284016,y=0.8028950342833062 -a=eks,b=pan,i=9889,x=0.4757333931069331,y=0.6709064008045604 -a=zee,b=zee,i=9890,x=0.04473360870043863,y=0.7488172425798428 -a=pan,b=wye,i=9891,x=0.6641701958582154,y=0.045390088141842866 -a=pan,b=wye,i=9892,x=0.6400396948750516,y=0.2741016723165629 -a=wye,b=hat,i=9893,x=0.07086887541312281,y=0.9995743686923368 -a=zee,b=wye,i=9894,x=0.6202100179528263,y=0.9712368683190139 -a=pan,b=hat,i=9895,x=0.8641234318244241,y=0.893546531152826 -a=eks,b=hat,i=9896,x=0.10089977663900951,y=0.40511056317517313 -a=hat,b=pan,i=9897,x=0.1706694949653771,y=0.8882049668710424 -a=hat,b=eks,i=9898,x=0.9012519500883333,y=0.35484059538741897 -a=eks,b=hat,i=9899,x=0.26412200768049177,y=0.8469250510935257 -a=pan,b=eks,i=9900,x=0.18024054303984605,y=0.6531731873858931 -a=wye,b=hat,i=9901,x=0.8417240952654167,y=0.09572553012932483 -a=pan,b=zee,i=9902,x=0.9054776364609202,y=0.6259317176046434 -a=zee,b=hat,i=9903,x=0.9287944849908445,y=0.46735676241217305 -a=pan,b=zee,i=9904,x=0.5481438224523807,y=0.7183018840232132 -a=hat,b=wye,i=9905,x=0.5457200264172307,y=0.29150693945838846 -a=eks,b=pan,i=9906,x=0.19123694955232085,y=0.1361773881166165 -a=pan,b=pan,i=9907,x=0.9805858575888526,y=0.35107718527657394 -a=wye,b=hat,i=9908,x=0.8027037826343639,y=0.02454307542444223 -a=eks,b=hat,i=9909,x=0.5392855167210358,y=0.04490931508757068 -a=hat,b=hat,i=9910,x=0.07042038780612936,y=0.5146702744032997 -a=pan,b=eks,i=9911,x=0.7646508656008143,y=0.9446343254356182 -a=zee,b=wye,i=9912,x=0.4701991772804557,y=0.33405458598495386 -a=pan,b=eks,i=9913,x=0.8147835691088603,y=0.6617843834409757 -a=pan,b=zee,i=9914,x=0.9240645650332355,y=0.8621654329742796 -a=eks,b=zee,i=9915,x=0.6616625895734575,y=0.14135816098909115 -a=wye,b=pan,i=9916,x=0.3042515765931557,y=0.37717959119403555 -a=hat,b=zee,i=9917,x=0.9463027359513574,y=0.20816847808308991 -a=pan,b=zee,i=9918,x=0.062017678365430595,y=0.11198470904331581 -a=zee,b=wye,i=9919,x=0.5748726266575598,y=0.3779573684358648 -a=hat,b=wye,i=9920,x=0.3438737626946553,y=0.5489498676687791 -a=wye,b=wye,i=9921,x=0.6906719134435684,y=0.8555178209462388 -a=hat,b=wye,i=9922,x=0.9728689411167353,y=0.8157055538148639 -a=wye,b=hat,i=9923,x=0.20975092024121644,y=0.6588638151332867 -a=hat,b=pan,i=9924,x=0.3254178263556141,y=0.9839978841946503 -a=eks,b=hat,i=9925,x=0.7275202634311879,y=0.2129559326323187 -a=hat,b=eks,i=9926,x=0.1541309399763774,y=0.3791445762682304 -a=wye,b=pan,i=9927,x=0.8783682319990223,y=0.6933957357140185 -a=eks,b=eks,i=9928,x=0.09936486720481041,y=0.8907110968753766 -a=eks,b=pan,i=9929,x=0.5193758781368972,y=0.409871414549149 -a=pan,b=hat,i=9930,x=0.5677825974360403,y=0.4567634115934158 -a=hat,b=hat,i=9931,x=0.22344053593327007,y=0.3136460886229182 -a=eks,b=wye,i=9932,x=0.7744014553941428,y=0.318908757325456 -a=zee,b=zee,i=9933,x=0.5227775810997735,y=0.10751874257421012 -a=hat,b=hat,i=9934,x=0.20145807804290206,y=0.41891252140867674 -a=wye,b=hat,i=9935,x=0.25910371069218296,y=0.6568892395017885 -a=eks,b=hat,i=9936,x=0.7556816893135765,y=0.7737786856558144 -a=pan,b=zee,i=9937,x=0.5546876661250906,y=0.403008800918636 -a=eks,b=wye,i=9938,x=0.5330080701180497,y=0.22709767551835436 -a=hat,b=wye,i=9939,x=0.208097253807903,y=0.11669571201990991 -a=hat,b=wye,i=9940,x=0.8460880203022336,y=0.8184128241834582 -a=pan,b=hat,i=9941,x=0.5525707759822344,y=0.2904413914902232 -a=pan,b=eks,i=9942,x=0.5757720306595114,y=0.008223444000978186 -a=zee,b=wye,i=9943,x=0.4913245348903704,y=0.25864014284309744 -a=hat,b=pan,i=9944,x=0.09459751273648653,y=0.9299307121234656 -a=zee,b=pan,i=9945,x=0.44635620401009446,y=0.5129261056747197 -a=zee,b=zee,i=9946,x=0.13202631656529729,y=0.021604794833400942 -a=pan,b=hat,i=9947,x=0.8783008100979538,y=0.6172168477305974 -a=pan,b=eks,i=9948,x=0.6047433842453397,y=0.53470873199638 -a=pan,b=pan,i=9949,x=0.12278928201439199,y=0.3424112106292362 -a=hat,b=hat,i=9950,x=0.8421815876690498,y=0.04784842315950366 -a=hat,b=eks,i=9951,x=0.23150439446451176,y=0.362011464774759 -a=hat,b=zee,i=9952,x=0.187055253929304,y=0.7872831108348827 -a=pan,b=eks,i=9953,x=0.9690028290247679,y=0.5626274346583657 -a=eks,b=pan,i=9954,x=0.703550423241368,y=0.8640890526817995 -a=wye,b=wye,i=9955,x=0.1708681258811735,y=0.5385038134896668 -a=wye,b=zee,i=9956,x=0.3732949851683247,y=0.9189853496560824 -a=wye,b=hat,i=9957,x=0.6466417304468489,y=0.4955279123282218 -a=pan,b=hat,i=9958,x=0.8447936799573535,y=0.45561414780776455 -a=pan,b=wye,i=9959,x=0.5523199497193726,y=0.844808439474632 -a=wye,b=hat,i=9960,x=0.1339766165243773,y=0.90209906677784 -a=eks,b=pan,i=9961,x=0.0018643836079239584,y=0.22214207434571398 -a=hat,b=wye,i=9962,x=0.27668665603289977,y=0.8949840037944731 -a=wye,b=eks,i=9963,x=0.7660038618991021,y=0.0724322389595311 -a=zee,b=wye,i=9964,x=0.14503471143188695,y=0.6572300809799787 -a=eks,b=hat,i=9965,x=0.45140832054850244,y=0.4872441473665683 -a=hat,b=zee,i=9966,x=0.09915562191171134,y=0.19911839331011605 -a=eks,b=wye,i=9967,x=0.9705821420611176,y=0.1682630903706045 -a=pan,b=wye,i=9968,x=0.3049598321025262,y=0.8146693779796157 -a=pan,b=pan,i=9969,x=0.4470842181156869,y=0.8188080614674343 -a=hat,b=zee,i=9970,x=0.7615491651523039,y=0.3309208743280688 -a=eks,b=hat,i=9971,x=0.16013813822306744,y=0.18970582735969377 -a=hat,b=wye,i=9972,x=0.01092212097676093,y=0.19287438329005957 -a=eks,b=hat,i=9973,x=0.9278177925083565,y=0.14699304090594456 -a=hat,b=wye,i=9974,x=0.34339938249336444,y=0.6938846096026958 -a=zee,b=eks,i=9975,x=0.14164773949664755,y=0.16897907378815158 -a=hat,b=eks,i=9976,x=0.9051959081404853,y=0.3084507684845691 -a=eks,b=zee,i=9977,x=0.4549080098494652,y=0.2027740955809184 -a=pan,b=hat,i=9978,x=0.18068678390966952,y=0.24718291910572177 -a=wye,b=hat,i=9979,x=0.48039589777666136,y=0.8099902771432259 -a=pan,b=wye,i=9980,x=0.029289120404769053,y=0.5923039290360491 -a=eks,b=pan,i=9981,x=0.2544586487901952,y=0.4578886296197162 -a=wye,b=eks,i=9982,x=0.34998222187670314,y=0.3061867938018288 -a=wye,b=hat,i=9983,x=0.4640332038264391,y=0.019243858556094673 -a=pan,b=hat,i=9984,x=0.48914378417931326,y=0.36728976081695264 -a=hat,b=zee,i=9985,x=0.5155567078470872,y=0.6010598365861822 -a=hat,b=wye,i=9986,x=0.687016150489404,y=0.14515901345978532 -a=hat,b=hat,i=9987,x=0.429284826906265,y=0.1787642439603777 -a=zee,b=zee,i=9988,x=0.16947406856911285,y=0.6350945353981919 -a=wye,b=eks,i=9989,x=0.8561772298898314,y=0.6874185671784931 -a=eks,b=pan,i=9990,x=0.06739304569008775,y=0.2341964277411741 -a=hat,b=wye,i=9991,x=0.3633322891461138,y=0.12892395206278184 -a=wye,b=zee,i=9992,x=0.348286564151128,y=0.9559121889830311 -a=eks,b=eks,i=9993,x=0.8231194474452225,y=0.08896471922413896 -a=pan,b=pan,i=9994,x=0.7310844732875349,y=0.16823055115657648 -a=pan,b=eks,i=9995,x=0.8981803676290844,y=0.34464277045717084 -a=zee,b=wye,i=9996,x=0.72761807629368,y=0.6860394313092489 -a=pan,b=hat,i=9997,x=0.700242583670093,y=0.27129926260336745 -a=eks,b=pan,i=9998,x=0.5554835956450555,y=0.7053505857791378 -a=wye,b=pan,i=9999,x=0.19004481082030356,y=0.8073900575802198 -a=zee,b=pan,i=10000,x=0.02349941792343435,y=0.19861196418373683 diff --git a/docs6/src/data/medium-squares b/docs6/src/data/medium-squares deleted file mode 100644 index 171f69a62..000000000 --- a/docs6/src/data/medium-squares +++ /dev/null @@ -1,4990 +0,0 @@ -a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797 -a=wye,b=wye,i=3,x=0.20460330576630303,y=0.33831852551664776 -a=eks,b=wye,i=4,x=0.38139939387114097,y=0.13418874328430463 -a=wye,b=pan,i=5,x=0.5732889198020006,y=0.8636244699032729 -a=zee,b=wye,i=8,x=0.5985540091064224,y=0.976181385699006 -a=pan,b=wye,i=10,x=0.5026260055412137,y=0.9526183602969864 -a=pan,b=pan,i=11,x=0.7930488423451967,y=0.6505816637259333 -a=zee,b=pan,i=12,x=0.3676141320555616,y=0.23614420670296965 -a=eks,b=pan,i=15,x=0.07155556372719507,y=0.3596137145616235 -a=pan,b=pan,i=16,x=0.5736853980681922,y=0.7554169353781729 -a=zee,b=eks,i=17,x=0.29081949506712723,y=0.054478717073354166 -a=hat,b=zee,i=18,x=0.05727869223575699,y=0.13343527626645157 -a=eks,b=wye,i=20,x=0.38245149780530685,y=0.4730652428100751 -a=hat,b=eks,i=21,x=0.0023058336158985338,y=0.16665492414949412 -a=zee,b=wye,i=22,x=0.9270813051677103,y=0.5523236165919244 -a=wye,b=pan,i=23,x=0.7975862089313748,y=0.8430307846116346 -a=pan,b=eks,i=25,x=0.291444729043585,y=0.2680100577363237 -a=eks,b=eks,i=26,x=0.7433678407354926,y=0.8295062256195103 -a=wye,b=wye,i=27,x=0.9439687243972539,y=0.9305553444632164 -a=eks,b=eks,i=29,x=0.05713488327208227,y=0.45012758797367913 -a=zee,b=pan,i=30,x=0.7514525581952406,y=0.5869901584461873 -a=eks,b=pan,i=31,x=0.5701563454882129,y=0.822178550628332 -a=hat,b=pan,i=33,x=0.09303747345405,y=0.18404048980291832 -a=hat,b=wye,i=34,x=0.49061881414751796,y=0.4721354893261027 -a=zee,b=zee,i=35,x=0.12565828887119346,y=0.1936186210637818 -a=pan,b=hat,i=36,x=0.9436794292675323,y=0.9111218711707734 -a=pan,b=hat,i=40,x=0.30302850095892986,y=0.2884018711352886 -a=pan,b=hat,i=41,x=0.08143769954761992,y=0.030906489980379925 -a=zee,b=eks,i=43,x=0.8456728393970536,y=0.8501991168644704 -a=pan,b=zee,i=44,x=0.8980511441946196,y=0.6728135588610029 -a=pan,b=eks,i=45,x=0.6247151870956413,y=0.8275695927895051 -a=pan,b=wye,i=46,x=0.08834857197997548,y=0.4444202016249801 -a=eks,b=zee,i=47,x=0.4544511154182116,y=0.22787905378091933 -a=wye,b=wye,i=49,x=0.21920222273431333,y=0.18979580426582043 -a=wye,b=hat,i=50,x=0.4942114498754957,y=0.35138166631352374 -a=hat,b=pan,i=51,x=0.744071908772339,y=0.9166693426799131 -a=eks,b=eks,i=53,x=0.9985342548358704,y=0.9590495928336531 -a=zee,b=eks,i=54,x=0.9314828033134765,y=0.8687851184407838 -a=hat,b=wye,i=55,x=0.07268958233806955,y=0.49851026308988333 -a=pan,b=zee,i=56,x=0.06982762802945175,y=0.033405940208281026 -a=wye,b=pan,i=57,x=0.7302705254635534,y=0.7851652600343977 -a=hat,b=hat,i=59,x=0.23821881669710454,y=0.2495882683265671 -a=zee,b=eks,i=62,x=0.6925670766279615,y=0.6309283897492339 -a=wye,b=wye,i=63,x=0.3034237022482048,y=0.4570355951663545 -a=pan,b=hat,i=65,x=0.9374806227235818,y=0.5142245475995557 -a=hat,b=hat,i=66,x=0.8467681996061774,y=0.7322484476601094 -a=zee,b=hat,i=67,x=0.2584112989773649,y=0.4004276976232398 -a=hat,b=wye,i=68,x=0.3362076167096233,y=0.10257516543234868 -a=eks,b=wye,i=72,x=0.5981608655833305,y=0.6748831518079305 -a=eks,b=eks,i=74,x=0.47929526118952226,y=0.04122489928296569 -a=zee,b=eks,i=76,x=0.48749884261245857,y=0.4733893888865026 -a=pan,b=eks,i=78,x=0.8066566257701527,y=0.5756861577587412 -a=hat,b=eks,i=79,x=0.36764688836079906,y=0.3891921555248843 -a=zee,b=zee,i=80,x=0.8318990957979263,y=0.9881725534495532 -a=hat,b=wye,i=81,x=0.17534099646455403,y=0.2603138043676684 -a=pan,b=eks,i=82,x=0.16030863176622356,y=0.3818559883741389 -a=eks,b=eks,i=83,x=0.12617292637489663,y=0.2322389628774958 -a=hat,b=wye,i=84,x=0.6438639100413308,y=0.7352455517915716 -a=wye,b=wye,i=85,x=0.4632506196324333,y=0.47736149585488863 -a=wye,b=hat,i=86,x=0.040744707036128314,y=0.03301111174849969 -a=wye,b=hat,i=87,x=0.6505610031501867,y=0.8780409741829391 -a=hat,b=eks,i=88,x=0.4467819157449152,y=0.25053527761538363 -a=wye,b=hat,i=90,x=0.47950389571017593,y=0.42674583688195655 -a=pan,b=pan,i=91,x=0.9831553489472493,y=0.8956966539093748 -a=wye,b=hat,i=93,x=0.5870769045363674,y=0.9424742244710793 -a=wye,b=hat,i=96,x=0.6981858011144773,y=0.7500496060047478 -a=zee,b=zee,i=99,x=0.9317555381388605,y=0.7821791090489817 -a=pan,b=hat,i=101,x=0.8551893009031044,y=0.5817332905396572 -a=hat,b=zee,i=102,x=0.6981668049063121,y=0.7047537152787725 -a=pan,b=pan,i=107,x=0.04969073649124267,y=0.3496530999805786 -a=hat,b=zee,i=109,x=0.6352241884717337,y=0.5627539222500982 -a=pan,b=hat,i=111,x=0.9154288048749503,y=0.6519249542119475 -a=wye,b=zee,i=113,x=0.3320543853278368,y=0.30390890533333614 -a=eks,b=eks,i=116,x=0.6525970433533309,y=0.6038254664200311 -a=wye,b=hat,i=120,x=0.7615397120903524,y=0.9797450222382247 -a=pan,b=pan,i=121,x=0.613826139364826,y=0.9594055166987485 -a=eks,b=wye,i=122,x=0.38075252326113784,y=0.015438488067683442 -a=eks,b=zee,i=124,x=0.5720422015264689,y=0.5847353398497057 -a=pan,b=zee,i=126,x=0.1495175173899136,y=0.37751439353621485 -a=zee,b=hat,i=128,x=0.4962404023217607,y=0.3377314781015287 -a=eks,b=zee,i=130,x=0.8191166461936853,y=0.6036827248166735 -a=hat,b=hat,i=133,x=0.10275440550496173,y=0.24475094001022435 -a=hat,b=hat,i=135,x=0.6950203918361871,y=0.6680826428134803 -a=pan,b=pan,i=136,x=0.10793035048973287,y=0.26815648351708954 -a=pan,b=hat,i=141,x=0.2240396548356538,y=0.2500739139538637 -a=zee,b=eks,i=142,x=0.7814387149488571,y=0.5062129648989182 -a=pan,b=eks,i=143,x=0.7772439867698123,y=0.970133177930633 -a=hat,b=wye,i=146,x=0.7557462730554149,y=0.8354966950279341 -a=wye,b=wye,i=147,x=0.19573082452335644,y=0.16675321752165628 -a=hat,b=eks,i=148,x=0.6206402300915382,y=0.821425348018401 -a=pan,b=pan,i=149,x=0.2983431833827429,y=0.49328391364637114 -a=eks,b=zee,i=152,x=0.39677449578160984,y=0.01242383070673192 -a=pan,b=eks,i=153,x=0.3403054358911233,y=0.20856161342555235 -a=wye,b=wye,i=154,x=0.7473556150405872,y=0.5878222144661077 -a=pan,b=wye,i=155,x=0.8308266904064261,y=0.6160102482290218 -a=hat,b=zee,i=156,x=0.06969918779892115,y=0.12332013609343595 -a=zee,b=zee,i=157,x=0.08770785920874291,y=0.1694018877034732 -a=hat,b=wye,i=158,x=0.5750041834429883,y=0.8988889437381339 -a=zee,b=hat,i=159,x=0.3949341964723728,y=0.21461635038581106 -a=hat,b=zee,i=161,x=0.241833257737751,y=0.2595728278064434 -a=zee,b=zee,i=162,x=0.30865469474514673,y=0.04807979540420082 -a=eks,b=hat,i=164,x=0.24635677428468206,y=0.026325305117816278 -a=eks,b=wye,i=167,x=0.4655842156857275,y=0.37721410941530287 -a=wye,b=pan,i=173,x=0.15061916413672838,y=0.399506367745217 -a=zee,b=pan,i=175,x=0.3493963468867093,y=0.2448706490036231 -a=hat,b=hat,i=176,x=0.5951138587106596,y=0.851049910114082 -a=hat,b=wye,i=177,x=0.39004663496677305,y=0.2404193708137553 -a=hat,b=wye,i=180,x=0.0983048320526585,y=0.3605050602699248 -a=hat,b=eks,i=181,x=0.06881556874834038,y=0.02776354780439838 -a=eks,b=zee,i=182,x=0.8795883767333226,y=0.7913268326625821 -a=eks,b=wye,i=188,x=0.7195019639137887,y=0.6101293217348989 -a=pan,b=eks,i=189,x=0.48651849518653256,y=0.3310583783958194 -a=pan,b=wye,i=192,x=0.7721928274839366,y=0.730996300378133 -a=eks,b=eks,i=194,x=0.6636241298839136,y=0.5259126321800084 -a=pan,b=hat,i=195,x=0.6642514282295026,y=0.9448672883012781 -a=wye,b=wye,i=197,x=0.07466320732554754,y=0.1470636187800869 -a=eks,b=hat,i=198,x=0.04736012928828348,y=0.09632719090688924 -a=zee,b=hat,i=199,x=0.07495669138561056,y=0.0033556400316512303 -a=eks,b=pan,i=200,x=0.25160946724271127,y=0.3153026554896944 -a=wye,b=eks,i=204,x=0.0866873459163141,y=0.08597589292509311 -a=hat,b=wye,i=206,x=0.9712065807938725,y=0.8814161529894458 -a=wye,b=eks,i=208,x=0.638370131847482,y=0.6031891659074958 -a=hat,b=eks,i=209,x=0.08722321261724375,y=0.1699175655988554 -a=pan,b=zee,i=213,x=0.910694728148218,y=0.538005658230806 -a=pan,b=zee,i=215,x=0.8250379925053151,y=0.7418087278106543 -a=wye,b=eks,i=220,x=0.9707941416650918,y=0.5446983207141396 -a=hat,b=eks,i=221,x=0.9623773206695981,y=0.7961697529692682 -a=wye,b=eks,i=223,x=0.7008326115259359,y=0.8171891486894675 -a=eks,b=zee,i=225,x=0.2567945604892924,y=0.24424154648770224 -a=hat,b=zee,i=228,x=0.6353440745576056,y=0.8565317288607986 -a=wye,b=hat,i=229,x=0.5097848345332788,y=0.8249641724859278 -a=eks,b=wye,i=232,x=0.5507351778417637,y=0.7118263982857057 -a=hat,b=hat,i=233,x=0.2131489206395062,y=0.08647965840929162 -a=eks,b=hat,i=236,x=0.06364189456177682,y=0.4949298511378918 -a=pan,b=pan,i=238,x=0.1802663344712152,y=0.40747996818620213 -a=wye,b=eks,i=240,x=0.11369718773090787,y=0.4362931656865052 -a=pan,b=hat,i=241,x=0.5298443076284122,y=0.7286240415109126 -a=hat,b=hat,i=242,x=0.17197294875303992,y=0.42960373892313586 -a=hat,b=wye,i=243,x=0.40008739772830226,y=0.3431833719273334 -a=wye,b=eks,i=244,x=0.047932173034763714,y=0.15974685050052528 -a=hat,b=wye,i=248,x=0.8794750860292233,y=0.9633187985176084 -a=zee,b=wye,i=250,x=0.18225031260376368,y=0.42639010352161133 -a=eks,b=eks,i=251,x=0.6366142860676015,y=0.7279525837465141 -a=eks,b=pan,i=252,x=0.7489029711796827,y=0.6216975230273389 -a=zee,b=pan,i=253,x=0.2896285025325088,y=0.4107984626977105 -a=wye,b=pan,i=254,x=0.40783269275640843,y=0.07873948964651878 -a=pan,b=pan,i=255,x=0.4310139640663371,y=0.133668391263563 -a=zee,b=wye,i=259,x=0.6485993255572561,y=0.9239849074696734 -a=pan,b=hat,i=260,x=0.7786431758578792,y=0.9906513397624532 -a=pan,b=pan,i=263,x=0.735966834511216,y=0.8642501328542477 -a=pan,b=pan,i=264,x=0.0365319279313181,y=0.01547685459691761 -a=pan,b=hat,i=267,x=0.8759426552130376,y=0.8128071892594659 -a=wye,b=zee,i=268,x=0.334247707070338,y=0.07108295911604934 -a=pan,b=zee,i=271,x=0.38241767385691083,y=0.47652036205919546 -a=zee,b=eks,i=272,x=0.5076219094472946,y=0.8598422972471865 -a=eks,b=pan,i=274,x=0.5094754996388772,y=0.8630831763542761 -a=pan,b=pan,i=275,x=0.0702163840810267,y=0.49744457340186665 -a=zee,b=eks,i=276,x=0.7494501132627315,y=0.831480047566556 -a=hat,b=eks,i=277,x=0.9160765564583604,y=0.9665017202156387 -a=eks,b=wye,i=278,x=0.3405469715018894,y=0.39395981360241694 -a=wye,b=eks,i=283,x=0.3857770915059473,y=0.2520288213780115 -a=hat,b=hat,i=285,x=0.5231416402386272,y=0.8268208737366626 -a=hat,b=wye,i=292,x=0.7857064933058493,y=0.5074038206162027 -a=hat,b=zee,i=294,x=0.3704436769585995,y=0.3120229742987346 -a=eks,b=wye,i=297,x=0.15536712579543976,y=0.24068588834787485 -a=pan,b=hat,i=300,x=0.7146992829593928,y=0.5429822061061883 -a=wye,b=pan,i=305,x=0.5103104415224277,y=0.6005096012353242 -a=wye,b=eks,i=307,x=0.6064616942445623,y=0.565814763986132 -a=hat,b=eks,i=308,x=0.40085643331635357,y=0.09395240921387538 -a=eks,b=eks,i=311,x=0.09369987234653387,y=0.06802932452953492 -a=wye,b=zee,i=312,x=0.07612086875946633,y=0.27326136662066614 -a=hat,b=zee,i=315,x=0.34523405773089744,y=0.4354275687352226 -a=zee,b=hat,i=316,x=0.13504220690406277,y=0.3795391182446578 -a=eks,b=pan,i=317,x=0.46957588924343485,y=0.3400251823752689 -a=wye,b=hat,i=318,x=0.18637343210075064,y=0.45983893886751714 -a=pan,b=zee,i=319,x=0.16606734288775093,y=0.21473289889901537 -a=zee,b=pan,i=320,x=0.8307425029665492,y=0.9687981266665243 -a=zee,b=zee,i=321,x=0.6999788077300872,y=0.526382289897085 -a=wye,b=zee,i=323,x=0.7167871674039571,y=0.8146661281584913 -a=wye,b=wye,i=324,x=0.22862799493809793,y=0.45776956542633673 -a=zee,b=zee,i=327,x=0.1254581943608959,y=0.01871101782750706 -a=eks,b=pan,i=328,x=0.28146620713469994,y=0.45414955407945334 -a=pan,b=eks,i=329,x=0.03763317797683374,y=0.2401750869051401 -a=eks,b=hat,i=333,x=0.0677128764291699,y=0.13888954761924865 -a=hat,b=hat,i=334,x=0.8122872254151258,y=0.9343598605592562 -a=wye,b=wye,i=335,x=0.3136448355146325,y=0.3030034178002945 -a=wye,b=eks,i=336,x=0.3723857599541325,y=0.12311828419230408 -a=wye,b=eks,i=337,x=0.8517094711110174,y=0.7107950535254092 -a=hat,b=wye,i=338,x=0.29886440908142087,y=0.44199727275540557 -a=eks,b=zee,i=339,x=0.4583899635695151,y=0.06228530919187403 -a=wye,b=eks,i=340,x=0.23528308849163693,y=0.3882734087125834 -a=pan,b=eks,i=342,x=0.23702739214960689,y=0.13214761320752622 -a=pan,b=wye,i=343,x=0.2724033449540535,y=0.45196387793887527 -a=eks,b=hat,i=344,x=0.6604478311777118,y=0.8554572649437313 -a=eks,b=eks,i=346,x=0.4314505110520016,y=0.35990136288181707 -a=pan,b=eks,i=350,x=0.7749620340665812,y=0.6934753745173732 -a=eks,b=eks,i=352,x=0.8908223033829336,y=0.756634722087033 -a=wye,b=wye,i=353,x=0.3561234723336817,y=0.25848510016885773 -a=wye,b=zee,i=354,x=0.07167250764974309,y=0.04755739805455228 -a=eks,b=pan,i=355,x=0.6260379271888249,y=0.9999648102177897 -a=wye,b=eks,i=356,x=0.9105767596182323,y=0.6275830055247574 -a=wye,b=pan,i=359,x=0.46013788462671257,y=0.07923543496739904 -a=eks,b=hat,i=362,x=0.9858910807074641,y=0.6063471357443468 -a=hat,b=zee,i=369,x=0.18008064179308536,y=0.31358866392662854 -a=hat,b=wye,i=371,x=0.48451798820346725,y=0.08468945923087656 -a=wye,b=hat,i=373,x=0.9062681519121573,y=0.6942343130437282 -a=wye,b=pan,i=376,x=0.9148906431225965,y=0.6865707031323998 -a=hat,b=wye,i=379,x=0.723368325539696,y=0.9239506513259356 -a=pan,b=wye,i=382,x=0.10290553602186514,y=0.15037258795056763 -a=pan,b=zee,i=384,x=0.5491251090567257,y=0.9145935172366898 -a=wye,b=eks,i=388,x=0.5468979682673912,y=0.5716892746572024 -a=wye,b=pan,i=389,x=0.8711354046280742,y=0.7000550458179466 -a=pan,b=zee,i=390,x=0.32965901763834493,y=0.4764401595448211 -a=zee,b=eks,i=393,x=0.6953842859899757,y=0.9546625350220701 -a=wye,b=eks,i=395,x=0.5496441289397975,y=0.9130998398573059 -a=pan,b=eks,i=396,x=0.12088261778903142,y=0.2915014516366682 -a=pan,b=pan,i=397,x=0.6527193676882986,y=0.5140617542371629 -a=eks,b=eks,i=399,x=0.010510711223853386,y=0.08397157710064007 -a=eks,b=pan,i=401,x=0.08749968996168989,y=0.3703456609602497 -a=zee,b=hat,i=403,x=0.8371422088541587,y=0.9376680469763548 -a=wye,b=wye,i=405,x=0.5955452707872064,y=0.5663276615611866 -a=hat,b=wye,i=406,x=0.3016062899704931,y=0.1481359817881971 -a=zee,b=hat,i=408,x=0.13829592936600588,y=0.4643427499672679 -a=zee,b=hat,i=412,x=0.5684534581822444,y=0.7576411674301173 -a=wye,b=pan,i=416,x=0.8898988612865336,y=0.8930372261944983 -a=zee,b=zee,i=418,x=0.36259161480392366,y=0.03106838412360613 -a=zee,b=eks,i=419,x=0.9669197256156522,y=0.9525495700296412 -a=zee,b=hat,i=420,x=0.2472176643017414,y=0.4766709326963189 -a=hat,b=pan,i=421,x=0.5484055610018505,y=0.7401624563813598 -a=wye,b=eks,i=422,x=0.9843960933372673,y=0.8274060260108933 -a=pan,b=pan,i=423,x=0.08736573145179394,y=0.47080422361654306 -a=pan,b=hat,i=424,x=0.41967399152692275,y=0.11281967088191636 -a=eks,b=zee,i=425,x=0.1541100762311376,y=0.2899666127124777 -a=pan,b=wye,i=427,x=0.42286545073700454,y=0.4861336428493519 -a=eks,b=zee,i=429,x=0.10194433521396717,y=0.20006319684657992 -a=eks,b=wye,i=430,x=0.5857626187839062,y=0.5321382987939495 -a=zee,b=eks,i=431,x=0.8583324116859721,y=0.994808666622831 -a=eks,b=eks,i=432,x=0.7853965492176864,y=0.9164907493679918 -a=eks,b=eks,i=436,x=0.6933382044724179,y=0.6338292052517879 -a=wye,b=pan,i=437,x=0.37712852260119445,y=0.2533800875229283 -a=pan,b=eks,i=442,x=0.3051229752913909,y=0.3927572304818523 -a=hat,b=pan,i=445,x=0.693707602798371,y=0.9355332457358334 -a=zee,b=wye,i=449,x=0.8505833795792004,y=0.9244534714701724 -a=eks,b=wye,i=450,x=0.6844926010909408,y=0.614368249300009 -a=hat,b=wye,i=453,x=4.509679127584487e-05,y=0.22031599198733764 -a=zee,b=zee,i=458,x=0.4844711931621539,y=0.27495542782645344 -a=eks,b=eks,i=459,x=0.3611062645335037,y=0.40226115300495247 -a=pan,b=eks,i=460,x=0.8223780119629852,y=0.9126194557839794 -a=hat,b=wye,i=466,x=0.4276402941162851,y=0.029924580250603294 -a=eks,b=eks,i=469,x=0.12954404025896205,y=0.13771358880489826 -a=zee,b=hat,i=472,x=0.5201558372951883,y=0.5500922568519445 -a=pan,b=zee,i=473,x=0.28235480114669276,y=0.01789197833877909 -a=hat,b=zee,i=474,x=0.9737504172221616,y=0.5620581498765591 -a=eks,b=eks,i=477,x=0.034584510761659026,y=0.43469127809305075 -a=eks,b=hat,i=479,x=0.935311382854882,y=0.5581569700476232 -a=pan,b=eks,i=480,x=0.6265973838424406,y=0.7055055050235215 -a=hat,b=pan,i=481,x=0.0821695972704326,y=0.35414544375322354 -a=wye,b=hat,i=483,x=0.2316003856711063,y=0.43956136357576003 -a=eks,b=eks,i=484,x=0.6641863677348001,y=0.6447460873709984 -a=wye,b=wye,i=485,x=0.2617661797012584,y=0.42266716043415287 -a=wye,b=hat,i=486,x=0.30133537944217137,y=0.10221649013386602 -a=hat,b=pan,i=488,x=0.9232269980553737,y=0.6301846340531019 -a=zee,b=eks,i=489,x=0.47256613643793366,y=0.043043925407927786 -a=wye,b=pan,i=491,x=0.2513964759410543,y=0.029649890186790206 -a=eks,b=zee,i=492,x=0.24404562827103082,y=0.21765361298784158 -a=hat,b=eks,i=493,x=0.1664695548518379,y=0.24789421681152946 -a=wye,b=wye,i=497,x=0.7021621810855977,y=0.533290838271892 -a=eks,b=eks,i=498,x=0.7227433480694091,y=0.6862413971745326 -a=zee,b=pan,i=500,x=0.9372377490487999,y=0.5618667924767166 -a=eks,b=pan,i=501,x=0.040475122297163324,y=0.16567765824398517 -a=hat,b=wye,i=502,x=0.6077314844130164,y=0.768942559474086 -a=pan,b=pan,i=503,x=0.0738664869271265,y=0.25330608830961776 -a=eks,b=wye,i=505,x=0.910806292687196,y=0.9026141937080411 -a=pan,b=pan,i=509,x=0.30214111076722505,y=0.004555052573727347 -a=zee,b=pan,i=512,x=0.19477333058846336,y=0.2603817709639791 -a=hat,b=zee,i=514,x=0.3540200248392754,y=0.2390584570033465 -a=hat,b=zee,i=517,x=0.49137770000060343,y=0.35141387324505546 -a=hat,b=pan,i=519,x=0.10212966989515981,y=0.16533265211820058 -a=eks,b=pan,i=522,x=0.28735731367601225,y=0.01067207233763956 -a=zee,b=wye,i=523,x=0.34414490686076227,y=0.26451700279951407 -a=zee,b=eks,i=524,x=0.07661268800300436,y=0.336140096726808 -a=zee,b=zee,i=525,x=0.2340021990274821,y=0.19565171550317406 -a=wye,b=pan,i=527,x=0.23490598090770587,y=0.04525601514058908 -a=pan,b=wye,i=529,x=0.25303243992392954,y=0.24620118020872683 -a=zee,b=zee,i=530,x=0.8324822558401548,y=0.6988570770856138 -a=pan,b=zee,i=533,x=0.7751095714402214,y=0.5255361584302058 -a=eks,b=zee,i=535,x=0.918189166469818,y=0.9631682259880161 -a=eks,b=eks,i=538,x=0.6478937309967303,y=0.8641203708540487 -a=hat,b=pan,i=540,x=0.7444966092534115,y=0.8005631784590818 -a=eks,b=pan,i=545,x=0.6594595904219487,y=0.9953938324572855 -a=pan,b=pan,i=546,x=0.6157989578235565,y=0.5516616028345289 -a=zee,b=zee,i=548,x=0.9236546276965072,y=0.7185917789599708 -a=zee,b=hat,i=549,x=0.10683412342384302,y=0.3609954494938745 -a=zee,b=zee,i=550,x=0.442695858154603,y=0.2279810907065235 -a=hat,b=pan,i=556,x=0.6486062750649167,y=0.7897824130903452 -a=zee,b=pan,i=557,x=0.1878359832100659,y=0.36569848741631705 -a=pan,b=wye,i=561,x=0.23019585224736527,y=0.33146344086760515 -a=wye,b=zee,i=562,x=0.9090864712373032,y=0.6795157215425431 -a=wye,b=hat,i=566,x=0.5358639536626888,y=0.7343387003323596 -a=eks,b=pan,i=568,x=0.9357934717739306,y=0.5799507923614251 -a=wye,b=wye,i=569,x=0.7665973069675542,y=0.7195592313665612 -a=pan,b=wye,i=575,x=0.21812558940117743,y=0.3918449054425934 -a=hat,b=wye,i=576,x=0.9187805829729324,y=0.7265918618789776 -a=eks,b=eks,i=577,x=0.6757641755808136,y=0.8438941757795644 -a=zee,b=zee,i=581,x=0.03169831018517821,y=0.26542940289146955 -a=hat,b=eks,i=582,x=0.15837738839177617,y=0.04767102936713474 -a=hat,b=zee,i=585,x=0.6805895701299852,y=0.9163445111607751 -a=pan,b=wye,i=589,x=0.8045092117185423,y=0.9810352594851226 -a=eks,b=hat,i=590,x=0.17485208172241573,y=0.10386578574214755 -a=hat,b=wye,i=592,x=0.25971796023192173,y=0.17042472633318229 -a=wye,b=pan,i=597,x=0.9041321135345515,y=0.7679179807567709 -a=wye,b=hat,i=599,x=0.9310931043540538,y=0.9627637520286313 -a=pan,b=zee,i=602,x=0.9884538231531689,y=0.9826428169828403 -a=hat,b=pan,i=604,x=0.43188828562650494,y=0.050660555822547026 -a=pan,b=zee,i=605,x=0.2529032876659366,y=0.3388959543441078 -a=eks,b=eks,i=606,x=0.35689384699612214,y=0.4336296598478725 -a=hat,b=wye,i=608,x=0.3631005984856752,y=0.17908512378632557 -a=zee,b=eks,i=609,x=0.0885240972512874,y=0.11687754329610434 -a=eks,b=wye,i=610,x=0.976870279166798,y=0.979024408220298 -a=hat,b=eks,i=611,x=0.22058278727333458,y=0.23176980505367228 -a=pan,b=pan,i=612,x=0.5001009219306088,y=0.844066356281099 -a=pan,b=eks,i=614,x=0.3108839226386939,y=0.3561979428678962 -a=wye,b=eks,i=615,x=0.30764905368295004,y=0.3507626708329916 -a=wye,b=eks,i=617,x=0.2660764665919485,y=0.145799475554256 -a=eks,b=eks,i=618,x=0.697318049680538,y=0.8904258470184732 -a=pan,b=pan,i=625,x=0.6915515843242978,y=0.6178010854014475 -a=wye,b=wye,i=629,x=0.0503400168303868,y=0.10527602332963393 -a=hat,b=wye,i=632,x=0.5674934046837635,y=0.8372958944262796 -a=eks,b=wye,i=637,x=0.10597293490004256,y=0.20904153809081627 -a=pan,b=wye,i=640,x=0.5760120638145232,y=0.6662486414541403 -a=hat,b=zee,i=644,x=0.9789858624275163,y=0.6867108424306388 -a=eks,b=pan,i=645,x=0.28589757090653023,y=0.2874816869622683 -a=pan,b=zee,i=646,x=0.03971681746631206,y=0.11488578458241061 -a=pan,b=hat,i=648,x=0.6975350070264588,y=0.5434923294790459 -a=wye,b=pan,i=649,x=0.017833700431765576,y=0.28497950273429307 -a=wye,b=pan,i=650,x=0.8995516713685614,y=0.9709755173196244 -a=zee,b=pan,i=652,x=0.774338764727154,y=0.7866779831902309 -a=pan,b=zee,i=653,x=0.598251646829306,y=0.798568072477333 -a=eks,b=zee,i=656,x=0.7342238031294267,y=0.6344399868216409 -a=eks,b=eks,i=657,x=0.9526997294869483,y=0.6231118783065456 -a=zee,b=pan,i=660,x=0.3829079054237686,y=0.46767052095812467 -a=eks,b=eks,i=667,x=0.656573731471621,y=0.902119091388546 -a=wye,b=pan,i=668,x=0.04920210066939823,y=0.23851670466645347 -a=wye,b=wye,i=672,x=0.7648029293390511,y=0.6650048997400388 -a=zee,b=zee,i=675,x=0.14647630359578723,y=0.2444767037770159 -a=wye,b=hat,i=676,x=0.6451848990883488,y=0.5038417150477158 -a=wye,b=zee,i=682,x=0.7810987533825186,y=0.9667043995307188 -a=hat,b=eks,i=684,x=0.3749971755428878,y=0.21431876719781595 -a=hat,b=eks,i=686,x=0.21050937771050438,y=0.41045403895167065 -a=eks,b=zee,i=691,x=0.7240287030381926,y=0.79896437710086 -a=hat,b=hat,i=692,x=0.14117333894379847,y=0.3225535116195155 -a=zee,b=eks,i=693,x=0.27068880582424437,y=0.044369525310762326 -a=hat,b=zee,i=696,x=0.16963322576469086,y=0.09487337662478568 -a=hat,b=eks,i=697,x=0.8909103010365073,y=0.5323201554130181 -a=zee,b=hat,i=703,x=0.2248043259303365,y=0.33203303056970623 -a=pan,b=eks,i=705,x=0.7388154708435315,y=0.797179757859978 -a=pan,b=wye,i=706,x=0.5008032407057831,y=0.9591889291114695 -a=pan,b=eks,i=707,x=0.9759907833320285,y=0.8936617707540555 -a=hat,b=zee,i=709,x=0.5664816823643944,y=0.8967488777240636 -a=wye,b=zee,i=710,x=0.8443019828048438,y=0.7860920608434899 -a=hat,b=eks,i=711,x=0.6493317768253313,y=0.6921590557236297 -a=pan,b=wye,i=714,x=0.1707903602306352,y=0.1624539753347971 -a=wye,b=hat,i=717,x=0.9126869246167464,y=0.8539144029222125 -a=wye,b=zee,i=719,x=0.8648654985592689,y=0.744990377385103 -a=wye,b=eks,i=720,x=0.0737982261184581,y=0.215040061968929 -a=eks,b=hat,i=723,x=0.5223004827368406,y=0.7436988563433049 -a=pan,b=zee,i=724,x=0.161391991386723,y=0.4896835486539596 -a=zee,b=zee,i=725,x=0.6421372014622713,y=0.9769320758361035 -a=hat,b=hat,i=726,x=0.6769964245482417,y=0.6143975572853417 -a=zee,b=pan,i=728,x=0.40960942207244977,y=0.4243129116901595 -a=wye,b=zee,i=733,x=0.842462695985326,y=0.966657486505284 -a=pan,b=wye,i=734,x=0.01934339909570837,y=0.05189496476807132 -a=eks,b=wye,i=735,x=0.9417156459424341,y=0.9870712135656121 -a=wye,b=pan,i=737,x=0.16300656842731953,y=0.3545653890588314 -a=eks,b=zee,i=738,x=0.8977243371620829,y=0.5262722450488325 -a=hat,b=wye,i=740,x=0.6686093454184745,y=0.6740449093675628 -a=zee,b=pan,i=741,x=0.9598570146790528,y=0.6398488862754813 -a=pan,b=wye,i=742,x=0.8257519339015849,y=0.693194093940406 -a=eks,b=hat,i=743,x=0.04434098258715646,y=0.3266898058988358 -a=zee,b=wye,i=744,x=0.7524245915453669,y=0.5461439986683315 -a=pan,b=pan,i=745,x=0.6719897687291242,y=0.7565622573163691 -a=eks,b=pan,i=746,x=0.916062376572181,y=0.886967557372127 -a=wye,b=pan,i=750,x=0.6658476587001316,y=0.5556451189688414 -a=wye,b=wye,i=752,x=0.13191473062692816,y=0.19377767709093607 -a=zee,b=eks,i=753,x=0.5186702283396277,y=0.5344580097568402 -a=pan,b=eks,i=754,x=0.023312954423954868,y=0.13646462067848675 -a=eks,b=eks,i=755,x=0.22961935180882087,y=0.16011525129191817 -a=pan,b=zee,i=756,x=0.09666705485436378,y=0.3548198552440588 -a=eks,b=wye,i=758,x=0.5362262223046377,y=0.5049539834712841 -a=eks,b=eks,i=766,x=0.22335745734469326,y=0.21867582342847736 -a=eks,b=eks,i=769,x=0.18506419568907773,y=0.4760883565274585 -a=wye,b=zee,i=772,x=0.23583751371437855,y=0.12279242944303292 -a=hat,b=eks,i=773,x=0.26528801262285184,y=0.4010080804811049 -a=wye,b=eks,i=776,x=0.9585382111164209,y=0.6306113838967866 -a=zee,b=wye,i=777,x=0.7623811038765134,y=0.6139534724314861 -a=zee,b=zee,i=779,x=0.3411759787401816,y=0.2865091416991973 -a=hat,b=pan,i=781,x=0.1192837713483601,y=0.40681848859583813 -a=zee,b=eks,i=785,x=0.6562657631329122,y=0.8258194011693597 -a=eks,b=zee,i=787,x=0.0654097106697118,y=0.4660389375188869 -a=pan,b=eks,i=788,x=0.2217685316094703,y=0.16649100910012216 -a=eks,b=hat,i=789,x=0.4717662995603106,y=0.44972566215644705 -a=wye,b=wye,i=791,x=0.00519908348997844,y=0.3991391178091711 -a=hat,b=hat,i=792,x=0.5475862720333128,y=0.9675473146380916 -a=zee,b=wye,i=793,x=0.9545515061227288,y=0.8875064703498067 -a=wye,b=hat,i=794,x=0.16854110528640676,y=0.23899152324736783 -a=eks,b=eks,i=796,x=0.44475337389030567,y=0.3562483351552209 -a=hat,b=zee,i=797,x=0.3458790979025249,y=0.10530555367157357 -a=wye,b=hat,i=798,x=0.894955252691444,y=0.9020401281837919 -a=zee,b=hat,i=799,x=0.6678020932140406,y=0.7272829012287039 -a=pan,b=wye,i=800,x=0.6728857720452479,y=0.9063282177143175 -a=hat,b=wye,i=802,x=0.6939811641375604,y=0.9772213376028769 -a=eks,b=eks,i=805,x=0.7970666568024275,y=0.7141982352996962 -a=wye,b=wye,i=809,x=0.779445087567334,y=0.6995188082196249 -a=pan,b=eks,i=810,x=0.6751597242266821,y=0.5514064392004425 -a=pan,b=pan,i=814,x=0.7042024611472535,y=0.5509286378129169 -a=pan,b=eks,i=815,x=0.05860005161315873,y=0.0005735237078376976 -a=eks,b=zee,i=816,x=0.11392244176975941,y=0.08027592413428164 -a=hat,b=hat,i=817,x=0.2182634028675824,y=0.031522781055713156 -a=eks,b=hat,i=820,x=0.6028476657314659,y=0.6800202871943302 -a=eks,b=hat,i=822,x=0.2180916247267669,y=0.20200687440786602 -a=hat,b=zee,i=823,x=0.4553739759143408,y=0.04377256284181141 -a=wye,b=pan,i=825,x=0.6611884797250076,y=0.9588317557532128 -a=zee,b=pan,i=826,x=0.2407553754423183,y=0.14438176167139094 -a=eks,b=pan,i=830,x=0.36350612065623267,y=0.2886476639992571 -a=hat,b=wye,i=832,x=0.7659227499835054,y=0.6521346139410953 -a=pan,b=zee,i=833,x=0.8267760334483312,y=0.8318269743977437 -a=zee,b=wye,i=836,x=0.5756190775565698,y=0.7938251688467333 -a=wye,b=wye,i=837,x=0.2328642613637898,y=0.46278413120375006 -a=zee,b=hat,i=840,x=0.6677673890093077,y=0.6533094635586054 -a=hat,b=pan,i=841,x=0.4486203012761554,y=0.3566552462496445 -a=eks,b=hat,i=842,x=0.4549321247838193,y=0.07592100983285954 -a=wye,b=wye,i=843,x=0.255982822267825,y=0.3803102296515556 -a=hat,b=wye,i=847,x=0.49389611860028626,y=0.07353689220151671 -a=zee,b=pan,i=848,x=0.7169514982586007,y=0.9408480112735236 -a=pan,b=eks,i=850,x=0.7274412652107003,y=0.6621932392565703 -a=wye,b=eks,i=852,x=0.664738707605857,y=0.7223078050122264 -a=eks,b=hat,i=853,x=0.1880170274631281,y=0.10968535421904191 -a=hat,b=eks,i=854,x=0.6939278762348635,y=0.5313359369168281 -a=hat,b=hat,i=855,x=0.7112683657239158,y=0.6136040745504255 -a=zee,b=eks,i=856,x=0.5439786015377756,y=0.9686655026402698 -a=zee,b=zee,i=857,x=0.10264607530788517,y=0.3331005309508399 -a=pan,b=wye,i=862,x=0.30274837710060487,y=0.015353477159141038 -a=wye,b=pan,i=863,x=0.23680176335245073,y=0.23457864754397195 -a=zee,b=zee,i=864,x=0.809561039932752,y=0.6017320599557826 -a=wye,b=zee,i=865,x=0.7815565737026456,y=0.8572095724845105 -a=eks,b=hat,i=866,x=0.5917695655140688,y=0.560162197865116 -a=hat,b=zee,i=867,x=0.722695048982041,y=0.8684988555802282 -a=pan,b=wye,i=871,x=0.6789169629628927,y=0.5193967453982994 -a=pan,b=pan,i=872,x=0.7564798789126915,y=0.7115590422599338 -a=pan,b=hat,i=875,x=0.1859774664492485,y=0.3619489833924334 -a=wye,b=wye,i=876,x=0.4835086084877356,y=0.4540385079562712 -a=wye,b=pan,i=877,x=0.27907367543536465,y=0.12385159649360233 -a=eks,b=hat,i=879,x=0.6888483812825917,y=0.5505783461131407 -a=hat,b=pan,i=880,x=0.9443559576513696,y=0.776626094540373 -a=pan,b=pan,i=882,x=0.439665640988951,y=0.4549660840547012 -a=pan,b=hat,i=883,x=0.5540100503192463,y=0.8429668921287791 -a=eks,b=wye,i=886,x=0.3652904236362593,y=0.20906833314831175 -a=pan,b=pan,i=887,x=0.6949995284041934,y=0.8053235553778822 -a=wye,b=wye,i=889,x=0.9080280619248189,y=0.9139513254924729 -a=eks,b=pan,i=896,x=0.18020508273454894,y=0.18233459061350799 -a=zee,b=pan,i=897,x=0.16948195877360084,y=0.4673040380612351 -a=pan,b=zee,i=898,x=0.048671024346735314,y=0.4634456617937973 -a=wye,b=zee,i=900,x=0.0634446641763643,y=0.47070339237478154 -a=hat,b=pan,i=901,x=0.3948962420926134,y=0.2858499628646297 -a=zee,b=hat,i=902,x=0.792376744926382,y=0.7540301970987514 -a=pan,b=zee,i=903,x=0.5150758332324689,y=0.8265689553462827 -a=eks,b=wye,i=907,x=0.5764461281567995,y=0.6560112583406935 -a=hat,b=pan,i=909,x=0.2565065893296261,y=0.3546175861833417 -a=pan,b=eks,i=911,x=0.06608607463859384,y=0.07128733055849312 -a=hat,b=wye,i=913,x=0.5696196789270859,y=0.5118141918287126 -a=eks,b=zee,i=914,x=0.8582285128247622,y=0.7604153187806654 -a=wye,b=eks,i=915,x=0.5460355036287519,y=0.8958184949801713 -a=hat,b=pan,i=916,x=0.2607796424126346,y=0.2105454483785194 -a=wye,b=hat,i=917,x=0.3846528045634492,y=0.3124085567677639 -a=hat,b=zee,i=929,x=0.9119484815981432,y=0.9002090722192556 -a=pan,b=hat,i=931,x=0.15134527475607873,y=0.348369087467138 -a=wye,b=zee,i=933,x=0.3661453331509762,y=0.004152078250187152 -a=wye,b=wye,i=934,x=0.447099608509545,y=0.17594771830007339 -a=zee,b=eks,i=937,x=0.02003336919176857,y=0.26669570512199325 -a=eks,b=wye,i=938,x=0.3043257328168447,y=0.2906418445735329 -a=hat,b=wye,i=944,x=0.8822781716699086,y=0.6067074807238132 -a=zee,b=pan,i=948,x=0.7984764587459684,y=0.6810243958256237 -a=wye,b=hat,i=949,x=0.23478741222352084,y=0.37065868020096504 -a=hat,b=wye,i=950,x=0.09950476962568644,y=0.08527686061721151 -a=wye,b=zee,i=951,x=0.032452509100876825,y=0.13213830932576387 -a=pan,b=pan,i=952,x=0.20155399565096999,y=0.26323541426295427 -a=zee,b=hat,i=953,x=0.7258512915506337,y=0.7130469035339413 -a=wye,b=zee,i=954,x=0.5189900736412828,y=0.9806684784703058 -a=eks,b=wye,i=956,x=0.8483404387366377,y=0.6963230727503091 -a=zee,b=hat,i=959,x=0.5401768517178055,y=0.576926299555725 -a=eks,b=pan,i=964,x=0.11974210479568592,y=0.1727873170586557 -a=wye,b=zee,i=967,x=0.8957509371936184,y=0.6646859799560008 -a=wye,b=pan,i=968,x=0.6531533778557712,y=0.8078705982263845 -a=pan,b=wye,i=973,x=0.31594050674870533,y=0.3202147086921625 -a=pan,b=eks,i=979,x=0.3047140631616194,y=0.012239402814423261 -a=pan,b=hat,i=980,x=0.08006366208466742,y=0.46683918475842656 -a=zee,b=wye,i=982,x=0.37341981725134477,y=0.043362859112128116 -a=eks,b=zee,i=984,x=0.1229552360203735,y=0.4375490388704373 -a=eks,b=hat,i=985,x=0.011903992841803879,y=0.20158842970916258 -a=zee,b=pan,i=986,x=0.36309769750156073,y=0.41372304201591836 -a=zee,b=pan,i=987,x=0.2675153812056569,y=0.31944778253720596 -a=zee,b=eks,i=988,x=0.4159116125988659,y=0.0527646250644187 -a=hat,b=hat,i=990,x=0.6968268719895765,y=0.7388049214848422 -a=wye,b=hat,i=992,x=0.1082025069192426,y=0.382293188133744 -a=pan,b=hat,i=993,x=0.9655911362500376,y=0.6528068171940502 -a=eks,b=wye,i=999,x=0.7530797661303167,y=0.7943533279150342 -a=zee,b=wye,i=1002,x=0.27589217856931847,y=0.4784417775011829 -a=wye,b=hat,i=1004,x=0.7556173435575428,y=0.5360056181198413 -a=zee,b=wye,i=1007,x=0.6726350502133611,y=0.9779321628810685 -a=hat,b=eks,i=1008,x=0.19927285497348735,y=0.22487729305731685 -a=hat,b=eks,i=1010,x=0.32802933242359655,y=0.2955845001645365 -a=pan,b=zee,i=1014,x=0.2224977060602883,y=0.1335049252959022 -a=pan,b=zee,i=1017,x=0.787790582328257,y=0.844311491671081 -a=eks,b=pan,i=1020,x=0.902360533880021,y=0.7028811168584178 -a=zee,b=wye,i=1021,x=0.008857541583488837,y=0.21509348675167894 -a=eks,b=wye,i=1022,x=0.33588773148782947,y=0.40718964301240856 -a=zee,b=eks,i=1024,x=0.38754385741774056,y=0.42814516635986044 -a=pan,b=eks,i=1025,x=0.19841453521545604,y=0.08811826842406556 -a=eks,b=zee,i=1027,x=0.7911574513154387,y=0.7553091091067402 -a=wye,b=eks,i=1029,x=0.2129672492537904,y=0.455409159116715 -a=pan,b=pan,i=1030,x=0.5408386772361381,y=0.7160509492545313 -a=zee,b=pan,i=1032,x=0.8214019848831586,y=0.6593835512799063 -a=eks,b=wye,i=1033,x=0.9319773759232135,y=0.8773892832568154 -a=eks,b=hat,i=1034,x=0.21608546142882312,y=0.30554114451483116 -a=hat,b=hat,i=1035,x=0.09020906616714786,y=0.10290991425754714 -a=wye,b=zee,i=1036,x=0.3531778666649932,y=0.2809207717510849 -a=hat,b=eks,i=1037,x=0.0945175541677894,y=0.3745112769716772 -a=zee,b=pan,i=1038,x=0.5692057342171193,y=0.9606327704233413 -a=zee,b=hat,i=1039,x=0.3081554551270379,y=0.4385650169051888 -a=pan,b=wye,i=1041,x=0.1485239533830236,y=0.1776854474981574 -a=pan,b=eks,i=1043,x=0.9037009385297075,y=0.6127765961736429 -a=wye,b=pan,i=1047,x=0.9924515398966479,y=0.8295830268367035 -a=zee,b=zee,i=1050,x=0.7931385685414742,y=0.7121487657433946 -a=wye,b=zee,i=1054,x=0.08626749693608815,y=0.25205147479956 -a=eks,b=eks,i=1055,x=0.7570291652540911,y=0.5426597756349021 -a=wye,b=eks,i=1056,x=0.17697196127444081,y=0.48721255903838334 -a=pan,b=hat,i=1058,x=0.8522482352165042,y=0.7495559067319948 -a=hat,b=pan,i=1059,x=0.2746468542015157,y=0.06589726142698449 -a=hat,b=hat,i=1061,x=0.7349337283030247,y=0.8809097022915752 -a=zee,b=hat,i=1062,x=0.8802861735497903,y=0.6464219752541935 -a=pan,b=zee,i=1066,x=0.0174503828855882,y=0.3772767215216971 -a=pan,b=hat,i=1067,x=0.5324513907264202,y=0.7766825690772374 -a=pan,b=zee,i=1068,x=0.9292735422372311,y=0.7845794722193757 -a=wye,b=hat,i=1069,x=0.10796407185484191,y=0.026926570164813146 -a=eks,b=hat,i=1071,x=0.15020029058361362,y=0.45627529973691716 -a=eks,b=zee,i=1073,x=0.09738725055678144,y=0.08505208961455624 -a=hat,b=hat,i=1074,x=0.3236826909608632,y=0.49627141594209967 -a=eks,b=zee,i=1075,x=0.7153896932288586,y=0.9778494726905622 -a=pan,b=zee,i=1077,x=0.5856627674432751,y=0.9241757857209006 -a=eks,b=eks,i=1078,x=0.35578945733022505,y=0.45528814372216575 -a=wye,b=wye,i=1080,x=0.016813529366139446,y=0.30619226711821357 -a=pan,b=hat,i=1081,x=0.9328542327992406,y=0.9238747036441417 -a=eks,b=hat,i=1082,x=0.818988631617168,y=0.6912196193544532 -a=hat,b=zee,i=1084,x=0.41406718708821955,y=0.02723245214010661 -a=eks,b=zee,i=1087,x=0.041919682544647396,y=0.43365253130183956 -a=eks,b=wye,i=1091,x=0.9741063795340834,y=0.5869419824678774 -a=wye,b=pan,i=1093,x=0.060917243371145124,y=0.0729984416375653 -a=pan,b=eks,i=1097,x=0.36433855475903487,y=0.28640575782602984 -a=pan,b=zee,i=1098,x=0.9388863703832938,y=0.9481045761632589 -a=zee,b=pan,i=1101,x=0.9851142251459588,y=0.833308434948654 -a=hat,b=zee,i=1102,x=0.6058843659959886,y=0.914771957616851 -a=wye,b=zee,i=1104,x=0.6026401587598063,y=0.9232948941188992 -a=wye,b=zee,i=1107,x=0.2172040459296869,y=0.04347447260250059 -a=zee,b=wye,i=1108,x=0.17849311848568739,y=0.15336908789618675 -a=pan,b=zee,i=1109,x=0.9209948537835644,y=0.9617211607571948 -a=hat,b=zee,i=1111,x=0.5096259842809261,y=0.9716058274135191 -a=wye,b=hat,i=1113,x=0.04619109705664248,y=0.07731183378456241 -a=eks,b=zee,i=1114,x=0.6225031791605239,y=0.724470067269006 -a=pan,b=pan,i=1116,x=0.3318167439135842,y=0.07638995864053721 -a=eks,b=eks,i=1118,x=0.42321284015690686,y=0.18075244176916405 -a=hat,b=zee,i=1119,x=0.9947060390455312,y=0.9155106367235321 -a=eks,b=eks,i=1121,x=0.011345137277951278,y=0.30150866101509777 -a=wye,b=wye,i=1126,x=0.8391082612863554,y=0.8564234939160587 -a=hat,b=pan,i=1127,x=0.832626957843269,y=0.6240442951248336 -a=hat,b=hat,i=1128,x=0.8806935192862494,y=0.7838162296913623 -a=pan,b=zee,i=1129,x=0.3315347253194,y=0.008089402263374845 -a=zee,b=wye,i=1130,x=0.01851853736108866,y=0.17184568517491516 -a=wye,b=zee,i=1131,x=0.8126126224772602,y=0.9995009548069009 -a=wye,b=eks,i=1134,x=0.7808769789539313,y=0.8783411417393904 -a=zee,b=eks,i=1140,x=0.048571653758132216,y=0.3492112898081101 -a=hat,b=eks,i=1145,x=0.8273428505388051,y=0.9831021972218925 -a=wye,b=zee,i=1147,x=0.011254496718364537,y=0.2947614358547457 -a=wye,b=eks,i=1148,x=0.510274781147883,y=0.6342886591607202 -a=hat,b=hat,i=1150,x=0.4058826696970118,y=0.4216435681134768 -a=pan,b=hat,i=1153,x=0.6757867606577086,y=0.7740341802587707 -a=hat,b=eks,i=1154,x=0.48734948309736814,y=0.03392833831821873 -a=hat,b=pan,i=1155,x=0.15696039673828777,y=0.29845938463448995 -a=zee,b=hat,i=1157,x=0.8122264673038031,y=0.8517729655458225 -a=zee,b=wye,i=1159,x=0.46769194201594133,y=0.4329746427091592 -a=eks,b=wye,i=1162,x=0.9629901424599551,y=0.7303763539966592 -a=hat,b=pan,i=1163,x=0.1540633521892789,y=0.30579559836649084 -a=hat,b=pan,i=1165,x=0.6211654981395032,y=0.8227816494549414 -a=eks,b=eks,i=1166,x=0.43746753562542595,y=0.4554692262381064 -a=eks,b=pan,i=1168,x=0.8136679912512943,y=0.597540308230969 -a=eks,b=hat,i=1170,x=0.38648551728927116,y=0.444170386297162 -a=wye,b=zee,i=1171,x=0.6468403370363878,y=0.9265036001050484 -a=wye,b=hat,i=1172,x=0.24417531360698597,y=0.4885016640644757 -a=hat,b=wye,i=1174,x=0.8826971260268877,y=0.5204304309651815 -a=wye,b=hat,i=1175,x=0.07253012277298443,y=0.23424850735777059 -a=hat,b=eks,i=1176,x=0.006644223863763399,y=0.0816917135559706 -a=eks,b=zee,i=1178,x=0.6806297878854731,y=0.5818723196551134 -a=pan,b=pan,i=1179,x=0.8705072785671686,y=0.6988727124241529 -a=hat,b=pan,i=1186,x=0.18605162703349232,y=0.08984973385947226 -a=hat,b=pan,i=1191,x=0.6073887594007545,y=0.582980066141568 -a=pan,b=pan,i=1195,x=0.16832227022787238,y=0.13828673042487394 -a=zee,b=zee,i=1198,x=0.7027548035545187,y=0.5696437156771905 -a=hat,b=eks,i=1203,x=0.13371374012873294,y=0.255811175503322 -a=pan,b=eks,i=1205,x=0.7829882013835832,y=0.8062997039846184 -a=hat,b=eks,i=1211,x=0.8188718956849538,y=0.8967648753839026 -a=pan,b=wye,i=1212,x=0.664842209320305,y=0.5067617041720663 -a=pan,b=pan,i=1214,x=0.7158445324765502,y=0.7170272500849562 -a=zee,b=eks,i=1215,x=0.17023806172245382,y=0.11112961156527701 -a=pan,b=pan,i=1217,x=0.058339498506774445,y=0.3299590477816785 -a=pan,b=wye,i=1218,x=0.2981850301136384,y=0.275715699110609 -a=zee,b=pan,i=1221,x=0.1120496540408027,y=0.052474214794520524 -a=zee,b=wye,i=1227,x=0.35351274012969736,y=0.4041475707851616 -a=eks,b=eks,i=1228,x=0.5030002251433316,y=0.8127865742005792 -a=hat,b=eks,i=1229,x=0.6208757978424075,y=0.5685317001125881 -a=hat,b=wye,i=1230,x=0.4033883868841214,y=0.21662083975598512 -a=zee,b=zee,i=1232,x=0.6255227701030528,y=0.7068037158292888 -a=zee,b=hat,i=1233,x=0.16099869622122553,y=0.03145480439751913 -a=wye,b=eks,i=1234,x=0.29236003818241163,y=0.0038729096629406268 -a=eks,b=wye,i=1236,x=0.25200335314789113,y=0.18668063103395705 -a=pan,b=hat,i=1237,x=0.7976885073930762,y=0.5851390530977472 -a=eks,b=zee,i=1240,x=0.31745479549254885,y=0.19433880518244362 -a=pan,b=zee,i=1243,x=0.6589609168139929,y=0.6454105665267801 -a=wye,b=eks,i=1244,x=0.2787899466812519,y=0.06055887677281169 -a=pan,b=hat,i=1248,x=0.1525604218696871,y=0.07482470280574516 -a=hat,b=hat,i=1249,x=0.7002367713266386,y=0.6487527612372115 -a=zee,b=hat,i=1250,x=0.9701426957388892,y=0.7845500860373503 -a=pan,b=hat,i=1251,x=0.5290805139059341,y=0.7100071242645416 -a=zee,b=eks,i=1253,x=0.5423655422122198,y=0.859227213109029 -a=zee,b=pan,i=1254,x=0.21221332375586466,y=0.26582553763793293 -a=zee,b=eks,i=1255,x=0.5793553556065434,y=0.563660887083747 -a=wye,b=wye,i=1257,x=0.23334157949355694,y=0.48533573180276546 -a=zee,b=wye,i=1259,x=0.18343409452228054,y=0.018648673229345936 -a=wye,b=eks,i=1260,x=0.7451552312920868,y=0.7083570752878636 -a=eks,b=pan,i=1262,x=0.6119687598964016,y=0.8309635765979287 -a=hat,b=zee,i=1263,x=0.990205350112817,y=0.9130137981522629 -a=wye,b=eks,i=1264,x=0.2728580162726342,y=0.34083170474058677 -a=wye,b=hat,i=1265,x=0.03629556392023969,y=0.14427174473473803 -a=zee,b=eks,i=1266,x=0.042350338334240956,y=0.1289699792266037 -a=hat,b=zee,i=1269,x=0.23099691497930386,y=0.010607810026782571 -a=wye,b=pan,i=1273,x=0.3500305547201491,y=0.19911752000719163 -a=wye,b=zee,i=1275,x=0.45988125966489024,y=0.44169640932292065 -a=hat,b=eks,i=1280,x=0.46886095371359493,y=0.40718264857353603 -a=wye,b=eks,i=1281,x=0.23006798520906935,y=0.08383446031686925 -a=hat,b=eks,i=1283,x=0.5054724357500647,y=0.7470906139600201 -a=hat,b=zee,i=1284,x=0.1351519159722092,y=0.4498407585837816 -a=eks,b=wye,i=1285,x=0.9928332865840428,y=0.6970272102748626 -a=zee,b=eks,i=1288,x=0.9628830236233576,y=0.9651783931494015 -a=hat,b=eks,i=1289,x=0.18315393370531752,y=0.1945534839637214 -a=eks,b=zee,i=1291,x=0.9018025573968887,y=0.8449305240236747 -a=eks,b=eks,i=1292,x=0.7608771883116217,y=0.7517241556722504 -a=wye,b=hat,i=1293,x=0.15064377804093187,y=0.4793850890733947 -a=zee,b=wye,i=1298,x=0.779174519106144,y=0.8363414405399494 -a=wye,b=wye,i=1302,x=0.18017602702804525,y=0.2080647082488024 -a=eks,b=pan,i=1304,x=0.8469416170979848,y=0.9095929671389578 -a=hat,b=wye,i=1305,x=0.1011787110939425,y=0.17876379874526727 -a=hat,b=pan,i=1306,x=0.354306631649279,y=0.14650574878242473 -a=hat,b=zee,i=1313,x=0.6080368706120283,y=0.7923296244615721 -a=zee,b=wye,i=1315,x=0.49174797358568,y=0.21477329503908604 -a=hat,b=zee,i=1316,x=0.8447890636321257,y=0.5448553401794702 -a=zee,b=pan,i=1317,x=0.234827977442866,y=0.36535789013854214 -a=hat,b=pan,i=1323,x=0.785186354961605,y=0.5187554224402933 -a=hat,b=wye,i=1324,x=0.4653747699218791,y=0.07316638818680055 -a=wye,b=eks,i=1326,x=0.5019035191475638,y=0.9808444985066099 -a=zee,b=wye,i=1330,x=0.20196851520666603,y=0.4686296388879383 -a=pan,b=eks,i=1332,x=0.9437028531431318,y=0.8092545870987017 -a=zee,b=zee,i=1335,x=0.5987101585948386,y=0.7670719549466084 -a=eks,b=wye,i=1339,x=0.5575467999942988,y=0.7816590387896203 -a=pan,b=zee,i=1341,x=0.8491462615453724,y=0.7667214357631618 -a=pan,b=eks,i=1344,x=0.14343578380352173,y=0.3534760283313706 -a=zee,b=zee,i=1345,x=0.3068266605225908,y=0.1872593613407797 -a=eks,b=pan,i=1347,x=0.6927435409900552,y=0.8895994295177906 -a=eks,b=pan,i=1348,x=0.6801900016838289,y=0.81285575413888 -a=wye,b=hat,i=1350,x=0.7464955639967092,y=0.635601451124977 -a=zee,b=zee,i=1353,x=0.09798837394769866,y=0.4857389187941127 -a=pan,b=zee,i=1355,x=0.4204132169844832,y=0.016976719720622646 -a=hat,b=wye,i=1357,x=0.6527272744396904,y=0.5760550769108022 -a=wye,b=zee,i=1358,x=0.40135887170615936,y=0.49587544313347875 -a=wye,b=pan,i=1360,x=0.13086231928141434,y=0.010866288916755895 -a=pan,b=pan,i=1362,x=0.21757550606480047,y=0.3250911878972238 -a=zee,b=wye,i=1363,x=0.12002019129987074,y=0.330458068115164 -a=hat,b=zee,i=1364,x=0.11093600453342645,y=0.46812386024583597 -a=pan,b=eks,i=1366,x=0.44912372133198186,y=0.13603083622218803 -a=pan,b=hat,i=1368,x=0.5290826491768821,y=0.7868317670838846 -a=hat,b=hat,i=1369,x=0.9003291714409005,y=0.6548894347969356 -a=eks,b=zee,i=1373,x=0.7520637884030741,y=0.7184683086802719 -a=hat,b=zee,i=1376,x=0.3256794711244385,y=0.38645249736136067 -a=eks,b=hat,i=1377,x=0.179526538530434,y=0.20081807319252887 -a=zee,b=hat,i=1380,x=0.85880207513692,y=0.5362089929386346 -a=eks,b=eks,i=1381,x=0.7480180475780296,y=0.9104247466520813 -a=pan,b=pan,i=1382,x=0.5734287289517749,y=0.8325676507978588 -a=wye,b=pan,i=1383,x=0.7445746522867436,y=0.977610514961822 -a=hat,b=pan,i=1384,x=0.18929691453341568,y=0.09316356559826999 -a=hat,b=eks,i=1385,x=0.8173647642606612,y=0.685818179101868 -a=eks,b=hat,i=1387,x=0.6336667717285401,y=0.7885877398020724 -a=eks,b=eks,i=1388,x=0.6391264035893477,y=0.885429385188037 -a=zee,b=hat,i=1389,x=0.2737321526786327,y=0.40630528382661724 -a=eks,b=wye,i=1391,x=0.4921330479506649,y=0.23072265405056214 -a=zee,b=zee,i=1393,x=0.568247504526133,y=0.7756896840334044 -a=eks,b=wye,i=1394,x=0.2879212011081145,y=0.2954751331645483 -a=pan,b=zee,i=1395,x=0.6235312578229149,y=0.9190115143142508 -a=wye,b=wye,i=1397,x=0.1908719616976211,y=0.49066946794315214 -a=pan,b=wye,i=1398,x=0.44636597753534346,y=0.1332459124221107 -a=pan,b=pan,i=1400,x=0.7498043663610715,y=0.9134287398239703 -a=hat,b=eks,i=1403,x=0.7141565502820018,y=0.8983828801012884 -a=eks,b=wye,i=1404,x=0.014080795466545282,y=0.18026639861936977 -a=zee,b=pan,i=1405,x=0.6715143596794965,y=0.921403075922691 -a=zee,b=zee,i=1406,x=0.542929251925297,y=0.5096745932177545 -a=hat,b=hat,i=1407,x=0.925464277899458,y=0.8114581401124622 -a=hat,b=pan,i=1409,x=0.7360283636432529,y=0.530485536184739 -a=zee,b=zee,i=1412,x=0.3608642872844662,y=0.47981840619533633 -a=pan,b=pan,i=1414,x=0.41821681358517837,y=0.09261463379853807 -a=eks,b=pan,i=1415,x=0.36407936516918227,y=0.412995532484439 -a=zee,b=eks,i=1416,x=0.8037535280997706,y=0.9967016304554022 -a=zee,b=wye,i=1417,x=0.03656836512418926,y=0.24047847966373825 -a=eks,b=zee,i=1419,x=0.0019272339003844063,y=0.4494856127708353 -a=eks,b=hat,i=1424,x=0.816131333846752,y=0.6719670303804344 -a=pan,b=hat,i=1425,x=0.7608261327843064,y=0.8033020578141182 -a=hat,b=wye,i=1427,x=0.37742125258201054,y=0.21248345631269194 -a=hat,b=hat,i=1430,x=0.2249233470581683,y=0.2783168994644075 -a=wye,b=pan,i=1439,x=0.29634793935457593,y=0.15883447307684273 -a=hat,b=wye,i=1440,x=0.9552968869720926,y=0.7549130979076563 -a=eks,b=wye,i=1441,x=0.782665993384691,y=0.6769028671991114 -a=wye,b=wye,i=1442,x=0.1111822347810345,y=0.4098271097617635 -a=wye,b=pan,i=1443,x=0.9004115661167051,y=0.8953351280072975 -a=wye,b=hat,i=1445,x=0.5126253689092004,y=0.9851511494903027 -a=pan,b=zee,i=1449,x=0.7342563560822476,y=0.5866440660526566 -a=zee,b=pan,i=1451,x=0.7266623210900269,y=0.5529202681153802 -a=pan,b=zee,i=1456,x=0.6285804221646021,y=0.9875061625049019 -a=zee,b=eks,i=1462,x=0.11393628149045654,y=0.14776897927457688 -a=zee,b=wye,i=1463,x=0.9485009664381004,y=0.6876104431895068 -a=pan,b=eks,i=1464,x=0.5034433003230543,y=0.9194125130762513 -a=pan,b=zee,i=1465,x=0.18563268428375257,y=0.09241285966004353 -a=eks,b=eks,i=1467,x=0.5966766034558736,y=0.5918168248126415 -a=zee,b=wye,i=1468,x=0.8524700641554818,y=0.9423215024482277 -a=pan,b=pan,i=1472,x=0.13616411059500877,y=0.29064871767206657 -a=eks,b=wye,i=1474,x=0.4211179162576446,y=0.21058536437655107 -a=zee,b=pan,i=1476,x=0.13639522899731849,y=0.23338840020951146 -a=wye,b=hat,i=1478,x=0.9181407667919723,y=0.542065887413139 -a=hat,b=eks,i=1483,x=0.14507297992678936,y=0.005565478369193744 -a=wye,b=pan,i=1486,x=0.42338989462787613,y=0.21044104481161763 -a=pan,b=zee,i=1489,x=0.9254041583361616,y=0.8626755735608904 -a=zee,b=hat,i=1492,x=0.31566626553195365,y=0.18969237480034762 -a=pan,b=hat,i=1493,x=0.7443466050859169,y=0.5883736148067066 -a=pan,b=zee,i=1494,x=0.489472189755636,y=0.2436710488233178 -a=pan,b=hat,i=1495,x=0.31071524278241913,y=0.3032733210952677 -a=eks,b=zee,i=1497,x=0.13194664583383386,y=0.13915515391288613 -a=wye,b=pan,i=1498,x=0.40290420886277534,y=0.45645851051725006 -a=zee,b=wye,i=1500,x=0.8051155053673082,y=0.628483371578552 -a=hat,b=pan,i=1501,x=0.8675575754177055,y=0.5525846951861648 -a=wye,b=pan,i=1503,x=0.5396577054171726,y=0.6580836727630581 -a=eks,b=wye,i=1504,x=0.3351263725136986,y=0.16701945030517473 -a=hat,b=wye,i=1506,x=0.11505114122495796,y=0.344787577171222 -a=wye,b=hat,i=1507,x=0.84331982245662,y=0.5563459493044525 -a=eks,b=hat,i=1513,x=0.10774228377040074,y=0.15410741897104152 -a=pan,b=eks,i=1516,x=0.322276672926436,y=0.4473633411895408 -a=eks,b=eks,i=1517,x=0.9166592846030838,y=0.9746072560912218 -a=eks,b=zee,i=1519,x=0.008458305921919762,y=0.13018614842795018 -a=wye,b=pan,i=1520,x=0.6365490008145669,y=0.717108948902972 -a=zee,b=eks,i=1521,x=0.8128775978881801,y=0.8496069709075166 -a=zee,b=eks,i=1522,x=0.7549485896689099,y=0.8158698570741542 -a=wye,b=eks,i=1526,x=0.5993045597268822,y=0.8066671481799782 -a=wye,b=zee,i=1530,x=0.0001874794831505655,y=0.316767027644979 -a=pan,b=zee,i=1531,x=0.8883596657541506,y=0.5839060771184763 -a=eks,b=hat,i=1532,x=0.901005316986836,y=0.8140237382706386 -a=hat,b=eks,i=1534,x=0.03906160456377494,y=0.1079795640773159 -a=pan,b=pan,i=1538,x=0.7004457835988849,y=0.9254536373090144 -a=zee,b=zee,i=1539,x=0.08095025737185801,y=0.42649957909211544 -a=zee,b=hat,i=1540,x=0.5503724625066438,y=0.8550739169017145 -a=pan,b=hat,i=1543,x=0.5949367118079497,y=0.8559890968130015 -a=pan,b=eks,i=1546,x=0.2200107807755327,y=0.4056585225829311 -a=hat,b=zee,i=1548,x=0.7802297233261388,y=0.7951833869084849 -a=wye,b=wye,i=1550,x=0.08609382344969774,y=0.39902582557569544 -a=wye,b=eks,i=1552,x=0.7411482258747379,y=0.5326218258597286 -a=zee,b=eks,i=1554,x=0.27856650294803487,y=0.3773512841270542 -a=zee,b=pan,i=1556,x=0.810331031324778,y=0.8529873485281747 -a=pan,b=eks,i=1557,x=0.8809860667113874,y=0.6544680775174134 -a=zee,b=zee,i=1558,x=0.5835792774028313,y=0.7084079588663174 -a=pan,b=zee,i=1561,x=0.705850527727704,y=0.9592589404430422 -a=hat,b=hat,i=1562,x=0.31193139935992087,y=0.16547553772610035 -a=zee,b=pan,i=1565,x=0.012156208135737478,y=0.3456043711066239 -a=zee,b=hat,i=1568,x=0.7354460222177639,y=0.9579628704250065 -a=pan,b=wye,i=1571,x=0.6137258407313767,y=0.9758738290281926 -a=pan,b=pan,i=1572,x=0.21906870698568925,y=0.09712236243897499 -a=zee,b=zee,i=1576,x=0.8002836252017393,y=0.8669638365198293 -a=wye,b=hat,i=1577,x=0.0784765489757262,y=0.2919577999135742 -a=wye,b=zee,i=1579,x=0.8737327971880199,y=0.7021864790253274 -a=zee,b=wye,i=1580,x=0.5926703370632916,y=0.6204701558848567 -a=eks,b=zee,i=1581,x=0.3258371500409273,y=0.4813220118624293 -a=pan,b=wye,i=1586,x=0.6737421455744065,y=0.8440144488545762 -a=wye,b=eks,i=1587,x=0.2445786639209251,y=0.4387287649518946 -a=hat,b=zee,i=1589,x=0.6381249665841564,y=0.6622471527137181 -a=zee,b=zee,i=1590,x=0.49197726385941254,y=0.2851074772091239 -a=pan,b=wye,i=1591,x=0.27721780314806643,y=0.42224771091002244 -a=pan,b=pan,i=1595,x=0.5198729892603339,y=0.8135669258519346 -a=eks,b=wye,i=1596,x=0.8578168450376926,y=0.8632162279300964 -a=zee,b=hat,i=1601,x=0.21917535804489907,y=0.49754205213030844 -a=wye,b=pan,i=1602,x=0.8342980736735198,y=0.6640472095662565 -a=pan,b=hat,i=1605,x=0.7597487093068874,y=0.8484514239165745 -a=wye,b=eks,i=1610,x=0.09062598480760276,y=0.3361854985819238 -a=eks,b=pan,i=1612,x=0.34051658433735943,y=0.28757859267810415 -a=eks,b=wye,i=1615,x=0.05539774482352222,y=0.030230875132911672 -a=zee,b=eks,i=1618,x=0.41825022828100444,y=0.010066997525972399 -a=eks,b=hat,i=1620,x=0.1861273836070172,y=0.2869387265308132 -a=wye,b=eks,i=1621,x=0.4197448738879491,y=0.057355525921190864 -a=wye,b=zee,i=1625,x=0.7652458613408694,y=0.959285581308301 -a=hat,b=zee,i=1629,x=0.41083118021802867,y=0.019106148002514645 -a=wye,b=hat,i=1631,x=0.7242804590797115,y=0.9448679681099966 -a=wye,b=pan,i=1635,x=0.8895974823179132,y=0.9200024991202054 -a=wye,b=wye,i=1636,x=0.9393356532728606,y=0.6298264999340702 -a=wye,b=eks,i=1637,x=0.9073542081519019,y=0.6848431646656846 -a=eks,b=wye,i=1640,x=0.7198824080298333,y=0.7037862057023272 -a=pan,b=pan,i=1645,x=0.8386173577817879,y=0.7579883039951569 -a=wye,b=zee,i=1647,x=0.3542223974517451,y=0.4616303281316404 -a=zee,b=pan,i=1648,x=0.1732057619535785,y=0.21331253786975357 -a=zee,b=wye,i=1650,x=0.8310778499617896,y=0.8744033167682863 -a=wye,b=wye,i=1653,x=0.6034173789737551,y=0.7826811363427305 -a=zee,b=eks,i=1655,x=0.31813723998346144,y=0.2538852441364856 -a=wye,b=hat,i=1656,x=0.18836020025377764,y=0.20683034404839462 -a=wye,b=zee,i=1658,x=0.42244696220990907,y=0.25272710810302346 -a=wye,b=hat,i=1659,x=0.29012052922811093,y=0.41591681426338967 -a=wye,b=hat,i=1660,x=0.4268085841844734,y=0.3388035517120921 -a=eks,b=hat,i=1661,x=0.13934499347961038,y=0.03663996929413327 -a=wye,b=eks,i=1665,x=0.8939474493355103,y=0.9223252135239184 -a=wye,b=hat,i=1669,x=0.4710950479501834,y=0.03651025725804602 -a=hat,b=eks,i=1670,x=0.6003116669898597,y=0.7981557111587316 -a=pan,b=pan,i=1671,x=0.8116187328458756,y=0.8072718271616067 -a=pan,b=wye,i=1672,x=0.7034003424147444,y=0.6847351199705963 -a=wye,b=hat,i=1673,x=0.5949143416873871,y=0.8102803139285161 -a=wye,b=wye,i=1676,x=0.29137127774161453,y=0.3509788972831772 -a=zee,b=hat,i=1677,x=0.051223624824948355,y=0.48806061670524303 -a=pan,b=zee,i=1678,x=0.22830360777714898,y=0.040523234104181904 -a=zee,b=zee,i=1679,x=0.2004874019427556,y=0.2692182176272302 -a=hat,b=pan,i=1681,x=0.8474039861745504,y=0.5929326488850256 -a=pan,b=zee,i=1682,x=0.6678126441832403,y=0.7581822567177666 -a=eks,b=eks,i=1683,x=0.1656742241132675,y=0.25898444627641315 -a=eks,b=eks,i=1684,x=0.08681268181886848,y=0.14340546739344362 -a=pan,b=eks,i=1687,x=0.663918740679759,y=0.7797473286438443 -a=hat,b=eks,i=1689,x=0.49022956784197735,y=0.4412363150159613 -a=wye,b=hat,i=1691,x=0.19346871577634817,y=0.3548449217449817 -a=eks,b=zee,i=1692,x=0.2220528759711472,y=0.2854499747333922 -a=wye,b=pan,i=1693,x=0.6318004848086037,y=0.8235151199361017 -a=hat,b=hat,i=1694,x=0.22300051255024678,y=0.23627303242311026 -a=pan,b=eks,i=1696,x=0.5409026908587434,y=0.8707138792965543 -a=zee,b=eks,i=1697,x=0.8215348448990311,y=0.5963587804425763 -a=eks,b=wye,i=1706,x=0.867732327367188,y=0.7815034918779579 -a=hat,b=wye,i=1709,x=0.7255615455173713,y=0.7788950854100821 -a=eks,b=hat,i=1711,x=0.8331359499607889,y=0.8880694168170389 -a=pan,b=zee,i=1712,x=0.07987647709173995,y=0.13417502683990923 -a=eks,b=wye,i=1713,x=0.43055194021989684,y=0.12038634859450736 -a=eks,b=eks,i=1714,x=0.5087128193007605,y=0.9531328272635052 -a=zee,b=wye,i=1716,x=0.9367542179955354,y=0.8831199104153296 -a=pan,b=pan,i=1720,x=0.26837378206040097,y=0.3273738090239059 -a=eks,b=pan,i=1722,x=0.7488627212441221,y=0.7589673147670182 -a=pan,b=zee,i=1723,x=0.22059597690872113,y=0.4590031168653098 -a=zee,b=wye,i=1724,x=0.11085385425683147,y=0.18276048166565262 -a=eks,b=eks,i=1725,x=0.8016828955823794,y=0.5017037375277129 -a=eks,b=wye,i=1726,x=0.9929352438598067,y=0.836317286740252 -a=hat,b=pan,i=1727,x=0.015544541266721779,y=0.4301942866494898 -a=wye,b=zee,i=1730,x=0.17481728816675346,y=0.4661820645212398 -a=eks,b=wye,i=1732,x=0.9141703983722962,y=0.7783272768366281 -a=pan,b=wye,i=1733,x=0.4811498350363058,y=0.31752434003930774 -a=hat,b=hat,i=1741,x=0.6667341296371178,y=0.5083249671499618 -a=zee,b=zee,i=1742,x=0.5570445537603863,y=0.9969595288070264 -a=hat,b=pan,i=1743,x=0.3878736075798501,y=0.09689320155996384 -a=hat,b=wye,i=1744,x=0.47545940383287155,y=0.035171107409935454 -a=zee,b=hat,i=1746,x=0.058673442891371996,y=0.28933038921745524 -a=eks,b=wye,i=1748,x=0.3689045321575106,y=0.43375960646000566 -a=zee,b=pan,i=1750,x=0.42748309274481444,y=0.40582328846411353 -a=eks,b=hat,i=1752,x=0.6822739323301563,y=0.934728306935636 -a=hat,b=hat,i=1756,x=0.6677910628012946,y=0.7992076156627536 -a=pan,b=pan,i=1757,x=0.018771917494669887,y=0.07627637321631209 -a=eks,b=eks,i=1758,x=0.3849737318613389,y=0.10314796719548613 -a=eks,b=hat,i=1759,x=0.004605943802663104,y=0.13706408448625906 -a=zee,b=zee,i=1761,x=0.9779052389253532,y=0.5003086801528233 -a=hat,b=pan,i=1764,x=0.02195532641775666,y=0.2526330533315183 -a=hat,b=eks,i=1765,x=0.2835946220779688,y=0.29118113110322497 -a=eks,b=wye,i=1770,x=0.7022926949673525,y=0.8178450530445518 -a=hat,b=eks,i=1772,x=0.585792241890598,y=0.7443360574921659 -a=eks,b=pan,i=1778,x=0.5825936705834729,y=0.5453162110699705 -a=pan,b=zee,i=1780,x=0.1846415746915494,y=0.04736023830541203 -a=pan,b=eks,i=1782,x=0.9210030244758979,y=0.7773896236831834 -a=wye,b=wye,i=1784,x=0.8612436216521431,y=0.8048330008328066 -a=pan,b=zee,i=1786,x=0.2494860009657509,y=0.17194280903044357 -a=eks,b=eks,i=1787,x=0.368000320083405,y=0.4886055420500375 -a=pan,b=wye,i=1788,x=0.26250246334689176,y=0.04787633922145995 -a=hat,b=zee,i=1790,x=0.37729036546983097,y=0.27703668720411234 -a=pan,b=zee,i=1792,x=0.8322225569737312,y=0.7917170874641617 -a=wye,b=zee,i=1793,x=0.31884392088021907,y=0.48529327738748296 -a=hat,b=zee,i=1795,x=0.16118129356442434,y=0.16950272509494824 -a=zee,b=eks,i=1796,x=0.4942226187236075,y=0.14210516571467535 -a=hat,b=zee,i=1797,x=0.7287749063387707,y=0.9927587108357429 -a=zee,b=pan,i=1800,x=0.72307448294554,y=0.6376778174182595 -a=pan,b=eks,i=1801,x=0.8102218415617043,y=0.6044303313247449 -a=eks,b=wye,i=1803,x=0.5196592664144227,y=0.7156673976778524 -a=hat,b=wye,i=1808,x=0.2287730659373145,y=0.20360891960927452 -a=eks,b=zee,i=1809,x=0.5828879813451391,y=0.8871296430025095 -a=wye,b=hat,i=1810,x=0.10808902686015609,y=0.003095657967865484 -a=zee,b=wye,i=1811,x=0.879138779526544,y=0.8158846610141476 -a=eks,b=pan,i=1815,x=0.5418348248161854,y=0.9355389520025802 -a=hat,b=hat,i=1816,x=0.09792806194299297,y=0.14176660544329966 -a=pan,b=pan,i=1817,x=0.5655519977509864,y=0.5975680493813812 -a=pan,b=wye,i=1819,x=0.18318519888267681,y=0.43197282065530884 -a=hat,b=wye,i=1822,x=0.522603809398008,y=0.6634567147948507 -a=zee,b=hat,i=1823,x=0.5191794392445693,y=0.5255931403873793 -a=wye,b=pan,i=1825,x=0.5392802909916755,y=0.8897079123047565 -a=wye,b=pan,i=1826,x=0.8957889050713344,y=0.7119911089910552 -a=hat,b=hat,i=1827,x=0.7124428569925854,y=0.5480761759295041 -a=zee,b=hat,i=1828,x=0.05786804641448351,y=0.4254319991402028 -a=zee,b=hat,i=1830,x=0.2721305750226911,y=0.005377285991549963 -a=pan,b=hat,i=1831,x=0.18303692231105184,y=0.21025826705763861 -a=eks,b=wye,i=1835,x=0.9900052984177767,y=0.8879825093814294 -a=hat,b=eks,i=1837,x=0.9591593624436306,y=0.6113919452246622 -a=hat,b=zee,i=1838,x=0.559343676070325,y=0.890209332873675 -a=pan,b=hat,i=1839,x=0.5368391085129115,y=0.8180683703610315 -a=pan,b=hat,i=1842,x=0.9898704891265324,y=0.7317672838087951 -a=hat,b=eks,i=1845,x=0.09049828109166225,y=0.1947578588027301 -a=zee,b=wye,i=1847,x=0.5102908546678789,y=0.8622466590956885 -a=eks,b=wye,i=1848,x=0.9737508284191876,y=0.6060569185675129 -a=eks,b=eks,i=1851,x=0.7390412177790203,y=0.769519937153525 -a=zee,b=wye,i=1853,x=0.8447601423313442,y=0.8520011644241022 -a=pan,b=hat,i=1855,x=0.8401351548600108,y=0.6504879006085633 -a=hat,b=zee,i=1856,x=0.07606845988104194,y=0.00034299355854428004 -a=wye,b=zee,i=1857,x=0.4582107832207104,y=0.2944016633400677 -a=eks,b=wye,i=1858,x=0.9930106907313097,y=0.7391793267018062 -a=hat,b=pan,i=1859,x=0.42255637553704006,y=0.02707473931820803 -a=eks,b=hat,i=1862,x=0.8127278660333865,y=0.8191943473539423 -a=eks,b=zee,i=1865,x=0.38057266246696253,y=0.03213839928081663 -a=eks,b=hat,i=1866,x=0.8031652473986357,y=0.5958264736432561 -a=wye,b=wye,i=1867,x=0.15951611637472107,y=0.4077662801256805 -a=eks,b=zee,i=1868,x=0.6732934218406293,y=0.7505416061385557 -a=eks,b=zee,i=1869,x=0.633163245609033,y=0.8429419490648784 -a=wye,b=pan,i=1870,x=0.10163096579388076,y=0.13758281047223042 -a=hat,b=wye,i=1871,x=0.08107553652444954,y=0.2640692772059776 -a=pan,b=eks,i=1876,x=0.6468659335884865,y=0.710835697336098 -a=hat,b=zee,i=1877,x=0.9303319011279677,y=0.7113730786626118 -a=pan,b=zee,i=1883,x=0.34429591718844843,y=0.05689015367587591 -a=zee,b=wye,i=1885,x=0.11851805777842395,y=0.23782759573809764 -a=zee,b=hat,i=1891,x=0.5382838856043256,y=0.8806888516912734 -a=zee,b=eks,i=1892,x=0.8124856255009596,y=0.9417530148525823 -a=hat,b=zee,i=1893,x=0.6120649825518716,y=0.8578129408524632 -a=wye,b=wye,i=1894,x=0.4169983470765677,y=0.31293410227278906 -a=hat,b=wye,i=1895,x=0.10961101368157089,y=0.32892883700517095 -a=hat,b=wye,i=1896,x=0.9132730441559633,y=0.7487099837821863 -a=hat,b=hat,i=1897,x=0.7675505245773306,y=0.8461420935545583 -a=wye,b=hat,i=1899,x=0.1709902864944267,y=0.48516354025753305 -a=hat,b=pan,i=1900,x=0.6087321537907773,y=0.7970729316915601 -a=wye,b=eks,i=1903,x=0.31804488869587366,y=0.14285299153786624 -a=eks,b=eks,i=1907,x=0.9438758492662777,y=0.7214758965332612 -a=hat,b=wye,i=1910,x=0.7380789095291242,y=0.9502552254648776 -a=wye,b=wye,i=1912,x=0.7175207335721732,y=0.5163511962741214 -a=hat,b=pan,i=1915,x=0.6426932948416931,y=0.5081694432335289 -a=zee,b=wye,i=1917,x=0.529838527546025,y=0.975044822917303 -a=eks,b=wye,i=1921,x=0.9456983171768308,y=0.8913471052406744 -a=wye,b=pan,i=1922,x=0.6733026865976656,y=0.5941565401265938 -a=zee,b=wye,i=1924,x=0.14261091973981976,y=0.03891416444006246 -a=pan,b=pan,i=1925,x=0.051704291514689915,y=0.30096139627683915 -a=eks,b=pan,i=1926,x=0.08149680519340818,y=0.371502322922598 -a=pan,b=wye,i=1929,x=0.715219843779286,y=0.7347318985161266 -a=eks,b=eks,i=1931,x=0.6283884556872956,y=0.714926049974028 -a=pan,b=wye,i=1932,x=0.08318436818892117,y=0.43049862856264764 -a=wye,b=zee,i=1933,x=0.9047633922940572,y=0.7844909689207981 -a=wye,b=wye,i=1935,x=0.7550429521371519,y=0.786133808170408 -a=wye,b=hat,i=1936,x=0.3345630973104814,y=0.2823268521687281 -a=pan,b=wye,i=1937,x=0.9521970743863757,y=0.5949587882541866 -a=zee,b=hat,i=1938,x=0.18206318284329825,y=0.0011400311959023357 -a=pan,b=eks,i=1941,x=0.8294899690053994,y=0.7564416563177322 -a=pan,b=eks,i=1943,x=0.9719276019842854,y=0.640150164953268 -a=zee,b=zee,i=1948,x=0.8526284266294675,y=0.7580336598194982 -a=eks,b=hat,i=1951,x=0.9392053569680634,y=0.9768144646610879 -a=zee,b=eks,i=1953,x=0.6668788836391065,y=0.7090525532474364 -a=zee,b=zee,i=1954,x=0.7595127799385754,y=0.6001574207956651 -a=pan,b=zee,i=1957,x=0.9854793880226635,y=0.7095712814074717 -a=wye,b=wye,i=1961,x=0.29833631790760273,y=0.4831530650838167 -a=hat,b=eks,i=1962,x=0.36631759989103085,y=0.29865431150806365 -a=wye,b=pan,i=1964,x=0.7334272338627286,y=0.650447648017669 -a=pan,b=pan,i=1965,x=0.9367163916661853,y=0.9638919891814807 -a=pan,b=eks,i=1968,x=0.7530954976867642,y=0.5048913343158832 -a=hat,b=wye,i=1971,x=0.4654113772986844,y=0.03490618297713166 -a=hat,b=wye,i=1972,x=0.5837244835312924,y=0.78564800693725 -a=wye,b=hat,i=1973,x=0.5256418800394103,y=0.5657320340909927 -a=wye,b=eks,i=1976,x=0.90900092404583,y=0.9088347779743747 -a=eks,b=eks,i=1978,x=0.43223859004330245,y=0.25096305614713244 -a=wye,b=pan,i=1979,x=0.044824962223491194,y=0.26304195982115053 -a=hat,b=pan,i=1981,x=0.7205280959278643,y=0.9765256304646956 -a=pan,b=eks,i=1982,x=0.11118021831380087,y=0.1736432452425345 -a=hat,b=wye,i=1985,x=0.6785523977842361,y=0.9088522942899968 -a=hat,b=eks,i=1990,x=0.972524874310568,y=0.7588379528101111 -a=zee,b=pan,i=1991,x=0.4266265409041532,y=0.46661051389718977 -a=eks,b=zee,i=1992,x=0.18951913536280773,y=0.3044420239454556 -a=hat,b=pan,i=1994,x=0.3458198938210745,y=0.15708271475158309 -a=pan,b=hat,i=1995,x=0.2451140421214234,y=0.21125136662021793 -a=wye,b=eks,i=1996,x=0.7260863327463748,y=0.8391383362988085 -a=zee,b=wye,i=1997,x=0.3390776046149281,y=0.2943389939229085 -a=eks,b=zee,i=1999,x=0.6180255159787116,y=0.7640028449996572 -a=wye,b=hat,i=2001,x=0.15924096642007157,y=0.24059632344634185 -a=pan,b=zee,i=2002,x=0.5349190357320186,y=0.508630259684438 -a=hat,b=pan,i=2004,x=0.5792914584913227,y=0.9721311150467201 -a=hat,b=pan,i=2005,x=0.6721200696331198,y=0.5074220436659838 -a=zee,b=pan,i=2006,x=0.36314674395500735,y=0.05966789024528896 -a=eks,b=zee,i=2007,x=0.5198150674035192,y=0.5307294576536602 -a=wye,b=wye,i=2008,x=0.8038374651958967,y=0.863525245703629 -a=hat,b=eks,i=2009,x=0.8954319835423661,y=0.6074686757262493 -a=wye,b=hat,i=2012,x=0.3272476785644499,y=0.2852380145740261 -a=zee,b=pan,i=2013,x=0.5272911037027838,y=0.9007193862227653 -a=pan,b=zee,i=2014,x=0.8942547964450125,y=0.7308860097948163 -a=wye,b=pan,i=2015,x=0.7429848323935544,y=0.6564456028979551 -a=eks,b=eks,i=2017,x=0.5870221936023131,y=0.5886336776923361 -a=wye,b=hat,i=2019,x=0.43322808613233055,y=0.0385758517767808 -a=zee,b=eks,i=2020,x=0.6430370762426636,y=0.6948330772772741 -a=pan,b=zee,i=2021,x=0.4140878244124503,y=0.398400762850186 -a=eks,b=pan,i=2022,x=0.3500684495606733,y=0.14698881032642608 -a=eks,b=zee,i=2023,x=0.8926094968763351,y=0.6086053558590667 -a=wye,b=hat,i=2024,x=0.020600223126170603,y=0.20728018182250796 -a=zee,b=wye,i=2026,x=0.8573260145899378,y=0.9080875650609371 -a=eks,b=zee,i=2027,x=0.22981492296559103,y=0.10600637415066061 -a=zee,b=zee,i=2028,x=0.6842296172237651,y=0.896024172825087 -a=wye,b=zee,i=2031,x=0.14619362934789815,y=0.04433757197092214 -a=pan,b=hat,i=2032,x=0.5611491467878738,y=0.630949265472906 -a=zee,b=eks,i=2036,x=0.25944332814164905,y=0.11267646149361388 -a=hat,b=hat,i=2039,x=0.8389132941448142,y=0.9200224995580027 -a=wye,b=hat,i=2041,x=0.6563952046485523,y=0.7555478004412313 -a=zee,b=hat,i=2042,x=0.2743477126375994,y=0.3824464564910681 -a=hat,b=hat,i=2043,x=0.8811861962295147,y=0.5191315240489268 -a=zee,b=eks,i=2044,x=0.3599144261574607,y=0.24553060035029017 -a=wye,b=hat,i=2046,x=0.7333941298571239,y=0.5739371545354796 -a=hat,b=eks,i=2047,x=0.06042270034486685,y=0.46301889302926746 -a=pan,b=hat,i=2048,x=0.10911169262757925,y=0.007073831794458529 -a=pan,b=pan,i=2049,x=0.8624169299220058,y=0.9006582996702346 -a=eks,b=hat,i=2051,x=0.40407704836251557,y=0.26395123641005147 -a=zee,b=hat,i=2052,x=0.009808918561178714,y=0.2302545994571994 -a=wye,b=eks,i=2053,x=0.7633729697198686,y=0.8187837109642871 -a=wye,b=hat,i=2054,x=0.10710381581294204,y=0.3286506389479086 -a=pan,b=zee,i=2057,x=0.28231501416039284,y=0.12643281231603754 -a=wye,b=eks,i=2065,x=0.606169952184269,y=0.9495081658090401 -a=eks,b=eks,i=2067,x=0.23118685760407975,y=0.4886672632279645 -a=wye,b=wye,i=2068,x=0.0181286937053855,y=0.4027507216590225 -a=zee,b=wye,i=2070,x=0.2845370086876513,y=0.4200729779675041 -a=hat,b=pan,i=2073,x=0.14024645801145608,y=0.2232995634066972 -a=zee,b=hat,i=2080,x=0.9840706098598035,y=0.7011152185727909 -a=zee,b=wye,i=2081,x=0.3382103536180968,y=0.04576622304303102 -a=wye,b=wye,i=2083,x=0.654630167298159,y=0.9490657525005854 -a=hat,b=pan,i=2084,x=0.9418973198231615,y=0.8869025666330164 -a=hat,b=zee,i=2086,x=0.9687249489223216,y=0.9138672864469205 -a=hat,b=wye,i=2088,x=0.3324758019863273,y=0.4703648792781622 -a=zee,b=zee,i=2090,x=0.5043939613961448,y=0.9818791944950958 -a=eks,b=wye,i=2093,x=0.5685533529741125,y=0.8133350683940237 -a=wye,b=pan,i=2094,x=0.07847412023993783,y=0.3613060871668645 -a=wye,b=wye,i=2095,x=0.20230852407018185,y=0.2291747261210969 -a=eks,b=eks,i=2096,x=0.43638629510919924,y=0.2881257309332079 -a=hat,b=eks,i=2097,x=0.26844813288649483,y=0.39273900559861075 -a=hat,b=eks,i=2098,x=0.9966377977643898,y=0.5245550930114457 -a=hat,b=wye,i=2101,x=0.5557805350665251,y=0.5952937921640231 -a=zee,b=wye,i=2102,x=0.749445246206683,y=0.9220669751971446 -a=pan,b=zee,i=2105,x=0.42667111990222584,y=0.4200738107939501 -a=pan,b=eks,i=2106,x=0.6899381403750706,y=0.5175558265399449 -a=pan,b=wye,i=2107,x=0.046210916618416364,y=0.25213670524015686 -a=zee,b=zee,i=2108,x=0.7086278430636463,y=0.7267047227599615 -a=pan,b=zee,i=2109,x=0.8286002064140777,y=0.7422535714385249 -a=pan,b=zee,i=2113,x=0.0793213913259122,y=0.046201894636212604 -a=zee,b=zee,i=2116,x=0.4003379315212102,y=0.0193682083394614 -a=hat,b=hat,i=2119,x=0.8206707686267524,y=0.7611213033730956 -a=zee,b=wye,i=2120,x=0.5559252019928892,y=0.7174146654070022 -a=hat,b=wye,i=2121,x=0.9803985810617651,y=0.8394646120202436 -a=pan,b=wye,i=2123,x=0.9115498197515648,y=0.9169354954307747 -a=wye,b=eks,i=2127,x=0.06803650937651173,y=0.3577026589688229 -a=zee,b=eks,i=2129,x=0.28267518376958845,y=0.17688870699173864 -a=hat,b=pan,i=2130,x=0.19116926141337387,y=0.27875749703114405 -a=wye,b=pan,i=2133,x=0.6516558397748747,y=0.774009470971533 -a=zee,b=wye,i=2136,x=0.2843358696868167,y=0.17750391830130807 -a=zee,b=wye,i=2138,x=0.29832744224162844,y=0.33074245583419115 -a=zee,b=wye,i=2139,x=0.4116759409721965,y=0.16673308079819182 -a=zee,b=wye,i=2140,x=0.3063387912982882,y=0.3715575632516237 -a=pan,b=hat,i=2141,x=0.41506057628652626,y=0.013486526190589099 -a=zee,b=wye,i=2142,x=0.517904841622836,y=0.53285652127 -a=hat,b=pan,i=2143,x=0.9156355367699018,y=0.8823700552229912 -a=eks,b=zee,i=2146,x=0.4990209540685181,y=0.1364915882864166 -a=eks,b=wye,i=2147,x=0.15240384791463035,y=0.4599246782338706 -a=zee,b=eks,i=2149,x=0.7025420244699133,y=0.987609520343113 -a=wye,b=pan,i=2150,x=0.3436366777295877,y=0.3694637710717039 -a=hat,b=zee,i=2151,x=0.9616090415643731,y=0.8945473597755025 -a=zee,b=hat,i=2152,x=0.480760014274322,y=0.09273697945051707 -a=wye,b=pan,i=2157,x=0.40990967259698485,y=0.46693754055942116 -a=hat,b=hat,i=2158,x=0.36568864609540286,y=0.482086719899368 -a=zee,b=wye,i=2159,x=0.46324422760937845,y=0.18957042856735318 -a=pan,b=eks,i=2160,x=0.0032731741464655517,y=0.24265930126172286 -a=wye,b=eks,i=2161,x=0.17517848527969948,y=0.08180586013473534 -a=pan,b=pan,i=2162,x=0.4403551635970905,y=0.22942697632655906 -a=zee,b=hat,i=2167,x=0.42312576374129274,y=0.10048800632229682 -a=wye,b=hat,i=2168,x=0.6568978924854212,y=0.5101756478889046 -a=wye,b=eks,i=2170,x=0.4198547582787967,y=0.2376285818765217 -a=hat,b=wye,i=2179,x=0.8080588257410165,y=0.8760901920518874 -a=pan,b=eks,i=2180,x=0.6055815021312241,y=0.8480036770514022 -a=zee,b=pan,i=2181,x=0.5449270457570026,y=0.7992463596093999 -a=eks,b=pan,i=2183,x=0.8003361363186678,y=0.8955368869223884 -a=eks,b=eks,i=2185,x=0.33802204835640726,y=0.30007036518314967 -a=pan,b=eks,i=2187,x=0.09332217805283527,y=0.2731125734848725 -a=zee,b=eks,i=2189,x=0.984738578757059,y=0.892051880694554 -a=zee,b=hat,i=2193,x=0.44938360138176914,y=0.04690228110148875 -a=wye,b=wye,i=2194,x=0.2622599637682992,y=0.33190780821668475 -a=hat,b=wye,i=2197,x=0.3540930552112632,y=0.4554803152418352 -a=hat,b=eks,i=2198,x=0.12965400774700986,y=0.4139588865738947 -a=hat,b=wye,i=2202,x=0.4709189260548132,y=0.33410477791419135 -a=wye,b=pan,i=2203,x=0.8491557372816053,y=0.5530531109549706 -a=wye,b=zee,i=2205,x=0.2774377944743893,y=0.45205678592354026 -a=wye,b=eks,i=2209,x=0.7841059777895694,y=0.6947456883865291 -a=hat,b=eks,i=2210,x=0.46786259691563536,y=0.31576530398682046 -a=hat,b=zee,i=2214,x=0.2971188903315465,y=0.44965916160853636 -a=zee,b=pan,i=2215,x=0.06251445207257622,y=0.13216970387427485 -a=hat,b=wye,i=2216,x=0.3382952859935743,y=0.4400906767156443 -a=zee,b=wye,i=2217,x=0.49170781106474626,y=0.1402042893515265 -a=zee,b=hat,i=2218,x=0.2583991751219392,y=0.36652517821181607 -a=pan,b=zee,i=2219,x=0.14927136365683047,y=0.18664967620347506 -a=eks,b=wye,i=2220,x=0.5726690878517332,y=0.9834177283918458 -a=zee,b=eks,i=2222,x=0.813180106527479,y=0.621185672504634 -a=eks,b=hat,i=2223,x=0.289329024465074,y=0.36110779604692067 -a=eks,b=wye,i=2226,x=0.3454244478858154,y=0.29090367914645576 -a=zee,b=wye,i=2227,x=0.39971822303581617,y=0.17475090292312834 -a=eks,b=zee,i=2228,x=0.9408003473361174,y=0.9376913825387122 -a=hat,b=wye,i=2229,x=0.4494538288870511,y=0.13090866722624483 -a=wye,b=hat,i=2231,x=0.900794437962015,y=0.8967390597734215 -a=zee,b=wye,i=2233,x=0.9004219588711274,y=0.7577516737491493 -a=eks,b=eks,i=2234,x=0.27871867532288996,y=0.2911552878960423 -a=eks,b=wye,i=2235,x=0.5013653314603624,y=0.8333248001496258 -a=pan,b=zee,i=2239,x=0.010173755043218158,y=0.22123822336488064 -a=hat,b=wye,i=2241,x=0.5014017541132575,y=0.7090960181653438 -a=wye,b=hat,i=2242,x=0.9458244074853481,y=0.7456393313493013 -a=zee,b=pan,i=2243,x=0.29001787500073173,y=0.045527725574051714 -a=wye,b=hat,i=2246,x=0.7714374257659208,y=0.5425954287320883 -a=pan,b=pan,i=2247,x=0.8014273299143657,y=0.7288163705942878 -a=pan,b=pan,i=2248,x=0.954246012713997,y=0.8279688125072744 -a=eks,b=eks,i=2249,x=0.3345668023105298,y=0.31811620191709955 -a=eks,b=hat,i=2251,x=0.8946184447856771,y=0.8281124954281727 -a=zee,b=wye,i=2252,x=0.5655358148358,y=0.9169255629455827 -a=hat,b=zee,i=2255,x=0.4883498572156204,y=0.0770621976268544 -a=hat,b=hat,i=2257,x=0.6942446034273736,y=0.6246228939328669 -a=zee,b=zee,i=2262,x=0.7490208516776408,y=0.7277121821219803 -a=pan,b=eks,i=2269,x=0.5541880960714733,y=0.9158224391454514 -a=eks,b=eks,i=2270,x=0.5090886478757912,y=0.7656587962141506 -a=eks,b=hat,i=2273,x=0.8127008522217432,y=0.9949059480342844 -a=eks,b=wye,i=2275,x=0.5212081176523184,y=0.8177991905419402 -a=wye,b=eks,i=2278,x=0.17901836368365676,y=0.14044395537918564 -a=hat,b=eks,i=2279,x=0.012280680223469398,y=0.277342303022595 -a=wye,b=zee,i=2280,x=0.4217562022758986,y=0.051936162685817355 -a=zee,b=pan,i=2281,x=0.1383792519119802,y=0.47235511628254045 -a=eks,b=hat,i=2282,x=0.7011958061953378,y=0.91083574253739 -a=wye,b=wye,i=2286,x=0.777938701974155,y=0.7615824205677968 -a=pan,b=zee,i=2288,x=0.5745888818383479,y=0.8421462451069522 -a=pan,b=zee,i=2289,x=0.042515149065466495,y=0.3428290162671168 -a=zee,b=eks,i=2290,x=0.14418296982644663,y=0.3545011820617253 -a=pan,b=wye,i=2292,x=0.27678771174110695,y=0.35760728439380474 -a=zee,b=pan,i=2300,x=0.9291273399024345,y=0.9606720070997913 -a=zee,b=hat,i=2304,x=0.1127642829456843,y=0.29881658214862383 -a=pan,b=zee,i=2305,x=0.11496965057148123,y=0.19753250624952667 -a=zee,b=wye,i=2309,x=0.12120595243094534,y=0.3417676704542142 -a=wye,b=wye,i=2310,x=0.6528439645535314,y=0.626705481063678 -a=zee,b=zee,i=2311,x=0.965416713125537,y=0.675622189665188 -a=zee,b=pan,i=2313,x=0.4308881860064431,y=0.298139087353108 -a=eks,b=eks,i=2316,x=0.1898131609601975,y=0.2576221943783219 -a=eks,b=hat,i=2318,x=0.6179437679435674,y=0.6255315742679604 -a=eks,b=hat,i=2321,x=0.9006870009567153,y=0.8537806242130159 -a=zee,b=zee,i=2322,x=0.39299000984576493,y=0.48675520394221294 -a=zee,b=zee,i=2323,x=0.6924646229067376,y=0.961728591715515 -a=eks,b=zee,i=2324,x=0.3656731818815381,y=0.4348170464549541 -a=zee,b=eks,i=2325,x=0.9310044743908388,y=0.5915717923626269 -a=wye,b=hat,i=2326,x=0.5390947464654677,y=0.9171443353099715 -a=eks,b=zee,i=2328,x=0.9233414160859896,y=0.9426916138193271 -a=eks,b=wye,i=2329,x=0.32236596243200943,y=0.12349447265840763 -a=pan,b=eks,i=2331,x=0.7795985947092806,y=0.9791969083425154 -a=wye,b=eks,i=2332,x=0.8888447587498162,y=0.9274917692848156 -a=zee,b=wye,i=2336,x=0.2132138095588999,y=0.3350510820375012 -a=eks,b=zee,i=2337,x=0.18310611841718727,y=0.27611093961149813 -a=pan,b=pan,i=2339,x=0.7632065771231693,y=0.9533148007319427 -a=eks,b=eks,i=2341,x=0.1689642670369339,y=0.08666058738902227 -a=eks,b=eks,i=2345,x=0.7240818295178657,y=0.7697201439211158 -a=wye,b=pan,i=2347,x=0.9345794244994885,y=0.5611924241664724 -a=pan,b=hat,i=2348,x=0.5703090995325857,y=0.5762676020746584 -a=hat,b=zee,i=2349,x=0.2589915838302729,y=0.04497637706481694 -a=zee,b=pan,i=2352,x=0.19948276246295482,y=0.27886956486778547 -a=hat,b=eks,i=2353,x=0.19721696160232083,y=0.1902097573367555 -a=pan,b=zee,i=2355,x=0.4132334507678017,y=0.0958935038625609 -a=pan,b=pan,i=2356,x=0.49220586447091974,y=0.3637263342876337 -a=hat,b=hat,i=2362,x=0.7586788480149922,y=0.6167614911809044 -a=eks,b=zee,i=2363,x=0.2829560793295287,y=0.31877554125357643 -a=eks,b=wye,i=2365,x=0.10694687582616103,y=0.12549118259779624 -a=zee,b=hat,i=2366,x=0.8434948128398014,y=0.7566711862078771 -a=eks,b=hat,i=2367,x=0.11100450503347647,y=0.26231820024625485 -a=hat,b=wye,i=2369,x=0.03135249091794745,y=0.3202037119775658 -a=wye,b=zee,i=2370,x=0.5078848120383039,y=0.5495294084638471 -a=eks,b=zee,i=2371,x=0.6296689722217776,y=0.8808041685758371 -a=hat,b=wye,i=2372,x=0.36694062952440554,y=0.03285188729261823 -a=pan,b=eks,i=2376,x=0.7036015015427707,y=0.8896688757860348 -a=pan,b=eks,i=2379,x=0.0126919318388804,y=0.05364265512252031 -a=hat,b=zee,i=2380,x=0.12629846495196628,y=0.00017118893583800698 -a=zee,b=hat,i=2382,x=0.9419188430791652,y=0.5943076078356421 -a=zee,b=pan,i=2386,x=0.4400144230398596,y=0.40718760512261376 -a=eks,b=wye,i=2390,x=0.6331896102608988,y=0.9589307439412602 -a=eks,b=zee,i=2392,x=0.7923894749706849,y=0.8917271151038314 -a=pan,b=wye,i=2398,x=0.6626457206760483,y=0.6952332207508496 -a=eks,b=wye,i=2404,x=0.5546642401893631,y=0.5985846330820938 -a=pan,b=pan,i=2405,x=0.2358853113430821,y=0.024003950417810227 -a=eks,b=zee,i=2409,x=0.59847879634121,y=0.7916259405367129 -a=pan,b=zee,i=2410,x=0.04515829439395114,y=0.24330613797458922 -a=pan,b=pan,i=2414,x=0.8144512562961078,y=0.9177829414099823 -a=eks,b=hat,i=2417,x=0.6492293161864587,y=0.9521947928976578 -a=hat,b=pan,i=2418,x=0.9704055340867738,y=0.5799798105012466 -a=eks,b=zee,i=2419,x=0.09047960361588969,y=0.48999371435226136 -a=pan,b=pan,i=2420,x=0.9333731806896786,y=0.6043241512179962 -a=eks,b=pan,i=2422,x=0.00863696577870754,y=0.11509725431793605 -a=zee,b=wye,i=2423,x=0.4653066475033094,y=0.21997612033850344 -a=zee,b=wye,i=2425,x=0.398155311000022,y=0.0933499833149607 -a=pan,b=eks,i=2426,x=0.6379726091040971,y=0.5194384530463447 -a=wye,b=eks,i=2427,x=0.539037074058747,y=0.7531525516774173 -a=pan,b=wye,i=2429,x=0.8020766995566793,y=0.7689029735366432 -a=zee,b=wye,i=2432,x=0.30385506685705554,y=0.17382245218515768 -a=pan,b=eks,i=2434,x=0.013657995328708816,y=0.45586613889144767 -a=zee,b=wye,i=2435,x=0.9416754660578306,y=0.6579056008950284 -a=wye,b=wye,i=2437,x=0.8441032403303297,y=0.7236974901617537 -a=hat,b=zee,i=2439,x=0.7318268760763208,y=0.7357122474543071 -a=zee,b=wye,i=2444,x=0.6743475636626085,y=0.5841642214951493 -a=pan,b=zee,i=2445,x=0.150471438909343,y=0.03999544722112036 -a=zee,b=hat,i=2447,x=0.9165212208454823,y=0.6343832698422787 -a=wye,b=pan,i=2449,x=0.5042681244213146,y=0.908306481649806 -a=wye,b=zee,i=2451,x=0.23883689209402614,y=0.4489097810835715 -a=hat,b=wye,i=2453,x=0.4787447016730605,y=0.027781641677141033 -a=pan,b=pan,i=2457,x=0.3927934924087789,y=0.06769141197493256 -a=wye,b=pan,i=2459,x=0.0074179863852393835,y=0.13412770282159325 -a=wye,b=wye,i=2460,x=0.8546039006462764,y=0.5794887921093801 -a=hat,b=hat,i=2464,x=0.6604485499983388,y=0.6145786977176719 -a=zee,b=zee,i=2465,x=0.3505544906675998,y=0.1954960429503897 -a=pan,b=pan,i=2466,x=0.7769548783450912,y=0.8220089791630163 -a=eks,b=eks,i=2467,x=0.9350039614092526,y=0.8756536110782422 -a=hat,b=zee,i=2470,x=0.910842331244497,y=0.8937381551221251 -a=pan,b=wye,i=2471,x=0.36510756117868337,y=0.16172467779589483 -a=pan,b=eks,i=2474,x=0.7828499578474473,y=0.9442071626420061 -a=pan,b=zee,i=2476,x=0.2262395290029181,y=0.49451050699405674 -a=wye,b=hat,i=2478,x=0.4614473986661236,y=0.4721517855532317 -a=hat,b=wye,i=2480,x=0.014430995239748112,y=0.35346467775779145 -a=hat,b=zee,i=2482,x=0.15810752007547613,y=0.10215153278169598 -a=hat,b=eks,i=2483,x=0.5002024621775637,y=0.9187983113959539 -a=zee,b=hat,i=2484,x=0.04124901160673633,y=0.1095855587112885 -a=eks,b=hat,i=2486,x=0.4923487745128049,y=0.28889637616320174 -a=wye,b=pan,i=2487,x=0.3300250547987864,y=0.22540259142646224 -a=eks,b=zee,i=2488,x=0.0023333167684839173,y=0.24088326731558385 -a=zee,b=pan,i=2489,x=0.5050787967691673,y=0.96990681663883 -a=pan,b=eks,i=2491,x=0.11150304854042947,y=0.33331036327124963 -a=hat,b=zee,i=2496,x=0.1577724924590801,y=0.4739307550526024 -a=zee,b=zee,i=2499,x=0.8613769284558995,y=0.9685505021744841 -a=eks,b=zee,i=2501,x=0.9988110946859143,y=0.8013707404671317 -a=wye,b=pan,i=2503,x=0.6021619570218234,y=0.7998420154096526 -a=zee,b=eks,i=2507,x=0.06006684599594547,y=0.32800136057911744 -a=hat,b=pan,i=2509,x=0.9399094021245685,y=0.9766927628695118 -a=wye,b=pan,i=2513,x=0.9941884027342468,y=0.7427222275160807 -a=hat,b=wye,i=2514,x=0.759666601296956,y=0.5029288106582336 -a=wye,b=zee,i=2516,x=0.22158162509494428,y=0.1717438346245811 -a=hat,b=zee,i=2519,x=0.023141000554160573,y=0.159821225039678 -a=pan,b=zee,i=2522,x=0.3836823470783707,y=0.2530933368188705 -a=hat,b=pan,i=2524,x=0.5483698024028446,y=0.80652225685914 -a=zee,b=pan,i=2525,x=0.9332167021929317,y=0.8274407370101524 -a=pan,b=pan,i=2526,x=0.22953431238745692,y=0.07163851427849766 -a=eks,b=eks,i=2528,x=0.7481860062358446,y=0.6037295548285344 -a=eks,b=pan,i=2529,x=0.3393051290797555,y=0.025397429828768137 -a=zee,b=zee,i=2530,x=0.6149438991743728,y=0.7634078131671355 -a=wye,b=wye,i=2532,x=0.0054964576725233805,y=0.28953245784366877 -a=wye,b=wye,i=2536,x=0.43315262752486194,y=0.27205902504143986 -a=eks,b=eks,i=2538,x=0.38906239415188226,y=0.2685051550780454 -a=zee,b=hat,i=2539,x=0.6345180823665123,y=0.714272732680164 -a=wye,b=eks,i=2541,x=0.9200450459897079,y=0.5203187898658775 -a=hat,b=pan,i=2542,x=0.416076924166804,y=0.4567226915609339 -a=zee,b=eks,i=2543,x=0.8882507111625345,y=0.6834591517880225 -a=hat,b=zee,i=2544,x=0.6234518321227132,y=0.568093714839173 -a=pan,b=hat,i=2547,x=0.24011644563078283,y=0.12009590313568308 -a=zee,b=hat,i=2548,x=0.4304009679094255,y=0.3235635213023209 -a=eks,b=zee,i=2549,x=0.7611031921737661,y=0.689829708430865 -a=zee,b=hat,i=2550,x=0.9107046316959098,y=0.9267025956859704 -a=pan,b=hat,i=2553,x=0.8260887056078599,y=0.6576752537408973 -a=eks,b=pan,i=2556,x=0.680151798371677,y=0.9721202344719171 -a=zee,b=pan,i=2557,x=0.3624846239071149,y=0.38096311190739685 -a=pan,b=eks,i=2559,x=0.41182608064067716,y=0.4651557950827221 -a=zee,b=hat,i=2560,x=0.8207042664095232,y=0.972493490219255 -a=eks,b=eks,i=2561,x=0.9568943633067363,y=0.9942427604342767 -a=eks,b=eks,i=2563,x=0.7448606140977615,y=0.7677875733269816 -a=eks,b=eks,i=2564,x=0.6984324028424346,y=0.6867698395582814 -a=pan,b=pan,i=2566,x=0.027948166482267056,y=0.10155712046334942 -a=zee,b=pan,i=2567,x=0.6373779619859908,y=0.8254690568634606 -a=hat,b=zee,i=2568,x=0.5351681178046073,y=0.8555068797919759 -a=zee,b=wye,i=2570,x=0.7332356879541984,y=0.7095236956282258 -a=wye,b=zee,i=2571,x=0.6045866476300921,y=0.9472308056954024 -a=pan,b=eks,i=2573,x=0.6173980620064918,y=0.7399111725286391 -a=hat,b=eks,i=2576,x=0.8598307222093972,y=0.677493082731475 -a=hat,b=wye,i=2579,x=0.470168322914005,y=0.3245499585879692 -a=pan,b=eks,i=2582,x=0.4136169698568053,y=0.3221257100507432 -a=pan,b=pan,i=2585,x=0.3671198622625018,y=0.04290161860716368 -a=hat,b=pan,i=2589,x=0.9259610701768484,y=0.7567071664063917 -a=hat,b=pan,i=2592,x=0.18016216606425406,y=0.2099121503498219 -a=eks,b=zee,i=2594,x=0.07159878226683902,y=0.20989783292032282 -a=hat,b=hat,i=2595,x=0.9678207161209708,y=0.992049177363607 -a=hat,b=pan,i=2597,x=0.6191641186208192,y=0.91398214172482 -a=eks,b=hat,i=2598,x=0.012851434303710274,y=0.14814227972741656 -a=hat,b=zee,i=2599,x=0.9048118287143257,y=0.8847594382115711 -a=hat,b=wye,i=2603,x=0.31179190517346567,y=0.01609407680873831 -a=wye,b=wye,i=2604,x=0.47775304052473055,y=0.38671047718640983 -a=eks,b=eks,i=2607,x=0.8629787970160852,y=0.8183015089362451 -a=wye,b=hat,i=2610,x=0.14713673147626471,y=0.193770427584398 -a=pan,b=pan,i=2613,x=0.9093120035098351,y=0.993257702527396 -a=hat,b=wye,i=2614,x=0.7781647480152264,y=0.993772240196278 -a=eks,b=eks,i=2616,x=0.8400827662084357,y=0.904384801897908 -a=pan,b=pan,i=2617,x=0.44875309896113624,y=0.20709074311528453 -a=hat,b=wye,i=2619,x=0.19051153642139496,y=0.46651684239833613 -a=pan,b=zee,i=2620,x=0.5592572385681548,y=0.672039894065432 -a=hat,b=eks,i=2622,x=0.21855190429616178,y=0.306255719577206 -a=hat,b=zee,i=2623,x=0.5579915433786629,y=0.9351922009068756 -a=wye,b=zee,i=2626,x=0.21020261586647726,y=0.2011091555698421 -a=hat,b=zee,i=2633,x=0.11167516897133345,y=0.1968557916169683 -a=pan,b=wye,i=2636,x=0.6460342181062689,y=0.7795324745240246 -a=eks,b=eks,i=2639,x=0.12492716932261638,y=0.21510868197623745 -a=wye,b=zee,i=2645,x=0.22135649292487047,y=0.3353372961478748 -a=zee,b=eks,i=2649,x=0.8676857104115077,y=0.6062661030015066 -a=zee,b=zee,i=2651,x=0.08318080628977687,y=0.08723840975656705 -a=hat,b=wye,i=2653,x=0.279635601734451,y=0.4522275293507577 -a=pan,b=eks,i=2655,x=0.20861278160790098,y=0.09276404710956598 -a=pan,b=eks,i=2659,x=0.39231354538410634,y=0.19261788337249341 -a=zee,b=wye,i=2663,x=0.7126684401510096,y=0.8051899200649238 -a=pan,b=zee,i=2666,x=0.9074679274351196,y=0.8957847934010839 -a=hat,b=pan,i=2667,x=0.9240389772763548,y=0.5231982813953002 -a=pan,b=eks,i=2668,x=0.3525652118913354,y=0.49330814134258383 -a=hat,b=wye,i=2669,x=0.14565423862972182,y=0.18195721833206513 -a=wye,b=hat,i=2670,x=0.5314631858298513,y=0.9247384504550191 -a=eks,b=pan,i=2671,x=0.2191775509938665,y=0.16221454397918067 -a=hat,b=wye,i=2674,x=0.5685867476642044,y=0.9536560186396535 -a=eks,b=zee,i=2675,x=0.7116584351173386,y=0.8813675632259913 -a=zee,b=zee,i=2680,x=0.28695958426961987,y=0.35447908228108094 -a=zee,b=zee,i=2681,x=0.5753537491643719,y=0.8698920433502088 -a=hat,b=eks,i=2682,x=0.7144081950600689,y=0.8253921612815761 -a=pan,b=pan,i=2683,x=0.9474694135785586,y=0.5331573468403473 -a=wye,b=pan,i=2685,x=0.5059670030001199,y=0.5002012382517893 -a=wye,b=wye,i=2686,x=0.5187856380368512,y=0.8665210971116168 -a=zee,b=pan,i=2687,x=0.5064156313100883,y=0.5164969637045003 -a=pan,b=wye,i=2688,x=0.9170439177596071,y=0.7855194635003687 -a=zee,b=hat,i=2689,x=0.7018760912024224,y=0.9018580557735235 -a=pan,b=zee,i=2693,x=0.6621261710619304,y=0.765604369363381 -a=wye,b=wye,i=2694,x=0.5113378128718417,y=0.7447015937237151 -a=hat,b=eks,i=2695,x=0.20486591930659304,y=0.08546083685115857 -a=pan,b=wye,i=2698,x=0.24786027932789856,y=0.25028548790543437 -a=hat,b=hat,i=2699,x=0.18362126379498567,y=0.3583685237385621 -a=eks,b=eks,i=2704,x=0.7289032202296384,y=0.943448586243151 -a=pan,b=zee,i=2705,x=0.2681131456172976,y=0.03881677277584117 -a=pan,b=zee,i=2710,x=0.3235306005938401,y=0.3944479990658286 -a=wye,b=hat,i=2713,x=0.7816282897070512,y=0.8725529048814329 -a=wye,b=eks,i=2714,x=0.5337563133061932,y=0.8113476754885716 -a=hat,b=eks,i=2717,x=0.8517633647797415,y=0.6075520102742804 -a=pan,b=zee,i=2719,x=0.13091802232794136,y=0.4147418371197401 -a=zee,b=pan,i=2720,x=0.875012865695414,y=0.6301510344124231 -a=pan,b=pan,i=2721,x=0.7634027233725996,y=0.9537462437208611 -a=wye,b=zee,i=2723,x=0.4692411142423141,y=0.18086715737750947 -a=wye,b=zee,i=2724,x=0.3016910888319093,y=0.2815838391993606 -a=eks,b=pan,i=2725,x=0.09842524478857917,y=0.4039455571089149 -a=zee,b=wye,i=2728,x=0.8748783567240713,y=0.9127365833223035 -a=pan,b=eks,i=2729,x=0.9890321807426645,y=0.6544105013007959 -a=eks,b=zee,i=2730,x=0.5913012155193706,y=0.5125849403012366 -a=pan,b=eks,i=2732,x=0.7776625957923161,y=0.7377246871264523 -a=zee,b=eks,i=2733,x=0.11325755544848148,y=0.32415018564505305 -a=eks,b=pan,i=2734,x=0.4544389365010312,y=0.36274017551484594 -a=zee,b=hat,i=2735,x=0.6753256152256654,y=0.7111448175040769 -a=zee,b=pan,i=2736,x=0.13316236671850434,y=0.49210023866083397 -a=hat,b=zee,i=2738,x=0.6324404521389477,y=0.5991554446942754 -a=hat,b=zee,i=2739,x=0.4523752260828632,y=0.4097560532434581 -a=pan,b=eks,i=2740,x=0.16601226995675156,y=0.18151654867600586 -a=hat,b=eks,i=2742,x=0.5093718066070119,y=0.9913946330960695 -a=wye,b=pan,i=2745,x=0.028208712274286007,y=0.45797747909936903 -a=wye,b=eks,i=2747,x=0.801718741445332,y=0.8343436520177938 -a=zee,b=eks,i=2748,x=0.11153132519318998,y=0.17527565983385196 -a=wye,b=zee,i=2752,x=0.5421828769626178,y=0.6932556944834627 -a=hat,b=zee,i=2754,x=0.7970322675458169,y=0.9056375064474206 -a=wye,b=hat,i=2756,x=0.5906831195384066,y=0.8552080634179315 -a=pan,b=hat,i=2760,x=0.5529628324424195,y=0.672560428419093 -a=wye,b=hat,i=2761,x=0.9138967886693034,y=0.9213145915711659 -a=pan,b=zee,i=2766,x=0.830723134231425,y=0.665433991421394 -a=hat,b=pan,i=2767,x=0.3457100418361476,y=0.4664053612526614 -a=pan,b=hat,i=2768,x=0.051556933697434526,y=0.17976239369842706 -a=wye,b=zee,i=2769,x=0.9668199998927879,y=0.775654943293786 -a=hat,b=pan,i=2770,x=0.27594379871232555,y=0.07411463454718337 -a=pan,b=wye,i=2771,x=0.1174987458859269,y=0.005708083531397623 -a=eks,b=hat,i=2773,x=0.69291317851219,y=0.7469948294872729 -a=zee,b=wye,i=2776,x=0.7910444608980398,y=0.6491427094511163 -a=pan,b=pan,i=2777,x=0.7969059524383465,y=0.669103483462524 -a=eks,b=wye,i=2781,x=0.4061806402666983,y=0.36644038967272896 -a=hat,b=wye,i=2782,x=0.6917795282383538,y=0.9185836699082268 -a=pan,b=wye,i=2785,x=0.621716134059889,y=0.5300633007674981 -a=pan,b=pan,i=2786,x=0.591903135564393,y=0.9817870263065608 -a=zee,b=wye,i=2789,x=0.053717462803680616,y=0.05452469526931114 -a=wye,b=wye,i=2790,x=0.7984829227541226,y=0.5087673080038057 -a=eks,b=hat,i=2792,x=0.574814951546933,y=0.838521058328272 -a=zee,b=hat,i=2793,x=0.016119118073299465,y=0.048486447355322926 -a=eks,b=hat,i=2795,x=0.9828163659495991,y=0.7271574141684917 -a=eks,b=wye,i=2796,x=0.9795666089681072,y=0.6936068995013053 -a=wye,b=eks,i=2797,x=0.0955127453952278,y=0.3193873136743336 -a=hat,b=hat,i=2798,x=0.6770658307401128,y=0.9612492884585951 -a=pan,b=pan,i=2802,x=0.8498273803284082,y=0.6695254936819108 -a=eks,b=pan,i=2806,x=0.45982174205757165,y=0.21639041126785252 -a=eks,b=pan,i=2810,x=0.18551339605772543,y=0.380046863146443 -a=zee,b=zee,i=2811,x=0.5396926661842615,y=0.7423060132429089 -a=wye,b=hat,i=2812,x=0.4080552691530873,y=0.23715395574697773 -a=wye,b=pan,i=2814,x=0.4232831301914316,y=0.003575690575454038 -a=wye,b=hat,i=2815,x=0.2753349005711472,y=0.2981607803589118 -a=pan,b=eks,i=2817,x=0.9437261643896192,y=0.6585456269208473 -a=wye,b=zee,i=2819,x=0.6749831740629705,y=0.7181822687947076 -a=pan,b=pan,i=2823,x=0.8970769946774317,y=0.8143443328628265 -a=wye,b=wye,i=2824,x=0.7341426123679048,y=0.6900466491014886 -a=hat,b=pan,i=2827,x=0.007693535697102405,y=0.358018000756796 -a=wye,b=pan,i=2829,x=0.8978699958731674,y=0.5078843103822455 -a=zee,b=pan,i=2831,x=0.9137972915067373,y=0.8146525548769581 -a=zee,b=zee,i=2833,x=0.6526333204333133,y=0.8962754703239799 -a=hat,b=hat,i=2837,x=0.5655910185189842,y=0.9183250775072218 -a=pan,b=zee,i=2840,x=0.5303948386863744,y=0.9080864546926949 -a=zee,b=wye,i=2841,x=0.09731314104522193,y=0.31228305132515555 -a=pan,b=eks,i=2842,x=0.7549176932437908,y=0.8640405171715994 -a=pan,b=pan,i=2845,x=0.606181068721247,y=0.616002039068612 -a=hat,b=wye,i=2846,x=0.3265631003841204,y=0.374492300721745 -a=hat,b=zee,i=2847,x=0.7881568154651081,y=0.5559821919859138 -a=pan,b=zee,i=2848,x=0.9624756126657645,y=0.9574074942948696 -a=wye,b=hat,i=2850,x=0.05470860141262479,y=0.04658298467108257 -a=wye,b=wye,i=2851,x=0.0020446268545805113,y=0.009943917182808737 -a=wye,b=pan,i=2852,x=0.42940687832989866,y=0.1468318742685415 -a=wye,b=eks,i=2855,x=0.9419146917622048,y=0.6060209650374142 -a=eks,b=pan,i=2856,x=0.7115880622754508,y=0.8964623782367054 -a=eks,b=pan,i=2859,x=0.02447776772167043,y=0.20688297772055575 -a=eks,b=zee,i=2866,x=0.8934857222410671,y=0.6256367404608381 -a=wye,b=zee,i=2867,x=0.9489727374596107,y=0.8632434631696883 -a=hat,b=pan,i=2869,x=0.04903454618587899,y=0.48019476723366983 -a=wye,b=eks,i=2870,x=0.13588621486865515,y=0.46171851137675657 -a=eks,b=hat,i=2872,x=0.0824464474583485,y=0.41500058370516746 -a=wye,b=zee,i=2879,x=0.3368479146214749,y=0.319508849901748 -a=hat,b=wye,i=2881,x=0.8870137115236287,y=0.6557420558079095 -a=wye,b=pan,i=2882,x=0.20508256902105493,y=0.24625712578663705 -a=wye,b=zee,i=2885,x=0.4079982232706686,y=0.42382421978789164 -a=zee,b=hat,i=2888,x=0.9703529871646023,y=0.517811760850648 -a=wye,b=zee,i=2889,x=0.7686343850863733,y=0.5742253808106673 -a=eks,b=zee,i=2890,x=0.18685211627025788,y=0.2370568703128223 -a=wye,b=eks,i=2891,x=0.3968173236793585,y=0.04738783308138439 -a=eks,b=zee,i=2893,x=0.5531039940725316,y=0.7306512817266388 -a=zee,b=eks,i=2895,x=0.9753708467911276,y=0.615940530686146 -a=hat,b=zee,i=2897,x=0.5678455159032189,y=0.7910090421492175 -a=pan,b=zee,i=2898,x=0.23271930748884184,y=0.4088902304553087 -a=hat,b=wye,i=2900,x=0.9619050081633596,y=0.7954950376163313 -a=pan,b=eks,i=2903,x=0.34600684567011875,y=0.2803937160495198 -a=zee,b=eks,i=2904,x=0.5195992086409938,y=0.57773770500564 -a=zee,b=eks,i=2906,x=0.8608071169231579,y=0.9846761059035525 -a=eks,b=hat,i=2907,x=0.5503089823322713,y=0.7762987168630092 -a=hat,b=hat,i=2908,x=0.06422544393476348,y=0.04831803951278302 -a=eks,b=zee,i=2909,x=0.9735920834852287,y=0.6045980049718644 -a=pan,b=eks,i=2910,x=0.4552157780113615,y=0.45436268452495654 -a=eks,b=pan,i=2911,x=0.3540491877210178,y=0.14296150972097188 -a=eks,b=eks,i=2913,x=0.9528487416801219,y=0.9770139821982978 -a=zee,b=zee,i=2914,x=0.6713487756784149,y=0.6851459487246977 -a=eks,b=zee,i=2916,x=0.3111065625389652,y=0.4900633108457091 -a=wye,b=pan,i=2917,x=0.10226439038444546,y=0.32221570886934225 -a=hat,b=eks,i=2920,x=0.584814627427767,y=0.9854086527153794 -a=pan,b=wye,i=2921,x=0.8092163085387806,y=0.5552811725641776 -a=wye,b=zee,i=2923,x=0.5170783036546709,y=0.7221456579996477 -a=zee,b=pan,i=2926,x=0.5318019616386042,y=0.9627343736200256 -a=hat,b=wye,i=2929,x=0.3314067590262917,y=0.2089161550583003 -a=zee,b=wye,i=2931,x=0.4294178052742412,y=0.001833098567169067 -a=hat,b=eks,i=2934,x=0.06412360974253373,y=0.22600333579859744 -a=pan,b=hat,i=2935,x=0.8626379833482911,y=0.9150292252328203 -a=zee,b=wye,i=2936,x=0.5768883618530124,y=0.918139479854031 -a=wye,b=pan,i=2937,x=0.5377017444604313,y=0.6977594925111669 -a=pan,b=hat,i=2938,x=0.2765222912827068,y=0.20398898222008643 -a=wye,b=pan,i=2939,x=0.15430209185442478,y=0.3054947262512059 -a=zee,b=zee,i=2940,x=0.33908084985171905,y=0.3559785704920787 -a=wye,b=eks,i=2941,x=0.888622878020096,y=0.9305395559526985 -a=pan,b=pan,i=2944,x=0.22818877662838155,y=0.08013191447933687 -a=hat,b=hat,i=2945,x=0.855770419141142,y=0.9504972075792718 -a=pan,b=eks,i=2950,x=0.3557454554545477,y=0.35596931491049777 -a=pan,b=pan,i=2952,x=0.6956146036887194,y=0.7094299324737594 -a=zee,b=zee,i=2954,x=0.7139612884395727,y=0.521259999124225 -a=pan,b=pan,i=2956,x=0.17229422895082336,y=0.24883239435188065 -a=pan,b=hat,i=2957,x=0.14582342165786877,y=0.4356307792657701 -a=hat,b=eks,i=2959,x=0.8069448445065791,y=0.7001343626890119 -a=pan,b=hat,i=2960,x=0.3756435277345719,y=0.047826156911501605 -a=eks,b=pan,i=2961,x=0.8176993405474695,y=0.995125161400413 -a=wye,b=eks,i=2966,x=0.2641518333282219,y=0.38955465518639776 -a=zee,b=zee,i=2967,x=0.42822201314164976,y=0.006074939297309734 -a=eks,b=eks,i=2968,x=0.20950457390651211,y=0.07888932379405189 -a=hat,b=eks,i=2971,x=0.8266785429565111,y=0.897325116301253 -a=pan,b=wye,i=2974,x=0.20451527019757088,y=0.0206184692976914 -a=wye,b=pan,i=2975,x=0.51006790151616,y=0.586042056906746 -a=pan,b=zee,i=2976,x=0.8782971392557426,y=0.7428023579415594 -a=wye,b=hat,i=2977,x=0.9504447063856765,y=0.94067852216513 -a=wye,b=hat,i=2979,x=0.3014946499505823,y=0.3166621276039525 -a=zee,b=zee,i=2980,x=0.8838963894635692,y=0.8052149644100633 -a=wye,b=zee,i=2981,x=0.5154924055050366,y=0.7978166707046667 -a=wye,b=eks,i=2982,x=0.613351743297237,y=0.8395323005164117 -a=hat,b=hat,i=2986,x=0.012529011658969247,y=0.19751371734088574 -a=wye,b=eks,i=2988,x=0.8289886576552059,y=0.9130379115658384 -a=zee,b=eks,i=2989,x=0.6115566437731396,y=0.654382371446181 -a=eks,b=eks,i=2990,x=0.9192312982792387,y=0.933633690100049 -a=eks,b=hat,i=2991,x=0.17088819954927414,y=0.1940915669377936 -a=zee,b=eks,i=2992,x=0.7975067562633096,y=0.7188787477650647 -a=wye,b=hat,i=2993,x=0.7386984969630342,y=0.5918321915044837 -a=hat,b=pan,i=2994,x=0.6175875126511366,y=0.5310338441204902 -a=zee,b=wye,i=2995,x=0.1553956256476441,y=0.27030029752780416 -a=eks,b=pan,i=2997,x=0.7960098234515162,y=0.9293203088509989 -a=zee,b=pan,i=2999,x=0.19942029200045563,y=0.09337986668927678 -a=pan,b=hat,i=3000,x=0.7814546932332067,y=0.6000946585621107 -a=eks,b=eks,i=3001,x=0.5998159531946954,y=0.7729581156588532 -a=hat,b=wye,i=3002,x=0.8285272249030134,y=0.9302564445098462 -a=wye,b=hat,i=3005,x=0.05536700717456822,y=0.10240541011411275 -a=eks,b=eks,i=3007,x=0.33350360416191926,y=0.2321416996453538 -a=hat,b=wye,i=3008,x=0.793700582315604,y=0.7819730529107373 -a=wye,b=zee,i=3009,x=0.8588342479923059,y=0.6774442006552894 -a=wye,b=wye,i=3010,x=0.7683834748330075,y=0.8315497206524393 -a=wye,b=zee,i=3011,x=0.4808351970354847,y=0.4758472571744147 -a=zee,b=pan,i=3013,x=0.8669507229743478,y=0.9303002206266048 -a=zee,b=pan,i=3014,x=0.6036472794089942,y=0.5392590440608642 -a=zee,b=wye,i=3015,x=0.44076973462262803,y=0.22601425557115284 -a=eks,b=eks,i=3016,x=0.14517527208436098,y=0.4422293378481955 -a=hat,b=hat,i=3018,x=0.46054396234881867,y=0.3731307386931515 -a=hat,b=wye,i=3019,x=0.7451272273092002,y=0.9191708709874246 -a=pan,b=eks,i=3023,x=0.7972083825965124,y=0.6785915910266607 -a=wye,b=pan,i=3024,x=0.2264089359117355,y=0.02834029309178865 -a=zee,b=wye,i=3025,x=0.20048730201468612,y=0.22503692249617124 -a=zee,b=wye,i=3026,x=0.620337023862303,y=0.8479919985880766 -a=eks,b=hat,i=3027,x=0.4902155165931996,y=0.34683593338631313 -a=zee,b=eks,i=3029,x=0.11413363994060732,y=0.18491037637118812 -a=pan,b=pan,i=3030,x=0.05555019543717121,y=0.25564439988112275 -a=zee,b=hat,i=3033,x=0.1945237174643939,y=0.04785693318973694 -a=pan,b=eks,i=3036,x=0.6669439868955551,y=0.5083766717543267 -a=zee,b=wye,i=3038,x=0.9846294915268529,y=0.7245527090730468 -a=wye,b=eks,i=3039,x=0.17248806811657325,y=0.3766117373894895 -a=zee,b=hat,i=3040,x=0.09621613036773924,y=0.09274768655857912 -a=hat,b=wye,i=3043,x=0.03791889192037379,y=0.3879285406506343 -a=eks,b=eks,i=3045,x=0.8779655290898389,y=0.9276702739930572 -a=wye,b=zee,i=3047,x=0.8309049399070346,y=0.7082428624476516 -a=hat,b=hat,i=3052,x=0.022155682158138235,y=0.22804250396069936 -a=zee,b=hat,i=3054,x=0.8975586946419573,y=0.8371128774375303 -a=hat,b=eks,i=3057,x=0.6216704870927365,y=0.5368073736943582 -a=hat,b=zee,i=3058,x=0.7143749715262198,y=0.8268686099704066 -a=pan,b=pan,i=3059,x=0.6284468013862667,y=0.9107779672871813 -a=pan,b=hat,i=3060,x=0.6279788132841725,y=0.7966531861283309 -a=pan,b=zee,i=3063,x=0.8834284343378148,y=0.8232921415981069 -a=wye,b=eks,i=3065,x=0.725831736511898,y=0.5497593420610962 -a=wye,b=pan,i=3071,x=0.4419206171851453,y=0.15330946039593318 -a=zee,b=hat,i=3072,x=0.2169139656710095,y=0.024309947214042227 -a=hat,b=eks,i=3074,x=0.6550427877323648,y=0.571804931654245 -a=zee,b=hat,i=3075,x=0.09224547266943217,y=0.27630390686135065 -a=wye,b=hat,i=3076,x=0.142566387091713,y=0.27801610209718775 -a=hat,b=eks,i=3081,x=0.9256606535733007,y=0.6699893991173689 -a=pan,b=wye,i=3082,x=0.02986898401074356,y=0.02865740061148525 -a=hat,b=pan,i=3083,x=0.43255930345398574,y=0.16451673283391233 -a=eks,b=eks,i=3088,x=0.42383094655044284,y=0.3113550671070515 -a=eks,b=pan,i=3090,x=0.45506560432905374,y=0.48045443192943516 -a=pan,b=zee,i=3096,x=0.85788069900133,y=0.5286390892779154 -a=eks,b=hat,i=3100,x=0.07108443716756485,y=0.31816018481405606 -a=hat,b=zee,i=3102,x=0.3343254952473229,y=0.035494955233627556 -a=hat,b=wye,i=3104,x=0.3204490612720853,y=0.0691818430184431 -a=wye,b=hat,i=3105,x=0.9472477355051101,y=0.6702789389942152 -a=eks,b=hat,i=3106,x=0.178408829993969,y=0.47163529118192904 -a=wye,b=pan,i=3110,x=0.8967101456216812,y=0.8085016458992474 -a=zee,b=eks,i=3112,x=0.4493727221740449,y=0.16704994503241388 -a=pan,b=pan,i=3113,x=0.7927985055919656,y=0.9023056637507897 -a=eks,b=hat,i=3117,x=0.6278279883921511,y=0.6783776757536581 -a=wye,b=pan,i=3118,x=0.0780608220831499,y=0.34219170347854155 -a=zee,b=zee,i=3122,x=0.5294122704675105,y=0.6857110786673584 -a=eks,b=pan,i=3124,x=0.1911839922513059,y=0.16422636870934193 -a=zee,b=eks,i=3126,x=0.2514477009793492,y=0.2498314026061056 -a=zee,b=zee,i=3129,x=0.027975828338240083,y=0.46442407872411695 -a=eks,b=eks,i=3130,x=0.2455308797278265,y=0.13309025352554837 -a=pan,b=eks,i=3132,x=0.7271701616492765,y=0.5650626367615349 -a=pan,b=wye,i=3133,x=0.23651873567883164,y=0.3764128593161674 -a=hat,b=eks,i=3134,x=0.9970634534653143,y=0.8349282777208548 -a=zee,b=zee,i=3135,x=0.34594612609624187,y=0.22911649635660625 -a=eks,b=eks,i=3136,x=0.7717959001675492,y=0.8076412924980277 -a=zee,b=wye,i=3139,x=0.5684780382451567,y=0.5720874081361975 -a=wye,b=zee,i=3140,x=0.366288776550753,y=0.04378768748862749 -a=pan,b=eks,i=3144,x=0.5530175425021646,y=0.8944089100243684 -a=zee,b=wye,i=3145,x=0.6844032050501776,y=0.7132658565772104 -a=hat,b=pan,i=3148,x=0.007135675731816615,y=0.26790355487815287 -a=eks,b=hat,i=3150,x=0.5356404368957323,y=0.5401388412379213 -a=eks,b=pan,i=3151,x=0.0677212385434749,y=0.4111467324640289 -a=hat,b=wye,i=3152,x=0.3304026703418458,y=0.06256059204934794 -a=pan,b=wye,i=3154,x=0.16108434266645066,y=0.4223970209540501 -a=eks,b=zee,i=3156,x=0.5903395185451377,y=0.6284941637547498 -a=eks,b=hat,i=3164,x=0.1678243487522464,y=0.1296504375686386 -a=zee,b=zee,i=3168,x=0.3961829207208839,y=0.2622983994021634 -a=eks,b=wye,i=3169,x=0.2536595801738487,y=0.08261588685057286 -a=zee,b=zee,i=3171,x=0.27819614904389,y=0.11787924109496262 -a=eks,b=wye,i=3174,x=0.2566078750567745,y=0.05360968786999365 -a=wye,b=pan,i=3177,x=0.6848262739198221,y=0.5321892371672183 -a=wye,b=wye,i=3178,x=0.9845151630820034,y=0.6080801511979752 -a=zee,b=pan,i=3181,x=0.12870746190802307,y=0.21635539491335465 -a=wye,b=hat,i=3186,x=0.31825681489643076,y=0.3867222210818564 -a=eks,b=eks,i=3188,x=0.13550843210847796,y=0.20870138759868107 -a=pan,b=hat,i=3189,x=0.026314019590705673,y=0.18939923462316988 -a=pan,b=wye,i=3192,x=0.7448507872358296,y=0.9175983360847946 -a=hat,b=wye,i=3196,x=0.6843473825379831,y=0.7390543536399969 -a=wye,b=hat,i=3199,x=0.5950661155016866,y=0.7876820843797742 -a=hat,b=eks,i=3200,x=0.6465062834343134,y=0.5218982684290329 -a=zee,b=hat,i=3201,x=0.060837643441948086,y=0.06449850438005456 -a=hat,b=pan,i=3202,x=0.3172017484222194,y=0.05112537969570785 -a=pan,b=hat,i=3203,x=0.11472288877111181,y=0.278764852494509 -a=pan,b=pan,i=3206,x=0.6248657938226793,y=0.8681563350185779 -a=pan,b=eks,i=3207,x=0.6881257122613184,y=0.804141641741672 -a=hat,b=pan,i=3208,x=0.9922055997300119,y=0.9648120708367885 -a=eks,b=eks,i=3210,x=0.45293528719314957,y=0.17947685156612458 -a=hat,b=hat,i=3211,x=0.5613170559787437,y=0.5352246021671387 -a=zee,b=zee,i=3212,x=0.7964737415528816,y=0.5558173183901908 -a=pan,b=pan,i=3215,x=0.1413377562828586,y=0.44678231607159036 -a=eks,b=wye,i=3216,x=0.29373386203032203,y=0.4631723587487283 -a=eks,b=eks,i=3218,x=0.6880428093376797,y=0.9103207963454706 -a=hat,b=pan,i=3219,x=0.7474182668789385,y=0.5590391934991645 -a=eks,b=pan,i=3220,x=0.9532855829386742,y=0.8800478978800655 -a=eks,b=wye,i=3224,x=0.8943590875125406,y=0.6208131688490002 -a=eks,b=hat,i=3225,x=0.4838255169683877,y=0.2140927440076752 -a=wye,b=pan,i=3227,x=0.7070990060513,y=0.5452513596675552 -a=eks,b=hat,i=3228,x=0.9463721381595557,y=0.5282145729291476 -a=pan,b=pan,i=3229,x=0.9242949068835605,y=0.6700494745496223 -a=hat,b=eks,i=3230,x=0.0584193890994712,y=0.4718114656898049 -a=hat,b=wye,i=3232,x=0.34678472033142016,y=0.4446414363995591 -a=zee,b=pan,i=3235,x=0.013980830949869794,y=0.2508908461970313 -a=hat,b=wye,i=3236,x=0.6969519489568067,y=0.6395027023616561 -a=zee,b=eks,i=3238,x=0.012602991921698004,y=0.22634995064837027 -a=pan,b=zee,i=3240,x=0.5877493357317612,y=0.548066125189975 -a=pan,b=wye,i=3242,x=0.9611019977003785,y=0.681330883403185 -a=zee,b=hat,i=3243,x=0.17998018908462488,y=0.2200339352675208 -a=hat,b=pan,i=3244,x=0.5444834083087221,y=0.5306965663976729 -a=pan,b=zee,i=3245,x=0.7759221188096915,y=0.6025062049702136 -a=zee,b=hat,i=3247,x=0.7005880770412263,y=0.9156129778807589 -a=eks,b=pan,i=3249,x=0.2874972552716878,y=0.25110619048650307 -a=pan,b=eks,i=3250,x=0.2829120767349058,y=0.09835801807841182 -a=pan,b=pan,i=3254,x=0.350457431460238,y=0.4302184547620955 -a=pan,b=eks,i=3256,x=0.7135080861062042,y=0.5712799934745325 -a=zee,b=eks,i=3257,x=0.20289239990952312,y=0.362603885203753 -a=wye,b=hat,i=3259,x=0.08107176449903364,y=0.29319048909041645 -a=hat,b=zee,i=3260,x=0.8800473905727186,y=0.7552020057189927 -a=eks,b=pan,i=3264,x=0.829909329738617,y=0.9788813279683912 -a=pan,b=pan,i=3268,x=0.001904789877841595,y=0.2107702989499245 -a=wye,b=hat,i=3270,x=0.3399739634399507,y=0.49965908692258354 -a=eks,b=hat,i=3271,x=0.11643573302292032,y=0.35717256575069845 -a=eks,b=pan,i=3274,x=0.25513593682652125,y=0.39337835968432966 -a=zee,b=pan,i=3275,x=0.3232344110781661,y=0.47637792160425796 -a=wye,b=hat,i=3279,x=0.9157221686398738,y=0.5671280092243552 -a=pan,b=eks,i=3280,x=0.9442806463291782,y=0.9335857464104109 -a=pan,b=zee,i=3282,x=0.86450976120493,y=0.8170786827110009 -a=pan,b=hat,i=3284,x=0.414038070322006,y=0.4761906775736686 -a=pan,b=hat,i=3285,x=0.48063067035883633,y=0.4966350007922782 -a=wye,b=pan,i=3286,x=0.7217297767808066,y=0.9865570013659641 -a=zee,b=wye,i=3287,x=0.049406279942573406,y=0.4381024486414813 -a=eks,b=eks,i=3288,x=0.8590013149268277,y=0.936500197803695 -a=zee,b=eks,i=3290,x=0.40120382485623196,y=0.21124233932924863 -a=wye,b=zee,i=3292,x=0.9521492688907935,y=0.6087321738215051 -a=hat,b=hat,i=3293,x=0.47067984267026386,y=0.2670742530232063 -a=eks,b=zee,i=3296,x=0.21986184005655396,y=0.3247997718602733 -a=hat,b=pan,i=3297,x=0.9729466791999957,y=0.5771820308689207 -a=wye,b=wye,i=3300,x=0.6831118314601023,y=0.5728211330223406 -a=eks,b=eks,i=3301,x=0.8886973140588106,y=0.7986263263709766 -a=wye,b=hat,i=3304,x=0.4319885161986502,y=0.11333627655422829 -a=hat,b=pan,i=3305,x=0.20275914918267568,y=0.3188057450261915 -a=eks,b=pan,i=3306,x=0.7128512847755833,y=0.8374752272564904 -a=zee,b=zee,i=3308,x=0.24501938424108383,y=0.2620366749016796 -a=zee,b=wye,i=3310,x=0.7640238780203037,y=0.5545749802574607 -a=zee,b=hat,i=3311,x=0.7391015948965168,y=0.7783105639991896 -a=wye,b=pan,i=3312,x=0.9912133558674248,y=0.792510678216663 -a=pan,b=pan,i=3314,x=0.6554607159333067,y=0.9770255281674824 -a=hat,b=zee,i=3317,x=0.8991863104086707,y=0.8351323082787309 -a=wye,b=zee,i=3318,x=0.8368882450019627,y=0.9558667451117976 -a=zee,b=wye,i=3323,x=0.956745510209848,y=0.7277085431442248 -a=hat,b=eks,i=3326,x=0.07009249966420861,y=0.25922706016534536 -a=zee,b=eks,i=3327,x=0.14046308364385085,y=0.059686547583128746 -a=eks,b=hat,i=3329,x=0.5694104895719442,y=0.896791407570237 -a=pan,b=wye,i=3332,x=0.32760226290506067,y=0.20546606340653295 -a=wye,b=pan,i=3334,x=0.3692628443912691,y=0.04456305695935858 -a=wye,b=pan,i=3336,x=0.0830596216722399,y=0.42130620217712367 -a=eks,b=eks,i=3337,x=0.8502898262908782,y=0.808554017252108 -a=wye,b=pan,i=3338,x=0.4258737140465607,y=0.20746386470004785 -a=eks,b=eks,i=3340,x=0.8772219678712854,y=0.6738364551822755 -a=zee,b=wye,i=3343,x=0.28331195090016237,y=0.3609364099093614 -a=zee,b=hat,i=3345,x=0.3236007641260298,y=0.31877697899629276 -a=eks,b=eks,i=3348,x=0.38993896958048435,y=0.2335429118604364 -a=pan,b=wye,i=3349,x=0.376031512913815,y=0.4929792401226455 -a=wye,b=eks,i=3350,x=0.9327767394224131,y=0.7607839483352263 -a=hat,b=hat,i=3352,x=0.550190920585813,y=0.7696873798459735 -a=wye,b=eks,i=3353,x=0.5877052746857248,y=0.5545585412269964 -a=pan,b=zee,i=3354,x=0.2801717488802852,y=0.17038214633612547 -a=zee,b=wye,i=3355,x=0.024194919016248595,y=0.13545067511197206 -a=wye,b=eks,i=3356,x=0.6380780240701133,y=0.9408087514008974 -a=eks,b=eks,i=3361,x=0.6555829047838948,y=0.8920276297804856 -a=wye,b=pan,i=3365,x=0.5700040498735991,y=0.8850660888169822 -a=hat,b=eks,i=3366,x=0.4556207889124957,y=0.07128477762040519 -a=pan,b=hat,i=3372,x=0.43937440052467935,y=0.4563691901909951 -a=zee,b=zee,i=3375,x=0.4367949309522303,y=0.013673838744716393 -a=zee,b=wye,i=3379,x=0.23678623178363256,y=0.05041356234716987 -a=zee,b=hat,i=3381,x=0.7373174186367665,y=0.7964198412222034 -a=zee,b=pan,i=3385,x=0.05670367935833176,y=0.2963435909908908 -a=wye,b=zee,i=3393,x=0.9822570907790836,y=0.7299006638143403 -a=hat,b=eks,i=3394,x=0.6851390329252532,y=0.9050274462052531 -a=eks,b=hat,i=3396,x=0.9607050331936833,y=0.7948112675657537 -a=hat,b=eks,i=3398,x=0.6053108138597539,y=0.5992354123506696 -a=pan,b=eks,i=3399,x=0.048684103098098785,y=0.1633725907413952 -a=pan,b=hat,i=3403,x=0.7370714816662562,y=0.8697953979508419 -a=pan,b=zee,i=3404,x=0.31468021565829374,y=0.4427420339087643 -a=hat,b=hat,i=3406,x=0.45429743426633307,y=0.18433478859999053 -a=eks,b=wye,i=3407,x=0.9617046721194548,y=0.9093815718950851 -a=pan,b=hat,i=3408,x=0.07330408010392908,y=0.4448942751848767 -a=hat,b=pan,i=3410,x=0.08445928966500227,y=0.0703789054946542 -a=pan,b=wye,i=3412,x=0.8423508832374376,y=0.6949323092381406 -a=wye,b=wye,i=3413,x=0.040886939254273114,y=0.47897154534037656 -a=zee,b=wye,i=3414,x=0.25217276547664036,y=0.036553945399371846 -a=zee,b=pan,i=3415,x=0.5599190631540909,y=0.924868567464608 -a=pan,b=zee,i=3417,x=0.2837666956657495,y=0.38177621330614264 -a=zee,b=wye,i=3420,x=0.23090328234417856,y=0.2832500437007679 -a=hat,b=hat,i=3423,x=0.0844657406732815,y=0.035913466762956925 -a=pan,b=wye,i=3424,x=0.8784967044400372,y=0.604737958747047 -a=hat,b=pan,i=3425,x=0.6609492899115649,y=0.5467085754935348 -a=pan,b=hat,i=3427,x=0.8416597040795218,y=0.8525979909355791 -a=zee,b=zee,i=3433,x=0.8595470542087552,y=0.8498636271417952 -a=pan,b=eks,i=3437,x=0.025261472762689308,y=0.12799888376709667 -a=eks,b=pan,i=3441,x=0.2537650754015236,y=0.05620296178361983 -a=zee,b=eks,i=3446,x=0.2804194256928545,y=0.23979661671683972 -a=eks,b=pan,i=3447,x=0.8785960556284188,y=0.7011073928320367 -a=zee,b=pan,i=3449,x=0.524308758962708,y=0.6332502139032691 -a=pan,b=pan,i=3450,x=0.8213036158322992,y=0.6456770989043784 -a=pan,b=pan,i=3451,x=0.8025436057063862,y=0.7060797186033781 -a=pan,b=zee,i=3452,x=0.5760028039744347,y=0.6132903113537639 -a=eks,b=hat,i=3453,x=0.05717780028504649,y=0.07422864049114308 -a=eks,b=hat,i=3454,x=0.9110638506299676,y=0.9591332251303966 -a=zee,b=wye,i=3455,x=0.51833979114664,y=0.6939970837947521 -a=eks,b=pan,i=3456,x=0.4252463974393268,y=0.39275828072553476 -a=eks,b=wye,i=3457,x=0.9769460675156931,y=0.8198707026075209 -a=zee,b=hat,i=3460,x=0.588470670827405,y=0.6174548562216325 -a=zee,b=wye,i=3461,x=0.1990979839956707,y=0.023566934582078036 -a=pan,b=wye,i=3463,x=0.06717794490486906,y=0.48623828005334757 -a=pan,b=eks,i=3464,x=0.8155896300126392,y=0.5894548806723218 -a=hat,b=eks,i=3467,x=0.9391826144539274,y=0.9934443990210938 -a=zee,b=wye,i=3468,x=0.2358251666384058,y=0.4863498031303115 -a=pan,b=pan,i=3469,x=0.4258863723941383,y=0.2095061249114658 -a=eks,b=hat,i=3470,x=0.47997276184744964,y=0.06659122141821061 -a=wye,b=pan,i=3471,x=0.2764533988832033,y=0.3208516601140218 -a=pan,b=eks,i=3473,x=0.244297825943407,y=0.31169012284386755 -a=pan,b=hat,i=3477,x=0.6611093704674268,y=0.6687601867132502 -a=eks,b=pan,i=3478,x=0.08557950916786583,y=0.37592412501843786 -a=wye,b=eks,i=3480,x=0.4670447991864045,y=0.46821183232819474 -a=eks,b=wye,i=3481,x=0.0018822508391512782,y=0.4734813045472098 -a=hat,b=wye,i=3486,x=0.2849558278410832,y=0.3539958226346893 -a=zee,b=hat,i=3487,x=0.866561498905371,y=0.6749719599240999 -a=zee,b=pan,i=3488,x=0.05018208235181909,y=0.3964541287147757 -a=wye,b=eks,i=3489,x=0.8077315081411627,y=0.7479997434577657 -a=zee,b=zee,i=3490,x=0.10200642169348917,y=0.31165758001404054 -a=zee,b=wye,i=3495,x=0.9934345872412148,y=0.8688371909960622 -a=eks,b=zee,i=3497,x=0.9892124342839178,y=0.9379196159380152 -a=eks,b=hat,i=3498,x=0.6909633362296115,y=0.5517990615632886 -a=pan,b=eks,i=3499,x=0.10345255049088942,y=0.02234404876115914 -a=hat,b=eks,i=3501,x=0.002293403878501854,y=0.4879144111797784 -a=zee,b=zee,i=3502,x=0.5345656776152677,y=0.9046658240543963 -a=zee,b=wye,i=3503,x=0.9917665563701388,y=0.7473226514963157 -a=pan,b=eks,i=3506,x=0.3942757672769698,y=0.3445410354016084 -a=wye,b=zee,i=3507,x=0.8698234232439451,y=0.6003476393534727 -a=zee,b=eks,i=3512,x=0.7150929360997113,y=0.9600218860596139 -a=wye,b=hat,i=3516,x=0.44369718809353986,y=0.4894205500423119 -a=wye,b=eks,i=3517,x=0.322389903088264,y=0.05702987241410096 -a=pan,b=wye,i=3518,x=0.11882480113661997,y=0.3858296816561547 -a=zee,b=hat,i=3520,x=0.0928487341029709,y=0.3330386484000102 -a=pan,b=pan,i=3521,x=0.22867195583127464,y=0.33603525596818895 -a=pan,b=zee,i=3522,x=0.7242093277954511,y=0.831898967676118 -a=pan,b=eks,i=3524,x=0.30252752965606133,y=0.24419009734033026 -a=zee,b=wye,i=3526,x=0.04315340497837039,y=0.38068506172393646 -a=wye,b=eks,i=3529,x=0.16368069077854164,y=0.29359040780910695 -a=wye,b=hat,i=3531,x=0.598374987624828,y=0.6802372735701074 -a=hat,b=wye,i=3532,x=0.3438213922655702,y=0.28091154307295796 -a=pan,b=zee,i=3534,x=0.5808212068478656,y=0.9148727191488517 -a=hat,b=eks,i=3537,x=0.23900423399657456,y=0.2588795683734507 -a=wye,b=zee,i=3538,x=0.784669987647248,y=0.6504554048913334 -a=pan,b=eks,i=3540,x=0.6492339089502173,y=0.6963037893628019 -a=pan,b=eks,i=3544,x=0.660437682897796,y=0.9976869991284935 -a=wye,b=zee,i=3545,x=0.2910302714747729,y=0.3219344480841323 -a=zee,b=wye,i=3546,x=0.6680653445050417,y=0.864596002429439 -a=pan,b=zee,i=3547,x=0.7639660507096179,y=0.6193776992233352 -a=eks,b=pan,i=3552,x=0.965663991619718,y=0.5930384036340364 -a=pan,b=pan,i=3553,x=0.3101812940186591,y=0.2727128797499023 -a=zee,b=eks,i=3557,x=0.8571691661862111,y=0.5461980618981016 -a=pan,b=hat,i=3561,x=0.19425929127106012,y=0.24083853125540766 -a=wye,b=zee,i=3565,x=0.0168691413650478,y=0.18821185808166463 -a=zee,b=pan,i=3567,x=0.8121651250250981,y=0.686457266195396 -a=wye,b=hat,i=3569,x=0.8089924807824601,y=0.6633779430154854 -a=wye,b=wye,i=3571,x=0.38887372145181665,y=0.20495538006007763 -a=eks,b=pan,i=3572,x=0.35534650094834996,y=0.47884355218030206 -a=zee,b=wye,i=3573,x=0.6566568341390783,y=0.6074553589369566 -a=wye,b=wye,i=3575,x=0.6697828249944248,y=0.7638274219999387 -a=pan,b=eks,i=3579,x=0.8628339613928006,y=0.8518114551427095 -a=eks,b=wye,i=3583,x=0.27009503691464387,y=0.34604318820252766 -a=pan,b=eks,i=3584,x=0.29901280575806055,y=0.2606367826081081 -a=eks,b=hat,i=3586,x=0.9746502905906368,y=0.5008159057662351 -a=hat,b=hat,i=3588,x=0.5428335261613996,y=0.8746507311887247 -a=eks,b=hat,i=3589,x=0.04503314762859012,y=0.4498210841109198 -a=eks,b=hat,i=3590,x=0.21099486037176274,y=0.15918964285673298 -a=pan,b=hat,i=3594,x=0.30914801544685455,y=0.38087457746812736 -a=zee,b=zee,i=3601,x=0.2744348997210646,y=0.31854494443399084 -a=wye,b=pan,i=3604,x=0.7144947248233644,y=0.6725505298381226 -a=wye,b=eks,i=3605,x=0.6414071793103325,y=0.5040707081922082 -a=wye,b=hat,i=3607,x=0.2865652516469479,y=0.10334063882665867 -a=wye,b=pan,i=3608,x=0.24799522500173943,y=0.029628860448197347 -a=eks,b=zee,i=3610,x=0.06251116908017895,y=0.23236755910808227 -a=eks,b=hat,i=3611,x=0.2146220845642176,y=0.1332540175691711 -a=hat,b=zee,i=3612,x=0.39065626156480215,y=0.09272883365156981 -a=pan,b=eks,i=3613,x=0.04243312520650444,y=0.12731535921213588 -a=zee,b=hat,i=3614,x=0.9992938250588376,y=0.7586006131131866 -a=pan,b=pan,i=3615,x=0.955045779277772,y=0.8579181695107918 -a=eks,b=wye,i=3616,x=0.14187634853420827,y=0.2180915198390927 -a=wye,b=hat,i=3620,x=0.6713095225608523,y=0.5954491704569804 -a=zee,b=pan,i=3621,x=0.4092160575415905,y=0.30771033889968114 -a=wye,b=hat,i=3624,x=0.13584832757741117,y=0.382341043184265 -a=wye,b=zee,i=3625,x=0.7390723547209095,y=0.6804645486376089 -a=pan,b=pan,i=3626,x=0.17323378929158628,y=0.22177151771660586 -a=hat,b=hat,i=3627,x=0.27427850969768897,y=0.39696397114401794 -a=zee,b=zee,i=3629,x=0.1203621553000902,y=0.03649730823892894 -a=eks,b=pan,i=3630,x=0.6432472290390947,y=0.6493064608702905 -a=wye,b=zee,i=3631,x=0.5501609784896981,y=0.5442209389820327 -a=hat,b=zee,i=3632,x=0.9887195745001507,y=0.8462799528384646 -a=zee,b=wye,i=3633,x=0.05961380658144755,y=0.41153390509403887 -a=wye,b=pan,i=3634,x=0.779500491235004,y=0.5677694423637825 -a=eks,b=pan,i=3637,x=0.5208357640093749,y=0.5659221306135821 -a=zee,b=wye,i=3641,x=0.34634768849647446,y=0.1722807458856409 -a=zee,b=pan,i=3645,x=0.3353629361519648,y=0.27452402896726324 -a=pan,b=pan,i=3648,x=0.9502862550981916,y=0.9040781097596586 -a=wye,b=pan,i=3649,x=0.07083776693984412,y=0.42161605810186464 -a=hat,b=wye,i=3650,x=0.027750870484755663,y=0.059142569848676385 -a=hat,b=zee,i=3651,x=0.7388454792523287,y=0.6889713924377876 -a=hat,b=hat,i=3652,x=0.12134854954936014,y=0.12339998428589616 -a=pan,b=pan,i=3654,x=0.741537059135207,y=0.9230584052244919 -a=eks,b=hat,i=3655,x=0.1316863843779006,y=0.4213001572015598 -a=hat,b=eks,i=3656,x=0.14075093892206003,y=0.21208162198013836 -a=hat,b=eks,i=3658,x=0.8537796341502905,y=0.5982760622218769 -a=pan,b=hat,i=3659,x=0.09110243804094742,y=0.35916077607118146 -a=zee,b=hat,i=3661,x=0.32611268243475844,y=0.12873678851672 -a=hat,b=zee,i=3662,x=0.7673614981915601,y=0.7295742505814344 -a=eks,b=eks,i=3664,x=0.28693486076576824,y=0.19397030458410913 -a=hat,b=wye,i=3666,x=0.7295635205285994,y=0.6119784896875866 -a=zee,b=eks,i=3668,x=0.5993837930923437,y=0.7509474480036791 -a=eks,b=eks,i=3669,x=0.9355633368933711,y=0.9694655041497229 -a=zee,b=pan,i=3670,x=0.4986606323353615,y=0.3252967314272578 -a=hat,b=zee,i=3671,x=0.9851663975549066,y=0.7574307817453141 -a=wye,b=eks,i=3672,x=0.8646473696955588,y=0.8313013386958765 -a=pan,b=wye,i=3673,x=0.2515908234672535,y=0.056725699540206675 -a=eks,b=eks,i=3674,x=0.3536670370401426,y=0.3355576484883924 -a=eks,b=pan,i=3676,x=0.8723087423163797,y=0.6109859185908899 -a=zee,b=pan,i=3678,x=0.8491710196926309,y=0.6558159307696828 -a=wye,b=zee,i=3680,x=0.7425818200196079,y=0.9810014583943923 -a=wye,b=wye,i=3681,x=0.02721573926299492,y=0.07804891308055895 -a=hat,b=pan,i=3686,x=0.9301169302245861,y=0.7982783216031746 -a=zee,b=hat,i=3688,x=0.5723630888086361,y=0.8172243896570902 -a=hat,b=wye,i=3689,x=0.8355718873799872,y=0.8007108863141698 -a=zee,b=hat,i=3692,x=0.573338911032452,y=0.5241388333942388 -a=hat,b=pan,i=3693,x=0.7781206646766762,y=0.5080484241731826 -a=wye,b=wye,i=3700,x=0.9046703649949718,y=0.7600607720698596 -a=pan,b=hat,i=3701,x=0.7653688084959293,y=0.9589886741282106 -a=zee,b=eks,i=3704,x=0.6944927784356837,y=0.6778190994819128 -a=eks,b=zee,i=3706,x=0.28192270569849476,y=0.3669079489151894 -a=wye,b=hat,i=3707,x=0.32172668895407197,y=0.23641326221038772 -a=eks,b=wye,i=3709,x=0.5793435558579774,y=0.5284203604486059 -a=wye,b=hat,i=3711,x=0.7062248515236889,y=0.7592554719549557 -a=eks,b=hat,i=3712,x=0.20158466043698664,y=0.2506153993203297 -a=hat,b=zee,i=3713,x=0.5453918537789201,y=0.9591221613154766 -a=pan,b=wye,i=3714,x=0.7007443629312707,y=0.69979486340907 -a=hat,b=zee,i=3715,x=0.4982158038764617,y=0.1845463889797414 -a=wye,b=zee,i=3717,x=0.20372686286113306,y=0.48178229369817827 -a=eks,b=pan,i=3719,x=0.4534387451777433,y=0.22731879465386806 -a=hat,b=eks,i=3727,x=0.02778608789107495,y=0.19112025359038776 -a=pan,b=wye,i=3729,x=0.6339377797999709,y=0.7940228471998122 -a=hat,b=hat,i=3731,x=0.03433461671749849,y=0.37009846068918584 -a=wye,b=pan,i=3734,x=0.5747797481156508,y=0.8274654836314349 -a=eks,b=eks,i=3736,x=0.8706261619141413,y=0.5428739515744351 -a=wye,b=pan,i=3737,x=0.5574876609423702,y=0.8504937121138577 -a=zee,b=pan,i=3741,x=0.9571682809413955,y=0.6570144668674751 -a=eks,b=pan,i=3743,x=0.4905151151584467,y=0.320903002068355 -a=wye,b=zee,i=3744,x=0.7710752122842248,y=0.6182369915664692 -a=zee,b=pan,i=3745,x=0.0634219140814758,y=0.0909389524119274 -a=pan,b=hat,i=3746,x=0.016317522611819957,y=0.4500858677522094 -a=hat,b=hat,i=3747,x=0.2731453345797118,y=0.3612727190378229 -a=zee,b=zee,i=3748,x=0.7692098314967419,y=0.723183352513404 -a=hat,b=pan,i=3752,x=0.27781099183901203,y=0.24166942932110203 -a=eks,b=eks,i=3753,x=0.9130333710330752,y=0.9434343087469547 -a=pan,b=hat,i=3754,x=0.39530750680824867,y=0.285187450605236 -a=wye,b=zee,i=3755,x=0.5821904936762373,y=0.9440238426951152 -a=eks,b=eks,i=3756,x=0.3151274913498434,y=0.2613270252067468 -a=wye,b=zee,i=3757,x=0.27126594951001737,y=0.2696036535766695 -a=pan,b=zee,i=3758,x=0.1144851508437299,y=0.43717693060689256 -a=wye,b=wye,i=3759,x=0.8659325090962396,y=0.500920016668498 -a=pan,b=pan,i=3761,x=0.6277167190080807,y=0.820462327799342 -a=hat,b=eks,i=3763,x=0.702517766279011,y=0.5201760035681132 -a=hat,b=pan,i=3764,x=0.9684950471794708,y=0.9824729038297494 -a=pan,b=pan,i=3765,x=0.7505504157884441,y=0.5688693727587826 -a=hat,b=zee,i=3766,x=0.3053846255939139,y=0.29250711868083323 -a=pan,b=wye,i=3768,x=0.39157640275144845,y=0.29940355516568284 -a=wye,b=hat,i=3769,x=0.2813634801023107,y=0.33793045381955156 -a=wye,b=zee,i=3770,x=0.3006731850375737,y=0.41117593228974025 -a=eks,b=zee,i=3771,x=0.8966388980866674,y=0.6767775863177413 -a=zee,b=eks,i=3772,x=0.09712051675224176,y=0.1992258338913524 -a=eks,b=eks,i=3774,x=0.10098411790939343,y=0.23016371716573425 -a=wye,b=eks,i=3777,x=0.5229176412769544,y=0.8857285221477562 -a=eks,b=pan,i=3778,x=0.5543756678908779,y=0.8979653327985948 -a=eks,b=pan,i=3780,x=0.6536521341657655,y=0.6026553230815477 -a=hat,b=eks,i=3781,x=0.22056344697345842,y=0.16263581703146368 -a=wye,b=eks,i=3784,x=0.2896043360112557,y=0.03933436470492446 -a=pan,b=wye,i=3788,x=0.41697687514270476,y=0.3863350720666795 -a=eks,b=pan,i=3789,x=0.2647880014677908,y=0.495992120309258 -a=pan,b=wye,i=3790,x=0.4871902945382671,y=0.22753844996371497 -a=zee,b=wye,i=3791,x=0.9587582682512387,y=0.9041552661112677 -a=pan,b=eks,i=3792,x=0.8303342159408211,y=0.7063245550219001 -a=pan,b=eks,i=3793,x=0.43293237945019947,y=0.26733489278694356 -a=zee,b=wye,i=3794,x=0.8976337510372844,y=0.8750629709298201 -a=hat,b=pan,i=3795,x=0.8432372103239337,y=0.9510111805966026 -a=zee,b=pan,i=3798,x=0.9979923700274865,y=0.6588578150120853 -a=hat,b=eks,i=3800,x=0.6540911583411234,y=0.6156768180814669 -a=eks,b=zee,i=3801,x=0.41291944190449625,y=0.04630035513500563 -a=hat,b=hat,i=3805,x=0.9077137203924546,y=0.6604195772537097 -a=zee,b=pan,i=3806,x=0.4130639175002534,y=0.4140992672289935 -a=eks,b=pan,i=3808,x=0.18073645069225752,y=0.47471602068305085 -a=hat,b=eks,i=3809,x=0.07620205058855944,y=0.41909302154687966 -a=wye,b=wye,i=3811,x=0.9262768212215141,y=0.583254627467812 -a=hat,b=zee,i=3813,x=0.8381595697055793,y=0.8082122321715743 -a=hat,b=pan,i=3814,x=0.3227628236617065,y=0.09200255049758854 -a=wye,b=pan,i=3817,x=0.21834728153634142,y=0.009580087519049041 -a=wye,b=zee,i=3819,x=0.6612561643616807,y=0.647643437411651 -a=pan,b=pan,i=3821,x=0.09753442464986295,y=0.3452736158284476 -a=hat,b=wye,i=3823,x=0.0660248906480213,y=0.4768167157060277 -a=wye,b=wye,i=3825,x=0.7412307338094147,y=0.8357569402941348 -a=pan,b=zee,i=3826,x=0.8700896084310135,y=0.7743947935823393 -a=hat,b=hat,i=3828,x=0.4439300237744592,y=0.3540302359317383 -a=wye,b=hat,i=3830,x=0.31602199194810077,y=0.23756301234064214 -a=pan,b=eks,i=3833,x=0.9435147604130275,y=0.6343874692425551 -a=pan,b=hat,i=3834,x=0.7491688531360436,y=0.6632149460503455 -a=wye,b=pan,i=3836,x=0.5783001097508949,y=0.5326591809573153 -a=wye,b=eks,i=3838,x=0.16276307163297787,y=0.4480412721243018 -a=wye,b=wye,i=3841,x=0.7854392875246197,y=0.7264036810522736 -a=zee,b=wye,i=3842,x=0.9500031218945214,y=0.9557435110983296 -a=wye,b=eks,i=3849,x=0.7149976391333995,y=0.9748913470930238 -a=eks,b=zee,i=3851,x=0.6884645549243478,y=0.6729540888918134 -a=wye,b=wye,i=3852,x=0.16575767054134194,y=0.3519742254585112 -a=pan,b=zee,i=3856,x=0.7166199842938143,y=0.5985908973683398 -a=eks,b=pan,i=3857,x=0.911885736627155,y=0.7775693985993537 -a=eks,b=pan,i=3860,x=0.16404594209083445,y=0.2945650928508321 -a=pan,b=wye,i=3863,x=0.8914098448143842,y=0.941827688174933 -a=eks,b=pan,i=3865,x=0.6410821318604495,y=0.742344518102107 -a=eks,b=eks,i=3866,x=0.8820740686865273,y=0.6336399556322359 -a=pan,b=pan,i=3868,x=0.5708876065677694,y=0.6788408195369369 -a=hat,b=zee,i=3870,x=0.40688870301241575,y=0.4640784108862729 -a=wye,b=wye,i=3872,x=0.47105100438757685,y=0.05894343228765331 -a=zee,b=wye,i=3874,x=0.36954687122878715,y=0.07524269626487912 -a=pan,b=zee,i=3875,x=0.8656993436002198,y=0.7910484890727197 -a=wye,b=wye,i=3876,x=0.03808754965335226,y=0.08658971281465833 -a=hat,b=hat,i=3880,x=0.4235813324669898,y=0.24387827945280804 -a=hat,b=hat,i=3881,x=0.7822034723161025,y=0.7478339704565765 -a=hat,b=eks,i=3882,x=0.011719496883464853,y=0.24640876061080674 -a=eks,b=hat,i=3883,x=0.4614594041430371,y=0.3205017019419516 -a=wye,b=zee,i=3885,x=0.31672532313467505,y=0.2365343741445356 -a=zee,b=wye,i=3889,x=0.039039225578129,y=0.043618607590064085 -a=wye,b=eks,i=3890,x=0.1974840445022984,y=0.43475405724957294 -a=pan,b=eks,i=3891,x=0.9382818311518488,y=0.9030005498802104 -a=eks,b=eks,i=3893,x=0.4046249389793575,y=0.21056190964042465 -a=wye,b=zee,i=3894,x=0.7443136068289423,y=0.8294047544954046 -a=hat,b=pan,i=3897,x=0.49376649897367464,y=0.13401013066245737 -a=pan,b=hat,i=3900,x=0.8799773683889426,y=0.5220746421238783 -a=zee,b=eks,i=3902,x=0.8645468539063139,y=0.9700412096469742 -a=hat,b=hat,i=3903,x=0.6603175490464367,y=0.7332253490191969 -a=hat,b=hat,i=3905,x=0.37058852723699554,y=0.10112929497538448 -a=eks,b=zee,i=3909,x=0.8701294324647131,y=0.6010009857684786 -a=eks,b=pan,i=3910,x=0.7754775924406334,y=0.9607498923245504 -a=eks,b=hat,i=3912,x=0.40688370124160333,y=0.3725099736322035 -a=hat,b=hat,i=3919,x=0.20968623039533885,y=0.2249710535207634 -a=eks,b=wye,i=3920,x=0.06633524516092837,y=0.21897455790581 -a=wye,b=eks,i=3925,x=0.9444615936887226,y=0.5492757409492689 -a=pan,b=eks,i=3926,x=0.2577383831501502,y=0.42247048365748696 -a=hat,b=pan,i=3928,x=0.3294192690721903,y=0.0018064795955691215 -a=pan,b=wye,i=3929,x=0.5373694134669578,y=0.6408298650436733 -a=wye,b=zee,i=3930,x=0.3772473940400355,y=0.4855477755417952 -a=pan,b=hat,i=3931,x=0.8947844528349447,y=0.6976181039979583 -a=wye,b=eks,i=3932,x=0.902042488611117,y=0.8695780909283909 -a=eks,b=wye,i=3935,x=0.8719220728834155,y=0.626436829723036 -a=wye,b=wye,i=3938,x=0.4264030481171944,y=0.2469737981294069 -a=pan,b=hat,i=3940,x=0.37339956142433084,y=0.23248823182301037 -a=eks,b=zee,i=3942,x=0.7678757943544514,y=0.9693217394374674 -a=wye,b=hat,i=3943,x=0.29550708533363845,y=0.16362618484177738 -a=wye,b=eks,i=3946,x=0.8350585462480241,y=0.7491629688087337 -a=wye,b=zee,i=3949,x=0.3676627709059406,y=0.3957927902894449 -a=zee,b=pan,i=3950,x=0.32474388588887126,y=0.02474711989630063 -a=zee,b=eks,i=3953,x=0.30922267009534077,y=0.3284230853853207 -a=hat,b=pan,i=3954,x=0.052368455214725995,y=0.4715978875853839 -a=hat,b=zee,i=3958,x=0.07310839831115146,y=0.32925431162438823 -a=pan,b=hat,i=3959,x=0.1292574457299427,y=0.3582879075778822 -a=pan,b=zee,i=3960,x=0.19211441013639674,y=0.11950330832710931 -a=wye,b=eks,i=3964,x=0.9210830069555165,y=0.5838970142942722 -a=zee,b=wye,i=3965,x=0.23984259901508576,y=0.26442599713920145 -a=zee,b=wye,i=3967,x=0.9985449436152721,y=0.7330838738578122 -a=hat,b=pan,i=3971,x=0.47236749903854525,y=0.49755810812875845 -a=hat,b=hat,i=3974,x=0.2255823178745917,y=0.3328848639919585 -a=eks,b=eks,i=3976,x=0.3872364913819858,y=0.12628018436476995 -a=eks,b=wye,i=3979,x=0.05509300519176841,y=0.3449069313995392 -a=eks,b=pan,i=3981,x=0.798588528905017,y=0.7451168881460923 -a=wye,b=eks,i=3982,x=0.7480880614402182,y=0.8419207681331152 -a=wye,b=zee,i=3983,x=0.8362240426090267,y=0.77769018412775 -a=zee,b=zee,i=3988,x=0.7335921993524305,y=0.5879895671878599 -a=wye,b=pan,i=3990,x=0.2551633201471506,y=0.4633660311722343 -a=pan,b=zee,i=3991,x=0.07557797117002352,y=0.03446642347570361 -a=zee,b=eks,i=3992,x=0.7507600776739561,y=0.6732032182262292 -a=hat,b=zee,i=3993,x=0.08221997898229427,y=0.21489690844146592 -a=hat,b=eks,i=3995,x=0.6854597775410988,y=0.6047357220116547 -a=pan,b=hat,i=3996,x=0.4669100032261838,y=0.48298621327550606 -a=eks,b=hat,i=3997,x=0.8201134204882613,y=0.5748852394805374 -a=wye,b=hat,i=4001,x=0.8174301789619988,y=0.9053657573378745 -a=wye,b=pan,i=4004,x=0.7607827500015804,y=0.6235619294990873 -a=zee,b=hat,i=4006,x=0.48789661545234886,y=0.21227412408894908 -a=eks,b=hat,i=4008,x=0.890243383339597,y=0.7267223805200799 -a=hat,b=pan,i=4009,x=0.5706952995715363,y=0.9230695483570237 -a=zee,b=hat,i=4010,x=0.42440597576906447,y=0.0704425276034597 -a=hat,b=wye,i=4011,x=0.24251335510099137,y=0.23960695465439596 -a=eks,b=pan,i=4013,x=0.8704264127290353,y=0.5876599831119824 -a=hat,b=pan,i=4014,x=0.31319409877544535,y=0.37600379424562247 -a=pan,b=hat,i=4015,x=0.6791412275551999,y=0.8868908402993898 -a=pan,b=eks,i=4016,x=0.8587762124701115,y=0.7327173343378633 -a=hat,b=pan,i=4018,x=0.3048776737346697,y=0.13707959214248555 -a=zee,b=hat,i=4021,x=0.3130407621764443,y=0.2693181610377101 -a=pan,b=pan,i=4023,x=0.10367305449954967,y=0.022130374916290774 -a=pan,b=zee,i=4024,x=0.2180038149057033,y=0.2890891058720141 -a=hat,b=wye,i=4025,x=0.6365723951389777,y=0.7003325245087676 -a=zee,b=eks,i=4030,x=0.3317839760740481,y=0.4161099049929635 -a=pan,b=eks,i=4031,x=0.09704619121471669,y=0.0779275379233505 -a=wye,b=wye,i=4032,x=0.2974124725329491,y=0.20863438296756043 -a=wye,b=pan,i=4033,x=0.44164928623031885,y=0.3935479870985933 -a=hat,b=pan,i=4036,x=0.3630052335487458,y=0.1756001401202808 -a=pan,b=wye,i=4037,x=0.40101967210862355,y=0.21622386613658062 -a=zee,b=eks,i=4038,x=0.31593174924868916,y=0.30590560916984444 -a=wye,b=eks,i=4041,x=0.6663441339123051,y=0.8594459082303051 -a=zee,b=wye,i=4044,x=0.4445193542875734,y=0.10451265229731932 -a=eks,b=zee,i=4045,x=0.7400078317069471,y=0.6537027971576772 -a=zee,b=wye,i=4049,x=0.3865785757267529,y=0.3257613178120228 -a=zee,b=pan,i=4050,x=0.22133212632288612,y=0.46497223755296413 -a=wye,b=pan,i=4051,x=0.46330422466377885,y=0.0013216245762560641 -a=eks,b=eks,i=4056,x=0.8643394873777513,y=0.9659257127064651 -a=pan,b=pan,i=4057,x=0.3102888737344549,y=0.40268801525857945 -a=zee,b=zee,i=4061,x=0.5943115025128368,y=0.7926566656770357 -a=eks,b=eks,i=4062,x=0.9875301794451499,y=0.7335426236266079 -a=zee,b=wye,i=4069,x=0.969881192737605,y=0.7454405956242405 -a=hat,b=eks,i=4070,x=0.18629806750635058,y=0.20897903127133244 -a=pan,b=eks,i=4073,x=0.2657367745661936,y=0.2985150423046431 -a=wye,b=pan,i=4074,x=0.7170683734519407,y=0.6616939907637078 -a=hat,b=pan,i=4075,x=0.7741097521171826,y=0.5862044466287508 -a=eks,b=zee,i=4080,x=0.6036589730049234,y=0.5196679309887058 -a=hat,b=hat,i=4082,x=0.5572557445251078,y=0.624066652987969 -a=wye,b=wye,i=4083,x=0.8666445318722942,y=0.767288613574896 -a=wye,b=eks,i=4085,x=0.5272061090337726,y=0.9162627017806118 -a=eks,b=wye,i=4086,x=0.3119331822264977,y=0.4703087590730718 -a=wye,b=zee,i=4087,x=0.041369624776661396,y=0.1706574091421187 -a=pan,b=eks,i=4088,x=0.6090012823832082,y=0.812489654491081 -a=wye,b=zee,i=4090,x=0.08760748700129917,y=0.046823223997924046 -a=pan,b=pan,i=4091,x=0.9477496006595305,y=0.6877721274230629 -a=pan,b=eks,i=4092,x=0.05823591729943611,y=0.2271541631902052 -a=zee,b=wye,i=4093,x=0.5115949427264939,y=0.7463065447615764 -a=hat,b=hat,i=4094,x=0.8294711965470426,y=0.5100796086516896 -a=pan,b=wye,i=4095,x=0.002245348719915996,y=0.4758218988941505 -a=eks,b=zee,i=4097,x=0.5977012193299909,y=0.6349007809350186 -a=wye,b=wye,i=4101,x=0.9070001852862156,y=0.5366667269362855 -a=wye,b=zee,i=4103,x=0.40338842748518,y=0.16714248436837198 -a=wye,b=hat,i=4106,x=0.6762148011530986,y=0.7998537880048552 -a=eks,b=zee,i=4108,x=0.3415946367341153,y=0.19830581897594968 -a=eks,b=pan,i=4110,x=0.7201591775410024,y=0.9280174950278048 -a=wye,b=hat,i=4111,x=0.27092702426036697,y=0.40264205326846036 -a=wye,b=hat,i=4114,x=0.5672845724991237,y=0.8126100904189216 -a=wye,b=zee,i=4119,x=0.14069101423742136,y=0.3916394205657444 -a=eks,b=hat,i=4120,x=0.7278136147317754,y=0.992128682834371 -a=wye,b=eks,i=4121,x=0.3436640653132741,y=0.12875649374791853 -a=hat,b=zee,i=4123,x=0.11667168949423246,y=0.09343624851787202 -a=zee,b=zee,i=4124,x=0.3762744289665654,y=0.4657534810646099 -a=pan,b=zee,i=4125,x=0.8167559403831369,y=0.6726503484988995 -a=zee,b=hat,i=4126,x=0.16302778730181566,y=0.2748655824617119 -a=wye,b=wye,i=4127,x=0.7262693332963976,y=0.7800792471160094 -a=wye,b=zee,i=4132,x=0.14673501967206204,y=0.2171503552857429 -a=pan,b=eks,i=4134,x=0.5678246594857959,y=0.8501122230105806 -a=zee,b=eks,i=4136,x=0.9750589992032552,y=0.8792931621208594 -a=pan,b=eks,i=4137,x=0.727677709722926,y=0.990782873469676 -a=hat,b=eks,i=4138,x=0.680011121560662,y=0.8738045887343792 -a=pan,b=eks,i=4139,x=0.8882078496509985,y=0.7037523368580344 -a=pan,b=pan,i=4141,x=0.7099916507740912,y=0.7023882125149881 -a=zee,b=hat,i=4142,x=0.59845620196533,y=0.7654415799243958 -a=pan,b=eks,i=4144,x=0.20066813487611335,y=0.14876626920283553 -a=eks,b=eks,i=4145,x=0.15065242524890976,y=0.12428817259719527 -a=eks,b=hat,i=4146,x=0.24650476137003852,y=0.24493489109337752 -a=pan,b=wye,i=4148,x=0.3413539884717429,y=0.42693818289018026 -a=hat,b=wye,i=4151,x=0.9300760758556822,y=0.7773525646273065 -a=eks,b=eks,i=4152,x=0.1811147851470688,y=0.27238019374865363 -a=zee,b=zee,i=4153,x=0.5846722719463249,y=0.6311555286184487 -a=pan,b=zee,i=4155,x=0.09454282552502047,y=0.49923403772444375 -a=hat,b=eks,i=4156,x=0.15799120592162896,y=0.038371812406094774 -a=eks,b=zee,i=4157,x=0.4858235480097448,y=0.09279407391803784 -a=wye,b=pan,i=4158,x=0.1333970187468101,y=0.28784426376744954 -a=zee,b=wye,i=4159,x=0.16633086096833194,y=0.24966226951484904 -a=hat,b=wye,i=4160,x=0.8054114157818849,y=0.7345641356600717 -a=zee,b=wye,i=4161,x=0.0010540410989509086,y=0.4824535316499434 -a=eks,b=eks,i=4164,x=0.1814557125976639,y=0.16922072136830046 -a=hat,b=hat,i=4165,x=0.1667557442764379,y=0.4707835711078464 -a=zee,b=eks,i=4167,x=0.7619530390058822,y=0.930540767502347 -a=wye,b=zee,i=4170,x=0.9950566917608218,y=0.8929860757345622 -a=wye,b=pan,i=4179,x=0.8403305474491944,y=0.5265486487825841 -a=hat,b=hat,i=4181,x=0.9215787418719625,y=0.87388922229494 -a=wye,b=hat,i=4183,x=0.7734961393992563,y=0.8972101418171253 -a=wye,b=eks,i=4184,x=0.26453922756144566,y=0.04144136482622762 -a=hat,b=eks,i=4187,x=0.9865778952946068,y=0.9315331182266391 -a=pan,b=wye,i=4193,x=0.782060968571005,y=0.5226067196250769 -a=zee,b=hat,i=4194,x=0.6917599608609465,y=0.7645848884839161 -a=wye,b=pan,i=4203,x=0.24740078542575394,y=0.031517413903408564 -a=eks,b=wye,i=4204,x=0.09707778409356904,y=0.4413369985080463 -a=eks,b=zee,i=4206,x=0.591250716216349,y=0.533942741704139 -a=eks,b=eks,i=4208,x=0.23584245665114634,y=0.13929514505423546 -a=wye,b=eks,i=4211,x=0.5693885676546375,y=0.8180582438424654 -a=zee,b=zee,i=4213,x=0.6569921162319814,y=0.9398725266121587 -a=zee,b=eks,i=4214,x=0.6757239578204182,y=0.6370305085828928 -a=pan,b=wye,i=4217,x=0.4097976618902073,y=0.141878119206427 -a=eks,b=wye,i=4222,x=0.2916049582954635,y=0.36479303527285845 -a=hat,b=zee,i=4224,x=0.5666319712329421,y=0.5421871427604233 -a=pan,b=eks,i=4229,x=0.651806061031575,y=0.6877628315760286 -a=eks,b=hat,i=4231,x=0.9813730880370696,y=0.8073301729919906 -a=hat,b=hat,i=4232,x=0.4406941528960675,y=0.11038994093232624 -a=wye,b=pan,i=4233,x=0.6049346739736081,y=0.8481638285484625 -a=wye,b=pan,i=4234,x=0.03250269370708647,y=0.07284046091092433 -a=pan,b=hat,i=4240,x=0.7490446337745393,y=0.7787017014295363 -a=zee,b=hat,i=4242,x=0.34372514541539545,y=0.49770081510285935 -a=hat,b=eks,i=4243,x=0.38836962308546263,y=0.20018023403843987 -a=pan,b=wye,i=4244,x=0.7365286003534705,y=0.9834124894169503 -a=hat,b=zee,i=4245,x=0.8079109744541904,y=0.7703976742527068 -a=zee,b=wye,i=4246,x=0.4282487915196205,y=0.20203065558191458 -a=pan,b=eks,i=4247,x=0.9507204029429733,y=0.5630361304031504 -a=eks,b=wye,i=4248,x=0.5065699052598817,y=0.6709355384501077 -a=zee,b=pan,i=4251,x=0.36882904197494304,y=0.20694570729434147 -a=zee,b=zee,i=4252,x=0.18869049168164287,y=0.2881249393129065 -a=pan,b=eks,i=4253,x=0.8529162429192656,y=0.6126252561626568 -a=pan,b=hat,i=4259,x=0.5012993133229816,y=0.9840303477621715 -a=eks,b=pan,i=4260,x=0.0557110727165222,y=0.3692997658300152 -a=zee,b=wye,i=4263,x=0.5008782411049667,y=0.6537828452513129 -a=hat,b=eks,i=4267,x=0.6709709261548794,y=0.6826054557997793 -a=wye,b=hat,i=4270,x=0.05437547367302842,y=0.3843634628840725 -a=eks,b=eks,i=4272,x=0.42076370727497103,y=0.347103929260111 -a=eks,b=eks,i=4274,x=0.7194619239494552,y=0.6726333368969638 -a=eks,b=wye,i=4276,x=0.03269653193879951,y=0.29083447280996944 -a=zee,b=hat,i=4279,x=0.919407700741633,y=0.6700497097456894 -a=eks,b=pan,i=4280,x=0.09769799852915939,y=0.3471066706498296 -a=pan,b=zee,i=4285,x=0.2957451251158941,y=0.23349218064678878 -a=pan,b=eks,i=4287,x=0.22955891589246613,y=0.2437355707416211 -a=hat,b=zee,i=4288,x=0.2100291042828707,y=0.3046125296846791 -a=hat,b=zee,i=4289,x=0.6942460642160058,y=0.871648415206408 -a=wye,b=pan,i=4290,x=0.13303046989523815,y=0.45261676602514167 -a=wye,b=wye,i=4291,x=0.24091267860783117,y=0.432502161153847 -a=zee,b=hat,i=4295,x=0.866742316822531,y=0.5669492043473316 -a=pan,b=hat,i=4297,x=0.020837302984029304,y=0.3069132274412595 -a=hat,b=wye,i=4299,x=0.6559693329859475,y=0.9101410668227939 -a=pan,b=pan,i=4300,x=0.14308736404653355,y=0.35525668832657153 -a=eks,b=hat,i=4301,x=0.04475741710473613,y=0.3360654229410476 -a=zee,b=pan,i=4305,x=0.054247648849443775,y=0.03062117326702829 -a=hat,b=zee,i=4307,x=0.6572769759538587,y=0.7762188360555565 -a=zee,b=zee,i=4308,x=0.6244811945148983,y=0.6455417265947343 -a=wye,b=zee,i=4310,x=0.3157871729124738,y=0.3917102144253892 -a=zee,b=hat,i=4313,x=0.40564280799464325,y=0.33455931413035944 -a=hat,b=zee,i=4314,x=0.26557751620121417,y=0.030582294685487232 -a=wye,b=eks,i=4315,x=0.8346822718173391,y=0.9087526385931736 -a=eks,b=wye,i=4317,x=0.5533052426698345,y=0.9963296753932288 -a=eks,b=hat,i=4319,x=0.587710279503696,y=0.7637256058032382 -a=hat,b=eks,i=4320,x=0.225195776008963,y=0.34680409151838987 -a=eks,b=eks,i=4321,x=0.3743649517286406,y=0.371323975760271 -a=pan,b=wye,i=4324,x=0.8265091425517825,y=0.8730857418980851 -a=wye,b=hat,i=4325,x=0.18762256928648036,y=0.3496377335361346 -a=pan,b=zee,i=4327,x=0.8574481014982461,y=0.5295177741370016 -a=eks,b=hat,i=4328,x=0.04469772107287828,y=0.1558945876794342 -a=zee,b=wye,i=4329,x=0.040009010165471426,y=0.23762769464838596 -a=wye,b=eks,i=4330,x=0.7337424822041352,y=0.9253645788362634 -a=zee,b=eks,i=4332,x=0.6650861493530829,y=0.9532385654163494 -a=wye,b=zee,i=4333,x=0.623256894200598,y=0.9959963338862539 -a=hat,b=hat,i=4334,x=0.5194251677645445,y=0.6069457992071033 -a=eks,b=eks,i=4335,x=0.27590012941997233,y=0.4710389173795224 -a=eks,b=wye,i=4336,x=0.20559084127748029,y=0.07907344682124973 -a=eks,b=wye,i=4338,x=0.7956872034220226,y=0.5293505141201019 -a=zee,b=hat,i=4340,x=0.7603664092180368,y=0.9580821743227704 -a=wye,b=wye,i=4344,x=0.052662357337272314,y=0.29674416350945576 -a=wye,b=eks,i=4345,x=0.32377948428256254,y=0.44346746414092775 -a=wye,b=hat,i=4348,x=0.4821078789121165,y=0.4162262532349117 -a=wye,b=hat,i=4349,x=0.4367902393016294,y=0.05920613613537973 -a=eks,b=hat,i=4350,x=0.9339368174600853,y=0.7317847021280102 -a=zee,b=hat,i=4351,x=0.9429615758129121,y=0.5240015841208292 -a=hat,b=zee,i=4352,x=0.0664957669868742,y=8.818962627266114e-05 -a=pan,b=eks,i=4356,x=0.01315481017386444,y=0.44644705644627847 -a=wye,b=pan,i=4357,x=0.15872648196015937,y=0.4101120817770719 -a=eks,b=hat,i=4359,x=0.18749105355156304,y=0.031119717506070232 -a=wye,b=eks,i=4360,x=0.5994338059975802,y=0.7593584300322925 -a=pan,b=pan,i=4362,x=0.4776831446864783,y=0.31255268452634855 -a=pan,b=pan,i=4365,x=0.8056978268678051,y=0.6122184248222929 -a=zee,b=eks,i=4367,x=0.5479247041679578,y=0.8471361139630293 -a=hat,b=hat,i=4368,x=0.6173031043354198,y=0.7380826201700894 -a=hat,b=pan,i=4369,x=0.18322206558953436,y=0.3662885008446586 -a=zee,b=pan,i=4370,x=0.8569969483007317,y=0.731735360698434 -a=zee,b=zee,i=4371,x=0.20408101154886704,y=0.43495561327109344 -a=zee,b=pan,i=4373,x=0.39321439524831203,y=0.2914282319820135 -a=zee,b=hat,i=4374,x=0.683824883019394,y=0.585513739811086 -a=eks,b=zee,i=4376,x=0.8528651690503563,y=0.6839515405337084 -a=hat,b=eks,i=4378,x=0.05864089512370707,y=0.3851321842794584 -a=hat,b=eks,i=4379,x=0.385346641589309,y=0.49130997093061135 -a=wye,b=eks,i=4380,x=0.41688102647846714,y=0.4373087113569425 -a=eks,b=eks,i=4383,x=0.8187617783793841,y=0.9557936564036845 -a=pan,b=eks,i=4384,x=0.5100350554093268,y=0.8092077539642156 -a=pan,b=wye,i=4386,x=0.03535725248176258,y=0.21559585940453474 -a=eks,b=zee,i=4387,x=0.5578706674280356,y=0.5892456559407706 -a=zee,b=hat,i=4388,x=0.3301766575217969,y=0.3233192495545678 -a=hat,b=wye,i=4389,x=0.17144446980658334,y=0.17462284811463846 -a=wye,b=eks,i=4392,x=0.08391983953449689,y=0.4685350106442322 -a=eks,b=hat,i=4394,x=0.6446893978656929,y=0.742983523935812 -a=hat,b=eks,i=4395,x=0.05068057954766625,y=0.32284857142742274 -a=zee,b=wye,i=4396,x=0.031143786348458158,y=0.4250465603658179 -a=pan,b=zee,i=4397,x=0.47789346509127195,y=0.35190784679302956 -a=wye,b=hat,i=4400,x=0.06936764963814968,y=0.3043996463710237 -a=zee,b=zee,i=4402,x=0.05608507131691576,y=0.3577189025004591 -a=eks,b=wye,i=4404,x=0.20538620731982282,y=0.20907310428515913 -a=pan,b=hat,i=4405,x=0.770037239607531,y=0.8918149402479805 -a=pan,b=hat,i=4407,x=0.5936012356219856,y=0.9640723007408432 -a=pan,b=pan,i=4410,x=0.2570515021562684,y=0.18774521042902936 -a=wye,b=wye,i=4412,x=0.7213015230538632,y=0.6718375213896831 -a=zee,b=pan,i=4413,x=0.8367397203622533,y=0.7284961033977948 -a=eks,b=eks,i=4414,x=0.6694554317033412,y=0.9879307986798048 -a=zee,b=eks,i=4416,x=0.362024615946302,y=0.01598375230508753 -a=pan,b=eks,i=4418,x=0.9353086997459791,y=0.840900748615823 -a=zee,b=eks,i=4423,x=0.9639383645238275,y=0.6490468629834018 -a=zee,b=eks,i=4424,x=0.7312421688490892,y=0.8667063684553176 -a=pan,b=pan,i=4425,x=0.46845749017099236,y=0.11757543510403212 -a=zee,b=eks,i=4426,x=0.5623944023007167,y=0.7586419852976186 -a=eks,b=hat,i=4427,x=0.9350368655950849,y=0.9337007230580264 -a=wye,b=wye,i=4431,x=0.6855292088150996,y=0.5336035912975299 -a=eks,b=pan,i=4433,x=0.24252721996042959,y=0.28456246724868983 -a=zee,b=eks,i=4435,x=0.3774471419632248,y=0.29246801034228276 -a=wye,b=eks,i=4436,x=0.21438792699902287,y=0.1153507200959073 -a=eks,b=wye,i=4437,x=0.47860288810882523,y=0.25957684880561227 -a=wye,b=hat,i=4439,x=0.8059627789626932,y=0.9269765317602825 -a=wye,b=eks,i=4442,x=0.5598645482568733,y=0.8346150307672233 -a=hat,b=zee,i=4446,x=0.701715405648832,y=0.8559468613900958 -a=hat,b=pan,i=4447,x=0.13582612436147878,y=0.497058893619451 -a=hat,b=wye,i=4448,x=0.6624067185928518,y=0.7937707954447804 -a=pan,b=zee,i=4451,x=0.9254868696106908,y=0.9850750432504393 -a=zee,b=wye,i=4455,x=0.9045463102006963,y=0.848434465758308 -a=zee,b=hat,i=4456,x=0.08456763094566144,y=0.010673585995051305 -a=pan,b=zee,i=4460,x=0.1592478815974211,y=0.4117697078037489 -a=zee,b=zee,i=4462,x=0.18223498064407118,y=0.36892881666552835 -a=eks,b=wye,i=4463,x=0.6602307362128103,y=0.824908201375127 -a=zee,b=wye,i=4465,x=0.9363792956174969,y=0.8531230483001019 -a=eks,b=zee,i=4466,x=0.8051994741838333,y=0.5378817334878282 -a=pan,b=hat,i=4468,x=0.6433621739438674,y=0.6213575464612451 -a=eks,b=hat,i=4469,x=0.9576601311217493,y=0.653626721264175 -a=eks,b=hat,i=4477,x=0.09002534954722263,y=0.0791900913528687 -a=zee,b=wye,i=4478,x=0.7347401014901926,y=0.5874553765719767 -a=eks,b=zee,i=4480,x=0.06846268410645817,y=0.17937317736357228 -a=eks,b=zee,i=4482,x=0.5207774812238394,y=0.7322116837434511 -a=zee,b=wye,i=4483,x=0.6011563904137914,y=0.6359195042320677 -a=hat,b=eks,i=4485,x=0.14129738926071922,y=0.09762322511903287 -a=wye,b=wye,i=4486,x=0.587567750076066,y=0.6669838072984797 -a=eks,b=wye,i=4487,x=0.5516672019589355,y=0.7655831718008789 -a=hat,b=wye,i=4488,x=0.7926043240629409,y=0.5015162896194846 -a=wye,b=wye,i=4489,x=0.6948771123324418,y=0.5976836677553925 -a=hat,b=hat,i=4490,x=0.9101749423682922,y=0.9101168870690818 -a=pan,b=wye,i=4491,x=0.5070024474601975,y=0.7305420057451063 -a=hat,b=eks,i=4492,x=0.1759423893989127,y=0.3959141841599947 -a=eks,b=pan,i=4493,x=0.6837930443900314,y=0.6284806971996789 -a=wye,b=hat,i=4495,x=0.4602646789703714,y=0.12318800994516399 -a=wye,b=pan,i=4496,x=0.7594514407425375,y=0.6656599679572212 -a=zee,b=pan,i=4497,x=0.0776140160787101,y=0.02352743433085669 -a=wye,b=zee,i=4498,x=0.02184839096132485,y=0.3911325637076585 -a=wye,b=pan,i=4499,x=0.8747947010040115,y=0.9998479502810276 -a=pan,b=zee,i=4500,x=0.47622133460809657,y=0.12656764784587515 -a=zee,b=pan,i=4501,x=0.9880755588957435,y=0.780394078164109 -a=hat,b=eks,i=4504,x=0.7328180759655728,y=0.8128425968959323 -a=hat,b=wye,i=4506,x=0.6481956843803017,y=0.6728352515966057 -a=wye,b=hat,i=4511,x=0.9311713164896562,y=0.5805780192421368 -a=hat,b=eks,i=4512,x=0.23786081178866836,y=0.36277905022985646 -a=hat,b=wye,i=4513,x=0.965484537526872,y=0.940488169982859 -a=pan,b=pan,i=4516,x=0.3492462945952187,y=0.2946268275283319 -a=hat,b=eks,i=4518,x=0.44713434909121097,y=0.16699429132092636 -a=wye,b=eks,i=4520,x=0.21810500990652393,y=0.23695212300002177 -a=wye,b=zee,i=4523,x=0.05279712720226515,y=0.027511378098411865 -a=zee,b=hat,i=4524,x=0.1957893855808428,y=0.2551266540561208 -a=zee,b=pan,i=4525,x=0.011543703995189447,y=0.22663954461488478 -a=pan,b=pan,i=4526,x=0.04880772479373874,y=0.07481795594892848 -a=pan,b=hat,i=4527,x=0.31836250428860824,y=0.32626988649341593 -a=eks,b=zee,i=4531,x=0.34858797365915506,y=0.4282397998858426 -a=pan,b=eks,i=4532,x=0.8877015003398467,y=0.7747761049575923 -a=zee,b=hat,i=4535,x=0.46136202746827326,y=0.42271339711114486 -a=wye,b=pan,i=4538,x=0.7691954303113361,y=0.5906545288840418 -a=wye,b=eks,i=4539,x=0.666121467152889,y=0.7009152639751882 -a=pan,b=pan,i=4540,x=0.8705353878768347,y=0.569382489859167 -a=pan,b=wye,i=4546,x=0.30897074727172746,y=0.07486636973164118 -a=hat,b=zee,i=4548,x=0.6838256979656141,y=0.9575551645763191 -a=wye,b=eks,i=4549,x=0.9129619062625066,y=0.7815822557674902 -a=zee,b=hat,i=4558,x=0.030771073498329193,y=0.22547664086558517 -a=pan,b=zee,i=4559,x=0.8853445527158975,y=0.9598699991813698 -a=pan,b=pan,i=4560,x=0.022873859395381335,y=0.16717654342761945 -a=wye,b=wye,i=4562,x=0.9962200957849251,y=0.7504411563669804 -a=zee,b=wye,i=4564,x=0.7531892953023888,y=0.662798570253206 -a=wye,b=eks,i=4567,x=0.0013320296153030986,y=0.3527351039106079 -a=zee,b=zee,i=4575,x=0.4923232521663191,y=0.31138573511811585 -a=hat,b=hat,i=4579,x=0.7716061175886524,y=0.5940949446227113 -a=zee,b=pan,i=4581,x=0.6615122130690573,y=0.743282484093763 -a=hat,b=zee,i=4582,x=0.7466772782921713,y=0.6024593387871963 -a=zee,b=zee,i=4583,x=0.7293308998803242,y=0.9194675588274827 -a=wye,b=wye,i=4585,x=0.49005088405256925,y=0.19667802308060156 -a=hat,b=zee,i=4588,x=0.15982614073843593,y=0.29678575429874954 -a=zee,b=wye,i=4591,x=0.3549198162177106,y=0.15971238689401845 -a=zee,b=zee,i=4592,x=0.3725968594942376,y=0.10170369746035934 -a=pan,b=eks,i=4594,x=0.9636076558747869,y=0.6429412934414747 -a=eks,b=eks,i=4601,x=0.17142456675630824,y=0.428244260538891 -a=wye,b=eks,i=4604,x=0.26884887570750515,y=0.0629227877462456 -a=wye,b=hat,i=4605,x=0.9967036371872702,y=0.9394080649718911 -a=eks,b=hat,i=4610,x=0.8546204254968556,y=0.544666096374198 -a=wye,b=zee,i=4611,x=0.9797738948452778,y=0.7539379828966757 -a=eks,b=eks,i=4613,x=0.036974707048940014,y=0.13498566781731325 -a=pan,b=zee,i=4614,x=0.4962373115799128,y=0.34690328340466625 -a=pan,b=wye,i=4617,x=0.6064318491662761,y=0.9709587074540149 -a=eks,b=eks,i=4618,x=0.6067298140262544,y=0.6856518510847851 -a=zee,b=eks,i=4621,x=0.30992740946284036,y=0.3114230762548156 -a=wye,b=wye,i=4622,x=0.9124025251398724,y=0.9456164182783081 -a=wye,b=pan,i=4624,x=0.5833679710036083,y=0.9019285736689665 -a=zee,b=pan,i=4625,x=0.8458203200231942,y=0.5450580672631699 -a=pan,b=hat,i=4628,x=0.8957043450158336,y=0.5673889892957554 -a=wye,b=hat,i=4629,x=0.8464282723870642,y=0.5202135613238874 -a=zee,b=hat,i=4631,x=0.9018507034320511,y=0.7039556507979018 -a=pan,b=pan,i=4632,x=0.4889756359426054,y=0.3597265690523318 -a=eks,b=eks,i=4639,x=0.36139046295982613,y=0.40696722185592216 -a=zee,b=hat,i=4643,x=0.4795723404826593,y=0.46439187383822056 -a=zee,b=hat,i=4644,x=0.5269030281828351,y=0.5294159733959858 -a=eks,b=zee,i=4647,x=0.42422452591610793,y=0.2126460780549554 -a=pan,b=hat,i=4654,x=0.5285099685069632,y=0.5178008352128922 -a=hat,b=wye,i=4657,x=0.14061995895280166,y=0.47199609775073736 -a=hat,b=eks,i=4660,x=0.30472363074700515,y=0.07217266625982621 -a=hat,b=wye,i=4661,x=0.2091333254634984,y=0.1548046270754979 -a=hat,b=hat,i=4663,x=0.3119827522367612,y=0.4259694252127655 -a=pan,b=zee,i=4665,x=0.054344923432058434,y=0.16217922759144587 -a=wye,b=zee,i=4666,x=0.4186702128599753,y=0.2835839275998192 -a=wye,b=zee,i=4667,x=0.0646217379660351,y=0.30530257092910784 -a=zee,b=eks,i=4668,x=0.07870649960682297,y=0.2515794150323323 -a=hat,b=hat,i=4669,x=0.5003476787456538,y=0.6310918883710445 -a=pan,b=hat,i=4670,x=0.6275111165777365,y=0.8054897414350336 -a=zee,b=eks,i=4673,x=0.984318771878163,y=0.7280796955832692 -a=zee,b=wye,i=4674,x=0.23054557107461504,y=0.19681174789488143 -a=eks,b=pan,i=4676,x=0.1423438599979604,y=0.35330918689671975 -a=hat,b=zee,i=4678,x=0.9082274952383252,y=0.7405877302837555 -a=eks,b=pan,i=4679,x=0.8074215267431348,y=0.5236668774007812 -a=eks,b=hat,i=4682,x=0.9342926038131985,y=0.7979695752949024 -a=zee,b=pan,i=4684,x=0.44163999038860213,y=0.38504226387550344 -a=pan,b=zee,i=4685,x=0.03027055342778162,y=0.08035681468258382 -a=zee,b=wye,i=4686,x=0.08118893501639246,y=0.27655291599781473 -a=wye,b=hat,i=4687,x=0.06385275336646346,y=0.35108434035108427 -a=wye,b=hat,i=4689,x=0.8811472299764586,y=0.603532565127673 -a=eks,b=wye,i=4692,x=0.6256084558730343,y=0.5912072106343357 -a=eks,b=wye,i=4693,x=0.43739401507823317,y=0.4449591712634142 -a=eks,b=hat,i=4696,x=0.008662277886696601,y=0.3721538653338412 -a=eks,b=zee,i=4697,x=0.7171113231602343,y=0.7425350749221431 -a=pan,b=hat,i=4700,x=0.9055844258025669,y=0.7437707529087395 -a=zee,b=zee,i=4702,x=0.7415668922687337,y=0.8797752247285192 -a=eks,b=wye,i=4703,x=0.7722596990678992,y=0.7367517235830364 -a=eks,b=hat,i=4706,x=0.6995046411916459,y=0.9587840493554082 -a=hat,b=wye,i=4707,x=0.7945060726118334,y=0.8708814355187628 -a=eks,b=hat,i=4708,x=0.1778567317636336,y=0.4554107042944405 -a=eks,b=hat,i=4709,x=0.8605269620945222,y=0.9282320361391482 -a=zee,b=pan,i=4710,x=0.7925893623491367,y=0.8373876174093722 -a=hat,b=zee,i=4713,x=0.3394230162235836,y=0.4370239027445896 -a=hat,b=hat,i=4714,x=0.8405345514548883,y=0.8644132717621533 -a=hat,b=pan,i=4716,x=0.012844309530080089,y=0.25779486121957473 -a=hat,b=eks,i=4717,x=0.7365074627250664,y=0.9439422879543493 -a=pan,b=pan,i=4718,x=0.23929472797530638,y=0.15699808756834377 -a=wye,b=eks,i=4721,x=0.9347768806843397,y=0.8839032510290749 -a=zee,b=wye,i=4726,x=0.8269425781542478,y=0.7279915540846144 -a=pan,b=zee,i=4729,x=0.18970289783165384,y=0.4228791314162068 -a=zee,b=hat,i=4730,x=0.19347150884164055,y=0.37509711156847003 -a=zee,b=wye,i=4732,x=0.9567066838864685,y=0.6222637241828745 -a=hat,b=eks,i=4734,x=0.4361140296691789,y=0.19415398432919728 -a=eks,b=zee,i=4735,x=0.028008275847919872,y=0.12986606641246612 -a=hat,b=wye,i=4740,x=0.1119893643732226,y=0.41788347372200485 -a=hat,b=eks,i=4741,x=0.7241531241241961,y=0.9089044568897544 -a=hat,b=wye,i=4742,x=0.8802453504639547,y=0.7366398321703834 -a=eks,b=pan,i=4743,x=0.2504490581104497,y=0.29547558676954633 -a=hat,b=wye,i=4744,x=0.4979148854618458,y=0.11700636396309227 -a=eks,b=pan,i=4746,x=0.16989991264520043,y=0.018451772273192057 -a=zee,b=pan,i=4748,x=0.7418671304073968,y=0.8575401492075233 -a=hat,b=pan,i=4751,x=0.5858041848273323,y=0.6295306564064627 -a=zee,b=wye,i=4753,x=0.8545851137163856,y=0.9679476038287586 -a=eks,b=hat,i=4755,x=0.7839088793029254,y=0.524722394465856 -a=pan,b=pan,i=4756,x=0.397023046047854,y=0.11000986851499284 -a=wye,b=eks,i=4757,x=0.21991834430842194,y=0.3045979240462181 -a=zee,b=wye,i=4760,x=0.022667005941863883,y=0.45092868070487113 -a=zee,b=hat,i=4762,x=0.9059466160415109,y=0.6087785388744085 -a=zee,b=zee,i=4765,x=0.9455569776929973,y=0.8604499298561917 -a=zee,b=eks,i=4766,x=0.37773136340995606,y=0.25694678545170857 -a=eks,b=eks,i=4767,x=0.7219583517207702,y=0.727638969023518 -a=zee,b=wye,i=4769,x=0.9897615767481157,y=0.6975316151559802 -a=eks,b=hat,i=4770,x=0.23499057343433494,y=0.47659932458800036 -a=wye,b=hat,i=4771,x=0.1844047653981028,y=0.022663675164210306 -a=zee,b=wye,i=4772,x=0.09271907588361772,y=0.13142402431280997 -a=hat,b=hat,i=4776,x=0.2338057751520678,y=0.09800686529861335 -a=zee,b=pan,i=4778,x=0.3599347922656181,y=0.18218338698595427 -a=eks,b=pan,i=4780,x=0.5515560102138437,y=0.9790752715442088 -a=pan,b=zee,i=4781,x=0.9530344417320495,y=0.5854254757860599 -a=zee,b=hat,i=4783,x=0.8937130637825316,y=0.9482001237924185 -a=eks,b=zee,i=4784,x=0.535394341606814,y=0.9507496372757723 -a=hat,b=pan,i=4785,x=0.6905839897107999,y=0.7545488329990303 -a=hat,b=wye,i=4786,x=0.01916979841839017,y=0.2780999914884037 -a=hat,b=zee,i=4787,x=0.9707632375104736,y=0.823966840635361 -a=zee,b=eks,i=4788,x=0.2900344019459282,y=0.4551744845405584 -a=eks,b=zee,i=4789,x=0.581964402755552,y=0.6562137540702333 -a=eks,b=wye,i=4790,x=0.5159650104250221,y=0.6583847382580487 -a=pan,b=pan,i=4791,x=0.4314747391635376,y=0.11719605119566623 -a=pan,b=wye,i=4793,x=0.8596672453072937,y=0.7203822316562272 -a=zee,b=pan,i=4794,x=0.41119242720559135,y=0.16288056185655064 -a=hat,b=wye,i=4797,x=0.6239839123252174,y=0.5446595433698003 -a=pan,b=wye,i=4798,x=0.5914484609361321,y=0.5863799669381212 -a=hat,b=wye,i=4800,x=0.7975814555638998,y=0.6742547886299404 -a=eks,b=zee,i=4801,x=0.32122401484315466,y=0.17580532480506172 -a=eks,b=eks,i=4803,x=0.07646493070387805,y=0.43572994178375957 -a=hat,b=pan,i=4805,x=0.2078967635625505,y=0.39646961279273085 -a=zee,b=wye,i=4807,x=0.5734922188510542,y=0.9110138243945486 -a=wye,b=wye,i=4808,x=0.5888053656056721,y=0.6357658487621642 -a=hat,b=wye,i=4809,x=0.9209565722669064,y=0.6387306072748612 -a=eks,b=hat,i=4810,x=0.5922647221870971,y=0.8442189902394986 -a=wye,b=wye,i=4812,x=0.6090893281675697,y=0.647518662887554 -a=zee,b=eks,i=4815,x=0.23445194234627598,y=0.26893786383591456 -a=zee,b=zee,i=4817,x=0.23202362739606153,y=0.47886038007736564 -a=eks,b=zee,i=4819,x=0.712974515799127,y=0.542449640039289 -a=eks,b=pan,i=4821,x=0.09797648760110378,y=0.1605809921671595 -a=wye,b=hat,i=4823,x=0.581757236497391,y=0.9463973717007303 -a=hat,b=hat,i=4824,x=0.40413977500334364,y=0.08865258409882204 -a=wye,b=hat,i=4825,x=0.7001704003542419,y=0.7416812627335253 -a=zee,b=wye,i=4826,x=0.8846834351985541,y=0.9987381458494847 -a=wye,b=zee,i=4827,x=0.9763864041558291,y=0.6651833167661081 -a=pan,b=pan,i=4831,x=0.6131916476098028,y=0.7258426490475796 -a=pan,b=pan,i=4832,x=0.6315103295350951,y=0.5044543655861339 -a=wye,b=pan,i=4836,x=0.569545208750187,y=0.7786619129324108 -a=zee,b=wye,i=4837,x=0.5226423611496498,y=0.9996700213544367 -a=eks,b=hat,i=4838,x=0.935982420664342,y=0.8799965660826473 -a=pan,b=zee,i=4845,x=0.28060256724829724,y=0.1194472053493133 -a=eks,b=eks,i=4850,x=0.2525590429487127,y=0.36945113778662786 -a=hat,b=eks,i=4851,x=0.5131509545709081,y=0.583688721156048 -a=wye,b=eks,i=4855,x=0.8743253482906079,y=0.7740900498864154 -a=pan,b=wye,i=4857,x=0.23806525172795734,y=0.2959143584631805 -a=pan,b=pan,i=4858,x=0.9189791410736298,y=0.7770463990190287 -a=zee,b=eks,i=4860,x=0.3338609486281813,y=0.3484284682131591 -a=zee,b=hat,i=4861,x=0.13328569444496707,y=0.4177841139240035 -a=zee,b=eks,i=4862,x=0.48622017397025397,y=0.07896067004609653 -a=wye,b=pan,i=4864,x=0.29934656970455364,y=0.401161898451611 -a=wye,b=hat,i=4865,x=0.33964644206576833,y=0.37831409639409463 -a=pan,b=hat,i=4866,x=0.3348192796730043,y=0.39422602502766824 -a=hat,b=zee,i=4867,x=0.8800967275591628,y=0.869121595376977 -a=zee,b=zee,i=4870,x=0.5723345813434529,y=0.5920424414132134 -a=pan,b=zee,i=4875,x=0.6013577540137748,y=0.636284103659697 -a=wye,b=hat,i=4877,x=0.3699653574585806,y=0.4481319838637625 -a=eks,b=zee,i=4878,x=0.8140883903787601,y=0.9675148391636573 -a=eks,b=eks,i=4879,x=0.8227355186912324,y=0.754836723664535 -a=eks,b=wye,i=4882,x=0.5564517747676477,y=0.8364351449356273 -a=eks,b=eks,i=4885,x=0.8707313650863101,y=0.8057609437403466 -a=wye,b=pan,i=4888,x=0.24417888243946928,y=0.4591742086366801 -a=eks,b=wye,i=4890,x=0.04910880060108913,y=0.07316217290218352 -a=wye,b=eks,i=4894,x=0.08956997835221292,y=0.15153433659257443 -a=wye,b=eks,i=4895,x=0.2302595629324965,y=0.2862207000255006 -a=eks,b=eks,i=4896,x=0.595542985856601,y=0.6247689899970194 -a=zee,b=eks,i=4897,x=0.7608028013428353,y=0.878174748817996 -a=eks,b=zee,i=4899,x=0.1567102404262226,y=0.2213311716892986 -a=hat,b=hat,i=4900,x=0.8901137791212611,y=0.6090349204378238 -a=zee,b=pan,i=4902,x=0.699059960351012,y=0.9885800960251768 -a=hat,b=wye,i=4904,x=0.30857036671389493,y=0.21668637382948186 -a=hat,b=pan,i=4905,x=0.6411579594900462,y=0.5351923498013205 -a=eks,b=pan,i=4906,x=0.6854190139070013,y=0.8299360694533708 -a=pan,b=hat,i=4907,x=0.5936171298524064,y=0.7041056598923683 -a=hat,b=eks,i=4908,x=0.8503470988840566,y=0.6331693431984986 -a=pan,b=wye,i=4911,x=0.4369913287175713,y=0.4720871164245992 -a=zee,b=wye,i=4913,x=0.7975684270658338,y=0.6973895935548693 -a=zee,b=wye,i=4916,x=0.6624686517748942,y=0.8016741542650369 -a=zee,b=zee,i=4918,x=0.641375026211945,y=0.8347424300045329 -a=wye,b=eks,i=4919,x=0.22099244372718618,y=0.4659468290849962 -a=hat,b=hat,i=4921,x=0.5785465847836638,y=0.6908978810578349 -a=hat,b=pan,i=4924,x=0.40224441655955634,y=0.19530268026233755 -a=hat,b=hat,i=4925,x=0.653842164262253,y=0.6280602144296272 -a=eks,b=hat,i=4926,x=0.5370983012158481,y=0.8265755341115193 -a=pan,b=hat,i=4927,x=0.20003498013779974,y=0.33067633213900816 -a=zee,b=wye,i=4929,x=0.6597792701685063,y=0.5747306201637469 -a=wye,b=zee,i=4930,x=0.7005469670714589,y=0.8590565664901815 -a=eks,b=wye,i=4931,x=0.056783946256193096,y=0.13845635335075446 -a=zee,b=hat,i=4932,x=0.17914823686110226,y=0.3724424181901871 -a=wye,b=eks,i=4933,x=0.35047905702830917,y=0.03585739880658767 -a=pan,b=pan,i=4936,x=0.2268254080621852,y=0.4964858179117778 -a=pan,b=wye,i=4941,x=0.684790210390548,y=0.9744745064587994 -a=pan,b=pan,i=4943,x=0.27521613107535237,y=0.035785181333226945 -a=hat,b=pan,i=4945,x=0.28514048743680753,y=0.07363097335604496 -a=wye,b=hat,i=4948,x=0.31710176239516497,y=0.2704638711875881 -a=hat,b=hat,i=4949,x=0.7395993281771386,y=0.5735970605731027 -a=zee,b=eks,i=4952,x=0.3969923775629448,y=0.22024693929882533 -a=hat,b=eks,i=4953,x=0.5154408810016854,y=0.7038009086382059 -a=wye,b=hat,i=4955,x=0.8340489175824841,y=0.6288838568483295 -a=eks,b=zee,i=4956,x=0.7811008985162822,y=0.8018574276178609 -a=hat,b=pan,i=4958,x=0.32954001616237283,y=0.13809011794903436 -a=hat,b=wye,i=4959,x=0.3753128948010216,y=0.47542625730960586 -a=zee,b=hat,i=4965,x=0.45139611357151777,y=0.38795035866424066 -a=wye,b=hat,i=4967,x=0.24118009132354112,y=0.1629785769528157 -a=hat,b=wye,i=4968,x=0.04728174638088167,y=0.24887900862466006 -a=zee,b=pan,i=4972,x=0.8445417535581274,y=0.5401648117511082 -a=hat,b=wye,i=4977,x=0.346394513794262,y=0.29350246124167567 -a=pan,b=wye,i=4978,x=0.5095513696287198,y=0.6796749104642862 -a=eks,b=hat,i=4981,x=0.6239763460715818,y=0.5785443365814726 -a=wye,b=pan,i=4985,x=0.7439428126731077,y=0.9235490434329954 -a=zee,b=zee,i=4986,x=0.8301353367964757,y=0.8649908229299215 -a=hat,b=pan,i=4987,x=0.7155127400138539,y=0.725960059877104 -a=pan,b=zee,i=4990,x=0.6245117285311684,y=0.5893294863439663 -a=pan,b=eks,i=4992,x=0.30073741634815365,y=0.27875382911011104 -a=pan,b=hat,i=4998,x=0.9535726959631937,y=0.8197092073820271 -a=hat,b=hat,i=4999,x=0.20718170417583293,y=0.15443490334276233 -a=eks,b=eks,i=5000,x=0.5474103987606213,y=0.8639022623566207 -a=zee,b=wye,i=5001,x=0.08843009472207297,y=0.14945328753720988 -a=wye,b=zee,i=5002,x=0.11843248048480792,y=0.10564749120283823 -a=pan,b=pan,i=5003,x=0.4789366550469353,y=0.22717511611934216 -a=eks,b=wye,i=5004,x=0.47636937977487326,y=0.2810082791040678 -a=pan,b=wye,i=5005,x=0.6626206294858628,y=0.9073394670955045 -a=eks,b=pan,i=5014,x=0.7386573050111648,y=0.9236218998819093 -a=zee,b=zee,i=5017,x=0.5038628336682738,y=0.6629947699756096 -a=pan,b=hat,i=5018,x=0.888380448419866,y=0.9524601673710467 -a=hat,b=pan,i=5019,x=0.33990101411005635,y=0.4348664315239562 -a=zee,b=wye,i=5020,x=0.3672167922652847,y=0.3368467808484725 -a=wye,b=zee,i=5021,x=0.07663456505244592,y=0.2631577836245168 -a=hat,b=wye,i=5023,x=0.7884614415246883,y=0.7586781551216389 -a=pan,b=hat,i=5024,x=0.20846872150137863,y=0.2990773668794384 -a=eks,b=eks,i=5026,x=0.12876049793274924,y=0.15585641140542594 -a=eks,b=zee,i=5028,x=0.35386542107386076,y=0.37117012291309726 -a=eks,b=zee,i=5029,x=0.6649005742152306,y=0.968640074749029 -a=pan,b=eks,i=5031,x=0.6958326538393494,y=0.8708243653761277 -a=eks,b=hat,i=5032,x=0.2945439456101079,y=0.15728143751762003 -a=zee,b=pan,i=5033,x=0.974924650628186,y=0.9669570839581866 -a=zee,b=zee,i=5034,x=0.9203642855427807,y=0.5206651807226769 -a=eks,b=wye,i=5035,x=0.7880820779075502,y=0.7490003085045434 -a=pan,b=eks,i=5036,x=0.6669037309103186,y=0.7852898502819553 -a=zee,b=wye,i=5040,x=0.8804560258917605,y=0.5859741175246163 -a=wye,b=eks,i=5044,x=0.944933980409295,y=0.7127158343146003 -a=pan,b=zee,i=5048,x=0.7380043154543273,y=0.6241669393170018 -a=hat,b=hat,i=5053,x=0.023117725750200657,y=0.033915988824823384 -a=zee,b=pan,i=5054,x=0.32314928212370087,y=0.05688167384675946 -a=wye,b=wye,i=5055,x=0.3342612127307919,y=0.42233407978529247 -a=zee,b=zee,i=5059,x=0.11722281926454714,y=0.4784698788530096 -a=hat,b=hat,i=5061,x=0.8982925202936236,y=0.5153152768869278 -a=eks,b=hat,i=5064,x=0.11826065449979817,y=0.44361936119890544 -a=eks,b=pan,i=5065,x=0.16113803077069544,y=0.1931224993069398 -a=pan,b=zee,i=5066,x=0.160970845859988,y=0.3653498317855951 -a=zee,b=zee,i=5068,x=0.513447706607767,y=0.9552034872186853 -a=zee,b=zee,i=5070,x=0.3974043085931761,y=0.04564461949638321 -a=zee,b=wye,i=5071,x=0.8135506068560597,y=0.9608362809012473 -a=eks,b=wye,i=5073,x=0.6147484385420419,y=0.5363878643299302 -a=pan,b=eks,i=5074,x=0.5845946846241253,y=0.6243144568720979 -a=pan,b=eks,i=5075,x=0.06225295939318909,y=0.47296164563217147 -a=wye,b=eks,i=5077,x=0.231763398457011,y=0.29533799083169177 -a=eks,b=wye,i=5079,x=0.4620414482111399,y=0.10454449264714505 -a=eks,b=pan,i=5080,x=0.4154239126338921,y=0.1558721394610474 -a=wye,b=pan,i=5083,x=0.598195485668647,y=0.7711986200741965 -a=pan,b=eks,i=5085,x=0.6467927352142951,y=0.6809546997794357 -a=zee,b=zee,i=5087,x=0.10493923293046115,y=0.4813239698030355 -a=eks,b=pan,i=5092,x=0.14584747968792888,y=0.19250348835022613 -a=pan,b=zee,i=5095,x=0.12743414057293911,y=0.3674063708637675 -a=eks,b=wye,i=5097,x=0.33724586909672605,y=0.2808209264792111 -a=zee,b=pan,i=5098,x=0.5191394718493332,y=0.6948029406893036 -a=pan,b=eks,i=5099,x=0.4686142873190169,y=0.47194949482921567 -a=eks,b=hat,i=5101,x=0.05611052621758694,y=0.14551172850676686 -a=zee,b=hat,i=5104,x=0.12383004586365431,y=0.25661110382216856 -a=pan,b=wye,i=5106,x=0.44560649854859324,y=0.44398213053605406 -a=pan,b=eks,i=5107,x=0.2991869218909077,y=0.4855377015585889 -a=pan,b=zee,i=5108,x=0.8696312098499749,y=0.9234420344814674 -a=eks,b=wye,i=5110,x=0.055715443104116136,y=0.4615507678180293 -a=wye,b=hat,i=5111,x=0.14260896559625547,y=0.2842155054761949 -a=eks,b=hat,i=5112,x=0.868450337333343,y=0.8706206691563101 -a=pan,b=hat,i=5116,x=0.8762799268435709,y=0.9446805166366606 -a=wye,b=pan,i=5119,x=0.4794067150556538,y=0.07923269424861734 -a=zee,b=pan,i=5123,x=0.6515686983034052,y=0.5100953103470156 -a=zee,b=zee,i=5129,x=0.12609531649583638,y=0.44052343410884454 -a=zee,b=pan,i=5132,x=0.33080234532260044,y=0.3096178521788119 -a=zee,b=wye,i=5134,x=0.2827895360020647,y=0.2448957006369109 -a=wye,b=eks,i=5136,x=0.4056324583379335,y=0.08334576336977417 -a=hat,b=eks,i=5137,x=0.878238719282208,y=0.6491135241981707 -a=wye,b=hat,i=5138,x=0.06783170016557316,y=0.4197736525433723 -a=hat,b=pan,i=5140,x=0.3051559696668491,y=0.06338171371155699 -a=hat,b=pan,i=5141,x=0.24126630734948107,y=0.3415400162111678 -a=zee,b=zee,i=5142,x=0.5053797938498257,y=0.6943665465448414 -a=pan,b=wye,i=5143,x=0.2455006451228895,y=0.2381483502091848 -a=pan,b=eks,i=5147,x=0.20821590282748392,y=0.05180957502134165 -a=hat,b=hat,i=5150,x=0.5204676158996879,y=0.7837983020069176 -a=eks,b=zee,i=5153,x=0.5599128818778365,y=0.6217154146552438 -a=zee,b=pan,i=5157,x=0.7088889371664757,y=0.5291365868969226 -a=wye,b=wye,i=5158,x=0.03780907803981348,y=0.01743012834128732 -a=zee,b=pan,i=5160,x=0.1291394701733155,y=0.3164888119812437 -a=eks,b=zee,i=5161,x=0.7070972450015776,y=0.8576144505983694 -a=pan,b=wye,i=5162,x=0.23503083628119015,y=0.3804966968759753 -a=zee,b=eks,i=5164,x=0.817955788881543,y=0.5354324301609987 -a=zee,b=hat,i=5167,x=0.01949832966304421,y=0.44975230900638874 -a=hat,b=eks,i=5172,x=0.8901432458076336,y=0.5906289428469621 -a=pan,b=hat,i=5176,x=0.13951096415676212,y=0.37397816099478665 -a=pan,b=wye,i=5179,x=0.5722581464790939,y=0.6082504729241017 -a=pan,b=zee,i=5182,x=0.5458504348562845,y=0.5606252991061377 -a=wye,b=hat,i=5183,x=0.7217910708545336,y=0.698686710480415 -a=pan,b=zee,i=5190,x=0.958030425108842,y=0.9229656805294295 -a=pan,b=wye,i=5191,x=0.34032539138935425,y=0.4003903325198842 -a=hat,b=pan,i=5192,x=0.3435706571010647,y=0.06283363667654052 -a=eks,b=eks,i=5194,x=0.9601222966912384,y=0.7746495793923044 -a=pan,b=hat,i=5195,x=0.5165119272913388,y=0.8970096684776827 -a=hat,b=eks,i=5197,x=0.5268012119318143,y=0.9704796636500256 -a=pan,b=pan,i=5198,x=0.5788360834761852,y=0.9163631840503775 -a=zee,b=pan,i=5199,x=0.863846165540519,y=0.7926861461485262 -a=hat,b=pan,i=5201,x=0.13550559685784802,y=0.23666447032870253 -a=hat,b=pan,i=5202,x=0.9333837848637749,y=0.7983610377673229 -a=pan,b=zee,i=5203,x=0.8164395473206716,y=0.9295267627751691 -a=hat,b=eks,i=5204,x=0.09343575555554806,y=0.30344155652002347 -a=zee,b=hat,i=5205,x=0.28240510221521764,y=0.2545255694003048 -a=zee,b=pan,i=5206,x=0.3994083205887524,y=0.07213558504539785 -a=pan,b=zee,i=5207,x=0.5698284352568362,y=0.5897809603851609 -a=zee,b=zee,i=5208,x=0.3216207044318503,y=0.038820482913941357 -a=pan,b=wye,i=5209,x=0.8306447997004499,y=0.8384123743007208 -a=eks,b=wye,i=5214,x=0.6175594035658841,y=0.9608217208353017 -a=hat,b=eks,i=5215,x=0.28256241866196097,y=0.265704893607123 -a=hat,b=zee,i=5216,x=0.8249008956837504,y=0.7862378134305688 -a=hat,b=pan,i=5217,x=0.4700457200943312,y=0.005846894154671878 -a=eks,b=hat,i=5218,x=0.7091734686647354,y=0.9683424620144252 -a=hat,b=hat,i=5221,x=0.6804959880554192,y=0.5106473873198336 -a=pan,b=pan,i=5227,x=0.04907194450053376,y=0.24371127321212294 -a=eks,b=hat,i=5228,x=0.08589819615072136,y=0.1928776399714467 -a=eks,b=hat,i=5229,x=0.5280780018220216,y=0.850193621850258 -a=zee,b=hat,i=5233,x=0.7794106496174618,y=0.950428895380262 -a=hat,b=zee,i=5235,x=0.5349332160444686,y=0.7212892273015341 -a=zee,b=eks,i=5236,x=0.0096091347524081,y=0.05157241835503623 -a=pan,b=wye,i=5237,x=0.29264897203906315,y=0.2708942584778229 -a=zee,b=hat,i=5239,x=0.10804287516531197,y=0.25028720143889427 -a=pan,b=zee,i=5240,x=0.038521217586762524,y=0.45833782252961597 -a=wye,b=eks,i=5244,x=0.4410158520384003,y=0.08878204317661487 -a=hat,b=wye,i=5245,x=0.30542326696649835,y=0.03254190401750867 -a=wye,b=wye,i=5246,x=0.2619681126430232,y=0.2649618519422796 -a=zee,b=hat,i=5251,x=0.6787637703297714,y=0.8107713369785818 -a=zee,b=eks,i=5255,x=0.5847457461108924,y=0.8796125841387396 -a=hat,b=zee,i=5256,x=0.5958859328721237,y=0.5394313157526304 -a=eks,b=zee,i=5257,x=0.6145812801413588,y=0.8667435600565327 -a=eks,b=zee,i=5262,x=0.6748387970430342,y=0.9842159808803176 -a=eks,b=eks,i=5265,x=0.178487009198119,y=0.3389965086336105 -a=hat,b=pan,i=5267,x=0.14941018319657196,y=0.42913266234393854 -a=wye,b=wye,i=5268,x=0.44618372032109543,y=0.19531077190155655 -a=hat,b=zee,i=5271,x=0.8731584572028818,y=0.8587026343639556 -a=hat,b=pan,i=5273,x=0.6161173798530847,y=0.5170002336730243 -a=wye,b=wye,i=5274,x=0.9836997370643351,y=0.9073574715868198 -a=zee,b=zee,i=5275,x=0.9271419947755198,y=0.7499953605856078 -a=eks,b=zee,i=5276,x=0.4436574016008654,y=0.11521473164364193 -a=hat,b=zee,i=5278,x=0.6303081078068822,y=0.9708543000113369 -a=eks,b=hat,i=5279,x=0.7724785778741878,y=0.8749355527936072 -a=zee,b=pan,i=5280,x=0.019491215186811517,y=0.28573440717823495 -a=hat,b=hat,i=5281,x=0.8966308328410811,y=0.8932890927799828 -a=pan,b=pan,i=5284,x=0.06808879127275447,y=0.2961369332523437 -a=hat,b=pan,i=5285,x=0.07045589395497931,y=0.06411882838638927 -a=zee,b=pan,i=5286,x=0.5025476621481306,y=0.5455719768538321 -a=eks,b=wye,i=5288,x=0.9345047793469049,y=0.7545355491792637 -a=eks,b=zee,i=5289,x=0.09683817897484082,y=0.15042392025928608 -a=hat,b=zee,i=5290,x=0.2201144900883092,y=0.09304236894658524 -a=pan,b=zee,i=5291,x=0.6437086955209985,y=0.6412853324081308 -a=pan,b=pan,i=5292,x=0.7101999657039595,y=0.9654389825167757 -a=zee,b=pan,i=5293,x=0.44434019344510023,y=0.3616886405725528 -a=hat,b=hat,i=5294,x=0.4986619811254004,y=0.36527690926573364 -a=wye,b=zee,i=5295,x=0.6218618299228648,y=0.9324975302931531 -a=eks,b=eks,i=5297,x=0.450776715605552,y=0.31636578533096016 -a=pan,b=zee,i=5298,x=0.3086259636689451,y=0.06652636662046696 -a=hat,b=zee,i=5300,x=0.6065263542151584,y=0.8758808605345744 -a=wye,b=zee,i=5303,x=0.030537351078086195,y=0.20700838585535786 -a=wye,b=hat,i=5304,x=0.4745666526865788,y=0.3396776308478552 -a=wye,b=zee,i=5308,x=0.7500932442964064,y=0.552958619063383 -a=pan,b=zee,i=5309,x=0.2335642300224079,y=0.31164052398797637 -a=pan,b=eks,i=5310,x=0.15387236958406036,y=0.43829110359848433 -a=eks,b=wye,i=5313,x=0.0355425881526662,y=0.16802137840026887 -a=wye,b=pan,i=5316,x=0.31445904414804127,y=0.235006707754 -a=pan,b=pan,i=5320,x=0.9101265684004383,y=0.8101420365566193 -a=pan,b=hat,i=5321,x=0.7404633039474602,y=0.9639884498668673 -a=wye,b=hat,i=5323,x=0.4830324590268663,y=0.0404568640233397 -a=zee,b=pan,i=5325,x=0.888291122851125,y=0.5111470794632866 -a=wye,b=pan,i=5326,x=0.07272409700902271,y=0.27564484500916986 -a=hat,b=pan,i=5328,x=0.3064216274886523,y=0.4890201595898237 -a=pan,b=wye,i=5329,x=0.3470931183432189,y=0.1997795824920121 -a=zee,b=zee,i=5330,x=0.13436961326496677,y=0.3095854896519281 -a=zee,b=pan,i=5331,x=0.8655317519954471,y=0.8104322805331614 -a=wye,b=wye,i=5333,x=0.41853514055951446,y=0.46414849053819973 -a=hat,b=wye,i=5335,x=0.8146576023607562,y=0.517623963255214 -a=wye,b=eks,i=5338,x=0.9183687166177615,y=0.6742918022088258 -a=eks,b=zee,i=5339,x=0.6913946457851302,y=0.5236074895779744 -a=pan,b=pan,i=5341,x=0.9609080490571219,y=0.764751472995584 -a=hat,b=hat,i=5342,x=0.9571224566918112,y=0.6488786174457046 -a=eks,b=zee,i=5343,x=0.1297439418853782,y=0.10986446330230937 -a=wye,b=pan,i=5344,x=0.2265442713227983,y=0.08671233554174995 -a=zee,b=eks,i=5345,x=0.6690807314571691,y=0.5220733222869928 -a=wye,b=zee,i=5346,x=0.42279438877482367,y=0.1357326426861194 -a=eks,b=hat,i=5348,x=0.9402905188032046,y=0.6899005608656246 -a=pan,b=zee,i=5351,x=0.17054432883772475,y=0.3754155013143816 -a=pan,b=hat,i=5352,x=0.577021048756712,y=0.8658764185620885 -a=zee,b=pan,i=5354,x=0.8138458432489908,y=0.887184873534984 -a=hat,b=zee,i=5355,x=0.4409314249173867,y=0.16661996267618873 -a=zee,b=wye,i=5356,x=0.9294777278187871,y=0.9218221729540071 -a=wye,b=eks,i=5361,x=0.8752567055200561,y=0.9860616183578573 -a=eks,b=eks,i=5364,x=0.27673456069026947,y=0.28606929907632006 -a=hat,b=hat,i=5366,x=0.2805736404470527,y=0.39685097136131187 -a=eks,b=hat,i=5367,x=0.506031079714652,y=0.9912645565514333 -a=pan,b=zee,i=5368,x=0.6865182575714622,y=0.8704513374052988 -a=wye,b=zee,i=5371,x=0.26330651984082165,y=0.312969179382553 -a=zee,b=zee,i=5372,x=0.5395637542263729,y=0.876693303664991 -a=hat,b=zee,i=5375,x=0.5150486678896874,y=0.5093614114895396 -a=hat,b=zee,i=5376,x=0.26087420592676525,y=0.45387940157532647 -a=zee,b=eks,i=5377,x=0.11113050876158048,y=0.019064162496037707 -a=zee,b=hat,i=5378,x=0.7356184687449835,y=0.5091161605127379 -a=wye,b=wye,i=5379,x=0.09703125778637067,y=0.25691589979049356 -a=zee,b=eks,i=5380,x=0.3345104910149367,y=0.1516506429745581 -a=wye,b=eks,i=5382,x=0.6188424819758455,y=0.5722334124286547 -a=eks,b=hat,i=5385,x=0.06854514347417606,y=0.028515802052052952 -a=eks,b=zee,i=5388,x=0.14459434374592373,y=0.42112443945304057 -a=pan,b=zee,i=5389,x=0.11816306719121206,y=0.17831615949339463 -a=zee,b=pan,i=5390,x=0.551475598918215,y=0.6565173979014076 -a=eks,b=wye,i=5394,x=0.6216628077513283,y=0.9763969655887303 -a=zee,b=wye,i=5395,x=0.8476101473277529,y=0.9881007277790081 -a=wye,b=eks,i=5398,x=0.36458407067281184,y=0.04100408848224302 -a=wye,b=wye,i=5399,x=0.733413532545851,y=0.6459898444733033 -a=pan,b=wye,i=5400,x=0.9665506125898256,y=0.5448152784578933 -a=zee,b=hat,i=5401,x=0.8543887956499512,y=0.7439702074332549 -a=hat,b=pan,i=5409,x=0.5633298053737792,y=0.7410429711654063 -a=pan,b=eks,i=5411,x=0.7262036914700832,y=0.9187345564266572 -a=zee,b=eks,i=5412,x=0.33286294808080064,y=0.3921681976941228 -a=wye,b=eks,i=5413,x=0.08772931753470603,y=0.48815297744510433 -a=eks,b=pan,i=5414,x=0.44377217382552636,y=0.13437156912545423 -a=eks,b=hat,i=5416,x=0.753762625636042,y=0.6313338577994543 -a=pan,b=hat,i=5417,x=0.20986095023321283,y=0.278888203103681 -a=hat,b=eks,i=5419,x=0.46399468430524804,y=0.0717886401624439 -a=wye,b=eks,i=5421,x=0.4608256396986088,y=0.18257443066884294 -a=hat,b=zee,i=5422,x=0.9062976974038087,y=0.825705654266679 -a=zee,b=pan,i=5424,x=0.2627796756491889,y=0.05131765835402935 -a=hat,b=eks,i=5427,x=0.06062699861257914,y=0.14515726494650738 -a=hat,b=eks,i=5429,x=0.3317119302689199,y=0.45073390665129454 -a=pan,b=hat,i=5430,x=0.16613227391144125,y=0.41913253603052736 -a=zee,b=eks,i=5431,x=0.5545698300075519,y=0.9624415304532793 -a=hat,b=zee,i=5433,x=0.7849062201991618,y=0.9640442210529644 -a=pan,b=wye,i=5434,x=0.027672040238877704,y=0.09364154641355082 -a=zee,b=hat,i=5435,x=0.4045108520910917,y=0.36431937644373535 -a=hat,b=zee,i=5436,x=0.9496952473063589,y=0.6756301296750051 -a=zee,b=hat,i=5437,x=0.5978983969671523,y=0.6276473499153709 -a=eks,b=hat,i=5439,x=0.38811572418657825,y=0.07594870509481821 -a=eks,b=hat,i=5441,x=0.5113055435442414,y=0.9478634662218888 -a=zee,b=pan,i=5443,x=0.2660546525494476,y=0.036573786936417774 -a=hat,b=wye,i=5449,x=0.05598891388977545,y=0.22520895137141883 -a=eks,b=hat,i=5451,x=0.22980925307219058,y=0.09539340024354548 -a=zee,b=zee,i=5453,x=0.08674939853988706,y=0.0016458788929679669 -a=wye,b=hat,i=5455,x=0.9223519005619959,y=0.9896263386831655 -a=eks,b=zee,i=5458,x=0.04287045703879866,y=0.3387484748791293 -a=pan,b=pan,i=5461,x=0.6162574043540692,y=0.8321486837007045 -a=zee,b=hat,i=5463,x=0.5986397200652216,y=0.6968533019592756 -a=wye,b=eks,i=5464,x=0.8847165179059643,y=0.8396671337239269 -a=pan,b=pan,i=5467,x=0.7658242784400351,y=0.6658002824538031 -a=eks,b=wye,i=5469,x=0.5573393787208576,y=0.5674857974105666 -a=zee,b=wye,i=5474,x=0.7147670868273149,y=0.5300588513631999 -a=hat,b=hat,i=5475,x=0.6079530363728716,y=0.7302013509128558 -a=eks,b=hat,i=5476,x=0.20009244252935454,y=0.3819915946964063 -a=eks,b=wye,i=5477,x=0.39259835612758154,y=0.30659538127782704 -a=hat,b=wye,i=5478,x=0.6770531656328236,y=0.6798247125178067 -a=wye,b=hat,i=5479,x=0.8464109156551775,y=0.5746477726666506 -a=zee,b=zee,i=5480,x=0.5016540167129663,y=0.8741956310027429 -a=wye,b=hat,i=5481,x=0.6695686221456726,y=0.689441485231751 -a=zee,b=zee,i=5482,x=0.6069552630891367,y=0.8327367055952278 -a=zee,b=wye,i=5486,x=0.3960740290371987,y=0.2157291640948238 -a=wye,b=wye,i=5488,x=0.3501090213998701,y=0.1419133192803893 -a=wye,b=hat,i=5490,x=0.0114773666847795,y=0.024645492270649272 -a=pan,b=eks,i=5491,x=0.37445278083566247,y=0.1319415773692295 -a=hat,b=wye,i=5493,x=0.1382138485389508,y=0.42533800225303686 -a=zee,b=pan,i=5494,x=0.8834013775449513,y=0.532739443419528 -a=hat,b=pan,i=5495,x=0.06870299529036838,y=0.16955231705247786 -a=pan,b=eks,i=5496,x=0.7348263636816107,y=0.8630644835981002 -a=pan,b=wye,i=5497,x=0.18130548510310573,y=0.012524267398086986 -a=eks,b=wye,i=5499,x=0.12579070445810636,y=0.027946488029312544 -a=zee,b=hat,i=5500,x=0.31461267260641923,y=0.0748646953586749 -a=eks,b=pan,i=5501,x=0.6387163017917407,y=0.9935696733123411 -a=zee,b=wye,i=5502,x=0.43904419266704897,y=0.4569132922221508 -a=eks,b=pan,i=5507,x=0.21391759502009422,y=0.3447041692322321 -a=eks,b=wye,i=5512,x=0.5807870919230165,y=0.9691165477002429 -a=pan,b=pan,i=5513,x=0.12503735272775673,y=0.4355589149955563 -a=pan,b=eks,i=5514,x=0.24662547688833314,y=0.3287438663802673 -a=zee,b=pan,i=5515,x=0.6313995187707404,y=0.833564271162547 -a=pan,b=pan,i=5520,x=0.12004377059603999,y=0.17842342731389704 -a=wye,b=wye,i=5521,x=0.4952080825177475,y=0.16871841358834394 -a=zee,b=pan,i=5522,x=0.36872049705368115,y=0.1990766711673171 -a=pan,b=wye,i=5523,x=0.742045965934904,y=0.9721895926892108 -a=eks,b=zee,i=5524,x=0.8701165441999673,y=0.5339961636745024 -a=wye,b=pan,i=5525,x=0.49890360517452514,y=0.024484853806581164 -a=pan,b=eks,i=5526,x=0.7026312260362405,y=0.8810518289214107 -a=hat,b=eks,i=5530,x=0.5258934621583872,y=0.720463955146462 -a=zee,b=eks,i=5531,x=0.35366192891288517,y=0.08693096089863839 -a=pan,b=hat,i=5534,x=0.0019016743345633413,y=0.32222113968267996 -a=hat,b=wye,i=5535,x=0.4214775778712955,y=0.22796016352171378 -a=zee,b=eks,i=5537,x=0.5232208554018066,y=0.7842118697965217 -a=hat,b=eks,i=5538,x=0.4077121389029271,y=0.11707098355780121 -a=wye,b=wye,i=5539,x=0.743441288773323,y=0.6405109845442226 -a=hat,b=hat,i=5540,x=0.42899567587485843,y=0.23687426121264998 -a=hat,b=wye,i=5545,x=0.858697605273768,y=0.8576653967219389 -a=eks,b=pan,i=5548,x=0.3627382468806156,y=0.0796990614162374 -a=zee,b=eks,i=5549,x=0.7292096702579594,y=0.9691771087568819 -a=eks,b=eks,i=5550,x=0.6327683854211364,y=0.6420822760549295 -a=hat,b=zee,i=5553,x=0.5166466940884901,y=0.5215576515640856 -a=wye,b=zee,i=5555,x=0.8156182188735165,y=0.7385240536968077 -a=hat,b=pan,i=5558,x=0.768872222650759,y=0.7571069129173444 -a=zee,b=zee,i=5561,x=0.19901052822038778,y=0.010162787621391778 -a=zee,b=zee,i=5562,x=0.010968218584134437,y=0.4064143237134189 -a=eks,b=zee,i=5566,x=0.8548967678474122,y=0.570131787889301 -a=pan,b=eks,i=5570,x=0.6920854194235941,y=0.6152462479121356 -a=pan,b=pan,i=5573,x=0.4439499129311816,y=0.452364734358081 -a=wye,b=wye,i=5575,x=0.21178209452449626,y=0.15235066856869428 -a=pan,b=hat,i=5576,x=0.2328237068625838,y=0.1466943672149028 -a=wye,b=eks,i=5577,x=0.1463637145507638,y=0.27512353058563355 -a=eks,b=pan,i=5588,x=0.47849756747842254,y=0.36440498978427904 -a=hat,b=eks,i=5590,x=0.3632486395529805,y=0.009397590758849828 -a=pan,b=pan,i=5592,x=0.39375784368183886,y=0.04590683905804471 -a=wye,b=eks,i=5594,x=0.748874819175722,y=0.5391318034694991 -a=wye,b=zee,i=5595,x=0.14037849467735208,y=0.17046690443866652 -a=eks,b=zee,i=5598,x=0.2962037835362923,y=0.36049737941380366 -a=zee,b=pan,i=5600,x=0.6488288447142824,y=0.8870043471299166 -a=pan,b=eks,i=5603,x=0.713998278452672,y=0.6065522135018214 -a=eks,b=pan,i=5604,x=0.9495183550398497,y=0.861843219886308 -a=pan,b=zee,i=5606,x=0.314494599736428,y=0.24386090680148387 -a=wye,b=pan,i=5610,x=0.3513354907140842,y=0.23568099743397186 -a=eks,b=wye,i=5611,x=0.5581667554162788,y=0.533651422581368 -a=zee,b=hat,i=5615,x=0.3921043983626502,y=0.12859994269629937 -a=hat,b=hat,i=5616,x=0.12215970633938278,y=0.3357015949156391 -a=hat,b=pan,i=5617,x=0.1867388485013709,y=0.11120997350204453 -a=wye,b=zee,i=5620,x=0.8136012361181053,y=0.9246893690807032 -a=zee,b=eks,i=5621,x=0.6936065900415402,y=0.9835121994811427 -a=hat,b=hat,i=5623,x=0.7847006863046383,y=0.9540584320255103 -a=wye,b=zee,i=5624,x=0.6715918738207972,y=0.9248713771595384 -a=hat,b=wye,i=5625,x=0.3458684025425872,y=0.27012900303390197 -a=eks,b=zee,i=5627,x=0.8021710394665355,y=0.8677575901404581 -a=hat,b=pan,i=5630,x=0.6751229005765216,y=0.5680107534137527 -a=pan,b=hat,i=5631,x=0.6215515202465142,y=0.7335723775728186 -a=pan,b=hat,i=5635,x=0.7276807776942956,y=0.8500606585761793 -a=eks,b=pan,i=5637,x=0.19782280979787448,y=0.16113009983532756 -a=wye,b=eks,i=5638,x=0.6640345835133702,y=0.6498713803920758 -a=hat,b=hat,i=5639,x=0.20821268257622816,y=0.4305417007597995 -a=pan,b=eks,i=5641,x=0.7319972100987417,y=0.719616216404303 -a=eks,b=wye,i=5644,x=0.3698151588984483,y=0.17106212044489788 -a=eks,b=hat,i=5645,x=0.7963153151177051,y=0.8008422439449929 -a=pan,b=eks,i=5646,x=0.19219529269095814,y=0.20998226328210212 -a=pan,b=zee,i=5649,x=0.1882750077103732,y=0.051490445358029824 -a=zee,b=pan,i=5651,x=0.7900065659824048,y=0.8799973980821687 -a=pan,b=eks,i=5654,x=0.4277856265977521,y=0.46720306495008457 -a=pan,b=wye,i=5655,x=0.6238246026482904,y=0.5005719727517985 -a=pan,b=zee,i=5657,x=0.10798159915883232,y=0.14419721657117324 -a=wye,b=zee,i=5658,x=0.6608918667457152,y=0.9243582421976495 -a=eks,b=wye,i=5659,x=0.6991477488632273,y=0.757988136039786 -a=eks,b=eks,i=5660,x=0.6338110809908714,y=0.8899492379893515 -a=zee,b=zee,i=5664,x=0.9028085500044974,y=0.6560744841877679 -a=eks,b=wye,i=5666,x=0.11819158774260774,y=0.3269446466483843 -a=hat,b=pan,i=5667,x=0.4124388603109588,y=0.32891147928157505 -a=hat,b=hat,i=5668,x=0.28048754020684197,y=0.1586304642802714 -a=eks,b=pan,i=5672,x=0.15818268756400555,y=0.06017126006059004 -a=hat,b=eks,i=5675,x=0.6776164025070541,y=0.8270479553259737 -a=hat,b=hat,i=5676,x=0.26316020747343927,y=0.4439406464012029 -a=wye,b=eks,i=5678,x=0.6936453571596785,y=0.5977687990521104 -a=zee,b=wye,i=5679,x=0.038384056804088296,y=0.39062169520305345 -a=pan,b=eks,i=5684,x=0.5990374956703001,y=0.759556440814025 -a=eks,b=wye,i=5685,x=0.2272695825818456,y=0.06890003755302965 -a=pan,b=eks,i=5687,x=0.20540821693039724,y=0.4583791378818265 -a=eks,b=eks,i=5688,x=0.2681427485140152,y=0.4723384743843706 -a=pan,b=pan,i=5690,x=0.15932061131003383,y=0.10750760915363755 -a=pan,b=wye,i=5691,x=0.6927406446662911,y=0.9484436166272129 -a=hat,b=hat,i=5692,x=0.5189985771163975,y=0.8788751540883317 -a=eks,b=eks,i=5693,x=0.2268536055075211,y=0.07181079334560747 -a=zee,b=pan,i=5695,x=0.9393222489267224,y=0.774430899802153 -a=pan,b=eks,i=5697,x=0.0327219679391374,y=0.09248968708796146 -a=eks,b=eks,i=5702,x=0.25289706880351914,y=0.2805563313790924 -a=hat,b=pan,i=5703,x=0.72917739071484,y=0.690903665960745 -a=zee,b=wye,i=5704,x=0.5782219259637615,y=0.6129742019787713 -a=hat,b=zee,i=5705,x=0.04579072787896754,y=0.15799336306835265 -a=hat,b=hat,i=5708,x=0.5348701164177605,y=0.871699930863178 -a=zee,b=pan,i=5709,x=0.6457903828308892,y=0.9224142093441036 -a=wye,b=zee,i=5710,x=0.7433946942246273,y=0.7685021078153906 -a=hat,b=eks,i=5712,x=0.6655721179929885,y=0.6283331080904476 -a=eks,b=eks,i=5713,x=0.5690397938907296,y=0.9770357412029763 -a=wye,b=zee,i=5714,x=0.08482160064983257,y=0.03799417629580293 -a=eks,b=hat,i=5716,x=0.21238778822910676,y=0.3806052020082521 -a=wye,b=pan,i=5719,x=0.5431877225362253,y=0.8355498406808398 -a=eks,b=pan,i=5720,x=0.08305185712441976,y=0.051555598682940684 -a=zee,b=hat,i=5721,x=0.2195036864656421,y=0.0024237944219759333 -a=eks,b=zee,i=5723,x=0.21507165298767472,y=0.3682335327240591 -a=eks,b=eks,i=5725,x=0.9447207896646325,y=0.5966728037991648 -a=wye,b=zee,i=5727,x=0.8249759724947993,y=0.8786053736989866 -a=wye,b=pan,i=5728,x=0.2648916398523009,y=0.36807949569468823 -a=wye,b=zee,i=5729,x=0.38861160385421634,y=0.008675492900147463 -a=eks,b=zee,i=5730,x=0.12149239438427939,y=0.4952581794297195 -a=hat,b=wye,i=5731,x=0.9834987933267317,y=0.9382393032643578 -a=hat,b=wye,i=5732,x=0.5015349091062511,y=0.6216857441435001 -a=eks,b=pan,i=5733,x=0.13872819430672179,y=0.13383706933234074 -a=eks,b=eks,i=5737,x=0.9827804718012476,y=0.8380939985179561 -a=wye,b=hat,i=5738,x=0.8055154582345196,y=0.6724553306516827 -a=eks,b=wye,i=5740,x=0.06533958654376182,y=0.08290954242914517 -a=eks,b=pan,i=5741,x=0.8637268770032811,y=0.5213399189681543 -a=hat,b=eks,i=5743,x=0.5295348501354114,y=0.7258797581771135 -a=hat,b=hat,i=5744,x=0.12378910131331311,y=0.40752356675537815 -a=zee,b=pan,i=5748,x=0.7440532825684012,y=0.9785802799882344 -a=zee,b=hat,i=5749,x=0.21090673582102115,y=0.1689004632484875 -a=pan,b=pan,i=5750,x=0.8304494332695221,y=0.5545369624062666 -a=zee,b=pan,i=5751,x=0.5728551154691659,y=0.6693087997390269 -a=eks,b=wye,i=5752,x=0.4413629999732097,y=0.15979822952735956 -a=wye,b=eks,i=5753,x=0.7095091807055749,y=0.724643932584749 -a=zee,b=zee,i=5755,x=0.3010837648341733,y=0.025119103758309502 -a=pan,b=zee,i=5756,x=0.6193965896501459,y=0.8537626115609437 -a=wye,b=zee,i=5758,x=0.7467869025815791,y=0.7773472293348217 -a=eks,b=zee,i=5759,x=0.5808704155987169,y=0.7833615756850842 -a=hat,b=eks,i=5760,x=0.9162336115551181,y=0.823024870348188 -a=eks,b=pan,i=5761,x=0.8487786036617613,y=0.622984817551366 -a=wye,b=pan,i=5762,x=0.40655642829036065,y=0.4636508847184254 -a=eks,b=hat,i=5765,x=0.18805948712913445,y=0.22065247387702902 -a=wye,b=zee,i=5770,x=0.2844962427329081,y=0.46659983713341124 -a=pan,b=hat,i=5771,x=0.8904572608374995,y=0.8849293322073792 -a=pan,b=eks,i=5773,x=0.5155930172001615,y=0.9788581972056736 -a=zee,b=pan,i=5775,x=0.03055433366810012,y=0.1704580136613072 -a=pan,b=eks,i=5776,x=0.7165945800863369,y=0.6653908462460456 -a=pan,b=eks,i=5777,x=0.8730284129862198,y=0.6933278671481614 -a=zee,b=hat,i=5779,x=0.10449109525989031,y=0.09472821919765906 -a=hat,b=hat,i=5781,x=0.9223990594381151,y=0.9860563250941797 -a=hat,b=zee,i=5783,x=0.6163250225253557,y=0.7015824283135457 -a=hat,b=wye,i=5785,x=0.40569525676284146,y=0.22909456416866192 -a=hat,b=hat,i=5792,x=0.04225905159882992,y=0.11113794777514896 -a=wye,b=hat,i=5793,x=0.7433843634275165,y=0.5164678527321154 -a=wye,b=zee,i=5795,x=0.6399305400537463,y=0.5169871749762857 -a=pan,b=eks,i=5796,x=0.10739150192981317,y=0.004460524149627276 -a=hat,b=hat,i=5797,x=0.5867728931987851,y=0.937578286245456 -a=eks,b=hat,i=5798,x=0.3908387810335817,y=0.34330528598151944 -a=wye,b=eks,i=5799,x=0.11663940947930529,y=0.2283382768880119 -a=hat,b=wye,i=5800,x=0.20766266556079938,y=0.06909200825337258 -a=hat,b=zee,i=5802,x=0.4647837023773008,y=0.30037328314118017 -a=eks,b=hat,i=5804,x=0.29845440226372855,y=0.24711215673748332 -a=zee,b=wye,i=5805,x=0.25960541840206386,y=0.22950027817819518 -a=wye,b=pan,i=5806,x=0.6653575136807429,y=0.9060998128185732 -a=pan,b=wye,i=5807,x=0.18771994519215784,y=0.26225112077131363 -a=wye,b=pan,i=5808,x=0.3666840512152372,y=0.15437085935635642 -a=eks,b=wye,i=5814,x=0.3619763137230263,y=0.3300717677846403 -a=pan,b=eks,i=5816,x=0.9160561949834121,y=0.5246537157918573 -a=wye,b=wye,i=5820,x=0.9675205269852082,y=0.8456558793367495 -a=eks,b=eks,i=5822,x=0.6616970307501397,y=0.6091232839670194 -a=eks,b=zee,i=5824,x=0.008069601151581285,y=0.4982567352783567 -a=pan,b=hat,i=5825,x=0.5827800197345394,y=0.7803525569338927 -a=eks,b=eks,i=5831,x=0.2131869859612514,y=0.051574404230206206 -a=hat,b=eks,i=5832,x=0.536815843763481,y=0.9725354850537404 -a=eks,b=wye,i=5836,x=0.8956966597743651,y=0.8528472084728154 -a=pan,b=wye,i=5838,x=0.40192120844730816,y=0.01299427191690905 -a=wye,b=eks,i=5842,x=0.6216373633536472,y=0.9301770846288369 -a=zee,b=zee,i=5846,x=0.162570991251604,y=0.26519462331398813 -a=hat,b=hat,i=5848,x=0.9956327931315808,y=0.8873051757938238 -a=wye,b=pan,i=5850,x=0.9313090088228326,y=0.9743729163851863 -a=eks,b=zee,i=5851,x=0.22409910130745192,y=0.13300739204811318 -a=hat,b=pan,i=5852,x=0.9764589316784894,y=0.5367076815906018 -a=zee,b=eks,i=5854,x=0.13307347063070984,y=0.35231749332115525 -a=eks,b=wye,i=5859,x=0.07297199386640929,y=0.027345228589134907 -a=eks,b=eks,i=5860,x=0.9833629242563793,y=0.9992250545586543 -a=eks,b=hat,i=5861,x=0.885544518143363,y=0.6319209563437962 -a=eks,b=zee,i=5867,x=0.9115822381629575,y=0.7866137441239371 -a=zee,b=zee,i=5868,x=0.6094609434293627,y=0.5377506393673299 -a=pan,b=wye,i=5870,x=0.7185567353405748,y=0.9625690376428901 -a=zee,b=zee,i=5871,x=0.028580144473957514,y=0.3101568871452759 -a=pan,b=pan,i=5872,x=0.3820471070600516,y=0.35563824254246 -a=hat,b=pan,i=5873,x=0.48211948675174343,y=0.2808314182510484 -a=zee,b=zee,i=5874,x=0.4244763123071966,y=0.27813346850123377 -a=hat,b=hat,i=5875,x=0.08023425641620874,y=0.3562943757988909 -a=eks,b=zee,i=5876,x=0.42409197009601207,y=0.2580874448511281 -a=zee,b=hat,i=5877,x=0.6106977731868735,y=0.8348351384198046 -a=hat,b=pan,i=5878,x=0.7267758858416487,y=0.6189509030501132 -a=eks,b=pan,i=5879,x=0.9304167092235895,y=0.7812522227544872 -a=wye,b=hat,i=5882,x=0.1079539981243911,y=0.27269401005584115 -a=pan,b=pan,i=5884,x=0.5893199011375699,y=0.9675602927187726 -a=zee,b=wye,i=5885,x=0.7855309055804873,y=0.8242084722200425 -a=pan,b=hat,i=5886,x=0.21719695401350458,y=0.30358017023038153 -a=pan,b=hat,i=5888,x=0.6047201198005093,y=0.9181081561579384 -a=hat,b=hat,i=5889,x=0.585057883337934,y=0.8637135279822525 -a=eks,b=hat,i=5891,x=0.38491586194929694,y=0.1469109750984342 -a=eks,b=zee,i=5895,x=0.34688995428502123,y=0.05521465426780947 -a=pan,b=hat,i=5896,x=0.9024771073805518,y=0.604435930128322 -a=zee,b=zee,i=5898,x=0.9638020677593624,y=0.9758009686628205 -a=wye,b=eks,i=5904,x=0.791240301793597,y=0.5905379287555277 -a=wye,b=pan,i=5906,x=0.25968317122777085,y=0.21946674504226305 -a=eks,b=pan,i=5907,x=0.20429202129242863,y=0.2739618927896226 -a=wye,b=pan,i=5911,x=0.865745658241438,y=0.58440580479703 -a=eks,b=hat,i=5912,x=0.8061623351763454,y=0.6282727719209886 -a=zee,b=hat,i=5914,x=0.6882661603529711,y=0.8887129009982704 -a=hat,b=zee,i=5916,x=0.5369361894430387,y=0.7602843160092176 -a=zee,b=eks,i=5917,x=0.7603685712259192,y=0.6343676597010043 -a=pan,b=hat,i=5918,x=0.366468458362766,y=0.03541459276961356 -a=eks,b=hat,i=5921,x=0.7220748068466161,y=0.9135263674287071 -a=hat,b=hat,i=5922,x=0.7007543076445784,y=0.5785000013877882 -a=pan,b=wye,i=5925,x=0.02234819330370974,y=0.24864881451646326 -a=wye,b=wye,i=5929,x=0.765996158956063,y=0.7875000435827569 -a=zee,b=pan,i=5931,x=0.14870262574003812,y=0.25758171933702145 -a=zee,b=eks,i=5933,x=0.21312616005615392,y=0.1555687828207697 -a=hat,b=wye,i=5937,x=0.7939967856315264,y=0.9601200264326587 -a=pan,b=pan,i=5938,x=0.7447545239901884,y=0.8615464344679636 -a=wye,b=pan,i=5939,x=0.32618776050076514,y=0.04356428568705306 -a=zee,b=pan,i=5940,x=0.30848692760824414,y=0.4765563067775509 -a=zee,b=eks,i=5941,x=0.47731093944717395,y=0.20531029159472136 -a=zee,b=hat,i=5942,x=0.14569062187871828,y=0.29647189869590773 -a=wye,b=pan,i=5946,x=0.4654804137932894,y=0.034558917439536097 -a=zee,b=hat,i=5947,x=0.21695412923454904,y=0.43929843802398505 -a=hat,b=hat,i=5948,x=0.5757328621980413,y=0.6353025655596225 -a=zee,b=eks,i=5953,x=0.9664924377661902,y=0.5704525111862812 -a=zee,b=zee,i=5954,x=0.7314435770258082,y=0.5760633916387623 -a=wye,b=eks,i=5955,x=0.11730300164253482,y=0.2437668953328913 -a=wye,b=hat,i=5958,x=0.4484915030384218,y=0.0021936451209908503 -a=hat,b=zee,i=5961,x=0.3083082640562401,y=0.43599613823729055 -a=pan,b=eks,i=5962,x=0.15236030642851295,y=0.11800538936265059 -a=zee,b=wye,i=5963,x=0.7842417183077839,y=0.8263558103417791 -a=wye,b=hat,i=5965,x=0.7381633325773709,y=0.7044839805205219 -a=eks,b=zee,i=5966,x=0.8246457170881877,y=0.546058458654676 -a=wye,b=wye,i=5968,x=0.6210050577035034,y=0.6524576650195097 -a=hat,b=pan,i=5969,x=0.7090572782654315,y=0.5364015328854267 -a=eks,b=zee,i=5970,x=0.6509530715275128,y=0.5780440319964154 -a=pan,b=pan,i=5971,x=0.2887825352259904,y=0.15004456717790193 -a=zee,b=hat,i=5975,x=0.34854624620098384,y=0.12823216693877193 -a=hat,b=zee,i=5976,x=0.12265984923829065,y=0.46184314823141537 -a=eks,b=eks,i=5981,x=0.04584617519803835,y=0.07778733739846255 -a=hat,b=hat,i=5982,x=0.12903186206218742,y=0.34208394676963483 -a=wye,b=eks,i=5983,x=0.20225412929960151,y=0.467369874775762 -a=zee,b=zee,i=5985,x=0.5011026241476996,y=0.805862929391608 -a=pan,b=eks,i=5987,x=0.4615059476811778,y=0.052616042635722726 -a=hat,b=wye,i=5988,x=0.6628427322104598,y=0.7830019543371667 -a=wye,b=pan,i=5990,x=0.17713926799897517,y=0.23695227873073954 -a=wye,b=zee,i=5993,x=0.5294790360408727,y=0.8997422208092308 -a=zee,b=pan,i=5998,x=0.21694616431952807,y=0.39150665545149743 -a=hat,b=zee,i=6001,x=0.5185086838193509,y=0.7904042779588125 -a=eks,b=eks,i=6002,x=0.39573160678139196,y=0.4615703290236336 -a=hat,b=wye,i=6005,x=0.7983815573901718,y=0.7761184973619634 -a=wye,b=pan,i=6007,x=0.8053846290661436,y=0.8678997964852174 -a=pan,b=pan,i=6016,x=0.7515268934050028,y=0.6517374909352979 -a=eks,b=hat,i=6018,x=0.4684056585315659,y=0.337057411818393 -a=zee,b=hat,i=6019,x=0.46644646414956337,y=0.37632624811846627 -a=hat,b=hat,i=6026,x=0.26534848529863153,y=0.15071960409960417 -a=pan,b=eks,i=6028,x=0.8921081985029767,y=0.918512738613517 -a=pan,b=eks,i=6030,x=0.6604483059910737,y=0.828006457014962 -a=wye,b=pan,i=6032,x=0.18616681775349353,y=0.428462590403658 -a=wye,b=hat,i=6033,x=0.17782260468314637,y=0.3212752721293215 -a=zee,b=zee,i=6034,x=0.1872485063005922,y=0.11358951848324028 -a=hat,b=pan,i=6037,x=0.13535704558051898,y=0.08799048432237733 -a=pan,b=eks,i=6040,x=0.02209842222005065,y=0.2707759101194467 -a=pan,b=pan,i=6041,x=0.24065041069096327,y=0.096992272385374 -a=wye,b=wye,i=6045,x=0.43588050348095864,y=0.4231462786478698 -a=zee,b=eks,i=6046,x=0.35017939224895767,y=0.31215765738608925 -a=hat,b=wye,i=6048,x=0.7766726125727336,y=0.5675508167476694 -a=wye,b=zee,i=6050,x=0.6951984651252766,y=0.5425712622829648 -a=pan,b=wye,i=6051,x=0.9427895952822903,y=0.8719941425198732 -a=hat,b=hat,i=6052,x=0.5361976672567662,y=0.5331863539216497 -a=eks,b=hat,i=6054,x=0.7073320813195529,y=0.9382615280812954 -a=wye,b=wye,i=6055,x=0.9034120549999815,y=0.9428661865045129 -a=wye,b=zee,i=6056,x=0.9036169505703209,y=0.8702961297029511 -a=pan,b=zee,i=6057,x=0.351391651879459,y=0.22131930493166563 -a=pan,b=hat,i=6059,x=0.8954915180233931,y=0.5799236237902317 -a=pan,b=pan,i=6063,x=0.4553835211035392,y=0.421964673707642 -a=eks,b=eks,i=6064,x=0.9195082628714536,y=0.7843278824429687 -a=hat,b=zee,i=6066,x=0.6147064931036405,y=0.9150698526901345 -a=hat,b=pan,i=6070,x=0.6313496582432914,y=0.9900649342170824 -a=pan,b=pan,i=6071,x=0.8928836261132681,y=0.5415114404183805 -a=pan,b=eks,i=6075,x=0.8012118002371259,y=0.7203879849887644 -a=hat,b=wye,i=6076,x=0.8379974247825939,y=0.6503639424507504 -a=hat,b=eks,i=6078,x=0.6372234825627152,y=0.5775364684644685 -a=eks,b=hat,i=6080,x=0.5842098929256355,y=0.9268385178778537 -a=wye,b=hat,i=6082,x=0.6940314918085063,y=0.9546919945201542 -a=zee,b=wye,i=6083,x=0.07677730138586769,y=0.27970074396540523 -a=hat,b=hat,i=6084,x=0.8231273607660942,y=0.7945531787758096 -a=pan,b=hat,i=6087,x=0.7452242982918568,y=0.933266614617221 -a=eks,b=eks,i=6088,x=0.9407795350577164,y=0.8986498240204077 -a=eks,b=pan,i=6090,x=0.838908851853637,y=0.9142053659359575 -a=pan,b=zee,i=6091,x=0.2805934812907199,y=0.4958691991853912 -a=zee,b=wye,i=6094,x=0.38062861091901556,y=0.1551403595265176 -a=eks,b=hat,i=6096,x=0.42296496745953693,y=0.028270087708508695 -a=eks,b=wye,i=6098,x=0.004861307055076147,y=0.16556471646142745 -a=hat,b=wye,i=6099,x=0.45226025959304195,y=0.18641738624575777 -a=wye,b=eks,i=6100,x=0.6994211629442989,y=0.5162220389082391 -a=hat,b=eks,i=6101,x=0.21566053977410837,y=0.0009137416907488705 -a=zee,b=eks,i=6102,x=0.8280966067887752,y=0.694693806129609 -a=zee,b=pan,i=6103,x=0.6340964020751576,y=0.62642563404278 -a=zee,b=pan,i=6106,x=0.8553526569078405,y=0.9138200519516971 -a=pan,b=eks,i=6108,x=0.08545243832367033,y=0.26227816664595516 -a=pan,b=wye,i=6109,x=0.42064626396142935,y=0.03834575879901836 -a=wye,b=eks,i=6112,x=0.32643889115109914,y=0.057664918435550105 -a=eks,b=zee,i=6113,x=0.7830249162665363,y=0.9359267958767102 -a=zee,b=pan,i=6114,x=0.12372114799931111,y=0.006510213999872061 -a=pan,b=wye,i=6116,x=0.8796441138920073,y=0.7932277172417034 -a=wye,b=pan,i=6118,x=0.6353087660069283,y=0.5051898483269901 -a=wye,b=zee,i=6120,x=0.8391496713951982,y=0.8272270342812488 -a=pan,b=wye,i=6121,x=0.10848385354873591,y=0.4213783243233229 -a=eks,b=zee,i=6122,x=0.7851432595398691,y=0.8736148992334403 -a=pan,b=wye,i=6123,x=0.14384598748640032,y=0.32134746224637845 -a=hat,b=eks,i=6125,x=0.7256280642967333,y=0.8471794523838057 -a=wye,b=hat,i=6128,x=0.5798880313425798,y=0.991140739248181 -a=pan,b=eks,i=6130,x=0.06722223792791904,y=0.14906728853790685 -a=eks,b=eks,i=6131,x=0.8733172145139986,y=0.754180892846082 -a=wye,b=wye,i=6132,x=0.21323342519040167,y=0.023037099194546995 -a=eks,b=hat,i=6133,x=0.2772309881804147,y=0.03618215388759871 -a=zee,b=zee,i=6135,x=0.4368219705298403,y=0.02593555893570043 -a=pan,b=eks,i=6138,x=0.09141195779591726,y=0.10884990452426058 -a=zee,b=eks,i=6140,x=0.6449410501908724,y=0.7328187261405557 -a=eks,b=eks,i=6150,x=0.2543117769739106,y=0.2683840371177597 -a=wye,b=eks,i=6151,x=0.2875496688119247,y=0.44319198704607665 -a=wye,b=eks,i=6152,x=0.7099732953682635,y=0.5854903351687778 -a=wye,b=pan,i=6153,x=0.07854709434875495,y=0.3722757779564305 -a=wye,b=zee,i=6156,x=0.06825592495808563,y=0.1502278354043537 -a=hat,b=eks,i=6160,x=0.7011580850727354,y=0.6036204870691432 -a=hat,b=hat,i=6163,x=0.10827051081377403,y=0.16793651272516608 -a=pan,b=wye,i=6166,x=0.5836460911249829,y=0.5913706500552215 -a=eks,b=pan,i=6168,x=0.011142080206369753,y=0.11796822475814073 -a=hat,b=zee,i=6172,x=0.4805916761138247,y=0.1482140011291747 -a=pan,b=zee,i=6173,x=0.07652496417334043,y=0.042388913077830326 -a=wye,b=pan,i=6177,x=0.03184609338086353,y=0.0814260689531977 -a=pan,b=eks,i=6180,x=0.6707266041969419,y=0.8559378190156729 -a=eks,b=zee,i=6181,x=0.2802981253544844,y=0.3174939125127616 -a=hat,b=wye,i=6182,x=0.5963539674332015,y=0.8719750664328125 -a=hat,b=pan,i=6183,x=0.005703731409972823,y=0.13190978995990732 -a=pan,b=eks,i=6186,x=0.8129419229181339,y=0.9565505011070674 -a=pan,b=pan,i=6188,x=0.3138266925669364,y=0.1423581267550319 -a=eks,b=zee,i=6189,x=0.1600695810764854,y=0.3703741621779819 -a=zee,b=pan,i=6193,x=0.22555543203604156,y=0.354448421001617 -a=hat,b=wye,i=6197,x=0.9175822141933855,y=0.8289821718204701 -a=pan,b=pan,i=6198,x=0.7387220064556718,y=0.634422986160881 -a=wye,b=zee,i=6201,x=0.3729199649979895,y=0.3737596699867053 -a=pan,b=eks,i=6202,x=0.47394220338381987,y=0.22208820414520292 -a=zee,b=eks,i=6206,x=0.4689131127096242,y=0.18743577113193155 -a=wye,b=pan,i=6208,x=0.38705607831183175,y=0.33125379993312465 -a=eks,b=pan,i=6210,x=0.11164707350592284,y=0.4366699296089537 -a=zee,b=hat,i=6211,x=0.1756835304978165,y=0.21235178828034162 -a=wye,b=zee,i=6213,x=0.223018528653398,y=0.07665796419452864 -a=eks,b=pan,i=6218,x=0.413534591007817,y=0.23614970902594068 -a=eks,b=zee,i=6220,x=0.047918107206670224,y=0.11615158016485994 -a=wye,b=eks,i=6221,x=0.7465534540087728,y=0.9821197497223434 -a=eks,b=wye,i=6222,x=0.06680014273579682,y=0.18844745124665652 -a=eks,b=hat,i=6224,x=0.4238158023951344,y=0.2511472296462649 -a=eks,b=hat,i=6226,x=0.02496410500180868,y=0.05574344857979974 -a=hat,b=hat,i=6227,x=0.38672001205322815,y=0.19823389210483422 -a=hat,b=pan,i=6229,x=0.14688149819492824,y=0.09514280973942923 -a=zee,b=hat,i=6235,x=0.6700739126174862,y=0.9940554433455402 -a=pan,b=eks,i=6241,x=0.8637612972836923,y=0.7179857913303808 -a=pan,b=wye,i=6242,x=0.7916044619336652,y=0.8298956143848671 -a=hat,b=wye,i=6243,x=0.03245716276075361,y=0.06220544584591636 -a=eks,b=hat,i=6251,x=0.7449272998418788,y=0.6080272372617547 -a=zee,b=pan,i=6252,x=0.5630148470870018,y=0.9374709146770936 -a=zee,b=zee,i=6255,x=0.9316229517968885,y=0.652503212541953 -a=hat,b=eks,i=6257,x=0.7050090746554877,y=0.8875603931761636 -a=eks,b=wye,i=6258,x=0.9454475219485642,y=0.5012059708954245 -a=zee,b=pan,i=6259,x=0.4266553967306278,y=0.4003433468882255 -a=wye,b=zee,i=6260,x=0.9923421841444514,y=0.8824722395488493 -a=hat,b=eks,i=6262,x=0.3350864667715827,y=0.014819836304338363 -a=wye,b=hat,i=6263,x=0.9268271428508724,y=0.8044165287448475 -a=pan,b=hat,i=6265,x=0.2970907219742721,y=0.1979486130274667 -a=eks,b=eks,i=6267,x=0.6051949380519777,y=0.7786588336276383 -a=hat,b=eks,i=6270,x=0.543219579817685,y=0.5740667894014433 -a=zee,b=hat,i=6273,x=0.7504799514506184,y=0.5256684190391457 -a=eks,b=eks,i=6274,x=0.7402757803304741,y=0.8741323775731765 -a=zee,b=eks,i=6275,x=0.10740056926929464,y=0.24466182300866768 -a=hat,b=eks,i=6277,x=0.4555390450312061,y=0.29958791124739714 -a=hat,b=pan,i=6281,x=0.4484391085565852,y=0.4389498697416624 -a=zee,b=eks,i=6283,x=0.5390923448056928,y=0.5167672853818701 -a=wye,b=wye,i=6284,x=0.35204669568634417,y=0.4690592822602978 -a=pan,b=pan,i=6285,x=0.32173095582057487,y=0.21796469598272317 -a=wye,b=zee,i=6289,x=0.7327389149804516,y=0.7332292873505851 -a=wye,b=pan,i=6291,x=0.72465968202963,y=0.8111622984322363 -a=wye,b=zee,i=6292,x=0.7179223482928053,y=0.7389960044426721 -a=pan,b=pan,i=6296,x=0.16446925567275705,y=0.2859671068853066 -a=zee,b=hat,i=6298,x=0.9752808469326072,y=0.5811620174961745 -a=pan,b=zee,i=6300,x=0.31023070105575734,y=0.11731145460396875 -a=zee,b=zee,i=6302,x=0.24914699249882744,y=0.4481166721397105 -a=hat,b=zee,i=6303,x=0.8952025142838863,y=0.5374079020216094 -a=pan,b=zee,i=6305,x=0.1290986312271305,y=0.12638586813227837 -a=pan,b=hat,i=6307,x=0.5265554249602866,y=0.5324141264515088 -a=eks,b=hat,i=6311,x=0.9810589871426987,y=0.8707798683477451 -a=eks,b=pan,i=6312,x=0.20487685479037343,y=0.3809481389765218 -a=eks,b=pan,i=6317,x=0.3794062074790783,y=0.4471294857197765 -a=zee,b=pan,i=6318,x=0.2692152520955172,y=0.22081394976202395 -a=wye,b=wye,i=6322,x=0.5167349179748397,y=0.9138123003320032 -a=zee,b=wye,i=6324,x=0.9515688609245834,y=0.6819481738668132 -a=wye,b=eks,i=6325,x=0.9593196183251438,y=0.8367522899279389 -a=zee,b=pan,i=6327,x=0.9887417195594495,y=0.8511851849030334 -a=hat,b=pan,i=6330,x=0.5128088389522093,y=0.8131565213796835 -a=hat,b=eks,i=6333,x=0.3615187221839192,y=0.4910814422431359 -a=wye,b=eks,i=6334,x=0.09211420131313564,y=0.423787234189663 -a=hat,b=zee,i=6335,x=0.4909870746929612,y=0.4355886224024228 -a=eks,b=hat,i=6337,x=0.579470745492393,y=0.8856435834505533 -a=wye,b=hat,i=6338,x=0.08580189556409401,y=0.18529503699085126 -a=wye,b=eks,i=6340,x=0.893469417305926,y=0.6681902139221949 -a=zee,b=zee,i=6343,x=0.1034004605453186,y=0.39652659704684057 -a=wye,b=hat,i=6346,x=0.4029829128240823,y=0.11036697991316924 -a=hat,b=pan,i=6349,x=0.8269557855792476,y=0.9027369919455107 -a=zee,b=wye,i=6351,x=0.9929432399676,y=0.7266233986268336 -a=zee,b=zee,i=6353,x=0.021330838330390844,y=0.3809296291373765 -a=pan,b=hat,i=6354,x=0.7002692145665447,y=0.5873523948555504 -a=eks,b=zee,i=6355,x=0.7096421804081511,y=0.8295306415940142 -a=zee,b=zee,i=6357,x=0.49409427660264216,y=0.4850204111936285 -a=hat,b=wye,i=6359,x=0.9607252863389836,y=0.5686827648028989 -a=pan,b=eks,i=6360,x=0.7560882445267275,y=0.8572550831102655 -a=wye,b=hat,i=6364,x=0.914528515618754,y=0.9410825640734111 -a=eks,b=eks,i=6366,x=0.3386950606192106,y=0.06992633700519646 -a=wye,b=wye,i=6367,x=0.7504949488085239,y=0.786978752534252 -a=hat,b=zee,i=6368,x=0.5051737323297509,y=0.7652145340768823 -a=hat,b=wye,i=6369,x=0.7463935682542416,y=0.5295073352906969 -a=wye,b=pan,i=6370,x=0.49818710578255154,y=0.1690594948792461 -a=eks,b=wye,i=6371,x=0.49803548538778086,y=0.22335884494050284 -a=eks,b=hat,i=6372,x=0.4246224317545182,y=0.3262297869762637 -a=wye,b=zee,i=6374,x=0.18643754020877645,y=0.3123085804500255 -a=hat,b=hat,i=6375,x=0.8001034675030699,y=0.9517591892658788 -a=pan,b=eks,i=6376,x=0.6252933549201062,y=0.555208264819299 -a=pan,b=pan,i=6377,x=0.1234059193898962,y=0.4282585828512744 -a=hat,b=eks,i=6381,x=0.9299884067645247,y=0.9833998868880498 -a=zee,b=eks,i=6382,x=0.5086463065649875,y=0.7232680771660464 -a=eks,b=wye,i=6385,x=0.375259929118559,y=0.37681150088581805 -a=hat,b=pan,i=6386,x=0.09907032231055479,y=0.11845065981831315 -a=wye,b=wye,i=6388,x=0.023110383118460698,y=0.4068502633328007 -a=eks,b=wye,i=6389,x=0.06029233433804437,y=0.0069107595974849945 -a=eks,b=eks,i=6390,x=0.37636185226364116,y=0.33595097225386006 -a=pan,b=hat,i=6393,x=0.6164331222493035,y=0.799523761418903 -a=eks,b=eks,i=6395,x=0.013151988906827783,y=0.3911978077086571 -a=zee,b=pan,i=6396,x=0.05693046828037929,y=0.0830535181246761 -a=hat,b=wye,i=6398,x=0.8278262369190469,y=0.8063525578215112 -a=eks,b=pan,i=6401,x=0.3117980184170095,y=0.3896017834660054 -a=zee,b=hat,i=6404,x=0.7164677134055616,y=0.9694565043354904 -a=pan,b=hat,i=6405,x=0.9759078114126464,y=0.7063179771371398 -a=pan,b=hat,i=6406,x=0.954175493846238,y=0.6691300320475423 -a=zee,b=zee,i=6408,x=0.31225714410247885,y=0.2676588944630799 -a=pan,b=eks,i=6410,x=0.0771175852385313,y=0.43719251713130314 -a=eks,b=pan,i=6412,x=0.028528724411183704,y=0.4117910378534779 -a=wye,b=wye,i=6413,x=0.6287761434833328,y=0.9307783735658955 -a=zee,b=pan,i=6414,x=0.16675267868516974,y=0.46567693999380766 -a=hat,b=hat,i=6415,x=0.8976720079433573,y=0.9828223660778185 -a=hat,b=pan,i=6417,x=0.5832411030367591,y=0.9477789434363258 -a=zee,b=hat,i=6420,x=0.8712427179950256,y=0.7447570934180631 -a=wye,b=wye,i=6421,x=0.5648884056728719,y=0.5634331844443893 -a=hat,b=wye,i=6422,x=0.01694176656548152,y=0.07336362857726697 -a=wye,b=eks,i=6423,x=0.634648698039043,y=0.6818627870740478 -a=hat,b=wye,i=6424,x=0.2615797200021953,y=0.06268282068424968 -a=hat,b=pan,i=6426,x=0.6291090221287023,y=0.7077446188899329 -a=zee,b=zee,i=6427,x=0.1266840835991615,y=0.4710457768189127 -a=hat,b=eks,i=6428,x=0.09464086229090107,y=0.47239885675212656 -a=zee,b=eks,i=6432,x=0.9977728531401571,y=0.5555230798468542 -a=eks,b=wye,i=6435,x=0.29949442818251637,y=0.2980558556550551 -a=hat,b=pan,i=6436,x=0.8917689813015088,y=0.984408429326343 -a=wye,b=eks,i=6439,x=0.27627014363793057,y=0.16739805033116262 -a=eks,b=eks,i=6440,x=0.54039073822999,y=0.7382909202030716 -a=pan,b=wye,i=6441,x=0.5364355943542373,y=0.8667607097366447 -a=zee,b=wye,i=6444,x=0.5115020732232286,y=0.5858898596014527 -a=eks,b=wye,i=6445,x=0.08215358744465884,y=0.4803964930713249 -a=pan,b=eks,i=6446,x=0.44656601416029373,y=0.025883415745221905 -a=eks,b=pan,i=6447,x=0.2131521138705983,y=0.44443595051013873 -a=hat,b=eks,i=6449,x=0.02954457910704722,y=0.18268010541285318 -a=hat,b=hat,i=6453,x=0.6640804340662215,y=0.7894591475325365 -a=zee,b=hat,i=6454,x=0.3766538672292219,y=0.4455838705050216 -a=wye,b=pan,i=6455,x=0.23373281011403946,y=0.3153880547268789 -a=wye,b=pan,i=6456,x=0.03036849011680509,y=0.2750194685259788 -a=pan,b=hat,i=6458,x=0.09729717910412794,y=0.19414276392139473 -a=wye,b=hat,i=6459,x=0.5675430389740692,y=0.8272519001873508 -a=eks,b=wye,i=6460,x=0.5637263196436371,y=0.670195472057473 -a=hat,b=eks,i=6462,x=0.9921482859148919,y=0.5987898976105622 -a=wye,b=pan,i=6465,x=0.9167490958878957,y=0.9855848244933287 -a=pan,b=zee,i=6466,x=0.15059271173810918,y=0.44163751220849723 -a=eks,b=wye,i=6469,x=0.5901730276534817,y=0.8155922672887547 -a=hat,b=wye,i=6470,x=0.6390276410501727,y=0.7865739186729956 -a=wye,b=zee,i=6472,x=0.6214639311843375,y=0.5100489809959527 -a=eks,b=eks,i=6474,x=0.21187331402552312,y=0.3570247389877106 -a=pan,b=wye,i=6475,x=0.1407760095778986,y=0.4114197966182903 -a=wye,b=hat,i=6477,x=0.4489569133156198,y=0.37328013990205033 -a=hat,b=zee,i=6479,x=0.702402839401389,y=0.7009502307426156 -a=hat,b=hat,i=6481,x=0.6708784819364922,y=0.8308286378718903 -a=eks,b=wye,i=6483,x=0.6489598152434705,y=0.725168237682496 -a=zee,b=wye,i=6484,x=0.12383076923326797,y=0.10227618505533276 -a=wye,b=wye,i=6485,x=0.6359239484918648,y=0.6087629645637064 -a=wye,b=wye,i=6486,x=0.26321351409255855,y=0.10213207378968225 -a=hat,b=eks,i=6490,x=0.1904681932728718,y=0.39823383688284875 -a=hat,b=pan,i=6493,x=0.17669129422616314,y=0.17133013634096628 -a=zee,b=zee,i=6499,x=0.5093537663250951,y=0.5070363131757412 -a=wye,b=zee,i=6501,x=0.857769146584233,y=0.7284491562757176 -a=hat,b=wye,i=6502,x=0.13952314891314033,y=0.21138680405955823 -a=hat,b=zee,i=6503,x=0.0821042436799082,y=0.2380454193004119 -a=wye,b=eks,i=6506,x=0.2228766869756198,y=0.23547292675257847 -a=wye,b=hat,i=6509,x=0.22689252452538788,y=0.01540955658171872 -a=zee,b=wye,i=6510,x=0.03761238359284913,y=0.04430693507101946 -a=zee,b=wye,i=6512,x=0.5717578999541683,y=0.583339576596991 -a=eks,b=wye,i=6513,x=0.2576348537935582,y=0.02891940447221053 -a=zee,b=wye,i=6514,x=0.7108561722879589,y=0.5343855601720103 -a=pan,b=pan,i=6516,x=0.16436389636346782,y=0.06142769237145096 -a=wye,b=hat,i=6517,x=0.9499786087950957,y=0.9169897551951627 -a=hat,b=wye,i=6518,x=0.11226676145430348,y=0.3389463928651728 -a=zee,b=zee,i=6519,x=0.2323137819710005,y=0.21425984944922594 -a=wye,b=eks,i=6520,x=0.7524818540927941,y=0.9710297784453114 -a=wye,b=pan,i=6524,x=0.4239737405316326,y=0.24586595155563684 -a=wye,b=eks,i=6525,x=0.666984074931497,y=0.5881526921363845 -a=zee,b=eks,i=6526,x=0.7035055465426836,y=0.9029683394431433 -a=eks,b=eks,i=6528,x=0.35544201168726874,y=0.26203559629802176 -a=hat,b=zee,i=6530,x=0.6725507341754717,y=0.8211175540313643 -a=pan,b=eks,i=6531,x=0.9263381279440988,y=0.7230758102834317 -a=hat,b=wye,i=6534,x=0.09447988348358638,y=0.21201328127649932 -a=hat,b=eks,i=6535,x=0.0022062240850495574,y=0.3458564847842249 -a=eks,b=eks,i=6536,x=0.08799574586608505,y=0.16463115926454674 -a=pan,b=pan,i=6537,x=0.15749262177445233,y=0.3950102135965362 -a=pan,b=hat,i=6541,x=0.0420481636052179,y=0.3896076829423738 -a=zee,b=pan,i=6542,x=0.6629759666763753,y=0.7114746505059143 -a=pan,b=hat,i=6544,x=0.48676766407802263,y=0.2518094002262543 -a=hat,b=zee,i=6548,x=0.9011359340858558,y=0.6061658741277544 -a=wye,b=wye,i=6549,x=0.2051254389063183,y=0.05111364491561332 -a=hat,b=zee,i=6550,x=0.38066561435480195,y=0.42936645455121314 -a=wye,b=eks,i=6553,x=0.33502063619497235,y=0.2610167700436856 -a=pan,b=hat,i=6554,x=0.7802269675523349,y=0.9534940914356625 -a=wye,b=hat,i=6555,x=0.005663846527729333,y=0.48584311997319796 -a=eks,b=hat,i=6556,x=0.14062017897722112,y=0.005932662015826984 -a=pan,b=wye,i=6560,x=0.0727664463558585,y=0.025570241966542673 -a=zee,b=hat,i=6562,x=0.516217374487157,y=0.6640919516818178 -a=eks,b=wye,i=6564,x=0.7790458055803663,y=0.6522738145614022 -a=hat,b=eks,i=6565,x=0.8990182808114324,y=0.971140059395297 -a=eks,b=zee,i=6566,x=0.5308026859083895,y=0.6453041296190671 -a=hat,b=hat,i=6568,x=0.6015424402169296,y=0.9136579408737084 -a=eks,b=zee,i=6569,x=0.07024602364065347,y=0.10258813515051479 -a=hat,b=zee,i=6570,x=0.3550675740695889,y=0.007910225883702049 -a=zee,b=pan,i=6571,x=0.1632710729418324,y=0.03017711376568888 -a=eks,b=pan,i=6572,x=0.9270875444507882,y=0.637374878466062 -a=pan,b=zee,i=6576,x=0.8777708761889912,y=0.5786474005042914 -a=pan,b=pan,i=6577,x=0.3993469483222466,y=0.3892398770682076 -a=wye,b=eks,i=6579,x=0.24777952654263558,y=0.27916343904186647 -a=eks,b=eks,i=6580,x=0.6495626911864495,y=0.9137400574083774 -a=eks,b=zee,i=6581,x=0.0552357804759368,y=0.27859129675614414 -a=eks,b=wye,i=6582,x=0.047528529169082234,y=0.06138863023310337 -a=eks,b=pan,i=6585,x=0.08337736967964804,y=0.03539849770256276 -a=pan,b=wye,i=6586,x=0.29250342016498887,y=0.3069941691864093 -a=eks,b=hat,i=6590,x=0.036271533325818894,y=0.34617217226715424 -a=eks,b=zee,i=6592,x=0.9241230700230697,y=0.7087787442946673 -a=hat,b=wye,i=6595,x=0.2134794663649403,y=0.1743187405629919 -a=pan,b=wye,i=6597,x=0.7481435165529386,y=0.6957778649603638 -a=zee,b=hat,i=6598,x=0.6210617717475871,y=0.6190922851909458 -a=pan,b=zee,i=6599,x=0.18502780307376443,y=0.34510172711084 -a=pan,b=zee,i=6606,x=0.8486989983659791,y=0.6465788461912306 -a=eks,b=hat,i=6607,x=0.7823679742941769,y=0.8209287515709784 -a=wye,b=hat,i=6609,x=0.12667845633514874,y=0.1111690903267013 -a=zee,b=hat,i=6616,x=0.22594744492269403,y=0.16847954740221938 -a=zee,b=hat,i=6620,x=0.49520075702438326,y=0.1675286620908042 -a=pan,b=zee,i=6621,x=0.92531350722769,y=0.7331109839366486 -a=eks,b=pan,i=6623,x=0.8441127141759738,y=0.9967304913754049 -a=wye,b=hat,i=6624,x=0.5591280937962949,y=0.6627435675727004 -a=eks,b=wye,i=6625,x=0.5105119511152182,y=0.5062086629041608 -a=eks,b=wye,i=6629,x=0.042973374957347765,y=0.3504215411530547 -a=hat,b=hat,i=6633,x=0.2959658325331481,y=0.13508551484281162 -a=wye,b=hat,i=6634,x=0.09078570109861495,y=0.496300237950696 -a=eks,b=pan,i=6635,x=0.1336818909314733,y=0.4638227719158149 -a=eks,b=wye,i=6636,x=0.07517679920524767,y=0.4915331134051061 -a=wye,b=zee,i=6638,x=0.591256877732877,y=0.5915874489265203 -a=eks,b=zee,i=6641,x=0.8781234363470478,y=0.8882819185534889 -a=hat,b=pan,i=6642,x=0.005715323745672962,y=0.2447512299512158 -a=eks,b=zee,i=6643,x=0.015710994394110722,y=0.33183466779705995 -a=wye,b=wye,i=6644,x=0.39250510547900563,y=0.08289629956063027 -a=eks,b=hat,i=6645,x=0.261494320247025,y=0.36299917636703616 -a=pan,b=wye,i=6648,x=0.23702724653048457,y=0.11584533450215717 -a=hat,b=wye,i=6650,x=0.4661494621587131,y=0.17426048946142003 -a=zee,b=eks,i=6651,x=0.47348695334894386,y=0.4301930194799014 -a=pan,b=zee,i=6652,x=0.4602949257627642,y=0.49975689849461613 -a=hat,b=eks,i=6653,x=0.8374977303853919,y=0.5694625331922527 -a=zee,b=eks,i=6654,x=0.5422936444892872,y=0.5852344409380648 -a=pan,b=hat,i=6655,x=0.6453370235827801,y=0.5399548634478539 -a=pan,b=hat,i=6659,x=0.8340965806153038,y=0.9954916059691153 -a=wye,b=hat,i=6660,x=0.797154755771274,y=0.5736771633024341 -a=wye,b=pan,i=6664,x=0.8410807442089315,y=0.5618783788762672 -a=zee,b=wye,i=6665,x=0.750023688775221,y=0.8540304746331103 -a=pan,b=zee,i=6668,x=0.5792938319765554,y=0.549059780249718 -a=eks,b=zee,i=6672,x=0.8633240831439754,y=0.805776035676606 -a=eks,b=pan,i=6673,x=0.5844555116526361,y=0.9258656111924322 -a=eks,b=hat,i=6677,x=0.07057457921469279,y=0.27327598383734664 -a=zee,b=pan,i=6679,x=0.36757640497694033,y=0.15666791431421667 -a=hat,b=pan,i=6683,x=0.6654580371987767,y=0.9155359993727842 -a=eks,b=hat,i=6687,x=0.4611093872251627,y=0.4933386211537618 -a=pan,b=pan,i=6688,x=0.13485289624642116,y=0.30288273557456213 -a=zee,b=hat,i=6690,x=0.5203670639579945,y=0.7962270767115127 -a=hat,b=wye,i=6691,x=0.6886657290157878,y=0.9480662991851704 -a=eks,b=hat,i=6692,x=0.09793478921203369,y=0.45646997283913904 -a=eks,b=wye,i=6695,x=0.9070253492729443,y=0.8359657479869284 -a=eks,b=pan,i=6696,x=0.5213061786374872,y=0.9436108956847651 -a=wye,b=eks,i=6699,x=0.4863235665190313,y=0.024761627522226104 -a=pan,b=pan,i=6702,x=0.09897861729160984,y=0.1632726180578581 -a=zee,b=pan,i=6703,x=0.6063357396844151,y=0.9440640953293378 -a=wye,b=zee,i=6704,x=0.9929065501226577,y=0.9563353213992627 -a=zee,b=zee,i=6705,x=0.6695263366217671,y=0.9094821746571289 -a=eks,b=hat,i=6706,x=0.6005219270357064,y=0.7674256844260718 -a=eks,b=wye,i=6708,x=0.3630047546497195,y=0.3731502489099452 -a=pan,b=wye,i=6709,x=0.6499789136488362,y=0.9975126213435949 -a=pan,b=eks,i=6710,x=0.9822306336820864,y=0.9518481162696052 -a=hat,b=eks,i=6712,x=0.0038597545092279306,y=0.04201771404673427 -a=hat,b=hat,i=6713,x=0.4327034173748717,y=0.40765932026954144 -a=pan,b=pan,i=6715,x=0.941886673981322,y=0.6955697200870666 -a=wye,b=eks,i=6716,x=0.7399610338026938,y=0.7410171019957901 -a=wye,b=eks,i=6717,x=0.867978110755599,y=0.5614068975084064 -a=eks,b=zee,i=6720,x=0.14299332956774857,y=0.3448281281418095 -a=zee,b=hat,i=6721,x=0.6375447951528392,y=0.9688821643544498 -a=wye,b=pan,i=6723,x=0.08857317290220112,y=0.22813936075330932 -a=hat,b=wye,i=6726,x=0.8681656798259132,y=0.5422446735924256 -a=wye,b=hat,i=6728,x=0.19864833682412852,y=0.07849170872015998 -a=zee,b=pan,i=6730,x=0.664189415821601,y=0.9231485351812634 -a=pan,b=eks,i=6731,x=0.3748183297884402,y=0.14651294307202578 -a=hat,b=eks,i=6732,x=0.19051425073038974,y=0.2534461176951027 -a=wye,b=eks,i=6736,x=0.1720144618863838,y=0.07472067325986242 -a=hat,b=hat,i=6740,x=0.1638749831040246,y=0.33942864618967783 -a=eks,b=pan,i=6742,x=0.7821265240696961,y=0.5002704992494771 -a=pan,b=pan,i=6744,x=0.3890975093181427,y=0.13247688252534073 -a=eks,b=eks,i=6745,x=0.17791482999411534,y=0.49908183588985267 -a=zee,b=eks,i=6750,x=0.411125321089135,y=0.47877014881710245 -a=wye,b=pan,i=6751,x=0.5228421813260895,y=0.9476995312395788 -a=eks,b=hat,i=6752,x=0.5272144612869077,y=0.5823689048097198 -a=eks,b=wye,i=6757,x=0.6668899487792558,y=0.6148196125913775 -a=wye,b=eks,i=6758,x=0.24918942240065567,y=0.1175614364985561 -a=hat,b=hat,i=6759,x=0.4409476763420297,y=0.37269928936748364 -a=eks,b=wye,i=6761,x=0.846782848681552,y=0.7680754064510079 -a=hat,b=zee,i=6763,x=0.8827431489428148,y=0.8101223666047421 -a=wye,b=eks,i=6764,x=0.8818772544000334,y=0.5852259091501919 -a=wye,b=zee,i=6769,x=0.015938042152491505,y=0.2467410432381938 -a=zee,b=wye,i=6770,x=0.4647151786207453,y=0.09586765050852464 -a=wye,b=pan,i=6773,x=0.1251517157188331,y=0.14006157275798192 -a=zee,b=eks,i=6775,x=0.7107364083112168,y=0.747744177326698 -a=pan,b=eks,i=6776,x=0.7402366773916875,y=0.5425967566595283 -a=pan,b=pan,i=6777,x=0.8587338035081189,y=0.6815723862967287 -a=hat,b=pan,i=6781,x=0.31100740187371934,y=0.15295409834535245 -a=zee,b=eks,i=6783,x=0.09545968133365756,y=0.010784899546895543 -a=zee,b=wye,i=6784,x=0.609956046414881,y=0.6555640945124119 -a=pan,b=wye,i=6785,x=0.5316777127876826,y=0.6104961546467026 -a=pan,b=wye,i=6786,x=0.25974778249116803,y=0.08881791270926387 -a=wye,b=eks,i=6788,x=0.59700206673727,y=0.5092154392509416 -a=eks,b=hat,i=6789,x=0.11384620831197945,y=0.21498304087430675 -a=zee,b=eks,i=6790,x=0.3259643807042226,y=0.294440283499696 -a=hat,b=pan,i=6791,x=0.3918842930839752,y=0.4866508833195289 -a=pan,b=pan,i=6792,x=0.5301735918581785,y=0.8191767116079914 -a=zee,b=wye,i=6793,x=0.09304197140837533,y=0.41014621328207224 -a=eks,b=wye,i=6796,x=0.5909399906562114,y=0.5580035130979556 -a=eks,b=hat,i=6797,x=0.9632745089330987,y=0.7078513092089819 -a=zee,b=eks,i=6799,x=0.9004852465295646,y=0.9465220966082961 -a=wye,b=zee,i=6800,x=0.24904470404318169,y=0.4920531920025397 -a=pan,b=hat,i=6805,x=0.8362059152851221,y=0.9472897492210541 -a=eks,b=wye,i=6811,x=0.7065407352836623,y=0.8368678138790903 -a=eks,b=eks,i=6813,x=0.22195791037233625,y=0.46000678721121724 -a=zee,b=zee,i=6815,x=0.5000818809944109,y=0.771946292891575 -a=hat,b=wye,i=6817,x=0.8610216667264953,y=0.5382429359595315 -a=eks,b=pan,i=6819,x=0.5703992590220686,y=0.8637215064086881 -a=wye,b=zee,i=6823,x=0.5781208624185773,y=0.8409446241801248 -a=eks,b=hat,i=6824,x=0.43385175975083057,y=0.41792395879700195 -a=zee,b=pan,i=6826,x=0.8340499179886257,y=0.9535536917685269 -a=zee,b=hat,i=6829,x=0.41031480623763106,y=0.45880274972572666 -a=pan,b=pan,i=6830,x=0.1142681517107742,y=0.2829811068526855 -a=hat,b=pan,i=6832,x=0.7805431061337192,y=0.6499156385099167 -a=pan,b=wye,i=6834,x=0.1500861412508071,y=0.4288594929835393 -a=eks,b=eks,i=6836,x=0.8314643867997237,y=0.6792470433081391 -a=hat,b=wye,i=6838,x=0.7770652463104809,y=0.6687521390314989 -a=eks,b=zee,i=6840,x=0.6482286253811516,y=0.8094333984928788 -a=wye,b=pan,i=6841,x=0.2567333227180485,y=0.3632000329956243 -a=wye,b=eks,i=6843,x=0.22133780427833827,y=0.12550147451196636 -a=wye,b=eks,i=6846,x=0.6423397517155203,y=0.8356059098780667 -a=pan,b=hat,i=6848,x=0.13005488453891356,y=0.36376504302138823 -a=pan,b=pan,i=6849,x=0.7292341394730394,y=0.9619604141937782 -a=zee,b=hat,i=6853,x=0.16224652017611052,y=0.3566205026903966 -a=pan,b=pan,i=6854,x=0.7113055088893854,y=0.8848278821601264 -a=hat,b=pan,i=6856,x=0.6726315514891058,y=0.9389924558403268 -a=wye,b=wye,i=6858,x=0.3955235311928522,y=0.1986261607297174 -a=wye,b=pan,i=6859,x=0.3196180023166212,y=0.22620149742138462 -a=eks,b=wye,i=6860,x=0.7484529088599197,y=0.9458674650980478 -a=hat,b=eks,i=6861,x=0.5333359352881868,y=0.6705965726039589 -a=hat,b=eks,i=6864,x=0.5485065278651766,y=0.5820232711323319 -a=zee,b=wye,i=6867,x=0.9102230409548707,y=0.9019213473878609 -a=pan,b=zee,i=6868,x=0.4631144547528713,y=0.17716733576639176 -a=hat,b=eks,i=6869,x=0.2542372110197165,y=0.30416858126881696 -a=pan,b=wye,i=6870,x=0.4253800398968478,y=0.033574775026327885 -a=wye,b=eks,i=6872,x=0.38036352987366395,y=0.46731687201043415 -a=wye,b=eks,i=6873,x=0.9798362101131622,y=0.797643782226173 -a=eks,b=hat,i=6874,x=0.5227336833787608,y=0.9908448955682759 -a=eks,b=zee,i=6875,x=0.606422651768782,y=0.914840315532674 -a=pan,b=hat,i=6876,x=0.5129530277212709,y=0.7790386991794965 -a=zee,b=pan,i=6878,x=0.31397281280064293,y=0.16291546501309395 -a=pan,b=zee,i=6879,x=0.5284562057774806,y=0.7918033883536163 -a=eks,b=wye,i=6880,x=0.5984387679261401,y=0.9753479770314387 -a=zee,b=hat,i=6881,x=0.5862597507571483,y=0.7707420703176064 -a=pan,b=eks,i=6882,x=0.5334986785639318,y=0.9783513827876675 -a=zee,b=wye,i=6883,x=0.7679069545156161,y=0.7810806767827133 -a=hat,b=pan,i=6884,x=0.25121382521102964,y=0.08373878679612079 -a=zee,b=pan,i=6888,x=0.7705250058516857,y=0.9061349225471161 -a=zee,b=hat,i=6896,x=0.7359164967591003,y=0.8293086338798401 -a=zee,b=zee,i=6901,x=0.15447805903030032,y=0.3708113295153489 -a=hat,b=wye,i=6904,x=0.8610376333440763,y=0.7594915846085165 -a=zee,b=pan,i=6905,x=0.2561178270791922,y=0.11749615398320445 -a=wye,b=zee,i=6907,x=0.6367788848968293,y=0.6394774166453675 -a=pan,b=wye,i=6910,x=0.25097439132798516,y=0.0005109887783484313 -a=zee,b=eks,i=6912,x=0.8996806626412216,y=0.8543839233593294 -a=pan,b=zee,i=6913,x=0.6587566128742129,y=0.5632886251369115 -a=eks,b=pan,i=6914,x=0.6621105804379062,y=0.9655406039971886 -a=wye,b=eks,i=6917,x=0.4116075902695022,y=0.28661075899283883 -a=hat,b=zee,i=6918,x=0.9078126587488162,y=0.825042025154357 -a=eks,b=pan,i=6920,x=0.5871441514609353,y=0.8959550649206074 -a=zee,b=wye,i=6921,x=0.5169699337780084,y=0.8908217878266501 -a=hat,b=zee,i=6924,x=0.18898941655772628,y=0.41248127061100026 -a=eks,b=eks,i=6926,x=0.48658959418573866,y=0.12700817464144343 -a=pan,b=pan,i=6927,x=0.2148229483341345,y=0.142698457109815 -a=wye,b=wye,i=6928,x=0.9723961772197747,y=0.9337468605908721 -a=pan,b=hat,i=6929,x=0.39047545698773434,y=0.1014408675739632 -a=eks,b=zee,i=6930,x=0.5526320529536692,y=0.6589359191373861 -a=pan,b=zee,i=6933,x=0.736088726276053,y=0.9511504821090352 -a=pan,b=hat,i=6934,x=0.0735762788752764,y=0.0008249210316072508 -a=hat,b=hat,i=6935,x=0.8448124844892154,y=0.7472136644468284 -a=pan,b=pan,i=6939,x=0.9322271691157334,y=0.5636509019339512 -a=hat,b=eks,i=6941,x=0.7647380306778612,y=0.5588346481843296 -a=hat,b=eks,i=6946,x=0.06859192488355459,y=0.18197505910402123 -a=pan,b=hat,i=6948,x=0.6806028930853153,y=0.5337351071127955 -a=eks,b=wye,i=6950,x=0.5484166834064047,y=0.5444329351784222 -a=pan,b=wye,i=6956,x=0.05509311089172042,y=0.02187042391982985 -a=wye,b=pan,i=6960,x=0.3153717815038891,y=0.09047586220595472 -a=zee,b=wye,i=6961,x=0.6007313242961704,y=0.6613290251670858 -a=pan,b=zee,i=6962,x=0.7601533500363858,y=0.8925522323934668 -a=wye,b=pan,i=6963,x=0.48448541281210233,y=0.41562920864135944 -a=hat,b=eks,i=6964,x=0.4992605837600408,y=0.43605518279149746 -a=wye,b=hat,i=6965,x=0.45740161659615763,y=0.04534932831025773 -a=hat,b=pan,i=6966,x=0.7533879705727782,y=0.5865175721970042 -a=wye,b=wye,i=6969,x=0.31490517543879204,y=0.21016765203059373 -a=eks,b=zee,i=6973,x=0.8858598587998294,y=0.6368695546608352 -a=zee,b=wye,i=6974,x=0.989576281733764,y=0.6583358951055004 -a=wye,b=wye,i=6976,x=0.3024970191010684,y=0.2093604064761977 -a=zee,b=pan,i=6977,x=0.7855530401666628,y=0.9857367912810565 -a=zee,b=hat,i=6979,x=0.236940011648326,y=0.43182187533436656 -a=zee,b=eks,i=6980,x=0.7036947557005062,y=0.8967163177168612 -a=pan,b=eks,i=6982,x=0.0009579203969094507,y=0.4374451455672883 -a=pan,b=eks,i=6983,x=0.414932981812524,y=0.43196390781557925 -a=pan,b=eks,i=6985,x=0.2597251524181662,y=0.17875541966558117 -a=wye,b=pan,i=6986,x=0.397846421602455,y=0.061580742680189204 -a=zee,b=zee,i=6988,x=0.9430266721644799,y=0.5094104013079503 -a=eks,b=hat,i=6989,x=0.3313418699976328,y=0.33567997892328394 -a=eks,b=zee,i=6990,x=0.5148133498496276,y=0.6918563081083983 -a=hat,b=wye,i=6991,x=0.25547073172247026,y=0.20184384726111237 -a=wye,b=wye,i=6993,x=0.8254022878057393,y=0.633291096076743 -a=pan,b=zee,i=6997,x=0.7983517224073071,y=0.5557697277179173 -a=hat,b=wye,i=7002,x=0.41061585650926835,y=0.01643773647124569 -a=hat,b=hat,i=7004,x=0.5167987887837867,y=0.6125153714308963 -a=zee,b=pan,i=7009,x=0.3868986728643612,y=0.32414353523303663 -a=pan,b=wye,i=7012,x=0.718361521407771,y=0.5051204438264707 -a=wye,b=eks,i=7014,x=0.7012074385988786,y=0.5007374216681656 -a=wye,b=eks,i=7019,x=0.3036229968730817,y=0.23518690587775104 -a=zee,b=eks,i=7020,x=0.4316289204904483,y=0.08091854356676809 -a=hat,b=zee,i=7021,x=0.863877436043872,y=0.5856682390415403 -a=pan,b=eks,i=7023,x=0.29791421670042273,y=0.07470613128293369 -a=pan,b=zee,i=7026,x=0.5129987522412781,y=0.6196138088300045 -a=zee,b=eks,i=7028,x=0.5584826667497241,y=0.7683156302547838 -a=hat,b=pan,i=7029,x=0.9655789508856257,y=0.5847058626759788 -a=zee,b=pan,i=7030,x=0.6277332467942169,y=0.6792611974173626 -a=pan,b=wye,i=7031,x=0.6131961433966792,y=0.687915924439632 -a=pan,b=hat,i=7032,x=0.9325179960861075,y=0.9058746805470116 -a=pan,b=zee,i=7037,x=0.33589607439034086,y=0.020535990195571174 -a=zee,b=zee,i=7038,x=0.2760987429128404,y=0.4680732030302005 -a=hat,b=wye,i=7039,x=0.7395205341627435,y=0.7057475465708692 -a=zee,b=eks,i=7043,x=0.9227470147480153,y=0.7805110973249272 -a=eks,b=hat,i=7044,x=0.9125698654022647,y=0.6003269419507505 -a=pan,b=pan,i=7045,x=0.9149867225420508,y=0.8482623017705537 -a=zee,b=hat,i=7047,x=0.3821711240746809,y=0.20003488070361253 -a=wye,b=zee,i=7048,x=0.20803556414051616,y=0.2099912026909062 -a=hat,b=wye,i=7049,x=0.670378278494791,y=0.7076636735945074 -a=hat,b=zee,i=7050,x=0.23723928107944892,y=0.14022716241391253 -a=pan,b=pan,i=7052,x=0.2551692350228507,y=0.30169763443298714 -a=pan,b=zee,i=7055,x=0.3237065988296146,y=0.16406274536872145 -a=eks,b=hat,i=7059,x=0.920076220476711,y=0.5876972502303767 -a=hat,b=eks,i=7060,x=0.9346394642794167,y=0.6814288404781228 -a=pan,b=wye,i=7063,x=0.39952219916088616,y=0.40591491856978035 -a=hat,b=zee,i=7064,x=0.14067685725223567,y=0.3092246716986138 -a=pan,b=wye,i=7068,x=0.4549499403459556,y=0.49621131228697424 -a=eks,b=pan,i=7069,x=0.9886201663452385,y=0.9412530719900734 -a=wye,b=hat,i=7070,x=0.665041142898201,y=0.9595343437808125 -a=pan,b=zee,i=7072,x=0.2724259823227272,y=0.30192794453375993 -a=eks,b=eks,i=7074,x=0.8193690697522501,y=0.503433259768719 -a=hat,b=eks,i=7075,x=0.4081232497868382,y=0.44918917218867327 -a=pan,b=hat,i=7076,x=0.39435745153096624,y=0.2533507793160499 -a=zee,b=eks,i=7077,x=0.9030855046114618,y=0.7353402992136046 -a=zee,b=zee,i=7078,x=0.28428013807040586,y=0.3777563622186406 -a=wye,b=pan,i=7081,x=0.5027581392155828,y=0.5918516944292527 -a=wye,b=pan,i=7083,x=0.6981142504634895,y=0.5779284385442213 -a=eks,b=hat,i=7084,x=0.2854516522673507,y=0.20310209686600733 -a=hat,b=zee,i=7086,x=0.9886292059134817,y=0.7404507111518657 -a=eks,b=zee,i=7089,x=0.2711607560909379,y=0.24024418535758385 -a=hat,b=eks,i=7091,x=0.7757377070780304,y=0.9407578395112463 -a=pan,b=hat,i=7093,x=0.6397441933292296,y=0.9829200046878069 -a=wye,b=pan,i=7096,x=0.07890849487936957,y=0.41485920875555027 -a=wye,b=zee,i=7097,x=0.8196751485720796,y=0.9182400853440643 -a=wye,b=pan,i=7098,x=0.06668588398001474,y=0.26172812514471555 -a=eks,b=hat,i=7099,x=0.22008401563656388,y=0.04305085018273014 -a=zee,b=hat,i=7105,x=0.2980064088882294,y=0.3531576463065931 -a=zee,b=zee,i=7106,x=0.9884822924298222,y=0.9742451923102192 -a=pan,b=wye,i=7107,x=0.2998044704471554,y=0.2269111558178346 -a=eks,b=zee,i=7109,x=0.6665600019130787,y=0.5478452197045156 -a=pan,b=hat,i=7111,x=0.06963315314613838,y=0.11691071591581381 -a=wye,b=wye,i=7112,x=0.5792946910659483,y=0.7652424387264126 -a=eks,b=pan,i=7113,x=0.2918757972941147,y=0.09568558582017328 -a=zee,b=eks,i=7116,x=0.7404888117639189,y=0.7975704275356439 -a=zee,b=wye,i=7117,x=0.3032123219266547,y=0.408039844976006 -a=wye,b=hat,i=7119,x=0.6315033401415422,y=0.9740617533706384 -a=pan,b=wye,i=7120,x=0.5205183279285498,y=0.6711794774673148 -a=pan,b=zee,i=7125,x=0.2551365895416149,y=0.28047087188514475 -a=pan,b=hat,i=7127,x=0.30368095354356406,y=0.2597236612256202 -a=pan,b=zee,i=7131,x=0.19933196272377474,y=0.33283266063310113 -a=pan,b=wye,i=7132,x=0.5712931905065656,y=0.7126877408626767 -a=wye,b=hat,i=7133,x=0.8722812709831377,y=0.7402713360198966 -a=zee,b=zee,i=7134,x=0.8239370005383643,y=0.8999946232295659 -a=hat,b=hat,i=7135,x=0.7884238740570607,y=0.502745899378346 -a=zee,b=eks,i=7136,x=0.1151808584625903,y=0.09114185305034295 -a=hat,b=pan,i=7137,x=0.2542302739150816,y=0.10795409059370309 -a=hat,b=wye,i=7138,x=0.2410727132014231,y=0.4676445777847451 -a=zee,b=wye,i=7140,x=0.1974763738933888,y=0.05233731805135977 -a=hat,b=zee,i=7141,x=0.5122141330634649,y=0.9464876262232287 -a=pan,b=hat,i=7142,x=0.5253509732767064,y=0.8670318755725022 -a=wye,b=hat,i=7143,x=0.21543094473021618,y=0.04601417423771059 -a=zee,b=hat,i=7144,x=0.6991820521352337,y=0.729482196220355 -a=zee,b=pan,i=7146,x=0.9971541764709625,y=0.892947440752753 -a=pan,b=zee,i=7147,x=0.04585989364324272,y=0.09848374190945741 -a=zee,b=zee,i=7148,x=0.08359037777595768,y=0.18397726583989749 -a=zee,b=hat,i=7149,x=0.7990351121845923,y=0.883654825281865 -a=wye,b=pan,i=7153,x=0.6258726536948953,y=0.7945230748164691 -a=zee,b=eks,i=7155,x=0.33789283812701887,y=0.4922604374749663 -a=pan,b=eks,i=7156,x=0.8443027153248559,y=0.6768057967242282 -a=eks,b=wye,i=7159,x=0.3902007098058078,y=0.1663592901985712 -a=hat,b=hat,i=7161,x=0.05527312148960439,y=0.40628388765166956 -a=wye,b=wye,i=7163,x=0.4555929409217334,y=0.46397391790537257 -a=eks,b=pan,i=7164,x=0.5336092896068227,y=0.6717538742842986 -a=pan,b=zee,i=7168,x=0.05484316817552892,y=0.17151702310481431 -a=hat,b=wye,i=7173,x=0.18576991003719212,y=0.32538288858474795 -a=hat,b=eks,i=7175,x=0.8596787945183175,y=0.9376543180536796 -a=wye,b=pan,i=7176,x=0.6724292506877466,y=0.8820892101229925 -a=eks,b=hat,i=7185,x=0.16457422522306786,y=0.3254688160534126 -a=pan,b=pan,i=7186,x=0.09026915761362286,y=0.023448958188875713 -a=hat,b=wye,i=7187,x=0.4560687123084549,y=0.4064263428720335 -a=wye,b=pan,i=7188,x=0.4956424303944521,y=0.2862948969999991 -a=wye,b=eks,i=7191,x=0.40387119430799534,y=0.2671989768915307 -a=hat,b=zee,i=7192,x=0.04140473031764258,y=0.12247713585949505 -a=eks,b=eks,i=7198,x=0.21945638426831482,y=0.02350640610667476 -a=wye,b=pan,i=7201,x=0.9400232704650787,y=0.6360498242547704 -a=zee,b=zee,i=7203,x=0.6196913167679251,y=0.7693669742661702 -a=pan,b=eks,i=7204,x=0.7025276205611544,y=0.5171960435307702 -a=wye,b=pan,i=7208,x=0.49730390768352073,y=0.040387788389040336 -a=wye,b=zee,i=7209,x=0.2990551204662385,y=0.24766816596397379 -a=hat,b=zee,i=7211,x=0.5479599732793081,y=0.7309237182718691 -a=hat,b=hat,i=7212,x=0.11334324090228143,y=0.4449813414016559 -a=wye,b=hat,i=7216,x=0.5252986145121908,y=0.9054934316514225 -a=hat,b=pan,i=7218,x=0.2996125766631278,y=0.4976607588511254 -a=zee,b=zee,i=7219,x=0.6269054706790941,y=0.7732047241313896 -a=zee,b=hat,i=7220,x=0.9218855933251531,y=0.9884286346489324 -a=zee,b=zee,i=7221,x=0.8961118412742498,y=0.5527678285308364 -a=pan,b=hat,i=7222,x=0.06750577252048573,y=0.45278767440580836 -a=eks,b=eks,i=7224,x=0.826281664166814,y=0.7784066577349854 -a=eks,b=eks,i=7227,x=0.5839736448682071,y=0.8252023673907429 -a=eks,b=pan,i=7230,x=0.6437767672345736,y=0.880694505581993 -a=hat,b=eks,i=7231,x=0.8525023870231172,y=0.8371410685258226 -a=eks,b=zee,i=7232,x=0.8665889356718274,y=0.727601457029631 -a=eks,b=eks,i=7234,x=0.24279014390270426,y=0.2483565874207584 -a=hat,b=pan,i=7235,x=0.8801345341211195,y=0.9358790870593957 -a=pan,b=wye,i=7236,x=0.27447738011116474,y=0.004545127562776141 -a=zee,b=zee,i=7237,x=0.4441192412902708,y=0.12641379815166043 -a=zee,b=wye,i=7240,x=0.08769157759149027,y=0.4682424277651016 -a=wye,b=pan,i=7243,x=0.23457496179942383,y=0.25480860225867064 -a=pan,b=wye,i=7244,x=0.33418676914584544,y=0.12547224222781395 -a=eks,b=hat,i=7245,x=0.15591846641848217,y=0.06738895282990076 -a=zee,b=zee,i=7250,x=0.4205283537525053,y=0.017542491951736294 -a=wye,b=zee,i=7251,x=0.03690845523228947,y=0.3207859173250125 -a=pan,b=hat,i=7255,x=0.005529616019901207,y=0.050405481126457485 -a=hat,b=zee,i=7256,x=0.19429528950321628,y=0.2713422241532205 -a=wye,b=zee,i=7257,x=0.030816159583946456,y=0.26057323500261886 -a=eks,b=pan,i=7261,x=0.5956552210056466,y=0.6731134108078785 -a=wye,b=zee,i=7263,x=0.7738670394914589,y=0.7776575420356829 -a=pan,b=zee,i=7266,x=0.29284541534943886,y=0.302297804948473 -a=hat,b=wye,i=7273,x=0.14732182908248415,y=0.15766209607019577 -a=zee,b=hat,i=7274,x=0.12912926442853778,y=0.4373967289737535 -a=pan,b=wye,i=7278,x=0.8504546169336947,y=0.8944056123200194 -a=pan,b=pan,i=7281,x=0.8126567917280336,y=0.8074968827433902 -a=wye,b=wye,i=7283,x=0.7932471858732224,y=0.799314077275886 -a=zee,b=pan,i=7284,x=0.9156868185576506,y=0.8532083341105031 -a=pan,b=eks,i=7285,x=0.6782016255263672,y=0.6826685678107132 -a=zee,b=hat,i=7287,x=0.1793121692955475,y=0.15066781644968152 -a=pan,b=pan,i=7289,x=0.5648161072496519,y=0.5225373033056284 -a=zee,b=hat,i=7291,x=0.4416432361854393,y=0.4815754525534033 -a=pan,b=pan,i=7292,x=0.7818043909150125,y=0.8301584593837131 -a=wye,b=hat,i=7296,x=0.06387677434814132,y=0.4016686557239688 -a=eks,b=zee,i=7301,x=0.24231768726605574,y=0.36168589987653654 -a=pan,b=wye,i=7302,x=0.9493279693158848,y=0.9320553760871662 -a=zee,b=pan,i=7304,x=0.6353829183388288,y=0.7926738022346027 -a=pan,b=hat,i=7305,x=0.5874095716972196,y=0.7353421801026144 -a=wye,b=hat,i=7312,x=0.23122127585115393,y=0.34710066461942035 -a=hat,b=hat,i=7313,x=0.04440593404771587,y=0.37885696420400083 -a=pan,b=hat,i=7314,x=0.11943754790139005,y=0.36148458916104687 -a=hat,b=wye,i=7315,x=0.762849509523023,y=0.5445776666095938 -a=wye,b=hat,i=7316,x=0.49431226962351105,y=0.20765083254084993 -a=eks,b=wye,i=7319,x=0.7931636018175485,y=0.6139112136646976 -a=hat,b=hat,i=7320,x=0.39178985057319626,y=0.23236564180125518 -a=wye,b=wye,i=7321,x=0.35700901065371815,y=0.28320908292909874 -a=pan,b=eks,i=7322,x=0.23434957604819473,y=0.051931896713069414 -a=wye,b=zee,i=7324,x=0.46590974940880736,y=0.38852539050053736 -a=hat,b=hat,i=7328,x=0.5360492386373142,y=0.6804516078113585 -a=wye,b=eks,i=7329,x=0.5479278609035699,y=0.6395949329290961 -a=eks,b=hat,i=7331,x=0.788081413287463,y=0.8378548167327706 -a=wye,b=eks,i=7333,x=0.23109457565661884,y=0.175253032327905 -a=eks,b=eks,i=7334,x=0.5399986455657582,y=0.8158128369790969 -a=pan,b=wye,i=7335,x=0.2567672400806126,y=0.2775523933001237 -a=pan,b=pan,i=7337,x=0.03345300533476314,y=0.05011040908993403 -a=eks,b=wye,i=7339,x=0.7149884797875254,y=0.5780977956467382 -a=pan,b=eks,i=7342,x=0.32087613651983915,y=0.33882735674733244 -a=pan,b=hat,i=7343,x=0.9718021240386961,y=0.8360987881082459 -a=pan,b=zee,i=7344,x=0.7960579191229258,y=0.8642875358044435 -a=hat,b=eks,i=7346,x=0.9392077077039757,y=0.869513883344899 -a=zee,b=pan,i=7347,x=0.5598151935312621,y=0.9371568081140333 -a=hat,b=pan,i=7348,x=0.5273520540957175,y=0.9743536695566267 -a=zee,b=pan,i=7349,x=0.9798614924191777,y=0.661939043406021 -a=wye,b=wye,i=7352,x=0.0924480571001528,y=0.30109533355539897 -a=pan,b=wye,i=7353,x=0.7001693740890388,y=0.7313365122301939 -a=zee,b=zee,i=7357,x=0.37772059495645105,y=0.04160047639165676 -a=eks,b=pan,i=7358,x=0.20000198658880186,y=0.2727601315820374 -a=zee,b=zee,i=7359,x=0.8789933703062237,y=0.787471191499597 -a=zee,b=hat,i=7361,x=0.03789515978860469,y=0.08906319847440858 -a=zee,b=pan,i=7362,x=0.37791224094768805,y=0.035794629838716285 -a=zee,b=pan,i=7366,x=0.7326832606913403,y=0.988312668973181 -a=zee,b=zee,i=7370,x=0.7741716706994631,y=0.8036145555008443 -a=zee,b=hat,i=7371,x=0.4507985912029725,y=0.3077642021954843 -a=pan,b=pan,i=7372,x=0.7704918547993125,y=0.9834514670413425 -a=eks,b=eks,i=7373,x=0.4293751563574991,y=0.321596575054345 -a=wye,b=zee,i=7374,x=0.551952261755126,y=0.5902774680877885 -a=hat,b=pan,i=7378,x=0.10026227651385622,y=0.04421109516628252 -a=pan,b=wye,i=7383,x=0.8494039628427111,y=0.8499184581272037 -a=pan,b=pan,i=7384,x=0.147877939581611,y=0.3802766658466368 -a=pan,b=eks,i=7391,x=0.4877630118621793,y=0.2703969185758941 -a=eks,b=zee,i=7392,x=0.47928188791181825,y=0.4019006064467472 -a=pan,b=zee,i=7394,x=0.7577687447939129,y=0.8939904227639627 -a=wye,b=pan,i=7400,x=0.6413551187597212,y=0.8585006139152228 -a=pan,b=zee,i=7401,x=0.7038547368085565,y=0.833002029439337 -a=eks,b=hat,i=7403,x=0.8360641078807856,y=0.9076959476149424 -a=wye,b=zee,i=7404,x=0.8798482207846597,y=0.980841539034285 -a=pan,b=eks,i=7405,x=0.6745743258945766,y=0.7867105500751859 -a=hat,b=wye,i=7408,x=0.9529062878494667,y=0.7852866253859588 -a=eks,b=pan,i=7409,x=0.7981122558329,y=0.6186019487821701 -a=pan,b=wye,i=7412,x=0.6977929179546933,y=0.5888437383863911 -a=wye,b=hat,i=7414,x=0.8736572008864342,y=0.5573924644600762 -a=wye,b=wye,i=7415,x=0.30171840067278866,y=0.3419586030343307 -a=pan,b=wye,i=7416,x=0.2585223323598659,y=0.3463024564198399 -a=hat,b=eks,i=7417,x=0.3785664786635482,y=0.26018775063772737 -a=wye,b=pan,i=7420,x=0.637403401738078,y=0.8374737656276083 -a=zee,b=zee,i=7421,x=0.27260075448645904,y=0.40666948184724905 -a=wye,b=wye,i=7422,x=0.23158788759518745,y=0.2878292702486247 -a=wye,b=hat,i=7423,x=0.65748564141991,y=0.991048470406043 -a=eks,b=hat,i=7431,x=0.42045666700455464,y=0.1678609743716658 -a=wye,b=pan,i=7437,x=0.9282262872069705,y=0.6360386793524121 -a=pan,b=wye,i=7438,x=0.14231386871466345,y=0.4954949252707901 -a=hat,b=zee,i=7439,x=0.3598352944100318,y=0.24656543972679557 -a=zee,b=wye,i=7442,x=0.6608160620662386,y=0.5974595563363765 -a=hat,b=wye,i=7443,x=0.25082061911407305,y=0.21021328972399989 -a=pan,b=zee,i=7444,x=0.3397136877438124,y=0.2183579843750636 -a=zee,b=wye,i=7446,x=0.48989555445269983,y=0.4667529417156665 -a=pan,b=pan,i=7448,x=0.2640997209164132,y=0.21566634091032355 -a=wye,b=pan,i=7449,x=0.8358772139168086,y=0.5804404380403491 -a=wye,b=eks,i=7451,x=0.8347006203497817,y=0.9777231624470996 -a=pan,b=hat,i=7454,x=0.5194182222148909,y=0.7430038847189214 -a=wye,b=zee,i=7457,x=0.33342706113360265,y=0.14501891527781052 -a=eks,b=eks,i=7458,x=0.5811068614884891,y=0.664734231079448 -a=pan,b=pan,i=7460,x=0.35138591198463265,y=0.21244588228015993 -a=pan,b=pan,i=7462,x=0.6618404094367076,y=0.8219415456549093 -a=wye,b=hat,i=7463,x=0.6072686833968383,y=0.7123986333317 -a=pan,b=pan,i=7464,x=0.20391564584771982,y=0.016010952251377497 -a=eks,b=wye,i=7473,x=0.05762456751144174,y=0.28964111938628945 -a=zee,b=hat,i=7474,x=0.43396734243561297,y=0.14885801202307214 -a=eks,b=pan,i=7475,x=0.6722348646450019,y=0.7590858841092192 -a=wye,b=eks,i=7477,x=0.2981113055444685,y=0.3118479248083458 -a=eks,b=zee,i=7478,x=0.7409323823493578,y=0.7821738405034923 -a=eks,b=pan,i=7479,x=0.9488581319420917,y=0.5706834161873786 -a=eks,b=hat,i=7480,x=0.02963041418290202,y=0.31020752876337365 -a=eks,b=hat,i=7482,x=0.5358070419986188,y=0.9271364146014381 -a=pan,b=hat,i=7484,x=0.9277546187980327,y=0.6036400626061248 -a=zee,b=wye,i=7487,x=0.06930153211010659,y=0.40332380041726024 -a=hat,b=pan,i=7491,x=0.6815182530961382,y=0.9995542599759397 -a=hat,b=wye,i=7497,x=0.01901911173549864,y=0.12188494912380243 -a=zee,b=wye,i=7498,x=0.9598078762930742,y=0.9526096866376772 -a=hat,b=wye,i=7499,x=0.636327994634104,y=0.5920454180111085 -a=eks,b=pan,i=7500,x=0.28545374834074233,y=0.23198097536923323 -a=zee,b=hat,i=7503,x=0.7352529827218478,y=0.629380067609114 -a=pan,b=wye,i=7504,x=0.8333715164315797,y=0.9451336949095434 -a=zee,b=pan,i=7505,x=0.564057939908022,y=0.5334065367359347 -a=hat,b=pan,i=7507,x=0.2115605362533587,y=0.17174864475858942 -a=wye,b=eks,i=7508,x=0.5483107008409311,y=0.887289998494882 -a=eks,b=pan,i=7509,x=0.7069484914746176,y=0.782150154038626 -a=wye,b=eks,i=7510,x=0.6248444849216757,y=0.6630576924648813 -a=hat,b=wye,i=7513,x=0.5412688517812235,y=0.5262389205562669 -a=wye,b=hat,i=7515,x=0.9897486946692156,y=0.8560315264830626 -a=wye,b=zee,i=7516,x=0.8259254313902334,y=0.7412888906117227 -a=pan,b=pan,i=7517,x=0.7516545627381832,y=0.7262369325855629 -a=pan,b=hat,i=7523,x=0.7491239851649556,y=0.9869320105885282 -a=pan,b=zee,i=7524,x=0.8170930769042274,y=0.9831655236845562 -a=pan,b=hat,i=7526,x=0.6842184815608053,y=0.5413631696210732 -a=eks,b=zee,i=7528,x=0.6805617035261402,y=0.9357708602507883 -a=zee,b=wye,i=7530,x=0.7097075423244159,y=0.9664504052194537 -a=hat,b=zee,i=7531,x=0.2229334385915317,y=0.3284190225602506 -a=eks,b=wye,i=7532,x=0.5296457339778697,y=0.5356809514905594 -a=wye,b=pan,i=7533,x=0.7835022697060869,y=0.5470260523424321 -a=zee,b=wye,i=7536,x=0.977198066335277,y=0.841156212711556 -a=zee,b=zee,i=7537,x=0.45067646463535815,y=0.4846053315615896 -a=pan,b=pan,i=7540,x=0.9220993601302719,y=0.7568665001928173 -a=hat,b=hat,i=7543,x=0.6227885940707738,y=0.6684149004769806 -a=wye,b=eks,i=7545,x=0.022518661429014375,y=0.2901112553388282 -a=hat,b=hat,i=7547,x=0.8215672815436097,y=0.5614013828250404 -a=hat,b=hat,i=7548,x=0.19269905065728477,y=0.011009649002469146 -a=eks,b=wye,i=7549,x=0.7325288469158541,y=0.565544676390673 -a=wye,b=eks,i=7552,x=0.8469802002512098,y=0.815964077738481 -a=eks,b=wye,i=7554,x=0.7339079956532404,y=0.8285558028377102 -a=pan,b=zee,i=7555,x=0.30709526445187707,y=0.4817130705295929 -a=wye,b=hat,i=7558,x=0.6038851752558235,y=0.9009580077702348 -a=eks,b=hat,i=7560,x=0.10199887225407722,y=0.31764039641093744 -a=zee,b=pan,i=7567,x=0.4193214026807677,y=0.394167835232068 -a=zee,b=hat,i=7569,x=0.09822492892655521,y=0.05447501970715207 -a=zee,b=zee,i=7570,x=0.12789683952220732,y=0.25490189761435 -a=wye,b=wye,i=7573,x=0.92008458670793,y=0.6955528667719472 -a=eks,b=pan,i=7574,x=0.14478437931649057,y=0.0941855027104701 -a=eks,b=zee,i=7577,x=0.14231014763644978,y=0.4717127637144344 -a=pan,b=eks,i=7580,x=0.1600952140568258,y=0.4045418954164892 -a=wye,b=wye,i=7581,x=0.2175313107798721,y=0.3671212999414236 -a=pan,b=hat,i=7582,x=0.2569787233680674,y=0.2148575227188957 -a=wye,b=zee,i=7585,x=0.13751395044042258,y=0.034975186947673986 -a=hat,b=hat,i=7586,x=0.5889920011506182,y=0.8078788341273992 -a=zee,b=hat,i=7587,x=0.03280836042125246,y=0.41282684631580824 -a=zee,b=hat,i=7589,x=0.7770699494898016,y=0.7790651064661754 -a=zee,b=zee,i=7592,x=0.35146635664435344,y=0.4539874980554838 -a=wye,b=eks,i=7593,x=0.04430024252919407,y=0.1263254223270297 -a=eks,b=zee,i=7596,x=0.5712662107490064,y=0.6090688560627531 -a=wye,b=eks,i=7597,x=0.4310431117208252,y=0.08951460884563855 -a=pan,b=wye,i=7599,x=0.9608268596180474,y=0.9070684642079544 -a=eks,b=eks,i=7600,x=0.5242885778608762,y=0.7826689200927383 -a=wye,b=pan,i=7601,x=0.9208150605661285,y=0.5589433846274124 -a=pan,b=hat,i=7605,x=0.3084442479608156,y=0.29052958365713977 -a=zee,b=pan,i=7606,x=0.39737589478806956,y=0.02851924706651765 -a=pan,b=wye,i=7607,x=0.2998113807261462,y=0.47793002819857533 -a=pan,b=wye,i=7608,x=0.7117542206974444,y=0.7970333994894653 -a=zee,b=pan,i=7609,x=0.39637889658629055,y=0.15152040674745126 -a=zee,b=wye,i=7612,x=0.3473870036653739,y=0.03835525794322947 -a=eks,b=wye,i=7613,x=0.051620293140943185,y=0.3354589495771291 -a=hat,b=eks,i=7618,x=0.23737869189758654,y=0.43340937762837506 -a=zee,b=hat,i=7619,x=0.0396492782791249,y=0.21046790711790042 -a=zee,b=wye,i=7623,x=0.8476652404295622,y=0.5532359995865707 -a=zee,b=wye,i=7625,x=0.6630299534680688,y=0.9316352338897794 -a=zee,b=hat,i=7627,x=0.3510535767246904,y=0.3060628840965116 -a=hat,b=hat,i=7629,x=0.6503893869201249,y=0.8748121320804191 -a=pan,b=pan,i=7631,x=0.27145158019948934,y=0.09516187714787117 -a=wye,b=zee,i=7632,x=0.734823995296927,y=0.7719486421533686 -a=eks,b=wye,i=7634,x=0.7109688223985979,y=0.7976941367774835 -a=zee,b=zee,i=7635,x=0.12557655765488285,y=0.11534164357950183 -a=pan,b=hat,i=7637,x=0.9106017109900336,y=0.8891547034705604 -a=eks,b=hat,i=7639,x=0.771170174812707,y=0.7659520407198543 -a=eks,b=wye,i=7640,x=0.2743403725668617,y=0.29487651020724404 -a=pan,b=zee,i=7641,x=0.9381993656017179,y=0.6132694517353006 -a=eks,b=pan,i=7643,x=0.47586159706318876,y=0.4962125479739936 -a=wye,b=zee,i=7644,x=0.6513731813421505,y=0.9956216673837286 -a=zee,b=wye,i=7648,x=0.6798736010037264,y=0.9310702986321819 -a=wye,b=wye,i=7653,x=0.5261687377247655,y=0.9662557892207575 -a=pan,b=wye,i=7658,x=0.3621794133271582,y=0.38650038828351596 -a=pan,b=pan,i=7660,x=0.5441433972504542,y=0.9469895242558711 -a=zee,b=hat,i=7661,x=0.9408442476780763,y=0.8023490934603362 -a=zee,b=eks,i=7667,x=0.03246665173355623,y=0.4911639950418465 -a=pan,b=hat,i=7671,x=0.5479425830973824,y=0.6792965466963522 -a=wye,b=wye,i=7674,x=0.8942818883713989,y=0.5212590944649815 -a=eks,b=pan,i=7676,x=0.44645752932549043,y=0.031497838025275615 -a=eks,b=hat,i=7678,x=0.07578434084199792,y=0.22918239952964947 -a=wye,b=hat,i=7679,x=0.9686531523418166,y=0.924678615947144 -a=wye,b=hat,i=7680,x=0.6280201487984101,y=0.536246349153707 -a=wye,b=hat,i=7682,x=0.24098953071009122,y=0.26190037231185814 -a=zee,b=pan,i=7685,x=0.09709731100349062,y=0.4690475302436993 -a=pan,b=eks,i=7686,x=0.18978586580625822,y=0.18115920896147264 -a=wye,b=zee,i=7687,x=0.3434686533925685,y=0.48726381835108046 -a=eks,b=hat,i=7689,x=0.17159448083555107,y=0.045442427612649494 -a=hat,b=zee,i=7690,x=0.7259375308340535,y=0.7674839756219988 -a=zee,b=wye,i=7694,x=0.3060398953875496,y=0.10472339189986246 -a=eks,b=pan,i=7700,x=0.7077775737786727,y=0.7272353949934527 -a=wye,b=pan,i=7702,x=0.6934052269305254,y=0.7343693194312434 -a=eks,b=eks,i=7704,x=0.76786474676413,y=0.8734911204128757 -a=eks,b=wye,i=7708,x=0.1593131070189654,y=0.21618160132947373 -a=eks,b=pan,i=7709,x=0.021236282778372417,y=0.3980616560952607 -a=pan,b=pan,i=7710,x=0.6454947652276057,y=0.5934369662779847 -a=pan,b=hat,i=7712,x=0.4196809161822014,y=0.26377711630821754 -a=hat,b=hat,i=7715,x=0.6233765313325004,y=0.5758791846152675 -a=hat,b=wye,i=7717,x=0.2286520253814175,y=0.1192319014188804 -a=eks,b=pan,i=7723,x=0.3209098916589238,y=0.4109567715356973 -a=hat,b=wye,i=7725,x=0.1378541730969839,y=0.25911129591737747 -a=pan,b=pan,i=7726,x=0.43414990019558963,y=0.1556380176176868 -a=eks,b=zee,i=7728,x=0.5397828066703505,y=0.6535807927478277 -a=zee,b=zee,i=7730,x=0.17826971421632076,y=0.23305955441707682 -a=hat,b=eks,i=7731,x=0.6064367170765328,y=0.5843998077541726 -a=hat,b=pan,i=7733,x=0.15752257838130168,y=0.025328573078963523 -a=hat,b=hat,i=7735,x=0.9286394794387348,y=0.9849690205615684 -a=wye,b=zee,i=7736,x=0.5283513685317409,y=0.8859340359150333 -a=wye,b=eks,i=7740,x=0.7528542161787996,y=0.7648364405523831 -a=eks,b=eks,i=7745,x=0.3215874010779871,y=0.2780127707789244 -a=eks,b=eks,i=7746,x=0.35282776725789056,y=0.015349081732579983 -a=zee,b=eks,i=7747,x=0.4180982192655389,y=0.2733251523581718 -a=wye,b=wye,i=7751,x=0.9578808895640281,y=0.567472797993126 -a=eks,b=wye,i=7752,x=0.8308158486543955,y=0.7251988641133165 -a=eks,b=hat,i=7754,x=0.5569680022127645,y=0.5333129600306122 -a=eks,b=pan,i=7755,x=0.3881304412114248,y=0.4050350844434646 -a=zee,b=pan,i=7756,x=0.2999624778639135,y=0.3422859654759408 -a=hat,b=eks,i=7757,x=0.005675684156441596,y=0.4710155431561027 -a=hat,b=pan,i=7759,x=0.2655863070154898,y=0.4394097550698016 -a=zee,b=pan,i=7760,x=0.09922636178391386,y=0.3133271646647967 -a=hat,b=pan,i=7761,x=0.5937279590019037,y=0.9494399455643315 -a=eks,b=pan,i=7762,x=0.9358045588817545,y=0.7330851249844436 -a=zee,b=pan,i=7764,x=0.48750871272402196,y=0.22236263541673462 -a=eks,b=eks,i=7767,x=0.53797481529119,y=0.9465659178026697 -a=wye,b=hat,i=7769,x=0.3705583652673885,y=0.059144918778647027 -a=pan,b=zee,i=7770,x=0.6956017564216889,y=0.66737949839894 -a=hat,b=eks,i=7771,x=0.756025188553685,y=0.8094953852781318 -a=pan,b=eks,i=7774,x=0.8611049069366612,y=0.7289618171406003 -a=hat,b=hat,i=7776,x=0.8353731209463556,y=0.766113750196805 -a=wye,b=pan,i=7777,x=0.05858955413860256,y=0.12058424529655198 -a=wye,b=hat,i=7779,x=0.6525057028901559,y=0.827506650684489 -a=zee,b=wye,i=7781,x=0.8785183426416252,y=0.5929085468141393 -a=hat,b=pan,i=7783,x=0.2970040422341498,y=0.3987945132487777 -a=eks,b=pan,i=7784,x=0.5773221928392703,y=0.984120457296803 -a=eks,b=eks,i=7791,x=0.41888693176987457,y=0.12945875791772954 -a=hat,b=zee,i=7793,x=0.958394958736606,y=0.8162724775424932 -a=wye,b=wye,i=7796,x=0.7618404269252146,y=0.7082734662093254 -a=hat,b=eks,i=7797,x=0.3339037394632195,y=0.33041712223471265 -a=pan,b=eks,i=7798,x=0.8964629088574175,y=0.6314628948974991 -a=eks,b=wye,i=7801,x=0.2768061453774291,y=0.11197920863328137 -a=zee,b=pan,i=7802,x=0.8246321893741126,y=0.9437960471953348 -a=hat,b=zee,i=7805,x=0.7220810582203347,y=0.7321859764651767 -a=wye,b=wye,i=7809,x=0.00751279921360315,y=0.10191418158652688 -a=wye,b=pan,i=7810,x=0.22896336477318813,y=0.3855317875005415 -a=pan,b=hat,i=7811,x=0.2803772001943151,y=0.06126665020709965 -a=pan,b=wye,i=7812,x=0.6626056412742908,y=0.8119248457418577 -a=zee,b=wye,i=7813,x=0.2839449326479042,y=0.21823946066739763 -a=wye,b=pan,i=7815,x=0.29912422376234227,y=0.031086896342097492 -a=wye,b=hat,i=7816,x=0.9864077710445651,y=0.7857310073202174 -a=zee,b=pan,i=7820,x=0.6449176000624874,y=0.6911176673897844 -a=zee,b=zee,i=7821,x=0.6652689102876012,y=0.8739835083180177 -a=zee,b=eks,i=7822,x=0.6987205194846695,y=0.5636198949945938 -a=zee,b=zee,i=7827,x=0.5476130433221185,y=0.5402862105818173 -a=zee,b=hat,i=7828,x=0.9857371922518141,y=0.9407026776406513 -a=zee,b=zee,i=7830,x=0.00819682639104835,y=0.4240387399947815 -a=pan,b=eks,i=7831,x=0.7227922598778895,y=0.8810129413735137 -a=wye,b=eks,i=7832,x=0.44768287987315436,y=0.06097808844991881 -a=eks,b=wye,i=7840,x=0.15083338360252196,y=0.4677170605064366 -a=eks,b=wye,i=7841,x=0.2390993050590302,y=0.4022350252704088 -a=wye,b=wye,i=7842,x=0.03868013977565554,y=0.36213469293451195 -a=hat,b=eks,i=7843,x=0.2326952229877629,y=0.07810622939834866 -a=eks,b=eks,i=7844,x=0.3464583830104778,y=0.24608203542200424 -a=zee,b=hat,i=7845,x=0.6258279281533773,y=0.519301606092353 -a=hat,b=wye,i=7847,x=0.5913920636618824,y=0.869313774493801 -a=zee,b=wye,i=7849,x=0.6838794391771024,y=0.7901996933834754 -a=zee,b=eks,i=7850,x=0.38221395674318315,y=0.4647687529098594 -a=pan,b=hat,i=7851,x=0.7174129864414264,y=0.6977644513609003 -a=wye,b=wye,i=7852,x=0.9237362599816926,y=0.8751578434058209 -a=hat,b=wye,i=7854,x=0.06764752166213406,y=0.2082339516770152 -a=wye,b=hat,i=7856,x=0.7543839227963806,y=0.7708302534568163 -a=pan,b=hat,i=7857,x=0.4184705412704066,y=0.40669972332461846 -a=wye,b=zee,i=7858,x=0.9223976078879647,y=0.5779020996216999 -a=zee,b=zee,i=7859,x=0.10768947209184598,y=0.3365441234115185 -a=hat,b=pan,i=7863,x=0.06726201643453855,y=0.35933180644142315 -a=eks,b=wye,i=7865,x=0.32234768937000546,y=0.02406247620613 -a=zee,b=hat,i=7867,x=0.7690926832290548,y=0.9300355345607946 -a=wye,b=wye,i=7872,x=0.5263396869727451,y=0.6135988456193723 -a=wye,b=pan,i=7879,x=0.3148924229301867,y=0.1872406546524351 -a=eks,b=wye,i=7880,x=0.03633390115689916,y=0.16903851260082725 -a=hat,b=wye,i=7883,x=0.24262458856564295,y=0.01835360943862996 -a=hat,b=zee,i=7886,x=0.794970017782755,y=0.6062492046952036 -a=eks,b=eks,i=7890,x=0.5715742308742378,y=0.8192093346935977 -a=eks,b=wye,i=7894,x=0.5608680829128325,y=0.9585598084195104 -a=eks,b=pan,i=7896,x=0.9913466570743009,y=0.6302035261111584 -a=hat,b=wye,i=7897,x=0.5421196020388044,y=0.8624723374301944 -a=eks,b=hat,i=7904,x=0.2705482127515829,y=0.01971442860313377 -a=zee,b=hat,i=7908,x=0.3610060660850839,y=0.24288129482927623 -a=wye,b=eks,i=7911,x=0.691697756697526,y=0.877518858711515 -a=zee,b=pan,i=7915,x=0.6579171209676669,y=0.6482697150135545 -a=wye,b=eks,i=7916,x=0.2877295918648384,y=0.211059870769302 -a=pan,b=eks,i=7917,x=0.5275793853162087,y=0.8748428200227294 -a=eks,b=eks,i=7918,x=0.12458230242468837,y=0.24069602443528393 -a=zee,b=zee,i=7920,x=0.8985365345616582,y=0.6020907480091875 -a=hat,b=wye,i=7921,x=0.09671063835019511,y=0.4703227983629693 -a=eks,b=pan,i=7924,x=0.3713298410561683,y=0.296460093460874 -a=zee,b=zee,i=7929,x=0.25040361330370065,y=0.3462781056544345 -a=wye,b=eks,i=7930,x=0.5998999740666952,y=0.940489760974054 -a=eks,b=hat,i=7931,x=0.7426863429203551,y=0.5997919568409129 -a=eks,b=wye,i=7932,x=0.7539925055624301,y=0.9588704021223314 -a=eks,b=eks,i=7933,x=0.8496577484419044,y=0.8749858904217946 -a=eks,b=pan,i=7940,x=0.18503477530273849,y=0.2613475073722671 -a=wye,b=pan,i=7944,x=0.6010756954347072,y=0.602663902557592 -a=zee,b=eks,i=7947,x=0.025642761574512285,y=0.18768382301071385 -a=wye,b=pan,i=7950,x=0.13192831258970839,y=0.09974934678356573 -a=eks,b=pan,i=7951,x=0.573135783011619,y=0.5173979516422308 -a=wye,b=pan,i=7952,x=0.9672001578855394,y=0.5999113434317762 -a=hat,b=wye,i=7953,x=0.5332777170304573,y=0.8240541851977825 -a=pan,b=wye,i=7954,x=0.1279461268867662,y=0.3465018420126411 -a=wye,b=zee,i=7958,x=0.7645204491814582,y=0.853303854748976 -a=zee,b=pan,i=7959,x=0.15605455866939177,y=0.46323289916297505 -a=hat,b=zee,i=7960,x=0.16017925473869754,y=0.4529356695213568 -a=wye,b=wye,i=7962,x=0.18404446909382244,y=0.26269521842771504 -a=pan,b=pan,i=7964,x=0.282047967900814,y=0.22212917426772594 -a=eks,b=wye,i=7965,x=0.05872308143086857,y=0.38482704713824056 -a=pan,b=hat,i=7966,x=0.2501049463368379,y=0.39344676758297514 -a=eks,b=wye,i=7970,x=0.7564471093195367,y=0.588547367327297 -a=wye,b=pan,i=7973,x=0.018524216435056196,y=0.08446663540594712 -a=hat,b=zee,i=7974,x=0.24963209679900955,y=0.016049846424579184 -a=hat,b=wye,i=7975,x=0.048154096212748465,y=0.23172149127883657 -a=wye,b=hat,i=7977,x=0.5283629678807258,y=0.8918455631655288 -a=pan,b=wye,i=7978,x=0.5186376529712587,y=0.8811576068202212 -a=zee,b=zee,i=7980,x=0.10892391322425843,y=0.050571608567332116 -a=eks,b=pan,i=7984,x=0.49794222352752093,y=0.19964088700431204 -a=eks,b=eks,i=7985,x=0.25908328241507117,y=0.41719268312114377 -a=wye,b=zee,i=7986,x=0.2712612087411137,y=0.4093087980161978 -a=zee,b=eks,i=7989,x=0.5671275966876752,y=0.6710467056302961 -a=hat,b=eks,i=7991,x=0.9093001304035243,y=0.6454294428509858 -a=zee,b=pan,i=7993,x=0.840708068980671,y=0.7676444206837281 -a=eks,b=pan,i=7994,x=0.13873019879879267,y=0.3541885725000481 -a=wye,b=wye,i=7995,x=0.5556276037973694,y=0.7103742139489323 -a=wye,b=hat,i=7996,x=0.7897718226462853,y=0.7866250828364114 -a=zee,b=pan,i=7998,x=0.6173947671381171,y=0.9099504940374747 -a=pan,b=eks,i=7999,x=0.1904021794562485,y=0.2442456072044632 -a=pan,b=zee,i=8001,x=0.21740880422197573,y=0.009823495326658604 -a=wye,b=zee,i=8002,x=0.8483246353215173,y=0.748697867257607 -a=eks,b=wye,i=8003,x=0.07232519497816503,y=0.01460395395166092 -a=hat,b=eks,i=8007,x=0.37719631868649617,y=0.39591507134214254 -a=hat,b=eks,i=8010,x=0.3187905796970636,y=0.3173506685081655 -a=zee,b=hat,i=8012,x=0.9967455860256934,y=0.846350626099811 -a=hat,b=zee,i=8017,x=0.8289275824108141,y=0.5824677757054623 -a=zee,b=hat,i=8018,x=0.47908711384726377,y=0.2078467393092358 -a=pan,b=hat,i=8019,x=0.03774190681630729,y=0.37562081779173295 -a=hat,b=zee,i=8021,x=0.6283764347998099,y=0.7038955747755151 -a=wye,b=eks,i=8022,x=0.9822305246922711,y=0.9025462559345021 -a=pan,b=hat,i=8024,x=0.7871049381240648,y=0.9157631088161338 -a=hat,b=zee,i=8025,x=0.8464024197077388,y=0.7505262168915832 -a=pan,b=wye,i=8028,x=0.03498607510109997,y=0.19549287051995312 -a=wye,b=pan,i=8030,x=0.8534063530727802,y=0.5216400536886638 -a=zee,b=hat,i=8032,x=0.3470913703916284,y=0.4932013734514763 -a=wye,b=pan,i=8035,x=0.17190090759613674,y=0.02144281885832955 -a=zee,b=zee,i=8037,x=0.7060201401255403,y=0.9669662969793548 -a=pan,b=zee,i=8040,x=0.7171534760409121,y=0.7328586414702059 -a=pan,b=eks,i=8041,x=0.3839508814613577,y=0.30631865487711984 -a=zee,b=wye,i=8042,x=0.3764616704796617,y=0.0013477620094425324 -a=eks,b=wye,i=8046,x=0.6051188687817523,y=0.9131734207686757 -a=zee,b=wye,i=8048,x=0.05640085976332132,y=0.0700003098785944 -a=eks,b=hat,i=8050,x=0.9874222186130187,y=0.8593466056433501 -a=pan,b=pan,i=8052,x=0.6493110423838093,y=0.5347940909170277 -a=wye,b=wye,i=8054,x=0.29645291860851164,y=0.2862439675971603 -a=wye,b=hat,i=8055,x=0.9283998083818392,y=0.9186794272646708 -a=zee,b=eks,i=8056,x=0.21742326077552165,y=0.21215545457837148 -a=wye,b=hat,i=8062,x=0.9226631815117158,y=0.9902149324132298 -a=pan,b=eks,i=8063,x=0.4162908252496399,y=0.18879569170028876 -a=zee,b=zee,i=8068,x=0.1526773413967627,y=0.492096177763767 -a=pan,b=pan,i=8074,x=0.47234873863850657,y=0.4467664305469584 -a=eks,b=zee,i=8075,x=0.8643916283489397,y=0.8421716629916459 -a=pan,b=wye,i=8076,x=0.36180082799458324,y=0.2681111063038798 -a=wye,b=zee,i=8077,x=0.291110312999184,y=0.3904237799736081 -a=pan,b=wye,i=8078,x=0.2285091327975376,y=0.08630172750559728 -a=zee,b=pan,i=8080,x=0.4953944041935031,y=0.13051323550656468 -a=eks,b=hat,i=8084,x=0.6415360825871783,y=0.9093765294473956 -a=wye,b=pan,i=8086,x=0.7089561346111681,y=0.9346147842120147 -a=hat,b=wye,i=8087,x=0.6721158897399355,y=0.8662012495181518 -a=wye,b=zee,i=8092,x=0.3727994612209693,y=0.12052581566020104 -a=eks,b=hat,i=8093,x=0.9315252187513533,y=0.561169216332415 -a=pan,b=eks,i=8098,x=0.02310988069794695,y=0.04436912792860748 -a=pan,b=wye,i=8100,x=0.6977704958793126,y=0.7057512041273386 -a=hat,b=zee,i=8101,x=0.8813156757676321,y=0.538439525268842 -a=pan,b=eks,i=8102,x=0.8253811424731291,y=0.8958384638924397 -a=wye,b=hat,i=8103,x=0.6382749094882392,y=0.7690601393055252 -a=zee,b=zee,i=8104,x=0.19443211144688854,y=0.39629790432524836 -a=zee,b=zee,i=8105,x=0.028359518501674397,y=0.31630049190233644 -a=eks,b=eks,i=8108,x=0.8869014997757403,y=0.6363003729185641 -a=eks,b=eks,i=8112,x=0.31000078368875394,y=0.36138146669138416 -a=eks,b=hat,i=8118,x=0.8557041552120278,y=0.5440118132291639 -a=hat,b=pan,i=8119,x=0.21486759901824792,y=0.3923954170049483 -a=pan,b=zee,i=8120,x=0.6592841558501972,y=0.8794810617469089 -a=eks,b=eks,i=8121,x=0.9178846401562378,y=0.7797206181214477 -a=eks,b=hat,i=8123,x=0.8786712780916176,y=0.5986968292379161 -a=zee,b=hat,i=8125,x=0.7071191860103717,y=0.5065338033789499 -a=wye,b=pan,i=8126,x=0.9928274286457106,y=0.611287542007201 -a=pan,b=pan,i=8127,x=0.7855300117843916,y=0.919185243159261 -a=wye,b=wye,i=8128,x=0.5451094693684497,y=0.6739488974426652 -a=eks,b=eks,i=8129,x=0.4483894040870827,y=0.04899785138545132 -a=wye,b=wye,i=8130,x=0.6304140421100901,y=0.8822571743603556 -a=pan,b=wye,i=8135,x=0.45117859842393093,y=0.2608070414195329 -a=zee,b=zee,i=8136,x=0.6400905852932521,y=0.9035481906697407 -a=eks,b=hat,i=8137,x=0.039487665967159025,y=0.2642755984465909 -a=eks,b=eks,i=8139,x=0.5696036037683665,y=0.5215775669287221 -a=zee,b=wye,i=8142,x=0.6462280039869936,y=0.989075899835102 -a=pan,b=zee,i=8143,x=0.03802909555431522,y=0.0805330261761773 -a=pan,b=wye,i=8144,x=0.7168864018283236,y=0.9743458426619153 -a=hat,b=wye,i=8146,x=0.6466004179249605,y=0.6476130238612243 -a=eks,b=zee,i=8149,x=0.9838548523184443,y=0.6613857827470255 -a=eks,b=hat,i=8150,x=0.42800158894759266,y=0.13739447644695857 -a=zee,b=eks,i=8152,x=0.6420074465872548,y=0.5270375969424234 -a=hat,b=pan,i=8155,x=0.6975376085727898,y=0.6899571370767156 -a=zee,b=zee,i=8156,x=0.6395251098634284,y=0.5644973057197734 -a=eks,b=wye,i=8158,x=0.8469059054134236,y=0.9101861362422637 -a=zee,b=wye,i=8161,x=0.7550762971732712,y=0.8530495051917243 -a=zee,b=eks,i=8164,x=0.3607826318282279,y=0.1255618535732741 -a=eks,b=pan,i=8169,x=0.7194305802045211,y=0.9549210116328868 -a=pan,b=zee,i=8175,x=0.5756118666838461,y=0.6166940778091887 -a=hat,b=wye,i=8176,x=0.8316169809953903,y=0.7727468837518336 -a=hat,b=wye,i=8179,x=0.6913338216581719,y=0.8634446415532928 -a=hat,b=hat,i=8181,x=0.23955047854083944,y=0.27040254626774474 -a=zee,b=hat,i=8183,x=0.5126902650356464,y=0.8692712883907214 -a=eks,b=hat,i=8185,x=0.8449937251277326,y=0.6863834790266286 -a=zee,b=zee,i=8188,x=0.8188229466265301,y=0.7731986253520043 -a=zee,b=eks,i=8189,x=0.21859629681055648,y=0.04545680236762617 -a=wye,b=eks,i=8190,x=0.17387577778883723,y=0.3600963171444731 -a=zee,b=zee,i=8191,x=0.6027946184126483,y=0.7560104230688947 -a=wye,b=pan,i=8192,x=0.5268204744299162,y=0.7467950199333838 -a=pan,b=pan,i=8197,x=0.4524152227370508,y=0.2620560509511556 -a=pan,b=eks,i=8198,x=0.895911910015345,y=0.9918773365972562 -a=wye,b=hat,i=8199,x=0.7136636567819744,y=0.7470766277154778 -a=hat,b=pan,i=8200,x=0.4231374284492073,y=0.1546230087665409 -a=zee,b=zee,i=8201,x=0.7750292191321659,y=0.8295732493514495 -a=eks,b=wye,i=8202,x=0.36911480147216946,y=0.18354328249876783 -a=pan,b=eks,i=8204,x=0.6300000735055588,y=0.5097476114683049 -a=wye,b=zee,i=8205,x=0.6442554149020752,y=0.6779628314804215 -a=pan,b=hat,i=8208,x=0.7495304237104456,y=0.7417705075817802 -a=hat,b=pan,i=8211,x=0.11189505956227741,y=0.4621617318098107 -a=zee,b=eks,i=8212,x=0.09903637464949222,y=0.11847710838278536 -a=zee,b=eks,i=8213,x=0.6131401826730208,y=0.5022261795262266 -a=zee,b=pan,i=8216,x=0.10912632587239346,y=0.23098909374573406 -a=hat,b=pan,i=8219,x=0.3322693803060234,y=0.0076976965775436 -a=hat,b=hat,i=8221,x=0.046602995923670676,y=0.09042940585063108 -a=hat,b=zee,i=8225,x=0.3176890506590573,y=0.04443659691703017 -a=wye,b=hat,i=8229,x=0.4802812953776502,y=0.28698445483944135 -a=zee,b=eks,i=8230,x=0.37256536791796446,y=0.22484134058612737 -a=hat,b=pan,i=8232,x=0.053356023845203326,y=0.20750162756833523 -a=pan,b=wye,i=8233,x=0.01730056600220997,y=0.4811950137685327 -a=hat,b=zee,i=8235,x=0.5760269820743364,y=0.9876933845887379 -a=pan,b=wye,i=8237,x=0.32216831192867235,y=0.4489268007125685 -a=zee,b=zee,i=8239,x=0.8722145698985853,y=0.5243287664361148 -a=hat,b=eks,i=8240,x=0.3119317638364195,y=0.03153083991370387 -a=pan,b=pan,i=8242,x=0.6284004646755453,y=0.5188512495739586 -a=zee,b=zee,i=8244,x=0.5648821749696828,y=0.8387452862417517 -a=pan,b=pan,i=8246,x=0.978767937767844,y=0.595121683896329 -a=pan,b=pan,i=8247,x=0.8877669245621814,y=0.993370582244656 -a=zee,b=pan,i=8252,x=0.5300215804178179,y=0.8809898315791685 -a=pan,b=pan,i=8253,x=0.14951845911545658,y=0.050337793147141485 -a=zee,b=zee,i=8255,x=0.2969343720495279,y=0.17875651030138728 -a=hat,b=hat,i=8256,x=0.6242185970220043,y=0.7024165856278344 -a=hat,b=wye,i=8258,x=0.8531277255736057,y=0.8769896764505173 -a=hat,b=zee,i=8259,x=0.80786266752403,y=0.6716375742716686 -a=zee,b=pan,i=8262,x=0.8457444769341051,y=0.878949052752884 -a=hat,b=hat,i=8263,x=0.021118246086347936,y=0.1691340461129066 -a=hat,b=zee,i=8268,x=0.36840212479306056,y=0.1937179362263023 -a=hat,b=eks,i=8269,x=0.11448405024977704,y=0.23838350078789672 -a=eks,b=wye,i=8272,x=0.6007652533828618,y=0.9021580447695768 -a=eks,b=pan,i=8275,x=0.3873436846104391,y=0.143667378519436 -a=pan,b=hat,i=8277,x=0.07383920400137156,y=0.29779174578381706 -a=eks,b=wye,i=8278,x=0.46767848884631935,y=0.05594159328112347 -a=hat,b=zee,i=8280,x=0.3946923561479273,y=0.26022613248187254 -a=pan,b=zee,i=8281,x=0.1263835939366954,y=0.432802462221352 -a=zee,b=zee,i=8282,x=0.40991526751045837,y=0.4664079852923113 -a=eks,b=zee,i=8284,x=0.18920257463227763,y=0.036407632423777536 -a=pan,b=wye,i=8287,x=0.6189613307505946,y=0.6990573098254149 -a=eks,b=wye,i=8288,x=0.4497557556254256,y=0.24756315944170548 -a=hat,b=wye,i=8289,x=0.565349257018066,y=0.9695790816330443 -a=pan,b=zee,i=8291,x=0.735310256094497,y=0.8766337081918637 -a=pan,b=eks,i=8297,x=0.9819888226687685,y=0.5660827409414791 -a=wye,b=zee,i=8298,x=0.8302599994058273,y=0.7781190613623368 -a=eks,b=eks,i=8300,x=0.3945447287695022,y=0.18429543577101226 -a=hat,b=pan,i=8303,x=0.46102687899911865,y=0.028654914603273074 -a=pan,b=wye,i=8304,x=0.2251798670287818,y=0.1196124323878246 -a=wye,b=wye,i=8306,x=0.46134525628997447,y=0.14969908222679185 -a=eks,b=hat,i=8310,x=0.9655430452589465,y=0.9245411060012981 -a=hat,b=pan,i=8312,x=0.547677016360058,y=0.9650817043634582 -a=eks,b=zee,i=8316,x=0.01845753106507053,y=0.07103606295934006 -a=eks,b=pan,i=8317,x=0.729335030923378,y=0.9595878811451796 -a=hat,b=hat,i=8319,x=0.31751994407032824,y=0.04431824787878602 -a=eks,b=wye,i=8320,x=0.32774406925223687,y=0.39755988935681663 -a=hat,b=zee,i=8324,x=0.03714831235343263,y=0.18937718204762566 -a=hat,b=wye,i=8326,x=0.28959963076391493,y=0.36439348847404984 -a=wye,b=hat,i=8328,x=0.5085798206640023,y=0.8237875259659011 -a=zee,b=pan,i=8329,x=0.16898862414886817,y=0.15560228332434112 -a=zee,b=wye,i=8340,x=0.779538114438638,y=0.8910397798499486 -a=pan,b=pan,i=8341,x=0.6773754216149304,y=0.613857099295925 -a=wye,b=hat,i=8342,x=0.1458720698488648,y=0.4351692119049885 -a=zee,b=eks,i=8345,x=0.5108081370139803,y=0.8369754291473595 -a=zee,b=wye,i=8348,x=0.803443835215121,y=0.5295807220048788 -a=eks,b=pan,i=8349,x=0.9755546767865578,y=0.8799835489524848 -a=eks,b=wye,i=8351,x=0.03641540536678134,y=0.08744451304860146 -a=hat,b=hat,i=8353,x=0.055663129013605483,y=0.3787786437258225 -a=eks,b=hat,i=8354,x=0.5157212090975359,y=0.8904310076101238 -a=hat,b=hat,i=8356,x=0.5915574129139735,y=0.5501666687575646 -a=hat,b=hat,i=8359,x=0.672862622018669,y=0.9813314150345762 -a=hat,b=hat,i=8362,x=0.8239226232469129,y=0.5363672557332027 -a=eks,b=zee,i=8364,x=0.6109061549072763,y=0.9310832897288339 -a=pan,b=pan,i=8365,x=0.6603069810848408,y=0.8682978196165198 -a=zee,b=eks,i=8367,x=0.4049863490547647,y=0.4247029183107722 -a=wye,b=eks,i=8368,x=0.30480439273047766,y=0.48048174444338265 -a=zee,b=wye,i=8369,x=0.4648458105978611,y=0.21546080520985877 -a=hat,b=pan,i=8370,x=0.7696984054132116,y=0.7047713537963836 -a=eks,b=zee,i=8371,x=0.37597533966420293,y=0.08724777473553502 -a=zee,b=eks,i=8373,x=0.6150222878860193,y=0.5607136634592303 -a=pan,b=wye,i=8374,x=0.4528870946233897,y=0.07597161789124052 -a=pan,b=zee,i=8375,x=0.5301175183103385,y=0.8601180937794322 -a=hat,b=eks,i=8376,x=0.06489427108475243,y=0.40261315507492046 -a=eks,b=wye,i=8377,x=0.563425411256789,y=0.9184806642610032 -a=zee,b=wye,i=8382,x=0.7952836839227378,y=0.6833817456403316 -a=hat,b=hat,i=8383,x=0.3984261676380828,y=0.1738533271203584 -a=eks,b=wye,i=8384,x=0.11104863533882658,y=0.3751765500241939 -a=hat,b=pan,i=8385,x=0.49685402919308186,y=0.07834061857462182 -a=zee,b=pan,i=8386,x=0.7967208048423021,y=0.6030273368815906 -a=hat,b=eks,i=8391,x=0.989982527715026,y=0.7339778723038518 -a=hat,b=zee,i=8392,x=0.1535960092053097,y=0.48365184245511483 -a=wye,b=pan,i=8393,x=0.5371021532444956,y=0.5076931407974227 -a=zee,b=eks,i=8394,x=0.9938525452278908,y=0.9944136062432827 -a=zee,b=pan,i=8399,x=0.9401027436536872,y=0.8241834377991233 -a=eks,b=hat,i=8401,x=0.21592490518329377,y=0.33061077431647556 -a=eks,b=hat,i=8402,x=0.9947356560721309,y=0.7409670678572535 -a=zee,b=eks,i=8404,x=0.3493565206043524,y=0.09054805425762869 -a=pan,b=wye,i=8405,x=0.4811201910981,y=0.18742552959849512 -a=zee,b=hat,i=8408,x=0.9200690263533268,y=0.844860872568536 -a=eks,b=wye,i=8412,x=0.30559437664735667,y=0.2954096578389033 -a=eks,b=hat,i=8413,x=0.4338584089312799,y=0.1949819510216354 -a=wye,b=eks,i=8414,x=0.522368921381192,y=0.6530064427565451 -a=wye,b=eks,i=8415,x=0.40077151734215266,y=0.2875570398483994 -a=zee,b=wye,i=8416,x=0.44384210652184575,y=0.34372338201033137 -a=hat,b=zee,i=8417,x=0.8269419111916478,y=0.5295548379993134 -a=eks,b=wye,i=8422,x=0.6050408267820816,y=0.6834071285687362 -a=zee,b=eks,i=8427,x=0.4741772361406499,y=0.4439154258100234 -a=hat,b=pan,i=8435,x=0.38866184034912554,y=0.059525983951048245 -a=hat,b=eks,i=8437,x=0.5253247675869896,y=0.5165646242633789 -a=eks,b=pan,i=8439,x=0.8952428124136508,y=0.9997604543675731 -a=zee,b=hat,i=8441,x=0.22626716374612477,y=0.3072575476209706 -a=zee,b=hat,i=8442,x=0.012897791583037166,y=0.45928268470148015 -a=pan,b=hat,i=8444,x=0.033038289736824766,y=0.05539460621434722 -a=pan,b=hat,i=8445,x=0.3310467747539301,y=0.028084005329851225 -a=hat,b=zee,i=8446,x=0.178210692330519,y=0.4596388855650022 -a=hat,b=wye,i=8447,x=0.44766765422608423,y=0.2937943605301816 -a=eks,b=wye,i=8448,x=0.9730885844448779,y=0.6233373493085322 -a=pan,b=wye,i=8450,x=0.2793484686069333,y=0.44070351370129646 -a=wye,b=wye,i=8452,x=0.47072648393194716,y=0.3041985693356054 -a=wye,b=pan,i=8453,x=0.8533811491024729,y=0.9678356263785118 -a=pan,b=hat,i=8455,x=0.5906501253369019,y=0.6123184772904339 -a=hat,b=wye,i=8457,x=0.09332068743830269,y=0.20145292592178443 -a=hat,b=pan,i=8463,x=0.278695825691301,y=0.1017956876584839 -a=hat,b=hat,i=8466,x=0.14139708059138034,y=0.10409871077285981 -a=pan,b=pan,i=8469,x=0.1347759881116134,y=0.2455909077182844 -a=zee,b=zee,i=8471,x=0.516240721628621,y=0.6586906452113941 -a=eks,b=hat,i=8473,x=0.09764518520867405,y=0.3404811785298787 -a=wye,b=hat,i=8476,x=0.8745714693022778,y=0.6067344417467008 -a=eks,b=hat,i=8477,x=0.9309461833265447,y=0.5563876226531717 -a=wye,b=wye,i=8480,x=0.16146423266136367,y=0.06354282797551147 -a=pan,b=pan,i=8482,x=0.8910001828466121,y=0.7723030338995308 -a=eks,b=zee,i=8483,x=0.20374081828155488,y=0.4241287356182083 -a=wye,b=eks,i=8486,x=0.9422065000597399,y=0.9149504343179683 -a=hat,b=eks,i=8488,x=0.4452671926810047,y=0.11987318281596804 -a=pan,b=zee,i=8491,x=0.14450135153044963,y=0.4964690028665373 -a=wye,b=pan,i=8493,x=0.19415677927998398,y=0.36967456189817616 -a=zee,b=wye,i=8494,x=0.6014391280905923,y=0.9035203941606601 -a=pan,b=wye,i=8495,x=0.9535261800524316,y=0.6741780286573957 -a=hat,b=hat,i=8497,x=0.3932809847758547,y=0.32342585911847266 -a=hat,b=zee,i=8499,x=0.6960433804921428,y=0.9688422831160675 -a=hat,b=hat,i=8500,x=0.948682263253869,y=0.894330225437426 -a=hat,b=wye,i=8501,x=0.9251536771842801,y=0.5375948099135825 -a=zee,b=hat,i=8504,x=0.33240950818517156,y=0.08420305010182172 -a=pan,b=wye,i=8505,x=0.04933447605388053,y=0.43620839928024635 -a=zee,b=hat,i=8507,x=0.8799876950191433,y=0.8626007536651286 -a=hat,b=hat,i=8509,x=0.4819653658346117,y=0.47086103178508854 -a=wye,b=hat,i=8511,x=0.5399541727181182,y=0.8444405945197476 -a=eks,b=pan,i=8513,x=0.10151458816501346,y=0.1389357491074602 -a=wye,b=eks,i=8514,x=0.145836390847488,y=0.3255110732802976 -a=wye,b=pan,i=8516,x=0.4017850863763818,y=0.44971529290471857 -a=pan,b=zee,i=8518,x=0.7275818161813503,y=0.5297860907729676 -a=eks,b=eks,i=8519,x=0.20825394541995124,y=0.20861255119440336 -a=wye,b=pan,i=8520,x=0.8898604947131726,y=0.597970731230186 -a=eks,b=wye,i=8521,x=0.3648001678117977,y=0.19557380766743293 -a=pan,b=eks,i=8522,x=0.6966179778593448,y=0.6840334680719272 -a=hat,b=hat,i=8523,x=0.440001403027384,y=0.45225896734383286 -a=hat,b=eks,i=8526,x=0.6308328182217219,y=0.9629302966330678 -a=zee,b=pan,i=8528,x=0.1829199682476771,y=0.22085981047936964 -a=hat,b=wye,i=8529,x=0.8572334709695195,y=0.7640619187795664 -a=zee,b=wye,i=8531,x=0.32354124502667125,y=0.2318309195815882 -a=pan,b=wye,i=8533,x=0.4223281734144666,y=0.10945011806361638 -a=pan,b=eks,i=8536,x=0.23950266321443625,y=0.2173609684570218 -a=wye,b=eks,i=8537,x=0.8479922856732104,y=0.646967422694876 -a=pan,b=eks,i=8538,x=0.9430852556493492,y=0.8645812565386866 -a=wye,b=wye,i=8539,x=0.5424202389577869,y=0.7980364309577922 -a=zee,b=zee,i=8540,x=0.6480753391409477,y=0.5064183808137883 -a=eks,b=hat,i=8541,x=0.38813893407288325,y=0.12561215999003672 -a=eks,b=zee,i=8547,x=0.17659256136803803,y=0.2734607705288187 -a=hat,b=wye,i=8548,x=0.06872905733725654,y=0.24606652109262273 -a=hat,b=zee,i=8550,x=0.5390972348460589,y=0.832817959583314 -a=eks,b=zee,i=8553,x=0.1756747767253124,y=0.40173864656676805 -a=zee,b=pan,i=8557,x=0.4734760023383495,y=0.24574081766297817 -a=pan,b=pan,i=8558,x=0.01915285502673958,y=0.0710080820684984 -a=pan,b=pan,i=8560,x=0.8369571665486479,y=0.6640166878609967 -a=zee,b=eks,i=8564,x=0.4638040598773725,y=0.34104108677898826 -a=wye,b=hat,i=8565,x=0.48113198136329016,y=0.3218458306963313 -a=pan,b=hat,i=8567,x=0.7401694289092702,y=0.8501949156927895 -a=wye,b=eks,i=8568,x=0.5607940018315913,y=0.6859095069187073 -a=hat,b=wye,i=8569,x=0.8193761557404394,y=0.6213974290333986 -a=hat,b=pan,i=8571,x=0.3374929371344728,y=0.11008369139923513 -a=wye,b=zee,i=8572,x=0.5104050859274984,y=0.84636724693727 -a=eks,b=hat,i=8575,x=0.411309283136459,y=0.3134260008884213 -a=wye,b=eks,i=8578,x=0.8671191631706497,y=0.848376644694914 -a=hat,b=pan,i=8580,x=0.20981130689562955,y=0.4981591059735274 -a=zee,b=wye,i=8582,x=0.48899851680494,y=0.05774193348030199 -a=pan,b=zee,i=8585,x=0.8620613291960066,y=0.8283882429708938 -a=zee,b=wye,i=8586,x=0.6927422583943957,y=0.7194075668113131 -a=hat,b=zee,i=8589,x=0.2926550989813841,y=0.35398173553544887 -a=hat,b=pan,i=8591,x=0.7873294723300266,y=0.5332360898832793 -a=zee,b=zee,i=8593,x=0.2617818185031422,y=0.43707681521897646 -a=zee,b=eks,i=8595,x=0.42488684401408794,y=0.2974668150516677 -a=wye,b=wye,i=8596,x=0.8826796731081049,y=0.7850131924698824 -a=wye,b=eks,i=8597,x=0.006860697351333767,y=0.19549617714299017 -a=wye,b=zee,i=8599,x=0.7184888188080124,y=0.8697536607671493 -a=hat,b=wye,i=8600,x=0.84790186953787,y=0.8684654646246722 -a=eks,b=pan,i=8603,x=0.31611152902489204,y=0.11267222283796785 -a=pan,b=wye,i=8607,x=0.7672859830291083,y=0.9905418229463311 -a=eks,b=wye,i=8611,x=0.024981210157926648,y=0.4592839770075655 -a=pan,b=zee,i=8616,x=0.6883510014246306,y=0.8824450569844674 -a=zee,b=eks,i=8617,x=0.4515091274400017,y=0.020225254455900066 -a=pan,b=hat,i=8619,x=0.2649678025213431,y=0.39936058228129934 -a=zee,b=zee,i=8621,x=0.13218842583668222,y=0.03127532132246047 -a=hat,b=eks,i=8622,x=0.49385289030098156,y=0.3427851043390181 -a=eks,b=zee,i=8623,x=0.18543631005824213,y=0.19588655519979803 -a=pan,b=zee,i=8624,x=0.10763314570414217,y=0.08213428508081799 -a=pan,b=eks,i=8625,x=0.6882597637249681,y=0.8142971025439197 -a=eks,b=hat,i=8626,x=0.6080795099100825,y=0.8728243765075873 -a=hat,b=zee,i=8628,x=0.46540841676613476,y=0.10159896993531026 -a=wye,b=pan,i=8630,x=0.6807920836499873,y=0.8665298197163882 -a=pan,b=eks,i=8631,x=0.6858410458377651,y=0.7631951114896744 -a=eks,b=hat,i=8632,x=0.20944920807915668,y=0.17415067019098263 -a=zee,b=pan,i=8634,x=0.3707685639916669,y=0.2775760739581703 -a=zee,b=eks,i=8637,x=0.6395976874259532,y=0.9961211959529084 -a=zee,b=eks,i=8639,x=0.2524229698549828,y=0.17611542817224723 -a=zee,b=zee,i=8640,x=0.08482390402218887,y=0.36890700689619493 -a=eks,b=pan,i=8641,x=0.46605482768215767,y=0.07140744226571838 -a=eks,b=hat,i=8642,x=0.10408804972672026,y=0.23204314849773244 -a=hat,b=zee,i=8643,x=0.3955443156971198,y=0.35524981169296355 -a=wye,b=wye,i=8647,x=0.8282095483187364,y=0.5670959372120373 -a=pan,b=hat,i=8649,x=0.8273775847857144,y=0.849837822420028 -a=hat,b=pan,i=8650,x=0.7798855565061036,y=0.6249390723014688 -a=pan,b=wye,i=8656,x=0.5362020839763336,y=0.5898815059855541 -a=hat,b=pan,i=8657,x=0.4419120878855759,y=0.04387616479212919 -a=eks,b=hat,i=8661,x=0.9412054441857266,y=0.7031238908715453 -a=zee,b=eks,i=8665,x=0.16620817209916572,y=0.4183421439519892 -a=pan,b=eks,i=8667,x=0.16483965969504477,y=0.008847013569707962 -a=hat,b=eks,i=8670,x=0.6115682118401596,y=0.709847191339046 -a=hat,b=pan,i=8671,x=0.5876224326167997,y=0.655751406127023 -a=wye,b=zee,i=8676,x=0.458348366941119,y=0.0654065118924938 -a=wye,b=eks,i=8679,x=0.8714866001900081,y=0.5074064697197682 -a=pan,b=zee,i=8680,x=0.8573300862564848,y=0.8110639386847459 -a=hat,b=eks,i=8682,x=0.8690529123645934,y=0.9535269156601301 -a=wye,b=zee,i=8683,x=0.6350123840910076,y=0.6382912385391265 -a=zee,b=wye,i=8685,x=0.584126263404004,y=0.7538247769853159 -a=wye,b=wye,i=8686,x=0.43551003027785373,y=0.3236501977657479 -a=wye,b=hat,i=8687,x=0.8880686097383739,y=0.6330150426943297 -a=eks,b=pan,i=8691,x=0.9943932359314775,y=0.9072697301052425 -a=eks,b=hat,i=8694,x=0.742421569895559,y=0.766958291324268 -a=zee,b=eks,i=8695,x=0.23665653193040737,y=0.2743956071876914 -a=pan,b=wye,i=8700,x=0.849446996637848,y=0.7731446643107283 -a=pan,b=pan,i=8701,x=0.6101087522261474,y=0.5619798733118421 -a=hat,b=hat,i=8703,x=0.5764546868259887,y=0.5585165186187631 -a=wye,b=hat,i=8704,x=0.5825019915262796,y=0.7509760878946939 -a=wye,b=hat,i=8705,x=0.2608869277824021,y=0.18054497056171448 -a=hat,b=hat,i=8706,x=0.44933047132208914,y=0.2870706030629274 -a=eks,b=eks,i=8707,x=0.5126396112669858,y=0.7451349937567859 -a=eks,b=eks,i=8710,x=0.23179579194118272,y=0.2720693323497807 -a=zee,b=zee,i=8714,x=0.871119409753738,y=0.8880243168317828 -a=pan,b=zee,i=8716,x=0.010723117383408809,y=0.3256007021073345 -a=pan,b=pan,i=8719,x=0.8266651999765658,y=0.7457257758170397 -a=zee,b=hat,i=8721,x=0.18186817750471462,y=0.28188928351608533 -a=eks,b=wye,i=8722,x=0.1796424637908317,y=0.08845716187743458 -a=hat,b=zee,i=8728,x=0.1222023744265569,y=0.36047803182555027 -a=wye,b=zee,i=8731,x=0.35713870378290125,y=0.1671267891620788 -a=hat,b=zee,i=8732,x=0.5996953011640668,y=0.62340072229723 -a=zee,b=hat,i=8733,x=0.2345433105033039,y=0.10071782641377514 -a=zee,b=hat,i=8734,x=0.301665687569308,y=0.3630510637781915 -a=hat,b=pan,i=8735,x=0.47526687158292913,y=0.22747265846322517 -a=pan,b=eks,i=8736,x=0.5793971065628433,y=0.6408359296127717 -a=wye,b=zee,i=8737,x=0.6210812266919626,y=0.8036316255685408 -a=pan,b=wye,i=8738,x=0.15856470090745411,y=0.07442697669748699 -a=zee,b=zee,i=8740,x=0.7182904394926175,y=0.7258491677192344 -a=wye,b=hat,i=8741,x=0.050796016954941514,y=0.2827688297213582 -a=pan,b=hat,i=8742,x=0.536032482315453,y=0.7201071015346874 -a=pan,b=pan,i=8748,x=0.0504766925956035,y=0.1711562295167237 -a=eks,b=eks,i=8749,x=0.43854684004790123,y=0.28682577788725483 -a=wye,b=hat,i=8751,x=0.06509359888339494,y=0.177636855552877 -a=eks,b=pan,i=8752,x=0.09242339085575646,y=0.32343297889748723 -a=wye,b=eks,i=8753,x=0.9973914329853147,y=0.9693279929688737 -a=hat,b=eks,i=8754,x=0.370565044079066,y=0.009819699195025788 -a=zee,b=pan,i=8755,x=0.8202332245450998,y=0.5597758930454603 -a=eks,b=hat,i=8756,x=0.272322951811926,y=0.145224793410337 -a=zee,b=zee,i=8758,x=0.9667659565271899,y=0.5623772828898473 -a=wye,b=wye,i=8761,x=0.6603209295504429,y=0.5459240190405134 -a=hat,b=eks,i=8763,x=0.08300923681882266,y=0.3326688755194035 -a=pan,b=wye,i=8765,x=0.7403998857752021,y=0.9560094148670492 -a=wye,b=zee,i=8766,x=0.9449147393082301,y=0.6732722707943484 -a=pan,b=hat,i=8767,x=0.994940403256145,y=0.6992814067153592 -a=pan,b=eks,i=8770,x=0.6298376152653163,y=0.5214339719227405 -a=wye,b=zee,i=8772,x=0.754483186364135,y=0.9567133222811894 -a=wye,b=eks,i=8774,x=0.3998473670297119,y=0.07393345230936454 -a=wye,b=zee,i=8775,x=0.15521659769175922,y=0.2873998987631695 -a=zee,b=wye,i=8778,x=0.7616404527480684,y=0.8158713089665471 -a=hat,b=wye,i=8779,x=0.600461848950472,y=0.5399884947809014 -a=eks,b=zee,i=8780,x=0.5925751420631895,y=0.6690795493308443 -a=pan,b=zee,i=8781,x=0.9383737724522293,y=0.7748193135876428 -a=zee,b=hat,i=8785,x=0.6464009753631575,y=0.6923362770119578 -a=hat,b=zee,i=8788,x=0.2642687755038374,y=0.10859080810253674 -a=wye,b=hat,i=8790,x=0.8223311948449997,y=0.5130414892803776 -a=eks,b=hat,i=8791,x=0.6818394894701235,y=0.7849388490947223 -a=pan,b=pan,i=8794,x=0.9586567458589967,y=0.919190837846641 -a=wye,b=wye,i=8796,x=0.534583514132678,y=0.7819265778012215 -a=pan,b=hat,i=8797,x=0.4497161697366787,y=0.026741184746243984 -a=zee,b=eks,i=8798,x=0.8167620532839222,y=0.8279530206710328 -a=wye,b=eks,i=8799,x=0.8471762978662517,y=0.6353417536536258 -a=hat,b=hat,i=8801,x=0.017219020782623162,y=0.1624665172562224 -a=zee,b=wye,i=8802,x=0.5608298870065771,y=0.5058672809947269 -a=eks,b=pan,i=8803,x=0.4433211231528589,y=0.2838323939048415 -a=wye,b=pan,i=8806,x=0.08327290658651032,y=0.2550251881973168 -a=pan,b=eks,i=8807,x=0.339222785155762,y=0.1751435242352425 -a=zee,b=zee,i=8808,x=0.4820472727787015,y=0.017092345316797486 -a=wye,b=eks,i=8811,x=0.27073265506551913,y=0.4615910666569303 -a=eks,b=eks,i=8812,x=0.07160623229882901,y=0.12458111194427568 -a=pan,b=hat,i=8813,x=0.7877743286534948,y=0.8757926217967861 -a=zee,b=wye,i=8815,x=0.7068610202368742,y=0.7545170669582756 -a=zee,b=hat,i=8819,x=0.8077899694017853,y=0.9694410429631465 -a=wye,b=wye,i=8822,x=0.5093848419146877,y=0.7499112900526392 -a=wye,b=zee,i=8823,x=0.7521935072400413,y=0.8768924705259773 -a=zee,b=wye,i=8824,x=0.17855149771491108,y=0.09366701006513045 -a=wye,b=wye,i=8825,x=0.9175145724829686,y=0.733177971733118 -a=wye,b=pan,i=8826,x=0.7781119220016439,y=0.5568374194244214 -a=pan,b=pan,i=8827,x=0.44994539245047094,y=0.010072546778717273 -a=zee,b=pan,i=8828,x=0.8974531793622843,y=0.6299514776398363 -a=eks,b=zee,i=8832,x=0.8201188808616761,y=0.7163833146418705 -a=pan,b=hat,i=8838,x=0.4461825537060876,y=0.3925097922631463 -a=wye,b=pan,i=8839,x=0.4002040179552746,y=0.24694949779242004 -a=pan,b=eks,i=8842,x=0.9266082306477657,y=0.5285007006129709 -a=hat,b=hat,i=8843,x=0.37872486721691034,y=0.07532645476050148 -a=hat,b=hat,i=8844,x=0.0685259642260373,y=0.00776256940978215 -a=pan,b=wye,i=8845,x=0.24303613366881238,y=0.13056160975299724 -a=wye,b=eks,i=8846,x=0.9676348576302707,y=0.5106172718000012 -a=pan,b=zee,i=8849,x=0.6264364311275306,y=0.9563714459175713 -a=hat,b=eks,i=8850,x=0.8735595733663851,y=0.5106033973424751 -a=hat,b=wye,i=8854,x=0.9304995637638334,y=0.6319621895624278 -a=pan,b=zee,i=8858,x=0.7128306783608381,y=0.811303686462451 -a=pan,b=wye,i=8859,x=0.9081121983690633,y=0.5712022128090308 -a=wye,b=hat,i=8861,x=0.39486469148361836,y=0.49780490997274707 -a=wye,b=wye,i=8862,x=0.7736663364376681,y=0.5874621525618737 -a=eks,b=eks,i=8864,x=0.8345356283222535,y=0.7112462031216813 -a=zee,b=hat,i=8866,x=0.6732648337974786,y=0.9333019394438807 -a=hat,b=hat,i=8868,x=0.016222381142314224,y=0.02090746494690887 -a=zee,b=wye,i=8873,x=0.12465164468565504,y=0.4217551436223611 -a=hat,b=wye,i=8874,x=0.8578330113744658,y=0.5967910955072325 -a=wye,b=pan,i=8875,x=0.9700008052690227,y=0.5495480079950836 -a=wye,b=eks,i=8877,x=0.21506616709063353,y=0.028566538362973737 -a=zee,b=pan,i=8879,x=0.8504405312776793,y=0.6033489024089217 -a=wye,b=wye,i=8880,x=0.47595916238031677,y=0.4288837512249194 -a=eks,b=zee,i=8881,x=0.45213579710907703,y=0.08748650555497739 -a=hat,b=eks,i=8883,x=0.7348243939209332,y=0.8605568412288824 -a=zee,b=wye,i=8885,x=0.41758576449425977,y=0.14627581317514182 -a=wye,b=hat,i=8886,x=0.9280339369715974,y=0.9297205006311496 -a=zee,b=zee,i=8889,x=0.06545001204265088,y=0.3004515856834621 -a=eks,b=zee,i=8890,x=0.27962535290039825,y=0.44335679461319166 -a=pan,b=eks,i=8892,x=0.3852530201110397,y=0.06941698785655903 -a=zee,b=eks,i=8894,x=0.1966531651167187,y=0.4688240979189081 -a=wye,b=hat,i=8895,x=0.22463107582925324,y=0.4161186278077874 -a=eks,b=zee,i=8896,x=0.22809184804735871,y=0.4707492036142362 -a=hat,b=zee,i=8898,x=0.45420946781919536,y=0.10354482418357991 -a=zee,b=pan,i=8899,x=0.1500424792671291,y=0.3904357922605537 -a=eks,b=hat,i=8900,x=0.4705695658454211,y=0.13058529889276693 -a=zee,b=eks,i=8903,x=0.4231582011204885,y=0.4821489267549405 -a=eks,b=wye,i=8904,x=0.27693517497385267,y=0.35861877550118093 -a=hat,b=pan,i=8910,x=0.49610253645583846,y=0.21986829070394298 -a=eks,b=wye,i=8911,x=0.09558215825789063,y=0.018958306464913255 -a=hat,b=zee,i=8915,x=0.4040203950712935,y=0.04965833346589221 -a=eks,b=wye,i=8916,x=0.46871698272105,y=0.3462467467139262 -a=eks,b=hat,i=8919,x=0.4742484069291977,y=0.2514827712591855 -a=pan,b=wye,i=8920,x=0.733610226156712,y=0.5651397506818968 -a=hat,b=zee,i=8921,x=0.5565613081265703,y=0.9540215346587051 -a=pan,b=pan,i=8922,x=0.270663413379612,y=0.4701176631611145 -a=pan,b=zee,i=8923,x=0.1853923248765008,y=0.0022929560982657415 -a=eks,b=wye,i=8925,x=0.5609329671328473,y=0.589599688677612 -a=pan,b=eks,i=8926,x=0.5899990569564478,y=0.9670305978679095 -a=zee,b=wye,i=8929,x=0.7910634287616417,y=0.5832583369417834 -a=pan,b=eks,i=8930,x=0.9200311370773863,y=0.8086516025019609 -a=zee,b=zee,i=8933,x=0.4454093296017202,y=0.3284583037994141 -a=zee,b=eks,i=8935,x=0.4486952558039746,y=0.4130427561178419 -a=hat,b=eks,i=8936,x=0.9755076232964625,y=0.6362818073430646 -a=hat,b=pan,i=8939,x=0.8511623725969789,y=0.6164456458973154 -a=wye,b=wye,i=8940,x=0.9818963757219575,y=0.5755972292005318 -a=hat,b=hat,i=8941,x=0.7568298583150284,y=0.5846179373919896 -a=eks,b=hat,i=8947,x=0.8483324196518135,y=0.6158053719777993 -a=eks,b=pan,i=8948,x=0.5318875109400665,y=0.8230182723036877 -a=zee,b=wye,i=8950,x=0.2790928413033852,y=0.0772468110330039 -a=wye,b=eks,i=8951,x=0.9027943823162313,y=0.6124436018843183 -a=zee,b=eks,i=8954,x=0.47758220480911473,y=0.2664181870815133 -a=hat,b=pan,i=8955,x=0.3375565375177234,y=0.19102233314969186 -a=eks,b=eks,i=8957,x=0.7047805468534891,y=0.5946651385930218 -a=pan,b=pan,i=8958,x=0.6519485361202326,y=0.7030912337766829 -a=hat,b=eks,i=8959,x=0.6713731052940981,y=0.6013560927295543 -a=hat,b=pan,i=8960,x=0.9417167187642326,y=0.8026299128777213 -a=zee,b=wye,i=8961,x=0.8154052031095614,y=0.6481399972215665 -a=pan,b=wye,i=8962,x=0.0914057435253639,y=0.10822318947000709 -a=pan,b=hat,i=8963,x=0.3046680167824908,y=0.09348404024830137 -a=zee,b=zee,i=8964,x=0.6189408278256606,y=0.8433159445563726 -a=eks,b=hat,i=8965,x=0.958051223919934,y=0.5081338063861043 -a=wye,b=eks,i=8966,x=0.8530691152394455,y=0.8692728927718893 -a=hat,b=eks,i=8967,x=0.8372819315874948,y=0.8861340588817578 -a=wye,b=zee,i=8968,x=0.9977506774202527,y=0.9679468301172027 -a=hat,b=pan,i=8969,x=0.45963913428927994,y=0.2847833031004139 -a=pan,b=eks,i=8970,x=0.34327965136688565,y=0.2691645574062619 -a=hat,b=zee,i=8972,x=0.5786862872644059,y=0.8671986650119898 -a=pan,b=pan,i=8975,x=0.30697964139250933,y=0.08659671798153756 -a=eks,b=hat,i=8978,x=0.5232916500187303,y=0.8753848427459924 -a=zee,b=pan,i=8984,x=0.6987813603715117,y=0.5232757984191948 -a=hat,b=wye,i=8985,x=0.932024395968463,y=0.9447580630208217 -a=pan,b=hat,i=8988,x=0.5404886782798238,y=0.5374270296539031 -a=wye,b=hat,i=8989,x=0.9762152572727496,y=0.8712434910014083 -a=pan,b=eks,i=8991,x=0.5236344484593898,y=0.7020390430173928 -a=zee,b=zee,i=8992,x=0.285347240060405,y=0.2493240966526331 -a=zee,b=wye,i=8993,x=0.7119318558771737,y=0.8612125817012293 -a=pan,b=eks,i=8994,x=0.6358666072344865,y=0.930679583655016 -a=eks,b=zee,i=8996,x=0.014997169280220546,y=0.38924624193859947 -a=pan,b=eks,i=8997,x=0.006957705982631457,y=0.27329586967444996 -a=zee,b=wye,i=8998,x=0.45799438726799335,y=0.020705027471035087 -a=hat,b=eks,i=9000,x=0.33727508102114134,y=0.13582122939201124 -a=zee,b=eks,i=9004,x=0.4893113819292234,y=0.23390278210191928 -a=zee,b=wye,i=9008,x=0.8282941376563813,y=0.9889370827954176 -a=pan,b=pan,i=9009,x=0.3878236858466175,y=0.06714068514516147 -a=zee,b=pan,i=9013,x=0.6305143660449302,y=0.710245374097503 -a=zee,b=wye,i=9014,x=0.16891869382531022,y=0.37574058303798785 -a=pan,b=wye,i=9015,x=0.3220094028213596,y=0.4839478151356543 -a=eks,b=eks,i=9016,x=0.5800740825749267,y=0.8910261945783475 -a=zee,b=hat,i=9017,x=0.9502641304019075,y=0.8396710982351069 -a=pan,b=eks,i=9018,x=0.4764608908539697,y=0.4728942258779697 -a=hat,b=wye,i=9019,x=0.272865007065651,y=0.41472685232133355 -a=eks,b=wye,i=9021,x=0.7714689461624145,y=0.7234215610234059 -a=eks,b=eks,i=9022,x=0.8213647586189171,y=0.8993719170687399 -a=zee,b=zee,i=9023,x=0.7890585709155626,y=0.5099043493783608 -a=hat,b=zee,i=9026,x=0.8364001741754985,y=0.8590079093968295 -a=zee,b=wye,i=9028,x=0.5239151547368636,y=0.8242755070656802 -a=zee,b=pan,i=9030,x=0.5793285227205369,y=0.8038160807198467 -a=zee,b=wye,i=9031,x=0.42904790956591343,y=0.292783754196035 -a=eks,b=eks,i=9033,x=0.6937567726575595,y=0.9601490785081487 -a=zee,b=wye,i=9034,x=0.7679588189607225,y=0.5157794038228849 -a=zee,b=eks,i=9035,x=0.8214778175820499,y=0.760903040561442 -a=pan,b=wye,i=9037,x=0.5665532246879906,y=0.7400695598140006 -a=wye,b=hat,i=9041,x=0.983147388463674,y=0.6432444380950916 -a=hat,b=hat,i=9047,x=0.49305007094314124,y=0.3988521392673088 -a=pan,b=eks,i=9050,x=0.9286228908161963,y=0.7128664838636729 -a=pan,b=eks,i=9052,x=0.9883016421626661,y=0.836414097002929 -a=eks,b=eks,i=9053,x=0.578258852447845,y=0.6483953013399163 -a=pan,b=eks,i=9054,x=0.4581912096837616,y=0.2396747725609628 -a=pan,b=zee,i=9055,x=0.3910891811342043,y=0.3060677650909158 -a=zee,b=eks,i=9056,x=0.1257667798355191,y=0.22523050330447225 -a=hat,b=zee,i=9059,x=0.8032276523393308,y=0.5895573796523289 -a=zee,b=wye,i=9060,x=0.9489845382435659,y=0.7186985210470157 -a=pan,b=pan,i=9064,x=0.957433552072592,y=0.612273185217601 -a=pan,b=pan,i=9065,x=0.9206660995409818,y=0.6388548120920611 -a=hat,b=eks,i=9066,x=0.7938077850540011,y=0.9840395711931128 -a=eks,b=eks,i=9067,x=0.7586156840742447,y=0.9657635310428576 -a=zee,b=wye,i=9068,x=0.03525325620506059,y=0.20286396861407563 -a=eks,b=pan,i=9076,x=0.9828706810264064,y=0.7255065121370968 -a=wye,b=pan,i=9077,x=0.285398788706721,y=0.4224009700612671 -a=eks,b=wye,i=9079,x=0.2615316643364618,y=0.22800118037634576 -a=zee,b=zee,i=9080,x=0.4293043221770476,y=0.17146941589040998 -a=eks,b=zee,i=9083,x=0.23246167408482288,y=0.22121933132231686 -a=zee,b=hat,i=9084,x=0.3023274634670656,y=0.3919343366566008 -a=wye,b=zee,i=9085,x=0.48017021719327857,y=0.0007369823565522848 -a=eks,b=hat,i=9089,x=0.17655473424651258,y=0.027572342702157582 -a=zee,b=hat,i=9090,x=0.32515391353663414,y=0.24968345250419 -a=pan,b=pan,i=9094,x=0.9716001304365217,y=0.6469197673672618 -a=wye,b=hat,i=9098,x=0.2804902678845115,y=0.048162079204052355 -a=eks,b=zee,i=9099,x=0.43507793732310474,y=0.3953634078162601 -a=pan,b=hat,i=9102,x=0.28992810063257124,y=0.0936263604214349 -a=hat,b=hat,i=9105,x=0.4895163425613803,y=0.033340055000638746 -a=pan,b=zee,i=9106,x=0.44873266752482066,y=0.15530029661112588 -a=pan,b=wye,i=9107,x=0.34313847787795904,y=0.2784766094254877 -a=eks,b=hat,i=9109,x=0.9754089146191263,y=0.5077651396700906 -a=hat,b=zee,i=9110,x=0.6804708680166679,y=0.5357141089061417 -a=eks,b=wye,i=9114,x=0.9835650326182704,y=0.8742646308873757 -a=wye,b=zee,i=9115,x=0.10698858622424778,y=0.1221930347907727 -a=pan,b=eks,i=9117,x=0.03509835946106599,y=0.4760601952379325 -a=eks,b=hat,i=9119,x=0.4790316458227425,y=0.39259275204959654 -a=zee,b=eks,i=9120,x=0.8458192848056897,y=0.9572808268819287 -a=pan,b=pan,i=9121,x=0.9385839358069921,y=0.6047637384188489 -a=wye,b=pan,i=9124,x=0.271590915264334,y=0.042888205379760125 -a=wye,b=pan,i=9127,x=0.8948475255545615,y=0.6574529698134108 -a=wye,b=hat,i=9128,x=0.3669933618796106,y=0.37512574289121725 -a=pan,b=wye,i=9132,x=0.6455902674388132,y=0.5382099179246037 -a=eks,b=hat,i=9134,x=0.16612397042168814,y=0.3555728981905678 -a=zee,b=hat,i=9137,x=0.0053168417053239825,y=0.23970890502186593 -a=zee,b=pan,i=9140,x=0.5013642860004229,y=0.6650678922317501 -a=eks,b=hat,i=9141,x=0.39054802020070156,y=0.06891218601149551 -a=wye,b=hat,i=9143,x=0.4460302810053538,y=0.040278587711885305 -a=hat,b=eks,i=9144,x=0.30372533545667213,y=0.4297094831523881 -a=zee,b=eks,i=9145,x=0.00769664097559164,y=0.1446289205179656 -a=pan,b=wye,i=9148,x=0.7394828765293925,y=0.9475622732914554 -a=zee,b=pan,i=9149,x=0.22357262525185106,y=0.20550777850363977 -a=zee,b=pan,i=9150,x=0.7364509479059471,y=0.5273598026796336 -a=zee,b=eks,i=9151,x=0.3216536526700301,y=0.23861396443066107 -a=zee,b=wye,i=9153,x=0.7713603997995606,y=0.8927934282961629 -a=eks,b=eks,i=9154,x=0.8033015390132335,y=0.7428789028852476 -a=hat,b=pan,i=9155,x=0.4469843980869507,y=0.18928924828611082 -a=wye,b=wye,i=9156,x=0.500390135135027,y=0.8848611838558533 -a=zee,b=hat,i=9157,x=0.6459716786543495,y=0.8783255778315494 -a=zee,b=pan,i=9158,x=0.829825296282736,y=0.9403424810846446 -a=wye,b=zee,i=9161,x=0.9794920335555851,y=0.5208178578405636 -a=hat,b=pan,i=9162,x=0.36011363532418106,y=0.3418468995076799 -a=pan,b=wye,i=9163,x=0.37797791224139665,y=0.39353695559343227 -a=hat,b=zee,i=9164,x=0.8838448430378912,y=0.7958865093747128 -a=zee,b=zee,i=9165,x=0.7783131261247423,y=0.7403476431916528 -a=eks,b=eks,i=9166,x=0.22004086657109556,y=0.19736319549096537 -a=wye,b=pan,i=9168,x=0.5370077637228887,y=0.6389653169963743 -a=pan,b=zee,i=9169,x=0.030815090059835182,y=0.017547992939040524 -a=hat,b=zee,i=9171,x=0.46003847353195026,y=0.4354345395691309 -a=zee,b=wye,i=9175,x=0.19674254649951783,y=0.18304515051083692 -a=eks,b=pan,i=9176,x=0.21328957209812893,y=0.13489440510159378 -a=pan,b=eks,i=9177,x=0.005689888388995534,y=0.19304812808970884 -a=pan,b=pan,i=9180,x=0.6528911310033898,y=0.7987231494976602 -a=pan,b=hat,i=9181,x=0.6407905148282739,y=0.7653184860370159 -a=zee,b=eks,i=9183,x=0.8789109160607933,y=0.6764597514962247 -a=zee,b=eks,i=9187,x=0.9492829297817624,y=0.9675987602030636 -a=pan,b=wye,i=9190,x=0.8371899774027962,y=0.7968937186611519 -a=wye,b=zee,i=9191,x=0.021517369039138368,y=0.1381446138482929 -a=eks,b=zee,i=9192,x=0.2695667438992312,y=0.28074171138048576 -a=wye,b=pan,i=9193,x=0.894511626988757,y=0.938591468790241 -a=hat,b=hat,i=9196,x=0.3980083533361548,y=0.12546876469790447 -a=pan,b=pan,i=9198,x=0.6918350451415268,y=0.7037194771160388 -a=eks,b=wye,i=9200,x=0.5817459757102148,y=0.7926589099732673 -a=pan,b=hat,i=9211,x=0.6420793762242888,y=0.686212047389247 -a=zee,b=zee,i=9214,x=0.5228330684403698,y=0.9018872431686975 -a=wye,b=pan,i=9216,x=0.945612107018632,y=0.5963971999452331 -a=eks,b=zee,i=9221,x=0.41382740826608244,y=0.477677197129144 -a=hat,b=eks,i=9222,x=0.6481864881498441,y=0.5386696824239133 -a=hat,b=pan,i=9227,x=0.946179027020023,y=0.5244012924468459 -a=pan,b=eks,i=9230,x=0.3504445487923017,y=0.0696878797080479 -a=wye,b=zee,i=9231,x=0.9610972939563219,y=0.9615810406623142 -a=eks,b=wye,i=9232,x=0.9834939198983763,y=0.902120163211437 -a=wye,b=wye,i=9234,x=0.07920533790072082,y=0.4210755544521094 -a=eks,b=hat,i=9235,x=0.48788423763049804,y=0.4836801731961293 -a=hat,b=hat,i=9237,x=0.7302582849873859,y=0.6347279985888814 -a=wye,b=hat,i=9240,x=0.8014369373980875,y=0.814100095516592 -a=pan,b=wye,i=9244,x=0.2905201186571721,y=0.43425495374391 -a=eks,b=hat,i=9249,x=0.39091312069697004,y=0.3308378438144999 -a=zee,b=pan,i=9253,x=0.9673157002999003,y=0.7433452506349982 -a=eks,b=pan,i=9255,x=0.4613513625777358,y=0.13932504620685293 -a=wye,b=hat,i=9256,x=0.961942362261845,y=0.9395596121676374 -a=zee,b=eks,i=9257,x=0.8279072561096625,y=0.8490761119202441 -a=wye,b=hat,i=9258,x=0.22113630994807887,y=0.04508156412906639 -a=eks,b=pan,i=9261,x=0.269529051685529,y=0.4796863618360836 -a=hat,b=zee,i=9264,x=0.023456730670551096,y=0.1975931324733875 -a=zee,b=pan,i=9265,x=0.007623684349103987,y=0.07551340520872629 -a=eks,b=eks,i=9266,x=0.17817560372002472,y=0.49956704475839064 -a=pan,b=pan,i=9267,x=0.04690229807589086,y=0.1929566014362788 -a=zee,b=eks,i=9268,x=0.3470560427863578,y=0.3275172947002548 -a=pan,b=pan,i=9270,x=0.1487528959524752,y=0.4469367832007153 -a=pan,b=wye,i=9271,x=0.24595184073704124,y=0.48817169012236983 -a=eks,b=wye,i=9275,x=0.09259540108550524,y=0.21275003504178946 -a=zee,b=pan,i=9276,x=0.684545528802376,y=0.5890511399726057 -a=eks,b=zee,i=9277,x=0.8931272247478754,y=0.9108980465393053 -a=wye,b=hat,i=9278,x=0.4908268342979165,y=0.1022036634900918 -a=hat,b=hat,i=9279,x=0.2967586295179133,y=0.28353991288502345 -a=hat,b=pan,i=9282,x=0.7019948002783253,y=0.631688166262754 -a=wye,b=wye,i=9284,x=0.6806389501871987,y=0.6623844311258401 -a=hat,b=hat,i=9285,x=0.4737832453554822,y=0.41355006089770063 -a=eks,b=zee,i=9287,x=0.8397334293185692,y=0.5061677209701542 -a=pan,b=zee,i=9290,x=0.3192448675700893,y=0.44823866938306645 -a=zee,b=wye,i=9291,x=0.9454063570448517,y=0.8966671326133628 -a=pan,b=wye,i=9292,x=0.23598454792188905,y=0.19161925423381865 -a=eks,b=pan,i=9294,x=0.6560425166942336,y=0.6540980604466382 -a=wye,b=zee,i=9298,x=0.6400110650985101,y=0.5918078681573676 -a=pan,b=pan,i=9301,x=0.9138183195198948,y=0.7104753541099725 -a=hat,b=wye,i=9304,x=0.7296704964431727,y=0.7521653716034574 -a=eks,b=zee,i=9305,x=0.06306304065329327,y=0.0425317362399702 -a=pan,b=hat,i=9308,x=0.6041097470881792,y=0.6019432291571227 -a=zee,b=zee,i=9310,x=0.0489167780793065,y=0.1349420473135753 -a=zee,b=hat,i=9311,x=0.9072476732379934,y=0.9064380734997842 -a=wye,b=wye,i=9313,x=0.8777070865064334,y=0.688500944696727 -a=zee,b=eks,i=9314,x=0.23207083417195573,y=0.1459854668671191 -a=eks,b=pan,i=9317,x=0.7067142230113493,y=0.8603219297899701 -a=zee,b=pan,i=9319,x=0.32868846620305514,y=0.23221497395763813 -a=hat,b=eks,i=9322,x=0.4540531923441389,y=0.08529592575810008 -a=pan,b=pan,i=9329,x=0.709436743485784,y=0.864805283294307 -a=wye,b=pan,i=9331,x=0.15157491016759606,y=0.1781007458002013 -a=hat,b=pan,i=9332,x=0.469941809547738,y=0.17916634366371342 -a=zee,b=hat,i=9333,x=0.09066429132809939,y=0.11291661870669667 -a=eks,b=hat,i=9334,x=0.524982507717917,y=0.7739607975739912 -a=zee,b=zee,i=9335,x=0.012865744128303103,y=0.4199812901617862 -a=eks,b=wye,i=9337,x=0.967092843190403,y=0.7129610451088223 -a=zee,b=pan,i=9338,x=0.8766283655189672,y=0.8633718650644421 -a=wye,b=zee,i=9342,x=0.6598872721679194,y=0.5841487864376177 -a=pan,b=eks,i=9344,x=0.23032551308519345,y=0.4668513513037823 -a=zee,b=zee,i=9345,x=0.20721325482748,y=0.034658616763860395 -a=pan,b=zee,i=9346,x=0.16804254918956518,y=0.41515674460320806 -a=zee,b=hat,i=9349,x=0.39077150740400146,y=0.35499431123174563 -a=zee,b=wye,i=9352,x=0.25522951350527867,y=0.48668317596678823 -a=hat,b=eks,i=9355,x=0.7415812921258672,y=0.5371997970549264 -a=eks,b=pan,i=9359,x=0.726201179013375,y=0.8974974727334436 -a=wye,b=eks,i=9361,x=0.9893854310908603,y=0.6762929165737711 -a=hat,b=pan,i=9363,x=0.24144536935297445,y=0.2588538401367807 -a=pan,b=eks,i=9364,x=0.20906377399579568,y=0.26492309174424467 -a=zee,b=eks,i=9366,x=0.564783511562303,y=0.8736158892678358 -a=zee,b=zee,i=9367,x=0.5210119669704992,y=0.6601277179108643 -a=eks,b=wye,i=9370,x=0.45402522126988876,y=0.3506046491270858 -a=hat,b=eks,i=9376,x=0.7413691108319418,y=0.6875522126693252 -a=zee,b=pan,i=9378,x=0.07698056466866121,y=0.3418330456253533 -a=eks,b=pan,i=9380,x=0.2066941665945501,y=0.34630072002937273 -a=eks,b=eks,i=9384,x=0.6925067244014451,y=0.5943855874672127 -a=zee,b=pan,i=9392,x=0.7293619733667298,y=0.9075863768811903 -a=wye,b=wye,i=9394,x=0.10611623011471227,y=0.3957794249815757 -a=zee,b=pan,i=9396,x=0.6285537391072125,y=0.9531200799497426 -a=pan,b=wye,i=9398,x=0.8650573724586973,y=0.5778302746561125 -a=wye,b=zee,i=9399,x=0.4320795547957027,y=0.23858094801157526 -a=hat,b=wye,i=9400,x=0.2940385536354171,y=0.23832353705367249 -a=zee,b=eks,i=9401,x=0.42923024441857793,y=0.17544011645116253 -a=zee,b=pan,i=9406,x=0.6365186667658354,y=0.8944728240200203 -a=pan,b=wye,i=9408,x=0.12426748935771803,y=0.0845763991164874 -a=hat,b=pan,i=9411,x=0.9186069486489989,y=0.8447036557059203 -a=hat,b=eks,i=9414,x=0.2255272659717531,y=0.35264234784519843 -a=zee,b=hat,i=9415,x=0.008811072137013154,y=0.035134463676480765 -a=eks,b=zee,i=9416,x=0.25375738274931314,y=0.2401418182493137 -a=hat,b=hat,i=9417,x=0.9120549045686616,y=0.8777751478548385 -a=eks,b=zee,i=9418,x=0.6260065420723087,y=0.5130847407197059 -a=wye,b=hat,i=9420,x=0.5546625744389891,y=0.592423843346026 -a=wye,b=pan,i=9423,x=0.7419375666814781,y=0.637584961040595 -a=zee,b=hat,i=9428,x=0.653199130802959,y=0.6335896172568141 -a=zee,b=hat,i=9429,x=0.532354384202152,y=0.6240035856800994 -a=zee,b=wye,i=9430,x=0.34274658023426774,y=0.30318681846915607 -a=zee,b=zee,i=9431,x=0.5467923659024335,y=0.7749657540239817 -a=zee,b=eks,i=9432,x=0.011838772084611482,y=0.1275339102058447 -a=eks,b=wye,i=9435,x=0.06360578109666282,y=0.46325468037532036 -a=hat,b=wye,i=9436,x=0.7601470639179305,y=0.659295809995321 -a=wye,b=zee,i=9440,x=0.5929171430130797,y=0.7244452361008757 -a=eks,b=pan,i=9441,x=0.6555419304461224,y=0.8327927199446215 -a=hat,b=zee,i=9442,x=0.3102917611279977,y=0.1420968126103015 -a=zee,b=pan,i=9444,x=0.09343968982332573,y=0.08259490069798114 -a=hat,b=wye,i=9446,x=0.17230938096585302,y=0.4547425422305543 -a=pan,b=zee,i=9448,x=0.1174681478790296,y=0.24900650669165836 -a=eks,b=eks,i=9451,x=0.3293644408777492,y=0.4858482434549475 -a=eks,b=hat,i=9452,x=0.06728855986596627,y=0.0225203259981267 -a=eks,b=eks,i=9454,x=0.6561623394687102,y=0.8733561225304062 -a=hat,b=hat,i=9455,x=0.7967671268259048,y=0.9988457558727984 -a=eks,b=hat,i=9456,x=0.3026733411299638,y=0.009039229737229593 -a=wye,b=hat,i=9459,x=0.6222194995601943,y=0.7094551547783764 -a=zee,b=pan,i=9462,x=0.3728674304211519,y=0.12798138723542984 -a=eks,b=hat,i=9464,x=0.8408137777713087,y=0.7528260965110807 -a=eks,b=zee,i=9465,x=0.33674248998876777,y=0.10313732374119522 -a=zee,b=hat,i=9466,x=0.7785160988373221,y=0.9149400917302326 -a=pan,b=pan,i=9467,x=0.6408147454849812,y=0.8180389929482121 -a=hat,b=eks,i=9469,x=0.7744532386038095,y=0.8239793457702959 -a=zee,b=hat,i=9474,x=0.647685209897895,y=0.8836053801968514 -a=wye,b=zee,i=9480,x=0.8749976408632957,y=0.6548646339660915 -a=wye,b=zee,i=9483,x=0.8152545316901858,y=0.805340784776813 -a=wye,b=pan,i=9484,x=0.6372765009756718,y=0.9390350932955009 -a=zee,b=pan,i=9487,x=0.4993989664425713,y=0.05807295824271008 -a=eks,b=wye,i=9490,x=0.3047068029924873,y=0.45677847562149443 -a=pan,b=zee,i=9493,x=0.14382267645371283,y=0.30310643623917777 -a=wye,b=eks,i=9496,x=0.6409095653823011,y=0.9562448788009965 -a=pan,b=hat,i=9499,x=0.6409505992060831,y=0.8924125083478576 -a=eks,b=pan,i=9502,x=0.16573428170345306,y=0.41898077136905765 -a=eks,b=wye,i=9503,x=0.36724763207097333,y=0.20835207321889548 -a=pan,b=zee,i=9507,x=0.7813724544334408,y=0.8453351473597829 -a=wye,b=wye,i=9508,x=0.7441125682394683,y=0.7008423538608134 -a=pan,b=wye,i=9509,x=0.9777133094457836,y=0.8770140891389367 -a=pan,b=zee,i=9510,x=0.5805152904440047,y=0.7292694938520734 -a=pan,b=eks,i=9512,x=0.8889876510183636,y=0.5398130117495377 -a=zee,b=hat,i=9513,x=0.9304009976201171,y=0.7707216462443467 -a=pan,b=zee,i=9516,x=0.19069582221512293,y=0.18374946422400285 -a=hat,b=zee,i=9517,x=0.7026133177880014,y=0.6466476553765019 -a=zee,b=eks,i=9524,x=0.9170688313846707,y=0.5069375781460218 -a=pan,b=pan,i=9526,x=0.2141091210993753,y=0.3444756388829696 -a=zee,b=wye,i=9528,x=0.8576581178453184,y=0.5844216436491058 -a=hat,b=pan,i=9529,x=0.15630461982613209,y=0.4213024290362597 -a=hat,b=zee,i=9533,x=0.14919839526856782,y=0.36262847729045855 -a=pan,b=zee,i=9534,x=0.028605382208390595,y=0.3310651782769932 -a=zee,b=hat,i=9538,x=0.6252849020303484,y=0.6594304208970674 -a=pan,b=hat,i=9540,x=0.9246863327027597,y=0.8632603228617942 -a=hat,b=eks,i=9541,x=0.4067481238813502,y=0.23429602829888707 -a=wye,b=pan,i=9542,x=0.021183317661808254,y=0.17173704813590862 -a=zee,b=hat,i=9544,x=0.8363252040733755,y=0.9066361832913213 -a=hat,b=wye,i=9545,x=0.8237931228490942,y=0.6154262745221335 -a=eks,b=pan,i=9546,x=0.40720117438767467,y=0.23973575256875324 -a=eks,b=eks,i=9548,x=0.18870561616460124,y=0.39344511734853893 -a=hat,b=pan,i=9549,x=0.810156100508244,y=0.8042316538504537 -a=eks,b=pan,i=9550,x=0.15708603238162966,y=0.1775120949821959 -a=wye,b=hat,i=9552,x=0.7096131782065784,y=0.9809388281353744 -a=wye,b=zee,i=9553,x=0.7419668715219193,y=0.8915237603968896 -a=hat,b=zee,i=9555,x=0.24555292038029897,y=0.48675495523019463 -a=hat,b=hat,i=9557,x=0.0708280418080367,y=0.028042679168150064 -a=hat,b=eks,i=9560,x=0.4502257867908256,y=0.24215826461552248 -a=hat,b=pan,i=9561,x=0.3883496618282979,y=0.22856613973468343 -a=eks,b=wye,i=9565,x=0.9044412102611812,y=0.9981501201118028 -a=hat,b=pan,i=9567,x=0.3290021077530395,y=0.39186940599147513 -a=hat,b=hat,i=9568,x=0.5173577930271901,y=0.5140354310886103 -a=zee,b=pan,i=9570,x=0.6962209074556881,y=0.9192719817135738 -a=eks,b=zee,i=9575,x=0.43349880702663446,y=0.2019764764745724 -a=eks,b=wye,i=9576,x=0.40205714986858077,y=0.4741982385845239 -a=zee,b=pan,i=9580,x=0.7965009504831406,y=0.7113454506506395 -a=zee,b=hat,i=9581,x=0.2752580210770491,y=0.38383648901881584 -a=zee,b=zee,i=9582,x=0.05859657717284972,y=0.4628784062589941 -a=eks,b=wye,i=9583,x=0.8996740267247002,y=0.5650994189598781 -a=pan,b=eks,i=9584,x=0.02695408257021037,y=0.29013109754146693 -a=zee,b=pan,i=9588,x=0.6700466485802432,y=0.8589272032654192 -a=eks,b=zee,i=9589,x=0.9276643978084914,y=0.5258608330900789 -a=zee,b=wye,i=9590,x=0.8441314279623635,y=0.9332236415562302 -a=pan,b=zee,i=9594,x=0.23590110682049703,y=0.4376160303971274 -a=eks,b=eks,i=9595,x=0.28340752983264006,y=0.11403963974075082 -a=wye,b=wye,i=9598,x=0.5312315260758368,y=0.8829573415823095 -a=zee,b=zee,i=9599,x=0.5367647772694465,y=0.8214571633873584 -a=wye,b=hat,i=9601,x=0.07895223840580223,y=0.194977597106609 -a=zee,b=eks,i=9605,x=0.20698996963521232,y=0.1727878106962335 -a=hat,b=wye,i=9606,x=0.8834303299307495,y=0.5688694060075045 -a=wye,b=eks,i=9609,x=0.6154267547093157,y=0.6251702670753683 -a=wye,b=wye,i=9610,x=0.6498025682619308,y=0.7373575543454602 -a=wye,b=wye,i=9613,x=0.22534868678381625,y=0.2948136458395363 -a=wye,b=pan,i=9615,x=0.9704362849821679,y=0.7056997811176895 -a=pan,b=wye,i=9624,x=0.7133865698466841,y=0.929260666330654 -a=hat,b=zee,i=9626,x=0.6958926586419276,y=0.9430927470576268 -a=eks,b=pan,i=9627,x=0.835956453698831,y=0.9007142296516358 -a=eks,b=eks,i=9628,x=0.6999306667567604,y=0.780471447448193 -a=pan,b=wye,i=9629,x=0.09405147784147772,y=0.11479025012357491 -a=pan,b=pan,i=9630,x=0.5521126309556411,y=0.9964281092981838 -a=pan,b=wye,i=9631,x=0.05531336390926278,y=0.03713539762104867 -a=pan,b=hat,i=9633,x=0.7402115896026022,y=0.8286389697202792 -a=pan,b=wye,i=9634,x=0.24820023272983005,y=0.23862519520811787 -a=pan,b=wye,i=9637,x=0.8663800328522322,y=0.9391569730896534 -a=pan,b=hat,i=9638,x=0.833781456495762,y=0.7668042837631657 -a=hat,b=hat,i=9640,x=0.463917278383292,y=0.3511187165916906 -a=eks,b=wye,i=9641,x=0.529202227506829,y=0.8125205279022973 -a=pan,b=hat,i=9642,x=0.9841563799754587,y=0.7384543484249447 -a=zee,b=hat,i=9652,x=0.929634631262683,y=0.6531235392615523 -a=wye,b=eks,i=9654,x=0.2797016068787569,y=0.2814263099253008 -a=pan,b=zee,i=9655,x=0.4057734719060324,y=0.15139105154457277 -a=zee,b=wye,i=9657,x=0.3194817450421683,y=0.16543264401690605 -a=pan,b=zee,i=9658,x=0.5277143419555844,y=0.564254772210993 -a=zee,b=pan,i=9660,x=0.7009420239615597,y=0.7800651878215885 -a=eks,b=hat,i=9662,x=0.39474659738679696,y=0.43059711110253074 -a=eks,b=wye,i=9663,x=0.4372348974243785,y=0.10476776917399111 -a=pan,b=zee,i=9667,x=0.4770802050437122,y=0.3612321845191586 -a=pan,b=pan,i=9669,x=0.1622773559553956,y=0.2408391953166471 -a=zee,b=hat,i=9670,x=0.8623108841707915,y=0.5103999923687886 -a=pan,b=eks,i=9671,x=0.6246995141336152,y=0.9570445916327326 -a=eks,b=eks,i=9676,x=0.3552193074991099,y=0.48796093863435663 -a=pan,b=eks,i=9678,x=0.808264671158733,y=0.7958171364354866 -a=eks,b=zee,i=9679,x=0.7801771579924318,y=0.8039168775444497 -a=zee,b=hat,i=9680,x=0.8361585788416193,y=0.5904904054602013 -a=zee,b=zee,i=9682,x=0.790057108611216,y=0.6026603017260809 -a=hat,b=zee,i=9684,x=0.2251288541796853,y=0.0914353575236524 -a=hat,b=zee,i=9685,x=0.9783350755125275,y=0.6710234655696609 -a=eks,b=wye,i=9686,x=0.2325134660144058,y=0.44098000477056654 -a=eks,b=hat,i=9687,x=0.11435792053370386,y=0.3592405692612377 -a=eks,b=pan,i=9688,x=0.013751121997101046,y=0.21071503600234553 -a=eks,b=eks,i=9689,x=0.1983455661823349,y=0.3353712062497688 -a=pan,b=zee,i=9690,x=0.8642706624839454,y=0.5020203992558137 -a=pan,b=zee,i=9692,x=0.518772161497821,y=0.5305276254149733 -a=hat,b=pan,i=9694,x=0.11556338152672874,y=0.33174635478223324 -a=zee,b=hat,i=9697,x=0.609947885859063,y=0.5639255760997719 -a=pan,b=eks,i=9699,x=0.5797850274201329,y=0.8706915943068293 -a=eks,b=eks,i=9711,x=0.6600637787756933,y=0.8973761456806139 -a=eks,b=pan,i=9712,x=0.6042851641458743,y=0.5283912780602698 -a=pan,b=pan,i=9713,x=0.8335225275262462,y=0.6504888680594751 -a=eks,b=eks,i=9715,x=0.6688071850195556,y=0.8479172328203074 -a=zee,b=eks,i=9717,x=0.15919097637828838,y=0.1961372512286007 -a=hat,b=zee,i=9719,x=0.43422195883532855,y=0.21527795148734652 -a=hat,b=wye,i=9720,x=0.18548878820596515,y=0.0823708416566078 -a=eks,b=hat,i=9721,x=0.3055689756821137,y=0.09846251941046569 -a=pan,b=zee,i=9724,x=0.5536779382214667,y=0.5953194186331342 -a=zee,b=hat,i=9725,x=0.07153658715465838,y=0.3044986057514285 -a=zee,b=eks,i=9726,x=0.7429014874999341,y=0.769520753307292 -a=zee,b=zee,i=9727,x=0.9994904324789629,y=0.9539638011649831 -a=zee,b=wye,i=9729,x=0.585248425583051,y=0.8575390870552795 -a=wye,b=zee,i=9730,x=0.21280831790997046,y=0.215168894307449 -a=pan,b=pan,i=9733,x=0.4805900786042281,y=0.16269527652434412 -a=eks,b=hat,i=9735,x=0.9365415028222407,y=0.7049316644937267 -a=wye,b=hat,i=9736,x=0.8357032803599334,y=0.5980478941599903 -a=hat,b=hat,i=9740,x=0.6123513158512692,y=0.6254032566567909 -a=wye,b=hat,i=9741,x=0.3852066212224572,y=0.18704182599635633 -a=hat,b=pan,i=9742,x=0.3298562598570899,y=0.07896336383457148 -a=wye,b=pan,i=9744,x=0.22511319050031164,y=0.027172244080271968 -a=hat,b=zee,i=9747,x=0.7487247858158664,y=0.7159053727726352 -a=pan,b=zee,i=9749,x=0.34522090703048847,y=0.4157608834458977 -a=pan,b=pan,i=9752,x=0.49208279855492576,y=0.20454810028776949 -a=hat,b=eks,i=9754,x=0.5026259494302875,y=0.8456607478858248 -a=eks,b=zee,i=9755,x=0.5983063482292889,y=0.5332133759436987 -a=hat,b=eks,i=9757,x=0.008475751466850423,y=0.28105237534152183 -a=pan,b=zee,i=9758,x=0.17107174260903157,y=0.37907028999046954 -a=hat,b=eks,i=9763,x=0.5172215091010056,y=0.5656123978535788 -a=pan,b=eks,i=9768,x=0.20367798282554506,y=0.2900189560591435 -a=hat,b=pan,i=9769,x=0.25924528216321086,y=0.09380722776595263 -a=zee,b=wye,i=9772,x=0.5622225319493308,y=0.8404440554821954 -a=wye,b=eks,i=9773,x=0.13486296020405042,y=0.1370545330575903 -a=pan,b=pan,i=9776,x=0.5528717365202791,y=0.6963979512688395 -a=zee,b=zee,i=9783,x=0.9571941589309878,y=0.7438875241555649 -a=wye,b=eks,i=9786,x=0.36572120295268673,y=0.4315097648133279 -a=pan,b=wye,i=9789,x=0.7500082437438368,y=0.6736777772258289 -a=hat,b=zee,i=9790,x=0.32608913911284954,y=0.06744557277974006 -a=eks,b=hat,i=9791,x=0.6359822783546621,y=0.6518259855994504 -a=zee,b=wye,i=9792,x=0.4220728880621055,y=0.17140084746735773 -a=wye,b=eks,i=9793,x=0.11689471664414974,y=0.1874183258828398 -a=wye,b=pan,i=9794,x=0.4771768380141904,y=0.47458700283464794 -a=hat,b=eks,i=9797,x=0.4801061637157764,y=0.27686764370925665 -a=pan,b=wye,i=9799,x=0.9939181050884636,y=0.9933949713028724 -a=eks,b=zee,i=9802,x=0.03433864233340278,y=0.08512282774742341 -a=hat,b=hat,i=9806,x=0.7581986258233882,y=0.6723938004232705 -a=hat,b=zee,i=9807,x=0.734026221575298,y=0.5060212582772865 -a=zee,b=zee,i=9808,x=0.8976695035586633,y=0.8107371161879025 -a=zee,b=eks,i=9809,x=0.9007397692300039,y=0.744200950461551 -a=zee,b=wye,i=9810,x=0.33878497822294384,y=0.19641652801433074 -a=wye,b=eks,i=9811,x=0.3684889443586322,y=0.03845017409345586 -a=zee,b=pan,i=9813,x=0.8206715556120792,y=0.8639781360005004 -a=hat,b=wye,i=9814,x=0.34212469593392425,y=0.20687141477181548 -a=hat,b=pan,i=9815,x=0.17753782684157615,y=0.0015438604368104292 -a=pan,b=hat,i=9816,x=0.24876592451844848,y=0.4470518528813471 -a=wye,b=wye,i=9817,x=0.7049827500065716,y=0.70700844125317 -a=hat,b=zee,i=9819,x=0.19261418898624927,y=0.050366139741013005 -a=hat,b=pan,i=9820,x=0.5447052480269977,y=0.8699888671698426 -a=eks,b=wye,i=9821,x=0.5189946092707575,y=0.6854994867317263 -a=eks,b=zee,i=9822,x=0.7728584654655655,y=0.8255138151084206 -a=wye,b=hat,i=9823,x=0.7885587074785081,y=0.8643021021880486 -a=wye,b=hat,i=9827,x=0.2296202003399993,y=0.10085387835757498 -a=pan,b=pan,i=9829,x=0.1561292001719159,y=0.16006739551266214 -a=pan,b=hat,i=9831,x=0.07903067560527932,y=0.06301267712877379 -a=hat,b=hat,i=9832,x=0.6422615702526209,y=0.8249323364395087 -a=zee,b=hat,i=9833,x=0.10035889696290079,y=0.003028321603898987 -a=hat,b=zee,i=9834,x=0.2640449383149195,y=0.37076593348410314 -a=eks,b=wye,i=9835,x=0.5874685326990423,y=0.9287556289542644 -a=wye,b=pan,i=9836,x=0.8763125291386116,y=0.5144780339183038 -a=zee,b=eks,i=9837,x=0.65481575495434,y=0.7500209738973791 -a=eks,b=pan,i=9838,x=0.6496315038661542,y=0.6072257440552286 -a=eks,b=hat,i=9841,x=0.09722173469836548,y=0.36827480828558046 -a=eks,b=eks,i=9847,x=0.36408179966880305,y=0.005301040380198518 -a=zee,b=hat,i=9848,x=0.7494017826915185,y=0.5716008160658336 -a=pan,b=pan,i=9851,x=0.001361386759249128,y=0.25792849048845146 -a=wye,b=pan,i=9855,x=0.6182578764501776,y=0.7655458252282237 -a=pan,b=hat,i=9856,x=0.8102716531871033,y=0.8313089740346422 -a=zee,b=pan,i=9857,x=0.466306200678794,y=0.10723178210789208 -a=pan,b=pan,i=9860,x=0.5805216264198891,y=0.7328584964292528 -a=pan,b=eks,i=9862,x=0.5507783340308107,y=0.8117197523869161 -a=hat,b=hat,i=9863,x=0.29207020272823003,y=0.3025947324662317 -a=eks,b=wye,i=9864,x=0.11439725902216524,y=0.07940989075873717 -a=eks,b=hat,i=9866,x=0.4975899292735726,y=0.004921317195285879 -a=zee,b=eks,i=9867,x=0.02662315353765099,y=0.34265021760387904 -a=pan,b=pan,i=9868,x=0.4854194107628803,y=0.3198466348114496 -a=hat,b=zee,i=9869,x=0.9595189622375838,y=0.501564353037085 -a=zee,b=hat,i=9871,x=0.6250842276723021,y=0.6957696470514947 -a=hat,b=zee,i=9875,x=0.748712308729834,y=0.7138449723779594 -a=zee,b=wye,i=9876,x=0.8136200511878549,y=0.8072663619726874 -a=eks,b=zee,i=9877,x=0.4863731414322163,y=0.1035362785381897 -a=zee,b=wye,i=9879,x=0.20901422499230626,y=0.4434307845301825 -a=wye,b=eks,i=9880,x=0.7843765179845881,y=0.9652357480134778 -a=zee,b=wye,i=9881,x=0.7862677717692486,y=0.5179978676865895 -a=eks,b=zee,i=9886,x=0.6612732451934941,y=0.8821040941341458 -a=zee,b=wye,i=9894,x=0.6202100179528263,y=0.9712368683190139 -a=pan,b=hat,i=9895,x=0.8641234318244241,y=0.893546531152826 -a=eks,b=hat,i=9896,x=0.10089977663900951,y=0.40511056317517313 -a=pan,b=zee,i=9902,x=0.9054776364609202,y=0.6259317176046434 -a=pan,b=zee,i=9904,x=0.5481438224523807,y=0.7183018840232132 -a=eks,b=pan,i=9906,x=0.19123694955232085,y=0.1361773881166165 -a=pan,b=eks,i=9911,x=0.7646508656008143,y=0.9446343254356182 -a=zee,b=wye,i=9912,x=0.4701991772804557,y=0.33405458598495386 -a=pan,b=eks,i=9913,x=0.8147835691088603,y=0.6617843834409757 -a=pan,b=zee,i=9914,x=0.9240645650332355,y=0.8621654329742796 -a=wye,b=pan,i=9916,x=0.3042515765931557,y=0.37717959119403555 -a=pan,b=zee,i=9918,x=0.062017678365430595,y=0.11198470904331581 -a=wye,b=wye,i=9921,x=0.6906719134435684,y=0.8555178209462388 -a=hat,b=wye,i=9922,x=0.9728689411167353,y=0.8157055538148639 -a=hat,b=eks,i=9926,x=0.1541309399763774,y=0.3791445762682304 -a=wye,b=pan,i=9927,x=0.8783682319990223,y=0.6933957357140185 -a=hat,b=hat,i=9931,x=0.22344053593327007,y=0.3136460886229182 -a=hat,b=hat,i=9934,x=0.20145807804290206,y=0.41891252140867674 -a=eks,b=hat,i=9936,x=0.7556816893135765,y=0.7737786856558144 -a=hat,b=wye,i=9939,x=0.208097253807903,y=0.11669571201990991 -a=hat,b=wye,i=9940,x=0.8460880203022336,y=0.8184128241834582 -a=zee,b=wye,i=9943,x=0.4913245348903704,y=0.25864014284309744 -a=zee,b=zee,i=9946,x=0.13202631656529729,y=0.021604794833400942 -a=pan,b=hat,i=9947,x=0.8783008100979538,y=0.6172168477305974 -a=pan,b=eks,i=9948,x=0.6047433842453397,y=0.53470873199638 -a=pan,b=pan,i=9949,x=0.12278928201439199,y=0.3424112106292362 -a=hat,b=eks,i=9951,x=0.23150439446451176,y=0.362011464774759 -a=pan,b=eks,i=9953,x=0.9690028290247679,y=0.5626274346583657 -a=eks,b=pan,i=9954,x=0.703550423241368,y=0.8640890526817995 -a=pan,b=wye,i=9959,x=0.5523199497193726,y=0.844808439474632 -a=eks,b=pan,i=9961,x=0.0018643836079239584,y=0.22214207434571398 -a=eks,b=hat,i=9965,x=0.45140832054850244,y=0.4872441473665683 -a=hat,b=zee,i=9966,x=0.09915562191171134,y=0.19911839331011605 -a=eks,b=hat,i=9971,x=0.16013813822306744,y=0.18970582735969377 -a=hat,b=wye,i=9972,x=0.01092212097676093,y=0.19287438329005957 -a=zee,b=eks,i=9975,x=0.14164773949664755,y=0.16897907378815158 -a=eks,b=zee,i=9977,x=0.4549080098494652,y=0.2027740955809184 -a=pan,b=hat,i=9978,x=0.18068678390966952,y=0.24718291910572177 -a=eks,b=pan,i=9981,x=0.2544586487901952,y=0.4578886296197162 -a=wye,b=eks,i=9982,x=0.34998222187670314,y=0.3061867938018288 -a=wye,b=hat,i=9983,x=0.4640332038264391,y=0.019243858556094673 -a=pan,b=hat,i=9984,x=0.48914378417931326,y=0.36728976081695264 -a=hat,b=zee,i=9985,x=0.5155567078470872,y=0.6010598365861822 -a=hat,b=hat,i=9987,x=0.429284826906265,y=0.1787642439603777 -a=wye,b=eks,i=9989,x=0.8561772298898314,y=0.6874185671784931 -a=eks,b=pan,i=9990,x=0.06739304569008775,y=0.2341964277411741 -a=hat,b=wye,i=9991,x=0.3633322891461138,y=0.12892395206278184 -a=zee,b=wye,i=9996,x=0.72761807629368,y=0.6860394313092489 -a=eks,b=pan,i=9998,x=0.5554835956450555,y=0.7053505857791378 -a=zee,b=pan,i=10000,x=0.02349941792343435,y=0.19861196418373683 diff --git a/docs6/src/data/miss-date.csv b/docs6/src/data/miss-date.csv deleted file mode 100644 index 3245ca189..000000000 --- a/docs6/src/data/miss-date.csv +++ /dev/null @@ -1,1372 +0,0 @@ -date,qoh -2012-03-05,10055 -2012-03-06,10486 -2012-03-07,10430 -2012-03-08,10674 -2012-03-09,10880 -2012-03-10,10718 -2012-03-11,10795 -2012-03-12,11043 -2012-03-13,11177 -2012-03-14,11498 -2012-03-15,11664 -2012-03-16,11524 -2012-03-17,11703 -2012-03-18,11803 -2012-03-19,11787 -2012-03-20,12164 -2012-03-21,12063 -2012-03-22,12180 -2012-03-23,12304 -2012-03-24,12370 -2012-03-25,12563 -2012-03-26,13020 -2012-03-27,13329 -2012-03-28,13368 -2012-03-29,13175 -2012-03-30,13516 -2012-03-31,13937 -2012-04-01,14135 -2012-04-02,14114 -2012-04-03,14600 -2012-04-04,14694 -2012-04-05,15146 -2012-04-06,15123 -2012-04-07,15407 -2012-04-08,15360 -2012-04-09,15529 -2012-04-10,15452 -2012-04-11,15478 -2012-04-12,15420 -2012-04-13,15553 -2012-04-14,15954 -2012-04-15,16098 -2012-04-16,15995 -2012-04-17,16020 -2012-04-18,16274 -2012-04-19,16408 -2012-04-20,16876 -2012-04-21,16761 -2012-04-22,16998 -2012-04-23,17035 -2012-04-24,16902 -2012-04-25,17139 -2012-04-26,17260 -2012-04-27,17637 -2012-04-28,17705 -2012-04-29,17679 -2012-04-30,18174 -2012-05-01,18277 -2012-05-02,18542 -2012-05-03,18595 -2012-05-04,19073 -2012-05-05,19109 -2012-05-06,19566 -2012-05-07,19488 -2012-05-08,19716 -2012-05-09,19941 -2012-05-10,20412 -2012-05-11,20319 -2012-05-12,20529 -2012-05-13,20917 -2012-05-14,20790 -2012-05-15,20667 -2012-05-16,20557 -2012-05-17,20360 -2012-05-18,20816 -2012-05-19,21238 -2012-05-20,21202 -2012-05-21,21357 -2012-05-22,21391 -2012-05-23,21267 -2012-05-24,21761 -2012-05-25,21707 -2012-05-26,21634 -2012-05-27,21781 -2012-05-28,21668 -2012-05-29,21772 -2012-05-30,21917 -2012-05-31,21918 -2012-06-01,21824 -2012-06-02,21830 -2012-06-03,21861 -2012-06-04,22183 -2012-06-05,22097 -2012-06-06,22133 -2012-06-07,21984 -2012-06-08,21985 -2012-06-09,22266 -2012-06-10,22576 -2012-06-11,22408 -2012-06-12,22448 -2012-06-13,22281 -2012-06-14,22212 -2012-06-15,22678 -2012-06-16,23026 -2012-06-17,23008 -2012-06-18,23303 -2012-06-19,23653 -2012-06-20,23836 -2012-06-21,24070 -2012-06-22,24179 -2012-06-23,24071 -2012-06-24,24010 -2012-06-25,24232 -2012-06-26,24037 -2012-06-27,23869 -2012-06-28,23796 -2012-06-29,24199 -2012-06-30,24379 -2012-07-01,24230 -2012-07-02,24162 -2012-07-03,24271 -2012-07-04,24629 -2012-07-05,25027 -2012-07-06,25287 -2012-07-07,25370 -2012-07-08,25397 -2012-07-09,25538 -2012-07-10,25844 -2012-07-11,25660 -2012-07-12,25744 -2012-07-13,26064 -2012-07-14,26132 -2012-07-15,26264 -2012-07-16,26196 -2012-07-17,26610 -2012-07-18,26833 -2012-07-19,27102 -2012-07-20,27350 -2012-07-21,27661 -2012-07-22,27740 -2012-07-23,27689 -2012-07-24,27818 -2012-07-25,28249 -2012-07-26,28080 -2012-07-27,28500 -2012-07-28,28450 -2012-07-29,28885 -2012-07-30,29340 -2012-07-31,29216 -2012-08-01,29131 -2012-08-02,29234 -2012-08-03,29567 -2012-08-04,29579 -2012-08-05,29962 -2012-08-06,30223 -2012-08-07,30501 -2012-08-08,30388 -2012-08-09,30673 -2012-08-10,30578 -2012-08-11,30484 -2012-08-12,30367 -2012-08-13,30689 -2012-08-14,30558 -2012-08-15,30581 -2012-08-16,30518 -2012-08-17,30910 -2012-08-18,31016 -2012-08-19,31105 -2012-08-20,31287 -2012-08-21,31233 -2012-08-22,31082 -2012-08-23,31572 -2012-08-24,31530 -2012-08-25,31726 -2012-08-26,32083 -2012-08-27,32358 -2012-08-28,32659 -2012-08-29,32931 -2012-08-30,33119 -2012-08-31,33298 -2012-09-01,33180 -2012-09-02,33564 -2012-09-03,34027 -2012-09-04,34145 -2012-09-05,34271 -2012-09-06,34461 -2012-09-07,34873 -2012-09-08,35033 -2012-09-09,35473 -2012-09-10,35857 -2012-09-11,36116 -2012-09-12,36263 -2012-09-13,36567 -2012-09-14,36657 -2012-09-15,36948 -2012-09-16,37094 -2012-09-17,37284 -2012-09-18,37420 -2012-09-19,37878 -2012-09-20,37882 -2012-09-21,38366 -2012-09-22,38206 -2012-09-23,38152 -2012-09-24,38016 -2012-09-25,38265 -2012-09-26,38156 -2012-09-27,38443 -2012-09-28,38559 -2012-09-29,38867 -2012-09-30,38856 -2012-10-01,39210 -2012-10-02,39492 -2012-10-03,39837 -2012-10-04,40151 -2012-10-05,40271 -2012-10-06,40275 -2012-10-07,40556 -2012-10-08,40382 -2012-10-09,40841 -2012-10-10,41146 -2012-10-11,41042 -2012-10-12,41263 -2012-10-13,41452 -2012-10-14,41310 -2012-10-15,41198 -2012-10-16,41585 -2012-10-17,41856 -2012-10-18,41778 -2012-10-19,42103 -2012-10-20,42193 -2012-10-21,42673 -2012-10-22,42832 -2012-10-23,43056 -2012-10-24,42884 -2012-10-25,43040 -2012-10-26,43444 -2012-10-27,43541 -2012-10-28,43759 -2012-10-29,43640 -2012-10-30,43737 -2012-10-31,43961 -2012-11-01,44036 -2012-11-02,44118 -2012-11-03,44570 -2012-11-04,44739 -2012-11-05,44804 -2012-11-06,45029 -2012-11-07,45018 -2012-11-08,45278 -2012-11-09,45401 -2012-11-10,45429 -2012-11-11,45802 -2012-11-12,45802 -2012-11-13,45727 -2012-11-14,45908 -2012-11-15,46165 -2012-11-16,46398 -2012-11-17,46864 -2012-11-18,46824 -2012-11-19,46839 -2012-11-20,46948 -2012-11-21,47381 -2012-11-22,47694 -2012-11-23,48125 -2012-11-24,48433 -2012-11-25,48869 -2012-11-26,48678 -2012-11-27,48905 -2012-11-28,49377 -2012-11-29,49490 -2012-11-30,49350 -2012-12-01,49818 -2012-12-02,50259 -2012-12-03,50159 -2012-12-04,50467 -2012-12-05,50669 -2012-12-06,50901 -2012-12-07,51173 -2012-12-08,51453 -2012-12-09,51638 -2012-12-10,51578 -2012-12-11,51549 -2012-12-12,51397 -2012-12-13,51864 -2012-12-14,52139 -2012-12-15,52071 -2012-12-16,52310 -2012-12-17,52542 -2012-12-18,52416 -2012-12-19,52591 -2012-12-20,52413 -2012-12-21,52709 -2012-12-22,53126 -2012-12-23,53386 -2012-12-24,53858 -2012-12-25,54261 -2012-12-26,54274 -2012-12-27,54376 -2012-12-28,54182 -2012-12-29,54066 -2012-12-30,53933 -2012-12-31,53923 -2013-01-01,53810 -2013-01-02,53913 -2013-01-03,54227 -2013-01-04,54293 -2013-01-05,54553 -2013-01-06,54721 -2013-01-07,55010 -2013-01-08,55275 -2013-01-09,55080 -2013-01-10,55509 -2013-01-11,55405 -2013-01-12,55676 -2013-01-13,55855 -2013-01-14,56135 -2013-01-15,56444 -2013-01-16,56639 -2013-01-17,56532 -2013-01-18,56575 -2013-01-19,56401 -2013-01-20,56727 -2013-01-21,56913 -2013-01-22,56830 -2013-01-23,57286 -2013-01-24,57340 -2013-01-25,57370 -2013-01-26,57499 -2013-01-27,57731 -2013-01-28,58152 -2013-01-29,58099 -2013-01-30,57991 -2013-01-31,57949 -2013-02-01,58176 -2013-02-02,58023 -2013-02-03,58080 -2013-02-04,58510 -2013-02-05,58885 -2013-02-06,59080 -2013-02-07,59075 -2013-02-08,59070 -2013-02-09,59504 -2013-02-10,59833 -2013-02-11,60001 -2013-02-12,60073 -2013-02-13,60526 -2013-02-14,60461 -2013-02-15,60539 -2013-02-16,60381 -2013-02-17,60259 -2013-02-18,60481 -2013-02-19,60415 -2013-02-20,60850 -2013-02-21,60915 -2013-02-22,60969 -2013-02-23,61115 -2013-02-24,61498 -2013-02-25,61524 -2013-02-26,61752 -2013-02-27,62111 -2013-02-28,62397 -2013-03-01,62619 -2013-03-02,62997 -2013-03-03,62888 -2013-03-04,62854 -2013-03-05,62748 -2013-03-06,62556 -2013-03-07,62936 -2013-03-08,62990 -2013-03-09,62883 -2013-03-10,62692 -2013-03-11,62867 -2013-03-12,63244 -2013-03-13,63359 -2013-03-14,63719 -2013-03-15,63754 -2013-03-16,63762 -2013-03-17,63570 -2013-03-18,63394 -2013-03-19,63380 -2013-03-20,63384 -2013-03-21,63849 -2013-03-22,64244 -2013-03-23,64710 -2013-03-24,64874 -2013-03-25,65316 -2013-03-26,65499 -2013-03-27,65592 -2013-03-28,65687 -2013-03-29,65492 -2013-03-30,65512 -2013-03-31,65803 -2013-04-01,65996 -2013-04-02,66095 -2013-04-03,66134 -2013-04-04,66039 -2013-04-05,66255 -2013-04-06,66201 -2013-04-07,66526 -2013-04-08,66817 -2013-04-09,67094 -2013-04-10,67308 -2013-04-11,67570 -2013-04-12,67654 -2013-04-13,67916 -2013-04-14,68414 -2013-04-15,68620 -2013-04-16,68440 -2013-04-17,68861 -2013-04-18,68681 -2013-04-19,68747 -2013-04-20,68913 -2013-04-21,69174 -2013-04-22,69263 -2013-04-23,69310 -2013-04-24,69729 -2013-04-25,69723 -2013-04-26,69724 -2013-04-27,69803 -2013-04-28,69999 -2013-04-29,70109 -2013-04-30,69949 -2013-05-01,70383 -2013-05-02,70756 -2013-05-03,71218 -2013-05-04,71530 -2013-05-05,71679 -2013-05-06,71558 -2013-05-07,71359 -2013-05-08,71844 -2013-05-09,71931 -2013-05-10,71837 -2013-05-11,71664 -2013-05-12,71941 -2013-05-13,72000 -2013-05-14,71964 -2013-05-15,72254 -2013-05-16,72713 -2013-05-17,73159 -2013-05-18,73431 -2013-05-19,73531 -2013-05-20,73994 -2013-05-21,73922 -2013-05-22,73927 -2013-05-23,74268 -2013-05-24,74306 -2013-05-25,74515 -2013-05-26,74575 -2013-05-27,74495 -2013-05-28,74994 -2013-05-29,74961 -2013-05-30,75376 -2013-05-31,75510 -2013-06-01,75845 -2013-06-02,75646 -2013-06-03,75984 -2013-06-04,76390 -2013-06-05,76657 -2013-06-06,76928 -2013-06-07,76814 -2013-06-08,76915 -2013-06-09,77156 -2013-06-10,77286 -2013-06-11,77111 -2013-06-12,77446 -2013-06-13,77532 -2013-06-14,77556 -2013-06-15,77978 -2013-06-16,78388 -2013-06-17,78445 -2013-06-18,78672 -2013-06-19,78532 -2013-06-20,78958 -2013-06-21,79430 -2013-06-22,79495 -2013-06-23,79946 -2013-06-24,80285 -2013-06-25,80618 -2013-06-26,81044 -2013-06-27,80855 -2013-06-28,81299 -2013-06-29,81353 -2013-06-30,81710 -2013-07-01,81688 -2013-07-02,81854 -2013-07-03,82250 -2013-07-04,82383 -2013-07-05,82476 -2013-07-06,82929 -2013-07-07,83098 -2013-07-08,83201 -2013-07-09,83307 -2013-07-10,83174 -2013-07-11,83614 -2013-07-12,83700 -2013-07-13,84146 -2013-07-14,84073 -2013-07-15,84544 -2013-07-16,84831 -2013-07-17,85220 -2013-07-18,85664 -2013-07-19,86010 -2013-07-20,85995 -2013-07-21,86088 -2013-07-22,86206 -2013-07-23,86704 -2013-07-24,86533 -2013-07-25,86863 -2013-07-26,87285 -2013-07-27,87526 -2013-07-28,87507 -2013-07-29,87553 -2013-07-30,87873 -2013-07-31,87833 -2013-08-01,87947 -2013-08-02,88425 -2013-08-03,88613 -2013-08-04,89083 -2013-08-05,89331 -2013-08-06,89718 -2013-08-07,89929 -2013-08-08,89896 -2013-08-09,89724 -2013-08-10,90218 -2013-08-11,90687 -2013-08-12,91073 -2013-08-13,91199 -2013-08-14,91190 -2013-08-15,91290 -2013-08-16,91114 -2013-08-17,91321 -2013-08-18,91637 -2013-08-19,91564 -2013-08-20,91670 -2013-08-21,91766 -2013-08-22,91939 -2013-08-23,91786 -2013-08-24,91925 -2013-08-25,92100 -2013-08-26,92566 -2013-08-27,92624 -2013-08-28,93084 -2013-08-29,93277 -2013-08-30,93305 -2013-08-31,93298 -2013-09-01,93360 -2013-09-02,93175 -2013-09-03,93039 -2013-09-04,92892 -2013-09-05,92700 -2013-09-06,92700 -2013-09-07,92608 -2013-09-08,92790 -2013-09-09,92711 -2013-09-10,92654 -2013-09-11,92749 -2013-09-12,93083 -2013-09-13,93070 -2013-09-14,93291 -2013-09-15,93228 -2013-09-16,93533 -2013-09-17,93541 -2013-09-18,93561 -2013-09-19,93464 -2013-09-20,93895 -2013-09-21,93885 -2013-09-22,94249 -2013-09-23,94313 -2013-09-24,94368 -2013-09-25,94388 -2013-09-26,94779 -2013-09-27,95191 -2013-09-28,95198 -2013-09-29,95322 -2013-09-30,95396 -2013-10-01,95535 -2013-10-02,95413 -2013-10-03,95714 -2013-10-04,95753 -2013-10-05,96013 -2013-10-06,96484 -2013-10-07,96925 -2013-10-08,97050 -2013-10-09,97392 -2013-10-10,97205 -2013-10-11,97576 -2013-10-12,97625 -2013-10-13,97591 -2013-10-14,97755 -2013-10-15,98118 -2013-10-16,98611 -2013-10-17,98558 -2013-10-18,98835 -2013-10-19,99333 -2013-10-20,99675 -2013-10-21,100080 -2013-10-22,100128 -2013-10-23,99946 -2013-10-24,100229 -2013-10-25,100182 -2013-10-26,100283 -2013-10-27,100232 -2013-10-28,100447 -2013-10-29,100924 -2013-10-30,101233 -2013-10-31,101612 -2013-11-01,102005 -2013-11-02,101987 -2013-11-03,101901 -2013-11-04,102172 -2013-11-05,102288 -2013-11-06,102298 -2013-11-07,102230 -2013-11-08,102508 -2013-11-09,102649 -2013-11-10,102989 -2013-11-11,102863 -2013-11-12,103099 -2013-11-13,102993 -2013-11-14,103372 -2013-11-15,103490 -2013-11-16,103567 -2013-11-17,103669 -2013-11-18,103737 -2013-11-19,103594 -2013-11-20,103749 -2013-11-21,104137 -2013-11-22,104471 -2013-11-23,104668 -2013-11-24,104946 -2013-11-25,104763 -2013-11-26,104951 -2013-11-27,105215 -2013-11-28,105698 -2013-11-29,105681 -2013-11-30,105791 -2013-12-01,106159 -2013-12-02,106338 -2013-12-03,106580 -2013-12-04,106716 -2013-12-05,106678 -2013-12-06,107045 -2013-12-07,107532 -2013-12-08,107669 -2013-12-09,108122 -2013-12-10,108591 -2013-12-11,108923 -2013-12-12,109274 -2013-12-13,109253 -2013-12-14,109658 -2013-12-15,109884 -2013-12-16,109783 -2013-12-17,109720 -2013-12-18,110184 -2013-12-19,110639 -2013-12-20,111059 -2013-12-21,111414 -2013-12-22,111697 -2013-12-23,111961 -2013-12-24,111782 -2013-12-25,112053 -2013-12-26,112066 -2013-12-27,112443 -2013-12-28,112808 -2013-12-29,112931 -2013-12-30,112987 -2013-12-31,112836 -2014-01-01,113236 -2014-01-02,113432 -2014-01-03,113404 -2014-01-04,113626 -2014-01-05,113496 -2014-01-06,113378 -2014-01-07,113488 -2014-01-08,113640 -2014-01-09,113458 -2014-01-10,113398 -2014-01-11,113868 -2014-01-12,113849 -2014-01-13,113857 -2014-01-14,114291 -2014-01-15,114713 -2014-01-16,114766 -2014-01-17,115164 -2014-01-18,115053 -2014-01-19,115484 -2014-01-20,115387 -2014-01-21,115434 -2014-01-22,115581 -2014-01-23,115942 -2014-01-24,116423 -2014-01-25,116669 -2014-01-26,116970 -2014-01-27,116993 -2014-01-28,117482 -2014-01-29,117667 -2014-01-30,118038 -2014-01-31,118215 -2014-02-01,118267 -2014-02-02,118670 -2014-02-03,119014 -2014-02-04,119335 -2014-02-05,119407 -2014-02-06,119450 -2014-02-07,119749 -2014-02-08,120235 -2014-02-09,120551 -2014-02-10,120538 -2014-02-11,121022 -2014-02-12,121020 -2014-02-13,121296 -2014-02-14,121718 -2014-02-15,121697 -2014-02-16,121564 -2014-02-17,121818 -2014-02-18,122041 -2014-02-19,122389 -2014-02-20,122669 -2014-02-21,122584 -2014-02-22,122569 -2014-02-23,122428 -2014-02-24,122482 -2014-02-25,122612 -2014-02-26,122499 -2014-02-27,122691 -2014-02-28,122837 -2014-03-01,123104 -2014-03-02,123456 -2014-03-03,123441 -2014-03-04,123735 -2014-03-05,123698 -2014-03-06,124103 -2014-03-07,124227 -2014-03-08,124668 -2014-03-09,124868 -2014-03-10,125159 -2014-03-11,125442 -2014-03-12,125476 -2014-03-13,125675 -2014-03-14,125963 -2014-03-15,126101 -2014-03-16,126112 -2014-03-17,126089 -2014-03-18,126542 -2014-03-19,126454 -2014-03-20,126463 -2014-03-21,126732 -2014-03-22,126897 -2014-03-23,126707 -2014-03-24,126666 -2014-03-25,126756 -2014-03-26,127008 -2014-03-27,127421 -2014-03-28,127327 -2014-03-29,127650 -2014-03-30,127984 -2014-03-31,127873 -2014-04-01,127876 -2014-04-02,128090 -2014-04-03,127976 -2014-04-04,128218 -2014-04-05,128534 -2014-04-06,128633 -2014-04-07,128557 -2014-04-08,128745 -2014-04-09,129025 -2014-04-10,129176 -2014-04-11,129560 -2014-04-12,129435 -2014-04-13,129868 -2014-04-14,129797 -2014-04-15,129919 -2014-04-16,130181 -2014-04-19,130140 -2014-04-20,130271 -2014-04-21,130368 -2014-04-22,130368 -2014-04-23,130849 -2014-04-24,131026 -2014-04-25,131317 -2014-04-26,131274 -2014-04-27,131696 -2014-04-28,132033 -2014-04-29,132035 -2014-04-30,132408 -2014-05-01,132495 -2014-05-02,132897 -2014-05-03,132872 -2014-05-04,132918 -2014-05-05,133074 -2014-05-06,133082 -2014-05-07,133084 -2014-05-08,133223 -2014-05-09,133673 -2014-05-10,133751 -2014-05-11,133836 -2014-05-12,134071 -2014-05-13,134243 -2014-05-14,134454 -2014-05-15,134949 -2014-05-16,134883 -2014-05-17,135105 -2014-05-18,135027 -2014-05-19,135383 -2014-05-20,135742 -2014-05-21,135551 -2014-05-22,135876 -2014-05-23,136110 -2014-05-24,136107 -2014-05-25,135994 -2014-05-26,136371 -2014-05-27,136676 -2014-05-28,136647 -2014-05-29,136773 -2014-05-30,137082 -2014-05-31,137209 -2014-06-01,137248 -2014-06-02,137589 -2014-06-03,137662 -2014-06-04,137926 -2014-06-05,137988 -2014-06-06,138187 -2014-06-07,138517 -2014-06-08,138519 -2014-06-09,138750 -2014-06-10,138929 -2014-06-11,139190 -2014-06-12,139460 -2014-06-13,139361 -2014-06-14,139179 -2014-06-15,139375 -2014-06-16,139435 -2014-06-17,139852 -2014-06-18,140055 -2014-06-19,140347 -2014-06-20,140183 -2014-06-21,140257 -2014-06-22,140195 -2014-06-23,140474 -2014-06-24,140884 -2014-06-25,140794 -2014-06-26,140916 -2014-06-27,141349 -2014-06-28,141554 -2014-06-29,141961 -2014-06-30,141769 -2014-07-01,142084 -2014-07-02,142049 -2014-07-03,142262 -2014-07-04,142523 -2014-07-05,142929 -2014-07-06,143196 -2014-07-07,143150 -2014-07-08,142977 -2014-07-09,143320 -2014-07-10,143432 -2014-07-11,143648 -2014-07-12,143824 -2014-07-13,144293 -2014-07-14,144333 -2014-07-15,144720 -2014-07-16,144625 -2014-07-17,144753 -2014-07-18,144787 -2014-07-19,145022 -2014-07-20,145049 -2014-07-21,145493 -2014-07-22,145897 -2014-07-23,145838 -2014-07-24,146305 -2014-07-25,146669 -2014-07-26,146705 -2014-07-27,147077 -2014-07-28,147432 -2014-07-29,147442 -2014-07-30,147845 -2014-07-31,148183 -2014-08-01,148224 -2014-08-02,148631 -2014-08-03,149074 -2014-08-04,149328 -2014-08-05,149536 -2014-08-06,149987 -2014-08-07,150385 -2014-08-08,150584 -2014-08-09,150962 -2014-08-10,151175 -2014-08-11,151115 -2014-08-12,151022 -2014-08-13,151025 -2014-08-14,151118 -2014-08-15,151585 -2014-08-16,151389 -2014-08-17,151889 -2014-08-18,152067 -2014-08-19,152292 -2014-08-20,152305 -2014-08-21,152320 -2014-08-22,152493 -2014-08-23,152551 -2014-08-24,152397 -2014-08-25,152360 -2014-08-26,152832 -2014-08-27,152886 -2014-08-28,153112 -2014-08-29,153585 -2014-08-30,153869 -2014-08-31,153754 -2014-09-01,153769 -2014-09-02,153816 -2014-09-03,154118 -2014-09-04,154309 -2014-09-05,154724 -2014-09-06,154871 -2014-09-07,155142 -2014-09-08,154954 -2014-09-09,155435 -2014-09-10,155806 -2014-09-11,155660 -2014-09-12,155976 -2014-09-13,156166 -2014-09-14,156312 -2014-09-15,156377 -2014-09-16,156473 -2014-09-17,156930 -2014-09-18,156770 -2014-09-19,156736 -2014-09-20,157036 -2014-09-21,157037 -2014-09-22,157204 -2014-09-23,157626 -2014-09-24,157799 -2014-09-25,158135 -2014-09-26,158098 -2014-09-27,158072 -2014-09-28,157900 -2014-09-29,157826 -2014-09-30,157715 -2014-10-01,158165 -2014-10-02,158084 -2014-10-03,158025 -2014-10-04,158000 -2014-10-05,158165 -2014-10-06,158207 -2014-10-07,158599 -2014-10-08,158497 -2014-10-09,158759 -2014-10-10,158773 -2014-10-11,159158 -2014-10-12,159448 -2014-10-13,159806 -2014-10-14,159722 -2014-10-15,159629 -2014-10-16,159616 -2014-10-17,159627 -2014-10-18,160073 -2014-10-19,160039 -2014-10-20,160181 -2014-10-21,160507 -2014-10-22,160515 -2014-10-23,160805 -2014-10-24,161068 -2014-10-25,161561 -2014-10-26,161508 -2014-10-27,161804 -2014-10-28,161934 -2014-10-29,161738 -2014-10-30,161639 -2014-10-31,161853 -2014-11-01,161732 -2014-11-02,162040 -2014-11-03,162383 -2014-11-04,162627 -2014-11-05,163117 -2014-11-06,163211 -2014-11-07,163249 -2014-11-08,163368 -2014-11-09,163412 -2014-11-10,163588 -2014-11-11,163844 -2014-11-12,163956 -2014-11-13,164113 -2014-11-14,163920 -2014-11-15,163831 -2014-11-16,163734 -2014-11-17,163684 -2014-11-18,163805 -2014-11-19,164272 -2014-11-20,164243 -2014-11-21,164739 -2014-11-22,164691 -2014-11-23,164676 -2014-11-24,165005 -2014-11-25,165438 -2014-11-26,165653 -2014-11-27,165546 -2014-11-28,165416 -2014-11-29,165699 -2014-11-30,165511 -2014-12-01,165523 -2014-12-02,165941 -2014-12-03,166320 -2014-12-04,166157 -2014-12-05,166066 -2014-12-06,166352 -2014-12-07,166487 -2014-12-08,166746 -2014-12-09,166966 -2014-12-10,167458 -2014-12-11,167485 -2014-12-12,167985 -2014-12-13,168400 -2014-12-14,168654 -2014-12-15,168575 -2014-12-16,168530 -2014-12-17,168370 -2014-12-18,168415 -2014-12-19,168243 -2014-12-20,168054 -2014-12-21,168335 -2014-12-22,168346 -2014-12-23,168599 -2014-12-24,168842 -2014-12-25,169111 -2014-12-26,169077 -2014-12-27,169528 -2014-12-28,169684 -2014-12-29,170020 -2014-12-30,170221 -2014-12-31,170561 -2015-01-01,170989 -2015-01-02,171404 -2015-01-03,171643 -2015-01-04,171744 -2015-01-05,171925 -2015-01-06,171751 -2015-01-07,172099 -2015-01-08,172316 -2015-01-09,172379 -2015-01-10,172484 -2015-01-11,172457 -2015-01-12,172884 -2015-01-13,172841 -2015-01-14,172860 -2015-01-15,172851 -2015-01-16,172960 -2015-01-17,173098 -2015-01-18,172998 -2015-01-19,173158 -2015-01-20,173109 -2015-01-21,173375 -2015-01-22,173720 -2015-01-23,173583 -2015-01-24,173717 -2015-01-25,173954 -2015-01-26,174060 -2015-01-27,174037 -2015-01-28,174039 -2015-01-29,174046 -2015-01-30,174227 -2015-01-31,174301 -2015-02-01,174575 -2015-02-02,174761 -2015-02-03,174780 -2015-02-04,175199 -2015-02-05,175296 -2015-02-06,175205 -2015-02-07,175532 -2015-02-08,175468 -2015-02-09,175795 -2015-02-10,175859 -2015-02-11,175712 -2015-02-12,175838 -2015-02-13,176007 -2015-02-14,176203 -2015-02-15,176143 -2015-02-16,176581 -2015-02-17,177008 -2015-02-18,177105 -2015-02-19,177407 -2015-02-20,177513 -2015-02-21,177759 -2015-02-22,178004 -2015-02-23,177822 -2015-02-24,177778 -2015-02-25,177795 -2015-02-26,178002 -2015-02-27,178185 -2015-02-28,178543 -2015-03-01,178674 -2015-03-02,179152 -2015-03-03,179122 -2015-03-04,179073 -2015-03-05,179323 -2015-03-06,179537 -2015-03-07,179563 -2015-03-08,179828 -2015-03-09,179944 -2015-03-10,180122 -2015-03-11,179962 -2015-03-12,179873 -2015-03-13,180073 -2015-03-14,180306 -2015-03-15,180528 -2015-03-16,180361 -2015-03-17,180741 -2015-03-18,180906 -2015-03-19,181146 -2015-03-20,180970 -2015-03-21,180973 -2015-03-22,180889 -2015-03-23,181192 -2015-03-24,181144 -2015-03-25,181006 -2015-03-26,180995 -2015-03-27,181043 -2015-03-28,181112 -2015-03-29,181306 -2015-03-31,181625 -2015-04-01,181494 -2015-04-02,181718 -2015-04-03,181835 -2015-04-04,182104 -2015-04-05,182528 -2015-04-06,182667 -2015-04-07,182984 -2015-04-08,182844 -2015-04-09,183292 -2015-04-10,183456 -2015-04-11,183708 -2015-04-12,184039 -2015-04-13,184062 -2015-04-14,184497 -2015-04-15,184858 -2015-04-16,184884 -2015-04-17,185020 -2015-04-18,185376 -2015-04-19,185752 -2015-04-20,185894 -2015-04-21,185930 -2015-04-22,185908 -2015-04-23,186006 -2015-04-24,185844 -2015-04-25,186330 -2015-04-26,186663 -2015-04-27,186952 -2015-04-28,186990 -2015-04-29,187191 -2015-04-30,187648 -2015-05-01,187660 -2015-05-02,187567 -2015-05-03,187875 -2015-05-04,187966 -2015-05-05,188424 -2015-05-06,188243 -2015-05-07,188198 -2015-05-08,188104 -2015-05-09,188409 -2015-05-10,188890 -2015-05-11,189275 -2015-05-12,189216 -2015-05-13,189520 -2015-05-14,189612 -2015-05-15,189416 -2015-05-16,189361 -2015-05-17,189195 -2015-05-18,189316 -2015-05-19,189294 -2015-05-20,189451 -2015-05-21,189487 -2015-05-22,189770 -2015-05-23,189729 -2015-05-24,189967 -2015-05-25,190051 -2015-05-26,189894 -2015-05-27,189903 -2015-05-28,190109 -2015-05-29,189921 -2015-05-30,189866 -2015-05-31,190237 -2015-06-01,190501 -2015-06-02,190948 -2015-06-03,190847 -2015-06-04,191271 -2015-06-05,191287 -2015-06-06,191526 -2015-06-07,191472 -2015-06-08,191771 -2015-06-09,191691 -2015-06-10,191775 -2015-06-11,191814 -2015-06-12,192062 -2015-06-13,192246 -2015-06-14,192180 -2015-06-15,192021 -2015-06-16,192509 -2015-06-17,192936 -2015-06-18,192893 -2015-06-19,192833 -2015-06-20,192826 -2015-06-21,192725 -2015-06-22,192787 -2015-06-23,192926 -2015-06-24,192902 -2015-06-25,193226 -2015-06-26,193685 -2015-06-27,193917 -2015-06-28,193861 -2015-06-29,193997 -2015-06-30,194001 -2015-07-01,194429 -2015-07-02,194584 -2015-07-03,194984 -2015-07-04,195437 -2015-07-05,195784 -2015-07-06,195785 -2015-07-07,195926 -2015-07-08,195733 -2015-07-09,196150 -2015-07-10,196128 -2015-07-11,196506 -2015-07-12,196824 -2015-07-13,196749 -2015-07-14,196767 -2015-07-15,197058 -2015-07-16,197557 -2015-07-17,198016 -2015-07-18,197846 -2015-07-19,198314 -2015-07-20,198760 -2015-07-21,199148 -2015-07-22,199247 -2015-07-23,199377 -2015-07-24,199199 -2015-07-25,199488 -2015-07-26,199667 -2015-07-27,199613 -2015-07-28,199426 -2015-07-29,199329 -2015-07-30,199288 -2015-07-31,199283 -2015-08-01,199360 -2015-08-02,199629 -2015-08-03,200005 -2015-08-04,200503 -2015-08-05,200371 -2015-08-06,200617 -2015-08-07,200604 -2015-08-08,200454 -2015-08-09,200916 -2015-08-10,200890 -2015-08-11,201049 -2015-08-12,201078 -2015-08-13,201554 -2015-08-14,201498 -2015-08-15,201828 -2015-08-16,201994 -2015-08-17,202123 -2015-08-18,202594 -2015-08-19,202895 -2015-08-20,202843 -2015-08-21,203087 -2015-08-22,203259 -2015-08-23,203483 -2015-08-24,203336 -2015-08-25,203201 -2015-08-26,203127 -2015-08-27,203215 -2015-08-28,203645 -2015-08-29,203857 -2015-08-30,203891 -2015-08-31,204148 -2015-09-01,204370 -2015-09-02,204624 -2015-09-03,204904 -2015-09-04,204916 -2015-09-05,204997 -2015-09-06,204996 -2015-09-07,205496 -2015-09-08,205746 -2015-09-09,206131 -2015-09-10,206318 -2015-09-11,206201 -2015-09-12,206403 -2015-09-13,206670 -2015-09-14,206898 -2015-09-15,206777 -2015-09-16,207075 -2015-09-17,207382 -2015-09-18,207497 -2015-09-19,207871 -2015-09-20,208128 -2015-09-21,208581 -2015-09-22,208571 -2015-09-23,208387 -2015-09-24,208718 -2015-09-25,208534 -2015-09-26,208825 -2015-09-27,208997 -2015-09-28,209327 -2015-09-29,209713 -2015-09-30,210165 -2015-10-01,209998 -2015-10-02,210056 -2015-10-03,210091 -2015-10-04,210506 -2015-10-05,210545 -2015-10-06,210450 -2015-10-07,210889 -2015-10-08,211101 -2015-10-09,211473 -2015-10-10,211868 -2015-10-11,212363 -2015-10-12,212416 -2015-10-13,212506 -2015-10-14,212742 -2015-10-15,212953 -2015-10-16,213116 -2015-10-17,213032 -2015-10-18,213231 -2015-10-19,213703 -2015-10-20,213679 -2015-10-21,213753 -2015-10-22,214055 -2015-10-23,213969 -2015-10-24,214026 -2015-10-25,214301 -2015-10-26,214467 -2015-10-27,214324 -2015-10-28,214821 -2015-10-29,214746 -2015-10-30,214977 -2015-10-31,215351 -2015-11-01,215529 -2015-11-02,215511 -2015-11-03,215312 -2015-11-04,215372 -2015-11-05,215259 -2015-11-06,215504 -2015-11-07,215788 -2015-11-08,216261 -2015-11-09,216495 -2015-11-10,216730 -2015-11-11,216993 -2015-11-12,216811 -2015-11-13,217199 -2015-11-14,217233 -2015-11-15,217105 -2015-11-16,217446 -2015-11-17,217763 -2015-11-18,217900 -2015-11-19,218058 -2015-11-20,218420 -2015-11-21,218588 -2015-11-22,218643 -2015-11-23,218553 -2015-11-24,218384 -2015-11-25,218254 -2015-11-26,218119 -2015-11-27,218418 -2015-11-28,218421 -2015-11-29,218319 -2015-11-30,218228 -2015-12-01,218152 -2015-12-02,218001 -2015-12-03,217981 -2015-12-04,218364 -2015-12-05,218198 -2015-12-06,218009 -2015-12-07,218234 -2015-12-08,218126 diff --git a/docs6/src/data/multicountdown.dat b/docs6/src/data/multicountdown.dat deleted file mode 100644 index a26ac76c5..000000000 --- a/docs6/src/data/multicountdown.dat +++ /dev/null @@ -1,100 +0,0 @@ -upsec=0.002,color=green,count=1203 -upsec=0.083,color=red,count=3817 -upsec=0.188,color=red,count=3801 -upsec=0.395,color=blue,count=2697 -upsec=0.526,color=purple,count=953 -upsec=0.671,color=blue,count=2684 -upsec=0.899,color=purple,count=926 -upsec=0.912,color=red,count=3798 -upsec=1.093,color=blue,count=2662 -upsec=1.327,color=purple,count=917 -upsec=1.407,color=green,count=1187 -upsec=1.416,color=red,count=3788 -upsec=1.448,color=green,count=1177 -upsec=1.587,color=red,count=3782 -upsec=1.601,color=red,count=3755 -upsec=1.703,color=purple,count=908 -upsec=1.832,color=red,count=3717 -upsec=2.064,color=blue,count=2659 -upsec=2.2880000000000003,color=blue,count=2647 -upsec=2.313,color=green,count=1161 -upsec=2.346,color=green,count=1129 -upsec=2.5580000000000003,color=red,count=3694 -upsec=2.716,color=purple,count=883 -upsec=2.834,color=blue,count=2646 -upsec=2.967,color=green,count=1100 -upsec=3.0740000000000003,color=purple,count=850 -upsec=3.2820000000000005,color=blue,count=2607 -upsec=3.2990000000000004,color=blue,count=2573 -upsec=3.4510000000000005,color=blue,count=2563 -upsec=3.4870000000000005,color=green,count=1089 -upsec=3.7220000000000004,color=red,count=3672 -upsec=3.7580000000000005,color=red,count=3648 -upsec=3.9670000000000005,color=blue,count=2550 -upsec=4.021000000000001,color=green,count=1054 -upsec=4.211000000000001,color=red,count=3640 -upsec=4.455000000000001,color=purple,count=836 -upsec=4.515000000000001,color=red,count=3639 -upsec=4.636000000000001,color=purple,count=801 -upsec=4.818000000000001,color=red,count=3601 -upsec=5.0390000000000015,color=purple,count=770 -upsec=5.268000000000002,color=blue,count=2543 -upsec=5.310000000000001,color=green,count=1039 -upsec=5.319000000000002,color=blue,count=2537 -upsec=5.413000000000002,color=red,count=3568 -upsec=5.517000000000002,color=purple,count=755 -upsec=5.750000000000002,color=green,count=1030 -upsec=5.778000000000001,color=blue,count=2535 -upsec=5.9380000000000015,color=green,count=1008 -upsec=6.101000000000002,color=blue,count=2520 -upsec=6.250000000000002,color=blue,count=2520 -upsec=6.314000000000002,color=green,count=1005 -upsec=6.383000000000002,color=red,count=3551 -upsec=6.546000000000002,color=blue,count=2511 -upsec=6.703000000000002,color=green,count=984 -upsec=6.842000000000002,color=purple,count=721 -upsec=6.986000000000002,color=green,count=976 -upsec=7.229000000000003,color=blue,count=2488 -upsec=7.376000000000003,color=red,count=3547 -upsec=7.567000000000003,color=red,count=3522 -upsec=7.693000000000003,color=blue,count=2454 -upsec=7.869000000000003,color=green,count=937 -upsec=8.051000000000004,color=purple,count=697 -upsec=8.213000000000005,color=purple,count=694 -upsec=8.356000000000005,color=purple,count=658 -upsec=8.379000000000005,color=red,count=3516 -upsec=8.619000000000005,color=red,count=3505 -upsec=8.708000000000006,color=red,count=3479 -upsec=8.773000000000005,color=green,count=929 -upsec=8.809000000000005,color=red,count=3464 -upsec=9.021000000000004,color=purple,count=634 -upsec=9.268000000000004,color=blue,count=2428 -upsec=9.333000000000004,color=purple,count=621 -upsec=9.497000000000003,color=purple,count=606 -upsec=9.539000000000003,color=purple,count=572 -upsec=9.650000000000004,color=green,count=903 -upsec=9.854000000000005,color=blue,count=2400 -upsec=9.963000000000005,color=blue,count=2397 -upsec=10.088000000000005,color=blue,count=2379 -upsec=10.308000000000005,color=red,count=3431 -upsec=10.321000000000005,color=red,count=3398 -upsec=10.542000000000005,color=green,count=894 -upsec=10.752000000000006,color=red,count=3396 -upsec=10.868000000000006,color=purple,count=550 -upsec=10.942000000000005,color=green,count=887 -upsec=11.137000000000006,color=blue,count=2369 -upsec=11.384000000000006,color=red,count=3389 -upsec=11.517000000000007,color=green,count=859 -upsec=11.657000000000007,color=purple,count=516 -upsec=11.707000000000008,color=green,count=853 -upsec=11.809000000000008,color=green,count=828 -upsec=11.904000000000009,color=purple,count=514 -upsec=12.09200000000001,color=red,count=3385 -upsec=12.317000000000009,color=red,count=3359 -upsec=12.37100000000001,color=green,count=789 -upsec=12.58800000000001,color=red,count=3355 -upsec=12.77200000000001,color=red,count=3348 -upsec=12.856000000000009,color=red,count=3346 -upsec=13.103000000000009,color=blue,count=2355 -upsec=13.346000000000009,color=green,count=752 -upsec=13.594000000000008,color=blue,count=2349 diff --git a/docs6/src/data/multicountdown.rb b/docs6/src/data/multicountdown.rb deleted file mode 100644 index 735057627..000000000 --- a/docs6/src/data/multicountdown.rb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/ruby -$stdout.sync = true - -# Simulates some multi-threaded program making progress over time on some set of tasks -counts = {'red' => 3842, 'green' => 1224, 'blue' => 2697, 'purple' => 979} -colors = counts.keys -n = colors.length - -start_time = Time::now.to_f - -upsec = 0.0 -while counts.any?{|color,count| count > 0} - upsec += 0.001 * rand(250) - color = colors[rand(n)] - count = counts[color] - delta = rand(40) - count -= delta - count = [0, count].max - counts[color] = count - puts "upsec=#{upsec},color=#{color},count=#{counts[color]}" -end diff --git a/docs6/src/data/mydata.txt b/docs6/src/data/mydata.txt deleted file mode 100644 index db020a5a5..000000000 --- a/docs6/src/data/mydata.txt +++ /dev/null @@ -1,3 +0,0 @@ -oh say can you see -by the dawn's -early light diff --git a/docs6/src/data/nested.tsv b/docs6/src/data/nested.tsv deleted file mode 100644 index 6130a5b8e..000000000 --- a/docs6/src/data/nested.tsv +++ /dev/null @@ -1,3 +0,0 @@ -a b -x z -s u:v:w diff --git a/docs6/src/data/newline-example.txt b/docs6/src/data/newline-example.txt deleted file mode 100644 index f885684d7..000000000 --- a/docs6/src/data/newline-example.txt +++ /dev/null @@ -1,9 +0,0 @@ -mlr put ' - $x = 1 - $y = 2 # Syntax error -' - -mlr put ' - $x = 1; - $y = 2 # This is OK -' diff --git a/docs6/src/data/ping-delta-example.txt b/docs6/src/data/ping-delta-example.txt deleted file mode 100644 index 8e1c7814b..000000000 --- a/docs6/src/data/ping-delta-example.txt +++ /dev/null @@ -1,11 +0,0 @@ -$ each 10 uptime | mlr -p step -a delta -f 11 -... -20:08 up 36 days, 10:38, 5 users, load averages: 1.42 1.62 1.73 0.000000 -20:08 up 36 days, 10:38, 5 users, load averages: 1.55 1.64 1.74 0.020000 -20:08 up 36 days, 10:38, 7 users, load averages: 1.58 1.65 1.74 0.010000 -20:08 up 36 days, 10:38, 9 users, load averages: 1.78 1.69 1.76 0.040000 -20:08 up 36 days, 10:39, 9 users, load averages: 2.12 1.76 1.78 0.070000 -20:08 up 36 days, 10:39, 9 users, load averages: 2.51 1.85 1.81 0.090000 -20:08 up 36 days, 10:39, 8 users, load averages: 2.79 1.92 1.83 0.070000 -20:08 up 36 days, 10:39, 4 users, load averages: 2.64 1.90 1.83 -0.020000 - diff --git a/docs6/src/data/previous_counters.csv b/docs6/src/data/previous_counters.csv deleted file mode 100644 index 93cff85af..000000000 --- a/docs6/src/data/previous_counters.csv +++ /dev/null @@ -1,5 +0,0 @@ -color,count -red,3472 -blue,6838 -orange,694 -purple,12 diff --git a/docs6/src/data/prevtemp.csv b/docs6/src/data/prevtemp.csv deleted file mode 100644 index 861dbcdf7..000000000 --- a/docs6/src/data/prevtemp.csv +++ /dev/null @@ -1,5 +0,0 @@ -color,previous_count -red,3472 -blue,6838 -orange,694 -purple,12 diff --git a/docs6/src/data/put-gating-example-1.dkvp b/docs6/src/data/put-gating-example-1.dkvp deleted file mode 100644 index 0227870b8..000000000 --- a/docs6/src/data/put-gating-example-1.dkvp +++ /dev/null @@ -1,5 +0,0 @@ -x=-1 -x=0 -x=1 -x=2 -x=3 diff --git a/docs6/src/data/put-gating-example-2.dkvp b/docs6/src/data/put-gating-example-2.dkvp deleted file mode 100644 index a5795757b..000000000 --- a/docs6/src/data/put-gating-example-2.dkvp +++ /dev/null @@ -1,3 +0,0 @@ -a=abc_123 -a=some other name -a=xyz_789 diff --git a/docs6/src/data/question.dat b/docs6/src/data/question.dat deleted file mode 100644 index d40b0adfd..000000000 --- a/docs6/src/data/question.dat +++ /dev/null @@ -1 +0,0 @@ -a=is it?,b=it is! diff --git a/docs6/src/data/ragged.csv b/docs6/src/data/ragged.csv deleted file mode 100644 index ae7f0ec57..000000000 --- a/docs6/src/data/ragged.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c -1,2,3 -4,5 -6,7,8,9 diff --git a/docs6/src/data/rect-inner.txt b/docs6/src/data/rect-inner.txt deleted file mode 100644 index 022682344..000000000 --- a/docs6/src/data/rect-inner.txt +++ /dev/null @@ -1,7 +0,0 @@ -inner1=100,inner2=101 -inner1=120,inner2=121 -inner1=200,inner2=201 -inner1=210,inner2=211 -inner1=300,inner2=301 -inner1=312 -inner1=313,inner2=314 diff --git a/docs6/src/data/rect-middle.txt b/docs6/src/data/rect-middle.txt deleted file mode 100644 index fae49ea83..000000000 --- a/docs6/src/data/rect-middle.txt +++ /dev/null @@ -1,7 +0,0 @@ -middle=10 -middle=11 -middle=12 -middle=20 -middle=21 -middle=30 -middle=31 diff --git a/docs6/src/data/rect-outer.txt b/docs6/src/data/rect-outer.txt deleted file mode 100644 index d62ea9965..000000000 --- a/docs6/src/data/rect-outer.txt +++ /dev/null @@ -1,3 +0,0 @@ -outer=1 -outer=2 -outer=3 diff --git a/docs6/src/data/rect.txt b/docs6/src/data/rect.txt deleted file mode 100644 index 2bcaec2cb..000000000 --- a/docs6/src/data/rect.txt +++ /dev/null @@ -1,17 +0,0 @@ -outer=1 -middle=10 -inner1=100,inner2=101 -middle=11 -middle=12 -inner1=120,inner2=121 -outer=2 -middle=20 -inner1=200,inner2=201 -middle=21 -inner1=210,inner2=211 -outer=3 -middle=30 -inner1=300,inner2=301 -middle=31 -inner1=312 -inner1=313,inner2=314 diff --git a/docs6/src/data/regex-in-data.dat b/docs6/src/data/regex-in-data.dat deleted file mode 100644 index a1b9ee14d..000000000 --- a/docs6/src/data/regex-in-data.dat +++ /dev/null @@ -1,3 +0,0 @@ -name=jane,regex=^j.*e$ -name=bill,regex=^b[ou]ll$ -name=bull,regex=^b[ou]ll$ diff --git a/docs6/src/data/remove-empty-columns.csv b/docs6/src/data/remove-empty-columns.csv deleted file mode 100644 index 9c485d345..000000000 --- a/docs6/src/data/remove-empty-columns.csv +++ /dev/null @@ -1,4 +0,0 @@ -a,b,c,d,e -1,,3,,5 -2,,4,,5 -3,,5,,7 diff --git a/docs6/src/data/repeat-example.dat b/docs6/src/data/repeat-example.dat deleted file mode 100644 index 75b4b4099..000000000 --- a/docs6/src/data/repeat-example.dat +++ /dev/null @@ -1,3 +0,0 @@ -color=blue,count=5 -color=red,count=4 -color=green,count=3 diff --git a/docs6/src/data/repeats.dkvp b/docs6/src/data/repeats.dkvp deleted file mode 100644 index c19438e51..000000000 --- a/docs6/src/data/repeats.dkvp +++ /dev/null @@ -1,57 +0,0 @@ -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=yellow,shape=circle,flag=1 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=1 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=0 -color=red,shape=square,flag=0 -color=purple,shape=triangle,flag=0 -color=yellow,shape=triangle,flag=1 -color=purple,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=red,shape=circle,flag=1 -color=purple,shape=triangle,flag=0 -color=purple,shape=triangle,flag=0 -color=red,shape=square,flag=0 -color=red,shape=circle,flag=1 -color=red,shape=square,flag=1 -color=red,shape=square,flag=0 -color=red,shape=circle,flag=1 -color=purple,shape=square,flag=0 -color=purple,shape=square,flag=0 -color=red,shape=square,flag=1 -color=purple,shape=triangle,flag=0 -color=purple,shape=triangle,flag=0 -color=purple,shape=square,flag=0 -color=yellow,shape=circle,flag=1 -color=red,shape=square,flag=0 -color=yellow,shape=triangle,flag=1 -color=yellow,shape=circle,flag=1 -color=purple,shape=square,flag=0 diff --git a/docs6/src/data/sample-example.txt b/docs6/src/data/sample-example.txt deleted file mode 100644 index a2be4d659..000000000 --- a/docs6/src/data/sample-example.txt +++ /dev/null @@ -1,44 +0,0 @@ -$ mlr --opprint sample -k 4 data/colored-shapes.dkvp -color shape flag i u v w x -purple triangle 0 90122 0.9986871176198068 0.3037738877233719 0.5154934457238382 5.365962021016529 -red circle 0 3139 0.04835898233323954 -0.03964684310055758 0.5263660881848111 5.3758779366493625 -orange triangle 0 67847 0.36746306902109926 0.5161574810505635 0.5176199566173642 3.1748088656576567 -yellow square 1 33576 0.3098376725521097 0.8525628505287842 0.49774122460981685 4.494754378604669 - -$ mlr --opprint sample -k 4 data/colored-shapes.dkvp -color shape flag i u v w x -blue square 1 16783 0.09974385090654347 0.7243899920872646 0.5353718443278438 4.431057737383438 -orange square 1 93291 0.5944176543007182 0.17744449786454086 0.49262281749172077 3.1548117990710653 -yellow square 1 54436 0.5268161165014636 0.8785588662666121 0.5058773791931063 7.019185838783636 -yellow square 1 55491 0.0025440267883102274 0.05474106287787284 0.5102729153751984 3.526301273728043 - -$ mlr --opprint sample -k 2 -g color data/colored-shapes.dkvp -color shape flag i u v w x -yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 -yellow square 1 917 0.8547010348386344 0.7356782810796262 0.4531511689924275 5.774541777078352 -red circle 1 4000 0.05490416175132373 0.07392337815122155 0.49416101516594396 5.355725080701707 -red square 0 87506 0.6357719216821314 0.6970867759393995 0.4940826462055272 6.351579417310387 -purple triangle 0 14898 0.7800986870203719 0.23998073813992293 0.5014775988383656 3.141006771777843 -purple triangle 0 151 0.032614487569017414 0.7346633365041219 0.7812143304483805 2.6831992610568047 -green triangle 1 126 0.1513010528347546 0.40346767294704544 0.051213231883952326 5.955109300797182 -green circle 0 17635 0.029856606049114442 0.4724542934246524 0.49529606749929744 5.239153910272168 -blue circle 1 1020 0.414263129226617 0.8304946402876182 0.13151094520189244 4.397873687920433 -blue triangle 0 220 0.441773289968473 0.44597731903759075 0.6329360666849821 4.3064608776550894 -orange square 0 1885 0.8079311983747106 0.8685956833908394 0.3116410800256374 4.390864584500387 -orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 - -$ mlr --opprint sample -k 2 -g color then sort -f color data/colored-shapes.dkvp -color shape flag i u v w x -blue circle 0 215 0.7803586969333292 0.33146680638888126 0.04289047852629113 5.725365736377487 -blue circle 1 3616 0.8548431579124808 0.4989623130006362 0.3339426415875795 3.696785877560498 -green square 0 356 0.7674272008085286 0.341578843118008 0.4570224877870851 4.830320062215299 -green square 0 152 0.6684429446914862 0.016056003736548696 0.4656148241291592 5.434588759225423 -orange triangle 0 587 0.5175826237797857 0.08989091493635304 0.9011709461770973 4.265854207755811 -orange triangle 0 1533 0.32904497195507487 0.23168161807490417 0.8722623057355134 5.164071635714438 -purple triangle 0 14192 0.5196327866973567 0.7860928603468063 0.4964368415453642 4.899167143824484 -purple triangle 0 65 0.6842806710360729 0.5823723856331258 0.8014053396013747 5.805148213865135 -red square 1 2431 0.38378504852300466 0.11445015005595527 0.49355539228753786 5.146756570128739 -red triangle 0 57097 0.43763430414406546 0.3355450325004481 0.5322349637512487 4.144267240289442 -yellow triangle 1 11 0.6321695890307647 0.9887207810889004 0.4364983936735774 5.7981881667050565 -yellow square 1 158 0.41527900739142165 0.7118027080775757 0.4200799665161291 5.33279067554884 - diff --git a/docs6/src/data/sar.csv b/docs6/src/data/sar.csv deleted file mode 100644 index 98568aa8c..000000000 --- a/docs6/src/data/sar.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -the quick,brown fox,jumped -over,the,lazy dogs diff --git a/docs6/src/data/scan-example-1.tbl b/docs6/src/data/scan-example-1.tbl deleted file mode 100644 index 2e63c642f..000000000 --- a/docs6/src/data/scan-example-1.tbl +++ /dev/null @@ -1,5 +0,0 @@ -value -1 -2.0 -3x -hello diff --git a/docs6/src/data/scan-example-2.tbl b/docs6/src/data/scan-example-2.tbl deleted file mode 100644 index 19bff87ca..000000000 --- a/docs6/src/data/scan-example-2.tbl +++ /dev/null @@ -1,11 +0,0 @@ -value -0001 -0002 -0005 -0005WA -0006 -0007 -0007WA -0008 -0009 -0010 diff --git a/docs6/src/data/scope-example.dat b/docs6/src/data/scope-example.dat deleted file mode 100644 index cda549e60..000000000 --- a/docs6/src/data/scope-example.dat +++ /dev/null @@ -1,3 +0,0 @@ -n=1,x=123 -n=2,x=456 -n=3,x=789 diff --git a/docs6/src/data/scope-example.mlr b/docs6/src/data/scope-example.mlr deleted file mode 100644 index 5a880bbb5..000000000 --- a/docs6/src/data/scope-example.mlr +++ /dev/null @@ -1,23 +0,0 @@ -func f(a) { # argument is local to the function - var b = 100; # local to the function - c = 100; # local to the function; does not overwrite outer c - return a + 1; -} -var a = 10; # local at top level -var b = 20; # local at top level -c = 30; # local at top level; there is no more-outer-scope c -if (NR == 3) { - var a = 40; # scoped to the if-statement; doesn't overwrite outer a - b = 50; # not scoped to the if-statement; overwrites outer b - c = 60; # not scoped to the if-statement; overwrites outer c - d = 70; # there is no outer d so a local d is created here - - $inner_a = a; - $inner_b = b; - $inner_c = c; - $inner_d = d; -} -$outer_a = a; -$outer_b = b; -$outer_c = c; -$outer_d = d; # there is no outer d defined so no assignment happens diff --git a/docs6/src/data/self-join.csv b/docs6/src/data/self-join.csv deleted file mode 100644 index 9604a5b61..000000000 --- a/docs6/src/data/self-join.csv +++ /dev/null @@ -1,3 +0,0 @@ -a,b,c -1,2,3 -1,4,5 diff --git a/docs6/src/data/semicolon-example.txt b/docs6/src/data/semicolon-example.txt deleted file mode 100644 index 6ae885601..000000000 --- a/docs6/src/data/semicolon-example.txt +++ /dev/null @@ -1,4 +0,0 @@ -mlr put 'x=1' -mlr put 'x=1;$y=2' -mlr put 'x=1;$y=2;' -mlr put 'x=1;;;;$y=2;' diff --git a/docs6/src/data/single-quote-example.mlr b/docs6/src/data/single-quote-example.mlr deleted file mode 100644 index 96b3ac00c..000000000 --- a/docs6/src/data/single-quote-example.mlr +++ /dev/null @@ -1 +0,0 @@ -$a = "It's OK, I said, then 'for now'." diff --git a/docs6/src/data/small.csv b/docs6/src/data/small.csv deleted file mode 100644 index e60e6c64d..000000000 --- a/docs6/src/data/small.csv +++ /dev/null @@ -1,6 +0,0 @@ -a,b,i,x,y -pan,pan,1,0.3467901443380824,0.7268028627434533 -eks,pan,2,0.7586799647899636,0.5221511083334797 -wye,wye,3,0.20460330576630303,0.33831852551664776 -eks,wye,4,0.38139939387114097,0.13418874328430463 -wye,pan,5,0.5732889198020006,0.8636244699032729 diff --git a/docs6/src/data/small2 b/docs6/src/data/small2 deleted file mode 100644 index fb98ae66d..000000000 --- a/docs6/src/data/small2 +++ /dev/null @@ -1,5 +0,0 @@ -a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001 -a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134 -a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930 -a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758 -a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627 diff --git a/docs6/src/data/sort-het.dkvp b/docs6/src/data/sort-het.dkvp deleted file mode 100644 index e4bc52e47..000000000 --- a/docs6/src/data/sort-het.dkvp +++ /dev/null @@ -1,7 +0,0 @@ -count=500,color=green -count=600 -status=ok,count=250,hours=0.22 -status=ok,count=200,hours=3.4 -count=300,color=blue -count=100,color=green -count=450 diff --git a/docs6/src/data/sort-missing.dkvp b/docs6/src/data/sort-missing.dkvp deleted file mode 100644 index 0896145f4..000000000 --- a/docs6/src/data/sort-missing.dkvp +++ /dev/null @@ -1,4 +0,0 @@ -x=2 -a=3 -x=4 -x=1 diff --git a/docs6/src/data/sort-null.dat b/docs6/src/data/sort-null.dat deleted file mode 100644 index e5072761b..000000000 --- a/docs6/src/data/sort-null.dat +++ /dev/null @@ -1,5 +0,0 @@ -a=3,b=2 -a=1,b=8 -a=,b=4 -x=9,b=10 -a=5,b=7 diff --git a/docs6/src/data/sort-within-records.json b/docs6/src/data/sort-within-records.json deleted file mode 100644 index 8171e34fc..000000000 --- a/docs6/src/data/sort-within-records.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "a": 1, - "b": 2, - "c": 3 -} -{ - "b": 4, - "a": 5, - "c": 6 -} -{ - "c": 7, - "b": 8, - "a": 9 -} diff --git a/docs6/src/data/spaces.csv b/docs6/src/data/spaces.csv deleted file mode 100644 index b2838bcf1..000000000 --- a/docs6/src/data/spaces.csv +++ /dev/null @@ -1,4 +0,0 @@ -a b c,def,g h i -123,4567,890 -2468,1357,3579 -9987,3312,4543 diff --git a/docs6/src/data/sparse.json b/docs6/src/data/sparse.json deleted file mode 100644 index 47d21e719..000000000 --- a/docs6/src/data/sparse.json +++ /dev/null @@ -1,4 +0,0 @@ -{"a":1,"b":2,"v":3} -{"u":1,"b":2} -{"a":1,"v":2,"x":3} -{"v":1,"w":2} diff --git a/docs6/src/data/subcommand-example.txt b/docs6/src/data/subcommand-example.txt deleted file mode 100644 index ace8950d8..000000000 --- a/docs6/src/data/subcommand-example.txt +++ /dev/null @@ -1,3 +0,0 @@ -mlr tac *.dat -mlr cut --complement -f os_version *.dat -mlr sort -f hostname,uptime *.dat diff --git a/docs6/src/data/then-example.csv b/docs6/src/data/then-example.csv deleted file mode 100644 index c77b32024..000000000 --- a/docs6/src/data/then-example.csv +++ /dev/null @@ -1,6 +0,0 @@ -Status,Payment_Type,Amount -paid,cash,10.00 -pending,debit,20.00 -paid,cash,50.00 -pending,credit,40.00 -paid,debit,30.00 diff --git a/docs6/src/data/timing-example.txt b/docs6/src/data/timing-example.txt deleted file mode 100644 index 9f6d24727..000000000 --- a/docs6/src/data/timing-example.txt +++ /dev/null @@ -1,27 +0,0 @@ -$ ruby -e '10000.times{|i|puts "i=#{i+1}"}' > lines.txt - -$ head -n 5 lines.txt -i=1 -i=2 -i=3 -i=4 -i=5 - -mlr --ofmt '%.9le' --opprint put '$t=systime()' then step -a delta -f t lines.txt | head -n 7 -i t t_delta -1 1430603027.018016 1.430603027e+09 -2 1430603027.018043 2.694129944e-05 -3 1430603027.018048 5.006790161e-06 -4 1430603027.018052 4.053115845e-06 -5 1430603027.018055 2.861022949e-06 -6 1430603027.018058 3.099441528e-06 - -mlr --ofmt '%.9le' --oxtab \ - put '$t=systime()' then \ - step -a delta -f t then \ - filter '$i>1' then \ - stats1 -a min,mean,max -f t_delta \ - lines.txt -t_delta_min 2.861022949e-06 -t_delta_mean 4.077508505e-06 -t_delta_max 5.388259888e-05 diff --git a/docs6/src/data/trivial-records.csv b/docs6/src/data/trivial-records.csv deleted file mode 100644 index 42d5e9304..000000000 --- a/docs6/src/data/trivial-records.csv +++ /dev/null @@ -1,5 +0,0 @@ -a,b,c -1,2,3 -4,,6 -,, -,8,9 diff --git a/docs6/src/data/unsparsify.mlr b/docs6/src/data/unsparsify.mlr deleted file mode 100644 index 2544734b1..000000000 --- a/docs6/src/data/unsparsify.mlr +++ /dev/null @@ -1,26 +0,0 @@ -# First pass: -# Remember all unique key names: -for (k in $*) { - @all_keys[k] = 1; -} -# Remember all input records: -@records[NR] = $*; - -# Second pass: -end { - for (nr in @records) { - # Get the sparsely keyed input record: - irecord = @records[nr]; - # Fill in missing keys with empty string: - map orecord = {}; - for (k in @all_keys) { - if (haskey(irecord, k)) { - orecord[k] = irecord[k]; - } else { - orecord[k] = ""; - } - } - # Produce the output: - emit orecord; - } -} diff --git a/docs6/src/dates.csv b/docs6/src/dates.csv deleted file mode 100644 index f4d67057e..000000000 --- a/docs6/src/dates.csv +++ /dev/null @@ -1,4 +0,0 @@ -date,event -2018-02-03,initialization -2018-03-07,discovery -2018-02-03,allocation diff --git a/docs6/src/h1foo b/docs6/src/h1foo deleted file mode 100755 index d5e14acd4..000000000 --- a/docs6/src/h1foo +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -awk '{ - if ($0 ~ /.*

    .*/) { - sub(/

    /, ""); - sub(/<\/h1>/, ""); - print; - print "----------------------------------------------------------------"; - } else { - print $0 - } -}' "$@" diff --git a/docs6/src/h2foo b/docs6/src/h2foo deleted file mode 100755 index 210fd5fdb..000000000 --- a/docs6/src/h2foo +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -awk '{ - if ($0 ~ /.*

    .*/) { - sub(/

    /, ""); - sub(/<\/h2>/, ""); - print; - print "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"; - } else { - print $0 - } -}' "$@" diff --git a/docs6/src/h3foo b/docs6/src/h3foo deleted file mode 100755 index a2332cbe5..000000000 --- a/docs6/src/h3foo +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -awk '{ - if ($0 ~ /.*

    .*/) { - sub(/

    /, ""); - sub(/<\/h3>/, ""); - print; - print "................................................................"; - } else { - print $0 - } -}' "$@" diff --git a/docs6/src/log.txt b/docs6/src/log.txt deleted file mode 100644 index 114cdab4b..000000000 --- a/docs6/src/log.txt +++ /dev/null @@ -1,43 +0,0 @@ -op=enter,time=1472819681 -op=cache,type=A9,hit=0 -op=cache,type=A4,hit=1 -time=1472819690,batch_size=100,num_filtered=237 -op=cache,type=A1,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A1,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A1,hit=1 -time=1472819705,batch_size=100,num_filtered=348 -op=cache,type=A4,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A4,hit=1 -time=1472819713,batch_size=100,num_filtered=493 -op=cache,type=A9,hit=1 -op=cache,type=A1,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=1 -time=1472819720,batch_size=100,num_filtered=554 -op=cache,type=A1,hit=0 -op=cache,type=A4,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A4,hit=0 -op=cache,type=A4,hit=0 -op=cache,type=A9,hit=0 -time=1472819736,batch_size=100,num_filtered=612 -op=cache,type=A1,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -op=cache,type=A4,hit=1 -op=cache,type=A1,hit=1 -op=cache,type=A9,hit=0 -op=cache,type=A9,hit=0 -time=1472819742,batch_size=100,num_filtered=728 diff --git a/docs6/src/make.bat b/docs6/src/make.bat deleted file mode 100644 index 2119f5109..000000000 --- a/docs6/src/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs6/src/multi-join/input.csv b/docs6/src/multi-join/input.csv deleted file mode 100644 index 0c813110d..000000000 --- a/docs6/src/multi-join/input.csv +++ /dev/null @@ -1,9 +0,0 @@ -id,task -10,chop -20,puree -20,wash -30,fold -10,bake -20,mix -10,knead -30,clean diff --git a/docs6/src/multi-join/name-lookup.csv b/docs6/src/multi-join/name-lookup.csv deleted file mode 100644 index 121f6ef6c..000000000 --- a/docs6/src/multi-join/name-lookup.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,name -30,Alice -10,Bob -20,Carol diff --git a/docs6/src/multi-join/status-lookup.csv b/docs6/src/multi-join/status-lookup.csv deleted file mode 100644 index 40f7735be..000000000 --- a/docs6/src/multi-join/status-lookup.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,status -30,occupied -10,idle -20,idle diff --git a/docs6/src/ngrams/gsl-2000.txt b/docs6/src/ngrams/gsl-2000.txt deleted file mode 100644 index 1c173107e..000000000 --- a/docs6/src/ngrams/gsl-2000.txt +++ /dev/null @@ -1,2283 +0,0 @@ -the -be -of -and -a -to -in -he -have -it -that -for -they -I -with -as -not -on -she -at -by -this -we -you -do -but -from -or -which -one -would -all -will -there -say -who -make -when -can -more -if -no -man -out -other -so -what -time -up -go -about -than -into -could -state -only -new -year -some -take -come -these -know -see -use -get -like -then -first -any -work -now -may -such -give -over -think -most -even -find -day -also -after -way -many -must -look -before -great -back -through -long -where -much -should -well -people -down -own -just -because -good -each -those -feel -seem -how -high -too -place -little -world -very -still -nation -hand -old -life -tell -write -become -here -show -house -both -between -need -mean -call -develop -under -last -right -move -thing -general -school -never -same -another -begin -while -number -part -turn -real -leave -might -want -point -form -off -child -few -small -since -against -ask -late -home -interest -large -person -end -open -public -follow -during -present -without -again -hold -govern -around -possible -head -consider -word -program -problem -however -lead -system -set -order -eye -plan -run -keep -face -fact -group -play -stand -increase -early -course -change -help -line -city -put -close -case -force -meet -once -water -upon -war -build -hear -light -unite -live -every -country -bring -center -let -side -try -provide -continue -name -certain -power -pay -result -question -study -woman -member -until -far -night -always -service -away -report -something -company -week -church -toward -start -social -room -figure -nature -though -young -less -enough -almost -read -include -president -nothing -yet -better -big -boy -cost -business -value -second -why -clear -expect -family -complete -act -sense -mind -experience -art -next -near -direct -car -law -industry -important -girl -god -several -matter -usual -rather -per -often -kind -among -white -reason -action -return -foot -care -simple -within -love -human -along -appear -doctor -believe -speak -active -student -month -drive -concern -best -door -hope -example -inform -body -ever -least -probable -understand -reach -effect -different -idea -whole -control -condition -field -pass -fall -note -special -talk -particular -today -measure -walk -teach -low -hour -type -carry -rate -remain -full -street -easy -although -record -sit -determine -level -local -sure -receive -thus -moment -spirit -train -college -religion -perhaps -music -grow -free -cause -serve -age -book -board -recent -sound -office -cut -step -class -true -history -position -above -strong -friend -necessary -add -court -deal -tax -support -party -whether -either -land -material -happen -education -death -agree -arm -mother -across -quite -anything -town -past -view -society -manage -answer -break -organize -half -fire -lose -money -stop -actual -already -effort -wait -department -able -political -learn -voice -air -together -shall -cover -common -subject -draw -short -wife -treat -limit -road -letter -color -behind -produce -send -term -total -university -rise -century -success -minute -remember -purpose -test -fight -watch -situation -south -ago -difference -stage -father -table -rest -bear -entire -market -prepare -explain -offer -plant -charge -ground -west -picture -hard -front -lie -modern -dark -surface -rule -regard -dance -peace -observe -future -wall -farm -claim -firm -operation -further -pressure -property -morning -amount -top -outside -piece -sometimes -beauty -trade -fear -demand -wonder -list -accept -judge -paint -mile -soon -responsible -allow -secretary -heart -union -slow -island -enter -drink -story -experiment -stay -paper -space -apply -decide -share -desire -spend -sign -therefore -various -visit -supply -officer -doubt -private -immediate -wish -contain -feed -raise -describe -ready -horse -son -exist -north -suggest -station -effective -food -deep -wide -alone -character -english -happy -critic -unit -product -respect -drop -nor -fill -cold -represent -sudden -basic -kill -fine -trouble -mark -single -press -heavy -attempt -origin -standard -everything -committee -moral -black -red -bad -earth -accord -else -mere -die -remark -basis -except -equal -east -event -employ -defense -smile -river -improve -game -detail -account -cent -sort -reduce -club -buy -attention -ship -decision -wear -inside -win -suppose -ride -operate -realize -sale -choose -park -square -vote -price -district -dead -foreign -window -beyond -direction -strike -instead -trial -practice -catch -opportunity -likely -recognize -permit -serious -attack -floor -association -spring -lot -stock -lack -hair -science -relation -profession -pattern -quick -medical -influence -occasion -machine -compare -husband -blue -international -fair -especially -indeed -imagine -surprise -average -official -temperature -difficult -sing -hit -tree -race -police -touch -relative -throw -quality -former -pull -chance -prove -argue -settle -growth -date -heat -save -performance -count -production -listen -main -pick -size -cool -army -patient -combine -summer -hall -slight -command -enjoy -length -proper -express -health -chief -evening -store -language -degree -lay -current -gun -dog -hotel -strange -separate -boat -fail -clean -dress -anyone -gain -pain -object -knowledge -depend -relate -below -dollar -advance -shape -arrange -population -yes -sell -mention -dry -check -poet -sleep -join -hot -bed -electric -dream -due -season -manner -fit -left -progress -neither -strength -notice -finish -opinion -bill -western -truth -wrong -travel -suit -bank -exact -honor -brother -quiet -marry -corner -handle -danger -hospital -pool -promise -blood -shoot -scene -literature -arrive -film -base -freedom -bar -maybe -hang -suffer -manufacture -frequent -rock -loss -burn -sun -audience -essential -glass -prevent -poem -poor -inch -song -skill -post -popular -radio -animal -conscious -worth -eat -election -faith -wave -murder -model -forget -extend -edge -distance -memory -recommend -division -staff -leg -discussion -address -fly -dependent -ball -shake -frame -extreme -engineer -thick -comfort -latter -camp -oil -discover -examine -difficulty -tooth -middle -choice -refer -enemy -practical -marriage -bridge -declare -lady -cross -daily -afternoon -attend -director -balance -wash -capital -speed -block -citizen -mouth -hill -green -please -motor -agency -encourage -governor -worry -affair -shoulder -bright -mass -sample -pretty -repeat -roll -push -trip -council -clothe -parent -forward -sharp -straight -gas -weight -discuss -fix -load -master -whatever -round -rapid -laugh -finger -spot -propose -shop -broad -replace -reply -extent -lock -employee -ahead -sight -spread -wind -approve -destroy -none -pound -fame -importance -reflect -advantage -match -regular -wage -refuse -existence -hardly -perform -title -tend -exercise -thin -coat -bit -mountain -youth -behavior -newspaper -secret -ability -sea -soft -justice -reasonable -circle -solid -page -weapon -fast -representative -search -pure -escape -crowd -stick -telephone -avoid -garden -favor -news -unless -dinner -someone -signal -yard -ideal -warm -miss -shelter -soldier -article -cry -captain -familiar -seat -guest -weak -excite -king -everyone -wine -hole -duty -beat -perfect -bottom -compose -battle -expense -cattle -flow -kitchen -dust -bottle -admit -tear -tire -expression -exception -application -belong -rich -failure -struggle -instrument -variety -narrow -theater -collection -rain -review -preserve -leadership -clay -daughter -fellow -swing -thank -library -fat -reserve -tour -nice -warn -ring -bitter -chair -yesterday -scientific -flower -wheel -solution -aim -gather -invite -moreover -fresh -forest -winter -box -belief -ordinary -impossible -print -gray -taste -lip -speech -reference -stain -connection -otherwise -stretch -knife -village -blow -mistake -sweet -shout -divide -guard -worse -exchange -rare -commercial -request -appoint -agent -dependence -bird -wild -motion -guess -neighbor -seed -fashion -loan -correct -plain -mail -retire -opposite -prefer -safe -evil -double -wood -empty -baby -advise -content -sport -lift -literary -curious -tie -flat -message -neck -hate -dirt -delight -trust -nobody -valley -tool -presence -cook -railroad -minister -coffee -brush -beside -collect -guide -luck -profit -lord -everybody -prison -cloud -slave -chairman -soil -distinguish -introduce -urge -blind -arise -upper -curve -membership -key -entertain -soul -neighborhood -friendly -pair -stone -lean -protect -advertise -mystery -welcome -knee -jump -snake -stream -avenue -brown -disease -hat -excellent -formal -snow -sheet -somehow -unity -sky -rough -smooth -weather -steady -threaten -depth -oppose -deliver -ancient -pray -adopt -birth -appearance -universe -busy -hurry -coast -forth -smell -furnish -female -hide -wire -proposal -ought -victory -quarter -engine -customer -waste -fool -intend -intention -desk -politics -passage -lawyer -root -climb -metal -gradual -hunt -protection -satisfy -roof -branch -pleasure -witness -loose -nose -mine -band -aside -risk -tomorrow -remind -ear -fish -shore -operator -civilize -being -silent -screen -bind -earn -pack -colony -besides -slip -cousin -scale -relief -explore -stem -brain -musician -defend -bend -somebody -shadow -mix -smoke -description -fruit -guilt -yield -sensitive -salt -pale -sweep -completion -throat -agriculture -admire -gentle -dozen -particle -pleasant -bay -cup -competition -moon -terrible -strip -mechanic -shock -conversation -angle -tall -plenty -star -yellow -sick -thorough -absolute -succeed -surround -proud -dear -card -lake -breath -afraid -silence -onto -shoe -somewhere -chain -slide -copy -machinery -wake -severe -pocket -bone -honest -freeze -dictionary -calm -swim -ice -male -skin -crack -rush -wet -meat -commerce -joint -gift -host -suspect -path -uncle -afford -instant -satisfactory -height -track -confidence -grass -suggestion -favorite -breakfast -apart -chest -entrance -march -sink -northern -iron -alive -ill -bag -disturb -native -bedroom -violent -beneath -pause -tough -substance -threat -charm -absence -factory -spite -meal -universal -accident -highway -sentence -liberty -wise -noise -discovery -tube -flash -twist -fence -childhood -joy -sister -sad -efficiency -disappear -defeat -extensive -rent -comparison -possess -grace -flesh -liquid -scientist -ease -heaven -milk -sympathy -rank -restaurant -frequency -angry -shade -accuse -necessity -knock -loud -permanent -row -lovely -confuse -gold -frighten -solve -grave -salary -photograph -advice -abroad -wound -virtue -dare -queen -extra -attract -numerous -pink -gate -expensive -shut -chicken -forgive -holy -wooden -prompt -crime -sorry -republic -anger -visitor -pile -violence -steel -wing -stair -partner -delay -gentleman -pour -confusion -damage -kick -safety -burst -network -resistance -screw -pride -till -hire -verb -preach -clerk -everywhere -anyway -fan -connect -egg -efficient -grain -calculate -drag -opposition -worship -arrest -discipline -string -harbor -camera -mechanism -cow -grand -funny -insurance -reduction -strict -lesson -tight -sand -plate -qualify -elsewhere -mad -interference -pupil -fold -royal -valuable -whisper -anybody -hurt -excess -quantity -fun -mud -extension -recognition -kiss -crop -sail -attractive -habit -relieve -wisdom -persuade -certainty -cloth -eager -deserve -sympathetic -cure -trap -puzzle -powder -raw -mankind -glad -blame -whenever -anxiety -bus -tremble -sacred -fortunate -glory -golden -neat -weekend -treasury -overcome -cat -sacrifice -complain -elect -roar -sake -temple -self -compete -nurse -stuff -stomach -peculiar -repair -storm -ton -desert -allowance -servant -hunger -conscience -bread -crash -tip -strengthen -proof -generous -sir -tonight -whip -tongue -mill -merchant -coal -ruin -introduction -courage -actor -belt -stir -package -punish -reflection -breathe -anywhere -amuse -dull -fate -net -fellowship -fault -furniture -beam -pencil -border -disappoint -flame -joke -bless -corn -shell -tempt -supper -destruction -dive -anxious -shine -cheap -dish -distant -greet -flood -excuse -insect -ocean -ceremony -decrease -prize -harm -insure -verse -pot -sincere -cotton -leaf -rub -medicine -stroke -bite -lung -lonely -admission -stupid -scratch -composition -broadcast -drum -resist -neglect -absent -passenger -adventure -beg -pipe -beard -bold -meanwhile -devil -cheer -nut -split -melt -swear -sugar -bury -wipe -faint -creature -tail -wealth -earnest -translate -suspicion -noble -inquiry -journey -hesitate -extraordinary -borrow -owe -funeral -ambition -mixture -slope -criminal -seldom -map -spin -praise -spare -plow -telegraph -barrel -straighten -scarce -lunch -slavery -creep -sweat -gay -stiff -brave -seize -convenient -horizon -moderate -complicate -dig -curse -weigh -priest -excessive -quarrel -widow -modest -dine -politician -custom -educate -salesman -nail -tap -eastern -possession -satisfaction -behave -mercy -scatter -objection -silver -tent -saddle -wrap -nest -grind -spell -plaster -arch -swell -friendship -bath -bundle -grateful -crown -boundary -nowhere -asleep -clock -boil -altogether -lend -holiday -precious -wander -ugly -reputation -ticket -pretend -dismiss -delicate -despair -awake -tea -fortune -cap -thread -haste -bare -shirt -bargain -leather -rail -butter -dot -inquire -warmth -decisive -vessel -pity -steam -pin -bound -companion -toe -reward -forbid -wherever -tower -bathe -lodge -swallow -multiply -bow -kingdom -garage -permission -pump -prevention -urgent -aunt -zero -idle -fever -christmas -regret -jaw -soap -pronounce -empire -bowl -outline -organ -imitation -caution -mineral -disagree -blade -trick -treasure -immense -convenience -disapprove -destructive -fork -noon -ownership -tune -polish -poison -shame -loyalty -cottage -astonish -shave -feather -sauce -lid -debt -fade -confess -classification -descend -cape -mild -clever -envelope -invention -sheep -splendid -stamp -float -brick -rice -businessman -backward -qualification -artificial -attraction -lamp -curl -shower -elder -bunch -bell -steer -flavor -spit -rob -cream -interrupt -pen -weave -orange -rescue -crush -humble -fancy -decay -polite -tribe -bleed -coin -fond -autumn -classify -omit -loyal -needle -lessen -complaint -pad -steep -skirt -curtain -calculation -laughter -solemn -grease -interfere -explode -fasten -flag -resign -postpone -patience -boast -rope -envy -airplane -rid -shield -veil -kneel -tray -explosive -brass -taxi -wax -duck -button -invent -remedy -bush -thunder -weaken -poverty -scrape -arrow -tender -cruel -soften -mouse -hay -anyhow -alike -circular -juice -shelf -bake -hatred -cautious -basket -wreck -width -confident -log -heap -suck -ladder -gap -obey -hut -axe -translation -collar -delivery -reproduce -confession -pan -prejudice -voyage -tobacco -simplicity -paste -cake -elephant -ribbon -harvest -ashamed -cave -customary -thief -damp -sew -rust -separation -waiter -pet -straw -upset -towel -refresh -essence -fur -ambitious -defendant -daylight -dip -suspicious -imaginary -ash -carriage -educator -saw -stove -rubber -rug -misery -awkward -rival -roast -deed -preference -explosion -theatrical -cultivate -collector -miserable -wrist -rabbit -accustom -tide -insult -thumb -lump -annoy -toy -heal -shallow -repetition -soup -whistle -scenery -apple -offense -cork -ripe -temper -sore -pinch -diamond -razor -imaginative -hook -copper -landlord -influential -rot -hollow -enclose -harden -wicked -stiffen -silk -upright -selfish -stripe -pig -inward -excellence -rake -purple -hasten -shorten -applause -ache -apology -knot -nephew -cushion -drown -nursery -pint -fierce -imitate -aloud -gaiety -robbery -tighten -perfection -scorn -whoever -trunk -wool -sailor -competitor -moonlight -deer -bean -everyday -drawer -disregard -nowadays -patriotic -tin -penny -cage -pardon -lately -offend -coarse -spoil -horizontal -sting -ditch -librarian -meantime -cough -deaf -sword -messenger -vain -castle -elastic -comb -rod -widen -sorrow -inventor -cliff -umbrella -interruption -merry -gallon -conquest -headache -tailor -bucket -scent -signature -cart -darken -sometime -applaud -underneath -hello -pretense -descent -conquer -framework -confidential -adoption -disgust -waist -momentary -receipt -pearl -ray -lazy -limb -grammatical -beast -monkey -jewel -persuasion -obedience -sock -vowel -hammer -inn -chimney -dissatisfaction -annoyance -ornament -honesty -outward -sharpen -handkerchief -greed -heavenly -thirst -niece -spill -loaf -wheat -worm -secrecy -rude -heighten -flatten -loosen -cheese -rivalry -royalty -discontent -complication -fright -indoor -flour -actress -congratulation -ounce -fry -everlasting -goat -ink -disappearance -reproduction -thicken -avoidance -spoon -strap -deceive -lengthen -revenge -correction -descendant -hesitation -spade -basin -weed -omission -old-fashioned -bicycle -breadth -photography -coward -mat -rejoice -cheat -congratulate -discomfort -enclosure -attentive -paw -overflow -dissatisfy -multiplication -whichever -tidy -bribe -mend -stocking -feast -nuisance -thorn -tame -inclusive -homemade -handwriting -chalk -sour -slippery -procession -ripen -jealous -jealousy -liar -homecoming -barber -whiten -berry -lighten -pigeon -hinder -bravery -baggage -noun -amongst -grammar -cultivation -companionship -rubbish -modesty -woolen -deepen -pastry -cupboard -quart -canal -notebook -deceit -parcel -brighten -moderation -punctual -hurrah -lipstick -uppermost -fatten -conqueror -hindrance -cowardice -obedient -saucer -madden -scold -weekday -rotten -disrespect -widower -deafen -donkey -businesslike -motherhood -sadden -handshake -calculator -headdress -scissors -translator -possessor -shilling -redden -motherly -whose -cultivator -whom -homework -electrician -oar -bribery -sweeten -sow -pronunciation -beak -plural diff --git a/docs6/src/ngrams/mkv.mlr b/docs6/src/ngrams/mkv.mlr deleted file mode 100755 index a3c29f0cf..000000000 --- a/docs6/src/ngrams/mkv.mlr +++ /dev/null @@ -1,83 +0,0 @@ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 1) { - str a = substr(v, 0, 0); - @a_histo[a] += 1; - for (int i = 0; i < n-1; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - @ab_histo[a][b] += 1; - } - } -} - -end { - num a_sum = 0; - for (a, na in @a_histo) { - a_sum += na; - } - num a_cumu = 0.0; - for (a, na in @a_histo) { - num a_p = @a_histo[a] / a_sum; - a_cumu += a_p; - @a_pmf[a] = a_p; - @a_cmf[a] += a_cumu; - } - - for (a in @ab_histo) { - num ab_sum = 0.0; - for (b, nab in @ab_histo[a]) { - ab_sum += nab; - } - num ab_cumu = 0.0; - for (b, _ in @ab_histo[a]) { - num ab_p = @ab_histo[a][b] / ab_sum; - ab_cumu += ab_p; - @ab_pmf[a][b] = ab_p; - @ab_cmf[a][b] = ab_cumu; - } - } - - #dump; - - for (int oi = 0; oi < @ocount; oi += 1) { - oa_u = urand(); - oa = "?"; - for (a, c in @a_cmf) { - if (oa_u < c) { - oa = a; - break; - } - } - str out = oa; - for (int i = 1; i < @olen; i += 1) { - num ab_u = urand(); - ob = "???"; - for (b, c in @ab_cmf[oa]) { - #print "BC ".b.c; - if (ab_u < c) { - ob = b; - break; - } - } - if (ob == "???") { - break; - } - out .= ob; - oa = ob; - } - print out; - } -} diff --git a/docs6/src/ngrams/mkv3.mlr b/docs6/src/ngrams/mkv3.mlr deleted file mode 100755 index 7cc41ae51..000000000 --- a/docs6/src/ngrams/mkv3.mlr +++ /dev/null @@ -1,125 +0,0 @@ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 2) { - str a = substr(v, 0, 0); - @a_histo[a] += 1; - - str b = substr(v, 1, 1); - @ab_histo[a][b] += 1; - - for (int i = 0; i < n-2; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - @abc_histo[a][b][c] += 1; - } - } -} - -end { - - num a_sum = 0; - for (a, na in @a_histo) { - a_sum += na; - } - num a_cumu = 0.0; - for (a, _ in @a_histo) { - num a_p = @a_histo[a] / a_sum; - a_cumu += a_p; - @a_pmf[a] = a_p; - @a_cmf[a] += a_cumu; - } - - for (a in @ab_histo) { - - num ab_sum = 0.0; - for (b, nab in @ab_histo[a]) { - ab_sum += nab; - } - num ab_cumu = 0.0; - for (b, _ in @ab_histo[a]) { - num ab_p = @ab_histo[a][b] / ab_sum; - ab_cumu += ab_p; - @ab_pmf[a][b] = ab_p; - @ab_cmf[a][b] = ab_cumu; - } - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - - num abc_sum = 0.0; - for (c, nabc in @abc_histo[a][b]) { - abc_sum += nabc; - } - num abc_cumu = 0.0; - for (c, _ in @abc_histo[a][b]) { - num abc_p = @abc_histo[a][b][c] / abc_sum; - abc_cumu += abc_p; - @abc_pmf[a][b][c] = abc_p; - @abc_cmf[a][b][c] = abc_cumu; - } - } - } - - #dump; - - for (int oi = 0; oi < @ocount; oi += 1) { - oa_u = urand(); - oa = "?"; - for (a, c in @a_cmf) { - oa = a; - if (oa_u < c) { - break; - } - } - str out = oa; - - ob_u = urand(); - ob = "?"; - for (b, c in @ab_cmf[oa]) { - ob = b; - if (ob_u < c) { - break; - } - } - out .= ob; - - for (int i = 2; i < @olen; i += 1) { - num abc_u = urand(); - str oc = "???"; - #print; - #print "i=".i; - #print "oa = ".oa." ob = ".ob; - for (c, d in @abc_cmf[oa][ob]) { - #print "d = ".d; - oc = c; - if (abc_u < d) { - break; - } - } - if (oc == "???") { - break; - } - #print "i=".i.",oa=".oa.",ob=".ob.",oc=".oc; - #print "oc = ".oc; - out .= oc; - oa = ob; - ob = oc; - } - print out; - - } -} diff --git a/docs6/src/ngrams/mkv4.mlr b/docs6/src/ngrams/mkv4.mlr deleted file mode 100755 index 0806c454e..000000000 --- a/docs6/src/ngrams/mkv4.mlr +++ /dev/null @@ -1,155 +0,0 @@ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 3) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - - for (int i = 0; i < n-3; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - @abcd_histo[a][b][c][d] += 1; - } - } -} - -end { - - num a_sum = 0; - for (a, na in @a_histo) { - a_sum += na; - } - num a_cumu = 0.0; - for (a, _ in @a_histo) { - num a_p = @a_histo[a] / a_sum; - a_cumu += a_p; - @a_pmf[a] = a_p; - @a_cmf[a] += a_cumu; - } - - for (a in @ab_histo) { - num ab_sum = 0.0; - for (b, nab in @ab_histo[a]) { - ab_sum += nab; - } - num ab_cumu = 0.0; - for (b, _ in @ab_histo[a]) { - num ab_p = @ab_histo[a][b] / ab_sum; - ab_cumu += ab_p; - @ab_pmf[a][b] = ab_p; - @ab_cmf[a][b] = ab_cumu; - } - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - num abc_sum = 0.0; - for (c, nabc in @abc_histo[a][b]) { - abc_sum += nabc; - } - num abc_cumu = 0.0; - for (c, _ in @abc_histo[a][b]) { - num abc_p = @abc_histo[a][b][c] / abc_sum; - abc_cumu += abc_p; - @abc_pmf[a][b][c] = abc_p; - @abc_cmf[a][b][c] = abc_cumu; - } - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - num abcd_sum = 0.0; - for (d, n in @abcd_histo[a][b][c]) { - abcd_sum += n; - } - num abcd_cumu = 0.0; - for (d, _ in @abcd_histo[a][b][c]) { - num abcd_p = @abcd_histo[a][b][c][d] / abcd_sum; - abcd_cumu += abcd_p; - @abcd_pmf[a][b][c][d] = abcd_p; - @abcd_cmf[a][b][c][d] = abcd_cumu; - } - } - } - } - - #dump; - - for (int oi = 0; oi < @ocount; oi += 1) { - oa_u = urand(); - oa = "?"; - for (a, c in @a_cmf) { - oa = a; - if (oa_u < c) { - break; - } - } - str out = oa; - - ob_u = urand(); - ob = "?"; - for (b, c in @ab_cmf[oa]) { - ob = b; - if (ob_u < c) { - break; - } - } - out .= ob; - - oc_u = urand(); - oc = "?"; - for (c, d in @abc_cmf[oa][ob]) { - oc = c; - if (oc_u < d) { - break; - } - } - out .= oc; - - for (int i = 3; i < @olen; i += 1) { - num abcd_u = urand(); - str od = "???"; - #print; - #print "i=".i; - #print "oa = ".oa." ob = ".ob; - for (d, e in @abcd_cmf[oa][ob][oc]) { - od = d; - if (abcd_u < e) { - break; - } - } - if (od == "???") { - break; - } - #print "i=".i.",oa=".oa.",ob=".ob.",oc=".oc; - #print "oc = ".oc; - out .= od; - oa = ob; - ob = oc; - oc = od; - } - #print "U IS ".oa_u; - #print "A IS ".oa; - print out; - - } -} diff --git a/docs6/src/ngrams/mkv5.mlr b/docs6/src/ngrams/mkv5.mlr deleted file mode 100755 index cdb307bd2..000000000 --- a/docs6/src/ngrams/mkv5.mlr +++ /dev/null @@ -1,183 +0,0 @@ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 4) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - str d = substr(v, 3, 3); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - @abcd_histo[a][b][c][d] += 1; - - for (int i = 0; i < n-4; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - str e = substr(v, i+4, i+4); - @abcde_histo[a][b][c][d][e] += 1; - } - } -} - -end { - - num a_sum = 0; - for (a, na in @a_histo) { - a_sum += na; - } - num a_cumu = 0.0; - for (a, _ in @a_histo) { - num a_p = @a_histo[a] / a_sum; - a_cumu += a_p; - @a_pmf[a] = a_p; - @a_cmf[a] += a_cumu; - } - - for (a in @ab_histo) { - num ab_sum = 0.0; - for (b, nab in @ab_histo[a]) { - ab_sum += nab; - } - num ab_cumu = 0.0; - for (b, _ in @ab_histo[a]) { - num ab_p = @ab_histo[a][b] / ab_sum; - ab_cumu += ab_p; - @ab_pmf[a][b] = ab_p; - @ab_cmf[a][b] = ab_cumu; - } - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - num abc_sum = 0.0; - for (c, nabc in @abc_histo[a][b]) { - abc_sum += nabc; - } - num abc_cumu = 0.0; - for (c, _ in @abc_histo[a][b]) { - num abc_p = @abc_histo[a][b][c] / abc_sum; - abc_cumu += abc_p; - @abc_pmf[a][b][c] = abc_p; - @abc_cmf[a][b][c] = abc_cumu; - } - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - num abcd_sum = 0.0; - for (d, n in @abcd_histo[a][b][c]) { - abcd_sum += n; - } - num abcd_cumu = 0.0; - for (d, _ in @abcd_histo[a][b][c]) { - num abcd_p = @abcd_histo[a][b][c][d] / abcd_sum; - abcd_cumu += abcd_p; - @abcd_pmf[a][b][c][d] = abcd_p; - @abcd_cmf[a][b][c][d] = abcd_cumu; - } - } - } - } - - for (a in @abcde_histo) { - for (b in @abcde_histo[a]) { - for (c in @abcde_histo[a][b]) { - for (d in @abcde_histo[a][b][c]) { - num abcde_sum = 0.0; - for (e, n in @abcde_histo[a][b][c][d]) { - abcde_sum += n; - } - num abcde_cumu = 0.0; - for (e, _ in @abcde_histo[a][b][c][d]) { - num abcde_p = @abcde_histo[a][b][c][d][e] / abcde_sum; - abcde_cumu += abcde_p; - @abcde_pmf[a][b][c][d][e] = abcde_p; - @abcde_cmf[a][b][c][d][e] = abcde_cumu; - } - } - } - } - } - - #dump; - - for (int oi = 0; oi < @ocount; oi += 1) { - - oa_u = urand(); - oa = "?"; - for (a, c in @a_cmf) { - oa = a; - if (oa_u < c) { - break; - } - } - str out = oa; - - ob_u = urand(); - ob = "?"; - for (b, c in @ab_cmf[oa]) { - ob = b; - if (ob_u < c) { - break; - } - } - out .= ob; - - oc_u = urand(); - oc = "?"; - for (c, d in @abc_cmf[oa][ob]) { - oc = c; - if (oc_u < d) { - break; - } - } - out .= oc; - - od_u = urand(); - od = "?"; - for (d, e in @abcd_cmf[oa][ob][oc]) { - od = d; - if (od_u < e) { - break; - } - } - out .= od; - - for (int i = 4; i < @olen; i += 1) { - num abcde_u = urand(); - str oe = "???"; - for (e, f in @abcde_cmf[oa][ob][oc][od]) { - oe = e; - if (abcde_u < f) { - break; - } - } - if (oe == "???") { - break; - } - out .= oe; - oa = ob; - ob = oc; - oc = od; - od = oe; - } - print out; - - } -} diff --git a/docs6/src/ngrams/ng1 b/docs6/src/ngrams/ng1 deleted file mode 100755 index 8a865742e..000000000 --- a/docs6/src/ngrams/ng1 +++ /dev/null @@ -1,2 +0,0 @@ -ourdir=$(dirname $0) -mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng1.mlr diff --git a/docs6/src/ngrams/ng1.mlr b/docs6/src/ngrams/ng1.mlr deleted file mode 100755 index 4b9fc8496..000000000 --- a/docs6/src/ngrams/ng1.mlr +++ /dev/null @@ -1,39 +0,0 @@ -# ================================================================ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - for (int i = 0; i < n; i += 1) { - str a = substr(v, i, i); - @a_histo[a] += 1; - } -} - -# ================================================================ -end { - # Define this in this scope else it'll be scoped to the for-loop. - map a_cmf = compute_cmf_from_histo(@a_histo); - - for (int oi = 0; oi < @ocount; oi += 1) { - str out = ""; - for (int i = 0; i < @olen; i += 1) { - str oa = sample_from_cmf(a_cmf); - if (oa == "") { - break; - } - out .= oa; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng1.mlr.txt b/docs6/src/ngrams/ng1.mlr.txt deleted file mode 100755 index 29b27f15a..000000000 --- a/docs6/src/ngrams/ng1.mlr.txt +++ /dev/null @@ -1,39 +0,0 @@ -# ================================================================ -begin { - if (isabsent(@olen)) { - @olen = 16; - } - if (isabsent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - for (int i = 0; i < n; i += 1) { - str a = substr(v, i, i); - @a_histo[a] += 1; - } -} - -# ================================================================ -end { - # Define this in this scope else it'll be scoped to the for-loop. - map a_cmf = compute_cmf_from_histo(@a_histo); - - for (int oi = 0; oi < @ocount; oi += 1) { - str out = ""; - for (int i = 0; i < @olen; i += 1) { - str oa = sample_from_cmf(a_cmf); - if (oa == "") { - break; - } - out .= oa; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng2 b/docs6/src/ngrams/ng2 deleted file mode 100755 index 0707ef0fa..000000000 --- a/docs6/src/ngrams/ng2 +++ /dev/null @@ -1,2 +0,0 @@ -ourdir=$(dirname $0) -mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng2.mlr diff --git a/docs6/src/ngrams/ng2.mlr b/docs6/src/ngrams/ng2.mlr deleted file mode 100755 index 8cbf3ceb6..000000000 --- a/docs6/src/ngrams/ng2.mlr +++ /dev/null @@ -1,52 +0,0 @@ -# ================================================================ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 1) { - str a = substr(v, 0, 0); - @a_histo[a] += 1; - - for (int i = 0; i < n-1; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - @ab_histo[a][b] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define this in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str out = oa; - - for (int i = 1; i < @olen; i += 1) { - str ob = sample_from_cmf(ab_cmf[oa]); - if (ob == "") { - break; - } - out .= ob; - oa = ob; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng2.mlr.txt b/docs6/src/ngrams/ng2.mlr.txt deleted file mode 100755 index 16981727d..000000000 --- a/docs6/src/ngrams/ng2.mlr.txt +++ /dev/null @@ -1,52 +0,0 @@ -# ================================================================ -begin { - if (isabsent(@olen)) { - @olen = 16; - } - if (isabsent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 1) { - str a = substr(v, 0, 0); - @a_histo[a] += 1; - - for (int i = 0; i < n-1; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - @ab_histo[a][b] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define this in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str out = oa; - - for (int i = 1; i < @olen; i += 1) { - str ob = sample_from_cmf(ab_cmf[oa]); - if (ob == "") { - break; - } - out .= ob; - oa = ob; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng3 b/docs6/src/ngrams/ng3 deleted file mode 100755 index 1755db5ba..000000000 --- a/docs6/src/ngrams/ng3 +++ /dev/null @@ -1,2 +0,0 @@ -ourdir=$(dirname $0) -mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng3.mlr diff --git a/docs6/src/ngrams/ng3.mlr b/docs6/src/ngrams/ng3.mlr deleted file mode 100755 index 057b9b233..000000000 --- a/docs6/src/ngrams/ng3.mlr +++ /dev/null @@ -1,64 +0,0 @@ -# ================================================================ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 2) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - - for (int i = 0; i < n-2; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - @abc_histo[a][b][c] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str out = oa . ob; - - for (int i = 2; i < @olen; i += 1) { - str oc = sample_from_cmf(abc_cmf[oa][ob]); - if (oc == "") { - break; - } - out .= oc; - oa = ob; - ob = oc; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng3.mlr.txt b/docs6/src/ngrams/ng3.mlr.txt deleted file mode 100755 index afe32a3db..000000000 --- a/docs6/src/ngrams/ng3.mlr.txt +++ /dev/null @@ -1,64 +0,0 @@ -# ================================================================ -begin { - if (isabsent(@olen)) { - @olen = 16; - } - if (isabsent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 2) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - - for (int i = 0; i < n-2; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - @abc_histo[a][b][c] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str out = oa . ob; - - for (int i = 2; i < @olen; i += 1) { - str oc = sample_from_cmf(abc_cmf[oa][ob]); - if (oc == "") { - break; - } - out .= oc; - oa = ob; - ob = oc; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng4 b/docs6/src/ngrams/ng4 deleted file mode 100755 index b80213025..000000000 --- a/docs6/src/ngrams/ng4 +++ /dev/null @@ -1,2 +0,0 @@ -ourdir=$(dirname $0) -mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng4.mlr diff --git a/docs6/src/ngrams/ng4.mlr b/docs6/src/ngrams/ng4.mlr deleted file mode 100755 index 8af2a3961..000000000 --- a/docs6/src/ngrams/ng4.mlr +++ /dev/null @@ -1,79 +0,0 @@ -# ================================================================ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 3) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - - for (int i = 0; i < n-3; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - @abcd_histo[a][b][c][d] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - map abcd_cmf = {}; - - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); - } - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str oc = sample_from_cmf(abc_cmf[oa][ob]); - str out = oa . ob . oc; - - for (int i = 3; i < @olen; i += 1) { - str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); - if (od == "") { - break; - } - out .= od; - oa = ob; - ob = oc; - oc = od; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng4.mlr.txt b/docs6/src/ngrams/ng4.mlr.txt deleted file mode 100755 index 5641ee7e2..000000000 --- a/docs6/src/ngrams/ng4.mlr.txt +++ /dev/null @@ -1,79 +0,0 @@ -# ================================================================ -begin { - if (isabsent(@olen)) { - @olen = 16; - } - if (isabsent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 3) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - - for (int i = 0; i < n-3; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - @abcd_histo[a][b][c][d] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - map abcd_cmf = {}; - - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); - } - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str oc = sample_from_cmf(abc_cmf[oa][ob]); - str out = oa . ob . oc; - - for (int i = 3; i < @olen; i += 1) { - str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); - if (od == "") { - break; - } - out .= od; - oa = ob; - ob = oc; - oc = od; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng5 b/docs6/src/ngrams/ng5 deleted file mode 100755 index de8d2c486..000000000 --- a/docs6/src/ngrams/ng5 +++ /dev/null @@ -1,2 +0,0 @@ -ourdir=$(dirname $0) -mlr --nidx --from $ourdir/gsl-2000.txt put -q -f $ourdir/ngfuncs.mlr -f $ourdir/ng5.mlr diff --git a/docs6/src/ngrams/ng5.mlr b/docs6/src/ngrams/ng5.mlr deleted file mode 100755 index 6b48666fe..000000000 --- a/docs6/src/ngrams/ng5.mlr +++ /dev/null @@ -1,95 +0,0 @@ -# ================================================================ -begin { - if (is_absent(@olen)) { - @olen = 16; - } - if (is_absent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 4) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - str d = substr(v, 3, 3); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - @abcd_histo[a][b][c][d] += 1; - - for (int i = 0; i < n-4; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - str e = substr(v, i+4, i+4); - @abcde_histo[a][b][c][d][e] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - map abcd_cmf = {}; - map abcde_cmf = {}; - - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); - } - } - } - - for (a in @abcde_histo) { - for (b in @abcde_histo[a]) { - for (c in @abcde_histo[a][b]) { - for (d in @abcde_histo[a][b][c]) { - abcde_cmf[a][b][c][d] = compute_cmf_from_histo(@abcde_histo[a][b][c][d]); - } - } - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str oc = sample_from_cmf(abc_cmf[oa][ob]); - str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); - str out = oa . ob . oc . od; - - for (int i = 4; i < @olen; i += 1) { - str oe = sample_from_cmf(abcde_cmf[oa][ob][oc][od]); - if (oe == "") { - break; - } - out .= oe; - oa = ob; - ob = oc; - oc = od; - od = oe; - } - print out; - } -} diff --git a/docs6/src/ngrams/ng5.mlr.txt b/docs6/src/ngrams/ng5.mlr.txt deleted file mode 100755 index 43bd3ab19..000000000 --- a/docs6/src/ngrams/ng5.mlr.txt +++ /dev/null @@ -1,95 +0,0 @@ -# ================================================================ -begin { - if (isabsent(@olen)) { - @olen = 16; - } - if (isabsent(@ocount)) { - @ocount = 16; - } -} - -# ================================================================ -for (_, v in $*) { - if (string(v) == "inf" || string(v) == "nan") { - continue; - } - int n = strlen(v); - if (n >= 4) { - str a = substr(v, 0, 0); - str b = substr(v, 1, 1); - str c = substr(v, 2, 2); - str d = substr(v, 3, 3); - @a_histo[a] += 1; - @ab_histo[a][b] += 1; - @abc_histo[a][b][c] += 1; - @abcd_histo[a][b][c][d] += 1; - - for (int i = 0; i < n-4; i += 1) { - str a = substr(v, i, i); - str b = substr(v, i+1, i+1); - str c = substr(v, i+2, i+2); - str d = substr(v, i+3, i+3); - str e = substr(v, i+4, i+4); - @abcde_histo[a][b][c][d][e] += 1; - } - } -} - -# ================================================================ -end { - map a_cmf = compute_cmf_from_histo(@a_histo); - # Define these in this scope else they'll be scoped to the for-loops. - map ab_cmf = {}; - map abc_cmf = {}; - map abcd_cmf = {}; - map abcde_cmf = {}; - - for (a in @ab_histo) { - ab_cmf[a] = compute_cmf_from_histo(@ab_histo[a]); - } - - for (a in @abc_histo) { - for (b in @abc_histo[a]) { - abc_cmf[a][b] = compute_cmf_from_histo(@abc_histo[a][b]); - } - } - - for (a in @abcd_histo) { - for (b in @abcd_histo[a]) { - for (c in @abcd_histo[a][b]) { - abcd_cmf[a][b][c] = compute_cmf_from_histo(@abcd_histo[a][b][c]); - } - } - } - - for (a in @abcde_histo) { - for (b in @abcde_histo[a]) { - for (c in @abcde_histo[a][b]) { - for (d in @abcde_histo[a][b][c]) { - abcde_cmf[a][b][c][d] = compute_cmf_from_histo(@abcde_histo[a][b][c][d]); - } - } - } - } - - for (int oi = 0; oi < @ocount; oi += 1) { - str oa = sample_from_cmf(a_cmf); - str ob = sample_from_cmf(ab_cmf[oa]); - str oc = sample_from_cmf(abc_cmf[oa][ob]); - str od = sample_from_cmf(abcd_cmf[oa][ob][oc]); - str out = oa . ob . oc . od; - - for (int i = 4; i < @olen; i += 1) { - str oe = sample_from_cmf(abcde_cmf[oa][ob][oc][od]); - if (oe == "") { - break; - } - out .= oe; - oa = ob; - ob = oc; - oc = od; - od = oe; - } - print out; - } -} diff --git a/docs6/src/ngrams/ngfuncs.mlr b/docs6/src/ngrams/ngfuncs.mlr deleted file mode 100644 index 293a8e208..000000000 --- a/docs6/src/ngrams/ngfuncs.mlr +++ /dev/null @@ -1,49 +0,0 @@ -# ================================================================ -func compute_sum_from_histo(map histo) : num { - num sum = 0; - for (k, n in histo) { - sum += n; - } - return sum; -} - -# ---------------------------------------------------------------- -func compute_pmf_from_histo(map histo) : map { - num sum = compute_sum_from_histo(histo); - num cumu = 0.0; - map pmf = {}; - for (k, _ in histo) { - num p = histo[k] / sum; - pmf[k] = p; - } - return pmf; -} - -# ---------------------------------------------------------------- -func compute_cmf_from_pmf(map pmf) : map { - num cumu = 0.0; - map cmf = {}; - for (k, p in pmf) { - cumu += p; - cmf[k] = cumu; - } - return cmf; -} - -# ---------------------------------------------------------------- -func compute_cmf_from_histo(map histo) : map { - return compute_cmf_from_pmf(compute_pmf_from_histo(histo)); -} - -# ---------------------------------------------------------------- -func sample_from_cmf(var cmf) : str { - u = urand(); - output = ""; - for (k, c in cmf) { - output = k; - if (u < c) { - break; - } - } - return output; -} diff --git a/docs6/src/ngrams/ngfuncs.mlr.txt b/docs6/src/ngrams/ngfuncs.mlr.txt deleted file mode 100644 index 293a8e208..000000000 --- a/docs6/src/ngrams/ngfuncs.mlr.txt +++ /dev/null @@ -1,49 +0,0 @@ -# ================================================================ -func compute_sum_from_histo(map histo) : num { - num sum = 0; - for (k, n in histo) { - sum += n; - } - return sum; -} - -# ---------------------------------------------------------------- -func compute_pmf_from_histo(map histo) : map { - num sum = compute_sum_from_histo(histo); - num cumu = 0.0; - map pmf = {}; - for (k, _ in histo) { - num p = histo[k] / sum; - pmf[k] = p; - } - return pmf; -} - -# ---------------------------------------------------------------- -func compute_cmf_from_pmf(map pmf) : map { - num cumu = 0.0; - map cmf = {}; - for (k, p in pmf) { - cumu += p; - cmf[k] = cumu; - } - return cmf; -} - -# ---------------------------------------------------------------- -func compute_cmf_from_histo(map histo) : map { - return compute_cmf_from_pmf(compute_pmf_from_histo(histo)); -} - -# ---------------------------------------------------------------- -func sample_from_cmf(var cmf) : str { - u = urand(); - output = ""; - for (k, c in cmf) { - output = k; - if (u < c) { - break; - } - } - return output; -} diff --git a/docs6/src/pix/mand.png b/docs6/src/pix/mand.png deleted file mode 100644 index 770e95c50..000000000 Binary files a/docs6/src/pix/mand.png and /dev/null differ diff --git a/docs6/src/pix/mlr-doc-sepia.jpg b/docs6/src/pix/mlr-doc-sepia.jpg deleted file mode 100644 index 2bfb1ba7d..000000000 Binary files a/docs6/src/pix/mlr-doc-sepia.jpg and /dev/null differ diff --git a/docs6/src/pix/mlr.jpg b/docs6/src/pix/mlr.jpg deleted file mode 100644 index f7b6f9756..000000000 Binary files a/docs6/src/pix/mlr.jpg and /dev/null differ diff --git a/docs6/src/pix/omd.png b/docs6/src/pix/omd.png deleted file mode 100644 index 4cffc1c8d..000000000 Binary files a/docs6/src/pix/omd.png and /dev/null differ diff --git a/docs6/src/pix/sepia-overlay.jpg b/docs6/src/pix/sepia-overlay.jpg deleted file mode 100644 index b62c652c1..000000000 Binary files a/docs6/src/pix/sepia-overlay.jpg and /dev/null differ diff --git a/docs6/src/polyglot-dkvp-io/dkvp_io.py b/docs6/src/polyglot-dkvp-io/dkvp_io.py deleted file mode 100644 index 40828f51a..000000000 --- a/docs6/src/polyglot-dkvp-io/dkvp_io.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python - -# ================================================================ -# Example of DKVP I/O using Python. -# -# Key point: Use Miller for what it's good at; pass data into/out of tools in -# other languages to do what they're good at. -# -# bash$ python -i dkvp_io.py -# -# # READ -# >>> map = dkvpline2map('x=1,y=2', '=', ',') -# >>> map -# OrderedDict([('x', '1'), ('y', '2')]) -# -# # MODIFY -# >>> map['z'] = map['x'] + map['y'] -# >>> map -# OrderedDict([('x', '1'), ('y', '2'), ('z', 3)]) -# -# # WRITE -# >>> line = map2dkvpline(map, '=', ',') -# >>> line -# 'x=1,y=2,z=3' -# -# ================================================================ - -import re -import collections - -# ---------------------------------------------------------------- -# ips and ifs (input pair separator and input field separator) are nominally '=' and ','. -def dkvpline2map(line, ips, ifs): - pairs = re.split(ifs, line) - map = collections.OrderedDict() - for pair in pairs: - key, value = re.split(ips, pair, 1) - - # Type inference: - try: - value = int(value) - except: - try: - value = float(value) - except: - pass - - map[key] = value - return map - -# ---------------------------------------------------------------- -# ops and ofs (output pair separator and output field separator) are nominally '=' and ','. -def map2dkvpline(map , ops, ofs): - line = '' - pairs = [] - for key in map: - pairs.append(str(key) + ops + str(map[key])) - return str.join(ofs, pairs) diff --git a/docs6/src/polyglot-dkvp-io/dkvp_io.rb b/docs6/src/polyglot-dkvp-io/dkvp_io.rb deleted file mode 100644 index 6a852f69a..000000000 --- a/docs6/src/polyglot-dkvp-io/dkvp_io.rb +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env ruby - -# ================================================================ -# Example of DKVP I/O using Ruby. -# -# Key point: Use Miller for what it's good at; pass data into/out of tools in -# other languages to do what they're good at. -# -# bash$ irb -I. -r dkvp_io.rb -# -# # READ -# irb(main):001:0> map = dkvpline2map('x=1,y=2', '=', ',') -# => {"x"=>"1", "y"=>"2"} -# -# # MODIFY -# irb(main):001:0> map['z'] = map['x'] + map['y'] -# => 3 -# -# # WRITE -# irb(main):002:0> line = map2dkvpline(map, '=', ',') -# => "x=1,y=2,z=3" -# -# ================================================================ - -# ---------------------------------------------------------------- -# ips and ifs (input pair separator and input field separator) are nominally '=' and ','. -def dkvpline2map(line, ips, ifs) - map = {} - line.split(ifs).each do |pair| - (k, v) = pair.split(ips, 2) - - # Type inference: - begin - v = Integer(v) - rescue ArgumentError - begin - v = Float(v) - rescue ArgumentError - # Leave as string - end - end - - map[k] = v - end - map -end - -# ---------------------------------------------------------------- -# ops and ofs (output pair separator and output field separator) are nominally '=' and ','. -def map2dkvpline(map, ops, ofs) - map.collect{|k,v| k.to_s + ops + v.to_s}.join(ofs) -end diff --git a/docs6/src/polyglot-dkvp-io/example.py b/docs6/src/polyglot-dkvp-io/example.py deleted file mode 100644 index 62cb88098..000000000 --- a/docs6/src/polyglot-dkvp-io/example.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -import sys -import re -import copy -import dkvp_io - -while True: - # Read the original record: - line = sys.stdin.readline().strip() - if line == '': - break - map = dkvp_io.dkvpline2map(line, '=', ',') - - # Drop a field: - map.pop('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - omap = copy.copy(map) # since otherwise the for-loop will modify what it loops over - keys = omap.keys() - for key in keys: - # Convert "" to just "int", etc.: - type_string = str(map[key].__class__) - type_string = re.sub("", "", type_string) - map['t'+key] = type_string - - # Write the modified record: - print(dkvp_io.map2dkvpline(map, '=', ',')) diff --git a/docs6/src/polyglot-dkvp-io/example.rb b/docs6/src/polyglot-dkvp-io/example.rb deleted file mode 100644 index f1646e117..000000000 --- a/docs6/src/polyglot-dkvp-io/example.rb +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env ruby - -require 'dkvp_io' - -ARGF.each do |line| - # Read the original record: - map = dkvpline2map(line.chomp, '=', ',') - - # Drop a field: - map.delete('x') - - # Compute some new fields: - map['ab'] = map['a'] + map['b'] - map['iy'] = map['i'] + map['y'] - - # Add new fields which show type of each already-existing field: - keys = map.keys - keys.each do |key| - map['t'+key] = map[key].class - end - - # Write the modified record: - puts map2dkvpline(map, '=', ',') -end diff --git a/docs6/src/programs/sieve.mlr b/docs6/src/programs/sieve.mlr deleted file mode 100644 index cd0373377..000000000 --- a/docs6/src/programs/sieve.mlr +++ /dev/null @@ -1,32 +0,0 @@ -# ================================================================ -# Sieve of Eratosthenes: simple example of Miller DSL as programming language. -# ================================================================ - -# Put this in a begin-block so we can do either -# mlr -n put -q -f name-of-this-file.mlr -# or -# mlr -n put -q -f name-of-this-file.mlr -e '@n = 200' -# i.e. 100 is the default upper limit, and another can be specified using -e. -begin { - @n = 100; -} - -end { - for (int i = 0; i <= @n; i += 1) { - @s[i] = true; - } - @s[0] = false; # 0 is neither prime nor composite - @s[1] = false; # 1 is neither prime nor composite - # Strike out multiples - for (int i = 2; i <= @n; i += 1) { - for (int j = i+i; j <= @n; j += i) { - @s[j] = false; - } - } - # Print survivors - for (int i = 0; i <= @n; i += 1) { - if (@s[i]) { - print i; - } - } -} diff --git a/docs6/src/variance.mlr b/docs6/src/variance.mlr deleted file mode 100644 index 301443387..000000000 --- a/docs6/src/variance.mlr +++ /dev/null @@ -1,9 +0,0 @@ -@n += 1; -@sumx += $x; -@sumx2 += $x**2; -end { - @mean = @sumx / @n; - @var = (@sumx2 - @mean * (2 * @sumx - @n * @mean)) / (@n - 1); - @stddev = sqrt(@var); - emitf @n, @sumx, @sumx2, @mean, @var, @stddev -} diff --git a/go/src/cli/flag_types.go b/go/src/cli/flag_types.go index a4a9cdba2..0428fa9ce 100644 --- a/go/src/cli/flag_types.go +++ b/go/src/cli/flag_types.go @@ -109,7 +109,7 @@ type Flag struct { // take markdown. // * After changing flags you can run `sh build-go-src-test-man-doc.sh` // followed by `git diff` to see how the output looks. See also - // the README.md files in the docs6 and man6 directories for how + // the README.md files in the docs and man directories for how // to look at the autogenned docs pre-commit. help string diff --git a/m4/libtool.m4 b/m4/libtool.m4 deleted file mode 100644 index ee80844b6..000000000 --- a/m4/libtool.m4 +++ /dev/null @@ -1,8387 +0,0 @@ -# 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 - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# 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], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _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 -# 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' - ;; - -netbsdelf*-gnu) - version_type=linux - 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='NetBSD ld.elf_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* | netbsdelf*-gnu) - 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* | netbsdelf*-gnu) - ;; - *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 - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=no - ;; - *) - _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 - ;; - linux* | k*bsd*-gnu | gnu*) - _LT_TAGVAR(link_all_deplibs, $1)=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* | netbsdelf*-gnu) - 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 - _LT_TAGVAR(link_all_deplibs, $1)=no - 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* | netbsdelf*-gnu) - 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 - -## 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... -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 - -## 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... -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 - -## 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... -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 diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 deleted file mode 100644 index 94b082976..000000000 --- a/m4/ltoptions.m4 +++ /dev/null @@ -1,437 +0,0 @@ -# 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 - - -## --------------------------------- ## -## Macros to handle LT_INIT 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], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -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])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 deleted file mode 100644 index 48bc9344a..000000000 --- a/m4/ltsugar.m4 +++ /dev/null @@ -1,124 +0,0 @@ -# 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 -]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 deleted file mode 100644 index fa04b52a3..000000000 --- a/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# 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) -]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 deleted file mode 100644 index c6b26f88f..000000000 --- a/m4/lt~obsolete.m4 +++ /dev/null @@ -1,99 +0,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])]) diff --git a/man6/Makefile b/man/Makefile similarity index 78% rename from man6/Makefile rename to man/Makefile index 528e6c26d..1552a5ab7 100644 --- a/man6/Makefile +++ b/man/Makefile @@ -7,22 +7,22 @@ INSTALLHOME=$(HOME)/man/man1 top: .always echo mkman start - ./mkman.rb > mlr6.1 + ./mkman.rb > mlr.1 ./mkman.rb | groff -man -Tascii | col -b | expand -8 > manpage.txt - cp manpage.txt ../docs6/src/ + cp manpage.txt ../docs/src/ echo mkman end # These targets are only for local dev work. install: top mkdir -p $(INSTALLDIR) - cp mlr6.1 $(INSTALLDIR)/mlr6.1 + cp mlr.1 $(INSTALLDIR)/mlr.1 installhome: top mkdir -p $(INSTALLHOME) - cp mlr6.1 $(INSTALLHOME)/mlr6.1 + cp mlr.1 $(INSTALLHOME)/mlr.1 # This is an out-of-tree operation so do it only if the user is using out-of-tree manpage setup # (e.g. their $MANPATH as $HOME/man as a component). maybeinstallhome: top - if [ -d $(INSTALLHOME) ]; then cp mlr6.1 $(INSTALLHOME)/mlr6.1; else echo No $(INSTALLHOME) -- skipping ; fi + if [ -d $(INSTALLHOME) ]; then cp mlr.1 $(INSTALLHOME)/mlr.1; else echo No $(INSTALLHOME) -- skipping ; fi .always: true diff --git a/man/Makefile.am b/man/Makefile.am deleted file mode 100644 index 286213daf..000000000 --- a/man/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -EXTRA_DIST= mlr.1 -man1_MANS= mlr.1 - -# This target is not for use at package install; only at package-creation time. -# The mlr.1 file should be committed to source control. It uses the mlr -# executable from the PATH variable. -# -# See also -# https://miller.readthedocs.io/en/latest/build.html#creating-a-new-release-for-developers -manpage: - ruby mkman.rb > mlr.1 diff --git a/man/Makefile.in b/man/Makefile.in deleted file mode 100644 index 3beca6e74..000000000 --- a/man/Makefile.in +++ /dev/null @@ -1,527 +0,0 @@ -# Makefile.in generated by automake 1.15.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2017 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 = man -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -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__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)" -NROFF = nroff -MANS = $(man1_MANS) -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -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@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LEX = @LEX@ -LEXLIB = @LEXLIB@ -LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -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@ -EXTRA_DIST = mlr.1 -man1_MANS = mlr.1 -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(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 man/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu man/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__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(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: $(man1_MANS) - @$(NORMAL_INSTALL) - @list1='$(man1_MANS)'; \ - list2=''; \ - 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='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ - files=`{ for i in $$list; do echo "$$i"; done; \ - } | 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) -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(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 $(MANS) -installdirs: - for dir in "$(DESTDIR)$(man1dir)"; 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 mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-man - -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-man1 - -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: uninstall-man - -uninstall-man: uninstall-man1 - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool 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-man1 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 uninstall-man \ - uninstall-man1 - -.PRECIOUS: Makefile - - -# This target is not for use at package install; only at package-creation time. -# The mlr.1 file should be committed to source control. It uses the mlr -# executable from the PATH variable. -# -# See also -# https://miller.readthedocs.io/en/latest/build.html#creating-a-new-release-for-developers -manpage: - ruby mkman.rb > mlr.1 - -# 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: diff --git a/man/Makefile.no-autoconfig b/man/Makefile.no-autoconfig deleted file mode 100644 index d9626e50b..000000000 --- a/man/Makefile.no-autoconfig +++ /dev/null @@ -1,23 +0,0 @@ -# Respective MANPATH entries would include /usr/local/share/man or $HOME/man. -# This should be run after make in the ../c directory but before make in the ../docs directory, -# since ../c/mlr is used to autogenerate ./manpage.txt which is used in ../docs. -# See also https://miller.readthedocs.io/en/latest/build.html#creating-a-new-release-for-developers -INSTALLDIR=/usr/local/share/man/man1 -INSTALLHOME=$(HOME)/man/man1 - -top: .always - echo mkman start - mkman.rb > mlr.1 - mkman.rb | groff -man -Tascii | col -b | expand -8 > manpage.txt - echo mkman end - -# These targets are only for local dev work. -install: - mkdir -p $(INSTALLDIR) - cp mlr.1 $(INSTALLDIR)/mlr.1 -installhome: - mkdir -p $(INSTALLHOME) - cp mlr.1 $(INSTALLHOME)/mlr.1 - -.always: - true diff --git a/man6/manpage.txt b/man/manpage.txt similarity index 100% rename from man6/manpage.txt rename to man/manpage.txt diff --git a/man/mkman.rb b/man/mkman.rb index 1cadc1dcd..dfb78ae60 100755 --- a/man/mkman.rb +++ b/man/mkman.rb @@ -23,7 +23,7 @@ def main ]) print make_section('SYNOPSIS', [ -`mlr --usage-synopsis` +`mlr --help` ]) print make_section('DESCRIPTION', [ @@ -38,68 +38,36 @@ a special case.) This manpage documents #{`mlr --version`.chomp}.""" print make_section('EXAMPLES', [ "" ]) + print make_code_block(`mlr help basic-examples`) - print make_subsection('COMMAND-LINE SYNTAX', []) - print make_code_block(`mlr --usage-examples`) + print make_section('FILE FORMATS', []) + print make_code_block(`mlr help file-formats`) - print make_subsection('DATA FORMATS', []) - print make_code_block(`mlr --usage-data-format-examples`) + print make_section('HELP OPTIONS', []) + print make_code_block(`mlr help topics`) - print make_section('OPTIONS', [ -"""In the following option flags, the version with \"i\" designates the input -stream, \"o\" the output stream, and the version without prefix sets the option -for both input and output stream. For example: --irs sets the input record -separator, --ors the output record separator, and --rs sets both the input and -output separator to the given value.""" - ]) + print make_section('VERB LIST', []) + print make_code_block(`mlr help list-verbs-as-paragraph`) - print make_subsection('HELP OPTIONS', []) - print make_code_block(`mlr --usage-help-options`) + print make_section('FUNCTION LIST', []) + print make_code_block(`mlr help list-functions-as-paragraph`) - print make_subsection('VERB LIST', []) - print make_code_block(`mlr --usage-list-all-verbs`) + section_names = `mlr help list-flag-sections`.split("\n") + for section_name in section_names + print make_section(section_name.upcase, [""]) + print make_code_block(`mlr help show-help-for-section '#{section_name}'`) + end - print make_subsection('FUNCTION LIST', []) - print make_code_block(`mlr --usage-functions`) - - print make_subsection('I/O FORMATTING', []) - print make_code_block(`mlr --usage-data-format-options`) - - print make_subsection('COMMENTS IN DATA', []) - print make_code_block(`mlr --usage-comments-in-data`) - - print make_subsection('FORMAT-CONVERSION KEYSTROKE-SAVERS', []) - print make_code_block(`mlr --usage-format-conversion-keystroke-saver-options`) - - print make_subsection('COMPRESSED I/O', []) - print make_code_block(`mlr --usage-compressed-data-options`) - - print make_subsection('SEPARATORS', []) - print make_code_block(`mlr --usage-separator-options`) - - print make_subsection('CSV-SPECIFIC OPTIONS', []) - print make_code_block(`mlr --usage-csv-options`) - - print make_subsection('DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT', []) - print make_code_block(`mlr --usage-double-quoting`) - - print make_subsection('NUMERICAL FORMATTING', []) - print make_code_block(`mlr --usage-numerical-formatting`) - - print make_subsection('OTHER OPTIONS', []) - print make_code_block(`mlr --usage-other-options`) - - print make_subsection('THEN-CHAINING', []) - print make_code_block(`mlr --usage-then-chaining`) - - print make_subsection('AUXILIARY COMMANDS', []) - print make_code_block(`mlr --usage-auxents`) + print make_section('AUXILIARY COMMANDS', []) + print make_code_block(`mlr aux-list`) print make_section('MLRRC', []) + print make_code_block(`mlr help mlrrc`) - print make_code_block(`mlr --usage-mlrrc`) + print make_section('REPL', []) + print make_code_block(`mlr repl -h`) - verbs = `mlr --list-all-verbs-raw` + verbs = `mlr help list-verbs` print make_section('VERBS', [ "" ]) @@ -109,26 +77,26 @@ output separator to the given value.""" print make_code_block(`mlr #{verb} -h`) end - functions = `mlr --list-all-functions-raw` + functions = `mlr help list-functions` print make_section('FUNCTIONS FOR FILTER/PUT', [ "" ]) functions = functions.strip.split("\n").uniq for function in functions print make_subsection(function, []) - text = `mlr --help-function '#{function}'` + text = `mlr help function '#{function}'` text = text.sub(function + ' ', '') print make_code_block(text) end - keywords = `mlr --list-all-keywords-raw` + keywords = `mlr help list-keywords` print make_section('KEYWORDS FOR PUT AND FILTER', [ "" ]) keywords = keywords.strip.split("\n").uniq for keyword in keywords print make_subsection(keyword, []) - text = `mlr --help-keyword '#{keyword}'` + text = `mlr help keyword '#{keyword}'` print make_code_block(text) end @@ -138,7 +106,7 @@ output separator to the given value.""" ]) print make_section('SEE ALSO', [ "awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for " + - "Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc" + "Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io" ]) end diff --git a/man/mlr.1 b/man/mlr.1 index e4f4ab926..9967e7799 100644 --- a/man/mlr.1 +++ b/man/mlr.1 @@ -2,12 +2,12 @@ .\" Title: mlr .\" Author: [see the "AUTHOR" section] .\" Generator: ./mkman.rb -.\" Date: 2021-06-28 +.\" Date: 2021-11-04 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "MILLER" "1" "2021-06-28" "\ \&" "\ \&" +.TH "MILLER" "1" "2021-11-04" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Portability definitions .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -29,7 +29,16 @@ miller \- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. .SH "SYNOPSIS" .sp -Usage: mlr [I/O options] {verb} [verb-dependent options ...] {zero or more file names} +Usage: mlr [flags] {verb} [verb-dependent options ...] {zero or more file names} + +If zero file names are provided, standard input is read, e.g. + mlr --csv sort -f shape example.csv + +Output of one verb may be chained as input to another using "then", e.g. + mlr --csv stats1 -a min,mean,max -f quantity then sort -f color example.csv + +Please see 'mlr help topics' for more information. +Please also see https://johnkerl.org/miller6 .SH "DESCRIPTION" .sp @@ -38,494 +47,808 @@ on integer-indexed fields: if the natural data structure for the latter is the array, then Miller's natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as -a special case.) This manpage documents Miller v5.10.2-dev. +a special case.) This manpage documents Miller v6.0.0-dev. .SH "EXAMPLES" .sp -.SS "COMMAND-LINE SYNTAX" .if n \{\ .RS 0 .\} .nf -mlr --csv cut -f hostname,uptime mydata.csv -mlr --tsv --rs lf filter '$status != "down" && $upsec >= 10000' *.tsv -mlr --nidx put '$sum = $7 < 0.0 ? 3.5 : $7 + 2.1*$8' *.dat -grep -v '^#' /etc/group | mlr --ifs : --nidx --opprint label group,pass,gid,member then sort -f group -mlr join -j account_id -f accounts.dat then group-by account_name balances.dat -mlr --json put '$attr = sub($attr, "([0-9]+)_([0-9]+)_.*", "\e1:\e2")' data/*.json -mlr stats1 -a min,mean,max,p10,p50,p90 -f flag,u,v data/* -mlr stats2 -a linreg-pca -f u,v -g shape data/* -mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' data/* -mlr --from estimates.tbl put ' - for (k,v in $*) { - if (is_numeric(v) && k =~ "^[t-z].*$") { - $sum += v; $count += 1 - } - } - $mean = $sum / $count # no assignment if count unset' -mlr --from infile.dat put -f analyze.mlr -mlr --from infile.dat put 'tee > "./taps/data-".$a."-".$b, $*' -mlr --from infile.dat put 'tee | "gzip > ./taps/data-".$a."-".$b.".gz", $*' -mlr --from infile.dat put -q '@v=$*; dump | "jq .[]"' -mlr --from infile.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' +mlr --icsv --opprint cat example.csv +mlr --icsv --opprint sort -f shape example.csv +mlr --icsv --opprint sort -f shape -nr index example.csv +mlr --icsv --opprint cut -f flag,shape example.csv +mlr --csv filter '$color == "red"' example.csv +mlr --icsv --ojson put '$ratio = $quantity / $rate' example.csv +mlr --icsv --opprint --from example.csv sort -nr index then cut -f shape,quantity .fi .if n \{\ .RE -.SS "DATA FORMATS" +.SH "FILE FORMATS" .if n \{\ .RS 0 .\} .nf - DKVP: delimited key-value pairs (Miller default format) - +---------------------+ - | apple=1,bat=2,cog=3 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | dish=7,egg=8,flint | Record 2: "dish" => "7", "egg" => "8", "3" => "flint" - +---------------------+ +CSV/CSV-lite: comma-separated values with separate header line +TSV: same but with tabs in places of commas ++---------------------+ +| apple,bat,cog | +| 1,2,3 | Record 1: "apple":"1", "bat":"2", "cog":"3" +| 4,5,6 | Record 2: "apple":"4", "bat":"5", "cog":"6" ++---------------------+ - NIDX: implicitly numerically indexed (Unix-toolkit style) - +---------------------+ - | the quick brown | Record 1: "1" => "the", "2" => "quick", "3" => "brown" - | fox jumped | Record 2: "1" => "fox", "2" => "jumped" - +---------------------+ +JSON (sequence or array of objects): ++---------------------+ +| { | +| "apple": 1, | Record 1: "apple":"1", "bat":"2", "cog":"3" +| "bat": 2, | +| "cog": 3 | +| } | +| { | +| "dish": { | Record 2: "dish:egg":"7", +| "egg": 7, | "dish:flint":"8", "garlic":"" +| "flint": 8 | +| }, | +| "garlic": "" | +| } | ++---------------------+ - CSV/CSV-lite: comma-separated values with separate header line - +---------------------+ - | apple,bat,cog | - | 1,2,3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4,5,6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ +PPRINT: pretty-printed tabular ++---------------------+ +| apple bat cog | +| 1 2 3 | Record 1: "apple:"1", "bat":"2", "cog":"3" +| 4 5 6 | Record 2: "apple":"4", "bat":"5", "cog":"6" ++---------------------+ - Tabular JSON: nested objects are supported, although arrays within them are not: - +---------------------+ - | { | - | "apple": 1, | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | "bat": 2, | - | "cog": 3 | - | } | - | { | - | "dish": { | Record 2: "dish:egg" => "7", "dish:flint" => "8", "garlic" => "" - | "egg": 7, | - | "flint": 8 | - | }, | - | "garlic": "" | - | } | - +---------------------+ +Markdown tabular (supported for output only): ++-----------------------+ +| | apple | bat | cog | | +| | --- | --- | --- | | +| | 1 | 2 | 3 | | Record 1: "apple:"1", "bat":"2", "cog":"3" +| | 4 | 5 | 6 | | Record 2: "apple":"4", "bat":"5", "cog":"6" ++-----------------------+ - PPRINT: pretty-printed tabular - +---------------------+ - | apple bat cog | - | 1 2 3 | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | 4 5 6 | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +---------------------+ +XTAB: pretty-printed transposed tabular ++---------------------+ +| apple 1 | Record 1: "apple":"1", "bat":"2", "cog":"3" +| bat 2 | +| cog 3 | +| | +| dish 7 | Record 2: "dish":"7", "egg":"8" +| egg 8 | ++---------------------+ - XTAB: pretty-printed transposed tabular - +---------------------+ - | apple 1 | Record 1: "apple" => "1", "bat" => "2", "cog" => "3" - | bat 2 | - | cog 3 | - | | - | dish 7 | Record 2: "dish" => "7", "egg" => "8" - | egg 8 | - +---------------------+ +DKVP: delimited key-value pairs (Miller default format) ++---------------------+ +| apple=1,bat=2,cog=3 | Record 1: "apple":"1", "bat":"2", "cog":"3" +| dish=7,egg=8,flint | Record 2: "dish":"7", "egg":"8", "3":"flint" ++---------------------+ - Markdown tabular (supported for output only): - +-----------------------+ - | | apple | bat | cog | | - | | --- | --- | --- | | - | | 1 | 2 | 3 | | Record 1: "apple => "1", "bat" => "2", "cog" => "3" - | | 4 | 5 | 6 | | Record 2: "apple" => "4", "bat" => "5", "cog" => "6" - +-----------------------+ +NIDX: implicitly numerically indexed (Unix-toolkit style) ++---------------------+ +| the quick brown | Record 1: "1":"the", "2":"quick", "3":"brown" +| fox jumped | Record 2: "1":"fox", "2":"jumped" ++---------------------+ .fi .if n \{\ .RE -.SH "OPTIONS" +.SH "HELP OPTIONS" +.if n \{\ +.RS 0 +.\} +.nf +Type 'mlr help {topic}' for any of the following: +Essentials: + mlr help topics + mlr help basic-examples + mlr help file-formats +Flags: + mlr help flags + mlr help list-separator-aliases + mlr help comments-in-data-flags + mlr help compressed-data-flags + mlr help csv-only-flags + mlr help file-format-flags + mlr help flatten-unflatten-flags + mlr help format-conversion-keystroke-saver-flags + mlr help json-only-flags + mlr help legacy-flags + mlr help miscellaneous-flags + mlr help output-colorization-flags + mlr help pprint-only-flags + mlr help separator-flags +Verbs: + mlr help list-verbs + mlr help usage-verbs + mlr help verb +Functions: + mlr help list-functions + mlr help list-function-classes + mlr help list-functions-in-class + mlr help usage-functions + mlr help usage-functions-by-class + mlr help function +Keywords: + mlr help list-keywords + mlr help usage-keywords + mlr help keyword +Other: + mlr help auxents + mlr help mlrrc + mlr help output-colorization + mlr help type-arithmetic-info +Shorthands: + mlr -g = mlr help flags + mlr -l = mlr help list-verbs + mlr -L = mlr help usage-verbs + mlr -f = mlr help list-functions + mlr -F = mlr help usage-functions + mlr -k = mlr help list-keywords + mlr -K = mlr help usage-keywords +Lastly, 'mlr help ...' will search for your text '...' using the sources of +\(cqmlr help flag', 'mlr help verb', 'mlr help function', and 'mlr help keyword'. +For things appearing in more than one place, e.g. 'sec2gmt' which is the name of a +verb as well as a function, use `mlr help verb sec2gmt' or `mlr help function sec2gmt' +to disambiguate. +.fi +.if n \{\ +.RE +.SH "VERB LIST" +.if n \{\ +.RS 0 +.\} +.nf +altkv bar bootstrap cat check clean-whitespace count-distinct count +count-similar cut decimate fill-down fill-empty filter flatten format-values +fraction gap grep group-by group-like having-fields head histogram json-parse +json-stringify join label least-frequent merge-fields most-frequent nest +nothing put regularize remove-empty-columns rename reorder repeat reshape +sample sec2gmtdate sec2gmt seqgen shuffle skip-trivial-records sort +sort-within-records stats1 stats2 step tac tail tee template top unflatten +uniq unsparsify +.fi +.if n \{\ +.RE +.SH "FUNCTION LIST" +.if n \{\ +.RS 0 +.\} +.nf +abs acos acosh any append apply arrayify asin asinh asserting_absent +asserting_array asserting_bool asserting_boolean asserting_empty +asserting_empty_map asserting_error asserting_float asserting_int +asserting_map asserting_nonempty_map asserting_not_array asserting_not_empty +asserting_not_map asserting_not_null asserting_null asserting_numeric +asserting_present asserting_string atan atan2 atanh bitcount boolean +capitalize cbrt ceil clean_whitespace collapse_whitespace cos cosh depth +dhms2fsec dhms2sec erf erfc every exp expm1 flatten float floor fmtnum fold +fsec2dhms fsec2hms get_keys get_values gmt2localtime gmt2sec gsub haskey +hexfmt hms2fsec hms2sec hostname int invqnorm is_absent is_array is_bool +is_boolean is_empty is_empty_map is_error is_float is_int is_map +is_nonempty_map is_not_array is_not_empty is_not_map is_not_null is_null +is_numeric is_present is_string joink joinkv joinv json_parse json_stringify +leafcount length localtime2gmt localtime2sec log log10 log1p logifit lstrip +madd mapdiff mapexcept mapselect mapsum max md5 mexp min mmul msub os pow +qnorm reduce regextract regextract_or_else round roundm rstrip sec2dhms +sec2gmt sec2gmtdate sec2hms sec2localdate sec2localtime select sgn sha1 sha256 +sha512 sin sinh sort splita splitax splitkv splitkvx splitnv splitnvx sqrt +ssub strftime strftime_local string strip strlen strptime strptime_local sub +substr substr0 substr1 system systime systimeint tan tanh tolower toupper +truncate typeof unflatten uptime urand urand32 urandint urandrange version ! +!= !=~ % & && * ** + - . .* .+ .- ./ / // < << <= <=> == =~ > >= >> >>> ?: ?? +??? ^ ^^ | || ~ +.fi +.if n \{\ +.RE +.SH "COMMENTS-IN-DATA FLAGS" .sp -In the following option flags, the version with "i" designates the input -stream, "o" the output stream, and the version without prefix sets the option -for both input and output stream. For example: --irs sets the input record -separator, --ors the output record separator, and --rs sets both the input and -output separator to the given value. -.SS "HELP OPTIONS" + .if n \{\ .RS 0 .\} .nf - -h or --help Show this message. - --version Show the software version. - {verb name} --help Show verb-specific help. - --help-all-verbs Show help on all verbs. - -l or --list-all-verbs List only verb names. - -L List only verb names, one per line. - -f or --help-all-functions Show help on all built-in functions. - -F Show a bare listing of built-in functions by name. - -k or --help-all-keywords Show help on all keywords. - -K Show a bare listing of keywords by name. -.fi -.if n \{\ -.RE -.SS "VERB LIST" -.if n \{\ -.RS 0 -.\} -.nf - altkv bar bootstrap cat check clean-whitespace count count-distinct - count-similar cut decimate fill-down fill-empty filter format-values fraction - grep group-by group-like having-fields head histogram join label - least-frequent merge-fields most-frequent nest nothing put regularize - remove-empty-columns rename reorder repeat reshape sample sec2gmt sec2gmtdate - seqgen shuffle skip-trivial-records sort sort-within-records stats1 stats2 - step tac tail tee top uniq unsparsify -.fi -.if n \{\ -.RE -.SS "FUNCTION LIST" -.if n \{\ -.RS 0 -.\} -.nf - + + - - * / // .+ .+ .- .- .* ./ .// % ** | ^ & ~ << >> bitcount == != =~ !=~ - > >= < <= && || ^^ ! ? : . gsub regextract regextract_or_else strlen sub ssub - substr tolower toupper truncate capitalize lstrip rstrip strip - collapse_whitespace clean_whitespace system abs acos acosh asin asinh atan - atan2 atanh cbrt ceil cos cosh erf erfc exp expm1 floor invqnorm log log10 - log1p logifit madd max mexp min mmul msub pow qnorm round roundm sgn sin sinh - sqrt tan tanh urand urandrange urand32 urandint dhms2fsec dhms2sec fsec2dhms - fsec2hms gmt2sec localtime2sec hms2fsec hms2sec sec2dhms sec2gmt sec2gmt - sec2gmtdate sec2localtime sec2localtime sec2localdate sec2hms strftime - strftime_local strptime strptime_local systime is_absent is_bool is_boolean - is_empty is_empty_map is_float is_int is_map is_nonempty_map is_not_empty - is_not_map is_not_null is_null is_numeric is_present is_string - asserting_absent asserting_bool asserting_boolean asserting_empty - asserting_empty_map asserting_float asserting_int asserting_map - asserting_nonempty_map asserting_not_empty asserting_not_map - asserting_not_null asserting_null asserting_numeric asserting_present - asserting_string boolean float fmtnum hexfmt int string typeof depth haskey - joink joinkv joinv leafcount length mapdiff mapexcept mapselect mapsum splitkv - splitkvx splitnv splitnvx +Miller lets you put comments in your data, such as -Please use "mlr --help-function {function name}" for function-specific help. -.fi -.if n \{\ -.RE -.SS "I/O FORMATTING" -.if n \{\ -.RS 0 -.\} -.nf - --idkvp --odkvp --dkvp Delimited key-value pairs, e.g "a=1,b=2" - (this is Miller's default format). + # This is a comment for a CSV file + a,b,c + 1,2,3 + 4,5,6 - --inidx --onidx --nidx Implicitly-integer-indexed fields - (Unix-toolkit style). - -T Synonymous with "--nidx --fs tab". - - --icsv --ocsv --csv Comma-separated value (or tab-separated - with --fs tab, etc.) - - --itsv --otsv --tsv Keystroke-savers for "--icsv --ifs tab", - "--ocsv --ofs tab", "--csv --fs tab". - --iasv --oasv --asv Similar but using ASCII FS 0x1f and RS 0x1e - --iusv --ousv --usv Similar but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --icsvlite --ocsvlite --csvlite Comma-separated value (or tab-separated - with --fs tab, etc.). The 'lite' CSV does not handle - RFC-CSV double-quoting rules; is slightly faster; - and handles heterogeneity in the input stream via - empty newline followed by new header line. See also - http://johnkerl.org/miller/doc/file-formats.html#CSV/TSV/etc. - - --itsvlite --otsvlite --tsvlite Keystroke-savers for "--icsvlite --ifs tab", - "--ocsvlite --ofs tab", "--csvlite --fs tab". - -t Synonymous with --tsvlite. - --iasvlite --oasvlite --asvlite Similar to --itsvlite et al. but using ASCII FS 0x1f and RS 0x1e - --iusvlite --ousvlite --usvlite Similar to --itsvlite et al. but using Unicode FS U+241F (UTF-8 0xe2909f) - and RS U+241E (UTF-8 0xe2909e) - - --ipprint --opprint --pprint Pretty-printed tabular (produces no - output until all input is in). - --right Right-justifies all fields for PPRINT output. - --barred Prints a border around PPRINT output - (only available for output). - - --omd Markdown-tabular (only available for output). - - --ixtab --oxtab --xtab Pretty-printed vertical-tabular. - --xvright Right-justifies values for XTAB format. - - --ijson --ojson --json JSON tabular: sequence or list of one-level - maps: {...}{...} or [{...},{...}]. - --json-map-arrays-on-input JSON arrays are unmillerable. --json-map-arrays-on-input - --json-skip-arrays-on-input is the default: arrays are converted to integer-indexed - --json-fatal-arrays-on-input maps. The other two options cause them to be skipped, or - to be treated as errors. Please use the jq tool for full - JSON (pre)processing. - --jvstack Put one key-value pair per line for JSON - output. - --jsonx --ojsonx Keystroke-savers for --json --jvstack - --jsonx --ojsonx and --ojson --jvstack, respectively. - --jlistwrap Wrap JSON output in outermost [ ]. - --jknquoteint Do not quote non-string map keys in JSON output. - --jvquoteall Quote map values in JSON output, even if they're - numeric. - --jflatsep {string} Separator for flattening multi-level JSON keys, - e.g. '{"a":{"b":3}}' becomes a:b => 3 for - non-JSON formats. Defaults to :. - - -p is a keystroke-saver for --nidx --fs space --repifs - - Examples: --csv for CSV-formatted input and output; --idkvp --opprint for - DKVP-formatted input and pretty-printed output. - - Please use --iformat1 --oformat2 rather than --format1 --oformat2. - The latter sets up input and output flags for format1, not all of which - are overridden in all cases by setting output format to format2. -.fi -.if n \{\ -.RE -.SS "COMMENTS IN DATA" -.if n \{\ -.RS 0 -.\} -.nf - --skip-comments Ignore commented lines (prefixed by "#") - within the input. - --skip-comments-with {string} Ignore commented lines within input, with - specified prefix. - --pass-comments Immediately print commented lines (prefixed by "#") - within the input. - --pass-comments-with {string} Immediately print commented lines within input, with - specified prefix. Notes: + * Comments are only honored at the start of a line. -* In the absence of any of the above four options, comments are data like - any other text. -* When pass-comments is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. - Results may be counterintuitive. A suggestion is to place comments at the - start of data files. -.fi -.if n \{\ -.RE -.SS "FORMAT-CONVERSION KEYSTROKE-SAVERS" -.if n \{\ -.RS 0 -.\} -.nf -As keystroke-savers for format-conversion you may use the following: - --c2t --c2d --c2n --c2j --c2x --c2p --c2m - --t2c --t2d --t2n --t2j --t2x --t2p --t2m - --d2c --d2t --d2n --d2j --d2x --d2p --d2m - --n2c --n2t --n2d --n2j --n2x --n2p --n2m - --j2c --j2t --j2d --j2n --j2x --j2p --j2m - --x2c --x2t --x2d --x2n --x2j --x2p --x2m - --p2c --p2t --p2d --p2n --p2j --p2x --p2m -The letters c t d n j x p m refer to formats CSV, TSV, DKVP, NIDX, JSON, XTAB, -PPRINT, and markdown, respectively. Note that markdown format is available for -output only. -.fi -.if n \{\ -.RE -.SS "COMPRESSED I/O" -.if n \{\ -.RS 0 -.\} -.nf - --prepipe {command} This allows Miller to handle compressed inputs. You can do - without this for single input files, e.g. "gunzip < myfile.csv.gz | mlr ...". +* In the absence of any of the below four options, comments are data like + any other text. (The comments-in-data feature is opt-in.) +* When `--pass-comments` is used, comment lines are written to standard output + immediately upon being read; they are not part of the record stream. Results + may be counterintuitive. A suggestion is to place comments at the start of + data files. - However, when multiple input files are present, between-file separations are - lost; also, the FILENAME variable doesn't iterate. Using --prepipe you can - specify an action to be taken on each input file. This pre-pipe command must - be able to read from standard input; it will be invoked with - {command} < {filename}. - Examples: - mlr --prepipe 'gunzip' - mlr --prepipe 'zcat -cf' - mlr --prepipe 'xz -cd' +--pass-comments Immediately print commented lines (prefixed by `#`) + within the input. +--pass-comments-with {string} + Immediately print commented lines within input, with + specified prefix. +--skip-comments Ignore commented lines (prefixed by `#`) within the + input. +--skip-comments-with {string} + Ignore commented lines within input, with specified + prefix. +.fi +.if n \{\ +.RE +.SH "COMPRESSED-DATA FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +Miller offers a few different ways to handle reading data files + which have been compressed. + +* Decompression done within the Miller process itself: `--bz2in` `--gzin` `--zin` +* Decompression done outside the Miller process: `--prepipe` `--prepipex` + +Using `--prepipe` and `--prepipex` you can specify an action to be +taken on each input file. The prepipe command must be able to read from +standard input; it will be invoked with `{command} < {filename}`. The +prepipex command must take a filename as argument; it will be invoked with +`{command} {filename}`. + +Examples: + + mlr --prepipe gunzip + mlr --prepipe zcat -cf + mlr --prepipe xz -cd mlr --prepipe cat - mlr --prepipe-gunzip - mlr --prepipe-zcat - Note that this feature is quite general and is not limited to decompression - utilities. You can use it to apply per-file filters of your choice. - For output compression (or other) utilities, simply pipe the output: - mlr ... | {your compression command} - There are shorthands --prepipe-zcat and --prepipe-gunzip which are - valid in .mlrrc files. The --prepipe flag is not valid in .mlrrc - files since that would put execution of the prepipe command under - control of the .mlrrc file. -.fi -.if n \{\ -.RE -.SS "SEPARATORS" -.if n \{\ -.RS 0 -.\} -.nf - --rs --irs --ors Record separators, e.g. 'lf' or '\er\en' - --fs --ifs --ofs --repifs Field separators, e.g. comma - --ps --ips --ops Pair separators, e.g. equals sign +Note that this feature is quite general and is not limited to decompression +utilities. You can use it to apply per-file filters of your choice. For output +compression (or other) utilities, simply pipe the output: +`mlr ... | {your compression command} > outputfilenamegoeshere` - Notes about line endings: - * Default line endings (--irs and --ors) are "auto" which means autodetect from - the input file format, as long as the input file(s) have lines ending in either - LF (also known as linefeed, '\en', 0x0a, Unix-style) or CRLF (also known as - carriage-return/linefeed pairs, '\er\en', 0x0d 0x0a, Windows style). - * If both irs and ors are auto (which is the default) then LF input will lead to LF - output and CRLF input will lead to CRLF output, regardless of the platform you're - running on. - * The line-ending autodetector triggers on the first line ending detected in the input - stream. E.g. if you specify a CRLF-terminated file on the command line followed by an - LF-terminated file then autodetected line endings will be CRLF. - * If you use --ors {something else} with (default or explicitly specified) --irs auto - then line endings are autodetected on input and set to what you specify on output. - * If you use --irs {something else} with (default or explicitly specified) --ors auto - then the output line endings used are LF on Unix/Linux/BSD/MacOSX, and CRLF on Windows. +Lastly, note that if `--prepipe` or `--prepipex` is specified, it replaces any +decisions that might have been made based on the file suffix. Likewise, +`--gzin`/`--bz2in`/`--zin` are ignored if `--prepipe` is also specified. - Notes about all other separators: - * IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. - * IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about --irs/--ors/--rs auto becomes --ifs/--ofs/--fs - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) - * OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. - * OPS may be multi-character for XTAB format, in which case alignment is - disabled. - * TSV is simply CSV using tab as field separator ("--fs tab"). - * FS/PS are ignored for markdown format; RS is used. - * All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. - * You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - "--fs '|' --ips :" - - C-style escape sequences, e.g. "--rs '\er\en' --fs '\et'". - - To avoid backslashing, you can use any of the following names: - cr crcr newline lf lflf crlf crlfcrlf tab space comma pipe slash colon semicolon equals - * Default separators by format: - File format RS FS PS - gen N/A (N/A) (N/A) - dkvp auto , = - json auto (N/A) (N/A) - nidx auto space (N/A) - csv auto , (N/A) - csvlite auto , (N/A) - markdown auto (N/A) (N/A) - pprint auto space (N/A) - xtab (N/A) auto space +--bz2in Uncompress bzip2 within the Miller process. Done by + default if file ends in `.bz2`. +--gzin Uncompress gzip within the Miller process. Done by + default if file ends in `.gz`. +--prepipe {decompression command} + You can, of course, already do without this for + single input files, e.g. `gunzip < myfile.csv.gz | + mlr ...`. Allowed at the command line, but not in + `.mlrrc` to avoid unexpected code execution. +--prepipe-bz2 Same as `--prepipe bz2`, except this is allowed in + `.mlrrc`. +--prepipe-gunzip Same as `--prepipe gunzip`, except this is allowed in + `.mlrrc`. +--prepipe-zcat Same as `--prepipe zcat`, except this is allowed in + `.mlrrc`. +--prepipex {decompression command} + Like `--prepipe` with one exception: doesn't insert + `<` between command and filename at runtime. Useful + for some commands like `unzip -qc` which don't read + standard input. Allowed at the command line, but not + in `.mlrrc` to avoid unexpected code execution. +--zin Uncompress zlib within the Miller process. Done by + default if file ends in `.z`. .fi .if n \{\ .RE -.SS "CSV-SPECIFIC OPTIONS" +.SH "CSV-ONLY FLAGS" +.sp + .if n \{\ .RS 0 .\} .nf - --implicit-csv-header Use 1,2,3,... as field labels, rather than from line 1 - of input files. Tip: combine with "label" to recreate - missing headers. - --no-implicit-csv-header Do not use --implicit-csv-header. This is the default - anyway -- the main use is for the flags to 'mlr join' if you have - main file(s) which are headerless but you want to join in on - a file which does have a CSV header. Then you could use - 'mlr --csv --implicit-csv-header join --no-implicit-csv-header - -l your-join-in-with-header.csv ... your-headerless.csv' - --allow-ragged-csv-input|--ragged If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line has more - fields than the header line, use integer field labels as in - the implicit-header case. - --headerless-csv-output Print only CSV data lines. - -N Keystroke-saver for --implicit-csv-header --headerless-csv-output. +These are flags which are applicable to CSV format. + +--allow-ragged-csv-input or --ragged + If a data line has fewer fields than the header line, + fill remaining keys with empty string. If a data line + has more fields than the header line, use integer + field labels as in the implicit-header case. +--headerless-csv-output or --ho + Print only CSV data lines; do not print CSV header + lines. +--implicit-csv-header or --headerless-csv-input or --hi + Use 1,2,3,... as field labels, rather than from line + 1 of input files. Tip: combine with `label` to + recreate missing headers. +--no-implicit-csv-header Opposite of `--implicit-csv-header`. This is the + default anyway -- the main use is for the flags to + `mlr join` if you have main file(s) which are + headerless but you want to join in on a file which + does have a CSV header. Then you could use `mlr --csv + --implicit-csv-header join --no-implicit-csv-header + -l your-join-in-with-header.csv ... + your-headerless.csv`. +-N Keystroke-saver for `--implicit-csv-header + --headerless-csv-output`. .fi .if n \{\ .RE -.SS "DOUBLE-QUOTING FOR CSV/CSVLITE OUTPUT" +.SH "FILE-FORMAT FLAGS" +.sp + .if n \{\ .RS 0 .\} .nf - --quote-all Wrap all fields in double quotes - --quote-none Do not wrap any fields in double quotes, even if they have - OFS or ORS in them - --quote-minimal Wrap fields in double quotes only if they have OFS or ORS - in them (default) - --quote-numeric Wrap fields in double quotes only if they have numbers - in them - --quote-original Wrap fields in double quotes if and only if they were - quoted on input. This isn't sticky for computed fields: - e.g. if fields a and b were quoted on input and you do - "put '$c = $a . $b'" then field c won't inherit a or b's - was-quoted-on-input flag. +See the File formats doc page, and or `mlr help file-formats`, for more +about file formats Miller supports. + +Examples: `--csv` for CSV-formatted input and output; `--icsv --opprint` for +CSV-formatted input and pretty-printed output. + +Please use `--iformat1 --oformat2` rather than `--format1 --oformat2`. +The latter sets up input and output flags for `format1`, not all of which +are overridden in all cases by setting output format to `format2`. + +--asv or --asvlite Use ASV format for input and output data. +--csv or -c Use CSV format for input and output data. +--csvlite Use CSV-lite format for input and output data. +--dkvp Use DKVP format for input and output data. +--gen-field-name Specify field name for --igen. Defaults to "i". +--gen-start Specify start value for --igen. Defaults to 1. +--gen-step Specify step value for --igen. Defaults to 1. +--gen-stop Specify stop value for --igen. Defaults to 100. +--iasv or --iasvlite Use ASV format for input data. +--icsv Use CSV format for input data. +--icsvlite Use CSV-lite format for input data. +--idkvp Use DKVP format for input data. +--igen Ignore input files and instead generate sequential + numeric input using --gen-field-name, --gen-start, + --gen-step, and --gen-stop values. See also the + seqgen verb, which is more useful/intuitive. +--ijson Use JSON format for input data. +--inidx Use NIDX format for input data. +--io {format name} Use format name for input and output data. For + example: `--io csv` is the same as `--csv`. +--ipprint Use PPRINT format for input data. +--itsv Use TSV format for input data. +--itsvlite Use TSV-lite format for input data. +--iusv or --iusvlite Use USV format for input data. +--ixtab Use XTAB format for input data. +--json or -j Use JSON format for input and output data. +--nidx Use NIDX format for input and output data. +--oasv or --oasvlite Use ASV format for output data. +--ocsv Use CSV format for output data. +--ocsvlite Use CSV-lite format for output data. +--odkvp Use DKVP format for output data. +--ojson Use JSON format for output data. +--omd Use markdown-tabular format for output data. +--onidx Use NIDX format for output data. +--opprint Use PPRINT format for output data. +--otsv Use TSV format for output data. +--otsvlite Use TSV-lite format for output data. +--ousv or --ousvlite Use USV format for output data. +--oxtab Use XTAB format for output data. +--pprint Use PPRINT format for input and output data. +--tsv Use TSV format for input and output data. +--tsvlite or -t Use TSV-lite format for input and output data. +--usv or --usvlite Use USV format for input and output data. +--xtab Use XTAB format for input and output data. +-i {format name} Use format name for input data. For example: `-i csv` + is the same as `--icsv`. +-o {format name} Use format name for output data. For example: `-o + csv` is the same as `--ocsv`. .fi .if n \{\ .RE -.SS "NUMERICAL FORMATTING" +.SH "FLATTEN-UNFLATTEN FLAGS" +.sp + .if n \{\ .RS 0 .\} .nf - --ofmt {format} E.g. %.18lf, %.0lf. Please use sprintf-style codes for - double-precision. Applies to verbs which compute new - values, e.g. put, stats1, stats2. See also the fmtnum - function within mlr put (mlr --help-all-functions). - Defaults to %lf. +These flags control how Miller converts record values which are maps or arrays, when input is JSON and ouput is non-JSON (flattening) or input is non-JSON and output is JSON (unflattening). + +See the Flatten/unflatten doc page for more information. + +--flatsep or --jflatsep {string} + Separator for flattening multi-level JSON keys, e.g. + `{"a":{"b":3}}` becomes `a:b => 3` for non-JSON + formats. Defaults to `.`. +--no-auto-flatten When output is non-JSON, suppress the default + auto-flatten behavior. Default: if `$y = [7,8,9]` + then this flattens to `y.1=7,y.2=8,y.3=9, and + similarly for maps. With `--no-auto-flatten`, instead + we get `$y=[1, 2, 3]`. +--no-auto-unflatten When input non-JSON and output is JSON, suppress the + default auto-unflatten behavior. Default: if the + input has `y.1=7,y.2=8,y.3=9` then this unflattens to + `$y=[7,8,9]`. flattens to `y.1=7,y.2=8,y.3=9. With + `--no-auto-flatten`, instead we get + `${y.1}=7,${y.2}=8,${y.3}=9`. +--xvright Right-justify values for XTAB format. .fi .if n \{\ .RE -.SS "OTHER OPTIONS" +.SH "FORMAT-CONVERSION KEYSTROKE-SAVER FLAGS" +.sp + .if n \{\ .RS 0 .\} .nf - --seed {n} with n of the form 12345678 or 0xcafefeed. For put/filter - urand()/urandint()/urand32(). - --nr-progress-mod {m}, with m a positive integer: print filename and record - count to stderr every m input records. - --from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. Example: - "mlr --from a.dat --from b.dat cat" is the same as - "mlr cat a.dat b.dat". - -n Process no input files, nor standard input either. Useful - for mlr put with begin/end statements only. (Same as --from - /dev/null.) Also useful in "mlr -n put -v '...'" for - analyzing abstract syntax trees (if that's your thing). - -I Process files in-place. For each file name on the command - line, output is written to a temp file in the same - directory, which is then renamed over the original. Each - file is processed in isolation: if the output format is - CSV, CSV headers will be present in each output file; - statistics are only over each file's own records; and so on. +As keystroke-savers for format-conversion you may use the following. +The letters c, t, j, d, n, x, p, and m refer to formats CSV, TSV, DKVP, NIDX, +JSON, XTAB, PPRINT, and markdown, respectively. Note that markdown format is +available for output only. + +| In\eout | CSV | TSV | JSON | DKVP | NIDX | XTAB | PPRINT | Markdown | ++--------+-------+-------+--------+--------+--------+--------+--------+----------+ +| CSV | | --c2t | --c2j | --c2d | --c2n | --c2x | --c2p | --c2m | +| TSV | --t2c | | --t2j | --t2d | --t2n | --t2x | --t2p | --t2m | +| JSON | --j2c | --j2t | | --j2d | --j2n | --j2x | --j2p | --j2m | +| DKVP | --d2c | --d2t | --d2j | | --d2n | --d2x | --d2p | --d2m | +| NIDX | --n2c | --n2t | --n2j | --n2d | | --n2x | --n2p | --n2m | +| XTAB | --x2c | --x2t | --x2j | --x2d | --x2n | | --x2p | --x2m | +| PPRINT | --p2c | --p2t | --p2j | --p2d | --p2n | --p2x | | --p2m | + +-p Keystroke-saver for `--nidx --fs space --repifs`. +-T Keystroke-saver for `--nidx --fs tab`. .fi .if n \{\ .RE -.SS "THEN-CHAINING" +.SH "JSON-ONLY FLAGS" +.sp + .if n \{\ .RS 0 .\} .nf -Output of one verb may be chained as input to another using "then", e.g. - mlr stats1 -a min,mean,max -f flag,u,v -g color then sort -f color +These are flags which are applicable to JSON format. + +--jlistwrap or --jl Wrap JSON output in outermost `[ ]`. +--jvstack Put one key-value pair per line for JSON output + (multi-line output). +--no-jvstack Put objects/arrays all on one line for JSON output. .fi .if n \{\ .RE -.SS "AUXILIARY COMMANDS" +.SH "LEGACY FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +These are flags which don't do anything in the current Miller version. +They are accepted as no-op flags in order to keep old scripts from breaking. + +--jknquoteint Type information from JSON input files is now + preserved throughout the processing stream. +--jquoteall Type information from JSON input files is now + preserved throughout the processing stream. +--json-fatal-arrays-on-input + Miller now supports arrays as of version 6. +--json-map-arrays-on-input + Miller now supports arrays as of version 6. +--json-skip-arrays-on-input + Miller now supports arrays as of version 6. +--jsonx The `--jvstack` flag is now default true in Miller 6. +--jvquoteall Type information from JSON input files is now + preserved throughout the processing stream. +--mmap Miller no longer uses memory-mapping to access data + files. +--no-fflush The current implementation of Miller does not use + buffered output, so there is no longer anything to + suppress here. +--no-mmap Miller no longer uses memory-mapping to access data + files. +--ojsonx The `--jvstack` flag is now default true in Miller 6. +--quote-all Ignored as of version 6. Types are inferred/retained + through the processing flow now. +--quote-minimal Ignored as of version 6. Types are inferred/retained + through the processing flow now. +--quote-none Ignored as of version 6. Types are inferred/retained + through the processing flow now. +--quote-numeric Ignored as of version 6. Types are inferred/retained + through the processing flow now. +--quote-original Ignored as of version 6. Types are inferred/retained + through the processing flow now. +--vflatsep Ignored as of version 6. This functionality is + subsumed into JSON formatting. +.fi +.if n \{\ +.RE +.SH "MISCELLANEOUS FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +These are flags which don't fit into any other category. +--from {filename} Use this to specify an input file before the verb(s), + rather than after. May be used more than once. + Example: `mlr --from a.dat --from b.dat cat` is the + same as `mlr cat a.dat b.dat`. +--infer-int-as-float or -A + Cast all integers in data files to floats. +--infer-no-octal or -O Treat numbers like 0123 in data files as string + "0123", not octal for decimal 83 etc. +--infer-none or -S Don't treat values like 123 or 456.7 in data files as + int/float; leave them as strings. +--load {filename} Load DSL script file for all put/filter operations on + the command line. If the name following `--load` is a + directory, load all `*.mlr` files in that directory. + This is just like `put -f` and `filter -f` except + it's up-front on the command line, so you can do + something like `alias mlr='mlr --load ~/myscripts'` + if you like. +--mfrom {filenames} Use this to specify one of more input files before + the verb(s), rather than after. May be used more than + once. The list of filename must end with `--`. This + is useful for example since `--from *.csv` doesn't do + what you might hope but `--mfrom *.csv --` does. +--mload {filenames} Like `--load` but works with more than one filename, + e.g. `--mload *.mlr --`. +--nr-progress-mod {m} With m a positive integer: print filename and record + count to os.Stderr every m input records. +--ofmt {format} E.g. `%.18f`, `%.0f`, `%9.6e`. Please use + sprintf-style codes for floating-point nummbers. If + not specified, default formatting is used. See also + the `fmtnum` function and the `format-values` verb. +--seed {n} with `n` of the form `12345678` or `0xcafefeed`. For + `put`/`filter` `urand`, `urandint`, and `urand32`. +--tz {timezone} Specify timezone, overriding `$TZ` environment + variable (if any). +-I Process files in-place. For each file name on the + command line, output is written to a temp file in the + same directory, which is then renamed over the + original. Each file is processed in isolation: if the + output format is CSV, CSV headers will be present in + each output file, statistics are only over each + file's own records; and so on. +-n Process no input files, nor standard input either. + Useful for `mlr put` with `begin`/`end` statements + only. (Same as `--from /dev/null`.) Also useful in + `mlr -n put -v '...'` for analyzing abstract syntax + trees (if that's your thing). +.fi +.if n \{\ +.RE +.SH "OUTPUT-COLORIZATION FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +Miller uses colors to highlight outputs. You can specify color preferences. +Note: output colorization does not work on Windows. + +Things having colors: + +* Keys in CSV header lines, JSON keys, etc +* Values in CSV data lines, JSON scalar values, etc in regression-test output +* Some online-help strings + +Rules for coloring: + +* By default, colorize output only if writing to stdout and stdout is a TTY. + * Example: color: `mlr --csv cat foo.csv` + * Example: no color: `mlr --csv cat foo.csv > bar.csv` + * Example: no color: `mlr --csv cat foo.csv | less` +* The default colors were chosen since they look OK with white or black + terminal background, and are differentiable with common varieties of human + color vision. + +Mechanisms for coloring: + +* Miller uses ANSI escape sequences only. This does not work on Windows + except within Cygwin. +* Requires `TERM` environment variable to be set to non-empty string. +* Doesn't try to check to see whether the terminal is capable of 256-color + ANSI vs 16-color ANSI. Note that if colors are in the range 0..15 + then 16-color ANSI escapes are used, so this is in the user's control. + +How you can control colorization: + +* Suppression/unsuppression: + * Environment variable `export MLR_NO_COLOR=true` means don't color + even if stdout+TTY. + * Environment variable `export MLR_ALWAYS_COLOR=true` means do color + even if not stdout+TTY. + For example, you might want to use this when piping mlr output to `less -r`. + * Command-line flags `--no-color` or `-M`, `--always-color` or `-C`. + +* Color choices can be specified by using environment variables, or command-line + flags, with values 0..255: + * `export MLR_KEY_COLOR=208`, `MLR_VALUE_COLOR=33`, etc.: + `MLR_KEY_COLOR` `MLR_VALUE_COLOR` `MLR_PASS_COLOR` `MLR_FAIL_COLOR` + `MLR_REPL_PS1_COLOR` `MLR_REPL_PS2_COLOR` `MLR_HELP_COLOR` + * Command-line flags `--key-color 208`, `--value-color 33`, etc.: + `--key-color` `--value-color` `--pass-color` `--fail-color` + `--repl-ps1-color` `--repl-ps2-color` `--help-color` + * This is particularly useful if your terminal's background color clashes + with current settings. + +If environment-variable settings and command-line flags are both provided, the +latter take precedence. + +Please do mlr `--list-color-codes` to see the available color codes (like 170), +and `mlr --list-color-names` to see available names (like `orchid`). + +--always-color or -C Instructs Miller to colorize output even when it + normally would not. Useful for piping output to `less + -r`. +--fail-color Specify the color (see `--list-color-codes` and + `--list-color-names`) for failing cases in `mlr + regtest`. +--help-color Specify the color (see `--list-color-codes` and + `--list-color-names`) for highlights in `mlr help` + output. +--key-color Specify the color (see `--list-color-codes` and + `--list-color-names`) for record keys. +--list-color-codes Show the available color codes in the range 0..255, + such as 170 for example. +--list-color-names Show the names for the available color codes, such as + `orchid` for example. +--no-color or -M Instructs Miller to not colorize any output. +--pass-color Specify the color (see `--list-color-codes` and + `--list-color-names`) for passing cases in `mlr + regtest`. +--value-color Specify the color (see `--list-color-codes` and + `--list-color-names`) for record values. +.fi +.if n \{\ +.RE +.SH "PPRINT-ONLY FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +These are flags which are applicable to PPRINT output format. + +--barred Prints a border around PPRINT output (not available + for input). +--right Right-justifies all fields for PPRINT output. +.fi +.if n \{\ +.RE +.SH "SEPARATOR FLAGS" +.sp + +.if n \{\ +.RS 0 +.\} +.nf +See the Separators doc page for more about record separators, field +separators, and pair separators. Also see the File formats doc page, or +`mlr help file-formats`, for more about the file formats Miller supports. + +In brief: + +* For DKVP records like `x=1,y=2,z=3`, the fields are separated by a comma, + the key-value pairs are separated by a comma, and each record is separated + from the next by a newline. +* Each file format has its own default separators. +* Most formats, such as CSV, don't support pair-separators: keys are on the CSV + header line and values are on each CSV data line; keys and values are not + placed next to one another. +* Some separators are not programmable: for example JSON uses a colon as a + pair separator but this is non-modifiable in the JSON spec. +* You can set separators differently between Miller's input and output -- + hence `--ifs` and `--ofs`, etc. + +Notes about line endings: + +* Default line endings (`--irs` and `--ors`) are newline + which is interpreted to accept carriage-return/newline files (e.g. on Windows) + for input, and to produce platform-appropriate line endings on output. + +Notes about all other separators: + +* IPS/OPS are only used for DKVP and XTAB formats, since only in these formats + do key-value pairs appear juxtaposed. +* IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; + XTAB records are separated by two or more consecutive IFS/OFS -- i.e. + a blank line. Everything above about `--irs/--ors/--rs auto` becomes `--ifs/--ofs/--fs` + auto for XTAB format. (XTAB's default IFS/OFS are "auto".) +* OFS must be single-character for PPRINT format. This is because it is used + with repetition for alignment; multi-character separators would make + alignment impossible. +* OPS may be multi-character for XTAB format, in which case alignment is + disabled. +* TSV is simply CSV using tab as field separator (`--fs tab`). +* FS/PS are ignored for markdown format; RS is used. +* All FS and PS options are ignored for JSON format, since they are not relevant + to the JSON format. +* You can specify separators in any of the following ways, shown by example: + - Type them out, quoting as necessary for shell escapes, e.g. + `--fs '|' --ips :` + - C-style escape sequences, e.g. `--rs '\er\en' --fs '\et'`. + - To avoid backslashing, you can use any of the following names: + + ascii_esc = "\ex1b" + ascii_etx = "\ex04" + ascii_fs = "\ex1c" + ascii_gs = "\ex1d" + ascii_null = "\ex01" + ascii_rs = "\ex1e" + ascii_soh = "\ex02" + ascii_stx = "\ex03" + ascii_us = "\ex1f" + asv_fs = "\ex1f" + asv_rs = "\ex1e" + colon = ":" + comma = "," + cr = "\er" + crcr = "\er\er" + crlf = "\er\en" + crlfcrlf = "\er\en\er\en" + equals = "=" + lf = "\en" + lflf = "\en\en" + newline = "\en" + pipe = "|" + semicolon = ";" + slash = "/" + space = " " + spaces = "( )+" + tab = "\et" + tabs = "(\et)+" + usv_fs = "\exe2\ex90\ex9f" + usv_rs = "\exe2\ex90\ex9e" + whitespace = "([ \et])+" + +* Default separators by format: + + Format FS PS RS + csv "," N/A "\en" + csvlite "," N/A "\en" + dkvp "," "=" "\en" + json N/A N/A N/A + markdown " " N/A "\en" + nidx " " N/A "\en" + pprint " " N/A "\en" + xtab "\en" " " "\en\en" + +--fs {string} Specify FS for input and output. +--ifs {string} Specify FS for input. +--ips {string} Specify PS for input. +--irs {string} Specify RS for input. +--no-ifs-regex Don't treat IFS value as a regular expression. Useful + if your IFS is ".". +--no-ips-regex Don't treat IPS value as a regular expression. Useful + if your IPS is ".". +--ofs {string} Specify FS for output. +--ops {string} Specify PS for output. +--ors {string} Specify RS for output. +--ps {string} Specify PS for input and output. +--repifs Let IFS be repeated: e.g. for splitting on multiple + spaces. +--rs {string} Specify RS for input and output. +.fi +.if n \{\ +.RE +.SH "AUXILIARY COMMANDS" .if n \{\ .RS 0 .\} .nf -Miller has a few otherwise-standalone executables packaged within it. -They do not participate in any other parts of Miller. Available subcommands: aux-list + hex lecat termcvt - hex unhex - netbsd-strptime -For more information, please invoke mlr {subcommand} --help + help + regtest + repl +For more information, please invoke mlr {subcommand} --help. .fi .if n \{\ .RE @@ -564,7 +887,43 @@ How to specify location of .mlrrc: (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) See also: -https://johnkerl.org/miller/doc/customization.html +https://miller.readthedocs.io/en/latest/customization.html +.fi +.if n \{\ +.RE +.SH "REPL" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr repl [options] {zero or more data-file names} +-v Prints the expressions's AST (abstract syntax tree), which gives + full transparency on the precedence and associativity rules of + Miller's grammar, to stdout. + +-d Like -v but uses a parenthesized-expression format for the AST. + +-D Like -d but with output all on one line. + +-w Show warnings about uninitialized variables + +-q Don't show startup banner + +-s Don't show prompts + +--load {DSL script file} Load script file before presenting the prompt. + If the name following --load is a directory, load all "*.mlr" files + in that directory. + +--mload {DSL script files} -- Like --load but works with more than one filename, + e.g. '--mload *.mlr --'. + +-h|--help Show this message. + +Or any --icsv, --ojson, etc. reader/writer options as for the main Miller command line. + +Any data-file names are opened just as if you had waited and typed :open {filenames} +at the Miller REPL prompt. .fi .if n \{\ .RE @@ -576,8 +935,10 @@ https://johnkerl.org/miller/doc/customization.html .RS 0 .\} .nf -Usage: mlr altkv [no options] +Usage: mlr altkv [options] Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -591,14 +952,17 @@ Replaces a numeric field with a number of asterisks, allowing for cheesy bar plots. These align best with --opprint or --oxtab output format. Options: -f {a,b,c} Field names to convert to bars. --c {character} Fill character: default '*'. --x {character} Out-of-bounds character: default '#'. --b {character} Blank character: default '.'. --lo {lo} Lower-limit value for min-width bar: default '0.000000'. --hi {hi} Upper-limit value for max-width bar: default '100.000000'. -w {n} Bar-field width: default '40'. --auto Automatically computes limits, ignoring --lo and --hi. Holds all records in memory before producing any output. +-c {character} Fill character: default '*'. +-x {character} Out-of-bounds character: default '#'. +-b {character} Blank character: default '.'. +Nominally the fill, out-of-bounds, and blank characters will be strings of length 1. +However you can make them all longer if you so desire. +-h|--help Show this message. .fi .if n \{\ .RE @@ -609,10 +973,11 @@ Options: .nf Usage: mlr bootstrap [options] Emits an n-sample, with replacement, of the input records. -Options: --n {number} Number of samples to output. Defaults to number of input records. - Must be non-negative. See also mlr sample and mlr shuffle. +Options: + -n Number of samples to output. Defaults to number of input records. + Must be non-negative. +-h|--help Show this message. .fi .if n \{\ .RE @@ -624,11 +989,10 @@ See also mlr sample and mlr shuffle. Usage: mlr cat [options] Passes input records directly to output. Most useful for format conversion. Options: --n Prepend field "n" to each record with record-counter starting at 1 --g {comma-separated field name(s)} When used with -n/-N, writes record-counters - keyed by specified field name(s). --v Write a low-level record-structure dump to stderr. --N {name} Prepend field {name} to each record with record-counter starting at 1 +-n Prepend field "n" to each record with record-counter starting at 1. +-N {name} Prepend field {name} to each record with record-counter starting at 1. +-g {a,b,c} Optional group-by-field names for counters, e.g. a,b,c +-h|--help Show this message. .fi .if n \{\ .RE @@ -637,9 +1001,11 @@ Options: .RS 0 .\} .nf -Usage: mlr check +Usage: mlr check [options] Consumes records without printing any output. Useful for doing a well-formatted check on input data. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -649,7 +1015,7 @@ Useful for doing a well-formatted check on input data. .\} .nf Usage: mlr clean-whitespace [options] -For each record, for each field in the record, whitespace-cleans the keys and +For each record, for each field in the record, whitespace-cleans the keys and/or values. Whitespace-cleaning entails stripping leading and trailing whitespace, and replacing multiple whitespace with singles. For finer-grained control, please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, @@ -660,21 +1026,7 @@ Options: -v|--values-only Do not touch keys. It is an error to specify -k as well as -v -- to clean keys and values, leave off -k as well as -v. -.fi -.if n \{\ -.RE -.SS "count" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count [options] -Prints number of records, optionally grouped by distinct values for specified field names. - -Options: --g {a,b,c} Field names for distinct count. --n Show only the number of distinct values. Not interesting without -g. --o {name} Field name for output count. Default "count". +-h|--help Show this message. .fi .if n \{\ .RE @@ -700,17 +1052,33 @@ Options: .fi .if n \{\ .RE +.SS "count" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr count [options] +Prints number of records, optionally grouped by distinct values for specified field names. +Options: +-g {a,b,c} Optional group-by-field names for counts, e.g. a,b,c +-n {n} Show only the number of distinct values. Not interesting without -g. +-o {name} Field name for output-count. Default "count". +-h|--help Show this message. +.fi +.if n \{\ +.RE .SS "count-similar" .if n \{\ .RS 0 .\} .nf Usage: mlr count-similar [options] -Ingests all records, then emits each record augmented by a count of +Ingests all records, then emits each record augmented by a count of the number of other records having the same group-by field values. Options: --g {d,e,f} Group-by-field names for counts. --o {name} Field name for output count. Default "count". +-g {a,b,c} Group-by-field names for counts, e.g. a,b,c +-o {name} Field name for output-counts. Defaults to "count". +-h|--help Show this message. .fi .if n \{\ .RE @@ -721,14 +1089,16 @@ Options: .nf Usage: mlr cut [options] Passes through input records with specified fields included/excluded. --f {a,b,c} Field names to include for cut. --o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. --x|--complement Exclude, rather than include, field names specified by -f. --r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. +Options: + -f {a,b,c} Comma-separated field names for cut, e.g. a,b,c. + -o Retain fields in the order specified here in the argument list. + Default is to retain them in the order found in the input data. + -x|--complement Exclude, rather than include, field names specified by -f. + -r Treat field names as regular expressions. "ab", "a.*b" will + match any field name containing the substring "ab" or matching + "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may + be used. The -o flag is ignored when -r is present. +-h|--help Show this message. Examples: mlr cut -f hostname,status mlr cut -x -f hostname,status @@ -744,11 +1114,13 @@ Examples: .\} .nf Usage: mlr decimate [options] --n {count} Decimation factor; default 10 --b Decimate by printing first of every n. --e Decimate by printing last of every n (default). --g {a,b,c} Optional group-by-field names for decimate counts Passes through one of every n records, optionally by category. +Options: + -b Decimate by printing first of every n. + -e Decimate by printing last of every n (default). + -g {a,b,c} Optional group-by-field names for decimate counts, e.g. a,b,c. + -n {n} Decimation factor (default 10). +-h|--help Show this message. .fi .if n \{\ .RE @@ -779,7 +1151,7 @@ Options: .RS 0 .\} .nf -Usage: mlr fill-empty +Usage: mlr fill-empty [options] Fills empty-string fields with specified fill-value. Options: -v {string} Fill-value: defaults to "N/A" @@ -791,88 +1163,104 @@ Options: .RS 0 .\} .nf -Usage: mlr filter [options] {expression} -Prints records for which {expression} evaluates to true. -If there are multiple semicolon-delimited expressions, all of them are -evaluated and the last one is used as the filter criterion. +Usage: mlr filter [options] {DSL expression} +Options: +-f {file name} File containing a DSL expression (see examples below). If the filename + is a directory, all *.mlr files in that directory are loaded. -Conversion options: --S: Keeps field values as strings with no type inference to int or float. --F: Keeps field values as strings or floats with no inference to int. -All field values are type-inferred to int/float/string unless this behavior is -suppressed with -S or -F. +-e {expression} You can use this after -f to add an expression. Example use + case: define functions/subroutines in a file you specify with -f, then call + them with an expression you specify with -e. -Output/formatting options: ---oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". ---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. ---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. ---no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - -Expression-specification options: --f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) --e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) --s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr filter put -s foo=97 '$column += @foo' is like - mlr filter put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. +-s name=value: Predefines out-of-stream variable @name to have + Thus mlr put -s foo=97 '$column += @foo' is like + mlr put 'begin {@foo = 97} $column += @foo'. + The value part is subject to type-inferencing. May be specified more than once, e.g. -s name1=value1 -s name2=value2. Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE -Tracing options: --v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. --a: Prints a low-level stack-allocation trace to stdout. --t: Prints a low-level parser trace to stderr. --T: Prints a every statement to stderr as it is executed. +-x (default false) Prints records for which {expression} evaluates to false, not true, + i.e. invert the sense of the filter expression. -Other options: --x: Prints records for which {expression} evaluates to false. +-q Does not include the modified record in the output stream. + Useful for when all desired output is in begin and/or end blocks. -Please use a dollar sign for field names and double-quotes for string -literals. If field names have special characters such as "." then you might -use braces, e.g. '${field.name}'. Miller built-in variables are -NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment -variables. The environment-variable name may be an expression, e.g. a field -value. +-S and -F: There are no-ops in Miller 6 and above, since now type-inferencing is done + by the record-readers before filter/put is executed. Supported as no-op pass-through + flags for backward compatibility. -Use # to comment to end of line. +-h|--help Show this message. + +Parser-info options: + +-w Print warnings about things like uninitialized variables. + +-W Same as -w, but exit the process if there are any warnings. + +-p Prints the expressions's AST (abstract syntax tree), which gives full + transparency on the precedence and associativity rules of Miller's grammar, + to stdout. + +-d Like -p but uses a parenthesized-expression format for the AST. + +-D Like -d but with output all on one line. + +-E Echo DSL expression before printing parse-tree + +-v Same as -E -p. + +-X Exit after parsing but before stream-processing. Useful with -v/-d/-D, if you + only want to look at parser information. + +Records will pass the filter depending on the last bare-boolean statement in +the DSL expression. That can be the result of <, ==, >, etc., the return value of a function call +which returns boolean, etc. Examples: - mlr filter 'log10($count) > 4.0' - mlr filter 'FNR == 2' (second record in each file) - mlr filter 'urand() < 0.001' (subsampling) - mlr filter '$color != "blue" && $value > 4.2' - mlr filter '($x<.5 && $y<.5) || ($x>.5 && $y>.5)' - mlr filter '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - mlr filter '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - mlr filter ' - NR == 1 || - #NR == 2 || - NR == 3 - ' + mlr --csv --from example.csv filter '$color == "red"' + mlr --csv --from example.csv filter '$color == "red" && flag == true' +More example filter expressions: + First record in each file: + 'FNR == 1' + Subsampling: + 'urand() < 0.001' + Compound booleans: + '$color != "blue" && $value > 4.2' + '($x < 0.5 && $y < 0.5) || ($x > 0.5 && $y > 0.5)' + Regexes with case-insensitive flag + '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' + Assignments, then bare-boolean filter statement: + '$ab = $a+$b; $cd = $c+$d; $ab != $cd' + Bare-boolean filter statement within a conditional: + 'if (NR < 100) { + $x > 0.3; + } else { + $x > 0.002; + } + ' + Using 'any' higher-order function to see if $index is 10, 20, or 30: + 'any([10,20,30], func(e) {return $index == e})' -Please see https://miller.readthedocs.io/en/latest/reference.html for more information -including function list. Or "mlr -f". Please also see "mlr grep" which is -useful when you don't yet know which field name(s) you're looking for. -Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#filter +See also https://johnkerl.org/miller6/reference-dsl for more context. +.fi +.if n \{\ +.RE +.SS "flatten" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr flatten [options] +Flattens multi-level maps to single-level ones. Example: field with name 'a' +and value '{"b": { "c": 4 }}' becomes name 'a.b.c' and value 4. +Options: +-f Comma-separated list of field names to flatten (default all). +-s Separator, defaulting to mlr --flatsep value. +-h|--help Show this message. .fi .if n \{\ .RE @@ -894,12 +1282,12 @@ Note: this verb lets you apply arbitrary format strings, which can produce undefined behavior and/or program crashes. See your system's "man printf". Options: --i {integer format} Defaults to "%lld". +-i {integer format} Defaults to "%d". Examples: "%06lld", "%08llx". Note that Miller integers are long long so you must use formats which apply to long long, e.g. with ll in them. Undefined behavior results otherwise. --f {float format} Defaults to "%lf". +-f {float format} Defaults to "%f". Examples: "%8.3lf", "%.6le". Note that Miller floats are double-precision so you must use formats which apply to double, e.g. with l[efg] in them. @@ -941,16 +1329,34 @@ Options: .fi .if n \{\ .RE +.SS "gap" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr gap [options] +Emits an empty record every n records, or when certain values change. +Options: +Emits an empty record every n records, or when certain values change. +-g {a,b,c} Print a gap whenever values of these fields (e.g. a,b,c) changes. +-n {n} Print a gap every n records. +One of -f or -g is required. +-n is ignored if -g is present. +-h|--help Show this message. +.fi +.if n \{\ +.RE .SS "grep" .if n \{\ .RS 0 .\} .nf Usage: mlr grep [options] {regular expression} -Passes through records which match {regex}. +Passes through records which match the regular expression. Options: --i Use case-insensitive search. --v Invert: pass through records which do not match the regex. +-i Use case-insensitive search. +-v Invert: pass through records which do not match the regex. +-h|--help Show this message. Note that "mlr filter" is more powerful, but requires you to know field names. By contrast, "mlr grep" allows you to regex-match the entire record. It does this by formatting each record in memory as DKVP, using command-line-specified @@ -970,8 +1376,9 @@ features of system grep, you can do .RS 0 .\} .nf -Usage: mlr group-by {comma-separated field names} -Outputs records in batches having identical values at specified field names. +Usage: mlr group-by [options] {comma-separated field names} +Outputs records in batches having identical values at specified field names.Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -980,8 +1387,10 @@ Outputs records in batches having identical values at specified field names. .RS 0 .\} .nf -Usage: mlr group-like +Usage: mlr group-like [options] Outputs records in batches having identical field names. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1013,11 +1422,12 @@ Examples: .\} .nf Usage: mlr head [options] --n {count} Head count to print; default 10 --g {a,b,c} Optional group-by-field names for head counts Passes through the first n records, optionally by category. -Without -g, ceases consuming more input (i.e. is fast) when n -records have been read. +Without -g, ceases consuming more input (i.e. is fast) when n records have been read. +Options: +-g {a,b,c} Optional group-by-field names for head counts, e.g. a,b,c. +-n {n} Head-count to print. Default 10. +-h|--help Show this message. .fi .if n \{\ .RE @@ -1026,15 +1436,44 @@ records have been read. .RS 0 .\} .nf +Just a histogram. Input values < lo or > hi are not counted. Usage: mlr histogram [options] -f {a,b,c} Value-field names for histogram counts --lo {lo} Histogram low value --hi {hi} Histogram high value ---nbins {n} Number of histogram bins +--nbins {n} Number of histogram bins. Defaults to 20. --auto Automatically computes limits, ignoring --lo and --hi. Holds all values in memory before producing any output. -o {prefix} Prefix for output field name. Default: no prefix. -Just a histogram. Input values < lo or > hi are not counted. +-h|--help Show this message. +.fi +.if n \{\ +.RE +.SS "json-parse" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr json-parse [options] +Tries to convert string field values to parsed JSON, e.g. "[1,2,3]" -> [1,2,3]. +Options: +-f {...} Comma-separated list of field names to json-parse (default all). +-h|--help Show this message. +.fi +.if n \{\ +.RE +.SS "json-stringify" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr json-stringify [options] +Produces string field values from field-value data, e.g. [1,2,3] -> "[1,2,3]". +Options: +-f {...} Comma-separated list of field names to json-parse (default all). +--jvstack Produce multi-line JSON output. +--no-jvstack Produce single-line JSON output per record (default). +-h|--help Show this message. .fi .if n \{\ .RE @@ -1071,6 +1510,7 @@ Options: --prepipe {command} As in main input options; see mlr --help for details. If you wish to use a prepipe command for the main input as well as here, it must be specified there as well as here. + --prepipex {command} Likewise. File-format options default to those for the right file names on the Miller argument list, but may be overridden for the left file as follows. Please see the main "mlr --help" for more information on syntax for these arguments: @@ -1097,14 +1537,14 @@ including examples. .RS 0 .\} .nf -Usage: mlr label {new1,new2,new3,...} +Usage: mlr label [options] {new1,new2,new3,...} Given n comma-separated names, renames the first n fields of each record to have the respective name. (Fields past the nth are left with their original names.) Particularly useful with --inidx or --implicit-csv-header, to give useful names to otherwise integer-indexed fields. -Examples: - "echo 'a b c d' | mlr --inidx --odkvp cat" gives "1=a,2=b,3=c,4=d" - "echo 'a b c d' | mlr --inidx --odkvp label s,t" gives "s=a,t=b,3=c,4=d" + +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1135,18 +1575,18 @@ Computes univariate statistics for each input record, accumulated across specified fields. Options: -a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields + count Count instances of fields + mode Find most-frequently-occurring values for fields; first-found wins tie + antimode Find least-frequently-occurring values for fields; first-found wins tie + sum Compute sums of specified fields + mean Compute averages (sample means) of specified fields + var Compute sample variance of specified fields + stddev Compute sample standard deviation of specified fields + meaneb Estimate error bars for averages (assuming no sample autocorrelation) + skewness Compute sample skewness of specified fields + kurtosis Compute sample kurtosis of specified fields + min Compute minimum values of specified fields + max Compute maximum values of specified fields -f {a,b,c} Value-field names on which to compute statistics. Requires -o. -r {a,b,c} Regular expressions for value-field names on which to compute statistics. Requires -o. @@ -1158,7 +1598,6 @@ Options: -o {name} Output field basename for -f/-r. -k Keep the input fields which contributed to the output statistics; the default is to omit them. --F Computes integerable things (e.g. count) in floating point. String-valued data make sense unless arithmetic on them is required, e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, @@ -1254,9 +1693,11 @@ See also mlr reshape. .RS 0 .\} .nf -Usage: mlr nothing +Usage: mlr nothing [options] Drops all input records. Useful for testing, or after tee/print/etc. have produced other output. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1265,99 +1706,84 @@ produced other output. .RS 0 .\} .nf -Usage: mlr put [options] {expression} -Adds/updates specified field(s). Expressions are semicolon-separated and must -either be assignments, or evaluate to boolean. Booleans with following -statements in curly braces control whether those statements are executed; -booleans without following curly braces do nothing except side effects (e.g. -regex-captures into \e1, \e2, etc.). +Usage: mlr put [options] {DSL expression} +Options: +-f {file name} File containing a DSL expression (see examples below). If the filename + is a directory, all *.mlr files in that directory are loaded. -Conversion options: --S: Keeps field values as strings with no type inference to int or float. --F: Keeps field values as strings or floats with no inference to int. -All field values are type-inferred to int/float/string unless this behavior is -suppressed with -S or -F. +-e {expression} You can use this after -f to add an expression. Example use + case: define functions/subroutines in a file you specify with -f, then call + them with an expression you specify with -e. -Output/formatting options: ---oflatsep {string}: Separator to use when flattening multi-level @-variables - to output records for emit. Default ":". ---jknquoteint: For dump output (JSON-formatted), do not quote map keys if non-string. ---jvquoteall: For dump output (JSON-formatted), quote map values even if non-string. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint ... then put --ojson 'tee > "mytap-".$a.".dat", $*' then ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. ---no-fflush: for emit, tee, print, and dump, don't call fflush() after every - record. - -Expression-specification options: --f {filename}: the DSL expression is taken from the specified file rather - than from the command line. Outer single quotes wrapping the expression - should not be placed in the file. If -f is specified more than once, - all input files specified using -f are concatenated to produce the expression. - (For example, you can define functions in one file and call them from another.) --e {expression}: You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. (If you mix -e and -f then the expressions are evaluated in the order encountered. Since the expression pieces are simply concatenated, please be sure to use intervening semicolons to separate expressions.) --s name=value: Predefines out-of-stream variable @name to have value "value". - Thus mlr put put -s foo=97 '$column += @foo' is like - mlr put put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing as specified by -S/-F. +-s name=value: Predefines out-of-stream variable @name to have + Thus mlr put -s foo=97 '$column += @foo' is like + mlr put 'begin {@foo = 97} $column += @foo'. + The value part is subject to type-inferencing. May be specified more than once, e.g. -s name1=value1 -s name2=value2. Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE -Tracing options: --v: Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. --a: Prints a low-level stack-allocation trace to stdout. --t: Prints a low-level parser trace to stderr. --T: Prints a every statement to stderr as it is executed. +-x (default false) Prints records for which {expression} evaluates to false, not true, + i.e. invert the sense of the filter expression. -Other options: --q: Does not include the modified record in the output stream. Useful for when - all desired output is in begin and/or end blocks. +-q Does not include the modified record in the output stream. + Useful for when all desired output is in begin and/or end blocks. -Please use a dollar sign for field names and double-quotes for string -literals. If field names have special characters such as "." then you might -use braces, e.g. '${field.name}'. Miller built-in variables are -NF NR FNR FILENUM FILENAME M_PI M_E, and ENV["namegoeshere"] to access environment -variables. The environment-variable name may be an expression, e.g. a field -value. +-S and -F: There are no-ops in Miller 6 and above, since now type-inferencing is done + by the record-readers before filter/put is executed. Supported as no-op pass-through + flags for backward compatibility. -Use # to comment to end of line. +-h|--help Show this message. + +Parser-info options: + +-w Print warnings about things like uninitialized variables. + +-W Same as -w, but exit the process if there are any warnings. + +-p Prints the expressions's AST (abstract syntax tree), which gives full + transparency on the precedence and associativity rules of Miller's grammar, + to stdout. + +-d Like -p but uses a parenthesized-expression format for the AST. + +-D Like -d but with output all on one line. + +-E Echo DSL expression before printing parse-tree + +-v Same as -E -p. + +-X Exit after parsing but before stream-processing. Useful with -v/-d/-D, if you + only want to look at parser information. Examples: - mlr put '$y = log10($x); $z = sqrt($y)' - mlr put '$x>0.0 { $y=log10($x); $z=sqrt($y) }' # does {...} only if $x > 0.0 - mlr put '$x>0.0; $y=log10($x); $z=sqrt($y)' # does all three statements - mlr put '$a =~ "([a-z]+)_([0-9]+); $b = "left_\e1"; $c = "right_\e2"' - mlr put '$a =~ "([a-z]+)_([0-9]+) { $b = "left_\e1"; $c = "right_\e2" }' - mlr put '$filename = FILENAME' - mlr put '$colored_shape = $color . "_" . $shape' - mlr put '$y = cos($theta); $z = atan2($y, $x)' - mlr put '$name = sub($name, "http.*com"i, "")' - mlr put -q '@sum += $x; end {emit @sum}' - mlr put -q '@sum[$a] += $x; end {emit @sum, "a"}' - mlr put -q '@sum[$a][$b] += $x; end {emit @sum, "a", "b"}' - mlr put -q '@min=min(@min,$x);@max=max(@max,$x); end{emitf @min, @max}' - mlr put -q 'is_null(@xmax) || $x > @xmax {@xmax=$x; @recmax=$*}; end {emit @recmax}' - mlr put ' - $x = 1; - #$y = 2; - $z = 3 - ' + mlr --from example.csv put '$qr = $quantity * $rate' +More example put expressions: + If-statements: + 'if ($flag == true) { $quantity *= 10}' + 'if ($x > 0.0 { $y=log10($x); $z=sqrt($y) } else {$y = 0.0; $z = 0.0}' + Newly created fields can be read after being written: + '$new_field = $index**2; $qn = $quantity * $new_field' + Regex-replacement: + '$name = sub($name, "http.*com"i, "")' + Regex-capture: + 'if ($a =~ "([a-z]+)_([0-9]+)) { $b = "left_\e1"; $c = "right_\e2" }' + Built-in variables: + '$filename = FILENAME' + Aggregations (use mlr put -q): + '@sum += $x; end {emit @sum}' + '@sum[$shape] += $quantity; end {emit @sum, "shape"}' + '@sum[$shape][$color] += $x; end {emit @sum, "shape", "color"}' + ' + @min = min(@min,$x); + @max=max(@max,$x); + end{emitf @min, @max} + ' -Please see also 'mlr -k' for examples using redirected output. - -Please see https://miller.readthedocs.io/en/latest/reference.html for more information -including function list. Or "mlr -f". -Please see in particular: - http://www.johnkerl.org/miller/doc/reference-verbs.html#put +See also https://johnkerl.org/miller6/reference-dsl for more context. .fi .if n \{\ .RE @@ -1366,12 +1792,10 @@ Please see in particular: .RS 0 .\} .nf -Usage: mlr regularize -For records seen earlier in the data stream with same field names in -a different order, outputs them with field names in the previously -encountered order. -Example: input records a=1,c=2,b=3, then e=4,d=5, then c=7,a=6,b=8 -output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 +Usage: mlr regularize [options] +Outputs records sorted lexically ascending by keys. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1380,8 +1804,10 @@ output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8 .RS 0 .\} .nf -Usage: mlr remove-empty-columns +Usage: mlr remove-empty-columns [options] Omits fields which are empty on every input row. Non-streaming. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1403,6 +1829,7 @@ Options: case-insensitivity. -g Do global replacement within each field name rather than first-match replacement. +-h|--help Show this message. Examples: mlr rename old_name,new_name' mlr rename old_name_1,new_name_1,old_name_2,new_name_2' @@ -1419,15 +1846,18 @@ mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" .\} .nf Usage: mlr reorder [options] +Moves specified names to start of record, or end of record. +Options: +-e Put specified field names at record end: default is to put them at record start. -f {a,b,c} Field names to reorder. --e Put specified field names at record end: default is to put - them at record start. -b {x} Put field names specified with -f before field name specified by {x}, if any. If {x} isn't present in a given record, the specified fields will not be moved. -a {x} Put field names specified with -f after field name specified by {x}, if any. If {x} isn't present in a given record, the specified fields will not be moved. +-h|--help Show this message. + Examples: mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". @@ -1442,9 +1872,10 @@ mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". Usage: mlr repeat [options] Copies input records to output records multiple times. Options must be exactly one of the following: - -n {repeat count} Repeat each input record this many times. - -f {field name} Same, but take the repeat count from the specified - field name of each input record. +-n {repeat count} Repeat each input record this many times. +-f {field name} Same, but take the repeat count from the specified + field name of each input record. +-h|--help Show this message. Example: echo x=0 | mlr repeat -n 4 then put '$x=urand()' produces: @@ -1536,9 +1967,26 @@ See also mlr nest. .nf Usage: mlr sample [options] Reservoir sampling (subsampling without replacement), optionally by category. --k {count} Required: number of records to output, total, or by group if using -g. --g {a,b,c} Optional: group-by-field names for samples. See also mlr bootstrap and mlr shuffle. +Options: +-g {a,b,c} Optional: group-by-field names for samples, e.g. a,b,c. +-k {k} Required: number of records to output in total, or by group if using -g. +-h|--help Show this message. +.fi +.if n \{\ +.RE +.SS "sec2gmtdate" +.if n \{\ +.RS 0 +.\} +.nf +Usage: ../c/mlr sec2gmtdate {comma-separated list of field names} +Replaces a numeric field representing seconds since the epoch with the +corresponding GMT year-month-day timestamp; leaves non-numbers as-is. +This is nothing more than a keystroke-saver for the sec2gmtdate function: + ../c/mlr sec2gmtdate time1,time2 +is the same as + ../c/mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' .fi .if n \{\ .RE @@ -1553,24 +2001,13 @@ corresponding GMT timestamp; leaves non-numbers as-is. This is nothing more than a keystroke-saver for the sec2gmt function: mlr sec2gmt time1,time2 is the same as - mlr put '$time1=sec2gmt($time1);$time2=sec2gmt($time2)' + mlr put '$time1 = sec2gmt($time1); $time2 = sec2gmt($time2)' Options: -1 through -9: format the seconds using 1..9 decimal places, respectively. -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sec2gmtdate {comma-separated list of field names} -Replaces a numeric field representing seconds since the epoch with the -corresponding GMT year-month-day timestamp; leaves non-numbers as-is. -This is nothing more than a keystroke-saver for the sec2gmtdate function: - mlr sec2gmtdate time1,time2 -is the same as - mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' +--millis Input numbers are treated as milliseconds since the epoch. +--micros Input numbers are treated as microseconds since the epoch. +--nanos Input numbers are treated as nanoseconds since the epoch. +-h|--help Show this message. .fi .if n \{\ .RE @@ -1580,12 +2017,16 @@ is the same as .\} .nf Usage: mlr seqgen [options] +Passes input records directly to output. Most useful for format conversion. Produces a sequence of counters. Discards the input record stream. Produces -output as specified by the following options: --f {name} Field name for counters; default "i". ---start {number} Inclusive start value; default "1". ---stop {number} Inclusive stop value; default "100". ---step {number} Step value; default "1". +output as specified by the options + +Options: +-f {name} (default "i") Field name for counters. +--start {value} (default 1) Inclusive start value. +--step {value} (default 1) Step value. +--stop {value} (default 100) Inclusive stop value. +-h|--help Show this message. Start, stop, and/or step may be floating-point. Output is integer if start, stop, and step are all integers. Step may be negative. It may not be zero unless start == stop. @@ -1597,10 +2038,11 @@ unless start == stop. .RS 0 .\} .nf -Usage: mlr shuffle {no options} +Usage: mlr shuffle [options] Outputs records randomly permuted. No output records are produced until -all input records are read. -See also mlr bootstrap and mlr sample. +all input records are read. See also mlr bootstrap and mlr sample. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1610,9 +2052,10 @@ See also mlr bootstrap and mlr sample. .\} .nf Usage: mlr skip-trivial-records [options] -Passes through all records except: -* those with zero fields; -* those for which all fields have empty value. +Passes through all records except those with zero fields, +or those for which all fields have empty value. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1622,18 +2065,22 @@ Passes through all records except: .\} .nf Usage: mlr sort {flags} -Flags: - -f {comma-separated field names} Lexical ascending - -n {comma-separated field names} Numerical ascending; nulls sort last - -nf {comma-separated field names} Same as -n - -r {comma-separated field names} Lexical descending - -nr {comma-separated field names} Numerical descending; nulls sort first Sorts records primarily by the first specified field, secondarily by the second field, and so on. (Any records not having all specified sort keys will appear at the end of the output, in the order they were encountered, regardless of the specified sort order.) The sort is stable: records that compare equal will sort in the order they were encountered in the input record stream. +Options: +-f {comma-separated field names} Lexical ascending +-r {comma-separated field names} Lexical descending +-c {comma-separated field names} Case-folded lexical ascending +-cr {comma-separated field names} Case-folded lexical descending +-n {comma-separated field names} Numerical ascending; nulls sort last +-nf {comma-separated field names} Same as -n +-nr {comma-separated field names} Numerical descending; nulls sort first +-h|--help Show this message. + Example: mlr sort -f a,b -nr x,y,z which is the same as: @@ -1646,8 +2093,11 @@ which is the same as: .RS 0 .\} .nf -Usage: mlr sort-within-records [no options] +Usage: mlr sort-within-records [options] Outputs records sorted lexically ascending by keys. +Options: +-r Recursively sort subobjects/submaps, e.g. for JSON input. +-h|--help Show this message. .fi .if n \{\ .RE @@ -1660,43 +2110,55 @@ Usage: mlr stats1 [options] Computes univariate statistics for one or more given fields, accumulated across the input record stream. Options: --a {sum,count,...} Names of accumulators: p10 p25.2 p50 p98 p100 etc. and/or - one or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - stddev Compute sample standard deviation of specified fields - var Compute sample variance of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields --f {a,b,c} Value-field names on which to compute statistics ---fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex) ---fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) --g {d,e,f} Optional group-by-field names ---gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) ---gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) +-a {sum,count,...} Names of accumulators: one or more of: + median This is the same as p50 + p10 p25.2 p50 p98 p100 etc. + TODO: flags for interpolated percentiles + count Count instances of fields + mode Find most-frequently-occurring values for fields; first-found wins tie + antimode Find least-frequently-occurring values for fields; first-found wins tie + sum Compute sums of specified fields + mean Compute averages (sample means) of specified fields + var Compute sample variance of specified fields + stddev Compute sample standard deviation of specified fields + meaneb Estimate error bars for averages (assuming no sample autocorrelation) + skewness Compute sample skewness of specified fields + kurtosis Compute sample kurtosis of specified fields + min Compute minimum values of specified fields + max Compute maximum values of specified fields + +-f {a,b,c} Value-field names on which to compute statistics +--fr {regex} Regex for value-field names on which to compute statistics + (compute statistics on values in all field names matching regex +--fx {regex} Inverted regex for value-field names on which to compute statistics + (compute statistics on values in all field names not matching regex) + +-g {d,e,f} Optional group-by-field names +--gr {regex} Regex for optional group-by-field names + (group by values in field names matching regex) +--gx {regex} Inverted regex for optional group-by-field names + (group by values in field names not matching regex) + --grfx {regex} Shorthand for --gr {regex} --fx {that same regex} --i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. --s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). --F Computes integerable things (e.g. count) in floating point. + +-i Use interpolated percentiles, like R's type=7; default like type=1. + Not sensical for string-valued fields.\en"); +-s Print iterative stats. Useful in tail -f contexts (in which + case please avoid pprint-format output since end of input + stream will never be seen). +-h|--help Show this message. +[TODO: more] Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape + mlr stats1 Example: mlr stats1 -a count,mode -f size + mlr stats1 Example: mlr stats1 -a count,mode -f size -g shape + mlr stats1 Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - This computes count and mode statistics on all field names beginning + mlr stats1 + This computes count and mode statistics on all field names beginning with a through h, grouped by all field names starting with k. + Notes: * p50 and median are synonymous. * min and max output the same results as p0 and p100, respectively, but use @@ -1719,13 +2181,13 @@ Usage: mlr stats2 [options] Computes bivariate statistics for one or more given field-name pairs, accumulated across the input record stream. -a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-pca Linear regression using principal component analysis - linreg-ols Linear regression using ordinary least squares - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix + linreg-ols Linear regression using ordinary least squares + linreg-pca Linear regression using principal component analysis + r2 Quality metric for linreg-ols (linreg-pca emits its own) + logireg Logistic regression + corr Sample correlation + cov Sample covariance + covx Sample-covariance matrix -f {a,b,c,d} Value-field name-pairs on which to compute statistics. There must be an even number of names. -g {e,f,g} Optional group-by-field names. @@ -1750,9 +2212,7 @@ Example: mlr stats2 -a corr -f x,y .\} .nf Usage: mlr step [options] -Computes values dependent on the previous record, optionally grouped -by category. - +Computes values dependent on the previous record, optionally grouped by category. Options: -a {delta,rsum,...} Names of steppers: comma-separated, one or more of: delta Compute differences in field(s) between successive records @@ -1762,9 +2222,12 @@ Options: rsum Compute running sums of field(s) between successive records counter Count instances of field(s) between successive records ewma Exponentially weighted moving average over successive records + -f {a,b,c} Value-field names on which to compute statistics -g {d,e,f} Optional group-by-field names -F Computes integerable things (e.g. counter) in floating point. + As of Miller 6 this happens automatically, but the flag is accepted + as a no-op for backward compatibility with Miller 5 and below. -d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no smoothing), near under under 1 is light smoothing, near over 0 is heavy smoothing. Multiple weights may be specified, e.g. @@ -1773,6 +2236,7 @@ Options: -o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to the -d values. If supplied, the number of -o values must be the same as the number of -d values. +-h|--help Show this message. Examples: mlr step -a rsum -f request_size @@ -1792,8 +2256,10 @@ for more information on EWMA. .RS 0 .\} .nf -Usage: mlr tac +Usage: mlr tac [options] Prints records in reverse order from the order in which they were encountered. +Options: +-h|--help Show this message. .fi .if n \{\ .RE @@ -1803,9 +2269,11 @@ Prints records in reverse order from the order in which they were encountered. .\} .nf Usage: mlr tail [options] --n {count} Tail count to print; default 10 --g {a,b,c} Optional group-by-field names for tail counts Passes through the last n records, optionally by category. +Options: +-g {a,b,c} Optional group-by-field names for head counts, e.g. a,b,c. +-n {n} Head-count to print. Default 10. +-h|--help Show this message. .fi .if n \{\ .RE @@ -1815,16 +2283,36 @@ Passes through the last n records, optionally by category. .\} .nf Usage: mlr tee [options] {filename} -Passes through input records (like mlr cat) but also writes to specified output -file, using output-format flags from the command line (e.g. --ocsv). See also -the "tee" keyword within mlr put, which allows data-dependent filenames. Options: --a: append to existing file, if any, rather than overwriting. ---no-fflush: don't call fflush() after every record. +-a Append to existing file, if any, rather than overwriting. +-p Treat filename as a pipe-to command. Any of the output-format command-line flags (see mlr -h). Example: using mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... the input is CSV, the output is pretty-print tabular, but the tee-file output is written in JSON format. + +-h|--help Show this message. +.fi +.if n \{\ +.RE +.SS "template" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr template [options] +Places input-record fields in the order specified by list of column names. +If the input record is missing a specified field, it will be filled with the fill-with. +If the input record possesses an unspecified field, it will be discarded. +Options: + -f {a,b,c} Comma-separated field names for template, e.g. a,b,c. + -t {filename} CSV file whose header line will be used for template. +--fill-with {filler string} What to fill absent fields with. Defaults to the empty string. +-h|--help Show this message. +Example: +* Specified fields are a,b,c. +* Input record is c=3,a=1,f=6. +* Output record is a=1,b=,c=3. .fi .if n \{\ .RE @@ -1848,6 +2336,21 @@ optionally by category. .fi .if n \{\ .RE +.SS "unflatten" +.if n \{\ +.RS 0 +.\} +.nf +Usage: mlr unflatten [options] +Reverses flatten. Example: field with name 'a.b.c' and value 4 +becomes name 'a' and value '{"b": { "c": 4 }}'. +Options: +-f {a,b,c} Comma-separated list of field names to unflatten (default all). +-s {string} Separator, defaulting to mlr --flatsep value. +-h|--help Show this message. +.fi +.if n \{\ +.RE .SS "uniq" .if n \{\ .RS 0 @@ -1876,15 +2379,14 @@ Options: .nf Usage: mlr unsparsify [options] Prints records with the union of field names over all input records. -For field names absent in a given record but present in others, fills in a -value. Without -f, this verb retains all input before producing any output. - +For field names absent in a given record but present in others, fills in +a value. This verb retains all input before producing any output. Options: --fill-with {filler string} What to fill absent fields with. Defaults to the empty string. -f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. - + modified, and operation will be streaming. +-h|--help Show this message. Example: if the input is two records, one being 'a=1,b=2' and the other being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and \(cqa=,b=3,c=4'. @@ -1894,485 +2396,12 @@ being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and .SH "FUNCTIONS FOR FILTER/PUT" .sp -.SS "+" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Addition. - -+ (class=arithmetic #args=1): Unary plus. -.fi -.if n \{\ -.RE -.SS "-" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Subtraction. - -- (class=arithmetic #args=1): Unary minus. -.fi -.if n \{\ -.RE -.SS "*" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Multiplication. -.fi -.if n \{\ -.RE -.SS "/" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Division. -.fi -.if n \{\ -.RE -.SS "//" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Integer division: rounds to negative (pythonic). -.fi -.if n \{\ -.RE -.SS ".+" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Addition, with integer-to-integer overflow - -\&.+ (class=arithmetic #args=1): Unary plus, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".-" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Subtraction, with integer-to-integer overflow. - -\&.- (class=arithmetic #args=1): Unary minus, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".*" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Multiplication, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS "./" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Division, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".//" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Integer division: rounds to negative (pythonic), with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS "%" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Remainder; never negative-valued (pythonic). -.fi -.if n \{\ -.RE -.SS "**" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Exponentiation; same as pow, but as an infix -operator. -.fi -.if n \{\ -.RE -.SS "|" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise OR. -.fi -.if n \{\ -.RE -.SS "^" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise XOR. -.fi -.if n \{\ -.RE -.SS "&" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise AND. -.fi -.if n \{\ -.RE -.SS "~" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=1): Bitwise NOT. Beware '$y=~$x' since =~ is the -regex-match operator: try '$y = ~$x'. -.fi -.if n \{\ -.RE -.SS "<<" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise left-shift. -.fi -.if n \{\ -.RE -.SS ">>" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=2): Bitwise right-shift. -.fi -.if n \{\ -.RE -.SS "bitcount" -.if n \{\ -.RS 0 -.\} -.nf -(class=arithmetic #args=1): Count of 1-bits -.fi -.if n \{\ -.RE -.SS "==" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric equality. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "!=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric inequality. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "=~" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String (left-hand side) matches regex (right-hand -side), e.g. '$name =~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS "!=~" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String (left-hand side) does not match regex -(right-hand side), e.g. '$name !=~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS ">" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric greater-than. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS ">=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric greater-than-or-equals. Mixing number -and string results in string compare. -.fi -.if n \{\ -.RE -.SS "<" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric less-than. Mixing number and string -results in string compare. -.fi -.if n \{\ -.RE -.SS "<=" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): String/numeric less-than-or-equals. Mixing number -and string results in string compare. -.fi -.if n \{\ -.RE -.SS "&&" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical AND. -.fi -.if n \{\ -.RE -.SS "||" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical OR. -.fi -.if n \{\ -.RE -.SS "^^" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=2): Logical XOR. -.fi -.if n \{\ -.RE -.SS "!" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=1): Logical negation. -.fi -.if n \{\ -.RE -.SS "? :" -.if n \{\ -.RS 0 -.\} -.nf -(class=boolean #args=3): Ternary operator. -.fi -.if n \{\ -.RE -.SS "." -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): String concatenation. -.fi -.if n \{\ -.RE -.SS "gsub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=gsub($name, "old", "new")' -(replace all). -.fi -.if n \{\ -.RE -.SS "regextract" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): Example: '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' -\&. -.fi -.if n \{\ -.RE -.SS "regextract_or_else" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' -\&. -.fi -.if n \{\ -.RE -.SS "strlen" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): String length. -.fi -.if n \{\ -.RE -.SS "sub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Example: '$name=sub($name, "old", "new")' -(replace once). -.fi -.if n \{\ -.RE -.SS "ssub" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): Like sub but does no regexing. No characters are special. -.fi -.if n \{\ -.RE -.SS "substr" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=3): substr(s,m,n) gives substring of s from 0-up position m to n -inclusive. Negative indices -len .. -1 alias to 0 .. len-1. -.fi -.if n \{\ -.RE -.SS "tolower" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string to lowercase. -.fi -.if n \{\ -.RE -.SS "toupper" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string to uppercase. -.fi -.if n \{\ -.RE -.SS "truncate" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=2): Truncates string first argument to max length of int second argument. -.fi -.if n \{\ -.RE -.SS "capitalize" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Convert string's first character to uppercase. -.fi -.if n \{\ -.RE -.SS "lstrip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip leading whitespace from string. -.fi -.if n \{\ -.RE -.SS "rstrip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "strip" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip leading and trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "collapse_whitespace" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Strip repeated whitespace from string. -.fi -.if n \{\ -.RE -.SS "clean_whitespace" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Same as collapse_whitespace and strip. -.fi -.if n \{\ -.RE -.SS "system" -.if n \{\ -.RS 0 -.\} -.nf -(class=string #args=1): Run command string, yielding its stdout minus final carriage return. -.fi -.if n \{\ -.RE .SS "abs" .if n \{\ .RS 0 .\} .nf -(class=math #args=1): Absolute value. + (class=math #args=1) Absolute value. .fi .if n \{\ .RE @@ -2381,7 +2410,7 @@ inclusive. Negative indices -len .. -1 alias to 0 .. len-1. .RS 0 .\} .nf -(class=math #args=1): Inverse trigonometric cosine. + (class=math #args=1) Inverse trigonometric cosine. .fi .if n \{\ .RE @@ -2390,7 +2419,49 @@ inclusive. Negative indices -len .. -1 alias to 0 .. len-1. .RS 0 .\} .nf -(class=math #args=1): Inverse hyperbolic cosine. + (class=math #args=1) Inverse hyperbolic cosine. +.fi +.if n \{\ +.RE +.SS "any" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, yields a boolean true if the argument function returns true for any array/map element, false otherwise. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. +Examples: +Array example: any([10,20,30], func(e) {return $index == e}) +Map example: any({"a": "foo", "b": "bar"}, func(k,v) {return $[k] == v}) +.fi +.if n \{\ +.RE +.SS "append" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=2) Appends second argument to end of first argument, which must be an array. +.fi +.if n \{\ +.RE +.SS "apply" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, applies the function to each element of the array/map. For arrays, the function should take one argument, for array element; it should return a new element. For maps, it should take two arguments, for map-element key and value; it should return a new key-value pair (i.e. a single-entry map). +Examples: +Array example: apply([1,2,3,4,5], func(e) {return e ** 3}) returns [1, 8, 27, 64, 125]. +Map example: apply({"a":1, "b":3, "c":5}, func(k,v) {return {toupper(k): v ** 2}}) returns {"A": 1, "B":9, "C": 25}", +.fi +.if n \{\ +.RE +.SS "arrayify" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=1) Walks through a nested map/array, converting any map with consecutive keys "1", "2", ... into an array. Useful to wrap the output of unflatten. .fi .if n \{\ .RE @@ -2399,7 +2470,7 @@ inclusive. Negative indices -len .. -1 alias to 0 .. len-1. .RS 0 .\} .nf -(class=math #args=1): Inverse trigonometric sine. + (class=math #args=1) Inverse trigonometric sine. .fi .if n \{\ .RE @@ -2408,698 +2479,7 @@ inclusive. Negative indices -len .. -1 alias to 0 .. len-1. .RS 0 .\} .nf -(class=math #args=1): Inverse hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "atan" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): One-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atan2" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Two-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atanh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "cbrt" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Cube root. -.fi -.if n \{\ -.RE -.SS "ceil" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Ceiling: nearest integer at or above. -.fi -.if n \{\ -.RE -.SS "cos" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric cosine. -.fi -.if n \{\ -.RE -.SS "cosh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic cosine. -.fi -.if n \{\ -.RE -.SS "erf" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Error function. -.fi -.if n \{\ -.RE -.SS "erfc" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Complementary error function. -.fi -.if n \{\ -.RE -.SS "exp" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Exponential function e**x. -.fi -.if n \{\ -.RE -.SS "expm1" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): e**x - 1. -.fi -.if n \{\ -.RE -.SS "floor" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Floor: nearest integer at or below. -.fi -.if n \{\ -.RE -.SS "invqnorm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Inverse of normal cumulative distribution -function. Note that invqorm(urand()) is normally distributed. -.fi -.if n \{\ -.RE -.SS "log" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Natural (base-e) logarithm. -.fi -.if n \{\ -.RE -.SS "log10" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Base-10 logarithm. -.fi -.if n \{\ -.RE -.SS "log1p" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): log(1-x). -.fi -.if n \{\ -.RE -.SS "logifit" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): Given m and b from logistic regression, compute -fit: $yhat=logifit($x,$m,$b). -.fi -.if n \{\ -.RE -.SS "madd" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a + b mod m (integers) -.fi -.if n \{\ -.RE -.SS "max" -.if n \{\ -.RS 0 -.\} -.nf -(class=math variadic): max of n numbers; null loses -.fi -.if n \{\ -.RE -.SS "mexp" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a ** b mod m (integers) -.fi -.if n \{\ -.RE -.SS "min" -.if n \{\ -.RS 0 -.\} -.nf -(class=math variadic): Min of n numbers; null loses -.fi -.if n \{\ -.RE -.SS "mmul" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a * b mod m (integers) -.fi -.if n \{\ -.RE -.SS "msub" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=3): a - b mod m (integers) -.fi -.if n \{\ -.RE -.SS "pow" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Exponentiation; same as **. -.fi -.if n \{\ -.RE -.SS "qnorm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Normal cumulative distribution function. -.fi -.if n \{\ -.RE -.SS "round" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Round to nearest integer. -.fi -.if n \{\ -.RE -.SS "roundm" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Round to nearest multiple of m: roundm($x,$m) is -the same as round($x/$m)*$m -.fi -.if n \{\ -.RE -.SS "sgn" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): +1 for positive input, 0 for zero input, -1 for -negative input. -.fi -.if n \{\ -.RE -.SS "sin" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric sine. -.fi -.if n \{\ -.RE -.SS "sinh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "sqrt" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Square root. -.fi -.if n \{\ -.RE -.SS "tan" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Trigonometric tangent. -.fi -.if n \{\ -.RE -.SS "tanh" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=1): Hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "urand" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=0): Floating-point numbers uniformly distributed on the unit interval. -Int-valued example: '$n=floor(20+urand()*11)'. -.fi -.if n \{\ -.RE -.SS "urandrange" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Floating-point numbers uniformly distributed on the interval [a, b). -.fi -.if n \{\ -.RE -.SS "urand32" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=0): Integer uniformly distributed 0 and 2**32-1 -inclusive. -.fi -.if n \{\ -.RE -.SS "urandint" -.if n \{\ -.RS 0 -.\} -.nf -(class=math #args=2): Integer uniformly distributed between inclusive -integer endpoints. -.fi -.if n \{\ -.RE -.SS "dhms2fsec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers floating-point seconds as in -dhms2fsec("5d18h53m20.250000s") = 500000.250000 -.fi -.if n \{\ -.RE -.SS "dhms2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers integer seconds as in -dhms2sec("5d18h53m20s") = 500000 -.fi -.if n \{\ -.RE -.SS "fsec2dhms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats floating-point seconds as in -fsec2dhms(500000.25) = "5d18h53m20.250000s" -.fi -.if n \{\ -.RE -.SS "fsec2hms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats floating-point seconds as in -fsec2hms(5000.25) = "01:23:20.250000" -.fi -.if n \{\ -.RE -.SS "gmt2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Parses GMT timestamp as integer seconds since -the epoch. -.fi -.if n \{\ -.RE -.SS "localtime2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Parses local timestamp as integer seconds since -the epoch. Consults $TZ environment variable. -.fi -.if n \{\ -.RE -.SS "hms2fsec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers floating-point seconds as in -hms2fsec("01:23:20.250000") = 5000.250000 -.fi -.if n \{\ -.RE -.SS "hms2sec" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Recovers integer seconds as in -hms2sec("01:23:20") = 5000 -.fi -.if n \{\ -.RE -.SS "sec2dhms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats integer seconds as in sec2dhms(500000) -= "5d18h53m20s" -.fi -.if n \{\ -.RE -.SS "sec2gmt" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as GMT timestamp, e.g. sec2gmt(1440768801.7) = "2015-08-28T13:33:21Z". -Leaves non-numbers as-is. - -sec2gmt (class=time #args=2): Formats seconds since epoch as GMT timestamp with n -decimal places for seconds, e.g. sec2gmt(1440768801.7,1) = "2015-08-28T13:33:21.7Z". -Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as GMT timestamp with year-month-date, e.g. sec2gmtdate(1440768801.7) = "2015-08-28". -Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2localtime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as local timestamp, e.g. sec2localtime(1440768801.7) = "2015-08-28T13:33:21Z". -Consults $TZ environment variable. Leaves non-numbers as-is. - -sec2localtime (class=time #args=2): Formats seconds since epoch as local timestamp with n -decimal places for seconds, e.g. sec2localtime(1440768801.7,1) = "2015-08-28T13:33:21.7Z". -Consults $TZ environment variable. Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2localdate" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats seconds since epoch (integer part) -as local timestamp with year-month-date, e.g. sec2localdate(1440768801.7) = "2015-08-28". -Consults $TZ environment variable. Leaves non-numbers as-is. -.fi -.if n \{\ -.RE -.SS "sec2hms" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=1): Formats integer seconds as in -sec2hms(5000) = "01:23:20" -.fi -.if n \{\ -.RE -.SS "strftime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Formats seconds since the epoch as timestamp, e.g. -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z", and -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z". -Format strings are as in the C library (please see "man strftime" on your system), -with the Miller-specific addition of "%1S" through "%9S" which format the seconds -with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) -See also strftime_local. -.fi -.if n \{\ -.RE -.SS "strftime_local" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Like strftime but consults the $TZ environment variable to get local time zone. -.fi -.if n \{\ -.RE -.SS "strptime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Parses timestamp as floating-point seconds since the epoch, -e.g. strptime("2015-08-28T13:33:21Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000, -and strptime("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000. -See also strptime_local. -.fi -.if n \{\ -.RE -.SS "strptime_local" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=2): Like strptime, but consults $TZ environment variable to find and use local timezone. -.fi -.if n \{\ -.RE -.SS "systime" -.if n \{\ -.RS 0 -.\} -.nf -(class=time #args=0): Floating-point seconds since the epoch, -e.g. 1440768801.748936. -.fi -.if n \{\ -.RE -.SS "is_absent" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if field is present in input, true otherwise -.fi -.if n \{\ -.RE -.SS "is_bool" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with boolean value. Synonymous with is_boolean. -.fi -.if n \{\ -.RE -.SS "is_boolean" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with boolean value. Synonymous with is_bool. -.fi -.if n \{\ -.RE -.SS "is_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present in input with empty string value, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_empty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map which is empty. -.fi -.if n \{\ -.RE -.SS "is_float" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be float -.fi -.if n \{\ -.RE -.SS "is_int" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be int -.fi -.if n \{\ -.RE -.SS "is_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map. -.fi -.if n \{\ -.RE -.SS "is_nonempty_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is a map which is non-empty. -.fi -.if n \{\ -.RE -.SS "is_not_empty" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if field is present in input with empty value, true otherwise -.fi -.if n \{\ -.RE -.SS "is_not_map" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is not a map. -.fi -.if n \{\ -.RE -.SS "is_not_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): False if argument is null (empty or absent), true otherwise. -.fi -.if n \{\ -.RE -.SS "is_null" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if argument is null (empty or absent), false otherwise. -.fi -.if n \{\ -.RE -.SS "is_numeric" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with value inferred to be int or float -.fi -.if n \{\ -.RE -.SS "is_present" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present in input, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_string" -.if n \{\ -.RS 0 -.\} -.nf -(class=typing #args=1): True if field is present with string (including empty-string) value + (class=math #args=1) Inverse hyperbolic sine. .fi .if n \{\ .RE @@ -3108,8 +2488,16 @@ e.g. 1440768801.748936. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is absent in the input data, else -throws an error. + (class=typing #args=1) Aborts with an error if is_absent on the argument returns false, else returns its argument. +.fi +.if n \{\ +.RE +.SS "asserting_array" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) Aborts with an error if is_array on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3118,8 +2506,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with boolean value, else -throws an error. + (class=typing #args=1) Aborts with an error if is_bool on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3128,8 +2515,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with boolean value, else -throws an error. + (class=typing #args=1) Aborts with an error if is_boolean on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3138,8 +2524,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present in input with empty value, -else throws an error. + (class=typing #args=1) Aborts with an error if is_empty on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3148,8 +2533,16 @@ else throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is a map with empty value, else -throws an error. + (class=typing #args=1) Aborts with an error if is_empty_map on the argument returns false, else returns its argument. +.fi +.if n \{\ +.RE +.SS "asserting_error" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) Aborts with an error if is_error on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3158,8 +2551,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with float value, else -throws an error. + (class=typing #args=1) Aborts with an error if is_float on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3168,8 +2560,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with int value, else -throws an error. + (class=typing #args=1) Aborts with an error if is_int on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3178,7 +2569,7 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is a map, else throws an error. + (class=typing #args=1) Aborts with an error if is_map on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3187,8 +2578,16 @@ throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is a non-empty map, else throws -an error. + (class=typing #args=1) Aborts with an error if is_nonempty_map on the argument returns false, else returns its argument. +.fi +.if n \{\ +.RE +.SS "asserting_not_array" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) Aborts with an error if is_not_array on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3197,8 +2596,7 @@ an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present in input with non-empty -value, else throws an error. + (class=typing #args=1) Aborts with an error if is_not_empty on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3207,7 +2605,7 @@ value, else throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is not a map, else throws an error. + (class=typing #args=1) Aborts with an error if is_not_map on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3216,8 +2614,7 @@ value, else throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is non-null (non-empty and non-absent), -else throws an error. + (class=typing #args=1) Aborts with an error if is_not_null on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3226,8 +2623,7 @@ else throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is null (empty or absent), else throws -an error. + (class=typing #args=1) Aborts with an error if is_null on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3236,8 +2632,7 @@ an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with int or float value, -else throws an error. + (class=typing #args=1) Aborts with an error if is_numeric on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3246,8 +2641,7 @@ else throws an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present in input, else throws -an error. + (class=typing #args=1) Aborts with an error if is_present on the argument returns false, else returns its argument. .fi .if n \{\ .RE @@ -3256,8 +2650,43 @@ an error. .RS 0 .\} .nf -(class=typing #args=1): Returns argument if it is present with string (including -empty-string) value, else throws an error. + (class=typing #args=1) Aborts with an error if is_string on the argument returns false, else returns its argument. +.fi +.if n \{\ +.RE +.SS "atan" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) One-argument arctangent. +.fi +.if n \{\ +.RE +.SS "atan2" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=2) Two-argument arctangent. +.fi +.if n \{\ +.RE +.SS "atanh" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Inverse hyperbolic tangent. +.fi +.if n \{\ +.RE +.SS "bitcount" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=1) Count of 1-bits. .fi .if n \{\ .RE @@ -3266,64 +2695,70 @@ empty-string) value, else throws an error. .RS 0 .\} .nf -(class=conversion #args=1): Convert int/float/bool/string to boolean. + (class=conversion #args=1) Convert int/float/bool/string to boolean. .fi .if n \{\ .RE -.SS "float" +.SS "capitalize" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=1): Convert int/float/bool/string to float. + (class=string #args=1) Convert string's first character to uppercase. .fi .if n \{\ .RE -.SS "fmtnum" +.SS "cbrt" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=2): Convert int/float/bool to string using -printf-style format string, e.g. '$s = fmtnum($n, "%06lld")'. WARNING: Miller numbers -are all long long or double. If you use formats like %d or %f, behavior is undefined. + (class=math #args=1) Cube root. .fi .if n \{\ .RE -.SS "hexfmt" +.SS "ceil" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=1): Convert int to string, e.g. 255 to "0xff". + (class=math #args=1) Ceiling: nearest integer at or above. .fi .if n \{\ .RE -.SS "int" +.SS "clean_whitespace" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=1): Convert int/float/bool/string to int. + (class=string #args=1) Same as collapse_whitespace and strip. .fi .if n \{\ .RE -.SS "string" +.SS "collapse_whitespace" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=1): Convert int/float/bool/string to string. + (class=string #args=1) Strip repeated whitespace from string. .fi .if n \{\ .RE -.SS "typeof" +.SS "cos" .if n \{\ .RS 0 .\} .nf -(class=conversion #args=1): Convert argument to type of argument (e.g. -MT_STRING). For debug. + (class=math #args=1) Trigonometric cosine. +.fi +.if n \{\ +.RE +.SS "cosh" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Hyperbolic cosine. .fi .if n \{\ .RE @@ -3332,7 +2767,193 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=1): Prints maximum depth of hashmap: ''. Scalars have depth 0. + (class=collections #args=1) Prints maximum depth of map/array. Scalars have depth 0. +.fi +.if n \{\ +.RE +.SS "dhms2fsec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Recovers floating-point seconds as in dhms2fsec("5d18h53m20.250000s") = 500000.250000 +.fi +.if n \{\ +.RE +.SS "dhms2sec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Recovers integer seconds as in dhms2sec("5d18h53m20s") = 500000 +.fi +.if n \{\ +.RE +.SS "erf" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Error function. +.fi +.if n \{\ +.RE +.SS "erfc" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Complementary error function. +.fi +.if n \{\ +.RE +.SS "every" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, yields a boolean true if the argument function returns true for every array/map element, false otherwise. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. +Examples: +Array example: every(["a", "b", "c"], func(e) {return $[e] >= 0}) +Map example: every({"a": "foo", "b": "bar"}, func(k,v) {return $[k] == v}) +.fi +.if n \{\ +.RE +.SS "exp" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Exponential function e**x. +.fi +.if n \{\ +.RE +.SS "expm1" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) e**x - 1. +.fi +.if n \{\ +.RE +.SS "flatten" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=2,3) Flattens multi-level maps to single-level ones. Useful for nested JSON-like structures for non-JSON file formats like CSV. +Examples: +flatten("a", ".", {"b": { "c": 4 }}) is {"a.b.c" : 4}. +flatten("", ".", {"a": { "b": 3 }}) is {"a.b" : 3}. +Two-argument version: flatten($*, ".") is the same as flatten("", ".", $*). +.fi +.if n \{\ +.RE +.SS "float" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=1) Convert int/float/bool/string to float. +.fi +.if n \{\ +.RE +.SS "floor" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Floor: nearest integer at or below. +.fi +.if n \{\ +.RE +.SS "fmtnum" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=2) Convert int/float/bool to string using printf-style format string, e.g. '$s = fmtnum($n, "%08d")' or '$t = fmtnum($n, "%.6e")'. +.fi +.if n \{\ +.RE +.SS "fold" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=3) Given a map or array as first argument and a function as second argument, accumulates entries into a final output -- for example, sum or product. For arrays, the function should take two arguments, for accumulated value and array element. For maps, it should take four arguments, for accumulated key and value, and map-element key and value; it should return the updated accumulator as a new key-value pair (i.e. a single-entry map). The start value for the accumulator is taken from the third argument. +Examples: +Array example: fold([1,2,3,4,5], func(acc,e) {return acc + e**3}, 10000) returns 10225. +Map example: fold({"a":1, "b":3, "c": 5}, func(acck,accv,ek,ev) {return {"sum": accv+ev**2}}, {"sum":10000}) returns 10035. +.fi +.if n \{\ +.RE +.SS "fsec2dhms" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Formats floating-point seconds as in fsec2dhms(500000.25) = "5d18h53m20.250000s" +.fi +.if n \{\ +.RE +.SS "fsec2hms" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Formats floating-point seconds as in fsec2hms(5000.25) = "01:23:20.250000" +.fi +.if n \{\ +.RE +.SS "get_keys" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=1) Returns array of keys of map or array +.fi +.if n \{\ +.RE +.SS "get_values" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=1) Returns array of keys of map or array -- in the latter case, returns a copy of the array +.fi +.if n \{\ +.RE +.SS "gmt2localtime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2) Convert from a GMT-time string to a local-time string. Consulting $TZ unless second argument is supplied. +Examples: +gmt2localtime("1999-12-31T22:00:00Z") = "2000-01-01 00:00:00" with TZ="Asia/Istanbul" +gmt2localtime("1999-12-31T22:00:00Z", "Asia/Istanbul") = "2000-01-01 00:00:00" +.fi +.if n \{\ +.RE +.SS "gmt2sec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Parses GMT timestamp as integer seconds since the epoch. +Example: +gmt2sec("2001-02-03T04:05:06Z") = 981173106 +.fi +.if n \{\ +.RE +.SS "gsub" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) '$name=gsub($name, "old", "new")' (replace all). .fi .if n \{\ .RE @@ -3341,8 +2962,232 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=2): True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or -\(cqhaskey(mymap, mykey)'. Error if 1st argument is not a map. + (class=collections #args=2) True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or 'haskey(mymap, mykey)', or true/false if array index is in bounds / out of bounds. Error if 1st argument is not a map or array. Note -n..-1 alias to 1..n in Miller arrays. +.fi +.if n \{\ +.RE +.SS "hexfmt" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=1) Convert int to hex string, e.g. 255 to "0xff". +.fi +.if n \{\ +.RE +.SS "hms2fsec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Recovers floating-point seconds as in hms2fsec("01:23:20.250000") = 5000.250000 +.fi +.if n \{\ +.RE +.SS "hms2sec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Recovers integer seconds as in hms2sec("01:23:20") = 5000 +.fi +.if n \{\ +.RE +.SS "hostname" +.if n \{\ +.RS 0 +.\} +.nf + (class=system #args=0) Returns the hostname as a string. +.fi +.if n \{\ +.RE +.SS "int" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=1) Convert int/float/bool/string to int. +.fi +.if n \{\ +.RE +.SS "invqnorm" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Inverse of normal cumulative distribution function. Note that invqorm(urand()) is normally distributed. +.fi +.if n \{\ +.RE +.SS "is_absent" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) False if field is present in input, true otherwise +.fi +.if n \{\ +.RE +.SS "is_array" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is an array. +.fi +.if n \{\ +.RE +.SS "is_bool" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with boolean value. Synonymous with is_boolean. +.fi +.if n \{\ +.RE +.SS "is_boolean" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with boolean value. Synonymous with is_bool. +.fi +.if n \{\ +.RE +.SS "is_empty" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present in input with empty string value, false otherwise. +.fi +.if n \{\ +.RE +.SS "is_empty_map" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is a map which is empty. +.fi +.if n \{\ +.RE +.SS "is_error" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if if argument is an error, such as taking string length of an integer. +.fi +.if n \{\ +.RE +.SS "is_float" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with value inferred to be float +.fi +.if n \{\ +.RE +.SS "is_int" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with value inferred to be int +.fi +.if n \{\ +.RE +.SS "is_map" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is a map. +.fi +.if n \{\ +.RE +.SS "is_nonempty_map" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is a map which is non-empty. +.fi +.if n \{\ +.RE +.SS "is_not_array" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is not an array. +.fi +.if n \{\ +.RE +.SS "is_not_empty" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) False if field is present in input with empty value, true otherwise +.fi +.if n \{\ +.RE +.SS "is_not_map" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is not a map. +.fi +.if n \{\ +.RE +.SS "is_not_null" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) False if argument is null (empty or absent), true otherwise. +.fi +.if n \{\ +.RE +.SS "is_null" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if argument is null (empty or absent), false otherwise. +.fi +.if n \{\ +.RE +.SS "is_numeric" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with value inferred to be int or float +.fi +.if n \{\ +.RE +.SS "is_present" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present in input, false otherwise. +.fi +.if n \{\ +.RE +.SS "is_string" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) True if field is present with string (including empty-string) value .fi .if n \{\ .RE @@ -3351,7 +3196,10 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=2): Makes string from map keys. E.g. 'joink($*, ",")'. + (class=conversion #args=2) Makes string from map/array keys. +Examples: +joink({"a":3,"b":4,"c":5}, ",") = "a,b,c". +joink([1,2,3], ",") = "1,2,3". .fi .if n \{\ .RE @@ -3360,7 +3208,10 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=3): Makes string from map key-value pairs. E.g. 'joinkv(@v[2], "=", ",")' + (class=conversion #args=3) Makes string from map/array key-value pairs. +Examples: +joinkv([3,4,5], "=", ",") = "1=3,2=4,3=5" +joinkv({"a":3,"b":4,"c":5}, "=", ",") = "a=3,b=4,c=5" .fi .if n \{\ .RE @@ -3369,7 +3220,28 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=2): Makes string from map values. E.g. 'joinv(mymap, ",")'. + (class=conversion #args=2) Makes string from map/array values. +Examples: +joinv([3,4,5], ",") = "3,4,5" +joinv({"a":3,"b":4,"c":5}, ",") = "3,4,5" +.fi +.if n \{\ +.RE +.SS "json_parse" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=1) Converts value from JSON-formatted string. +.fi +.if n \{\ +.RE +.SS "json_stringify" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=1,2) Converts value to JSON-formatted string. Default output is single-line. With optional second boolean argument set to true, produces multiline output. .fi .if n \{\ .RE @@ -3378,8 +3250,7 @@ MT_STRING). For debug. .RS 0 .\} .nf -(class=maps #args=1): Counts total number of terminal values in hashmap. For single-level maps, -same as length. + (class=collections #args=1) Counts total number of terminal values in map/array. For single-level map/array, same as length. .fi .if n \{\ .RE @@ -3388,7 +3259,85 @@ same as length. .RS 0 .\} .nf -(class=maps #args=1): Counts number of top-level entries in hashmap. Scalars have length 1. + (class=collections #args=1) Counts number of top-level entries in array/map. Scalars have length 1. +.fi +.if n \{\ +.RE +.SS "localtime2gmt" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2) Convert from a local-time string to a GMT-time string. Consults $TZ unless second argument is supplied. +Examples: +localtime2gmt("2000-01-01 00:00:00") = "1999-12-31T22:00:00Z" with TZ="Asia/Istanbul" +localtime2gmt("2000-01-01 00:00:00", "Asia/Istanbul") = "1999-12-31T22:00:00Z" +.fi +.if n \{\ +.RE +.SS "localtime2sec" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2) Parses local timestamp as integer seconds since the epoch. Consults $TZ environment variable, unless second argument is supplied. +Examples: +localtime2sec("2001-02-03 04:05:06") = 981165906 with TZ="Asia/Istanbul" +localtime2sec("2001-02-03 04:05:06", "Asia/Istanbul") = 981165906" +.fi +.if n \{\ +.RE +.SS "log" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Natural (base-e) logarithm. +.fi +.if n \{\ +.RE +.SS "log10" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Base-10 logarithm. +.fi +.if n \{\ +.RE +.SS "log1p" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) log(1-x). +.fi +.if n \{\ +.RE +.SS "logifit" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=3) Given m and b from logistic regression, compute fit: $yhat=logifit($x,$m,$b). +.fi +.if n \{\ +.RE +.SS "lstrip" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) Strip leading whitespace from string. +.fi +.if n \{\ +.RE +.SS "madd" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=3) a + b mod m (integers) .fi .if n \{\ .RE @@ -3397,8 +3346,7 @@ same as length. .RS 0 .\} .nf -(class=maps variadic): With 0 args, returns empty map. With 1 arg, returns copy of arg. -With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. + (class=collections #args=variadic) With 0 args, returns empty map. With 1 arg, returns copy of arg. With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. .fi .if n \{\ .RE @@ -3407,8 +3355,7 @@ With 2 or more, returns copy of arg 1 with all keys from any of remaining argume .RS 0 .\} .nf -(class=maps variadic): Returns a map with keys from remaining arguments, if any, unset. -E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. + (class=collections #args=variadic) Returns a map with keys from remaining arguments, if any, unset. Remaining arguments can be strings or arrays of string. E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}' and 'mapexcept({1:2,3:4,5:6}, [1, 5, 7])' is '{3:4}'. .fi .if n \{\ .RE @@ -3417,8 +3364,7 @@ E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}'. .RS 0 .\} .nf -(class=maps variadic): Returns a map with only keys from remaining arguments set. -E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. + (class=collections #args=variadic) Returns a map with only keys from remaining arguments set. Remaining arguments can be strings or arrays of string. E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}' and 'mapselect({1:2,3:4,5:6}, [1, 5, 7])' is '{1:2,5:6}'. .fi .if n \{\ .RE @@ -3427,8 +3373,313 @@ E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}'. .RS 0 .\} .nf -(class=maps variadic): With 0 args, returns empty map. With >= 1 arg, returns a map with -key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. + (class=collections #args=variadic) With 0 args, returns empty map. With >= 1 arg, returns a map with key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. +.fi +.if n \{\ +.RE +.SS "max" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=variadic) Max of n numbers; null loses. +.fi +.if n \{\ +.RE +.SS "md5" +.if n \{\ +.RS 0 +.\} +.nf + (class=hashing #args=1) MD5 hash. +.fi +.if n \{\ +.RE +.SS "mexp" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=3) a ** b mod m (integers) +.fi +.if n \{\ +.RE +.SS "min" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=variadic) Min of n numbers; null loses. +.fi +.if n \{\ +.RE +.SS "mmul" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=3) a * b mod m (integers) +.fi +.if n \{\ +.RE +.SS "msub" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=3) a - b mod m (integers) +.fi +.if n \{\ +.RE +.SS "os" +.if n \{\ +.RS 0 +.\} +.nf + (class=system #args=0) Returns the operating-system name as a string. +.fi +.if n \{\ +.RE +.SS "pow" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Exponentiation. Same as **, but as a function. +.fi +.if n \{\ +.RE +.SS "qnorm" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Normal cumulative distribution function. +.fi +.if n \{\ +.RE +.SS "reduce" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, accumulates entries into a final output -- for example, sum or product. For arrays, the function should take two arguments, for accumulated value and array element, and return the accumulated element. For maps, it should take four arguments, for accumulated key and value, and map-element key and value; it should return the updated accumulator as a new key-value pair (i.e. a single-entry map). The start value for the accumulator is the first element for arrays, or the first element's key-value pair for maps. +Examples: +Array example: reduce([1,2,3,4,5], func(acc,e) {return acc + e**3}) returns 225. +Map example: reduce({"a":1, "b":3, "c": 5}, func(acck,accv,ek,ev) {return {"sum_of_squares": accv + ev**2}}) returns {"sum_of_squares": 35}. +.fi +.if n \{\ +.RE +.SS "regextract" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=2) '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' +.fi +.if n \{\ +.RE +.SS "regextract_or_else" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' +.fi +.if n \{\ +.RE +.SS "round" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Round to nearest integer. +.fi +.if n \{\ +.RE +.SS "roundm" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=2) Round to nearest multiple of m: roundm($x,$m) is the same as round($x/$m)*$m. +.fi +.if n \{\ +.RE +.SS "rstrip" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) Strip trailing whitespace from string. +.fi +.if n \{\ +.RE +.SS "sec2dhms" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Formats integer seconds as in sec2dhms(500000) = "5d18h53m20s" +.fi +.if n \{\ +.RE +.SS "sec2gmt" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2) Formats seconds since epoch as GMT timestamp. Leaves non-numbers as-is. With second integer argument n, includes n decimal places for the seconds part. +Examples: +sec2gmt(1234567890) = "2009-02-13T23:31:30Z" +sec2gmt(1234567890.123456) = "2009-02-13T23:31:30Z" +sec2gmt(1234567890.123456, 6) = "2009-02-13T23:31:30.123456Z" +.fi +.if n \{\ +.RE +.SS "sec2gmtdate" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Formats seconds since epoch (integer part) as GMT timestamp with year-month-date. Leaves non-numbers as-is. +Example: +sec2gmtdate(1440768801.7) = "2015-08-28". +.fi +.if n \{\ +.RE +.SS "sec2hms" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1) Formats integer seconds as in sec2hms(5000) = "01:23:20" +.fi +.if n \{\ +.RE +.SS "sec2localdate" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2) Formats seconds since epoch (integer part) as local timestamp with year-month-date. Leaves non-numbers as-is. Consults $TZ environment variable unless second argument is supplied. +Examples: +sec2localdate(1440768801.7) = "2015-08-28" with TZ="Asia/Istanbul" +sec2localdate(1440768801.7, "Asia/Istanbul") = "2015-08-28" +.fi +.if n \{\ +.RE +.SS "sec2localtime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=1,2,3) Formats seconds since epoch (integer part) as local timestamp. Consults $TZ environment variable unless third argument is supplied. Leaves non-numbers as-is. With second integer argument n, includes n decimal places for the seconds part +Examples: +sec2localtime(1234567890) = "2009-02-14 01:31:30" with TZ="Asia/Istanbul" +sec2localtime(1234567890.123456) = "2009-02-14 01:31:30" with TZ="Asia/Istanbul" +sec2localtime(1234567890.123456, 6) = "2009-02-14 01:31:30.123456" with TZ="Asia/Istanbul" +sec2localtime(1234567890.123456, 6, "Asia/Istanbul") = "2009-02-14 01:31:30.123456" +.fi +.if n \{\ +.RE +.SS "select" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, includes each input element in the output if the function returns true. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. +Examples: +Array example: select([1,2,3,4,5], func(e) {return e >= 3}) returns [3, 4, 5]. +Map example: select({"a":1, "b":3, "c":5}, func(k,v) {return v >= 3}) returns {"b":3, "c": 5}. +.fi +.if n \{\ +.RE +.SS "sgn" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) +1, 0, -1 for positive, zero, negative input respectively. +.fi +.if n \{\ +.RE +.SS "sha1" +.if n \{\ +.RS 0 +.\} +.nf + (class=hashing #args=1) SHA1 hash. +.fi +.if n \{\ +.RE +.SS "sha256" +.if n \{\ +.RS 0 +.\} +.nf + (class=hashing #args=1) SHA256 hash. +.fi +.if n \{\ +.RE +.SS "sha512" +.if n \{\ +.RS 0 +.\} +.nf + (class=hashing #args=1) SHA512 hash. +.fi +.if n \{\ +.RE +.SS "sin" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Trigonometric sine. +.fi +.if n \{\ +.RE +.SS "sinh" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Hyperbolic sine. +.fi +.if n \{\ +.RE +.SS "sort" +.if n \{\ +.RS 0 +.\} +.nf + (class=higher-order-functions #args=1-2) Given a map or array as first argument and string flags or function as optional second argument, returns a sorted copy of the input. With one argument, sorts array elements naturally, and maps naturally by map keys. If the second argument is a string, it can contain any of "f" for lexical (default "n" for natural/numeric), "), "c" for case-folded lexical, and "r" for reversed/descending sort. If the second argument is a function, then for arrays it should take two arguments a and b, returning < 0, 0, or > 0 as a < b, a == b, or a > b respectively; for maps the function should take four arguments ak, av, bk, and bv, again returning < 0, 0, or > 0, using a and b's keys and values. +Examples: +Array example: sort([5,2,3,1,4], func(a,b) {return b <=> a}) returns [5,4,3,2,1]. +Map example: sort({"c":2,"a":3,"b":1}, func(ak,av,bk,bv) {return bv <=> av}) returns {"a":3,"c":2,"b":1}. +.fi +.if n \{\ +.RE +.SS "splita" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=2) Splits string into array with type inference. +Example: +splita("3,4,5", ",") = [3,4,5] +.fi +.if n \{\ +.RE +.SS "splitax" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=2) Splits string into array without type inference. +Example: +splita("3,4,5", ",") = ["3","4","5"] .fi .if n \{\ .RE @@ -3437,8 +3688,9 @@ key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2, .RS 0 .\} .nf -(class=maps #args=3): Splits string by separators into map with type inference. -E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. + (class=conversion #args=3) Splits string by separators into map with type inference. +Example: +splitkv("a=3,b=4,c=5", "=", ",") = {"a":3,"b":4,"c":5} .fi .if n \{\ .RE @@ -3447,9 +3699,9 @@ E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives '{"a" : 1, "b" : 2, "c" : 3}'. .RS 0 .\} .nf -(class=maps #args=3): Splits string by separators into map without type inference (keys and -values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives -\(cq{"a" : "1", "b" : "2", "c" : "3"}'. + (class=conversion #args=3) Splits string by separators into map without type inference (keys and values are strings). +Example: +splitkvx("a=3,b=4,c=5", "=", ",") = {"a":"3","b":"4","c":"5"} .fi .if n \{\ .RE @@ -3458,8 +3710,9 @@ values are strings). E.g. 'splitkv("a=1,b=2,c=3", "=", ",")' gives .RS 0 .\} .nf -(class=maps #args=2): Splits string by separator into integer-indexed map with type inference. -E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. + (class=conversion #args=2) Splits string by separator into integer-indexed map with type inference. +Example: +splitnv("a,b,c", ",") = {"1":"a","2":"b","3":"c"} .fi .if n \{\ .RE @@ -3468,8 +3721,606 @@ E.g. 'splitnv("a,b,c" , ",")' gives '{1 : "a", 2 : "b", 3 : "c"}'. .RS 0 .\} .nf -(class=maps #args=2): Splits string by separator into integer-indexed map without type -inference (values are strings). E.g. 'splitnv("4,5,6" , ",")' gives '{1 : "4", 2 : "5", 3 : "6"}'. + (class=conversion #args=2) Splits string by separator into integer-indexed map without type inference (values are strings). +Example: +splitnvx("3,4,5", ",") = {"1":"3","2":"4","3":"5"} +.fi +.if n \{\ +.RE +.SS "sqrt" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Square root. +.fi +.if n \{\ +.RE +.SS "ssub" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) Like sub but does no regexing. No characters are special. +.fi +.if n \{\ +.RE +.SS "strftime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=2) Formats seconds since the epoch as timestamp. Format strings are as in the C library (please see "man strftime" on your system), with the Miller-specific addition of "%1S" through "%9S" which format the seconds with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) See also strftime_local. +Examples: +strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z" +strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z" +.fi +.if n \{\ +.RE +.SS "strftime_local" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=2,3) Like strftime but consults the $TZ environment variable to get local time zone. +Examples: +strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%S %z") = "2015-08-28 16:33:21 +0300" with TZ="Asia/Istanbul" +strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%3S %z") = "2015-08-28 16:33:21.700 +0300" with TZ="Asia/Istanbul" +strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%3S %z", "Asia/Istanbul") = "2015-08-28 16:33:21.700 +0300" +.fi +.if n \{\ +.RE +.SS "string" +.if n \{\ +.RS 0 +.\} +.nf + (class=conversion #args=1) Convert int/float/bool/string/array/map to string. +.fi +.if n \{\ +.RE +.SS "strip" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) Strip leading and trailing whitespace from string. +.fi +.if n \{\ +.RE +.SS "strlen" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) String length. +.fi +.if n \{\ +.RE +.SS "strptime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=2) strptime: Parses timestamp as floating-point seconds since the epoch. See also strptime_local. +Examples: +strptime("2015-08-28T13:33:21Z", "%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000 +strptime("2015-08-28T13:33:21.345Z", "%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000 +strptime("1970-01-01 00:00:00 -0400", "%Y-%m-%d %H:%M:%S %z") = 14400 +strptime("1970-01-01 00:00:00 EET", "%Y-%m-%d %H:%M:%S %Z") = -7200 +.fi +.if n \{\ +.RE +.SS "strptime_local" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=2,3) Like stpftime but consults the $TZ environment variable to get local time zone. +Examples: +strptime_local("2015-08-28T13:33:21Z", "%Y-%m-%dT%H:%M:%SZ") = 1440758001 with TZ="Asia/Istanbul" +strptime_local("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440758001.345 with TZ="Asia/Istanbul" +strptime_local("2015-08-28 13:33:21", "%Y-%m-%d %H:%M:%S") = 1440758001 with TZ="Asia/Istanbul" +strptime_local("2015-08-28 13:33:21", "%Y-%m-%d %H:%M:%S", "Asia/Istanbul") = 1440758001 +.fi +.if n \{\ +.RE +.SS "sub" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) '$name=sub($name, "old", "new")' (replace once). +.fi +.if n \{\ +.RE +.SS "substr" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) substr is an alias for substr0. See also substr1. Miller is generally 1-up with all array and string indices, but, this is a backward-compatibility issue with Miller 5 and below. Arrays are new in Miller 6; the substr function is older. +.fi +.if n \{\ +.RE +.SS "substr0" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) substr0(s,m,n) gives substring of s from 0-up position m to n inclusive. Negative indices -len .. -1 alias to 0 .. len-1. See also substr and substr1. +.fi +.if n \{\ +.RE +.SS "substr1" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=3) substr1(s,m,n) gives substring of s from 1-up position m to n inclusive. Negative indices -len .. -1 alias to 1 .. len. See also substr and substr0. +.fi +.if n \{\ +.RE +.SS "system" +.if n \{\ +.RS 0 +.\} +.nf + (class=system #args=1) Run command string, yielding its stdout minus final carriage return. +.fi +.if n \{\ +.RE +.SS "systime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=0) help string will go here +.fi +.if n \{\ +.RE +.SS "systimeint" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=0) help string will go here +.fi +.if n \{\ +.RE +.SS "tan" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Trigonometric tangent. +.fi +.if n \{\ +.RE +.SS "tanh" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=1) Hyperbolic tangent. +.fi +.if n \{\ +.RE +.SS "tolower" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) Convert string to lowercase. +.fi +.if n \{\ +.RE +.SS "toupper" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=1) Convert string to uppercase. +.fi +.if n \{\ +.RE +.SS "truncate" +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=2) Truncates string first argument to max length of int second argument. +.fi +.if n \{\ +.RE +.SS "typeof" +.if n \{\ +.RS 0 +.\} +.nf + (class=typing #args=1) Convert argument to type of argument (e.g. "str"). For debug. +.fi +.if n \{\ +.RE +.SS "unflatten" +.if n \{\ +.RS 0 +.\} +.nf + (class=collections #args=2) Reverses flatten. Useful for nested JSON-like structures for non-JSON file formats like CSV. See also arrayify. +Example: +unflatten({"a.b.c" : 4}, ".") is {"a": "b": { "c": 4 }}. +.fi +.if n \{\ +.RE +.SS "uptime" +.if n \{\ +.RS 0 +.\} +.nf + (class=time #args=0) help string will go here +.fi +.if n \{\ +.RE +.SS "urand" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=0) Floating-point numbers uniformly distributed on the unit interval. +Example: +Int-valued example: '$n=floor(20+urand()*11)'. +.fi +.if n \{\ +.RE +.SS "urand32" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=0) Integer uniformly distributed 0 and 2**32-1 inclusive. +.fi +.if n \{\ +.RE +.SS "urandint" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=2) Integer uniformly distributed between inclusive integer endpoints. +.fi +.if n \{\ +.RE +.SS "urandrange" +.if n \{\ +.RS 0 +.\} +.nf + (class=math #args=2) Floating-point numbers uniformly distributed on the interval [a, b). +.fi +.if n \{\ +.RE +.SS "version" +.if n \{\ +.RS 0 +.\} +.nf + (class=system #args=0) Returns the Miller version as a string. +.fi +.if n \{\ +.RE +.SS "!" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=1) Logical negation. +.fi +.if n \{\ +.RE +.SS "!=" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric inequality. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS "!=~" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String (left-hand side) does not match regex (right-hand side), e.g. '$name !=~ "^a.*b$"'. +.fi +.if n \{\ +.RE +.SS "%" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Remainder; never negative-valued (pythonic). +.fi +.if n \{\ +.RE +.SS "&" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise AND. +.fi +.if n \{\ +.RE +.SS "&&" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Logical AND. +.fi +.if n \{\ +.RE +.SS "*" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Multiplication, with integer*integer overflow to float. +.fi +.if n \{\ +.RE +.SS "**" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Exponentiation. Same as pow, but as an infix operator. +.fi +.if n \{\ +.RE +.SS "+" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=1,2) Addition as binary operator; unary plus operator. +.fi +.if n \{\ +.RE +.SS "-" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=1,2) Subtraction as binary operator; unary negation operator. +.fi +.if n \{\ +.RE +.SS "." +.if n \{\ +.RS 0 +.\} +.nf + (class=string #args=2) String concatenation. +.fi +.if n \{\ +.RE +.SS ".*" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Multiplication, with integer-to-integer overflow. +.fi +.if n \{\ +.RE +.SS ".+" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Addition, with integer-to-integer overflow. +.fi +.if n \{\ +.RE +.SS ".-" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Subtraction, with integer-to-integer overflow. +.fi +.if n \{\ +.RE +.SS "./" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Integer division; not pythonic. +.fi +.if n \{\ +.RE +.SS "/" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Division. Integer / integer is floating-point. +.fi +.if n \{\ +.RE +.SS "//" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Pythonic integer division, rounding toward negative. +.fi +.if n \{\ +.RE +.SS "<" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric less-than. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS "<<" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise left-shift. +.fi +.if n \{\ +.RE +.SS "<=" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric less-than-or-equals. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS "<=>" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Comparator, nominally for sorting. Given a <=> b, returns <0, 0, >0 as a < b, a == b, or a > b, respectively. +.fi +.if n \{\ +.RE +.SS "==" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric equality. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS "=~" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String (left-hand side) matches regex (right-hand side), e.g. '$name =~ "^a.*b$"'. +.fi +.if n \{\ +.RE +.SS ">" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric greater-than. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS ">=" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) String/numeric greater-than-or-equals. Mixing number and string results in string compare. +.fi +.if n \{\ +.RE +.SS ">>" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise signed right-shift. +.fi +.if n \{\ +.RE +.SS ">>>" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise unsigned right-shift. +.fi +.if n \{\ +.RE +.SS "?:" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=3) Standard ternary operator. +.fi +.if n \{\ +.RE +.SS "??" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Absent-coalesce operator. $a ?? 1 evaluates to 1 if $a isn't defined in the current record. +.fi +.if n \{\ +.RE +.SS "???" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Absent-coalesce operator. $a ?? 1 evaluates to 1 if $a isn't defined in the current record, or has empty value. +.fi +.if n \{\ +.RE +.SS "^" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise XOR. +.fi +.if n \{\ +.RE +.SS "^^" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Logical XOR. +.fi +.if n \{\ +.RE +.SS "|" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=2) Bitwise OR. +.fi +.if n \{\ +.RE +.SS "||" +.if n \{\ +.RS 0 +.\} +.nf + (class=boolean #args=2) Logical OR. +.fi +.if n \{\ +.RE +.SS "~" +.if n \{\ +.RS 0 +.\} +.nf + (class=arithmetic #args=1) Bitwise NOT. Beware '$y=~$x' since =~ is the regex-match operator: try '$y = ~$x'. .fi .if n \{\ .RE @@ -3492,7 +4343,8 @@ all: used in "emit", "emitp", and "unset" as a synonym for @* .nf begin: defines a block of statements to be executed before input records are ingested. The body statements must be wrapped in curly braces. -Example: 'begin { @count = 0 }' + + Example: 'begin { @count = 0 }' .fi .if n \{\ .RE @@ -3511,8 +4363,7 @@ Type-checking happens at assignment: 'bool b = 1' is an error. .RS 0 .\} .nf -break: causes execution to continue after the body of the current -for/while/do-while loop. +break: causes execution to continue after the body of the current for/while/do-while loop. .fi .if n \{\ .RE @@ -3522,7 +4373,8 @@ for/while/do-while loop. .\} .nf call: used for invoking a user-defined subroutine. -Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' + + Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' .fi .if n \{\ .RE @@ -3552,17 +4404,17 @@ in curly braces. .\} .nf dump: prints all currently defined out-of-stream variables immediately - to stdout as JSON. +to stdout as JSON. - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. +With >, >>, or |, the data do not become part of the output record stream but +are instead redirected. - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. +The > and >> are for write and append, as in the shell, but (as with awk) the +file-overwrite for > is on first write, not per record. The | is for piping to +a process which will process the data. There will be one open file for each +distinct file name (for > and >>) or one subordinate process for each distinct +value of the piped-to command (for |). Output-formatting flags are taken from +the main command line. Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' @@ -3577,7 +4429,7 @@ dump: prints all currently defined out-of-stream variables immediately .\} .nf edump: prints all currently defined out-of-stream variables immediately - to stderr as JSON. +to stderr as JSON. Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' .fi @@ -3609,20 +4461,20 @@ in curly braces. .\} .nf emit: inserts an out-of-stream variable into the output record stream. Hashmap - indices present in the data but not slotted by emit arguments are not output. +indices present in the data but not slotted by emit arguments are not output. - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. +With >, >>, or |, the data do not become part of the output record stream but +are instead redirected. - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. +The > and >> are for write and append, as in the shell, but (as with awk) the +file-overwrite for > is on first write, not per record. The | is for piping to +a process which will process the data. There will be one open file for each +distinct file name (for > and >>) or one subordinate process for each distinct +value of the piped-to command (for |). Output-formatting flags are taken from +the main command line. - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. +You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, +etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' @@ -3636,7 +4488,7 @@ emit: inserts an out-of-stream variable into the output record stream. Hashmap Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - Please see http://johnkerl.org/miller/doc for more information. +Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE @@ -3646,20 +4498,20 @@ emit: inserts an out-of-stream variable into the output record stream. Hashmap .\} .nf emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the - output record stream. +output record stream. - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. +With >, >>, or |, the data do not become part of the output record stream but +are instead redirected. - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. +The > and >> are for write and append, as in the shell, but (as with awk) the +file-overwrite for > is on first write, not per record. The | is for piping to +a process which will process the data. There will be one open file for each +distinct file name (for > and >>) or one subordinate process for each distinct +value of the piped-to command (for |). Output-formatting flags are taken from +the main command line. - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. +You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, +etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' @@ -3670,7 +4522,7 @@ emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - Please see http://johnkerl.org/miller/doc for more information. +Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE @@ -3680,21 +4532,21 @@ emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the .\} .nf emitp: inserts an out-of-stream variable into the output record stream. - Hashmap indices present in the data but not slotted by emitp arguments are - output concatenated with ":". +Hashmap indices present in the data but not slotted by emitp arguments are +output concatenated with ":". - With >, >>, or |, the data do not become part of the output record stream but - are instead redirected. +With >, >>, or |, the data do not become part of the output record stream but +are instead redirected. - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. +The > and >> are for write and append, as in the shell, but (as with awk) the +file-overwrite for > is on first write, not per record. The | is for piping to +a process which will process the data. There will be one open file for each +distinct file name (for > and >>) or one subordinate process for each distinct +value of the piped-to command (for |). Output-formatting flags are taken from +the main command line. - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output if the output is redirected. See also mlr -h. +You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, +etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' @@ -3706,7 +4558,7 @@ emitp: inserts an out-of-stream variable into the output record stream. Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - Please see http://johnkerl.org/miller/doc for more information. +Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. .fi .if n \{\ .RE @@ -3717,8 +4569,9 @@ emitp: inserts an out-of-stream variable into the output record stream. .nf end: defines a block of statements to be executed after input records are ingested. The body statements must be wrapped in curly braces. -Example: 'end { emit @count }' -Example: 'end { eprint "Final count is " . @count }' + + Example: 'end { emit @count }' + Example: 'end { eprint "Final count is " . @count }' .fi .if n \{\ .RE @@ -3728,6 +4581,7 @@ Example: 'end { eprint "Final count is " . @count }' .\} .nf eprint: prints expression immediately to stderr. + Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' @@ -3740,6 +4594,7 @@ eprint: prints expression immediately to stderr. .\} .nf eprintn: prints expression immediately to stderr, without trailing newline. + Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' .fi .if n \{\ @@ -3762,9 +4617,9 @@ filter: includes/excludes the record in the output record stream. Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - Instead of put with 'filter false' you can simply use put -q. The following - uses the input record to accumulate data but only prints the running sum - without printing the input record: +Instead of put with 'filter false' you can simply use put -q. The following +uses the input record to accumulate data but only prints the running sum +without printing the input record: Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' .fi @@ -3788,12 +4643,17 @@ Type-checking happens at assignment: 'float x = 0' is an error. for: defines a for-loop using one of three styles. The body statements must be wrapped in curly braces. For-loop over stream record: + Example: 'for (k, v in $*) { ... }' + For-loop over out-of-stream variables: + Example: 'for (k, v in @counts) { ... }' Example: 'for ((k1, k2), v in @counts) { ... }' Example: 'for ((k1, k2, k3), v in @*) { ... }' + C-style for-loop: + Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' .fi .if n \{\ @@ -3804,7 +4664,8 @@ C-style for-loop: .\} .nf func: used for defining a user-defined function. -Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' + + Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' .fi .if n \{\ .RE @@ -3864,6 +4725,7 @@ Type-checking happens at assignment: 'num b = true' is an error. .\} .nf print: prints expression immediately to stdout. + Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' @@ -3876,6 +4738,7 @@ print: prints expression immediately to stdout. .\} .nf printn: prints expression immediately to stdout, without trailing newline. + Example: mlr --from f.dat put -q 'printn "."; end { print "" }' .fi .if n \{\ @@ -3897,7 +4760,7 @@ return value, which in turns results in a skipped assignment to an LHS. .\} .nf stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard error. +to print to standard error. .fi .if n \{\ .RE @@ -3907,7 +4770,7 @@ stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename .\} .nf stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename - to print to standard output. +to print to standard output. .fi .if n \{\ .RE @@ -3927,7 +4790,8 @@ Type-checking happens at assignment. .\} .nf subr: used for defining a subroutine. -Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' + + Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' .fi .if n \{\ .RE @@ -3937,27 +4801,27 @@ Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' .\} .nf tee: prints the current record to specified file. - This is an immediate print to the specified file (except for pprint format - which of course waits until the end of the input stream to format all output). +This is an immediate print to the specified file (except for pprint format +which of course waits until the end of the input stream to format all output). - The > and >> are for write and append, as in the shell, but (as with awk) the - file-overwrite for > is on first write, not per record. The | is for piping to - a process which will process the data. There will be one open file for each - distinct file name (for > and >>) or one subordinate process for each distinct - value of the piped-to command (for |). Output-formatting flags are taken from - the main command line. +The > and >> are for write and append, as in the shell, but (as with awk) the +file-overwrite for > is on first write, not per record. The | is for piping to +a process which will process the data. There will be one open file for each +distinct file name (for > and >>) or one subordinate process for each distinct +value of the piped-to command (for |). Output-formatting flags are taken from +the main command line. - You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, - etc., to control the format of the output. See also mlr -h. +You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, +etc., to control the format of the output. See also mlr -h. - emit with redirect and tee with redirect are identical, except tee can only - output $*. +emit with redirect and tee with redirect are identical, except tee can only +output $*. Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e]", $*' - Example: mlr --from f.dat put -q 'tee | "tr [a-z\e] [A-Z\e] > /tmp/data-".$a, $*' + Example: mlr --from f.dat put -q 'tee | "tr \e[a-z\e\e] \e[A-Z\e\e]", $*' + Example: mlr --from f.dat put -q 'tee | "tr \e[a-z\e\e] \e[A-Z\e\e] > /tmp/data-".$a, $*' Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' .fi @@ -3994,7 +4858,8 @@ unset: clears field(s) from the current record, or an out-of-stream or local var .\} .nf var: declares an untyped local variable in the current curly-braced scope. -Examples: 'var a=1', 'var xyz=""' + + Examples: 'var a=1', 'var xyz=""' .fi .if n \{\ .RE @@ -4148,4 +5013,4 @@ Miller is written by John Kerl . This manual page has been composed from Miller's help output by Eric MSP Veith . .SH "SEE ALSO" .sp -awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the miller website http://johnkerl.org/miller/doc +awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io diff --git a/man6/mkman.rb b/man6/mkman.rb deleted file mode 100755 index dfb78ae60..000000000 --- a/man6/mkman.rb +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env ruby - -# ================================================================ -# This is a manpage autogenerator for Miller. There are various tools out there -# for creating xroff-formatted manpages, but I wanted something with minimal -# external dependencies which would also automatically generate most of its -# output from the mlr executable itself. It turns out it's easy enough to get -# this in just a few lines of Ruby. -# -# Note for dev-viewing of the output: -# ./mkman.rb | groff -man -Tascii | less -# ================================================================ - -# ---------------------------------------------------------------- -def main - # In case the user running this has a .mlrrc - ENV['MLRRC'] = '__none__' - - print make_top - - print make_section('NAME', [ - "miller \\\- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON." - ]) - - print make_section('SYNOPSIS', [ -`mlr --help` - ]) - - print make_section('DESCRIPTION', [ -"""Miller operates on key-value-pair data while the familiar Unix tools operate -on integer-indexed fields: if the natural data structure for the latter is the -array, then Miller's natural data structure is the insertion-ordered hash map. -This encompasses a variety of data formats, including but not limited to the -familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as -a special case.) This manpage documents #{`mlr --version`.chomp}.""" - ]) - - print make_section('EXAMPLES', [ - "" - ]) - print make_code_block(`mlr help basic-examples`) - - print make_section('FILE FORMATS', []) - print make_code_block(`mlr help file-formats`) - - print make_section('HELP OPTIONS', []) - print make_code_block(`mlr help topics`) - - print make_section('VERB LIST', []) - print make_code_block(`mlr help list-verbs-as-paragraph`) - - print make_section('FUNCTION LIST', []) - print make_code_block(`mlr help list-functions-as-paragraph`) - - section_names = `mlr help list-flag-sections`.split("\n") - for section_name in section_names - print make_section(section_name.upcase, [""]) - print make_code_block(`mlr help show-help-for-section '#{section_name}'`) - end - - print make_section('AUXILIARY COMMANDS', []) - print make_code_block(`mlr aux-list`) - - print make_section('MLRRC', []) - print make_code_block(`mlr help mlrrc`) - - print make_section('REPL', []) - print make_code_block(`mlr repl -h`) - - verbs = `mlr help list-verbs` - print make_section('VERBS', [ - "" - ]) - verbs = verbs.strip.split("\n") - for verb in verbs - print make_subsection(verb, []) - print make_code_block(`mlr #{verb} -h`) - end - - functions = `mlr help list-functions` - print make_section('FUNCTIONS FOR FILTER/PUT', [ - "" - ]) - functions = functions.strip.split("\n").uniq - for function in functions - print make_subsection(function, []) - text = `mlr help function '#{function}'` - text = text.sub(function + ' ', '') - print make_code_block(text) - end - - keywords = `mlr help list-keywords` - print make_section('KEYWORDS FOR PUT AND FILTER', [ - "" - ]) - keywords = keywords.strip.split("\n").uniq - for keyword in keywords - print make_subsection(keyword, []) - text = `mlr help keyword '#{keyword}'` - print make_code_block(text) - end - - print make_section('AUTHOR', [ - "Miller is written by John Kerl .", - "This manual page has been composed from Miller's help output by Eric MSP Veith ." - ]) - print make_section('SEE ALSO', [ - "awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for " + - "Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io" - ]) -end - -# ================================================================ -def make_top() - t = Time::new - stamp = t.gmtime.strftime("%Y-%m-%d") - - # Portability definitions thanks to some asciidoc output - -"""'\\\" t -.\\\" Title: mlr -.\\\" Author: [see the \"AUTHOR\" section] -.\\\" Generator: #{$0} -.\\\" Date: #{stamp} -.\\\" Manual: \\ \\& -.\\\" Source: \\ \\& -.\\\" Language: English -.\\\" -.TH \"MILLER\" \"1\" \"#{stamp}\" \"\\ \\&\" \"\\ \\&\" -.\\\" ----------------------------------------------------------------- -.\\\" * Portability definitions -.\\\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\\\" http://bugs.debian.org/507673 -.\\\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\\\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \\n(.g .ds Aq \(aq -.el .ds Aq ' -.\\\" ----------------------------------------------------------------- -.\\\" * set default formatting -.\\\" ----------------------------------------------------------------- -.\\\" disable hyphenation -.nh -.\\\" disable justification (adjust text to left margin only) -.ad l -.\\\" ----------------------------------------------------------------- -""" -end - -# ---------------------------------------------------------------- -def make_section(title, paragraphs) - retval = ".SH \"#{title}\"\n" - paragraphs.each do |paragraph| - retval += ".sp\n" - retval += groff_encode(paragraph) + "\n" - end - retval -end - -# ---------------------------------------------------------------- -def make_subsection(title, paragraphs) - retval = ".SS \"#{title}\"\n" - paragraphs.each do |paragraph| - retval += ".sp\n" - retval += groff_encode(paragraph) + "\n" - end - retval -end - -# ---------------------------------------------------------------- -def make_subsubsection(title, paragraphs) - retval = ".sp\n"; - retval += "\\fB#{title}\\fR\n" - paragraphs.each do |paragraph| - retval += ".sp\n" - retval += groff_encode(paragraph) + "\n" - end - retval -end - -# ---------------------------------------------------------------- -def make_code_block(block) - retval = ".if n \\{\\\n" - retval += ".RS 0\n" - retval += ".\\}\n" - retval += ".nf\n" - # In case the line starts with a dot: - retval += block.gsub('\\', '\e').gsub(/^\./){'\&.'} - # In case the line starts with a single quote: - retval = retval.gsub(/^'/, '\(cq') - retval += ".fi\n" - retval += ".if n \\{\\\n" - retval += ".RE\n" -end - -# ---------------------------------------------------------------- -def groff_encode(line) - #line = line.gsub(/'/, '\(cq') - #line = line.gsub(/"/, '\(dq') - #line = line.gsub(/\./, '\&') - #line = line.gsub(/-/, '\-') - line = line.gsub(/\\([^-])/, '\e\1') - line = line.gsub(/^\./){'\&.'} - line -end - -# ================================================================ -main diff --git a/man6/mlr6.1 b/man6/mlr6.1 deleted file mode 100644 index 9967e7799..000000000 --- a/man6/mlr6.1 +++ /dev/null @@ -1,5016 +0,0 @@ -'\" t -.\" Title: mlr -.\" Author: [see the "AUTHOR" section] -.\" Generator: ./mkman.rb -.\" Date: 2021-11-04 -.\" Manual: \ \& -.\" Source: \ \& -.\" Language: English -.\" -.TH "MILLER" "1" "2021-11-04" "\ \&" "\ \&" -.\" ----------------------------------------------------------------- -.\" * Portability definitions -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.\" http://bugs.debian.org/507673 -.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html -.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.ie \n(.g .ds Aq (aq -.el .ds Aq ' -.\" ----------------------------------------------------------------- -.\" * set default formatting -.\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l -.\" ----------------------------------------------------------------- -.SH "NAME" -.sp -miller \- like awk, sed, cut, join, and sort for name-indexed data such as CSV and tabular JSON. -.SH "SYNOPSIS" -.sp -Usage: mlr [flags] {verb} [verb-dependent options ...] {zero or more file names} - -If zero file names are provided, standard input is read, e.g. - mlr --csv sort -f shape example.csv - -Output of one verb may be chained as input to another using "then", e.g. - mlr --csv stats1 -a min,mean,max -f quantity then sort -f color example.csv - -Please see 'mlr help topics' for more information. -Please also see https://johnkerl.org/miller6 - -.SH "DESCRIPTION" -.sp -Miller operates on key-value-pair data while the familiar Unix tools operate -on integer-indexed fields: if the natural data structure for the latter is the -array, then Miller's natural data structure is the insertion-ordered hash map. -This encompasses a variety of data formats, including but not limited to the -familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as -a special case.) This manpage documents Miller v6.0.0-dev. -.SH "EXAMPLES" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -mlr --icsv --opprint cat example.csv -mlr --icsv --opprint sort -f shape example.csv -mlr --icsv --opprint sort -f shape -nr index example.csv -mlr --icsv --opprint cut -f flag,shape example.csv -mlr --csv filter '$color == "red"' example.csv -mlr --icsv --ojson put '$ratio = $quantity / $rate' example.csv -mlr --icsv --opprint --from example.csv sort -nr index then cut -f shape,quantity -.fi -.if n \{\ -.RE -.SH "FILE FORMATS" -.if n \{\ -.RS 0 -.\} -.nf -CSV/CSV-lite: comma-separated values with separate header line -TSV: same but with tabs in places of commas -+---------------------+ -| apple,bat,cog | -| 1,2,3 | Record 1: "apple":"1", "bat":"2", "cog":"3" -| 4,5,6 | Record 2: "apple":"4", "bat":"5", "cog":"6" -+---------------------+ - -JSON (sequence or array of objects): -+---------------------+ -| { | -| "apple": 1, | Record 1: "apple":"1", "bat":"2", "cog":"3" -| "bat": 2, | -| "cog": 3 | -| } | -| { | -| "dish": { | Record 2: "dish:egg":"7", -| "egg": 7, | "dish:flint":"8", "garlic":"" -| "flint": 8 | -| }, | -| "garlic": "" | -| } | -+---------------------+ - -PPRINT: pretty-printed tabular -+---------------------+ -| apple bat cog | -| 1 2 3 | Record 1: "apple:"1", "bat":"2", "cog":"3" -| 4 5 6 | Record 2: "apple":"4", "bat":"5", "cog":"6" -+---------------------+ - -Markdown tabular (supported for output only): -+-----------------------+ -| | apple | bat | cog | | -| | --- | --- | --- | | -| | 1 | 2 | 3 | | Record 1: "apple:"1", "bat":"2", "cog":"3" -| | 4 | 5 | 6 | | Record 2: "apple":"4", "bat":"5", "cog":"6" -+-----------------------+ - -XTAB: pretty-printed transposed tabular -+---------------------+ -| apple 1 | Record 1: "apple":"1", "bat":"2", "cog":"3" -| bat 2 | -| cog 3 | -| | -| dish 7 | Record 2: "dish":"7", "egg":"8" -| egg 8 | -+---------------------+ - -DKVP: delimited key-value pairs (Miller default format) -+---------------------+ -| apple=1,bat=2,cog=3 | Record 1: "apple":"1", "bat":"2", "cog":"3" -| dish=7,egg=8,flint | Record 2: "dish":"7", "egg":"8", "3":"flint" -+---------------------+ - -NIDX: implicitly numerically indexed (Unix-toolkit style) -+---------------------+ -| the quick brown | Record 1: "1":"the", "2":"quick", "3":"brown" -| fox jumped | Record 2: "1":"fox", "2":"jumped" -+---------------------+ -.fi -.if n \{\ -.RE -.SH "HELP OPTIONS" -.if n \{\ -.RS 0 -.\} -.nf -Type 'mlr help {topic}' for any of the following: -Essentials: - mlr help topics - mlr help basic-examples - mlr help file-formats -Flags: - mlr help flags - mlr help list-separator-aliases - mlr help comments-in-data-flags - mlr help compressed-data-flags - mlr help csv-only-flags - mlr help file-format-flags - mlr help flatten-unflatten-flags - mlr help format-conversion-keystroke-saver-flags - mlr help json-only-flags - mlr help legacy-flags - mlr help miscellaneous-flags - mlr help output-colorization-flags - mlr help pprint-only-flags - mlr help separator-flags -Verbs: - mlr help list-verbs - mlr help usage-verbs - mlr help verb -Functions: - mlr help list-functions - mlr help list-function-classes - mlr help list-functions-in-class - mlr help usage-functions - mlr help usage-functions-by-class - mlr help function -Keywords: - mlr help list-keywords - mlr help usage-keywords - mlr help keyword -Other: - mlr help auxents - mlr help mlrrc - mlr help output-colorization - mlr help type-arithmetic-info -Shorthands: - mlr -g = mlr help flags - mlr -l = mlr help list-verbs - mlr -L = mlr help usage-verbs - mlr -f = mlr help list-functions - mlr -F = mlr help usage-functions - mlr -k = mlr help list-keywords - mlr -K = mlr help usage-keywords -Lastly, 'mlr help ...' will search for your text '...' using the sources of -\(cqmlr help flag', 'mlr help verb', 'mlr help function', and 'mlr help keyword'. -For things appearing in more than one place, e.g. 'sec2gmt' which is the name of a -verb as well as a function, use `mlr help verb sec2gmt' or `mlr help function sec2gmt' -to disambiguate. -.fi -.if n \{\ -.RE -.SH "VERB LIST" -.if n \{\ -.RS 0 -.\} -.nf -altkv bar bootstrap cat check clean-whitespace count-distinct count -count-similar cut decimate fill-down fill-empty filter flatten format-values -fraction gap grep group-by group-like having-fields head histogram json-parse -json-stringify join label least-frequent merge-fields most-frequent nest -nothing put regularize remove-empty-columns rename reorder repeat reshape -sample sec2gmtdate sec2gmt seqgen shuffle skip-trivial-records sort -sort-within-records stats1 stats2 step tac tail tee template top unflatten -uniq unsparsify -.fi -.if n \{\ -.RE -.SH "FUNCTION LIST" -.if n \{\ -.RS 0 -.\} -.nf -abs acos acosh any append apply arrayify asin asinh asserting_absent -asserting_array asserting_bool asserting_boolean asserting_empty -asserting_empty_map asserting_error asserting_float asserting_int -asserting_map asserting_nonempty_map asserting_not_array asserting_not_empty -asserting_not_map asserting_not_null asserting_null asserting_numeric -asserting_present asserting_string atan atan2 atanh bitcount boolean -capitalize cbrt ceil clean_whitespace collapse_whitespace cos cosh depth -dhms2fsec dhms2sec erf erfc every exp expm1 flatten float floor fmtnum fold -fsec2dhms fsec2hms get_keys get_values gmt2localtime gmt2sec gsub haskey -hexfmt hms2fsec hms2sec hostname int invqnorm is_absent is_array is_bool -is_boolean is_empty is_empty_map is_error is_float is_int is_map -is_nonempty_map is_not_array is_not_empty is_not_map is_not_null is_null -is_numeric is_present is_string joink joinkv joinv json_parse json_stringify -leafcount length localtime2gmt localtime2sec log log10 log1p logifit lstrip -madd mapdiff mapexcept mapselect mapsum max md5 mexp min mmul msub os pow -qnorm reduce regextract regextract_or_else round roundm rstrip sec2dhms -sec2gmt sec2gmtdate sec2hms sec2localdate sec2localtime select sgn sha1 sha256 -sha512 sin sinh sort splita splitax splitkv splitkvx splitnv splitnvx sqrt -ssub strftime strftime_local string strip strlen strptime strptime_local sub -substr substr0 substr1 system systime systimeint tan tanh tolower toupper -truncate typeof unflatten uptime urand urand32 urandint urandrange version ! -!= !=~ % & && * ** + - . .* .+ .- ./ / // < << <= <=> == =~ > >= >> >>> ?: ?? -??? ^ ^^ | || ~ -.fi -.if n \{\ -.RE -.SH "COMMENTS-IN-DATA FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -Miller lets you put comments in your data, such as - - # This is a comment for a CSV file - a,b,c - 1,2,3 - 4,5,6 - -Notes: - -* Comments are only honored at the start of a line. -* In the absence of any of the below four options, comments are data like - any other text. (The comments-in-data feature is opt-in.) -* When `--pass-comments` is used, comment lines are written to standard output - immediately upon being read; they are not part of the record stream. Results - may be counterintuitive. A suggestion is to place comments at the start of - data files. - ---pass-comments Immediately print commented lines (prefixed by `#`) - within the input. ---pass-comments-with {string} - Immediately print commented lines within input, with - specified prefix. ---skip-comments Ignore commented lines (prefixed by `#`) within the - input. ---skip-comments-with {string} - Ignore commented lines within input, with specified - prefix. -.fi -.if n \{\ -.RE -.SH "COMPRESSED-DATA FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -Miller offers a few different ways to handle reading data files - which have been compressed. - -* Decompression done within the Miller process itself: `--bz2in` `--gzin` `--zin` -* Decompression done outside the Miller process: `--prepipe` `--prepipex` - -Using `--prepipe` and `--prepipex` you can specify an action to be -taken on each input file. The prepipe command must be able to read from -standard input; it will be invoked with `{command} < {filename}`. The -prepipex command must take a filename as argument; it will be invoked with -`{command} {filename}`. - -Examples: - - mlr --prepipe gunzip - mlr --prepipe zcat -cf - mlr --prepipe xz -cd - mlr --prepipe cat - -Note that this feature is quite general and is not limited to decompression -utilities. You can use it to apply per-file filters of your choice. For output -compression (or other) utilities, simply pipe the output: -`mlr ... | {your compression command} > outputfilenamegoeshere` - -Lastly, note that if `--prepipe` or `--prepipex` is specified, it replaces any -decisions that might have been made based on the file suffix. Likewise, -`--gzin`/`--bz2in`/`--zin` are ignored if `--prepipe` is also specified. - ---bz2in Uncompress bzip2 within the Miller process. Done by - default if file ends in `.bz2`. ---gzin Uncompress gzip within the Miller process. Done by - default if file ends in `.gz`. ---prepipe {decompression command} - You can, of course, already do without this for - single input files, e.g. `gunzip < myfile.csv.gz | - mlr ...`. Allowed at the command line, but not in - `.mlrrc` to avoid unexpected code execution. ---prepipe-bz2 Same as `--prepipe bz2`, except this is allowed in - `.mlrrc`. ---prepipe-gunzip Same as `--prepipe gunzip`, except this is allowed in - `.mlrrc`. ---prepipe-zcat Same as `--prepipe zcat`, except this is allowed in - `.mlrrc`. ---prepipex {decompression command} - Like `--prepipe` with one exception: doesn't insert - `<` between command and filename at runtime. Useful - for some commands like `unzip -qc` which don't read - standard input. Allowed at the command line, but not - in `.mlrrc` to avoid unexpected code execution. ---zin Uncompress zlib within the Miller process. Done by - default if file ends in `.z`. -.fi -.if n \{\ -.RE -.SH "CSV-ONLY FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These are flags which are applicable to CSV format. - ---allow-ragged-csv-input or --ragged - If a data line has fewer fields than the header line, - fill remaining keys with empty string. If a data line - has more fields than the header line, use integer - field labels as in the implicit-header case. ---headerless-csv-output or --ho - Print only CSV data lines; do not print CSV header - lines. ---implicit-csv-header or --headerless-csv-input or --hi - Use 1,2,3,... as field labels, rather than from line - 1 of input files. Tip: combine with `label` to - recreate missing headers. ---no-implicit-csv-header Opposite of `--implicit-csv-header`. This is the - default anyway -- the main use is for the flags to - `mlr join` if you have main file(s) which are - headerless but you want to join in on a file which - does have a CSV header. Then you could use `mlr --csv - --implicit-csv-header join --no-implicit-csv-header - -l your-join-in-with-header.csv ... - your-headerless.csv`. --N Keystroke-saver for `--implicit-csv-header - --headerless-csv-output`. -.fi -.if n \{\ -.RE -.SH "FILE-FORMAT FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -See the File formats doc page, and or `mlr help file-formats`, for more -about file formats Miller supports. - -Examples: `--csv` for CSV-formatted input and output; `--icsv --opprint` for -CSV-formatted input and pretty-printed output. - -Please use `--iformat1 --oformat2` rather than `--format1 --oformat2`. -The latter sets up input and output flags for `format1`, not all of which -are overridden in all cases by setting output format to `format2`. - ---asv or --asvlite Use ASV format for input and output data. ---csv or -c Use CSV format for input and output data. ---csvlite Use CSV-lite format for input and output data. ---dkvp Use DKVP format for input and output data. ---gen-field-name Specify field name for --igen. Defaults to "i". ---gen-start Specify start value for --igen. Defaults to 1. ---gen-step Specify step value for --igen. Defaults to 1. ---gen-stop Specify stop value for --igen. Defaults to 100. ---iasv or --iasvlite Use ASV format for input data. ---icsv Use CSV format for input data. ---icsvlite Use CSV-lite format for input data. ---idkvp Use DKVP format for input data. ---igen Ignore input files and instead generate sequential - numeric input using --gen-field-name, --gen-start, - --gen-step, and --gen-stop values. See also the - seqgen verb, which is more useful/intuitive. ---ijson Use JSON format for input data. ---inidx Use NIDX format for input data. ---io {format name} Use format name for input and output data. For - example: `--io csv` is the same as `--csv`. ---ipprint Use PPRINT format for input data. ---itsv Use TSV format for input data. ---itsvlite Use TSV-lite format for input data. ---iusv or --iusvlite Use USV format for input data. ---ixtab Use XTAB format for input data. ---json or -j Use JSON format for input and output data. ---nidx Use NIDX format for input and output data. ---oasv or --oasvlite Use ASV format for output data. ---ocsv Use CSV format for output data. ---ocsvlite Use CSV-lite format for output data. ---odkvp Use DKVP format for output data. ---ojson Use JSON format for output data. ---omd Use markdown-tabular format for output data. ---onidx Use NIDX format for output data. ---opprint Use PPRINT format for output data. ---otsv Use TSV format for output data. ---otsvlite Use TSV-lite format for output data. ---ousv or --ousvlite Use USV format for output data. ---oxtab Use XTAB format for output data. ---pprint Use PPRINT format for input and output data. ---tsv Use TSV format for input and output data. ---tsvlite or -t Use TSV-lite format for input and output data. ---usv or --usvlite Use USV format for input and output data. ---xtab Use XTAB format for input and output data. --i {format name} Use format name for input data. For example: `-i csv` - is the same as `--icsv`. --o {format name} Use format name for output data. For example: `-o - csv` is the same as `--ocsv`. -.fi -.if n \{\ -.RE -.SH "FLATTEN-UNFLATTEN FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These flags control how Miller converts record values which are maps or arrays, when input is JSON and ouput is non-JSON (flattening) or input is non-JSON and output is JSON (unflattening). - -See the Flatten/unflatten doc page for more information. - ---flatsep or --jflatsep {string} - Separator for flattening multi-level JSON keys, e.g. - `{"a":{"b":3}}` becomes `a:b => 3` for non-JSON - formats. Defaults to `.`. ---no-auto-flatten When output is non-JSON, suppress the default - auto-flatten behavior. Default: if `$y = [7,8,9]` - then this flattens to `y.1=7,y.2=8,y.3=9, and - similarly for maps. With `--no-auto-flatten`, instead - we get `$y=[1, 2, 3]`. ---no-auto-unflatten When input non-JSON and output is JSON, suppress the - default auto-unflatten behavior. Default: if the - input has `y.1=7,y.2=8,y.3=9` then this unflattens to - `$y=[7,8,9]`. flattens to `y.1=7,y.2=8,y.3=9. With - `--no-auto-flatten`, instead we get - `${y.1}=7,${y.2}=8,${y.3}=9`. ---xvright Right-justify values for XTAB format. -.fi -.if n \{\ -.RE -.SH "FORMAT-CONVERSION KEYSTROKE-SAVER FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -As keystroke-savers for format-conversion you may use the following. -The letters c, t, j, d, n, x, p, and m refer to formats CSV, TSV, DKVP, NIDX, -JSON, XTAB, PPRINT, and markdown, respectively. Note that markdown format is -available for output only. - -| In\eout | CSV | TSV | JSON | DKVP | NIDX | XTAB | PPRINT | Markdown | -+--------+-------+-------+--------+--------+--------+--------+--------+----------+ -| CSV | | --c2t | --c2j | --c2d | --c2n | --c2x | --c2p | --c2m | -| TSV | --t2c | | --t2j | --t2d | --t2n | --t2x | --t2p | --t2m | -| JSON | --j2c | --j2t | | --j2d | --j2n | --j2x | --j2p | --j2m | -| DKVP | --d2c | --d2t | --d2j | | --d2n | --d2x | --d2p | --d2m | -| NIDX | --n2c | --n2t | --n2j | --n2d | | --n2x | --n2p | --n2m | -| XTAB | --x2c | --x2t | --x2j | --x2d | --x2n | | --x2p | --x2m | -| PPRINT | --p2c | --p2t | --p2j | --p2d | --p2n | --p2x | | --p2m | - --p Keystroke-saver for `--nidx --fs space --repifs`. --T Keystroke-saver for `--nidx --fs tab`. -.fi -.if n \{\ -.RE -.SH "JSON-ONLY FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These are flags which are applicable to JSON format. - ---jlistwrap or --jl Wrap JSON output in outermost `[ ]`. ---jvstack Put one key-value pair per line for JSON output - (multi-line output). ---no-jvstack Put objects/arrays all on one line for JSON output. -.fi -.if n \{\ -.RE -.SH "LEGACY FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These are flags which don't do anything in the current Miller version. -They are accepted as no-op flags in order to keep old scripts from breaking. - ---jknquoteint Type information from JSON input files is now - preserved throughout the processing stream. ---jquoteall Type information from JSON input files is now - preserved throughout the processing stream. ---json-fatal-arrays-on-input - Miller now supports arrays as of version 6. ---json-map-arrays-on-input - Miller now supports arrays as of version 6. ---json-skip-arrays-on-input - Miller now supports arrays as of version 6. ---jsonx The `--jvstack` flag is now default true in Miller 6. ---jvquoteall Type information from JSON input files is now - preserved throughout the processing stream. ---mmap Miller no longer uses memory-mapping to access data - files. ---no-fflush The current implementation of Miller does not use - buffered output, so there is no longer anything to - suppress here. ---no-mmap Miller no longer uses memory-mapping to access data - files. ---ojsonx The `--jvstack` flag is now default true in Miller 6. ---quote-all Ignored as of version 6. Types are inferred/retained - through the processing flow now. ---quote-minimal Ignored as of version 6. Types are inferred/retained - through the processing flow now. ---quote-none Ignored as of version 6. Types are inferred/retained - through the processing flow now. ---quote-numeric Ignored as of version 6. Types are inferred/retained - through the processing flow now. ---quote-original Ignored as of version 6. Types are inferred/retained - through the processing flow now. ---vflatsep Ignored as of version 6. This functionality is - subsumed into JSON formatting. -.fi -.if n \{\ -.RE -.SH "MISCELLANEOUS FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These are flags which don't fit into any other category. ---from {filename} Use this to specify an input file before the verb(s), - rather than after. May be used more than once. - Example: `mlr --from a.dat --from b.dat cat` is the - same as `mlr cat a.dat b.dat`. ---infer-int-as-float or -A - Cast all integers in data files to floats. ---infer-no-octal or -O Treat numbers like 0123 in data files as string - "0123", not octal for decimal 83 etc. ---infer-none or -S Don't treat values like 123 or 456.7 in data files as - int/float; leave them as strings. ---load {filename} Load DSL script file for all put/filter operations on - the command line. If the name following `--load` is a - directory, load all `*.mlr` files in that directory. - This is just like `put -f` and `filter -f` except - it's up-front on the command line, so you can do - something like `alias mlr='mlr --load ~/myscripts'` - if you like. ---mfrom {filenames} Use this to specify one of more input files before - the verb(s), rather than after. May be used more than - once. The list of filename must end with `--`. This - is useful for example since `--from *.csv` doesn't do - what you might hope but `--mfrom *.csv --` does. ---mload {filenames} Like `--load` but works with more than one filename, - e.g. `--mload *.mlr --`. ---nr-progress-mod {m} With m a positive integer: print filename and record - count to os.Stderr every m input records. ---ofmt {format} E.g. `%.18f`, `%.0f`, `%9.6e`. Please use - sprintf-style codes for floating-point nummbers. If - not specified, default formatting is used. See also - the `fmtnum` function and the `format-values` verb. ---seed {n} with `n` of the form `12345678` or `0xcafefeed`. For - `put`/`filter` `urand`, `urandint`, and `urand32`. ---tz {timezone} Specify timezone, overriding `$TZ` environment - variable (if any). --I Process files in-place. For each file name on the - command line, output is written to a temp file in the - same directory, which is then renamed over the - original. Each file is processed in isolation: if the - output format is CSV, CSV headers will be present in - each output file, statistics are only over each - file's own records; and so on. --n Process no input files, nor standard input either. - Useful for `mlr put` with `begin`/`end` statements - only. (Same as `--from /dev/null`.) Also useful in - `mlr -n put -v '...'` for analyzing abstract syntax - trees (if that's your thing). -.fi -.if n \{\ -.RE -.SH "OUTPUT-COLORIZATION FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -Miller uses colors to highlight outputs. You can specify color preferences. -Note: output colorization does not work on Windows. - -Things having colors: - -* Keys in CSV header lines, JSON keys, etc -* Values in CSV data lines, JSON scalar values, etc in regression-test output -* Some online-help strings - -Rules for coloring: - -* By default, colorize output only if writing to stdout and stdout is a TTY. - * Example: color: `mlr --csv cat foo.csv` - * Example: no color: `mlr --csv cat foo.csv > bar.csv` - * Example: no color: `mlr --csv cat foo.csv | less` -* The default colors were chosen since they look OK with white or black - terminal background, and are differentiable with common varieties of human - color vision. - -Mechanisms for coloring: - -* Miller uses ANSI escape sequences only. This does not work on Windows - except within Cygwin. -* Requires `TERM` environment variable to be set to non-empty string. -* Doesn't try to check to see whether the terminal is capable of 256-color - ANSI vs 16-color ANSI. Note that if colors are in the range 0..15 - then 16-color ANSI escapes are used, so this is in the user's control. - -How you can control colorization: - -* Suppression/unsuppression: - * Environment variable `export MLR_NO_COLOR=true` means don't color - even if stdout+TTY. - * Environment variable `export MLR_ALWAYS_COLOR=true` means do color - even if not stdout+TTY. - For example, you might want to use this when piping mlr output to `less -r`. - * Command-line flags `--no-color` or `-M`, `--always-color` or `-C`. - -* Color choices can be specified by using environment variables, or command-line - flags, with values 0..255: - * `export MLR_KEY_COLOR=208`, `MLR_VALUE_COLOR=33`, etc.: - `MLR_KEY_COLOR` `MLR_VALUE_COLOR` `MLR_PASS_COLOR` `MLR_FAIL_COLOR` - `MLR_REPL_PS1_COLOR` `MLR_REPL_PS2_COLOR` `MLR_HELP_COLOR` - * Command-line flags `--key-color 208`, `--value-color 33`, etc.: - `--key-color` `--value-color` `--pass-color` `--fail-color` - `--repl-ps1-color` `--repl-ps2-color` `--help-color` - * This is particularly useful if your terminal's background color clashes - with current settings. - -If environment-variable settings and command-line flags are both provided, the -latter take precedence. - -Please do mlr `--list-color-codes` to see the available color codes (like 170), -and `mlr --list-color-names` to see available names (like `orchid`). - ---always-color or -C Instructs Miller to colorize output even when it - normally would not. Useful for piping output to `less - -r`. ---fail-color Specify the color (see `--list-color-codes` and - `--list-color-names`) for failing cases in `mlr - regtest`. ---help-color Specify the color (see `--list-color-codes` and - `--list-color-names`) for highlights in `mlr help` - output. ---key-color Specify the color (see `--list-color-codes` and - `--list-color-names`) for record keys. ---list-color-codes Show the available color codes in the range 0..255, - such as 170 for example. ---list-color-names Show the names for the available color codes, such as - `orchid` for example. ---no-color or -M Instructs Miller to not colorize any output. ---pass-color Specify the color (see `--list-color-codes` and - `--list-color-names`) for passing cases in `mlr - regtest`. ---value-color Specify the color (see `--list-color-codes` and - `--list-color-names`) for record values. -.fi -.if n \{\ -.RE -.SH "PPRINT-ONLY FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -These are flags which are applicable to PPRINT output format. - ---barred Prints a border around PPRINT output (not available - for input). ---right Right-justifies all fields for PPRINT output. -.fi -.if n \{\ -.RE -.SH "SEPARATOR FLAGS" -.sp - -.if n \{\ -.RS 0 -.\} -.nf -See the Separators doc page for more about record separators, field -separators, and pair separators. Also see the File formats doc page, or -`mlr help file-formats`, for more about the file formats Miller supports. - -In brief: - -* For DKVP records like `x=1,y=2,z=3`, the fields are separated by a comma, - the key-value pairs are separated by a comma, and each record is separated - from the next by a newline. -* Each file format has its own default separators. -* Most formats, such as CSV, don't support pair-separators: keys are on the CSV - header line and values are on each CSV data line; keys and values are not - placed next to one another. -* Some separators are not programmable: for example JSON uses a colon as a - pair separator but this is non-modifiable in the JSON spec. -* You can set separators differently between Miller's input and output -- - hence `--ifs` and `--ofs`, etc. - -Notes about line endings: - -* Default line endings (`--irs` and `--ors`) are newline - which is interpreted to accept carriage-return/newline files (e.g. on Windows) - for input, and to produce platform-appropriate line endings on output. - -Notes about all other separators: - -* IPS/OPS are only used for DKVP and XTAB formats, since only in these formats - do key-value pairs appear juxtaposed. -* IRS/ORS are ignored for XTAB format. Nominally IFS and OFS are newlines; - XTAB records are separated by two or more consecutive IFS/OFS -- i.e. - a blank line. Everything above about `--irs/--ors/--rs auto` becomes `--ifs/--ofs/--fs` - auto for XTAB format. (XTAB's default IFS/OFS are "auto".) -* OFS must be single-character for PPRINT format. This is because it is used - with repetition for alignment; multi-character separators would make - alignment impossible. -* OPS may be multi-character for XTAB format, in which case alignment is - disabled. -* TSV is simply CSV using tab as field separator (`--fs tab`). -* FS/PS are ignored for markdown format; RS is used. -* All FS and PS options are ignored for JSON format, since they are not relevant - to the JSON format. -* You can specify separators in any of the following ways, shown by example: - - Type them out, quoting as necessary for shell escapes, e.g. - `--fs '|' --ips :` - - C-style escape sequences, e.g. `--rs '\er\en' --fs '\et'`. - - To avoid backslashing, you can use any of the following names: - - ascii_esc = "\ex1b" - ascii_etx = "\ex04" - ascii_fs = "\ex1c" - ascii_gs = "\ex1d" - ascii_null = "\ex01" - ascii_rs = "\ex1e" - ascii_soh = "\ex02" - ascii_stx = "\ex03" - ascii_us = "\ex1f" - asv_fs = "\ex1f" - asv_rs = "\ex1e" - colon = ":" - comma = "," - cr = "\er" - crcr = "\er\er" - crlf = "\er\en" - crlfcrlf = "\er\en\er\en" - equals = "=" - lf = "\en" - lflf = "\en\en" - newline = "\en" - pipe = "|" - semicolon = ";" - slash = "/" - space = " " - spaces = "( )+" - tab = "\et" - tabs = "(\et)+" - usv_fs = "\exe2\ex90\ex9f" - usv_rs = "\exe2\ex90\ex9e" - whitespace = "([ \et])+" - -* Default separators by format: - - Format FS PS RS - csv "," N/A "\en" - csvlite "," N/A "\en" - dkvp "," "=" "\en" - json N/A N/A N/A - markdown " " N/A "\en" - nidx " " N/A "\en" - pprint " " N/A "\en" - xtab "\en" " " "\en\en" - ---fs {string} Specify FS for input and output. ---ifs {string} Specify FS for input. ---ips {string} Specify PS for input. ---irs {string} Specify RS for input. ---no-ifs-regex Don't treat IFS value as a regular expression. Useful - if your IFS is ".". ---no-ips-regex Don't treat IPS value as a regular expression. Useful - if your IPS is ".". ---ofs {string} Specify FS for output. ---ops {string} Specify PS for output. ---ors {string} Specify RS for output. ---ps {string} Specify PS for input and output. ---repifs Let IFS be repeated: e.g. for splitting on multiple - spaces. ---rs {string} Specify RS for input and output. -.fi -.if n \{\ -.RE -.SH "AUXILIARY COMMANDS" -.if n \{\ -.RS 0 -.\} -.nf -Available subcommands: - aux-list - hex - lecat - termcvt - unhex - help - regtest - repl -For more information, please invoke mlr {subcommand} --help. -.fi -.if n \{\ -.RE -.SH "MLRRC" -.if n \{\ -.RS 0 -.\} -.nf -You can set up personal defaults via a $HOME/.mlrrc and/or ./.mlrrc. -For example, if you usually process CSV, then you can put "--csv" in your .mlrrc file -and that will be the default input/output format unless otherwise specified on the command line. - -The .mlrrc file format is one "--flag" or "--option value" per line, with the leading "--" optional. -Hash-style comments and blank lines are ignored. - -Sample .mlrrc: -# Input and output formats are CSV by default (unless otherwise specified -# on the mlr command line): -csv -# These are no-ops for CSV, but when I do use JSON output, I want these -# pretty-printing options to be used: -jvstack -jlistwrap - -How to specify location of .mlrrc: -* If $MLRRC is set: - o If its value is "__none__" then no .mlrrc files are processed. - o Otherwise, its value (as a filename) is loaded and processed. If there are syntax - errors, they abort mlr with a usage message (as if you had mistyped something on the - command line). If the file can't be loaded at all, though, it is silently skipped. - o Any .mlrrc in your home directory or current directory is ignored whenever $MLRRC is - set in the environment. -* Otherwise: - o If $HOME/.mlrrc exists, it's then processed as above. - o If ./.mlrrc exists, it's then also processed as above. - (I.e. current-directory .mlrrc defaults are stacked over home-directory .mlrrc defaults.) - -See also: -https://miller.readthedocs.io/en/latest/customization.html -.fi -.if n \{\ -.RE -.SH "REPL" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr repl [options] {zero or more data-file names} --v Prints the expressions's AST (abstract syntax tree), which gives - full transparency on the precedence and associativity rules of - Miller's grammar, to stdout. - --d Like -v but uses a parenthesized-expression format for the AST. - --D Like -d but with output all on one line. - --w Show warnings about uninitialized variables - --q Don't show startup banner - --s Don't show prompts - ---load {DSL script file} Load script file before presenting the prompt. - If the name following --load is a directory, load all "*.mlr" files - in that directory. - ---mload {DSL script files} -- Like --load but works with more than one filename, - e.g. '--mload *.mlr --'. - --h|--help Show this message. - -Or any --icsv, --ojson, etc. reader/writer options as for the main Miller command line. - -Any data-file names are opened just as if you had waited and typed :open {filenames} -at the Miller REPL prompt. -.fi -.if n \{\ -.RE -.SH "VERBS" -.sp - -.SS "altkv" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr altkv [options] -Given fields with values of the form a,b,c,d,e,f emits a=b,c=d,e=f pairs. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "bar" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr bar [options] -Replaces a numeric field with a number of asterisks, allowing for cheesy -bar plots. These align best with --opprint or --oxtab output format. -Options: --f {a,b,c} Field names to convert to bars. ---lo {lo} Lower-limit value for min-width bar: default '0.000000'. ---hi {hi} Upper-limit value for max-width bar: default '100.000000'. --w {n} Bar-field width: default '40'. ---auto Automatically computes limits, ignoring --lo and --hi. - Holds all records in memory before producing any output. --c {character} Fill character: default '*'. --x {character} Out-of-bounds character: default '#'. --b {character} Blank character: default '.'. -Nominally the fill, out-of-bounds, and blank characters will be strings of length 1. -However you can make them all longer if you so desire. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "bootstrap" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr bootstrap [options] -Emits an n-sample, with replacement, of the input records. -See also mlr sample and mlr shuffle. -Options: - -n Number of samples to output. Defaults to number of input records. - Must be non-negative. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "cat" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr cat [options] -Passes input records directly to output. Most useful for format conversion. -Options: --n Prepend field "n" to each record with record-counter starting at 1. --N {name} Prepend field {name} to each record with record-counter starting at 1. --g {a,b,c} Optional group-by-field names for counters, e.g. a,b,c --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "check" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr check [options] -Consumes records without printing any output. -Useful for doing a well-formatted check on input data. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "clean-whitespace" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr clean-whitespace [options] -For each record, for each field in the record, whitespace-cleans the keys and/or -values. Whitespace-cleaning entails stripping leading and trailing whitespace, -and replacing multiple whitespace with singles. For finer-grained control, -please see the DSL functions lstrip, rstrip, strip, collapse_whitespace, -and clean_whitespace. - -Options: --k|--keys-only Do not touch values. --v|--values-only Do not touch keys. -It is an error to specify -k as well as -v -- to clean keys and values, -leave off -k as well as -v. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "count-distinct" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count-distinct [options] -Prints number of records having distinct values for specified field names. -Same as uniq -c. - -Options: --f {a,b,c} Field names for distinct count. --n Show only the number of distinct values. Not compatible with -u. --o {name} Field name for output count. Default "count". - Ignored with -u. --u Do unlashed counts for multiple field names. With -f a,b and - without -u, computes counts for distinct combinations of a - and b field values. With -f a,b and with -u, computes counts - for distinct a field values and counts for distinct b field - values separately. -.fi -.if n \{\ -.RE -.SS "count" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count [options] -Prints number of records, optionally grouped by distinct values for specified field names. -Options: --g {a,b,c} Optional group-by-field names for counts, e.g. a,b,c --n {n} Show only the number of distinct values. Not interesting without -g. --o {name} Field name for output-count. Default "count". --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "count-similar" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr count-similar [options] -Ingests all records, then emits each record augmented by a count of -the number of other records having the same group-by field values. -Options: --g {a,b,c} Group-by-field names for counts, e.g. a,b,c --o {name} Field name for output-counts. Defaults to "count". --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "cut" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr cut [options] -Passes through input records with specified fields included/excluded. -Options: - -f {a,b,c} Comma-separated field names for cut, e.g. a,b,c. - -o Retain fields in the order specified here in the argument list. - Default is to retain them in the order found in the input data. - -x|--complement Exclude, rather than include, field names specified by -f. - -r Treat field names as regular expressions. "ab", "a.*b" will - match any field name containing the substring "ab" or matching - "a.*b", respectively; anchors of the form "^ab$", "^a.*b$" may - be used. The -o flag is ignored when -r is present. --h|--help Show this message. -Examples: - mlr cut -f hostname,status - mlr cut -x -f hostname,status - mlr cut -r -f '^status$,sda[0-9]' - mlr cut -r -f '^status$,"sda[0-9]"' - mlr cut -r -f '^status$,"sda[0-9]"i' (this is case-insensitive) -.fi -.if n \{\ -.RE -.SS "decimate" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr decimate [options] -Passes through one of every n records, optionally by category. -Options: - -b Decimate by printing first of every n. - -e Decimate by printing last of every n (default). - -g {a,b,c} Optional group-by-field names for decimate counts, e.g. a,b,c. - -n {n} Decimation factor (default 10). --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "fill-down" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr fill-down [options] -If a given record has a missing value for a given field, fill that from -the corresponding value from a previous record, if any. -By default, a 'missing' field either is absent, or has the empty-string value. -With -a, a field is 'missing' only if it is absent. - -Options: - --all Operate on all fields in the input. - -a|--only-if-absent If a given record has a missing value for a given field, - fill that from the corresponding value from a previous record, if any. - By default, a 'missing' field either is absent, or has the empty-string value. - With -a, a field is 'missing' only if it is absent. - -f Field names for fill-down. - -h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "fill-empty" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr fill-empty [options] -Fills empty-string fields with specified fill-value. -Options: --v {string} Fill-value: defaults to "N/A" -.fi -.if n \{\ -.RE -.SS "filter" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr filter [options] {DSL expression} -Options: --f {file name} File containing a DSL expression (see examples below). If the filename - is a directory, all *.mlr files in that directory are loaded. - --e {expression} You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - -(If you mix -e and -f then the expressions are evaluated in the order encountered. -Since the expression pieces are simply concatenated, please be sure to use intervening -semicolons to separate expressions.) - --s name=value: Predefines out-of-stream variable @name to have - Thus mlr put -s foo=97 '$column += @foo' is like - mlr put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - --x (default false) Prints records for which {expression} evaluates to false, not true, - i.e. invert the sense of the filter expression. - --q Does not include the modified record in the output stream. - Useful for when all desired output is in begin and/or end blocks. - --S and -F: There are no-ops in Miller 6 and above, since now type-inferencing is done - by the record-readers before filter/put is executed. Supported as no-op pass-through - flags for backward compatibility. - --h|--help Show this message. - -Parser-info options: - --w Print warnings about things like uninitialized variables. - --W Same as -w, but exit the process if there are any warnings. - --p Prints the expressions's AST (abstract syntax tree), which gives full - transparency on the precedence and associativity rules of Miller's grammar, - to stdout. - --d Like -p but uses a parenthesized-expression format for the AST. - --D Like -d but with output all on one line. - --E Echo DSL expression before printing parse-tree - --v Same as -E -p. - --X Exit after parsing but before stream-processing. Useful with -v/-d/-D, if you - only want to look at parser information. - -Records will pass the filter depending on the last bare-boolean statement in -the DSL expression. That can be the result of <, ==, >, etc., the return value of a function call -which returns boolean, etc. - -Examples: - mlr --csv --from example.csv filter '$color == "red"' - mlr --csv --from example.csv filter '$color == "red" && flag == true' -More example filter expressions: - First record in each file: - 'FNR == 1' - Subsampling: - 'urand() < 0.001' - Compound booleans: - '$color != "blue" && $value > 4.2' - '($x < 0.5 && $y < 0.5) || ($x > 0.5 && $y > 0.5)' - Regexes with case-insensitive flag - '($name =~ "^sys.*east$") || ($name =~ "^dev.[0-9]+"i)' - Assignments, then bare-boolean filter statement: - '$ab = $a+$b; $cd = $c+$d; $ab != $cd' - Bare-boolean filter statement within a conditional: - 'if (NR < 100) { - $x > 0.3; - } else { - $x > 0.002; - } - ' - Using 'any' higher-order function to see if $index is 10, 20, or 30: - 'any([10,20,30], func(e) {return $index == e})' - -See also https://johnkerl.org/miller6/reference-dsl for more context. -.fi -.if n \{\ -.RE -.SS "flatten" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr flatten [options] -Flattens multi-level maps to single-level ones. Example: field with name 'a' -and value '{"b": { "c": 4 }}' becomes name 'a.b.c' and value 4. -Options: --f Comma-separated list of field names to flatten (default all). --s Separator, defaulting to mlr --flatsep value. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "format-values" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr format-values [options] -Applies format strings to all field values, depending on autodetected type. -* If a field value is detected to be integer, applies integer format. -* Else, if a field value is detected to be float, applies float format. -* Else, applies string format. - -Note: this is a low-keystroke way to apply formatting to many fields. To get -finer control, please see the fmtnum function within the mlr put DSL. - -Note: this verb lets you apply arbitrary format strings, which can produce -undefined behavior and/or program crashes. See your system's "man printf". - -Options: --i {integer format} Defaults to "%d". - Examples: "%06lld", "%08llx". - Note that Miller integers are long long so you must use - formats which apply to long long, e.g. with ll in them. - Undefined behavior results otherwise. --f {float format} Defaults to "%f". - Examples: "%8.3lf", "%.6le". - Note that Miller floats are double-precision so you must - use formats which apply to double, e.g. with l[efg] in them. - Undefined behavior results otherwise. --s {string format} Defaults to "%s". - Examples: "_%s", "%08s". - Note that you must use formats which apply to string, e.g. - with s in them. Undefined behavior results otherwise. --n Coerce field values autodetected as int to float, and then - apply the float format. -.fi -.if n \{\ -.RE -.SS "fraction" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr fraction [options] -For each record's value in specified fields, computes the ratio of that -value to the sum of values in that field over all input records. -E.g. with input records x=1 x=2 x=3 and x=4, emits output records -x=1,x_fraction=0.1 x=2,x_fraction=0.2 x=3,x_fraction=0.3 and x=4,x_fraction=0.4 - -Note: this is internally a two-pass algorithm: on the first pass it retains -input records and accumulates sums; on the second pass it computes quotients -and emits output records. This means it produces no output until all input is read. - -Options: --f {a,b,c} Field name(s) for fraction calculation --g {d,e,f} Optional group-by-field name(s) for fraction counts --p Produce percents [0..100], not fractions [0..1]. Output field names - end with "_percent" rather than "_fraction" --c Produce cumulative distributions, i.e. running sums: each output - value folds in the sum of the previous for the specified group - E.g. with input records x=1 x=2 x=3 and x=4, emits output records - x=1,x_cumulative_fraction=0.1 x=2,x_cumulative_fraction=0.3 - x=3,x_cumulative_fraction=0.6 and x=4,x_cumulative_fraction=1.0 -.fi -.if n \{\ -.RE -.SS "gap" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr gap [options] -Emits an empty record every n records, or when certain values change. -Options: -Emits an empty record every n records, or when certain values change. --g {a,b,c} Print a gap whenever values of these fields (e.g. a,b,c) changes. --n {n} Print a gap every n records. -One of -f or -g is required. --n is ignored if -g is present. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "grep" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr grep [options] {regular expression} -Passes through records which match the regular expression. -Options: --i Use case-insensitive search. --v Invert: pass through records which do not match the regex. --h|--help Show this message. -Note that "mlr filter" is more powerful, but requires you to know field names. -By contrast, "mlr grep" allows you to regex-match the entire record. It does -this by formatting each record in memory as DKVP, using command-line-specified -ORS/OFS/OPS, and matching the resulting line against the regex specified -here. In particular, the regex is not applied to the input stream: if you -have CSV with header line "x,y,z" and data line "1,2,3" then the regex will -be matched, not against either of these lines, but against the DKVP line -"x=1,y=2,z=3". Furthermore, not all the options to system grep are supported, -and this command is intended to be merely a keystroke-saver. To get all the -features of system grep, you can do - "mlr --odkvp ... | grep ... | mlr --idkvp ..." -.fi -.if n \{\ -.RE -.SS "group-by" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr group-by [options] {comma-separated field names} -Outputs records in batches having identical values at specified field names.Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "group-like" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr group-like [options] -Outputs records in batches having identical field names. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "having-fields" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr having-fields [options] -Conditionally passes through records depending on each record's field names. -Options: - --at-least {comma-separated names} - --which-are {comma-separated names} - --at-most {comma-separated names} - --all-matching {regular expression} - --any-matching {regular expression} - --none-matching {regular expression} -Examples: - mlr having-fields --which-are amount,status,owner - mlr having-fields --any-matching 'sda[0-9]' - mlr having-fields --any-matching '"sda[0-9]"' - mlr having-fields --any-matching '"sda[0-9]"i' (this is case-insensitive) -.fi -.if n \{\ -.RE -.SS "head" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr head [options] -Passes through the first n records, optionally by category. -Without -g, ceases consuming more input (i.e. is fast) when n records have been read. -Options: --g {a,b,c} Optional group-by-field names for head counts, e.g. a,b,c. --n {n} Head-count to print. Default 10. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "histogram" -.if n \{\ -.RS 0 -.\} -.nf -Just a histogram. Input values < lo or > hi are not counted. -Usage: mlr histogram [options] --f {a,b,c} Value-field names for histogram counts ---lo {lo} Histogram low value ---hi {hi} Histogram high value ---nbins {n} Number of histogram bins. Defaults to 20. ---auto Automatically computes limits, ignoring --lo and --hi. - Holds all values in memory before producing any output. --o {prefix} Prefix for output field name. Default: no prefix. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "json-parse" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr json-parse [options] -Tries to convert string field values to parsed JSON, e.g. "[1,2,3]" -> [1,2,3]. -Options: --f {...} Comma-separated list of field names to json-parse (default all). --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "json-stringify" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr json-stringify [options] -Produces string field values from field-value data, e.g. [1,2,3] -> "[1,2,3]". -Options: --f {...} Comma-separated list of field names to json-parse (default all). ---jvstack Produce multi-line JSON output. ---no-jvstack Produce single-line JSON output per record (default). --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "join" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr join [options] -Joins records from specified left file name with records from all file names -at the end of the Miller argument list. -Functionality is essentially the same as the system "join" command, but for -record streams. -Options: - -f {left file name} - -j {a,b,c} Comma-separated join-field names for output - -l {a,b,c} Comma-separated join-field names for left input file; - defaults to -j values if omitted. - -r {a,b,c} Comma-separated join-field names for right input file(s); - defaults to -j values if omitted. - --lp {text} Additional prefix for non-join output field names from - the left file - --rp {text} Additional prefix for non-join output field names from - the right file(s) - --np Do not emit paired records - --ul Emit unpaired records from the left file - --ur Emit unpaired records from the right file(s) - -s|--sorted-input Require sorted input: records must be sorted - lexically by their join-field names, else not all records will - be paired. The only likely use case for this is with a left - file which is too big to fit into system memory otherwise. - -u Enable unsorted input. (This is the default even without -u.) - In this case, the entire left file will be loaded into memory. - --prepipe {command} As in main input options; see mlr --help for details. - If you wish to use a prepipe command for the main input as well - as here, it must be specified there as well as here. - --prepipex {command} Likewise. -File-format options default to those for the right file names on the Miller -argument list, but may be overridden for the left file as follows. Please see -the main "mlr --help" for more information on syntax for these arguments: - -i {one of csv,dkvp,nidx,pprint,xtab} - --irs {record-separator character} - --ifs {field-separator character} - --ips {pair-separator character} - --repifs - --repips - --implicit-csv-header - --no-implicit-csv-header -For example, if you have 'mlr --csv ... join -l foo ... ' then the left-file format will -be specified CSV as well unless you override with 'mlr --csv ... join --ijson -l foo' etc. -Likewise, if you have 'mlr --csv --implicit-csv-header ...' then the join-in file will be -expected to be headerless as well unless you put '--no-implicit-csv-header' after 'join'. -Please use "mlr --usage-separator-options" for information on specifying separators. -Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#join for more information -including examples. -.fi -.if n \{\ -.RE -.SS "label" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr label [options] {new1,new2,new3,...} -Given n comma-separated names, renames the first n fields of each record to -have the respective name. (Fields past the nth are left with their original -names.) Particularly useful with --inidx or --implicit-csv-header, to give -useful names to otherwise integer-indexed fields. - -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "least-frequent" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr least-frequent [options] -Shows the least frequently occurring distinct values for specified field names. -The first entry is the statistical anti-mode; the remaining are runners-up. -Options: --f {one or more comma-separated field names}. Required flag. --n {count}. Optional flag defaulting to 10. --b Suppress counts; show only field values. --o {name} Field name for output count. Default "count". -See also "mlr most-frequent". -.fi -.if n \{\ -.RE -.SS "merge-fields" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr merge-fields [options] -Computes univariate statistics for each input record, accumulated across -specified fields. -Options: --a {sum,count,...} Names of accumulators. One or more of: - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - var Compute sample variance of specified fields - stddev Compute sample standard deviation of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields --f {a,b,c} Value-field names on which to compute statistics. Requires -o. --r {a,b,c} Regular expressions for value-field names on which to compute - statistics. Requires -o. --c {a,b,c} Substrings for collapse mode. All fields which have the same names - after removing substrings will be accumulated together. Please see - examples below. --i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields. --o {name} Output field basename for -f/-r. --k Keep the input fields which contributed to the output statistics; - the default is to omit them. - -String-valued data make sense unless arithmetic on them is required, -e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, -numbers are less than strings. - -Example input data: "a_in_x=1,a_out_x=2,b_in_y=4,b_out_x=8". -Example: mlr merge-fields -a sum,count -f a_in_x,a_out_x -o foo - produces "b_in_y=4,b_out_x=8,foo_sum=3,foo_count=2" since "a_in_x,a_out_x" are - summed over. -Example: mlr merge-fields -a sum,count -r in_,out_ -o bar - produces "bar_sum=15,bar_count=4" since all four fields are summed over. -Example: mlr merge-fields -a sum,count -c in_,out_ - produces "a_x_sum=3,a_x_count=2,b_y_sum=4,b_y_count=1,b_x_sum=8,b_x_count=1" - since "a_in_x" and "a_out_x" both collapse to "a_x", "b_in_y" collapses to - "b_y", and "b_out_x" collapses to "b_x". -.fi -.if n \{\ -.RE -.SS "most-frequent" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr most-frequent [options] -Shows the most frequently occurring distinct values for specified field names. -The first entry is the statistical mode; the remaining are runners-up. -Options: --f {one or more comma-separated field names}. Required flag. --n {count}. Optional flag defaulting to 10. --b Suppress counts; show only field values. --o {name} Field name for output count. Default "count". -See also "mlr least-frequent". -.fi -.if n \{\ -.RE -.SS "nest" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr nest [options] -Explodes specified field values into separate fields/records, or reverses this. -Options: - --explode,--implode One is required. - --values,--pairs One is required. - --across-records,--across-fields One is required. - -f {field name} Required. - --nested-fs {string} Defaults to ";". Field separator for nested values. - --nested-ps {string} Defaults to ":". Pair separator for nested key-value pairs. - --evar {string} Shorthand for --explode --values ---across-records --nested-fs {string} - --ivar {string} Shorthand for --implode --values ---across-records --nested-fs {string} -Please use "mlr --usage-separator-options" for information on specifying separators. - -Examples: - - mlr nest --explode --values --across-records -f x - with input record "x=a;b;c,y=d" produces output records - "x=a,y=d" - "x=b,y=d" - "x=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --values --across-fields -f x - with input record "x=a;b;c,y=d" produces output records - "x_1=a,x_2=b,x_3=c,y=d" - Use --implode to do the reverse. - - mlr nest --explode --pairs --across-records -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,y=d" - "b=2,y=d" - "c=3,y=d" - - mlr nest --explode --pairs --across-fields -f x - with input record "x=a:1;b:2;c:3,y=d" produces output records - "a=1,b=2,c=3,y=d" - -Notes: -* With --pairs, --implode doesn't make sense since the original field name has - been lost. -* The combination "--implode --values --across-records" is non-streaming: - no output records are produced until all input records have been read. In - particular, this means it won't work in tail -f contexts. But all other flag - combinations result in streaming (tail -f friendly) data processing. -* It's up to you to ensure that the nested-fs is distinct from your data's IFS: - e.g. by default the former is semicolon and the latter is comma. -See also mlr reshape. -.fi -.if n \{\ -.RE -.SS "nothing" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr nothing [options] -Drops all input records. Useful for testing, or after tee/print/etc. have -produced other output. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "put" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr put [options] {DSL expression} -Options: --f {file name} File containing a DSL expression (see examples below). If the filename - is a directory, all *.mlr files in that directory are loaded. - --e {expression} You can use this after -f to add an expression. Example use - case: define functions/subroutines in a file you specify with -f, then call - them with an expression you specify with -e. - -(If you mix -e and -f then the expressions are evaluated in the order encountered. -Since the expression pieces are simply concatenated, please be sure to use intervening -semicolons to separate expressions.) - --s name=value: Predefines out-of-stream variable @name to have - Thus mlr put -s foo=97 '$column += @foo' is like - mlr put 'begin {@foo = 97} $column += @foo'. - The value part is subject to type-inferencing. - May be specified more than once, e.g. -s name1=value1 -s name2=value2. - Note: the value may be an environment variable, e.g. -s sequence=$SEQUENCE - --x (default false) Prints records for which {expression} evaluates to false, not true, - i.e. invert the sense of the filter expression. - --q Does not include the modified record in the output stream. - Useful for when all desired output is in begin and/or end blocks. - --S and -F: There are no-ops in Miller 6 and above, since now type-inferencing is done - by the record-readers before filter/put is executed. Supported as no-op pass-through - flags for backward compatibility. - --h|--help Show this message. - -Parser-info options: - --w Print warnings about things like uninitialized variables. - --W Same as -w, but exit the process if there are any warnings. - --p Prints the expressions's AST (abstract syntax tree), which gives full - transparency on the precedence and associativity rules of Miller's grammar, - to stdout. - --d Like -p but uses a parenthesized-expression format for the AST. - --D Like -d but with output all on one line. - --E Echo DSL expression before printing parse-tree - --v Same as -E -p. - --X Exit after parsing but before stream-processing. Useful with -v/-d/-D, if you - only want to look at parser information. - -Examples: - mlr --from example.csv put '$qr = $quantity * $rate' -More example put expressions: - If-statements: - 'if ($flag == true) { $quantity *= 10}' - 'if ($x > 0.0 { $y=log10($x); $z=sqrt($y) } else {$y = 0.0; $z = 0.0}' - Newly created fields can be read after being written: - '$new_field = $index**2; $qn = $quantity * $new_field' - Regex-replacement: - '$name = sub($name, "http.*com"i, "")' - Regex-capture: - 'if ($a =~ "([a-z]+)_([0-9]+)) { $b = "left_\e1"; $c = "right_\e2" }' - Built-in variables: - '$filename = FILENAME' - Aggregations (use mlr put -q): - '@sum += $x; end {emit @sum}' - '@sum[$shape] += $quantity; end {emit @sum, "shape"}' - '@sum[$shape][$color] += $x; end {emit @sum, "shape", "color"}' - ' - @min = min(@min,$x); - @max=max(@max,$x); - end{emitf @min, @max} - ' - -See also https://johnkerl.org/miller6/reference-dsl for more context. -.fi -.if n \{\ -.RE -.SS "regularize" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr regularize [options] -Outputs records sorted lexically ascending by keys. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "remove-empty-columns" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr remove-empty-columns [options] -Omits fields which are empty on every input row. Non-streaming. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "rename" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr rename [options] {old1,new1,old2,new2,...} -Renames specified fields. -Options: --r Treat old field names as regular expressions. "ab", "a.*b" - will match any field name containing the substring "ab" or - matching "a.*b", respectively; anchors of the form "^ab$", - "^a.*b$" may be used. New field names may be plain strings, - or may contain capture groups of the form "\e1" through - "\e9". Wrapping the regex in double quotes is optional, but - is required if you wish to follow it with 'i' to indicate - case-insensitivity. --g Do global replacement within each field name rather than - first-match replacement. --h|--help Show this message. -Examples: -mlr rename old_name,new_name' -mlr rename old_name_1,new_name_1,old_name_2,new_name_2' -mlr rename -r 'Date_[0-9]+,Date,' Rename all such fields to be "Date" -mlr rename -r '"Date_[0-9]+",Date' Same -mlr rename -r 'Date_([0-9]+).*,\e1' Rename all such fields to be of the form 20151015 -mlr rename -r '"name"i,Name' Rename "name", "Name", "NAME", etc. to "Name" -.fi -.if n \{\ -.RE -.SS "reorder" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr reorder [options] -Moves specified names to start of record, or end of record. -Options: --e Put specified field names at record end: default is to put them at record start. --f {a,b,c} Field names to reorder. --b {x} Put field names specified with -f before field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. --a {x} Put field names specified with -f after field name specified by {x}, - if any. If {x} isn't present in a given record, the specified fields - will not be moved. --h|--help Show this message. - -Examples: -mlr reorder -f a,b sends input record "d=4,b=2,a=1,c=3" to "a=1,b=2,d=4,c=3". -mlr reorder -e -f a,b sends input record "d=4,b=2,a=1,c=3" to "d=4,c=3,a=1,b=2". -.fi -.if n \{\ -.RE -.SS "repeat" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr repeat [options] -Copies input records to output records multiple times. -Options must be exactly one of the following: --n {repeat count} Repeat each input record this many times. --f {field name} Same, but take the repeat count from the specified - field name of each input record. --h|--help Show this message. -Example: - echo x=0 | mlr repeat -n 4 then put '$x=urand()' -produces: - x=0.488189 - x=0.484973 - x=0.704983 - x=0.147311 -Example: - echo a=1,b=2,c=3 | mlr repeat -f b -produces: - a=1,b=2,c=3 - a=1,b=2,c=3 -Example: - echo a=1,b=2,c=3 | mlr repeat -f c -produces: - a=1,b=2,c=3 - a=1,b=2,c=3 - a=1,b=2,c=3 -.fi -.if n \{\ -.RE -.SS "reshape" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr reshape [options] -Wide-to-long options: - -i {input field names} -o {key-field name,value-field name} - -r {input field regexes} -o {key-field name,value-field name} - These pivot/reshape the input data such that the input fields are removed - and separate records are emitted for each key/value pair. - Note: this works with tail -f and produces output records for each input - record seen. -Long-to-wide options: - -s {key-field name,value-field name} - These pivot/reshape the input data to undo the wide-to-long operation. - Note: this does not work with tail -f; it produces output records only after - all input records have been read. - -Examples: - - Input file "wide.txt": - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 - - mlr --pprint reshape -i X,Y -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -r '[A-Z]' -o item,value wide.txt - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - Input file "long.txt": - time item value - 2009-01-01 X 0.65473572 - 2009-01-01 Y 2.4520609 - 2009-01-02 X -0.89248112 - 2009-01-02 Y 0.2154713 - 2009-01-03 X 0.98012375 - 2009-01-03 Y 1.3179287 - - mlr --pprint reshape -s item,value long.txt - time X Y - 2009-01-01 0.65473572 2.4520609 - 2009-01-02 -0.89248112 0.2154713 - 2009-01-03 0.98012375 1.3179287 -See also mlr nest. -.fi -.if n \{\ -.RE -.SS "sample" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sample [options] -Reservoir sampling (subsampling without replacement), optionally by category. -See also mlr bootstrap and mlr shuffle. -Options: --g {a,b,c} Optional: group-by-field names for samples, e.g. a,b,c. --k {k} Required: number of records to output in total, or by group if using -g. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf -Usage: ../c/mlr sec2gmtdate {comma-separated list of field names} -Replaces a numeric field representing seconds since the epoch with the -corresponding GMT year-month-day timestamp; leaves non-numbers as-is. -This is nothing more than a keystroke-saver for the sec2gmtdate function: - ../c/mlr sec2gmtdate time1,time2 -is the same as - ../c/mlr put '$time1=sec2gmtdate($time1);$time2=sec2gmtdate($time2)' -.fi -.if n \{\ -.RE -.SS "sec2gmt" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sec2gmt [options] {comma-separated list of field names} -Replaces a numeric field representing seconds since the epoch with the -corresponding GMT timestamp; leaves non-numbers as-is. This is nothing -more than a keystroke-saver for the sec2gmt function: - mlr sec2gmt time1,time2 -is the same as - mlr put '$time1 = sec2gmt($time1); $time2 = sec2gmt($time2)' -Options: --1 through -9: format the seconds using 1..9 decimal places, respectively. ---millis Input numbers are treated as milliseconds since the epoch. ---micros Input numbers are treated as microseconds since the epoch. ---nanos Input numbers are treated as nanoseconds since the epoch. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "seqgen" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr seqgen [options] -Passes input records directly to output. Most useful for format conversion. -Produces a sequence of counters. Discards the input record stream. Produces -output as specified by the options - -Options: --f {name} (default "i") Field name for counters. ---start {value} (default 1) Inclusive start value. ---step {value} (default 1) Step value. ---stop {value} (default 100) Inclusive stop value. --h|--help Show this message. -Start, stop, and/or step may be floating-point. Output is integer if start, -stop, and step are all integers. Step may be negative. It may not be zero -unless start == stop. -.fi -.if n \{\ -.RE -.SS "shuffle" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr shuffle [options] -Outputs records randomly permuted. No output records are produced until -all input records are read. See also mlr bootstrap and mlr sample. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "skip-trivial-records" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr skip-trivial-records [options] -Passes through all records except those with zero fields, -or those for which all fields have empty value. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "sort" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sort {flags} -Sorts records primarily by the first specified field, secondarily by the second -field, and so on. (Any records not having all specified sort keys will appear -at the end of the output, in the order they were encountered, regardless of the -specified sort order.) The sort is stable: records that compare equal will sort -in the order they were encountered in the input record stream. - -Options: --f {comma-separated field names} Lexical ascending --r {comma-separated field names} Lexical descending --c {comma-separated field names} Case-folded lexical ascending --cr {comma-separated field names} Case-folded lexical descending --n {comma-separated field names} Numerical ascending; nulls sort last --nf {comma-separated field names} Same as -n --nr {comma-separated field names} Numerical descending; nulls sort first --h|--help Show this message. - -Example: - mlr sort -f a,b -nr x,y,z -which is the same as: - mlr sort -f a -f b -nr x -nr y -nr z -.fi -.if n \{\ -.RE -.SS "sort-within-records" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr sort-within-records [options] -Outputs records sorted lexically ascending by keys. -Options: --r Recursively sort subobjects/submaps, e.g. for JSON input. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "stats1" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr stats1 [options] -Computes univariate statistics for one or more given fields, accumulated across -the input record stream. -Options: --a {sum,count,...} Names of accumulators: one or more of: - median This is the same as p50 - p10 p25.2 p50 p98 p100 etc. - TODO: flags for interpolated percentiles - count Count instances of fields - mode Find most-frequently-occurring values for fields; first-found wins tie - antimode Find least-frequently-occurring values for fields; first-found wins tie - sum Compute sums of specified fields - mean Compute averages (sample means) of specified fields - var Compute sample variance of specified fields - stddev Compute sample standard deviation of specified fields - meaneb Estimate error bars for averages (assuming no sample autocorrelation) - skewness Compute sample skewness of specified fields - kurtosis Compute sample kurtosis of specified fields - min Compute minimum values of specified fields - max Compute maximum values of specified fields - --f {a,b,c} Value-field names on which to compute statistics ---fr {regex} Regex for value-field names on which to compute statistics - (compute statistics on values in all field names matching regex ---fx {regex} Inverted regex for value-field names on which to compute statistics - (compute statistics on values in all field names not matching regex) - --g {d,e,f} Optional group-by-field names ---gr {regex} Regex for optional group-by-field names - (group by values in field names matching regex) ---gx {regex} Inverted regex for optional group-by-field names - (group by values in field names not matching regex) - ---grfx {regex} Shorthand for --gr {regex} --fx {that same regex} - --i Use interpolated percentiles, like R's type=7; default like type=1. - Not sensical for string-valued fields.\en"); --s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). --h|--help Show this message. -[TODO: more] -Example: mlr stats1 -a min,p10,p50,p90,max -f value -g size,shape - mlr stats1 -Example: mlr stats1 -a count,mode -f size - mlr stats1 -Example: mlr stats1 -a count,mode -f size -g shape - mlr stats1 -Example: mlr stats1 -a count,mode --fr '^[a-h].*$' -gr '^k.*$' - mlr stats1 - This computes count and mode statistics on all field names beginning - with a through h, grouped by all field names starting with k. - -Notes: -* p50 and median are synonymous. -* min and max output the same results as p0 and p100, respectively, but use - less memory. -* String-valued data make sense unless arithmetic on them is required, - e.g. for sum, mean, interpolated percentiles, etc. In case of mixed data, - numbers are less than strings. -* count and mode allow text input; the rest require numeric input. - In particular, 1 and 1.0 are distinct text for count and mode. -* When there are mode ties, the first-encountered datum wins. -.fi -.if n \{\ -.RE -.SS "stats2" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr stats2 [options] -Computes bivariate statistics for one or more given field-name pairs, -accumulated across the input record stream. --a {linreg-ols,corr,...} Names of accumulators: one or more of: - linreg-ols Linear regression using ordinary least squares - linreg-pca Linear regression using principal component analysis - r2 Quality metric for linreg-ols (linreg-pca emits its own) - logireg Logistic regression - corr Sample correlation - cov Sample covariance - covx Sample-covariance matrix --f {a,b,c,d} Value-field name-pairs on which to compute statistics. - There must be an even number of names. --g {e,f,g} Optional group-by-field names. --v Print additional output for linreg-pca. --s Print iterative stats. Useful in tail -f contexts (in which - case please avoid pprint-format output since end of input - stream will never be seen). ---fit Rather than printing regression parameters, applies them to - the input data to compute new fit fields. All input records are - held in memory until end of input stream. Has effect only for - linreg-ols, linreg-pca, and logireg. -Only one of -s or --fit may be used. -Example: mlr stats2 -a linreg-pca -f x,y -Example: mlr stats2 -a linreg-ols,r2 -f x,y -g size,shape -Example: mlr stats2 -a corr -f x,y -.fi -.if n \{\ -.RE -.SS "step" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr step [options] -Computes values dependent on the previous record, optionally grouped by category. -Options: --a {delta,rsum,...} Names of steppers: comma-separated, one or more of: - delta Compute differences in field(s) between successive records - shift Include value(s) in field(s) from previous record, if any - from-first Compute differences in field(s) from first record - ratio Compute ratios in field(s) between successive records - rsum Compute running sums of field(s) between successive records - counter Count instances of field(s) between successive records - ewma Exponentially weighted moving average over successive records - --f {a,b,c} Value-field names on which to compute statistics --g {d,e,f} Optional group-by-field names --F Computes integerable things (e.g. counter) in floating point. - As of Miller 6 this happens automatically, but the flag is accepted - as a no-op for backward compatibility with Miller 5 and below. --d {x,y,z} Weights for ewma. 1 means current sample gets all weight (no - smoothing), near under under 1 is light smoothing, near over 0 is - heavy smoothing. Multiple weights may be specified, e.g. - "mlr step -a ewma -f sys_load -d 0.01,0.1,0.9". Default if omitted - is "-d 0.5". --o {a,b,c} Custom suffixes for EWMA output fields. If omitted, these default to - the -d values. If supplied, the number of -o values must be the same - as the number of -d values. --h|--help Show this message. - -Examples: - mlr step -a rsum -f request_size - mlr step -a delta -f request_size -g hostname - mlr step -a ewma -d 0.1,0.9 -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y - mlr step -a ewma -d 0.1,0.9 -o smooth,rough -f x,y -g group_name - -Please see https://miller.readthedocs.io/en/latest/reference-verbs.html#filter or -https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average -for more information on EWMA. -.fi -.if n \{\ -.RE -.SS "tac" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tac [options] -Prints records in reverse order from the order in which they were encountered. -Options: --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "tail" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tail [options] -Passes through the last n records, optionally by category. -Options: --g {a,b,c} Optional group-by-field names for head counts, e.g. a,b,c. --n {n} Head-count to print. Default 10. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "tee" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr tee [options] {filename} -Options: --a Append to existing file, if any, rather than overwriting. --p Treat filename as a pipe-to command. -Any of the output-format command-line flags (see mlr -h). Example: using - mlr --icsv --opprint put '...' then tee --ojson ./mytap.dat then stats1 ... -the input is CSV, the output is pretty-print tabular, but the tee-file output -is written in JSON format. - --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "template" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr template [options] -Places input-record fields in the order specified by list of column names. -If the input record is missing a specified field, it will be filled with the fill-with. -If the input record possesses an unspecified field, it will be discarded. -Options: - -f {a,b,c} Comma-separated field names for template, e.g. a,b,c. - -t {filename} CSV file whose header line will be used for template. ---fill-with {filler string} What to fill absent fields with. Defaults to the empty string. --h|--help Show this message. -Example: -* Specified fields are a,b,c. -* Input record is c=3,a=1,f=6. -* Output record is a=1,b=,c=3. -.fi -.if n \{\ -.RE -.SS "top" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr top [options] --f {a,b,c} Value-field names for top counts. --g {d,e,f} Optional group-by-field names for top counts. --n {count} How many records to print per category; default 1. --a Print all fields for top-value records; default is - to print only value and group-by fields. Requires a single - value-field name only. ---min Print top smallest values; default is top largest values. --F Keep top values as floats even if they look like integers. --o {name} Field name for output indices. Default "top_idx". -Prints the n records with smallest/largest values at specified fields, -optionally by category. -.fi -.if n \{\ -.RE -.SS "unflatten" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr unflatten [options] -Reverses flatten. Example: field with name 'a.b.c' and value 4 -becomes name 'a' and value '{"b": { "c": 4 }}'. -Options: --f {a,b,c} Comma-separated list of field names to unflatten (default all). --s {string} Separator, defaulting to mlr --flatsep value. --h|--help Show this message. -.fi -.if n \{\ -.RE -.SS "uniq" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr uniq [options] -Prints distinct values for specified field names. With -c, same as -count-distinct. For uniq, -f is a synonym for -g. - -Options: --g {d,e,f} Group-by-field names for uniq counts. --c Show repeat counts in addition to unique values. --n Show only the number of distinct values. --o {name} Field name for output count. Default "count". --a Output each unique record only once. Incompatible with -g. - With -c, produces unique records, with repeat counts for each. - With -n, produces only one record which is the unique-record count. - With neither -c nor -n, produces unique records. -.fi -.if n \{\ -.RE -.SS "unsparsify" -.if n \{\ -.RS 0 -.\} -.nf -Usage: mlr unsparsify [options] -Prints records with the union of field names over all input records. -For field names absent in a given record but present in others, fills in -a value. This verb retains all input before producing any output. -Options: ---fill-with {filler string} What to fill absent fields with. Defaults to - the empty string. --f {a,b,c} Specify field names to be operated on. Any other fields won't be - modified, and operation will be streaming. --h|--help Show this message. -Example: if the input is two records, one being 'a=1,b=2' and the other -being 'b=3,c=4', then the output is the two records 'a=1,b=2,c=' and -\(cqa=,b=3,c=4'. -.fi -.if n \{\ -.RE -.SH "FUNCTIONS FOR FILTER/PUT" -.sp - -.SS "abs" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Absolute value. -.fi -.if n \{\ -.RE -.SS "acos" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse trigonometric cosine. -.fi -.if n \{\ -.RE -.SS "acosh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse hyperbolic cosine. -.fi -.if n \{\ -.RE -.SS "any" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, yields a boolean true if the argument function returns true for any array/map element, false otherwise. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. -Examples: -Array example: any([10,20,30], func(e) {return $index == e}) -Map example: any({"a": "foo", "b": "bar"}, func(k,v) {return $[k] == v}) -.fi -.if n \{\ -.RE -.SS "append" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=2) Appends second argument to end of first argument, which must be an array. -.fi -.if n \{\ -.RE -.SS "apply" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, applies the function to each element of the array/map. For arrays, the function should take one argument, for array element; it should return a new element. For maps, it should take two arguments, for map-element key and value; it should return a new key-value pair (i.e. a single-entry map). -Examples: -Array example: apply([1,2,3,4,5], func(e) {return e ** 3}) returns [1, 8, 27, 64, 125]. -Map example: apply({"a":1, "b":3, "c":5}, func(k,v) {return {toupper(k): v ** 2}}) returns {"A": 1, "B":9, "C": 25}", -.fi -.if n \{\ -.RE -.SS "arrayify" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Walks through a nested map/array, converting any map with consecutive keys "1", "2", ... into an array. Useful to wrap the output of unflatten. -.fi -.if n \{\ -.RE -.SS "asin" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse trigonometric sine. -.fi -.if n \{\ -.RE -.SS "asinh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "asserting_absent" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_absent on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_array" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_array on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_bool" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_bool on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_boolean" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_boolean on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_empty" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_empty on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_empty_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_empty_map on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_error" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_error on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_float" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_float on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_int" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_int on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_map on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_nonempty_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_nonempty_map on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_not_array" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_not_array on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_not_empty" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_not_empty on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_not_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_not_map on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_not_null" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_not_null on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_null" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_null on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_numeric" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_numeric on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_present" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_present on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "asserting_string" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Aborts with an error if is_string on the argument returns false, else returns its argument. -.fi -.if n \{\ -.RE -.SS "atan" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) One-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atan2" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=2) Two-argument arctangent. -.fi -.if n \{\ -.RE -.SS "atanh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "bitcount" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=1) Count of 1-bits. -.fi -.if n \{\ -.RE -.SS "boolean" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=1) Convert int/float/bool/string to boolean. -.fi -.if n \{\ -.RE -.SS "capitalize" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Convert string's first character to uppercase. -.fi -.if n \{\ -.RE -.SS "cbrt" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Cube root. -.fi -.if n \{\ -.RE -.SS "ceil" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Ceiling: nearest integer at or above. -.fi -.if n \{\ -.RE -.SS "clean_whitespace" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Same as collapse_whitespace and strip. -.fi -.if n \{\ -.RE -.SS "collapse_whitespace" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Strip repeated whitespace from string. -.fi -.if n \{\ -.RE -.SS "cos" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Trigonometric cosine. -.fi -.if n \{\ -.RE -.SS "cosh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Hyperbolic cosine. -.fi -.if n \{\ -.RE -.SS "depth" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Prints maximum depth of map/array. Scalars have depth 0. -.fi -.if n \{\ -.RE -.SS "dhms2fsec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Recovers floating-point seconds as in dhms2fsec("5d18h53m20.250000s") = 500000.250000 -.fi -.if n \{\ -.RE -.SS "dhms2sec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Recovers integer seconds as in dhms2sec("5d18h53m20s") = 500000 -.fi -.if n \{\ -.RE -.SS "erf" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Error function. -.fi -.if n \{\ -.RE -.SS "erfc" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Complementary error function. -.fi -.if n \{\ -.RE -.SS "every" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, yields a boolean true if the argument function returns true for every array/map element, false otherwise. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. -Examples: -Array example: every(["a", "b", "c"], func(e) {return $[e] >= 0}) -Map example: every({"a": "foo", "b": "bar"}, func(k,v) {return $[k] == v}) -.fi -.if n \{\ -.RE -.SS "exp" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Exponential function e**x. -.fi -.if n \{\ -.RE -.SS "expm1" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) e**x - 1. -.fi -.if n \{\ -.RE -.SS "flatten" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=2,3) Flattens multi-level maps to single-level ones. Useful for nested JSON-like structures for non-JSON file formats like CSV. -Examples: -flatten("a", ".", {"b": { "c": 4 }}) is {"a.b.c" : 4}. -flatten("", ".", {"a": { "b": 3 }}) is {"a.b" : 3}. -Two-argument version: flatten($*, ".") is the same as flatten("", ".", $*). -.fi -.if n \{\ -.RE -.SS "float" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=1) Convert int/float/bool/string to float. -.fi -.if n \{\ -.RE -.SS "floor" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Floor: nearest integer at or below. -.fi -.if n \{\ -.RE -.SS "fmtnum" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Convert int/float/bool to string using printf-style format string, e.g. '$s = fmtnum($n, "%08d")' or '$t = fmtnum($n, "%.6e")'. -.fi -.if n \{\ -.RE -.SS "fold" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=3) Given a map or array as first argument and a function as second argument, accumulates entries into a final output -- for example, sum or product. For arrays, the function should take two arguments, for accumulated value and array element. For maps, it should take four arguments, for accumulated key and value, and map-element key and value; it should return the updated accumulator as a new key-value pair (i.e. a single-entry map). The start value for the accumulator is taken from the third argument. -Examples: -Array example: fold([1,2,3,4,5], func(acc,e) {return acc + e**3}, 10000) returns 10225. -Map example: fold({"a":1, "b":3, "c": 5}, func(acck,accv,ek,ev) {return {"sum": accv+ev**2}}, {"sum":10000}) returns 10035. -.fi -.if n \{\ -.RE -.SS "fsec2dhms" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Formats floating-point seconds as in fsec2dhms(500000.25) = "5d18h53m20.250000s" -.fi -.if n \{\ -.RE -.SS "fsec2hms" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Formats floating-point seconds as in fsec2hms(5000.25) = "01:23:20.250000" -.fi -.if n \{\ -.RE -.SS "get_keys" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Returns array of keys of map or array -.fi -.if n \{\ -.RE -.SS "get_values" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Returns array of keys of map or array -- in the latter case, returns a copy of the array -.fi -.if n \{\ -.RE -.SS "gmt2localtime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2) Convert from a GMT-time string to a local-time string. Consulting $TZ unless second argument is supplied. -Examples: -gmt2localtime("1999-12-31T22:00:00Z") = "2000-01-01 00:00:00" with TZ="Asia/Istanbul" -gmt2localtime("1999-12-31T22:00:00Z", "Asia/Istanbul") = "2000-01-01 00:00:00" -.fi -.if n \{\ -.RE -.SS "gmt2sec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Parses GMT timestamp as integer seconds since the epoch. -Example: -gmt2sec("2001-02-03T04:05:06Z") = 981173106 -.fi -.if n \{\ -.RE -.SS "gsub" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) '$name=gsub($name, "old", "new")' (replace all). -.fi -.if n \{\ -.RE -.SS "haskey" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=2) True/false if map has/hasn't key, e.g. 'haskey($*, "a")' or 'haskey(mymap, mykey)', or true/false if array index is in bounds / out of bounds. Error if 1st argument is not a map or array. Note -n..-1 alias to 1..n in Miller arrays. -.fi -.if n \{\ -.RE -.SS "hexfmt" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=1) Convert int to hex string, e.g. 255 to "0xff". -.fi -.if n \{\ -.RE -.SS "hms2fsec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Recovers floating-point seconds as in hms2fsec("01:23:20.250000") = 5000.250000 -.fi -.if n \{\ -.RE -.SS "hms2sec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Recovers integer seconds as in hms2sec("01:23:20") = 5000 -.fi -.if n \{\ -.RE -.SS "hostname" -.if n \{\ -.RS 0 -.\} -.nf - (class=system #args=0) Returns the hostname as a string. -.fi -.if n \{\ -.RE -.SS "int" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=1) Convert int/float/bool/string to int. -.fi -.if n \{\ -.RE -.SS "invqnorm" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Inverse of normal cumulative distribution function. Note that invqorm(urand()) is normally distributed. -.fi -.if n \{\ -.RE -.SS "is_absent" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) False if field is present in input, true otherwise -.fi -.if n \{\ -.RE -.SS "is_array" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is an array. -.fi -.if n \{\ -.RE -.SS "is_bool" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with boolean value. Synonymous with is_boolean. -.fi -.if n \{\ -.RE -.SS "is_boolean" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with boolean value. Synonymous with is_bool. -.fi -.if n \{\ -.RE -.SS "is_empty" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present in input with empty string value, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_empty_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is a map which is empty. -.fi -.if n \{\ -.RE -.SS "is_error" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if if argument is an error, such as taking string length of an integer. -.fi -.if n \{\ -.RE -.SS "is_float" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with value inferred to be float -.fi -.if n \{\ -.RE -.SS "is_int" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with value inferred to be int -.fi -.if n \{\ -.RE -.SS "is_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is a map. -.fi -.if n \{\ -.RE -.SS "is_nonempty_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is a map which is non-empty. -.fi -.if n \{\ -.RE -.SS "is_not_array" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is not an array. -.fi -.if n \{\ -.RE -.SS "is_not_empty" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) False if field is present in input with empty value, true otherwise -.fi -.if n \{\ -.RE -.SS "is_not_map" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is not a map. -.fi -.if n \{\ -.RE -.SS "is_not_null" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) False if argument is null (empty or absent), true otherwise. -.fi -.if n \{\ -.RE -.SS "is_null" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if argument is null (empty or absent), false otherwise. -.fi -.if n \{\ -.RE -.SS "is_numeric" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with value inferred to be int or float -.fi -.if n \{\ -.RE -.SS "is_present" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present in input, false otherwise. -.fi -.if n \{\ -.RE -.SS "is_string" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) True if field is present with string (including empty-string) value -.fi -.if n \{\ -.RE -.SS "joink" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Makes string from map/array keys. -Examples: -joink({"a":3,"b":4,"c":5}, ",") = "a,b,c". -joink([1,2,3], ",") = "1,2,3". -.fi -.if n \{\ -.RE -.SS "joinkv" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=3) Makes string from map/array key-value pairs. -Examples: -joinkv([3,4,5], "=", ",") = "1=3,2=4,3=5" -joinkv({"a":3,"b":4,"c":5}, "=", ",") = "a=3,b=4,c=5" -.fi -.if n \{\ -.RE -.SS "joinv" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Makes string from map/array values. -Examples: -joinv([3,4,5], ",") = "3,4,5" -joinv({"a":3,"b":4,"c":5}, ",") = "3,4,5" -.fi -.if n \{\ -.RE -.SS "json_parse" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Converts value from JSON-formatted string. -.fi -.if n \{\ -.RE -.SS "json_stringify" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1,2) Converts value to JSON-formatted string. Default output is single-line. With optional second boolean argument set to true, produces multiline output. -.fi -.if n \{\ -.RE -.SS "leafcount" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Counts total number of terminal values in map/array. For single-level map/array, same as length. -.fi -.if n \{\ -.RE -.SS "length" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=1) Counts number of top-level entries in array/map. Scalars have length 1. -.fi -.if n \{\ -.RE -.SS "localtime2gmt" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2) Convert from a local-time string to a GMT-time string. Consults $TZ unless second argument is supplied. -Examples: -localtime2gmt("2000-01-01 00:00:00") = "1999-12-31T22:00:00Z" with TZ="Asia/Istanbul" -localtime2gmt("2000-01-01 00:00:00", "Asia/Istanbul") = "1999-12-31T22:00:00Z" -.fi -.if n \{\ -.RE -.SS "localtime2sec" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2) Parses local timestamp as integer seconds since the epoch. Consults $TZ environment variable, unless second argument is supplied. -Examples: -localtime2sec("2001-02-03 04:05:06") = 981165906 with TZ="Asia/Istanbul" -localtime2sec("2001-02-03 04:05:06", "Asia/Istanbul") = 981165906" -.fi -.if n \{\ -.RE -.SS "log" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Natural (base-e) logarithm. -.fi -.if n \{\ -.RE -.SS "log10" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Base-10 logarithm. -.fi -.if n \{\ -.RE -.SS "log1p" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) log(1-x). -.fi -.if n \{\ -.RE -.SS "logifit" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=3) Given m and b from logistic regression, compute fit: $yhat=logifit($x,$m,$b). -.fi -.if n \{\ -.RE -.SS "lstrip" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Strip leading whitespace from string. -.fi -.if n \{\ -.RE -.SS "madd" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=3) a + b mod m (integers) -.fi -.if n \{\ -.RE -.SS "mapdiff" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=variadic) With 0 args, returns empty map. With 1 arg, returns copy of arg. With 2 or more, returns copy of arg 1 with all keys from any of remaining argument maps removed. -.fi -.if n \{\ -.RE -.SS "mapexcept" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=variadic) Returns a map with keys from remaining arguments, if any, unset. Remaining arguments can be strings or arrays of string. E.g. 'mapexcept({1:2,3:4,5:6}, 1, 5, 7)' is '{3:4}' and 'mapexcept({1:2,3:4,5:6}, [1, 5, 7])' is '{3:4}'. -.fi -.if n \{\ -.RE -.SS "mapselect" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=variadic) Returns a map with only keys from remaining arguments set. Remaining arguments can be strings or arrays of string. E.g. 'mapselect({1:2,3:4,5:6}, 1, 5, 7)' is '{1:2,5:6}' and 'mapselect({1:2,3:4,5:6}, [1, 5, 7])' is '{1:2,5:6}'. -.fi -.if n \{\ -.RE -.SS "mapsum" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=variadic) With 0 args, returns empty map. With >= 1 arg, returns a map with key-value pairs from all arguments. Rightmost collisions win, e.g. 'mapsum({1:2,3:4},{1:5})' is '{1:5,3:4}'. -.fi -.if n \{\ -.RE -.SS "max" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=variadic) Max of n numbers; null loses. -.fi -.if n \{\ -.RE -.SS "md5" -.if n \{\ -.RS 0 -.\} -.nf - (class=hashing #args=1) MD5 hash. -.fi -.if n \{\ -.RE -.SS "mexp" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=3) a ** b mod m (integers) -.fi -.if n \{\ -.RE -.SS "min" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=variadic) Min of n numbers; null loses. -.fi -.if n \{\ -.RE -.SS "mmul" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=3) a * b mod m (integers) -.fi -.if n \{\ -.RE -.SS "msub" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=3) a - b mod m (integers) -.fi -.if n \{\ -.RE -.SS "os" -.if n \{\ -.RS 0 -.\} -.nf - (class=system #args=0) Returns the operating-system name as a string. -.fi -.if n \{\ -.RE -.SS "pow" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Exponentiation. Same as **, but as a function. -.fi -.if n \{\ -.RE -.SS "qnorm" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Normal cumulative distribution function. -.fi -.if n \{\ -.RE -.SS "reduce" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, accumulates entries into a final output -- for example, sum or product. For arrays, the function should take two arguments, for accumulated value and array element, and return the accumulated element. For maps, it should take four arguments, for accumulated key and value, and map-element key and value; it should return the updated accumulator as a new key-value pair (i.e. a single-entry map). The start value for the accumulator is the first element for arrays, or the first element's key-value pair for maps. -Examples: -Array example: reduce([1,2,3,4,5], func(acc,e) {return acc + e**3}) returns 225. -Map example: reduce({"a":1, "b":3, "c": 5}, func(acck,accv,ek,ev) {return {"sum_of_squares": accv + ev**2}}) returns {"sum_of_squares": 35}. -.fi -.if n \{\ -.RE -.SS "regextract" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=2) '$name=regextract($name, "[A-Z]{3}[0-9]{2}")' -.fi -.if n \{\ -.RE -.SS "regextract_or_else" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) '$name=regextract_or_else($name, "[A-Z]{3}[0-9]{2}", "default")' -.fi -.if n \{\ -.RE -.SS "round" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Round to nearest integer. -.fi -.if n \{\ -.RE -.SS "roundm" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=2) Round to nearest multiple of m: roundm($x,$m) is the same as round($x/$m)*$m. -.fi -.if n \{\ -.RE -.SS "rstrip" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Strip trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "sec2dhms" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Formats integer seconds as in sec2dhms(500000) = "5d18h53m20s" -.fi -.if n \{\ -.RE -.SS "sec2gmt" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2) Formats seconds since epoch as GMT timestamp. Leaves non-numbers as-is. With second integer argument n, includes n decimal places for the seconds part. -Examples: -sec2gmt(1234567890) = "2009-02-13T23:31:30Z" -sec2gmt(1234567890.123456) = "2009-02-13T23:31:30Z" -sec2gmt(1234567890.123456, 6) = "2009-02-13T23:31:30.123456Z" -.fi -.if n \{\ -.RE -.SS "sec2gmtdate" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Formats seconds since epoch (integer part) as GMT timestamp with year-month-date. Leaves non-numbers as-is. -Example: -sec2gmtdate(1440768801.7) = "2015-08-28". -.fi -.if n \{\ -.RE -.SS "sec2hms" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1) Formats integer seconds as in sec2hms(5000) = "01:23:20" -.fi -.if n \{\ -.RE -.SS "sec2localdate" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2) Formats seconds since epoch (integer part) as local timestamp with year-month-date. Leaves non-numbers as-is. Consults $TZ environment variable unless second argument is supplied. -Examples: -sec2localdate(1440768801.7) = "2015-08-28" with TZ="Asia/Istanbul" -sec2localdate(1440768801.7, "Asia/Istanbul") = "2015-08-28" -.fi -.if n \{\ -.RE -.SS "sec2localtime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=1,2,3) Formats seconds since epoch (integer part) as local timestamp. Consults $TZ environment variable unless third argument is supplied. Leaves non-numbers as-is. With second integer argument n, includes n decimal places for the seconds part -Examples: -sec2localtime(1234567890) = "2009-02-14 01:31:30" with TZ="Asia/Istanbul" -sec2localtime(1234567890.123456) = "2009-02-14 01:31:30" with TZ="Asia/Istanbul" -sec2localtime(1234567890.123456, 6) = "2009-02-14 01:31:30.123456" with TZ="Asia/Istanbul" -sec2localtime(1234567890.123456, 6, "Asia/Istanbul") = "2009-02-14 01:31:30.123456" -.fi -.if n \{\ -.RE -.SS "select" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=2) Given a map or array as first argument and a function as second argument, includes each input element in the output if the function returns true. For arrays, the function should take one argument, for array element; for maps, it should take two, for map-element key and value. In either case it should return a boolean. -Examples: -Array example: select([1,2,3,4,5], func(e) {return e >= 3}) returns [3, 4, 5]. -Map example: select({"a":1, "b":3, "c":5}, func(k,v) {return v >= 3}) returns {"b":3, "c": 5}. -.fi -.if n \{\ -.RE -.SS "sgn" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) +1, 0, -1 for positive, zero, negative input respectively. -.fi -.if n \{\ -.RE -.SS "sha1" -.if n \{\ -.RS 0 -.\} -.nf - (class=hashing #args=1) SHA1 hash. -.fi -.if n \{\ -.RE -.SS "sha256" -.if n \{\ -.RS 0 -.\} -.nf - (class=hashing #args=1) SHA256 hash. -.fi -.if n \{\ -.RE -.SS "sha512" -.if n \{\ -.RS 0 -.\} -.nf - (class=hashing #args=1) SHA512 hash. -.fi -.if n \{\ -.RE -.SS "sin" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Trigonometric sine. -.fi -.if n \{\ -.RE -.SS "sinh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Hyperbolic sine. -.fi -.if n \{\ -.RE -.SS "sort" -.if n \{\ -.RS 0 -.\} -.nf - (class=higher-order-functions #args=1-2) Given a map or array as first argument and string flags or function as optional second argument, returns a sorted copy of the input. With one argument, sorts array elements naturally, and maps naturally by map keys. If the second argument is a string, it can contain any of "f" for lexical (default "n" for natural/numeric), "), "c" for case-folded lexical, and "r" for reversed/descending sort. If the second argument is a function, then for arrays it should take two arguments a and b, returning < 0, 0, or > 0 as a < b, a == b, or a > b respectively; for maps the function should take four arguments ak, av, bk, and bv, again returning < 0, 0, or > 0, using a and b's keys and values. -Examples: -Array example: sort([5,2,3,1,4], func(a,b) {return b <=> a}) returns [5,4,3,2,1]. -Map example: sort({"c":2,"a":3,"b":1}, func(ak,av,bk,bv) {return bv <=> av}) returns {"a":3,"c":2,"b":1}. -.fi -.if n \{\ -.RE -.SS "splita" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Splits string into array with type inference. -Example: -splita("3,4,5", ",") = [3,4,5] -.fi -.if n \{\ -.RE -.SS "splitax" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Splits string into array without type inference. -Example: -splita("3,4,5", ",") = ["3","4","5"] -.fi -.if n \{\ -.RE -.SS "splitkv" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=3) Splits string by separators into map with type inference. -Example: -splitkv("a=3,b=4,c=5", "=", ",") = {"a":3,"b":4,"c":5} -.fi -.if n \{\ -.RE -.SS "splitkvx" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=3) Splits string by separators into map without type inference (keys and values are strings). -Example: -splitkvx("a=3,b=4,c=5", "=", ",") = {"a":"3","b":"4","c":"5"} -.fi -.if n \{\ -.RE -.SS "splitnv" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Splits string by separator into integer-indexed map with type inference. -Example: -splitnv("a,b,c", ",") = {"1":"a","2":"b","3":"c"} -.fi -.if n \{\ -.RE -.SS "splitnvx" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=2) Splits string by separator into integer-indexed map without type inference (values are strings). -Example: -splitnvx("3,4,5", ",") = {"1":"3","2":"4","3":"5"} -.fi -.if n \{\ -.RE -.SS "sqrt" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Square root. -.fi -.if n \{\ -.RE -.SS "ssub" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) Like sub but does no regexing. No characters are special. -.fi -.if n \{\ -.RE -.SS "strftime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=2) Formats seconds since the epoch as timestamp. Format strings are as in the C library (please see "man strftime" on your system), with the Miller-specific addition of "%1S" through "%9S" which format the seconds with 1 through 9 decimal places, respectively. ("%S" uses no decimal places.) See also strftime_local. -Examples: -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%SZ") = "2015-08-28T13:33:21Z" -strftime(1440768801.7,"%Y-%m-%dT%H:%M:%3SZ") = "2015-08-28T13:33:21.700Z" -.fi -.if n \{\ -.RE -.SS "strftime_local" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=2,3) Like strftime but consults the $TZ environment variable to get local time zone. -Examples: -strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%S %z") = "2015-08-28 16:33:21 +0300" with TZ="Asia/Istanbul" -strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%3S %z") = "2015-08-28 16:33:21.700 +0300" with TZ="Asia/Istanbul" -strftime_local(1440768801.7, "%Y-%m-%d %H:%M:%3S %z", "Asia/Istanbul") = "2015-08-28 16:33:21.700 +0300" -.fi -.if n \{\ -.RE -.SS "string" -.if n \{\ -.RS 0 -.\} -.nf - (class=conversion #args=1) Convert int/float/bool/string/array/map to string. -.fi -.if n \{\ -.RE -.SS "strip" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Strip leading and trailing whitespace from string. -.fi -.if n \{\ -.RE -.SS "strlen" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) String length. -.fi -.if n \{\ -.RE -.SS "strptime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=2) strptime: Parses timestamp as floating-point seconds since the epoch. See also strptime_local. -Examples: -strptime("2015-08-28T13:33:21Z", "%Y-%m-%dT%H:%M:%SZ") = 1440768801.000000 -strptime("2015-08-28T13:33:21.345Z", "%Y-%m-%dT%H:%M:%SZ") = 1440768801.345000 -strptime("1970-01-01 00:00:00 -0400", "%Y-%m-%d %H:%M:%S %z") = 14400 -strptime("1970-01-01 00:00:00 EET", "%Y-%m-%d %H:%M:%S %Z") = -7200 -.fi -.if n \{\ -.RE -.SS "strptime_local" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=2,3) Like stpftime but consults the $TZ environment variable to get local time zone. -Examples: -strptime_local("2015-08-28T13:33:21Z", "%Y-%m-%dT%H:%M:%SZ") = 1440758001 with TZ="Asia/Istanbul" -strptime_local("2015-08-28T13:33:21.345Z","%Y-%m-%dT%H:%M:%SZ") = 1440758001.345 with TZ="Asia/Istanbul" -strptime_local("2015-08-28 13:33:21", "%Y-%m-%d %H:%M:%S") = 1440758001 with TZ="Asia/Istanbul" -strptime_local("2015-08-28 13:33:21", "%Y-%m-%d %H:%M:%S", "Asia/Istanbul") = 1440758001 -.fi -.if n \{\ -.RE -.SS "sub" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) '$name=sub($name, "old", "new")' (replace once). -.fi -.if n \{\ -.RE -.SS "substr" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) substr is an alias for substr0. See also substr1. Miller is generally 1-up with all array and string indices, but, this is a backward-compatibility issue with Miller 5 and below. Arrays are new in Miller 6; the substr function is older. -.fi -.if n \{\ -.RE -.SS "substr0" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) substr0(s,m,n) gives substring of s from 0-up position m to n inclusive. Negative indices -len .. -1 alias to 0 .. len-1. See also substr and substr1. -.fi -.if n \{\ -.RE -.SS "substr1" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=3) substr1(s,m,n) gives substring of s from 1-up position m to n inclusive. Negative indices -len .. -1 alias to 1 .. len. See also substr and substr0. -.fi -.if n \{\ -.RE -.SS "system" -.if n \{\ -.RS 0 -.\} -.nf - (class=system #args=1) Run command string, yielding its stdout minus final carriage return. -.fi -.if n \{\ -.RE -.SS "systime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=0) help string will go here -.fi -.if n \{\ -.RE -.SS "systimeint" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=0) help string will go here -.fi -.if n \{\ -.RE -.SS "tan" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Trigonometric tangent. -.fi -.if n \{\ -.RE -.SS "tanh" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=1) Hyperbolic tangent. -.fi -.if n \{\ -.RE -.SS "tolower" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Convert string to lowercase. -.fi -.if n \{\ -.RE -.SS "toupper" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=1) Convert string to uppercase. -.fi -.if n \{\ -.RE -.SS "truncate" -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=2) Truncates string first argument to max length of int second argument. -.fi -.if n \{\ -.RE -.SS "typeof" -.if n \{\ -.RS 0 -.\} -.nf - (class=typing #args=1) Convert argument to type of argument (e.g. "str"). For debug. -.fi -.if n \{\ -.RE -.SS "unflatten" -.if n \{\ -.RS 0 -.\} -.nf - (class=collections #args=2) Reverses flatten. Useful for nested JSON-like structures for non-JSON file formats like CSV. See also arrayify. -Example: -unflatten({"a.b.c" : 4}, ".") is {"a": "b": { "c": 4 }}. -.fi -.if n \{\ -.RE -.SS "uptime" -.if n \{\ -.RS 0 -.\} -.nf - (class=time #args=0) help string will go here -.fi -.if n \{\ -.RE -.SS "urand" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=0) Floating-point numbers uniformly distributed on the unit interval. -Example: -Int-valued example: '$n=floor(20+urand()*11)'. -.fi -.if n \{\ -.RE -.SS "urand32" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=0) Integer uniformly distributed 0 and 2**32-1 inclusive. -.fi -.if n \{\ -.RE -.SS "urandint" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=2) Integer uniformly distributed between inclusive integer endpoints. -.fi -.if n \{\ -.RE -.SS "urandrange" -.if n \{\ -.RS 0 -.\} -.nf - (class=math #args=2) Floating-point numbers uniformly distributed on the interval [a, b). -.fi -.if n \{\ -.RE -.SS "version" -.if n \{\ -.RS 0 -.\} -.nf - (class=system #args=0) Returns the Miller version as a string. -.fi -.if n \{\ -.RE -.SS "!" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=1) Logical negation. -.fi -.if n \{\ -.RE -.SS "!=" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric inequality. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS "!=~" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String (left-hand side) does not match regex (right-hand side), e.g. '$name !=~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS "%" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Remainder; never negative-valued (pythonic). -.fi -.if n \{\ -.RE -.SS "&" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise AND. -.fi -.if n \{\ -.RE -.SS "&&" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Logical AND. -.fi -.if n \{\ -.RE -.SS "*" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Multiplication, with integer*integer overflow to float. -.fi -.if n \{\ -.RE -.SS "**" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Exponentiation. Same as pow, but as an infix operator. -.fi -.if n \{\ -.RE -.SS "+" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=1,2) Addition as binary operator; unary plus operator. -.fi -.if n \{\ -.RE -.SS "-" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=1,2) Subtraction as binary operator; unary negation operator. -.fi -.if n \{\ -.RE -.SS "." -.if n \{\ -.RS 0 -.\} -.nf - (class=string #args=2) String concatenation. -.fi -.if n \{\ -.RE -.SS ".*" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Multiplication, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".+" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Addition, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS ".-" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Subtraction, with integer-to-integer overflow. -.fi -.if n \{\ -.RE -.SS "./" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Integer division; not pythonic. -.fi -.if n \{\ -.RE -.SS "/" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Division. Integer / integer is floating-point. -.fi -.if n \{\ -.RE -.SS "//" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Pythonic integer division, rounding toward negative. -.fi -.if n \{\ -.RE -.SS "<" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric less-than. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS "<<" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise left-shift. -.fi -.if n \{\ -.RE -.SS "<=" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric less-than-or-equals. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS "<=>" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Comparator, nominally for sorting. Given a <=> b, returns <0, 0, >0 as a < b, a == b, or a > b, respectively. -.fi -.if n \{\ -.RE -.SS "==" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric equality. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS "=~" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String (left-hand side) matches regex (right-hand side), e.g. '$name =~ "^a.*b$"'. -.fi -.if n \{\ -.RE -.SS ">" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric greater-than. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS ">=" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) String/numeric greater-than-or-equals. Mixing number and string results in string compare. -.fi -.if n \{\ -.RE -.SS ">>" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise signed right-shift. -.fi -.if n \{\ -.RE -.SS ">>>" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise unsigned right-shift. -.fi -.if n \{\ -.RE -.SS "?:" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=3) Standard ternary operator. -.fi -.if n \{\ -.RE -.SS "??" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Absent-coalesce operator. $a ?? 1 evaluates to 1 if $a isn't defined in the current record. -.fi -.if n \{\ -.RE -.SS "???" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Absent-coalesce operator. $a ?? 1 evaluates to 1 if $a isn't defined in the current record, or has empty value. -.fi -.if n \{\ -.RE -.SS "^" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise XOR. -.fi -.if n \{\ -.RE -.SS "^^" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Logical XOR. -.fi -.if n \{\ -.RE -.SS "|" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=2) Bitwise OR. -.fi -.if n \{\ -.RE -.SS "||" -.if n \{\ -.RS 0 -.\} -.nf - (class=boolean #args=2) Logical OR. -.fi -.if n \{\ -.RE -.SS "~" -.if n \{\ -.RS 0 -.\} -.nf - (class=arithmetic #args=1) Bitwise NOT. Beware '$y=~$x' since =~ is the regex-match operator: try '$y = ~$x'. -.fi -.if n \{\ -.RE -.SH "KEYWORDS FOR PUT AND FILTER" -.sp - -.SS "all" -.if n \{\ -.RS 0 -.\} -.nf -all: used in "emit", "emitp", and "unset" as a synonym for @* -.fi -.if n \{\ -.RE -.SS "begin" -.if n \{\ -.RS 0 -.\} -.nf -begin: defines a block of statements to be executed before input records -are ingested. The body statements must be wrapped in curly braces. - - Example: 'begin { @count = 0 }' -.fi -.if n \{\ -.RE -.SS "bool" -.if n \{\ -.RS 0 -.\} -.nf -bool: declares a boolean local variable in the current curly-braced scope. -Type-checking happens at assignment: 'bool b = 1' is an error. -.fi -.if n \{\ -.RE -.SS "break" -.if n \{\ -.RS 0 -.\} -.nf -break: causes execution to continue after the body of the current for/while/do-while loop. -.fi -.if n \{\ -.RE -.SS "call" -.if n \{\ -.RS 0 -.\} -.nf -call: used for invoking a user-defined subroutine. - - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' -.fi -.if n \{\ -.RE -.SS "continue" -.if n \{\ -.RS 0 -.\} -.nf -continue: causes execution to skip the remaining statements in the body of -the current for/while/do-while loop. For-loop increments are still applied. -.fi -.if n \{\ -.RE -.SS "do" -.if n \{\ -.RS 0 -.\} -.nf -do: with "while", introduces a do-while loop. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "dump" -.if n \{\ -.RS 0 -.\} -.nf -dump: prints all currently defined out-of-stream variables immediately -to stdout as JSON. - -With >, >>, or |, the data do not become part of the output record stream but -are instead redirected. - -The > and >> are for write and append, as in the shell, but (as with awk) the -file-overwrite for > is on first write, not per record. The | is for piping to -a process which will process the data. There will be one open file for each -distinct file name (for > and >>) or one subordinate process for each distinct -value of the piped-to command (for |). Output-formatting flags are taken from -the main command line. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' - Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' -.fi -.if n \{\ -.RE -.SS "edump" -.if n \{\ -.RS 0 -.\} -.nf -edump: prints all currently defined out-of-stream variables immediately -to stderr as JSON. - - Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' -.fi -.if n \{\ -.RE -.SS "elif" -.if n \{\ -.RS 0 -.\} -.nf -elif: the way Miller spells "else if". The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "else" -.if n \{\ -.RS 0 -.\} -.nf -else: terminates an if/elif/elif chain. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "emit" -.if n \{\ -.RS 0 -.\} -.nf -emit: inserts an out-of-stream variable into the output record stream. Hashmap -indices present in the data but not slotted by emit arguments are not output. - -With >, >>, or |, the data do not become part of the output record stream but -are instead redirected. - -The > and >> are for write and append, as in the shell, but (as with awk) the -file-overwrite for > is on first write, not per record. The | is for piping to -a process which will process the data. There will be one open file for each -distinct file name (for > and >>) or one subordinate process for each distinct -value of the piped-to command (for |). Output-formatting flags are taken from -the main command line. - -You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, -etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' - Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' - -Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "emitf" -.if n \{\ -.RS 0 -.\} -.nf -emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the -output record stream. - -With >, >>, or |, the data do not become part of the output record stream but -are instead redirected. - -The > and >> are for write and append, as in the shell, but (as with awk) the -file-overwrite for > is on first write, not per record. The | is for piping to -a process which will process the data. There will be one open file for each -distinct file name (for > and >>) or one subordinate process for each distinct -value of the piped-to command (for |). Output-formatting flags are taken from -the main command line. - -You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, -etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' - Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' - Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' - -Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "emitp" -.if n \{\ -.RS 0 -.\} -.nf -emitp: inserts an out-of-stream variable into the output record stream. -Hashmap indices present in the data but not slotted by emitp arguments are -output concatenated with ":". - -With >, >>, or |, the data do not become part of the output record stream but -are instead redirected. - -The > and >> are for write and append, as in the shell, but (as with awk) the -file-overwrite for > is on first write, not per record. The | is for piping to -a process which will process the data. There will be one open file for each -distinct file name (for > and >>) or one subordinate process for each distinct -value of the piped-to command (for |). Output-formatting flags are taken from -the main command line. - -You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, -etc., to control the format of the output if the output is redirected. See also mlr -h. - - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' - Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' - Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' - -Please see https://johnkerl.org/miller6://johnkerl.org/miller/doc for more information. -.fi -.if n \{\ -.RE -.SS "end" -.if n \{\ -.RS 0 -.\} -.nf -end: defines a block of statements to be executed after input records -are ingested. The body statements must be wrapped in curly braces. - - Example: 'end { emit @count }' - Example: 'end { eprint "Final count is " . @count }' -.fi -.if n \{\ -.RE -.SS "eprint" -.if n \{\ -.RS 0 -.\} -.nf -eprint: prints expression immediately to stderr. - - Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' -.fi -.if n \{\ -.RE -.SS "eprintn" -.if n \{\ -.RS 0 -.\} -.nf -eprintn: prints expression immediately to stderr, without trailing newline. - - Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' -.fi -.if n \{\ -.RE -.SS "false" -.if n \{\ -.RS 0 -.\} -.nf -false: the boolean literal value. -.fi -.if n \{\ -.RE -.SS "filter" -.if n \{\ -.RS 0 -.\} -.nf -filter: includes/excludes the record in the output record stream. - - Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' - -Instead of put with 'filter false' you can simply use put -q. The following -uses the input record to accumulate data but only prints the running sum -without printing the input record: - - Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' -.fi -.if n \{\ -.RE -.SS "float" -.if n \{\ -.RS 0 -.\} -.nf -float: declares a floating-point local variable in the current curly-braced scope. -Type-checking happens at assignment: 'float x = 0' is an error. -.fi -.if n \{\ -.RE -.SS "for" -.if n \{\ -.RS 0 -.\} -.nf -for: defines a for-loop using one of three styles. The body statements must -be wrapped in curly braces. -For-loop over stream record: - - Example: 'for (k, v in $*) { ... }' - -For-loop over out-of-stream variables: - - Example: 'for (k, v in @counts) { ... }' - Example: 'for ((k1, k2), v in @counts) { ... }' - Example: 'for ((k1, k2, k3), v in @*) { ... }' - -C-style for-loop: - - Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' -.fi -.if n \{\ -.RE -.SS "func" -.if n \{\ -.RS 0 -.\} -.nf -func: used for defining a user-defined function. - - Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' -.fi -.if n \{\ -.RE -.SS "if" -.if n \{\ -.RS 0 -.\} -.nf -if: starts an if/elif/elif chain. The body statements must be wrapped -in curly braces. -.fi -.if n \{\ -.RE -.SS "in" -.if n \{\ -.RS 0 -.\} -.nf -in: used in for-loops over stream records or out-of-stream variables. -.fi -.if n \{\ -.RE -.SS "int" -.if n \{\ -.RS 0 -.\} -.nf -int: declares an integer local variable in the current curly-braced scope. -Type-checking happens at assignment: 'int x = 0.0' is an error. -.fi -.if n \{\ -.RE -.SS "map" -.if n \{\ -.RS 0 -.\} -.nf -map: declares an map-valued local variable in the current curly-braced scope. -Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is -always OK. map b = a is OK or not depending on whether a is a map. -.fi -.if n \{\ -.RE -.SS "num" -.if n \{\ -.RS 0 -.\} -.nf -num: declares an int/float local variable in the current curly-braced scope. -Type-checking happens at assignment: 'num b = true' is an error. -.fi -.if n \{\ -.RE -.SS "print" -.if n \{\ -.RS 0 -.\} -.nf -print: prints expression immediately to stdout. - - Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' - Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' - Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' -.fi -.if n \{\ -.RE -.SS "printn" -.if n \{\ -.RS 0 -.\} -.nf -printn: prints expression immediately to stdout, without trailing newline. - - Example: mlr --from f.dat put -q 'printn "."; end { print "" }' -.fi -.if n \{\ -.RE -.SS "return" -.if n \{\ -.RS 0 -.\} -.nf -return: specifies the return value from a user-defined function. -Omitted return statements (including via if-branches) result in an absent-null -return value, which in turns results in a skipped assignment to an LHS. -.fi -.if n \{\ -.RE -.SS "stderr" -.if n \{\ -.RS 0 -.\} -.nf -stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename -to print to standard error. -.fi -.if n \{\ -.RE -.SS "stdout" -.if n \{\ -.RS 0 -.\} -.nf -stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename -to print to standard output. -.fi -.if n \{\ -.RE -.SS "str" -.if n \{\ -.RS 0 -.\} -.nf -str: declares a string local variable in the current curly-braced scope. -Type-checking happens at assignment. -.fi -.if n \{\ -.RE -.SS "subr" -.if n \{\ -.RS 0 -.\} -.nf -subr: used for defining a subroutine. - - Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' -.fi -.if n \{\ -.RE -.SS "tee" -.if n \{\ -.RS 0 -.\} -.nf -tee: prints the current record to specified file. -This is an immediate print to the specified file (except for pprint format -which of course waits until the end of the input stream to format all output). - -The > and >> are for write and append, as in the shell, but (as with awk) the -file-overwrite for > is on first write, not per record. The | is for piping to -a process which will process the data. There will be one open file for each -distinct file name (for > and >>) or one subordinate process for each distinct -value of the piped-to command (for |). Output-formatting flags are taken from -the main command line. - -You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, -etc., to control the format of the output. See also mlr -h. - -emit with redirect and tee with redirect are identical, except tee can only -output $*. - - Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' - Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' - Example: mlr --from f.dat put 'tee > stderr, $*' - Example: mlr --from f.dat put -q 'tee | "tr \e[a-z\e\e] \e[A-Z\e\e]", $*' - Example: mlr --from f.dat put -q 'tee | "tr \e[a-z\e\e] \e[A-Z\e\e] > /tmp/data-".$a, $*' - Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' - Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' -.fi -.if n \{\ -.RE -.SS "true" -.if n \{\ -.RS 0 -.\} -.nf -true: the boolean literal value. -.fi -.if n \{\ -.RE -.SS "unset" -.if n \{\ -.RS 0 -.\} -.nf -unset: clears field(s) from the current record, or an out-of-stream or local variable. - - Example: mlr --from f.dat put 'unset $x' - Example: mlr --from f.dat put 'unset $*' - Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' - Example: mlr --from f.dat put '...; unset @sums' - Example: mlr --from f.dat put '...; unset @sums["green"]' - Example: mlr --from f.dat put '...; unset @*' -.fi -.if n \{\ -.RE -.SS "var" -.if n \{\ -.RS 0 -.\} -.nf -var: declares an untyped local variable in the current curly-braced scope. - - Examples: 'var a=1', 'var xyz=""' -.fi -.if n \{\ -.RE -.SS "while" -.if n \{\ -.RS 0 -.\} -.nf -while: introduces a while loop, or with "do", introduces a do-while loop. -The body statements must be wrapped in curly braces. -.fi -.if n \{\ -.RE -.SS "ENV" -.if n \{\ -.RS 0 -.\} -.nf -ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' -.fi -.if n \{\ -.RE -.SS "FILENAME" -.if n \{\ -.RS 0 -.\} -.nf -FILENAME: evaluates to the name of the current file being processed. -.fi -.if n \{\ -.RE -.SS "FILENUM" -.if n \{\ -.RS 0 -.\} -.nf -FILENUM: evaluates to the number of the current file being processed, -starting with 1. -.fi -.if n \{\ -.RE -.SS "FNR" -.if n \{\ -.RS 0 -.\} -.nf -FNR: evaluates to the number of the current record within the current file -being processed, starting with 1. Resets at the start of each file. -.fi -.if n \{\ -.RE -.SS "IFS" -.if n \{\ -.RS 0 -.\} -.nf -IFS: evaluates to the input field separator from the command line. -.fi -.if n \{\ -.RE -.SS "IPS" -.if n \{\ -.RS 0 -.\} -.nf -IPS: evaluates to the input pair separator from the command line. -.fi -.if n \{\ -.RE -.SS "IRS" -.if n \{\ -.RS 0 -.\} -.nf -IRS: evaluates to the input record separator from the command line, -or to LF or CRLF from the input data if in autodetect mode (which is -the default). -.fi -.if n \{\ -.RE -.SS "M_E" -.if n \{\ -.RS 0 -.\} -.nf -M_E: the mathematical constant e. -.fi -.if n \{\ -.RE -.SS "M_PI" -.if n \{\ -.RS 0 -.\} -.nf -M_PI: the mathematical constant pi. -.fi -.if n \{\ -.RE -.SS "NF" -.if n \{\ -.RS 0 -.\} -.nf -NF: evaluates to the number of fields in the current record. -.fi -.if n \{\ -.RE -.SS "NR" -.if n \{\ -.RS 0 -.\} -.nf -NR: evaluates to the number of the current record over all files -being processed, starting with 1. Does not reset at the start of each file. -.fi -.if n \{\ -.RE -.SS "OFS" -.if n \{\ -.RS 0 -.\} -.nf -OFS: evaluates to the output field separator from the command line. -.fi -.if n \{\ -.RE -.SS "OPS" -.if n \{\ -.RS 0 -.\} -.nf -OPS: evaluates to the output pair separator from the command line. -.fi -.if n \{\ -.RE -.SS "ORS" -.if n \{\ -.RS 0 -.\} -.nf -ORS: evaluates to the output record separator from the command line, -or to LF or CRLF from the input data if in autodetect mode (which is -the default). -.fi -.if n \{\ -.RE -.SH "AUTHOR" -.sp -Miller is written by John Kerl . -.sp -This manual page has been composed from Miller's help output by Eric MSP Veith . -.SH "SEE ALSO" -.sp -awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io diff --git a/msys2-build.sh b/msys2-build.sh deleted file mode 100755 index c30002366..000000000 --- a/msys2-build.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -echo ================================================================ - -# Note: I need this on my Windows machine with MSYS2 but it causes an -# error on Appveyor. -# sed 's/-lm/-lm -lpcreposix/' c/Makefile.am > temp; mv temp c/Makefile.am -# sed 's/-lm/-lm -lpcreposix/' c/unit_test/Makefile.am > temp; mv temp c/unit_test/Makefile.am - -sed 's/#undef MLR_ON_MSYS2/#define MLR_ON_MSYS2/' c/lib/mlr_arch.h > temp; mv temp c/lib/mlr_arch.h - -echo ================================================================ -./configure -make -C c/parsing lemon.exe -make diff --git a/name-ideas.txt b/name-ideas.txt deleted file mode 100644 index 872df793d..000000000 --- a/name-ideas.txt +++ /dev/null @@ -1,10 +0,0 @@ -package name: -* mohawk (more than awk ... but in some ways it's also less than awk) -* mohoc -* seneca (sibling tribe of the mohawk) -* qoppa (key-value-pair) -* qipper (key-value-pair) -* miller (glenn or steve -- old-school-throwback style) -* thomp (tool for ordered hash-maps) -* thump (tool for ordered hash-maps) -* prefer an invented name to make it more easily searchable